(function($,n,t){function i(i,r){function e(n){$(u).each(function(){var t=$(this);this===n.target||t.has(n.target).length||t.triggerHandler(r,[n.target])})}r=r||i+t;var u=$(),f=i+"."+r+"-special-event";$.event.special[r]={setup:function(){u=u.add(this);u.length===1&&$(n).bind(f,e)},teardown:function(){u=u.not(this);u.length===0&&$(n).unbind(f)},add:function(n){var t=n.handler;n.handler=function(n,i){n.target=i;t.apply(this,arguments)}}}}$.map("click dblclick touchstart mousemove mousedown mouseup mouseover mouseout change select submit keydown keypress keyup".split(" "),function(n){i(n)});i("focusin","focus"+t);i("focusout","blur"+t);$.addOutsideEvent=i})(jQuery,document,"outside");!function(n,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():n.PhotoSwipe=t()}(this,function(){"use strict";return function(n,t,i,r){var f={features:null,bind:function(n,t,i,r){var f=(r?"remove":"add")+"EventListener",u;for(t=t.split(" "),u=0;u<t.length;u++)t[u]&&n[f](t[u],i,!1)},isArray:function(n){return n instanceof Array},createEl:function(n,t){var i=document.createElement(t||"div");return n&&(i.className=n),i},getScrollY:function(){var n=window.pageYOffset;return void 0!==n?n:document.documentElement.scrollTop},unbind:function(n,t,i){f.bind(n,t,i,!0)},removeClass:function(n,t){var i=new RegExp("(\\s|^)"+t+"(\\s|$)");n.className=n.className.replace(i," ").replace(/^\s\s*/,"").replace(/\s\s*$/,"")},addClass:function(n,t){f.hasClass(n,t)||(n.className+=(n.className?" ":"")+t)},hasClass:function(n,t){return n.className&&new RegExp("(^|\\s)"+t+"(\\s|$)").test(n.className)},getChildByClass:function(n,t){for(var i=n.firstChild;i;){if(f.hasClass(i,t))return i;i=i.nextSibling}},arraySearch:function(n,t,i){for(var r=n.length;r--;)if(n[r][i]===t)return r;return-1},extend:function(n,t,i){for(var r in t)if(t.hasOwnProperty(r)){if(i&&n.hasOwnProperty(r))continue;n[r]=t[r]}},easing:{sine:{out:function(n){return Math.sin(n*(Math.PI/2))},inOut:function(n){return-(Math.cos(Math.PI*n)-1)/2}},cubic:{out:function(n){return--n*n*n+1}}},detectFeatures:function(){var o,i,s,r,e,l;if(f.features)return f.features;var a=f.createEl(),v=a.style,t="",n={};(n.oldIE=document.all&&!document.addEventListener,n.touch="ontouchstart"in window,window.requestAnimationFrame&&(n.raf=window.requestAnimationFrame,n.caf=window.cancelAnimationFrame),n.pointerEvent=navigator.pointerEnabled||navigator.msPointerEnabled,n.pointerEvent)||(o=navigator.userAgent,/iP(hone|od)/.test(navigator.platform)&&(i=navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/),i&&i.length>0&&(i=parseInt(i[1],10),i>=1&&i<8&&(n.isOldIOSPhone=!0))),s=o.match(/Android\s([0-9\.]*)/),r=s?s[1]:0,r=parseFloat(r),r>=1&&(r<4.4&&(n.isOldAndroid=!0),n.androidVersion=r),n.isMobileOpera=/opera mini|opera mobi/i.test(o));for(var u,h,y=["transform","perspective","animationName"],p=["","webkit","Moz","ms","O"],c=0;c<4;c++){for(t=p[c],e=0;e<3;e++)u=y[e],h=t+(t?u.charAt(0).toUpperCase()+u.slice(1):u),!n[u]&&h in v&&(n[u]=h);t&&!n.raf&&(t=t.toLowerCase(),n.raf=window[t+"RequestAnimationFrame"],n.raf&&(n.caf=window[t+"CancelAnimationFrame"]||window[t+"CancelRequestAnimationFrame"]))}return n.raf||(l=0,n.raf=function(n){var t=(new Date).getTime(),i=Math.max(0,16-(t-l)),r=window.setTimeout(function(){n(t+i)},i);return l=t+i,r},n.caf=function(n){clearTimeout(n)}),n.svg=!!document.createElementNS&&!!document.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect,f.features=n,n}},si,uf,ff,et;f.detectFeatures();f.features.oldIE&&(f.bind=function(n,t,i,r){t=t.split(" ");for(var u,e=(r?"detach":"attach")+"Event",o=function(){i.handleEvent.call(i)},f=0;f<t.length;f++)if(u=t[f])if("object"==typeof i&&i.handleEvent){if(r){if(!i["oldIE"+u])return!1}else i["oldIE"+u]=o;n[e]("on"+u,i["oldIE"+u])}else n[e]("on"+u,i)});var u=this,pe=25,dt=3,e={allowPanToNext:!0,spacing:.12,bgOpacity:1,mouseUsed:!1,loop:!0,pinchToClose:!0,closeOnScroll:!0,closeOnVerticalDrag:!0,verticalDragRange:.75,hideAnimationDuration:333,showAnimationDuration:333,showHideOpacity:!1,focus:!0,escKey:!0,arrowKeys:!0,mainScrollEndFriction:.35,panEndFriction:.35,isClickableElement:function(n){return"A"===n.tagName},getDoubleTapZoom:function(n,t){return n?1:t.initialZoomLevel<.7?1:1.33},maxSpreadZoom:1.33,modal:!0,scaleMode:"fit"};f.extend(e,r);var gi,we,of,h,be,vt,lr,eu,b,l,hi,sf,hf,cf,ou,y,ke,su,hu,ar,cu,nr,gt,yt,lu,lf,de,ge,af,ci,a,vf,no,au,vr,yf,yr,pr,ct,pf,li,tr,vu,ai,ot,pt,to,io,s,wt,d,ni,wf,yu,pu,wu,bu,ti=function(){return{x:0,y:0}},ii=ti(),ir=ti(),o=ti(),k={},ri=0,rr={},rt=ti(),ht=0,ku=!0,bf=[],wr={},vi=!1,br=function(n,t){f.extend(u,t.publicMethods);bf.push(n)},du=function(n){var t=ft();return n>t-1?n-t:n<0?t+n:n},kr={},v=function(n,t){return kr[n]||(kr[n]=[]),kr[n].push(t)},c=function(n){var i=kr[n],r,t;if(i)for(r=Array.prototype.slice.call(arguments),r.shift(),t=0;t<i.length;t++)i[t].apply(u,r)},lt=function(){return(new Date).getTime()},bt=function(n){pu=n;u.bg.style.opacity=n*e.bgOpacity},ro=function(n,t,i,r,f){(!vi||f&&f!==u.currItem)&&(r/=f?f.fitRatio:u.currItem.fitRatio);n[nr]=sf+t+"px, "+i+"px"+hf+" scale("+r+")"},p=function(n){wt&&(n&&(l>u.currItem.fitRatio?vi||(di(u.currItem,!1,!0),vi=!0):vi&&(di(u.currItem),vi=!1)),ro(wt,o.x,o.y,l))},dr=function(n){n.container&&ro(n.container.style,n.initialPosition.x,n.initialPosition.y,n.initialZoomLevel,n)},ur=function(n,t){t[nr]=sf+n+"px, 0px"+hf},gu=function(n,t){if(!e.loop&&t){var r=h+(rt.x*ri-n)/rt.x,i=Math.round(n-kt.x);(r<0&&i>0||r>=ft()-1&&i<0)&&(n=kt.x+i*e.mainScrollEndFriction)}kt.x=n;ur(n,be)},kf=function(n,t){var i=iu[n]-rr[n];return ir[n]+ii[n]+i-i*(t/hi)},g=function(n,t){n.x=t.x;n.y=t.y;t.id&&(n.id=t.id)},uo=function(n){n.x=Math.round(n.x);n.y=Math.round(n.y)},df=null,gf=function(){df&&(f.unbind(document,"mousemove",gf),f.addClass(n,"pswp--has_mouse"),e.mouseUsed=!0,c("mouseUsed"));df=setTimeout(function(){df=null},100)},os=function(){f.bind(document,"keydown",u);a.transform&&f.bind(u.scrollWrap,"click",u);e.mouseUsed||f.bind(document,"mousemove",gf);f.bind(window,"resize scroll orientationchange",u);c("bindEvents")},ss=function(){f.unbind(window,"resize scroll orientationchange",u);f.unbind(window,"scroll",b.scroll);f.unbind(document,"keydown",u);f.unbind(document,"mousemove",gf);a.transform&&f.unbind(u.scrollWrap,"click",u);ct&&f.unbind(window,lr,u);clearTimeout(vf);c("unbindEvents")},ne=function(n,t){var i=uu(u.currItem,k,n);return t&&(s=i),i},fo=function(n){return n||(n=u.currItem),n.initialZoomLevel},eo=function(n){return n||(n=u.currItem),n.w>0?e.maxSpreadZoom:1},oo=function(n,t,i,r){return r===u.currItem.initialZoomLevel?(i[n]=u.currItem.initialPosition[n],!0):(i[n]=kf(n,r),i[n]>t.min[n]?(i[n]=t.min[n],!0):i[n]<t.max[n]&&(i[n]=t.max[n],!0))},hs=function(){if(nr){var t=a.perspective&&!yt;return sf="translate"+(t?"3d(":"("),void(hf=a.perspective?", 0px)":")")}nr="left";f.addClass(n,"pswp--ie");ur=function(n,t){t.left=n+"px"};dr=function(n){var i=n.fitRatio>1?1:n.fitRatio,t=n.container.style,r=i*n.w,u=i*n.h;t.width=r+"px";t.height=u+"px";t.left=n.initialPosition.x+"px";t.top=n.initialPosition.y+"px"};p=function(){if(wt){var n=wt,t=u.currItem,i=t.fitRatio>1?1:t.fitRatio,r=i*t.w,f=i*t.h;n.width=r+"px";n.height=f+"px";n.left=o.x+"px";n.top=o.y+"px"}}},cs=function(n){var t="";e.escKey&&27===n.keyCode?t="close":e.arrowKeys&&(37===n.keyCode?t="prev":39===n.keyCode&&(t="next"));t&&(n.ctrlKey||n.altKey||n.shiftKey||n.metaKey||(n.preventDefault?n.preventDefault():n.returnValue=!1,u[t]()))},ls=function(n){n&&(tr||li||d||yr)&&(n.preventDefault(),n.stopPropagation())},so=function(){u.setScrollOffset(0,f.getScrollY())},ut={},fr=0,gr=function(n){ut[n]&&(ut[n].raf&&lf(ut[n].raf),fr--,delete ut[n])},te=function(n){ut[n]&&gr(n);ut[n]||(fr++,ut[n]={})},nu=function(){for(var n in ut)ut.hasOwnProperty(n)&&gr(n)},tu=function(n,t,i,r,u,f,e){var o,h=lt(),s;te(n);s=function(){if(ut[n]){if(o=lt()-h,o>=r)return gr(n),f(i),void(e&&e());f((i-t)*u(o/r)+t);ut[n].raf=lu(s)}};s()},as={shout:c,listen:v,viewportSize:k,options:e,isMainScrollAnimating:function(){return d},getZoomLevel:function(){return l},getCurrentIndex:function(){return h},isDragging:function(){return ct},isZooming:function(){return pt},setScrollOffset:function(n,t){rr.x=n;ci=rr.y=t;c("updateScrollOffset",rr)},applyZoomPan:function(n,t,i,r){o.x=t;o.y=i;l=n;p(r)},init:function(){var i,o,s,r;if(!gi&&!we){for(u.framework=f,u.template=n,u.bg=f.getChildByClass(n,"pswp__bg"),de=n.className,gi=!0,a=f.detectFeatures(),lu=a.raf,lf=a.caf,nr=a.transform,af=a.oldIE,u.scrollWrap=f.getChildByClass(n,"pswp__scroll-wrap"),u.container=f.getChildByClass(u.scrollWrap,"pswp__container"),be=u.container.style,u.itemHolders=y=[{el:u.container.children[0],wrap:0,index:-1},{el:u.container.children[1],wrap:0,index:-1},{el:u.container.children[2],wrap:0,index:-1}],y[0].el.style.display=y[2].el.style.display="none",hs(),b={resize:u.updateSize,orientationchange:function(){clearTimeout(vf);vf=setTimeout(function(){k.x!==u.scrollWrap.clientWidth&&u.updateSize()},500)},scroll:so,keydown:cs,click:ls},o=a.isOldIOSPhone||a.isOldAndroid||a.isMobileOpera,a.animationName&&a.transform&&!o||(e.showAnimationDuration=e.hideAnimationDuration=0),i=0;i<bf.length;i++)u["init"+bf[i]]();for(t&&(s=u.ui=new t(u,f),s.init()),c("firstUpdate"),h=h||e.index||0,(isNaN(h)||h<0||h>=ft())&&(h=0),u.currItem=oi(h),(a.isOldIOSPhone||a.isOldAndroid)&&(ku=!1),n.setAttribute("aria-hidden","false"),e.modal&&(ku?n.style.position="fixed":(n.style.position="absolute",n.style.top=f.getScrollY()+"px")),void 0===ci&&(c("initialLayout"),ci=ge=f.getScrollY()),r="pswp--open ",e.mainClass&&(r+=e.mainClass+" "),e.showHideOpacity&&(r+="pswp--animate_opacity "),r+=yt?"pswp--touch":"pswp--notouch",r+=a.animationName?" pswp--css_animation":"",r+=a.svg?" pswp--svg":"",f.addClass(n,r),u.updateSize(),vt=-1,ht=null,i=0;i<dt;i++)ur((i+vt)*rt.x,y[i].el.style);af||f.bind(u.scrollWrap,eu,u);v("initialZoomInEnd",function(){u.setContent(y[0],h-1);u.setContent(y[2],h+1);y[0].el.style.display=y[2].el.style.display="block";e.focus&&n.focus();os()});u.setContent(y[1],h);u.updateCurrItem();c("afterInit");ku||(cf=setInterval(function(){fr||ct||pt||l!==u.currItem.initialZoomLevel||u.updateSize()},1e3));f.addClass(n,"pswp--visible")}},close:function(){gi&&(gi=!1,we=!0,c("close"),ss(),ko(u.currItem,null,!0,u.destroy))},destroy:function(){c("destroy");bi&&clearTimeout(bi);n.setAttribute("aria-hidden","true");n.className=de;cf&&clearInterval(cf);f.unbind(u.scrollWrap,eu,u);f.unbind(window,"scroll",u);ue();nu();kr=null},panTo:function(n,t,i){i||(n>s.min.x?n=s.min.x:n<s.max.x&&(n=s.max.x),t>s.min.y?t=s.min.y:t<s.max.y&&(t=s.max.y));o.x=n;o.y=t;p()},handleEvent:function(n){n=n||window.event;b[n.type]&&b[n.type](n)},goTo:function(n){n=du(n);var t=n-h;ht=t;h=n;u.currItem=oi(h);ri-=t;gu(rt.x*ri);nu();d=!1;u.updateCurrItem()},next:function(){u.goTo(h+1)},prev:function(){u.goTo(h-1)},updateCurrZoomItem:function(n){if(n&&c("beforeChange",0),y[1].el.children.length){var t=y[1].el.children[0];wt=f.hasClass(t,"pswp__zoom-wrap")?t.style:null}else wt=null;s=u.currItem.bounds;hi=l=u.currItem.initialZoomLevel;o.x=s.center.x;o.y=s.center.y;n&&c("afterChange")},invalidateCurrItems:function(){ou=!0;for(var n=0;n<dt;n++)y[n].item&&(y[n].item.needsUpdate=!0)},updateCurrItem:function(n){var t,i,r,f;if(0!==ht&&(i=Math.abs(ht),!(n&&i<2))){for(u.currItem=oi(h),vi=!1,c("beforeChange",ht),i>=dt&&(vt+=ht+(ht>0?-dt:dt),i=dt),r=0;r<i;r++)ht>0?(t=y.shift(),y[dt-1]=t,vt++,ur((vt+2)*rt.x,t.el.style),u.setContent(t,h-i+r+1+1)):(t=y.pop(),y.unshift(t),vt--,ur(vt*rt.x,t.el.style),u.setContent(t,h+i-r-2));wt&&1===Math.abs(ht)&&(f=oi(ke),f.initialZoomLevel!==l&&(uu(f,k),di(f),dr(f)));ht=0;u.updateCurrZoomItem();ke=h;c("afterChange")}},updateSize:function(t){var w,v,i,r,a;if(!ku&&e.modal){if(w=f.getScrollY(),ci!==w&&(n.style.top=w+"px",ci=w),!t&&wr.x===window.innerWidth&&wr.y===window.innerHeight)return;wr.x=window.innerWidth;wr.y=window.innerHeight;n.style.height=wr.y+"px"}if(k.x=u.scrollWrap.clientWidth,k.y=u.scrollWrap.clientHeight,so(),rt.x=k.x+Math.round(k.x*e.spacing),rt.y=k.y,gu(rt.x*ri),c("beforeResize"),void 0!==vt){for(a=0;a<dt;a++)v=y[a],ur((a+vt)*rt.x,v.el.style),r=h+a-1,e.loop&&ft()>2&&(r=du(r)),i=oi(r),i&&(ou||i.needsUpdate||!i.bounds)?(u.cleanSlide(i),u.setContent(v,r),1===a&&(u.currItem=i,u.updateCurrZoomItem(!0)),i.needsUpdate=!1):v.index===-1&&r>=0&&u.setContent(v,r),i&&i.container&&(uu(i,k),di(i),dr(i));ou=!1}hi=l=u.currItem.initialZoomLevel;s=u.currItem.bounds;s&&(o.x=s.center.x,o.y=s.center.y,p(!0));c("resize")},zoomTo:function(n,t,i,r,u){var h,e,c,s,a;t&&(hi=l,iu.x=Math.abs(t.x)-o.x,iu.y=Math.abs(t.y)-o.y,g(ir,o));h=ne(n,!1);e={};oo("x",h,e,n);oo("y",h,e,n);c=l;s={x:o.x,y:o.y};uo(e);a=function(t){1===t?(l=n,o.x=e.x,o.y=e.y):(l=(n-c)*t+c,o.x=(e.x-s.x)*t+s.x,o.y=(e.y-s.y)*t+s.y);u&&u(t);p(1===t)};i?tu("customZoomTo",0,1,i,r||f.easing.sine.inOut,a):a(1)}},ho=30,ie=10,nt={},yi={},tt={},it={},er={},ui=[],pi={},wi=[],or={},nf=0,tf=ti(),re=0,kt=ti(),iu=ti(),sr=ti(),vs=function(n,t){return n.x===t.x&&n.y===t.y},ys=function(n,t){return Math.abs(n.x-t.x)<pe&&Math.abs(n.y-t.y)<pe},co=function(n,t){return or.x=Math.abs(n.x-t.x),or.y=Math.abs(n.y-t.y),Math.sqrt(or.x*or.x+or.y*or.y)},ue=function(){vu&&(lf(vu),vu=null)},lo=function(){ct&&(vu=lu(lo),gs())},ps=function(){return!("fit"===e.scaleMode&&l===u.currItem.initialZoomLevel)},ao=function(n,t){return!(!n||n===document)&&!(n.getAttribute("class")&&n.getAttribute("class").indexOf("pswp__scroll-wrap")>-1)&&(t(n)?n:ao(n.parentNode,t))},fe={},vo=function(n,t){return fe.prevent=!ao(n.target,e.isClickableElement),c("preventDragEvent",n,t,fe),fe.prevent},yo=function(n,t){return t.x=n.pageX,t.y=n.pageY,t.id=n.identifier,t},po=function(n,t,i){i.x=.5*(n.x+t.x);i.y=.5*(n.y+t.y)},ws=function(n,t,i){if(n-au>50){var r=wi.length>2?wi.shift():{};r.x=t;r.y=i;wi.push(r);au=n}},wo=function(){var n=o.y-u.currItem.initialPosition.y;return 1-Math.abs(n/(k.y/2))},ru={},bs={},fi=[],ee=function(n){for(;fi.length>0;)fi.pop();return gt?(bu=0,ui.forEach(function(n){0===bu?fi[0]=n:1===bu&&(fi[1]=n);bu++})):n.type.indexOf("touch")>-1?n.touches&&n.touches.length>0&&(fi[0]=yo(n.touches[0],ru),n.touches.length>1&&(fi[1]=yo(n.touches[1],bs))):(ru.x=n.pageX,ru.y=n.pageY,ru.id="",fi[0]=ru),fi},bo=function(n,t){var f,c,a,i,y=0,r=o[n]+t[n],p=t[n]>0,h=kt.x+t.x,v=kt.x-pi.x;return f=r>s.min[n]||r<s.max[n]?e.panEndFriction:1,r=o[n]+t[n]*f,!e.allowPanToNext&&l!==u.currItem.initialZoomLevel||(wt?"h"!==ni||"x"!==n||li||(p?(r>s.min[n]&&(f=e.panEndFriction,y=s.min[n]-r,c=s.min[n]-ir[n]),(c<=0||v<0)&&ft()>1?(i=h,v<0&&h>pi.x&&(i=pi.x)):s.min.x!==s.max.x&&(a=r)):(r<s.max[n]&&(f=e.panEndFriction,y=r-s.max[n],c=ir[n]-s.max[n]),(c<=0||v>0)&&ft()>1?(i=h,v>0&&h<pi.x&&(i=pi.x)):s.min.x!==s.max.x&&(a=r))):i=h,"x"!==n)?void(d||ai||l>u.currItem.fitRatio&&(o[n]+=t[n]*f)):(void 0!==i&&(gu(i,!0),ai=i!==pi.x),s.min.x!==s.max.x&&(void 0!==a?o.x=a:ai||(o.x+=t.x*f)),void 0!==i)},ks=function(n){var i,t,r;if(!("mousedown"===n.type&&n.button>0)){if(hr)return void n.preventDefault();pr&&"mousedown"===n.type||((vo(n,!0)&&n.preventDefault(),c("pointerDown"),gt)&&(i=f.arraySearch(ui,n.pointerId,"id"),i<0&&(i=ui.length),ui[i]={x:n.pageX,y:n.pageY,id:n.pointerId}),t=ee(n),r=t.length,ot=null,nu(),ct&&1!==r||(ct=wf=!0,f.bind(window,lr,u),yf=wu=yu=yr=ai=tr=pf=li=!1,ni=null,c("firstTouchStart",t),g(ir,o),ii.x=ii.y=0,g(it,t[0]),g(er,it),pi.x=rt.x*ri,wi=[{x:it.x,y:it.y}],au=no=lt(),ne(l,!0),ue(),lo()),!pt&&r>1&&!d&&!ai&&(hi=l,li=!1,pt=pf=!0,ii.y=ii.x=0,g(ir,o),g(nt,t[0]),g(yi,t[1]),po(nt,yi,sr),iu.x=Math.abs(sr.x)-o.x,iu.y=Math.abs(sr.y)-o.y,to=io=co(nt,yi)))}},ds=function(n){var i,r,t,u;(n.preventDefault(),gt)&&(i=f.arraySearch(ui,n.pointerId,"id"),i>-1&&(r=ui[i],r.x=n.pageX,r.y=n.pageY));ct&&(t=ee(n),ni||tr||pt?ot=t:kt.x!==rt.x*ri?ni="h":(u=Math.abs(t[0].x-it.x)-Math.abs(t[0].y-it.y),Math.abs(u)>=ie&&(ni=u>0?"h":"v",ot=t)))},gs=function(){var r,f,n,y,a,v,w;if(ot&&(r=ot.length,0!==r))if(g(nt,ot[0]),tt.x=nt.x-it.x,tt.y=nt.y-it.y,pt&&r>1){if(it.x=nt.x,it.y=nt.y,!tt.x&&!tt.y&&vs(ot[1],yi))return;g(yi,ot[1]);li||(li=!0,c("zoomGestureStarted"));f=co(nt,yi);n=uh(f);n>u.currItem.initialZoomLevel+u.currItem.initialZoomLevel/15&&(wu=!0);var t=1,i=fo(),h=eo();n<i?e.pinchToClose&&!wu&&hi<=u.currItem.initialZoomLevel?(y=i-n,a=1-y/(i/1.2),bt(a),c("onPinchClose",a),yu=!0):(t=(i-n)/i,t>1&&(t=1),n=i-t*(i/3)):n>h&&(t=(n-h)/(6*i),t>1&&(t=1),n=h+t*i);t<0&&(t=0);to=f;po(nt,yi,tf);ii.x+=tf.x-sr.x;ii.y+=tf.y-sr.y;g(sr,tf);o.x=kf("x",n);o.y=kf("y",n);yf=n>l;l=n;p()}else{if(!ni)return;if(wf&&(wf=!1,Math.abs(tt.x)>=ie&&(tt.x-=ot[0].x-er.x),Math.abs(tt.y)>=ie&&(tt.y-=ot[0].y-er.y)),it.x=nt.x,it.y=nt.y,0===tt.x&&0===tt.y)return;if("v"===ni&&e.closeOnVerticalDrag&&!ps())return ii.y+=tt.y,o.y+=tt.y,v=wo(),yr=!0,c("onVerticalDrag",v),bt(v),void p();ws(lt(),nt.x,nt.y);tr=!0;s=u.currItem.bounds;w=bo("x",tt);w||(bo("y",tt),uo(o),p())}},nh=function(n){var i,h,b,r,v,t,s,k,y,w,nt;if(a.isOldAndroid){if(pr&&"mouseup"===n.type)return;n.type.indexOf("touch")>-1&&(clearTimeout(pr),pr=setTimeout(function(){pr=0},600))}if(c("pointerUp"),vo(n,!1)&&n.preventDefault(),gt&&(h=f.arraySearch(ui,n.pointerId,"id"),h>-1&&((i=ui.splice(h,1)[0],navigator.pointerEnabled)?i.type=n.pointerType||"mouse":(b={4:"mouse",2:"touch",3:"pen"},i.type=b[n.pointerType],i.type||(i.type=n.pointerType||"mouse")))),v=ee(n),t=v.length,"mouseup"===n.type&&(t=0),2===t)return ot=null,!0;if(1===t&&g(er,v[0]),0!==t||ni||d||(i||("mouseup"===n.type?i={x:n.pageX,y:n.pageY,type:"mouse"}:n.changedTouches&&n.changedTouches[0]&&(i={x:n.changedTouches[0].pageX,y:n.changedTouches[0].pageY,type:"touch"})),c("touchRelease",n,i)),s=-1,0===t&&(ct=!1,f.unbind(window,lr,u),ue(),pt?s=0:re!==-1&&(s=lt()-re)),re=1===t?lt():-1,r=s!==-1&&s<150?"zoom":"swipe",pt&&t<2&&(pt=!1,1===t&&(r="zoomPointerUp"),c("zoomGestureEnded")),ot=null,tr||li||d||yr)if(nu(),vr||(vr=th()),vr.calculateSwipeSpeed("x"),yr)k=wo(),k<e.verticalDragRange?u.close():(y=o.y,w=pu,tu("verticalDrag",0,1,300,f.easing.cubic.out,function(n){o.y=(u.currItem.initialPosition.y-y)*n+y;bt((1-w)*n+w);p()}),c("onVerticalDrag",1));else{if((ai||d)&&0===t){if(nt=rh(r,vr),nt)return;r="zoomPointerUp"}if(!d)return"swipe"!==r?void fh():void(!ai&&l>u.currItem.fitRatio&&ih(vr))}},th=function(){var t,i,n={lastFlickOffset:{},lastFlickDist:{},lastFlickSpeed:{},slowDownRatio:{},slowDownRatioReverse:{},speedDecelerationRatio:{},speedDecelerationRatioAbs:{},distanceOffset:{},backAnimDestination:{},backAnimStarted:{},calculateSwipeSpeed:function(r){wi.length>1?(t=lt()-au+50,i=wi[wi.length-2][r]):(t=lt()-no,i=er[r]);n.lastFlickOffset[r]=it[r]-i;n.lastFlickDist[r]=Math.abs(n.lastFlickOffset[r]);n.lastFlickSpeed[r]=n.lastFlickDist[r]>20?n.lastFlickOffset[r]/t:0;Math.abs(n.lastFlickSpeed[r])<.1&&(n.lastFlickSpeed[r]=0);n.slowDownRatio[r]=.95;n.slowDownRatioReverse[r]=1-n.slowDownRatio[r];n.speedDecelerationRatio[r]=1},calculateOverBoundsAnimOffset:function(t,i){n.backAnimStarted[t]||(o[t]>s.min[t]?n.backAnimDestination[t]=s.min[t]:o[t]<s.max[t]&&(n.backAnimDestination[t]=s.max[t]),void 0!==n.backAnimDestination[t]&&(n.slowDownRatio[t]=.7,n.slowDownRatioReverse[t]=1-n.slowDownRatio[t],n.speedDecelerationRatioAbs[t]<.05&&(n.lastFlickSpeed[t]=0,n.backAnimStarted[t]=!0,tu("bounceZoomPan"+t,o[t],n.backAnimDestination[t],i||300,f.easing.sine.out,function(n){o[t]=n;p()}))))},calculateAnimOffset:function(t){n.backAnimStarted[t]||(n.speedDecelerationRatio[t]=n.speedDecelerationRatio[t]*(n.slowDownRatio[t]+n.slowDownRatioReverse[t]-n.slowDownRatioReverse[t]*n.timeDiff/10),n.speedDecelerationRatioAbs[t]=Math.abs(n.lastFlickSpeed[t]*n.speedDecelerationRatio[t]),n.distanceOffset[t]=n.lastFlickSpeed[t]*n.speedDecelerationRatio[t]*n.timeDiff,o[t]+=n.distanceOffset[t])},panAnimLoop:function(){if(ut.zoomPan&&(ut.zoomPan.raf=lu(n.panAnimLoop),n.now=lt(),n.timeDiff=n.now-n.lastNow,n.lastNow=n.now,n.calculateAnimOffset("x"),n.calculateAnimOffset("y"),p(),n.calculateOverBoundsAnimOffset("x"),n.calculateOverBoundsAnimOffset("y"),n.speedDecelerationRatioAbs.x<.05&&n.speedDecelerationRatioAbs.y<.05))return o.x=Math.round(o.x),o.y=Math.round(o.y),p(),void gr("zoomPan")}};return n},ih=function(n){return n.calculateSwipeSpeed("y"),s=u.currItem.bounds,n.backAnimDestination={},n.backAnimStarted={},Math.abs(n.lastFlickSpeed.x)<=.05&&Math.abs(n.lastFlickSpeed.y)<=.05?(n.speedDecelerationRatioAbs.x=n.speedDecelerationRatioAbs.y=0,n.calculateOverBoundsAnimOffset("x"),n.calculateOverBoundsAnimOffset("y"),!0):(te("zoomPan"),n.lastNow=lt(),void n.panAnimLoop())},rh=function(n,t){var r,o,l,a,v,i,s,y;return d||(nf=h),"swipe"===n&&(l=it.x-er.x,a=t.lastFlickDist.x<10,l>ho&&(a||t.lastFlickOffset.x>20)?o=-1:l<-ho&&(a||t.lastFlickOffset.x<-20)&&(o=1)),o&&(h+=o,h<0?(h=e.loop?ft()-1:0,v=!0):h>=ft()&&(h=e.loop?0:ft()-1,v=!0),v&&!e.loop||(ht+=o,ri-=o,r=!0)),s=rt.x*ri,y=Math.abs(s-kt.x),r||s>kt.x==t.lastFlickSpeed.x>0?(i=Math.abs(t.lastFlickSpeed.x)>0?y/Math.abs(t.lastFlickSpeed.x):333,i=Math.min(i,400),i=Math.max(i,250)):i=333,nf===h&&(r=!1),d=!0,c("mainScrollAnimStart"),tu("mainScroll",kt.x,s,i,f.easing.cubic.out,gu,function(){nu();d=!1;nf=-1;(r||nf!==h)&&u.updateCurrItem();c("mainScrollAnimComplete")}),r&&u.updateCurrItem(!0),r},uh=function(n){return 1/io*n*hi},fh=function(){var n=l,t=fo(),r=eo(),e,o,i;return l<t?n=t:l>r&&(n=r),o=1,i=pu,yu&&!yf&&!wu&&l<t?(u.close(),!0):(yu&&(e=function(n){bt((o-i)*n+i)}),u.zoomTo(n,0,200,f.easing.cubic.out,e),!0)};br("Gestures",{publicMethods:{initGestures:function(){var n=function(n,t,i,r,u){su=n+t;hu=n+i;ar=n+r;cu=u?n+u:""};gt=a.pointerEvent;gt&&a.touch&&(a.touch=!1);gt?navigator.pointerEnabled?n("pointer","down","move","up","cancel"):n("MSPointer","Down","Move","Up","Cancel"):a.touch?(n("touch","start","move","end","cancel"),yt=!0):n("mouse","down","move","up");lr=hu+" "+ar+" "+cu;eu=su;gt&&!yt&&(yt=navigator.maxTouchPoints>1||navigator.msMaxTouchPoints>1);u.likelyTouchDevice=yt;b[su]=ks;b[hu]=ds;b[ar]=nh;cu&&(b[cu]=b[ar]);a.touch&&(eu+=" mousedown",lr+=" mousemove mouseup",b.mousedown=b[su],b.mousemove=b[hu],b.mouseup=b[ar]);yt||(e.allowPanToNext=!1)}}});var bi,ei,oe,hr,oi,ft,eh,ko=function(t,i,r,s){var a,v,y,w;if(bi&&clearTimeout(bi),hr=!0,oe=!0,t.initialLayout?(a=t.initialLayout,t.initialLayout=null):a=e.getThumbBoundsFn&&e.getThumbBoundsFn(h),v=r?e.hideAnimationDuration:e.showAnimationDuration,y=function(){gr("initialZoom");r?(u.template.removeAttribute("style"),u.bg.removeAttribute("style")):(bt(1),i&&(i.style.display="block"),f.addClass(n,"pswp--animated-in"),c("initialZoom"+(r?"OutEnd":"InEnd")));s&&s();hr=!1},!v||!a||void 0===a.x)return c("initialZoom"+(r?"Out":"In")),l=t.initialZoomLevel,g(o,t.initialPosition),p(),n.style.opacity=r?0:1,bt(1),void(v?setTimeout(function(){y()},v):y());w=function(){var s=of,i=!u.currItem.src||u.currItem.loadError||e.showHideOpacity;t.miniImg&&(t.miniImg.style.webkitBackfaceVisibility="hidden");r||(l=a.w/t.w,o.x=a.x,o.y=a.y-ge,u[i?"template":"bg"].style.opacity=.001,p());te("initialZoom");r&&!s&&f.removeClass(n,"pswp--animated-in");i&&(r?f[(s?"remove":"add")+"Class"](n,"pswp--animate_opacity"):setTimeout(function(){f.addClass(n,"pswp--animate_opacity")},30));bi=setTimeout(function(){if(c("initialZoom"+(r?"Out":"In")),r){var e=a.w/t.w,u={x:o.x,y:o.y},h=l,w=pu,b=function(t){1===t?(l=e,o.x=a.x,o.y=a.y-ci):(l=(e-h)*t+h,o.x=(a.x-u.x)*t+u.x,o.y=(a.y-ci-u.y)*t+u.y);p();i?n.style.opacity=1-t:bt(w-t*w)};s?tu("initialZoom",0,1,v,f.easing.cubic.out,b,y):(b(1),bi=setTimeout(y,v+20))}else l=t.initialZoomLevel,g(o,t.initialPosition),p(),bt(1),i?n.style.opacity=1:bt(1),bi=setTimeout(y,v+20)},r?25:90)};w()},st={},ki=[],oh={index:0,errorMsg:'<div class="pswp__error-msg"><a href="%url%" target="_blank">The image<\/a> could not be loaded.<\/div>',forceProgressiveLoading:!1,preload:[1,1],getNumItemsFn:function(){return ei.length}},go=function(){return{center:{x:0,y:0},max:{x:0,y:0},min:{x:0,y:0}}},sh=function(n,t,i){var r=n.bounds;r.center.x=Math.round((st.x-t)/2);r.center.y=Math.round((st.y-i)/2)+n.vGap.top;r.max.x=t>st.x?Math.round(st.x-t):r.center.x;r.max.y=i>st.y?Math.round(st.y-i)+n.vGap.top:r.center.y;r.min.x=t>st.x?0:r.center.x;r.min.y=i>st.y?n.vGap.top:r.center.y},uu=function(n,t,i){var r,u,f,o;return n.src&&!n.loadError?(r=!i,(r&&(n.vGap||(n.vGap={top:0,bottom:0}),c("parseVerticalMargin",n)),st.x=t.x,st.y=t.y-n.vGap.top-n.vGap.bottom,r)&&(u=st.x/n.w,f=st.y/n.h,n.fitRatio=u<f?u:f,o=e.scaleMode,"orig"===o?i=1:"fit"===o&&(i=n.fitRatio),i>1&&(i=1),n.initialZoomLevel=i,n.bounds||(n.bounds=go())),!i)?void 0:(sh(n,n.w*i,n.h*i),r&&i===n.initialZoomLevel&&(n.initialPosition=n.bounds.center),n.bounds):(n.w=n.h=0,n.initialZoomLevel=n.fitRatio=1,n.bounds=go(),n.initialPosition=n.bounds.center,n.bounds)},rf=function(n,t,i,r,f,e){t.loadError||r&&(t.imageAppended=!0,di(t,r,t===u.currItem&&vi),i.appendChild(r),e&&setTimeout(function(){t&&t.loaded&&t.placeholder&&(t.placeholder.style.display="none",t.placeholder=null)},500))},ns=function(n){n.loading=!0;n.loaded=!1;var t=n.img=f.createEl("pswp__img","img"),i=function(){n.loading=!1;n.loaded=!0;n.loadComplete?n.loadComplete(n):n.img=null;t.onload=t.onerror=null;t=null};return t.onload=i,t.onerror=function(){n.loadError=!0;i()},t.src=n.src,t},ts=function(n,t){if(n.src&&n.loadError&&n.container)return t&&(n.container.innerHTML=""),n.container.innerHTML=e.errorMsg.replace("%url%",n.src),!0},di=function(n,t,i){if(n.src){t||(t=n.container.lastChild);var r=i?n.w:Math.round(n.w*n.fitRatio),u=i?n.h:Math.round(n.h*n.fitRatio);n.placeholder&&!n.loaded&&(n.placeholder.style.width=r+"px",n.placeholder.style.height=u+"px");t.style.width=r+"px";t.style.height=u+"px"}},is=function(){if(ki.length){for(var n,t=0;t<ki.length;t++)n=ki[t],n.holder.index===n.index&&rf(n.index,n.item,n.baseDiv,n.img,!1,n.clearPlaceholder);ki=[]}};br("Controller",{publicMethods:{lazyLoadItem:function(n){n=du(n);var t=oi(n);t&&(!t.loaded&&!t.loading||ou)&&(c("gettingData",n,t),t.src&&ns(t))},initController:function(){f.extend(e,oh,!0);u.items=ei=i;oi=u.getItemAt;ft=e.getNumItemsFn;eh=e.loop;ft()<3&&(e.loop=!1);v("beforeChange",function(n){for(var i=e.preload,r=null===n||n>=0,f=Math.min(i[0],ft()),o=Math.min(i[1],ft()),t=1;t<=(r?o:f);t++)u.lazyLoadItem(h+t);for(t=1;t<=(r?f:o);t++)u.lazyLoadItem(h-t)});v("initialLayout",function(){u.currItem.initialLayout=e.getThumbBoundsFn&&e.getThumbBoundsFn(h)});v("mainScrollAnimComplete",is);v("initialZoomInEnd",is);v("destroy",function(){for(var n,t=0;t<ei.length;t++)n=ei[t],n.container&&(n.container=null),n.placeholder&&(n.placeholder=null),n.img&&(n.img=null),n.preloader&&(n.preloader=null),n.loadError&&(n.loaded=n.loadError=!1);ki=null})},getItemAt:function(n){return n>=0&&void 0!==ei[n]&&ei[n]},allowProgressiveImg:function(){return e.forceProgressiveLoading||!yt||e.mouseUsed||screen.width>1200},setContent:function(n,t){var l,o,i,r,v,s;if(e.loop&&(t=du(t)),l=u.getItemAt(n.index),l&&(l.container=null),i=u.getItemAt(t),!i)return void(n.el.innerHTML="");c("gettingData",t,i);n.index=t;n.item=i;r=i.container=f.createEl("pswp__zoom-wrap");(!i.src&&i.html&&(i.html.tagName?r.appendChild(i.html):r.innerHTML=i.html),ts(i),uu(i,k),!i.src||i.loadError||i.loaded)?i.src&&!i.loadError&&(o=f.createEl("pswp__img","img"),o.style.opacity=1,o.src=i.src,di(i,o),rf(t,i,r,o,!0)):((i.loadComplete=function(i){if(gi){if(n&&n.index===t){if(ts(i,!0))return i.loadComplete=i.img=null,uu(i,k),dr(i),void(n.index===h&&u.updateCurrZoomItem());i.imageAppended?!hr&&i.placeholder&&(i.placeholder.style.display="none",i.placeholder=null):a.transform&&(d||hr)?ki.push({item:i,baseDiv:r,img:i.img,index:t,holder:n,clearPlaceholder:!0}):rf(t,i,r,i.img,d||hr,!0)}i.loadComplete=null;i.img=null;c("imageLoadComplete",t,i)}},f.features.transform)&&(v="pswp__img pswp__img--placeholder",v+=i.msrc?"":" pswp__img--placeholder--blank",s=f.createEl(v,i.msrc?"img":""),i.msrc&&(s.src=i.msrc),di(i,s),r.appendChild(s),i.placeholder=s),i.loading||ns(i),u.allowProgressiveImg()&&(!oe&&a.transform?ki.push({item:i,baseDiv:r,img:i.img,index:t,holder:n}):rf(t,i,r,i.img,!0,!0)));oe||t!==h?dr(i):(wt=r.style,ko(i,o||i.img));n.el.innerHTML="";n.el.appendChild(r)},cleanSlide:function(n){n.img&&(n.img.onload=n.img.onerror=null);n.loaded=n.loading=n.img=n.imageAppended=!1}}});uf={};ff=function(n,t,i){var r=document.createEvent("CustomEvent"),u={origEvent:n,target:n.target,releasePoint:t,pointerType:i||"touch"};r.initCustomEvent("pswpTap",!0,!0,u);n.target.dispatchEvent(r)};br("Tap",{publicMethods:{initTap:function(){v("firstTouchStart",u.onTapStart);v("touchRelease",u.onTapRelease);v("destroy",function(){uf={};si=null})},onTapStart:function(n){n.length>1&&(clearTimeout(si),si=null)},onTapRelease:function(n,t){var i,r;if(t&&!tr&&!pf&&!fr){if(i=t,si&&(clearTimeout(si),si=null,ys(i,uf)))return void c("doubleTap",i);if("mouse"===t.type)return void ff(n,t,"mouse");if(r=n.target.tagName.toUpperCase(),"BUTTON"===r||f.hasClass(n.target,"pswp__single-tap"))return void ff(n,t);g(uf,i);si=setTimeout(function(){ff(n,t);si=null},300)}}}});br("DesktopZoom",{publicMethods:{initDesktopZoom:function(){af||(yt?v("mouseUsed",function(){u.setupDesktopZoom()}):u.setupDesktopZoom(!0))},setupDesktopZoom:function(t){var r,e,i,o;et={};r="wheel mousewheel DOMMouseScroll";v("bindEvents",function(){f.bind(n,r,u.handleMouseWheel)});v("unbindEvents",function(){et&&f.unbind(n,r,u.handleMouseWheel)});u.mouseZoomedIn=!1;i=function(){u.mouseZoomedIn&&(f.removeClass(n,"pswp--zoomed-in"),u.mouseZoomedIn=!1);l<1?f.addClass(n,"pswp--zoom-allowed"):f.removeClass(n,"pswp--zoom-allowed");o()};o=function(){e&&(f.removeClass(n,"pswp--dragging"),e=!1)};v("resize",i);v("afterChange",i);v("pointerDown",function(){u.mouseZoomedIn&&(e=!0,f.addClass(n,"pswp--dragging"))});v("pointerUp",o);t||i()},handleMouseWheel:function(n){if(l<=u.currItem.fitRatio)return e.modal&&(!e.closeOnScroll||fr||ct?n.preventDefault():nr&&Math.abs(n.deltaY)>2&&(of=!0,u.close())),!0;if(n.stopPropagation(),et.x=0,"deltaX"in n)1===n.deltaMode?(et.x=18*n.deltaX,et.y=18*n.deltaY):(et.x=n.deltaX,et.y=n.deltaY);else if("wheelDelta"in n)n.wheelDeltaX&&(et.x=-.16*n.wheelDeltaX),et.y=n.wheelDeltaY?-.16*n.wheelDeltaY:-.16*n.wheelDelta;else{if(!("detail"in n))return;et.y=n.detail}ne(l,!0);var t=o.x-et.x,i=o.y-et.y;(e.modal||t<=s.min.x&&t>=s.max.x&&i<=s.min.y&&i>=s.max.y)&&n.preventDefault();u.panTo(t,i)},toggleDesktopZoom:function(t){t=t||{x:k.x/2+rr.x,y:k.y/2+rr.y};var r=e.getDoubleTapZoom(!0,u.currItem),i=l===r;u.mouseZoomedIn=!i;u.zoomTo(i?u.currItem.initialZoomLevel:r,t,333);f[(i?"remove":"add")+"Class"](n,"pswp--zoomed-in")}}});var se,rs,fu,ef,he,us,w,cr,ce,le,at,ae,hh={history:!0,galleryUID:1},ve=function(){return at.hash.substring(1)},fs=function(){se&&clearTimeout(se);fu&&clearTimeout(fu)},es=function(){var u=ve(),n={},t,i,r,f;if(u.length<5)return n;for(i=u.split("&"),t=0;t<i.length;t++)i[t]&&(r=i[t].split("="),r.length<2||(n[r[0]]=r[1]));if(e.galleryPIDs){for(f=n.pid,n.pid=0,t=0;t<ei.length;t++)if(ei[t].pid===f){n.pid=t;break}}else n.pid=parseInt(n.pid,10)-1;return n.pid<0&&(n.pid=0),n},ye=function(){var t,i,n,r;if(fu&&clearTimeout(fu),fr||ct)return void(fu=setTimeout(ye,500));ef?clearTimeout(rs):ef=!0;t=h+1;i=oi(h);i.hasOwnProperty("pid")&&(t=i.pid);n=w+"&gid="+e.galleryUID+"&pid="+t;cr||at.hash.indexOf(n)===-1&&(le=!0);r=at.href.split("#")[0]+"#"+n;ae?"#"+n!==window.location.hash&&history[cr?"replaceState":"pushState"]("",document.title,r):cr?at.replace(r):at.hash=n;cr=!0;rs=setTimeout(function(){ef=!1},60)};br("History",{publicMethods:{initHistory:function(){var n,t;(f.extend(e,hh,!0),e.history)&&(at=window.location,le=!1,ce=!1,cr=!1,w=ve(),ae="pushState"in history,w.indexOf("gid=")>-1&&(w=w.split("&gid=")[0],w=w.split("?gid=")[0]),v("afterChange",u.updateURL),v("unbindEvents",function(){f.unbind(window,"hashchange",u.onHashChange)}),n=function(){us=!0;ce||(le?history.back():w?at.hash=w:ae?history.pushState("",document.title,at.pathname+at.search):at.hash="");fs()},v("unbindEvents",function(){of&&n()}),v("destroy",function(){us||n()}),v("firstUpdate",function(){h=es().pid}),t=w.indexOf("pid="),t>-1&&(w=w.substring(0,t),"&"===w.slice(-1)&&(w=w.slice(0,-1))),setTimeout(function(){gi&&f.bind(window,"hashchange",u.onHashChange)},40))},onHashChange:function(){return ve()===w?(ce=!0,void u.close()):void(ef||(he=!0,u.goTo(es().pid),he=!1))},updateURL:function(){fs();he||(cr?se=setTimeout(ye,800):ye())}}});f.extend(u,as)}}),function(n,t){typeof define=="function"&&define.amd?define(t):typeof exports=="object"?module.exports=t():n.PhotoSwipeUI_Default=t()}(this,function(){"use strict";return function(n,t){var r=this,b=!1,s=!0,e,u,a,c,rt,ut,h,o=!0,ft,k,f,et,ot,st,ht,i,yt={barsSize:{top:44,bottom:"auto"},closeElClasses:["item","caption","zoom-wrap","ui","top-bar"],timeToIdle:4e3,timeToIdleOutside:1e3,loadingIndicatorDelay:1e3,addCaptionHTMLFn:function(n,t){return n.title?(t.children[0].innerHTML=n.title,!0):(t.children[0].innerHTML="",!1)},closeEl:!0,captionEl:!0,fullscreenEl:!0,zoomEl:!1,shareEl:!0,counterEl:!0,arrowEl:!0,preloaderEl:!0,tapToClose:!1,tapToToggleControls:!0,clickToCloseNonZoomable:!0,shareButtons:[{id:"facebook",label:"Share on Facebook",url:"https://www.facebook.com/sharer/sharer.php?u={{url}}"},{id:"twitter",label:"Tweet",url:"https://twitter.com/intent/tweet?text={{text}}&url={{url}}"},{id:"pinterest",label:"Pin it",url:"http://www.pinterest.com/pin/create/button/?url={{url}}&media={{image_url}}&description={{text}}"},{id:"download",label:"Download image",url:"{{raw_image_url}}",download:!0}],getImageURLForShare:function(){return n.currItem.src||""},getPageURLForShare:function(){return window.location.href},getTextForShare:function(){return n.currItem.title||""},indexIndicatorSep:" / ",fitControlsWidth:1200},y,pt,ct=function(n){var f,r,e,o,u,s;if(y)return!0;for(n=n||window.event,i.timeToIdle&&i.mouseUsed&&!k&&it(),f=n.target||n.srcElement,e=f.getAttribute("class")||"",u=0;u<w.length;u++)r=w[u],r.onTap&&e.indexOf("pswp__"+r.name)>-1&&(r.onTap(),o=!0);o&&(n.stopPropagation&&n.stopPropagation(),y=!0,s=t.features.isOldAndroid?600:30,pt=setTimeout(function(){y=!1},s))},wt=function(){return!1},l=function(n,i,r){t[(r?"add":"remove")+"Class"](n,"pswp__"+i)},lt=function(){var n=i.getNumItemsFn()===1;n!==ht&&(l(u,"ui--one-slide",n),ht=n)},at=function(){l(h,"share-modal--hidden",o)},v=function(){return o=!o,o?(t.removeClass(h,"pswp__share-modal--fade-in"),setTimeout(function(){o&&at()},300)):(at(),setTimeout(function(){o||t.addClass(h,"pswp__share-modal--fade-in")},30)),o||kt(),!1},bt=function(t){t=t||window.event;var i=t.target||t.srcElement;return(n.shout("shareLinkClick",t,i),!i.href)?!1:i.hasAttribute("download")?!0:(window.open(i.href,"pswp_share","scrollbars=yes,resizable=yes,toolbar=no,location=yes,width=550,height=420,top=100,left="+(window.screen?Math.round(screen.width/2-275):100)),o||v(),!1)},kt=function(){for(var t="",n,f,u,e,o,r=0;r<i.shareButtons.length;r++)n=i.shareButtons[r],u=i.getImageURLForShare(n),e=i.getPageURLForShare(n),o=i.getTextForShare(n),f=n.url.replace("{{url}}",encodeURIComponent(e)).replace("{{image_url}}",encodeURIComponent(u)).replace("{{raw_image_url}}",u).replace("{{text}}",encodeURIComponent(o)),t+='<a href="'+f+'" target="_blank" class="pswp__share--'+n.id+'"'+(n.download?"download":"")+">"+n.label+"<\/a>",i.parseShareButtonOut&&(t=i.parseShareButtonOut(n,t));h.children[0].innerHTML=t;h.children[0].onclick=bt},d=function(n){for(var r=0;r<i.closeElClasses.length;r++)if(t.hasClass(n,"pswp__"+i.closeElClasses[r]))return!0},g,nt,tt=0,it=function(){clearTimeout(nt);tt=0;k&&r.setIdle(!1)},vt=function(n){n=n?n:window.event;var t=n.relatedTarget||n.toElement;t&&t.nodeName!=="HTML"||(clearTimeout(nt),nt=setTimeout(function(){r.setIdle(!0)},i.timeToIdleOutside))},dt=function(){i.fullscreenEl&&!t.features.isOldAndroid&&(e||(e=r.getFullscreenAPI()),e?(t.bind(document,e.eventK,r.updateFullscreen),r.updateFullscreen(),t.addClass(n.template,"pswp--supports-fs")):t.removeClass(n.template,"pswp--supports-fs"))},gt=function(){i.preloaderEl&&(p(!0),f("beforeChange",function(){clearTimeout(st);st=setTimeout(function(){n.currItem&&n.currItem.loading?n.allowProgressiveImg()&&(!n.currItem.img||n.currItem.img.naturalWidth)||p(!1):p(!0)},i.loadingIndicatorDelay)}),f("imageLoadComplete",function(t,i){n.currItem===i&&p(!0)}))},p=function(n){ot!==n&&(l(et,"preloader--active",!n),ot=n)},ni=function(n){var r=n.vGap,f,e;wt()?(f=i.barsSize,i.captionEl&&f.bottom==="auto"?(c||(c=t.createEl("pswp__caption pswp__caption--fake"),c.appendChild(t.createEl("pswp__caption__center")),u.insertBefore(c,a),t.addClass(u,"pswp__ui--fit")),i.addCaptionHTMLFn(n,c,!0)?(e=c.clientHeight,r.bottom=parseInt(e,10)||44):r.bottom=f.top):r.bottom=f.bottom==="auto"?0:f.bottom,r.top=f.top):r.top=r.bottom=0},ti=function(){i.timeToIdle&&f("mouseUsed",function(){t.bind(document,"mousemove",it);t.bind(document,"mouseout",vt);g=setInterval(function(){tt++;tt===2&&r.setIdle(!0)},i.timeToIdle/2)})},ii=function(){f("onVerticalDrag",function(n){s&&n<.95?r.hideControls():!s&&n>=.95&&r.showControls()});var n;f("onPinchClose",function(t){s&&t<.9?(r.hideControls(),n=!0):n&&!s&&t>.9&&r.showControls()});f("zoomGestureEnded",function(){n=!1;n&&!s&&r.showControls()})},w=[{name:"caption",option:"captionEl",onInit:function(n){a=n}},{name:"share-modal",option:"shareEl",onInit:function(n){h=n},onTap:function(){v()}},{name:"button--share",option:"shareEl",onInit:function(n){ut=n},onTap:function(){v()}},{name:"button--zoom",option:"zoomEl",onTap:n.toggleDesktopZoom},{name:"counter",option:"counterEl",onInit:function(n){rt=n}},{name:"button--close",option:"closeEl",onTap:n.close},{name:"button--arrow--left",option:"arrowEl",onTap:n.prev},{name:"button--arrow--right",option:"arrowEl",onTap:n.next},{name:"button--fs",option:"fullscreenEl",onTap:function(){e.isFullscreen()?e.exit():e.enter()}},{name:"preloader",option:"preloaderEl",onInit:function(n){et=n}}],ri=function(){var n,e,r,o=function(u){var s,f,o;if(u)for(s=u.length,f=0;f<s;f++)for(n=u[f],e=n.className,o=0;o<w.length;o++)if(r=w[o],e.indexOf("pswp__"+r.name)>-1)if(i[r.option]){if(t.removeClass(n,"pswp__element--disabled"),r.onInit)r.onInit(n)}else t.addClass(n,"pswp__element--disabled")},f;o(u.children);f=t.getChildByClass(u,"pswp__top-bar");f&&o(f.children)};r.init=function(){t.extend(n.options,yt,!0);i=n.options;u=t.getChildByClass(n.scrollWrap,"pswp__ui");f=n.listen;ii();f("beforeChange",r.update);f("preventDragEvent",function(n,t,i){var r=n.target||n.srcElement;r&&r.getAttribute("class")&&n.type.indexOf("mouse")>-1&&(r.getAttribute("class").indexOf("__caption")>0||/(SMALL|STRONG|EM)/i.test(r.tagName))&&(i.prevent=!1)});f("bindEvents",function(){t.bind(u,"pswpTap click",ct);t.bind(n.scrollWrap,"pswpTap",r.onGlobalTap);n.likelyTouchDevice||t.bind(n.scrollWrap,"mouseover",r.onMouseOver)});f("unbindEvents",function(){o||v();g&&clearInterval(g);t.unbind(document,"mouseout",vt);t.unbind(document,"mousemove",it);t.unbind(u,"pswpTap click",ct);t.unbind(n.scrollWrap,"pswpTap",r.onGlobalTap);t.unbind(n.scrollWrap,"mouseover",r.onMouseOver);e&&(t.unbind(document,e.eventK,r.updateFullscreen),e.isFullscreen()&&(i.hideAnimationDuration=0,e.exit()),e=null)});f("destroy",function(){i.captionEl&&(c&&u.removeChild(c),t.removeClass(a,"pswp__caption--empty"));h&&(h.children[0].onclick=null);t.removeClass(u,"pswp__ui--over-close");t.addClass(u,"pswp__ui--hidden");r.setIdle(!1)});i.showAnimationDuration||t.removeClass(u,"pswp__ui--hidden");f("initialZoomIn",function(){i.showAnimationDuration&&t.removeClass(u,"pswp__ui--hidden")});f("initialZoomOut",function(){t.addClass(u,"pswp__ui--hidden")});f("parseVerticalMargin",ni);ri();i.shareEl&&ut&&h&&(o=!0);lt();ti();dt();gt()};r.setIdle=function(n){k=n;l(u,"ui--idle",n)};r.update=function(){s&&n.currItem?(r.updateIndexIndicator(),i.captionEl&&(i.addCaptionHTMLFn(n.currItem,a),l(a,"caption--empty",!n.currItem.title)),b=!0):b=!1;o||v();lt()};r.updateFullscreen=function(i){i&&setTimeout(function(){n.setScrollOffset(0,t.getScrollY())},50);t[(e.isFullscreen()?"add":"remove")+"Class"](n.template,"pswp--fs")};r.updateIndexIndicator=function(){var u,t,r;if(i.counterEl){for(u=i.getNumItemsFn(),t=[],r=0;r<u;r++)r===n.getCurrentIndex()?t.push('<div class="active"><\/div>'):t.push("<div><\/div>");rt.innerHTML=t.join(" ")}};r.onGlobalTap=function(u){u=u||window.event;var f=u.target||u.srcElement;if(!y)if(u.detail&&u.detail.pointerType==="mouse"){if(d(f)){n.close();return}}else if(i.tapToToggleControls&&(s?r.hideControls():r.showControls()),i.tapToClose&&(t.hasClass(f,"pswp__img")||d(f))){n.close();return}};r.onMouseOver=function(n){n=n||window.event;var t=n.target||n.srcElement;l(u,"ui--over-close",d(t))};r.hideControls=function(){t.addClass(u,"pswp__ui--hidden");s=!1};r.showControls=function(){s=!0;b||r.update();t.removeClass(u,"pswp__ui--hidden")};r.supportsFullscreen=function(){var n=document;return!!(n.exitFullscreen||n.mozCancelFullScreen||n.webkitExitFullscreen||n.msExitFullscreen)};r.getFullscreenAPI=function(){var r=document.documentElement,t,u="fullscreenchange";return r.requestFullscreen?t={enterK:"requestFullscreen",exitK:"exitFullscreen",elementK:"fullscreenElement",eventK:u}:r.mozRequestFullScreen?t={enterK:"mozRequestFullScreen",exitK:"mozCancelFullScreen",elementK:"mozFullScreenElement",eventK:"moz"+u}:r.webkitRequestFullscreen?t={enterK:"webkitRequestFullscreen",exitK:"webkitExitFullscreen",elementK:"webkitFullscreenElement",eventK:"webkit"+u}:r.msRequestFullscreen&&(t={enterK:"msRequestFullscreen",exitK:"msExitFullscreen",elementK:"msFullscreenElement",eventK:"MSFullscreenChange"}),t&&(t.enter=function(){if(ft=i.closeOnScroll,i.closeOnScroll=!1,this.enterK==="webkitRequestFullscreen")n.template[this.enterK](Element.ALLOW_KEYBOARD_INPUT);else return n.template[this.enterK]()},t.exit=function(){return i.closeOnScroll=ft,document[this.exitK]()},t.isFullscreen=function(){return document[this.elementK]}),t}}}),function(n,t,i,r){function u(t,i){this.settings=null;this.options=n.extend({},u.Defaults,i);this.$element=n(t);this._handlers={};this._plugins={};this._supress={};this._current=null;this._speed=null;this._coordinates=[];this._breakpoint=null;this._width=null;this._items=[];this._clones=[];this._mergers=[];this._widths=[];this._invalidated={};this._pipe=[];this._drag={time:null,target:null,pointer:null,stage:{start:null,current:null},direction:null};this._states={current:{},tags:{initializing:["busy"],animating:["busy"],dragging:["interacting"]}};n.each(["onResize","onThrottledResize"],n.proxy(function(t,i){this._handlers[i]=n.proxy(this[i],this)},this));n.each(u.Plugins,n.proxy(function(n,t){this._plugins[n.charAt(0).toLowerCase()+n.slice(1)]=new t(this)},this));n.each(u.Workers,n.proxy(function(t,i){this._pipe.push({filter:i.filter,run:n.proxy(i.run,this)})},this));this.setup();this.initialize()}u.Defaults={items:3,loop:!1,center:!1,rewind:!1,mouseDrag:!0,touchDrag:!0,pullDrag:!0,freeDrag:!1,margin:0,stagePadding:0,merge:!1,mergeFit:!0,autoWidth:!1,startPosition:0,rtl:!1,smartSpeed:250,fluidSpeed:!1,dragEndSpeed:!1,responsive:{},responsiveRefreshRate:200,responsiveBaseElement:t,fallbackEasing:"swing",info:!1,nestedItemSelector:!1,itemElement:"div",stageElement:"div",refreshClass:"owl-refresh",loadedClass:"owl-loaded",loadingClass:"owl-loading",rtlClass:"owl-rtl",responsiveClass:"owl-responsive",dragClass:"owl-drag",itemClass:"owl-item",stageClass:"owl-stage",stageOuterClass:"owl-stage-outer",grabClass:"owl-grab"};u.Width={Default:"default",Inner:"inner",Outer:"outer"};u.Type={Event:"event",State:"state"};u.Plugins={};u.Workers=[{filter:["width","settings"],run:function(){this._width=this.$element.width()}},{filter:["width","items","settings"],run:function(n){n.current=this._items&&this._items[this.relative(this._current)]}},{filter:["items","settings"],run:function(){this.$stage.children(".cloned").remove()}},{filter:["width","items","settings"],run:function(n){var t=this.settings.margin||"",u=!this.settings.autoWidth,i=this.settings.rtl,r={width:"auto","margin-left":i?t:"","margin-right":i?"":t};u||this.$stage.children().css(r);n.css=r}},{filter:["width","items","settings"],run:function(n){var r=(this.width()/this.settings.items).toFixed(3)-this.settings.margin,t=null,i=this._items.length,f=!this.settings.autoWidth,u=[];for(n.items={merge:!1,width:r};i--;)t=this._mergers[i],t=this.settings.mergeFit&&Math.min(t,this.settings.items)||t,n.items.merge=t>1||n.items.merge,u[i]=f?r*t:this._items[i].width();this._widths=u}},{filter:["items","settings"],run:function(){var t=[],i=this._items,r=this.settings,e=Math.max(r.items*2,4),s=Math.ceil(i.length/2)*2,o=r.loop&&i.length?r.rewind?e:Math.max(e,s):0,u="",f="";for(o/=2;o--;)t.push(this.normalize(t.length/2,!0)),u=u+i[t[t.length-1]][0].outerHTML,t.push(this.normalize(i.length-1-(t.length-1)/2,!0)),f=i[t[t.length-1]][0].outerHTML+f;this._clones=t;n(u).addClass("cloned").appendTo(this.$stage);n(f).addClass("cloned").prependTo(this.$stage)}},{filter:["width","items","settings"],run:function(){for(var u=this.settings.rtl?1:-1,f=this._clones.length+this._items.length,n=-1,i=0,r=0,t=[];++n<f;)i=t[n-1]||0,r=this._widths[this.relative(n)]+this.settings.margin,t.push(i+r*u);this._coordinates=t}},{filter:["width","items","settings"],run:function(){var n=this.settings.stagePadding,t=this._coordinates,i={width:Math.ceil(Math.abs(t[t.length-1]))+n*2,"padding-left":n||"","padding-right":n||""};this.$stage.css(i)}},{filter:["width","items","settings"],run:function(n){var t=this._coordinates.length,i=!this.settings.autoWidth,r=this.$stage.children();if(i&&n.items.merge)while(t--)n.css.width=this._widths[this.relative(t)],r.eq(t).css(n.css);else i&&(n.css.width=n.items.width,r.css(n.css))}},{filter:["items"],run:function(){this._coordinates.length<1&&this.$stage.removeAttr("style")}},{filter:["width","items","settings"],run:function(n){n.current=n.current?this.$stage.children().index(n.current):0;n.current=Math.max(this.minimum(),Math.min(this.maximum(),n.current));this.reset(n.current)}},{filter:["position"],run:function(){this.animate(this.coordinates(this._current))}},{filter:["width","position","items","settings"],run:function(){for(var u=this.settings.rtl?1:-1,f=this.settings.stagePadding*2,t=this.coordinates(this.current())+f,e=t+this.width()*u,i,r,o=[],n=0,s=this._coordinates.length;n<s;n++)i=this._coordinates[n-1]||0,r=Math.abs(this._coordinates[n])+f*u,(this.op(i,"<=",t)&&this.op(i,">",e)||this.op(r,"<",t)&&this.op(r,">",e))&&o.push(n);this.$stage.children(".active").removeClass("active");this.$stage.children(":eq("+o.join("), :eq(")+")").addClass("active");this.settings.center&&(this.$stage.children(".center").removeClass("center"),this.$stage.children().eq(this.current()).addClass("center"))}}];u.prototype.initialize=function(){if(this.enter("initializing"),this.trigger("initialize"),this.$element.toggleClass(this.settings.rtlClass,this.settings.rtl),this.settings.autoWidth&&!this.is("pre-loading")){var t,i,u;t=this.$element.find("img");i=this.settings.nestedItemSelector?"."+this.settings.nestedItemSelector:r;u=this.$element.children(i).width();t.length&&u<=0&&this.preloadAutoWidthImages(t)}this.$element.addClass(this.options.loadingClass);this.$stage=n("<"+this.settings.stageElement+' class="'+this.settings.stageClass+'"/>').wrap('<div class="'+this.settings.stageOuterClass+'"/>');this.$element.append(this.$stage.parent());this.replace(this.$element.children().not(this.$stage.parent()));this.$element.is(":visible")?this.refresh():this.invalidate("width");this.$element.removeClass(this.options.loadingClass).addClass(this.options.loadedClass);this.registerEventHandlers();this.leave("initializing");this.trigger("initialized")};u.prototype.setup=function(){var u=this.viewport(),r=this.options.responsive,i=-1,t=null;r?(n.each(r,function(n){n<=u&&n>i&&(i=Number(n))}),t=n.extend({},this.options,r[i]),typeof t.stagePadding=="function"&&(t.stagePadding=t.stagePadding()),delete t.responsive,t.responsiveClass&&this.$element.attr("class",this.$element.attr("class").replace(new RegExp("("+this.options.responsiveClass+"-)\\S+\\s","g"),"$1"+i))):t=n.extend({},this.options);this.trigger("change",{property:{name:"settings",value:t}});this._breakpoint=i;this.settings=t;this.invalidate("settings");this.trigger("changed",{property:{name:"settings",value:this.settings}})};u.prototype.optionsLogic=function(){this.settings.autoWidth&&(this.settings.stagePadding=!1,this.settings.merge=!1)};u.prototype.prepare=function(t){var i=this.trigger("prepare",{content:t});return i.data||(i.data=n("<"+this.settings.itemElement+"/>").addClass(this.options.itemClass).append(t)),this.trigger("prepared",{content:i.data}),i.data};u.prototype.update=function(){for(var t=0,i=this._pipe.length,r=n.proxy(function(n){return this[n]},this._invalidated),u={};t<i;)(this._invalidated.all||n.grep(this._pipe[t].filter,r).length>0)&&this._pipe[t].run(u),t++;this._invalidated={};this.is("valid")||this.enter("valid")};u.prototype.width=function(n){n=n||u.Width.Default;switch(n){case u.Width.Inner:case u.Width.Outer:return this._width;default:return this._width-this.settings.stagePadding*2+this.settings.margin}};u.prototype.refresh=function(){this.enter("refreshing");this.trigger("refresh");this.setup();this.optionsLogic();this.$element.addClass(this.options.refreshClass);this.update();this.$element.removeClass(this.options.refreshClass);this.leave("refreshing");this.trigger("refreshed")};u.prototype.onThrottledResize=function(){t.clearTimeout(this.resizeTimer);this.resizeTimer=t.setTimeout(this._handlers.onResize,this.settings.responsiveRefreshRate)};u.prototype.onResize=function(){if(!this._items.length||this._width===this.$element.width()||!this.$element.is(":visible"))return!1;if(this.enter("resizing"),this.trigger("resize").isDefaultPrevented())return this.leave("resizing"),!1;this.invalidate("width");this.refresh();this.leave("resizing");this.trigger("resized")};u.prototype.registerEventHandlers=function(){if(n.support.transition)this.$stage.on(n.support.transition.end+".owl.core",n.proxy(this.onTransitionEnd,this));if(this.settings.responsive!==!1)this.on(t,"resize",this._handlers.onThrottledResize);if(this.settings.mouseDrag){this.$element.addClass(this.options.dragClass);this.$stage.on("mousedown.owl.core",n.proxy(this.onDragStart,this));this.$stage.on("dragstart.owl.core selectstart.owl.core",function(){return!1})}if(this.settings.touchDrag){this.$stage.on("touchstart.owl.core",n.proxy(this.onDragStart,this));this.$stage.on("touchcancel.owl.core",n.proxy(this.onDragEnd,this))}};u.prototype.onDragStart=function(t){var r=null;if(t.which!==3){n.support.transform?(r=this.$stage.css("transform").replace(/.*\(|\)| /g,"").split(","),r={x:r[r.length===16?12:4],y:r[r.length===16?13:5]}):(r=this.$stage.position(),r={x:this.settings.rtl?r.left+this.$stage.width()-this.width()+this.settings.margin:r.left,y:r.top});this.is("animating")&&(n.support.transform?this.animate(r.x):this.$stage.stop(),this.invalidate("position"));this.$element.toggleClass(this.options.grabClass,t.type==="mousedown");this.speed(0);this._drag.time=(new Date).getTime();this._drag.target=n(t.target);this._drag.stage.start=r;this._drag.stage.current=r;this._drag.pointer=this.pointer(t);n(i).on("mouseup.owl.core touchend.owl.core",n.proxy(this.onDragEnd,this));n(i).one("mousemove.owl.core touchmove.owl.core",n.proxy(function(t){var r=this.difference(this._drag.pointer,this.pointer(t));n(i).on("mousemove.owl.core touchmove.owl.core",n.proxy(this.onDragMove,this));Math.abs(r.x)<Math.abs(r.y)&&this.is("valid")||(t.preventDefault(),this.enter("dragging"),this.trigger("drag"))},this))}};u.prototype.onDragMove=function(n){var t=null,i=null,u=null,f=this.difference(this._drag.pointer,this.pointer(n)),r=this.difference(this._drag.stage.start,f);this.is("dragging")&&(n.preventDefault(),this.settings.loop?(t=this.coordinates(this.minimum()),i=this.coordinates(this.maximum()+1)-t,r.x=((r.x-t)%i+i)%i+t):(t=this.settings.rtl?this.coordinates(this.maximum()):this.coordinates(this.minimum()),i=this.settings.rtl?this.coordinates(this.minimum()):this.coordinates(this.maximum()),u=this.settings.pullDrag?f.x/-5:0,r.x=Math.max(Math.min(r.x,t+u),i+u)),this._drag.stage.current=r,this.animate(r.x))};u.prototype.onDragEnd=function(t){var r=this.difference(this._drag.pointer,this.pointer(t)),f=this._drag.stage.current,u=r.x>0^this.settings.rtl?"left":"right";if(n(i).off(".owl.core"),this.$element.removeClass(this.options.grabClass),(r.x!==0&&this.is("dragging")||!this.is("valid"))&&(this.speed(this.settings.dragEndSpeed||this.settings.smartSpeed),this.current(this.closest(f.x,r.x!==0?u:this._drag.direction)),this.invalidate("position"),this.update(),this._drag.direction=u,Math.abs(r.x)>3||(new Date).getTime()-this._drag.time>300))this._drag.target.one("click.owl.core",function(){return!1});this.is("dragging")&&(this.leave("dragging"),this.trigger("dragged"))};u.prototype.closest=function(t,i){var r=-1,u=30,e=this.width(),f=this.coordinates();return this.settings.freeDrag||n.each(f,n.proxy(function(n,o){return i==="left"&&t>o-u&&t<o+u?r=n:i==="right"&&t>o-e-u&&t<o-e+u?r=n+1:this.op(t,"<",o)&&this.op(t,">",f[n+1]||o-e)&&(r=i==="left"?n+1:n),r===-1},this)),this.settings.loop||(this.op(t,">",f[this.minimum()])?r=t=this.minimum():this.op(t,"<",f[this.maximum()])&&(r=t=this.maximum())),r};u.prototype.animate=function(t){var i=this.speed()>0;this.is("animating")&&this.onTransitionEnd();i&&(this.enter("animating"),this.trigger("translate"));n.support.transform3d&&n.support.transition?this.$stage.css({transform:"translate3d("+t+"px,0px,0px)",transition:this.speed()/1e3+"s"}):i?this.$stage.animate({left:t+"px"},this.speed(),this.settings.fallbackEasing,n.proxy(this.onTransitionEnd,this)):this.$stage.css({left:t+"px"})};u.prototype.is=function(n){return this._states.current[n]&&this._states.current[n]>0};u.prototype.current=function(n){if(n===r)return this._current;if(this._items.length===0)return r;if(n=this.normalize(n),this._current!==n){var t=this.trigger("change",{property:{name:"position",value:n}});t.data!==r&&(n=this.normalize(t.data));this._current=n;this.invalidate("position");this.trigger("changed",{property:{name:"position",value:this._current}})}return this._current};u.prototype.invalidate=function(t){return n.type(t)==="string"&&(this._invalidated[t]=!0,this.is("valid")&&this.leave("valid")),n.map(this._invalidated,function(n,t){return t})};u.prototype.reset=function(n){(n=this.normalize(n),n!==r)&&(this._speed=0,this._current=n,this.suppress(["translate","translated"]),this.animate(this.coordinates(n)),this.release(["translate","translated"]))};u.prototype.normalize=function(n,t){var i=this._items.length,u=t?0:this._clones.length;return!this.isNumeric(n)||i<1?n=r:(n<0||n>=i+u)&&(n=((n-u/2)%i+i)%i+u/2),n};u.prototype.relative=function(n){return n-=this._clones.length/2,this.normalize(n,!0)};u.prototype.maximum=function(n){var t=this.settings,i=this._coordinates.length,r,u,f;if(t.loop)i=this._clones.length/2+this._items.length-1;else if(t.autoWidth||t.merge){for(r=this._items.length,u=this._items[--r].width(),f=this.$element.width();r--;)if(u+=this._items[r].width()+this.settings.margin,u>f)break;i=r+1}else i=t.center?this._items.length-1:this._items.length-t.items;return n&&(i-=this._clones.length/2),Math.max(i,0)};u.prototype.minimum=function(n){return n?0:this._clones.length/2};u.prototype.items=function(n){return n===r?this._items.slice():(n=this.normalize(n,!0),this._items[n])};u.prototype.mergers=function(n){return n===r?this._mergers.slice():(n=this.normalize(n,!0),this._mergers[n])};u.prototype.clones=function(t){var i=this._clones.length/2,f=i+this._items.length,u=function(n){return n%2==0?f+n/2:i-(n+1)/2};return t===r?n.map(this._clones,function(n,t){return u(t)}):n.map(this._clones,function(n,i){return n===t?u(i):null})};u.prototype.speed=function(n){return n!==r&&(this._speed=n),this._speed};u.prototype.coordinates=function(t){var f=1,u=t-1,i;return t===r?n.map(this._coordinates,n.proxy(function(n,t){return this.coordinates(t)},this)):(this.settings.center?(this.settings.rtl&&(f=-1,u=t+1),i=this._coordinates[t]+(this.width()-i+(this._coordinates[u]||0))/2*f):i=this._coordinates[u]||0,Math.ceil(i))};u.prototype.duration=function(n,t,i){return i===0?0:Math.min(Math.max(Math.abs(t-n),1),6)*Math.abs(i||this.settings.smartSpeed)};u.prototype.to=function(n,t){var f=this.current(),r=null,i=n-this.relative(f),s=(i>0)-(i<0),e=this._items.length,o=this.minimum(),u=this.maximum();this.settings.loop?(!this.settings.rewind&&Math.abs(i)>e/2&&(i+=s*-1*e),n=f+i,r=((n-o)%e+e)%e+o,r!==n&&r-i<=u&&r-i>0&&(f=r-i,n=r,this.reset(f))):this.settings.rewind?(u+=1,n=(n%u+u)%u):n=Math.max(o,Math.min(u,n));this.speed(this.duration(f,n,t));this.current(n);this.$element.is(":visible")&&this.update()};u.prototype.next=function(n){n=n||!1;this.to(this.relative(this.current())+1,n)};u.prototype.prev=function(n){n=n||!1;this.to(this.relative(this.current())-1,n)};u.prototype.onTransitionEnd=function(n){if(n!==r&&(n.stopPropagation(),(n.target||n.srcElement||n.originalTarget)!==this.$stage.get(0)))return!1;this.leave("animating");this.trigger("translated")};u.prototype.viewport=function(){var r;if(this.options.responsiveBaseElement!==t)r=n(this.options.responsiveBaseElement).width();else if(t.innerWidth)r=t.innerWidth;else if(i.documentElement&&i.documentElement.clientWidth)r=i.documentElement.clientWidth;else throw"Can not detect viewport width.";return r};u.prototype.replace=function(t){this.$stage.empty();this._items=[];t&&(t=t instanceof jQuery?t:n(t));this.settings.nestedItemSelector&&(t=t.find("."+this.settings.nestedItemSelector));t.filter(function(){return this.nodeType===1}).each(n.proxy(function(n,t){t=this.prepare(t);this.$stage.append(t);this._items.push(t);this._mergers.push(t.find("[data-merge]").addBack("[data-merge]").attr("data-merge")*1||1)},this));this.reset(this.isNumeric(this.settings.startPosition)?this.settings.startPosition:0);this.invalidate("items")};u.prototype.add=function(t,i){var u=this.relative(this._current);i=i===r?this._items.length:this.normalize(i,!0);t=t instanceof jQuery?t:n(t);this.trigger("add",{content:t,position:i});t=this.prepare(t);this._items.length===0||i===this._items.length?(this._items.length===0&&this.$stage.append(t),this._items.length!==0&&this._items[i-1].after(t),this._items.push(t),this._mergers.push(t.find("[data-merge]").addBack("[data-merge]").attr("data-merge")*1||1)):(this._items[i].before(t),this._items.splice(i,0,t),this._mergers.splice(i,0,t.find("[data-merge]").addBack("[data-merge]").attr("data-merge")*1||1));this._items[u]&&this.reset(this._items[u].index());this.invalidate("items");this.trigger("added",{content:t,position:i})};u.prototype.remove=function(n){(n=this.normalize(n,!0),n!==r)&&(this.trigger("remove",{content:this._items[n],position:n}),this._items[n].remove(),this._items.splice(n,1),this._mergers.splice(n,1),this.invalidate("items"),this.trigger("removed",{content:null,position:n}))};u.prototype.preloadAutoWidthImages=function(t){t.each(n.proxy(function(t,i){this.enter("pre-loading");i=n(i);n(new Image).one("load",n.proxy(function(n){i.attr("src",n.target.src);i.css("opacity",1);this.leave("pre-loading");this.is("pre-loading")||this.is("initializing")||this.refresh()},this)).attr("src",i.attr("src")||i.attr("data-src")||i.attr("data-src-retina"))},this))};u.prototype.destroy=function(){this.$element.off(".owl.core");this.$stage.off(".owl.core");n(i).off(".owl.core");this.settings.responsive!==!1&&(t.clearTimeout(this.resizeTimer),this.off(t,"resize",this._handlers.onThrottledResize));for(var r in this._plugins)this._plugins[r].destroy();this.$stage.children(".cloned").remove();this.$stage.unwrap();this.$stage.children().contents().unwrap();this.$stage.children().unwrap();this.$element.removeClass(this.options.refreshClass).removeClass(this.options.loadingClass).removeClass(this.options.loadedClass).removeClass(this.options.rtlClass).removeClass(this.options.dragClass).removeClass(this.options.grabClass).attr("class",this.$element.attr("class").replace(new RegExp(this.options.responsiveClass+"-\\S+\\s","g"),"")).removeData("owl.carousel")};u.prototype.op=function(n,t,i){var r=this.settings.rtl;switch(t){case"<":return r?n>i:n<i;case">":return r?n<i:n>i;case">=":return r?n<=i:n>=i;case"<=":return r?n>=i:n<=i}};u.prototype.on=function(n,t,i,r){n.addEventListener?n.addEventListener(t,i,r):n.attachEvent&&n.attachEvent("on"+t,i)};u.prototype.off=function(n,t,i,r){n.removeEventListener?n.removeEventListener(t,i,r):n.detachEvent&&n.detachEvent("on"+t,i)};u.prototype.trigger=function(t,i,r){var o={item:{count:this._items.length,index:this.current()}},e=n.camelCase(n.grep(["on",t,r],function(n){return n}).join("-").toLowerCase()),f=n.Event([t,"owl",r||"carousel"].join(".").toLowerCase(),n.extend({relatedTarget:this},o,i));return this._supress[t]||(n.each(this._plugins,function(n,t){if(t.onTrigger)t.onTrigger(f)}),this.register({type:u.Type.Event,name:t}),this.$element.trigger(f),this.settings&&typeof this.settings[e]=="function"&&this.settings[e].call(this,f)),f};u.prototype.enter=function(t){n.each([t].concat(this._states.tags[t]||[]),n.proxy(function(n,t){this._states.current[t]===r&&(this._states.current[t]=0);this._states.current[t]++},this))};u.prototype.leave=function(t){n.each([t].concat(this._states.tags[t]||[]),n.proxy(function(n,t){this._states.current[t]--},this))};u.prototype.register=function(t){if(t.type===u.Type.Event){if(n.event.special[t.name]||(n.event.special[t.name]={}),!n.event.special[t.name].owl){var i=n.event.special[t.name]._default;n.event.special[t.name]._default=function(n){return i&&i.apply&&(!n.namespace||n.namespace.indexOf("owl")===-1)?i.apply(this,arguments):n.namespace&&n.namespace.indexOf("owl")>-1};n.event.special[t.name].owl=!0}}else t.type===u.Type.State&&(this._states.tags[t.name]=this._states.tags[t.name]?this._states.tags[t.name].concat(t.tags):t.tags,this._states.tags[t.name]=n.grep(this._states.tags[t.name],n.proxy(function(i,r){return n.inArray(i,this._states.tags[t.name])===r},this)))};u.prototype.suppress=function(t){n.each(t,n.proxy(function(n,t){this._supress[t]=!0},this))};u.prototype.release=function(t){n.each(t,n.proxy(function(n,t){delete this._supress[t]},this))};u.prototype.pointer=function(n){var i={x:null,y:null};return n=n.originalEvent||n||t.event,n=n.touches&&n.touches.length?n.touches[0]:n.changedTouches&&n.changedTouches.length?n.changedTouches[0]:n,n.pageX?(i.x=n.pageX,i.y=n.pageY):(i.x=n.clientX,i.y=n.clientY),i};u.prototype.isNumeric=function(n){return!isNaN(parseFloat(n))};u.prototype.difference=function(n,t){return{x:n.x-t.x,y:n.y-t.y}};n.fn.owlCarousel=function(t){var i=Array.prototype.slice.call(arguments,1);return this.each(function(){var f=n(this),r=f.data("owl.carousel");r||(r=new u(this,typeof t=="object"&&t),f.data("owl.carousel",r),n.each(["next","prev","to","destroy","refresh","replace","add","remove"],function(t,i){r.register({type:u.Type.Event,name:i});r.$element.on(i+".owl.carousel.core",n.proxy(function(n){n.namespace&&n.relatedTarget!==this&&(this.suppress([i]),r[i].apply(this,[].slice.call(arguments,1)),this.release([i]))},r))}));typeof t=="string"&&t.charAt(0)!=="_"&&r[t].apply(r,i)})};n.fn.owlCarousel.Constructor=u}(window.Zepto||window.jQuery,window,document),function(n,t){var i=function(t){this._core=t;this._interval=null;this._visible=null;this._handlers={"initialized.owl.carousel":n.proxy(function(n){n.namespace&&this._core.settings.autoRefresh&&this.watch()},this)};this._core.options=n.extend({},i.Defaults,this._core.options);this._core.$element.on(this._handlers)};i.Defaults={autoRefresh:!0,autoRefreshInterval:500};i.prototype.watch=function(){this._interval||(this._visible=this._core.$element.is(":visible"),this._interval=t.setInterval(n.proxy(this.refresh,this),this._core.settings.autoRefreshInterval))};i.prototype.refresh=function(){this._core.$element.is(":visible")!==this._visible&&(this._visible=!this._visible,this._core.$element.toggleClass("owl-hidden",!this._visible),this._visible&&this._core.invalidate("width")&&this._core.refresh())};i.prototype.destroy=function(){var n,i;t.clearInterval(this._interval);for(n in this._handlers)this._core.$element.off(n,this._handlers[n]);for(i in Object.getOwnPropertyNames(this))typeof this[i]!="function"&&(this[i]=null)};n.fn.owlCarousel.Constructor.Plugins.AutoRefresh=i}(window.Zepto||window.jQuery,window,document),function(n,t,i,r){var u=function(t){this._core=t;this._loaded=[];this._handlers={"initialized.owl.carousel change.owl.carousel resized.owl.carousel":n.proxy(function(t){if(t.namespace&&this._core.settings&&this._core.settings.lazyLoad&&(t.property&&t.property.name=="position"||t.type=="initialized"))for(var i=this._core.settings,f=i.center&&Math.ceil(i.items/2)||i.items,e=i.center&&f*-1||0,u=(t.property&&t.property.value!==r?t.property.value:this._core.current())+e,o=this._core.clones().length,s=n.proxy(function(n,t){this.load(t)},this);e++<f;)this.load(o/2+this._core.relative(u)),o&&n.each(this._core.clones(this._core.relative(u)),s),u++},this)};this._core.options=n.extend({},u.Defaults,this._core.options);this._core.$element.on(this._handlers)};u.Defaults={lazyLoad:!1};u.prototype.load=function(i){var r=this._core.$stage.children().eq(i),u=r&&r.find(".owl-lazy");!u||n.inArray(r.get(0),this._loaded)>-1||(u.each(n.proxy(function(i,r){var u=n(r),e,f=t.devicePixelRatio>1&&u.attr("data-src-retina")||u.attr("data-src");this._core.trigger("load",{element:u,url:f},"lazy");u.is("img")?u.one("load.owl.lazy",n.proxy(function(){u.css("opacity",1);this._core.trigger("loaded",{element:u,url:f},"lazy")},this)).attr("src",f):(e=new Image,e.onload=n.proxy(function(){u.css({"background-image":"url("+f+")",opacity:"1"});this._core.trigger("loaded",{element:u,url:f},"lazy")},this),e.src=f)},this)),this._loaded.push(r.get(0)))};u.prototype.destroy=function(){var n,t;for(n in this.handlers)this._core.$element.off(n,this.handlers[n]);for(t in Object.getOwnPropertyNames(this))typeof this[t]!="function"&&(this[t]=null)};n.fn.owlCarousel.Constructor.Plugins.Lazy=u}(window.Zepto||window.jQuery,window,document),function(n){var t=function(i){this._core=i;this._handlers={"initialized.owl.carousel refreshed.owl.carousel":n.proxy(function(n){n.namespace&&this._core.settings.autoHeight&&this.update()},this),"changed.owl.carousel":n.proxy(function(n){n.namespace&&this._core.settings.autoHeight&&n.property.name=="position"&&this.update()},this),"loaded.owl.lazy":n.proxy(function(n){n.namespace&&this._core.settings.autoHeight&&n.element.closest("."+this._core.settings.itemClass).index()===this._core.current()&&this.update()},this)};this._core.options=n.extend({},t.Defaults,this._core.options);this._core.$element.on(this._handlers)};t.Defaults={autoHeight:!1,autoHeightClass:"owl-height"};t.prototype.update=function(){var t=this._core._current,u=t+this._core.settings.items,f=this._core.$stage.children().toArray().slice(t,u),i=[],r=0;n.each(f,function(t,r){i.push(n(r).height())});r=Math.max.apply(null,i);this._core.$stage.parent().height(r).addClass(this._core.settings.autoHeightClass)};t.prototype.destroy=function(){var n,t;for(n in this._handlers)this._core.$element.off(n,this._handlers[n]);for(t in Object.getOwnPropertyNames(this))typeof this[t]!="function"&&(this[t]=null)};n.fn.owlCarousel.Constructor.Plugins.AutoHeight=t}(window.Zepto||window.jQuery,window,document),function(n,t,i){var r=function(t){this._core=t;this._videos={};this._playing=null;this._handlers={"initialized.owl.carousel":n.proxy(function(n){n.namespace&&this._core.register({type:"state",name:"playing",tags:["interacting"]})},this),"resize.owl.carousel":n.proxy(function(n){n.namespace&&this._core.settings.video&&this.isInFullScreen()&&n.preventDefault()},this),"refreshed.owl.carousel":n.proxy(function(n){n.namespace&&this._core.is("resizing")&&this._core.$stage.find(".cloned .owl-video-frame").remove()},this),"changed.owl.carousel":n.proxy(function(n){n.namespace&&n.property.name==="position"&&this._playing&&this.stop()},this),"prepared.owl.carousel":n.proxy(function(t){if(t.namespace){var i=n(t.content).find(".owl-video");i.length&&(i.css("display","none"),this.fetch(i,n(t.content)))}},this)};this._core.options=n.extend({},r.Defaults,this._core.options);this._core.$element.on(this._handlers);this._core.$element.on("click.owl.video",".owl-video-play-icon",n.proxy(function(n){this.play(n)},this))};r.Defaults={video:!1,videoHeight:!1,videoWidth:!1};r.prototype.fetch=function(n,t){var u=function(){return n.attr("data-vimeo-id")?"vimeo":n.attr("data-vzaar-id")?"vzaar":"youtube"}(),i=n.attr("data-vimeo-id")||n.attr("data-youtube-id")||n.attr("data-vzaar-id"),f=n.attr("data-width")||this._core.settings.videoWidth,e=n.attr("data-height")||this._core.settings.videoHeight,r=n.attr("href");if(r){if(i=r.match(/(http:|https:|)\/\/(player.|www.|app.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com)|vzaar\.com)\/(video\/|videos\/|embed\/|channels\/.+\/|groups\/.+\/|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?/),i[3].indexOf("youtu")>-1)u="youtube";else if(i[3].indexOf("vimeo")>-1)u="vimeo";else if(i[3].indexOf("vzaar")>-1)u="vzaar";else throw new Error("Video URL not supported.");i=i[6]}else throw new Error("Missing video URL.");this._videos[r]={type:u,id:i,width:f,height:e};t.attr("data-video",r);this.thumbnail(n,this._videos[r])};r.prototype.thumbnail=function(t,i){var f,s,r,c=i.width&&i.height?'style="width:'+i.width+"px;height:"+i.height+'px;"':"",e=t.find("img"),o="src",h="",l=this._core.settings,u=function(n){s='<div class="owl-video-play-icon"><\/div>';f=l.lazyLoad?'<div class="owl-video-tn '+h+'" '+o+'="'+n+'"><\/div>':'<div class="owl-video-tn" style="opacity:1;background-image:url('+n+')"><\/div>';t.after(f);t.after(s)};if(t.wrap('<div class="owl-video-wrapper"'+c+"><\/div>"),this._core.settings.lazyLoad&&(o="data-src",h="owl-lazy"),e.length)return u(e.attr(o)),e.remove(),!1;i.type==="youtube"?(r="//img.youtube.com/vi/"+i.id+"/hqdefault.jpg",u(r)):i.type==="vimeo"?n.ajax({type:"GET",url:"//vimeo.com/api/v2/video/"+i.id+".json",jsonp:"callback",dataType:"jsonp",success:function(n){r=n[0].thumbnail_large;u(r)}}):i.type==="vzaar"&&n.ajax({type:"GET",url:"//vzaar.com/api/videos/"+i.id+".json",jsonp:"callback",dataType:"jsonp",success:function(n){r=n.framegrab_url;u(r)}})};r.prototype.stop=function(){this._core.trigger("stop",null,"video");this._playing.find(".owl-video-frame").remove();this._playing.removeClass("owl-video-playing");this._playing=null;this._core.leave("playing");this._core.trigger("stopped",null,"video")};r.prototype.play=function(t){var o=n(t.target),r=o.closest("."+this._core.settings.itemClass),i=this._videos[r.attr("data-video")],f=i.width||"100%",e=i.height||this._core.$stage.height(),u;this._playing||(this._core.enter("playing"),this._core.trigger("play",null,"video"),r=this._core.items(this._core.relative(r.index())),this._core.reset(r.index()),i.type==="youtube"?u='<iframe width="'+f+'" height="'+e+'" src="//www.youtube.com/embed/'+i.id+"?autoplay=1&v="+i.id+'" frameborder="0" allowfullscreen><\/iframe>':i.type==="vimeo"?u='<iframe src="//player.vimeo.com/video/'+i.id+'?autoplay=1" width="'+f+'" height="'+e+'" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen><\/iframe>':i.type==="vzaar"&&(u='<iframe frameborder="0"height="'+e+'"width="'+f+'" allowfullscreen mozallowfullscreen webkitAllowFullScreen src="//view.vzaar.com/'+i.id+'/player?autoplay=true"><\/iframe>'),n('<div class="owl-video-frame">'+u+"<\/div>").insertAfter(r.find(".owl-video")),this._playing=r.addClass("owl-video-playing"))};r.prototype.isInFullScreen=function(){var t=i.fullscreenElement||i.mozFullScreenElement||i.webkitFullscreenElement;return t&&n(t).parent().hasClass("owl-video-frame")};r.prototype.destroy=function(){var n,t;this._core.$element.off("click.owl.video");for(n in this._handlers)this._core.$element.off(n,this._handlers[n]);for(t in Object.getOwnPropertyNames(this))typeof this[t]!="function"&&(this[t]=null)};n.fn.owlCarousel.Constructor.Plugins.Video=r}(window.Zepto||window.jQuery,window,document),function(n,t,i,r){var u=function(t){this.core=t;this.core.options=n.extend({},u.Defaults,this.core.options);this.swapping=!0;this.previous=r;this.next=r;this.handlers={"change.owl.carousel":n.proxy(function(n){n.namespace&&n.property.name=="position"&&(this.previous=this.core.current(),this.next=n.property.value)},this),"drag.owl.carousel dragged.owl.carousel translated.owl.carousel":n.proxy(function(n){n.namespace&&(this.swapping=n.type=="translated")},this),"translate.owl.carousel":n.proxy(function(n){n.namespace&&this.swapping&&(this.core.options.animateOut||this.core.options.animateIn)&&this.swap()},this)};this.core.$element.on(this.handlers)};u.Defaults={animateOut:!1,animateIn:!1};u.prototype.swap=function(){if(this.core.settings.items===1&&n.support.animation&&n.support.transition){this.core.speed(0);var t,i=n.proxy(this.clear,this),f=this.core.$stage.children().eq(this.previous),e=this.core.$stage.children().eq(this.next),r=this.core.settings.animateIn,u=this.core.settings.animateOut;this.core.current()!==this.previous&&(u&&(t=this.core.coordinates(this.previous)-this.core.coordinates(this.next),f.one(n.support.animation.end,i).css({left:t+"px"}).addClass("animated owl-animated-out").addClass(u)),r&&e.one(n.support.animation.end,i).addClass("animated owl-animated-in").addClass(r))}};u.prototype.clear=function(t){n(t.target).css({left:""}).removeClass("animated owl-animated-out owl-animated-in").removeClass(this.core.settings.animateIn).removeClass(this.core.settings.animateOut);this.core.onTransitionEnd()};u.prototype.destroy=function(){var n,t;for(n in this.handlers)this.core.$element.off(n,this.handlers[n]);for(t in Object.getOwnPropertyNames(this))typeof this[t]!="function"&&(this[t]=null)};n.fn.owlCarousel.Constructor.Plugins.Animate=u}(window.Zepto||window.jQuery,window,document),function(n,t,i){var r=function(t){this._core=t;this._timeout=null;this._paused=!1;this._handlers={"changed.owl.carousel":n.proxy(function(n){n.namespace&&n.property.name==="settings"?this._core.settings.autoplay?this.play():this.stop():n.namespace&&n.property.name==="position"&&this._core.settings.autoplay&&this._setAutoPlayInterval()},this),"initialized.owl.carousel":n.proxy(function(n){n.namespace&&this._core.settings.autoplay&&this.play()},this),"play.owl.autoplay":n.proxy(function(n,t,i){n.namespace&&this.play(t,i)},this),"stop.owl.autoplay":n.proxy(function(n){n.namespace&&this.stop()},this),"mouseover.owl.autoplay":n.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.pause()},this),"mouseleave.owl.autoplay":n.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.play()},this),"touchstart.owl.core":n.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.pause()},this),"touchend.owl.core":n.proxy(function(){this._core.settings.autoplayHoverPause&&this.play()},this)};this._core.$element.on(this._handlers);this._core.options=n.extend({},r.Defaults,this._core.options)};r.Defaults={autoplay:!1,autoplayTimeout:5e3,autoplayHoverPause:!1,autoplaySpeed:!1};r.prototype.play=function(){(this._paused=!1,this._core.is("rotating"))||(this._core.enter("rotating"),this._setAutoPlayInterval())};r.prototype._getNextTimeout=function(r,u){return this._timeout&&t.clearTimeout(this._timeout),t.setTimeout(n.proxy(function(){this._paused||this._core.is("busy")||this._core.is("interacting")||i.hidden||this._core.next(u||this._core.settings.autoplaySpeed)},this),r||this._core.settings.autoplayTimeout)};r.prototype._setAutoPlayInterval=function(){this._timeout=this._getNextTimeout()};r.prototype.stop=function(){this._core.is("rotating")&&(t.clearTimeout(this._timeout),this._core.leave("rotating"))};r.prototype.pause=function(){this._core.is("rotating")&&(this._paused=!0)};r.prototype.destroy=function(){var n,t;this.stop();for(n in this._handlers)this._core.$element.off(n,this._handlers[n]);for(t in Object.getOwnPropertyNames(this))typeof this[t]!="function"&&(this[t]=null)};n.fn.owlCarousel.Constructor.Plugins.autoplay=r}(window.Zepto||window.jQuery,window,document),function(n){"use strict";var t=function(i){this._core=i;this._initialized=!1;this._pages=[];this._controls={};this._templates=[];this.$element=this._core.$element;this._overrides={next:this._core.next,prev:this._core.prev,to:this._core.to};this._handlers={"prepared.owl.carousel":n.proxy(function(t){t.namespace&&this._core.settings.dotsData&&this._templates.push('<div class="'+this._core.settings.dotClass+'">'+n(t.content).find("[data-dot]").addBack("[data-dot]").attr("data-dot")+"<\/div>")},this),"added.owl.carousel":n.proxy(function(n){n.namespace&&this._core.settings.dotsData&&this._templates.splice(n.position,0,this._templates.pop())},this),"remove.owl.carousel":n.proxy(function(n){n.namespace&&this._core.settings.dotsData&&this._templates.splice(n.position,1)},this),"changed.owl.carousel":n.proxy(function(n){n.namespace&&n.property.name=="position"&&this.draw()},this),"initialized.owl.carousel":n.proxy(function(n){n.namespace&&!this._initialized&&(this._core.trigger("initialize",null,"navigation"),this.initialize(),this.update(),this.draw(),this._initialized=!0,this._core.trigger("initialized",null,"navigation"))},this),"refreshed.owl.carousel":n.proxy(function(n){n.namespace&&this._initialized&&(this._core.trigger("refresh",null,"navigation"),this.update(),this.draw(),this._core.trigger("refreshed",null,"navigation"))},this)};this._core.options=n.extend({},t.Defaults,this._core.options);this.$element.on(this._handlers)};t.Defaults={nav:!1,navText:["prev","next"],navSpeed:!1,navElement:"div",navContainer:!1,navContainerClass:"owl-nav",navClass:["owl-prev","owl-next"],slideBy:1,dotClass:"owl-dot",dotsClass:"owl-dots",dots:!0,dotsEach:!1,dotsData:!1,dotsSpeed:!1,dotsContainer:!1};t.prototype.initialize=function(){var i,t=this._core.settings;this._controls.$relative=(t.navContainer?n(t.navContainer):n("<div>").addClass(t.navContainerClass).appendTo(this.$element)).addClass("disabled");this._controls.$previous=n("<"+t.navElement+">").addClass(t.navClass[0]).html(t.navText[0]).prependTo(this._controls.$relative).on("click",n.proxy(function(){this.prev(t.navSpeed)},this));this._controls.$next=n("<"+t.navElement+">").addClass(t.navClass[1]).html(t.navText[1]).appendTo(this._controls.$relative).on("click",n.proxy(function(){this.next(t.navSpeed)},this));t.dotsData||(this._templates=[n("<div>").addClass(t.dotClass).append(n("<span>")).prop("outerHTML")]);this._controls.$absolute=(t.dotsContainer?n(t.dotsContainer):n("<div>").addClass(t.dotsClass).appendTo(this.$element)).addClass("disabled");this._controls.$absolute.on("click","div",n.proxy(function(i){var r=n(i.target).parent().is(this._controls.$absolute)?n(i.target).index():n(i.target).parent().index();i.preventDefault();this.to(r,t.dotsSpeed)},this));for(i in this._overrides)this._core[i]=n.proxy(this[i],this)};t.prototype.destroy=function(){var n,r,t,i;for(n in this._handlers)this.$element.off(n,this._handlers[n]);for(r in this._controls)this._controls[r].remove();for(i in this.overides)this._core[i]=this._overrides[i];for(t in Object.getOwnPropertyNames(this))typeof this[t]!="function"&&(this[t]=null)};t.prototype.update=function(){var t,i,f,r=this._core.clones().length/2,o=r+this._core.items().length,u=this._core.maximum(!0),n=this._core.settings,e=n.center||n.autoWidth||n.dotsData?1:n.dotsEach||n.items;if(n.slideBy!=="page"&&(n.slideBy=Math.min(n.slideBy,n.items)),n.dots||n.slideBy=="page")for(this._pages=[],t=r,i=0,f=0;t<o;t++){if(i>=e||i===0){if(this._pages.push({start:Math.min(u,t-r),end:t-r+e-1}),Math.min(u,t-r)===u)break;i=0;++f}i+=this._core.mergers(this._core.relative(t))}};t.prototype.draw=function(){var i,t=this._core.settings,r=this._core.items().length<=t.items,u=this._core.relative(this._core.current()),f=t.loop||t.rewind;this._controls.$relative.toggleClass("disabled",!t.nav||r);t.nav&&(this._controls.$previous.toggleClass("disabled",!f&&u<=this._core.minimum(!0)),this._controls.$next.toggleClass("disabled",!f&&u>=this._core.maximum(!0)));this._controls.$absolute.toggleClass("disabled",!t.dots||r);t.dots&&(i=this._pages.length-this._controls.$absolute.children().length,t.dotsData&&i!==0?this._controls.$absolute.html(this._templates.join("")):i>0?this._controls.$absolute.append(new Array(i+1).join(this._templates[0])):i<0&&this._controls.$absolute.children().slice(i).remove(),this._controls.$absolute.find(".active").removeClass("active"),this._controls.$absolute.children().eq(n.inArray(this.current(),this._pages)).addClass("active"))};t.prototype.onTrigger=function(t){var i=this._core.settings;t.page={index:n.inArray(this.current(),this._pages),count:this._pages.length,size:i&&(i.center||i.autoWidth||i.dotsData?1:i.dotsEach||i.items)}};t.prototype.current=function(){var t=this._core.relative(this._core.current());return n.grep(this._pages,n.proxy(function(n){return n.start<=t&&n.end>=t},this)).pop()};t.prototype.getPosition=function(t){var i,r,u=this._core.settings;return u.slideBy=="page"?(i=n.inArray(this.current(),this._pages),r=this._pages.length,t?++i:--i,i=this._pages[(i%r+r)%r].start):(i=this._core.relative(this._core.current()),r=this._core.items().length,t?i+=u.slideBy:i-=u.slideBy),i};t.prototype.next=function(t){n.proxy(this._overrides.to,this._core)(this.getPosition(!0),t)};t.prototype.prev=function(t){n.proxy(this._overrides.to,this._core)(this.getPosition(!1),t)};t.prototype.to=function(t,i,r){var u;!r&&this._pages.length?(u=this._pages.length,n.proxy(this._overrides.to,this._core)(this._pages[(t%u+u)%u].start,i)):n.proxy(this._overrides.to,this._core)(t,i)};n.fn.owlCarousel.Constructor.Plugins.Navigation=t}(window.Zepto||window.jQuery,window,document),function(n,t,i,r){"use strict";var u=function(i){this._core=i;this._hashes={};this.$element=this._core.$element;this._handlers={"initialized.owl.carousel":n.proxy(function(i){i.namespace&&this._core.settings.startPosition==="URLHash"&&n(t).trigger("hashchange.owl.navigation")},this),"prepared.owl.carousel":n.proxy(function(t){if(t.namespace){var i=n(t.content).find("[data-hash]").addBack("[data-hash]").attr("data-hash");if(!i)return;this._hashes[i]=t.content}},this),"changed.owl.carousel":n.proxy(function(i){if(i.namespace&&i.property.name==="position"){var u=this._core.items(this._core.relative(this._core.current())),r=n.map(this._hashes,function(n,t){return n===u?t:null}).join();if(!r||t.location.hash.slice(1)===r)return;t.location.hash=r}},this)};this._core.options=n.extend({},u.Defaults,this._core.options);this.$element.on(this._handlers);n(t).on("hashchange.owl.navigation",n.proxy(function(){var i=t.location.hash.substring(1),u=this._core.$stage.children(),n=this._hashes[i]&&u.index(this._hashes[i]);n!==r&&n!==this._core.current()&&this._core.to(this._core.relative(n),!1,!0)},this))};u.Defaults={URLhashListener:!1};u.prototype.destroy=function(){var i,r;n(t).off("hashchange.owl.navigation");for(i in this._handlers)this._core.$element.off(i,this._handlers[i]);for(r in Object.getOwnPropertyNames(this))typeof this[r]!="function"&&(this[r]=null)};n.fn.owlCarousel.Constructor.Plugins.Hash=u}(window.Zepto||window.jQuery,window,document),function(n,t,i,r){function u(t,i){var u=!1,f=t.charAt(0).toUpperCase()+t.slice(1);return n.each((t+" "+h.join(f+" ")+f).split(" "),function(n,t){if(s[t]!==r)return u=i?t:!0,!1}),u}function e(n){return u(n,!0)}var s=n("<support>").get(0).style,h="Webkit Moz O ms".split(" "),o={transition:{end:{WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd",transition:"transitionend"}},animation:{end:{WebkitAnimation:"webkitAnimationEnd",MozAnimation:"animationend",OAnimation:"oAnimationEnd",animation:"animationend"}}},f={csstransforms:function(){return!!u("transform")},csstransforms3d:function(){return!!u("perspective")},csstransitions:function(){return!!u("transition")},cssanimations:function(){return!!u("animation")}};f.csstransitions()&&(n.support.transition=new String(e("transition")),n.support.transition.end=o.transition.end[n.support.transition]);f.cssanimations()&&(n.support.animation=new String(e("animation")),n.support.animation.end=o.animation.end[n.support.animation]);f.csstransforms()&&(n.support.transform=new String(e("transform")),n.support.transform3d=f.csstransforms3d())}(window.Zepto||window.jQuery,window,document),function(n,t,i){"use strict";function r(){function s(n,t){this.scrollLeft=n;this.scrollTop=t}function l(n){return.5*(1-Math.cos(Math.PI*n))}function f(n){if(typeof n!="object"||n===null||n.behavior===i||n.behavior==="auto"||n.behavior==="instant")return!0;if(typeof n=="object"&&n.behavior==="smooth")return!1;throw new TypeError("behavior not valid");}function a(i){var r,u,f;do i=i.parentNode,r=i===t.body,u=i.clientHeight<i.scrollHeight||i.clientWidth<i.scrollWidth,f=n.getComputedStyle(i,null).overflow==="visible";while(!r&&!(u&&!f));return r=u=f=null,i}function h(t){t.frame=n.requestAnimationFrame(h.bind(n,t));var e=o(),r,u,f,i=(e-t.startTime)/c;if(i=i>1?1:i,r=l(i),u=t.startX+(t.x-t.startX)*r,f=t.startY+(t.y-t.startY)*r,t.method.call(t.scrollable,u,f),u===t.x&&f===t.y){n.cancelAnimationFrame(t.frame);return}}function e(i,r,f){var e,c,l,a,y=o(),v;i===t.body?(e=n,c=n.scrollX||n.pageXOffset,l=n.scrollY||n.pageYOffset,a=u.scroll):(e=i,c=i.scrollLeft,l=i.scrollTop,a=s);v&&n.cancelAnimationFrame(v);h({scrollable:e,method:a,startTime:y,startX:c,startY:l,x:r,y:f,frame:v})}if(!("scrollBehavior"in t.documentElement.style)){var r=n.HTMLElement||n.Element,c=468,u={scroll:n.scroll||n.scrollTo,scrollBy:n.scrollBy,elScroll:r.prototype.scroll||s,scrollIntoView:r.prototype.scrollIntoView},o=n.performance&&n.performance.now?n.performance.now.bind(n.performance):Date.now;n.scroll=n.scrollTo=function(){if(f(arguments[0])){u.scroll.call(n,arguments[0].left||arguments[0],arguments[0].top||arguments[1]);return}e.call(n,t.body,~~arguments[0].left,~~arguments[0].top)};n.scrollBy=function(){if(f(arguments[0])){u.scrollBy.call(n,arguments[0].left||arguments[0],arguments[0].top||arguments[1]);return}e.call(n,t.body,~~arguments[0].left+(n.scrollX||n.pageXOffset),~~arguments[0].top+(n.scrollY||n.pageYOffset))};r.prototype.scroll=r.prototype.scrollTo=function(){if(f(arguments[0])){u.elScroll.call(this,arguments[0].left||arguments[0],arguments[0].top||arguments[1]);return}e.call(this,this,arguments[0].left,arguments[0].top)};r.prototype.scrollBy=function(){var n=arguments[0];typeof n=="object"?this.scroll({left:n.left+this.scrollLeft,top:n.top+this.scrollTop,behavior:n.behavior}):this.scroll(this.scrollLeft+n,this.scrollTop+arguments[1])};r.prototype.scrollIntoView=function(){if(f(arguments[0])){u.scrollIntoView.call(this,arguments[0]||!0);return}var i=a(this),r=i.getBoundingClientRect(),o=this.getBoundingClientRect();i!==t.body?(e.call(this,i,i.scrollLeft+o.left-r.left,i.scrollTop+o.top-r.top),n.scrollBy({left:r.left,top:r.top,behavior:"smooth"})):n.scrollBy({left:o.left,top:o.top,behavior:"smooth"})}}}typeof exports=="object"?module.exports={polyfill:r}:r()}(window,document);window.matchMedia||(window.matchMedia=function(){"use strict";var t=window.styleMedia||window.media;if(!t){var n=document.createElement("style"),i=document.getElementsByTagName("script")[0],r=null;n.type="text/css";n.id="matchmediajs-test";i.parentNode.insertBefore(n,i);r="getComputedStyle"in window&&window.getComputedStyle(n,null)||n.currentStyle;t={matchMedium:function(t){var i="@media "+t+"{ #matchmediajs-test { width: 1px; } }";return n.styleSheet?n.styleSheet.cssText=i:n.textContent=i,r.width==="1px"}}}return function(n){return{matches:t.matchMedium(n||"all"),media:n||"all"}}}()),function(n,t,i){"use strict";function f(t){typeof module=="object"&&typeof module.exports=="object"?module.exports=t:typeof define=="function"&&define.amd&&define("picturefill",function(){return t});typeof n=="object"&&(n.picturefill=t)}function u(n){var s,t,i,u,f,h=n||{},o,c;for(s=h.elements||r.getAllElements(),o=0,c=s.length;o<c;o++)if((t=s[o],i=t.parentNode,u=undefined,f=undefined,t.nodeName.toUpperCase()==="IMG")&&(t[r.ns]||(t[r.ns]={}),h.reevaluate||!t[r.ns].evaluated)){if(i&&i.nodeName.toUpperCase()==="PICTURE"){if(r.removeVideoShim(i),u=r.getMatch(t,i),u===!1)continue}else u=undefined;(i&&i.nodeName.toUpperCase()==="PICTURE"||!r.sizesSupported&&t.srcset&&e.test(t.srcset))&&r.dodgeSrcset(t);u?(f=r.processSourceSet(u),r.applyBestCandidate(f,t)):(f=r.processSourceSet(t),(t.srcset===undefined||t[r.ns].srcset)&&r.applyBestCandidate(f,t));t[r.ns].evaluated=!0}}function o(){function f(){clearTimeout(i);i=setTimeout(o,60)}r.initTypeDetects();u();var e=setInterval(function(){if(u(),/^loaded|^i|^c/.test(t.readyState)){clearInterval(e);return}},250),i,o=function(){u({reevaluate:!0})};n.addEventListener?n.addEventListener("resize",f,!1):n.attachEvent&&n.attachEvent("onresize",f)}if(n.HTMLPictureElement){f(function(){});return}t.createElement("picture");var r=n.picturefill||{},e=/\s+\+?\d+(e\d+)?w/;r.ns="picturefill",function(){r.srcsetSupported="srcset"in i;r.sizesSupported="sizes"in i;r.curSrcSupported="currentSrc"in i}();r.trim=function(n){return n.trim?n.trim():n.replace(/^\s+|\s+$/g,"")};r.makeUrl=function(){var n=t.createElement("a");return function(t){return n.href=t,n.href}}();r.restrictsMixedContent=function(){return n.location.protocol==="https:"};r.matchesMedia=function(t){return n.matchMedia&&n.matchMedia(t).matches};r.getDpr=function(){return n.devicePixelRatio||1};r.getWidthFromLength=function(n){var i;if(!(n&&n.indexOf("%")>-1==!1&&(parseFloat(n)>0||n.indexOf("calc(")>-1)))return!1;n=n.replace("vw","%");r.lengthEl||(r.lengthEl=t.createElement("div"),r.lengthEl.style.cssText="border:0;display:block;font-size:1em;left:0;margin:0;padding:0;position:absolute;visibility:hidden",r.lengthEl.className="helper-from-picturefill-js");r.lengthEl.style.width="0px";try{r.lengthEl.style.width=n}catch(u){}return t.body.appendChild(r.lengthEl),i=r.lengthEl.offsetWidth,i<=0&&(i=!1),t.body.removeChild(r.lengthEl),i};r.detectTypeSupport=function(t,i){var f=new n.Image;return f.onerror=function(){r.types[t]=!1;u()},f.onload=function(){r.types[t]=f.width===1;u()},f.src=i,"pending"};r.types=r.types||{};r.initTypeDetects=function(){r.types["image/jpeg"]=!0;r.types["image/gif"]=!0;r.types["image/png"]=!0;r.types["image/svg+xml"]=t.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#Image","1.1");r.types["image/webp"]=r.detectTypeSupport("image/webp","data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAAAAAAfQ//73v/+BiOh/AAA=")};r.verifyTypeSupport=function(n){var i=n.getAttribute("type"),t;return i===null||i===""?!0:(t=r.types[i],typeof t=="string"&&t!=="pending"?(r.types[i]=r.detectTypeSupport(i,t),"pending"):typeof t=="function"?(t(),"pending"):t)};r.parseSize=function(n){var t=/(\([^)]+\))?\s*(.+)/g.exec(n);return{media:t&&t[1],length:t&&t[2]}};r.findWidthFromSourceSize=function(i){for(var f=r.trim(i).split(/\s*,\s*/),e,u=0,o=f.length;u<o;u++){var l=f[u],s=r.parseSize(l),h=s.length,c=s.media;if(h&&(!c||r.matchesMedia(c))&&(e=r.getWidthFromLength(h)))break}return e||Math.max(n.innerWidth||0,t.documentElement.clientWidth)};r.parseSrcset=function(n){for(var f=[],r,t,i,e,u;n!=="";)n=n.replace(/^\s+/g,""),r=n.search(/\s/g),i=null,r!==-1?(t=n.slice(0,r),e=t.slice(-1),(e===","||t==="")&&(t=t.replace(/,+$/,""),i=""),n=n.slice(r+1),i===null&&(u=n.indexOf(","),u!==-1?(i=n.slice(0,u),n=n.slice(u+1)):(i=n,n=""))):(t=n,n=""),(t||i)&&f.push({url:t,descriptor:i});return f};r.parseDescriptor=function(n,t){var c=t||"100vw",h=n&&n.replace(/(^\s+|\s+$)/g,""),l=r.findWidthFromSourceSize(c),o,s,u,i,f,e;if(h)for(s=h.split(" "),u=s.length-1;u>=0;u--)i=s[u],f=i&&i.slice(i.length-1),f!=="h"&&f!=="w"||r.sizesSupported?f==="x"&&(e=i&&parseFloat(i,10),o=e&&!isNaN(e)?e:1):o=parseFloat(parseInt(i,10)/l);return o||1};r.getCandidatesFromSourceSet=function(n,t){for(var f=r.parseSrcset(n),e=[],u,i=0,o=f.length;i<o;i++)u=f[i],e.push({url:u.url,resolution:r.parseDescriptor(u.descriptor,t)});return e};r.dodgeSrcset=function(n){n.srcset&&(n[r.ns].srcset=n.srcset,n.srcset="",n.setAttribute("data-pfsrcset",n[r.ns].srcset))};r.processSourceSet=function(n){var t=n.getAttribute("srcset"),u=n.getAttribute("sizes"),i=[];return n.nodeName.toUpperCase()==="IMG"&&n[r.ns]&&n[r.ns].srcset&&(t=n[r.ns].srcset),t&&(i=r.getCandidatesFromSourceSet(t,u)),i};r.backfaceVisibilityFix=function(n){var t=n.style||{},i="webkitBackfaceVisibility"in t,r=t.zoom;i&&(t.zoom=".999",i=n.offsetWidth,t.zoom=r)};r.setIntrinsicSize=function(){var i={},u=function(n,t,i){t&&n.setAttribute("width",parseInt(t/i,10))};return function(f,e){var o;f[r.ns]&&!n.pfStopIntrinsicSize&&((f[r.ns].dims===undefined&&(f[r.ns].dims=f.getAttribute("width")||f.getAttribute("height")),f[r.ns].dims)||(e.url in i?u(f,i[e.url],e.resolution):(o=t.createElement("img"),o.onload=function(){if(i[e.url]=o.width,!i[e.url])try{t.body.appendChild(o);i[e.url]=o.width||o.offsetWidth;t.body.removeChild(o)}catch(n){}f.src===e.url&&u(f,i[e.url],e.resolution);f=null;o.onload=null;o=null},o.src=e.url)))}}();r.applyBestCandidate=function(n,t){var f,e,i,u;for(n.sort(r.ascendingSort),e=n.length,i=n[e-1],u=0;u<e;u++)if(f=n[u],f.resolution>=r.getDpr()){i=f;break}i&&(i.url=r.makeUrl(i.url),t.src!==i.url&&(r.restrictsMixedContent()&&i.url.substr(0,5).toLowerCase()==="http:"?window.console!==undefined&&console.warn("Blocked mixed content image "+i.url):(t.src=i.url,r.curSrcSupported||(t.currentSrc=t.src),r.backfaceVisibilityFix(t))),r.setIntrinsicSize(t,i))};r.ascendingSort=function(n,t){return n.resolution-t.resolution};r.removeVideoShim=function(n){var r=n.getElementsByTagName("video"),t,i;if(r.length){for(t=r[0],i=t.getElementsByTagName("source");i.length;)n.insertBefore(i[0],t);t.parentNode.removeChild(t)}};r.getAllElements=function(){for(var u=[],f=t.getElementsByTagName("img"),n,i=0,e=f.length;i<e;i++)n=f[i],(n.parentNode.nodeName.toUpperCase()==="PICTURE"||n.getAttribute("srcset")!==null||n[r.ns]&&n[r.ns].srcset!==null)&&u.push(n);return u};r.getMatch=function(n,t){for(var s=t.childNodes,f,i,e,o,u=0,h=s.length;u<h;u++)if(i=s[u],i.nodeType===1){if(i===n)return f;if(i.nodeName.toUpperCase()==="SOURCE"&&(i.getAttribute("src")!==null&&typeof console!==undefined&&console.warn("The `src` attribute is invalid on `picture` `source` element; instead, use `srcset`."),e=i.getAttribute("media"),i.getAttribute("srcset"))&&(!e||r.matchesMedia(e)))if(o=r.verifyTypeSupport(i),o===!0){f=i;break}else if(o==="pending")return!1}return f};o();u._=r;f(u)}(window,window.document,new window.Image);!function(n){function t(r){if(i[r])return i[r].exports;var u=i[r]={i:r,l:!1,exports:{}};return n[r].call(u.exports,u,u.exports,t),u.l=!0,u.exports}var i={};t.m=n;t.c=i;t.d=function(n,i,r){t.o(n,i)||Object.defineProperty(n,i,{configurable:!1,enumerable:!0,get:r})};t.r=function(n){Object.defineProperty(n,"__esModule",{value:!0})};t.n=function(n){var i=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(i,"a",i),i};t.o=function(n,t){return Object.prototype.hasOwnProperty.call(n,t)};t.p="";t(t.s=199)}({0:function(module,__webpack_exports__,__webpack_require__){"use strict";eval("/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return AggregateError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"c\", function() { return FEATURE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"d\", function() { return PLATFORM; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return DOM; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"f\", function() { return isInitialized; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"e\", function() { return initializePAL; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"g\", function() { return reset; });\n\nfunction AggregateError(message, innerError, skipIfAlreadyAggregate) {\n  if (innerError) {\n    if (innerError.innerError && skipIfAlreadyAggregate) {\n      return innerError;\n    }\n\n    var separator = '\\n------------------------------------------------\\n';\n\n    message += separator + 'Inner Error:\\n';\n\n    if (typeof innerError === 'string') {\n      message += 'Message: ' + innerError;\n    } else {\n      if (innerError.message) {\n        message += 'Message: ' + innerError.message;\n      } else {\n        message += 'Unknown Inner Error Type. Displaying Inner Error as JSON:\\n ' + JSON.stringify(innerError, null, '  ');\n      }\n\n      if (innerError.stack) {\n        message += '\\nInner Error Stack:\\n' + innerError.stack;\n        message += '\\nEnd Inner Error Stack';\n      }\n    }\n\n    message += separator;\n  }\n\n  var e = new Error(message);\n  if (innerError) {\n    e.innerError = innerError;\n  }\n\n  return e;\n}\n\nvar FEATURE = {};\n\nvar PLATFORM = {\n  noop: function noop() {},\n  eachModule: function eachModule() {},\n  moduleName: function (_moduleName) {\n    function moduleName(_x) {\n      return _moduleName.apply(this, arguments);\n    }\n\n    moduleName.toString = function () {\n      return _moduleName.toString();\n    };\n\n    return moduleName;\n  }(function (moduleName) {\n    return moduleName;\n  })\n};\n\nPLATFORM.global = function () {\n  if (typeof self !== 'undefined') {\n    return self;\n  }\n\n  if (typeof global !== 'undefined') {\n    return global;\n  }\n\n  return new Function('return this')();\n}();\n\nvar DOM = {};\nvar isInitialized = false;\n\nfunction initializePAL(callback) {\n  if (isInitialized) {\n    return;\n  }\n  isInitialized = true;\n  if (typeof Object.getPropertyDescriptor !== 'function') {\n    Object.getPropertyDescriptor = function (subject, name) {\n      var pd = Object.getOwnPropertyDescriptor(subject, name);\n      var proto = Object.getPrototypeOf(subject);\n      while (typeof pd === 'undefined' && proto !== null) {\n        pd = Object.getOwnPropertyDescriptor(proto, name);\n        proto = Object.getPrototypeOf(proto);\n      }\n      return pd;\n    };\n  }\n\n  callback(PLATFORM, FEATURE, DOM);\n}\nfunction reset() {\n  isInitialized = false;\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(22)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXVyZWxpYS1wYWwvZGlzdC9uYXRpdmUtbW9kdWxlcy9hdXJlbGlhLXBhbC5qcz9lZjQzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFTzs7QUFFQTtBQUNQLDBCQUEwQjtBQUMxQixzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRU07QUFDQTs7QUFFQTtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ087QUFDUDtBQUNBLEMiLCJmaWxlIjoiMC5qcyIsInNvdXJjZXNDb250ZW50IjpbIlxuZXhwb3J0IGZ1bmN0aW9uIEFnZ3JlZ2F0ZUVycm9yKG1lc3NhZ2UsIGlubmVyRXJyb3IsIHNraXBJZkFscmVhZHlBZ2dyZWdhdGUpIHtcbiAgaWYgKGlubmVyRXJyb3IpIHtcbiAgICBpZiAoaW5uZXJFcnJvci5pbm5lckVycm9yICYmIHNraXBJZkFscmVhZHlBZ2dyZWdhdGUpIHtcbiAgICAgIHJldHVybiBpbm5lckVycm9yO1xuICAgIH1cblxuICAgIHZhciBzZXBhcmF0b3IgPSAnXFxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuJztcblxuICAgIG1lc3NhZ2UgKz0gc2VwYXJhdG9yICsgJ0lubmVyIEVycm9yOlxcbic7XG5cbiAgICBpZiAodHlwZW9mIGlubmVyRXJyb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICBtZXNzYWdlICs9ICdNZXNzYWdlOiAnICsgaW5uZXJFcnJvcjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGlubmVyRXJyb3IubWVzc2FnZSkge1xuICAgICAgICBtZXNzYWdlICs9ICdNZXNzYWdlOiAnICsgaW5uZXJFcnJvci5tZXNzYWdlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWVzc2FnZSArPSAnVW5rbm93biBJbm5lciBFcnJvciBUeXBlLiBEaXNwbGF5aW5nIElubmVyIEVycm9yIGFzIEpTT046XFxuICcgKyBKU09OLnN0cmluZ2lmeShpbm5lckVycm9yLCBudWxsLCAnICAnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlubmVyRXJyb3Iuc3RhY2spIHtcbiAgICAgICAgbWVzc2FnZSArPSAnXFxuSW5uZXIgRXJyb3IgU3RhY2s6XFxuJyArIGlubmVyRXJyb3Iuc3RhY2s7XG4gICAgICAgIG1lc3NhZ2UgKz0gJ1xcbkVuZCBJbm5lciBFcnJvciBTdGFjayc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbWVzc2FnZSArPSBzZXBhcmF0b3I7XG4gIH1cblxuICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgaWYgKGlubmVyRXJyb3IpIHtcbiAgICBlLmlubmVyRXJyb3IgPSBpbm5lckVycm9yO1xuICB9XG5cbiAgcmV0dXJuIGU7XG59XG5cbmV4cG9ydCB2YXIgRkVBVFVSRSA9IHt9O1xuXG5leHBvcnQgdmFyIFBMQVRGT1JNID0ge1xuICBub29wOiBmdW5jdGlvbiBub29wKCkge30sXG4gIGVhY2hNb2R1bGU6IGZ1bmN0aW9uIGVhY2hNb2R1bGUoKSB7fSxcbiAgbW9kdWxlTmFtZTogZnVuY3Rpb24gKF9tb2R1bGVOYW1lKSB7XG4gICAgZnVuY3Rpb24gbW9kdWxlTmFtZShfeCkge1xuICAgICAgcmV0dXJuIF9tb2R1bGVOYW1lLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgbW9kdWxlTmFtZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfbW9kdWxlTmFtZS50b1N0cmluZygpO1xuICAgIH07XG5cbiAgICByZXR1cm4gbW9kdWxlTmFtZTtcbiAgfShmdW5jdGlvbiAobW9kdWxlTmFtZSkge1xuICAgIHJldHVybiBtb2R1bGVOYW1lO1xuICB9KVxufTtcblxuUExBVEZPUk0uZ2xvYmFsID0gZnVuY3Rpb24gKCkge1xuICBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIHNlbGY7XG4gIH1cblxuICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZ2xvYmFsO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xufSgpO1xuXG5leHBvcnQgdmFyIERPTSA9IHt9O1xuZXhwb3J0IHZhciBpc0luaXRpYWxpemVkID0gZmFsc2U7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplUEFMKGNhbGxiYWNrKSB7XG4gIGlmIChpc0luaXRpYWxpemVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICBpZiAodHlwZW9mIE9iamVjdC5nZXRQcm9wZXJ0eURlc2NyaXB0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICBPYmplY3QuZ2V0UHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gKHN1YmplY3QsIG5hbWUpIHtcbiAgICAgIHZhciBwZCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc3ViamVjdCwgbmFtZSk7XG4gICAgICB2YXIgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc3ViamVjdCk7XG4gICAgICB3aGlsZSAodHlwZW9mIHBkID09PSAndW5kZWZpbmVkJyAmJiBwcm90byAhPT0gbnVsbCkge1xuICAgICAgICBwZCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIG5hbWUpO1xuICAgICAgICBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90byk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGQ7XG4gICAgfTtcbiAgfVxuXG4gIGNhbGxiYWNrKFBMQVRGT1JNLCBGRUFUVVJFLCBET00pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJlc2V0KCkge1xuICBpc0luaXRpYWxpemVkID0gZmFsc2U7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///0\n")},1:function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getArrayObserver\", function() { return _getArrayObserver; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getMapObserver\", function() { return _getMapObserver; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getSetObserver\", function() { return _getSetObserver; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"targetContext\", function() { return targetContext; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"sourceContext\", function() { return sourceContext; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"camelCase\", function() { return camelCase; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createOverrideContext\", function() { return createOverrideContext; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getContextFor\", function() { return getContextFor; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createScopeForTest\", function() { return createScopeForTest; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"connectable\", function() { return connectable; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"enqueueBindingConnect\", function() { return enqueueBindingConnect; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setConnectQueueThreshold\", function() { return setConnectQueueThreshold; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"enableConnectQueue\", function() { return enableConnectQueue; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"disableConnectQueue\", function() { return disableConnectQueue; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getConnectQueueSize\", function() { return getConnectQueueSize; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"subscriberCollection\", function() { return subscriberCollection; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ExpressionObserver\", function() { return ExpressionObserver; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"calcSplices\", function() { return calcSplices; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mergeSplice\", function() { return mergeSplice; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"projectArraySplices\", function() { return projectArraySplices; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getChangeRecords\", function() { return getChangeRecords; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ModifyCollectionObserver\", function() { return ModifyCollectionObserver; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CollectionLengthObserver\", function() { return CollectionLengthObserver; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Expression\", function() { return Expression; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"BindingBehavior\", function() { return BindingBehavior; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ValueConverter\", function() { return ValueConverter; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Assign\", function() { return Assign; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Conditional\", function() { return Conditional; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AccessThis\", function() { return AccessThis; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AccessScope\", function() { return AccessScope; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AccessMember\", function() { return AccessMember; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AccessKeyed\", function() { return AccessKeyed; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CallScope\", function() { return CallScope; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CallMember\", function() { return CallMember; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CallFunction\", function() { return CallFunction; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Binary\", function() { return Binary; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Unary\", function() { return Unary; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LiteralPrimitive\", function() { return LiteralPrimitive; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LiteralString\", function() { return LiteralString; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LiteralTemplate\", function() { return LiteralTemplate; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LiteralArray\", function() { return LiteralArray; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LiteralObject\", function() { return LiteralObject; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Unparser\", function() { return _Unparser; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ExpressionCloner\", function() { return ExpressionCloner; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"cloneExpression\", function() { return cloneExpression; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"bindingMode\", function() { return bindingMode; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Parser\", function() { return Parser; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ParserImplementation\", function() { return ParserImplementation; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"delegationStrategy\", function() { return delegationStrategy; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"EventManager\", function() { return EventManager; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"EventSubscriber\", function() { return EventSubscriber; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DirtyChecker\", function() { return DirtyChecker; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DirtyCheckProperty\", function() { return DirtyCheckProperty; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"propertyAccessor\", function() { return propertyAccessor; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PrimitiveObserver\", function() { return PrimitiveObserver; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SetterObserver\", function() { return SetterObserver; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"XLinkAttributeObserver\", function() { return XLinkAttributeObserver; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"dataAttributeAccessor\", function() { return dataAttributeAccessor; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DataAttributeObserver\", function() { return DataAttributeObserver; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"StyleObserver\", function() { return StyleObserver; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ValueAttributeObserver\", function() { return ValueAttributeObserver; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CheckedObserver\", function() { return CheckedObserver; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SelectValueObserver\", function() { return SelectValueObserver; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ClassObserver\", function() { return ClassObserver; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"hasDeclaredDependencies\", function() { return hasDeclaredDependencies; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"declarePropertyDependencies\", function() { return declarePropertyDependencies; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"computedFrom\", function() { return computedFrom; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ComputedExpression\", function() { return ComputedExpression; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createComputedObserver\", function() { return createComputedObserver; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"elements\", function() { return elements; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"presentationElements\", function() { return presentationElements; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"presentationAttributes\", function() { return presentationAttributes; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SVGAnalyzer\", function() { return SVGAnalyzer; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ObserverLocator\", function() { return ObserverLocator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ObjectObservationAdapter\", function() { return ObjectObservationAdapter; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"BindingExpression\", function() { return BindingExpression; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Binding\", function() { return Binding; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CallExpression\", function() { return CallExpression; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Call\", function() { return Call; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ValueConverterResource\", function() { return ValueConverterResource; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"valueConverter\", function() { return valueConverter; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"BindingBehaviorResource\", function() { return BindingBehaviorResource; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"bindingBehavior\", function() { return bindingBehavior; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ListenerExpression\", function() { return ListenerExpression; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Listener\", function() { return Listener; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NameExpression\", function() { return NameExpression; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"BindingEngine\", function() { return BindingEngine; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"observable\", function() { return observable; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"connectBindingToSignal\", function() { return connectBindingToSignal; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"signalBindings\", function() { return signalBindings; });\n/* harmony import */ var aurelia_logging__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5);\n/* harmony import */ var aurelia_pal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(0);\n/* harmony import */ var aurelia_task_queue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(10);\n/* harmony import */ var aurelia_metadata__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4);\n\n\n\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _dec, _dec2, _class, _dec3, _class2, _dec4, _class3, _dec5, _class5, _dec6, _class7, _dec7, _class8, _dec8, _class9, _dec9, _class10, _class12, _temp, _dec10, _class13, _class14, _temp2;\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\n\n\n\n\n\nvar targetContext = 'Binding:target';\nvar sourceContext = 'Binding:source';\n\nvar map = Object.create(null);\n\nfunction camelCase(name) {\n  if (name in map) {\n    return map[name];\n  }\n  var result = name.charAt(0).toLowerCase() + name.slice(1).replace(/[_.-](\\w|$)/g, function (_, x) {\n    return x.toUpperCase();\n  });\n  map[name] = result;\n  return result;\n}\n\nfunction createOverrideContext(bindingContext, parentOverrideContext) {\n  return {\n    bindingContext: bindingContext,\n    parentOverrideContext: parentOverrideContext || null\n  };\n}\n\nfunction getContextFor(name, scope, ancestor) {\n  var oc = scope.overrideContext;\n\n  if (ancestor) {\n    while (ancestor && oc) {\n      ancestor--;\n      oc = oc.parentOverrideContext;\n    }\n    if (ancestor || !oc) {\n      return undefined;\n    }\n    return name in oc ? oc : oc.bindingContext;\n  }\n\n  while (oc && !(name in oc) && !(oc.bindingContext && name in oc.bindingContext)) {\n    oc = oc.parentOverrideContext;\n  }\n  if (oc) {\n    return name in oc ? oc : oc.bindingContext;\n  }\n\n  return scope.bindingContext || scope.overrideContext;\n}\n\nfunction createScopeForTest(bindingContext, parentBindingContext) {\n  if (parentBindingContext) {\n    return {\n      bindingContext: bindingContext,\n      overrideContext: createOverrideContext(bindingContext, createOverrideContext(parentBindingContext))\n    };\n  }\n  return {\n    bindingContext: bindingContext,\n    overrideContext: createOverrideContext(bindingContext)\n  };\n}\n\nvar slotNames = [];\nvar versionSlotNames = [];\nvar lastSlot = -1;\nfunction ensureEnoughSlotNames(currentSlot) {\n  if (currentSlot === lastSlot) {\n    lastSlot += 5;\n    var ii = slotNames.length = versionSlotNames.length = lastSlot + 1;\n    for (var i = currentSlot + 1; i < ii; ++i) {\n      slotNames[i] = '_observer' + i;\n      versionSlotNames[i] = '_observerVersion' + i;\n    }\n  }\n}\nensureEnoughSlotNames(-1);\n\nfunction addObserver(observer) {\n  var observerSlots = this._observerSlots === undefined ? 0 : this._observerSlots;\n  var i = observerSlots;\n  while (i-- && this[slotNames[i]] !== observer) {}\n\n  if (i === -1) {\n    i = 0;\n    while (this[slotNames[i]]) {\n      i++;\n    }\n    this[slotNames[i]] = observer;\n    observer.subscribe(sourceContext, this);\n\n    if (i === observerSlots) {\n      this._observerSlots = i + 1;\n    }\n  }\n\n  if (this._version === undefined) {\n    this._version = 0;\n  }\n  this[versionSlotNames[i]] = this._version;\n  ensureEnoughSlotNames(i);\n}\n\nfunction observeProperty(obj, propertyName) {\n  var observer = this.observerLocator.getObserver(obj, propertyName);\n  addObserver.call(this, observer);\n}\n\nfunction observeArray(array) {\n  var observer = this.observerLocator.getArrayObserver(array);\n  addObserver.call(this, observer);\n}\n\nfunction unobserve(all) {\n  var i = this._observerSlots;\n  while (i--) {\n    if (all || this[versionSlotNames[i]] !== this._version) {\n      var observer = this[slotNames[i]];\n      this[slotNames[i]] = null;\n      if (observer) {\n        observer.unsubscribe(sourceContext, this);\n      }\n    }\n  }\n}\n\nfunction connectable() {\n  return function (target) {\n    target.prototype.observeProperty = observeProperty;\n    target.prototype.observeArray = observeArray;\n    target.prototype.unobserve = unobserve;\n    target.prototype.addObserver = addObserver;\n  };\n}\n\nvar queue = [];\nvar queued = {};\nvar nextId = 0;\nvar minimumImmediate = 100;\nvar frameBudget = 15;\n\nvar isFlushRequested = false;\nvar immediate = 0;\n\nfunction flush(animationFrameStart) {\n  var length = queue.length;\n  var i = 0;\n  while (i < length) {\n    var binding = queue[i];\n    queued[binding.__connectQueueId] = false;\n    binding.connect(true);\n    i++;\n\n    if (i % 100 === 0 && aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* PLATFORM */ \"d\"].performance.now() - animationFrameStart > frameBudget) {\n      break;\n    }\n  }\n  queue.splice(0, i);\n\n  if (queue.length) {\n    aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* PLATFORM */ \"d\"].requestAnimationFrame(flush);\n  } else {\n    isFlushRequested = false;\n    immediate = 0;\n  }\n}\n\nfunction enqueueBindingConnect(binding) {\n  if (immediate < minimumImmediate) {\n    immediate++;\n    binding.connect(false);\n  } else {\n    var id = binding.__connectQueueId;\n    if (id === undefined) {\n      id = nextId;\n      nextId++;\n      binding.__connectQueueId = id;\n    }\n\n    if (!queued[id]) {\n      queue.push(binding);\n      queued[id] = true;\n    }\n  }\n  if (!isFlushRequested) {\n    isFlushRequested = true;\n    aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* PLATFORM */ \"d\"].requestAnimationFrame(flush);\n  }\n}\n\nfunction setConnectQueueThreshold(value) {\n  minimumImmediate = value;\n}\n\nfunction enableConnectQueue() {\n  setConnectQueueThreshold(100);\n}\n\nfunction disableConnectQueue() {\n  setConnectQueueThreshold(Number.MAX_SAFE_INTEGER);\n}\n\nfunction getConnectQueueSize() {\n  return queue.length;\n}\n\nfunction addSubscriber(context, callable) {\n  if (this.hasSubscriber(context, callable)) {\n    return false;\n  }\n  if (!this._context0) {\n    this._context0 = context;\n    this._callable0 = callable;\n    return true;\n  }\n  if (!this._context1) {\n    this._context1 = context;\n    this._callable1 = callable;\n    return true;\n  }\n  if (!this._context2) {\n    this._context2 = context;\n    this._callable2 = callable;\n    return true;\n  }\n  if (!this._contextsRest) {\n    this._contextsRest = [context];\n    this._callablesRest = [callable];\n    return true;\n  }\n  this._contextsRest.push(context);\n  this._callablesRest.push(callable);\n  return true;\n}\n\nfunction removeSubscriber(context, callable) {\n  if (this._context0 === context && this._callable0 === callable) {\n    this._context0 = null;\n    this._callable0 = null;\n    return true;\n  }\n  if (this._context1 === context && this._callable1 === callable) {\n    this._context1 = null;\n    this._callable1 = null;\n    return true;\n  }\n  if (this._context2 === context && this._callable2 === callable) {\n    this._context2 = null;\n    this._callable2 = null;\n    return true;\n  }\n  var callables = this._callablesRest;\n  if (callables === undefined || callables.length === 0) {\n    return false;\n  }\n  var contexts = this._contextsRest;\n  var i = 0;\n  while (!(callables[i] === callable && contexts[i] === context) && callables.length > i) {\n    i++;\n  }\n  if (i >= callables.length) {\n    return false;\n  }\n  contexts.splice(i, 1);\n  callables.splice(i, 1);\n  return true;\n}\n\nvar arrayPool1 = [];\nvar arrayPool2 = [];\nvar poolUtilization = [];\n\nfunction callSubscribers(newValue, oldValue) {\n  var context0 = this._context0;\n  var callable0 = this._callable0;\n  var context1 = this._context1;\n  var callable1 = this._callable1;\n  var context2 = this._context2;\n  var callable2 = this._callable2;\n  var length = this._contextsRest ? this._contextsRest.length : 0;\n  var contextsRest = void 0;\n  var callablesRest = void 0;\n  var poolIndex = void 0;\n  var i = void 0;\n  if (length) {\n    poolIndex = poolUtilization.length;\n    while (poolIndex-- && poolUtilization[poolIndex]) {}\n    if (poolIndex < 0) {\n      poolIndex = poolUtilization.length;\n      contextsRest = [];\n      callablesRest = [];\n      poolUtilization.push(true);\n      arrayPool1.push(contextsRest);\n      arrayPool2.push(callablesRest);\n    } else {\n      poolUtilization[poolIndex] = true;\n      contextsRest = arrayPool1[poolIndex];\n      callablesRest = arrayPool2[poolIndex];\n    }\n\n    i = length;\n    while (i--) {\n      contextsRest[i] = this._contextsRest[i];\n      callablesRest[i] = this._callablesRest[i];\n    }\n  }\n\n  if (context0) {\n    if (callable0) {\n      callable0.call(context0, newValue, oldValue);\n    } else {\n      context0(newValue, oldValue);\n    }\n  }\n  if (context1) {\n    if (callable1) {\n      callable1.call(context1, newValue, oldValue);\n    } else {\n      context1(newValue, oldValue);\n    }\n  }\n  if (context2) {\n    if (callable2) {\n      callable2.call(context2, newValue, oldValue);\n    } else {\n      context2(newValue, oldValue);\n    }\n  }\n  if (length) {\n    for (i = 0; i < length; i++) {\n      var callable = callablesRest[i];\n      var context = contextsRest[i];\n      if (callable) {\n        callable.call(context, newValue, oldValue);\n      } else {\n        context(newValue, oldValue);\n      }\n      contextsRest[i] = null;\n      callablesRest[i] = null;\n    }\n    poolUtilization[poolIndex] = false;\n  }\n}\n\nfunction hasSubscribers() {\n  return !!(this._context0 || this._context1 || this._context2 || this._contextsRest && this._contextsRest.length);\n}\n\nfunction hasSubscriber(context, callable) {\n  var has = this._context0 === context && this._callable0 === callable || this._context1 === context && this._callable1 === callable || this._context2 === context && this._callable2 === callable;\n  if (has) {\n    return true;\n  }\n  var index = void 0;\n  var contexts = this._contextsRest;\n  if (!contexts || (index = contexts.length) === 0) {\n    return false;\n  }\n  var callables = this._callablesRest;\n  while (index--) {\n    if (contexts[index] === context && callables[index] === callable) {\n      return true;\n    }\n  }\n  return false;\n}\n\nfunction subscriberCollection() {\n  return function (target) {\n    target.prototype.addSubscriber = addSubscriber;\n    target.prototype.removeSubscriber = removeSubscriber;\n    target.prototype.callSubscribers = callSubscribers;\n    target.prototype.hasSubscribers = hasSubscribers;\n    target.prototype.hasSubscriber = hasSubscriber;\n  };\n}\n\nvar ExpressionObserver = (_dec = connectable(), _dec2 = subscriberCollection(), _dec(_class = _dec2(_class = function () {\n  function ExpressionObserver(scope, expression, observerLocator, lookupFunctions) {\n    \n\n    this.scope = scope;\n    this.expression = expression;\n    this.observerLocator = observerLocator;\n    this.lookupFunctions = lookupFunctions;\n  }\n\n  ExpressionObserver.prototype.getValue = function getValue() {\n    return this.expression.evaluate(this.scope, this.lookupFunctions);\n  };\n\n  ExpressionObserver.prototype.setValue = function setValue(newValue) {\n    this.expression.assign(this.scope, newValue);\n  };\n\n  ExpressionObserver.prototype.subscribe = function subscribe(context, callable) {\n    var _this = this;\n\n    if (!this.hasSubscribers()) {\n      this.oldValue = this.expression.evaluate(this.scope, this.lookupFunctions);\n      this.expression.connect(this, this.scope);\n    }\n    this.addSubscriber(context, callable);\n    if (arguments.length === 1 && context instanceof Function) {\n      return {\n        dispose: function dispose() {\n          _this.unsubscribe(context, callable);\n        }\n      };\n    }\n  };\n\n  ExpressionObserver.prototype.unsubscribe = function unsubscribe(context, callable) {\n    if (this.removeSubscriber(context, callable) && !this.hasSubscribers()) {\n      this.unobserve(true);\n      this.oldValue = undefined;\n    }\n  };\n\n  ExpressionObserver.prototype.call = function call() {\n    var newValue = this.expression.evaluate(this.scope, this.lookupFunctions);\n    var oldValue = this.oldValue;\n    if (newValue !== oldValue) {\n      this.oldValue = newValue;\n      this.callSubscribers(newValue, oldValue);\n    }\n    this._version++;\n    this.expression.connect(this, this.scope);\n    this.unobserve(false);\n  };\n\n  return ExpressionObserver;\n}()) || _class) || _class);\n\nfunction isIndex(s) {\n  return +s === s >>> 0;\n}\n\nfunction toNumber(s) {\n  return +s;\n}\n\nfunction newSplice(index, removed, addedCount) {\n  return {\n    index: index,\n    removed: removed,\n    addedCount: addedCount\n  };\n}\n\nvar EDIT_LEAVE = 0;\nvar EDIT_UPDATE = 1;\nvar EDIT_ADD = 2;\nvar EDIT_DELETE = 3;\n\nfunction ArraySplice() {}\n\nArraySplice.prototype = {\n  calcEditDistances: function calcEditDistances(current, currentStart, currentEnd, old, oldStart, oldEnd) {\n    var rowCount = oldEnd - oldStart + 1;\n    var columnCount = currentEnd - currentStart + 1;\n    var distances = new Array(rowCount);\n    var north = void 0;\n    var west = void 0;\n\n    for (var i = 0; i < rowCount; ++i) {\n      distances[i] = new Array(columnCount);\n      distances[i][0] = i;\n    }\n\n    for (var j = 0; j < columnCount; ++j) {\n      distances[0][j] = j;\n    }\n\n    for (var _i = 1; _i < rowCount; ++_i) {\n      for (var _j = 1; _j < columnCount; ++_j) {\n        if (this.equals(current[currentStart + _j - 1], old[oldStart + _i - 1])) {\n          distances[_i][_j] = distances[_i - 1][_j - 1];\n        } else {\n          north = distances[_i - 1][_j] + 1;\n          west = distances[_i][_j - 1] + 1;\n          distances[_i][_j] = north < west ? north : west;\n        }\n      }\n    }\n\n    return distances;\n  },\n\n  spliceOperationsFromEditDistances: function spliceOperationsFromEditDistances(distances) {\n    var i = distances.length - 1;\n    var j = distances[0].length - 1;\n    var current = distances[i][j];\n    var edits = [];\n    while (i > 0 || j > 0) {\n      if (i === 0) {\n        edits.push(EDIT_ADD);\n        j--;\n        continue;\n      }\n      if (j === 0) {\n        edits.push(EDIT_DELETE);\n        i--;\n        continue;\n      }\n      var northWest = distances[i - 1][j - 1];\n      var west = distances[i - 1][j];\n      var north = distances[i][j - 1];\n\n      var min = void 0;\n      if (west < north) {\n        min = west < northWest ? west : northWest;\n      } else {\n        min = north < northWest ? north : northWest;\n      }\n\n      if (min === northWest) {\n        if (northWest === current) {\n          edits.push(EDIT_LEAVE);\n        } else {\n          edits.push(EDIT_UPDATE);\n          current = northWest;\n        }\n        i--;\n        j--;\n      } else if (min === west) {\n        edits.push(EDIT_DELETE);\n        i--;\n        current = west;\n      } else {\n        edits.push(EDIT_ADD);\n        j--;\n        current = north;\n      }\n    }\n\n    edits.reverse();\n    return edits;\n  },\n\n  calcSplices: function calcSplices(current, currentStart, currentEnd, old, oldStart, oldEnd) {\n    var prefixCount = 0;\n    var suffixCount = 0;\n\n    var minLength = Math.min(currentEnd - currentStart, oldEnd - oldStart);\n    if (currentStart === 0 && oldStart === 0) {\n      prefixCount = this.sharedPrefix(current, old, minLength);\n    }\n\n    if (currentEnd === current.length && oldEnd === old.length) {\n      suffixCount = this.sharedSuffix(current, old, minLength - prefixCount);\n    }\n\n    currentStart += prefixCount;\n    oldStart += prefixCount;\n    currentEnd -= suffixCount;\n    oldEnd -= suffixCount;\n\n    if (currentEnd - currentStart === 0 && oldEnd - oldStart === 0) {\n      return [];\n    }\n\n    if (currentStart === currentEnd) {\n      var _splice = newSplice(currentStart, [], 0);\n      while (oldStart < oldEnd) {\n        _splice.removed.push(old[oldStart++]);\n      }\n\n      return [_splice];\n    } else if (oldStart === oldEnd) {\n      return [newSplice(currentStart, [], currentEnd - currentStart)];\n    }\n\n    var ops = this.spliceOperationsFromEditDistances(this.calcEditDistances(current, currentStart, currentEnd, old, oldStart, oldEnd));\n\n    var splice = undefined;\n    var splices = [];\n    var index = currentStart;\n    var oldIndex = oldStart;\n    for (var i = 0; i < ops.length; ++i) {\n      switch (ops[i]) {\n        case EDIT_LEAVE:\n          if (splice) {\n            splices.push(splice);\n            splice = undefined;\n          }\n\n          index++;\n          oldIndex++;\n          break;\n        case EDIT_UPDATE:\n          if (!splice) {\n            splice = newSplice(index, [], 0);\n          }\n\n          splice.addedCount++;\n          index++;\n\n          splice.removed.push(old[oldIndex]);\n          oldIndex++;\n          break;\n        case EDIT_ADD:\n          if (!splice) {\n            splice = newSplice(index, [], 0);\n          }\n\n          splice.addedCount++;\n          index++;\n          break;\n        case EDIT_DELETE:\n          if (!splice) {\n            splice = newSplice(index, [], 0);\n          }\n\n          splice.removed.push(old[oldIndex]);\n          oldIndex++;\n          break;\n      }\n    }\n\n    if (splice) {\n      splices.push(splice);\n    }\n    return splices;\n  },\n\n  sharedPrefix: function sharedPrefix(current, old, searchLength) {\n    for (var i = 0; i < searchLength; ++i) {\n      if (!this.equals(current[i], old[i])) {\n        return i;\n      }\n    }\n\n    return searchLength;\n  },\n\n  sharedSuffix: function sharedSuffix(current, old, searchLength) {\n    var index1 = current.length;\n    var index2 = old.length;\n    var count = 0;\n    while (count < searchLength && this.equals(current[--index1], old[--index2])) {\n      count++;\n    }\n\n    return count;\n  },\n\n  calculateSplices: function calculateSplices(current, previous) {\n    return this.calcSplices(current, 0, current.length, previous, 0, previous.length);\n  },\n\n  equals: function equals(currentValue, previousValue) {\n    return currentValue === previousValue;\n  }\n};\n\nvar arraySplice = new ArraySplice();\n\nfunction calcSplices(current, currentStart, currentEnd, old, oldStart, oldEnd) {\n  return arraySplice.calcSplices(current, currentStart, currentEnd, old, oldStart, oldEnd);\n}\n\nfunction intersect(start1, end1, start2, end2) {\n  if (end1 < start2 || end2 < start1) {\n    return -1;\n  }\n\n  if (end1 === start2 || end2 === start1) {\n    return 0;\n  }\n\n  if (start1 < start2) {\n    if (end1 < end2) {\n      return end1 - start2;\n    }\n\n    return end2 - start2;\n  }\n\n  if (end2 < end1) {\n    return end2 - start1;\n  }\n\n  return end1 - start1;\n}\n\nfunction mergeSplice(splices, index, removed, addedCount) {\n  var splice = newSplice(index, removed, addedCount);\n\n  var inserted = false;\n  var insertionOffset = 0;\n\n  for (var i = 0; i < splices.length; i++) {\n    var current = splices[i];\n    current.index += insertionOffset;\n\n    if (inserted) {\n      continue;\n    }\n\n    var intersectCount = intersect(splice.index, splice.index + splice.removed.length, current.index, current.index + current.addedCount);\n\n    if (intersectCount >= 0) {\n\n      splices.splice(i, 1);\n      i--;\n\n      insertionOffset -= current.addedCount - current.removed.length;\n\n      splice.addedCount += current.addedCount - intersectCount;\n      var deleteCount = splice.removed.length + current.removed.length - intersectCount;\n\n      if (!splice.addedCount && !deleteCount) {\n        inserted = true;\n      } else {\n        var currentRemoved = current.removed;\n\n        if (splice.index < current.index) {\n          var prepend = splice.removed.slice(0, current.index - splice.index);\n          Array.prototype.push.apply(prepend, currentRemoved);\n          currentRemoved = prepend;\n        }\n\n        if (splice.index + splice.removed.length > current.index + current.addedCount) {\n          var append = splice.removed.slice(current.index + current.addedCount - splice.index);\n          Array.prototype.push.apply(currentRemoved, append);\n        }\n\n        splice.removed = currentRemoved;\n        if (current.index < splice.index) {\n          splice.index = current.index;\n        }\n      }\n    } else if (splice.index < current.index) {\n\n      inserted = true;\n\n      splices.splice(i, 0, splice);\n      i++;\n\n      var offset = splice.addedCount - splice.removed.length;\n      current.index += offset;\n      insertionOffset += offset;\n    }\n  }\n\n  if (!inserted) {\n    splices.push(splice);\n  }\n}\n\nfunction createInitialSplices(array, changeRecords) {\n  var splices = [];\n\n  for (var i = 0; i < changeRecords.length; i++) {\n    var record = changeRecords[i];\n    switch (record.type) {\n      case 'splice':\n        mergeSplice(splices, record.index, record.removed.slice(), record.addedCount);\n        break;\n      case 'add':\n      case 'update':\n      case 'delete':\n        if (!isIndex(record.name)) {\n          continue;\n        }\n\n        var index = toNumber(record.name);\n        if (index < 0) {\n          continue;\n        }\n\n        mergeSplice(splices, index, [record.oldValue], record.type === 'delete' ? 0 : 1);\n        break;\n      default:\n        console.error('Unexpected record type: ' + JSON.stringify(record));\n        break;\n    }\n  }\n\n  return splices;\n}\n\nfunction projectArraySplices(array, changeRecords) {\n  var splices = [];\n\n  createInitialSplices(array, changeRecords).forEach(function (splice) {\n    if (splice.addedCount === 1 && splice.removed.length === 1) {\n      if (splice.removed[0] !== array[splice.index]) {\n        splices.push(splice);\n      }\n\n      return;\n    }\n\n    splices = splices.concat(calcSplices(array, splice.index, splice.index + splice.addedCount, splice.removed, 0, splice.removed.length));\n  });\n\n  return splices;\n}\n\nfunction newRecord(type, object, key, oldValue) {\n  return {\n    type: type,\n    object: object,\n    key: key,\n    oldValue: oldValue\n  };\n}\n\nfunction getChangeRecords(map) {\n  var entries = new Array(map.size);\n  var keys = map.keys();\n  var i = 0;\n  var item = void 0;\n\n  while (item = keys.next()) {\n    if (item.done) {\n      break;\n    }\n\n    entries[i] = newRecord('added', map, item.value);\n    i++;\n  }\n\n  return entries;\n}\n\nvar ModifyCollectionObserver = (_dec3 = subscriberCollection(), _dec3(_class2 = function () {\n  function ModifyCollectionObserver(taskQueue, collection) {\n    \n\n    this.taskQueue = taskQueue;\n    this.queued = false;\n    this.changeRecords = null;\n    this.oldCollection = null;\n    this.collection = collection;\n    this.lengthPropertyName = collection instanceof Map || collection instanceof Set ? 'size' : 'length';\n  }\n\n  ModifyCollectionObserver.prototype.subscribe = function subscribe(context, callable) {\n    this.addSubscriber(context, callable);\n  };\n\n  ModifyCollectionObserver.prototype.unsubscribe = function unsubscribe(context, callable) {\n    this.removeSubscriber(context, callable);\n  };\n\n  ModifyCollectionObserver.prototype.addChangeRecord = function addChangeRecord(changeRecord) {\n    if (!this.hasSubscribers() && !this.lengthObserver) {\n      return;\n    }\n\n    if (changeRecord.type === 'splice') {\n      var index = changeRecord.index;\n      var arrayLength = changeRecord.object.length;\n      if (index > arrayLength) {\n        index = arrayLength - changeRecord.addedCount;\n      } else if (index < 0) {\n        index = arrayLength + changeRecord.removed.length + index - changeRecord.addedCount;\n      }\n      if (index < 0) {\n        index = 0;\n      }\n      changeRecord.index = index;\n    }\n\n    if (this.changeRecords === null) {\n      this.changeRecords = [changeRecord];\n    } else {\n      this.changeRecords.push(changeRecord);\n    }\n\n    if (!this.queued) {\n      this.queued = true;\n      this.taskQueue.queueMicroTask(this);\n    }\n  };\n\n  ModifyCollectionObserver.prototype.flushChangeRecords = function flushChangeRecords() {\n    if (this.changeRecords && this.changeRecords.length || this.oldCollection) {\n      this.call();\n    }\n  };\n\n  ModifyCollectionObserver.prototype.reset = function reset(oldCollection) {\n    this.oldCollection = oldCollection;\n\n    if (this.hasSubscribers() && !this.queued) {\n      this.queued = true;\n      this.taskQueue.queueMicroTask(this);\n    }\n  };\n\n  ModifyCollectionObserver.prototype.getLengthObserver = function getLengthObserver() {\n    return this.lengthObserver || (this.lengthObserver = new CollectionLengthObserver(this.collection));\n  };\n\n  ModifyCollectionObserver.prototype.call = function call() {\n    var changeRecords = this.changeRecords;\n    var oldCollection = this.oldCollection;\n    var records = void 0;\n\n    this.queued = false;\n    this.changeRecords = [];\n    this.oldCollection = null;\n\n    if (this.hasSubscribers()) {\n      if (oldCollection) {\n        if (this.collection instanceof Map || this.collection instanceof Set) {\n          records = getChangeRecords(oldCollection);\n        } else {\n          records = calcSplices(this.collection, 0, this.collection.length, oldCollection, 0, oldCollection.length);\n        }\n      } else {\n        if (this.collection instanceof Map || this.collection instanceof Set) {\n          records = changeRecords;\n        } else {\n          records = projectArraySplices(this.collection, changeRecords);\n        }\n      }\n\n      this.callSubscribers(records);\n    }\n\n    if (this.lengthObserver) {\n      this.lengthObserver.call(this.collection[this.lengthPropertyName]);\n    }\n  };\n\n  return ModifyCollectionObserver;\n}()) || _class2);\n\nvar CollectionLengthObserver = (_dec4 = subscriberCollection(), _dec4(_class3 = function () {\n  function CollectionLengthObserver(collection) {\n    \n\n    this.collection = collection;\n    this.lengthPropertyName = collection instanceof Map || collection instanceof Set ? 'size' : 'length';\n    this.currentValue = collection[this.lengthPropertyName];\n  }\n\n  CollectionLengthObserver.prototype.getValue = function getValue() {\n    return this.collection[this.lengthPropertyName];\n  };\n\n  CollectionLengthObserver.prototype.setValue = function setValue(newValue) {\n    this.collection[this.lengthPropertyName] = newValue;\n  };\n\n  CollectionLengthObserver.prototype.subscribe = function subscribe(context, callable) {\n    this.addSubscriber(context, callable);\n  };\n\n  CollectionLengthObserver.prototype.unsubscribe = function unsubscribe(context, callable) {\n    this.removeSubscriber(context, callable);\n  };\n\n  CollectionLengthObserver.prototype.call = function call(newValue) {\n    var oldValue = this.currentValue;\n    this.callSubscribers(newValue, oldValue);\n    this.currentValue = newValue;\n  };\n\n  return CollectionLengthObserver;\n}()) || _class3);\n\nvar arrayProto = Array.prototype;\nvar pop = arrayProto.pop;\nvar push = arrayProto.push;\nvar reverse = arrayProto.reverse;\nvar shift = arrayProto.shift;\nvar sort = arrayProto.sort;\nvar splice = arrayProto.splice;\nvar unshift = arrayProto.unshift;\n\nif (arrayProto.__au_patched__) {\n  aurelia_logging__WEBPACK_IMPORTED_MODULE_0__[\"getLogger\"]('array-observation').warn('Detected 2nd attempt of patching array from Aurelia binding.' + ' This is probably caused by dependency mismatch between core modules and a 3rd party plugin.' + ' Please see https://github.com/aurelia/cli/pull/906 if you are using webpack.');\n} else {\n  Reflect.defineProperty(arrayProto, '__au_patched__', { value: 1 });\n  arrayProto.pop = function () {\n    var notEmpty = this.length > 0;\n    var methodCallResult = pop.apply(this, arguments);\n    if (notEmpty && this.__array_observer__ !== undefined) {\n      this.__array_observer__.addChangeRecord({\n        type: 'delete',\n        object: this,\n        name: this.length,\n        oldValue: methodCallResult\n      });\n    }\n    return methodCallResult;\n  };\n\n  arrayProto.push = function () {\n    var methodCallResult = push.apply(this, arguments);\n    if (this.__array_observer__ !== undefined) {\n      this.__array_observer__.addChangeRecord({\n        type: 'splice',\n        object: this,\n        index: this.length - arguments.length,\n        removed: [],\n        addedCount: arguments.length\n      });\n    }\n    return methodCallResult;\n  };\n\n  arrayProto.reverse = function () {\n    var oldArray = void 0;\n    if (this.__array_observer__ !== undefined) {\n      this.__array_observer__.flushChangeRecords();\n      oldArray = this.slice();\n    }\n    var methodCallResult = reverse.apply(this, arguments);\n    if (this.__array_observer__ !== undefined) {\n      this.__array_observer__.reset(oldArray);\n    }\n    return methodCallResult;\n  };\n\n  arrayProto.shift = function () {\n    var notEmpty = this.length > 0;\n    var methodCallResult = shift.apply(this, arguments);\n    if (notEmpty && this.__array_observer__ !== undefined) {\n      this.__array_observer__.addChangeRecord({\n        type: 'delete',\n        object: this,\n        name: 0,\n        oldValue: methodCallResult\n      });\n    }\n    return methodCallResult;\n  };\n\n  arrayProto.sort = function () {\n    var oldArray = void 0;\n    if (this.__array_observer__ !== undefined) {\n      this.__array_observer__.flushChangeRecords();\n      oldArray = this.slice();\n    }\n    var methodCallResult = sort.apply(this, arguments);\n    if (this.__array_observer__ !== undefined) {\n      this.__array_observer__.reset(oldArray);\n    }\n    return methodCallResult;\n  };\n\n  arrayProto.splice = function () {\n    var methodCallResult = splice.apply(this, arguments);\n    if (this.__array_observer__ !== undefined) {\n      this.__array_observer__.addChangeRecord({\n        type: 'splice',\n        object: this,\n        index: +arguments[0],\n        removed: methodCallResult,\n        addedCount: arguments.length > 2 ? arguments.length - 2 : 0\n      });\n    }\n    return methodCallResult;\n  };\n\n  arrayProto.unshift = function () {\n    var methodCallResult = unshift.apply(this, arguments);\n    if (this.__array_observer__ !== undefined) {\n      this.__array_observer__.addChangeRecord({\n        type: 'splice',\n        object: this,\n        index: 0,\n        removed: [],\n        addedCount: arguments.length\n      });\n    }\n    return methodCallResult;\n  };\n}\n\nfunction _getArrayObserver(taskQueue, array) {\n  return ModifyArrayObserver.for(taskQueue, array);\n}\n\nvar ModifyArrayObserver = function (_ModifyCollectionObse) {\n  _inherits(ModifyArrayObserver, _ModifyCollectionObse);\n\n  function ModifyArrayObserver(taskQueue, array) {\n    \n\n    return _possibleConstructorReturn(this, _ModifyCollectionObse.call(this, taskQueue, array));\n  }\n\n  ModifyArrayObserver.for = function _for(taskQueue, array) {\n    if (!('__array_observer__' in array)) {\n      Reflect.defineProperty(array, '__array_observer__', {\n        value: ModifyArrayObserver.create(taskQueue, array),\n        enumerable: false, configurable: false\n      });\n    }\n    return array.__array_observer__;\n  };\n\n  ModifyArrayObserver.create = function create(taskQueue, array) {\n    return new ModifyArrayObserver(taskQueue, array);\n  };\n\n  return ModifyArrayObserver;\n}(ModifyCollectionObserver);\n\nvar Expression = function () {\n  function Expression() {\n    \n\n    this.isAssignable = false;\n  }\n\n  Expression.prototype.evaluate = function evaluate(scope, lookupFunctions, args) {\n    throw new Error('Binding expression \"' + this + '\" cannot be evaluated.');\n  };\n\n  Expression.prototype.assign = function assign(scope, value, lookupFunctions) {\n    throw new Error('Binding expression \"' + this + '\" cannot be assigned to.');\n  };\n\n  Expression.prototype.toString = function toString() {\n    return typeof FEATURE_NO_UNPARSER === 'undefined' ? _Unparser.unparse(this) : Function.prototype.toString.call(this);\n  };\n\n  return Expression;\n}();\n\nvar BindingBehavior = function (_Expression) {\n  _inherits(BindingBehavior, _Expression);\n\n  function BindingBehavior(expression, name, args) {\n    \n\n    var _this3 = _possibleConstructorReturn(this, _Expression.call(this));\n\n    _this3.expression = expression;\n    _this3.name = name;\n    _this3.args = args;\n    return _this3;\n  }\n\n  BindingBehavior.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    return this.expression.evaluate(scope, lookupFunctions);\n  };\n\n  BindingBehavior.prototype.assign = function assign(scope, value, lookupFunctions) {\n    return this.expression.assign(scope, value, lookupFunctions);\n  };\n\n  BindingBehavior.prototype.accept = function accept(visitor) {\n    return visitor.visitBindingBehavior(this);\n  };\n\n  BindingBehavior.prototype.connect = function connect(binding, scope) {\n    this.expression.connect(binding, scope);\n  };\n\n  BindingBehavior.prototype.bind = function bind(binding, scope, lookupFunctions) {\n    if (this.expression.expression && this.expression.bind) {\n      this.expression.bind(binding, scope, lookupFunctions);\n    }\n    var behavior = lookupFunctions.bindingBehaviors(this.name);\n    if (!behavior) {\n      throw new Error('No BindingBehavior named \"' + this.name + '\" was found!');\n    }\n    var behaviorKey = 'behavior-' + this.name;\n    if (binding[behaviorKey]) {\n      throw new Error('A binding behavior named \"' + this.name + '\" has already been applied to \"' + this.expression + '\"');\n    }\n    binding[behaviorKey] = behavior;\n    behavior.bind.apply(behavior, [binding, scope].concat(evalList(scope, this.args, binding.lookupFunctions)));\n  };\n\n  BindingBehavior.prototype.unbind = function unbind(binding, scope) {\n    var behaviorKey = 'behavior-' + this.name;\n    binding[behaviorKey].unbind(binding, scope);\n    binding[behaviorKey] = null;\n    if (this.expression.expression && this.expression.unbind) {\n      this.expression.unbind(binding, scope);\n    }\n  };\n\n  return BindingBehavior;\n}(Expression);\n\nvar ValueConverter = function (_Expression2) {\n  _inherits(ValueConverter, _Expression2);\n\n  function ValueConverter(expression, name, args) {\n    \n\n    var _this4 = _possibleConstructorReturn(this, _Expression2.call(this));\n\n    _this4.expression = expression;\n    _this4.name = name;\n    _this4.args = args;\n    _this4.allArgs = [expression].concat(args);\n    return _this4;\n  }\n\n  ValueConverter.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    var converter = lookupFunctions.valueConverters(this.name);\n    if (!converter) {\n      throw new Error('No ValueConverter named \"' + this.name + '\" was found!');\n    }\n\n    if ('toView' in converter) {\n      return converter.toView.apply(converter, evalList(scope, this.allArgs, lookupFunctions));\n    }\n\n    return this.allArgs[0].evaluate(scope, lookupFunctions);\n  };\n\n  ValueConverter.prototype.assign = function assign(scope, value, lookupFunctions) {\n    var converter = lookupFunctions.valueConverters(this.name);\n    if (!converter) {\n      throw new Error('No ValueConverter named \"' + this.name + '\" was found!');\n    }\n\n    if ('fromView' in converter) {\n      value = converter.fromView.apply(converter, [value].concat(evalList(scope, this.args, lookupFunctions)));\n    }\n\n    return this.allArgs[0].assign(scope, value, lookupFunctions);\n  };\n\n  ValueConverter.prototype.accept = function accept(visitor) {\n    return visitor.visitValueConverter(this);\n  };\n\n  ValueConverter.prototype.connect = function connect(binding, scope) {\n    var expressions = this.allArgs;\n    var i = expressions.length;\n    while (i--) {\n      expressions[i].connect(binding, scope);\n    }\n    var converter = binding.lookupFunctions.valueConverters(this.name);\n    if (!converter) {\n      throw new Error('No ValueConverter named \"' + this.name + '\" was found!');\n    }\n    var signals = converter.signals;\n    if (signals === undefined) {\n      return;\n    }\n    i = signals.length;\n    while (i--) {\n      connectBindingToSignal(binding, signals[i]);\n    }\n  };\n\n  return ValueConverter;\n}(Expression);\n\nvar Assign = function (_Expression3) {\n  _inherits(Assign, _Expression3);\n\n  function Assign(target, value) {\n    \n\n    var _this5 = _possibleConstructorReturn(this, _Expression3.call(this));\n\n    _this5.target = target;\n    _this5.value = value;\n    _this5.isAssignable = true;\n    return _this5;\n  }\n\n  Assign.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    return this.target.assign(scope, this.value.evaluate(scope, lookupFunctions));\n  };\n\n  Assign.prototype.accept = function accept(vistor) {\n    vistor.visitAssign(this);\n  };\n\n  Assign.prototype.connect = function connect(binding, scope) {};\n\n  Assign.prototype.assign = function assign(scope, value) {\n    this.value.assign(scope, value);\n    this.target.assign(scope, value);\n  };\n\n  return Assign;\n}(Expression);\n\nvar Conditional = function (_Expression4) {\n  _inherits(Conditional, _Expression4);\n\n  function Conditional(condition, yes, no) {\n    \n\n    var _this6 = _possibleConstructorReturn(this, _Expression4.call(this));\n\n    _this6.condition = condition;\n    _this6.yes = yes;\n    _this6.no = no;\n    return _this6;\n  }\n\n  Conditional.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    return !!this.condition.evaluate(scope, lookupFunctions) ? this.yes.evaluate(scope, lookupFunctions) : this.no.evaluate(scope, lookupFunctions);\n  };\n\n  Conditional.prototype.accept = function accept(visitor) {\n    return visitor.visitConditional(this);\n  };\n\n  Conditional.prototype.connect = function connect(binding, scope) {\n    this.condition.connect(binding, scope);\n    if (this.condition.evaluate(scope)) {\n      this.yes.connect(binding, scope);\n    } else {\n      this.no.connect(binding, scope);\n    }\n  };\n\n  return Conditional;\n}(Expression);\n\nvar AccessThis = function (_Expression5) {\n  _inherits(AccessThis, _Expression5);\n\n  function AccessThis(ancestor) {\n    \n\n    var _this7 = _possibleConstructorReturn(this, _Expression5.call(this));\n\n    _this7.ancestor = ancestor;\n    return _this7;\n  }\n\n  AccessThis.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    var oc = scope.overrideContext;\n    var i = this.ancestor;\n    while (i-- && oc) {\n      oc = oc.parentOverrideContext;\n    }\n    return i < 1 && oc ? oc.bindingContext : undefined;\n  };\n\n  AccessThis.prototype.accept = function accept(visitor) {\n    return visitor.visitAccessThis(this);\n  };\n\n  AccessThis.prototype.connect = function connect(binding, scope) {};\n\n  return AccessThis;\n}(Expression);\n\nvar AccessScope = function (_Expression6) {\n  _inherits(AccessScope, _Expression6);\n\n  function AccessScope(name, ancestor) {\n    \n\n    var _this8 = _possibleConstructorReturn(this, _Expression6.call(this));\n\n    _this8.name = name;\n    _this8.ancestor = ancestor;\n    _this8.isAssignable = true;\n    return _this8;\n  }\n\n  AccessScope.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    var context = getContextFor(this.name, scope, this.ancestor);\n    return context[this.name];\n  };\n\n  AccessScope.prototype.assign = function assign(scope, value) {\n    var context = getContextFor(this.name, scope, this.ancestor);\n    return context ? context[this.name] = value : undefined;\n  };\n\n  AccessScope.prototype.accept = function accept(visitor) {\n    return visitor.visitAccessScope(this);\n  };\n\n  AccessScope.prototype.connect = function connect(binding, scope) {\n    var context = getContextFor(this.name, scope, this.ancestor);\n    binding.observeProperty(context, this.name);\n  };\n\n  return AccessScope;\n}(Expression);\n\nvar AccessMember = function (_Expression7) {\n  _inherits(AccessMember, _Expression7);\n\n  function AccessMember(object, name) {\n    \n\n    var _this9 = _possibleConstructorReturn(this, _Expression7.call(this));\n\n    _this9.object = object;\n    _this9.name = name;\n    _this9.isAssignable = true;\n    return _this9;\n  }\n\n  AccessMember.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    var instance = this.object.evaluate(scope, lookupFunctions);\n    return instance === null || instance === undefined ? instance : instance[this.name];\n  };\n\n  AccessMember.prototype.assign = function assign(scope, value) {\n    var instance = this.object.evaluate(scope);\n\n    if (instance === null || instance === undefined) {\n      instance = {};\n      this.object.assign(scope, instance);\n    }\n\n    instance[this.name] = value;\n    return value;\n  };\n\n  AccessMember.prototype.accept = function accept(visitor) {\n    return visitor.visitAccessMember(this);\n  };\n\n  AccessMember.prototype.connect = function connect(binding, scope) {\n    this.object.connect(binding, scope);\n    var obj = this.object.evaluate(scope);\n    if (obj) {\n      binding.observeProperty(obj, this.name);\n    }\n  };\n\n  return AccessMember;\n}(Expression);\n\nvar AccessKeyed = function (_Expression8) {\n  _inherits(AccessKeyed, _Expression8);\n\n  function AccessKeyed(object, key) {\n    \n\n    var _this10 = _possibleConstructorReturn(this, _Expression8.call(this));\n\n    _this10.object = object;\n    _this10.key = key;\n    _this10.isAssignable = true;\n    return _this10;\n  }\n\n  AccessKeyed.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    var instance = this.object.evaluate(scope, lookupFunctions);\n    var lookup = this.key.evaluate(scope, lookupFunctions);\n    return getKeyed(instance, lookup);\n  };\n\n  AccessKeyed.prototype.assign = function assign(scope, value) {\n    var instance = this.object.evaluate(scope);\n    var lookup = this.key.evaluate(scope);\n    return setKeyed(instance, lookup, value);\n  };\n\n  AccessKeyed.prototype.accept = function accept(visitor) {\n    return visitor.visitAccessKeyed(this);\n  };\n\n  AccessKeyed.prototype.connect = function connect(binding, scope) {\n    this.object.connect(binding, scope);\n    var obj = this.object.evaluate(scope);\n    if (obj instanceof Object) {\n      this.key.connect(binding, scope);\n      var key = this.key.evaluate(scope);\n\n      if (key !== null && key !== undefined && !(Array.isArray(obj) && typeof key === 'number')) {\n        binding.observeProperty(obj, key);\n      }\n    }\n  };\n\n  return AccessKeyed;\n}(Expression);\n\nvar CallScope = function (_Expression9) {\n  _inherits(CallScope, _Expression9);\n\n  function CallScope(name, args, ancestor) {\n    \n\n    var _this11 = _possibleConstructorReturn(this, _Expression9.call(this));\n\n    _this11.name = name;\n    _this11.args = args;\n    _this11.ancestor = ancestor;\n    return _this11;\n  }\n\n  CallScope.prototype.evaluate = function evaluate(scope, lookupFunctions, mustEvaluate) {\n    var args = evalList(scope, this.args, lookupFunctions);\n    var context = getContextFor(this.name, scope, this.ancestor);\n    var func = getFunction(context, this.name, mustEvaluate);\n    if (func) {\n      return func.apply(context, args);\n    }\n    return undefined;\n  };\n\n  CallScope.prototype.accept = function accept(visitor) {\n    return visitor.visitCallScope(this);\n  };\n\n  CallScope.prototype.connect = function connect(binding, scope) {\n    var args = this.args;\n    var i = args.length;\n    while (i--) {\n      args[i].connect(binding, scope);\n    }\n  };\n\n  return CallScope;\n}(Expression);\n\nvar CallMember = function (_Expression10) {\n  _inherits(CallMember, _Expression10);\n\n  function CallMember(object, name, args) {\n    \n\n    var _this12 = _possibleConstructorReturn(this, _Expression10.call(this));\n\n    _this12.object = object;\n    _this12.name = name;\n    _this12.args = args;\n    return _this12;\n  }\n\n  CallMember.prototype.evaluate = function evaluate(scope, lookupFunctions, mustEvaluate) {\n    var instance = this.object.evaluate(scope, lookupFunctions);\n    var args = evalList(scope, this.args, lookupFunctions);\n    var func = getFunction(instance, this.name, mustEvaluate);\n    if (func) {\n      return func.apply(instance, args);\n    }\n    return undefined;\n  };\n\n  CallMember.prototype.accept = function accept(visitor) {\n    return visitor.visitCallMember(this);\n  };\n\n  CallMember.prototype.connect = function connect(binding, scope) {\n    this.object.connect(binding, scope);\n    var obj = this.object.evaluate(scope);\n    if (getFunction(obj, this.name, false)) {\n      var args = this.args;\n      var i = args.length;\n      while (i--) {\n        args[i].connect(binding, scope);\n      }\n    }\n  };\n\n  return CallMember;\n}(Expression);\n\nvar CallFunction = function (_Expression11) {\n  _inherits(CallFunction, _Expression11);\n\n  function CallFunction(func, args) {\n    \n\n    var _this13 = _possibleConstructorReturn(this, _Expression11.call(this));\n\n    _this13.func = func;\n    _this13.args = args;\n    return _this13;\n  }\n\n  CallFunction.prototype.evaluate = function evaluate(scope, lookupFunctions, mustEvaluate) {\n    var func = this.func.evaluate(scope, lookupFunctions);\n    if (typeof func === 'function') {\n      return func.apply(null, evalList(scope, this.args, lookupFunctions));\n    }\n    if (!mustEvaluate && (func === null || func === undefined)) {\n      return undefined;\n    }\n    throw new Error(this.func + ' is not a function');\n  };\n\n  CallFunction.prototype.accept = function accept(visitor) {\n    return visitor.visitCallFunction(this);\n  };\n\n  CallFunction.prototype.connect = function connect(binding, scope) {\n    this.func.connect(binding, scope);\n    var func = this.func.evaluate(scope);\n    if (typeof func === 'function') {\n      var args = this.args;\n      var i = args.length;\n      while (i--) {\n        args[i].connect(binding, scope);\n      }\n    }\n  };\n\n  return CallFunction;\n}(Expression);\n\nvar Binary = function (_Expression12) {\n  _inherits(Binary, _Expression12);\n\n  function Binary(operation, left, right) {\n    \n\n    var _this14 = _possibleConstructorReturn(this, _Expression12.call(this));\n\n    _this14.operation = operation;\n    _this14.left = left;\n    _this14.right = right;\n    return _this14;\n  }\n\n  Binary.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    var left = this.left.evaluate(scope, lookupFunctions);\n\n    switch (this.operation) {\n      case '&&':\n        return left && this.right.evaluate(scope, lookupFunctions);\n      case '||':\n        return left || this.right.evaluate(scope, lookupFunctions);\n    }\n\n    var right = this.right.evaluate(scope, lookupFunctions);\n\n    switch (this.operation) {\n      case '==':\n        return left == right;\n      case '===':\n        return left === right;\n      case '!=':\n        return left != right;\n      case '!==':\n        return left !== right;\n      case 'instanceof':\n        return typeof right === 'function' && left instanceof right;\n      case 'in':\n        return (typeof right === 'undefined' ? 'undefined' : _typeof(right)) === 'object' && right !== null && left in right;\n    }\n\n    if (left === null || right === null || left === undefined || right === undefined) {\n      switch (this.operation) {\n        case '+':\n          if (left !== null && left !== undefined) return left;\n          if (right !== null && right !== undefined) return right;\n          return 0;\n        case '-':\n          if (left !== null && left !== undefined) return left;\n          if (right !== null && right !== undefined) return 0 - right;\n          return 0;\n      }\n\n      return null;\n    }\n\n    switch (this.operation) {\n      case '+':\n        return autoConvertAdd(left, right);\n      case '-':\n        return left - right;\n      case '*':\n        return left * right;\n      case '/':\n        return left / right;\n      case '%':\n        return left % right;\n      case '<':\n        return left < right;\n      case '>':\n        return left > right;\n      case '<=':\n        return left <= right;\n      case '>=':\n        return left >= right;\n      case '^':\n        return left ^ right;\n    }\n\n    throw new Error('Internal error [' + this.operation + '] not handled');\n  };\n\n  Binary.prototype.accept = function accept(visitor) {\n    return visitor.visitBinary(this);\n  };\n\n  Binary.prototype.connect = function connect(binding, scope) {\n    this.left.connect(binding, scope);\n    var left = this.left.evaluate(scope);\n    if (this.operation === '&&' && !left || this.operation === '||' && left) {\n      return;\n    }\n    this.right.connect(binding, scope);\n  };\n\n  return Binary;\n}(Expression);\n\nvar Unary = function (_Expression13) {\n  _inherits(Unary, _Expression13);\n\n  function Unary(operation, expression) {\n    \n\n    var _this15 = _possibleConstructorReturn(this, _Expression13.call(this));\n\n    _this15.operation = operation;\n    _this15.expression = expression;\n    return _this15;\n  }\n\n  Unary.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    switch (this.operation) {\n      case '!':\n        return !this.expression.evaluate(scope, lookupFunctions);\n      case 'typeof':\n        return _typeof(this.expression.evaluate(scope, lookupFunctions));\n      case 'void':\n        return void this.expression.evaluate(scope, lookupFunctions);\n    }\n\n    throw new Error('Internal error [' + this.operation + '] not handled');\n  };\n\n  Unary.prototype.accept = function accept(visitor) {\n    return visitor.visitPrefix(this);\n  };\n\n  Unary.prototype.connect = function connect(binding, scope) {\n    this.expression.connect(binding, scope);\n  };\n\n  return Unary;\n}(Expression);\n\nvar LiteralPrimitive = function (_Expression14) {\n  _inherits(LiteralPrimitive, _Expression14);\n\n  function LiteralPrimitive(value) {\n    \n\n    var _this16 = _possibleConstructorReturn(this, _Expression14.call(this));\n\n    _this16.value = value;\n    return _this16;\n  }\n\n  LiteralPrimitive.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    return this.value;\n  };\n\n  LiteralPrimitive.prototype.accept = function accept(visitor) {\n    return visitor.visitLiteralPrimitive(this);\n  };\n\n  LiteralPrimitive.prototype.connect = function connect(binding, scope) {};\n\n  return LiteralPrimitive;\n}(Expression);\n\nvar LiteralString = function (_Expression15) {\n  _inherits(LiteralString, _Expression15);\n\n  function LiteralString(value) {\n    \n\n    var _this17 = _possibleConstructorReturn(this, _Expression15.call(this));\n\n    _this17.value = value;\n    return _this17;\n  }\n\n  LiteralString.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    return this.value;\n  };\n\n  LiteralString.prototype.accept = function accept(visitor) {\n    return visitor.visitLiteralString(this);\n  };\n\n  LiteralString.prototype.connect = function connect(binding, scope) {};\n\n  return LiteralString;\n}(Expression);\n\nvar LiteralTemplate = function (_Expression16) {\n  _inherits(LiteralTemplate, _Expression16);\n\n  function LiteralTemplate(cooked, expressions, raw, tag) {\n    \n\n    var _this18 = _possibleConstructorReturn(this, _Expression16.call(this));\n\n    _this18.cooked = cooked;\n    _this18.expressions = expressions || [];\n    _this18.length = _this18.expressions.length;\n    _this18.tagged = tag !== undefined;\n    if (_this18.tagged) {\n      _this18.cooked.raw = raw;\n      _this18.tag = tag;\n      if (tag instanceof AccessScope) {\n        _this18.contextType = 'Scope';\n      } else if (tag instanceof AccessMember || tag instanceof AccessKeyed) {\n        _this18.contextType = 'Object';\n      } else {\n        throw new Error(_this18.tag + ' is not a valid template tag');\n      }\n    }\n    return _this18;\n  }\n\n  LiteralTemplate.prototype.getScopeContext = function getScopeContext(scope, lookupFunctions) {\n    return getContextFor(this.tag.name, scope, this.tag.ancestor);\n  };\n\n  LiteralTemplate.prototype.getObjectContext = function getObjectContext(scope, lookupFunctions) {\n    return this.tag.object.evaluate(scope, lookupFunctions);\n  };\n\n  LiteralTemplate.prototype.evaluate = function evaluate(scope, lookupFunctions, mustEvaluate) {\n    var results = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      results[i] = this.expressions[i].evaluate(scope, lookupFunctions);\n    }\n    if (this.tagged) {\n      var func = this.tag.evaluate(scope, lookupFunctions);\n      if (typeof func === 'function') {\n        var context = this['get' + this.contextType + 'Context'](scope, lookupFunctions);\n        return func.call.apply(func, [context, this.cooked].concat(results));\n      }\n      if (!mustEvaluate) {\n        return null;\n      }\n      throw new Error(this.tag + ' is not a function');\n    }\n    var result = this.cooked[0];\n    for (var _i2 = 0; _i2 < this.length; _i2++) {\n      result = String.prototype.concat(result, results[_i2], this.cooked[_i2 + 1]);\n    }\n    return result;\n  };\n\n  LiteralTemplate.prototype.accept = function accept(visitor) {\n    return visitor.visitLiteralTemplate(this);\n  };\n\n  LiteralTemplate.prototype.connect = function connect(binding, scope) {\n    for (var i = 0; i < this.length; i++) {\n      this.expressions[i].connect(binding, scope);\n    }\n    if (this.tagged) {\n      this.tag.connect(binding, scope);\n    }\n  };\n\n  return LiteralTemplate;\n}(Expression);\n\nvar LiteralArray = function (_Expression17) {\n  _inherits(LiteralArray, _Expression17);\n\n  function LiteralArray(elements) {\n    \n\n    var _this19 = _possibleConstructorReturn(this, _Expression17.call(this));\n\n    _this19.elements = elements;\n    return _this19;\n  }\n\n  LiteralArray.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    var elements = this.elements;\n    var result = [];\n\n    for (var i = 0, length = elements.length; i < length; ++i) {\n      result[i] = elements[i].evaluate(scope, lookupFunctions);\n    }\n\n    return result;\n  };\n\n  LiteralArray.prototype.accept = function accept(visitor) {\n    return visitor.visitLiteralArray(this);\n  };\n\n  LiteralArray.prototype.connect = function connect(binding, scope) {\n    var length = this.elements.length;\n    for (var i = 0; i < length; i++) {\n      this.elements[i].connect(binding, scope);\n    }\n  };\n\n  return LiteralArray;\n}(Expression);\n\nvar LiteralObject = function (_Expression18) {\n  _inherits(LiteralObject, _Expression18);\n\n  function LiteralObject(keys, values) {\n    \n\n    var _this20 = _possibleConstructorReturn(this, _Expression18.call(this));\n\n    _this20.keys = keys;\n    _this20.values = values;\n    return _this20;\n  }\n\n  LiteralObject.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    var instance = {};\n    var keys = this.keys;\n    var values = this.values;\n\n    for (var i = 0, length = keys.length; i < length; ++i) {\n      instance[keys[i]] = values[i].evaluate(scope, lookupFunctions);\n    }\n\n    return instance;\n  };\n\n  LiteralObject.prototype.accept = function accept(visitor) {\n    return visitor.visitLiteralObject(this);\n  };\n\n  LiteralObject.prototype.connect = function connect(binding, scope) {\n    var length = this.keys.length;\n    for (var i = 0; i < length; i++) {\n      this.values[i].connect(binding, scope);\n    }\n  };\n\n  return LiteralObject;\n}(Expression);\n\nfunction evalList(scope, list, lookupFunctions) {\n  var length = list.length;\n  var result = [];\n  for (var i = 0; i < length; i++) {\n    result[i] = list[i].evaluate(scope, lookupFunctions);\n  }\n  return result;\n}\n\nfunction autoConvertAdd(a, b) {\n  if (a !== null && b !== null) {\n    if (typeof a === 'string' && typeof b !== 'string') {\n      return a + b.toString();\n    }\n\n    if (typeof a !== 'string' && typeof b === 'string') {\n      return a.toString() + b;\n    }\n\n    return a + b;\n  }\n\n  if (a !== null) {\n    return a;\n  }\n\n  if (b !== null) {\n    return b;\n  }\n\n  return 0;\n}\n\nfunction getFunction(obj, name, mustExist) {\n  var func = obj === null || obj === undefined ? null : obj[name];\n  if (typeof func === 'function') {\n    return func;\n  }\n  if (!mustExist && (func === null || func === undefined)) {\n    return null;\n  }\n  throw new Error(name + ' is not a function');\n}\n\nfunction getKeyed(obj, key) {\n  if (Array.isArray(obj)) {\n    return obj[parseInt(key, 10)];\n  } else if (obj) {\n    return obj[key];\n  } else if (obj === null || obj === undefined) {\n    return undefined;\n  }\n\n  return obj[key];\n}\n\nfunction setKeyed(obj, key, value) {\n  if (Array.isArray(obj)) {\n    var index = parseInt(key, 10);\n\n    if (obj.length <= index) {\n      obj.length = index + 1;\n    }\n\n    obj[index] = value;\n  } else {\n    obj[key] = value;\n  }\n\n  return value;\n}\n\nvar _Unparser = null;\n\n\nif (typeof FEATURE_NO_UNPARSER === 'undefined') {\n  _Unparser = function () {\n    function Unparser(buffer) {\n      \n\n      this.buffer = buffer;\n    }\n\n    Unparser.unparse = function unparse(expression) {\n      var buffer = [];\n      var visitor = new _Unparser(buffer);\n\n      expression.accept(visitor);\n\n      return buffer.join('');\n    };\n\n    Unparser.prototype.write = function write(text) {\n      this.buffer.push(text);\n    };\n\n    Unparser.prototype.writeArgs = function writeArgs(args) {\n      this.write('(');\n\n      for (var i = 0, length = args.length; i < length; ++i) {\n        if (i !== 0) {\n          this.write(',');\n        }\n\n        args[i].accept(this);\n      }\n\n      this.write(')');\n    };\n\n    Unparser.prototype.visitBindingBehavior = function visitBindingBehavior(behavior) {\n      var args = behavior.args;\n\n      behavior.expression.accept(this);\n      this.write('&' + behavior.name);\n\n      for (var i = 0, length = args.length; i < length; ++i) {\n        this.write(':');\n        args[i].accept(this);\n      }\n    };\n\n    Unparser.prototype.visitValueConverter = function visitValueConverter(converter) {\n      var args = converter.args;\n\n      converter.expression.accept(this);\n      this.write('|' + converter.name);\n\n      for (var i = 0, length = args.length; i < length; ++i) {\n        this.write(':');\n        args[i].accept(this);\n      }\n    };\n\n    Unparser.prototype.visitAssign = function visitAssign(assign) {\n      assign.target.accept(this);\n      this.write('=');\n      assign.value.accept(this);\n    };\n\n    Unparser.prototype.visitConditional = function visitConditional(conditional) {\n      conditional.condition.accept(this);\n      this.write('?');\n      conditional.yes.accept(this);\n      this.write(':');\n      conditional.no.accept(this);\n    };\n\n    Unparser.prototype.visitAccessThis = function visitAccessThis(access) {\n      if (access.ancestor === 0) {\n        this.write('$this');\n        return;\n      }\n      this.write('$parent');\n      var i = access.ancestor - 1;\n      while (i--) {\n        this.write('.$parent');\n      }\n    };\n\n    Unparser.prototype.visitAccessScope = function visitAccessScope(access) {\n      var i = access.ancestor;\n      while (i--) {\n        this.write('$parent.');\n      }\n      this.write(access.name);\n    };\n\n    Unparser.prototype.visitAccessMember = function visitAccessMember(access) {\n      access.object.accept(this);\n      this.write('.' + access.name);\n    };\n\n    Unparser.prototype.visitAccessKeyed = function visitAccessKeyed(access) {\n      access.object.accept(this);\n      this.write('[');\n      access.key.accept(this);\n      this.write(']');\n    };\n\n    Unparser.prototype.visitCallScope = function visitCallScope(call) {\n      var i = call.ancestor;\n      while (i--) {\n        this.write('$parent.');\n      }\n      this.write(call.name);\n      this.writeArgs(call.args);\n    };\n\n    Unparser.prototype.visitCallFunction = function visitCallFunction(call) {\n      call.func.accept(this);\n      this.writeArgs(call.args);\n    };\n\n    Unparser.prototype.visitCallMember = function visitCallMember(call) {\n      call.object.accept(this);\n      this.write('.' + call.name);\n      this.writeArgs(call.args);\n    };\n\n    Unparser.prototype.visitPrefix = function visitPrefix(prefix) {\n      this.write('(' + prefix.operation);\n      if (prefix.operation.charCodeAt(0) >= 97) {\n        this.write(' ');\n      }\n      prefix.expression.accept(this);\n      this.write(')');\n    };\n\n    Unparser.prototype.visitBinary = function visitBinary(binary) {\n      binary.left.accept(this);\n      if (binary.operation.charCodeAt(0) === 105) {\n        this.write(' ' + binary.operation + ' ');\n      } else {\n        this.write(binary.operation);\n      }\n      binary.right.accept(this);\n    };\n\n    Unparser.prototype.visitLiteralPrimitive = function visitLiteralPrimitive(literal) {\n      this.write('' + literal.value);\n    };\n\n    Unparser.prototype.visitLiteralArray = function visitLiteralArray(literal) {\n      var elements = literal.elements;\n\n      this.write('[');\n\n      for (var i = 0, length = elements.length; i < length; ++i) {\n        if (i !== 0) {\n          this.write(',');\n        }\n\n        elements[i].accept(this);\n      }\n\n      this.write(']');\n    };\n\n    Unparser.prototype.visitLiteralObject = function visitLiteralObject(literal) {\n      var keys = literal.keys;\n      var values = literal.values;\n\n      this.write('{');\n\n      for (var i = 0, length = keys.length; i < length; ++i) {\n        if (i !== 0) {\n          this.write(',');\n        }\n\n        this.write('\\'' + keys[i] + '\\':');\n        values[i].accept(this);\n      }\n\n      this.write('}');\n    };\n\n    Unparser.prototype.visitLiteralString = function visitLiteralString(literal) {\n      var escaped = literal.value.replace(/'/g, \"\\'\");\n      this.write('\\'' + escaped + '\\'');\n    };\n\n    Unparser.prototype.visitLiteralTemplate = function visitLiteralTemplate(literal) {\n      var cooked = literal.cooked,\n          expressions = literal.expressions;\n\n      var length = expressions.length;\n      this.write('`');\n      this.write(cooked[0]);\n      for (var i = 0; i < length; i++) {\n        expressions[i].accept(this);\n        this.write(cooked[i + 1]);\n      }\n      this.write('`');\n    };\n\n    return Unparser;\n  }();\n}\n\nvar ExpressionCloner = function () {\n  function ExpressionCloner() {\n    \n  }\n\n  ExpressionCloner.prototype.cloneExpressionArray = function cloneExpressionArray(array) {\n    var clonedArray = [];\n    var i = array.length;\n    while (i--) {\n      clonedArray[i] = array[i].accept(this);\n    }\n    return clonedArray;\n  };\n\n  ExpressionCloner.prototype.visitBindingBehavior = function visitBindingBehavior(behavior) {\n    return new BindingBehavior(behavior.expression.accept(this), behavior.name, this.cloneExpressionArray(behavior.args));\n  };\n\n  ExpressionCloner.prototype.visitValueConverter = function visitValueConverter(converter) {\n    return new ValueConverter(converter.expression.accept(this), converter.name, this.cloneExpressionArray(converter.args));\n  };\n\n  ExpressionCloner.prototype.visitAssign = function visitAssign(assign) {\n    return new Assign(assign.target.accept(this), assign.value.accept(this));\n  };\n\n  ExpressionCloner.prototype.visitConditional = function visitConditional(conditional) {\n    return new Conditional(conditional.condition.accept(this), conditional.yes.accept(this), conditional.no.accept(this));\n  };\n\n  ExpressionCloner.prototype.visitAccessThis = function visitAccessThis(access) {\n    return new AccessThis(access.ancestor);\n  };\n\n  ExpressionCloner.prototype.visitAccessScope = function visitAccessScope(access) {\n    return new AccessScope(access.name, access.ancestor);\n  };\n\n  ExpressionCloner.prototype.visitAccessMember = function visitAccessMember(access) {\n    return new AccessMember(access.object.accept(this), access.name);\n  };\n\n  ExpressionCloner.prototype.visitAccessKeyed = function visitAccessKeyed(access) {\n    return new AccessKeyed(access.object.accept(this), access.key.accept(this));\n  };\n\n  ExpressionCloner.prototype.visitCallScope = function visitCallScope(call) {\n    return new CallScope(call.name, this.cloneExpressionArray(call.args), call.ancestor);\n  };\n\n  ExpressionCloner.prototype.visitCallFunction = function visitCallFunction(call) {\n    return new CallFunction(call.func.accept(this), this.cloneExpressionArray(call.args));\n  };\n\n  ExpressionCloner.prototype.visitCallMember = function visitCallMember(call) {\n    return new CallMember(call.object.accept(this), call.name, this.cloneExpressionArray(call.args));\n  };\n\n  ExpressionCloner.prototype.visitUnary = function visitUnary(unary) {\n    return new Unary(prefix.operation, prefix.expression.accept(this));\n  };\n\n  ExpressionCloner.prototype.visitBinary = function visitBinary(binary) {\n    return new Binary(binary.operation, binary.left.accept(this), binary.right.accept(this));\n  };\n\n  ExpressionCloner.prototype.visitLiteralPrimitive = function visitLiteralPrimitive(literal) {\n    return new LiteralPrimitive(literal);\n  };\n\n  ExpressionCloner.prototype.visitLiteralArray = function visitLiteralArray(literal) {\n    return new LiteralArray(this.cloneExpressionArray(literal.elements));\n  };\n\n  ExpressionCloner.prototype.visitLiteralObject = function visitLiteralObject(literal) {\n    return new LiteralObject(literal.keys, this.cloneExpressionArray(literal.values));\n  };\n\n  ExpressionCloner.prototype.visitLiteralString = function visitLiteralString(literal) {\n    return new LiteralString(literal.value);\n  };\n\n  ExpressionCloner.prototype.visitLiteralTemplate = function visitLiteralTemplate(literal) {\n    return new LiteralTemplate(literal.cooked, this.cloneExpressionArray(literal.expressions), literal.raw, literal.tag && literal.tag.accept(this));\n  };\n\n  return ExpressionCloner;\n}();\n\nfunction cloneExpression(expression) {\n  var visitor = new ExpressionCloner();\n  return expression.accept(visitor);\n}\n\nvar bindingMode = {\n  oneTime: 0,\n  toView: 1,\n  oneWay: 1,\n  twoWay: 2,\n  fromView: 3\n};\n\nvar Parser = function () {\n  function Parser() {\n    \n\n    this.cache = Object.create(null);\n  }\n\n  Parser.prototype.parse = function parse(src) {\n    src = src || '';\n\n    return this.cache[src] || (this.cache[src] = new ParserImplementation(src).parseBindingBehavior());\n  };\n\n  return Parser;\n}();\n\nvar fromCharCode = String.fromCharCode;\n\nvar ParserImplementation = function () {\n  _createClass(ParserImplementation, [{\n    key: 'raw',\n    get: function get() {\n      return this.src.slice(this.start, this.idx);\n    }\n  }]);\n\n  function ParserImplementation(src) {\n    \n\n    this.idx = 0;\n\n    this.start = 0;\n\n    this.src = src;\n    this.len = src.length;\n\n    this.tkn = T$EOF;\n\n    this.val = undefined;\n\n    this.ch = src.charCodeAt(0);\n  }\n\n  ParserImplementation.prototype.parseBindingBehavior = function parseBindingBehavior() {\n    this.nextToken();\n    if (this.tkn & T$ExpressionTerminal) {\n      this.err('Invalid start of expression');\n    }\n    var result = this.parseValueConverter();\n    while (this.opt(T$Ampersand)) {\n      result = new BindingBehavior(result, this.val, this.parseVariadicArgs());\n    }\n    if (this.tkn !== T$EOF) {\n      this.err('Unconsumed token ' + this.raw);\n    }\n    return result;\n  };\n\n  ParserImplementation.prototype.parseValueConverter = function parseValueConverter() {\n    var result = this.parseExpression();\n    while (this.opt(T$Bar)) {\n      result = new ValueConverter(result, this.val, this.parseVariadicArgs());\n    }\n    return result;\n  };\n\n  ParserImplementation.prototype.parseVariadicArgs = function parseVariadicArgs() {\n    this.nextToken();\n    var result = [];\n    while (this.opt(T$Colon)) {\n      result.push(this.parseExpression());\n    }\n    return result;\n  };\n\n  ParserImplementation.prototype.parseExpression = function parseExpression() {\n    var exprStart = this.idx;\n    var result = this.parseConditional();\n\n    while (this.tkn === T$Eq) {\n      if (!result.isAssignable) {\n        this.err('Expression ' + this.src.slice(exprStart, this.start) + ' is not assignable');\n      }\n      this.nextToken();\n      exprStart = this.idx;\n      result = new Assign(result, this.parseConditional());\n    }\n    return result;\n  };\n\n  ParserImplementation.prototype.parseConditional = function parseConditional() {\n    var result = this.parseBinary(0);\n\n    if (this.opt(T$Question)) {\n      var yes = this.parseExpression();\n      this.expect(T$Colon);\n      result = new Conditional(result, yes, this.parseExpression());\n    }\n    return result;\n  };\n\n  ParserImplementation.prototype.parseBinary = function parseBinary(minPrecedence) {\n    var left = this.parseLeftHandSide(0);\n\n    while (this.tkn & T$BinaryOp) {\n      var opToken = this.tkn;\n      if ((opToken & T$Precedence) <= minPrecedence) {\n        break;\n      }\n      this.nextToken();\n      left = new Binary(TokenValues[opToken & T$TokenMask], left, this.parseBinary(opToken & T$Precedence));\n    }\n    return left;\n  };\n\n  ParserImplementation.prototype.parseLeftHandSide = function parseLeftHandSide(context) {\n    var result = void 0;\n\n    primary: switch (this.tkn) {\n      case T$Plus:\n        this.nextToken();\n        return this.parseLeftHandSide(0);\n      case T$Minus:\n        this.nextToken();\n        return new Binary('-', new LiteralPrimitive(0), this.parseLeftHandSide(0));\n      case T$Bang:\n      case T$TypeofKeyword:\n      case T$VoidKeyword:\n        var op = TokenValues[this.tkn & T$TokenMask];\n        this.nextToken();\n        return new Unary(op, this.parseLeftHandSide(0));\n      case T$ParentScope:\n        {\n          do {\n            this.nextToken();\n            context++;\n            if (this.opt(T$Period)) {\n              if (this.tkn === T$Period) {\n                this.err();\n              }\n              continue;\n            } else if (this.tkn & T$AccessScopeTerminal) {\n              result = new AccessThis(context & C$Ancestor);\n\n              context = context & C$ShorthandProp | C$This;\n              break primary;\n            } else {\n              this.err();\n            }\n          } while (this.tkn === T$ParentScope);\n        }\n\n      case T$Identifier:\n        {\n          result = new AccessScope(this.val, context & C$Ancestor);\n          this.nextToken();\n          context = context & C$ShorthandProp | C$Scope;\n          break;\n        }\n      case T$ThisScope:\n        this.nextToken();\n        result = new AccessThis(0);\n        context = context & C$ShorthandProp | C$This;\n        break;\n      case T$LParen:\n        this.nextToken();\n        result = this.parseExpression();\n        this.expect(T$RParen);\n        context = C$Primary;\n        break;\n      case T$LBracket:\n        {\n          this.nextToken();\n          var _elements = [];\n          if (this.tkn !== T$RBracket) {\n            do {\n              _elements.push(this.parseExpression());\n            } while (this.opt(T$Comma));\n          }\n          this.expect(T$RBracket);\n          result = new LiteralArray(_elements);\n          context = C$Primary;\n          break;\n        }\n      case T$LBrace:\n        {\n          var keys = [];\n          var values = [];\n          this.nextToken();\n          while (this.tkn !== T$RBrace) {\n            if (this.tkn & T$IdentifierOrKeyword) {\n              var ch = this.ch,\n                  tkn = this.tkn,\n                  idx = this.idx;\n\n              keys.push(this.val);\n              this.nextToken();\n              if (this.opt(T$Colon)) {\n                values.push(this.parseExpression());\n              } else {\n                this.ch = ch;\n                this.tkn = tkn;\n                this.idx = idx;\n                values.push(this.parseLeftHandSide(C$ShorthandProp));\n              }\n            } else if (this.tkn & T$Literal) {\n              keys.push(this.val);\n              this.nextToken();\n              this.expect(T$Colon);\n              values.push(this.parseExpression());\n            } else {\n              this.err();\n            }\n            if (this.tkn !== T$RBrace) {\n              this.expect(T$Comma);\n            }\n          }\n          this.expect(T$RBrace);\n          result = new LiteralObject(keys, values);\n          context = C$Primary;\n          break;\n        }\n      case T$StringLiteral:\n        result = new LiteralString(this.val);\n        this.nextToken();\n        context = C$Primary;\n        break;\n      case T$TemplateTail:\n        result = new LiteralTemplate([this.val]);\n        this.nextToken();\n        context = C$Primary;\n        break;\n      case T$TemplateContinuation:\n        result = this.parseTemplate(0);\n        context = C$Primary;\n        break;\n      case T$NumericLiteral:\n        {\n          result = new LiteralPrimitive(this.val);\n          this.nextToken();\n\n          break;\n        }\n      case T$NullKeyword:\n      case T$UndefinedKeyword:\n      case T$TrueKeyword:\n      case T$FalseKeyword:\n        result = new LiteralPrimitive(TokenValues[this.tkn & T$TokenMask]);\n        this.nextToken();\n        context = C$Primary;\n        break;\n      default:\n        if (this.idx >= this.len) {\n          this.err('Unexpected end of expression');\n        } else {\n          this.err();\n        }\n    }\n\n    if (context & C$ShorthandProp) {\n      return result;\n    }\n\n    var name = this.val;\n    while (this.tkn & T$MemberOrCallExpression) {\n      switch (this.tkn) {\n        case T$Period:\n          this.nextToken();\n          if (!(this.tkn & T$IdentifierOrKeyword)) {\n            this.err();\n          }\n          name = this.val;\n          this.nextToken();\n\n          context = context & C$Primary | (context & (C$This | C$Scope)) << 1 | context & C$Member | (context & C$Keyed) >> 1 | (context & C$Call) >> 2;\n          if (this.tkn === T$LParen) {\n            continue;\n          }\n          if (context & C$Scope) {\n            result = new AccessScope(name, result.ancestor);\n          } else {\n            result = new AccessMember(result, name);\n          }\n          continue;\n        case T$LBracket:\n          this.nextToken();\n          context = C$Keyed;\n          result = new AccessKeyed(result, this.parseExpression());\n          this.expect(T$RBracket);\n          break;\n        case T$LParen:\n          this.nextToken();\n          var args = [];\n          while (this.tkn !== T$RParen) {\n            args.push(this.parseExpression());\n            if (!this.opt(T$Comma)) {\n              break;\n            }\n          }\n          this.expect(T$RParen);\n          if (context & C$Scope) {\n            result = new CallScope(name, args, result.ancestor);\n          } else if (context & (C$Member | C$Primary)) {\n            result = new CallMember(result, name, args);\n          } else {\n            result = new CallFunction(result, args);\n          }\n          context = C$Call;\n          break;\n        case T$TemplateTail:\n          result = new LiteralTemplate([this.val], [], [this.raw], result);\n          this.nextToken();\n          break;\n        case T$TemplateContinuation:\n          result = this.parseTemplate(context | C$Tagged, result);\n      }\n    }\n\n    return result;\n  };\n\n  ParserImplementation.prototype.parseTemplate = function parseTemplate(context, func) {\n    var cooked = [this.val];\n    var raw = context & C$Tagged ? [this.raw] : undefined;\n    this.expect(T$TemplateContinuation);\n    var expressions = [this.parseExpression()];\n\n    while ((this.tkn = this.scanTemplateTail()) !== T$TemplateTail) {\n      cooked.push(this.val);\n      if (context & C$Tagged) {\n        raw.push(this.raw);\n      }\n      this.expect(T$TemplateContinuation);\n      expressions.push(this.parseExpression());\n    }\n\n    cooked.push(this.val);\n    if (context & C$Tagged) {\n      raw.push(this.raw);\n    }\n    this.nextToken();\n    return new LiteralTemplate(cooked, expressions, raw, func);\n  };\n\n  ParserImplementation.prototype.nextToken = function nextToken() {\n    while (this.idx < this.len) {\n      if (this.ch <= 0x20) {\n        this.next();\n        continue;\n      }\n      this.start = this.idx;\n      if (this.ch === 0x24 || this.ch >= 0x61 && this.ch <= 0x7A) {\n        this.tkn = this.scanIdentifier();\n        return;\n      }\n\n      if ((this.tkn = CharScanners[this.ch](this)) !== null) {\n        return;\n      }\n    }\n    this.tkn = T$EOF;\n  };\n\n  ParserImplementation.prototype.next = function next() {\n    return this.ch = this.src.charCodeAt(++this.idx);\n  };\n\n  ParserImplementation.prototype.scanIdentifier = function scanIdentifier() {\n    while (AsciiIdParts.has(this.next()) || this.ch > 0x7F && IdParts[this.ch]) {}\n\n    return KeywordLookup[this.val = this.raw] || T$Identifier;\n  };\n\n  ParserImplementation.prototype.scanNumber = function scanNumber(isFloat) {\n    if (isFloat) {\n      this.val = 0;\n    } else {\n      this.val = this.ch - 0x30;\n      while (this.next() <= 0x39 && this.ch >= 0x30) {\n        this.val = this.val * 10 + this.ch - 0x30;\n      }\n    }\n\n    if (isFloat || this.ch === 0x2E) {\n      if (!isFloat) {\n        this.next();\n      }\n      var start = this.idx;\n      var value = this.ch - 0x30;\n      while (this.next() <= 0x39 && this.ch >= 0x30) {\n        value = value * 10 + this.ch - 0x30;\n      }\n      this.val = this.val + value / Math.pow(10, this.idx - start);\n    }\n\n    if (this.ch === 0x65 || this.ch === 0x45) {\n      var _start = this.idx;\n\n      this.next();\n      if (this.ch === 0x2D || this.ch === 0x2B) {\n        this.next();\n      }\n\n      if (!(this.ch >= 0x30 && this.ch <= 0x39)) {\n        this.idx = _start;\n        this.err('Invalid exponent');\n      }\n      while (this.next() <= 0x39 && this.ch >= 0x30) {}\n      this.val = parseFloat(this.src.slice(this.start, this.idx));\n    }\n\n    return T$NumericLiteral;\n  };\n\n  ParserImplementation.prototype.scanString = function scanString() {\n    var quote = this.ch;\n    this.next();\n\n    var buffer = void 0;\n    var marker = this.idx;\n\n    while (this.ch !== quote) {\n      if (this.ch === 0x5C) {\n        if (!buffer) {\n          buffer = [];\n        }\n\n        buffer.push(this.src.slice(marker, this.idx));\n\n        this.next();\n\n        var _unescaped = void 0;\n\n        if (this.ch === 0x75) {\n          this.next();\n\n          if (this.idx + 4 < this.len) {\n            var hex = this.src.slice(this.idx, this.idx + 4);\n\n            if (!/[A-Z0-9]{4}/i.test(hex)) {\n              this.err('Invalid unicode escape [\\\\u' + hex + ']');\n            }\n\n            _unescaped = parseInt(hex, 16);\n            this.idx += 4;\n            this.ch = this.src.charCodeAt(this.idx);\n          } else {\n            this.err();\n          }\n        } else {\n          _unescaped = unescape(this.ch);\n          this.next();\n        }\n\n        buffer.push(fromCharCode(_unescaped));\n        marker = this.idx;\n      } else if (this.ch === 0 || this.idx >= this.len) {\n        this.err('Unterminated quote');\n      } else {\n        this.next();\n      }\n    }\n\n    var last = this.src.slice(marker, this.idx);\n    this.next();\n    var unescaped = last;\n\n    if (buffer !== null && buffer !== undefined) {\n      buffer.push(last);\n      unescaped = buffer.join('');\n    }\n\n    this.val = unescaped;\n    return T$StringLiteral;\n  };\n\n  ParserImplementation.prototype.scanTemplate = function scanTemplate() {\n    var tail = true;\n    var result = '';\n\n    while (this.next() !== 0x60) {\n      if (this.ch === 0x24) {\n        if (this.idx + 1 < this.len && this.src.charCodeAt(this.idx + 1) === 0x7B) {\n          this.idx++;\n          tail = false;\n          break;\n        } else {\n          result += '$';\n        }\n      } else if (this.ch === 0x5C) {\n        result += fromCharCode(unescape(this.next()));\n      } else if (this.ch === 0 || this.idx >= this.len) {\n        this.err('Unterminated template literal');\n      } else {\n        result += fromCharCode(this.ch);\n      }\n    }\n\n    this.next();\n    this.val = result;\n    if (tail) {\n      return T$TemplateTail;\n    }\n    return T$TemplateContinuation;\n  };\n\n  ParserImplementation.prototype.scanTemplateTail = function scanTemplateTail() {\n    if (this.idx >= this.len) {\n      this.err('Unterminated template');\n    }\n    this.idx--;\n    return this.scanTemplate();\n  };\n\n  ParserImplementation.prototype.err = function err() {\n    var message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'Unexpected token ' + this.raw;\n    var column = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.start;\n\n    throw new Error('Parser Error: ' + message + ' at column ' + column + ' in expression [' + this.src + ']');\n  };\n\n  ParserImplementation.prototype.opt = function opt(token) {\n    if (this.tkn === token) {\n      this.nextToken();\n      return true;\n    }\n\n    return false;\n  };\n\n  ParserImplementation.prototype.expect = function expect(token) {\n    if (this.tkn === token) {\n      this.nextToken();\n    } else {\n      this.err('Missing expected token ' + TokenValues[token & T$TokenMask], this.idx);\n    }\n  };\n\n  return ParserImplementation;\n}();\n\nfunction unescape(code) {\n  switch (code) {\n    case 0x66:\n      return 0xC;\n    case 0x6E:\n      return 0xA;\n    case 0x72:\n      return 0xD;\n    case 0x74:\n      return 0x9;\n    case 0x76:\n      return 0xB;\n    default:\n      return code;\n  }\n}\n\nvar C$This = 1 << 10;\nvar C$Scope = 1 << 11;\nvar C$Member = 1 << 12;\nvar C$Keyed = 1 << 13;\nvar C$Call = 1 << 14;\nvar C$Primary = 1 << 15;\nvar C$ShorthandProp = 1 << 16;\nvar C$Tagged = 1 << 17;\n\nvar C$Ancestor = (1 << 9) - 1;\n\nvar T$TokenMask = (1 << 6) - 1;\n\nvar T$PrecShift = 6;\n\nvar T$Precedence = 7 << T$PrecShift;\n\nvar T$ExpressionTerminal = 1 << 11;\n\nvar T$ClosingToken = 1 << 12;\n\nvar T$OpeningToken = 1 << 13;\n\nvar T$AccessScopeTerminal = 1 << 14;\nvar T$Keyword = 1 << 15;\nvar T$EOF = 1 << 16 | T$AccessScopeTerminal | T$ExpressionTerminal;\nvar T$Identifier = 1 << 17;\nvar T$IdentifierOrKeyword = T$Identifier | T$Keyword;\nvar T$Literal = 1 << 18;\nvar T$NumericLiteral = 1 << 19 | T$Literal;\nvar T$StringLiteral = 1 << 20 | T$Literal;\nvar T$BinaryOp = 1 << 21;\n\nvar T$UnaryOp = 1 << 22;\n\nvar T$MemberExpression = 1 << 23;\n\nvar T$MemberOrCallExpression = 1 << 24;\nvar T$TemplateTail = 1 << 25 | T$MemberOrCallExpression;\nvar T$TemplateContinuation = 1 << 26 | T$MemberOrCallExpression;\n\nvar T$FalseKeyword = 0 | T$Keyword | T$Literal;\nvar T$TrueKeyword = 1 | T$Keyword | T$Literal;\nvar T$NullKeyword = 2 | T$Keyword | T$Literal;\nvar T$UndefinedKeyword = 3 | T$Keyword | T$Literal;\nvar T$ThisScope = 4 | T$IdentifierOrKeyword;\nvar T$ParentScope = 5 | T$IdentifierOrKeyword;\n\nvar T$LParen = 6 | T$OpeningToken | T$AccessScopeTerminal | T$MemberOrCallExpression;\nvar T$LBrace = 7 | T$OpeningToken;\nvar T$Period = 8 | T$MemberExpression | T$MemberOrCallExpression;\nvar T$RBrace = 9 | T$AccessScopeTerminal | T$ClosingToken | T$ExpressionTerminal;\nvar T$RParen = 10 | T$AccessScopeTerminal | T$ClosingToken | T$ExpressionTerminal;\nvar T$Comma = 11 | T$AccessScopeTerminal;\nvar T$LBracket = 12 | T$OpeningToken | T$AccessScopeTerminal | T$MemberExpression | T$MemberOrCallExpression;\nvar T$RBracket = 13 | T$ClosingToken | T$ExpressionTerminal;\nvar T$Colon = 14 | T$AccessScopeTerminal;\nvar T$Question = 15;\n\nvar T$Ampersand = 18 | T$AccessScopeTerminal;\nvar T$Bar = 19 | T$AccessScopeTerminal;\nvar T$BarBar = 20 | 1 << T$PrecShift | T$BinaryOp;\nvar T$AmpersandAmpersand = 21 | 2 << T$PrecShift | T$BinaryOp;\nvar T$Caret = 22 | 3 << T$PrecShift | T$BinaryOp;\nvar T$EqEq = 23 | 4 << T$PrecShift | T$BinaryOp;\nvar T$BangEq = 24 | 4 << T$PrecShift | T$BinaryOp;\nvar T$EqEqEq = 25 | 4 << T$PrecShift | T$BinaryOp;\nvar T$BangEqEq = 26 | 4 << T$PrecShift | T$BinaryOp;\nvar T$Lt = 27 | 5 << T$PrecShift | T$BinaryOp;\nvar T$Gt = 28 | 5 << T$PrecShift | T$BinaryOp;\nvar T$LtEq = 29 | 5 << T$PrecShift | T$BinaryOp;\nvar T$GtEq = 30 | 5 << T$PrecShift | T$BinaryOp;\nvar T$InKeyword = 31 | 5 << T$PrecShift | T$BinaryOp | T$Keyword;\nvar T$InstanceOfKeyword = 32 | 5 << T$PrecShift | T$BinaryOp | T$Keyword;\nvar T$Plus = 33 | 6 << T$PrecShift | T$BinaryOp | T$UnaryOp;\nvar T$Minus = 34 | 6 << T$PrecShift | T$BinaryOp | T$UnaryOp;\nvar T$TypeofKeyword = 35 | T$UnaryOp | T$Keyword;\nvar T$VoidKeyword = 36 | T$UnaryOp | T$Keyword;\nvar T$Star = 37 | 7 << T$PrecShift | T$BinaryOp;\nvar T$Percent = 38 | 7 << T$PrecShift | T$BinaryOp;\nvar T$Slash = 39 | 7 << T$PrecShift | T$BinaryOp;\nvar T$Eq = 40;\nvar T$Bang = 41 | T$UnaryOp;\n\nvar KeywordLookup = Object.create(null);\nKeywordLookup.true = T$TrueKeyword;\nKeywordLookup.null = T$NullKeyword;\nKeywordLookup.false = T$FalseKeyword;\nKeywordLookup.undefined = T$UndefinedKeyword;\nKeywordLookup.$this = T$ThisScope;\nKeywordLookup.$parent = T$ParentScope;\nKeywordLookup.in = T$InKeyword;\nKeywordLookup.instanceof = T$InstanceOfKeyword;\nKeywordLookup.typeof = T$TypeofKeyword;\nKeywordLookup.void = T$VoidKeyword;\n\nvar TokenValues = [false, true, null, undefined, '$this', '$parent', '(', '{', '.', '}', ')', ',', '[', ']', ':', '?', '\\'', '\"', '&', '|', '||', '&&', '^', '==', '!=', '===', '!==', '<', '>', '<=', '>=', 'in', 'instanceof', '+', '-', 'typeof', 'void', '*', '%', '/', '=', '!'];\n\nvar codes = {\n  AsciiIdPart: [0x24, 0, 0x30, 0x3A, 0x41, 0x5B, 0x5F, 0, 0x61, 0x7B],\n  IdStart: [0x24, 0, 0x41, 0x5B, 0x5F, 0, 0x61, 0x7B, 0xAA, 0, 0xBA, 0, 0xC0, 0xD7, 0xD8, 0xF7, 0xF8, 0x2B9, 0x2E0, 0x2E5, 0x1D00, 0x1D26, 0x1D2C, 0x1D5D, 0x1D62, 0x1D66, 0x1D6B, 0x1D78, 0x1D79, 0x1DBF, 0x1E00, 0x1F00, 0x2071, 0, 0x207F, 0, 0x2090, 0x209D, 0x212A, 0x212C, 0x2132, 0, 0x214E, 0, 0x2160, 0x2189, 0x2C60, 0x2C80, 0xA722, 0xA788, 0xA78B, 0xA7AF, 0xA7B0, 0xA7B8, 0xA7F7, 0xA800, 0xAB30, 0xAB5B, 0xAB5C, 0xAB65, 0xFB00, 0xFB07, 0xFF21, 0xFF3B, 0xFF41, 0xFF5B],\n  Digit: [0x30, 0x3A],\n  Skip: [0, 0x21, 0x7F, 0xA1]\n};\n\nfunction decompress(lookup, set, compressed, value) {\n  var rangeCount = compressed.length;\n  for (var i = 0; i < rangeCount; i += 2) {\n    var start = compressed[i];\n    var end = compressed[i + 1];\n    end = end > 0 ? end : start + 1;\n    if (lookup) {\n      var j = start;\n      while (j < end) {\n        lookup[j] = value;\n        j++;\n      }\n    }\n    if (set) {\n      for (var ch = start; ch < end; ch++) {\n        set.add(ch);\n      }\n    }\n  }\n}\n\nfunction returnToken(token) {\n  return function (p) {\n    p.next();\n    return token;\n  };\n}\nfunction unexpectedCharacter(p) {\n  p.err('Unexpected character [' + fromCharCode(p.ch) + ']');\n  return null;\n}\n\nvar AsciiIdParts = new Set();\ndecompress(null, AsciiIdParts, codes.AsciiIdPart, true);\n\nvar IdParts = new Uint8Array(0xFFFF);\ndecompress(IdParts, null, codes.IdStart, 1);\ndecompress(IdParts, null, codes.Digit, 1);\n\nvar CharScanners = new Array(0xFFFF);\nvar ci = 0;\nwhile (ci < 0xFFFF) {\n  CharScanners[ci] = unexpectedCharacter;\n  ci++;\n}\n\ndecompress(CharScanners, null, codes.Skip, function (p) {\n  p.next();\n  return null;\n});\ndecompress(CharScanners, null, codes.IdStart, function (p) {\n  return p.scanIdentifier();\n});\ndecompress(CharScanners, null, codes.Digit, function (p) {\n  return p.scanNumber(false);\n});\n\nCharScanners[0x22] = CharScanners[0x27] = function (p) {\n  return p.scanString();\n};\nCharScanners[0x60] = function (p) {\n  return p.scanTemplate();\n};\n\nCharScanners[0x21] = function (p) {\n  if (p.next() !== 0x3D) {\n    return T$Bang;\n  }\n  if (p.next() !== 0x3D) {\n    return T$BangEq;\n  }\n  p.next();\n  return T$BangEqEq;\n};\n\nCharScanners[0x3D] = function (p) {\n  if (p.next() !== 0x3D) {\n    return T$Eq;\n  }\n  if (p.next() !== 0x3D) {\n    return T$EqEq;\n  }\n  p.next();\n  return T$EqEqEq;\n};\n\nCharScanners[0x26] = function (p) {\n  if (p.next() !== 0x26) {\n    return T$Ampersand;\n  }\n  p.next();\n  return T$AmpersandAmpersand;\n};\n\nCharScanners[0x7C] = function (p) {\n  if (p.next() !== 0x7C) {\n    return T$Bar;\n  }\n  p.next();\n  return T$BarBar;\n};\n\nCharScanners[0x2E] = function (p) {\n  if (p.next() <= 0x39 && p.ch >= 0x30) {\n    return p.scanNumber(true);\n  }\n  return T$Period;\n};\n\nCharScanners[0x3C] = function (p) {\n  if (p.next() !== 0x3D) {\n    return T$Lt;\n  }\n  p.next();\n  return T$LtEq;\n};\n\nCharScanners[0x3E] = function (p) {\n  if (p.next() !== 0x3D) {\n    return T$Gt;\n  }\n  p.next();\n  return T$GtEq;\n};\n\nCharScanners[0x25] = returnToken(T$Percent);\nCharScanners[0x28] = returnToken(T$LParen);\nCharScanners[0x29] = returnToken(T$RParen);\nCharScanners[0x2A] = returnToken(T$Star);\nCharScanners[0x2B] = returnToken(T$Plus);\nCharScanners[0x2C] = returnToken(T$Comma);\nCharScanners[0x2D] = returnToken(T$Minus);\nCharScanners[0x2F] = returnToken(T$Slash);\nCharScanners[0x3A] = returnToken(T$Colon);\nCharScanners[0x3F] = returnToken(T$Question);\nCharScanners[0x5B] = returnToken(T$LBracket);\nCharScanners[0x5D] = returnToken(T$RBracket);\nCharScanners[0x5E] = returnToken(T$Caret);\nCharScanners[0x7B] = returnToken(T$LBrace);\nCharScanners[0x7D] = returnToken(T$RBrace);\n\nvar mapProto = Map.prototype;\n\nfunction _getMapObserver(taskQueue, map) {\n  return ModifyMapObserver.for(taskQueue, map);\n}\n\nvar ModifyMapObserver = function (_ModifyCollectionObse2) {\n  _inherits(ModifyMapObserver, _ModifyCollectionObse2);\n\n  function ModifyMapObserver(taskQueue, map) {\n    \n\n    return _possibleConstructorReturn(this, _ModifyCollectionObse2.call(this, taskQueue, map));\n  }\n\n  ModifyMapObserver.for = function _for(taskQueue, map) {\n    if (!('__map_observer__' in map)) {\n      Reflect.defineProperty(map, '__map_observer__', {\n        value: ModifyMapObserver.create(taskQueue, map),\n        enumerable: false, configurable: false\n      });\n    }\n    return map.__map_observer__;\n  };\n\n  ModifyMapObserver.create = function create(taskQueue, map) {\n    var observer = new ModifyMapObserver(taskQueue, map);\n\n    var proto = mapProto;\n    if (proto.set !== map.set || proto.delete !== map.delete || proto.clear !== map.clear) {\n      proto = {\n        set: map.set,\n        delete: map.delete,\n        clear: map.clear\n      };\n    }\n\n    map.set = function () {\n      var hasValue = map.has(arguments[0]);\n      var type = hasValue ? 'update' : 'add';\n      var oldValue = map.get(arguments[0]);\n      var methodCallResult = proto.set.apply(map, arguments);\n      if (!hasValue || oldValue !== map.get(arguments[0])) {\n        observer.addChangeRecord({\n          type: type,\n          object: map,\n          key: arguments[0],\n          oldValue: oldValue\n        });\n      }\n      return methodCallResult;\n    };\n\n    map.delete = function () {\n      var hasValue = map.has(arguments[0]);\n      var oldValue = map.get(arguments[0]);\n      var methodCallResult = proto.delete.apply(map, arguments);\n      if (hasValue) {\n        observer.addChangeRecord({\n          type: 'delete',\n          object: map,\n          key: arguments[0],\n          oldValue: oldValue\n        });\n      }\n      return methodCallResult;\n    };\n\n    map.clear = function () {\n      var methodCallResult = proto.clear.apply(map, arguments);\n      observer.addChangeRecord({\n        type: 'clear',\n        object: map\n      });\n      return methodCallResult;\n    };\n\n    return observer;\n  };\n\n  return ModifyMapObserver;\n}(ModifyCollectionObserver);\n\nvar emLogger = aurelia_logging__WEBPACK_IMPORTED_MODULE_0__[\"getLogger\"]('event-manager');\n\nfunction findOriginalEventTarget(event) {\n  return event.composedPath && event.composedPath()[0] || event.deepPath && event.deepPath()[0] || event.path && event.path[0] || event.target;\n}\n\nfunction stopPropagation() {\n  this.standardStopPropagation();\n  this.propagationStopped = true;\n}\n\nfunction handleCapturedEvent(event) {\n  event.propagationStopped = false;\n  var target = findOriginalEventTarget(event);\n\n  var orderedCallbacks = [];\n\n  while (target) {\n    if (target.capturedCallbacks) {\n      var callback = target.capturedCallbacks[event.type];\n      if (callback) {\n        if (event.stopPropagation !== stopPropagation) {\n          event.standardStopPropagation = event.stopPropagation;\n          event.stopPropagation = stopPropagation;\n        }\n        orderedCallbacks.push(callback);\n      }\n    }\n    target = target.parentNode;\n  }\n  for (var i = orderedCallbacks.length - 1; i >= 0 && !event.propagationStopped; i--) {\n    var orderedCallback = orderedCallbacks[i];\n    if ('handleEvent' in orderedCallback) {\n      orderedCallback.handleEvent(event);\n    } else {\n      orderedCallback(event);\n    }\n  }\n}\n\nvar CapturedHandlerEntry = function () {\n  function CapturedHandlerEntry(eventName) {\n    \n\n    this.eventName = eventName;\n    this.count = 0;\n  }\n\n  CapturedHandlerEntry.prototype.increment = function increment() {\n    this.count++;\n\n    if (this.count === 1) {\n      aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* DOM */ \"b\"].addEventListener(this.eventName, handleCapturedEvent, true);\n    }\n  };\n\n  CapturedHandlerEntry.prototype.decrement = function decrement() {\n    if (this.count === 0) {\n      emLogger.warn('The same EventListener was disposed multiple times.');\n    } else if (--this.count === 0) {\n      aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* DOM */ \"b\"].removeEventListener(this.eventName, handleCapturedEvent, true);\n    }\n  };\n\n  return CapturedHandlerEntry;\n}();\n\nvar DelegateHandlerEntry = function () {\n  function DelegateHandlerEntry(eventName, eventManager) {\n    \n\n    this.eventName = eventName;\n    this.count = 0;\n    this.eventManager = eventManager;\n  }\n\n  DelegateHandlerEntry.prototype.handleEvent = function handleEvent(event) {\n    event.propagationStopped = false;\n    var target = findOriginalEventTarget(event);\n\n    while (target && !event.propagationStopped) {\n      if (target.delegatedCallbacks) {\n        var callback = target.delegatedCallbacks[event.type];\n        if (callback) {\n          if (event.stopPropagation !== stopPropagation) {\n            event.standardStopPropagation = event.stopPropagation;\n            event.stopPropagation = stopPropagation;\n          }\n          if ('handleEvent' in callback) {\n            callback.handleEvent(event);\n          } else {\n            callback(event);\n          }\n        }\n      }\n\n      var parent = target.parentNode;\n      var shouldEscapeShadowRoot = this.eventManager.escapeShadowRoot && parent instanceof ShadowRoot;\n\n      target = shouldEscapeShadowRoot ? parent.host : parent;\n    }\n  };\n\n  DelegateHandlerEntry.prototype.increment = function increment() {\n    this.count++;\n\n    if (this.count === 1) {\n      aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* DOM */ \"b\"].addEventListener(this.eventName, this, false);\n    }\n  };\n\n  DelegateHandlerEntry.prototype.decrement = function decrement() {\n    if (this.count === 0) {\n      emLogger.warn('The same EventListener was disposed multiple times.');\n    } else if (--this.count === 0) {\n      aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* DOM */ \"b\"].removeEventListener(this.eventName, this, false);\n    }\n  };\n\n  return DelegateHandlerEntry;\n}();\n\nvar DelegationEntryHandler = function () {\n  function DelegationEntryHandler(entry, lookup, targetEvent) {\n    \n\n    this.entry = entry;\n    this.lookup = lookup;\n    this.targetEvent = targetEvent;\n  }\n\n  DelegationEntryHandler.prototype.dispose = function dispose() {\n    if (this.lookup[this.targetEvent]) {\n      this.entry.decrement();\n      this.lookup[this.targetEvent] = null;\n    } else {\n      emLogger.warn('Calling .dispose() on already disposed eventListener');\n    }\n  };\n\n  return DelegationEntryHandler;\n}();\n\nvar EventHandler = function () {\n  function EventHandler(target, targetEvent, callback) {\n    \n\n    this.target = target;\n    this.targetEvent = targetEvent;\n    this.callback = callback;\n  }\n\n  EventHandler.prototype.dispose = function dispose() {\n    this.target.removeEventListener(this.targetEvent, this.callback);\n  };\n\n  return EventHandler;\n}();\n\nvar DefaultEventStrategy = function () {\n  function DefaultEventStrategy(eventManager) {\n    \n\n    this.delegatedHandlers = {};\n    this.capturedHandlers = {};\n\n    this.eventManager = eventManager;\n  }\n\n  DefaultEventStrategy.prototype.subscribe = function subscribe(target, targetEvent, callback, strategy, disposable) {\n    var delegatedHandlers = void 0;\n    var capturedHandlers = void 0;\n    var handlerEntry = void 0;\n\n    if (strategy === delegationStrategy.bubbling) {\n      delegatedHandlers = this.delegatedHandlers;\n      handlerEntry = delegatedHandlers[targetEvent] || (delegatedHandlers[targetEvent] = new DelegateHandlerEntry(targetEvent, this.eventManager));\n      var delegatedCallbacks = target.delegatedCallbacks || (target.delegatedCallbacks = {});\n      if (!delegatedCallbacks[targetEvent]) {\n        handlerEntry.increment();\n      } else {\n        emLogger.warn('Overriding previous callback for event listener', { event: targetEvent, callback: callback, previousCallback: delegatedCallbacks[targetEvent] });\n      }\n      delegatedCallbacks[targetEvent] = callback;\n\n      if (disposable === true) {\n        return new DelegationEntryHandler(handlerEntry, delegatedCallbacks, targetEvent);\n      }\n\n      return function () {\n        handlerEntry.decrement();\n        delegatedCallbacks[targetEvent] = null;\n      };\n    }\n    if (strategy === delegationStrategy.capturing) {\n      capturedHandlers = this.capturedHandlers;\n      handlerEntry = capturedHandlers[targetEvent] || (capturedHandlers[targetEvent] = new CapturedHandlerEntry(targetEvent));\n      var capturedCallbacks = target.capturedCallbacks || (target.capturedCallbacks = {});\n      if (!capturedCallbacks[targetEvent]) {\n        handlerEntry.increment();\n      } else {\n        emLogger.error('already have a callback for event', { event: targetEvent, callback: callback });\n      }\n      capturedCallbacks[targetEvent] = callback;\n\n      if (disposable === true) {\n        return new DelegationEntryHandler(handlerEntry, capturedCallbacks, targetEvent);\n      }\n\n      return function () {\n        handlerEntry.decrement();\n        capturedCallbacks[targetEvent] = null;\n      };\n    }\n\n    target.addEventListener(targetEvent, callback);\n\n    if (disposable === true) {\n      return new EventHandler(target, targetEvent, callback);\n    }\n\n    return function () {\n      target.removeEventListener(targetEvent, callback);\n    };\n  };\n\n  return DefaultEventStrategy;\n}();\n\nvar delegationStrategy = {\n  none: 0,\n  capturing: 1,\n  bubbling: 2\n};\n\nvar EventManager = function () {\n  function EventManager() {\n    var escapeShadowRoot = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n    \n\n    this.elementHandlerLookup = {};\n    this.eventStrategyLookup = {};\n    this.escapeShadowRoot = escapeShadowRoot;\n\n    this.registerElementConfig({\n      tagName: 'input',\n      properties: {\n        value: ['change', 'input'],\n        checked: ['change', 'input'],\n        files: ['change', 'input']\n      }\n    });\n\n    this.registerElementConfig({\n      tagName: 'textarea',\n      properties: {\n        value: ['change', 'input']\n      }\n    });\n\n    this.registerElementConfig({\n      tagName: 'select',\n      properties: {\n        value: ['change']\n      }\n    });\n\n    this.registerElementConfig({\n      tagName: 'content editable',\n      properties: {\n        value: ['change', 'input', 'blur', 'keyup', 'paste']\n      }\n    });\n\n    this.registerElementConfig({\n      tagName: 'scrollable element',\n      properties: {\n        scrollTop: ['scroll'],\n        scrollLeft: ['scroll']\n      }\n    });\n\n    this.defaultEventStrategy = new DefaultEventStrategy(this);\n  }\n\n  EventManager.prototype.registerElementConfig = function registerElementConfig(config) {\n    var tagName = config.tagName.toLowerCase();\n    var properties = config.properties;\n    var propertyName = void 0;\n\n    var lookup = this.elementHandlerLookup[tagName] = {};\n\n    for (propertyName in properties) {\n      if (properties.hasOwnProperty(propertyName)) {\n        lookup[propertyName] = properties[propertyName];\n      }\n    }\n  };\n\n  EventManager.prototype.registerEventStrategy = function registerEventStrategy(eventName, strategy) {\n    this.eventStrategyLookup[eventName] = strategy;\n  };\n\n  EventManager.prototype.getElementHandler = function getElementHandler(target, propertyName) {\n    var tagName = void 0;\n    var lookup = this.elementHandlerLookup;\n\n    if (target.tagName) {\n      tagName = target.tagName.toLowerCase();\n\n      if (lookup[tagName] && lookup[tagName][propertyName]) {\n        return new EventSubscriber(lookup[tagName][propertyName]);\n      }\n\n      if (propertyName === 'textContent' || propertyName === 'innerHTML') {\n        return new EventSubscriber(lookup['content editable'].value);\n      }\n\n      if (propertyName === 'scrollTop' || propertyName === 'scrollLeft') {\n        return new EventSubscriber(lookup['scrollable element'][propertyName]);\n      }\n    }\n\n    return null;\n  };\n\n  EventManager.prototype.addEventListener = function addEventListener(target, targetEvent, callbackOrListener, delegate, disposable) {\n    return (this.eventStrategyLookup[targetEvent] || this.defaultEventStrategy).subscribe(target, targetEvent, callbackOrListener, delegate, disposable);\n  };\n\n  return EventManager;\n}();\n\nvar EventSubscriber = function () {\n  function EventSubscriber(events) {\n    \n\n    this.events = events;\n    this.element = null;\n    this.handler = null;\n  }\n\n  EventSubscriber.prototype.subscribe = function subscribe(element, callbackOrListener) {\n    this.element = element;\n    this.handler = callbackOrListener;\n\n    var events = this.events;\n    for (var i = 0, ii = events.length; ii > i; ++i) {\n      element.addEventListener(events[i], callbackOrListener);\n    }\n  };\n\n  EventSubscriber.prototype.dispose = function dispose() {\n    if (this.element === null) {\n      return;\n    }\n    var element = this.element;\n    var callbackOrListener = this.handler;\n    var events = this.events;\n    for (var i = 0, ii = events.length; ii > i; ++i) {\n      element.removeEventListener(events[i], callbackOrListener);\n    }\n    this.element = this.handler = null;\n  };\n\n  return EventSubscriber;\n}();\n\nvar DirtyChecker = function () {\n  function DirtyChecker() {\n    \n\n    this.tracked = [];\n    this.checkDelay = 120;\n  }\n\n  DirtyChecker.prototype.addProperty = function addProperty(property) {\n    var tracked = this.tracked;\n\n    tracked.push(property);\n\n    if (tracked.length === 1) {\n      this.scheduleDirtyCheck();\n    }\n  };\n\n  DirtyChecker.prototype.removeProperty = function removeProperty(property) {\n    var tracked = this.tracked;\n    tracked.splice(tracked.indexOf(property), 1);\n  };\n\n  DirtyChecker.prototype.scheduleDirtyCheck = function scheduleDirtyCheck() {\n    var _this22 = this;\n\n    setTimeout(function () {\n      return _this22.check();\n    }, this.checkDelay);\n  };\n\n  DirtyChecker.prototype.check = function check() {\n    var tracked = this.tracked;\n    var i = tracked.length;\n\n    while (i--) {\n      var current = tracked[i];\n\n      if (current.isDirty()) {\n        current.call();\n      }\n    }\n\n    if (tracked.length) {\n      this.scheduleDirtyCheck();\n    }\n  };\n\n  return DirtyChecker;\n}();\n\nvar DirtyCheckProperty = (_dec5 = subscriberCollection(), _dec5(_class5 = function () {\n  function DirtyCheckProperty(dirtyChecker, obj, propertyName) {\n    \n\n    this.dirtyChecker = dirtyChecker;\n    this.obj = obj;\n    this.propertyName = propertyName;\n  }\n\n  DirtyCheckProperty.prototype.getValue = function getValue() {\n    return this.obj[this.propertyName];\n  };\n\n  DirtyCheckProperty.prototype.setValue = function setValue(newValue) {\n    this.obj[this.propertyName] = newValue;\n  };\n\n  DirtyCheckProperty.prototype.call = function call() {\n    var oldValue = this.oldValue;\n    var newValue = this.getValue();\n\n    this.callSubscribers(newValue, oldValue);\n\n    this.oldValue = newValue;\n  };\n\n  DirtyCheckProperty.prototype.isDirty = function isDirty() {\n    return this.oldValue !== this.obj[this.propertyName];\n  };\n\n  DirtyCheckProperty.prototype.subscribe = function subscribe(context, callable) {\n    if (!this.hasSubscribers()) {\n      this.oldValue = this.getValue();\n      this.dirtyChecker.addProperty(this);\n    }\n    this.addSubscriber(context, callable);\n  };\n\n  DirtyCheckProperty.prototype.unsubscribe = function unsubscribe(context, callable) {\n    if (this.removeSubscriber(context, callable) && !this.hasSubscribers()) {\n      this.dirtyChecker.removeProperty(this);\n    }\n  };\n\n  return DirtyCheckProperty;\n}()) || _class5);\n\nvar logger = aurelia_logging__WEBPACK_IMPORTED_MODULE_0__[\"getLogger\"]('property-observation');\n\nvar propertyAccessor = {\n  getValue: function getValue(obj, propertyName) {\n    return obj[propertyName];\n  },\n  setValue: function setValue(value, obj, propertyName) {\n    obj[propertyName] = value;\n  }\n};\n\nvar PrimitiveObserver = function () {\n  function PrimitiveObserver(primitive, propertyName) {\n    \n\n    this.doNotCache = true;\n\n    this.primitive = primitive;\n    this.propertyName = propertyName;\n  }\n\n  PrimitiveObserver.prototype.getValue = function getValue() {\n    return this.primitive[this.propertyName];\n  };\n\n  PrimitiveObserver.prototype.setValue = function setValue() {\n    var type = _typeof(this.primitive);\n    throw new Error('The ' + this.propertyName + ' property of a ' + type + ' (' + this.primitive + ') cannot be assigned.');\n  };\n\n  PrimitiveObserver.prototype.subscribe = function subscribe() {};\n\n  PrimitiveObserver.prototype.unsubscribe = function unsubscribe() {};\n\n  return PrimitiveObserver;\n}();\n\nvar SetterObserver = (_dec6 = subscriberCollection(), _dec6(_class7 = function () {\n  function SetterObserver(taskQueue, obj, propertyName) {\n    \n\n    this.taskQueue = taskQueue;\n    this.obj = obj;\n    this.propertyName = propertyName;\n    this.queued = false;\n    this.observing = false;\n  }\n\n  SetterObserver.prototype.getValue = function getValue() {\n    return this.obj[this.propertyName];\n  };\n\n  SetterObserver.prototype.setValue = function setValue(newValue) {\n    this.obj[this.propertyName] = newValue;\n  };\n\n  SetterObserver.prototype.getterValue = function getterValue() {\n    return this.currentValue;\n  };\n\n  SetterObserver.prototype.setterValue = function setterValue(newValue) {\n    var oldValue = this.currentValue;\n\n    if (oldValue !== newValue) {\n      if (!this.queued) {\n        this.oldValue = oldValue;\n        this.queued = true;\n        this.taskQueue.queueMicroTask(this);\n      }\n\n      this.currentValue = newValue;\n    }\n  };\n\n  SetterObserver.prototype.call = function call() {\n    var oldValue = this.oldValue;\n    var newValue = this.oldValue = this.currentValue;\n\n    this.queued = false;\n\n    this.callSubscribers(newValue, oldValue);\n  };\n\n  SetterObserver.prototype.subscribe = function subscribe(context, callable) {\n    if (!this.observing) {\n      this.convertProperty();\n    }\n    this.addSubscriber(context, callable);\n  };\n\n  SetterObserver.prototype.unsubscribe = function unsubscribe(context, callable) {\n    this.removeSubscriber(context, callable);\n  };\n\n  SetterObserver.prototype.convertProperty = function convertProperty() {\n    this.observing = true;\n    this.currentValue = this.obj[this.propertyName];\n    this.setValue = this.setterValue;\n    this.getValue = this.getterValue;\n\n    if (!Reflect.defineProperty(this.obj, this.propertyName, {\n      configurable: true,\n      enumerable: this.propertyName in this.obj ? this.obj.propertyIsEnumerable(this.propertyName) : true,\n      get: this.getValue.bind(this),\n      set: this.setValue.bind(this)\n    })) {\n      logger.warn('Cannot observe property \\'' + this.propertyName + '\\' of object', this.obj);\n    }\n  };\n\n  return SetterObserver;\n}()) || _class7);\n\nvar XLinkAttributeObserver = function () {\n  function XLinkAttributeObserver(element, propertyName, attributeName) {\n    \n\n    this.element = element;\n    this.propertyName = propertyName;\n    this.attributeName = attributeName;\n  }\n\n  XLinkAttributeObserver.prototype.getValue = function getValue() {\n    return this.element.getAttributeNS('http://www.w3.org/1999/xlink', this.attributeName);\n  };\n\n  XLinkAttributeObserver.prototype.setValue = function setValue(newValue) {\n    return this.element.setAttributeNS('http://www.w3.org/1999/xlink', this.attributeName, newValue);\n  };\n\n  XLinkAttributeObserver.prototype.subscribe = function subscribe() {\n    throw new Error('Observation of a \"' + this.element.nodeName + '\" element\\'s \"' + this.propertyName + '\" property is not supported.');\n  };\n\n  return XLinkAttributeObserver;\n}();\n\nvar dataAttributeAccessor = {\n  getValue: function getValue(obj, propertyName) {\n    return obj.getAttribute(propertyName);\n  },\n  setValue: function setValue(value, obj, propertyName) {\n    if (value === null || value === undefined) {\n      obj.removeAttribute(propertyName);\n    } else {\n      obj.setAttribute(propertyName, value);\n    }\n  }\n};\n\nvar DataAttributeObserver = function () {\n  function DataAttributeObserver(element, propertyName) {\n    \n\n    this.element = element;\n    this.propertyName = propertyName;\n  }\n\n  DataAttributeObserver.prototype.getValue = function getValue() {\n    return this.element.getAttribute(this.propertyName);\n  };\n\n  DataAttributeObserver.prototype.setValue = function setValue(newValue) {\n    if (newValue === null || newValue === undefined) {\n      return this.element.removeAttribute(this.propertyName);\n    }\n    return this.element.setAttribute(this.propertyName, newValue);\n  };\n\n  DataAttributeObserver.prototype.subscribe = function subscribe() {\n    throw new Error('Observation of a \"' + this.element.nodeName + '\" element\\'s \"' + this.propertyName + '\" property is not supported.');\n  };\n\n  return DataAttributeObserver;\n}();\n\nvar StyleObserver = function () {\n  function StyleObserver(element, propertyName) {\n    \n\n    this.element = element;\n    this.propertyName = propertyName;\n\n    this.styles = null;\n    this.version = 0;\n  }\n\n  StyleObserver.prototype.getValue = function getValue() {\n    return this.element.style.cssText;\n  };\n\n  StyleObserver.prototype._setProperty = function _setProperty(style, value) {\n    var priority = '';\n\n    if (value !== null && value !== undefined && typeof value.indexOf === 'function' && value.indexOf('!important') !== -1) {\n      priority = 'important';\n      value = value.replace('!important', '');\n    }\n    this.element.style.setProperty(style, value, priority);\n  };\n\n  StyleObserver.prototype.setValue = function setValue(newValue) {\n    var styles = this.styles || {};\n    var style = void 0;\n    var version = this.version;\n\n    if (newValue !== null && newValue !== undefined) {\n      if (newValue instanceof Object) {\n        var value = void 0;\n        for (style in newValue) {\n          if (newValue.hasOwnProperty(style)) {\n            value = newValue[style];\n            style = style.replace(/([A-Z])/g, function (m) {\n              return '-' + m.toLowerCase();\n            });\n            styles[style] = version;\n            this._setProperty(style, value);\n          }\n        }\n      } else if (newValue.length) {\n        var rx = /\\s*([\\w\\-]+)\\s*:\\s*((?:(?:[\\w\\-]+\\(\\s*(?:\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'|[\\w\\-]+\\(\\s*(?:^\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'|[^\\)]*)\\),?|[^\\)]*)\\),?|\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'|[^;]*),?\\s*)+);?/g;\n        var pair = void 0;\n        while ((pair = rx.exec(newValue)) !== null) {\n          style = pair[1];\n          if (!style) {\n            continue;\n          }\n\n          styles[style] = version;\n          this._setProperty(style, pair[2]);\n        }\n      }\n    }\n\n    this.styles = styles;\n    this.version += 1;\n\n    if (version === 0) {\n      return;\n    }\n\n    version -= 1;\n    for (style in styles) {\n      if (!styles.hasOwnProperty(style) || styles[style] !== version) {\n        continue;\n      }\n\n      this.element.style.removeProperty(style);\n    }\n  };\n\n  StyleObserver.prototype.subscribe = function subscribe() {\n    throw new Error('Observation of a \"' + this.element.nodeName + '\" element\\'s \"' + this.propertyName + '\" property is not supported.');\n  };\n\n  return StyleObserver;\n}();\n\nvar ValueAttributeObserver = (_dec7 = subscriberCollection(), _dec7(_class8 = function () {\n  function ValueAttributeObserver(element, propertyName, handler) {\n    \n\n    this.element = element;\n    this.propertyName = propertyName;\n    this.handler = handler;\n    if (propertyName === 'files') {\n      this.setValue = function () {};\n    }\n  }\n\n  ValueAttributeObserver.prototype.getValue = function getValue() {\n    return this.element[this.propertyName];\n  };\n\n  ValueAttributeObserver.prototype.setValue = function setValue(newValue) {\n    newValue = newValue === undefined || newValue === null ? '' : newValue;\n    if (this.element[this.propertyName] !== newValue) {\n      this.element[this.propertyName] = newValue;\n      this.notify();\n    }\n  };\n\n  ValueAttributeObserver.prototype.notify = function notify() {\n    var oldValue = this.oldValue;\n    var newValue = this.getValue();\n\n    this.callSubscribers(newValue, oldValue);\n\n    this.oldValue = newValue;\n  };\n\n  ValueAttributeObserver.prototype.handleEvent = function handleEvent() {\n    this.notify();\n  };\n\n  ValueAttributeObserver.prototype.subscribe = function subscribe(context, callable) {\n    if (!this.hasSubscribers()) {\n      this.oldValue = this.getValue();\n      this.handler.subscribe(this.element, this);\n    }\n\n    this.addSubscriber(context, callable);\n  };\n\n  ValueAttributeObserver.prototype.unsubscribe = function unsubscribe(context, callable) {\n    if (this.removeSubscriber(context, callable) && !this.hasSubscribers()) {\n      this.handler.dispose();\n    }\n  };\n\n  return ValueAttributeObserver;\n}()) || _class8);\n\nvar checkedArrayContext = 'CheckedObserver:array';\nvar checkedValueContext = 'CheckedObserver:value';\n\nvar CheckedObserver = (_dec8 = subscriberCollection(), _dec8(_class9 = function () {\n  function CheckedObserver(element, handler, observerLocator) {\n    \n\n    this.element = element;\n    this.handler = handler;\n    this.observerLocator = observerLocator;\n  }\n\n  CheckedObserver.prototype.getValue = function getValue() {\n    return this.value;\n  };\n\n  CheckedObserver.prototype.setValue = function setValue(newValue) {\n    if (this.initialSync && this.value === newValue) {\n      return;\n    }\n\n    if (this.arrayObserver) {\n      this.arrayObserver.unsubscribe(checkedArrayContext, this);\n      this.arrayObserver = null;\n    }\n\n    if (this.element.type === 'checkbox' && Array.isArray(newValue)) {\n      this.arrayObserver = this.observerLocator.getArrayObserver(newValue);\n      this.arrayObserver.subscribe(checkedArrayContext, this);\n    }\n\n    this.oldValue = this.value;\n    this.value = newValue;\n    this.synchronizeElement();\n    this.notify();\n\n    if (!this.initialSync) {\n      this.initialSync = true;\n      this.observerLocator.taskQueue.queueMicroTask(this);\n    }\n  };\n\n  CheckedObserver.prototype.call = function call(context, splices) {\n    this.synchronizeElement();\n\n    if (!this.valueObserver) {\n      this.valueObserver = this.element.__observers__.model || this.element.__observers__.value;\n      if (this.valueObserver) {\n        this.valueObserver.subscribe(checkedValueContext, this);\n      }\n    }\n  };\n\n  CheckedObserver.prototype.synchronizeElement = function synchronizeElement() {\n    var value = this.value;\n    var element = this.element;\n    var elementValue = element.hasOwnProperty('model') ? element.model : element.value;\n    var isRadio = element.type === 'radio';\n    var matcher = element.matcher || function (a, b) {\n      return a === b;\n    };\n\n    element.checked = isRadio && !!matcher(value, elementValue) || !isRadio && value === true || !isRadio && Array.isArray(value) && value.findIndex(function (item) {\n      return !!matcher(item, elementValue);\n    }) !== -1;\n  };\n\n  CheckedObserver.prototype.synchronizeValue = function synchronizeValue() {\n    var value = this.value;\n    var element = this.element;\n    var elementValue = element.hasOwnProperty('model') ? element.model : element.value;\n    var index = void 0;\n    var matcher = element.matcher || function (a, b) {\n      return a === b;\n    };\n\n    if (element.type === 'checkbox') {\n      if (Array.isArray(value)) {\n        index = value.findIndex(function (item) {\n          return !!matcher(item, elementValue);\n        });\n        if (element.checked && index === -1) {\n          value.push(elementValue);\n        } else if (!element.checked && index !== -1) {\n          value.splice(index, 1);\n        }\n\n        return;\n      }\n\n      value = element.checked;\n    } else if (element.checked) {\n      value = elementValue;\n    } else {\n      return;\n    }\n\n    this.oldValue = this.value;\n    this.value = value;\n    this.notify();\n  };\n\n  CheckedObserver.prototype.notify = function notify() {\n    var oldValue = this.oldValue;\n    var newValue = this.value;\n\n    if (newValue === oldValue) {\n      return;\n    }\n\n    this.callSubscribers(newValue, oldValue);\n  };\n\n  CheckedObserver.prototype.handleEvent = function handleEvent() {\n    this.synchronizeValue();\n  };\n\n  CheckedObserver.prototype.subscribe = function subscribe(context, callable) {\n    if (!this.hasSubscribers()) {\n      this.handler.subscribe(this.element, this);\n    }\n    this.addSubscriber(context, callable);\n  };\n\n  CheckedObserver.prototype.unsubscribe = function unsubscribe(context, callable) {\n    if (this.removeSubscriber(context, callable) && !this.hasSubscribers()) {\n      this.handler.dispose();\n    }\n  };\n\n  CheckedObserver.prototype.unbind = function unbind() {\n    if (this.arrayObserver) {\n      this.arrayObserver.unsubscribe(checkedArrayContext, this);\n      this.arrayObserver = null;\n    }\n    if (this.valueObserver) {\n      this.valueObserver.unsubscribe(checkedValueContext, this);\n    }\n  };\n\n  return CheckedObserver;\n}()) || _class9);\n\nvar selectArrayContext = 'SelectValueObserver:array';\n\nvar SelectValueObserver = (_dec9 = subscriberCollection(), _dec9(_class10 = function () {\n  function SelectValueObserver(element, handler, observerLocator) {\n    \n\n    this.element = element;\n    this.handler = handler;\n    this.observerLocator = observerLocator;\n  }\n\n  SelectValueObserver.prototype.getValue = function getValue() {\n    return this.value;\n  };\n\n  SelectValueObserver.prototype.setValue = function setValue(newValue) {\n    if (newValue !== null && newValue !== undefined && this.element.multiple && !Array.isArray(newValue)) {\n      throw new Error('Only null or Array instances can be bound to a multi-select.');\n    }\n    if (this.value === newValue) {\n      return;\n    }\n\n    if (this.arrayObserver) {\n      this.arrayObserver.unsubscribe(selectArrayContext, this);\n      this.arrayObserver = null;\n    }\n\n    if (Array.isArray(newValue)) {\n      this.arrayObserver = this.observerLocator.getArrayObserver(newValue);\n      this.arrayObserver.subscribe(selectArrayContext, this);\n    }\n\n    this.oldValue = this.value;\n    this.value = newValue;\n    this.synchronizeOptions();\n    this.notify();\n\n    if (!this.initialSync) {\n      this.initialSync = true;\n      this.observerLocator.taskQueue.queueMicroTask(this);\n    }\n  };\n\n  SelectValueObserver.prototype.call = function call(context, splices) {\n    this.synchronizeOptions();\n  };\n\n  SelectValueObserver.prototype.synchronizeOptions = function synchronizeOptions() {\n    var value = this.value;\n    var isArray = void 0;\n\n    if (Array.isArray(value)) {\n      isArray = true;\n    }\n\n    var options = this.element.options;\n    var i = options.length;\n    var matcher = this.element.matcher || function (a, b) {\n      return a === b;\n    };\n\n    var _loop = function _loop() {\n      var option = options.item(i);\n      var optionValue = option.hasOwnProperty('model') ? option.model : option.value;\n      if (isArray) {\n        option.selected = value.findIndex(function (item) {\n          return !!matcher(optionValue, item);\n        }) !== -1;\n        return 'continue';\n      }\n      option.selected = !!matcher(optionValue, value);\n    };\n\n    while (i--) {\n      var _ret = _loop();\n\n      if (_ret === 'continue') continue;\n    }\n  };\n\n  SelectValueObserver.prototype.synchronizeValue = function synchronizeValue() {\n    var _this23 = this;\n\n    var options = this.element.options;\n    var count = 0;\n    var value = [];\n\n    for (var i = 0, ii = options.length; i < ii; i++) {\n      var _option = options.item(i);\n      if (!_option.selected) {\n        continue;\n      }\n      value.push(_option.hasOwnProperty('model') ? _option.model : _option.value);\n      count++;\n    }\n\n    if (this.element.multiple) {\n      if (Array.isArray(this.value)) {\n        var _ret2 = function () {\n          var matcher = _this23.element.matcher || function (a, b) {\n            return a === b;\n          };\n\n          var i = 0;\n\n          var _loop2 = function _loop2() {\n            var a = _this23.value[i];\n            if (value.findIndex(function (b) {\n              return matcher(a, b);\n            }) === -1) {\n              _this23.value.splice(i, 1);\n            } else {\n              i++;\n            }\n          };\n\n          while (i < _this23.value.length) {\n            _loop2();\n          }\n\n          i = 0;\n\n          var _loop3 = function _loop3() {\n            var a = value[i];\n            if (_this23.value.findIndex(function (b) {\n              return matcher(a, b);\n            }) === -1) {\n              _this23.value.push(a);\n            }\n            i++;\n          };\n\n          while (i < value.length) {\n            _loop3();\n          }\n          return {\n            v: void 0\n          };\n        }();\n\n        if ((typeof _ret2 === 'undefined' ? 'undefined' : _typeof(_ret2)) === \"object\") return _ret2.v;\n      }\n    } else {\n      if (count === 0) {\n        value = null;\n      } else {\n        value = value[0];\n      }\n    }\n\n    if (value !== this.value) {\n      this.oldValue = this.value;\n      this.value = value;\n      this.notify();\n    }\n  };\n\n  SelectValueObserver.prototype.notify = function notify() {\n    var oldValue = this.oldValue;\n    var newValue = this.value;\n\n    this.callSubscribers(newValue, oldValue);\n  };\n\n  SelectValueObserver.prototype.handleEvent = function handleEvent() {\n    this.synchronizeValue();\n  };\n\n  SelectValueObserver.prototype.subscribe = function subscribe(context, callable) {\n    if (!this.hasSubscribers()) {\n      this.handler.subscribe(this.element, this);\n    }\n    this.addSubscriber(context, callable);\n  };\n\n  SelectValueObserver.prototype.unsubscribe = function unsubscribe(context, callable) {\n    if (this.removeSubscriber(context, callable) && !this.hasSubscribers()) {\n      this.handler.dispose();\n    }\n  };\n\n  SelectValueObserver.prototype.bind = function bind() {\n    var _this24 = this;\n\n    this.domObserver = aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* DOM */ \"b\"].createMutationObserver(function () {\n      _this24.synchronizeOptions();\n      _this24.synchronizeValue();\n    });\n    this.domObserver.observe(this.element, { childList: true, subtree: true, characterData: true });\n  };\n\n  SelectValueObserver.prototype.unbind = function unbind() {\n    this.domObserver.disconnect();\n    this.domObserver = null;\n\n    if (this.arrayObserver) {\n      this.arrayObserver.unsubscribe(selectArrayContext, this);\n      this.arrayObserver = null;\n    }\n  };\n\n  return SelectValueObserver;\n}()) || _class10);\n\nvar ClassObserver = function () {\n  function ClassObserver(element) {\n    \n\n    this.element = element;\n    this.doNotCache = true;\n    this.value = '';\n    this.version = 0;\n  }\n\n  ClassObserver.prototype.getValue = function getValue() {\n    return this.value;\n  };\n\n  ClassObserver.prototype.setValue = function setValue(newValue) {\n    var nameIndex = this.nameIndex || {};\n    var version = this.version;\n    var names = void 0;\n    var name = void 0;\n\n    if (newValue !== null && newValue !== undefined && newValue.length) {\n      names = newValue.split(/\\s+/);\n      for (var i = 0, length = names.length; i < length; i++) {\n        name = names[i];\n        if (name === '') {\n          continue;\n        }\n        nameIndex[name] = version;\n        this.element.classList.add(name);\n      }\n    }\n\n    this.value = newValue;\n    this.nameIndex = nameIndex;\n    this.version += 1;\n\n    if (version === 0) {\n      return;\n    }\n\n    version -= 1;\n    for (name in nameIndex) {\n      if (!nameIndex.hasOwnProperty(name) || nameIndex[name] !== version) {\n        continue;\n      }\n      this.element.classList.remove(name);\n    }\n  };\n\n  ClassObserver.prototype.subscribe = function subscribe() {\n    throw new Error('Observation of a \"' + this.element.nodeName + '\" element\\'s \"class\" property is not supported.');\n  };\n\n  return ClassObserver;\n}();\n\nfunction hasDeclaredDependencies(descriptor) {\n  return !!(descriptor && descriptor.get && descriptor.get.dependencies);\n}\n\nfunction declarePropertyDependencies(ctor, propertyName, dependencies) {\n  var descriptor = Object.getOwnPropertyDescriptor(ctor.prototype, propertyName);\n  descriptor.get.dependencies = dependencies;\n}\n\nfunction computedFrom() {\n  for (var _len = arguments.length, rest = Array(_len), _key = 0; _key < _len; _key++) {\n    rest[_key] = arguments[_key];\n  }\n\n  return function (target, key, descriptor) {\n    descriptor.get.dependencies = rest;\n    return descriptor;\n  };\n}\n\nvar ComputedExpression = function (_Expression19) {\n  _inherits(ComputedExpression, _Expression19);\n\n  function ComputedExpression(name, dependencies) {\n    \n\n    var _this25 = _possibleConstructorReturn(this, _Expression19.call(this));\n\n    _this25.name = name;\n    _this25.dependencies = dependencies;\n    _this25.isAssignable = true;\n    return _this25;\n  }\n\n  ComputedExpression.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    return scope.bindingContext[this.name];\n  };\n\n  ComputedExpression.prototype.assign = function assign(scope, value) {\n    scope.bindingContext[this.name] = value;\n  };\n\n  ComputedExpression.prototype.accept = function accept(visitor) {\n    throw new Error('not implemented');\n  };\n\n  ComputedExpression.prototype.connect = function connect(binding, scope) {\n    var dependencies = this.dependencies;\n    var i = dependencies.length;\n    while (i--) {\n      dependencies[i].connect(binding, scope);\n    }\n  };\n\n  return ComputedExpression;\n}(Expression);\n\nfunction createComputedObserver(obj, propertyName, descriptor, observerLocator) {\n  var dependencies = descriptor.get.dependencies;\n  if (!(dependencies instanceof ComputedExpression)) {\n    var i = dependencies.length;\n    while (i--) {\n      dependencies[i] = observerLocator.parser.parse(dependencies[i]);\n    }\n    dependencies = descriptor.get.dependencies = new ComputedExpression(propertyName, dependencies);\n  }\n\n  var scope = { bindingContext: obj, overrideContext: createOverrideContext(obj) };\n  return new ExpressionObserver(scope, dependencies, observerLocator);\n}\n\nvar svgElements = void 0;\nvar svgPresentationElements = void 0;\nvar svgPresentationAttributes = void 0;\nvar svgAnalyzer = void 0;\n\nif (typeof FEATURE_NO_SVG === 'undefined') {\n  svgElements = {\n    a: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'target', 'transform', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    altGlyph: ['class', 'dx', 'dy', 'externalResourcesRequired', 'format', 'glyphRef', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'rotate', 'style', 'systemLanguage', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    altGlyphDef: ['id', 'xml:base', 'xml:lang', 'xml:space'],\n    altGlyphItem: ['id', 'xml:base', 'xml:lang', 'xml:space'],\n    animate: ['accumulate', 'additive', 'attributeName', 'attributeType', 'begin', 'by', 'calcMode', 'dur', 'end', 'externalResourcesRequired', 'fill', 'from', 'id', 'keySplines', 'keyTimes', 'max', 'min', 'onbegin', 'onend', 'onload', 'onrepeat', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'restart', 'systemLanguage', 'to', 'values', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    animateColor: ['accumulate', 'additive', 'attributeName', 'attributeType', 'begin', 'by', 'calcMode', 'dur', 'end', 'externalResourcesRequired', 'fill', 'from', 'id', 'keySplines', 'keyTimes', 'max', 'min', 'onbegin', 'onend', 'onload', 'onrepeat', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'restart', 'systemLanguage', 'to', 'values', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    animateMotion: ['accumulate', 'additive', 'begin', 'by', 'calcMode', 'dur', 'end', 'externalResourcesRequired', 'fill', 'from', 'id', 'keyPoints', 'keySplines', 'keyTimes', 'max', 'min', 'onbegin', 'onend', 'onload', 'onrepeat', 'origin', 'path', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'restart', 'rotate', 'systemLanguage', 'to', 'values', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    animateTransform: ['accumulate', 'additive', 'attributeName', 'attributeType', 'begin', 'by', 'calcMode', 'dur', 'end', 'externalResourcesRequired', 'fill', 'from', 'id', 'keySplines', 'keyTimes', 'max', 'min', 'onbegin', 'onend', 'onload', 'onrepeat', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'restart', 'systemLanguage', 'to', 'type', 'values', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    circle: ['class', 'cx', 'cy', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'r', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n    clipPath: ['class', 'clipPathUnits', 'externalResourcesRequired', 'id', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n    'color-profile': ['id', 'local', 'name', 'rendering-intent', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    cursor: ['externalResourcesRequired', 'id', 'requiredExtensions', 'requiredFeatures', 'systemLanguage', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    defs: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n    desc: ['class', 'id', 'style', 'xml:base', 'xml:lang', 'xml:space'],\n    ellipse: ['class', 'cx', 'cy', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'rx', 'ry', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n    feBlend: ['class', 'height', 'id', 'in', 'in2', 'mode', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feColorMatrix: ['class', 'height', 'id', 'in', 'result', 'style', 'type', 'values', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feComponentTransfer: ['class', 'height', 'id', 'in', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feComposite: ['class', 'height', 'id', 'in', 'in2', 'k1', 'k2', 'k3', 'k4', 'operator', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feConvolveMatrix: ['bias', 'class', 'divisor', 'edgeMode', 'height', 'id', 'in', 'kernelMatrix', 'kernelUnitLength', 'order', 'preserveAlpha', 'result', 'style', 'targetX', 'targetY', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feDiffuseLighting: ['class', 'diffuseConstant', 'height', 'id', 'in', 'kernelUnitLength', 'result', 'style', 'surfaceScale', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feDisplacementMap: ['class', 'height', 'id', 'in', 'in2', 'result', 'scale', 'style', 'width', 'x', 'xChannelSelector', 'xml:base', 'xml:lang', 'xml:space', 'y', 'yChannelSelector'],\n    feDistantLight: ['azimuth', 'elevation', 'id', 'xml:base', 'xml:lang', 'xml:space'],\n    feFlood: ['class', 'height', 'id', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feFuncA: ['amplitude', 'exponent', 'id', 'intercept', 'offset', 'slope', 'tableValues', 'type', 'xml:base', 'xml:lang', 'xml:space'],\n    feFuncB: ['amplitude', 'exponent', 'id', 'intercept', 'offset', 'slope', 'tableValues', 'type', 'xml:base', 'xml:lang', 'xml:space'],\n    feFuncG: ['amplitude', 'exponent', 'id', 'intercept', 'offset', 'slope', 'tableValues', 'type', 'xml:base', 'xml:lang', 'xml:space'],\n    feFuncR: ['amplitude', 'exponent', 'id', 'intercept', 'offset', 'slope', 'tableValues', 'type', 'xml:base', 'xml:lang', 'xml:space'],\n    feGaussianBlur: ['class', 'height', 'id', 'in', 'result', 'stdDeviation', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feImage: ['class', 'externalResourcesRequired', 'height', 'id', 'preserveAspectRatio', 'result', 'style', 'width', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feMerge: ['class', 'height', 'id', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feMergeNode: ['id', 'xml:base', 'xml:lang', 'xml:space'],\n    feMorphology: ['class', 'height', 'id', 'in', 'operator', 'radius', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feOffset: ['class', 'dx', 'dy', 'height', 'id', 'in', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    fePointLight: ['id', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y', 'z'],\n    feSpecularLighting: ['class', 'height', 'id', 'in', 'kernelUnitLength', 'result', 'specularConstant', 'specularExponent', 'style', 'surfaceScale', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feSpotLight: ['id', 'limitingConeAngle', 'pointsAtX', 'pointsAtY', 'pointsAtZ', 'specularExponent', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y', 'z'],\n    feTile: ['class', 'height', 'id', 'in', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feTurbulence: ['baseFrequency', 'class', 'height', 'id', 'numOctaves', 'result', 'seed', 'stitchTiles', 'style', 'type', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    filter: ['class', 'externalResourcesRequired', 'filterRes', 'filterUnits', 'height', 'id', 'primitiveUnits', 'style', 'width', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    font: ['class', 'externalResourcesRequired', 'horiz-adv-x', 'horiz-origin-x', 'horiz-origin-y', 'id', 'style', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'xml:base', 'xml:lang', 'xml:space'],\n    'font-face': ['accent-height', 'alphabetic', 'ascent', 'bbox', 'cap-height', 'descent', 'font-family', 'font-size', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'hanging', 'id', 'ideographic', 'mathematical', 'overline-position', 'overline-thickness', 'panose-1', 'slope', 'stemh', 'stemv', 'strikethrough-position', 'strikethrough-thickness', 'underline-position', 'underline-thickness', 'unicode-range', 'units-per-em', 'v-alphabetic', 'v-hanging', 'v-ideographic', 'v-mathematical', 'widths', 'x-height', 'xml:base', 'xml:lang', 'xml:space'],\n    'font-face-format': ['id', 'string', 'xml:base', 'xml:lang', 'xml:space'],\n    'font-face-name': ['id', 'name', 'xml:base', 'xml:lang', 'xml:space'],\n    'font-face-src': ['id', 'xml:base', 'xml:lang', 'xml:space'],\n    'font-face-uri': ['id', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    foreignObject: ['class', 'externalResourcesRequired', 'height', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    g: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n    glyph: ['arabic-form', 'class', 'd', 'glyph-name', 'horiz-adv-x', 'id', 'lang', 'orientation', 'style', 'unicode', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'xml:base', 'xml:lang', 'xml:space'],\n    glyphRef: ['class', 'dx', 'dy', 'format', 'glyphRef', 'id', 'style', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    hkern: ['g1', 'g2', 'id', 'k', 'u1', 'u2', 'xml:base', 'xml:lang', 'xml:space'],\n    image: ['class', 'externalResourcesRequired', 'height', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'preserveAspectRatio', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'width', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    line: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'x1', 'x2', 'xml:base', 'xml:lang', 'xml:space', 'y1', 'y2'],\n    linearGradient: ['class', 'externalResourcesRequired', 'gradientTransform', 'gradientUnits', 'id', 'spreadMethod', 'style', 'x1', 'x2', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y1', 'y2'],\n    marker: ['class', 'externalResourcesRequired', 'id', 'markerHeight', 'markerUnits', 'markerWidth', 'orient', 'preserveAspectRatio', 'refX', 'refY', 'style', 'viewBox', 'xml:base', 'xml:lang', 'xml:space'],\n    mask: ['class', 'externalResourcesRequired', 'height', 'id', 'maskContentUnits', 'maskUnits', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    metadata: ['id', 'xml:base', 'xml:lang', 'xml:space'],\n    'missing-glyph': ['class', 'd', 'horiz-adv-x', 'id', 'style', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'xml:base', 'xml:lang', 'xml:space'],\n    mpath: ['externalResourcesRequired', 'id', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    path: ['class', 'd', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'pathLength', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n    pattern: ['class', 'externalResourcesRequired', 'height', 'id', 'patternContentUnits', 'patternTransform', 'patternUnits', 'preserveAspectRatio', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'viewBox', 'width', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    polygon: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'points', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n    polyline: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'points', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n    radialGradient: ['class', 'cx', 'cy', 'externalResourcesRequired', 'fx', 'fy', 'gradientTransform', 'gradientUnits', 'id', 'r', 'spreadMethod', 'style', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    rect: ['class', 'externalResourcesRequired', 'height', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'rx', 'ry', 'style', 'systemLanguage', 'transform', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    script: ['externalResourcesRequired', 'id', 'type', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    set: ['attributeName', 'attributeType', 'begin', 'dur', 'end', 'externalResourcesRequired', 'fill', 'id', 'max', 'min', 'onbegin', 'onend', 'onload', 'onrepeat', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'restart', 'systemLanguage', 'to', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    stop: ['class', 'id', 'offset', 'style', 'xml:base', 'xml:lang', 'xml:space'],\n    style: ['id', 'media', 'title', 'type', 'xml:base', 'xml:lang', 'xml:space'],\n    svg: ['baseProfile', 'class', 'contentScriptType', 'contentStyleType', 'externalResourcesRequired', 'height', 'id', 'onabort', 'onactivate', 'onclick', 'onerror', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onresize', 'onscroll', 'onunload', 'onzoom', 'preserveAspectRatio', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'version', 'viewBox', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y', 'zoomAndPan'],\n    switch: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n    symbol: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'preserveAspectRatio', 'style', 'viewBox', 'xml:base', 'xml:lang', 'xml:space'],\n    text: ['class', 'dx', 'dy', 'externalResourcesRequired', 'id', 'lengthAdjust', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'rotate', 'style', 'systemLanguage', 'textLength', 'transform', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    textPath: ['class', 'externalResourcesRequired', 'id', 'lengthAdjust', 'method', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'spacing', 'startOffset', 'style', 'systemLanguage', 'textLength', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    title: ['class', 'id', 'style', 'xml:base', 'xml:lang', 'xml:space'],\n    tref: ['class', 'dx', 'dy', 'externalResourcesRequired', 'id', 'lengthAdjust', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'rotate', 'style', 'systemLanguage', 'textLength', 'x', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    tspan: ['class', 'dx', 'dy', 'externalResourcesRequired', 'id', 'lengthAdjust', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'rotate', 'style', 'systemLanguage', 'textLength', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    use: ['class', 'externalResourcesRequired', 'height', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'width', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    view: ['externalResourcesRequired', 'id', 'preserveAspectRatio', 'viewBox', 'viewTarget', 'xml:base', 'xml:lang', 'xml:space', 'zoomAndPan'],\n    vkern: ['g1', 'g2', 'id', 'k', 'u1', 'u2', 'xml:base', 'xml:lang', 'xml:space']\n  };\n\n\n  svgPresentationElements = {\n    'a': true,\n    'altGlyph': true,\n    'animate': true,\n    'animateColor': true,\n    'circle': true,\n    'clipPath': true,\n    'defs': true,\n    'ellipse': true,\n    'feBlend': true,\n    'feColorMatrix': true,\n    'feComponentTransfer': true,\n    'feComposite': true,\n    'feConvolveMatrix': true,\n    'feDiffuseLighting': true,\n    'feDisplacementMap': true,\n    'feFlood': true,\n    'feGaussianBlur': true,\n    'feImage': true,\n    'feMerge': true,\n    'feMorphology': true,\n    'feOffset': true,\n    'feSpecularLighting': true,\n    'feTile': true,\n    'feTurbulence': true,\n    'filter': true,\n    'font': true,\n    'foreignObject': true,\n    'g': true,\n    'glyph': true,\n    'glyphRef': true,\n    'image': true,\n    'line': true,\n    'linearGradient': true,\n    'marker': true,\n    'mask': true,\n    'missing-glyph': true,\n    'path': true,\n    'pattern': true,\n    'polygon': true,\n    'polyline': true,\n    'radialGradient': true,\n    'rect': true,\n    'stop': true,\n    'svg': true,\n    'switch': true,\n    'symbol': true,\n    'text': true,\n    'textPath': true,\n    'tref': true,\n    'tspan': true,\n    'use': true\n  };\n\n  svgPresentationAttributes = {\n    'alignment-baseline': true,\n    'baseline-shift': true,\n    'clip-path': true,\n    'clip-rule': true,\n    'clip': true,\n    'color-interpolation-filters': true,\n    'color-interpolation': true,\n    'color-profile': true,\n    'color-rendering': true,\n    'color': true,\n    'cursor': true,\n    'direction': true,\n    'display': true,\n    'dominant-baseline': true,\n    'enable-background': true,\n    'fill-opacity': true,\n    'fill-rule': true,\n    'fill': true,\n    'filter': true,\n    'flood-color': true,\n    'flood-opacity': true,\n    'font-family': true,\n    'font-size-adjust': true,\n    'font-size': true,\n    'font-stretch': true,\n    'font-style': true,\n    'font-variant': true,\n    'font-weight': true,\n    'glyph-orientation-horizontal': true,\n    'glyph-orientation-vertical': true,\n    'image-rendering': true,\n    'kerning': true,\n    'letter-spacing': true,\n    'lighting-color': true,\n    'marker-end': true,\n    'marker-mid': true,\n    'marker-start': true,\n    'mask': true,\n    'opacity': true,\n    'overflow': true,\n    'pointer-events': true,\n    'shape-rendering': true,\n    'stop-color': true,\n    'stop-opacity': true,\n    'stroke-dasharray': true,\n    'stroke-dashoffset': true,\n    'stroke-linecap': true,\n    'stroke-linejoin': true,\n    'stroke-miterlimit': true,\n    'stroke-opacity': true,\n    'stroke-width': true,\n    'stroke': true,\n    'text-anchor': true,\n    'text-decoration': true,\n    'text-rendering': true,\n    'unicode-bidi': true,\n    'visibility': true,\n    'word-spacing': true,\n    'writing-mode': true\n  };\n\n  var createElement = function createElement(html) {\n    var div = aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* DOM */ \"b\"].createElement('div');\n    div.innerHTML = html;\n    return div.firstChild;\n  };\n\n  svgAnalyzer = function () {\n    function SVGAnalyzer() {\n      \n\n      if (createElement('<svg><altGlyph /><\/svg>').firstElementChild.nodeName === 'altglyph' && elements.altGlyph) {\n        elements.altglyph = elements.altGlyph;\n        delete elements.altGlyph;\n        elements.altglyphdef = elements.altGlyphDef;\n        delete elements.altGlyphDef;\n        elements.altglyphitem = elements.altGlyphItem;\n        delete elements.altGlyphItem;\n        elements.glyphref = elements.glyphRef;\n        delete elements.glyphRef;\n      }\n    }\n\n    SVGAnalyzer.prototype.isStandardSvgAttribute = function isStandardSvgAttribute(nodeName, attributeName) {\n      return presentationElements[nodeName] && presentationAttributes[attributeName] || elements[nodeName] && elements[nodeName].indexOf(attributeName) !== -1;\n    };\n\n    return SVGAnalyzer;\n  }();\n}\n\nvar elements = svgElements;\nvar presentationElements = svgPresentationElements;\nvar presentationAttributes = svgPresentationAttributes;\nvar SVGAnalyzer = svgAnalyzer || function () {\n  function _class11() {\n    \n  }\n\n  _class11.prototype.isStandardSvgAttribute = function isStandardSvgAttribute() {\n    return false;\n  };\n\n  return _class11;\n}();\n\nvar ObserverLocator = (_temp = _class12 = function () {\n  function ObserverLocator(taskQueue, eventManager, dirtyChecker, svgAnalyzer, parser) {\n    \n\n    this.taskQueue = taskQueue;\n    this.eventManager = eventManager;\n    this.dirtyChecker = dirtyChecker;\n    this.svgAnalyzer = svgAnalyzer;\n    this.parser = parser;\n\n    this.adapters = [];\n    this.logger = aurelia_logging__WEBPACK_IMPORTED_MODULE_0__[\"getLogger\"]('observer-locator');\n  }\n\n  ObserverLocator.prototype.getObserver = function getObserver(obj, propertyName) {\n    var observersLookup = obj.__observers__;\n    var observer = void 0;\n\n    if (observersLookup && propertyName in observersLookup) {\n      return observersLookup[propertyName];\n    }\n\n    observer = this.createPropertyObserver(obj, propertyName);\n\n    if (!observer.doNotCache) {\n      if (observersLookup === undefined) {\n        observersLookup = this.getOrCreateObserversLookup(obj);\n      }\n\n      observersLookup[propertyName] = observer;\n    }\n\n    return observer;\n  };\n\n  ObserverLocator.prototype.getOrCreateObserversLookup = function getOrCreateObserversLookup(obj) {\n    return obj.__observers__ || this.createObserversLookup(obj);\n  };\n\n  ObserverLocator.prototype.createObserversLookup = function createObserversLookup(obj) {\n    var value = {};\n\n    if (!Reflect.defineProperty(obj, '__observers__', {\n      enumerable: false,\n      configurable: false,\n      writable: false,\n      value: value\n    })) {\n      this.logger.warn('Cannot add observers to object', obj);\n    }\n\n    return value;\n  };\n\n  ObserverLocator.prototype.addAdapter = function addAdapter(adapter) {\n    this.adapters.push(adapter);\n  };\n\n  ObserverLocator.prototype.getAdapterObserver = function getAdapterObserver(obj, propertyName, descriptor) {\n    for (var i = 0, ii = this.adapters.length; i < ii; i++) {\n      var adapter = this.adapters[i];\n      var observer = adapter.getObserver(obj, propertyName, descriptor);\n      if (observer) {\n        return observer;\n      }\n    }\n    return null;\n  };\n\n  ObserverLocator.prototype.createPropertyObserver = function createPropertyObserver(obj, propertyName) {\n    var descriptor = void 0;\n    var handler = void 0;\n    var xlinkResult = void 0;\n\n    if (!(obj instanceof Object)) {\n      return new PrimitiveObserver(obj, propertyName);\n    }\n\n    if (obj instanceof aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* DOM */ \"b\"].Element) {\n      if (propertyName === 'class') {\n        return new ClassObserver(obj);\n      }\n      if (propertyName === 'style' || propertyName === 'css') {\n        return new StyleObserver(obj, propertyName);\n      }\n      handler = this.eventManager.getElementHandler(obj, propertyName);\n      if (propertyName === 'value' && obj.tagName.toLowerCase() === 'select') {\n        return new SelectValueObserver(obj, handler, this);\n      }\n      if (propertyName === 'checked' && obj.tagName.toLowerCase() === 'input') {\n        return new CheckedObserver(obj, handler, this);\n      }\n      if (handler) {\n        return new ValueAttributeObserver(obj, propertyName, handler);\n      }\n      xlinkResult = /^xlink:(.+)$/.exec(propertyName);\n      if (xlinkResult) {\n        return new XLinkAttributeObserver(obj, propertyName, xlinkResult[1]);\n      }\n      if (propertyName === 'role' && (obj instanceof aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* DOM */ \"b\"].Element || obj instanceof aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* DOM */ \"b\"].SVGElement) || /^\\w+:|^data-|^aria-/.test(propertyName) || obj instanceof aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* DOM */ \"b\"].SVGElement && this.svgAnalyzer.isStandardSvgAttribute(obj.nodeName, propertyName)) {\n        return new DataAttributeObserver(obj, propertyName);\n      }\n    }\n\n    descriptor = Object.getPropertyDescriptor(obj, propertyName);\n\n    if (hasDeclaredDependencies(descriptor)) {\n      return createComputedObserver(obj, propertyName, descriptor, this);\n    }\n\n    if (descriptor) {\n      var existingGetterOrSetter = descriptor.get || descriptor.set;\n      if (existingGetterOrSetter) {\n        if (existingGetterOrSetter.getObserver) {\n          return existingGetterOrSetter.getObserver(obj);\n        }\n\n        var adapterObserver = this.getAdapterObserver(obj, propertyName, descriptor);\n        if (adapterObserver) {\n          return adapterObserver;\n        }\n        return new DirtyCheckProperty(this.dirtyChecker, obj, propertyName);\n      }\n    }\n\n    if (obj instanceof Array) {\n      if (propertyName === 'length') {\n        return this.getArrayObserver(obj).getLengthObserver();\n      }\n\n      return new DirtyCheckProperty(this.dirtyChecker, obj, propertyName);\n    } else if (obj instanceof Map) {\n      if (propertyName === 'size') {\n        return this.getMapObserver(obj).getLengthObserver();\n      }\n\n      return new DirtyCheckProperty(this.dirtyChecker, obj, propertyName);\n    } else if (obj instanceof Set) {\n      if (propertyName === 'size') {\n        return this.getSetObserver(obj).getLengthObserver();\n      }\n\n      return new DirtyCheckProperty(this.dirtyChecker, obj, propertyName);\n    }\n\n    return new SetterObserver(this.taskQueue, obj, propertyName);\n  };\n\n  ObserverLocator.prototype.getAccessor = function getAccessor(obj, propertyName) {\n    if (obj instanceof aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* DOM */ \"b\"].Element) {\n      if (propertyName === 'class' || propertyName === 'style' || propertyName === 'css' || propertyName === 'value' && (obj.tagName.toLowerCase() === 'input' || obj.tagName.toLowerCase() === 'select') || propertyName === 'checked' && obj.tagName.toLowerCase() === 'input' || propertyName === 'model' && obj.tagName.toLowerCase() === 'input' || /^xlink:.+$/.exec(propertyName)) {\n        return this.getObserver(obj, propertyName);\n      }\n      if (/^\\w+:|^data-|^aria-/.test(propertyName) || obj instanceof aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* DOM */ \"b\"].SVGElement && this.svgAnalyzer.isStandardSvgAttribute(obj.nodeName, propertyName) || obj.tagName.toLowerCase() === 'img' && propertyName === 'src' || obj.tagName.toLowerCase() === 'a' && propertyName === 'href') {\n        return dataAttributeAccessor;\n      }\n    }\n    return propertyAccessor;\n  };\n\n  ObserverLocator.prototype.getArrayObserver = function getArrayObserver(array) {\n    return _getArrayObserver(this.taskQueue, array);\n  };\n\n  ObserverLocator.prototype.getMapObserver = function getMapObserver(map) {\n    return _getMapObserver(this.taskQueue, map);\n  };\n\n  ObserverLocator.prototype.getSetObserver = function getSetObserver(set) {\n    return _getSetObserver(this.taskQueue, set);\n  };\n\n  return ObserverLocator;\n}(), _class12.inject = [aurelia_task_queue__WEBPACK_IMPORTED_MODULE_2__[/* TaskQueue */ \"a\"], EventManager, DirtyChecker, SVGAnalyzer, Parser], _temp);\n\nvar ObjectObservationAdapter = function () {\n  function ObjectObservationAdapter() {\n    \n  }\n\n  ObjectObservationAdapter.prototype.getObserver = function getObserver(object, propertyName, descriptor) {\n    throw new Error('BindingAdapters must implement getObserver(object, propertyName).');\n  };\n\n  return ObjectObservationAdapter;\n}();\n\nvar BindingExpression = function () {\n  function BindingExpression(observerLocator, targetProperty, sourceExpression, mode, lookupFunctions, attribute) {\n    \n\n    this.observerLocator = observerLocator;\n    this.targetProperty = targetProperty;\n    this.sourceExpression = sourceExpression;\n    this.mode = mode;\n    this.lookupFunctions = lookupFunctions;\n    this.attribute = attribute;\n    this.discrete = false;\n  }\n\n  BindingExpression.prototype.createBinding = function createBinding(target) {\n    return new Binding(this.observerLocator, this.sourceExpression, target, this.targetProperty, this.mode, this.lookupFunctions);\n  };\n\n  return BindingExpression;\n}();\n\nvar Binding = (_dec10 = connectable(), _dec10(_class13 = function () {\n  function Binding(observerLocator, sourceExpression, target, targetProperty, mode, lookupFunctions) {\n    \n\n    this.observerLocator = observerLocator;\n    this.sourceExpression = sourceExpression;\n    this.target = target;\n    this.targetProperty = targetProperty;\n    this.mode = mode;\n    this.lookupFunctions = lookupFunctions;\n  }\n\n  Binding.prototype.updateTarget = function updateTarget(value) {\n    this.targetObserver.setValue(value, this.target, this.targetProperty);\n  };\n\n  Binding.prototype.updateSource = function updateSource(value) {\n    this.sourceExpression.assign(this.source, value, this.lookupFunctions);\n  };\n\n  Binding.prototype.call = function call(context, newValue, oldValue) {\n    if (!this.isBound) {\n      return;\n    }\n    if (context === sourceContext) {\n      oldValue = this.targetObserver.getValue(this.target, this.targetProperty);\n      newValue = this.sourceExpression.evaluate(this.source, this.lookupFunctions);\n      if (newValue !== oldValue) {\n        this.updateTarget(newValue);\n      }\n      if (this.mode !== bindingMode.oneTime) {\n        this._version++;\n        this.sourceExpression.connect(this, this.source);\n        this.unobserve(false);\n      }\n      return;\n    }\n    if (context === targetContext) {\n      if (newValue !== this.sourceExpression.evaluate(this.source, this.lookupFunctions)) {\n        this.updateSource(newValue);\n      }\n      return;\n    }\n    throw new Error('Unexpected call context ' + context);\n  };\n\n  Binding.prototype.bind = function bind(source) {\n    if (this.isBound) {\n      if (this.source === source) {\n        return;\n      }\n      this.unbind();\n    }\n    this.isBound = true;\n    this.source = source;\n\n    if (this.sourceExpression.bind) {\n      this.sourceExpression.bind(this, source, this.lookupFunctions);\n    }\n\n    var mode = this.mode;\n    if (!this.targetObserver) {\n      var method = mode === bindingMode.twoWay || mode === bindingMode.fromView ? 'getObserver' : 'getAccessor';\n      this.targetObserver = this.observerLocator[method](this.target, this.targetProperty);\n    }\n\n    if ('bind' in this.targetObserver) {\n      this.targetObserver.bind();\n    }\n    if (this.mode !== bindingMode.fromView) {\n      var value = this.sourceExpression.evaluate(source, this.lookupFunctions);\n      this.updateTarget(value);\n    }\n\n    if (mode === bindingMode.oneTime) {\n      return;\n    } else if (mode === bindingMode.toView) {\n      enqueueBindingConnect(this);\n    } else if (mode === bindingMode.twoWay) {\n      this.sourceExpression.connect(this, source);\n      this.targetObserver.subscribe(targetContext, this);\n    } else if (mode === bindingMode.fromView) {\n      this.targetObserver.subscribe(targetContext, this);\n    }\n  };\n\n  Binding.prototype.unbind = function unbind() {\n    if (!this.isBound) {\n      return;\n    }\n    this.isBound = false;\n    if (this.sourceExpression.unbind) {\n      this.sourceExpression.unbind(this, this.source);\n    }\n    this.source = null;\n    if ('unbind' in this.targetObserver) {\n      this.targetObserver.unbind();\n    }\n    if (this.targetObserver.unsubscribe) {\n      this.targetObserver.unsubscribe(targetContext, this);\n    }\n    this.unobserve(true);\n  };\n\n  Binding.prototype.connect = function connect(evaluate) {\n    if (!this.isBound) {\n      return;\n    }\n    if (evaluate) {\n      var value = this.sourceExpression.evaluate(this.source, this.lookupFunctions);\n      this.updateTarget(value);\n    }\n    this.sourceExpression.connect(this, this.source);\n  };\n\n  return Binding;\n}()) || _class13);\n\nvar CallExpression = function () {\n  function CallExpression(observerLocator, targetProperty, sourceExpression, lookupFunctions) {\n    \n\n    this.observerLocator = observerLocator;\n    this.targetProperty = targetProperty;\n    this.sourceExpression = sourceExpression;\n    this.lookupFunctions = lookupFunctions;\n  }\n\n  CallExpression.prototype.createBinding = function createBinding(target) {\n    return new Call(this.observerLocator, this.sourceExpression, target, this.targetProperty, this.lookupFunctions);\n  };\n\n  return CallExpression;\n}();\n\nvar Call = function () {\n  function Call(observerLocator, sourceExpression, target, targetProperty, lookupFunctions) {\n    \n\n    this.sourceExpression = sourceExpression;\n    this.target = target;\n    this.targetProperty = observerLocator.getObserver(target, targetProperty);\n    this.lookupFunctions = lookupFunctions;\n  }\n\n  Call.prototype.callSource = function callSource($event) {\n    var overrideContext = this.source.overrideContext;\n    Object.assign(overrideContext, $event);\n    overrideContext.$event = $event;\n    var mustEvaluate = true;\n    var result = this.sourceExpression.evaluate(this.source, this.lookupFunctions, mustEvaluate);\n    delete overrideContext.$event;\n    for (var prop in $event) {\n      delete overrideContext[prop];\n    }\n    return result;\n  };\n\n  Call.prototype.bind = function bind(source) {\n    var _this26 = this;\n\n    if (this.isBound) {\n      if (this.source === source) {\n        return;\n      }\n      this.unbind();\n    }\n    this.isBound = true;\n    this.source = source;\n\n    if (this.sourceExpression.bind) {\n      this.sourceExpression.bind(this, source, this.lookupFunctions);\n    }\n    this.targetProperty.setValue(function ($event) {\n      return _this26.callSource($event);\n    });\n  };\n\n  Call.prototype.unbind = function unbind() {\n    if (!this.isBound) {\n      return;\n    }\n    this.isBound = false;\n    if (this.sourceExpression.unbind) {\n      this.sourceExpression.unbind(this, this.source);\n    }\n    this.source = null;\n    this.targetProperty.setValue(null);\n  };\n\n  return Call;\n}();\n\nvar ValueConverterResource = function () {\n  function ValueConverterResource(name) {\n    \n\n    this.name = name;\n  }\n\n  ValueConverterResource.convention = function convention(name) {\n    if (name.endsWith('ValueConverter')) {\n      return new ValueConverterResource(camelCase(name.substring(0, name.length - 14)));\n    }\n  };\n\n  ValueConverterResource.prototype.initialize = function initialize(container, target) {\n    this.instance = container.get(target);\n  };\n\n  ValueConverterResource.prototype.register = function register(registry, name) {\n    registry.registerValueConverter(name || this.name, this.instance);\n  };\n\n  ValueConverterResource.prototype.load = function load(container, target) {};\n\n  return ValueConverterResource;\n}();\n\nfunction valueConverter(nameOrTarget) {\n  if (nameOrTarget === undefined || typeof nameOrTarget === 'string') {\n    return function (target) {\n      aurelia_metadata__WEBPACK_IMPORTED_MODULE_3__[/* metadata */ \"d\"].define(aurelia_metadata__WEBPACK_IMPORTED_MODULE_3__[/* metadata */ \"d\"].resource, new ValueConverterResource(nameOrTarget), target);\n    };\n  }\n\n  aurelia_metadata__WEBPACK_IMPORTED_MODULE_3__[/* metadata */ \"d\"].define(aurelia_metadata__WEBPACK_IMPORTED_MODULE_3__[/* metadata */ \"d\"].resource, new ValueConverterResource(), nameOrTarget);\n}\n\nvar BindingBehaviorResource = function () {\n  function BindingBehaviorResource(name) {\n    \n\n    this.name = name;\n  }\n\n  BindingBehaviorResource.convention = function convention(name) {\n    if (name.endsWith('BindingBehavior')) {\n      return new BindingBehaviorResource(camelCase(name.substring(0, name.length - 15)));\n    }\n  };\n\n  BindingBehaviorResource.prototype.initialize = function initialize(container, target) {\n    this.instance = container.get(target);\n  };\n\n  BindingBehaviorResource.prototype.register = function register(registry, name) {\n    registry.registerBindingBehavior(name || this.name, this.instance);\n  };\n\n  BindingBehaviorResource.prototype.load = function load(container, target) {};\n\n  return BindingBehaviorResource;\n}();\n\nfunction bindingBehavior(nameOrTarget) {\n  if (nameOrTarget === undefined || typeof nameOrTarget === 'string') {\n    return function (target) {\n      aurelia_metadata__WEBPACK_IMPORTED_MODULE_3__[/* metadata */ \"d\"].define(aurelia_metadata__WEBPACK_IMPORTED_MODULE_3__[/* metadata */ \"d\"].resource, new BindingBehaviorResource(nameOrTarget), target);\n    };\n  }\n\n  aurelia_metadata__WEBPACK_IMPORTED_MODULE_3__[/* metadata */ \"d\"].define(aurelia_metadata__WEBPACK_IMPORTED_MODULE_3__[/* metadata */ \"d\"].resource, new BindingBehaviorResource(), nameOrTarget);\n}\n\nvar ListenerExpression = function () {\n  function ListenerExpression(eventManager, targetEvent, sourceExpression, delegationStrategy, preventDefault, lookupFunctions) {\n    \n\n    this.eventManager = eventManager;\n    this.targetEvent = targetEvent;\n    this.sourceExpression = sourceExpression;\n    this.delegationStrategy = delegationStrategy;\n    this.discrete = true;\n    this.preventDefault = preventDefault;\n    this.lookupFunctions = lookupFunctions;\n  }\n\n  ListenerExpression.prototype.createBinding = function createBinding(target) {\n    return new Listener(this.eventManager, this.targetEvent, this.delegationStrategy, this.sourceExpression, target, this.preventDefault, this.lookupFunctions);\n  };\n\n  return ListenerExpression;\n}();\n\nvar Listener = function () {\n  function Listener(eventManager, targetEvent, delegationStrategy, sourceExpression, target, preventDefault, lookupFunctions) {\n    \n\n    this.eventManager = eventManager;\n    this.targetEvent = targetEvent;\n    this.delegationStrategy = delegationStrategy;\n    this.sourceExpression = sourceExpression;\n    this.target = target;\n    this.preventDefault = preventDefault;\n    this.lookupFunctions = lookupFunctions;\n  }\n\n  Listener.prototype.callSource = function callSource(event) {\n    var overrideContext = this.source.overrideContext;\n    overrideContext.$event = event;\n    var mustEvaluate = true;\n    var result = this.sourceExpression.evaluate(this.source, this.lookupFunctions, mustEvaluate);\n    delete overrideContext.$event;\n    if (result !== true && this.preventDefault) {\n      event.preventDefault();\n    }\n    return result;\n  };\n\n  Listener.prototype.handleEvent = function handleEvent(event) {\n    this.callSource(event);\n  };\n\n  Listener.prototype.bind = function bind(source) {\n    if (this.isBound) {\n      if (this.source === source) {\n        return;\n      }\n      this.unbind();\n    }\n    this.isBound = true;\n    this.source = source;\n\n    if (this.sourceExpression.bind) {\n      this.sourceExpression.bind(this, source, this.lookupFunctions);\n    }\n    this._handler = this.eventManager.addEventListener(this.target, this.targetEvent, this, this.delegationStrategy, true);\n  };\n\n  Listener.prototype.unbind = function unbind() {\n    if (!this.isBound) {\n      return;\n    }\n    this.isBound = false;\n    if (this.sourceExpression.unbind) {\n      this.sourceExpression.unbind(this, this.source);\n    }\n    this.source = null;\n    this._handler.dispose();\n    this._handler = null;\n  };\n\n  return Listener;\n}();\n\nfunction getAU(element) {\n  var au = element.au;\n\n  if (au === undefined) {\n    throw new Error('No Aurelia APIs are defined for the element: \"' + element.tagName + '\".');\n  }\n\n  return au;\n}\n\nvar NameExpression = function () {\n  function NameExpression(sourceExpression, apiName, lookupFunctions) {\n    \n\n    this.sourceExpression = sourceExpression;\n    this.apiName = apiName;\n    this.lookupFunctions = lookupFunctions;\n    this.discrete = true;\n  }\n\n  NameExpression.prototype.createBinding = function createBinding(target) {\n    return new NameBinder(this.sourceExpression, NameExpression.locateAPI(target, this.apiName), this.lookupFunctions);\n  };\n\n  NameExpression.locateAPI = function locateAPI(element, apiName) {\n    switch (apiName) {\n      case 'element':\n        return element;\n      case 'controller':\n        return getAU(element).controller;\n      case 'view-model':\n        return getAU(element).controller.viewModel;\n      case 'view':\n        return getAU(element).controller.view;\n      default:\n        var target = getAU(element)[apiName];\n\n        if (target === undefined) {\n          throw new Error('Attempted to reference \"' + apiName + '\", but it was not found amongst the target\\'s API.');\n        }\n\n        return target.viewModel;\n    }\n  };\n\n  return NameExpression;\n}();\n\nvar NameBinder = function () {\n  function NameBinder(sourceExpression, target, lookupFunctions) {\n    \n\n    this.sourceExpression = sourceExpression;\n    this.target = target;\n    this.lookupFunctions = lookupFunctions;\n  }\n\n  NameBinder.prototype.bind = function bind(source) {\n    if (this.isBound) {\n      if (this.source === source) {\n        return;\n      }\n      this.unbind();\n    }\n    this.isBound = true;\n    this.source = source;\n    if (this.sourceExpression.bind) {\n      this.sourceExpression.bind(this, source, this.lookupFunctions);\n    }\n    this.sourceExpression.assign(this.source, this.target, this.lookupFunctions);\n  };\n\n  NameBinder.prototype.unbind = function unbind() {\n    if (!this.isBound) {\n      return;\n    }\n    this.isBound = false;\n    if (this.sourceExpression.evaluate(this.source, this.lookupFunctions) === this.target) {\n      this.sourceExpression.assign(this.source, null, this.lookupFunctions);\n    }\n    if (this.sourceExpression.unbind) {\n      this.sourceExpression.unbind(this, this.source);\n    }\n    this.source = null;\n  };\n\n  return NameBinder;\n}();\n\nvar LookupFunctions = {\n  bindingBehaviors: function bindingBehaviors(name) {\n    return null;\n  },\n  valueConverters: function valueConverters(name) {\n    return null;\n  }\n};\n\nvar BindingEngine = (_temp2 = _class14 = function () {\n  function BindingEngine(observerLocator, parser) {\n    \n\n    this.observerLocator = observerLocator;\n    this.parser = parser;\n  }\n\n  BindingEngine.prototype.createBindingExpression = function createBindingExpression(targetProperty, sourceExpression) {\n    var mode = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : bindingMode.toView;\n    var lookupFunctions = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : LookupFunctions;\n\n    return new BindingExpression(this.observerLocator, targetProperty, this.parser.parse(sourceExpression), mode, lookupFunctions);\n  };\n\n  BindingEngine.prototype.propertyObserver = function propertyObserver(obj, propertyName) {\n    var _this27 = this;\n\n    return {\n      subscribe: function subscribe(callback) {\n        var observer = _this27.observerLocator.getObserver(obj, propertyName);\n        observer.subscribe(callback);\n        return {\n          dispose: function dispose() {\n            return observer.unsubscribe(callback);\n          }\n        };\n      }\n    };\n  };\n\n  BindingEngine.prototype.collectionObserver = function collectionObserver(collection) {\n    var _this28 = this;\n\n    return {\n      subscribe: function subscribe(callback) {\n        var observer = void 0;\n        if (collection instanceof Array) {\n          observer = _this28.observerLocator.getArrayObserver(collection);\n        } else if (collection instanceof Map) {\n          observer = _this28.observerLocator.getMapObserver(collection);\n        } else if (collection instanceof Set) {\n          observer = _this28.observerLocator.getSetObserver(collection);\n        } else {\n          throw new Error('collection must be an instance of Array, Map or Set.');\n        }\n        observer.subscribe(callback);\n        return {\n          dispose: function dispose() {\n            return observer.unsubscribe(callback);\n          }\n        };\n      }\n    };\n  };\n\n  BindingEngine.prototype.expressionObserver = function expressionObserver(bindingContext, expression) {\n    var scope = { bindingContext: bindingContext, overrideContext: createOverrideContext(bindingContext) };\n    return new ExpressionObserver(scope, this.parser.parse(expression), this.observerLocator, LookupFunctions);\n  };\n\n  BindingEngine.prototype.parseExpression = function parseExpression(expression) {\n    return this.parser.parse(expression);\n  };\n\n  BindingEngine.prototype.registerAdapter = function registerAdapter(adapter) {\n    this.observerLocator.addAdapter(adapter);\n  };\n\n  return BindingEngine;\n}(), _class14.inject = [ObserverLocator, Parser], _temp2);\n\nvar setProto = Set.prototype;\n\nfunction _getSetObserver(taskQueue, set) {\n  return ModifySetObserver.for(taskQueue, set);\n}\n\nvar ModifySetObserver = function (_ModifyCollectionObse3) {\n  _inherits(ModifySetObserver, _ModifyCollectionObse3);\n\n  function ModifySetObserver(taskQueue, set) {\n    \n\n    return _possibleConstructorReturn(this, _ModifyCollectionObse3.call(this, taskQueue, set));\n  }\n\n  ModifySetObserver.for = function _for(taskQueue, set) {\n    if (!('__set_observer__' in set)) {\n      Reflect.defineProperty(set, '__set_observer__', {\n        value: ModifySetObserver.create(taskQueue, set),\n        enumerable: false, configurable: false\n      });\n    }\n    return set.__set_observer__;\n  };\n\n  ModifySetObserver.create = function create(taskQueue, set) {\n    var observer = new ModifySetObserver(taskQueue, set);\n\n    var proto = setProto;\n    if (proto.add !== set.add || proto.delete !== set.delete || proto.clear !== set.clear) {\n      proto = {\n        add: set.add,\n        delete: set.delete,\n        clear: set.clear\n      };\n    }\n\n    set.add = function () {\n      var type = 'add';\n      var oldSize = set.size;\n      var methodCallResult = proto.add.apply(set, arguments);\n      var hasValue = set.size === oldSize;\n      if (!hasValue) {\n        observer.addChangeRecord({\n          type: type,\n          object: set,\n          value: Array.from(set).pop()\n        });\n      }\n      return methodCallResult;\n    };\n\n    set.delete = function () {\n      var hasValue = set.has(arguments[0]);\n      var methodCallResult = proto.delete.apply(set, arguments);\n      if (hasValue) {\n        observer.addChangeRecord({\n          type: 'delete',\n          object: set,\n          value: arguments[0]\n        });\n      }\n      return methodCallResult;\n    };\n\n    set.clear = function () {\n      var methodCallResult = proto.clear.apply(set, arguments);\n      observer.addChangeRecord({\n        type: 'clear',\n        object: set\n      });\n      return methodCallResult;\n    };\n\n    return observer;\n  };\n\n  return ModifySetObserver;\n}(ModifyCollectionObserver);\n\nfunction observable(targetOrConfig, key, descriptor) {\n  function deco(target, key, descriptor, config) {\n    var isClassDecorator = key === undefined;\n    if (isClassDecorator) {\n      target = target.prototype;\n      key = typeof config === 'string' ? config : config.name;\n    }\n\n    var innerPropertyName = '_' + key;\n    var innerPropertyDescriptor = {\n      configurable: true,\n      enumerable: false,\n      writable: true\n    };\n\n    var callbackName = config && config.changeHandler || key + 'Changed';\n\n    if (descriptor) {\n      if (typeof descriptor.initializer === 'function') {\n        innerPropertyDescriptor.value = descriptor.initializer();\n      }\n    } else {\n      descriptor = {};\n    }\n\n    if (!('enumerable' in descriptor)) {\n      descriptor.enumerable = true;\n    }\n\n    delete descriptor.value;\n    delete descriptor.writable;\n    delete descriptor.initializer;\n\n    Reflect.defineProperty(target, innerPropertyName, innerPropertyDescriptor);\n\n    descriptor.get = function () {\n      return this[innerPropertyName];\n    };\n    descriptor.set = function (newValue) {\n      var oldValue = this[innerPropertyName];\n      if (newValue === oldValue) {\n        return;\n      }\n\n      this[innerPropertyName] = newValue;\n      Reflect.defineProperty(this, innerPropertyName, { enumerable: false });\n\n      if (this[callbackName]) {\n        this[callbackName](newValue, oldValue, key);\n      }\n    };\n\n    descriptor.get.dependencies = [innerPropertyName];\n\n    if (isClassDecorator) {\n      Reflect.defineProperty(target, key, descriptor);\n    } else {\n      return descriptor;\n    }\n  }\n\n  if (key === undefined) {\n    return function (t, k, d) {\n      return deco(t, k, d, targetOrConfig);\n    };\n  }\n  return deco(targetOrConfig, key, descriptor);\n}\n\nvar signals = {};\n\nfunction connectBindingToSignal(binding, name) {\n  if (!signals.hasOwnProperty(name)) {\n    signals[name] = 0;\n  }\n  binding.observeProperty(signals, name);\n}\n\nfunction signalBindings(name) {\n  if (signals.hasOwnProperty(name)) {\n    signals[name]++;\n  }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXVyZWxpYS1iaW5kaW5nL2Rpc3QvbmF0aXZlLW1vZHVsZXMvYXVyZWxpYS1iaW5kaW5nLmpzPzVmOTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFpRDtBQUNKO0FBQ0E7O0FBRTdDLGdDQUFnQywyQ0FBMkMsZ0JBQWdCLGtCQUFrQixPQUFPLDJCQUEyQix3REFBd0QsZ0NBQWdDLHVEQUF1RCwyREFBMkQsRUFBRSxFQUFFLHlEQUF5RCxxRUFBcUUsNkRBQTZELG9CQUFvQixHQUFHLEVBQUU7O0FBRWpqQixvR0FBb0csbUJBQW1CLEVBQUUsbUJBQW1CLDhIQUE4SDs7QUFFMVE7O0FBRUEsaURBQWlELGFBQWEsdUZBQXVGLEVBQUUsdUZBQXVGOztBQUU5TywwQ0FBMEMsK0RBQStELHFHQUFxRyxFQUFFLHlFQUF5RSxlQUFlLHlFQUF5RSxFQUFFLEVBQUUsdUhBQXVIOzs7O0FBSTliO0FBQ0Y7QUFDRztBQUNIOztBQUVyQztBQUNBOztBQUVQOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLFFBQVE7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUIsNERBQVE7QUFDakM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLDREQUFRO0FBQ1osR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksNERBQVE7QUFDWjtBQUNBOztBQUVPO0FBQ1A7QUFDQTs7QUFFTztBQUNQO0FBQ0E7O0FBRU87QUFDUDtBQUNBOztBQUVPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFlBQVk7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsY0FBYztBQUNqQztBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLGlCQUFpQjtBQUNwQztBQUNBOztBQUVBLG9CQUFvQixlQUFlO0FBQ25DLHNCQUFzQixrQkFBa0I7QUFDeEM7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixnQkFBZ0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxtQkFBbUIsa0JBQWtCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVPO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQSxpQkFBaUIsb0JBQW9CO0FBQ3JDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsaUJBQWlCLDBCQUEwQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVPO0FBQ1A7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRU07QUFDUDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFLHlEQUFvQjtBQUN0QixDQUFDO0FBQ0Qsd0RBQXdELFdBQVc7QUFDbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVNO0FBQ1A7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVNO0FBQ1A7O0FBRUE7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFTTtBQUNQOztBQUVBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRU07QUFDUDs7QUFFQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFTTtBQUNQOztBQUVBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFTTtBQUNQOztBQUVBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxDQUFDOztBQUVNO0FBQ1A7O0FBRUE7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFTTtBQUNQOztBQUVBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRU07QUFDUDs7QUFFQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFTTtBQUNQOztBQUVBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVNO0FBQ1A7O0FBRUE7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFTTtBQUNQOztBQUVBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRU07QUFDUDs7QUFFQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFTTtBQUNQOztBQUVBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFTTtBQUNQOztBQUVBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLENBQUM7O0FBRU07QUFDUDs7QUFFQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxDQUFDOztBQUVNO0FBQ1A7O0FBRUE7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1CQUFtQixpQkFBaUI7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixtQkFBbUI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLGlCQUFpQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVNO0FBQ1A7O0FBRUE7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsNkNBQTZDLFlBQVk7QUFDekQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUJBQW1CLFlBQVk7QUFDL0I7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFTTtBQUNQOztBQUVBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx5Q0FBeUMsWUFBWTtBQUNyRDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsWUFBWTtBQUMvQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixZQUFZO0FBQzdCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRWlDO0FBQ2pDO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSwyQ0FBMkMsWUFBWTtBQUN2RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSwyQ0FBMkMsWUFBWTtBQUN2RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsMkNBQTJDLFlBQVk7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSwrQ0FBK0MsWUFBWTtBQUMzRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUI7O0FBRW5CLDJDQUEyQyxZQUFZO0FBQ3ZEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CO0FBQ25COztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsWUFBWTtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIOztBQUVPO0FBQ1A7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRU07QUFDUDtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7OztBQUdBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7O0FBRUE7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsMkJBQTJCLEVBQUU7QUFDN0I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDRFQUE0RSxVQUFVOztBQUV0RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGlCQUFpQixnQkFBZ0I7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixVQUFVO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVELGVBQWUseURBQW9COztBQUVuQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLHFDQUFxQztBQUNoRjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNLHVEQUFHO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsTUFBTSx1REFBRztBQUNUO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsTUFBTSx1REFBRztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLE1BQU0sdURBQUc7QUFDVDtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDJGQUEyRjtBQUMzRjtBQUNBO0FBQ0EsT0FBTztBQUNQLDBFQUEwRSw0RkFBNEY7QUFDdEs7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdGQUF3RjtBQUN4RjtBQUNBO0FBQ0EsT0FBTztBQUNQLDZEQUE2RCx5Q0FBeUM7QUFDdEc7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVNO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFTTtBQUNQOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1Q0FBdUMsUUFBUTtBQUMvQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsUUFBUTtBQUMvQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRU07QUFDUDs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFTTtBQUNQOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRCxhQUFhLHlEQUFvQjs7QUFFMUI7QUFDUDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxDQUFDOztBQUVNO0FBQ1A7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFTTtBQUNQOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRU07QUFDUDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVNO0FBQ1A7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLHNNQUFzTSxZQUFZO0FBQ2xOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRU07QUFDUDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFTztBQUNQOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEOztBQUVPO0FBQ1A7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHdDQUF3QyxRQUFRO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsdUJBQXVCLHVEQUFHO0FBQzFCO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsNENBQTRDLHNEQUFzRDtBQUNsRzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRU07QUFDUDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNENBQTRDLFlBQVk7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFTTtBQUNQO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7O0FBRU87QUFDUCxpRUFBaUUsYUFBYTtBQUM5RTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDs7QUFFQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRU07QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGVBQWU7QUFDZjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLHVEQUFHO0FBQ2pCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDs7QUFFTztBQUNBO0FBQ0E7QUFDQTtBQUNQOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRU07QUFDUDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQix5REFBb0I7QUFDdEM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLHVEQUFHO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQsdURBQUcsMkJBQTJCLHVEQUFHLDJFQUEyRSx1REFBRztBQUNwSztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHVCQUF1Qix1REFBRztBQUMxQjtBQUNBO0FBQ0E7QUFDQSxxRUFBcUUsdURBQUc7QUFDeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUMsdUJBQXVCLG9FQUFTOztBQUUxQjtBQUNQOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRU07QUFDUDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVNO0FBQ1A7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRU07QUFDUDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVNO0FBQ1A7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVNO0FBQ1A7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFTTtBQUNQO0FBQ0E7QUFDQSxNQUFNLGlFQUFRLFFBQVEsaUVBQVE7QUFDOUI7QUFDQTs7QUFFQSxFQUFFLGlFQUFRLFFBQVEsaUVBQVE7QUFDMUI7O0FBRU87QUFDUDs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxDQUFDOztBQUVNO0FBQ1A7QUFDQTtBQUNBLE1BQU0saUVBQVEsUUFBUSxpRUFBUTtBQUM5QjtBQUNBOztBQUVBLEVBQUUsaUVBQVEsUUFBUSxpRUFBUTtBQUMxQjs7QUFFTztBQUNQOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRU07QUFDUDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRU87QUFDUDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFTTtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1REFBdUQsb0JBQW9COztBQUUzRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgX2dldEFycmF5T2JzZXJ2ZXIgYXMgZ2V0QXJyYXlPYnNlcnZlciB9O1xuZXhwb3J0IHsgX2dldE1hcE9ic2VydmVyIGFzIGdldE1hcE9ic2VydmVyIH07XG5leHBvcnQgeyBfZ2V0U2V0T2JzZXJ2ZXIgYXMgZ2V0U2V0T2JzZXJ2ZXIgfTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxudmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG52YXIgX2RlYywgX2RlYzIsIF9jbGFzcywgX2RlYzMsIF9jbGFzczIsIF9kZWM0LCBfY2xhc3MzLCBfZGVjNSwgX2NsYXNzNSwgX2RlYzYsIF9jbGFzczcsIF9kZWM3LCBfY2xhc3M4LCBfZGVjOCwgX2NsYXNzOSwgX2RlYzksIF9jbGFzczEwLCBfY2xhc3MxMiwgX3RlbXAsIF9kZWMxMCwgX2NsYXNzMTMsIF9jbGFzczE0LCBfdGVtcDI7XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikgPyBjYWxsIDogc2VsZjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cblxuXG5cbmltcG9ydCAqIGFzIExvZ01hbmFnZXIgZnJvbSAnYXVyZWxpYS1sb2dnaW5nJztcbmltcG9ydCB7IFBMQVRGT1JNLCBET00gfSBmcm9tICdhdXJlbGlhLXBhbCc7XG5pbXBvcnQgeyBUYXNrUXVldWUgfSBmcm9tICdhdXJlbGlhLXRhc2stcXVldWUnO1xuaW1wb3J0IHsgbWV0YWRhdGEgfSBmcm9tICdhdXJlbGlhLW1ldGFkYXRhJztcblxuZXhwb3J0IHZhciB0YXJnZXRDb250ZXh0ID0gJ0JpbmRpbmc6dGFyZ2V0JztcbmV4cG9ydCB2YXIgc291cmNlQ29udGV4dCA9ICdCaW5kaW5nOnNvdXJjZSc7XG5cbnZhciBtYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG5leHBvcnQgZnVuY3Rpb24gY2FtZWxDYXNlKG5hbWUpIHtcbiAgaWYgKG5hbWUgaW4gbWFwKSB7XG4gICAgcmV0dXJuIG1hcFtuYW1lXTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gbmFtZS5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIG5hbWUuc2xpY2UoMSkucmVwbGFjZSgvW18uLV0oXFx3fCQpL2csIGZ1bmN0aW9uIChfLCB4KSB7XG4gICAgcmV0dXJuIHgudG9VcHBlckNhc2UoKTtcbiAgfSk7XG4gIG1hcFtuYW1lXSA9IHJlc3VsdDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU92ZXJyaWRlQ29udGV4dChiaW5kaW5nQ29udGV4dCwgcGFyZW50T3ZlcnJpZGVDb250ZXh0KSB7XG4gIHJldHVybiB7XG4gICAgYmluZGluZ0NvbnRleHQ6IGJpbmRpbmdDb250ZXh0LFxuICAgIHBhcmVudE92ZXJyaWRlQ29udGV4dDogcGFyZW50T3ZlcnJpZGVDb250ZXh0IHx8IG51bGxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnRleHRGb3IobmFtZSwgc2NvcGUsIGFuY2VzdG9yKSB7XG4gIHZhciBvYyA9IHNjb3BlLm92ZXJyaWRlQ29udGV4dDtcblxuICBpZiAoYW5jZXN0b3IpIHtcbiAgICB3aGlsZSAoYW5jZXN0b3IgJiYgb2MpIHtcbiAgICAgIGFuY2VzdG9yLS07XG4gICAgICBvYyA9IG9jLnBhcmVudE92ZXJyaWRlQ29udGV4dDtcbiAgICB9XG4gICAgaWYgKGFuY2VzdG9yIHx8ICFvYykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWUgaW4gb2MgPyBvYyA6IG9jLmJpbmRpbmdDb250ZXh0O1xuICB9XG5cbiAgd2hpbGUgKG9jICYmICEobmFtZSBpbiBvYykgJiYgIShvYy5iaW5kaW5nQ29udGV4dCAmJiBuYW1lIGluIG9jLmJpbmRpbmdDb250ZXh0KSkge1xuICAgIG9jID0gb2MucGFyZW50T3ZlcnJpZGVDb250ZXh0O1xuICB9XG4gIGlmIChvYykge1xuICAgIHJldHVybiBuYW1lIGluIG9jID8gb2MgOiBvYy5iaW5kaW5nQ29udGV4dDtcbiAgfVxuXG4gIHJldHVybiBzY29wZS5iaW5kaW5nQ29udGV4dCB8fCBzY29wZS5vdmVycmlkZUNvbnRleHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTY29wZUZvclRlc3QoYmluZGluZ0NvbnRleHQsIHBhcmVudEJpbmRpbmdDb250ZXh0KSB7XG4gIGlmIChwYXJlbnRCaW5kaW5nQ29udGV4dCkge1xuICAgIHJldHVybiB7XG4gICAgICBiaW5kaW5nQ29udGV4dDogYmluZGluZ0NvbnRleHQsXG4gICAgICBvdmVycmlkZUNvbnRleHQ6IGNyZWF0ZU92ZXJyaWRlQ29udGV4dChiaW5kaW5nQ29udGV4dCwgY3JlYXRlT3ZlcnJpZGVDb250ZXh0KHBhcmVudEJpbmRpbmdDb250ZXh0KSlcbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgYmluZGluZ0NvbnRleHQ6IGJpbmRpbmdDb250ZXh0LFxuICAgIG92ZXJyaWRlQ29udGV4dDogY3JlYXRlT3ZlcnJpZGVDb250ZXh0KGJpbmRpbmdDb250ZXh0KVxuICB9O1xufVxuXG52YXIgc2xvdE5hbWVzID0gW107XG52YXIgdmVyc2lvblNsb3ROYW1lcyA9IFtdO1xudmFyIGxhc3RTbG90ID0gLTE7XG5mdW5jdGlvbiBlbnN1cmVFbm91Z2hTbG90TmFtZXMoY3VycmVudFNsb3QpIHtcbiAgaWYgKGN1cnJlbnRTbG90ID09PSBsYXN0U2xvdCkge1xuICAgIGxhc3RTbG90ICs9IDU7XG4gICAgdmFyIGlpID0gc2xvdE5hbWVzLmxlbmd0aCA9IHZlcnNpb25TbG90TmFtZXMubGVuZ3RoID0gbGFzdFNsb3QgKyAxO1xuICAgIGZvciAodmFyIGkgPSBjdXJyZW50U2xvdCArIDE7IGkgPCBpaTsgKytpKSB7XG4gICAgICBzbG90TmFtZXNbaV0gPSAnX29ic2VydmVyJyArIGk7XG4gICAgICB2ZXJzaW9uU2xvdE5hbWVzW2ldID0gJ19vYnNlcnZlclZlcnNpb24nICsgaTtcbiAgICB9XG4gIH1cbn1cbmVuc3VyZUVub3VnaFNsb3ROYW1lcygtMSk7XG5cbmZ1bmN0aW9uIGFkZE9ic2VydmVyKG9ic2VydmVyKSB7XG4gIHZhciBvYnNlcnZlclNsb3RzID0gdGhpcy5fb2JzZXJ2ZXJTbG90cyA9PT0gdW5kZWZpbmVkID8gMCA6IHRoaXMuX29ic2VydmVyU2xvdHM7XG4gIHZhciBpID0gb2JzZXJ2ZXJTbG90cztcbiAgd2hpbGUgKGktLSAmJiB0aGlzW3Nsb3ROYW1lc1tpXV0gIT09IG9ic2VydmVyKSB7fVxuXG4gIGlmIChpID09PSAtMSkge1xuICAgIGkgPSAwO1xuICAgIHdoaWxlICh0aGlzW3Nsb3ROYW1lc1tpXV0pIHtcbiAgICAgIGkrKztcbiAgICB9XG4gICAgdGhpc1tzbG90TmFtZXNbaV1dID0gb2JzZXJ2ZXI7XG4gICAgb2JzZXJ2ZXIuc3Vic2NyaWJlKHNvdXJjZUNvbnRleHQsIHRoaXMpO1xuXG4gICAgaWYgKGkgPT09IG9ic2VydmVyU2xvdHMpIHtcbiAgICAgIHRoaXMuX29ic2VydmVyU2xvdHMgPSBpICsgMTtcbiAgICB9XG4gIH1cblxuICBpZiAodGhpcy5fdmVyc2lvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fdmVyc2lvbiA9IDA7XG4gIH1cbiAgdGhpc1t2ZXJzaW9uU2xvdE5hbWVzW2ldXSA9IHRoaXMuX3ZlcnNpb247XG4gIGVuc3VyZUVub3VnaFNsb3ROYW1lcyhpKTtcbn1cblxuZnVuY3Rpb24gb2JzZXJ2ZVByb3BlcnR5KG9iaiwgcHJvcGVydHlOYW1lKSB7XG4gIHZhciBvYnNlcnZlciA9IHRoaXMub2JzZXJ2ZXJMb2NhdG9yLmdldE9ic2VydmVyKG9iaiwgcHJvcGVydHlOYW1lKTtcbiAgYWRkT2JzZXJ2ZXIuY2FsbCh0aGlzLCBvYnNlcnZlcik7XG59XG5cbmZ1bmN0aW9uIG9ic2VydmVBcnJheShhcnJheSkge1xuICB2YXIgb2JzZXJ2ZXIgPSB0aGlzLm9ic2VydmVyTG9jYXRvci5nZXRBcnJheU9ic2VydmVyKGFycmF5KTtcbiAgYWRkT2JzZXJ2ZXIuY2FsbCh0aGlzLCBvYnNlcnZlcik7XG59XG5cbmZ1bmN0aW9uIHVub2JzZXJ2ZShhbGwpIHtcbiAgdmFyIGkgPSB0aGlzLl9vYnNlcnZlclNsb3RzO1xuICB3aGlsZSAoaS0tKSB7XG4gICAgaWYgKGFsbCB8fCB0aGlzW3ZlcnNpb25TbG90TmFtZXNbaV1dICE9PSB0aGlzLl92ZXJzaW9uKSB7XG4gICAgICB2YXIgb2JzZXJ2ZXIgPSB0aGlzW3Nsb3ROYW1lc1tpXV07XG4gICAgICB0aGlzW3Nsb3ROYW1lc1tpXV0gPSBudWxsO1xuICAgICAgaWYgKG9ic2VydmVyKSB7XG4gICAgICAgIG9ic2VydmVyLnVuc3Vic2NyaWJlKHNvdXJjZUNvbnRleHQsIHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29ubmVjdGFibGUoKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgdGFyZ2V0LnByb3RvdHlwZS5vYnNlcnZlUHJvcGVydHkgPSBvYnNlcnZlUHJvcGVydHk7XG4gICAgdGFyZ2V0LnByb3RvdHlwZS5vYnNlcnZlQXJyYXkgPSBvYnNlcnZlQXJyYXk7XG4gICAgdGFyZ2V0LnByb3RvdHlwZS51bm9ic2VydmUgPSB1bm9ic2VydmU7XG4gICAgdGFyZ2V0LnByb3RvdHlwZS5hZGRPYnNlcnZlciA9IGFkZE9ic2VydmVyO1xuICB9O1xufVxuXG52YXIgcXVldWUgPSBbXTtcbnZhciBxdWV1ZWQgPSB7fTtcbnZhciBuZXh0SWQgPSAwO1xudmFyIG1pbmltdW1JbW1lZGlhdGUgPSAxMDA7XG52YXIgZnJhbWVCdWRnZXQgPSAxNTtcblxudmFyIGlzRmx1c2hSZXF1ZXN0ZWQgPSBmYWxzZTtcbnZhciBpbW1lZGlhdGUgPSAwO1xuXG5mdW5jdGlvbiBmbHVzaChhbmltYXRpb25GcmFtZVN0YXJ0KSB7XG4gIHZhciBsZW5ndGggPSBxdWV1ZS5sZW5ndGg7XG4gIHZhciBpID0gMDtcbiAgd2hpbGUgKGkgPCBsZW5ndGgpIHtcbiAgICB2YXIgYmluZGluZyA9IHF1ZXVlW2ldO1xuICAgIHF1ZXVlZFtiaW5kaW5nLl9fY29ubmVjdFF1ZXVlSWRdID0gZmFsc2U7XG4gICAgYmluZGluZy5jb25uZWN0KHRydWUpO1xuICAgIGkrKztcblxuICAgIGlmIChpICUgMTAwID09PSAwICYmIFBMQVRGT1JNLnBlcmZvcm1hbmNlLm5vdygpIC0gYW5pbWF0aW9uRnJhbWVTdGFydCA+IGZyYW1lQnVkZ2V0KSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcXVldWUuc3BsaWNlKDAsIGkpO1xuXG4gIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICBQTEFURk9STS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZmx1c2gpO1xuICB9IGVsc2Uge1xuICAgIGlzRmx1c2hSZXF1ZXN0ZWQgPSBmYWxzZTtcbiAgICBpbW1lZGlhdGUgPSAwO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnF1ZXVlQmluZGluZ0Nvbm5lY3QoYmluZGluZykge1xuICBpZiAoaW1tZWRpYXRlIDwgbWluaW11bUltbWVkaWF0ZSkge1xuICAgIGltbWVkaWF0ZSsrO1xuICAgIGJpbmRpbmcuY29ubmVjdChmYWxzZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGlkID0gYmluZGluZy5fX2Nvbm5lY3RRdWV1ZUlkO1xuICAgIGlmIChpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZCA9IG5leHRJZDtcbiAgICAgIG5leHRJZCsrO1xuICAgICAgYmluZGluZy5fX2Nvbm5lY3RRdWV1ZUlkID0gaWQ7XG4gICAgfVxuXG4gICAgaWYgKCFxdWV1ZWRbaWRdKSB7XG4gICAgICBxdWV1ZS5wdXNoKGJpbmRpbmcpO1xuICAgICAgcXVldWVkW2lkXSA9IHRydWU7XG4gICAgfVxuICB9XG4gIGlmICghaXNGbHVzaFJlcXVlc3RlZCkge1xuICAgIGlzRmx1c2hSZXF1ZXN0ZWQgPSB0cnVlO1xuICAgIFBMQVRGT1JNLnJlcXVlc3RBbmltYXRpb25GcmFtZShmbHVzaCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldENvbm5lY3RRdWV1ZVRocmVzaG9sZCh2YWx1ZSkge1xuICBtaW5pbXVtSW1tZWRpYXRlID0gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmFibGVDb25uZWN0UXVldWUoKSB7XG4gIHNldENvbm5lY3RRdWV1ZVRocmVzaG9sZCgxMDApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGlzYWJsZUNvbm5lY3RRdWV1ZSgpIHtcbiAgc2V0Q29ubmVjdFF1ZXVlVGhyZXNob2xkKE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbm5lY3RRdWV1ZVNpemUoKSB7XG4gIHJldHVybiBxdWV1ZS5sZW5ndGg7XG59XG5cbmZ1bmN0aW9uIGFkZFN1YnNjcmliZXIoY29udGV4dCwgY2FsbGFibGUpIHtcbiAgaWYgKHRoaXMuaGFzU3Vic2NyaWJlcihjb250ZXh0LCBjYWxsYWJsZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKCF0aGlzLl9jb250ZXh0MCkge1xuICAgIHRoaXMuX2NvbnRleHQwID0gY29udGV4dDtcbiAgICB0aGlzLl9jYWxsYWJsZTAgPSBjYWxsYWJsZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoIXRoaXMuX2NvbnRleHQxKSB7XG4gICAgdGhpcy5fY29udGV4dDEgPSBjb250ZXh0O1xuICAgIHRoaXMuX2NhbGxhYmxlMSA9IGNhbGxhYmxlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmICghdGhpcy5fY29udGV4dDIpIHtcbiAgICB0aGlzLl9jb250ZXh0MiA9IGNvbnRleHQ7XG4gICAgdGhpcy5fY2FsbGFibGUyID0gY2FsbGFibGU7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKCF0aGlzLl9jb250ZXh0c1Jlc3QpIHtcbiAgICB0aGlzLl9jb250ZXh0c1Jlc3QgPSBbY29udGV4dF07XG4gICAgdGhpcy5fY2FsbGFibGVzUmVzdCA9IFtjYWxsYWJsZV07XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdGhpcy5fY29udGV4dHNSZXN0LnB1c2goY29udGV4dCk7XG4gIHRoaXMuX2NhbGxhYmxlc1Jlc3QucHVzaChjYWxsYWJsZSk7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiByZW1vdmVTdWJzY3JpYmVyKGNvbnRleHQsIGNhbGxhYmxlKSB7XG4gIGlmICh0aGlzLl9jb250ZXh0MCA9PT0gY29udGV4dCAmJiB0aGlzLl9jYWxsYWJsZTAgPT09IGNhbGxhYmxlKSB7XG4gICAgdGhpcy5fY29udGV4dDAgPSBudWxsO1xuICAgIHRoaXMuX2NhbGxhYmxlMCA9IG51bGw7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHRoaXMuX2NvbnRleHQxID09PSBjb250ZXh0ICYmIHRoaXMuX2NhbGxhYmxlMSA9PT0gY2FsbGFibGUpIHtcbiAgICB0aGlzLl9jb250ZXh0MSA9IG51bGw7XG4gICAgdGhpcy5fY2FsbGFibGUxID0gbnVsbDtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodGhpcy5fY29udGV4dDIgPT09IGNvbnRleHQgJiYgdGhpcy5fY2FsbGFibGUyID09PSBjYWxsYWJsZSkge1xuICAgIHRoaXMuX2NvbnRleHQyID0gbnVsbDtcbiAgICB0aGlzLl9jYWxsYWJsZTIgPSBudWxsO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHZhciBjYWxsYWJsZXMgPSB0aGlzLl9jYWxsYWJsZXNSZXN0O1xuICBpZiAoY2FsbGFibGVzID09PSB1bmRlZmluZWQgfHwgY2FsbGFibGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgY29udGV4dHMgPSB0aGlzLl9jb250ZXh0c1Jlc3Q7XG4gIHZhciBpID0gMDtcbiAgd2hpbGUgKCEoY2FsbGFibGVzW2ldID09PSBjYWxsYWJsZSAmJiBjb250ZXh0c1tpXSA9PT0gY29udGV4dCkgJiYgY2FsbGFibGVzLmxlbmd0aCA+IGkpIHtcbiAgICBpKys7XG4gIH1cbiAgaWYgKGkgPj0gY2FsbGFibGVzLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb250ZXh0cy5zcGxpY2UoaSwgMSk7XG4gIGNhbGxhYmxlcy5zcGxpY2UoaSwgMSk7XG4gIHJldHVybiB0cnVlO1xufVxuXG52YXIgYXJyYXlQb29sMSA9IFtdO1xudmFyIGFycmF5UG9vbDIgPSBbXTtcbnZhciBwb29sVXRpbGl6YXRpb24gPSBbXTtcblxuZnVuY3Rpb24gY2FsbFN1YnNjcmliZXJzKG5ld1ZhbHVlLCBvbGRWYWx1ZSkge1xuICB2YXIgY29udGV4dDAgPSB0aGlzLl9jb250ZXh0MDtcbiAgdmFyIGNhbGxhYmxlMCA9IHRoaXMuX2NhbGxhYmxlMDtcbiAgdmFyIGNvbnRleHQxID0gdGhpcy5fY29udGV4dDE7XG4gIHZhciBjYWxsYWJsZTEgPSB0aGlzLl9jYWxsYWJsZTE7XG4gIHZhciBjb250ZXh0MiA9IHRoaXMuX2NvbnRleHQyO1xuICB2YXIgY2FsbGFibGUyID0gdGhpcy5fY2FsbGFibGUyO1xuICB2YXIgbGVuZ3RoID0gdGhpcy5fY29udGV4dHNSZXN0ID8gdGhpcy5fY29udGV4dHNSZXN0Lmxlbmd0aCA6IDA7XG4gIHZhciBjb250ZXh0c1Jlc3QgPSB2b2lkIDA7XG4gIHZhciBjYWxsYWJsZXNSZXN0ID0gdm9pZCAwO1xuICB2YXIgcG9vbEluZGV4ID0gdm9pZCAwO1xuICB2YXIgaSA9IHZvaWQgMDtcbiAgaWYgKGxlbmd0aCkge1xuICAgIHBvb2xJbmRleCA9IHBvb2xVdGlsaXphdGlvbi5sZW5ndGg7XG4gICAgd2hpbGUgKHBvb2xJbmRleC0tICYmIHBvb2xVdGlsaXphdGlvbltwb29sSW5kZXhdKSB7fVxuICAgIGlmIChwb29sSW5kZXggPCAwKSB7XG4gICAgICBwb29sSW5kZXggPSBwb29sVXRpbGl6YXRpb24ubGVuZ3RoO1xuICAgICAgY29udGV4dHNSZXN0ID0gW107XG4gICAgICBjYWxsYWJsZXNSZXN0ID0gW107XG4gICAgICBwb29sVXRpbGl6YXRpb24ucHVzaCh0cnVlKTtcbiAgICAgIGFycmF5UG9vbDEucHVzaChjb250ZXh0c1Jlc3QpO1xuICAgICAgYXJyYXlQb29sMi5wdXNoKGNhbGxhYmxlc1Jlc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwb29sVXRpbGl6YXRpb25bcG9vbEluZGV4XSA9IHRydWU7XG4gICAgICBjb250ZXh0c1Jlc3QgPSBhcnJheVBvb2wxW3Bvb2xJbmRleF07XG4gICAgICBjYWxsYWJsZXNSZXN0ID0gYXJyYXlQb29sMltwb29sSW5kZXhdO1xuICAgIH1cblxuICAgIGkgPSBsZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgY29udGV4dHNSZXN0W2ldID0gdGhpcy5fY29udGV4dHNSZXN0W2ldO1xuICAgICAgY2FsbGFibGVzUmVzdFtpXSA9IHRoaXMuX2NhbGxhYmxlc1Jlc3RbaV07XG4gICAgfVxuICB9XG5cbiAgaWYgKGNvbnRleHQwKSB7XG4gICAgaWYgKGNhbGxhYmxlMCkge1xuICAgICAgY2FsbGFibGUwLmNhbGwoY29udGV4dDAsIG5ld1ZhbHVlLCBvbGRWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQwKG5ld1ZhbHVlLCBvbGRWYWx1ZSk7XG4gICAgfVxuICB9XG4gIGlmIChjb250ZXh0MSkge1xuICAgIGlmIChjYWxsYWJsZTEpIHtcbiAgICAgIGNhbGxhYmxlMS5jYWxsKGNvbnRleHQxLCBuZXdWYWx1ZSwgb2xkVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0MShuZXdWYWx1ZSwgb2xkVmFsdWUpO1xuICAgIH1cbiAgfVxuICBpZiAoY29udGV4dDIpIHtcbiAgICBpZiAoY2FsbGFibGUyKSB7XG4gICAgICBjYWxsYWJsZTIuY2FsbChjb250ZXh0MiwgbmV3VmFsdWUsIG9sZFZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dDIobmV3VmFsdWUsIG9sZFZhbHVlKTtcbiAgICB9XG4gIH1cbiAgaWYgKGxlbmd0aCkge1xuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNhbGxhYmxlID0gY2FsbGFibGVzUmVzdFtpXTtcbiAgICAgIHZhciBjb250ZXh0ID0gY29udGV4dHNSZXN0W2ldO1xuICAgICAgaWYgKGNhbGxhYmxlKSB7XG4gICAgICAgIGNhbGxhYmxlLmNhbGwoY29udGV4dCwgbmV3VmFsdWUsIG9sZFZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHQobmV3VmFsdWUsIG9sZFZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGNvbnRleHRzUmVzdFtpXSA9IG51bGw7XG4gICAgICBjYWxsYWJsZXNSZXN0W2ldID0gbnVsbDtcbiAgICB9XG4gICAgcG9vbFV0aWxpemF0aW9uW3Bvb2xJbmRleF0gPSBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYXNTdWJzY3JpYmVycygpIHtcbiAgcmV0dXJuICEhKHRoaXMuX2NvbnRleHQwIHx8IHRoaXMuX2NvbnRleHQxIHx8IHRoaXMuX2NvbnRleHQyIHx8IHRoaXMuX2NvbnRleHRzUmVzdCAmJiB0aGlzLl9jb250ZXh0c1Jlc3QubGVuZ3RoKTtcbn1cblxuZnVuY3Rpb24gaGFzU3Vic2NyaWJlcihjb250ZXh0LCBjYWxsYWJsZSkge1xuICB2YXIgaGFzID0gdGhpcy5fY29udGV4dDAgPT09IGNvbnRleHQgJiYgdGhpcy5fY2FsbGFibGUwID09PSBjYWxsYWJsZSB8fCB0aGlzLl9jb250ZXh0MSA9PT0gY29udGV4dCAmJiB0aGlzLl9jYWxsYWJsZTEgPT09IGNhbGxhYmxlIHx8IHRoaXMuX2NvbnRleHQyID09PSBjb250ZXh0ICYmIHRoaXMuX2NhbGxhYmxlMiA9PT0gY2FsbGFibGU7XG4gIGlmIChoYXMpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgaW5kZXggPSB2b2lkIDA7XG4gIHZhciBjb250ZXh0cyA9IHRoaXMuX2NvbnRleHRzUmVzdDtcbiAgaWYgKCFjb250ZXh0cyB8fCAoaW5kZXggPSBjb250ZXh0cy5sZW5ndGgpID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBjYWxsYWJsZXMgPSB0aGlzLl9jYWxsYWJsZXNSZXN0O1xuICB3aGlsZSAoaW5kZXgtLSkge1xuICAgIGlmIChjb250ZXh0c1tpbmRleF0gPT09IGNvbnRleHQgJiYgY2FsbGFibGVzW2luZGV4XSA9PT0gY2FsbGFibGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJzY3JpYmVyQ29sbGVjdGlvbigpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICB0YXJnZXQucHJvdG90eXBlLmFkZFN1YnNjcmliZXIgPSBhZGRTdWJzY3JpYmVyO1xuICAgIHRhcmdldC5wcm90b3R5cGUucmVtb3ZlU3Vic2NyaWJlciA9IHJlbW92ZVN1YnNjcmliZXI7XG4gICAgdGFyZ2V0LnByb3RvdHlwZS5jYWxsU3Vic2NyaWJlcnMgPSBjYWxsU3Vic2NyaWJlcnM7XG4gICAgdGFyZ2V0LnByb3RvdHlwZS5oYXNTdWJzY3JpYmVycyA9IGhhc1N1YnNjcmliZXJzO1xuICAgIHRhcmdldC5wcm90b3R5cGUuaGFzU3Vic2NyaWJlciA9IGhhc1N1YnNjcmliZXI7XG4gIH07XG59XG5cbmV4cG9ydCB2YXIgRXhwcmVzc2lvbk9ic2VydmVyID0gKF9kZWMgPSBjb25uZWN0YWJsZSgpLCBfZGVjMiA9IHN1YnNjcmliZXJDb2xsZWN0aW9uKCksIF9kZWMoX2NsYXNzID0gX2RlYzIoX2NsYXNzID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBFeHByZXNzaW9uT2JzZXJ2ZXIoc2NvcGUsIGV4cHJlc3Npb24sIG9ic2VydmVyTG9jYXRvciwgbG9va3VwRnVuY3Rpb25zKSB7XG4gICAgXG5cbiAgICB0aGlzLnNjb3BlID0gc2NvcGU7XG4gICAgdGhpcy5leHByZXNzaW9uID0gZXhwcmVzc2lvbjtcbiAgICB0aGlzLm9ic2VydmVyTG9jYXRvciA9IG9ic2VydmVyTG9jYXRvcjtcbiAgICB0aGlzLmxvb2t1cEZ1bmN0aW9ucyA9IGxvb2t1cEZ1bmN0aW9ucztcbiAgfVxuXG4gIEV4cHJlc3Npb25PYnNlcnZlci5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbiBnZXRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKHRoaXMuc2NvcGUsIHRoaXMubG9va3VwRnVuY3Rpb25zKTtcbiAgfTtcblxuICBFeHByZXNzaW9uT2JzZXJ2ZXIucHJvdG90eXBlLnNldFZhbHVlID0gZnVuY3Rpb24gc2V0VmFsdWUobmV3VmFsdWUpIHtcbiAgICB0aGlzLmV4cHJlc3Npb24uYXNzaWduKHRoaXMuc2NvcGUsIG5ld1ZhbHVlKTtcbiAgfTtcblxuICBFeHByZXNzaW9uT2JzZXJ2ZXIucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uIHN1YnNjcmliZShjb250ZXh0LCBjYWxsYWJsZSkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBpZiAoIXRoaXMuaGFzU3Vic2NyaWJlcnMoKSkge1xuICAgICAgdGhpcy5vbGRWYWx1ZSA9IHRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZSh0aGlzLnNjb3BlLCB0aGlzLmxvb2t1cEZ1bmN0aW9ucyk7XG4gICAgICB0aGlzLmV4cHJlc3Npb24uY29ubmVjdCh0aGlzLCB0aGlzLnNjb3BlKTtcbiAgICB9XG4gICAgdGhpcy5hZGRTdWJzY3JpYmVyKGNvbnRleHQsIGNhbGxhYmxlKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSAmJiBjb250ZXh0IGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRpc3Bvc2U6IGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG4gICAgICAgICAgX3RoaXMudW5zdWJzY3JpYmUoY29udGV4dCwgY2FsbGFibGUpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfTtcblxuICBFeHByZXNzaW9uT2JzZXJ2ZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gdW5zdWJzY3JpYmUoY29udGV4dCwgY2FsbGFibGUpIHtcbiAgICBpZiAodGhpcy5yZW1vdmVTdWJzY3JpYmVyKGNvbnRleHQsIGNhbGxhYmxlKSAmJiAhdGhpcy5oYXNTdWJzY3JpYmVycygpKSB7XG4gICAgICB0aGlzLnVub2JzZXJ2ZSh0cnVlKTtcbiAgICAgIHRoaXMub2xkVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9O1xuXG4gIEV4cHJlc3Npb25PYnNlcnZlci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIGNhbGwoKSB7XG4gICAgdmFyIG5ld1ZhbHVlID0gdGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKHRoaXMuc2NvcGUsIHRoaXMubG9va3VwRnVuY3Rpb25zKTtcbiAgICB2YXIgb2xkVmFsdWUgPSB0aGlzLm9sZFZhbHVlO1xuICAgIGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUpIHtcbiAgICAgIHRoaXMub2xkVmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgIHRoaXMuY2FsbFN1YnNjcmliZXJzKG5ld1ZhbHVlLCBvbGRWYWx1ZSk7XG4gICAgfVxuICAgIHRoaXMuX3ZlcnNpb24rKztcbiAgICB0aGlzLmV4cHJlc3Npb24uY29ubmVjdCh0aGlzLCB0aGlzLnNjb3BlKTtcbiAgICB0aGlzLnVub2JzZXJ2ZShmYWxzZSk7XG4gIH07XG5cbiAgcmV0dXJuIEV4cHJlc3Npb25PYnNlcnZlcjtcbn0oKSkgfHwgX2NsYXNzKSB8fCBfY2xhc3MpO1xuXG5mdW5jdGlvbiBpc0luZGV4KHMpIHtcbiAgcmV0dXJuICtzID09PSBzID4+PiAwO1xufVxuXG5mdW5jdGlvbiB0b051bWJlcihzKSB7XG4gIHJldHVybiArcztcbn1cblxuZnVuY3Rpb24gbmV3U3BsaWNlKGluZGV4LCByZW1vdmVkLCBhZGRlZENvdW50KSB7XG4gIHJldHVybiB7XG4gICAgaW5kZXg6IGluZGV4LFxuICAgIHJlbW92ZWQ6IHJlbW92ZWQsXG4gICAgYWRkZWRDb3VudDogYWRkZWRDb3VudFxuICB9O1xufVxuXG52YXIgRURJVF9MRUFWRSA9IDA7XG52YXIgRURJVF9VUERBVEUgPSAxO1xudmFyIEVESVRfQUREID0gMjtcbnZhciBFRElUX0RFTEVURSA9IDM7XG5cbmZ1bmN0aW9uIEFycmF5U3BsaWNlKCkge31cblxuQXJyYXlTcGxpY2UucHJvdG90eXBlID0ge1xuICBjYWxjRWRpdERpc3RhbmNlczogZnVuY3Rpb24gY2FsY0VkaXREaXN0YW5jZXMoY3VycmVudCwgY3VycmVudFN0YXJ0LCBjdXJyZW50RW5kLCBvbGQsIG9sZFN0YXJ0LCBvbGRFbmQpIHtcbiAgICB2YXIgcm93Q291bnQgPSBvbGRFbmQgLSBvbGRTdGFydCArIDE7XG4gICAgdmFyIGNvbHVtbkNvdW50ID0gY3VycmVudEVuZCAtIGN1cnJlbnRTdGFydCArIDE7XG4gICAgdmFyIGRpc3RhbmNlcyA9IG5ldyBBcnJheShyb3dDb3VudCk7XG4gICAgdmFyIG5vcnRoID0gdm9pZCAwO1xuICAgIHZhciB3ZXN0ID0gdm9pZCAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dDb3VudDsgKytpKSB7XG4gICAgICBkaXN0YW5jZXNbaV0gPSBuZXcgQXJyYXkoY29sdW1uQ291bnQpO1xuICAgICAgZGlzdGFuY2VzW2ldWzBdID0gaTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbkNvdW50OyArK2opIHtcbiAgICAgIGRpc3RhbmNlc1swXVtqXSA9IGo7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IHJvd0NvdW50OyArK19pKSB7XG4gICAgICBmb3IgKHZhciBfaiA9IDE7IF9qIDwgY29sdW1uQ291bnQ7ICsrX2opIHtcbiAgICAgICAgaWYgKHRoaXMuZXF1YWxzKGN1cnJlbnRbY3VycmVudFN0YXJ0ICsgX2ogLSAxXSwgb2xkW29sZFN0YXJ0ICsgX2kgLSAxXSkpIHtcbiAgICAgICAgICBkaXN0YW5jZXNbX2ldW19qXSA9IGRpc3RhbmNlc1tfaSAtIDFdW19qIC0gMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbm9ydGggPSBkaXN0YW5jZXNbX2kgLSAxXVtfal0gKyAxO1xuICAgICAgICAgIHdlc3QgPSBkaXN0YW5jZXNbX2ldW19qIC0gMV0gKyAxO1xuICAgICAgICAgIGRpc3RhbmNlc1tfaV1bX2pdID0gbm9ydGggPCB3ZXN0ID8gbm9ydGggOiB3ZXN0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpc3RhbmNlcztcbiAgfSxcblxuICBzcGxpY2VPcGVyYXRpb25zRnJvbUVkaXREaXN0YW5jZXM6IGZ1bmN0aW9uIHNwbGljZU9wZXJhdGlvbnNGcm9tRWRpdERpc3RhbmNlcyhkaXN0YW5jZXMpIHtcbiAgICB2YXIgaSA9IGRpc3RhbmNlcy5sZW5ndGggLSAxO1xuICAgIHZhciBqID0gZGlzdGFuY2VzWzBdLmxlbmd0aCAtIDE7XG4gICAgdmFyIGN1cnJlbnQgPSBkaXN0YW5jZXNbaV1bal07XG4gICAgdmFyIGVkaXRzID0gW107XG4gICAgd2hpbGUgKGkgPiAwIHx8IGogPiAwKSB7XG4gICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICBlZGl0cy5wdXNoKEVESVRfQUREKTtcbiAgICAgICAgai0tO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChqID09PSAwKSB7XG4gICAgICAgIGVkaXRzLnB1c2goRURJVF9ERUxFVEUpO1xuICAgICAgICBpLS07XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdmFyIG5vcnRoV2VzdCA9IGRpc3RhbmNlc1tpIC0gMV1baiAtIDFdO1xuICAgICAgdmFyIHdlc3QgPSBkaXN0YW5jZXNbaSAtIDFdW2pdO1xuICAgICAgdmFyIG5vcnRoID0gZGlzdGFuY2VzW2ldW2ogLSAxXTtcblxuICAgICAgdmFyIG1pbiA9IHZvaWQgMDtcbiAgICAgIGlmICh3ZXN0IDwgbm9ydGgpIHtcbiAgICAgICAgbWluID0gd2VzdCA8IG5vcnRoV2VzdCA/IHdlc3QgOiBub3J0aFdlc3Q7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtaW4gPSBub3J0aCA8IG5vcnRoV2VzdCA/IG5vcnRoIDogbm9ydGhXZXN0O1xuICAgICAgfVxuXG4gICAgICBpZiAobWluID09PSBub3J0aFdlc3QpIHtcbiAgICAgICAgaWYgKG5vcnRoV2VzdCA9PT0gY3VycmVudCkge1xuICAgICAgICAgIGVkaXRzLnB1c2goRURJVF9MRUFWRSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZWRpdHMucHVzaChFRElUX1VQREFURSk7XG4gICAgICAgICAgY3VycmVudCA9IG5vcnRoV2VzdDtcbiAgICAgICAgfVxuICAgICAgICBpLS07XG4gICAgICAgIGotLTtcbiAgICAgIH0gZWxzZSBpZiAobWluID09PSB3ZXN0KSB7XG4gICAgICAgIGVkaXRzLnB1c2goRURJVF9ERUxFVEUpO1xuICAgICAgICBpLS07XG4gICAgICAgIGN1cnJlbnQgPSB3ZXN0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWRpdHMucHVzaChFRElUX0FERCk7XG4gICAgICAgIGotLTtcbiAgICAgICAgY3VycmVudCA9IG5vcnRoO1xuICAgICAgfVxuICAgIH1cblxuICAgIGVkaXRzLnJldmVyc2UoKTtcbiAgICByZXR1cm4gZWRpdHM7XG4gIH0sXG5cbiAgY2FsY1NwbGljZXM6IGZ1bmN0aW9uIGNhbGNTcGxpY2VzKGN1cnJlbnQsIGN1cnJlbnRTdGFydCwgY3VycmVudEVuZCwgb2xkLCBvbGRTdGFydCwgb2xkRW5kKSB7XG4gICAgdmFyIHByZWZpeENvdW50ID0gMDtcbiAgICB2YXIgc3VmZml4Q291bnQgPSAwO1xuXG4gICAgdmFyIG1pbkxlbmd0aCA9IE1hdGgubWluKGN1cnJlbnRFbmQgLSBjdXJyZW50U3RhcnQsIG9sZEVuZCAtIG9sZFN0YXJ0KTtcbiAgICBpZiAoY3VycmVudFN0YXJ0ID09PSAwICYmIG9sZFN0YXJ0ID09PSAwKSB7XG4gICAgICBwcmVmaXhDb3VudCA9IHRoaXMuc2hhcmVkUHJlZml4KGN1cnJlbnQsIG9sZCwgbWluTGVuZ3RoKTtcbiAgICB9XG5cbiAgICBpZiAoY3VycmVudEVuZCA9PT0gY3VycmVudC5sZW5ndGggJiYgb2xkRW5kID09PSBvbGQubGVuZ3RoKSB7XG4gICAgICBzdWZmaXhDb3VudCA9IHRoaXMuc2hhcmVkU3VmZml4KGN1cnJlbnQsIG9sZCwgbWluTGVuZ3RoIC0gcHJlZml4Q291bnQpO1xuICAgIH1cblxuICAgIGN1cnJlbnRTdGFydCArPSBwcmVmaXhDb3VudDtcbiAgICBvbGRTdGFydCArPSBwcmVmaXhDb3VudDtcbiAgICBjdXJyZW50RW5kIC09IHN1ZmZpeENvdW50O1xuICAgIG9sZEVuZCAtPSBzdWZmaXhDb3VudDtcblxuICAgIGlmIChjdXJyZW50RW5kIC0gY3VycmVudFN0YXJ0ID09PSAwICYmIG9sZEVuZCAtIG9sZFN0YXJ0ID09PSAwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRTdGFydCA9PT0gY3VycmVudEVuZCkge1xuICAgICAgdmFyIF9zcGxpY2UgPSBuZXdTcGxpY2UoY3VycmVudFN0YXJ0LCBbXSwgMCk7XG4gICAgICB3aGlsZSAob2xkU3RhcnQgPCBvbGRFbmQpIHtcbiAgICAgICAgX3NwbGljZS5yZW1vdmVkLnB1c2gob2xkW29sZFN0YXJ0KytdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFtfc3BsaWNlXTtcbiAgICB9IGVsc2UgaWYgKG9sZFN0YXJ0ID09PSBvbGRFbmQpIHtcbiAgICAgIHJldHVybiBbbmV3U3BsaWNlKGN1cnJlbnRTdGFydCwgW10sIGN1cnJlbnRFbmQgLSBjdXJyZW50U3RhcnQpXTtcbiAgICB9XG5cbiAgICB2YXIgb3BzID0gdGhpcy5zcGxpY2VPcGVyYXRpb25zRnJvbUVkaXREaXN0YW5jZXModGhpcy5jYWxjRWRpdERpc3RhbmNlcyhjdXJyZW50LCBjdXJyZW50U3RhcnQsIGN1cnJlbnRFbmQsIG9sZCwgb2xkU3RhcnQsIG9sZEVuZCkpO1xuXG4gICAgdmFyIHNwbGljZSA9IHVuZGVmaW5lZDtcbiAgICB2YXIgc3BsaWNlcyA9IFtdO1xuICAgIHZhciBpbmRleCA9IGN1cnJlbnRTdGFydDtcbiAgICB2YXIgb2xkSW5kZXggPSBvbGRTdGFydDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wcy5sZW5ndGg7ICsraSkge1xuICAgICAgc3dpdGNoIChvcHNbaV0pIHtcbiAgICAgICAgY2FzZSBFRElUX0xFQVZFOlxuICAgICAgICAgIGlmIChzcGxpY2UpIHtcbiAgICAgICAgICAgIHNwbGljZXMucHVzaChzcGxpY2UpO1xuICAgICAgICAgICAgc3BsaWNlID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgb2xkSW5kZXgrKztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFRElUX1VQREFURTpcbiAgICAgICAgICBpZiAoIXNwbGljZSkge1xuICAgICAgICAgICAgc3BsaWNlID0gbmV3U3BsaWNlKGluZGV4LCBbXSwgMCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3BsaWNlLmFkZGVkQ291bnQrKztcbiAgICAgICAgICBpbmRleCsrO1xuXG4gICAgICAgICAgc3BsaWNlLnJlbW92ZWQucHVzaChvbGRbb2xkSW5kZXhdKTtcbiAgICAgICAgICBvbGRJbmRleCsrO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVESVRfQUREOlxuICAgICAgICAgIGlmICghc3BsaWNlKSB7XG4gICAgICAgICAgICBzcGxpY2UgPSBuZXdTcGxpY2UoaW5kZXgsIFtdLCAwKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzcGxpY2UuYWRkZWRDb3VudCsrO1xuICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRURJVF9ERUxFVEU6XG4gICAgICAgICAgaWYgKCFzcGxpY2UpIHtcbiAgICAgICAgICAgIHNwbGljZSA9IG5ld1NwbGljZShpbmRleCwgW10sIDApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNwbGljZS5yZW1vdmVkLnB1c2gob2xkW29sZEluZGV4XSk7XG4gICAgICAgICAgb2xkSW5kZXgrKztcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3BsaWNlKSB7XG4gICAgICBzcGxpY2VzLnB1c2goc3BsaWNlKTtcbiAgICB9XG4gICAgcmV0dXJuIHNwbGljZXM7XG4gIH0sXG5cbiAgc2hhcmVkUHJlZml4OiBmdW5jdGlvbiBzaGFyZWRQcmVmaXgoY3VycmVudCwgb2xkLCBzZWFyY2hMZW5ndGgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlYXJjaExlbmd0aDsgKytpKSB7XG4gICAgICBpZiAoIXRoaXMuZXF1YWxzKGN1cnJlbnRbaV0sIG9sZFtpXSkpIHtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlYXJjaExlbmd0aDtcbiAgfSxcblxuICBzaGFyZWRTdWZmaXg6IGZ1bmN0aW9uIHNoYXJlZFN1ZmZpeChjdXJyZW50LCBvbGQsIHNlYXJjaExlbmd0aCkge1xuICAgIHZhciBpbmRleDEgPSBjdXJyZW50Lmxlbmd0aDtcbiAgICB2YXIgaW5kZXgyID0gb2xkLmxlbmd0aDtcbiAgICB2YXIgY291bnQgPSAwO1xuICAgIHdoaWxlIChjb3VudCA8IHNlYXJjaExlbmd0aCAmJiB0aGlzLmVxdWFscyhjdXJyZW50Wy0taW5kZXgxXSwgb2xkWy0taW5kZXgyXSkpIHtcbiAgICAgIGNvdW50Kys7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvdW50O1xuICB9LFxuXG4gIGNhbGN1bGF0ZVNwbGljZXM6IGZ1bmN0aW9uIGNhbGN1bGF0ZVNwbGljZXMoY3VycmVudCwgcHJldmlvdXMpIHtcbiAgICByZXR1cm4gdGhpcy5jYWxjU3BsaWNlcyhjdXJyZW50LCAwLCBjdXJyZW50Lmxlbmd0aCwgcHJldmlvdXMsIDAsIHByZXZpb3VzLmxlbmd0aCk7XG4gIH0sXG5cbiAgZXF1YWxzOiBmdW5jdGlvbiBlcXVhbHMoY3VycmVudFZhbHVlLCBwcmV2aW91c1ZhbHVlKSB7XG4gICAgcmV0dXJuIGN1cnJlbnRWYWx1ZSA9PT0gcHJldmlvdXNWYWx1ZTtcbiAgfVxufTtcblxudmFyIGFycmF5U3BsaWNlID0gbmV3IEFycmF5U3BsaWNlKCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxjU3BsaWNlcyhjdXJyZW50LCBjdXJyZW50U3RhcnQsIGN1cnJlbnRFbmQsIG9sZCwgb2xkU3RhcnQsIG9sZEVuZCkge1xuICByZXR1cm4gYXJyYXlTcGxpY2UuY2FsY1NwbGljZXMoY3VycmVudCwgY3VycmVudFN0YXJ0LCBjdXJyZW50RW5kLCBvbGQsIG9sZFN0YXJ0LCBvbGRFbmQpO1xufVxuXG5mdW5jdGlvbiBpbnRlcnNlY3Qoc3RhcnQxLCBlbmQxLCBzdGFydDIsIGVuZDIpIHtcbiAgaWYgKGVuZDEgPCBzdGFydDIgfHwgZW5kMiA8IHN0YXJ0MSkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIGlmIChlbmQxID09PSBzdGFydDIgfHwgZW5kMiA9PT0gc3RhcnQxKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBpZiAoc3RhcnQxIDwgc3RhcnQyKSB7XG4gICAgaWYgKGVuZDEgPCBlbmQyKSB7XG4gICAgICByZXR1cm4gZW5kMSAtIHN0YXJ0MjtcbiAgICB9XG5cbiAgICByZXR1cm4gZW5kMiAtIHN0YXJ0MjtcbiAgfVxuXG4gIGlmIChlbmQyIDwgZW5kMSkge1xuICAgIHJldHVybiBlbmQyIC0gc3RhcnQxO1xuICB9XG5cbiAgcmV0dXJuIGVuZDEgLSBzdGFydDE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZVNwbGljZShzcGxpY2VzLCBpbmRleCwgcmVtb3ZlZCwgYWRkZWRDb3VudCkge1xuICB2YXIgc3BsaWNlID0gbmV3U3BsaWNlKGluZGV4LCByZW1vdmVkLCBhZGRlZENvdW50KTtcblxuICB2YXIgaW5zZXJ0ZWQgPSBmYWxzZTtcbiAgdmFyIGluc2VydGlvbk9mZnNldCA9IDA7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGxpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBzcGxpY2VzW2ldO1xuICAgIGN1cnJlbnQuaW5kZXggKz0gaW5zZXJ0aW9uT2Zmc2V0O1xuXG4gICAgaWYgKGluc2VydGVkKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB2YXIgaW50ZXJzZWN0Q291bnQgPSBpbnRlcnNlY3Qoc3BsaWNlLmluZGV4LCBzcGxpY2UuaW5kZXggKyBzcGxpY2UucmVtb3ZlZC5sZW5ndGgsIGN1cnJlbnQuaW5kZXgsIGN1cnJlbnQuaW5kZXggKyBjdXJyZW50LmFkZGVkQ291bnQpO1xuXG4gICAgaWYgKGludGVyc2VjdENvdW50ID49IDApIHtcblxuICAgICAgc3BsaWNlcy5zcGxpY2UoaSwgMSk7XG4gICAgICBpLS07XG5cbiAgICAgIGluc2VydGlvbk9mZnNldCAtPSBjdXJyZW50LmFkZGVkQ291bnQgLSBjdXJyZW50LnJlbW92ZWQubGVuZ3RoO1xuXG4gICAgICBzcGxpY2UuYWRkZWRDb3VudCArPSBjdXJyZW50LmFkZGVkQ291bnQgLSBpbnRlcnNlY3RDb3VudDtcbiAgICAgIHZhciBkZWxldGVDb3VudCA9IHNwbGljZS5yZW1vdmVkLmxlbmd0aCArIGN1cnJlbnQucmVtb3ZlZC5sZW5ndGggLSBpbnRlcnNlY3RDb3VudDtcblxuICAgICAgaWYgKCFzcGxpY2UuYWRkZWRDb3VudCAmJiAhZGVsZXRlQ291bnQpIHtcbiAgICAgICAgaW5zZXJ0ZWQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGN1cnJlbnRSZW1vdmVkID0gY3VycmVudC5yZW1vdmVkO1xuXG4gICAgICAgIGlmIChzcGxpY2UuaW5kZXggPCBjdXJyZW50LmluZGV4KSB7XG4gICAgICAgICAgdmFyIHByZXBlbmQgPSBzcGxpY2UucmVtb3ZlZC5zbGljZSgwLCBjdXJyZW50LmluZGV4IC0gc3BsaWNlLmluZGV4KTtcbiAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShwcmVwZW5kLCBjdXJyZW50UmVtb3ZlZCk7XG4gICAgICAgICAgY3VycmVudFJlbW92ZWQgPSBwcmVwZW5kO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNwbGljZS5pbmRleCArIHNwbGljZS5yZW1vdmVkLmxlbmd0aCA+IGN1cnJlbnQuaW5kZXggKyBjdXJyZW50LmFkZGVkQ291bnQpIHtcbiAgICAgICAgICB2YXIgYXBwZW5kID0gc3BsaWNlLnJlbW92ZWQuc2xpY2UoY3VycmVudC5pbmRleCArIGN1cnJlbnQuYWRkZWRDb3VudCAtIHNwbGljZS5pbmRleCk7XG4gICAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoY3VycmVudFJlbW92ZWQsIGFwcGVuZCk7XG4gICAgICAgIH1cblxuICAgICAgICBzcGxpY2UucmVtb3ZlZCA9IGN1cnJlbnRSZW1vdmVkO1xuICAgICAgICBpZiAoY3VycmVudC5pbmRleCA8IHNwbGljZS5pbmRleCkge1xuICAgICAgICAgIHNwbGljZS5pbmRleCA9IGN1cnJlbnQuaW5kZXg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHNwbGljZS5pbmRleCA8IGN1cnJlbnQuaW5kZXgpIHtcblxuICAgICAgaW5zZXJ0ZWQgPSB0cnVlO1xuXG4gICAgICBzcGxpY2VzLnNwbGljZShpLCAwLCBzcGxpY2UpO1xuICAgICAgaSsrO1xuXG4gICAgICB2YXIgb2Zmc2V0ID0gc3BsaWNlLmFkZGVkQ291bnQgLSBzcGxpY2UucmVtb3ZlZC5sZW5ndGg7XG4gICAgICBjdXJyZW50LmluZGV4ICs9IG9mZnNldDtcbiAgICAgIGluc2VydGlvbk9mZnNldCArPSBvZmZzZXQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFpbnNlcnRlZCkge1xuICAgIHNwbGljZXMucHVzaChzcGxpY2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUluaXRpYWxTcGxpY2VzKGFycmF5LCBjaGFuZ2VSZWNvcmRzKSB7XG4gIHZhciBzcGxpY2VzID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFuZ2VSZWNvcmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHJlY29yZCA9IGNoYW5nZVJlY29yZHNbaV07XG4gICAgc3dpdGNoIChyZWNvcmQudHlwZSkge1xuICAgICAgY2FzZSAnc3BsaWNlJzpcbiAgICAgICAgbWVyZ2VTcGxpY2Uoc3BsaWNlcywgcmVjb3JkLmluZGV4LCByZWNvcmQucmVtb3ZlZC5zbGljZSgpLCByZWNvcmQuYWRkZWRDb3VudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYWRkJzpcbiAgICAgIGNhc2UgJ3VwZGF0ZSc6XG4gICAgICBjYXNlICdkZWxldGUnOlxuICAgICAgICBpZiAoIWlzSW5kZXgocmVjb3JkLm5hbWUpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaW5kZXggPSB0b051bWJlcihyZWNvcmQubmFtZSk7XG4gICAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1lcmdlU3BsaWNlKHNwbGljZXMsIGluZGV4LCBbcmVjb3JkLm9sZFZhbHVlXSwgcmVjb3JkLnR5cGUgPT09ICdkZWxldGUnID8gMCA6IDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuZXhwZWN0ZWQgcmVjb3JkIHR5cGU6ICcgKyBKU09OLnN0cmluZ2lmeShyZWNvcmQpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNwbGljZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9qZWN0QXJyYXlTcGxpY2VzKGFycmF5LCBjaGFuZ2VSZWNvcmRzKSB7XG4gIHZhciBzcGxpY2VzID0gW107XG5cbiAgY3JlYXRlSW5pdGlhbFNwbGljZXMoYXJyYXksIGNoYW5nZVJlY29yZHMpLmZvckVhY2goZnVuY3Rpb24gKHNwbGljZSkge1xuICAgIGlmIChzcGxpY2UuYWRkZWRDb3VudCA9PT0gMSAmJiBzcGxpY2UucmVtb3ZlZC5sZW5ndGggPT09IDEpIHtcbiAgICAgIGlmIChzcGxpY2UucmVtb3ZlZFswXSAhPT0gYXJyYXlbc3BsaWNlLmluZGV4XSkge1xuICAgICAgICBzcGxpY2VzLnB1c2goc3BsaWNlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNwbGljZXMgPSBzcGxpY2VzLmNvbmNhdChjYWxjU3BsaWNlcyhhcnJheSwgc3BsaWNlLmluZGV4LCBzcGxpY2UuaW5kZXggKyBzcGxpY2UuYWRkZWRDb3VudCwgc3BsaWNlLnJlbW92ZWQsIDAsIHNwbGljZS5yZW1vdmVkLmxlbmd0aCkpO1xuICB9KTtcblxuICByZXR1cm4gc3BsaWNlcztcbn1cblxuZnVuY3Rpb24gbmV3UmVjb3JkKHR5cGUsIG9iamVjdCwga2V5LCBvbGRWYWx1ZSkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IHR5cGUsXG4gICAgb2JqZWN0OiBvYmplY3QsXG4gICAga2V5OiBrZXksXG4gICAgb2xkVmFsdWU6IG9sZFZhbHVlXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGFuZ2VSZWNvcmRzKG1hcCkge1xuICB2YXIgZW50cmllcyA9IG5ldyBBcnJheShtYXAuc2l6ZSk7XG4gIHZhciBrZXlzID0gbWFwLmtleXMoKTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgaXRlbSA9IHZvaWQgMDtcblxuICB3aGlsZSAoaXRlbSA9IGtleXMubmV4dCgpKSB7XG4gICAgaWYgKGl0ZW0uZG9uZSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgZW50cmllc1tpXSA9IG5ld1JlY29yZCgnYWRkZWQnLCBtYXAsIGl0ZW0udmFsdWUpO1xuICAgIGkrKztcbiAgfVxuXG4gIHJldHVybiBlbnRyaWVzO1xufVxuXG5leHBvcnQgdmFyIE1vZGlmeUNvbGxlY3Rpb25PYnNlcnZlciA9IChfZGVjMyA9IHN1YnNjcmliZXJDb2xsZWN0aW9uKCksIF9kZWMzKF9jbGFzczIgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIE1vZGlmeUNvbGxlY3Rpb25PYnNlcnZlcih0YXNrUXVldWUsIGNvbGxlY3Rpb24pIHtcbiAgICBcblxuICAgIHRoaXMudGFza1F1ZXVlID0gdGFza1F1ZXVlO1xuICAgIHRoaXMucXVldWVkID0gZmFsc2U7XG4gICAgdGhpcy5jaGFuZ2VSZWNvcmRzID0gbnVsbDtcbiAgICB0aGlzLm9sZENvbGxlY3Rpb24gPSBudWxsO1xuICAgIHRoaXMuY29sbGVjdGlvbiA9IGNvbGxlY3Rpb247XG4gICAgdGhpcy5sZW5ndGhQcm9wZXJ0eU5hbWUgPSBjb2xsZWN0aW9uIGluc3RhbmNlb2YgTWFwIHx8IGNvbGxlY3Rpb24gaW5zdGFuY2VvZiBTZXQgPyAnc2l6ZScgOiAnbGVuZ3RoJztcbiAgfVxuXG4gIE1vZGlmeUNvbGxlY3Rpb25PYnNlcnZlci5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24gc3Vic2NyaWJlKGNvbnRleHQsIGNhbGxhYmxlKSB7XG4gICAgdGhpcy5hZGRTdWJzY3JpYmVyKGNvbnRleHQsIGNhbGxhYmxlKTtcbiAgfTtcblxuICBNb2RpZnlDb2xsZWN0aW9uT2JzZXJ2ZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gdW5zdWJzY3JpYmUoY29udGV4dCwgY2FsbGFibGUpIHtcbiAgICB0aGlzLnJlbW92ZVN1YnNjcmliZXIoY29udGV4dCwgY2FsbGFibGUpO1xuICB9O1xuXG4gIE1vZGlmeUNvbGxlY3Rpb25PYnNlcnZlci5wcm90b3R5cGUuYWRkQ2hhbmdlUmVjb3JkID0gZnVuY3Rpb24gYWRkQ2hhbmdlUmVjb3JkKGNoYW5nZVJlY29yZCkge1xuICAgIGlmICghdGhpcy5oYXNTdWJzY3JpYmVycygpICYmICF0aGlzLmxlbmd0aE9ic2VydmVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZVJlY29yZC50eXBlID09PSAnc3BsaWNlJykge1xuICAgICAgdmFyIGluZGV4ID0gY2hhbmdlUmVjb3JkLmluZGV4O1xuICAgICAgdmFyIGFycmF5TGVuZ3RoID0gY2hhbmdlUmVjb3JkLm9iamVjdC5sZW5ndGg7XG4gICAgICBpZiAoaW5kZXggPiBhcnJheUxlbmd0aCkge1xuICAgICAgICBpbmRleCA9IGFycmF5TGVuZ3RoIC0gY2hhbmdlUmVjb3JkLmFkZGVkQ291bnQ7XG4gICAgICB9IGVsc2UgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICBpbmRleCA9IGFycmF5TGVuZ3RoICsgY2hhbmdlUmVjb3JkLnJlbW92ZWQubGVuZ3RoICsgaW5kZXggLSBjaGFuZ2VSZWNvcmQuYWRkZWRDb3VudDtcbiAgICAgIH1cbiAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgaW5kZXggPSAwO1xuICAgICAgfVxuICAgICAgY2hhbmdlUmVjb3JkLmluZGV4ID0gaW5kZXg7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2hhbmdlUmVjb3JkcyA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5jaGFuZ2VSZWNvcmRzID0gW2NoYW5nZVJlY29yZF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2hhbmdlUmVjb3Jkcy5wdXNoKGNoYW5nZVJlY29yZCk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnF1ZXVlZCkge1xuICAgICAgdGhpcy5xdWV1ZWQgPSB0cnVlO1xuICAgICAgdGhpcy50YXNrUXVldWUucXVldWVNaWNyb1Rhc2sodGhpcyk7XG4gICAgfVxuICB9O1xuXG4gIE1vZGlmeUNvbGxlY3Rpb25PYnNlcnZlci5wcm90b3R5cGUuZmx1c2hDaGFuZ2VSZWNvcmRzID0gZnVuY3Rpb24gZmx1c2hDaGFuZ2VSZWNvcmRzKCkge1xuICAgIGlmICh0aGlzLmNoYW5nZVJlY29yZHMgJiYgdGhpcy5jaGFuZ2VSZWNvcmRzLmxlbmd0aCB8fCB0aGlzLm9sZENvbGxlY3Rpb24pIHtcbiAgICAgIHRoaXMuY2FsbCgpO1xuICAgIH1cbiAgfTtcblxuICBNb2RpZnlDb2xsZWN0aW9uT2JzZXJ2ZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQob2xkQ29sbGVjdGlvbikge1xuICAgIHRoaXMub2xkQ29sbGVjdGlvbiA9IG9sZENvbGxlY3Rpb247XG5cbiAgICBpZiAodGhpcy5oYXNTdWJzY3JpYmVycygpICYmICF0aGlzLnF1ZXVlZCkge1xuICAgICAgdGhpcy5xdWV1ZWQgPSB0cnVlO1xuICAgICAgdGhpcy50YXNrUXVldWUucXVldWVNaWNyb1Rhc2sodGhpcyk7XG4gICAgfVxuICB9O1xuXG4gIE1vZGlmeUNvbGxlY3Rpb25PYnNlcnZlci5wcm90b3R5cGUuZ2V0TGVuZ3RoT2JzZXJ2ZXIgPSBmdW5jdGlvbiBnZXRMZW5ndGhPYnNlcnZlcigpIHtcbiAgICByZXR1cm4gdGhpcy5sZW5ndGhPYnNlcnZlciB8fCAodGhpcy5sZW5ndGhPYnNlcnZlciA9IG5ldyBDb2xsZWN0aW9uTGVuZ3RoT2JzZXJ2ZXIodGhpcy5jb2xsZWN0aW9uKSk7XG4gIH07XG5cbiAgTW9kaWZ5Q29sbGVjdGlvbk9ic2VydmVyLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gY2FsbCgpIHtcbiAgICB2YXIgY2hhbmdlUmVjb3JkcyA9IHRoaXMuY2hhbmdlUmVjb3JkcztcbiAgICB2YXIgb2xkQ29sbGVjdGlvbiA9IHRoaXMub2xkQ29sbGVjdGlvbjtcbiAgICB2YXIgcmVjb3JkcyA9IHZvaWQgMDtcblxuICAgIHRoaXMucXVldWVkID0gZmFsc2U7XG4gICAgdGhpcy5jaGFuZ2VSZWNvcmRzID0gW107XG4gICAgdGhpcy5vbGRDb2xsZWN0aW9uID0gbnVsbDtcblxuICAgIGlmICh0aGlzLmhhc1N1YnNjcmliZXJzKCkpIHtcbiAgICAgIGlmIChvbGRDb2xsZWN0aW9uKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbGxlY3Rpb24gaW5zdGFuY2VvZiBNYXAgfHwgdGhpcy5jb2xsZWN0aW9uIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgICAgICAgcmVjb3JkcyA9IGdldENoYW5nZVJlY29yZHMob2xkQ29sbGVjdGlvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVjb3JkcyA9IGNhbGNTcGxpY2VzKHRoaXMuY29sbGVjdGlvbiwgMCwgdGhpcy5jb2xsZWN0aW9uLmxlbmd0aCwgb2xkQ29sbGVjdGlvbiwgMCwgb2xkQ29sbGVjdGlvbi5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5jb2xsZWN0aW9uIGluc3RhbmNlb2YgTWFwIHx8IHRoaXMuY29sbGVjdGlvbiBpbnN0YW5jZW9mIFNldCkge1xuICAgICAgICAgIHJlY29yZHMgPSBjaGFuZ2VSZWNvcmRzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlY29yZHMgPSBwcm9qZWN0QXJyYXlTcGxpY2VzKHRoaXMuY29sbGVjdGlvbiwgY2hhbmdlUmVjb3Jkcyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5jYWxsU3Vic2NyaWJlcnMocmVjb3Jkcyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubGVuZ3RoT2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMubGVuZ3RoT2JzZXJ2ZXIuY2FsbCh0aGlzLmNvbGxlY3Rpb25bdGhpcy5sZW5ndGhQcm9wZXJ0eU5hbWVdKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIE1vZGlmeUNvbGxlY3Rpb25PYnNlcnZlcjtcbn0oKSkgfHwgX2NsYXNzMik7XG5cbmV4cG9ydCB2YXIgQ29sbGVjdGlvbkxlbmd0aE9ic2VydmVyID0gKF9kZWM0ID0gc3Vic2NyaWJlckNvbGxlY3Rpb24oKSwgX2RlYzQoX2NsYXNzMyA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQ29sbGVjdGlvbkxlbmd0aE9ic2VydmVyKGNvbGxlY3Rpb24pIHtcbiAgICBcblxuICAgIHRoaXMuY29sbGVjdGlvbiA9IGNvbGxlY3Rpb247XG4gICAgdGhpcy5sZW5ndGhQcm9wZXJ0eU5hbWUgPSBjb2xsZWN0aW9uIGluc3RhbmNlb2YgTWFwIHx8IGNvbGxlY3Rpb24gaW5zdGFuY2VvZiBTZXQgPyAnc2l6ZScgOiAnbGVuZ3RoJztcbiAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGNvbGxlY3Rpb25bdGhpcy5sZW5ndGhQcm9wZXJ0eU5hbWVdO1xuICB9XG5cbiAgQ29sbGVjdGlvbkxlbmd0aE9ic2VydmVyLnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uIGdldFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb25bdGhpcy5sZW5ndGhQcm9wZXJ0eU5hbWVdO1xuICB9O1xuXG4gIENvbGxlY3Rpb25MZW5ndGhPYnNlcnZlci5wcm90b3R5cGUuc2V0VmFsdWUgPSBmdW5jdGlvbiBzZXRWYWx1ZShuZXdWYWx1ZSkge1xuICAgIHRoaXMuY29sbGVjdGlvblt0aGlzLmxlbmd0aFByb3BlcnR5TmFtZV0gPSBuZXdWYWx1ZTtcbiAgfTtcblxuICBDb2xsZWN0aW9uTGVuZ3RoT2JzZXJ2ZXIucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uIHN1YnNjcmliZShjb250ZXh0LCBjYWxsYWJsZSkge1xuICAgIHRoaXMuYWRkU3Vic2NyaWJlcihjb250ZXh0LCBjYWxsYWJsZSk7XG4gIH07XG5cbiAgQ29sbGVjdGlvbkxlbmd0aE9ic2VydmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uIHVuc3Vic2NyaWJlKGNvbnRleHQsIGNhbGxhYmxlKSB7XG4gICAgdGhpcy5yZW1vdmVTdWJzY3JpYmVyKGNvbnRleHQsIGNhbGxhYmxlKTtcbiAgfTtcblxuICBDb2xsZWN0aW9uTGVuZ3RoT2JzZXJ2ZXIucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiBjYWxsKG5ld1ZhbHVlKSB7XG4gICAgdmFyIG9sZFZhbHVlID0gdGhpcy5jdXJyZW50VmFsdWU7XG4gICAgdGhpcy5jYWxsU3Vic2NyaWJlcnMobmV3VmFsdWUsIG9sZFZhbHVlKTtcbiAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IG5ld1ZhbHVlO1xuICB9O1xuXG4gIHJldHVybiBDb2xsZWN0aW9uTGVuZ3RoT2JzZXJ2ZXI7XG59KCkpIHx8IF9jbGFzczMpO1xuXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcbnZhciBwb3AgPSBhcnJheVByb3RvLnBvcDtcbnZhciBwdXNoID0gYXJyYXlQcm90by5wdXNoO1xudmFyIHJldmVyc2UgPSBhcnJheVByb3RvLnJldmVyc2U7XG52YXIgc2hpZnQgPSBhcnJheVByb3RvLnNoaWZ0O1xudmFyIHNvcnQgPSBhcnJheVByb3RvLnNvcnQ7XG52YXIgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2U7XG52YXIgdW5zaGlmdCA9IGFycmF5UHJvdG8udW5zaGlmdDtcblxuaWYgKGFycmF5UHJvdG8uX19hdV9wYXRjaGVkX18pIHtcbiAgTG9nTWFuYWdlci5nZXRMb2dnZXIoJ2FycmF5LW9ic2VydmF0aW9uJykud2FybignRGV0ZWN0ZWQgMm5kIGF0dGVtcHQgb2YgcGF0Y2hpbmcgYXJyYXkgZnJvbSBBdXJlbGlhIGJpbmRpbmcuJyArICcgVGhpcyBpcyBwcm9iYWJseSBjYXVzZWQgYnkgZGVwZW5kZW5jeSBtaXNtYXRjaCBiZXR3ZWVuIGNvcmUgbW9kdWxlcyBhbmQgYSAzcmQgcGFydHkgcGx1Z2luLicgKyAnIFBsZWFzZSBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2F1cmVsaWEvY2xpL3B1bGwvOTA2IGlmIHlvdSBhcmUgdXNpbmcgd2VicGFjay4nKTtcbn0gZWxzZSB7XG4gIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkoYXJyYXlQcm90bywgJ19fYXVfcGF0Y2hlZF9fJywgeyB2YWx1ZTogMSB9KTtcbiAgYXJyYXlQcm90by5wb3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG5vdEVtcHR5ID0gdGhpcy5sZW5ndGggPiAwO1xuICAgIHZhciBtZXRob2RDYWxsUmVzdWx0ID0gcG9wLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKG5vdEVtcHR5ICYmIHRoaXMuX19hcnJheV9vYnNlcnZlcl9fICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX19hcnJheV9vYnNlcnZlcl9fLmFkZENoYW5nZVJlY29yZCh7XG4gICAgICAgIHR5cGU6ICdkZWxldGUnLFxuICAgICAgICBvYmplY3Q6IHRoaXMsXG4gICAgICAgIG5hbWU6IHRoaXMubGVuZ3RoLFxuICAgICAgICBvbGRWYWx1ZTogbWV0aG9kQ2FsbFJlc3VsdFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBtZXRob2RDYWxsUmVzdWx0O1xuICB9O1xuXG4gIGFycmF5UHJvdG8ucHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbWV0aG9kQ2FsbFJlc3VsdCA9IHB1c2guYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAodGhpcy5fX2FycmF5X29ic2VydmVyX18gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fX2FycmF5X29ic2VydmVyX18uYWRkQ2hhbmdlUmVjb3JkKHtcbiAgICAgICAgdHlwZTogJ3NwbGljZScsXG4gICAgICAgIG9iamVjdDogdGhpcyxcbiAgICAgICAgaW5kZXg6IHRoaXMubGVuZ3RoIC0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICAgICAgcmVtb3ZlZDogW10sXG4gICAgICAgIGFkZGVkQ291bnQ6IGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbWV0aG9kQ2FsbFJlc3VsdDtcbiAgfTtcblxuICBhcnJheVByb3RvLnJldmVyc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG9sZEFycmF5ID0gdm9pZCAwO1xuICAgIGlmICh0aGlzLl9fYXJyYXlfb2JzZXJ2ZXJfXyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9fYXJyYXlfb2JzZXJ2ZXJfXy5mbHVzaENoYW5nZVJlY29yZHMoKTtcbiAgICAgIG9sZEFycmF5ID0gdGhpcy5zbGljZSgpO1xuICAgIH1cbiAgICB2YXIgbWV0aG9kQ2FsbFJlc3VsdCA9IHJldmVyc2UuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAodGhpcy5fX2FycmF5X29ic2VydmVyX18gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fX2FycmF5X29ic2VydmVyX18ucmVzZXQob2xkQXJyYXkpO1xuICAgIH1cbiAgICByZXR1cm4gbWV0aG9kQ2FsbFJlc3VsdDtcbiAgfTtcblxuICBhcnJheVByb3RvLnNoaWZ0ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBub3RFbXB0eSA9IHRoaXMubGVuZ3RoID4gMDtcbiAgICB2YXIgbWV0aG9kQ2FsbFJlc3VsdCA9IHNoaWZ0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKG5vdEVtcHR5ICYmIHRoaXMuX19hcnJheV9vYnNlcnZlcl9fICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX19hcnJheV9vYnNlcnZlcl9fLmFkZENoYW5nZVJlY29yZCh7XG4gICAgICAgIHR5cGU6ICdkZWxldGUnLFxuICAgICAgICBvYmplY3Q6IHRoaXMsXG4gICAgICAgIG5hbWU6IDAsXG4gICAgICAgIG9sZFZhbHVlOiBtZXRob2RDYWxsUmVzdWx0XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG1ldGhvZENhbGxSZXN1bHQ7XG4gIH07XG5cbiAgYXJyYXlQcm90by5zb3J0ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBvbGRBcnJheSA9IHZvaWQgMDtcbiAgICBpZiAodGhpcy5fX2FycmF5X29ic2VydmVyX18gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fX2FycmF5X29ic2VydmVyX18uZmx1c2hDaGFuZ2VSZWNvcmRzKCk7XG4gICAgICBvbGRBcnJheSA9IHRoaXMuc2xpY2UoKTtcbiAgICB9XG4gICAgdmFyIG1ldGhvZENhbGxSZXN1bHQgPSBzb3J0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHRoaXMuX19hcnJheV9vYnNlcnZlcl9fICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX19hcnJheV9vYnNlcnZlcl9fLnJlc2V0KG9sZEFycmF5KTtcbiAgICB9XG4gICAgcmV0dXJuIG1ldGhvZENhbGxSZXN1bHQ7XG4gIH07XG5cbiAgYXJyYXlQcm90by5zcGxpY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG1ldGhvZENhbGxSZXN1bHQgPSBzcGxpY2UuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAodGhpcy5fX2FycmF5X29ic2VydmVyX18gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fX2FycmF5X29ic2VydmVyX18uYWRkQ2hhbmdlUmVjb3JkKHtcbiAgICAgICAgdHlwZTogJ3NwbGljZScsXG4gICAgICAgIG9iamVjdDogdGhpcyxcbiAgICAgICAgaW5kZXg6ICthcmd1bWVudHNbMF0sXG4gICAgICAgIHJlbW92ZWQ6IG1ldGhvZENhbGxSZXN1bHQsXG4gICAgICAgIGFkZGVkQ291bnQ6IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzLmxlbmd0aCAtIDIgOiAwXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG1ldGhvZENhbGxSZXN1bHQ7XG4gIH07XG5cbiAgYXJyYXlQcm90by51bnNoaWZ0ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBtZXRob2RDYWxsUmVzdWx0ID0gdW5zaGlmdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh0aGlzLl9fYXJyYXlfb2JzZXJ2ZXJfXyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9fYXJyYXlfb2JzZXJ2ZXJfXy5hZGRDaGFuZ2VSZWNvcmQoe1xuICAgICAgICB0eXBlOiAnc3BsaWNlJyxcbiAgICAgICAgb2JqZWN0OiB0aGlzLFxuICAgICAgICBpbmRleDogMCxcbiAgICAgICAgcmVtb3ZlZDogW10sXG4gICAgICAgIGFkZGVkQ291bnQ6IGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbWV0aG9kQ2FsbFJlc3VsdDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gX2dldEFycmF5T2JzZXJ2ZXIodGFza1F1ZXVlLCBhcnJheSkge1xuICByZXR1cm4gTW9kaWZ5QXJyYXlPYnNlcnZlci5mb3IodGFza1F1ZXVlLCBhcnJheSk7XG59XG5cbnZhciBNb2RpZnlBcnJheU9ic2VydmVyID0gZnVuY3Rpb24gKF9Nb2RpZnlDb2xsZWN0aW9uT2JzZSkge1xuICBfaW5oZXJpdHMoTW9kaWZ5QXJyYXlPYnNlcnZlciwgX01vZGlmeUNvbGxlY3Rpb25PYnNlKTtcblxuICBmdW5jdGlvbiBNb2RpZnlBcnJheU9ic2VydmVyKHRhc2tRdWV1ZSwgYXJyYXkpIHtcbiAgICBcblxuICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfTW9kaWZ5Q29sbGVjdGlvbk9ic2UuY2FsbCh0aGlzLCB0YXNrUXVldWUsIGFycmF5KSk7XG4gIH1cblxuICBNb2RpZnlBcnJheU9ic2VydmVyLmZvciA9IGZ1bmN0aW9uIF9mb3IodGFza1F1ZXVlLCBhcnJheSkge1xuICAgIGlmICghKCdfX2FycmF5X29ic2VydmVyX18nIGluIGFycmF5KSkge1xuICAgICAgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShhcnJheSwgJ19fYXJyYXlfb2JzZXJ2ZXJfXycsIHtcbiAgICAgICAgdmFsdWU6IE1vZGlmeUFycmF5T2JzZXJ2ZXIuY3JlYXRlKHRhc2tRdWV1ZSwgYXJyYXkpLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSwgY29uZmlndXJhYmxlOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhcnJheS5fX2FycmF5X29ic2VydmVyX187XG4gIH07XG5cbiAgTW9kaWZ5QXJyYXlPYnNlcnZlci5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUodGFza1F1ZXVlLCBhcnJheSkge1xuICAgIHJldHVybiBuZXcgTW9kaWZ5QXJyYXlPYnNlcnZlcih0YXNrUXVldWUsIGFycmF5KTtcbiAgfTtcblxuICByZXR1cm4gTW9kaWZ5QXJyYXlPYnNlcnZlcjtcbn0oTW9kaWZ5Q29sbGVjdGlvbk9ic2VydmVyKTtcblxuZXhwb3J0IHZhciBFeHByZXNzaW9uID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBFeHByZXNzaW9uKCkge1xuICAgIFxuXG4gICAgdGhpcy5pc0Fzc2lnbmFibGUgPSBmYWxzZTtcbiAgfVxuXG4gIEV4cHJlc3Npb24ucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24gZXZhbHVhdGUoc2NvcGUsIGxvb2t1cEZ1bmN0aW9ucywgYXJncykge1xuICAgIHRocm93IG5ldyBFcnJvcignQmluZGluZyBleHByZXNzaW9uIFwiJyArIHRoaXMgKyAnXCIgY2Fubm90IGJlIGV2YWx1YXRlZC4nKTtcbiAgfTtcblxuICBFeHByZXNzaW9uLnByb3RvdHlwZS5hc3NpZ24gPSBmdW5jdGlvbiBhc3NpZ24oc2NvcGUsIHZhbHVlLCBsb29rdXBGdW5jdGlvbnMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0JpbmRpbmcgZXhwcmVzc2lvbiBcIicgKyB0aGlzICsgJ1wiIGNhbm5vdCBiZSBhc3NpZ25lZCB0by4nKTtcbiAgfTtcblxuICBFeHByZXNzaW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0eXBlb2YgRkVBVFVSRV9OT19VTlBBUlNFUiA9PT0gJ3VuZGVmaW5lZCcgPyBfVW5wYXJzZXIudW5wYXJzZSh0aGlzKSA6IEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHRoaXMpO1xuICB9O1xuXG4gIHJldHVybiBFeHByZXNzaW9uO1xufSgpO1xuXG5leHBvcnQgdmFyIEJpbmRpbmdCZWhhdmlvciA9IGZ1bmN0aW9uIChfRXhwcmVzc2lvbikge1xuICBfaW5oZXJpdHMoQmluZGluZ0JlaGF2aW9yLCBfRXhwcmVzc2lvbik7XG5cbiAgZnVuY3Rpb24gQmluZGluZ0JlaGF2aW9yKGV4cHJlc3Npb24sIG5hbWUsIGFyZ3MpIHtcbiAgICBcblxuICAgIHZhciBfdGhpczMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfRXhwcmVzc2lvbi5jYWxsKHRoaXMpKTtcblxuICAgIF90aGlzMy5leHByZXNzaW9uID0gZXhwcmVzc2lvbjtcbiAgICBfdGhpczMubmFtZSA9IG5hbWU7XG4gICAgX3RoaXMzLmFyZ3MgPSBhcmdzO1xuICAgIHJldHVybiBfdGhpczM7XG4gIH1cblxuICBCaW5kaW5nQmVoYXZpb3IucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24gZXZhbHVhdGUoc2NvcGUsIGxvb2t1cEZ1bmN0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUoc2NvcGUsIGxvb2t1cEZ1bmN0aW9ucyk7XG4gIH07XG5cbiAgQmluZGluZ0JlaGF2aW9yLnByb3RvdHlwZS5hc3NpZ24gPSBmdW5jdGlvbiBhc3NpZ24oc2NvcGUsIHZhbHVlLCBsb29rdXBGdW5jdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5leHByZXNzaW9uLmFzc2lnbihzY29wZSwgdmFsdWUsIGxvb2t1cEZ1bmN0aW9ucyk7XG4gIH07XG5cbiAgQmluZGluZ0JlaGF2aW9yLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbiBhY2NlcHQodmlzaXRvcikge1xuICAgIHJldHVybiB2aXNpdG9yLnZpc2l0QmluZGluZ0JlaGF2aW9yKHRoaXMpO1xuICB9O1xuXG4gIEJpbmRpbmdCZWhhdmlvci5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uIGNvbm5lY3QoYmluZGluZywgc2NvcGUpIHtcbiAgICB0aGlzLmV4cHJlc3Npb24uY29ubmVjdChiaW5kaW5nLCBzY29wZSk7XG4gIH07XG5cbiAgQmluZGluZ0JlaGF2aW9yLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gYmluZChiaW5kaW5nLCBzY29wZSwgbG9va3VwRnVuY3Rpb25zKSB7XG4gICAgaWYgKHRoaXMuZXhwcmVzc2lvbi5leHByZXNzaW9uICYmIHRoaXMuZXhwcmVzc2lvbi5iaW5kKSB7XG4gICAgICB0aGlzLmV4cHJlc3Npb24uYmluZChiaW5kaW5nLCBzY29wZSwgbG9va3VwRnVuY3Rpb25zKTtcbiAgICB9XG4gICAgdmFyIGJlaGF2aW9yID0gbG9va3VwRnVuY3Rpb25zLmJpbmRpbmdCZWhhdmlvcnModGhpcy5uYW1lKTtcbiAgICBpZiAoIWJlaGF2aW9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIEJpbmRpbmdCZWhhdmlvciBuYW1lZCBcIicgKyB0aGlzLm5hbWUgKyAnXCIgd2FzIGZvdW5kIScpO1xuICAgIH1cbiAgICB2YXIgYmVoYXZpb3JLZXkgPSAnYmVoYXZpb3ItJyArIHRoaXMubmFtZTtcbiAgICBpZiAoYmluZGluZ1tiZWhhdmlvcktleV0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQSBiaW5kaW5nIGJlaGF2aW9yIG5hbWVkIFwiJyArIHRoaXMubmFtZSArICdcIiBoYXMgYWxyZWFkeSBiZWVuIGFwcGxpZWQgdG8gXCInICsgdGhpcy5leHByZXNzaW9uICsgJ1wiJyk7XG4gICAgfVxuICAgIGJpbmRpbmdbYmVoYXZpb3JLZXldID0gYmVoYXZpb3I7XG4gICAgYmVoYXZpb3IuYmluZC5hcHBseShiZWhhdmlvciwgW2JpbmRpbmcsIHNjb3BlXS5jb25jYXQoZXZhbExpc3Qoc2NvcGUsIHRoaXMuYXJncywgYmluZGluZy5sb29rdXBGdW5jdGlvbnMpKSk7XG4gIH07XG5cbiAgQmluZGluZ0JlaGF2aW9yLnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbiB1bmJpbmQoYmluZGluZywgc2NvcGUpIHtcbiAgICB2YXIgYmVoYXZpb3JLZXkgPSAnYmVoYXZpb3ItJyArIHRoaXMubmFtZTtcbiAgICBiaW5kaW5nW2JlaGF2aW9yS2V5XS51bmJpbmQoYmluZGluZywgc2NvcGUpO1xuICAgIGJpbmRpbmdbYmVoYXZpb3JLZXldID0gbnVsbDtcbiAgICBpZiAodGhpcy5leHByZXNzaW9uLmV4cHJlc3Npb24gJiYgdGhpcy5leHByZXNzaW9uLnVuYmluZCkge1xuICAgICAgdGhpcy5leHByZXNzaW9uLnVuYmluZChiaW5kaW5nLCBzY29wZSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBCaW5kaW5nQmVoYXZpb3I7XG59KEV4cHJlc3Npb24pO1xuXG5leHBvcnQgdmFyIFZhbHVlQ29udmVydGVyID0gZnVuY3Rpb24gKF9FeHByZXNzaW9uMikge1xuICBfaW5oZXJpdHMoVmFsdWVDb252ZXJ0ZXIsIF9FeHByZXNzaW9uMik7XG5cbiAgZnVuY3Rpb24gVmFsdWVDb252ZXJ0ZXIoZXhwcmVzc2lvbiwgbmFtZSwgYXJncykge1xuICAgIFxuXG4gICAgdmFyIF90aGlzNCA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9FeHByZXNzaW9uMi5jYWxsKHRoaXMpKTtcblxuICAgIF90aGlzNC5leHByZXNzaW9uID0gZXhwcmVzc2lvbjtcbiAgICBfdGhpczQubmFtZSA9IG5hbWU7XG4gICAgX3RoaXM0LmFyZ3MgPSBhcmdzO1xuICAgIF90aGlzNC5hbGxBcmdzID0gW2V4cHJlc3Npb25dLmNvbmNhdChhcmdzKTtcbiAgICByZXR1cm4gX3RoaXM0O1xuICB9XG5cbiAgVmFsdWVDb252ZXJ0ZXIucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24gZXZhbHVhdGUoc2NvcGUsIGxvb2t1cEZ1bmN0aW9ucykge1xuICAgIHZhciBjb252ZXJ0ZXIgPSBsb29rdXBGdW5jdGlvbnMudmFsdWVDb252ZXJ0ZXJzKHRoaXMubmFtZSk7XG4gICAgaWYgKCFjb252ZXJ0ZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gVmFsdWVDb252ZXJ0ZXIgbmFtZWQgXCInICsgdGhpcy5uYW1lICsgJ1wiIHdhcyBmb3VuZCEnKTtcbiAgICB9XG5cbiAgICBpZiAoJ3RvVmlldycgaW4gY29udmVydGVyKSB7XG4gICAgICByZXR1cm4gY29udmVydGVyLnRvVmlldy5hcHBseShjb252ZXJ0ZXIsIGV2YWxMaXN0KHNjb3BlLCB0aGlzLmFsbEFyZ3MsIGxvb2t1cEZ1bmN0aW9ucykpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFsbEFyZ3NbMF0uZXZhbHVhdGUoc2NvcGUsIGxvb2t1cEZ1bmN0aW9ucyk7XG4gIH07XG5cbiAgVmFsdWVDb252ZXJ0ZXIucHJvdG90eXBlLmFzc2lnbiA9IGZ1bmN0aW9uIGFzc2lnbihzY29wZSwgdmFsdWUsIGxvb2t1cEZ1bmN0aW9ucykge1xuICAgIHZhciBjb252ZXJ0ZXIgPSBsb29rdXBGdW5jdGlvbnMudmFsdWVDb252ZXJ0ZXJzKHRoaXMubmFtZSk7XG4gICAgaWYgKCFjb252ZXJ0ZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gVmFsdWVDb252ZXJ0ZXIgbmFtZWQgXCInICsgdGhpcy5uYW1lICsgJ1wiIHdhcyBmb3VuZCEnKTtcbiAgICB9XG5cbiAgICBpZiAoJ2Zyb21WaWV3JyBpbiBjb252ZXJ0ZXIpIHtcbiAgICAgIHZhbHVlID0gY29udmVydGVyLmZyb21WaWV3LmFwcGx5KGNvbnZlcnRlciwgW3ZhbHVlXS5jb25jYXQoZXZhbExpc3Qoc2NvcGUsIHRoaXMuYXJncywgbG9va3VwRnVuY3Rpb25zKSkpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFsbEFyZ3NbMF0uYXNzaWduKHNjb3BlLCB2YWx1ZSwgbG9va3VwRnVuY3Rpb25zKTtcbiAgfTtcblxuICBWYWx1ZUNvbnZlcnRlci5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24gYWNjZXB0KHZpc2l0b3IpIHtcbiAgICByZXR1cm4gdmlzaXRvci52aXNpdFZhbHVlQ29udmVydGVyKHRoaXMpO1xuICB9O1xuXG4gIFZhbHVlQ29udmVydGVyLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24gY29ubmVjdChiaW5kaW5nLCBzY29wZSkge1xuICAgIHZhciBleHByZXNzaW9ucyA9IHRoaXMuYWxsQXJncztcbiAgICB2YXIgaSA9IGV4cHJlc3Npb25zLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICBleHByZXNzaW9uc1tpXS5jb25uZWN0KGJpbmRpbmcsIHNjb3BlKTtcbiAgICB9XG4gICAgdmFyIGNvbnZlcnRlciA9IGJpbmRpbmcubG9va3VwRnVuY3Rpb25zLnZhbHVlQ29udmVydGVycyh0aGlzLm5hbWUpO1xuICAgIGlmICghY29udmVydGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFZhbHVlQ29udmVydGVyIG5hbWVkIFwiJyArIHRoaXMubmFtZSArICdcIiB3YXMgZm91bmQhJyk7XG4gICAgfVxuICAgIHZhciBzaWduYWxzID0gY29udmVydGVyLnNpZ25hbHM7XG4gICAgaWYgKHNpZ25hbHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpID0gc2lnbmFscy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgY29ubmVjdEJpbmRpbmdUb1NpZ25hbChiaW5kaW5nLCBzaWduYWxzW2ldKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFZhbHVlQ29udmVydGVyO1xufShFeHByZXNzaW9uKTtcblxuZXhwb3J0IHZhciBBc3NpZ24gPSBmdW5jdGlvbiAoX0V4cHJlc3Npb24zKSB7XG4gIF9pbmhlcml0cyhBc3NpZ24sIF9FeHByZXNzaW9uMyk7XG5cbiAgZnVuY3Rpb24gQXNzaWduKHRhcmdldCwgdmFsdWUpIHtcbiAgICBcblxuICAgIHZhciBfdGhpczUgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfRXhwcmVzc2lvbjMuY2FsbCh0aGlzKSk7XG5cbiAgICBfdGhpczUudGFyZ2V0ID0gdGFyZ2V0O1xuICAgIF90aGlzNS52YWx1ZSA9IHZhbHVlO1xuICAgIF90aGlzNS5pc0Fzc2lnbmFibGUgPSB0cnVlO1xuICAgIHJldHVybiBfdGhpczU7XG4gIH1cblxuICBBc3NpZ24ucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24gZXZhbHVhdGUoc2NvcGUsIGxvb2t1cEZ1bmN0aW9ucykge1xuICAgIHJldHVybiB0aGlzLnRhcmdldC5hc3NpZ24oc2NvcGUsIHRoaXMudmFsdWUuZXZhbHVhdGUoc2NvcGUsIGxvb2t1cEZ1bmN0aW9ucykpO1xuICB9O1xuXG4gIEFzc2lnbi5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24gYWNjZXB0KHZpc3Rvcikge1xuICAgIHZpc3Rvci52aXNpdEFzc2lnbih0aGlzKTtcbiAgfTtcblxuICBBc3NpZ24ucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiBjb25uZWN0KGJpbmRpbmcsIHNjb3BlKSB7fTtcblxuICBBc3NpZ24ucHJvdG90eXBlLmFzc2lnbiA9IGZ1bmN0aW9uIGFzc2lnbihzY29wZSwgdmFsdWUpIHtcbiAgICB0aGlzLnZhbHVlLmFzc2lnbihzY29wZSwgdmFsdWUpO1xuICAgIHRoaXMudGFyZ2V0LmFzc2lnbihzY29wZSwgdmFsdWUpO1xuICB9O1xuXG4gIHJldHVybiBBc3NpZ247XG59KEV4cHJlc3Npb24pO1xuXG5leHBvcnQgdmFyIENvbmRpdGlvbmFsID0gZnVuY3Rpb24gKF9FeHByZXNzaW9uNCkge1xuICBfaW5oZXJpdHMoQ29uZGl0aW9uYWwsIF9FeHByZXNzaW9uNCk7XG5cbiAgZnVuY3Rpb24gQ29uZGl0aW9uYWwoY29uZGl0aW9uLCB5ZXMsIG5vKSB7XG4gICAgXG5cbiAgICB2YXIgX3RoaXM2ID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX0V4cHJlc3Npb240LmNhbGwodGhpcykpO1xuXG4gICAgX3RoaXM2LmNvbmRpdGlvbiA9IGNvbmRpdGlvbjtcbiAgICBfdGhpczYueWVzID0geWVzO1xuICAgIF90aGlzNi5ubyA9IG5vO1xuICAgIHJldHVybiBfdGhpczY7XG4gIH1cblxuICBDb25kaXRpb25hbC5wcm90b3R5cGUuZXZhbHVhdGUgPSBmdW5jdGlvbiBldmFsdWF0ZShzY29wZSwgbG9va3VwRnVuY3Rpb25zKSB7XG4gICAgcmV0dXJuICEhdGhpcy5jb25kaXRpb24uZXZhbHVhdGUoc2NvcGUsIGxvb2t1cEZ1bmN0aW9ucykgPyB0aGlzLnllcy5ldmFsdWF0ZShzY29wZSwgbG9va3VwRnVuY3Rpb25zKSA6IHRoaXMubm8uZXZhbHVhdGUoc2NvcGUsIGxvb2t1cEZ1bmN0aW9ucyk7XG4gIH07XG5cbiAgQ29uZGl0aW9uYWwucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uIGFjY2VwdCh2aXNpdG9yKSB7XG4gICAgcmV0dXJuIHZpc2l0b3IudmlzaXRDb25kaXRpb25hbCh0aGlzKTtcbiAgfTtcblxuICBDb25kaXRpb25hbC5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uIGNvbm5lY3QoYmluZGluZywgc2NvcGUpIHtcbiAgICB0aGlzLmNvbmRpdGlvbi5jb25uZWN0KGJpbmRpbmcsIHNjb3BlKTtcbiAgICBpZiAodGhpcy5jb25kaXRpb24uZXZhbHVhdGUoc2NvcGUpKSB7XG4gICAgICB0aGlzLnllcy5jb25uZWN0KGJpbmRpbmcsIHNjb3BlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5uby5jb25uZWN0KGJpbmRpbmcsIHNjb3BlKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIENvbmRpdGlvbmFsO1xufShFeHByZXNzaW9uKTtcblxuZXhwb3J0IHZhciBBY2Nlc3NUaGlzID0gZnVuY3Rpb24gKF9FeHByZXNzaW9uNSkge1xuICBfaW5oZXJpdHMoQWNjZXNzVGhpcywgX0V4cHJlc3Npb241KTtcblxuICBmdW5jdGlvbiBBY2Nlc3NUaGlzKGFuY2VzdG9yKSB7XG4gICAgXG5cbiAgICB2YXIgX3RoaXM3ID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX0V4cHJlc3Npb241LmNhbGwodGhpcykpO1xuXG4gICAgX3RoaXM3LmFuY2VzdG9yID0gYW5jZXN0b3I7XG4gICAgcmV0dXJuIF90aGlzNztcbiAgfVxuXG4gIEFjY2Vzc1RoaXMucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24gZXZhbHVhdGUoc2NvcGUsIGxvb2t1cEZ1bmN0aW9ucykge1xuICAgIHZhciBvYyA9IHNjb3BlLm92ZXJyaWRlQ29udGV4dDtcbiAgICB2YXIgaSA9IHRoaXMuYW5jZXN0b3I7XG4gICAgd2hpbGUgKGktLSAmJiBvYykge1xuICAgICAgb2MgPSBvYy5wYXJlbnRPdmVycmlkZUNvbnRleHQ7XG4gICAgfVxuICAgIHJldHVybiBpIDwgMSAmJiBvYyA/IG9jLmJpbmRpbmdDb250ZXh0IDogdW5kZWZpbmVkO1xuICB9O1xuXG4gIEFjY2Vzc1RoaXMucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uIGFjY2VwdCh2aXNpdG9yKSB7XG4gICAgcmV0dXJuIHZpc2l0b3IudmlzaXRBY2Nlc3NUaGlzKHRoaXMpO1xuICB9O1xuXG4gIEFjY2Vzc1RoaXMucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiBjb25uZWN0KGJpbmRpbmcsIHNjb3BlKSB7fTtcblxuICByZXR1cm4gQWNjZXNzVGhpcztcbn0oRXhwcmVzc2lvbik7XG5cbmV4cG9ydCB2YXIgQWNjZXNzU2NvcGUgPSBmdW5jdGlvbiAoX0V4cHJlc3Npb242KSB7XG4gIF9pbmhlcml0cyhBY2Nlc3NTY29wZSwgX0V4cHJlc3Npb242KTtcblxuICBmdW5jdGlvbiBBY2Nlc3NTY29wZShuYW1lLCBhbmNlc3Rvcikge1xuICAgIFxuXG4gICAgdmFyIF90aGlzOCA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9FeHByZXNzaW9uNi5jYWxsKHRoaXMpKTtcblxuICAgIF90aGlzOC5uYW1lID0gbmFtZTtcbiAgICBfdGhpczguYW5jZXN0b3IgPSBhbmNlc3RvcjtcbiAgICBfdGhpczguaXNBc3NpZ25hYmxlID0gdHJ1ZTtcbiAgICByZXR1cm4gX3RoaXM4O1xuICB9XG5cbiAgQWNjZXNzU2NvcGUucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24gZXZhbHVhdGUoc2NvcGUsIGxvb2t1cEZ1bmN0aW9ucykge1xuICAgIHZhciBjb250ZXh0ID0gZ2V0Q29udGV4dEZvcih0aGlzLm5hbWUsIHNjb3BlLCB0aGlzLmFuY2VzdG9yKTtcbiAgICByZXR1cm4gY29udGV4dFt0aGlzLm5hbWVdO1xuICB9O1xuXG4gIEFjY2Vzc1Njb3BlLnByb3RvdHlwZS5hc3NpZ24gPSBmdW5jdGlvbiBhc3NpZ24oc2NvcGUsIHZhbHVlKSB7XG4gICAgdmFyIGNvbnRleHQgPSBnZXRDb250ZXh0Rm9yKHRoaXMubmFtZSwgc2NvcGUsIHRoaXMuYW5jZXN0b3IpO1xuICAgIHJldHVybiBjb250ZXh0ID8gY29udGV4dFt0aGlzLm5hbWVdID0gdmFsdWUgOiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgQWNjZXNzU2NvcGUucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uIGFjY2VwdCh2aXNpdG9yKSB7XG4gICAgcmV0dXJuIHZpc2l0b3IudmlzaXRBY2Nlc3NTY29wZSh0aGlzKTtcbiAgfTtcblxuICBBY2Nlc3NTY29wZS5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uIGNvbm5lY3QoYmluZGluZywgc2NvcGUpIHtcbiAgICB2YXIgY29udGV4dCA9IGdldENvbnRleHRGb3IodGhpcy5uYW1lLCBzY29wZSwgdGhpcy5hbmNlc3Rvcik7XG4gICAgYmluZGluZy5vYnNlcnZlUHJvcGVydHkoY29udGV4dCwgdGhpcy5uYW1lKTtcbiAgfTtcblxuICByZXR1cm4gQWNjZXNzU2NvcGU7XG59KEV4cHJlc3Npb24pO1xuXG5leHBvcnQgdmFyIEFjY2Vzc01lbWJlciA9IGZ1bmN0aW9uIChfRXhwcmVzc2lvbjcpIHtcbiAgX2luaGVyaXRzKEFjY2Vzc01lbWJlciwgX0V4cHJlc3Npb243KTtcblxuICBmdW5jdGlvbiBBY2Nlc3NNZW1iZXIob2JqZWN0LCBuYW1lKSB7XG4gICAgXG5cbiAgICB2YXIgX3RoaXM5ID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX0V4cHJlc3Npb243LmNhbGwodGhpcykpO1xuXG4gICAgX3RoaXM5Lm9iamVjdCA9IG9iamVjdDtcbiAgICBfdGhpczkubmFtZSA9IG5hbWU7XG4gICAgX3RoaXM5LmlzQXNzaWduYWJsZSA9IHRydWU7XG4gICAgcmV0dXJuIF90aGlzOTtcbiAgfVxuXG4gIEFjY2Vzc01lbWJlci5wcm90b3R5cGUuZXZhbHVhdGUgPSBmdW5jdGlvbiBldmFsdWF0ZShzY29wZSwgbG9va3VwRnVuY3Rpb25zKSB7XG4gICAgdmFyIGluc3RhbmNlID0gdGhpcy5vYmplY3QuZXZhbHVhdGUoc2NvcGUsIGxvb2t1cEZ1bmN0aW9ucyk7XG4gICAgcmV0dXJuIGluc3RhbmNlID09PSBudWxsIHx8IGluc3RhbmNlID09PSB1bmRlZmluZWQgPyBpbnN0YW5jZSA6IGluc3RhbmNlW3RoaXMubmFtZV07XG4gIH07XG5cbiAgQWNjZXNzTWVtYmVyLnByb3RvdHlwZS5hc3NpZ24gPSBmdW5jdGlvbiBhc3NpZ24oc2NvcGUsIHZhbHVlKSB7XG4gICAgdmFyIGluc3RhbmNlID0gdGhpcy5vYmplY3QuZXZhbHVhdGUoc2NvcGUpO1xuXG4gICAgaWYgKGluc3RhbmNlID09PSBudWxsIHx8IGluc3RhbmNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGluc3RhbmNlID0ge307XG4gICAgICB0aGlzLm9iamVjdC5hc3NpZ24oc2NvcGUsIGluc3RhbmNlKTtcbiAgICB9XG5cbiAgICBpbnN0YW5jZVt0aGlzLm5hbWVdID0gdmFsdWU7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xuXG4gIEFjY2Vzc01lbWJlci5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24gYWNjZXB0KHZpc2l0b3IpIHtcbiAgICByZXR1cm4gdmlzaXRvci52aXNpdEFjY2Vzc01lbWJlcih0aGlzKTtcbiAgfTtcblxuICBBY2Nlc3NNZW1iZXIucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiBjb25uZWN0KGJpbmRpbmcsIHNjb3BlKSB7XG4gICAgdGhpcy5vYmplY3QuY29ubmVjdChiaW5kaW5nLCBzY29wZSk7XG4gICAgdmFyIG9iaiA9IHRoaXMub2JqZWN0LmV2YWx1YXRlKHNjb3BlKTtcbiAgICBpZiAob2JqKSB7XG4gICAgICBiaW5kaW5nLm9ic2VydmVQcm9wZXJ0eShvYmosIHRoaXMubmFtZSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBBY2Nlc3NNZW1iZXI7XG59KEV4cHJlc3Npb24pO1xuXG5leHBvcnQgdmFyIEFjY2Vzc0tleWVkID0gZnVuY3Rpb24gKF9FeHByZXNzaW9uOCkge1xuICBfaW5oZXJpdHMoQWNjZXNzS2V5ZWQsIF9FeHByZXNzaW9uOCk7XG5cbiAgZnVuY3Rpb24gQWNjZXNzS2V5ZWQob2JqZWN0LCBrZXkpIHtcbiAgICBcblxuICAgIHZhciBfdGhpczEwID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX0V4cHJlc3Npb244LmNhbGwodGhpcykpO1xuXG4gICAgX3RoaXMxMC5vYmplY3QgPSBvYmplY3Q7XG4gICAgX3RoaXMxMC5rZXkgPSBrZXk7XG4gICAgX3RoaXMxMC5pc0Fzc2lnbmFibGUgPSB0cnVlO1xuICAgIHJldHVybiBfdGhpczEwO1xuICB9XG5cbiAgQWNjZXNzS2V5ZWQucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24gZXZhbHVhdGUoc2NvcGUsIGxvb2t1cEZ1bmN0aW9ucykge1xuICAgIHZhciBpbnN0YW5jZSA9IHRoaXMub2JqZWN0LmV2YWx1YXRlKHNjb3BlLCBsb29rdXBGdW5jdGlvbnMpO1xuICAgIHZhciBsb29rdXAgPSB0aGlzLmtleS5ldmFsdWF0ZShzY29wZSwgbG9va3VwRnVuY3Rpb25zKTtcbiAgICByZXR1cm4gZ2V0S2V5ZWQoaW5zdGFuY2UsIGxvb2t1cCk7XG4gIH07XG5cbiAgQWNjZXNzS2V5ZWQucHJvdG90eXBlLmFzc2lnbiA9IGZ1bmN0aW9uIGFzc2lnbihzY29wZSwgdmFsdWUpIHtcbiAgICB2YXIgaW5zdGFuY2UgPSB0aGlzLm9iamVjdC5ldmFsdWF0ZShzY29wZSk7XG4gICAgdmFyIGxvb2t1cCA9IHRoaXMua2V5LmV2YWx1YXRlKHNjb3BlKTtcbiAgICByZXR1cm4gc2V0S2V5ZWQoaW5zdGFuY2UsIGxvb2t1cCwgdmFsdWUpO1xuICB9O1xuXG4gIEFjY2Vzc0tleWVkLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbiBhY2NlcHQodmlzaXRvcikge1xuICAgIHJldHVybiB2aXNpdG9yLnZpc2l0QWNjZXNzS2V5ZWQodGhpcyk7XG4gIH07XG5cbiAgQWNjZXNzS2V5ZWQucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiBjb25uZWN0KGJpbmRpbmcsIHNjb3BlKSB7XG4gICAgdGhpcy5vYmplY3QuY29ubmVjdChiaW5kaW5nLCBzY29wZSk7XG4gICAgdmFyIG9iaiA9IHRoaXMub2JqZWN0LmV2YWx1YXRlKHNjb3BlKTtcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICB0aGlzLmtleS5jb25uZWN0KGJpbmRpbmcsIHNjb3BlKTtcbiAgICAgIHZhciBrZXkgPSB0aGlzLmtleS5ldmFsdWF0ZShzY29wZSk7XG5cbiAgICAgIGlmIChrZXkgIT09IG51bGwgJiYga2V5ICE9PSB1bmRlZmluZWQgJiYgIShBcnJheS5pc0FycmF5KG9iaikgJiYgdHlwZW9mIGtleSA9PT0gJ251bWJlcicpKSB7XG4gICAgICAgIGJpbmRpbmcub2JzZXJ2ZVByb3BlcnR5KG9iaiwga2V5KTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIEFjY2Vzc0tleWVkO1xufShFeHByZXNzaW9uKTtcblxuZXhwb3J0IHZhciBDYWxsU2NvcGUgPSBmdW5jdGlvbiAoX0V4cHJlc3Npb245KSB7XG4gIF9pbmhlcml0cyhDYWxsU2NvcGUsIF9FeHByZXNzaW9uOSk7XG5cbiAgZnVuY3Rpb24gQ2FsbFNjb3BlKG5hbWUsIGFyZ3MsIGFuY2VzdG9yKSB7XG4gICAgXG5cbiAgICB2YXIgX3RoaXMxMSA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9FeHByZXNzaW9uOS5jYWxsKHRoaXMpKTtcblxuICAgIF90aGlzMTEubmFtZSA9IG5hbWU7XG4gICAgX3RoaXMxMS5hcmdzID0gYXJncztcbiAgICBfdGhpczExLmFuY2VzdG9yID0gYW5jZXN0b3I7XG4gICAgcmV0dXJuIF90aGlzMTE7XG4gIH1cblxuICBDYWxsU2NvcGUucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24gZXZhbHVhdGUoc2NvcGUsIGxvb2t1cEZ1bmN0aW9ucywgbXVzdEV2YWx1YXRlKSB7XG4gICAgdmFyIGFyZ3MgPSBldmFsTGlzdChzY29wZSwgdGhpcy5hcmdzLCBsb29rdXBGdW5jdGlvbnMpO1xuICAgIHZhciBjb250ZXh0ID0gZ2V0Q29udGV4dEZvcih0aGlzLm5hbWUsIHNjb3BlLCB0aGlzLmFuY2VzdG9yKTtcbiAgICB2YXIgZnVuYyA9IGdldEZ1bmN0aW9uKGNvbnRleHQsIHRoaXMubmFtZSwgbXVzdEV2YWx1YXRlKTtcbiAgICBpZiAoZnVuYykge1xuICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgQ2FsbFNjb3BlLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbiBhY2NlcHQodmlzaXRvcikge1xuICAgIHJldHVybiB2aXNpdG9yLnZpc2l0Q2FsbFNjb3BlKHRoaXMpO1xuICB9O1xuXG4gIENhbGxTY29wZS5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uIGNvbm5lY3QoYmluZGluZywgc2NvcGUpIHtcbiAgICB2YXIgYXJncyA9IHRoaXMuYXJncztcbiAgICB2YXIgaSA9IGFyZ3MubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIGFyZ3NbaV0uY29ubmVjdChiaW5kaW5nLCBzY29wZSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBDYWxsU2NvcGU7XG59KEV4cHJlc3Npb24pO1xuXG5leHBvcnQgdmFyIENhbGxNZW1iZXIgPSBmdW5jdGlvbiAoX0V4cHJlc3Npb24xMCkge1xuICBfaW5oZXJpdHMoQ2FsbE1lbWJlciwgX0V4cHJlc3Npb24xMCk7XG5cbiAgZnVuY3Rpb24gQ2FsbE1lbWJlcihvYmplY3QsIG5hbWUsIGFyZ3MpIHtcbiAgICBcblxuICAgIHZhciBfdGhpczEyID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX0V4cHJlc3Npb24xMC5jYWxsKHRoaXMpKTtcblxuICAgIF90aGlzMTIub2JqZWN0ID0gb2JqZWN0O1xuICAgIF90aGlzMTIubmFtZSA9IG5hbWU7XG4gICAgX3RoaXMxMi5hcmdzID0gYXJncztcbiAgICByZXR1cm4gX3RoaXMxMjtcbiAgfVxuXG4gIENhbGxNZW1iZXIucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24gZXZhbHVhdGUoc2NvcGUsIGxvb2t1cEZ1bmN0aW9ucywgbXVzdEV2YWx1YXRlKSB7XG4gICAgdmFyIGluc3RhbmNlID0gdGhpcy5vYmplY3QuZXZhbHVhdGUoc2NvcGUsIGxvb2t1cEZ1bmN0aW9ucyk7XG4gICAgdmFyIGFyZ3MgPSBldmFsTGlzdChzY29wZSwgdGhpcy5hcmdzLCBsb29rdXBGdW5jdGlvbnMpO1xuICAgIHZhciBmdW5jID0gZ2V0RnVuY3Rpb24oaW5zdGFuY2UsIHRoaXMubmFtZSwgbXVzdEV2YWx1YXRlKTtcbiAgICBpZiAoZnVuYykge1xuICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkoaW5zdGFuY2UsIGFyZ3MpO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9O1xuXG4gIENhbGxNZW1iZXIucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uIGFjY2VwdCh2aXNpdG9yKSB7XG4gICAgcmV0dXJuIHZpc2l0b3IudmlzaXRDYWxsTWVtYmVyKHRoaXMpO1xuICB9O1xuXG4gIENhbGxNZW1iZXIucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiBjb25uZWN0KGJpbmRpbmcsIHNjb3BlKSB7XG4gICAgdGhpcy5vYmplY3QuY29ubmVjdChiaW5kaW5nLCBzY29wZSk7XG4gICAgdmFyIG9iaiA9IHRoaXMub2JqZWN0LmV2YWx1YXRlKHNjb3BlKTtcbiAgICBpZiAoZ2V0RnVuY3Rpb24ob2JqLCB0aGlzLm5hbWUsIGZhbHNlKSkge1xuICAgICAgdmFyIGFyZ3MgPSB0aGlzLmFyZ3M7XG4gICAgICB2YXIgaSA9IGFyZ3MubGVuZ3RoO1xuICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICBhcmdzW2ldLmNvbm5lY3QoYmluZGluZywgc2NvcGUpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gQ2FsbE1lbWJlcjtcbn0oRXhwcmVzc2lvbik7XG5cbmV4cG9ydCB2YXIgQ2FsbEZ1bmN0aW9uID0gZnVuY3Rpb24gKF9FeHByZXNzaW9uMTEpIHtcbiAgX2luaGVyaXRzKENhbGxGdW5jdGlvbiwgX0V4cHJlc3Npb24xMSk7XG5cbiAgZnVuY3Rpb24gQ2FsbEZ1bmN0aW9uKGZ1bmMsIGFyZ3MpIHtcbiAgICBcblxuICAgIHZhciBfdGhpczEzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX0V4cHJlc3Npb24xMS5jYWxsKHRoaXMpKTtcblxuICAgIF90aGlzMTMuZnVuYyA9IGZ1bmM7XG4gICAgX3RoaXMxMy5hcmdzID0gYXJncztcbiAgICByZXR1cm4gX3RoaXMxMztcbiAgfVxuXG4gIENhbGxGdW5jdGlvbi5wcm90b3R5cGUuZXZhbHVhdGUgPSBmdW5jdGlvbiBldmFsdWF0ZShzY29wZSwgbG9va3VwRnVuY3Rpb25zLCBtdXN0RXZhbHVhdGUpIHtcbiAgICB2YXIgZnVuYyA9IHRoaXMuZnVuYy5ldmFsdWF0ZShzY29wZSwgbG9va3VwRnVuY3Rpb25zKTtcbiAgICBpZiAodHlwZW9mIGZ1bmMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBmdW5jLmFwcGx5KG51bGwsIGV2YWxMaXN0KHNjb3BlLCB0aGlzLmFyZ3MsIGxvb2t1cEZ1bmN0aW9ucykpO1xuICAgIH1cbiAgICBpZiAoIW11c3RFdmFsdWF0ZSAmJiAoZnVuYyA9PT0gbnVsbCB8fCBmdW5jID09PSB1bmRlZmluZWQpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IodGhpcy5mdW5jICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICB9O1xuXG4gIENhbGxGdW5jdGlvbi5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24gYWNjZXB0KHZpc2l0b3IpIHtcbiAgICByZXR1cm4gdmlzaXRvci52aXNpdENhbGxGdW5jdGlvbih0aGlzKTtcbiAgfTtcblxuICBDYWxsRnVuY3Rpb24ucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiBjb25uZWN0KGJpbmRpbmcsIHNjb3BlKSB7XG4gICAgdGhpcy5mdW5jLmNvbm5lY3QoYmluZGluZywgc2NvcGUpO1xuICAgIHZhciBmdW5jID0gdGhpcy5mdW5jLmV2YWx1YXRlKHNjb3BlKTtcbiAgICBpZiAodHlwZW9mIGZ1bmMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciBhcmdzID0gdGhpcy5hcmdzO1xuICAgICAgdmFyIGkgPSBhcmdzLmxlbmd0aDtcbiAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgYXJnc1tpXS5jb25uZWN0KGJpbmRpbmcsIHNjb3BlKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIENhbGxGdW5jdGlvbjtcbn0oRXhwcmVzc2lvbik7XG5cbmV4cG9ydCB2YXIgQmluYXJ5ID0gZnVuY3Rpb24gKF9FeHByZXNzaW9uMTIpIHtcbiAgX2luaGVyaXRzKEJpbmFyeSwgX0V4cHJlc3Npb24xMik7XG5cbiAgZnVuY3Rpb24gQmluYXJ5KG9wZXJhdGlvbiwgbGVmdCwgcmlnaHQpIHtcbiAgICBcblxuICAgIHZhciBfdGhpczE0ID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX0V4cHJlc3Npb24xMi5jYWxsKHRoaXMpKTtcblxuICAgIF90aGlzMTQub3BlcmF0aW9uID0gb3BlcmF0aW9uO1xuICAgIF90aGlzMTQubGVmdCA9IGxlZnQ7XG4gICAgX3RoaXMxNC5yaWdodCA9IHJpZ2h0O1xuICAgIHJldHVybiBfdGhpczE0O1xuICB9XG5cbiAgQmluYXJ5LnByb3RvdHlwZS5ldmFsdWF0ZSA9IGZ1bmN0aW9uIGV2YWx1YXRlKHNjb3BlLCBsb29rdXBGdW5jdGlvbnMpIHtcbiAgICB2YXIgbGVmdCA9IHRoaXMubGVmdC5ldmFsdWF0ZShzY29wZSwgbG9va3VwRnVuY3Rpb25zKTtcblxuICAgIHN3aXRjaCAodGhpcy5vcGVyYXRpb24pIHtcbiAgICAgIGNhc2UgJyYmJzpcbiAgICAgICAgcmV0dXJuIGxlZnQgJiYgdGhpcy5yaWdodC5ldmFsdWF0ZShzY29wZSwgbG9va3VwRnVuY3Rpb25zKTtcbiAgICAgIGNhc2UgJ3x8JzpcbiAgICAgICAgcmV0dXJuIGxlZnQgfHwgdGhpcy5yaWdodC5ldmFsdWF0ZShzY29wZSwgbG9va3VwRnVuY3Rpb25zKTtcbiAgICB9XG5cbiAgICB2YXIgcmlnaHQgPSB0aGlzLnJpZ2h0LmV2YWx1YXRlKHNjb3BlLCBsb29rdXBGdW5jdGlvbnMpO1xuXG4gICAgc3dpdGNoICh0aGlzLm9wZXJhdGlvbikge1xuICAgICAgY2FzZSAnPT0nOlxuICAgICAgICByZXR1cm4gbGVmdCA9PSByaWdodDtcbiAgICAgIGNhc2UgJz09PSc6XG4gICAgICAgIHJldHVybiBsZWZ0ID09PSByaWdodDtcbiAgICAgIGNhc2UgJyE9JzpcbiAgICAgICAgcmV0dXJuIGxlZnQgIT0gcmlnaHQ7XG4gICAgICBjYXNlICchPT0nOlxuICAgICAgICByZXR1cm4gbGVmdCAhPT0gcmlnaHQ7XG4gICAgICBjYXNlICdpbnN0YW5jZW9mJzpcbiAgICAgICAgcmV0dXJuIHR5cGVvZiByaWdodCA9PT0gJ2Z1bmN0aW9uJyAmJiBsZWZ0IGluc3RhbmNlb2YgcmlnaHQ7XG4gICAgICBjYXNlICdpbic6XG4gICAgICAgIHJldHVybiAodHlwZW9mIHJpZ2h0ID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZihyaWdodCkpID09PSAnb2JqZWN0JyAmJiByaWdodCAhPT0gbnVsbCAmJiBsZWZ0IGluIHJpZ2h0O1xuICAgIH1cblxuICAgIGlmIChsZWZ0ID09PSBudWxsIHx8IHJpZ2h0ID09PSBudWxsIHx8IGxlZnQgPT09IHVuZGVmaW5lZCB8fCByaWdodCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzd2l0Y2ggKHRoaXMub3BlcmF0aW9uKSB7XG4gICAgICAgIGNhc2UgJysnOlxuICAgICAgICAgIGlmIChsZWZ0ICE9PSBudWxsICYmIGxlZnQgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGxlZnQ7XG4gICAgICAgICAgaWYgKHJpZ2h0ICE9PSBudWxsICYmIHJpZ2h0ICE9PSB1bmRlZmluZWQpIHJldHVybiByaWdodDtcbiAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgY2FzZSAnLSc6XG4gICAgICAgICAgaWYgKGxlZnQgIT09IG51bGwgJiYgbGVmdCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gbGVmdDtcbiAgICAgICAgICBpZiAocmlnaHQgIT09IG51bGwgJiYgcmlnaHQgIT09IHVuZGVmaW5lZCkgcmV0dXJuIDAgLSByaWdodDtcbiAgICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0aGlzLm9wZXJhdGlvbikge1xuICAgICAgY2FzZSAnKyc6XG4gICAgICAgIHJldHVybiBhdXRvQ29udmVydEFkZChsZWZ0LCByaWdodCk7XG4gICAgICBjYXNlICctJzpcbiAgICAgICAgcmV0dXJuIGxlZnQgLSByaWdodDtcbiAgICAgIGNhc2UgJyonOlxuICAgICAgICByZXR1cm4gbGVmdCAqIHJpZ2h0O1xuICAgICAgY2FzZSAnLyc6XG4gICAgICAgIHJldHVybiBsZWZ0IC8gcmlnaHQ7XG4gICAgICBjYXNlICclJzpcbiAgICAgICAgcmV0dXJuIGxlZnQgJSByaWdodDtcbiAgICAgIGNhc2UgJzwnOlxuICAgICAgICByZXR1cm4gbGVmdCA8IHJpZ2h0O1xuICAgICAgY2FzZSAnPic6XG4gICAgICAgIHJldHVybiBsZWZ0ID4gcmlnaHQ7XG4gICAgICBjYXNlICc8PSc6XG4gICAgICAgIHJldHVybiBsZWZ0IDw9IHJpZ2h0O1xuICAgICAgY2FzZSAnPj0nOlxuICAgICAgICByZXR1cm4gbGVmdCA+PSByaWdodDtcbiAgICAgIGNhc2UgJ14nOlxuICAgICAgICByZXR1cm4gbGVmdCBeIHJpZ2h0O1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcignSW50ZXJuYWwgZXJyb3IgWycgKyB0aGlzLm9wZXJhdGlvbiArICddIG5vdCBoYW5kbGVkJyk7XG4gIH07XG5cbiAgQmluYXJ5LnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbiBhY2NlcHQodmlzaXRvcikge1xuICAgIHJldHVybiB2aXNpdG9yLnZpc2l0QmluYXJ5KHRoaXMpO1xuICB9O1xuXG4gIEJpbmFyeS5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uIGNvbm5lY3QoYmluZGluZywgc2NvcGUpIHtcbiAgICB0aGlzLmxlZnQuY29ubmVjdChiaW5kaW5nLCBzY29wZSk7XG4gICAgdmFyIGxlZnQgPSB0aGlzLmxlZnQuZXZhbHVhdGUoc2NvcGUpO1xuICAgIGlmICh0aGlzLm9wZXJhdGlvbiA9PT0gJyYmJyAmJiAhbGVmdCB8fCB0aGlzLm9wZXJhdGlvbiA9PT0gJ3x8JyAmJiBsZWZ0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucmlnaHQuY29ubmVjdChiaW5kaW5nLCBzY29wZSk7XG4gIH07XG5cbiAgcmV0dXJuIEJpbmFyeTtcbn0oRXhwcmVzc2lvbik7XG5cbmV4cG9ydCB2YXIgVW5hcnkgPSBmdW5jdGlvbiAoX0V4cHJlc3Npb24xMykge1xuICBfaW5oZXJpdHMoVW5hcnksIF9FeHByZXNzaW9uMTMpO1xuXG4gIGZ1bmN0aW9uIFVuYXJ5KG9wZXJhdGlvbiwgZXhwcmVzc2lvbikge1xuICAgIFxuXG4gICAgdmFyIF90aGlzMTUgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfRXhwcmVzc2lvbjEzLmNhbGwodGhpcykpO1xuXG4gICAgX3RoaXMxNS5vcGVyYXRpb24gPSBvcGVyYXRpb247XG4gICAgX3RoaXMxNS5leHByZXNzaW9uID0gZXhwcmVzc2lvbjtcbiAgICByZXR1cm4gX3RoaXMxNTtcbiAgfVxuXG4gIFVuYXJ5LnByb3RvdHlwZS5ldmFsdWF0ZSA9IGZ1bmN0aW9uIGV2YWx1YXRlKHNjb3BlLCBsb29rdXBGdW5jdGlvbnMpIHtcbiAgICBzd2l0Y2ggKHRoaXMub3BlcmF0aW9uKSB7XG4gICAgICBjYXNlICchJzpcbiAgICAgICAgcmV0dXJuICF0aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUoc2NvcGUsIGxvb2t1cEZ1bmN0aW9ucyk7XG4gICAgICBjYXNlICd0eXBlb2YnOlxuICAgICAgICByZXR1cm4gX3R5cGVvZih0aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUoc2NvcGUsIGxvb2t1cEZ1bmN0aW9ucykpO1xuICAgICAgY2FzZSAndm9pZCc6XG4gICAgICAgIHJldHVybiB2b2lkIHRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZShzY29wZSwgbG9va3VwRnVuY3Rpb25zKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludGVybmFsIGVycm9yIFsnICsgdGhpcy5vcGVyYXRpb24gKyAnXSBub3QgaGFuZGxlZCcpO1xuICB9O1xuXG4gIFVuYXJ5LnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbiBhY2NlcHQodmlzaXRvcikge1xuICAgIHJldHVybiB2aXNpdG9yLnZpc2l0UHJlZml4KHRoaXMpO1xuICB9O1xuXG4gIFVuYXJ5LnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24gY29ubmVjdChiaW5kaW5nLCBzY29wZSkge1xuICAgIHRoaXMuZXhwcmVzc2lvbi5jb25uZWN0KGJpbmRpbmcsIHNjb3BlKTtcbiAgfTtcblxuICByZXR1cm4gVW5hcnk7XG59KEV4cHJlc3Npb24pO1xuXG5leHBvcnQgdmFyIExpdGVyYWxQcmltaXRpdmUgPSBmdW5jdGlvbiAoX0V4cHJlc3Npb24xNCkge1xuICBfaW5oZXJpdHMoTGl0ZXJhbFByaW1pdGl2ZSwgX0V4cHJlc3Npb24xNCk7XG5cbiAgZnVuY3Rpb24gTGl0ZXJhbFByaW1pdGl2ZSh2YWx1ZSkge1xuICAgIFxuXG4gICAgdmFyIF90aGlzMTYgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfRXhwcmVzc2lvbjE0LmNhbGwodGhpcykpO1xuXG4gICAgX3RoaXMxNi52YWx1ZSA9IHZhbHVlO1xuICAgIHJldHVybiBfdGhpczE2O1xuICB9XG5cbiAgTGl0ZXJhbFByaW1pdGl2ZS5wcm90b3R5cGUuZXZhbHVhdGUgPSBmdW5jdGlvbiBldmFsdWF0ZShzY29wZSwgbG9va3VwRnVuY3Rpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gIH07XG5cbiAgTGl0ZXJhbFByaW1pdGl2ZS5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24gYWNjZXB0KHZpc2l0b3IpIHtcbiAgICByZXR1cm4gdmlzaXRvci52aXNpdExpdGVyYWxQcmltaXRpdmUodGhpcyk7XG4gIH07XG5cbiAgTGl0ZXJhbFByaW1pdGl2ZS5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uIGNvbm5lY3QoYmluZGluZywgc2NvcGUpIHt9O1xuXG4gIHJldHVybiBMaXRlcmFsUHJpbWl0aXZlO1xufShFeHByZXNzaW9uKTtcblxuZXhwb3J0IHZhciBMaXRlcmFsU3RyaW5nID0gZnVuY3Rpb24gKF9FeHByZXNzaW9uMTUpIHtcbiAgX2luaGVyaXRzKExpdGVyYWxTdHJpbmcsIF9FeHByZXNzaW9uMTUpO1xuXG4gIGZ1bmN0aW9uIExpdGVyYWxTdHJpbmcodmFsdWUpIHtcbiAgICBcblxuICAgIHZhciBfdGhpczE3ID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX0V4cHJlc3Npb24xNS5jYWxsKHRoaXMpKTtcblxuICAgIF90aGlzMTcudmFsdWUgPSB2YWx1ZTtcbiAgICByZXR1cm4gX3RoaXMxNztcbiAgfVxuXG4gIExpdGVyYWxTdHJpbmcucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24gZXZhbHVhdGUoc2NvcGUsIGxvb2t1cEZ1bmN0aW9ucykge1xuICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICB9O1xuXG4gIExpdGVyYWxTdHJpbmcucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uIGFjY2VwdCh2aXNpdG9yKSB7XG4gICAgcmV0dXJuIHZpc2l0b3IudmlzaXRMaXRlcmFsU3RyaW5nKHRoaXMpO1xuICB9O1xuXG4gIExpdGVyYWxTdHJpbmcucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiBjb25uZWN0KGJpbmRpbmcsIHNjb3BlKSB7fTtcblxuICByZXR1cm4gTGl0ZXJhbFN0cmluZztcbn0oRXhwcmVzc2lvbik7XG5cbmV4cG9ydCB2YXIgTGl0ZXJhbFRlbXBsYXRlID0gZnVuY3Rpb24gKF9FeHByZXNzaW9uMTYpIHtcbiAgX2luaGVyaXRzKExpdGVyYWxUZW1wbGF0ZSwgX0V4cHJlc3Npb24xNik7XG5cbiAgZnVuY3Rpb24gTGl0ZXJhbFRlbXBsYXRlKGNvb2tlZCwgZXhwcmVzc2lvbnMsIHJhdywgdGFnKSB7XG4gICAgXG5cbiAgICB2YXIgX3RoaXMxOCA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9FeHByZXNzaW9uMTYuY2FsbCh0aGlzKSk7XG5cbiAgICBfdGhpczE4LmNvb2tlZCA9IGNvb2tlZDtcbiAgICBfdGhpczE4LmV4cHJlc3Npb25zID0gZXhwcmVzc2lvbnMgfHwgW107XG4gICAgX3RoaXMxOC5sZW5ndGggPSBfdGhpczE4LmV4cHJlc3Npb25zLmxlbmd0aDtcbiAgICBfdGhpczE4LnRhZ2dlZCA9IHRhZyAhPT0gdW5kZWZpbmVkO1xuICAgIGlmIChfdGhpczE4LnRhZ2dlZCkge1xuICAgICAgX3RoaXMxOC5jb29rZWQucmF3ID0gcmF3O1xuICAgICAgX3RoaXMxOC50YWcgPSB0YWc7XG4gICAgICBpZiAodGFnIGluc3RhbmNlb2YgQWNjZXNzU2NvcGUpIHtcbiAgICAgICAgX3RoaXMxOC5jb250ZXh0VHlwZSA9ICdTY29wZSc7XG4gICAgICB9IGVsc2UgaWYgKHRhZyBpbnN0YW5jZW9mIEFjY2Vzc01lbWJlciB8fCB0YWcgaW5zdGFuY2VvZiBBY2Nlc3NLZXllZCkge1xuICAgICAgICBfdGhpczE4LmNvbnRleHRUeXBlID0gJ09iamVjdCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoX3RoaXMxOC50YWcgKyAnIGlzIG5vdCBhIHZhbGlkIHRlbXBsYXRlIHRhZycpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gX3RoaXMxODtcbiAgfVxuXG4gIExpdGVyYWxUZW1wbGF0ZS5wcm90b3R5cGUuZ2V0U2NvcGVDb250ZXh0ID0gZnVuY3Rpb24gZ2V0U2NvcGVDb250ZXh0KHNjb3BlLCBsb29rdXBGdW5jdGlvbnMpIHtcbiAgICByZXR1cm4gZ2V0Q29udGV4dEZvcih0aGlzLnRhZy5uYW1lLCBzY29wZSwgdGhpcy50YWcuYW5jZXN0b3IpO1xuICB9O1xuXG4gIExpdGVyYWxUZW1wbGF0ZS5wcm90b3R5cGUuZ2V0T2JqZWN0Q29udGV4dCA9IGZ1bmN0aW9uIGdldE9iamVjdENvbnRleHQoc2NvcGUsIGxvb2t1cEZ1bmN0aW9ucykge1xuICAgIHJldHVybiB0aGlzLnRhZy5vYmplY3QuZXZhbHVhdGUoc2NvcGUsIGxvb2t1cEZ1bmN0aW9ucyk7XG4gIH07XG5cbiAgTGl0ZXJhbFRlbXBsYXRlLnByb3RvdHlwZS5ldmFsdWF0ZSA9IGZ1bmN0aW9uIGV2YWx1YXRlKHNjb3BlLCBsb29rdXBGdW5jdGlvbnMsIG11c3RFdmFsdWF0ZSkge1xuICAgIHZhciByZXN1bHRzID0gbmV3IEFycmF5KHRoaXMubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdHNbaV0gPSB0aGlzLmV4cHJlc3Npb25zW2ldLmV2YWx1YXRlKHNjb3BlLCBsb29rdXBGdW5jdGlvbnMpO1xuICAgIH1cbiAgICBpZiAodGhpcy50YWdnZWQpIHtcbiAgICAgIHZhciBmdW5jID0gdGhpcy50YWcuZXZhbHVhdGUoc2NvcGUsIGxvb2t1cEZ1bmN0aW9ucyk7XG4gICAgICBpZiAodHlwZW9mIGZ1bmMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzWydnZXQnICsgdGhpcy5jb250ZXh0VHlwZSArICdDb250ZXh0J10oc2NvcGUsIGxvb2t1cEZ1bmN0aW9ucyk7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwuYXBwbHkoZnVuYywgW2NvbnRleHQsIHRoaXMuY29va2VkXS5jb25jYXQocmVzdWx0cykpO1xuICAgICAgfVxuICAgICAgaWYgKCFtdXN0RXZhbHVhdGUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IodGhpcy50YWcgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgfVxuICAgIHZhciByZXN1bHQgPSB0aGlzLmNvb2tlZFswXTtcbiAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCB0aGlzLmxlbmd0aDsgX2kyKyspIHtcbiAgICAgIHJlc3VsdCA9IFN0cmluZy5wcm90b3R5cGUuY29uY2F0KHJlc3VsdCwgcmVzdWx0c1tfaTJdLCB0aGlzLmNvb2tlZFtfaTIgKyAxXSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgTGl0ZXJhbFRlbXBsYXRlLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbiBhY2NlcHQodmlzaXRvcikge1xuICAgIHJldHVybiB2aXNpdG9yLnZpc2l0TGl0ZXJhbFRlbXBsYXRlKHRoaXMpO1xuICB9O1xuXG4gIExpdGVyYWxUZW1wbGF0ZS5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uIGNvbm5lY3QoYmluZGluZywgc2NvcGUpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuZXhwcmVzc2lvbnNbaV0uY29ubmVjdChiaW5kaW5nLCBzY29wZSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRhZ2dlZCkge1xuICAgICAgdGhpcy50YWcuY29ubmVjdChiaW5kaW5nLCBzY29wZSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBMaXRlcmFsVGVtcGxhdGU7XG59KEV4cHJlc3Npb24pO1xuXG5leHBvcnQgdmFyIExpdGVyYWxBcnJheSA9IGZ1bmN0aW9uIChfRXhwcmVzc2lvbjE3KSB7XG4gIF9pbmhlcml0cyhMaXRlcmFsQXJyYXksIF9FeHByZXNzaW9uMTcpO1xuXG4gIGZ1bmN0aW9uIExpdGVyYWxBcnJheShlbGVtZW50cykge1xuICAgIFxuXG4gICAgdmFyIF90aGlzMTkgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfRXhwcmVzc2lvbjE3LmNhbGwodGhpcykpO1xuXG4gICAgX3RoaXMxOS5lbGVtZW50cyA9IGVsZW1lbnRzO1xuICAgIHJldHVybiBfdGhpczE5O1xuICB9XG5cbiAgTGl0ZXJhbEFycmF5LnByb3RvdHlwZS5ldmFsdWF0ZSA9IGZ1bmN0aW9uIGV2YWx1YXRlKHNjb3BlLCBsb29rdXBGdW5jdGlvbnMpIHtcbiAgICB2YXIgZWxlbWVudHMgPSB0aGlzLmVsZW1lbnRzO1xuICAgIHZhciByZXN1bHQgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgcmVzdWx0W2ldID0gZWxlbWVudHNbaV0uZXZhbHVhdGUoc2NvcGUsIGxvb2t1cEZ1bmN0aW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBMaXRlcmFsQXJyYXkucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uIGFjY2VwdCh2aXNpdG9yKSB7XG4gICAgcmV0dXJuIHZpc2l0b3IudmlzaXRMaXRlcmFsQXJyYXkodGhpcyk7XG4gIH07XG5cbiAgTGl0ZXJhbEFycmF5LnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24gY29ubmVjdChiaW5kaW5nLCBzY29wZSkge1xuICAgIHZhciBsZW5ndGggPSB0aGlzLmVsZW1lbnRzLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmVsZW1lbnRzW2ldLmNvbm5lY3QoYmluZGluZywgc2NvcGUpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gTGl0ZXJhbEFycmF5O1xufShFeHByZXNzaW9uKTtcblxuZXhwb3J0IHZhciBMaXRlcmFsT2JqZWN0ID0gZnVuY3Rpb24gKF9FeHByZXNzaW9uMTgpIHtcbiAgX2luaGVyaXRzKExpdGVyYWxPYmplY3QsIF9FeHByZXNzaW9uMTgpO1xuXG4gIGZ1bmN0aW9uIExpdGVyYWxPYmplY3Qoa2V5cywgdmFsdWVzKSB7XG4gICAgXG5cbiAgICB2YXIgX3RoaXMyMCA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9FeHByZXNzaW9uMTguY2FsbCh0aGlzKSk7XG5cbiAgICBfdGhpczIwLmtleXMgPSBrZXlzO1xuICAgIF90aGlzMjAudmFsdWVzID0gdmFsdWVzO1xuICAgIHJldHVybiBfdGhpczIwO1xuICB9XG5cbiAgTGl0ZXJhbE9iamVjdC5wcm90b3R5cGUuZXZhbHVhdGUgPSBmdW5jdGlvbiBldmFsdWF0ZShzY29wZSwgbG9va3VwRnVuY3Rpb25zKSB7XG4gICAgdmFyIGluc3RhbmNlID0ge307XG4gICAgdmFyIGtleXMgPSB0aGlzLmtleXM7XG4gICAgdmFyIHZhbHVlcyA9IHRoaXMudmFsdWVzO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgIGluc3RhbmNlW2tleXNbaV1dID0gdmFsdWVzW2ldLmV2YWx1YXRlKHNjb3BlLCBsb29rdXBGdW5jdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfTtcblxuICBMaXRlcmFsT2JqZWN0LnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbiBhY2NlcHQodmlzaXRvcikge1xuICAgIHJldHVybiB2aXNpdG9yLnZpc2l0TGl0ZXJhbE9iamVjdCh0aGlzKTtcbiAgfTtcblxuICBMaXRlcmFsT2JqZWN0LnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24gY29ubmVjdChiaW5kaW5nLCBzY29wZSkge1xuICAgIHZhciBsZW5ndGggPSB0aGlzLmtleXMubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMudmFsdWVzW2ldLmNvbm5lY3QoYmluZGluZywgc2NvcGUpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gTGl0ZXJhbE9iamVjdDtcbn0oRXhwcmVzc2lvbik7XG5cbmZ1bmN0aW9uIGV2YWxMaXN0KHNjb3BlLCBsaXN0LCBsb29rdXBGdW5jdGlvbnMpIHtcbiAgdmFyIGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICByZXN1bHRbaV0gPSBsaXN0W2ldLmV2YWx1YXRlKHNjb3BlLCBsb29rdXBGdW5jdGlvbnMpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGF1dG9Db252ZXJ0QWRkKGEsIGIpIHtcbiAgaWYgKGEgIT09IG51bGwgJiYgYiAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlb2YgYSA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIGIgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gYSArIGIudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGEgIT09ICdzdHJpbmcnICYmIHR5cGVvZiBiID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGEudG9TdHJpbmcoKSArIGI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGEgKyBiO1xuICB9XG5cbiAgaWYgKGEgIT09IG51bGwpIHtcbiAgICByZXR1cm4gYTtcbiAgfVxuXG4gIGlmIChiICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIGI7XG4gIH1cblxuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gZ2V0RnVuY3Rpb24ob2JqLCBuYW1lLCBtdXN0RXhpc3QpIHtcbiAgdmFyIGZ1bmMgPSBvYmogPT09IG51bGwgfHwgb2JqID09PSB1bmRlZmluZWQgPyBudWxsIDogb2JqW25hbWVdO1xuICBpZiAodHlwZW9mIGZ1bmMgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZnVuYztcbiAgfVxuICBpZiAoIW11c3RFeGlzdCAmJiAoZnVuYyA9PT0gbnVsbCB8fCBmdW5jID09PSB1bmRlZmluZWQpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKG5hbWUgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG59XG5cbmZ1bmN0aW9uIGdldEtleWVkKG9iaiwga2V5KSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICByZXR1cm4gb2JqW3BhcnNlSW50KGtleSwgMTApXTtcbiAgfSBlbHNlIGlmIChvYmopIHtcbiAgICByZXR1cm4gb2JqW2tleV07XG4gIH0gZWxzZSBpZiAob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiBvYmpba2V5XTtcbn1cblxuZnVuY3Rpb24gc2V0S2V5ZWQob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICB2YXIgaW5kZXggPSBwYXJzZUludChrZXksIDEwKTtcblxuICAgIGlmIChvYmoubGVuZ3RoIDw9IGluZGV4KSB7XG4gICAgICBvYmoubGVuZ3RoID0gaW5kZXggKyAxO1xuICAgIH1cblxuICAgIG9ialtpbmRleF0gPSB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG52YXIgX1VucGFyc2VyID0gbnVsbDtcblxuZXhwb3J0IHsgX1VucGFyc2VyIGFzIFVucGFyc2VyIH07XG5pZiAodHlwZW9mIEZFQVRVUkVfTk9fVU5QQVJTRVIgPT09ICd1bmRlZmluZWQnKSB7XG4gIF9VbnBhcnNlciA9IGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBVbnBhcnNlcihidWZmZXIpIHtcbiAgICAgIFxuXG4gICAgICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjtcbiAgICB9XG5cbiAgICBVbnBhcnNlci51bnBhcnNlID0gZnVuY3Rpb24gdW5wYXJzZShleHByZXNzaW9uKSB7XG4gICAgICB2YXIgYnVmZmVyID0gW107XG4gICAgICB2YXIgdmlzaXRvciA9IG5ldyBfVW5wYXJzZXIoYnVmZmVyKTtcblxuICAgICAgZXhwcmVzc2lvbi5hY2NlcHQodmlzaXRvcik7XG5cbiAgICAgIHJldHVybiBidWZmZXIuam9pbignJyk7XG4gICAgfTtcblxuICAgIFVucGFyc2VyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIHdyaXRlKHRleHQpIHtcbiAgICAgIHRoaXMuYnVmZmVyLnB1c2godGV4dCk7XG4gICAgfTtcblxuICAgIFVucGFyc2VyLnByb3RvdHlwZS53cml0ZUFyZ3MgPSBmdW5jdGlvbiB3cml0ZUFyZ3MoYXJncykge1xuICAgICAgdGhpcy53cml0ZSgnKCcpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gYXJncy5sZW5ndGg7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAoaSAhPT0gMCkge1xuICAgICAgICAgIHRoaXMud3JpdGUoJywnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFyZ3NbaV0uYWNjZXB0KHRoaXMpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLndyaXRlKCcpJyk7XG4gICAgfTtcblxuICAgIFVucGFyc2VyLnByb3RvdHlwZS52aXNpdEJpbmRpbmdCZWhhdmlvciA9IGZ1bmN0aW9uIHZpc2l0QmluZGluZ0JlaGF2aW9yKGJlaGF2aW9yKSB7XG4gICAgICB2YXIgYXJncyA9IGJlaGF2aW9yLmFyZ3M7XG5cbiAgICAgIGJlaGF2aW9yLmV4cHJlc3Npb24uYWNjZXB0KHRoaXMpO1xuICAgICAgdGhpcy53cml0ZSgnJicgKyBiZWhhdmlvci5uYW1lKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGFyZ3MubGVuZ3RoOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy53cml0ZSgnOicpO1xuICAgICAgICBhcmdzW2ldLmFjY2VwdCh0aGlzKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgVW5wYXJzZXIucHJvdG90eXBlLnZpc2l0VmFsdWVDb252ZXJ0ZXIgPSBmdW5jdGlvbiB2aXNpdFZhbHVlQ29udmVydGVyKGNvbnZlcnRlcikge1xuICAgICAgdmFyIGFyZ3MgPSBjb252ZXJ0ZXIuYXJncztcblxuICAgICAgY29udmVydGVyLmV4cHJlc3Npb24uYWNjZXB0KHRoaXMpO1xuICAgICAgdGhpcy53cml0ZSgnfCcgKyBjb252ZXJ0ZXIubmFtZSk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBhcmdzLmxlbmd0aDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICAgIHRoaXMud3JpdGUoJzonKTtcbiAgICAgICAgYXJnc1tpXS5hY2NlcHQodGhpcyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIFVucGFyc2VyLnByb3RvdHlwZS52aXNpdEFzc2lnbiA9IGZ1bmN0aW9uIHZpc2l0QXNzaWduKGFzc2lnbikge1xuICAgICAgYXNzaWduLnRhcmdldC5hY2NlcHQodGhpcyk7XG4gICAgICB0aGlzLndyaXRlKCc9Jyk7XG4gICAgICBhc3NpZ24udmFsdWUuYWNjZXB0KHRoaXMpO1xuICAgIH07XG5cbiAgICBVbnBhcnNlci5wcm90b3R5cGUudmlzaXRDb25kaXRpb25hbCA9IGZ1bmN0aW9uIHZpc2l0Q29uZGl0aW9uYWwoY29uZGl0aW9uYWwpIHtcbiAgICAgIGNvbmRpdGlvbmFsLmNvbmRpdGlvbi5hY2NlcHQodGhpcyk7XG4gICAgICB0aGlzLndyaXRlKCc/Jyk7XG4gICAgICBjb25kaXRpb25hbC55ZXMuYWNjZXB0KHRoaXMpO1xuICAgICAgdGhpcy53cml0ZSgnOicpO1xuICAgICAgY29uZGl0aW9uYWwubm8uYWNjZXB0KHRoaXMpO1xuICAgIH07XG5cbiAgICBVbnBhcnNlci5wcm90b3R5cGUudmlzaXRBY2Nlc3NUaGlzID0gZnVuY3Rpb24gdmlzaXRBY2Nlc3NUaGlzKGFjY2Vzcykge1xuICAgICAgaWYgKGFjY2Vzcy5hbmNlc3RvciA9PT0gMCkge1xuICAgICAgICB0aGlzLndyaXRlKCckdGhpcycpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLndyaXRlKCckcGFyZW50Jyk7XG4gICAgICB2YXIgaSA9IGFjY2Vzcy5hbmNlc3RvciAtIDE7XG4gICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgIHRoaXMud3JpdGUoJy4kcGFyZW50Jyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIFVucGFyc2VyLnByb3RvdHlwZS52aXNpdEFjY2Vzc1Njb3BlID0gZnVuY3Rpb24gdmlzaXRBY2Nlc3NTY29wZShhY2Nlc3MpIHtcbiAgICAgIHZhciBpID0gYWNjZXNzLmFuY2VzdG9yO1xuICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICB0aGlzLndyaXRlKCckcGFyZW50LicpO1xuICAgICAgfVxuICAgICAgdGhpcy53cml0ZShhY2Nlc3MubmFtZSk7XG4gICAgfTtcblxuICAgIFVucGFyc2VyLnByb3RvdHlwZS52aXNpdEFjY2Vzc01lbWJlciA9IGZ1bmN0aW9uIHZpc2l0QWNjZXNzTWVtYmVyKGFjY2Vzcykge1xuICAgICAgYWNjZXNzLm9iamVjdC5hY2NlcHQodGhpcyk7XG4gICAgICB0aGlzLndyaXRlKCcuJyArIGFjY2Vzcy5uYW1lKTtcbiAgICB9O1xuXG4gICAgVW5wYXJzZXIucHJvdG90eXBlLnZpc2l0QWNjZXNzS2V5ZWQgPSBmdW5jdGlvbiB2aXNpdEFjY2Vzc0tleWVkKGFjY2Vzcykge1xuICAgICAgYWNjZXNzLm9iamVjdC5hY2NlcHQodGhpcyk7XG4gICAgICB0aGlzLndyaXRlKCdbJyk7XG4gICAgICBhY2Nlc3Mua2V5LmFjY2VwdCh0aGlzKTtcbiAgICAgIHRoaXMud3JpdGUoJ10nKTtcbiAgICB9O1xuXG4gICAgVW5wYXJzZXIucHJvdG90eXBlLnZpc2l0Q2FsbFNjb3BlID0gZnVuY3Rpb24gdmlzaXRDYWxsU2NvcGUoY2FsbCkge1xuICAgICAgdmFyIGkgPSBjYWxsLmFuY2VzdG9yO1xuICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICB0aGlzLndyaXRlKCckcGFyZW50LicpO1xuICAgICAgfVxuICAgICAgdGhpcy53cml0ZShjYWxsLm5hbWUpO1xuICAgICAgdGhpcy53cml0ZUFyZ3MoY2FsbC5hcmdzKTtcbiAgICB9O1xuXG4gICAgVW5wYXJzZXIucHJvdG90eXBlLnZpc2l0Q2FsbEZ1bmN0aW9uID0gZnVuY3Rpb24gdmlzaXRDYWxsRnVuY3Rpb24oY2FsbCkge1xuICAgICAgY2FsbC5mdW5jLmFjY2VwdCh0aGlzKTtcbiAgICAgIHRoaXMud3JpdGVBcmdzKGNhbGwuYXJncyk7XG4gICAgfTtcblxuICAgIFVucGFyc2VyLnByb3RvdHlwZS52aXNpdENhbGxNZW1iZXIgPSBmdW5jdGlvbiB2aXNpdENhbGxNZW1iZXIoY2FsbCkge1xuICAgICAgY2FsbC5vYmplY3QuYWNjZXB0KHRoaXMpO1xuICAgICAgdGhpcy53cml0ZSgnLicgKyBjYWxsLm5hbWUpO1xuICAgICAgdGhpcy53cml0ZUFyZ3MoY2FsbC5hcmdzKTtcbiAgICB9O1xuXG4gICAgVW5wYXJzZXIucHJvdG90eXBlLnZpc2l0UHJlZml4ID0gZnVuY3Rpb24gdmlzaXRQcmVmaXgocHJlZml4KSB7XG4gICAgICB0aGlzLndyaXRlKCcoJyArIHByZWZpeC5vcGVyYXRpb24pO1xuICAgICAgaWYgKHByZWZpeC5vcGVyYXRpb24uY2hhckNvZGVBdCgwKSA+PSA5Nykge1xuICAgICAgICB0aGlzLndyaXRlKCcgJyk7XG4gICAgICB9XG4gICAgICBwcmVmaXguZXhwcmVzc2lvbi5hY2NlcHQodGhpcyk7XG4gICAgICB0aGlzLndyaXRlKCcpJyk7XG4gICAgfTtcblxuICAgIFVucGFyc2VyLnByb3RvdHlwZS52aXNpdEJpbmFyeSA9IGZ1bmN0aW9uIHZpc2l0QmluYXJ5KGJpbmFyeSkge1xuICAgICAgYmluYXJ5LmxlZnQuYWNjZXB0KHRoaXMpO1xuICAgICAgaWYgKGJpbmFyeS5vcGVyYXRpb24uY2hhckNvZGVBdCgwKSA9PT0gMTA1KSB7XG4gICAgICAgIHRoaXMud3JpdGUoJyAnICsgYmluYXJ5Lm9wZXJhdGlvbiArICcgJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLndyaXRlKGJpbmFyeS5vcGVyYXRpb24pO1xuICAgICAgfVxuICAgICAgYmluYXJ5LnJpZ2h0LmFjY2VwdCh0aGlzKTtcbiAgICB9O1xuXG4gICAgVW5wYXJzZXIucHJvdG90eXBlLnZpc2l0TGl0ZXJhbFByaW1pdGl2ZSA9IGZ1bmN0aW9uIHZpc2l0TGl0ZXJhbFByaW1pdGl2ZShsaXRlcmFsKSB7XG4gICAgICB0aGlzLndyaXRlKCcnICsgbGl0ZXJhbC52YWx1ZSk7XG4gICAgfTtcblxuICAgIFVucGFyc2VyLnByb3RvdHlwZS52aXNpdExpdGVyYWxBcnJheSA9IGZ1bmN0aW9uIHZpc2l0TGl0ZXJhbEFycmF5KGxpdGVyYWwpIHtcbiAgICAgIHZhciBlbGVtZW50cyA9IGxpdGVyYWwuZWxlbWVudHM7XG5cbiAgICAgIHRoaXMud3JpdGUoJ1snKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGVsZW1lbnRzLmxlbmd0aDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChpICE9PSAwKSB7XG4gICAgICAgICAgdGhpcy53cml0ZSgnLCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxlbWVudHNbaV0uYWNjZXB0KHRoaXMpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLndyaXRlKCddJyk7XG4gICAgfTtcblxuICAgIFVucGFyc2VyLnByb3RvdHlwZS52aXNpdExpdGVyYWxPYmplY3QgPSBmdW5jdGlvbiB2aXNpdExpdGVyYWxPYmplY3QobGl0ZXJhbCkge1xuICAgICAgdmFyIGtleXMgPSBsaXRlcmFsLmtleXM7XG4gICAgICB2YXIgdmFsdWVzID0gbGl0ZXJhbC52YWx1ZXM7XG5cbiAgICAgIHRoaXMud3JpdGUoJ3snKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKGkgIT09IDApIHtcbiAgICAgICAgICB0aGlzLndyaXRlKCcsJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLndyaXRlKCdcXCcnICsga2V5c1tpXSArICdcXCc6Jyk7XG4gICAgICAgIHZhbHVlc1tpXS5hY2NlcHQodGhpcyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMud3JpdGUoJ30nKTtcbiAgICB9O1xuXG4gICAgVW5wYXJzZXIucHJvdG90eXBlLnZpc2l0TGl0ZXJhbFN0cmluZyA9IGZ1bmN0aW9uIHZpc2l0TGl0ZXJhbFN0cmluZyhsaXRlcmFsKSB7XG4gICAgICB2YXIgZXNjYXBlZCA9IGxpdGVyYWwudmFsdWUucmVwbGFjZSgvJy9nLCBcIlxcJ1wiKTtcbiAgICAgIHRoaXMud3JpdGUoJ1xcJycgKyBlc2NhcGVkICsgJ1xcJycpO1xuICAgIH07XG5cbiAgICBVbnBhcnNlci5wcm90b3R5cGUudmlzaXRMaXRlcmFsVGVtcGxhdGUgPSBmdW5jdGlvbiB2aXNpdExpdGVyYWxUZW1wbGF0ZShsaXRlcmFsKSB7XG4gICAgICB2YXIgY29va2VkID0gbGl0ZXJhbC5jb29rZWQsXG4gICAgICAgICAgZXhwcmVzc2lvbnMgPSBsaXRlcmFsLmV4cHJlc3Npb25zO1xuXG4gICAgICB2YXIgbGVuZ3RoID0gZXhwcmVzc2lvbnMubGVuZ3RoO1xuICAgICAgdGhpcy53cml0ZSgnYCcpO1xuICAgICAgdGhpcy53cml0ZShjb29rZWRbMF0pO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBleHByZXNzaW9uc1tpXS5hY2NlcHQodGhpcyk7XG4gICAgICAgIHRoaXMud3JpdGUoY29va2VkW2kgKyAxXSk7XG4gICAgICB9XG4gICAgICB0aGlzLndyaXRlKCdgJyk7XG4gICAgfTtcblxuICAgIHJldHVybiBVbnBhcnNlcjtcbiAgfSgpO1xufVxuXG5leHBvcnQgdmFyIEV4cHJlc3Npb25DbG9uZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEV4cHJlc3Npb25DbG9uZXIoKSB7XG4gICAgXG4gIH1cblxuICBFeHByZXNzaW9uQ2xvbmVyLnByb3RvdHlwZS5jbG9uZUV4cHJlc3Npb25BcnJheSA9IGZ1bmN0aW9uIGNsb25lRXhwcmVzc2lvbkFycmF5KGFycmF5KSB7XG4gICAgdmFyIGNsb25lZEFycmF5ID0gW107XG4gICAgdmFyIGkgPSBhcnJheS5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgY2xvbmVkQXJyYXlbaV0gPSBhcnJheVtpXS5hY2NlcHQodGhpcyk7XG4gICAgfVxuICAgIHJldHVybiBjbG9uZWRBcnJheTtcbiAgfTtcblxuICBFeHByZXNzaW9uQ2xvbmVyLnByb3RvdHlwZS52aXNpdEJpbmRpbmdCZWhhdmlvciA9IGZ1bmN0aW9uIHZpc2l0QmluZGluZ0JlaGF2aW9yKGJlaGF2aW9yKSB7XG4gICAgcmV0dXJuIG5ldyBCaW5kaW5nQmVoYXZpb3IoYmVoYXZpb3IuZXhwcmVzc2lvbi5hY2NlcHQodGhpcyksIGJlaGF2aW9yLm5hbWUsIHRoaXMuY2xvbmVFeHByZXNzaW9uQXJyYXkoYmVoYXZpb3IuYXJncykpO1xuICB9O1xuXG4gIEV4cHJlc3Npb25DbG9uZXIucHJvdG90eXBlLnZpc2l0VmFsdWVDb252ZXJ0ZXIgPSBmdW5jdGlvbiB2aXNpdFZhbHVlQ29udmVydGVyKGNvbnZlcnRlcikge1xuICAgIHJldHVybiBuZXcgVmFsdWVDb252ZXJ0ZXIoY29udmVydGVyLmV4cHJlc3Npb24uYWNjZXB0KHRoaXMpLCBjb252ZXJ0ZXIubmFtZSwgdGhpcy5jbG9uZUV4cHJlc3Npb25BcnJheShjb252ZXJ0ZXIuYXJncykpO1xuICB9O1xuXG4gIEV4cHJlc3Npb25DbG9uZXIucHJvdG90eXBlLnZpc2l0QXNzaWduID0gZnVuY3Rpb24gdmlzaXRBc3NpZ24oYXNzaWduKSB7XG4gICAgcmV0dXJuIG5ldyBBc3NpZ24oYXNzaWduLnRhcmdldC5hY2NlcHQodGhpcyksIGFzc2lnbi52YWx1ZS5hY2NlcHQodGhpcykpO1xuICB9O1xuXG4gIEV4cHJlc3Npb25DbG9uZXIucHJvdG90eXBlLnZpc2l0Q29uZGl0aW9uYWwgPSBmdW5jdGlvbiB2aXNpdENvbmRpdGlvbmFsKGNvbmRpdGlvbmFsKSB7XG4gICAgcmV0dXJuIG5ldyBDb25kaXRpb25hbChjb25kaXRpb25hbC5jb25kaXRpb24uYWNjZXB0KHRoaXMpLCBjb25kaXRpb25hbC55ZXMuYWNjZXB0KHRoaXMpLCBjb25kaXRpb25hbC5uby5hY2NlcHQodGhpcykpO1xuICB9O1xuXG4gIEV4cHJlc3Npb25DbG9uZXIucHJvdG90eXBlLnZpc2l0QWNjZXNzVGhpcyA9IGZ1bmN0aW9uIHZpc2l0QWNjZXNzVGhpcyhhY2Nlc3MpIHtcbiAgICByZXR1cm4gbmV3IEFjY2Vzc1RoaXMoYWNjZXNzLmFuY2VzdG9yKTtcbiAgfTtcblxuICBFeHByZXNzaW9uQ2xvbmVyLnByb3RvdHlwZS52aXNpdEFjY2Vzc1Njb3BlID0gZnVuY3Rpb24gdmlzaXRBY2Nlc3NTY29wZShhY2Nlc3MpIHtcbiAgICByZXR1cm4gbmV3IEFjY2Vzc1Njb3BlKGFjY2Vzcy5uYW1lLCBhY2Nlc3MuYW5jZXN0b3IpO1xuICB9O1xuXG4gIEV4cHJlc3Npb25DbG9uZXIucHJvdG90eXBlLnZpc2l0QWNjZXNzTWVtYmVyID0gZnVuY3Rpb24gdmlzaXRBY2Nlc3NNZW1iZXIoYWNjZXNzKSB7XG4gICAgcmV0dXJuIG5ldyBBY2Nlc3NNZW1iZXIoYWNjZXNzLm9iamVjdC5hY2NlcHQodGhpcyksIGFjY2Vzcy5uYW1lKTtcbiAgfTtcblxuICBFeHByZXNzaW9uQ2xvbmVyLnByb3RvdHlwZS52aXNpdEFjY2Vzc0tleWVkID0gZnVuY3Rpb24gdmlzaXRBY2Nlc3NLZXllZChhY2Nlc3MpIHtcbiAgICByZXR1cm4gbmV3IEFjY2Vzc0tleWVkKGFjY2Vzcy5vYmplY3QuYWNjZXB0KHRoaXMpLCBhY2Nlc3Mua2V5LmFjY2VwdCh0aGlzKSk7XG4gIH07XG5cbiAgRXhwcmVzc2lvbkNsb25lci5wcm90b3R5cGUudmlzaXRDYWxsU2NvcGUgPSBmdW5jdGlvbiB2aXNpdENhbGxTY29wZShjYWxsKSB7XG4gICAgcmV0dXJuIG5ldyBDYWxsU2NvcGUoY2FsbC5uYW1lLCB0aGlzLmNsb25lRXhwcmVzc2lvbkFycmF5KGNhbGwuYXJncyksIGNhbGwuYW5jZXN0b3IpO1xuICB9O1xuXG4gIEV4cHJlc3Npb25DbG9uZXIucHJvdG90eXBlLnZpc2l0Q2FsbEZ1bmN0aW9uID0gZnVuY3Rpb24gdmlzaXRDYWxsRnVuY3Rpb24oY2FsbCkge1xuICAgIHJldHVybiBuZXcgQ2FsbEZ1bmN0aW9uKGNhbGwuZnVuYy5hY2NlcHQodGhpcyksIHRoaXMuY2xvbmVFeHByZXNzaW9uQXJyYXkoY2FsbC5hcmdzKSk7XG4gIH07XG5cbiAgRXhwcmVzc2lvbkNsb25lci5wcm90b3R5cGUudmlzaXRDYWxsTWVtYmVyID0gZnVuY3Rpb24gdmlzaXRDYWxsTWVtYmVyKGNhbGwpIHtcbiAgICByZXR1cm4gbmV3IENhbGxNZW1iZXIoY2FsbC5vYmplY3QuYWNjZXB0KHRoaXMpLCBjYWxsLm5hbWUsIHRoaXMuY2xvbmVFeHByZXNzaW9uQXJyYXkoY2FsbC5hcmdzKSk7XG4gIH07XG5cbiAgRXhwcmVzc2lvbkNsb25lci5wcm90b3R5cGUudmlzaXRVbmFyeSA9IGZ1bmN0aW9uIHZpc2l0VW5hcnkodW5hcnkpIHtcbiAgICByZXR1cm4gbmV3IFVuYXJ5KHByZWZpeC5vcGVyYXRpb24sIHByZWZpeC5leHByZXNzaW9uLmFjY2VwdCh0aGlzKSk7XG4gIH07XG5cbiAgRXhwcmVzc2lvbkNsb25lci5wcm90b3R5cGUudmlzaXRCaW5hcnkgPSBmdW5jdGlvbiB2aXNpdEJpbmFyeShiaW5hcnkpIHtcbiAgICByZXR1cm4gbmV3IEJpbmFyeShiaW5hcnkub3BlcmF0aW9uLCBiaW5hcnkubGVmdC5hY2NlcHQodGhpcyksIGJpbmFyeS5yaWdodC5hY2NlcHQodGhpcykpO1xuICB9O1xuXG4gIEV4cHJlc3Npb25DbG9uZXIucHJvdG90eXBlLnZpc2l0TGl0ZXJhbFByaW1pdGl2ZSA9IGZ1bmN0aW9uIHZpc2l0TGl0ZXJhbFByaW1pdGl2ZShsaXRlcmFsKSB7XG4gICAgcmV0dXJuIG5ldyBMaXRlcmFsUHJpbWl0aXZlKGxpdGVyYWwpO1xuICB9O1xuXG4gIEV4cHJlc3Npb25DbG9uZXIucHJvdG90eXBlLnZpc2l0TGl0ZXJhbEFycmF5ID0gZnVuY3Rpb24gdmlzaXRMaXRlcmFsQXJyYXkobGl0ZXJhbCkge1xuICAgIHJldHVybiBuZXcgTGl0ZXJhbEFycmF5KHRoaXMuY2xvbmVFeHByZXNzaW9uQXJyYXkobGl0ZXJhbC5lbGVtZW50cykpO1xuICB9O1xuXG4gIEV4cHJlc3Npb25DbG9uZXIucHJvdG90eXBlLnZpc2l0TGl0ZXJhbE9iamVjdCA9IGZ1bmN0aW9uIHZpc2l0TGl0ZXJhbE9iamVjdChsaXRlcmFsKSB7XG4gICAgcmV0dXJuIG5ldyBMaXRlcmFsT2JqZWN0KGxpdGVyYWwua2V5cywgdGhpcy5jbG9uZUV4cHJlc3Npb25BcnJheShsaXRlcmFsLnZhbHVlcykpO1xuICB9O1xuXG4gIEV4cHJlc3Npb25DbG9uZXIucHJvdG90eXBlLnZpc2l0TGl0ZXJhbFN0cmluZyA9IGZ1bmN0aW9uIHZpc2l0TGl0ZXJhbFN0cmluZyhsaXRlcmFsKSB7XG4gICAgcmV0dXJuIG5ldyBMaXRlcmFsU3RyaW5nKGxpdGVyYWwudmFsdWUpO1xuICB9O1xuXG4gIEV4cHJlc3Npb25DbG9uZXIucHJvdG90eXBlLnZpc2l0TGl0ZXJhbFRlbXBsYXRlID0gZnVuY3Rpb24gdmlzaXRMaXRlcmFsVGVtcGxhdGUobGl0ZXJhbCkge1xuICAgIHJldHVybiBuZXcgTGl0ZXJhbFRlbXBsYXRlKGxpdGVyYWwuY29va2VkLCB0aGlzLmNsb25lRXhwcmVzc2lvbkFycmF5KGxpdGVyYWwuZXhwcmVzc2lvbnMpLCBsaXRlcmFsLnJhdywgbGl0ZXJhbC50YWcgJiYgbGl0ZXJhbC50YWcuYWNjZXB0KHRoaXMpKTtcbiAgfTtcblxuICByZXR1cm4gRXhwcmVzc2lvbkNsb25lcjtcbn0oKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNsb25lRXhwcmVzc2lvbihleHByZXNzaW9uKSB7XG4gIHZhciB2aXNpdG9yID0gbmV3IEV4cHJlc3Npb25DbG9uZXIoKTtcbiAgcmV0dXJuIGV4cHJlc3Npb24uYWNjZXB0KHZpc2l0b3IpO1xufVxuXG5leHBvcnQgdmFyIGJpbmRpbmdNb2RlID0ge1xuICBvbmVUaW1lOiAwLFxuICB0b1ZpZXc6IDEsXG4gIG9uZVdheTogMSxcbiAgdHdvV2F5OiAyLFxuICBmcm9tVmlldzogM1xufTtcblxuZXhwb3J0IHZhciBQYXJzZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFBhcnNlcigpIHtcbiAgICBcblxuICAgIHRoaXMuY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB9XG5cbiAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uIHBhcnNlKHNyYykge1xuICAgIHNyYyA9IHNyYyB8fCAnJztcblxuICAgIHJldHVybiB0aGlzLmNhY2hlW3NyY10gfHwgKHRoaXMuY2FjaGVbc3JjXSA9IG5ldyBQYXJzZXJJbXBsZW1lbnRhdGlvbihzcmMpLnBhcnNlQmluZGluZ0JlaGF2aW9yKCkpO1xuICB9O1xuXG4gIHJldHVybiBQYXJzZXI7XG59KCk7XG5cbnZhciBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xuXG5leHBvcnQgdmFyIFBhcnNlckltcGxlbWVudGF0aW9uID0gZnVuY3Rpb24gKCkge1xuICBfY3JlYXRlQ2xhc3MoUGFyc2VySW1wbGVtZW50YXRpb24sIFt7XG4gICAga2V5OiAncmF3JyxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNyYy5zbGljZSh0aGlzLnN0YXJ0LCB0aGlzLmlkeCk7XG4gICAgfVxuICB9XSk7XG5cbiAgZnVuY3Rpb24gUGFyc2VySW1wbGVtZW50YXRpb24oc3JjKSB7XG4gICAgXG5cbiAgICB0aGlzLmlkeCA9IDA7XG5cbiAgICB0aGlzLnN0YXJ0ID0gMDtcblxuICAgIHRoaXMuc3JjID0gc3JjO1xuICAgIHRoaXMubGVuID0gc3JjLmxlbmd0aDtcblxuICAgIHRoaXMudGtuID0gVCRFT0Y7XG5cbiAgICB0aGlzLnZhbCA9IHVuZGVmaW5lZDtcblxuICAgIHRoaXMuY2ggPSBzcmMuY2hhckNvZGVBdCgwKTtcbiAgfVxuXG4gIFBhcnNlckltcGxlbWVudGF0aW9uLnByb3RvdHlwZS5wYXJzZUJpbmRpbmdCZWhhdmlvciA9IGZ1bmN0aW9uIHBhcnNlQmluZGluZ0JlaGF2aW9yKCkge1xuICAgIHRoaXMubmV4dFRva2VuKCk7XG4gICAgaWYgKHRoaXMudGtuICYgVCRFeHByZXNzaW9uVGVybWluYWwpIHtcbiAgICAgIHRoaXMuZXJyKCdJbnZhbGlkIHN0YXJ0IG9mIGV4cHJlc3Npb24nKTtcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMucGFyc2VWYWx1ZUNvbnZlcnRlcigpO1xuICAgIHdoaWxlICh0aGlzLm9wdChUJEFtcGVyc2FuZCkpIHtcbiAgICAgIHJlc3VsdCA9IG5ldyBCaW5kaW5nQmVoYXZpb3IocmVzdWx0LCB0aGlzLnZhbCwgdGhpcy5wYXJzZVZhcmlhZGljQXJncygpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGtuICE9PSBUJEVPRikge1xuICAgICAgdGhpcy5lcnIoJ1VuY29uc3VtZWQgdG9rZW4gJyArIHRoaXMucmF3KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBQYXJzZXJJbXBsZW1lbnRhdGlvbi5wcm90b3R5cGUucGFyc2VWYWx1ZUNvbnZlcnRlciA9IGZ1bmN0aW9uIHBhcnNlVmFsdWVDb252ZXJ0ZXIoKSB7XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7XG4gICAgd2hpbGUgKHRoaXMub3B0KFQkQmFyKSkge1xuICAgICAgcmVzdWx0ID0gbmV3IFZhbHVlQ29udmVydGVyKHJlc3VsdCwgdGhpcy52YWwsIHRoaXMucGFyc2VWYXJpYWRpY0FyZ3MoKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgUGFyc2VySW1wbGVtZW50YXRpb24ucHJvdG90eXBlLnBhcnNlVmFyaWFkaWNBcmdzID0gZnVuY3Rpb24gcGFyc2VWYXJpYWRpY0FyZ3MoKSB7XG4gICAgdGhpcy5uZXh0VG9rZW4oKTtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgd2hpbGUgKHRoaXMub3B0KFQkQ29sb24pKSB7XG4gICAgICByZXN1bHQucHVzaCh0aGlzLnBhcnNlRXhwcmVzc2lvbigpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBQYXJzZXJJbXBsZW1lbnRhdGlvbi5wcm90b3R5cGUucGFyc2VFeHByZXNzaW9uID0gZnVuY3Rpb24gcGFyc2VFeHByZXNzaW9uKCkge1xuICAgIHZhciBleHByU3RhcnQgPSB0aGlzLmlkeDtcbiAgICB2YXIgcmVzdWx0ID0gdGhpcy5wYXJzZUNvbmRpdGlvbmFsKCk7XG5cbiAgICB3aGlsZSAodGhpcy50a24gPT09IFQkRXEpIHtcbiAgICAgIGlmICghcmVzdWx0LmlzQXNzaWduYWJsZSkge1xuICAgICAgICB0aGlzLmVycignRXhwcmVzc2lvbiAnICsgdGhpcy5zcmMuc2xpY2UoZXhwclN0YXJ0LCB0aGlzLnN0YXJ0KSArICcgaXMgbm90IGFzc2lnbmFibGUnKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubmV4dFRva2VuKCk7XG4gICAgICBleHByU3RhcnQgPSB0aGlzLmlkeDtcbiAgICAgIHJlc3VsdCA9IG5ldyBBc3NpZ24ocmVzdWx0LCB0aGlzLnBhcnNlQ29uZGl0aW9uYWwoKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgUGFyc2VySW1wbGVtZW50YXRpb24ucHJvdG90eXBlLnBhcnNlQ29uZGl0aW9uYWwgPSBmdW5jdGlvbiBwYXJzZUNvbmRpdGlvbmFsKCkge1xuICAgIHZhciByZXN1bHQgPSB0aGlzLnBhcnNlQmluYXJ5KDApO1xuXG4gICAgaWYgKHRoaXMub3B0KFQkUXVlc3Rpb24pKSB7XG4gICAgICB2YXIgeWVzID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgIHRoaXMuZXhwZWN0KFQkQ29sb24pO1xuICAgICAgcmVzdWx0ID0gbmV3IENvbmRpdGlvbmFsKHJlc3VsdCwgeWVzLCB0aGlzLnBhcnNlRXhwcmVzc2lvbigpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBQYXJzZXJJbXBsZW1lbnRhdGlvbi5wcm90b3R5cGUucGFyc2VCaW5hcnkgPSBmdW5jdGlvbiBwYXJzZUJpbmFyeShtaW5QcmVjZWRlbmNlKSB7XG4gICAgdmFyIGxlZnQgPSB0aGlzLnBhcnNlTGVmdEhhbmRTaWRlKDApO1xuXG4gICAgd2hpbGUgKHRoaXMudGtuICYgVCRCaW5hcnlPcCkge1xuICAgICAgdmFyIG9wVG9rZW4gPSB0aGlzLnRrbjtcbiAgICAgIGlmICgob3BUb2tlbiAmIFQkUHJlY2VkZW5jZSkgPD0gbWluUHJlY2VkZW5jZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHRoaXMubmV4dFRva2VuKCk7XG4gICAgICBsZWZ0ID0gbmV3IEJpbmFyeShUb2tlblZhbHVlc1tvcFRva2VuICYgVCRUb2tlbk1hc2tdLCBsZWZ0LCB0aGlzLnBhcnNlQmluYXJ5KG9wVG9rZW4gJiBUJFByZWNlZGVuY2UpKTtcbiAgICB9XG4gICAgcmV0dXJuIGxlZnQ7XG4gIH07XG5cbiAgUGFyc2VySW1wbGVtZW50YXRpb24ucHJvdG90eXBlLnBhcnNlTGVmdEhhbmRTaWRlID0gZnVuY3Rpb24gcGFyc2VMZWZ0SGFuZFNpZGUoY29udGV4dCkge1xuICAgIHZhciByZXN1bHQgPSB2b2lkIDA7XG5cbiAgICBwcmltYXJ5OiBzd2l0Y2ggKHRoaXMudGtuKSB7XG4gICAgICBjYXNlIFQkUGx1czpcbiAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VMZWZ0SGFuZFNpZGUoMCk7XG4gICAgICBjYXNlIFQkTWludXM6XG4gICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG4gICAgICAgIHJldHVybiBuZXcgQmluYXJ5KCctJywgbmV3IExpdGVyYWxQcmltaXRpdmUoMCksIHRoaXMucGFyc2VMZWZ0SGFuZFNpZGUoMCkpO1xuICAgICAgY2FzZSBUJEJhbmc6XG4gICAgICBjYXNlIFQkVHlwZW9mS2V5d29yZDpcbiAgICAgIGNhc2UgVCRWb2lkS2V5d29yZDpcbiAgICAgICAgdmFyIG9wID0gVG9rZW5WYWx1ZXNbdGhpcy50a24gJiBUJFRva2VuTWFza107XG4gICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG4gICAgICAgIHJldHVybiBuZXcgVW5hcnkob3AsIHRoaXMucGFyc2VMZWZ0SGFuZFNpZGUoMCkpO1xuICAgICAgY2FzZSBUJFBhcmVudFNjb3BlOlxuICAgICAgICB7XG4gICAgICAgICAgZG8ge1xuICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTtcbiAgICAgICAgICAgIGNvbnRleHQrKztcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdChUJFBlcmlvZCkpIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMudGtuID09PSBUJFBlcmlvZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudGtuICYgVCRBY2Nlc3NTY29wZVRlcm1pbmFsKSB7XG4gICAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBBY2Nlc3NUaGlzKGNvbnRleHQgJiBDJEFuY2VzdG9yKTtcblxuICAgICAgICAgICAgICBjb250ZXh0ID0gY29udGV4dCAmIEMkU2hvcnRoYW5kUHJvcCB8IEMkVGhpcztcbiAgICAgICAgICAgICAgYnJlYWsgcHJpbWFyeTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuZXJyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSB3aGlsZSAodGhpcy50a24gPT09IFQkUGFyZW50U2NvcGUpO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgVCRJZGVudGlmaWVyOlxuICAgICAgICB7XG4gICAgICAgICAgcmVzdWx0ID0gbmV3IEFjY2Vzc1Njb3BlKHRoaXMudmFsLCBjb250ZXh0ICYgQyRBbmNlc3Rvcik7XG4gICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTtcbiAgICAgICAgICBjb250ZXh0ID0gY29udGV4dCAmIEMkU2hvcnRoYW5kUHJvcCB8IEMkU2NvcGU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgVCRUaGlzU2NvcGU6XG4gICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG4gICAgICAgIHJlc3VsdCA9IG5ldyBBY2Nlc3NUaGlzKDApO1xuICAgICAgICBjb250ZXh0ID0gY29udGV4dCAmIEMkU2hvcnRoYW5kUHJvcCB8IEMkVGhpcztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFQkTFBhcmVuOlxuICAgICAgICB0aGlzLm5leHRUb2tlbigpO1xuICAgICAgICByZXN1bHQgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpO1xuICAgICAgICB0aGlzLmV4cGVjdChUJFJQYXJlbik7XG4gICAgICAgIGNvbnRleHQgPSBDJFByaW1hcnk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBUJExCcmFja2V0OlxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTtcbiAgICAgICAgICB2YXIgX2VsZW1lbnRzID0gW107XG4gICAgICAgICAgaWYgKHRoaXMudGtuICE9PSBUJFJCcmFja2V0KSB7XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgIF9lbGVtZW50cy5wdXNoKHRoaXMucGFyc2VFeHByZXNzaW9uKCkpO1xuICAgICAgICAgICAgfSB3aGlsZSAodGhpcy5vcHQoVCRDb21tYSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmV4cGVjdChUJFJCcmFja2V0KTtcbiAgICAgICAgICByZXN1bHQgPSBuZXcgTGl0ZXJhbEFycmF5KF9lbGVtZW50cyk7XG4gICAgICAgICAgY29udGV4dCA9IEMkUHJpbWFyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgY2FzZSBUJExCcmFjZTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG4gICAgICAgICAgd2hpbGUgKHRoaXMudGtuICE9PSBUJFJCcmFjZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudGtuICYgVCRJZGVudGlmaWVyT3JLZXl3b3JkKSB7XG4gICAgICAgICAgICAgIHZhciBjaCA9IHRoaXMuY2gsXG4gICAgICAgICAgICAgICAgICB0a24gPSB0aGlzLnRrbixcbiAgICAgICAgICAgICAgICAgIGlkeCA9IHRoaXMuaWR4O1xuXG4gICAgICAgICAgICAgIGtleXMucHVzaCh0aGlzLnZhbCk7XG4gICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG4gICAgICAgICAgICAgIGlmICh0aGlzLm9wdChUJENvbG9uKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKHRoaXMucGFyc2VFeHByZXNzaW9uKCkpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY2ggPSBjaDtcbiAgICAgICAgICAgICAgICB0aGlzLnRrbiA9IHRrbjtcbiAgICAgICAgICAgICAgICB0aGlzLmlkeCA9IGlkeDtcbiAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaCh0aGlzLnBhcnNlTGVmdEhhbmRTaWRlKEMkU2hvcnRoYW5kUHJvcCkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudGtuICYgVCRMaXRlcmFsKSB7XG4gICAgICAgICAgICAgIGtleXMucHVzaCh0aGlzLnZhbCk7XG4gICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG4gICAgICAgICAgICAgIHRoaXMuZXhwZWN0KFQkQ29sb24pO1xuICAgICAgICAgICAgICB2YWx1ZXMucHVzaCh0aGlzLnBhcnNlRXhwcmVzc2lvbigpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuZXJyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy50a24gIT09IFQkUkJyYWNlKSB7XG4gICAgICAgICAgICAgIHRoaXMuZXhwZWN0KFQkQ29tbWEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmV4cGVjdChUJFJCcmFjZSk7XG4gICAgICAgICAgcmVzdWx0ID0gbmV3IExpdGVyYWxPYmplY3Qoa2V5cywgdmFsdWVzKTtcbiAgICAgICAgICBjb250ZXh0ID0gQyRQcmltYXJ5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICBjYXNlIFQkU3RyaW5nTGl0ZXJhbDpcbiAgICAgICAgcmVzdWx0ID0gbmV3IExpdGVyYWxTdHJpbmcodGhpcy52YWwpO1xuICAgICAgICB0aGlzLm5leHRUb2tlbigpO1xuICAgICAgICBjb250ZXh0ID0gQyRQcmltYXJ5O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVCRUZW1wbGF0ZVRhaWw6XG4gICAgICAgIHJlc3VsdCA9IG5ldyBMaXRlcmFsVGVtcGxhdGUoW3RoaXMudmFsXSk7XG4gICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG4gICAgICAgIGNvbnRleHQgPSBDJFByaW1hcnk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBUJFRlbXBsYXRlQ29udGludWF0aW9uOlxuICAgICAgICByZXN1bHQgPSB0aGlzLnBhcnNlVGVtcGxhdGUoMCk7XG4gICAgICAgIGNvbnRleHQgPSBDJFByaW1hcnk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBUJE51bWVyaWNMaXRlcmFsOlxuICAgICAgICB7XG4gICAgICAgICAgcmVzdWx0ID0gbmV3IExpdGVyYWxQcmltaXRpdmUodGhpcy52YWwpO1xuICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgY2FzZSBUJE51bGxLZXl3b3JkOlxuICAgICAgY2FzZSBUJFVuZGVmaW5lZEtleXdvcmQ6XG4gICAgICBjYXNlIFQkVHJ1ZUtleXdvcmQ6XG4gICAgICBjYXNlIFQkRmFsc2VLZXl3b3JkOlxuICAgICAgICByZXN1bHQgPSBuZXcgTGl0ZXJhbFByaW1pdGl2ZShUb2tlblZhbHVlc1t0aGlzLnRrbiAmIFQkVG9rZW5NYXNrXSk7XG4gICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG4gICAgICAgIGNvbnRleHQgPSBDJFByaW1hcnk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHRoaXMuaWR4ID49IHRoaXMubGVuKSB7XG4gICAgICAgICAgdGhpcy5lcnIoJ1VuZXhwZWN0ZWQgZW5kIG9mIGV4cHJlc3Npb24nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmVycigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvbnRleHQgJiBDJFNob3J0aGFuZFByb3ApIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdmFyIG5hbWUgPSB0aGlzLnZhbDtcbiAgICB3aGlsZSAodGhpcy50a24gJiBUJE1lbWJlck9yQ2FsbEV4cHJlc3Npb24pIHtcbiAgICAgIHN3aXRjaCAodGhpcy50a24pIHtcbiAgICAgICAgY2FzZSBUJFBlcmlvZDpcbiAgICAgICAgICB0aGlzLm5leHRUb2tlbigpO1xuICAgICAgICAgIGlmICghKHRoaXMudGtuICYgVCRJZGVudGlmaWVyT3JLZXl3b3JkKSkge1xuICAgICAgICAgICAgdGhpcy5lcnIoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbmFtZSA9IHRoaXMudmFsO1xuICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG5cbiAgICAgICAgICBjb250ZXh0ID0gY29udGV4dCAmIEMkUHJpbWFyeSB8IChjb250ZXh0ICYgKEMkVGhpcyB8IEMkU2NvcGUpKSA8PCAxIHwgY29udGV4dCAmIEMkTWVtYmVyIHwgKGNvbnRleHQgJiBDJEtleWVkKSA+PiAxIHwgKGNvbnRleHQgJiBDJENhbGwpID4+IDI7XG4gICAgICAgICAgaWYgKHRoaXMudGtuID09PSBUJExQYXJlbikge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjb250ZXh0ICYgQyRTY29wZSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gbmV3IEFjY2Vzc1Njb3BlKG5hbWUsIHJlc3VsdC5hbmNlc3Rvcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBBY2Nlc3NNZW1iZXIocmVzdWx0LCBuYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgVCRMQnJhY2tldDpcbiAgICAgICAgICB0aGlzLm5leHRUb2tlbigpO1xuICAgICAgICAgIGNvbnRleHQgPSBDJEtleWVkO1xuICAgICAgICAgIHJlc3VsdCA9IG5ldyBBY2Nlc3NLZXllZChyZXN1bHQsIHRoaXMucGFyc2VFeHByZXNzaW9uKCkpO1xuICAgICAgICAgIHRoaXMuZXhwZWN0KFQkUkJyYWNrZXQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFQkTFBhcmVuOlxuICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG4gICAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgICB3aGlsZSAodGhpcy50a24gIT09IFQkUlBhcmVuKSB7XG4gICAgICAgICAgICBhcmdzLnB1c2godGhpcy5wYXJzZUV4cHJlc3Npb24oKSk7XG4gICAgICAgICAgICBpZiAoIXRoaXMub3B0KFQkQ29tbWEpKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmV4cGVjdChUJFJQYXJlbik7XG4gICAgICAgICAgaWYgKGNvbnRleHQgJiBDJFNjb3BlKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBuZXcgQ2FsbFNjb3BlKG5hbWUsIGFyZ3MsIHJlc3VsdC5hbmNlc3Rvcik7XG4gICAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0ICYgKEMkTWVtYmVyIHwgQyRQcmltYXJ5KSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gbmV3IENhbGxNZW1iZXIocmVzdWx0LCBuYW1lLCBhcmdzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gbmV3IENhbGxGdW5jdGlvbihyZXN1bHQsIGFyZ3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250ZXh0ID0gQyRDYWxsO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFQkVGVtcGxhdGVUYWlsOlxuICAgICAgICAgIHJlc3VsdCA9IG5ldyBMaXRlcmFsVGVtcGxhdGUoW3RoaXMudmFsXSwgW10sIFt0aGlzLnJhd10sIHJlc3VsdCk7XG4gICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBUJFRlbXBsYXRlQ29udGludWF0aW9uOlxuICAgICAgICAgIHJlc3VsdCA9IHRoaXMucGFyc2VUZW1wbGF0ZShjb250ZXh0IHwgQyRUYWdnZWQsIHJlc3VsdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBQYXJzZXJJbXBsZW1lbnRhdGlvbi5wcm90b3R5cGUucGFyc2VUZW1wbGF0ZSA9IGZ1bmN0aW9uIHBhcnNlVGVtcGxhdGUoY29udGV4dCwgZnVuYykge1xuICAgIHZhciBjb29rZWQgPSBbdGhpcy52YWxdO1xuICAgIHZhciByYXcgPSBjb250ZXh0ICYgQyRUYWdnZWQgPyBbdGhpcy5yYXddIDogdW5kZWZpbmVkO1xuICAgIHRoaXMuZXhwZWN0KFQkVGVtcGxhdGVDb250aW51YXRpb24pO1xuICAgIHZhciBleHByZXNzaW9ucyA9IFt0aGlzLnBhcnNlRXhwcmVzc2lvbigpXTtcblxuICAgIHdoaWxlICgodGhpcy50a24gPSB0aGlzLnNjYW5UZW1wbGF0ZVRhaWwoKSkgIT09IFQkVGVtcGxhdGVUYWlsKSB7XG4gICAgICBjb29rZWQucHVzaCh0aGlzLnZhbCk7XG4gICAgICBpZiAoY29udGV4dCAmIEMkVGFnZ2VkKSB7XG4gICAgICAgIHJhdy5wdXNoKHRoaXMucmF3KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXhwZWN0KFQkVGVtcGxhdGVDb250aW51YXRpb24pO1xuICAgICAgZXhwcmVzc2lvbnMucHVzaCh0aGlzLnBhcnNlRXhwcmVzc2lvbigpKTtcbiAgICB9XG5cbiAgICBjb29rZWQucHVzaCh0aGlzLnZhbCk7XG4gICAgaWYgKGNvbnRleHQgJiBDJFRhZ2dlZCkge1xuICAgICAgcmF3LnB1c2godGhpcy5yYXcpO1xuICAgIH1cbiAgICB0aGlzLm5leHRUb2tlbigpO1xuICAgIHJldHVybiBuZXcgTGl0ZXJhbFRlbXBsYXRlKGNvb2tlZCwgZXhwcmVzc2lvbnMsIHJhdywgZnVuYyk7XG4gIH07XG5cbiAgUGFyc2VySW1wbGVtZW50YXRpb24ucHJvdG90eXBlLm5leHRUb2tlbiA9IGZ1bmN0aW9uIG5leHRUb2tlbigpIHtcbiAgICB3aGlsZSAodGhpcy5pZHggPCB0aGlzLmxlbikge1xuICAgICAgaWYgKHRoaXMuY2ggPD0gMHgyMCkge1xuICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB0aGlzLnN0YXJ0ID0gdGhpcy5pZHg7XG4gICAgICBpZiAodGhpcy5jaCA9PT0gMHgyNCB8fCB0aGlzLmNoID49IDB4NjEgJiYgdGhpcy5jaCA8PSAweDdBKSB7XG4gICAgICAgIHRoaXMudGtuID0gdGhpcy5zY2FuSWRlbnRpZmllcigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICgodGhpcy50a24gPSBDaGFyU2Nhbm5lcnNbdGhpcy5jaF0odGhpcykpICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy50a24gPSBUJEVPRjtcbiAgfTtcblxuICBQYXJzZXJJbXBsZW1lbnRhdGlvbi5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2ggPSB0aGlzLnNyYy5jaGFyQ29kZUF0KCsrdGhpcy5pZHgpO1xuICB9O1xuXG4gIFBhcnNlckltcGxlbWVudGF0aW9uLnByb3RvdHlwZS5zY2FuSWRlbnRpZmllciA9IGZ1bmN0aW9uIHNjYW5JZGVudGlmaWVyKCkge1xuICAgIHdoaWxlIChBc2NpaUlkUGFydHMuaGFzKHRoaXMubmV4dCgpKSB8fCB0aGlzLmNoID4gMHg3RiAmJiBJZFBhcnRzW3RoaXMuY2hdKSB7fVxuXG4gICAgcmV0dXJuIEtleXdvcmRMb29rdXBbdGhpcy52YWwgPSB0aGlzLnJhd10gfHwgVCRJZGVudGlmaWVyO1xuICB9O1xuXG4gIFBhcnNlckltcGxlbWVudGF0aW9uLnByb3RvdHlwZS5zY2FuTnVtYmVyID0gZnVuY3Rpb24gc2Nhbk51bWJlcihpc0Zsb2F0KSB7XG4gICAgaWYgKGlzRmxvYXQpIHtcbiAgICAgIHRoaXMudmFsID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWwgPSB0aGlzLmNoIC0gMHgzMDtcbiAgICAgIHdoaWxlICh0aGlzLm5leHQoKSA8PSAweDM5ICYmIHRoaXMuY2ggPj0gMHgzMCkge1xuICAgICAgICB0aGlzLnZhbCA9IHRoaXMudmFsICogMTAgKyB0aGlzLmNoIC0gMHgzMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNGbG9hdCB8fCB0aGlzLmNoID09PSAweDJFKSB7XG4gICAgICBpZiAoIWlzRmxvYXQpIHtcbiAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICB9XG4gICAgICB2YXIgc3RhcnQgPSB0aGlzLmlkeDtcbiAgICAgIHZhciB2YWx1ZSA9IHRoaXMuY2ggLSAweDMwO1xuICAgICAgd2hpbGUgKHRoaXMubmV4dCgpIDw9IDB4MzkgJiYgdGhpcy5jaCA+PSAweDMwKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUgKiAxMCArIHRoaXMuY2ggLSAweDMwO1xuICAgICAgfVxuICAgICAgdGhpcy52YWwgPSB0aGlzLnZhbCArIHZhbHVlIC8gTWF0aC5wb3coMTAsIHRoaXMuaWR4IC0gc3RhcnQpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNoID09PSAweDY1IHx8IHRoaXMuY2ggPT09IDB4NDUpIHtcbiAgICAgIHZhciBfc3RhcnQgPSB0aGlzLmlkeDtcblxuICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICBpZiAodGhpcy5jaCA9PT0gMHgyRCB8fCB0aGlzLmNoID09PSAweDJCKSB7XG4gICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoISh0aGlzLmNoID49IDB4MzAgJiYgdGhpcy5jaCA8PSAweDM5KSkge1xuICAgICAgICB0aGlzLmlkeCA9IF9zdGFydDtcbiAgICAgICAgdGhpcy5lcnIoJ0ludmFsaWQgZXhwb25lbnQnKTtcbiAgICAgIH1cbiAgICAgIHdoaWxlICh0aGlzLm5leHQoKSA8PSAweDM5ICYmIHRoaXMuY2ggPj0gMHgzMCkge31cbiAgICAgIHRoaXMudmFsID0gcGFyc2VGbG9hdCh0aGlzLnNyYy5zbGljZSh0aGlzLnN0YXJ0LCB0aGlzLmlkeCkpO1xuICAgIH1cblxuICAgIHJldHVybiBUJE51bWVyaWNMaXRlcmFsO1xuICB9O1xuXG4gIFBhcnNlckltcGxlbWVudGF0aW9uLnByb3RvdHlwZS5zY2FuU3RyaW5nID0gZnVuY3Rpb24gc2NhblN0cmluZygpIHtcbiAgICB2YXIgcXVvdGUgPSB0aGlzLmNoO1xuICAgIHRoaXMubmV4dCgpO1xuXG4gICAgdmFyIGJ1ZmZlciA9IHZvaWQgMDtcbiAgICB2YXIgbWFya2VyID0gdGhpcy5pZHg7XG5cbiAgICB3aGlsZSAodGhpcy5jaCAhPT0gcXVvdGUpIHtcbiAgICAgIGlmICh0aGlzLmNoID09PSAweDVDKSB7XG4gICAgICAgIGlmICghYnVmZmVyKSB7XG4gICAgICAgICAgYnVmZmVyID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBidWZmZXIucHVzaCh0aGlzLnNyYy5zbGljZShtYXJrZXIsIHRoaXMuaWR4KSk7XG5cbiAgICAgICAgdGhpcy5uZXh0KCk7XG5cbiAgICAgICAgdmFyIF91bmVzY2FwZWQgPSB2b2lkIDA7XG5cbiAgICAgICAgaWYgKHRoaXMuY2ggPT09IDB4NzUpIHtcbiAgICAgICAgICB0aGlzLm5leHQoKTtcblxuICAgICAgICAgIGlmICh0aGlzLmlkeCArIDQgPCB0aGlzLmxlbikge1xuICAgICAgICAgICAgdmFyIGhleCA9IHRoaXMuc3JjLnNsaWNlKHRoaXMuaWR4LCB0aGlzLmlkeCArIDQpO1xuXG4gICAgICAgICAgICBpZiAoIS9bQS1aMC05XXs0fS9pLnRlc3QoaGV4KSkge1xuICAgICAgICAgICAgICB0aGlzLmVycignSW52YWxpZCB1bmljb2RlIGVzY2FwZSBbXFxcXHUnICsgaGV4ICsgJ10nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgX3VuZXNjYXBlZCA9IHBhcnNlSW50KGhleCwgMTYpO1xuICAgICAgICAgICAgdGhpcy5pZHggKz0gNDtcbiAgICAgICAgICAgIHRoaXMuY2ggPSB0aGlzLnNyYy5jaGFyQ29kZUF0KHRoaXMuaWR4KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lcnIoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX3VuZXNjYXBlZCA9IHVuZXNjYXBlKHRoaXMuY2gpO1xuICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnVmZmVyLnB1c2goZnJvbUNoYXJDb2RlKF91bmVzY2FwZWQpKTtcbiAgICAgICAgbWFya2VyID0gdGhpcy5pZHg7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2ggPT09IDAgfHwgdGhpcy5pZHggPj0gdGhpcy5sZW4pIHtcbiAgICAgICAgdGhpcy5lcnIoJ1VudGVybWluYXRlZCBxdW90ZScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGxhc3QgPSB0aGlzLnNyYy5zbGljZShtYXJrZXIsIHRoaXMuaWR4KTtcbiAgICB0aGlzLm5leHQoKTtcbiAgICB2YXIgdW5lc2NhcGVkID0gbGFzdDtcblxuICAgIGlmIChidWZmZXIgIT09IG51bGwgJiYgYnVmZmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGJ1ZmZlci5wdXNoKGxhc3QpO1xuICAgICAgdW5lc2NhcGVkID0gYnVmZmVyLmpvaW4oJycpO1xuICAgIH1cblxuICAgIHRoaXMudmFsID0gdW5lc2NhcGVkO1xuICAgIHJldHVybiBUJFN0cmluZ0xpdGVyYWw7XG4gIH07XG5cbiAgUGFyc2VySW1wbGVtZW50YXRpb24ucHJvdG90eXBlLnNjYW5UZW1wbGF0ZSA9IGZ1bmN0aW9uIHNjYW5UZW1wbGF0ZSgpIHtcbiAgICB2YXIgdGFpbCA9IHRydWU7XG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuXG4gICAgd2hpbGUgKHRoaXMubmV4dCgpICE9PSAweDYwKSB7XG4gICAgICBpZiAodGhpcy5jaCA9PT0gMHgyNCkge1xuICAgICAgICBpZiAodGhpcy5pZHggKyAxIDwgdGhpcy5sZW4gJiYgdGhpcy5zcmMuY2hhckNvZGVBdCh0aGlzLmlkeCArIDEpID09PSAweDdCKSB7XG4gICAgICAgICAgdGhpcy5pZHgrKztcbiAgICAgICAgICB0YWlsID0gZmFsc2U7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0ICs9ICckJztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoID09PSAweDVDKSB7XG4gICAgICAgIHJlc3VsdCArPSBmcm9tQ2hhckNvZGUodW5lc2NhcGUodGhpcy5uZXh0KCkpKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaCA9PT0gMCB8fCB0aGlzLmlkeCA+PSB0aGlzLmxlbikge1xuICAgICAgICB0aGlzLmVycignVW50ZXJtaW5hdGVkIHRlbXBsYXRlIGxpdGVyYWwnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCArPSBmcm9tQ2hhckNvZGUodGhpcy5jaCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5uZXh0KCk7XG4gICAgdGhpcy52YWwgPSByZXN1bHQ7XG4gICAgaWYgKHRhaWwpIHtcbiAgICAgIHJldHVybiBUJFRlbXBsYXRlVGFpbDtcbiAgICB9XG4gICAgcmV0dXJuIFQkVGVtcGxhdGVDb250aW51YXRpb247XG4gIH07XG5cbiAgUGFyc2VySW1wbGVtZW50YXRpb24ucHJvdG90eXBlLnNjYW5UZW1wbGF0ZVRhaWwgPSBmdW5jdGlvbiBzY2FuVGVtcGxhdGVUYWlsKCkge1xuICAgIGlmICh0aGlzLmlkeCA+PSB0aGlzLmxlbikge1xuICAgICAgdGhpcy5lcnIoJ1VudGVybWluYXRlZCB0ZW1wbGF0ZScpO1xuICAgIH1cbiAgICB0aGlzLmlkeC0tO1xuICAgIHJldHVybiB0aGlzLnNjYW5UZW1wbGF0ZSgpO1xuICB9O1xuXG4gIFBhcnNlckltcGxlbWVudGF0aW9uLnByb3RvdHlwZS5lcnIgPSBmdW5jdGlvbiBlcnIoKSB7XG4gICAgdmFyIG1lc3NhZ2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICdVbmV4cGVjdGVkIHRva2VuICcgKyB0aGlzLnJhdztcbiAgICB2YXIgY29sdW1uID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB0aGlzLnN0YXJ0O1xuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdQYXJzZXIgRXJyb3I6ICcgKyBtZXNzYWdlICsgJyBhdCBjb2x1bW4gJyArIGNvbHVtbiArICcgaW4gZXhwcmVzc2lvbiBbJyArIHRoaXMuc3JjICsgJ10nKTtcbiAgfTtcblxuICBQYXJzZXJJbXBsZW1lbnRhdGlvbi5wcm90b3R5cGUub3B0ID0gZnVuY3Rpb24gb3B0KHRva2VuKSB7XG4gICAgaWYgKHRoaXMudGtuID09PSB0b2tlbikge1xuICAgICAgdGhpcy5uZXh0VG9rZW4oKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICBQYXJzZXJJbXBsZW1lbnRhdGlvbi5wcm90b3R5cGUuZXhwZWN0ID0gZnVuY3Rpb24gZXhwZWN0KHRva2VuKSB7XG4gICAgaWYgKHRoaXMudGtuID09PSB0b2tlbikge1xuICAgICAgdGhpcy5uZXh0VG9rZW4oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lcnIoJ01pc3NpbmcgZXhwZWN0ZWQgdG9rZW4gJyArIFRva2VuVmFsdWVzW3Rva2VuICYgVCRUb2tlbk1hc2tdLCB0aGlzLmlkeCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBQYXJzZXJJbXBsZW1lbnRhdGlvbjtcbn0oKTtcblxuZnVuY3Rpb24gdW5lc2NhcGUoY29kZSkge1xuICBzd2l0Y2ggKGNvZGUpIHtcbiAgICBjYXNlIDB4NjY6XG4gICAgICByZXR1cm4gMHhDO1xuICAgIGNhc2UgMHg2RTpcbiAgICAgIHJldHVybiAweEE7XG4gICAgY2FzZSAweDcyOlxuICAgICAgcmV0dXJuIDB4RDtcbiAgICBjYXNlIDB4NzQ6XG4gICAgICByZXR1cm4gMHg5O1xuICAgIGNhc2UgMHg3NjpcbiAgICAgIHJldHVybiAweEI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBjb2RlO1xuICB9XG59XG5cbnZhciBDJFRoaXMgPSAxIDw8IDEwO1xudmFyIEMkU2NvcGUgPSAxIDw8IDExO1xudmFyIEMkTWVtYmVyID0gMSA8PCAxMjtcbnZhciBDJEtleWVkID0gMSA8PCAxMztcbnZhciBDJENhbGwgPSAxIDw8IDE0O1xudmFyIEMkUHJpbWFyeSA9IDEgPDwgMTU7XG52YXIgQyRTaG9ydGhhbmRQcm9wID0gMSA8PCAxNjtcbnZhciBDJFRhZ2dlZCA9IDEgPDwgMTc7XG5cbnZhciBDJEFuY2VzdG9yID0gKDEgPDwgOSkgLSAxO1xuXG52YXIgVCRUb2tlbk1hc2sgPSAoMSA8PCA2KSAtIDE7XG5cbnZhciBUJFByZWNTaGlmdCA9IDY7XG5cbnZhciBUJFByZWNlZGVuY2UgPSA3IDw8IFQkUHJlY1NoaWZ0O1xuXG52YXIgVCRFeHByZXNzaW9uVGVybWluYWwgPSAxIDw8IDExO1xuXG52YXIgVCRDbG9zaW5nVG9rZW4gPSAxIDw8IDEyO1xuXG52YXIgVCRPcGVuaW5nVG9rZW4gPSAxIDw8IDEzO1xuXG52YXIgVCRBY2Nlc3NTY29wZVRlcm1pbmFsID0gMSA8PCAxNDtcbnZhciBUJEtleXdvcmQgPSAxIDw8IDE1O1xudmFyIFQkRU9GID0gMSA8PCAxNiB8IFQkQWNjZXNzU2NvcGVUZXJtaW5hbCB8IFQkRXhwcmVzc2lvblRlcm1pbmFsO1xudmFyIFQkSWRlbnRpZmllciA9IDEgPDwgMTc7XG52YXIgVCRJZGVudGlmaWVyT3JLZXl3b3JkID0gVCRJZGVudGlmaWVyIHwgVCRLZXl3b3JkO1xudmFyIFQkTGl0ZXJhbCA9IDEgPDwgMTg7XG52YXIgVCROdW1lcmljTGl0ZXJhbCA9IDEgPDwgMTkgfCBUJExpdGVyYWw7XG52YXIgVCRTdHJpbmdMaXRlcmFsID0gMSA8PCAyMCB8IFQkTGl0ZXJhbDtcbnZhciBUJEJpbmFyeU9wID0gMSA8PCAyMTtcblxudmFyIFQkVW5hcnlPcCA9IDEgPDwgMjI7XG5cbnZhciBUJE1lbWJlckV4cHJlc3Npb24gPSAxIDw8IDIzO1xuXG52YXIgVCRNZW1iZXJPckNhbGxFeHByZXNzaW9uID0gMSA8PCAyNDtcbnZhciBUJFRlbXBsYXRlVGFpbCA9IDEgPDwgMjUgfCBUJE1lbWJlck9yQ2FsbEV4cHJlc3Npb247XG52YXIgVCRUZW1wbGF0ZUNvbnRpbnVhdGlvbiA9IDEgPDwgMjYgfCBUJE1lbWJlck9yQ2FsbEV4cHJlc3Npb247XG5cbnZhciBUJEZhbHNlS2V5d29yZCA9IDAgfCBUJEtleXdvcmQgfCBUJExpdGVyYWw7XG52YXIgVCRUcnVlS2V5d29yZCA9IDEgfCBUJEtleXdvcmQgfCBUJExpdGVyYWw7XG52YXIgVCROdWxsS2V5d29yZCA9IDIgfCBUJEtleXdvcmQgfCBUJExpdGVyYWw7XG52YXIgVCRVbmRlZmluZWRLZXl3b3JkID0gMyB8IFQkS2V5d29yZCB8IFQkTGl0ZXJhbDtcbnZhciBUJFRoaXNTY29wZSA9IDQgfCBUJElkZW50aWZpZXJPcktleXdvcmQ7XG52YXIgVCRQYXJlbnRTY29wZSA9IDUgfCBUJElkZW50aWZpZXJPcktleXdvcmQ7XG5cbnZhciBUJExQYXJlbiA9IDYgfCBUJE9wZW5pbmdUb2tlbiB8IFQkQWNjZXNzU2NvcGVUZXJtaW5hbCB8IFQkTWVtYmVyT3JDYWxsRXhwcmVzc2lvbjtcbnZhciBUJExCcmFjZSA9IDcgfCBUJE9wZW5pbmdUb2tlbjtcbnZhciBUJFBlcmlvZCA9IDggfCBUJE1lbWJlckV4cHJlc3Npb24gfCBUJE1lbWJlck9yQ2FsbEV4cHJlc3Npb247XG52YXIgVCRSQnJhY2UgPSA5IHwgVCRBY2Nlc3NTY29wZVRlcm1pbmFsIHwgVCRDbG9zaW5nVG9rZW4gfCBUJEV4cHJlc3Npb25UZXJtaW5hbDtcbnZhciBUJFJQYXJlbiA9IDEwIHwgVCRBY2Nlc3NTY29wZVRlcm1pbmFsIHwgVCRDbG9zaW5nVG9rZW4gfCBUJEV4cHJlc3Npb25UZXJtaW5hbDtcbnZhciBUJENvbW1hID0gMTEgfCBUJEFjY2Vzc1Njb3BlVGVybWluYWw7XG52YXIgVCRMQnJhY2tldCA9IDEyIHwgVCRPcGVuaW5nVG9rZW4gfCBUJEFjY2Vzc1Njb3BlVGVybWluYWwgfCBUJE1lbWJlckV4cHJlc3Npb24gfCBUJE1lbWJlck9yQ2FsbEV4cHJlc3Npb247XG52YXIgVCRSQnJhY2tldCA9IDEzIHwgVCRDbG9zaW5nVG9rZW4gfCBUJEV4cHJlc3Npb25UZXJtaW5hbDtcbnZhciBUJENvbG9uID0gMTQgfCBUJEFjY2Vzc1Njb3BlVGVybWluYWw7XG52YXIgVCRRdWVzdGlvbiA9IDE1O1xuXG52YXIgVCRBbXBlcnNhbmQgPSAxOCB8IFQkQWNjZXNzU2NvcGVUZXJtaW5hbDtcbnZhciBUJEJhciA9IDE5IHwgVCRBY2Nlc3NTY29wZVRlcm1pbmFsO1xudmFyIFQkQmFyQmFyID0gMjAgfCAxIDw8IFQkUHJlY1NoaWZ0IHwgVCRCaW5hcnlPcDtcbnZhciBUJEFtcGVyc2FuZEFtcGVyc2FuZCA9IDIxIHwgMiA8PCBUJFByZWNTaGlmdCB8IFQkQmluYXJ5T3A7XG52YXIgVCRDYXJldCA9IDIyIHwgMyA8PCBUJFByZWNTaGlmdCB8IFQkQmluYXJ5T3A7XG52YXIgVCRFcUVxID0gMjMgfCA0IDw8IFQkUHJlY1NoaWZ0IHwgVCRCaW5hcnlPcDtcbnZhciBUJEJhbmdFcSA9IDI0IHwgNCA8PCBUJFByZWNTaGlmdCB8IFQkQmluYXJ5T3A7XG52YXIgVCRFcUVxRXEgPSAyNSB8IDQgPDwgVCRQcmVjU2hpZnQgfCBUJEJpbmFyeU9wO1xudmFyIFQkQmFuZ0VxRXEgPSAyNiB8IDQgPDwgVCRQcmVjU2hpZnQgfCBUJEJpbmFyeU9wO1xudmFyIFQkTHQgPSAyNyB8IDUgPDwgVCRQcmVjU2hpZnQgfCBUJEJpbmFyeU9wO1xudmFyIFQkR3QgPSAyOCB8IDUgPDwgVCRQcmVjU2hpZnQgfCBUJEJpbmFyeU9wO1xudmFyIFQkTHRFcSA9IDI5IHwgNSA8PCBUJFByZWNTaGlmdCB8IFQkQmluYXJ5T3A7XG52YXIgVCRHdEVxID0gMzAgfCA1IDw8IFQkUHJlY1NoaWZ0IHwgVCRCaW5hcnlPcDtcbnZhciBUJEluS2V5d29yZCA9IDMxIHwgNSA8PCBUJFByZWNTaGlmdCB8IFQkQmluYXJ5T3AgfCBUJEtleXdvcmQ7XG52YXIgVCRJbnN0YW5jZU9mS2V5d29yZCA9IDMyIHwgNSA8PCBUJFByZWNTaGlmdCB8IFQkQmluYXJ5T3AgfCBUJEtleXdvcmQ7XG52YXIgVCRQbHVzID0gMzMgfCA2IDw8IFQkUHJlY1NoaWZ0IHwgVCRCaW5hcnlPcCB8IFQkVW5hcnlPcDtcbnZhciBUJE1pbnVzID0gMzQgfCA2IDw8IFQkUHJlY1NoaWZ0IHwgVCRCaW5hcnlPcCB8IFQkVW5hcnlPcDtcbnZhciBUJFR5cGVvZktleXdvcmQgPSAzNSB8IFQkVW5hcnlPcCB8IFQkS2V5d29yZDtcbnZhciBUJFZvaWRLZXl3b3JkID0gMzYgfCBUJFVuYXJ5T3AgfCBUJEtleXdvcmQ7XG52YXIgVCRTdGFyID0gMzcgfCA3IDw8IFQkUHJlY1NoaWZ0IHwgVCRCaW5hcnlPcDtcbnZhciBUJFBlcmNlbnQgPSAzOCB8IDcgPDwgVCRQcmVjU2hpZnQgfCBUJEJpbmFyeU9wO1xudmFyIFQkU2xhc2ggPSAzOSB8IDcgPDwgVCRQcmVjU2hpZnQgfCBUJEJpbmFyeU9wO1xudmFyIFQkRXEgPSA0MDtcbnZhciBUJEJhbmcgPSA0MSB8IFQkVW5hcnlPcDtcblxudmFyIEtleXdvcmRMb29rdXAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuS2V5d29yZExvb2t1cC50cnVlID0gVCRUcnVlS2V5d29yZDtcbktleXdvcmRMb29rdXAubnVsbCA9IFQkTnVsbEtleXdvcmQ7XG5LZXl3b3JkTG9va3VwLmZhbHNlID0gVCRGYWxzZUtleXdvcmQ7XG5LZXl3b3JkTG9va3VwLnVuZGVmaW5lZCA9IFQkVW5kZWZpbmVkS2V5d29yZDtcbktleXdvcmRMb29rdXAuJHRoaXMgPSBUJFRoaXNTY29wZTtcbktleXdvcmRMb29rdXAuJHBhcmVudCA9IFQkUGFyZW50U2NvcGU7XG5LZXl3b3JkTG9va3VwLmluID0gVCRJbktleXdvcmQ7XG5LZXl3b3JkTG9va3VwLmluc3RhbmNlb2YgPSBUJEluc3RhbmNlT2ZLZXl3b3JkO1xuS2V5d29yZExvb2t1cC50eXBlb2YgPSBUJFR5cGVvZktleXdvcmQ7XG5LZXl3b3JkTG9va3VwLnZvaWQgPSBUJFZvaWRLZXl3b3JkO1xuXG52YXIgVG9rZW5WYWx1ZXMgPSBbZmFsc2UsIHRydWUsIG51bGwsIHVuZGVmaW5lZCwgJyR0aGlzJywgJyRwYXJlbnQnLCAnKCcsICd7JywgJy4nLCAnfScsICcpJywgJywnLCAnWycsICddJywgJzonLCAnPycsICdcXCcnLCAnXCInLCAnJicsICd8JywgJ3x8JywgJyYmJywgJ14nLCAnPT0nLCAnIT0nLCAnPT09JywgJyE9PScsICc8JywgJz4nLCAnPD0nLCAnPj0nLCAnaW4nLCAnaW5zdGFuY2VvZicsICcrJywgJy0nLCAndHlwZW9mJywgJ3ZvaWQnLCAnKicsICclJywgJy8nLCAnPScsICchJ107XG5cbnZhciBjb2RlcyA9IHtcbiAgQXNjaWlJZFBhcnQ6IFsweDI0LCAwLCAweDMwLCAweDNBLCAweDQxLCAweDVCLCAweDVGLCAwLCAweDYxLCAweDdCXSxcbiAgSWRTdGFydDogWzB4MjQsIDAsIDB4NDEsIDB4NUIsIDB4NUYsIDAsIDB4NjEsIDB4N0IsIDB4QUEsIDAsIDB4QkEsIDAsIDB4QzAsIDB4RDcsIDB4RDgsIDB4RjcsIDB4RjgsIDB4MkI5LCAweDJFMCwgMHgyRTUsIDB4MUQwMCwgMHgxRDI2LCAweDFEMkMsIDB4MUQ1RCwgMHgxRDYyLCAweDFENjYsIDB4MUQ2QiwgMHgxRDc4LCAweDFENzksIDB4MURCRiwgMHgxRTAwLCAweDFGMDAsIDB4MjA3MSwgMCwgMHgyMDdGLCAwLCAweDIwOTAsIDB4MjA5RCwgMHgyMTJBLCAweDIxMkMsIDB4MjEzMiwgMCwgMHgyMTRFLCAwLCAweDIxNjAsIDB4MjE4OSwgMHgyQzYwLCAweDJDODAsIDB4QTcyMiwgMHhBNzg4LCAweEE3OEIsIDB4QTdBRiwgMHhBN0IwLCAweEE3QjgsIDB4QTdGNywgMHhBODAwLCAweEFCMzAsIDB4QUI1QiwgMHhBQjVDLCAweEFCNjUsIDB4RkIwMCwgMHhGQjA3LCAweEZGMjEsIDB4RkYzQiwgMHhGRjQxLCAweEZGNUJdLFxuICBEaWdpdDogWzB4MzAsIDB4M0FdLFxuICBTa2lwOiBbMCwgMHgyMSwgMHg3RiwgMHhBMV1cbn07XG5cbmZ1bmN0aW9uIGRlY29tcHJlc3MobG9va3VwLCBzZXQsIGNvbXByZXNzZWQsIHZhbHVlKSB7XG4gIHZhciByYW5nZUNvdW50ID0gY29tcHJlc3NlZC5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VDb3VudDsgaSArPSAyKSB7XG4gICAgdmFyIHN0YXJ0ID0gY29tcHJlc3NlZFtpXTtcbiAgICB2YXIgZW5kID0gY29tcHJlc3NlZFtpICsgMV07XG4gICAgZW5kID0gZW5kID4gMCA/IGVuZCA6IHN0YXJ0ICsgMTtcbiAgICBpZiAobG9va3VwKSB7XG4gICAgICB2YXIgaiA9IHN0YXJ0O1xuICAgICAgd2hpbGUgKGogPCBlbmQpIHtcbiAgICAgICAgbG9va3VwW2pdID0gdmFsdWU7XG4gICAgICAgIGorKztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNldCkge1xuICAgICAgZm9yICh2YXIgY2ggPSBzdGFydDsgY2ggPCBlbmQ7IGNoKyspIHtcbiAgICAgICAgc2V0LmFkZChjaCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJldHVyblRva2VuKHRva2VuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAocCkge1xuICAgIHAubmV4dCgpO1xuICAgIHJldHVybiB0b2tlbjtcbiAgfTtcbn1cbmZ1bmN0aW9uIHVuZXhwZWN0ZWRDaGFyYWN0ZXIocCkge1xuICBwLmVycignVW5leHBlY3RlZCBjaGFyYWN0ZXIgWycgKyBmcm9tQ2hhckNvZGUocC5jaCkgKyAnXScpO1xuICByZXR1cm4gbnVsbDtcbn1cblxudmFyIEFzY2lpSWRQYXJ0cyA9IG5ldyBTZXQoKTtcbmRlY29tcHJlc3MobnVsbCwgQXNjaWlJZFBhcnRzLCBjb2Rlcy5Bc2NpaUlkUGFydCwgdHJ1ZSk7XG5cbnZhciBJZFBhcnRzID0gbmV3IFVpbnQ4QXJyYXkoMHhGRkZGKTtcbmRlY29tcHJlc3MoSWRQYXJ0cywgbnVsbCwgY29kZXMuSWRTdGFydCwgMSk7XG5kZWNvbXByZXNzKElkUGFydHMsIG51bGwsIGNvZGVzLkRpZ2l0LCAxKTtcblxudmFyIENoYXJTY2FubmVycyA9IG5ldyBBcnJheSgweEZGRkYpO1xudmFyIGNpID0gMDtcbndoaWxlIChjaSA8IDB4RkZGRikge1xuICBDaGFyU2Nhbm5lcnNbY2ldID0gdW5leHBlY3RlZENoYXJhY3RlcjtcbiAgY2krKztcbn1cblxuZGVjb21wcmVzcyhDaGFyU2Nhbm5lcnMsIG51bGwsIGNvZGVzLlNraXAsIGZ1bmN0aW9uIChwKSB7XG4gIHAubmV4dCgpO1xuICByZXR1cm4gbnVsbDtcbn0pO1xuZGVjb21wcmVzcyhDaGFyU2Nhbm5lcnMsIG51bGwsIGNvZGVzLklkU3RhcnQsIGZ1bmN0aW9uIChwKSB7XG4gIHJldHVybiBwLnNjYW5JZGVudGlmaWVyKCk7XG59KTtcbmRlY29tcHJlc3MoQ2hhclNjYW5uZXJzLCBudWxsLCBjb2Rlcy5EaWdpdCwgZnVuY3Rpb24gKHApIHtcbiAgcmV0dXJuIHAuc2Nhbk51bWJlcihmYWxzZSk7XG59KTtcblxuQ2hhclNjYW5uZXJzWzB4MjJdID0gQ2hhclNjYW5uZXJzWzB4MjddID0gZnVuY3Rpb24gKHApIHtcbiAgcmV0dXJuIHAuc2NhblN0cmluZygpO1xufTtcbkNoYXJTY2FubmVyc1sweDYwXSA9IGZ1bmN0aW9uIChwKSB7XG4gIHJldHVybiBwLnNjYW5UZW1wbGF0ZSgpO1xufTtcblxuQ2hhclNjYW5uZXJzWzB4MjFdID0gZnVuY3Rpb24gKHApIHtcbiAgaWYgKHAubmV4dCgpICE9PSAweDNEKSB7XG4gICAgcmV0dXJuIFQkQmFuZztcbiAgfVxuICBpZiAocC5uZXh0KCkgIT09IDB4M0QpIHtcbiAgICByZXR1cm4gVCRCYW5nRXE7XG4gIH1cbiAgcC5uZXh0KCk7XG4gIHJldHVybiBUJEJhbmdFcUVxO1xufTtcblxuQ2hhclNjYW5uZXJzWzB4M0RdID0gZnVuY3Rpb24gKHApIHtcbiAgaWYgKHAubmV4dCgpICE9PSAweDNEKSB7XG4gICAgcmV0dXJuIFQkRXE7XG4gIH1cbiAgaWYgKHAubmV4dCgpICE9PSAweDNEKSB7XG4gICAgcmV0dXJuIFQkRXFFcTtcbiAgfVxuICBwLm5leHQoKTtcbiAgcmV0dXJuIFQkRXFFcUVxO1xufTtcblxuQ2hhclNjYW5uZXJzWzB4MjZdID0gZnVuY3Rpb24gKHApIHtcbiAgaWYgKHAubmV4dCgpICE9PSAweDI2KSB7XG4gICAgcmV0dXJuIFQkQW1wZXJzYW5kO1xuICB9XG4gIHAubmV4dCgpO1xuICByZXR1cm4gVCRBbXBlcnNhbmRBbXBlcnNhbmQ7XG59O1xuXG5DaGFyU2Nhbm5lcnNbMHg3Q10gPSBmdW5jdGlvbiAocCkge1xuICBpZiAocC5uZXh0KCkgIT09IDB4N0MpIHtcbiAgICByZXR1cm4gVCRCYXI7XG4gIH1cbiAgcC5uZXh0KCk7XG4gIHJldHVybiBUJEJhckJhcjtcbn07XG5cbkNoYXJTY2FubmVyc1sweDJFXSA9IGZ1bmN0aW9uIChwKSB7XG4gIGlmIChwLm5leHQoKSA8PSAweDM5ICYmIHAuY2ggPj0gMHgzMCkge1xuICAgIHJldHVybiBwLnNjYW5OdW1iZXIodHJ1ZSk7XG4gIH1cbiAgcmV0dXJuIFQkUGVyaW9kO1xufTtcblxuQ2hhclNjYW5uZXJzWzB4M0NdID0gZnVuY3Rpb24gKHApIHtcbiAgaWYgKHAubmV4dCgpICE9PSAweDNEKSB7XG4gICAgcmV0dXJuIFQkTHQ7XG4gIH1cbiAgcC5uZXh0KCk7XG4gIHJldHVybiBUJEx0RXE7XG59O1xuXG5DaGFyU2Nhbm5lcnNbMHgzRV0gPSBmdW5jdGlvbiAocCkge1xuICBpZiAocC5uZXh0KCkgIT09IDB4M0QpIHtcbiAgICByZXR1cm4gVCRHdDtcbiAgfVxuICBwLm5leHQoKTtcbiAgcmV0dXJuIFQkR3RFcTtcbn07XG5cbkNoYXJTY2FubmVyc1sweDI1XSA9IHJldHVyblRva2VuKFQkUGVyY2VudCk7XG5DaGFyU2Nhbm5lcnNbMHgyOF0gPSByZXR1cm5Ub2tlbihUJExQYXJlbik7XG5DaGFyU2Nhbm5lcnNbMHgyOV0gPSByZXR1cm5Ub2tlbihUJFJQYXJlbik7XG5DaGFyU2Nhbm5lcnNbMHgyQV0gPSByZXR1cm5Ub2tlbihUJFN0YXIpO1xuQ2hhclNjYW5uZXJzWzB4MkJdID0gcmV0dXJuVG9rZW4oVCRQbHVzKTtcbkNoYXJTY2FubmVyc1sweDJDXSA9IHJldHVyblRva2VuKFQkQ29tbWEpO1xuQ2hhclNjYW5uZXJzWzB4MkRdID0gcmV0dXJuVG9rZW4oVCRNaW51cyk7XG5DaGFyU2Nhbm5lcnNbMHgyRl0gPSByZXR1cm5Ub2tlbihUJFNsYXNoKTtcbkNoYXJTY2FubmVyc1sweDNBXSA9IHJldHVyblRva2VuKFQkQ29sb24pO1xuQ2hhclNjYW5uZXJzWzB4M0ZdID0gcmV0dXJuVG9rZW4oVCRRdWVzdGlvbik7XG5DaGFyU2Nhbm5lcnNbMHg1Ql0gPSByZXR1cm5Ub2tlbihUJExCcmFja2V0KTtcbkNoYXJTY2FubmVyc1sweDVEXSA9IHJldHVyblRva2VuKFQkUkJyYWNrZXQpO1xuQ2hhclNjYW5uZXJzWzB4NUVdID0gcmV0dXJuVG9rZW4oVCRDYXJldCk7XG5DaGFyU2Nhbm5lcnNbMHg3Ql0gPSByZXR1cm5Ub2tlbihUJExCcmFjZSk7XG5DaGFyU2Nhbm5lcnNbMHg3RF0gPSByZXR1cm5Ub2tlbihUJFJCcmFjZSk7XG5cbnZhciBtYXBQcm90byA9IE1hcC5wcm90b3R5cGU7XG5cbmZ1bmN0aW9uIF9nZXRNYXBPYnNlcnZlcih0YXNrUXVldWUsIG1hcCkge1xuICByZXR1cm4gTW9kaWZ5TWFwT2JzZXJ2ZXIuZm9yKHRhc2tRdWV1ZSwgbWFwKTtcbn1cblxudmFyIE1vZGlmeU1hcE9ic2VydmVyID0gZnVuY3Rpb24gKF9Nb2RpZnlDb2xsZWN0aW9uT2JzZTIpIHtcbiAgX2luaGVyaXRzKE1vZGlmeU1hcE9ic2VydmVyLCBfTW9kaWZ5Q29sbGVjdGlvbk9ic2UyKTtcblxuICBmdW5jdGlvbiBNb2RpZnlNYXBPYnNlcnZlcih0YXNrUXVldWUsIG1hcCkge1xuICAgIFxuXG4gICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9Nb2RpZnlDb2xsZWN0aW9uT2JzZTIuY2FsbCh0aGlzLCB0YXNrUXVldWUsIG1hcCkpO1xuICB9XG5cbiAgTW9kaWZ5TWFwT2JzZXJ2ZXIuZm9yID0gZnVuY3Rpb24gX2Zvcih0YXNrUXVldWUsIG1hcCkge1xuICAgIGlmICghKCdfX21hcF9vYnNlcnZlcl9fJyBpbiBtYXApKSB7XG4gICAgICBSZWZsZWN0LmRlZmluZVByb3BlcnR5KG1hcCwgJ19fbWFwX29ic2VydmVyX18nLCB7XG4gICAgICAgIHZhbHVlOiBNb2RpZnlNYXBPYnNlcnZlci5jcmVhdGUodGFza1F1ZXVlLCBtYXApLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSwgY29uZmlndXJhYmxlOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBtYXAuX19tYXBfb2JzZXJ2ZXJfXztcbiAgfTtcblxuICBNb2RpZnlNYXBPYnNlcnZlci5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUodGFza1F1ZXVlLCBtYXApIHtcbiAgICB2YXIgb2JzZXJ2ZXIgPSBuZXcgTW9kaWZ5TWFwT2JzZXJ2ZXIodGFza1F1ZXVlLCBtYXApO1xuXG4gICAgdmFyIHByb3RvID0gbWFwUHJvdG87XG4gICAgaWYgKHByb3RvLnNldCAhPT0gbWFwLnNldCB8fCBwcm90by5kZWxldGUgIT09IG1hcC5kZWxldGUgfHwgcHJvdG8uY2xlYXIgIT09IG1hcC5jbGVhcikge1xuICAgICAgcHJvdG8gPSB7XG4gICAgICAgIHNldDogbWFwLnNldCxcbiAgICAgICAgZGVsZXRlOiBtYXAuZGVsZXRlLFxuICAgICAgICBjbGVhcjogbWFwLmNsZWFyXG4gICAgICB9O1xuICAgIH1cblxuICAgIG1hcC5zZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgaGFzVmFsdWUgPSBtYXAuaGFzKGFyZ3VtZW50c1swXSk7XG4gICAgICB2YXIgdHlwZSA9IGhhc1ZhbHVlID8gJ3VwZGF0ZScgOiAnYWRkJztcbiAgICAgIHZhciBvbGRWYWx1ZSA9IG1hcC5nZXQoYXJndW1lbnRzWzBdKTtcbiAgICAgIHZhciBtZXRob2RDYWxsUmVzdWx0ID0gcHJvdG8uc2V0LmFwcGx5KG1hcCwgYXJndW1lbnRzKTtcbiAgICAgIGlmICghaGFzVmFsdWUgfHwgb2xkVmFsdWUgIT09IG1hcC5nZXQoYXJndW1lbnRzWzBdKSkge1xuICAgICAgICBvYnNlcnZlci5hZGRDaGFuZ2VSZWNvcmQoe1xuICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgb2JqZWN0OiBtYXAsXG4gICAgICAgICAga2V5OiBhcmd1bWVudHNbMF0sXG4gICAgICAgICAgb2xkVmFsdWU6IG9sZFZhbHVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1ldGhvZENhbGxSZXN1bHQ7XG4gICAgfTtcblxuICAgIG1hcC5kZWxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgaGFzVmFsdWUgPSBtYXAuaGFzKGFyZ3VtZW50c1swXSk7XG4gICAgICB2YXIgb2xkVmFsdWUgPSBtYXAuZ2V0KGFyZ3VtZW50c1swXSk7XG4gICAgICB2YXIgbWV0aG9kQ2FsbFJlc3VsdCA9IHByb3RvLmRlbGV0ZS5hcHBseShtYXAsIGFyZ3VtZW50cyk7XG4gICAgICBpZiAoaGFzVmFsdWUpIHtcbiAgICAgICAgb2JzZXJ2ZXIuYWRkQ2hhbmdlUmVjb3JkKHtcbiAgICAgICAgICB0eXBlOiAnZGVsZXRlJyxcbiAgICAgICAgICBvYmplY3Q6IG1hcCxcbiAgICAgICAgICBrZXk6IGFyZ3VtZW50c1swXSxcbiAgICAgICAgICBvbGRWYWx1ZTogb2xkVmFsdWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbWV0aG9kQ2FsbFJlc3VsdDtcbiAgICB9O1xuXG4gICAgbWFwLmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIG1ldGhvZENhbGxSZXN1bHQgPSBwcm90by5jbGVhci5hcHBseShtYXAsIGFyZ3VtZW50cyk7XG4gICAgICBvYnNlcnZlci5hZGRDaGFuZ2VSZWNvcmQoe1xuICAgICAgICB0eXBlOiAnY2xlYXInLFxuICAgICAgICBvYmplY3Q6IG1hcFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gbWV0aG9kQ2FsbFJlc3VsdDtcbiAgICB9O1xuXG4gICAgcmV0dXJuIG9ic2VydmVyO1xuICB9O1xuXG4gIHJldHVybiBNb2RpZnlNYXBPYnNlcnZlcjtcbn0oTW9kaWZ5Q29sbGVjdGlvbk9ic2VydmVyKTtcblxudmFyIGVtTG9nZ2VyID0gTG9nTWFuYWdlci5nZXRMb2dnZXIoJ2V2ZW50LW1hbmFnZXInKTtcblxuZnVuY3Rpb24gZmluZE9yaWdpbmFsRXZlbnRUYXJnZXQoZXZlbnQpIHtcbiAgcmV0dXJuIGV2ZW50LmNvbXBvc2VkUGF0aCAmJiBldmVudC5jb21wb3NlZFBhdGgoKVswXSB8fCBldmVudC5kZWVwUGF0aCAmJiBldmVudC5kZWVwUGF0aCgpWzBdIHx8IGV2ZW50LnBhdGggJiYgZXZlbnQucGF0aFswXSB8fCBldmVudC50YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIHN0b3BQcm9wYWdhdGlvbigpIHtcbiAgdGhpcy5zdGFuZGFyZFN0b3BQcm9wYWdhdGlvbigpO1xuICB0aGlzLnByb3BhZ2F0aW9uU3RvcHBlZCA9IHRydWU7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUNhcHR1cmVkRXZlbnQoZXZlbnQpIHtcbiAgZXZlbnQucHJvcGFnYXRpb25TdG9wcGVkID0gZmFsc2U7XG4gIHZhciB0YXJnZXQgPSBmaW5kT3JpZ2luYWxFdmVudFRhcmdldChldmVudCk7XG5cbiAgdmFyIG9yZGVyZWRDYWxsYmFja3MgPSBbXTtcblxuICB3aGlsZSAodGFyZ2V0KSB7XG4gICAgaWYgKHRhcmdldC5jYXB0dXJlZENhbGxiYWNrcykge1xuICAgICAgdmFyIGNhbGxiYWNrID0gdGFyZ2V0LmNhcHR1cmVkQ2FsbGJhY2tzW2V2ZW50LnR5cGVdO1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24gIT09IHN0b3BQcm9wYWdhdGlvbikge1xuICAgICAgICAgIGV2ZW50LnN0YW5kYXJkU3RvcFByb3BhZ2F0aW9uID0gZXZlbnQuc3RvcFByb3BhZ2F0aW9uO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbiA9IHN0b3BQcm9wYWdhdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBvcmRlcmVkQ2FsbGJhY2tzLnB1c2goY2FsbGJhY2spO1xuICAgICAgfVxuICAgIH1cbiAgICB0YXJnZXQgPSB0YXJnZXQucGFyZW50Tm9kZTtcbiAgfVxuICBmb3IgKHZhciBpID0gb3JkZXJlZENhbGxiYWNrcy5sZW5ndGggLSAxOyBpID49IDAgJiYgIWV2ZW50LnByb3BhZ2F0aW9uU3RvcHBlZDsgaS0tKSB7XG4gICAgdmFyIG9yZGVyZWRDYWxsYmFjayA9IG9yZGVyZWRDYWxsYmFja3NbaV07XG4gICAgaWYgKCdoYW5kbGVFdmVudCcgaW4gb3JkZXJlZENhbGxiYWNrKSB7XG4gICAgICBvcmRlcmVkQ2FsbGJhY2suaGFuZGxlRXZlbnQoZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcmRlcmVkQ2FsbGJhY2soZXZlbnQpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgQ2FwdHVyZWRIYW5kbGVyRW50cnkgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIENhcHR1cmVkSGFuZGxlckVudHJ5KGV2ZW50TmFtZSkge1xuICAgIFxuXG4gICAgdGhpcy5ldmVudE5hbWUgPSBldmVudE5hbWU7XG4gICAgdGhpcy5jb3VudCA9IDA7XG4gIH1cblxuICBDYXB0dXJlZEhhbmRsZXJFbnRyeS5wcm90b3R5cGUuaW5jcmVtZW50ID0gZnVuY3Rpb24gaW5jcmVtZW50KCkge1xuICAgIHRoaXMuY291bnQrKztcblxuICAgIGlmICh0aGlzLmNvdW50ID09PSAxKSB7XG4gICAgICBET00uYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmV2ZW50TmFtZSwgaGFuZGxlQ2FwdHVyZWRFdmVudCwgdHJ1ZSk7XG4gICAgfVxuICB9O1xuXG4gIENhcHR1cmVkSGFuZGxlckVudHJ5LnByb3RvdHlwZS5kZWNyZW1lbnQgPSBmdW5jdGlvbiBkZWNyZW1lbnQoKSB7XG4gICAgaWYgKHRoaXMuY291bnQgPT09IDApIHtcbiAgICAgIGVtTG9nZ2VyLndhcm4oJ1RoZSBzYW1lIEV2ZW50TGlzdGVuZXIgd2FzIGRpc3Bvc2VkIG11bHRpcGxlIHRpbWVzLicpO1xuICAgIH0gZWxzZSBpZiAoLS10aGlzLmNvdW50ID09PSAwKSB7XG4gICAgICBET00ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLmV2ZW50TmFtZSwgaGFuZGxlQ2FwdHVyZWRFdmVudCwgdHJ1ZSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBDYXB0dXJlZEhhbmRsZXJFbnRyeTtcbn0oKTtcblxudmFyIERlbGVnYXRlSGFuZGxlckVudHJ5ID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBEZWxlZ2F0ZUhhbmRsZXJFbnRyeShldmVudE5hbWUsIGV2ZW50TWFuYWdlcikge1xuICAgIFxuXG4gICAgdGhpcy5ldmVudE5hbWUgPSBldmVudE5hbWU7XG4gICAgdGhpcy5jb3VudCA9IDA7XG4gICAgdGhpcy5ldmVudE1hbmFnZXIgPSBldmVudE1hbmFnZXI7XG4gIH1cblxuICBEZWxlZ2F0ZUhhbmRsZXJFbnRyeS5wcm90b3R5cGUuaGFuZGxlRXZlbnQgPSBmdW5jdGlvbiBoYW5kbGVFdmVudChldmVudCkge1xuICAgIGV2ZW50LnByb3BhZ2F0aW9uU3RvcHBlZCA9IGZhbHNlO1xuICAgIHZhciB0YXJnZXQgPSBmaW5kT3JpZ2luYWxFdmVudFRhcmdldChldmVudCk7XG5cbiAgICB3aGlsZSAodGFyZ2V0ICYmICFldmVudC5wcm9wYWdhdGlvblN0b3BwZWQpIHtcbiAgICAgIGlmICh0YXJnZXQuZGVsZWdhdGVkQ2FsbGJhY2tzKSB7XG4gICAgICAgIHZhciBjYWxsYmFjayA9IHRhcmdldC5kZWxlZ2F0ZWRDYWxsYmFja3NbZXZlbnQudHlwZV07XG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24gIT09IHN0b3BQcm9wYWdhdGlvbikge1xuICAgICAgICAgICAgZXZlbnQuc3RhbmRhcmRTdG9wUHJvcGFnYXRpb24gPSBldmVudC5zdG9wUHJvcGFnYXRpb247XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24gPSBzdG9wUHJvcGFnYXRpb247XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgnaGFuZGxlRXZlbnQnIGluIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjay5oYW5kbGVFdmVudChldmVudCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGV2ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHBhcmVudCA9IHRhcmdldC5wYXJlbnROb2RlO1xuICAgICAgdmFyIHNob3VsZEVzY2FwZVNoYWRvd1Jvb3QgPSB0aGlzLmV2ZW50TWFuYWdlci5lc2NhcGVTaGFkb3dSb290ICYmIHBhcmVudCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3Q7XG5cbiAgICAgIHRhcmdldCA9IHNob3VsZEVzY2FwZVNoYWRvd1Jvb3QgPyBwYXJlbnQuaG9zdCA6IHBhcmVudDtcbiAgICB9XG4gIH07XG5cbiAgRGVsZWdhdGVIYW5kbGVyRW50cnkucHJvdG90eXBlLmluY3JlbWVudCA9IGZ1bmN0aW9uIGluY3JlbWVudCgpIHtcbiAgICB0aGlzLmNvdW50Kys7XG5cbiAgICBpZiAodGhpcy5jb3VudCA9PT0gMSkge1xuICAgICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5ldmVudE5hbWUsIHRoaXMsIGZhbHNlKTtcbiAgICB9XG4gIH07XG5cbiAgRGVsZWdhdGVIYW5kbGVyRW50cnkucHJvdG90eXBlLmRlY3JlbWVudCA9IGZ1bmN0aW9uIGRlY3JlbWVudCgpIHtcbiAgICBpZiAodGhpcy5jb3VudCA9PT0gMCkge1xuICAgICAgZW1Mb2dnZXIud2FybignVGhlIHNhbWUgRXZlbnRMaXN0ZW5lciB3YXMgZGlzcG9zZWQgbXVsdGlwbGUgdGltZXMuJyk7XG4gICAgfSBlbHNlIGlmICgtLXRoaXMuY291bnQgPT09IDApIHtcbiAgICAgIERPTS5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMuZXZlbnROYW1lLCB0aGlzLCBmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBEZWxlZ2F0ZUhhbmRsZXJFbnRyeTtcbn0oKTtcblxudmFyIERlbGVnYXRpb25FbnRyeUhhbmRsZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIERlbGVnYXRpb25FbnRyeUhhbmRsZXIoZW50cnksIGxvb2t1cCwgdGFyZ2V0RXZlbnQpIHtcbiAgICBcblxuICAgIHRoaXMuZW50cnkgPSBlbnRyeTtcbiAgICB0aGlzLmxvb2t1cCA9IGxvb2t1cDtcbiAgICB0aGlzLnRhcmdldEV2ZW50ID0gdGFyZ2V0RXZlbnQ7XG4gIH1cblxuICBEZWxlZ2F0aW9uRW50cnlIYW5kbGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gZGlzcG9zZSgpIHtcbiAgICBpZiAodGhpcy5sb29rdXBbdGhpcy50YXJnZXRFdmVudF0pIHtcbiAgICAgIHRoaXMuZW50cnkuZGVjcmVtZW50KCk7XG4gICAgICB0aGlzLmxvb2t1cFt0aGlzLnRhcmdldEV2ZW50XSA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVtTG9nZ2VyLndhcm4oJ0NhbGxpbmcgLmRpc3Bvc2UoKSBvbiBhbHJlYWR5IGRpc3Bvc2VkIGV2ZW50TGlzdGVuZXInKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIERlbGVnYXRpb25FbnRyeUhhbmRsZXI7XG59KCk7XG5cbnZhciBFdmVudEhhbmRsZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEV2ZW50SGFuZGxlcih0YXJnZXQsIHRhcmdldEV2ZW50LCBjYWxsYmFjaykge1xuICAgIFxuXG4gICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7XG4gICAgdGhpcy50YXJnZXRFdmVudCA9IHRhcmdldEV2ZW50O1xuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgfVxuXG4gIEV2ZW50SGFuZGxlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG4gICAgdGhpcy50YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLnRhcmdldEV2ZW50LCB0aGlzLmNhbGxiYWNrKTtcbiAgfTtcblxuICByZXR1cm4gRXZlbnRIYW5kbGVyO1xufSgpO1xuXG52YXIgRGVmYXVsdEV2ZW50U3RyYXRlZ3kgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIERlZmF1bHRFdmVudFN0cmF0ZWd5KGV2ZW50TWFuYWdlcikge1xuICAgIFxuXG4gICAgdGhpcy5kZWxlZ2F0ZWRIYW5kbGVycyA9IHt9O1xuICAgIHRoaXMuY2FwdHVyZWRIYW5kbGVycyA9IHt9O1xuXG4gICAgdGhpcy5ldmVudE1hbmFnZXIgPSBldmVudE1hbmFnZXI7XG4gIH1cblxuICBEZWZhdWx0RXZlbnRTdHJhdGVneS5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24gc3Vic2NyaWJlKHRhcmdldCwgdGFyZ2V0RXZlbnQsIGNhbGxiYWNrLCBzdHJhdGVneSwgZGlzcG9zYWJsZSkge1xuICAgIHZhciBkZWxlZ2F0ZWRIYW5kbGVycyA9IHZvaWQgMDtcbiAgICB2YXIgY2FwdHVyZWRIYW5kbGVycyA9IHZvaWQgMDtcbiAgICB2YXIgaGFuZGxlckVudHJ5ID0gdm9pZCAwO1xuXG4gICAgaWYgKHN0cmF0ZWd5ID09PSBkZWxlZ2F0aW9uU3RyYXRlZ3kuYnViYmxpbmcpIHtcbiAgICAgIGRlbGVnYXRlZEhhbmRsZXJzID0gdGhpcy5kZWxlZ2F0ZWRIYW5kbGVycztcbiAgICAgIGhhbmRsZXJFbnRyeSA9IGRlbGVnYXRlZEhhbmRsZXJzW3RhcmdldEV2ZW50XSB8fCAoZGVsZWdhdGVkSGFuZGxlcnNbdGFyZ2V0RXZlbnRdID0gbmV3IERlbGVnYXRlSGFuZGxlckVudHJ5KHRhcmdldEV2ZW50LCB0aGlzLmV2ZW50TWFuYWdlcikpO1xuICAgICAgdmFyIGRlbGVnYXRlZENhbGxiYWNrcyA9IHRhcmdldC5kZWxlZ2F0ZWRDYWxsYmFja3MgfHwgKHRhcmdldC5kZWxlZ2F0ZWRDYWxsYmFja3MgPSB7fSk7XG4gICAgICBpZiAoIWRlbGVnYXRlZENhbGxiYWNrc1t0YXJnZXRFdmVudF0pIHtcbiAgICAgICAgaGFuZGxlckVudHJ5LmluY3JlbWVudCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW1Mb2dnZXIud2FybignT3ZlcnJpZGluZyBwcmV2aW91cyBjYWxsYmFjayBmb3IgZXZlbnQgbGlzdGVuZXInLCB7IGV2ZW50OiB0YXJnZXRFdmVudCwgY2FsbGJhY2s6IGNhbGxiYWNrLCBwcmV2aW91c0NhbGxiYWNrOiBkZWxlZ2F0ZWRDYWxsYmFja3NbdGFyZ2V0RXZlbnRdIH0pO1xuICAgICAgfVxuICAgICAgZGVsZWdhdGVkQ2FsbGJhY2tzW3RhcmdldEV2ZW50XSA9IGNhbGxiYWNrO1xuXG4gICAgICBpZiAoZGlzcG9zYWJsZSA9PT0gdHJ1ZSkge1xuICAgICAgICByZXR1cm4gbmV3IERlbGVnYXRpb25FbnRyeUhhbmRsZXIoaGFuZGxlckVudHJ5LCBkZWxlZ2F0ZWRDYWxsYmFja3MsIHRhcmdldEV2ZW50KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaGFuZGxlckVudHJ5LmRlY3JlbWVudCgpO1xuICAgICAgICBkZWxlZ2F0ZWRDYWxsYmFja3NbdGFyZ2V0RXZlbnRdID0gbnVsbDtcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChzdHJhdGVneSA9PT0gZGVsZWdhdGlvblN0cmF0ZWd5LmNhcHR1cmluZykge1xuICAgICAgY2FwdHVyZWRIYW5kbGVycyA9IHRoaXMuY2FwdHVyZWRIYW5kbGVycztcbiAgICAgIGhhbmRsZXJFbnRyeSA9IGNhcHR1cmVkSGFuZGxlcnNbdGFyZ2V0RXZlbnRdIHx8IChjYXB0dXJlZEhhbmRsZXJzW3RhcmdldEV2ZW50XSA9IG5ldyBDYXB0dXJlZEhhbmRsZXJFbnRyeSh0YXJnZXRFdmVudCkpO1xuICAgICAgdmFyIGNhcHR1cmVkQ2FsbGJhY2tzID0gdGFyZ2V0LmNhcHR1cmVkQ2FsbGJhY2tzIHx8ICh0YXJnZXQuY2FwdHVyZWRDYWxsYmFja3MgPSB7fSk7XG4gICAgICBpZiAoIWNhcHR1cmVkQ2FsbGJhY2tzW3RhcmdldEV2ZW50XSkge1xuICAgICAgICBoYW5kbGVyRW50cnkuaW5jcmVtZW50KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbUxvZ2dlci5lcnJvcignYWxyZWFkeSBoYXZlIGEgY2FsbGJhY2sgZm9yIGV2ZW50JywgeyBldmVudDogdGFyZ2V0RXZlbnQsIGNhbGxiYWNrOiBjYWxsYmFjayB9KTtcbiAgICAgIH1cbiAgICAgIGNhcHR1cmVkQ2FsbGJhY2tzW3RhcmdldEV2ZW50XSA9IGNhbGxiYWNrO1xuXG4gICAgICBpZiAoZGlzcG9zYWJsZSA9PT0gdHJ1ZSkge1xuICAgICAgICByZXR1cm4gbmV3IERlbGVnYXRpb25FbnRyeUhhbmRsZXIoaGFuZGxlckVudHJ5LCBjYXB0dXJlZENhbGxiYWNrcywgdGFyZ2V0RXZlbnQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBoYW5kbGVyRW50cnkuZGVjcmVtZW50KCk7XG4gICAgICAgIGNhcHR1cmVkQ2FsbGJhY2tzW3RhcmdldEV2ZW50XSA9IG51bGw7XG4gICAgICB9O1xuICAgIH1cblxuICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHRhcmdldEV2ZW50LCBjYWxsYmFjayk7XG5cbiAgICBpZiAoZGlzcG9zYWJsZSA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIG5ldyBFdmVudEhhbmRsZXIodGFyZ2V0LCB0YXJnZXRFdmVudCwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0YXJnZXRFdmVudCwgY2FsbGJhY2spO1xuICAgIH07XG4gIH07XG5cbiAgcmV0dXJuIERlZmF1bHRFdmVudFN0cmF0ZWd5O1xufSgpO1xuXG5leHBvcnQgdmFyIGRlbGVnYXRpb25TdHJhdGVneSA9IHtcbiAgbm9uZTogMCxcbiAgY2FwdHVyaW5nOiAxLFxuICBidWJibGluZzogMlxufTtcblxuZXhwb3J0IHZhciBFdmVudE1hbmFnZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEV2ZW50TWFuYWdlcigpIHtcbiAgICB2YXIgZXNjYXBlU2hhZG93Um9vdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZmFsc2U7XG5cbiAgICBcblxuICAgIHRoaXMuZWxlbWVudEhhbmRsZXJMb29rdXAgPSB7fTtcbiAgICB0aGlzLmV2ZW50U3RyYXRlZ3lMb29rdXAgPSB7fTtcbiAgICB0aGlzLmVzY2FwZVNoYWRvd1Jvb3QgPSBlc2NhcGVTaGFkb3dSb290O1xuXG4gICAgdGhpcy5yZWdpc3RlckVsZW1lbnRDb25maWcoe1xuICAgICAgdGFnTmFtZTogJ2lucHV0JyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgdmFsdWU6IFsnY2hhbmdlJywgJ2lucHV0J10sXG4gICAgICAgIGNoZWNrZWQ6IFsnY2hhbmdlJywgJ2lucHV0J10sXG4gICAgICAgIGZpbGVzOiBbJ2NoYW5nZScsICdpbnB1dCddXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnJlZ2lzdGVyRWxlbWVudENvbmZpZyh7XG4gICAgICB0YWdOYW1lOiAndGV4dGFyZWEnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICB2YWx1ZTogWydjaGFuZ2UnLCAnaW5wdXQnXVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5yZWdpc3RlckVsZW1lbnRDb25maWcoe1xuICAgICAgdGFnTmFtZTogJ3NlbGVjdCcsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHZhbHVlOiBbJ2NoYW5nZSddXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnJlZ2lzdGVyRWxlbWVudENvbmZpZyh7XG4gICAgICB0YWdOYW1lOiAnY29udGVudCBlZGl0YWJsZScsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHZhbHVlOiBbJ2NoYW5nZScsICdpbnB1dCcsICdibHVyJywgJ2tleXVwJywgJ3Bhc3RlJ11cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMucmVnaXN0ZXJFbGVtZW50Q29uZmlnKHtcbiAgICAgIHRhZ05hbWU6ICdzY3JvbGxhYmxlIGVsZW1lbnQnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBzY3JvbGxUb3A6IFsnc2Nyb2xsJ10sXG4gICAgICAgIHNjcm9sbExlZnQ6IFsnc2Nyb2xsJ11cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuZGVmYXVsdEV2ZW50U3RyYXRlZ3kgPSBuZXcgRGVmYXVsdEV2ZW50U3RyYXRlZ3kodGhpcyk7XG4gIH1cblxuICBFdmVudE1hbmFnZXIucHJvdG90eXBlLnJlZ2lzdGVyRWxlbWVudENvbmZpZyA9IGZ1bmN0aW9uIHJlZ2lzdGVyRWxlbWVudENvbmZpZyhjb25maWcpIHtcbiAgICB2YXIgdGFnTmFtZSA9IGNvbmZpZy50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIHByb3BlcnRpZXMgPSBjb25maWcucHJvcGVydGllcztcbiAgICB2YXIgcHJvcGVydHlOYW1lID0gdm9pZCAwO1xuXG4gICAgdmFyIGxvb2t1cCA9IHRoaXMuZWxlbWVudEhhbmRsZXJMb29rdXBbdGFnTmFtZV0gPSB7fTtcblxuICAgIGZvciAocHJvcGVydHlOYW1lIGluIHByb3BlcnRpZXMpIHtcbiAgICAgIGlmIChwcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgbG9va3VwW3Byb3BlcnR5TmFtZV0gPSBwcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIEV2ZW50TWFuYWdlci5wcm90b3R5cGUucmVnaXN0ZXJFdmVudFN0cmF0ZWd5ID0gZnVuY3Rpb24gcmVnaXN0ZXJFdmVudFN0cmF0ZWd5KGV2ZW50TmFtZSwgc3RyYXRlZ3kpIHtcbiAgICB0aGlzLmV2ZW50U3RyYXRlZ3lMb29rdXBbZXZlbnROYW1lXSA9IHN0cmF0ZWd5O1xuICB9O1xuXG4gIEV2ZW50TWFuYWdlci5wcm90b3R5cGUuZ2V0RWxlbWVudEhhbmRsZXIgPSBmdW5jdGlvbiBnZXRFbGVtZW50SGFuZGxlcih0YXJnZXQsIHByb3BlcnR5TmFtZSkge1xuICAgIHZhciB0YWdOYW1lID0gdm9pZCAwO1xuICAgIHZhciBsb29rdXAgPSB0aGlzLmVsZW1lbnRIYW5kbGVyTG9va3VwO1xuXG4gICAgaWYgKHRhcmdldC50YWdOYW1lKSB7XG4gICAgICB0YWdOYW1lID0gdGFyZ2V0LnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgICAgaWYgKGxvb2t1cFt0YWdOYW1lXSAmJiBsb29rdXBbdGFnTmFtZV1bcHJvcGVydHlOYW1lXSkge1xuICAgICAgICByZXR1cm4gbmV3IEV2ZW50U3Vic2NyaWJlcihsb29rdXBbdGFnTmFtZV1bcHJvcGVydHlOYW1lXSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT09ICd0ZXh0Q29udGVudCcgfHwgcHJvcGVydHlOYW1lID09PSAnaW5uZXJIVE1MJykge1xuICAgICAgICByZXR1cm4gbmV3IEV2ZW50U3Vic2NyaWJlcihsb29rdXBbJ2NvbnRlbnQgZWRpdGFibGUnXS52YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT09ICdzY3JvbGxUb3AnIHx8IHByb3BlcnR5TmFtZSA9PT0gJ3Njcm9sbExlZnQnKSB7XG4gICAgICAgIHJldHVybiBuZXcgRXZlbnRTdWJzY3JpYmVyKGxvb2t1cFsnc2Nyb2xsYWJsZSBlbGVtZW50J11bcHJvcGVydHlOYW1lXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgRXZlbnRNYW5hZ2VyLnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyID0gZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcih0YXJnZXQsIHRhcmdldEV2ZW50LCBjYWxsYmFja09yTGlzdGVuZXIsIGRlbGVnYXRlLCBkaXNwb3NhYmxlKSB7XG4gICAgcmV0dXJuICh0aGlzLmV2ZW50U3RyYXRlZ3lMb29rdXBbdGFyZ2V0RXZlbnRdIHx8IHRoaXMuZGVmYXVsdEV2ZW50U3RyYXRlZ3kpLnN1YnNjcmliZSh0YXJnZXQsIHRhcmdldEV2ZW50LCBjYWxsYmFja09yTGlzdGVuZXIsIGRlbGVnYXRlLCBkaXNwb3NhYmxlKTtcbiAgfTtcblxuICByZXR1cm4gRXZlbnRNYW5hZ2VyO1xufSgpO1xuXG5leHBvcnQgdmFyIEV2ZW50U3Vic2NyaWJlciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRXZlbnRTdWJzY3JpYmVyKGV2ZW50cykge1xuICAgIFxuXG4gICAgdGhpcy5ldmVudHMgPSBldmVudHM7XG4gICAgdGhpcy5lbGVtZW50ID0gbnVsbDtcbiAgICB0aGlzLmhhbmRsZXIgPSBudWxsO1xuICB9XG5cbiAgRXZlbnRTdWJzY3JpYmVyLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiBzdWJzY3JpYmUoZWxlbWVudCwgY2FsbGJhY2tPckxpc3RlbmVyKSB7XG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLmhhbmRsZXIgPSBjYWxsYmFja09yTGlzdGVuZXI7XG5cbiAgICB2YXIgZXZlbnRzID0gdGhpcy5ldmVudHM7XG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gZXZlbnRzLmxlbmd0aDsgaWkgPiBpOyArK2kpIHtcbiAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudHNbaV0sIGNhbGxiYWNrT3JMaXN0ZW5lcik7XG4gICAgfVxuICB9O1xuXG4gIEV2ZW50U3Vic2NyaWJlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG4gICAgaWYgKHRoaXMuZWxlbWVudCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgZWxlbWVudCA9IHRoaXMuZWxlbWVudDtcbiAgICB2YXIgY2FsbGJhY2tPckxpc3RlbmVyID0gdGhpcy5oYW5kbGVyO1xuICAgIHZhciBldmVudHMgPSB0aGlzLmV2ZW50cztcbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBldmVudHMubGVuZ3RoOyBpaSA+IGk7ICsraSkge1xuICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50c1tpXSwgY2FsbGJhY2tPckxpc3RlbmVyKTtcbiAgICB9XG4gICAgdGhpcy5lbGVtZW50ID0gdGhpcy5oYW5kbGVyID0gbnVsbDtcbiAgfTtcblxuICByZXR1cm4gRXZlbnRTdWJzY3JpYmVyO1xufSgpO1xuXG5leHBvcnQgdmFyIERpcnR5Q2hlY2tlciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRGlydHlDaGVja2VyKCkge1xuICAgIFxuXG4gICAgdGhpcy50cmFja2VkID0gW107XG4gICAgdGhpcy5jaGVja0RlbGF5ID0gMTIwO1xuICB9XG5cbiAgRGlydHlDaGVja2VyLnByb3RvdHlwZS5hZGRQcm9wZXJ0eSA9IGZ1bmN0aW9uIGFkZFByb3BlcnR5KHByb3BlcnR5KSB7XG4gICAgdmFyIHRyYWNrZWQgPSB0aGlzLnRyYWNrZWQ7XG5cbiAgICB0cmFja2VkLnB1c2gocHJvcGVydHkpO1xuXG4gICAgaWYgKHRyYWNrZWQubGVuZ3RoID09PSAxKSB7XG4gICAgICB0aGlzLnNjaGVkdWxlRGlydHlDaGVjaygpO1xuICAgIH1cbiAgfTtcblxuICBEaXJ0eUNoZWNrZXIucHJvdG90eXBlLnJlbW92ZVByb3BlcnR5ID0gZnVuY3Rpb24gcmVtb3ZlUHJvcGVydHkocHJvcGVydHkpIHtcbiAgICB2YXIgdHJhY2tlZCA9IHRoaXMudHJhY2tlZDtcbiAgICB0cmFja2VkLnNwbGljZSh0cmFja2VkLmluZGV4T2YocHJvcGVydHkpLCAxKTtcbiAgfTtcblxuICBEaXJ0eUNoZWNrZXIucHJvdG90eXBlLnNjaGVkdWxlRGlydHlDaGVjayA9IGZ1bmN0aW9uIHNjaGVkdWxlRGlydHlDaGVjaygpIHtcbiAgICB2YXIgX3RoaXMyMiA9IHRoaXM7XG5cbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpczIyLmNoZWNrKCk7XG4gICAgfSwgdGhpcy5jaGVja0RlbGF5KTtcbiAgfTtcblxuICBEaXJ0eUNoZWNrZXIucHJvdG90eXBlLmNoZWNrID0gZnVuY3Rpb24gY2hlY2soKSB7XG4gICAgdmFyIHRyYWNrZWQgPSB0aGlzLnRyYWNrZWQ7XG4gICAgdmFyIGkgPSB0cmFja2VkLmxlbmd0aDtcblxuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIHZhciBjdXJyZW50ID0gdHJhY2tlZFtpXTtcblxuICAgICAgaWYgKGN1cnJlbnQuaXNEaXJ0eSgpKSB7XG4gICAgICAgIGN1cnJlbnQuY2FsbCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0cmFja2VkLmxlbmd0aCkge1xuICAgICAgdGhpcy5zY2hlZHVsZURpcnR5Q2hlY2soKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIERpcnR5Q2hlY2tlcjtcbn0oKTtcblxuZXhwb3J0IHZhciBEaXJ0eUNoZWNrUHJvcGVydHkgPSAoX2RlYzUgPSBzdWJzY3JpYmVyQ29sbGVjdGlvbigpLCBfZGVjNShfY2xhc3M1ID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBEaXJ0eUNoZWNrUHJvcGVydHkoZGlydHlDaGVja2VyLCBvYmosIHByb3BlcnR5TmFtZSkge1xuICAgIFxuXG4gICAgdGhpcy5kaXJ0eUNoZWNrZXIgPSBkaXJ0eUNoZWNrZXI7XG4gICAgdGhpcy5vYmogPSBvYmo7XG4gICAgdGhpcy5wcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWU7XG4gIH1cblxuICBEaXJ0eUNoZWNrUHJvcGVydHkucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24gZ2V0VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMub2JqW3RoaXMucHJvcGVydHlOYW1lXTtcbiAgfTtcblxuICBEaXJ0eUNoZWNrUHJvcGVydHkucHJvdG90eXBlLnNldFZhbHVlID0gZnVuY3Rpb24gc2V0VmFsdWUobmV3VmFsdWUpIHtcbiAgICB0aGlzLm9ialt0aGlzLnByb3BlcnR5TmFtZV0gPSBuZXdWYWx1ZTtcbiAgfTtcblxuICBEaXJ0eUNoZWNrUHJvcGVydHkucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiBjYWxsKCkge1xuICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMub2xkVmFsdWU7XG4gICAgdmFyIG5ld1ZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpO1xuXG4gICAgdGhpcy5jYWxsU3Vic2NyaWJlcnMobmV3VmFsdWUsIG9sZFZhbHVlKTtcblxuICAgIHRoaXMub2xkVmFsdWUgPSBuZXdWYWx1ZTtcbiAgfTtcblxuICBEaXJ0eUNoZWNrUHJvcGVydHkucHJvdG90eXBlLmlzRGlydHkgPSBmdW5jdGlvbiBpc0RpcnR5KCkge1xuICAgIHJldHVybiB0aGlzLm9sZFZhbHVlICE9PSB0aGlzLm9ialt0aGlzLnByb3BlcnR5TmFtZV07XG4gIH07XG5cbiAgRGlydHlDaGVja1Byb3BlcnR5LnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiBzdWJzY3JpYmUoY29udGV4dCwgY2FsbGFibGUpIHtcbiAgICBpZiAoIXRoaXMuaGFzU3Vic2NyaWJlcnMoKSkge1xuICAgICAgdGhpcy5vbGRWYWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKTtcbiAgICAgIHRoaXMuZGlydHlDaGVja2VyLmFkZFByb3BlcnR5KHRoaXMpO1xuICAgIH1cbiAgICB0aGlzLmFkZFN1YnNjcmliZXIoY29udGV4dCwgY2FsbGFibGUpO1xuICB9O1xuXG4gIERpcnR5Q2hlY2tQcm9wZXJ0eS5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiB1bnN1YnNjcmliZShjb250ZXh0LCBjYWxsYWJsZSkge1xuICAgIGlmICh0aGlzLnJlbW92ZVN1YnNjcmliZXIoY29udGV4dCwgY2FsbGFibGUpICYmICF0aGlzLmhhc1N1YnNjcmliZXJzKCkpIHtcbiAgICAgIHRoaXMuZGlydHlDaGVja2VyLnJlbW92ZVByb3BlcnR5KHRoaXMpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gRGlydHlDaGVja1Byb3BlcnR5O1xufSgpKSB8fCBfY2xhc3M1KTtcblxudmFyIGxvZ2dlciA9IExvZ01hbmFnZXIuZ2V0TG9nZ2VyKCdwcm9wZXJ0eS1vYnNlcnZhdGlvbicpO1xuXG5leHBvcnQgdmFyIHByb3BlcnR5QWNjZXNzb3IgPSB7XG4gIGdldFZhbHVlOiBmdW5jdGlvbiBnZXRWYWx1ZShvYmosIHByb3BlcnR5TmFtZSkge1xuICAgIHJldHVybiBvYmpbcHJvcGVydHlOYW1lXTtcbiAgfSxcbiAgc2V0VmFsdWU6IGZ1bmN0aW9uIHNldFZhbHVlKHZhbHVlLCBvYmosIHByb3BlcnR5TmFtZSkge1xuICAgIG9ialtwcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG4gIH1cbn07XG5cbmV4cG9ydCB2YXIgUHJpbWl0aXZlT2JzZXJ2ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFByaW1pdGl2ZU9ic2VydmVyKHByaW1pdGl2ZSwgcHJvcGVydHlOYW1lKSB7XG4gICAgXG5cbiAgICB0aGlzLmRvTm90Q2FjaGUgPSB0cnVlO1xuXG4gICAgdGhpcy5wcmltaXRpdmUgPSBwcmltaXRpdmU7XG4gICAgdGhpcy5wcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWU7XG4gIH1cblxuICBQcmltaXRpdmVPYnNlcnZlci5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbiBnZXRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcmltaXRpdmVbdGhpcy5wcm9wZXJ0eU5hbWVdO1xuICB9O1xuXG4gIFByaW1pdGl2ZU9ic2VydmVyLnByb3RvdHlwZS5zZXRWYWx1ZSA9IGZ1bmN0aW9uIHNldFZhbHVlKCkge1xuICAgIHZhciB0eXBlID0gX3R5cGVvZih0aGlzLnByaW1pdGl2ZSk7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgJyArIHRoaXMucHJvcGVydHlOYW1lICsgJyBwcm9wZXJ0eSBvZiBhICcgKyB0eXBlICsgJyAoJyArIHRoaXMucHJpbWl0aXZlICsgJykgY2Fubm90IGJlIGFzc2lnbmVkLicpO1xuICB9O1xuXG4gIFByaW1pdGl2ZU9ic2VydmVyLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiBzdWJzY3JpYmUoKSB7fTtcblxuICBQcmltaXRpdmVPYnNlcnZlci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHt9O1xuXG4gIHJldHVybiBQcmltaXRpdmVPYnNlcnZlcjtcbn0oKTtcblxuZXhwb3J0IHZhciBTZXR0ZXJPYnNlcnZlciA9IChfZGVjNiA9IHN1YnNjcmliZXJDb2xsZWN0aW9uKCksIF9kZWM2KF9jbGFzczcgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFNldHRlck9ic2VydmVyKHRhc2tRdWV1ZSwgb2JqLCBwcm9wZXJ0eU5hbWUpIHtcbiAgICBcblxuICAgIHRoaXMudGFza1F1ZXVlID0gdGFza1F1ZXVlO1xuICAgIHRoaXMub2JqID0gb2JqO1xuICAgIHRoaXMucHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lO1xuICAgIHRoaXMucXVldWVkID0gZmFsc2U7XG4gICAgdGhpcy5vYnNlcnZpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIFNldHRlck9ic2VydmVyLnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uIGdldFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLm9ialt0aGlzLnByb3BlcnR5TmFtZV07XG4gIH07XG5cbiAgU2V0dGVyT2JzZXJ2ZXIucHJvdG90eXBlLnNldFZhbHVlID0gZnVuY3Rpb24gc2V0VmFsdWUobmV3VmFsdWUpIHtcbiAgICB0aGlzLm9ialt0aGlzLnByb3BlcnR5TmFtZV0gPSBuZXdWYWx1ZTtcbiAgfTtcblxuICBTZXR0ZXJPYnNlcnZlci5wcm90b3R5cGUuZ2V0dGVyVmFsdWUgPSBmdW5jdGlvbiBnZXR0ZXJWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50VmFsdWU7XG4gIH07XG5cbiAgU2V0dGVyT2JzZXJ2ZXIucHJvdG90eXBlLnNldHRlclZhbHVlID0gZnVuY3Rpb24gc2V0dGVyVmFsdWUobmV3VmFsdWUpIHtcbiAgICB2YXIgb2xkVmFsdWUgPSB0aGlzLmN1cnJlbnRWYWx1ZTtcblxuICAgIGlmIChvbGRWYWx1ZSAhPT0gbmV3VmFsdWUpIHtcbiAgICAgIGlmICghdGhpcy5xdWV1ZWQpIHtcbiAgICAgICAgdGhpcy5vbGRWYWx1ZSA9IG9sZFZhbHVlO1xuICAgICAgICB0aGlzLnF1ZXVlZCA9IHRydWU7XG4gICAgICAgIHRoaXMudGFza1F1ZXVlLnF1ZXVlTWljcm9UYXNrKHRoaXMpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IG5ld1ZhbHVlO1xuICAgIH1cbiAgfTtcblxuICBTZXR0ZXJPYnNlcnZlci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIGNhbGwoKSB7XG4gICAgdmFyIG9sZFZhbHVlID0gdGhpcy5vbGRWYWx1ZTtcbiAgICB2YXIgbmV3VmFsdWUgPSB0aGlzLm9sZFZhbHVlID0gdGhpcy5jdXJyZW50VmFsdWU7XG5cbiAgICB0aGlzLnF1ZXVlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5jYWxsU3Vic2NyaWJlcnMobmV3VmFsdWUsIG9sZFZhbHVlKTtcbiAgfTtcblxuICBTZXR0ZXJPYnNlcnZlci5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24gc3Vic2NyaWJlKGNvbnRleHQsIGNhbGxhYmxlKSB7XG4gICAgaWYgKCF0aGlzLm9ic2VydmluZykge1xuICAgICAgdGhpcy5jb252ZXJ0UHJvcGVydHkoKTtcbiAgICB9XG4gICAgdGhpcy5hZGRTdWJzY3JpYmVyKGNvbnRleHQsIGNhbGxhYmxlKTtcbiAgfTtcblxuICBTZXR0ZXJPYnNlcnZlci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiB1bnN1YnNjcmliZShjb250ZXh0LCBjYWxsYWJsZSkge1xuICAgIHRoaXMucmVtb3ZlU3Vic2NyaWJlcihjb250ZXh0LCBjYWxsYWJsZSk7XG4gIH07XG5cbiAgU2V0dGVyT2JzZXJ2ZXIucHJvdG90eXBlLmNvbnZlcnRQcm9wZXJ0eSA9IGZ1bmN0aW9uIGNvbnZlcnRQcm9wZXJ0eSgpIHtcbiAgICB0aGlzLm9ic2VydmluZyA9IHRydWU7XG4gICAgdGhpcy5jdXJyZW50VmFsdWUgPSB0aGlzLm9ialt0aGlzLnByb3BlcnR5TmFtZV07XG4gICAgdGhpcy5zZXRWYWx1ZSA9IHRoaXMuc2V0dGVyVmFsdWU7XG4gICAgdGhpcy5nZXRWYWx1ZSA9IHRoaXMuZ2V0dGVyVmFsdWU7XG5cbiAgICBpZiAoIVJlZmxlY3QuZGVmaW5lUHJvcGVydHkodGhpcy5vYmosIHRoaXMucHJvcGVydHlOYW1lLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiB0aGlzLnByb3BlcnR5TmFtZSBpbiB0aGlzLm9iaiA/IHRoaXMub2JqLnByb3BlcnR5SXNFbnVtZXJhYmxlKHRoaXMucHJvcGVydHlOYW1lKSA6IHRydWUsXG4gICAgICBnZXQ6IHRoaXMuZ2V0VmFsdWUuYmluZCh0aGlzKSxcbiAgICAgIHNldDogdGhpcy5zZXRWYWx1ZS5iaW5kKHRoaXMpXG4gICAgfSkpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdDYW5ub3Qgb2JzZXJ2ZSBwcm9wZXJ0eSBcXCcnICsgdGhpcy5wcm9wZXJ0eU5hbWUgKyAnXFwnIG9mIG9iamVjdCcsIHRoaXMub2JqKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFNldHRlck9ic2VydmVyO1xufSgpKSB8fCBfY2xhc3M3KTtcblxuZXhwb3J0IHZhciBYTGlua0F0dHJpYnV0ZU9ic2VydmVyID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBYTGlua0F0dHJpYnV0ZU9ic2VydmVyKGVsZW1lbnQsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlTmFtZSkge1xuICAgIFxuXG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLnByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTtcbiAgICB0aGlzLmF0dHJpYnV0ZU5hbWUgPSBhdHRyaWJ1dGVOYW1lO1xuICB9XG5cbiAgWExpbmtBdHRyaWJ1dGVPYnNlcnZlci5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbiBnZXRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50LmdldEF0dHJpYnV0ZU5TKCdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJywgdGhpcy5hdHRyaWJ1dGVOYW1lKTtcbiAgfTtcblxuICBYTGlua0F0dHJpYnV0ZU9ic2VydmVyLnByb3RvdHlwZS5zZXRWYWx1ZSA9IGZ1bmN0aW9uIHNldFZhbHVlKG5ld1ZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGVOUygnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycsIHRoaXMuYXR0cmlidXRlTmFtZSwgbmV3VmFsdWUpO1xuICB9O1xuXG4gIFhMaW5rQXR0cmlidXRlT2JzZXJ2ZXIucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uIHN1YnNjcmliZSgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ09ic2VydmF0aW9uIG9mIGEgXCInICsgdGhpcy5lbGVtZW50Lm5vZGVOYW1lICsgJ1wiIGVsZW1lbnRcXCdzIFwiJyArIHRoaXMucHJvcGVydHlOYW1lICsgJ1wiIHByb3BlcnR5IGlzIG5vdCBzdXBwb3J0ZWQuJyk7XG4gIH07XG5cbiAgcmV0dXJuIFhMaW5rQXR0cmlidXRlT2JzZXJ2ZXI7XG59KCk7XG5cbmV4cG9ydCB2YXIgZGF0YUF0dHJpYnV0ZUFjY2Vzc29yID0ge1xuICBnZXRWYWx1ZTogZnVuY3Rpb24gZ2V0VmFsdWUob2JqLCBwcm9wZXJ0eU5hbWUpIHtcbiAgICByZXR1cm4gb2JqLmdldEF0dHJpYnV0ZShwcm9wZXJ0eU5hbWUpO1xuICB9LFxuICBzZXRWYWx1ZTogZnVuY3Rpb24gc2V0VmFsdWUodmFsdWUsIG9iaiwgcHJvcGVydHlOYW1lKSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG9iai5yZW1vdmVBdHRyaWJ1dGUocHJvcGVydHlOYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqLnNldEF0dHJpYnV0ZShwcm9wZXJ0eU5hbWUsIHZhbHVlKTtcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCB2YXIgRGF0YUF0dHJpYnV0ZU9ic2VydmVyID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBEYXRhQXR0cmlidXRlT2JzZXJ2ZXIoZWxlbWVudCwgcHJvcGVydHlOYW1lKSB7XG4gICAgXG5cbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMucHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lO1xuICB9XG5cbiAgRGF0YUF0dHJpYnV0ZU9ic2VydmVyLnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uIGdldFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnQuZ2V0QXR0cmlidXRlKHRoaXMucHJvcGVydHlOYW1lKTtcbiAgfTtcblxuICBEYXRhQXR0cmlidXRlT2JzZXJ2ZXIucHJvdG90eXBlLnNldFZhbHVlID0gZnVuY3Rpb24gc2V0VmFsdWUobmV3VmFsdWUpIHtcbiAgICBpZiAobmV3VmFsdWUgPT09IG51bGwgfHwgbmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUodGhpcy5wcm9wZXJ0eU5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSh0aGlzLnByb3BlcnR5TmFtZSwgbmV3VmFsdWUpO1xuICB9O1xuXG4gIERhdGFBdHRyaWJ1dGVPYnNlcnZlci5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24gc3Vic2NyaWJlKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignT2JzZXJ2YXRpb24gb2YgYSBcIicgKyB0aGlzLmVsZW1lbnQubm9kZU5hbWUgKyAnXCIgZWxlbWVudFxcJ3MgXCInICsgdGhpcy5wcm9wZXJ0eU5hbWUgKyAnXCIgcHJvcGVydHkgaXMgbm90IHN1cHBvcnRlZC4nKTtcbiAgfTtcblxuICByZXR1cm4gRGF0YUF0dHJpYnV0ZU9ic2VydmVyO1xufSgpO1xuXG5leHBvcnQgdmFyIFN0eWxlT2JzZXJ2ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFN0eWxlT2JzZXJ2ZXIoZWxlbWVudCwgcHJvcGVydHlOYW1lKSB7XG4gICAgXG5cbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMucHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lO1xuXG4gICAgdGhpcy5zdHlsZXMgPSBudWxsO1xuICAgIHRoaXMudmVyc2lvbiA9IDA7XG4gIH1cblxuICBTdHlsZU9ic2VydmVyLnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uIGdldFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnQuc3R5bGUuY3NzVGV4dDtcbiAgfTtcblxuICBTdHlsZU9ic2VydmVyLnByb3RvdHlwZS5fc2V0UHJvcGVydHkgPSBmdW5jdGlvbiBfc2V0UHJvcGVydHkoc3R5bGUsIHZhbHVlKSB7XG4gICAgdmFyIHByaW9yaXR5ID0gJyc7XG5cbiAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgdmFsdWUuaW5kZXhPZiA9PT0gJ2Z1bmN0aW9uJyAmJiB2YWx1ZS5pbmRleE9mKCchaW1wb3J0YW50JykgIT09IC0xKSB7XG4gICAgICBwcmlvcml0eSA9ICdpbXBvcnRhbnQnO1xuICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKCchaW1wb3J0YW50JywgJycpO1xuICAgIH1cbiAgICB0aGlzLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoc3R5bGUsIHZhbHVlLCBwcmlvcml0eSk7XG4gIH07XG5cbiAgU3R5bGVPYnNlcnZlci5wcm90b3R5cGUuc2V0VmFsdWUgPSBmdW5jdGlvbiBzZXRWYWx1ZShuZXdWYWx1ZSkge1xuICAgIHZhciBzdHlsZXMgPSB0aGlzLnN0eWxlcyB8fCB7fTtcbiAgICB2YXIgc3R5bGUgPSB2b2lkIDA7XG4gICAgdmFyIHZlcnNpb24gPSB0aGlzLnZlcnNpb247XG5cbiAgICBpZiAobmV3VmFsdWUgIT09IG51bGwgJiYgbmV3VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKG5ld1ZhbHVlIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHZvaWQgMDtcbiAgICAgICAgZm9yIChzdHlsZSBpbiBuZXdWYWx1ZSkge1xuICAgICAgICAgIGlmIChuZXdWYWx1ZS5oYXNPd25Qcm9wZXJ0eShzdHlsZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gbmV3VmFsdWVbc3R5bGVdO1xuICAgICAgICAgICAgc3R5bGUgPSBzdHlsZS5yZXBsYWNlKC8oW0EtWl0pL2csIGZ1bmN0aW9uIChtKSB7XG4gICAgICAgICAgICAgIHJldHVybiAnLScgKyBtLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHN0eWxlc1tzdHlsZV0gPSB2ZXJzaW9uO1xuICAgICAgICAgICAgdGhpcy5fc2V0UHJvcGVydHkoc3R5bGUsIHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobmV3VmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIHZhciByeCA9IC9cXHMqKFtcXHdcXC1dKylcXHMqOlxccyooKD86KD86W1xcd1xcLV0rXFwoXFxzKig/OlwiKD86XFxcXFwifFteXCJdKSpcInwnKD86XFxcXCd8W14nXSkqJ3xbXFx3XFwtXStcXChcXHMqKD86XlwiKD86XFxcXFwifFteXCJdKSpcInwnKD86XFxcXCd8W14nXSkqJ3xbXlxcKV0qKVxcKSw/fFteXFwpXSopXFwpLD98XCIoPzpcXFxcXCJ8W15cIl0pKlwifCcoPzpcXFxcJ3xbXiddKSonfFteO10qKSw/XFxzKikrKTs/L2c7XG4gICAgICAgIHZhciBwYWlyID0gdm9pZCAwO1xuICAgICAgICB3aGlsZSAoKHBhaXIgPSByeC5leGVjKG5ld1ZhbHVlKSkgIT09IG51bGwpIHtcbiAgICAgICAgICBzdHlsZSA9IHBhaXJbMV07XG4gICAgICAgICAgaWYgKCFzdHlsZSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3R5bGVzW3N0eWxlXSA9IHZlcnNpb247XG4gICAgICAgICAgdGhpcy5fc2V0UHJvcGVydHkoc3R5bGUsIHBhaXJbMl0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zdHlsZXMgPSBzdHlsZXM7XG4gICAgdGhpcy52ZXJzaW9uICs9IDE7XG5cbiAgICBpZiAodmVyc2lvbiA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZlcnNpb24gLT0gMTtcbiAgICBmb3IgKHN0eWxlIGluIHN0eWxlcykge1xuICAgICAgaWYgKCFzdHlsZXMuaGFzT3duUHJvcGVydHkoc3R5bGUpIHx8IHN0eWxlc1tzdHlsZV0gIT09IHZlcnNpb24pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShzdHlsZSk7XG4gICAgfVxuICB9O1xuXG4gIFN0eWxlT2JzZXJ2ZXIucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uIHN1YnNjcmliZSgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ09ic2VydmF0aW9uIG9mIGEgXCInICsgdGhpcy5lbGVtZW50Lm5vZGVOYW1lICsgJ1wiIGVsZW1lbnRcXCdzIFwiJyArIHRoaXMucHJvcGVydHlOYW1lICsgJ1wiIHByb3BlcnR5IGlzIG5vdCBzdXBwb3J0ZWQuJyk7XG4gIH07XG5cbiAgcmV0dXJuIFN0eWxlT2JzZXJ2ZXI7XG59KCk7XG5cbmV4cG9ydCB2YXIgVmFsdWVBdHRyaWJ1dGVPYnNlcnZlciA9IChfZGVjNyA9IHN1YnNjcmliZXJDb2xsZWN0aW9uKCksIF9kZWM3KF9jbGFzczggPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFZhbHVlQXR0cmlidXRlT2JzZXJ2ZXIoZWxlbWVudCwgcHJvcGVydHlOYW1lLCBoYW5kbGVyKSB7XG4gICAgXG5cbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMucHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lO1xuICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXI7XG4gICAgaWYgKHByb3BlcnR5TmFtZSA9PT0gJ2ZpbGVzJykge1xuICAgICAgdGhpcy5zZXRWYWx1ZSA9IGZ1bmN0aW9uICgpIHt9O1xuICAgIH1cbiAgfVxuXG4gIFZhbHVlQXR0cmlidXRlT2JzZXJ2ZXIucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24gZ2V0VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFt0aGlzLnByb3BlcnR5TmFtZV07XG4gIH07XG5cbiAgVmFsdWVBdHRyaWJ1dGVPYnNlcnZlci5wcm90b3R5cGUuc2V0VmFsdWUgPSBmdW5jdGlvbiBzZXRWYWx1ZShuZXdWYWx1ZSkge1xuICAgIG5ld1ZhbHVlID0gbmV3VmFsdWUgPT09IHVuZGVmaW5lZCB8fCBuZXdWYWx1ZSA9PT0gbnVsbCA/ICcnIDogbmV3VmFsdWU7XG4gICAgaWYgKHRoaXMuZWxlbWVudFt0aGlzLnByb3BlcnR5TmFtZV0gIT09IG5ld1ZhbHVlKSB7XG4gICAgICB0aGlzLmVsZW1lbnRbdGhpcy5wcm9wZXJ0eU5hbWVdID0gbmV3VmFsdWU7XG4gICAgICB0aGlzLm5vdGlmeSgpO1xuICAgIH1cbiAgfTtcblxuICBWYWx1ZUF0dHJpYnV0ZU9ic2VydmVyLnByb3RvdHlwZS5ub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkoKSB7XG4gICAgdmFyIG9sZFZhbHVlID0gdGhpcy5vbGRWYWx1ZTtcbiAgICB2YXIgbmV3VmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XG5cbiAgICB0aGlzLmNhbGxTdWJzY3JpYmVycyhuZXdWYWx1ZSwgb2xkVmFsdWUpO1xuXG4gICAgdGhpcy5vbGRWYWx1ZSA9IG5ld1ZhbHVlO1xuICB9O1xuXG4gIFZhbHVlQXR0cmlidXRlT2JzZXJ2ZXIucHJvdG90eXBlLmhhbmRsZUV2ZW50ID0gZnVuY3Rpb24gaGFuZGxlRXZlbnQoKSB7XG4gICAgdGhpcy5ub3RpZnkoKTtcbiAgfTtcblxuICBWYWx1ZUF0dHJpYnV0ZU9ic2VydmVyLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiBzdWJzY3JpYmUoY29udGV4dCwgY2FsbGFibGUpIHtcbiAgICBpZiAoIXRoaXMuaGFzU3Vic2NyaWJlcnMoKSkge1xuICAgICAgdGhpcy5vbGRWYWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKTtcbiAgICAgIHRoaXMuaGFuZGxlci5zdWJzY3JpYmUodGhpcy5lbGVtZW50LCB0aGlzKTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZFN1YnNjcmliZXIoY29udGV4dCwgY2FsbGFibGUpO1xuICB9O1xuXG4gIFZhbHVlQXR0cmlidXRlT2JzZXJ2ZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gdW5zdWJzY3JpYmUoY29udGV4dCwgY2FsbGFibGUpIHtcbiAgICBpZiAodGhpcy5yZW1vdmVTdWJzY3JpYmVyKGNvbnRleHQsIGNhbGxhYmxlKSAmJiAhdGhpcy5oYXNTdWJzY3JpYmVycygpKSB7XG4gICAgICB0aGlzLmhhbmRsZXIuZGlzcG9zZSgpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gVmFsdWVBdHRyaWJ1dGVPYnNlcnZlcjtcbn0oKSkgfHwgX2NsYXNzOCk7XG5cbnZhciBjaGVja2VkQXJyYXlDb250ZXh0ID0gJ0NoZWNrZWRPYnNlcnZlcjphcnJheSc7XG52YXIgY2hlY2tlZFZhbHVlQ29udGV4dCA9ICdDaGVja2VkT2JzZXJ2ZXI6dmFsdWUnO1xuXG5leHBvcnQgdmFyIENoZWNrZWRPYnNlcnZlciA9IChfZGVjOCA9IHN1YnNjcmliZXJDb2xsZWN0aW9uKCksIF9kZWM4KF9jbGFzczkgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIENoZWNrZWRPYnNlcnZlcihlbGVtZW50LCBoYW5kbGVyLCBvYnNlcnZlckxvY2F0b3IpIHtcbiAgICBcblxuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlcjtcbiAgICB0aGlzLm9ic2VydmVyTG9jYXRvciA9IG9ic2VydmVyTG9jYXRvcjtcbiAgfVxuXG4gIENoZWNrZWRPYnNlcnZlci5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbiBnZXRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgfTtcblxuICBDaGVja2VkT2JzZXJ2ZXIucHJvdG90eXBlLnNldFZhbHVlID0gZnVuY3Rpb24gc2V0VmFsdWUobmV3VmFsdWUpIHtcbiAgICBpZiAodGhpcy5pbml0aWFsU3luYyAmJiB0aGlzLnZhbHVlID09PSBuZXdWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFycmF5T2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMuYXJyYXlPYnNlcnZlci51bnN1YnNjcmliZShjaGVja2VkQXJyYXlDb250ZXh0LCB0aGlzKTtcbiAgICAgIHRoaXMuYXJyYXlPYnNlcnZlciA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZWxlbWVudC50eXBlID09PSAnY2hlY2tib3gnICYmIEFycmF5LmlzQXJyYXkobmV3VmFsdWUpKSB7XG4gICAgICB0aGlzLmFycmF5T2JzZXJ2ZXIgPSB0aGlzLm9ic2VydmVyTG9jYXRvci5nZXRBcnJheU9ic2VydmVyKG5ld1ZhbHVlKTtcbiAgICAgIHRoaXMuYXJyYXlPYnNlcnZlci5zdWJzY3JpYmUoY2hlY2tlZEFycmF5Q29udGV4dCwgdGhpcyk7XG4gICAgfVxuXG4gICAgdGhpcy5vbGRWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgIHRoaXMuc3luY2hyb25pemVFbGVtZW50KCk7XG4gICAgdGhpcy5ub3RpZnkoKTtcblxuICAgIGlmICghdGhpcy5pbml0aWFsU3luYykge1xuICAgICAgdGhpcy5pbml0aWFsU3luYyA9IHRydWU7XG4gICAgICB0aGlzLm9ic2VydmVyTG9jYXRvci50YXNrUXVldWUucXVldWVNaWNyb1Rhc2sodGhpcyk7XG4gICAgfVxuICB9O1xuXG4gIENoZWNrZWRPYnNlcnZlci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIGNhbGwoY29udGV4dCwgc3BsaWNlcykge1xuICAgIHRoaXMuc3luY2hyb25pemVFbGVtZW50KCk7XG5cbiAgICBpZiAoIXRoaXMudmFsdWVPYnNlcnZlcikge1xuICAgICAgdGhpcy52YWx1ZU9ic2VydmVyID0gdGhpcy5lbGVtZW50Ll9fb2JzZXJ2ZXJzX18ubW9kZWwgfHwgdGhpcy5lbGVtZW50Ll9fb2JzZXJ2ZXJzX18udmFsdWU7XG4gICAgICBpZiAodGhpcy52YWx1ZU9ic2VydmVyKSB7XG4gICAgICAgIHRoaXMudmFsdWVPYnNlcnZlci5zdWJzY3JpYmUoY2hlY2tlZFZhbHVlQ29udGV4dCwgdGhpcyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIENoZWNrZWRPYnNlcnZlci5wcm90b3R5cGUuc3luY2hyb25pemVFbGVtZW50ID0gZnVuY3Rpb24gc3luY2hyb25pemVFbGVtZW50KCkge1xuICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgdmFyIGVsZW1lbnQgPSB0aGlzLmVsZW1lbnQ7XG4gICAgdmFyIGVsZW1lbnRWYWx1ZSA9IGVsZW1lbnQuaGFzT3duUHJvcGVydHkoJ21vZGVsJykgPyBlbGVtZW50Lm1vZGVsIDogZWxlbWVudC52YWx1ZTtcbiAgICB2YXIgaXNSYWRpbyA9IGVsZW1lbnQudHlwZSA9PT0gJ3JhZGlvJztcbiAgICB2YXIgbWF0Y2hlciA9IGVsZW1lbnQubWF0Y2hlciB8fCBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGEgPT09IGI7XG4gICAgfTtcblxuICAgIGVsZW1lbnQuY2hlY2tlZCA9IGlzUmFkaW8gJiYgISFtYXRjaGVyKHZhbHVlLCBlbGVtZW50VmFsdWUpIHx8ICFpc1JhZGlvICYmIHZhbHVlID09PSB0cnVlIHx8ICFpc1JhZGlvICYmIEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmZpbmRJbmRleChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuICEhbWF0Y2hlcihpdGVtLCBlbGVtZW50VmFsdWUpO1xuICAgIH0pICE9PSAtMTtcbiAgfTtcblxuICBDaGVja2VkT2JzZXJ2ZXIucHJvdG90eXBlLnN5bmNocm9uaXplVmFsdWUgPSBmdW5jdGlvbiBzeW5jaHJvbml6ZVZhbHVlKCkge1xuICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgdmFyIGVsZW1lbnQgPSB0aGlzLmVsZW1lbnQ7XG4gICAgdmFyIGVsZW1lbnRWYWx1ZSA9IGVsZW1lbnQuaGFzT3duUHJvcGVydHkoJ21vZGVsJykgPyBlbGVtZW50Lm1vZGVsIDogZWxlbWVudC52YWx1ZTtcbiAgICB2YXIgaW5kZXggPSB2b2lkIDA7XG4gICAgdmFyIG1hdGNoZXIgPSBlbGVtZW50Lm1hdGNoZXIgfHwgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBhID09PSBiO1xuICAgIH07XG5cbiAgICBpZiAoZWxlbWVudC50eXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgaW5kZXggPSB2YWx1ZS5maW5kSW5kZXgoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICByZXR1cm4gISFtYXRjaGVyKGl0ZW0sIGVsZW1lbnRWYWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZWxlbWVudC5jaGVja2VkICYmIGluZGV4ID09PSAtMSkge1xuICAgICAgICAgIHZhbHVlLnB1c2goZWxlbWVudFZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmICghZWxlbWVudC5jaGVja2VkICYmIGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIHZhbHVlLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhbHVlID0gZWxlbWVudC5jaGVja2VkO1xuICAgIH0gZWxzZSBpZiAoZWxlbWVudC5jaGVja2VkKSB7XG4gICAgICB2YWx1ZSA9IGVsZW1lbnRWYWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMub2xkVmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLm5vdGlmeSgpO1xuICB9O1xuXG4gIENoZWNrZWRPYnNlcnZlci5wcm90b3R5cGUubm90aWZ5ID0gZnVuY3Rpb24gbm90aWZ5KCkge1xuICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMub2xkVmFsdWU7XG4gICAgdmFyIG5ld1ZhbHVlID0gdGhpcy52YWx1ZTtcblxuICAgIGlmIChuZXdWYWx1ZSA9PT0gb2xkVmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNhbGxTdWJzY3JpYmVycyhuZXdWYWx1ZSwgb2xkVmFsdWUpO1xuICB9O1xuXG4gIENoZWNrZWRPYnNlcnZlci5wcm90b3R5cGUuaGFuZGxlRXZlbnQgPSBmdW5jdGlvbiBoYW5kbGVFdmVudCgpIHtcbiAgICB0aGlzLnN5bmNocm9uaXplVmFsdWUoKTtcbiAgfTtcblxuICBDaGVja2VkT2JzZXJ2ZXIucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uIHN1YnNjcmliZShjb250ZXh0LCBjYWxsYWJsZSkge1xuICAgIGlmICghdGhpcy5oYXNTdWJzY3JpYmVycygpKSB7XG4gICAgICB0aGlzLmhhbmRsZXIuc3Vic2NyaWJlKHRoaXMuZWxlbWVudCwgdGhpcyk7XG4gICAgfVxuICAgIHRoaXMuYWRkU3Vic2NyaWJlcihjb250ZXh0LCBjYWxsYWJsZSk7XG4gIH07XG5cbiAgQ2hlY2tlZE9ic2VydmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uIHVuc3Vic2NyaWJlKGNvbnRleHQsIGNhbGxhYmxlKSB7XG4gICAgaWYgKHRoaXMucmVtb3ZlU3Vic2NyaWJlcihjb250ZXh0LCBjYWxsYWJsZSkgJiYgIXRoaXMuaGFzU3Vic2NyaWJlcnMoKSkge1xuICAgICAgdGhpcy5oYW5kbGVyLmRpc3Bvc2UoKTtcbiAgICB9XG4gIH07XG5cbiAgQ2hlY2tlZE9ic2VydmVyLnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbiB1bmJpbmQoKSB7XG4gICAgaWYgKHRoaXMuYXJyYXlPYnNlcnZlcikge1xuICAgICAgdGhpcy5hcnJheU9ic2VydmVyLnVuc3Vic2NyaWJlKGNoZWNrZWRBcnJheUNvbnRleHQsIHRoaXMpO1xuICAgICAgdGhpcy5hcnJheU9ic2VydmVyID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRoaXMudmFsdWVPYnNlcnZlcikge1xuICAgICAgdGhpcy52YWx1ZU9ic2VydmVyLnVuc3Vic2NyaWJlKGNoZWNrZWRWYWx1ZUNvbnRleHQsIHRoaXMpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gQ2hlY2tlZE9ic2VydmVyO1xufSgpKSB8fCBfY2xhc3M5KTtcblxudmFyIHNlbGVjdEFycmF5Q29udGV4dCA9ICdTZWxlY3RWYWx1ZU9ic2VydmVyOmFycmF5JztcblxuZXhwb3J0IHZhciBTZWxlY3RWYWx1ZU9ic2VydmVyID0gKF9kZWM5ID0gc3Vic2NyaWJlckNvbGxlY3Rpb24oKSwgX2RlYzkoX2NsYXNzMTAgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFNlbGVjdFZhbHVlT2JzZXJ2ZXIoZWxlbWVudCwgaGFuZGxlciwgb2JzZXJ2ZXJMb2NhdG9yKSB7XG4gICAgXG5cbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXI7XG4gICAgdGhpcy5vYnNlcnZlckxvY2F0b3IgPSBvYnNlcnZlckxvY2F0b3I7XG4gIH1cblxuICBTZWxlY3RWYWx1ZU9ic2VydmVyLnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uIGdldFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICB9O1xuXG4gIFNlbGVjdFZhbHVlT2JzZXJ2ZXIucHJvdG90eXBlLnNldFZhbHVlID0gZnVuY3Rpb24gc2V0VmFsdWUobmV3VmFsdWUpIHtcbiAgICBpZiAobmV3VmFsdWUgIT09IG51bGwgJiYgbmV3VmFsdWUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmVsZW1lbnQubXVsdGlwbGUgJiYgIUFycmF5LmlzQXJyYXkobmV3VmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ09ubHkgbnVsbCBvciBBcnJheSBpbnN0YW5jZXMgY2FuIGJlIGJvdW5kIHRvIGEgbXVsdGktc2VsZWN0LicpO1xuICAgIH1cbiAgICBpZiAodGhpcy52YWx1ZSA9PT0gbmV3VmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hcnJheU9ic2VydmVyKSB7XG4gICAgICB0aGlzLmFycmF5T2JzZXJ2ZXIudW5zdWJzY3JpYmUoc2VsZWN0QXJyYXlDb250ZXh0LCB0aGlzKTtcbiAgICAgIHRoaXMuYXJyYXlPYnNlcnZlciA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobmV3VmFsdWUpKSB7XG4gICAgICB0aGlzLmFycmF5T2JzZXJ2ZXIgPSB0aGlzLm9ic2VydmVyTG9jYXRvci5nZXRBcnJheU9ic2VydmVyKG5ld1ZhbHVlKTtcbiAgICAgIHRoaXMuYXJyYXlPYnNlcnZlci5zdWJzY3JpYmUoc2VsZWN0QXJyYXlDb250ZXh0LCB0aGlzKTtcbiAgICB9XG5cbiAgICB0aGlzLm9sZFZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgdGhpcy5zeW5jaHJvbml6ZU9wdGlvbnMoKTtcbiAgICB0aGlzLm5vdGlmeSgpO1xuXG4gICAgaWYgKCF0aGlzLmluaXRpYWxTeW5jKSB7XG4gICAgICB0aGlzLmluaXRpYWxTeW5jID0gdHJ1ZTtcbiAgICAgIHRoaXMub2JzZXJ2ZXJMb2NhdG9yLnRhc2tRdWV1ZS5xdWV1ZU1pY3JvVGFzayh0aGlzKTtcbiAgICB9XG4gIH07XG5cbiAgU2VsZWN0VmFsdWVPYnNlcnZlci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIGNhbGwoY29udGV4dCwgc3BsaWNlcykge1xuICAgIHRoaXMuc3luY2hyb25pemVPcHRpb25zKCk7XG4gIH07XG5cbiAgU2VsZWN0VmFsdWVPYnNlcnZlci5wcm90b3R5cGUuc3luY2hyb25pemVPcHRpb25zID0gZnVuY3Rpb24gc3luY2hyb25pemVPcHRpb25zKCkge1xuICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgdmFyIGlzQXJyYXkgPSB2b2lkIDA7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGlzQXJyYXkgPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBvcHRpb25zID0gdGhpcy5lbGVtZW50Lm9wdGlvbnM7XG4gICAgdmFyIGkgPSBvcHRpb25zLmxlbmd0aDtcbiAgICB2YXIgbWF0Y2hlciA9IHRoaXMuZWxlbWVudC5tYXRjaGVyIHx8IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gYSA9PT0gYjtcbiAgICB9O1xuXG4gICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoKSB7XG4gICAgICB2YXIgb3B0aW9uID0gb3B0aW9ucy5pdGVtKGkpO1xuICAgICAgdmFyIG9wdGlvblZhbHVlID0gb3B0aW9uLmhhc093blByb3BlcnR5KCdtb2RlbCcpID8gb3B0aW9uLm1vZGVsIDogb3B0aW9uLnZhbHVlO1xuICAgICAgaWYgKGlzQXJyYXkpIHtcbiAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gdmFsdWUuZmluZEluZGV4KGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuICEhbWF0Y2hlcihvcHRpb25WYWx1ZSwgaXRlbSk7XG4gICAgICAgIH0pICE9PSAtMTtcbiAgICAgICAgcmV0dXJuICdjb250aW51ZSc7XG4gICAgICB9XG4gICAgICBvcHRpb24uc2VsZWN0ZWQgPSAhIW1hdGNoZXIob3B0aW9uVmFsdWUsIHZhbHVlKTtcbiAgICB9O1xuXG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgdmFyIF9yZXQgPSBfbG9vcCgpO1xuXG4gICAgICBpZiAoX3JldCA9PT0gJ2NvbnRpbnVlJykgY29udGludWU7XG4gICAgfVxuICB9O1xuXG4gIFNlbGVjdFZhbHVlT2JzZXJ2ZXIucHJvdG90eXBlLnN5bmNocm9uaXplVmFsdWUgPSBmdW5jdGlvbiBzeW5jaHJvbml6ZVZhbHVlKCkge1xuICAgIHZhciBfdGhpczIzID0gdGhpcztcblxuICAgIHZhciBvcHRpb25zID0gdGhpcy5lbGVtZW50Lm9wdGlvbnM7XG4gICAgdmFyIGNvdW50ID0gMDtcbiAgICB2YXIgdmFsdWUgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IG9wdGlvbnMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgdmFyIF9vcHRpb24gPSBvcHRpb25zLml0ZW0oaSk7XG4gICAgICBpZiAoIV9vcHRpb24uc2VsZWN0ZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2YWx1ZS5wdXNoKF9vcHRpb24uaGFzT3duUHJvcGVydHkoJ21vZGVsJykgPyBfb3B0aW9uLm1vZGVsIDogX29wdGlvbi52YWx1ZSk7XG4gICAgICBjb3VudCsrO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmVsZW1lbnQubXVsdGlwbGUpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpKSB7XG4gICAgICAgIHZhciBfcmV0MiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgbWF0Y2hlciA9IF90aGlzMjMuZWxlbWVudC5tYXRjaGVyIHx8IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICByZXR1cm4gYSA9PT0gYjtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgdmFyIGkgPSAwO1xuXG4gICAgICAgICAgdmFyIF9sb29wMiA9IGZ1bmN0aW9uIF9sb29wMigpIHtcbiAgICAgICAgICAgIHZhciBhID0gX3RoaXMyMy52YWx1ZVtpXTtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5maW5kSW5kZXgoZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXIoYSwgYik7XG4gICAgICAgICAgICB9KSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgX3RoaXMyMy52YWx1ZS5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHdoaWxlIChpIDwgX3RoaXMyMy52YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIF9sb29wMigpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGkgPSAwO1xuXG4gICAgICAgICAgdmFyIF9sb29wMyA9IGZ1bmN0aW9uIF9sb29wMygpIHtcbiAgICAgICAgICAgIHZhciBhID0gdmFsdWVbaV07XG4gICAgICAgICAgICBpZiAoX3RoaXMyMy52YWx1ZS5maW5kSW5kZXgoZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXIoYSwgYik7XG4gICAgICAgICAgICB9KSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgX3RoaXMyMy52YWx1ZS5wdXNoKGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICB3aGlsZSAoaSA8IHZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgX2xvb3AzKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2OiB2b2lkIDBcbiAgICAgICAgICB9O1xuICAgICAgICB9KCk7XG5cbiAgICAgICAgaWYgKCh0eXBlb2YgX3JldDIgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKF9yZXQyKSkgPT09IFwib2JqZWN0XCIpIHJldHVybiBfcmV0Mi52O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY291bnQgPT09IDApIHtcbiAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZVswXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmFsdWUgIT09IHRoaXMudmFsdWUpIHtcbiAgICAgIHRoaXMub2xkVmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy5ub3RpZnkoKTtcbiAgICB9XG4gIH07XG5cbiAgU2VsZWN0VmFsdWVPYnNlcnZlci5wcm90b3R5cGUubm90aWZ5ID0gZnVuY3Rpb24gbm90aWZ5KCkge1xuICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMub2xkVmFsdWU7XG4gICAgdmFyIG5ld1ZhbHVlID0gdGhpcy52YWx1ZTtcblxuICAgIHRoaXMuY2FsbFN1YnNjcmliZXJzKG5ld1ZhbHVlLCBvbGRWYWx1ZSk7XG4gIH07XG5cbiAgU2VsZWN0VmFsdWVPYnNlcnZlci5wcm90b3R5cGUuaGFuZGxlRXZlbnQgPSBmdW5jdGlvbiBoYW5kbGVFdmVudCgpIHtcbiAgICB0aGlzLnN5bmNocm9uaXplVmFsdWUoKTtcbiAgfTtcblxuICBTZWxlY3RWYWx1ZU9ic2VydmVyLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiBzdWJzY3JpYmUoY29udGV4dCwgY2FsbGFibGUpIHtcbiAgICBpZiAoIXRoaXMuaGFzU3Vic2NyaWJlcnMoKSkge1xuICAgICAgdGhpcy5oYW5kbGVyLnN1YnNjcmliZSh0aGlzLmVsZW1lbnQsIHRoaXMpO1xuICAgIH1cbiAgICB0aGlzLmFkZFN1YnNjcmliZXIoY29udGV4dCwgY2FsbGFibGUpO1xuICB9O1xuXG4gIFNlbGVjdFZhbHVlT2JzZXJ2ZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gdW5zdWJzY3JpYmUoY29udGV4dCwgY2FsbGFibGUpIHtcbiAgICBpZiAodGhpcy5yZW1vdmVTdWJzY3JpYmVyKGNvbnRleHQsIGNhbGxhYmxlKSAmJiAhdGhpcy5oYXNTdWJzY3JpYmVycygpKSB7XG4gICAgICB0aGlzLmhhbmRsZXIuZGlzcG9zZSgpO1xuICAgIH1cbiAgfTtcblxuICBTZWxlY3RWYWx1ZU9ic2VydmVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gYmluZCgpIHtcbiAgICB2YXIgX3RoaXMyNCA9IHRoaXM7XG5cbiAgICB0aGlzLmRvbU9ic2VydmVyID0gRE9NLmNyZWF0ZU11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMyNC5zeW5jaHJvbml6ZU9wdGlvbnMoKTtcbiAgICAgIF90aGlzMjQuc3luY2hyb25pemVWYWx1ZSgpO1xuICAgIH0pO1xuICAgIHRoaXMuZG9tT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmVsZW1lbnQsIHsgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlLCBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pO1xuICB9O1xuXG4gIFNlbGVjdFZhbHVlT2JzZXJ2ZXIucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uIHVuYmluZCgpIHtcbiAgICB0aGlzLmRvbU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLmRvbU9ic2VydmVyID0gbnVsbDtcblxuICAgIGlmICh0aGlzLmFycmF5T2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMuYXJyYXlPYnNlcnZlci51bnN1YnNjcmliZShzZWxlY3RBcnJheUNvbnRleHQsIHRoaXMpO1xuICAgICAgdGhpcy5hcnJheU9ic2VydmVyID0gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFNlbGVjdFZhbHVlT2JzZXJ2ZXI7XG59KCkpIHx8IF9jbGFzczEwKTtcblxuZXhwb3J0IHZhciBDbGFzc09ic2VydmVyID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBDbGFzc09ic2VydmVyKGVsZW1lbnQpIHtcbiAgICBcblxuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5kb05vdENhY2hlID0gdHJ1ZTtcbiAgICB0aGlzLnZhbHVlID0gJyc7XG4gICAgdGhpcy52ZXJzaW9uID0gMDtcbiAgfVxuXG4gIENsYXNzT2JzZXJ2ZXIucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24gZ2V0VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gIH07XG5cbiAgQ2xhc3NPYnNlcnZlci5wcm90b3R5cGUuc2V0VmFsdWUgPSBmdW5jdGlvbiBzZXRWYWx1ZShuZXdWYWx1ZSkge1xuICAgIHZhciBuYW1lSW5kZXggPSB0aGlzLm5hbWVJbmRleCB8fCB7fTtcbiAgICB2YXIgdmVyc2lvbiA9IHRoaXMudmVyc2lvbjtcbiAgICB2YXIgbmFtZXMgPSB2b2lkIDA7XG4gICAgdmFyIG5hbWUgPSB2b2lkIDA7XG5cbiAgICBpZiAobmV3VmFsdWUgIT09IG51bGwgJiYgbmV3VmFsdWUgIT09IHVuZGVmaW5lZCAmJiBuZXdWYWx1ZS5sZW5ndGgpIHtcbiAgICAgIG5hbWVzID0gbmV3VmFsdWUuc3BsaXQoL1xccysvKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBuYW1lcy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBuYW1lID0gbmFtZXNbaV07XG4gICAgICAgIGlmIChuYW1lID09PSAnJykge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIG5hbWVJbmRleFtuYW1lXSA9IHZlcnNpb247XG4gICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKG5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB0aGlzLm5hbWVJbmRleCA9IG5hbWVJbmRleDtcbiAgICB0aGlzLnZlcnNpb24gKz0gMTtcblxuICAgIGlmICh2ZXJzaW9uID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmVyc2lvbiAtPSAxO1xuICAgIGZvciAobmFtZSBpbiBuYW1lSW5kZXgpIHtcbiAgICAgIGlmICghbmFtZUluZGV4Lmhhc093blByb3BlcnR5KG5hbWUpIHx8IG5hbWVJbmRleFtuYW1lXSAhPT0gdmVyc2lvbikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKG5hbWUpO1xuICAgIH1cbiAgfTtcblxuICBDbGFzc09ic2VydmVyLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiBzdWJzY3JpYmUoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdPYnNlcnZhdGlvbiBvZiBhIFwiJyArIHRoaXMuZWxlbWVudC5ub2RlTmFtZSArICdcIiBlbGVtZW50XFwncyBcImNsYXNzXCIgcHJvcGVydHkgaXMgbm90IHN1cHBvcnRlZC4nKTtcbiAgfTtcblxuICByZXR1cm4gQ2xhc3NPYnNlcnZlcjtcbn0oKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0RlY2xhcmVkRGVwZW5kZW5jaWVzKGRlc2NyaXB0b3IpIHtcbiAgcmV0dXJuICEhKGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5nZXQgJiYgZGVzY3JpcHRvci5nZXQuZGVwZW5kZW5jaWVzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY2xhcmVQcm9wZXJ0eURlcGVuZGVuY2llcyhjdG9yLCBwcm9wZXJ0eU5hbWUsIGRlcGVuZGVuY2llcykge1xuICB2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY3Rvci5wcm90b3R5cGUsIHByb3BlcnR5TmFtZSk7XG4gIGRlc2NyaXB0b3IuZ2V0LmRlcGVuZGVuY2llcyA9IGRlcGVuZGVuY2llcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVkRnJvbSgpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICByZXN0W19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSwgZGVzY3JpcHRvcikge1xuICAgIGRlc2NyaXB0b3IuZ2V0LmRlcGVuZGVuY2llcyA9IHJlc3Q7XG4gICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gIH07XG59XG5cbmV4cG9ydCB2YXIgQ29tcHV0ZWRFeHByZXNzaW9uID0gZnVuY3Rpb24gKF9FeHByZXNzaW9uMTkpIHtcbiAgX2luaGVyaXRzKENvbXB1dGVkRXhwcmVzc2lvbiwgX0V4cHJlc3Npb24xOSk7XG5cbiAgZnVuY3Rpb24gQ29tcHV0ZWRFeHByZXNzaW9uKG5hbWUsIGRlcGVuZGVuY2llcykge1xuICAgIFxuXG4gICAgdmFyIF90aGlzMjUgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfRXhwcmVzc2lvbjE5LmNhbGwodGhpcykpO1xuXG4gICAgX3RoaXMyNS5uYW1lID0gbmFtZTtcbiAgICBfdGhpczI1LmRlcGVuZGVuY2llcyA9IGRlcGVuZGVuY2llcztcbiAgICBfdGhpczI1LmlzQXNzaWduYWJsZSA9IHRydWU7XG4gICAgcmV0dXJuIF90aGlzMjU7XG4gIH1cblxuICBDb21wdXRlZEV4cHJlc3Npb24ucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24gZXZhbHVhdGUoc2NvcGUsIGxvb2t1cEZ1bmN0aW9ucykge1xuICAgIHJldHVybiBzY29wZS5iaW5kaW5nQ29udGV4dFt0aGlzLm5hbWVdO1xuICB9O1xuXG4gIENvbXB1dGVkRXhwcmVzc2lvbi5wcm90b3R5cGUuYXNzaWduID0gZnVuY3Rpb24gYXNzaWduKHNjb3BlLCB2YWx1ZSkge1xuICAgIHNjb3BlLmJpbmRpbmdDb250ZXh0W3RoaXMubmFtZV0gPSB2YWx1ZTtcbiAgfTtcblxuICBDb21wdXRlZEV4cHJlc3Npb24ucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uIGFjY2VwdCh2aXNpdG9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdub3QgaW1wbGVtZW50ZWQnKTtcbiAgfTtcblxuICBDb21wdXRlZEV4cHJlc3Npb24ucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiBjb25uZWN0KGJpbmRpbmcsIHNjb3BlKSB7XG4gICAgdmFyIGRlcGVuZGVuY2llcyA9IHRoaXMuZGVwZW5kZW5jaWVzO1xuICAgIHZhciBpID0gZGVwZW5kZW5jaWVzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICBkZXBlbmRlbmNpZXNbaV0uY29ubmVjdChiaW5kaW5nLCBzY29wZSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBDb21wdXRlZEV4cHJlc3Npb247XG59KEV4cHJlc3Npb24pO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29tcHV0ZWRPYnNlcnZlcihvYmosIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgb2JzZXJ2ZXJMb2NhdG9yKSB7XG4gIHZhciBkZXBlbmRlbmNpZXMgPSBkZXNjcmlwdG9yLmdldC5kZXBlbmRlbmNpZXM7XG4gIGlmICghKGRlcGVuZGVuY2llcyBpbnN0YW5jZW9mIENvbXB1dGVkRXhwcmVzc2lvbikpIHtcbiAgICB2YXIgaSA9IGRlcGVuZGVuY2llcy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgZGVwZW5kZW5jaWVzW2ldID0gb2JzZXJ2ZXJMb2NhdG9yLnBhcnNlci5wYXJzZShkZXBlbmRlbmNpZXNbaV0pO1xuICAgIH1cbiAgICBkZXBlbmRlbmNpZXMgPSBkZXNjcmlwdG9yLmdldC5kZXBlbmRlbmNpZXMgPSBuZXcgQ29tcHV0ZWRFeHByZXNzaW9uKHByb3BlcnR5TmFtZSwgZGVwZW5kZW5jaWVzKTtcbiAgfVxuXG4gIHZhciBzY29wZSA9IHsgYmluZGluZ0NvbnRleHQ6IG9iaiwgb3ZlcnJpZGVDb250ZXh0OiBjcmVhdGVPdmVycmlkZUNvbnRleHQob2JqKSB9O1xuICByZXR1cm4gbmV3IEV4cHJlc3Npb25PYnNlcnZlcihzY29wZSwgZGVwZW5kZW5jaWVzLCBvYnNlcnZlckxvY2F0b3IpO1xufVxuXG52YXIgc3ZnRWxlbWVudHMgPSB2b2lkIDA7XG52YXIgc3ZnUHJlc2VudGF0aW9uRWxlbWVudHMgPSB2b2lkIDA7XG52YXIgc3ZnUHJlc2VudGF0aW9uQXR0cmlidXRlcyA9IHZvaWQgMDtcbnZhciBzdmdBbmFseXplciA9IHZvaWQgMDtcblxuaWYgKHR5cGVvZiBGRUFUVVJFX05PX1NWRyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgc3ZnRWxlbWVudHMgPSB7XG4gICAgYTogWydjbGFzcycsICdleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJywgJ2lkJywgJ29uYWN0aXZhdGUnLCAnb25jbGljaycsICdvbmZvY3VzaW4nLCAnb25mb2N1c291dCcsICdvbmxvYWQnLCAnb25tb3VzZWRvd24nLCAnb25tb3VzZW1vdmUnLCAnb25tb3VzZW91dCcsICdvbm1vdXNlb3ZlcicsICdvbm1vdXNldXAnLCAncmVxdWlyZWRFeHRlbnNpb25zJywgJ3JlcXVpcmVkRmVhdHVyZXMnLCAnc3R5bGUnLCAnc3lzdGVtTGFuZ3VhZ2UnLCAndGFyZ2V0JywgJ3RyYW5zZm9ybScsICd4bGluazphY3R1YXRlJywgJ3hsaW5rOmFyY3JvbGUnLCAneGxpbms6aHJlZicsICd4bGluazpyb2xlJywgJ3hsaW5rOnNob3cnLCAneGxpbms6dGl0bGUnLCAneGxpbms6dHlwZScsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnXSxcbiAgICBhbHRHbHlwaDogWydjbGFzcycsICdkeCcsICdkeScsICdleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJywgJ2Zvcm1hdCcsICdnbHlwaFJlZicsICdpZCcsICdvbmFjdGl2YXRlJywgJ29uY2xpY2snLCAnb25mb2N1c2luJywgJ29uZm9jdXNvdXQnLCAnb25sb2FkJywgJ29ubW91c2Vkb3duJywgJ29ubW91c2Vtb3ZlJywgJ29ubW91c2VvdXQnLCAnb25tb3VzZW92ZXInLCAnb25tb3VzZXVwJywgJ3JlcXVpcmVkRXh0ZW5zaW9ucycsICdyZXF1aXJlZEZlYXR1cmVzJywgJ3JvdGF0ZScsICdzdHlsZScsICdzeXN0ZW1MYW5ndWFnZScsICd4JywgJ3hsaW5rOmFjdHVhdGUnLCAneGxpbms6YXJjcm9sZScsICd4bGluazpocmVmJywgJ3hsaW5rOnJvbGUnLCAneGxpbms6c2hvdycsICd4bGluazp0aXRsZScsICd4bGluazp0eXBlJywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZScsICd5J10sXG4gICAgYWx0R2x5cGhEZWY6IFsnaWQnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJ10sXG4gICAgYWx0R2x5cGhJdGVtOiBbJ2lkJywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZSddLFxuICAgIGFuaW1hdGU6IFsnYWNjdW11bGF0ZScsICdhZGRpdGl2ZScsICdhdHRyaWJ1dGVOYW1lJywgJ2F0dHJpYnV0ZVR5cGUnLCAnYmVnaW4nLCAnYnknLCAnY2FsY01vZGUnLCAnZHVyJywgJ2VuZCcsICdleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJywgJ2ZpbGwnLCAnZnJvbScsICdpZCcsICdrZXlTcGxpbmVzJywgJ2tleVRpbWVzJywgJ21heCcsICdtaW4nLCAnb25iZWdpbicsICdvbmVuZCcsICdvbmxvYWQnLCAnb25yZXBlYXQnLCAncmVwZWF0Q291bnQnLCAncmVwZWF0RHVyJywgJ3JlcXVpcmVkRXh0ZW5zaW9ucycsICdyZXF1aXJlZEZlYXR1cmVzJywgJ3Jlc3RhcnQnLCAnc3lzdGVtTGFuZ3VhZ2UnLCAndG8nLCAndmFsdWVzJywgJ3hsaW5rOmFjdHVhdGUnLCAneGxpbms6YXJjcm9sZScsICd4bGluazpocmVmJywgJ3hsaW5rOnJvbGUnLCAneGxpbms6c2hvdycsICd4bGluazp0aXRsZScsICd4bGluazp0eXBlJywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZSddLFxuICAgIGFuaW1hdGVDb2xvcjogWydhY2N1bXVsYXRlJywgJ2FkZGl0aXZlJywgJ2F0dHJpYnV0ZU5hbWUnLCAnYXR0cmlidXRlVHlwZScsICdiZWdpbicsICdieScsICdjYWxjTW9kZScsICdkdXInLCAnZW5kJywgJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnLCAnZmlsbCcsICdmcm9tJywgJ2lkJywgJ2tleVNwbGluZXMnLCAna2V5VGltZXMnLCAnbWF4JywgJ21pbicsICdvbmJlZ2luJywgJ29uZW5kJywgJ29ubG9hZCcsICdvbnJlcGVhdCcsICdyZXBlYXRDb3VudCcsICdyZXBlYXREdXInLCAncmVxdWlyZWRFeHRlbnNpb25zJywgJ3JlcXVpcmVkRmVhdHVyZXMnLCAncmVzdGFydCcsICdzeXN0ZW1MYW5ndWFnZScsICd0bycsICd2YWx1ZXMnLCAneGxpbms6YWN0dWF0ZScsICd4bGluazphcmNyb2xlJywgJ3hsaW5rOmhyZWYnLCAneGxpbms6cm9sZScsICd4bGluazpzaG93JywgJ3hsaW5rOnRpdGxlJywgJ3hsaW5rOnR5cGUnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJ10sXG4gICAgYW5pbWF0ZU1vdGlvbjogWydhY2N1bXVsYXRlJywgJ2FkZGl0aXZlJywgJ2JlZ2luJywgJ2J5JywgJ2NhbGNNb2RlJywgJ2R1cicsICdlbmQnLCAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcsICdmaWxsJywgJ2Zyb20nLCAnaWQnLCAna2V5UG9pbnRzJywgJ2tleVNwbGluZXMnLCAna2V5VGltZXMnLCAnbWF4JywgJ21pbicsICdvbmJlZ2luJywgJ29uZW5kJywgJ29ubG9hZCcsICdvbnJlcGVhdCcsICdvcmlnaW4nLCAncGF0aCcsICdyZXBlYXRDb3VudCcsICdyZXBlYXREdXInLCAncmVxdWlyZWRFeHRlbnNpb25zJywgJ3JlcXVpcmVkRmVhdHVyZXMnLCAncmVzdGFydCcsICdyb3RhdGUnLCAnc3lzdGVtTGFuZ3VhZ2UnLCAndG8nLCAndmFsdWVzJywgJ3hsaW5rOmFjdHVhdGUnLCAneGxpbms6YXJjcm9sZScsICd4bGluazpocmVmJywgJ3hsaW5rOnJvbGUnLCAneGxpbms6c2hvdycsICd4bGluazp0aXRsZScsICd4bGluazp0eXBlJywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZSddLFxuICAgIGFuaW1hdGVUcmFuc2Zvcm06IFsnYWNjdW11bGF0ZScsICdhZGRpdGl2ZScsICdhdHRyaWJ1dGVOYW1lJywgJ2F0dHJpYnV0ZVR5cGUnLCAnYmVnaW4nLCAnYnknLCAnY2FsY01vZGUnLCAnZHVyJywgJ2VuZCcsICdleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJywgJ2ZpbGwnLCAnZnJvbScsICdpZCcsICdrZXlTcGxpbmVzJywgJ2tleVRpbWVzJywgJ21heCcsICdtaW4nLCAnb25iZWdpbicsICdvbmVuZCcsICdvbmxvYWQnLCAnb25yZXBlYXQnLCAncmVwZWF0Q291bnQnLCAncmVwZWF0RHVyJywgJ3JlcXVpcmVkRXh0ZW5zaW9ucycsICdyZXF1aXJlZEZlYXR1cmVzJywgJ3Jlc3RhcnQnLCAnc3lzdGVtTGFuZ3VhZ2UnLCAndG8nLCAndHlwZScsICd2YWx1ZXMnLCAneGxpbms6YWN0dWF0ZScsICd4bGluazphcmNyb2xlJywgJ3hsaW5rOmhyZWYnLCAneGxpbms6cm9sZScsICd4bGluazpzaG93JywgJ3hsaW5rOnRpdGxlJywgJ3hsaW5rOnR5cGUnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJ10sXG4gICAgY2lyY2xlOiBbJ2NsYXNzJywgJ2N4JywgJ2N5JywgJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnLCAnaWQnLCAnb25hY3RpdmF0ZScsICdvbmNsaWNrJywgJ29uZm9jdXNpbicsICdvbmZvY3Vzb3V0JywgJ29ubG9hZCcsICdvbm1vdXNlZG93bicsICdvbm1vdXNlbW92ZScsICdvbm1vdXNlb3V0JywgJ29ubW91c2VvdmVyJywgJ29ubW91c2V1cCcsICdyJywgJ3JlcXVpcmVkRXh0ZW5zaW9ucycsICdyZXF1aXJlZEZlYXR1cmVzJywgJ3N0eWxlJywgJ3N5c3RlbUxhbmd1YWdlJywgJ3RyYW5zZm9ybScsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnXSxcbiAgICBjbGlwUGF0aDogWydjbGFzcycsICdjbGlwUGF0aFVuaXRzJywgJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnLCAnaWQnLCAncmVxdWlyZWRFeHRlbnNpb25zJywgJ3JlcXVpcmVkRmVhdHVyZXMnLCAnc3R5bGUnLCAnc3lzdGVtTGFuZ3VhZ2UnLCAndHJhbnNmb3JtJywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZSddLFxuICAgICdjb2xvci1wcm9maWxlJzogWydpZCcsICdsb2NhbCcsICduYW1lJywgJ3JlbmRlcmluZy1pbnRlbnQnLCAneGxpbms6YWN0dWF0ZScsICd4bGluazphcmNyb2xlJywgJ3hsaW5rOmhyZWYnLCAneGxpbms6cm9sZScsICd4bGluazpzaG93JywgJ3hsaW5rOnRpdGxlJywgJ3hsaW5rOnR5cGUnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJ10sXG4gICAgY3Vyc29yOiBbJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnLCAnaWQnLCAncmVxdWlyZWRFeHRlbnNpb25zJywgJ3JlcXVpcmVkRmVhdHVyZXMnLCAnc3lzdGVtTGFuZ3VhZ2UnLCAneCcsICd4bGluazphY3R1YXRlJywgJ3hsaW5rOmFyY3JvbGUnLCAneGxpbms6aHJlZicsICd4bGluazpyb2xlJywgJ3hsaW5rOnNob3cnLCAneGxpbms6dGl0bGUnLCAneGxpbms6dHlwZScsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnLCAneSddLFxuICAgIGRlZnM6IFsnY2xhc3MnLCAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcsICdpZCcsICdvbmFjdGl2YXRlJywgJ29uY2xpY2snLCAnb25mb2N1c2luJywgJ29uZm9jdXNvdXQnLCAnb25sb2FkJywgJ29ubW91c2Vkb3duJywgJ29ubW91c2Vtb3ZlJywgJ29ubW91c2VvdXQnLCAnb25tb3VzZW92ZXInLCAnb25tb3VzZXVwJywgJ3JlcXVpcmVkRXh0ZW5zaW9ucycsICdyZXF1aXJlZEZlYXR1cmVzJywgJ3N0eWxlJywgJ3N5c3RlbUxhbmd1YWdlJywgJ3RyYW5zZm9ybScsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnXSxcbiAgICBkZXNjOiBbJ2NsYXNzJywgJ2lkJywgJ3N0eWxlJywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZSddLFxuICAgIGVsbGlwc2U6IFsnY2xhc3MnLCAnY3gnLCAnY3knLCAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcsICdpZCcsICdvbmFjdGl2YXRlJywgJ29uY2xpY2snLCAnb25mb2N1c2luJywgJ29uZm9jdXNvdXQnLCAnb25sb2FkJywgJ29ubW91c2Vkb3duJywgJ29ubW91c2Vtb3ZlJywgJ29ubW91c2VvdXQnLCAnb25tb3VzZW92ZXInLCAnb25tb3VzZXVwJywgJ3JlcXVpcmVkRXh0ZW5zaW9ucycsICdyZXF1aXJlZEZlYXR1cmVzJywgJ3J4JywgJ3J5JywgJ3N0eWxlJywgJ3N5c3RlbUxhbmd1YWdlJywgJ3RyYW5zZm9ybScsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnXSxcbiAgICBmZUJsZW5kOiBbJ2NsYXNzJywgJ2hlaWdodCcsICdpZCcsICdpbicsICdpbjInLCAnbW9kZScsICdyZXN1bHQnLCAnc3R5bGUnLCAnd2lkdGgnLCAneCcsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnLCAneSddLFxuICAgIGZlQ29sb3JNYXRyaXg6IFsnY2xhc3MnLCAnaGVpZ2h0JywgJ2lkJywgJ2luJywgJ3Jlc3VsdCcsICdzdHlsZScsICd0eXBlJywgJ3ZhbHVlcycsICd3aWR0aCcsICd4JywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZScsICd5J10sXG4gICAgZmVDb21wb25lbnRUcmFuc2ZlcjogWydjbGFzcycsICdoZWlnaHQnLCAnaWQnLCAnaW4nLCAncmVzdWx0JywgJ3N0eWxlJywgJ3dpZHRoJywgJ3gnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJywgJ3knXSxcbiAgICBmZUNvbXBvc2l0ZTogWydjbGFzcycsICdoZWlnaHQnLCAnaWQnLCAnaW4nLCAnaW4yJywgJ2sxJywgJ2syJywgJ2szJywgJ2s0JywgJ29wZXJhdG9yJywgJ3Jlc3VsdCcsICdzdHlsZScsICd3aWR0aCcsICd4JywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZScsICd5J10sXG4gICAgZmVDb252b2x2ZU1hdHJpeDogWydiaWFzJywgJ2NsYXNzJywgJ2Rpdmlzb3InLCAnZWRnZU1vZGUnLCAnaGVpZ2h0JywgJ2lkJywgJ2luJywgJ2tlcm5lbE1hdHJpeCcsICdrZXJuZWxVbml0TGVuZ3RoJywgJ29yZGVyJywgJ3ByZXNlcnZlQWxwaGEnLCAncmVzdWx0JywgJ3N0eWxlJywgJ3RhcmdldFgnLCAndGFyZ2V0WScsICd3aWR0aCcsICd4JywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZScsICd5J10sXG4gICAgZmVEaWZmdXNlTGlnaHRpbmc6IFsnY2xhc3MnLCAnZGlmZnVzZUNvbnN0YW50JywgJ2hlaWdodCcsICdpZCcsICdpbicsICdrZXJuZWxVbml0TGVuZ3RoJywgJ3Jlc3VsdCcsICdzdHlsZScsICdzdXJmYWNlU2NhbGUnLCAnd2lkdGgnLCAneCcsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnLCAneSddLFxuICAgIGZlRGlzcGxhY2VtZW50TWFwOiBbJ2NsYXNzJywgJ2hlaWdodCcsICdpZCcsICdpbicsICdpbjInLCAncmVzdWx0JywgJ3NjYWxlJywgJ3N0eWxlJywgJ3dpZHRoJywgJ3gnLCAneENoYW5uZWxTZWxlY3RvcicsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnLCAneScsICd5Q2hhbm5lbFNlbGVjdG9yJ10sXG4gICAgZmVEaXN0YW50TGlnaHQ6IFsnYXppbXV0aCcsICdlbGV2YXRpb24nLCAnaWQnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJ10sXG4gICAgZmVGbG9vZDogWydjbGFzcycsICdoZWlnaHQnLCAnaWQnLCAncmVzdWx0JywgJ3N0eWxlJywgJ3dpZHRoJywgJ3gnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJywgJ3knXSxcbiAgICBmZUZ1bmNBOiBbJ2FtcGxpdHVkZScsICdleHBvbmVudCcsICdpZCcsICdpbnRlcmNlcHQnLCAnb2Zmc2V0JywgJ3Nsb3BlJywgJ3RhYmxlVmFsdWVzJywgJ3R5cGUnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJ10sXG4gICAgZmVGdW5jQjogWydhbXBsaXR1ZGUnLCAnZXhwb25lbnQnLCAnaWQnLCAnaW50ZXJjZXB0JywgJ29mZnNldCcsICdzbG9wZScsICd0YWJsZVZhbHVlcycsICd0eXBlJywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZSddLFxuICAgIGZlRnVuY0c6IFsnYW1wbGl0dWRlJywgJ2V4cG9uZW50JywgJ2lkJywgJ2ludGVyY2VwdCcsICdvZmZzZXQnLCAnc2xvcGUnLCAndGFibGVWYWx1ZXMnLCAndHlwZScsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnXSxcbiAgICBmZUZ1bmNSOiBbJ2FtcGxpdHVkZScsICdleHBvbmVudCcsICdpZCcsICdpbnRlcmNlcHQnLCAnb2Zmc2V0JywgJ3Nsb3BlJywgJ3RhYmxlVmFsdWVzJywgJ3R5cGUnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJ10sXG4gICAgZmVHYXVzc2lhbkJsdXI6IFsnY2xhc3MnLCAnaGVpZ2h0JywgJ2lkJywgJ2luJywgJ3Jlc3VsdCcsICdzdGREZXZpYXRpb24nLCAnc3R5bGUnLCAnd2lkdGgnLCAneCcsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnLCAneSddLFxuICAgIGZlSW1hZ2U6IFsnY2xhc3MnLCAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcsICdoZWlnaHQnLCAnaWQnLCAncHJlc2VydmVBc3BlY3RSYXRpbycsICdyZXN1bHQnLCAnc3R5bGUnLCAnd2lkdGgnLCAneCcsICd4bGluazphY3R1YXRlJywgJ3hsaW5rOmFyY3JvbGUnLCAneGxpbms6aHJlZicsICd4bGluazpyb2xlJywgJ3hsaW5rOnNob3cnLCAneGxpbms6dGl0bGUnLCAneGxpbms6dHlwZScsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnLCAneSddLFxuICAgIGZlTWVyZ2U6IFsnY2xhc3MnLCAnaGVpZ2h0JywgJ2lkJywgJ3Jlc3VsdCcsICdzdHlsZScsICd3aWR0aCcsICd4JywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZScsICd5J10sXG4gICAgZmVNZXJnZU5vZGU6IFsnaWQnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJ10sXG4gICAgZmVNb3JwaG9sb2d5OiBbJ2NsYXNzJywgJ2hlaWdodCcsICdpZCcsICdpbicsICdvcGVyYXRvcicsICdyYWRpdXMnLCAncmVzdWx0JywgJ3N0eWxlJywgJ3dpZHRoJywgJ3gnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJywgJ3knXSxcbiAgICBmZU9mZnNldDogWydjbGFzcycsICdkeCcsICdkeScsICdoZWlnaHQnLCAnaWQnLCAnaW4nLCAncmVzdWx0JywgJ3N0eWxlJywgJ3dpZHRoJywgJ3gnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJywgJ3knXSxcbiAgICBmZVBvaW50TGlnaHQ6IFsnaWQnLCAneCcsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnLCAneScsICd6J10sXG4gICAgZmVTcGVjdWxhckxpZ2h0aW5nOiBbJ2NsYXNzJywgJ2hlaWdodCcsICdpZCcsICdpbicsICdrZXJuZWxVbml0TGVuZ3RoJywgJ3Jlc3VsdCcsICdzcGVjdWxhckNvbnN0YW50JywgJ3NwZWN1bGFyRXhwb25lbnQnLCAnc3R5bGUnLCAnc3VyZmFjZVNjYWxlJywgJ3dpZHRoJywgJ3gnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJywgJ3knXSxcbiAgICBmZVNwb3RMaWdodDogWydpZCcsICdsaW1pdGluZ0NvbmVBbmdsZScsICdwb2ludHNBdFgnLCAncG9pbnRzQXRZJywgJ3BvaW50c0F0WicsICdzcGVjdWxhckV4cG9uZW50JywgJ3gnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJywgJ3knLCAneiddLFxuICAgIGZlVGlsZTogWydjbGFzcycsICdoZWlnaHQnLCAnaWQnLCAnaW4nLCAncmVzdWx0JywgJ3N0eWxlJywgJ3dpZHRoJywgJ3gnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJywgJ3knXSxcbiAgICBmZVR1cmJ1bGVuY2U6IFsnYmFzZUZyZXF1ZW5jeScsICdjbGFzcycsICdoZWlnaHQnLCAnaWQnLCAnbnVtT2N0YXZlcycsICdyZXN1bHQnLCAnc2VlZCcsICdzdGl0Y2hUaWxlcycsICdzdHlsZScsICd0eXBlJywgJ3dpZHRoJywgJ3gnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJywgJ3knXSxcbiAgICBmaWx0ZXI6IFsnY2xhc3MnLCAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcsICdmaWx0ZXJSZXMnLCAnZmlsdGVyVW5pdHMnLCAnaGVpZ2h0JywgJ2lkJywgJ3ByaW1pdGl2ZVVuaXRzJywgJ3N0eWxlJywgJ3dpZHRoJywgJ3gnLCAneGxpbms6YWN0dWF0ZScsICd4bGluazphcmNyb2xlJywgJ3hsaW5rOmhyZWYnLCAneGxpbms6cm9sZScsICd4bGluazpzaG93JywgJ3hsaW5rOnRpdGxlJywgJ3hsaW5rOnR5cGUnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJywgJ3knXSxcbiAgICBmb250OiBbJ2NsYXNzJywgJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnLCAnaG9yaXotYWR2LXgnLCAnaG9yaXotb3JpZ2luLXgnLCAnaG9yaXotb3JpZ2luLXknLCAnaWQnLCAnc3R5bGUnLCAndmVydC1hZHYteScsICd2ZXJ0LW9yaWdpbi14JywgJ3ZlcnQtb3JpZ2luLXknLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJ10sXG4gICAgJ2ZvbnQtZmFjZSc6IFsnYWNjZW50LWhlaWdodCcsICdhbHBoYWJldGljJywgJ2FzY2VudCcsICdiYm94JywgJ2NhcC1oZWlnaHQnLCAnZGVzY2VudCcsICdmb250LWZhbWlseScsICdmb250LXNpemUnLCAnZm9udC1zdHJldGNoJywgJ2ZvbnQtc3R5bGUnLCAnZm9udC12YXJpYW50JywgJ2ZvbnQtd2VpZ2h0JywgJ2hhbmdpbmcnLCAnaWQnLCAnaWRlb2dyYXBoaWMnLCAnbWF0aGVtYXRpY2FsJywgJ292ZXJsaW5lLXBvc2l0aW9uJywgJ292ZXJsaW5lLXRoaWNrbmVzcycsICdwYW5vc2UtMScsICdzbG9wZScsICdzdGVtaCcsICdzdGVtdicsICdzdHJpa2V0aHJvdWdoLXBvc2l0aW9uJywgJ3N0cmlrZXRocm91Z2gtdGhpY2tuZXNzJywgJ3VuZGVybGluZS1wb3NpdGlvbicsICd1bmRlcmxpbmUtdGhpY2tuZXNzJywgJ3VuaWNvZGUtcmFuZ2UnLCAndW5pdHMtcGVyLWVtJywgJ3YtYWxwaGFiZXRpYycsICd2LWhhbmdpbmcnLCAndi1pZGVvZ3JhcGhpYycsICd2LW1hdGhlbWF0aWNhbCcsICd3aWR0aHMnLCAneC1oZWlnaHQnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJ10sXG4gICAgJ2ZvbnQtZmFjZS1mb3JtYXQnOiBbJ2lkJywgJ3N0cmluZycsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnXSxcbiAgICAnZm9udC1mYWNlLW5hbWUnOiBbJ2lkJywgJ25hbWUnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJ10sXG4gICAgJ2ZvbnQtZmFjZS1zcmMnOiBbJ2lkJywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZSddLFxuICAgICdmb250LWZhY2UtdXJpJzogWydpZCcsICd4bGluazphY3R1YXRlJywgJ3hsaW5rOmFyY3JvbGUnLCAneGxpbms6aHJlZicsICd4bGluazpyb2xlJywgJ3hsaW5rOnNob3cnLCAneGxpbms6dGl0bGUnLCAneGxpbms6dHlwZScsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnXSxcbiAgICBmb3JlaWduT2JqZWN0OiBbJ2NsYXNzJywgJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnLCAnaGVpZ2h0JywgJ2lkJywgJ29uYWN0aXZhdGUnLCAnb25jbGljaycsICdvbmZvY3VzaW4nLCAnb25mb2N1c291dCcsICdvbmxvYWQnLCAnb25tb3VzZWRvd24nLCAnb25tb3VzZW1vdmUnLCAnb25tb3VzZW91dCcsICdvbm1vdXNlb3ZlcicsICdvbm1vdXNldXAnLCAncmVxdWlyZWRFeHRlbnNpb25zJywgJ3JlcXVpcmVkRmVhdHVyZXMnLCAnc3R5bGUnLCAnc3lzdGVtTGFuZ3VhZ2UnLCAndHJhbnNmb3JtJywgJ3dpZHRoJywgJ3gnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJywgJ3knXSxcbiAgICBnOiBbJ2NsYXNzJywgJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnLCAnaWQnLCAnb25hY3RpdmF0ZScsICdvbmNsaWNrJywgJ29uZm9jdXNpbicsICdvbmZvY3Vzb3V0JywgJ29ubG9hZCcsICdvbm1vdXNlZG93bicsICdvbm1vdXNlbW92ZScsICdvbm1vdXNlb3V0JywgJ29ubW91c2VvdmVyJywgJ29ubW91c2V1cCcsICdyZXF1aXJlZEV4dGVuc2lvbnMnLCAncmVxdWlyZWRGZWF0dXJlcycsICdzdHlsZScsICdzeXN0ZW1MYW5ndWFnZScsICd0cmFuc2Zvcm0nLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJ10sXG4gICAgZ2x5cGg6IFsnYXJhYmljLWZvcm0nLCAnY2xhc3MnLCAnZCcsICdnbHlwaC1uYW1lJywgJ2hvcml6LWFkdi14JywgJ2lkJywgJ2xhbmcnLCAnb3JpZW50YXRpb24nLCAnc3R5bGUnLCAndW5pY29kZScsICd2ZXJ0LWFkdi15JywgJ3ZlcnQtb3JpZ2luLXgnLCAndmVydC1vcmlnaW4teScsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnXSxcbiAgICBnbHlwaFJlZjogWydjbGFzcycsICdkeCcsICdkeScsICdmb3JtYXQnLCAnZ2x5cGhSZWYnLCAnaWQnLCAnc3R5bGUnLCAneCcsICd4bGluazphY3R1YXRlJywgJ3hsaW5rOmFyY3JvbGUnLCAneGxpbms6aHJlZicsICd4bGluazpyb2xlJywgJ3hsaW5rOnNob3cnLCAneGxpbms6dGl0bGUnLCAneGxpbms6dHlwZScsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnLCAneSddLFxuICAgIGhrZXJuOiBbJ2cxJywgJ2cyJywgJ2lkJywgJ2snLCAndTEnLCAndTInLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJ10sXG4gICAgaW1hZ2U6IFsnY2xhc3MnLCAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcsICdoZWlnaHQnLCAnaWQnLCAnb25hY3RpdmF0ZScsICdvbmNsaWNrJywgJ29uZm9jdXNpbicsICdvbmZvY3Vzb3V0JywgJ29ubG9hZCcsICdvbm1vdXNlZG93bicsICdvbm1vdXNlbW92ZScsICdvbm1vdXNlb3V0JywgJ29ubW91c2VvdmVyJywgJ29ubW91c2V1cCcsICdwcmVzZXJ2ZUFzcGVjdFJhdGlvJywgJ3JlcXVpcmVkRXh0ZW5zaW9ucycsICdyZXF1aXJlZEZlYXR1cmVzJywgJ3N0eWxlJywgJ3N5c3RlbUxhbmd1YWdlJywgJ3RyYW5zZm9ybScsICd3aWR0aCcsICd4JywgJ3hsaW5rOmFjdHVhdGUnLCAneGxpbms6YXJjcm9sZScsICd4bGluazpocmVmJywgJ3hsaW5rOnJvbGUnLCAneGxpbms6c2hvdycsICd4bGluazp0aXRsZScsICd4bGluazp0eXBlJywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZScsICd5J10sXG4gICAgbGluZTogWydjbGFzcycsICdleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJywgJ2lkJywgJ29uYWN0aXZhdGUnLCAnb25jbGljaycsICdvbmZvY3VzaW4nLCAnb25mb2N1c291dCcsICdvbmxvYWQnLCAnb25tb3VzZWRvd24nLCAnb25tb3VzZW1vdmUnLCAnb25tb3VzZW91dCcsICdvbm1vdXNlb3ZlcicsICdvbm1vdXNldXAnLCAncmVxdWlyZWRFeHRlbnNpb25zJywgJ3JlcXVpcmVkRmVhdHVyZXMnLCAnc3R5bGUnLCAnc3lzdGVtTGFuZ3VhZ2UnLCAndHJhbnNmb3JtJywgJ3gxJywgJ3gyJywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZScsICd5MScsICd5MiddLFxuICAgIGxpbmVhckdyYWRpZW50OiBbJ2NsYXNzJywgJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnLCAnZ3JhZGllbnRUcmFuc2Zvcm0nLCAnZ3JhZGllbnRVbml0cycsICdpZCcsICdzcHJlYWRNZXRob2QnLCAnc3R5bGUnLCAneDEnLCAneDInLCAneGxpbms6YXJjcm9sZScsICd4bGluazpocmVmJywgJ3hsaW5rOnJvbGUnLCAneGxpbms6dGl0bGUnLCAneGxpbms6dHlwZScsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnLCAneTEnLCAneTInXSxcbiAgICBtYXJrZXI6IFsnY2xhc3MnLCAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcsICdpZCcsICdtYXJrZXJIZWlnaHQnLCAnbWFya2VyVW5pdHMnLCAnbWFya2VyV2lkdGgnLCAnb3JpZW50JywgJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLCAncmVmWCcsICdyZWZZJywgJ3N0eWxlJywgJ3ZpZXdCb3gnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJ10sXG4gICAgbWFzazogWydjbGFzcycsICdleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJywgJ2hlaWdodCcsICdpZCcsICdtYXNrQ29udGVudFVuaXRzJywgJ21hc2tVbml0cycsICdyZXF1aXJlZEV4dGVuc2lvbnMnLCAncmVxdWlyZWRGZWF0dXJlcycsICdzdHlsZScsICdzeXN0ZW1MYW5ndWFnZScsICd3aWR0aCcsICd4JywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZScsICd5J10sXG4gICAgbWV0YWRhdGE6IFsnaWQnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJ10sXG4gICAgJ21pc3NpbmctZ2x5cGgnOiBbJ2NsYXNzJywgJ2QnLCAnaG9yaXotYWR2LXgnLCAnaWQnLCAnc3R5bGUnLCAndmVydC1hZHYteScsICd2ZXJ0LW9yaWdpbi14JywgJ3ZlcnQtb3JpZ2luLXknLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJ10sXG4gICAgbXBhdGg6IFsnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcsICdpZCcsICd4bGluazphY3R1YXRlJywgJ3hsaW5rOmFyY3JvbGUnLCAneGxpbms6aHJlZicsICd4bGluazpyb2xlJywgJ3hsaW5rOnNob3cnLCAneGxpbms6dGl0bGUnLCAneGxpbms6dHlwZScsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnXSxcbiAgICBwYXRoOiBbJ2NsYXNzJywgJ2QnLCAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcsICdpZCcsICdvbmFjdGl2YXRlJywgJ29uY2xpY2snLCAnb25mb2N1c2luJywgJ29uZm9jdXNvdXQnLCAnb25sb2FkJywgJ29ubW91c2Vkb3duJywgJ29ubW91c2Vtb3ZlJywgJ29ubW91c2VvdXQnLCAnb25tb3VzZW92ZXInLCAnb25tb3VzZXVwJywgJ3BhdGhMZW5ndGgnLCAncmVxdWlyZWRFeHRlbnNpb25zJywgJ3JlcXVpcmVkRmVhdHVyZXMnLCAnc3R5bGUnLCAnc3lzdGVtTGFuZ3VhZ2UnLCAndHJhbnNmb3JtJywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZSddLFxuICAgIHBhdHRlcm46IFsnY2xhc3MnLCAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcsICdoZWlnaHQnLCAnaWQnLCAncGF0dGVybkNvbnRlbnRVbml0cycsICdwYXR0ZXJuVHJhbnNmb3JtJywgJ3BhdHRlcm5Vbml0cycsICdwcmVzZXJ2ZUFzcGVjdFJhdGlvJywgJ3JlcXVpcmVkRXh0ZW5zaW9ucycsICdyZXF1aXJlZEZlYXR1cmVzJywgJ3N0eWxlJywgJ3N5c3RlbUxhbmd1YWdlJywgJ3ZpZXdCb3gnLCAnd2lkdGgnLCAneCcsICd4bGluazphY3R1YXRlJywgJ3hsaW5rOmFyY3JvbGUnLCAneGxpbms6aHJlZicsICd4bGluazpyb2xlJywgJ3hsaW5rOnNob3cnLCAneGxpbms6dGl0bGUnLCAneGxpbms6dHlwZScsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnLCAneSddLFxuICAgIHBvbHlnb246IFsnY2xhc3MnLCAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcsICdpZCcsICdvbmFjdGl2YXRlJywgJ29uY2xpY2snLCAnb25mb2N1c2luJywgJ29uZm9jdXNvdXQnLCAnb25sb2FkJywgJ29ubW91c2Vkb3duJywgJ29ubW91c2Vtb3ZlJywgJ29ubW91c2VvdXQnLCAnb25tb3VzZW92ZXInLCAnb25tb3VzZXVwJywgJ3BvaW50cycsICdyZXF1aXJlZEV4dGVuc2lvbnMnLCAncmVxdWlyZWRGZWF0dXJlcycsICdzdHlsZScsICdzeXN0ZW1MYW5ndWFnZScsICd0cmFuc2Zvcm0nLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJ10sXG4gICAgcG9seWxpbmU6IFsnY2xhc3MnLCAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcsICdpZCcsICdvbmFjdGl2YXRlJywgJ29uY2xpY2snLCAnb25mb2N1c2luJywgJ29uZm9jdXNvdXQnLCAnb25sb2FkJywgJ29ubW91c2Vkb3duJywgJ29ubW91c2Vtb3ZlJywgJ29ubW91c2VvdXQnLCAnb25tb3VzZW92ZXInLCAnb25tb3VzZXVwJywgJ3BvaW50cycsICdyZXF1aXJlZEV4dGVuc2lvbnMnLCAncmVxdWlyZWRGZWF0dXJlcycsICdzdHlsZScsICdzeXN0ZW1MYW5ndWFnZScsICd0cmFuc2Zvcm0nLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJ10sXG4gICAgcmFkaWFsR3JhZGllbnQ6IFsnY2xhc3MnLCAnY3gnLCAnY3knLCAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcsICdmeCcsICdmeScsICdncmFkaWVudFRyYW5zZm9ybScsICdncmFkaWVudFVuaXRzJywgJ2lkJywgJ3InLCAnc3ByZWFkTWV0aG9kJywgJ3N0eWxlJywgJ3hsaW5rOmFyY3JvbGUnLCAneGxpbms6aHJlZicsICd4bGluazpyb2xlJywgJ3hsaW5rOnRpdGxlJywgJ3hsaW5rOnR5cGUnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJ10sXG4gICAgcmVjdDogWydjbGFzcycsICdleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJywgJ2hlaWdodCcsICdpZCcsICdvbmFjdGl2YXRlJywgJ29uY2xpY2snLCAnb25mb2N1c2luJywgJ29uZm9jdXNvdXQnLCAnb25sb2FkJywgJ29ubW91c2Vkb3duJywgJ29ubW91c2Vtb3ZlJywgJ29ubW91c2VvdXQnLCAnb25tb3VzZW92ZXInLCAnb25tb3VzZXVwJywgJ3JlcXVpcmVkRXh0ZW5zaW9ucycsICdyZXF1aXJlZEZlYXR1cmVzJywgJ3J4JywgJ3J5JywgJ3N0eWxlJywgJ3N5c3RlbUxhbmd1YWdlJywgJ3RyYW5zZm9ybScsICd3aWR0aCcsICd4JywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZScsICd5J10sXG4gICAgc2NyaXB0OiBbJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnLCAnaWQnLCAndHlwZScsICd4bGluazphY3R1YXRlJywgJ3hsaW5rOmFyY3JvbGUnLCAneGxpbms6aHJlZicsICd4bGluazpyb2xlJywgJ3hsaW5rOnNob3cnLCAneGxpbms6dGl0bGUnLCAneGxpbms6dHlwZScsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnXSxcbiAgICBzZXQ6IFsnYXR0cmlidXRlTmFtZScsICdhdHRyaWJ1dGVUeXBlJywgJ2JlZ2luJywgJ2R1cicsICdlbmQnLCAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcsICdmaWxsJywgJ2lkJywgJ21heCcsICdtaW4nLCAnb25iZWdpbicsICdvbmVuZCcsICdvbmxvYWQnLCAnb25yZXBlYXQnLCAncmVwZWF0Q291bnQnLCAncmVwZWF0RHVyJywgJ3JlcXVpcmVkRXh0ZW5zaW9ucycsICdyZXF1aXJlZEZlYXR1cmVzJywgJ3Jlc3RhcnQnLCAnc3lzdGVtTGFuZ3VhZ2UnLCAndG8nLCAneGxpbms6YWN0dWF0ZScsICd4bGluazphcmNyb2xlJywgJ3hsaW5rOmhyZWYnLCAneGxpbms6cm9sZScsICd4bGluazpzaG93JywgJ3hsaW5rOnRpdGxlJywgJ3hsaW5rOnR5cGUnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJ10sXG4gICAgc3RvcDogWydjbGFzcycsICdpZCcsICdvZmZzZXQnLCAnc3R5bGUnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJ10sXG4gICAgc3R5bGU6IFsnaWQnLCAnbWVkaWEnLCAndGl0bGUnLCAndHlwZScsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnXSxcbiAgICBzdmc6IFsnYmFzZVByb2ZpbGUnLCAnY2xhc3MnLCAnY29udGVudFNjcmlwdFR5cGUnLCAnY29udGVudFN0eWxlVHlwZScsICdleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJywgJ2hlaWdodCcsICdpZCcsICdvbmFib3J0JywgJ29uYWN0aXZhdGUnLCAnb25jbGljaycsICdvbmVycm9yJywgJ29uZm9jdXNpbicsICdvbmZvY3Vzb3V0JywgJ29ubG9hZCcsICdvbm1vdXNlZG93bicsICdvbm1vdXNlbW92ZScsICdvbm1vdXNlb3V0JywgJ29ubW91c2VvdmVyJywgJ29ubW91c2V1cCcsICdvbnJlc2l6ZScsICdvbnNjcm9sbCcsICdvbnVubG9hZCcsICdvbnpvb20nLCAncHJlc2VydmVBc3BlY3RSYXRpbycsICdyZXF1aXJlZEV4dGVuc2lvbnMnLCAncmVxdWlyZWRGZWF0dXJlcycsICdzdHlsZScsICdzeXN0ZW1MYW5ndWFnZScsICd2ZXJzaW9uJywgJ3ZpZXdCb3gnLCAnd2lkdGgnLCAneCcsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnLCAneScsICd6b29tQW5kUGFuJ10sXG4gICAgc3dpdGNoOiBbJ2NsYXNzJywgJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnLCAnaWQnLCAnb25hY3RpdmF0ZScsICdvbmNsaWNrJywgJ29uZm9jdXNpbicsICdvbmZvY3Vzb3V0JywgJ29ubG9hZCcsICdvbm1vdXNlZG93bicsICdvbm1vdXNlbW92ZScsICdvbm1vdXNlb3V0JywgJ29ubW91c2VvdmVyJywgJ29ubW91c2V1cCcsICdyZXF1aXJlZEV4dGVuc2lvbnMnLCAncmVxdWlyZWRGZWF0dXJlcycsICdzdHlsZScsICdzeXN0ZW1MYW5ndWFnZScsICd0cmFuc2Zvcm0nLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJ10sXG4gICAgc3ltYm9sOiBbJ2NsYXNzJywgJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnLCAnaWQnLCAnb25hY3RpdmF0ZScsICdvbmNsaWNrJywgJ29uZm9jdXNpbicsICdvbmZvY3Vzb3V0JywgJ29ubG9hZCcsICdvbm1vdXNlZG93bicsICdvbm1vdXNlbW92ZScsICdvbm1vdXNlb3V0JywgJ29ubW91c2VvdmVyJywgJ29ubW91c2V1cCcsICdwcmVzZXJ2ZUFzcGVjdFJhdGlvJywgJ3N0eWxlJywgJ3ZpZXdCb3gnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJ10sXG4gICAgdGV4dDogWydjbGFzcycsICdkeCcsICdkeScsICdleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJywgJ2lkJywgJ2xlbmd0aEFkanVzdCcsICdvbmFjdGl2YXRlJywgJ29uY2xpY2snLCAnb25mb2N1c2luJywgJ29uZm9jdXNvdXQnLCAnb25sb2FkJywgJ29ubW91c2Vkb3duJywgJ29ubW91c2Vtb3ZlJywgJ29ubW91c2VvdXQnLCAnb25tb3VzZW92ZXInLCAnb25tb3VzZXVwJywgJ3JlcXVpcmVkRXh0ZW5zaW9ucycsICdyZXF1aXJlZEZlYXR1cmVzJywgJ3JvdGF0ZScsICdzdHlsZScsICdzeXN0ZW1MYW5ndWFnZScsICd0ZXh0TGVuZ3RoJywgJ3RyYW5zZm9ybScsICd4JywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZScsICd5J10sXG4gICAgdGV4dFBhdGg6IFsnY2xhc3MnLCAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcsICdpZCcsICdsZW5ndGhBZGp1c3QnLCAnbWV0aG9kJywgJ29uYWN0aXZhdGUnLCAnb25jbGljaycsICdvbmZvY3VzaW4nLCAnb25mb2N1c291dCcsICdvbmxvYWQnLCAnb25tb3VzZWRvd24nLCAnb25tb3VzZW1vdmUnLCAnb25tb3VzZW91dCcsICdvbm1vdXNlb3ZlcicsICdvbm1vdXNldXAnLCAncmVxdWlyZWRFeHRlbnNpb25zJywgJ3JlcXVpcmVkRmVhdHVyZXMnLCAnc3BhY2luZycsICdzdGFydE9mZnNldCcsICdzdHlsZScsICdzeXN0ZW1MYW5ndWFnZScsICd0ZXh0TGVuZ3RoJywgJ3hsaW5rOmFyY3JvbGUnLCAneGxpbms6aHJlZicsICd4bGluazpyb2xlJywgJ3hsaW5rOnRpdGxlJywgJ3hsaW5rOnR5cGUnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJ10sXG4gICAgdGl0bGU6IFsnY2xhc3MnLCAnaWQnLCAnc3R5bGUnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJ10sXG4gICAgdHJlZjogWydjbGFzcycsICdkeCcsICdkeScsICdleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJywgJ2lkJywgJ2xlbmd0aEFkanVzdCcsICdvbmFjdGl2YXRlJywgJ29uY2xpY2snLCAnb25mb2N1c2luJywgJ29uZm9jdXNvdXQnLCAnb25sb2FkJywgJ29ubW91c2Vkb3duJywgJ29ubW91c2Vtb3ZlJywgJ29ubW91c2VvdXQnLCAnb25tb3VzZW92ZXInLCAnb25tb3VzZXVwJywgJ3JlcXVpcmVkRXh0ZW5zaW9ucycsICdyZXF1aXJlZEZlYXR1cmVzJywgJ3JvdGF0ZScsICdzdHlsZScsICdzeXN0ZW1MYW5ndWFnZScsICd0ZXh0TGVuZ3RoJywgJ3gnLCAneGxpbms6YXJjcm9sZScsICd4bGluazpocmVmJywgJ3hsaW5rOnJvbGUnLCAneGxpbms6dGl0bGUnLCAneGxpbms6dHlwZScsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnLCAneSddLFxuICAgIHRzcGFuOiBbJ2NsYXNzJywgJ2R4JywgJ2R5JywgJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnLCAnaWQnLCAnbGVuZ3RoQWRqdXN0JywgJ29uYWN0aXZhdGUnLCAnb25jbGljaycsICdvbmZvY3VzaW4nLCAnb25mb2N1c291dCcsICdvbmxvYWQnLCAnb25tb3VzZWRvd24nLCAnb25tb3VzZW1vdmUnLCAnb25tb3VzZW91dCcsICdvbm1vdXNlb3ZlcicsICdvbm1vdXNldXAnLCAncmVxdWlyZWRFeHRlbnNpb25zJywgJ3JlcXVpcmVkRmVhdHVyZXMnLCAncm90YXRlJywgJ3N0eWxlJywgJ3N5c3RlbUxhbmd1YWdlJywgJ3RleHRMZW5ndGgnLCAneCcsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnLCAneSddLFxuICAgIHVzZTogWydjbGFzcycsICdleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJywgJ2hlaWdodCcsICdpZCcsICdvbmFjdGl2YXRlJywgJ29uY2xpY2snLCAnb25mb2N1c2luJywgJ29uZm9jdXNvdXQnLCAnb25sb2FkJywgJ29ubW91c2Vkb3duJywgJ29ubW91c2Vtb3ZlJywgJ29ubW91c2VvdXQnLCAnb25tb3VzZW92ZXInLCAnb25tb3VzZXVwJywgJ3JlcXVpcmVkRXh0ZW5zaW9ucycsICdyZXF1aXJlZEZlYXR1cmVzJywgJ3N0eWxlJywgJ3N5c3RlbUxhbmd1YWdlJywgJ3RyYW5zZm9ybScsICd3aWR0aCcsICd4JywgJ3hsaW5rOmFjdHVhdGUnLCAneGxpbms6YXJjcm9sZScsICd4bGluazpocmVmJywgJ3hsaW5rOnJvbGUnLCAneGxpbms6c2hvdycsICd4bGluazp0aXRsZScsICd4bGluazp0eXBlJywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZScsICd5J10sXG4gICAgdmlldzogWydleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJywgJ2lkJywgJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLCAndmlld0JveCcsICd2aWV3VGFyZ2V0JywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZScsICd6b29tQW5kUGFuJ10sXG4gICAgdmtlcm46IFsnZzEnLCAnZzInLCAnaWQnLCAnaycsICd1MScsICd1MicsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnXVxuICB9O1xuXG5cbiAgc3ZnUHJlc2VudGF0aW9uRWxlbWVudHMgPSB7XG4gICAgJ2EnOiB0cnVlLFxuICAgICdhbHRHbHlwaCc6IHRydWUsXG4gICAgJ2FuaW1hdGUnOiB0cnVlLFxuICAgICdhbmltYXRlQ29sb3InOiB0cnVlLFxuICAgICdjaXJjbGUnOiB0cnVlLFxuICAgICdjbGlwUGF0aCc6IHRydWUsXG4gICAgJ2RlZnMnOiB0cnVlLFxuICAgICdlbGxpcHNlJzogdHJ1ZSxcbiAgICAnZmVCbGVuZCc6IHRydWUsXG4gICAgJ2ZlQ29sb3JNYXRyaXgnOiB0cnVlLFxuICAgICdmZUNvbXBvbmVudFRyYW5zZmVyJzogdHJ1ZSxcbiAgICAnZmVDb21wb3NpdGUnOiB0cnVlLFxuICAgICdmZUNvbnZvbHZlTWF0cml4JzogdHJ1ZSxcbiAgICAnZmVEaWZmdXNlTGlnaHRpbmcnOiB0cnVlLFxuICAgICdmZURpc3BsYWNlbWVudE1hcCc6IHRydWUsXG4gICAgJ2ZlRmxvb2QnOiB0cnVlLFxuICAgICdmZUdhdXNzaWFuQmx1cic6IHRydWUsXG4gICAgJ2ZlSW1hZ2UnOiB0cnVlLFxuICAgICdmZU1lcmdlJzogdHJ1ZSxcbiAgICAnZmVNb3JwaG9sb2d5JzogdHJ1ZSxcbiAgICAnZmVPZmZzZXQnOiB0cnVlLFxuICAgICdmZVNwZWN1bGFyTGlnaHRpbmcnOiB0cnVlLFxuICAgICdmZVRpbGUnOiB0cnVlLFxuICAgICdmZVR1cmJ1bGVuY2UnOiB0cnVlLFxuICAgICdmaWx0ZXInOiB0cnVlLFxuICAgICdmb250JzogdHJ1ZSxcbiAgICAnZm9yZWlnbk9iamVjdCc6IHRydWUsXG4gICAgJ2cnOiB0cnVlLFxuICAgICdnbHlwaCc6IHRydWUsXG4gICAgJ2dseXBoUmVmJzogdHJ1ZSxcbiAgICAnaW1hZ2UnOiB0cnVlLFxuICAgICdsaW5lJzogdHJ1ZSxcbiAgICAnbGluZWFyR3JhZGllbnQnOiB0cnVlLFxuICAgICdtYXJrZXInOiB0cnVlLFxuICAgICdtYXNrJzogdHJ1ZSxcbiAgICAnbWlzc2luZy1nbHlwaCc6IHRydWUsXG4gICAgJ3BhdGgnOiB0cnVlLFxuICAgICdwYXR0ZXJuJzogdHJ1ZSxcbiAgICAncG9seWdvbic6IHRydWUsXG4gICAgJ3BvbHlsaW5lJzogdHJ1ZSxcbiAgICAncmFkaWFsR3JhZGllbnQnOiB0cnVlLFxuICAgICdyZWN0JzogdHJ1ZSxcbiAgICAnc3RvcCc6IHRydWUsXG4gICAgJ3N2Zyc6IHRydWUsXG4gICAgJ3N3aXRjaCc6IHRydWUsXG4gICAgJ3N5bWJvbCc6IHRydWUsXG4gICAgJ3RleHQnOiB0cnVlLFxuICAgICd0ZXh0UGF0aCc6IHRydWUsXG4gICAgJ3RyZWYnOiB0cnVlLFxuICAgICd0c3Bhbic6IHRydWUsXG4gICAgJ3VzZSc6IHRydWVcbiAgfTtcblxuICBzdmdQcmVzZW50YXRpb25BdHRyaWJ1dGVzID0ge1xuICAgICdhbGlnbm1lbnQtYmFzZWxpbmUnOiB0cnVlLFxuICAgICdiYXNlbGluZS1zaGlmdCc6IHRydWUsXG4gICAgJ2NsaXAtcGF0aCc6IHRydWUsXG4gICAgJ2NsaXAtcnVsZSc6IHRydWUsXG4gICAgJ2NsaXAnOiB0cnVlLFxuICAgICdjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMnOiB0cnVlLFxuICAgICdjb2xvci1pbnRlcnBvbGF0aW9uJzogdHJ1ZSxcbiAgICAnY29sb3ItcHJvZmlsZSc6IHRydWUsXG4gICAgJ2NvbG9yLXJlbmRlcmluZyc6IHRydWUsXG4gICAgJ2NvbG9yJzogdHJ1ZSxcbiAgICAnY3Vyc29yJzogdHJ1ZSxcbiAgICAnZGlyZWN0aW9uJzogdHJ1ZSxcbiAgICAnZGlzcGxheSc6IHRydWUsXG4gICAgJ2RvbWluYW50LWJhc2VsaW5lJzogdHJ1ZSxcbiAgICAnZW5hYmxlLWJhY2tncm91bmQnOiB0cnVlLFxuICAgICdmaWxsLW9wYWNpdHknOiB0cnVlLFxuICAgICdmaWxsLXJ1bGUnOiB0cnVlLFxuICAgICdmaWxsJzogdHJ1ZSxcbiAgICAnZmlsdGVyJzogdHJ1ZSxcbiAgICAnZmxvb2QtY29sb3InOiB0cnVlLFxuICAgICdmbG9vZC1vcGFjaXR5JzogdHJ1ZSxcbiAgICAnZm9udC1mYW1pbHknOiB0cnVlLFxuICAgICdmb250LXNpemUtYWRqdXN0JzogdHJ1ZSxcbiAgICAnZm9udC1zaXplJzogdHJ1ZSxcbiAgICAnZm9udC1zdHJldGNoJzogdHJ1ZSxcbiAgICAnZm9udC1zdHlsZSc6IHRydWUsXG4gICAgJ2ZvbnQtdmFyaWFudCc6IHRydWUsXG4gICAgJ2ZvbnQtd2VpZ2h0JzogdHJ1ZSxcbiAgICAnZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCc6IHRydWUsXG4gICAgJ2dseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsJzogdHJ1ZSxcbiAgICAnaW1hZ2UtcmVuZGVyaW5nJzogdHJ1ZSxcbiAgICAna2VybmluZyc6IHRydWUsXG4gICAgJ2xldHRlci1zcGFjaW5nJzogdHJ1ZSxcbiAgICAnbGlnaHRpbmctY29sb3InOiB0cnVlLFxuICAgICdtYXJrZXItZW5kJzogdHJ1ZSxcbiAgICAnbWFya2VyLW1pZCc6IHRydWUsXG4gICAgJ21hcmtlci1zdGFydCc6IHRydWUsXG4gICAgJ21hc2snOiB0cnVlLFxuICAgICdvcGFjaXR5JzogdHJ1ZSxcbiAgICAnb3ZlcmZsb3cnOiB0cnVlLFxuICAgICdwb2ludGVyLWV2ZW50cyc6IHRydWUsXG4gICAgJ3NoYXBlLXJlbmRlcmluZyc6IHRydWUsXG4gICAgJ3N0b3AtY29sb3InOiB0cnVlLFxuICAgICdzdG9wLW9wYWNpdHknOiB0cnVlLFxuICAgICdzdHJva2UtZGFzaGFycmF5JzogdHJ1ZSxcbiAgICAnc3Ryb2tlLWRhc2hvZmZzZXQnOiB0cnVlLFxuICAgICdzdHJva2UtbGluZWNhcCc6IHRydWUsXG4gICAgJ3N0cm9rZS1saW5lam9pbic6IHRydWUsXG4gICAgJ3N0cm9rZS1taXRlcmxpbWl0JzogdHJ1ZSxcbiAgICAnc3Ryb2tlLW9wYWNpdHknOiB0cnVlLFxuICAgICdzdHJva2Utd2lkdGgnOiB0cnVlLFxuICAgICdzdHJva2UnOiB0cnVlLFxuICAgICd0ZXh0LWFuY2hvcic6IHRydWUsXG4gICAgJ3RleHQtZGVjb3JhdGlvbic6IHRydWUsXG4gICAgJ3RleHQtcmVuZGVyaW5nJzogdHJ1ZSxcbiAgICAndW5pY29kZS1iaWRpJzogdHJ1ZSxcbiAgICAndmlzaWJpbGl0eSc6IHRydWUsXG4gICAgJ3dvcmQtc3BhY2luZyc6IHRydWUsXG4gICAgJ3dyaXRpbmctbW9kZSc6IHRydWVcbiAgfTtcblxuICB2YXIgY3JlYXRlRWxlbWVudCA9IGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQoaHRtbCkge1xuICAgIHZhciBkaXYgPSBET00uY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgZGl2LmlubmVySFRNTCA9IGh0bWw7XG4gICAgcmV0dXJuIGRpdi5maXJzdENoaWxkO1xuICB9O1xuXG4gIHN2Z0FuYWx5emVyID0gZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFNWR0FuYWx5emVyKCkge1xuICAgICAgXG5cbiAgICAgIGlmIChjcmVhdGVFbGVtZW50KCc8c3ZnPjxhbHRHbHlwaCAvPjwvc3ZnPicpLmZpcnN0RWxlbWVudENoaWxkLm5vZGVOYW1lID09PSAnYWx0Z2x5cGgnICYmIGVsZW1lbnRzLmFsdEdseXBoKSB7XG4gICAgICAgIGVsZW1lbnRzLmFsdGdseXBoID0gZWxlbWVudHMuYWx0R2x5cGg7XG4gICAgICAgIGRlbGV0ZSBlbGVtZW50cy5hbHRHbHlwaDtcbiAgICAgICAgZWxlbWVudHMuYWx0Z2x5cGhkZWYgPSBlbGVtZW50cy5hbHRHbHlwaERlZjtcbiAgICAgICAgZGVsZXRlIGVsZW1lbnRzLmFsdEdseXBoRGVmO1xuICAgICAgICBlbGVtZW50cy5hbHRnbHlwaGl0ZW0gPSBlbGVtZW50cy5hbHRHbHlwaEl0ZW07XG4gICAgICAgIGRlbGV0ZSBlbGVtZW50cy5hbHRHbHlwaEl0ZW07XG4gICAgICAgIGVsZW1lbnRzLmdseXBocmVmID0gZWxlbWVudHMuZ2x5cGhSZWY7XG4gICAgICAgIGRlbGV0ZSBlbGVtZW50cy5nbHlwaFJlZjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBTVkdBbmFseXplci5wcm90b3R5cGUuaXNTdGFuZGFyZFN2Z0F0dHJpYnV0ZSA9IGZ1bmN0aW9uIGlzU3RhbmRhcmRTdmdBdHRyaWJ1dGUobm9kZU5hbWUsIGF0dHJpYnV0ZU5hbWUpIHtcbiAgICAgIHJldHVybiBwcmVzZW50YXRpb25FbGVtZW50c1tub2RlTmFtZV0gJiYgcHJlc2VudGF0aW9uQXR0cmlidXRlc1thdHRyaWJ1dGVOYW1lXSB8fCBlbGVtZW50c1tub2RlTmFtZV0gJiYgZWxlbWVudHNbbm9kZU5hbWVdLmluZGV4T2YoYXR0cmlidXRlTmFtZSkgIT09IC0xO1xuICAgIH07XG5cbiAgICByZXR1cm4gU1ZHQW5hbHl6ZXI7XG4gIH0oKTtcbn1cblxuZXhwb3J0IHZhciBlbGVtZW50cyA9IHN2Z0VsZW1lbnRzO1xuZXhwb3J0IHZhciBwcmVzZW50YXRpb25FbGVtZW50cyA9IHN2Z1ByZXNlbnRhdGlvbkVsZW1lbnRzO1xuZXhwb3J0IHZhciBwcmVzZW50YXRpb25BdHRyaWJ1dGVzID0gc3ZnUHJlc2VudGF0aW9uQXR0cmlidXRlcztcbmV4cG9ydCB2YXIgU1ZHQW5hbHl6ZXIgPSBzdmdBbmFseXplciB8fCBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIF9jbGFzczExKCkge1xuICAgIFxuICB9XG5cbiAgX2NsYXNzMTEucHJvdG90eXBlLmlzU3RhbmRhcmRTdmdBdHRyaWJ1dGUgPSBmdW5jdGlvbiBpc1N0YW5kYXJkU3ZnQXR0cmlidXRlKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICByZXR1cm4gX2NsYXNzMTE7XG59KCk7XG5cbmV4cG9ydCB2YXIgT2JzZXJ2ZXJMb2NhdG9yID0gKF90ZW1wID0gX2NsYXNzMTIgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIE9ic2VydmVyTG9jYXRvcih0YXNrUXVldWUsIGV2ZW50TWFuYWdlciwgZGlydHlDaGVja2VyLCBzdmdBbmFseXplciwgcGFyc2VyKSB7XG4gICAgXG5cbiAgICB0aGlzLnRhc2tRdWV1ZSA9IHRhc2tRdWV1ZTtcbiAgICB0aGlzLmV2ZW50TWFuYWdlciA9IGV2ZW50TWFuYWdlcjtcbiAgICB0aGlzLmRpcnR5Q2hlY2tlciA9IGRpcnR5Q2hlY2tlcjtcbiAgICB0aGlzLnN2Z0FuYWx5emVyID0gc3ZnQW5hbHl6ZXI7XG4gICAgdGhpcy5wYXJzZXIgPSBwYXJzZXI7XG5cbiAgICB0aGlzLmFkYXB0ZXJzID0gW107XG4gICAgdGhpcy5sb2dnZXIgPSBMb2dNYW5hZ2VyLmdldExvZ2dlcignb2JzZXJ2ZXItbG9jYXRvcicpO1xuICB9XG5cbiAgT2JzZXJ2ZXJMb2NhdG9yLnByb3RvdHlwZS5nZXRPYnNlcnZlciA9IGZ1bmN0aW9uIGdldE9ic2VydmVyKG9iaiwgcHJvcGVydHlOYW1lKSB7XG4gICAgdmFyIG9ic2VydmVyc0xvb2t1cCA9IG9iai5fX29ic2VydmVyc19fO1xuICAgIHZhciBvYnNlcnZlciA9IHZvaWQgMDtcblxuICAgIGlmIChvYnNlcnZlcnNMb29rdXAgJiYgcHJvcGVydHlOYW1lIGluIG9ic2VydmVyc0xvb2t1cCkge1xuICAgICAgcmV0dXJuIG9ic2VydmVyc0xvb2t1cFtwcm9wZXJ0eU5hbWVdO1xuICAgIH1cblxuICAgIG9ic2VydmVyID0gdGhpcy5jcmVhdGVQcm9wZXJ0eU9ic2VydmVyKG9iaiwgcHJvcGVydHlOYW1lKTtcblxuICAgIGlmICghb2JzZXJ2ZXIuZG9Ob3RDYWNoZSkge1xuICAgICAgaWYgKG9ic2VydmVyc0xvb2t1cCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG9ic2VydmVyc0xvb2t1cCA9IHRoaXMuZ2V0T3JDcmVhdGVPYnNlcnZlcnNMb29rdXAob2JqKTtcbiAgICAgIH1cblxuICAgICAgb2JzZXJ2ZXJzTG9va3VwW3Byb3BlcnR5TmFtZV0gPSBvYnNlcnZlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gb2JzZXJ2ZXI7XG4gIH07XG5cbiAgT2JzZXJ2ZXJMb2NhdG9yLnByb3RvdHlwZS5nZXRPckNyZWF0ZU9ic2VydmVyc0xvb2t1cCA9IGZ1bmN0aW9uIGdldE9yQ3JlYXRlT2JzZXJ2ZXJzTG9va3VwKG9iaikge1xuICAgIHJldHVybiBvYmouX19vYnNlcnZlcnNfXyB8fCB0aGlzLmNyZWF0ZU9ic2VydmVyc0xvb2t1cChvYmopO1xuICB9O1xuXG4gIE9ic2VydmVyTG9jYXRvci5wcm90b3R5cGUuY3JlYXRlT2JzZXJ2ZXJzTG9va3VwID0gZnVuY3Rpb24gY3JlYXRlT2JzZXJ2ZXJzTG9va3VwKG9iaikge1xuICAgIHZhciB2YWx1ZSA9IHt9O1xuXG4gICAgaWYgKCFSZWZsZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgJ19fb2JzZXJ2ZXJzX18nLCB7XG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICB2YWx1ZTogdmFsdWVcbiAgICB9KSkge1xuICAgICAgdGhpcy5sb2dnZXIud2FybignQ2Fubm90IGFkZCBvYnNlcnZlcnMgdG8gb2JqZWN0Jywgb2JqKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG5cbiAgT2JzZXJ2ZXJMb2NhdG9yLnByb3RvdHlwZS5hZGRBZGFwdGVyID0gZnVuY3Rpb24gYWRkQWRhcHRlcihhZGFwdGVyKSB7XG4gICAgdGhpcy5hZGFwdGVycy5wdXNoKGFkYXB0ZXIpO1xuICB9O1xuXG4gIE9ic2VydmVyTG9jYXRvci5wcm90b3R5cGUuZ2V0QWRhcHRlck9ic2VydmVyID0gZnVuY3Rpb24gZ2V0QWRhcHRlck9ic2VydmVyKG9iaiwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdGhpcy5hZGFwdGVycy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICB2YXIgYWRhcHRlciA9IHRoaXMuYWRhcHRlcnNbaV07XG4gICAgICB2YXIgb2JzZXJ2ZXIgPSBhZGFwdGVyLmdldE9ic2VydmVyKG9iaiwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTtcbiAgICAgIGlmIChvYnNlcnZlcikge1xuICAgICAgICByZXR1cm4gb2JzZXJ2ZXI7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIE9ic2VydmVyTG9jYXRvci5wcm90b3R5cGUuY3JlYXRlUHJvcGVydHlPYnNlcnZlciA9IGZ1bmN0aW9uIGNyZWF0ZVByb3BlcnR5T2JzZXJ2ZXIob2JqLCBwcm9wZXJ0eU5hbWUpIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IHZvaWQgMDtcbiAgICB2YXIgaGFuZGxlciA9IHZvaWQgMDtcbiAgICB2YXIgeGxpbmtSZXN1bHQgPSB2b2lkIDA7XG5cbiAgICBpZiAoIShvYmogaW5zdGFuY2VvZiBPYmplY3QpKSB7XG4gICAgICByZXR1cm4gbmV3IFByaW1pdGl2ZU9ic2VydmVyKG9iaiwgcHJvcGVydHlOYW1lKTtcbiAgICB9XG5cbiAgICBpZiAob2JqIGluc3RhbmNlb2YgRE9NLkVsZW1lbnQpIHtcbiAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT09ICdjbGFzcycpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDbGFzc09ic2VydmVyKG9iaik7XG4gICAgICB9XG4gICAgICBpZiAocHJvcGVydHlOYW1lID09PSAnc3R5bGUnIHx8IHByb3BlcnR5TmFtZSA9PT0gJ2NzcycpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTdHlsZU9ic2VydmVyKG9iaiwgcHJvcGVydHlOYW1lKTtcbiAgICAgIH1cbiAgICAgIGhhbmRsZXIgPSB0aGlzLmV2ZW50TWFuYWdlci5nZXRFbGVtZW50SGFuZGxlcihvYmosIHByb3BlcnR5TmFtZSk7XG4gICAgICBpZiAocHJvcGVydHlOYW1lID09PSAndmFsdWUnICYmIG9iai50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdzZWxlY3QnKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2VsZWN0VmFsdWVPYnNlcnZlcihvYmosIGhhbmRsZXIsIHRoaXMpO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PT0gJ2NoZWNrZWQnICYmIG9iai50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdpbnB1dCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDaGVja2VkT2JzZXJ2ZXIob2JqLCBoYW5kbGVyLCB0aGlzKTtcbiAgICAgIH1cbiAgICAgIGlmIChoYW5kbGVyKSB7XG4gICAgICAgIHJldHVybiBuZXcgVmFsdWVBdHRyaWJ1dGVPYnNlcnZlcihvYmosIHByb3BlcnR5TmFtZSwgaGFuZGxlcik7XG4gICAgICB9XG4gICAgICB4bGlua1Jlc3VsdCA9IC9eeGxpbms6KC4rKSQvLmV4ZWMocHJvcGVydHlOYW1lKTtcbiAgICAgIGlmICh4bGlua1Jlc3VsdCkge1xuICAgICAgICByZXR1cm4gbmV3IFhMaW5rQXR0cmlidXRlT2JzZXJ2ZXIob2JqLCBwcm9wZXJ0eU5hbWUsIHhsaW5rUmVzdWx0WzFdKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT09ICdyb2xlJyAmJiAob2JqIGluc3RhbmNlb2YgRE9NLkVsZW1lbnQgfHwgb2JqIGluc3RhbmNlb2YgRE9NLlNWR0VsZW1lbnQpIHx8IC9eXFx3Kzp8XmRhdGEtfF5hcmlhLS8udGVzdChwcm9wZXJ0eU5hbWUpIHx8IG9iaiBpbnN0YW5jZW9mIERPTS5TVkdFbGVtZW50ICYmIHRoaXMuc3ZnQW5hbHl6ZXIuaXNTdGFuZGFyZFN2Z0F0dHJpYnV0ZShvYmoubm9kZU5hbWUsIHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRhQXR0cmlidXRlT2JzZXJ2ZXIob2JqLCBwcm9wZXJ0eU5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0UHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgcHJvcGVydHlOYW1lKTtcblxuICAgIGlmIChoYXNEZWNsYXJlZERlcGVuZGVuY2llcyhkZXNjcmlwdG9yKSkge1xuICAgICAgcmV0dXJuIGNyZWF0ZUNvbXB1dGVkT2JzZXJ2ZXIob2JqLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRoaXMpO1xuICAgIH1cblxuICAgIGlmIChkZXNjcmlwdG9yKSB7XG4gICAgICB2YXIgZXhpc3RpbmdHZXR0ZXJPclNldHRlciA9IGRlc2NyaXB0b3IuZ2V0IHx8IGRlc2NyaXB0b3Iuc2V0O1xuICAgICAgaWYgKGV4aXN0aW5nR2V0dGVyT3JTZXR0ZXIpIHtcbiAgICAgICAgaWYgKGV4aXN0aW5nR2V0dGVyT3JTZXR0ZXIuZ2V0T2JzZXJ2ZXIpIHtcbiAgICAgICAgICByZXR1cm4gZXhpc3RpbmdHZXR0ZXJPclNldHRlci5nZXRPYnNlcnZlcihvYmopO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGFkYXB0ZXJPYnNlcnZlciA9IHRoaXMuZ2V0QWRhcHRlck9ic2VydmVyKG9iaiwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTtcbiAgICAgICAgaWYgKGFkYXB0ZXJPYnNlcnZlcikge1xuICAgICAgICAgIHJldHVybiBhZGFwdGVyT2JzZXJ2ZXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBEaXJ0eUNoZWNrUHJvcGVydHkodGhpcy5kaXJ0eUNoZWNrZXIsIG9iaiwgcHJvcGVydHlOYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob2JqIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT09ICdsZW5ndGgnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEFycmF5T2JzZXJ2ZXIob2JqKS5nZXRMZW5ndGhPYnNlcnZlcigpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IERpcnR5Q2hlY2tQcm9wZXJ0eSh0aGlzLmRpcnR5Q2hlY2tlciwgb2JqLCBwcm9wZXJ0eU5hbWUpO1xuICAgIH0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICBpZiAocHJvcGVydHlOYW1lID09PSAnc2l6ZScpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWFwT2JzZXJ2ZXIob2JqKS5nZXRMZW5ndGhPYnNlcnZlcigpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IERpcnR5Q2hlY2tQcm9wZXJ0eSh0aGlzLmRpcnR5Q2hlY2tlciwgb2JqLCBwcm9wZXJ0eU5hbWUpO1xuICAgIH0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgICBpZiAocHJvcGVydHlOYW1lID09PSAnc2l6ZScpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2V0T2JzZXJ2ZXIob2JqKS5nZXRMZW5ndGhPYnNlcnZlcigpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IERpcnR5Q2hlY2tQcm9wZXJ0eSh0aGlzLmRpcnR5Q2hlY2tlciwgb2JqLCBwcm9wZXJ0eU5hbWUpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgU2V0dGVyT2JzZXJ2ZXIodGhpcy50YXNrUXVldWUsIG9iaiwgcHJvcGVydHlOYW1lKTtcbiAgfTtcblxuICBPYnNlcnZlckxvY2F0b3IucHJvdG90eXBlLmdldEFjY2Vzc29yID0gZnVuY3Rpb24gZ2V0QWNjZXNzb3Iob2JqLCBwcm9wZXJ0eU5hbWUpIHtcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgRE9NLkVsZW1lbnQpIHtcbiAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT09ICdjbGFzcycgfHwgcHJvcGVydHlOYW1lID09PSAnc3R5bGUnIHx8IHByb3BlcnR5TmFtZSA9PT0gJ2NzcycgfHwgcHJvcGVydHlOYW1lID09PSAndmFsdWUnICYmIChvYmoudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaW5wdXQnIHx8IG9iai50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdzZWxlY3QnKSB8fCBwcm9wZXJ0eU5hbWUgPT09ICdjaGVja2VkJyAmJiBvYmoudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaW5wdXQnIHx8IHByb3BlcnR5TmFtZSA9PT0gJ21vZGVsJyAmJiBvYmoudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaW5wdXQnIHx8IC9eeGxpbms6LiskLy5leGVjKHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T2JzZXJ2ZXIob2JqLCBwcm9wZXJ0eU5hbWUpO1xuICAgICAgfVxuICAgICAgaWYgKC9eXFx3Kzp8XmRhdGEtfF5hcmlhLS8udGVzdChwcm9wZXJ0eU5hbWUpIHx8IG9iaiBpbnN0YW5jZW9mIERPTS5TVkdFbGVtZW50ICYmIHRoaXMuc3ZnQW5hbHl6ZXIuaXNTdGFuZGFyZFN2Z0F0dHJpYnV0ZShvYmoubm9kZU5hbWUsIHByb3BlcnR5TmFtZSkgfHwgb2JqLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2ltZycgJiYgcHJvcGVydHlOYW1lID09PSAnc3JjJyB8fCBvYmoudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnYScgJiYgcHJvcGVydHlOYW1lID09PSAnaHJlZicpIHtcbiAgICAgICAgcmV0dXJuIGRhdGFBdHRyaWJ1dGVBY2Nlc3NvcjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByb3BlcnR5QWNjZXNzb3I7XG4gIH07XG5cbiAgT2JzZXJ2ZXJMb2NhdG9yLnByb3RvdHlwZS5nZXRBcnJheU9ic2VydmVyID0gZnVuY3Rpb24gZ2V0QXJyYXlPYnNlcnZlcihhcnJheSkge1xuICAgIHJldHVybiBfZ2V0QXJyYXlPYnNlcnZlcih0aGlzLnRhc2tRdWV1ZSwgYXJyYXkpO1xuICB9O1xuXG4gIE9ic2VydmVyTG9jYXRvci5wcm90b3R5cGUuZ2V0TWFwT2JzZXJ2ZXIgPSBmdW5jdGlvbiBnZXRNYXBPYnNlcnZlcihtYXApIHtcbiAgICByZXR1cm4gX2dldE1hcE9ic2VydmVyKHRoaXMudGFza1F1ZXVlLCBtYXApO1xuICB9O1xuXG4gIE9ic2VydmVyTG9jYXRvci5wcm90b3R5cGUuZ2V0U2V0T2JzZXJ2ZXIgPSBmdW5jdGlvbiBnZXRTZXRPYnNlcnZlcihzZXQpIHtcbiAgICByZXR1cm4gX2dldFNldE9ic2VydmVyKHRoaXMudGFza1F1ZXVlLCBzZXQpO1xuICB9O1xuXG4gIHJldHVybiBPYnNlcnZlckxvY2F0b3I7XG59KCksIF9jbGFzczEyLmluamVjdCA9IFtUYXNrUXVldWUsIEV2ZW50TWFuYWdlciwgRGlydHlDaGVja2VyLCBTVkdBbmFseXplciwgUGFyc2VyXSwgX3RlbXApO1xuXG5leHBvcnQgdmFyIE9iamVjdE9ic2VydmF0aW9uQWRhcHRlciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gT2JqZWN0T2JzZXJ2YXRpb25BZGFwdGVyKCkge1xuICAgIFxuICB9XG5cbiAgT2JqZWN0T2JzZXJ2YXRpb25BZGFwdGVyLnByb3RvdHlwZS5nZXRPYnNlcnZlciA9IGZ1bmN0aW9uIGdldE9ic2VydmVyKG9iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdCaW5kaW5nQWRhcHRlcnMgbXVzdCBpbXBsZW1lbnQgZ2V0T2JzZXJ2ZXIob2JqZWN0LCBwcm9wZXJ0eU5hbWUpLicpO1xuICB9O1xuXG4gIHJldHVybiBPYmplY3RPYnNlcnZhdGlvbkFkYXB0ZXI7XG59KCk7XG5cbmV4cG9ydCB2YXIgQmluZGluZ0V4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEJpbmRpbmdFeHByZXNzaW9uKG9ic2VydmVyTG9jYXRvciwgdGFyZ2V0UHJvcGVydHksIHNvdXJjZUV4cHJlc3Npb24sIG1vZGUsIGxvb2t1cEZ1bmN0aW9ucywgYXR0cmlidXRlKSB7XG4gICAgXG5cbiAgICB0aGlzLm9ic2VydmVyTG9jYXRvciA9IG9ic2VydmVyTG9jYXRvcjtcbiAgICB0aGlzLnRhcmdldFByb3BlcnR5ID0gdGFyZ2V0UHJvcGVydHk7XG4gICAgdGhpcy5zb3VyY2VFeHByZXNzaW9uID0gc291cmNlRXhwcmVzc2lvbjtcbiAgICB0aGlzLm1vZGUgPSBtb2RlO1xuICAgIHRoaXMubG9va3VwRnVuY3Rpb25zID0gbG9va3VwRnVuY3Rpb25zO1xuICAgIHRoaXMuYXR0cmlidXRlID0gYXR0cmlidXRlO1xuICAgIHRoaXMuZGlzY3JldGUgPSBmYWxzZTtcbiAgfVxuXG4gIEJpbmRpbmdFeHByZXNzaW9uLnByb3RvdHlwZS5jcmVhdGVCaW5kaW5nID0gZnVuY3Rpb24gY3JlYXRlQmluZGluZyh0YXJnZXQpIHtcbiAgICByZXR1cm4gbmV3IEJpbmRpbmcodGhpcy5vYnNlcnZlckxvY2F0b3IsIHRoaXMuc291cmNlRXhwcmVzc2lvbiwgdGFyZ2V0LCB0aGlzLnRhcmdldFByb3BlcnR5LCB0aGlzLm1vZGUsIHRoaXMubG9va3VwRnVuY3Rpb25zKTtcbiAgfTtcblxuICByZXR1cm4gQmluZGluZ0V4cHJlc3Npb247XG59KCk7XG5cbmV4cG9ydCB2YXIgQmluZGluZyA9IChfZGVjMTAgPSBjb25uZWN0YWJsZSgpLCBfZGVjMTAoX2NsYXNzMTMgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEJpbmRpbmcob2JzZXJ2ZXJMb2NhdG9yLCBzb3VyY2VFeHByZXNzaW9uLCB0YXJnZXQsIHRhcmdldFByb3BlcnR5LCBtb2RlLCBsb29rdXBGdW5jdGlvbnMpIHtcbiAgICBcblxuICAgIHRoaXMub2JzZXJ2ZXJMb2NhdG9yID0gb2JzZXJ2ZXJMb2NhdG9yO1xuICAgIHRoaXMuc291cmNlRXhwcmVzc2lvbiA9IHNvdXJjZUV4cHJlc3Npb247XG4gICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7XG4gICAgdGhpcy50YXJnZXRQcm9wZXJ0eSA9IHRhcmdldFByb3BlcnR5O1xuICAgIHRoaXMubW9kZSA9IG1vZGU7XG4gICAgdGhpcy5sb29rdXBGdW5jdGlvbnMgPSBsb29rdXBGdW5jdGlvbnM7XG4gIH1cblxuICBCaW5kaW5nLnByb3RvdHlwZS51cGRhdGVUYXJnZXQgPSBmdW5jdGlvbiB1cGRhdGVUYXJnZXQodmFsdWUpIHtcbiAgICB0aGlzLnRhcmdldE9ic2VydmVyLnNldFZhbHVlKHZhbHVlLCB0aGlzLnRhcmdldCwgdGhpcy50YXJnZXRQcm9wZXJ0eSk7XG4gIH07XG5cbiAgQmluZGluZy5wcm90b3R5cGUudXBkYXRlU291cmNlID0gZnVuY3Rpb24gdXBkYXRlU291cmNlKHZhbHVlKSB7XG4gICAgdGhpcy5zb3VyY2VFeHByZXNzaW9uLmFzc2lnbih0aGlzLnNvdXJjZSwgdmFsdWUsIHRoaXMubG9va3VwRnVuY3Rpb25zKTtcbiAgfTtcblxuICBCaW5kaW5nLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gY2FsbChjb250ZXh0LCBuZXdWYWx1ZSwgb2xkVmFsdWUpIHtcbiAgICBpZiAoIXRoaXMuaXNCb3VuZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoY29udGV4dCA9PT0gc291cmNlQ29udGV4dCkge1xuICAgICAgb2xkVmFsdWUgPSB0aGlzLnRhcmdldE9ic2VydmVyLmdldFZhbHVlKHRoaXMudGFyZ2V0LCB0aGlzLnRhcmdldFByb3BlcnR5KTtcbiAgICAgIG5ld1ZhbHVlID0gdGhpcy5zb3VyY2VFeHByZXNzaW9uLmV2YWx1YXRlKHRoaXMuc291cmNlLCB0aGlzLmxvb2t1cEZ1bmN0aW9ucyk7XG4gICAgICBpZiAobmV3VmFsdWUgIT09IG9sZFZhbHVlKSB7XG4gICAgICAgIHRoaXMudXBkYXRlVGFyZ2V0KG5ld1ZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm1vZGUgIT09IGJpbmRpbmdNb2RlLm9uZVRpbWUpIHtcbiAgICAgICAgdGhpcy5fdmVyc2lvbisrO1xuICAgICAgICB0aGlzLnNvdXJjZUV4cHJlc3Npb24uY29ubmVjdCh0aGlzLCB0aGlzLnNvdXJjZSk7XG4gICAgICAgIHRoaXMudW5vYnNlcnZlKGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGNvbnRleHQgPT09IHRhcmdldENvbnRleHQpIHtcbiAgICAgIGlmIChuZXdWYWx1ZSAhPT0gdGhpcy5zb3VyY2VFeHByZXNzaW9uLmV2YWx1YXRlKHRoaXMuc291cmNlLCB0aGlzLmxvb2t1cEZ1bmN0aW9ucykpIHtcbiAgICAgICAgdGhpcy51cGRhdGVTb3VyY2UobmV3VmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgY2FsbCBjb250ZXh0ICcgKyBjb250ZXh0KTtcbiAgfTtcblxuICBCaW5kaW5nLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gYmluZChzb3VyY2UpIHtcbiAgICBpZiAodGhpcy5pc0JvdW5kKSB7XG4gICAgICBpZiAodGhpcy5zb3VyY2UgPT09IHNvdXJjZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnVuYmluZCgpO1xuICAgIH1cbiAgICB0aGlzLmlzQm91bmQgPSB0cnVlO1xuICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuXG4gICAgaWYgKHRoaXMuc291cmNlRXhwcmVzc2lvbi5iaW5kKSB7XG4gICAgICB0aGlzLnNvdXJjZUV4cHJlc3Npb24uYmluZCh0aGlzLCBzb3VyY2UsIHRoaXMubG9va3VwRnVuY3Rpb25zKTtcbiAgICB9XG5cbiAgICB2YXIgbW9kZSA9IHRoaXMubW9kZTtcbiAgICBpZiAoIXRoaXMudGFyZ2V0T2JzZXJ2ZXIpIHtcbiAgICAgIHZhciBtZXRob2QgPSBtb2RlID09PSBiaW5kaW5nTW9kZS50d29XYXkgfHwgbW9kZSA9PT0gYmluZGluZ01vZGUuZnJvbVZpZXcgPyAnZ2V0T2JzZXJ2ZXInIDogJ2dldEFjY2Vzc29yJztcbiAgICAgIHRoaXMudGFyZ2V0T2JzZXJ2ZXIgPSB0aGlzLm9ic2VydmVyTG9jYXRvclttZXRob2RdKHRoaXMudGFyZ2V0LCB0aGlzLnRhcmdldFByb3BlcnR5KTtcbiAgICB9XG5cbiAgICBpZiAoJ2JpbmQnIGluIHRoaXMudGFyZ2V0T2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMudGFyZ2V0T2JzZXJ2ZXIuYmluZCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5tb2RlICE9PSBiaW5kaW5nTW9kZS5mcm9tVmlldykge1xuICAgICAgdmFyIHZhbHVlID0gdGhpcy5zb3VyY2VFeHByZXNzaW9uLmV2YWx1YXRlKHNvdXJjZSwgdGhpcy5sb29rdXBGdW5jdGlvbnMpO1xuICAgICAgdGhpcy51cGRhdGVUYXJnZXQodmFsdWUpO1xuICAgIH1cblxuICAgIGlmIChtb2RlID09PSBiaW5kaW5nTW9kZS5vbmVUaW1lKSB7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChtb2RlID09PSBiaW5kaW5nTW9kZS50b1ZpZXcpIHtcbiAgICAgIGVucXVldWVCaW5kaW5nQ29ubmVjdCh0aGlzKTtcbiAgICB9IGVsc2UgaWYgKG1vZGUgPT09IGJpbmRpbmdNb2RlLnR3b1dheSkge1xuICAgICAgdGhpcy5zb3VyY2VFeHByZXNzaW9uLmNvbm5lY3QodGhpcywgc291cmNlKTtcbiAgICAgIHRoaXMudGFyZ2V0T2JzZXJ2ZXIuc3Vic2NyaWJlKHRhcmdldENvbnRleHQsIHRoaXMpO1xuICAgIH0gZWxzZSBpZiAobW9kZSA9PT0gYmluZGluZ01vZGUuZnJvbVZpZXcpIHtcbiAgICAgIHRoaXMudGFyZ2V0T2JzZXJ2ZXIuc3Vic2NyaWJlKHRhcmdldENvbnRleHQsIHRoaXMpO1xuICAgIH1cbiAgfTtcblxuICBCaW5kaW5nLnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbiB1bmJpbmQoKSB7XG4gICAgaWYgKCF0aGlzLmlzQm91bmQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pc0JvdW5kID0gZmFsc2U7XG4gICAgaWYgKHRoaXMuc291cmNlRXhwcmVzc2lvbi51bmJpbmQpIHtcbiAgICAgIHRoaXMuc291cmNlRXhwcmVzc2lvbi51bmJpbmQodGhpcywgdGhpcy5zb3VyY2UpO1xuICAgIH1cbiAgICB0aGlzLnNvdXJjZSA9IG51bGw7XG4gICAgaWYgKCd1bmJpbmQnIGluIHRoaXMudGFyZ2V0T2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMudGFyZ2V0T2JzZXJ2ZXIudW5iaW5kKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRhcmdldE9ic2VydmVyLnVuc3Vic2NyaWJlKSB7XG4gICAgICB0aGlzLnRhcmdldE9ic2VydmVyLnVuc3Vic2NyaWJlKHRhcmdldENvbnRleHQsIHRoaXMpO1xuICAgIH1cbiAgICB0aGlzLnVub2JzZXJ2ZSh0cnVlKTtcbiAgfTtcblxuICBCaW5kaW5nLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24gY29ubmVjdChldmFsdWF0ZSkge1xuICAgIGlmICghdGhpcy5pc0JvdW5kKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChldmFsdWF0ZSkge1xuICAgICAgdmFyIHZhbHVlID0gdGhpcy5zb3VyY2VFeHByZXNzaW9uLmV2YWx1YXRlKHRoaXMuc291cmNlLCB0aGlzLmxvb2t1cEZ1bmN0aW9ucyk7XG4gICAgICB0aGlzLnVwZGF0ZVRhcmdldCh2YWx1ZSk7XG4gICAgfVxuICAgIHRoaXMuc291cmNlRXhwcmVzc2lvbi5jb25uZWN0KHRoaXMsIHRoaXMuc291cmNlKTtcbiAgfTtcblxuICByZXR1cm4gQmluZGluZztcbn0oKSkgfHwgX2NsYXNzMTMpO1xuXG5leHBvcnQgdmFyIENhbGxFeHByZXNzaW9uID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBDYWxsRXhwcmVzc2lvbihvYnNlcnZlckxvY2F0b3IsIHRhcmdldFByb3BlcnR5LCBzb3VyY2VFeHByZXNzaW9uLCBsb29rdXBGdW5jdGlvbnMpIHtcbiAgICBcblxuICAgIHRoaXMub2JzZXJ2ZXJMb2NhdG9yID0gb2JzZXJ2ZXJMb2NhdG9yO1xuICAgIHRoaXMudGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRQcm9wZXJ0eTtcbiAgICB0aGlzLnNvdXJjZUV4cHJlc3Npb24gPSBzb3VyY2VFeHByZXNzaW9uO1xuICAgIHRoaXMubG9va3VwRnVuY3Rpb25zID0gbG9va3VwRnVuY3Rpb25zO1xuICB9XG5cbiAgQ2FsbEV4cHJlc3Npb24ucHJvdG90eXBlLmNyZWF0ZUJpbmRpbmcgPSBmdW5jdGlvbiBjcmVhdGVCaW5kaW5nKHRhcmdldCkge1xuICAgIHJldHVybiBuZXcgQ2FsbCh0aGlzLm9ic2VydmVyTG9jYXRvciwgdGhpcy5zb3VyY2VFeHByZXNzaW9uLCB0YXJnZXQsIHRoaXMudGFyZ2V0UHJvcGVydHksIHRoaXMubG9va3VwRnVuY3Rpb25zKTtcbiAgfTtcblxuICByZXR1cm4gQ2FsbEV4cHJlc3Npb247XG59KCk7XG5cbmV4cG9ydCB2YXIgQ2FsbCA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQ2FsbChvYnNlcnZlckxvY2F0b3IsIHNvdXJjZUV4cHJlc3Npb24sIHRhcmdldCwgdGFyZ2V0UHJvcGVydHksIGxvb2t1cEZ1bmN0aW9ucykge1xuICAgIFxuXG4gICAgdGhpcy5zb3VyY2VFeHByZXNzaW9uID0gc291cmNlRXhwcmVzc2lvbjtcbiAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgICB0aGlzLnRhcmdldFByb3BlcnR5ID0gb2JzZXJ2ZXJMb2NhdG9yLmdldE9ic2VydmVyKHRhcmdldCwgdGFyZ2V0UHJvcGVydHkpO1xuICAgIHRoaXMubG9va3VwRnVuY3Rpb25zID0gbG9va3VwRnVuY3Rpb25zO1xuICB9XG5cbiAgQ2FsbC5wcm90b3R5cGUuY2FsbFNvdXJjZSA9IGZ1bmN0aW9uIGNhbGxTb3VyY2UoJGV2ZW50KSB7XG4gICAgdmFyIG92ZXJyaWRlQ29udGV4dCA9IHRoaXMuc291cmNlLm92ZXJyaWRlQ29udGV4dDtcbiAgICBPYmplY3QuYXNzaWduKG92ZXJyaWRlQ29udGV4dCwgJGV2ZW50KTtcbiAgICBvdmVycmlkZUNvbnRleHQuJGV2ZW50ID0gJGV2ZW50O1xuICAgIHZhciBtdXN0RXZhbHVhdGUgPSB0cnVlO1xuICAgIHZhciByZXN1bHQgPSB0aGlzLnNvdXJjZUV4cHJlc3Npb24uZXZhbHVhdGUodGhpcy5zb3VyY2UsIHRoaXMubG9va3VwRnVuY3Rpb25zLCBtdXN0RXZhbHVhdGUpO1xuICAgIGRlbGV0ZSBvdmVycmlkZUNvbnRleHQuJGV2ZW50O1xuICAgIGZvciAodmFyIHByb3AgaW4gJGV2ZW50KSB7XG4gICAgICBkZWxldGUgb3ZlcnJpZGVDb250ZXh0W3Byb3BdO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIENhbGwucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiBiaW5kKHNvdXJjZSkge1xuICAgIHZhciBfdGhpczI2ID0gdGhpcztcblxuICAgIGlmICh0aGlzLmlzQm91bmQpIHtcbiAgICAgIGlmICh0aGlzLnNvdXJjZSA9PT0gc291cmNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMudW5iaW5kKCk7XG4gICAgfVxuICAgIHRoaXMuaXNCb3VuZCA9IHRydWU7XG4gICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG5cbiAgICBpZiAodGhpcy5zb3VyY2VFeHByZXNzaW9uLmJpbmQpIHtcbiAgICAgIHRoaXMuc291cmNlRXhwcmVzc2lvbi5iaW5kKHRoaXMsIHNvdXJjZSwgdGhpcy5sb29rdXBGdW5jdGlvbnMpO1xuICAgIH1cbiAgICB0aGlzLnRhcmdldFByb3BlcnR5LnNldFZhbHVlKGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgIHJldHVybiBfdGhpczI2LmNhbGxTb3VyY2UoJGV2ZW50KTtcbiAgICB9KTtcbiAgfTtcblxuICBDYWxsLnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbiB1bmJpbmQoKSB7XG4gICAgaWYgKCF0aGlzLmlzQm91bmQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pc0JvdW5kID0gZmFsc2U7XG4gICAgaWYgKHRoaXMuc291cmNlRXhwcmVzc2lvbi51bmJpbmQpIHtcbiAgICAgIHRoaXMuc291cmNlRXhwcmVzc2lvbi51bmJpbmQodGhpcywgdGhpcy5zb3VyY2UpO1xuICAgIH1cbiAgICB0aGlzLnNvdXJjZSA9IG51bGw7XG4gICAgdGhpcy50YXJnZXRQcm9wZXJ0eS5zZXRWYWx1ZShudWxsKTtcbiAgfTtcblxuICByZXR1cm4gQ2FsbDtcbn0oKTtcblxuZXhwb3J0IHZhciBWYWx1ZUNvbnZlcnRlclJlc291cmNlID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBWYWx1ZUNvbnZlcnRlclJlc291cmNlKG5hbWUpIHtcbiAgICBcblxuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gIH1cblxuICBWYWx1ZUNvbnZlcnRlclJlc291cmNlLmNvbnZlbnRpb24gPSBmdW5jdGlvbiBjb252ZW50aW9uKG5hbWUpIHtcbiAgICBpZiAobmFtZS5lbmRzV2l0aCgnVmFsdWVDb252ZXJ0ZXInKSkge1xuICAgICAgcmV0dXJuIG5ldyBWYWx1ZUNvbnZlcnRlclJlc291cmNlKGNhbWVsQ2FzZShuYW1lLnN1YnN0cmluZygwLCBuYW1lLmxlbmd0aCAtIDE0KSkpO1xuICAgIH1cbiAgfTtcblxuICBWYWx1ZUNvbnZlcnRlclJlc291cmNlLnByb3RvdHlwZS5pbml0aWFsaXplID0gZnVuY3Rpb24gaW5pdGlhbGl6ZShjb250YWluZXIsIHRhcmdldCkge1xuICAgIHRoaXMuaW5zdGFuY2UgPSBjb250YWluZXIuZ2V0KHRhcmdldCk7XG4gIH07XG5cbiAgVmFsdWVDb252ZXJ0ZXJSZXNvdXJjZS5wcm90b3R5cGUucmVnaXN0ZXIgPSBmdW5jdGlvbiByZWdpc3RlcihyZWdpc3RyeSwgbmFtZSkge1xuICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyVmFsdWVDb252ZXJ0ZXIobmFtZSB8fCB0aGlzLm5hbWUsIHRoaXMuaW5zdGFuY2UpO1xuICB9O1xuXG4gIFZhbHVlQ29udmVydGVyUmVzb3VyY2UucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiBsb2FkKGNvbnRhaW5lciwgdGFyZ2V0KSB7fTtcblxuICByZXR1cm4gVmFsdWVDb252ZXJ0ZXJSZXNvdXJjZTtcbn0oKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlQ29udmVydGVyKG5hbWVPclRhcmdldCkge1xuICBpZiAobmFtZU9yVGFyZ2V0ID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIG5hbWVPclRhcmdldCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCkge1xuICAgICAgbWV0YWRhdGEuZGVmaW5lKG1ldGFkYXRhLnJlc291cmNlLCBuZXcgVmFsdWVDb252ZXJ0ZXJSZXNvdXJjZShuYW1lT3JUYXJnZXQpLCB0YXJnZXQpO1xuICAgIH07XG4gIH1cblxuICBtZXRhZGF0YS5kZWZpbmUobWV0YWRhdGEucmVzb3VyY2UsIG5ldyBWYWx1ZUNvbnZlcnRlclJlc291cmNlKCksIG5hbWVPclRhcmdldCk7XG59XG5cbmV4cG9ydCB2YXIgQmluZGluZ0JlaGF2aW9yUmVzb3VyY2UgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEJpbmRpbmdCZWhhdmlvclJlc291cmNlKG5hbWUpIHtcbiAgICBcblxuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gIH1cblxuICBCaW5kaW5nQmVoYXZpb3JSZXNvdXJjZS5jb252ZW50aW9uID0gZnVuY3Rpb24gY29udmVudGlvbihuYW1lKSB7XG4gICAgaWYgKG5hbWUuZW5kc1dpdGgoJ0JpbmRpbmdCZWhhdmlvcicpKSB7XG4gICAgICByZXR1cm4gbmV3IEJpbmRpbmdCZWhhdmlvclJlc291cmNlKGNhbWVsQ2FzZShuYW1lLnN1YnN0cmluZygwLCBuYW1lLmxlbmd0aCAtIDE1KSkpO1xuICAgIH1cbiAgfTtcblxuICBCaW5kaW5nQmVoYXZpb3JSZXNvdXJjZS5wcm90b3R5cGUuaW5pdGlhbGl6ZSA9IGZ1bmN0aW9uIGluaXRpYWxpemUoY29udGFpbmVyLCB0YXJnZXQpIHtcbiAgICB0aGlzLmluc3RhbmNlID0gY29udGFpbmVyLmdldCh0YXJnZXQpO1xuICB9O1xuXG4gIEJpbmRpbmdCZWhhdmlvclJlc291cmNlLnByb3RvdHlwZS5yZWdpc3RlciA9IGZ1bmN0aW9uIHJlZ2lzdGVyKHJlZ2lzdHJ5LCBuYW1lKSB7XG4gICAgcmVnaXN0cnkucmVnaXN0ZXJCaW5kaW5nQmVoYXZpb3IobmFtZSB8fCB0aGlzLm5hbWUsIHRoaXMuaW5zdGFuY2UpO1xuICB9O1xuXG4gIEJpbmRpbmdCZWhhdmlvclJlc291cmNlLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gbG9hZChjb250YWluZXIsIHRhcmdldCkge307XG5cbiAgcmV0dXJuIEJpbmRpbmdCZWhhdmlvclJlc291cmNlO1xufSgpO1xuXG5leHBvcnQgZnVuY3Rpb24gYmluZGluZ0JlaGF2aW9yKG5hbWVPclRhcmdldCkge1xuICBpZiAobmFtZU9yVGFyZ2V0ID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIG5hbWVPclRhcmdldCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCkge1xuICAgICAgbWV0YWRhdGEuZGVmaW5lKG1ldGFkYXRhLnJlc291cmNlLCBuZXcgQmluZGluZ0JlaGF2aW9yUmVzb3VyY2UobmFtZU9yVGFyZ2V0KSwgdGFyZ2V0KTtcbiAgICB9O1xuICB9XG5cbiAgbWV0YWRhdGEuZGVmaW5lKG1ldGFkYXRhLnJlc291cmNlLCBuZXcgQmluZGluZ0JlaGF2aW9yUmVzb3VyY2UoKSwgbmFtZU9yVGFyZ2V0KTtcbn1cblxuZXhwb3J0IHZhciBMaXN0ZW5lckV4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIExpc3RlbmVyRXhwcmVzc2lvbihldmVudE1hbmFnZXIsIHRhcmdldEV2ZW50LCBzb3VyY2VFeHByZXNzaW9uLCBkZWxlZ2F0aW9uU3RyYXRlZ3ksIHByZXZlbnREZWZhdWx0LCBsb29rdXBGdW5jdGlvbnMpIHtcbiAgICBcblxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyID0gZXZlbnRNYW5hZ2VyO1xuICAgIHRoaXMudGFyZ2V0RXZlbnQgPSB0YXJnZXRFdmVudDtcbiAgICB0aGlzLnNvdXJjZUV4cHJlc3Npb24gPSBzb3VyY2VFeHByZXNzaW9uO1xuICAgIHRoaXMuZGVsZWdhdGlvblN0cmF0ZWd5ID0gZGVsZWdhdGlvblN0cmF0ZWd5O1xuICAgIHRoaXMuZGlzY3JldGUgPSB0cnVlO1xuICAgIHRoaXMucHJldmVudERlZmF1bHQgPSBwcmV2ZW50RGVmYXVsdDtcbiAgICB0aGlzLmxvb2t1cEZ1bmN0aW9ucyA9IGxvb2t1cEZ1bmN0aW9ucztcbiAgfVxuXG4gIExpc3RlbmVyRXhwcmVzc2lvbi5wcm90b3R5cGUuY3JlYXRlQmluZGluZyA9IGZ1bmN0aW9uIGNyZWF0ZUJpbmRpbmcodGFyZ2V0KSB7XG4gICAgcmV0dXJuIG5ldyBMaXN0ZW5lcih0aGlzLmV2ZW50TWFuYWdlciwgdGhpcy50YXJnZXRFdmVudCwgdGhpcy5kZWxlZ2F0aW9uU3RyYXRlZ3ksIHRoaXMuc291cmNlRXhwcmVzc2lvbiwgdGFyZ2V0LCB0aGlzLnByZXZlbnREZWZhdWx0LCB0aGlzLmxvb2t1cEZ1bmN0aW9ucyk7XG4gIH07XG5cbiAgcmV0dXJuIExpc3RlbmVyRXhwcmVzc2lvbjtcbn0oKTtcblxuZXhwb3J0IHZhciBMaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTGlzdGVuZXIoZXZlbnRNYW5hZ2VyLCB0YXJnZXRFdmVudCwgZGVsZWdhdGlvblN0cmF0ZWd5LCBzb3VyY2VFeHByZXNzaW9uLCB0YXJnZXQsIHByZXZlbnREZWZhdWx0LCBsb29rdXBGdW5jdGlvbnMpIHtcbiAgICBcblxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyID0gZXZlbnRNYW5hZ2VyO1xuICAgIHRoaXMudGFyZ2V0RXZlbnQgPSB0YXJnZXRFdmVudDtcbiAgICB0aGlzLmRlbGVnYXRpb25TdHJhdGVneSA9IGRlbGVnYXRpb25TdHJhdGVneTtcbiAgICB0aGlzLnNvdXJjZUV4cHJlc3Npb24gPSBzb3VyY2VFeHByZXNzaW9uO1xuICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICAgIHRoaXMucHJldmVudERlZmF1bHQgPSBwcmV2ZW50RGVmYXVsdDtcbiAgICB0aGlzLmxvb2t1cEZ1bmN0aW9ucyA9IGxvb2t1cEZ1bmN0aW9ucztcbiAgfVxuXG4gIExpc3RlbmVyLnByb3RvdHlwZS5jYWxsU291cmNlID0gZnVuY3Rpb24gY2FsbFNvdXJjZShldmVudCkge1xuICAgIHZhciBvdmVycmlkZUNvbnRleHQgPSB0aGlzLnNvdXJjZS5vdmVycmlkZUNvbnRleHQ7XG4gICAgb3ZlcnJpZGVDb250ZXh0LiRldmVudCA9IGV2ZW50O1xuICAgIHZhciBtdXN0RXZhbHVhdGUgPSB0cnVlO1xuICAgIHZhciByZXN1bHQgPSB0aGlzLnNvdXJjZUV4cHJlc3Npb24uZXZhbHVhdGUodGhpcy5zb3VyY2UsIHRoaXMubG9va3VwRnVuY3Rpb25zLCBtdXN0RXZhbHVhdGUpO1xuICAgIGRlbGV0ZSBvdmVycmlkZUNvbnRleHQuJGV2ZW50O1xuICAgIGlmIChyZXN1bHQgIT09IHRydWUgJiYgdGhpcy5wcmV2ZW50RGVmYXVsdCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBMaXN0ZW5lci5wcm90b3R5cGUuaGFuZGxlRXZlbnQgPSBmdW5jdGlvbiBoYW5kbGVFdmVudChldmVudCkge1xuICAgIHRoaXMuY2FsbFNvdXJjZShldmVudCk7XG4gIH07XG5cbiAgTGlzdGVuZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiBiaW5kKHNvdXJjZSkge1xuICAgIGlmICh0aGlzLmlzQm91bmQpIHtcbiAgICAgIGlmICh0aGlzLnNvdXJjZSA9PT0gc291cmNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMudW5iaW5kKCk7XG4gICAgfVxuICAgIHRoaXMuaXNCb3VuZCA9IHRydWU7XG4gICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG5cbiAgICBpZiAodGhpcy5zb3VyY2VFeHByZXNzaW9uLmJpbmQpIHtcbiAgICAgIHRoaXMuc291cmNlRXhwcmVzc2lvbi5iaW5kKHRoaXMsIHNvdXJjZSwgdGhpcy5sb29rdXBGdW5jdGlvbnMpO1xuICAgIH1cbiAgICB0aGlzLl9oYW5kbGVyID0gdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLnRhcmdldCwgdGhpcy50YXJnZXRFdmVudCwgdGhpcywgdGhpcy5kZWxlZ2F0aW9uU3RyYXRlZ3ksIHRydWUpO1xuICB9O1xuXG4gIExpc3RlbmVyLnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbiB1bmJpbmQoKSB7XG4gICAgaWYgKCF0aGlzLmlzQm91bmQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pc0JvdW5kID0gZmFsc2U7XG4gICAgaWYgKHRoaXMuc291cmNlRXhwcmVzc2lvbi51bmJpbmQpIHtcbiAgICAgIHRoaXMuc291cmNlRXhwcmVzc2lvbi51bmJpbmQodGhpcywgdGhpcy5zb3VyY2UpO1xuICAgIH1cbiAgICB0aGlzLnNvdXJjZSA9IG51bGw7XG4gICAgdGhpcy5faGFuZGxlci5kaXNwb3NlKCk7XG4gICAgdGhpcy5faGFuZGxlciA9IG51bGw7XG4gIH07XG5cbiAgcmV0dXJuIExpc3RlbmVyO1xufSgpO1xuXG5mdW5jdGlvbiBnZXRBVShlbGVtZW50KSB7XG4gIHZhciBhdSA9IGVsZW1lbnQuYXU7XG5cbiAgaWYgKGF1ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIEF1cmVsaWEgQVBJcyBhcmUgZGVmaW5lZCBmb3IgdGhlIGVsZW1lbnQ6IFwiJyArIGVsZW1lbnQudGFnTmFtZSArICdcIi4nKTtcbiAgfVxuXG4gIHJldHVybiBhdTtcbn1cblxuZXhwb3J0IHZhciBOYW1lRXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTmFtZUV4cHJlc3Npb24oc291cmNlRXhwcmVzc2lvbiwgYXBpTmFtZSwgbG9va3VwRnVuY3Rpb25zKSB7XG4gICAgXG5cbiAgICB0aGlzLnNvdXJjZUV4cHJlc3Npb24gPSBzb3VyY2VFeHByZXNzaW9uO1xuICAgIHRoaXMuYXBpTmFtZSA9IGFwaU5hbWU7XG4gICAgdGhpcy5sb29rdXBGdW5jdGlvbnMgPSBsb29rdXBGdW5jdGlvbnM7XG4gICAgdGhpcy5kaXNjcmV0ZSA9IHRydWU7XG4gIH1cblxuICBOYW1lRXhwcmVzc2lvbi5wcm90b3R5cGUuY3JlYXRlQmluZGluZyA9IGZ1bmN0aW9uIGNyZWF0ZUJpbmRpbmcodGFyZ2V0KSB7XG4gICAgcmV0dXJuIG5ldyBOYW1lQmluZGVyKHRoaXMuc291cmNlRXhwcmVzc2lvbiwgTmFtZUV4cHJlc3Npb24ubG9jYXRlQVBJKHRhcmdldCwgdGhpcy5hcGlOYW1lKSwgdGhpcy5sb29rdXBGdW5jdGlvbnMpO1xuICB9O1xuXG4gIE5hbWVFeHByZXNzaW9uLmxvY2F0ZUFQSSA9IGZ1bmN0aW9uIGxvY2F0ZUFQSShlbGVtZW50LCBhcGlOYW1lKSB7XG4gICAgc3dpdGNoIChhcGlOYW1lKSB7XG4gICAgICBjYXNlICdlbGVtZW50JzpcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICBjYXNlICdjb250cm9sbGVyJzpcbiAgICAgICAgcmV0dXJuIGdldEFVKGVsZW1lbnQpLmNvbnRyb2xsZXI7XG4gICAgICBjYXNlICd2aWV3LW1vZGVsJzpcbiAgICAgICAgcmV0dXJuIGdldEFVKGVsZW1lbnQpLmNvbnRyb2xsZXIudmlld01vZGVsO1xuICAgICAgY2FzZSAndmlldyc6XG4gICAgICAgIHJldHVybiBnZXRBVShlbGVtZW50KS5jb250cm9sbGVyLnZpZXc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB2YXIgdGFyZ2V0ID0gZ2V0QVUoZWxlbWVudClbYXBpTmFtZV07XG5cbiAgICAgICAgaWYgKHRhcmdldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdHRlbXB0ZWQgdG8gcmVmZXJlbmNlIFwiJyArIGFwaU5hbWUgKyAnXCIsIGJ1dCBpdCB3YXMgbm90IGZvdW5kIGFtb25nc3QgdGhlIHRhcmdldFxcJ3MgQVBJLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldC52aWV3TW9kZWw7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBOYW1lRXhwcmVzc2lvbjtcbn0oKTtcblxudmFyIE5hbWVCaW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIE5hbWVCaW5kZXIoc291cmNlRXhwcmVzc2lvbiwgdGFyZ2V0LCBsb29rdXBGdW5jdGlvbnMpIHtcbiAgICBcblxuICAgIHRoaXMuc291cmNlRXhwcmVzc2lvbiA9IHNvdXJjZUV4cHJlc3Npb247XG4gICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7XG4gICAgdGhpcy5sb29rdXBGdW5jdGlvbnMgPSBsb29rdXBGdW5jdGlvbnM7XG4gIH1cblxuICBOYW1lQmluZGVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gYmluZChzb3VyY2UpIHtcbiAgICBpZiAodGhpcy5pc0JvdW5kKSB7XG4gICAgICBpZiAodGhpcy5zb3VyY2UgPT09IHNvdXJjZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnVuYmluZCgpO1xuICAgIH1cbiAgICB0aGlzLmlzQm91bmQgPSB0cnVlO1xuICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuICAgIGlmICh0aGlzLnNvdXJjZUV4cHJlc3Npb24uYmluZCkge1xuICAgICAgdGhpcy5zb3VyY2VFeHByZXNzaW9uLmJpbmQodGhpcywgc291cmNlLCB0aGlzLmxvb2t1cEZ1bmN0aW9ucyk7XG4gICAgfVxuICAgIHRoaXMuc291cmNlRXhwcmVzc2lvbi5hc3NpZ24odGhpcy5zb3VyY2UsIHRoaXMudGFyZ2V0LCB0aGlzLmxvb2t1cEZ1bmN0aW9ucyk7XG4gIH07XG5cbiAgTmFtZUJpbmRlci5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24gdW5iaW5kKCkge1xuICAgIGlmICghdGhpcy5pc0JvdW5kKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaXNCb3VuZCA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnNvdXJjZUV4cHJlc3Npb24uZXZhbHVhdGUodGhpcy5zb3VyY2UsIHRoaXMubG9va3VwRnVuY3Rpb25zKSA9PT0gdGhpcy50YXJnZXQpIHtcbiAgICAgIHRoaXMuc291cmNlRXhwcmVzc2lvbi5hc3NpZ24odGhpcy5zb3VyY2UsIG51bGwsIHRoaXMubG9va3VwRnVuY3Rpb25zKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc291cmNlRXhwcmVzc2lvbi51bmJpbmQpIHtcbiAgICAgIHRoaXMuc291cmNlRXhwcmVzc2lvbi51bmJpbmQodGhpcywgdGhpcy5zb3VyY2UpO1xuICAgIH1cbiAgICB0aGlzLnNvdXJjZSA9IG51bGw7XG4gIH07XG5cbiAgcmV0dXJuIE5hbWVCaW5kZXI7XG59KCk7XG5cbnZhciBMb29rdXBGdW5jdGlvbnMgPSB7XG4gIGJpbmRpbmdCZWhhdmlvcnM6IGZ1bmN0aW9uIGJpbmRpbmdCZWhhdmlvcnMobmFtZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9LFxuICB2YWx1ZUNvbnZlcnRlcnM6IGZ1bmN0aW9uIHZhbHVlQ29udmVydGVycyhuYW1lKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn07XG5cbmV4cG9ydCB2YXIgQmluZGluZ0VuZ2luZSA9IChfdGVtcDIgPSBfY2xhc3MxNCA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQmluZGluZ0VuZ2luZShvYnNlcnZlckxvY2F0b3IsIHBhcnNlcikge1xuICAgIFxuXG4gICAgdGhpcy5vYnNlcnZlckxvY2F0b3IgPSBvYnNlcnZlckxvY2F0b3I7XG4gICAgdGhpcy5wYXJzZXIgPSBwYXJzZXI7XG4gIH1cblxuICBCaW5kaW5nRW5naW5lLnByb3RvdHlwZS5jcmVhdGVCaW5kaW5nRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIGNyZWF0ZUJpbmRpbmdFeHByZXNzaW9uKHRhcmdldFByb3BlcnR5LCBzb3VyY2VFeHByZXNzaW9uKSB7XG4gICAgdmFyIG1vZGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGJpbmRpbmdNb2RlLnRvVmlldztcbiAgICB2YXIgbG9va3VwRnVuY3Rpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiBMb29rdXBGdW5jdGlvbnM7XG5cbiAgICByZXR1cm4gbmV3IEJpbmRpbmdFeHByZXNzaW9uKHRoaXMub2JzZXJ2ZXJMb2NhdG9yLCB0YXJnZXRQcm9wZXJ0eSwgdGhpcy5wYXJzZXIucGFyc2Uoc291cmNlRXhwcmVzc2lvbiksIG1vZGUsIGxvb2t1cEZ1bmN0aW9ucyk7XG4gIH07XG5cbiAgQmluZGluZ0VuZ2luZS5wcm90b3R5cGUucHJvcGVydHlPYnNlcnZlciA9IGZ1bmN0aW9uIHByb3BlcnR5T2JzZXJ2ZXIob2JqLCBwcm9wZXJ0eU5hbWUpIHtcbiAgICB2YXIgX3RoaXMyNyA9IHRoaXM7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3Vic2NyaWJlOiBmdW5jdGlvbiBzdWJzY3JpYmUoY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIG9ic2VydmVyID0gX3RoaXMyNy5vYnNlcnZlckxvY2F0b3IuZ2V0T2JzZXJ2ZXIob2JqLCBwcm9wZXJ0eU5hbWUpO1xuICAgICAgICBvYnNlcnZlci5zdWJzY3JpYmUoY2FsbGJhY2spO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRpc3Bvc2U6IGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JzZXJ2ZXIudW5zdWJzY3JpYmUoY2FsbGJhY2spO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuICB9O1xuXG4gIEJpbmRpbmdFbmdpbmUucHJvdG90eXBlLmNvbGxlY3Rpb25PYnNlcnZlciA9IGZ1bmN0aW9uIGNvbGxlY3Rpb25PYnNlcnZlcihjb2xsZWN0aW9uKSB7XG4gICAgdmFyIF90aGlzMjggPSB0aGlzO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN1YnNjcmliZTogZnVuY3Rpb24gc3Vic2NyaWJlKGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBvYnNlcnZlciA9IHZvaWQgMDtcbiAgICAgICAgaWYgKGNvbGxlY3Rpb24gaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgIG9ic2VydmVyID0gX3RoaXMyOC5vYnNlcnZlckxvY2F0b3IuZ2V0QXJyYXlPYnNlcnZlcihjb2xsZWN0aW9uKTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2xsZWN0aW9uIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgICAgb2JzZXJ2ZXIgPSBfdGhpczI4Lm9ic2VydmVyTG9jYXRvci5nZXRNYXBPYnNlcnZlcihjb2xsZWN0aW9uKTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2xsZWN0aW9uIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgICAgICAgb2JzZXJ2ZXIgPSBfdGhpczI4Lm9ic2VydmVyTG9jYXRvci5nZXRTZXRPYnNlcnZlcihjb2xsZWN0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvbGxlY3Rpb24gbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBBcnJheSwgTWFwIG9yIFNldC4nKTtcbiAgICAgICAgfVxuICAgICAgICBvYnNlcnZlci5zdWJzY3JpYmUoY2FsbGJhY2spO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRpc3Bvc2U6IGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JzZXJ2ZXIudW5zdWJzY3JpYmUoY2FsbGJhY2spO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuICB9O1xuXG4gIEJpbmRpbmdFbmdpbmUucHJvdG90eXBlLmV4cHJlc3Npb25PYnNlcnZlciA9IGZ1bmN0aW9uIGV4cHJlc3Npb25PYnNlcnZlcihiaW5kaW5nQ29udGV4dCwgZXhwcmVzc2lvbikge1xuICAgIHZhciBzY29wZSA9IHsgYmluZGluZ0NvbnRleHQ6IGJpbmRpbmdDb250ZXh0LCBvdmVycmlkZUNvbnRleHQ6IGNyZWF0ZU92ZXJyaWRlQ29udGV4dChiaW5kaW5nQ29udGV4dCkgfTtcbiAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25PYnNlcnZlcihzY29wZSwgdGhpcy5wYXJzZXIucGFyc2UoZXhwcmVzc2lvbiksIHRoaXMub2JzZXJ2ZXJMb2NhdG9yLCBMb29rdXBGdW5jdGlvbnMpO1xuICB9O1xuXG4gIEJpbmRpbmdFbmdpbmUucHJvdG90eXBlLnBhcnNlRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIHBhcnNlRXhwcmVzc2lvbihleHByZXNzaW9uKSB7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VyLnBhcnNlKGV4cHJlc3Npb24pO1xuICB9O1xuXG4gIEJpbmRpbmdFbmdpbmUucHJvdG90eXBlLnJlZ2lzdGVyQWRhcHRlciA9IGZ1bmN0aW9uIHJlZ2lzdGVyQWRhcHRlcihhZGFwdGVyKSB7XG4gICAgdGhpcy5vYnNlcnZlckxvY2F0b3IuYWRkQWRhcHRlcihhZGFwdGVyKTtcbiAgfTtcblxuICByZXR1cm4gQmluZGluZ0VuZ2luZTtcbn0oKSwgX2NsYXNzMTQuaW5qZWN0ID0gW09ic2VydmVyTG9jYXRvciwgUGFyc2VyXSwgX3RlbXAyKTtcblxudmFyIHNldFByb3RvID0gU2V0LnByb3RvdHlwZTtcblxuZnVuY3Rpb24gX2dldFNldE9ic2VydmVyKHRhc2tRdWV1ZSwgc2V0KSB7XG4gIHJldHVybiBNb2RpZnlTZXRPYnNlcnZlci5mb3IodGFza1F1ZXVlLCBzZXQpO1xufVxuXG52YXIgTW9kaWZ5U2V0T2JzZXJ2ZXIgPSBmdW5jdGlvbiAoX01vZGlmeUNvbGxlY3Rpb25PYnNlMykge1xuICBfaW5oZXJpdHMoTW9kaWZ5U2V0T2JzZXJ2ZXIsIF9Nb2RpZnlDb2xsZWN0aW9uT2JzZTMpO1xuXG4gIGZ1bmN0aW9uIE1vZGlmeVNldE9ic2VydmVyKHRhc2tRdWV1ZSwgc2V0KSB7XG4gICAgXG5cbiAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX01vZGlmeUNvbGxlY3Rpb25PYnNlMy5jYWxsKHRoaXMsIHRhc2tRdWV1ZSwgc2V0KSk7XG4gIH1cblxuICBNb2RpZnlTZXRPYnNlcnZlci5mb3IgPSBmdW5jdGlvbiBfZm9yKHRhc2tRdWV1ZSwgc2V0KSB7XG4gICAgaWYgKCEoJ19fc2V0X29ic2VydmVyX18nIGluIHNldCkpIHtcbiAgICAgIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkoc2V0LCAnX19zZXRfb2JzZXJ2ZXJfXycsIHtcbiAgICAgICAgdmFsdWU6IE1vZGlmeVNldE9ic2VydmVyLmNyZWF0ZSh0YXNrUXVldWUsIHNldCksXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLCBjb25maWd1cmFibGU6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHNldC5fX3NldF9vYnNlcnZlcl9fO1xuICB9O1xuXG4gIE1vZGlmeVNldE9ic2VydmVyLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZSh0YXNrUXVldWUsIHNldCkge1xuICAgIHZhciBvYnNlcnZlciA9IG5ldyBNb2RpZnlTZXRPYnNlcnZlcih0YXNrUXVldWUsIHNldCk7XG5cbiAgICB2YXIgcHJvdG8gPSBzZXRQcm90bztcbiAgICBpZiAocHJvdG8uYWRkICE9PSBzZXQuYWRkIHx8IHByb3RvLmRlbGV0ZSAhPT0gc2V0LmRlbGV0ZSB8fCBwcm90by5jbGVhciAhPT0gc2V0LmNsZWFyKSB7XG4gICAgICBwcm90byA9IHtcbiAgICAgICAgYWRkOiBzZXQuYWRkLFxuICAgICAgICBkZWxldGU6IHNldC5kZWxldGUsXG4gICAgICAgIGNsZWFyOiBzZXQuY2xlYXJcbiAgICAgIH07XG4gICAgfVxuXG4gICAgc2V0LmFkZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB0eXBlID0gJ2FkZCc7XG4gICAgICB2YXIgb2xkU2l6ZSA9IHNldC5zaXplO1xuICAgICAgdmFyIG1ldGhvZENhbGxSZXN1bHQgPSBwcm90by5hZGQuYXBwbHkoc2V0LCBhcmd1bWVudHMpO1xuICAgICAgdmFyIGhhc1ZhbHVlID0gc2V0LnNpemUgPT09IG9sZFNpemU7XG4gICAgICBpZiAoIWhhc1ZhbHVlKSB7XG4gICAgICAgIG9ic2VydmVyLmFkZENoYW5nZVJlY29yZCh7XG4gICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICBvYmplY3Q6IHNldCxcbiAgICAgICAgICB2YWx1ZTogQXJyYXkuZnJvbShzZXQpLnBvcCgpXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1ldGhvZENhbGxSZXN1bHQ7XG4gICAgfTtcblxuICAgIHNldC5kZWxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgaGFzVmFsdWUgPSBzZXQuaGFzKGFyZ3VtZW50c1swXSk7XG4gICAgICB2YXIgbWV0aG9kQ2FsbFJlc3VsdCA9IHByb3RvLmRlbGV0ZS5hcHBseShzZXQsIGFyZ3VtZW50cyk7XG4gICAgICBpZiAoaGFzVmFsdWUpIHtcbiAgICAgICAgb2JzZXJ2ZXIuYWRkQ2hhbmdlUmVjb3JkKHtcbiAgICAgICAgICB0eXBlOiAnZGVsZXRlJyxcbiAgICAgICAgICBvYmplY3Q6IHNldCxcbiAgICAgICAgICB2YWx1ZTogYXJndW1lbnRzWzBdXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1ldGhvZENhbGxSZXN1bHQ7XG4gICAgfTtcblxuICAgIHNldC5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBtZXRob2RDYWxsUmVzdWx0ID0gcHJvdG8uY2xlYXIuYXBwbHkoc2V0LCBhcmd1bWVudHMpO1xuICAgICAgb2JzZXJ2ZXIuYWRkQ2hhbmdlUmVjb3JkKHtcbiAgICAgICAgdHlwZTogJ2NsZWFyJyxcbiAgICAgICAgb2JqZWN0OiBzZXRcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG1ldGhvZENhbGxSZXN1bHQ7XG4gICAgfTtcblxuICAgIHJldHVybiBvYnNlcnZlcjtcbiAgfTtcblxuICByZXR1cm4gTW9kaWZ5U2V0T2JzZXJ2ZXI7XG59KE1vZGlmeUNvbGxlY3Rpb25PYnNlcnZlcik7XG5cbmV4cG9ydCBmdW5jdGlvbiBvYnNlcnZhYmxlKHRhcmdldE9yQ29uZmlnLCBrZXksIGRlc2NyaXB0b3IpIHtcbiAgZnVuY3Rpb24gZGVjbyh0YXJnZXQsIGtleSwgZGVzY3JpcHRvciwgY29uZmlnKSB7XG4gICAgdmFyIGlzQ2xhc3NEZWNvcmF0b3IgPSBrZXkgPT09IHVuZGVmaW5lZDtcbiAgICBpZiAoaXNDbGFzc0RlY29yYXRvcikge1xuICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgIGtleSA9IHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnID8gY29uZmlnIDogY29uZmlnLm5hbWU7XG4gICAgfVxuXG4gICAgdmFyIGlubmVyUHJvcGVydHlOYW1lID0gJ18nICsga2V5O1xuICAgIHZhciBpbm5lclByb3BlcnR5RGVzY3JpcHRvciA9IHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9O1xuXG4gICAgdmFyIGNhbGxiYWNrTmFtZSA9IGNvbmZpZyAmJiBjb25maWcuY2hhbmdlSGFuZGxlciB8fCBrZXkgKyAnQ2hhbmdlZCc7XG5cbiAgICBpZiAoZGVzY3JpcHRvcikge1xuICAgICAgaWYgKHR5cGVvZiBkZXNjcmlwdG9yLmluaXRpYWxpemVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGlubmVyUHJvcGVydHlEZXNjcmlwdG9yLnZhbHVlID0gZGVzY3JpcHRvci5pbml0aWFsaXplcigpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkZXNjcmlwdG9yID0ge307XG4gICAgfVxuXG4gICAgaWYgKCEoJ2VudW1lcmFibGUnIGluIGRlc2NyaXB0b3IpKSB7XG4gICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSB0cnVlO1xuICAgIH1cblxuICAgIGRlbGV0ZSBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIGRlbGV0ZSBkZXNjcmlwdG9yLndyaXRhYmxlO1xuICAgIGRlbGV0ZSBkZXNjcmlwdG9yLmluaXRpYWxpemVyO1xuXG4gICAgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGlubmVyUHJvcGVydHlOYW1lLCBpbm5lclByb3BlcnR5RGVzY3JpcHRvcik7XG5cbiAgICBkZXNjcmlwdG9yLmdldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzW2lubmVyUHJvcGVydHlOYW1lXTtcbiAgICB9O1xuICAgIGRlc2NyaXB0b3Iuc2V0ID0gZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICB2YXIgb2xkVmFsdWUgPSB0aGlzW2lubmVyUHJvcGVydHlOYW1lXTtcbiAgICAgIGlmIChuZXdWYWx1ZSA9PT0gb2xkVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzW2lubmVyUHJvcGVydHlOYW1lXSA9IG5ld1ZhbHVlO1xuICAgICAgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBpbm5lclByb3BlcnR5TmFtZSwgeyBlbnVtZXJhYmxlOiBmYWxzZSB9KTtcblxuICAgICAgaWYgKHRoaXNbY2FsbGJhY2tOYW1lXSkge1xuICAgICAgICB0aGlzW2NhbGxiYWNrTmFtZV0obmV3VmFsdWUsIG9sZFZhbHVlLCBrZXkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBkZXNjcmlwdG9yLmdldC5kZXBlbmRlbmNpZXMgPSBbaW5uZXJQcm9wZXJ0eU5hbWVdO1xuXG4gICAgaWYgKGlzQ2xhc3NEZWNvcmF0b3IpIHtcbiAgICAgIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG4gIH1cblxuICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHQsIGssIGQpIHtcbiAgICAgIHJldHVybiBkZWNvKHQsIGssIGQsIHRhcmdldE9yQ29uZmlnKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBkZWNvKHRhcmdldE9yQ29uZmlnLCBrZXksIGRlc2NyaXB0b3IpO1xufVxuXG52YXIgc2lnbmFscyA9IHt9O1xuXG5leHBvcnQgZnVuY3Rpb24gY29ubmVjdEJpbmRpbmdUb1NpZ25hbChiaW5kaW5nLCBuYW1lKSB7XG4gIGlmICghc2lnbmFscy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgIHNpZ25hbHNbbmFtZV0gPSAwO1xuICB9XG4gIGJpbmRpbmcub2JzZXJ2ZVByb3BlcnR5KHNpZ25hbHMsIG5hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmFsQmluZGluZ3MobmFtZSkge1xuICBpZiAoc2lnbmFscy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgIHNpZ25hbHNbbmFtZV0rKztcbiAgfVxufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1\n")},10:function(module,__webpack_exports__,__webpack_require__){"use strict";eval("/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return TaskQueue; });\n/* harmony import */ var aurelia_pal__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0);\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n\n\n\n\nvar stackSeparator = '\\nEnqueued in TaskQueue by:\\n';\nvar microStackSeparator = '\\nEnqueued in MicroTaskQueue by:\\n';\n\nfunction makeRequestFlushFromMutationObserver(flush) {\n  var observer = aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* DOM */ \"b\"].createMutationObserver(flush);\n  var val = 'a';\n  var node = aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* DOM */ \"b\"].createTextNode('a');\n  var values = Object.create(null);\n  values.a = 'b';\n  values.b = 'a';\n  observer.observe(node, { characterData: true });\n  return function requestFlush() {\n    node.data = val = values[val];\n  };\n}\n\nfunction makeRequestFlushFromTimer(flush) {\n  return function requestFlush() {\n    var timeoutHandle = setTimeout(handleFlushTimer, 0);\n\n    var intervalHandle = setInterval(handleFlushTimer, 50);\n    function handleFlushTimer() {\n      clearTimeout(timeoutHandle);\n      clearInterval(intervalHandle);\n      flush();\n    }\n  };\n}\n\nfunction onError(error, task, longStacks) {\n  if (longStacks && task.stack && (typeof error === 'undefined' ? 'undefined' : _typeof(error)) === 'object' && error !== null) {\n    error.stack = filterFlushStack(error.stack) + task.stack;\n  }\n\n  if ('onError' in task) {\n    task.onError(error);\n  } else {\n    setTimeout(function () {\n      throw error;\n    }, 0);\n  }\n}\n\nvar TaskQueue = function () {\n  function TaskQueue() {\n    var _this = this;\n\n    \n\n    this.flushing = false;\n    this.longStacks = false;\n\n    this.microTaskQueue = [];\n    this.microTaskQueueCapacity = 1024;\n    this.taskQueue = [];\n\n    if (aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* FEATURE */ \"c\"].mutationObserver) {\n      this.requestFlushMicroTaskQueue = makeRequestFlushFromMutationObserver(function () {\n        return _this.flushMicroTaskQueue();\n      });\n    } else {\n      this.requestFlushMicroTaskQueue = makeRequestFlushFromTimer(function () {\n        return _this.flushMicroTaskQueue();\n      });\n    }\n\n    this.requestFlushTaskQueue = makeRequestFlushFromTimer(function () {\n      return _this.flushTaskQueue();\n    });\n  }\n\n  TaskQueue.prototype._flushQueue = function _flushQueue(queue, capacity) {\n    var index = 0;\n    var task = void 0;\n\n    try {\n      this.flushing = true;\n      while (index < queue.length) {\n        task = queue[index];\n        if (this.longStacks) {\n          this.stack = typeof task.stack === 'string' ? task.stack : undefined;\n        }\n        task.call();\n        index++;\n\n        if (index > capacity) {\n          for (var scan = 0, newLength = queue.length - index; scan < newLength; scan++) {\n            queue[scan] = queue[scan + index];\n          }\n\n          queue.length -= index;\n          index = 0;\n        }\n      }\n    } catch (error) {\n      onError(error, task, this.longStacks);\n    } finally {\n      this.flushing = false;\n    }\n  };\n\n  TaskQueue.prototype.queueMicroTask = function queueMicroTask(task) {\n    if (this.microTaskQueue.length < 1) {\n      this.requestFlushMicroTaskQueue();\n    }\n\n    if (this.longStacks) {\n      task.stack = this.prepareQueueStack(microStackSeparator);\n    }\n\n    this.microTaskQueue.push(task);\n  };\n\n  TaskQueue.prototype.queueTask = function queueTask(task) {\n    if (this.taskQueue.length < 1) {\n      this.requestFlushTaskQueue();\n    }\n\n    if (this.longStacks) {\n      task.stack = this.prepareQueueStack(stackSeparator);\n    }\n\n    this.taskQueue.push(task);\n  };\n\n  TaskQueue.prototype.flushTaskQueue = function flushTaskQueue() {\n    var queue = this.taskQueue;\n    this.taskQueue = [];\n    this._flushQueue(queue, Number.MAX_VALUE);\n  };\n\n  TaskQueue.prototype.flushMicroTaskQueue = function flushMicroTaskQueue() {\n    var queue = this.microTaskQueue;\n    this._flushQueue(queue, this.microTaskQueueCapacity);\n    queue.length = 0;\n  };\n\n  TaskQueue.prototype.prepareQueueStack = function prepareQueueStack(separator) {\n    var stack = separator + filterQueueStack(captureStack());\n\n    if (typeof this.stack === 'string') {\n      stack = filterFlushStack(stack) + this.stack;\n    }\n\n    return stack;\n  };\n\n  return TaskQueue;\n}();\n\nfunction captureStack() {\n  var error = new Error();\n\n  if (error.stack) {\n    return error.stack;\n  }\n\n  try {\n    throw error;\n  } catch (e) {\n    return e.stack;\n  }\n}\n\nfunction filterQueueStack(stack) {\n  return stack.replace(/^[\\s\\S]*?\\bqueue(Micro)?Task\\b[^\\n]*\\n/, '');\n}\n\nfunction filterFlushStack(stack) {\n  var index = stack.lastIndexOf('flushMicroTaskQueue');\n\n  if (index < 0) {\n    index = stack.lastIndexOf('flushTaskQueue');\n    if (index < 0) {\n      return stack;\n    }\n  }\n\n  index = stack.lastIndexOf('\\n', index);\n\n  return index < 0 ? stack : stack.substr(0, index);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXVyZWxpYS10YXNrLXF1ZXVlL2Rpc3QvbmF0aXZlLW1vZHVsZXMvYXVyZWxpYS10YXNrLXF1ZXVlLmpzPzJiZjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBLG9HQUFvRyxtQkFBbUIsRUFBRSxtQkFBbUIsOEhBQThIOzs7O0FBSS9OOztBQUUzQztBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLHVEQUFHO0FBQ3BCO0FBQ0EsYUFBYSx1REFBRztBQUNoQjtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsc0JBQXNCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVPO0FBQ1A7QUFDQTs7OztBQUlBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLFFBQVEsMkRBQU87QUFDZjtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhEQUE4RCxrQkFBa0I7QUFDaEY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBIiwiZmlsZSI6IjEwLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG5cblxuaW1wb3J0IHsgRE9NLCBGRUFUVVJFIH0gZnJvbSAnYXVyZWxpYS1wYWwnO1xuXG52YXIgc3RhY2tTZXBhcmF0b3IgPSAnXFxuRW5xdWV1ZWQgaW4gVGFza1F1ZXVlIGJ5Olxcbic7XG52YXIgbWljcm9TdGFja1NlcGFyYXRvciA9ICdcXG5FbnF1ZXVlZCBpbiBNaWNyb1Rhc2tRdWV1ZSBieTpcXG4nO1xuXG5mdW5jdGlvbiBtYWtlUmVxdWVzdEZsdXNoRnJvbU11dGF0aW9uT2JzZXJ2ZXIoZmx1c2gpIHtcbiAgdmFyIG9ic2VydmVyID0gRE9NLmNyZWF0ZU11dGF0aW9uT2JzZXJ2ZXIoZmx1c2gpO1xuICB2YXIgdmFsID0gJ2EnO1xuICB2YXIgbm9kZSA9IERPTS5jcmVhdGVUZXh0Tm9kZSgnYScpO1xuICB2YXIgdmFsdWVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgdmFsdWVzLmEgPSAnYic7XG4gIHZhbHVlcy5iID0gJ2EnO1xuICBvYnNlcnZlci5vYnNlcnZlKG5vZGUsIHsgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHJlcXVlc3RGbHVzaCgpIHtcbiAgICBub2RlLmRhdGEgPSB2YWwgPSB2YWx1ZXNbdmFsXTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gbWFrZVJlcXVlc3RGbHVzaEZyb21UaW1lcihmbHVzaCkge1xuICByZXR1cm4gZnVuY3Rpb24gcmVxdWVzdEZsdXNoKCkge1xuICAgIHZhciB0aW1lb3V0SGFuZGxlID0gc2V0VGltZW91dChoYW5kbGVGbHVzaFRpbWVyLCAwKTtcblxuICAgIHZhciBpbnRlcnZhbEhhbmRsZSA9IHNldEludGVydmFsKGhhbmRsZUZsdXNoVGltZXIsIDUwKTtcbiAgICBmdW5jdGlvbiBoYW5kbGVGbHVzaFRpbWVyKCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRIYW5kbGUpO1xuICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbEhhbmRsZSk7XG4gICAgICBmbHVzaCgpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gb25FcnJvcihlcnJvciwgdGFzaywgbG9uZ1N0YWNrcykge1xuICBpZiAobG9uZ1N0YWNrcyAmJiB0YXNrLnN0YWNrICYmICh0eXBlb2YgZXJyb3IgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKGVycm9yKSkgPT09ICdvYmplY3QnICYmIGVycm9yICE9PSBudWxsKSB7XG4gICAgZXJyb3Iuc3RhY2sgPSBmaWx0ZXJGbHVzaFN0YWNrKGVycm9yLnN0YWNrKSArIHRhc2suc3RhY2s7XG4gIH1cblxuICBpZiAoJ29uRXJyb3InIGluIHRhc2spIHtcbiAgICB0YXNrLm9uRXJyb3IoZXJyb3IpO1xuICB9IGVsc2Uge1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSwgMCk7XG4gIH1cbn1cblxuZXhwb3J0IHZhciBUYXNrUXVldWUgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFRhc2tRdWV1ZSgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgXG5cbiAgICB0aGlzLmZsdXNoaW5nID0gZmFsc2U7XG4gICAgdGhpcy5sb25nU3RhY2tzID0gZmFsc2U7XG5cbiAgICB0aGlzLm1pY3JvVGFza1F1ZXVlID0gW107XG4gICAgdGhpcy5taWNyb1Rhc2tRdWV1ZUNhcGFjaXR5ID0gMTAyNDtcbiAgICB0aGlzLnRhc2tRdWV1ZSA9IFtdO1xuXG4gICAgaWYgKEZFQVRVUkUubXV0YXRpb25PYnNlcnZlcikge1xuICAgICAgdGhpcy5yZXF1ZXN0Rmx1c2hNaWNyb1Rhc2tRdWV1ZSA9IG1ha2VSZXF1ZXN0Rmx1c2hGcm9tTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5mbHVzaE1pY3JvVGFza1F1ZXVlKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZXF1ZXN0Rmx1c2hNaWNyb1Rhc2tRdWV1ZSA9IG1ha2VSZXF1ZXN0Rmx1c2hGcm9tVGltZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMuZmx1c2hNaWNyb1Rhc2tRdWV1ZSgpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXF1ZXN0Rmx1c2hUYXNrUXVldWUgPSBtYWtlUmVxdWVzdEZsdXNoRnJvbVRpbWVyKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5mbHVzaFRhc2tRdWV1ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgVGFza1F1ZXVlLnByb3RvdHlwZS5fZmx1c2hRdWV1ZSA9IGZ1bmN0aW9uIF9mbHVzaFF1ZXVlKHF1ZXVlLCBjYXBhY2l0eSkge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIHRhc2sgPSB2b2lkIDA7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5mbHVzaGluZyA9IHRydWU7XG4gICAgICB3aGlsZSAoaW5kZXggPCBxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgdGFzayA9IHF1ZXVlW2luZGV4XTtcbiAgICAgICAgaWYgKHRoaXMubG9uZ1N0YWNrcykge1xuICAgICAgICAgIHRoaXMuc3RhY2sgPSB0eXBlb2YgdGFzay5zdGFjayA9PT0gJ3N0cmluZycgPyB0YXNrLnN0YWNrIDogdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHRhc2suY2FsbCgpO1xuICAgICAgICBpbmRleCsrO1xuXG4gICAgICAgIGlmIChpbmRleCA+IGNhcGFjaXR5KSB7XG4gICAgICAgICAgZm9yICh2YXIgc2NhbiA9IDAsIG5ld0xlbmd0aCA9IHF1ZXVlLmxlbmd0aCAtIGluZGV4OyBzY2FuIDwgbmV3TGVuZ3RoOyBzY2FuKyspIHtcbiAgICAgICAgICAgIHF1ZXVlW3NjYW5dID0gcXVldWVbc2NhbiArIGluZGV4XTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBxdWV1ZS5sZW5ndGggLT0gaW5kZXg7XG4gICAgICAgICAgaW5kZXggPSAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG9uRXJyb3IoZXJyb3IsIHRhc2ssIHRoaXMubG9uZ1N0YWNrcyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuZmx1c2hpbmcgPSBmYWxzZTtcbiAgICB9XG4gIH07XG5cbiAgVGFza1F1ZXVlLnByb3RvdHlwZS5xdWV1ZU1pY3JvVGFzayA9IGZ1bmN0aW9uIHF1ZXVlTWljcm9UYXNrKHRhc2spIHtcbiAgICBpZiAodGhpcy5taWNyb1Rhc2tRdWV1ZS5sZW5ndGggPCAxKSB7XG4gICAgICB0aGlzLnJlcXVlc3RGbHVzaE1pY3JvVGFza1F1ZXVlKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubG9uZ1N0YWNrcykge1xuICAgICAgdGFzay5zdGFjayA9IHRoaXMucHJlcGFyZVF1ZXVlU3RhY2sobWljcm9TdGFja1NlcGFyYXRvcik7XG4gICAgfVxuXG4gICAgdGhpcy5taWNyb1Rhc2tRdWV1ZS5wdXNoKHRhc2spO1xuICB9O1xuXG4gIFRhc2tRdWV1ZS5wcm90b3R5cGUucXVldWVUYXNrID0gZnVuY3Rpb24gcXVldWVUYXNrKHRhc2spIHtcbiAgICBpZiAodGhpcy50YXNrUXVldWUubGVuZ3RoIDwgMSkge1xuICAgICAgdGhpcy5yZXF1ZXN0Rmx1c2hUYXNrUXVldWUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sb25nU3RhY2tzKSB7XG4gICAgICB0YXNrLnN0YWNrID0gdGhpcy5wcmVwYXJlUXVldWVTdGFjayhzdGFja1NlcGFyYXRvcik7XG4gICAgfVxuXG4gICAgdGhpcy50YXNrUXVldWUucHVzaCh0YXNrKTtcbiAgfTtcblxuICBUYXNrUXVldWUucHJvdG90eXBlLmZsdXNoVGFza1F1ZXVlID0gZnVuY3Rpb24gZmx1c2hUYXNrUXVldWUoKSB7XG4gICAgdmFyIHF1ZXVlID0gdGhpcy50YXNrUXVldWU7XG4gICAgdGhpcy50YXNrUXVldWUgPSBbXTtcbiAgICB0aGlzLl9mbHVzaFF1ZXVlKHF1ZXVlLCBOdW1iZXIuTUFYX1ZBTFVFKTtcbiAgfTtcblxuICBUYXNrUXVldWUucHJvdG90eXBlLmZsdXNoTWljcm9UYXNrUXVldWUgPSBmdW5jdGlvbiBmbHVzaE1pY3JvVGFza1F1ZXVlKCkge1xuICAgIHZhciBxdWV1ZSA9IHRoaXMubWljcm9UYXNrUXVldWU7XG4gICAgdGhpcy5fZmx1c2hRdWV1ZShxdWV1ZSwgdGhpcy5taWNyb1Rhc2tRdWV1ZUNhcGFjaXR5KTtcbiAgICBxdWV1ZS5sZW5ndGggPSAwO1xuICB9O1xuXG4gIFRhc2tRdWV1ZS5wcm90b3R5cGUucHJlcGFyZVF1ZXVlU3RhY2sgPSBmdW5jdGlvbiBwcmVwYXJlUXVldWVTdGFjayhzZXBhcmF0b3IpIHtcbiAgICB2YXIgc3RhY2sgPSBzZXBhcmF0b3IgKyBmaWx0ZXJRdWV1ZVN0YWNrKGNhcHR1cmVTdGFjaygpKTtcblxuICAgIGlmICh0eXBlb2YgdGhpcy5zdGFjayA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHN0YWNrID0gZmlsdGVyRmx1c2hTdGFjayhzdGFjaykgKyB0aGlzLnN0YWNrO1xuICAgIH1cblxuICAgIHJldHVybiBzdGFjaztcbiAgfTtcblxuICByZXR1cm4gVGFza1F1ZXVlO1xufSgpO1xuXG5mdW5jdGlvbiBjYXB0dXJlU3RhY2soKSB7XG4gIHZhciBlcnJvciA9IG5ldyBFcnJvcigpO1xuXG4gIGlmIChlcnJvci5zdGFjaykge1xuICAgIHJldHVybiBlcnJvci5zdGFjaztcbiAgfVxuXG4gIHRyeSB7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZS5zdGFjaztcbiAgfVxufVxuXG5mdW5jdGlvbiBmaWx0ZXJRdWV1ZVN0YWNrKHN0YWNrKSB7XG4gIHJldHVybiBzdGFjay5yZXBsYWNlKC9eW1xcc1xcU10qP1xcYnF1ZXVlKE1pY3JvKT9UYXNrXFxiW15cXG5dKlxcbi8sICcnKTtcbn1cblxuZnVuY3Rpb24gZmlsdGVyRmx1c2hTdGFjayhzdGFjaykge1xuICB2YXIgaW5kZXggPSBzdGFjay5sYXN0SW5kZXhPZignZmx1c2hNaWNyb1Rhc2tRdWV1ZScpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICBpbmRleCA9IHN0YWNrLmxhc3RJbmRleE9mKCdmbHVzaFRhc2tRdWV1ZScpO1xuICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgIHJldHVybiBzdGFjaztcbiAgICB9XG4gIH1cblxuICBpbmRleCA9IHN0YWNrLmxhc3RJbmRleE9mKCdcXG4nLCBpbmRleCk7XG5cbiAgcmV0dXJuIGluZGV4IDwgMCA/IHN0YWNrIDogc3RhY2suc3Vic3RyKDAsIGluZGV4KTtcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///10\n")},100:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '१',\n        '2': '२',\n        '3': '३',\n        '4': '४',\n        '5': '५',\n        '6': '६',\n        '7': '७',\n        '8': '८',\n        '9': '९',\n        '0': '०'\n    },\n    numberMap = {\n        '१': '1',\n        '२': '2',\n        '३': '3',\n        '४': '4',\n        '५': '5',\n        '६': '6',\n        '७': '7',\n        '८': '8',\n        '९': '9',\n        '०': '0'\n    };\n\n    var hi = moment.defineLocale('hi', {\n        months : 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split('_'),\n        monthsShort : 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n        weekdaysShort : 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),\n        weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm बजे',\n            LTS : 'A h:mm:ss बजे',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm बजे',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm बजे'\n        },\n        calendar : {\n            sameDay : '[आज] LT',\n            nextDay : '[कल] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[कल] LT',\n            lastWeek : '[पिछले] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s में',\n            past : '%s पहले',\n            s : 'कुछ ही क्षण',\n            ss : '%d सेकंड',\n            m : 'एक मिनट',\n            mm : '%d मिनट',\n            h : 'एक घंटा',\n            hh : '%d घंटे',\n            d : 'एक दिन',\n            dd : '%d दिन',\n            M : 'एक महीने',\n            MM : '%d महीने',\n            y : 'एक वर्ष',\n            yy : '%d वर्ष'\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // Hindi notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.\n        meridiemParse: /रात|सुबह|दोपहर|शाम/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'रात') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'सुबह') {\n                return hour;\n            } else if (meridiem === 'दोपहर') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'शाम') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'रात';\n            } else if (hour < 10) {\n                return 'सुबह';\n            } else if (hour < 17) {\n                return 'दोपहर';\n            } else if (hour < 20) {\n                return 'शाम';\n            } else {\n                return 'रात';\n            }\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return hi;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9oaS5qcz9kYzRkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiMTAwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAnMSc6ICfgpacnLFxuICAgICAgICAnMic6ICfgpagnLFxuICAgICAgICAnMyc6ICfgpaknLFxuICAgICAgICAnNCc6ICfgpaonLFxuICAgICAgICAnNSc6ICfgpasnLFxuICAgICAgICAnNic6ICfgpawnLFxuICAgICAgICAnNyc6ICfgpa0nLFxuICAgICAgICAnOCc6ICfgpa4nLFxuICAgICAgICAnOSc6ICfgpa8nLFxuICAgICAgICAnMCc6ICfgpaYnXG4gICAgfSxcbiAgICBudW1iZXJNYXAgPSB7XG4gICAgICAgICfgpacnOiAnMScsXG4gICAgICAgICfgpagnOiAnMicsXG4gICAgICAgICfgpaknOiAnMycsXG4gICAgICAgICfgpaonOiAnNCcsXG4gICAgICAgICfgpasnOiAnNScsXG4gICAgICAgICfgpawnOiAnNicsXG4gICAgICAgICfgpa0nOiAnNycsXG4gICAgICAgICfgpa4nOiAnOCcsXG4gICAgICAgICfgpa8nOiAnOScsXG4gICAgICAgICfgpaYnOiAnMCdcbiAgICB9O1xuXG4gICAgdmFyIGhpID0gbW9tZW50LmRlZmluZUxvY2FsZSgnaGknLCB7XG4gICAgICAgIG1vbnRocyA6ICfgpJzgpKjgpLXgpLDgpYBf4KSr4KS84KSw4KS14KSw4KWAX+CkruCkvuCksOCljeCkml/gpIXgpKrgpY3gpLDgpYjgpLJf4KSu4KSIX+CknOClguCkqF/gpJzgpYHgpLLgpL7gpIhf4KSF4KSX4KS44KWN4KSkX+CkuOCkv+CkpOCkruCljeCkrOCksF/gpIXgpJXgpY3gpJ/gpYLgpKzgpLBf4KSo4KS14KSu4KWN4KSs4KSwX+CkpuCkv+CkuOCkruCljeCkrOCksCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAn4KSc4KSoLl/gpKvgpLzgpLAuX+CkruCkvuCksOCljeCkml/gpIXgpKrgpY3gpLDgpYguX+CkruCkiF/gpJzgpYLgpKhf4KSc4KWB4KSyLl/gpIXgpJcuX+CkuOCkv+CkpC5f4KSF4KSV4KWN4KSf4KWCLl/gpKjgpLUuX+CkpuCkv+CkuC4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzIDogJ+CksOCkteCkv+CkteCkvuCksF/gpLjgpYvgpK7gpLXgpL7gpLBf4KSu4KSC4KSX4KSy4KS14KS+4KSwX+CkrOClgeCkp+CkteCkvuCksF/gpJfgpYHgpLDgpYLgpLXgpL7gpLBf4KS24KWB4KSV4KWN4KSw4KS14KS+4KSwX+CktuCkqOCkv+CkteCkvuCksCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICfgpLDgpLXgpL9f4KS44KWL4KSuX+CkruCkguCkl+Cksl/gpKzgpYHgpKdf4KSX4KWB4KSw4KWCX+CktuClgeCkleCljeCksF/gpLbgpKjgpL8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ+CksF/gpLjgpYtf4KSu4KSCX+CkrOClgV/gpJfgpYFf4KS24KWBX+Ckticuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdBIGg6bW0g4KSs4KSc4KWHJyxcbiAgICAgICAgICAgIExUUyA6ICdBIGg6bW06c3Mg4KSs4KSc4KWHJyxcbiAgICAgICAgICAgIEwgOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVksIEEgaDptbSDgpKzgpJzgpYcnLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIOCkrOCknOClhydcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1vgpIbgpJxdIExUJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW+CkleCksl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnZGRkZCwgTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdb4KSV4KSyXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlayA6ICdb4KSq4KS/4KSb4KSy4KWHXSBkZGRkLCBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnJXMg4KSu4KWH4KSCJyxcbiAgICAgICAgICAgIHBhc3QgOiAnJXMg4KSq4KS54KSy4KWHJyxcbiAgICAgICAgICAgIHMgOiAn4KSV4KWB4KSbIOCkueClgCDgpJXgpY3gpLfgpKMnLFxuICAgICAgICAgICAgc3MgOiAnJWQg4KS44KWH4KSV4KSC4KShJyxcbiAgICAgICAgICAgIG0gOiAn4KSP4KSVIOCkruCkv+CkqOCknycsXG4gICAgICAgICAgICBtbSA6ICclZCDgpK7gpL/gpKjgpJ8nLFxuICAgICAgICAgICAgaCA6ICfgpI/gpJUg4KSY4KSC4KSf4KS+JyxcbiAgICAgICAgICAgIGhoIDogJyVkIOCkmOCkguCkn+ClhycsXG4gICAgICAgICAgICBkIDogJ+Ckj+CklSDgpKbgpL/gpKgnLFxuICAgICAgICAgICAgZGQgOiAnJWQg4KSm4KS/4KSoJyxcbiAgICAgICAgICAgIE0gOiAn4KSP4KSVIOCkruCkueClgOCkqOClhycsXG4gICAgICAgICAgICBNTSA6ICclZCDgpK7gpLngpYDgpKjgpYcnLFxuICAgICAgICAgICAgeSA6ICfgpI/gpJUg4KS14KSw4KWN4KS3JyxcbiAgICAgICAgICAgIHl5IDogJyVkIOCkteCksOCljeCktydcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW+Clp+ClqOClqeClquClq+ClrOClreClruClr+Clpl0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gSGluZGkgbm90YXRpb24gZm9yIG1lcmlkaWVtcyBhcmUgcXVpdGUgZnV6enkgaW4gcHJhY3RpY2UuIFdoaWxlIHRoZXJlIGV4aXN0c1xuICAgICAgICAvLyBhIHJpZ2lkIG5vdGlvbiBvZiBhICdQYWhhcicgaXQgaXMgbm90IHVzZWQgYXMgcmlnaWRseSBpbiBtb2Rlcm4gSGluZGkuXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/gpLDgpL7gpKR84KS44KWB4KSs4KS5fOCkpuCli+CkquCkueCksHzgpLbgpL7gpK4vLFxuICAgICAgICBtZXJpZGllbUhvdXIgOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn4KSw4KS+4KSkJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyIDwgNCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4KS44KWB4KSs4KS5Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CkpuCli+CkquCkueCksCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4KS24KS+4KSuJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtIDogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpLDgpL7gpKQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CkuOClgeCkrOCkuSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KSm4KWL4KSq4KS54KSwJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpLbgpL7gpK4nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CksOCkvuCkpCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDYgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDFzdCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGhpO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///100\n")},101:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var he = moment.defineLocale('he', {\n        months : 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split('_'),\n        monthsShort : 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'),\n        weekdays : 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),\n        weekdaysShort : 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),\n        weekdaysMin : 'א_ב_ג_ד_ה_ו_ש'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D [ב]MMMM YYYY',\n            LLL : 'D [ב]MMMM YYYY HH:mm',\n            LLLL : 'dddd, D [ב]MMMM YYYY HH:mm',\n            l : 'D/M/YYYY',\n            ll : 'D MMM YYYY',\n            lll : 'D MMM YYYY HH:mm',\n            llll : 'ddd, D MMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[היום ב־]LT',\n            nextDay : '[מחר ב־]LT',\n            nextWeek : 'dddd [בשעה] LT',\n            lastDay : '[אתמול ב־]LT',\n            lastWeek : '[ביום] dddd [האחרון בשעה] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'בעוד %s',\n            past : 'לפני %s',\n            s : 'מספר שניות',\n            ss : '%d שניות',\n            m : 'דקה',\n            mm : '%d דקות',\n            h : 'שעה',\n            hh : function (number) {\n                if (number === 2) {\n                    return 'שעתיים';\n                }\n                return number + ' שעות';\n            },\n            d : 'יום',\n            dd : function (number) {\n                if (number === 2) {\n                    return 'יומיים';\n                }\n                return number + ' ימים';\n            },\n            M : 'חודש',\n            MM : function (number) {\n                if (number === 2) {\n                    return 'חודשיים';\n                }\n                return number + ' חודשים';\n            },\n            y : 'שנה',\n            yy : function (number) {\n                if (number === 2) {\n                    return 'שנתיים';\n                } else if (number % 10 === 0 && number !== 10) {\n                    return number + ' שנה';\n                }\n                return number + ' שנים';\n            }\n        },\n        meridiemParse: /אחה\"צ|לפנה\"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,\n        isPM : function (input) {\n            return /^(אחה\"צ|אחרי הצהריים|בערב)$/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 5) {\n                return 'לפנות בוקר';\n            } else if (hour < 10) {\n                return 'בבוקר';\n            } else if (hour < 12) {\n                return isLower ? 'לפנה\"צ' : 'לפני הצהריים';\n            } else if (hour < 18) {\n                return isLower ? 'אחה\"צ' : 'אחרי הצהריים';\n            } else {\n                return 'בערב';\n            }\n        }\n    });\n\n    return he;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9oZS5qcz9jN2FhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiMTAxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgaGUgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdoZScsIHtcbiAgICAgICAgbW9udGhzIDogJ9eZ16DXldeQ16hf16TXkdeo15XXkNeoX9ee16jXpV/XkNek16jXmdecX9ee15DXmV/XmdeV16DXmV/XmdeV15zXmV/XkNeV15LXldeh15hf16HXpNeY157XkdeoX9eQ15XXp9eY15XXkdeoX9eg15XXkdee15HXqF/Xk9em157XkdeoJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICfXmdeg15XXs1/XpNeR16jXs1/Xnteo16Vf15DXpNeo17Nf157XkNeZX9eZ15XXoNeZX9eZ15XXnNeZX9eQ15XXktezX9eh16TXmNezX9eQ15XXp9ezX9eg15XXkdezX9eT16bXntezJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6ICfXqNeQ16nXldefX9ep16DXmV/Xqdec15nXqdeZX9eo15HXmdei15lf15fXnteZ16nXmV/XqdeZ16nXmV/XqdeR16onLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAn15DXs1/XkdezX9eS17Nf15PXs1/XlNezX9eV17Nf16nXsycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAn15Bf15Ff15Jf15Nf15Rf15Vf16knLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIFvXkV1NTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgW9eRXU1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQsIEQgW9eRXU1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBsIDogJ0QvTS9ZWVlZJyxcbiAgICAgICAgICAgIGxsIDogJ0QgTU1NIFlZWVknLFxuICAgICAgICAgICAgbGxsIDogJ0QgTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgbGxsbCA6ICdkZGQsIEQgTU1NIFlZWVkgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICdb15TXmdeV150g15HWvl1MVCcsXG4gICAgICAgICAgICBuZXh0RGF5IDogJ1vXnteX16gg15HWvl1MVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdkZGRkIFvXkdep16LXlF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdb15DXqtee15XXnCDXkda+XUxUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogJ1vXkdeZ15XXnV0gZGRkZCBb15TXkNeX16jXldefINeR16nXoteUXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAn15HXoteV15MgJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICfXnNek16DXmSAlcycsXG4gICAgICAgICAgICBzIDogJ9ee16HXpNeoINep16DXmdeV16onLFxuICAgICAgICAgICAgc3MgOiAnJWQg16nXoNeZ15XXqicsXG4gICAgICAgICAgICBtIDogJ9eT16fXlCcsXG4gICAgICAgICAgICBtbSA6ICclZCDXk9en15XXqicsXG4gICAgICAgICAgICBoIDogJ9ep16LXlCcsXG4gICAgICAgICAgICBoaCA6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAn16nXoteq15nXmdedJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICcg16nXoteV16onO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGQgOiAn15nXldedJyxcbiAgICAgICAgICAgIGRkIDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICfXmdeV157XmdeZ150nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJyDXmdee15nXnSc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgTSA6ICfXl9eV15PXqScsXG4gICAgICAgICAgICBNTSA6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAn15fXldeT16nXmdeZ150nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJyDXl9eV15PXqdeZ150nO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHkgOiAn16nXoNeUJyxcbiAgICAgICAgICAgIHl5IDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICfXqdeg16rXmdeZ150nO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyICUgMTAgPT09IDAgJiYgbnVtYmVyICE9PSAxMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJyDXqdeg15QnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJyDXqdeg15nXnSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/XkNeX15RcItemfNec16TXoNeUXCLXpnzXkNeX16jXmSDXlNem15TXqNeZ15nXnXzXnNek16DXmSDXlNem15TXqNeZ15nXnXzXnNek16DXldeqINeR15XXp9eofNeR15HXlden16h815HXoteo15EvaSxcbiAgICAgICAgaXNQTSA6IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIC9eKNeQ15fXlFwi16Z815DXl9eo15kg15TXpteU16jXmdeZ151815HXoteo15EpJC8udGVzdChpbnB1dCk7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtIDogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA1KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfXnNek16DXldeqINeR15XXp9eoJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfXkdeR15XXp9eoJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAn15zXpNeg15RcItemJyA6ICfXnNek16DXmSDXlNem15TXqNeZ15nXnSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxOCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ9eQ15fXlFwi16YnIDogJ9eQ15fXqNeZINeU16bXlNeo15nXmdedJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfXkdei16jXkSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBoZTtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///101\n")},102:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n            '1': '૧',\n            '2': '૨',\n            '3': '૩',\n            '4': '૪',\n            '5': '૫',\n            '6': '૬',\n            '7': '૭',\n            '8': '૮',\n            '9': '૯',\n            '0': '૦'\n        },\n        numberMap = {\n            '૧': '1',\n            '૨': '2',\n            '૩': '3',\n            '૪': '4',\n            '૫': '5',\n            '૬': '6',\n            '૭': '7',\n            '૮': '8',\n            '૯': '9',\n            '૦': '0'\n        };\n\n    var gu = moment.defineLocale('gu', {\n        months: 'જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર'.split('_'),\n        monthsShort: 'જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર'.split('_'),\n        weekdaysShort: 'રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ'.split('_'),\n        weekdaysMin: 'ર_સો_મં_બુ_ગુ_શુ_શ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm વાગ્યે',\n            LTS: 'A h:mm:ss વાગ્યે',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm વાગ્યે',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm વાગ્યે'\n        },\n        calendar: {\n            sameDay: '[આજ] LT',\n            nextDay: '[કાલે] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[ગઇકાલે] LT',\n            lastWeek: '[પાછલા] dddd, LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: '%s મા',\n            past: '%s પેહલા',\n            s: 'અમુક પળો',\n            ss: '%d સેકંડ',\n            m: 'એક મિનિટ',\n            mm: '%d મિનિટ',\n            h: 'એક કલાક',\n            hh: '%d કલાક',\n            d: 'એક દિવસ',\n            dd: '%d દિવસ',\n            M: 'એક મહિનો',\n            MM: '%d મહિનો',\n            y: 'એક વર્ષ',\n            yy: '%d વર્ષ'\n        },\n        preparse: function (string) {\n            return string.replace(/[૧૨૩૪૫૬૭૮૯૦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // Gujarati notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati.\n        meridiemParse: /રાત|બપોર|સવાર|સાંજ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'રાત') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'સવાર') {\n                return hour;\n            } else if (meridiem === 'બપોર') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'સાંજ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'રાત';\n            } else if (hour < 10) {\n                return 'સવાર';\n            } else if (hour < 17) {\n                return 'બપોર';\n            } else if (hour < 20) {\n                return 'સાંજ';\n            } else {\n                return 'રાત';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6 // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return gu;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ndS5qcz9lMGM1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiMTAyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAgICAgJzEnOiAn4KunJyxcbiAgICAgICAgICAgICcyJzogJ+CrqCcsXG4gICAgICAgICAgICAnMyc6ICfgq6knLFxuICAgICAgICAgICAgJzQnOiAn4KuqJyxcbiAgICAgICAgICAgICc1JzogJ+CrqycsXG4gICAgICAgICAgICAnNic6ICfgq6wnLFxuICAgICAgICAgICAgJzcnOiAn4KutJyxcbiAgICAgICAgICAgICc4JzogJ+CrricsXG4gICAgICAgICAgICAnOSc6ICfgq68nLFxuICAgICAgICAgICAgJzAnOiAn4KumJ1xuICAgICAgICB9LFxuICAgICAgICBudW1iZXJNYXAgPSB7XG4gICAgICAgICAgICAn4KunJzogJzEnLFxuICAgICAgICAgICAgJ+CrqCc6ICcyJyxcbiAgICAgICAgICAgICfgq6knOiAnMycsXG4gICAgICAgICAgICAn4KuqJzogJzQnLFxuICAgICAgICAgICAgJ+Crqyc6ICc1JyxcbiAgICAgICAgICAgICfgq6wnOiAnNicsXG4gICAgICAgICAgICAn4KutJzogJzcnLFxuICAgICAgICAgICAgJ+Crric6ICc4JyxcbiAgICAgICAgICAgICfgq68nOiAnOScsXG4gICAgICAgICAgICAn4KumJzogJzAnXG4gICAgICAgIH07XG5cbiAgICB2YXIgZ3UgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdndScsIHtcbiAgICAgICAgbW9udGhzOiAn4Kqc4Kq+4Kqo4KuN4Kqv4KuB4KqG4Kqw4KuAX+Cqq+Crh+CqrOCrjeCqsOCrgeCqhuCqsOCrgF/gqq7gqr7gqrDgq43gqppf4KqP4Kqq4KuN4Kqw4Kq/4KqyX+CqruCrh1/gqpzgq4Lgqqhf4Kqc4KuB4Kqy4Kq+4KqIX+CqkeCql+CquOCrjeCqn1/gqrjgqqrgq43gqp/gq4fgqq7gq43gqqzgqrBf4KqR4KqV4KuN4Kqf4KuN4Kqs4KqwX+CqqOCqteCrh+CqruCrjeCqrOCqsF/gqqHgqr/gqrjgq4fgqq7gq43gqqzgqrAnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAn4Kqc4Kq+4Kqo4KuN4Kqv4KuBLl/gqqvgq4fgqqzgq43gqrDgq4EuX+CqruCqvuCqsOCrjeCqml/gqo/gqqrgq43gqrDgqr8uX+CqruCrh1/gqpzgq4Lgqqhf4Kqc4KuB4Kqy4Kq+Ll/gqpHgqpcuX+CquOCqquCrjeCqn+Crhy5f4KqR4KqV4KuN4Kqf4KuNLl/gqqjgqrXgq4cuX+CqoeCqv+CquOCrhy4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAn4Kqw4Kq14Kq/4Kq14Kq+4KqwX+CquOCri+CqruCqteCqvuCqsF/gqq7gqoLgqpfgqrPgqrXgqr7gqrBf4Kqs4KuB4Kqn4KuN4Kq14Kq+4KqwX+Cql+CrgeCqsOCrgeCqteCqvuCqsF/gqrbgq4HgqpXgq43gqrDgqrXgqr7gqrBf4Kq24Kqo4Kq/4Kq14Kq+4KqwJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn4Kqw4Kq14Kq/X+CquOCri+Cqrl/gqq7gqoLgqpfgqrNf4Kqs4KuB4Kqn4KuNX+Cql+CrgeCqsOCrgV/gqrbgq4HgqpXgq43gqrBf4Kq24Kqo4Kq/Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+CqsF/gqrjgq4tf4Kqu4KqCX+CqrOCrgV/gqpfgq4Ff4Kq24KuBX+Cqticuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnQSBoOm1tIOCqteCqvuCql+CrjeCqr+CrhycsXG4gICAgICAgICAgICBMVFM6ICdBIGg6bW06c3Mg4Kq14Kq+4KqX4KuN4Kqv4KuHJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVksIEEgaDptbSDgqrXgqr7gqpfgq43gqq/gq4cnLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0g4Kq14Kq+4KqX4KuN4Kqv4KuHJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vgqobgqpxdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb4KqV4Kq+4Kqy4KuHXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQsIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4KqX4KqH4KqV4Kq+4Kqy4KuHXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vgqqrgqr7gqpvgqrLgqr5dIGRkZGQsIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyDgqq7gqr4nLFxuICAgICAgICAgICAgcGFzdDogJyVzIOCqquCrh+CqueCqsuCqvicsXG4gICAgICAgICAgICBzOiAn4KqF4Kqu4KuB4KqVIOCqquCqs+CriycsXG4gICAgICAgICAgICBzczogJyVkIOCquOCrh+CqleCqguCqoScsXG4gICAgICAgICAgICBtOiAn4KqP4KqVIOCqruCqv+CqqOCqv+CqnycsXG4gICAgICAgICAgICBtbTogJyVkIOCqruCqv+CqqOCqv+CqnycsXG4gICAgICAgICAgICBoOiAn4KqP4KqVIOCqleCqsuCqvuCqlScsXG4gICAgICAgICAgICBoaDogJyVkIOCqleCqsuCqvuCqlScsXG4gICAgICAgICAgICBkOiAn4KqP4KqVIOCqpuCqv+CqteCquCcsXG4gICAgICAgICAgICBkZDogJyVkIOCqpuCqv+CqteCquCcsXG4gICAgICAgICAgICBNOiAn4KqP4KqVIOCqruCqueCqv+CqqOCriycsXG4gICAgICAgICAgICBNTTogJyVkIOCqruCqueCqv+CqqOCriycsXG4gICAgICAgICAgICB5OiAn4KqP4KqVIOCqteCqsOCrjeCqtycsXG4gICAgICAgICAgICB5eTogJyVkIOCqteCqsOCrjeCqtydcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW+Crp+CrqOCrqeCrquCrq+CrrOCrreCrruCrr+Crpl0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gR3VqYXJhdGkgbm90YXRpb24gZm9yIG1lcmlkaWVtcyBhcmUgcXVpdGUgZnV6enkgaW4gcHJhY3RpY2UuIFdoaWxlIHRoZXJlIGV4aXN0c1xuICAgICAgICAvLyBhIHJpZ2lkIG5vdGlvbiBvZiBhICdQYWhhcicgaXQgaXMgbm90IHVzZWQgYXMgcmlnaWRseSBpbiBtb2Rlcm4gR3VqYXJhdGkuXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/gqrDgqr7gqqR84Kqs4Kqq4KuL4KqwfOCquOCqteCqvuCqsHzgqrjgqr7gqoLgqpwvLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICfgqrDgqr7gqqQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPCA0ID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgqrjgqrXgqr7gqrAnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4Kqs4Kqq4KuL4KqwJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDEwID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgqrjgqr7gqoLgqpwnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Kqw4Kq+4KqkJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgqrjgqrXgqr7gqrAnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CqrOCqquCri+CqsCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAyMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Kq44Kq+4KqC4KqcJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgqrDgqr7gqqQnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA2IC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDFzdCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGd1O1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///102\n")},103:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            's': ['thodde secondanim', 'thodde second'],\n            'ss': [number + ' secondanim', number + ' second'],\n            'm': ['eka mintan', 'ek minute'],\n            'mm': [number + ' mintanim', number + ' mintam'],\n            'h': ['eka horan', 'ek hor'],\n            'hh': [number + ' horanim', number + ' horam'],\n            'd': ['eka disan', 'ek dis'],\n            'dd': [number + ' disanim', number + ' dis'],\n            'M': ['eka mhoinean', 'ek mhoino'],\n            'MM': [number + ' mhoineanim', number + ' mhoine'],\n            'y': ['eka vorsan', 'ek voros'],\n            'yy': [number + ' vorsanim', number + ' vorsam']\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var gomLatn = moment.defineLocale('gom-latn', {\n        months : 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split('_'),\n        monthsShort : 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'Aitar_Somar_Mongllar_Budvar_Brestar_Sukrar_Son\\'var'.split('_'),\n        weekdaysShort : 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'),\n        weekdaysMin : 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'A h:mm [vazta]',\n            LTS : 'A h:mm:ss [vazta]',\n            L : 'DD-MM-YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY A h:mm [vazta]',\n            LLLL : 'dddd, MMMM[achea] Do, YYYY, A h:mm [vazta]',\n            llll: 'ddd, D MMM YYYY, A h:mm [vazta]'\n        },\n        calendar : {\n            sameDay: '[Aiz] LT',\n            nextDay: '[Faleam] LT',\n            nextWeek: '[Ieta to] dddd[,] LT',\n            lastDay: '[Kal] LT',\n            lastWeek: '[Fatlo] dddd[,] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : '%s',\n            past : '%s adim',\n            s : processRelativeTime,\n            ss : processRelativeTime,\n            m : processRelativeTime,\n            mm : processRelativeTime,\n            h : processRelativeTime,\n            hh : processRelativeTime,\n            d : processRelativeTime,\n            dd : processRelativeTime,\n            M : processRelativeTime,\n            MM : processRelativeTime,\n            y : processRelativeTime,\n            yy : processRelativeTime\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}(er)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                // the ordinal 'er' only applies to day of the month\n                case 'D':\n                    return number + 'er';\n                default:\n                case 'M':\n                case 'Q':\n                case 'DDD':\n                case 'd':\n                case 'w':\n                case 'W':\n                    return number;\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        },\n        meridiemParse: /rati|sokalli|donparam|sanje/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'rati') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'sokalli') {\n                return hour;\n            } else if (meridiem === 'donparam') {\n                return hour > 12 ? hour : hour + 12;\n            } else if (meridiem === 'sanje') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'rati';\n            } else if (hour < 12) {\n                return 'sokalli';\n            } else if (hour < 16) {\n                return 'donparam';\n            } else if (hour < 20) {\n                return 'sanje';\n            } else {\n                return 'rati';\n            }\n        }\n    });\n\n    return gomLatn;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9nb20tbGF0bi5qcz8wY2FhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxxQ0FBcUMsSUFBSTtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiMTAzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzUmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgZm9ybWF0ID0ge1xuICAgICAgICAgICAgJ3MnOiBbJ3Rob2RkZSBzZWNvbmRhbmltJywgJ3Rob2RkZSBzZWNvbmQnXSxcbiAgICAgICAgICAgICdzcyc6IFtudW1iZXIgKyAnIHNlY29uZGFuaW0nLCBudW1iZXIgKyAnIHNlY29uZCddLFxuICAgICAgICAgICAgJ20nOiBbJ2VrYSBtaW50YW4nLCAnZWsgbWludXRlJ10sXG4gICAgICAgICAgICAnbW0nOiBbbnVtYmVyICsgJyBtaW50YW5pbScsIG51bWJlciArICcgbWludGFtJ10sXG4gICAgICAgICAgICAnaCc6IFsnZWthIGhvcmFuJywgJ2VrIGhvciddLFxuICAgICAgICAgICAgJ2hoJzogW251bWJlciArICcgaG9yYW5pbScsIG51bWJlciArICcgaG9yYW0nXSxcbiAgICAgICAgICAgICdkJzogWydla2EgZGlzYW4nLCAnZWsgZGlzJ10sXG4gICAgICAgICAgICAnZGQnOiBbbnVtYmVyICsgJyBkaXNhbmltJywgbnVtYmVyICsgJyBkaXMnXSxcbiAgICAgICAgICAgICdNJzogWydla2EgbWhvaW5lYW4nLCAnZWsgbWhvaW5vJ10sXG4gICAgICAgICAgICAnTU0nOiBbbnVtYmVyICsgJyBtaG9pbmVhbmltJywgbnVtYmVyICsgJyBtaG9pbmUnXSxcbiAgICAgICAgICAgICd5JzogWydla2Egdm9yc2FuJywgJ2VrIHZvcm9zJ10sXG4gICAgICAgICAgICAneXknOiBbbnVtYmVyICsgJyB2b3JzYW5pbScsIG51bWJlciArICcgdm9yc2FtJ11cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyBmb3JtYXRba2V5XVswXSA6IGZvcm1hdFtrZXldWzFdO1xuICAgIH1cblxuICAgIHZhciBnb21MYXRuID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZ29tLWxhdG4nLCB7XG4gICAgICAgIG1vbnRocyA6ICdKYW5lcl9GZWJyZXJfTWFyc19BYnJpbF9NYWlfSnVuX0p1bGFpX0Fnb3N0X1NldGVtYnJfT3R1YnJfTm92ZW1icl9EZXplbWJyJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICdKYW4uX0ZlYi5fTWFyc19BYnIuX01haV9KdW5fSnVsLl9BZ28uX1NldC5fT3R1Ll9Ob3YuX0Rlei4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICB3ZWVrZGF5cyA6ICdBaXRhcl9Tb21hcl9Nb25nbGxhcl9CdWR2YXJfQnJlc3Rhcl9TdWtyYXJfU29uXFwndmFyJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ0FpdC5fU29tLl9Nb24uX0J1ZC5fQnJlLl9TdWsuX1Nvbi4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ0FpX1NtX01vX0J1X0JyX1N1X1NuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0EgaDptbSBbdmF6dGFdJyxcbiAgICAgICAgICAgIExUUyA6ICdBIGg6bW06c3MgW3ZhenRhXScsXG4gICAgICAgICAgICBMIDogJ0RELU1NLVlZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIEEgaDptbSBbdmF6dGFdJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgTU1NTVthY2hlYV0gRG8sIFlZWVksIEEgaDptbSBbdmF6dGFdJyxcbiAgICAgICAgICAgIGxsbGw6ICdkZGQsIEQgTU1NIFlZWVksIEEgaDptbSBbdmF6dGFdJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbQWl6XSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0ZhbGVhbV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdbSWV0YSB0b10gZGRkZFssXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0thbF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbRmF0bG9dIGRkZGRbLF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICclcyBhZGltJyxcbiAgICAgICAgICAgIHMgOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgc3MgOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgbSA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtbSA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBoIDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGhoIDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGQgOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZGQgOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgTSA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBNTSA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5IDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHl5IDogcHJvY2Vzc1JlbGF0aXZlVGltZVxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlIDogL1xcZHsxLDJ9KGVyKS8sXG4gICAgICAgIG9yZGluYWwgOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgLy8gdGhlIG9yZGluYWwgJ2VyJyBvbmx5IGFwcGxpZXMgdG8gZGF5IG9mIHRoZSBtb250aFxuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ2VyJztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1EnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAndyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnVyc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL3JhdGl8c29rYWxsaXxkb25wYXJhbXxzYW5qZS8sXG4gICAgICAgIG1lcmlkaWVtSG91ciA6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICdyYXRpJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyIDwgNCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAnc29rYWxsaScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICdkb25wYXJhbScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+IDEyID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICdzYW5qZScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbSA6IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAncmF0aSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAnc29rYWxsaSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNikge1xuICAgICAgICAgICAgICAgIHJldHVybiAnZG9ucGFyYW0nO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3NhbmplJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdyYXRpJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGdvbUxhdG47XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///103\n")},104:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var gl = moment.defineLocale('gl', {\n        months : 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split('_'),\n        monthsShort : 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'),\n        weekdaysShort : 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'),\n        weekdaysMin : 'do_lu_ma_mé_xo_ve_sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D [de] MMMM [de] YYYY',\n            LLL : 'D [de] MMMM [de] YYYY H:mm',\n            LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'\n        },\n        calendar : {\n            sameDay : function () {\n                return '[hoxe ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';\n            },\n            nextDay : function () {\n                return '[mañá ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';\n            },\n            nextWeek : function () {\n                return 'dddd [' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';\n            },\n            lastDay : function () {\n                return '[onte ' + ((this.hours() !== 1) ? 'á' : 'a') + '] LT';\n            },\n            lastWeek : function () {\n                return '[o] dddd [pasado ' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : function (str) {\n                if (str.indexOf('un') === 0) {\n                    return 'n' + str;\n                }\n                return 'en ' + str;\n            },\n            past : 'hai %s',\n            s : 'uns segundos',\n            ss : '%d segundos',\n            m : 'un minuto',\n            mm : '%d minutos',\n            h : 'unha hora',\n            hh : '%d horas',\n            d : 'un día',\n            dd : '%d días',\n            M : 'un mes',\n            MM : '%d meses',\n            y : 'un ano',\n            yy : '%d anos'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal : '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return gl;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9nbC5qcz84ODQwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULHFDQUFxQyxJQUFJO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiMTA0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgZ2wgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdnbCcsIHtcbiAgICAgICAgbW9udGhzIDogJ3hhbmVpcm9fZmVicmVpcm9fbWFyem9fYWJyaWxfbWFpb194dcOxb194dWxsb19hZ29zdG9fc2V0ZW1icm9fb3V0dWJyb19ub3ZlbWJyb19kZWNlbWJybycuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAneGFuLl9mZWIuX21hci5fYWJyLl9tYWkuX3h1w7EuX3h1bC5fYWdvLl9zZXQuX291dC5fbm92Ll9kZWMuJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5cyA6ICdkb21pbmdvX2x1bnNfbWFydGVzX23DqXJjb3Jlc194b3Zlc192ZW5yZXNfc8OhYmFkbycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICdkb20uX2x1bi5fbWFyLl9tw6lyLl94b3YuX3Zlbi5fc8OhYi4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ2RvX2x1X21hX23DqV94b192ZV9zw6EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdCA6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSDptbScsXG4gICAgICAgICAgICBMVFMgOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBbZGVdIE1NTU0gW2RlXSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbaG94ZSAnICsgKCh0aGlzLmhvdXJzKCkgIT09IDEpID8gJ8OhcycgOiAnw6EnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXh0RGF5IDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW21hw7HDoSAnICsgKCh0aGlzLmhvdXJzKCkgIT09IDEpID8gJ8OhcycgOiAnw6EnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXh0V2VlayA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2RkZGQgWycgKyAoKHRoaXMuaG91cnMoKSAhPT0gMSkgPyAnw6FzJyA6ICdhJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheSA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1tvbnRlICcgKyAoKHRoaXMuaG91cnMoKSAhPT0gMSkgPyAnw6EnIDogJ2EnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0V2VlayA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1tvXSBkZGRkIFtwYXNhZG8gJyArICgodGhpcy5ob3VycygpICE9PSAxKSA/ICfDoXMnIDogJ2EnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0ci5pbmRleE9mKCd1bicpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnbicgKyBzdHI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAnZW4gJyArIHN0cjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwYXN0IDogJ2hhaSAlcycsXG4gICAgICAgICAgICBzIDogJ3VucyBzZWd1bmRvcycsXG4gICAgICAgICAgICBzcyA6ICclZCBzZWd1bmRvcycsXG4gICAgICAgICAgICBtIDogJ3VuIG1pbnV0bycsXG4gICAgICAgICAgICBtbSA6ICclZCBtaW51dG9zJyxcbiAgICAgICAgICAgIGggOiAndW5oYSBob3JhJyxcbiAgICAgICAgICAgIGhoIDogJyVkIGhvcmFzJyxcbiAgICAgICAgICAgIGQgOiAndW4gZMOtYScsXG4gICAgICAgICAgICBkZCA6ICclZCBkw61hcycsXG4gICAgICAgICAgICBNIDogJ3VuIG1lcycsXG4gICAgICAgICAgICBNTSA6ICclZCBtZXNlcycsXG4gICAgICAgICAgICB5IDogJ3VuIGFubycsXG4gICAgICAgICAgICB5eSA6ICclZCBhbm9zJ1xuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlIDogL1xcZHsxLDJ9wrovLFxuICAgICAgICBvcmRpbmFsIDogJyVkwronLFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA0ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBnbDtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///104\n")},105:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var months = [\n        'Am Faoilleach', 'An Gearran', 'Am Màrt', 'An Giblean', 'An Cèitean', 'An t-Ògmhios', 'An t-Iuchar', 'An Lùnastal', 'An t-Sultain', 'An Dàmhair', 'An t-Samhain', 'An Dùbhlachd'\n    ];\n\n    var monthsShort = ['Faoi', 'Gear', 'Màrt', 'Gibl', 'Cèit', 'Ògmh', 'Iuch', 'Lùn', 'Sult', 'Dàmh', 'Samh', 'Dùbh'];\n\n    var weekdays = ['Didòmhnaich', 'Diluain', 'Dimàirt', 'Diciadain', 'Diardaoin', 'Dihaoine', 'Disathairne'];\n\n    var weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'];\n\n    var weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'];\n\n    var gd = moment.defineLocale('gd', {\n        months : months,\n        monthsShort : monthsShort,\n        monthsParseExact : true,\n        weekdays : weekdays,\n        weekdaysShort : weekdaysShort,\n        weekdaysMin : weekdaysMin,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[An-diugh aig] LT',\n            nextDay : '[A-màireach aig] LT',\n            nextWeek : 'dddd [aig] LT',\n            lastDay : '[An-dè aig] LT',\n            lastWeek : 'dddd [seo chaidh] [aig] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'ann an %s',\n            past : 'bho chionn %s',\n            s : 'beagan diogan',\n            ss : '%d diogan',\n            m : 'mionaid',\n            mm : '%d mionaidean',\n            h : 'uair',\n            hh : '%d uairean',\n            d : 'latha',\n            dd : '%d latha',\n            M : 'mìos',\n            MM : '%d mìosan',\n            y : 'bliadhna',\n            yy : '%d bliadhna'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}(d|na|mh)/,\n        ordinal : function (number) {\n            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return gd;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9nZC5qcz9mNmI0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QscUNBQXFDLElBQUk7QUFDekM7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwiZmlsZSI6IjEwNS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIG1vbnRocyA9IFtcbiAgICAgICAgJ0FtIEZhb2lsbGVhY2gnLCAnQW4gR2VhcnJhbicsICdBbSBNw6BydCcsICdBbiBHaWJsZWFuJywgJ0FuIEPDqGl0ZWFuJywgJ0FuIHQtw5JnbWhpb3MnLCAnQW4gdC1JdWNoYXInLCAnQW4gTMO5bmFzdGFsJywgJ0FuIHQtU3VsdGFpbicsICdBbiBEw6BtaGFpcicsICdBbiB0LVNhbWhhaW4nLCAnQW4gRMO5YmhsYWNoZCdcbiAgICBdO1xuXG4gICAgdmFyIG1vbnRoc1Nob3J0ID0gWydGYW9pJywgJ0dlYXInLCAnTcOgcnQnLCAnR2libCcsICdDw6hpdCcsICfDkmdtaCcsICdJdWNoJywgJ0zDuW4nLCAnU3VsdCcsICdEw6BtaCcsICdTYW1oJywgJ0TDuWJoJ107XG5cbiAgICB2YXIgd2Vla2RheXMgPSBbJ0RpZMOybWhuYWljaCcsICdEaWx1YWluJywgJ0RpbcOgaXJ0JywgJ0RpY2lhZGFpbicsICdEaWFyZGFvaW4nLCAnRGloYW9pbmUnLCAnRGlzYXRoYWlybmUnXTtcblxuICAgIHZhciB3ZWVrZGF5c1Nob3J0ID0gWydEaWQnLCAnRGlsJywgJ0RpbScsICdEaWMnLCAnRGlhJywgJ0RpaCcsICdEaXMnXTtcblxuICAgIHZhciB3ZWVrZGF5c01pbiA9IFsnRMOyJywgJ0x1JywgJ03DoCcsICdDaScsICdBcicsICdIYScsICdTYSddO1xuXG4gICAgdmFyIGdkID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZ2QnLCB7XG4gICAgICAgIG1vbnRocyA6IG1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQgOiBtb250aHNTaG9ydCxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdCA6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzIDogd2Vla2RheXMsXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiB3ZWVrZGF5c1Nob3J0LFxuICAgICAgICB3ZWVrZGF5c01pbiA6IHdlZWtkYXlzTWluLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICdbQW4tZGl1Z2ggYWlnXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5IDogJ1tBLW3DoGlyZWFjaCBhaWddIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrIDogJ2RkZGQgW2FpZ10gTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdbQW4tZMOoIGFpZ10gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiAnZGRkZCBbc2VvIGNoYWlkaF0gW2FpZ10gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ2FubiBhbiAlcycsXG4gICAgICAgICAgICBwYXN0IDogJ2JobyBjaGlvbm4gJXMnLFxuICAgICAgICAgICAgcyA6ICdiZWFnYW4gZGlvZ2FuJyxcbiAgICAgICAgICAgIHNzIDogJyVkIGRpb2dhbicsXG4gICAgICAgICAgICBtIDogJ21pb25haWQnLFxuICAgICAgICAgICAgbW0gOiAnJWQgbWlvbmFpZGVhbicsXG4gICAgICAgICAgICBoIDogJ3VhaXInLFxuICAgICAgICAgICAgaGggOiAnJWQgdWFpcmVhbicsXG4gICAgICAgICAgICBkIDogJ2xhdGhhJyxcbiAgICAgICAgICAgIGRkIDogJyVkIGxhdGhhJyxcbiAgICAgICAgICAgIE0gOiAnbcOsb3MnLFxuICAgICAgICAgICAgTU0gOiAnJWQgbcOsb3NhbicsXG4gICAgICAgICAgICB5IDogJ2JsaWFkaG5hJyxcbiAgICAgICAgICAgIHl5IDogJyVkIGJsaWFkaG5hJ1xuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlIDogL1xcZHsxLDJ9KGR8bmF8bWgpLyxcbiAgICAgICAgb3JkaW5hbCA6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSBudW1iZXIgPT09IDEgPyAnZCcgOiBudW1iZXIgJSAxMCA9PT0gMiA/ICduYScgOiAnbWgnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNCAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZ2Q7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///105\n")},106:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_'),\n        monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_');\n\n    var fy = moment.defineLocale('fy', {\n        months : 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split('_'),\n        monthsShort : function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n        monthsParseExact : true,\n        weekdays : 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split('_'),\n        weekdaysShort : 'si._mo._ti._wo._to._fr._so.'.split('_'),\n        weekdaysMin : 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD-MM-YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[hjoed om] LT',\n            nextDay: '[moarn om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[juster om] LT',\n            lastWeek: '[ôfrûne] dddd [om] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'oer %s',\n            past : '%s lyn',\n            s : 'in pear sekonden',\n            ss : '%d sekonden',\n            m : 'ien minút',\n            mm : '%d minuten',\n            h : 'ien oere',\n            hh : '%d oeren',\n            d : 'ien dei',\n            dd : '%d dagen',\n            M : 'ien moanne',\n            MM : '%d moannen',\n            y : 'ien jier',\n            yy : '%d jierren'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal : function (number) {\n            return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return fy;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9meS5qcz83MTE4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiMTA2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgbW9udGhzU2hvcnRXaXRoRG90cyA9ICdqYW4uX2ZlYi5fbXJ0Ll9hcHIuX21haV9qdW4uX2p1bC5fYXVnLl9zZXAuX29rdC5fbm92Ll9kZXMuJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydFdpdGhvdXREb3RzID0gJ2phbl9mZWJfbXJ0X2Fwcl9tYWlfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVzJy5zcGxpdCgnXycpO1xuXG4gICAgdmFyIGZ5ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZnknLCB7XG4gICAgICAgIG1vbnRocyA6ICdqYW5uZXdhcmlzX2ZlYnJld2FyaXNfbWFhcnRfYXByaWxfbWFhaWVfanVueV9qdWx5X2F1Z3VzdHVzX3NlcHRpbWJlcl9va3RvYmVyX25vdmltYmVyX2Rlc2ltYmVyJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6IGZ1bmN0aW9uIChtLCBmb3JtYXQpIHtcbiAgICAgICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydFdpdGhEb3RzO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgvLU1NTS0vLnRlc3QoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydFdpdGhvdXREb3RzW20ubW9udGgoKV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydFdpdGhEb3RzW20ubW9udGgoKV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICB3ZWVrZGF5cyA6ICdzbmVpbl9tb2FuZGVpX3RpaXNkZWlfd29hbnNkZWlfdG9uZ2Vyc2RlaV9mcmVlZF9zbmVvbicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICdzaS5fbW8uX3RpLl93by5fdG8uX2ZyLl9zby4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ1NpX01vX1RpX1dvX1RvX0ZyX1NvJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0RELU1NLVlZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2hqb2VkIG9tXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW21vYXJuIG9tXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW29tXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2p1c3RlciBvbV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbw7RmcsO7bmVdIGRkZGQgW29tXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICdvZXIgJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICclcyBseW4nLFxuICAgICAgICAgICAgcyA6ICdpbiBwZWFyIHNla29uZGVuJyxcbiAgICAgICAgICAgIHNzIDogJyVkIHNla29uZGVuJyxcbiAgICAgICAgICAgIG0gOiAnaWVuIG1pbsO6dCcsXG4gICAgICAgICAgICBtbSA6ICclZCBtaW51dGVuJyxcbiAgICAgICAgICAgIGggOiAnaWVuIG9lcmUnLFxuICAgICAgICAgICAgaGggOiAnJWQgb2VyZW4nLFxuICAgICAgICAgICAgZCA6ICdpZW4gZGVpJyxcbiAgICAgICAgICAgIGRkIDogJyVkIGRhZ2VuJyxcbiAgICAgICAgICAgIE0gOiAnaWVuIG1vYW5uZScsXG4gICAgICAgICAgICBNTSA6ICclZCBtb2FubmVuJyxcbiAgICAgICAgICAgIHkgOiAnaWVuIGppZXInLFxuICAgICAgICAgICAgeXkgOiAnJWQgamllcnJlbidcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHN0ZXxkZSkvLFxuICAgICAgICBvcmRpbmFsIDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICgobnVtYmVyID09PSAxIHx8IG51bWJlciA9PT0gOCB8fCBudW1iZXIgPj0gMjApID8gJ3N0ZScgOiAnZGUnKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNCAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZnk7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///106\n")},107:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var frCh = moment.defineLocale('fr-ch', {\n        months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n        monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin : 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Aujourd’hui à] LT',\n            nextDay : '[Demain à] LT',\n            nextWeek : 'dddd [à] LT',\n            lastDay : '[Hier à] LT',\n            lastWeek : 'dddd [dernier à] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'dans %s',\n            past : 'il y a %s',\n            s : 'quelques secondes',\n            ss : '%d secondes',\n            m : 'une minute',\n            mm : '%d minutes',\n            h : 'une heure',\n            hh : '%d heures',\n            d : 'un jour',\n            dd : '%d jours',\n            M : 'un mois',\n            MM : '%d mois',\n            y : 'un an',\n            yy : '%d ans'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'D':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return frCh;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9mci1jaC5qcz8wZTQ5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiMTA3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgZnJDaCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2ZyLWNoJywge1xuICAgICAgICBtb250aHMgOiAnamFudmllcl9mw6l2cmllcl9tYXJzX2F2cmlsX21haV9qdWluX2p1aWxsZXRfYW/Du3Rfc2VwdGVtYnJlX29jdG9icmVfbm92ZW1icmVfZMOpY2VtYnJlJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICdqYW52Ll9mw6l2ci5fbWFyc19hdnIuX21haV9qdWluX2p1aWwuX2Fvw7t0X3NlcHQuX29jdC5fbm92Ll9kw6ljLicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdCA6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzIDogJ2RpbWFuY2hlX2x1bmRpX21hcmRpX21lcmNyZWRpX2pldWRpX3ZlbmRyZWRpX3NhbWVkaScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICdkaW0uX2x1bi5fbWFyLl9tZXIuX2pldS5fdmVuLl9zYW0uJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICdkaV9sdV9tYV9tZV9qZV92ZV9zYScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0IDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdISDptbScsXG4gICAgICAgICAgICBMVFMgOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICdbQXVqb3VyZOKAmWh1aSDDoF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICdbRGVtYWluIMOgXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdkZGRkIFvDoF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdbSGllciDDoF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiAnZGRkZCBbZGVybmllciDDoF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ2RhbnMgJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICdpbCB5IGEgJXMnLFxuICAgICAgICAgICAgcyA6ICdxdWVscXVlcyBzZWNvbmRlcycsXG4gICAgICAgICAgICBzcyA6ICclZCBzZWNvbmRlcycsXG4gICAgICAgICAgICBtIDogJ3VuZSBtaW51dGUnLFxuICAgICAgICAgICAgbW0gOiAnJWQgbWludXRlcycsXG4gICAgICAgICAgICBoIDogJ3VuZSBoZXVyZScsXG4gICAgICAgICAgICBoaCA6ICclZCBoZXVyZXMnLFxuICAgICAgICAgICAgZCA6ICd1biBqb3VyJyxcbiAgICAgICAgICAgIGRkIDogJyVkIGpvdXJzJyxcbiAgICAgICAgICAgIE0gOiAndW4gbW9pcycsXG4gICAgICAgICAgICBNTSA6ICclZCBtb2lzJyxcbiAgICAgICAgICAgIHkgOiAndW4gYW4nLFxuICAgICAgICAgICAgeXkgOiAnJWQgYW5zJ1xuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oZXJ8ZSkvLFxuICAgICAgICBvcmRpbmFsIDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIC8vIFdvcmRzIHdpdGggbWFzY3VsaW5lIGdyYW1tYXRpY2FsIGdlbmRlcjogbW9pcywgdHJpbWVzdHJlLCBqb3VyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICBjYXNlICdRJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKG51bWJlciA9PT0gMSA/ICdlcicgOiAnZScpO1xuXG4gICAgICAgICAgICAgICAgLy8gV29yZHMgd2l0aCBmZW1pbmluZSBncmFtbWF0aWNhbCBnZW5kZXI6IHNlbWFpbmVcbiAgICAgICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIChudW1iZXIgPT09IDEgPyAncmUnIDogJ2UnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNCAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZnJDaDtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///107\n")},108:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var frCa = moment.defineLocale('fr-ca', {\n        months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n        monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin : 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY-MM-DD',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Aujourd’hui à] LT',\n            nextDay : '[Demain à] LT',\n            nextWeek : 'dddd [à] LT',\n            lastDay : '[Hier à] LT',\n            lastWeek : 'dddd [dernier à] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'dans %s',\n            past : 'il y a %s',\n            s : 'quelques secondes',\n            ss : '%d secondes',\n            m : 'une minute',\n            mm : '%d minutes',\n            h : 'une heure',\n            hh : '%d heures',\n            d : 'un jour',\n            dd : '%d jours',\n            M : 'un mois',\n            MM : '%d mois',\n            y : 'un an',\n            yy : '%d ans'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'D':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        }\n    });\n\n    return frCa;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9mci1jYS5qcz9kOWY4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiIxMDguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBmckNhID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZnItY2EnLCB7XG4gICAgICAgIG1vbnRocyA6ICdqYW52aWVyX2bDqXZyaWVyX21hcnNfYXZyaWxfbWFpX2p1aW5fanVpbGxldF9hb8O7dF9zZXB0ZW1icmVfb2N0b2JyZV9ub3ZlbWJyZV9kw6ljZW1icmUnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ2phbnYuX2bDqXZyLl9tYXJzX2F2ci5fbWFpX2p1aW5fanVpbC5fYW/Du3Rfc2VwdC5fb2N0Ll9ub3YuX2TDqWMuJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0IDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXMgOiAnZGltYW5jaGVfbHVuZGlfbWFyZGlfbWVyY3JlZGlfamV1ZGlfdmVuZHJlZGlfc2FtZWRpJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ2RpbS5fbHVuLl9tYXIuX21lci5famV1Ll92ZW4uX3NhbS4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ2RpX2x1X21hX21lX2plX3ZlX3NhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ1lZWVktTU0tREQnLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1tBdWpvdXJk4oCZaHVpIMOgXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5IDogJ1tEZW1haW4gw6BdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrIDogJ2RkZGQgW8OgXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5IDogJ1tIaWVyIMOgXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlayA6ICdkZGRkIFtkZXJuaWVyIMOgXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnZGFucyAlcycsXG4gICAgICAgICAgICBwYXN0IDogJ2lsIHkgYSAlcycsXG4gICAgICAgICAgICBzIDogJ3F1ZWxxdWVzIHNlY29uZGVzJyxcbiAgICAgICAgICAgIHNzIDogJyVkIHNlY29uZGVzJyxcbiAgICAgICAgICAgIG0gOiAndW5lIG1pbnV0ZScsXG4gICAgICAgICAgICBtbSA6ICclZCBtaW51dGVzJyxcbiAgICAgICAgICAgIGggOiAndW5lIGhldXJlJyxcbiAgICAgICAgICAgIGhoIDogJyVkIGhldXJlcycsXG4gICAgICAgICAgICBkIDogJ3VuIGpvdXInLFxuICAgICAgICAgICAgZGQgOiAnJWQgam91cnMnLFxuICAgICAgICAgICAgTSA6ICd1biBtb2lzJyxcbiAgICAgICAgICAgIE1NIDogJyVkIG1vaXMnLFxuICAgICAgICAgICAgeSA6ICd1biBhbicsXG4gICAgICAgICAgICB5eSA6ICclZCBhbnMnXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShlcnxlKS8sXG4gICAgICAgIG9yZGluYWwgOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgLy8gV29yZHMgd2l0aCBtYXNjdWxpbmUgZ3JhbW1hdGljYWwgZ2VuZGVyOiBtb2lzLCB0cmltZXN0cmUsIGpvdXJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1EnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAobnVtYmVyID09PSAxID8gJ2VyJyA6ICdlJyk7XG5cbiAgICAgICAgICAgICAgICAvLyBXb3JkcyB3aXRoIGZlbWluaW5lIGdyYW1tYXRpY2FsIGdlbmRlcjogc2VtYWluZVxuICAgICAgICAgICAgICAgIGNhc2UgJ3cnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKG51bWJlciA9PT0gMSA/ICdyZScgOiAnZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZnJDYTtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///108\n")},109:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var fr = moment.defineLocale('fr', {\n        months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n        monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin : 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Aujourd’hui à] LT',\n            nextDay : '[Demain à] LT',\n            nextWeek : 'dddd [à] LT',\n            lastDay : '[Hier à] LT',\n            lastWeek : 'dddd [dernier à] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'dans %s',\n            past : 'il y a %s',\n            s : 'quelques secondes',\n            ss : '%d secondes',\n            m : 'une minute',\n            mm : '%d minutes',\n            h : 'une heure',\n            hh : '%d heures',\n            d : 'un jour',\n            dd : '%d jours',\n            M : 'un mois',\n            MM : '%d mois',\n            y : 'un an',\n            yy : '%d ans'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                // TODO: Return 'e' when day of month > 1. Move this case inside\n                // block for masculine words below.\n                // See https://github.com/moment/moment/issues/3375\n                case 'D':\n                    return number + (number === 1 ? 'er' : '');\n\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return fr;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9mci5qcz85ZjI2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiMTA5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgZnIgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdmcicsIHtcbiAgICAgICAgbW9udGhzIDogJ2phbnZpZXJfZsOpdnJpZXJfbWFyc19hdnJpbF9tYWlfanVpbl9qdWlsbGV0X2Fvw7t0X3NlcHRlbWJyZV9vY3RvYnJlX25vdmVtYnJlX2TDqWNlbWJyZScuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAnamFudi5fZsOpdnIuX21hcnNfYXZyLl9tYWlfanVpbl9qdWlsLl9hb8O7dF9zZXB0Ll9vY3QuX25vdi5fZMOpYy4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICB3ZWVrZGF5cyA6ICdkaW1hbmNoZV9sdW5kaV9tYXJkaV9tZXJjcmVkaV9qZXVkaV92ZW5kcmVkaV9zYW1lZGknLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAnZGltLl9sdW4uX21hci5fbWVyLl9qZXUuX3Zlbi5fc2FtLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAnZGlfbHVfbWFfbWVfamVfdmVfc2EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdCA6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgOiAnW0F1am91cmTigJlodWkgw6BdIExUJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW0RlbWFpbiDDoF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnZGRkZCBbw6BdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXkgOiAnW0hpZXIgw6BdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogJ2RkZGQgW2Rlcm5pZXIgw6BdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICdkYW5zICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAnaWwgeSBhICVzJyxcbiAgICAgICAgICAgIHMgOiAncXVlbHF1ZXMgc2Vjb25kZXMnLFxuICAgICAgICAgICAgc3MgOiAnJWQgc2Vjb25kZXMnLFxuICAgICAgICAgICAgbSA6ICd1bmUgbWludXRlJyxcbiAgICAgICAgICAgIG1tIDogJyVkIG1pbnV0ZXMnLFxuICAgICAgICAgICAgaCA6ICd1bmUgaGV1cmUnLFxuICAgICAgICAgICAgaGggOiAnJWQgaGV1cmVzJyxcbiAgICAgICAgICAgIGQgOiAndW4gam91cicsXG4gICAgICAgICAgICBkZCA6ICclZCBqb3VycycsXG4gICAgICAgICAgICBNIDogJ3VuIG1vaXMnLFxuICAgICAgICAgICAgTU0gOiAnJWQgbW9pcycsXG4gICAgICAgICAgICB5IDogJ3VuIGFuJyxcbiAgICAgICAgICAgIHl5IDogJyVkIGFucydcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KGVyfCkvLFxuICAgICAgICBvcmRpbmFsIDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IFJldHVybiAnZScgd2hlbiBkYXkgb2YgbW9udGggPiAxLiBNb3ZlIHRoaXMgY2FzZSBpbnNpZGVcbiAgICAgICAgICAgICAgICAvLyBibG9jayBmb3IgbWFzY3VsaW5lIHdvcmRzIGJlbG93LlxuICAgICAgICAgICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMzM3NVxuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKG51bWJlciA9PT0gMSA/ICdlcicgOiAnJyk7XG5cbiAgICAgICAgICAgICAgICAvLyBXb3JkcyB3aXRoIG1hc2N1bGluZSBncmFtbWF0aWNhbCBnZW5kZXI6IG1vaXMsIHRyaW1lc3RyZSwgam91clxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnUSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIChudW1iZXIgPT09IDEgPyAnZXInIDogJ2UnKTtcblxuICAgICAgICAgICAgICAgIC8vIFdvcmRzIHdpdGggZmVtaW5pbmUgZ3JhbW1hdGljYWwgZ2VuZGVyOiBzZW1haW5lXG4gICAgICAgICAgICAgICAgY2FzZSAndyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnVyc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAobnVtYmVyID09PSAxID8gJ3JlJyA6ICdlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZyO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///109\n")},11:function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n\n// EXTERNAL MODULE: ./node_modules/aurelia-logging/dist/native-modules/aurelia-logging.js\nvar aurelia_logging = __webpack_require__(5);\n\n// EXTERNAL MODULE: ./node_modules/aurelia-dependency-injection/dist/native-modules/aurelia-dependency-injection.js\nvar aurelia_dependency_injection = __webpack_require__(6);\n\n// EXTERNAL MODULE: ./node_modules/aurelia-history/dist/native-modules/aurelia-history.js\nvar aurelia_history = __webpack_require__(14);\n\n// EXTERNAL MODULE: ./node_modules/aurelia-path/dist/native-modules/aurelia-path.js\nvar aurelia_path = __webpack_require__(7);\n\n// CONCATENATED MODULE: ./node_modules/aurelia-route-recognizer/dist/native-modules/aurelia-route-recognizer.js\n\n\n\n\nvar State = function () {\n  function State(charSpec) {\n    \n\n    this.charSpec = charSpec;\n    this.nextStates = [];\n  }\n\n  State.prototype.get = function get(charSpec) {\n    for (var _iterator = this.nextStates, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n      var _ref;\n\n      if (_isArray) {\n        if (_i >= _iterator.length) break;\n        _ref = _iterator[_i++];\n      } else {\n        _i = _iterator.next();\n        if (_i.done) break;\n        _ref = _i.value;\n      }\n\n      var child = _ref;\n\n      var isEqual = child.charSpec.validChars === charSpec.validChars && child.charSpec.invalidChars === charSpec.invalidChars;\n\n      if (isEqual) {\n        return child;\n      }\n    }\n\n    return undefined;\n  };\n\n  State.prototype.put = function put(charSpec) {\n    var state = this.get(charSpec);\n\n    if (state) {\n      return state;\n    }\n\n    state = new State(charSpec);\n\n    this.nextStates.push(state);\n\n    if (charSpec.repeat) {\n      state.nextStates.push(state);\n    }\n\n    return state;\n  };\n\n  State.prototype.match = function match(ch) {\n    var nextStates = this.nextStates;\n    var results = [];\n\n    for (var i = 0, l = nextStates.length; i < l; i++) {\n      var child = nextStates[i];\n      var charSpec = child.charSpec;\n\n      if (charSpec.validChars !== undefined) {\n        if (charSpec.validChars.indexOf(ch) !== -1) {\n          results.push(child);\n        }\n      } else if (charSpec.invalidChars !== undefined) {\n        if (charSpec.invalidChars.indexOf(ch) === -1) {\n          results.push(child);\n        }\n      }\n    }\n\n    return results;\n  };\n\n  return State;\n}();\n\nvar specials = ['/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\\\'];\n\nvar escapeRegex = new RegExp('(\\\\' + specials.join('|\\\\') + ')', 'g');\n\nvar StaticSegment = function () {\n  function StaticSegment(string, caseSensitive) {\n    \n\n    this.string = string;\n    this.caseSensitive = caseSensitive;\n  }\n\n  StaticSegment.prototype.eachChar = function eachChar(callback) {\n    var s = this.string;\n    for (var i = 0, ii = s.length; i < ii; ++i) {\n      var ch = s[i];\n      callback({ validChars: this.caseSensitive ? ch : ch.toUpperCase() + ch.toLowerCase() });\n    }\n  };\n\n  StaticSegment.prototype.regex = function regex() {\n    return this.string.replace(escapeRegex, '\\\\$1');\n  };\n\n  StaticSegment.prototype.generate = function generate() {\n    return this.string;\n  };\n\n  return StaticSegment;\n}();\n\nvar DynamicSegment = function () {\n  function DynamicSegment(name, optional) {\n    \n\n    this.name = name;\n    this.optional = optional;\n  }\n\n  DynamicSegment.prototype.eachChar = function eachChar(callback) {\n    callback({ invalidChars: '/', repeat: true });\n  };\n\n  DynamicSegment.prototype.regex = function regex() {\n    return '([^/]+)';\n  };\n\n  DynamicSegment.prototype.generate = function generate(params, consumed) {\n    consumed[this.name] = true;\n    return params[this.name];\n  };\n\n  return DynamicSegment;\n}();\n\nvar StarSegment = function () {\n  function StarSegment(name) {\n    \n\n    this.name = name;\n  }\n\n  StarSegment.prototype.eachChar = function eachChar(callback) {\n    callback({ invalidChars: '', repeat: true });\n  };\n\n  StarSegment.prototype.regex = function regex() {\n    return '(.+)';\n  };\n\n  StarSegment.prototype.generate = function generate(params, consumed) {\n    consumed[this.name] = true;\n    return params[this.name];\n  };\n\n  return StarSegment;\n}();\n\nvar EpsilonSegment = function () {\n  function EpsilonSegment() {\n    \n  }\n\n  EpsilonSegment.prototype.eachChar = function eachChar() {};\n\n  EpsilonSegment.prototype.regex = function regex() {\n    return '';\n  };\n\n  EpsilonSegment.prototype.generate = function generate() {\n    return '';\n  };\n\n  return EpsilonSegment;\n}();\n\nvar aurelia_route_recognizer_RouteRecognizer = function () {\n  function RouteRecognizer() {\n    \n\n    this.rootState = new State();\n    this.names = {};\n    this.routes = new Map();\n  }\n\n  RouteRecognizer.prototype.add = function add(route) {\n    var _this = this;\n\n    if (Array.isArray(route)) {\n      route.forEach(function (r) {\n        return _this.add(r);\n      });\n      return undefined;\n    }\n\n    var currentState = this.rootState;\n    var skippableStates = [];\n    var regex = '^';\n    var types = { statics: 0, dynamics: 0, stars: 0 };\n    var names = [];\n    var routeName = route.handler.name;\n    var isEmpty = true;\n    var segments = parse(route.path, names, types, route.caseSensitive);\n\n    for (var i = 0, ii = segments.length; i < ii; i++) {\n      var segment = segments[i];\n      if (segment instanceof EpsilonSegment) {\n        continue;\n      }\n\n      var _addSegment = addSegment(currentState, segment),\n          firstState = _addSegment[0],\n          nextState = _addSegment[1];\n\n      for (var j = 0, jj = skippableStates.length; j < jj; j++) {\n        skippableStates[j].nextStates.push(firstState);\n      }\n\n      if (segment.optional) {\n        skippableStates.push(nextState);\n        regex += '(?:/' + segment.regex() + ')?';\n      } else {\n        currentState = nextState;\n        regex += '/' + segment.regex();\n        skippableStates.length = 0;\n        isEmpty = false;\n      }\n    }\n\n    if (isEmpty) {\n      currentState = currentState.put({ validChars: '/' });\n      regex += '/?';\n    }\n\n    var handlers = [{ handler: route.handler, names: names }];\n\n    this.routes.set(route.handler, { segments: segments, handlers: handlers });\n    if (routeName) {\n      var routeNames = Array.isArray(routeName) ? routeName : [routeName];\n      for (var _i2 = 0; _i2 < routeNames.length; _i2++) {\n        if (!(routeNames[_i2] in this.names)) {\n          this.names[routeNames[_i2]] = { segments: segments, handlers: handlers };\n        }\n      }\n    }\n\n    for (var _i3 = 0; _i3 < skippableStates.length; _i3++) {\n      var state = skippableStates[_i3];\n      state.handlers = handlers;\n      state.regex = new RegExp(regex + '$', route.caseSensitive ? '' : 'i');\n      state.types = types;\n    }\n\n    currentState.handlers = handlers;\n    currentState.regex = new RegExp(regex + '$', route.caseSensitive ? '' : 'i');\n    currentState.types = types;\n\n    return currentState;\n  };\n\n  RouteRecognizer.prototype.getRoute = function getRoute(nameOrRoute) {\n    return typeof nameOrRoute === 'string' ? this.names[nameOrRoute] : this.routes.get(nameOrRoute);\n  };\n\n  RouteRecognizer.prototype.handlersFor = function handlersFor(nameOrRoute) {\n    var route = this.getRoute(nameOrRoute);\n    if (!route) {\n      throw new Error('There is no route named ' + nameOrRoute);\n    }\n\n    return [].concat(route.handlers);\n  };\n\n  RouteRecognizer.prototype.hasRoute = function hasRoute(nameOrRoute) {\n    return !!this.getRoute(nameOrRoute);\n  };\n\n  RouteRecognizer.prototype.generate = function generate(nameOrRoute, params) {\n    var route = this.getRoute(nameOrRoute);\n    if (!route) {\n      throw new Error('There is no route named ' + nameOrRoute);\n    }\n\n    var handler = route.handlers[0].handler;\n    if (handler.generationUsesHref) {\n      return handler.href;\n    }\n\n    var routeParams = Object.assign({}, params);\n    var segments = route.segments;\n    var consumed = {};\n    var output = '';\n\n    for (var i = 0, l = segments.length; i < l; i++) {\n      var segment = segments[i];\n\n      if (segment instanceof EpsilonSegment) {\n        continue;\n      }\n\n      var segmentValue = segment.generate(routeParams, consumed);\n      if (segmentValue === null || segmentValue === undefined) {\n        if (!segment.optional) {\n          throw new Error('A value is required for route parameter \\'' + segment.name + '\\' in route \\'' + nameOrRoute + '\\'.');\n        }\n      } else {\n        output += '/';\n        output += segmentValue;\n      }\n    }\n\n    if (output.charAt(0) !== '/') {\n      output = '/' + output;\n    }\n\n    for (var param in consumed) {\n      delete routeParams[param];\n    }\n\n    var queryString = Object(aurelia_path[\"buildQueryString\"])(routeParams);\n    output += queryString ? '?' + queryString : '';\n\n    return output;\n  };\n\n  RouteRecognizer.prototype.recognize = function recognize(path) {\n    var states = [this.rootState];\n    var queryParams = {};\n    var isSlashDropped = false;\n    var normalizedPath = path;\n\n    var queryStart = normalizedPath.indexOf('?');\n    if (queryStart !== -1) {\n      var queryString = normalizedPath.substr(queryStart + 1, normalizedPath.length);\n      normalizedPath = normalizedPath.substr(0, queryStart);\n      queryParams = Object(aurelia_path[\"parseQueryString\"])(queryString);\n    }\n\n    normalizedPath = decodeURI(normalizedPath);\n\n    if (normalizedPath.charAt(0) !== '/') {\n      normalizedPath = '/' + normalizedPath;\n    }\n\n    var pathLen = normalizedPath.length;\n    if (pathLen > 1 && normalizedPath.charAt(pathLen - 1) === '/') {\n      normalizedPath = normalizedPath.substr(0, pathLen - 1);\n      isSlashDropped = true;\n    }\n\n    for (var i = 0, l = normalizedPath.length; i < l; i++) {\n      states = recognizeChar(states, normalizedPath.charAt(i));\n      if (!states.length) {\n        break;\n      }\n    }\n\n    var solutions = [];\n    for (var _i4 = 0, _l = states.length; _i4 < _l; _i4++) {\n      if (states[_i4].handlers) {\n        solutions.push(states[_i4]);\n      }\n    }\n\n    states = sortSolutions(solutions);\n\n    var state = solutions[0];\n    if (state && state.handlers) {\n      if (isSlashDropped && state.regex.source.slice(-5) === '(.+)$') {\n        normalizedPath = normalizedPath + '/';\n      }\n\n      return findHandler(state, normalizedPath, queryParams);\n    }\n  };\n\n  return RouteRecognizer;\n}();\n\nvar RecognizeResults = function RecognizeResults(queryParams) {\n  \n\n  this.splice = Array.prototype.splice;\n  this.slice = Array.prototype.slice;\n  this.push = Array.prototype.push;\n  this.length = 0;\n  this.queryParams = queryParams || {};\n};\n\nfunction parse(route, names, types, caseSensitive) {\n  var normalizedRoute = route;\n  if (route.charAt(0) === '/') {\n    normalizedRoute = route.substr(1);\n  }\n\n  var results = [];\n\n  var splitRoute = normalizedRoute.split('/');\n  for (var i = 0, ii = splitRoute.length; i < ii; ++i) {\n    var segment = splitRoute[i];\n\n    var match = segment.match(/^:([^?]+)(\\?)?$/);\n    if (match) {\n      var _match = match,\n          _name = _match[1],\n          optional = _match[2];\n\n      if (_name.indexOf('=') !== -1) {\n        throw new Error('Parameter ' + _name + ' in route ' + route + ' has a default value, which is not supported.');\n      }\n      results.push(new DynamicSegment(_name, !!optional));\n      names.push(_name);\n      types.dynamics++;\n      continue;\n    }\n\n    match = segment.match(/^\\*(.+)$/);\n    if (match) {\n      results.push(new StarSegment(match[1]));\n      names.push(match[1]);\n      types.stars++;\n    } else if (segment === '') {\n      results.push(new EpsilonSegment());\n    } else {\n      results.push(new StaticSegment(segment, caseSensitive));\n      types.statics++;\n    }\n  }\n\n  return results;\n}\n\nfunction sortSolutions(states) {\n  return states.sort(function (a, b) {\n    if (a.types.stars !== b.types.stars) {\n      return a.types.stars - b.types.stars;\n    }\n\n    if (a.types.stars) {\n      if (a.types.statics !== b.types.statics) {\n        return b.types.statics - a.types.statics;\n      }\n      if (a.types.dynamics !== b.types.dynamics) {\n        return b.types.dynamics - a.types.dynamics;\n      }\n    }\n\n    if (a.types.dynamics !== b.types.dynamics) {\n      return a.types.dynamics - b.types.dynamics;\n    }\n\n    if (a.types.statics !== b.types.statics) {\n      return b.types.statics - a.types.statics;\n    }\n\n    return 0;\n  });\n}\n\nfunction recognizeChar(states, ch) {\n  var nextStates = [];\n\n  for (var i = 0, l = states.length; i < l; i++) {\n    var state = states[i];\n    nextStates.push.apply(nextStates, state.match(ch));\n  }\n\n  return nextStates;\n}\n\nfunction findHandler(state, path, queryParams) {\n  var handlers = state.handlers;\n  var regex = state.regex;\n  var captures = path.match(regex);\n  var currentCapture = 1;\n  var result = new RecognizeResults(queryParams);\n\n  for (var i = 0, l = handlers.length; i < l; i++) {\n    var _handler = handlers[i];\n    var _names = _handler.names;\n    var _params = {};\n\n    for (var j = 0, m = _names.length; j < m; j++) {\n      _params[_names[j]] = captures[currentCapture++];\n    }\n\n    result.push({ handler: _handler.handler, params: _params, isDynamic: !!_names.length });\n  }\n\n  return result;\n}\n\nfunction addSegment(currentState, segment) {\n  var firstState = currentState.put({ validChars: '/' });\n  var nextState = firstState;\n  segment.eachChar(function (ch) {\n    nextState = nextState.put(ch);\n  });\n\n  return [firstState, nextState];\n}\n// EXTERNAL MODULE: ./node_modules/aurelia-event-aggregator/dist/native-modules/aurelia-event-aggregator.js\nvar aurelia_event_aggregator = __webpack_require__(\"aurelia-event-aggregator\");\n\n// CONCATENATED MODULE: ./node_modules/aurelia-router/dist/native-modules/aurelia-router.js\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ActivateNextStep\", function() { return ActivateNextStep; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AppRouter\", function() { return aurelia_router_AppRouter; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"BuildNavigationPlanStep\", function() { return BuildNavigationPlanStep; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CanActivateNextStep\", function() { return CanActivateNextStep; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CanDeactivatePreviousStep\", function() { return CanDeactivatePreviousStep; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CommitChangesStep\", function() { return CommitChangesStep; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DeactivatePreviousStep\", function() { return DeactivatePreviousStep; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LoadRouteStep\", function() { return LoadRouteStep; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NavModel\", function() { return NavModel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NavigationInstruction\", function() { return NavigationInstruction; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Pipeline\", function() { return Pipeline; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PipelineProvider\", function() { return aurelia_router_PipelineProvider; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PipelineSlotName\", function() { return PipelineSlotName; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PipelineStatus\", function() { return PipelineStatus; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Redirect\", function() { return Redirect; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RedirectToRoute\", function() { return RedirectToRoute; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RouteLoader\", function() { return RouteLoader; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Router\", function() { return aurelia_router_Router; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RouterConfiguration\", function() { return RouterConfiguration; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RouterEvent\", function() { return RouterEvent; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"activationStrategy\", function() { return activationStrategy; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isNavigationCommand\", function() { return isNavigationCommand; });\n\n\n\n\n\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\n\n/**\r\n * Class used to represent an instruction during a navigation.\r\n */\r\nvar NavigationInstruction = /** @class */ (function () {\r\n    function NavigationInstruction(init) {\r\n        /**\r\n         * Current built viewport plan of this nav instruction\r\n         */\r\n        this.plan = null;\r\n        this.options = {};\r\n        Object.assign(this, init);\r\n        this.params = this.params || {};\r\n        this.viewPortInstructions = {};\r\n        var ancestorParams = [];\r\n        var current = this;\r\n        do {\r\n            var currentParams = Object.assign({}, current.params);\r\n            if (current.config && current.config.hasChildRouter) {\r\n                // remove the param for the injected child route segment\r\n                delete currentParams[current.getWildCardName()];\r\n            }\r\n            ancestorParams.unshift(currentParams);\r\n            current = current.parentInstruction;\r\n        } while (current);\r\n        var allParams = Object.assign.apply(Object, [{}, this.queryParams].concat(ancestorParams));\r\n        this.lifecycleArgs = [allParams, this.config, this];\r\n    }\r\n    /**\r\n     * Gets an array containing this instruction and all child instructions for the current navigation.\r\n     */\r\n    NavigationInstruction.prototype.getAllInstructions = function () {\r\n        var instructions = [this];\r\n        var viewPortInstructions = this.viewPortInstructions;\r\n        for (var key in viewPortInstructions) {\r\n            var childInstruction = viewPortInstructions[key].childNavigationInstruction;\r\n            if (childInstruction) {\r\n                instructions.push.apply(instructions, childInstruction.getAllInstructions());\r\n            }\r\n        }\r\n        return instructions;\r\n    };\r\n    /**\r\n     * Gets an array containing the instruction and all child instructions for the previous navigation.\r\n     * Previous instructions are no longer available after navigation completes.\r\n     */\r\n    NavigationInstruction.prototype.getAllPreviousInstructions = function () {\r\n        return this.getAllInstructions().map(function (c) { return c.previousInstruction; }).filter(function (c) { return c; });\r\n    };\r\n    NavigationInstruction.prototype.addViewPortInstruction = function (nameOrInitOptions, strategy, moduleId, component) {\r\n        var viewPortInstruction;\r\n        var viewPortName = typeof nameOrInitOptions === 'string' ? nameOrInitOptions : nameOrInitOptions.name;\r\n        var lifecycleArgs = this.lifecycleArgs;\r\n        var config = Object.assign({}, lifecycleArgs[1], { currentViewPort: viewPortName });\r\n        if (typeof nameOrInitOptions === 'string') {\r\n            viewPortInstruction = {\r\n                name: nameOrInitOptions,\r\n                strategy: strategy,\r\n                moduleId: moduleId,\r\n                component: component,\r\n                childRouter: component.childRouter,\r\n                lifecycleArgs: [lifecycleArgs[0], config, lifecycleArgs[2]]\r\n            };\r\n        }\r\n        else {\r\n            viewPortInstruction = {\r\n                name: viewPortName,\r\n                strategy: nameOrInitOptions.strategy,\r\n                component: nameOrInitOptions.component,\r\n                moduleId: nameOrInitOptions.moduleId,\r\n                childRouter: nameOrInitOptions.component.childRouter,\r\n                lifecycleArgs: [lifecycleArgs[0], config, lifecycleArgs[2]]\r\n            };\r\n        }\r\n        return this.viewPortInstructions[viewPortName] = viewPortInstruction;\r\n    };\r\n    /**\r\n     * Gets the name of the route pattern's wildcard parameter, if applicable.\r\n     */\r\n    NavigationInstruction.prototype.getWildCardName = function () {\r\n        // todo: potential issue, or at least unsafe typings\r\n        var configRoute = this.config.route;\r\n        var wildcardIndex = configRoute.lastIndexOf('*');\r\n        return configRoute.substr(wildcardIndex + 1);\r\n    };\r\n    /**\r\n     * Gets the path and query string created by filling the route\r\n     * pattern's wildcard parameter with the matching param.\r\n     */\r\n    NavigationInstruction.prototype.getWildcardPath = function () {\r\n        var wildcardName = this.getWildCardName();\r\n        var path = this.params[wildcardName] || '';\r\n        var queryString = this.queryString;\r\n        if (queryString) {\r\n            path += '?' + queryString;\r\n        }\r\n        return path;\r\n    };\r\n    /**\r\n     * Gets the instruction's base URL, accounting for wildcard route parameters.\r\n     */\r\n    NavigationInstruction.prototype.getBaseUrl = function () {\r\n        var _this = this;\r\n        var $encodeURI = encodeURI;\r\n        var fragment = decodeURI(this.fragment);\r\n        if (fragment === '') {\r\n            var nonEmptyRoute = this.router.routes.find(function (route) {\r\n                return route.name === _this.config.name &&\r\n                    route.route !== '';\r\n            });\r\n            if (nonEmptyRoute) {\r\n                fragment = nonEmptyRoute.route;\r\n            }\r\n        }\r\n        if (!this.params) {\r\n            return $encodeURI(fragment);\r\n        }\r\n        var wildcardName = this.getWildCardName();\r\n        var path = this.params[wildcardName] || '';\r\n        if (!path) {\r\n            return $encodeURI(fragment);\r\n        }\r\n        return $encodeURI(fragment.substr(0, fragment.lastIndexOf(path)));\r\n    };\r\n    /**\r\n     * Finalize a viewport instruction\r\n     * @internal\r\n     */\r\n    NavigationInstruction.prototype._commitChanges = function (waitToSwap) {\r\n        var _this = this;\r\n        var router = this.router;\r\n        router.currentInstruction = this;\r\n        var previousInstruction = this.previousInstruction;\r\n        if (previousInstruction) {\r\n            previousInstruction.config.navModel.isActive = false;\r\n        }\r\n        this.config.navModel.isActive = true;\r\n        router.refreshNavigation();\r\n        var loads = [];\r\n        var delaySwaps = [];\r\n        var viewPortInstructions = this.viewPortInstructions;\r\n        var _loop_1 = function (viewPortName) {\r\n            var viewPortInstruction = viewPortInstructions[viewPortName];\r\n            var viewPort = router.viewPorts[viewPortName];\r\n            if (!viewPort) {\r\n                throw new Error(\"There was no router-view found in the view for \" + viewPortInstruction.moduleId + \".\");\r\n            }\r\n            var childNavInstruction = viewPortInstruction.childNavigationInstruction;\r\n            if (viewPortInstruction.strategy === \"replace\" /* Replace */) {\r\n                if (childNavInstruction && childNavInstruction.parentCatchHandler) {\r\n                    loads.push(childNavInstruction._commitChanges(waitToSwap));\r\n                }\r\n                else {\r\n                    if (waitToSwap) {\r\n                        delaySwaps.push({ viewPort: viewPort, viewPortInstruction: viewPortInstruction });\r\n                    }\r\n                    loads.push(viewPort\r\n                        .process(viewPortInstruction, waitToSwap)\r\n                        .then(function () { return childNavInstruction\r\n                        ? childNavInstruction._commitChanges(waitToSwap)\r\n                        : Promise.resolve(); }));\r\n                }\r\n            }\r\n            else {\r\n                if (childNavInstruction) {\r\n                    loads.push(childNavInstruction._commitChanges(waitToSwap));\r\n                }\r\n            }\r\n        };\r\n        for (var viewPortName in viewPortInstructions) {\r\n            _loop_1(viewPortName);\r\n        }\r\n        return Promise\r\n            .all(loads)\r\n            .then(function () {\r\n            delaySwaps.forEach(function (x) { return x.viewPort.swap(x.viewPortInstruction); });\r\n            return null;\r\n        })\r\n            .then(function () { return prune(_this); });\r\n    };\r\n    /**@internal */\r\n    NavigationInstruction.prototype._updateTitle = function () {\r\n        var router = this.router;\r\n        var title = this._buildTitle(router.titleSeparator);\r\n        if (title) {\r\n            router.history.setTitle(title);\r\n        }\r\n    };\r\n    /**@internal */\r\n    NavigationInstruction.prototype._buildTitle = function (separator) {\r\n        if (separator === void 0) { separator = ' | '; }\r\n        var title = '';\r\n        var childTitles = [];\r\n        var navModelTitle = this.config.navModel.title;\r\n        var instructionRouter = this.router;\r\n        var viewPortInstructions = this.viewPortInstructions;\r\n        if (navModelTitle) {\r\n            title = instructionRouter.transformTitle(navModelTitle);\r\n        }\r\n        for (var viewPortName in viewPortInstructions) {\r\n            var viewPortInstruction = viewPortInstructions[viewPortName];\r\n            var child_nav_instruction = viewPortInstruction.childNavigationInstruction;\r\n            if (child_nav_instruction) {\r\n                var childTitle = child_nav_instruction._buildTitle(separator);\r\n                if (childTitle) {\r\n                    childTitles.push(childTitle);\r\n                }\r\n            }\r\n        }\r\n        if (childTitles.length) {\r\n            title = childTitles.join(separator) + (title ? separator : '') + title;\r\n        }\r\n        if (instructionRouter.title) {\r\n            title += (title ? separator : '') + instructionRouter.transformTitle(instructionRouter.title);\r\n        }\r\n        return title;\r\n    };\r\n    return NavigationInstruction;\r\n}());\r\nvar prune = function (instruction) {\r\n    instruction.previousInstruction = null;\r\n    instruction.plan = null;\r\n};\n\n/**\r\n* Class for storing and interacting with a route's navigation settings.\r\n*/\r\nvar NavModel = /** @class */ (function () {\r\n    function NavModel(router, relativeHref) {\r\n        /**\r\n        * True if this nav item is currently active.\r\n        */\r\n        this.isActive = false;\r\n        /**\r\n        * The title.\r\n        */\r\n        this.title = null;\r\n        /**\r\n        * This nav item's absolute href.\r\n        */\r\n        this.href = null;\r\n        /**\r\n        * This nav item's relative href.\r\n        */\r\n        this.relativeHref = null;\r\n        /**\r\n        * Data attached to the route at configuration time.\r\n        */\r\n        this.settings = {};\r\n        /**\r\n        * The route config.\r\n        */\r\n        this.config = null;\r\n        this.router = router;\r\n        this.relativeHref = relativeHref;\r\n    }\r\n    /**\r\n    * Sets the route's title and updates document.title.\r\n    *  If the a navigation is in progress, the change will be applied\r\n    *  to document.title when the navigation completes.\r\n    *\r\n    * @param title The new title.\r\n    */\r\n    NavModel.prototype.setTitle = function (title) {\r\n        this.title = title;\r\n        if (this.isActive) {\r\n            this.router.updateTitle();\r\n        }\r\n    };\r\n    return NavModel;\r\n}());\n\nfunction _normalizeAbsolutePath(path, hasPushState, absolute) {\r\n    if (absolute === void 0) { absolute = false; }\r\n    if (!hasPushState && path[0] !== '#') {\r\n        path = '#' + path;\r\n    }\r\n    if (hasPushState && absolute) {\r\n        path = path.substring(1, path.length);\r\n    }\r\n    return path;\r\n}\r\nfunction _createRootedPath(fragment, baseUrl, hasPushState, absolute) {\r\n    if (isAbsoluteUrl.test(fragment)) {\r\n        return fragment;\r\n    }\r\n    var path = '';\r\n    if (baseUrl.length && baseUrl[0] !== '/') {\r\n        path += '/';\r\n    }\r\n    path += baseUrl;\r\n    if ((!path.length || path[path.length - 1] !== '/') && fragment[0] !== '/') {\r\n        path += '/';\r\n    }\r\n    if (path.length && path[path.length - 1] === '/' && fragment[0] === '/') {\r\n        path = path.substring(0, path.length - 1);\r\n    }\r\n    return _normalizeAbsolutePath(path + fragment, hasPushState, absolute);\r\n}\r\nfunction _resolveUrl(fragment, baseUrl, hasPushState) {\r\n    if (isRootedPath.test(fragment)) {\r\n        return _normalizeAbsolutePath(fragment, hasPushState);\r\n    }\r\n    return _createRootedPath(fragment, baseUrl, hasPushState);\r\n}\r\nfunction _ensureArrayWithSingleRoutePerConfig(config) {\r\n    var routeConfigs = [];\r\n    if (Array.isArray(config.route)) {\r\n        for (var i = 0, ii = config.route.length; i < ii; ++i) {\r\n            var current = Object.assign({}, config);\r\n            current.route = config.route[i];\r\n            routeConfigs.push(current);\r\n        }\r\n    }\r\n    else {\r\n        routeConfigs.push(Object.assign({}, config));\r\n    }\r\n    return routeConfigs;\r\n}\r\nvar isRootedPath = /^#?\\//;\r\nvar isAbsoluteUrl = /^([a-z][a-z0-9+\\-.]*:)?\\/\\//i;\n\n/**\r\n * Class used to configure a [[Router]] instance.\r\n *\r\n * @constructor\r\n */\r\nvar RouterConfiguration = /** @class */ (function () {\r\n    function RouterConfiguration() {\r\n        this.instructions = [];\r\n        this.options = {};\r\n        this.pipelineSteps = [];\r\n    }\r\n    /**\r\n     * Adds a step to be run during the [[Router]]'s navigation pipeline.\r\n     *\r\n     * @param name The name of the pipeline slot to insert the step into.\r\n     * @param step The pipeline step.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.addPipelineStep = function (name, step) {\r\n        if (step === null || step === undefined) {\r\n            throw new Error('Pipeline step cannot be null or undefined.');\r\n        }\r\n        this.pipelineSteps.push({ name: name, step: step });\r\n        return this;\r\n    };\r\n    /**\r\n     * Adds a step to be run during the [[Router]]'s authorize pipeline slot.\r\n     *\r\n     * @param step The pipeline step.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.addAuthorizeStep = function (step) {\r\n        return this.addPipelineStep(\"authorize\" /* Authorize */, step);\r\n    };\r\n    /**\r\n     * Adds a step to be run during the [[Router]]'s preActivate pipeline slot.\r\n     *\r\n     * @param step The pipeline step.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.addPreActivateStep = function (step) {\r\n        return this.addPipelineStep(\"preActivate\" /* PreActivate */, step);\r\n    };\r\n    /**\r\n     * Adds a step to be run during the [[Router]]'s preRender pipeline slot.\r\n     *\r\n     * @param step The pipeline step.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.addPreRenderStep = function (step) {\r\n        return this.addPipelineStep(\"preRender\" /* PreRender */, step);\r\n    };\r\n    /**\r\n     * Adds a step to be run during the [[Router]]'s postRender pipeline slot.\r\n     *\r\n     * @param step The pipeline step.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.addPostRenderStep = function (step) {\r\n        return this.addPipelineStep(\"postRender\" /* PostRender */, step);\r\n    };\r\n    /**\r\n     * Configures a route that will be used if there is no previous location available on navigation cancellation.\r\n     *\r\n     * @param fragment The URL fragment to use as the navigation destination.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.fallbackRoute = function (fragment) {\r\n        this._fallbackRoute = fragment;\r\n        return this;\r\n    };\r\n    /**\r\n     * Maps one or more routes to be registered with the router.\r\n     *\r\n     * @param route The [[RouteConfig]] to map, or an array of [[RouteConfig]] to map.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.map = function (route) {\r\n        var _this = this;\r\n        if (Array.isArray(route)) {\r\n            route.forEach(function (r) { return _this.map(r); });\r\n            return this;\r\n        }\r\n        return this.mapRoute(route);\r\n    };\r\n    /**\r\n     * Configures defaults to use for any view ports.\r\n     *\r\n     * @param viewPortConfig a view port configuration object to use as a\r\n     *  default, of the form { viewPortName: { moduleId } }.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.useViewPortDefaults = function (viewPortConfig) {\r\n        this.viewPortDefaults = viewPortConfig;\r\n        return this;\r\n    };\r\n    /**\r\n     * Maps a single route to be registered with the router.\r\n     *\r\n     * @param route The [[RouteConfig]] to map.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.mapRoute = function (config) {\r\n        this.instructions.push(function (router) {\r\n            var routeConfigs = _ensureArrayWithSingleRoutePerConfig(config);\r\n            var navModel;\r\n            for (var i = 0, ii = routeConfigs.length; i < ii; ++i) {\r\n                var routeConfig = routeConfigs[i];\r\n                routeConfig.settings = routeConfig.settings || {};\r\n                if (!navModel) {\r\n                    navModel = router.createNavModel(routeConfig);\r\n                }\r\n                router.addRoute(routeConfig, navModel);\r\n            }\r\n        });\r\n        return this;\r\n    };\r\n    /**\r\n     * Registers an unknown route handler to be run when the URL fragment doesn't match any registered routes.\r\n     *\r\n     * @param config A string containing a moduleId to load, or a [[RouteConfig]], or a function that takes the\r\n     *  [[NavigationInstruction]] and selects a moduleId to load.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.mapUnknownRoutes = function (config) {\r\n        this.unknownRouteConfig = config;\r\n        return this;\r\n    };\r\n    /**\r\n     * Applies the current configuration to the specified [[Router]].\r\n     *\r\n     * @param router The [[Router]] to apply the configuration to.\r\n     */\r\n    RouterConfiguration.prototype.exportToRouter = function (router) {\r\n        var instructions = this.instructions;\r\n        for (var i = 0, ii = instructions.length; i < ii; ++i) {\r\n            instructions[i](router);\r\n        }\r\n        var _a = this, title = _a.title, titleSeparator = _a.titleSeparator, unknownRouteConfig = _a.unknownRouteConfig, _fallbackRoute = _a._fallbackRoute, viewPortDefaults = _a.viewPortDefaults;\r\n        if (title) {\r\n            router.title = title;\r\n        }\r\n        if (titleSeparator) {\r\n            router.titleSeparator = titleSeparator;\r\n        }\r\n        if (unknownRouteConfig) {\r\n            router.handleUnknownRoutes(unknownRouteConfig);\r\n        }\r\n        if (_fallbackRoute) {\r\n            router.fallbackRoute = _fallbackRoute;\r\n        }\r\n        if (viewPortDefaults) {\r\n            router.useViewPortDefaults(viewPortDefaults);\r\n        }\r\n        Object.assign(router.options, this.options);\r\n        var pipelineSteps = this.pipelineSteps;\r\n        var pipelineStepCount = pipelineSteps.length;\r\n        if (pipelineStepCount) {\r\n            if (!router.isRoot) {\r\n                throw new Error('Pipeline steps can only be added to the root router');\r\n            }\r\n            var pipelineProvider = router.pipelineProvider;\r\n            for (var i = 0, ii = pipelineStepCount; i < ii; ++i) {\r\n                var _b = pipelineSteps[i], name_1 = _b.name, step = _b.step;\r\n                pipelineProvider.addStep(name_1, step);\r\n            }\r\n        }\r\n    };\r\n    return RouterConfiguration;\r\n}());\n\n/**\r\n * The primary class responsible for handling routing and navigation.\r\n */\r\nvar aurelia_router_Router = /** @class */ (function () {\r\n    /**\r\n     * @param container The [[Container]] to use when child routers.\r\n     * @param history The [[History]] implementation to delegate navigation requests to.\r\n     */\r\n    function Router(container, history) {\r\n        var _this = this;\r\n        /**\r\n         * The parent router, or null if this instance is not a child router.\r\n         */\r\n        this.parent = null;\r\n        this.options = {};\r\n        /**\r\n         * The defaults used when a viewport lacks specified content\r\n         */\r\n        this.viewPortDefaults = {};\r\n        /**\r\n         * Extension point to transform the document title before it is built and displayed.\r\n         * By default, child routers delegate to the parent router, and the app router\r\n         * returns the title unchanged.\r\n         */\r\n        this.transformTitle = function (title) {\r\n            if (_this.parent) {\r\n                return _this.parent.transformTitle(title);\r\n            }\r\n            return title;\r\n        };\r\n        this.container = container;\r\n        this.history = history;\r\n        this.reset();\r\n    }\r\n    /**\r\n     * Fully resets the router's internal state. Primarily used internally by the framework when multiple calls to setRoot are made.\r\n     * Use with caution (actually, avoid using this). Do not use this to simply change your navigation model.\r\n     */\r\n    Router.prototype.reset = function () {\r\n        var _this = this;\r\n        this.viewPorts = {};\r\n        this.routes = [];\r\n        this.baseUrl = '';\r\n        this.isConfigured = false;\r\n        this.isNavigating = false;\r\n        this.isExplicitNavigation = false;\r\n        this.isExplicitNavigationBack = false;\r\n        this.isNavigatingFirst = false;\r\n        this.isNavigatingNew = false;\r\n        this.isNavigatingRefresh = false;\r\n        this.isNavigatingForward = false;\r\n        this.isNavigatingBack = false;\r\n        this.couldDeactivate = false;\r\n        this.navigation = [];\r\n        this.currentInstruction = null;\r\n        this.viewPortDefaults = {};\r\n        this._fallbackOrder = 100;\r\n        this._recognizer = new aurelia_route_recognizer_RouteRecognizer();\r\n        this._childRecognizer = new aurelia_route_recognizer_RouteRecognizer();\r\n        this._configuredPromise = new Promise(function (resolve) {\r\n            _this._resolveConfiguredPromise = resolve;\r\n        });\r\n    };\r\n    Object.defineProperty(Router.prototype, \"isRoot\", {\r\n        /**\r\n         * Gets a value indicating whether or not this [[Router]] is the root in the router tree. I.e., it has no parent.\r\n         */\r\n        get: function () {\r\n            return !this.parent;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Registers a viewPort to be used as a rendering target for activated routes.\r\n     *\r\n     * @param viewPort The viewPort.\r\n     * @param name The name of the viewPort. 'default' if unspecified.\r\n     */\r\n    Router.prototype.registerViewPort = function (viewPort, name) {\r\n        name = name || 'default';\r\n        this.viewPorts[name] = viewPort;\r\n    };\r\n    /**\r\n     * Returns a Promise that resolves when the router is configured.\r\n     */\r\n    Router.prototype.ensureConfigured = function () {\r\n        return this._configuredPromise;\r\n    };\r\n    /**\r\n     * Configures the router.\r\n     *\r\n     * @param callbackOrConfig The [[RouterConfiguration]] or a callback that takes a [[RouterConfiguration]].\r\n     */\r\n    Router.prototype.configure = function (callbackOrConfig) {\r\n        var _this = this;\r\n        this.isConfigured = true;\r\n        var result = callbackOrConfig;\r\n        var config;\r\n        if (typeof callbackOrConfig === 'function') {\r\n            config = new RouterConfiguration();\r\n            result = callbackOrConfig(config);\r\n        }\r\n        return Promise\r\n            .resolve(result)\r\n            .then(function (c) {\r\n            if (c && c.exportToRouter) {\r\n                config = c;\r\n            }\r\n            config.exportToRouter(_this);\r\n            _this.isConfigured = true;\r\n            _this._resolveConfiguredPromise();\r\n        });\r\n    };\r\n    /**\r\n     * Navigates to a new location.\r\n     *\r\n     * @param fragment The URL fragment to use as the navigation destination.\r\n     * @param options The navigation options.\r\n     */\r\n    Router.prototype.navigate = function (fragment, options) {\r\n        if (!this.isConfigured && this.parent) {\r\n            return this.parent.navigate(fragment, options);\r\n        }\r\n        this.isExplicitNavigation = true;\r\n        return this.history.navigate(_resolveUrl(fragment, this.baseUrl, this.history._hasPushState), options);\r\n    };\r\n    /**\r\n     * Navigates to a new location corresponding to the route and params specified. Equivallent to [[Router.generate]] followed\r\n     * by [[Router.navigate]].\r\n     *\r\n     * @param route The name of the route to use when generating the navigation location.\r\n     * @param params The route parameters to be used when populating the route pattern.\r\n     * @param options The navigation options.\r\n     */\r\n    Router.prototype.navigateToRoute = function (route, params, options) {\r\n        var path = this.generate(route, params);\r\n        return this.navigate(path, options);\r\n    };\r\n    /**\r\n     * Navigates back to the most recent location in history.\r\n     */\r\n    Router.prototype.navigateBack = function () {\r\n        this.isExplicitNavigationBack = true;\r\n        this.history.navigateBack();\r\n    };\r\n    /**\r\n     * Creates a child router of the current router.\r\n     *\r\n     * @param container The [[Container]] to provide to the child router. Uses the current [[Router]]'s [[Container]] if unspecified.\r\n     * @returns {Router} The new child Router.\r\n     */\r\n    Router.prototype.createChild = function (container) {\r\n        var childRouter = new Router(container || this.container.createChild(), this.history);\r\n        childRouter.parent = this;\r\n        return childRouter;\r\n    };\r\n    /**\r\n     * Generates a URL fragment matching the specified route pattern.\r\n     *\r\n     * @param name The name of the route whose pattern should be used to generate the fragment.\r\n     * @param params The route params to be used to populate the route pattern.\r\n     * @param options If options.absolute = true, then absolute url will be generated; otherwise, it will be relative url.\r\n     * @returns {string} A string containing the generated URL fragment.\r\n     */\r\n    Router.prototype.generate = function (nameOrRoute, params, options) {\r\n        if (params === void 0) { params = {}; }\r\n        if (options === void 0) { options = {}; }\r\n        // A child recognizer generates routes for potential child routes. Any potential child route is added\r\n        // to the childRoute property of params for the childRouter to recognize. When generating routes, we\r\n        // use the childRecognizer when childRoute params are available to generate a child router enabled route.\r\n        var recognizer = 'childRoute' in params ? this._childRecognizer : this._recognizer;\r\n        var hasRoute = recognizer.hasRoute(nameOrRoute);\r\n        if (!hasRoute) {\r\n            if (this.parent) {\r\n                return this.parent.generate(nameOrRoute, params, options);\r\n            }\r\n            throw new Error(\"A route with name '\" + nameOrRoute + \"' could not be found. Check that `name: '\" + nameOrRoute + \"'` was specified in the route's config.\");\r\n        }\r\n        var path = recognizer.generate(nameOrRoute, params);\r\n        var rootedPath = _createRootedPath(path, this.baseUrl, this.history._hasPushState, options.absolute);\r\n        return options.absolute ? \"\" + this.history.getAbsoluteRoot() + rootedPath : rootedPath;\r\n    };\r\n    /**\r\n     * Creates a [[NavModel]] for the specified route config.\r\n     *\r\n     * @param config The route config.\r\n     */\r\n    Router.prototype.createNavModel = function (config) {\r\n        var navModel = new NavModel(this, 'href' in config\r\n            ? config.href\r\n            // potential error when config.route is a string[] ?\r\n            : config.route);\r\n        navModel.title = config.title;\r\n        navModel.order = config.nav;\r\n        navModel.href = config.href;\r\n        navModel.settings = config.settings;\r\n        navModel.config = config;\r\n        return navModel;\r\n    };\r\n    /**\r\n     * Registers a new route with the router.\r\n     *\r\n     * @param config The [[RouteConfig]].\r\n     * @param navModel The [[NavModel]] to use for the route. May be omitted for single-pattern routes.\r\n     */\r\n    Router.prototype.addRoute = function (config, navModel) {\r\n        if (Array.isArray(config.route)) {\r\n            var routeConfigs = _ensureArrayWithSingleRoutePerConfig(config);\r\n            // the following is wrong. todo: fix this after TS refactoring release\r\n            routeConfigs.forEach(this.addRoute.bind(this));\r\n            return;\r\n        }\r\n        validateRouteConfig(config);\r\n        if (!('viewPorts' in config) && !config.navigationStrategy) {\r\n            config.viewPorts = {\r\n                'default': {\r\n                    moduleId: config.moduleId,\r\n                    view: config.view\r\n                }\r\n            };\r\n        }\r\n        if (!navModel) {\r\n            navModel = this.createNavModel(config);\r\n        }\r\n        this.routes.push(config);\r\n        var path = config.route;\r\n        if (path.charAt(0) === '/') {\r\n            path = path.substr(1);\r\n        }\r\n        var caseSensitive = config.caseSensitive === true;\r\n        var state = this._recognizer.add({\r\n            path: path,\r\n            handler: config,\r\n            caseSensitive: caseSensitive\r\n        });\r\n        if (path) {\r\n            var settings = config.settings;\r\n            delete config.settings;\r\n            var withChild = JSON.parse(JSON.stringify(config));\r\n            config.settings = settings;\r\n            withChild.route = path + \"/*childRoute\";\r\n            withChild.hasChildRouter = true;\r\n            this._childRecognizer.add({\r\n                path: withChild.route,\r\n                handler: withChild,\r\n                caseSensitive: caseSensitive\r\n            });\r\n            withChild.navModel = navModel;\r\n            withChild.settings = config.settings;\r\n            withChild.navigationStrategy = config.navigationStrategy;\r\n        }\r\n        config.navModel = navModel;\r\n        var navigation = this.navigation;\r\n        if ((navModel.order || navModel.order === 0) && navigation.indexOf(navModel) === -1) {\r\n            if ((!navModel.href && navModel.href !== '') && (state.types.dynamics || state.types.stars)) {\r\n                throw new Error('Invalid route config for \"' + config.route + '\" : dynamic routes must specify an \"href:\" to be included in the navigation model.');\r\n            }\r\n            if (typeof navModel.order !== 'number') {\r\n                navModel.order = ++this._fallbackOrder;\r\n            }\r\n            navigation.push(navModel);\r\n            // this is a potential error / inconsistency between browsers\r\n            //\r\n            // MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort\r\n            // If compareFunction(a, b) returns 0, leave a and b unchanged with respect to each other,\r\n            // but sorted with respect to all different elements.\r\n            // Note: the ECMAscript standard does not guarantee this behaviour,\r\n            // and thus not all browsers (e.g. Mozilla versions dating back to at least 2003) respect this.\r\n            navigation.sort(function (a, b) { return a.order - b.order; });\r\n        }\r\n    };\r\n    /**\r\n     * Gets a value indicating whether or not this [[Router]] or one of its ancestors has a route registered with the specified name.\r\n     *\r\n     * @param name The name of the route to check.\r\n     */\r\n    Router.prototype.hasRoute = function (name) {\r\n        return !!(this._recognizer.hasRoute(name) || this.parent && this.parent.hasRoute(name));\r\n    };\r\n    /**\r\n     * Gets a value indicating whether or not this [[Router]] has a route registered with the specified name.\r\n     *\r\n     * @param name The name of the route to check.\r\n     */\r\n    Router.prototype.hasOwnRoute = function (name) {\r\n        return this._recognizer.hasRoute(name);\r\n    };\r\n    /**\r\n     * Register a handler to use when the incoming URL fragment doesn't match any registered routes.\r\n     *\r\n     * @param config The moduleId, or a function that selects the moduleId, or a [[RouteConfig]].\r\n     */\r\n    Router.prototype.handleUnknownRoutes = function (config) {\r\n        var _this = this;\r\n        if (!config) {\r\n            throw new Error('Invalid unknown route handler');\r\n        }\r\n        this.catchAllHandler = function (instruction) {\r\n            return _this\r\n                ._createRouteConfig(config, instruction)\r\n                .then(function (c) {\r\n                instruction.config = c;\r\n                return instruction;\r\n            });\r\n        };\r\n    };\r\n    /**\r\n     * Updates the document title using the current navigation instruction.\r\n     */\r\n    Router.prototype.updateTitle = function () {\r\n        var parentRouter = this.parent;\r\n        if (parentRouter) {\r\n            return parentRouter.updateTitle();\r\n        }\r\n        var currentInstruction = this.currentInstruction;\r\n        if (currentInstruction) {\r\n            currentInstruction._updateTitle();\r\n        }\r\n        return undefined;\r\n    };\r\n    /**\r\n     * Updates the navigation routes with hrefs relative to the current location.\r\n     * Note: This method will likely move to a plugin in a future release.\r\n     */\r\n    Router.prototype.refreshNavigation = function () {\r\n        var nav = this.navigation;\r\n        for (var i = 0, length_1 = nav.length; i < length_1; i++) {\r\n            var current = nav[i];\r\n            if (!current.config.href) {\r\n                current.href = _createRootedPath(current.relativeHref, this.baseUrl, this.history._hasPushState);\r\n            }\r\n            else {\r\n                current.href = _normalizeAbsolutePath(current.config.href, this.history._hasPushState);\r\n            }\r\n        }\r\n    };\r\n    /**\r\n     * Sets the default configuration for the view ports. This specifies how to\r\n     *  populate a view port for which no module is specified. The default is\r\n     *  an empty view/view-model pair.\r\n     */\r\n    Router.prototype.useViewPortDefaults = function ($viewPortDefaults) {\r\n        // a workaround to have strong typings while not requiring to expose interface ViewPortInstruction\r\n        var viewPortDefaults = $viewPortDefaults;\r\n        for (var viewPortName in viewPortDefaults) {\r\n            var viewPortConfig = viewPortDefaults[viewPortName];\r\n            this.viewPortDefaults[viewPortName] = {\r\n                moduleId: viewPortConfig.moduleId\r\n            };\r\n        }\r\n    };\r\n    /**@internal */\r\n    Router.prototype._refreshBaseUrl = function () {\r\n        var parentRouter = this.parent;\r\n        if (parentRouter) {\r\n            this.baseUrl = generateBaseUrl(parentRouter, parentRouter.currentInstruction);\r\n        }\r\n    };\r\n    /**@internal */\r\n    Router.prototype._createNavigationInstruction = function (url, parentInstruction) {\r\n        if (url === void 0) { url = ''; }\r\n        if (parentInstruction === void 0) { parentInstruction = null; }\r\n        var fragment = url;\r\n        var queryString = '';\r\n        var queryIndex = url.indexOf('?');\r\n        if (queryIndex !== -1) {\r\n            fragment = url.substr(0, queryIndex);\r\n            queryString = url.substr(queryIndex + 1);\r\n        }\r\n        var urlRecognizationResults = this._recognizer.recognize(url);\r\n        if (!urlRecognizationResults || !urlRecognizationResults.length) {\r\n            urlRecognizationResults = this._childRecognizer.recognize(url);\r\n        }\r\n        var instructionInit = {\r\n            fragment: fragment,\r\n            queryString: queryString,\r\n            config: null,\r\n            parentInstruction: parentInstruction,\r\n            previousInstruction: this.currentInstruction,\r\n            router: this,\r\n            options: {\r\n                compareQueryParams: this.options.compareQueryParams\r\n            }\r\n        };\r\n        var result;\r\n        if (urlRecognizationResults && urlRecognizationResults.length) {\r\n            var first = urlRecognizationResults[0];\r\n            var instruction = new NavigationInstruction(Object.assign({}, instructionInit, {\r\n                params: first.params,\r\n                queryParams: first.queryParams || urlRecognizationResults.queryParams,\r\n                config: first.config || first.handler\r\n            }));\r\n            if (typeof first.handler === 'function') {\r\n                result = evaluateNavigationStrategy(instruction, first.handler, first);\r\n            }\r\n            else if (first.handler && typeof first.handler.navigationStrategy === 'function') {\r\n                result = evaluateNavigationStrategy(instruction, first.handler.navigationStrategy, first.handler);\r\n            }\r\n            else {\r\n                result = Promise.resolve(instruction);\r\n            }\r\n        }\r\n        else if (this.catchAllHandler) {\r\n            var instruction = new NavigationInstruction(Object.assign({}, instructionInit, {\r\n                params: { path: fragment },\r\n                queryParams: urlRecognizationResults ? urlRecognizationResults.queryParams : {},\r\n                config: null // config will be created by the catchAllHandler\r\n            }));\r\n            result = evaluateNavigationStrategy(instruction, this.catchAllHandler);\r\n        }\r\n        else if (this.parent) {\r\n            var router = this._parentCatchAllHandler(this.parent);\r\n            if (router) {\r\n                var newParentInstruction = this._findParentInstructionFromRouter(router, parentInstruction);\r\n                var instruction = new NavigationInstruction(Object.assign({}, instructionInit, {\r\n                    params: { path: fragment },\r\n                    queryParams: urlRecognizationResults ? urlRecognizationResults.queryParams : {},\r\n                    router: router,\r\n                    parentInstruction: newParentInstruction,\r\n                    parentCatchHandler: true,\r\n                    config: null // config will be created by the chained parent catchAllHandler\r\n                }));\r\n                result = evaluateNavigationStrategy(instruction, router.catchAllHandler);\r\n            }\r\n        }\r\n        if (result && parentInstruction) {\r\n            this.baseUrl = generateBaseUrl(this.parent, parentInstruction);\r\n        }\r\n        return result || Promise.reject(new Error(\"Route not found: \" + url));\r\n    };\r\n    /**@internal */\r\n    Router.prototype._findParentInstructionFromRouter = function (router, instruction) {\r\n        if (instruction.router === router) {\r\n            instruction.fragment = router.baseUrl; // need to change the fragment in case of a redirect instead of moduleId\r\n            return instruction;\r\n        }\r\n        else if (instruction.parentInstruction) {\r\n            return this._findParentInstructionFromRouter(router, instruction.parentInstruction);\r\n        }\r\n        return undefined;\r\n    };\r\n    /**@internal */\r\n    Router.prototype._parentCatchAllHandler = function (router) {\r\n        if (router.catchAllHandler) {\r\n            return router;\r\n        }\r\n        else if (router.parent) {\r\n            return this._parentCatchAllHandler(router.parent);\r\n        }\r\n        return false;\r\n    };\r\n    /**\r\n     * @internal\r\n     */\r\n    Router.prototype._createRouteConfig = function (config, instruction) {\r\n        var _this = this;\r\n        return Promise\r\n            .resolve(config)\r\n            .then(function (c) {\r\n            if (typeof c === 'string') {\r\n                return { moduleId: c };\r\n            }\r\n            else if (typeof c === 'function') {\r\n                return c(instruction);\r\n            }\r\n            return c;\r\n        })\r\n            // typing here could be either RouteConfig or RedirectConfig\r\n            // but temporarily treat both as RouteConfig\r\n            // todo: improve typings precision\r\n            .then(function (c) { return typeof c === 'string' ? { moduleId: c } : c; })\r\n            .then(function (c) {\r\n            c.route = instruction.params.path;\r\n            validateRouteConfig(c);\r\n            if (!c.navModel) {\r\n                c.navModel = _this.createNavModel(c);\r\n            }\r\n            return c;\r\n        });\r\n    };\r\n    return Router;\r\n}());\r\n/* @internal exported for unit testing */\r\nvar generateBaseUrl = function (router, instruction) {\r\n    return \"\" + (router.baseUrl || '') + (instruction.getBaseUrl() || '');\r\n};\r\n/* @internal exported for unit testing */\r\nvar validateRouteConfig = function (config) {\r\n    if (typeof config !== 'object') {\r\n        throw new Error('Invalid Route Config');\r\n    }\r\n    if (typeof config.route !== 'string') {\r\n        var name_1 = config.name || '(no name)';\r\n        throw new Error('Invalid Route Config for \"' + name_1 + '\": You must specify a \"route:\" pattern.');\r\n    }\r\n    if (!('redirect' in config || config.moduleId || config.navigationStrategy || config.viewPorts)) {\r\n        throw new Error('Invalid Route Config for \"' + config.route + '\": You must specify a \"moduleId:\", \"redirect:\", \"navigationStrategy:\", or \"viewPorts:\".');\r\n    }\r\n};\r\n/* @internal exported for unit testing */\r\nvar evaluateNavigationStrategy = function (instruction, evaluator, context) {\r\n    return Promise\r\n        .resolve(evaluator.call(context, instruction))\r\n        .then(function () {\r\n        if (!('viewPorts' in instruction.config)) {\r\n            instruction.config.viewPorts = {\r\n                'default': {\r\n                    moduleId: instruction.config.moduleId\r\n                }\r\n            };\r\n        }\r\n        return instruction;\r\n    });\r\n};\n\n/**@internal exported for unit testing */\r\nvar createNextFn = function (instruction, steps) {\r\n    var index = -1;\r\n    var next = function () {\r\n        index++;\r\n        if (index < steps.length) {\r\n            var currentStep = steps[index];\r\n            try {\r\n                return currentStep(instruction, next);\r\n            }\r\n            catch (e) {\r\n                return next.reject(e);\r\n            }\r\n        }\r\n        else {\r\n            return next.complete();\r\n        }\r\n    };\r\n    next.complete = createCompletionHandler(next, \"completed\" /* Completed */);\r\n    next.cancel = createCompletionHandler(next, \"canceled\" /* Canceled */);\r\n    next.reject = createCompletionHandler(next, \"rejected\" /* Rejected */);\r\n    return next;\r\n};\r\n/**@internal exported for unit testing */\r\nvar createCompletionHandler = function (next, status) {\r\n    return function (output) { return Promise\r\n        .resolve({\r\n        status: status,\r\n        output: output,\r\n        completed: status === \"completed\" /* Completed */\r\n    }); };\r\n};\n\n/**\r\n * The class responsible for managing and processing the navigation pipeline.\r\n */\r\nvar Pipeline = /** @class */ (function () {\r\n    function Pipeline() {\r\n        /**\r\n         * The pipeline steps. And steps added via addStep will be converted to a function\r\n         * The actualy running functions with correct step contexts of this pipeline\r\n         */\r\n        this.steps = [];\r\n    }\r\n    /**\r\n     * Adds a step to the pipeline.\r\n     *\r\n     * @param step The pipeline step.\r\n     */\r\n    Pipeline.prototype.addStep = function (step) {\r\n        var run;\r\n        if (typeof step === 'function') {\r\n            run = step;\r\n        }\r\n        else if (typeof step.getSteps === 'function') {\r\n            // getSteps is to enable support open slots\r\n            // where devs can add multiple steps into the same slot name\r\n            var steps = step.getSteps();\r\n            for (var i = 0, l = steps.length; i < l; i++) {\r\n                this.addStep(steps[i]);\r\n            }\r\n            return this;\r\n        }\r\n        else {\r\n            run = step.run.bind(step);\r\n        }\r\n        this.steps.push(run);\r\n        return this;\r\n    };\r\n    /**\r\n     * Runs the pipeline.\r\n     *\r\n     * @param instruction The navigation instruction to process.\r\n     */\r\n    Pipeline.prototype.run = function (instruction) {\r\n        var nextFn = createNextFn(instruction, this.steps);\r\n        return nextFn();\r\n    };\r\n    return Pipeline;\r\n}());\n\n/**\r\n* Determines if the provided object is a navigation command.\r\n* A navigation command is anything with a navigate method.\r\n*\r\n* @param obj The object to check.\r\n*/\r\nfunction isNavigationCommand(obj) {\r\n    return obj && typeof obj.navigate === 'function';\r\n}\r\n/**\r\n* Used during the activation lifecycle to cause a redirect.\r\n*/\r\nvar Redirect = /** @class */ (function () {\r\n    /**\r\n     * @param url The URL fragment to use as the navigation destination.\r\n     * @param options The navigation options.\r\n     */\r\n    function Redirect(url, options) {\r\n        if (options === void 0) { options = {}; }\r\n        this.url = url;\r\n        this.options = Object.assign({ trigger: true, replace: true }, options);\r\n        this.shouldContinueProcessing = false;\r\n    }\r\n    /**\r\n     * Called by the activation system to set the child router.\r\n     *\r\n     * @param router The router.\r\n     */\r\n    Redirect.prototype.setRouter = function (router) {\r\n        this.router = router;\r\n    };\r\n    /**\r\n     * Called by the navigation pipeline to navigate.\r\n     *\r\n     * @param appRouter The router to be redirected.\r\n     */\r\n    Redirect.prototype.navigate = function (appRouter) {\r\n        var navigatingRouter = this.options.useAppRouter ? appRouter : (this.router || appRouter);\r\n        navigatingRouter.navigate(this.url, this.options);\r\n    };\r\n    return Redirect;\r\n}());\r\n/**\r\n * Used during the activation lifecycle to cause a redirect to a named route.\r\n */\r\nvar RedirectToRoute = /** @class */ (function () {\r\n    /**\r\n     * @param route The name of the route.\r\n     * @param params The parameters to be sent to the activation method.\r\n     * @param options The options to use for navigation.\r\n     */\r\n    function RedirectToRoute(route, params, options) {\r\n        if (params === void 0) { params = {}; }\r\n        if (options === void 0) { options = {}; }\r\n        this.route = route;\r\n        this.params = params;\r\n        this.options = Object.assign({ trigger: true, replace: true }, options);\r\n        this.shouldContinueProcessing = false;\r\n    }\r\n    /**\r\n     * Called by the activation system to set the child router.\r\n     *\r\n     * @param router The router.\r\n     */\r\n    RedirectToRoute.prototype.setRouter = function (router) {\r\n        this.router = router;\r\n    };\r\n    /**\r\n     * Called by the navigation pipeline to navigate.\r\n     *\r\n     * @param appRouter The router to be redirected.\r\n     */\r\n    RedirectToRoute.prototype.navigate = function (appRouter) {\r\n        var navigatingRouter = this.options.useAppRouter ? appRouter : (this.router || appRouter);\r\n        navigatingRouter.navigateToRoute(this.route, this.params, this.options);\r\n    };\r\n    return RedirectToRoute;\r\n}());\n\n/**\r\n * @internal exported for unit testing\r\n */\r\nfunction _buildNavigationPlan(instruction, forceLifecycleMinimum) {\r\n    var config = instruction.config;\r\n    if ('redirect' in config) {\r\n        return buildRedirectPlan(instruction);\r\n    }\r\n    var prevInstruction = instruction.previousInstruction;\r\n    var defaultViewPortConfigs = instruction.router.viewPortDefaults;\r\n    if (prevInstruction) {\r\n        return buildTransitionPlans(instruction, prevInstruction, defaultViewPortConfigs, forceLifecycleMinimum);\r\n    }\r\n    // first navigation, only need to prepare a few information for each viewport plan\r\n    var viewPortPlans = {};\r\n    var viewPortConfigs = config.viewPorts;\r\n    for (var viewPortName in viewPortConfigs) {\r\n        var viewPortConfig = viewPortConfigs[viewPortName];\r\n        if (viewPortConfig.moduleId === null && viewPortName in defaultViewPortConfigs) {\r\n            viewPortConfig = defaultViewPortConfigs[viewPortName];\r\n        }\r\n        viewPortPlans[viewPortName] = {\r\n            name: viewPortName,\r\n            strategy: \"replace\" /* Replace */,\r\n            config: viewPortConfig\r\n        };\r\n    }\r\n    return Promise.resolve(viewPortPlans);\r\n}\r\n/**\r\n * Build redirect plan based on config of a navigation instruction\r\n * @internal exported for unit testing\r\n */\r\nvar buildRedirectPlan = function (instruction) {\r\n    var config = instruction.config;\r\n    var router = instruction.router;\r\n    return router\r\n        ._createNavigationInstruction(config.redirect)\r\n        .then(function (redirectInstruction) {\r\n        var params = {};\r\n        var originalInstructionParams = instruction.params;\r\n        var redirectInstructionParams = redirectInstruction.params;\r\n        for (var key in redirectInstructionParams) {\r\n            // If the param on the redirect points to another param, e.g. { route: first/:this, redirect: second/:this }\r\n            var val = redirectInstructionParams[key];\r\n            if (typeof val === 'string' && val[0] === ':') {\r\n                val = val.slice(1);\r\n                // And if that param is found on the original instruction then use it\r\n                if (val in originalInstructionParams) {\r\n                    params[key] = originalInstructionParams[val];\r\n                }\r\n            }\r\n            else {\r\n                params[key] = redirectInstructionParams[key];\r\n            }\r\n        }\r\n        var redirectLocation = router.generate(redirectInstruction.config, params, instruction.options);\r\n        // Special handling for child routes\r\n        for (var key in originalInstructionParams) {\r\n            redirectLocation = redirectLocation.replace(\":\" + key, originalInstructionParams[key]);\r\n        }\r\n        var queryString = instruction.queryString;\r\n        if (queryString) {\r\n            redirectLocation += '?' + queryString;\r\n        }\r\n        return Promise.resolve(new Redirect(redirectLocation));\r\n    });\r\n};\r\n/**\r\n * @param viewPortPlans the Plan record that holds information about built plans\r\n * @internal exported for unit testing\r\n */\r\nvar buildTransitionPlans = function (currentInstruction, previousInstruction, defaultViewPortConfigs, forceLifecycleMinimum) {\r\n    var viewPortPlans = {};\r\n    var newInstructionConfig = currentInstruction.config;\r\n    var hasNewParams = hasDifferentParameterValues(previousInstruction, currentInstruction);\r\n    var pending = [];\r\n    var previousViewPortInstructions = previousInstruction.viewPortInstructions;\r\n    var _loop_1 = function (viewPortName) {\r\n        var prevViewPortInstruction = previousViewPortInstructions[viewPortName];\r\n        var prevViewPortComponent = prevViewPortInstruction.component;\r\n        var newInstructionViewPortConfigs = newInstructionConfig.viewPorts;\r\n        // if this is invoked on a viewport without any changes, based on new url,\r\n        // newViewPortConfig will be the existing viewport instruction\r\n        var nextViewPortConfig = viewPortName in newInstructionViewPortConfigs\r\n            ? newInstructionViewPortConfigs[viewPortName]\r\n            : prevViewPortInstruction;\r\n        if (nextViewPortConfig.moduleId === null && viewPortName in defaultViewPortConfigs) {\r\n            nextViewPortConfig = defaultViewPortConfigs[viewPortName];\r\n        }\r\n        var viewPortActivationStrategy = determineActivationStrategy(currentInstruction, prevViewPortInstruction, nextViewPortConfig, hasNewParams, forceLifecycleMinimum);\r\n        var viewPortPlan = viewPortPlans[viewPortName] = {\r\n            name: viewPortName,\r\n            // ViewPortInstruction can quack like a RouteConfig\r\n            config: nextViewPortConfig,\r\n            prevComponent: prevViewPortComponent,\r\n            prevModuleId: prevViewPortInstruction.moduleId,\r\n            strategy: viewPortActivationStrategy\r\n        };\r\n        // recursively build nav plans for all existing child routers/viewports of this viewport\r\n        // this is possible because existing child viewports and routers already have necessary information\r\n        // to process the wildcard path from parent instruction\r\n        if (viewPortActivationStrategy !== \"replace\" /* Replace */ && prevViewPortInstruction.childRouter) {\r\n            var path = currentInstruction.getWildcardPath();\r\n            var task = prevViewPortInstruction\r\n                .childRouter\r\n                ._createNavigationInstruction(path, currentInstruction)\r\n                .then(function (childInstruction) {\r\n                viewPortPlan.childNavigationInstruction = childInstruction;\r\n                return _buildNavigationPlan(childInstruction, \r\n                // is it safe to assume viewPortPlan has not been changed from previous assignment?\r\n                // if so, can just use local variable viewPortPlanStrategy\r\n                // there could be user code modifying viewport plan during _createNavigationInstruction?\r\n                viewPortPlan.strategy === \"invoke-lifecycle\" /* InvokeLifecycle */)\r\n                    .then(function (childPlan) {\r\n                    if (childPlan instanceof Redirect) {\r\n                        return Promise.reject(childPlan);\r\n                    }\r\n                    childInstruction.plan = childPlan;\r\n                    // for bluebird ?\r\n                    return null;\r\n                });\r\n            });\r\n            pending.push(task);\r\n        }\r\n    };\r\n    for (var viewPortName in previousViewPortInstructions) {\r\n        _loop_1(viewPortName);\r\n    }\r\n    return Promise.all(pending).then(function () { return viewPortPlans; });\r\n};\r\n/**\r\n * @param newViewPortConfig if this is invoked on a viewport without any changes, based on new url, newViewPortConfig will be the existing viewport instruction\r\n * @internal exported for unit testing\r\n */\r\nvar determineActivationStrategy = function (currentNavInstruction, prevViewPortInstruction, newViewPortConfig, \r\n// indicates whether there is difference between old and new url params\r\nhasNewParams, forceLifecycleMinimum) {\r\n    var newInstructionConfig = currentNavInstruction.config;\r\n    var prevViewPortViewModel = prevViewPortInstruction.component.viewModel;\r\n    var viewPortPlanStrategy;\r\n    if (prevViewPortInstruction.moduleId !== newViewPortConfig.moduleId) {\r\n        viewPortPlanStrategy = \"replace\" /* Replace */;\r\n    }\r\n    else if ('determineActivationStrategy' in prevViewPortViewModel) {\r\n        viewPortPlanStrategy = prevViewPortViewModel.determineActivationStrategy.apply(prevViewPortViewModel, currentNavInstruction.lifecycleArgs);\r\n    }\r\n    else if (newInstructionConfig.activationStrategy) {\r\n        viewPortPlanStrategy = newInstructionConfig.activationStrategy;\r\n    }\r\n    else if (hasNewParams || forceLifecycleMinimum) {\r\n        viewPortPlanStrategy = \"invoke-lifecycle\" /* InvokeLifecycle */;\r\n    }\r\n    else {\r\n        viewPortPlanStrategy = \"no-change\" /* NoChange */;\r\n    }\r\n    return viewPortPlanStrategy;\r\n};\r\n/**@internal exported for unit testing */\r\nvar hasDifferentParameterValues = function (prev, next) {\r\n    var prevParams = prev.params;\r\n    var nextParams = next.params;\r\n    var nextWildCardName = next.config.hasChildRouter ? next.getWildCardName() : null;\r\n    for (var key in nextParams) {\r\n        if (key === nextWildCardName) {\r\n            continue;\r\n        }\r\n        if (prevParams[key] !== nextParams[key]) {\r\n            return true;\r\n        }\r\n    }\r\n    for (var key in prevParams) {\r\n        if (key === nextWildCardName) {\r\n            continue;\r\n        }\r\n        if (prevParams[key] !== nextParams[key]) {\r\n            return true;\r\n        }\r\n    }\r\n    if (!next.options.compareQueryParams) {\r\n        return false;\r\n    }\r\n    var prevQueryParams = prev.queryParams;\r\n    var nextQueryParams = next.queryParams;\r\n    for (var key in nextQueryParams) {\r\n        if (prevQueryParams[key] !== nextQueryParams[key]) {\r\n            return true;\r\n        }\r\n    }\r\n    for (var key in prevQueryParams) {\r\n        if (prevQueryParams[key] !== nextQueryParams[key]) {\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n};\n\n/**\r\n * Transform a navigation instruction into viewport plan record object,\r\n * or a redirect request if user viewmodel demands\r\n */\r\nvar BuildNavigationPlanStep = /** @class */ (function () {\r\n    function BuildNavigationPlanStep() {\r\n    }\r\n    BuildNavigationPlanStep.prototype.run = function (navigationInstruction, next) {\r\n        return _buildNavigationPlan(navigationInstruction)\r\n            .then(function (plan) {\r\n            if (plan instanceof Redirect) {\r\n                return next.cancel(plan);\r\n            }\r\n            navigationInstruction.plan = plan;\r\n            return next();\r\n        })\r\n            .catch(next.cancel);\r\n    };\r\n    return BuildNavigationPlanStep;\r\n}());\n\n/**\r\n * @internal Exported for unit testing\r\n */\r\nvar loadNewRoute = function (routeLoader, navigationInstruction) {\r\n    var loadingPlans = determineLoadingPlans(navigationInstruction);\r\n    var loadPromises = loadingPlans.map(function (loadingPlan) { return loadRoute(routeLoader, loadingPlan.navigationInstruction, loadingPlan.viewPortPlan); });\r\n    return Promise.all(loadPromises);\r\n};\r\n/**\r\n * @internal Exported for unit testing\r\n */\r\nvar determineLoadingPlans = function (navigationInstruction, loadingPlans) {\r\n    if (loadingPlans === void 0) { loadingPlans = []; }\r\n    var viewPortPlans = navigationInstruction.plan;\r\n    for (var viewPortName in viewPortPlans) {\r\n        var viewPortPlan = viewPortPlans[viewPortName];\r\n        var childNavInstruction = viewPortPlan.childNavigationInstruction;\r\n        if (viewPortPlan.strategy === \"replace\" /* Replace */) {\r\n            loadingPlans.push({ viewPortPlan: viewPortPlan, navigationInstruction: navigationInstruction });\r\n            if (childNavInstruction) {\r\n                determineLoadingPlans(childNavInstruction, loadingPlans);\r\n            }\r\n        }\r\n        else {\r\n            var viewPortInstruction = navigationInstruction.addViewPortInstruction({\r\n                name: viewPortName,\r\n                strategy: viewPortPlan.strategy,\r\n                moduleId: viewPortPlan.prevModuleId,\r\n                component: viewPortPlan.prevComponent\r\n            });\r\n            if (childNavInstruction) {\r\n                viewPortInstruction.childNavigationInstruction = childNavInstruction;\r\n                determineLoadingPlans(childNavInstruction, loadingPlans);\r\n            }\r\n        }\r\n    }\r\n    return loadingPlans;\r\n};\r\n/**\r\n * @internal Exported for unit testing\r\n */\r\nvar loadRoute = function (routeLoader, navigationInstruction, viewPortPlan) {\r\n    var planConfig = viewPortPlan.config;\r\n    var moduleId = planConfig ? planConfig.moduleId : null;\r\n    return loadComponent(routeLoader, navigationInstruction, planConfig)\r\n        .then(function (component) {\r\n        var viewPortInstruction = navigationInstruction.addViewPortInstruction({\r\n            name: viewPortPlan.name,\r\n            strategy: viewPortPlan.strategy,\r\n            moduleId: moduleId,\r\n            component: component\r\n        });\r\n        var childRouter = component.childRouter;\r\n        if (childRouter) {\r\n            var path = navigationInstruction.getWildcardPath();\r\n            return childRouter\r\n                ._createNavigationInstruction(path, navigationInstruction)\r\n                .then(function (childInstruction) {\r\n                viewPortPlan.childNavigationInstruction = childInstruction;\r\n                return _buildNavigationPlan(childInstruction)\r\n                    .then(function (childPlan) {\r\n                    if (childPlan instanceof Redirect) {\r\n                        return Promise.reject(childPlan);\r\n                    }\r\n                    childInstruction.plan = childPlan;\r\n                    viewPortInstruction.childNavigationInstruction = childInstruction;\r\n                    return loadNewRoute(routeLoader, childInstruction);\r\n                });\r\n            });\r\n        }\r\n        // ts complains without this, though they are same\r\n        return void 0;\r\n    });\r\n};\r\n/**\r\n * Load a routed-component based on navigation instruction and route config\r\n * @internal exported for unit testing only\r\n */\r\nvar loadComponent = function (routeLoader, navigationInstruction, config) {\r\n    var router = navigationInstruction.router;\r\n    var lifecycleArgs = navigationInstruction.lifecycleArgs;\r\n    return Promise.resolve()\r\n        .then(function () { return routeLoader.loadRoute(router, config, navigationInstruction); })\r\n        .then(\r\n    /**\r\n     * @param component an object carrying information about loaded route\r\n     * typically contains information about view model, childContainer, view and router\r\n     */\r\n    function (component) {\r\n        var viewModel = component.viewModel, childContainer = component.childContainer;\r\n        component.router = router;\r\n        component.config = config;\r\n        if ('configureRouter' in viewModel) {\r\n            var childRouter_1 = childContainer.getChildRouter();\r\n            component.childRouter = childRouter_1;\r\n            return childRouter_1\r\n                .configure(function (c) { return viewModel.configureRouter(c, childRouter_1, lifecycleArgs[0], lifecycleArgs[1], lifecycleArgs[2]); })\r\n                .then(function () { return component; });\r\n        }\r\n        return component;\r\n    });\r\n};\n\n/**\r\n * Abstract class that is responsible for loading view / view model from a route config\r\n * The default implementation can be found in `aurelia-templating-router`\r\n */\r\nvar RouteLoader = /** @class */ (function () {\r\n    function RouteLoader() {\r\n    }\r\n    /**\r\n     * Load a route config based on its viewmodel / view configuration\r\n     */\r\n    // return typing: return typings used to be never\r\n    // as it was a throw. Changing it to Promise<any> should not cause any issues\r\n    RouteLoader.prototype.loadRoute = function (router, config, navigationInstruction) {\r\n        throw new Error('Route loaders must implement \"loadRoute(router, config, navigationInstruction)\".');\r\n    };\r\n    return RouteLoader;\r\n}());\n\n/**\r\n * A pipeline step responsible for loading a route config of a navigation instruction\r\n */\r\nvar LoadRouteStep = /** @class */ (function () {\r\n    function LoadRouteStep(routeLoader) {\r\n        this.routeLoader = routeLoader;\r\n    }\r\n    /**@internal */\r\n    LoadRouteStep.inject = function () { return [RouteLoader]; };\r\n    /**\r\n     * Run the internal to load route config of a navigation instruction to prepare for next steps in the pipeline\r\n     */\r\n    LoadRouteStep.prototype.run = function (navigationInstruction, next) {\r\n        return loadNewRoute(this.routeLoader, navigationInstruction)\r\n            .then(next, next.cancel);\r\n    };\r\n    return LoadRouteStep;\r\n}());\n\n/**\r\n * A pipeline step for instructing a piepline to commit changes on a navigation instruction\r\n */\r\nvar CommitChangesStep = /** @class */ (function () {\r\n    function CommitChangesStep() {\r\n    }\r\n    CommitChangesStep.prototype.run = function (navigationInstruction, next) {\r\n        return navigationInstruction\r\n            ._commitChanges(/*wait to swap?*/ true)\r\n            .then(function () {\r\n            navigationInstruction._updateTitle();\r\n            return next();\r\n        });\r\n    };\r\n    return CommitChangesStep;\r\n}());\n\n/**\r\n * An optional interface describing the available activation strategies.\r\n * @internal Used internally.\r\n */\r\nvar InternalActivationStrategy;\r\n(function (InternalActivationStrategy) {\r\n    /**\r\n     * Reuse the existing view model, without invoking Router lifecycle hooks.\r\n     */\r\n    InternalActivationStrategy[\"NoChange\"] = \"no-change\";\r\n    /**\r\n     * Reuse the existing view model, invoking Router lifecycle hooks.\r\n     */\r\n    InternalActivationStrategy[\"InvokeLifecycle\"] = \"invoke-lifecycle\";\r\n    /**\r\n     * Replace the existing view model, invoking Router lifecycle hooks.\r\n     */\r\n    InternalActivationStrategy[\"Replace\"] = \"replace\";\r\n})(InternalActivationStrategy || (InternalActivationStrategy = {}));\r\n/**\r\n * The strategy to use when activating modules during navigation.\r\n */\r\n// kept for compat reason\r\nvar activationStrategy = {\r\n    noChange: \"no-change\" /* NoChange */,\r\n    invokeLifecycle: \"invoke-lifecycle\" /* InvokeLifecycle */,\r\n    replace: \"replace\" /* Replace */\r\n};\n\n/**\r\n * Recursively find list of deactivate-able view models\r\n * and invoke the either 'canDeactivate' or 'deactivate' on each\r\n * @internal exported for unit testing\r\n */\r\nvar processDeactivatable = function (navigationInstruction, callbackName, next, ignoreResult) {\r\n    var plan = navigationInstruction.plan;\r\n    var infos = findDeactivatable(plan, callbackName);\r\n    var i = infos.length; // query from inside out\r\n    function inspect(val) {\r\n        if (ignoreResult || shouldContinue(val)) {\r\n            return iterate();\r\n        }\r\n        return next.cancel(val);\r\n    }\r\n    function iterate() {\r\n        if (i--) {\r\n            try {\r\n                var viewModel = infos[i];\r\n                var result = viewModel[callbackName](navigationInstruction);\r\n                return processPotential(result, inspect, next.cancel);\r\n            }\r\n            catch (error) {\r\n                return next.cancel(error);\r\n            }\r\n        }\r\n        navigationInstruction.router.couldDeactivate = true;\r\n        return next();\r\n    }\r\n    return iterate();\r\n};\r\n/**\r\n * Recursively find and returns a list of deactivate-able view models\r\n * @internal exported for unit testing\r\n */\r\nvar findDeactivatable = function (plan, callbackName, list) {\r\n    if (list === void 0) { list = []; }\r\n    for (var viewPortName in plan) {\r\n        var viewPortPlan = plan[viewPortName];\r\n        var prevComponent = viewPortPlan.prevComponent;\r\n        if ((viewPortPlan.strategy === activationStrategy.invokeLifecycle || viewPortPlan.strategy === activationStrategy.replace)\r\n            && prevComponent) {\r\n            var viewModel = prevComponent.viewModel;\r\n            if (callbackName in viewModel) {\r\n                list.push(viewModel);\r\n            }\r\n        }\r\n        if (viewPortPlan.strategy === activationStrategy.replace && prevComponent) {\r\n            addPreviousDeactivatable(prevComponent, callbackName, list);\r\n        }\r\n        else if (viewPortPlan.childNavigationInstruction) {\r\n            findDeactivatable(viewPortPlan.childNavigationInstruction.plan, callbackName, list);\r\n        }\r\n    }\r\n    return list;\r\n};\r\n/**\r\n * @internal exported for unit testing\r\n */\r\nvar addPreviousDeactivatable = function (component, callbackName, list) {\r\n    var childRouter = component.childRouter;\r\n    if (childRouter && childRouter.currentInstruction) {\r\n        var viewPortInstructions = childRouter.currentInstruction.viewPortInstructions;\r\n        for (var viewPortName in viewPortInstructions) {\r\n            var viewPortInstruction = viewPortInstructions[viewPortName];\r\n            var prevComponent = viewPortInstruction.component;\r\n            var prevViewModel = prevComponent.viewModel;\r\n            if (callbackName in prevViewModel) {\r\n                list.push(prevViewModel);\r\n            }\r\n            addPreviousDeactivatable(prevComponent, callbackName, list);\r\n        }\r\n    }\r\n};\r\n/**\r\n * @internal exported for unit testing\r\n */\r\nvar processActivatable = function (navigationInstruction, callbackName, next, ignoreResult) {\r\n    var infos = findActivatable(navigationInstruction, callbackName);\r\n    var length = infos.length;\r\n    var i = -1; // query from top down\r\n    function inspect(val, router) {\r\n        if (ignoreResult || shouldContinue(val, router)) {\r\n            return iterate();\r\n        }\r\n        return next.cancel(val);\r\n    }\r\n    function iterate() {\r\n        var _a;\r\n        i++;\r\n        if (i < length) {\r\n            try {\r\n                var current_1 = infos[i];\r\n                var result = (_a = current_1.viewModel)[callbackName].apply(_a, current_1.lifecycleArgs);\r\n                return processPotential(result, function (val) { return inspect(val, current_1.router); }, next.cancel);\r\n            }\r\n            catch (error) {\r\n                return next.cancel(error);\r\n            }\r\n        }\r\n        return next();\r\n    }\r\n    return iterate();\r\n};\r\n/**\r\n * Find list of activatable view model and add to list (3rd parameter)\r\n * @internal exported for unit testing\r\n */\r\nvar findActivatable = function (navigationInstruction, callbackName, list, router) {\r\n    if (list === void 0) { list = []; }\r\n    var plan = navigationInstruction.plan;\r\n    Object\r\n        .keys(plan)\r\n        .forEach(function (viewPortName) {\r\n        var viewPortPlan = plan[viewPortName];\r\n        var viewPortInstruction = navigationInstruction.viewPortInstructions[viewPortName];\r\n        var viewPortComponent = viewPortInstruction.component;\r\n        var viewModel = viewPortComponent.viewModel;\r\n        if ((viewPortPlan.strategy === activationStrategy.invokeLifecycle\r\n            || viewPortPlan.strategy === activationStrategy.replace)\r\n            && callbackName in viewModel) {\r\n            list.push({\r\n                viewModel: viewModel,\r\n                lifecycleArgs: viewPortInstruction.lifecycleArgs,\r\n                router: router\r\n            });\r\n        }\r\n        var childNavInstruction = viewPortPlan.childNavigationInstruction;\r\n        if (childNavInstruction) {\r\n            findActivatable(childNavInstruction, callbackName, list, viewPortComponent.childRouter || router);\r\n        }\r\n    });\r\n    return list;\r\n};\r\nvar shouldContinue = function (output, router) {\r\n    if (output instanceof Error) {\r\n        return false;\r\n    }\r\n    if (isNavigationCommand(output)) {\r\n        if (typeof output.setRouter === 'function') {\r\n            output.setRouter(router);\r\n        }\r\n        return !!output.shouldContinueProcessing;\r\n    }\r\n    if (output === undefined) {\r\n        return true;\r\n    }\r\n    return output;\r\n};\r\n/**\r\n * wraps a subscription, allowing unsubscribe calls even if\r\n * the first value comes synchronously\r\n */\r\nvar SafeSubscription = /** @class */ (function () {\r\n    function SafeSubscription(subscriptionFunc) {\r\n        this._subscribed = true;\r\n        this._subscription = subscriptionFunc(this);\r\n        if (!this._subscribed) {\r\n            this.unsubscribe();\r\n        }\r\n    }\r\n    Object.defineProperty(SafeSubscription.prototype, \"subscribed\", {\r\n        get: function () {\r\n            return this._subscribed;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    SafeSubscription.prototype.unsubscribe = function () {\r\n        if (this._subscribed && this._subscription) {\r\n            this._subscription.unsubscribe();\r\n        }\r\n        this._subscribed = false;\r\n    };\r\n    return SafeSubscription;\r\n}());\r\n/**\r\n * A function to process return value from `activate`/`canActivate` steps\r\n * Supports observable/promise\r\n *\r\n * For observable, resolve at first next() or on complete()\r\n */\r\nvar processPotential = function (obj, resolve, reject) {\r\n    // if promise like\r\n    if (obj && typeof obj.then === 'function') {\r\n        return Promise.resolve(obj).then(resolve).catch(reject);\r\n    }\r\n    // if observable\r\n    if (obj && typeof obj.subscribe === 'function') {\r\n        var obs_1 = obj;\r\n        return new SafeSubscription(function (sub) { return obs_1.subscribe({\r\n            next: function () {\r\n                if (sub.subscribed) {\r\n                    sub.unsubscribe();\r\n                    resolve(obj);\r\n                }\r\n            },\r\n            error: function (error) {\r\n                if (sub.subscribed) {\r\n                    sub.unsubscribe();\r\n                    reject(error);\r\n                }\r\n            },\r\n            complete: function () {\r\n                if (sub.subscribed) {\r\n                    sub.unsubscribe();\r\n                    resolve(obj);\r\n                }\r\n            }\r\n        }); });\r\n    }\r\n    // else just resolve\r\n    try {\r\n        return resolve(obj);\r\n    }\r\n    catch (error) {\r\n        return reject(error);\r\n    }\r\n};\n\n/**\r\n * A pipeline step responsible for finding and activating method `canDeactivate` on a view model of a route\r\n */\r\nvar CanDeactivatePreviousStep = /** @class */ (function () {\r\n    function CanDeactivatePreviousStep() {\r\n    }\r\n    CanDeactivatePreviousStep.prototype.run = function (navigationInstruction, next) {\r\n        return processDeactivatable(navigationInstruction, 'canDeactivate', next);\r\n    };\r\n    return CanDeactivatePreviousStep;\r\n}());\r\n/**\r\n * A pipeline step responsible for finding and activating method `canActivate` on a view model of a route\r\n */\r\nvar CanActivateNextStep = /** @class */ (function () {\r\n    function CanActivateNextStep() {\r\n    }\r\n    CanActivateNextStep.prototype.run = function (navigationInstruction, next) {\r\n        return processActivatable(navigationInstruction, 'canActivate', next);\r\n    };\r\n    return CanActivateNextStep;\r\n}());\r\n/**\r\n * A pipeline step responsible for finding and activating method `deactivate` on a view model of a route\r\n */\r\nvar DeactivatePreviousStep = /** @class */ (function () {\r\n    function DeactivatePreviousStep() {\r\n    }\r\n    DeactivatePreviousStep.prototype.run = function (navigationInstruction, next) {\r\n        return processDeactivatable(navigationInstruction, 'deactivate', next, true);\r\n    };\r\n    return DeactivatePreviousStep;\r\n}());\r\n/**\r\n * A pipeline step responsible for finding and activating method `activate` on a view model of a route\r\n */\r\nvar ActivateNextStep = /** @class */ (function () {\r\n    function ActivateNextStep() {\r\n    }\r\n    ActivateNextStep.prototype.run = function (navigationInstruction, next) {\r\n        return processActivatable(navigationInstruction, 'activate', next, true);\r\n    };\r\n    return ActivateNextStep;\r\n}());\n\n/**\r\n * A multi-slots Pipeline Placeholder Step for hooking into a pipeline execution\r\n */\r\nvar PipelineSlot = /** @class */ (function () {\r\n    function PipelineSlot(container, name, alias) {\r\n        this.steps = [];\r\n        this.container = container;\r\n        this.slotName = name;\r\n        this.slotAlias = alias;\r\n    }\r\n    PipelineSlot.prototype.getSteps = function () {\r\n        var _this = this;\r\n        return this.steps.map(function (x) { return _this.container.get(x); });\r\n    };\r\n    return PipelineSlot;\r\n}());\r\n/**\r\n * Class responsible for creating the navigation pipeline.\r\n */\r\nvar aurelia_router_PipelineProvider = /** @class */ (function () {\r\n    function PipelineProvider(container) {\r\n        this.container = container;\r\n        this.steps = [\r\n            BuildNavigationPlanStep,\r\n            CanDeactivatePreviousStep,\r\n            LoadRouteStep,\r\n            createPipelineSlot(container, \"authorize\" /* Authorize */),\r\n            CanActivateNextStep,\r\n            createPipelineSlot(container, \"preActivate\" /* PreActivate */, 'modelbind'),\r\n            // NOTE: app state changes start below - point of no return\r\n            DeactivatePreviousStep,\r\n            ActivateNextStep,\r\n            createPipelineSlot(container, \"preRender\" /* PreRender */, 'precommit'),\r\n            CommitChangesStep,\r\n            createPipelineSlot(container, \"postRender\" /* PostRender */, 'postcomplete')\r\n        ];\r\n    }\r\n    /**@internal */\r\n    PipelineProvider.inject = function () { return [aurelia_dependency_injection[\"b\" /* Container */]]; };\r\n    /**\r\n     * Create the navigation pipeline.\r\n     */\r\n    PipelineProvider.prototype.createPipeline = function (useCanDeactivateStep) {\r\n        var _this = this;\r\n        if (useCanDeactivateStep === void 0) { useCanDeactivateStep = true; }\r\n        var pipeline = new Pipeline();\r\n        this.steps.forEach(function (step) {\r\n            if (useCanDeactivateStep || step !== CanDeactivatePreviousStep) {\r\n                pipeline.addStep(_this.container.get(step));\r\n            }\r\n        });\r\n        return pipeline;\r\n    };\r\n    /**@internal */\r\n    PipelineProvider.prototype._findStep = function (name) {\r\n        // Steps that are not PipelineSlots are constructor functions, and they will automatically fail. Probably.\r\n        return this.steps.find(function (x) { return x.slotName === name || x.slotAlias === name; });\r\n    };\r\n    /**\r\n     * Adds a step into the pipeline at a known slot location.\r\n     */\r\n    PipelineProvider.prototype.addStep = function (name, step) {\r\n        var found = this._findStep(name);\r\n        if (found) {\r\n            var slotSteps = found.steps;\r\n            // prevent duplicates\r\n            if (!slotSteps.includes(step)) {\r\n                slotSteps.push(step);\r\n            }\r\n        }\r\n        else {\r\n            throw new Error(\"Invalid pipeline slot name: \" + name + \".\");\r\n        }\r\n    };\r\n    /**\r\n     * Removes a step from a slot in the pipeline\r\n     */\r\n    PipelineProvider.prototype.removeStep = function (name, step) {\r\n        var slot = this._findStep(name);\r\n        if (slot) {\r\n            var slotSteps = slot.steps;\r\n            slotSteps.splice(slotSteps.indexOf(step), 1);\r\n        }\r\n    };\r\n    /**\r\n     * Clears all steps from a slot in the pipeline\r\n     * @internal\r\n     */\r\n    PipelineProvider.prototype._clearSteps = function (name) {\r\n        if (name === void 0) { name = ''; }\r\n        var slot = this._findStep(name);\r\n        if (slot) {\r\n            slot.steps = [];\r\n        }\r\n    };\r\n    /**\r\n     * Resets all pipeline slots\r\n     */\r\n    PipelineProvider.prototype.reset = function () {\r\n        this._clearSteps(\"authorize\" /* Authorize */);\r\n        this._clearSteps(\"preActivate\" /* PreActivate */);\r\n        this._clearSteps(\"preRender\" /* PreRender */);\r\n        this._clearSteps(\"postRender\" /* PostRender */);\r\n    };\r\n    return PipelineProvider;\r\n}());\r\n/**@internal */\r\nvar createPipelineSlot = function (container, name, alias) {\r\n    return new PipelineSlot(container, name, alias);\r\n};\n\nvar logger = Object(aurelia_logging[\"getLogger\"])('app-router');\r\n/**\r\n * The main application router.\r\n */\r\nvar aurelia_router_AppRouter = /** @class */ (function (_super) {\r\n    __extends(AppRouter, _super);\r\n    function AppRouter(container, history, pipelineProvider, events) {\r\n        var _this = _super.call(this, container, history) || this;\r\n        _this.pipelineProvider = pipelineProvider;\r\n        _this.events = events;\r\n        return _this;\r\n    }\r\n    /**@internal */\r\n    AppRouter.inject = function () { return [aurelia_dependency_injection[\"b\" /* Container */], aurelia_history[\"a\" /* History */], aurelia_router_PipelineProvider, aurelia_event_aggregator[\"EventAggregator\"]]; };\r\n    /**\r\n     * Fully resets the router's internal state. Primarily used internally by the framework when multiple calls to setRoot are made.\r\n     * Use with caution (actually, avoid using this). Do not use this to simply change your navigation model.\r\n     */\r\n    AppRouter.prototype.reset = function () {\r\n        _super.prototype.reset.call(this);\r\n        this.maxInstructionCount = 10;\r\n        if (!this._queue) {\r\n            this._queue = [];\r\n        }\r\n        else {\r\n            this._queue.length = 0;\r\n        }\r\n    };\r\n    /**\r\n     * Loads the specified URL.\r\n     *\r\n     * @param url The URL fragment to load.\r\n     */\r\n    AppRouter.prototype.loadUrl = function (url) {\r\n        var _this = this;\r\n        return this\r\n            ._createNavigationInstruction(url)\r\n            .then(function (instruction) { return _this._queueInstruction(instruction); })\r\n            .catch(function (error) {\r\n            logger.error(error);\r\n            restorePreviousLocation(_this);\r\n        });\r\n    };\r\n    /**\r\n     * Registers a viewPort to be used as a rendering target for activated routes.\r\n     *\r\n     * @param viewPort The viewPort. This is typically a <router-view/> element in Aurelia default impl\r\n     * @param name The name of the viewPort. 'default' if unspecified.\r\n     */\r\n    AppRouter.prototype.registerViewPort = function (viewPort, name) {\r\n        var _this = this;\r\n        // having strong typing without changing public API\r\n        var $viewPort = viewPort;\r\n        _super.prototype.registerViewPort.call(this, $viewPort, name);\r\n        // beside adding viewport to the registry of this instance\r\n        // AppRouter also configure routing/history to start routing functionality\r\n        // There are situation where there are more than 1 <router-view/> element at root view\r\n        // in that case, still only activate once via the following guard\r\n        if (!this.isActive) {\r\n            var viewModel_1 = this._findViewModel($viewPort);\r\n            if ('configureRouter' in viewModel_1) {\r\n                // If there are more than one <router-view/> element at root view\r\n                // use this flag to guard against configure method being invoked multiple times\r\n                // this flag is set inside method configure\r\n                if (!this.isConfigured) {\r\n                    // replace the real resolve with a noop to guarantee that any action in base class Router\r\n                    // won't resolve the configurePromise prematurely\r\n                    var resolveConfiguredPromise_1 = this._resolveConfiguredPromise;\r\n                    this._resolveConfiguredPromise = function () { };\r\n                    return this\r\n                        .configure(function (config) {\r\n                        return Promise\r\n                            .resolve(viewModel_1.configureRouter(config, _this))\r\n                            // an issue with configure interface. Should be fixed there\r\n                            // todo: fix this via configure interface in router\r\n                            .then(function () { return config; });\r\n                    })\r\n                        .then(function () {\r\n                        _this.activate();\r\n                        resolveConfiguredPromise_1();\r\n                    });\r\n                }\r\n            }\r\n            else {\r\n                this.activate();\r\n            }\r\n        }\r\n        // when a viewport is added dynamically to a root view that is already activated\r\n        // just process the navigation instruction\r\n        else {\r\n            this._dequeueInstruction();\r\n        }\r\n        return Promise.resolve();\r\n    };\r\n    /**\r\n     * Activates the router. This instructs the router to begin listening for history changes and processing instructions.\r\n     *\r\n     * @params options The set of options to activate the router with.\r\n     */\r\n    AppRouter.prototype.activate = function (options) {\r\n        if (this.isActive) {\r\n            return;\r\n        }\r\n        this.isActive = true;\r\n        // route handler property is responsible for handling url change\r\n        // the interface of aurelia-history isn't clear on this perspective\r\n        this.options = Object.assign({ routeHandler: this.loadUrl.bind(this) }, this.options, options);\r\n        this.history.activate(this.options);\r\n        this._dequeueInstruction();\r\n    };\r\n    /**\r\n     * Deactivates the router.\r\n     */\r\n    AppRouter.prototype.deactivate = function () {\r\n        this.isActive = false;\r\n        this.history.deactivate();\r\n    };\r\n    /**@internal */\r\n    AppRouter.prototype._queueInstruction = function (instruction) {\r\n        var _this = this;\r\n        return new Promise(function (resolve) {\r\n            instruction.resolve = resolve;\r\n            _this._queue.unshift(instruction);\r\n            _this._dequeueInstruction();\r\n        });\r\n    };\r\n    /**@internal */\r\n    AppRouter.prototype._dequeueInstruction = function (instructionCount) {\r\n        var _this = this;\r\n        if (instructionCount === void 0) { instructionCount = 0; }\r\n        return Promise.resolve().then(function () {\r\n            if (_this.isNavigating && !instructionCount) {\r\n                // ts complains about inconsistent returns without void 0\r\n                return void 0;\r\n            }\r\n            var instruction = _this._queue.shift();\r\n            _this._queue.length = 0;\r\n            if (!instruction) {\r\n                // ts complains about inconsistent returns without void 0\r\n                return void 0;\r\n            }\r\n            _this.isNavigating = true;\r\n            var navtracker = _this.history.getState('NavigationTracker');\r\n            var currentNavTracker = _this.currentNavigationTracker;\r\n            if (!navtracker && !currentNavTracker) {\r\n                _this.isNavigatingFirst = true;\r\n                _this.isNavigatingNew = true;\r\n            }\r\n            else if (!navtracker) {\r\n                _this.isNavigatingNew = true;\r\n            }\r\n            else if (!currentNavTracker) {\r\n                _this.isNavigatingRefresh = true;\r\n            }\r\n            else if (currentNavTracker < navtracker) {\r\n                _this.isNavigatingForward = true;\r\n            }\r\n            else if (currentNavTracker > navtracker) {\r\n                _this.isNavigatingBack = true;\r\n            }\r\n            if (!navtracker) {\r\n                navtracker = Date.now();\r\n                _this.history.setState('NavigationTracker', navtracker);\r\n            }\r\n            _this.currentNavigationTracker = navtracker;\r\n            instruction.previousInstruction = _this.currentInstruction;\r\n            var maxInstructionCount = _this.maxInstructionCount;\r\n            if (!instructionCount) {\r\n                _this.events.publish(\"router:navigation:processing\" /* Processing */, { instruction: instruction });\r\n            }\r\n            else if (instructionCount === maxInstructionCount - 1) {\r\n                logger.error(instructionCount + 1 + \" navigation instructions have been attempted without success. Restoring last known good location.\");\r\n                restorePreviousLocation(_this);\r\n                return _this._dequeueInstruction(instructionCount + 1);\r\n            }\r\n            else if (instructionCount > maxInstructionCount) {\r\n                throw new Error('Maximum navigation attempts exceeded. Giving up.');\r\n            }\r\n            var pipeline = _this.pipelineProvider.createPipeline(!_this.couldDeactivate);\r\n            return pipeline\r\n                .run(instruction)\r\n                .then(function (result) { return processResult(instruction, result, instructionCount, _this); })\r\n                .catch(function (error) {\r\n                return { output: error instanceof Error ? error : new Error(error) };\r\n            })\r\n                .then(function (result) { return resolveInstruction(instruction, result, !!instructionCount, _this); });\r\n        });\r\n    };\r\n    /**@internal */\r\n    AppRouter.prototype._findViewModel = function (viewPort) {\r\n        if (this.container.viewModel) {\r\n            return this.container.viewModel;\r\n        }\r\n        if (viewPort.container) {\r\n            var container = viewPort.container;\r\n            while (container) {\r\n                if (container.viewModel) {\r\n                    this.container.viewModel = container.viewModel;\r\n                    return container.viewModel;\r\n                }\r\n                container = container.parent;\r\n            }\r\n        }\r\n        return undefined;\r\n    };\r\n    return AppRouter;\r\n}(aurelia_router_Router));\r\nvar processResult = function (instruction, result, instructionCount, router) {\r\n    if (!(result && 'completed' in result && 'output' in result)) {\r\n        result = result || {};\r\n        result.output = new Error(\"Expected router pipeline to return a navigation result, but got [\" + JSON.stringify(result) + \"] instead.\");\r\n    }\r\n    var finalResult = null;\r\n    var navigationCommandResult = null;\r\n    if (isNavigationCommand(result.output)) {\r\n        navigationCommandResult = result.output.navigate(router);\r\n    }\r\n    else {\r\n        finalResult = result;\r\n        if (!result.completed) {\r\n            if (result.output instanceof Error) {\r\n                logger.error(result.output.toString());\r\n            }\r\n            restorePreviousLocation(router);\r\n        }\r\n    }\r\n    return Promise.resolve(navigationCommandResult)\r\n        .then(function (_) { return router._dequeueInstruction(instructionCount + 1); })\r\n        .then(function (innerResult) { return finalResult || innerResult || result; });\r\n};\r\nvar resolveInstruction = function (instruction, result, isInnerInstruction, router) {\r\n    instruction.resolve(result);\r\n    var eventAggregator = router.events;\r\n    var eventArgs = { instruction: instruction, result: result };\r\n    if (!isInnerInstruction) {\r\n        router.isNavigating = false;\r\n        router.isExplicitNavigation = false;\r\n        router.isExplicitNavigationBack = false;\r\n        router.isNavigatingFirst = false;\r\n        router.isNavigatingNew = false;\r\n        router.isNavigatingRefresh = false;\r\n        router.isNavigatingForward = false;\r\n        router.isNavigatingBack = false;\r\n        router.couldDeactivate = false;\r\n        var eventName = void 0;\r\n        if (result.output instanceof Error) {\r\n            eventName = \"router:navigation:error\" /* Error */;\r\n        }\r\n        else if (!result.completed) {\r\n            eventName = \"router:navigation:canceled\" /* Canceled */;\r\n        }\r\n        else {\r\n            var queryString = instruction.queryString ? ('?' + instruction.queryString) : '';\r\n            router.history.previousLocation = instruction.fragment + queryString;\r\n            eventName = \"router:navigation:success\" /* Success */;\r\n        }\r\n        eventAggregator.publish(eventName, eventArgs);\r\n        eventAggregator.publish(\"router:navigation:complete\" /* Complete */, eventArgs);\r\n    }\r\n    else {\r\n        eventAggregator.publish(\"router:navigation:child:complete\" /* ChildComplete */, eventArgs);\r\n    }\r\n    return result;\r\n};\r\nvar restorePreviousLocation = function (router) {\r\n    var previousLocation = router.history.previousLocation;\r\n    if (previousLocation) {\r\n        router.navigate(previousLocation, { trigger: false, replace: true });\r\n    }\r\n    else if (router.fallbackRoute) {\r\n        router.navigate(router.fallbackRoute, { trigger: true, replace: true });\r\n    }\r\n    else {\r\n        logger.error('Router navigation failed, and no previous location or fallbackRoute could be restored.');\r\n    }\r\n};\n\n/**\r\n* The status of a Pipeline.\r\n*/\r\nvar PipelineStatus;\r\n(function (PipelineStatus) {\r\n    PipelineStatus[\"Completed\"] = \"completed\";\r\n    PipelineStatus[\"Canceled\"] = \"canceled\";\r\n    PipelineStatus[\"Rejected\"] = \"rejected\";\r\n    PipelineStatus[\"Running\"] = \"running\";\r\n})(PipelineStatus || (PipelineStatus = {}));\n\n/**\r\n * A list of known router events used by the Aurelia router\r\n * to signal the pipeline has come to a certain state\r\n */\r\n// const enum is preserved in tsconfig\r\nvar RouterEvent;\r\n(function (RouterEvent) {\r\n    RouterEvent[\"Processing\"] = \"router:navigation:processing\";\r\n    RouterEvent[\"Error\"] = \"router:navigation:error\";\r\n    RouterEvent[\"Canceled\"] = \"router:navigation:canceled\";\r\n    RouterEvent[\"Complete\"] = \"router:navigation:complete\";\r\n    RouterEvent[\"Success\"] = \"router:navigation:success\";\r\n    RouterEvent[\"ChildComplete\"] = \"router:navigation:child:complete\";\r\n})(RouterEvent || (RouterEvent = {}));\n\n/**\r\n * Available pipeline slot names to insert interceptor into router pipeline\r\n */\r\n// const enum is preserved in tsconfig\r\nvar PipelineSlotName;\r\n(function (PipelineSlotName) {\r\n    /**\r\n     * Authorization slot. Invoked early in the pipeline,\r\n     * before `canActivate` hook of incoming route\r\n     */\r\n    PipelineSlotName[\"Authorize\"] = \"authorize\";\r\n    /**\r\n     * Pre-activation slot. Invoked early in the pipeline,\r\n     * Invoked timing:\r\n     *   - after Authorization slot\r\n     *   - after canActivate hook on new view model\r\n     *   - before deactivate hook on old view model\r\n     *   - before activate hook on new view model\r\n     */\r\n    PipelineSlotName[\"PreActivate\"] = \"preActivate\";\r\n    /**\r\n     * Pre-render slot. Invoked later in the pipeline\r\n     * Invokcation timing:\r\n     *   - after activate hook on new view model\r\n     *   - before commit step on new navigation instruction\r\n     */\r\n    PipelineSlotName[\"PreRender\"] = \"preRender\";\r\n    /**\r\n     * Post-render slot. Invoked last in the pipeline\r\n     */\r\n    PipelineSlotName[\"PostRender\"] = \"postRender\";\r\n})(PipelineSlotName || (PipelineSlotName = {}));\n\n\n//# sourceMappingURL=aurelia-router.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXVyZWxpYS1yb3V0ZS1yZWNvZ25pemVyL2Rpc3QvbmF0aXZlLW1vZHVsZXMvYXVyZWxpYS1yb3V0ZS1yZWNvZ25pemVyLmpzP2QxZWIiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F1cmVsaWEtcm91dGVyL2Rpc3QvbmF0aXZlLW1vZHVsZXMvYXVyZWxpYS1yb3V0ZXIuanM/ZTMyYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUVrRTs7QUFFM0Q7QUFDUDs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0pBQXdKO0FBQ3hKOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSwwQ0FBMEMsT0FBTztBQUNqRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQsb0VBQW9FLEtBQUs7O0FBRXpFOztBQUVPO0FBQ1A7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0NBQWtDLFFBQVE7QUFDMUM7QUFDQSxnQkFBZ0IsNEVBQTRFO0FBQzVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRU07QUFDUDs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyxrQ0FBa0M7QUFDaEQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFTTtBQUNQOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyxpQ0FBaUM7QUFDL0M7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFTTtBQUNQOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVNLElBQUksd0NBQWU7QUFDMUI7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHlDQUF5QyxRQUFRO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxrREFBa0QsUUFBUTtBQUMxRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1Q0FBdUMsa0JBQWtCO0FBQ3pEO0FBQ0E7O0FBRUEscUJBQXFCLHVDQUF1Qzs7QUFFNUQsb0NBQW9DLHlDQUF5QztBQUM3RTtBQUNBO0FBQ0EsdUJBQXVCLHlCQUF5QjtBQUNoRDtBQUNBLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7O0FBRUEscUJBQXFCLDhCQUE4QjtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQSx3Q0FBd0MsT0FBTztBQUMvQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHNCQUFzQix3Q0FBZ0I7QUFDdEM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLHdDQUFnQjtBQUNwQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw4Q0FBOEMsT0FBTztBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EseUNBQXlDLFVBQVU7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLHlDQUF5QyxRQUFRO0FBQ2pEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQSxvQ0FBb0MsT0FBTztBQUMzQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsc0NBQXNDLE9BQU87QUFDN0M7QUFDQTtBQUNBOztBQUVBLHNDQUFzQyxPQUFPO0FBQzdDO0FBQ0E7O0FBRUEsaUJBQWlCLHlFQUF5RTtBQUMxRjs7QUFFQTtBQUNBOztBQUVBO0FBQ0EscUNBQXFDLGtCQUFrQjtBQUN2RDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsQzs7Ozs7QUNwZkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBNEM7QUFDYTtBQUNmO0FBQ2lCO0FBQ0E7O0FBRTNEO0FBQ0E7QUFDQSwrREFBK0Q7QUFDL0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVSxnQkFBZ0Isc0NBQXNDLGlCQUFpQixFQUFFO0FBQ25GLHlCQUF5Qix1REFBdUQ7QUFDaEY7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUJBQW1CLHNCQUFzQjtBQUN6QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdEO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCx1REFBdUQ7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkRBQTJELDhCQUE4QixFQUFFLHVCQUF1QixVQUFVLEVBQUU7QUFDOUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyxxQkFBcUIsZ0NBQWdDO0FBQzFGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsK0RBQStEO0FBQ3hHO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQztBQUMzQztBQUNBLDRDQUE0QyxFQUFFO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsK0NBQStDLEVBQUU7QUFDOUY7QUFDQSxTQUFTO0FBQ1QsK0JBQStCLHFCQUFxQixFQUFFO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsbUJBQW1CO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQSw4QkFBOEIsa0JBQWtCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQWlELFFBQVE7QUFDekQsMENBQTBDO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEM7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyx5QkFBeUI7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLHFCQUFxQixFQUFFO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsZ0JBQWdCLFdBQVcsRUFBRTtBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRCxRQUFRO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQsUUFBUTtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1ELFFBQVE7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxJQUFJLHFCQUFNO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQix3Q0FBZTtBQUM5QyxvQ0FBb0Msd0NBQWU7QUFDbkQ7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzRkFBc0Y7QUFDdEYsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBLGdDQUFnQyxhQUFhO0FBQzdDLGlDQUFpQyxjQUFjO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDLDBCQUEwQixFQUFFO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLGNBQWM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLFVBQVU7QUFDdkMsMkNBQTJDLDBCQUEwQjtBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdFQUF3RTtBQUN4RTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdFQUF3RTtBQUN4RSx5QkFBeUIsaUJBQWlCO0FBQzFDLCtGQUErRjtBQUMvRjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0RUFBNEU7QUFDNUUsNkJBQTZCLGlCQUFpQjtBQUM5QyxtR0FBbUc7QUFDbkc7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLGlDQUFpQyxjQUFjLEtBQUssRUFBRTtBQUN0RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssRUFBRTtBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDLE9BQU87QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLGNBQWM7QUFDL0M7QUFDQSxzQ0FBc0MsK0JBQStCO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsYUFBYTtBQUM3QyxpQ0FBaUMsY0FBYztBQUMvQztBQUNBO0FBQ0Esc0NBQXNDLCtCQUErQjtBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJFQUEyRTtBQUMzRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRCxzQkFBc0IsRUFBRTtBQUMxRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdFQUFnRSw0RkFBNEYsRUFBRTtBQUM5SjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsbUJBQW1CO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsMkVBQTJFO0FBQzFHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIscUVBQXFFLEVBQUU7QUFDbEc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsMEdBQTBHLEVBQUU7QUFDckosbUNBQW1DLGtCQUFrQixFQUFFO0FBQ3ZEO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0Msc0JBQXNCO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLGdFQUFnRTtBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsV0FBVztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdFQUFnRSx1Q0FBdUMsRUFBRTtBQUN6RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLFdBQVc7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0Q7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsRUFBRSxFQUFFO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsK0JBQStCLEVBQUU7QUFDN0U7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxJQUFJLCtCQUFnQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkMsU0FBUyxpREFBUyxFQUFFO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsNkJBQTZCO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QyxvREFBb0QsRUFBRTtBQUNuRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLFdBQVc7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGFBQWEsb0NBQVM7QUFDdEI7QUFDQTtBQUNBO0FBQ0EsSUFBSSx3QkFBUztBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsU0FBUyxpREFBUyxFQUFFLGtDQUFPLEVBQUUsK0JBQWdCLEVBQUUsMkNBQWUsRUFBRTtBQUNwRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLDZDQUE2QyxFQUFFO0FBQ3pGO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0VBQWtFO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyxlQUFlLEVBQUU7QUFDaEUscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyx3Q0FBd0M7QUFDOUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyxzQkFBc0I7QUFDaEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVGQUF1RiwyQkFBMkI7QUFDbEg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLG9FQUFvRSxFQUFFO0FBQy9HO0FBQ0Esd0JBQXdCO0FBQ3hCLGFBQWE7QUFDYix5Q0FBeUMsMkVBQTJFLEVBQUU7QUFDdEgsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxDQUFDLHFCQUFNO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qix5REFBeUQsRUFBRTtBQUN2RixzQ0FBc0MsNkNBQTZDLEVBQUU7QUFDckY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLGdDQUFnQztBQUMzRTtBQUNBO0FBQ0EsK0NBQStDLCtCQUErQjtBQUM5RTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsd0NBQXdDOztBQUV6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsa0NBQWtDOztBQUVuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsNENBQTRDOztBQUV1VjtBQUNwWSIsImZpbGUiOiIxMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIlxuXG5pbXBvcnQgeyBidWlsZFF1ZXJ5U3RyaW5nLCBwYXJzZVF1ZXJ5U3RyaW5nIH0gZnJvbSAnYXVyZWxpYS1wYXRoJztcblxuZXhwb3J0IHZhciBTdGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gU3RhdGUoY2hhclNwZWMpIHtcbiAgICBcblxuICAgIHRoaXMuY2hhclNwZWMgPSBjaGFyU3BlYztcbiAgICB0aGlzLm5leHRTdGF0ZXMgPSBbXTtcbiAgfVxuXG4gIFN0YXRlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiBnZXQoY2hhclNwZWMpIHtcbiAgICBmb3IgKHZhciBfaXRlcmF0b3IgPSB0aGlzLm5leHRTdGF0ZXMsIF9pc0FycmF5ID0gQXJyYXkuaXNBcnJheShfaXRlcmF0b3IpLCBfaSA9IDAsIF9pdGVyYXRvciA9IF9pc0FycmF5ID8gX2l0ZXJhdG9yIDogX2l0ZXJhdG9yW1N5bWJvbC5pdGVyYXRvcl0oKTs7KSB7XG4gICAgICB2YXIgX3JlZjtcblxuICAgICAgaWYgKF9pc0FycmF5KSB7XG4gICAgICAgIGlmIChfaSA+PSBfaXRlcmF0b3IubGVuZ3RoKSBicmVhaztcbiAgICAgICAgX3JlZiA9IF9pdGVyYXRvcltfaSsrXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF9pID0gX2l0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgaWYgKF9pLmRvbmUpIGJyZWFrO1xuICAgICAgICBfcmVmID0gX2kudmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBjaGlsZCA9IF9yZWY7XG5cbiAgICAgIHZhciBpc0VxdWFsID0gY2hpbGQuY2hhclNwZWMudmFsaWRDaGFycyA9PT0gY2hhclNwZWMudmFsaWRDaGFycyAmJiBjaGlsZC5jaGFyU3BlYy5pbnZhbGlkQ2hhcnMgPT09IGNoYXJTcGVjLmludmFsaWRDaGFycztcblxuICAgICAgaWYgKGlzRXF1YWwpIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgU3RhdGUucHJvdG90eXBlLnB1dCA9IGZ1bmN0aW9uIHB1dChjaGFyU3BlYykge1xuICAgIHZhciBzdGF0ZSA9IHRoaXMuZ2V0KGNoYXJTcGVjKTtcblxuICAgIGlmIChzdGF0ZSkge1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIHN0YXRlID0gbmV3IFN0YXRlKGNoYXJTcGVjKTtcblxuICAgIHRoaXMubmV4dFN0YXRlcy5wdXNoKHN0YXRlKTtcblxuICAgIGlmIChjaGFyU3BlYy5yZXBlYXQpIHtcbiAgICAgIHN0YXRlLm5leHRTdGF0ZXMucHVzaChzdGF0ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlO1xuICB9O1xuXG4gIFN0YXRlLnByb3RvdHlwZS5tYXRjaCA9IGZ1bmN0aW9uIG1hdGNoKGNoKSB7XG4gICAgdmFyIG5leHRTdGF0ZXMgPSB0aGlzLm5leHRTdGF0ZXM7XG4gICAgdmFyIHJlc3VsdHMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gbmV4dFN0YXRlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBjaGlsZCA9IG5leHRTdGF0ZXNbaV07XG4gICAgICB2YXIgY2hhclNwZWMgPSBjaGlsZC5jaGFyU3BlYztcblxuICAgICAgaWYgKGNoYXJTcGVjLnZhbGlkQ2hhcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoY2hhclNwZWMudmFsaWRDaGFycy5pbmRleE9mKGNoKSAhPT0gLTEpIHtcbiAgICAgICAgICByZXN1bHRzLnB1c2goY2hpbGQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNoYXJTcGVjLmludmFsaWRDaGFycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChjaGFyU3BlYy5pbnZhbGlkQ2hhcnMuaW5kZXhPZihjaCkgPT09IC0xKSB7XG4gICAgICAgICAgcmVzdWx0cy5wdXNoKGNoaWxkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIHJldHVybiBTdGF0ZTtcbn0oKTtcblxudmFyIHNwZWNpYWxzID0gWycvJywgJy4nLCAnKicsICcrJywgJz8nLCAnfCcsICcoJywgJyknLCAnWycsICddJywgJ3snLCAnfScsICdcXFxcJ107XG5cbnZhciBlc2NhcGVSZWdleCA9IG5ldyBSZWdFeHAoJyhcXFxcJyArIHNwZWNpYWxzLmpvaW4oJ3xcXFxcJykgKyAnKScsICdnJyk7XG5cbmV4cG9ydCB2YXIgU3RhdGljU2VnbWVudCA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gU3RhdGljU2VnbWVudChzdHJpbmcsIGNhc2VTZW5zaXRpdmUpIHtcbiAgICBcblxuICAgIHRoaXMuc3RyaW5nID0gc3RyaW5nO1xuICAgIHRoaXMuY2FzZVNlbnNpdGl2ZSA9IGNhc2VTZW5zaXRpdmU7XG4gIH1cblxuICBTdGF0aWNTZWdtZW50LnByb3RvdHlwZS5lYWNoQ2hhciA9IGZ1bmN0aW9uIGVhY2hDaGFyKGNhbGxiYWNrKSB7XG4gICAgdmFyIHMgPSB0aGlzLnN0cmluZztcbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgIHZhciBjaCA9IHNbaV07XG4gICAgICBjYWxsYmFjayh7IHZhbGlkQ2hhcnM6IHRoaXMuY2FzZVNlbnNpdGl2ZSA/IGNoIDogY2gudG9VcHBlckNhc2UoKSArIGNoLnRvTG93ZXJDYXNlKCkgfSk7XG4gICAgfVxuICB9O1xuXG4gIFN0YXRpY1NlZ21lbnQucHJvdG90eXBlLnJlZ2V4ID0gZnVuY3Rpb24gcmVnZXgoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RyaW5nLnJlcGxhY2UoZXNjYXBlUmVnZXgsICdcXFxcJDEnKTtcbiAgfTtcblxuICBTdGF0aWNTZWdtZW50LnByb3RvdHlwZS5nZW5lcmF0ZSA9IGZ1bmN0aW9uIGdlbmVyYXRlKCkge1xuICAgIHJldHVybiB0aGlzLnN0cmluZztcbiAgfTtcblxuICByZXR1cm4gU3RhdGljU2VnbWVudDtcbn0oKTtcblxuZXhwb3J0IHZhciBEeW5hbWljU2VnbWVudCA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRHluYW1pY1NlZ21lbnQobmFtZSwgb3B0aW9uYWwpIHtcbiAgICBcblxuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5vcHRpb25hbCA9IG9wdGlvbmFsO1xuICB9XG5cbiAgRHluYW1pY1NlZ21lbnQucHJvdG90eXBlLmVhY2hDaGFyID0gZnVuY3Rpb24gZWFjaENoYXIoY2FsbGJhY2spIHtcbiAgICBjYWxsYmFjayh7IGludmFsaWRDaGFyczogJy8nLCByZXBlYXQ6IHRydWUgfSk7XG4gIH07XG5cbiAgRHluYW1pY1NlZ21lbnQucHJvdG90eXBlLnJlZ2V4ID0gZnVuY3Rpb24gcmVnZXgoKSB7XG4gICAgcmV0dXJuICcoW14vXSspJztcbiAgfTtcblxuICBEeW5hbWljU2VnbWVudC5wcm90b3R5cGUuZ2VuZXJhdGUgPSBmdW5jdGlvbiBnZW5lcmF0ZShwYXJhbXMsIGNvbnN1bWVkKSB7XG4gICAgY29uc3VtZWRbdGhpcy5uYW1lXSA9IHRydWU7XG4gICAgcmV0dXJuIHBhcmFtc1t0aGlzLm5hbWVdO1xuICB9O1xuXG4gIHJldHVybiBEeW5hbWljU2VnbWVudDtcbn0oKTtcblxuZXhwb3J0IHZhciBTdGFyU2VnbWVudCA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gU3RhclNlZ21lbnQobmFtZSkge1xuICAgIFxuXG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgfVxuXG4gIFN0YXJTZWdtZW50LnByb3RvdHlwZS5lYWNoQ2hhciA9IGZ1bmN0aW9uIGVhY2hDaGFyKGNhbGxiYWNrKSB7XG4gICAgY2FsbGJhY2soeyBpbnZhbGlkQ2hhcnM6ICcnLCByZXBlYXQ6IHRydWUgfSk7XG4gIH07XG5cbiAgU3RhclNlZ21lbnQucHJvdG90eXBlLnJlZ2V4ID0gZnVuY3Rpb24gcmVnZXgoKSB7XG4gICAgcmV0dXJuICcoLispJztcbiAgfTtcblxuICBTdGFyU2VnbWVudC5wcm90b3R5cGUuZ2VuZXJhdGUgPSBmdW5jdGlvbiBnZW5lcmF0ZShwYXJhbXMsIGNvbnN1bWVkKSB7XG4gICAgY29uc3VtZWRbdGhpcy5uYW1lXSA9IHRydWU7XG4gICAgcmV0dXJuIHBhcmFtc1t0aGlzLm5hbWVdO1xuICB9O1xuXG4gIHJldHVybiBTdGFyU2VnbWVudDtcbn0oKTtcblxuZXhwb3J0IHZhciBFcHNpbG9uU2VnbWVudCA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRXBzaWxvblNlZ21lbnQoKSB7XG4gICAgXG4gIH1cblxuICBFcHNpbG9uU2VnbWVudC5wcm90b3R5cGUuZWFjaENoYXIgPSBmdW5jdGlvbiBlYWNoQ2hhcigpIHt9O1xuXG4gIEVwc2lsb25TZWdtZW50LnByb3RvdHlwZS5yZWdleCA9IGZ1bmN0aW9uIHJlZ2V4KCkge1xuICAgIHJldHVybiAnJztcbiAgfTtcblxuICBFcHNpbG9uU2VnbWVudC5wcm90b3R5cGUuZ2VuZXJhdGUgPSBmdW5jdGlvbiBnZW5lcmF0ZSgpIHtcbiAgICByZXR1cm4gJyc7XG4gIH07XG5cbiAgcmV0dXJuIEVwc2lsb25TZWdtZW50O1xufSgpO1xuXG5leHBvcnQgdmFyIFJvdXRlUmVjb2duaXplciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUm91dGVSZWNvZ25pemVyKCkge1xuICAgIFxuXG4gICAgdGhpcy5yb290U3RhdGUgPSBuZXcgU3RhdGUoKTtcbiAgICB0aGlzLm5hbWVzID0ge307XG4gICAgdGhpcy5yb3V0ZXMgPSBuZXcgTWFwKCk7XG4gIH1cblxuICBSb3V0ZVJlY29nbml6ZXIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZChyb3V0ZSkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShyb3V0ZSkpIHtcbiAgICAgIHJvdXRlLmZvckVhY2goZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLmFkZChyKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB2YXIgY3VycmVudFN0YXRlID0gdGhpcy5yb290U3RhdGU7XG4gICAgdmFyIHNraXBwYWJsZVN0YXRlcyA9IFtdO1xuICAgIHZhciByZWdleCA9ICdeJztcbiAgICB2YXIgdHlwZXMgPSB7IHN0YXRpY3M6IDAsIGR5bmFtaWNzOiAwLCBzdGFyczogMCB9O1xuICAgIHZhciBuYW1lcyA9IFtdO1xuICAgIHZhciByb3V0ZU5hbWUgPSByb3V0ZS5oYW5kbGVyLm5hbWU7XG4gICAgdmFyIGlzRW1wdHkgPSB0cnVlO1xuICAgIHZhciBzZWdtZW50cyA9IHBhcnNlKHJvdXRlLnBhdGgsIG5hbWVzLCB0eXBlcywgcm91dGUuY2FzZVNlbnNpdGl2ZSk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBzZWdtZW50cy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICB2YXIgc2VnbWVudCA9IHNlZ21lbnRzW2ldO1xuICAgICAgaWYgKHNlZ21lbnQgaW5zdGFuY2VvZiBFcHNpbG9uU2VnbWVudCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIF9hZGRTZWdtZW50ID0gYWRkU2VnbWVudChjdXJyZW50U3RhdGUsIHNlZ21lbnQpLFxuICAgICAgICAgIGZpcnN0U3RhdGUgPSBfYWRkU2VnbWVudFswXSxcbiAgICAgICAgICBuZXh0U3RhdGUgPSBfYWRkU2VnbWVudFsxXTtcblxuICAgICAgZm9yICh2YXIgaiA9IDAsIGpqID0gc2tpcHBhYmxlU3RhdGVzLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgc2tpcHBhYmxlU3RhdGVzW2pdLm5leHRTdGF0ZXMucHVzaChmaXJzdFN0YXRlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlZ21lbnQub3B0aW9uYWwpIHtcbiAgICAgICAgc2tpcHBhYmxlU3RhdGVzLnB1c2gobmV4dFN0YXRlKTtcbiAgICAgICAgcmVnZXggKz0gJyg/Oi8nICsgc2VnbWVudC5yZWdleCgpICsgJyk/JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN1cnJlbnRTdGF0ZSA9IG5leHRTdGF0ZTtcbiAgICAgICAgcmVnZXggKz0gJy8nICsgc2VnbWVudC5yZWdleCgpO1xuICAgICAgICBza2lwcGFibGVTdGF0ZXMubGVuZ3RoID0gMDtcbiAgICAgICAgaXNFbXB0eSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc0VtcHR5KSB7XG4gICAgICBjdXJyZW50U3RhdGUgPSBjdXJyZW50U3RhdGUucHV0KHsgdmFsaWRDaGFyczogJy8nIH0pO1xuICAgICAgcmVnZXggKz0gJy8/JztcbiAgICB9XG5cbiAgICB2YXIgaGFuZGxlcnMgPSBbeyBoYW5kbGVyOiByb3V0ZS5oYW5kbGVyLCBuYW1lczogbmFtZXMgfV07XG5cbiAgICB0aGlzLnJvdXRlcy5zZXQocm91dGUuaGFuZGxlciwgeyBzZWdtZW50czogc2VnbWVudHMsIGhhbmRsZXJzOiBoYW5kbGVycyB9KTtcbiAgICBpZiAocm91dGVOYW1lKSB7XG4gICAgICB2YXIgcm91dGVOYW1lcyA9IEFycmF5LmlzQXJyYXkocm91dGVOYW1lKSA/IHJvdXRlTmFtZSA6IFtyb3V0ZU5hbWVdO1xuICAgICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgcm91dGVOYW1lcy5sZW5ndGg7IF9pMisrKSB7XG4gICAgICAgIGlmICghKHJvdXRlTmFtZXNbX2kyXSBpbiB0aGlzLm5hbWVzKSkge1xuICAgICAgICAgIHRoaXMubmFtZXNbcm91dGVOYW1lc1tfaTJdXSA9IHsgc2VnbWVudHM6IHNlZ21lbnRzLCBoYW5kbGVyczogaGFuZGxlcnMgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIF9pMyA9IDA7IF9pMyA8IHNraXBwYWJsZVN0YXRlcy5sZW5ndGg7IF9pMysrKSB7XG4gICAgICB2YXIgc3RhdGUgPSBza2lwcGFibGVTdGF0ZXNbX2kzXTtcbiAgICAgIHN0YXRlLmhhbmRsZXJzID0gaGFuZGxlcnM7XG4gICAgICBzdGF0ZS5yZWdleCA9IG5ldyBSZWdFeHAocmVnZXggKyAnJCcsIHJvdXRlLmNhc2VTZW5zaXRpdmUgPyAnJyA6ICdpJyk7XG4gICAgICBzdGF0ZS50eXBlcyA9IHR5cGVzO1xuICAgIH1cblxuICAgIGN1cnJlbnRTdGF0ZS5oYW5kbGVycyA9IGhhbmRsZXJzO1xuICAgIGN1cnJlbnRTdGF0ZS5yZWdleCA9IG5ldyBSZWdFeHAocmVnZXggKyAnJCcsIHJvdXRlLmNhc2VTZW5zaXRpdmUgPyAnJyA6ICdpJyk7XG4gICAgY3VycmVudFN0YXRlLnR5cGVzID0gdHlwZXM7XG5cbiAgICByZXR1cm4gY3VycmVudFN0YXRlO1xuICB9O1xuXG4gIFJvdXRlUmVjb2duaXplci5wcm90b3R5cGUuZ2V0Um91dGUgPSBmdW5jdGlvbiBnZXRSb3V0ZShuYW1lT3JSb3V0ZSkge1xuICAgIHJldHVybiB0eXBlb2YgbmFtZU9yUm91dGUgPT09ICdzdHJpbmcnID8gdGhpcy5uYW1lc1tuYW1lT3JSb3V0ZV0gOiB0aGlzLnJvdXRlcy5nZXQobmFtZU9yUm91dGUpO1xuICB9O1xuXG4gIFJvdXRlUmVjb2duaXplci5wcm90b3R5cGUuaGFuZGxlcnNGb3IgPSBmdW5jdGlvbiBoYW5kbGVyc0ZvcihuYW1lT3JSb3V0ZSkge1xuICAgIHZhciByb3V0ZSA9IHRoaXMuZ2V0Um91dGUobmFtZU9yUm91dGUpO1xuICAgIGlmICghcm91dGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlcmUgaXMgbm8gcm91dGUgbmFtZWQgJyArIG5hbWVPclJvdXRlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gW10uY29uY2F0KHJvdXRlLmhhbmRsZXJzKTtcbiAgfTtcblxuICBSb3V0ZVJlY29nbml6ZXIucHJvdG90eXBlLmhhc1JvdXRlID0gZnVuY3Rpb24gaGFzUm91dGUobmFtZU9yUm91dGUpIHtcbiAgICByZXR1cm4gISF0aGlzLmdldFJvdXRlKG5hbWVPclJvdXRlKTtcbiAgfTtcblxuICBSb3V0ZVJlY29nbml6ZXIucHJvdG90eXBlLmdlbmVyYXRlID0gZnVuY3Rpb24gZ2VuZXJhdGUobmFtZU9yUm91dGUsIHBhcmFtcykge1xuICAgIHZhciByb3V0ZSA9IHRoaXMuZ2V0Um91dGUobmFtZU9yUm91dGUpO1xuICAgIGlmICghcm91dGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlcmUgaXMgbm8gcm91dGUgbmFtZWQgJyArIG5hbWVPclJvdXRlKTtcbiAgICB9XG5cbiAgICB2YXIgaGFuZGxlciA9IHJvdXRlLmhhbmRsZXJzWzBdLmhhbmRsZXI7XG4gICAgaWYgKGhhbmRsZXIuZ2VuZXJhdGlvblVzZXNIcmVmKSB7XG4gICAgICByZXR1cm4gaGFuZGxlci5ocmVmO1xuICAgIH1cblxuICAgIHZhciByb3V0ZVBhcmFtcyA9IE9iamVjdC5hc3NpZ24oe30sIHBhcmFtcyk7XG4gICAgdmFyIHNlZ21lbnRzID0gcm91dGUuc2VnbWVudHM7XG4gICAgdmFyIGNvbnN1bWVkID0ge307XG4gICAgdmFyIG91dHB1dCA9ICcnO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBzZWdtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBzZWdtZW50ID0gc2VnbWVudHNbaV07XG5cbiAgICAgIGlmIChzZWdtZW50IGluc3RhbmNlb2YgRXBzaWxvblNlZ21lbnQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBzZWdtZW50VmFsdWUgPSBzZWdtZW50LmdlbmVyYXRlKHJvdXRlUGFyYW1zLCBjb25zdW1lZCk7XG4gICAgICBpZiAoc2VnbWVudFZhbHVlID09PSBudWxsIHx8IHNlZ21lbnRWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICghc2VnbWVudC5vcHRpb25hbCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQSB2YWx1ZSBpcyByZXF1aXJlZCBmb3Igcm91dGUgcGFyYW1ldGVyIFxcJycgKyBzZWdtZW50Lm5hbWUgKyAnXFwnIGluIHJvdXRlIFxcJycgKyBuYW1lT3JSb3V0ZSArICdcXCcuJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dHB1dCArPSAnLyc7XG4gICAgICAgIG91dHB1dCArPSBzZWdtZW50VmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG91dHB1dC5jaGFyQXQoMCkgIT09ICcvJykge1xuICAgICAgb3V0cHV0ID0gJy8nICsgb3V0cHV0O1xuICAgIH1cblxuICAgIGZvciAodmFyIHBhcmFtIGluIGNvbnN1bWVkKSB7XG4gICAgICBkZWxldGUgcm91dGVQYXJhbXNbcGFyYW1dO1xuICAgIH1cblxuICAgIHZhciBxdWVyeVN0cmluZyA9IGJ1aWxkUXVlcnlTdHJpbmcocm91dGVQYXJhbXMpO1xuICAgIG91dHB1dCArPSBxdWVyeVN0cmluZyA/ICc/JyArIHF1ZXJ5U3RyaW5nIDogJyc7XG5cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9O1xuXG4gIFJvdXRlUmVjb2duaXplci5wcm90b3R5cGUucmVjb2duaXplID0gZnVuY3Rpb24gcmVjb2duaXplKHBhdGgpIHtcbiAgICB2YXIgc3RhdGVzID0gW3RoaXMucm9vdFN0YXRlXTtcbiAgICB2YXIgcXVlcnlQYXJhbXMgPSB7fTtcbiAgICB2YXIgaXNTbGFzaERyb3BwZWQgPSBmYWxzZTtcbiAgICB2YXIgbm9ybWFsaXplZFBhdGggPSBwYXRoO1xuXG4gICAgdmFyIHF1ZXJ5U3RhcnQgPSBub3JtYWxpemVkUGF0aC5pbmRleE9mKCc/Jyk7XG4gICAgaWYgKHF1ZXJ5U3RhcnQgIT09IC0xKSB7XG4gICAgICB2YXIgcXVlcnlTdHJpbmcgPSBub3JtYWxpemVkUGF0aC5zdWJzdHIocXVlcnlTdGFydCArIDEsIG5vcm1hbGl6ZWRQYXRoLmxlbmd0aCk7XG4gICAgICBub3JtYWxpemVkUGF0aCA9IG5vcm1hbGl6ZWRQYXRoLnN1YnN0cigwLCBxdWVyeVN0YXJ0KTtcbiAgICAgIHF1ZXJ5UGFyYW1zID0gcGFyc2VRdWVyeVN0cmluZyhxdWVyeVN0cmluZyk7XG4gICAgfVxuXG4gICAgbm9ybWFsaXplZFBhdGggPSBkZWNvZGVVUkkobm9ybWFsaXplZFBhdGgpO1xuXG4gICAgaWYgKG5vcm1hbGl6ZWRQYXRoLmNoYXJBdCgwKSAhPT0gJy8nKSB7XG4gICAgICBub3JtYWxpemVkUGF0aCA9ICcvJyArIG5vcm1hbGl6ZWRQYXRoO1xuICAgIH1cblxuICAgIHZhciBwYXRoTGVuID0gbm9ybWFsaXplZFBhdGgubGVuZ3RoO1xuICAgIGlmIChwYXRoTGVuID4gMSAmJiBub3JtYWxpemVkUGF0aC5jaGFyQXQocGF0aExlbiAtIDEpID09PSAnLycpIHtcbiAgICAgIG5vcm1hbGl6ZWRQYXRoID0gbm9ybWFsaXplZFBhdGguc3Vic3RyKDAsIHBhdGhMZW4gLSAxKTtcbiAgICAgIGlzU2xhc2hEcm9wcGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IG5vcm1hbGl6ZWRQYXRoLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgc3RhdGVzID0gcmVjb2duaXplQ2hhcihzdGF0ZXMsIG5vcm1hbGl6ZWRQYXRoLmNoYXJBdChpKSk7XG4gICAgICBpZiAoIXN0YXRlcy5sZW5ndGgpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHNvbHV0aW9ucyA9IFtdO1xuICAgIGZvciAodmFyIF9pNCA9IDAsIF9sID0gc3RhdGVzLmxlbmd0aDsgX2k0IDwgX2w7IF9pNCsrKSB7XG4gICAgICBpZiAoc3RhdGVzW19pNF0uaGFuZGxlcnMpIHtcbiAgICAgICAgc29sdXRpb25zLnB1c2goc3RhdGVzW19pNF0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRlcyA9IHNvcnRTb2x1dGlvbnMoc29sdXRpb25zKTtcblxuICAgIHZhciBzdGF0ZSA9IHNvbHV0aW9uc1swXTtcbiAgICBpZiAoc3RhdGUgJiYgc3RhdGUuaGFuZGxlcnMpIHtcbiAgICAgIGlmIChpc1NsYXNoRHJvcHBlZCAmJiBzdGF0ZS5yZWdleC5zb3VyY2Uuc2xpY2UoLTUpID09PSAnKC4rKSQnKSB7XG4gICAgICAgIG5vcm1hbGl6ZWRQYXRoID0gbm9ybWFsaXplZFBhdGggKyAnLyc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmaW5kSGFuZGxlcihzdGF0ZSwgbm9ybWFsaXplZFBhdGgsIHF1ZXJ5UGFyYW1zKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFJvdXRlUmVjb2duaXplcjtcbn0oKTtcblxudmFyIFJlY29nbml6ZVJlc3VsdHMgPSBmdW5jdGlvbiBSZWNvZ25pemVSZXN1bHRzKHF1ZXJ5UGFyYW1zKSB7XG4gIFxuXG4gIHRoaXMuc3BsaWNlID0gQXJyYXkucHJvdG90eXBlLnNwbGljZTtcbiAgdGhpcy5zbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbiAgdGhpcy5wdXNoID0gQXJyYXkucHJvdG90eXBlLnB1c2g7XG4gIHRoaXMubGVuZ3RoID0gMDtcbiAgdGhpcy5xdWVyeVBhcmFtcyA9IHF1ZXJ5UGFyYW1zIHx8IHt9O1xufTtcblxuZnVuY3Rpb24gcGFyc2Uocm91dGUsIG5hbWVzLCB0eXBlcywgY2FzZVNlbnNpdGl2ZSkge1xuICB2YXIgbm9ybWFsaXplZFJvdXRlID0gcm91dGU7XG4gIGlmIChyb3V0ZS5jaGFyQXQoMCkgPT09ICcvJykge1xuICAgIG5vcm1hbGl6ZWRSb3V0ZSA9IHJvdXRlLnN1YnN0cigxKTtcbiAgfVxuXG4gIHZhciByZXN1bHRzID0gW107XG5cbiAgdmFyIHNwbGl0Um91dGUgPSBub3JtYWxpemVkUm91dGUuc3BsaXQoJy8nKTtcbiAgZm9yICh2YXIgaSA9IDAsIGlpID0gc3BsaXRSb3V0ZS5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgdmFyIHNlZ21lbnQgPSBzcGxpdFJvdXRlW2ldO1xuXG4gICAgdmFyIG1hdGNoID0gc2VnbWVudC5tYXRjaCgvXjooW14/XSspKFxcPyk/JC8pO1xuICAgIGlmIChtYXRjaCkge1xuICAgICAgdmFyIF9tYXRjaCA9IG1hdGNoLFxuICAgICAgICAgIF9uYW1lID0gX21hdGNoWzFdLFxuICAgICAgICAgIG9wdGlvbmFsID0gX21hdGNoWzJdO1xuXG4gICAgICBpZiAoX25hbWUuaW5kZXhPZignPScpICE9PSAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlciAnICsgX25hbWUgKyAnIGluIHJvdXRlICcgKyByb3V0ZSArICcgaGFzIGEgZGVmYXVsdCB2YWx1ZSwgd2hpY2ggaXMgbm90IHN1cHBvcnRlZC4nKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdHMucHVzaChuZXcgRHluYW1pY1NlZ21lbnQoX25hbWUsICEhb3B0aW9uYWwpKTtcbiAgICAgIG5hbWVzLnB1c2goX25hbWUpO1xuICAgICAgdHlwZXMuZHluYW1pY3MrKztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIG1hdGNoID0gc2VnbWVudC5tYXRjaCgvXlxcKiguKykkLyk7XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICByZXN1bHRzLnB1c2gobmV3IFN0YXJTZWdtZW50KG1hdGNoWzFdKSk7XG4gICAgICBuYW1lcy5wdXNoKG1hdGNoWzFdKTtcbiAgICAgIHR5cGVzLnN0YXJzKys7XG4gICAgfSBlbHNlIGlmIChzZWdtZW50ID09PSAnJykge1xuICAgICAgcmVzdWx0cy5wdXNoKG5ldyBFcHNpbG9uU2VnbWVudCgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0cy5wdXNoKG5ldyBTdGF0aWNTZWdtZW50KHNlZ21lbnQsIGNhc2VTZW5zaXRpdmUpKTtcbiAgICAgIHR5cGVzLnN0YXRpY3MrKztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0cztcbn1cblxuZnVuY3Rpb24gc29ydFNvbHV0aW9ucyhzdGF0ZXMpIHtcbiAgcmV0dXJuIHN0YXRlcy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgaWYgKGEudHlwZXMuc3RhcnMgIT09IGIudHlwZXMuc3RhcnMpIHtcbiAgICAgIHJldHVybiBhLnR5cGVzLnN0YXJzIC0gYi50eXBlcy5zdGFycztcbiAgICB9XG5cbiAgICBpZiAoYS50eXBlcy5zdGFycykge1xuICAgICAgaWYgKGEudHlwZXMuc3RhdGljcyAhPT0gYi50eXBlcy5zdGF0aWNzKSB7XG4gICAgICAgIHJldHVybiBiLnR5cGVzLnN0YXRpY3MgLSBhLnR5cGVzLnN0YXRpY3M7XG4gICAgICB9XG4gICAgICBpZiAoYS50eXBlcy5keW5hbWljcyAhPT0gYi50eXBlcy5keW5hbWljcykge1xuICAgICAgICByZXR1cm4gYi50eXBlcy5keW5hbWljcyAtIGEudHlwZXMuZHluYW1pY3M7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGEudHlwZXMuZHluYW1pY3MgIT09IGIudHlwZXMuZHluYW1pY3MpIHtcbiAgICAgIHJldHVybiBhLnR5cGVzLmR5bmFtaWNzIC0gYi50eXBlcy5keW5hbWljcztcbiAgICB9XG5cbiAgICBpZiAoYS50eXBlcy5zdGF0aWNzICE9PSBiLnR5cGVzLnN0YXRpY3MpIHtcbiAgICAgIHJldHVybiBiLnR5cGVzLnN0YXRpY3MgLSBhLnR5cGVzLnN0YXRpY3M7XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWNvZ25pemVDaGFyKHN0YXRlcywgY2gpIHtcbiAgdmFyIG5leHRTdGF0ZXMgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IHN0YXRlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICB2YXIgc3RhdGUgPSBzdGF0ZXNbaV07XG4gICAgbmV4dFN0YXRlcy5wdXNoLmFwcGx5KG5leHRTdGF0ZXMsIHN0YXRlLm1hdGNoKGNoKSk7XG4gIH1cblxuICByZXR1cm4gbmV4dFN0YXRlcztcbn1cblxuZnVuY3Rpb24gZmluZEhhbmRsZXIoc3RhdGUsIHBhdGgsIHF1ZXJ5UGFyYW1zKSB7XG4gIHZhciBoYW5kbGVycyA9IHN0YXRlLmhhbmRsZXJzO1xuICB2YXIgcmVnZXggPSBzdGF0ZS5yZWdleDtcbiAgdmFyIGNhcHR1cmVzID0gcGF0aC5tYXRjaChyZWdleCk7XG4gIHZhciBjdXJyZW50Q2FwdHVyZSA9IDE7XG4gIHZhciByZXN1bHQgPSBuZXcgUmVjb2duaXplUmVzdWx0cyhxdWVyeVBhcmFtcyk7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBoYW5kbGVycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICB2YXIgX2hhbmRsZXIgPSBoYW5kbGVyc1tpXTtcbiAgICB2YXIgX25hbWVzID0gX2hhbmRsZXIubmFtZXM7XG4gICAgdmFyIF9wYXJhbXMgPSB7fTtcblxuICAgIGZvciAodmFyIGogPSAwLCBtID0gX25hbWVzLmxlbmd0aDsgaiA8IG07IGorKykge1xuICAgICAgX3BhcmFtc1tfbmFtZXNbal1dID0gY2FwdHVyZXNbY3VycmVudENhcHR1cmUrK107XG4gICAgfVxuXG4gICAgcmVzdWx0LnB1c2goeyBoYW5kbGVyOiBfaGFuZGxlci5oYW5kbGVyLCBwYXJhbXM6IF9wYXJhbXMsIGlzRHluYW1pYzogISFfbmFtZXMubGVuZ3RoIH0pO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gYWRkU2VnbWVudChjdXJyZW50U3RhdGUsIHNlZ21lbnQpIHtcbiAgdmFyIGZpcnN0U3RhdGUgPSBjdXJyZW50U3RhdGUucHV0KHsgdmFsaWRDaGFyczogJy8nIH0pO1xuICB2YXIgbmV4dFN0YXRlID0gZmlyc3RTdGF0ZTtcbiAgc2VnbWVudC5lYWNoQ2hhcihmdW5jdGlvbiAoY2gpIHtcbiAgICBuZXh0U3RhdGUgPSBuZXh0U3RhdGUucHV0KGNoKTtcbiAgfSk7XG5cbiAgcmV0dXJuIFtmaXJzdFN0YXRlLCBuZXh0U3RhdGVdO1xufSIsImltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gJ2F1cmVsaWEtbG9nZ2luZyc7XG5pbXBvcnQgeyBDb250YWluZXIgfSBmcm9tICdhdXJlbGlhLWRlcGVuZGVuY3ktaW5qZWN0aW9uJztcbmltcG9ydCB7IEhpc3RvcnkgfSBmcm9tICdhdXJlbGlhLWhpc3RvcnknO1xuaW1wb3J0IHsgUm91dGVSZWNvZ25pemVyIH0gZnJvbSAnYXVyZWxpYS1yb3V0ZS1yZWNvZ25pemVyJztcbmltcG9ydCB7IEV2ZW50QWdncmVnYXRvciB9IGZyb20gJ2F1cmVsaWEtZXZlbnQtYWdncmVnYXRvcic7XG5cbi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlXHJcbnRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlXHJcbkxpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXHJcblxyXG5USElTIENPREUgSVMgUFJPVklERUQgT04gQU4gKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXHJcbktJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRURcclxuV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSxcclxuTUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC5cclxuXHJcblNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xyXG5hbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XHJcbiAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxufTtcclxuXHJcbmZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbn1cblxuLyoqXHJcbiAqIENsYXNzIHVzZWQgdG8gcmVwcmVzZW50IGFuIGluc3RydWN0aW9uIGR1cmluZyBhIG5hdmlnYXRpb24uXHJcbiAqL1xyXG52YXIgTmF2aWdhdGlvbkluc3RydWN0aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gTmF2aWdhdGlvbkluc3RydWN0aW9uKGluaXQpIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDdXJyZW50IGJ1aWx0IHZpZXdwb3J0IHBsYW4gb2YgdGhpcyBuYXYgaW5zdHJ1Y3Rpb25cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBsYW4gPSBudWxsO1xyXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHt9O1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgaW5pdCk7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMgPSB0aGlzLnBhcmFtcyB8fCB7fTtcclxuICAgICAgICB0aGlzLnZpZXdQb3J0SW5zdHJ1Y3Rpb25zID0ge307XHJcbiAgICAgICAgdmFyIGFuY2VzdG9yUGFyYW1zID0gW107XHJcbiAgICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzO1xyXG4gICAgICAgIGRvIHtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnRQYXJhbXMgPSBPYmplY3QuYXNzaWduKHt9LCBjdXJyZW50LnBhcmFtcyk7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50LmNvbmZpZyAmJiBjdXJyZW50LmNvbmZpZy5oYXNDaGlsZFJvdXRlcikge1xyXG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIHRoZSBwYXJhbSBmb3IgdGhlIGluamVjdGVkIGNoaWxkIHJvdXRlIHNlZ21lbnRcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBjdXJyZW50UGFyYW1zW2N1cnJlbnQuZ2V0V2lsZENhcmROYW1lKCldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGFuY2VzdG9yUGFyYW1zLnVuc2hpZnQoY3VycmVudFBhcmFtcyk7XHJcbiAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudEluc3RydWN0aW9uO1xyXG4gICAgICAgIH0gd2hpbGUgKGN1cnJlbnQpO1xyXG4gICAgICAgIHZhciBhbGxQYXJhbXMgPSBPYmplY3QuYXNzaWduLmFwcGx5KE9iamVjdCwgW3t9LCB0aGlzLnF1ZXJ5UGFyYW1zXS5jb25jYXQoYW5jZXN0b3JQYXJhbXMpKTtcclxuICAgICAgICB0aGlzLmxpZmVjeWNsZUFyZ3MgPSBbYWxsUGFyYW1zLCB0aGlzLmNvbmZpZywgdGhpc107XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYW4gYXJyYXkgY29udGFpbmluZyB0aGlzIGluc3RydWN0aW9uIGFuZCBhbGwgY2hpbGQgaW5zdHJ1Y3Rpb25zIGZvciB0aGUgY3VycmVudCBuYXZpZ2F0aW9uLlxyXG4gICAgICovXHJcbiAgICBOYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24ucHJvdG90eXBlLmdldEFsbEluc3RydWN0aW9ucyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgaW5zdHJ1Y3Rpb25zID0gW3RoaXNdO1xyXG4gICAgICAgIHZhciB2aWV3UG9ydEluc3RydWN0aW9ucyA9IHRoaXMudmlld1BvcnRJbnN0cnVjdGlvbnM7XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHZpZXdQb3J0SW5zdHJ1Y3Rpb25zKSB7XHJcbiAgICAgICAgICAgIHZhciBjaGlsZEluc3RydWN0aW9uID0gdmlld1BvcnRJbnN0cnVjdGlvbnNba2V5XS5jaGlsZE5hdmlnYXRpb25JbnN0cnVjdGlvbjtcclxuICAgICAgICAgICAgaWYgKGNoaWxkSW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIGluc3RydWN0aW9ucy5wdXNoLmFwcGx5KGluc3RydWN0aW9ucywgY2hpbGRJbnN0cnVjdGlvbi5nZXRBbGxJbnN0cnVjdGlvbnMoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGluc3RydWN0aW9ucztcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgaW5zdHJ1Y3Rpb24gYW5kIGFsbCBjaGlsZCBpbnN0cnVjdGlvbnMgZm9yIHRoZSBwcmV2aW91cyBuYXZpZ2F0aW9uLlxyXG4gICAgICogUHJldmlvdXMgaW5zdHJ1Y3Rpb25zIGFyZSBubyBsb25nZXIgYXZhaWxhYmxlIGFmdGVyIG5hdmlnYXRpb24gY29tcGxldGVzLlxyXG4gICAgICovXHJcbiAgICBOYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24ucHJvdG90eXBlLmdldEFsbFByZXZpb3VzSW5zdHJ1Y3Rpb25zID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldEFsbEluc3RydWN0aW9ucygpLm1hcChmdW5jdGlvbiAoYykgeyByZXR1cm4gYy5wcmV2aW91c0luc3RydWN0aW9uOyB9KS5maWx0ZXIoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGM7IH0pO1xyXG4gICAgfTtcclxuICAgIE5hdmlnYXRpb25JbnN0cnVjdGlvbi5wcm90b3R5cGUuYWRkVmlld1BvcnRJbnN0cnVjdGlvbiA9IGZ1bmN0aW9uIChuYW1lT3JJbml0T3B0aW9ucywgc3RyYXRlZ3ksIG1vZHVsZUlkLCBjb21wb25lbnQpIHtcclxuICAgICAgICB2YXIgdmlld1BvcnRJbnN0cnVjdGlvbjtcclxuICAgICAgICB2YXIgdmlld1BvcnROYW1lID0gdHlwZW9mIG5hbWVPckluaXRPcHRpb25zID09PSAnc3RyaW5nJyA/IG5hbWVPckluaXRPcHRpb25zIDogbmFtZU9ySW5pdE9wdGlvbnMubmFtZTtcclxuICAgICAgICB2YXIgbGlmZWN5Y2xlQXJncyA9IHRoaXMubGlmZWN5Y2xlQXJncztcclxuICAgICAgICB2YXIgY29uZmlnID0gT2JqZWN0LmFzc2lnbih7fSwgbGlmZWN5Y2xlQXJnc1sxXSwgeyBjdXJyZW50Vmlld1BvcnQ6IHZpZXdQb3J0TmFtZSB9KTtcclxuICAgICAgICBpZiAodHlwZW9mIG5hbWVPckluaXRPcHRpb25zID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICB2aWV3UG9ydEluc3RydWN0aW9uID0ge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogbmFtZU9ySW5pdE9wdGlvbnMsXHJcbiAgICAgICAgICAgICAgICBzdHJhdGVneTogc3RyYXRlZ3ksXHJcbiAgICAgICAgICAgICAgICBtb2R1bGVJZDogbW9kdWxlSWQsXHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnQ6IGNvbXBvbmVudCxcclxuICAgICAgICAgICAgICAgIGNoaWxkUm91dGVyOiBjb21wb25lbnQuY2hpbGRSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgICBsaWZlY3ljbGVBcmdzOiBbbGlmZWN5Y2xlQXJnc1swXSwgY29uZmlnLCBsaWZlY3ljbGVBcmdzWzJdXVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdmlld1BvcnRJbnN0cnVjdGlvbiA9IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IHZpZXdQb3J0TmFtZSxcclxuICAgICAgICAgICAgICAgIHN0cmF0ZWd5OiBuYW1lT3JJbml0T3B0aW9ucy5zdHJhdGVneSxcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudDogbmFtZU9ySW5pdE9wdGlvbnMuY29tcG9uZW50LFxyXG4gICAgICAgICAgICAgICAgbW9kdWxlSWQ6IG5hbWVPckluaXRPcHRpb25zLm1vZHVsZUlkLFxyXG4gICAgICAgICAgICAgICAgY2hpbGRSb3V0ZXI6IG5hbWVPckluaXRPcHRpb25zLmNvbXBvbmVudC5jaGlsZFJvdXRlcixcclxuICAgICAgICAgICAgICAgIGxpZmVjeWNsZUFyZ3M6IFtsaWZlY3ljbGVBcmdzWzBdLCBjb25maWcsIGxpZmVjeWNsZUFyZ3NbMl1dXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdQb3J0SW5zdHJ1Y3Rpb25zW3ZpZXdQb3J0TmFtZV0gPSB2aWV3UG9ydEluc3RydWN0aW9uO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgbmFtZSBvZiB0aGUgcm91dGUgcGF0dGVybidzIHdpbGRjYXJkIHBhcmFtZXRlciwgaWYgYXBwbGljYWJsZS5cclxuICAgICAqL1xyXG4gICAgTmF2aWdhdGlvbkluc3RydWN0aW9uLnByb3RvdHlwZS5nZXRXaWxkQ2FyZE5hbWUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy8gdG9kbzogcG90ZW50aWFsIGlzc3VlLCBvciBhdCBsZWFzdCB1bnNhZmUgdHlwaW5nc1xyXG4gICAgICAgIHZhciBjb25maWdSb3V0ZSA9IHRoaXMuY29uZmlnLnJvdXRlO1xyXG4gICAgICAgIHZhciB3aWxkY2FyZEluZGV4ID0gY29uZmlnUm91dGUubGFzdEluZGV4T2YoJyonKTtcclxuICAgICAgICByZXR1cm4gY29uZmlnUm91dGUuc3Vic3RyKHdpbGRjYXJkSW5kZXggKyAxKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHBhdGggYW5kIHF1ZXJ5IHN0cmluZyBjcmVhdGVkIGJ5IGZpbGxpbmcgdGhlIHJvdXRlXHJcbiAgICAgKiBwYXR0ZXJuJ3Mgd2lsZGNhcmQgcGFyYW1ldGVyIHdpdGggdGhlIG1hdGNoaW5nIHBhcmFtLlxyXG4gICAgICovXHJcbiAgICBOYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24ucHJvdG90eXBlLmdldFdpbGRjYXJkUGF0aCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgd2lsZGNhcmROYW1lID0gdGhpcy5nZXRXaWxkQ2FyZE5hbWUoKTtcclxuICAgICAgICB2YXIgcGF0aCA9IHRoaXMucGFyYW1zW3dpbGRjYXJkTmFtZV0gfHwgJyc7XHJcbiAgICAgICAgdmFyIHF1ZXJ5U3RyaW5nID0gdGhpcy5xdWVyeVN0cmluZztcclxuICAgICAgICBpZiAocXVlcnlTdHJpbmcpIHtcclxuICAgICAgICAgICAgcGF0aCArPSAnPycgKyBxdWVyeVN0cmluZztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBhdGg7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBpbnN0cnVjdGlvbidzIGJhc2UgVVJMLCBhY2NvdW50aW5nIGZvciB3aWxkY2FyZCByb3V0ZSBwYXJhbWV0ZXJzLlxyXG4gICAgICovXHJcbiAgICBOYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24ucHJvdG90eXBlLmdldEJhc2VVcmwgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB2YXIgJGVuY29kZVVSSSA9IGVuY29kZVVSSTtcclxuICAgICAgICB2YXIgZnJhZ21lbnQgPSBkZWNvZGVVUkkodGhpcy5mcmFnbWVudCk7XHJcbiAgICAgICAgaWYgKGZyYWdtZW50ID09PSAnJykge1xyXG4gICAgICAgICAgICB2YXIgbm9uRW1wdHlSb3V0ZSA9IHRoaXMucm91dGVyLnJvdXRlcy5maW5kKGZ1bmN0aW9uIChyb3V0ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJvdXRlLm5hbWUgPT09IF90aGlzLmNvbmZpZy5uYW1lICYmXHJcbiAgICAgICAgICAgICAgICAgICAgcm91dGUucm91dGUgIT09ICcnO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKG5vbkVtcHR5Um91dGUpIHtcclxuICAgICAgICAgICAgICAgIGZyYWdtZW50ID0gbm9uRW1wdHlSb3V0ZS5yb3V0ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMucGFyYW1zKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAkZW5jb2RlVVJJKGZyYWdtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHdpbGRjYXJkTmFtZSA9IHRoaXMuZ2V0V2lsZENhcmROYW1lKCk7XHJcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLnBhcmFtc1t3aWxkY2FyZE5hbWVdIHx8ICcnO1xyXG4gICAgICAgIGlmICghcGF0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJGVuY29kZVVSSShmcmFnbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAkZW5jb2RlVVJJKGZyYWdtZW50LnN1YnN0cigwLCBmcmFnbWVudC5sYXN0SW5kZXhPZihwYXRoKSkpO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogRmluYWxpemUgYSB2aWV3cG9ydCBpbnN0cnVjdGlvblxyXG4gICAgICogQGludGVybmFsXHJcbiAgICAgKi9cclxuICAgIE5hdmlnYXRpb25JbnN0cnVjdGlvbi5wcm90b3R5cGUuX2NvbW1pdENoYW5nZXMgPSBmdW5jdGlvbiAod2FpdFRvU3dhcCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdmFyIHJvdXRlciA9IHRoaXMucm91dGVyO1xyXG4gICAgICAgIHJvdXRlci5jdXJyZW50SW5zdHJ1Y3Rpb24gPSB0aGlzO1xyXG4gICAgICAgIHZhciBwcmV2aW91c0luc3RydWN0aW9uID0gdGhpcy5wcmV2aW91c0luc3RydWN0aW9uO1xyXG4gICAgICAgIGlmIChwcmV2aW91c0luc3RydWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHByZXZpb3VzSW5zdHJ1Y3Rpb24uY29uZmlnLm5hdk1vZGVsLmlzQWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY29uZmlnLm5hdk1vZGVsLmlzQWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICByb3V0ZXIucmVmcmVzaE5hdmlnYXRpb24oKTtcclxuICAgICAgICB2YXIgbG9hZHMgPSBbXTtcclxuICAgICAgICB2YXIgZGVsYXlTd2FwcyA9IFtdO1xyXG4gICAgICAgIHZhciB2aWV3UG9ydEluc3RydWN0aW9ucyA9IHRoaXMudmlld1BvcnRJbnN0cnVjdGlvbnM7XHJcbiAgICAgICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAodmlld1BvcnROYW1lKSB7XHJcbiAgICAgICAgICAgIHZhciB2aWV3UG9ydEluc3RydWN0aW9uID0gdmlld1BvcnRJbnN0cnVjdGlvbnNbdmlld1BvcnROYW1lXTtcclxuICAgICAgICAgICAgdmFyIHZpZXdQb3J0ID0gcm91dGVyLnZpZXdQb3J0c1t2aWV3UG9ydE5hbWVdO1xyXG4gICAgICAgICAgICBpZiAoIXZpZXdQb3J0KSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGVyZSB3YXMgbm8gcm91dGVyLXZpZXcgZm91bmQgaW4gdGhlIHZpZXcgZm9yIFwiICsgdmlld1BvcnRJbnN0cnVjdGlvbi5tb2R1bGVJZCArIFwiLlwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgY2hpbGROYXZJbnN0cnVjdGlvbiA9IHZpZXdQb3J0SW5zdHJ1Y3Rpb24uY2hpbGROYXZpZ2F0aW9uSW5zdHJ1Y3Rpb247XHJcbiAgICAgICAgICAgIGlmICh2aWV3UG9ydEluc3RydWN0aW9uLnN0cmF0ZWd5ID09PSBcInJlcGxhY2VcIiAvKiBSZXBsYWNlICovKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGROYXZJbnN0cnVjdGlvbiAmJiBjaGlsZE5hdkluc3RydWN0aW9uLnBhcmVudENhdGNoSGFuZGxlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvYWRzLnB1c2goY2hpbGROYXZJbnN0cnVjdGlvbi5fY29tbWl0Q2hhbmdlcyh3YWl0VG9Td2FwKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAod2FpdFRvU3dhcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxheVN3YXBzLnB1c2goeyB2aWV3UG9ydDogdmlld1BvcnQsIHZpZXdQb3J0SW5zdHJ1Y3Rpb246IHZpZXdQb3J0SW5zdHJ1Y3Rpb24gfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGxvYWRzLnB1c2godmlld1BvcnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnByb2Nlc3Modmlld1BvcnRJbnN0cnVjdGlvbiwgd2FpdFRvU3dhcClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4gY2hpbGROYXZJbnN0cnVjdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGNoaWxkTmF2SW5zdHJ1Y3Rpb24uX2NvbW1pdENoYW5nZXMod2FpdFRvU3dhcClcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBQcm9taXNlLnJlc29sdmUoKTsgfSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkTmF2SW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2Fkcy5wdXNoKGNoaWxkTmF2SW5zdHJ1Y3Rpb24uX2NvbW1pdENoYW5nZXMod2FpdFRvU3dhcCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBmb3IgKHZhciB2aWV3UG9ydE5hbWUgaW4gdmlld1BvcnRJbnN0cnVjdGlvbnMpIHtcclxuICAgICAgICAgICAgX2xvb3BfMSh2aWV3UG9ydE5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gUHJvbWlzZVxyXG4gICAgICAgICAgICAuYWxsKGxvYWRzKVxyXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGRlbGF5U3dhcHMuZm9yRWFjaChmdW5jdGlvbiAoeCkgeyByZXR1cm4geC52aWV3UG9ydC5zd2FwKHgudmlld1BvcnRJbnN0cnVjdGlvbik7IH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9KVxyXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiBwcnVuZShfdGhpcyk7IH0pO1xyXG4gICAgfTtcclxuICAgIC8qKkBpbnRlcm5hbCAqL1xyXG4gICAgTmF2aWdhdGlvbkluc3RydWN0aW9uLnByb3RvdHlwZS5fdXBkYXRlVGl0bGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHJvdXRlciA9IHRoaXMucm91dGVyO1xyXG4gICAgICAgIHZhciB0aXRsZSA9IHRoaXMuX2J1aWxkVGl0bGUocm91dGVyLnRpdGxlU2VwYXJhdG9yKTtcclxuICAgICAgICBpZiAodGl0bGUpIHtcclxuICAgICAgICAgICAgcm91dGVyLmhpc3Rvcnkuc2V0VGl0bGUodGl0bGUpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvKipAaW50ZXJuYWwgKi9cclxuICAgIE5hdmlnYXRpb25JbnN0cnVjdGlvbi5wcm90b3R5cGUuX2J1aWxkVGl0bGUgPSBmdW5jdGlvbiAoc2VwYXJhdG9yKSB7XHJcbiAgICAgICAgaWYgKHNlcGFyYXRvciA9PT0gdm9pZCAwKSB7IHNlcGFyYXRvciA9ICcgfCAnOyB9XHJcbiAgICAgICAgdmFyIHRpdGxlID0gJyc7XHJcbiAgICAgICAgdmFyIGNoaWxkVGl0bGVzID0gW107XHJcbiAgICAgICAgdmFyIG5hdk1vZGVsVGl0bGUgPSB0aGlzLmNvbmZpZy5uYXZNb2RlbC50aXRsZTtcclxuICAgICAgICB2YXIgaW5zdHJ1Y3Rpb25Sb3V0ZXIgPSB0aGlzLnJvdXRlcjtcclxuICAgICAgICB2YXIgdmlld1BvcnRJbnN0cnVjdGlvbnMgPSB0aGlzLnZpZXdQb3J0SW5zdHJ1Y3Rpb25zO1xyXG4gICAgICAgIGlmIChuYXZNb2RlbFRpdGxlKSB7XHJcbiAgICAgICAgICAgIHRpdGxlID0gaW5zdHJ1Y3Rpb25Sb3V0ZXIudHJhbnNmb3JtVGl0bGUobmF2TW9kZWxUaXRsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIHZpZXdQb3J0TmFtZSBpbiB2aWV3UG9ydEluc3RydWN0aW9ucykge1xyXG4gICAgICAgICAgICB2YXIgdmlld1BvcnRJbnN0cnVjdGlvbiA9IHZpZXdQb3J0SW5zdHJ1Y3Rpb25zW3ZpZXdQb3J0TmFtZV07XHJcbiAgICAgICAgICAgIHZhciBjaGlsZF9uYXZfaW5zdHJ1Y3Rpb24gPSB2aWV3UG9ydEluc3RydWN0aW9uLmNoaWxkTmF2aWdhdGlvbkluc3RydWN0aW9uO1xyXG4gICAgICAgICAgICBpZiAoY2hpbGRfbmF2X2luc3RydWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2hpbGRUaXRsZSA9IGNoaWxkX25hdl9pbnN0cnVjdGlvbi5fYnVpbGRUaXRsZShzZXBhcmF0b3IpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkVGl0bGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRpdGxlcy5wdXNoKGNoaWxkVGl0bGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjaGlsZFRpdGxlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGl0bGUgPSBjaGlsZFRpdGxlcy5qb2luKHNlcGFyYXRvcikgKyAodGl0bGUgPyBzZXBhcmF0b3IgOiAnJykgKyB0aXRsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGluc3RydWN0aW9uUm91dGVyLnRpdGxlKSB7XHJcbiAgICAgICAgICAgIHRpdGxlICs9ICh0aXRsZSA/IHNlcGFyYXRvciA6ICcnKSArIGluc3RydWN0aW9uUm91dGVyLnRyYW5zZm9ybVRpdGxlKGluc3RydWN0aW9uUm91dGVyLnRpdGxlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRpdGxlO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBOYXZpZ2F0aW9uSW5zdHJ1Y3Rpb247XHJcbn0oKSk7XHJcbnZhciBwcnVuZSA9IGZ1bmN0aW9uIChpbnN0cnVjdGlvbikge1xyXG4gICAgaW5zdHJ1Y3Rpb24ucHJldmlvdXNJbnN0cnVjdGlvbiA9IG51bGw7XHJcbiAgICBpbnN0cnVjdGlvbi5wbGFuID0gbnVsbDtcclxufTtcblxuLyoqXHJcbiogQ2xhc3MgZm9yIHN0b3JpbmcgYW5kIGludGVyYWN0aW5nIHdpdGggYSByb3V0ZSdzIG5hdmlnYXRpb24gc2V0dGluZ3MuXHJcbiovXHJcbnZhciBOYXZNb2RlbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIE5hdk1vZGVsKHJvdXRlciwgcmVsYXRpdmVIcmVmKSB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgKiBUcnVlIGlmIHRoaXMgbmF2IGl0ZW0gaXMgY3VycmVudGx5IGFjdGl2ZS5cclxuICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAvKipcclxuICAgICAgICAqIFRoZSB0aXRsZS5cclxuICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudGl0bGUgPSBudWxsO1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICogVGhpcyBuYXYgaXRlbSdzIGFic29sdXRlIGhyZWYuXHJcbiAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmhyZWYgPSBudWxsO1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICogVGhpcyBuYXYgaXRlbSdzIHJlbGF0aXZlIGhyZWYuXHJcbiAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnJlbGF0aXZlSHJlZiA9IG51bGw7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgKiBEYXRhIGF0dGFjaGVkIHRvIHRoZSByb3V0ZSBhdCBjb25maWd1cmF0aW9uIHRpbWUuXHJcbiAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNldHRpbmdzID0ge307XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgKiBUaGUgcm91dGUgY29uZmlnLlxyXG4gICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jb25maWcgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucm91dGVyID0gcm91dGVyO1xyXG4gICAgICAgIHRoaXMucmVsYXRpdmVIcmVmID0gcmVsYXRpdmVIcmVmO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAqIFNldHMgdGhlIHJvdXRlJ3MgdGl0bGUgYW5kIHVwZGF0ZXMgZG9jdW1lbnQudGl0bGUuXHJcbiAgICAqICBJZiB0aGUgYSBuYXZpZ2F0aW9uIGlzIGluIHByb2dyZXNzLCB0aGUgY2hhbmdlIHdpbGwgYmUgYXBwbGllZFxyXG4gICAgKiAgdG8gZG9jdW1lbnQudGl0bGUgd2hlbiB0aGUgbmF2aWdhdGlvbiBjb21wbGV0ZXMuXHJcbiAgICAqXHJcbiAgICAqIEBwYXJhbSB0aXRsZSBUaGUgbmV3IHRpdGxlLlxyXG4gICAgKi9cclxuICAgIE5hdk1vZGVsLnByb3RvdHlwZS5zZXRUaXRsZSA9IGZ1bmN0aW9uICh0aXRsZSkge1xyXG4gICAgICAgIHRoaXMudGl0bGUgPSB0aXRsZTtcclxuICAgICAgICBpZiAodGhpcy5pc0FjdGl2ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnJvdXRlci51cGRhdGVUaXRsZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICByZXR1cm4gTmF2TW9kZWw7XHJcbn0oKSk7XG5cbmZ1bmN0aW9uIF9ub3JtYWxpemVBYnNvbHV0ZVBhdGgocGF0aCwgaGFzUHVzaFN0YXRlLCBhYnNvbHV0ZSkge1xyXG4gICAgaWYgKGFic29sdXRlID09PSB2b2lkIDApIHsgYWJzb2x1dGUgPSBmYWxzZTsgfVxyXG4gICAgaWYgKCFoYXNQdXNoU3RhdGUgJiYgcGF0aFswXSAhPT0gJyMnKSB7XHJcbiAgICAgICAgcGF0aCA9ICcjJyArIHBhdGg7XHJcbiAgICB9XHJcbiAgICBpZiAoaGFzUHVzaFN0YXRlICYmIGFic29sdXRlKSB7XHJcbiAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyaW5nKDEsIHBhdGgubGVuZ3RoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBwYXRoO1xyXG59XHJcbmZ1bmN0aW9uIF9jcmVhdGVSb290ZWRQYXRoKGZyYWdtZW50LCBiYXNlVXJsLCBoYXNQdXNoU3RhdGUsIGFic29sdXRlKSB7XHJcbiAgICBpZiAoaXNBYnNvbHV0ZVVybC50ZXN0KGZyYWdtZW50KSkge1xyXG4gICAgICAgIHJldHVybiBmcmFnbWVudDtcclxuICAgIH1cclxuICAgIHZhciBwYXRoID0gJyc7XHJcbiAgICBpZiAoYmFzZVVybC5sZW5ndGggJiYgYmFzZVVybFswXSAhPT0gJy8nKSB7XHJcbiAgICAgICAgcGF0aCArPSAnLyc7XHJcbiAgICB9XHJcbiAgICBwYXRoICs9IGJhc2VVcmw7XHJcbiAgICBpZiAoKCFwYXRoLmxlbmd0aCB8fCBwYXRoW3BhdGgubGVuZ3RoIC0gMV0gIT09ICcvJykgJiYgZnJhZ21lbnRbMF0gIT09ICcvJykge1xyXG4gICAgICAgIHBhdGggKz0gJy8nO1xyXG4gICAgfVxyXG4gICAgaWYgKHBhdGgubGVuZ3RoICYmIHBhdGhbcGF0aC5sZW5ndGggLSAxXSA9PT0gJy8nICYmIGZyYWdtZW50WzBdID09PSAnLycpIHtcclxuICAgICAgICBwYXRoID0gcGF0aC5zdWJzdHJpbmcoMCwgcGF0aC5sZW5ndGggLSAxKTtcclxuICAgIH1cclxuICAgIHJldHVybiBfbm9ybWFsaXplQWJzb2x1dGVQYXRoKHBhdGggKyBmcmFnbWVudCwgaGFzUHVzaFN0YXRlLCBhYnNvbHV0ZSk7XHJcbn1cclxuZnVuY3Rpb24gX3Jlc29sdmVVcmwoZnJhZ21lbnQsIGJhc2VVcmwsIGhhc1B1c2hTdGF0ZSkge1xyXG4gICAgaWYgKGlzUm9vdGVkUGF0aC50ZXN0KGZyYWdtZW50KSkge1xyXG4gICAgICAgIHJldHVybiBfbm9ybWFsaXplQWJzb2x1dGVQYXRoKGZyYWdtZW50LCBoYXNQdXNoU3RhdGUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIF9jcmVhdGVSb290ZWRQYXRoKGZyYWdtZW50LCBiYXNlVXJsLCBoYXNQdXNoU3RhdGUpO1xyXG59XHJcbmZ1bmN0aW9uIF9lbnN1cmVBcnJheVdpdGhTaW5nbGVSb3V0ZVBlckNvbmZpZyhjb25maWcpIHtcclxuICAgIHZhciByb3V0ZUNvbmZpZ3MgPSBbXTtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGNvbmZpZy5yb3V0ZSkpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBjb25maWcucm91dGUubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudCA9IE9iamVjdC5hc3NpZ24oe30sIGNvbmZpZyk7XHJcbiAgICAgICAgICAgIGN1cnJlbnQucm91dGUgPSBjb25maWcucm91dGVbaV07XHJcbiAgICAgICAgICAgIHJvdXRlQ29uZmlncy5wdXNoKGN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJvdXRlQ29uZmlncy5wdXNoKE9iamVjdC5hc3NpZ24oe30sIGNvbmZpZykpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJvdXRlQ29uZmlncztcclxufVxyXG52YXIgaXNSb290ZWRQYXRoID0gL14jP1xcLy87XHJcbnZhciBpc0Fic29sdXRlVXJsID0gL14oW2Etel1bYS16MC05K1xcLS5dKjopP1xcL1xcLy9pO1xuXG4vKipcclxuICogQ2xhc3MgdXNlZCB0byBjb25maWd1cmUgYSBbW1JvdXRlcl1dIGluc3RhbmNlLlxyXG4gKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICovXHJcbnZhciBSb3V0ZXJDb25maWd1cmF0aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gUm91dGVyQ29uZmlndXJhdGlvbigpIHtcclxuICAgICAgICB0aGlzLmluc3RydWN0aW9ucyA9IFtdO1xyXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHt9O1xyXG4gICAgICAgIHRoaXMucGlwZWxpbmVTdGVwcyA9IFtdO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGEgc3RlcCB0byBiZSBydW4gZHVyaW5nIHRoZSBbW1JvdXRlcl1dJ3MgbmF2aWdhdGlvbiBwaXBlbGluZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcGlwZWxpbmUgc2xvdCB0byBpbnNlcnQgdGhlIHN0ZXAgaW50by5cclxuICAgICAqIEBwYXJhbSBzdGVwIFRoZSBwaXBlbGluZSBzdGVwLlxyXG4gICAgICogQGNoYWluYWJsZVxyXG4gICAgICovXHJcbiAgICBSb3V0ZXJDb25maWd1cmF0aW9uLnByb3RvdHlwZS5hZGRQaXBlbGluZVN0ZXAgPSBmdW5jdGlvbiAobmFtZSwgc3RlcCkge1xyXG4gICAgICAgIGlmIChzdGVwID09PSBudWxsIHx8IHN0ZXAgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BpcGVsaW5lIHN0ZXAgY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnBpcGVsaW5lU3RlcHMucHVzaCh7IG5hbWU6IG5hbWUsIHN0ZXA6IHN0ZXAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGEgc3RlcCB0byBiZSBydW4gZHVyaW5nIHRoZSBbW1JvdXRlcl1dJ3MgYXV0aG9yaXplIHBpcGVsaW5lIHNsb3QuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHN0ZXAgVGhlIHBpcGVsaW5lIHN0ZXAuXHJcbiAgICAgKiBAY2hhaW5hYmxlXHJcbiAgICAgKi9cclxuICAgIFJvdXRlckNvbmZpZ3VyYXRpb24ucHJvdG90eXBlLmFkZEF1dGhvcml6ZVN0ZXAgPSBmdW5jdGlvbiAoc3RlcCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFkZFBpcGVsaW5lU3RlcChcImF1dGhvcml6ZVwiIC8qIEF1dGhvcml6ZSAqLywgc3RlcCk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGEgc3RlcCB0byBiZSBydW4gZHVyaW5nIHRoZSBbW1JvdXRlcl1dJ3MgcHJlQWN0aXZhdGUgcGlwZWxpbmUgc2xvdC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gc3RlcCBUaGUgcGlwZWxpbmUgc3RlcC5cclxuICAgICAqIEBjaGFpbmFibGVcclxuICAgICAqL1xyXG4gICAgUm91dGVyQ29uZmlndXJhdGlvbi5wcm90b3R5cGUuYWRkUHJlQWN0aXZhdGVTdGVwID0gZnVuY3Rpb24gKHN0ZXApIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hZGRQaXBlbGluZVN0ZXAoXCJwcmVBY3RpdmF0ZVwiIC8qIFByZUFjdGl2YXRlICovLCBzdGVwKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYSBzdGVwIHRvIGJlIHJ1biBkdXJpbmcgdGhlIFtbUm91dGVyXV0ncyBwcmVSZW5kZXIgcGlwZWxpbmUgc2xvdC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gc3RlcCBUaGUgcGlwZWxpbmUgc3RlcC5cclxuICAgICAqIEBjaGFpbmFibGVcclxuICAgICAqL1xyXG4gICAgUm91dGVyQ29uZmlndXJhdGlvbi5wcm90b3R5cGUuYWRkUHJlUmVuZGVyU3RlcCA9IGZ1bmN0aW9uIChzdGVwKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUGlwZWxpbmVTdGVwKFwicHJlUmVuZGVyXCIgLyogUHJlUmVuZGVyICovLCBzdGVwKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYSBzdGVwIHRvIGJlIHJ1biBkdXJpbmcgdGhlIFtbUm91dGVyXV0ncyBwb3N0UmVuZGVyIHBpcGVsaW5lIHNsb3QuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHN0ZXAgVGhlIHBpcGVsaW5lIHN0ZXAuXHJcbiAgICAgKiBAY2hhaW5hYmxlXHJcbiAgICAgKi9cclxuICAgIFJvdXRlckNvbmZpZ3VyYXRpb24ucHJvdG90eXBlLmFkZFBvc3RSZW5kZXJTdGVwID0gZnVuY3Rpb24gKHN0ZXApIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hZGRQaXBlbGluZVN0ZXAoXCJwb3N0UmVuZGVyXCIgLyogUG9zdFJlbmRlciAqLywgc3RlcCk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBDb25maWd1cmVzIGEgcm91dGUgdGhhdCB3aWxsIGJlIHVzZWQgaWYgdGhlcmUgaXMgbm8gcHJldmlvdXMgbG9jYXRpb24gYXZhaWxhYmxlIG9uIG5hdmlnYXRpb24gY2FuY2VsbGF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBmcmFnbWVudCBUaGUgVVJMIGZyYWdtZW50IHRvIHVzZSBhcyB0aGUgbmF2aWdhdGlvbiBkZXN0aW5hdGlvbi5cclxuICAgICAqIEBjaGFpbmFibGVcclxuICAgICAqL1xyXG4gICAgUm91dGVyQ29uZmlndXJhdGlvbi5wcm90b3R5cGUuZmFsbGJhY2tSb3V0ZSA9IGZ1bmN0aW9uIChmcmFnbWVudCkge1xyXG4gICAgICAgIHRoaXMuX2ZhbGxiYWNrUm91dGUgPSBmcmFnbWVudDtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIE1hcHMgb25lIG9yIG1vcmUgcm91dGVzIHRvIGJlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgcm91dGVyLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSByb3V0ZSBUaGUgW1tSb3V0ZUNvbmZpZ11dIHRvIG1hcCwgb3IgYW4gYXJyYXkgb2YgW1tSb3V0ZUNvbmZpZ11dIHRvIG1hcC5cclxuICAgICAqIEBjaGFpbmFibGVcclxuICAgICAqL1xyXG4gICAgUm91dGVyQ29uZmlndXJhdGlvbi5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKHJvdXRlKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyb3V0ZSkpIHtcclxuICAgICAgICAgICAgcm91dGUuZm9yRWFjaChmdW5jdGlvbiAocikgeyByZXR1cm4gX3RoaXMubWFwKHIpOyB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1hcFJvdXRlKHJvdXRlKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIENvbmZpZ3VyZXMgZGVmYXVsdHMgdG8gdXNlIGZvciBhbnkgdmlldyBwb3J0cy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmlld1BvcnRDb25maWcgYSB2aWV3IHBvcnQgY29uZmlndXJhdGlvbiBvYmplY3QgdG8gdXNlIGFzIGFcclxuICAgICAqICBkZWZhdWx0LCBvZiB0aGUgZm9ybSB7IHZpZXdQb3J0TmFtZTogeyBtb2R1bGVJZCB9IH0uXHJcbiAgICAgKiBAY2hhaW5hYmxlXHJcbiAgICAgKi9cclxuICAgIFJvdXRlckNvbmZpZ3VyYXRpb24ucHJvdG90eXBlLnVzZVZpZXdQb3J0RGVmYXVsdHMgPSBmdW5jdGlvbiAodmlld1BvcnRDb25maWcpIHtcclxuICAgICAgICB0aGlzLnZpZXdQb3J0RGVmYXVsdHMgPSB2aWV3UG9ydENvbmZpZztcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIE1hcHMgYSBzaW5nbGUgcm91dGUgdG8gYmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSByb3V0ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHJvdXRlIFRoZSBbW1JvdXRlQ29uZmlnXV0gdG8gbWFwLlxyXG4gICAgICogQGNoYWluYWJsZVxyXG4gICAgICovXHJcbiAgICBSb3V0ZXJDb25maWd1cmF0aW9uLnByb3RvdHlwZS5tYXBSb3V0ZSA9IGZ1bmN0aW9uIChjb25maWcpIHtcclxuICAgICAgICB0aGlzLmluc3RydWN0aW9ucy5wdXNoKGZ1bmN0aW9uIChyb3V0ZXIpIHtcclxuICAgICAgICAgICAgdmFyIHJvdXRlQ29uZmlncyA9IF9lbnN1cmVBcnJheVdpdGhTaW5nbGVSb3V0ZVBlckNvbmZpZyhjb25maWcpO1xyXG4gICAgICAgICAgICB2YXIgbmF2TW9kZWw7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHJvdXRlQ29uZmlncy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcm91dGVDb25maWcgPSByb3V0ZUNvbmZpZ3NbaV07XHJcbiAgICAgICAgICAgICAgICByb3V0ZUNvbmZpZy5zZXR0aW5ncyA9IHJvdXRlQ29uZmlnLnNldHRpbmdzIHx8IHt9O1xyXG4gICAgICAgICAgICAgICAgaWYgKCFuYXZNb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hdk1vZGVsID0gcm91dGVyLmNyZWF0ZU5hdk1vZGVsKHJvdXRlQ29uZmlnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJvdXRlci5hZGRSb3V0ZShyb3V0ZUNvbmZpZywgbmF2TW9kZWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZWdpc3RlcnMgYW4gdW5rbm93biByb3V0ZSBoYW5kbGVyIHRvIGJlIHJ1biB3aGVuIHRoZSBVUkwgZnJhZ21lbnQgZG9lc24ndCBtYXRjaCBhbnkgcmVnaXN0ZXJlZCByb3V0ZXMuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGNvbmZpZyBBIHN0cmluZyBjb250YWluaW5nIGEgbW9kdWxlSWQgdG8gbG9hZCwgb3IgYSBbW1JvdXRlQ29uZmlnXV0sIG9yIGEgZnVuY3Rpb24gdGhhdCB0YWtlcyB0aGVcclxuICAgICAqICBbW05hdmlnYXRpb25JbnN0cnVjdGlvbl1dIGFuZCBzZWxlY3RzIGEgbW9kdWxlSWQgdG8gbG9hZC5cclxuICAgICAqIEBjaGFpbmFibGVcclxuICAgICAqL1xyXG4gICAgUm91dGVyQ29uZmlndXJhdGlvbi5wcm90b3R5cGUubWFwVW5rbm93blJvdXRlcyA9IGZ1bmN0aW9uIChjb25maWcpIHtcclxuICAgICAgICB0aGlzLnVua25vd25Sb3V0ZUNvbmZpZyA9IGNvbmZpZztcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEFwcGxpZXMgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiB0byB0aGUgc3BlY2lmaWVkIFtbUm91dGVyXV0uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHJvdXRlciBUaGUgW1tSb3V0ZXJdXSB0byBhcHBseSB0aGUgY29uZmlndXJhdGlvbiB0by5cclxuICAgICAqL1xyXG4gICAgUm91dGVyQ29uZmlndXJhdGlvbi5wcm90b3R5cGUuZXhwb3J0VG9Sb3V0ZXIgPSBmdW5jdGlvbiAocm91dGVyKSB7XHJcbiAgICAgICAgdmFyIGluc3RydWN0aW9ucyA9IHRoaXMuaW5zdHJ1Y3Rpb25zO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGluc3RydWN0aW9ucy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XHJcbiAgICAgICAgICAgIGluc3RydWN0aW9uc1tpXShyb3V0ZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgX2EgPSB0aGlzLCB0aXRsZSA9IF9hLnRpdGxlLCB0aXRsZVNlcGFyYXRvciA9IF9hLnRpdGxlU2VwYXJhdG9yLCB1bmtub3duUm91dGVDb25maWcgPSBfYS51bmtub3duUm91dGVDb25maWcsIF9mYWxsYmFja1JvdXRlID0gX2EuX2ZhbGxiYWNrUm91dGUsIHZpZXdQb3J0RGVmYXVsdHMgPSBfYS52aWV3UG9ydERlZmF1bHRzO1xyXG4gICAgICAgIGlmICh0aXRsZSkge1xyXG4gICAgICAgICAgICByb3V0ZXIudGl0bGUgPSB0aXRsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRpdGxlU2VwYXJhdG9yKSB7XHJcbiAgICAgICAgICAgIHJvdXRlci50aXRsZVNlcGFyYXRvciA9IHRpdGxlU2VwYXJhdG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodW5rbm93blJvdXRlQ29uZmlnKSB7XHJcbiAgICAgICAgICAgIHJvdXRlci5oYW5kbGVVbmtub3duUm91dGVzKHVua25vd25Sb3V0ZUNvbmZpZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChfZmFsbGJhY2tSb3V0ZSkge1xyXG4gICAgICAgICAgICByb3V0ZXIuZmFsbGJhY2tSb3V0ZSA9IF9mYWxsYmFja1JvdXRlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmlld1BvcnREZWZhdWx0cykge1xyXG4gICAgICAgICAgICByb3V0ZXIudXNlVmlld1BvcnREZWZhdWx0cyh2aWV3UG9ydERlZmF1bHRzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihyb3V0ZXIub3B0aW9ucywgdGhpcy5vcHRpb25zKTtcclxuICAgICAgICB2YXIgcGlwZWxpbmVTdGVwcyA9IHRoaXMucGlwZWxpbmVTdGVwcztcclxuICAgICAgICB2YXIgcGlwZWxpbmVTdGVwQ291bnQgPSBwaXBlbGluZVN0ZXBzLmxlbmd0aDtcclxuICAgICAgICBpZiAocGlwZWxpbmVTdGVwQ291bnQpIHtcclxuICAgICAgICAgICAgaWYgKCFyb3V0ZXIuaXNSb290KSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BpcGVsaW5lIHN0ZXBzIGNhbiBvbmx5IGJlIGFkZGVkIHRvIHRoZSByb290IHJvdXRlcicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBwaXBlbGluZVByb3ZpZGVyID0gcm91dGVyLnBpcGVsaW5lUHJvdmlkZXI7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHBpcGVsaW5lU3RlcENvdW50OyBpIDwgaWk7ICsraSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIF9iID0gcGlwZWxpbmVTdGVwc1tpXSwgbmFtZV8xID0gX2IubmFtZSwgc3RlcCA9IF9iLnN0ZXA7XHJcbiAgICAgICAgICAgICAgICBwaXBlbGluZVByb3ZpZGVyLmFkZFN0ZXAobmFtZV8xLCBzdGVwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICByZXR1cm4gUm91dGVyQ29uZmlndXJhdGlvbjtcclxufSgpKTtcblxuLyoqXHJcbiAqIFRoZSBwcmltYXJ5IGNsYXNzIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyByb3V0aW5nIGFuZCBuYXZpZ2F0aW9uLlxyXG4gKi9cclxudmFyIFJvdXRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIGNvbnRhaW5lciBUaGUgW1tDb250YWluZXJdXSB0byB1c2Ugd2hlbiBjaGlsZCByb3V0ZXJzLlxyXG4gICAgICogQHBhcmFtIGhpc3RvcnkgVGhlIFtbSGlzdG9yeV1dIGltcGxlbWVudGF0aW9uIHRvIGRlbGVnYXRlIG5hdmlnYXRpb24gcmVxdWVzdHMgdG8uXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIFJvdXRlcihjb250YWluZXIsIGhpc3RvcnkpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBwYXJlbnQgcm91dGVyLCBvciBudWxsIGlmIHRoaXMgaW5zdGFuY2UgaXMgbm90IGEgY2hpbGQgcm91dGVyLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDtcclxuICAgICAgICB0aGlzLm9wdGlvbnMgPSB7fTtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgZGVmYXVsdHMgdXNlZCB3aGVuIGEgdmlld3BvcnQgbGFja3Mgc3BlY2lmaWVkIGNvbnRlbnRcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnZpZXdQb3J0RGVmYXVsdHMgPSB7fTtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBFeHRlbnNpb24gcG9pbnQgdG8gdHJhbnNmb3JtIHRoZSBkb2N1bWVudCB0aXRsZSBiZWZvcmUgaXQgaXMgYnVpbHQgYW5kIGRpc3BsYXllZC5cclxuICAgICAgICAgKiBCeSBkZWZhdWx0LCBjaGlsZCByb3V0ZXJzIGRlbGVnYXRlIHRvIHRoZSBwYXJlbnQgcm91dGVyLCBhbmQgdGhlIGFwcCByb3V0ZXJcclxuICAgICAgICAgKiByZXR1cm5zIHRoZSB0aXRsZSB1bmNoYW5nZWQuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50cmFuc2Zvcm1UaXRsZSA9IGZ1bmN0aW9uICh0aXRsZSkge1xyXG4gICAgICAgICAgICBpZiAoX3RoaXMucGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMucGFyZW50LnRyYW5zZm9ybVRpdGxlKHRpdGxlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdGl0bGU7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lciA9IGNvbnRhaW5lcjtcclxuICAgICAgICB0aGlzLmhpc3RvcnkgPSBoaXN0b3J5O1xyXG4gICAgICAgIHRoaXMucmVzZXQoKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogRnVsbHkgcmVzZXRzIHRoZSByb3V0ZXIncyBpbnRlcm5hbCBzdGF0ZS4gUHJpbWFyaWx5IHVzZWQgaW50ZXJuYWxseSBieSB0aGUgZnJhbWV3b3JrIHdoZW4gbXVsdGlwbGUgY2FsbHMgdG8gc2V0Um9vdCBhcmUgbWFkZS5cclxuICAgICAqIFVzZSB3aXRoIGNhdXRpb24gKGFjdHVhbGx5LCBhdm9pZCB1c2luZyB0aGlzKS4gRG8gbm90IHVzZSB0aGlzIHRvIHNpbXBseSBjaGFuZ2UgeW91ciBuYXZpZ2F0aW9uIG1vZGVsLlxyXG4gICAgICovXHJcbiAgICBSb3V0ZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy52aWV3UG9ydHMgPSB7fTtcclxuICAgICAgICB0aGlzLnJvdXRlcyA9IFtdO1xyXG4gICAgICAgIHRoaXMuYmFzZVVybCA9ICcnO1xyXG4gICAgICAgIHRoaXMuaXNDb25maWd1cmVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc05hdmlnYXRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzRXhwbGljaXROYXZpZ2F0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0V4cGxpY2l0TmF2aWdhdGlvbkJhY2sgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzTmF2aWdhdGluZ0ZpcnN0ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc05hdmlnYXRpbmdOZXcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzTmF2aWdhdGluZ1JlZnJlc2ggPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzTmF2aWdhdGluZ0ZvcndhcmQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzTmF2aWdhdGluZ0JhY2sgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNvdWxkRGVhY3RpdmF0ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubmF2aWdhdGlvbiA9IFtdO1xyXG4gICAgICAgIHRoaXMuY3VycmVudEluc3RydWN0aW9uID0gbnVsbDtcclxuICAgICAgICB0aGlzLnZpZXdQb3J0RGVmYXVsdHMgPSB7fTtcclxuICAgICAgICB0aGlzLl9mYWxsYmFja09yZGVyID0gMTAwO1xyXG4gICAgICAgIHRoaXMuX3JlY29nbml6ZXIgPSBuZXcgUm91dGVSZWNvZ25pemVyKCk7XHJcbiAgICAgICAgdGhpcy5fY2hpbGRSZWNvZ25pemVyID0gbmV3IFJvdXRlUmVjb2duaXplcigpO1xyXG4gICAgICAgIHRoaXMuX2NvbmZpZ3VyZWRQcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcclxuICAgICAgICAgICAgX3RoaXMuX3Jlc29sdmVDb25maWd1cmVkUHJvbWlzZSA9IHJlc29sdmU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJvdXRlci5wcm90b3R5cGUsIFwiaXNSb290XCIsIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBHZXRzIGEgdmFsdWUgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCB0aGlzIFtbUm91dGVyXV0gaXMgdGhlIHJvb3QgaW4gdGhlIHJvdXRlciB0cmVlLiBJLmUuLCBpdCBoYXMgbm8gcGFyZW50LlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gIXRoaXMucGFyZW50O1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgIH0pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZWdpc3RlcnMgYSB2aWV3UG9ydCB0byBiZSB1c2VkIGFzIGEgcmVuZGVyaW5nIHRhcmdldCBmb3IgYWN0aXZhdGVkIHJvdXRlcy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmlld1BvcnQgVGhlIHZpZXdQb3J0LlxyXG4gICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHZpZXdQb3J0LiAnZGVmYXVsdCcgaWYgdW5zcGVjaWZpZWQuXHJcbiAgICAgKi9cclxuICAgIFJvdXRlci5wcm90b3R5cGUucmVnaXN0ZXJWaWV3UG9ydCA9IGZ1bmN0aW9uICh2aWV3UG9ydCwgbmFtZSkge1xyXG4gICAgICAgIG5hbWUgPSBuYW1lIHx8ICdkZWZhdWx0JztcclxuICAgICAgICB0aGlzLnZpZXdQb3J0c1tuYW1lXSA9IHZpZXdQb3J0O1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSByb3V0ZXIgaXMgY29uZmlndXJlZC5cclxuICAgICAqL1xyXG4gICAgUm91dGVyLnByb3RvdHlwZS5lbnN1cmVDb25maWd1cmVkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWd1cmVkUHJvbWlzZTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIENvbmZpZ3VyZXMgdGhlIHJvdXRlci5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY2FsbGJhY2tPckNvbmZpZyBUaGUgW1tSb3V0ZXJDb25maWd1cmF0aW9uXV0gb3IgYSBjYWxsYmFjayB0aGF0IHRha2VzIGEgW1tSb3V0ZXJDb25maWd1cmF0aW9uXV0uXHJcbiAgICAgKi9cclxuICAgIFJvdXRlci5wcm90b3R5cGUuY29uZmlndXJlID0gZnVuY3Rpb24gKGNhbGxiYWNrT3JDb25maWcpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuaXNDb25maWd1cmVkID0gdHJ1ZTtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gY2FsbGJhY2tPckNvbmZpZztcclxuICAgICAgICB2YXIgY29uZmlnO1xyXG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2tPckNvbmZpZyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICBjb25maWcgPSBuZXcgUm91dGVyQ29uZmlndXJhdGlvbigpO1xyXG4gICAgICAgICAgICByZXN1bHQgPSBjYWxsYmFja09yQ29uZmlnKGNvbmZpZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBQcm9taXNlXHJcbiAgICAgICAgICAgIC5yZXNvbHZlKHJlc3VsdClcclxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGMpIHtcclxuICAgICAgICAgICAgaWYgKGMgJiYgYy5leHBvcnRUb1JvdXRlcikge1xyXG4gICAgICAgICAgICAgICAgY29uZmlnID0gYztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25maWcuZXhwb3J0VG9Sb3V0ZXIoX3RoaXMpO1xyXG4gICAgICAgICAgICBfdGhpcy5pc0NvbmZpZ3VyZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICBfdGhpcy5fcmVzb2x2ZUNvbmZpZ3VyZWRQcm9taXNlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBOYXZpZ2F0ZXMgdG8gYSBuZXcgbG9jYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGZyYWdtZW50IFRoZSBVUkwgZnJhZ21lbnQgdG8gdXNlIGFzIHRoZSBuYXZpZ2F0aW9uIGRlc3RpbmF0aW9uLlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG5hdmlnYXRpb24gb3B0aW9ucy5cclxuICAgICAqL1xyXG4gICAgUm91dGVyLnByb3RvdHlwZS5uYXZpZ2F0ZSA9IGZ1bmN0aW9uIChmcmFnbWVudCwgb3B0aW9ucykge1xyXG4gICAgICAgIGlmICghdGhpcy5pc0NvbmZpZ3VyZWQgJiYgdGhpcy5wYXJlbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50Lm5hdmlnYXRlKGZyYWdtZW50LCBvcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc0V4cGxpY2l0TmF2aWdhdGlvbiA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaGlzdG9yeS5uYXZpZ2F0ZShfcmVzb2x2ZVVybChmcmFnbWVudCwgdGhpcy5iYXNlVXJsLCB0aGlzLmhpc3RvcnkuX2hhc1B1c2hTdGF0ZSksIG9wdGlvbnMpO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogTmF2aWdhdGVzIHRvIGEgbmV3IGxvY2F0aW9uIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJvdXRlIGFuZCBwYXJhbXMgc3BlY2lmaWVkLiBFcXVpdmFsbGVudCB0byBbW1JvdXRlci5nZW5lcmF0ZV1dIGZvbGxvd2VkXHJcbiAgICAgKiBieSBbW1JvdXRlci5uYXZpZ2F0ZV1dLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSByb3V0ZSBUaGUgbmFtZSBvZiB0aGUgcm91dGUgdG8gdXNlIHdoZW4gZ2VuZXJhdGluZyB0aGUgbmF2aWdhdGlvbiBsb2NhdGlvbi5cclxuICAgICAqIEBwYXJhbSBwYXJhbXMgVGhlIHJvdXRlIHBhcmFtZXRlcnMgdG8gYmUgdXNlZCB3aGVuIHBvcHVsYXRpbmcgdGhlIHJvdXRlIHBhdHRlcm4uXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgbmF2aWdhdGlvbiBvcHRpb25zLlxyXG4gICAgICovXHJcbiAgICBSb3V0ZXIucHJvdG90eXBlLm5hdmlnYXRlVG9Sb3V0ZSA9IGZ1bmN0aW9uIChyb3V0ZSwgcGFyYW1zLCBvcHRpb25zKSB7XHJcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmdlbmVyYXRlKHJvdXRlLCBwYXJhbXMpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlKHBhdGgsIG9wdGlvbnMpO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogTmF2aWdhdGVzIGJhY2sgdG8gdGhlIG1vc3QgcmVjZW50IGxvY2F0aW9uIGluIGhpc3RvcnkuXHJcbiAgICAgKi9cclxuICAgIFJvdXRlci5wcm90b3R5cGUubmF2aWdhdGVCYWNrID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuaXNFeHBsaWNpdE5hdmlnYXRpb25CYWNrID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmhpc3RvcnkubmF2aWdhdGVCYWNrKCk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgY2hpbGQgcm91dGVyIG9mIHRoZSBjdXJyZW50IHJvdXRlci5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY29udGFpbmVyIFRoZSBbW0NvbnRhaW5lcl1dIHRvIHByb3ZpZGUgdG8gdGhlIGNoaWxkIHJvdXRlci4gVXNlcyB0aGUgY3VycmVudCBbW1JvdXRlcl1dJ3MgW1tDb250YWluZXJdXSBpZiB1bnNwZWNpZmllZC5cclxuICAgICAqIEByZXR1cm5zIHtSb3V0ZXJ9IFRoZSBuZXcgY2hpbGQgUm91dGVyLlxyXG4gICAgICovXHJcbiAgICBSb3V0ZXIucHJvdG90eXBlLmNyZWF0ZUNoaWxkID0gZnVuY3Rpb24gKGNvbnRhaW5lcikge1xyXG4gICAgICAgIHZhciBjaGlsZFJvdXRlciA9IG5ldyBSb3V0ZXIoY29udGFpbmVyIHx8IHRoaXMuY29udGFpbmVyLmNyZWF0ZUNoaWxkKCksIHRoaXMuaGlzdG9yeSk7XHJcbiAgICAgICAgY2hpbGRSb3V0ZXIucGFyZW50ID0gdGhpcztcclxuICAgICAgICByZXR1cm4gY2hpbGRSb3V0ZXI7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZXMgYSBVUkwgZnJhZ21lbnQgbWF0Y2hpbmcgdGhlIHNwZWNpZmllZCByb3V0ZSBwYXR0ZXJuLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSByb3V0ZSB3aG9zZSBwYXR0ZXJuIHNob3VsZCBiZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBmcmFnbWVudC5cclxuICAgICAqIEBwYXJhbSBwYXJhbXMgVGhlIHJvdXRlIHBhcmFtcyB0byBiZSB1c2VkIHRvIHBvcHVsYXRlIHRoZSByb3V0ZSBwYXR0ZXJuLlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgSWYgb3B0aW9ucy5hYnNvbHV0ZSA9IHRydWUsIHRoZW4gYWJzb2x1dGUgdXJsIHdpbGwgYmUgZ2VuZXJhdGVkOyBvdGhlcndpc2UsIGl0IHdpbGwgYmUgcmVsYXRpdmUgdXJsLlxyXG4gICAgICogQHJldHVybnMge3N0cmluZ30gQSBzdHJpbmcgY29udGFpbmluZyB0aGUgZ2VuZXJhdGVkIFVSTCBmcmFnbWVudC5cclxuICAgICAqL1xyXG4gICAgUm91dGVyLnByb3RvdHlwZS5nZW5lcmF0ZSA9IGZ1bmN0aW9uIChuYW1lT3JSb3V0ZSwgcGFyYW1zLCBvcHRpb25zKSB7XHJcbiAgICAgICAgaWYgKHBhcmFtcyA9PT0gdm9pZCAwKSB7IHBhcmFtcyA9IHt9OyB9XHJcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cclxuICAgICAgICAvLyBBIGNoaWxkIHJlY29nbml6ZXIgZ2VuZXJhdGVzIHJvdXRlcyBmb3IgcG90ZW50aWFsIGNoaWxkIHJvdXRlcy4gQW55IHBvdGVudGlhbCBjaGlsZCByb3V0ZSBpcyBhZGRlZFxyXG4gICAgICAgIC8vIHRvIHRoZSBjaGlsZFJvdXRlIHByb3BlcnR5IG9mIHBhcmFtcyBmb3IgdGhlIGNoaWxkUm91dGVyIHRvIHJlY29nbml6ZS4gV2hlbiBnZW5lcmF0aW5nIHJvdXRlcywgd2VcclxuICAgICAgICAvLyB1c2UgdGhlIGNoaWxkUmVjb2duaXplciB3aGVuIGNoaWxkUm91dGUgcGFyYW1zIGFyZSBhdmFpbGFibGUgdG8gZ2VuZXJhdGUgYSBjaGlsZCByb3V0ZXIgZW5hYmxlZCByb3V0ZS5cclxuICAgICAgICB2YXIgcmVjb2duaXplciA9ICdjaGlsZFJvdXRlJyBpbiBwYXJhbXMgPyB0aGlzLl9jaGlsZFJlY29nbml6ZXIgOiB0aGlzLl9yZWNvZ25pemVyO1xyXG4gICAgICAgIHZhciBoYXNSb3V0ZSA9IHJlY29nbml6ZXIuaGFzUm91dGUobmFtZU9yUm91dGUpO1xyXG4gICAgICAgIGlmICghaGFzUm91dGUpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQuZ2VuZXJhdGUobmFtZU9yUm91dGUsIHBhcmFtcywgb3B0aW9ucyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQSByb3V0ZSB3aXRoIG5hbWUgJ1wiICsgbmFtZU9yUm91dGUgKyBcIicgY291bGQgbm90IGJlIGZvdW5kLiBDaGVjayB0aGF0IGBuYW1lOiAnXCIgKyBuYW1lT3JSb3V0ZSArIFwiJ2Agd2FzIHNwZWNpZmllZCBpbiB0aGUgcm91dGUncyBjb25maWcuXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcGF0aCA9IHJlY29nbml6ZXIuZ2VuZXJhdGUobmFtZU9yUm91dGUsIHBhcmFtcyk7XHJcbiAgICAgICAgdmFyIHJvb3RlZFBhdGggPSBfY3JlYXRlUm9vdGVkUGF0aChwYXRoLCB0aGlzLmJhc2VVcmwsIHRoaXMuaGlzdG9yeS5faGFzUHVzaFN0YXRlLCBvcHRpb25zLmFic29sdXRlKTtcclxuICAgICAgICByZXR1cm4gb3B0aW9ucy5hYnNvbHV0ZSA/IFwiXCIgKyB0aGlzLmhpc3RvcnkuZ2V0QWJzb2x1dGVSb290KCkgKyByb290ZWRQYXRoIDogcm9vdGVkUGF0aDtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBbW05hdk1vZGVsXV0gZm9yIHRoZSBzcGVjaWZpZWQgcm91dGUgY29uZmlnLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb25maWcgVGhlIHJvdXRlIGNvbmZpZy5cclxuICAgICAqL1xyXG4gICAgUm91dGVyLnByb3RvdHlwZS5jcmVhdGVOYXZNb2RlbCA9IGZ1bmN0aW9uIChjb25maWcpIHtcclxuICAgICAgICB2YXIgbmF2TW9kZWwgPSBuZXcgTmF2TW9kZWwodGhpcywgJ2hyZWYnIGluIGNvbmZpZ1xyXG4gICAgICAgICAgICA/IGNvbmZpZy5ocmVmXHJcbiAgICAgICAgICAgIC8vIHBvdGVudGlhbCBlcnJvciB3aGVuIGNvbmZpZy5yb3V0ZSBpcyBhIHN0cmluZ1tdID9cclxuICAgICAgICAgICAgOiBjb25maWcucm91dGUpO1xyXG4gICAgICAgIG5hdk1vZGVsLnRpdGxlID0gY29uZmlnLnRpdGxlO1xyXG4gICAgICAgIG5hdk1vZGVsLm9yZGVyID0gY29uZmlnLm5hdjtcclxuICAgICAgICBuYXZNb2RlbC5ocmVmID0gY29uZmlnLmhyZWY7XHJcbiAgICAgICAgbmF2TW9kZWwuc2V0dGluZ3MgPSBjb25maWcuc2V0dGluZ3M7XHJcbiAgICAgICAgbmF2TW9kZWwuY29uZmlnID0gY29uZmlnO1xyXG4gICAgICAgIHJldHVybiBuYXZNb2RlbDtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFJlZ2lzdGVycyBhIG5ldyByb3V0ZSB3aXRoIHRoZSByb3V0ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGNvbmZpZyBUaGUgW1tSb3V0ZUNvbmZpZ11dLlxyXG4gICAgICogQHBhcmFtIG5hdk1vZGVsIFRoZSBbW05hdk1vZGVsXV0gdG8gdXNlIGZvciB0aGUgcm91dGUuIE1heSBiZSBvbWl0dGVkIGZvciBzaW5nbGUtcGF0dGVybiByb3V0ZXMuXHJcbiAgICAgKi9cclxuICAgIFJvdXRlci5wcm90b3R5cGUuYWRkUm91dGUgPSBmdW5jdGlvbiAoY29uZmlnLCBuYXZNb2RlbCkge1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbmZpZy5yb3V0ZSkpIHtcclxuICAgICAgICAgICAgdmFyIHJvdXRlQ29uZmlncyA9IF9lbnN1cmVBcnJheVdpdGhTaW5nbGVSb3V0ZVBlckNvbmZpZyhjb25maWcpO1xyXG4gICAgICAgICAgICAvLyB0aGUgZm9sbG93aW5nIGlzIHdyb25nLiB0b2RvOiBmaXggdGhpcyBhZnRlciBUUyByZWZhY3RvcmluZyByZWxlYXNlXHJcbiAgICAgICAgICAgIHJvdXRlQ29uZmlncy5mb3JFYWNoKHRoaXMuYWRkUm91dGUuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFsaWRhdGVSb3V0ZUNvbmZpZyhjb25maWcpO1xyXG4gICAgICAgIGlmICghKCd2aWV3UG9ydHMnIGluIGNvbmZpZykgJiYgIWNvbmZpZy5uYXZpZ2F0aW9uU3RyYXRlZ3kpIHtcclxuICAgICAgICAgICAgY29uZmlnLnZpZXdQb3J0cyA9IHtcclxuICAgICAgICAgICAgICAgICdkZWZhdWx0Jzoge1xyXG4gICAgICAgICAgICAgICAgICAgIG1vZHVsZUlkOiBjb25maWcubW9kdWxlSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdmlldzogY29uZmlnLnZpZXdcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFuYXZNb2RlbCkge1xyXG4gICAgICAgICAgICBuYXZNb2RlbCA9IHRoaXMuY3JlYXRlTmF2TW9kZWwoY29uZmlnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yb3V0ZXMucHVzaChjb25maWcpO1xyXG4gICAgICAgIHZhciBwYXRoID0gY29uZmlnLnJvdXRlO1xyXG4gICAgICAgIGlmIChwYXRoLmNoYXJBdCgwKSA9PT0gJy8nKSB7XHJcbiAgICAgICAgICAgIHBhdGggPSBwYXRoLnN1YnN0cigxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGNhc2VTZW5zaXRpdmUgPSBjb25maWcuY2FzZVNlbnNpdGl2ZSA9PT0gdHJ1ZTtcclxuICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLl9yZWNvZ25pemVyLmFkZCh7XHJcbiAgICAgICAgICAgIHBhdGg6IHBhdGgsXHJcbiAgICAgICAgICAgIGhhbmRsZXI6IGNvbmZpZyxcclxuICAgICAgICAgICAgY2FzZVNlbnNpdGl2ZTogY2FzZVNlbnNpdGl2ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChwYXRoKSB7XHJcbiAgICAgICAgICAgIHZhciBzZXR0aW5ncyA9IGNvbmZpZy5zZXR0aW5ncztcclxuICAgICAgICAgICAgZGVsZXRlIGNvbmZpZy5zZXR0aW5ncztcclxuICAgICAgICAgICAgdmFyIHdpdGhDaGlsZCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY29uZmlnKSk7XHJcbiAgICAgICAgICAgIGNvbmZpZy5zZXR0aW5ncyA9IHNldHRpbmdzO1xyXG4gICAgICAgICAgICB3aXRoQ2hpbGQucm91dGUgPSBwYXRoICsgXCIvKmNoaWxkUm91dGVcIjtcclxuICAgICAgICAgICAgd2l0aENoaWxkLmhhc0NoaWxkUm91dGVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5fY2hpbGRSZWNvZ25pemVyLmFkZCh7XHJcbiAgICAgICAgICAgICAgICBwYXRoOiB3aXRoQ2hpbGQucm91dGUsXHJcbiAgICAgICAgICAgICAgICBoYW5kbGVyOiB3aXRoQ2hpbGQsXHJcbiAgICAgICAgICAgICAgICBjYXNlU2Vuc2l0aXZlOiBjYXNlU2Vuc2l0aXZlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB3aXRoQ2hpbGQubmF2TW9kZWwgPSBuYXZNb2RlbDtcclxuICAgICAgICAgICAgd2l0aENoaWxkLnNldHRpbmdzID0gY29uZmlnLnNldHRpbmdzO1xyXG4gICAgICAgICAgICB3aXRoQ2hpbGQubmF2aWdhdGlvblN0cmF0ZWd5ID0gY29uZmlnLm5hdmlnYXRpb25TdHJhdGVneTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uZmlnLm5hdk1vZGVsID0gbmF2TW9kZWw7XHJcbiAgICAgICAgdmFyIG5hdmlnYXRpb24gPSB0aGlzLm5hdmlnYXRpb247XHJcbiAgICAgICAgaWYgKChuYXZNb2RlbC5vcmRlciB8fCBuYXZNb2RlbC5vcmRlciA9PT0gMCkgJiYgbmF2aWdhdGlvbi5pbmRleE9mKG5hdk1vZGVsKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgaWYgKCghbmF2TW9kZWwuaHJlZiAmJiBuYXZNb2RlbC5ocmVmICE9PSAnJykgJiYgKHN0YXRlLnR5cGVzLmR5bmFtaWNzIHx8IHN0YXRlLnR5cGVzLnN0YXJzKSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHJvdXRlIGNvbmZpZyBmb3IgXCInICsgY29uZmlnLnJvdXRlICsgJ1wiIDogZHluYW1pYyByb3V0ZXMgbXVzdCBzcGVjaWZ5IGFuIFwiaHJlZjpcIiB0byBiZSBpbmNsdWRlZCBpbiB0aGUgbmF2aWdhdGlvbiBtb2RlbC4nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIG5hdk1vZGVsLm9yZGVyICE9PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICAgICAgbmF2TW9kZWwub3JkZXIgPSArK3RoaXMuX2ZhbGxiYWNrT3JkZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbmF2aWdhdGlvbi5wdXNoKG5hdk1vZGVsKTtcclxuICAgICAgICAgICAgLy8gdGhpcyBpcyBhIHBvdGVudGlhbCBlcnJvciAvIGluY29uc2lzdGVuY3kgYmV0d2VlbiBicm93c2Vyc1xyXG4gICAgICAgICAgICAvL1xyXG4gICAgICAgICAgICAvLyBNRE46IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L3NvcnRcclxuICAgICAgICAgICAgLy8gSWYgY29tcGFyZUZ1bmN0aW9uKGEsIGIpIHJldHVybnMgMCwgbGVhdmUgYSBhbmQgYiB1bmNoYW5nZWQgd2l0aCByZXNwZWN0IHRvIGVhY2ggb3RoZXIsXHJcbiAgICAgICAgICAgIC8vIGJ1dCBzb3J0ZWQgd2l0aCByZXNwZWN0IHRvIGFsbCBkaWZmZXJlbnQgZWxlbWVudHMuXHJcbiAgICAgICAgICAgIC8vIE5vdGU6IHRoZSBFQ01Bc2NyaXB0IHN0YW5kYXJkIGRvZXMgbm90IGd1YXJhbnRlZSB0aGlzIGJlaGF2aW91cixcclxuICAgICAgICAgICAgLy8gYW5kIHRodXMgbm90IGFsbCBicm93c2VycyAoZS5nLiBNb3ppbGxhIHZlcnNpb25zIGRhdGluZyBiYWNrIHRvIGF0IGxlYXN0IDIwMDMpIHJlc3BlY3QgdGhpcy5cclxuICAgICAgICAgICAgbmF2aWdhdGlvbi5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhLm9yZGVyIC0gYi5vcmRlcjsgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgdGhpcyBbW1JvdXRlcl1dIG9yIG9uZSBvZiBpdHMgYW5jZXN0b3JzIGhhcyBhIHJvdXRlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHJvdXRlIHRvIGNoZWNrLlxyXG4gICAgICovXHJcbiAgICBSb3V0ZXIucHJvdG90eXBlLmhhc1JvdXRlID0gZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gISEodGhpcy5fcmVjb2duaXplci5oYXNSb3V0ZShuYW1lKSB8fCB0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC5oYXNSb3V0ZShuYW1lKSk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGEgdmFsdWUgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCB0aGlzIFtbUm91dGVyXV0gaGFzIGEgcm91dGUgcmVnaXN0ZXJlZCB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcm91dGUgdG8gY2hlY2suXHJcbiAgICAgKi9cclxuICAgIFJvdXRlci5wcm90b3R5cGUuaGFzT3duUm91dGUgPSBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZWNvZ25pemVyLmhhc1JvdXRlKG5hbWUpO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogUmVnaXN0ZXIgYSBoYW5kbGVyIHRvIHVzZSB3aGVuIHRoZSBpbmNvbWluZyBVUkwgZnJhZ21lbnQgZG9lc24ndCBtYXRjaCBhbnkgcmVnaXN0ZXJlZCByb3V0ZXMuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGNvbmZpZyBUaGUgbW9kdWxlSWQsIG9yIGEgZnVuY3Rpb24gdGhhdCBzZWxlY3RzIHRoZSBtb2R1bGVJZCwgb3IgYSBbW1JvdXRlQ29uZmlnXV0uXHJcbiAgICAgKi9cclxuICAgIFJvdXRlci5wcm90b3R5cGUuaGFuZGxlVW5rbm93blJvdXRlcyA9IGZ1bmN0aW9uIChjb25maWcpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIGlmICghY29uZmlnKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB1bmtub3duIHJvdXRlIGhhbmRsZXInKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jYXRjaEFsbEhhbmRsZXIgPSBmdW5jdGlvbiAoaW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuIF90aGlzXHJcbiAgICAgICAgICAgICAgICAuX2NyZWF0ZVJvdXRlQ29uZmlnKGNvbmZpZywgaW5zdHJ1Y3Rpb24pXHJcbiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoYykge1xyXG4gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb24uY29uZmlnID0gYztcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0cnVjdGlvbjtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZXMgdGhlIGRvY3VtZW50IHRpdGxlIHVzaW5nIHRoZSBjdXJyZW50IG5hdmlnYXRpb24gaW5zdHJ1Y3Rpb24uXHJcbiAgICAgKi9cclxuICAgIFJvdXRlci5wcm90b3R5cGUudXBkYXRlVGl0bGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHBhcmVudFJvdXRlciA9IHRoaXMucGFyZW50O1xyXG4gICAgICAgIGlmIChwYXJlbnRSb3V0ZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHBhcmVudFJvdXRlci51cGRhdGVUaXRsZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgY3VycmVudEluc3RydWN0aW9uID0gdGhpcy5jdXJyZW50SW5zdHJ1Y3Rpb247XHJcbiAgICAgICAgaWYgKGN1cnJlbnRJbnN0cnVjdGlvbikge1xyXG4gICAgICAgICAgICBjdXJyZW50SW5zdHJ1Y3Rpb24uX3VwZGF0ZVRpdGxlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzIHRoZSBuYXZpZ2F0aW9uIHJvdXRlcyB3aXRoIGhyZWZzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGxvY2F0aW9uLlxyXG4gICAgICogTm90ZTogVGhpcyBtZXRob2Qgd2lsbCBsaWtlbHkgbW92ZSB0byBhIHBsdWdpbiBpbiBhIGZ1dHVyZSByZWxlYXNlLlxyXG4gICAgICovXHJcbiAgICBSb3V0ZXIucHJvdG90eXBlLnJlZnJlc2hOYXZpZ2F0aW9uID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBuYXYgPSB0aGlzLm5hdmlnYXRpb247XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aF8xID0gbmF2Lmxlbmd0aDsgaSA8IGxlbmd0aF8xOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSBuYXZbaV07XHJcbiAgICAgICAgICAgIGlmICghY3VycmVudC5jb25maWcuaHJlZikge1xyXG4gICAgICAgICAgICAgICAgY3VycmVudC5ocmVmID0gX2NyZWF0ZVJvb3RlZFBhdGgoY3VycmVudC5yZWxhdGl2ZUhyZWYsIHRoaXMuYmFzZVVybCwgdGhpcy5oaXN0b3J5Ll9oYXNQdXNoU3RhdGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY3VycmVudC5ocmVmID0gX25vcm1hbGl6ZUFic29sdXRlUGF0aChjdXJyZW50LmNvbmZpZy5ocmVmLCB0aGlzLmhpc3RvcnkuX2hhc1B1c2hTdGF0ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIHRoZSB2aWV3IHBvcnRzLiBUaGlzIHNwZWNpZmllcyBob3cgdG9cclxuICAgICAqICBwb3B1bGF0ZSBhIHZpZXcgcG9ydCBmb3Igd2hpY2ggbm8gbW9kdWxlIGlzIHNwZWNpZmllZC4gVGhlIGRlZmF1bHQgaXNcclxuICAgICAqICBhbiBlbXB0eSB2aWV3L3ZpZXctbW9kZWwgcGFpci5cclxuICAgICAqL1xyXG4gICAgUm91dGVyLnByb3RvdHlwZS51c2VWaWV3UG9ydERlZmF1bHRzID0gZnVuY3Rpb24gKCR2aWV3UG9ydERlZmF1bHRzKSB7XHJcbiAgICAgICAgLy8gYSB3b3JrYXJvdW5kIHRvIGhhdmUgc3Ryb25nIHR5cGluZ3Mgd2hpbGUgbm90IHJlcXVpcmluZyB0byBleHBvc2UgaW50ZXJmYWNlIFZpZXdQb3J0SW5zdHJ1Y3Rpb25cclxuICAgICAgICB2YXIgdmlld1BvcnREZWZhdWx0cyA9ICR2aWV3UG9ydERlZmF1bHRzO1xyXG4gICAgICAgIGZvciAodmFyIHZpZXdQb3J0TmFtZSBpbiB2aWV3UG9ydERlZmF1bHRzKSB7XHJcbiAgICAgICAgICAgIHZhciB2aWV3UG9ydENvbmZpZyA9IHZpZXdQb3J0RGVmYXVsdHNbdmlld1BvcnROYW1lXTtcclxuICAgICAgICAgICAgdGhpcy52aWV3UG9ydERlZmF1bHRzW3ZpZXdQb3J0TmFtZV0gPSB7XHJcbiAgICAgICAgICAgICAgICBtb2R1bGVJZDogdmlld1BvcnRDb25maWcubW9kdWxlSWRcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLyoqQGludGVybmFsICovXHJcbiAgICBSb3V0ZXIucHJvdG90eXBlLl9yZWZyZXNoQmFzZVVybCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgcGFyZW50Um91dGVyID0gdGhpcy5wYXJlbnQ7XHJcbiAgICAgICAgaWYgKHBhcmVudFJvdXRlcikge1xyXG4gICAgICAgICAgICB0aGlzLmJhc2VVcmwgPSBnZW5lcmF0ZUJhc2VVcmwocGFyZW50Um91dGVyLCBwYXJlbnRSb3V0ZXIuY3VycmVudEluc3RydWN0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLyoqQGludGVybmFsICovXHJcbiAgICBSb3V0ZXIucHJvdG90eXBlLl9jcmVhdGVOYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24gPSBmdW5jdGlvbiAodXJsLCBwYXJlbnRJbnN0cnVjdGlvbikge1xyXG4gICAgICAgIGlmICh1cmwgPT09IHZvaWQgMCkgeyB1cmwgPSAnJzsgfVxyXG4gICAgICAgIGlmIChwYXJlbnRJbnN0cnVjdGlvbiA9PT0gdm9pZCAwKSB7IHBhcmVudEluc3RydWN0aW9uID0gbnVsbDsgfVxyXG4gICAgICAgIHZhciBmcmFnbWVudCA9IHVybDtcclxuICAgICAgICB2YXIgcXVlcnlTdHJpbmcgPSAnJztcclxuICAgICAgICB2YXIgcXVlcnlJbmRleCA9IHVybC5pbmRleE9mKCc/Jyk7XHJcbiAgICAgICAgaWYgKHF1ZXJ5SW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgIGZyYWdtZW50ID0gdXJsLnN1YnN0cigwLCBxdWVyeUluZGV4KTtcclxuICAgICAgICAgICAgcXVlcnlTdHJpbmcgPSB1cmwuc3Vic3RyKHF1ZXJ5SW5kZXggKyAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHVybFJlY29nbml6YXRpb25SZXN1bHRzID0gdGhpcy5fcmVjb2duaXplci5yZWNvZ25pemUodXJsKTtcclxuICAgICAgICBpZiAoIXVybFJlY29nbml6YXRpb25SZXN1bHRzIHx8ICF1cmxSZWNvZ25pemF0aW9uUmVzdWx0cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdXJsUmVjb2duaXphdGlvblJlc3VsdHMgPSB0aGlzLl9jaGlsZFJlY29nbml6ZXIucmVjb2duaXplKHVybCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBpbnN0cnVjdGlvbkluaXQgPSB7XHJcbiAgICAgICAgICAgIGZyYWdtZW50OiBmcmFnbWVudCxcclxuICAgICAgICAgICAgcXVlcnlTdHJpbmc6IHF1ZXJ5U3RyaW5nLFxyXG4gICAgICAgICAgICBjb25maWc6IG51bGwsXHJcbiAgICAgICAgICAgIHBhcmVudEluc3RydWN0aW9uOiBwYXJlbnRJbnN0cnVjdGlvbixcclxuICAgICAgICAgICAgcHJldmlvdXNJbnN0cnVjdGlvbjogdGhpcy5jdXJyZW50SW5zdHJ1Y3Rpb24sXHJcbiAgICAgICAgICAgIHJvdXRlcjogdGhpcyxcclxuICAgICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgY29tcGFyZVF1ZXJ5UGFyYW1zOiB0aGlzLm9wdGlvbnMuY29tcGFyZVF1ZXJ5UGFyYW1zXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHZhciByZXN1bHQ7XHJcbiAgICAgICAgaWYgKHVybFJlY29nbml6YXRpb25SZXN1bHRzICYmIHVybFJlY29nbml6YXRpb25SZXN1bHRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB2YXIgZmlyc3QgPSB1cmxSZWNvZ25pemF0aW9uUmVzdWx0c1swXTtcclxuICAgICAgICAgICAgdmFyIGluc3RydWN0aW9uID0gbmV3IE5hdmlnYXRpb25JbnN0cnVjdGlvbihPYmplY3QuYXNzaWduKHt9LCBpbnN0cnVjdGlvbkluaXQsIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtczogZmlyc3QucGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbXM6IGZpcnN0LnF1ZXJ5UGFyYW1zIHx8IHVybFJlY29nbml6YXRpb25SZXN1bHRzLnF1ZXJ5UGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgY29uZmlnOiBmaXJzdC5jb25maWcgfHwgZmlyc3QuaGFuZGxlclxyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZmlyc3QuaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZXZhbHVhdGVOYXZpZ2F0aW9uU3RyYXRlZ3koaW5zdHJ1Y3Rpb24sIGZpcnN0LmhhbmRsZXIsIGZpcnN0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChmaXJzdC5oYW5kbGVyICYmIHR5cGVvZiBmaXJzdC5oYW5kbGVyLm5hdmlnYXRpb25TdHJhdGVneSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZXZhbHVhdGVOYXZpZ2F0aW9uU3RyYXRlZ3koaW5zdHJ1Y3Rpb24sIGZpcnN0LmhhbmRsZXIubmF2aWdhdGlvblN0cmF0ZWd5LCBmaXJzdC5oYW5kbGVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFByb21pc2UucmVzb2x2ZShpbnN0cnVjdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5jYXRjaEFsbEhhbmRsZXIpIHtcclxuICAgICAgICAgICAgdmFyIGluc3RydWN0aW9uID0gbmV3IE5hdmlnYXRpb25JbnN0cnVjdGlvbihPYmplY3QuYXNzaWduKHt9LCBpbnN0cnVjdGlvbkluaXQsIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtczogeyBwYXRoOiBmcmFnbWVudCB9LFxyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHVybFJlY29nbml6YXRpb25SZXN1bHRzID8gdXJsUmVjb2duaXphdGlvblJlc3VsdHMucXVlcnlQYXJhbXMgOiB7fSxcclxuICAgICAgICAgICAgICAgIGNvbmZpZzogbnVsbCAvLyBjb25maWcgd2lsbCBiZSBjcmVhdGVkIGJ5IHRoZSBjYXRjaEFsbEhhbmRsZXJcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICByZXN1bHQgPSBldmFsdWF0ZU5hdmlnYXRpb25TdHJhdGVneShpbnN0cnVjdGlvbiwgdGhpcy5jYXRjaEFsbEhhbmRsZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLnBhcmVudCkge1xyXG4gICAgICAgICAgICB2YXIgcm91dGVyID0gdGhpcy5fcGFyZW50Q2F0Y2hBbGxIYW5kbGVyKHRoaXMucGFyZW50KTtcclxuICAgICAgICAgICAgaWYgKHJvdXRlcikge1xyXG4gICAgICAgICAgICAgICAgdmFyIG5ld1BhcmVudEluc3RydWN0aW9uID0gdGhpcy5fZmluZFBhcmVudEluc3RydWN0aW9uRnJvbVJvdXRlcihyb3V0ZXIsIHBhcmVudEluc3RydWN0aW9uKTtcclxuICAgICAgICAgICAgICAgIHZhciBpbnN0cnVjdGlvbiA9IG5ldyBOYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24oT2JqZWN0LmFzc2lnbih7fSwgaW5zdHJ1Y3Rpb25Jbml0LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7IHBhdGg6IGZyYWdtZW50IH0sXHJcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHVybFJlY29nbml6YXRpb25SZXN1bHRzID8gdXJsUmVjb2duaXphdGlvblJlc3VsdHMucXVlcnlQYXJhbXMgOiB7fSxcclxuICAgICAgICAgICAgICAgICAgICByb3V0ZXI6IHJvdXRlcixcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRJbnN0cnVjdGlvbjogbmV3UGFyZW50SW5zdHJ1Y3Rpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Q2F0Y2hIYW5kbGVyOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZzogbnVsbCAvLyBjb25maWcgd2lsbCBiZSBjcmVhdGVkIGJ5IHRoZSBjaGFpbmVkIHBhcmVudCBjYXRjaEFsbEhhbmRsZXJcclxuICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGV2YWx1YXRlTmF2aWdhdGlvblN0cmF0ZWd5KGluc3RydWN0aW9uLCByb3V0ZXIuY2F0Y2hBbGxIYW5kbGVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVzdWx0ICYmIHBhcmVudEluc3RydWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmFzZVVybCA9IGdlbmVyYXRlQmFzZVVybCh0aGlzLnBhcmVudCwgcGFyZW50SW5zdHJ1Y3Rpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0IHx8IFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlJvdXRlIG5vdCBmb3VuZDogXCIgKyB1cmwpKTtcclxuICAgIH07XHJcbiAgICAvKipAaW50ZXJuYWwgKi9cclxuICAgIFJvdXRlci5wcm90b3R5cGUuX2ZpbmRQYXJlbnRJbnN0cnVjdGlvbkZyb21Sb3V0ZXIgPSBmdW5jdGlvbiAocm91dGVyLCBpbnN0cnVjdGlvbikge1xyXG4gICAgICAgIGlmIChpbnN0cnVjdGlvbi5yb3V0ZXIgPT09IHJvdXRlcikge1xyXG4gICAgICAgICAgICBpbnN0cnVjdGlvbi5mcmFnbWVudCA9IHJvdXRlci5iYXNlVXJsOyAvLyBuZWVkIHRvIGNoYW5nZSB0aGUgZnJhZ21lbnQgaW4gY2FzZSBvZiBhIHJlZGlyZWN0IGluc3RlYWQgb2YgbW9kdWxlSWRcclxuICAgICAgICAgICAgcmV0dXJuIGluc3RydWN0aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi5wYXJlbnRJbnN0cnVjdGlvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZmluZFBhcmVudEluc3RydWN0aW9uRnJvbVJvdXRlcihyb3V0ZXIsIGluc3RydWN0aW9uLnBhcmVudEluc3RydWN0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH07XHJcbiAgICAvKipAaW50ZXJuYWwgKi9cclxuICAgIFJvdXRlci5wcm90b3R5cGUuX3BhcmVudENhdGNoQWxsSGFuZGxlciA9IGZ1bmN0aW9uIChyb3V0ZXIpIHtcclxuICAgICAgICBpZiAocm91dGVyLmNhdGNoQWxsSGFuZGxlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gcm91dGVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChyb3V0ZXIucGFyZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJlbnRDYXRjaEFsbEhhbmRsZXIocm91dGVyLnBhcmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEBpbnRlcm5hbFxyXG4gICAgICovXHJcbiAgICBSb3V0ZXIucHJvdG90eXBlLl9jcmVhdGVSb3V0ZUNvbmZpZyA9IGZ1bmN0aW9uIChjb25maWcsIGluc3RydWN0aW9uKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICByZXR1cm4gUHJvbWlzZVxyXG4gICAgICAgICAgICAucmVzb2x2ZShjb25maWcpXHJcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChjKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IG1vZHVsZUlkOiBjIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGMgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjKGluc3RydWN0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gYztcclxuICAgICAgICB9KVxyXG4gICAgICAgICAgICAvLyB0eXBpbmcgaGVyZSBjb3VsZCBiZSBlaXRoZXIgUm91dGVDb25maWcgb3IgUmVkaXJlY3RDb25maWdcclxuICAgICAgICAgICAgLy8gYnV0IHRlbXBvcmFyaWx5IHRyZWF0IGJvdGggYXMgUm91dGVDb25maWdcclxuICAgICAgICAgICAgLy8gdG9kbzogaW1wcm92ZSB0eXBpbmdzIHByZWNpc2lvblxyXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoYykgeyByZXR1cm4gdHlwZW9mIGMgPT09ICdzdHJpbmcnID8geyBtb2R1bGVJZDogYyB9IDogYzsgfSlcclxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGMpIHtcclxuICAgICAgICAgICAgYy5yb3V0ZSA9IGluc3RydWN0aW9uLnBhcmFtcy5wYXRoO1xyXG4gICAgICAgICAgICB2YWxpZGF0ZVJvdXRlQ29uZmlnKGMpO1xyXG4gICAgICAgICAgICBpZiAoIWMubmF2TW9kZWwpIHtcclxuICAgICAgICAgICAgICAgIGMubmF2TW9kZWwgPSBfdGhpcy5jcmVhdGVOYXZNb2RlbChjKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gYztcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gUm91dGVyO1xyXG59KCkpO1xyXG4vKiBAaW50ZXJuYWwgZXhwb3J0ZWQgZm9yIHVuaXQgdGVzdGluZyAqL1xyXG52YXIgZ2VuZXJhdGVCYXNlVXJsID0gZnVuY3Rpb24gKHJvdXRlciwgaW5zdHJ1Y3Rpb24pIHtcclxuICAgIHJldHVybiBcIlwiICsgKHJvdXRlci5iYXNlVXJsIHx8ICcnKSArIChpbnN0cnVjdGlvbi5nZXRCYXNlVXJsKCkgfHwgJycpO1xyXG59O1xyXG4vKiBAaW50ZXJuYWwgZXhwb3J0ZWQgZm9yIHVuaXQgdGVzdGluZyAqL1xyXG52YXIgdmFsaWRhdGVSb3V0ZUNvbmZpZyA9IGZ1bmN0aW9uIChjb25maWcpIHtcclxuICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnb2JqZWN0Jykge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBSb3V0ZSBDb25maWcnKTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgY29uZmlnLnJvdXRlICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHZhciBuYW1lXzEgPSBjb25maWcubmFtZSB8fCAnKG5vIG5hbWUpJztcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgUm91dGUgQ29uZmlnIGZvciBcIicgKyBuYW1lXzEgKyAnXCI6IFlvdSBtdXN0IHNwZWNpZnkgYSBcInJvdXRlOlwiIHBhdHRlcm4uJyk7XHJcbiAgICB9XHJcbiAgICBpZiAoISgncmVkaXJlY3QnIGluIGNvbmZpZyB8fCBjb25maWcubW9kdWxlSWQgfHwgY29uZmlnLm5hdmlnYXRpb25TdHJhdGVneSB8fCBjb25maWcudmlld1BvcnRzKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBSb3V0ZSBDb25maWcgZm9yIFwiJyArIGNvbmZpZy5yb3V0ZSArICdcIjogWW91IG11c3Qgc3BlY2lmeSBhIFwibW9kdWxlSWQ6XCIsIFwicmVkaXJlY3Q6XCIsIFwibmF2aWdhdGlvblN0cmF0ZWd5OlwiLCBvciBcInZpZXdQb3J0czpcIi4nKTtcclxuICAgIH1cclxufTtcclxuLyogQGludGVybmFsIGV4cG9ydGVkIGZvciB1bml0IHRlc3RpbmcgKi9cclxudmFyIGV2YWx1YXRlTmF2aWdhdGlvblN0cmF0ZWd5ID0gZnVuY3Rpb24gKGluc3RydWN0aW9uLCBldmFsdWF0b3IsIGNvbnRleHQpIHtcclxuICAgIHJldHVybiBQcm9taXNlXHJcbiAgICAgICAgLnJlc29sdmUoZXZhbHVhdG9yLmNhbGwoY29udGV4dCwgaW5zdHJ1Y3Rpb24pKVxyXG4gICAgICAgIC50aGVuKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoISgndmlld1BvcnRzJyBpbiBpbnN0cnVjdGlvbi5jb25maWcpKSB7XHJcbiAgICAgICAgICAgIGluc3RydWN0aW9uLmNvbmZpZy52aWV3UG9ydHMgPSB7XHJcbiAgICAgICAgICAgICAgICAnZGVmYXVsdCc6IHtcclxuICAgICAgICAgICAgICAgICAgICBtb2R1bGVJZDogaW5zdHJ1Y3Rpb24uY29uZmlnLm1vZHVsZUlkXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvbjtcclxuICAgIH0pO1xyXG59O1xuXG4vKipAaW50ZXJuYWwgZXhwb3J0ZWQgZm9yIHVuaXQgdGVzdGluZyAqL1xyXG52YXIgY3JlYXRlTmV4dEZuID0gZnVuY3Rpb24gKGluc3RydWN0aW9uLCBzdGVwcykge1xyXG4gICAgdmFyIGluZGV4ID0gLTE7XHJcbiAgICB2YXIgbmV4dCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpbmRleCsrO1xyXG4gICAgICAgIGlmIChpbmRleCA8IHN0ZXBzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudFN0ZXAgPSBzdGVwc1tpbmRleF07XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFN0ZXAoaW5zdHJ1Y3Rpb24sIG5leHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dC5yZWplY3QoZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXh0LmNvbXBsZXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIG5leHQuY29tcGxldGUgPSBjcmVhdGVDb21wbGV0aW9uSGFuZGxlcihuZXh0LCBcImNvbXBsZXRlZFwiIC8qIENvbXBsZXRlZCAqLyk7XHJcbiAgICBuZXh0LmNhbmNlbCA9IGNyZWF0ZUNvbXBsZXRpb25IYW5kbGVyKG5leHQsIFwiY2FuY2VsZWRcIiAvKiBDYW5jZWxlZCAqLyk7XHJcbiAgICBuZXh0LnJlamVjdCA9IGNyZWF0ZUNvbXBsZXRpb25IYW5kbGVyKG5leHQsIFwicmVqZWN0ZWRcIiAvKiBSZWplY3RlZCAqLyk7XHJcbiAgICByZXR1cm4gbmV4dDtcclxufTtcclxuLyoqQGludGVybmFsIGV4cG9ydGVkIGZvciB1bml0IHRlc3RpbmcgKi9cclxudmFyIGNyZWF0ZUNvbXBsZXRpb25IYW5kbGVyID0gZnVuY3Rpb24gKG5leHQsIHN0YXR1cykge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChvdXRwdXQpIHsgcmV0dXJuIFByb21pc2VcclxuICAgICAgICAucmVzb2x2ZSh7XHJcbiAgICAgICAgc3RhdHVzOiBzdGF0dXMsXHJcbiAgICAgICAgb3V0cHV0OiBvdXRwdXQsXHJcbiAgICAgICAgY29tcGxldGVkOiBzdGF0dXMgPT09IFwiY29tcGxldGVkXCIgLyogQ29tcGxldGVkICovXHJcbiAgICB9KTsgfTtcclxufTtcblxuLyoqXHJcbiAqIFRoZSBjbGFzcyByZXNwb25zaWJsZSBmb3IgbWFuYWdpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIG5hdmlnYXRpb24gcGlwZWxpbmUuXHJcbiAqL1xyXG52YXIgUGlwZWxpbmUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBQaXBlbGluZSgpIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgcGlwZWxpbmUgc3RlcHMuIEFuZCBzdGVwcyBhZGRlZCB2aWEgYWRkU3RlcCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIGZ1bmN0aW9uXHJcbiAgICAgICAgICogVGhlIGFjdHVhbHkgcnVubmluZyBmdW5jdGlvbnMgd2l0aCBjb3JyZWN0IHN0ZXAgY29udGV4dHMgb2YgdGhpcyBwaXBlbGluZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc3RlcHMgPSBbXTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBhIHN0ZXAgdG8gdGhlIHBpcGVsaW5lLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBzdGVwIFRoZSBwaXBlbGluZSBzdGVwLlxyXG4gICAgICovXHJcbiAgICBQaXBlbGluZS5wcm90b3R5cGUuYWRkU3RlcCA9IGZ1bmN0aW9uIChzdGVwKSB7XHJcbiAgICAgICAgdmFyIHJ1bjtcclxuICAgICAgICBpZiAodHlwZW9mIHN0ZXAgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgcnVuID0gc3RlcDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHN0ZXAuZ2V0U3RlcHMgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgLy8gZ2V0U3RlcHMgaXMgdG8gZW5hYmxlIHN1cHBvcnQgb3BlbiBzbG90c1xyXG4gICAgICAgICAgICAvLyB3aGVyZSBkZXZzIGNhbiBhZGQgbXVsdGlwbGUgc3RlcHMgaW50byB0aGUgc2FtZSBzbG90IG5hbWVcclxuICAgICAgICAgICAgdmFyIHN0ZXBzID0gc3RlcC5nZXRTdGVwcygpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHN0ZXBzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRTdGVwKHN0ZXBzW2ldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJ1biA9IHN0ZXAucnVuLmJpbmQoc3RlcCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3RlcHMucHVzaChydW4pO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogUnVucyB0aGUgcGlwZWxpbmUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGluc3RydWN0aW9uIFRoZSBuYXZpZ2F0aW9uIGluc3RydWN0aW9uIHRvIHByb2Nlc3MuXHJcbiAgICAgKi9cclxuICAgIFBpcGVsaW5lLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoaW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICB2YXIgbmV4dEZuID0gY3JlYXRlTmV4dEZuKGluc3RydWN0aW9uLCB0aGlzLnN0ZXBzKTtcclxuICAgICAgICByZXR1cm4gbmV4dEZuKCk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIFBpcGVsaW5lO1xyXG59KCkpO1xuXG4vKipcclxuKiBEZXRlcm1pbmVzIGlmIHRoZSBwcm92aWRlZCBvYmplY3QgaXMgYSBuYXZpZ2F0aW9uIGNvbW1hbmQuXHJcbiogQSBuYXZpZ2F0aW9uIGNvbW1hbmQgaXMgYW55dGhpbmcgd2l0aCBhIG5hdmlnYXRlIG1ldGhvZC5cclxuKlxyXG4qIEBwYXJhbSBvYmogVGhlIG9iamVjdCB0byBjaGVjay5cclxuKi9cclxuZnVuY3Rpb24gaXNOYXZpZ2F0aW9uQ29tbWFuZChvYmopIHtcclxuICAgIHJldHVybiBvYmogJiYgdHlwZW9mIG9iai5uYXZpZ2F0ZSA9PT0gJ2Z1bmN0aW9uJztcclxufVxyXG4vKipcclxuKiBVc2VkIGR1cmluZyB0aGUgYWN0aXZhdGlvbiBsaWZlY3ljbGUgdG8gY2F1c2UgYSByZWRpcmVjdC5cclxuKi9cclxudmFyIFJlZGlyZWN0ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gdXJsIFRoZSBVUkwgZnJhZ21lbnQgdG8gdXNlIGFzIHRoZSBuYXZpZ2F0aW9uIGRlc3RpbmF0aW9uLlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG5hdmlnYXRpb24gb3B0aW9ucy5cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gUmVkaXJlY3QodXJsLCBvcHRpb25zKSB7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cclxuICAgICAgICB0aGlzLnVybCA9IHVybDtcclxuICAgICAgICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHsgdHJpZ2dlcjogdHJ1ZSwgcmVwbGFjZTogdHJ1ZSB9LCBvcHRpb25zKTtcclxuICAgICAgICB0aGlzLnNob3VsZENvbnRpbnVlUHJvY2Vzc2luZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgYnkgdGhlIGFjdGl2YXRpb24gc3lzdGVtIHRvIHNldCB0aGUgY2hpbGQgcm91dGVyLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSByb3V0ZXIgVGhlIHJvdXRlci5cclxuICAgICAqL1xyXG4gICAgUmVkaXJlY3QucHJvdG90eXBlLnNldFJvdXRlciA9IGZ1bmN0aW9uIChyb3V0ZXIpIHtcclxuICAgICAgICB0aGlzLnJvdXRlciA9IHJvdXRlcjtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBieSB0aGUgbmF2aWdhdGlvbiBwaXBlbGluZSB0byBuYXZpZ2F0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gYXBwUm91dGVyIFRoZSByb3V0ZXIgdG8gYmUgcmVkaXJlY3RlZC5cclxuICAgICAqL1xyXG4gICAgUmVkaXJlY3QucHJvdG90eXBlLm5hdmlnYXRlID0gZnVuY3Rpb24gKGFwcFJvdXRlcikge1xyXG4gICAgICAgIHZhciBuYXZpZ2F0aW5nUm91dGVyID0gdGhpcy5vcHRpb25zLnVzZUFwcFJvdXRlciA/IGFwcFJvdXRlciA6ICh0aGlzLnJvdXRlciB8fCBhcHBSb3V0ZXIpO1xyXG4gICAgICAgIG5hdmlnYXRpbmdSb3V0ZXIubmF2aWdhdGUodGhpcy51cmwsIHRoaXMub3B0aW9ucyk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIFJlZGlyZWN0O1xyXG59KCkpO1xyXG4vKipcclxuICogVXNlZCBkdXJpbmcgdGhlIGFjdGl2YXRpb24gbGlmZWN5Y2xlIHRvIGNhdXNlIGEgcmVkaXJlY3QgdG8gYSBuYW1lZCByb3V0ZS5cclxuICovXHJcbnZhciBSZWRpcmVjdFRvUm91dGUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSByb3V0ZSBUaGUgbmFtZSBvZiB0aGUgcm91dGUuXHJcbiAgICAgKiBAcGFyYW0gcGFyYW1zIFRoZSBwYXJhbWV0ZXJzIHRvIGJlIHNlbnQgdG8gdGhlIGFjdGl2YXRpb24gbWV0aG9kLlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgdG8gdXNlIGZvciBuYXZpZ2F0aW9uLlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBSZWRpcmVjdFRvUm91dGUocm91dGUsIHBhcmFtcywgb3B0aW9ucykge1xyXG4gICAgICAgIGlmIChwYXJhbXMgPT09IHZvaWQgMCkgeyBwYXJhbXMgPSB7fTsgfVxyXG4gICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XHJcbiAgICAgICAgdGhpcy5yb3V0ZSA9IHJvdXRlO1xyXG4gICAgICAgIHRoaXMucGFyYW1zID0gcGFyYW1zO1xyXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oeyB0cmlnZ2VyOiB0cnVlLCByZXBsYWNlOiB0cnVlIH0sIG9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMuc2hvdWxkQ29udGludWVQcm9jZXNzaW5nID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBieSB0aGUgYWN0aXZhdGlvbiBzeXN0ZW0gdG8gc2V0IHRoZSBjaGlsZCByb3V0ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHJvdXRlciBUaGUgcm91dGVyLlxyXG4gICAgICovXHJcbiAgICBSZWRpcmVjdFRvUm91dGUucHJvdG90eXBlLnNldFJvdXRlciA9IGZ1bmN0aW9uIChyb3V0ZXIpIHtcclxuICAgICAgICB0aGlzLnJvdXRlciA9IHJvdXRlcjtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBieSB0aGUgbmF2aWdhdGlvbiBwaXBlbGluZSB0byBuYXZpZ2F0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gYXBwUm91dGVyIFRoZSByb3V0ZXIgdG8gYmUgcmVkaXJlY3RlZC5cclxuICAgICAqL1xyXG4gICAgUmVkaXJlY3RUb1JvdXRlLnByb3RvdHlwZS5uYXZpZ2F0ZSA9IGZ1bmN0aW9uIChhcHBSb3V0ZXIpIHtcclxuICAgICAgICB2YXIgbmF2aWdhdGluZ1JvdXRlciA9IHRoaXMub3B0aW9ucy51c2VBcHBSb3V0ZXIgPyBhcHBSb3V0ZXIgOiAodGhpcy5yb3V0ZXIgfHwgYXBwUm91dGVyKTtcclxuICAgICAgICBuYXZpZ2F0aW5nUm91dGVyLm5hdmlnYXRlVG9Sb3V0ZSh0aGlzLnJvdXRlLCB0aGlzLnBhcmFtcywgdGhpcy5vcHRpb25zKTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gUmVkaXJlY3RUb1JvdXRlO1xyXG59KCkpO1xuXG4vKipcclxuICogQGludGVybmFsIGV4cG9ydGVkIGZvciB1bml0IHRlc3RpbmdcclxuICovXHJcbmZ1bmN0aW9uIF9idWlsZE5hdmlnYXRpb25QbGFuKGluc3RydWN0aW9uLCBmb3JjZUxpZmVjeWNsZU1pbmltdW0pIHtcclxuICAgIHZhciBjb25maWcgPSBpbnN0cnVjdGlvbi5jb25maWc7XHJcbiAgICBpZiAoJ3JlZGlyZWN0JyBpbiBjb25maWcpIHtcclxuICAgICAgICByZXR1cm4gYnVpbGRSZWRpcmVjdFBsYW4oaW5zdHJ1Y3Rpb24pO1xyXG4gICAgfVxyXG4gICAgdmFyIHByZXZJbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uLnByZXZpb3VzSW5zdHJ1Y3Rpb247XHJcbiAgICB2YXIgZGVmYXVsdFZpZXdQb3J0Q29uZmlncyA9IGluc3RydWN0aW9uLnJvdXRlci52aWV3UG9ydERlZmF1bHRzO1xyXG4gICAgaWYgKHByZXZJbnN0cnVjdGlvbikge1xyXG4gICAgICAgIHJldHVybiBidWlsZFRyYW5zaXRpb25QbGFucyhpbnN0cnVjdGlvbiwgcHJldkluc3RydWN0aW9uLCBkZWZhdWx0Vmlld1BvcnRDb25maWdzLCBmb3JjZUxpZmVjeWNsZU1pbmltdW0pO1xyXG4gICAgfVxyXG4gICAgLy8gZmlyc3QgbmF2aWdhdGlvbiwgb25seSBuZWVkIHRvIHByZXBhcmUgYSBmZXcgaW5mb3JtYXRpb24gZm9yIGVhY2ggdmlld3BvcnQgcGxhblxyXG4gICAgdmFyIHZpZXdQb3J0UGxhbnMgPSB7fTtcclxuICAgIHZhciB2aWV3UG9ydENvbmZpZ3MgPSBjb25maWcudmlld1BvcnRzO1xyXG4gICAgZm9yICh2YXIgdmlld1BvcnROYW1lIGluIHZpZXdQb3J0Q29uZmlncykge1xyXG4gICAgICAgIHZhciB2aWV3UG9ydENvbmZpZyA9IHZpZXdQb3J0Q29uZmlnc1t2aWV3UG9ydE5hbWVdO1xyXG4gICAgICAgIGlmICh2aWV3UG9ydENvbmZpZy5tb2R1bGVJZCA9PT0gbnVsbCAmJiB2aWV3UG9ydE5hbWUgaW4gZGVmYXVsdFZpZXdQb3J0Q29uZmlncykge1xyXG4gICAgICAgICAgICB2aWV3UG9ydENvbmZpZyA9IGRlZmF1bHRWaWV3UG9ydENvbmZpZ3Nbdmlld1BvcnROYW1lXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmlld1BvcnRQbGFuc1t2aWV3UG9ydE5hbWVdID0ge1xyXG4gICAgICAgICAgICBuYW1lOiB2aWV3UG9ydE5hbWUsXHJcbiAgICAgICAgICAgIHN0cmF0ZWd5OiBcInJlcGxhY2VcIiAvKiBSZXBsYWNlICovLFxyXG4gICAgICAgICAgICBjb25maWc6IHZpZXdQb3J0Q29uZmlnXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmlld1BvcnRQbGFucyk7XHJcbn1cclxuLyoqXHJcbiAqIEJ1aWxkIHJlZGlyZWN0IHBsYW4gYmFzZWQgb24gY29uZmlnIG9mIGEgbmF2aWdhdGlvbiBpbnN0cnVjdGlvblxyXG4gKiBAaW50ZXJuYWwgZXhwb3J0ZWQgZm9yIHVuaXQgdGVzdGluZ1xyXG4gKi9cclxudmFyIGJ1aWxkUmVkaXJlY3RQbGFuID0gZnVuY3Rpb24gKGluc3RydWN0aW9uKSB7XHJcbiAgICB2YXIgY29uZmlnID0gaW5zdHJ1Y3Rpb24uY29uZmlnO1xyXG4gICAgdmFyIHJvdXRlciA9IGluc3RydWN0aW9uLnJvdXRlcjtcclxuICAgIHJldHVybiByb3V0ZXJcclxuICAgICAgICAuX2NyZWF0ZU5hdmlnYXRpb25JbnN0cnVjdGlvbihjb25maWcucmVkaXJlY3QpXHJcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlZGlyZWN0SW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICB2YXIgcGFyYW1zID0ge307XHJcbiAgICAgICAgdmFyIG9yaWdpbmFsSW5zdHJ1Y3Rpb25QYXJhbXMgPSBpbnN0cnVjdGlvbi5wYXJhbXM7XHJcbiAgICAgICAgdmFyIHJlZGlyZWN0SW5zdHJ1Y3Rpb25QYXJhbXMgPSByZWRpcmVjdEluc3RydWN0aW9uLnBhcmFtcztcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gcmVkaXJlY3RJbnN0cnVjdGlvblBhcmFtcykge1xyXG4gICAgICAgICAgICAvLyBJZiB0aGUgcGFyYW0gb24gdGhlIHJlZGlyZWN0IHBvaW50cyB0byBhbm90aGVyIHBhcmFtLCBlLmcuIHsgcm91dGU6IGZpcnN0Lzp0aGlzLCByZWRpcmVjdDogc2Vjb25kLzp0aGlzIH1cclxuICAgICAgICAgICAgdmFyIHZhbCA9IHJlZGlyZWN0SW5zdHJ1Y3Rpb25QYXJhbXNba2V5XTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnICYmIHZhbFswXSA9PT0gJzonKSB7XHJcbiAgICAgICAgICAgICAgICB2YWwgPSB2YWwuc2xpY2UoMSk7XHJcbiAgICAgICAgICAgICAgICAvLyBBbmQgaWYgdGhhdCBwYXJhbSBpcyBmb3VuZCBvbiB0aGUgb3JpZ2luYWwgaW5zdHJ1Y3Rpb24gdGhlbiB1c2UgaXRcclxuICAgICAgICAgICAgICAgIGlmICh2YWwgaW4gb3JpZ2luYWxJbnN0cnVjdGlvblBhcmFtcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtc1trZXldID0gb3JpZ2luYWxJbnN0cnVjdGlvblBhcmFtc1t2YWxdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zW2tleV0gPSByZWRpcmVjdEluc3RydWN0aW9uUGFyYW1zW2tleV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHJlZGlyZWN0TG9jYXRpb24gPSByb3V0ZXIuZ2VuZXJhdGUocmVkaXJlY3RJbnN0cnVjdGlvbi5jb25maWcsIHBhcmFtcywgaW5zdHJ1Y3Rpb24ub3B0aW9ucyk7XHJcbiAgICAgICAgLy8gU3BlY2lhbCBoYW5kbGluZyBmb3IgY2hpbGQgcm91dGVzXHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIG9yaWdpbmFsSW5zdHJ1Y3Rpb25QYXJhbXMpIHtcclxuICAgICAgICAgICAgcmVkaXJlY3RMb2NhdGlvbiA9IHJlZGlyZWN0TG9jYXRpb24ucmVwbGFjZShcIjpcIiArIGtleSwgb3JpZ2luYWxJbnN0cnVjdGlvblBhcmFtc1trZXldKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHF1ZXJ5U3RyaW5nID0gaW5zdHJ1Y3Rpb24ucXVlcnlTdHJpbmc7XHJcbiAgICAgICAgaWYgKHF1ZXJ5U3RyaW5nKSB7XHJcbiAgICAgICAgICAgIHJlZGlyZWN0TG9jYXRpb24gKz0gJz8nICsgcXVlcnlTdHJpbmc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IFJlZGlyZWN0KHJlZGlyZWN0TG9jYXRpb24pKTtcclxuICAgIH0pO1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtIHZpZXdQb3J0UGxhbnMgdGhlIFBsYW4gcmVjb3JkIHRoYXQgaG9sZHMgaW5mb3JtYXRpb24gYWJvdXQgYnVpbHQgcGxhbnNcclxuICogQGludGVybmFsIGV4cG9ydGVkIGZvciB1bml0IHRlc3RpbmdcclxuICovXHJcbnZhciBidWlsZFRyYW5zaXRpb25QbGFucyA9IGZ1bmN0aW9uIChjdXJyZW50SW5zdHJ1Y3Rpb24sIHByZXZpb3VzSW5zdHJ1Y3Rpb24sIGRlZmF1bHRWaWV3UG9ydENvbmZpZ3MsIGZvcmNlTGlmZWN5Y2xlTWluaW11bSkge1xyXG4gICAgdmFyIHZpZXdQb3J0UGxhbnMgPSB7fTtcclxuICAgIHZhciBuZXdJbnN0cnVjdGlvbkNvbmZpZyA9IGN1cnJlbnRJbnN0cnVjdGlvbi5jb25maWc7XHJcbiAgICB2YXIgaGFzTmV3UGFyYW1zID0gaGFzRGlmZmVyZW50UGFyYW1ldGVyVmFsdWVzKHByZXZpb3VzSW5zdHJ1Y3Rpb24sIGN1cnJlbnRJbnN0cnVjdGlvbik7XHJcbiAgICB2YXIgcGVuZGluZyA9IFtdO1xyXG4gICAgdmFyIHByZXZpb3VzVmlld1BvcnRJbnN0cnVjdGlvbnMgPSBwcmV2aW91c0luc3RydWN0aW9uLnZpZXdQb3J0SW5zdHJ1Y3Rpb25zO1xyXG4gICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAodmlld1BvcnROYW1lKSB7XHJcbiAgICAgICAgdmFyIHByZXZWaWV3UG9ydEluc3RydWN0aW9uID0gcHJldmlvdXNWaWV3UG9ydEluc3RydWN0aW9uc1t2aWV3UG9ydE5hbWVdO1xyXG4gICAgICAgIHZhciBwcmV2Vmlld1BvcnRDb21wb25lbnQgPSBwcmV2Vmlld1BvcnRJbnN0cnVjdGlvbi5jb21wb25lbnQ7XHJcbiAgICAgICAgdmFyIG5ld0luc3RydWN0aW9uVmlld1BvcnRDb25maWdzID0gbmV3SW5zdHJ1Y3Rpb25Db25maWcudmlld1BvcnRzO1xyXG4gICAgICAgIC8vIGlmIHRoaXMgaXMgaW52b2tlZCBvbiBhIHZpZXdwb3J0IHdpdGhvdXQgYW55IGNoYW5nZXMsIGJhc2VkIG9uIG5ldyB1cmwsXHJcbiAgICAgICAgLy8gbmV3Vmlld1BvcnRDb25maWcgd2lsbCBiZSB0aGUgZXhpc3Rpbmcgdmlld3BvcnQgaW5zdHJ1Y3Rpb25cclxuICAgICAgICB2YXIgbmV4dFZpZXdQb3J0Q29uZmlnID0gdmlld1BvcnROYW1lIGluIG5ld0luc3RydWN0aW9uVmlld1BvcnRDb25maWdzXHJcbiAgICAgICAgICAgID8gbmV3SW5zdHJ1Y3Rpb25WaWV3UG9ydENvbmZpZ3Nbdmlld1BvcnROYW1lXVxyXG4gICAgICAgICAgICA6IHByZXZWaWV3UG9ydEluc3RydWN0aW9uO1xyXG4gICAgICAgIGlmIChuZXh0Vmlld1BvcnRDb25maWcubW9kdWxlSWQgPT09IG51bGwgJiYgdmlld1BvcnROYW1lIGluIGRlZmF1bHRWaWV3UG9ydENvbmZpZ3MpIHtcclxuICAgICAgICAgICAgbmV4dFZpZXdQb3J0Q29uZmlnID0gZGVmYXVsdFZpZXdQb3J0Q29uZmlnc1t2aWV3UG9ydE5hbWVdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdmlld1BvcnRBY3RpdmF0aW9uU3RyYXRlZ3kgPSBkZXRlcm1pbmVBY3RpdmF0aW9uU3RyYXRlZ3koY3VycmVudEluc3RydWN0aW9uLCBwcmV2Vmlld1BvcnRJbnN0cnVjdGlvbiwgbmV4dFZpZXdQb3J0Q29uZmlnLCBoYXNOZXdQYXJhbXMsIGZvcmNlTGlmZWN5Y2xlTWluaW11bSk7XHJcbiAgICAgICAgdmFyIHZpZXdQb3J0UGxhbiA9IHZpZXdQb3J0UGxhbnNbdmlld1BvcnROYW1lXSA9IHtcclxuICAgICAgICAgICAgbmFtZTogdmlld1BvcnROYW1lLFxyXG4gICAgICAgICAgICAvLyBWaWV3UG9ydEluc3RydWN0aW9uIGNhbiBxdWFjayBsaWtlIGEgUm91dGVDb25maWdcclxuICAgICAgICAgICAgY29uZmlnOiBuZXh0Vmlld1BvcnRDb25maWcsXHJcbiAgICAgICAgICAgIHByZXZDb21wb25lbnQ6IHByZXZWaWV3UG9ydENvbXBvbmVudCxcclxuICAgICAgICAgICAgcHJldk1vZHVsZUlkOiBwcmV2Vmlld1BvcnRJbnN0cnVjdGlvbi5tb2R1bGVJZCxcclxuICAgICAgICAgICAgc3RyYXRlZ3k6IHZpZXdQb3J0QWN0aXZhdGlvblN0cmF0ZWd5XHJcbiAgICAgICAgfTtcclxuICAgICAgICAvLyByZWN1cnNpdmVseSBidWlsZCBuYXYgcGxhbnMgZm9yIGFsbCBleGlzdGluZyBjaGlsZCByb3V0ZXJzL3ZpZXdwb3J0cyBvZiB0aGlzIHZpZXdwb3J0XHJcbiAgICAgICAgLy8gdGhpcyBpcyBwb3NzaWJsZSBiZWNhdXNlIGV4aXN0aW5nIGNoaWxkIHZpZXdwb3J0cyBhbmQgcm91dGVycyBhbHJlYWR5IGhhdmUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uXHJcbiAgICAgICAgLy8gdG8gcHJvY2VzcyB0aGUgd2lsZGNhcmQgcGF0aCBmcm9tIHBhcmVudCBpbnN0cnVjdGlvblxyXG4gICAgICAgIGlmICh2aWV3UG9ydEFjdGl2YXRpb25TdHJhdGVneSAhPT0gXCJyZXBsYWNlXCIgLyogUmVwbGFjZSAqLyAmJiBwcmV2Vmlld1BvcnRJbnN0cnVjdGlvbi5jaGlsZFJvdXRlcikge1xyXG4gICAgICAgICAgICB2YXIgcGF0aCA9IGN1cnJlbnRJbnN0cnVjdGlvbi5nZXRXaWxkY2FyZFBhdGgoKTtcclxuICAgICAgICAgICAgdmFyIHRhc2sgPSBwcmV2Vmlld1BvcnRJbnN0cnVjdGlvblxyXG4gICAgICAgICAgICAgICAgLmNoaWxkUm91dGVyXHJcbiAgICAgICAgICAgICAgICAuX2NyZWF0ZU5hdmlnYXRpb25JbnN0cnVjdGlvbihwYXRoLCBjdXJyZW50SW5zdHJ1Y3Rpb24pXHJcbiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoY2hpbGRJbnN0cnVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgdmlld1BvcnRQbGFuLmNoaWxkTmF2aWdhdGlvbkluc3RydWN0aW9uID0gY2hpbGRJbnN0cnVjdGlvbjtcclxuICAgICAgICAgICAgICAgIHJldHVybiBfYnVpbGROYXZpZ2F0aW9uUGxhbihjaGlsZEluc3RydWN0aW9uLCBcclxuICAgICAgICAgICAgICAgIC8vIGlzIGl0IHNhZmUgdG8gYXNzdW1lIHZpZXdQb3J0UGxhbiBoYXMgbm90IGJlZW4gY2hhbmdlZCBmcm9tIHByZXZpb3VzIGFzc2lnbm1lbnQ/XHJcbiAgICAgICAgICAgICAgICAvLyBpZiBzbywgY2FuIGp1c3QgdXNlIGxvY2FsIHZhcmlhYmxlIHZpZXdQb3J0UGxhblN0cmF0ZWd5XHJcbiAgICAgICAgICAgICAgICAvLyB0aGVyZSBjb3VsZCBiZSB1c2VyIGNvZGUgbW9kaWZ5aW5nIHZpZXdwb3J0IHBsYW4gZHVyaW5nIF9jcmVhdGVOYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24/XHJcbiAgICAgICAgICAgICAgICB2aWV3UG9ydFBsYW4uc3RyYXRlZ3kgPT09IFwiaW52b2tlLWxpZmVjeWNsZVwiIC8qIEludm9rZUxpZmVjeWNsZSAqLylcclxuICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoY2hpbGRQbGFuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkUGxhbiBpbnN0YW5jZW9mIFJlZGlyZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChjaGlsZFBsYW4pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjaGlsZEluc3RydWN0aW9uLnBsYW4gPSBjaGlsZFBsYW47XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZm9yIGJsdWViaXJkID9cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcGVuZGluZy5wdXNoKHRhc2spO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBmb3IgKHZhciB2aWV3UG9ydE5hbWUgaW4gcHJldmlvdXNWaWV3UG9ydEluc3RydWN0aW9ucykge1xyXG4gICAgICAgIF9sb29wXzEodmlld1BvcnROYW1lKTtcclxuICAgIH1cclxuICAgIHJldHVybiBQcm9taXNlLmFsbChwZW5kaW5nKS50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZpZXdQb3J0UGxhbnM7IH0pO1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtIG5ld1ZpZXdQb3J0Q29uZmlnIGlmIHRoaXMgaXMgaW52b2tlZCBvbiBhIHZpZXdwb3J0IHdpdGhvdXQgYW55IGNoYW5nZXMsIGJhc2VkIG9uIG5ldyB1cmwsIG5ld1ZpZXdQb3J0Q29uZmlnIHdpbGwgYmUgdGhlIGV4aXN0aW5nIHZpZXdwb3J0IGluc3RydWN0aW9uXHJcbiAqIEBpbnRlcm5hbCBleHBvcnRlZCBmb3IgdW5pdCB0ZXN0aW5nXHJcbiAqL1xyXG52YXIgZGV0ZXJtaW5lQWN0aXZhdGlvblN0cmF0ZWd5ID0gZnVuY3Rpb24gKGN1cnJlbnROYXZJbnN0cnVjdGlvbiwgcHJldlZpZXdQb3J0SW5zdHJ1Y3Rpb24sIG5ld1ZpZXdQb3J0Q29uZmlnLCBcclxuLy8gaW5kaWNhdGVzIHdoZXRoZXIgdGhlcmUgaXMgZGlmZmVyZW5jZSBiZXR3ZWVuIG9sZCBhbmQgbmV3IHVybCBwYXJhbXNcclxuaGFzTmV3UGFyYW1zLCBmb3JjZUxpZmVjeWNsZU1pbmltdW0pIHtcclxuICAgIHZhciBuZXdJbnN0cnVjdGlvbkNvbmZpZyA9IGN1cnJlbnROYXZJbnN0cnVjdGlvbi5jb25maWc7XHJcbiAgICB2YXIgcHJldlZpZXdQb3J0Vmlld01vZGVsID0gcHJldlZpZXdQb3J0SW5zdHJ1Y3Rpb24uY29tcG9uZW50LnZpZXdNb2RlbDtcclxuICAgIHZhciB2aWV3UG9ydFBsYW5TdHJhdGVneTtcclxuICAgIGlmIChwcmV2Vmlld1BvcnRJbnN0cnVjdGlvbi5tb2R1bGVJZCAhPT0gbmV3Vmlld1BvcnRDb25maWcubW9kdWxlSWQpIHtcclxuICAgICAgICB2aWV3UG9ydFBsYW5TdHJhdGVneSA9IFwicmVwbGFjZVwiIC8qIFJlcGxhY2UgKi87XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICgnZGV0ZXJtaW5lQWN0aXZhdGlvblN0cmF0ZWd5JyBpbiBwcmV2Vmlld1BvcnRWaWV3TW9kZWwpIHtcclxuICAgICAgICB2aWV3UG9ydFBsYW5TdHJhdGVneSA9IHByZXZWaWV3UG9ydFZpZXdNb2RlbC5kZXRlcm1pbmVBY3RpdmF0aW9uU3RyYXRlZ3kuYXBwbHkocHJldlZpZXdQb3J0Vmlld01vZGVsLCBjdXJyZW50TmF2SW5zdHJ1Y3Rpb24ubGlmZWN5Y2xlQXJncyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChuZXdJbnN0cnVjdGlvbkNvbmZpZy5hY3RpdmF0aW9uU3RyYXRlZ3kpIHtcclxuICAgICAgICB2aWV3UG9ydFBsYW5TdHJhdGVneSA9IG5ld0luc3RydWN0aW9uQ29uZmlnLmFjdGl2YXRpb25TdHJhdGVneTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGhhc05ld1BhcmFtcyB8fCBmb3JjZUxpZmVjeWNsZU1pbmltdW0pIHtcclxuICAgICAgICB2aWV3UG9ydFBsYW5TdHJhdGVneSA9IFwiaW52b2tlLWxpZmVjeWNsZVwiIC8qIEludm9rZUxpZmVjeWNsZSAqLztcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHZpZXdQb3J0UGxhblN0cmF0ZWd5ID0gXCJuby1jaGFuZ2VcIiAvKiBOb0NoYW5nZSAqLztcclxuICAgIH1cclxuICAgIHJldHVybiB2aWV3UG9ydFBsYW5TdHJhdGVneTtcclxufTtcclxuLyoqQGludGVybmFsIGV4cG9ydGVkIGZvciB1bml0IHRlc3RpbmcgKi9cclxudmFyIGhhc0RpZmZlcmVudFBhcmFtZXRlclZhbHVlcyA9IGZ1bmN0aW9uIChwcmV2LCBuZXh0KSB7XHJcbiAgICB2YXIgcHJldlBhcmFtcyA9IHByZXYucGFyYW1zO1xyXG4gICAgdmFyIG5leHRQYXJhbXMgPSBuZXh0LnBhcmFtcztcclxuICAgIHZhciBuZXh0V2lsZENhcmROYW1lID0gbmV4dC5jb25maWcuaGFzQ2hpbGRSb3V0ZXIgPyBuZXh0LmdldFdpbGRDYXJkTmFtZSgpIDogbnVsbDtcclxuICAgIGZvciAodmFyIGtleSBpbiBuZXh0UGFyYW1zKSB7XHJcbiAgICAgICAgaWYgKGtleSA9PT0gbmV4dFdpbGRDYXJkTmFtZSkge1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHByZXZQYXJhbXNba2V5XSAhPT0gbmV4dFBhcmFtc1trZXldKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAodmFyIGtleSBpbiBwcmV2UGFyYW1zKSB7XHJcbiAgICAgICAgaWYgKGtleSA9PT0gbmV4dFdpbGRDYXJkTmFtZSkge1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHByZXZQYXJhbXNba2V5XSAhPT0gbmV4dFBhcmFtc1trZXldKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghbmV4dC5vcHRpb25zLmNvbXBhcmVRdWVyeVBhcmFtcykge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHZhciBwcmV2UXVlcnlQYXJhbXMgPSBwcmV2LnF1ZXJ5UGFyYW1zO1xyXG4gICAgdmFyIG5leHRRdWVyeVBhcmFtcyA9IG5leHQucXVlcnlQYXJhbXM7XHJcbiAgICBmb3IgKHZhciBrZXkgaW4gbmV4dFF1ZXJ5UGFyYW1zKSB7XHJcbiAgICAgICAgaWYgKHByZXZRdWVyeVBhcmFtc1trZXldICE9PSBuZXh0UXVlcnlQYXJhbXNba2V5XSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKHZhciBrZXkgaW4gcHJldlF1ZXJ5UGFyYW1zKSB7XHJcbiAgICAgICAgaWYgKHByZXZRdWVyeVBhcmFtc1trZXldICE9PSBuZXh0UXVlcnlQYXJhbXNba2V5XSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn07XG5cbi8qKlxyXG4gKiBUcmFuc2Zvcm0gYSBuYXZpZ2F0aW9uIGluc3RydWN0aW9uIGludG8gdmlld3BvcnQgcGxhbiByZWNvcmQgb2JqZWN0LFxyXG4gKiBvciBhIHJlZGlyZWN0IHJlcXVlc3QgaWYgdXNlciB2aWV3bW9kZWwgZGVtYW5kc1xyXG4gKi9cclxudmFyIEJ1aWxkTmF2aWdhdGlvblBsYW5TdGVwID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gQnVpbGROYXZpZ2F0aW9uUGxhblN0ZXAoKSB7XHJcbiAgICB9XHJcbiAgICBCdWlsZE5hdmlnYXRpb25QbGFuU3RlcC5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKG5hdmlnYXRpb25JbnN0cnVjdGlvbiwgbmV4dCkge1xyXG4gICAgICAgIHJldHVybiBfYnVpbGROYXZpZ2F0aW9uUGxhbihuYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24pXHJcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChwbGFuKSB7XHJcbiAgICAgICAgICAgIGlmIChwbGFuIGluc3RhbmNlb2YgUmVkaXJlY3QpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0LmNhbmNlbChwbGFuKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBuYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24ucGxhbiA9IHBsYW47XHJcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKG5leHQuY2FuY2VsKTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gQnVpbGROYXZpZ2F0aW9uUGxhblN0ZXA7XHJcbn0oKSk7XG5cbi8qKlxyXG4gKiBAaW50ZXJuYWwgRXhwb3J0ZWQgZm9yIHVuaXQgdGVzdGluZ1xyXG4gKi9cclxudmFyIGxvYWROZXdSb3V0ZSA9IGZ1bmN0aW9uIChyb3V0ZUxvYWRlciwgbmF2aWdhdGlvbkluc3RydWN0aW9uKSB7XHJcbiAgICB2YXIgbG9hZGluZ1BsYW5zID0gZGV0ZXJtaW5lTG9hZGluZ1BsYW5zKG5hdmlnYXRpb25JbnN0cnVjdGlvbik7XHJcbiAgICB2YXIgbG9hZFByb21pc2VzID0gbG9hZGluZ1BsYW5zLm1hcChmdW5jdGlvbiAobG9hZGluZ1BsYW4pIHsgcmV0dXJuIGxvYWRSb3V0ZShyb3V0ZUxvYWRlciwgbG9hZGluZ1BsYW4ubmF2aWdhdGlvbkluc3RydWN0aW9uLCBsb2FkaW5nUGxhbi52aWV3UG9ydFBsYW4pOyB9KTtcclxuICAgIHJldHVybiBQcm9taXNlLmFsbChsb2FkUHJvbWlzZXMpO1xyXG59O1xyXG4vKipcclxuICogQGludGVybmFsIEV4cG9ydGVkIGZvciB1bml0IHRlc3RpbmdcclxuICovXHJcbnZhciBkZXRlcm1pbmVMb2FkaW5nUGxhbnMgPSBmdW5jdGlvbiAobmF2aWdhdGlvbkluc3RydWN0aW9uLCBsb2FkaW5nUGxhbnMpIHtcclxuICAgIGlmIChsb2FkaW5nUGxhbnMgPT09IHZvaWQgMCkgeyBsb2FkaW5nUGxhbnMgPSBbXTsgfVxyXG4gICAgdmFyIHZpZXdQb3J0UGxhbnMgPSBuYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24ucGxhbjtcclxuICAgIGZvciAodmFyIHZpZXdQb3J0TmFtZSBpbiB2aWV3UG9ydFBsYW5zKSB7XHJcbiAgICAgICAgdmFyIHZpZXdQb3J0UGxhbiA9IHZpZXdQb3J0UGxhbnNbdmlld1BvcnROYW1lXTtcclxuICAgICAgICB2YXIgY2hpbGROYXZJbnN0cnVjdGlvbiA9IHZpZXdQb3J0UGxhbi5jaGlsZE5hdmlnYXRpb25JbnN0cnVjdGlvbjtcclxuICAgICAgICBpZiAodmlld1BvcnRQbGFuLnN0cmF0ZWd5ID09PSBcInJlcGxhY2VcIiAvKiBSZXBsYWNlICovKSB7XHJcbiAgICAgICAgICAgIGxvYWRpbmdQbGFucy5wdXNoKHsgdmlld1BvcnRQbGFuOiB2aWV3UG9ydFBsYW4sIG5hdmlnYXRpb25JbnN0cnVjdGlvbjogbmF2aWdhdGlvbkluc3RydWN0aW9uIH0pO1xyXG4gICAgICAgICAgICBpZiAoY2hpbGROYXZJbnN0cnVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgZGV0ZXJtaW5lTG9hZGluZ1BsYW5zKGNoaWxkTmF2SW5zdHJ1Y3Rpb24sIGxvYWRpbmdQbGFucyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciB2aWV3UG9ydEluc3RydWN0aW9uID0gbmF2aWdhdGlvbkluc3RydWN0aW9uLmFkZFZpZXdQb3J0SW5zdHJ1Y3Rpb24oe1xyXG4gICAgICAgICAgICAgICAgbmFtZTogdmlld1BvcnROYW1lLFxyXG4gICAgICAgICAgICAgICAgc3RyYXRlZ3k6IHZpZXdQb3J0UGxhbi5zdHJhdGVneSxcclxuICAgICAgICAgICAgICAgIG1vZHVsZUlkOiB2aWV3UG9ydFBsYW4ucHJldk1vZHVsZUlkLFxyXG4gICAgICAgICAgICAgICAgY29tcG9uZW50OiB2aWV3UG9ydFBsYW4ucHJldkNvbXBvbmVudFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKGNoaWxkTmF2SW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIHZpZXdQb3J0SW5zdHJ1Y3Rpb24uY2hpbGROYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24gPSBjaGlsZE5hdkluc3RydWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgZGV0ZXJtaW5lTG9hZGluZ1BsYW5zKGNoaWxkTmF2SW5zdHJ1Y3Rpb24sIGxvYWRpbmdQbGFucyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbG9hZGluZ1BsYW5zO1xyXG59O1xyXG4vKipcclxuICogQGludGVybmFsIEV4cG9ydGVkIGZvciB1bml0IHRlc3RpbmdcclxuICovXHJcbnZhciBsb2FkUm91dGUgPSBmdW5jdGlvbiAocm91dGVMb2FkZXIsIG5hdmlnYXRpb25JbnN0cnVjdGlvbiwgdmlld1BvcnRQbGFuKSB7XHJcbiAgICB2YXIgcGxhbkNvbmZpZyA9IHZpZXdQb3J0UGxhbi5jb25maWc7XHJcbiAgICB2YXIgbW9kdWxlSWQgPSBwbGFuQ29uZmlnID8gcGxhbkNvbmZpZy5tb2R1bGVJZCA6IG51bGw7XHJcbiAgICByZXR1cm4gbG9hZENvbXBvbmVudChyb3V0ZUxvYWRlciwgbmF2aWdhdGlvbkluc3RydWN0aW9uLCBwbGFuQ29uZmlnKVxyXG4gICAgICAgIC50aGVuKGZ1bmN0aW9uIChjb21wb25lbnQpIHtcclxuICAgICAgICB2YXIgdmlld1BvcnRJbnN0cnVjdGlvbiA9IG5hdmlnYXRpb25JbnN0cnVjdGlvbi5hZGRWaWV3UG9ydEluc3RydWN0aW9uKHtcclxuICAgICAgICAgICAgbmFtZTogdmlld1BvcnRQbGFuLm5hbWUsXHJcbiAgICAgICAgICAgIHN0cmF0ZWd5OiB2aWV3UG9ydFBsYW4uc3RyYXRlZ3ksXHJcbiAgICAgICAgICAgIG1vZHVsZUlkOiBtb2R1bGVJZCxcclxuICAgICAgICAgICAgY29tcG9uZW50OiBjb21wb25lbnRcclxuICAgICAgICB9KTtcclxuICAgICAgICB2YXIgY2hpbGRSb3V0ZXIgPSBjb21wb25lbnQuY2hpbGRSb3V0ZXI7XHJcbiAgICAgICAgaWYgKGNoaWxkUm91dGVyKSB7XHJcbiAgICAgICAgICAgIHZhciBwYXRoID0gbmF2aWdhdGlvbkluc3RydWN0aW9uLmdldFdpbGRjYXJkUGF0aCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gY2hpbGRSb3V0ZXJcclxuICAgICAgICAgICAgICAgIC5fY3JlYXRlTmF2aWdhdGlvbkluc3RydWN0aW9uKHBhdGgsIG5hdmlnYXRpb25JbnN0cnVjdGlvbilcclxuICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChjaGlsZEluc3RydWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB2aWV3UG9ydFBsYW4uY2hpbGROYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24gPSBjaGlsZEluc3RydWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9idWlsZE5hdmlnYXRpb25QbGFuKGNoaWxkSW5zdHJ1Y3Rpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGNoaWxkUGxhbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZFBsYW4gaW5zdGFuY2VvZiBSZWRpcmVjdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoY2hpbGRQbGFuKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRJbnN0cnVjdGlvbi5wbGFuID0gY2hpbGRQbGFuO1xyXG4gICAgICAgICAgICAgICAgICAgIHZpZXdQb3J0SW5zdHJ1Y3Rpb24uY2hpbGROYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24gPSBjaGlsZEluc3RydWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2FkTmV3Um91dGUocm91dGVMb2FkZXIsIGNoaWxkSW5zdHJ1Y3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyB0cyBjb21wbGFpbnMgd2l0aG91dCB0aGlzLCB0aG91Z2ggdGhleSBhcmUgc2FtZVxyXG4gICAgICAgIHJldHVybiB2b2lkIDA7XHJcbiAgICB9KTtcclxufTtcclxuLyoqXHJcbiAqIExvYWQgYSByb3V0ZWQtY29tcG9uZW50IGJhc2VkIG9uIG5hdmlnYXRpb24gaW5zdHJ1Y3Rpb24gYW5kIHJvdXRlIGNvbmZpZ1xyXG4gKiBAaW50ZXJuYWwgZXhwb3J0ZWQgZm9yIHVuaXQgdGVzdGluZyBvbmx5XHJcbiAqL1xyXG52YXIgbG9hZENvbXBvbmVudCA9IGZ1bmN0aW9uIChyb3V0ZUxvYWRlciwgbmF2aWdhdGlvbkluc3RydWN0aW9uLCBjb25maWcpIHtcclxuICAgIHZhciByb3V0ZXIgPSBuYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24ucm91dGVyO1xyXG4gICAgdmFyIGxpZmVjeWNsZUFyZ3MgPSBuYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24ubGlmZWN5Y2xlQXJncztcclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxyXG4gICAgICAgIC50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJvdXRlTG9hZGVyLmxvYWRSb3V0ZShyb3V0ZXIsIGNvbmZpZywgbmF2aWdhdGlvbkluc3RydWN0aW9uKTsgfSlcclxuICAgICAgICAudGhlbihcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIGNvbXBvbmVudCBhbiBvYmplY3QgY2FycnlpbmcgaW5mb3JtYXRpb24gYWJvdXQgbG9hZGVkIHJvdXRlXHJcbiAgICAgKiB0eXBpY2FsbHkgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdmlldyBtb2RlbCwgY2hpbGRDb250YWluZXIsIHZpZXcgYW5kIHJvdXRlclxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiAoY29tcG9uZW50KSB7XHJcbiAgICAgICAgdmFyIHZpZXdNb2RlbCA9IGNvbXBvbmVudC52aWV3TW9kZWwsIGNoaWxkQ29udGFpbmVyID0gY29tcG9uZW50LmNoaWxkQ29udGFpbmVyO1xyXG4gICAgICAgIGNvbXBvbmVudC5yb3V0ZXIgPSByb3V0ZXI7XHJcbiAgICAgICAgY29tcG9uZW50LmNvbmZpZyA9IGNvbmZpZztcclxuICAgICAgICBpZiAoJ2NvbmZpZ3VyZVJvdXRlcicgaW4gdmlld01vZGVsKSB7XHJcbiAgICAgICAgICAgIHZhciBjaGlsZFJvdXRlcl8xID0gY2hpbGRDb250YWluZXIuZ2V0Q2hpbGRSb3V0ZXIoKTtcclxuICAgICAgICAgICAgY29tcG9uZW50LmNoaWxkUm91dGVyID0gY2hpbGRSb3V0ZXJfMTtcclxuICAgICAgICAgICAgcmV0dXJuIGNoaWxkUm91dGVyXzFcclxuICAgICAgICAgICAgICAgIC5jb25maWd1cmUoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIHZpZXdNb2RlbC5jb25maWd1cmVSb3V0ZXIoYywgY2hpbGRSb3V0ZXJfMSwgbGlmZWN5Y2xlQXJnc1swXSwgbGlmZWN5Y2xlQXJnc1sxXSwgbGlmZWN5Y2xlQXJnc1syXSk7IH0pXHJcbiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiBjb21wb25lbnQ7IH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xyXG4gICAgfSk7XHJcbn07XG5cbi8qKlxyXG4gKiBBYnN0cmFjdCBjbGFzcyB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciBsb2FkaW5nIHZpZXcgLyB2aWV3IG1vZGVsIGZyb20gYSByb3V0ZSBjb25maWdcclxuICogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gY2FuIGJlIGZvdW5kIGluIGBhdXJlbGlhLXRlbXBsYXRpbmctcm91dGVyYFxyXG4gKi9cclxudmFyIFJvdXRlTG9hZGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gUm91dGVMb2FkZXIoKSB7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIExvYWQgYSByb3V0ZSBjb25maWcgYmFzZWQgb24gaXRzIHZpZXdtb2RlbCAvIHZpZXcgY29uZmlndXJhdGlvblxyXG4gICAgICovXHJcbiAgICAvLyByZXR1cm4gdHlwaW5nOiByZXR1cm4gdHlwaW5ncyB1c2VkIHRvIGJlIG5ldmVyXHJcbiAgICAvLyBhcyBpdCB3YXMgYSB0aHJvdy4gQ2hhbmdpbmcgaXQgdG8gUHJvbWlzZTxhbnk+IHNob3VsZCBub3QgY2F1c2UgYW55IGlzc3Vlc1xyXG4gICAgUm91dGVMb2FkZXIucHJvdG90eXBlLmxvYWRSb3V0ZSA9IGZ1bmN0aW9uIChyb3V0ZXIsIGNvbmZpZywgbmF2aWdhdGlvbkluc3RydWN0aW9uKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSb3V0ZSBsb2FkZXJzIG11c3QgaW1wbGVtZW50IFwibG9hZFJvdXRlKHJvdXRlciwgY29uZmlnLCBuYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24pXCIuJyk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIFJvdXRlTG9hZGVyO1xyXG59KCkpO1xuXG4vKipcclxuICogQSBwaXBlbGluZSBzdGVwIHJlc3BvbnNpYmxlIGZvciBsb2FkaW5nIGEgcm91dGUgY29uZmlnIG9mIGEgbmF2aWdhdGlvbiBpbnN0cnVjdGlvblxyXG4gKi9cclxudmFyIExvYWRSb3V0ZVN0ZXAgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBMb2FkUm91dGVTdGVwKHJvdXRlTG9hZGVyKSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZUxvYWRlciA9IHJvdXRlTG9hZGVyO1xyXG4gICAgfVxyXG4gICAgLyoqQGludGVybmFsICovXHJcbiAgICBMb2FkUm91dGVTdGVwLmluamVjdCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFtSb3V0ZUxvYWRlcl07IH07XHJcbiAgICAvKipcclxuICAgICAqIFJ1biB0aGUgaW50ZXJuYWwgdG8gbG9hZCByb3V0ZSBjb25maWcgb2YgYSBuYXZpZ2F0aW9uIGluc3RydWN0aW9uIHRvIHByZXBhcmUgZm9yIG5leHQgc3RlcHMgaW4gdGhlIHBpcGVsaW5lXHJcbiAgICAgKi9cclxuICAgIExvYWRSb3V0ZVN0ZXAucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uIChuYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24sIG5leHQpIHtcclxuICAgICAgICByZXR1cm4gbG9hZE5ld1JvdXRlKHRoaXMucm91dGVMb2FkZXIsIG5hdmlnYXRpb25JbnN0cnVjdGlvbilcclxuICAgICAgICAgICAgLnRoZW4obmV4dCwgbmV4dC5jYW5jZWwpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBMb2FkUm91dGVTdGVwO1xyXG59KCkpO1xuXG4vKipcclxuICogQSBwaXBlbGluZSBzdGVwIGZvciBpbnN0cnVjdGluZyBhIHBpZXBsaW5lIHRvIGNvbW1pdCBjaGFuZ2VzIG9uIGEgbmF2aWdhdGlvbiBpbnN0cnVjdGlvblxyXG4gKi9cclxudmFyIENvbW1pdENoYW5nZXNTdGVwID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gQ29tbWl0Q2hhbmdlc1N0ZXAoKSB7XHJcbiAgICB9XHJcbiAgICBDb21taXRDaGFuZ2VzU3RlcC5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKG5hdmlnYXRpb25JbnN0cnVjdGlvbiwgbmV4dCkge1xyXG4gICAgICAgIHJldHVybiBuYXZpZ2F0aW9uSW5zdHJ1Y3Rpb25cclxuICAgICAgICAgICAgLl9jb21taXRDaGFuZ2VzKC8qd2FpdCB0byBzd2FwPyovIHRydWUpXHJcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgbmF2aWdhdGlvbkluc3RydWN0aW9uLl91cGRhdGVUaXRsZSgpO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBDb21taXRDaGFuZ2VzU3RlcDtcclxufSgpKTtcblxuLyoqXHJcbiAqIEFuIG9wdGlvbmFsIGludGVyZmFjZSBkZXNjcmliaW5nIHRoZSBhdmFpbGFibGUgYWN0aXZhdGlvbiBzdHJhdGVnaWVzLlxyXG4gKiBAaW50ZXJuYWwgVXNlZCBpbnRlcm5hbGx5LlxyXG4gKi9cclxudmFyIEludGVybmFsQWN0aXZhdGlvblN0cmF0ZWd5O1xyXG4oZnVuY3Rpb24gKEludGVybmFsQWN0aXZhdGlvblN0cmF0ZWd5KSB7XHJcbiAgICAvKipcclxuICAgICAqIFJldXNlIHRoZSBleGlzdGluZyB2aWV3IG1vZGVsLCB3aXRob3V0IGludm9raW5nIFJvdXRlciBsaWZlY3ljbGUgaG9va3MuXHJcbiAgICAgKi9cclxuICAgIEludGVybmFsQWN0aXZhdGlvblN0cmF0ZWd5W1wiTm9DaGFuZ2VcIl0gPSBcIm5vLWNoYW5nZVwiO1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZXVzZSB0aGUgZXhpc3RpbmcgdmlldyBtb2RlbCwgaW52b2tpbmcgUm91dGVyIGxpZmVjeWNsZSBob29rcy5cclxuICAgICAqL1xyXG4gICAgSW50ZXJuYWxBY3RpdmF0aW9uU3RyYXRlZ3lbXCJJbnZva2VMaWZlY3ljbGVcIl0gPSBcImludm9rZS1saWZlY3ljbGVcIjtcclxuICAgIC8qKlxyXG4gICAgICogUmVwbGFjZSB0aGUgZXhpc3RpbmcgdmlldyBtb2RlbCwgaW52b2tpbmcgUm91dGVyIGxpZmVjeWNsZSBob29rcy5cclxuICAgICAqL1xyXG4gICAgSW50ZXJuYWxBY3RpdmF0aW9uU3RyYXRlZ3lbXCJSZXBsYWNlXCJdID0gXCJyZXBsYWNlXCI7XHJcbn0pKEludGVybmFsQWN0aXZhdGlvblN0cmF0ZWd5IHx8IChJbnRlcm5hbEFjdGl2YXRpb25TdHJhdGVneSA9IHt9KSk7XHJcbi8qKlxyXG4gKiBUaGUgc3RyYXRlZ3kgdG8gdXNlIHdoZW4gYWN0aXZhdGluZyBtb2R1bGVzIGR1cmluZyBuYXZpZ2F0aW9uLlxyXG4gKi9cclxuLy8ga2VwdCBmb3IgY29tcGF0IHJlYXNvblxyXG52YXIgYWN0aXZhdGlvblN0cmF0ZWd5ID0ge1xyXG4gICAgbm9DaGFuZ2U6IFwibm8tY2hhbmdlXCIgLyogTm9DaGFuZ2UgKi8sXHJcbiAgICBpbnZva2VMaWZlY3ljbGU6IFwiaW52b2tlLWxpZmVjeWNsZVwiIC8qIEludm9rZUxpZmVjeWNsZSAqLyxcclxuICAgIHJlcGxhY2U6IFwicmVwbGFjZVwiIC8qIFJlcGxhY2UgKi9cclxufTtcblxuLyoqXHJcbiAqIFJlY3Vyc2l2ZWx5IGZpbmQgbGlzdCBvZiBkZWFjdGl2YXRlLWFibGUgdmlldyBtb2RlbHNcclxuICogYW5kIGludm9rZSB0aGUgZWl0aGVyICdjYW5EZWFjdGl2YXRlJyBvciAnZGVhY3RpdmF0ZScgb24gZWFjaFxyXG4gKiBAaW50ZXJuYWwgZXhwb3J0ZWQgZm9yIHVuaXQgdGVzdGluZ1xyXG4gKi9cclxudmFyIHByb2Nlc3NEZWFjdGl2YXRhYmxlID0gZnVuY3Rpb24gKG5hdmlnYXRpb25JbnN0cnVjdGlvbiwgY2FsbGJhY2tOYW1lLCBuZXh0LCBpZ25vcmVSZXN1bHQpIHtcclxuICAgIHZhciBwbGFuID0gbmF2aWdhdGlvbkluc3RydWN0aW9uLnBsYW47XHJcbiAgICB2YXIgaW5mb3MgPSBmaW5kRGVhY3RpdmF0YWJsZShwbGFuLCBjYWxsYmFja05hbWUpO1xyXG4gICAgdmFyIGkgPSBpbmZvcy5sZW5ndGg7IC8vIHF1ZXJ5IGZyb20gaW5zaWRlIG91dFxyXG4gICAgZnVuY3Rpb24gaW5zcGVjdCh2YWwpIHtcclxuICAgICAgICBpZiAoaWdub3JlUmVzdWx0IHx8IHNob3VsZENvbnRpbnVlKHZhbCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5leHQuY2FuY2VsKHZhbCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBpdGVyYXRlKCkge1xyXG4gICAgICAgIGlmIChpLS0pIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHZhciB2aWV3TW9kZWwgPSBpbmZvc1tpXTtcclxuICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB2aWV3TW9kZWxbY2FsbGJhY2tOYW1lXShuYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb2Nlc3NQb3RlbnRpYWwocmVzdWx0LCBpbnNwZWN0LCBuZXh0LmNhbmNlbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dC5jYW5jZWwoZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG5hdmlnYXRpb25JbnN0cnVjdGlvbi5yb3V0ZXIuY291bGREZWFjdGl2YXRlID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gbmV4dCgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGl0ZXJhdGUoKTtcclxufTtcclxuLyoqXHJcbiAqIFJlY3Vyc2l2ZWx5IGZpbmQgYW5kIHJldHVybnMgYSBsaXN0IG9mIGRlYWN0aXZhdGUtYWJsZSB2aWV3IG1vZGVsc1xyXG4gKiBAaW50ZXJuYWwgZXhwb3J0ZWQgZm9yIHVuaXQgdGVzdGluZ1xyXG4gKi9cclxudmFyIGZpbmREZWFjdGl2YXRhYmxlID0gZnVuY3Rpb24gKHBsYW4sIGNhbGxiYWNrTmFtZSwgbGlzdCkge1xyXG4gICAgaWYgKGxpc3QgPT09IHZvaWQgMCkgeyBsaXN0ID0gW107IH1cclxuICAgIGZvciAodmFyIHZpZXdQb3J0TmFtZSBpbiBwbGFuKSB7XHJcbiAgICAgICAgdmFyIHZpZXdQb3J0UGxhbiA9IHBsYW5bdmlld1BvcnROYW1lXTtcclxuICAgICAgICB2YXIgcHJldkNvbXBvbmVudCA9IHZpZXdQb3J0UGxhbi5wcmV2Q29tcG9uZW50O1xyXG4gICAgICAgIGlmICgodmlld1BvcnRQbGFuLnN0cmF0ZWd5ID09PSBhY3RpdmF0aW9uU3RyYXRlZ3kuaW52b2tlTGlmZWN5Y2xlIHx8IHZpZXdQb3J0UGxhbi5zdHJhdGVneSA9PT0gYWN0aXZhdGlvblN0cmF0ZWd5LnJlcGxhY2UpXHJcbiAgICAgICAgICAgICYmIHByZXZDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgdmFyIHZpZXdNb2RlbCA9IHByZXZDb21wb25lbnQudmlld01vZGVsO1xyXG4gICAgICAgICAgICBpZiAoY2FsbGJhY2tOYW1lIGluIHZpZXdNb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgbGlzdC5wdXNoKHZpZXdNb2RlbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZpZXdQb3J0UGxhbi5zdHJhdGVneSA9PT0gYWN0aXZhdGlvblN0cmF0ZWd5LnJlcGxhY2UgJiYgcHJldkNvbXBvbmVudCkge1xyXG4gICAgICAgICAgICBhZGRQcmV2aW91c0RlYWN0aXZhdGFibGUocHJldkNvbXBvbmVudCwgY2FsbGJhY2tOYW1lLCBsaXN0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodmlld1BvcnRQbGFuLmNoaWxkTmF2aWdhdGlvbkluc3RydWN0aW9uKSB7XHJcbiAgICAgICAgICAgIGZpbmREZWFjdGl2YXRhYmxlKHZpZXdQb3J0UGxhbi5jaGlsZE5hdmlnYXRpb25JbnN0cnVjdGlvbi5wbGFuLCBjYWxsYmFja05hbWUsIGxpc3QpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBsaXN0O1xyXG59O1xyXG4vKipcclxuICogQGludGVybmFsIGV4cG9ydGVkIGZvciB1bml0IHRlc3RpbmdcclxuICovXHJcbnZhciBhZGRQcmV2aW91c0RlYWN0aXZhdGFibGUgPSBmdW5jdGlvbiAoY29tcG9uZW50LCBjYWxsYmFja05hbWUsIGxpc3QpIHtcclxuICAgIHZhciBjaGlsZFJvdXRlciA9IGNvbXBvbmVudC5jaGlsZFJvdXRlcjtcclxuICAgIGlmIChjaGlsZFJvdXRlciAmJiBjaGlsZFJvdXRlci5jdXJyZW50SW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICB2YXIgdmlld1BvcnRJbnN0cnVjdGlvbnMgPSBjaGlsZFJvdXRlci5jdXJyZW50SW5zdHJ1Y3Rpb24udmlld1BvcnRJbnN0cnVjdGlvbnM7XHJcbiAgICAgICAgZm9yICh2YXIgdmlld1BvcnROYW1lIGluIHZpZXdQb3J0SW5zdHJ1Y3Rpb25zKSB7XHJcbiAgICAgICAgICAgIHZhciB2aWV3UG9ydEluc3RydWN0aW9uID0gdmlld1BvcnRJbnN0cnVjdGlvbnNbdmlld1BvcnROYW1lXTtcclxuICAgICAgICAgICAgdmFyIHByZXZDb21wb25lbnQgPSB2aWV3UG9ydEluc3RydWN0aW9uLmNvbXBvbmVudDtcclxuICAgICAgICAgICAgdmFyIHByZXZWaWV3TW9kZWwgPSBwcmV2Q29tcG9uZW50LnZpZXdNb2RlbDtcclxuICAgICAgICAgICAgaWYgKGNhbGxiYWNrTmFtZSBpbiBwcmV2Vmlld01vZGVsKSB7XHJcbiAgICAgICAgICAgICAgICBsaXN0LnB1c2gocHJldlZpZXdNb2RlbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYWRkUHJldmlvdXNEZWFjdGl2YXRhYmxlKHByZXZDb21wb25lbnQsIGNhbGxiYWNrTmFtZSwgbGlzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG4vKipcclxuICogQGludGVybmFsIGV4cG9ydGVkIGZvciB1bml0IHRlc3RpbmdcclxuICovXHJcbnZhciBwcm9jZXNzQWN0aXZhdGFibGUgPSBmdW5jdGlvbiAobmF2aWdhdGlvbkluc3RydWN0aW9uLCBjYWxsYmFja05hbWUsIG5leHQsIGlnbm9yZVJlc3VsdCkge1xyXG4gICAgdmFyIGluZm9zID0gZmluZEFjdGl2YXRhYmxlKG5hdmlnYXRpb25JbnN0cnVjdGlvbiwgY2FsbGJhY2tOYW1lKTtcclxuICAgIHZhciBsZW5ndGggPSBpbmZvcy5sZW5ndGg7XHJcbiAgICB2YXIgaSA9IC0xOyAvLyBxdWVyeSBmcm9tIHRvcCBkb3duXHJcbiAgICBmdW5jdGlvbiBpbnNwZWN0KHZhbCwgcm91dGVyKSB7XHJcbiAgICAgICAgaWYgKGlnbm9yZVJlc3VsdCB8fCBzaG91bGRDb250aW51ZSh2YWwsIHJvdXRlcikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5leHQuY2FuY2VsKHZhbCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBpdGVyYXRlKCkge1xyXG4gICAgICAgIHZhciBfYTtcclxuICAgICAgICBpKys7XHJcbiAgICAgICAgaWYgKGkgPCBsZW5ndGgpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHZhciBjdXJyZW50XzEgPSBpbmZvc1tpXTtcclxuICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSAoX2EgPSBjdXJyZW50XzEudmlld01vZGVsKVtjYWxsYmFja05hbWVdLmFwcGx5KF9hLCBjdXJyZW50XzEubGlmZWN5Y2xlQXJncyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvY2Vzc1BvdGVudGlhbChyZXN1bHQsIGZ1bmN0aW9uICh2YWwpIHsgcmV0dXJuIGluc3BlY3QodmFsLCBjdXJyZW50XzEucm91dGVyKTsgfSwgbmV4dC5jYW5jZWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5leHQuY2FuY2VsKGVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV4dCgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGl0ZXJhdGUoKTtcclxufTtcclxuLyoqXHJcbiAqIEZpbmQgbGlzdCBvZiBhY3RpdmF0YWJsZSB2aWV3IG1vZGVsIGFuZCBhZGQgdG8gbGlzdCAoM3JkIHBhcmFtZXRlcilcclxuICogQGludGVybmFsIGV4cG9ydGVkIGZvciB1bml0IHRlc3RpbmdcclxuICovXHJcbnZhciBmaW5kQWN0aXZhdGFibGUgPSBmdW5jdGlvbiAobmF2aWdhdGlvbkluc3RydWN0aW9uLCBjYWxsYmFja05hbWUsIGxpc3QsIHJvdXRlcikge1xyXG4gICAgaWYgKGxpc3QgPT09IHZvaWQgMCkgeyBsaXN0ID0gW107IH1cclxuICAgIHZhciBwbGFuID0gbmF2aWdhdGlvbkluc3RydWN0aW9uLnBsYW47XHJcbiAgICBPYmplY3RcclxuICAgICAgICAua2V5cyhwbGFuKVxyXG4gICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uICh2aWV3UG9ydE5hbWUpIHtcclxuICAgICAgICB2YXIgdmlld1BvcnRQbGFuID0gcGxhblt2aWV3UG9ydE5hbWVdO1xyXG4gICAgICAgIHZhciB2aWV3UG9ydEluc3RydWN0aW9uID0gbmF2aWdhdGlvbkluc3RydWN0aW9uLnZpZXdQb3J0SW5zdHJ1Y3Rpb25zW3ZpZXdQb3J0TmFtZV07XHJcbiAgICAgICAgdmFyIHZpZXdQb3J0Q29tcG9uZW50ID0gdmlld1BvcnRJbnN0cnVjdGlvbi5jb21wb25lbnQ7XHJcbiAgICAgICAgdmFyIHZpZXdNb2RlbCA9IHZpZXdQb3J0Q29tcG9uZW50LnZpZXdNb2RlbDtcclxuICAgICAgICBpZiAoKHZpZXdQb3J0UGxhbi5zdHJhdGVneSA9PT0gYWN0aXZhdGlvblN0cmF0ZWd5Lmludm9rZUxpZmVjeWNsZVxyXG4gICAgICAgICAgICB8fCB2aWV3UG9ydFBsYW4uc3RyYXRlZ3kgPT09IGFjdGl2YXRpb25TdHJhdGVneS5yZXBsYWNlKVxyXG4gICAgICAgICAgICAmJiBjYWxsYmFja05hbWUgaW4gdmlld01vZGVsKSB7XHJcbiAgICAgICAgICAgIGxpc3QucHVzaCh7XHJcbiAgICAgICAgICAgICAgICB2aWV3TW9kZWw6IHZpZXdNb2RlbCxcclxuICAgICAgICAgICAgICAgIGxpZmVjeWNsZUFyZ3M6IHZpZXdQb3J0SW5zdHJ1Y3Rpb24ubGlmZWN5Y2xlQXJncyxcclxuICAgICAgICAgICAgICAgIHJvdXRlcjogcm91dGVyXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgY2hpbGROYXZJbnN0cnVjdGlvbiA9IHZpZXdQb3J0UGxhbi5jaGlsZE5hdmlnYXRpb25JbnN0cnVjdGlvbjtcclxuICAgICAgICBpZiAoY2hpbGROYXZJbnN0cnVjdGlvbikge1xyXG4gICAgICAgICAgICBmaW5kQWN0aXZhdGFibGUoY2hpbGROYXZJbnN0cnVjdGlvbiwgY2FsbGJhY2tOYW1lLCBsaXN0LCB2aWV3UG9ydENvbXBvbmVudC5jaGlsZFJvdXRlciB8fCByb3V0ZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGxpc3Q7XHJcbn07XHJcbnZhciBzaG91bGRDb250aW51ZSA9IGZ1bmN0aW9uIChvdXRwdXQsIHJvdXRlcikge1xyXG4gICAgaWYgKG91dHB1dCBpbnN0YW5jZW9mIEVycm9yKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzTmF2aWdhdGlvbkNvbW1hbmQob3V0cHV0KSkge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygb3V0cHV0LnNldFJvdXRlciA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICBvdXRwdXQuc2V0Um91dGVyKHJvdXRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAhIW91dHB1dC5zaG91bGRDb250aW51ZVByb2Nlc3Npbmc7XHJcbiAgICB9XHJcbiAgICBpZiAob3V0cHV0ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBvdXRwdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiB3cmFwcyBhIHN1YnNjcmlwdGlvbiwgYWxsb3dpbmcgdW5zdWJzY3JpYmUgY2FsbHMgZXZlbiBpZlxyXG4gKiB0aGUgZmlyc3QgdmFsdWUgY29tZXMgc3luY2hyb25vdXNseVxyXG4gKi9cclxudmFyIFNhZmVTdWJzY3JpcHRpb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBTYWZlU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbkZ1bmMpIHtcclxuICAgICAgICB0aGlzLl9zdWJzY3JpYmVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb24gPSBzdWJzY3JpcHRpb25GdW5jKHRoaXMpO1xyXG4gICAgICAgIGlmICghdGhpcy5fc3Vic2NyaWJlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNhZmVTdWJzY3JpcHRpb24ucHJvdG90eXBlLCBcInN1YnNjcmliZWRcIiwge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlZDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXHJcbiAgICB9KTtcclxuICAgIFNhZmVTdWJzY3JpcHRpb24ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9zdWJzY3JpYmVkICYmIHRoaXMuX3N1YnNjcmlwdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fc3Vic2NyaWJlZCA9IGZhbHNlO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBTYWZlU3Vic2NyaXB0aW9uO1xyXG59KCkpO1xyXG4vKipcclxuICogQSBmdW5jdGlvbiB0byBwcm9jZXNzIHJldHVybiB2YWx1ZSBmcm9tIGBhY3RpdmF0ZWAvYGNhbkFjdGl2YXRlYCBzdGVwc1xyXG4gKiBTdXBwb3J0cyBvYnNlcnZhYmxlL3Byb21pc2VcclxuICpcclxuICogRm9yIG9ic2VydmFibGUsIHJlc29sdmUgYXQgZmlyc3QgbmV4dCgpIG9yIG9uIGNvbXBsZXRlKClcclxuICovXHJcbnZhciBwcm9jZXNzUG90ZW50aWFsID0gZnVuY3Rpb24gKG9iaiwgcmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAvLyBpZiBwcm9taXNlIGxpa2VcclxuICAgIGlmIChvYmogJiYgdHlwZW9mIG9iai50aGVuID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShvYmopLnRoZW4ocmVzb2x2ZSkuY2F0Y2gocmVqZWN0KTtcclxuICAgIH1cclxuICAgIC8vIGlmIG9ic2VydmFibGVcclxuICAgIGlmIChvYmogJiYgdHlwZW9mIG9iai5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICB2YXIgb2JzXzEgPSBvYmo7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBTYWZlU3Vic2NyaXB0aW9uKGZ1bmN0aW9uIChzdWIpIHsgcmV0dXJuIG9ic18xLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzdWIuc3Vic2NyaWJlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUob2JqKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHN1Yi5zdWJzY3JpYmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzdWIuc3Vic2NyaWJlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUob2JqKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pOyB9KTtcclxuICAgIH1cclxuICAgIC8vIGVsc2UganVzdCByZXNvbHZlXHJcbiAgICB0cnkge1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlKG9iaik7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcclxuICAgIH1cclxufTtcblxuLyoqXHJcbiAqIEEgcGlwZWxpbmUgc3RlcCByZXNwb25zaWJsZSBmb3IgZmluZGluZyBhbmQgYWN0aXZhdGluZyBtZXRob2QgYGNhbkRlYWN0aXZhdGVgIG9uIGEgdmlldyBtb2RlbCBvZiBhIHJvdXRlXHJcbiAqL1xyXG52YXIgQ2FuRGVhY3RpdmF0ZVByZXZpb3VzU3RlcCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIENhbkRlYWN0aXZhdGVQcmV2aW91c1N0ZXAoKSB7XHJcbiAgICB9XHJcbiAgICBDYW5EZWFjdGl2YXRlUHJldmlvdXNTdGVwLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAobmF2aWdhdGlvbkluc3RydWN0aW9uLCBuZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHByb2Nlc3NEZWFjdGl2YXRhYmxlKG5hdmlnYXRpb25JbnN0cnVjdGlvbiwgJ2NhbkRlYWN0aXZhdGUnLCBuZXh0KTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gQ2FuRGVhY3RpdmF0ZVByZXZpb3VzU3RlcDtcclxufSgpKTtcclxuLyoqXHJcbiAqIEEgcGlwZWxpbmUgc3RlcCByZXNwb25zaWJsZSBmb3IgZmluZGluZyBhbmQgYWN0aXZhdGluZyBtZXRob2QgYGNhbkFjdGl2YXRlYCBvbiBhIHZpZXcgbW9kZWwgb2YgYSByb3V0ZVxyXG4gKi9cclxudmFyIENhbkFjdGl2YXRlTmV4dFN0ZXAgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBDYW5BY3RpdmF0ZU5leHRTdGVwKCkge1xyXG4gICAgfVxyXG4gICAgQ2FuQWN0aXZhdGVOZXh0U3RlcC5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKG5hdmlnYXRpb25JbnN0cnVjdGlvbiwgbmV4dCkge1xyXG4gICAgICAgIHJldHVybiBwcm9jZXNzQWN0aXZhdGFibGUobmF2aWdhdGlvbkluc3RydWN0aW9uLCAnY2FuQWN0aXZhdGUnLCBuZXh0KTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gQ2FuQWN0aXZhdGVOZXh0U3RlcDtcclxufSgpKTtcclxuLyoqXHJcbiAqIEEgcGlwZWxpbmUgc3RlcCByZXNwb25zaWJsZSBmb3IgZmluZGluZyBhbmQgYWN0aXZhdGluZyBtZXRob2QgYGRlYWN0aXZhdGVgIG9uIGEgdmlldyBtb2RlbCBvZiBhIHJvdXRlXHJcbiAqL1xyXG52YXIgRGVhY3RpdmF0ZVByZXZpb3VzU3RlcCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIERlYWN0aXZhdGVQcmV2aW91c1N0ZXAoKSB7XHJcbiAgICB9XHJcbiAgICBEZWFjdGl2YXRlUHJldmlvdXNTdGVwLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAobmF2aWdhdGlvbkluc3RydWN0aW9uLCBuZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHByb2Nlc3NEZWFjdGl2YXRhYmxlKG5hdmlnYXRpb25JbnN0cnVjdGlvbiwgJ2RlYWN0aXZhdGUnLCBuZXh0LCB0cnVlKTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gRGVhY3RpdmF0ZVByZXZpb3VzU3RlcDtcclxufSgpKTtcclxuLyoqXHJcbiAqIEEgcGlwZWxpbmUgc3RlcCByZXNwb25zaWJsZSBmb3IgZmluZGluZyBhbmQgYWN0aXZhdGluZyBtZXRob2QgYGFjdGl2YXRlYCBvbiBhIHZpZXcgbW9kZWwgb2YgYSByb3V0ZVxyXG4gKi9cclxudmFyIEFjdGl2YXRlTmV4dFN0ZXAgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBBY3RpdmF0ZU5leHRTdGVwKCkge1xyXG4gICAgfVxyXG4gICAgQWN0aXZhdGVOZXh0U3RlcC5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKG5hdmlnYXRpb25JbnN0cnVjdGlvbiwgbmV4dCkge1xyXG4gICAgICAgIHJldHVybiBwcm9jZXNzQWN0aXZhdGFibGUobmF2aWdhdGlvbkluc3RydWN0aW9uLCAnYWN0aXZhdGUnLCBuZXh0LCB0cnVlKTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gQWN0aXZhdGVOZXh0U3RlcDtcclxufSgpKTtcblxuLyoqXHJcbiAqIEEgbXVsdGktc2xvdHMgUGlwZWxpbmUgUGxhY2Vob2xkZXIgU3RlcCBmb3IgaG9va2luZyBpbnRvIGEgcGlwZWxpbmUgZXhlY3V0aW9uXHJcbiAqL1xyXG52YXIgUGlwZWxpbmVTbG90ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gUGlwZWxpbmVTbG90KGNvbnRhaW5lciwgbmFtZSwgYWxpYXMpIHtcclxuICAgICAgICB0aGlzLnN0ZXBzID0gW107XHJcbiAgICAgICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XHJcbiAgICAgICAgdGhpcy5zbG90TmFtZSA9IG5hbWU7XHJcbiAgICAgICAgdGhpcy5zbG90QWxpYXMgPSBhbGlhcztcclxuICAgIH1cclxuICAgIFBpcGVsaW5lU2xvdC5wcm90b3R5cGUuZ2V0U3RlcHMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGVwcy5tYXAoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIF90aGlzLmNvbnRhaW5lci5nZXQoeCk7IH0pO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBQaXBlbGluZVNsb3Q7XHJcbn0oKSk7XHJcbi8qKlxyXG4gKiBDbGFzcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgdGhlIG5hdmlnYXRpb24gcGlwZWxpbmUuXHJcbiAqL1xyXG52YXIgUGlwZWxpbmVQcm92aWRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIFBpcGVsaW5lUHJvdmlkZXIoY29udGFpbmVyKSB7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XHJcbiAgICAgICAgdGhpcy5zdGVwcyA9IFtcclxuICAgICAgICAgICAgQnVpbGROYXZpZ2F0aW9uUGxhblN0ZXAsXHJcbiAgICAgICAgICAgIENhbkRlYWN0aXZhdGVQcmV2aW91c1N0ZXAsXHJcbiAgICAgICAgICAgIExvYWRSb3V0ZVN0ZXAsXHJcbiAgICAgICAgICAgIGNyZWF0ZVBpcGVsaW5lU2xvdChjb250YWluZXIsIFwiYXV0aG9yaXplXCIgLyogQXV0aG9yaXplICovKSxcclxuICAgICAgICAgICAgQ2FuQWN0aXZhdGVOZXh0U3RlcCxcclxuICAgICAgICAgICAgY3JlYXRlUGlwZWxpbmVTbG90KGNvbnRhaW5lciwgXCJwcmVBY3RpdmF0ZVwiIC8qIFByZUFjdGl2YXRlICovLCAnbW9kZWxiaW5kJyksXHJcbiAgICAgICAgICAgIC8vIE5PVEU6IGFwcCBzdGF0ZSBjaGFuZ2VzIHN0YXJ0IGJlbG93IC0gcG9pbnQgb2Ygbm8gcmV0dXJuXHJcbiAgICAgICAgICAgIERlYWN0aXZhdGVQcmV2aW91c1N0ZXAsXHJcbiAgICAgICAgICAgIEFjdGl2YXRlTmV4dFN0ZXAsXHJcbiAgICAgICAgICAgIGNyZWF0ZVBpcGVsaW5lU2xvdChjb250YWluZXIsIFwicHJlUmVuZGVyXCIgLyogUHJlUmVuZGVyICovLCAncHJlY29tbWl0JyksXHJcbiAgICAgICAgICAgIENvbW1pdENoYW5nZXNTdGVwLFxyXG4gICAgICAgICAgICBjcmVhdGVQaXBlbGluZVNsb3QoY29udGFpbmVyLCBcInBvc3RSZW5kZXJcIiAvKiBQb3N0UmVuZGVyICovLCAncG9zdGNvbXBsZXRlJylcclxuICAgICAgICBdO1xyXG4gICAgfVxyXG4gICAgLyoqQGludGVybmFsICovXHJcbiAgICBQaXBlbGluZVByb3ZpZGVyLmluamVjdCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFtDb250YWluZXJdOyB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGUgdGhlIG5hdmlnYXRpb24gcGlwZWxpbmUuXHJcbiAgICAgKi9cclxuICAgIFBpcGVsaW5lUHJvdmlkZXIucHJvdG90eXBlLmNyZWF0ZVBpcGVsaW5lID0gZnVuY3Rpb24gKHVzZUNhbkRlYWN0aXZhdGVTdGVwKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICBpZiAodXNlQ2FuRGVhY3RpdmF0ZVN0ZXAgPT09IHZvaWQgMCkgeyB1c2VDYW5EZWFjdGl2YXRlU3RlcCA9IHRydWU7IH1cclxuICAgICAgICB2YXIgcGlwZWxpbmUgPSBuZXcgUGlwZWxpbmUoKTtcclxuICAgICAgICB0aGlzLnN0ZXBzLmZvckVhY2goZnVuY3Rpb24gKHN0ZXApIHtcclxuICAgICAgICAgICAgaWYgKHVzZUNhbkRlYWN0aXZhdGVTdGVwIHx8IHN0ZXAgIT09IENhbkRlYWN0aXZhdGVQcmV2aW91c1N0ZXApIHtcclxuICAgICAgICAgICAgICAgIHBpcGVsaW5lLmFkZFN0ZXAoX3RoaXMuY29udGFpbmVyLmdldChzdGVwKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcGlwZWxpbmU7XHJcbiAgICB9O1xyXG4gICAgLyoqQGludGVybmFsICovXHJcbiAgICBQaXBlbGluZVByb3ZpZGVyLnByb3RvdHlwZS5fZmluZFN0ZXAgPSBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIC8vIFN0ZXBzIHRoYXQgYXJlIG5vdCBQaXBlbGluZVNsb3RzIGFyZSBjb25zdHJ1Y3RvciBmdW5jdGlvbnMsIGFuZCB0aGV5IHdpbGwgYXV0b21hdGljYWxseSBmYWlsLiBQcm9iYWJseS5cclxuICAgICAgICByZXR1cm4gdGhpcy5zdGVwcy5maW5kKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LnNsb3ROYW1lID09PSBuYW1lIHx8IHguc2xvdEFsaWFzID09PSBuYW1lOyB9KTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYSBzdGVwIGludG8gdGhlIHBpcGVsaW5lIGF0IGEga25vd24gc2xvdCBsb2NhdGlvbi5cclxuICAgICAqL1xyXG4gICAgUGlwZWxpbmVQcm92aWRlci5wcm90b3R5cGUuYWRkU3RlcCA9IGZ1bmN0aW9uIChuYW1lLCBzdGVwKSB7XHJcbiAgICAgICAgdmFyIGZvdW5kID0gdGhpcy5fZmluZFN0ZXAobmFtZSk7XHJcbiAgICAgICAgaWYgKGZvdW5kKSB7XHJcbiAgICAgICAgICAgIHZhciBzbG90U3RlcHMgPSBmb3VuZC5zdGVwcztcclxuICAgICAgICAgICAgLy8gcHJldmVudCBkdXBsaWNhdGVzXHJcbiAgICAgICAgICAgIGlmICghc2xvdFN0ZXBzLmluY2x1ZGVzKHN0ZXApKSB7XHJcbiAgICAgICAgICAgICAgICBzbG90U3RlcHMucHVzaChzdGVwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBwaXBlbGluZSBzbG90IG5hbWU6IFwiICsgbmFtZSArIFwiLlwiKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIGEgc3RlcCBmcm9tIGEgc2xvdCBpbiB0aGUgcGlwZWxpbmVcclxuICAgICAqL1xyXG4gICAgUGlwZWxpbmVQcm92aWRlci5wcm90b3R5cGUucmVtb3ZlU3RlcCA9IGZ1bmN0aW9uIChuYW1lLCBzdGVwKSB7XHJcbiAgICAgICAgdmFyIHNsb3QgPSB0aGlzLl9maW5kU3RlcChuYW1lKTtcclxuICAgICAgICBpZiAoc2xvdCkge1xyXG4gICAgICAgICAgICB2YXIgc2xvdFN0ZXBzID0gc2xvdC5zdGVwcztcclxuICAgICAgICAgICAgc2xvdFN0ZXBzLnNwbGljZShzbG90U3RlcHMuaW5kZXhPZihzdGVwKSwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogQ2xlYXJzIGFsbCBzdGVwcyBmcm9tIGEgc2xvdCBpbiB0aGUgcGlwZWxpbmVcclxuICAgICAqIEBpbnRlcm5hbFxyXG4gICAgICovXHJcbiAgICBQaXBlbGluZVByb3ZpZGVyLnByb3RvdHlwZS5fY2xlYXJTdGVwcyA9IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgaWYgKG5hbWUgPT09IHZvaWQgMCkgeyBuYW1lID0gJyc7IH1cclxuICAgICAgICB2YXIgc2xvdCA9IHRoaXMuX2ZpbmRTdGVwKG5hbWUpO1xyXG4gICAgICAgIGlmIChzbG90KSB7XHJcbiAgICAgICAgICAgIHNsb3Quc3RlcHMgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZXNldHMgYWxsIHBpcGVsaW5lIHNsb3RzXHJcbiAgICAgKi9cclxuICAgIFBpcGVsaW5lUHJvdmlkZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX2NsZWFyU3RlcHMoXCJhdXRob3JpemVcIiAvKiBBdXRob3JpemUgKi8pO1xyXG4gICAgICAgIHRoaXMuX2NsZWFyU3RlcHMoXCJwcmVBY3RpdmF0ZVwiIC8qIFByZUFjdGl2YXRlICovKTtcclxuICAgICAgICB0aGlzLl9jbGVhclN0ZXBzKFwicHJlUmVuZGVyXCIgLyogUHJlUmVuZGVyICovKTtcclxuICAgICAgICB0aGlzLl9jbGVhclN0ZXBzKFwicG9zdFJlbmRlclwiIC8qIFBvc3RSZW5kZXIgKi8pO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBQaXBlbGluZVByb3ZpZGVyO1xyXG59KCkpO1xyXG4vKipAaW50ZXJuYWwgKi9cclxudmFyIGNyZWF0ZVBpcGVsaW5lU2xvdCA9IGZ1bmN0aW9uIChjb250YWluZXIsIG5hbWUsIGFsaWFzKSB7XHJcbiAgICByZXR1cm4gbmV3IFBpcGVsaW5lU2xvdChjb250YWluZXIsIG5hbWUsIGFsaWFzKTtcclxufTtcblxudmFyIGxvZ2dlciA9IGdldExvZ2dlcignYXBwLXJvdXRlcicpO1xyXG4vKipcclxuICogVGhlIG1haW4gYXBwbGljYXRpb24gcm91dGVyLlxyXG4gKi9cclxudmFyIEFwcFJvdXRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcclxuICAgIF9fZXh0ZW5kcyhBcHBSb3V0ZXIsIF9zdXBlcik7XHJcbiAgICBmdW5jdGlvbiBBcHBSb3V0ZXIoY29udGFpbmVyLCBoaXN0b3J5LCBwaXBlbGluZVByb3ZpZGVyLCBldmVudHMpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBjb250YWluZXIsIGhpc3RvcnkpIHx8IHRoaXM7XHJcbiAgICAgICAgX3RoaXMucGlwZWxpbmVQcm92aWRlciA9IHBpcGVsaW5lUHJvdmlkZXI7XHJcbiAgICAgICAgX3RoaXMuZXZlbnRzID0gZXZlbnRzO1xyXG4gICAgICAgIHJldHVybiBfdGhpcztcclxuICAgIH1cclxuICAgIC8qKkBpbnRlcm5hbCAqL1xyXG4gICAgQXBwUm91dGVyLmluamVjdCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFtDb250YWluZXIsIEhpc3RvcnksIFBpcGVsaW5lUHJvdmlkZXIsIEV2ZW50QWdncmVnYXRvcl07IH07XHJcbiAgICAvKipcclxuICAgICAqIEZ1bGx5IHJlc2V0cyB0aGUgcm91dGVyJ3MgaW50ZXJuYWwgc3RhdGUuIFByaW1hcmlseSB1c2VkIGludGVybmFsbHkgYnkgdGhlIGZyYW1ld29yayB3aGVuIG11bHRpcGxlIGNhbGxzIHRvIHNldFJvb3QgYXJlIG1hZGUuXHJcbiAgICAgKiBVc2Ugd2l0aCBjYXV0aW9uIChhY3R1YWxseSwgYXZvaWQgdXNpbmcgdGhpcykuIERvIG5vdCB1c2UgdGhpcyB0byBzaW1wbHkgY2hhbmdlIHlvdXIgbmF2aWdhdGlvbiBtb2RlbC5cclxuICAgICAqL1xyXG4gICAgQXBwUm91dGVyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBfc3VwZXIucHJvdG90eXBlLnJlc2V0LmNhbGwodGhpcyk7XHJcbiAgICAgICAgdGhpcy5tYXhJbnN0cnVjdGlvbkNvdW50ID0gMTA7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9xdWV1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9xdWV1ZSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fcXVldWUubGVuZ3RoID0gMDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBMb2FkcyB0aGUgc3BlY2lmaWVkIFVSTC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdXJsIFRoZSBVUkwgZnJhZ21lbnQgdG8gbG9hZC5cclxuICAgICAqL1xyXG4gICAgQXBwUm91dGVyLnByb3RvdHlwZS5sb2FkVXJsID0gZnVuY3Rpb24gKHVybCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgICAgICAgICAgLl9jcmVhdGVOYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24odXJsKVxyXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoaW5zdHJ1Y3Rpb24pIHsgcmV0dXJuIF90aGlzLl9xdWV1ZUluc3RydWN0aW9uKGluc3RydWN0aW9uKTsgfSlcclxuICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICByZXN0b3JlUHJldmlvdXNMb2NhdGlvbihfdGhpcyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZWdpc3RlcnMgYSB2aWV3UG9ydCB0byBiZSB1c2VkIGFzIGEgcmVuZGVyaW5nIHRhcmdldCBmb3IgYWN0aXZhdGVkIHJvdXRlcy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmlld1BvcnQgVGhlIHZpZXdQb3J0LiBUaGlzIGlzIHR5cGljYWxseSBhIDxyb3V0ZXItdmlldy8+IGVsZW1lbnQgaW4gQXVyZWxpYSBkZWZhdWx0IGltcGxcclxuICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSB2aWV3UG9ydC4gJ2RlZmF1bHQnIGlmIHVuc3BlY2lmaWVkLlxyXG4gICAgICovXHJcbiAgICBBcHBSb3V0ZXIucHJvdG90eXBlLnJlZ2lzdGVyVmlld1BvcnQgPSBmdW5jdGlvbiAodmlld1BvcnQsIG5hbWUpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIC8vIGhhdmluZyBzdHJvbmcgdHlwaW5nIHdpdGhvdXQgY2hhbmdpbmcgcHVibGljIEFQSVxyXG4gICAgICAgIHZhciAkdmlld1BvcnQgPSB2aWV3UG9ydDtcclxuICAgICAgICBfc3VwZXIucHJvdG90eXBlLnJlZ2lzdGVyVmlld1BvcnQuY2FsbCh0aGlzLCAkdmlld1BvcnQsIG5hbWUpO1xyXG4gICAgICAgIC8vIGJlc2lkZSBhZGRpbmcgdmlld3BvcnQgdG8gdGhlIHJlZ2lzdHJ5IG9mIHRoaXMgaW5zdGFuY2VcclxuICAgICAgICAvLyBBcHBSb3V0ZXIgYWxzbyBjb25maWd1cmUgcm91dGluZy9oaXN0b3J5IHRvIHN0YXJ0IHJvdXRpbmcgZnVuY3Rpb25hbGl0eVxyXG4gICAgICAgIC8vIFRoZXJlIGFyZSBzaXR1YXRpb24gd2hlcmUgdGhlcmUgYXJlIG1vcmUgdGhhbiAxIDxyb3V0ZXItdmlldy8+IGVsZW1lbnQgYXQgcm9vdCB2aWV3XHJcbiAgICAgICAgLy8gaW4gdGhhdCBjYXNlLCBzdGlsbCBvbmx5IGFjdGl2YXRlIG9uY2UgdmlhIHRoZSBmb2xsb3dpbmcgZ3VhcmRcclxuICAgICAgICBpZiAoIXRoaXMuaXNBY3RpdmUpIHtcclxuICAgICAgICAgICAgdmFyIHZpZXdNb2RlbF8xID0gdGhpcy5fZmluZFZpZXdNb2RlbCgkdmlld1BvcnQpO1xyXG4gICAgICAgICAgICBpZiAoJ2NvbmZpZ3VyZVJvdXRlcicgaW4gdmlld01vZGVsXzEpIHtcclxuICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIDxyb3V0ZXItdmlldy8+IGVsZW1lbnQgYXQgcm9vdCB2aWV3XHJcbiAgICAgICAgICAgICAgICAvLyB1c2UgdGhpcyBmbGFnIHRvIGd1YXJkIGFnYWluc3QgY29uZmlndXJlIG1ldGhvZCBiZWluZyBpbnZva2VkIG11bHRpcGxlIHRpbWVzXHJcbiAgICAgICAgICAgICAgICAvLyB0aGlzIGZsYWcgaXMgc2V0IGluc2lkZSBtZXRob2QgY29uZmlndXJlXHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNDb25maWd1cmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVwbGFjZSB0aGUgcmVhbCByZXNvbHZlIHdpdGggYSBub29wIHRvIGd1YXJhbnRlZSB0aGF0IGFueSBhY3Rpb24gaW4gYmFzZSBjbGFzcyBSb3V0ZXJcclxuICAgICAgICAgICAgICAgICAgICAvLyB3b24ndCByZXNvbHZlIHRoZSBjb25maWd1cmVQcm9taXNlIHByZW1hdHVyZWx5XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDb25maWd1cmVkUHJvbWlzZV8xID0gdGhpcy5fcmVzb2x2ZUNvbmZpZ3VyZWRQcm9taXNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Jlc29sdmVDb25maWd1cmVkUHJvbWlzZSA9IGZ1bmN0aW9uICgpIHsgfTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuY29uZmlndXJlKGZ1bmN0aW9uIChjb25maWcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXNvbHZlKHZpZXdNb2RlbF8xLmNvbmZpZ3VyZVJvdXRlcihjb25maWcsIF90aGlzKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuIGlzc3VlIHdpdGggY29uZmlndXJlIGludGVyZmFjZS4gU2hvdWxkIGJlIGZpeGVkIHRoZXJlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0b2RvOiBmaXggdGhpcyB2aWEgY29uZmlndXJlIGludGVyZmFjZSBpbiByb3V0ZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbmZpZzsgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5hY3RpdmF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlQ29uZmlndXJlZFByb21pc2VfMSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHdoZW4gYSB2aWV3cG9ydCBpcyBhZGRlZCBkeW5hbWljYWxseSB0byBhIHJvb3QgdmlldyB0aGF0IGlzIGFscmVhZHkgYWN0aXZhdGVkXHJcbiAgICAgICAgLy8ganVzdCBwcm9jZXNzIHRoZSBuYXZpZ2F0aW9uIGluc3RydWN0aW9uXHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RlcXVldWVJbnN0cnVjdGlvbigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBBY3RpdmF0ZXMgdGhlIHJvdXRlci4gVGhpcyBpbnN0cnVjdHMgdGhlIHJvdXRlciB0byBiZWdpbiBsaXN0ZW5pbmcgZm9yIGhpc3RvcnkgY2hhbmdlcyBhbmQgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtcyBvcHRpb25zIFRoZSBzZXQgb2Ygb3B0aW9ucyB0byBhY3RpdmF0ZSB0aGUgcm91dGVyIHdpdGguXHJcbiAgICAgKi9cclxuICAgIEFwcFJvdXRlci5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xyXG4gICAgICAgIGlmICh0aGlzLmlzQWN0aXZlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc0FjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgLy8gcm91dGUgaGFuZGxlciBwcm9wZXJ0eSBpcyByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdXJsIGNoYW5nZVxyXG4gICAgICAgIC8vIHRoZSBpbnRlcmZhY2Ugb2YgYXVyZWxpYS1oaXN0b3J5IGlzbid0IGNsZWFyIG9uIHRoaXMgcGVyc3BlY3RpdmVcclxuICAgICAgICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHsgcm91dGVIYW5kbGVyOiB0aGlzLmxvYWRVcmwuYmluZCh0aGlzKSB9LCB0aGlzLm9wdGlvbnMsIG9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMuaGlzdG9yeS5hY3RpdmF0ZSh0aGlzLm9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMuX2RlcXVldWVJbnN0cnVjdGlvbigpO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogRGVhY3RpdmF0ZXMgdGhlIHJvdXRlci5cclxuICAgICAqL1xyXG4gICAgQXBwUm91dGVyLnByb3RvdHlwZS5kZWFjdGl2YXRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmhpc3RvcnkuZGVhY3RpdmF0ZSgpO1xyXG4gICAgfTtcclxuICAgIC8qKkBpbnRlcm5hbCAqL1xyXG4gICAgQXBwUm91dGVyLnByb3RvdHlwZS5fcXVldWVJbnN0cnVjdGlvbiA9IGZ1bmN0aW9uIChpbnN0cnVjdGlvbikge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XHJcbiAgICAgICAgICAgIGluc3RydWN0aW9uLnJlc29sdmUgPSByZXNvbHZlO1xyXG4gICAgICAgICAgICBfdGhpcy5fcXVldWUudW5zaGlmdChpbnN0cnVjdGlvbik7XHJcbiAgICAgICAgICAgIF90aGlzLl9kZXF1ZXVlSW5zdHJ1Y3Rpb24oKTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICAvKipAaW50ZXJuYWwgKi9cclxuICAgIEFwcFJvdXRlci5wcm90b3R5cGUuX2RlcXVldWVJbnN0cnVjdGlvbiA9IGZ1bmN0aW9uIChpbnN0cnVjdGlvbkNvdW50KSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICBpZiAoaW5zdHJ1Y3Rpb25Db3VudCA9PT0gdm9pZCAwKSB7IGluc3RydWN0aW9uQ291bnQgPSAwOyB9XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAoX3RoaXMuaXNOYXZpZ2F0aW5nICYmICFpbnN0cnVjdGlvbkNvdW50KSB7XHJcbiAgICAgICAgICAgICAgICAvLyB0cyBjb21wbGFpbnMgYWJvdXQgaW5jb25zaXN0ZW50IHJldHVybnMgd2l0aG91dCB2b2lkIDBcclxuICAgICAgICAgICAgICAgIHJldHVybiB2b2lkIDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGluc3RydWN0aW9uID0gX3RoaXMuX3F1ZXVlLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgIF90aGlzLl9xdWV1ZS5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgICBpZiAoIWluc3RydWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAvLyB0cyBjb21wbGFpbnMgYWJvdXQgaW5jb25zaXN0ZW50IHJldHVybnMgd2l0aG91dCB2b2lkIDBcclxuICAgICAgICAgICAgICAgIHJldHVybiB2b2lkIDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgX3RoaXMuaXNOYXZpZ2F0aW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgdmFyIG5hdnRyYWNrZXIgPSBfdGhpcy5oaXN0b3J5LmdldFN0YXRlKCdOYXZpZ2F0aW9uVHJhY2tlcicpO1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudE5hdlRyYWNrZXIgPSBfdGhpcy5jdXJyZW50TmF2aWdhdGlvblRyYWNrZXI7XHJcbiAgICAgICAgICAgIGlmICghbmF2dHJhY2tlciAmJiAhY3VycmVudE5hdlRyYWNrZXIpIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLmlzTmF2aWdhdGluZ0ZpcnN0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIF90aGlzLmlzTmF2aWdhdGluZ05ldyA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoIW5hdnRyYWNrZXIpIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLmlzTmF2aWdhdGluZ05ldyA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoIWN1cnJlbnROYXZUcmFja2VyKSB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5pc05hdmlnYXRpbmdSZWZyZXNoID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50TmF2VHJhY2tlciA8IG5hdnRyYWNrZXIpIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLmlzTmF2aWdhdGluZ0ZvcndhcmQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnROYXZUcmFja2VyID4gbmF2dHJhY2tlcikge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuaXNOYXZpZ2F0aW5nQmFjayA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFuYXZ0cmFja2VyKSB7XHJcbiAgICAgICAgICAgICAgICBuYXZ0cmFja2VyID0gRGF0ZS5ub3coKTtcclxuICAgICAgICAgICAgICAgIF90aGlzLmhpc3Rvcnkuc2V0U3RhdGUoJ05hdmlnYXRpb25UcmFja2VyJywgbmF2dHJhY2tlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgX3RoaXMuY3VycmVudE5hdmlnYXRpb25UcmFja2VyID0gbmF2dHJhY2tlcjtcclxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb24ucHJldmlvdXNJbnN0cnVjdGlvbiA9IF90aGlzLmN1cnJlbnRJbnN0cnVjdGlvbjtcclxuICAgICAgICAgICAgdmFyIG1heEluc3RydWN0aW9uQ291bnQgPSBfdGhpcy5tYXhJbnN0cnVjdGlvbkNvdW50O1xyXG4gICAgICAgICAgICBpZiAoIWluc3RydWN0aW9uQ291bnQpIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLmV2ZW50cy5wdWJsaXNoKFwicm91dGVyOm5hdmlnYXRpb246cHJvY2Vzc2luZ1wiIC8qIFByb2Nlc3NpbmcgKi8sIHsgaW5zdHJ1Y3Rpb246IGluc3RydWN0aW9uIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGluc3RydWN0aW9uQ291bnQgPT09IG1heEluc3RydWN0aW9uQ291bnQgLSAxKSB7XHJcbiAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoaW5zdHJ1Y3Rpb25Db3VudCArIDEgKyBcIiBuYXZpZ2F0aW9uIGluc3RydWN0aW9ucyBoYXZlIGJlZW4gYXR0ZW1wdGVkIHdpdGhvdXQgc3VjY2Vzcy4gUmVzdG9yaW5nIGxhc3Qga25vd24gZ29vZCBsb2NhdGlvbi5cIik7XHJcbiAgICAgICAgICAgICAgICByZXN0b3JlUHJldmlvdXNMb2NhdGlvbihfdGhpcyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuX2RlcXVldWVJbnN0cnVjdGlvbihpbnN0cnVjdGlvbkNvdW50ICsgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoaW5zdHJ1Y3Rpb25Db3VudCA+IG1heEluc3RydWN0aW9uQ291bnQpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTWF4aW11bSBuYXZpZ2F0aW9uIGF0dGVtcHRzIGV4Y2VlZGVkLiBHaXZpbmcgdXAuJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHBpcGVsaW5lID0gX3RoaXMucGlwZWxpbmVQcm92aWRlci5jcmVhdGVQaXBlbGluZSghX3RoaXMuY291bGREZWFjdGl2YXRlKTtcclxuICAgICAgICAgICAgcmV0dXJuIHBpcGVsaW5lXHJcbiAgICAgICAgICAgICAgICAucnVuKGluc3RydWN0aW9uKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkgeyByZXR1cm4gcHJvY2Vzc1Jlc3VsdChpbnN0cnVjdGlvbiwgcmVzdWx0LCBpbnN0cnVjdGlvbkNvdW50LCBfdGhpcyk7IH0pXHJcbiAgICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBvdXRwdXQ6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihlcnJvcikgfTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHsgcmV0dXJuIHJlc29sdmVJbnN0cnVjdGlvbihpbnN0cnVjdGlvbiwgcmVzdWx0LCAhIWluc3RydWN0aW9uQ291bnQsIF90aGlzKTsgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgLyoqQGludGVybmFsICovXHJcbiAgICBBcHBSb3V0ZXIucHJvdG90eXBlLl9maW5kVmlld01vZGVsID0gZnVuY3Rpb24gKHZpZXdQb3J0KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udGFpbmVyLnZpZXdNb2RlbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXIudmlld01vZGVsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmlld1BvcnQuY29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgIHZhciBjb250YWluZXIgPSB2aWV3UG9ydC5jb250YWluZXI7XHJcbiAgICAgICAgICAgIHdoaWxlIChjb250YWluZXIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChjb250YWluZXIudmlld01vZGVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIudmlld01vZGVsID0gY29udGFpbmVyLnZpZXdNb2RlbDtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGFpbmVyLnZpZXdNb2RlbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnRhaW5lciA9IGNvbnRhaW5lci5wYXJlbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH07XHJcbiAgICByZXR1cm4gQXBwUm91dGVyO1xyXG59KFJvdXRlcikpO1xyXG52YXIgcHJvY2Vzc1Jlc3VsdCA9IGZ1bmN0aW9uIChpbnN0cnVjdGlvbiwgcmVzdWx0LCBpbnN0cnVjdGlvbkNvdW50LCByb3V0ZXIpIHtcclxuICAgIGlmICghKHJlc3VsdCAmJiAnY29tcGxldGVkJyBpbiByZXN1bHQgJiYgJ291dHB1dCcgaW4gcmVzdWx0KSkge1xyXG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdCB8fCB7fTtcclxuICAgICAgICByZXN1bHQub3V0cHV0ID0gbmV3IEVycm9yKFwiRXhwZWN0ZWQgcm91dGVyIHBpcGVsaW5lIHRvIHJldHVybiBhIG5hdmlnYXRpb24gcmVzdWx0LCBidXQgZ290IFtcIiArIEpTT04uc3RyaW5naWZ5KHJlc3VsdCkgKyBcIl0gaW5zdGVhZC5cIik7XHJcbiAgICB9XHJcbiAgICB2YXIgZmluYWxSZXN1bHQgPSBudWxsO1xyXG4gICAgdmFyIG5hdmlnYXRpb25Db21tYW5kUmVzdWx0ID0gbnVsbDtcclxuICAgIGlmIChpc05hdmlnYXRpb25Db21tYW5kKHJlc3VsdC5vdXRwdXQpKSB7XHJcbiAgICAgICAgbmF2aWdhdGlvbkNvbW1hbmRSZXN1bHQgPSByZXN1bHQub3V0cHV0Lm5hdmlnYXRlKHJvdXRlcik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBmaW5hbFJlc3VsdCA9IHJlc3VsdDtcclxuICAgICAgICBpZiAoIXJlc3VsdC5jb21wbGV0ZWQpIHtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdC5vdXRwdXQgaW5zdGFuY2VvZiBFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHJlc3VsdC5vdXRwdXQudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzdG9yZVByZXZpb3VzTG9jYXRpb24ocm91dGVyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5hdmlnYXRpb25Db21tYW5kUmVzdWx0KVxyXG4gICAgICAgIC50aGVuKGZ1bmN0aW9uIChfKSB7IHJldHVybiByb3V0ZXIuX2RlcXVldWVJbnN0cnVjdGlvbihpbnN0cnVjdGlvbkNvdW50ICsgMSk7IH0pXHJcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGlubmVyUmVzdWx0KSB7IHJldHVybiBmaW5hbFJlc3VsdCB8fCBpbm5lclJlc3VsdCB8fCByZXN1bHQ7IH0pO1xyXG59O1xyXG52YXIgcmVzb2x2ZUluc3RydWN0aW9uID0gZnVuY3Rpb24gKGluc3RydWN0aW9uLCByZXN1bHQsIGlzSW5uZXJJbnN0cnVjdGlvbiwgcm91dGVyKSB7XHJcbiAgICBpbnN0cnVjdGlvbi5yZXNvbHZlKHJlc3VsdCk7XHJcbiAgICB2YXIgZXZlbnRBZ2dyZWdhdG9yID0gcm91dGVyLmV2ZW50cztcclxuICAgIHZhciBldmVudEFyZ3MgPSB7IGluc3RydWN0aW9uOiBpbnN0cnVjdGlvbiwgcmVzdWx0OiByZXN1bHQgfTtcclxuICAgIGlmICghaXNJbm5lckluc3RydWN0aW9uKSB7XHJcbiAgICAgICAgcm91dGVyLmlzTmF2aWdhdGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHJvdXRlci5pc0V4cGxpY2l0TmF2aWdhdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgIHJvdXRlci5pc0V4cGxpY2l0TmF2aWdhdGlvbkJhY2sgPSBmYWxzZTtcclxuICAgICAgICByb3V0ZXIuaXNOYXZpZ2F0aW5nRmlyc3QgPSBmYWxzZTtcclxuICAgICAgICByb3V0ZXIuaXNOYXZpZ2F0aW5nTmV3ID0gZmFsc2U7XHJcbiAgICAgICAgcm91dGVyLmlzTmF2aWdhdGluZ1JlZnJlc2ggPSBmYWxzZTtcclxuICAgICAgICByb3V0ZXIuaXNOYXZpZ2F0aW5nRm9yd2FyZCA9IGZhbHNlO1xyXG4gICAgICAgIHJvdXRlci5pc05hdmlnYXRpbmdCYWNrID0gZmFsc2U7XHJcbiAgICAgICAgcm91dGVyLmNvdWxkRGVhY3RpdmF0ZSA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBldmVudE5hbWUgPSB2b2lkIDA7XHJcbiAgICAgICAgaWYgKHJlc3VsdC5vdXRwdXQgaW5zdGFuY2VvZiBFcnJvcikge1xyXG4gICAgICAgICAgICBldmVudE5hbWUgPSBcInJvdXRlcjpuYXZpZ2F0aW9uOmVycm9yXCIgLyogRXJyb3IgKi87XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKCFyZXN1bHQuY29tcGxldGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50TmFtZSA9IFwicm91dGVyOm5hdmlnYXRpb246Y2FuY2VsZWRcIiAvKiBDYW5jZWxlZCAqLztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciBxdWVyeVN0cmluZyA9IGluc3RydWN0aW9uLnF1ZXJ5U3RyaW5nID8gKCc/JyArIGluc3RydWN0aW9uLnF1ZXJ5U3RyaW5nKSA6ICcnO1xyXG4gICAgICAgICAgICByb3V0ZXIuaGlzdG9yeS5wcmV2aW91c0xvY2F0aW9uID0gaW5zdHJ1Y3Rpb24uZnJhZ21lbnQgKyBxdWVyeVN0cmluZztcclxuICAgICAgICAgICAgZXZlbnROYW1lID0gXCJyb3V0ZXI6bmF2aWdhdGlvbjpzdWNjZXNzXCIgLyogU3VjY2VzcyAqLztcclxuICAgICAgICB9XHJcbiAgICAgICAgZXZlbnRBZ2dyZWdhdG9yLnB1Ymxpc2goZXZlbnROYW1lLCBldmVudEFyZ3MpO1xyXG4gICAgICAgIGV2ZW50QWdncmVnYXRvci5wdWJsaXNoKFwicm91dGVyOm5hdmlnYXRpb246Y29tcGxldGVcIiAvKiBDb21wbGV0ZSAqLywgZXZlbnRBcmdzKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGV2ZW50QWdncmVnYXRvci5wdWJsaXNoKFwicm91dGVyOm5hdmlnYXRpb246Y2hpbGQ6Y29tcGxldGVcIiAvKiBDaGlsZENvbXBsZXRlICovLCBldmVudEFyZ3MpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufTtcclxudmFyIHJlc3RvcmVQcmV2aW91c0xvY2F0aW9uID0gZnVuY3Rpb24gKHJvdXRlcikge1xyXG4gICAgdmFyIHByZXZpb3VzTG9jYXRpb24gPSByb3V0ZXIuaGlzdG9yeS5wcmV2aW91c0xvY2F0aW9uO1xyXG4gICAgaWYgKHByZXZpb3VzTG9jYXRpb24pIHtcclxuICAgICAgICByb3V0ZXIubmF2aWdhdGUocHJldmlvdXNMb2NhdGlvbiwgeyB0cmlnZ2VyOiBmYWxzZSwgcmVwbGFjZTogdHJ1ZSB9KTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHJvdXRlci5mYWxsYmFja1JvdXRlKSB7XHJcbiAgICAgICAgcm91dGVyLm5hdmlnYXRlKHJvdXRlci5mYWxsYmFja1JvdXRlLCB7IHRyaWdnZXI6IHRydWUsIHJlcGxhY2U6IHRydWUgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBsb2dnZXIuZXJyb3IoJ1JvdXRlciBuYXZpZ2F0aW9uIGZhaWxlZCwgYW5kIG5vIHByZXZpb3VzIGxvY2F0aW9uIG9yIGZhbGxiYWNrUm91dGUgY291bGQgYmUgcmVzdG9yZWQuJyk7XHJcbiAgICB9XHJcbn07XG5cbi8qKlxyXG4qIFRoZSBzdGF0dXMgb2YgYSBQaXBlbGluZS5cclxuKi9cclxudmFyIFBpcGVsaW5lU3RhdHVzO1xyXG4oZnVuY3Rpb24gKFBpcGVsaW5lU3RhdHVzKSB7XHJcbiAgICBQaXBlbGluZVN0YXR1c1tcIkNvbXBsZXRlZFwiXSA9IFwiY29tcGxldGVkXCI7XHJcbiAgICBQaXBlbGluZVN0YXR1c1tcIkNhbmNlbGVkXCJdID0gXCJjYW5jZWxlZFwiO1xyXG4gICAgUGlwZWxpbmVTdGF0dXNbXCJSZWplY3RlZFwiXSA9IFwicmVqZWN0ZWRcIjtcclxuICAgIFBpcGVsaW5lU3RhdHVzW1wiUnVubmluZ1wiXSA9IFwicnVubmluZ1wiO1xyXG59KShQaXBlbGluZVN0YXR1cyB8fCAoUGlwZWxpbmVTdGF0dXMgPSB7fSkpO1xuXG4vKipcclxuICogQSBsaXN0IG9mIGtub3duIHJvdXRlciBldmVudHMgdXNlZCBieSB0aGUgQXVyZWxpYSByb3V0ZXJcclxuICogdG8gc2lnbmFsIHRoZSBwaXBlbGluZSBoYXMgY29tZSB0byBhIGNlcnRhaW4gc3RhdGVcclxuICovXHJcbi8vIGNvbnN0IGVudW0gaXMgcHJlc2VydmVkIGluIHRzY29uZmlnXHJcbnZhciBSb3V0ZXJFdmVudDtcclxuKGZ1bmN0aW9uIChSb3V0ZXJFdmVudCkge1xyXG4gICAgUm91dGVyRXZlbnRbXCJQcm9jZXNzaW5nXCJdID0gXCJyb3V0ZXI6bmF2aWdhdGlvbjpwcm9jZXNzaW5nXCI7XHJcbiAgICBSb3V0ZXJFdmVudFtcIkVycm9yXCJdID0gXCJyb3V0ZXI6bmF2aWdhdGlvbjplcnJvclwiO1xyXG4gICAgUm91dGVyRXZlbnRbXCJDYW5jZWxlZFwiXSA9IFwicm91dGVyOm5hdmlnYXRpb246Y2FuY2VsZWRcIjtcclxuICAgIFJvdXRlckV2ZW50W1wiQ29tcGxldGVcIl0gPSBcInJvdXRlcjpuYXZpZ2F0aW9uOmNvbXBsZXRlXCI7XHJcbiAgICBSb3V0ZXJFdmVudFtcIlN1Y2Nlc3NcIl0gPSBcInJvdXRlcjpuYXZpZ2F0aW9uOnN1Y2Nlc3NcIjtcclxuICAgIFJvdXRlckV2ZW50W1wiQ2hpbGRDb21wbGV0ZVwiXSA9IFwicm91dGVyOm5hdmlnYXRpb246Y2hpbGQ6Y29tcGxldGVcIjtcclxufSkoUm91dGVyRXZlbnQgfHwgKFJvdXRlckV2ZW50ID0ge30pKTtcblxuLyoqXHJcbiAqIEF2YWlsYWJsZSBwaXBlbGluZSBzbG90IG5hbWVzIHRvIGluc2VydCBpbnRlcmNlcHRvciBpbnRvIHJvdXRlciBwaXBlbGluZVxyXG4gKi9cclxuLy8gY29uc3QgZW51bSBpcyBwcmVzZXJ2ZWQgaW4gdHNjb25maWdcclxudmFyIFBpcGVsaW5lU2xvdE5hbWU7XHJcbihmdW5jdGlvbiAoUGlwZWxpbmVTbG90TmFtZSkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBBdXRob3JpemF0aW9uIHNsb3QuIEludm9rZWQgZWFybHkgaW4gdGhlIHBpcGVsaW5lLFxyXG4gICAgICogYmVmb3JlIGBjYW5BY3RpdmF0ZWAgaG9vayBvZiBpbmNvbWluZyByb3V0ZVxyXG4gICAgICovXHJcbiAgICBQaXBlbGluZVNsb3ROYW1lW1wiQXV0aG9yaXplXCJdID0gXCJhdXRob3JpemVcIjtcclxuICAgIC8qKlxyXG4gICAgICogUHJlLWFjdGl2YXRpb24gc2xvdC4gSW52b2tlZCBlYXJseSBpbiB0aGUgcGlwZWxpbmUsXHJcbiAgICAgKiBJbnZva2VkIHRpbWluZzpcclxuICAgICAqICAgLSBhZnRlciBBdXRob3JpemF0aW9uIHNsb3RcclxuICAgICAqICAgLSBhZnRlciBjYW5BY3RpdmF0ZSBob29rIG9uIG5ldyB2aWV3IG1vZGVsXHJcbiAgICAgKiAgIC0gYmVmb3JlIGRlYWN0aXZhdGUgaG9vayBvbiBvbGQgdmlldyBtb2RlbFxyXG4gICAgICogICAtIGJlZm9yZSBhY3RpdmF0ZSBob29rIG9uIG5ldyB2aWV3IG1vZGVsXHJcbiAgICAgKi9cclxuICAgIFBpcGVsaW5lU2xvdE5hbWVbXCJQcmVBY3RpdmF0ZVwiXSA9IFwicHJlQWN0aXZhdGVcIjtcclxuICAgIC8qKlxyXG4gICAgICogUHJlLXJlbmRlciBzbG90LiBJbnZva2VkIGxhdGVyIGluIHRoZSBwaXBlbGluZVxyXG4gICAgICogSW52b2tjYXRpb24gdGltaW5nOlxyXG4gICAgICogICAtIGFmdGVyIGFjdGl2YXRlIGhvb2sgb24gbmV3IHZpZXcgbW9kZWxcclxuICAgICAqICAgLSBiZWZvcmUgY29tbWl0IHN0ZXAgb24gbmV3IG5hdmlnYXRpb24gaW5zdHJ1Y3Rpb25cclxuICAgICAqL1xyXG4gICAgUGlwZWxpbmVTbG90TmFtZVtcIlByZVJlbmRlclwiXSA9IFwicHJlUmVuZGVyXCI7XHJcbiAgICAvKipcclxuICAgICAqIFBvc3QtcmVuZGVyIHNsb3QuIEludm9rZWQgbGFzdCBpbiB0aGUgcGlwZWxpbmVcclxuICAgICAqL1xyXG4gICAgUGlwZWxpbmVTbG90TmFtZVtcIlBvc3RSZW5kZXJcIl0gPSBcInBvc3RSZW5kZXJcIjtcclxufSkoUGlwZWxpbmVTbG90TmFtZSB8fCAoUGlwZWxpbmVTbG90TmFtZSA9IHt9KSk7XG5cbmV4cG9ydCB7IEFjdGl2YXRlTmV4dFN0ZXAsIEFwcFJvdXRlciwgQnVpbGROYXZpZ2F0aW9uUGxhblN0ZXAsIENhbkFjdGl2YXRlTmV4dFN0ZXAsIENhbkRlYWN0aXZhdGVQcmV2aW91c1N0ZXAsIENvbW1pdENoYW5nZXNTdGVwLCBEZWFjdGl2YXRlUHJldmlvdXNTdGVwLCBMb2FkUm91dGVTdGVwLCBOYXZNb2RlbCwgTmF2aWdhdGlvbkluc3RydWN0aW9uLCBQaXBlbGluZSwgUGlwZWxpbmVQcm92aWRlciwgUGlwZWxpbmVTbG90TmFtZSwgUGlwZWxpbmVTdGF0dXMsIFJlZGlyZWN0LCBSZWRpcmVjdFRvUm91dGUsIFJvdXRlTG9hZGVyLCBSb3V0ZXIsIFJvdXRlckNvbmZpZ3VyYXRpb24sIFJvdXRlckV2ZW50LCBhY3RpdmF0aW9uU3RyYXRlZ3ksIGlzTmF2aWdhdGlvbkNvbW1hbmQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWF1cmVsaWEtcm91dGVyLmpzLm1hcFxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///11\n")},110:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var fo = moment.defineLocale('fo', {\n        months : 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n        weekdays : 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split('_'),\n        weekdaysShort : 'sun_mán_týs_mik_hós_frí_ley'.split('_'),\n        weekdaysMin : 'su_má_tý_mi_hó_fr_le'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D. MMMM, YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Í dag kl.] LT',\n            nextDay : '[Í morgin kl.] LT',\n            nextWeek : 'dddd [kl.] LT',\n            lastDay : '[Í gjár kl.] LT',\n            lastWeek : '[síðstu] dddd [kl] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'um %s',\n            past : '%s síðani',\n            s : 'fá sekund',\n            ss : '%d sekundir',\n            m : 'ein minutt',\n            mm : '%d minuttir',\n            h : 'ein tími',\n            hh : '%d tímar',\n            d : 'ein dagur',\n            dd : '%d dagar',\n            M : 'ein mánaði',\n            MM : '%d mánaðir',\n            y : 'eitt ár',\n            yy : '%d ár'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return fo;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9mby5qcz8wNzIxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiIxMTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBmbyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2ZvJywge1xuICAgICAgICBtb250aHMgOiAnamFudWFyX2ZlYnJ1YXJfbWFyc19hcHLDrWxfbWFpX2p1bmlfanVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVzZW1iZXInLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ2phbl9mZWJfbWFyX2Fwcl9tYWlfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6ICdzdW5udWRhZ3VyX23DoW5hZGFndXJfdMO9c2RhZ3VyX21pa3VkYWd1cl9ow7NzZGFndXJfZnLDrWdnamFkYWd1cl9sZXlnYXJkYWd1cicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICdzdW5fbcOhbl90w71zX21pa19ow7NzX2Zyw61fbGV5Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICdzdV9tw6FfdMO9X21pX2jDs19mcl9sZScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdISDptbScsXG4gICAgICAgICAgICBMVFMgOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQgRC4gTU1NTSwgWVlZWSBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1vDjSBkYWcga2wuXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5IDogJ1vDjSBtb3JnaW4ga2wuXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdkZGRkIFtrbC5dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXkgOiAnW8ONIGdqw6FyIGtsLl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiAnW3PDrcOwc3R1XSBkZGRkIFtrbF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ3VtICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAnJXMgc8Otw7BhbmknLFxuICAgICAgICAgICAgcyA6ICdmw6Egc2VrdW5kJyxcbiAgICAgICAgICAgIHNzIDogJyVkIHNla3VuZGlyJyxcbiAgICAgICAgICAgIG0gOiAnZWluIG1pbnV0dCcsXG4gICAgICAgICAgICBtbSA6ICclZCBtaW51dHRpcicsXG4gICAgICAgICAgICBoIDogJ2VpbiB0w61taScsXG4gICAgICAgICAgICBoaCA6ICclZCB0w61tYXInLFxuICAgICAgICAgICAgZCA6ICdlaW4gZGFndXInLFxuICAgICAgICAgICAgZGQgOiAnJWQgZGFnYXInLFxuICAgICAgICAgICAgTSA6ICdlaW4gbcOhbmHDsGknLFxuICAgICAgICAgICAgTU0gOiAnJWQgbcOhbmHDsGlyJyxcbiAgICAgICAgICAgIHkgOiAnZWl0dCDDoXInLFxuICAgICAgICAgICAgeXkgOiAnJWQgw6FyJ1xuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsIDogJyVkLicsXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZvO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///110\n")},111:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' '),\n        numbersFuture = [\n            'nolla', 'yhden', 'kahden', 'kolmen', 'neljän', 'viiden', 'kuuden',\n            numbersPast[7], numbersPast[8], numbersPast[9]\n        ];\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = '';\n        switch (key) {\n            case 's':\n                return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';\n            case 'ss':\n                return isFuture ? 'sekunnin' : 'sekuntia';\n            case 'm':\n                return isFuture ? 'minuutin' : 'minuutti';\n            case 'mm':\n                result = isFuture ? 'minuutin' : 'minuuttia';\n                break;\n            case 'h':\n                return isFuture ? 'tunnin' : 'tunti';\n            case 'hh':\n                result = isFuture ? 'tunnin' : 'tuntia';\n                break;\n            case 'd':\n                return isFuture ? 'päivän' : 'päivä';\n            case 'dd':\n                result = isFuture ? 'päivän' : 'päivää';\n                break;\n            case 'M':\n                return isFuture ? 'kuukauden' : 'kuukausi';\n            case 'MM':\n                result = isFuture ? 'kuukauden' : 'kuukautta';\n                break;\n            case 'y':\n                return isFuture ? 'vuoden' : 'vuosi';\n            case 'yy':\n                result = isFuture ? 'vuoden' : 'vuotta';\n                break;\n        }\n        result = verbalNumber(number, isFuture) + ' ' + result;\n        return result;\n    }\n    function verbalNumber(number, isFuture) {\n        return number < 10 ? (isFuture ? numbersFuture[number] : numbersPast[number]) : number;\n    }\n\n    var fi = moment.defineLocale('fi', {\n        months : 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split('_'),\n        monthsShort : 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split('_'),\n        weekdays : 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split('_'),\n        weekdaysShort : 'su_ma_ti_ke_to_pe_la'.split('_'),\n        weekdaysMin : 'su_ma_ti_ke_to_pe_la'.split('_'),\n        longDateFormat : {\n            LT : 'HH.mm',\n            LTS : 'HH.mm.ss',\n            L : 'DD.MM.YYYY',\n            LL : 'Do MMMM[ta] YYYY',\n            LLL : 'Do MMMM[ta] YYYY, [klo] HH.mm',\n            LLLL : 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',\n            l : 'D.M.YYYY',\n            ll : 'Do MMM YYYY',\n            lll : 'Do MMM YYYY, [klo] HH.mm',\n            llll : 'ddd, Do MMM YYYY, [klo] HH.mm'\n        },\n        calendar : {\n            sameDay : '[tänään] [klo] LT',\n            nextDay : '[huomenna] [klo] LT',\n            nextWeek : 'dddd [klo] LT',\n            lastDay : '[eilen] [klo] LT',\n            lastWeek : '[viime] dddd[na] [klo] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s päästä',\n            past : '%s sitten',\n            s : translate,\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : translate,\n            hh : translate,\n            d : translate,\n            dd : translate,\n            M : translate,\n            MM : translate,\n            y : translate,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return fi;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9maS5qcz84MWU5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiMTExLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgbnVtYmVyc1Bhc3QgPSAnbm9sbGEgeWtzaSBrYWtzaSBrb2xtZSBuZWxqw6Qgdmlpc2kga3V1c2kgc2VpdHNlbcOkbiBrYWhkZWtzYW4geWhkZWtzw6RuJy5zcGxpdCgnICcpLFxuICAgICAgICBudW1iZXJzRnV0dXJlID0gW1xuICAgICAgICAgICAgJ25vbGxhJywgJ3loZGVuJywgJ2thaGRlbicsICdrb2xtZW4nLCAnbmVsasOkbicsICd2aWlkZW4nLCAna3V1ZGVuJyxcbiAgICAgICAgICAgIG51bWJlcnNQYXN0WzddLCBudW1iZXJzUGFzdFs4XSwgbnVtYmVyc1Bhc3RbOV1cbiAgICAgICAgXTtcbiAgICBmdW5jdGlvbiB0cmFuc2xhdGUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSAnJztcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ3MnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc0Z1dHVyZSA/ICdtdXV0YW1hbiBzZWt1bm5pbicgOiAnbXV1dGFtYSBzZWt1bnRpJztcbiAgICAgICAgICAgIGNhc2UgJ3NzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAnc2VrdW5uaW4nIDogJ3Nla3VudGlhJztcbiAgICAgICAgICAgIGNhc2UgJ20nOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc0Z1dHVyZSA/ICdtaW51dXRpbicgOiAnbWludXV0dGknO1xuICAgICAgICAgICAgY2FzZSAnbW0nOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGlzRnV0dXJlID8gJ21pbnV1dGluJyA6ICdtaW51dXR0aWEnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gJ3R1bm5pbicgOiAndHVudGknO1xuICAgICAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGlzRnV0dXJlID8gJ3R1bm5pbicgOiAndHVudGlhJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc0Z1dHVyZSA/ICdww6RpdsOkbicgOiAncMOkaXbDpCc7XG4gICAgICAgICAgICBjYXNlICdkZCc6XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaXNGdXR1cmUgPyAncMOkaXbDpG4nIDogJ3DDpGl2w6TDpCc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAna3V1a2F1ZGVuJyA6ICdrdXVrYXVzaSc7XG4gICAgICAgICAgICBjYXNlICdNTSc6XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaXNGdXR1cmUgPyAna3V1a2F1ZGVuJyA6ICdrdXVrYXV0dGEnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAneSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gJ3Z1b2RlbicgOiAndnVvc2knO1xuICAgICAgICAgICAgY2FzZSAneXknOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGlzRnV0dXJlID8gJ3Z1b2RlbicgOiAndnVvdHRhJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQgPSB2ZXJiYWxOdW1iZXIobnVtYmVyLCBpc0Z1dHVyZSkgKyAnICcgKyByZXN1bHQ7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZlcmJhbE51bWJlcihudW1iZXIsIGlzRnV0dXJlKSB7XG4gICAgICAgIHJldHVybiBudW1iZXIgPCAxMCA/IChpc0Z1dHVyZSA/IG51bWJlcnNGdXR1cmVbbnVtYmVyXSA6IG51bWJlcnNQYXN0W251bWJlcl0pIDogbnVtYmVyO1xuICAgIH1cblxuICAgIHZhciBmaSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2ZpJywge1xuICAgICAgICBtb250aHMgOiAndGFtbWlrdXVfaGVsbWlrdXVfbWFhbGlza3V1X2h1aHRpa3V1X3RvdWtva3V1X2tlc8Oka3V1X2hlaW7DpGt1dV9lbG9rdXVfc3l5c2t1dV9sb2tha3V1X21hcnJhc2t1dV9qb3VsdWt1dScuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAndGFtbWlfaGVsbWlfbWFhbGlzX2h1aHRpX3RvdWtvX2tlc8OkX2hlaW7DpF9lbG9fc3l5c19sb2thX21hcnJhc19qb3VsdScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXMgOiAnc3VubnVudGFpX21hYW5hbnRhaV90aWlzdGFpX2tlc2tpdmlpa2tvX3RvcnN0YWlfcGVyamFudGFpX2xhdWFudGFpJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ3N1X21hX3RpX2tlX3RvX3BlX2xhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICdzdV9tYV90aV9rZV90b19wZV9sYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdISC5tbScsXG4gICAgICAgICAgICBMVFMgOiAnSEgubW0uc3MnLFxuICAgICAgICAgICAgTCA6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0RvIE1NTU1bdGFdIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0RvIE1NTU1bdGFdIFlZWVksIFtrbG9dIEhILm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgRG8gTU1NTVt0YV0gWVlZWSwgW2tsb10gSEgubW0nLFxuICAgICAgICAgICAgbCA6ICdELk0uWVlZWScsXG4gICAgICAgICAgICBsbCA6ICdEbyBNTU0gWVlZWScsXG4gICAgICAgICAgICBsbGwgOiAnRG8gTU1NIFlZWVksIFtrbG9dIEhILm1tJyxcbiAgICAgICAgICAgIGxsbGwgOiAnZGRkLCBEbyBNTU0gWVlZWSwgW2tsb10gSEgubW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICdbdMOkbsOkw6RuXSBba2xvXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5IDogJ1todW9tZW5uYV0gW2tsb10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnZGRkZCBba2xvXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5IDogJ1tlaWxlbl0gW2tsb10gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiAnW3ZpaW1lXSBkZGRkW25hXSBba2xvXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnJXMgcMOkw6RzdMOkJyxcbiAgICAgICAgICAgIHBhc3QgOiAnJXMgc2l0dGVuJyxcbiAgICAgICAgICAgIHMgOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBzcyA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG0gOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtbSA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGggOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoaCA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGQgOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkZCA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE0gOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNTSA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHkgOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5eSA6IHRyYW5zbGF0ZVxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsIDogJyVkLicsXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZpO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///111\n")},112:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '۱',\n        '2': '۲',\n        '3': '۳',\n        '4': '۴',\n        '5': '۵',\n        '6': '۶',\n        '7': '۷',\n        '8': '۸',\n        '9': '۹',\n        '0': '۰'\n    }, numberMap = {\n        '۱': '1',\n        '۲': '2',\n        '۳': '3',\n        '۴': '4',\n        '۵': '5',\n        '۶': '6',\n        '۷': '7',\n        '۸': '8',\n        '۹': '9',\n        '۰': '0'\n    };\n\n    var fa = moment.defineLocale('fa', {\n        months : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),\n        monthsShort : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),\n        weekdays : 'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split('_'),\n        weekdaysShort : 'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split('_'),\n        weekdaysMin : 'ی_د_س_چ_پ_ج_ش'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /قبل از ظهر|بعد از ظهر/,\n        isPM: function (input) {\n            return /بعد از ظهر/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'قبل از ظهر';\n            } else {\n                return 'بعد از ظهر';\n            }\n        },\n        calendar : {\n            sameDay : '[امروز ساعت] LT',\n            nextDay : '[فردا ساعت] LT',\n            nextWeek : 'dddd [ساعت] LT',\n            lastDay : '[دیروز ساعت] LT',\n            lastWeek : 'dddd [پیش] [ساعت] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'در %s',\n            past : '%s پیش',\n            s : 'چند ثانیه',\n            ss : 'ثانیه d%',\n            m : 'یک دقیقه',\n            mm : '%d دقیقه',\n            h : 'یک ساعت',\n            hh : '%d ساعت',\n            d : 'یک روز',\n            dd : '%d روز',\n            M : 'یک ماه',\n            MM : '%d ماه',\n            y : 'یک سال',\n            yy : '%d سال'\n        },\n        preparse: function (string) {\n            return string.replace(/[۰-۹]/g, function (match) {\n                return numberMap[match];\n            }).replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            }).replace(/,/g, '،');\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}م/,\n        ordinal : '%dم',\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12 // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return fa;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9mYS5qcz84ZGY0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwiZmlsZSI6IjExMi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgJzEnOiAn27EnLFxuICAgICAgICAnMic6ICfbsicsXG4gICAgICAgICczJzogJ9uzJyxcbiAgICAgICAgJzQnOiAn27QnLFxuICAgICAgICAnNSc6ICfbtScsXG4gICAgICAgICc2JzogJ9u2JyxcbiAgICAgICAgJzcnOiAn27cnLFxuICAgICAgICAnOCc6ICfbuCcsXG4gICAgICAgICc5JzogJ9u5JyxcbiAgICAgICAgJzAnOiAn27AnXG4gICAgfSwgbnVtYmVyTWFwID0ge1xuICAgICAgICAn27EnOiAnMScsXG4gICAgICAgICfbsic6ICcyJyxcbiAgICAgICAgJ9uzJzogJzMnLFxuICAgICAgICAn27QnOiAnNCcsXG4gICAgICAgICfbtSc6ICc1JyxcbiAgICAgICAgJ9u2JzogJzYnLFxuICAgICAgICAn27cnOiAnNycsXG4gICAgICAgICfbuCc6ICc4JyxcbiAgICAgICAgJ9u5JzogJzknLFxuICAgICAgICAn27AnOiAnMCdcbiAgICB9O1xuXG4gICAgdmFyIGZhID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZmEnLCB7XG4gICAgICAgIG1vbnRocyA6ICfamNin2YbZiNuM2Ydf2YHZiNix24zZh1/Zhdin2LHYs1/YotmI2LHbjNmEX9mF2Ydf2pjZiNim2YZf2pjZiNim24zZh1/Yp9mI2Kpf2LPZvtiq2KfZhdio2LFf2Kfaqdiq2KjYsV/ZhtmI2KfZhdio2LFf2K/Ys9in2YXYqNixJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICfamNin2YbZiNuM2Ydf2YHZiNix24zZh1/Zhdin2LHYs1/YotmI2LHbjNmEX9mF2Ydf2pjZiNim2YZf2pjZiNim24zZh1/Yp9mI2Kpf2LPZvtiq2KfZhdio2LFf2Kfaqdiq2KjYsV/ZhtmI2KfZhdio2LFf2K/Ys9in2YXYqNixJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6ICfbjNqpXFx1MjAwY9i02YbYqNmHX9iv2YjYtNmG2KjZh1/Ys9mHXFx1MjAwY9i02YbYqNmHX9qG2YfYp9ix2LTZhtio2Ydf2b7ZhtisXFx1MjAwY9i02YbYqNmHX9is2YXYudmHX9i02YbYqNmHJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ9uM2qlcXHUyMDBj2LTZhtio2Ydf2K/ZiNi02YbYqNmHX9iz2YdcXHUyMDBj2LTZhtio2Ydf2obZh9in2LHYtNmG2KjZh1/ZvtmG2KxcXHUyMDBj2LTZhtio2Ydf2KzZhdi52Ydf2LTZhtio2YcnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ9uMX9ivX9izX9qGX9m+X9isX9i0Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/Zgtio2YQg2KfYsiDYuNmH2LF82KjYudivINin2LIg2LjZh9ixLyxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gL9io2LnYryDYp9iyINi42YfYsS8udGVzdChpbnB1dCk7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtIDogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn2YLYqNmEINin2LIg2LjZh9ixJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfYqNi52K8g2KfYsiDYuNmH2LEnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgOiAnW9in2YXYsdmI2LIg2LPYp9i52KpdIExUJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW9mB2LHYr9inINiz2KfYudiqXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdkZGRkIFvYs9in2LnYql0gTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdb2K/bjNix2YjYsiDYs9in2LnYql0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiAnZGRkZCBb2b7bjNi0XSBb2LPYp9i52KpdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICfYr9ixICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAnJXMg2b7bjNi0JyxcbiAgICAgICAgICAgIHMgOiAn2obZhtivINir2KfZhtuM2YcnLFxuICAgICAgICAgICAgc3MgOiAn2KvYp9mG24zZhyBkJScsXG4gICAgICAgICAgICBtIDogJ9uM2qkg2K/ZgtuM2YLZhycsXG4gICAgICAgICAgICBtbSA6ICclZCDYr9mC24zZgtmHJyxcbiAgICAgICAgICAgIGggOiAn24zaqSDYs9in2LnYqicsXG4gICAgICAgICAgICBoaCA6ICclZCDYs9in2LnYqicsXG4gICAgICAgICAgICBkIDogJ9uM2qkg2LHZiNiyJyxcbiAgICAgICAgICAgIGRkIDogJyVkINix2YjYsicsXG4gICAgICAgICAgICBNIDogJ9uM2qkg2YXYp9mHJyxcbiAgICAgICAgICAgIE1NIDogJyVkINmF2KfZhycsXG4gICAgICAgICAgICB5IDogJ9uM2qkg2LPYp9mEJyxcbiAgICAgICAgICAgIHl5IDogJyVkINiz2KfZhCdcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW9uwLdu5XS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pLnJlcGxhY2UoL9iML2csICcsJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSkucmVwbGFjZSgvLC9nLCAn2IwnKTtcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ92YUvLFxuICAgICAgICBvcmRpbmFsIDogJyVk2YUnLFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogNiwgLy8gU2F0dXJkYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDEyIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDFzdCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZhO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///112\n")},113:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var eu = moment.defineLocale('eu', {\n        months : 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split('_'),\n        monthsShort : 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split('_'),\n        weekdaysShort : 'ig._al._ar._az._og._ol._lr.'.split('_'),\n        weekdaysMin : 'ig_al_ar_az_og_ol_lr'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY-MM-DD',\n            LL : 'YYYY[ko] MMMM[ren] D[a]',\n            LLL : 'YYYY[ko] MMMM[ren] D[a] HH:mm',\n            LLLL : 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',\n            l : 'YYYY-M-D',\n            ll : 'YYYY[ko] MMM D[a]',\n            lll : 'YYYY[ko] MMM D[a] HH:mm',\n            llll : 'ddd, YYYY[ko] MMM D[a] HH:mm'\n        },\n        calendar : {\n            sameDay : '[gaur] LT[etan]',\n            nextDay : '[bihar] LT[etan]',\n            nextWeek : 'dddd LT[etan]',\n            lastDay : '[atzo] LT[etan]',\n            lastWeek : '[aurreko] dddd LT[etan]',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s barru',\n            past : 'duela %s',\n            s : 'segundo batzuk',\n            ss : '%d segundo',\n            m : 'minutu bat',\n            mm : '%d minutu',\n            h : 'ordu bat',\n            hh : '%d ordu',\n            d : 'egun bat',\n            dd : '%d egun',\n            M : 'hilabete bat',\n            MM : '%d hilabete',\n            y : 'urte bat',\n            yy : '%d urte'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return eu;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ldS5qcz8wZmYyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiIxMTMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBldSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2V1Jywge1xuICAgICAgICBtb250aHMgOiAndXJ0YXJyaWxhX290c2FpbGFfbWFydHhvYV9hcGlyaWxhX21haWF0emFfZWthaW5hX3V6dGFpbGFfYWJ1enR1YV9pcmFpbGFfdXJyaWFfYXphcm9hX2FiZW5kdWEnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ3VydC5fb3RzLl9tYXIuX2FwaS5fbWFpLl9la2EuX3V6dC5fYWJ1Ll9pcmEuX3Vyci5fYXphLl9hYmUuJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0IDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXMgOiAnaWdhbmRlYV9hc3RlbGVoZW5hX2FzdGVhcnRlYV9hc3RlYXprZW5hX29zdGVndW5hX29zdGlyYWxhX2xhcnVuYmF0YScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICdpZy5fYWwuX2FyLl9hei5fb2cuX29sLl9sci4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ2lnX2FsX2FyX2F6X29nX29sX2xyJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ1lZWVktTU0tREQnLFxuICAgICAgICAgICAgTEwgOiAnWVlZWVtrb10gTU1NTVtyZW5dIERbYV0nLFxuICAgICAgICAgICAgTExMIDogJ1lZWVlba29dIE1NTU1bcmVuXSBEW2FdIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgWVlZWVtrb10gTU1NTVtyZW5dIERbYV0gSEg6bW0nLFxuICAgICAgICAgICAgbCA6ICdZWVlZLU0tRCcsXG4gICAgICAgICAgICBsbCA6ICdZWVlZW2tvXSBNTU0gRFthXScsXG4gICAgICAgICAgICBsbGwgOiAnWVlZWVtrb10gTU1NIERbYV0gSEg6bW0nLFxuICAgICAgICAgICAgbGxsbCA6ICdkZGQsIFlZWVlba29dIE1NTSBEW2FdIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgOiAnW2dhdXJdIExUW2V0YW5dJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW2JpaGFyXSBMVFtldGFuXScsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdkZGRkIExUW2V0YW5dJyxcbiAgICAgICAgICAgIGxhc3REYXkgOiAnW2F0em9dIExUW2V0YW5dJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogJ1thdXJyZWtvXSBkZGRkIExUW2V0YW5dJyxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICclcyBiYXJydScsXG4gICAgICAgICAgICBwYXN0IDogJ2R1ZWxhICVzJyxcbiAgICAgICAgICAgIHMgOiAnc2VndW5kbyBiYXR6dWsnLFxuICAgICAgICAgICAgc3MgOiAnJWQgc2VndW5kbycsXG4gICAgICAgICAgICBtIDogJ21pbnV0dSBiYXQnLFxuICAgICAgICAgICAgbW0gOiAnJWQgbWludXR1JyxcbiAgICAgICAgICAgIGggOiAnb3JkdSBiYXQnLFxuICAgICAgICAgICAgaGggOiAnJWQgb3JkdScsXG4gICAgICAgICAgICBkIDogJ2VndW4gYmF0JyxcbiAgICAgICAgICAgIGRkIDogJyVkIGVndW4nLFxuICAgICAgICAgICAgTSA6ICdoaWxhYmV0ZSBiYXQnLFxuICAgICAgICAgICAgTU0gOiAnJWQgaGlsYWJldGUnLFxuICAgICAgICAgICAgeSA6ICd1cnRlIGJhdCcsXG4gICAgICAgICAgICB5eSA6ICclZCB1cnRlJ1xuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsIDogJyVkLicsXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDcgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDFzdCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGV1O1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///113\n")},114:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            's' : ['mõne sekundi', 'mõni sekund', 'paar sekundit'],\n            'ss': [number + 'sekundi', number + 'sekundit'],\n            'm' : ['ühe minuti', 'üks minut'],\n            'mm': [number + ' minuti', number + ' minutit'],\n            'h' : ['ühe tunni', 'tund aega', 'üks tund'],\n            'hh': [number + ' tunni', number + ' tundi'],\n            'd' : ['ühe päeva', 'üks päev'],\n            'M' : ['kuu aja', 'kuu aega', 'üks kuu'],\n            'MM': [number + ' kuu', number + ' kuud'],\n            'y' : ['ühe aasta', 'aasta', 'üks aasta'],\n            'yy': [number + ' aasta', number + ' aastat']\n        };\n        if (withoutSuffix) {\n            return format[key][2] ? format[key][2] : format[key][1];\n        }\n        return isFuture ? format[key][0] : format[key][1];\n    }\n\n    var et = moment.defineLocale('et', {\n        months        : 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split('_'),\n        monthsShort   : 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'),\n        weekdays      : 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split('_'),\n        weekdaysShort : 'P_E_T_K_N_R_L'.split('_'),\n        weekdaysMin   : 'P_E_T_K_N_R_L'.split('_'),\n        longDateFormat : {\n            LT   : 'H:mm',\n            LTS : 'H:mm:ss',\n            L    : 'DD.MM.YYYY',\n            LL   : 'D. MMMM YYYY',\n            LLL  : 'D. MMMM YYYY H:mm',\n            LLLL : 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay  : '[Täna,] LT',\n            nextDay  : '[Homme,] LT',\n            nextWeek : '[Järgmine] dddd LT',\n            lastDay  : '[Eile,] LT',\n            lastWeek : '[Eelmine] dddd LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s pärast',\n            past   : '%s tagasi',\n            s      : processRelativeTime,\n            ss     : processRelativeTime,\n            m      : processRelativeTime,\n            mm     : processRelativeTime,\n            h      : processRelativeTime,\n            hh     : processRelativeTime,\n            d      : processRelativeTime,\n            dd     : '%d päeva',\n            M      : processRelativeTime,\n            MM     : processRelativeTime,\n            y      : processRelativeTime,\n            yy     : processRelativeTime\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return et;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ldC5qcz9lYzE4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiIxMTQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NSZWxhdGl2ZVRpbWUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgICAgICAncycgOiBbJ23DtW5lIHNla3VuZGknLCAnbcO1bmkgc2VrdW5kJywgJ3BhYXIgc2VrdW5kaXQnXSxcbiAgICAgICAgICAgICdzcyc6IFtudW1iZXIgKyAnc2VrdW5kaScsIG51bWJlciArICdzZWt1bmRpdCddLFxuICAgICAgICAgICAgJ20nIDogWyfDvGhlIG1pbnV0aScsICfDvGtzIG1pbnV0J10sXG4gICAgICAgICAgICAnbW0nOiBbbnVtYmVyICsgJyBtaW51dGknLCBudW1iZXIgKyAnIG1pbnV0aXQnXSxcbiAgICAgICAgICAgICdoJyA6IFsnw7xoZSB0dW5uaScsICd0dW5kIGFlZ2EnLCAnw7xrcyB0dW5kJ10sXG4gICAgICAgICAgICAnaGgnOiBbbnVtYmVyICsgJyB0dW5uaScsIG51bWJlciArICcgdHVuZGknXSxcbiAgICAgICAgICAgICdkJyA6IFsnw7xoZSBww6RldmEnLCAnw7xrcyBww6RldiddLFxuICAgICAgICAgICAgJ00nIDogWydrdXUgYWphJywgJ2t1dSBhZWdhJywgJ8O8a3Mga3V1J10sXG4gICAgICAgICAgICAnTU0nOiBbbnVtYmVyICsgJyBrdXUnLCBudW1iZXIgKyAnIGt1dWQnXSxcbiAgICAgICAgICAgICd5JyA6IFsnw7xoZSBhYXN0YScsICdhYXN0YScsICfDvGtzIGFhc3RhJ10sXG4gICAgICAgICAgICAneXknOiBbbnVtYmVyICsgJyBhYXN0YScsIG51bWJlciArICcgYWFzdGF0J11cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRba2V5XVsyXSA/IGZvcm1hdFtrZXldWzJdIDogZm9ybWF0W2tleV1bMV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gZm9ybWF0W2tleV1bMF0gOiBmb3JtYXRba2V5XVsxXTtcbiAgICB9XG5cbiAgICB2YXIgZXQgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdldCcsIHtcbiAgICAgICAgbW9udGhzICAgICAgICA6ICdqYWFudWFyX3ZlZWJydWFyX23DpHJ0c19hcHJpbGxfbWFpX2p1dW5pX2p1dWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b29iZXJfbm92ZW1iZXJfZGV0c2VtYmVyJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCAgIDogJ2phYW5fdmVlYnJfbcOkcnRzX2Fwcl9tYWlfanV1bmlfanV1bGlfYXVnX3NlcHRfb2t0X25vdl9kZXRzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyAgICAgIDogJ3DDvGhhcMOkZXZfZXNtYXNww6Rldl90ZWlzaXDDpGV2X2tvbG1hcMOkZXZfbmVsamFww6Rldl9yZWVkZV9sYXVww6Rldicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICdQX0VfVF9LX05fUl9MJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiAgIDogJ1BfRV9UX0tfTl9SX0wnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgICA6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgICAgOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTCAgIDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgIDogJ0QuIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSAgOiAnW1TDpG5hLF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheSAgOiAnW0hvbW1lLF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnW0rDpHJnbWluZV0gZGRkZCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5ICA6ICdbRWlsZSxdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogJ1tFZWxtaW5lXSBkZGRkIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICclcyBww6RyYXN0JyxcbiAgICAgICAgICAgIHBhc3QgICA6ICclcyB0YWdhc2knLFxuICAgICAgICAgICAgcyAgICAgIDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHNzICAgICA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtICAgICAgOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgbW0gICAgIDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGggICAgICA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBoaCAgICAgOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZCAgICAgIDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGRkICAgICA6ICclZCBww6RldmEnLFxuICAgICAgICAgICAgTSAgICAgIDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIE1NICAgICA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5ICAgICAgOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeXkgICAgIDogcHJvY2Vzc1JlbGF0aXZlVGltZVxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsIDogJyVkLicsXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGV0O1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///114\n")},115:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');\n\n    var esUs = moment.defineLocale('es-us', {\n        months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n        monthsShort : function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsParseExact : true,\n        weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'MM/DD/YYYY',\n            LL : 'MMMM [de] D [de] YYYY',\n            LLL : 'MMMM [de] D [de] YYYY h:mm A',\n            LLLL : 'dddd, MMMM [de] D [de] YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : function () {\n                return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            nextDay : function () {\n                return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            nextWeek : function () {\n                return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            lastDay : function () {\n                return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            lastWeek : function () {\n                return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'en %s',\n            past : 'hace %s',\n            s : 'unos segundos',\n            ss : '%d segundos',\n            m : 'un minuto',\n            mm : '%d minutos',\n            h : 'una hora',\n            hh : '%d horas',\n            d : 'un día',\n            dd : '%d días',\n            M : 'un mes',\n            MM : '%d meses',\n            y : 'un año',\n            yy : '%d años'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal : '%dº',\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return esUs;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lcy11cy5qcz81NWM5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULHFDQUFxQyxJQUFJO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiMTE1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgbW9udGhzU2hvcnREb3QgPSAnZW5lLl9mZWIuX21hci5fYWJyLl9tYXkuX2p1bi5fanVsLl9hZ28uX3NlcC5fb2N0Ll9ub3YuX2RpYy4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0ID0gJ2VuZV9mZWJfbWFyX2Ficl9tYXlfanVuX2p1bF9hZ29fc2VwX29jdF9ub3ZfZGljJy5zcGxpdCgnXycpO1xuXG4gICAgdmFyIGVzVXMgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdlcy11cycsIHtcbiAgICAgICAgbW9udGhzIDogJ2VuZXJvX2ZlYnJlcm9fbWFyem9fYWJyaWxfbWF5b19qdW5pb19qdWxpb19hZ29zdG9fc2VwdGllbWJyZV9vY3R1YnJlX25vdmllbWJyZV9kaWNpZW1icmUnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogZnVuY3Rpb24gKG0sIGZvcm1hdCkge1xuICAgICAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0RG90O1xuICAgICAgICAgICAgfSBlbHNlIGlmICgvLU1NTS0vLnRlc3QoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydFttLm1vbnRoKCldO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnREb3RbbS5tb250aCgpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdCA6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzIDogJ2RvbWluZ29fbHVuZXNfbWFydGVzX21pw6lyY29sZXNfanVldmVzX3ZpZXJuZXNfc8OhYmFkbycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICdkb20uX2x1bi5fbWFyLl9tacOpLl9qdWUuX3ZpZS5fc8OhYi4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ2RvX2x1X21hX21pX2p1X3ZpX3PDoScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0IDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdoOm1tIEEnLFxuICAgICAgICAgICAgTFRTIDogJ2g6bW06c3MgQScsXG4gICAgICAgICAgICBMIDogJ01NL0REL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnTU1NTSBbZGVdIEQgW2RlXSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdNTU1NIFtkZV0gRCBbZGVdIFlZWVkgaDptbSBBJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgTU1NTSBbZGVdIEQgW2RlXSBZWVlZIGg6bW0gQSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW2hveSBhIGxhJyArICgodGhpcy5ob3VycygpICE9PSAxKSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXh0RGF5IDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW21hw7FhbmEgYSBsYScgKyAoKHRoaXMuaG91cnMoKSAhPT0gMSkgPyAncycgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV4dFdlZWsgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdkZGRkIFthIGxhJyArICgodGhpcy5ob3VycygpICE9PSAxKSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5IDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW2F5ZXIgYSBsYScgKyAoKHRoaXMuaG91cnMoKSAhPT0gMSkgPyAncycgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdFdlZWsgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbZWxdIGRkZGQgW3Bhc2FkbyBhIGxhJyArICgodGhpcy5ob3VycygpICE9PSAxKSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnZW4gJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICdoYWNlICVzJyxcbiAgICAgICAgICAgIHMgOiAndW5vcyBzZWd1bmRvcycsXG4gICAgICAgICAgICBzcyA6ICclZCBzZWd1bmRvcycsXG4gICAgICAgICAgICBtIDogJ3VuIG1pbnV0bycsXG4gICAgICAgICAgICBtbSA6ICclZCBtaW51dG9zJyxcbiAgICAgICAgICAgIGggOiAndW5hIGhvcmEnLFxuICAgICAgICAgICAgaGggOiAnJWQgaG9yYXMnLFxuICAgICAgICAgICAgZCA6ICd1biBkw61hJyxcbiAgICAgICAgICAgIGRkIDogJyVkIGTDrWFzJyxcbiAgICAgICAgICAgIE0gOiAndW4gbWVzJyxcbiAgICAgICAgICAgIE1NIDogJyVkIG1lc2VzJyxcbiAgICAgICAgICAgIHkgOiAndW4gYcOxbycsXG4gICAgICAgICAgICB5eSA6ICclZCBhw7FvcydcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZSA6IC9cXGR7MSwyfcK6LyxcbiAgICAgICAgb3JkaW5hbCA6ICclZMK6JyxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNiAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMXN0IGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZXNVcztcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///115\n")},116:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');\n\n    var monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i];\n    var monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var esDo = moment.defineLocale('es-do', {\n        months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n        monthsShort : function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex: /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D [de] MMMM [de] YYYY',\n            LLL : 'D [de] MMMM [de] YYYY h:mm A',\n            LLLL : 'dddd, D [de] MMMM [de] YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : function () {\n                return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            nextDay : function () {\n                return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            nextWeek : function () {\n                return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            lastDay : function () {\n                return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            lastWeek : function () {\n                return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'en %s',\n            past : 'hace %s',\n            s : 'unos segundos',\n            ss : '%d segundos',\n            m : 'un minuto',\n            mm : '%d minutos',\n            h : 'una hora',\n            hh : '%d horas',\n            d : 'un día',\n            dd : '%d días',\n            M : 'un mes',\n            MM : '%d meses',\n            y : 'un año',\n            yy : '%d años'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal : '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return esDo;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lcy1kby5qcz8wYTNjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QscUNBQXFDLElBQUk7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiIxMTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBtb250aHNTaG9ydERvdCA9ICdlbmUuX2ZlYi5fbWFyLl9hYnIuX21heS5fanVuLl9qdWwuX2Fnby5fc2VwLl9vY3QuX25vdi5fZGljLicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgPSAnZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWMnLnNwbGl0KCdfJyk7XG5cbiAgICB2YXIgbW9udGhzUGFyc2UgPSBbL15lbmUvaSwgL15mZWIvaSwgL15tYXIvaSwgL15hYnIvaSwgL15tYXkvaSwgL15qdW4vaSwgL15qdWwvaSwgL15hZ28vaSwgL15zZXAvaSwgL15vY3QvaSwgL15ub3YvaSwgL15kaWMvaV07XG4gICAgdmFyIG1vbnRoc1JlZ2V4ID0gL14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZXxlbmVcXC4/fGZlYlxcLj98bWFyXFwuP3xhYnJcXC4/fG1heVxcLj98anVuXFwuP3xqdWxcXC4/fGFnb1xcLj98c2VwXFwuP3xvY3RcXC4/fG5vdlxcLj98ZGljXFwuPykvaTtcblxuICAgIHZhciBlc0RvID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZXMtZG8nLCB7XG4gICAgICAgIG1vbnRocyA6ICdlbmVyb19mZWJyZXJvX21hcnpvX2FicmlsX21heW9fanVuaW9fanVsaW9fYWdvc3RvX3NlcHRpZW1icmVfb2N0dWJyZV9ub3ZpZW1icmVfZGljaWVtYnJlJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6IGZ1bmN0aW9uIChtLCBmb3JtYXQpIHtcbiAgICAgICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydERvdDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoLy1NTU0tLy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnRbbS5tb250aCgpXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0RG90W20ubW9udGgoKV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1JlZ2V4OiBtb250aHNSZWdleCxcbiAgICAgICAgbW9udGhzU2hvcnRSZWdleDogbW9udGhzUmVnZXgsXG4gICAgICAgIG1vbnRoc1N0cmljdFJlZ2V4OiAvXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlKS9pLFxuICAgICAgICBtb250aHNTaG9ydFN0cmljdFJlZ2V4OiAvXihlbmVcXC4/fGZlYlxcLj98bWFyXFwuP3xhYnJcXC4/fG1heVxcLj98anVuXFwuP3xqdWxcXC4/fGFnb1xcLj98c2VwXFwuP3xvY3RcXC4/fG5vdlxcLj98ZGljXFwuPykvaSxcbiAgICAgICAgbW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBsb25nTW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBzaG9ydE1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgd2Vla2RheXMgOiAnZG9taW5nb19sdW5lc19tYXJ0ZXNfbWnDqXJjb2xlc19qdWV2ZXNfdmllcm5lc19zw6FiYWRvJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ2RvbS5fbHVuLl9tYXIuX21pw6kuX2p1ZS5fdmllLl9zw6FiLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAnZG9fbHVfbWFfbWlfanVfdmlfc8OhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ2g6bW0gQScsXG4gICAgICAgICAgICBMVFMgOiAnaDptbTpzcyBBJyxcbiAgICAgICAgICAgIEwgOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgW2RlXSBNTU1NIFtkZV0gWVlZWSBoOm1tIEEnLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgaDptbSBBJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbaG95IGEgbGEnICsgKCh0aGlzLmhvdXJzKCkgIT09IDEpID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHREYXkgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbbWHDsWFuYSBhIGxhJyArICgodGhpcy5ob3VycygpICE9PSAxKSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXh0V2VlayA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2RkZGQgW2EgbGEnICsgKCh0aGlzLmhvdXJzKCkgIT09IDEpID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXkgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbYXllciBhIGxhJyArICgodGhpcy5ob3VycygpICE9PSAxKSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0V2VlayA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1tlbF0gZGRkZCBbcGFzYWRvIGEgbGEnICsgKCh0aGlzLmhvdXJzKCkgIT09IDEpID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICdlbiAlcycsXG4gICAgICAgICAgICBwYXN0IDogJ2hhY2UgJXMnLFxuICAgICAgICAgICAgcyA6ICd1bm9zIHNlZ3VuZG9zJyxcbiAgICAgICAgICAgIHNzIDogJyVkIHNlZ3VuZG9zJyxcbiAgICAgICAgICAgIG0gOiAndW4gbWludXRvJyxcbiAgICAgICAgICAgIG1tIDogJyVkIG1pbnV0b3MnLFxuICAgICAgICAgICAgaCA6ICd1bmEgaG9yYScsXG4gICAgICAgICAgICBoaCA6ICclZCBob3JhcycsXG4gICAgICAgICAgICBkIDogJ3VuIGTDrWEnLFxuICAgICAgICAgICAgZGQgOiAnJWQgZMOtYXMnLFxuICAgICAgICAgICAgTSA6ICd1biBtZXMnLFxuICAgICAgICAgICAgTU0gOiAnJWQgbWVzZXMnLFxuICAgICAgICAgICAgeSA6ICd1biBhw7FvJyxcbiAgICAgICAgICAgIHl5IDogJyVkIGHDsW9zJ1xuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlIDogL1xcZHsxLDJ9wrovLFxuICAgICAgICBvcmRpbmFsIDogJyVkwronLFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA0ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBlc0RvO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///116\n")},117:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');\n\n    var monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i];\n    var monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var es = moment.defineLocale('es', {\n        months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n        monthsShort : function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex : monthsRegex,\n        monthsShortRegex : monthsRegex,\n        monthsStrictRegex : /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex : /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse : monthsParse,\n        longMonthsParse : monthsParse,\n        shortMonthsParse : monthsParse,\n        weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D [de] MMMM [de] YYYY',\n            LLL : 'D [de] MMMM [de] YYYY H:mm',\n            LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'\n        },\n        calendar : {\n            sameDay : function () {\n                return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            nextDay : function () {\n                return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            nextWeek : function () {\n                return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            lastDay : function () {\n                return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            lastWeek : function () {\n                return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'en %s',\n            past : 'hace %s',\n            s : 'unos segundos',\n            ss : '%d segundos',\n            m : 'un minuto',\n            mm : '%d minutos',\n            h : 'una hora',\n            hh : '%d horas',\n            d : 'un día',\n            dd : '%d días',\n            M : 'un mes',\n            MM : '%d meses',\n            y : 'un año',\n            yy : '%d años'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal : '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return es;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lcy5qcz84OThiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QscUNBQXFDLElBQUk7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiIxMTcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBtb250aHNTaG9ydERvdCA9ICdlbmUuX2ZlYi5fbWFyLl9hYnIuX21heS5fanVuLl9qdWwuX2Fnby5fc2VwLl9vY3QuX25vdi5fZGljLicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgPSAnZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWMnLnNwbGl0KCdfJyk7XG5cbiAgICB2YXIgbW9udGhzUGFyc2UgPSBbL15lbmUvaSwgL15mZWIvaSwgL15tYXIvaSwgL15hYnIvaSwgL15tYXkvaSwgL15qdW4vaSwgL15qdWwvaSwgL15hZ28vaSwgL15zZXAvaSwgL15vY3QvaSwgL15ub3YvaSwgL15kaWMvaV07XG4gICAgdmFyIG1vbnRoc1JlZ2V4ID0gL14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZXxlbmVcXC4/fGZlYlxcLj98bWFyXFwuP3xhYnJcXC4/fG1heVxcLj98anVuXFwuP3xqdWxcXC4/fGFnb1xcLj98c2VwXFwuP3xvY3RcXC4/fG5vdlxcLj98ZGljXFwuPykvaTtcblxuICAgIHZhciBlcyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2VzJywge1xuICAgICAgICBtb250aHMgOiAnZW5lcm9fZmVicmVyb19tYXJ6b19hYnJpbF9tYXlvX2p1bmlvX2p1bGlvX2Fnb3N0b19zZXB0aWVtYnJlX29jdHVicmVfbm92aWVtYnJlX2RpY2llbWJyZScuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiBmdW5jdGlvbiAobSwgZm9ybWF0KSB7XG4gICAgICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnREb3Q7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKC8tTU1NLS8udGVzdChmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0W20ubW9udGgoKV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydERvdFttLm1vbnRoKCldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtb250aHNSZWdleCA6IG1vbnRoc1JlZ2V4LFxuICAgICAgICBtb250aHNTaG9ydFJlZ2V4IDogbW9udGhzUmVnZXgsXG4gICAgICAgIG1vbnRoc1N0cmljdFJlZ2V4IDogL14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZSkvaSxcbiAgICAgICAgbW9udGhzU2hvcnRTdHJpY3RSZWdleCA6IC9eKGVuZVxcLj98ZmViXFwuP3xtYXJcXC4/fGFiclxcLj98bWF5XFwuP3xqdW5cXC4/fGp1bFxcLj98YWdvXFwuP3xzZXBcXC4/fG9jdFxcLj98bm92XFwuP3xkaWNcXC4/KS9pLFxuICAgICAgICBtb250aHNQYXJzZSA6IG1vbnRoc1BhcnNlLFxuICAgICAgICBsb25nTW9udGhzUGFyc2UgOiBtb250aHNQYXJzZSxcbiAgICAgICAgc2hvcnRNb250aHNQYXJzZSA6IG1vbnRoc1BhcnNlLFxuICAgICAgICB3ZWVrZGF5cyA6ICdkb21pbmdvX2x1bmVzX21hcnRlc19tacOpcmNvbGVzX2p1ZXZlc192aWVybmVzX3PDoWJhZG8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAnZG9tLl9sdW4uX21hci5fbWnDqS5fanVlLl92aWUuX3PDoWIuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICdkb19sdV9tYV9taV9qdV92aV9zw6EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdCA6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSDptbScsXG4gICAgICAgICAgICBMVFMgOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBbZGVdIE1NTU0gW2RlXSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbaG95IGEgbGEnICsgKCh0aGlzLmhvdXJzKCkgIT09IDEpID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHREYXkgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbbWHDsWFuYSBhIGxhJyArICgodGhpcy5ob3VycygpICE9PSAxKSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXh0V2VlayA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2RkZGQgW2EgbGEnICsgKCh0aGlzLmhvdXJzKCkgIT09IDEpID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXkgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbYXllciBhIGxhJyArICgodGhpcy5ob3VycygpICE9PSAxKSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0V2VlayA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1tlbF0gZGRkZCBbcGFzYWRvIGEgbGEnICsgKCh0aGlzLmhvdXJzKCkgIT09IDEpID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICdlbiAlcycsXG4gICAgICAgICAgICBwYXN0IDogJ2hhY2UgJXMnLFxuICAgICAgICAgICAgcyA6ICd1bm9zIHNlZ3VuZG9zJyxcbiAgICAgICAgICAgIHNzIDogJyVkIHNlZ3VuZG9zJyxcbiAgICAgICAgICAgIG0gOiAndW4gbWludXRvJyxcbiAgICAgICAgICAgIG1tIDogJyVkIG1pbnV0b3MnLFxuICAgICAgICAgICAgaCA6ICd1bmEgaG9yYScsXG4gICAgICAgICAgICBoaCA6ICclZCBob3JhcycsXG4gICAgICAgICAgICBkIDogJ3VuIGTDrWEnLFxuICAgICAgICAgICAgZGQgOiAnJWQgZMOtYXMnLFxuICAgICAgICAgICAgTSA6ICd1biBtZXMnLFxuICAgICAgICAgICAgTU0gOiAnJWQgbWVzZXMnLFxuICAgICAgICAgICAgeSA6ICd1biBhw7FvJyxcbiAgICAgICAgICAgIHl5IDogJyVkIGHDsW9zJ1xuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlIDogL1xcZHsxLDJ9wrovLFxuICAgICAgICBvcmRpbmFsIDogJyVkwronLFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA0ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBlcztcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///117\n")},118:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var eo = moment.defineLocale('eo', {\n        months : 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec'.split('_'),\n        weekdays : 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'),\n        weekdaysShort : 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'),\n        weekdaysMin : 'di_lu_ma_me_ĵa_ve_sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY-MM-DD',\n            LL : 'D[-a de] MMMM, YYYY',\n            LLL : 'D[-a de] MMMM, YYYY HH:mm',\n            LLLL : 'dddd, [la] D[-a de] MMMM, YYYY HH:mm'\n        },\n        meridiemParse: /[ap]\\.t\\.m/i,\n        isPM: function (input) {\n            return input.charAt(0).toLowerCase() === 'p';\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'p.t.m.' : 'P.T.M.';\n            } else {\n                return isLower ? 'a.t.m.' : 'A.T.M.';\n            }\n        },\n        calendar : {\n            sameDay : '[Hodiaŭ je] LT',\n            nextDay : '[Morgaŭ je] LT',\n            nextWeek : 'dddd [je] LT',\n            lastDay : '[Hieraŭ je] LT',\n            lastWeek : '[pasinta] dddd [je] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'post %s',\n            past : 'antaŭ %s',\n            s : 'sekundoj',\n            ss : '%d sekundoj',\n            m : 'minuto',\n            mm : '%d minutoj',\n            h : 'horo',\n            hh : '%d horoj',\n            d : 'tago',//ne 'diurno', ĉar estas uzita por proksimumo\n            dd : '%d tagoj',\n            M : 'monato',\n            MM : '%d monatoj',\n            y : 'jaro',\n            yy : '%d jaroj'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}a/,\n        ordinal : '%da',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return eo;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lby5qcz82NWRiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiMTE4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgZW8gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdlbycsIHtcbiAgICAgICAgbW9udGhzIDogJ2phbnVhcm9fZmVicnVhcm9fbWFydG9fYXByaWxvX21ham9fanVuaW9fanVsaW9fYcWtZ3VzdG9fc2VwdGVtYnJvX29rdG9icm9fbm92ZW1icm9fZGVjZW1icm8nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ2phbl9mZWJfbWFyX2Fwcl9tYWpfanVuX2p1bF9hxa1nX3NlcF9va3Rfbm92X2RlYycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXMgOiAnZGltYW7EiW9fbHVuZG9fbWFyZG9fbWVya3JlZG9fxLVhxa1kb192ZW5kcmVkb19zYWJhdG8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAnZGltX2x1bl9tYXJkX21lcmtfxLVhxa1fdmVuX3NhYicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAnZGlfbHVfbWFfbWVfxLVhX3ZlX3NhJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ1lZWVktTU0tREQnLFxuICAgICAgICAgICAgTEwgOiAnRFstYSBkZV0gTU1NTSwgWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRFstYSBkZV0gTU1NTSwgWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQsIFtsYV0gRFstYSBkZV0gTU1NTSwgWVlZWSBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL1thcF1cXC50XFwubS9pLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dC5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSA9PT0gJ3AnO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbSA6IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXJzID4gMTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdwLnQubS4nIDogJ1AuVC5NLic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ2EudC5tLicgOiAnQS5ULk0uJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1tIb2RpYcWtIGplXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5IDogJ1tNb3JnYcWtIGplXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdkZGRkIFtqZV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdbSGllcmHFrSBqZV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiAnW3Bhc2ludGFdIGRkZGQgW2plXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAncG9zdCAlcycsXG4gICAgICAgICAgICBwYXN0IDogJ2FudGHFrSAlcycsXG4gICAgICAgICAgICBzIDogJ3Nla3VuZG9qJyxcbiAgICAgICAgICAgIHNzIDogJyVkIHNla3VuZG9qJyxcbiAgICAgICAgICAgIG0gOiAnbWludXRvJyxcbiAgICAgICAgICAgIG1tIDogJyVkIG1pbnV0b2onLFxuICAgICAgICAgICAgaCA6ICdob3JvJyxcbiAgICAgICAgICAgIGhoIDogJyVkIGhvcm9qJyxcbiAgICAgICAgICAgIGQgOiAndGFnbycsLy9uZSAnZGl1cm5vJywgxIlhciBlc3RhcyB1eml0YSBwb3IgcHJva3NpbXVtb1xuICAgICAgICAgICAgZGQgOiAnJWQgdGFnb2onLFxuICAgICAgICAgICAgTSA6ICdtb25hdG8nLFxuICAgICAgICAgICAgTU0gOiAnJWQgbW9uYXRvaicsXG4gICAgICAgICAgICB5IDogJ2phcm8nLFxuICAgICAgICAgICAgeXkgOiAnJWQgamFyb2onXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfWEvLFxuICAgICAgICBvcmRpbmFsIDogJyVkYScsXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDcgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDFzdCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVvO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///118\n")},119:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var enNz = moment.defineLocale('en-nz', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY h:mm A',\n            LLLL : 'dddd, D MMMM YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : '[Today at] LT',\n            nextDay : '[Tomorrow at] LT',\n            nextWeek : 'dddd [at] LT',\n            lastDay : '[Yesterday at] LT',\n            lastWeek : '[Last] dddd [at] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            ss : '%d seconds',\n            m : 'a minute',\n            mm : '%d minutes',\n            h : 'an hour',\n            hh : '%d hours',\n            d : 'a day',\n            dd : '%d days',\n            M : 'a month',\n            MM : '%d months',\n            y : 'a year',\n            yy : '%d years'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return enNz;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1uei5qcz82ZjUwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiMTE5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgZW5OeiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2VuLW56Jywge1xuICAgICAgICBtb250aHMgOiAnSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlcicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAnSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzIDogJ1N1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ1N1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAnU3VfTW9fVHVfV2VfVGhfRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnaDptbSBBJyxcbiAgICAgICAgICAgIExUUyA6ICdoOm1tOnNzIEEnLFxuICAgICAgICAgICAgTCA6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdEIE1NTU0gWVlZWSBoOm1tIEEnLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEnXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICdbVG9kYXkgYXRdIExUJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW1RvbW9ycm93IGF0XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdbWWVzdGVyZGF5IGF0XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlayA6ICdbTGFzdF0gZGRkZCBbYXRdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICdpbiAlcycsXG4gICAgICAgICAgICBwYXN0IDogJyVzIGFnbycsXG4gICAgICAgICAgICBzIDogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICAgICAgc3MgOiAnJWQgc2Vjb25kcycsXG4gICAgICAgICAgICBtIDogJ2EgbWludXRlJyxcbiAgICAgICAgICAgIG1tIDogJyVkIG1pbnV0ZXMnLFxuICAgICAgICAgICAgaCA6ICdhbiBob3VyJyxcbiAgICAgICAgICAgIGhoIDogJyVkIGhvdXJzJyxcbiAgICAgICAgICAgIGQgOiAnYSBkYXknLFxuICAgICAgICAgICAgZGQgOiAnJWQgZGF5cycsXG4gICAgICAgICAgICBNIDogJ2EgbW9udGgnLFxuICAgICAgICAgICAgTU0gOiAnJWQgbW9udGhzJyxcbiAgICAgICAgICAgIHkgOiAnYSB5ZWFyJyxcbiAgICAgICAgICAgIHl5IDogJyVkIHllYXJzJ1xuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oc3R8bmR8cmR8dGgpLyxcbiAgICAgICAgb3JkaW5hbCA6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKH5+KG51bWJlciAlIDEwMCAvIDEwKSA9PT0gMSkgPyAndGgnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMSkgPyAnc3QnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMikgPyAnbmQnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMykgPyAncmQnIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVuTno7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///119\n")},12:function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(fetch) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"json\", function() { return json; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"HttpClientConfiguration\", function() { return HttpClientConfiguration; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"HttpClient\", function() { return HttpClient; });\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj; };\n\n\n\nfunction json(body, replacer) {\n  return JSON.stringify(body !== undefined ? body : {}, replacer);\n}\n\nvar HttpClientConfiguration = function () {\n  function HttpClientConfiguration() {\n    \n\n    this.baseUrl = '';\n    this.defaults = {};\n    this.interceptors = [];\n  }\n\n  HttpClientConfiguration.prototype.withBaseUrl = function withBaseUrl(baseUrl) {\n    this.baseUrl = baseUrl;\n    return this;\n  };\n\n  HttpClientConfiguration.prototype.withDefaults = function withDefaults(defaults) {\n    this.defaults = defaults;\n    return this;\n  };\n\n  HttpClientConfiguration.prototype.withInterceptor = function withInterceptor(interceptor) {\n    this.interceptors.push(interceptor);\n    return this;\n  };\n\n  HttpClientConfiguration.prototype.useStandardConfiguration = function useStandardConfiguration() {\n    var standardConfig = { credentials: 'same-origin' };\n    Object.assign(this.defaults, standardConfig, this.defaults);\n    return this.rejectErrorResponses();\n  };\n\n  HttpClientConfiguration.prototype.rejectErrorResponses = function rejectErrorResponses() {\n    return this.withInterceptor({ response: rejectOnError });\n  };\n\n  return HttpClientConfiguration;\n}();\n\nfunction rejectOnError(response) {\n  if (!response.ok) {\n    throw response;\n  }\n\n  return response;\n}\n\nvar HttpClient = function () {\n  function HttpClient() {\n    \n\n    this.activeRequestCount = 0;\n    this.isRequesting = false;\n    this.isConfigured = false;\n    this.baseUrl = '';\n    this.defaults = null;\n    this.interceptors = [];\n\n    if (typeof fetch === 'undefined') {\n      throw new Error('HttpClient requires a Fetch API implementation, but the current environment doesn\\'t support it. You may need to load a polyfill such as https://github.com/github/fetch');\n    }\n  }\n\n  HttpClient.prototype.configure = function configure(config) {\n    var normalizedConfig = void 0;\n\n    if ((typeof config === 'undefined' ? 'undefined' : _typeof(config)) === 'object') {\n      normalizedConfig = { defaults: config };\n    } else if (typeof config === 'function') {\n      normalizedConfig = new HttpClientConfiguration();\n      normalizedConfig.baseUrl = this.baseUrl;\n      normalizedConfig.defaults = Object.assign({}, this.defaults);\n      normalizedConfig.interceptors = this.interceptors;\n\n      var c = config(normalizedConfig);\n      if (HttpClientConfiguration.prototype.isPrototypeOf(c)) {\n        normalizedConfig = c;\n      }\n    } else {\n      throw new Error('invalid config');\n    }\n\n    var defaults = normalizedConfig.defaults;\n    if (defaults && Headers.prototype.isPrototypeOf(defaults.headers)) {\n      throw new Error('Default headers must be a plain object.');\n    }\n\n    this.baseUrl = normalizedConfig.baseUrl;\n    this.defaults = defaults;\n    this.interceptors = normalizedConfig.interceptors || [];\n    this.isConfigured = true;\n\n    return this;\n  };\n\n  HttpClient.prototype.fetch = function (_fetch) {\n    function fetch(_x, _x2) {\n      return _fetch.apply(this, arguments);\n    }\n\n    fetch.toString = function () {\n      return _fetch.toString();\n    };\n\n    return fetch;\n  }(function (input, init) {\n    var _this = this;\n\n    trackRequestStart.call(this);\n\n    var request = Promise.resolve().then(function () {\n      return buildRequest.call(_this, input, init, _this.defaults);\n    });\n    var promise = processRequest(request, this.interceptors).then(function (result) {\n      var response = null;\n\n      if (Response.prototype.isPrototypeOf(result)) {\n        response = result;\n      } else if (Request.prototype.isPrototypeOf(result)) {\n        request = Promise.resolve(result);\n        response = fetch(result);\n      } else {\n        throw new Error('An invalid result was returned by the interceptor chain. Expected a Request or Response instance, but got [' + result + ']');\n      }\n\n      return request.then(function (_request) {\n        return processResponse(response, _this.interceptors, _request);\n      });\n    });\n\n    return trackRequestEndWith.call(this, promise);\n  });\n\n  return HttpClient;\n}();\n\nvar absoluteUrlRegexp = /^([a-z][a-z0-9+\\-.]*:)?\\/\\//i;\n\nfunction trackRequestStart() {\n  this.isRequesting = !! ++this.activeRequestCount;\n}\n\nfunction trackRequestEnd() {\n  this.isRequesting = !! --this.activeRequestCount;\n}\n\nfunction trackRequestEndWith(promise) {\n  var handle = trackRequestEnd.bind(this);\n  promise.then(handle, handle);\n  return promise;\n}\n\nfunction parseHeaderValues(headers) {\n  var parsedHeaders = {};\n  for (var name in headers || {}) {\n    if (headers.hasOwnProperty(name)) {\n      parsedHeaders[name] = typeof headers[name] === 'function' ? headers[name]() : headers[name];\n    }\n  }\n  return parsedHeaders;\n}\n\nfunction buildRequest(input, init) {\n  var defaults = this.defaults || {};\n  var request = void 0;\n  var body = void 0;\n  var requestContentType = void 0;\n\n  var parsedDefaultHeaders = parseHeaderValues(defaults.headers);\n  if (Request.prototype.isPrototypeOf(input)) {\n    request = input;\n    requestContentType = new Headers(request.headers).get('Content-Type');\n  } else {\n    init || (init = {});\n    body = init.body;\n    var bodyObj = body ? { body: body } : null;\n    var requestInit = Object.assign({}, defaults, { headers: {} }, init, bodyObj);\n    requestContentType = new Headers(requestInit.headers).get('Content-Type');\n    request = new Request(getRequestUrl(this.baseUrl, input), requestInit);\n  }\n  if (!requestContentType) {\n    if (new Headers(parsedDefaultHeaders).has('content-type')) {\n      request.headers.set('Content-Type', new Headers(parsedDefaultHeaders).get('content-type'));\n    } else if (body && isJSON(body)) {\n      request.headers.set('Content-Type', 'application/json');\n    }\n  }\n  setDefaultHeaders(request.headers, parsedDefaultHeaders);\n  if (body && Blob.prototype.isPrototypeOf(body) && body.type) {\n    request.headers.set('Content-Type', body.type);\n  }\n  return request;\n}\n\nfunction getRequestUrl(baseUrl, url) {\n  if (absoluteUrlRegexp.test(url)) {\n    return url;\n  }\n\n  return (baseUrl || '') + url;\n}\n\nfunction setDefaultHeaders(headers, defaultHeaders) {\n  for (var name in defaultHeaders || {}) {\n    if (defaultHeaders.hasOwnProperty(name) && !headers.has(name)) {\n      headers.set(name, defaultHeaders[name]);\n    }\n  }\n}\n\nfunction processRequest(request, interceptors) {\n  return applyInterceptors(request, interceptors, 'request', 'requestError');\n}\n\nfunction processResponse(response, interceptors, request) {\n  return applyInterceptors(response, interceptors, 'response', 'responseError', request);\n}\n\nfunction applyInterceptors(input, interceptors, successName, errorName) {\n  for (var _len = arguments.length, interceptorArgs = Array(_len > 4 ? _len - 4 : 0), _key = 4; _key < _len; _key++) {\n    interceptorArgs[_key - 4] = arguments[_key];\n  }\n\n  return (interceptors || []).reduce(function (chain, interceptor) {\n    var successHandler = interceptor[successName];\n    var errorHandler = interceptor[errorName];\n\n    return chain.then(successHandler && function (value) {\n      return successHandler.call.apply(successHandler, [interceptor, value].concat(interceptorArgs));\n    } || identity, errorHandler && function (reason) {\n      return errorHandler.call.apply(errorHandler, [interceptor, reason].concat(interceptorArgs));\n    } || thrower);\n  }, Promise.resolve(input));\n}\n\nfunction isJSON(str) {\n  try {\n    JSON.parse(str);\n  } catch (err) {\n    return false;\n  }\n\n  return true;\n}\n\nfunction identity(x) {\n  return x;\n}\n\nfunction thrower(x) {\n  throw x;\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(190)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXVyZWxpYS1mZXRjaC1jbGllbnQvZGlzdC9uYXRpdmUtbW9kdWxlcy9hdXJlbGlhLWZldGNoLWNsaWVudC5qcz9hOTA5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsb0dBQW9HLG1CQUFtQixFQUFFLG1CQUFtQixrR0FBa0c7Ozs7QUFJdk87QUFDUCxzREFBc0Q7QUFDdEQ7O0FBRU87QUFDUDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUNBQWlDLDBCQUEwQjtBQUMzRDs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFTztBQUNQOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLDBCQUEwQjtBQUMxQixLQUFLO0FBQ0w7QUFDQTtBQUNBLGtEQUFrRDtBQUNsRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7O0FBRUw7QUFDQSxHQUFHOztBQUVIO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdDQUFnQztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxzQkFBc0I7QUFDdEI7QUFDQSwwQkFBMEIsYUFBYTtBQUN2QyxzQ0FBc0MsYUFBYSxZQUFZLEVBQUU7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLCtGQUErRixhQUFhO0FBQzVHO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDIiwiZmlsZSI6IjEyLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cblxuXG5leHBvcnQgZnVuY3Rpb24ganNvbihib2R5LCByZXBsYWNlcikge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYm9keSAhPT0gdW5kZWZpbmVkID8gYm9keSA6IHt9LCByZXBsYWNlcik7XG59XG5cbmV4cG9ydCB2YXIgSHR0cENsaWVudENvbmZpZ3VyYXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEh0dHBDbGllbnRDb25maWd1cmF0aW9uKCkge1xuICAgIFxuXG4gICAgdGhpcy5iYXNlVXJsID0gJyc7XG4gICAgdGhpcy5kZWZhdWx0cyA9IHt9O1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzID0gW107XG4gIH1cblxuICBIdHRwQ2xpZW50Q29uZmlndXJhdGlvbi5wcm90b3R5cGUud2l0aEJhc2VVcmwgPSBmdW5jdGlvbiB3aXRoQmFzZVVybChiYXNlVXJsKSB7XG4gICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybDtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBIdHRwQ2xpZW50Q29uZmlndXJhdGlvbi5wcm90b3R5cGUud2l0aERlZmF1bHRzID0gZnVuY3Rpb24gd2l0aERlZmF1bHRzKGRlZmF1bHRzKSB7XG4gICAgdGhpcy5kZWZhdWx0cyA9IGRlZmF1bHRzO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEh0dHBDbGllbnRDb25maWd1cmF0aW9uLnByb3RvdHlwZS53aXRoSW50ZXJjZXB0b3IgPSBmdW5jdGlvbiB3aXRoSW50ZXJjZXB0b3IoaW50ZXJjZXB0b3IpIHtcbiAgICB0aGlzLmludGVyY2VwdG9ycy5wdXNoKGludGVyY2VwdG9yKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBIdHRwQ2xpZW50Q29uZmlndXJhdGlvbi5wcm90b3R5cGUudXNlU3RhbmRhcmRDb25maWd1cmF0aW9uID0gZnVuY3Rpb24gdXNlU3RhbmRhcmRDb25maWd1cmF0aW9uKCkge1xuICAgIHZhciBzdGFuZGFyZENvbmZpZyA9IHsgY3JlZGVudGlhbHM6ICdzYW1lLW9yaWdpbicgfTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuZGVmYXVsdHMsIHN0YW5kYXJkQ29uZmlnLCB0aGlzLmRlZmF1bHRzKTtcbiAgICByZXR1cm4gdGhpcy5yZWplY3RFcnJvclJlc3BvbnNlcygpO1xuICB9O1xuXG4gIEh0dHBDbGllbnRDb25maWd1cmF0aW9uLnByb3RvdHlwZS5yZWplY3RFcnJvclJlc3BvbnNlcyA9IGZ1bmN0aW9uIHJlamVjdEVycm9yUmVzcG9uc2VzKCkge1xuICAgIHJldHVybiB0aGlzLndpdGhJbnRlcmNlcHRvcih7IHJlc3BvbnNlOiByZWplY3RPbkVycm9yIH0pO1xuICB9O1xuXG4gIHJldHVybiBIdHRwQ2xpZW50Q29uZmlndXJhdGlvbjtcbn0oKTtcblxuZnVuY3Rpb24gcmVqZWN0T25FcnJvcihyZXNwb25zZSkge1xuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgcmVzcG9uc2U7XG4gIH1cblxuICByZXR1cm4gcmVzcG9uc2U7XG59XG5cbmV4cG9ydCB2YXIgSHR0cENsaWVudCA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gSHR0cENsaWVudCgpIHtcbiAgICBcblxuICAgIHRoaXMuYWN0aXZlUmVxdWVzdENvdW50ID0gMDtcbiAgICB0aGlzLmlzUmVxdWVzdGluZyA9IGZhbHNlO1xuICAgIHRoaXMuaXNDb25maWd1cmVkID0gZmFsc2U7XG4gICAgdGhpcy5iYXNlVXJsID0gJyc7XG4gICAgdGhpcy5kZWZhdWx0cyA9IG51bGw7XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMgPSBbXTtcblxuICAgIGlmICh0eXBlb2YgZmV0Y2ggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0h0dHBDbGllbnQgcmVxdWlyZXMgYSBGZXRjaCBBUEkgaW1wbGVtZW50YXRpb24sIGJ1dCB0aGUgY3VycmVudCBlbnZpcm9ubWVudCBkb2VzblxcJ3Qgc3VwcG9ydCBpdC4gWW91IG1heSBuZWVkIHRvIGxvYWQgYSBwb2x5ZmlsbCBzdWNoIGFzIGh0dHBzOi8vZ2l0aHViLmNvbS9naXRodWIvZmV0Y2gnKTtcbiAgICB9XG4gIH1cblxuICBIdHRwQ2xpZW50LnByb3RvdHlwZS5jb25maWd1cmUgPSBmdW5jdGlvbiBjb25maWd1cmUoY29uZmlnKSB7XG4gICAgdmFyIG5vcm1hbGl6ZWRDb25maWcgPSB2b2lkIDA7XG5cbiAgICBpZiAoKHR5cGVvZiBjb25maWcgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKGNvbmZpZykpID09PSAnb2JqZWN0Jykge1xuICAgICAgbm9ybWFsaXplZENvbmZpZyA9IHsgZGVmYXVsdHM6IGNvbmZpZyB9O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbm9ybWFsaXplZENvbmZpZyA9IG5ldyBIdHRwQ2xpZW50Q29uZmlndXJhdGlvbigpO1xuICAgICAgbm9ybWFsaXplZENvbmZpZy5iYXNlVXJsID0gdGhpcy5iYXNlVXJsO1xuICAgICAgbm9ybWFsaXplZENvbmZpZy5kZWZhdWx0cyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZGVmYXVsdHMpO1xuICAgICAgbm9ybWFsaXplZENvbmZpZy5pbnRlcmNlcHRvcnMgPSB0aGlzLmludGVyY2VwdG9ycztcblxuICAgICAgdmFyIGMgPSBjb25maWcobm9ybWFsaXplZENvbmZpZyk7XG4gICAgICBpZiAoSHR0cENsaWVudENvbmZpZ3VyYXRpb24ucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYykpIHtcbiAgICAgICAgbm9ybWFsaXplZENvbmZpZyA9IGM7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBjb25maWcnKTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdHMgPSBub3JtYWxpemVkQ29uZmlnLmRlZmF1bHRzO1xuICAgIGlmIChkZWZhdWx0cyAmJiBIZWFkZXJzLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGRlZmF1bHRzLmhlYWRlcnMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RlZmF1bHQgaGVhZGVycyBtdXN0IGJlIGEgcGxhaW4gb2JqZWN0LicpO1xuICAgIH1cblxuICAgIHRoaXMuYmFzZVVybCA9IG5vcm1hbGl6ZWRDb25maWcuYmFzZVVybDtcbiAgICB0aGlzLmRlZmF1bHRzID0gZGVmYXVsdHM7XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMgPSBub3JtYWxpemVkQ29uZmlnLmludGVyY2VwdG9ycyB8fCBbXTtcbiAgICB0aGlzLmlzQ29uZmlndXJlZCA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBIdHRwQ2xpZW50LnByb3RvdHlwZS5mZXRjaCA9IGZ1bmN0aW9uIChfZmV0Y2gpIHtcbiAgICBmdW5jdGlvbiBmZXRjaChfeCwgX3gyKSB7XG4gICAgICByZXR1cm4gX2ZldGNoLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgZmV0Y2gudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX2ZldGNoLnRvU3RyaW5nKCk7XG4gICAgfTtcblxuICAgIHJldHVybiBmZXRjaDtcbiAgfShmdW5jdGlvbiAoaW5wdXQsIGluaXQpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdHJhY2tSZXF1ZXN0U3RhcnQuY2FsbCh0aGlzKTtcblxuICAgIHZhciByZXF1ZXN0ID0gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gYnVpbGRSZXF1ZXN0LmNhbGwoX3RoaXMsIGlucHV0LCBpbml0LCBfdGhpcy5kZWZhdWx0cyk7XG4gICAgfSk7XG4gICAgdmFyIHByb21pc2UgPSBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0LCB0aGlzLmludGVyY2VwdG9ycykudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICB2YXIgcmVzcG9uc2UgPSBudWxsO1xuXG4gICAgICBpZiAoUmVzcG9uc2UucHJvdG90eXBlLmlzUHJvdG90eXBlT2YocmVzdWx0KSkge1xuICAgICAgICByZXNwb25zZSA9IHJlc3VsdDtcbiAgICAgIH0gZWxzZSBpZiAoUmVxdWVzdC5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihyZXN1bHQpKSB7XG4gICAgICAgIHJlcXVlc3QgPSBQcm9taXNlLnJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgcmVzcG9uc2UgPSBmZXRjaChyZXN1bHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBbiBpbnZhbGlkIHJlc3VsdCB3YXMgcmV0dXJuZWQgYnkgdGhlIGludGVyY2VwdG9yIGNoYWluLiBFeHBlY3RlZCBhIFJlcXVlc3Qgb3IgUmVzcG9uc2UgaW5zdGFuY2UsIGJ1dCBnb3QgWycgKyByZXN1bHQgKyAnXScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVxdWVzdC50aGVuKGZ1bmN0aW9uIChfcmVxdWVzdCkge1xuICAgICAgICByZXR1cm4gcHJvY2Vzc1Jlc3BvbnNlKHJlc3BvbnNlLCBfdGhpcy5pbnRlcmNlcHRvcnMsIF9yZXF1ZXN0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRyYWNrUmVxdWVzdEVuZFdpdGguY2FsbCh0aGlzLCBwcm9taXNlKTtcbiAgfSk7XG5cbiAgcmV0dXJuIEh0dHBDbGllbnQ7XG59KCk7XG5cbnZhciBhYnNvbHV0ZVVybFJlZ2V4cCA9IC9eKFthLXpdW2EtejAtOStcXC0uXSo6KT9cXC9cXC8vaTtcblxuZnVuY3Rpb24gdHJhY2tSZXF1ZXN0U3RhcnQoKSB7XG4gIHRoaXMuaXNSZXF1ZXN0aW5nID0gISEgKyt0aGlzLmFjdGl2ZVJlcXVlc3RDb3VudDtcbn1cblxuZnVuY3Rpb24gdHJhY2tSZXF1ZXN0RW5kKCkge1xuICB0aGlzLmlzUmVxdWVzdGluZyA9ICEhIC0tdGhpcy5hY3RpdmVSZXF1ZXN0Q291bnQ7XG59XG5cbmZ1bmN0aW9uIHRyYWNrUmVxdWVzdEVuZFdpdGgocHJvbWlzZSkge1xuICB2YXIgaGFuZGxlID0gdHJhY2tSZXF1ZXN0RW5kLmJpbmQodGhpcyk7XG4gIHByb21pc2UudGhlbihoYW5kbGUsIGhhbmRsZSk7XG4gIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBwYXJzZUhlYWRlclZhbHVlcyhoZWFkZXJzKSB7XG4gIHZhciBwYXJzZWRIZWFkZXJzID0ge307XG4gIGZvciAodmFyIG5hbWUgaW4gaGVhZGVycyB8fCB7fSkge1xuICAgIGlmIChoZWFkZXJzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICBwYXJzZWRIZWFkZXJzW25hbWVdID0gdHlwZW9mIGhlYWRlcnNbbmFtZV0gPT09ICdmdW5jdGlvbicgPyBoZWFkZXJzW25hbWVdKCkgOiBoZWFkZXJzW25hbWVdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcGFyc2VkSGVhZGVycztcbn1cblxuZnVuY3Rpb24gYnVpbGRSZXF1ZXN0KGlucHV0LCBpbml0KSB7XG4gIHZhciBkZWZhdWx0cyA9IHRoaXMuZGVmYXVsdHMgfHwge307XG4gIHZhciByZXF1ZXN0ID0gdm9pZCAwO1xuICB2YXIgYm9keSA9IHZvaWQgMDtcbiAgdmFyIHJlcXVlc3RDb250ZW50VHlwZSA9IHZvaWQgMDtcblxuICB2YXIgcGFyc2VkRGVmYXVsdEhlYWRlcnMgPSBwYXJzZUhlYWRlclZhbHVlcyhkZWZhdWx0cy5oZWFkZXJzKTtcbiAgaWYgKFJlcXVlc3QucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoaW5wdXQpKSB7XG4gICAgcmVxdWVzdCA9IGlucHV0O1xuICAgIHJlcXVlc3RDb250ZW50VHlwZSA9IG5ldyBIZWFkZXJzKHJlcXVlc3QuaGVhZGVycykuZ2V0KCdDb250ZW50LVR5cGUnKTtcbiAgfSBlbHNlIHtcbiAgICBpbml0IHx8IChpbml0ID0ge30pO1xuICAgIGJvZHkgPSBpbml0LmJvZHk7XG4gICAgdmFyIGJvZHlPYmogPSBib2R5ID8geyBib2R5OiBib2R5IH0gOiBudWxsO1xuICAgIHZhciByZXF1ZXN0SW5pdCA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRzLCB7IGhlYWRlcnM6IHt9IH0sIGluaXQsIGJvZHlPYmopO1xuICAgIHJlcXVlc3RDb250ZW50VHlwZSA9IG5ldyBIZWFkZXJzKHJlcXVlc3RJbml0LmhlYWRlcnMpLmdldCgnQ29udGVudC1UeXBlJyk7XG4gICAgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGdldFJlcXVlc3RVcmwodGhpcy5iYXNlVXJsLCBpbnB1dCksIHJlcXVlc3RJbml0KTtcbiAgfVxuICBpZiAoIXJlcXVlc3RDb250ZW50VHlwZSkge1xuICAgIGlmIChuZXcgSGVhZGVycyhwYXJzZWREZWZhdWx0SGVhZGVycykuaGFzKCdjb250ZW50LXR5cGUnKSkge1xuICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldCgnQ29udGVudC1UeXBlJywgbmV3IEhlYWRlcnMocGFyc2VkRGVmYXVsdEhlYWRlcnMpLmdldCgnY29udGVudC10eXBlJykpO1xuICAgIH0gZWxzZSBpZiAoYm9keSAmJiBpc0pTT04oYm9keSkpIHtcbiAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgfVxuICB9XG4gIHNldERlZmF1bHRIZWFkZXJzKHJlcXVlc3QuaGVhZGVycywgcGFyc2VkRGVmYXVsdEhlYWRlcnMpO1xuICBpZiAoYm9keSAmJiBCbG9iLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpICYmIGJvZHkudHlwZSkge1xuICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsIGJvZHkudHlwZSk7XG4gIH1cbiAgcmV0dXJuIHJlcXVlc3Q7XG59XG5cbmZ1bmN0aW9uIGdldFJlcXVlc3RVcmwoYmFzZVVybCwgdXJsKSB7XG4gIGlmIChhYnNvbHV0ZVVybFJlZ2V4cC50ZXN0KHVybCkpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgcmV0dXJuIChiYXNlVXJsIHx8ICcnKSArIHVybDtcbn1cblxuZnVuY3Rpb24gc2V0RGVmYXVsdEhlYWRlcnMoaGVhZGVycywgZGVmYXVsdEhlYWRlcnMpIHtcbiAgZm9yICh2YXIgbmFtZSBpbiBkZWZhdWx0SGVhZGVycyB8fCB7fSkge1xuICAgIGlmIChkZWZhdWx0SGVhZGVycy5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiAhaGVhZGVycy5oYXMobmFtZSkpIHtcbiAgICAgIGhlYWRlcnMuc2V0KG5hbWUsIGRlZmF1bHRIZWFkZXJzW25hbWVdKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc1JlcXVlc3QocmVxdWVzdCwgaW50ZXJjZXB0b3JzKSB7XG4gIHJldHVybiBhcHBseUludGVyY2VwdG9ycyhyZXF1ZXN0LCBpbnRlcmNlcHRvcnMsICdyZXF1ZXN0JywgJ3JlcXVlc3RFcnJvcicpO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzUmVzcG9uc2UocmVzcG9uc2UsIGludGVyY2VwdG9ycywgcmVxdWVzdCkge1xuICByZXR1cm4gYXBwbHlJbnRlcmNlcHRvcnMocmVzcG9uc2UsIGludGVyY2VwdG9ycywgJ3Jlc3BvbnNlJywgJ3Jlc3BvbnNlRXJyb3InLCByZXF1ZXN0KTtcbn1cblxuZnVuY3Rpb24gYXBwbHlJbnRlcmNlcHRvcnMoaW5wdXQsIGludGVyY2VwdG9ycywgc3VjY2Vzc05hbWUsIGVycm9yTmFtZSkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgaW50ZXJjZXB0b3JBcmdzID0gQXJyYXkoX2xlbiA+IDQgPyBfbGVuIC0gNCA6IDApLCBfa2V5ID0gNDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGludGVyY2VwdG9yQXJnc1tfa2V5IC0gNF0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gKGludGVyY2VwdG9ycyB8fCBbXSkucmVkdWNlKGZ1bmN0aW9uIChjaGFpbiwgaW50ZXJjZXB0b3IpIHtcbiAgICB2YXIgc3VjY2Vzc0hhbmRsZXIgPSBpbnRlcmNlcHRvcltzdWNjZXNzTmFtZV07XG4gICAgdmFyIGVycm9ySGFuZGxlciA9IGludGVyY2VwdG9yW2Vycm9yTmFtZV07XG5cbiAgICByZXR1cm4gY2hhaW4udGhlbihzdWNjZXNzSGFuZGxlciAmJiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHJldHVybiBzdWNjZXNzSGFuZGxlci5jYWxsLmFwcGx5KHN1Y2Nlc3NIYW5kbGVyLCBbaW50ZXJjZXB0b3IsIHZhbHVlXS5jb25jYXQoaW50ZXJjZXB0b3JBcmdzKSk7XG4gICAgfSB8fCBpZGVudGl0eSwgZXJyb3JIYW5kbGVyICYmIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIHJldHVybiBlcnJvckhhbmRsZXIuY2FsbC5hcHBseShlcnJvckhhbmRsZXIsIFtpbnRlcmNlcHRvciwgcmVhc29uXS5jb25jYXQoaW50ZXJjZXB0b3JBcmdzKSk7XG4gICAgfSB8fCB0aHJvd2VyKTtcbiAgfSwgUHJvbWlzZS5yZXNvbHZlKGlucHV0KSk7XG59XG5cbmZ1bmN0aW9uIGlzSlNPTihzdHIpIHtcbiAgdHJ5IHtcbiAgICBKU09OLnBhcnNlKHN0cik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBpZGVudGl0eSh4KSB7XG4gIHJldHVybiB4O1xufVxuXG5mdW5jdGlvbiB0aHJvd2VyKHgpIHtcbiAgdGhyb3cgeDtcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///12\n")},120:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var enIl = moment.defineLocale('en-il', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Today at] LT',\n            nextDay : '[Tomorrow at] LT',\n            nextWeek : 'dddd [at] LT',\n            lastDay : '[Yesterday at] LT',\n            lastWeek : '[Last] dddd [at] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            m : 'a minute',\n            mm : '%d minutes',\n            h : 'an hour',\n            hh : '%d hours',\n            d : 'a day',\n            dd : '%d days',\n            M : 'a month',\n            MM : '%d months',\n            y : 'a year',\n            yy : '%d years'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        }\n    });\n\n    return enIl;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1pbC5qcz83MzMzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiMTIwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgZW5JbCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2VuLWlsJywge1xuICAgICAgICBtb250aHMgOiAnSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlcicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAnSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzIDogJ1N1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ1N1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAnU3VfTW9fVHVfV2VfVGhfRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1tUb2RheSBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICdbVG9tb3Jyb3cgYXRdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrIDogJ2RkZGQgW2F0XSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5IDogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogJ1tMYXN0XSBkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ2luICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAnJXMgYWdvJyxcbiAgICAgICAgICAgIHMgOiAnYSBmZXcgc2Vjb25kcycsXG4gICAgICAgICAgICBtIDogJ2EgbWludXRlJyxcbiAgICAgICAgICAgIG1tIDogJyVkIG1pbnV0ZXMnLFxuICAgICAgICAgICAgaCA6ICdhbiBob3VyJyxcbiAgICAgICAgICAgIGhoIDogJyVkIGhvdXJzJyxcbiAgICAgICAgICAgIGQgOiAnYSBkYXknLFxuICAgICAgICAgICAgZGQgOiAnJWQgZGF5cycsXG4gICAgICAgICAgICBNIDogJ2EgbW9udGgnLFxuICAgICAgICAgICAgTU0gOiAnJWQgbW9udGhzJyxcbiAgICAgICAgICAgIHkgOiAnYSB5ZWFyJyxcbiAgICAgICAgICAgIHl5IDogJyVkIHllYXJzJ1xuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oc3R8bmR8cmR8dGgpLyxcbiAgICAgICAgb3JkaW5hbCA6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKH5+KG51bWJlciAlIDEwMCAvIDEwKSA9PT0gMSkgPyAndGgnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMSkgPyAnc3QnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMikgPyAnbmQnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMykgPyAncmQnIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBlbklsO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///120\n")},121:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var enIe = moment.defineLocale('en-ie', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD-MM-YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Today at] LT',\n            nextDay : '[Tomorrow at] LT',\n            nextWeek : 'dddd [at] LT',\n            lastDay : '[Yesterday at] LT',\n            lastWeek : '[Last] dddd [at] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            ss : '%d seconds',\n            m : 'a minute',\n            mm : '%d minutes',\n            h : 'an hour',\n            hh : '%d hours',\n            d : 'a day',\n            dd : '%d days',\n            M : 'a month',\n            MM : '%d months',\n            y : 'a year',\n            yy : '%d years'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return enIe;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1pZS5qcz9lMWQzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiMTIxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgZW5JZSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2VuLWllJywge1xuICAgICAgICBtb250aHMgOiAnSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlcicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAnSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzIDogJ1N1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ1N1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAnU3VfTW9fVHVfV2VfVGhfRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQtTU0tWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgOiAnW1RvZGF5IGF0XSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5IDogJ1tUb21vcnJvdyBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnZGRkZCBbYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXkgOiAnW1llc3RlcmRheSBhdF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiAnW0xhc3RdIGRkZGQgW2F0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnaW4gJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICclcyBhZ28nLFxuICAgICAgICAgICAgcyA6ICdhIGZldyBzZWNvbmRzJyxcbiAgICAgICAgICAgIHNzIDogJyVkIHNlY29uZHMnLFxuICAgICAgICAgICAgbSA6ICdhIG1pbnV0ZScsXG4gICAgICAgICAgICBtbSA6ICclZCBtaW51dGVzJyxcbiAgICAgICAgICAgIGggOiAnYW4gaG91cicsXG4gICAgICAgICAgICBoaCA6ICclZCBob3VycycsXG4gICAgICAgICAgICBkIDogJ2EgZGF5JyxcbiAgICAgICAgICAgIGRkIDogJyVkIGRheXMnLFxuICAgICAgICAgICAgTSA6ICdhIG1vbnRoJyxcbiAgICAgICAgICAgIE1NIDogJyVkIG1vbnRocycsXG4gICAgICAgICAgICB5IDogJ2EgeWVhcicsXG4gICAgICAgICAgICB5eSA6ICclZCB5ZWFycydcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHN0fG5kfHJkfHRoKS8sXG4gICAgICAgIG9yZGluYWwgOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh+fihudW1iZXIgJSAxMDAgLyAxMCkgPT09IDEpID8gJ3RoJyA6XG4gICAgICAgICAgICAgICAgKGIgPT09IDEpID8gJ3N0JyA6XG4gICAgICAgICAgICAgICAgKGIgPT09IDIpID8gJ25kJyA6XG4gICAgICAgICAgICAgICAgKGIgPT09IDMpID8gJ3JkJyA6ICd0aCc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA0ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBlbkllO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///121\n")},122:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var enGb = moment.defineLocale('en-gb', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Today at] LT',\n            nextDay : '[Tomorrow at] LT',\n            nextWeek : 'dddd [at] LT',\n            lastDay : '[Yesterday at] LT',\n            lastWeek : '[Last] dddd [at] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            ss : '%d seconds',\n            m : 'a minute',\n            mm : '%d minutes',\n            h : 'an hour',\n            hh : '%d hours',\n            d : 'a day',\n            dd : '%d days',\n            M : 'a month',\n            MM : '%d months',\n            y : 'a year',\n            yy : '%d years'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return enGb;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1nYi5qcz8zOWE2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiMTIyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgZW5HYiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2VuLWdiJywge1xuICAgICAgICBtb250aHMgOiAnSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlcicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAnSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzIDogJ1N1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ1N1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAnU3VfTW9fVHVfV2VfVGhfRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1tUb2RheSBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICdbVG9tb3Jyb3cgYXRdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrIDogJ2RkZGQgW2F0XSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5IDogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogJ1tMYXN0XSBkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ2luICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAnJXMgYWdvJyxcbiAgICAgICAgICAgIHMgOiAnYSBmZXcgc2Vjb25kcycsXG4gICAgICAgICAgICBzcyA6ICclZCBzZWNvbmRzJyxcbiAgICAgICAgICAgIG0gOiAnYSBtaW51dGUnLFxuICAgICAgICAgICAgbW0gOiAnJWQgbWludXRlcycsXG4gICAgICAgICAgICBoIDogJ2FuIGhvdXInLFxuICAgICAgICAgICAgaGggOiAnJWQgaG91cnMnLFxuICAgICAgICAgICAgZCA6ICdhIGRheScsXG4gICAgICAgICAgICBkZCA6ICclZCBkYXlzJyxcbiAgICAgICAgICAgIE0gOiAnYSBtb250aCcsXG4gICAgICAgICAgICBNTSA6ICclZCBtb250aHMnLFxuICAgICAgICAgICAgeSA6ICdhIHllYXInLFxuICAgICAgICAgICAgeXkgOiAnJWQgeWVhcnMnXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdHxuZHxyZHx0aCkvLFxuICAgICAgICBvcmRpbmFsIDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAofn4obnVtYmVyICUgMTAwIC8gMTApID09PSAxKSA/ICd0aCcgOlxuICAgICAgICAgICAgICAgIChiID09PSAxKSA/ICdzdCcgOlxuICAgICAgICAgICAgICAgIChiID09PSAyKSA/ICduZCcgOlxuICAgICAgICAgICAgICAgIChiID09PSAzKSA/ICdyZCcgOiAndGgnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNCAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZW5HYjtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///122\n")},123:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var enCa = moment.defineLocale('en-ca', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'YYYY-MM-DD',\n            LL : 'MMMM D, YYYY',\n            LLL : 'MMMM D, YYYY h:mm A',\n            LLLL : 'dddd, MMMM D, YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : '[Today at] LT',\n            nextDay : '[Tomorrow at] LT',\n            nextWeek : 'dddd [at] LT',\n            lastDay : '[Yesterday at] LT',\n            lastWeek : '[Last] dddd [at] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            ss : '%d seconds',\n            m : 'a minute',\n            mm : '%d minutes',\n            h : 'an hour',\n            hh : '%d hours',\n            d : 'a day',\n            dd : '%d days',\n            M : 'a month',\n            MM : '%d months',\n            y : 'a year',\n            yy : '%d years'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        }\n    });\n\n    return enCa;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1jYS5qcz8zODg2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiIxMjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBlbkNhID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZW4tY2EnLCB7XG4gICAgICAgIG1vbnRocyA6ICdKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICdKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXMgOiAnU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXknLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAnU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICdTdV9Nb19UdV9XZV9UaF9Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdoOm1tIEEnLFxuICAgICAgICAgICAgTFRTIDogJ2g6bW06c3MgQScsXG4gICAgICAgICAgICBMIDogJ1lZWVktTU0tREQnLFxuICAgICAgICAgICAgTEwgOiAnTU1NTSBELCBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdNTU1NIEQsIFlZWVkgaDptbSBBJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgTU1NTSBELCBZWVlZIGg6bW0gQSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1tUb2RheSBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICdbVG9tb3Jyb3cgYXRdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrIDogJ2RkZGQgW2F0XSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5IDogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogJ1tMYXN0XSBkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ2luICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAnJXMgYWdvJyxcbiAgICAgICAgICAgIHMgOiAnYSBmZXcgc2Vjb25kcycsXG4gICAgICAgICAgICBzcyA6ICclZCBzZWNvbmRzJyxcbiAgICAgICAgICAgIG0gOiAnYSBtaW51dGUnLFxuICAgICAgICAgICAgbW0gOiAnJWQgbWludXRlcycsXG4gICAgICAgICAgICBoIDogJ2FuIGhvdXInLFxuICAgICAgICAgICAgaGggOiAnJWQgaG91cnMnLFxuICAgICAgICAgICAgZCA6ICdhIGRheScsXG4gICAgICAgICAgICBkZCA6ICclZCBkYXlzJyxcbiAgICAgICAgICAgIE0gOiAnYSBtb250aCcsXG4gICAgICAgICAgICBNTSA6ICclZCBtb250aHMnLFxuICAgICAgICAgICAgeSA6ICdhIHllYXInLFxuICAgICAgICAgICAgeXkgOiAnJWQgeWVhcnMnXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdHxuZHxyZHx0aCkvLFxuICAgICAgICBvcmRpbmFsIDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAofn4obnVtYmVyICUgMTAwIC8gMTApID09PSAxKSA/ICd0aCcgOlxuICAgICAgICAgICAgICAgIChiID09PSAxKSA/ICdzdCcgOlxuICAgICAgICAgICAgICAgIChiID09PSAyKSA/ICduZCcgOlxuICAgICAgICAgICAgICAgIChiID09PSAzKSA/ICdyZCcgOiAndGgnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVuQ2E7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///123\n")},124:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var enAu = moment.defineLocale('en-au', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY h:mm A',\n            LLLL : 'dddd, D MMMM YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : '[Today at] LT',\n            nextDay : '[Tomorrow at] LT',\n            nextWeek : 'dddd [at] LT',\n            lastDay : '[Yesterday at] LT',\n            lastWeek : '[Last] dddd [at] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            ss : '%d seconds',\n            m : 'a minute',\n            mm : '%d minutes',\n            h : 'an hour',\n            hh : '%d hours',\n            d : 'a day',\n            dd : '%d days',\n            M : 'a month',\n            MM : '%d months',\n            y : 'a year',\n            yy : '%d years'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return enAu;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1hdS5qcz8wZTZiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiMTI0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgZW5BdSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2VuLWF1Jywge1xuICAgICAgICBtb250aHMgOiAnSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlcicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAnSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzIDogJ1N1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ1N1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAnU3VfTW9fVHVfV2VfVGhfRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnaDptbSBBJyxcbiAgICAgICAgICAgIExUUyA6ICdoOm1tOnNzIEEnLFxuICAgICAgICAgICAgTCA6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdEIE1NTU0gWVlZWSBoOm1tIEEnLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEnXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICdbVG9kYXkgYXRdIExUJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW1RvbW9ycm93IGF0XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdbWWVzdGVyZGF5IGF0XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlayA6ICdbTGFzdF0gZGRkZCBbYXRdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICdpbiAlcycsXG4gICAgICAgICAgICBwYXN0IDogJyVzIGFnbycsXG4gICAgICAgICAgICBzIDogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICAgICAgc3MgOiAnJWQgc2Vjb25kcycsXG4gICAgICAgICAgICBtIDogJ2EgbWludXRlJyxcbiAgICAgICAgICAgIG1tIDogJyVkIG1pbnV0ZXMnLFxuICAgICAgICAgICAgaCA6ICdhbiBob3VyJyxcbiAgICAgICAgICAgIGhoIDogJyVkIGhvdXJzJyxcbiAgICAgICAgICAgIGQgOiAnYSBkYXknLFxuICAgICAgICAgICAgZGQgOiAnJWQgZGF5cycsXG4gICAgICAgICAgICBNIDogJ2EgbW9udGgnLFxuICAgICAgICAgICAgTU0gOiAnJWQgbW9udGhzJyxcbiAgICAgICAgICAgIHkgOiAnYSB5ZWFyJyxcbiAgICAgICAgICAgIHl5IDogJyVkIHllYXJzJ1xuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oc3R8bmR8cmR8dGgpLyxcbiAgICAgICAgb3JkaW5hbCA6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKH5+KG51bWJlciAlIDEwMCAvIDEwKSA9PT0gMSkgPyAndGgnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMSkgPyAnc3QnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMikgPyAnbmQnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMykgPyAncmQnIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVuQXU7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///124\n")},125:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n    function isFunction(input) {\n        return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n    }\n\n\n    var el = moment.defineLocale('el', {\n        monthsNominativeEl : 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split('_'),\n        monthsGenitiveEl : 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split('_'),\n        months : function (momentToFormat, format) {\n            if (!momentToFormat) {\n                return this._monthsNominativeEl;\n            } else if (typeof format === 'string' && /D/.test(format.substring(0, format.indexOf('MMMM')))) { // if there is a day number before 'MMMM'\n                return this._monthsGenitiveEl[momentToFormat.month()];\n            } else {\n                return this._monthsNominativeEl[momentToFormat.month()];\n            }\n        },\n        monthsShort : 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'),\n        weekdays : 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split('_'),\n        weekdaysShort : 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'),\n        weekdaysMin : 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'),\n        meridiem : function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'μμ' : 'ΜΜ';\n            } else {\n                return isLower ? 'πμ' : 'ΠΜ';\n            }\n        },\n        isPM : function (input) {\n            return ((input + '').toLowerCase()[0] === 'μ');\n        },\n        meridiemParse : /[ΠΜ]\\.?Μ?\\.?/i,\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY h:mm A',\n            LLLL : 'dddd, D MMMM YYYY h:mm A'\n        },\n        calendarEl : {\n            sameDay : '[Σήμερα {}] LT',\n            nextDay : '[Αύριο {}] LT',\n            nextWeek : 'dddd [{}] LT',\n            lastDay : '[Χθες {}] LT',\n            lastWeek : function () {\n                switch (this.day()) {\n                    case 6:\n                        return '[το προηγούμενο] dddd [{}] LT';\n                    default:\n                        return '[την προηγούμενη] dddd [{}] LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        calendar : function (key, mom) {\n            var output = this._calendarEl[key],\n                hours = mom && mom.hours();\n            if (isFunction(output)) {\n                output = output.apply(mom);\n            }\n            return output.replace('{}', (hours % 12 === 1 ? 'στη' : 'στις'));\n        },\n        relativeTime : {\n            future : 'σε %s',\n            past : '%s πριν',\n            s : 'λίγα δευτερόλεπτα',\n            ss : '%d δευτερόλεπτα',\n            m : 'ένα λεπτό',\n            mm : '%d λεπτά',\n            h : 'μία ώρα',\n            hh : '%d ώρες',\n            d : 'μία μέρα',\n            dd : '%d μέρες',\n            M : 'ένας μήνας',\n            MM : '%d μήνες',\n            y : 'ένας χρόνος',\n            yy : '%d χρόνια'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}η/,\n        ordinal: '%dη',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4st is the first week of the year.\n        }\n    });\n\n    return el;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbC5qcz84ZDQ3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7O0FBRTVCO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxnR0FBZ0c7QUFDN0c7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLGlDQUFpQztBQUNqQyxnQ0FBZ0M7QUFDaEMsZ0NBQWdDO0FBQ2hDLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQSx5REFBeUQ7QUFDekQ7QUFDQSwwREFBMEQ7QUFDMUQ7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiIxMjUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICBmdW5jdGlvbiBpc0Z1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dCBpbnN0YW5jZW9mIEZ1bmN0aW9uIHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG4gICAgfVxuXG5cbiAgICB2YXIgZWwgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdlbCcsIHtcbiAgICAgICAgbW9udGhzTm9taW5hdGl2ZUVsIDogJ86ZzrHOvc6/z4XOrM+BzrnOv8+CX86mzrXOss+Bzr/Phc6sz4HOuc6/z4JfzpzOrM+Bz4TOuc6/z4JfzpHPgM+Bzq/Ou865zr/Pgl/OnM6szrnOv8+CX86Zzr/Pjc69zrnOv8+CX86Zzr/Pjc67zrnOv8+CX86Rz43Os86/z4XPg8+Ezr/Pgl/Oo861z4DPhM6tzrzOss+BzrnOv8+CX86fzrrPhM+OzrLPgc65zr/Pgl/Onc6/zq3OvM6yz4HOuc6/z4JfzpTOtc66zq3OvM6yz4HOuc6/z4InLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc0dlbml0aXZlRWwgOiAnzpnOsc69zr/Phc6xz4HOr86/z4VfzqbOtc6yz4HOv8+FzrHPgc6vzr/PhV/OnM6xz4HPhM6vzr/PhV/Okc+Az4HOuc67zq/Ov8+FX86czrHOkM6/z4VfzpnOv8+Fzr3Or86/z4VfzpnOv8+FzrvOr86/z4VfzpHPhc6zzr/Pjc+Dz4TOv8+FX86jzrXPgM+EzrXOvM6yz4HOr86/z4Vfzp/Ous+Ez4nOss+Bzq/Ov8+FX86dzr/Otc68zrLPgc6vzr/PhV/OlM61zrrOtc68zrLPgc6vzr/PhScuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzIDogZnVuY3Rpb24gKG1vbWVudFRvRm9ybWF0LCBmb3JtYXQpIHtcbiAgICAgICAgICAgIGlmICghbW9tZW50VG9Gb3JtYXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzTm9taW5hdGl2ZUVsO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZm9ybWF0ID09PSAnc3RyaW5nJyAmJiAvRC8udGVzdChmb3JtYXQuc3Vic3RyaW5nKDAsIGZvcm1hdC5pbmRleE9mKCdNTU1NJykpKSkgeyAvLyBpZiB0aGVyZSBpcyBhIGRheSBudW1iZXIgYmVmb3JlICdNTU1NJ1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNHZW5pdGl2ZUVsW21vbWVudFRvRm9ybWF0Lm1vbnRoKCldO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzTm9taW5hdGl2ZUVsW21vbWVudFRvRm9ybWF0Lm1vbnRoKCldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtb250aHNTaG9ydCA6ICfOmc6xzr1fzqbOtc6yX86czrHPgV/Okc+Az4FfzpzOsc+KX86Zzr/Phc69X86Zzr/Phc67X86Rz4XOs1/Oo861z4Bfzp/Ous+EX86dzr/OtV/OlM61zronLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzIDogJ86az4XPgc65zrHOus6uX86UzrXPhc+Ezq3Pgc6xX86kz4HOr8+EzrdfzqTOtc+EzqzPgc+EzrdfzqDOrc68z4DPhM63X86gzrHPgc6xz4POus61z4XOrl/Oo86szrLOss6xz4TOvycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICfOms+Fz4FfzpTOtc+FX86kz4HOuV/OpM61z4RfzqDOtc68X86gzrHPgV/Oo86xzrInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ86az4VfzpTOtV/OpM+BX86kzrVfzqDOtV/OoM6xX86jzrEnLnNwbGl0KCdfJyksXG4gICAgICAgIG1lcmlkaWVtIDogZnVuY3Rpb24gKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91cnMgPiAxMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ868zrwnIDogJ86czpwnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICfPgM68JyA6ICfOoM6cJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgaXNQTSA6IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuICgoaW5wdXQgKyAnJykudG9Mb3dlckNhc2UoKVswXSA9PT0gJ868Jyk7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2UgOiAvW86gzpxdXFwuP86cP1xcLj8vaSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdoOm1tIEEnLFxuICAgICAgICAgICAgTFRTIDogJ2g6bW06c3MgQScsXG4gICAgICAgICAgICBMIDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIGg6bW0gQScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXJFbCA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgOiAnW86jzq7OvM61z4HOsSB7fV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICdbzpHPjc+BzrnOvyB7fV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnZGRkZCBbe31dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXkgOiAnW86nzrjOtc+CIHt9XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlayA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbz4TOvyDPgM+Bzr/Ot86zzr/Pjc68zrXOvc6/XSBkZGRkIFt7fV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbz4TOt869IM+Az4HOv863zrPOv8+NzrzOtc69zrddIGRkZGQgW3t9XSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDogZnVuY3Rpb24gKGtleSwgbW9tKSB7XG4gICAgICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fY2FsZW5kYXJFbFtrZXldLFxuICAgICAgICAgICAgICAgIGhvdXJzID0gbW9tICYmIG1vbS5ob3VycygpO1xuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ob3V0cHV0KSkge1xuICAgICAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dC5hcHBseShtb20pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dC5yZXBsYWNlKCd7fScsIChob3VycyAlIDEyID09PSAxID8gJ8+Dz4TOtycgOiAnz4PPhM65z4InKSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICfPg861ICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAnJXMgz4DPgc65zr0nLFxuICAgICAgICAgICAgcyA6ICfOu86vzrPOsSDOtM61z4XPhM61z4HPjM67zrXPgM+EzrEnLFxuICAgICAgICAgICAgc3MgOiAnJWQgzrTOtc+Fz4TOtc+Bz4zOu861z4DPhM6xJyxcbiAgICAgICAgICAgIG0gOiAnzq3Ovc6xIM67zrXPgM+Ez4wnLFxuICAgICAgICAgICAgbW0gOiAnJWQgzrvOtc+Az4TOrCcsXG4gICAgICAgICAgICBoIDogJ868zq/OsSDPjs+BzrEnLFxuICAgICAgICAgICAgaGggOiAnJWQgz47Pgc61z4InLFxuICAgICAgICAgICAgZCA6ICfOvM6vzrEgzrzOrc+BzrEnLFxuICAgICAgICAgICAgZGQgOiAnJWQgzrzOrc+BzrXPgicsXG4gICAgICAgICAgICBNIDogJ86tzr3Osc+CIM68zq7Ovc6xz4InLFxuICAgICAgICAgICAgTU0gOiAnJWQgzrzOrs69zrXPgicsXG4gICAgICAgICAgICB5IDogJ86tzr3Osc+CIM+Hz4HPjM69zr/PgicsXG4gICAgICAgICAgICB5eSA6ICclZCDPh8+Bz4zOvc65zrEnXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfc63LyxcbiAgICAgICAgb3JkaW5hbDogJyVkzrcnLFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA0ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0c3QgaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBlbDtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///125\n")},126:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var months = [\n        'ޖެނުއަރީ',\n        'ފެބްރުއަރީ',\n        'މާރިޗު',\n        'އޭޕްރީލު',\n        'މޭ',\n        'ޖޫން',\n        'ޖުލައި',\n        'އޯގަސްޓު',\n        'ސެޕްޓެމްބަރު',\n        'އޮކްޓޯބަރު',\n        'ނޮވެމްބަރު',\n        'ޑިސެމްބަރު'\n    ], weekdays = [\n        'އާދިއްތަ',\n        'ހޯމަ',\n        'އަންގާރަ',\n        'ބުދަ',\n        'ބުރާސްފަތި',\n        'ހުކުރު',\n        'ހޮނިހިރު'\n    ];\n\n    var dv = moment.defineLocale('dv', {\n        months : months,\n        monthsShort : months,\n        weekdays : weekdays,\n        weekdaysShort : weekdays,\n        weekdaysMin : 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'),\n        longDateFormat : {\n\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'D/M/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /މކ|މފ/,\n        isPM : function (input) {\n            return 'މފ' === input;\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'މކ';\n            } else {\n                return 'މފ';\n            }\n        },\n        calendar : {\n            sameDay : '[މިއަދު] LT',\n            nextDay : '[މާދަމާ] LT',\n            nextWeek : 'dddd LT',\n            lastDay : '[އިއްޔެ] LT',\n            lastWeek : '[ފާއިތުވި] dddd LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'ތެރޭގައި %s',\n            past : 'ކުރިން %s',\n            s : 'ސިކުންތުކޮޅެއް',\n            ss : 'd% ސިކުންތު',\n            m : 'މިނިޓެއް',\n            mm : 'މިނިޓު %d',\n            h : 'ގަޑިއިރެއް',\n            hh : 'ގަޑިއިރު %d',\n            d : 'ދުވަހެއް',\n            dd : 'ދުވަސް %d',\n            M : 'މަހެއް',\n            MM : 'މަސް %d',\n            y : 'އަހަރެއް',\n            yy : 'އަހަރު %d'\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week : {\n            dow : 7,  // Sunday is the first day of the week.\n            doy : 12  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return dv;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kdi5qcz81OThhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiMTI2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgbW9udGhzID0gW1xuICAgICAgICAn3pberN6C3qreh96m3oPeqScsXG4gICAgICAgICfeit6s3oTesN6D3qreh96m3oPeqScsXG4gICAgICAgICfeid6n3oPeqN6X3qonLFxuICAgICAgICAn3oferd6V3rDeg96p3o3eqicsXG4gICAgICAgICfeid6tJyxcbiAgICAgICAgJ96W3qvegt6wJyxcbiAgICAgICAgJ96W3qrejd6m3ofeqCcsXG4gICAgICAgICfeh96v3o7ept6Q3rDek96qJyxcbiAgICAgICAgJ96Q3qzeld6w3pPerN6J3rDehN6m3oPeqicsXG4gICAgICAgICfeh96u3obesN6T3q/ehN6m3oPeqicsXG4gICAgICAgICfegt6u3ojerN6J3rDehN6m3oPeqicsXG4gICAgICAgICfekd6o3pDerN6J3rDehN6m3oPeqidcbiAgICBdLCB3ZWVrZGF5cyA9IFtcbiAgICAgICAgJ96H3qfei96o3ofesN6M3qYnLFxuICAgICAgICAn3oDer96J3qYnLFxuICAgICAgICAn3ofept6C3rDejt6n3oPepicsXG4gICAgICAgICfehN6q3ovepicsXG4gICAgICAgICfehN6q3oPep96Q3rDeit6m3ozeqCcsXG4gICAgICAgICfegN6q3obeqt6D3qonLFxuICAgICAgICAn3oDert6C3qjegN6o3oPeqidcbiAgICBdO1xuXG4gICAgdmFyIGR2ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZHYnLCB7XG4gICAgICAgIG1vbnRocyA6IG1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQgOiBtb250aHMsXG4gICAgICAgIHdlZWtkYXlzIDogd2Vla2RheXMsXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiB3ZWVrZGF5cyxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAn3ofep96L3qhf3oDer96J3qZf3ofept6C3rBf3oTeqt6L3qZf3oTeqt6D3qdf3oDeqt6G3qpf3oDert6C3qgnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuXG4gICAgICAgICAgICBMVCA6ICdISDptbScsXG4gICAgICAgICAgICBMVFMgOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdEL00vWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv3onehnzeid6KLyxcbiAgICAgICAgaXNQTSA6IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuICfeid6KJyA9PT0gaW5wdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtIDogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn3onehic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn3oneiic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICdb3oneqN6H3qbei96qXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5IDogJ1veid6n3ovept6J3qddIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrIDogJ2RkZGQgTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdb3ofeqN6H3rDelN6sXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlayA6ICdb3orep96H3qjejN6q3ojeqF0gZGRkZCBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAn3ozerN6D3q3ejt6m3ofeqCAlcycsXG4gICAgICAgICAgICBwYXN0IDogJ96G3qreg96o3oLesCAlcycsXG4gICAgICAgICAgICBzIDogJ96Q3qjeht6q3oLesN6M3qreht6u3oXerN6H3rAnLFxuICAgICAgICAgICAgc3MgOiAnZCUg3pDeqN6G3qregt6w3ozeqicsXG4gICAgICAgICAgICBtIDogJ96J3qjegt6o3pPerN6H3rAnLFxuICAgICAgICAgICAgbW0gOiAn3oneqN6C3qjek96qICVkJyxcbiAgICAgICAgICAgIGggOiAn3o7ept6R3qjeh96o3oPerN6H3rAnLFxuICAgICAgICAgICAgaGggOiAn3o7ept6R3qjeh96o3oPeqiAlZCcsXG4gICAgICAgICAgICBkIDogJ96L3qreiN6m3oDerN6H3rAnLFxuICAgICAgICAgICAgZGQgOiAn3oveqt6I3qbekN6wICVkJyxcbiAgICAgICAgICAgIE0gOiAn3onept6A3qzeh96wJyxcbiAgICAgICAgICAgIE1NIDogJ96J3qbekN6wICVkJyxcbiAgICAgICAgICAgIHkgOiAn3ofept6A3qbeg96s3ofesCcsXG4gICAgICAgICAgICB5eSA6ICfeh96m3oDept6D3qogJWQnXG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL9iML2csICcsJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvLC9nLCAn2IwnKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDcsICAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDEyICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxc3QgaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBkdjtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///126\n")},127:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            'm': ['eine Minute', 'einer Minute'],\n            'h': ['eine Stunde', 'einer Stunde'],\n            'd': ['ein Tag', 'einem Tag'],\n            'dd': [number + ' Tage', number + ' Tagen'],\n            'M': ['ein Monat', 'einem Monat'],\n            'MM': [number + ' Monate', number + ' Monaten'],\n            'y': ['ein Jahr', 'einem Jahr'],\n            'yy': [number + ' Jahre', number + ' Jahren']\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var deCh = moment.defineLocale('de-ch', {\n        months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n        monthsShort : 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n        weekdaysShort : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY HH:mm',\n            LLLL : 'dddd, D. MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : 'vor %s',\n            s : 'ein paar Sekunden',\n            ss : '%d Sekunden',\n            m : processRelativeTime,\n            mm : '%d Minuten',\n            h : processRelativeTime,\n            hh : '%d Stunden',\n            d : processRelativeTime,\n            dd : processRelativeTime,\n            M : processRelativeTime,\n            MM : processRelativeTime,\n            y : processRelativeTime,\n            yy : processRelativeTime\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return deCh;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kZS1jaC5qcz9iYjcxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiMTI3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzUmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgZm9ybWF0ID0ge1xuICAgICAgICAgICAgJ20nOiBbJ2VpbmUgTWludXRlJywgJ2VpbmVyIE1pbnV0ZSddLFxuICAgICAgICAgICAgJ2gnOiBbJ2VpbmUgU3R1bmRlJywgJ2VpbmVyIFN0dW5kZSddLFxuICAgICAgICAgICAgJ2QnOiBbJ2VpbiBUYWcnLCAnZWluZW0gVGFnJ10sXG4gICAgICAgICAgICAnZGQnOiBbbnVtYmVyICsgJyBUYWdlJywgbnVtYmVyICsgJyBUYWdlbiddLFxuICAgICAgICAgICAgJ00nOiBbJ2VpbiBNb25hdCcsICdlaW5lbSBNb25hdCddLFxuICAgICAgICAgICAgJ01NJzogW251bWJlciArICcgTW9uYXRlJywgbnVtYmVyICsgJyBNb25hdGVuJ10sXG4gICAgICAgICAgICAneSc6IFsnZWluIEphaHInLCAnZWluZW0gSmFociddLFxuICAgICAgICAgICAgJ3l5JzogW251bWJlciArICcgSmFocmUnLCBudW1iZXIgKyAnIEphaHJlbiddXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gZm9ybWF0W2tleV1bMF0gOiBmb3JtYXRba2V5XVsxXTtcbiAgICB9XG5cbiAgICB2YXIgZGVDaCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2RlLWNoJywge1xuICAgICAgICBtb250aHMgOiAnSmFudWFyX0ZlYnJ1YXJfTcOkcnpfQXByaWxfTWFpX0p1bmlfSnVsaV9BdWd1c3RfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGV6ZW1iZXInLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ0phbi5fRmViLl9Nw6Ryel9BcHIuX01haV9KdW5pX0p1bGlfQXVnLl9TZXAuX09rdC5fTm92Ll9EZXouJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0IDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXMgOiAnU29ubnRhZ19Nb250YWdfRGllbnN0YWdfTWl0dHdvY2hfRG9ubmVyc3RhZ19GcmVpdGFnX1NhbXN0YWcnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAnU29fTW9fRGlfTWlfRG9fRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ1NvX01vX0RpX01pX0RvX0ZyX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRC4gTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgRC4gTU1NTSBZWVlZIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbaGV1dGUgdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW21vcmdlbiB1bV0gTFQgW1Vocl0nLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFt1bV0gTFQgW1Vocl0nLFxuICAgICAgICAgICAgbGFzdERheTogJ1tnZXN0ZXJuIHVtXSBMVCBbVWhyXScsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tsZXR6dGVuXSBkZGRkIFt1bV0gTFQgW1Vocl0nXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICdpbiAlcycsXG4gICAgICAgICAgICBwYXN0IDogJ3ZvciAlcycsXG4gICAgICAgICAgICBzIDogJ2VpbiBwYWFyIFNla3VuZGVuJyxcbiAgICAgICAgICAgIHNzIDogJyVkIFNla3VuZGVuJyxcbiAgICAgICAgICAgIG0gOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgbW0gOiAnJWQgTWludXRlbicsXG4gICAgICAgICAgICBoIDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGhoIDogJyVkIFN0dW5kZW4nLFxuICAgICAgICAgICAgZCA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBkZCA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBNIDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIE1NIDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHkgOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeXkgOiBwcm9jZXNzUmVsYXRpdmVUaW1lXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWwgOiAnJWQuJyxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNCAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGVDaDtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///127\n")},128:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            'm': ['eine Minute', 'einer Minute'],\n            'h': ['eine Stunde', 'einer Stunde'],\n            'd': ['ein Tag', 'einem Tag'],\n            'dd': [number + ' Tage', number + ' Tagen'],\n            'M': ['ein Monat', 'einem Monat'],\n            'MM': [number + ' Monate', number + ' Monaten'],\n            'y': ['ein Jahr', 'einem Jahr'],\n            'yy': [number + ' Jahre', number + ' Jahren']\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var deAt = moment.defineLocale('de-at', {\n        months : 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n        monthsShort : 'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n        weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n        weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY HH:mm',\n            LLLL : 'dddd, D. MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : 'vor %s',\n            s : 'ein paar Sekunden',\n            ss : '%d Sekunden',\n            m : processRelativeTime,\n            mm : '%d Minuten',\n            h : processRelativeTime,\n            hh : '%d Stunden',\n            d : processRelativeTime,\n            dd : processRelativeTime,\n            M : processRelativeTime,\n            MM : processRelativeTime,\n            y : processRelativeTime,\n            yy : processRelativeTime\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return deAt;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kZS1hdC5qcz9iM2ViIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiMTI4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzUmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgZm9ybWF0ID0ge1xuICAgICAgICAgICAgJ20nOiBbJ2VpbmUgTWludXRlJywgJ2VpbmVyIE1pbnV0ZSddLFxuICAgICAgICAgICAgJ2gnOiBbJ2VpbmUgU3R1bmRlJywgJ2VpbmVyIFN0dW5kZSddLFxuICAgICAgICAgICAgJ2QnOiBbJ2VpbiBUYWcnLCAnZWluZW0gVGFnJ10sXG4gICAgICAgICAgICAnZGQnOiBbbnVtYmVyICsgJyBUYWdlJywgbnVtYmVyICsgJyBUYWdlbiddLFxuICAgICAgICAgICAgJ00nOiBbJ2VpbiBNb25hdCcsICdlaW5lbSBNb25hdCddLFxuICAgICAgICAgICAgJ01NJzogW251bWJlciArICcgTW9uYXRlJywgbnVtYmVyICsgJyBNb25hdGVuJ10sXG4gICAgICAgICAgICAneSc6IFsnZWluIEphaHInLCAnZWluZW0gSmFociddLFxuICAgICAgICAgICAgJ3l5JzogW251bWJlciArICcgSmFocmUnLCBudW1iZXIgKyAnIEphaHJlbiddXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gZm9ybWF0W2tleV1bMF0gOiBmb3JtYXRba2V5XVsxXTtcbiAgICB9XG5cbiAgICB2YXIgZGVBdCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2RlLWF0Jywge1xuICAgICAgICBtb250aHMgOiAnSsOkbm5lcl9GZWJydWFyX03DpHJ6X0FwcmlsX01haV9KdW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICdKw6RuLl9GZWIuX03DpHJ6X0Fwci5fTWFpX0p1bmlfSnVsaV9BdWcuX1NlcC5fT2t0Ll9Ob3YuX0Rlei4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICB3ZWVrZGF5cyA6ICdTb25udGFnX01vbnRhZ19EaWVuc3RhZ19NaXR0d29jaF9Eb25uZXJzdGFnX0ZyZWl0YWdfU2Ftc3RhZycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICdTby5fTW8uX0RpLl9NaS5fRG8uX0ZyLl9TYS4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ1NvX01vX0RpX01pX0RvX0ZyX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRC4gTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgRC4gTU1NTSBZWVlZIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbaGV1dGUgdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW21vcmdlbiB1bV0gTFQgW1Vocl0nLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFt1bV0gTFQgW1Vocl0nLFxuICAgICAgICAgICAgbGFzdERheTogJ1tnZXN0ZXJuIHVtXSBMVCBbVWhyXScsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tsZXR6dGVuXSBkZGRkIFt1bV0gTFQgW1Vocl0nXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICdpbiAlcycsXG4gICAgICAgICAgICBwYXN0IDogJ3ZvciAlcycsXG4gICAgICAgICAgICBzIDogJ2VpbiBwYWFyIFNla3VuZGVuJyxcbiAgICAgICAgICAgIHNzIDogJyVkIFNla3VuZGVuJyxcbiAgICAgICAgICAgIG0gOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgbW0gOiAnJWQgTWludXRlbicsXG4gICAgICAgICAgICBoIDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGhoIDogJyVkIFN0dW5kZW4nLFxuICAgICAgICAgICAgZCA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBkZCA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBNIDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIE1NIDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHkgOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeXkgOiBwcm9jZXNzUmVsYXRpdmVUaW1lXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWwgOiAnJWQuJyxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNCAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGVBdDtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///128\n")},129:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            'm': ['eine Minute', 'einer Minute'],\n            'h': ['eine Stunde', 'einer Stunde'],\n            'd': ['ein Tag', 'einem Tag'],\n            'dd': [number + ' Tage', number + ' Tagen'],\n            'M': ['ein Monat', 'einem Monat'],\n            'MM': [number + ' Monate', number + ' Monaten'],\n            'y': ['ein Jahr', 'einem Jahr'],\n            'yy': [number + ' Jahre', number + ' Jahren']\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var de = moment.defineLocale('de', {\n        months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n        monthsShort : 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n        weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n        weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY HH:mm',\n            LLLL : 'dddd, D. MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : 'vor %s',\n            s : 'ein paar Sekunden',\n            ss : '%d Sekunden',\n            m : processRelativeTime,\n            mm : '%d Minuten',\n            h : processRelativeTime,\n            hh : '%d Stunden',\n            d : processRelativeTime,\n            dd : processRelativeTime,\n            M : processRelativeTime,\n            MM : processRelativeTime,\n            y : processRelativeTime,\n            yy : processRelativeTime\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return de;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kZS5qcz9iNDY5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiMTI5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzUmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgZm9ybWF0ID0ge1xuICAgICAgICAgICAgJ20nOiBbJ2VpbmUgTWludXRlJywgJ2VpbmVyIE1pbnV0ZSddLFxuICAgICAgICAgICAgJ2gnOiBbJ2VpbmUgU3R1bmRlJywgJ2VpbmVyIFN0dW5kZSddLFxuICAgICAgICAgICAgJ2QnOiBbJ2VpbiBUYWcnLCAnZWluZW0gVGFnJ10sXG4gICAgICAgICAgICAnZGQnOiBbbnVtYmVyICsgJyBUYWdlJywgbnVtYmVyICsgJyBUYWdlbiddLFxuICAgICAgICAgICAgJ00nOiBbJ2VpbiBNb25hdCcsICdlaW5lbSBNb25hdCddLFxuICAgICAgICAgICAgJ01NJzogW251bWJlciArICcgTW9uYXRlJywgbnVtYmVyICsgJyBNb25hdGVuJ10sXG4gICAgICAgICAgICAneSc6IFsnZWluIEphaHInLCAnZWluZW0gSmFociddLFxuICAgICAgICAgICAgJ3l5JzogW251bWJlciArICcgSmFocmUnLCBudW1iZXIgKyAnIEphaHJlbiddXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gZm9ybWF0W2tleV1bMF0gOiBmb3JtYXRba2V5XVsxXTtcbiAgICB9XG5cbiAgICB2YXIgZGUgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdkZScsIHtcbiAgICAgICAgbW9udGhzIDogJ0phbnVhcl9GZWJydWFyX03DpHJ6X0FwcmlsX01haV9KdW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICdKYW4uX0ZlYi5fTcOkcnpfQXByLl9NYWlfSnVuaV9KdWxpX0F1Zy5fU2VwLl9Pa3QuX05vdi5fRGV6Licuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdCA6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzIDogJ1Nvbm50YWdfTW9udGFnX0RpZW5zdGFnX01pdHR3b2NoX0Rvbm5lcnN0YWdfRnJlaXRhZ19TYW1zdGFnJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ1NvLl9Nby5fRGkuX01pLl9Eby5fRnIuX1NhLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAnU29fTW9fRGlfTWlfRG9fRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdCA6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEwgOiAnRC4gTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdELiBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBELiBNTU1NIFlZWVkgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheTogJ1toZXV0ZSB1bV0gTFQgW1Vocl0nLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbbW9yZ2VuIHVtXSBMVCBbVWhyXScsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW3VtXSBMVCBbVWhyXScsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2dlc3Rlcm4gdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW2xldHp0ZW5dIGRkZGQgW3VtXSBMVCBbVWhyXSdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ2luICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAndm9yICVzJyxcbiAgICAgICAgICAgIHMgOiAnZWluIHBhYXIgU2VrdW5kZW4nLFxuICAgICAgICAgICAgc3MgOiAnJWQgU2VrdW5kZW4nLFxuICAgICAgICAgICAgbSA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtbSA6ICclZCBNaW51dGVuJyxcbiAgICAgICAgICAgIGggOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgaGggOiAnJWQgU3R1bmRlbicsXG4gICAgICAgICAgICBkIDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGRkIDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIE0gOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgTU0gOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeSA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5eSA6IHByb2Nlc3NSZWxhdGl2ZVRpbWVcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbCA6ICclZC4nLFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA0ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBkZTtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///129\n")},13:function(module,exports,__webpack_require__){"use strict";eval('\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar SelectMenuItem = /** @class */ (function () {\r\n    function SelectMenuItem(name, value) {\r\n        this.name = name;\r\n        this.value = value;\r\n    }\r\n    return SelectMenuItem;\r\n}());\r\nexports.SelectMenuItem = SelectMenuItem;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9zZWxlY3QtbWVudS9TZWxlY3RNZW51SXRlbS50cz81NGIwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQThDLGNBQWM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEIiwiZmlsZSI6IjEzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIFNlbGVjdE1lbnVJdGVtID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gU2VsZWN0TWVudUl0ZW0obmFtZSwgdmFsdWUpIHtcclxuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBTZWxlY3RNZW51SXRlbTtcclxufSgpKTtcclxuZXhwb3J0cy5TZWxlY3RNZW51SXRlbSA9IFNlbGVjdE1lbnVJdGVtO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///13\n')},130:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var da = moment.defineLocale('da', {\n        months : 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n        weekdaysShort : 'søn_man_tir_ons_tor_fre_lør'.split('_'),\n        weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY HH:mm',\n            LLLL : 'dddd [d.] D. MMMM YYYY [kl.] HH:mm'\n        },\n        calendar : {\n            sameDay : '[i dag kl.] LT',\n            nextDay : '[i morgen kl.] LT',\n            nextWeek : 'på dddd [kl.] LT',\n            lastDay : '[i går kl.] LT',\n            lastWeek : '[i] dddd[s kl.] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'om %s',\n            past : '%s siden',\n            s : 'få sekunder',\n            ss : '%d sekunder',\n            m : 'et minut',\n            mm : '%d minutter',\n            h : 'en time',\n            hh : '%d timer',\n            d : 'en dag',\n            dd : '%d dage',\n            M : 'en måned',\n            MM : '%d måneder',\n            y : 'et år',\n            yy : '%d år'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return da;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kYS5qcz8wZjE0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiIxMzAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBkYSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2RhJywge1xuICAgICAgICBtb250aHMgOiAnamFudWFyX2ZlYnJ1YXJfbWFydHNfYXByaWxfbWFqX2p1bmlfanVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXInLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ2phbl9mZWJfbWFyX2Fwcl9tYWpfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVjJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6ICdzw7huZGFnX21hbmRhZ190aXJzZGFnX29uc2RhZ190b3JzZGFnX2ZyZWRhZ19sw7hyZGFnJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ3PDuG5fbWFuX3Rpcl9vbnNfdG9yX2ZyZV9sw7hyJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICdzw7hfbWFfdGlfb25fdG9fZnJfbMO4Jy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEwgOiAnRC4gTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdELiBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkIFtkLl0gRC4gTU1NTSBZWVlZIFtrbC5dIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgOiAnW2kgZGFnIGtsLl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICdbaSBtb3JnZW4ga2wuXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdww6UgZGRkZCBba2wuXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5IDogJ1tpIGfDpXIga2wuXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlayA6ICdbaV0gZGRkZFtzIGtsLl0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ29tICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAnJXMgc2lkZW4nLFxuICAgICAgICAgICAgcyA6ICdmw6Ugc2VrdW5kZXInLFxuICAgICAgICAgICAgc3MgOiAnJWQgc2VrdW5kZXInLFxuICAgICAgICAgICAgbSA6ICdldCBtaW51dCcsXG4gICAgICAgICAgICBtbSA6ICclZCBtaW51dHRlcicsXG4gICAgICAgICAgICBoIDogJ2VuIHRpbWUnLFxuICAgICAgICAgICAgaGggOiAnJWQgdGltZXInLFxuICAgICAgICAgICAgZCA6ICdlbiBkYWcnLFxuICAgICAgICAgICAgZGQgOiAnJWQgZGFnZScsXG4gICAgICAgICAgICBNIDogJ2VuIG3DpW5lZCcsXG4gICAgICAgICAgICBNTSA6ICclZCBtw6VuZWRlcicsXG4gICAgICAgICAgICB5IDogJ2V0IMOlcicsXG4gICAgICAgICAgICB5eSA6ICclZCDDpXInXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWwgOiAnJWQuJyxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNCAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGE7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///130\n")},131:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var cy = moment.defineLocale('cy', {\n        months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split('_'),\n        monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split('_'),\n        weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split('_'),\n        weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),\n        weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),\n        weekdaysParseExact : true,\n        // time formats are the same as en-gb\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar: {\n            sameDay: '[Heddiw am] LT',\n            nextDay: '[Yfory am] LT',\n            nextWeek: 'dddd [am] LT',\n            lastDay: '[Ddoe am] LT',\n            lastWeek: 'dddd [diwethaf am] LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: 'mewn %s',\n            past: '%s yn ôl',\n            s: 'ychydig eiliadau',\n            ss: '%d eiliad',\n            m: 'munud',\n            mm: '%d munud',\n            h: 'awr',\n            hh: '%d awr',\n            d: 'diwrnod',\n            dd: '%d diwrnod',\n            M: 'mis',\n            MM: '%d mis',\n            y: 'blwyddyn',\n            yy: '%d flynedd'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,\n        // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh\n        ordinal: function (number) {\n            var b = number,\n                output = '',\n                lookup = [\n                    '', 'af', 'il', 'ydd', 'ydd', 'ed', 'ed', 'ed', 'fed', 'fed', 'fed', // 1af to 10fed\n                    'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'fed' // 11eg to 20fed\n                ];\n            if (b > 20) {\n                if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {\n                    output = 'fed'; // not 30ain, 70ain or 90ain\n                } else {\n                    output = 'ain';\n                }\n            } else if (b > 0) {\n                output = lookup[b];\n            }\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return cy;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jeS5qcz85Nzk3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiIxMzEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBjeSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2N5Jywge1xuICAgICAgICBtb250aHM6ICdJb25hd3JfQ2h3ZWZyb3JfTWF3cnRoX0VicmlsbF9NYWlfTWVoZWZpbl9Hb3JmZmVubmFmX0F3c3RfTWVkaV9IeWRyZWZfVGFjaHdlZGRfUmhhZ2Z5cicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdJb25fQ2h3ZV9NYXdfRWJyX01haV9NZWhfR29yX0F3c19NZWRfSHlkX1RhY2hfUmhhZycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdEeWRkIFN1bF9EeWRkIExsdW5fRHlkZCBNYXdydGhfRHlkZCBNZXJjaGVyX0R5ZGQgSWF1X0R5ZGQgR3dlbmVyX0R5ZGQgU2Fkd3JuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnU3VsX0xsdW5fTWF3X01lcl9JYXVfR3dlX1NhZCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTdV9MbF9NYV9NZV9JYV9Hd19TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0IDogdHJ1ZSxcbiAgICAgICAgLy8gdGltZSBmb3JtYXRzIGFyZSB0aGUgc2FtZSBhcyBlbi1nYlxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFMgOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0hlZGRpdyBhbV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tZZm9yeSBhbV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthbV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tEZG9lIGFtXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW2Rpd2V0aGFmIGFtXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnbWV3biAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgeW4gw7RsJyxcbiAgICAgICAgICAgIHM6ICd5Y2h5ZGlnIGVpbGlhZGF1JyxcbiAgICAgICAgICAgIHNzOiAnJWQgZWlsaWFkJyxcbiAgICAgICAgICAgIG06ICdtdW51ZCcsXG4gICAgICAgICAgICBtbTogJyVkIG11bnVkJyxcbiAgICAgICAgICAgIGg6ICdhd3InLFxuICAgICAgICAgICAgaGg6ICclZCBhd3InLFxuICAgICAgICAgICAgZDogJ2Rpd3Jub2QnLFxuICAgICAgICAgICAgZGQ6ICclZCBkaXdybm9kJyxcbiAgICAgICAgICAgIE06ICdtaXMnLFxuICAgICAgICAgICAgTU06ICclZCBtaXMnLFxuICAgICAgICAgICAgeTogJ2Jsd3lkZHluJyxcbiAgICAgICAgICAgIHl5OiAnJWQgZmx5bmVkZCdcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KGZlZHxhaW58YWZ8aWx8eWRkfGVkfGVnKS8sXG4gICAgICAgIC8vIHRyYWRpdGlvbmFsIG9yZGluYWwgbnVtYmVycyBhYm92ZSAzMSBhcmUgbm90IGNvbW1vbmx5IHVzZWQgaW4gY29sbG9xdWlhbCBXZWxzaFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlcixcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAnJyxcbiAgICAgICAgICAgICAgICBsb29rdXAgPSBbXG4gICAgICAgICAgICAgICAgICAgICcnLCAnYWYnLCAnaWwnLCAneWRkJywgJ3lkZCcsICdlZCcsICdlZCcsICdlZCcsICdmZWQnLCAnZmVkJywgJ2ZlZCcsIC8vIDFhZiB0byAxMGZlZFxuICAgICAgICAgICAgICAgICAgICAnZWcnLCAnZmVkJywgJ2VnJywgJ2VnJywgJ2ZlZCcsICdlZycsICdlZycsICdmZWQnLCAnZWcnLCAnZmVkJyAvLyAxMWVnIHRvIDIwZmVkXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGlmIChiID4gMjApIHtcbiAgICAgICAgICAgICAgICBpZiAoYiA9PT0gNDAgfHwgYiA9PT0gNTAgfHwgYiA9PT0gNjAgfHwgYiA9PT0gODAgfHwgYiA9PT0gMTAwKSB7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICdmZWQnOyAvLyBub3QgMzBhaW4sIDcwYWluIG9yIDkwYWluXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJ2Fpbic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChiID4gMCkge1xuICAgICAgICAgICAgICAgIG91dHB1dCA9IGxvb2t1cFtiXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGN5O1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///131\n")},132:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var cv = moment.defineLocale('cv', {\n        months : 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split('_'),\n        monthsShort : 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),\n        weekdays : 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split('_'),\n        weekdaysShort : 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),\n        weekdaysMin : 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD-MM-YYYY',\n            LL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',\n            LLL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',\n            LLLL : 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm'\n        },\n        calendar : {\n            sameDay: '[Паян] LT [сехетре]',\n            nextDay: '[Ыран] LT [сехетре]',\n            lastDay: '[Ӗнер] LT [сехетре]',\n            nextWeek: '[Ҫитес] dddd LT [сехетре]',\n            lastWeek: '[Иртнӗ] dddd LT [сехетре]',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : function (output) {\n                var affix = /сехет$/i.exec(output) ? 'рен' : /ҫул$/i.exec(output) ? 'тан' : 'ран';\n                return output + affix;\n            },\n            past : '%s каялла',\n            s : 'пӗр-ик ҫеккунт',\n            ss : '%d ҫеккунт',\n            m : 'пӗр минут',\n            mm : '%d минут',\n            h : 'пӗр сехет',\n            hh : '%d сехет',\n            d : 'пӗр кун',\n            dd : '%d кун',\n            M : 'пӗр уйӑх',\n            MM : '%d уйӑх',\n            y : 'пӗр ҫул',\n            yy : '%d ҫул'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-мӗш/,\n        ordinal : '%d-мӗш',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return cv;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jdi5qcz8wM2VjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwiZmlsZSI6IjEzMi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIGN2ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnY3YnLCB7XG4gICAgICAgIG1vbnRocyA6ICfQutOR0YDQu9Cw0Ydf0L3QsNGA05HRgV/Qv9GD0Yhf0LDQutCwX9C80LDQuV/Sq9OX0YDRgtC80LVf0YPRgtORX9Kr0YPRgNC70LBf0LDQstOR0L1f0Y7Qv9CwX9GH07PQul/RgNCw0YjRgtCw0LInLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ9C605HRgF/QvdCw0YBf0L/Rg9GIX9Cw0LrQsF/QvNCw0Llf0qvTl9GAX9GD0YLTkV/Sq9GD0YBf0LDQstC9X9GO0L/QsF/Rh9Oz0Lpf0YDQsNGIJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6ICfQstGL0YDRgdCw0YDQvdC40LrRg9C9X9GC0YPQvdGC0LjQutGD0L1f0YvRgtC70LDRgNC40LrRg9C9X9GO0L3QutGD0L1f0LrTl9Kr0L3QtdGA0L3QuNC60YPQvV/RjdGA0L3QtdC60YPQvV/RiNOR0LzQsNGC0LrRg9C9Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ9Cy0YvRgF/RgtGD0L1f0YvRgtC7X9GO0L1f0LrTl9KrX9GN0YDQvV/RiNOR0LwnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ9Cy0YBf0YLQvV/Ri9GCX9GO0L1f0LrSq1/RjdGAX9GI0LwnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQtTU0tWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdZWVlZIFvSq9GD0LvRhdC4XSBNTU1NIFvRg9C505HRhdOX0L1dIERbLdC805fRiNOXXScsXG4gICAgICAgICAgICBMTEwgOiAnWVlZWSBb0qvRg9C70YXQuF0gTU1NTSBb0YPQudOR0YXTl9C9XSBEWy3QvNOX0YjTl10sIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgWVlZWSBb0qvRg9C70YXQuF0gTU1NTSBb0YPQudOR0YXTl9C9XSBEWy3QvNOX0YjTl10sIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb0J/QsNGP0L1dIExUIFvRgdC10YXQtdGC0YDQtV0nLFxuICAgICAgICAgICAgbmV4dERheTogJ1vQq9GA0LDQvV0gTFQgW9GB0LXRhdC10YLRgNC1XScsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9OW0L3QtdGAXSBMVCBb0YHQtdGF0LXRgtGA0LVdJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW9Kq0LjRgtC10YFdIGRkZGQgTFQgW9GB0LXRhdC10YLRgNC1XScsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vQmNGA0YLQvdOXXSBkZGRkIExUIFvRgdC10YXQtdGC0YDQtV0nLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiBmdW5jdGlvbiAob3V0cHV0KSB7XG4gICAgICAgICAgICAgICAgdmFyIGFmZml4ID0gL9GB0LXRhdC10YIkL2kuZXhlYyhvdXRwdXQpID8gJ9GA0LXQvScgOiAv0qvRg9C7JC9pLmV4ZWMob3V0cHV0KSA/ICfRgtCw0L0nIDogJ9GA0LDQvSc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dHB1dCArIGFmZml4O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhc3QgOiAnJXMg0LrQsNGP0LvQu9CwJyxcbiAgICAgICAgICAgIHMgOiAn0L/Tl9GALdC40Log0qvQtdC60LrRg9C90YInLFxuICAgICAgICAgICAgc3MgOiAnJWQg0qvQtdC60LrRg9C90YInLFxuICAgICAgICAgICAgbSA6ICfQv9OX0YAg0LzQuNC90YPRgicsXG4gICAgICAgICAgICBtbSA6ICclZCDQvNC40L3Rg9GCJyxcbiAgICAgICAgICAgIGggOiAn0L/Tl9GAINGB0LXRhdC10YInLFxuICAgICAgICAgICAgaGggOiAnJWQg0YHQtdGF0LXRgicsXG4gICAgICAgICAgICBkIDogJ9C/05fRgCDQutGD0L0nLFxuICAgICAgICAgICAgZGQgOiAnJWQg0LrRg9C9JyxcbiAgICAgICAgICAgIE0gOiAn0L/Tl9GAINGD0LnTkdGFJyxcbiAgICAgICAgICAgIE1NIDogJyVkINGD0LnTkdGFJyxcbiAgICAgICAgICAgIHkgOiAn0L/Tl9GAINKr0YPQuycsXG4gICAgICAgICAgICB5eSA6ICclZCDSq9GD0LsnXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS3QvNOX0YgvLFxuICAgICAgICBvcmRpbmFsIDogJyVkLdC805fRiCcsXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDcgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDFzdCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGN2O1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///132\n")},133:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var months = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split('_'),\n        monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_');\n    function plural(n) {\n        return (n > 1) && (n < 5) && (~~(n / 10) !== 1);\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':  // a few seconds / in a few seconds / a few seconds ago\n                return (withoutSuffix || isFuture) ? 'pár sekund' : 'pár sekundami';\n            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'sekundy' : 'sekund');\n                } else {\n                    return result + 'sekundami';\n                }\n                break;\n            case 'm':  // a minute / in a minute / a minute ago\n                return withoutSuffix ? 'minuta' : (isFuture ? 'minutu' : 'minutou');\n            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'minuty' : 'minut');\n                } else {\n                    return result + 'minutami';\n                }\n                break;\n            case 'h':  // an hour / in an hour / an hour ago\n                return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');\n            case 'hh': // 9 hours / in 9 hours / 9 hours ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'hodiny' : 'hodin');\n                } else {\n                    return result + 'hodinami';\n                }\n                break;\n            case 'd':  // a day / in a day / a day ago\n                return (withoutSuffix || isFuture) ? 'den' : 'dnem';\n            case 'dd': // 9 days / in 9 days / 9 days ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'dny' : 'dní');\n                } else {\n                    return result + 'dny';\n                }\n                break;\n            case 'M':  // a month / in a month / a month ago\n                return (withoutSuffix || isFuture) ? 'měsíc' : 'měsícem';\n            case 'MM': // 9 months / in 9 months / 9 months ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'měsíce' : 'měsíců');\n                } else {\n                    return result + 'měsíci';\n                }\n                break;\n            case 'y':  // a year / in a year / a year ago\n                return (withoutSuffix || isFuture) ? 'rok' : 'rokem';\n            case 'yy': // 9 years / in 9 years / 9 years ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'roky' : 'let');\n                } else {\n                    return result + 'lety';\n                }\n                break;\n        }\n    }\n\n    var cs = moment.defineLocale('cs', {\n        months : months,\n        monthsShort : monthsShort,\n        monthsParse : (function (months, monthsShort) {\n            var i, _monthsParse = [];\n            for (i = 0; i < 12; i++) {\n                // use custom parser to solve problem with July (červenec)\n                _monthsParse[i] = new RegExp('^' + months[i] + '$|^' + monthsShort[i] + '$', 'i');\n            }\n            return _monthsParse;\n        }(months, monthsShort)),\n        shortMonthsParse : (function (monthsShort) {\n            var i, _shortMonthsParse = [];\n            for (i = 0; i < 12; i++) {\n                _shortMonthsParse[i] = new RegExp('^' + monthsShort[i] + '$', 'i');\n            }\n            return _shortMonthsParse;\n        }(monthsShort)),\n        longMonthsParse : (function (months) {\n            var i, _longMonthsParse = [];\n            for (i = 0; i < 12; i++) {\n                _longMonthsParse[i] = new RegExp('^' + months[i] + '$', 'i');\n            }\n            return _longMonthsParse;\n        }(months)),\n        weekdays : 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),\n        weekdaysShort : 'ne_po_út_st_čt_pá_so'.split('_'),\n        weekdaysMin : 'ne_po_út_st_čt_pá_so'.split('_'),\n        longDateFormat : {\n            LT: 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY H:mm',\n            LLLL : 'dddd D. MMMM YYYY H:mm',\n            l : 'D. M. YYYY'\n        },\n        calendar : {\n            sameDay: '[dnes v] LT',\n            nextDay: '[zítra v] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v neděli v] LT';\n                    case 1:\n                    case 2:\n                        return '[v] dddd [v] LT';\n                    case 3:\n                        return '[ve středu v] LT';\n                    case 4:\n                        return '[ve čtvrtek v] LT';\n                    case 5:\n                        return '[v pátek v] LT';\n                    case 6:\n                        return '[v sobotu v] LT';\n                }\n            },\n            lastDay: '[včera v] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[minulou neděli v] LT';\n                    case 1:\n                    case 2:\n                        return '[minulé] dddd [v] LT';\n                    case 3:\n                        return '[minulou středu v] LT';\n                    case 4:\n                    case 5:\n                        return '[minulý] dddd [v] LT';\n                    case 6:\n                        return '[minulou sobotu v] LT';\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past : 'před %s',\n            s : translate,\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : translate,\n            hh : translate,\n            d : translate,\n            dd : translate,\n            M : translate,\n            MM : translate,\n            y : translate,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return cs;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jcy5qcz8zYzBkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLFFBQVE7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLHVCQUF1QixRQUFRO0FBQy9CO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsdUJBQXVCLFFBQVE7QUFDL0I7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULHFDQUFxQyxJQUFJO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiMTMzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgbW9udGhzID0gJ2xlZGVuX8O6bm9yX2LFmWV6ZW5fZHViZW5fa3bEm3Rlbl/EjWVydmVuX8SNZXJ2ZW5lY19zcnBlbl96w6HFmcOtX8WZw61qZW5fbGlzdG9wYWRfcHJvc2luZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0ID0gJ2xlZF/Dum5vX2LFmWVfZHViX2t2xJtfxI12bl/EjXZjX3NycF96w6HFmV/FmcOtal9saXNfcHJvJy5zcGxpdCgnXycpO1xuICAgIGZ1bmN0aW9uIHBsdXJhbChuKSB7XG4gICAgICAgIHJldHVybiAobiA+IDEpICYmIChuIDwgNSkgJiYgKH5+KG4gLyAxMCkgIT09IDEpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB0cmFuc2xhdGUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBudW1iZXIgKyAnICc7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdzJzogIC8vIGEgZmV3IHNlY29uZHMgLyBpbiBhIGZldyBzZWNvbmRzIC8gYSBmZXcgc2Vjb25kcyBhZ29cbiAgICAgICAgICAgICAgICByZXR1cm4gKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpID8gJ3DDoXIgc2VrdW5kJyA6ICdww6FyIHNla3VuZGFtaSc7XG4gICAgICAgICAgICBjYXNlICdzcyc6IC8vIDkgc2Vjb25kcyAvIGluIDkgc2Vjb25kcyAvIDkgc2Vjb25kcyBhZ29cbiAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ3Nla3VuZHknIDogJ3Nla3VuZCcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnc2VrdW5kYW1pJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtJzogIC8vIGEgbWludXRlIC8gaW4gYSBtaW51dGUgLyBhIG1pbnV0ZSBhZ29cbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdtaW51dGEnIDogKGlzRnV0dXJlID8gJ21pbnV0dScgOiAnbWludXRvdScpO1xuICAgICAgICAgICAgY2FzZSAnbW0nOiAvLyA5IG1pbnV0ZXMgLyBpbiA5IG1pbnV0ZXMgLyA5IG1pbnV0ZXMgYWdvXG4gICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdtaW51dHknIDogJ21pbnV0Jyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdtaW51dGFtaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaCc6ICAvLyBhbiBob3VyIC8gaW4gYW4gaG91ciAvIGFuIGhvdXIgYWdvXG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAnaG9kaW5hJyA6IChpc0Z1dHVyZSA/ICdob2RpbnUnIDogJ2hvZGlub3UnKTtcbiAgICAgICAgICAgIGNhc2UgJ2hoJzogLy8gOSBob3VycyAvIGluIDkgaG91cnMgLyA5IGhvdXJzIGFnb1xuICAgICAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnaG9kaW55JyA6ICdob2RpbicpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnaG9kaW5hbWknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2QnOiAgLy8gYSBkYXkgLyBpbiBhIGRheSAvIGEgZGF5IGFnb1xuICAgICAgICAgICAgICAgIHJldHVybiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkgPyAnZGVuJyA6ICdkbmVtJztcbiAgICAgICAgICAgIGNhc2UgJ2RkJzogLy8gOSBkYXlzIC8gaW4gOSBkYXlzIC8gOSBkYXlzIGFnb1xuICAgICAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnZG55JyA6ICdkbsOtJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdkbnknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ00nOiAgLy8gYSBtb250aCAvIGluIGEgbW9udGggLyBhIG1vbnRoIGFnb1xuICAgICAgICAgICAgICAgIHJldHVybiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkgPyAnbcSbc8OtYycgOiAnbcSbc8OtY2VtJztcbiAgICAgICAgICAgIGNhc2UgJ01NJzogLy8gOSBtb250aHMgLyBpbiA5IG1vbnRocyAvIDkgbW9udGhzIGFnb1xuICAgICAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnbcSbc8OtY2UnIDogJ23Em3PDrWPFrycpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnbcSbc8OtY2knO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3knOiAgLy8gYSB5ZWFyIC8gaW4gYSB5ZWFyIC8gYSB5ZWFyIGFnb1xuICAgICAgICAgICAgICAgIHJldHVybiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkgPyAncm9rJyA6ICdyb2tlbSc7XG4gICAgICAgICAgICBjYXNlICd5eSc6IC8vIDkgeWVhcnMgLyBpbiA5IHllYXJzIC8gOSB5ZWFycyBhZ29cbiAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ3Jva3knIDogJ2xldCcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnbGV0eSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNzID0gbW9tZW50LmRlZmluZUxvY2FsZSgnY3MnLCB7XG4gICAgICAgIG1vbnRocyA6IG1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQgOiBtb250aHNTaG9ydCxcbiAgICAgICAgbW9udGhzUGFyc2UgOiAoZnVuY3Rpb24gKG1vbnRocywgbW9udGhzU2hvcnQpIHtcbiAgICAgICAgICAgIHZhciBpLCBfbW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgLy8gdXNlIGN1c3RvbSBwYXJzZXIgdG8gc29sdmUgcHJvYmxlbSB3aXRoIEp1bHkgKMSNZXJ2ZW5lYylcbiAgICAgICAgICAgICAgICBfbW9udGhzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKCdeJyArIG1vbnRoc1tpXSArICckfF4nICsgbW9udGhzU2hvcnRbaV0gKyAnJCcsICdpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX21vbnRoc1BhcnNlO1xuICAgICAgICB9KG1vbnRocywgbW9udGhzU2hvcnQpKSxcbiAgICAgICAgc2hvcnRNb250aHNQYXJzZSA6IChmdW5jdGlvbiAobW9udGhzU2hvcnQpIHtcbiAgICAgICAgICAgIHZhciBpLCBfc2hvcnRNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgICAgICBfc2hvcnRNb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoJ14nICsgbW9udGhzU2hvcnRbaV0gKyAnJCcsICdpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX3Nob3J0TW9udGhzUGFyc2U7XG4gICAgICAgIH0obW9udGhzU2hvcnQpKSxcbiAgICAgICAgbG9uZ01vbnRoc1BhcnNlIDogKGZ1bmN0aW9uIChtb250aHMpIHtcbiAgICAgICAgICAgIHZhciBpLCBfbG9uZ01vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgICAgIF9sb25nTW9udGhzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKCdeJyArIG1vbnRoc1tpXSArICckJywgJ2knKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBfbG9uZ01vbnRoc1BhcnNlO1xuICAgICAgICB9KG1vbnRocykpLFxuICAgICAgICB3ZWVrZGF5cyA6ICduZWTEm2xlX3BvbmTEm2zDrV/DunRlcsO9X3N0xZllZGFfxI10dnJ0ZWtfcMOhdGVrX3NvYm90YScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICduZV9wb1/DunRfc3RfxI10X3DDoV9zbycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAnbmVfcG9fw7p0X3N0X8SNdF9ww6Ffc28nLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QuIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCBELiBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgICAgICBsIDogJ0QuIE0uIFlZWVknXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tkbmVzIHZdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbesOtdHJhIHZdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3YgbmVkxJtsaSB2XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdl0gZGRkZCBbdl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2ZSBzdMWZZWR1IHZdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdmUgxI10dnJ0ZWsgdl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2IHDDoXRlayB2XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3Ygc29ib3R1IHZdIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheTogJ1t2xI1lcmEgdl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbbWludWxvdSBuZWTEm2xpIHZdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1ttaW51bMOpXSBkZGRkIFt2XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW21pbnVsb3Ugc3TFmWVkdSB2XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbbWludWzDvV0gZGRkZCBbdl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1ttaW51bG91IHNvYm90dSB2XSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ3phICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAncMWZZWQgJXMnLFxuICAgICAgICAgICAgcyA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHNzIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbSA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1tIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaCA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGhoIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZCA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGRkIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTSA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE1NIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgeSA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHl5IDogdHJhbnNsYXRlXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2UgOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsIDogJyVkLicsXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNzO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///133\n")},134:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var ca = moment.defineLocale('ca', {\n        months : {\n            standalone: 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split('_'),\n            format: 'de gener_de febrer_de març_d\\'abril_de maig_de juny_de juliol_d\\'agost_de setembre_d\\'octubre_de novembre_de desembre'.split('_'),\n            isFormat: /D[oD]?(\\s)+MMMM/\n        },\n        monthsShort : 'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split('_'),\n        weekdaysShort : 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),\n        weekdaysMin : 'dg_dl_dt_dc_dj_dv_ds'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM [de] YYYY',\n            ll : 'D MMM YYYY',\n            LLL : 'D MMMM [de] YYYY [a les] H:mm',\n            lll : 'D MMM YYYY, H:mm',\n            LLLL : 'dddd D MMMM [de] YYYY [a les] H:mm',\n            llll : 'ddd D MMM YYYY, H:mm'\n        },\n        calendar : {\n            sameDay : function () {\n                return '[avui a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n            },\n            nextDay : function () {\n                return '[demà a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n            },\n            nextWeek : function () {\n                return 'dddd [a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n            },\n            lastDay : function () {\n                return '[ahir a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n            },\n            lastWeek : function () {\n                return '[el] dddd [passat a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'd\\'aquí %s',\n            past : 'fa %s',\n            s : 'uns segons',\n            ss : '%d segons',\n            m : 'un minut',\n            mm : '%d minuts',\n            h : 'una hora',\n            hh : '%d hores',\n            d : 'un dia',\n            dd : '%d dies',\n            M : 'un mes',\n            MM : '%d mesos',\n            y : 'un any',\n            yy : '%d anys'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(r|n|t|è|a)/,\n        ordinal : function (number, period) {\n            var output = (number === 1) ? 'r' :\n                (number === 2) ? 'n' :\n                (number === 3) ? 'r' :\n                (number === 4) ? 't' : 'è';\n            if (period === 'w' || period === 'W') {\n                output = 'a';\n            }\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return ca;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jYS5qcz9kNzE2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiMTM0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgY2EgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdjYScsIHtcbiAgICAgICAgbW9udGhzIDoge1xuICAgICAgICAgICAgc3RhbmRhbG9uZTogJ2dlbmVyX2ZlYnJlcl9tYXLDp19hYnJpbF9tYWlnX2p1bnlfanVsaW9sX2Fnb3N0X3NldGVtYnJlX29jdHVicmVfbm92ZW1icmVfZGVzZW1icmUnLnNwbGl0KCdfJyksXG4gICAgICAgICAgICBmb3JtYXQ6ICdkZSBnZW5lcl9kZSBmZWJyZXJfZGUgbWFyw6dfZFxcJ2FicmlsX2RlIG1haWdfZGUganVueV9kZSBqdWxpb2xfZFxcJ2Fnb3N0X2RlIHNldGVtYnJlX2RcXCdvY3R1YnJlX2RlIG5vdmVtYnJlX2RlIGRlc2VtYnJlJy5zcGxpdCgnXycpLFxuICAgICAgICAgICAgaXNGb3JtYXQ6IC9EW29EXT8oXFxzKStNTU1NL1xuICAgICAgICB9LFxuICAgICAgICBtb250aHNTaG9ydCA6ICdnZW4uX2ZlYnIuX21hcsOnX2Fici5fbWFpZ19qdW55X2p1bC5fYWcuX3NldC5fb2N0Ll9ub3YuX2Rlcy4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICB3ZWVrZGF5cyA6ICdkaXVtZW5nZV9kaWxsdW5zX2RpbWFydHNfZGltZWNyZXNfZGlqb3VzX2RpdmVuZHJlc19kaXNzYWJ0ZScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICdkZy5fZGwuX2R0Ll9kYy5fZGouX2R2Ll9kcy4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ2RnX2RsX2R0X2RjX2RqX2R2X2RzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QgTU1NTSBbZGVdIFlZWVknLFxuICAgICAgICAgICAgbGwgOiAnRCBNTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFtkZV0gWVlZWSBbYSBsZXNdIEg6bW0nLFxuICAgICAgICAgICAgbGxsIDogJ0QgTU1NIFlZWVksIEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkIEQgTU1NTSBbZGVdIFlZWVkgW2EgbGVzXSBIOm1tJyxcbiAgICAgICAgICAgIGxsbGwgOiAnZGRkIEQgTU1NIFlZWVksIEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1thdnVpIGEgJyArICgodGhpcy5ob3VycygpICE9PSAxKSA/ICdsZXMnIDogJ2xhJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV4dERheSA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1tkZW3DoCBhICcgKyAoKHRoaXMuaG91cnMoKSAhPT0gMSkgPyAnbGVzJyA6ICdsYScpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHRXZWVrIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnZGRkZCBbYSAnICsgKCh0aGlzLmhvdXJzKCkgIT09IDEpID8gJ2xlcycgOiAnbGEnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5IDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW2FoaXIgYSAnICsgKCh0aGlzLmhvdXJzKCkgIT09IDEpID8gJ2xlcycgOiAnbGEnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0V2VlayA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1tlbF0gZGRkZCBbcGFzc2F0IGEgJyArICgodGhpcy5ob3VycygpICE9PSAxKSA/ICdsZXMnIDogJ2xhJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ2RcXCdhcXXDrSAlcycsXG4gICAgICAgICAgICBwYXN0IDogJ2ZhICVzJyxcbiAgICAgICAgICAgIHMgOiAndW5zIHNlZ29ucycsXG4gICAgICAgICAgICBzcyA6ICclZCBzZWdvbnMnLFxuICAgICAgICAgICAgbSA6ICd1biBtaW51dCcsXG4gICAgICAgICAgICBtbSA6ICclZCBtaW51dHMnLFxuICAgICAgICAgICAgaCA6ICd1bmEgaG9yYScsXG4gICAgICAgICAgICBoaCA6ICclZCBob3JlcycsXG4gICAgICAgICAgICBkIDogJ3VuIGRpYScsXG4gICAgICAgICAgICBkZCA6ICclZCBkaWVzJyxcbiAgICAgICAgICAgIE0gOiAndW4gbWVzJyxcbiAgICAgICAgICAgIE1NIDogJyVkIG1lc29zJyxcbiAgICAgICAgICAgIHkgOiAndW4gYW55JyxcbiAgICAgICAgICAgIHl5IDogJyVkIGFueXMnXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShyfG58dHzDqHxhKS8sXG4gICAgICAgIG9yZGluYWwgOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSAobnVtYmVyID09PSAxKSA/ICdyJyA6XG4gICAgICAgICAgICAgICAgKG51bWJlciA9PT0gMikgPyAnbicgOlxuICAgICAgICAgICAgICAgIChudW1iZXIgPT09IDMpID8gJ3InIDpcbiAgICAgICAgICAgICAgICAobnVtYmVyID09PSA0KSA/ICd0JyA6ICfDqCc7XG4gICAgICAgICAgICBpZiAocGVyaW9kID09PSAndycgfHwgcGVyaW9kID09PSAnVycpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAnYSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA0ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBjYTtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///134\n")},135:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                if (number === 1) {\n                    result += 'sekunda';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sekunde';\n                } else {\n                    result += 'sekundi';\n                }\n                return result;\n            case 'm':\n                return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n            case 'mm':\n                if (number === 1) {\n                    result += 'minuta';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'minute';\n                } else {\n                    result += 'minuta';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'jedan sat' : 'jednog sata';\n            case 'hh':\n                if (number === 1) {\n                    result += 'sat';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sata';\n                } else {\n                    result += 'sati';\n                }\n                return result;\n            case 'dd':\n                if (number === 1) {\n                    result += 'dan';\n                } else {\n                    result += 'dana';\n                }\n                return result;\n            case 'MM':\n                if (number === 1) {\n                    result += 'mjesec';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'mjeseca';\n                } else {\n                    result += 'mjeseci';\n                }\n                return result;\n            case 'yy':\n                if (number === 1) {\n                    result += 'godina';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'godine';\n                } else {\n                    result += 'godina';\n                }\n                return result;\n        }\n    }\n\n    var bs = moment.defineLocale('bs', {\n        months : 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split('_'),\n        monthsShort : 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n        weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY H:mm',\n            LLLL : 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay  : '[danas u] LT',\n            nextDay  : '[sutra u] LT',\n            nextWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay  : '[jučer u] LT',\n            lastWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                        return '[prošlu] dddd [u] LT';\n                    case 6:\n                        return '[prošle] [subote] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prošli] dddd [u] LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past   : 'prije %s',\n            s      : 'par sekundi',\n            ss     : translate,\n            m      : translate,\n            mm     : translate,\n            h      : translate,\n            hh     : translate,\n            d      : 'dan',\n            dd     : translate,\n            M      : 'mjesec',\n            MM     : translate,\n            y      : 'godinu',\n            yy     : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return bs;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9icy5qcz8yNTU0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiIxMzUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gbnVtYmVyICsgJyAnO1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAnc3MnOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdzZWt1bmRhJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMiB8fCBudW1iZXIgPT09IDMgfHwgbnVtYmVyID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnc2VrdW5kZSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdzZWt1bmRpJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIGNhc2UgJ20nOlxuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ2plZG5hIG1pbnV0YScgOiAnamVkbmUgbWludXRlJztcbiAgICAgICAgICAgIGNhc2UgJ21tJzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnbWludXRhJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMiB8fCBudW1iZXIgPT09IDMgfHwgbnVtYmVyID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnbWludXRlJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ21pbnV0YSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICBjYXNlICdoJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdqZWRhbiBzYXQnIDogJ2plZG5vZyBzYXRhJztcbiAgICAgICAgICAgIGNhc2UgJ2hoJzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnc2F0JztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMiB8fCBudW1iZXIgPT09IDMgfHwgbnVtYmVyID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnc2F0YSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdzYXRpJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIGNhc2UgJ2RkJzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnZGFuJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ2RhbmEnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAnTU0nOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdtamVzZWMnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyIHx8IG51bWJlciA9PT0gMyB8fCBudW1iZXIgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdtamVzZWNhJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ21qZXNlY2knO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAneXknOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdnb2RpbmEnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyIHx8IG51bWJlciA9PT0gMyB8fCBudW1iZXIgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdnb2RpbmUnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnZ29kaW5hJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBicyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2JzJywge1xuICAgICAgICBtb250aHMgOiAnamFudWFyX2ZlYnJ1YXJfbWFydF9hcHJpbF9tYWpfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iYXJfb2t0b2Jhcl9ub3ZlbWJhcl9kZWNlbWJhcicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAnamFuLl9mZWIuX21hci5fYXByLl9tYWouX2p1bi5fanVsLl9hdWcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzIDogJ25lZGplbGphX3BvbmVkamVsamFrX3V0b3Jha19zcmlqZWRhX8SNZXR2cnRha19wZXRha19zdWJvdGEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAnbmVkLl9wb24uX3V0by5fc3JpLl/EjWV0Ll9wZXQuX3N1Yi4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ25lX3BvX3V0X3NyX8SNZV9wZV9zdScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0IDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QuIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSAgOiAnW2RhbmFzIHVdIExUJyxcbiAgICAgICAgICAgIG5leHREYXkgIDogJ1tzdXRyYSB1XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gW25lZGplbGp1XSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBbc3JpamVkdV0gW3VdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gW3N1Ym90dV0gW3VdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gZGRkZCBbdV0gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5ICA6ICdbanXEjWVyIHVdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3Byb8WhbHVdIGRkZGQgW3VdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbcHJvxaFsZV0gW3N1Ym90ZV0gW3VdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbcHJvxaFsaV0gZGRkZCBbdV0gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnemEgJXMnLFxuICAgICAgICAgICAgcGFzdCAgIDogJ3ByaWplICVzJyxcbiAgICAgICAgICAgIHMgICAgICA6ICdwYXIgc2VrdW5kaScsXG4gICAgICAgICAgICBzcyAgICAgOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtICAgICAgOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtbSAgICAgOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoICAgICAgOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoaCAgICAgOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkICAgICAgOiAnZGFuJyxcbiAgICAgICAgICAgIGRkICAgICA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE0gICAgICA6ICdtamVzZWMnLFxuICAgICAgICAgICAgTU0gICAgIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgeSAgICAgIDogJ2dvZGludScsXG4gICAgICAgICAgICB5eSAgICAgOiB0cmFuc2xhdGVcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbCA6ICclZC4nLFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA3ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxc3QgaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBicztcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///135\n")},136:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    function relativeTimeWithMutation(number, withoutSuffix, key) {\n        var format = {\n            'mm': 'munutenn',\n            'MM': 'miz',\n            'dd': 'devezh'\n        };\n        return number + ' ' + mutation(format[key], number);\n    }\n    function specialMutationForYears(number) {\n        switch (lastNumber(number)) {\n            case 1:\n            case 3:\n            case 4:\n            case 5:\n            case 9:\n                return number + ' bloaz';\n            default:\n                return number + ' vloaz';\n        }\n    }\n    function lastNumber(number) {\n        if (number > 9) {\n            return lastNumber(number % 10);\n        }\n        return number;\n    }\n    function mutation(text, number) {\n        if (number === 2) {\n            return softMutation(text);\n        }\n        return text;\n    }\n    function softMutation(text) {\n        var mutationTable = {\n            'm': 'v',\n            'b': 'v',\n            'd': 'z'\n        };\n        if (mutationTable[text.charAt(0)] === undefined) {\n            return text;\n        }\n        return mutationTable[text.charAt(0)] + text.substring(1);\n    }\n\n    var br = moment.defineLocale('br', {\n        months : 'Genver_C\\'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split('_'),\n        monthsShort : 'Gen_C\\'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),\n        weekdays : 'Sul_Lun_Meurzh_Merc\\'her_Yaou_Gwener_Sadorn'.split('_'),\n        weekdaysShort : 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),\n        weekdaysMin : 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'h[e]mm A',\n            LTS : 'h[e]mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D [a viz] MMMM YYYY',\n            LLL : 'D [a viz] MMMM YYYY h[e]mm A',\n            LLLL : 'dddd, D [a viz] MMMM YYYY h[e]mm A'\n        },\n        calendar : {\n            sameDay : '[Hiziv da] LT',\n            nextDay : '[Warc\\'hoazh da] LT',\n            nextWeek : 'dddd [da] LT',\n            lastDay : '[Dec\\'h da] LT',\n            lastWeek : 'dddd [paset da] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'a-benn %s',\n            past : '%s \\'zo',\n            s : 'un nebeud segondennoù',\n            ss : '%d eilenn',\n            m : 'ur vunutenn',\n            mm : relativeTimeWithMutation,\n            h : 'un eur',\n            hh : '%d eur',\n            d : 'un devezh',\n            dd : relativeTimeWithMutation,\n            M : 'ur miz',\n            MM : relativeTimeWithMutation,\n            y : 'ur bloaz',\n            yy : specialMutationForYears\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(añ|vet)/,\n        ordinal : function (number) {\n            var output = (number === 1) ? 'añ' : 'vet';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return br;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ici5qcz82ODg3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiMTM2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWVXaXRoTXV0YXRpb24obnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXkpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHtcbiAgICAgICAgICAgICdtbSc6ICdtdW51dGVubicsXG4gICAgICAgICAgICAnTU0nOiAnbWl6JyxcbiAgICAgICAgICAgICdkZCc6ICdkZXZlemgnXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAnICcgKyBtdXRhdGlvbihmb3JtYXRba2V5XSwgbnVtYmVyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc3BlY2lhbE11dGF0aW9uRm9yWWVhcnMobnVtYmVyKSB7XG4gICAgICAgIHN3aXRjaCAobGFzdE51bWJlcihudW1iZXIpKSB7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICcgYmxvYXonO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJyB2bG9heic7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gbGFzdE51bWJlcihudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA+IDkpIHtcbiAgICAgICAgICAgIHJldHVybiBsYXN0TnVtYmVyKG51bWJlciAlIDEwKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtdXRhdGlvbih0ZXh0LCBudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA9PT0gMikge1xuICAgICAgICAgICAgcmV0dXJuIHNvZnRNdXRhdGlvbih0ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG4gICAgZnVuY3Rpb24gc29mdE11dGF0aW9uKHRleHQpIHtcbiAgICAgICAgdmFyIG11dGF0aW9uVGFibGUgPSB7XG4gICAgICAgICAgICAnbSc6ICd2JyxcbiAgICAgICAgICAgICdiJzogJ3YnLFxuICAgICAgICAgICAgJ2QnOiAneidcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKG11dGF0aW9uVGFibGVbdGV4dC5jaGFyQXQoMCldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0ZXh0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtdXRhdGlvblRhYmxlW3RleHQuY2hhckF0KDApXSArIHRleHQuc3Vic3RyaW5nKDEpO1xuICAgIH1cblxuICAgIHZhciBiciA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2JyJywge1xuICAgICAgICBtb250aHMgOiAnR2VudmVyX0NcXCdod2V2cmVyX01ldXJ6aF9FYnJlbF9NYWVfTWV6aGV2ZW5fR291ZXJlX0Vvc3RfR3dlbmdvbG9fSGVyZV9EdV9LZXJ6dScuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAnR2VuX0NcXCdod2VfTWV1X0Vicl9NYWVfRXZlX0dvdV9Fb3NfR3dlX0hlcl9EdV9LZXInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzIDogJ1N1bF9MdW5fTWV1cnpoX01lcmNcXCdoZXJfWWFvdV9Hd2VuZXJfU2Fkb3JuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ1N1bF9MdW5fTWV1X01lcl9ZYW9fR3dlX1NhZCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAnU3VfTHVfTWVfTWVyX1lhX0d3X1NhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ2hbZV1tbSBBJyxcbiAgICAgICAgICAgIExUUyA6ICdoW2VdbW06c3MgQScsXG4gICAgICAgICAgICBMIDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBbYSB2aXpdIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBbYSB2aXpdIE1NTU0gWVlZWSBoW2VdbW0gQScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQsIEQgW2Egdml6XSBNTU1NIFlZWVkgaFtlXW1tIEEnXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICdbSGl6aXYgZGFdIExUJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW1dhcmNcXCdob2F6aCBkYV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnZGRkZCBbZGFdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXkgOiAnW0RlY1xcJ2ggZGFdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogJ2RkZGQgW3Bhc2V0IGRhXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnYS1iZW5uICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAnJXMgXFwnem8nLFxuICAgICAgICAgICAgcyA6ICd1biBuZWJldWQgc2Vnb25kZW5ub8O5JyxcbiAgICAgICAgICAgIHNzIDogJyVkIGVpbGVubicsXG4gICAgICAgICAgICBtIDogJ3VyIHZ1bnV0ZW5uJyxcbiAgICAgICAgICAgIG1tIDogcmVsYXRpdmVUaW1lV2l0aE11dGF0aW9uLFxuICAgICAgICAgICAgaCA6ICd1biBldXInLFxuICAgICAgICAgICAgaGggOiAnJWQgZXVyJyxcbiAgICAgICAgICAgIGQgOiAndW4gZGV2ZXpoJyxcbiAgICAgICAgICAgIGRkIDogcmVsYXRpdmVUaW1lV2l0aE11dGF0aW9uLFxuICAgICAgICAgICAgTSA6ICd1ciBtaXonLFxuICAgICAgICAgICAgTU0gOiByZWxhdGl2ZVRpbWVXaXRoTXV0YXRpb24sXG4gICAgICAgICAgICB5IDogJ3VyIGJsb2F6JyxcbiAgICAgICAgICAgIHl5IDogc3BlY2lhbE11dGF0aW9uRm9yWWVhcnNcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KGHDsXx2ZXQpLyxcbiAgICAgICAgb3JkaW5hbCA6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSAobnVtYmVyID09PSAxKSA/ICdhw7EnIDogJ3ZldCc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA0ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBicjtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///136\n")},137:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '༡',\n        '2': '༢',\n        '3': '༣',\n        '4': '༤',\n        '5': '༥',\n        '6': '༦',\n        '7': '༧',\n        '8': '༨',\n        '9': '༩',\n        '0': '༠'\n    },\n    numberMap = {\n        '༡': '1',\n        '༢': '2',\n        '༣': '3',\n        '༤': '4',\n        '༥': '5',\n        '༦': '6',\n        '༧': '7',\n        '༨': '8',\n        '༩': '9',\n        '༠': '0'\n    };\n\n    var bo = moment.defineLocale('bo', {\n        months : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),\n        monthsShort : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),\n        weekdays : 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split('_'),\n        weekdaysShort : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),\n        weekdaysMin : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm',\n            LTS : 'A h:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm'\n        },\n        calendar : {\n            sameDay : '[དི་རིང] LT',\n            nextDay : '[སང་ཉིན] LT',\n            nextWeek : '[བདུན་ཕྲག་རྗེས་མ], LT',\n            lastDay : '[ཁ་སང] LT',\n            lastWeek : '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s ལ་',\n            past : '%s སྔན་ལ',\n            s : 'ལམ་སང',\n            ss : '%d སྐར་ཆ།',\n            m : 'སྐར་མ་གཅིག',\n            mm : '%d སྐར་མ',\n            h : 'ཆུ་ཚོད་གཅིག',\n            hh : '%d ཆུ་ཚོད',\n            d : 'ཉིན་གཅིག',\n            dd : '%d ཉིན་',\n            M : 'ཟླ་བ་གཅིག',\n            MM : '%d ཟླ་བ',\n            y : 'ལོ་གཅིག',\n            yy : '%d ལོ'\n        },\n        preparse: function (string) {\n            return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if ((meridiem === 'མཚན་མོ' && hour >= 4) ||\n                    (meridiem === 'ཉིན་གུང' && hour < 5) ||\n                    meridiem === 'དགོང་དག') {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'མཚན་མོ';\n            } else if (hour < 10) {\n                return 'ཞོགས་ཀས';\n            } else if (hour < 17) {\n                return 'ཉིན་གུང';\n            } else if (hour < 20) {\n                return 'དགོང་དག';\n            } else {\n                return 'མཚན་མོ';\n            }\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return bo;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9iby5qcz9kMjZhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwiZmlsZSI6IjEzNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgJzEnOiAn4LyhJyxcbiAgICAgICAgJzInOiAn4LyiJyxcbiAgICAgICAgJzMnOiAn4LyjJyxcbiAgICAgICAgJzQnOiAn4LykJyxcbiAgICAgICAgJzUnOiAn4LylJyxcbiAgICAgICAgJzYnOiAn4LymJyxcbiAgICAgICAgJzcnOiAn4LynJyxcbiAgICAgICAgJzgnOiAn4LyoJyxcbiAgICAgICAgJzknOiAn4LypJyxcbiAgICAgICAgJzAnOiAn4LygJ1xuICAgIH0sXG4gICAgbnVtYmVyTWFwID0ge1xuICAgICAgICAn4LyhJzogJzEnLFxuICAgICAgICAn4LyiJzogJzInLFxuICAgICAgICAn4LyjJzogJzMnLFxuICAgICAgICAn4LykJzogJzQnLFxuICAgICAgICAn4LylJzogJzUnLFxuICAgICAgICAn4LymJzogJzYnLFxuICAgICAgICAn4LynJzogJzcnLFxuICAgICAgICAn4LyoJzogJzgnLFxuICAgICAgICAn4LypJzogJzknLFxuICAgICAgICAn4LygJzogJzAnXG4gICAgfTtcblxuICAgIHZhciBibyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2JvJywge1xuICAgICAgICBtb250aHMgOiAn4L2f4L6z4LyL4L2W4LyL4L2R4L2E4LyL4L2U4L28X+C9n+C+s+C8i+C9luC8i+C9guC9ieC9suC9puC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvYLgvabgvbTgvZjgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2W4L2e4L2y4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9o+C+lOC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvZHgvrLgvbTgvYLgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2W4L2R4L204L2T4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9luC9ouC+kuC+seC9keC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvZHgvYLgvbTgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2W4L2F4L204LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9luC9heC9tOC8i+C9guC9heC9suC9guC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvZbgvYXgvbTgvIvgvYLgvYngvbLgvabgvIvgvZQnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ+C9n+C+s+C8i+C9luC8i+C9keC9hOC8i+C9lOC9vF/gvZ/gvrPgvIvgvZbgvIvgvYLgvYngvbLgvabgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2C4L2m4L204L2Y4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9luC9nuC9suC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvaPgvpTgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2R4L6y4L204L2C4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9luC9keC9tOC9k+C8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvZbgvaLgvpLgvrHgvZHgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2R4L2C4L204LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9luC9heC9tOC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvZbgvYXgvbTgvIvgvYLgvYXgvbLgvYLgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2W4L2F4L204LyL4L2C4L2J4L2y4L2m4LyL4L2UJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6ICfgvYLgvZ/gvaDgvIvgvYngvbLgvIvgvZjgvItf4L2C4L2f4L2g4LyL4L2f4L6z4LyL4L2W4LyLX+C9guC9n+C9oOC8i+C9mOC9suC9guC8i+C9keC9mOC9ouC8i1/gvYLgvZ/gvaDgvIvgvaPgvrfgvYLgvIvgvZTgvItf4L2C4L2f4L2g4LyL4L2V4L204L2i4LyL4L2W4L20X+C9guC9n+C9oOC8i+C9lOC8i+C9puC9hOC9puC8i1/gvYLgvZ/gvaDgvIvgvabgvqTgvbrgvZPgvIvgvZTgvIsnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAn4L2J4L2y4LyL4L2Y4LyLX+C9n+C+s+C8i+C9luC8i1/gvZjgvbLgvYLgvIvgvZHgvZjgvaLgvItf4L2j4L634L2C4LyL4L2U4LyLX+C9leC9tOC9ouC8i+C9luC9tF/gvZTgvIvgvabgvYTgvabgvItf4L2m4L6k4L264L2T4LyL4L2U4LyLJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICfgvYngvbLgvIvgvZjgvItf4L2f4L6z4LyL4L2W4LyLX+C9mOC9suC9guC8i+C9keC9mOC9ouC8i1/gvaPgvrfgvYLgvIvgvZTgvItf4L2V4L204L2i4LyL4L2W4L20X+C9lOC8i+C9puC9hOC9puC8i1/gvabgvqTgvbrgvZPgvIvgvZTgvIsnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnQSBoOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdBIGg6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdEIE1NTU0gWVlZWSwgQSBoOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1vgvZHgvbLgvIvgvaLgvbLgvYRdIExUJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW+C9puC9hOC8i+C9ieC9suC9k10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnW+C9luC9keC9tOC9k+C8i+C9leC+suC9guC8i+C9ouC+l+C9uuC9puC8i+C9mF0sIExUJyxcbiAgICAgICAgICAgIGxhc3REYXkgOiAnW+C9geC8i+C9puC9hF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiAnW+C9luC9keC9tOC9k+C8i+C9leC+suC9guC8i+C9mOC9kOC9oOC8i+C9mF0gZGRkZCwgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJyVzIOC9o+C8iycsXG4gICAgICAgICAgICBwYXN0IDogJyVzIOC9puC+lOC9k+C8i+C9oycsXG4gICAgICAgICAgICBzIDogJ+C9o+C9mOC8i+C9puC9hCcsXG4gICAgICAgICAgICBzcyA6ICclZCDgvabgvpDgvaLgvIvgvYbgvI0nLFxuICAgICAgICAgICAgbSA6ICfgvabgvpDgvaLgvIvgvZjgvIvgvYLgvYXgvbLgvYInLFxuICAgICAgICAgICAgbW0gOiAnJWQg4L2m4L6Q4L2i4LyL4L2YJyxcbiAgICAgICAgICAgIGggOiAn4L2G4L204LyL4L2a4L284L2R4LyL4L2C4L2F4L2y4L2CJyxcbiAgICAgICAgICAgIGhoIDogJyVkIOC9huC9tOC8i+C9muC9vOC9kScsXG4gICAgICAgICAgICBkIDogJ+C9ieC9suC9k+C8i+C9guC9heC9suC9gicsXG4gICAgICAgICAgICBkZCA6ICclZCDgvYngvbLgvZPgvIsnLFxuICAgICAgICAgICAgTSA6ICfgvZ/gvrPgvIvgvZbgvIvgvYLgvYXgvbLgvYInLFxuICAgICAgICAgICAgTU0gOiAnJWQg4L2f4L6z4LyL4L2WJyxcbiAgICAgICAgICAgIHkgOiAn4L2j4L284LyL4L2C4L2F4L2y4L2CJyxcbiAgICAgICAgICAgIHl5IDogJyVkIOC9o+C9vCdcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW+C8oeC8ouC8o+C8pOC8peC8puC8p+C8qOC8qeC8oF0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+C9mOC9muC9k+C8i+C9mOC9vHzgvZ7gvbzgvYLgvabgvIvgvYDgvaZ84L2J4L2y4L2T4LyL4L2C4L204L2EfOC9keC9guC9vOC9hOC8i+C9keC9gnzgvZjgvZrgvZPgvIvgvZjgvbwvLFxuICAgICAgICBtZXJpZGllbUhvdXIgOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChtZXJpZGllbSA9PT0gJ+C9mOC9muC9k+C8i+C9mOC9vCcgJiYgaG91ciA+PSA0KSB8fFxuICAgICAgICAgICAgICAgICAgICAobWVyaWRpZW0gPT09ICfgvYngvbLgvZPgvIvgvYLgvbTgvYQnICYmIGhvdXIgPCA1KSB8fFxuICAgICAgICAgICAgICAgICAgICBtZXJpZGllbSA9PT0gJ+C9keC9guC9vOC9hOC8i+C9keC9gicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW0gOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+C9mOC9muC9k+C8i+C9mOC9vCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4L2e4L284L2C4L2m4LyL4L2A4L2mJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgvYngvbLgvZPgvIvgvYLgvbTgvYQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+C9keC9guC9vOC9hOC8i+C9keC9gic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4L2Y4L2a4L2T4LyL4L2Y4L28JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNiAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMXN0IGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYm87XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///137\n")},138:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '১',\n        '2': '২',\n        '3': '৩',\n        '4': '৪',\n        '5': '৫',\n        '6': '৬',\n        '7': '৭',\n        '8': '৮',\n        '9': '৯',\n        '0': '০'\n    },\n    numberMap = {\n        '১': '1',\n        '২': '2',\n        '৩': '3',\n        '৪': '4',\n        '৫': '5',\n        '৬': '6',\n        '৭': '7',\n        '৮': '8',\n        '৯': '9',\n        '০': '0'\n    };\n\n    var bn = moment.defineLocale('bn', {\n        months : 'জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'),\n        monthsShort : 'জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে'.split('_'),\n        weekdays : 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split('_'),\n        weekdaysShort : 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),\n        weekdaysMin : 'রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm সময়',\n            LTS : 'A h:mm:ss সময়',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm সময়',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm সময়'\n        },\n        calendar : {\n            sameDay : '[আজ] LT',\n            nextDay : '[আগামীকাল] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[গতকাল] LT',\n            lastWeek : '[গত] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s পরে',\n            past : '%s আগে',\n            s : 'কয়েক সেকেন্ড',\n            ss : '%d সেকেন্ড',\n            m : 'এক মিনিট',\n            mm : '%d মিনিট',\n            h : 'এক ঘন্টা',\n            hh : '%d ঘন্টা',\n            d : 'এক দিন',\n            dd : '%d দিন',\n            M : 'এক মাস',\n            MM : '%d মাস',\n            y : 'এক বছর',\n            yy : '%d বছর'\n        },\n        preparse: function (string) {\n            return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if ((meridiem === 'রাত' && hour >= 4) ||\n                    (meridiem === 'দুপুর' && hour < 5) ||\n                    meridiem === 'বিকাল') {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'রাত';\n            } else if (hour < 10) {\n                return 'সকাল';\n            } else if (hour < 17) {\n                return 'দুপুর';\n            } else if (hour < 20) {\n                return 'বিকাল';\n            } else {\n                return 'রাত';\n            }\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return bn;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ibi5qcz85MDQzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwiZmlsZSI6IjEzOC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgJzEnOiAn4KenJyxcbiAgICAgICAgJzInOiAn4KeoJyxcbiAgICAgICAgJzMnOiAn4KepJyxcbiAgICAgICAgJzQnOiAn4KeqJyxcbiAgICAgICAgJzUnOiAn4KerJyxcbiAgICAgICAgJzYnOiAn4KesJyxcbiAgICAgICAgJzcnOiAn4KetJyxcbiAgICAgICAgJzgnOiAn4KeuJyxcbiAgICAgICAgJzknOiAn4KevJyxcbiAgICAgICAgJzAnOiAn4KemJ1xuICAgIH0sXG4gICAgbnVtYmVyTWFwID0ge1xuICAgICAgICAn4KenJzogJzEnLFxuICAgICAgICAn4KeoJzogJzInLFxuICAgICAgICAn4KepJzogJzMnLFxuICAgICAgICAn4KeqJzogJzQnLFxuICAgICAgICAn4KerJzogJzUnLFxuICAgICAgICAn4KesJzogJzYnLFxuICAgICAgICAn4KetJzogJzcnLFxuICAgICAgICAn4KeuJzogJzgnLFxuICAgICAgICAn4KevJzogJzknLFxuICAgICAgICAn4KemJzogJzAnXG4gICAgfTtcblxuICAgIHZhciBibiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2JuJywge1xuICAgICAgICBtb250aHMgOiAn4Kac4Ka+4Kao4KeB4Kef4Ka+4Kaw4KeAX+Cmq+Cnh+CmrOCnjeCmsOCngeCnn+CmvuCmsOCmv1/gpq7gpr7gprDgp43gpppf4KaP4Kaq4KeN4Kaw4Ka/4KayX+CmruCnh1/gppzgp4Hgpqhf4Kac4KeB4Kay4Ka+4KaHX+CmhuCml+CmuOCnjeCmn1/gprjgp4fgpqrgp43gpp/gp4fgpq7gp43gpqzgprBf4KaF4KaV4KeN4Kaf4KeL4Kas4KawX+CmqOCmreCnh+CmruCnjeCmrOCmsF/gpqHgpr/gprjgp4fgpq7gp43gpqzgprAnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ+CmnOCmvuCmqOCngV/gpqvgp4fgpqxf4Kau4Ka+4Kaw4KeN4KaaX+Cmj+CmquCnjeCmsF/gpq7gp4df4Kac4KeB4KaoX+CmnOCngeCmsl/gpobgppdf4Ka44KeH4Kaq4KeN4KafX+CmheCmleCnjeCmn+Cni1/gpqjgpq3gp4df4Kah4Ka/4Ka44KeHJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6ICfgprDgpqzgpr/gpqzgpr7gprBf4Ka44KeL4Kau4Kas4Ka+4KawX+CmruCmmeCnjeCml+CmsuCmrOCmvuCmsF/gpqzgp4Hgpqfgpqzgpr7gprBf4Kas4KeD4Ka54Ka44KeN4Kaq4Kak4Ka/4Kas4Ka+4KawX+CmtuCngeCmleCnjeCmsOCmrOCmvuCmsF/gprbgpqjgpr/gpqzgpr7gprAnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAn4Kaw4Kas4Ka/X+CmuOCni+Cmrl/gpq7gppngp43gppfgprJf4Kas4KeB4KanX+CmrOCng+CmueCmuOCnjeCmquCmpOCmv1/gprbgp4HgppXgp43gprBf4Ka24Kao4Ka/Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICfgprDgpqzgpr9f4Ka44KeL4KauX+CmruCmmeCnjeCml1/gpqzgp4Hgpqdf4Kas4KeD4Ka54KaDX+CmtuCngeCmleCnjeCmsF/gprbgpqjgpr8nLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnQSBoOm1tIOCmuOCmruCnnycsXG4gICAgICAgICAgICBMVFMgOiAnQSBoOm1tOnNzIOCmuOCmruCnnycsXG4gICAgICAgICAgICBMIDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZLCBBIGg6bW0g4Ka44Kau4KefJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSDgprjgpq7gp58nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICdb4KaG4KacXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5IDogJ1vgpobgppfgpr7gpq7gp4DgppXgpr7gprJdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrIDogJ2RkZGQsIExUJyxcbiAgICAgICAgICAgIGxhc3REYXkgOiAnW+Cml+CmpOCmleCmvuCmsl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiAnW+Cml+CmpF0gZGRkZCwgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJyVzIOCmquCmsOCnhycsXG4gICAgICAgICAgICBwYXN0IDogJyVzIOCmhuCml+CnhycsXG4gICAgICAgICAgICBzIDogJ+CmleCnn+Cnh+CmlSDgprjgp4fgppXgp4fgpqjgp43gpqEnLFxuICAgICAgICAgICAgc3MgOiAnJWQg4Ka44KeH4KaV4KeH4Kao4KeN4KahJyxcbiAgICAgICAgICAgIG0gOiAn4KaP4KaVIOCmruCmv+CmqOCmv+CmnycsXG4gICAgICAgICAgICBtbSA6ICclZCDgpq7gpr/gpqjgpr/gpp8nLFxuICAgICAgICAgICAgaCA6ICfgpo/gppUg4KaY4Kao4KeN4Kaf4Ka+JyxcbiAgICAgICAgICAgIGhoIDogJyVkIOCmmOCmqOCnjeCmn+CmvicsXG4gICAgICAgICAgICBkIDogJ+Cmj+CmlSDgpqbgpr/gpqgnLFxuICAgICAgICAgICAgZGQgOiAnJWQg4Kam4Ka/4KaoJyxcbiAgICAgICAgICAgIE0gOiAn4KaP4KaVIOCmruCmvuCmuCcsXG4gICAgICAgICAgICBNTSA6ICclZCDgpq7gpr7gprgnLFxuICAgICAgICAgICAgeSA6ICfgpo/gppUg4Kas4Kab4KawJyxcbiAgICAgICAgICAgIHl5IDogJyVkIOCmrOCmm+CmsCdcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW+Cnp+CnqOCnqeCnquCnq+CnrOCnreCnruCnr+Cnpl0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+CmsOCmvuCmpHzgprjgppXgpr7gprJ84Kam4KeB4Kaq4KeB4KawfOCmrOCmv+CmleCmvuCmsnzgprDgpr7gpqQvLFxuICAgICAgICBtZXJpZGllbUhvdXIgOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChtZXJpZGllbSA9PT0gJ+CmsOCmvuCmpCcgJiYgaG91ciA+PSA0KSB8fFxuICAgICAgICAgICAgICAgICAgICAobWVyaWRpZW0gPT09ICfgpqbgp4Hgpqrgp4HgprAnICYmIGhvdXIgPCA1KSB8fFxuICAgICAgICAgICAgICAgICAgICBtZXJpZGllbSA9PT0gJ+CmrOCmv+CmleCmvuCmsicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW0gOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CmsOCmvuCmpCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Ka44KaV4Ka+4KayJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpqbgp4Hgpqrgp4HgprAnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CmrOCmv+CmleCmvuCmsic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Kaw4Ka+4KakJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNiAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMXN0IGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYm47XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///138\n")},139:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var bm = moment.defineLocale('bm', {\n        months : 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo'.split('_'),\n        monthsShort : 'Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des'.split('_'),\n        weekdays : 'Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'),\n        weekdaysShort : 'Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib'.split('_'),\n        weekdaysMin : 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'MMMM [tile] D [san] YYYY',\n            LLL : 'MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',\n            LLLL : 'dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm'\n        },\n        calendar : {\n            sameDay : '[Bi lɛrɛ] LT',\n            nextDay : '[Sini lɛrɛ] LT',\n            nextWeek : 'dddd [don lɛrɛ] LT',\n            lastDay : '[Kunu lɛrɛ] LT',\n            lastWeek : 'dddd [tɛmɛnen lɛrɛ] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s kɔnɔ',\n            past : 'a bɛ %s bɔ',\n            s : 'sanga dama dama',\n            ss : 'sekondi %d',\n            m : 'miniti kelen',\n            mm : 'miniti %d',\n            h : 'lɛrɛ kelen',\n            hh : 'lɛrɛ %d',\n            d : 'tile kelen',\n            dd : 'tile %d',\n            M : 'kalo kelen',\n            MM : 'kalo %d',\n            y : 'san kelen',\n            yy : 'san %d'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return bm;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ibS5qcz9hN2ZhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiMTM5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgYm0gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdibScsIHtcbiAgICAgICAgbW9udGhzIDogJ1phbnd1eWVrYWxvX0Zld3VydXlla2Fsb19NYXJpc2lrYWxvX0F3aXJpbGlrYWxvX03Jm2thbG9fWnV3yZtua2Fsb19adWx1eWVrYWxvX1V0aWthbG9fU8mbdGFuYnVydWthbG9fyZRrdXTJlGJ1cnVrYWxvX05vd2FuYnVydWthbG9fRGVzYW5idXJ1a2Fsbycuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAnWmFuX0Zld19NYXJfQXdpX03Jm19adXdfWnVsX1V0aV9TyZt0X8mUa3VfTm93X0Rlcycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXMgOiAnS2FyaV9OdMmbbsmbbl9UYXJhdGFfQXJhYmFfQWxhbWlzYV9KdW1hX1NpYmlyaScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICdLYXJfTnTJm19UYXJfQXJhX0FsYV9KdW1fU2liJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICdLYV9OdF9UYV9Bcl9BbF9KdV9TaScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdISDptbScsXG4gICAgICAgICAgICBMVFMgOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ01NTU0gW3RpbGVdIEQgW3Nhbl0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnTU1NTSBbdGlsZV0gRCBbc2FuXSBZWVlZIFtsyZtyyZtdIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCBNTU1NIFt0aWxlXSBEIFtzYW5dIFlZWVkgW2zJm3LJm10gSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICdbQmkgbMmbcsmbXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5IDogJ1tTaW5pIGzJm3LJm10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnZGRkZCBbZG9uIGzJm3LJm10gTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdbS3VudSBsyZtyyZtdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogJ2RkZGQgW3TJm23Jm25lbiBsyZtyyZtdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICclcyBryZRuyZQnLFxuICAgICAgICAgICAgcGFzdCA6ICdhIGLJmyAlcyBiyZQnLFxuICAgICAgICAgICAgcyA6ICdzYW5nYSBkYW1hIGRhbWEnLFxuICAgICAgICAgICAgc3MgOiAnc2Vrb25kaSAlZCcsXG4gICAgICAgICAgICBtIDogJ21pbml0aSBrZWxlbicsXG4gICAgICAgICAgICBtbSA6ICdtaW5pdGkgJWQnLFxuICAgICAgICAgICAgaCA6ICdsyZtyyZsga2VsZW4nLFxuICAgICAgICAgICAgaGggOiAnbMmbcsmbICVkJyxcbiAgICAgICAgICAgIGQgOiAndGlsZSBrZWxlbicsXG4gICAgICAgICAgICBkZCA6ICd0aWxlICVkJyxcbiAgICAgICAgICAgIE0gOiAna2FsbyBrZWxlbicsXG4gICAgICAgICAgICBNTSA6ICdrYWxvICVkJyxcbiAgICAgICAgICAgIHkgOiAnc2FuIGtlbGVuJyxcbiAgICAgICAgICAgIHl5IDogJ3NhbiAlZCdcbiAgICAgICAgfSxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNCAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYm07XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///139\n")},14:function(module,__webpack_exports__,__webpack_require__){"use strict";eval("/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return History; });\n\n\nfunction mi(name) {\n  throw new Error('History must implement ' + name + '().');\n}\n\nvar History = function () {\n  function History() {\n    \n  }\n\n  History.prototype.activate = function activate(options) {\n    mi('activate');\n  };\n\n  History.prototype.deactivate = function deactivate() {\n    mi('deactivate');\n  };\n\n  History.prototype.getAbsoluteRoot = function getAbsoluteRoot() {\n    mi('getAbsoluteRoot');\n  };\n\n  History.prototype.navigate = function navigate(fragment, options) {\n    mi('navigate');\n  };\n\n  History.prototype.navigateBack = function navigateBack() {\n    mi('navigateBack');\n  };\n\n  History.prototype.setTitle = function setTitle(title) {\n    mi('setTitle');\n  };\n\n  History.prototype.setState = function setState(key, value) {\n    mi('setState');\n  };\n\n  History.prototype.getState = function getState(key) {\n    mi('getState');\n  };\n\n  History.prototype.getHistoryIndex = function getHistoryIndex() {\n    mi('getHistoryIndex');\n  };\n\n  History.prototype.go = function go(movement) {\n    mi('go');\n  };\n\n  return History;\n}();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXVyZWxpYS1oaXN0b3J5L2Rpc3QvbmF0aXZlLW1vZHVsZXMvYXVyZWxpYS1oaXN0b3J5LmpzPzc4ZmQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUE7QUFDQTtBQUNBOztBQUVPO0FBQ1A7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxNC5qcyIsInNvdXJjZXNDb250ZW50IjpbIlxuXG5mdW5jdGlvbiBtaShuYW1lKSB7XG4gIHRocm93IG5ldyBFcnJvcignSGlzdG9yeSBtdXN0IGltcGxlbWVudCAnICsgbmFtZSArICcoKS4nKTtcbn1cblxuZXhwb3J0IHZhciBIaXN0b3J5ID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBIaXN0b3J5KCkge1xuICAgIFxuICB9XG5cbiAgSGlzdG9yeS5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbiBhY3RpdmF0ZShvcHRpb25zKSB7XG4gICAgbWkoJ2FjdGl2YXRlJyk7XG4gIH07XG5cbiAgSGlzdG9yeS5wcm90b3R5cGUuZGVhY3RpdmF0ZSA9IGZ1bmN0aW9uIGRlYWN0aXZhdGUoKSB7XG4gICAgbWkoJ2RlYWN0aXZhdGUnKTtcbiAgfTtcblxuICBIaXN0b3J5LnByb3RvdHlwZS5nZXRBYnNvbHV0ZVJvb3QgPSBmdW5jdGlvbiBnZXRBYnNvbHV0ZVJvb3QoKSB7XG4gICAgbWkoJ2dldEFic29sdXRlUm9vdCcpO1xuICB9O1xuXG4gIEhpc3RvcnkucHJvdG90eXBlLm5hdmlnYXRlID0gZnVuY3Rpb24gbmF2aWdhdGUoZnJhZ21lbnQsIG9wdGlvbnMpIHtcbiAgICBtaSgnbmF2aWdhdGUnKTtcbiAgfTtcblxuICBIaXN0b3J5LnByb3RvdHlwZS5uYXZpZ2F0ZUJhY2sgPSBmdW5jdGlvbiBuYXZpZ2F0ZUJhY2soKSB7XG4gICAgbWkoJ25hdmlnYXRlQmFjaycpO1xuICB9O1xuXG4gIEhpc3RvcnkucHJvdG90eXBlLnNldFRpdGxlID0gZnVuY3Rpb24gc2V0VGl0bGUodGl0bGUpIHtcbiAgICBtaSgnc2V0VGl0bGUnKTtcbiAgfTtcblxuICBIaXN0b3J5LnByb3RvdHlwZS5zZXRTdGF0ZSA9IGZ1bmN0aW9uIHNldFN0YXRlKGtleSwgdmFsdWUpIHtcbiAgICBtaSgnc2V0U3RhdGUnKTtcbiAgfTtcblxuICBIaXN0b3J5LnByb3RvdHlwZS5nZXRTdGF0ZSA9IGZ1bmN0aW9uIGdldFN0YXRlKGtleSkge1xuICAgIG1pKCdnZXRTdGF0ZScpO1xuICB9O1xuXG4gIEhpc3RvcnkucHJvdG90eXBlLmdldEhpc3RvcnlJbmRleCA9IGZ1bmN0aW9uIGdldEhpc3RvcnlJbmRleCgpIHtcbiAgICBtaSgnZ2V0SGlzdG9yeUluZGV4Jyk7XG4gIH07XG5cbiAgSGlzdG9yeS5wcm90b3R5cGUuZ28gPSBmdW5jdGlvbiBnbyhtb3ZlbWVudCkge1xuICAgIG1pKCdnbycpO1xuICB9O1xuXG4gIHJldHVybiBIaXN0b3J5O1xufSgpOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///14\n")},140:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var bg = moment.defineLocale('bg', {\n        months : 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split('_'),\n        monthsShort : 'янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),\n        weekdays : 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split('_'),\n        weekdaysShort : 'нед_пон_вто_сря_чет_пет_съб'.split('_'),\n        weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'D.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY H:mm',\n            LLLL : 'dddd, D MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay : '[Днес в] LT',\n            nextDay : '[Утре в] LT',\n            nextWeek : 'dddd [в] LT',\n            lastDay : '[Вчера в] LT',\n            lastWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 6:\n                        return '[В изминалата] dddd [в] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[В изминалия] dddd [в] LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'след %s',\n            past : 'преди %s',\n            s : 'няколко секунди',\n            ss : '%d секунди',\n            m : 'минута',\n            mm : '%d минути',\n            h : 'час',\n            hh : '%d часа',\n            d : 'ден',\n            dd : '%d дни',\n            M : 'месец',\n            MM : '%d месеца',\n            y : 'година',\n            yy : '%d години'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n        ordinal : function (number) {\n            var lastDigit = number % 10,\n                last2Digits = number % 100;\n            if (number === 0) {\n                return number + '-ев';\n            } else if (last2Digits === 0) {\n                return number + '-ен';\n            } else if (last2Digits > 10 && last2Digits < 20) {\n                return number + '-ти';\n            } else if (lastDigit === 1) {\n                return number + '-ви';\n            } else if (lastDigit === 2) {\n                return number + '-ри';\n            } else if (lastDigit === 7 || lastDigit === 8) {\n                return number + '-ми';\n            } else {\n                return number + '-ти';\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return bg;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9iZy5qcz84NGFhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiMTQwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgYmcgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdiZycsIHtcbiAgICAgICAgbW9udGhzIDogJ9GP0L3Rg9Cw0YDQuF/RhNC10LLRgNGD0LDRgNC4X9C80LDRgNGCX9Cw0L/RgNC40Ltf0LzQsNC5X9GO0L3QuF/RjtC70Lhf0LDQstCz0YPRgdGCX9GB0LXQv9GC0LXQvNCy0YDQuF/QvtC60YLQvtC80LLRgNC4X9C90L7QtdC80LLRgNC4X9C00LXQutC10LzQstGA0LgnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ9GP0L3RgF/RhNC10LJf0LzQsNGAX9Cw0L/RgF/QvNCw0Llf0Y7QvdC4X9GO0LvQuF/QsNCy0LNf0YHQtdC/X9C+0LrRgl/QvdC+0LVf0LTQtdC6Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6ICfQvdC10LTQtdC70Y9f0L/QvtC90LXQtNC10LvQvdC40Lpf0LLRgtC+0YDQvdC40Lpf0YHRgNGP0LTQsF/Rh9C10YLQstGK0YDRgtGK0Lpf0L/QtdGC0YrQul/RgdGK0LHQvtGC0LAnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAn0L3QtdC0X9C/0L7QvV/QstGC0L5f0YHRgNGPX9GH0LXRgl/Qv9C10YJf0YHRitCxJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICfQvdC0X9C/0L1f0LLRgl/RgdGAX9GH0YJf0L/Rgl/RgdCxJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdELk1NLllZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBEIE1NTU0gWVlZWSBIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgOiAnW9CU0L3QtdGBINCyXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5IDogJ1vQo9GC0YDQtSDQsl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnZGRkZCBb0LJdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXkgOiAnW9CS0YfQtdGA0LAg0LJdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0JIg0LjQt9C80LjQvdCw0LvQsNGC0LBdIGRkZGQgW9CyXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CSINC40LfQvNC40L3QsNC70LjRj10gZGRkZCBb0LJdIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ9GB0LvQtdC0ICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAn0L/RgNC10LTQuCAlcycsXG4gICAgICAgICAgICBzIDogJ9C90Y/QutC+0LvQutC+INGB0LXQutGD0L3QtNC4JyxcbiAgICAgICAgICAgIHNzIDogJyVkINGB0LXQutGD0L3QtNC4JyxcbiAgICAgICAgICAgIG0gOiAn0LzQuNC90YPRgtCwJyxcbiAgICAgICAgICAgIG1tIDogJyVkINC80LjQvdGD0YLQuCcsXG4gICAgICAgICAgICBoIDogJ9GH0LDRgScsXG4gICAgICAgICAgICBoaCA6ICclZCDRh9Cw0YHQsCcsXG4gICAgICAgICAgICBkIDogJ9C00LXQvScsXG4gICAgICAgICAgICBkZCA6ICclZCDQtNC90LgnLFxuICAgICAgICAgICAgTSA6ICfQvNC10YHQtdGGJyxcbiAgICAgICAgICAgIE1NIDogJyVkINC80LXRgdC10YbQsCcsXG4gICAgICAgICAgICB5IDogJ9Cz0L7QtNC40L3QsCcsXG4gICAgICAgICAgICB5eSA6ICclZCDQs9C+0LTQuNC90LgnXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS0o0LXQsnzQtdC9fNGC0Lh80LLQuHzRgNC4fNC80LgpLyxcbiAgICAgICAgb3JkaW5hbCA6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBsYXN0RGlnaXQgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBsYXN0MkRpZ2l0cyA9IG51bWJlciAlIDEwMDtcbiAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3QtdCyJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdDJEaWdpdHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3QtdC9JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdDJEaWdpdHMgPiAxMCAmJiBsYXN0MkRpZ2l0cyA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0YLQuCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxhc3REaWdpdCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdCy0LgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChsYXN0RGlnaXQgPT09IDIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3RgNC4JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdERpZ2l0ID09PSA3IHx8IGxhc3REaWdpdCA9PT0gOCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdC80LgnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3RgtC4JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNyAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMXN0IGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYmc7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///140\n")},141:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            'ss': withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n            'mm': withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',\n            'hh': withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',\n            'dd': 'дзень_дні_дзён',\n            'MM': 'месяц_месяцы_месяцаў',\n            'yy': 'год_гады_гадоў'\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'хвіліна' : 'хвіліну';\n        }\n        else if (key === 'h') {\n            return withoutSuffix ? 'гадзіна' : 'гадзіну';\n        }\n        else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n\n    var be = moment.defineLocale('be', {\n        months : {\n            format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_'),\n            standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_')\n        },\n        monthsShort : 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'),\n        weekdays : {\n            format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split('_'),\n            standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split('_'),\n            isFormat: /\\[ ?[Вв] ?(?:мінулую|наступную)? ?\\] ?dddd/\n        },\n        weekdaysShort : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n        weekdaysMin : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY г.',\n            LLL : 'D MMMM YYYY г., HH:mm',\n            LLLL : 'dddd, D MMMM YYYY г., HH:mm'\n        },\n        calendar : {\n            sameDay: '[Сёння ў] LT',\n            nextDay: '[Заўтра ў] LT',\n            lastDay: '[Учора ў] LT',\n            nextWeek: function () {\n                return '[У] dddd [ў] LT';\n            },\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 5:\n                    case 6:\n                        return '[У мінулую] dddd [ў] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                        return '[У мінулы] dddd [ў] LT';\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'праз %s',\n            past : '%s таму',\n            s : 'некалькі секунд',\n            m : relativeTimeWithPlural,\n            mm : relativeTimeWithPlural,\n            h : relativeTimeWithPlural,\n            hh : relativeTimeWithPlural,\n            d : 'дзень',\n            dd : relativeTimeWithPlural,\n            M : 'месяц',\n            MM : relativeTimeWithPlural,\n            y : 'год',\n            yy : relativeTimeWithPlural\n        },\n        meridiemParse: /ночы|раніцы|дня|вечара/,\n        isPM : function (input) {\n            return /^(дня|вечара)$/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночы';\n            } else if (hour < 12) {\n                return 'раніцы';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечара';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(і|ы|га)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                case 'w':\n                case 'W':\n                    return (number % 10 === 2 || number % 10 === 3) && (number % 100 !== 12 && number % 100 !== 13) ? number + '-і' : number + '-ы';\n                case 'D':\n                    return number + '-га';\n                default:\n                    return number;\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return be;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9iZS5qcz8xZmMxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiMTQxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICBmdW5jdGlvbiBwbHVyYWwod29yZCwgbnVtKSB7XG4gICAgICAgIHZhciBmb3JtcyA9IHdvcmQuc3BsaXQoJ18nKTtcbiAgICAgICAgcmV0dXJuIG51bSAlIDEwID09PSAxICYmIG51bSAlIDEwMCAhPT0gMTEgPyBmb3Jtc1swXSA6IChudW0gJSAxMCA+PSAyICYmIG51bSAlIDEwIDw9IDQgJiYgKG51bSAlIDEwMCA8IDEwIHx8IG51bSAlIDEwMCA+PSAyMCkgPyBmb3Jtc1sxXSA6IGZvcm1zWzJdKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lV2l0aFBsdXJhbChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSkge1xuICAgICAgICB2YXIgZm9ybWF0ID0ge1xuICAgICAgICAgICAgJ3NzJzogd2l0aG91dFN1ZmZpeCA/ICfRgdC10LrRg9C90LTQsF/RgdC10LrRg9C90LTRi1/RgdC10LrRg9C90LQnIDogJ9GB0LXQutGD0L3QtNGDX9GB0LXQutGD0L3QtNGLX9GB0LXQutGD0L3QtCcsXG4gICAgICAgICAgICAnbW0nOiB3aXRob3V0U3VmZml4ID8gJ9GF0LLRltC70ZbQvdCwX9GF0LLRltC70ZbQvdGLX9GF0LLRltC70ZbQvScgOiAn0YXQstGW0LvRltC90YNf0YXQstGW0LvRltC90Ytf0YXQstGW0LvRltC9JyxcbiAgICAgICAgICAgICdoaCc6IHdpdGhvdXRTdWZmaXggPyAn0LPQsNC00LfRltC90LBf0LPQsNC00LfRltC90Ytf0LPQsNC00LfRltC9JyA6ICfQs9Cw0LTQt9GW0L3Rg1/Qs9Cw0LTQt9GW0L3Ri1/Qs9Cw0LTQt9GW0L0nLFxuICAgICAgICAgICAgJ2RkJzogJ9C00LfQtdC90Yxf0LTQvdGWX9C00LfRkdC9JyxcbiAgICAgICAgICAgICdNTSc6ICfQvNC10YHRj9GGX9C80LXRgdGP0YbRi1/QvNC10YHRj9GG0LDRnicsXG4gICAgICAgICAgICAneXknOiAn0LPQvtC0X9Cz0LDQtNGLX9Cz0LDQtNC+0Z4nXG4gICAgICAgIH07XG4gICAgICAgIGlmIChrZXkgPT09ICdtJykge1xuICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAn0YXQstGW0LvRltC90LAnIDogJ9GF0LLRltC70ZbQvdGDJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChrZXkgPT09ICdoJykge1xuICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAn0LPQsNC00LfRltC90LAnIDogJ9Cz0LDQtNC30ZbQvdGDJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnICcgKyBwbHVyYWwoZm9ybWF0W2tleV0sICtudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGJlID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYmUnLCB7XG4gICAgICAgIG1vbnRocyA6IHtcbiAgICAgICAgICAgIGZvcm1hdDogJ9GB0YLRg9C00LfQtdC90Y9f0LvRjtGC0LDQs9CwX9GB0LDQutCw0LLRltC60LBf0LrRgNCw0YHQsNCy0ZbQutCwX9GC0YDQsNGe0L3Rj1/Rh9GN0YDQstC10L3Rj1/Qu9GW0L/QtdC90Y9f0LbQvdGW0Z7QvdGPX9Cy0LXRgNCw0YHQvdGPX9C60LDRgdGC0YDRi9GH0L3RltC60LBf0LvRltGB0YLQsNC/0LDQtNCwX9GB0L3QtdC20L3Rjycuc3BsaXQoJ18nKSxcbiAgICAgICAgICAgIHN0YW5kYWxvbmU6ICfRgdGC0YPQtNC30LXQvdGMX9C70Y7RgtGLX9GB0LDQutCw0LLRltC6X9C60YDQsNGB0LDQstGW0Lpf0YLRgNCw0LLQtdC90Yxf0YfRjdGA0LLQtdC90Yxf0LvRltC/0LXQvdGMX9C20L3RltCy0LXQvdGMX9Cy0LXRgNCw0YHQtdC90Yxf0LrQsNGB0YLRgNGL0YfQvdGW0Lpf0LvRltGB0YLQsNC/0LDQtF/RgdC90LXQttCw0L3RjCcuc3BsaXQoJ18nKVxuICAgICAgICB9LFxuICAgICAgICBtb250aHNTaG9ydCA6ICfRgdGC0YPQtF/Qu9GO0YJf0YHQsNC6X9C60YDQsNGBX9GC0YDQsNCyX9GH0Y3RgNCyX9C70ZbQv1/QttC90ZbQsl/QstC10YBf0LrQsNGB0YJf0LvRltGB0YJf0YHQvdC10LYnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzIDoge1xuICAgICAgICAgICAgZm9ybWF0OiAn0L3Rj9C00LfQtdC70Y5f0L/QsNC90Y/QtNC30LXQu9Cw0Lpf0LDRntGC0L7RgNCw0Lpf0YHQtdGA0LDQtNGDX9GH0LDRhtCy0LXRgF/Qv9GP0YLQvdGW0YbRg1/RgdGD0LHQvtGC0YMnLnNwbGl0KCdfJyksXG4gICAgICAgICAgICBzdGFuZGFsb25lOiAn0L3Rj9C00LfQtdC70Y9f0L/QsNC90Y/QtNC30LXQu9Cw0Lpf0LDRntGC0L7RgNCw0Lpf0YHQtdGA0LDQtNCwX9GH0LDRhtCy0LXRgF/Qv9GP0YLQvdGW0YbQsF/RgdGD0LHQvtGC0LAnLnNwbGl0KCdfJyksXG4gICAgICAgICAgICBpc0Zvcm1hdDogL1xcWyA/W9CS0LJdID8oPzrQvNGW0L3Rg9C70YPRjnzQvdCw0YHRgtGD0L/QvdGD0Y4pPyA/XFxdID9kZGRkL1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ9C90LRf0L/QvV/QsNGCX9GB0YBf0YfRhl/Qv9GCX9GB0LEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ9C90LRf0L/QvV/QsNGCX9GB0YBf0YfRhl/Qv9GCX9GB0LEnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWSDQsy4nLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZINCzLiwgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBEIE1NTU0gWVlZWSDQsy4sIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb0KHRkdC90L3RjyDRnl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vQl9Cw0Z7RgtGA0LAg0Z5dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb0KPRh9C+0YDQsCDRnl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1vQo10gZGRkZCBb0Z5dIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vQoyDQvNGW0L3Rg9C70YPRjl0gZGRkZCBb0Z5dIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CjINC80ZbQvdGD0LvRi10gZGRkZCBb0Z5dIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAn0L/RgNCw0LcgJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICclcyDRgtCw0LzRgycsXG4gICAgICAgICAgICBzIDogJ9C90LXQutCw0LvRjNC60ZYg0YHQtdC60YPQvdC0JyxcbiAgICAgICAgICAgIG0gOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgbW0gOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgaCA6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBoaCA6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBkIDogJ9C00LfQtdC90YwnLFxuICAgICAgICAgICAgZGQgOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgTSA6ICfQvNC10YHRj9GGJyxcbiAgICAgICAgICAgIE1NIDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIHkgOiAn0LPQvtC0JyxcbiAgICAgICAgICAgIHl5IDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv0L3QvtGH0Yt80YDQsNC90ZbRhtGLfNC00L3Rj3zQstC10YfQsNGA0LAvLFxuICAgICAgICBpc1BNIDogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gL14o0LTQvdGPfNCy0LXRh9Cw0YDQsCkkLy50ZXN0KGlucHV0KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW0gOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9C90L7Rh9GLJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfRgNCw0L3RltGG0YsnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9C00L3Rjyc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0LLQtdGH0LDRgNCwJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9LSjRlnzRi3zQs9CwKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ3cnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG51bWJlciAlIDEwID09PSAyIHx8IG51bWJlciAlIDEwID09PSAzKSAmJiAobnVtYmVyICUgMTAwICE9PSAxMiAmJiBudW1iZXIgJSAxMDAgIT09IDEzKSA/IG51bWJlciArICct0ZYnIDogbnVtYmVyICsgJy3Riyc7XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdCz0LAnO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDcgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDFzdCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGJlO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///141\n")},142:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var suffixes = {\n        1: '-inci',\n        5: '-inci',\n        8: '-inci',\n        70: '-inci',\n        80: '-inci',\n        2: '-nci',\n        7: '-nci',\n        20: '-nci',\n        50: '-nci',\n        3: '-üncü',\n        4: '-üncü',\n        100: '-üncü',\n        6: '-ncı',\n        9: '-uncu',\n        10: '-uncu',\n        30: '-uncu',\n        60: '-ıncı',\n        90: '-ıncı'\n    };\n\n    var az = moment.defineLocale('az', {\n        months : 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split('_'),\n        monthsShort : 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),\n        weekdays : 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split('_'),\n        weekdaysShort : 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),\n        weekdaysMin : 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[bugün saat] LT',\n            nextDay : '[sabah saat] LT',\n            nextWeek : '[gələn həftə] dddd [saat] LT',\n            lastDay : '[dünən] LT',\n            lastWeek : '[keçən həftə] dddd [saat] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s sonra',\n            past : '%s əvvəl',\n            s : 'birneçə saniyyə',\n            ss : '%d saniyə',\n            m : 'bir dəqiqə',\n            mm : '%d dəqiqə',\n            h : 'bir saat',\n            hh : '%d saat',\n            d : 'bir gün',\n            dd : '%d gün',\n            M : 'bir ay',\n            MM : '%d ay',\n            y : 'bir il',\n            yy : '%d il'\n        },\n        meridiemParse: /gecə|səhər|gündüz|axşam/,\n        isPM : function (input) {\n            return /^(gündüz|axşam)$/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'gecə';\n            } else if (hour < 12) {\n                return 'səhər';\n            } else if (hour < 17) {\n                return 'gündüz';\n            } else {\n                return 'axşam';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,\n        ordinal : function (number) {\n            if (number === 0) {  // special case for zero\n                return number + '-ıncı';\n            }\n            var a = number % 10,\n                b = number % 100 - a,\n                c = number >= 100 ? 100 : null;\n            return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return az;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hei5qcz80ODVjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiMTQyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgc3VmZml4ZXMgPSB7XG4gICAgICAgIDE6ICctaW5jaScsXG4gICAgICAgIDU6ICctaW5jaScsXG4gICAgICAgIDg6ICctaW5jaScsXG4gICAgICAgIDcwOiAnLWluY2knLFxuICAgICAgICA4MDogJy1pbmNpJyxcbiAgICAgICAgMjogJy1uY2knLFxuICAgICAgICA3OiAnLW5jaScsXG4gICAgICAgIDIwOiAnLW5jaScsXG4gICAgICAgIDUwOiAnLW5jaScsXG4gICAgICAgIDM6ICctw7xuY8O8JyxcbiAgICAgICAgNDogJy3DvG5jw7wnLFxuICAgICAgICAxMDA6ICctw7xuY8O8JyxcbiAgICAgICAgNjogJy1uY8SxJyxcbiAgICAgICAgOTogJy11bmN1JyxcbiAgICAgICAgMTA6ICctdW5jdScsXG4gICAgICAgIDMwOiAnLXVuY3UnLFxuICAgICAgICA2MDogJy3EsW5jxLEnLFxuICAgICAgICA5MDogJy3EsW5jxLEnXG4gICAgfTtcblxuICAgIHZhciBheiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2F6Jywge1xuICAgICAgICBtb250aHMgOiAneWFudmFyX2ZldnJhbF9tYXJ0X2FwcmVsX21heV9peXVuX2l5dWxfYXZxdXN0X3NlbnR5YWJyX29rdHlhYnJfbm95YWJyX2Rla2Ficicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAneWFuX2Zldl9tYXJfYXByX21heV9peW5faXlsX2F2cV9zZW5fb2t0X25veV9kZWsnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzIDogJ0JhemFyX0JhemFyIGVydMmZc2lfw4fJmXLFn8mZbmLJmSBheMWfYW3EsV/Dh8mZcsWfyZluYsmZX0PDvG3JmSBheMWfYW3EsV9Dw7xtyZlfxZ7JmW5iyZknLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAnQmF6X0J6RV/Dh0F4X8OHyZlyX0NBeF9Dw7xtX8WeyZluJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICdCel9CRV/Dh0Ffw4fJmV9DQV9Dw7xfxZ7JmScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0IDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdISDptbScsXG4gICAgICAgICAgICBMVFMgOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgOiAnW2J1Z8O8biBzYWF0XSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5IDogJ1tzYWJhaCBzYWF0XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdbZ8mZbMmZbiBoyZlmdMmZXSBkZGRkIFtzYWF0XSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5IDogJ1tkw7xuyZluXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlayA6ICdba2XDp8mZbiBoyZlmdMmZXSBkZGRkIFtzYWF0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnJXMgc29ucmEnLFxuICAgICAgICAgICAgcGFzdCA6ICclcyDJmXZ2yZlsJyxcbiAgICAgICAgICAgIHMgOiAnYmlybmXDp8mZIHNhbml5ecmZJyxcbiAgICAgICAgICAgIHNzIDogJyVkIHNhbml5yZknLFxuICAgICAgICAgICAgbSA6ICdiaXIgZMmZcWlxyZknLFxuICAgICAgICAgICAgbW0gOiAnJWQgZMmZcWlxyZknLFxuICAgICAgICAgICAgaCA6ICdiaXIgc2FhdCcsXG4gICAgICAgICAgICBoaCA6ICclZCBzYWF0JyxcbiAgICAgICAgICAgIGQgOiAnYmlyIGfDvG4nLFxuICAgICAgICAgICAgZGQgOiAnJWQgZ8O8bicsXG4gICAgICAgICAgICBNIDogJ2JpciBheScsXG4gICAgICAgICAgICBNTSA6ICclZCBheScsXG4gICAgICAgICAgICB5IDogJ2JpciBpbCcsXG4gICAgICAgICAgICB5eSA6ICclZCBpbCdcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL2dlY8mZfHPJmWjJmXJ8Z8O8bmTDvHp8YXjFn2FtLyxcbiAgICAgICAgaXNQTSA6IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIC9eKGfDvG5kw7x6fGF4xZ9hbSkkLy50ZXN0KGlucHV0KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW0gOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2dlY8mZJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdzyZloyZlyJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdnw7xuZMO8eic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAnYXjFn2FtJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9LSjEsW5jxLF8aW5jaXxuY2l8w7xuY8O8fG5jxLF8dW5jdSkvLFxuICAgICAgICBvcmRpbmFsIDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMCkgeyAgLy8gc3BlY2lhbCBjYXNlIGZvciB6ZXJvXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICctxLFuY8SxJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgYiA9IG51bWJlciAlIDEwMCAtIGEsXG4gICAgICAgICAgICAgICAgYyA9IG51bWJlciA+PSAxMDAgPyAxMDAgOiBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIChzdWZmaXhlc1thXSB8fCBzdWZmaXhlc1tiXSB8fCBzdWZmaXhlc1tjXSk7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDcgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDFzdCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGF6O1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///142\n")},143:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var arTn = moment.defineLocale('ar-tn', {\n        months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n        monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar: {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: 'في %s',\n            past: 'منذ %s',\n            s: 'ثوان',\n            ss : '%d ثانية',\n            m: 'دقيقة',\n            mm: '%d دقائق',\n            h: 'ساعة',\n            hh: '%d ساعات',\n            d: 'يوم',\n            dd: '%d أيام',\n            M: 'شهر',\n            MM: '%d أشهر',\n            y: 'سنة',\n            yy: '%d سنوات'\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4 // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return arTn;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci10bi5qcz82ZDgzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiIxNDMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBhclRuID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYXItdG4nLCB7XG4gICAgICAgIG1vbnRoczogJ9is2KfZhtmB2Ypf2YHZitmB2LHZil/Zhdin2LHYs1/Yo9mB2LHZitmEX9mF2KfZil/YrNmI2KfZhl/YrNmI2YrZhNmK2Klf2KPZiNiqX9iz2KjYqtmF2KjYsV/Yo9mD2KrZiNio2LFf2YbZiNmB2YXYqNixX9iv2YrYs9mF2KjYsScuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfYrNin2YbZgdmKX9mB2YrZgdix2Ypf2YXYp9ix2LNf2KPZgdix2YrZhF/Zhdin2Ypf2KzZiNin2YZf2KzZiNmK2YTZitipX9ij2YjYql/Ys9io2KrZhdio2LFf2KPZg9iq2YjYqNixX9mG2YjZgdmF2KjYsV/Yr9mK2LPZhdio2LEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAn2KfZhNij2K3Yr1/Yp9mE2KXYq9mG2YrZhl/Yp9mE2KvZhNin2KvYp9ihX9in2YTYo9ix2KjYudin2KFf2KfZhNiu2YXZitizX9in2YTYrNmF2LnYqV/Yp9mE2LPYqNiqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn2KPYrdivX9il2KvZhtmK2YZf2KvZhNin2KvYp9ihX9ij2LHYqNi52KfYoV/YrtmF2YrYs1/YrNmF2LnYqV/Ys9io2KonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn2K1f2YZf2Ktf2LFf2K5f2Kxf2LMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdCA6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9in2YTZitmI2YUg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vYutiv2Kcg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9ij2YXYsyDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW9i52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfZgdmKICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICfZhdmG2LAgJXMnLFxuICAgICAgICAgICAgczogJ9ir2YjYp9mGJyxcbiAgICAgICAgICAgIHNzIDogJyVkINir2KfZhtmK2KknLFxuICAgICAgICAgICAgbTogJ9iv2YLZitmC2KknLFxuICAgICAgICAgICAgbW06ICclZCDYr9mC2KfYptmCJyxcbiAgICAgICAgICAgIGg6ICfYs9in2LnYqScsXG4gICAgICAgICAgICBoaDogJyVkINiz2KfYudin2KonLFxuICAgICAgICAgICAgZDogJ9mK2YjZhScsXG4gICAgICAgICAgICBkZDogJyVkINij2YrYp9mFJyxcbiAgICAgICAgICAgIE06ICfYtNmH2LEnLFxuICAgICAgICAgICAgTU06ICclZCDYo9i02YfYsScsXG4gICAgICAgICAgICB5OiAn2LPZhtipJyxcbiAgICAgICAgICAgIHl5OiAnJWQg2LPZhtmI2KfYqidcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBhclRuO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///143\n")},144:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '١',\n        '2': '٢',\n        '3': '٣',\n        '4': '٤',\n        '5': '٥',\n        '6': '٦',\n        '7': '٧',\n        '8': '٨',\n        '9': '٩',\n        '0': '٠'\n    }, numberMap = {\n        '١': '1',\n        '٢': '2',\n        '٣': '3',\n        '٤': '4',\n        '٥': '5',\n        '٦': '6',\n        '٧': '7',\n        '٨': '8',\n        '٩': '9',\n        '٠': '0'\n    };\n\n    var arSa = moment.defineLocale('ar-sa', {\n        months : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n        monthsShort : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n        weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /ص|م/,\n        isPM : function (input) {\n            return 'م' === input;\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar : {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'في %s',\n            past : 'منذ %s',\n            s : 'ثوان',\n            ss : '%d ثانية',\n            m : 'دقيقة',\n            mm : '%d دقائق',\n            h : 'ساعة',\n            hh : '%d ساعات',\n            d : 'يوم',\n            dd : '%d أيام',\n            M : 'شهر',\n            MM : '%d أشهر',\n            y : 'سنة',\n            yy : '%d سنوات'\n        },\n        preparse: function (string) {\n            return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n                return numberMap[match];\n            }).replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            }).replace(/,/g, '،');\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return arSa;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1zYS5qcz84MjMwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiIxNDQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICcxJzogJ9mhJyxcbiAgICAgICAgJzInOiAn2aInLFxuICAgICAgICAnMyc6ICfZoycsXG4gICAgICAgICc0JzogJ9mkJyxcbiAgICAgICAgJzUnOiAn2aUnLFxuICAgICAgICAnNic6ICfZpicsXG4gICAgICAgICc3JzogJ9mnJyxcbiAgICAgICAgJzgnOiAn2agnLFxuICAgICAgICAnOSc6ICfZqScsXG4gICAgICAgICcwJzogJ9mgJ1xuICAgIH0sIG51bWJlck1hcCA9IHtcbiAgICAgICAgJ9mhJzogJzEnLFxuICAgICAgICAn2aInOiAnMicsXG4gICAgICAgICfZoyc6ICczJyxcbiAgICAgICAgJ9mkJzogJzQnLFxuICAgICAgICAn2aUnOiAnNScsXG4gICAgICAgICfZpic6ICc2JyxcbiAgICAgICAgJ9mnJzogJzcnLFxuICAgICAgICAn2agnOiAnOCcsXG4gICAgICAgICfZqSc6ICc5JyxcbiAgICAgICAgJ9mgJzogJzAnXG4gICAgfTtcblxuICAgIHZhciBhclNhID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYXItc2EnLCB7XG4gICAgICAgIG1vbnRocyA6ICfZitmG2KfZitixX9mB2KjYsdin2YrYsV/Zhdin2LHYs1/Yo9io2LHZitmEX9mF2KfZitmIX9mK2YjZhtmK2Yhf2YrZiNmE2YrZiF/Yo9i62LPYt9izX9iz2KjYqtmF2KjYsV/Yo9mD2KrZiNio2LFf2YbZiNmB2YXYqNixX9iv2YrYs9mF2KjYsScuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAn2YrZhtin2YrYsV/Zgdio2LHYp9mK2LFf2YXYp9ix2LNf2KPYqNix2YrZhF/Zhdin2YrZiF/ZitmI2YbZitmIX9mK2YjZhNmK2Yhf2KPYutiz2LfYs1/Ys9io2KrZhdio2LFf2KPZg9iq2YjYqNixX9mG2YjZgdmF2KjYsV/Yr9mK2LPZhdio2LEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzIDogJ9in2YTYo9it2K9f2KfZhNil2KvZhtmK2YZf2KfZhNir2YTYp9ir2KfYoV/Yp9mE2KPYsdio2LnYp9ihX9in2YTYrtmF2YrYs1/Yp9mE2KzZhdi52Klf2KfZhNiz2KjYqicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICfYo9it2K9f2KXYq9mG2YrZhl/Yq9mE2KfYq9in2KFf2KPYsdio2LnYp9ihX9iu2YXZitizX9is2YXYudipX9iz2KjYqicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAn2K1f2YZf2Ktf2LFf2K5f2Kxf2LMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdCA6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv2LV82YUvLFxuICAgICAgICBpc1BNIDogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gJ9mFJyA9PT0gaW5wdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtIDogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn2LUnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9mFJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9in2YTZitmI2YUg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vYutiv2Kcg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9ij2YXYsyDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW9i52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ9mB2YogJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICfZhdmG2LAgJXMnLFxuICAgICAgICAgICAgcyA6ICfYq9mI2KfZhicsXG4gICAgICAgICAgICBzcyA6ICclZCDYq9in2YbZitipJyxcbiAgICAgICAgICAgIG0gOiAn2K/ZgtmK2YLYqScsXG4gICAgICAgICAgICBtbSA6ICclZCDYr9mC2KfYptmCJyxcbiAgICAgICAgICAgIGggOiAn2LPYp9i52KknLFxuICAgICAgICAgICAgaGggOiAnJWQg2LPYp9i52KfYqicsXG4gICAgICAgICAgICBkIDogJ9mK2YjZhScsXG4gICAgICAgICAgICBkZCA6ICclZCDYo9mK2KfZhScsXG4gICAgICAgICAgICBNIDogJ9i02YfYsScsXG4gICAgICAgICAgICBNTSA6ICclZCDYo9i02YfYsScsXG4gICAgICAgICAgICB5IDogJ9iz2YbYqScsXG4gICAgICAgICAgICB5eSA6ICclZCDYs9mG2YjYp9iqJ1xuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b2aHZotmj2aTZpdmm2afZqNmp2aBdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSkucmVwbGFjZSgv2IwvZywgJywnKTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICB9KS5yZXBsYWNlKC8sL2csICfYjCcpO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA2ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxc3QgaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBhclNhO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///144\n")},145:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var arMa = moment.defineLocale('ar-ma', {\n        months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n        monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n        weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'في %s',\n            past : 'منذ %s',\n            s : 'ثوان',\n            ss : '%d ثانية',\n            m : 'دقيقة',\n            mm : '%d دقائق',\n            h : 'ساعة',\n            hh : '%d ساعات',\n            d : 'يوم',\n            dd : '%d أيام',\n            M : 'شهر',\n            MM : '%d أشهر',\n            y : 'سنة',\n            yy : '%d سنوات'\n        },\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return arMa;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1tYS5qcz8wYTg0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiIxNDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBhck1hID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYXItbWEnLCB7XG4gICAgICAgIG1vbnRocyA6ICfZitmG2KfZitixX9mB2KjYsdin2YrYsV/Zhdin2LHYs1/Yo9io2LHZitmEX9mF2KfZil/ZitmI2YbZitmIX9mK2YjZhNmK2YjYsl/Yuti02Kpf2LTYqtmG2KjYsV/Yo9mD2KrZiNio2LFf2YbZiNmG2KjYsV/Yr9is2YbYqNixJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICfZitmG2KfZitixX9mB2KjYsdin2YrYsV/Zhdin2LHYs1/Yo9io2LHZitmEX9mF2KfZil/ZitmI2YbZitmIX9mK2YjZhNmK2YjYsl/Yuti02Kpf2LTYqtmG2KjYsV/Yo9mD2KrZiNio2LFf2YbZiNmG2KjYsV/Yr9is2YbYqNixJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6ICfYp9mE2KPYrdivX9in2YTYpdiq2YbZitmGX9in2YTYq9mE2KfYq9in2KFf2KfZhNij2LHYqNi52KfYoV/Yp9mE2K7ZhdmK2LNf2KfZhNis2YXYudipX9in2YTYs9io2KonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAn2KfYrdivX9in2KrZhtmK2YZf2KvZhNin2KvYp9ihX9in2LHYqNi52KfYoV/YrtmF2YrYs1/YrNmF2LnYqV/Ys9io2KonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ9itX9mGX9irX9ixX9iuX9isX9izJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9in2YTZitmI2YUg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vYutiv2Kcg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9ij2YXYsyDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW9i52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ9mB2YogJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICfZhdmG2LAgJXMnLFxuICAgICAgICAgICAgcyA6ICfYq9mI2KfZhicsXG4gICAgICAgICAgICBzcyA6ICclZCDYq9in2YbZitipJyxcbiAgICAgICAgICAgIG0gOiAn2K/ZgtmK2YLYqScsXG4gICAgICAgICAgICBtbSA6ICclZCDYr9mC2KfYptmCJyxcbiAgICAgICAgICAgIGggOiAn2LPYp9i52KknLFxuICAgICAgICAgICAgaGggOiAnJWQg2LPYp9i52KfYqicsXG4gICAgICAgICAgICBkIDogJ9mK2YjZhScsXG4gICAgICAgICAgICBkZCA6ICclZCDYo9mK2KfZhScsXG4gICAgICAgICAgICBNIDogJ9i02YfYsScsXG4gICAgICAgICAgICBNTSA6ICclZCDYo9i02YfYsScsXG4gICAgICAgICAgICB5IDogJ9iz2YbYqScsXG4gICAgICAgICAgICB5eSA6ICclZCDYs9mG2YjYp9iqJ1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogNiwgLy8gU2F0dXJkYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDEyICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxc3QgaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBhck1hO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///145\n")},146:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '1',\n        '2': '2',\n        '3': '3',\n        '4': '4',\n        '5': '5',\n        '6': '6',\n        '7': '7',\n        '8': '8',\n        '9': '9',\n        '0': '0'\n    }, pluralForm = function (n) {\n        return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;\n    }, plurals = {\n        s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],\n        m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],\n        h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],\n        d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],\n        M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],\n        y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']\n    }, pluralize = function (u) {\n        return function (number, withoutSuffix, string, isFuture) {\n            var f = pluralForm(number),\n                str = plurals[u][pluralForm(number)];\n            if (f === 2) {\n                str = str[withoutSuffix ? 0 : 1];\n            }\n            return str.replace(/%d/i, number);\n        };\n    }, months = [\n        'يناير',\n        'فبراير',\n        'مارس',\n        'أبريل',\n        'مايو',\n        'يونيو',\n        'يوليو',\n        'أغسطس',\n        'سبتمبر',\n        'أكتوبر',\n        'نوفمبر',\n        'ديسمبر'\n    ];\n\n    var arLy = moment.defineLocale('ar-ly', {\n        months : months,\n        monthsShort : months,\n        weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'D/\\u200FM/\\u200FYYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /ص|م/,\n        isPM : function (input) {\n            return 'م' === input;\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar : {\n            sameDay: '[اليوم عند الساعة] LT',\n            nextDay: '[غدًا عند الساعة] LT',\n            nextWeek: 'dddd [عند الساعة] LT',\n            lastDay: '[أمس عند الساعة] LT',\n            lastWeek: 'dddd [عند الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'بعد %s',\n            past : 'منذ %s',\n            s : pluralize('s'),\n            ss : pluralize('s'),\n            m : pluralize('m'),\n            mm : pluralize('m'),\n            h : pluralize('h'),\n            hh : pluralize('h'),\n            d : pluralize('d'),\n            dd : pluralize('d'),\n            M : pluralize('M'),\n            MM : pluralize('M'),\n            y : pluralize('y'),\n            yy : pluralize('y')\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            }).replace(/,/g, '،');\n        },\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return arLy;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1seS5qcz8xY2ZkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiMTQ2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAnMSc6ICcxJyxcbiAgICAgICAgJzInOiAnMicsXG4gICAgICAgICczJzogJzMnLFxuICAgICAgICAnNCc6ICc0JyxcbiAgICAgICAgJzUnOiAnNScsXG4gICAgICAgICc2JzogJzYnLFxuICAgICAgICAnNyc6ICc3JyxcbiAgICAgICAgJzgnOiAnOCcsXG4gICAgICAgICc5JzogJzknLFxuICAgICAgICAnMCc6ICcwJ1xuICAgIH0sIHBsdXJhbEZvcm0gPSBmdW5jdGlvbiAobikge1xuICAgICAgICByZXR1cm4gbiA9PT0gMCA/IDAgOiBuID09PSAxID8gMSA6IG4gPT09IDIgPyAyIDogbiAlIDEwMCA+PSAzICYmIG4gJSAxMDAgPD0gMTAgPyAzIDogbiAlIDEwMCA+PSAxMSA/IDQgOiA1O1xuICAgIH0sIHBsdXJhbHMgPSB7XG4gICAgICAgIHMgOiBbJ9ij2YLZhCDZhdmGINir2KfZhtmK2KknLCAn2KvYp9mG2YrYqSDZiNin2K3Yr9ipJywgWyfYq9in2YbZitiq2KfZhicsICfYq9in2YbZitiq2YrZhiddLCAnJWQg2KvZiNin2YYnLCAnJWQg2KvYp9mG2YrYqScsICclZCDYq9in2YbZitipJ10sXG4gICAgICAgIG0gOiBbJ9ij2YLZhCDZhdmGINiv2YLZitmC2KknLCAn2K/ZgtmK2YLYqSDZiNin2K3Yr9ipJywgWyfYr9mC2YrZgtiq2KfZhicsICfYr9mC2YrZgtiq2YrZhiddLCAnJWQg2K/Zgtin2KbZgicsICclZCDYr9mC2YrZgtipJywgJyVkINiv2YLZitmC2KknXSxcbiAgICAgICAgaCA6IFsn2KPZgtmEINmF2YYg2LPYp9i52KknLCAn2LPYp9i52Kkg2YjYp9it2K/YqScsIFsn2LPYp9i52KrYp9mGJywgJ9iz2KfYudiq2YrZhiddLCAnJWQg2LPYp9i52KfYqicsICclZCDYs9in2LnYqScsICclZCDYs9in2LnYqSddLFxuICAgICAgICBkIDogWyfYo9mC2YQg2YXZhiDZitmI2YUnLCAn2YrZiNmFINmI2KfYrdivJywgWyfZitmI2YXYp9mGJywgJ9mK2YjZhdmK2YYnXSwgJyVkINij2YrYp9mFJywgJyVkINmK2YjZhdmL2KcnLCAnJWQg2YrZiNmFJ10sXG4gICAgICAgIE0gOiBbJ9ij2YLZhCDZhdmGINi02YfYsScsICfYtNmH2LEg2YjYp9it2K8nLCBbJ9i02YfYsdin2YYnLCAn2LTZh9ix2YrZhiddLCAnJWQg2KPYtNmH2LEnLCAnJWQg2LTZh9ix2KcnLCAnJWQg2LTZh9ixJ10sXG4gICAgICAgIHkgOiBbJ9ij2YLZhCDZhdmGINi52KfZhScsICfYudin2YUg2YjYp9it2K8nLCBbJ9i52KfZhdin2YYnLCAn2LnYp9mF2YrZhiddLCAnJWQg2KPYudmI2KfZhScsICclZCDYudin2YXZi9inJywgJyVkINi52KfZhSddXG4gICAgfSwgcGx1cmFsaXplID0gZnVuY3Rpb24gKHUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgIHZhciBmID0gcGx1cmFsRm9ybShudW1iZXIpLFxuICAgICAgICAgICAgICAgIHN0ciA9IHBsdXJhbHNbdV1bcGx1cmFsRm9ybShudW1iZXIpXTtcbiAgICAgICAgICAgIGlmIChmID09PSAyKSB7XG4gICAgICAgICAgICAgICAgc3RyID0gc3RyW3dpdGhvdXRTdWZmaXggPyAwIDogMV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyVkL2ksIG51bWJlcik7XG4gICAgICAgIH07XG4gICAgfSwgbW9udGhzID0gW1xuICAgICAgICAn2YrZhtin2YrYsScsXG4gICAgICAgICfZgdio2LHYp9mK2LEnLFxuICAgICAgICAn2YXYp9ix2LMnLFxuICAgICAgICAn2KPYqNix2YrZhCcsXG4gICAgICAgICfZhdin2YrZiCcsXG4gICAgICAgICfZitmI2YbZitmIJyxcbiAgICAgICAgJ9mK2YjZhNmK2YgnLFxuICAgICAgICAn2KPYutiz2LfYsycsXG4gICAgICAgICfYs9io2KrZhdio2LEnLFxuICAgICAgICAn2KPZg9iq2YjYqNixJyxcbiAgICAgICAgJ9mG2YjZgdmF2KjYsScsXG4gICAgICAgICfYr9mK2LPZhdio2LEnXG4gICAgXTtcblxuICAgIHZhciBhckx5ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYXItbHknLCB7XG4gICAgICAgIG1vbnRocyA6IG1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQgOiBtb250aHMsXG4gICAgICAgIHdlZWtkYXlzIDogJ9in2YTYo9it2K9f2KfZhNil2KvZhtmK2YZf2KfZhNir2YTYp9ir2KfYoV/Yp9mE2KPYsdio2LnYp9ihX9in2YTYrtmF2YrYs1/Yp9mE2KzZhdi52Klf2KfZhNiz2KjYqicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICfYo9it2K9f2KXYq9mG2YrZhl/Yq9mE2KfYq9in2KFf2KPYsdio2LnYp9ihX9iu2YXZitizX9is2YXYudipX9iz2KjYqicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAn2K1f2YZf2Ktf2LFf2K5f2Kxf2LMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdCA6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnRC9cXHUyMDBGTS9cXHUyMDBGWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv2LV82YUvLFxuICAgICAgICBpc1BNIDogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gJ9mFJyA9PT0gaW5wdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtIDogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn2LUnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9mFJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9in2YTZitmI2YUg2LnZhtivINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vYutiv2YvYpyDYudmG2K8g2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW9i52YbYryDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb2KPZhdizINi52YbYryDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBb2LnZhtivINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAn2KjYudivICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAn2YXZhtiwICVzJyxcbiAgICAgICAgICAgIHMgOiBwbHVyYWxpemUoJ3MnKSxcbiAgICAgICAgICAgIHNzIDogcGx1cmFsaXplKCdzJyksXG4gICAgICAgICAgICBtIDogcGx1cmFsaXplKCdtJyksXG4gICAgICAgICAgICBtbSA6IHBsdXJhbGl6ZSgnbScpLFxuICAgICAgICAgICAgaCA6IHBsdXJhbGl6ZSgnaCcpLFxuICAgICAgICAgICAgaGggOiBwbHVyYWxpemUoJ2gnKSxcbiAgICAgICAgICAgIGQgOiBwbHVyYWxpemUoJ2QnKSxcbiAgICAgICAgICAgIGRkIDogcGx1cmFsaXplKCdkJyksXG4gICAgICAgICAgICBNIDogcGx1cmFsaXplKCdNJyksXG4gICAgICAgICAgICBNTSA6IHBsdXJhbGl6ZSgnTScpLFxuICAgICAgICAgICAgeSA6IHBsdXJhbGl6ZSgneScpLFxuICAgICAgICAgICAgeXkgOiBwbHVyYWxpemUoJ3knKVxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC/YjC9nLCAnLCcpO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pLnJlcGxhY2UoLywvZywgJ9iMJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiA2LCAvLyBTYXR1cmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogMTIgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDFzdCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFyTHk7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///146\n")},147:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var arKw = moment.defineLocale('ar-kw', {\n        months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n        monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n        weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'في %s',\n            past : 'منذ %s',\n            s : 'ثوان',\n            ss : '%d ثانية',\n            m : 'دقيقة',\n            mm : '%d دقائق',\n            h : 'ساعة',\n            hh : '%d ساعات',\n            d : 'يوم',\n            dd : '%d أيام',\n            M : 'شهر',\n            MM : '%d أشهر',\n            y : 'سنة',\n            yy : '%d سنوات'\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 12  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return arKw;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1rdy5qcz80MjNlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiIxNDcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBhckt3ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYXIta3cnLCB7XG4gICAgICAgIG1vbnRocyA6ICfZitmG2KfZitixX9mB2KjYsdin2YrYsV/Zhdin2LHYs1/Yo9io2LHZitmEX9mF2KfZil/ZitmI2YbZitmIX9mK2YjZhNmK2YjYsl/Yuti02Kpf2LTYqtmG2KjYsV/Yo9mD2KrZiNio2LFf2YbZiNmG2KjYsV/Yr9is2YbYqNixJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICfZitmG2KfZitixX9mB2KjYsdin2YrYsV/Zhdin2LHYs1/Yo9io2LHZitmEX9mF2KfZil/ZitmI2YbZitmIX9mK2YjZhNmK2YjYsl/Yuti02Kpf2LTYqtmG2KjYsV/Yo9mD2KrZiNio2LFf2YbZiNmG2KjYsV/Yr9is2YbYqNixJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6ICfYp9mE2KPYrdivX9in2YTYpdiq2YbZitmGX9in2YTYq9mE2KfYq9in2KFf2KfZhNij2LHYqNi52KfYoV/Yp9mE2K7ZhdmK2LNf2KfZhNis2YXYudipX9in2YTYs9io2KonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAn2KfYrdivX9in2KrZhtmK2YZf2KvZhNin2KvYp9ihX9in2LHYqNi52KfYoV/YrtmF2YrYs1/YrNmF2LnYqV/Ys9io2KonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ9itX9mGX9irX9ixX9iuX9isX9izJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9in2YTZitmI2YUg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vYutiv2Kcg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9ij2YXYsyDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW9i52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ9mB2YogJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICfZhdmG2LAgJXMnLFxuICAgICAgICAgICAgcyA6ICfYq9mI2KfZhicsXG4gICAgICAgICAgICBzcyA6ICclZCDYq9in2YbZitipJyxcbiAgICAgICAgICAgIG0gOiAn2K/ZgtmK2YLYqScsXG4gICAgICAgICAgICBtbSA6ICclZCDYr9mC2KfYptmCJyxcbiAgICAgICAgICAgIGggOiAn2LPYp9i52KknLFxuICAgICAgICAgICAgaGggOiAnJWQg2LPYp9i52KfYqicsXG4gICAgICAgICAgICBkIDogJ9mK2YjZhScsXG4gICAgICAgICAgICBkZCA6ICclZCDYo9mK2KfZhScsXG4gICAgICAgICAgICBNIDogJ9i02YfYsScsXG4gICAgICAgICAgICBNTSA6ICclZCDYo9i02YfYsScsXG4gICAgICAgICAgICB5IDogJ9iz2YbYqScsXG4gICAgICAgICAgICB5eSA6ICclZCDYs9mG2YjYp9iqJ1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiAxMiAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMXN0IGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXJLdztcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///147\n")},148:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var arDz = moment.defineLocale('ar-dz', {\n        months : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n        monthsShort : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n        weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort : 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin : 'أح_إث_ثلا_أر_خم_جم_سب'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'في %s',\n            past : 'منذ %s',\n            s : 'ثوان',\n            ss : '%d ثانية',\n            m : 'دقيقة',\n            mm : '%d دقائق',\n            h : 'ساعة',\n            hh : '%d ساعات',\n            d : 'يوم',\n            dd : '%d أيام',\n            M : 'شهر',\n            MM : '%d أشهر',\n            y : 'سنة',\n            yy : '%d سنوات'\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 4  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return arDz;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1kei5qcz9hMzU2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiIxNDguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBhckR6ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYXItZHonLCB7XG4gICAgICAgIG1vbnRocyA6ICfYrNin2YbZgdmKX9mB2YrZgdix2Ypf2YXYp9ix2LNf2KPZgdix2YrZhF/Zhdin2Ypf2KzZiNin2YZf2KzZiNmK2YTZitipX9ij2YjYql/Ys9io2KrZhdio2LFf2KPZg9iq2YjYqNixX9mG2YjZgdmF2KjYsV/Yr9mK2LPZhdio2LEnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ9is2KfZhtmB2Ypf2YHZitmB2LHZil/Zhdin2LHYs1/Yo9mB2LHZitmEX9mF2KfZil/YrNmI2KfZhl/YrNmI2YrZhNmK2Klf2KPZiNiqX9iz2KjYqtmF2KjYsV/Yo9mD2KrZiNio2LFf2YbZiNmB2YXYqNixX9iv2YrYs9mF2KjYsScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXMgOiAn2KfZhNij2K3Yr1/Yp9mE2KXYq9mG2YrZhl/Yp9mE2KvZhNin2KvYp9ihX9in2YTYo9ix2KjYudin2KFf2KfZhNiu2YXZitizX9in2YTYrNmF2LnYqV/Yp9mE2LPYqNiqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ9in2K3Yr1/Yp9ir2YbZitmGX9ir2YTYp9ir2KfYoV/Yp9ix2KjYudin2KFf2K7ZhdmK2LNf2KzZhdi52Klf2LPYqNiqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICfYo9itX9il2Ktf2KvZhNinX9ij2LFf2K7ZhV/YrNmFX9iz2KgnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdCA6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb2KfZhNmK2YjZhSDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9i62K/YpyDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW9i52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb2KPZhdizINi52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBb2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAn2YHZiiAlcycsXG4gICAgICAgICAgICBwYXN0IDogJ9mF2YbYsCAlcycsXG4gICAgICAgICAgICBzIDogJ9ir2YjYp9mGJyxcbiAgICAgICAgICAgIHNzIDogJyVkINir2KfZhtmK2KknLFxuICAgICAgICAgICAgbSA6ICfYr9mC2YrZgtipJyxcbiAgICAgICAgICAgIG1tIDogJyVkINiv2YLYp9im2YInLFxuICAgICAgICAgICAgaCA6ICfYs9in2LnYqScsXG4gICAgICAgICAgICBoaCA6ICclZCDYs9in2LnYp9iqJyxcbiAgICAgICAgICAgIGQgOiAn2YrZiNmFJyxcbiAgICAgICAgICAgIGRkIDogJyVkINij2YrYp9mFJyxcbiAgICAgICAgICAgIE0gOiAn2LTZh9ixJyxcbiAgICAgICAgICAgIE1NIDogJyVkINij2LTZh9ixJyxcbiAgICAgICAgICAgIHkgOiAn2LPZhtipJyxcbiAgICAgICAgICAgIHl5IDogJyVkINiz2YbZiNin2KonXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDFzdCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFyRHo7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///148\n")},149:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '١',\n        '2': '٢',\n        '3': '٣',\n        '4': '٤',\n        '5': '٥',\n        '6': '٦',\n        '7': '٧',\n        '8': '٨',\n        '9': '٩',\n        '0': '٠'\n    }, numberMap = {\n        '١': '1',\n        '٢': '2',\n        '٣': '3',\n        '٤': '4',\n        '٥': '5',\n        '٦': '6',\n        '٧': '7',\n        '٨': '8',\n        '٩': '9',\n        '٠': '0'\n    }, pluralForm = function (n) {\n        return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;\n    }, plurals = {\n        s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],\n        m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],\n        h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],\n        d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],\n        M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],\n        y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']\n    }, pluralize = function (u) {\n        return function (number, withoutSuffix, string, isFuture) {\n            var f = pluralForm(number),\n                str = plurals[u][pluralForm(number)];\n            if (f === 2) {\n                str = str[withoutSuffix ? 0 : 1];\n            }\n            return str.replace(/%d/i, number);\n        };\n    }, months = [\n        'يناير',\n        'فبراير',\n        'مارس',\n        'أبريل',\n        'مايو',\n        'يونيو',\n        'يوليو',\n        'أغسطس',\n        'سبتمبر',\n        'أكتوبر',\n        'نوفمبر',\n        'ديسمبر'\n    ];\n\n    var ar = moment.defineLocale('ar', {\n        months : months,\n        monthsShort : months,\n        weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'D/\\u200FM/\\u200FYYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /ص|م/,\n        isPM : function (input) {\n            return 'م' === input;\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar : {\n            sameDay: '[اليوم عند الساعة] LT',\n            nextDay: '[غدًا عند الساعة] LT',\n            nextWeek: 'dddd [عند الساعة] LT',\n            lastDay: '[أمس عند الساعة] LT',\n            lastWeek: 'dddd [عند الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'بعد %s',\n            past : 'منذ %s',\n            s : pluralize('s'),\n            ss : pluralize('s'),\n            m : pluralize('m'),\n            mm : pluralize('m'),\n            h : pluralize('h'),\n            hh : pluralize('h'),\n            d : pluralize('d'),\n            dd : pluralize('d'),\n            M : pluralize('M'),\n            MM : pluralize('M'),\n            y : pluralize('y'),\n            yy : pluralize('y')\n        },\n        preparse: function (string) {\n            return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n                return numberMap[match];\n            }).replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            }).replace(/,/g, '،');\n        },\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return ar;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci5qcz84ZTczIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiMTQ5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAnMSc6ICfZoScsXG4gICAgICAgICcyJzogJ9miJyxcbiAgICAgICAgJzMnOiAn2aMnLFxuICAgICAgICAnNCc6ICfZpCcsXG4gICAgICAgICc1JzogJ9mlJyxcbiAgICAgICAgJzYnOiAn2aYnLFxuICAgICAgICAnNyc6ICfZpycsXG4gICAgICAgICc4JzogJ9moJyxcbiAgICAgICAgJzknOiAn2aknLFxuICAgICAgICAnMCc6ICfZoCdcbiAgICB9LCBudW1iZXJNYXAgPSB7XG4gICAgICAgICfZoSc6ICcxJyxcbiAgICAgICAgJ9miJzogJzInLFxuICAgICAgICAn2aMnOiAnMycsXG4gICAgICAgICfZpCc6ICc0JyxcbiAgICAgICAgJ9mlJzogJzUnLFxuICAgICAgICAn2aYnOiAnNicsXG4gICAgICAgICfZpyc6ICc3JyxcbiAgICAgICAgJ9moJzogJzgnLFxuICAgICAgICAn2aknOiAnOScsXG4gICAgICAgICfZoCc6ICcwJ1xuICAgIH0sIHBsdXJhbEZvcm0gPSBmdW5jdGlvbiAobikge1xuICAgICAgICByZXR1cm4gbiA9PT0gMCA/IDAgOiBuID09PSAxID8gMSA6IG4gPT09IDIgPyAyIDogbiAlIDEwMCA+PSAzICYmIG4gJSAxMDAgPD0gMTAgPyAzIDogbiAlIDEwMCA+PSAxMSA/IDQgOiA1O1xuICAgIH0sIHBsdXJhbHMgPSB7XG4gICAgICAgIHMgOiBbJ9ij2YLZhCDZhdmGINir2KfZhtmK2KknLCAn2KvYp9mG2YrYqSDZiNin2K3Yr9ipJywgWyfYq9in2YbZitiq2KfZhicsICfYq9in2YbZitiq2YrZhiddLCAnJWQg2KvZiNin2YYnLCAnJWQg2KvYp9mG2YrYqScsICclZCDYq9in2YbZitipJ10sXG4gICAgICAgIG0gOiBbJ9ij2YLZhCDZhdmGINiv2YLZitmC2KknLCAn2K/ZgtmK2YLYqSDZiNin2K3Yr9ipJywgWyfYr9mC2YrZgtiq2KfZhicsICfYr9mC2YrZgtiq2YrZhiddLCAnJWQg2K/Zgtin2KbZgicsICclZCDYr9mC2YrZgtipJywgJyVkINiv2YLZitmC2KknXSxcbiAgICAgICAgaCA6IFsn2KPZgtmEINmF2YYg2LPYp9i52KknLCAn2LPYp9i52Kkg2YjYp9it2K/YqScsIFsn2LPYp9i52KrYp9mGJywgJ9iz2KfYudiq2YrZhiddLCAnJWQg2LPYp9i52KfYqicsICclZCDYs9in2LnYqScsICclZCDYs9in2LnYqSddLFxuICAgICAgICBkIDogWyfYo9mC2YQg2YXZhiDZitmI2YUnLCAn2YrZiNmFINmI2KfYrdivJywgWyfZitmI2YXYp9mGJywgJ9mK2YjZhdmK2YYnXSwgJyVkINij2YrYp9mFJywgJyVkINmK2YjZhdmL2KcnLCAnJWQg2YrZiNmFJ10sXG4gICAgICAgIE0gOiBbJ9ij2YLZhCDZhdmGINi02YfYsScsICfYtNmH2LEg2YjYp9it2K8nLCBbJ9i02YfYsdin2YYnLCAn2LTZh9ix2YrZhiddLCAnJWQg2KPYtNmH2LEnLCAnJWQg2LTZh9ix2KcnLCAnJWQg2LTZh9ixJ10sXG4gICAgICAgIHkgOiBbJ9ij2YLZhCDZhdmGINi52KfZhScsICfYudin2YUg2YjYp9it2K8nLCBbJ9i52KfZhdin2YYnLCAn2LnYp9mF2YrZhiddLCAnJWQg2KPYudmI2KfZhScsICclZCDYudin2YXZi9inJywgJyVkINi52KfZhSddXG4gICAgfSwgcGx1cmFsaXplID0gZnVuY3Rpb24gKHUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgIHZhciBmID0gcGx1cmFsRm9ybShudW1iZXIpLFxuICAgICAgICAgICAgICAgIHN0ciA9IHBsdXJhbHNbdV1bcGx1cmFsRm9ybShudW1iZXIpXTtcbiAgICAgICAgICAgIGlmIChmID09PSAyKSB7XG4gICAgICAgICAgICAgICAgc3RyID0gc3RyW3dpdGhvdXRTdWZmaXggPyAwIDogMV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyVkL2ksIG51bWJlcik7XG4gICAgICAgIH07XG4gICAgfSwgbW9udGhzID0gW1xuICAgICAgICAn2YrZhtin2YrYsScsXG4gICAgICAgICfZgdio2LHYp9mK2LEnLFxuICAgICAgICAn2YXYp9ix2LMnLFxuICAgICAgICAn2KPYqNix2YrZhCcsXG4gICAgICAgICfZhdin2YrZiCcsXG4gICAgICAgICfZitmI2YbZitmIJyxcbiAgICAgICAgJ9mK2YjZhNmK2YgnLFxuICAgICAgICAn2KPYutiz2LfYsycsXG4gICAgICAgICfYs9io2KrZhdio2LEnLFxuICAgICAgICAn2KPZg9iq2YjYqNixJyxcbiAgICAgICAgJ9mG2YjZgdmF2KjYsScsXG4gICAgICAgICfYr9mK2LPZhdio2LEnXG4gICAgXTtcblxuICAgIHZhciBhciA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2FyJywge1xuICAgICAgICBtb250aHMgOiBtb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0IDogbW9udGhzLFxuICAgICAgICB3ZWVrZGF5cyA6ICfYp9mE2KPYrdivX9in2YTYpdir2YbZitmGX9in2YTYq9mE2KfYq9in2KFf2KfZhNij2LHYqNi52KfYoV/Yp9mE2K7ZhdmK2LNf2KfZhNis2YXYudipX9in2YTYs9io2KonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAn2KPYrdivX9il2KvZhtmK2YZf2KvZhNin2KvYp9ihX9ij2LHYqNi52KfYoV/YrtmF2YrYs1/YrNmF2LnYqV/Ys9io2KonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ9itX9mGX9irX9ixX9iuX9isX9izJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0QvXFx1MjAwRk0vXFx1MjAwRllZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9i1fNmFLyxcbiAgICAgICAgaXNQTSA6IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuICfZhScgPT09IGlucHV0O1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbSA6IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9i1JztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfZhSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vYp9mE2YrZiNmFINi52YbYryDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb2LrYr9mL2Kcg2LnZhtivINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvYudmG2K8g2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9ij2YXYsyDYudmG2K8g2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW9i52YbYryDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ9io2LnYryAlcycsXG4gICAgICAgICAgICBwYXN0IDogJ9mF2YbYsCAlcycsXG4gICAgICAgICAgICBzIDogcGx1cmFsaXplKCdzJyksXG4gICAgICAgICAgICBzcyA6IHBsdXJhbGl6ZSgncycpLFxuICAgICAgICAgICAgbSA6IHBsdXJhbGl6ZSgnbScpLFxuICAgICAgICAgICAgbW0gOiBwbHVyYWxpemUoJ20nKSxcbiAgICAgICAgICAgIGggOiBwbHVyYWxpemUoJ2gnKSxcbiAgICAgICAgICAgIGhoIDogcGx1cmFsaXplKCdoJyksXG4gICAgICAgICAgICBkIDogcGx1cmFsaXplKCdkJyksXG4gICAgICAgICAgICBkZCA6IHBsdXJhbGl6ZSgnZCcpLFxuICAgICAgICAgICAgTSA6IHBsdXJhbGl6ZSgnTScpLFxuICAgICAgICAgICAgTU0gOiBwbHVyYWxpemUoJ00nKSxcbiAgICAgICAgICAgIHkgOiBwbHVyYWxpemUoJ3knKSxcbiAgICAgICAgICAgIHl5IDogcGx1cmFsaXplKCd5JylcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW9mh2aLZo9mk2aXZptmn2ajZqdmgXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pLnJlcGxhY2UoL9iML2csICcsJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSkucmVwbGFjZSgvLC9nLCAn2IwnKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDYsIC8vIFNhdHVyZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiAxMiAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMXN0IGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXI7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///149\n")},15:function(module,exports,__webpack_require__){"use strict";eval("\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nfunction injectScript(src, id, domElement) {\r\n    return new Promise(function (resolve, reject) {\r\n        var scriptExistsAlready = document.getElementById(id) !== null;\r\n        if (scriptExistsAlready) {\r\n            resolve('Script Already Loaded!');\r\n        }\r\n        else {\r\n            var script = document.createElement('script');\r\n            script.id = id;\r\n            script.async = true;\r\n            script.src = src;\r\n            script.addEventListener('load', resolve);\r\n            script.addEventListener('error', function () { return reject('Error loading script.'); });\r\n            script.addEventListener('abort', function () { return reject('Script loading aborted.'); });\r\n            if (domElement) {\r\n                domElement.appendChild(script);\r\n            }\r\n            else {\r\n                document.head.appendChild(script);\r\n            }\r\n        }\r\n    });\r\n}\r\nexports.injectScript = injectScript;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvaW5qZWN0U2NyaXB0LnRzP2QwNzYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBOEMsY0FBYztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwREFBMEQsd0NBQXdDLEVBQUU7QUFDcEcsMERBQTBELDBDQUEwQyxFQUFFO0FBQ3RHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EiLCJmaWxlIjoiMTUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG5mdW5jdGlvbiBpbmplY3RTY3JpcHQoc3JjLCBpZCwgZG9tRWxlbWVudCkge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICB2YXIgc2NyaXB0RXhpc3RzQWxyZWFkeSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKSAhPT0gbnVsbDtcclxuICAgICAgICBpZiAoc2NyaXB0RXhpc3RzQWxyZWFkeSkge1xyXG4gICAgICAgICAgICByZXNvbHZlKCdTY3JpcHQgQWxyZWFkeSBMb2FkZWQhJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XHJcbiAgICAgICAgICAgIHNjcmlwdC5pZCA9IGlkO1xyXG4gICAgICAgICAgICBzY3JpcHQuYXN5bmMgPSB0cnVlO1xyXG4gICAgICAgICAgICBzY3JpcHQuc3JjID0gc3JjO1xyXG4gICAgICAgICAgICBzY3JpcHQuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHJlc29sdmUpO1xyXG4gICAgICAgICAgICBzY3JpcHQuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBmdW5jdGlvbiAoKSB7IHJldHVybiByZWplY3QoJ0Vycm9yIGxvYWRpbmcgc2NyaXB0LicpOyB9KTtcclxuICAgICAgICAgICAgc2NyaXB0LmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVqZWN0KCdTY3JpcHQgbG9hZGluZyBhYm9ydGVkLicpOyB9KTtcclxuICAgICAgICAgICAgaWYgKGRvbUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcbmV4cG9ydHMuaW5qZWN0U2NyaXB0ID0gaW5qZWN0U2NyaXB0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///15\n")},150:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var af = moment.defineLocale('af', {\n        months : 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split('_'),\n        monthsShort : 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),\n        weekdays : 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split('_'),\n        weekdaysShort : 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),\n        weekdaysMin : 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),\n        meridiemParse: /vm|nm/i,\n        isPM : function (input) {\n            return /^nm$/i.test(input);\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower ? 'vm' : 'VM';\n            } else {\n                return isLower ? 'nm' : 'NM';\n            }\n        },\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Vandag om] LT',\n            nextDay : '[Môre om] LT',\n            nextWeek : 'dddd [om] LT',\n            lastDay : '[Gister om] LT',\n            lastWeek : '[Laas] dddd [om] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'oor %s',\n            past : '%s gelede',\n            s : '\\'n paar sekondes',\n            ss : '%d sekondes',\n            m : '\\'n minuut',\n            mm : '%d minute',\n            h : '\\'n uur',\n            hh : '%d ure',\n            d : '\\'n dag',\n            dd : '%d dae',\n            M : '\\'n maand',\n            MM : '%d maande',\n            y : '\\'n jaar',\n            yy : '%d jaar'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal : function (number) {\n            return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); // Thanks to Joris Röling : https://github.com/jjupiter\n        },\n        week : {\n            dow : 1, // Maandag is die eerste dag van die week.\n            doy : 4  // Die week wat die 4de Januarie bevat is die eerste week van die jaar.\n        }\n    });\n\n    return af;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hZi5qcz8yYmZiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0EsNEZBQTRGO0FBQzVGLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiIxNTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBhZiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2FmJywge1xuICAgICAgICBtb250aHMgOiAnSmFudWFyaWVfRmVicnVhcmllX01hYXJ0X0FwcmlsX01laV9KdW5pZV9KdWxpZV9BdWd1c3R1c19TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXNlbWJlcicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAnSmFuX0ZlYl9NcnRfQXByX01laV9KdW5fSnVsX0F1Z19TZXBfT2t0X05vdl9EZXMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzIDogJ1NvbmRhZ19NYWFuZGFnX0RpbnNkYWdfV29lbnNkYWdfRG9uZGVyZGFnX1ZyeWRhZ19TYXRlcmRhZycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICdTb25fTWFhX0Rpbl9Xb2VfRG9uX1ZyeV9TYXQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ1NvX01hX0RpX1dvX0RvX1ZyX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAvdm18bm0vaSxcbiAgICAgICAgaXNQTSA6IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIC9ebm0kL2kudGVzdChpbnB1dCk7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtIDogZnVuY3Rpb24gKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91cnMgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ3ZtJyA6ICdWTSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ25tJyA6ICdOTSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1tWYW5kYWcgb21dIExUJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW03DtHJlIG9tXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdkZGRkIFtvbV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdbR2lzdGVyIG9tXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlayA6ICdbTGFhc10gZGRkZCBbb21dIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICdvb3IgJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICclcyBnZWxlZGUnLFxuICAgICAgICAgICAgcyA6ICdcXCduIHBhYXIgc2Vrb25kZXMnLFxuICAgICAgICAgICAgc3MgOiAnJWQgc2Vrb25kZXMnLFxuICAgICAgICAgICAgbSA6ICdcXCduIG1pbnV1dCcsXG4gICAgICAgICAgICBtbSA6ICclZCBtaW51dGUnLFxuICAgICAgICAgICAgaCA6ICdcXCduIHV1cicsXG4gICAgICAgICAgICBoaCA6ICclZCB1cmUnLFxuICAgICAgICAgICAgZCA6ICdcXCduIGRhZycsXG4gICAgICAgICAgICBkZCA6ICclZCBkYWUnLFxuICAgICAgICAgICAgTSA6ICdcXCduIG1hYW5kJyxcbiAgICAgICAgICAgIE1NIDogJyVkIG1hYW5kZScsXG4gICAgICAgICAgICB5IDogJ1xcJ24gamFhcicsXG4gICAgICAgICAgICB5eSA6ICclZCBqYWFyJ1xuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oc3RlfGRlKS8sXG4gICAgICAgIG9yZGluYWwgOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKChudW1iZXIgPT09IDEgfHwgbnVtYmVyID09PSA4IHx8IG51bWJlciA+PSAyMCkgPyAnc3RlJyA6ICdkZScpOyAvLyBUaGFua3MgdG8gSm9yaXMgUsO2bGluZyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9qanVwaXRlclxuICAgICAgICB9LFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTWFhbmRhZyBpcyBkaWUgZWVyc3RlIGRhZyB2YW4gZGllIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA0ICAvLyBEaWUgd2VlayB3YXQgZGllIDRkZSBKYW51YXJpZSBiZXZhdCBpcyBkaWUgZWVyc3RlIHdlZWsgdmFuIGRpZSBqYWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYWY7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///150\n")},151:function(module,exports){eval('module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, "loaded", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, "id", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vbW9kdWxlLmpzP2NlZDIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjE1MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obW9kdWxlKSB7XG5cdGlmICghbW9kdWxlLndlYnBhY2tQb2x5ZmlsbCkge1xuXHRcdG1vZHVsZS5kZXByZWNhdGUgPSBmdW5jdGlvbigpIHt9O1xuXHRcdG1vZHVsZS5wYXRocyA9IFtdO1xuXHRcdC8vIG1vZHVsZS5wYXJlbnQgPSB1bmRlZmluZWQgYnkgZGVmYXVsdFxuXHRcdGlmICghbW9kdWxlLmNoaWxkcmVuKSBtb2R1bGUuY2hpbGRyZW4gPSBbXTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImxvYWRlZFwiLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIG1vZHVsZS5sO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwiaWRcIiwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBtb2R1bGUuaTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRtb2R1bGUud2VicGFja1BvbHlmaWxsID0gMTtcblx0fVxuXHRyZXR1cm4gbW9kdWxlO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///151\n')},152:function(module,__webpack_exports__,__webpack_require__){"use strict";eval("/* harmony import */ var aurelia_pal__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0);\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n\n\nif (typeof FEATURE_NO_ES2015 === 'undefined') {\n\n  (function (Object, GOPS) {\n    'use strict';\n\n    if (GOPS in Object) return;\n\n    var setDescriptor,\n        G = aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* PLATFORM */ \"d\"].global,\n        id = 0,\n        random = '' + Math.random(),\n        prefix = '__\\x01symbol:',\n        prefixLength = prefix.length,\n        internalSymbol = '__\\x01symbol@@' + random,\n        DP = 'defineProperty',\n        DPies = 'defineProperties',\n        GOPN = 'getOwnPropertyNames',\n        GOPD = 'getOwnPropertyDescriptor',\n        PIE = 'propertyIsEnumerable',\n        gOPN = Object[GOPN],\n        gOPD = Object[GOPD],\n        create = Object.create,\n        keys = Object.keys,\n        defineProperty = Object[DP],\n        $defineProperties = Object[DPies],\n        descriptor = gOPD(Object, GOPN),\n        ObjectProto = Object.prototype,\n        hOP = ObjectProto.hasOwnProperty,\n        pIE = ObjectProto[PIE],\n        toString = ObjectProto.toString,\n        indexOf = Array.prototype.indexOf || function (v) {\n      for (var i = this.length; i-- && this[i] !== v;) {}\n      return i;\n    },\n        addInternalIfNeeded = function addInternalIfNeeded(o, uid, enumerable) {\n      if (!hOP.call(o, internalSymbol)) {\n        defineProperty(o, internalSymbol, {\n          enumerable: false,\n          configurable: false,\n          writable: false,\n          value: {}\n        });\n      }\n      o[internalSymbol]['@@' + uid] = enumerable;\n    },\n        createWithSymbols = function createWithSymbols(proto, descriptors) {\n      var self = create(proto);\n      if (descriptors !== null && (typeof descriptors === 'undefined' ? 'undefined' : _typeof(descriptors)) === 'object') {\n        gOPN(descriptors).forEach(function (key) {\n          if (propertyIsEnumerable.call(descriptors, key)) {\n            $defineProperty(self, key, descriptors[key]);\n          }\n        });\n      }\n      return self;\n    },\n        copyAsNonEnumerable = function copyAsNonEnumerable(descriptor) {\n      var newDescriptor = create(descriptor);\n      newDescriptor.enumerable = false;\n      return newDescriptor;\n    },\n        get = function get() {},\n        onlyNonSymbols = function onlyNonSymbols(name) {\n      return name != internalSymbol && !hOP.call(source, name);\n    },\n        onlySymbols = function onlySymbols(name) {\n      return name != internalSymbol && hOP.call(source, name);\n    },\n        propertyIsEnumerable = function propertyIsEnumerable(key) {\n      var uid = '' + key;\n      return onlySymbols(uid) ? hOP.call(this, uid) && this[internalSymbol] && this[internalSymbol]['@@' + uid] : pIE.call(this, key);\n    },\n        setAndGetSymbol = function setAndGetSymbol(uid) {\n      var descriptor = {\n        enumerable: false,\n        configurable: true,\n        get: get,\n        set: function set(value) {\n          setDescriptor(this, uid, {\n            enumerable: false,\n            configurable: true,\n            writable: true,\n            value: value\n          });\n          addInternalIfNeeded(this, uid, true);\n        }\n      };\n      defineProperty(ObjectProto, uid, descriptor);\n      return source[uid] = defineProperty(Object(uid), 'constructor', sourceConstructor);\n    },\n        _Symbol = function _Symbol2(description) {\n      if (this && this !== G) {\n        throw new TypeError('Symbol is not a constructor');\n      }\n      return setAndGetSymbol(prefix.concat(description || '', random, ++id));\n    },\n        source = create(null),\n        sourceConstructor = { value: _Symbol },\n        sourceMap = function sourceMap(uid) {\n      return source[uid];\n    },\n        $defineProperty = function defineProp(o, key, descriptor) {\n      var uid = '' + key;\n      if (onlySymbols(uid)) {\n        setDescriptor(o, uid, descriptor.enumerable ? copyAsNonEnumerable(descriptor) : descriptor);\n        addInternalIfNeeded(o, uid, !!descriptor.enumerable);\n      } else {\n        defineProperty(o, key, descriptor);\n      }\n      return o;\n    },\n        $getOwnPropertySymbols = function getOwnPropertySymbols(o) {\n      var cof = toString.call(o);\n      o = cof === '[object String]' ? o.split('') : Object(o);\n      return gOPN(o).filter(onlySymbols).map(sourceMap);\n    };\n\n    descriptor.value = $defineProperty;\n    defineProperty(Object, DP, descriptor);\n\n    descriptor.value = $getOwnPropertySymbols;\n    defineProperty(Object, GOPS, descriptor);\n\n    var cachedWindowNames = (typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' ? Object.getOwnPropertyNames(window) : [];\n    var originalObjectGetOwnPropertyNames = Object.getOwnPropertyNames;\n    descriptor.value = function getOwnPropertyNames(o) {\n      if (toString.call(o) === '[object Window]') {\n        try {\n          return originalObjectGetOwnPropertyNames(o);\n        } catch (e) {\n          return [].concat([], cachedWindowNames);\n        }\n      }\n      return gOPN(o).filter(onlyNonSymbols);\n    };\n    defineProperty(Object, GOPN, descriptor);\n\n    descriptor.value = function defineProperties(o, descriptors) {\n      var symbols = $getOwnPropertySymbols(descriptors);\n      if (symbols.length) {\n        keys(descriptors).concat(symbols).forEach(function (uid) {\n          if (propertyIsEnumerable.call(descriptors, uid)) {\n            $defineProperty(o, uid, descriptors[uid]);\n          }\n        });\n      } else {\n        $defineProperties(o, descriptors);\n      }\n      return o;\n    };\n    defineProperty(Object, DPies, descriptor);\n\n    descriptor.value = propertyIsEnumerable;\n    defineProperty(ObjectProto, PIE, descriptor);\n\n    descriptor.value = _Symbol;\n    defineProperty(G, 'Symbol', descriptor);\n\n    descriptor.value = function (key) {\n      var uid = prefix.concat(prefix, key, random);\n      return uid in ObjectProto ? source[uid] : setAndGetSymbol(uid);\n    };\n    defineProperty(_Symbol, 'for', descriptor);\n\n    descriptor.value = function (symbol) {\n      return hOP.call(source, symbol) ? symbol.slice(prefixLength * 2, -random.length) : void 0;\n    };\n    defineProperty(_Symbol, 'keyFor', descriptor);\n\n    descriptor.value = function getOwnPropertyDescriptor(o, key) {\n      var descriptor = gOPD(o, key);\n      if (descriptor && onlySymbols(key)) {\n        descriptor.enumerable = propertyIsEnumerable.call(o, key);\n      }\n      return descriptor;\n    };\n    defineProperty(Object, GOPD, descriptor);\n\n    descriptor.value = function (proto, descriptors) {\n      return arguments.length === 1 ? create(proto) : createWithSymbols(proto, descriptors);\n    };\n    defineProperty(Object, 'create', descriptor);\n\n    descriptor.value = function () {\n      var str = toString.call(this);\n      return str === '[object String]' && onlySymbols(this) ? '[object Symbol]' : str;\n    };\n    defineProperty(ObjectProto, 'toString', descriptor);\n\n    try {\n      setDescriptor = create(defineProperty({}, prefix, {\n        get: function get() {\n          return defineProperty(this, prefix, { value: false })[prefix];\n        }\n      }))[prefix] || defineProperty;\n    } catch (o_O) {\n      setDescriptor = function setDescriptor(o, key, descriptor) {\n        var protoDescriptor = gOPD(ObjectProto, key);\n        delete ObjectProto[key];\n        defineProperty(o, key, descriptor);\n        defineProperty(ObjectProto, key, protoDescriptor);\n      };\n    }\n  })(Object, 'getOwnPropertySymbols');\n\n  (function (O, S) {\n    var dP = O.defineProperty,\n        ObjectProto = O.prototype,\n        toString = ObjectProto.toString,\n        toStringTag = 'toStringTag',\n        descriptor;\n    ['iterator', 'match', 'replace', 'search', 'split', 'hasInstance', 'isConcatSpreadable', 'unscopables', 'species', 'toPrimitive', toStringTag].forEach(function (name) {\n      if (!(name in Symbol)) {\n        dP(Symbol, name, { value: Symbol(name) });\n        switch (name) {\n          case toStringTag:\n            descriptor = O.getOwnPropertyDescriptor(ObjectProto, 'toString');\n            descriptor.value = function () {\n              var str = toString.call(this),\n                  tst = typeof this === 'undefined' || this === null ? undefined : this[Symbol.toStringTag];\n              return typeof tst === 'undefined' ? str : '[object ' + tst + ']';\n            };\n            dP(ObjectProto, 'toString', descriptor);\n            break;\n        }\n      }\n    });\n  })(Object, Symbol);\n\n  (function (Si, AP, SP) {\n\n    function returnThis() {\n      return this;\n    }\n\n    if (!AP[Si]) AP[Si] = function () {\n      var i = 0,\n          self = this,\n          iterator = {\n        next: function next() {\n          var done = self.length <= i;\n          return done ? { done: done } : { done: done, value: self[i++] };\n        }\n      };\n      iterator[Si] = returnThis;\n      return iterator;\n    };\n\n    if (!SP[Si]) SP[Si] = function () {\n      var fromCodePoint = String.fromCodePoint,\n          self = this,\n          i = 0,\n          length = self.length,\n          iterator = {\n        next: function next() {\n          var done = length <= i,\n              c = done ? '' : fromCodePoint(self.codePointAt(i));\n          i += c.length;\n          return done ? { done: done } : { done: done, value: c };\n        }\n      };\n      iterator[Si] = returnThis;\n      return iterator;\n    };\n  })(Symbol.iterator, Array.prototype, String.prototype);\n}\n\nif (typeof FEATURE_NO_ES2015 === 'undefined') {\n\n  Number.isNaN = Number.isNaN || function (value) {\n    return value !== value;\n  };\n\n  Number.isFinite = Number.isFinite || function (value) {\n    return typeof value === \"number\" && isFinite(value);\n  };\n}\n\nif (!String.prototype.endsWith || function () {\n  try {\n    return !\"ab\".endsWith(\"a\", 1);\n  } catch (e) {\n    return true;\n  }\n}()) {\n  String.prototype.endsWith = function (searchString, position) {\n    var subjectString = this.toString();\n    if (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) {\n      position = subjectString.length;\n    }\n    position -= searchString.length;\n    var lastIndex = subjectString.indexOf(searchString, position);\n    return lastIndex !== -1 && lastIndex === position;\n  };\n}\n\nif (!String.prototype.startsWith || function () {\n  try {\n    return !\"ab\".startsWith(\"b\", 1);\n  } catch (e) {\n    return true;\n  }\n}()) {\n  String.prototype.startsWith = function (searchString, position) {\n    position = position || 0;\n    return this.substr(position, searchString.length) === searchString;\n  };\n}\n\nif (typeof FEATURE_NO_ES2015 === 'undefined') {\n\n  if (!Array.from) {\n    Array.from = function () {\n      var toInteger = function toInteger(it) {\n        return isNaN(it = +it) ? 0 : (it > 0 ? Math.floor : Math.ceil)(it);\n      };\n      var toLength = function toLength(it) {\n        return it > 0 ? Math.min(toInteger(it), 0x1fffffffffffff) : 0;\n      };\n      var iterCall = function iterCall(iter, fn, val, index) {\n        try {\n          return fn(val, index);\n        } catch (E) {\n          if (typeof iter.return == 'function') iter.return();\n          throw E;\n        }\n      };\n\n      return function from(arrayLike) {\n        var O = Object(arrayLike),\n            C = typeof this == 'function' ? this : Array,\n            aLen = arguments.length,\n            mapfn = aLen > 1 ? arguments[1] : undefined,\n            mapping = mapfn !== undefined,\n            index = 0,\n            iterFn = O[Symbol.iterator],\n            length,\n            result,\n            step,\n            iterator;\n        if (mapping) mapfn = mapfn.bind(aLen > 2 ? arguments[2] : undefined);\n        if (iterFn != undefined && !Array.isArray(arrayLike)) {\n          for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n            result[index] = mapping ? iterCall(iterator, mapfn, step.value, index) : step.value;\n          }\n        } else {\n          length = toLength(O.length);\n          for (result = new C(length); length > index; index++) {\n            result[index] = mapping ? mapfn(O[index], index) : O[index];\n          }\n        }\n        result.length = index;\n        return result;\n      };\n    }();\n  }\n\n  if (!Array.prototype.find) {\n    Object.defineProperty(Array.prototype, 'find', {\n      configurable: true,\n      writable: true,\n      enumerable: false,\n      value: function value(predicate) {\n        if (this === null) {\n          throw new TypeError('Array.prototype.find called on null or undefined');\n        }\n        if (typeof predicate !== 'function') {\n          throw new TypeError('predicate must be a function');\n        }\n        var list = Object(this);\n        var length = list.length >>> 0;\n        var thisArg = arguments[1];\n        var value;\n\n        for (var i = 0; i < length; i++) {\n          value = list[i];\n          if (predicate.call(thisArg, value, i, list)) {\n            return value;\n          }\n        }\n        return undefined;\n      }\n    });\n  }\n\n  if (!Array.prototype.findIndex) {\n    Object.defineProperty(Array.prototype, 'findIndex', {\n      configurable: true,\n      writable: true,\n      enumerable: false,\n      value: function value(predicate) {\n        if (this === null) {\n          throw new TypeError('Array.prototype.findIndex called on null or undefined');\n        }\n        if (typeof predicate !== 'function') {\n          throw new TypeError('predicate must be a function');\n        }\n        var list = Object(this);\n        var length = list.length >>> 0;\n        var thisArg = arguments[1];\n        var value;\n\n        for (var i = 0; i < length; i++) {\n          value = list[i];\n          if (predicate.call(thisArg, value, i, list)) {\n            return i;\n          }\n        }\n        return -1;\n      }\n    });\n  }\n}\n\nif (typeof FEATURE_NO_ES2016 === 'undefined' && !Array.prototype.includes) {\n  Object.defineProperty(Array.prototype, 'includes', {\n    configurable: true,\n    writable: true,\n    enumerable: false,\n    value: function value(searchElement) {\n      var O = Object(this);\n      var len = parseInt(O.length) || 0;\n      if (len === 0) {\n        return false;\n      }\n      var n = parseInt(arguments[1]) || 0;\n      var k;\n      if (n >= 0) {\n        k = n;\n      } else {\n        k = len + n;\n        if (k < 0) {\n          k = 0;\n        }\n      }\n      var currentElement;\n      while (k < len) {\n        currentElement = O[k];\n        if (searchElement === currentElement || searchElement !== searchElement && currentElement !== currentElement) {\n          return true;\n        }\n        k++;\n      }\n      return false;\n    }\n  });\n}\n\nif (typeof FEATURE_NO_ES2015 === 'undefined') {\n\n  (function () {\n    var needsFix = false;\n\n    try {\n      var s = Object.keys('a');\n      needsFix = s.length !== 1 || s[0] !== '0';\n    } catch (e) {\n      needsFix = true;\n    }\n\n    if (needsFix) {\n      Object.keys = function () {\n        var hasOwnProperty = Object.prototype.hasOwnProperty,\n            hasDontEnumBug = !{ toString: null }.propertyIsEnumerable('toString'),\n            dontEnums = ['toString', 'toLocaleString', 'valueOf', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'constructor'],\n            dontEnumsLength = dontEnums.length;\n\n        return function (obj) {\n          if (obj === undefined || obj === null) {\n            throw TypeError('Cannot convert undefined or null to object');\n          }\n\n          obj = Object(obj);\n\n          var result = [],\n              prop,\n              i;\n\n          for (prop in obj) {\n            if (hasOwnProperty.call(obj, prop)) {\n              result.push(prop);\n            }\n          }\n\n          if (hasDontEnumBug) {\n            for (i = 0; i < dontEnumsLength; i++) {\n              if (hasOwnProperty.call(obj, dontEnums[i])) {\n                result.push(dontEnums[i]);\n              }\n            }\n          }\n\n          return result;\n        };\n      }();\n    }\n  })();\n\n  (function (O) {\n    if ('assign' in O) {\n      return;\n    }\n\n    O.defineProperty(O, 'assign', {\n      configurable: true,\n      writable: true,\n      value: function () {\n        var gOPS = O.getOwnPropertySymbols,\n            pIE = O.propertyIsEnumerable,\n            filterOS = gOPS ? function (self) {\n          return gOPS(self).filter(pIE, self);\n        } : function () {\n          return Array.prototype;\n        };\n\n        return function assign(where) {\n          if (gOPS && !(where instanceof O)) {\n            console.warn('problematic Symbols', where);\n          }\n\n          function set(keyOrSymbol) {\n            where[keyOrSymbol] = arg[keyOrSymbol];\n          }\n\n          for (var i = 1, ii = arguments.length; i < ii; ++i) {\n            var arg = arguments[i];\n\n            if (arg === null || arg === undefined) {\n              continue;\n            }\n\n            O.keys(arg).concat(filterOS(arg)).forEach(set);\n          }\n\n          return where;\n        };\n      }()\n    });\n  })(Object);\n\n  if (!Object.is) {\n    Object.is = function (x, y) {\n      if (x === y) {\n        return x !== 0 || 1 / x === 1 / y;\n      } else {\n        return x !== x && y !== y;\n      }\n    };\n  }\n}\n\nif (typeof FEATURE_NO_ES2015 === 'undefined') {\n\n  (function (global) {\n    var i;\n\n    var defineProperty = Object.defineProperty,\n        is = function is(a, b) {\n      return a === b || a !== a && b !== b;\n    };\n\n    if (typeof WeakMap == 'undefined') {\n      global.WeakMap = createCollection({\n        'delete': sharedDelete,\n\n        clear: sharedClear,\n\n        get: sharedGet,\n\n        has: mapHas,\n\n        set: sharedSet\n      }, true);\n    }\n\n    if (typeof Map == 'undefined' || typeof new Map().values !== 'function' || !new Map().values().next) {\n      var _createCollection;\n\n      global.Map = createCollection((_createCollection = {\n        'delete': sharedDelete,\n\n        has: mapHas,\n\n        get: sharedGet,\n\n        set: sharedSet,\n\n        keys: sharedKeys,\n\n        values: sharedValues,\n\n        entries: mapEntries,\n\n        forEach: sharedForEach,\n\n        clear: sharedClear\n      }, _createCollection[Symbol.iterator] = mapEntries, _createCollection));\n    }\n\n    if (typeof Set == 'undefined' || typeof new Set().values !== 'function' || !new Set().values().next) {\n      var _createCollection2;\n\n      global.Set = createCollection((_createCollection2 = {\n        has: setHas,\n\n        add: sharedAdd,\n\n        'delete': sharedDelete,\n\n        clear: sharedClear,\n\n        keys: sharedValues,\n        values: sharedValues,\n\n        entries: setEntries,\n\n        forEach: sharedForEach\n      }, _createCollection2[Symbol.iterator] = sharedValues, _createCollection2));\n    }\n\n    if (typeof WeakSet == 'undefined') {\n      global.WeakSet = createCollection({\n        'delete': sharedDelete,\n\n        add: sharedAdd,\n\n        clear: sharedClear,\n\n        has: setHas\n      }, true);\n    }\n\n    function createCollection(proto, objectOnly) {\n      function Collection(a) {\n        if (!this || this.constructor !== Collection) return new Collection(a);\n        this._keys = [];\n        this._values = [];\n        this._itp = [];\n        this.objectOnly = objectOnly;\n\n        if (a) init.call(this, a);\n      }\n\n      if (!objectOnly) {\n        defineProperty(proto, 'size', {\n          get: sharedSize\n        });\n      }\n\n      proto.constructor = Collection;\n      Collection.prototype = proto;\n\n      return Collection;\n    }\n\n    function init(a) {\n      var i;\n\n      if (this.add) a.forEach(this.add, this);else a.forEach(function (a) {\n          this.set(a[0], a[1]);\n        }, this);\n    }\n\n    function sharedDelete(key) {\n      if (this.has(key)) {\n        this._keys.splice(i, 1);\n        this._values.splice(i, 1);\n\n        this._itp.forEach(function (p) {\n          if (i < p[0]) p[0]--;\n        });\n      }\n\n      return -1 < i;\n    };\n\n    function sharedGet(key) {\n      return this.has(key) ? this._values[i] : undefined;\n    }\n\n    function has(list, key) {\n      if (this.objectOnly && key !== Object(key)) throw new TypeError(\"Invalid value used as weak collection key\");\n\n      if (key != key || key === 0) for (i = list.length; i-- && !is(list[i], key);) {} else i = list.indexOf(key);\n      return -1 < i;\n    }\n\n    function setHas(value) {\n      return has.call(this, this._values, value);\n    }\n\n    function mapHas(value) {\n      return has.call(this, this._keys, value);\n    }\n\n    function sharedSet(key, value) {\n      this.has(key) ? this._values[i] = value : this._values[this._keys.push(key) - 1] = value;\n      return this;\n    }\n\n    function sharedAdd(value) {\n      if (!this.has(value)) this._values.push(value);\n      return this;\n    }\n\n    function sharedClear() {\n      (this._keys || 0).length = this._values.length = 0;\n    }\n\n    function sharedKeys() {\n      return sharedIterator(this._itp, this._keys);\n    }\n\n    function sharedValues() {\n      return sharedIterator(this._itp, this._values);\n    }\n\n    function mapEntries() {\n      return sharedIterator(this._itp, this._keys, this._values);\n    }\n\n    function setEntries() {\n      return sharedIterator(this._itp, this._values, this._values);\n    }\n\n    function sharedIterator(itp, array, array2) {\n      var _ref;\n\n      var p = [0],\n          done = false;\n      itp.push(p);\n      return _ref = {}, _ref[Symbol.iterator] = function () {\n        return this;\n      }, _ref.next = function next() {\n        var v,\n            k = p[0];\n        if (!done && k < array.length) {\n          v = array2 ? [array[k], array2[k]] : array[k];\n          p[0]++;\n        } else {\n          done = true;\n          itp.splice(itp.indexOf(p), 1);\n        }\n        return { done: done, value: v };\n      }, _ref;\n    }\n\n    function sharedSize() {\n      return this._values.length;\n    }\n\n    function sharedForEach(callback, context) {\n      var it = this.entries();\n      for (;;) {\n        var r = it.next();\n        if (r.done) break;\n        callback.call(context, r.value[1], r.value[0], this);\n      }\n    }\n  })(aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* PLATFORM */ \"d\"].global);\n}\n\nif (typeof FEATURE_NO_ES2015 === 'undefined') {\n\n  var bind = Function.prototype.bind;\n\n  if (typeof aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* PLATFORM */ \"d\"].global.Reflect === 'undefined') {\n    aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* PLATFORM */ \"d\"].global.Reflect = {};\n  }\n\n  if (typeof Reflect.defineProperty !== 'function') {\n    Reflect.defineProperty = function (target, propertyKey, descriptor) {\n      if ((typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' ? target === null : typeof target !== 'function') {\n        throw new TypeError('Reflect.defineProperty called on non-object');\n      }\n      try {\n        Object.defineProperty(target, propertyKey, descriptor);\n        return true;\n      } catch (e) {\n        return false;\n      }\n    };\n  }\n\n  if (typeof Reflect.construct !== 'function') {\n    Reflect.construct = function (Target, args) {\n      if (args) {\n        switch (args.length) {\n          case 0:\n            return new Target();\n          case 1:\n            return new Target(args[0]);\n          case 2:\n            return new Target(args[0], args[1]);\n          case 3:\n            return new Target(args[0], args[1], args[2]);\n          case 4:\n            return new Target(args[0], args[1], args[2], args[3]);\n        }\n      }\n\n      var a = [null];\n      a.push.apply(a, args);\n      return new (bind.apply(Target, a))();\n    };\n  }\n\n  if (typeof Reflect.ownKeys !== 'function') {\n    Reflect.ownKeys = function (o) {\n      return Object.getOwnPropertyNames(o).concat(Object.getOwnPropertySymbols(o));\n    };\n  }\n}\n\nif (typeof FEATURE_NO_ESNEXT === 'undefined') {\n\n  var emptyMetadata = Object.freeze({});\n  var metadataContainerKey = '__metadata__';\n\n  if (typeof Reflect.getOwnMetadata !== 'function') {\n    Reflect.getOwnMetadata = function (metadataKey, target, targetKey) {\n      if (target.hasOwnProperty(metadataContainerKey)) {\n        return (target[metadataContainerKey][targetKey] || emptyMetadata)[metadataKey];\n      }\n    };\n  }\n\n  if (typeof Reflect.defineMetadata !== 'function') {\n    Reflect.defineMetadata = function (metadataKey, metadataValue, target, targetKey) {\n      var metadataContainer = target.hasOwnProperty(metadataContainerKey) ? target[metadataContainerKey] : target[metadataContainerKey] = {};\n      var targetContainer = metadataContainer[targetKey] || (metadataContainer[targetKey] = {});\n      targetContainer[metadataKey] = metadataValue;\n    };\n  }\n\n  if (typeof Reflect.metadata !== 'function') {\n    Reflect.metadata = function (metadataKey, metadataValue) {\n      return function (target, targetKey) {\n        Reflect.defineMetadata(metadataKey, metadataValue, target, targetKey);\n      };\n    };\n  }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXVyZWxpYS1wb2x5ZmlsbHMvZGlzdC9uYXRpdmUtbW9kdWxlcy9hdXJlbGlhLXBvbHlmaWxscy5qcz80M2ZlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUEsb0dBQW9HLG1CQUFtQixFQUFFLG1CQUFtQiw4SEFBOEg7O0FBRW5POztBQUV2Qzs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsWUFBWSw0REFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixzQkFBc0I7QUFDckQ7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsNkJBQTZCLGlCQUFpQjtBQUM5QztBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOENBQThDO0FBQzlDO0FBQ0EsK0NBQStDLGVBQWU7QUFDOUQ7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLHNCQUFzQjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRzs7QUFFSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLGFBQWEsSUFBSTtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLGFBQWEsSUFBSTtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJEQUEyRCxnQ0FBZ0M7QUFDM0Y7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLHNDQUFzQyxnQkFBZ0I7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixZQUFZO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixZQUFZO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixpQkFBaUI7QUFDaEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHVCQUF1QixxQkFBcUI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGdEQUFnRCxRQUFRO0FBQ3hEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLDhDQUE4QztBQUM5QztBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsd0RBQXdELDBCQUEwQixJQUFJO0FBQ3RGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxFQUFFLDREQUFRO0FBQ2I7O0FBRUE7O0FBRUE7O0FBRUEsYUFBYSw0REFBUTtBQUNyQixJQUFJLDREQUFRO0FBQ1o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxzQ0FBc0M7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsOEZBQThGO0FBQzlGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjE1Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxuaW1wb3J0IHsgUExBVEZPUk0gfSBmcm9tICdhdXJlbGlhLXBhbCc7XG5cbmlmICh0eXBlb2YgRkVBVFVSRV9OT19FUzIwMTUgPT09ICd1bmRlZmluZWQnKSB7XG5cbiAgKGZ1bmN0aW9uIChPYmplY3QsIEdPUFMpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICBpZiAoR09QUyBpbiBPYmplY3QpIHJldHVybjtcblxuICAgIHZhciBzZXREZXNjcmlwdG9yLFxuICAgICAgICBHID0gUExBVEZPUk0uZ2xvYmFsLFxuICAgICAgICBpZCA9IDAsXG4gICAgICAgIHJhbmRvbSA9ICcnICsgTWF0aC5yYW5kb20oKSxcbiAgICAgICAgcHJlZml4ID0gJ19fXFx4MDFzeW1ib2w6JyxcbiAgICAgICAgcHJlZml4TGVuZ3RoID0gcHJlZml4Lmxlbmd0aCxcbiAgICAgICAgaW50ZXJuYWxTeW1ib2wgPSAnX19cXHgwMXN5bWJvbEBAJyArIHJhbmRvbSxcbiAgICAgICAgRFAgPSAnZGVmaW5lUHJvcGVydHknLFxuICAgICAgICBEUGllcyA9ICdkZWZpbmVQcm9wZXJ0aWVzJyxcbiAgICAgICAgR09QTiA9ICdnZXRPd25Qcm9wZXJ0eU5hbWVzJyxcbiAgICAgICAgR09QRCA9ICdnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3InLFxuICAgICAgICBQSUUgPSAncHJvcGVydHlJc0VudW1lcmFibGUnLFxuICAgICAgICBnT1BOID0gT2JqZWN0W0dPUE5dLFxuICAgICAgICBnT1BEID0gT2JqZWN0W0dPUERdLFxuICAgICAgICBjcmVhdGUgPSBPYmplY3QuY3JlYXRlLFxuICAgICAgICBrZXlzID0gT2JqZWN0LmtleXMsXG4gICAgICAgIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0W0RQXSxcbiAgICAgICAgJGRlZmluZVByb3BlcnRpZXMgPSBPYmplY3RbRFBpZXNdLFxuICAgICAgICBkZXNjcmlwdG9yID0gZ09QRChPYmplY3QsIEdPUE4pLFxuICAgICAgICBPYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGUsXG4gICAgICAgIGhPUCA9IE9iamVjdFByb3RvLmhhc093blByb3BlcnR5LFxuICAgICAgICBwSUUgPSBPYmplY3RQcm90b1tQSUVdLFxuICAgICAgICB0b1N0cmluZyA9IE9iamVjdFByb3RvLnRvU3RyaW5nLFxuICAgICAgICBpbmRleE9mID0gQXJyYXkucHJvdG90eXBlLmluZGV4T2YgfHwgZnVuY3Rpb24gKHYpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aDsgaS0tICYmIHRoaXNbaV0gIT09IHY7KSB7fVxuICAgICAgcmV0dXJuIGk7XG4gICAgfSxcbiAgICAgICAgYWRkSW50ZXJuYWxJZk5lZWRlZCA9IGZ1bmN0aW9uIGFkZEludGVybmFsSWZOZWVkZWQobywgdWlkLCBlbnVtZXJhYmxlKSB7XG4gICAgICBpZiAoIWhPUC5jYWxsKG8sIGludGVybmFsU3ltYm9sKSkge1xuICAgICAgICBkZWZpbmVQcm9wZXJ0eShvLCBpbnRlcm5hbFN5bWJvbCwge1xuICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICAgIHZhbHVlOiB7fVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIG9baW50ZXJuYWxTeW1ib2xdWydAQCcgKyB1aWRdID0gZW51bWVyYWJsZTtcbiAgICB9LFxuICAgICAgICBjcmVhdGVXaXRoU3ltYm9scyA9IGZ1bmN0aW9uIGNyZWF0ZVdpdGhTeW1ib2xzKHByb3RvLCBkZXNjcmlwdG9ycykge1xuICAgICAgdmFyIHNlbGYgPSBjcmVhdGUocHJvdG8pO1xuICAgICAgaWYgKGRlc2NyaXB0b3JzICE9PSBudWxsICYmICh0eXBlb2YgZGVzY3JpcHRvcnMgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKGRlc2NyaXB0b3JzKSkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGdPUE4oZGVzY3JpcHRvcnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgIGlmIChwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGRlc2NyaXB0b3JzLCBrZXkpKSB7XG4gICAgICAgICAgICAkZGVmaW5lUHJvcGVydHkoc2VsZiwga2V5LCBkZXNjcmlwdG9yc1trZXldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfSxcbiAgICAgICAgY29weUFzTm9uRW51bWVyYWJsZSA9IGZ1bmN0aW9uIGNvcHlBc05vbkVudW1lcmFibGUoZGVzY3JpcHRvcikge1xuICAgICAgdmFyIG5ld0Rlc2NyaXB0b3IgPSBjcmVhdGUoZGVzY3JpcHRvcik7XG4gICAgICBuZXdEZXNjcmlwdG9yLmVudW1lcmFibGUgPSBmYWxzZTtcbiAgICAgIHJldHVybiBuZXdEZXNjcmlwdG9yO1xuICAgIH0sXG4gICAgICAgIGdldCA9IGZ1bmN0aW9uIGdldCgpIHt9LFxuICAgICAgICBvbmx5Tm9uU3ltYm9scyA9IGZ1bmN0aW9uIG9ubHlOb25TeW1ib2xzKG5hbWUpIHtcbiAgICAgIHJldHVybiBuYW1lICE9IGludGVybmFsU3ltYm9sICYmICFoT1AuY2FsbChzb3VyY2UsIG5hbWUpO1xuICAgIH0sXG4gICAgICAgIG9ubHlTeW1ib2xzID0gZnVuY3Rpb24gb25seVN5bWJvbHMobmFtZSkge1xuICAgICAgcmV0dXJuIG5hbWUgIT0gaW50ZXJuYWxTeW1ib2wgJiYgaE9QLmNhbGwoc291cmNlLCBuYW1lKTtcbiAgICB9LFxuICAgICAgICBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKGtleSkge1xuICAgICAgdmFyIHVpZCA9ICcnICsga2V5O1xuICAgICAgcmV0dXJuIG9ubHlTeW1ib2xzKHVpZCkgPyBoT1AuY2FsbCh0aGlzLCB1aWQpICYmIHRoaXNbaW50ZXJuYWxTeW1ib2xdICYmIHRoaXNbaW50ZXJuYWxTeW1ib2xdWydAQCcgKyB1aWRdIDogcElFLmNhbGwodGhpcywga2V5KTtcbiAgICB9LFxuICAgICAgICBzZXRBbmRHZXRTeW1ib2wgPSBmdW5jdGlvbiBzZXRBbmRHZXRTeW1ib2wodWlkKSB7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9IHtcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBnZXQsXG4gICAgICAgIHNldDogZnVuY3Rpb24gc2V0KHZhbHVlKSB7XG4gICAgICAgICAgc2V0RGVzY3JpcHRvcih0aGlzLCB1aWQsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBhZGRJbnRlcm5hbElmTmVlZGVkKHRoaXMsIHVpZCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBkZWZpbmVQcm9wZXJ0eShPYmplY3RQcm90bywgdWlkLCBkZXNjcmlwdG9yKTtcbiAgICAgIHJldHVybiBzb3VyY2VbdWlkXSA9IGRlZmluZVByb3BlcnR5KE9iamVjdCh1aWQpLCAnY29uc3RydWN0b3InLCBzb3VyY2VDb25zdHJ1Y3Rvcik7XG4gICAgfSxcbiAgICAgICAgX1N5bWJvbCA9IGZ1bmN0aW9uIF9TeW1ib2wyKGRlc2NyaXB0aW9uKSB7XG4gICAgICBpZiAodGhpcyAmJiB0aGlzICE9PSBHKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1N5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvcicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNldEFuZEdldFN5bWJvbChwcmVmaXguY29uY2F0KGRlc2NyaXB0aW9uIHx8ICcnLCByYW5kb20sICsraWQpKTtcbiAgICB9LFxuICAgICAgICBzb3VyY2UgPSBjcmVhdGUobnVsbCksXG4gICAgICAgIHNvdXJjZUNvbnN0cnVjdG9yID0geyB2YWx1ZTogX1N5bWJvbCB9LFxuICAgICAgICBzb3VyY2VNYXAgPSBmdW5jdGlvbiBzb3VyY2VNYXAodWlkKSB7XG4gICAgICByZXR1cm4gc291cmNlW3VpZF07XG4gICAgfSxcbiAgICAgICAgJGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcChvLCBrZXksIGRlc2NyaXB0b3IpIHtcbiAgICAgIHZhciB1aWQgPSAnJyArIGtleTtcbiAgICAgIGlmIChvbmx5U3ltYm9scyh1aWQpKSB7XG4gICAgICAgIHNldERlc2NyaXB0b3IobywgdWlkLCBkZXNjcmlwdG9yLmVudW1lcmFibGUgPyBjb3B5QXNOb25FbnVtZXJhYmxlKGRlc2NyaXB0b3IpIDogZGVzY3JpcHRvcik7XG4gICAgICAgIGFkZEludGVybmFsSWZOZWVkZWQobywgdWlkLCAhIWRlc2NyaXB0b3IuZW51bWVyYWJsZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWZpbmVQcm9wZXJ0eShvLCBrZXksIGRlc2NyaXB0b3IpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG87XG4gICAgfSxcbiAgICAgICAgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhvKSB7XG4gICAgICB2YXIgY29mID0gdG9TdHJpbmcuY2FsbChvKTtcbiAgICAgIG8gPSBjb2YgPT09ICdbb2JqZWN0IFN0cmluZ10nID8gby5zcGxpdCgnJykgOiBPYmplY3Qobyk7XG4gICAgICByZXR1cm4gZ09QTihvKS5maWx0ZXIob25seVN5bWJvbHMpLm1hcChzb3VyY2VNYXApO1xuICAgIH07XG5cbiAgICBkZXNjcmlwdG9yLnZhbHVlID0gJGRlZmluZVByb3BlcnR5O1xuICAgIGRlZmluZVByb3BlcnR5KE9iamVjdCwgRFAsIGRlc2NyaXB0b3IpO1xuXG4gICAgZGVzY3JpcHRvci52YWx1ZSA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4gICAgZGVmaW5lUHJvcGVydHkoT2JqZWN0LCBHT1BTLCBkZXNjcmlwdG9yKTtcblxuICAgIHZhciBjYWNoZWRXaW5kb3dOYW1lcyA9ICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZih3aW5kb3cpKSA9PT0gJ29iamVjdCcgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG4gICAgdmFyIG9yaWdpbmFsT2JqZWN0R2V0T3duUHJvcGVydHlOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xuICAgIGRlc2NyaXB0b3IudmFsdWUgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKG8pIHtcbiAgICAgIGlmICh0b1N0cmluZy5jYWxsKG8pID09PSAnW29iamVjdCBXaW5kb3ddJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBvcmlnaW5hbE9iamVjdEdldE93blByb3BlcnR5TmFtZXMobyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICByZXR1cm4gW10uY29uY2F0KFtdLCBjYWNoZWRXaW5kb3dOYW1lcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBnT1BOKG8pLmZpbHRlcihvbmx5Tm9uU3ltYm9scyk7XG4gICAgfTtcbiAgICBkZWZpbmVQcm9wZXJ0eShPYmplY3QsIEdPUE4sIGRlc2NyaXB0b3IpO1xuXG4gICAgZGVzY3JpcHRvci52YWx1ZSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMobywgZGVzY3JpcHRvcnMpIHtcbiAgICAgIHZhciBzeW1ib2xzID0gJGdldE93blByb3BlcnR5U3ltYm9scyhkZXNjcmlwdG9ycyk7XG4gICAgICBpZiAoc3ltYm9scy5sZW5ndGgpIHtcbiAgICAgICAga2V5cyhkZXNjcmlwdG9ycykuY29uY2F0KHN5bWJvbHMpLmZvckVhY2goZnVuY3Rpb24gKHVpZCkge1xuICAgICAgICAgIGlmIChwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGRlc2NyaXB0b3JzLCB1aWQpKSB7XG4gICAgICAgICAgICAkZGVmaW5lUHJvcGVydHkobywgdWlkLCBkZXNjcmlwdG9yc1t1aWRdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgJGRlZmluZVByb3BlcnRpZXMobywgZGVzY3JpcHRvcnMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG87XG4gICAgfTtcbiAgICBkZWZpbmVQcm9wZXJ0eShPYmplY3QsIERQaWVzLCBkZXNjcmlwdG9yKTtcblxuICAgIGRlc2NyaXB0b3IudmFsdWUgPSBwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiAgICBkZWZpbmVQcm9wZXJ0eShPYmplY3RQcm90bywgUElFLCBkZXNjcmlwdG9yKTtcblxuICAgIGRlc2NyaXB0b3IudmFsdWUgPSBfU3ltYm9sO1xuICAgIGRlZmluZVByb3BlcnR5KEcsICdTeW1ib2wnLCBkZXNjcmlwdG9yKTtcblxuICAgIGRlc2NyaXB0b3IudmFsdWUgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICB2YXIgdWlkID0gcHJlZml4LmNvbmNhdChwcmVmaXgsIGtleSwgcmFuZG9tKTtcbiAgICAgIHJldHVybiB1aWQgaW4gT2JqZWN0UHJvdG8gPyBzb3VyY2VbdWlkXSA6IHNldEFuZEdldFN5bWJvbCh1aWQpO1xuICAgIH07XG4gICAgZGVmaW5lUHJvcGVydHkoX1N5bWJvbCwgJ2ZvcicsIGRlc2NyaXB0b3IpO1xuXG4gICAgZGVzY3JpcHRvci52YWx1ZSA9IGZ1bmN0aW9uIChzeW1ib2wpIHtcbiAgICAgIHJldHVybiBoT1AuY2FsbChzb3VyY2UsIHN5bWJvbCkgPyBzeW1ib2wuc2xpY2UocHJlZml4TGVuZ3RoICogMiwgLXJhbmRvbS5sZW5ndGgpIDogdm9pZCAwO1xuICAgIH07XG4gICAgZGVmaW5lUHJvcGVydHkoX1N5bWJvbCwgJ2tleUZvcicsIGRlc2NyaXB0b3IpO1xuXG4gICAgZGVzY3JpcHRvci52YWx1ZSA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihvLCBrZXkpIHtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gZ09QRChvLCBrZXkpO1xuICAgICAgaWYgKGRlc2NyaXB0b3IgJiYgb25seVN5bWJvbHMoa2V5KSkge1xuICAgICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG8sIGtleSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9O1xuICAgIGRlZmluZVByb3BlcnR5KE9iamVjdCwgR09QRCwgZGVzY3JpcHRvcik7XG5cbiAgICBkZXNjcmlwdG9yLnZhbHVlID0gZnVuY3Rpb24gKHByb3RvLCBkZXNjcmlwdG9ycykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBjcmVhdGUocHJvdG8pIDogY3JlYXRlV2l0aFN5bWJvbHMocHJvdG8sIGRlc2NyaXB0b3JzKTtcbiAgICB9O1xuICAgIGRlZmluZVByb3BlcnR5KE9iamVjdCwgJ2NyZWF0ZScsIGRlc2NyaXB0b3IpO1xuXG4gICAgZGVzY3JpcHRvci52YWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzdHIgPSB0b1N0cmluZy5jYWxsKHRoaXMpO1xuICAgICAgcmV0dXJuIHN0ciA9PT0gJ1tvYmplY3QgU3RyaW5nXScgJiYgb25seVN5bWJvbHModGhpcykgPyAnW29iamVjdCBTeW1ib2xdJyA6IHN0cjtcbiAgICB9O1xuICAgIGRlZmluZVByb3BlcnR5KE9iamVjdFByb3RvLCAndG9TdHJpbmcnLCBkZXNjcmlwdG9yKTtcblxuICAgIHRyeSB7XG4gICAgICBzZXREZXNjcmlwdG9yID0gY3JlYXRlKGRlZmluZVByb3BlcnR5KHt9LCBwcmVmaXgsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIGRlZmluZVByb3BlcnR5KHRoaXMsIHByZWZpeCwgeyB2YWx1ZTogZmFsc2UgfSlbcHJlZml4XTtcbiAgICAgICAgfVxuICAgICAgfSkpW3ByZWZpeF0gfHwgZGVmaW5lUHJvcGVydHk7XG4gICAgfSBjYXRjaCAob19PKSB7XG4gICAgICBzZXREZXNjcmlwdG9yID0gZnVuY3Rpb24gc2V0RGVzY3JpcHRvcihvLCBrZXksIGRlc2NyaXB0b3IpIHtcbiAgICAgICAgdmFyIHByb3RvRGVzY3JpcHRvciA9IGdPUEQoT2JqZWN0UHJvdG8sIGtleSk7XG4gICAgICAgIGRlbGV0ZSBPYmplY3RQcm90b1trZXldO1xuICAgICAgICBkZWZpbmVQcm9wZXJ0eShvLCBrZXksIGRlc2NyaXB0b3IpO1xuICAgICAgICBkZWZpbmVQcm9wZXJ0eShPYmplY3RQcm90bywga2V5LCBwcm90b0Rlc2NyaXB0b3IpO1xuICAgICAgfTtcbiAgICB9XG4gIH0pKE9iamVjdCwgJ2dldE93blByb3BlcnR5U3ltYm9scycpO1xuXG4gIChmdW5jdGlvbiAoTywgUykge1xuICAgIHZhciBkUCA9IE8uZGVmaW5lUHJvcGVydHksXG4gICAgICAgIE9iamVjdFByb3RvID0gTy5wcm90b3R5cGUsXG4gICAgICAgIHRvU3RyaW5nID0gT2JqZWN0UHJvdG8udG9TdHJpbmcsXG4gICAgICAgIHRvU3RyaW5nVGFnID0gJ3RvU3RyaW5nVGFnJyxcbiAgICAgICAgZGVzY3JpcHRvcjtcbiAgICBbJ2l0ZXJhdG9yJywgJ21hdGNoJywgJ3JlcGxhY2UnLCAnc2VhcmNoJywgJ3NwbGl0JywgJ2hhc0luc3RhbmNlJywgJ2lzQ29uY2F0U3ByZWFkYWJsZScsICd1bnNjb3BhYmxlcycsICdzcGVjaWVzJywgJ3RvUHJpbWl0aXZlJywgdG9TdHJpbmdUYWddLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIGlmICghKG5hbWUgaW4gU3ltYm9sKSkge1xuICAgICAgICBkUChTeW1ib2wsIG5hbWUsIHsgdmFsdWU6IFN5bWJvbChuYW1lKSB9KTtcbiAgICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgICAgY2FzZSB0b1N0cmluZ1RhZzpcbiAgICAgICAgICAgIGRlc2NyaXB0b3IgPSBPLmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3RQcm90bywgJ3RvU3RyaW5nJyk7XG4gICAgICAgICAgICBkZXNjcmlwdG9yLnZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB2YXIgc3RyID0gdG9TdHJpbmcuY2FsbCh0aGlzKSxcbiAgICAgICAgICAgICAgICAgIHRzdCA9IHR5cGVvZiB0aGlzID09PSAndW5kZWZpbmVkJyB8fCB0aGlzID09PSBudWxsID8gdW5kZWZpbmVkIDogdGhpc1tTeW1ib2wudG9TdHJpbmdUYWddO1xuICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIHRzdCA9PT0gJ3VuZGVmaW5lZCcgPyBzdHIgOiAnW29iamVjdCAnICsgdHN0ICsgJ10nO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGRQKE9iamVjdFByb3RvLCAndG9TdHJpbmcnLCBkZXNjcmlwdG9yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH0pKE9iamVjdCwgU3ltYm9sKTtcblxuICAoZnVuY3Rpb24gKFNpLCBBUCwgU1ApIHtcblxuICAgIGZ1bmN0aW9uIHJldHVyblRoaXMoKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpZiAoIUFQW1NpXSkgQVBbU2ldID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGkgPSAwLFxuICAgICAgICAgIHNlbGYgPSB0aGlzLFxuICAgICAgICAgIGl0ZXJhdG9yID0ge1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgIHZhciBkb25lID0gc2VsZi5sZW5ndGggPD0gaTtcbiAgICAgICAgICByZXR1cm4gZG9uZSA/IHsgZG9uZTogZG9uZSB9IDogeyBkb25lOiBkb25lLCB2YWx1ZTogc2VsZltpKytdIH07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBpdGVyYXRvcltTaV0gPSByZXR1cm5UaGlzO1xuICAgICAgcmV0dXJuIGl0ZXJhdG9yO1xuICAgIH07XG5cbiAgICBpZiAoIVNQW1NpXSkgU1BbU2ldID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGZyb21Db2RlUG9pbnQgPSBTdHJpbmcuZnJvbUNvZGVQb2ludCxcbiAgICAgICAgICBzZWxmID0gdGhpcyxcbiAgICAgICAgICBpID0gMCxcbiAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCxcbiAgICAgICAgICBpdGVyYXRvciA9IHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICB2YXIgZG9uZSA9IGxlbmd0aCA8PSBpLFxuICAgICAgICAgICAgICBjID0gZG9uZSA/ICcnIDogZnJvbUNvZGVQb2ludChzZWxmLmNvZGVQb2ludEF0KGkpKTtcbiAgICAgICAgICBpICs9IGMubGVuZ3RoO1xuICAgICAgICAgIHJldHVybiBkb25lID8geyBkb25lOiBkb25lIH0gOiB7IGRvbmU6IGRvbmUsIHZhbHVlOiBjIH07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBpdGVyYXRvcltTaV0gPSByZXR1cm5UaGlzO1xuICAgICAgcmV0dXJuIGl0ZXJhdG9yO1xuICAgIH07XG4gIH0pKFN5bWJvbC5pdGVyYXRvciwgQXJyYXkucHJvdG90eXBlLCBTdHJpbmcucHJvdG90eXBlKTtcbn1cblxuaWYgKHR5cGVvZiBGRUFUVVJFX05PX0VTMjAxNSA9PT0gJ3VuZGVmaW5lZCcpIHtcblxuICBOdW1iZXIuaXNOYU4gPSBOdW1iZXIuaXNOYU4gfHwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZTtcbiAgfTtcblxuICBOdW1iZXIuaXNGaW5pdGUgPSBOdW1iZXIuaXNGaW5pdGUgfHwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiAmJiBpc0Zpbml0ZSh2YWx1ZSk7XG4gIH07XG59XG5cbmlmICghU3RyaW5nLnByb3RvdHlwZS5lbmRzV2l0aCB8fCBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICFcImFiXCIuZW5kc1dpdGgoXCJhXCIsIDEpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn0oKSkge1xuICBTdHJpbmcucHJvdG90eXBlLmVuZHNXaXRoID0gZnVuY3Rpb24gKHNlYXJjaFN0cmluZywgcG9zaXRpb24pIHtcbiAgICB2YXIgc3ViamVjdFN0cmluZyA9IHRoaXMudG9TdHJpbmcoKTtcbiAgICBpZiAodHlwZW9mIHBvc2l0aW9uICE9PSAnbnVtYmVyJyB8fCAhaXNGaW5pdGUocG9zaXRpb24pIHx8IE1hdGguZmxvb3IocG9zaXRpb24pICE9PSBwb3NpdGlvbiB8fCBwb3NpdGlvbiA+IHN1YmplY3RTdHJpbmcubGVuZ3RoKSB7XG4gICAgICBwb3NpdGlvbiA9IHN1YmplY3RTdHJpbmcubGVuZ3RoO1xuICAgIH1cbiAgICBwb3NpdGlvbiAtPSBzZWFyY2hTdHJpbmcubGVuZ3RoO1xuICAgIHZhciBsYXN0SW5kZXggPSBzdWJqZWN0U3RyaW5nLmluZGV4T2Yoc2VhcmNoU3RyaW5nLCBwb3NpdGlvbik7XG4gICAgcmV0dXJuIGxhc3RJbmRleCAhPT0gLTEgJiYgbGFzdEluZGV4ID09PSBwb3NpdGlvbjtcbiAgfTtcbn1cblxuaWYgKCFTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGggfHwgZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIHJldHVybiAhXCJhYlwiLnN0YXJ0c1dpdGgoXCJiXCIsIDEpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn0oKSkge1xuICBTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGggPSBmdW5jdGlvbiAoc2VhcmNoU3RyaW5nLCBwb3NpdGlvbikge1xuICAgIHBvc2l0aW9uID0gcG9zaXRpb24gfHwgMDtcbiAgICByZXR1cm4gdGhpcy5zdWJzdHIocG9zaXRpb24sIHNlYXJjaFN0cmluZy5sZW5ndGgpID09PSBzZWFyY2hTdHJpbmc7XG4gIH07XG59XG5cbmlmICh0eXBlb2YgRkVBVFVSRV9OT19FUzIwMTUgPT09ICd1bmRlZmluZWQnKSB7XG5cbiAgaWYgKCFBcnJheS5mcm9tKSB7XG4gICAgQXJyYXkuZnJvbSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB0b0ludGVnZXIgPSBmdW5jdGlvbiB0b0ludGVnZXIoaXQpIHtcbiAgICAgICAgcmV0dXJuIGlzTmFOKGl0ID0gK2l0KSA/IDAgOiAoaXQgPiAwID8gTWF0aC5mbG9vciA6IE1hdGguY2VpbCkoaXQpO1xuICAgICAgfTtcbiAgICAgIHZhciB0b0xlbmd0aCA9IGZ1bmN0aW9uIHRvTGVuZ3RoKGl0KSB7XG4gICAgICAgIHJldHVybiBpdCA+IDAgPyBNYXRoLm1pbih0b0ludGVnZXIoaXQpLCAweDFmZmZmZmZmZmZmZmZmKSA6IDA7XG4gICAgICB9O1xuICAgICAgdmFyIGl0ZXJDYWxsID0gZnVuY3Rpb24gaXRlckNhbGwoaXRlciwgZm4sIHZhbCwgaW5kZXgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gZm4odmFsLCBpbmRleCk7XG4gICAgICAgIH0gY2F0Y2ggKEUpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGl0ZXIucmV0dXJuID09ICdmdW5jdGlvbicpIGl0ZXIucmV0dXJuKCk7XG4gICAgICAgICAgdGhyb3cgRTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlKSB7XG4gICAgICAgIHZhciBPID0gT2JqZWN0KGFycmF5TGlrZSksXG4gICAgICAgICAgICBDID0gdHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheSxcbiAgICAgICAgICAgIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoLFxuICAgICAgICAgICAgbWFwZm4gPSBhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkLFxuICAgICAgICAgICAgaW5kZXggPSAwLFxuICAgICAgICAgICAgaXRlckZuID0gT1tTeW1ib2wuaXRlcmF0b3JdLFxuICAgICAgICAgICAgbGVuZ3RoLFxuICAgICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgICAgc3RlcCxcbiAgICAgICAgICAgIGl0ZXJhdG9yO1xuICAgICAgICBpZiAobWFwcGluZykgbWFwZm4gPSBtYXBmbi5iaW5kKGFMZW4gPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkKTtcbiAgICAgICAgaWYgKGl0ZXJGbiAhPSB1bmRlZmluZWQgJiYgIUFycmF5LmlzQXJyYXkoYXJyYXlMaWtlKSkge1xuICAgICAgICAgIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChPKSwgcmVzdWx0ID0gbmV3IEMoKTsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOyBpbmRleCsrKSB7XG4gICAgICAgICAgICByZXN1bHRbaW5kZXhdID0gbWFwcGluZyA/IGl0ZXJDYWxsKGl0ZXJhdG9yLCBtYXBmbiwgc3RlcC52YWx1ZSwgaW5kZXgpIDogc3RlcC52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgICAgICAgIGZvciAocmVzdWx0ID0gbmV3IEMobGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIHJlc3VsdFtpbmRleF0gPSBtYXBwaW5nID8gbWFwZm4oT1tpbmRleF0sIGluZGV4KSA6IE9baW5kZXhdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXN1bHQubGVuZ3RoID0gaW5kZXg7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9O1xuICAgIH0oKTtcbiAgfVxuXG4gIGlmICghQXJyYXkucHJvdG90eXBlLmZpbmQpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQXJyYXkucHJvdG90eXBlLCAnZmluZCcsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUocHJlZGljYXRlKSB7XG4gICAgICAgIGlmICh0aGlzID09PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkucHJvdG90eXBlLmZpbmQgY2FsbGVkIG9uIG51bGwgb3IgdW5kZWZpbmVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBwcmVkaWNhdGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwcmVkaWNhdGUgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGxpc3QgPSBPYmplY3QodGhpcyk7XG4gICAgICAgIHZhciBsZW5ndGggPSBsaXN0Lmxlbmd0aCA+Pj4gMDtcbiAgICAgICAgdmFyIHRoaXNBcmcgPSBhcmd1bWVudHNbMV07XG4gICAgICAgIHZhciB2YWx1ZTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFsdWUgPSBsaXN0W2ldO1xuICAgICAgICAgIGlmIChwcmVkaWNhdGUuY2FsbCh0aGlzQXJnLCB2YWx1ZSwgaSwgbGlzdCkpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlmICghQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleCkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBcnJheS5wcm90b3R5cGUsICdmaW5kSW5kZXgnLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKHByZWRpY2F0ZSkge1xuICAgICAgICBpZiAodGhpcyA9PT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5LnByb3RvdHlwZS5maW5kSW5kZXggY2FsbGVkIG9uIG51bGwgb3IgdW5kZWZpbmVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBwcmVkaWNhdGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwcmVkaWNhdGUgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGxpc3QgPSBPYmplY3QodGhpcyk7XG4gICAgICAgIHZhciBsZW5ndGggPSBsaXN0Lmxlbmd0aCA+Pj4gMDtcbiAgICAgICAgdmFyIHRoaXNBcmcgPSBhcmd1bWVudHNbMV07XG4gICAgICAgIHZhciB2YWx1ZTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFsdWUgPSBsaXN0W2ldO1xuICAgICAgICAgIGlmIChwcmVkaWNhdGUuY2FsbCh0aGlzQXJnLCB2YWx1ZSwgaSwgbGlzdCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuaWYgKHR5cGVvZiBGRUFUVVJFX05PX0VTMjAxNiA9PT0gJ3VuZGVmaW5lZCcgJiYgIUFycmF5LnByb3RvdHlwZS5pbmNsdWRlcykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQXJyYXkucHJvdG90eXBlLCAnaW5jbHVkZXMnLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZShzZWFyY2hFbGVtZW50KSB7XG4gICAgICB2YXIgTyA9IE9iamVjdCh0aGlzKTtcbiAgICAgIHZhciBsZW4gPSBwYXJzZUludChPLmxlbmd0aCkgfHwgMDtcbiAgICAgIGlmIChsZW4gPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdmFyIG4gPSBwYXJzZUludChhcmd1bWVudHNbMV0pIHx8IDA7XG4gICAgICB2YXIgaztcbiAgICAgIGlmIChuID49IDApIHtcbiAgICAgICAgayA9IG47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBrID0gbGVuICsgbjtcbiAgICAgICAgaWYgKGsgPCAwKSB7XG4gICAgICAgICAgayA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBjdXJyZW50RWxlbWVudDtcbiAgICAgIHdoaWxlIChrIDwgbGVuKSB7XG4gICAgICAgIGN1cnJlbnRFbGVtZW50ID0gT1trXTtcbiAgICAgICAgaWYgKHNlYXJjaEVsZW1lbnQgPT09IGN1cnJlbnRFbGVtZW50IHx8IHNlYXJjaEVsZW1lbnQgIT09IHNlYXJjaEVsZW1lbnQgJiYgY3VycmVudEVsZW1lbnQgIT09IGN1cnJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaysrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSk7XG59XG5cbmlmICh0eXBlb2YgRkVBVFVSRV9OT19FUzIwMTUgPT09ICd1bmRlZmluZWQnKSB7XG5cbiAgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbmVlZHNGaXggPSBmYWxzZTtcblxuICAgIHRyeSB7XG4gICAgICB2YXIgcyA9IE9iamVjdC5rZXlzKCdhJyk7XG4gICAgICBuZWVkc0ZpeCA9IHMubGVuZ3RoICE9PSAxIHx8IHNbMF0gIT09ICcwJztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBuZWVkc0ZpeCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKG5lZWRzRml4KSB7XG4gICAgICBPYmplY3Qua2V5cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxcbiAgICAgICAgICAgIGhhc0RvbnRFbnVtQnVnID0gIXsgdG9TdHJpbmc6IG51bGwgfS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgndG9TdHJpbmcnKSxcbiAgICAgICAgICAgIGRvbnRFbnVtcyA9IFsndG9TdHJpbmcnLCAndG9Mb2NhbGVTdHJpbmcnLCAndmFsdWVPZicsICdoYXNPd25Qcm9wZXJ0eScsICdpc1Byb3RvdHlwZU9mJywgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJ2NvbnN0cnVjdG9yJ10sXG4gICAgICAgICAgICBkb250RW51bXNMZW5ndGggPSBkb250RW51bXMubGVuZ3RoO1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3QnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvYmogPSBPYmplY3Qob2JqKTtcblxuICAgICAgICAgIHZhciByZXN1bHQgPSBbXSxcbiAgICAgICAgICAgICAgcHJvcCxcbiAgICAgICAgICAgICAgaTtcblxuICAgICAgICAgIGZvciAocHJvcCBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIHtcbiAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocHJvcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGhhc0RvbnRFbnVtQnVnKSB7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZG9udEVudW1zTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqLCBkb250RW51bXNbaV0pKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZG9udEVudW1zW2ldKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH07XG4gICAgICB9KCk7XG4gICAgfVxuICB9KSgpO1xuXG4gIChmdW5jdGlvbiAoTykge1xuICAgIGlmICgnYXNzaWduJyBpbiBPKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgTy5kZWZpbmVQcm9wZXJ0eShPLCAnYXNzaWduJywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZ09QUyA9IE8uZ2V0T3duUHJvcGVydHlTeW1ib2xzLFxuICAgICAgICAgICAgcElFID0gTy5wcm9wZXJ0eUlzRW51bWVyYWJsZSxcbiAgICAgICAgICAgIGZpbHRlck9TID0gZ09QUyA/IGZ1bmN0aW9uIChzZWxmKSB7XG4gICAgICAgICAgcmV0dXJuIGdPUFMoc2VsZikuZmlsdGVyKHBJRSwgc2VsZik7XG4gICAgICAgIH0gOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gYXNzaWduKHdoZXJlKSB7XG4gICAgICAgICAgaWYgKGdPUFMgJiYgISh3aGVyZSBpbnN0YW5jZW9mIE8pKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ3Byb2JsZW1hdGljIFN5bWJvbHMnLCB3aGVyZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZnVuY3Rpb24gc2V0KGtleU9yU3ltYm9sKSB7XG4gICAgICAgICAgICB3aGVyZVtrZXlPclN5bWJvbF0gPSBhcmdba2V5T3JTeW1ib2xdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZvciAodmFyIGkgPSAxLCBpaSA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgICB2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICAgICAgICBpZiAoYXJnID09PSBudWxsIHx8IGFyZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBPLmtleXMoYXJnKS5jb25jYXQoZmlsdGVyT1MoYXJnKSkuZm9yRWFjaChzZXQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB3aGVyZTtcbiAgICAgICAgfTtcbiAgICAgIH0oKVxuICAgIH0pO1xuICB9KShPYmplY3QpO1xuXG4gIGlmICghT2JqZWN0LmlzKSB7XG4gICAgT2JqZWN0LmlzID0gZnVuY3Rpb24gKHgsIHkpIHtcbiAgICAgIGlmICh4ID09PSB5KSB7XG4gICAgICAgIHJldHVybiB4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB4ICE9PSB4ICYmIHkgIT09IHk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG5pZiAodHlwZW9mIEZFQVRVUkVfTk9fRVMyMDE1ID09PSAndW5kZWZpbmVkJykge1xuXG4gIChmdW5jdGlvbiAoZ2xvYmFsKSB7XG4gICAgdmFyIGk7XG5cbiAgICB2YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHksXG4gICAgICAgIGlzID0gZnVuY3Rpb24gaXMoYSwgYikge1xuICAgICAgcmV0dXJuIGEgPT09IGIgfHwgYSAhPT0gYSAmJiBiICE9PSBiO1xuICAgIH07XG5cbiAgICBpZiAodHlwZW9mIFdlYWtNYXAgPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGdsb2JhbC5XZWFrTWFwID0gY3JlYXRlQ29sbGVjdGlvbih7XG4gICAgICAgICdkZWxldGUnOiBzaGFyZWREZWxldGUsXG5cbiAgICAgICAgY2xlYXI6IHNoYXJlZENsZWFyLFxuXG4gICAgICAgIGdldDogc2hhcmVkR2V0LFxuXG4gICAgICAgIGhhczogbWFwSGFzLFxuXG4gICAgICAgIHNldDogc2hhcmVkU2V0XG4gICAgICB9LCB0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIE1hcCA9PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgbmV3IE1hcCgpLnZhbHVlcyAhPT0gJ2Z1bmN0aW9uJyB8fCAhbmV3IE1hcCgpLnZhbHVlcygpLm5leHQpIHtcbiAgICAgIHZhciBfY3JlYXRlQ29sbGVjdGlvbjtcblxuICAgICAgZ2xvYmFsLk1hcCA9IGNyZWF0ZUNvbGxlY3Rpb24oKF9jcmVhdGVDb2xsZWN0aW9uID0ge1xuICAgICAgICAnZGVsZXRlJzogc2hhcmVkRGVsZXRlLFxuXG4gICAgICAgIGhhczogbWFwSGFzLFxuXG4gICAgICAgIGdldDogc2hhcmVkR2V0LFxuXG4gICAgICAgIHNldDogc2hhcmVkU2V0LFxuXG4gICAgICAgIGtleXM6IHNoYXJlZEtleXMsXG5cbiAgICAgICAgdmFsdWVzOiBzaGFyZWRWYWx1ZXMsXG5cbiAgICAgICAgZW50cmllczogbWFwRW50cmllcyxcblxuICAgICAgICBmb3JFYWNoOiBzaGFyZWRGb3JFYWNoLFxuXG4gICAgICAgIGNsZWFyOiBzaGFyZWRDbGVhclxuICAgICAgfSwgX2NyZWF0ZUNvbGxlY3Rpb25bU3ltYm9sLml0ZXJhdG9yXSA9IG1hcEVudHJpZXMsIF9jcmVhdGVDb2xsZWN0aW9uKSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBTZXQgPT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIG5ldyBTZXQoKS52YWx1ZXMgIT09ICdmdW5jdGlvbicgfHwgIW5ldyBTZXQoKS52YWx1ZXMoKS5uZXh0KSB7XG4gICAgICB2YXIgX2NyZWF0ZUNvbGxlY3Rpb24yO1xuXG4gICAgICBnbG9iYWwuU2V0ID0gY3JlYXRlQ29sbGVjdGlvbigoX2NyZWF0ZUNvbGxlY3Rpb24yID0ge1xuICAgICAgICBoYXM6IHNldEhhcyxcblxuICAgICAgICBhZGQ6IHNoYXJlZEFkZCxcblxuICAgICAgICAnZGVsZXRlJzogc2hhcmVkRGVsZXRlLFxuXG4gICAgICAgIGNsZWFyOiBzaGFyZWRDbGVhcixcblxuICAgICAgICBrZXlzOiBzaGFyZWRWYWx1ZXMsXG4gICAgICAgIHZhbHVlczogc2hhcmVkVmFsdWVzLFxuXG4gICAgICAgIGVudHJpZXM6IHNldEVudHJpZXMsXG5cbiAgICAgICAgZm9yRWFjaDogc2hhcmVkRm9yRWFjaFxuICAgICAgfSwgX2NyZWF0ZUNvbGxlY3Rpb24yW1N5bWJvbC5pdGVyYXRvcl0gPSBzaGFyZWRWYWx1ZXMsIF9jcmVhdGVDb2xsZWN0aW9uMikpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgV2Vha1NldCA9PSAndW5kZWZpbmVkJykge1xuICAgICAgZ2xvYmFsLldlYWtTZXQgPSBjcmVhdGVDb2xsZWN0aW9uKHtcbiAgICAgICAgJ2RlbGV0ZSc6IHNoYXJlZERlbGV0ZSxcblxuICAgICAgICBhZGQ6IHNoYXJlZEFkZCxcblxuICAgICAgICBjbGVhcjogc2hhcmVkQ2xlYXIsXG5cbiAgICAgICAgaGFzOiBzZXRIYXNcbiAgICAgIH0sIHRydWUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNvbGxlY3Rpb24ocHJvdG8sIG9iamVjdE9ubHkpIHtcbiAgICAgIGZ1bmN0aW9uIENvbGxlY3Rpb24oYSkge1xuICAgICAgICBpZiAoIXRoaXMgfHwgdGhpcy5jb25zdHJ1Y3RvciAhPT0gQ29sbGVjdGlvbikgcmV0dXJuIG5ldyBDb2xsZWN0aW9uKGEpO1xuICAgICAgICB0aGlzLl9rZXlzID0gW107XG4gICAgICAgIHRoaXMuX3ZhbHVlcyA9IFtdO1xuICAgICAgICB0aGlzLl9pdHAgPSBbXTtcbiAgICAgICAgdGhpcy5vYmplY3RPbmx5ID0gb2JqZWN0T25seTtcblxuICAgICAgICBpZiAoYSkgaW5pdC5jYWxsKHRoaXMsIGEpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW9iamVjdE9ubHkpIHtcbiAgICAgICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICdzaXplJywge1xuICAgICAgICAgIGdldDogc2hhcmVkU2l6ZVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcHJvdG8uY29uc3RydWN0b3IgPSBDb2xsZWN0aW9uO1xuICAgICAgQ29sbGVjdGlvbi5wcm90b3R5cGUgPSBwcm90bztcblxuICAgICAgcmV0dXJuIENvbGxlY3Rpb247XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5pdChhKSB7XG4gICAgICB2YXIgaTtcblxuICAgICAgaWYgKHRoaXMuYWRkKSBhLmZvckVhY2godGhpcy5hZGQsIHRoaXMpO2Vsc2UgYS5mb3JFYWNoKGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgdGhpcy5zZXQoYVswXSwgYVsxXSk7XG4gICAgICAgIH0sIHRoaXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNoYXJlZERlbGV0ZShrZXkpIHtcbiAgICAgIGlmICh0aGlzLmhhcyhrZXkpKSB7XG4gICAgICAgIHRoaXMuX2tleXMuc3BsaWNlKGksIDEpO1xuICAgICAgICB0aGlzLl92YWx1ZXMuc3BsaWNlKGksIDEpO1xuXG4gICAgICAgIHRoaXMuX2l0cC5mb3JFYWNoKGZ1bmN0aW9uIChwKSB7XG4gICAgICAgICAgaWYgKGkgPCBwWzBdKSBwWzBdLS07XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gLTEgPCBpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBzaGFyZWRHZXQoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXMoa2V5KSA/IHRoaXMuX3ZhbHVlc1tpXSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYXMobGlzdCwga2V5KSB7XG4gICAgICBpZiAodGhpcy5vYmplY3RPbmx5ICYmIGtleSAhPT0gT2JqZWN0KGtleSkpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIHZhbHVlIHVzZWQgYXMgd2VhayBjb2xsZWN0aW9uIGtleVwiKTtcblxuICAgICAgaWYgKGtleSAhPSBrZXkgfHwga2V5ID09PSAwKSBmb3IgKGkgPSBsaXN0Lmxlbmd0aDsgaS0tICYmICFpcyhsaXN0W2ldLCBrZXkpOykge30gZWxzZSBpID0gbGlzdC5pbmRleE9mKGtleSk7XG4gICAgICByZXR1cm4gLTEgPCBpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldEhhcyh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGhhcy5jYWxsKHRoaXMsIHRoaXMuX3ZhbHVlcywgdmFsdWUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hcEhhcyh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGhhcy5jYWxsKHRoaXMsIHRoaXMuX2tleXMsIHZhbHVlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzaGFyZWRTZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgdGhpcy5oYXMoa2V5KSA/IHRoaXMuX3ZhbHVlc1tpXSA9IHZhbHVlIDogdGhpcy5fdmFsdWVzW3RoaXMuX2tleXMucHVzaChrZXkpIC0gMV0gPSB2YWx1ZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNoYXJlZEFkZCh2YWx1ZSkge1xuICAgICAgaWYgKCF0aGlzLmhhcyh2YWx1ZSkpIHRoaXMuX3ZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNoYXJlZENsZWFyKCkge1xuICAgICAgKHRoaXMuX2tleXMgfHwgMCkubGVuZ3RoID0gdGhpcy5fdmFsdWVzLmxlbmd0aCA9IDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2hhcmVkS2V5cygpIHtcbiAgICAgIHJldHVybiBzaGFyZWRJdGVyYXRvcih0aGlzLl9pdHAsIHRoaXMuX2tleXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNoYXJlZFZhbHVlcygpIHtcbiAgICAgIHJldHVybiBzaGFyZWRJdGVyYXRvcih0aGlzLl9pdHAsIHRoaXMuX3ZhbHVlcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFwRW50cmllcygpIHtcbiAgICAgIHJldHVybiBzaGFyZWRJdGVyYXRvcih0aGlzLl9pdHAsIHRoaXMuX2tleXMsIHRoaXMuX3ZhbHVlcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0RW50cmllcygpIHtcbiAgICAgIHJldHVybiBzaGFyZWRJdGVyYXRvcih0aGlzLl9pdHAsIHRoaXMuX3ZhbHVlcywgdGhpcy5fdmFsdWVzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzaGFyZWRJdGVyYXRvcihpdHAsIGFycmF5LCBhcnJheTIpIHtcbiAgICAgIHZhciBfcmVmO1xuXG4gICAgICB2YXIgcCA9IFswXSxcbiAgICAgICAgICBkb25lID0gZmFsc2U7XG4gICAgICBpdHAucHVzaChwKTtcbiAgICAgIHJldHVybiBfcmVmID0ge30sIF9yZWZbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LCBfcmVmLm5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICB2YXIgdixcbiAgICAgICAgICAgIGsgPSBwWzBdO1xuICAgICAgICBpZiAoIWRvbmUgJiYgayA8IGFycmF5Lmxlbmd0aCkge1xuICAgICAgICAgIHYgPSBhcnJheTIgPyBbYXJyYXlba10sIGFycmF5MltrXV0gOiBhcnJheVtrXTtcbiAgICAgICAgICBwWzBdKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgaXRwLnNwbGljZShpdHAuaW5kZXhPZihwKSwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZG9uZTogZG9uZSwgdmFsdWU6IHYgfTtcbiAgICAgIH0sIF9yZWY7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2hhcmVkU2l6ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLl92YWx1ZXMubGVuZ3RoO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNoYXJlZEZvckVhY2goY2FsbGJhY2ssIGNvbnRleHQpIHtcbiAgICAgIHZhciBpdCA9IHRoaXMuZW50cmllcygpO1xuICAgICAgZm9yICg7Oykge1xuICAgICAgICB2YXIgciA9IGl0Lm5leHQoKTtcbiAgICAgICAgaWYgKHIuZG9uZSkgYnJlYWs7XG4gICAgICAgIGNhbGxiYWNrLmNhbGwoY29udGV4dCwgci52YWx1ZVsxXSwgci52YWx1ZVswXSwgdGhpcyk7XG4gICAgICB9XG4gICAgfVxuICB9KShQTEFURk9STS5nbG9iYWwpO1xufVxuXG5pZiAodHlwZW9mIEZFQVRVUkVfTk9fRVMyMDE1ID09PSAndW5kZWZpbmVkJykge1xuXG4gIHZhciBiaW5kID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7XG5cbiAgaWYgKHR5cGVvZiBQTEFURk9STS5nbG9iYWwuUmVmbGVjdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBQTEFURk9STS5nbG9iYWwuUmVmbGVjdCA9IHt9O1xuICB9XG5cbiAgaWYgKHR5cGVvZiBSZWZsZWN0LmRlZmluZVByb3BlcnR5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uICh0YXJnZXQsIHByb3BlcnR5S2V5LCBkZXNjcmlwdG9yKSB7XG4gICAgICBpZiAoKHR5cGVvZiB0YXJnZXQgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKHRhcmdldCkpID09PSAnb2JqZWN0JyA/IHRhcmdldCA9PT0gbnVsbCA6IHR5cGVvZiB0YXJnZXQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSBjYWxsZWQgb24gbm9uLW9iamVjdCcpO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBpZiAodHlwZW9mIFJlZmxlY3QuY29uc3RydWN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgUmVmbGVjdC5jb25zdHJ1Y3QgPSBmdW5jdGlvbiAoVGFyZ2V0LCBhcmdzKSB7XG4gICAgICBpZiAoYXJncykge1xuICAgICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBUYXJnZXQoKTtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdKTtcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgYSA9IFtudWxsXTtcbiAgICAgIGEucHVzaC5hcHBseShhLCBhcmdzKTtcbiAgICAgIHJldHVybiBuZXcgKGJpbmQuYXBwbHkoVGFyZ2V0LCBhKSkoKTtcbiAgICB9O1xuICB9XG5cbiAgaWYgKHR5cGVvZiBSZWZsZWN0Lm93bktleXMgIT09ICdmdW5jdGlvbicpIHtcbiAgICBSZWZsZWN0Lm93bktleXMgPSBmdW5jdGlvbiAobykge1xuICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG8pLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG8pKTtcbiAgICB9O1xuICB9XG59XG5cbmlmICh0eXBlb2YgRkVBVFVSRV9OT19FU05FWFQgPT09ICd1bmRlZmluZWQnKSB7XG5cbiAgdmFyIGVtcHR5TWV0YWRhdGEgPSBPYmplY3QuZnJlZXplKHt9KTtcbiAgdmFyIG1ldGFkYXRhQ29udGFpbmVyS2V5ID0gJ19fbWV0YWRhdGFfXyc7XG5cbiAgaWYgKHR5cGVvZiBSZWZsZWN0LmdldE93bk1ldGFkYXRhICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgUmVmbGVjdC5nZXRPd25NZXRhZGF0YSA9IGZ1bmN0aW9uIChtZXRhZGF0YUtleSwgdGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgICAgIGlmICh0YXJnZXQuaGFzT3duUHJvcGVydHkobWV0YWRhdGFDb250YWluZXJLZXkpKSB7XG4gICAgICAgIHJldHVybiAodGFyZ2V0W21ldGFkYXRhQ29udGFpbmVyS2V5XVt0YXJnZXRLZXldIHx8IGVtcHR5TWV0YWRhdGEpW21ldGFkYXRhS2V5XTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgaWYgKHR5cGVvZiBSZWZsZWN0LmRlZmluZU1ldGFkYXRhICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YSA9IGZ1bmN0aW9uIChtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSwgdGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgICAgIHZhciBtZXRhZGF0YUNvbnRhaW5lciA9IHRhcmdldC5oYXNPd25Qcm9wZXJ0eShtZXRhZGF0YUNvbnRhaW5lcktleSkgPyB0YXJnZXRbbWV0YWRhdGFDb250YWluZXJLZXldIDogdGFyZ2V0W21ldGFkYXRhQ29udGFpbmVyS2V5XSA9IHt9O1xuICAgICAgdmFyIHRhcmdldENvbnRhaW5lciA9IG1ldGFkYXRhQ29udGFpbmVyW3RhcmdldEtleV0gfHwgKG1ldGFkYXRhQ29udGFpbmVyW3RhcmdldEtleV0gPSB7fSk7XG4gICAgICB0YXJnZXRDb250YWluZXJbbWV0YWRhdGFLZXldID0gbWV0YWRhdGFWYWx1ZTtcbiAgICB9O1xuICB9XG5cbiAgaWYgKHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgUmVmbGVjdC5tZXRhZGF0YSA9IGZ1bmN0aW9uIChtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIHRhcmdldEtleSkge1xuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlLCB0YXJnZXQsIHRhcmdldEtleSk7XG4gICAgICB9O1xuICAgIH07XG4gIH1cbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///152\n")},153:function(module,exports){eval("// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzP2YyOGMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixzQkFBc0I7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBOztBQUVBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsVUFBVSIsImZpbGUiOiIxNTMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///153\n")},154:function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(process) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"bootstrap\", function() { return bootstrap; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"starting\", function() { return starting; });\n/* harmony import */ var aurelia_polyfills__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);\n/* harmony import */ var aurelia_pal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(0);\n\n\n\nvar bootstrapPromises = [];\nvar startResolve = void 0;\n\nvar startPromise = new Promise(function (resolve) {\n  return startResolve = resolve;\n});\nvar host = aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* PLATFORM */ \"d\"].global;\nvar isNodeLike = typeof process !== 'undefined' && !process.browser;\n\nfunction ready() {\n  if (!host.document || host.document.readyState === 'complete') {\n    return Promise.resolve();\n  }\n\n  return new Promise(function (resolve) {\n    host.document.addEventListener('DOMContentLoaded', completed);\n    host.addEventListener('load', completed);\n\n    function completed() {\n      host.document.removeEventListener('DOMContentLoaded', completed);\n      host.removeEventListener('load', completed);\n      resolve();\n    }\n  });\n}\n\nfunction createLoader() {\n  if (aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* PLATFORM */ \"d\"].Loader) {\n    return Promise.resolve(new aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* PLATFORM */ \"d\"].Loader());\n  }\n\n  if (false) { var _m, m; }\n\n  return Promise.reject('No PLATFORM.Loader is defined and there is neither a System API (ES6) or a Require API (AMD) globally available to load your app.');\n}\n\nfunction initializePal(loader) {\n  var type = void 0;\n\n  var isRenderer = isNodeLike && (process.type === 'renderer' || process.versions['node-webkit']);\n\n  if (isNodeLike && !isRenderer) {\n    type = 'nodejs';\n  } else if (typeof window !== 'undefined') {\n    type = 'browser';\n  } else if (typeof self !== 'undefined') {\n    type = 'worker';\n  } else {\n    throw new Error('Could not determine platform implementation to load.');\n  }\n\n  return loader.loadModule('aurelia-pal-' + type).then(function (palModule) {\n    return type === 'nodejs' && !aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* isInitialized */ \"f\"] && palModule.globalize() || palModule.initialize();\n  });\n}\n\nfunction preparePlatform(loader) {\n  var map = function map(moduleId, relativeTo) {\n    return loader.normalize(moduleId, relativeTo).then(function (normalized) {\n      loader.map(moduleId, normalized);\n      return normalized;\n    });\n  };\n\n  return initializePal(loader).then(function () {\n    return loader.normalize('aurelia-bootstrapper');\n  }).then(function (bootstrapperName) {\n    var frameworkPromise = map('aurelia-framework', bootstrapperName);\n\n    return Promise.all([frameworkPromise, frameworkPromise.then(function (frameworkName) {\n      return map('aurelia-dependency-injection', frameworkName);\n    }), map('aurelia-router', bootstrapperName), map('aurelia-logging-console', bootstrapperName)]);\n  }).then(function (_ref) {\n    var frameworkName = _ref[0];\n    return loader.loadModule(frameworkName);\n  }).then(function (fx) {\n    return startResolve(function () {\n      return new fx.Aurelia(loader);\n    });\n  });\n}\n\nfunction config(appHost, configModuleId, aurelia) {\n  aurelia.host = appHost;\n  aurelia.configModuleId = configModuleId || null;\n\n  if (configModuleId) {\n    return aurelia.loader.loadModule(configModuleId).then(function (customConfig) {\n      if (!customConfig.configure) {\n        throw new Error('Cannot initialize module \\'' + configModuleId + '\\' without a configure function.');\n      }\n\n      return customConfig.configure(aurelia);\n    });\n  }\n\n  aurelia.use.standardConfiguration().developmentLogging();\n\n  return aurelia.start().then(function () {\n    return aurelia.setRoot();\n  });\n}\n\nfunction run() {\n  return ready().then(createLoader).then(preparePlatform).then(function () {\n    var appHosts = host.document.querySelectorAll('[aurelia-app],[data-aurelia-app]');\n    for (var i = 0, ii = appHosts.length; i < ii; ++i) {\n      var appHost = appHosts[i];\n      var moduleId = appHost.getAttribute('aurelia-app') || appHost.getAttribute('data-aurelia-app');\n      bootstrap(config.bind(null, appHost, moduleId));\n    }\n\n    var toConsole = console.error.bind(console);\n    var bootstraps = bootstrapPromises.map(function (p) {\n      return p.catch(toConsole);\n    });\n    bootstrapPromises = null;\n    return Promise.all(bootstraps);\n  });\n}\n\nfunction bootstrap(configure) {\n  var p = startPromise.then(function (factory) {\n    return configure(factory());\n  });\n  if (bootstrapPromises) bootstrapPromises.push(p);\n  return p;\n}\n\nvar starting = run();\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(153)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXVyZWxpYS1ib290c3RyYXBwZXIvZGlzdC9uYXRpdmUtbW9kdWxlcy9hdXJlbGlhLWJvb3RzdHJhcHBlci5qcz82ZmQ5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBMkI7QUFDMkI7O0FBRXREO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7QUFDRCxXQUFXLDREQUFRO0FBQ25COztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0EsTUFBTSw0REFBUTtBQUNkLCtCQUErQiw0REFBUTtBQUN2Qzs7QUFFQSxNQUFNLEtBQTBDLEVBQUUsY0E0Qi9DOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQSxpQ0FBaUMsaUVBQWE7QUFDOUMsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSCwrQkFBK0IsbUJBQWtFOztBQUVqRztBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLFFBQVE7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRU87QUFDUDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFTyxxQiIsImZpbGUiOiIxNTQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJ2F1cmVsaWEtcG9seWZpbGxzJztcbmltcG9ydCB7IFBMQVRGT1JNLCBpc0luaXRpYWxpemVkIH0gZnJvbSAnYXVyZWxpYS1wYWwnO1xuXG52YXIgYm9vdHN0cmFwUHJvbWlzZXMgPSBbXTtcbnZhciBzdGFydFJlc29sdmUgPSB2b2lkIDA7XG5cbnZhciBzdGFydFByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICByZXR1cm4gc3RhcnRSZXNvbHZlID0gcmVzb2x2ZTtcbn0pO1xudmFyIGhvc3QgPSBQTEFURk9STS5nbG9iYWw7XG52YXIgaXNOb2RlTGlrZSA9IHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiAhcHJvY2Vzcy5icm93c2VyO1xuXG5mdW5jdGlvbiByZWFkeSgpIHtcbiAgaWYgKCFob3N0LmRvY3VtZW50IHx8IGhvc3QuZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2NvbXBsZXRlJykge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgIGhvc3QuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGNvbXBsZXRlZCk7XG4gICAgaG9zdC5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgY29tcGxldGVkKTtcblxuICAgIGZ1bmN0aW9uIGNvbXBsZXRlZCgpIHtcbiAgICAgIGhvc3QuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGNvbXBsZXRlZCk7XG4gICAgICBob3N0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBjb21wbGV0ZWQpO1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUxvYWRlcigpIHtcbiAgaWYgKFBMQVRGT1JNLkxvYWRlcikge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IFBMQVRGT1JNLkxvYWRlcigpKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgQVVSRUxJQV9XRUJQQUNLXzJfMCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAodHlwZW9mIF9fd2VicGFja19yZXF1aXJlX18gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB2YXIgbSA9IF9fd2VicGFja19yZXF1aXJlX18ocmVxdWlyZS5yZXNvbHZlKCdhdXJlbGlhLWxvYWRlci13ZWJwYWNrJykpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgbS5XZWJwYWNrTG9hZGVyKCkpO1xuICAgIH1cblxuICAgIGlmIChob3N0LlN5c3RlbSAmJiB0eXBlb2YgaG9zdC5TeXN0ZW0uY29uZmlnID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gaG9zdC5TeXN0ZW0ubm9ybWFsaXplKCdhdXJlbGlhLWJvb3RzdHJhcHBlcicpLnRoZW4oZnVuY3Rpb24gKGJzbikge1xuICAgICAgICByZXR1cm4gaG9zdC5TeXN0ZW0ubm9ybWFsaXplKCdhdXJlbGlhLWxvYWRlci1kZWZhdWx0JywgYnNuKTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKGxvYWRlck5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGhvc3QuU3lzdGVtLmltcG9ydChsb2FkZXJOYW1lKS50aGVuKGZ1bmN0aW9uIChtKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBtLkRlZmF1bHRMb2FkZXIoKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGhvc3QucmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgaG9zdC5yZXF1aXJlLnZlcnNpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICByZXR1cm4gaG9zdC5yZXF1aXJlKFsnYXVyZWxpYS1sb2FkZXItZGVmYXVsdCddLCBmdW5jdGlvbiAobSkge1xuICAgICAgICAgIHJldHVybiByZXNvbHZlKG5ldyBtLkRlZmF1bHRMb2FkZXIoKSk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoaXNOb2RlTGlrZSAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgbW9kdWxlLnJlcXVpcmUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB2YXIgX20gPSBtb2R1bGUucmVxdWlyZSgnYXVyZWxpYS1sb2FkZXItbm9kZWpzJyk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBfbS5Ob2RlSnNMb2FkZXIoKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVqZWN0KCdObyBQTEFURk9STS5Mb2FkZXIgaXMgZGVmaW5lZCBhbmQgdGhlcmUgaXMgbmVpdGhlciBhIFN5c3RlbSBBUEkgKEVTNikgb3IgYSBSZXF1aXJlIEFQSSAoQU1EKSBnbG9iYWxseSBhdmFpbGFibGUgdG8gbG9hZCB5b3VyIGFwcC4nKTtcbn1cblxuZnVuY3Rpb24gaW5pdGlhbGl6ZVBhbChsb2FkZXIpIHtcbiAgdmFyIHR5cGUgPSB2b2lkIDA7XG5cbiAgdmFyIGlzUmVuZGVyZXIgPSBpc05vZGVMaWtlICYmIChwcm9jZXNzLnR5cGUgPT09ICdyZW5kZXJlcicgfHwgcHJvY2Vzcy52ZXJzaW9uc1snbm9kZS13ZWJraXQnXSk7XG5cbiAgaWYgKGlzTm9kZUxpa2UgJiYgIWlzUmVuZGVyZXIpIHtcbiAgICB0eXBlID0gJ25vZGVqcyc7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB0eXBlID0gJ2Jyb3dzZXInO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykge1xuICAgIHR5cGUgPSAnd29ya2VyJztcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBkZXRlcm1pbmUgcGxhdGZvcm0gaW1wbGVtZW50YXRpb24gdG8gbG9hZC4nKTtcbiAgfVxuXG4gIHJldHVybiBsb2FkZXIubG9hZE1vZHVsZSgnYXVyZWxpYS1wYWwtJyArIHR5cGUpLnRoZW4oZnVuY3Rpb24gKHBhbE1vZHVsZSkge1xuICAgIHJldHVybiB0eXBlID09PSAnbm9kZWpzJyAmJiAhaXNJbml0aWFsaXplZCAmJiBwYWxNb2R1bGUuZ2xvYmFsaXplKCkgfHwgcGFsTW9kdWxlLmluaXRpYWxpemUoKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVQbGF0Zm9ybShsb2FkZXIpIHtcbiAgdmFyIG1hcCA9IGZ1bmN0aW9uIG1hcChtb2R1bGVJZCwgcmVsYXRpdmVUbykge1xuICAgIHJldHVybiBsb2FkZXIubm9ybWFsaXplKG1vZHVsZUlkLCByZWxhdGl2ZVRvKS50aGVuKGZ1bmN0aW9uIChub3JtYWxpemVkKSB7XG4gICAgICBsb2FkZXIubWFwKG1vZHVsZUlkLCBub3JtYWxpemVkKTtcbiAgICAgIHJldHVybiBub3JtYWxpemVkO1xuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBpbml0aWFsaXplUGFsKGxvYWRlcikudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGxvYWRlci5ub3JtYWxpemUoJ2F1cmVsaWEtYm9vdHN0cmFwcGVyJyk7XG4gIH0pLnRoZW4oZnVuY3Rpb24gKGJvb3RzdHJhcHBlck5hbWUpIHtcbiAgICB2YXIgZnJhbWV3b3JrUHJvbWlzZSA9IG1hcChQTEFURk9STS5tb2R1bGVOYW1lKCdhdXJlbGlhLWZyYW1ld29yaycsIHsgZXhwb3J0czogWydBdXJlbGlhJ10gfSksIGJvb3RzdHJhcHBlck5hbWUpO1xuXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFtmcmFtZXdvcmtQcm9taXNlLCBmcmFtZXdvcmtQcm9taXNlLnRoZW4oZnVuY3Rpb24gKGZyYW1ld29ya05hbWUpIHtcbiAgICAgIHJldHVybiBtYXAoJ2F1cmVsaWEtZGVwZW5kZW5jeS1pbmplY3Rpb24nLCBmcmFtZXdvcmtOYW1lKTtcbiAgICB9KSwgbWFwKCdhdXJlbGlhLXJvdXRlcicsIGJvb3RzdHJhcHBlck5hbWUpLCBtYXAoJ2F1cmVsaWEtbG9nZ2luZy1jb25zb2xlJywgYm9vdHN0cmFwcGVyTmFtZSldKTtcbiAgfSkudGhlbihmdW5jdGlvbiAoX3JlZikge1xuICAgIHZhciBmcmFtZXdvcmtOYW1lID0gX3JlZlswXTtcbiAgICByZXR1cm4gbG9hZGVyLmxvYWRNb2R1bGUoZnJhbWV3b3JrTmFtZSk7XG4gIH0pLnRoZW4oZnVuY3Rpb24gKGZ4KSB7XG4gICAgcmV0dXJuIHN0YXJ0UmVzb2x2ZShmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gbmV3IGZ4LkF1cmVsaWEobG9hZGVyKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNvbmZpZyhhcHBIb3N0LCBjb25maWdNb2R1bGVJZCwgYXVyZWxpYSkge1xuICBhdXJlbGlhLmhvc3QgPSBhcHBIb3N0O1xuICBhdXJlbGlhLmNvbmZpZ01vZHVsZUlkID0gY29uZmlnTW9kdWxlSWQgfHwgbnVsbDtcblxuICBpZiAoY29uZmlnTW9kdWxlSWQpIHtcbiAgICByZXR1cm4gYXVyZWxpYS5sb2FkZXIubG9hZE1vZHVsZShjb25maWdNb2R1bGVJZCkudGhlbihmdW5jdGlvbiAoY3VzdG9tQ29uZmlnKSB7XG4gICAgICBpZiAoIWN1c3RvbUNvbmZpZy5jb25maWd1cmUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW5pdGlhbGl6ZSBtb2R1bGUgXFwnJyArIGNvbmZpZ01vZHVsZUlkICsgJ1xcJyB3aXRob3V0IGEgY29uZmlndXJlIGZ1bmN0aW9uLicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY3VzdG9tQ29uZmlnLmNvbmZpZ3VyZShhdXJlbGlhKTtcbiAgICB9KTtcbiAgfVxuXG4gIGF1cmVsaWEudXNlLnN0YW5kYXJkQ29uZmlndXJhdGlvbigpLmRldmVsb3BtZW50TG9nZ2luZygpO1xuXG4gIHJldHVybiBhdXJlbGlhLnN0YXJ0KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGF1cmVsaWEuc2V0Um9vdCgpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcnVuKCkge1xuICByZXR1cm4gcmVhZHkoKS50aGVuKGNyZWF0ZUxvYWRlcikudGhlbihwcmVwYXJlUGxhdGZvcm0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcHBIb3N0cyA9IGhvc3QuZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2F1cmVsaWEtYXBwXSxbZGF0YS1hdXJlbGlhLWFwcF0nKTtcbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBhcHBIb3N0cy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICB2YXIgYXBwSG9zdCA9IGFwcEhvc3RzW2ldO1xuICAgICAgdmFyIG1vZHVsZUlkID0gYXBwSG9zdC5nZXRBdHRyaWJ1dGUoJ2F1cmVsaWEtYXBwJykgfHwgYXBwSG9zdC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYXVyZWxpYS1hcHAnKTtcbiAgICAgIGJvb3RzdHJhcChjb25maWcuYmluZChudWxsLCBhcHBIb3N0LCBtb2R1bGVJZCkpO1xuICAgIH1cblxuICAgIHZhciB0b0NvbnNvbGUgPSBjb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSk7XG4gICAgdmFyIGJvb3RzdHJhcHMgPSBib290c3RyYXBQcm9taXNlcy5tYXAoZnVuY3Rpb24gKHApIHtcbiAgICAgIHJldHVybiBwLmNhdGNoKHRvQ29uc29sZSk7XG4gICAgfSk7XG4gICAgYm9vdHN0cmFwUHJvbWlzZXMgPSBudWxsO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChib290c3RyYXBzKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBib290c3RyYXAoY29uZmlndXJlKSB7XG4gIHZhciBwID0gc3RhcnRQcm9taXNlLnRoZW4oZnVuY3Rpb24gKGZhY3RvcnkpIHtcbiAgICByZXR1cm4gY29uZmlndXJlKGZhY3RvcnkoKSk7XG4gIH0pO1xuICBpZiAoYm9vdHN0cmFwUHJvbWlzZXMpIGJvb3RzdHJhcFByb21pc2VzLnB1c2gocCk7XG4gIHJldHVybiBwO1xufVxuXG5leHBvcnQgdmFyIHN0YXJ0aW5nID0gcnVuKCk7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///154\n")},155:function(module,exports){eval('module.exports = function(originalModule) {\n\tif (!originalModule.webpackPolyfill) {\n\t\tvar module = Object.create(originalModule);\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, "loaded", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, "id", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, "exports", {\n\t\t\tenumerable: true\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vaGFybW9ueS1tb2R1bGUuanM/ODJiMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTU1LmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvcmlnaW5hbE1vZHVsZSkge1xuXHRpZiAoIW9yaWdpbmFsTW9kdWxlLndlYnBhY2tQb2x5ZmlsbCkge1xuXHRcdHZhciBtb2R1bGUgPSBPYmplY3QuY3JlYXRlKG9yaWdpbmFsTW9kdWxlKTtcblx0XHQvLyBtb2R1bGUucGFyZW50ID0gdW5kZWZpbmVkIGJ5IGRlZmF1bHRcblx0XHRpZiAoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJsb2FkZWRcIiwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBtb2R1bGUubDtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImlkXCIsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gbW9kdWxlLmk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJleHBvcnRzXCIsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWVcblx0XHR9KTtcblx0XHRtb2R1bGUud2VicGFja1BvbHlmaWxsID0gMTtcblx0fVxuXHRyZXR1cm4gbW9kdWxlO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///155\n')},156:function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(module) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextTemplateLoader", function() { return TextTemplateLoader; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WebpackLoader", function() { return WebpackLoader; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ensureOriginOnExports", function() { return ensureOriginOnExports; });\n/* harmony import */ var aurelia_loader__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8);\n/* harmony import */ var aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4);\n/* harmony import */ var aurelia_pal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(0);\n\n\n\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n    if (typeof b !== "function" && b !== null)\r\n        throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nfunction __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError("Generator is already executing.");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\n\n/**\r\n* An implementation of the TemplateLoader interface implemented with text-based loading.\r\n*/\r\nvar TextTemplateLoader = /** @class */ (function () {\r\n    function TextTemplateLoader() {\r\n    }\r\n    /**\r\n    * Loads a template.\r\n    * @param loader The loader that is requesting the template load.\r\n    * @param entry The TemplateRegistryEntry to load and populate with a template.\r\n    * @return A promise which resolves when the TemplateRegistryEntry is loaded with a template.\r\n    */\r\n    TextTemplateLoader.prototype.loadTemplate = function (loader, entry) {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var text;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, loader.loadText(entry.address)];\r\n                    case 1:\r\n                        text = _a.sent();\r\n                        entry.template = aurelia_pal__WEBPACK_IMPORTED_MODULE_2__[/* DOM */ "b"].createTemplateFromMarkup(text);\r\n                        return [2 /*return*/];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    return TextTemplateLoader;\r\n}());\r\nfunction ensureOriginOnExports(moduleExports, moduleId) {\r\n    var target = moduleExports;\r\n    var key;\r\n    var exportedValue;\r\n    if (target.__useDefault) {\r\n        target = target.default;\r\n    }\r\n    aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[/* Origin */ "a"].set(target, new aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[/* Origin */ "a"](moduleId, \'default\'));\r\n    if (typeof target === \'object\') {\r\n        for (key in target) {\r\n            exportedValue = target[key];\r\n            if (typeof exportedValue === \'function\') {\r\n                aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[/* Origin */ "a"].set(exportedValue, new aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[/* Origin */ "a"](moduleId, key));\r\n            }\r\n        }\r\n    }\r\n    return moduleExports;\r\n}\r\n/**\r\n* A default implementation of the Loader abstraction which works with webpack (extended common-js style).\r\n*/\r\nvar WebpackLoader = /** @class */ (function (_super) {\r\n    __extends(WebpackLoader, _super);\r\n    function WebpackLoader() {\r\n        var _this = _super.call(this) || this;\r\n        _this.moduleRegistry = Object.create(null);\r\n        _this.loaderPlugins = Object.create(null);\r\n        _this.modulesBeingLoaded = new Map();\r\n        _this.useTemplateLoader(new TextTemplateLoader());\r\n        _this.addPlugin(\'template-registry-entry\', {\r\n            fetch: function (moduleId) { return __awaiter(_this, void 0, void 0, function () {\r\n                var HmrContext, entry;\r\n                var _this = this;\r\n                return __generator(this, function (_a) {\r\n                    switch (_a.label) {\r\n                        case 0:\r\n                            // HMR:\r\n                            if (false) {}\r\n                            entry = this.getOrCreateTemplateRegistryEntry(moduleId);\r\n                            if (!!entry.templateIsLoaded) return [3 /*break*/, 2];\r\n                            return [4 /*yield*/, this.templateLoader.loadTemplate(this, entry)];\r\n                        case 1:\r\n                            _a.sent();\r\n                            _a.label = 2;\r\n                        case 2: return [2 /*return*/, entry];\r\n                    }\r\n                });\r\n            }); }\r\n        });\r\n        aurelia_pal__WEBPACK_IMPORTED_MODULE_2__[/* PLATFORM */ "d"].eachModule = function (callback) {\r\n            var registry = __webpack_require__.c;\r\n            var cachedModuleIds = Object.getOwnPropertyNames(registry);\r\n            cachedModuleIds\r\n                // Note: we use .some here like a .forEach that can be "break"ed out of.\r\n                // It will stop iterating only when a truthy value is returned.\r\n                // Even though the docs say "true" explicitly, loader-default also goes by truthy\r\n                // and this is to keep it consistent with that.\r\n                .some(function (moduleId) {\r\n                var moduleExports = registry[moduleId].exports;\r\n                if (typeof moduleExports === \'object\') {\r\n                    return callback(moduleId, moduleExports);\r\n                }\r\n                return false;\r\n            });\r\n        };\r\n        return _this;\r\n    }\r\n    WebpackLoader.prototype._import = function (address, defaultHMR) {\r\n        if (defaultHMR === void 0) { defaultHMR = true; }\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var addressParts, moduleId, loaderPlugin, plugin_1, asyncModuleId, callback;\r\n            var _this = this;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        addressParts = address.split(\'!\');\r\n                        moduleId = addressParts.splice(addressParts.length - 1, 1)[0];\r\n                        loaderPlugin = addressParts.length === 1 ? addressParts[0] : null;\r\n                        if (!loaderPlugin) return [3 /*break*/, 2];\r\n                        plugin_1 = this.loaderPlugins[loaderPlugin];\r\n                        if (!plugin_1) {\r\n                            throw new Error("Plugin " + loaderPlugin + " is not registered in the loader.");\r\n                        }\r\n                        if (false) {}\r\n                        return [4 /*yield*/, plugin_1.fetch(moduleId)];\r\n                    case 1: return [2 /*return*/, _a.sent()];\r\n                    case 2:\r\n                        if (__webpack_require__.m[moduleId]) {\r\n                            if (defaultHMR && module.hot && this.hmrContext) {\r\n                                module.hot.accept(moduleId, function () { return _this.hmrContext.handleModuleChange(moduleId, module.hot); });\r\n                            }\r\n                            return [2 /*return*/, __webpack_require__(moduleId)];\r\n                        }\r\n                        asyncModuleId = "async!" + moduleId;\r\n                        if (!__webpack_require__.m[asyncModuleId]) return [3 /*break*/, 4];\r\n                        if (defaultHMR && module.hot && this.hmrContext) {\r\n                            module.hot.accept(moduleId, function () { return _this.hmrContext.handleModuleChange(moduleId, module.hot); });\r\n                            module.hot.accept(asyncModuleId, function () { return _this.hmrContext.handleModuleChange(moduleId, module.hot); });\r\n                        }\r\n                        callback = __webpack_require__(asyncModuleId);\r\n                        return [4 /*yield*/, new Promise(callback)];\r\n                    case 3: return [2 /*return*/, _a.sent()];\r\n                    case 4: throw new Error("Unable to find module with ID: " + moduleId);\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n    * Maps a module id to a source.\r\n    * @param id The module id.\r\n    * @param source The source to map the module to.\r\n    */\r\n    WebpackLoader.prototype.map = function (id, source) { };\r\n    /**\r\n    * Normalizes a module id.\r\n    * @param moduleId The module id to normalize.\r\n    * @param relativeTo What the module id should be normalized relative to.\r\n    * @return The normalized module id.\r\n    */\r\n    WebpackLoader.prototype.normalizeSync = function (moduleId, relativeTo) {\r\n        return moduleId;\r\n    };\r\n    /**\r\n    * Normalizes a module id.\r\n    * @param moduleId The module id to normalize.\r\n    * @param relativeTo What the module id should be normalized relative to.\r\n    * @return The normalized module id.\r\n    */\r\n    WebpackLoader.prototype.normalize = function (moduleId, relativeTo) {\r\n        return Promise.resolve(moduleId);\r\n    };\r\n    /**\r\n    * Instructs the loader to use a specific TemplateLoader instance for loading templates\r\n    * @param templateLoader The instance of TemplateLoader to use for loading templates.\r\n    */\r\n    WebpackLoader.prototype.useTemplateLoader = function (templateLoader) {\r\n        this.templateLoader = templateLoader;\r\n    };\r\n    /**\r\n    * Loads a collection of modules.\r\n    * @param ids The set of module ids to load.\r\n    * @return A Promise for an array of loaded modules.\r\n    */\r\n    WebpackLoader.prototype.loadAllModules = function (ids) {\r\n        var _this = this;\r\n        return Promise.all(ids.map(function (id) { return _this.loadModule(id); }));\r\n    };\r\n    /**\r\n    * Loads a module.\r\n    * @param moduleId The module ID to load.\r\n    * @return A Promise for the loaded module.\r\n    */\r\n    WebpackLoader.prototype.loadModule = function (moduleId, defaultHMR) {\r\n        if (defaultHMR === void 0) { defaultHMR = true; }\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var existing, beingLoaded, moduleExports;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        existing = this.moduleRegistry[moduleId];\r\n                        if (existing) {\r\n                            return [2 /*return*/, existing];\r\n                        }\r\n                        beingLoaded = this.modulesBeingLoaded.get(moduleId);\r\n                        if (beingLoaded) {\r\n                            return [2 /*return*/, beingLoaded];\r\n                        }\r\n                        beingLoaded = this._import(moduleId, defaultHMR);\r\n                        this.modulesBeingLoaded.set(moduleId, beingLoaded);\r\n                        return [4 /*yield*/, beingLoaded];\r\n                    case 1:\r\n                        moduleExports = _a.sent();\r\n                        this.moduleRegistry[moduleId] = ensureOriginOnExports(moduleExports, moduleId);\r\n                        this.modulesBeingLoaded.delete(moduleId);\r\n                        return [2 /*return*/, moduleExports];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n    * Loads a template.\r\n    * @param url The url of the template to load.\r\n    * @return A Promise for a TemplateRegistryEntry containing the template.\r\n    */\r\n    WebpackLoader.prototype.loadTemplate = function (url) {\r\n        return this.loadModule(this.applyPluginToUrl(url, \'template-registry-entry\'), false);\r\n    };\r\n    /**\r\n    * Loads a text-based resource.\r\n    * @param url The url of the text file to load.\r\n    * @return A Promise for text content.\r\n    */\r\n    WebpackLoader.prototype.loadText = function (url) {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var result, defaultExport;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.loadModule(url, false)];\r\n                    case 1:\r\n                        result = _a.sent();\r\n                        defaultExport = result && result.__esModule ? result.default : result;\r\n                        if (defaultExport instanceof Array && defaultExport[0] instanceof Array && defaultExport.hasOwnProperty(\'toString\')) {\r\n                            // we\'re dealing with a file loaded using the css-loader:\r\n                            return [2 /*return*/, defaultExport.toString()];\r\n                        }\r\n                        return [2 /*return*/, typeof result === "string" ? result : defaultExport];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n    * Alters a module id so that it includes a plugin loader.\r\n    * @param url The url of the module to load.\r\n    * @param pluginName The plugin to apply to the module id.\r\n    * @return The plugin-based module id.\r\n    */\r\n    WebpackLoader.prototype.applyPluginToUrl = function (url, pluginName) {\r\n        return pluginName + "!" + url;\r\n    };\r\n    /**\r\n    * Registers a plugin with the loader.\r\n    * @param pluginName The name of the plugin.\r\n    * @param implementation The plugin implementation.\r\n    */\r\n    WebpackLoader.prototype.addPlugin = function (pluginName, implementation) {\r\n        this.loaderPlugins[pluginName] = implementation;\r\n    };\r\n    return WebpackLoader;\r\n}(aurelia_loader__WEBPACK_IMPORTED_MODULE_0__[/* Loader */ "a"]));\r\naurelia_pal__WEBPACK_IMPORTED_MODULE_2__[/* PLATFORM */ "d"].Loader = WebpackLoader;\n\n\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(155)(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXVyZWxpYS1sb2FkZXItd2VicGFjay9kaXN0L25hdGl2ZS1tb2R1bGVzL2F1cmVsaWEtbG9hZGVyLXdlYnBhY2suanM/ZTYzYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUF3QztBQUNFO0FBQ0U7O0FBRTVDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVUsZ0JBQWdCLHNDQUFzQyxpQkFBaUIsRUFBRTtBQUNuRix5QkFBeUIsOEVBQThFO0FBQ3ZHO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsK0RBQStELGdCQUFnQixFQUFFLEVBQUU7QUFDOUc7QUFDQSxtQ0FBbUMsTUFBTSw2QkFBNkIsRUFBRSxZQUFZLFdBQVcsRUFBRTtBQUNqRyxrQ0FBa0MsTUFBTSxpQ0FBaUMsRUFBRSxZQUFZLFdBQVcsRUFBRTtBQUNwRywrQkFBK0IscUZBQXFGO0FBQ3BIO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EsYUFBYSw2QkFBNkIsMEJBQTBCLGFBQWEsRUFBRSxxQkFBcUI7QUFDeEcsZ0JBQWdCLHFEQUFxRCxvRUFBb0UsYUFBYSxFQUFFO0FBQ3hKLHNCQUFzQixzQkFBc0IscUJBQXFCLEdBQUc7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDLGtDQUFrQyxTQUFTO0FBQzNDLGtDQUFrQyxXQUFXLFVBQVU7QUFDdkQseUNBQXlDLGNBQWM7QUFDdkQ7QUFDQSw2R0FBNkcsT0FBTyxVQUFVO0FBQzlILGdGQUFnRixpQkFBaUIsT0FBTztBQUN4Ryx3REFBd0QsZ0JBQWdCLFFBQVEsT0FBTztBQUN2Riw4Q0FBOEMsZ0JBQWdCLGdCQUFnQixPQUFPO0FBQ3JGO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQSxTQUFTLFlBQVksYUFBYSxPQUFPLEVBQUUsVUFBVSxXQUFXO0FBQ2hFLG1DQUFtQyxTQUFTO0FBQzVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5Qyx1REFBRztBQUM1QztBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSwrREFBTSxpQkFBaUIsK0RBQU07QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsK0RBQU0sd0JBQXdCLCtEQUFNO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLEtBQVUsRUFBRSxFQWVmO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakIsYUFBYSxFQUFFO0FBQ2YsU0FBUztBQUNULFFBQVEsNERBQVE7QUFDaEIsMkJBQTJCLG1CQUFtQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsbUJBQW1CO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsS0FBMEIsRUFBRSxFQUUvQjtBQUN6QjtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsbUJBQW1CO0FBQy9DO0FBQ0EseUVBQXlFLGtFQUFrRSxFQUFFO0FBQzdJO0FBQ0Esa0RBQWtELG1CQUFtQjtBQUNyRTtBQUNBO0FBQ0EsNkJBQTZCLG1CQUFtQjtBQUNoRDtBQUNBLHFFQUFxRSxrRUFBa0UsRUFBRTtBQUN6SSwwRUFBMEUsa0VBQWtFLEVBQUU7QUFDOUk7QUFDQSxtQ0FBbUMsbUJBQW1CO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQ7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRCw2QkFBNkIsRUFBRTtBQUNqRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxtQkFBbUI7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxDQUFDLDZEQUFNO0FBQ1IsNERBQVE7O0FBRTREIiwiZmlsZSI6IjE1Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvYWRlciB9IGZyb20gJ2F1cmVsaWEtbG9hZGVyJztcbmltcG9ydCB7IE9yaWdpbiB9IGZyb20gJ2F1cmVsaWEtbWV0YWRhdGEnO1xuaW1wb3J0IHsgUExBVEZPUk0sIERPTSB9IGZyb20gJ2F1cmVsaWEtcGFsJztcblxuLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xyXG4gICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XHJcbiAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XG5cbi8qKlxyXG4qIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBUZW1wbGF0ZUxvYWRlciBpbnRlcmZhY2UgaW1wbGVtZW50ZWQgd2l0aCB0ZXh0LWJhc2VkIGxvYWRpbmcuXHJcbiovXHJcbnZhciBUZXh0VGVtcGxhdGVMb2FkZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBUZXh0VGVtcGxhdGVMb2FkZXIoKSB7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICogTG9hZHMgYSB0ZW1wbGF0ZS5cclxuICAgICogQHBhcmFtIGxvYWRlciBUaGUgbG9hZGVyIHRoYXQgaXMgcmVxdWVzdGluZyB0aGUgdGVtcGxhdGUgbG9hZC5cclxuICAgICogQHBhcmFtIGVudHJ5IFRoZSBUZW1wbGF0ZVJlZ2lzdHJ5RW50cnkgdG8gbG9hZCBhbmQgcG9wdWxhdGUgd2l0aCBhIHRlbXBsYXRlLlxyXG4gICAgKiBAcmV0dXJuIEEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyB3aGVuIHRoZSBUZW1wbGF0ZVJlZ2lzdHJ5RW50cnkgaXMgbG9hZGVkIHdpdGggYSB0ZW1wbGF0ZS5cclxuICAgICovXHJcbiAgICBUZXh0VGVtcGxhdGVMb2FkZXIucHJvdG90eXBlLmxvYWRUZW1wbGF0ZSA9IGZ1bmN0aW9uIChsb2FkZXIsIGVudHJ5KSB7XHJcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgdGV4dDtcclxuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIFs0IC8qeWllbGQqLywgbG9hZGVyLmxvYWRUZXh0KGVudHJ5LmFkZHJlc3MpXTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgPSBfYS5zZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LnRlbXBsYXRlID0gRE9NLmNyZWF0ZVRlbXBsYXRlRnJvbU1hcmt1cCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gVGV4dFRlbXBsYXRlTG9hZGVyO1xyXG59KCkpO1xyXG5mdW5jdGlvbiBlbnN1cmVPcmlnaW5PbkV4cG9ydHMobW9kdWxlRXhwb3J0cywgbW9kdWxlSWQpIHtcclxuICAgIHZhciB0YXJnZXQgPSBtb2R1bGVFeHBvcnRzO1xyXG4gICAgdmFyIGtleTtcclxuICAgIHZhciBleHBvcnRlZFZhbHVlO1xyXG4gICAgaWYgKHRhcmdldC5fX3VzZURlZmF1bHQpIHtcclxuICAgICAgICB0YXJnZXQgPSB0YXJnZXQuZGVmYXVsdDtcclxuICAgIH1cclxuICAgIE9yaWdpbi5zZXQodGFyZ2V0LCBuZXcgT3JpZ2luKG1vZHVsZUlkLCAnZGVmYXVsdCcpKTtcclxuICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgIGZvciAoa2V5IGluIHRhcmdldCkge1xyXG4gICAgICAgICAgICBleHBvcnRlZFZhbHVlID0gdGFyZ2V0W2tleV07XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXhwb3J0ZWRWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgT3JpZ2luLnNldChleHBvcnRlZFZhbHVlLCBuZXcgT3JpZ2luKG1vZHVsZUlkLCBrZXkpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBtb2R1bGVFeHBvcnRzO1xyXG59XHJcbi8qKlxyXG4qIEEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTG9hZGVyIGFic3RyYWN0aW9uIHdoaWNoIHdvcmtzIHdpdGggd2VicGFjayAoZXh0ZW5kZWQgY29tbW9uLWpzIHN0eWxlKS5cclxuKi9cclxudmFyIFdlYnBhY2tMb2FkZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XHJcbiAgICBfX2V4dGVuZHMoV2VicGFja0xvYWRlciwgX3N1cGVyKTtcclxuICAgIGZ1bmN0aW9uIFdlYnBhY2tMb2FkZXIoKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcclxuICAgICAgICBfdGhpcy5tb2R1bGVSZWdpc3RyeSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XHJcbiAgICAgICAgX3RoaXMubG9hZGVyUGx1Z2lucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XHJcbiAgICAgICAgX3RoaXMubW9kdWxlc0JlaW5nTG9hZGVkID0gbmV3IE1hcCgpO1xyXG4gICAgICAgIF90aGlzLnVzZVRlbXBsYXRlTG9hZGVyKG5ldyBUZXh0VGVtcGxhdGVMb2FkZXIoKSk7XHJcbiAgICAgICAgX3RoaXMuYWRkUGx1Z2luKCd0ZW1wbGF0ZS1yZWdpc3RyeS1lbnRyeScsIHtcclxuICAgICAgICAgICAgZmV0Y2g6IGZ1bmN0aW9uIChtb2R1bGVJZCkgeyByZXR1cm4gX19hd2FpdGVyKF90aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIEhtckNvbnRleHQsIGVudHJ5O1xyXG4gICAgICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcclxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhNUjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2R1bGUuaG90KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmhtckNvbnRleHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG1yQ29udGV4dCA9IHJlcXVpcmUoJ2F1cmVsaWEtaG90LW1vZHVsZS1yZWxvYWQnKS5IbXJDb250ZXh0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhtckNvbnRleHQgPSBuZXcgSG1yQ29udGV4dCh0aGlzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmhvdC5hY2NlcHQobW9kdWxlSWQsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9fYXdhaXRlcihfdGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5obXJDb250ZXh0LmhhbmRsZVZpZXdDaGFuZ2UobW9kdWxlSWQpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeSA9IHRoaXMuZ2V0T3JDcmVhdGVUZW1wbGF0ZVJlZ2lzdHJ5RW50cnkobW9kdWxlSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhZW50cnkudGVtcGxhdGVJc0xvYWRlZCkgcmV0dXJuIFszIC8qYnJlYWsqLywgMl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLnRlbXBsYXRlTG9hZGVyLmxvYWRUZW1wbGF0ZSh0aGlzLCBlbnRyeSldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYS5zZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYS5sYWJlbCA9IDI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIGVudHJ5XTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7IH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBQTEFURk9STS5lYWNoTW9kdWxlID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIHZhciByZWdpc3RyeSA9IF9fd2VicGFja19yZXF1aXJlX18uYztcclxuICAgICAgICAgICAgdmFyIGNhY2hlZE1vZHVsZUlkcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHJlZ2lzdHJ5KTtcclxuICAgICAgICAgICAgY2FjaGVkTW9kdWxlSWRzXHJcbiAgICAgICAgICAgICAgICAvLyBOb3RlOiB3ZSB1c2UgLnNvbWUgaGVyZSBsaWtlIGEgLmZvckVhY2ggdGhhdCBjYW4gYmUgXCJicmVha1wiZWQgb3V0IG9mLlxyXG4gICAgICAgICAgICAgICAgLy8gSXQgd2lsbCBzdG9wIGl0ZXJhdGluZyBvbmx5IHdoZW4gYSB0cnV0aHkgdmFsdWUgaXMgcmV0dXJuZWQuXHJcbiAgICAgICAgICAgICAgICAvLyBFdmVuIHRob3VnaCB0aGUgZG9jcyBzYXkgXCJ0cnVlXCIgZXhwbGljaXRseSwgbG9hZGVyLWRlZmF1bHQgYWxzbyBnb2VzIGJ5IHRydXRoeVxyXG4gICAgICAgICAgICAgICAgLy8gYW5kIHRoaXMgaXMgdG8ga2VlcCBpdCBjb25zaXN0ZW50IHdpdGggdGhhdC5cclxuICAgICAgICAgICAgICAgIC5zb21lKGZ1bmN0aW9uIChtb2R1bGVJZCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG1vZHVsZUV4cG9ydHMgPSByZWdpc3RyeVttb2R1bGVJZF0uZXhwb3J0cztcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlRXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobW9kdWxlSWQsIG1vZHVsZUV4cG9ydHMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBfdGhpcztcclxuICAgIH1cclxuICAgIFdlYnBhY2tMb2FkZXIucHJvdG90eXBlLl9pbXBvcnQgPSBmdW5jdGlvbiAoYWRkcmVzcywgZGVmYXVsdEhNUikge1xyXG4gICAgICAgIGlmIChkZWZhdWx0SE1SID09PSB2b2lkIDApIHsgZGVmYXVsdEhNUiA9IHRydWU7IH1cclxuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBhZGRyZXNzUGFydHMsIG1vZHVsZUlkLCBsb2FkZXJQbHVnaW4sIHBsdWdpbl8xLCBhc3luY01vZHVsZUlkLCBjYWxsYmFjaztcclxuICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzc1BhcnRzID0gYWRkcmVzcy5zcGxpdCgnIScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVJZCA9IGFkZHJlc3NQYXJ0cy5zcGxpY2UoYWRkcmVzc1BhcnRzLmxlbmd0aCAtIDEsIDEpWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXJQbHVnaW4gPSBhZGRyZXNzUGFydHMubGVuZ3RoID09PSAxID8gYWRkcmVzc1BhcnRzWzBdIDogbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2FkZXJQbHVnaW4pIHJldHVybiBbMyAvKmJyZWFrKi8sIDJdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5fMSA9IHRoaXMubG9hZGVyUGx1Z2luc1tsb2FkZXJQbHVnaW5dO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBsdWdpbl8xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbHVnaW4gXCIgKyBsb2FkZXJQbHVnaW4gKyBcIiBpcyBub3QgcmVnaXN0ZXJlZCBpbiB0aGUgbG9hZGVyLlwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kdWxlLmhvdCAmJiBwbHVnaW5fMS5ob3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5ob3QuYWNjZXB0KG1vZHVsZUlkLCBmdW5jdGlvbiAoKSB7IHJldHVybiBwbHVnaW5fMS5ob3QobW9kdWxlSWQpOyB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBwbHVnaW5fMS5mZXRjaChtb2R1bGVJZCldO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIF9hLnNlbnQoKV07XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX193ZWJwYWNrX3JlcXVpcmVfXy5tW21vZHVsZUlkXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRITVIgJiYgbW9kdWxlLmhvdCAmJiB0aGlzLmhtckNvbnRleHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuaG90LmFjY2VwdChtb2R1bGVJZCwgZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMuaG1yQ29udGV4dC5oYW5kbGVNb2R1bGVDaGFuZ2UobW9kdWxlSWQsIG1vZHVsZS5ob3QpOyB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmNNb2R1bGVJZCA9IFwiYXN5bmMhXCIgKyBtb2R1bGVJZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm1bYXN5bmNNb2R1bGVJZF0pIHJldHVybiBbMyAvKmJyZWFrKi8sIDRdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVmYXVsdEhNUiAmJiBtb2R1bGUuaG90ICYmIHRoaXMuaG1yQ29udGV4dCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmhvdC5hY2NlcHQobW9kdWxlSWQsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLmhtckNvbnRleHQuaGFuZGxlTW9kdWxlQ2hhbmdlKG1vZHVsZUlkLCBtb2R1bGUuaG90KTsgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuaG90LmFjY2VwdChhc3luY01vZHVsZUlkLCBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5obXJDb250ZXh0LmhhbmRsZU1vZHVsZUNoYW5nZShtb2R1bGVJZCwgbW9kdWxlLmhvdCk7IH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gX193ZWJwYWNrX3JlcXVpcmVfXyhhc3luY01vZHVsZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgbmV3IFByb21pc2UoY2FsbGJhY2spXTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBbMiAvKnJldHVybiovLCBfYS5zZW50KCldO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIGZpbmQgbW9kdWxlIHdpdGggSUQ6IFwiICsgbW9kdWxlSWQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICogTWFwcyBhIG1vZHVsZSBpZCB0byBhIHNvdXJjZS5cclxuICAgICogQHBhcmFtIGlkIFRoZSBtb2R1bGUgaWQuXHJcbiAgICAqIEBwYXJhbSBzb3VyY2UgVGhlIHNvdXJjZSB0byBtYXAgdGhlIG1vZHVsZSB0by5cclxuICAgICovXHJcbiAgICBXZWJwYWNrTG9hZGVyLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoaWQsIHNvdXJjZSkgeyB9O1xyXG4gICAgLyoqXHJcbiAgICAqIE5vcm1hbGl6ZXMgYSBtb2R1bGUgaWQuXHJcbiAgICAqIEBwYXJhbSBtb2R1bGVJZCBUaGUgbW9kdWxlIGlkIHRvIG5vcm1hbGl6ZS5cclxuICAgICogQHBhcmFtIHJlbGF0aXZlVG8gV2hhdCB0aGUgbW9kdWxlIGlkIHNob3VsZCBiZSBub3JtYWxpemVkIHJlbGF0aXZlIHRvLlxyXG4gICAgKiBAcmV0dXJuIFRoZSBub3JtYWxpemVkIG1vZHVsZSBpZC5cclxuICAgICovXHJcbiAgICBXZWJwYWNrTG9hZGVyLnByb3RvdHlwZS5ub3JtYWxpemVTeW5jID0gZnVuY3Rpb24gKG1vZHVsZUlkLCByZWxhdGl2ZVRvKSB7XHJcbiAgICAgICAgcmV0dXJuIG1vZHVsZUlkO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgKiBOb3JtYWxpemVzIGEgbW9kdWxlIGlkLlxyXG4gICAgKiBAcGFyYW0gbW9kdWxlSWQgVGhlIG1vZHVsZSBpZCB0byBub3JtYWxpemUuXHJcbiAgICAqIEBwYXJhbSByZWxhdGl2ZVRvIFdoYXQgdGhlIG1vZHVsZSBpZCBzaG91bGQgYmUgbm9ybWFsaXplZCByZWxhdGl2ZSB0by5cclxuICAgICogQHJldHVybiBUaGUgbm9ybWFsaXplZCBtb2R1bGUgaWQuXHJcbiAgICAqL1xyXG4gICAgV2VicGFja0xvYWRlci5wcm90b3R5cGUubm9ybWFsaXplID0gZnVuY3Rpb24gKG1vZHVsZUlkLCByZWxhdGl2ZVRvKSB7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtb2R1bGVJZCk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAqIEluc3RydWN0cyB0aGUgbG9hZGVyIHRvIHVzZSBhIHNwZWNpZmljIFRlbXBsYXRlTG9hZGVyIGluc3RhbmNlIGZvciBsb2FkaW5nIHRlbXBsYXRlc1xyXG4gICAgKiBAcGFyYW0gdGVtcGxhdGVMb2FkZXIgVGhlIGluc3RhbmNlIG9mIFRlbXBsYXRlTG9hZGVyIHRvIHVzZSBmb3IgbG9hZGluZyB0ZW1wbGF0ZXMuXHJcbiAgICAqL1xyXG4gICAgV2VicGFja0xvYWRlci5wcm90b3R5cGUudXNlVGVtcGxhdGVMb2FkZXIgPSBmdW5jdGlvbiAodGVtcGxhdGVMb2FkZXIpIHtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlTG9hZGVyID0gdGVtcGxhdGVMb2FkZXI7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAqIExvYWRzIGEgY29sbGVjdGlvbiBvZiBtb2R1bGVzLlxyXG4gICAgKiBAcGFyYW0gaWRzIFRoZSBzZXQgb2YgbW9kdWxlIGlkcyB0byBsb2FkLlxyXG4gICAgKiBAcmV0dXJuIEEgUHJvbWlzZSBmb3IgYW4gYXJyYXkgb2YgbG9hZGVkIG1vZHVsZXMuXHJcbiAgICAqL1xyXG4gICAgV2VicGFja0xvYWRlci5wcm90b3R5cGUubG9hZEFsbE1vZHVsZXMgPSBmdW5jdGlvbiAoaWRzKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoaWRzLm1hcChmdW5jdGlvbiAoaWQpIHsgcmV0dXJuIF90aGlzLmxvYWRNb2R1bGUoaWQpOyB9KSk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAqIExvYWRzIGEgbW9kdWxlLlxyXG4gICAgKiBAcGFyYW0gbW9kdWxlSWQgVGhlIG1vZHVsZSBJRCB0byBsb2FkLlxyXG4gICAgKiBAcmV0dXJuIEEgUHJvbWlzZSBmb3IgdGhlIGxvYWRlZCBtb2R1bGUuXHJcbiAgICAqL1xyXG4gICAgV2VicGFja0xvYWRlci5wcm90b3R5cGUubG9hZE1vZHVsZSA9IGZ1bmN0aW9uIChtb2R1bGVJZCwgZGVmYXVsdEhNUikge1xyXG4gICAgICAgIGlmIChkZWZhdWx0SE1SID09PSB2b2lkIDApIHsgZGVmYXVsdEhNUiA9IHRydWU7IH1cclxuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBleGlzdGluZywgYmVpbmdMb2FkZWQsIG1vZHVsZUV4cG9ydHM7XHJcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nID0gdGhpcy5tb2R1bGVSZWdpc3RyeVttb2R1bGVJZF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleGlzdGluZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIGV4aXN0aW5nXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWluZ0xvYWRlZCA9IHRoaXMubW9kdWxlc0JlaW5nTG9hZGVkLmdldChtb2R1bGVJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiZWluZ0xvYWRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIGJlaW5nTG9hZGVkXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWluZ0xvYWRlZCA9IHRoaXMuX2ltcG9ydChtb2R1bGVJZCwgZGVmYXVsdEhNUik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9kdWxlc0JlaW5nTG9hZGVkLnNldChtb2R1bGVJZCwgYmVpbmdMb2FkZWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBiZWluZ0xvYWRlZF07XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVFeHBvcnRzID0gX2Euc2VudCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZHVsZVJlZ2lzdHJ5W21vZHVsZUlkXSA9IGVuc3VyZU9yaWdpbk9uRXhwb3J0cyhtb2R1bGVFeHBvcnRzLCBtb2R1bGVJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9kdWxlc0JlaW5nTG9hZGVkLmRlbGV0ZShtb2R1bGVJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBtb2R1bGVFeHBvcnRzXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAqIExvYWRzIGEgdGVtcGxhdGUuXHJcbiAgICAqIEBwYXJhbSB1cmwgVGhlIHVybCBvZiB0aGUgdGVtcGxhdGUgdG8gbG9hZC5cclxuICAgICogQHJldHVybiBBIFByb21pc2UgZm9yIGEgVGVtcGxhdGVSZWdpc3RyeUVudHJ5IGNvbnRhaW5pbmcgdGhlIHRlbXBsYXRlLlxyXG4gICAgKi9cclxuICAgIFdlYnBhY2tMb2FkZXIucHJvdG90eXBlLmxvYWRUZW1wbGF0ZSA9IGZ1bmN0aW9uICh1cmwpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sb2FkTW9kdWxlKHRoaXMuYXBwbHlQbHVnaW5Ub1VybCh1cmwsICd0ZW1wbGF0ZS1yZWdpc3RyeS1lbnRyeScpLCBmYWxzZSk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAqIExvYWRzIGEgdGV4dC1iYXNlZCByZXNvdXJjZS5cclxuICAgICogQHBhcmFtIHVybCBUaGUgdXJsIG9mIHRoZSB0ZXh0IGZpbGUgdG8gbG9hZC5cclxuICAgICogQHJldHVybiBBIFByb21pc2UgZm9yIHRleHQgY29udGVudC5cclxuICAgICovXHJcbiAgICBXZWJwYWNrTG9hZGVyLnByb3RvdHlwZS5sb2FkVGV4dCA9IGZ1bmN0aW9uICh1cmwpIHtcclxuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQsIGRlZmF1bHRFeHBvcnQ7XHJcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMubG9hZE1vZHVsZSh1cmwsIGZhbHNlKV07XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBfYS5zZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRFeHBvcnQgPSByZXN1bHQgJiYgcmVzdWx0Ll9fZXNNb2R1bGUgPyByZXN1bHQuZGVmYXVsdCA6IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRFeHBvcnQgaW5zdGFuY2VvZiBBcnJheSAmJiBkZWZhdWx0RXhwb3J0WzBdIGluc3RhbmNlb2YgQXJyYXkgJiYgZGVmYXVsdEV4cG9ydC5oYXNPd25Qcm9wZXJ0eSgndG9TdHJpbmcnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UncmUgZGVhbGluZyB3aXRoIGEgZmlsZSBsb2FkZWQgdXNpbmcgdGhlIGNzcy1sb2FkZXI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgZGVmYXVsdEV4cG9ydC50b1N0cmluZygpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgdHlwZW9mIHJlc3VsdCA9PT0gXCJzdHJpbmdcIiA/IHJlc3VsdCA6IGRlZmF1bHRFeHBvcnRdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICogQWx0ZXJzIGEgbW9kdWxlIGlkIHNvIHRoYXQgaXQgaW5jbHVkZXMgYSBwbHVnaW4gbG9hZGVyLlxyXG4gICAgKiBAcGFyYW0gdXJsIFRoZSB1cmwgb2YgdGhlIG1vZHVsZSB0byBsb2FkLlxyXG4gICAgKiBAcGFyYW0gcGx1Z2luTmFtZSBUaGUgcGx1Z2luIHRvIGFwcGx5IHRvIHRoZSBtb2R1bGUgaWQuXHJcbiAgICAqIEByZXR1cm4gVGhlIHBsdWdpbi1iYXNlZCBtb2R1bGUgaWQuXHJcbiAgICAqL1xyXG4gICAgV2VicGFja0xvYWRlci5wcm90b3R5cGUuYXBwbHlQbHVnaW5Ub1VybCA9IGZ1bmN0aW9uICh1cmwsIHBsdWdpbk5hbWUpIHtcclxuICAgICAgICByZXR1cm4gcGx1Z2luTmFtZSArIFwiIVwiICsgdXJsO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgKiBSZWdpc3RlcnMgYSBwbHVnaW4gd2l0aCB0aGUgbG9hZGVyLlxyXG4gICAgKiBAcGFyYW0gcGx1Z2luTmFtZSBUaGUgbmFtZSBvZiB0aGUgcGx1Z2luLlxyXG4gICAgKiBAcGFyYW0gaW1wbGVtZW50YXRpb24gVGhlIHBsdWdpbiBpbXBsZW1lbnRhdGlvbi5cclxuICAgICovXHJcbiAgICBXZWJwYWNrTG9hZGVyLnByb3RvdHlwZS5hZGRQbHVnaW4gPSBmdW5jdGlvbiAocGx1Z2luTmFtZSwgaW1wbGVtZW50YXRpb24pIHtcclxuICAgICAgICB0aGlzLmxvYWRlclBsdWdpbnNbcGx1Z2luTmFtZV0gPSBpbXBsZW1lbnRhdGlvbjtcclxuICAgIH07XHJcbiAgICByZXR1cm4gV2VicGFja0xvYWRlcjtcclxufShMb2FkZXIpKTtcclxuUExBVEZPUk0uTG9hZGVyID0gV2VicGFja0xvYWRlcjtcblxuZXhwb3J0IHsgVGV4dFRlbXBsYXRlTG9hZGVyLCBXZWJwYWNrTG9hZGVyLCBlbnN1cmVPcmlnaW5PbkV4cG9ydHMgfTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///156\n')},157:function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var aurelia_pal__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0);\n// With default aurelia-loader-webpack config, this module is added as an extra entry\n// before any other code executes so that PAL.Loader is properly configured.\n// There are several tricky points worth noticing.\n// \n// We don't add aurelia-loader-webpack itself as an entry point (used to until 2.0 RC2)\n// because it (transitively) brings too much bagage with itself, most notably polyfills.\n// This made it super-hard to add other polyfills before Aurelia's and led to various bugs.\n//\n// We don't add custom code in aurelia-pal or aurelia-loader or aurelia-bootstrapper to detect\n// the Webpack environment and configure the loader because they might live in a DLL.\n// If they do, they would bring aurelia-loader-webpack along in the DLL and this is a special \n// library that *has to be in the main chunk.*\n//\n// The over-complicated design I've settled upon in the end is to use this special module\n// as an entry point that configures aurelia-loader-webpack. It has minimal static imports:\n// just aurelia-pal, which itself has no other dependencies and doesn't run much code.\n// It hacks the loader field into a getter so that it can synchronously load aurelia-loader-webpack\n// just in time when it is demanded by aurelia-bootstrapper.\n// This enables users to load polyfills before aurelia-loader-webpack is actually loaded.\n\n\n\nvar Loader;\n\nObject.defineProperty(aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* PLATFORM */ \"d\"], \"Loader\", {\n  get: function() {\n    return Loader || (Loader = __webpack_require__(156).WebpackLoader);\n  },\n  set: function(value) {\n    Loader = value;\n  }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXVyZWxpYS13ZWJwYWNrLXBsdWdpbi9ydW50aW1lL3BhbC1sb2FkZXItZW50cnkuanM/MWE2NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRXVDOztBQUV2Qzs7QUFFQSxzQkFBc0IsNERBQVE7QUFDOUI7QUFDQSwrQkFBK0IsbUJBQU8sQ0FBQyxHQUF3QjtBQUMvRCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxNTcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBXaXRoIGRlZmF1bHQgYXVyZWxpYS1sb2FkZXItd2VicGFjayBjb25maWcsIHRoaXMgbW9kdWxlIGlzIGFkZGVkIGFzIGFuIGV4dHJhIGVudHJ5XG4vLyBiZWZvcmUgYW55IG90aGVyIGNvZGUgZXhlY3V0ZXMgc28gdGhhdCBQQUwuTG9hZGVyIGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQuXG4vLyBUaGVyZSBhcmUgc2V2ZXJhbCB0cmlja3kgcG9pbnRzIHdvcnRoIG5vdGljaW5nLlxuLy8gXG4vLyBXZSBkb24ndCBhZGQgYXVyZWxpYS1sb2FkZXItd2VicGFjayBpdHNlbGYgYXMgYW4gZW50cnkgcG9pbnQgKHVzZWQgdG8gdW50aWwgMi4wIFJDMilcbi8vIGJlY2F1c2UgaXQgKHRyYW5zaXRpdmVseSkgYnJpbmdzIHRvbyBtdWNoIGJhZ2FnZSB3aXRoIGl0c2VsZiwgbW9zdCBub3RhYmx5IHBvbHlmaWxscy5cbi8vIFRoaXMgbWFkZSBpdCBzdXBlci1oYXJkIHRvIGFkZCBvdGhlciBwb2x5ZmlsbHMgYmVmb3JlIEF1cmVsaWEncyBhbmQgbGVkIHRvIHZhcmlvdXMgYnVncy5cbi8vXG4vLyBXZSBkb24ndCBhZGQgY3VzdG9tIGNvZGUgaW4gYXVyZWxpYS1wYWwgb3IgYXVyZWxpYS1sb2FkZXIgb3IgYXVyZWxpYS1ib290c3RyYXBwZXIgdG8gZGV0ZWN0XG4vLyB0aGUgV2VicGFjayBlbnZpcm9ubWVudCBhbmQgY29uZmlndXJlIHRoZSBsb2FkZXIgYmVjYXVzZSB0aGV5IG1pZ2h0IGxpdmUgaW4gYSBETEwuXG4vLyBJZiB0aGV5IGRvLCB0aGV5IHdvdWxkIGJyaW5nIGF1cmVsaWEtbG9hZGVyLXdlYnBhY2sgYWxvbmcgaW4gdGhlIERMTCBhbmQgdGhpcyBpcyBhIHNwZWNpYWwgXG4vLyBsaWJyYXJ5IHRoYXQgKmhhcyB0byBiZSBpbiB0aGUgbWFpbiBjaHVuay4qXG4vL1xuLy8gVGhlIG92ZXItY29tcGxpY2F0ZWQgZGVzaWduIEkndmUgc2V0dGxlZCB1cG9uIGluIHRoZSBlbmQgaXMgdG8gdXNlIHRoaXMgc3BlY2lhbCBtb2R1bGVcbi8vIGFzIGFuIGVudHJ5IHBvaW50IHRoYXQgY29uZmlndXJlcyBhdXJlbGlhLWxvYWRlci13ZWJwYWNrLiBJdCBoYXMgbWluaW1hbCBzdGF0aWMgaW1wb3J0czpcbi8vIGp1c3QgYXVyZWxpYS1wYWwsIHdoaWNoIGl0c2VsZiBoYXMgbm8gb3RoZXIgZGVwZW5kZW5jaWVzIGFuZCBkb2Vzbid0IHJ1biBtdWNoIGNvZGUuXG4vLyBJdCBoYWNrcyB0aGUgbG9hZGVyIGZpZWxkIGludG8gYSBnZXR0ZXIgc28gdGhhdCBpdCBjYW4gc3luY2hyb25vdXNseSBsb2FkIGF1cmVsaWEtbG9hZGVyLXdlYnBhY2tcbi8vIGp1c3QgaW4gdGltZSB3aGVuIGl0IGlzIGRlbWFuZGVkIGJ5IGF1cmVsaWEtYm9vdHN0cmFwcGVyLlxuLy8gVGhpcyBlbmFibGVzIHVzZXJzIHRvIGxvYWQgcG9seWZpbGxzIGJlZm9yZSBhdXJlbGlhLWxvYWRlci13ZWJwYWNrIGlzIGFjdHVhbGx5IGxvYWRlZC5cblxuaW1wb3J0IHsgUExBVEZPUk0gfSBmcm9tIFwiYXVyZWxpYS1wYWxcIjtcblxudmFyIExvYWRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFBMQVRGT1JNLCBcIkxvYWRlclwiLCB7XG4gIGdldDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIExvYWRlciB8fCAoTG9hZGVyID0gcmVxdWlyZShcImF1cmVsaWEtbG9hZGVyLXdlYnBhY2tcIikuV2VicGFja0xvYWRlcik7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICBMb2FkZXIgPSB2YWx1ZTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///157\n")},158:function(module,exports,__webpack_require__){eval('!function(e,t){ true?module.exports=t():undefined}(this,function(){return function(e){function t(o){if(n[o])return n[o].exports;var i=n[o]={exports:{},id:o,loaded:!1};return e[o].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="dist/",t(0)}([function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}var i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},r=n(1),a=(o(r),n(6)),u=o(a),c=n(7),f=o(c),s=n(8),d=o(s),l=n(9),p=o(l),m=n(10),b=o(m),v=n(11),y=o(v),g=n(14),h=o(g),w=[],k=!1,x=document.all&&!window.atob,j={offset:120,delay:0,easing:"ease",duration:400,disable:!1,once:!1,startEvent:"DOMContentLoaded"},O=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(e&&(k=!0),k)return w=(0,y.default)(w,j),(0,b.default)(w,j.once),w},S=function(){w=(0,h.default)(),O()},_=function(){w.forEach(function(e,t){e.node.removeAttribute("data-aos"),e.node.removeAttribute("data-aos-easing"),e.node.removeAttribute("data-aos-duration"),e.node.removeAttribute("data-aos-delay")})},E=function(e){return e===!0||"mobile"===e&&p.default.mobile()||"phone"===e&&p.default.phone()||"tablet"===e&&p.default.tablet()||"function"==typeof e&&e()===!0},z=function(e){return j=i(j,e),w=(0,h.default)(),E(j.disable)||x?_():(document.querySelector("body").setAttribute("data-aos-easing",j.easing),document.querySelector("body").setAttribute("data-aos-duration",j.duration),document.querySelector("body").setAttribute("data-aos-delay",j.delay),"DOMContentLoaded"===j.startEvent&&["complete","interactive"].indexOf(document.readyState)>-1?O(!0):"load"===j.startEvent?window.addEventListener(j.startEvent,function(){O(!0)}):document.addEventListener(j.startEvent,function(){O(!0)}),window.addEventListener("resize",(0,f.default)(O,50,!0)),window.addEventListener("orientationchange",(0,f.default)(O,50,!0)),window.addEventListener("scroll",(0,u.default)(function(){(0,b.default)(w,j.once)},99)),document.addEventListener("DOMNodeRemoved",function(e){var t=e.target;t&&1===t.nodeType&&t.hasAttribute&&t.hasAttribute("data-aos")&&(0,f.default)(S,50,!0)}),(0,d.default)("[data-aos]",S),w)};e.exports={init:z,refresh:O,refreshHard:S}},function(e,t){},,,,,function(e,t){(function(t){"use strict";function n(e,t,n){function o(t){var n=b,o=v;return b=v=void 0,k=t,g=e.apply(o,n)}function r(e){return k=e,h=setTimeout(s,t),S?o(e):g}function a(e){var n=e-w,o=e-k,i=t-n;return _?j(i,y-o):i}function c(e){var n=e-w,o=e-k;return void 0===w||n>=t||n<0||_&&o>=y}function s(){var e=O();return c(e)?d(e):void(h=setTimeout(s,a(e)))}function d(e){return h=void 0,E&&b?o(e):(b=v=void 0,g)}function l(){void 0!==h&&clearTimeout(h),k=0,b=w=v=h=void 0}function p(){return void 0===h?g:d(O())}function m(){var e=O(),n=c(e);if(b=arguments,v=this,w=e,n){if(void 0===h)return r(w);if(_)return h=setTimeout(s,t),o(w)}return void 0===h&&(h=setTimeout(s,t)),g}var b,v,y,g,h,w,k=0,S=!1,_=!1,E=!0;if("function"!=typeof e)throw new TypeError(f);return t=u(t)||0,i(n)&&(S=!!n.leading,_="maxWait"in n,y=_?x(u(n.maxWait)||0,t):y,E="trailing"in n?!!n.trailing:E),m.cancel=l,m.flush=p,m}function o(e,t,o){var r=!0,a=!0;if("function"!=typeof e)throw new TypeError(f);return i(o)&&(r="leading"in o?!!o.leading:r,a="trailing"in o?!!o.trailing:a),n(e,t,{leading:r,maxWait:t,trailing:a})}function i(e){var t="undefined"==typeof e?"undefined":c(e);return!!e&&("object"==t||"function"==t)}function r(e){return!!e&&"object"==("undefined"==typeof e?"undefined":c(e))}function a(e){return"symbol"==("undefined"==typeof e?"undefined":c(e))||r(e)&&k.call(e)==d}function u(e){if("number"==typeof e)return e;if(a(e))return s;if(i(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=i(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(l,"");var n=m.test(e);return n||b.test(e)?v(e.slice(2),n?2:8):p.test(e)?s:+e}var c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},f="Expected a function",s=NaN,d="[object Symbol]",l=/^\\s+|\\s+$/g,p=/^[-+]0x[0-9a-f]+$/i,m=/^0b[01]+$/i,b=/^0o[0-7]+$/i,v=parseInt,y="object"==("undefined"==typeof t?"undefined":c(t))&&t&&t.Object===Object&&t,g="object"==("undefined"==typeof self?"undefined":c(self))&&self&&self.Object===Object&&self,h=y||g||Function("return this")(),w=Object.prototype,k=w.toString,x=Math.max,j=Math.min,O=function(){return h.Date.now()};e.exports=o}).call(t,function(){return this}())},function(e,t){(function(t){"use strict";function n(e,t,n){function i(t){var n=b,o=v;return b=v=void 0,O=t,g=e.apply(o,n)}function r(e){return O=e,h=setTimeout(s,t),S?i(e):g}function u(e){var n=e-w,o=e-O,i=t-n;return _?x(i,y-o):i}function f(e){var n=e-w,o=e-O;return void 0===w||n>=t||n<0||_&&o>=y}function s(){var e=j();return f(e)?d(e):void(h=setTimeout(s,u(e)))}function d(e){return h=void 0,E&&b?i(e):(b=v=void 0,g)}function l(){void 0!==h&&clearTimeout(h),O=0,b=w=v=h=void 0}function p(){return void 0===h?g:d(j())}function m(){var e=j(),n=f(e);if(b=arguments,v=this,w=e,n){if(void 0===h)return r(w);if(_)return h=setTimeout(s,t),i(w)}return void 0===h&&(h=setTimeout(s,t)),g}var b,v,y,g,h,w,O=0,S=!1,_=!1,E=!0;if("function"!=typeof e)throw new TypeError(c);return t=a(t)||0,o(n)&&(S=!!n.leading,_="maxWait"in n,y=_?k(a(n.maxWait)||0,t):y,E="trailing"in n?!!n.trailing:E),m.cancel=l,m.flush=p,m}function o(e){var t="undefined"==typeof e?"undefined":u(e);return!!e&&("object"==t||"function"==t)}function i(e){return!!e&&"object"==("undefined"==typeof e?"undefined":u(e))}function r(e){return"symbol"==("undefined"==typeof e?"undefined":u(e))||i(e)&&w.call(e)==s}function a(e){if("number"==typeof e)return e;if(r(e))return f;if(o(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=o(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(d,"");var n=p.test(e);return n||m.test(e)?b(e.slice(2),n?2:8):l.test(e)?f:+e}var u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},c="Expected a function",f=NaN,s="[object Symbol]",d=/^\\s+|\\s+$/g,l=/^[-+]0x[0-9a-f]+$/i,p=/^0b[01]+$/i,m=/^0o[0-7]+$/i,b=parseInt,v="object"==("undefined"==typeof t?"undefined":u(t))&&t&&t.Object===Object&&t,y="object"==("undefined"==typeof self?"undefined":u(self))&&self&&self.Object===Object&&self,g=v||y||Function("return this")(),h=Object.prototype,w=h.toString,k=Math.max,x=Math.min,j=function(){return g.Date.now()};e.exports=n}).call(t,function(){return this}())},function(e,t){"use strict";function n(e,t){a.push({selector:e,fn:t}),!u&&r&&(u=new r(o),u.observe(i.documentElement,{childList:!0,subtree:!0,removedNodes:!0})),o()}function o(){for(var e,t,n=0,o=a.length;n<o;n++){e=a[n],t=i.querySelectorAll(e.selector);for(var r,u=0,c=t.length;u<c;u++)r=t[u],r.ready||(r.ready=!0,e.fn.call(r,r))}}Object.defineProperty(t,"__esModule",{value:!0});var i=window.document,r=window.MutationObserver||window.WebKitMutationObserver,a=[],u=void 0;t.default=n},function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(){return navigator.userAgent||navigator.vendor||window.opera||""}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,n,o){return n&&e(t.prototype,n),o&&e(t,o),t}}(),r=/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i,a=/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i,u=/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i,c=/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i,f=function(){function e(){n(this,e)}return i(e,[{key:"phone",value:function(){var e=o();return!(!r.test(e)&&!a.test(e.substr(0,4)))}},{key:"mobile",value:function(){var e=o();return!(!u.test(e)&&!c.test(e.substr(0,4)))}},{key:"tablet",value:function(){return this.mobile()&&!this.phone()}}]),e}();t.default=new f},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(e,t,n){var o=e.node.getAttribute("data-aos-once");t>e.position?e.node.classList.add("aos-animate"):"undefined"!=typeof o&&("false"===o||!n&&"true"!==o)&&e.node.classList.remove("aos-animate")},o=function(e,t){var o=window.pageYOffset,i=window.innerHeight;e.forEach(function(e,r){n(e,i+o,t)})};t.default=o},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=n(12),r=o(i),a=function(e,t){return e.forEach(function(e,n){e.node.classList.add("aos-init"),e.position=(0,r.default)(e.node,t.offset)}),e};t.default=a},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=n(13),r=o(i),a=function(e,t){var n=0,o=0,i=window.innerHeight,a={offset:e.getAttribute("data-aos-offset"),anchor:e.getAttribute("data-aos-anchor"),anchorPlacement:e.getAttribute("data-aos-anchor-placement")};switch(a.offset&&!isNaN(a.offset)&&(o=parseInt(a.offset)),a.anchor&&document.querySelectorAll(a.anchor)&&(e=document.querySelectorAll(a.anchor)[0]),n=(0,r.default)(e).top,a.anchorPlacement){case"top-bottom":break;case"center-bottom":n+=e.offsetHeight/2;break;case"bottom-bottom":n+=e.offsetHeight;break;case"top-center":n+=i/2;break;case"bottom-center":n+=i/2+e.offsetHeight;break;case"center-center":n+=i/2+e.offsetHeight/2;break;case"top-top":n+=i;break;case"bottom-top":n+=e.offsetHeight+i;break;case"center-top":n+=e.offsetHeight/2+i}return a.anchorPlacement||a.offset||isNaN(t)||(o=t),n+o};t.default=a},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(e){for(var t=0,n=0;e&&!isNaN(e.offsetLeft)&&!isNaN(e.offsetTop);)t+=e.offsetLeft-("BODY"!=e.tagName?e.scrollLeft:0),n+=e.offsetTop-("BODY"!=e.tagName?e.scrollTop:0),e=e.offsetParent;return{top:n,left:t}};t.default=n},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(e){e=e||document.querySelectorAll("[data-aos]");var t=[];return[].forEach.call(e,function(e,n){t.push({node:e})}),t};t.default=n}])});\n//# sourceMappingURL=aos.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW9zL2Rpc3QvYW9zLmpzP2Y1YWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFpRCxvQkFBb0IsU0FBcUcsQ0FBQyxpQkFBaUIsbUJBQW1CLGNBQWMsNEJBQTRCLFlBQVksVUFBVSxpQkFBaUIsZ0VBQWdFLFNBQVMsb0NBQW9DLGtCQUFrQixhQUFhLGNBQWMsMEJBQTBCLFdBQVcsaUNBQWlDLFlBQVksbUJBQW1CLEtBQUssbUJBQW1CLHNFQUFzRSxTQUFTLDhKQUE4SiwrRkFBK0YsY0FBYyw4REFBOEQscUVBQXFFLGNBQWMsc0JBQXNCLGNBQWMsd0JBQXdCLGtLQUFrSyxFQUFFLGVBQWUsa0pBQWtKLGVBQWUsMmJBQTJiLE1BQU0sb0RBQW9ELE1BQU0seUxBQXlMLHdCQUF3Qiw2REFBNkQsZUFBZSxzRkFBc0Ysb0NBQW9DLFdBQVcsZ0NBQWdDLGdCQUFnQixtQkFBbUIsYUFBYSxhQUFhLGtCQUFrQixjQUFjLFlBQVkscUNBQXFDLGNBQWMsc0NBQXNDLGNBQWMsc0JBQXNCLG9CQUFvQixjQUFjLGdCQUFnQixzQ0FBc0MsYUFBYSxVQUFVLDRDQUE0QyxjQUFjLHlDQUF5QyxhQUFhLCtDQUErQyxhQUFhLDJCQUEyQixhQUFhLGlCQUFpQiw2QkFBNkIsMEJBQTBCLG1DQUFtQyx5Q0FBeUMsbUNBQW1DLCtDQUErQyx5SUFBeUksa0JBQWtCLGNBQWMsK0NBQStDLG9GQUFvRiwrQkFBK0IsRUFBRSxjQUFjLDZDQUE2Qyx3Q0FBd0MsY0FBYyw4REFBOEQsY0FBYyw2RUFBNkUsY0FBYywrQkFBK0IsaUJBQWlCLFNBQVMsaURBQWlELGNBQWMsd0NBQXdDLGtCQUFrQixnQkFBZ0IsdURBQXVELDhFQUE4RSxnQkFBZ0IsYUFBYSxvR0FBb0csbVpBQW1aLHFCQUFxQixZQUFZLG9CQUFvQixZQUFZLElBQUksZUFBZSxhQUFhLGFBQWEsa0JBQWtCLGNBQWMsWUFBWSxxQ0FBcUMsY0FBYyxzQ0FBc0MsY0FBYyxzQkFBc0Isb0JBQW9CLGNBQWMsZ0JBQWdCLHNDQUFzQyxhQUFhLFVBQVUsNENBQTRDLGNBQWMseUNBQXlDLGFBQWEsK0NBQStDLGFBQWEsMkJBQTJCLGFBQWEsaUJBQWlCLDZCQUE2QiwwQkFBMEIsbUNBQW1DLHlDQUF5QyxtQ0FBbUMsK0NBQStDLHlJQUF5SSxjQUFjLDZDQUE2Qyx3Q0FBd0MsY0FBYyw4REFBOEQsY0FBYyw2RUFBNkUsY0FBYywrQkFBK0IsaUJBQWlCLFNBQVMsaURBQWlELGNBQWMsd0NBQXdDLGtCQUFrQixnQkFBZ0IsdURBQXVELDhFQUE4RSxnQkFBZ0IsYUFBYSxvR0FBb0csbVpBQW1aLHFCQUFxQixZQUFZLG9CQUFvQixZQUFZLElBQUksZUFBZSxhQUFhLGdCQUFnQixRQUFRLGdCQUFnQixrREFBa0Qsd0NBQXdDLE9BQU8sYUFBYSwyQkFBMkIsSUFBSSxLQUFLLHdDQUF3Qyx5QkFBeUIsSUFBSSxpREFBaUQsc0NBQXNDLFNBQVMsRUFBRSw2RkFBNkYsWUFBWSxlQUFlLGFBQWEsZ0JBQWdCLDhFQUE4RSxhQUFhLCtEQUErRCxzQ0FBc0MsU0FBUyxFQUFFLGlCQUFpQixnQkFBZ0IsWUFBWSxXQUFXLEtBQUssV0FBVywrR0FBK0csdUJBQXVCLHdDQUF3Qyw2ekhBQTZ6SCxhQUFhLFVBQVUsYUFBYSw2QkFBNkIsVUFBVSw2Q0FBNkMsRUFBRSw4QkFBOEIsVUFBVSw2Q0FBNkMsRUFBRSw4QkFBOEIscUNBQXFDLEtBQUssR0FBRyxnQkFBZ0IsZUFBZSxhQUFhLHNDQUFzQyxTQUFTLEVBQUUsc0JBQXNCLDJDQUEyQyw4SUFBOEksaUJBQWlCLDhDQUE4Qyx3QkFBd0IsV0FBVyxHQUFHLFlBQVksaUJBQWlCLGFBQWEsY0FBYywwQkFBMEIsV0FBVyxzQ0FBc0MsU0FBUyxFQUFFLG1DQUFtQywrQkFBK0IsMkVBQTJFLEtBQUssWUFBWSxpQkFBaUIsYUFBYSxjQUFjLDBCQUEwQixXQUFXLHNDQUFzQyxTQUFTLEVBQUUsbUNBQW1DLG9DQUFvQywrSUFBK0ksOExBQThMLHVCQUF1Qix3Q0FBd0MsTUFBTSxzQ0FBc0MsTUFBTSx3QkFBd0IsTUFBTSwwQ0FBMEMsTUFBTSw0Q0FBNEMsTUFBTSxtQkFBbUIsTUFBTSxxQ0FBcUMsTUFBTSx1Q0FBdUMseURBQXlELFlBQVksZUFBZSxhQUFhLHNDQUFzQyxTQUFTLEVBQUUsa0JBQWtCLGdCQUFnQiw2Q0FBNkMsc0hBQXNILE9BQU8sZUFBZSxZQUFZLGVBQWUsYUFBYSxzQ0FBc0MsU0FBUyxFQUFFLGtCQUFrQiw2Q0FBNkMsU0FBUyxzQ0FBc0MsUUFBUSxPQUFPLEVBQUUsS0FBSyxZQUFZLEdBQUc7QUFDbDRiIiwiZmlsZSI6IjE1OC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLHQpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPXQoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtdLHQpOlwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHMuQU9TPXQoKTplLkFPUz10KCl9KHRoaXMsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChvKXtpZihuW29dKXJldHVybiBuW29dLmV4cG9ydHM7dmFyIGk9bltvXT17ZXhwb3J0czp7fSxpZDpvLGxvYWRlZDohMX07cmV0dXJuIGVbb10uY2FsbChpLmV4cG9ydHMsaSxpLmV4cG9ydHMsdCksaS5sb2FkZWQ9ITAsaS5leHBvcnRzfXZhciBuPXt9O3JldHVybiB0Lm09ZSx0LmM9bix0LnA9XCJkaXN0L1wiLHQoMCl9KFtmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dmFyIGk9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgbyBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLG8pJiYoZVtvXT1uW29dKX1yZXR1cm4gZX0scj1uKDEpLGE9KG8ociksbig2KSksdT1vKGEpLGM9big3KSxmPW8oYykscz1uKDgpLGQ9byhzKSxsPW4oOSkscD1vKGwpLG09bigxMCksYj1vKG0pLHY9bigxMSkseT1vKHYpLGc9bigxNCksaD1vKGcpLHc9W10saz0hMSx4PWRvY3VtZW50LmFsbCYmIXdpbmRvdy5hdG9iLGo9e29mZnNldDoxMjAsZGVsYXk6MCxlYXNpbmc6XCJlYXNlXCIsZHVyYXRpb246NDAwLGRpc2FibGU6ITEsb25jZTohMSxzdGFydEV2ZW50OlwiRE9NQ29udGVudExvYWRlZFwifSxPPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtpZihlJiYoaz0hMCksaylyZXR1cm4gdz0oMCx5LmRlZmF1bHQpKHcsaiksKDAsYi5kZWZhdWx0KSh3LGoub25jZSksd30sUz1mdW5jdGlvbigpe3c9KDAsaC5kZWZhdWx0KSgpLE8oKX0sXz1mdW5jdGlvbigpe3cuZm9yRWFjaChmdW5jdGlvbihlLHQpe2Uubm9kZS5yZW1vdmVBdHRyaWJ1dGUoXCJkYXRhLWFvc1wiKSxlLm5vZGUucmVtb3ZlQXR0cmlidXRlKFwiZGF0YS1hb3MtZWFzaW5nXCIpLGUubm9kZS5yZW1vdmVBdHRyaWJ1dGUoXCJkYXRhLWFvcy1kdXJhdGlvblwiKSxlLm5vZGUucmVtb3ZlQXR0cmlidXRlKFwiZGF0YS1hb3MtZGVsYXlcIil9KX0sRT1mdW5jdGlvbihlKXtyZXR1cm4gZT09PSEwfHxcIm1vYmlsZVwiPT09ZSYmcC5kZWZhdWx0Lm1vYmlsZSgpfHxcInBob25lXCI9PT1lJiZwLmRlZmF1bHQucGhvbmUoKXx8XCJ0YWJsZXRcIj09PWUmJnAuZGVmYXVsdC50YWJsZXQoKXx8XCJmdW5jdGlvblwiPT10eXBlb2YgZSYmZSgpPT09ITB9LHo9ZnVuY3Rpb24oZSl7cmV0dXJuIGo9aShqLGUpLHc9KDAsaC5kZWZhdWx0KSgpLEUoai5kaXNhYmxlKXx8eD9fKCk6KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJib2R5XCIpLnNldEF0dHJpYnV0ZShcImRhdGEtYW9zLWVhc2luZ1wiLGouZWFzaW5nKSxkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiYm9keVwiKS5zZXRBdHRyaWJ1dGUoXCJkYXRhLWFvcy1kdXJhdGlvblwiLGouZHVyYXRpb24pLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJib2R5XCIpLnNldEF0dHJpYnV0ZShcImRhdGEtYW9zLWRlbGF5XCIsai5kZWxheSksXCJET01Db250ZW50TG9hZGVkXCI9PT1qLnN0YXJ0RXZlbnQmJltcImNvbXBsZXRlXCIsXCJpbnRlcmFjdGl2ZVwiXS5pbmRleE9mKGRvY3VtZW50LnJlYWR5U3RhdGUpPi0xP08oITApOlwibG9hZFwiPT09ai5zdGFydEV2ZW50P3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKGouc3RhcnRFdmVudCxmdW5jdGlvbigpe08oITApfSk6ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihqLnN0YXJ0RXZlbnQsZnVuY3Rpb24oKXtPKCEwKX0pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsKDAsZi5kZWZhdWx0KShPLDUwLCEwKSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJvcmllbnRhdGlvbmNoYW5nZVwiLCgwLGYuZGVmYXVsdCkoTyw1MCwhMCkpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsKDAsdS5kZWZhdWx0KShmdW5jdGlvbigpeygwLGIuZGVmYXVsdCkodyxqLm9uY2UpfSw5OSkpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Ob2RlUmVtb3ZlZFwiLGZ1bmN0aW9uKGUpe3ZhciB0PWUudGFyZ2V0O3QmJjE9PT10Lm5vZGVUeXBlJiZ0Lmhhc0F0dHJpYnV0ZSYmdC5oYXNBdHRyaWJ1dGUoXCJkYXRhLWFvc1wiKSYmKDAsZi5kZWZhdWx0KShTLDUwLCEwKX0pLCgwLGQuZGVmYXVsdCkoXCJbZGF0YS1hb3NdXCIsUyksdyl9O2UuZXhwb3J0cz17aW5pdDp6LHJlZnJlc2g6TyxyZWZyZXNoSGFyZDpTfX0sZnVuY3Rpb24oZSx0KXt9LCwsLCxmdW5jdGlvbihlLHQpeyhmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKGUsdCxuKXtmdW5jdGlvbiBvKHQpe3ZhciBuPWIsbz12O3JldHVybiBiPXY9dm9pZCAwLGs9dCxnPWUuYXBwbHkobyxuKX1mdW5jdGlvbiByKGUpe3JldHVybiBrPWUsaD1zZXRUaW1lb3V0KHMsdCksUz9vKGUpOmd9ZnVuY3Rpb24gYShlKXt2YXIgbj1lLXcsbz1lLWssaT10LW47cmV0dXJuIF8/aihpLHktbyk6aX1mdW5jdGlvbiBjKGUpe3ZhciBuPWUtdyxvPWUtaztyZXR1cm4gdm9pZCAwPT09d3x8bj49dHx8bjwwfHxfJiZvPj15fWZ1bmN0aW9uIHMoKXt2YXIgZT1PKCk7cmV0dXJuIGMoZSk/ZChlKTp2b2lkKGg9c2V0VGltZW91dChzLGEoZSkpKX1mdW5jdGlvbiBkKGUpe3JldHVybiBoPXZvaWQgMCxFJiZiP28oZSk6KGI9dj12b2lkIDAsZyl9ZnVuY3Rpb24gbCgpe3ZvaWQgMCE9PWgmJmNsZWFyVGltZW91dChoKSxrPTAsYj13PXY9aD12b2lkIDB9ZnVuY3Rpb24gcCgpe3JldHVybiB2b2lkIDA9PT1oP2c6ZChPKCkpfWZ1bmN0aW9uIG0oKXt2YXIgZT1PKCksbj1jKGUpO2lmKGI9YXJndW1lbnRzLHY9dGhpcyx3PWUsbil7aWYodm9pZCAwPT09aClyZXR1cm4gcih3KTtpZihfKXJldHVybiBoPXNldFRpbWVvdXQocyx0KSxvKHcpfXJldHVybiB2b2lkIDA9PT1oJiYoaD1zZXRUaW1lb3V0KHMsdCkpLGd9dmFyIGIsdix5LGcsaCx3LGs9MCxTPSExLF89ITEsRT0hMDtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoZik7cmV0dXJuIHQ9dSh0KXx8MCxpKG4pJiYoUz0hIW4ubGVhZGluZyxfPVwibWF4V2FpdFwiaW4gbix5PV8/eCh1KG4ubWF4V2FpdCl8fDAsdCk6eSxFPVwidHJhaWxpbmdcImluIG4/ISFuLnRyYWlsaW5nOkUpLG0uY2FuY2VsPWwsbS5mbHVzaD1wLG19ZnVuY3Rpb24gbyhlLHQsbyl7dmFyIHI9ITAsYT0hMDtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoZik7cmV0dXJuIGkobykmJihyPVwibGVhZGluZ1wiaW4gbz8hIW8ubGVhZGluZzpyLGE9XCJ0cmFpbGluZ1wiaW4gbz8hIW8udHJhaWxpbmc6YSksbihlLHQse2xlYWRpbmc6cixtYXhXYWl0OnQsdHJhaWxpbmc6YX0pfWZ1bmN0aW9uIGkoZSl7dmFyIHQ9XCJ1bmRlZmluZWRcIj09dHlwZW9mIGU/XCJ1bmRlZmluZWRcIjpjKGUpO3JldHVybiEhZSYmKFwib2JqZWN0XCI9PXR8fFwiZnVuY3Rpb25cIj09dCl9ZnVuY3Rpb24gcihlKXtyZXR1cm4hIWUmJlwib2JqZWN0XCI9PShcInVuZGVmaW5lZFwiPT10eXBlb2YgZT9cInVuZGVmaW5lZFwiOmMoZSkpfWZ1bmN0aW9uIGEoZSl7cmV0dXJuXCJzeW1ib2xcIj09KFwidW5kZWZpbmVkXCI9PXR5cGVvZiBlP1widW5kZWZpbmVkXCI6YyhlKSl8fHIoZSkmJmsuY2FsbChlKT09ZH1mdW5jdGlvbiB1KGUpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlKXJldHVybiBlO2lmKGEoZSkpcmV0dXJuIHM7aWYoaShlKSl7dmFyIHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgZS52YWx1ZU9mP2UudmFsdWVPZigpOmU7ZT1pKHQpP3QrXCJcIjp0fWlmKFwic3RyaW5nXCIhPXR5cGVvZiBlKXJldHVybiAwPT09ZT9lOitlO2U9ZS5yZXBsYWNlKGwsXCJcIik7dmFyIG49bS50ZXN0KGUpO3JldHVybiBufHxiLnRlc3QoZSk/dihlLnNsaWNlKDIpLG4/Mjo4KTpwLnRlc3QoZSk/czorZX12YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlwic3ltYm9sXCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT9cInN5bWJvbFwiOnR5cGVvZiBlfSxmPVwiRXhwZWN0ZWQgYSBmdW5jdGlvblwiLHM9TmFOLGQ9XCJbb2JqZWN0IFN5bWJvbF1cIixsPS9eXFxzK3xcXHMrJC9nLHA9L15bLStdMHhbMC05YS1mXSskL2ksbT0vXjBiWzAxXSskL2ksYj0vXjBvWzAtN10rJC9pLHY9cGFyc2VJbnQseT1cIm9iamVjdFwiPT0oXCJ1bmRlZmluZWRcIj09dHlwZW9mIHQ/XCJ1bmRlZmluZWRcIjpjKHQpKSYmdCYmdC5PYmplY3Q9PT1PYmplY3QmJnQsZz1cIm9iamVjdFwiPT0oXCJ1bmRlZmluZWRcIj09dHlwZW9mIHNlbGY/XCJ1bmRlZmluZWRcIjpjKHNlbGYpKSYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsaD15fHxnfHxGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCksdz1PYmplY3QucHJvdG90eXBlLGs9dy50b1N0cmluZyx4PU1hdGgubWF4LGo9TWF0aC5taW4sTz1mdW5jdGlvbigpe3JldHVybiBoLkRhdGUubm93KCl9O2UuZXhwb3J0cz1vfSkuY2FsbCh0LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCkpfSxmdW5jdGlvbihlLHQpeyhmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKGUsdCxuKXtmdW5jdGlvbiBpKHQpe3ZhciBuPWIsbz12O3JldHVybiBiPXY9dm9pZCAwLE89dCxnPWUuYXBwbHkobyxuKX1mdW5jdGlvbiByKGUpe3JldHVybiBPPWUsaD1zZXRUaW1lb3V0KHMsdCksUz9pKGUpOmd9ZnVuY3Rpb24gdShlKXt2YXIgbj1lLXcsbz1lLU8saT10LW47cmV0dXJuIF8/eChpLHktbyk6aX1mdW5jdGlvbiBmKGUpe3ZhciBuPWUtdyxvPWUtTztyZXR1cm4gdm9pZCAwPT09d3x8bj49dHx8bjwwfHxfJiZvPj15fWZ1bmN0aW9uIHMoKXt2YXIgZT1qKCk7cmV0dXJuIGYoZSk/ZChlKTp2b2lkKGg9c2V0VGltZW91dChzLHUoZSkpKX1mdW5jdGlvbiBkKGUpe3JldHVybiBoPXZvaWQgMCxFJiZiP2koZSk6KGI9dj12b2lkIDAsZyl9ZnVuY3Rpb24gbCgpe3ZvaWQgMCE9PWgmJmNsZWFyVGltZW91dChoKSxPPTAsYj13PXY9aD12b2lkIDB9ZnVuY3Rpb24gcCgpe3JldHVybiB2b2lkIDA9PT1oP2c6ZChqKCkpfWZ1bmN0aW9uIG0oKXt2YXIgZT1qKCksbj1mKGUpO2lmKGI9YXJndW1lbnRzLHY9dGhpcyx3PWUsbil7aWYodm9pZCAwPT09aClyZXR1cm4gcih3KTtpZihfKXJldHVybiBoPXNldFRpbWVvdXQocyx0KSxpKHcpfXJldHVybiB2b2lkIDA9PT1oJiYoaD1zZXRUaW1lb3V0KHMsdCkpLGd9dmFyIGIsdix5LGcsaCx3LE89MCxTPSExLF89ITEsRT0hMDtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoYyk7cmV0dXJuIHQ9YSh0KXx8MCxvKG4pJiYoUz0hIW4ubGVhZGluZyxfPVwibWF4V2FpdFwiaW4gbix5PV8/ayhhKG4ubWF4V2FpdCl8fDAsdCk6eSxFPVwidHJhaWxpbmdcImluIG4/ISFuLnRyYWlsaW5nOkUpLG0uY2FuY2VsPWwsbS5mbHVzaD1wLG19ZnVuY3Rpb24gbyhlKXt2YXIgdD1cInVuZGVmaW5lZFwiPT10eXBlb2YgZT9cInVuZGVmaW5lZFwiOnUoZSk7cmV0dXJuISFlJiYoXCJvYmplY3RcIj09dHx8XCJmdW5jdGlvblwiPT10KX1mdW5jdGlvbiBpKGUpe3JldHVybiEhZSYmXCJvYmplY3RcIj09KFwidW5kZWZpbmVkXCI9PXR5cGVvZiBlP1widW5kZWZpbmVkXCI6dShlKSl9ZnVuY3Rpb24gcihlKXtyZXR1cm5cInN5bWJvbFwiPT0oXCJ1bmRlZmluZWRcIj09dHlwZW9mIGU/XCJ1bmRlZmluZWRcIjp1KGUpKXx8aShlKSYmdy5jYWxsKGUpPT1zfWZ1bmN0aW9uIGEoZSl7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpcmV0dXJuIGU7aWYocihlKSlyZXR1cm4gZjtpZihvKGUpKXt2YXIgdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnZhbHVlT2Y/ZS52YWx1ZU9mKCk6ZTtlPW8odCk/dCtcIlwiOnR9aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUpcmV0dXJuIDA9PT1lP2U6K2U7ZT1lLnJlcGxhY2UoZCxcIlwiKTt2YXIgbj1wLnRlc3QoZSk7cmV0dXJuIG58fG0udGVzdChlKT9iKGUuc2xpY2UoMiksbj8yOjgpOmwudGVzdChlKT9mOitlfXZhciB1PVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlP1wic3ltYm9sXCI6dHlwZW9mIGV9LGM9XCJFeHBlY3RlZCBhIGZ1bmN0aW9uXCIsZj1OYU4scz1cIltvYmplY3QgU3ltYm9sXVwiLGQ9L15cXHMrfFxccyskL2csbD0vXlstK10weFswLTlhLWZdKyQvaSxwPS9eMGJbMDFdKyQvaSxtPS9eMG9bMC03XSskL2ksYj1wYXJzZUludCx2PVwib2JqZWN0XCI9PShcInVuZGVmaW5lZFwiPT10eXBlb2YgdD9cInVuZGVmaW5lZFwiOnUodCkpJiZ0JiZ0Lk9iamVjdD09PU9iamVjdCYmdCx5PVwib2JqZWN0XCI9PShcInVuZGVmaW5lZFwiPT10eXBlb2Ygc2VsZj9cInVuZGVmaW5lZFwiOnUoc2VsZikpJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixnPXZ8fHl8fEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKSxoPU9iamVjdC5wcm90b3R5cGUsdz1oLnRvU3RyaW5nLGs9TWF0aC5tYXgseD1NYXRoLm1pbixqPWZ1bmN0aW9uKCl7cmV0dXJuIGcuRGF0ZS5ub3coKX07ZS5leHBvcnRzPW59KS5jYWxsKHQsZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30oKSl9LGZ1bmN0aW9uKGUsdCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbihlLHQpe2EucHVzaCh7c2VsZWN0b3I6ZSxmbjp0fSksIXUmJnImJih1PW5ldyByKG8pLHUub2JzZXJ2ZShpLmRvY3VtZW50RWxlbWVudCx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITAscmVtb3ZlZE5vZGVzOiEwfSkpLG8oKX1mdW5jdGlvbiBvKCl7Zm9yKHZhciBlLHQsbj0wLG89YS5sZW5ndGg7bjxvO24rKyl7ZT1hW25dLHQ9aS5xdWVyeVNlbGVjdG9yQWxsKGUuc2VsZWN0b3IpO2Zvcih2YXIgcix1PTAsYz10Lmxlbmd0aDt1PGM7dSsrKXI9dFt1XSxyLnJlYWR5fHwoci5yZWFkeT0hMCxlLmZuLmNhbGwocixyKSl9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciBpPXdpbmRvdy5kb2N1bWVudCxyPXdpbmRvdy5NdXRhdGlvbk9ic2VydmVyfHx3aW5kb3cuV2ViS2l0TXV0YXRpb25PYnNlcnZlcixhPVtdLHU9dm9pZCAwO3QuZGVmYXVsdD1ufSxmdW5jdGlvbihlLHQpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfWZ1bmN0aW9uIG8oKXtyZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudHx8bmF2aWdhdG9yLnZlbmRvcnx8d2luZG93Lm9wZXJhfHxcIlwifU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgbz10W25dO28uZW51bWVyYWJsZT1vLmVudW1lcmFibGV8fCExLG8uY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIG8mJihvLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxvLmtleSxvKX19cmV0dXJuIGZ1bmN0aW9uKHQsbixvKXtyZXR1cm4gbiYmZSh0LnByb3RvdHlwZSxuKSxvJiZlKHQsbyksdH19KCkscj0vKGFuZHJvaWR8YmJcXGQrfG1lZWdvKS4rbW9iaWxlfGF2YW50Z298YmFkYVxcL3xibGFja2JlcnJ5fGJsYXplcnxjb21wYWx8ZWxhaW5lfGZlbm5lY3xoaXB0b3B8aWVtb2JpbGV8aXAoaG9uZXxvZCl8aXJpc3xraW5kbGV8bGdlIHxtYWVtb3xtaWRwfG1tcHxtb2JpbGUuK2ZpcmVmb3h8bmV0ZnJvbnR8b3BlcmEgbShvYnxpbilpfHBhbG0oIG9zKT98cGhvbmV8cChpeGl8cmUpXFwvfHBsdWNrZXJ8cG9ja2V0fHBzcHxzZXJpZXMoNHw2KTB8c3ltYmlhbnx0cmVvfHVwXFwuKGJyb3dzZXJ8bGluayl8dm9kYWZvbmV8d2FwfHdpbmRvd3MgY2V8eGRhfHhpaW5vL2ksYT0vMTIwN3w2MzEwfDY1OTB8M2dzb3w0dGhwfDUwWzEtNl1pfDc3MHN8ODAyc3xhIHdhfGFiYWN8YWMoZXJ8b298c1xcLSl8YWkoa298cm4pfGFsKGF2fGNhfGNvKXxhbW9pfGFuKGV4fG55fHl3KXxhcHR1fGFyKGNofGdvKXxhcyh0ZXx1cyl8YXR0d3xhdShkaXxcXC1tfHIgfHMgKXxhdmFufGJlKGNrfGxsfG5xKXxiaShsYnxyZCl8YmwoYWN8YXopfGJyKGV8dil3fGJ1bWJ8YndcXC0obnx1KXxjNTVcXC98Y2FwaXxjY3dhfGNkbVxcLXxjZWxsfGNodG18Y2xkY3xjbWRcXC18Y28obXB8bmQpfGNyYXd8ZGEoaXR8bGx8bmcpfGRidGV8ZGNcXC1zfGRldml8ZGljYXxkbW9ifGRvKGN8cClvfGRzKDEyfFxcLWQpfGVsKDQ5fGFpKXxlbShsMnx1bCl8ZXIoaWN8azApfGVzbDh8ZXooWzQtN10wfG9zfHdhfHplKXxmZXRjfGZseShcXC18Xyl8ZzEgdXxnNTYwfGdlbmV8Z2ZcXC01fGdcXC1tb3xnbyhcXC53fG9kKXxncihhZHx1bil8aGFpZXxoY2l0fGhkXFwtKG18cHx0KXxoZWlcXC18aGkocHR8dGEpfGhwKCBpfGlwKXxoc1xcLWN8aHQoYyhcXC18IHxffGF8Z3xwfHN8dCl8dHApfGh1KGF3fHRjKXxpXFwtKDIwfGdvfG1hKXxpMjMwfGlhYyggfFxcLXxcXC8pfGlicm98aWRlYXxpZzAxfGlrb218aW0xa3xpbm5vfGlwYXF8aXJpc3xqYSh0fHYpYXxqYnJvfGplbXV8amlnc3xrZGRpfGtlaml8a2d0KCB8XFwvKXxrbG9ufGtwdCB8a3djXFwtfGt5byhjfGspfGxlKG5vfHhpKXxsZyggZ3xcXC8oa3xsfHUpfDUwfDU0fFxcLVthLXddKXxsaWJ3fGx5bnh8bTFcXC13fG0zZ2F8bTUwXFwvfG1hKHRlfHVpfHhvKXxtYygwMXwyMXxjYSl8bVxcLWNyfG1lKHJjfHJpKXxtaShvOHxvYXx0cyl8bW1lZnxtbygwMXwwMnxiaXxkZXxkb3x0KFxcLXwgfG98dil8enopfG10KDUwfHAxfHYgKXxtd2JwfG15d2F8bjEwWzAtMl18bjIwWzItM118bjMwKDB8Mil8bjUwKDB8Mnw1KXxuNygwKDB8MSl8MTApfG5lKChjfG0pXFwtfG9ufHRmfHdmfHdnfHd0KXxub2soNnxpKXxuenBofG8yaW18b3AodGl8d3YpfG9yYW58b3dnMXxwODAwfHBhbihhfGR8dCl8cGR4Z3xwZygxM3xcXC0oWzEtOF18YykpfHBoaWx8cGlyZXxwbChheXx1Yyl8cG5cXC0yfHBvKGNrfHJ0fHNlKXxwcm94fHBzaW98cHRcXC1nfHFhXFwtYXxxYygwN3wxMnwyMXwzMnw2MHxcXC1bMi03XXxpXFwtKXxxdGVrfHIzODB8cjYwMHxyYWtzfHJpbTl8cm8odmV8em8pfHM1NVxcL3xzYShnZXxtYXxtbXxtc3xueXx2YSl8c2MoMDF8aFxcLXxvb3xwXFwtKXxzZGtcXC98c2UoYyhcXC18MHwxKXw0N3xtY3xuZHxyaSl8c2doXFwtfHNoYXJ8c2llKFxcLXxtKXxza1xcLTB8c2woNDV8aWQpfHNtKGFsfGFyfGIzfGl0fHQ1KXxzbyhmdHxueSl8c3AoMDF8aFxcLXx2XFwtfHYgKXxzeSgwMXxtYil8dDIoMTh8NTApfHQ2KDAwfDEwfDE4KXx0YShndHxsayl8dGNsXFwtfHRkZ1xcLXx0ZWwoaXxtKXx0aW1cXC18dFxcLW1vfHRvKHBsfHNoKXx0cyg3MHxtXFwtfG0zfG01KXx0eFxcLTl8dXAoXFwuYnxnMXxzaSl8dXRzdHx2NDAwfHY3NTB8dmVyaXx2aShyZ3x0ZSl8dmsoNDB8NVswLTNdfFxcLXYpfHZtNDB8dm9kYXx2dWxjfHZ4KDUyfDUzfDYwfDYxfDcwfDgwfDgxfDgzfDg1fDk4KXx3M2MoXFwtfCApfHdlYmN8d2hpdHx3aShnIHxuY3xudyl8d21sYnx3b251fHg3MDB8eWFzXFwtfHlvdXJ8emV0b3x6dGVcXC0vaSx1PS8oYW5kcm9pZHxiYlxcZCt8bWVlZ28pLittb2JpbGV8YXZhbnRnb3xiYWRhXFwvfGJsYWNrYmVycnl8YmxhemVyfGNvbXBhbHxlbGFpbmV8ZmVubmVjfGhpcHRvcHxpZW1vYmlsZXxpcChob25lfG9kKXxpcmlzfGtpbmRsZXxsZ2UgfG1hZW1vfG1pZHB8bW1wfG1vYmlsZS4rZmlyZWZveHxuZXRmcm9udHxvcGVyYSBtKG9ifGluKWl8cGFsbSggb3MpP3xwaG9uZXxwKGl4aXxyZSlcXC98cGx1Y2tlcnxwb2NrZXR8cHNwfHNlcmllcyg0fDYpMHxzeW1iaWFufHRyZW98dXBcXC4oYnJvd3NlcnxsaW5rKXx2b2RhZm9uZXx3YXB8d2luZG93cyBjZXx4ZGF8eGlpbm98YW5kcm9pZHxpcGFkfHBsYXlib29rfHNpbGsvaSxjPS8xMjA3fDYzMTB8NjU5MHwzZ3NvfDR0aHB8NTBbMS02XWl8Nzcwc3w4MDJzfGEgd2F8YWJhY3xhYyhlcnxvb3xzXFwtKXxhaShrb3xybil8YWwoYXZ8Y2F8Y28pfGFtb2l8YW4oZXh8bnl8eXcpfGFwdHV8YXIoY2h8Z28pfGFzKHRlfHVzKXxhdHR3fGF1KGRpfFxcLW18ciB8cyApfGF2YW58YmUoY2t8bGx8bnEpfGJpKGxifHJkKXxibChhY3xheil8YnIoZXx2KXd8YnVtYnxid1xcLShufHUpfGM1NVxcL3xjYXBpfGNjd2F8Y2RtXFwtfGNlbGx8Y2h0bXxjbGRjfGNtZFxcLXxjbyhtcHxuZCl8Y3Jhd3xkYShpdHxsbHxuZyl8ZGJ0ZXxkY1xcLXN8ZGV2aXxkaWNhfGRtb2J8ZG8oY3xwKW98ZHMoMTJ8XFwtZCl8ZWwoNDl8YWkpfGVtKGwyfHVsKXxlcihpY3xrMCl8ZXNsOHxleihbNC03XTB8b3N8d2F8emUpfGZldGN8Zmx5KFxcLXxfKXxnMSB1fGc1NjB8Z2VuZXxnZlxcLTV8Z1xcLW1vfGdvKFxcLnd8b2QpfGdyKGFkfHVuKXxoYWllfGhjaXR8aGRcXC0obXxwfHQpfGhlaVxcLXxoaShwdHx0YSl8aHAoIGl8aXApfGhzXFwtY3xodChjKFxcLXwgfF98YXxnfHB8c3x0KXx0cCl8aHUoYXd8dGMpfGlcXC0oMjB8Z298bWEpfGkyMzB8aWFjKCB8XFwtfFxcLyl8aWJyb3xpZGVhfGlnMDF8aWtvbXxpbTFrfGlubm98aXBhcXxpcmlzfGphKHR8dilhfGpicm98amVtdXxqaWdzfGtkZGl8a2VqaXxrZ3QoIHxcXC8pfGtsb258a3B0IHxrd2NcXC18a3lvKGN8ayl8bGUobm98eGkpfGxnKCBnfFxcLyhrfGx8dSl8NTB8NTR8XFwtW2Etd10pfGxpYnd8bHlueHxtMVxcLXd8bTNnYXxtNTBcXC98bWEodGV8dWl8eG8pfG1jKDAxfDIxfGNhKXxtXFwtY3J8bWUocmN8cmkpfG1pKG84fG9hfHRzKXxtbWVmfG1vKDAxfDAyfGJpfGRlfGRvfHQoXFwtfCB8b3x2KXx6eil8bXQoNTB8cDF8diApfG13YnB8bXl3YXxuMTBbMC0yXXxuMjBbMi0zXXxuMzAoMHwyKXxuNTAoMHwyfDUpfG43KDAoMHwxKXwxMCl8bmUoKGN8bSlcXC18b258dGZ8d2Z8d2d8d3QpfG5vayg2fGkpfG56cGh8bzJpbXxvcCh0aXx3dil8b3Jhbnxvd2cxfHA4MDB8cGFuKGF8ZHx0KXxwZHhnfHBnKDEzfFxcLShbMS04XXxjKSl8cGhpbHxwaXJlfHBsKGF5fHVjKXxwblxcLTJ8cG8oY2t8cnR8c2UpfHByb3h8cHNpb3xwdFxcLWd8cWFcXC1hfHFjKDA3fDEyfDIxfDMyfDYwfFxcLVsyLTddfGlcXC0pfHF0ZWt8cjM4MHxyNjAwfHJha3N8cmltOXxybyh2ZXx6byl8czU1XFwvfHNhKGdlfG1hfG1tfG1zfG55fHZhKXxzYygwMXxoXFwtfG9vfHBcXC0pfHNka1xcL3xzZShjKFxcLXwwfDEpfDQ3fG1jfG5kfHJpKXxzZ2hcXC18c2hhcnxzaWUoXFwtfG0pfHNrXFwtMHxzbCg0NXxpZCl8c20oYWx8YXJ8YjN8aXR8dDUpfHNvKGZ0fG55KXxzcCgwMXxoXFwtfHZcXC18diApfHN5KDAxfG1iKXx0MigxOHw1MCl8dDYoMDB8MTB8MTgpfHRhKGd0fGxrKXx0Y2xcXC18dGRnXFwtfHRlbChpfG0pfHRpbVxcLXx0XFwtbW98dG8ocGx8c2gpfHRzKDcwfG1cXC18bTN8bTUpfHR4XFwtOXx1cChcXC5ifGcxfHNpKXx1dHN0fHY0MDB8djc1MHx2ZXJpfHZpKHJnfHRlKXx2ayg0MHw1WzAtM118XFwtdil8dm00MHx2b2RhfHZ1bGN8dngoNTJ8NTN8NjB8NjF8NzB8ODB8ODF8ODN8ODV8OTgpfHczYyhcXC18ICl8d2ViY3x3aGl0fHdpKGcgfG5jfG53KXx3bWxifHdvbnV8eDcwMHx5YXNcXC18eW91cnx6ZXRvfHp0ZVxcLS9pLGY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7bih0aGlzLGUpfXJldHVybiBpKGUsW3trZXk6XCJwaG9uZVwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9bygpO3JldHVybiEoIXIudGVzdChlKSYmIWEudGVzdChlLnN1YnN0cigwLDQpKSl9fSx7a2V5OlwibW9iaWxlXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1vKCk7cmV0dXJuISghdS50ZXN0KGUpJiYhYy50ZXN0KGUuc3Vic3RyKDAsNCkpKX19LHtrZXk6XCJ0YWJsZXRcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1vYmlsZSgpJiYhdGhpcy5waG9uZSgpfX1dKSxlfSgpO3QuZGVmYXVsdD1uZXcgZn0sZnVuY3Rpb24oZSx0KXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgbj1mdW5jdGlvbihlLHQsbil7dmFyIG89ZS5ub2RlLmdldEF0dHJpYnV0ZShcImRhdGEtYW9zLW9uY2VcIik7dD5lLnBvc2l0aW9uP2Uubm9kZS5jbGFzc0xpc3QuYWRkKFwiYW9zLWFuaW1hdGVcIik6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIG8mJihcImZhbHNlXCI9PT1vfHwhbiYmXCJ0cnVlXCIhPT1vKSYmZS5ub2RlLmNsYXNzTGlzdC5yZW1vdmUoXCJhb3MtYW5pbWF0ZVwiKX0sbz1mdW5jdGlvbihlLHQpe3ZhciBvPXdpbmRvdy5wYWdlWU9mZnNldCxpPXdpbmRvdy5pbm5lckhlaWdodDtlLmZvckVhY2goZnVuY3Rpb24oZSxyKXtuKGUsaStvLHQpfSl9O3QuZGVmYXVsdD1vfSxmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIGk9bigxMikscj1vKGkpLGE9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7ZS5ub2RlLmNsYXNzTGlzdC5hZGQoXCJhb3MtaW5pdFwiKSxlLnBvc2l0aW9uPSgwLHIuZGVmYXVsdCkoZS5ub2RlLHQub2Zmc2V0KX0pLGV9O3QuZGVmYXVsdD1hfSxmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIGk9bigxMykscj1vKGkpLGE9ZnVuY3Rpb24oZSx0KXt2YXIgbj0wLG89MCxpPXdpbmRvdy5pbm5lckhlaWdodCxhPXtvZmZzZXQ6ZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLWFvcy1vZmZzZXRcIiksYW5jaG9yOmUuZ2V0QXR0cmlidXRlKFwiZGF0YS1hb3MtYW5jaG9yXCIpLGFuY2hvclBsYWNlbWVudDplLmdldEF0dHJpYnV0ZShcImRhdGEtYW9zLWFuY2hvci1wbGFjZW1lbnRcIil9O3N3aXRjaChhLm9mZnNldCYmIWlzTmFOKGEub2Zmc2V0KSYmKG89cGFyc2VJbnQoYS5vZmZzZXQpKSxhLmFuY2hvciYmZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChhLmFuY2hvcikmJihlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYS5hbmNob3IpWzBdKSxuPSgwLHIuZGVmYXVsdCkoZSkudG9wLGEuYW5jaG9yUGxhY2VtZW50KXtjYXNlXCJ0b3AtYm90dG9tXCI6YnJlYWs7Y2FzZVwiY2VudGVyLWJvdHRvbVwiOm4rPWUub2Zmc2V0SGVpZ2h0LzI7YnJlYWs7Y2FzZVwiYm90dG9tLWJvdHRvbVwiOm4rPWUub2Zmc2V0SGVpZ2h0O2JyZWFrO2Nhc2VcInRvcC1jZW50ZXJcIjpuKz1pLzI7YnJlYWs7Y2FzZVwiYm90dG9tLWNlbnRlclwiOm4rPWkvMitlLm9mZnNldEhlaWdodDticmVhaztjYXNlXCJjZW50ZXItY2VudGVyXCI6bis9aS8yK2Uub2Zmc2V0SGVpZ2h0LzI7YnJlYWs7Y2FzZVwidG9wLXRvcFwiOm4rPWk7YnJlYWs7Y2FzZVwiYm90dG9tLXRvcFwiOm4rPWUub2Zmc2V0SGVpZ2h0K2k7YnJlYWs7Y2FzZVwiY2VudGVyLXRvcFwiOm4rPWUub2Zmc2V0SGVpZ2h0LzIraX1yZXR1cm4gYS5hbmNob3JQbGFjZW1lbnR8fGEub2Zmc2V0fHxpc05hTih0KXx8KG89dCksbitvfTt0LmRlZmF1bHQ9YX0sZnVuY3Rpb24oZSx0KXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgbj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxuPTA7ZSYmIWlzTmFOKGUub2Zmc2V0TGVmdCkmJiFpc05hTihlLm9mZnNldFRvcCk7KXQrPWUub2Zmc2V0TGVmdC0oXCJCT0RZXCIhPWUudGFnTmFtZT9lLnNjcm9sbExlZnQ6MCksbis9ZS5vZmZzZXRUb3AtKFwiQk9EWVwiIT1lLnRhZ05hbWU/ZS5zY3JvbGxUb3A6MCksZT1lLm9mZnNldFBhcmVudDtyZXR1cm57dG9wOm4sbGVmdDp0fX07dC5kZWZhdWx0PW59LGZ1bmN0aW9uKGUsdCl7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIG49ZnVuY3Rpb24oZSl7ZT1lfHxkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtYW9zXVwiKTt2YXIgdD1bXTtyZXR1cm5bXS5mb3JFYWNoLmNhbGwoZSxmdW5jdGlvbihlLG4pe3QucHVzaCh7bm9kZTplfSl9KSx0fTt0LmRlZmF1bHQ9bn1dKX0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YW9zLmpzLm1hcCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///158\n')},159:function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError("Generator is already executing.");\r\n        while (_) try {\r\n            if (f = 1, y && (t = y[op[0] & 2 ? "return" : op[0] ? "throw" : "next"]) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [0, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_fetch_client_1 = __webpack_require__(12);\r\nvar TreadstoneApi = /** @class */ (function () {\r\n    function TreadstoneApi() {\r\n        this.httpClient = new aurelia_fetch_client_1.HttpClient();\r\n    }\r\n    TreadstoneApi.prototype.fetchProductData = function () {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var httpResponse, productData;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.httpClient.fetch(\'/Resource/GetProductDataJson/\')];\r\n                    case 1:\r\n                        httpResponse = _a.sent();\r\n                        return [4 /*yield*/, httpResponse.json()];\r\n                    case 2:\r\n                        productData = _a.sent();\r\n                        return [2 /*return*/, productData];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    return TreadstoneApi;\r\n}());\r\nexports.TreadstoneApi = TreadstoneApi;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy90cmlwLWZpbmRlci9UcmVhZHN0b25lQXBpLnRzP2FhNjYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBO0FBQ0EsbUNBQW1DLE1BQU0sNkJBQTZCLEVBQUUsWUFBWSxXQUFXLEVBQUU7QUFDakcsa0NBQWtDLE1BQU0saUNBQWlDLEVBQUUsWUFBWSxXQUFXLEVBQUU7QUFDcEcsK0JBQStCLGlFQUFpRSx1QkFBdUIsRUFBRSw0QkFBNEI7QUFDcko7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLGFBQWEsNkJBQTZCLDBCQUEwQixhQUFhLEVBQUUscUJBQXFCO0FBQ3hHLGdCQUFnQixxREFBcUQsb0VBQW9FLGFBQWEsRUFBRTtBQUN4SixzQkFBc0Isc0JBQXNCLHFCQUFxQixHQUFHO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QztBQUN2QyxrQ0FBa0MsU0FBUztBQUMzQyxrQ0FBa0MsV0FBVyxVQUFVO0FBQ3ZELHlDQUF5QyxjQUFjO0FBQ3ZEO0FBQ0EsNkdBQTZHLE9BQU8sVUFBVTtBQUM5SCxnRkFBZ0YsaUJBQWlCLE9BQU87QUFDeEcsd0RBQXdELGdCQUFnQixRQUFRLE9BQU87QUFDdkYsOENBQThDLGdCQUFnQixnQkFBZ0IsT0FBTztBQUNyRjtBQUNBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0EsU0FBUyxZQUFZLGFBQWEsT0FBTyxFQUFFLFVBQVUsV0FBVztBQUNoRSxtQ0FBbUMsU0FBUztBQUM1QztBQUNBO0FBQ0EsOENBQThDLGNBQWM7QUFDNUQsNkJBQTZCLG1CQUFPLENBQUMsRUFBc0I7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBLENBQUM7QUFDRCIsImZpbGUiOiIxNTkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHJlc3VsdC52YWx1ZSk7IH0pLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufTtcclxudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0geVtvcFswXSAmIDIgPyBcInJldHVyblwiIDogb3BbMF0gPyBcInRocm93XCIgOiBcIm5leHRcIl0pICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gWzAsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgIH1cclxufTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgYXVyZWxpYV9mZXRjaF9jbGllbnRfMSA9IHJlcXVpcmUoXCJhdXJlbGlhLWZldGNoLWNsaWVudFwiKTtcclxudmFyIFRyZWFkc3RvbmVBcGkgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBUcmVhZHN0b25lQXBpKCkge1xyXG4gICAgICAgIHRoaXMuaHR0cENsaWVudCA9IG5ldyBhdXJlbGlhX2ZldGNoX2NsaWVudF8xLkh0dHBDbGllbnQoKTtcclxuICAgIH1cclxuICAgIFRyZWFkc3RvbmVBcGkucHJvdG90eXBlLmZldGNoUHJvZHVjdERhdGEgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgaHR0cFJlc3BvbnNlLCBwcm9kdWN0RGF0YTtcclxuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5odHRwQ2xpZW50LmZldGNoKCcvUmVzb3VyY2UvR2V0UHJvZHVjdERhdGFKc29uLycpXTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBSZXNwb25zZSA9IF9hLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgaHR0cFJlc3BvbnNlLmpzb24oKV07XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0RGF0YSA9IF9hLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHByb2R1Y3REYXRhXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIFRyZWFkc3RvbmVBcGk7XHJcbn0oKSk7XHJcbmV4cG9ydHMuVHJlYWRzdG9uZUFwaSA9IFRyZWFkc3RvbmVBcGk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///159\n')},16:function(module,__webpack_exports__,__webpack_require__){"use strict";eval("\n// EXTERNAL MODULE: ./node_modules/aurelia-i18n/dist/native-modules/i18n.js + 13 modules\nvar i18n = __webpack_require__(9);\n\n// CONCATENATED MODULE: ./node_modules/aurelia-i18n/dist/native-modules/defaultTranslations/relative.time.js\n\nvar translations = {\n  ar: {\n    translation: {\n      'now': 'الآن',\n      'second_ago': 'منذ __count__ ثانية',\n      'second_ago_plural': 'منذ __count__ ثواني',\n      'second_in': 'في __count__ ثانية',\n      'second_in_plural': 'في __count__ ثواني',\n      'minute_ago': 'منذ __count__ دقيقة',\n      'minute_ago_plural': 'منذ __count__ دقائق',\n      'minute_in': 'في __count__ دقيقة',\n      'minute_in_plural': 'في __count__ دقائق',\n      'hour_ago': 'منذ __count__ ساعة',\n      'hour_ago_plural': 'منذ __count__ ساعات',\n      'hour_in': 'في __count__ ساعة',\n      'hour_in_plural': 'في __count__ ساعات',\n      'day_ago': 'منذ __count__ يوم',\n      'day_ago_plural': 'منذ __count__ أيام',\n      'day_in': 'في __count__ يوم',\n      'day_in_plural': 'في __count__ أيام',\n      'month_ago': 'منذ __count__ شهر',\n      'month_ago_plural': 'منذ __count__ أشهر',\n      'month_in': 'في __count__ شهر',\n      'month_in_plural': 'في __count__ أشهر',\n      'year_ago': 'منذ __count__ سنة',\n      'year_ago_plural': 'منذ __count__ سنوات',\n      'year_in': 'في __count__ سنة',\n      'year_in_plural': 'في __count__ سنوات'\n    }\n  },\n  en: {\n    translation: {\n      'now': 'just now',\n      'second_ago': '__count__ second ago',\n      'second_ago_plural': '__count__ seconds ago',\n      'second_in': 'in __count__ second',\n      'second_in_plural': 'in __count__ seconds',\n      'minute_ago': '__count__ minute ago',\n      'minute_ago_plural': '__count__ minutes ago',\n      'minute_in': 'in __count__ minute',\n      'minute_in_plural': 'in __count__ minutes',\n      'hour_ago': '__count__ hour ago',\n      'hour_ago_plural': '__count__ hours ago',\n      'hour_in': 'in __count__ hour',\n      'hour_in_plural': 'in __count__ hours',\n      'day_ago': '__count__ day ago',\n      'day_ago_plural': '__count__ days ago',\n      'day_in': 'in __count__ day',\n      'day_in_plural': 'in __count__ days',\n      'month_ago': '__count__ month ago',\n      'month_ago_plural': '__count__ months ago',\n      'month_in': 'in __count__ month',\n      'month_in_plural': 'in __count__ months',\n      'year_ago': '__count__ year ago',\n      'year_ago_plural': '__count__ years ago',\n      'year_in': 'in __count__ year',\n      'year_in_plural': 'in __count__ years'\n    }\n  },\n  es: {\n    translation: {\n      'now': 'ahora mismo',\n      'second_ago': 'hace __count__ segundo',\n      'second_ago_plural': 'hace __count__ segundos',\n      'second_in': 'en __count__ segundo',\n      'second_in_plural': 'en __count__ segundos',\n      'minute_ago': 'hace __count__ minuto',\n      'minute_ago_plural': 'hace __count__ minutos',\n      'minute_in': 'en __count__ minuto',\n      'minute_in_plural': 'en __count__ minutos',\n      'hour_ago': 'hace __count__ hora',\n      'hour_ago_plural': 'hace __count__ horas',\n      'hour_in': 'en __count__ hora',\n      'hour_in_plural': 'en __count__ horas',\n      'day_ago': 'hace __count__ día',\n      'day_ago_plural': 'hace __count__ días',\n      'day_in': 'en __count__ día',\n      'day_in_plural': 'en __count__ días',\n      'month_ago': 'hace __count__ mes',\n      'month_ago_plural': 'hace __count__ meses',\n      'month_in': 'en __count__ mes',\n      'month_in_plural': 'en __count__ meses',\n      'year_ago': 'hace __count__ año',\n      'year_ago_plural': 'hace __count__ años',\n      'year_in': 'en __count__ año',\n      'year_in_plural': 'en __count__ años'\n    }\n  },\n  it: {\n    translation: {\n      'now': 'adesso',\n      'second_ago': '__count__ secondo fa',\n      'second_ago_plural': '__count__ secondi fa',\n      'second_in': 'in __count__ secondo',\n      'second_in_plural': 'in __count__ secondi',\n      'minute_ago': '__count__ minuto fa',\n      'minute_ago_plural': '__count__ minuti fa',\n      'minute_in': 'in __count__ minuto',\n      'minute_in_plural': 'in __count__ minuti',\n      'hour_ago': '__count__ ora fa',\n      'hour_ago_plural': '__count__ ore fa',\n      'hour_in': 'in __count__ ora',\n      'hour_in_plural': 'in __count__ ore',\n      'day_ago': '__count__ giorno fa',\n      'day_ago_plural': '__count__ giorni fa',\n      'day_in': 'in __count__ giorno',\n      'day_in_plural': 'in __count__ giorni',\n      'month_ago': '__count__ mese fa',\n      'month_ago_plural': '__count__ mesi fa',\n      'month_in': 'in __count__ mese',\n      'month_in_plural': 'in __count__ mesi',\n      'year_ago': '__count__ anno fa',\n      'year_ago_plural': '__count__ anni fa',\n      'year_in': 'in __count__ anno',\n      'year_in_plural': 'in __count__ anni'\n    }\n  },\n  de: {\n    translation: {\n      'now': 'jetzt gerade',\n      'second_ago': 'vor __count__ Sekunde',\n      'second_ago_plural': 'vor __count__ Sekunden',\n      'second_in': 'in __count__ Sekunde',\n      'second_in_plural': 'in __count__ Sekunden',\n      'minute_ago': 'vor __count__ Minute',\n      'minute_ago_plural': 'vor __count__ Minuten',\n      'minute_in': 'in __count__ Minute',\n      'minute_in_plural': 'in __count__ Minuten',\n      'hour_ago': 'vor __count__ Stunde',\n      'hour_ago_plural': 'vor __count__ Stunden',\n      'hour_in': 'in __count__ Stunde',\n      'hour_in_plural': 'in __count__ Stunden',\n      'day_ago': 'vor __count__ Tag',\n      'day_ago_plural': 'vor __count__ Tagen',\n      'day_in': 'in __count__ Tag',\n      'day_in_plural': 'in __count__ Tagen',\n      'month_ago': 'vor __count__ Monat',\n      'month_ago_plural': 'vor __count__ Monaten',\n      'month_in': 'in __count__ Monat',\n      'month_in_plural': 'in __count__ Monaten',\n      'year_ago': 'vor __count__ Jahr',\n      'year_ago_plural': 'vor __count__ Jahren',\n      'year_in': 'in __count__ Jahr',\n      'year_in_plural': 'in __count__ Jahren'\n    }\n  },\n  nl: {\n    translation: {\n      'now': 'zonet',\n      'second_ago': '__count__ seconde geleden',\n      'second_ago_plural': '__count__ seconden geleden',\n      'second_in': 'in __count__ seconde',\n      'second_in_plural': 'in __count__ seconden',\n      'minute_ago': '__count__ minuut geleden',\n      'minute_ago_plural': '__count__ minuten geleden',\n      'minute_in': 'in __count__ minuut',\n      'minute_in_plural': 'in __count__ minuten',\n      'hour_ago': '__count__ uur geleden',\n      'hour_ago_plural': '__count__ uren geleden',\n      'hour_in': 'in __count__ uur',\n      'hour_in_plural': 'in __count__ uren',\n      'day_ago': '__count__ dag geleden',\n      'day_ago_plural': '__count__ dagen geleden',\n      'day_in': 'in __count__ dag',\n      'day_in_plural': 'in __count__ dagen',\n      'month_ago': '__count__ maand geleden',\n      'month_ago_plural': '__count__ maanden geleden',\n      'month_in': 'in __count__ maand',\n      'month_in_plural': 'in __count__ maanden',\n      'year_ago': '__count__ jaar geleden',\n      'year_ago_plural': '__count__ jaren geleden',\n      'year_in': 'in __count__ jaar',\n      'year_in_plural': 'in __count__ jaren'\n    }\n  },\n  fr: {\n    translation: {\n      'now': 'maintenant',\n      'second_ago': 'il y a __count__ seconde',\n      'second_ago_plural': 'il y a __count__ secondes',\n      'second_in': 'dans __count__ seconde',\n      'second_in_plural': 'dans __count__ secondes',\n      'minute_ago': 'il y a __count__ minute',\n      'minute_ago_plural': 'il y a __count__ minutes',\n      'minute_in': 'dans __count__ minute',\n      'minute_in_plural': 'dans __count__ minutes',\n      'hour_ago': 'il y a __count__ heure',\n      'hour_ago_plural': 'il y a __count__ heures',\n      'hour_in': 'dans __count__ heure',\n      'hour_in_plural': 'dans __count__ heures',\n      'day_ago': 'il y a __count__ jour',\n      'day_ago_plural': 'il y a __count__ jours',\n      'day_in': 'dans __count__ jour',\n      'day_in_plural': 'dans __count__ jours',\n      'month_ago': 'il y a __count__ mois',\n      'month_ago_plural': 'il y a __count__ mois',\n      'month_in': 'dans __count__ mois',\n      'month_in_plural': 'dans __count__ mois',\n      'year_ago': 'il y a __count__ an',\n      'year_ago_plural': 'il y a __count__ ans',\n      'year_in': 'dans __count__ an',\n      'year_in_plural': 'dans __count__ ans'\n    }\n  },\n  th: {\n    translation: {\n      'now': 'เมื่อกี้',\n      'second_ago': '__count__ วินาที ที่ผ่านมา',\n      'second_ago_plural': '__count__ วินาที ที่ผ่านมา',\n      'second_in': 'อีก __count__ วินาที',\n      'second_in_plural': 'อีก __count__ วินาที',\n      'minute_ago': '__count__ นาที ที่ผ่านมา',\n      'minute_ago_plural': '__count__ นาที ที่ผ่านมา',\n      'minute_in': 'อีก __count__ นาที',\n      'minute_in_plural': 'อีก __count__ นาที',\n      'hour_ago': '__count__ ชั่วโมง ที่ผ่านมา',\n      'hour_ago_plural': '__count__ ชั่วโมง ที่ผ่านมา',\n      'hour_in': 'อีก __count__ ชั่วโมง',\n      'hour_in_plural': 'อีก __count__ ชั่วโมง',\n      'day_ago': '__count__ วัน ที่ผ่านมา',\n      'day_ago_plural': '__count__ วัน ที่ผ่านมา',\n      'day_in': 'อีก __count__ วัน',\n      'day_in_plural': 'อีก __count__ วัน'\n    }\n  },\n  sv: {\n    translation: {\n      'now': 'just nu',\n      'second_ago': '__count__ sekund sedan',\n      'second_ago_plural': '__count__ sekunder sedan',\n      'second_in': 'om __count__ sekund',\n      'second_in_plural': 'om __count__ sekunder',\n      'minute_ago': '__count__ minut sedan',\n      'minute_ago_plural': '__count__ minuter sedan',\n      'minute_in': 'om __count__ minut',\n      'minute_in_plural': 'om __count__ minuter',\n      'hour_ago': '__count__ timme sedan',\n      'hour_ago_plural': '__count__ timmar sedan',\n      'hour_in': 'om __count__ timme',\n      'hour_in_plural': 'om __count__ timmar',\n      'day_ago': '__count__ dag sedan',\n      'day_ago_plural': '__count__ dagar sedan',\n      'day_in': 'om __count__ dag',\n      'day_in_plural': 'om __count__ dagar'\n    }\n  },\n  da: {\n    translation: {\n      'now': 'lige nu',\n      'second_ago': '__count__ sekunder siden',\n      'second_ago_plural': '__count__ sekunder siden',\n      'second_in': 'om __count__ sekund',\n      'second_in_plural': 'om __count__ sekunder',\n      'minute_ago': '__count__ minut siden',\n      'minute_ago_plural': '__count__ minutter siden',\n      'minute_in': 'om __count__ minut',\n      'minute_in_plural': 'om __count__ minutter',\n      'hour_ago': '__count__ time siden',\n      'hour_ago_plural': '__count__ timer siden',\n      'hour_in': 'om __count__ time',\n      'hour_in_plural': 'om __count__ timer',\n      'day_ago': '__count__ dag siden',\n      'day_ago_plural': '__count__ dage siden',\n      'day_in': 'om __count__ dag',\n      'day_in_plural': 'om __count__ dage'\n    }\n  },\n  no: {\n    translation: {\n      'now': 'akkurat nå',\n      'second_ago': '__count__ sekund siden',\n      'second_ago_plural': '__count__ sekunder siden',\n      'second_in': 'om __count__ sekund',\n      'second_in_plural': 'om __count__ sekunder',\n      'minute_ago': '__count__ minutt siden',\n      'minute_ago_plural': '__count__ minutter siden',\n      'minute_in': 'om __count__ minutt',\n      'minute_in_plural': 'om __count__ minutter',\n      'hour_ago': '__count__ time siden',\n      'hour_ago_plural': '__count__ timer siden',\n      'hour_in': 'om __count__ time',\n      'hour_in_plural': 'om __count__ timer',\n      'day_ago': '__count__ dag siden',\n      'day_ago_plural': '__count__ dager siden',\n      'day_in': 'om __count__ dag',\n      'day_in_plural': 'om __count__ dager'\n    }\n  },\n  ja: {\n    translation: {\n      'now': 'たった今',\n      'second_ago': '__count__ 秒前',\n      'second_ago_plural': '__count__ 秒前',\n      'second_in': 'あと __count__ 秒',\n      'second_in_plural': 'あと __count__ 秒',\n      'minute_ago': '__count__ 分前',\n      'minute_ago_plural': '__count__ 分前',\n      'minute_in': 'あと __count__ 分',\n      'minute_in_plural': 'あと __count__ 分',\n      'hour_ago': '__count__ 時間前',\n      'hour_ago_plural': '__count__ 時間前',\n      'hour_in': 'あと __count__ 時間',\n      'hour_in_plural': 'あと __count__ 時間',\n      'day_ago': '__count__ 日間前',\n      'day_ago_plural': '__count__ 日間前',\n      'day_in': 'あと __count__ 日間',\n      'day_in_plural': 'あと __count__ 日間',\n      'month_ago': '__count__ ヶ月前',\n      'month_ago_plural': '__count__ ヶ月前',\n      'month_in': 'あと __count__ ヶ月前',\n      'month_in_plural': 'あと __count__ ヶ月前',\n      'year_ago': '__count__ 年前',\n      'year_ago_plural': '__count__ 年前',\n      'year_in': 'あと __count__ 年',\n      'year_in_plural': 'あと __count__ 年'\n    }\n  },\n  jp: {\n    translation: {\n      'now': 'たった今',\n      'second_ago': '__count__ 秒前',\n      'second_ago_plural': '__count__ 秒前',\n      'second_in': 'あと __count__ 秒',\n      'second_in_plural': 'あと __count__ 秒',\n      'minute_ago': '__count__ 分前',\n      'minute_ago_plural': '__count__ 分前',\n      'minute_in': 'あと __count__ 分',\n      'minute_in_plural': 'あと __count__ 分',\n      'hour_ago': '__count__ 時間前',\n      'hour_ago_plural': '__count__ 時間前',\n      'hour_in': 'あと __count__ 時間',\n      'hour_in_plural': 'あと __count__ 時間',\n      'day_ago': '__count__ 日間前',\n      'day_ago_plural': '__count__ 日間前',\n      'day_in': 'あと __count__ 日間',\n      'day_in_plural': 'あと __count__ 日間',\n      'month_ago': '__count__ ヶ月前',\n      'month_ago_plural': '__count__ ヶ月前',\n      'month_in': 'あと __count__ ヶ月前',\n      'month_in_plural': 'あと __count__ ヶ月前',\n      'year_ago': '__count__ 年前',\n      'year_ago_plural': '__count__ 年前',\n      'year_in': 'あと __count__ 年',\n      'year_in_plural': 'あと __count__ 年'\n    }\n  },\n  pt: {\n    translation: {\n      'now': 'neste exato momento',\n      'second_ago': '__count__ segundo atrás',\n      'second_ago_plural': '__count__ segundos atrás',\n      'second_in': 'em __count__ segundo',\n      'second_in_plural': 'em __count__ segundos',\n      'minute_ago': '__count__ minuto atrás',\n      'minute_ago_plural': '__count__ minutos atrás',\n      'minute_in': 'em __count__ minuto',\n      'minute_in_plural': 'em __count__ minutos',\n      'hour_ago': '__count__ hora atrás',\n      'hour_ago_plural': '__count__ horas atrás',\n      'hour_in': 'em __count__ hora',\n      'hour_in_plural': 'em __count__ horas',\n      'day_ago': '__count__ dia atrás',\n      'day_ago_plural': '__count__ dias atrás',\n      'day_in': 'em __count__ dia',\n      'day_in_plural': 'em __count__ dias',\n      'month_ago': '__count__ mês atrás',\n      'month_ago_plural': '__count__ meses atrás',\n      'month_in': 'em __count__ mês',\n      'month_in_plural': 'em __count__ meses',\n      'year_ago': '__count__ ano atrás',\n      'year_ago_plural': '__count__ anos atrás',\n      'year_in': 'em __count__ ano',\n      'year_in_plural': 'em __count__ anos'\n    }\n  },\n  zh: {\n    translation: {\n      'now': '刚才',\n      'second_ago': '__count__ 秒钟前',\n      'second_ago_plural': '__count__ 秒钟前',\n      'second_in': '__count__ 秒内',\n      'second_in_plural': '__count__ 秒内',\n      'minute_ago': '__count__ 分钟前',\n      'minute_ago_plural': '__count__ 分钟前',\n      'minute_in': '__count__ 分钟内',\n      'minute_in_plural': '__count__ 分钟内',\n      'hour_ago': '__count__ 小时前',\n      'hour_ago_plural': '__count__ 小时前',\n      'hour_in': '__count__ 小时内',\n      'hour_in_plural': '__count__ 小时内',\n      'day_ago': '__count__ 天前',\n      'day_ago_plural': '__count__ 天前',\n      'day_in': '__count__ 天内',\n      'day_in_plural': '__count__ 天内',\n      'month_ago': '__count__ 月前',\n      'month_ago_plural': '__count__ 月前',\n      'month_in': '__count__ 月内',\n      'month_in_plural': '__count__ 月内',\n      'year_ago': '__count__ 年前',\n      'year_ago_plural': '__count__ 年前',\n      'year_in': '__count__ 年内',\n      'year_in_plural': '__count__ 年内'\n    }\n  },\n  'zh-CN': {\n    translation: {\n      'now': '刚才',\n      'second_ago': '__count__ 秒钟前',\n      'second_ago_plural': '__count__ 秒钟前',\n      'second_in': '__count__ 秒内',\n      'second_in_plural': '__count__ 秒内',\n      'minute_ago': '__count__ 分钟前',\n      'minute_ago_plural': '__count__ 分钟前',\n      'minute_in': '__count__ 分钟内',\n      'minute_in_plural': '__count__ 分钟内',\n      'hour_ago': '__count__ 小时前',\n      'hour_ago_plural': '__count__ 小时前',\n      'hour_in': '__count__ 小时内',\n      'hour_in_plural': '__count__ 小时内',\n      'day_ago': '__count__ 天前',\n      'day_ago_plural': '__count__ 天前',\n      'day_in': '__count__ 天内',\n      'day_in_plural': '__count__ 天内',\n      'month_ago': '__count__ 月前',\n      'month_ago_plural': '__count__ 月前',\n      'month_in': '__count__ 月内',\n      'month_in_plural': '__count__ 月内',\n      'year_ago': '__count__ 年前',\n      'year_ago_plural': '__count__ 年前',\n      'year_in': '__count__ 年内',\n      'year_in_plural': '__count__ 年内'\n    }\n  },\n  'zh-HK': {\n    translation: {\n      'now': '剛才',\n      'second_ago': '__count__ 秒鐘前',\n      'second_ago_plural': '__count__ 秒鐘前',\n      'second_in': '__count__ 秒內',\n      'second_in_plural': '__count__ 秒內',\n      'minute_ago': '__count__ 分鐘前',\n      'minute_ago_plural': '__count__ 分鐘前',\n      'minute_in': '__count__ 分鐘內',\n      'minute_in_plural': '__count__ 分鐘內',\n      'hour_ago': '__count__ 小時前',\n      'hour_ago_plural': '__count__ 小時前',\n      'hour_in': '__count__ 小時內',\n      'hour_in_plural': '__count__ 小時內',\n      'day_ago': '__count__ 天前',\n      'day_ago_plural': '__count__ 天前',\n      'day_in': '__count__ 天內',\n      'day_in_plural': '__count__ 天內',\n      'month_ago': '__count__ 月前',\n      'month_ago_plural': '__count__ 月前',\n      'month_in': '__count__ 月內',\n      'month_in_plural': '__count__ 月內',\n      'year_ago': '__count__ 年前',\n      'year_ago_plural': '__count__ 年前',\n      'year_in': '__count__ 年內',\n      'year_in_plural': '__count__ 年內'\n    }\n  },\n  'zh-TW': {\n    translation: {\n      'now': '剛才',\n      'second_ago': '__count__ 秒鐘前',\n      'second_ago_plural': '__count__ 秒鐘前',\n      'second_in': '__count__ 秒內',\n      'second_in_plural': '__count__ 秒內',\n      'minute_ago': '__count__ 分鐘前',\n      'minute_ago_plural': '__count__ 分鐘前',\n      'minute_in': '__count__ 分鐘內',\n      'minute_in_plural': '__count__ 分鐘內',\n      'hour_ago': '__count__ 小時前',\n      'hour_ago_plural': '__count__ 小時前',\n      'hour_in': '__count__ 小時內',\n      'hour_in_plural': '__count__ 小時內',\n      'day_ago': '__count__ 天前',\n      'day_ago_plural': '__count__ 天前',\n      'day_in': '__count__ 天內',\n      'day_in_plural': '__count__ 天內',\n      'month_ago': '__count__ 月前',\n      'month_ago_plural': '__count__ 月前',\n      'month_in': '__count__ 月內',\n      'month_in_plural': '__count__ 月內',\n      'year_ago': '__count__ 年前',\n      'year_ago_plural': '__count__ 年前',\n      'year_in': '__count__ 年內',\n      'year_in_plural': '__count__ 年內'\n    }\n  }\n};\n// EXTERNAL MODULE: ./node_modules/aurelia-event-aggregator/dist/native-modules/aurelia-event-aggregator.js\nvar aurelia_event_aggregator = __webpack_require__(\"aurelia-event-aggregator\");\n\n// CONCATENATED MODULE: ./node_modules/aurelia-i18n/dist/native-modules/relativeTime.js\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return relativeTime_RelativeTime; });\n\n\n\n\n\n\nvar relativeTime_RelativeTime = function () {\n  RelativeTime.inject = function inject() {\n    return [i18n[\"a\" /* I18N */], aurelia_event_aggregator[\"EventAggregator\"]];\n  };\n\n  function RelativeTime(i18n, ea) {\n    var _this = this;\n\n    \n\n    this.service = i18n;\n    this.ea = ea;\n\n    this.service.i18nextReady().then(function () {\n      _this.setup();\n    });\n    this.ea.subscribe('i18n:locale:changed', function (locales) {\n      _this.setup(locales);\n    });\n  }\n\n  RelativeTime.prototype.setup = function setup(locales) {\n    var trans = translations.default || translations;\n    var fallbackLng = this.service.i18next.fallbackLng;\n\n    var alternateFb = fallbackLng || this.service.i18next.options.fallbackLng;\n    if (Array.isArray(alternateFb) && alternateFb.length > 0) {\n      alternateFb = alternateFb[0];\n    }\n\n    var key = (locales && locales.newValue ? locales.newValue : this.service.getLocale()) || alternateFb;\n\n    var index = 0;\n\n    if ((index = key.indexOf('-')) >= 0) {\n      var baseLocale = key.substring(0, index);\n\n      if (trans[baseLocale]) {\n        this.addTranslationResource(baseLocale, trans[baseLocale].translation);\n      }\n    }\n\n    if (trans[key]) {\n      this.addTranslationResource(key, trans[key].translation);\n    }\n    if (trans[fallbackLng]) {\n      this.addTranslationResource(key, trans[fallbackLng].translation);\n    }\n  };\n\n  RelativeTime.prototype.addTranslationResource = function addTranslationResource(key, translation) {\n    var options = this.service.i18next.options;\n\n    if (options.interpolation && options.interpolation.prefix !== '__' || options.interpolation.suffix !== '__') {\n      for (var subkey in translation) {\n        translation[subkey] = translation[subkey].replace('__count__', (options.interpolation.prefix || '{{') + 'count' + (options.interpolation.suffix || '}}'));\n      }\n    }\n\n    this.service.i18next.addResources(key, options.defaultNS, translation);\n  };\n\n  RelativeTime.prototype.getRelativeTime = function getRelativeTime(time) {\n    var now = new Date();\n    var diff = now.getTime() - time.getTime();\n\n    var timeDiff = this.getTimeDiffDescription(diff, 'year', 31104000000);\n    if (!timeDiff) {\n      timeDiff = this.getTimeDiffDescription(diff, 'month', 2592000000);\n      if (!timeDiff) {\n        timeDiff = this.getTimeDiffDescription(diff, 'day', 86400000);\n        if (!timeDiff) {\n          timeDiff = this.getTimeDiffDescription(diff, 'hour', 3600000);\n          if (!timeDiff) {\n            timeDiff = this.getTimeDiffDescription(diff, 'minute', 60000);\n            if (!timeDiff) {\n              timeDiff = this.getTimeDiffDescription(diff, 'second', 1000);\n              if (!timeDiff) {\n                timeDiff = this.service.tr('now');\n              }\n            }\n          }\n        }\n      }\n    }\n\n    return timeDiff;\n  };\n\n  RelativeTime.prototype.getTimeDiffDescription = function getTimeDiffDescription(diff, unit, timeDivisor) {\n    var unitAmount = (diff / timeDivisor).toFixed(0);\n    if (unitAmount > 0) {\n      return this.service.tr(unit, { count: parseInt(unitAmount, 10), context: 'ago' });\n    } else if (unitAmount < 0) {\n      var abs = Math.abs(unitAmount);\n      return this.service.tr(unit, { count: abs, context: 'in' });\n    }\n\n    return null;\n  };\n\n  return RelativeTime;\n}();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXVyZWxpYS1pMThuL2Rpc3QvbmF0aXZlLW1vZHVsZXMvZGVmYXVsdFRyYW5zbGF0aW9ucy9yZWxhdGl2ZS50aW1lLmpzPzdlMzQiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F1cmVsaWEtaTE4bi9kaXN0L25hdGl2ZS1tb2R1bGVzL3JlbGF0aXZlVGltZS5qcz84ZmQ4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRTs7Ozs7Ozs7QUMxZThCO0FBQ3FDO0FBQ1I7O0FBRXBELElBQUkseUJBQVk7QUFDdkI7QUFDQSxZQUFZLG9CQUFJLEVBQUUsMkNBQWU7QUFDakM7O0FBRUE7QUFDQTs7OztBQUlBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EsZ0JBQWdCLFlBQVksWUFBWSxZQUFZO0FBQ3BEOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMkdBQTJHLG1EQUFtRDtBQUM5SjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLGtEQUFrRDtBQUN0RixLQUFLO0FBQ0w7QUFDQSxvQ0FBb0MsNEJBQTRCO0FBQ2hFOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDIiwiZmlsZSI6IjE2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiXG5leHBvcnQgdmFyIHRyYW5zbGF0aW9ucyA9IHtcbiAgYXI6IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgJ25vdyc6ICfYp9mE2KLZhicsXG4gICAgICAnc2Vjb25kX2Fnbyc6ICfZhdmG2LAgX19jb3VudF9fINir2KfZhtmK2KknLFxuICAgICAgJ3NlY29uZF9hZ29fcGx1cmFsJzogJ9mF2YbYsCBfX2NvdW50X18g2KvZiNin2YbZiicsXG4gICAgICAnc2Vjb25kX2luJzogJ9mB2YogX19jb3VudF9fINir2KfZhtmK2KknLFxuICAgICAgJ3NlY29uZF9pbl9wbHVyYWwnOiAn2YHZiiBfX2NvdW50X18g2KvZiNin2YbZiicsXG4gICAgICAnbWludXRlX2Fnbyc6ICfZhdmG2LAgX19jb3VudF9fINiv2YLZitmC2KknLFxuICAgICAgJ21pbnV0ZV9hZ29fcGx1cmFsJzogJ9mF2YbYsCBfX2NvdW50X18g2K/Zgtin2KbZgicsXG4gICAgICAnbWludXRlX2luJzogJ9mB2YogX19jb3VudF9fINiv2YLZitmC2KknLFxuICAgICAgJ21pbnV0ZV9pbl9wbHVyYWwnOiAn2YHZiiBfX2NvdW50X18g2K/Zgtin2KbZgicsXG4gICAgICAnaG91cl9hZ28nOiAn2YXZhtiwIF9fY291bnRfXyDYs9in2LnYqScsXG4gICAgICAnaG91cl9hZ29fcGx1cmFsJzogJ9mF2YbYsCBfX2NvdW50X18g2LPYp9i52KfYqicsXG4gICAgICAnaG91cl9pbic6ICfZgdmKIF9fY291bnRfXyDYs9in2LnYqScsXG4gICAgICAnaG91cl9pbl9wbHVyYWwnOiAn2YHZiiBfX2NvdW50X18g2LPYp9i52KfYqicsXG4gICAgICAnZGF5X2Fnbyc6ICfZhdmG2LAgX19jb3VudF9fINmK2YjZhScsXG4gICAgICAnZGF5X2Fnb19wbHVyYWwnOiAn2YXZhtiwIF9fY291bnRfXyDYo9mK2KfZhScsXG4gICAgICAnZGF5X2luJzogJ9mB2YogX19jb3VudF9fINmK2YjZhScsXG4gICAgICAnZGF5X2luX3BsdXJhbCc6ICfZgdmKIF9fY291bnRfXyDYo9mK2KfZhScsXG4gICAgICAnbW9udGhfYWdvJzogJ9mF2YbYsCBfX2NvdW50X18g2LTZh9ixJyxcbiAgICAgICdtb250aF9hZ29fcGx1cmFsJzogJ9mF2YbYsCBfX2NvdW50X18g2KPYtNmH2LEnLFxuICAgICAgJ21vbnRoX2luJzogJ9mB2YogX19jb3VudF9fINi02YfYsScsXG4gICAgICAnbW9udGhfaW5fcGx1cmFsJzogJ9mB2YogX19jb3VudF9fINij2LTZh9ixJyxcbiAgICAgICd5ZWFyX2Fnbyc6ICfZhdmG2LAgX19jb3VudF9fINiz2YbYqScsXG4gICAgICAneWVhcl9hZ29fcGx1cmFsJzogJ9mF2YbYsCBfX2NvdW50X18g2LPZhtmI2KfYqicsXG4gICAgICAneWVhcl9pbic6ICfZgdmKIF9fY291bnRfXyDYs9mG2KknLFxuICAgICAgJ3llYXJfaW5fcGx1cmFsJzogJ9mB2YogX19jb3VudF9fINiz2YbZiNin2KonXG4gICAgfVxuICB9LFxuICBlbjoge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICAnbm93JzogJ2p1c3Qgbm93JyxcbiAgICAgICdzZWNvbmRfYWdvJzogJ19fY291bnRfXyBzZWNvbmQgYWdvJyxcbiAgICAgICdzZWNvbmRfYWdvX3BsdXJhbCc6ICdfX2NvdW50X18gc2Vjb25kcyBhZ28nLFxuICAgICAgJ3NlY29uZF9pbic6ICdpbiBfX2NvdW50X18gc2Vjb25kJyxcbiAgICAgICdzZWNvbmRfaW5fcGx1cmFsJzogJ2luIF9fY291bnRfXyBzZWNvbmRzJyxcbiAgICAgICdtaW51dGVfYWdvJzogJ19fY291bnRfXyBtaW51dGUgYWdvJyxcbiAgICAgICdtaW51dGVfYWdvX3BsdXJhbCc6ICdfX2NvdW50X18gbWludXRlcyBhZ28nLFxuICAgICAgJ21pbnV0ZV9pbic6ICdpbiBfX2NvdW50X18gbWludXRlJyxcbiAgICAgICdtaW51dGVfaW5fcGx1cmFsJzogJ2luIF9fY291bnRfXyBtaW51dGVzJyxcbiAgICAgICdob3VyX2Fnbyc6ICdfX2NvdW50X18gaG91ciBhZ28nLFxuICAgICAgJ2hvdXJfYWdvX3BsdXJhbCc6ICdfX2NvdW50X18gaG91cnMgYWdvJyxcbiAgICAgICdob3VyX2luJzogJ2luIF9fY291bnRfXyBob3VyJyxcbiAgICAgICdob3VyX2luX3BsdXJhbCc6ICdpbiBfX2NvdW50X18gaG91cnMnLFxuICAgICAgJ2RheV9hZ28nOiAnX19jb3VudF9fIGRheSBhZ28nLFxuICAgICAgJ2RheV9hZ29fcGx1cmFsJzogJ19fY291bnRfXyBkYXlzIGFnbycsXG4gICAgICAnZGF5X2luJzogJ2luIF9fY291bnRfXyBkYXknLFxuICAgICAgJ2RheV9pbl9wbHVyYWwnOiAnaW4gX19jb3VudF9fIGRheXMnLFxuICAgICAgJ21vbnRoX2Fnbyc6ICdfX2NvdW50X18gbW9udGggYWdvJyxcbiAgICAgICdtb250aF9hZ29fcGx1cmFsJzogJ19fY291bnRfXyBtb250aHMgYWdvJyxcbiAgICAgICdtb250aF9pbic6ICdpbiBfX2NvdW50X18gbW9udGgnLFxuICAgICAgJ21vbnRoX2luX3BsdXJhbCc6ICdpbiBfX2NvdW50X18gbW9udGhzJyxcbiAgICAgICd5ZWFyX2Fnbyc6ICdfX2NvdW50X18geWVhciBhZ28nLFxuICAgICAgJ3llYXJfYWdvX3BsdXJhbCc6ICdfX2NvdW50X18geWVhcnMgYWdvJyxcbiAgICAgICd5ZWFyX2luJzogJ2luIF9fY291bnRfXyB5ZWFyJyxcbiAgICAgICd5ZWFyX2luX3BsdXJhbCc6ICdpbiBfX2NvdW50X18geWVhcnMnXG4gICAgfVxuICB9LFxuICBlczoge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICAnbm93JzogJ2Fob3JhIG1pc21vJyxcbiAgICAgICdzZWNvbmRfYWdvJzogJ2hhY2UgX19jb3VudF9fIHNlZ3VuZG8nLFxuICAgICAgJ3NlY29uZF9hZ29fcGx1cmFsJzogJ2hhY2UgX19jb3VudF9fIHNlZ3VuZG9zJyxcbiAgICAgICdzZWNvbmRfaW4nOiAnZW4gX19jb3VudF9fIHNlZ3VuZG8nLFxuICAgICAgJ3NlY29uZF9pbl9wbHVyYWwnOiAnZW4gX19jb3VudF9fIHNlZ3VuZG9zJyxcbiAgICAgICdtaW51dGVfYWdvJzogJ2hhY2UgX19jb3VudF9fIG1pbnV0bycsXG4gICAgICAnbWludXRlX2Fnb19wbHVyYWwnOiAnaGFjZSBfX2NvdW50X18gbWludXRvcycsXG4gICAgICAnbWludXRlX2luJzogJ2VuIF9fY291bnRfXyBtaW51dG8nLFxuICAgICAgJ21pbnV0ZV9pbl9wbHVyYWwnOiAnZW4gX19jb3VudF9fIG1pbnV0b3MnLFxuICAgICAgJ2hvdXJfYWdvJzogJ2hhY2UgX19jb3VudF9fIGhvcmEnLFxuICAgICAgJ2hvdXJfYWdvX3BsdXJhbCc6ICdoYWNlIF9fY291bnRfXyBob3JhcycsXG4gICAgICAnaG91cl9pbic6ICdlbiBfX2NvdW50X18gaG9yYScsXG4gICAgICAnaG91cl9pbl9wbHVyYWwnOiAnZW4gX19jb3VudF9fIGhvcmFzJyxcbiAgICAgICdkYXlfYWdvJzogJ2hhY2UgX19jb3VudF9fIGTDrWEnLFxuICAgICAgJ2RheV9hZ29fcGx1cmFsJzogJ2hhY2UgX19jb3VudF9fIGTDrWFzJyxcbiAgICAgICdkYXlfaW4nOiAnZW4gX19jb3VudF9fIGTDrWEnLFxuICAgICAgJ2RheV9pbl9wbHVyYWwnOiAnZW4gX19jb3VudF9fIGTDrWFzJyxcbiAgICAgICdtb250aF9hZ28nOiAnaGFjZSBfX2NvdW50X18gbWVzJyxcbiAgICAgICdtb250aF9hZ29fcGx1cmFsJzogJ2hhY2UgX19jb3VudF9fIG1lc2VzJyxcbiAgICAgICdtb250aF9pbic6ICdlbiBfX2NvdW50X18gbWVzJyxcbiAgICAgICdtb250aF9pbl9wbHVyYWwnOiAnZW4gX19jb3VudF9fIG1lc2VzJyxcbiAgICAgICd5ZWFyX2Fnbyc6ICdoYWNlIF9fY291bnRfXyBhw7FvJyxcbiAgICAgICd5ZWFyX2Fnb19wbHVyYWwnOiAnaGFjZSBfX2NvdW50X18gYcOxb3MnLFxuICAgICAgJ3llYXJfaW4nOiAnZW4gX19jb3VudF9fIGHDsW8nLFxuICAgICAgJ3llYXJfaW5fcGx1cmFsJzogJ2VuIF9fY291bnRfXyBhw7FvcydcbiAgICB9XG4gIH0sXG4gIGl0OiB7XG4gICAgdHJhbnNsYXRpb246IHtcbiAgICAgICdub3cnOiAnYWRlc3NvJyxcbiAgICAgICdzZWNvbmRfYWdvJzogJ19fY291bnRfXyBzZWNvbmRvIGZhJyxcbiAgICAgICdzZWNvbmRfYWdvX3BsdXJhbCc6ICdfX2NvdW50X18gc2Vjb25kaSBmYScsXG4gICAgICAnc2Vjb25kX2luJzogJ2luIF9fY291bnRfXyBzZWNvbmRvJyxcbiAgICAgICdzZWNvbmRfaW5fcGx1cmFsJzogJ2luIF9fY291bnRfXyBzZWNvbmRpJyxcbiAgICAgICdtaW51dGVfYWdvJzogJ19fY291bnRfXyBtaW51dG8gZmEnLFxuICAgICAgJ21pbnV0ZV9hZ29fcGx1cmFsJzogJ19fY291bnRfXyBtaW51dGkgZmEnLFxuICAgICAgJ21pbnV0ZV9pbic6ICdpbiBfX2NvdW50X18gbWludXRvJyxcbiAgICAgICdtaW51dGVfaW5fcGx1cmFsJzogJ2luIF9fY291bnRfXyBtaW51dGknLFxuICAgICAgJ2hvdXJfYWdvJzogJ19fY291bnRfXyBvcmEgZmEnLFxuICAgICAgJ2hvdXJfYWdvX3BsdXJhbCc6ICdfX2NvdW50X18gb3JlIGZhJyxcbiAgICAgICdob3VyX2luJzogJ2luIF9fY291bnRfXyBvcmEnLFxuICAgICAgJ2hvdXJfaW5fcGx1cmFsJzogJ2luIF9fY291bnRfXyBvcmUnLFxuICAgICAgJ2RheV9hZ28nOiAnX19jb3VudF9fIGdpb3JubyBmYScsXG4gICAgICAnZGF5X2Fnb19wbHVyYWwnOiAnX19jb3VudF9fIGdpb3JuaSBmYScsXG4gICAgICAnZGF5X2luJzogJ2luIF9fY291bnRfXyBnaW9ybm8nLFxuICAgICAgJ2RheV9pbl9wbHVyYWwnOiAnaW4gX19jb3VudF9fIGdpb3JuaScsXG4gICAgICAnbW9udGhfYWdvJzogJ19fY291bnRfXyBtZXNlIGZhJyxcbiAgICAgICdtb250aF9hZ29fcGx1cmFsJzogJ19fY291bnRfXyBtZXNpIGZhJyxcbiAgICAgICdtb250aF9pbic6ICdpbiBfX2NvdW50X18gbWVzZScsXG4gICAgICAnbW9udGhfaW5fcGx1cmFsJzogJ2luIF9fY291bnRfXyBtZXNpJyxcbiAgICAgICd5ZWFyX2Fnbyc6ICdfX2NvdW50X18gYW5ubyBmYScsXG4gICAgICAneWVhcl9hZ29fcGx1cmFsJzogJ19fY291bnRfXyBhbm5pIGZhJyxcbiAgICAgICd5ZWFyX2luJzogJ2luIF9fY291bnRfXyBhbm5vJyxcbiAgICAgICd5ZWFyX2luX3BsdXJhbCc6ICdpbiBfX2NvdW50X18gYW5uaSdcbiAgICB9XG4gIH0sXG4gIGRlOiB7XG4gICAgdHJhbnNsYXRpb246IHtcbiAgICAgICdub3cnOiAnamV0enQgZ2VyYWRlJyxcbiAgICAgICdzZWNvbmRfYWdvJzogJ3ZvciBfX2NvdW50X18gU2VrdW5kZScsXG4gICAgICAnc2Vjb25kX2Fnb19wbHVyYWwnOiAndm9yIF9fY291bnRfXyBTZWt1bmRlbicsXG4gICAgICAnc2Vjb25kX2luJzogJ2luIF9fY291bnRfXyBTZWt1bmRlJyxcbiAgICAgICdzZWNvbmRfaW5fcGx1cmFsJzogJ2luIF9fY291bnRfXyBTZWt1bmRlbicsXG4gICAgICAnbWludXRlX2Fnbyc6ICd2b3IgX19jb3VudF9fIE1pbnV0ZScsXG4gICAgICAnbWludXRlX2Fnb19wbHVyYWwnOiAndm9yIF9fY291bnRfXyBNaW51dGVuJyxcbiAgICAgICdtaW51dGVfaW4nOiAnaW4gX19jb3VudF9fIE1pbnV0ZScsXG4gICAgICAnbWludXRlX2luX3BsdXJhbCc6ICdpbiBfX2NvdW50X18gTWludXRlbicsXG4gICAgICAnaG91cl9hZ28nOiAndm9yIF9fY291bnRfXyBTdHVuZGUnLFxuICAgICAgJ2hvdXJfYWdvX3BsdXJhbCc6ICd2b3IgX19jb3VudF9fIFN0dW5kZW4nLFxuICAgICAgJ2hvdXJfaW4nOiAnaW4gX19jb3VudF9fIFN0dW5kZScsXG4gICAgICAnaG91cl9pbl9wbHVyYWwnOiAnaW4gX19jb3VudF9fIFN0dW5kZW4nLFxuICAgICAgJ2RheV9hZ28nOiAndm9yIF9fY291bnRfXyBUYWcnLFxuICAgICAgJ2RheV9hZ29fcGx1cmFsJzogJ3ZvciBfX2NvdW50X18gVGFnZW4nLFxuICAgICAgJ2RheV9pbic6ICdpbiBfX2NvdW50X18gVGFnJyxcbiAgICAgICdkYXlfaW5fcGx1cmFsJzogJ2luIF9fY291bnRfXyBUYWdlbicsXG4gICAgICAnbW9udGhfYWdvJzogJ3ZvciBfX2NvdW50X18gTW9uYXQnLFxuICAgICAgJ21vbnRoX2Fnb19wbHVyYWwnOiAndm9yIF9fY291bnRfXyBNb25hdGVuJyxcbiAgICAgICdtb250aF9pbic6ICdpbiBfX2NvdW50X18gTW9uYXQnLFxuICAgICAgJ21vbnRoX2luX3BsdXJhbCc6ICdpbiBfX2NvdW50X18gTW9uYXRlbicsXG4gICAgICAneWVhcl9hZ28nOiAndm9yIF9fY291bnRfXyBKYWhyJyxcbiAgICAgICd5ZWFyX2Fnb19wbHVyYWwnOiAndm9yIF9fY291bnRfXyBKYWhyZW4nLFxuICAgICAgJ3llYXJfaW4nOiAnaW4gX19jb3VudF9fIEphaHInLFxuICAgICAgJ3llYXJfaW5fcGx1cmFsJzogJ2luIF9fY291bnRfXyBKYWhyZW4nXG4gICAgfVxuICB9LFxuICBubDoge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICAnbm93JzogJ3pvbmV0JyxcbiAgICAgICdzZWNvbmRfYWdvJzogJ19fY291bnRfXyBzZWNvbmRlIGdlbGVkZW4nLFxuICAgICAgJ3NlY29uZF9hZ29fcGx1cmFsJzogJ19fY291bnRfXyBzZWNvbmRlbiBnZWxlZGVuJyxcbiAgICAgICdzZWNvbmRfaW4nOiAnaW4gX19jb3VudF9fIHNlY29uZGUnLFxuICAgICAgJ3NlY29uZF9pbl9wbHVyYWwnOiAnaW4gX19jb3VudF9fIHNlY29uZGVuJyxcbiAgICAgICdtaW51dGVfYWdvJzogJ19fY291bnRfXyBtaW51dXQgZ2VsZWRlbicsXG4gICAgICAnbWludXRlX2Fnb19wbHVyYWwnOiAnX19jb3VudF9fIG1pbnV0ZW4gZ2VsZWRlbicsXG4gICAgICAnbWludXRlX2luJzogJ2luIF9fY291bnRfXyBtaW51dXQnLFxuICAgICAgJ21pbnV0ZV9pbl9wbHVyYWwnOiAnaW4gX19jb3VudF9fIG1pbnV0ZW4nLFxuICAgICAgJ2hvdXJfYWdvJzogJ19fY291bnRfXyB1dXIgZ2VsZWRlbicsXG4gICAgICAnaG91cl9hZ29fcGx1cmFsJzogJ19fY291bnRfXyB1cmVuIGdlbGVkZW4nLFxuICAgICAgJ2hvdXJfaW4nOiAnaW4gX19jb3VudF9fIHV1cicsXG4gICAgICAnaG91cl9pbl9wbHVyYWwnOiAnaW4gX19jb3VudF9fIHVyZW4nLFxuICAgICAgJ2RheV9hZ28nOiAnX19jb3VudF9fIGRhZyBnZWxlZGVuJyxcbiAgICAgICdkYXlfYWdvX3BsdXJhbCc6ICdfX2NvdW50X18gZGFnZW4gZ2VsZWRlbicsXG4gICAgICAnZGF5X2luJzogJ2luIF9fY291bnRfXyBkYWcnLFxuICAgICAgJ2RheV9pbl9wbHVyYWwnOiAnaW4gX19jb3VudF9fIGRhZ2VuJyxcbiAgICAgICdtb250aF9hZ28nOiAnX19jb3VudF9fIG1hYW5kIGdlbGVkZW4nLFxuICAgICAgJ21vbnRoX2Fnb19wbHVyYWwnOiAnX19jb3VudF9fIG1hYW5kZW4gZ2VsZWRlbicsXG4gICAgICAnbW9udGhfaW4nOiAnaW4gX19jb3VudF9fIG1hYW5kJyxcbiAgICAgICdtb250aF9pbl9wbHVyYWwnOiAnaW4gX19jb3VudF9fIG1hYW5kZW4nLFxuICAgICAgJ3llYXJfYWdvJzogJ19fY291bnRfXyBqYWFyIGdlbGVkZW4nLFxuICAgICAgJ3llYXJfYWdvX3BsdXJhbCc6ICdfX2NvdW50X18gamFyZW4gZ2VsZWRlbicsXG4gICAgICAneWVhcl9pbic6ICdpbiBfX2NvdW50X18gamFhcicsXG4gICAgICAneWVhcl9pbl9wbHVyYWwnOiAnaW4gX19jb3VudF9fIGphcmVuJ1xuICAgIH1cbiAgfSxcbiAgZnI6IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgJ25vdyc6ICdtYWludGVuYW50JyxcbiAgICAgICdzZWNvbmRfYWdvJzogJ2lsIHkgYSBfX2NvdW50X18gc2Vjb25kZScsXG4gICAgICAnc2Vjb25kX2Fnb19wbHVyYWwnOiAnaWwgeSBhIF9fY291bnRfXyBzZWNvbmRlcycsXG4gICAgICAnc2Vjb25kX2luJzogJ2RhbnMgX19jb3VudF9fIHNlY29uZGUnLFxuICAgICAgJ3NlY29uZF9pbl9wbHVyYWwnOiAnZGFucyBfX2NvdW50X18gc2Vjb25kZXMnLFxuICAgICAgJ21pbnV0ZV9hZ28nOiAnaWwgeSBhIF9fY291bnRfXyBtaW51dGUnLFxuICAgICAgJ21pbnV0ZV9hZ29fcGx1cmFsJzogJ2lsIHkgYSBfX2NvdW50X18gbWludXRlcycsXG4gICAgICAnbWludXRlX2luJzogJ2RhbnMgX19jb3VudF9fIG1pbnV0ZScsXG4gICAgICAnbWludXRlX2luX3BsdXJhbCc6ICdkYW5zIF9fY291bnRfXyBtaW51dGVzJyxcbiAgICAgICdob3VyX2Fnbyc6ICdpbCB5IGEgX19jb3VudF9fIGhldXJlJyxcbiAgICAgICdob3VyX2Fnb19wbHVyYWwnOiAnaWwgeSBhIF9fY291bnRfXyBoZXVyZXMnLFxuICAgICAgJ2hvdXJfaW4nOiAnZGFucyBfX2NvdW50X18gaGV1cmUnLFxuICAgICAgJ2hvdXJfaW5fcGx1cmFsJzogJ2RhbnMgX19jb3VudF9fIGhldXJlcycsXG4gICAgICAnZGF5X2Fnbyc6ICdpbCB5IGEgX19jb3VudF9fIGpvdXInLFxuICAgICAgJ2RheV9hZ29fcGx1cmFsJzogJ2lsIHkgYSBfX2NvdW50X18gam91cnMnLFxuICAgICAgJ2RheV9pbic6ICdkYW5zIF9fY291bnRfXyBqb3VyJyxcbiAgICAgICdkYXlfaW5fcGx1cmFsJzogJ2RhbnMgX19jb3VudF9fIGpvdXJzJyxcbiAgICAgICdtb250aF9hZ28nOiAnaWwgeSBhIF9fY291bnRfXyBtb2lzJyxcbiAgICAgICdtb250aF9hZ29fcGx1cmFsJzogJ2lsIHkgYSBfX2NvdW50X18gbW9pcycsXG4gICAgICAnbW9udGhfaW4nOiAnZGFucyBfX2NvdW50X18gbW9pcycsXG4gICAgICAnbW9udGhfaW5fcGx1cmFsJzogJ2RhbnMgX19jb3VudF9fIG1vaXMnLFxuICAgICAgJ3llYXJfYWdvJzogJ2lsIHkgYSBfX2NvdW50X18gYW4nLFxuICAgICAgJ3llYXJfYWdvX3BsdXJhbCc6ICdpbCB5IGEgX19jb3VudF9fIGFucycsXG4gICAgICAneWVhcl9pbic6ICdkYW5zIF9fY291bnRfXyBhbicsXG4gICAgICAneWVhcl9pbl9wbHVyYWwnOiAnZGFucyBfX2NvdW50X18gYW5zJ1xuICAgIH1cbiAgfSxcbiAgdGg6IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgJ25vdyc6ICfguYDguKHguLfguYjguK3guIHguLXguYknLFxuICAgICAgJ3NlY29uZF9hZ28nOiAnX19jb3VudF9fIOC4p+C4tOC4meC4suC4l+C4tSDguJfguLXguYjguJzguYjguLLguJnguKHguLInLFxuICAgICAgJ3NlY29uZF9hZ29fcGx1cmFsJzogJ19fY291bnRfXyDguKfguLTguJnguLLguJfguLUg4LiX4Li14LmI4Lic4LmI4Liy4LiZ4Lih4LiyJyxcbiAgICAgICdzZWNvbmRfaW4nOiAn4Lit4Li14LiBIF9fY291bnRfXyDguKfguLTguJnguLLguJfguLUnLFxuICAgICAgJ3NlY29uZF9pbl9wbHVyYWwnOiAn4Lit4Li14LiBIF9fY291bnRfXyDguKfguLTguJnguLLguJfguLUnLFxuICAgICAgJ21pbnV0ZV9hZ28nOiAnX19jb3VudF9fIOC4meC4suC4l+C4tSDguJfguLXguYjguJzguYjguLLguJnguKHguLInLFxuICAgICAgJ21pbnV0ZV9hZ29fcGx1cmFsJzogJ19fY291bnRfXyDguJnguLLguJfguLUg4LiX4Li14LmI4Lic4LmI4Liy4LiZ4Lih4LiyJyxcbiAgICAgICdtaW51dGVfaW4nOiAn4Lit4Li14LiBIF9fY291bnRfXyDguJnguLLguJfguLUnLFxuICAgICAgJ21pbnV0ZV9pbl9wbHVyYWwnOiAn4Lit4Li14LiBIF9fY291bnRfXyDguJnguLLguJfguLUnLFxuICAgICAgJ2hvdXJfYWdvJzogJ19fY291bnRfXyDguIrguLHguYjguKfguYLguKHguIcg4LiX4Li14LmI4Lic4LmI4Liy4LiZ4Lih4LiyJyxcbiAgICAgICdob3VyX2Fnb19wbHVyYWwnOiAnX19jb3VudF9fIOC4iuC4seC5iOC4p+C5guC4oeC4hyDguJfguLXguYjguJzguYjguLLguJnguKHguLInLFxuICAgICAgJ2hvdXJfaW4nOiAn4Lit4Li14LiBIF9fY291bnRfXyDguIrguLHguYjguKfguYLguKHguIcnLFxuICAgICAgJ2hvdXJfaW5fcGx1cmFsJzogJ+C4reC4teC4gSBfX2NvdW50X18g4LiK4Lix4LmI4Lin4LmC4Lih4LiHJyxcbiAgICAgICdkYXlfYWdvJzogJ19fY291bnRfXyDguKfguLHguJkg4LiX4Li14LmI4Lic4LmI4Liy4LiZ4Lih4LiyJyxcbiAgICAgICdkYXlfYWdvX3BsdXJhbCc6ICdfX2NvdW50X18g4Lin4Lix4LiZIOC4l+C4teC5iOC4nOC5iOC4suC4meC4oeC4sicsXG4gICAgICAnZGF5X2luJzogJ+C4reC4teC4gSBfX2NvdW50X18g4Lin4Lix4LiZJyxcbiAgICAgICdkYXlfaW5fcGx1cmFsJzogJ+C4reC4teC4gSBfX2NvdW50X18g4Lin4Lix4LiZJ1xuICAgIH1cbiAgfSxcbiAgc3Y6IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgJ25vdyc6ICdqdXN0IG51JyxcbiAgICAgICdzZWNvbmRfYWdvJzogJ19fY291bnRfXyBzZWt1bmQgc2VkYW4nLFxuICAgICAgJ3NlY29uZF9hZ29fcGx1cmFsJzogJ19fY291bnRfXyBzZWt1bmRlciBzZWRhbicsXG4gICAgICAnc2Vjb25kX2luJzogJ29tIF9fY291bnRfXyBzZWt1bmQnLFxuICAgICAgJ3NlY29uZF9pbl9wbHVyYWwnOiAnb20gX19jb3VudF9fIHNla3VuZGVyJyxcbiAgICAgICdtaW51dGVfYWdvJzogJ19fY291bnRfXyBtaW51dCBzZWRhbicsXG4gICAgICAnbWludXRlX2Fnb19wbHVyYWwnOiAnX19jb3VudF9fIG1pbnV0ZXIgc2VkYW4nLFxuICAgICAgJ21pbnV0ZV9pbic6ICdvbSBfX2NvdW50X18gbWludXQnLFxuICAgICAgJ21pbnV0ZV9pbl9wbHVyYWwnOiAnb20gX19jb3VudF9fIG1pbnV0ZXInLFxuICAgICAgJ2hvdXJfYWdvJzogJ19fY291bnRfXyB0aW1tZSBzZWRhbicsXG4gICAgICAnaG91cl9hZ29fcGx1cmFsJzogJ19fY291bnRfXyB0aW1tYXIgc2VkYW4nLFxuICAgICAgJ2hvdXJfaW4nOiAnb20gX19jb3VudF9fIHRpbW1lJyxcbiAgICAgICdob3VyX2luX3BsdXJhbCc6ICdvbSBfX2NvdW50X18gdGltbWFyJyxcbiAgICAgICdkYXlfYWdvJzogJ19fY291bnRfXyBkYWcgc2VkYW4nLFxuICAgICAgJ2RheV9hZ29fcGx1cmFsJzogJ19fY291bnRfXyBkYWdhciBzZWRhbicsXG4gICAgICAnZGF5X2luJzogJ29tIF9fY291bnRfXyBkYWcnLFxuICAgICAgJ2RheV9pbl9wbHVyYWwnOiAnb20gX19jb3VudF9fIGRhZ2FyJ1xuICAgIH1cbiAgfSxcbiAgZGE6IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgJ25vdyc6ICdsaWdlIG51JyxcbiAgICAgICdzZWNvbmRfYWdvJzogJ19fY291bnRfXyBzZWt1bmRlciBzaWRlbicsXG4gICAgICAnc2Vjb25kX2Fnb19wbHVyYWwnOiAnX19jb3VudF9fIHNla3VuZGVyIHNpZGVuJyxcbiAgICAgICdzZWNvbmRfaW4nOiAnb20gX19jb3VudF9fIHNla3VuZCcsXG4gICAgICAnc2Vjb25kX2luX3BsdXJhbCc6ICdvbSBfX2NvdW50X18gc2VrdW5kZXInLFxuICAgICAgJ21pbnV0ZV9hZ28nOiAnX19jb3VudF9fIG1pbnV0IHNpZGVuJyxcbiAgICAgICdtaW51dGVfYWdvX3BsdXJhbCc6ICdfX2NvdW50X18gbWludXR0ZXIgc2lkZW4nLFxuICAgICAgJ21pbnV0ZV9pbic6ICdvbSBfX2NvdW50X18gbWludXQnLFxuICAgICAgJ21pbnV0ZV9pbl9wbHVyYWwnOiAnb20gX19jb3VudF9fIG1pbnV0dGVyJyxcbiAgICAgICdob3VyX2Fnbyc6ICdfX2NvdW50X18gdGltZSBzaWRlbicsXG4gICAgICAnaG91cl9hZ29fcGx1cmFsJzogJ19fY291bnRfXyB0aW1lciBzaWRlbicsXG4gICAgICAnaG91cl9pbic6ICdvbSBfX2NvdW50X18gdGltZScsXG4gICAgICAnaG91cl9pbl9wbHVyYWwnOiAnb20gX19jb3VudF9fIHRpbWVyJyxcbiAgICAgICdkYXlfYWdvJzogJ19fY291bnRfXyBkYWcgc2lkZW4nLFxuICAgICAgJ2RheV9hZ29fcGx1cmFsJzogJ19fY291bnRfXyBkYWdlIHNpZGVuJyxcbiAgICAgICdkYXlfaW4nOiAnb20gX19jb3VudF9fIGRhZycsXG4gICAgICAnZGF5X2luX3BsdXJhbCc6ICdvbSBfX2NvdW50X18gZGFnZSdcbiAgICB9XG4gIH0sXG4gIG5vOiB7XG4gICAgdHJhbnNsYXRpb246IHtcbiAgICAgICdub3cnOiAnYWtrdXJhdCBuw6UnLFxuICAgICAgJ3NlY29uZF9hZ28nOiAnX19jb3VudF9fIHNla3VuZCBzaWRlbicsXG4gICAgICAnc2Vjb25kX2Fnb19wbHVyYWwnOiAnX19jb3VudF9fIHNla3VuZGVyIHNpZGVuJyxcbiAgICAgICdzZWNvbmRfaW4nOiAnb20gX19jb3VudF9fIHNla3VuZCcsXG4gICAgICAnc2Vjb25kX2luX3BsdXJhbCc6ICdvbSBfX2NvdW50X18gc2VrdW5kZXInLFxuICAgICAgJ21pbnV0ZV9hZ28nOiAnX19jb3VudF9fIG1pbnV0dCBzaWRlbicsXG4gICAgICAnbWludXRlX2Fnb19wbHVyYWwnOiAnX19jb3VudF9fIG1pbnV0dGVyIHNpZGVuJyxcbiAgICAgICdtaW51dGVfaW4nOiAnb20gX19jb3VudF9fIG1pbnV0dCcsXG4gICAgICAnbWludXRlX2luX3BsdXJhbCc6ICdvbSBfX2NvdW50X18gbWludXR0ZXInLFxuICAgICAgJ2hvdXJfYWdvJzogJ19fY291bnRfXyB0aW1lIHNpZGVuJyxcbiAgICAgICdob3VyX2Fnb19wbHVyYWwnOiAnX19jb3VudF9fIHRpbWVyIHNpZGVuJyxcbiAgICAgICdob3VyX2luJzogJ29tIF9fY291bnRfXyB0aW1lJyxcbiAgICAgICdob3VyX2luX3BsdXJhbCc6ICdvbSBfX2NvdW50X18gdGltZXInLFxuICAgICAgJ2RheV9hZ28nOiAnX19jb3VudF9fIGRhZyBzaWRlbicsXG4gICAgICAnZGF5X2Fnb19wbHVyYWwnOiAnX19jb3VudF9fIGRhZ2VyIHNpZGVuJyxcbiAgICAgICdkYXlfaW4nOiAnb20gX19jb3VudF9fIGRhZycsXG4gICAgICAnZGF5X2luX3BsdXJhbCc6ICdvbSBfX2NvdW50X18gZGFnZXInXG4gICAgfVxuICB9LFxuICBqYToge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICAnbm93JzogJ+OBn+OBo+OBn+S7iicsXG4gICAgICAnc2Vjb25kX2Fnbyc6ICdfX2NvdW50X18g56eS5YmNJyxcbiAgICAgICdzZWNvbmRfYWdvX3BsdXJhbCc6ICdfX2NvdW50X18g56eS5YmNJyxcbiAgICAgICdzZWNvbmRfaW4nOiAn44GC44GoIF9fY291bnRfXyDnp5InLFxuICAgICAgJ3NlY29uZF9pbl9wbHVyYWwnOiAn44GC44GoIF9fY291bnRfXyDnp5InLFxuICAgICAgJ21pbnV0ZV9hZ28nOiAnX19jb3VudF9fIOWIhuWJjScsXG4gICAgICAnbWludXRlX2Fnb19wbHVyYWwnOiAnX19jb3VudF9fIOWIhuWJjScsXG4gICAgICAnbWludXRlX2luJzogJ+OBguOBqCBfX2NvdW50X18g5YiGJyxcbiAgICAgICdtaW51dGVfaW5fcGx1cmFsJzogJ+OBguOBqCBfX2NvdW50X18g5YiGJyxcbiAgICAgICdob3VyX2Fnbyc6ICdfX2NvdW50X18g5pmC6ZaT5YmNJyxcbiAgICAgICdob3VyX2Fnb19wbHVyYWwnOiAnX19jb3VudF9fIOaZgumWk+WJjScsXG4gICAgICAnaG91cl9pbic6ICfjgYLjgaggX19jb3VudF9fIOaZgumWkycsXG4gICAgICAnaG91cl9pbl9wbHVyYWwnOiAn44GC44GoIF9fY291bnRfXyDmmYLplpMnLFxuICAgICAgJ2RheV9hZ28nOiAnX19jb3VudF9fIOaXpemWk+WJjScsXG4gICAgICAnZGF5X2Fnb19wbHVyYWwnOiAnX19jb3VudF9fIOaXpemWk+WJjScsXG4gICAgICAnZGF5X2luJzogJ+OBguOBqCBfX2NvdW50X18g5pel6ZaTJyxcbiAgICAgICdkYXlfaW5fcGx1cmFsJzogJ+OBguOBqCBfX2NvdW50X18g5pel6ZaTJyxcbiAgICAgICdtb250aF9hZ28nOiAnX19jb3VudF9fIOODtuaciOWJjScsXG4gICAgICAnbW9udGhfYWdvX3BsdXJhbCc6ICdfX2NvdW50X18g44O25pyI5YmNJyxcbiAgICAgICdtb250aF9pbic6ICfjgYLjgaggX19jb3VudF9fIOODtuaciOWJjScsXG4gICAgICAnbW9udGhfaW5fcGx1cmFsJzogJ+OBguOBqCBfX2NvdW50X18g44O25pyI5YmNJyxcbiAgICAgICd5ZWFyX2Fnbyc6ICdfX2NvdW50X18g5bm05YmNJyxcbiAgICAgICd5ZWFyX2Fnb19wbHVyYWwnOiAnX19jb3VudF9fIOW5tOWJjScsXG4gICAgICAneWVhcl9pbic6ICfjgYLjgaggX19jb3VudF9fIOW5tCcsXG4gICAgICAneWVhcl9pbl9wbHVyYWwnOiAn44GC44GoIF9fY291bnRfXyDlubQnXG4gICAgfVxuICB9LFxuICBqcDoge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICAnbm93JzogJ+OBn+OBo+OBn+S7iicsXG4gICAgICAnc2Vjb25kX2Fnbyc6ICdfX2NvdW50X18g56eS5YmNJyxcbiAgICAgICdzZWNvbmRfYWdvX3BsdXJhbCc6ICdfX2NvdW50X18g56eS5YmNJyxcbiAgICAgICdzZWNvbmRfaW4nOiAn44GC44GoIF9fY291bnRfXyDnp5InLFxuICAgICAgJ3NlY29uZF9pbl9wbHVyYWwnOiAn44GC44GoIF9fY291bnRfXyDnp5InLFxuICAgICAgJ21pbnV0ZV9hZ28nOiAnX19jb3VudF9fIOWIhuWJjScsXG4gICAgICAnbWludXRlX2Fnb19wbHVyYWwnOiAnX19jb3VudF9fIOWIhuWJjScsXG4gICAgICAnbWludXRlX2luJzogJ+OBguOBqCBfX2NvdW50X18g5YiGJyxcbiAgICAgICdtaW51dGVfaW5fcGx1cmFsJzogJ+OBguOBqCBfX2NvdW50X18g5YiGJyxcbiAgICAgICdob3VyX2Fnbyc6ICdfX2NvdW50X18g5pmC6ZaT5YmNJyxcbiAgICAgICdob3VyX2Fnb19wbHVyYWwnOiAnX19jb3VudF9fIOaZgumWk+WJjScsXG4gICAgICAnaG91cl9pbic6ICfjgYLjgaggX19jb3VudF9fIOaZgumWkycsXG4gICAgICAnaG91cl9pbl9wbHVyYWwnOiAn44GC44GoIF9fY291bnRfXyDmmYLplpMnLFxuICAgICAgJ2RheV9hZ28nOiAnX19jb3VudF9fIOaXpemWk+WJjScsXG4gICAgICAnZGF5X2Fnb19wbHVyYWwnOiAnX19jb3VudF9fIOaXpemWk+WJjScsXG4gICAgICAnZGF5X2luJzogJ+OBguOBqCBfX2NvdW50X18g5pel6ZaTJyxcbiAgICAgICdkYXlfaW5fcGx1cmFsJzogJ+OBguOBqCBfX2NvdW50X18g5pel6ZaTJyxcbiAgICAgICdtb250aF9hZ28nOiAnX19jb3VudF9fIOODtuaciOWJjScsXG4gICAgICAnbW9udGhfYWdvX3BsdXJhbCc6ICdfX2NvdW50X18g44O25pyI5YmNJyxcbiAgICAgICdtb250aF9pbic6ICfjgYLjgaggX19jb3VudF9fIOODtuaciOWJjScsXG4gICAgICAnbW9udGhfaW5fcGx1cmFsJzogJ+OBguOBqCBfX2NvdW50X18g44O25pyI5YmNJyxcbiAgICAgICd5ZWFyX2Fnbyc6ICdfX2NvdW50X18g5bm05YmNJyxcbiAgICAgICd5ZWFyX2Fnb19wbHVyYWwnOiAnX19jb3VudF9fIOW5tOWJjScsXG4gICAgICAneWVhcl9pbic6ICfjgYLjgaggX19jb3VudF9fIOW5tCcsXG4gICAgICAneWVhcl9pbl9wbHVyYWwnOiAn44GC44GoIF9fY291bnRfXyDlubQnXG4gICAgfVxuICB9LFxuICBwdDoge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICAnbm93JzogJ25lc3RlIGV4YXRvIG1vbWVudG8nLFxuICAgICAgJ3NlY29uZF9hZ28nOiAnX19jb3VudF9fIHNlZ3VuZG8gYXRyw6FzJyxcbiAgICAgICdzZWNvbmRfYWdvX3BsdXJhbCc6ICdfX2NvdW50X18gc2VndW5kb3MgYXRyw6FzJyxcbiAgICAgICdzZWNvbmRfaW4nOiAnZW0gX19jb3VudF9fIHNlZ3VuZG8nLFxuICAgICAgJ3NlY29uZF9pbl9wbHVyYWwnOiAnZW0gX19jb3VudF9fIHNlZ3VuZG9zJyxcbiAgICAgICdtaW51dGVfYWdvJzogJ19fY291bnRfXyBtaW51dG8gYXRyw6FzJyxcbiAgICAgICdtaW51dGVfYWdvX3BsdXJhbCc6ICdfX2NvdW50X18gbWludXRvcyBhdHLDoXMnLFxuICAgICAgJ21pbnV0ZV9pbic6ICdlbSBfX2NvdW50X18gbWludXRvJyxcbiAgICAgICdtaW51dGVfaW5fcGx1cmFsJzogJ2VtIF9fY291bnRfXyBtaW51dG9zJyxcbiAgICAgICdob3VyX2Fnbyc6ICdfX2NvdW50X18gaG9yYSBhdHLDoXMnLFxuICAgICAgJ2hvdXJfYWdvX3BsdXJhbCc6ICdfX2NvdW50X18gaG9yYXMgYXRyw6FzJyxcbiAgICAgICdob3VyX2luJzogJ2VtIF9fY291bnRfXyBob3JhJyxcbiAgICAgICdob3VyX2luX3BsdXJhbCc6ICdlbSBfX2NvdW50X18gaG9yYXMnLFxuICAgICAgJ2RheV9hZ28nOiAnX19jb3VudF9fIGRpYSBhdHLDoXMnLFxuICAgICAgJ2RheV9hZ29fcGx1cmFsJzogJ19fY291bnRfXyBkaWFzIGF0csOhcycsXG4gICAgICAnZGF5X2luJzogJ2VtIF9fY291bnRfXyBkaWEnLFxuICAgICAgJ2RheV9pbl9wbHVyYWwnOiAnZW0gX19jb3VudF9fIGRpYXMnLFxuICAgICAgJ21vbnRoX2Fnbyc6ICdfX2NvdW50X18gbcOqcyBhdHLDoXMnLFxuICAgICAgJ21vbnRoX2Fnb19wbHVyYWwnOiAnX19jb3VudF9fIG1lc2VzIGF0csOhcycsXG4gICAgICAnbW9udGhfaW4nOiAnZW0gX19jb3VudF9fIG3DqnMnLFxuICAgICAgJ21vbnRoX2luX3BsdXJhbCc6ICdlbSBfX2NvdW50X18gbWVzZXMnLFxuICAgICAgJ3llYXJfYWdvJzogJ19fY291bnRfXyBhbm8gYXRyw6FzJyxcbiAgICAgICd5ZWFyX2Fnb19wbHVyYWwnOiAnX19jb3VudF9fIGFub3MgYXRyw6FzJyxcbiAgICAgICd5ZWFyX2luJzogJ2VtIF9fY291bnRfXyBhbm8nLFxuICAgICAgJ3llYXJfaW5fcGx1cmFsJzogJ2VtIF9fY291bnRfXyBhbm9zJ1xuICAgIH1cbiAgfSxcbiAgemg6IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgJ25vdyc6ICfliJrmiY0nLFxuICAgICAgJ3NlY29uZF9hZ28nOiAnX19jb3VudF9fIOenkumSn+WJjScsXG4gICAgICAnc2Vjb25kX2Fnb19wbHVyYWwnOiAnX19jb3VudF9fIOenkumSn+WJjScsXG4gICAgICAnc2Vjb25kX2luJzogJ19fY291bnRfXyDnp5LlhoUnLFxuICAgICAgJ3NlY29uZF9pbl9wbHVyYWwnOiAnX19jb3VudF9fIOenkuWGhScsXG4gICAgICAnbWludXRlX2Fnbyc6ICdfX2NvdW50X18g5YiG6ZKf5YmNJyxcbiAgICAgICdtaW51dGVfYWdvX3BsdXJhbCc6ICdfX2NvdW50X18g5YiG6ZKf5YmNJyxcbiAgICAgICdtaW51dGVfaW4nOiAnX19jb3VudF9fIOWIhumSn+WGhScsXG4gICAgICAnbWludXRlX2luX3BsdXJhbCc6ICdfX2NvdW50X18g5YiG6ZKf5YaFJyxcbiAgICAgICdob3VyX2Fnbyc6ICdfX2NvdW50X18g5bCP5pe25YmNJyxcbiAgICAgICdob3VyX2Fnb19wbHVyYWwnOiAnX19jb3VudF9fIOWwj+aXtuWJjScsXG4gICAgICAnaG91cl9pbic6ICdfX2NvdW50X18g5bCP5pe25YaFJyxcbiAgICAgICdob3VyX2luX3BsdXJhbCc6ICdfX2NvdW50X18g5bCP5pe25YaFJyxcbiAgICAgICdkYXlfYWdvJzogJ19fY291bnRfXyDlpKnliY0nLFxuICAgICAgJ2RheV9hZ29fcGx1cmFsJzogJ19fY291bnRfXyDlpKnliY0nLFxuICAgICAgJ2RheV9pbic6ICdfX2NvdW50X18g5aSp5YaFJyxcbiAgICAgICdkYXlfaW5fcGx1cmFsJzogJ19fY291bnRfXyDlpKnlhoUnLFxuICAgICAgJ21vbnRoX2Fnbyc6ICdfX2NvdW50X18g5pyI5YmNJyxcbiAgICAgICdtb250aF9hZ29fcGx1cmFsJzogJ19fY291bnRfXyDmnIjliY0nLFxuICAgICAgJ21vbnRoX2luJzogJ19fY291bnRfXyDmnIjlhoUnLFxuICAgICAgJ21vbnRoX2luX3BsdXJhbCc6ICdfX2NvdW50X18g5pyI5YaFJyxcbiAgICAgICd5ZWFyX2Fnbyc6ICdfX2NvdW50X18g5bm05YmNJyxcbiAgICAgICd5ZWFyX2Fnb19wbHVyYWwnOiAnX19jb3VudF9fIOW5tOWJjScsXG4gICAgICAneWVhcl9pbic6ICdfX2NvdW50X18g5bm05YaFJyxcbiAgICAgICd5ZWFyX2luX3BsdXJhbCc6ICdfX2NvdW50X18g5bm05YaFJ1xuICAgIH1cbiAgfSxcbiAgJ3poLUNOJzoge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICAnbm93JzogJ+WImuaJjScsXG4gICAgICAnc2Vjb25kX2Fnbyc6ICdfX2NvdW50X18g56eS6ZKf5YmNJyxcbiAgICAgICdzZWNvbmRfYWdvX3BsdXJhbCc6ICdfX2NvdW50X18g56eS6ZKf5YmNJyxcbiAgICAgICdzZWNvbmRfaW4nOiAnX19jb3VudF9fIOenkuWGhScsXG4gICAgICAnc2Vjb25kX2luX3BsdXJhbCc6ICdfX2NvdW50X18g56eS5YaFJyxcbiAgICAgICdtaW51dGVfYWdvJzogJ19fY291bnRfXyDliIbpkp/liY0nLFxuICAgICAgJ21pbnV0ZV9hZ29fcGx1cmFsJzogJ19fY291bnRfXyDliIbpkp/liY0nLFxuICAgICAgJ21pbnV0ZV9pbic6ICdfX2NvdW50X18g5YiG6ZKf5YaFJyxcbiAgICAgICdtaW51dGVfaW5fcGx1cmFsJzogJ19fY291bnRfXyDliIbpkp/lhoUnLFxuICAgICAgJ2hvdXJfYWdvJzogJ19fY291bnRfXyDlsI/ml7bliY0nLFxuICAgICAgJ2hvdXJfYWdvX3BsdXJhbCc6ICdfX2NvdW50X18g5bCP5pe25YmNJyxcbiAgICAgICdob3VyX2luJzogJ19fY291bnRfXyDlsI/ml7blhoUnLFxuICAgICAgJ2hvdXJfaW5fcGx1cmFsJzogJ19fY291bnRfXyDlsI/ml7blhoUnLFxuICAgICAgJ2RheV9hZ28nOiAnX19jb3VudF9fIOWkqeWJjScsXG4gICAgICAnZGF5X2Fnb19wbHVyYWwnOiAnX19jb3VudF9fIOWkqeWJjScsXG4gICAgICAnZGF5X2luJzogJ19fY291bnRfXyDlpKnlhoUnLFxuICAgICAgJ2RheV9pbl9wbHVyYWwnOiAnX19jb3VudF9fIOWkqeWGhScsXG4gICAgICAnbW9udGhfYWdvJzogJ19fY291bnRfXyDmnIjliY0nLFxuICAgICAgJ21vbnRoX2Fnb19wbHVyYWwnOiAnX19jb3VudF9fIOaciOWJjScsXG4gICAgICAnbW9udGhfaW4nOiAnX19jb3VudF9fIOaciOWGhScsXG4gICAgICAnbW9udGhfaW5fcGx1cmFsJzogJ19fY291bnRfXyDmnIjlhoUnLFxuICAgICAgJ3llYXJfYWdvJzogJ19fY291bnRfXyDlubTliY0nLFxuICAgICAgJ3llYXJfYWdvX3BsdXJhbCc6ICdfX2NvdW50X18g5bm05YmNJyxcbiAgICAgICd5ZWFyX2luJzogJ19fY291bnRfXyDlubTlhoUnLFxuICAgICAgJ3llYXJfaW5fcGx1cmFsJzogJ19fY291bnRfXyDlubTlhoUnXG4gICAgfVxuICB9LFxuICAnemgtSEsnOiB7XG4gICAgdHJhbnNsYXRpb246IHtcbiAgICAgICdub3cnOiAn5Ymb5omNJyxcbiAgICAgICdzZWNvbmRfYWdvJzogJ19fY291bnRfXyDnp5LpkJjliY0nLFxuICAgICAgJ3NlY29uZF9hZ29fcGx1cmFsJzogJ19fY291bnRfXyDnp5LpkJjliY0nLFxuICAgICAgJ3NlY29uZF9pbic6ICdfX2NvdW50X18g56eS5YWnJyxcbiAgICAgICdzZWNvbmRfaW5fcGx1cmFsJzogJ19fY291bnRfXyDnp5LlhacnLFxuICAgICAgJ21pbnV0ZV9hZ28nOiAnX19jb3VudF9fIOWIhumQmOWJjScsXG4gICAgICAnbWludXRlX2Fnb19wbHVyYWwnOiAnX19jb3VudF9fIOWIhumQmOWJjScsXG4gICAgICAnbWludXRlX2luJzogJ19fY291bnRfXyDliIbpkJjlhacnLFxuICAgICAgJ21pbnV0ZV9pbl9wbHVyYWwnOiAnX19jb3VudF9fIOWIhumQmOWFpycsXG4gICAgICAnaG91cl9hZ28nOiAnX19jb3VudF9fIOWwj+aZguWJjScsXG4gICAgICAnaG91cl9hZ29fcGx1cmFsJzogJ19fY291bnRfXyDlsI/mmYLliY0nLFxuICAgICAgJ2hvdXJfaW4nOiAnX19jb3VudF9fIOWwj+aZguWFpycsXG4gICAgICAnaG91cl9pbl9wbHVyYWwnOiAnX19jb3VudF9fIOWwj+aZguWFpycsXG4gICAgICAnZGF5X2Fnbyc6ICdfX2NvdW50X18g5aSp5YmNJyxcbiAgICAgICdkYXlfYWdvX3BsdXJhbCc6ICdfX2NvdW50X18g5aSp5YmNJyxcbiAgICAgICdkYXlfaW4nOiAnX19jb3VudF9fIOWkqeWFpycsXG4gICAgICAnZGF5X2luX3BsdXJhbCc6ICdfX2NvdW50X18g5aSp5YWnJyxcbiAgICAgICdtb250aF9hZ28nOiAnX19jb3VudF9fIOaciOWJjScsXG4gICAgICAnbW9udGhfYWdvX3BsdXJhbCc6ICdfX2NvdW50X18g5pyI5YmNJyxcbiAgICAgICdtb250aF9pbic6ICdfX2NvdW50X18g5pyI5YWnJyxcbiAgICAgICdtb250aF9pbl9wbHVyYWwnOiAnX19jb3VudF9fIOaciOWFpycsXG4gICAgICAneWVhcl9hZ28nOiAnX19jb3VudF9fIOW5tOWJjScsXG4gICAgICAneWVhcl9hZ29fcGx1cmFsJzogJ19fY291bnRfXyDlubTliY0nLFxuICAgICAgJ3llYXJfaW4nOiAnX19jb3VudF9fIOW5tOWFpycsXG4gICAgICAneWVhcl9pbl9wbHVyYWwnOiAnX19jb3VudF9fIOW5tOWFpydcbiAgICB9XG4gIH0sXG4gICd6aC1UVyc6IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgJ25vdyc6ICfliZvmiY0nLFxuICAgICAgJ3NlY29uZF9hZ28nOiAnX19jb3VudF9fIOenkumQmOWJjScsXG4gICAgICAnc2Vjb25kX2Fnb19wbHVyYWwnOiAnX19jb3VudF9fIOenkumQmOWJjScsXG4gICAgICAnc2Vjb25kX2luJzogJ19fY291bnRfXyDnp5LlhacnLFxuICAgICAgJ3NlY29uZF9pbl9wbHVyYWwnOiAnX19jb3VudF9fIOenkuWFpycsXG4gICAgICAnbWludXRlX2Fnbyc6ICdfX2NvdW50X18g5YiG6ZCY5YmNJyxcbiAgICAgICdtaW51dGVfYWdvX3BsdXJhbCc6ICdfX2NvdW50X18g5YiG6ZCY5YmNJyxcbiAgICAgICdtaW51dGVfaW4nOiAnX19jb3VudF9fIOWIhumQmOWFpycsXG4gICAgICAnbWludXRlX2luX3BsdXJhbCc6ICdfX2NvdW50X18g5YiG6ZCY5YWnJyxcbiAgICAgICdob3VyX2Fnbyc6ICdfX2NvdW50X18g5bCP5pmC5YmNJyxcbiAgICAgICdob3VyX2Fnb19wbHVyYWwnOiAnX19jb3VudF9fIOWwj+aZguWJjScsXG4gICAgICAnaG91cl9pbic6ICdfX2NvdW50X18g5bCP5pmC5YWnJyxcbiAgICAgICdob3VyX2luX3BsdXJhbCc6ICdfX2NvdW50X18g5bCP5pmC5YWnJyxcbiAgICAgICdkYXlfYWdvJzogJ19fY291bnRfXyDlpKnliY0nLFxuICAgICAgJ2RheV9hZ29fcGx1cmFsJzogJ19fY291bnRfXyDlpKnliY0nLFxuICAgICAgJ2RheV9pbic6ICdfX2NvdW50X18g5aSp5YWnJyxcbiAgICAgICdkYXlfaW5fcGx1cmFsJzogJ19fY291bnRfXyDlpKnlhacnLFxuICAgICAgJ21vbnRoX2Fnbyc6ICdfX2NvdW50X18g5pyI5YmNJyxcbiAgICAgICdtb250aF9hZ29fcGx1cmFsJzogJ19fY291bnRfXyDmnIjliY0nLFxuICAgICAgJ21vbnRoX2luJzogJ19fY291bnRfXyDmnIjlhacnLFxuICAgICAgJ21vbnRoX2luX3BsdXJhbCc6ICdfX2NvdW50X18g5pyI5YWnJyxcbiAgICAgICd5ZWFyX2Fnbyc6ICdfX2NvdW50X18g5bm05YmNJyxcbiAgICAgICd5ZWFyX2Fnb19wbHVyYWwnOiAnX19jb3VudF9fIOW5tOWJjScsXG4gICAgICAneWVhcl9pbic6ICdfX2NvdW50X18g5bm05YWnJyxcbiAgICAgICd5ZWFyX2luX3BsdXJhbCc6ICdfX2NvdW50X18g5bm05YWnJ1xuICAgIH1cbiAgfVxufTsiLCJcblxuaW1wb3J0IHsgSTE4TiB9IGZyb20gJy4vaTE4bic7XG5pbXBvcnQgeyB0cmFuc2xhdGlvbnMgfSBmcm9tICcuL2RlZmF1bHRUcmFuc2xhdGlvbnMvcmVsYXRpdmUudGltZSc7XG5pbXBvcnQgeyBFdmVudEFnZ3JlZ2F0b3IgfSBmcm9tICdhdXJlbGlhLWV2ZW50LWFnZ3JlZ2F0b3InO1xuXG5leHBvcnQgdmFyIFJlbGF0aXZlVGltZSA9IGZ1bmN0aW9uICgpIHtcbiAgUmVsYXRpdmVUaW1lLmluamVjdCA9IGZ1bmN0aW9uIGluamVjdCgpIHtcbiAgICByZXR1cm4gW0kxOE4sIEV2ZW50QWdncmVnYXRvcl07XG4gIH07XG5cbiAgZnVuY3Rpb24gUmVsYXRpdmVUaW1lKGkxOG4sIGVhKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIFxuXG4gICAgdGhpcy5zZXJ2aWNlID0gaTE4bjtcbiAgICB0aGlzLmVhID0gZWE7XG5cbiAgICB0aGlzLnNlcnZpY2UuaTE4bmV4dFJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5zZXR1cCgpO1xuICAgIH0pO1xuICAgIHRoaXMuZWEuc3Vic2NyaWJlKCdpMThuOmxvY2FsZTpjaGFuZ2VkJywgZnVuY3Rpb24gKGxvY2FsZXMpIHtcbiAgICAgIF90aGlzLnNldHVwKGxvY2FsZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgUmVsYXRpdmVUaW1lLnByb3RvdHlwZS5zZXR1cCA9IGZ1bmN0aW9uIHNldHVwKGxvY2FsZXMpIHtcbiAgICB2YXIgdHJhbnMgPSB0cmFuc2xhdGlvbnMuZGVmYXVsdCB8fCB0cmFuc2xhdGlvbnM7XG4gICAgdmFyIGZhbGxiYWNrTG5nID0gdGhpcy5zZXJ2aWNlLmkxOG5leHQuZmFsbGJhY2tMbmc7XG5cbiAgICB2YXIgYWx0ZXJuYXRlRmIgPSBmYWxsYmFja0xuZyB8fCB0aGlzLnNlcnZpY2UuaTE4bmV4dC5vcHRpb25zLmZhbGxiYWNrTG5nO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFsdGVybmF0ZUZiKSAmJiBhbHRlcm5hdGVGYi5sZW5ndGggPiAwKSB7XG4gICAgICBhbHRlcm5hdGVGYiA9IGFsdGVybmF0ZUZiWzBdO1xuICAgIH1cblxuICAgIHZhciBrZXkgPSAobG9jYWxlcyAmJiBsb2NhbGVzLm5ld1ZhbHVlID8gbG9jYWxlcy5uZXdWYWx1ZSA6IHRoaXMuc2VydmljZS5nZXRMb2NhbGUoKSkgfHwgYWx0ZXJuYXRlRmI7XG5cbiAgICB2YXIgaW5kZXggPSAwO1xuXG4gICAgaWYgKChpbmRleCA9IGtleS5pbmRleE9mKCctJykpID49IDApIHtcbiAgICAgIHZhciBiYXNlTG9jYWxlID0ga2V5LnN1YnN0cmluZygwLCBpbmRleCk7XG5cbiAgICAgIGlmICh0cmFuc1tiYXNlTG9jYWxlXSkge1xuICAgICAgICB0aGlzLmFkZFRyYW5zbGF0aW9uUmVzb3VyY2UoYmFzZUxvY2FsZSwgdHJhbnNbYmFzZUxvY2FsZV0udHJhbnNsYXRpb24pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0cmFuc1trZXldKSB7XG4gICAgICB0aGlzLmFkZFRyYW5zbGF0aW9uUmVzb3VyY2Uoa2V5LCB0cmFuc1trZXldLnRyYW5zbGF0aW9uKTtcbiAgICB9XG4gICAgaWYgKHRyYW5zW2ZhbGxiYWNrTG5nXSkge1xuICAgICAgdGhpcy5hZGRUcmFuc2xhdGlvblJlc291cmNlKGtleSwgdHJhbnNbZmFsbGJhY2tMbmddLnRyYW5zbGF0aW9uKTtcbiAgICB9XG4gIH07XG5cbiAgUmVsYXRpdmVUaW1lLnByb3RvdHlwZS5hZGRUcmFuc2xhdGlvblJlc291cmNlID0gZnVuY3Rpb24gYWRkVHJhbnNsYXRpb25SZXNvdXJjZShrZXksIHRyYW5zbGF0aW9uKSB7XG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLnNlcnZpY2UuaTE4bmV4dC5vcHRpb25zO1xuXG4gICAgaWYgKG9wdGlvbnMuaW50ZXJwb2xhdGlvbiAmJiBvcHRpb25zLmludGVycG9sYXRpb24ucHJlZml4ICE9PSAnX18nIHx8IG9wdGlvbnMuaW50ZXJwb2xhdGlvbi5zdWZmaXggIT09ICdfXycpIHtcbiAgICAgIGZvciAodmFyIHN1YmtleSBpbiB0cmFuc2xhdGlvbikge1xuICAgICAgICB0cmFuc2xhdGlvbltzdWJrZXldID0gdHJhbnNsYXRpb25bc3Via2V5XS5yZXBsYWNlKCdfX2NvdW50X18nLCAob3B0aW9ucy5pbnRlcnBvbGF0aW9uLnByZWZpeCB8fCAne3snKSArICdjb3VudCcgKyAob3B0aW9ucy5pbnRlcnBvbGF0aW9uLnN1ZmZpeCB8fCAnfX0nKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zZXJ2aWNlLmkxOG5leHQuYWRkUmVzb3VyY2VzKGtleSwgb3B0aW9ucy5kZWZhdWx0TlMsIHRyYW5zbGF0aW9uKTtcbiAgfTtcblxuICBSZWxhdGl2ZVRpbWUucHJvdG90eXBlLmdldFJlbGF0aXZlVGltZSA9IGZ1bmN0aW9uIGdldFJlbGF0aXZlVGltZSh0aW1lKSB7XG4gICAgdmFyIG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgdmFyIGRpZmYgPSBub3cuZ2V0VGltZSgpIC0gdGltZS5nZXRUaW1lKCk7XG5cbiAgICB2YXIgdGltZURpZmYgPSB0aGlzLmdldFRpbWVEaWZmRGVzY3JpcHRpb24oZGlmZiwgJ3llYXInLCAzMTEwNDAwMDAwMCk7XG4gICAgaWYgKCF0aW1lRGlmZikge1xuICAgICAgdGltZURpZmYgPSB0aGlzLmdldFRpbWVEaWZmRGVzY3JpcHRpb24oZGlmZiwgJ21vbnRoJywgMjU5MjAwMDAwMCk7XG4gICAgICBpZiAoIXRpbWVEaWZmKSB7XG4gICAgICAgIHRpbWVEaWZmID0gdGhpcy5nZXRUaW1lRGlmZkRlc2NyaXB0aW9uKGRpZmYsICdkYXknLCA4NjQwMDAwMCk7XG4gICAgICAgIGlmICghdGltZURpZmYpIHtcbiAgICAgICAgICB0aW1lRGlmZiA9IHRoaXMuZ2V0VGltZURpZmZEZXNjcmlwdGlvbihkaWZmLCAnaG91cicsIDM2MDAwMDApO1xuICAgICAgICAgIGlmICghdGltZURpZmYpIHtcbiAgICAgICAgICAgIHRpbWVEaWZmID0gdGhpcy5nZXRUaW1lRGlmZkRlc2NyaXB0aW9uKGRpZmYsICdtaW51dGUnLCA2MDAwMCk7XG4gICAgICAgICAgICBpZiAoIXRpbWVEaWZmKSB7XG4gICAgICAgICAgICAgIHRpbWVEaWZmID0gdGhpcy5nZXRUaW1lRGlmZkRlc2NyaXB0aW9uKGRpZmYsICdzZWNvbmQnLCAxMDAwKTtcbiAgICAgICAgICAgICAgaWYgKCF0aW1lRGlmZikge1xuICAgICAgICAgICAgICAgIHRpbWVEaWZmID0gdGhpcy5zZXJ2aWNlLnRyKCdub3cnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aW1lRGlmZjtcbiAgfTtcblxuICBSZWxhdGl2ZVRpbWUucHJvdG90eXBlLmdldFRpbWVEaWZmRGVzY3JpcHRpb24gPSBmdW5jdGlvbiBnZXRUaW1lRGlmZkRlc2NyaXB0aW9uKGRpZmYsIHVuaXQsIHRpbWVEaXZpc29yKSB7XG4gICAgdmFyIHVuaXRBbW91bnQgPSAoZGlmZiAvIHRpbWVEaXZpc29yKS50b0ZpeGVkKDApO1xuICAgIGlmICh1bml0QW1vdW50ID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VydmljZS50cih1bml0LCB7IGNvdW50OiBwYXJzZUludCh1bml0QW1vdW50LCAxMCksIGNvbnRleHQ6ICdhZ28nIH0pO1xuICAgIH0gZWxzZSBpZiAodW5pdEFtb3VudCA8IDApIHtcbiAgICAgIHZhciBhYnMgPSBNYXRoLmFicyh1bml0QW1vdW50KTtcbiAgICAgIHJldHVybiB0aGlzLnNlcnZpY2UudHIodW5pdCwgeyBjb3VudDogYWJzLCBjb250ZXh0OiAnaW4nIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIHJldHVybiBSZWxhdGl2ZVRpbWU7XG59KCk7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///16\n")},160:function(module,exports,__webpack_require__){"use strict";eval('\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar SearchType;\r\n(function (SearchType) {\r\n    SearchType[SearchType["None"] = -1] = "None";\r\n    SearchType[SearchType["Destinations"] = 1] = "Destinations";\r\n    SearchType[SearchType["Regions"] = 2] = "Regions";\r\n    SearchType[SearchType["VacationStyles"] = 3] = "VacationStyles";\r\n    SearchType[SearchType["Countries"] = 4] = "Countries";\r\n    SearchType[SearchType["StatesProvinces"] = 5] = "StatesProvinces";\r\n    SearchType[SearchType["HotelsResorts"] = 6] = "HotelsResorts";\r\n    SearchType[SearchType["Accommodations"] = 7] = "Accommodations";\r\n    SearchType[SearchType["Experiences"] = 8] = "Experiences";\r\n})(SearchType = exports.SearchType || (exports.SearchType = {}));\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy90cmlwLWZpbmRlci9TZWFyY2hUeXBlLnRzPzFlZTMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBOEMsY0FBYztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyw2REFBNkQiLCJmaWxlIjoiMTYwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIFNlYXJjaFR5cGU7XHJcbihmdW5jdGlvbiAoU2VhcmNoVHlwZSkge1xyXG4gICAgU2VhcmNoVHlwZVtTZWFyY2hUeXBlW1wiTm9uZVwiXSA9IC0xXSA9IFwiTm9uZVwiO1xyXG4gICAgU2VhcmNoVHlwZVtTZWFyY2hUeXBlW1wiRGVzdGluYXRpb25zXCJdID0gMV0gPSBcIkRlc3RpbmF0aW9uc1wiO1xyXG4gICAgU2VhcmNoVHlwZVtTZWFyY2hUeXBlW1wiUmVnaW9uc1wiXSA9IDJdID0gXCJSZWdpb25zXCI7XHJcbiAgICBTZWFyY2hUeXBlW1NlYXJjaFR5cGVbXCJWYWNhdGlvblN0eWxlc1wiXSA9IDNdID0gXCJWYWNhdGlvblN0eWxlc1wiO1xyXG4gICAgU2VhcmNoVHlwZVtTZWFyY2hUeXBlW1wiQ291bnRyaWVzXCJdID0gNF0gPSBcIkNvdW50cmllc1wiO1xyXG4gICAgU2VhcmNoVHlwZVtTZWFyY2hUeXBlW1wiU3RhdGVzUHJvdmluY2VzXCJdID0gNV0gPSBcIlN0YXRlc1Byb3ZpbmNlc1wiO1xyXG4gICAgU2VhcmNoVHlwZVtTZWFyY2hUeXBlW1wiSG90ZWxzUmVzb3J0c1wiXSA9IDZdID0gXCJIb3RlbHNSZXNvcnRzXCI7XHJcbiAgICBTZWFyY2hUeXBlW1NlYXJjaFR5cGVbXCJBY2NvbW1vZGF0aW9uc1wiXSA9IDddID0gXCJBY2NvbW1vZGF0aW9uc1wiO1xyXG4gICAgU2VhcmNoVHlwZVtTZWFyY2hUeXBlW1wiRXhwZXJpZW5jZXNcIl0gPSA4XSA9IFwiRXhwZXJpZW5jZXNcIjtcclxufSkoU2VhcmNoVHlwZSA9IGV4cG9ydHMuU2VhcmNoVHlwZSB8fCAoZXhwb3J0cy5TZWFyY2hUeXBlID0ge30pKTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///160\n')},161:function(module,exports,__webpack_require__){"use strict";eval('\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar UnitParentCategory;\r\n(function (UnitParentCategory) {\r\n    UnitParentCategory[UnitParentCategory["Residences"] = 1] = "Residences";\r\n    UnitParentCategory[UnitParentCategory["SuitesRooms"] = 2] = "SuitesRooms";\r\n    UnitParentCategory[UnitParentCategory["Experiences"] = 3] = "Experiences";\r\n})(UnitParentCategory = exports.UnitParentCategory || (exports.UnitParentCategory = {}));\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvZW51bXMvVW5pdFBhcmVudENhdGVnb3J5LnRzPzEwYjUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBOEMsY0FBYztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxxRkFBcUYiLCJmaWxlIjoiMTYxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIFVuaXRQYXJlbnRDYXRlZ29yeTtcclxuKGZ1bmN0aW9uIChVbml0UGFyZW50Q2F0ZWdvcnkpIHtcclxuICAgIFVuaXRQYXJlbnRDYXRlZ29yeVtVbml0UGFyZW50Q2F0ZWdvcnlbXCJSZXNpZGVuY2VzXCJdID0gMV0gPSBcIlJlc2lkZW5jZXNcIjtcclxuICAgIFVuaXRQYXJlbnRDYXRlZ29yeVtVbml0UGFyZW50Q2F0ZWdvcnlbXCJTdWl0ZXNSb29tc1wiXSA9IDJdID0gXCJTdWl0ZXNSb29tc1wiO1xyXG4gICAgVW5pdFBhcmVudENhdGVnb3J5W1VuaXRQYXJlbnRDYXRlZ29yeVtcIkV4cGVyaWVuY2VzXCJdID0gM10gPSBcIkV4cGVyaWVuY2VzXCI7XHJcbn0pKFVuaXRQYXJlbnRDYXRlZ29yeSA9IGV4cG9ydHMuVW5pdFBhcmVudENhdGVnb3J5IHx8IChleHBvcnRzLlVuaXRQYXJlbnRDYXRlZ29yeSA9IHt9KSk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///161\n')},162:function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\r\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n        s = arguments[i];\r\n        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n            t[p] = s[p];\r\n    }\r\n    return t;\r\n};\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError("Generator is already executing.");\r\n        while (_) try {\r\n            if (f = 1, y && (t = y[op[0] & 2 ? "return" : op[0] ? "throw" : "next"]) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [0, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n};\r\nvar __read = (this && this.__read) || function (o, n) {\r\n    var m = typeof Symbol === "function" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i["return"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n};\r\nvar __spread = (this && this.__spread) || function () {\r\n    for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_fetch_client_1 = __webpack_require__(12);\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar UnitParentCategory_1 = __webpack_require__(161);\r\nvar SearchType_1 = __webpack_require__(160);\r\nvar TreadstoneApi_1 = __webpack_require__(159);\r\nvar TripFinderRepository = /** @class */ (function () {\r\n    function TripFinderRepository(treadstoneApi) {\r\n        this.treadstoneApi = treadstoneApi;\r\n        this.dryflyApi = new aurelia_fetch_client_1.HttpClient();\r\n        this.dryflyApi.configure(function (config) {\r\n            config.rejectErrorResponses().withDefaults({\r\n                headers: {\r\n                    Authorization: \'Bearer MDlhNWFlNWI5LWM4OWUtNDJlZS1iODk3LTJiZTM4ZmU3NjBmNXw2MzU5NTQ3NDU1OTI3MzMzNjN8Mnwy%7c6C9NbRFrzmd53MLx%2bRGQXZZ5k6cxwRuj0PNTyHB9BDw%3d\'\r\n                }\r\n            });\r\n        });\r\n    }\r\n    TripFinderRepository.prototype.fetchSearchCriteria = function (searchCriteriaUrl) {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var productDataRequest, searchCriteriaRequest, searchCriteria, optionsTheServerActuallySupports, productData, isExperience, isUnitThatTripFinderCanDisplay, unitsThatTripFinderCanDisplay, states, stateOptions, countries, countryOptions, shitWeMadeUpOnTheClient, options;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        productDataRequest = this.treadstoneApi.fetchProductData();\r\n                        searchCriteriaRequest = this.dryflyApi.fetch(searchCriteriaUrl).then(function (response) { return response.json(); });\r\n                        return [4 /*yield*/, searchCriteriaRequest];\r\n                    case 1:\r\n                        searchCriteria = _a.sent();\r\n                        optionsTheServerActuallySupports = searchCriteria.map(function (c) { return (__assign({}, c, { persistenceKey: keyMap[c.type], persistenceValue: c.id.toString() })); });\r\n                        return [4 /*yield*/, productDataRequest];\r\n                    case 2:\r\n                        productData = _a.sent();\r\n                        isExperience = function (unit) {\r\n                            return unit.UnitCategory\r\n                                .UnitParentCategory\r\n                                .UnitParentCategoryID === UnitParentCategory_1.UnitParentCategory.Experiences;\r\n                        };\r\n                        isUnitThatTripFinderCanDisplay = function (unit) {\r\n                            return unit.Country && !isExperience(unit);\r\n                        };\r\n                        unitsThatTripFinderCanDisplay = productData\r\n                            .Units\r\n                            .filter(isUnitThatTripFinderCanDisplay);\r\n                        states = unitsThatTripFinderCanDisplay\r\n                            .filter(function (u) { return !!u.State; })\r\n                            .reduce(function (set, unit) {\r\n                            set.add(unit.State);\r\n                            return set;\r\n                        }, new Set());\r\n                        stateOptions = Array\r\n                            .from(states)\r\n                            .map(function (state) { return ({\r\n                            id: -1,\r\n                            isHighlighted: false,\r\n                            persistenceKey: \'states\',\r\n                            persistenceValue: state.replace(/[^a-zA-Z ]/g, \'\').toLocaleLowerCase(),\r\n                            text: state,\r\n                            type: SearchType_1.SearchType.StatesProvinces\r\n                        }); })\r\n                            .sort(function (a, b) { return a.text < b.text ? -1 : 1; });\r\n                        countries = unitsThatTripFinderCanDisplay\r\n                            .filter(function (u) { return !!u.Country; })\r\n                            .reduce(function (set, unit) {\r\n                            set.add(unit.Country);\r\n                            return set;\r\n                        }, new Set());\r\n                        countryOptions = Array\r\n                            .from(countries)\r\n                            .map(function (country) { return ({\r\n                            id: -1,\r\n                            isHighlighted: false,\r\n                            persistenceKey: \'countries\',\r\n                            persistenceValue: country.replace(/[^a-zA-Z ]/g, \'\').toLocaleLowerCase(),\r\n                            text: country,\r\n                            type: SearchType_1.SearchType.Countries\r\n                        }); })\r\n                            .sort(function (a, b) { return a.text < b.text ? -1 : 1; });\r\n                        shitWeMadeUpOnTheClient = __spread(stateOptions, countryOptions);\r\n                        options = __spread(optionsTheServerActuallySupports, shitWeMadeUpOnTheClient);\r\n                        return [2 /*return*/, options];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    TripFinderRepository = __decorate([\r\n        aurelia_framework_1.autoinject,\r\n        __metadata("design:paramtypes", [TreadstoneApi_1.TreadstoneApi])\r\n    ], TripFinderRepository);\r\n    return TripFinderRepository;\r\n}());\r\nexports.TripFinderRepository = TripFinderRepository;\r\nvar keyMap = (_a = {},\r\n    _a[SearchType_1.SearchType.VacationStyles] = \'type\',\r\n    _a[SearchType_1.SearchType.Destinations] = \'destinations\',\r\n    _a[SearchType_1.SearchType.Regions] = \'regions\',\r\n    _a);\r\nvar _a;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy90cmlwLWZpbmRlci9hdXRvY29tcGxldGUvVHJpcEZpbmRlclJlcG9zaXRvcnkudHM/NWE0NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsNENBQTRDLE9BQU87QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLFFBQVE7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsTUFBTSw2QkFBNkIsRUFBRSxZQUFZLFdBQVcsRUFBRTtBQUNqRyxrQ0FBa0MsTUFBTSxpQ0FBaUMsRUFBRSxZQUFZLFdBQVcsRUFBRTtBQUNwRywrQkFBK0IsaUVBQWlFLHVCQUF1QixFQUFFLDRCQUE0QjtBQUNySjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsYUFBYSw2QkFBNkIsMEJBQTBCLGFBQWEsRUFBRSxxQkFBcUI7QUFDeEcsZ0JBQWdCLHFEQUFxRCxvRUFBb0UsYUFBYSxFQUFFO0FBQ3hKLHNCQUFzQixzQkFBc0IscUJBQXFCLEdBQUc7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDLGtDQUFrQyxTQUFTO0FBQzNDLGtDQUFrQyxXQUFXLFVBQVU7QUFDdkQseUNBQXlDLGNBQWM7QUFDdkQ7QUFDQSw2R0FBNkcsT0FBTyxVQUFVO0FBQzlILGdGQUFnRixpQkFBaUIsT0FBTztBQUN4Ryx3REFBd0QsZ0JBQWdCLFFBQVEsT0FBTztBQUN2Riw4Q0FBOEMsZ0JBQWdCLGdCQUFnQixPQUFPO0FBQ3JGO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQSxTQUFTLFlBQVksYUFBYSxPQUFPLEVBQUUsVUFBVSxXQUFXO0FBQ2hFLG1DQUFtQyxTQUFTO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixNQUFNLGdCQUFnQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixzQkFBc0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsc0JBQXNCO0FBQ2xEO0FBQ0E7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RCw2QkFBNkIsbUJBQU8sQ0FBQyxFQUFzQjtBQUMzRCwwQkFBMEIsbUJBQU8sQ0FBQyxtQkFBbUI7QUFDckQsMkJBQTJCLG1CQUFPLENBQUMsR0FBbUM7QUFDdEUsbUJBQW1CLG1CQUFPLENBQUMsR0FBZTtBQUMxQyxzQkFBc0IsbUJBQU8sQ0FBQyxHQUFrQjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrSEFBa0gsd0JBQXdCLEVBQUU7QUFDNUk7QUFDQTtBQUNBO0FBQ0EsNEZBQTRGLG9CQUFvQixNQUFNLG9FQUFvRSxHQUFHLEVBQUU7QUFDL0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0RBQWtELGtCQUFrQixFQUFFO0FBQ3RFO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0EsbURBQW1EO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixFQUFFLEVBQUU7QUFDN0IsbURBQW1ELGlDQUFpQyxFQUFFO0FBQ3RGO0FBQ0Esa0RBQWtELG9CQUFvQixFQUFFO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0EscURBQXFEO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixFQUFFLEVBQUU7QUFDN0IsbURBQW1ELGlDQUFpQyxFQUFFO0FBQ3RGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxNjIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XHJcbiAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcclxuICAgICAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufTtcclxudmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufTtcclxudmFyIF9fbWV0YWRhdGEgPSAodGhpcyAmJiB0aGlzLl9fbWV0YWRhdGEpIHx8IGZ1bmN0aW9uIChrLCB2KSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEoaywgdik7XHJcbn07XHJcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZShyZXN1bHQudmFsdWUpOyB9KS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn07XHJcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IHlbb3BbMF0gJiAyID8gXCJyZXR1cm5cIiA6IG9wWzBdID8gXCJ0aHJvd1wiIDogXCJuZXh0XCJdKSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFswLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn07XHJcbnZhciBfX3JlYWQgPSAodGhpcyAmJiB0aGlzLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcclxuICAgIGlmICghbSkgcmV0dXJuIG87XHJcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cclxuICAgIGZpbmFsbHkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cclxuICAgIH1cclxuICAgIHJldHVybiBhcjtcclxufTtcclxudmFyIF9fc3ByZWFkID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZCkgfHwgZnVuY3Rpb24gKCkge1xyXG4gICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgYXVyZWxpYV9mZXRjaF9jbGllbnRfMSA9IHJlcXVpcmUoXCJhdXJlbGlhLWZldGNoLWNsaWVudFwiKTtcclxudmFyIGF1cmVsaWFfZnJhbWV3b3JrXzEgPSByZXF1aXJlKFwiYXVyZWxpYS1mcmFtZXdvcmtcIik7XHJcbnZhciBVbml0UGFyZW50Q2F0ZWdvcnlfMSA9IHJlcXVpcmUoXCIuLi8uLi8uLi9lbnVtcy9Vbml0UGFyZW50Q2F0ZWdvcnlcIik7XHJcbnZhciBTZWFyY2hUeXBlXzEgPSByZXF1aXJlKFwiLi4vU2VhcmNoVHlwZVwiKTtcclxudmFyIFRyZWFkc3RvbmVBcGlfMSA9IHJlcXVpcmUoXCIuLi9UcmVhZHN0b25lQXBpXCIpO1xyXG52YXIgVHJpcEZpbmRlclJlcG9zaXRvcnkgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBUcmlwRmluZGVyUmVwb3NpdG9yeSh0cmVhZHN0b25lQXBpKSB7XHJcbiAgICAgICAgdGhpcy50cmVhZHN0b25lQXBpID0gdHJlYWRzdG9uZUFwaTtcclxuICAgICAgICB0aGlzLmRyeWZseUFwaSA9IG5ldyBhdXJlbGlhX2ZldGNoX2NsaWVudF8xLkh0dHBDbGllbnQoKTtcclxuICAgICAgICB0aGlzLmRyeWZseUFwaS5jb25maWd1cmUoZnVuY3Rpb24gKGNvbmZpZykge1xyXG4gICAgICAgICAgICBjb25maWcucmVqZWN0RXJyb3JSZXNwb25zZXMoKS53aXRoRGVmYXVsdHMoe1xyXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgICAgIEF1dGhvcml6YXRpb246ICdCZWFyZXIgTURsaE5XRmxOV0k1TFdNNE9XVXROREpsWlMxaU9EazNMVEppWlRNNFptVTNOakJtTlh3Mk16VTVOVFEzTkRVMU9USTNNek16TmpOOE1ud3klN2M2QzlOYlJGcnptZDUzTUx4JTJiUkdRWFpaNWs2Y3h3UnVqMFBOVHlIQjlCRHclM2QnXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgVHJpcEZpbmRlclJlcG9zaXRvcnkucHJvdG90eXBlLmZldGNoU2VhcmNoQ3JpdGVyaWEgPSBmdW5jdGlvbiAoc2VhcmNoQ3JpdGVyaWFVcmwpIHtcclxuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBwcm9kdWN0RGF0YVJlcXVlc3QsIHNlYXJjaENyaXRlcmlhUmVxdWVzdCwgc2VhcmNoQ3JpdGVyaWEsIG9wdGlvbnNUaGVTZXJ2ZXJBY3R1YWxseVN1cHBvcnRzLCBwcm9kdWN0RGF0YSwgaXNFeHBlcmllbmNlLCBpc1VuaXRUaGF0VHJpcEZpbmRlckNhbkRpc3BsYXksIHVuaXRzVGhhdFRyaXBGaW5kZXJDYW5EaXNwbGF5LCBzdGF0ZXMsIHN0YXRlT3B0aW9ucywgY291bnRyaWVzLCBjb3VudHJ5T3B0aW9ucywgc2hpdFdlTWFkZVVwT25UaGVDbGllbnQsIG9wdGlvbnM7XHJcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3REYXRhUmVxdWVzdCA9IHRoaXMudHJlYWRzdG9uZUFwaS5mZXRjaFByb2R1Y3REYXRhKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaENyaXRlcmlhUmVxdWVzdCA9IHRoaXMuZHJ5Zmx5QXBpLmZldGNoKHNlYXJjaENyaXRlcmlhVXJsKS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkgeyByZXR1cm4gcmVzcG9uc2UuanNvbigpOyB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgc2VhcmNoQ3JpdGVyaWFSZXF1ZXN0XTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaENyaXRlcmlhID0gX2Euc2VudCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zVGhlU2VydmVyQWN0dWFsbHlTdXBwb3J0cyA9IHNlYXJjaENyaXRlcmlhLm1hcChmdW5jdGlvbiAoYykgeyByZXR1cm4gKF9fYXNzaWduKHt9LCBjLCB7IHBlcnNpc3RlbmNlS2V5OiBrZXlNYXBbYy50eXBlXSwgcGVyc2lzdGVuY2VWYWx1ZTogYy5pZC50b1N0cmluZygpIH0pKTsgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHByb2R1Y3REYXRhUmVxdWVzdF07XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0RGF0YSA9IF9hLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNFeHBlcmllbmNlID0gZnVuY3Rpb24gKHVuaXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bml0LlVuaXRDYXRlZ29yeVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5Vbml0UGFyZW50Q2F0ZWdvcnlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuVW5pdFBhcmVudENhdGVnb3J5SUQgPT09IFVuaXRQYXJlbnRDYXRlZ29yeV8xLlVuaXRQYXJlbnRDYXRlZ29yeS5FeHBlcmllbmNlcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNVbml0VGhhdFRyaXBGaW5kZXJDYW5EaXNwbGF5ID0gZnVuY3Rpb24gKHVuaXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bml0LkNvdW50cnkgJiYgIWlzRXhwZXJpZW5jZSh1bml0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHNUaGF0VHJpcEZpbmRlckNhbkRpc3BsYXkgPSBwcm9kdWN0RGF0YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLlVuaXRzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGlzVW5pdFRoYXRUcmlwRmluZGVyQ2FuRGlzcGxheSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlcyA9IHVuaXRzVGhhdFRyaXBGaW5kZXJDYW5EaXNwbGF5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uICh1KSB7IHJldHVybiAhIXUuU3RhdGU7IH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVkdWNlKGZ1bmN0aW9uIChzZXQsIHVuaXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldC5hZGQodW5pdC5TdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBuZXcgU2V0KCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZU9wdGlvbnMgPSBBcnJheVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZyb20oc3RhdGVzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoc3RhdGUpIHsgcmV0dXJuICh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogLTEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0hpZ2hsaWdodGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNpc3RlbmNlS2V5OiAnc3RhdGVzJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNpc3RlbmNlVmFsdWU6IHN0YXRlLnJlcGxhY2UoL1teYS16QS1aIF0vZywgJycpLnRvTG9jYWxlTG93ZXJDYXNlKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBzdGF0ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFNlYXJjaFR5cGVfMS5TZWFyY2hUeXBlLlN0YXRlc1Byb3ZpbmNlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTsgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhLnRleHQgPCBiLnRleHQgPyAtMSA6IDE7IH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3VudHJpZXMgPSB1bml0c1RoYXRUcmlwRmluZGVyQ2FuRGlzcGxheVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAodSkgeyByZXR1cm4gISF1LkNvdW50cnk7IH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVkdWNlKGZ1bmN0aW9uIChzZXQsIHVuaXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldC5hZGQodW5pdC5Db3VudHJ5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIG5ldyBTZXQoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50cnlPcHRpb25zID0gQXJyYXlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mcm9tKGNvdW50cmllcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKGNvdW50cnkpIHsgcmV0dXJuICh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogLTEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0hpZ2hsaWdodGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNpc3RlbmNlS2V5OiAnY291bnRyaWVzJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNpc3RlbmNlVmFsdWU6IGNvdW50cnkucmVwbGFjZSgvW15hLXpBLVogXS9nLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGNvdW50cnksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBTZWFyY2hUeXBlXzEuU2VhcmNoVHlwZS5Db3VudHJpZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7IH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYS50ZXh0IDwgYi50ZXh0ID8gLTEgOiAxOyB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2hpdFdlTWFkZVVwT25UaGVDbGllbnQgPSBfX3NwcmVhZChzdGF0ZU9wdGlvbnMsIGNvdW50cnlPcHRpb25zKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IF9fc3ByZWFkKG9wdGlvbnNUaGVTZXJ2ZXJBY3R1YWxseVN1cHBvcnRzLCBzaGl0V2VNYWRlVXBPblRoZUNsaWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBvcHRpb25zXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgVHJpcEZpbmRlclJlcG9zaXRvcnkgPSBfX2RlY29yYXRlKFtcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLmF1dG9pbmplY3QsXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtUcmVhZHN0b25lQXBpXzEuVHJlYWRzdG9uZUFwaV0pXHJcbiAgICBdLCBUcmlwRmluZGVyUmVwb3NpdG9yeSk7XHJcbiAgICByZXR1cm4gVHJpcEZpbmRlclJlcG9zaXRvcnk7XHJcbn0oKSk7XHJcbmV4cG9ydHMuVHJpcEZpbmRlclJlcG9zaXRvcnkgPSBUcmlwRmluZGVyUmVwb3NpdG9yeTtcclxudmFyIGtleU1hcCA9IChfYSA9IHt9LFxyXG4gICAgX2FbU2VhcmNoVHlwZV8xLlNlYXJjaFR5cGUuVmFjYXRpb25TdHlsZXNdID0gJ3R5cGUnLFxyXG4gICAgX2FbU2VhcmNoVHlwZV8xLlNlYXJjaFR5cGUuRGVzdGluYXRpb25zXSA9ICdkZXN0aW5hdGlvbnMnLFxyXG4gICAgX2FbU2VhcmNoVHlwZV8xLlNlYXJjaFR5cGUuUmVnaW9uc10gPSAncmVnaW9ucycsXHJcbiAgICBfYSk7XHJcbnZhciBfYTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///162\n')},163:function(module,exports,__webpack_require__){"use strict";eval('\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar KeyCode;\r\n(function (KeyCode) {\r\n    KeyCode[KeyCode["Enter"] = 13] = "Enter";\r\n    KeyCode[KeyCode["Up"] = 38] = "Up";\r\n    KeyCode[KeyCode["Down"] = 40] = "Down";\r\n})(KeyCode = exports.KeyCode || (exports.KeyCode = {}));\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy90cmlwLWZpbmRlci9hdXRvY29tcGxldGUvS2V5Q29kZS50cz9mYjJkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQThDLGNBQWM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsb0RBQW9EIiwiZmlsZSI6IjE2My5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBLZXlDb2RlO1xyXG4oZnVuY3Rpb24gKEtleUNvZGUpIHtcclxuICAgIEtleUNvZGVbS2V5Q29kZVtcIkVudGVyXCJdID0gMTNdID0gXCJFbnRlclwiO1xyXG4gICAgS2V5Q29kZVtLZXlDb2RlW1wiVXBcIl0gPSAzOF0gPSBcIlVwXCI7XHJcbiAgICBLZXlDb2RlW0tleUNvZGVbXCJEb3duXCJdID0gNDBdID0gXCJEb3duXCI7XHJcbn0pKEtleUNvZGUgPSBleHBvcnRzLktleUNvZGUgfHwgKGV4cG9ydHMuS2V5Q29kZSA9IHt9KSk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///163\n')},164:function(module,exports,__webpack_require__){"use strict";eval("\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n// this accent map is used for matching special characters\r\n// to add more characters this site has a good list - https://github.com/aristus/accent-folding/blob/master/accent-fold.js\r\nexports.accentMap = {\r\n    á: 'a',\r\n    ã: 'a',\r\n    // tslint:disable-next-line:object-literal-sort-keys\r\n    â: 'a',\r\n    Á: 'A',\r\n    Â: 'A',\r\n    è: 'e',\r\n    é: 'e',\r\n    É: 'E',\r\n    È: 'E',\r\n    í: 'i',\r\n    ñ: 'n',\r\n    Ñ: 'n',\r\n    ó: 'o',\r\n    Ó: 'o',\r\n    Ô: 'o',\r\n    ô: 'o'\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy90cmlwLWZpbmRlci9hdXRvY29tcGxldGUvYWNjZW50TWFwLnRzP2RhNmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBOEMsY0FBYztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTY0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuLy8gdGhpcyBhY2NlbnQgbWFwIGlzIHVzZWQgZm9yIG1hdGNoaW5nIHNwZWNpYWwgY2hhcmFjdGVyc1xyXG4vLyB0byBhZGQgbW9yZSBjaGFyYWN0ZXJzIHRoaXMgc2l0ZSBoYXMgYSBnb29kIGxpc3QgLSBodHRwczovL2dpdGh1Yi5jb20vYXJpc3R1cy9hY2NlbnQtZm9sZGluZy9ibG9iL21hc3Rlci9hY2NlbnQtZm9sZC5qc1xyXG5leHBvcnRzLmFjY2VudE1hcCA9IHtcclxuICAgIMOhOiAnYScsXHJcbiAgICDDozogJ2EnLFxyXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm9iamVjdC1saXRlcmFsLXNvcnQta2V5c1xyXG4gICAgw6I6ICdhJyxcclxuICAgIMOBOiAnQScsXHJcbiAgICDDgjogJ0EnLFxyXG4gICAgw6g6ICdlJyxcclxuICAgIMOpOiAnZScsXHJcbiAgICDDiTogJ0UnLFxyXG4gICAgw4g6ICdFJyxcclxuICAgIMOtOiAnaScsXHJcbiAgICDDsTogJ24nLFxyXG4gICAgw5E6ICduJyxcclxuICAgIMOzOiAnbycsXHJcbiAgICDDkzogJ28nLFxyXG4gICAgw5Q6ICdvJyxcclxuICAgIMO0OiAnbydcclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///164\n")},165:function(module,exports,__webpack_require__){"use strict";eval('\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar Region = /** @class */ (function () {\r\n    function Region(key, name) {\r\n        this.id = key;\r\n        this.name = name;\r\n    }\r\n    return Region;\r\n}());\r\nexports.Region = Region;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9kZXN0aW5hdGlvbi1hcHBsaWNhdGlvbi9SZWdpb24udHM/ZTBhMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE4QyxjQUFjO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCIsImZpbGUiOiIxNjUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgUmVnaW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gUmVnaW9uKGtleSwgbmFtZSkge1xyXG4gICAgICAgIHRoaXMuaWQgPSBrZXk7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcclxuICAgIH1cclxuICAgIHJldHVybiBSZWdpb247XHJcbn0oKSk7XHJcbmV4cG9ydHMuUmVnaW9uID0gUmVnaW9uO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///165\n')},166:function(module,exports,__webpack_require__){"use strict";eval('\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar Group = /** @class */ (function () {\r\n    function Group(key) {\r\n        this.members = [];\r\n        this.key = key;\r\n    }\r\n    return Group;\r\n}());\r\nexports.Group = Group;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9kZXN0aW5hdGlvbi1hcHBsaWNhdGlvbi9Hcm91cC50cz9jMGRmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQThDLGNBQWM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEIiwiZmlsZSI6IjE2Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBHcm91cCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEdyb3VwKGtleSkge1xyXG4gICAgICAgIHRoaXMubWVtYmVycyA9IFtdO1xyXG4gICAgICAgIHRoaXMua2V5ID0ga2V5O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIEdyb3VwO1xyXG59KCkpO1xyXG5leHBvcnRzLkdyb3VwID0gR3JvdXA7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///166\n')},167:function(module,exports,__webpack_require__){"use strict";eval('\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar Group_1 = __webpack_require__(166);\r\n/**\r\n *\r\n * @param list collection to be grouped\r\n * @param keyFn function that returns the key to group by based off of the list item\r\n */\r\nfunction groupBy(list, keyFn) {\r\n    var dictionary = list.reduce(function (groups, currentValue) {\r\n        var key = keyFn(currentValue);\r\n        groups[key] = groups[key] || new Group_1.Group(key);\r\n        groups[key].members.push(currentValue);\r\n        return groups;\r\n        // tslint:disable-next-line:no-object-literal-type-assertion\r\n    }, {});\r\n    return Object.keys(dictionary).map(function (key) { return dictionary[key]; });\r\n}\r\nexports.groupBy = groupBy;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9kZXN0aW5hdGlvbi1hcHBsaWNhdGlvbi9ncm91cEJ5LnRzPzhmODIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBOEMsY0FBYztBQUM1RCxjQUFjLG1CQUFPLENBQUMsR0FBUztBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLElBQUk7QUFDVCx1REFBdUQsd0JBQXdCLEVBQUU7QUFDakY7QUFDQSIsImZpbGUiOiIxNjcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgR3JvdXBfMSA9IHJlcXVpcmUoXCIuL0dyb3VwXCIpO1xyXG4vKipcclxuICpcclxuICogQHBhcmFtIGxpc3QgY29sbGVjdGlvbiB0byBiZSBncm91cGVkXHJcbiAqIEBwYXJhbSBrZXlGbiBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGtleSB0byBncm91cCBieSBiYXNlZCBvZmYgb2YgdGhlIGxpc3QgaXRlbVxyXG4gKi9cclxuZnVuY3Rpb24gZ3JvdXBCeShsaXN0LCBrZXlGbikge1xyXG4gICAgdmFyIGRpY3Rpb25hcnkgPSBsaXN0LnJlZHVjZShmdW5jdGlvbiAoZ3JvdXBzLCBjdXJyZW50VmFsdWUpIHtcclxuICAgICAgICB2YXIga2V5ID0ga2V5Rm4oY3VycmVudFZhbHVlKTtcclxuICAgICAgICBncm91cHNba2V5XSA9IGdyb3Vwc1trZXldIHx8IG5ldyBHcm91cF8xLkdyb3VwKGtleSk7XHJcbiAgICAgICAgZ3JvdXBzW2tleV0ubWVtYmVycy5wdXNoKGN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgICAgcmV0dXJuIGdyb3VwcztcclxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tb2JqZWN0LWxpdGVyYWwtdHlwZS1hc3NlcnRpb25cclxuICAgIH0sIHt9KTtcclxuICAgIHJldHVybiBPYmplY3Qua2V5cyhkaWN0aW9uYXJ5KS5tYXAoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gZGljdGlvbmFyeVtrZXldOyB9KTtcclxufVxyXG5leHBvcnRzLmdyb3VwQnkgPSBncm91cEJ5O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///167\n')},168:function(module,exports,__webpack_require__){"use strict";eval('\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar FilterState = /** @class */ (function () {\r\n    function FilterState() {\r\n        this.isSelected = false;\r\n        this.countOfMatches = 0;\r\n    }\r\n    return FilterState;\r\n}());\r\nexports.FilterState = FilterState;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9kZXN0aW5hdGlvbi1hcHBsaWNhdGlvbi9GaWx0ZXJTdGF0ZS50cz82NTE1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQThDLGNBQWM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEIiwiZmlsZSI6IjE2OC5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBGaWx0ZXJTdGF0ZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEZpbHRlclN0YXRlKCkge1xyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY291bnRPZk1hdGNoZXMgPSAwO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIEZpbHRlclN0YXRlO1xyXG59KCkpO1xyXG5leHBvcnRzLkZpbHRlclN0YXRlID0gRmlsdGVyU3RhdGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///168\n')},169:function(module,exports,__webpack_require__){"use strict";eval("\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar aurelia_fetch_client_1 = __webpack_require__(12);\r\nvar DestinationApplicationRepository = /** @class */ (function () {\r\n    function DestinationApplicationRepository() {\r\n        this.httpClient = new aurelia_fetch_client_1.HttpClient();\r\n        this.httpClient.configure(function (config) {\r\n            config\r\n                .withDefaults({\r\n                credentials: 'same-origin',\r\n                headers: {\r\n                    Accept: 'application/json',\r\n                    Cookie: document.cookie\r\n                }\r\n            })\r\n                .rejectErrorResponses();\r\n        });\r\n    }\r\n    DestinationApplicationRepository.prototype.fetch = function () {\r\n        return this.httpClient\r\n            .fetch('/destination-application/')\r\n            .then(function (response) { return response.json(); });\r\n    };\r\n    return DestinationApplicationRepository;\r\n}());\r\nexports.DestinationApplicationRepository = DestinationApplicationRepository;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9kZXN0aW5hdGlvbi1hcHBsaWNhdGlvbi9EZXN0aW5hdGlvbkFwcGxpY2F0aW9uUmVwb3NpdG9yeS50cz9kYWVlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQThDLGNBQWM7QUFDNUQsNkJBQTZCLG1CQUFPLENBQUMsRUFBc0I7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1Qyx3QkFBd0IsRUFBRTtBQUNqRTtBQUNBO0FBQ0EsQ0FBQztBQUNEIiwiZmlsZSI6IjE2OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBhdXJlbGlhX2ZldGNoX2NsaWVudF8xID0gcmVxdWlyZShcImF1cmVsaWEtZmV0Y2gtY2xpZW50XCIpO1xyXG52YXIgRGVzdGluYXRpb25BcHBsaWNhdGlvblJlcG9zaXRvcnkgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBEZXN0aW5hdGlvbkFwcGxpY2F0aW9uUmVwb3NpdG9yeSgpIHtcclxuICAgICAgICB0aGlzLmh0dHBDbGllbnQgPSBuZXcgYXVyZWxpYV9mZXRjaF9jbGllbnRfMS5IdHRwQ2xpZW50KCk7XHJcbiAgICAgICAgdGhpcy5odHRwQ2xpZW50LmNvbmZpZ3VyZShmdW5jdGlvbiAoY29uZmlnKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZ1xyXG4gICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0cyh7XHJcbiAgICAgICAgICAgICAgICBjcmVkZW50aWFsczogJ3NhbWUtb3JpZ2luJyxcclxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgICAgICBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgICAgICAgICAgICAgICBDb29raWU6IGRvY3VtZW50LmNvb2tpZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLnJlamVjdEVycm9yUmVzcG9uc2VzKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBEZXN0aW5hdGlvbkFwcGxpY2F0aW9uUmVwb3NpdG9yeS5wcm90b3R5cGUuZmV0Y2ggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAgICAgICAuZmV0Y2goJy9kZXN0aW5hdGlvbi1hcHBsaWNhdGlvbi8nKVxyXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHsgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTsgfSk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIERlc3RpbmF0aW9uQXBwbGljYXRpb25SZXBvc2l0b3J5O1xyXG59KCkpO1xyXG5leHBvcnRzLkRlc3RpbmF0aW9uQXBwbGljYXRpb25SZXBvc2l0b3J5ID0gRGVzdGluYXRpb25BcHBsaWNhdGlvblJlcG9zaXRvcnk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///169\n")},17:function(module,__webpack_exports__,__webpack_require__){"use strict";eval('/* unused harmony export extend */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return isInteger; });\n/* unused harmony export assignObjectToKeys */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return LazyOptional; });\n/* harmony import */ var aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6);\nvar _dec, _class;\n\nvar _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };\n\n\n\n\n\nvar extend = function extend(destination, source) {\n  for (var property in source) {\n    destination[property] = source[property];\n  }\n\n  return destination;\n};\n\nvar isInteger = Number.isInteger || function (value) {\n  return typeof value === \'number\' && isFinite(value) && Math.floor(value) === value;\n};\n\nvar assignObjectToKeys = function assignObjectToKeys(root, obj) {\n  if (obj === undefined || obj === null) {\n    return obj;\n  }\n\n  var opts = {};\n\n  Object.keys(obj).map(function (key) {\n    if (_typeof(obj[key]) === \'object\') {\n      extend(opts, assignObjectToKeys(key, obj[key]));\n    } else {\n      opts[root !== \'\' ? root + \'.\' + key : key] = obj[key];\n    }\n  });\n\n  return opts;\n};\n\nvar LazyOptional = (_dec = Object(aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_0__[/* resolver */ "A"])(), _dec(_class = function () {\n  function LazyOptional(key) {\n    \n\n    this.key = key;\n  }\n\n  LazyOptional.prototype.get = function get(container) {\n    var _this = this;\n\n    return function () {\n      if (container.hasResolver(_this.key, false)) {\n        return container.get(_this.key);\n      }\n      return null;\n    };\n  };\n\n  LazyOptional.of = function of(key) {\n    return new LazyOptional(key);\n  };\n\n  return LazyOptional;\n}()) || _class);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXVyZWxpYS1pMThuL2Rpc3QvbmF0aXZlLW1vZHVsZXMvdXRpbHMuanM/ZjIzYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBRUEsb0dBQW9HLG1CQUFtQixFQUFFLG1CQUFtQiw4SEFBOEg7Ozs7QUFJbE47O0FBRWpEO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRU87QUFDUDtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVPLDJCQUEyQixxRkFBUTtBQUMxQzs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUMiLCJmaWxlIjoiMTcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX2RlYywgX2NsYXNzO1xuXG52YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cblxuXG5pbXBvcnQgeyByZXNvbHZlciB9IGZyb20gJ2F1cmVsaWEtZGVwZW5kZW5jeS1pbmplY3Rpb24nO1xuXG5leHBvcnQgdmFyIGV4dGVuZCA9IGZ1bmN0aW9uIGV4dGVuZChkZXN0aW5hdGlvbiwgc291cmNlKSB7XG4gIGZvciAodmFyIHByb3BlcnR5IGluIHNvdXJjZSkge1xuICAgIGRlc3RpbmF0aW9uW3Byb3BlcnR5XSA9IHNvdXJjZVtwcm9wZXJ0eV07XG4gIH1cblxuICByZXR1cm4gZGVzdGluYXRpb247XG59O1xuXG5leHBvcnQgdmFyIGlzSW50ZWdlciA9IE51bWJlci5pc0ludGVnZXIgfHwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIGlzRmluaXRlKHZhbHVlKSAmJiBNYXRoLmZsb29yKHZhbHVlKSA9PT0gdmFsdWU7XG59O1xuXG5leHBvcnQgdmFyIGFzc2lnbk9iamVjdFRvS2V5cyA9IGZ1bmN0aW9uIGFzc2lnbk9iamVjdFRvS2V5cyhyb290LCBvYmopIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICB2YXIgb3B0cyA9IHt9O1xuXG4gIE9iamVjdC5rZXlzKG9iaikubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoX3R5cGVvZihvYmpba2V5XSkgPT09ICdvYmplY3QnKSB7XG4gICAgICBleHRlbmQob3B0cywgYXNzaWduT2JqZWN0VG9LZXlzKGtleSwgb2JqW2tleV0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0c1tyb290ICE9PSAnJyA/IHJvb3QgKyAnLicgKyBrZXkgOiBrZXldID0gb2JqW2tleV07XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gb3B0cztcbn07XG5cbmV4cG9ydCB2YXIgTGF6eU9wdGlvbmFsID0gKF9kZWMgPSByZXNvbHZlcigpLCBfZGVjKF9jbGFzcyA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTGF6eU9wdGlvbmFsKGtleSkge1xuICAgIFxuXG4gICAgdGhpcy5rZXkgPSBrZXk7XG4gIH1cblxuICBMYXp5T3B0aW9uYWwucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIGdldChjb250YWluZXIpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChjb250YWluZXIuaGFzUmVzb2x2ZXIoX3RoaXMua2V5LCBmYWxzZSkpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRhaW5lci5nZXQoX3RoaXMua2V5KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH07XG5cbiAgTGF6eU9wdGlvbmFsLm9mID0gZnVuY3Rpb24gb2Yoa2V5KSB7XG4gICAgcmV0dXJuIG5ldyBMYXp5T3B0aW9uYWwoa2V5KTtcbiAgfTtcblxuICByZXR1cm4gTGF6eU9wdGlvbmFsO1xufSgpKSB8fCBfY2xhc3MpOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///17\n')},170:function(module,exports,__webpack_require__){"use strict";eval('\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar VideoProvider;\r\n(function (VideoProvider) {\r\n    VideoProvider[VideoProvider["vidyard"] = 279] = "vidyard";\r\n    VideoProvider[VideoProvider["vimeo"] = 259] = "vimeo";\r\n    VideoProvider[VideoProvider["youtube"] = 258] = "youtube";\r\n})(VideoProvider = exports.VideoProvider || (exports.VideoProvider = {}));\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy92aWRlby1nYWxsZXJ5L0lQcm9tb3Rpb25hbFZpZGVvLnRzP2MxNTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBOEMsY0FBYztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxzRUFBc0UiLCJmaWxlIjoiMTcwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIFZpZGVvUHJvdmlkZXI7XHJcbihmdW5jdGlvbiAoVmlkZW9Qcm92aWRlcikge1xyXG4gICAgVmlkZW9Qcm92aWRlcltWaWRlb1Byb3ZpZGVyW1widmlkeWFyZFwiXSA9IDI3OV0gPSBcInZpZHlhcmRcIjtcclxuICAgIFZpZGVvUHJvdmlkZXJbVmlkZW9Qcm92aWRlcltcInZpbWVvXCJdID0gMjU5XSA9IFwidmltZW9cIjtcclxuICAgIFZpZGVvUHJvdmlkZXJbVmlkZW9Qcm92aWRlcltcInlvdXR1YmVcIl0gPSAyNThdID0gXCJ5b3V0dWJlXCI7XHJcbn0pKFZpZGVvUHJvdmlkZXIgPSBleHBvcnRzLlZpZGVvUHJvdmlkZXIgfHwgKGV4cG9ydHMuVmlkZW9Qcm92aWRlciA9IHt9KSk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///170\n')},171:function(module,exports,__webpack_require__){"use strict";eval('\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nfunction createImageViewModel(src) {\r\n    return {\r\n        alternativeText: \'\',\r\n        basePath: src,\r\n        caption: \'\',\r\n        compression: 100,\r\n        fullPath: "//cms.inspirato.com/ImageGen.ashx?image=" + src,\r\n        fullPathLowQuality: "//cms.inspirato.com/ImageGen.ashx?image=" + src,\r\n        fullPathTinyOptimized: "//cms.inspirato.com/ImageGen.ashx?image=" + src,\r\n        hasDimensions: true,\r\n        hasImage: true,\r\n        hasTitle: true,\r\n        height: 900,\r\n        imageGenPath: "//cms.inspirato.com/ImageGen.ashx",\r\n        issvg: false,\r\n        title: \'\',\r\n        width: 1600\r\n    };\r\n}\r\nexports.createImageViewModel = createImageViewModel;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvaW50ZXJmYWNlcy9JbWFnZVZpZXdNb2RlbC50cz80ZmZhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQThDLGNBQWM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxNzEuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG5mdW5jdGlvbiBjcmVhdGVJbWFnZVZpZXdNb2RlbChzcmMpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgYWx0ZXJuYXRpdmVUZXh0OiAnJyxcclxuICAgICAgICBiYXNlUGF0aDogc3JjLFxyXG4gICAgICAgIGNhcHRpb246ICcnLFxyXG4gICAgICAgIGNvbXByZXNzaW9uOiAxMDAsXHJcbiAgICAgICAgZnVsbFBhdGg6IFwiLy9jbXMuaW5zcGlyYXRvLmNvbS9JbWFnZUdlbi5hc2h4P2ltYWdlPVwiICsgc3JjLFxyXG4gICAgICAgIGZ1bGxQYXRoTG93UXVhbGl0eTogXCIvL2Ntcy5pbnNwaXJhdG8uY29tL0ltYWdlR2VuLmFzaHg/aW1hZ2U9XCIgKyBzcmMsXHJcbiAgICAgICAgZnVsbFBhdGhUaW55T3B0aW1pemVkOiBcIi8vY21zLmluc3BpcmF0by5jb20vSW1hZ2VHZW4uYXNoeD9pbWFnZT1cIiArIHNyYyxcclxuICAgICAgICBoYXNEaW1lbnNpb25zOiB0cnVlLFxyXG4gICAgICAgIGhhc0ltYWdlOiB0cnVlLFxyXG4gICAgICAgIGhhc1RpdGxlOiB0cnVlLFxyXG4gICAgICAgIGhlaWdodDogOTAwLFxyXG4gICAgICAgIGltYWdlR2VuUGF0aDogXCIvL2Ntcy5pbnNwaXJhdG8uY29tL0ltYWdlR2VuLmFzaHhcIixcclxuICAgICAgICBpc3N2ZzogZmFsc2UsXHJcbiAgICAgICAgdGl0bGU6ICcnLFxyXG4gICAgICAgIHdpZHRoOiAxNjAwXHJcbiAgICB9O1xyXG59XHJcbmV4cG9ydHMuY3JlYXRlSW1hZ2VWaWV3TW9kZWwgPSBjcmVhdGVJbWFnZVZpZXdNb2RlbDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///171\n')},172:function(module,exports,__webpack_require__){"use strict";eval('\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar SectionComponentBottomPadding;\r\n(function (SectionComponentBottomPadding) {\r\n    SectionComponentBottomPadding["Default"] = "Default";\r\n    SectionComponentBottomPadding["ExtraPadding"] = "Extra Padding";\r\n    SectionComponentBottomPadding["Collapsed"] = "Collapsed";\r\n})(SectionComponentBottomPadding = exports.SectionComponentBottomPadding || (exports.SectionComponentBottomPadding = {}));\r\nvar SectionComponentTopPadding;\r\n(function (SectionComponentTopPadding) {\r\n    SectionComponentTopPadding["Default"] = "Default";\r\n    SectionComponentTopPadding["ExtraPadding"] = "Extra Padding";\r\n    SectionComponentTopPadding["Collapsed"] = "Collapsed";\r\n})(SectionComponentTopPadding = exports.SectionComponentTopPadding || (exports.SectionComponentTopPadding = {}));\r\nexports.SectionComponentsPerRow = {\r\n    fullScreen: \'fullscreen\',\r\n    mobile1Tablet1Desktop3: \'mobile: 1, tablet: 1, desktop: 3\',\r\n    mobile1Tablet2Desktop2: \'mobile: 1, tablet: 2, desktop: 2\',\r\n    mobile1Tablet2Desktop4: \'mobile: 1, tablet: 2, desktop: 4\',\r\n    mobile1Tablet3Desktop3: \'mobile: 1, tablet: 3, desktop: 3\',\r\n};\r\nvar VerticalAlignment;\r\n(function (VerticalAlignment) {\r\n    VerticalAlignment["top"] = "top";\r\n    VerticalAlignment["middle"] = "middle";\r\n    VerticalAlignment["bottom"] = "bottom";\r\n})(VerticalAlignment = exports.VerticalAlignment || (exports.VerticalAlignment = {}));\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9zZWN0aW9uLWNvbXBvbmVudC9JU2VjdGlvbkNvbXBvbmVudC50cz9mNjMyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQThDLGNBQWM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsc0hBQXNIO0FBQ3ZIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLDZHQUE2RztBQUM5RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLGtGQUFrRiIsImZpbGUiOiIxNzIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgU2VjdGlvbkNvbXBvbmVudEJvdHRvbVBhZGRpbmc7XHJcbihmdW5jdGlvbiAoU2VjdGlvbkNvbXBvbmVudEJvdHRvbVBhZGRpbmcpIHtcclxuICAgIFNlY3Rpb25Db21wb25lbnRCb3R0b21QYWRkaW5nW1wiRGVmYXVsdFwiXSA9IFwiRGVmYXVsdFwiO1xyXG4gICAgU2VjdGlvbkNvbXBvbmVudEJvdHRvbVBhZGRpbmdbXCJFeHRyYVBhZGRpbmdcIl0gPSBcIkV4dHJhIFBhZGRpbmdcIjtcclxuICAgIFNlY3Rpb25Db21wb25lbnRCb3R0b21QYWRkaW5nW1wiQ29sbGFwc2VkXCJdID0gXCJDb2xsYXBzZWRcIjtcclxufSkoU2VjdGlvbkNvbXBvbmVudEJvdHRvbVBhZGRpbmcgPSBleHBvcnRzLlNlY3Rpb25Db21wb25lbnRCb3R0b21QYWRkaW5nIHx8IChleHBvcnRzLlNlY3Rpb25Db21wb25lbnRCb3R0b21QYWRkaW5nID0ge30pKTtcclxudmFyIFNlY3Rpb25Db21wb25lbnRUb3BQYWRkaW5nO1xyXG4oZnVuY3Rpb24gKFNlY3Rpb25Db21wb25lbnRUb3BQYWRkaW5nKSB7XHJcbiAgICBTZWN0aW9uQ29tcG9uZW50VG9wUGFkZGluZ1tcIkRlZmF1bHRcIl0gPSBcIkRlZmF1bHRcIjtcclxuICAgIFNlY3Rpb25Db21wb25lbnRUb3BQYWRkaW5nW1wiRXh0cmFQYWRkaW5nXCJdID0gXCJFeHRyYSBQYWRkaW5nXCI7XHJcbiAgICBTZWN0aW9uQ29tcG9uZW50VG9wUGFkZGluZ1tcIkNvbGxhcHNlZFwiXSA9IFwiQ29sbGFwc2VkXCI7XHJcbn0pKFNlY3Rpb25Db21wb25lbnRUb3BQYWRkaW5nID0gZXhwb3J0cy5TZWN0aW9uQ29tcG9uZW50VG9wUGFkZGluZyB8fCAoZXhwb3J0cy5TZWN0aW9uQ29tcG9uZW50VG9wUGFkZGluZyA9IHt9KSk7XHJcbmV4cG9ydHMuU2VjdGlvbkNvbXBvbmVudHNQZXJSb3cgPSB7XHJcbiAgICBmdWxsU2NyZWVuOiAnZnVsbHNjcmVlbicsXHJcbiAgICBtb2JpbGUxVGFibGV0MURlc2t0b3AzOiAnbW9iaWxlOiAxLCB0YWJsZXQ6IDEsIGRlc2t0b3A6IDMnLFxyXG4gICAgbW9iaWxlMVRhYmxldDJEZXNrdG9wMjogJ21vYmlsZTogMSwgdGFibGV0OiAyLCBkZXNrdG9wOiAyJyxcclxuICAgIG1vYmlsZTFUYWJsZXQyRGVza3RvcDQ6ICdtb2JpbGU6IDEsIHRhYmxldDogMiwgZGVza3RvcDogNCcsXHJcbiAgICBtb2JpbGUxVGFibGV0M0Rlc2t0b3AzOiAnbW9iaWxlOiAxLCB0YWJsZXQ6IDMsIGRlc2t0b3A6IDMnLFxyXG59O1xyXG52YXIgVmVydGljYWxBbGlnbm1lbnQ7XHJcbihmdW5jdGlvbiAoVmVydGljYWxBbGlnbm1lbnQpIHtcclxuICAgIFZlcnRpY2FsQWxpZ25tZW50W1widG9wXCJdID0gXCJ0b3BcIjtcclxuICAgIFZlcnRpY2FsQWxpZ25tZW50W1wibWlkZGxlXCJdID0gXCJtaWRkbGVcIjtcclxuICAgIFZlcnRpY2FsQWxpZ25tZW50W1wiYm90dG9tXCJdID0gXCJib3R0b21cIjtcclxufSkoVmVydGljYWxBbGlnbm1lbnQgPSBleHBvcnRzLlZlcnRpY2FsQWxpZ25tZW50IHx8IChleHBvcnRzLlZlcnRpY2FsQWxpZ25tZW50ID0ge30pKTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///172\n')},173:function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar aurelia_http_client_1 = __webpack_require__(26);\r\nvar RecommendationRepository = /** @class */ (function () {\r\n    function RecommendationRepository() {\r\n        this.httpClient = new aurelia_http_client_1.HttpClient();\r\n    }\r\n    RecommendationRepository.prototype.get = function () {\r\n        return this.httpClient\r\n            .jsonp(\'//7207867.recs.igodigital.com/a/v2/7207867/home/recommend.json\', \'callback\')\r\n            .then(function (httpResponse) {\r\n            return httpResponse.response;\r\n        });\r\n    };\r\n    RecommendationRepository = __decorate([\r\n        aurelia_framework_1.autoinject(),\r\n        __metadata("design:paramtypes", [])\r\n    ], RecommendationRepository);\r\n    return RecommendationRepository;\r\n}());\r\nexports.RecommendationRepository = RecommendationRepository;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9yZWNvbW1lbmRlZC1mb3IteW91L1JlY29tbWVuZGF0aW9uUmVwb3NpdG9yeS50cz9lMzlkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLFFBQVE7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxjQUFjO0FBQzVELDBCQUEwQixtQkFBTyxDQUFDLG1CQUFtQjtBQUNyRCw0QkFBNEIsbUJBQU8sQ0FBQyxFQUFxQjtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEIiwiZmlsZSI6IjE3My5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG52YXIgX19kZWNvcmF0ZSA9ICh0aGlzICYmIHRoaXMuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59O1xyXG52YXIgX19tZXRhZGF0YSA9ICh0aGlzICYmIHRoaXMuX19tZXRhZGF0YSkgfHwgZnVuY3Rpb24gKGssIHYpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShrLCB2KTtcclxufTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgYXVyZWxpYV9mcmFtZXdvcmtfMSA9IHJlcXVpcmUoXCJhdXJlbGlhLWZyYW1ld29ya1wiKTtcclxudmFyIGF1cmVsaWFfaHR0cF9jbGllbnRfMSA9IHJlcXVpcmUoXCJhdXJlbGlhLWh0dHAtY2xpZW50XCIpO1xyXG52YXIgUmVjb21tZW5kYXRpb25SZXBvc2l0b3J5ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gUmVjb21tZW5kYXRpb25SZXBvc2l0b3J5KCkge1xyXG4gICAgICAgIHRoaXMuaHR0cENsaWVudCA9IG5ldyBhdXJlbGlhX2h0dHBfY2xpZW50XzEuSHR0cENsaWVudCgpO1xyXG4gICAgfVxyXG4gICAgUmVjb21tZW5kYXRpb25SZXBvc2l0b3J5LnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAgICAgICAuanNvbnAoJy8vNzIwNzg2Ny5yZWNzLmlnb2RpZ2l0YWwuY29tL2EvdjIvNzIwNzg2Ny9ob21lL3JlY29tbWVuZC5qc29uJywgJ2NhbGxiYWNrJylcclxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGh0dHBSZXNwb25zZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gaHR0cFJlc3BvbnNlLnJlc3BvbnNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIFJlY29tbWVuZGF0aW9uUmVwb3NpdG9yeSA9IF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuYXV0b2luamVjdCgpLFxyXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbXSlcclxuICAgIF0sIFJlY29tbWVuZGF0aW9uUmVwb3NpdG9yeSk7XHJcbiAgICByZXR1cm4gUmVjb21tZW5kYXRpb25SZXBvc2l0b3J5O1xyXG59KCkpO1xyXG5leHBvcnRzLlJlY29tbWVuZGF0aW9uUmVwb3NpdG9yeSA9IFJlY29tbWVuZGF0aW9uUmVwb3NpdG9yeTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///173\n')},174:function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_fetch_client_1 = __webpack_require__(12);\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar aurelia_path_1 = __webpack_require__(7);\r\nvar RecommendationRepository_1 = __webpack_require__(173);\r\nvar RecommendationResidenceRepository = /** @class */ (function () {\r\n    function RecommendationResidenceRepository(http, igoClient) {\r\n        this.http = http;\r\n        this.igoClient = igoClient;\r\n        this.httpClient = http;\r\n        this.igodigitalRecommendationApiClient = igoClient;\r\n    }\r\n    RecommendationResidenceRepository.prototype.get = function () {\r\n        var _this = this;\r\n        return this.igodigitalRecommendationApiClient\r\n            .get()\r\n            .then(function (igoresponse) {\r\n            var umbracoIds = igoresponse[0].items.map(function (item) { return item.content_id; });\r\n            var queryString = aurelia_path_1.buildQueryString({ umbracoIds: umbracoIds }, true);\r\n            var baseUri = \'/recommendations/residences/json?\';\r\n            return _this.httpClient\r\n                .fetch(baseUri + queryString, {\r\n                method: \'get\'\r\n            })\r\n                .then(function (response) {\r\n                return response.json();\r\n            });\r\n        });\r\n    };\r\n    RecommendationResidenceRepository = __decorate([\r\n        aurelia_framework_1.autoinject(),\r\n        __metadata("design:paramtypes", [aurelia_fetch_client_1.HttpClient,\r\n            RecommendationRepository_1.RecommendationRepository])\r\n    ], RecommendationResidenceRepository);\r\n    return RecommendationResidenceRepository;\r\n}());\r\nexports.RecommendationResidenceRepository = RecommendationResidenceRepository;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9yZWNvbW1lbmRlZC1mb3IteW91L1JlY29tbWVuZGF0aW9uUmVzaWRlbmNlUmVwb3NpdG9yeS50cz8wYjE5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLFFBQVE7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxjQUFjO0FBQzVELDZCQUE2QixtQkFBTyxDQUFDLEVBQXNCO0FBQzNELDBCQUEwQixtQkFBTyxDQUFDLG1CQUFtQjtBQUNyRCxxQkFBcUIsbUJBQU8sQ0FBQyxDQUFjO0FBQzNDLGlDQUFpQyxtQkFBTyxDQUFDLEdBQTRCO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVFQUF1RSx3QkFBd0IsRUFBRTtBQUNqRywrREFBK0QseUJBQXlCO0FBQ3hGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEIiwiZmlsZSI6IjE3NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG52YXIgX19kZWNvcmF0ZSA9ICh0aGlzICYmIHRoaXMuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59O1xyXG52YXIgX19tZXRhZGF0YSA9ICh0aGlzICYmIHRoaXMuX19tZXRhZGF0YSkgfHwgZnVuY3Rpb24gKGssIHYpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShrLCB2KTtcclxufTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgYXVyZWxpYV9mZXRjaF9jbGllbnRfMSA9IHJlcXVpcmUoXCJhdXJlbGlhLWZldGNoLWNsaWVudFwiKTtcclxudmFyIGF1cmVsaWFfZnJhbWV3b3JrXzEgPSByZXF1aXJlKFwiYXVyZWxpYS1mcmFtZXdvcmtcIik7XHJcbnZhciBhdXJlbGlhX3BhdGhfMSA9IHJlcXVpcmUoXCJhdXJlbGlhLXBhdGhcIik7XHJcbnZhciBSZWNvbW1lbmRhdGlvblJlcG9zaXRvcnlfMSA9IHJlcXVpcmUoXCIuL1JlY29tbWVuZGF0aW9uUmVwb3NpdG9yeVwiKTtcclxudmFyIFJlY29tbWVuZGF0aW9uUmVzaWRlbmNlUmVwb3NpdG9yeSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIFJlY29tbWVuZGF0aW9uUmVzaWRlbmNlUmVwb3NpdG9yeShodHRwLCBpZ29DbGllbnQpIHtcclxuICAgICAgICB0aGlzLmh0dHAgPSBodHRwO1xyXG4gICAgICAgIHRoaXMuaWdvQ2xpZW50ID0gaWdvQ2xpZW50O1xyXG4gICAgICAgIHRoaXMuaHR0cENsaWVudCA9IGh0dHA7XHJcbiAgICAgICAgdGhpcy5pZ29kaWdpdGFsUmVjb21tZW5kYXRpb25BcGlDbGllbnQgPSBpZ29DbGllbnQ7XHJcbiAgICB9XHJcbiAgICBSZWNvbW1lbmRhdGlvblJlc2lkZW5jZVJlcG9zaXRvcnkucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlnb2RpZ2l0YWxSZWNvbW1lbmRhdGlvbkFwaUNsaWVudFxyXG4gICAgICAgICAgICAuZ2V0KClcclxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGlnb3Jlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIHZhciB1bWJyYWNvSWRzID0gaWdvcmVzcG9uc2VbMF0uaXRlbXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7IHJldHVybiBpdGVtLmNvbnRlbnRfaWQ7IH0pO1xyXG4gICAgICAgICAgICB2YXIgcXVlcnlTdHJpbmcgPSBhdXJlbGlhX3BhdGhfMS5idWlsZFF1ZXJ5U3RyaW5nKHsgdW1icmFjb0lkczogdW1icmFjb0lkcyB9LCB0cnVlKTtcclxuICAgICAgICAgICAgdmFyIGJhc2VVcmkgPSAnL3JlY29tbWVuZGF0aW9ucy9yZXNpZGVuY2VzL2pzb24/JztcclxuICAgICAgICAgICAgcmV0dXJuIF90aGlzLmh0dHBDbGllbnRcclxuICAgICAgICAgICAgICAgIC5mZXRjaChiYXNlVXJpICsgcXVlcnlTdHJpbmcsIHtcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ2dldCdcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgUmVjb21tZW5kYXRpb25SZXNpZGVuY2VSZXBvc2l0b3J5ID0gX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5hdXRvaW5qZWN0KCksXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFthdXJlbGlhX2ZldGNoX2NsaWVudF8xLkh0dHBDbGllbnQsXHJcbiAgICAgICAgICAgIFJlY29tbWVuZGF0aW9uUmVwb3NpdG9yeV8xLlJlY29tbWVuZGF0aW9uUmVwb3NpdG9yeV0pXHJcbiAgICBdLCBSZWNvbW1lbmRhdGlvblJlc2lkZW5jZVJlcG9zaXRvcnkpO1xyXG4gICAgcmV0dXJuIFJlY29tbWVuZGF0aW9uUmVzaWRlbmNlUmVwb3NpdG9yeTtcclxufSgpKTtcclxuZXhwb3J0cy5SZWNvbW1lbmRhdGlvblJlc2lkZW5jZVJlcG9zaXRvcnkgPSBSZWNvbW1lbmRhdGlvblJlc2lkZW5jZVJlcG9zaXRvcnk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///174\n')},175:function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_fetch_client_1 = __webpack_require__(12);\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar MemberActivityRepository = /** @class */ (function () {\r\n    function MemberActivityRepository(httpClient) {\r\n        this.httpClient = httpClient;\r\n        this.configureHttp();\r\n    }\r\n    MemberActivityRepository.prototype.get = function () {\r\n        return this.httpClient\r\n            .fetch(\'/account-summary\')\r\n            .then(function (response) { return response.json(); });\r\n    };\r\n    MemberActivityRepository.prototype.configureHttp = function () {\r\n        this.httpClient.configure(function (config) {\r\n            config\r\n                .withDefaults({\r\n                credentials: \'same-origin\',\r\n                headers: {\r\n                    Accept: \'application/json\',\r\n                    Cookie: document.cookie\r\n                },\r\n            })\r\n                .rejectErrorResponses();\r\n        });\r\n    };\r\n    MemberActivityRepository = __decorate([\r\n        aurelia_framework_1.autoinject(),\r\n        __metadata("design:paramtypes", [aurelia_fetch_client_1.HttpClient])\r\n    ], MemberActivityRepository);\r\n    return MemberActivityRepository;\r\n}());\r\nexports.MemberActivityRepository = MemberActivityRepository;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9tZW1iZXItYWN0aXZpdHkvTWVtYmVyQWN0aXZpdHlSZXBvc2l0b3J5LnRzP2NlYmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsUUFBUTtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLGNBQWM7QUFDNUQsNkJBQTZCLG1CQUFPLENBQUMsRUFBc0I7QUFDM0QsMEJBQTBCLG1CQUFPLENBQUMsbUJBQW1CO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsd0JBQXdCLEVBQUU7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QiLCJmaWxlIjoiMTc1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2RlY29yYXRlID0gKHRoaXMgJiYgdGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn07XHJcbnZhciBfX21ldGFkYXRhID0gKHRoaXMgJiYgdGhpcy5fX21ldGFkYXRhKSB8fCBmdW5jdGlvbiAoaywgdikge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xyXG59O1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBhdXJlbGlhX2ZldGNoX2NsaWVudF8xID0gcmVxdWlyZShcImF1cmVsaWEtZmV0Y2gtY2xpZW50XCIpO1xyXG52YXIgYXVyZWxpYV9mcmFtZXdvcmtfMSA9IHJlcXVpcmUoXCJhdXJlbGlhLWZyYW1ld29ya1wiKTtcclxudmFyIE1lbWJlckFjdGl2aXR5UmVwb3NpdG9yeSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIE1lbWJlckFjdGl2aXR5UmVwb3NpdG9yeShodHRwQ2xpZW50KSB7XHJcbiAgICAgICAgdGhpcy5odHRwQ2xpZW50ID0gaHR0cENsaWVudDtcclxuICAgICAgICB0aGlzLmNvbmZpZ3VyZUh0dHAoKTtcclxuICAgIH1cclxuICAgIE1lbWJlckFjdGl2aXR5UmVwb3NpdG9yeS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcclxuICAgICAgICAgICAgLmZldGNoKCcvYWNjb3VudC1zdW1tYXJ5JylcclxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7IHJldHVybiByZXNwb25zZS5qc29uKCk7IH0pO1xyXG4gICAgfTtcclxuICAgIE1lbWJlckFjdGl2aXR5UmVwb3NpdG9yeS5wcm90b3R5cGUuY29uZmlndXJlSHR0cCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmh0dHBDbGllbnQuY29uZmlndXJlKGZ1bmN0aW9uIChjb25maWcpIHtcclxuICAgICAgICAgICAgY29uZmlnXHJcbiAgICAgICAgICAgICAgICAud2l0aERlZmF1bHRzKHtcclxuICAgICAgICAgICAgICAgIGNyZWRlbnRpYWxzOiAnc2FtZS1vcmlnaW4nLFxyXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAgICAgICAgICAgICAgIENvb2tpZTogZG9jdW1lbnQuY29va2llXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLnJlamVjdEVycm9yUmVzcG9uc2VzKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgTWVtYmVyQWN0aXZpdHlSZXBvc2l0b3J5ID0gX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5hdXRvaW5qZWN0KCksXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFthdXJlbGlhX2ZldGNoX2NsaWVudF8xLkh0dHBDbGllbnRdKVxyXG4gICAgXSwgTWVtYmVyQWN0aXZpdHlSZXBvc2l0b3J5KTtcclxuICAgIHJldHVybiBNZW1iZXJBY3Rpdml0eVJlcG9zaXRvcnk7XHJcbn0oKSk7XHJcbmV4cG9ydHMuTWVtYmVyQWN0aXZpdHlSZXBvc2l0b3J5ID0gTWVtYmVyQWN0aXZpdHlSZXBvc2l0b3J5O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///175\n')},176:function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __extends = (this && this.__extends) || (function () {\r\n    var extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return function (d, b) {\r\n        extendStatics(d, b);\r\n        function __() { this.constructor = d; }\r\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n    };\r\n})();\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar TreadstoneRepository_1 = __webpack_require__(21);\r\nvar Jaunt52Repository = /** @class */ (function (_super) {\r\n    __extends(Jaunt52Repository, _super);\r\n    function Jaunt52Repository() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Jaunt52Repository.prototype.get = function () {\r\n        return this.httpClient\r\n            .fetch("/Jaunt52/GetJaunt52/")\r\n            .then(function (response) { return response.json(); });\r\n    };\r\n    return Jaunt52Repository;\r\n}(TreadstoneRepository_1.TreadstoneRepository));\r\nexports.Jaunt52Repository = Jaunt52Repository;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9qYXVudDUyL0phdW50NTJSZXBvc2l0b3J5LnRzP2JlMDgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBO0FBQ0EsVUFBVSxnQkFBZ0Isc0NBQXNDLGlCQUFpQixFQUFFO0FBQ25GLHlCQUF5Qix1REFBdUQ7QUFDaEY7QUFDQTtBQUNBLHVCQUF1QixzQkFBc0I7QUFDN0M7QUFDQTtBQUNBLENBQUM7QUFDRCw4Q0FBOEMsY0FBYztBQUM1RCw2QkFBNkIsbUJBQU8sQ0FBQyxFQUE0QjtBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLHdCQUF3QixFQUFFO0FBQ2pFO0FBQ0E7QUFDQSxDQUFDO0FBQ0QiLCJmaWxlIjoiMTc2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XHJcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbiAgICB9O1xyXG59KSgpO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBUcmVhZHN0b25lUmVwb3NpdG9yeV8xID0gcmVxdWlyZShcIi4uLy4uL1RyZWFkc3RvbmVSZXBvc2l0b3J5XCIpO1xyXG52YXIgSmF1bnQ1MlJlcG9zaXRvcnkgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XHJcbiAgICBfX2V4dGVuZHMoSmF1bnQ1MlJlcG9zaXRvcnksIF9zdXBlcik7XHJcbiAgICBmdW5jdGlvbiBKYXVudDUyUmVwb3NpdG9yeSgpIHtcclxuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XHJcbiAgICB9XHJcbiAgICBKYXVudDUyUmVwb3NpdG9yeS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcclxuICAgICAgICAgICAgLmZldGNoKFwiL0phdW50NTIvR2V0SmF1bnQ1Mi9cIilcclxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7IHJldHVybiByZXNwb25zZS5qc29uKCk7IH0pO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBKYXVudDUyUmVwb3NpdG9yeTtcclxufShUcmVhZHN0b25lUmVwb3NpdG9yeV8xLlRyZWFkc3RvbmVSZXBvc2l0b3J5KSk7XHJcbmV4cG9ydHMuSmF1bnQ1MlJlcG9zaXRvcnkgPSBKYXVudDUyUmVwb3NpdG9yeTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///176\n')},177:function(module,exports,__webpack_require__){"use strict";eval('\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar AccessLevel;\r\n(function (AccessLevel) {\r\n    AccessLevel[AccessLevel["Public"] = 0] = "Public";\r\n    AccessLevel[AccessLevel["RegisteredUser"] = 1] = "RegisteredUser";\r\n    AccessLevel[AccessLevel["Member"] = 9] = "Member";\r\n    AccessLevel[AccessLevel["SystemAdmin"] = 10] = "SystemAdmin";\r\n    AccessLevel[AccessLevel["JauntPreviewAdmin"] = 18] = "JauntPreviewAdmin";\r\n})(AccessLevel = exports.AccessLevel || (exports.AccessLevel = {}));\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvZW51bXMvQWNjZXNzTGV2ZWxzLnRzPzc2N2QiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBOEMsY0FBYztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsZ0VBQWdFIiwiZmlsZSI6IjE3Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBBY2Nlc3NMZXZlbDtcclxuKGZ1bmN0aW9uIChBY2Nlc3NMZXZlbCkge1xyXG4gICAgQWNjZXNzTGV2ZWxbQWNjZXNzTGV2ZWxbXCJQdWJsaWNcIl0gPSAwXSA9IFwiUHVibGljXCI7XHJcbiAgICBBY2Nlc3NMZXZlbFtBY2Nlc3NMZXZlbFtcIlJlZ2lzdGVyZWRVc2VyXCJdID0gMV0gPSBcIlJlZ2lzdGVyZWRVc2VyXCI7XHJcbiAgICBBY2Nlc3NMZXZlbFtBY2Nlc3NMZXZlbFtcIk1lbWJlclwiXSA9IDldID0gXCJNZW1iZXJcIjtcclxuICAgIEFjY2Vzc0xldmVsW0FjY2Vzc0xldmVsW1wiU3lzdGVtQWRtaW5cIl0gPSAxMF0gPSBcIlN5c3RlbUFkbWluXCI7XHJcbiAgICBBY2Nlc3NMZXZlbFtBY2Nlc3NMZXZlbFtcIkphdW50UHJldmlld0FkbWluXCJdID0gMThdID0gXCJKYXVudFByZXZpZXdBZG1pblwiO1xyXG59KShBY2Nlc3NMZXZlbCA9IGV4cG9ydHMuQWNjZXNzTGV2ZWwgfHwgKGV4cG9ydHMuQWNjZXNzTGV2ZWwgPSB7fSkpO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///177\n')},178:function(module,exports,__webpack_require__){"use strict";eval('\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nexports.createPhotoSwipeSrcSet = function (imageViewModel, imageSizes) {\r\n    return imageSizes.reduce(function (srcSetDictionary, imageSize) {\r\n        srcSetDictionary[imageSize.toString()] = exports.createPhotoSwipeItem(imageViewModel, imageSize);\r\n        return srcSetDictionary;\r\n    }, \r\n    // tslint:disable-next-line:no-object-literal-type-assertion\r\n    {});\r\n};\r\nexports.createPhotoSwipeItem = function (imageViewModel, desiredWidth) { return ({\r\n    h: desiredWidth * (imageViewModel.height / imageViewModel.width),\r\n    src: imageViewModel.fullPath + "&width=" + desiredWidth,\r\n    title: imageViewModel.caption,\r\n    w: desiredWidth\r\n}); };\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9pbWFnZS1nYWxsZXJ5L3Bob3Rvc3dpcGVVdGlscy50cz9jN2M0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQThDLGNBQWM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxNQUFNO0FBQ047QUFDQSx3RUFBd0U7QUFDeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUUiLCJmaWxlIjoiMTc4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZXhwb3J0cy5jcmVhdGVQaG90b1N3aXBlU3JjU2V0ID0gZnVuY3Rpb24gKGltYWdlVmlld01vZGVsLCBpbWFnZVNpemVzKSB7XHJcbiAgICByZXR1cm4gaW1hZ2VTaXplcy5yZWR1Y2UoZnVuY3Rpb24gKHNyY1NldERpY3Rpb25hcnksIGltYWdlU2l6ZSkge1xyXG4gICAgICAgIHNyY1NldERpY3Rpb25hcnlbaW1hZ2VTaXplLnRvU3RyaW5nKCldID0gZXhwb3J0cy5jcmVhdGVQaG90b1N3aXBlSXRlbShpbWFnZVZpZXdNb2RlbCwgaW1hZ2VTaXplKTtcclxuICAgICAgICByZXR1cm4gc3JjU2V0RGljdGlvbmFyeTtcclxuICAgIH0sIFxyXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLW9iamVjdC1saXRlcmFsLXR5cGUtYXNzZXJ0aW9uXHJcbiAgICB7fSk7XHJcbn07XHJcbmV4cG9ydHMuY3JlYXRlUGhvdG9Td2lwZUl0ZW0gPSBmdW5jdGlvbiAoaW1hZ2VWaWV3TW9kZWwsIGRlc2lyZWRXaWR0aCkgeyByZXR1cm4gKHtcclxuICAgIGg6IGRlc2lyZWRXaWR0aCAqIChpbWFnZVZpZXdNb2RlbC5oZWlnaHQgLyBpbWFnZVZpZXdNb2RlbC53aWR0aCksXHJcbiAgICBzcmM6IGltYWdlVmlld01vZGVsLmZ1bGxQYXRoICsgXCImd2lkdGg9XCIgKyBkZXNpcmVkV2lkdGgsXHJcbiAgICB0aXRsZTogaW1hZ2VWaWV3TW9kZWwuY2FwdGlvbixcclxuICAgIHc6IGRlc2lyZWRXaWR0aFxyXG59KTsgfTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///178\n')},179:function(module,exports,__webpack_require__){"use strict";eval('\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar AspectRatio;\r\n(function (AspectRatio) {\r\n    AspectRatio["SixteenByNine"] = "Sixteen To Nine";\r\n    AspectRatio["FourByThree"] = "Four To Three";\r\n    AspectRatio["OneByOne"] = "One To One";\r\n})(AspectRatio = exports.AspectRatio || (exports.AspectRatio = {}));\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvZW51bXMvQXNwZWN0UmF0aW8udHM/MDg1ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE4QyxjQUFjO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLGdFQUFnRSIsImZpbGUiOiIxNzkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgQXNwZWN0UmF0aW87XHJcbihmdW5jdGlvbiAoQXNwZWN0UmF0aW8pIHtcclxuICAgIEFzcGVjdFJhdGlvW1wiU2l4dGVlbkJ5TmluZVwiXSA9IFwiU2l4dGVlbiBUbyBOaW5lXCI7XHJcbiAgICBBc3BlY3RSYXRpb1tcIkZvdXJCeVRocmVlXCJdID0gXCJGb3VyIFRvIFRocmVlXCI7XHJcbiAgICBBc3BlY3RSYXRpb1tcIk9uZUJ5T25lXCJdID0gXCJPbmUgVG8gT25lXCI7XHJcbn0pKEFzcGVjdFJhdGlvID0gZXhwb3J0cy5Bc3BlY3RSYXRpbyB8fCAoZXhwb3J0cy5Bc3BlY3RSYXRpbyA9IHt9KSk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///179\n')},18:function(module,exports,__webpack_require__){"use strict";eval('\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar SortOrder;\r\n(function (SortOrder) {\r\n    SortOrder[SortOrder["Ascending"] = 1] = "Ascending";\r\n    SortOrder[SortOrder["Descending"] = 2] = "Descending";\r\n})(SortOrder = exports.SortOrder || (exports.SortOrder = {}));\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvdXRpbGl0aWVzL1NvcnRPcmRlci50cz9lYWRiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQThDLGNBQWM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLDBEQUEwRCIsImZpbGUiOiIxOC5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBTb3J0T3JkZXI7XHJcbihmdW5jdGlvbiAoU29ydE9yZGVyKSB7XHJcbiAgICBTb3J0T3JkZXJbU29ydE9yZGVyW1wiQXNjZW5kaW5nXCJdID0gMV0gPSBcIkFzY2VuZGluZ1wiO1xyXG4gICAgU29ydE9yZGVyW1NvcnRPcmRlcltcIkRlc2NlbmRpbmdcIl0gPSAyXSA9IFwiRGVzY2VuZGluZ1wiO1xyXG59KShTb3J0T3JkZXIgPSBleHBvcnRzLlNvcnRPcmRlciB8fCAoZXhwb3J0cy5Tb3J0T3JkZXIgPSB7fSkpO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///18\n')},180:function(module,exports,__webpack_require__){"use strict";eval('\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar ImageOrientation;\r\n(function (ImageOrientation) {\r\n    ImageOrientation["Landscape"] = "Landscape";\r\n    ImageOrientation["Portrait"] = "Portrait";\r\n})(ImageOrientation = exports.ImageOrientation || (exports.ImageOrientation = {}));\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvZW51bXMvSW1hZ2VPcmllbnRhdGlvbi50cz9hMTY5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQThDLGNBQWM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLCtFQUErRSIsImZpbGUiOiIxODAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgSW1hZ2VPcmllbnRhdGlvbjtcclxuKGZ1bmN0aW9uIChJbWFnZU9yaWVudGF0aW9uKSB7XHJcbiAgICBJbWFnZU9yaWVudGF0aW9uW1wiTGFuZHNjYXBlXCJdID0gXCJMYW5kc2NhcGVcIjtcclxuICAgIEltYWdlT3JpZW50YXRpb25bXCJQb3J0cmFpdFwiXSA9IFwiUG9ydHJhaXRcIjtcclxufSkoSW1hZ2VPcmllbnRhdGlvbiA9IGV4cG9ydHMuSW1hZ2VPcmllbnRhdGlvbiB8fCAoZXhwb3J0cy5JbWFnZU9yaWVudGF0aW9uID0ge30pKTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///180\n')},181:function(module,exports,__webpack_require__){"use strict";eval('\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar HeroHeight;\r\n(function (HeroHeight) {\r\n    HeroHeight["FullSize"] = "Full Size";\r\n    HeroHeight["AutomaticHeight"] = "Automatic Height";\r\n    HeroHeight["UhOh"] = "404";\r\n})(HeroHeight = exports.HeroHeight || (exports.HeroHeight = {}));\r\nexports.HeroHeightCssMapper = {};\r\nexports.HeroHeightCssMapper[HeroHeight.FullSize] = \'full-size\';\r\nexports.HeroHeightCssMapper[HeroHeight.AutomaticHeight] = \'automatic-height\';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9oZXJvL0lIZXJvLnRzPzU1ZWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBOEMsY0FBYztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyw2REFBNkQ7QUFDOUQ7QUFDQTtBQUNBIiwiZmlsZSI6IjE4MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBIZXJvSGVpZ2h0O1xyXG4oZnVuY3Rpb24gKEhlcm9IZWlnaHQpIHtcclxuICAgIEhlcm9IZWlnaHRbXCJGdWxsU2l6ZVwiXSA9IFwiRnVsbCBTaXplXCI7XHJcbiAgICBIZXJvSGVpZ2h0W1wiQXV0b21hdGljSGVpZ2h0XCJdID0gXCJBdXRvbWF0aWMgSGVpZ2h0XCI7XHJcbiAgICBIZXJvSGVpZ2h0W1wiVWhPaFwiXSA9IFwiNDA0XCI7XHJcbn0pKEhlcm9IZWlnaHQgPSBleHBvcnRzLkhlcm9IZWlnaHQgfHwgKGV4cG9ydHMuSGVyb0hlaWdodCA9IHt9KSk7XHJcbmV4cG9ydHMuSGVyb0hlaWdodENzc01hcHBlciA9IHt9O1xyXG5leHBvcnRzLkhlcm9IZWlnaHRDc3NNYXBwZXJbSGVyb0hlaWdodC5GdWxsU2l6ZV0gPSAnZnVsbC1zaXplJztcclxuZXhwb3J0cy5IZXJvSGVpZ2h0Q3NzTWFwcGVyW0hlcm9IZWlnaHQuQXV0b21hdGljSGVpZ2h0XSA9ICdhdXRvbWF0aWMtaGVpZ2h0JztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///181\n')},182:function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __extends = (this && this.__extends) || (function () {\r\n    var extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return function (d, b) {\r\n        extendStatics(d, b);\r\n        function __() { this.constructor = d; }\r\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n    };\r\n})();\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar TreadstoneRepository_1 = __webpack_require__(21);\r\nvar CuratedTripRepository = /** @class */ (function (_super) {\r\n    __extends(CuratedTripRepository, _super);\r\n    function CuratedTripRepository() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    CuratedTripRepository.prototype.get = function (curatedListId) {\r\n        return this.httpClient\r\n            .fetch("/CuratedTrip/GetCuratedTrip/" + curatedListId)\r\n            .then(function (response) { return response.json(); });\r\n    };\r\n    CuratedTripRepository.prototype.getHolidayWishListOverview = function (holidayWishListIds) {\r\n        var holidayIds = holidayWishListIds.toString();\r\n        return this.httpClient\r\n            .fetch("/holidaywishlist/GetHolidayWishListProgramDatesById/?holidayWishListIds=" + holidayIds)\r\n            .then(function (response) { return response.json(); });\r\n    };\r\n    CuratedTripRepository.prototype.saveHolidayWishListUnitSelection = function (curatedTripSetId, unitId) {\r\n        var route = \'/holidaywishlist/AddUnitSelection\';\r\n        var data = {\r\n            holidayWishListId: curatedTripSetId,\r\n            unitId: unitId\r\n        };\r\n        return this.httpClient.fetch(route, {\r\n            body: JSON.stringify(data),\r\n            method: \'post\',\r\n        }).then(function (response) { return response.json(); });\r\n    };\r\n    return CuratedTripRepository;\r\n}(TreadstoneRepository_1.TreadstoneRepository));\r\nexports.CuratedTripRepository = CuratedTripRepository;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9jdXJhdGVkLXRyaXAvQ3VyYXRlZFRyaXBSZXBvc2l0b3J5LnRzPzQ2NDUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBO0FBQ0EsVUFBVSxnQkFBZ0Isc0NBQXNDLGlCQUFpQixFQUFFO0FBQ25GLHlCQUF5Qix1REFBdUQ7QUFDaEY7QUFDQTtBQUNBLHVCQUF1QixzQkFBc0I7QUFDN0M7QUFDQTtBQUNBLENBQUM7QUFDRCw4Q0FBOEMsY0FBYztBQUM1RCw2QkFBNkIsbUJBQU8sQ0FBQyxFQUE0QjtBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLHdCQUF3QixFQUFFO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsd0JBQXdCLEVBQUU7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLDRCQUE0Qix3QkFBd0IsRUFBRTtBQUMvRDtBQUNBO0FBQ0EsQ0FBQztBQUNEIiwiZmlsZSI6IjE4Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xyXG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG4gICAgfTtcclxufSkoKTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgVHJlYWRzdG9uZVJlcG9zaXRvcnlfMSA9IHJlcXVpcmUoXCIuLi8uLi9UcmVhZHN0b25lUmVwb3NpdG9yeVwiKTtcclxudmFyIEN1cmF0ZWRUcmlwUmVwb3NpdG9yeSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcclxuICAgIF9fZXh0ZW5kcyhDdXJhdGVkVHJpcFJlcG9zaXRvcnksIF9zdXBlcik7XHJcbiAgICBmdW5jdGlvbiBDdXJhdGVkVHJpcFJlcG9zaXRvcnkoKSB7XHJcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xyXG4gICAgfVxyXG4gICAgQ3VyYXRlZFRyaXBSZXBvc2l0b3J5LnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoY3VyYXRlZExpc3RJZCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcclxuICAgICAgICAgICAgLmZldGNoKFwiL0N1cmF0ZWRUcmlwL0dldEN1cmF0ZWRUcmlwL1wiICsgY3VyYXRlZExpc3RJZClcclxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7IHJldHVybiByZXNwb25zZS5qc29uKCk7IH0pO1xyXG4gICAgfTtcclxuICAgIEN1cmF0ZWRUcmlwUmVwb3NpdG9yeS5wcm90b3R5cGUuZ2V0SG9saWRheVdpc2hMaXN0T3ZlcnZpZXcgPSBmdW5jdGlvbiAoaG9saWRheVdpc2hMaXN0SWRzKSB7XHJcbiAgICAgICAgdmFyIGhvbGlkYXlJZHMgPSBob2xpZGF5V2lzaExpc3RJZHMudG9TdHJpbmcoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XHJcbiAgICAgICAgICAgIC5mZXRjaChcIi9ob2xpZGF5d2lzaGxpc3QvR2V0SG9saWRheVdpc2hMaXN0UHJvZ3JhbURhdGVzQnlJZC8/aG9saWRheVdpc2hMaXN0SWRzPVwiICsgaG9saWRheUlkcylcclxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7IHJldHVybiByZXNwb25zZS5qc29uKCk7IH0pO1xyXG4gICAgfTtcclxuICAgIEN1cmF0ZWRUcmlwUmVwb3NpdG9yeS5wcm90b3R5cGUuc2F2ZUhvbGlkYXlXaXNoTGlzdFVuaXRTZWxlY3Rpb24gPSBmdW5jdGlvbiAoY3VyYXRlZFRyaXBTZXRJZCwgdW5pdElkKSB7XHJcbiAgICAgICAgdmFyIHJvdXRlID0gJy9ob2xpZGF5d2lzaGxpc3QvQWRkVW5pdFNlbGVjdGlvbic7XHJcbiAgICAgICAgdmFyIGRhdGEgPSB7XHJcbiAgICAgICAgICAgIGhvbGlkYXlXaXNoTGlzdElkOiBjdXJhdGVkVHJpcFNldElkLFxyXG4gICAgICAgICAgICB1bml0SWQ6IHVuaXRJZFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5mZXRjaChyb3V0ZSwge1xyXG4gICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShkYXRhKSxcclxuICAgICAgICAgICAgbWV0aG9kOiAncG9zdCcsXHJcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHsgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTsgfSk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIEN1cmF0ZWRUcmlwUmVwb3NpdG9yeTtcclxufShUcmVhZHN0b25lUmVwb3NpdG9yeV8xLlRyZWFkc3RvbmVSZXBvc2l0b3J5KSk7XHJcbmV4cG9ydHMuQ3VyYXRlZFRyaXBSZXBvc2l0b3J5ID0gQ3VyYXRlZFRyaXBSZXBvc2l0b3J5O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///182\n')},183:function(module,exports,__webpack_require__){"use strict";eval('\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar CopyBlockDisplayType;\r\n(function (CopyBlockDisplayType) {\r\n    CopyBlockDisplayType["Default"] = "Default";\r\n    CopyBlockDisplayType["TravelSection"] = "Travel Section";\r\n})(CopyBlockDisplayType = exports.CopyBlockDisplayType || (exports.CopyBlockDisplayType = {}));\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9jb3B5LWJsb2NrL0NvcHlCbG9ja0Rpc3BsYXlUeXBlLnRzPzFiMDgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBOEMsY0FBYztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsMkZBQTJGIiwiZmlsZSI6IjE4My5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBDb3B5QmxvY2tEaXNwbGF5VHlwZTtcclxuKGZ1bmN0aW9uIChDb3B5QmxvY2tEaXNwbGF5VHlwZSkge1xyXG4gICAgQ29weUJsb2NrRGlzcGxheVR5cGVbXCJEZWZhdWx0XCJdID0gXCJEZWZhdWx0XCI7XHJcbiAgICBDb3B5QmxvY2tEaXNwbGF5VHlwZVtcIlRyYXZlbFNlY3Rpb25cIl0gPSBcIlRyYXZlbCBTZWN0aW9uXCI7XHJcbn0pKENvcHlCbG9ja0Rpc3BsYXlUeXBlID0gZXhwb3J0cy5Db3B5QmxvY2tEaXNwbGF5VHlwZSB8fCAoZXhwb3J0cy5Db3B5QmxvY2tEaXNwbGF5VHlwZSA9IHt9KSk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///183\n')},184:function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError("Generator is already executing.");\r\n        while (_) try {\r\n            if (f = 1, y && (t = y[op[0] & 2 ? "return" : op[0] ? "throw" : "next"]) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [0, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_http_client_1 = __webpack_require__(26);\r\nvar RegistrationRepository = /** @class */ (function () {\r\n    function RegistrationRepository(httpClient) {\r\n        this.httpClient = httpClient;\r\n        this.httpClient = new aurelia_http_client_1.HttpClient();\r\n    }\r\n    RegistrationRepository.prototype.submit = function (model) {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var response;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.httpClient\r\n                            .createRequest(model.targetUrl)\r\n                            .asPost()\r\n                            .withContent(model)\r\n                            .send()\r\n                            .then(function (responseMessage) { return JSON.parse(responseMessage.response); })\r\n                            .catch(function (responseMessage) {\r\n                            throw JSON.parse(responseMessage.response);\r\n                        })];\r\n                    case 1:\r\n                        response = _a.sent();\r\n                        return [2 /*return*/, response];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    return RegistrationRepository;\r\n}());\r\nexports.RegistrationRepository = RegistrationRepository;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9jYW1wYWlnbi1yZWdpc3RyYXRpb24tZm9ybS9SZWdpc3RyYXRpb25SZXBvc2l0b3J5LnRzP2FjYmEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBO0FBQ0EsbUNBQW1DLE1BQU0sNkJBQTZCLEVBQUUsWUFBWSxXQUFXLEVBQUU7QUFDakcsa0NBQWtDLE1BQU0saUNBQWlDLEVBQUUsWUFBWSxXQUFXLEVBQUU7QUFDcEcsK0JBQStCLGlFQUFpRSx1QkFBdUIsRUFBRSw0QkFBNEI7QUFDcko7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLGFBQWEsNkJBQTZCLDBCQUEwQixhQUFhLEVBQUUscUJBQXFCO0FBQ3hHLGdCQUFnQixxREFBcUQsb0VBQW9FLGFBQWEsRUFBRTtBQUN4SixzQkFBc0Isc0JBQXNCLHFCQUFxQixHQUFHO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QztBQUN2QyxrQ0FBa0MsU0FBUztBQUMzQyxrQ0FBa0MsV0FBVyxVQUFVO0FBQ3ZELHlDQUF5QyxjQUFjO0FBQ3ZEO0FBQ0EsNkdBQTZHLE9BQU8sVUFBVTtBQUM5SCxnRkFBZ0YsaUJBQWlCLE9BQU87QUFDeEcsd0RBQXdELGdCQUFnQixRQUFRLE9BQU87QUFDdkYsOENBQThDLGdCQUFnQixnQkFBZ0IsT0FBTztBQUNyRjtBQUNBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0EsU0FBUyxZQUFZLGFBQWEsT0FBTyxFQUFFLFVBQVUsV0FBVztBQUNoRSxtQ0FBbUMsU0FBUztBQUM1QztBQUNBO0FBQ0EsOENBQThDLGNBQWM7QUFDNUQsNEJBQTRCLG1CQUFPLENBQUMsRUFBcUI7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOERBQThELDZDQUE2QyxFQUFFO0FBQzdHO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQSxDQUFDO0FBQ0QiLCJmaWxlIjoiMTg0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZShyZXN1bHQudmFsdWUpOyB9KS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn07XHJcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IHlbb3BbMF0gJiAyID8gXCJyZXR1cm5cIiA6IG9wWzBdID8gXCJ0aHJvd1wiIDogXCJuZXh0XCJdKSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFswLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn07XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIGF1cmVsaWFfaHR0cF9jbGllbnRfMSA9IHJlcXVpcmUoXCJhdXJlbGlhLWh0dHAtY2xpZW50XCIpO1xyXG52YXIgUmVnaXN0cmF0aW9uUmVwb3NpdG9yeSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIFJlZ2lzdHJhdGlvblJlcG9zaXRvcnkoaHR0cENsaWVudCkge1xyXG4gICAgICAgIHRoaXMuaHR0cENsaWVudCA9IGh0dHBDbGllbnQ7XHJcbiAgICAgICAgdGhpcy5odHRwQ2xpZW50ID0gbmV3IGF1cmVsaWFfaHR0cF9jbGllbnRfMS5IdHRwQ2xpZW50KCk7XHJcbiAgICB9XHJcbiAgICBSZWdpc3RyYXRpb25SZXBvc2l0b3J5LnByb3RvdHlwZS5zdWJtaXQgPSBmdW5jdGlvbiAobW9kZWwpIHtcclxuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciByZXNwb25zZTtcclxuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5odHRwQ2xpZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY3JlYXRlUmVxdWVzdChtb2RlbC50YXJnZXRVcmwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXNQb3N0KClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoQ29udGVudChtb2RlbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZW5kKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXNwb25zZU1lc3NhZ2UpIHsgcmV0dXJuIEpTT04ucGFyc2UocmVzcG9uc2VNZXNzYWdlLnJlc3BvbnNlKTsgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAocmVzcG9uc2VNZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBKU09OLnBhcnNlKHJlc3BvbnNlTWVzc2FnZS5yZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gX2Euc2VudCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgcmVzcG9uc2VdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gUmVnaXN0cmF0aW9uUmVwb3NpdG9yeTtcclxufSgpKTtcclxuZXhwb3J0cy5SZWdpc3RyYXRpb25SZXBvc2l0b3J5ID0gUmVnaXN0cmF0aW9uUmVwb3NpdG9yeTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///184\n')},185:function(module,exports,__webpack_require__){"use strict";eval("\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar SelectMenuItem_1 = __webpack_require__(13);\r\nexports.UnitedStates = 240;\r\nexports.Canada = 254;\r\nexports.Mexico = 150;\r\nexports.Countries = [\r\n    new SelectMenuItem_1.SelectMenuItem('Afghanistan', 1),\r\n    new SelectMenuItem_1.SelectMenuItem('Akrotiri', 2),\r\n    new SelectMenuItem_1.SelectMenuItem('Albania', 3),\r\n    new SelectMenuItem_1.SelectMenuItem('Algeria', 4),\r\n    new SelectMenuItem_1.SelectMenuItem('American Samoa', 5),\r\n    new SelectMenuItem_1.SelectMenuItem('Andorra', 6),\r\n    new SelectMenuItem_1.SelectMenuItem('Angola', 7),\r\n    new SelectMenuItem_1.SelectMenuItem('Anguilla', 8),\r\n    new SelectMenuItem_1.SelectMenuItem('Antarctica', 9),\r\n    new SelectMenuItem_1.SelectMenuItem('Antigua and Barbuda', 10),\r\n    new SelectMenuItem_1.SelectMenuItem('Argentina', 11),\r\n    new SelectMenuItem_1.SelectMenuItem('Armenia', 12),\r\n    new SelectMenuItem_1.SelectMenuItem('Aruba', 13),\r\n    new SelectMenuItem_1.SelectMenuItem('Ashmore and Cartier Islands', 14),\r\n    new SelectMenuItem_1.SelectMenuItem('Australia', 15),\r\n    new SelectMenuItem_1.SelectMenuItem('Austria', 16),\r\n    new SelectMenuItem_1.SelectMenuItem('Azerbaijan', 17),\r\n    new SelectMenuItem_1.SelectMenuItem('Bahamas', 18),\r\n    new SelectMenuItem_1.SelectMenuItem('Bahrain', 19),\r\n    new SelectMenuItem_1.SelectMenuItem('Bangladesh', 20),\r\n    new SelectMenuItem_1.SelectMenuItem('Barbados', 21),\r\n    new SelectMenuItem_1.SelectMenuItem('Bassas da India', 22),\r\n    new SelectMenuItem_1.SelectMenuItem('Belarus', 23),\r\n    new SelectMenuItem_1.SelectMenuItem('Belgium', 24),\r\n    new SelectMenuItem_1.SelectMenuItem('Belize', 25),\r\n    new SelectMenuItem_1.SelectMenuItem('Benin', 26),\r\n    new SelectMenuItem_1.SelectMenuItem('Bermuda', 27),\r\n    new SelectMenuItem_1.SelectMenuItem('Bhutan', 28),\r\n    new SelectMenuItem_1.SelectMenuItem('Bolivia', 29),\r\n    new SelectMenuItem_1.SelectMenuItem('Bosnia and Herzegovina', 30),\r\n    new SelectMenuItem_1.SelectMenuItem('Botswana', 31),\r\n    new SelectMenuItem_1.SelectMenuItem('Bouvet Island', 32),\r\n    new SelectMenuItem_1.SelectMenuItem('Brazil', 33),\r\n    new SelectMenuItem_1.SelectMenuItem('British Indian Ocean Territory', 34),\r\n    new SelectMenuItem_1.SelectMenuItem('British Virgin Islands', 35),\r\n    new SelectMenuItem_1.SelectMenuItem('Brunei', 36),\r\n    new SelectMenuItem_1.SelectMenuItem('Bulgaria', 37),\r\n    new SelectMenuItem_1.SelectMenuItem('Burkina Faso', 38),\r\n    new SelectMenuItem_1.SelectMenuItem('Burma', 39),\r\n    new SelectMenuItem_1.SelectMenuItem('Burundi', 40),\r\n    new SelectMenuItem_1.SelectMenuItem('Cameroon', 41),\r\n    new SelectMenuItem_1.SelectMenuItem('Canada', exports.Canada),\r\n    new SelectMenuItem_1.SelectMenuItem('Cape Verde', 42),\r\n    new SelectMenuItem_1.SelectMenuItem('Cayman Islands', 43),\r\n    new SelectMenuItem_1.SelectMenuItem('Central African Republic', 44),\r\n    new SelectMenuItem_1.SelectMenuItem('Chad', 45),\r\n    new SelectMenuItem_1.SelectMenuItem('Chile', 46),\r\n    new SelectMenuItem_1.SelectMenuItem('China', 255),\r\n    new SelectMenuItem_1.SelectMenuItem('Christmas Island', 47),\r\n    new SelectMenuItem_1.SelectMenuItem('Cocos (Keeling) Islands', 48),\r\n    new SelectMenuItem_1.SelectMenuItem('Colombia', 49),\r\n    new SelectMenuItem_1.SelectMenuItem('Comoros', 50),\r\n    new SelectMenuItem_1.SelectMenuItem('Congo, Democratic Republic of the', 51),\r\n    new SelectMenuItem_1.SelectMenuItem('Congo, Republic of the', 52),\r\n    new SelectMenuItem_1.SelectMenuItem('Cook Islands', 53),\r\n    new SelectMenuItem_1.SelectMenuItem('Coral Sea Islands', 54),\r\n    new SelectMenuItem_1.SelectMenuItem('Costa Rica', 55),\r\n    new SelectMenuItem_1.SelectMenuItem('Cote d&#39;Ivoire', 56),\r\n    new SelectMenuItem_1.SelectMenuItem('Croatia', 57),\r\n    new SelectMenuItem_1.SelectMenuItem('Cuba', 58),\r\n    new SelectMenuItem_1.SelectMenuItem('Cyprus', 59),\r\n    new SelectMenuItem_1.SelectMenuItem('Czech Republic', 60),\r\n    new SelectMenuItem_1.SelectMenuItem('Denmark', 61),\r\n    new SelectMenuItem_1.SelectMenuItem('Dhekelia', 62),\r\n    new SelectMenuItem_1.SelectMenuItem('Djibouti', 63),\r\n    new SelectMenuItem_1.SelectMenuItem('Dominica', 64),\r\n    new SelectMenuItem_1.SelectMenuItem('Dominican Republic', 65),\r\n    new SelectMenuItem_1.SelectMenuItem('Ecuador', 66),\r\n    new SelectMenuItem_1.SelectMenuItem('Egypt', 67),\r\n    new SelectMenuItem_1.SelectMenuItem('El Salvador', 68),\r\n    new SelectMenuItem_1.SelectMenuItem('Equatorial Guinea', 69),\r\n    new SelectMenuItem_1.SelectMenuItem('Eritrea', 70),\r\n    new SelectMenuItem_1.SelectMenuItem('Estonia', 71),\r\n    new SelectMenuItem_1.SelectMenuItem('Ethiopia', 72),\r\n    new SelectMenuItem_1.SelectMenuItem('Europa Island', 73),\r\n    new SelectMenuItem_1.SelectMenuItem('Falkland Islands (Islas Malvinas)', 74),\r\n    new SelectMenuItem_1.SelectMenuItem('Faroe Islands', 75),\r\n    new SelectMenuItem_1.SelectMenuItem('Fiji', 76),\r\n    new SelectMenuItem_1.SelectMenuItem('Finland', 77),\r\n    new SelectMenuItem_1.SelectMenuItem('France', 78),\r\n    new SelectMenuItem_1.SelectMenuItem('French Guiana', 79),\r\n    new SelectMenuItem_1.SelectMenuItem('French Polynesia', 80),\r\n    new SelectMenuItem_1.SelectMenuItem('French Southern and Antarctic Lands', 81),\r\n    new SelectMenuItem_1.SelectMenuItem('Gabon', 82),\r\n    new SelectMenuItem_1.SelectMenuItem('Gambia, The', 83),\r\n    new SelectMenuItem_1.SelectMenuItem('Gaza Strip', 84),\r\n    new SelectMenuItem_1.SelectMenuItem('Georgia', 85),\r\n    new SelectMenuItem_1.SelectMenuItem('Germany', 86),\r\n    new SelectMenuItem_1.SelectMenuItem('Ghana', 87),\r\n    new SelectMenuItem_1.SelectMenuItem('Gibraltar', 88),\r\n    new SelectMenuItem_1.SelectMenuItem('Glorioso Islands', 89),\r\n    new SelectMenuItem_1.SelectMenuItem('Greece', 90),\r\n    new SelectMenuItem_1.SelectMenuItem('Greenland', 91),\r\n    new SelectMenuItem_1.SelectMenuItem('Grenada', 92),\r\n    new SelectMenuItem_1.SelectMenuItem('Guadeloupe', 93),\r\n    new SelectMenuItem_1.SelectMenuItem('Guam', 94),\r\n    new SelectMenuItem_1.SelectMenuItem('Guatemala', 95),\r\n    new SelectMenuItem_1.SelectMenuItem('Guernsey', 96),\r\n    new SelectMenuItem_1.SelectMenuItem('Guinea', 97),\r\n    new SelectMenuItem_1.SelectMenuItem('Guinea-Bissau', 98),\r\n    new SelectMenuItem_1.SelectMenuItem('Guyana', 99),\r\n    new SelectMenuItem_1.SelectMenuItem('Haiti', 100),\r\n    new SelectMenuItem_1.SelectMenuItem('Heard Island and McDonald Islands', 101),\r\n    new SelectMenuItem_1.SelectMenuItem('Holy See (Vatican City)', 102),\r\n    new SelectMenuItem_1.SelectMenuItem('Honduras', 103),\r\n    new SelectMenuItem_1.SelectMenuItem('Hong Kong', 104),\r\n    new SelectMenuItem_1.SelectMenuItem('Hungary', 105),\r\n    new SelectMenuItem_1.SelectMenuItem('Iceland', 106),\r\n    new SelectMenuItem_1.SelectMenuItem('India', 107),\r\n    new SelectMenuItem_1.SelectMenuItem('Indonesia', 108),\r\n    new SelectMenuItem_1.SelectMenuItem('Iran', 109),\r\n    new SelectMenuItem_1.SelectMenuItem('Iraq', 110),\r\n    new SelectMenuItem_1.SelectMenuItem('Ireland', 111),\r\n    new SelectMenuItem_1.SelectMenuItem('Isle of Man', 112),\r\n    new SelectMenuItem_1.SelectMenuItem('Israel', 113),\r\n    new SelectMenuItem_1.SelectMenuItem('Italy', 114),\r\n    new SelectMenuItem_1.SelectMenuItem('Jamaica', 115),\r\n    new SelectMenuItem_1.SelectMenuItem('Jan Mayen', 116),\r\n    new SelectMenuItem_1.SelectMenuItem('Japan', 117),\r\n    new SelectMenuItem_1.SelectMenuItem('Jersey', 118),\r\n    new SelectMenuItem_1.SelectMenuItem('Jordan', 119),\r\n    new SelectMenuItem_1.SelectMenuItem('Juan de Nova Island', 120),\r\n    new SelectMenuItem_1.SelectMenuItem('Kazakhstan', 121),\r\n    new SelectMenuItem_1.SelectMenuItem('Kenya', 122),\r\n    new SelectMenuItem_1.SelectMenuItem('Kiribati', 123),\r\n    new SelectMenuItem_1.SelectMenuItem('Korea, North', 124),\r\n    new SelectMenuItem_1.SelectMenuItem('Korea, South', 125),\r\n    new SelectMenuItem_1.SelectMenuItem('Kuwait', 126),\r\n    new SelectMenuItem_1.SelectMenuItem('Kyrgyzstan', 127),\r\n    new SelectMenuItem_1.SelectMenuItem('Laos', 128),\r\n    new SelectMenuItem_1.SelectMenuItem('Latvia', 129),\r\n    new SelectMenuItem_1.SelectMenuItem('Lebanon', 130),\r\n    new SelectMenuItem_1.SelectMenuItem('Lesotho', 131),\r\n    new SelectMenuItem_1.SelectMenuItem('Liberia', 132),\r\n    new SelectMenuItem_1.SelectMenuItem('Libya', 133),\r\n    new SelectMenuItem_1.SelectMenuItem('Liechtenstein', 134),\r\n    new SelectMenuItem_1.SelectMenuItem('Lithuania', 135),\r\n    new SelectMenuItem_1.SelectMenuItem('Luxembourg', 136),\r\n    new SelectMenuItem_1.SelectMenuItem('Macau', 137),\r\n    new SelectMenuItem_1.SelectMenuItem('Macedonia', 138),\r\n    new SelectMenuItem_1.SelectMenuItem('Madagascar', 139),\r\n    new SelectMenuItem_1.SelectMenuItem('Malawi', 140),\r\n    new SelectMenuItem_1.SelectMenuItem('Malaysia', 141),\r\n    new SelectMenuItem_1.SelectMenuItem('Maldives', 142),\r\n    new SelectMenuItem_1.SelectMenuItem('Mali', 143),\r\n    new SelectMenuItem_1.SelectMenuItem('Malta', 144),\r\n    new SelectMenuItem_1.SelectMenuItem('Marshall Islands', 145),\r\n    new SelectMenuItem_1.SelectMenuItem('Martinique', 146),\r\n    new SelectMenuItem_1.SelectMenuItem('Mauritania', 147),\r\n    new SelectMenuItem_1.SelectMenuItem('Mauritius', 148),\r\n    new SelectMenuItem_1.SelectMenuItem('Mayotte', 149),\r\n    new SelectMenuItem_1.SelectMenuItem('Mexico', exports.Mexico),\r\n    new SelectMenuItem_1.SelectMenuItem('Micronesia, Federated States of', 151),\r\n    new SelectMenuItem_1.SelectMenuItem('Moldova', 152),\r\n    new SelectMenuItem_1.SelectMenuItem('Monaco', 153),\r\n    new SelectMenuItem_1.SelectMenuItem('Mongolia', 154),\r\n    new SelectMenuItem_1.SelectMenuItem('Montserrat', 155),\r\n    new SelectMenuItem_1.SelectMenuItem('Morocco', 156),\r\n    new SelectMenuItem_1.SelectMenuItem('Mozambique', 157),\r\n    new SelectMenuItem_1.SelectMenuItem('Namibia', 158),\r\n    new SelectMenuItem_1.SelectMenuItem('Nauru', 159),\r\n    new SelectMenuItem_1.SelectMenuItem('Navassa Island', 160),\r\n    new SelectMenuItem_1.SelectMenuItem('Nepal', 161),\r\n    new SelectMenuItem_1.SelectMenuItem('Netherlands', 162),\r\n    new SelectMenuItem_1.SelectMenuItem('Netherlands Antilles', 163),\r\n    new SelectMenuItem_1.SelectMenuItem('New Caledonia', 164),\r\n    new SelectMenuItem_1.SelectMenuItem('New Zealand', 165),\r\n    new SelectMenuItem_1.SelectMenuItem('Nicaragua', 166),\r\n    new SelectMenuItem_1.SelectMenuItem('Niger', 167),\r\n    new SelectMenuItem_1.SelectMenuItem('Nigeria', 168),\r\n    new SelectMenuItem_1.SelectMenuItem('Niue', 169),\r\n    new SelectMenuItem_1.SelectMenuItem('Norfolk Island', 170),\r\n    new SelectMenuItem_1.SelectMenuItem('Northern Mariana Islands', 171),\r\n    new SelectMenuItem_1.SelectMenuItem('Norway', 172),\r\n    new SelectMenuItem_1.SelectMenuItem('Oman', 173),\r\n    new SelectMenuItem_1.SelectMenuItem('Pakistan', 174),\r\n    new SelectMenuItem_1.SelectMenuItem('Palau', 175),\r\n    new SelectMenuItem_1.SelectMenuItem('Panama', 176),\r\n    new SelectMenuItem_1.SelectMenuItem('Papua New Guinea', 177),\r\n    new SelectMenuItem_1.SelectMenuItem('Paracel Islands', 178),\r\n    new SelectMenuItem_1.SelectMenuItem('Paraguay', 179),\r\n    new SelectMenuItem_1.SelectMenuItem('Peru', 180),\r\n    new SelectMenuItem_1.SelectMenuItem('Philippines', 181),\r\n    new SelectMenuItem_1.SelectMenuItem('Pitcairn Islands', 182),\r\n    new SelectMenuItem_1.SelectMenuItem('Poland', 183),\r\n    new SelectMenuItem_1.SelectMenuItem('Portugal', 184),\r\n    new SelectMenuItem_1.SelectMenuItem('Puerto Rico', 185),\r\n    new SelectMenuItem_1.SelectMenuItem('Qatar', 186),\r\n    new SelectMenuItem_1.SelectMenuItem('Reunion', 187),\r\n    new SelectMenuItem_1.SelectMenuItem('Romania', 188),\r\n    new SelectMenuItem_1.SelectMenuItem('Russia', 189),\r\n    new SelectMenuItem_1.SelectMenuItem('Rwanda', 190),\r\n    new SelectMenuItem_1.SelectMenuItem('Saint Helena', 191),\r\n    new SelectMenuItem_1.SelectMenuItem('Saint Kitts and Nevis', 192),\r\n    new SelectMenuItem_1.SelectMenuItem('Saint Lucia', 193),\r\n    new SelectMenuItem_1.SelectMenuItem('Saint Pierre and Miquelon', 194),\r\n    new SelectMenuItem_1.SelectMenuItem('Saint Vincent and the Grenadines', 195),\r\n    new SelectMenuItem_1.SelectMenuItem('Samoa', 196),\r\n    new SelectMenuItem_1.SelectMenuItem('San Marino', 197),\r\n    new SelectMenuItem_1.SelectMenuItem('Sao Tome and Principe', 198),\r\n    new SelectMenuItem_1.SelectMenuItem('Saudi Arabia', 199),\r\n    new SelectMenuItem_1.SelectMenuItem('Senegal', 200),\r\n    new SelectMenuItem_1.SelectMenuItem('Serbia and Montenegro', 201),\r\n    new SelectMenuItem_1.SelectMenuItem('Seychelles', 202),\r\n    new SelectMenuItem_1.SelectMenuItem('Sierra Leone', 203),\r\n    new SelectMenuItem_1.SelectMenuItem('Singapore', 204),\r\n    new SelectMenuItem_1.SelectMenuItem('Slovakia', 205),\r\n    new SelectMenuItem_1.SelectMenuItem('Slovenia', 206),\r\n    new SelectMenuItem_1.SelectMenuItem('Solomon Islands', 207),\r\n    new SelectMenuItem_1.SelectMenuItem('Somalia', 208),\r\n    new SelectMenuItem_1.SelectMenuItem('South Africa', 209),\r\n    new SelectMenuItem_1.SelectMenuItem('Spain', 211),\r\n    new SelectMenuItem_1.SelectMenuItem('Spratly Islands', 212),\r\n    new SelectMenuItem_1.SelectMenuItem('Sri Lanka', 213),\r\n    new SelectMenuItem_1.SelectMenuItem('Sudan', 214),\r\n    new SelectMenuItem_1.SelectMenuItem('Suriname', 215),\r\n    new SelectMenuItem_1.SelectMenuItem('Svalbard', 216),\r\n    new SelectMenuItem_1.SelectMenuItem('Swaziland', 217),\r\n    new SelectMenuItem_1.SelectMenuItem('Sweden', 218),\r\n    new SelectMenuItem_1.SelectMenuItem('Switzerland', 219),\r\n    new SelectMenuItem_1.SelectMenuItem('Syria', 220),\r\n    new SelectMenuItem_1.SelectMenuItem('Taiwan', 221),\r\n    new SelectMenuItem_1.SelectMenuItem('Tajikistan', 222),\r\n    new SelectMenuItem_1.SelectMenuItem('Tanzania', 223),\r\n    new SelectMenuItem_1.SelectMenuItem('Thailand', 224),\r\n    new SelectMenuItem_1.SelectMenuItem('Timor-Leste', 225),\r\n    new SelectMenuItem_1.SelectMenuItem('Togo', 226),\r\n    new SelectMenuItem_1.SelectMenuItem('Tokelau', 227),\r\n    new SelectMenuItem_1.SelectMenuItem('Tonga', 228),\r\n    new SelectMenuItem_1.SelectMenuItem('Trinidad and Tobago', 229),\r\n    new SelectMenuItem_1.SelectMenuItem('Tromelin Island', 230),\r\n    new SelectMenuItem_1.SelectMenuItem('Tunisia', 231),\r\n    new SelectMenuItem_1.SelectMenuItem('Turkey', 232),\r\n    new SelectMenuItem_1.SelectMenuItem('Turkmenistan', 233),\r\n    new SelectMenuItem_1.SelectMenuItem('Turks and Caicos Islands', 234),\r\n    new SelectMenuItem_1.SelectMenuItem('Tuvalu', 235),\r\n    new SelectMenuItem_1.SelectMenuItem('Uganda', 236),\r\n    new SelectMenuItem_1.SelectMenuItem('Ukraine', 237),\r\n    new SelectMenuItem_1.SelectMenuItem('United Arab Emirates', 238),\r\n    new SelectMenuItem_1.SelectMenuItem('United Kingdom', 239),\r\n    new SelectMenuItem_1.SelectMenuItem('United States', exports.UnitedStates),\r\n    new SelectMenuItem_1.SelectMenuItem('Uruguay', 241),\r\n    new SelectMenuItem_1.SelectMenuItem('Uzbekistan', 242),\r\n    new SelectMenuItem_1.SelectMenuItem('Vanuatu', 243),\r\n    new SelectMenuItem_1.SelectMenuItem('Venezuela', 244),\r\n    new SelectMenuItem_1.SelectMenuItem('Vietnam', 245),\r\n    new SelectMenuItem_1.SelectMenuItem('Virgin Islands', 246),\r\n    new SelectMenuItem_1.SelectMenuItem('Wake Island', 247),\r\n    new SelectMenuItem_1.SelectMenuItem('Wallis and Futuna', 248),\r\n    new SelectMenuItem_1.SelectMenuItem('West Bank', 249),\r\n    new SelectMenuItem_1.SelectMenuItem('Western Sahara', 250),\r\n    new SelectMenuItem_1.SelectMenuItem('Yemen', 251),\r\n    new SelectMenuItem_1.SelectMenuItem('Zambia', 252),\r\n    new SelectMenuItem_1.SelectMenuItem('Zimbabwe', 253),\r\n];\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9jYW1wYWlnbi1yZWdpc3RyYXRpb24tZm9ybS9Db3VudHJpZXMudHM/MzhiZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE4QyxjQUFjO0FBQzVELHVCQUF1QixtQkFBTyxDQUFDLEVBQWlDO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9EO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTg1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIFNlbGVjdE1lbnVJdGVtXzEgPSByZXF1aXJlKFwiLi8uLi9zZWxlY3QtbWVudS9TZWxlY3RNZW51SXRlbVwiKTtcclxuZXhwb3J0cy5Vbml0ZWRTdGF0ZXMgPSAyNDA7XHJcbmV4cG9ydHMuQ2FuYWRhID0gMjU0O1xyXG5leHBvcnRzLk1leGljbyA9IDE1MDtcclxuZXhwb3J0cy5Db3VudHJpZXMgPSBbXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnQWZnaGFuaXN0YW4nLCAxKSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdBa3JvdGlyaScsIDIpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0FsYmFuaWEnLCAzKSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdBbGdlcmlhJywgNCksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnQW1lcmljYW4gU2Ftb2EnLCA1KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdBbmRvcnJhJywgNiksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnQW5nb2xhJywgNyksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnQW5ndWlsbGEnLCA4KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdBbnRhcmN0aWNhJywgOSksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnQW50aWd1YSBhbmQgQmFyYnVkYScsIDEwKSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdBcmdlbnRpbmEnLCAxMSksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnQXJtZW5pYScsIDEyKSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdBcnViYScsIDEzKSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdBc2htb3JlIGFuZCBDYXJ0aWVyIElzbGFuZHMnLCAxNCksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnQXVzdHJhbGlhJywgMTUpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0F1c3RyaWEnLCAxNiksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnQXplcmJhaWphbicsIDE3KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdCYWhhbWFzJywgMTgpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0JhaHJhaW4nLCAxOSksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnQmFuZ2xhZGVzaCcsIDIwKSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdCYXJiYWRvcycsIDIxKSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdCYXNzYXMgZGEgSW5kaWEnLCAyMiksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnQmVsYXJ1cycsIDIzKSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdCZWxnaXVtJywgMjQpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0JlbGl6ZScsIDI1KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdCZW5pbicsIDI2KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdCZXJtdWRhJywgMjcpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0JodXRhbicsIDI4KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdCb2xpdmlhJywgMjkpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0Jvc25pYSBhbmQgSGVyemVnb3ZpbmEnLCAzMCksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnQm90c3dhbmEnLCAzMSksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnQm91dmV0IElzbGFuZCcsIDMyKSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdCcmF6aWwnLCAzMyksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnQnJpdGlzaCBJbmRpYW4gT2NlYW4gVGVycml0b3J5JywgMzQpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0JyaXRpc2ggVmlyZ2luIElzbGFuZHMnLCAzNSksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnQnJ1bmVpJywgMzYpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0J1bGdhcmlhJywgMzcpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0J1cmtpbmEgRmFzbycsIDM4KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdCdXJtYScsIDM5KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdCdXJ1bmRpJywgNDApLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0NhbWVyb29uJywgNDEpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0NhbmFkYScsIGV4cG9ydHMuQ2FuYWRhKSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdDYXBlIFZlcmRlJywgNDIpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0NheW1hbiBJc2xhbmRzJywgNDMpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0NlbnRyYWwgQWZyaWNhbiBSZXB1YmxpYycsIDQ0KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdDaGFkJywgNDUpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0NoaWxlJywgNDYpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0NoaW5hJywgMjU1KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdDaHJpc3RtYXMgSXNsYW5kJywgNDcpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0NvY29zIChLZWVsaW5nKSBJc2xhbmRzJywgNDgpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0NvbG9tYmlhJywgNDkpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0NvbW9yb3MnLCA1MCksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnQ29uZ28sIERlbW9jcmF0aWMgUmVwdWJsaWMgb2YgdGhlJywgNTEpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0NvbmdvLCBSZXB1YmxpYyBvZiB0aGUnLCA1MiksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnQ29vayBJc2xhbmRzJywgNTMpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0NvcmFsIFNlYSBJc2xhbmRzJywgNTQpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0Nvc3RhIFJpY2EnLCA1NSksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnQ290ZSBkJiMzOTtJdm9pcmUnLCA1NiksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnQ3JvYXRpYScsIDU3KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdDdWJhJywgNTgpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0N5cHJ1cycsIDU5KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdDemVjaCBSZXB1YmxpYycsIDYwKSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdEZW5tYXJrJywgNjEpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0RoZWtlbGlhJywgNjIpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0RqaWJvdXRpJywgNjMpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0RvbWluaWNhJywgNjQpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0RvbWluaWNhbiBSZXB1YmxpYycsIDY1KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdFY3VhZG9yJywgNjYpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0VneXB0JywgNjcpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0VsIFNhbHZhZG9yJywgNjgpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0VxdWF0b3JpYWwgR3VpbmVhJywgNjkpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0VyaXRyZWEnLCA3MCksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnRXN0b25pYScsIDcxKSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdFdGhpb3BpYScsIDcyKSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdFdXJvcGEgSXNsYW5kJywgNzMpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0ZhbGtsYW5kIElzbGFuZHMgKElzbGFzIE1hbHZpbmFzKScsIDc0KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdGYXJvZSBJc2xhbmRzJywgNzUpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0ZpamknLCA3NiksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnRmlubGFuZCcsIDc3KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdGcmFuY2UnLCA3OCksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnRnJlbmNoIEd1aWFuYScsIDc5KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdGcmVuY2ggUG9seW5lc2lhJywgODApLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0ZyZW5jaCBTb3V0aGVybiBhbmQgQW50YXJjdGljIExhbmRzJywgODEpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0dhYm9uJywgODIpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0dhbWJpYSwgVGhlJywgODMpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0dhemEgU3RyaXAnLCA4NCksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnR2VvcmdpYScsIDg1KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdHZXJtYW55JywgODYpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0doYW5hJywgODcpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0dpYnJhbHRhcicsIDg4KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdHbG9yaW9zbyBJc2xhbmRzJywgODkpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0dyZWVjZScsIDkwKSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdHcmVlbmxhbmQnLCA5MSksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnR3JlbmFkYScsIDkyKSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdHdWFkZWxvdXBlJywgOTMpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0d1YW0nLCA5NCksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnR3VhdGVtYWxhJywgOTUpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0d1ZXJuc2V5JywgOTYpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0d1aW5lYScsIDk3KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdHdWluZWEtQmlzc2F1JywgOTgpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0d1eWFuYScsIDk5KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdIYWl0aScsIDEwMCksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnSGVhcmQgSXNsYW5kIGFuZCBNY0RvbmFsZCBJc2xhbmRzJywgMTAxKSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdIb2x5IFNlZSAoVmF0aWNhbiBDaXR5KScsIDEwMiksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnSG9uZHVyYXMnLCAxMDMpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0hvbmcgS29uZycsIDEwNCksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnSHVuZ2FyeScsIDEwNSksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnSWNlbGFuZCcsIDEwNiksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnSW5kaWEnLCAxMDcpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0luZG9uZXNpYScsIDEwOCksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnSXJhbicsIDEwOSksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnSXJhcScsIDExMCksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnSXJlbGFuZCcsIDExMSksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnSXNsZSBvZiBNYW4nLCAxMTIpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0lzcmFlbCcsIDExMyksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnSXRhbHknLCAxMTQpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0phbWFpY2EnLCAxMTUpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0phbiBNYXllbicsIDExNiksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnSmFwYW4nLCAxMTcpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0plcnNleScsIDExOCksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnSm9yZGFuJywgMTE5KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdKdWFuIGRlIE5vdmEgSXNsYW5kJywgMTIwKSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdLYXpha2hzdGFuJywgMTIxKSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdLZW55YScsIDEyMiksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnS2lyaWJhdGknLCAxMjMpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0tvcmVhLCBOb3J0aCcsIDEyNCksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnS29yZWEsIFNvdXRoJywgMTI1KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdLdXdhaXQnLCAxMjYpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0t5cmd5enN0YW4nLCAxMjcpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0xhb3MnLCAxMjgpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0xhdHZpYScsIDEyOSksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnTGViYW5vbicsIDEzMCksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnTGVzb3RobycsIDEzMSksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnTGliZXJpYScsIDEzMiksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnTGlieWEnLCAxMzMpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0xpZWNodGVuc3RlaW4nLCAxMzQpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0xpdGh1YW5pYScsIDEzNSksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnTHV4ZW1ib3VyZycsIDEzNiksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnTWFjYXUnLCAxMzcpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ01hY2Vkb25pYScsIDEzOCksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnTWFkYWdhc2NhcicsIDEzOSksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnTWFsYXdpJywgMTQwKSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdNYWxheXNpYScsIDE0MSksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnTWFsZGl2ZXMnLCAxNDIpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ01hbGknLCAxNDMpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ01hbHRhJywgMTQ0KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdNYXJzaGFsbCBJc2xhbmRzJywgMTQ1KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdNYXJ0aW5pcXVlJywgMTQ2KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdNYXVyaXRhbmlhJywgMTQ3KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdNYXVyaXRpdXMnLCAxNDgpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ01heW90dGUnLCAxNDkpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ01leGljbycsIGV4cG9ydHMuTWV4aWNvKSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdNaWNyb25lc2lhLCBGZWRlcmF0ZWQgU3RhdGVzIG9mJywgMTUxKSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdNb2xkb3ZhJywgMTUyKSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdNb25hY28nLCAxNTMpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ01vbmdvbGlhJywgMTU0KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdNb250c2VycmF0JywgMTU1KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdNb3JvY2NvJywgMTU2KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdNb3phbWJpcXVlJywgMTU3KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdOYW1pYmlhJywgMTU4KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdOYXVydScsIDE1OSksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnTmF2YXNzYSBJc2xhbmQnLCAxNjApLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ05lcGFsJywgMTYxKSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdOZXRoZXJsYW5kcycsIDE2MiksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnTmV0aGVybGFuZHMgQW50aWxsZXMnLCAxNjMpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ05ldyBDYWxlZG9uaWEnLCAxNjQpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ05ldyBaZWFsYW5kJywgMTY1KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdOaWNhcmFndWEnLCAxNjYpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ05pZ2VyJywgMTY3KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdOaWdlcmlhJywgMTY4KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdOaXVlJywgMTY5KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdOb3Jmb2xrIElzbGFuZCcsIDE3MCksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnTm9ydGhlcm4gTWFyaWFuYSBJc2xhbmRzJywgMTcxKSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdOb3J3YXknLCAxNzIpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ09tYW4nLCAxNzMpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ1Bha2lzdGFuJywgMTc0KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdQYWxhdScsIDE3NSksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnUGFuYW1hJywgMTc2KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdQYXB1YSBOZXcgR3VpbmVhJywgMTc3KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdQYXJhY2VsIElzbGFuZHMnLCAxNzgpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ1BhcmFndWF5JywgMTc5KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdQZXJ1JywgMTgwKSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdQaGlsaXBwaW5lcycsIDE4MSksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnUGl0Y2Fpcm4gSXNsYW5kcycsIDE4MiksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnUG9sYW5kJywgMTgzKSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdQb3J0dWdhbCcsIDE4NCksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnUHVlcnRvIFJpY28nLCAxODUpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ1FhdGFyJywgMTg2KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdSZXVuaW9uJywgMTg3KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdSb21hbmlhJywgMTg4KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdSdXNzaWEnLCAxODkpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ1J3YW5kYScsIDE5MCksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnU2FpbnQgSGVsZW5hJywgMTkxKSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdTYWludCBLaXR0cyBhbmQgTmV2aXMnLCAxOTIpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ1NhaW50IEx1Y2lhJywgMTkzKSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdTYWludCBQaWVycmUgYW5kIE1pcXVlbG9uJywgMTk0KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdTYWludCBWaW5jZW50IGFuZCB0aGUgR3JlbmFkaW5lcycsIDE5NSksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnU2Ftb2EnLCAxOTYpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ1NhbiBNYXJpbm8nLCAxOTcpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ1NhbyBUb21lIGFuZCBQcmluY2lwZScsIDE5OCksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnU2F1ZGkgQXJhYmlhJywgMTk5KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdTZW5lZ2FsJywgMjAwKSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdTZXJiaWEgYW5kIE1vbnRlbmVncm8nLCAyMDEpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ1NleWNoZWxsZXMnLCAyMDIpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ1NpZXJyYSBMZW9uZScsIDIwMyksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnU2luZ2Fwb3JlJywgMjA0KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdTbG92YWtpYScsIDIwNSksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnU2xvdmVuaWEnLCAyMDYpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ1NvbG9tb24gSXNsYW5kcycsIDIwNyksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnU29tYWxpYScsIDIwOCksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnU291dGggQWZyaWNhJywgMjA5KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdTcGFpbicsIDIxMSksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnU3ByYXRseSBJc2xhbmRzJywgMjEyKSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdTcmkgTGFua2EnLCAyMTMpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ1N1ZGFuJywgMjE0KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdTdXJpbmFtZScsIDIxNSksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnU3ZhbGJhcmQnLCAyMTYpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ1N3YXppbGFuZCcsIDIxNyksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnU3dlZGVuJywgMjE4KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdTd2l0emVybGFuZCcsIDIxOSksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnU3lyaWEnLCAyMjApLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ1RhaXdhbicsIDIyMSksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnVGFqaWtpc3RhbicsIDIyMiksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnVGFuemFuaWEnLCAyMjMpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ1RoYWlsYW5kJywgMjI0KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdUaW1vci1MZXN0ZScsIDIyNSksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnVG9nbycsIDIyNiksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnVG9rZWxhdScsIDIyNyksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnVG9uZ2EnLCAyMjgpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ1RyaW5pZGFkIGFuZCBUb2JhZ28nLCAyMjkpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ1Ryb21lbGluIElzbGFuZCcsIDIzMCksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnVHVuaXNpYScsIDIzMSksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnVHVya2V5JywgMjMyKSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdUdXJrbWVuaXN0YW4nLCAyMzMpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ1R1cmtzIGFuZCBDYWljb3MgSXNsYW5kcycsIDIzNCksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnVHV2YWx1JywgMjM1KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdVZ2FuZGEnLCAyMzYpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ1VrcmFpbmUnLCAyMzcpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ1VuaXRlZCBBcmFiIEVtaXJhdGVzJywgMjM4KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdVbml0ZWQgS2luZ2RvbScsIDIzOSksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnVW5pdGVkIFN0YXRlcycsIGV4cG9ydHMuVW5pdGVkU3RhdGVzKSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdVcnVndWF5JywgMjQxKSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdVemJla2lzdGFuJywgMjQyKSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdWYW51YXR1JywgMjQzKSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdWZW5lenVlbGEnLCAyNDQpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ1ZpZXRuYW0nLCAyNDUpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ1ZpcmdpbiBJc2xhbmRzJywgMjQ2KSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdXYWtlIElzbGFuZCcsIDI0NyksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnV2FsbGlzIGFuZCBGdXR1bmEnLCAyNDgpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ1dlc3QgQmFuaycsIDI0OSksXHJcbiAgICBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnV2VzdGVybiBTYWhhcmEnLCAyNTApLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ1llbWVuJywgMjUxKSxcclxuICAgIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKCdaYW1iaWEnLCAyNTIpLFxyXG4gICAgbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ1ppbWJhYndlJywgMjUzKSxcclxuXTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///185\n")},186:function(module,exports,__webpack_require__){"use strict";eval("\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.sendPageview = function () {\r\n    if (window['ga'] !== undefined) {\r\n        window['ga']('send', {\r\n            hitType: 'pageview',\r\n            page: location.pathname + location.search\r\n        });\r\n    }\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvdXRpbGl0aWVzL0dvb2dsZVRhZ01hbmFnZXIudHM/Y2U3YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE4QyxjQUFjO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSIsImZpbGUiOiIxODYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG5leHBvcnRzLnNlbmRQYWdldmlldyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICh3aW5kb3dbJ2dhJ10gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHdpbmRvd1snZ2EnXSgnc2VuZCcsIHtcclxuICAgICAgICAgICAgaGl0VHlwZTogJ3BhZ2V2aWV3JyxcclxuICAgICAgICAgICAgcGFnZTogbG9jYXRpb24ucGF0aG5hbWUgKyBsb2NhdGlvbi5zZWFyY2hcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///186\n")},187:function(module,exports,__webpack_require__){"use strict";eval("\nvar token = '%[a-f0-9]{2}';\nvar singleMatcher = new RegExp(token, 'gi');\nvar multiMatcher = new RegExp('(' + token + ')+', 'gi');\n\nfunction decodeComponents(components, split) {\n\ttry {\n\t\t// Try to decode the entire string first\n\t\treturn decodeURIComponent(components.join(''));\n\t} catch (err) {\n\t\t// Do nothing\n\t}\n\n\tif (components.length === 1) {\n\t\treturn components;\n\t}\n\n\tsplit = split || 1;\n\n\t// Split the array in 2 parts\n\tvar left = components.slice(0, split);\n\tvar right = components.slice(split);\n\n\treturn Array.prototype.concat.call([], decodeComponents(left), decodeComponents(right));\n}\n\nfunction decode(input) {\n\ttry {\n\t\treturn decodeURIComponent(input);\n\t} catch (err) {\n\t\tvar tokens = input.match(singleMatcher);\n\n\t\tfor (var i = 1; i < tokens.length; i++) {\n\t\t\tinput = decodeComponents(tokens, i).join('');\n\n\t\t\ttokens = input.match(singleMatcher);\n\t\t}\n\n\t\treturn input;\n\t}\n}\n\nfunction customDecodeURIComponent(input) {\n\t// Keep track of all the replacements and prefill the map with the `BOM`\n\tvar replaceMap = {\n\t\t'%FE%FF': '\\uFFFD\\uFFFD',\n\t\t'%FF%FE': '\\uFFFD\\uFFFD'\n\t};\n\n\tvar match = multiMatcher.exec(input);\n\twhile (match) {\n\t\ttry {\n\t\t\t// Decode as big chunks as possible\n\t\t\treplaceMap[match[0]] = decodeURIComponent(match[0]);\n\t\t} catch (err) {\n\t\t\tvar result = decode(match[0]);\n\n\t\t\tif (result !== match[0]) {\n\t\t\t\treplaceMap[match[0]] = result;\n\t\t\t}\n\t\t}\n\n\t\tmatch = multiMatcher.exec(input);\n\t}\n\n\t// Add `%C2` at the end of the map to make sure it does not replace the combinator before everything else\n\treplaceMap['%C2'] = '\\uFFFD';\n\n\tvar entries = Object.keys(replaceMap);\n\n\tfor (var i = 0; i < entries.length; i++) {\n\t\t// Replace all decoded components\n\t\tvar key = entries[i];\n\t\tinput = input.replace(new RegExp(key, 'g'), replaceMap[key]);\n\t}\n\n\treturn input;\n}\n\nmodule.exports = function (encodedURI) {\n\tif (typeof encodedURI !== 'string') {\n\t\tthrow new TypeError('Expected `encodedURI` to be of type `string`, got `' + typeof encodedURI + '`');\n\t}\n\n\ttry {\n\t\tencodedURI = encodedURI.replace(/\\+/g, ' ');\n\n\t\t// Try the built in decoder first\n\t\treturn decodeURIComponent(encodedURI);\n\t} catch (err) {\n\t\t// Fallback to a more advanced decoder\n\t\treturn customDecodeURIComponent(encodedURI);\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZGVjb2RlLXVyaS1jb21wb25lbnQvaW5kZXguanM/ZjIzNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLHVCQUF1QixFQUFFO0FBQ3pCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBLGlCQUFpQixtQkFBbUI7QUFDcEM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTg3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIHRva2VuID0gJyVbYS1mMC05XXsyfSc7XG52YXIgc2luZ2xlTWF0Y2hlciA9IG5ldyBSZWdFeHAodG9rZW4sICdnaScpO1xudmFyIG11bHRpTWF0Y2hlciA9IG5ldyBSZWdFeHAoJygnICsgdG9rZW4gKyAnKSsnLCAnZ2knKTtcblxuZnVuY3Rpb24gZGVjb2RlQ29tcG9uZW50cyhjb21wb25lbnRzLCBzcGxpdCkge1xuXHR0cnkge1xuXHRcdC8vIFRyeSB0byBkZWNvZGUgdGhlIGVudGlyZSBzdHJpbmcgZmlyc3Rcblx0XHRyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGNvbXBvbmVudHMuam9pbignJykpO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHQvLyBEbyBub3RoaW5nXG5cdH1cblxuXHRpZiAoY29tcG9uZW50cy5sZW5ndGggPT09IDEpIHtcblx0XHRyZXR1cm4gY29tcG9uZW50cztcblx0fVxuXG5cdHNwbGl0ID0gc3BsaXQgfHwgMTtcblxuXHQvLyBTcGxpdCB0aGUgYXJyYXkgaW4gMiBwYXJ0c1xuXHR2YXIgbGVmdCA9IGNvbXBvbmVudHMuc2xpY2UoMCwgc3BsaXQpO1xuXHR2YXIgcmlnaHQgPSBjb21wb25lbnRzLnNsaWNlKHNwbGl0KTtcblxuXHRyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5jYWxsKFtdLCBkZWNvZGVDb21wb25lbnRzKGxlZnQpLCBkZWNvZGVDb21wb25lbnRzKHJpZ2h0KSk7XG59XG5cbmZ1bmN0aW9uIGRlY29kZShpbnB1dCkge1xuXHR0cnkge1xuXHRcdHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoaW5wdXQpO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHR2YXIgdG9rZW5zID0gaW5wdXQubWF0Y2goc2luZ2xlTWF0Y2hlcik7XG5cblx0XHRmb3IgKHZhciBpID0gMTsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aW5wdXQgPSBkZWNvZGVDb21wb25lbnRzKHRva2VucywgaSkuam9pbignJyk7XG5cblx0XHRcdHRva2VucyA9IGlucHV0Lm1hdGNoKHNpbmdsZU1hdGNoZXIpO1xuXHRcdH1cblxuXHRcdHJldHVybiBpbnB1dDtcblx0fVxufVxuXG5mdW5jdGlvbiBjdXN0b21EZWNvZGVVUklDb21wb25lbnQoaW5wdXQpIHtcblx0Ly8gS2VlcCB0cmFjayBvZiBhbGwgdGhlIHJlcGxhY2VtZW50cyBhbmQgcHJlZmlsbCB0aGUgbWFwIHdpdGggdGhlIGBCT01gXG5cdHZhciByZXBsYWNlTWFwID0ge1xuXHRcdCclRkUlRkYnOiAnXFx1RkZGRFxcdUZGRkQnLFxuXHRcdCclRkYlRkUnOiAnXFx1RkZGRFxcdUZGRkQnXG5cdH07XG5cblx0dmFyIG1hdGNoID0gbXVsdGlNYXRjaGVyLmV4ZWMoaW5wdXQpO1xuXHR3aGlsZSAobWF0Y2gpIHtcblx0XHR0cnkge1xuXHRcdFx0Ly8gRGVjb2RlIGFzIGJpZyBjaHVua3MgYXMgcG9zc2libGVcblx0XHRcdHJlcGxhY2VNYXBbbWF0Y2hbMF1dID0gZGVjb2RlVVJJQ29tcG9uZW50KG1hdGNoWzBdKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdHZhciByZXN1bHQgPSBkZWNvZGUobWF0Y2hbMF0pO1xuXG5cdFx0XHRpZiAocmVzdWx0ICE9PSBtYXRjaFswXSkge1xuXHRcdFx0XHRyZXBsYWNlTWFwW21hdGNoWzBdXSA9IHJlc3VsdDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRtYXRjaCA9IG11bHRpTWF0Y2hlci5leGVjKGlucHV0KTtcblx0fVxuXG5cdC8vIEFkZCBgJUMyYCBhdCB0aGUgZW5kIG9mIHRoZSBtYXAgdG8gbWFrZSBzdXJlIGl0IGRvZXMgbm90IHJlcGxhY2UgdGhlIGNvbWJpbmF0b3IgYmVmb3JlIGV2ZXJ5dGhpbmcgZWxzZVxuXHRyZXBsYWNlTWFwWyclQzInXSA9ICdcXHVGRkZEJztcblxuXHR2YXIgZW50cmllcyA9IE9iamVjdC5rZXlzKHJlcGxhY2VNYXApO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgZW50cmllcy5sZW5ndGg7IGkrKykge1xuXHRcdC8vIFJlcGxhY2UgYWxsIGRlY29kZWQgY29tcG9uZW50c1xuXHRcdHZhciBrZXkgPSBlbnRyaWVzW2ldO1xuXHRcdGlucHV0ID0gaW5wdXQucmVwbGFjZShuZXcgUmVnRXhwKGtleSwgJ2cnKSwgcmVwbGFjZU1hcFtrZXldKTtcblx0fVxuXG5cdHJldHVybiBpbnB1dDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZW5jb2RlZFVSSSkge1xuXHRpZiAodHlwZW9mIGVuY29kZWRVUkkgIT09ICdzdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYGVuY29kZWRVUklgIHRvIGJlIG9mIHR5cGUgYHN0cmluZ2AsIGdvdCBgJyArIHR5cGVvZiBlbmNvZGVkVVJJICsgJ2AnKTtcblx0fVxuXG5cdHRyeSB7XG5cdFx0ZW5jb2RlZFVSSSA9IGVuY29kZWRVUkkucmVwbGFjZSgvXFwrL2csICcgJyk7XG5cblx0XHQvLyBUcnkgdGhlIGJ1aWx0IGluIGRlY29kZXIgZmlyc3Rcblx0XHRyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVuY29kZWRVUkkpO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHQvLyBGYWxsYmFjayB0byBhIG1vcmUgYWR2YW5jZWQgZGVjb2RlclxuXHRcdHJldHVybiBjdXN0b21EZWNvZGVVUklDb21wb25lbnQoZW5jb2RlZFVSSSk7XG5cdH1cbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///187\n")},188:function(module,exports,__webpack_require__){"use strict";eval("/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc');  // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvb2JqZWN0LWFzc2lnbi9pbmRleC5qcz8zMjBjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGdCQUFnQixzQkFBc0I7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0JBQWtCLG9CQUFvQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsImZpbGUiOiIxODguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxub2JqZWN0LWFzc2lnblxuKGMpIFNpbmRyZSBTb3JodXNcbkBsaWNlbnNlIE1JVFxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBwcm9wSXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuZnVuY3Rpb24gdG9PYmplY3QodmFsKSB7XG5cdGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpO1xuXHR9XG5cblx0cmV0dXJuIE9iamVjdCh2YWwpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRVc2VOYXRpdmUoKSB7XG5cdHRyeSB7XG5cdFx0aWYgKCFPYmplY3QuYXNzaWduKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZWN0IGJ1Z2d5IHByb3BlcnR5IGVudW1lcmF0aW9uIG9yZGVyIGluIG9sZGVyIFY4IHZlcnNpb25zLlxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9NDExOFxuXHRcdHZhciB0ZXN0MSA9IG5ldyBTdHJpbmcoJ2FiYycpOyAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXctd3JhcHBlcnNcblx0XHR0ZXN0MVs1XSA9ICdkZSc7XG5cdFx0aWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QxKVswXSA9PT0gJzUnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MiA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xuXHRcdFx0dGVzdDJbJ18nICsgU3RyaW5nLmZyb21DaGFyQ29kZShpKV0gPSBpO1xuXHRcdH1cblx0XHR2YXIgb3JkZXIyID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDIpLm1hcChmdW5jdGlvbiAobikge1xuXHRcdFx0cmV0dXJuIHRlc3QyW25dO1xuXHRcdH0pO1xuXHRcdGlmIChvcmRlcjIuam9pbignJykgIT09ICcwMTIzNDU2Nzg5Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDMgPSB7fTtcblx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChsZXR0ZXIpIHtcblx0XHRcdHRlc3QzW2xldHRlcl0gPSBsZXR0ZXI7XG5cdFx0fSk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIHRlc3QzKSkuam9pbignJykgIT09XG5cdFx0XHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0Ly8gV2UgZG9uJ3QgZXhwZWN0IGFueSBvZiB0aGUgYWJvdmUgdG8gdGhyb3csIGJ1dCBiZXR0ZXIgdG8gYmUgc2FmZS5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG91bGRVc2VOYXRpdmUoKSA/IE9iamVjdC5hc3NpZ24gOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGZyb20pO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChwcm9wSXNFbnVtZXJhYmxlLmNhbGwoZnJvbSwgc3ltYm9sc1tpXSkpIHtcblx0XHRcdFx0XHR0b1tzeW1ib2xzW2ldXSA9IGZyb21bc3ltYm9sc1tpXV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdG87XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///188\n")},189:function(module,exports,__webpack_require__){"use strict";eval("\nmodule.exports = function (str) {\n\treturn encodeURIComponent(str).replace(/[!'()*]/g, function (c) {\n\t\treturn '%' + c.charCodeAt(0).toString(16).toUpperCase();\n\t});\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3RyaWN0LXVyaS1lbmNvZGUvaW5kZXguanM/NjQ1MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRiIsImZpbGUiOiIxODkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzdHIpIHtcblx0cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHIpLnJlcGxhY2UoL1shJygpKl0vZywgZnVuY3Rpb24gKGMpIHtcblx0XHRyZXR1cm4gJyUnICsgYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuXHR9KTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///189\n")},19:function(module,exports,__webpack_require__){"use strict";eval('\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar HorizontalAlignment;\r\n(function (HorizontalAlignment) {\r\n    HorizontalAlignment["Start"] = "start";\r\n    HorizontalAlignment["Center"] = "center";\r\n    HorizontalAlignment["End"] = "end";\r\n    HorizontalAlignment["Hidden"] = "hidden";\r\n})(HorizontalAlignment = exports.HorizontalAlignment || (exports.HorizontalAlignment = {}));\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvZW51bXMvSG9yaXpvbnRhbEFsaWdubWVudC50cz8zMGNhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQThDLGNBQWM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyx3RkFBd0YiLCJmaWxlIjoiMTkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgSG9yaXpvbnRhbEFsaWdubWVudDtcclxuKGZ1bmN0aW9uIChIb3Jpem9udGFsQWxpZ25tZW50KSB7XHJcbiAgICBIb3Jpem9udGFsQWxpZ25tZW50W1wiU3RhcnRcIl0gPSBcInN0YXJ0XCI7XHJcbiAgICBIb3Jpem9udGFsQWxpZ25tZW50W1wiQ2VudGVyXCJdID0gXCJjZW50ZXJcIjtcclxuICAgIEhvcml6b250YWxBbGlnbm1lbnRbXCJFbmRcIl0gPSBcImVuZFwiO1xyXG4gICAgSG9yaXpvbnRhbEFsaWdubWVudFtcIkhpZGRlblwiXSA9IFwiaGlkZGVuXCI7XHJcbn0pKEhvcml6b250YWxBbGlnbm1lbnQgPSBleHBvcnRzLkhvcml6b250YWxBbGlnbm1lbnQgfHwgKGV4cG9ydHMuSG9yaXpvbnRhbEFsaWdubWVudCA9IHt9KSk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///19\n')},190:function(module,exports,__webpack_require__){eval("/* WEBPACK VAR INJECTION */(function(global) {/*** IMPORTS FROM imports-loader ***/\n(function() {\n\n(function(self) {\n  'use strict';\n\n  if (self.fetch) {\n    return\n  }\n\n  var support = {\n    searchParams: 'URLSearchParams' in self,\n    iterable: 'Symbol' in self && 'iterator' in Symbol,\n    blob: 'FileReader' in self && 'Blob' in self && (function() {\n      try {\n        new Blob()\n        return true\n      } catch(e) {\n        return false\n      }\n    })(),\n    formData: 'FormData' in self,\n    arrayBuffer: 'ArrayBuffer' in self\n  }\n\n  if (support.arrayBuffer) {\n    var viewClasses = [\n      '[object Int8Array]',\n      '[object Uint8Array]',\n      '[object Uint8ClampedArray]',\n      '[object Int16Array]',\n      '[object Uint16Array]',\n      '[object Int32Array]',\n      '[object Uint32Array]',\n      '[object Float32Array]',\n      '[object Float64Array]'\n    ]\n\n    var isDataView = function(obj) {\n      return obj && DataView.prototype.isPrototypeOf(obj)\n    }\n\n    var isArrayBufferView = ArrayBuffer.isView || function(obj) {\n      return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n    }\n  }\n\n  function normalizeName(name) {\n    if (typeof name !== 'string') {\n      name = String(name)\n    }\n    if (/[^a-z0-9\\-#$%&'*+.\\^_`|~]/i.test(name)) {\n      throw new TypeError('Invalid character in header field name')\n    }\n    return name.toLowerCase()\n  }\n\n  function normalizeValue(value) {\n    if (typeof value !== 'string') {\n      value = String(value)\n    }\n    return value\n  }\n\n  // Build a destructive iterator for the value list\n  function iteratorFor(items) {\n    var iterator = {\n      next: function() {\n        var value = items.shift()\n        return {done: value === undefined, value: value}\n      }\n    }\n\n    if (support.iterable) {\n      iterator[Symbol.iterator] = function() {\n        return iterator\n      }\n    }\n\n    return iterator\n  }\n\n  function Headers(headers) {\n    this.map = {}\n\n    if (headers instanceof Headers) {\n      headers.forEach(function(value, name) {\n        this.append(name, value)\n      }, this)\n    } else if (Array.isArray(headers)) {\n      headers.forEach(function(header) {\n        this.append(header[0], header[1])\n      }, this)\n    } else if (headers) {\n      Object.getOwnPropertyNames(headers).forEach(function(name) {\n        this.append(name, headers[name])\n      }, this)\n    }\n  }\n\n  Headers.prototype.append = function(name, value) {\n    name = normalizeName(name)\n    value = normalizeValue(value)\n    var oldValue = this.map[name]\n    this.map[name] = oldValue ? oldValue+','+value : value\n  }\n\n  Headers.prototype['delete'] = function(name) {\n    delete this.map[normalizeName(name)]\n  }\n\n  Headers.prototype.get = function(name) {\n    name = normalizeName(name)\n    return this.has(name) ? this.map[name] : null\n  }\n\n  Headers.prototype.has = function(name) {\n    return this.map.hasOwnProperty(normalizeName(name))\n  }\n\n  Headers.prototype.set = function(name, value) {\n    this.map[normalizeName(name)] = normalizeValue(value)\n  }\n\n  Headers.prototype.forEach = function(callback, thisArg) {\n    for (var name in this.map) {\n      if (this.map.hasOwnProperty(name)) {\n        callback.call(thisArg, this.map[name], name, this)\n      }\n    }\n  }\n\n  Headers.prototype.keys = function() {\n    var items = []\n    this.forEach(function(value, name) { items.push(name) })\n    return iteratorFor(items)\n  }\n\n  Headers.prototype.values = function() {\n    var items = []\n    this.forEach(function(value) { items.push(value) })\n    return iteratorFor(items)\n  }\n\n  Headers.prototype.entries = function() {\n    var items = []\n    this.forEach(function(value, name) { items.push([name, value]) })\n    return iteratorFor(items)\n  }\n\n  if (support.iterable) {\n    Headers.prototype[Symbol.iterator] = Headers.prototype.entries\n  }\n\n  function consumed(body) {\n    if (body.bodyUsed) {\n      return Promise.reject(new TypeError('Already read'))\n    }\n    body.bodyUsed = true\n  }\n\n  function fileReaderReady(reader) {\n    return new Promise(function(resolve, reject) {\n      reader.onload = function() {\n        resolve(reader.result)\n      }\n      reader.onerror = function() {\n        reject(reader.error)\n      }\n    })\n  }\n\n  function readBlobAsArrayBuffer(blob) {\n    var reader = new FileReader()\n    var promise = fileReaderReady(reader)\n    reader.readAsArrayBuffer(blob)\n    return promise\n  }\n\n  function readBlobAsText(blob) {\n    var reader = new FileReader()\n    var promise = fileReaderReady(reader)\n    reader.readAsText(blob)\n    return promise\n  }\n\n  function readArrayBufferAsText(buf) {\n    var view = new Uint8Array(buf)\n    var chars = new Array(view.length)\n\n    for (var i = 0; i < view.length; i++) {\n      chars[i] = String.fromCharCode(view[i])\n    }\n    return chars.join('')\n  }\n\n  function bufferClone(buf) {\n    if (buf.slice) {\n      return buf.slice(0)\n    } else {\n      var view = new Uint8Array(buf.byteLength)\n      view.set(new Uint8Array(buf))\n      return view.buffer\n    }\n  }\n\n  function Body() {\n    this.bodyUsed = false\n\n    this._initBody = function(body) {\n      this._bodyInit = body\n      if (!body) {\n        this._bodyText = ''\n      } else if (typeof body === 'string') {\n        this._bodyText = body\n      } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n        this._bodyBlob = body\n      } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n        this._bodyFormData = body\n      } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n        this._bodyText = body.toString()\n      } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n        this._bodyArrayBuffer = bufferClone(body.buffer)\n        // IE 10-11 can't handle a DataView body.\n        this._bodyInit = new Blob([this._bodyArrayBuffer])\n      } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n        this._bodyArrayBuffer = bufferClone(body)\n      } else {\n        throw new Error('unsupported BodyInit type')\n      }\n\n      if (!this.headers.get('content-type')) {\n        if (typeof body === 'string') {\n          this.headers.set('content-type', 'text/plain;charset=UTF-8')\n        } else if (this._bodyBlob && this._bodyBlob.type) {\n          this.headers.set('content-type', this._bodyBlob.type)\n        } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n          this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8')\n        }\n      }\n    }\n\n    if (support.blob) {\n      this.blob = function() {\n        var rejected = consumed(this)\n        if (rejected) {\n          return rejected\n        }\n\n        if (this._bodyBlob) {\n          return Promise.resolve(this._bodyBlob)\n        } else if (this._bodyArrayBuffer) {\n          return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n        } else if (this._bodyFormData) {\n          throw new Error('could not read FormData body as blob')\n        } else {\n          return Promise.resolve(new Blob([this._bodyText]))\n        }\n      }\n\n      this.arrayBuffer = function() {\n        if (this._bodyArrayBuffer) {\n          return consumed(this) || Promise.resolve(this._bodyArrayBuffer)\n        } else {\n          return this.blob().then(readBlobAsArrayBuffer)\n        }\n      }\n    }\n\n    this.text = function() {\n      var rejected = consumed(this)\n      if (rejected) {\n        return rejected\n      }\n\n      if (this._bodyBlob) {\n        return readBlobAsText(this._bodyBlob)\n      } else if (this._bodyArrayBuffer) {\n        return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n      } else if (this._bodyFormData) {\n        throw new Error('could not read FormData body as text')\n      } else {\n        return Promise.resolve(this._bodyText)\n      }\n    }\n\n    if (support.formData) {\n      this.formData = function() {\n        return this.text().then(decode)\n      }\n    }\n\n    this.json = function() {\n      return this.text().then(JSON.parse)\n    }\n\n    return this\n  }\n\n  // HTTP methods whose capitalization should be normalized\n  var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']\n\n  function normalizeMethod(method) {\n    var upcased = method.toUpperCase()\n    return (methods.indexOf(upcased) > -1) ? upcased : method\n  }\n\n  function Request(input, options) {\n    options = options || {}\n    var body = options.body\n\n    if (input instanceof Request) {\n      if (input.bodyUsed) {\n        throw new TypeError('Already read')\n      }\n      this.url = input.url\n      this.credentials = input.credentials\n      if (!options.headers) {\n        this.headers = new Headers(input.headers)\n      }\n      this.method = input.method\n      this.mode = input.mode\n      if (!body && input._bodyInit != null) {\n        body = input._bodyInit\n        input.bodyUsed = true\n      }\n    } else {\n      this.url = String(input)\n    }\n\n    this.credentials = options.credentials || this.credentials || 'omit'\n    if (options.headers || !this.headers) {\n      this.headers = new Headers(options.headers)\n    }\n    this.method = normalizeMethod(options.method || this.method || 'GET')\n    this.mode = options.mode || this.mode || null\n    this.referrer = null\n\n    if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n      throw new TypeError('Body not allowed for GET or HEAD requests')\n    }\n    this._initBody(body)\n  }\n\n  Request.prototype.clone = function() {\n    return new Request(this, { body: this._bodyInit })\n  }\n\n  function decode(body) {\n    var form = new FormData()\n    body.trim().split('&').forEach(function(bytes) {\n      if (bytes) {\n        var split = bytes.split('=')\n        var name = split.shift().replace(/\\+/g, ' ')\n        var value = split.join('=').replace(/\\+/g, ' ')\n        form.append(decodeURIComponent(name), decodeURIComponent(value))\n      }\n    })\n    return form\n  }\n\n  function parseHeaders(rawHeaders) {\n    var headers = new Headers()\n    // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n    // https://tools.ietf.org/html/rfc7230#section-3.2\n    var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ')\n    preProcessedHeaders.split(/\\r?\\n/).forEach(function(line) {\n      var parts = line.split(':')\n      var key = parts.shift().trim()\n      if (key) {\n        var value = parts.join(':').trim()\n        headers.append(key, value)\n      }\n    })\n    return headers\n  }\n\n  Body.call(Request.prototype)\n\n  function Response(bodyInit, options) {\n    if (!options) {\n      options = {}\n    }\n\n    this.type = 'default'\n    this.status = options.status === undefined ? 200 : options.status\n    this.ok = this.status >= 200 && this.status < 300\n    this.statusText = 'statusText' in options ? options.statusText : 'OK'\n    this.headers = new Headers(options.headers)\n    this.url = options.url || ''\n    this._initBody(bodyInit)\n  }\n\n  Body.call(Response.prototype)\n\n  Response.prototype.clone = function() {\n    return new Response(this._bodyInit, {\n      status: this.status,\n      statusText: this.statusText,\n      headers: new Headers(this.headers),\n      url: this.url\n    })\n  }\n\n  Response.error = function() {\n    var response = new Response(null, {status: 0, statusText: ''})\n    response.type = 'error'\n    return response\n  }\n\n  var redirectStatuses = [301, 302, 303, 307, 308]\n\n  Response.redirect = function(url, status) {\n    if (redirectStatuses.indexOf(status) === -1) {\n      throw new RangeError('Invalid status code')\n    }\n\n    return new Response(null, {status: status, headers: {location: url}})\n  }\n\n  self.Headers = Headers\n  self.Request = Request\n  self.Response = Response\n\n  self.fetch = function(input, init) {\n    return new Promise(function(resolve, reject) {\n      var request = new Request(input, init)\n      var xhr = new XMLHttpRequest()\n\n      xhr.onload = function() {\n        var options = {\n          status: xhr.status,\n          statusText: xhr.statusText,\n          headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n        }\n        options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL')\n        var body = 'response' in xhr ? xhr.response : xhr.responseText\n        resolve(new Response(body, options))\n      }\n\n      xhr.onerror = function() {\n        reject(new TypeError('Network request failed'))\n      }\n\n      xhr.ontimeout = function() {\n        reject(new TypeError('Network request failed'))\n      }\n\n      xhr.open(request.method, request.url, true)\n\n      if (request.credentials === 'include') {\n        xhr.withCredentials = true\n      } else if (request.credentials === 'omit') {\n        xhr.withCredentials = false\n      }\n\n      if ('responseType' in xhr && support.blob) {\n        xhr.responseType = 'blob'\n      }\n\n      request.headers.forEach(function(value, name) {\n        xhr.setRequestHeader(name, value)\n      })\n\n      xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)\n    })\n  }\n  self.fetch.polyfill = true\n})(typeof self !== 'undefined' ? self : this);\n\n\n/*** EXPORTS FROM exports-loader ***/\nmodule.exports = global.fetch;\n}.call(global));\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(22)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvd2hhdHdnLWZldGNoL2ZldGNoLmpzP2FmNjYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esd0NBQXdDLG1CQUFtQjtBQUMzRDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQ0FBa0Msb0JBQW9CO0FBQ3REO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHdDQUF3Qyw0QkFBNEI7QUFDcEU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLGlCQUFpQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1REFBdUQ7QUFDdkQsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNULDhFQUE4RTtBQUM5RTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhCQUE4Qix1QkFBdUI7QUFDckQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSx1Q0FBdUMsMEJBQTBCO0FBQ2pFO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwrQkFBK0IsMEJBQTBCLGVBQWU7QUFDeEU7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBLENBQUMsZSIsImZpbGUiOiIxOTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG4oZnVuY3Rpb24oKSB7XG5cbihmdW5jdGlvbihzZWxmKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICBpZiAoc2VsZi5mZXRjaCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIHN1cHBvcnQgPSB7XG4gICAgc2VhcmNoUGFyYW1zOiAnVVJMU2VhcmNoUGFyYW1zJyBpbiBzZWxmLFxuICAgIGl0ZXJhYmxlOiAnU3ltYm9sJyBpbiBzZWxmICYmICdpdGVyYXRvcicgaW4gU3ltYm9sLFxuICAgIGJsb2I6ICdGaWxlUmVhZGVyJyBpbiBzZWxmICYmICdCbG9iJyBpbiBzZWxmICYmIChmdW5jdGlvbigpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG5ldyBCbG9iKClcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9KSgpLFxuICAgIGZvcm1EYXRhOiAnRm9ybURhdGEnIGluIHNlbGYsXG4gICAgYXJyYXlCdWZmZXI6ICdBcnJheUJ1ZmZlcicgaW4gc2VsZlxuICB9XG5cbiAgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIpIHtcbiAgICB2YXIgdmlld0NsYXNzZXMgPSBbXG4gICAgICAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICAgICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICAgICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgICAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgICAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgVWludDMyQXJyYXldJyxcbiAgICAgICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgRmxvYXQ2NEFycmF5XSdcbiAgICBdXG5cbiAgICB2YXIgaXNEYXRhVmlldyA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiBEYXRhVmlldy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihvYmopXG4gICAgfVxuXG4gICAgdmFyIGlzQXJyYXlCdWZmZXJWaWV3ID0gQXJyYXlCdWZmZXIuaXNWaWV3IHx8IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiB2aWV3Q2xhc3Nlcy5pbmRleE9mKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopKSA+IC0xXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplTmFtZShuYW1lKSB7XG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgbmFtZSA9IFN0cmluZyhuYW1lKVxuICAgIH1cbiAgICBpZiAoL1teYS16MC05XFwtIyQlJicqKy5cXF5fYHx+XS9pLnRlc3QobmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgY2hhcmFjdGVyIGluIGhlYWRlciBmaWVsZCBuYW1lJylcbiAgICB9XG4gICAgcmV0dXJuIG5hbWUudG9Mb3dlckNhc2UoKVxuICB9XG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplVmFsdWUodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgdmFsdWUgPSBTdHJpbmcodmFsdWUpXG4gICAgfVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgLy8gQnVpbGQgYSBkZXN0cnVjdGl2ZSBpdGVyYXRvciBmb3IgdGhlIHZhbHVlIGxpc3RcbiAgZnVuY3Rpb24gaXRlcmF0b3JGb3IoaXRlbXMpIHtcbiAgICB2YXIgaXRlcmF0b3IgPSB7XG4gICAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gaXRlbXMuc2hpZnQoKVxuICAgICAgICByZXR1cm4ge2RvbmU6IHZhbHVlID09PSB1bmRlZmluZWQsIHZhbHVlOiB2YWx1ZX1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICAgICAgaXRlcmF0b3JbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaXRlcmF0b3JcbiAgfVxuXG4gIGZ1bmN0aW9uIEhlYWRlcnMoaGVhZGVycykge1xuICAgIHRoaXMubWFwID0ge31cblxuICAgIGlmIChoZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycykge1xuICAgICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIHZhbHVlKVxuICAgICAgfSwgdGhpcylcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICAgIGhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbihoZWFkZXIpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoaGVhZGVyWzBdLCBoZWFkZXJbMV0pXG4gICAgICB9LCB0aGlzKVxuICAgIH0gZWxzZSBpZiAoaGVhZGVycykge1xuICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIGhlYWRlcnNbbmFtZV0pXG4gICAgICB9LCB0aGlzKVxuICAgIH1cbiAgfVxuXG4gIEhlYWRlcnMucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSlcbiAgICB2YWx1ZSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKVxuICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMubWFwW25hbWVdXG4gICAgdGhpcy5tYXBbbmFtZV0gPSBvbGRWYWx1ZSA/IG9sZFZhbHVlKycsJyt2YWx1ZSA6IHZhbHVlXG4gIH1cblxuICBIZWFkZXJzLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgZGVsZXRlIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldXG4gIH1cblxuICBIZWFkZXJzLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSlcbiAgICByZXR1cm4gdGhpcy5oYXMobmFtZSkgPyB0aGlzLm1hcFtuYW1lXSA6IG51bGxcbiAgfVxuXG4gIEhlYWRlcnMucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAuaGFzT3duUHJvcGVydHkobm9ybWFsaXplTmFtZShuYW1lKSlcbiAgfVxuXG4gIEhlYWRlcnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgdGhpcy5tYXBbbm9ybWFsaXplTmFtZShuYW1lKV0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSlcbiAgfVxuXG4gIEhlYWRlcnMucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbihjYWxsYmFjaywgdGhpc0FyZykge1xuICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5tYXApIHtcbiAgICAgIGlmICh0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHRoaXMubWFwW25hbWVdLCBuYW1lLCB0aGlzKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEhlYWRlcnMucHJvdG90eXBlLmtleXMgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaXRlbXMgPSBbXVxuICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkgeyBpdGVtcy5wdXNoKG5hbWUpIH0pXG4gICAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxuICB9XG5cbiAgSGVhZGVycy5wcm90b3R5cGUudmFsdWVzID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGl0ZW1zID0gW11cbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHsgaXRlbXMucHVzaCh2YWx1ZSkgfSlcbiAgICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpXG4gIH1cblxuICBIZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGl0ZW1zID0gW11cbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHsgaXRlbXMucHVzaChbbmFtZSwgdmFsdWVdKSB9KVxuICAgIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbiAgfVxuXG4gIGlmIChzdXBwb3J0Lml0ZXJhYmxlKSB7XG4gICAgSGVhZGVycy5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IEhlYWRlcnMucHJvdG90eXBlLmVudHJpZXNcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnN1bWVkKGJvZHkpIHtcbiAgICBpZiAoYm9keS5ib2R5VXNlZCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ0FscmVhZHkgcmVhZCcpKVxuICAgIH1cbiAgICBib2R5LmJvZHlVc2VkID0gdHJ1ZVxuICB9XG5cbiAgZnVuY3Rpb24gZmlsZVJlYWRlclJlYWR5KHJlYWRlcikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmVzb2x2ZShyZWFkZXIucmVzdWx0KVxuICAgICAgfVxuICAgICAgcmVhZGVyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KHJlYWRlci5lcnJvcilcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZEJsb2JBc0FycmF5QnVmZmVyKGJsb2IpIHtcbiAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxuICAgIHZhciBwcm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJlYWRlcilcbiAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoYmxvYilcbiAgICByZXR1cm4gcHJvbWlzZVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZEJsb2JBc1RleHQoYmxvYikge1xuICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXG4gICAgdmFyIHByb21pc2UgPSBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKVxuICAgIHJlYWRlci5yZWFkQXNUZXh0KGJsb2IpXG4gICAgcmV0dXJuIHByb21pc2VcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRBcnJheUJ1ZmZlckFzVGV4dChidWYpIHtcbiAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1ZilcbiAgICB2YXIgY2hhcnMgPSBuZXcgQXJyYXkodmlldy5sZW5ndGgpXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZXcubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoYXJzW2ldID0gU3RyaW5nLmZyb21DaGFyQ29kZSh2aWV3W2ldKVxuICAgIH1cbiAgICByZXR1cm4gY2hhcnMuam9pbignJylcbiAgfVxuXG4gIGZ1bmN0aW9uIGJ1ZmZlckNsb25lKGJ1Zikge1xuICAgIGlmIChidWYuc2xpY2UpIHtcbiAgICAgIHJldHVybiBidWYuc2xpY2UoMClcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYuYnl0ZUxlbmd0aClcbiAgICAgIHZpZXcuc2V0KG5ldyBVaW50OEFycmF5KGJ1ZikpXG4gICAgICByZXR1cm4gdmlldy5idWZmZXJcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBCb2R5KCkge1xuICAgIHRoaXMuYm9keVVzZWQgPSBmYWxzZVxuXG4gICAgdGhpcy5faW5pdEJvZHkgPSBmdW5jdGlvbihib2R5KSB7XG4gICAgICB0aGlzLl9ib2R5SW5pdCA9IGJvZHlcbiAgICAgIGlmICghYm9keSkge1xuICAgICAgICB0aGlzLl9ib2R5VGV4dCA9ICcnXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHlcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5ibG9iICYmIEJsb2IucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgICAgdGhpcy5fYm9keUJsb2IgPSBib2R5XG4gICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuZm9ybURhdGEgJiYgRm9ybURhdGEucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgICAgdGhpcy5fYm9keUZvcm1EYXRhID0gYm9keVxuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LnNlYXJjaFBhcmFtcyAmJiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5LnRvU3RyaW5nKClcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiBzdXBwb3J0LmJsb2IgJiYgaXNEYXRhVmlldyhib2R5KSkge1xuICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIgPSBidWZmZXJDbG9uZShib2R5LmJ1ZmZlcilcbiAgICAgICAgLy8gSUUgMTAtMTEgY2FuJ3QgaGFuZGxlIGEgRGF0YVZpZXcgYm9keS5cbiAgICAgICAgdGhpcy5fYm9keUluaXQgPSBuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSlcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiAoQXJyYXlCdWZmZXIucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkgfHwgaXNBcnJheUJ1ZmZlclZpZXcoYm9keSkpKSB7XG4gICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vuc3VwcG9ydGVkIEJvZHlJbml0IHR5cGUnKVxuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAndGV4dC9wbGFpbjtjaGFyc2V0PVVURi04JylcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QmxvYiAmJiB0aGlzLl9ib2R5QmxvYi50eXBlKSB7XG4gICAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgdGhpcy5fYm9keUJsb2IudHlwZSlcbiAgICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LnNlYXJjaFBhcmFtcyAmJiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgnKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN1cHBvcnQuYmxvYikge1xuICAgICAgdGhpcy5ibG9iID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgICAgIGlmIChyZWplY3RlZCkge1xuICAgICAgICAgIHJldHVybiByZWplY3RlZFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2JvZHlCbG9iKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QmxvYilcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKSlcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5Rm9ybURhdGEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgYmxvYicpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keVRleHRdKSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmFycmF5QnVmZmVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICByZXR1cm4gY29uc3VtZWQodGhpcykgfHwgUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5ibG9iKCkudGhlbihyZWFkQmxvYkFzQXJyYXlCdWZmZXIpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnRleHQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdGVkXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgICByZXR1cm4gcmVhZEJsb2JBc1RleHQodGhpcy5fYm9keUJsb2IpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlYWRBcnJheUJ1ZmZlckFzVGV4dCh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5Rm9ybURhdGEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIHRleHQnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5VGV4dClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3VwcG9ydC5mb3JtRGF0YSkge1xuICAgICAgdGhpcy5mb3JtRGF0YSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihkZWNvZGUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5qc29uID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihKU09OLnBhcnNlKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvLyBIVFRQIG1ldGhvZHMgd2hvc2UgY2FwaXRhbGl6YXRpb24gc2hvdWxkIGJlIG5vcm1hbGl6ZWRcbiAgdmFyIG1ldGhvZHMgPSBbJ0RFTEVURScsICdHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1BPU1QnLCAnUFVUJ11cblxuICBmdW5jdGlvbiBub3JtYWxpemVNZXRob2QobWV0aG9kKSB7XG4gICAgdmFyIHVwY2FzZWQgPSBtZXRob2QudG9VcHBlckNhc2UoKVxuICAgIHJldHVybiAobWV0aG9kcy5pbmRleE9mKHVwY2FzZWQpID4gLTEpID8gdXBjYXNlZCA6IG1ldGhvZFxuICB9XG5cbiAgZnVuY3Rpb24gUmVxdWVzdChpbnB1dCwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG4gICAgdmFyIGJvZHkgPSBvcHRpb25zLmJvZHlcblxuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICAgIGlmIChpbnB1dC5ib2R5VXNlZCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKVxuICAgICAgfVxuICAgICAgdGhpcy51cmwgPSBpbnB1dC51cmxcbiAgICAgIHRoaXMuY3JlZGVudGlhbHMgPSBpbnB1dC5jcmVkZW50aWFsc1xuICAgICAgaWYgKCFvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMoaW5wdXQuaGVhZGVycylcbiAgICAgIH1cbiAgICAgIHRoaXMubWV0aG9kID0gaW5wdXQubWV0aG9kXG4gICAgICB0aGlzLm1vZGUgPSBpbnB1dC5tb2RlXG4gICAgICBpZiAoIWJvZHkgJiYgaW5wdXQuX2JvZHlJbml0ICE9IG51bGwpIHtcbiAgICAgICAgYm9keSA9IGlucHV0Ll9ib2R5SW5pdFxuICAgICAgICBpbnB1dC5ib2R5VXNlZCA9IHRydWVcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cmwgPSBTdHJpbmcoaW5wdXQpXG4gICAgfVxuXG4gICAgdGhpcy5jcmVkZW50aWFscyA9IG9wdGlvbnMuY3JlZGVudGlhbHMgfHwgdGhpcy5jcmVkZW50aWFscyB8fCAnb21pdCdcbiAgICBpZiAob3B0aW9ucy5oZWFkZXJzIHx8ICF0aGlzLmhlYWRlcnMpIHtcbiAgICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycylcbiAgICB9XG4gICAgdGhpcy5tZXRob2QgPSBub3JtYWxpemVNZXRob2Qob3B0aW9ucy5tZXRob2QgfHwgdGhpcy5tZXRob2QgfHwgJ0dFVCcpXG4gICAgdGhpcy5tb2RlID0gb3B0aW9ucy5tb2RlIHx8IHRoaXMubW9kZSB8fCBudWxsXG4gICAgdGhpcy5yZWZlcnJlciA9IG51bGxcblxuICAgIGlmICgodGhpcy5tZXRob2QgPT09ICdHRVQnIHx8IHRoaXMubWV0aG9kID09PSAnSEVBRCcpICYmIGJvZHkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JvZHkgbm90IGFsbG93ZWQgZm9yIEdFVCBvciBIRUFEIHJlcXVlc3RzJylcbiAgICB9XG4gICAgdGhpcy5faW5pdEJvZHkoYm9keSlcbiAgfVxuXG4gIFJlcXVlc3QucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBSZXF1ZXN0KHRoaXMsIHsgYm9keTogdGhpcy5fYm9keUluaXQgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlY29kZShib2R5KSB7XG4gICAgdmFyIGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICAgIGJvZHkudHJpbSgpLnNwbGl0KCcmJykuZm9yRWFjaChmdW5jdGlvbihieXRlcykge1xuICAgICAgaWYgKGJ5dGVzKSB7XG4gICAgICAgIHZhciBzcGxpdCA9IGJ5dGVzLnNwbGl0KCc9JylcbiAgICAgICAgdmFyIG5hbWUgPSBzcGxpdC5zaGlmdCgpLnJlcGxhY2UoL1xcKy9nLCAnICcpXG4gICAgICAgIHZhciB2YWx1ZSA9IHNwbGl0LmpvaW4oJz0nKS5yZXBsYWNlKC9cXCsvZywgJyAnKVxuICAgICAgICBmb3JtLmFwcGVuZChkZWNvZGVVUklDb21wb25lbnQobmFtZSksIGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpXG4gICAgICB9XG4gICAgfSlcbiAgICByZXR1cm4gZm9ybVxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIHtcbiAgICB2YXIgaGVhZGVycyA9IG5ldyBIZWFkZXJzKClcbiAgICAvLyBSZXBsYWNlIGluc3RhbmNlcyBvZiBcXHJcXG4gYW5kIFxcbiBmb2xsb3dlZCBieSBhdCBsZWFzdCBvbmUgc3BhY2Ugb3IgaG9yaXpvbnRhbCB0YWIgd2l0aCBhIHNwYWNlXG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjJcbiAgICB2YXIgcHJlUHJvY2Vzc2VkSGVhZGVycyA9IHJhd0hlYWRlcnMucmVwbGFjZSgvXFxyP1xcbltcXHQgXSsvZywgJyAnKVxuICAgIHByZVByb2Nlc3NlZEhlYWRlcnMuc3BsaXQoL1xccj9cXG4vKS5mb3JFYWNoKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgIHZhciBwYXJ0cyA9IGxpbmUuc3BsaXQoJzonKVxuICAgICAgdmFyIGtleSA9IHBhcnRzLnNoaWZ0KCkudHJpbSgpXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHBhcnRzLmpvaW4oJzonKS50cmltKClcbiAgICAgICAgaGVhZGVycy5hcHBlbmQoa2V5LCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiBoZWFkZXJzXG4gIH1cblxuICBCb2R5LmNhbGwoUmVxdWVzdC5wcm90b3R5cGUpXG5cbiAgZnVuY3Rpb24gUmVzcG9uc2UoYm9keUluaXQsIG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIG9wdGlvbnMgPSB7fVxuICAgIH1cblxuICAgIHRoaXMudHlwZSA9ICdkZWZhdWx0J1xuICAgIHRoaXMuc3RhdHVzID0gb3B0aW9ucy5zdGF0dXMgPT09IHVuZGVmaW5lZCA/IDIwMCA6IG9wdGlvbnMuc3RhdHVzXG4gICAgdGhpcy5vayA9IHRoaXMuc3RhdHVzID49IDIwMCAmJiB0aGlzLnN0YXR1cyA8IDMwMFxuICAgIHRoaXMuc3RhdHVzVGV4dCA9ICdzdGF0dXNUZXh0JyBpbiBvcHRpb25zID8gb3B0aW9ucy5zdGF0dXNUZXh0IDogJ09LJ1xuICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycylcbiAgICB0aGlzLnVybCA9IG9wdGlvbnMudXJsIHx8ICcnXG4gICAgdGhpcy5faW5pdEJvZHkoYm9keUluaXQpXG4gIH1cblxuICBCb2R5LmNhbGwoUmVzcG9uc2UucHJvdG90eXBlKVxuXG4gIFJlc3BvbnNlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUmVzcG9uc2UodGhpcy5fYm9keUluaXQsIHtcbiAgICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXG4gICAgICBzdGF0dXNUZXh0OiB0aGlzLnN0YXR1c1RleHQsXG4gICAgICBoZWFkZXJzOiBuZXcgSGVhZGVycyh0aGlzLmhlYWRlcnMpLFxuICAgICAgdXJsOiB0aGlzLnVybFxuICAgIH0pXG4gIH1cblxuICBSZXNwb25zZS5lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByZXNwb25zZSA9IG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiAwLCBzdGF0dXNUZXh0OiAnJ30pXG4gICAgcmVzcG9uc2UudHlwZSA9ICdlcnJvcidcbiAgICByZXR1cm4gcmVzcG9uc2VcbiAgfVxuXG4gIHZhciByZWRpcmVjdFN0YXR1c2VzID0gWzMwMSwgMzAyLCAzMDMsIDMwNywgMzA4XVxuXG4gIFJlc3BvbnNlLnJlZGlyZWN0ID0gZnVuY3Rpb24odXJsLCBzdGF0dXMpIHtcbiAgICBpZiAocmVkaXJlY3RTdGF0dXNlcy5pbmRleE9mKHN0YXR1cykgPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCBzdGF0dXMgY29kZScpXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiBzdGF0dXMsIGhlYWRlcnM6IHtsb2NhdGlvbjogdXJsfX0pXG4gIH1cblxuICBzZWxmLkhlYWRlcnMgPSBIZWFkZXJzXG4gIHNlbGYuUmVxdWVzdCA9IFJlcXVlc3RcbiAgc2VsZi5SZXNwb25zZSA9IFJlc3BvbnNlXG5cbiAgc2VsZi5mZXRjaCA9IGZ1bmN0aW9uKGlucHV0LCBpbml0KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHJlcXVlc3QgPSBuZXcgUmVxdWVzdChpbnB1dCwgaW5pdClcbiAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKVxuXG4gICAgICB4aHIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICAgIHN0YXR1czogeGhyLnN0YXR1cyxcbiAgICAgICAgICBzdGF0dXNUZXh0OiB4aHIuc3RhdHVzVGV4dCxcbiAgICAgICAgICBoZWFkZXJzOiBwYXJzZUhlYWRlcnMoeGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpIHx8ICcnKVxuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMudXJsID0gJ3Jlc3BvbnNlVVJMJyBpbiB4aHIgPyB4aHIucmVzcG9uc2VVUkwgOiBvcHRpb25zLmhlYWRlcnMuZ2V0KCdYLVJlcXVlc3QtVVJMJylcbiAgICAgICAgdmFyIGJvZHkgPSAncmVzcG9uc2UnIGluIHhociA/IHhoci5yZXNwb25zZSA6IHhoci5yZXNwb25zZVRleHRcbiAgICAgICAgcmVzb2x2ZShuZXcgUmVzcG9uc2UoYm9keSwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHhoci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdOZXR3b3JrIHJlcXVlc3QgZmFpbGVkJykpXG4gICAgICB9XG5cbiAgICAgIHhoci5vbnRpbWVvdXQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCBmYWlsZWQnKSlcbiAgICAgIH1cblxuICAgICAgeGhyLm9wZW4ocmVxdWVzdC5tZXRob2QsIHJlcXVlc3QudXJsLCB0cnVlKVxuXG4gICAgICBpZiAocmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ2luY2x1ZGUnKSB7XG4gICAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlXG4gICAgICB9IGVsc2UgaWYgKHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdvbWl0Jykge1xuICAgICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gZmFsc2VcbiAgICAgIH1cblxuICAgICAgaWYgKCdyZXNwb25zZVR5cGUnIGluIHhociAmJiBzdXBwb3J0LmJsb2IpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdibG9iJ1xuICAgICAgfVxuXG4gICAgICByZXF1ZXN0LmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCB2YWx1ZSlcbiAgICAgIH0pXG5cbiAgICAgIHhoci5zZW5kKHR5cGVvZiByZXF1ZXN0Ll9ib2R5SW5pdCA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogcmVxdWVzdC5fYm9keUluaXQpXG4gICAgfSlcbiAgfVxuICBzZWxmLmZldGNoLnBvbHlmaWxsID0gdHJ1ZVxufSkodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHRoaXMpO1xuXG5cbi8qKiogRVhQT1JUUyBGUk9NIGV4cG9ydHMtbG9hZGVyICoqKi9cbm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsLmZldGNoO1xufS5jYWxsKGdsb2JhbCkpOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///190\n")},191:function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __extends = (this && this.__extends) || (function () {\r\n    var extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return function (d, b) {\r\n        extendStatics(d, b);\r\n        function __() { this.constructor = d; }\r\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n    };\r\n})();\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar TreadstoneRepository_1 = __webpack_require__(21);\r\nvar CarRentalRewardRepository = /** @class */ (function (_super) {\r\n    __extends(CarRentalRewardRepository, _super);\r\n    function CarRentalRewardRepository() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    CarRentalRewardRepository.prototype.fetchAvisWizardNumber = function () {\r\n        return this.httpClient\r\n            .fetch("/CarRentalReward/GetCarRentalReward/")\r\n            .then(function (response) { return response.json(); });\r\n    };\r\n    return CarRentalRewardRepository;\r\n}(TreadstoneRepository_1.TreadstoneRepository));\r\nexports.CarRentalRewardRepository = CarRentalRewardRepository;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9hdmlzLWNhci1yZW50YWwvQ2FyUmVudGFsUmV3YXJkUmVwb3NpdG9yeS50cz8zMDJlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQTtBQUNBLFVBQVUsZ0JBQWdCLHNDQUFzQyxpQkFBaUIsRUFBRTtBQUNuRix5QkFBeUIsdURBQXVEO0FBQ2hGO0FBQ0E7QUFDQSx1QkFBdUIsc0JBQXNCO0FBQzdDO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsOENBQThDLGNBQWM7QUFDNUQsNkJBQTZCLG1CQUFPLENBQUMsRUFBNEI7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1Qyx3QkFBd0IsRUFBRTtBQUNqRTtBQUNBO0FBQ0EsQ0FBQztBQUNEIiwiZmlsZSI6IjE5MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xyXG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG4gICAgfTtcclxufSkoKTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgVHJlYWRzdG9uZVJlcG9zaXRvcnlfMSA9IHJlcXVpcmUoXCIuLi8uLi9UcmVhZHN0b25lUmVwb3NpdG9yeVwiKTtcclxudmFyIENhclJlbnRhbFJld2FyZFJlcG9zaXRvcnkgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XHJcbiAgICBfX2V4dGVuZHMoQ2FyUmVudGFsUmV3YXJkUmVwb3NpdG9yeSwgX3N1cGVyKTtcclxuICAgIGZ1bmN0aW9uIENhclJlbnRhbFJld2FyZFJlcG9zaXRvcnkoKSB7XHJcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xyXG4gICAgfVxyXG4gICAgQ2FyUmVudGFsUmV3YXJkUmVwb3NpdG9yeS5wcm90b3R5cGUuZmV0Y2hBdmlzV2l6YXJkTnVtYmVyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcclxuICAgICAgICAgICAgLmZldGNoKFwiL0NhclJlbnRhbFJld2FyZC9HZXRDYXJSZW50YWxSZXdhcmQvXCIpXHJcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkgeyByZXR1cm4gcmVzcG9uc2UuanNvbigpOyB9KTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gQ2FyUmVudGFsUmV3YXJkUmVwb3NpdG9yeTtcclxufShUcmVhZHN0b25lUmVwb3NpdG9yeV8xLlRyZWFkc3RvbmVSZXBvc2l0b3J5KSk7XHJcbmV4cG9ydHMuQ2FyUmVudGFsUmV3YXJkUmVwb3NpdG9yeSA9IENhclJlbnRhbFJld2FyZFJlcG9zaXRvcnk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///191\n')},192:function(module,exports){eval("/*! @preserve\n * numeral.js\n * version : 2.0.6\n * author : Adam Draper\n * license : MIT\n * http://adamwdraper.github.com/Numeral-js/\n */\n\n(function (global, factory) {\n    if (typeof define === 'function' && define.amd) {\n        define(factory);\n    } else if (typeof module === 'object' && module.exports) {\n        module.exports = factory();\n    } else {\n        global.numeral = factory();\n    }\n}(this, function () {\n    /************************************\n        Variables\n    ************************************/\n\n    var numeral,\n        _,\n        VERSION = '2.0.6',\n        formats = {},\n        locales = {},\n        defaults = {\n            currentLocale: 'en',\n            zeroFormat: null,\n            nullFormat: null,\n            defaultFormat: '0,0',\n            scalePercentBy100: true\n        },\n        options = {\n            currentLocale: defaults.currentLocale,\n            zeroFormat: defaults.zeroFormat,\n            nullFormat: defaults.nullFormat,\n            defaultFormat: defaults.defaultFormat,\n            scalePercentBy100: defaults.scalePercentBy100\n        };\n\n\n    /************************************\n        Constructors\n    ************************************/\n\n    // Numeral prototype object\n    function Numeral(input, number) {\n        this._input = input;\n\n        this._value = number;\n    }\n\n    numeral = function(input) {\n        var value,\n            kind,\n            unformatFunction,\n            regexp;\n\n        if (numeral.isNumeral(input)) {\n            value = input.value();\n        } else if (input === 0 || typeof input === 'undefined') {\n            value = 0;\n        } else if (input === null || _.isNaN(input)) {\n            value = null;\n        } else if (typeof input === 'string') {\n            if (options.zeroFormat && input === options.zeroFormat) {\n                value = 0;\n            } else if (options.nullFormat && input === options.nullFormat || !input.replace(/[^0-9]+/g, '').length) {\n                value = null;\n            } else {\n                for (kind in formats) {\n                    regexp = typeof formats[kind].regexps.unformat === 'function' ? formats[kind].regexps.unformat() : formats[kind].regexps.unformat;\n\n                    if (regexp && input.match(regexp)) {\n                        unformatFunction = formats[kind].unformat;\n\n                        break;\n                    }\n                }\n\n                unformatFunction = unformatFunction || numeral._.stringToNumber;\n\n                value = unformatFunction(input);\n            }\n        } else {\n            value = Number(input)|| null;\n        }\n\n        return new Numeral(input, value);\n    };\n\n    // version number\n    numeral.version = VERSION;\n\n    // compare numeral object\n    numeral.isNumeral = function(obj) {\n        return obj instanceof Numeral;\n    };\n\n    // helper functions\n    numeral._ = _ = {\n        // formats numbers separators, decimals places, signs, abbreviations\n        numberToFormat: function(value, format, roundingFunction) {\n            var locale = locales[numeral.options.currentLocale],\n                negP = false,\n                optDec = false,\n                leadingCount = 0,\n                abbr = '',\n                trillion = 1000000000000,\n                billion = 1000000000,\n                million = 1000000,\n                thousand = 1000,\n                decimal = '',\n                neg = false,\n                abbrForce, // force abbreviation\n                abs,\n                min,\n                max,\n                power,\n                int,\n                precision,\n                signed,\n                thousands,\n                output;\n\n            // make sure we never format a null value\n            value = value || 0;\n\n            abs = Math.abs(value);\n\n            // see if we should use parentheses for negative number or if we should prefix with a sign\n            // if both are present we default to parentheses\n            if (numeral._.includes(format, '(')) {\n                negP = true;\n                format = format.replace(/[\\(|\\)]/g, '');\n            } else if (numeral._.includes(format, '+') || numeral._.includes(format, '-')) {\n                signed = numeral._.includes(format, '+') ? format.indexOf('+') : value < 0 ? format.indexOf('-') : -1;\n                format = format.replace(/[\\+|\\-]/g, '');\n            }\n\n            // see if abbreviation is wanted\n            if (numeral._.includes(format, 'a')) {\n                abbrForce = format.match(/a(k|m|b|t)?/);\n\n                abbrForce = abbrForce ? abbrForce[1] : false;\n\n                // check for space before abbreviation\n                if (numeral._.includes(format, ' a')) {\n                    abbr = ' ';\n                }\n\n                format = format.replace(new RegExp(abbr + 'a[kmbt]?'), '');\n\n                if (abs >= trillion && !abbrForce || abbrForce === 't') {\n                    // trillion\n                    abbr += locale.abbreviations.trillion;\n                    value = value / trillion;\n                } else if (abs < trillion && abs >= billion && !abbrForce || abbrForce === 'b') {\n                    // billion\n                    abbr += locale.abbreviations.billion;\n                    value = value / billion;\n                } else if (abs < billion && abs >= million && !abbrForce || abbrForce === 'm') {\n                    // million\n                    abbr += locale.abbreviations.million;\n                    value = value / million;\n                } else if (abs < million && abs >= thousand && !abbrForce || abbrForce === 'k') {\n                    // thousand\n                    abbr += locale.abbreviations.thousand;\n                    value = value / thousand;\n                }\n            }\n\n            // check for optional decimals\n            if (numeral._.includes(format, '[.]')) {\n                optDec = true;\n                format = format.replace('[.]', '.');\n            }\n\n            // break number and format\n            int = value.toString().split('.')[0];\n            precision = format.split('.')[1];\n            thousands = format.indexOf(',');\n            leadingCount = (format.split('.')[0].split(',')[0].match(/0/g) || []).length;\n\n            if (precision) {\n                if (numeral._.includes(precision, '[')) {\n                    precision = precision.replace(']', '');\n                    precision = precision.split('[');\n                    decimal = numeral._.toFixed(value, (precision[0].length + precision[1].length), roundingFunction, precision[1].length);\n                } else {\n                    decimal = numeral._.toFixed(value, precision.length, roundingFunction);\n                }\n\n                int = decimal.split('.')[0];\n\n                if (numeral._.includes(decimal, '.')) {\n                    decimal = locale.delimiters.decimal + decimal.split('.')[1];\n                } else {\n                    decimal = '';\n                }\n\n                if (optDec && Number(decimal.slice(1)) === 0) {\n                    decimal = '';\n                }\n            } else {\n                int = numeral._.toFixed(value, 0, roundingFunction);\n            }\n\n            // check abbreviation again after rounding\n            if (abbr && !abbrForce && Number(int) >= 1000 && abbr !== locale.abbreviations.trillion) {\n                int = String(Number(int) / 1000);\n\n                switch (abbr) {\n                    case locale.abbreviations.thousand:\n                        abbr = locale.abbreviations.million;\n                        break;\n                    case locale.abbreviations.million:\n                        abbr = locale.abbreviations.billion;\n                        break;\n                    case locale.abbreviations.billion:\n                        abbr = locale.abbreviations.trillion;\n                        break;\n                }\n            }\n\n\n            // format number\n            if (numeral._.includes(int, '-')) {\n                int = int.slice(1);\n                neg = true;\n            }\n\n            if (int.length < leadingCount) {\n                for (var i = leadingCount - int.length; i > 0; i--) {\n                    int = '0' + int;\n                }\n            }\n\n            if (thousands > -1) {\n                int = int.toString().replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1' + locale.delimiters.thousands);\n            }\n\n            if (format.indexOf('.') === 0) {\n                int = '';\n            }\n\n            output = int + decimal + (abbr ? abbr : '');\n\n            if (negP) {\n                output = (negP && neg ? '(' : '') + output + (negP && neg ? ')' : '');\n            } else {\n                if (signed >= 0) {\n                    output = signed === 0 ? (neg ? '-' : '+') + output : output + (neg ? '-' : '+');\n                } else if (neg) {\n                    output = '-' + output;\n                }\n            }\n\n            return output;\n        },\n        // unformats numbers separators, decimals places, signs, abbreviations\n        stringToNumber: function(string) {\n            var locale = locales[options.currentLocale],\n                stringOriginal = string,\n                abbreviations = {\n                    thousand: 3,\n                    million: 6,\n                    billion: 9,\n                    trillion: 12\n                },\n                abbreviation,\n                value,\n                i,\n                regexp;\n\n            if (options.zeroFormat && string === options.zeroFormat) {\n                value = 0;\n            } else if (options.nullFormat && string === options.nullFormat || !string.replace(/[^0-9]+/g, '').length) {\n                value = null;\n            } else {\n                value = 1;\n\n                if (locale.delimiters.decimal !== '.') {\n                    string = string.replace(/\\./g, '').replace(locale.delimiters.decimal, '.');\n                }\n\n                for (abbreviation in abbreviations) {\n                    regexp = new RegExp('[^a-zA-Z]' + locale.abbreviations[abbreviation] + '(?:\\\\)|(\\\\' + locale.currency.symbol + ')?(?:\\\\))?)?$');\n\n                    if (stringOriginal.match(regexp)) {\n                        value *= Math.pow(10, abbreviations[abbreviation]);\n                        break;\n                    }\n                }\n\n                // check for negative number\n                value *= (string.split('-').length + Math.min(string.split('(').length - 1, string.split(')').length - 1)) % 2 ? 1 : -1;\n\n                // remove non numbers\n                string = string.replace(/[^0-9\\.]+/g, '');\n\n                value *= Number(string);\n            }\n\n            return value;\n        },\n        isNaN: function(value) {\n            return typeof value === 'number' && isNaN(value);\n        },\n        includes: function(string, search) {\n            return string.indexOf(search) !== -1;\n        },\n        insert: function(string, subString, start) {\n            return string.slice(0, start) + subString + string.slice(start);\n        },\n        reduce: function(array, callback /*, initialValue*/) {\n            if (this === null) {\n                throw new TypeError('Array.prototype.reduce called on null or undefined');\n            }\n\n            if (typeof callback !== 'function') {\n                throw new TypeError(callback + ' is not a function');\n            }\n\n            var t = Object(array),\n                len = t.length >>> 0,\n                k = 0,\n                value;\n\n            if (arguments.length === 3) {\n                value = arguments[2];\n            } else {\n                while (k < len && !(k in t)) {\n                    k++;\n                }\n\n                if (k >= len) {\n                    throw new TypeError('Reduce of empty array with no initial value');\n                }\n\n                value = t[k++];\n            }\n            for (; k < len; k++) {\n                if (k in t) {\n                    value = callback(value, t[k], k, t);\n                }\n            }\n            return value;\n        },\n        /**\n         * Computes the multiplier necessary to make x >= 1,\n         * effectively eliminating miscalculations caused by\n         * finite precision.\n         */\n        multiplier: function (x) {\n            var parts = x.toString().split('.');\n\n            return parts.length < 2 ? 1 : Math.pow(10, parts[1].length);\n        },\n        /**\n         * Given a variable number of arguments, returns the maximum\n         * multiplier that must be used to normalize an operation involving\n         * all of them.\n         */\n        correctionFactor: function () {\n            var args = Array.prototype.slice.call(arguments);\n\n            return args.reduce(function(accum, next) {\n                var mn = _.multiplier(next);\n                return accum > mn ? accum : mn;\n            }, 1);\n        },\n        /**\n         * Implementation of toFixed() that treats floats more like decimals\n         *\n         * Fixes binary rounding issues (eg. (0.615).toFixed(2) === '0.61') that present\n         * problems for accounting- and finance-related software.\n         */\n        toFixed: function(value, maxDecimals, roundingFunction, optionals) {\n            var splitValue = value.toString().split('.'),\n                minDecimals = maxDecimals - (optionals || 0),\n                boundedPrecision,\n                optionalsRegExp,\n                power,\n                output;\n\n            // Use the smallest precision value possible to avoid errors from floating point representation\n            if (splitValue.length === 2) {\n              boundedPrecision = Math.min(Math.max(splitValue[1].length, minDecimals), maxDecimals);\n            } else {\n              boundedPrecision = minDecimals;\n            }\n\n            power = Math.pow(10, boundedPrecision);\n\n            // Multiply up by precision, round accurately, then divide and use native toFixed():\n            output = (roundingFunction(value + 'e+' + boundedPrecision) / power).toFixed(boundedPrecision);\n\n            if (optionals > maxDecimals - boundedPrecision) {\n                optionalsRegExp = new RegExp('\\\\.?0{1,' + (optionals - (maxDecimals - boundedPrecision)) + '}$');\n                output = output.replace(optionalsRegExp, '');\n            }\n\n            return output;\n        }\n    };\n\n    // avaliable options\n    numeral.options = options;\n\n    // avaliable formats\n    numeral.formats = formats;\n\n    // avaliable formats\n    numeral.locales = locales;\n\n    // This function sets the current locale.  If\n    // no arguments are passed in, it will simply return the current global\n    // locale key.\n    numeral.locale = function(key) {\n        if (key) {\n            options.currentLocale = key.toLowerCase();\n        }\n\n        return options.currentLocale;\n    };\n\n    // This function provides access to the loaded locale data.  If\n    // no arguments are passed in, it will simply return the current\n    // global locale object.\n    numeral.localeData = function(key) {\n        if (!key) {\n            return locales[options.currentLocale];\n        }\n\n        key = key.toLowerCase();\n\n        if (!locales[key]) {\n            throw new Error('Unknown locale : ' + key);\n        }\n\n        return locales[key];\n    };\n\n    numeral.reset = function() {\n        for (var property in defaults) {\n            options[property] = defaults[property];\n        }\n    };\n\n    numeral.zeroFormat = function(format) {\n        options.zeroFormat = typeof(format) === 'string' ? format : null;\n    };\n\n    numeral.nullFormat = function (format) {\n        options.nullFormat = typeof(format) === 'string' ? format : null;\n    };\n\n    numeral.defaultFormat = function(format) {\n        options.defaultFormat = typeof(format) === 'string' ? format : '0.0';\n    };\n\n    numeral.register = function(type, name, format) {\n        name = name.toLowerCase();\n\n        if (this[type + 's'][name]) {\n            throw new TypeError(name + ' ' + type + ' already registered.');\n        }\n\n        this[type + 's'][name] = format;\n\n        return format;\n    };\n\n\n    numeral.validate = function(val, culture) {\n        var _decimalSep,\n            _thousandSep,\n            _currSymbol,\n            _valArray,\n            _abbrObj,\n            _thousandRegEx,\n            localeData,\n            temp;\n\n        //coerce val to string\n        if (typeof val !== 'string') {\n            val += '';\n\n            if (console.warn) {\n                console.warn('Numeral.js: Value is not string. It has been co-erced to: ', val);\n            }\n        }\n\n        //trim whitespaces from either sides\n        val = val.trim();\n\n        //if val is just digits return true\n        if (!!val.match(/^\\d+$/)) {\n            return true;\n        }\n\n        //if val is empty return false\n        if (val === '') {\n            return false;\n        }\n\n        //get the decimal and thousands separator from numeral.localeData\n        try {\n            //check if the culture is understood by numeral. if not, default it to current locale\n            localeData = numeral.localeData(culture);\n        } catch (e) {\n            localeData = numeral.localeData(numeral.locale());\n        }\n\n        //setup the delimiters and currency symbol based on culture/locale\n        _currSymbol = localeData.currency.symbol;\n        _abbrObj = localeData.abbreviations;\n        _decimalSep = localeData.delimiters.decimal;\n        if (localeData.delimiters.thousands === '.') {\n            _thousandSep = '\\\\.';\n        } else {\n            _thousandSep = localeData.delimiters.thousands;\n        }\n\n        // validating currency symbol\n        temp = val.match(/^[^\\d]+/);\n        if (temp !== null) {\n            val = val.substr(1);\n            if (temp[0] !== _currSymbol) {\n                return false;\n            }\n        }\n\n        //validating abbreviation symbol\n        temp = val.match(/[^\\d]+$/);\n        if (temp !== null) {\n            val = val.slice(0, -1);\n            if (temp[0] !== _abbrObj.thousand && temp[0] !== _abbrObj.million && temp[0] !== _abbrObj.billion && temp[0] !== _abbrObj.trillion) {\n                return false;\n            }\n        }\n\n        _thousandRegEx = new RegExp(_thousandSep + '{2}');\n\n        if (!val.match(/[^\\d.,]/g)) {\n            _valArray = val.split(_decimalSep);\n            if (_valArray.length > 2) {\n                return false;\n            } else {\n                if (_valArray.length < 2) {\n                    return ( !! _valArray[0].match(/^\\d+.*\\d$/) && !_valArray[0].match(_thousandRegEx));\n                } else {\n                    if (_valArray[0].length === 1) {\n                        return ( !! _valArray[0].match(/^\\d+$/) && !_valArray[0].match(_thousandRegEx) && !! _valArray[1].match(/^\\d+$/));\n                    } else {\n                        return ( !! _valArray[0].match(/^\\d+.*\\d$/) && !_valArray[0].match(_thousandRegEx) && !! _valArray[1].match(/^\\d+$/));\n                    }\n                }\n            }\n        }\n\n        return false;\n    };\n\n\n    /************************************\n        Numeral Prototype\n    ************************************/\n\n    numeral.fn = Numeral.prototype = {\n        clone: function() {\n            return numeral(this);\n        },\n        format: function(inputString, roundingFunction) {\n            var value = this._value,\n                format = inputString || options.defaultFormat,\n                kind,\n                output,\n                formatFunction;\n\n            // make sure we have a roundingFunction\n            roundingFunction = roundingFunction || Math.round;\n\n            // format based on value\n            if (value === 0 && options.zeroFormat !== null) {\n                output = options.zeroFormat;\n            } else if (value === null && options.nullFormat !== null) {\n                output = options.nullFormat;\n            } else {\n                for (kind in formats) {\n                    if (format.match(formats[kind].regexps.format)) {\n                        formatFunction = formats[kind].format;\n\n                        break;\n                    }\n                }\n\n                formatFunction = formatFunction || numeral._.numberToFormat;\n\n                output = formatFunction(value, format, roundingFunction);\n            }\n\n            return output;\n        },\n        value: function() {\n            return this._value;\n        },\n        input: function() {\n            return this._input;\n        },\n        set: function(value) {\n            this._value = Number(value);\n\n            return this;\n        },\n        add: function(value) {\n            var corrFactor = _.correctionFactor.call(null, this._value, value);\n\n            function cback(accum, curr, currI, O) {\n                return accum + Math.round(corrFactor * curr);\n            }\n\n            this._value = _.reduce([this._value, value], cback, 0) / corrFactor;\n\n            return this;\n        },\n        subtract: function(value) {\n            var corrFactor = _.correctionFactor.call(null, this._value, value);\n\n            function cback(accum, curr, currI, O) {\n                return accum - Math.round(corrFactor * curr);\n            }\n\n            this._value = _.reduce([value], cback, Math.round(this._value * corrFactor)) / corrFactor;\n\n            return this;\n        },\n        multiply: function(value) {\n            function cback(accum, curr, currI, O) {\n                var corrFactor = _.correctionFactor(accum, curr);\n                return Math.round(accum * corrFactor) * Math.round(curr * corrFactor) / Math.round(corrFactor * corrFactor);\n            }\n\n            this._value = _.reduce([this._value, value], cback, 1);\n\n            return this;\n        },\n        divide: function(value) {\n            function cback(accum, curr, currI, O) {\n                var corrFactor = _.correctionFactor(accum, curr);\n                return Math.round(accum * corrFactor) / Math.round(curr * corrFactor);\n            }\n\n            this._value = _.reduce([this._value, value], cback);\n\n            return this;\n        },\n        difference: function(value) {\n            return Math.abs(numeral(this._value).subtract(value).value());\n        }\n    };\n\n    /************************************\n        Default Locale && Format\n    ************************************/\n\n    numeral.register('locale', 'en', {\n        delimiters: {\n            thousands: ',',\n            decimal: '.'\n        },\n        abbreviations: {\n            thousand: 'k',\n            million: 'm',\n            billion: 'b',\n            trillion: 't'\n        },\n        ordinal: function(number) {\n            var b = number % 10;\n            return (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n        },\n        currency: {\n            symbol: '$'\n        }\n    });\n\n    \n\n(function() {\n        numeral.register('format', 'bps', {\n            regexps: {\n                format: /(BPS)/,\n                unformat: /(BPS)/\n            },\n            format: function(value, format, roundingFunction) {\n                var space = numeral._.includes(format, ' BPS') ? ' ' : '',\n                    output;\n\n                value = value * 10000;\n\n                // check for space before BPS\n                format = format.replace(/\\s?BPS/, '');\n\n                output = numeral._.numberToFormat(value, format, roundingFunction);\n\n                if (numeral._.includes(output, ')')) {\n                    output = output.split('');\n\n                    output.splice(-1, 0, space + 'BPS');\n\n                    output = output.join('');\n                } else {\n                    output = output + space + 'BPS';\n                }\n\n                return output;\n            },\n            unformat: function(string) {\n                return +(numeral._.stringToNumber(string) * 0.0001).toFixed(15);\n            }\n        });\n})();\n\n\n(function() {\n        var decimal = {\n            base: 1000,\n            suffixes: ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']\n        },\n        binary = {\n            base: 1024,\n            suffixes: ['B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB']\n        };\n\n    var allSuffixes =  decimal.suffixes.concat(binary.suffixes.filter(function (item) {\n            return decimal.suffixes.indexOf(item) < 0;\n        }));\n        var unformatRegex = allSuffixes.join('|');\n        // Allow support for BPS (http://www.investopedia.com/terms/b/basispoint.asp)\n        unformatRegex = '(' + unformatRegex.replace('B', 'B(?!PS)') + ')';\n\n    numeral.register('format', 'bytes', {\n        regexps: {\n            format: /([0\\s]i?b)/,\n            unformat: new RegExp(unformatRegex)\n        },\n        format: function(value, format, roundingFunction) {\n            var output,\n                bytes = numeral._.includes(format, 'ib') ? binary : decimal,\n                suffix = numeral._.includes(format, ' b') || numeral._.includes(format, ' ib') ? ' ' : '',\n                power,\n                min,\n                max;\n\n            // check for space before\n            format = format.replace(/\\s?i?b/, '');\n\n            for (power = 0; power <= bytes.suffixes.length; power++) {\n                min = Math.pow(bytes.base, power);\n                max = Math.pow(bytes.base, power + 1);\n\n                if (value === null || value === 0 || value >= min && value < max) {\n                    suffix += bytes.suffixes[power];\n\n                    if (min > 0) {\n                        value = value / min;\n                    }\n\n                    break;\n                }\n            }\n\n            output = numeral._.numberToFormat(value, format, roundingFunction);\n\n            return output + suffix;\n        },\n        unformat: function(string) {\n            var value = numeral._.stringToNumber(string),\n                power,\n                bytesMultiplier;\n\n            if (value) {\n                for (power = decimal.suffixes.length - 1; power >= 0; power--) {\n                    if (numeral._.includes(string, decimal.suffixes[power])) {\n                        bytesMultiplier = Math.pow(decimal.base, power);\n\n                        break;\n                    }\n\n                    if (numeral._.includes(string, binary.suffixes[power])) {\n                        bytesMultiplier = Math.pow(binary.base, power);\n\n                        break;\n                    }\n                }\n\n                value *= (bytesMultiplier || 1);\n            }\n\n            return value;\n        }\n    });\n})();\n\n\n(function() {\n        numeral.register('format', 'currency', {\n        regexps: {\n            format: /(\\$)/\n        },\n        format: function(value, format, roundingFunction) {\n            var locale = numeral.locales[numeral.options.currentLocale],\n                symbols = {\n                    before: format.match(/^([\\+|\\-|\\(|\\s|\\$]*)/)[0],\n                    after: format.match(/([\\+|\\-|\\)|\\s|\\$]*)$/)[0]\n                },\n                output,\n                symbol,\n                i;\n\n            // strip format of spaces and $\n            format = format.replace(/\\s?\\$\\s?/, '');\n\n            // format the number\n            output = numeral._.numberToFormat(value, format, roundingFunction);\n\n            // update the before and after based on value\n            if (value >= 0) {\n                symbols.before = symbols.before.replace(/[\\-\\(]/, '');\n                symbols.after = symbols.after.replace(/[\\-\\)]/, '');\n            } else if (value < 0 && (!numeral._.includes(symbols.before, '-') && !numeral._.includes(symbols.before, '('))) {\n                symbols.before = '-' + symbols.before;\n            }\n\n            // loop through each before symbol\n            for (i = 0; i < symbols.before.length; i++) {\n                symbol = symbols.before[i];\n\n                switch (symbol) {\n                    case '$':\n                        output = numeral._.insert(output, locale.currency.symbol, i);\n                        break;\n                    case ' ':\n                        output = numeral._.insert(output, ' ', i + locale.currency.symbol.length - 1);\n                        break;\n                }\n            }\n\n            // loop through each after symbol\n            for (i = symbols.after.length - 1; i >= 0; i--) {\n                symbol = symbols.after[i];\n\n                switch (symbol) {\n                    case '$':\n                        output = i === symbols.after.length - 1 ? output + locale.currency.symbol : numeral._.insert(output, locale.currency.symbol, -(symbols.after.length - (1 + i)));\n                        break;\n                    case ' ':\n                        output = i === symbols.after.length - 1 ? output + ' ' : numeral._.insert(output, ' ', -(symbols.after.length - (1 + i) + locale.currency.symbol.length - 1));\n                        break;\n                }\n            }\n\n\n            return output;\n        }\n    });\n})();\n\n\n(function() {\n        numeral.register('format', 'exponential', {\n        regexps: {\n            format: /(e\\+|e-)/,\n            unformat: /(e\\+|e-)/\n        },\n        format: function(value, format, roundingFunction) {\n            var output,\n                exponential = typeof value === 'number' && !numeral._.isNaN(value) ? value.toExponential() : '0e+0',\n                parts = exponential.split('e');\n\n            format = format.replace(/e[\\+|\\-]{1}0/, '');\n\n            output = numeral._.numberToFormat(Number(parts[0]), format, roundingFunction);\n\n            return output + 'e' + parts[1];\n        },\n        unformat: function(string) {\n            var parts = numeral._.includes(string, 'e+') ? string.split('e+') : string.split('e-'),\n                value = Number(parts[0]),\n                power = Number(parts[1]);\n\n            power = numeral._.includes(string, 'e-') ? power *= -1 : power;\n\n            function cback(accum, curr, currI, O) {\n                var corrFactor = numeral._.correctionFactor(accum, curr),\n                    num = (accum * corrFactor) * (curr * corrFactor) / (corrFactor * corrFactor);\n                return num;\n            }\n\n            return numeral._.reduce([value, Math.pow(10, power)], cback, 1);\n        }\n    });\n})();\n\n\n(function() {\n        numeral.register('format', 'ordinal', {\n        regexps: {\n            format: /(o)/\n        },\n        format: function(value, format, roundingFunction) {\n            var locale = numeral.locales[numeral.options.currentLocale],\n                output,\n                ordinal = numeral._.includes(format, ' o') ? ' ' : '';\n\n            // check for space before\n            format = format.replace(/\\s?o/, '');\n\n            ordinal += locale.ordinal(value);\n\n            output = numeral._.numberToFormat(value, format, roundingFunction);\n\n            return output + ordinal;\n        }\n    });\n})();\n\n\n(function() {\n        numeral.register('format', 'percentage', {\n        regexps: {\n            format: /(%)/,\n            unformat: /(%)/\n        },\n        format: function(value, format, roundingFunction) {\n            var space = numeral._.includes(format, ' %') ? ' ' : '',\n                output;\n\n            if (numeral.options.scalePercentBy100) {\n                value = value * 100;\n            }\n\n            // check for space before %\n            format = format.replace(/\\s?\\%/, '');\n\n            output = numeral._.numberToFormat(value, format, roundingFunction);\n\n            if (numeral._.includes(output, ')')) {\n                output = output.split('');\n\n                output.splice(-1, 0, space + '%');\n\n                output = output.join('');\n            } else {\n                output = output + space + '%';\n            }\n\n            return output;\n        },\n        unformat: function(string) {\n            var number = numeral._.stringToNumber(string);\n            if (numeral.options.scalePercentBy100) {\n                return number * 0.01;\n            }\n            return number;\n        }\n    });\n})();\n\n\n(function() {\n        numeral.register('format', 'time', {\n        regexps: {\n            format: /(:)/,\n            unformat: /(:)/\n        },\n        format: function(value, format, roundingFunction) {\n            var hours = Math.floor(value / 60 / 60),\n                minutes = Math.floor((value - (hours * 60 * 60)) / 60),\n                seconds = Math.round(value - (hours * 60 * 60) - (minutes * 60));\n\n            return hours + ':' + (minutes < 10 ? '0' + minutes : minutes) + ':' + (seconds < 10 ? '0' + seconds : seconds);\n        },\n        unformat: function(string) {\n            var timeArray = string.split(':'),\n                seconds = 0;\n\n            // turn hours and minutes into seconds and add them all up\n            if (timeArray.length === 3) {\n                // hours\n                seconds = seconds + (Number(timeArray[0]) * 60 * 60);\n                // minutes\n                seconds = seconds + (Number(timeArray[1]) * 60);\n                // seconds\n                seconds = seconds + Number(timeArray[2]);\n            } else if (timeArray.length === 2) {\n                // minutes\n                seconds = seconds + (Number(timeArray[0]) * 60);\n                // seconds\n                seconds = seconds + Number(timeArray[1]);\n            }\n            return Number(seconds);\n        }\n    });\n})();\n\nreturn numeral;\n}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbnVtZXJhbC9udW1lcmFsLmpzPzY2MTIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQixvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsdURBQXVELE9BQU87QUFDOUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EseURBQXlELEVBQUU7QUFDM0Q7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0IsU0FBUztBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLG9EQUFvRCx5REFBeUQ7QUFDN0c7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxREFBcUQsRUFBRTs7QUFFdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7OztBQUlMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBOztBQUVBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLDJCQUEyQixnQ0FBZ0M7QUFDM0Q7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx5REFBeUQsWUFBWTtBQUNyRTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBO0FBQ0EsdUJBQXVCLDJCQUEyQjtBQUNsRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw4Q0FBOEMsRUFBRTs7QUFFaEQ7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTCxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxDQUFDOztBQUVEO0FBQ0EsQ0FBQyIsImZpbGUiOiIxOTIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiEgQHByZXNlcnZlXG4gKiBudW1lcmFsLmpzXG4gKiB2ZXJzaW9uIDogMi4wLjZcbiAqIGF1dGhvciA6IEFkYW0gRHJhcGVyXG4gKiBsaWNlbnNlIDogTUlUXG4gKiBodHRwOi8vYWRhbXdkcmFwZXIuZ2l0aHViLmNvbS9OdW1lcmFsLWpzL1xuICovXG5cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoZmFjdG9yeSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBnbG9iYWwubnVtZXJhbCA9IGZhY3RvcnkoKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uICgpIHtcbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgIFZhcmlhYmxlc1xuICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAgIHZhciBudW1lcmFsLFxuICAgICAgICBfLFxuICAgICAgICBWRVJTSU9OID0gJzIuMC42JyxcbiAgICAgICAgZm9ybWF0cyA9IHt9LFxuICAgICAgICBsb2NhbGVzID0ge30sXG4gICAgICAgIGRlZmF1bHRzID0ge1xuICAgICAgICAgICAgY3VycmVudExvY2FsZTogJ2VuJyxcbiAgICAgICAgICAgIHplcm9Gb3JtYXQ6IG51bGwsXG4gICAgICAgICAgICBudWxsRm9ybWF0OiBudWxsLFxuICAgICAgICAgICAgZGVmYXVsdEZvcm1hdDogJzAsMCcsXG4gICAgICAgICAgICBzY2FsZVBlcmNlbnRCeTEwMDogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBvcHRpb25zID0ge1xuICAgICAgICAgICAgY3VycmVudExvY2FsZTogZGVmYXVsdHMuY3VycmVudExvY2FsZSxcbiAgICAgICAgICAgIHplcm9Gb3JtYXQ6IGRlZmF1bHRzLnplcm9Gb3JtYXQsXG4gICAgICAgICAgICBudWxsRm9ybWF0OiBkZWZhdWx0cy5udWxsRm9ybWF0LFxuICAgICAgICAgICAgZGVmYXVsdEZvcm1hdDogZGVmYXVsdHMuZGVmYXVsdEZvcm1hdCxcbiAgICAgICAgICAgIHNjYWxlUGVyY2VudEJ5MTAwOiBkZWZhdWx0cy5zY2FsZVBlcmNlbnRCeTEwMFxuICAgICAgICB9O1xuXG5cbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgIENvbnN0cnVjdG9yc1xuICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAgIC8vIE51bWVyYWwgcHJvdG90eXBlIG9iamVjdFxuICAgIGZ1bmN0aW9uIE51bWVyYWwoaW5wdXQsIG51bWJlcikge1xuICAgICAgICB0aGlzLl9pbnB1dCA9IGlucHV0O1xuXG4gICAgICAgIHRoaXMuX3ZhbHVlID0gbnVtYmVyO1xuICAgIH1cblxuICAgIG51bWVyYWwgPSBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICB2YXIgdmFsdWUsXG4gICAgICAgICAgICBraW5kLFxuICAgICAgICAgICAgdW5mb3JtYXRGdW5jdGlvbixcbiAgICAgICAgICAgIHJlZ2V4cDtcblxuICAgICAgICBpZiAobnVtZXJhbC5pc051bWVyYWwoaW5wdXQpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGlucHV0LnZhbHVlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09IDAgfHwgdHlwZW9mIGlucHV0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdmFsdWUgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09PSBudWxsIHx8IF8uaXNOYU4oaW5wdXQpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuemVyb0Zvcm1hdCAmJiBpbnB1dCA9PT0gb3B0aW9ucy56ZXJvRm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSAwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLm51bGxGb3JtYXQgJiYgaW5wdXQgPT09IG9wdGlvbnMubnVsbEZvcm1hdCB8fCAhaW5wdXQucmVwbGFjZSgvW14wLTldKy9nLCAnJykubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKGtpbmQgaW4gZm9ybWF0cykge1xuICAgICAgICAgICAgICAgICAgICByZWdleHAgPSB0eXBlb2YgZm9ybWF0c1traW5kXS5yZWdleHBzLnVuZm9ybWF0ID09PSAnZnVuY3Rpb24nID8gZm9ybWF0c1traW5kXS5yZWdleHBzLnVuZm9ybWF0KCkgOiBmb3JtYXRzW2tpbmRdLnJlZ2V4cHMudW5mb3JtYXQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZ2V4cCAmJiBpbnB1dC5tYXRjaChyZWdleHApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1bmZvcm1hdEZ1bmN0aW9uID0gZm9ybWF0c1traW5kXS51bmZvcm1hdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB1bmZvcm1hdEZ1bmN0aW9uID0gdW5mb3JtYXRGdW5jdGlvbiB8fCBudW1lcmFsLl8uc3RyaW5nVG9OdW1iZXI7XG5cbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHVuZm9ybWF0RnVuY3Rpb24oaW5wdXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIoaW5wdXQpfHwgbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgTnVtZXJhbChpbnB1dCwgdmFsdWUpO1xuICAgIH07XG5cbiAgICAvLyB2ZXJzaW9uIG51bWJlclxuICAgIG51bWVyYWwudmVyc2lvbiA9IFZFUlNJT047XG5cbiAgICAvLyBjb21wYXJlIG51bWVyYWwgb2JqZWN0XG4gICAgbnVtZXJhbC5pc051bWVyYWwgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIE51bWVyYWw7XG4gICAgfTtcblxuICAgIC8vIGhlbHBlciBmdW5jdGlvbnNcbiAgICBudW1lcmFsLl8gPSBfID0ge1xuICAgICAgICAvLyBmb3JtYXRzIG51bWJlcnMgc2VwYXJhdG9ycywgZGVjaW1hbHMgcGxhY2VzLCBzaWducywgYWJicmV2aWF0aW9uc1xuICAgICAgICBudW1iZXJUb0Zvcm1hdDogZnVuY3Rpb24odmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbikge1xuICAgICAgICAgICAgdmFyIGxvY2FsZSA9IGxvY2FsZXNbbnVtZXJhbC5vcHRpb25zLmN1cnJlbnRMb2NhbGVdLFxuICAgICAgICAgICAgICAgIG5lZ1AgPSBmYWxzZSxcbiAgICAgICAgICAgICAgICBvcHREZWMgPSBmYWxzZSxcbiAgICAgICAgICAgICAgICBsZWFkaW5nQ291bnQgPSAwLFxuICAgICAgICAgICAgICAgIGFiYnIgPSAnJyxcbiAgICAgICAgICAgICAgICB0cmlsbGlvbiA9IDEwMDAwMDAwMDAwMDAsXG4gICAgICAgICAgICAgICAgYmlsbGlvbiA9IDEwMDAwMDAwMDAsXG4gICAgICAgICAgICAgICAgbWlsbGlvbiA9IDEwMDAwMDAsXG4gICAgICAgICAgICAgICAgdGhvdXNhbmQgPSAxMDAwLFxuICAgICAgICAgICAgICAgIGRlY2ltYWwgPSAnJyxcbiAgICAgICAgICAgICAgICBuZWcgPSBmYWxzZSxcbiAgICAgICAgICAgICAgICBhYmJyRm9yY2UsIC8vIGZvcmNlIGFiYnJldmlhdGlvblxuICAgICAgICAgICAgICAgIGFicyxcbiAgICAgICAgICAgICAgICBtaW4sXG4gICAgICAgICAgICAgICAgbWF4LFxuICAgICAgICAgICAgICAgIHBvd2VyLFxuICAgICAgICAgICAgICAgIGludCxcbiAgICAgICAgICAgICAgICBwcmVjaXNpb24sXG4gICAgICAgICAgICAgICAgc2lnbmVkLFxuICAgICAgICAgICAgICAgIHRob3VzYW5kcyxcbiAgICAgICAgICAgICAgICBvdXRwdXQ7XG5cbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBuZXZlciBmb3JtYXQgYSBudWxsIHZhbHVlXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlIHx8IDA7XG5cbiAgICAgICAgICAgIGFicyA9IE1hdGguYWJzKHZhbHVlKTtcblxuICAgICAgICAgICAgLy8gc2VlIGlmIHdlIHNob3VsZCB1c2UgcGFyZW50aGVzZXMgZm9yIG5lZ2F0aXZlIG51bWJlciBvciBpZiB3ZSBzaG91bGQgcHJlZml4IHdpdGggYSBzaWduXG4gICAgICAgICAgICAvLyBpZiBib3RoIGFyZSBwcmVzZW50IHdlIGRlZmF1bHQgdG8gcGFyZW50aGVzZXNcbiAgICAgICAgICAgIGlmIChudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnKCcpKSB7XG4gICAgICAgICAgICAgICAgbmVnUCA9IHRydWU7XG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoL1tcXCh8XFwpXS9nLCAnJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICcrJykgfHwgbnVtZXJhbC5fLmluY2x1ZGVzKGZvcm1hdCwgJy0nKSkge1xuICAgICAgICAgICAgICAgIHNpZ25lZCA9IG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICcrJykgPyBmb3JtYXQuaW5kZXhPZignKycpIDogdmFsdWUgPCAwID8gZm9ybWF0LmluZGV4T2YoJy0nKSA6IC0xO1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKC9bXFwrfFxcLV0vZywgJycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBzZWUgaWYgYWJicmV2aWF0aW9uIGlzIHdhbnRlZFxuICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICdhJykpIHtcbiAgICAgICAgICAgICAgICBhYmJyRm9yY2UgPSBmb3JtYXQubWF0Y2goL2Eoa3xtfGJ8dCk/Lyk7XG5cbiAgICAgICAgICAgICAgICBhYmJyRm9yY2UgPSBhYmJyRm9yY2UgPyBhYmJyRm9yY2VbMV0gOiBmYWxzZTtcblxuICAgICAgICAgICAgICAgIC8vIGNoZWNrIGZvciBzcGFjZSBiZWZvcmUgYWJicmV2aWF0aW9uXG4gICAgICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICcgYScpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFiYnIgPSAnICc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UobmV3IFJlZ0V4cChhYmJyICsgJ2Fba21idF0/JyksICcnKTtcblxuICAgICAgICAgICAgICAgIGlmIChhYnMgPj0gdHJpbGxpb24gJiYgIWFiYnJGb3JjZSB8fCBhYmJyRm9yY2UgPT09ICd0Jykge1xuICAgICAgICAgICAgICAgICAgICAvLyB0cmlsbGlvblxuICAgICAgICAgICAgICAgICAgICBhYmJyICs9IGxvY2FsZS5hYmJyZXZpYXRpb25zLnRyaWxsaW9uO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlIC8gdHJpbGxpb247XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhYnMgPCB0cmlsbGlvbiAmJiBhYnMgPj0gYmlsbGlvbiAmJiAhYWJickZvcmNlIHx8IGFiYnJGb3JjZSA9PT0gJ2InKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGJpbGxpb25cbiAgICAgICAgICAgICAgICAgICAgYWJiciArPSBsb2NhbGUuYWJicmV2aWF0aW9ucy5iaWxsaW9uO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlIC8gYmlsbGlvbjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFicyA8IGJpbGxpb24gJiYgYWJzID49IG1pbGxpb24gJiYgIWFiYnJGb3JjZSB8fCBhYmJyRm9yY2UgPT09ICdtJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBtaWxsaW9uXG4gICAgICAgICAgICAgICAgICAgIGFiYnIgKz0gbG9jYWxlLmFiYnJldmlhdGlvbnMubWlsbGlvbjtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSAvIG1pbGxpb247XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhYnMgPCBtaWxsaW9uICYmIGFicyA+PSB0aG91c2FuZCAmJiAhYWJickZvcmNlIHx8IGFiYnJGb3JjZSA9PT0gJ2snKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRob3VzYW5kXG4gICAgICAgICAgICAgICAgICAgIGFiYnIgKz0gbG9jYWxlLmFiYnJldmlhdGlvbnMudGhvdXNhbmQ7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgLyB0aG91c2FuZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNoZWNrIGZvciBvcHRpb25hbCBkZWNpbWFsc1xuICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICdbLl0nKSkge1xuICAgICAgICAgICAgICAgIG9wdERlYyA9IHRydWU7XG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoJ1suXScsICcuJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJyZWFrIG51bWJlciBhbmQgZm9ybWF0XG4gICAgICAgICAgICBpbnQgPSB2YWx1ZS50b1N0cmluZygpLnNwbGl0KCcuJylbMF07XG4gICAgICAgICAgICBwcmVjaXNpb24gPSBmb3JtYXQuc3BsaXQoJy4nKVsxXTtcbiAgICAgICAgICAgIHRob3VzYW5kcyA9IGZvcm1hdC5pbmRleE9mKCcsJyk7XG4gICAgICAgICAgICBsZWFkaW5nQ291bnQgPSAoZm9ybWF0LnNwbGl0KCcuJylbMF0uc3BsaXQoJywnKVswXS5tYXRjaCgvMC9nKSB8fCBbXSkubGVuZ3RoO1xuXG4gICAgICAgICAgICBpZiAocHJlY2lzaW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhwcmVjaXNpb24sICdbJykpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uID0gcHJlY2lzaW9uLnJlcGxhY2UoJ10nLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbiA9IHByZWNpc2lvbi5zcGxpdCgnWycpO1xuICAgICAgICAgICAgICAgICAgICBkZWNpbWFsID0gbnVtZXJhbC5fLnRvRml4ZWQodmFsdWUsIChwcmVjaXNpb25bMF0ubGVuZ3RoICsgcHJlY2lzaW9uWzFdLmxlbmd0aCksIHJvdW5kaW5nRnVuY3Rpb24sIHByZWNpc2lvblsxXS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRlY2ltYWwgPSBudW1lcmFsLl8udG9GaXhlZCh2YWx1ZSwgcHJlY2lzaW9uLmxlbmd0aCwgcm91bmRpbmdGdW5jdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaW50ID0gZGVjaW1hbC5zcGxpdCgnLicpWzBdO1xuXG4gICAgICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhkZWNpbWFsLCAnLicpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlY2ltYWwgPSBsb2NhbGUuZGVsaW1pdGVycy5kZWNpbWFsICsgZGVjaW1hbC5zcGxpdCgnLicpWzFdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRlY2ltYWwgPSAnJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAob3B0RGVjICYmIE51bWJlcihkZWNpbWFsLnNsaWNlKDEpKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBkZWNpbWFsID0gJyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbnQgPSBudW1lcmFsLl8udG9GaXhlZCh2YWx1ZSwgMCwgcm91bmRpbmdGdW5jdGlvbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNoZWNrIGFiYnJldmlhdGlvbiBhZ2FpbiBhZnRlciByb3VuZGluZ1xuICAgICAgICAgICAgaWYgKGFiYnIgJiYgIWFiYnJGb3JjZSAmJiBOdW1iZXIoaW50KSA+PSAxMDAwICYmIGFiYnIgIT09IGxvY2FsZS5hYmJyZXZpYXRpb25zLnRyaWxsaW9uKSB7XG4gICAgICAgICAgICAgICAgaW50ID0gU3RyaW5nKE51bWJlcihpbnQpIC8gMTAwMCk7XG5cbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGFiYnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBsb2NhbGUuYWJicmV2aWF0aW9ucy50aG91c2FuZDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFiYnIgPSBsb2NhbGUuYWJicmV2aWF0aW9ucy5taWxsaW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgbG9jYWxlLmFiYnJldmlhdGlvbnMubWlsbGlvbjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFiYnIgPSBsb2NhbGUuYWJicmV2aWF0aW9ucy5iaWxsaW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgbG9jYWxlLmFiYnJldmlhdGlvbnMuYmlsbGlvbjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFiYnIgPSBsb2NhbGUuYWJicmV2aWF0aW9ucy50cmlsbGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAvLyBmb3JtYXQgbnVtYmVyXG4gICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKGludCwgJy0nKSkge1xuICAgICAgICAgICAgICAgIGludCA9IGludC5zbGljZSgxKTtcbiAgICAgICAgICAgICAgICBuZWcgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaW50Lmxlbmd0aCA8IGxlYWRpbmdDb3VudCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBsZWFkaW5nQ291bnQgLSBpbnQubGVuZ3RoOyBpID4gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgIGludCA9ICcwJyArIGludDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aG91c2FuZHMgPiAtMSkge1xuICAgICAgICAgICAgICAgIGludCA9IGludC50b1N0cmluZygpLnJlcGxhY2UoLyhcXGQpKD89KFxcZHszfSkrKD8hXFxkKSkvZywgJyQxJyArIGxvY2FsZS5kZWxpbWl0ZXJzLnRob3VzYW5kcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmb3JtYXQuaW5kZXhPZignLicpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaW50ID0gJyc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG91dHB1dCA9IGludCArIGRlY2ltYWwgKyAoYWJiciA/IGFiYnIgOiAnJyk7XG5cbiAgICAgICAgICAgIGlmIChuZWdQKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKG5lZ1AgJiYgbmVnID8gJygnIDogJycpICsgb3V0cHV0ICsgKG5lZ1AgJiYgbmVnID8gJyknIDogJycpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoc2lnbmVkID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gc2lnbmVkID09PSAwID8gKG5lZyA/ICctJyA6ICcrJykgKyBvdXRwdXQgOiBvdXRwdXQgKyAobmVnID8gJy0nIDogJysnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5lZykge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAnLScgKyBvdXRwdXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICAvLyB1bmZvcm1hdHMgbnVtYmVycyBzZXBhcmF0b3JzLCBkZWNpbWFscyBwbGFjZXMsIHNpZ25zLCBhYmJyZXZpYXRpb25zXG4gICAgICAgIHN0cmluZ1RvTnVtYmVyOiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgICAgICAgIHZhciBsb2NhbGUgPSBsb2NhbGVzW29wdGlvbnMuY3VycmVudExvY2FsZV0sXG4gICAgICAgICAgICAgICAgc3RyaW5nT3JpZ2luYWwgPSBzdHJpbmcsXG4gICAgICAgICAgICAgICAgYWJicmV2aWF0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgdGhvdXNhbmQ6IDMsXG4gICAgICAgICAgICAgICAgICAgIG1pbGxpb246IDYsXG4gICAgICAgICAgICAgICAgICAgIGJpbGxpb246IDksXG4gICAgICAgICAgICAgICAgICAgIHRyaWxsaW9uOiAxMlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYWJicmV2aWF0aW9uLFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgcmVnZXhwO1xuXG4gICAgICAgICAgICBpZiAob3B0aW9ucy56ZXJvRm9ybWF0ICYmIHN0cmluZyA9PT0gb3B0aW9ucy56ZXJvRm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSAwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLm51bGxGb3JtYXQgJiYgc3RyaW5nID09PSBvcHRpb25zLm51bGxGb3JtYXQgfHwgIXN0cmluZy5yZXBsYWNlKC9bXjAtOV0rL2csICcnKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gMTtcblxuICAgICAgICAgICAgICAgIGlmIChsb2NhbGUuZGVsaW1pdGVycy5kZWNpbWFsICE9PSAnLicpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoL1xcLi9nLCAnJykucmVwbGFjZShsb2NhbGUuZGVsaW1pdGVycy5kZWNpbWFsLCAnLicpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZvciAoYWJicmV2aWF0aW9uIGluIGFiYnJldmlhdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVnZXhwID0gbmV3IFJlZ0V4cCgnW15hLXpBLVpdJyArIGxvY2FsZS5hYmJyZXZpYXRpb25zW2FiYnJldmlhdGlvbl0gKyAnKD86XFxcXCl8KFxcXFwnICsgbG9jYWxlLmN1cnJlbmN5LnN5bWJvbCArICcpPyg/OlxcXFwpKT8pPyQnKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaW5nT3JpZ2luYWwubWF0Y2gocmVnZXhwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgKj0gTWF0aC5wb3coMTAsIGFiYnJldmlhdGlvbnNbYWJicmV2aWF0aW9uXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGNoZWNrIGZvciBuZWdhdGl2ZSBudW1iZXJcbiAgICAgICAgICAgICAgICB2YWx1ZSAqPSAoc3RyaW5nLnNwbGl0KCctJykubGVuZ3RoICsgTWF0aC5taW4oc3RyaW5nLnNwbGl0KCcoJykubGVuZ3RoIC0gMSwgc3RyaW5nLnNwbGl0KCcpJykubGVuZ3RoIC0gMSkpICUgMiA/IDEgOiAtMTtcblxuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBub24gbnVtYmVyc1xuICAgICAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKC9bXjAtOVxcLl0rL2csICcnKTtcblxuICAgICAgICAgICAgICAgIHZhbHVlICo9IE51bWJlcihzdHJpbmcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGlzTmFOOiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgaXNOYU4odmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBpbmNsdWRlczogZnVuY3Rpb24oc3RyaW5nLCBzZWFyY2gpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcuaW5kZXhPZihzZWFyY2gpICE9PSAtMTtcbiAgICAgICAgfSxcbiAgICAgICAgaW5zZXJ0OiBmdW5jdGlvbihzdHJpbmcsIHN1YlN0cmluZywgc3RhcnQpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcuc2xpY2UoMCwgc3RhcnQpICsgc3ViU3RyaW5nICsgc3RyaW5nLnNsaWNlKHN0YXJ0KTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVkdWNlOiBmdW5jdGlvbihhcnJheSwgY2FsbGJhY2sgLyosIGluaXRpYWxWYWx1ZSovKSB7XG4gICAgICAgICAgICBpZiAodGhpcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5LnByb3RvdHlwZS5yZWR1Y2UgY2FsbGVkIG9uIG51bGwgb3IgdW5kZWZpbmVkJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGNhbGxiYWNrICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgdCA9IE9iamVjdChhcnJheSksXG4gICAgICAgICAgICAgICAgbGVuID0gdC5sZW5ndGggPj4+IDAsXG4gICAgICAgICAgICAgICAgayA9IDAsXG4gICAgICAgICAgICAgICAgdmFsdWU7XG5cbiAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBhcmd1bWVudHNbMl07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHdoaWxlIChrIDwgbGVuICYmICEoayBpbiB0KSkge1xuICAgICAgICAgICAgICAgICAgICBrKys7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGsgPj0gbGVuKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRbaysrXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoOyBrIDwgbGVuOyBrKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoayBpbiB0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gY2FsbGJhY2sodmFsdWUsIHRba10sIGssIHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbXB1dGVzIHRoZSBtdWx0aXBsaWVyIG5lY2Vzc2FyeSB0byBtYWtlIHggPj0gMSxcbiAgICAgICAgICogZWZmZWN0aXZlbHkgZWxpbWluYXRpbmcgbWlzY2FsY3VsYXRpb25zIGNhdXNlZCBieVxuICAgICAgICAgKiBmaW5pdGUgcHJlY2lzaW9uLlxuICAgICAgICAgKi9cbiAgICAgICAgbXVsdGlwbGllcjogZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHZhciBwYXJ0cyA9IHgudG9TdHJpbmcoKS5zcGxpdCgnLicpO1xuXG4gICAgICAgICAgICByZXR1cm4gcGFydHMubGVuZ3RoIDwgMiA/IDEgOiBNYXRoLnBvdygxMCwgcGFydHNbMV0ubGVuZ3RoKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgdmFyaWFibGUgbnVtYmVyIG9mIGFyZ3VtZW50cywgcmV0dXJucyB0aGUgbWF4aW11bVxuICAgICAgICAgKiBtdWx0aXBsaWVyIHRoYXQgbXVzdCBiZSB1c2VkIHRvIG5vcm1hbGl6ZSBhbiBvcGVyYXRpb24gaW52b2x2aW5nXG4gICAgICAgICAqIGFsbCBvZiB0aGVtLlxuICAgICAgICAgKi9cbiAgICAgICAgY29ycmVjdGlvbkZhY3RvcjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXG4gICAgICAgICAgICByZXR1cm4gYXJncy5yZWR1Y2UoZnVuY3Rpb24oYWNjdW0sIG5leHQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbW4gPSBfLm11bHRpcGxpZXIobmV4dCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjY3VtID4gbW4gPyBhY2N1bSA6IG1uO1xuICAgICAgICAgICAgfSwgMSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbXBsZW1lbnRhdGlvbiBvZiB0b0ZpeGVkKCkgdGhhdCB0cmVhdHMgZmxvYXRzIG1vcmUgbGlrZSBkZWNpbWFsc1xuICAgICAgICAgKlxuICAgICAgICAgKiBGaXhlcyBiaW5hcnkgcm91bmRpbmcgaXNzdWVzIChlZy4gKDAuNjE1KS50b0ZpeGVkKDIpID09PSAnMC42MScpIHRoYXQgcHJlc2VudFxuICAgICAgICAgKiBwcm9ibGVtcyBmb3IgYWNjb3VudGluZy0gYW5kIGZpbmFuY2UtcmVsYXRlZCBzb2Z0d2FyZS5cbiAgICAgICAgICovXG4gICAgICAgIHRvRml4ZWQ6IGZ1bmN0aW9uKHZhbHVlLCBtYXhEZWNpbWFscywgcm91bmRpbmdGdW5jdGlvbiwgb3B0aW9uYWxzKSB7XG4gICAgICAgICAgICB2YXIgc3BsaXRWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoJy4nKSxcbiAgICAgICAgICAgICAgICBtaW5EZWNpbWFscyA9IG1heERlY2ltYWxzIC0gKG9wdGlvbmFscyB8fCAwKSxcbiAgICAgICAgICAgICAgICBib3VuZGVkUHJlY2lzaW9uLFxuICAgICAgICAgICAgICAgIG9wdGlvbmFsc1JlZ0V4cCxcbiAgICAgICAgICAgICAgICBwb3dlcixcbiAgICAgICAgICAgICAgICBvdXRwdXQ7XG5cbiAgICAgICAgICAgIC8vIFVzZSB0aGUgc21hbGxlc3QgcHJlY2lzaW9uIHZhbHVlIHBvc3NpYmxlIHRvIGF2b2lkIGVycm9ycyBmcm9tIGZsb2F0aW5nIHBvaW50IHJlcHJlc2VudGF0aW9uXG4gICAgICAgICAgICBpZiAoc3BsaXRWYWx1ZS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgYm91bmRlZFByZWNpc2lvbiA9IE1hdGgubWluKE1hdGgubWF4KHNwbGl0VmFsdWVbMV0ubGVuZ3RoLCBtaW5EZWNpbWFscyksIG1heERlY2ltYWxzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGJvdW5kZWRQcmVjaXNpb24gPSBtaW5EZWNpbWFscztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcG93ZXIgPSBNYXRoLnBvdygxMCwgYm91bmRlZFByZWNpc2lvbik7XG5cbiAgICAgICAgICAgIC8vIE11bHRpcGx5IHVwIGJ5IHByZWNpc2lvbiwgcm91bmQgYWNjdXJhdGVseSwgdGhlbiBkaXZpZGUgYW5kIHVzZSBuYXRpdmUgdG9GaXhlZCgpOlxuICAgICAgICAgICAgb3V0cHV0ID0gKHJvdW5kaW5nRnVuY3Rpb24odmFsdWUgKyAnZSsnICsgYm91bmRlZFByZWNpc2lvbikgLyBwb3dlcikudG9GaXhlZChib3VuZGVkUHJlY2lzaW9uKTtcblxuICAgICAgICAgICAgaWYgKG9wdGlvbmFscyA+IG1heERlY2ltYWxzIC0gYm91bmRlZFByZWNpc2lvbikge1xuICAgICAgICAgICAgICAgIG9wdGlvbmFsc1JlZ0V4cCA9IG5ldyBSZWdFeHAoJ1xcXFwuPzB7MSwnICsgKG9wdGlvbmFscyAtIChtYXhEZWNpbWFscyAtIGJvdW5kZWRQcmVjaXNpb24pKSArICd9JCcpO1xuICAgICAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dC5yZXBsYWNlKG9wdGlvbmFsc1JlZ0V4cCwgJycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8vIGF2YWxpYWJsZSBvcHRpb25zXG4gICAgbnVtZXJhbC5vcHRpb25zID0gb3B0aW9ucztcblxuICAgIC8vIGF2YWxpYWJsZSBmb3JtYXRzXG4gICAgbnVtZXJhbC5mb3JtYXRzID0gZm9ybWF0cztcblxuICAgIC8vIGF2YWxpYWJsZSBmb3JtYXRzXG4gICAgbnVtZXJhbC5sb2NhbGVzID0gbG9jYWxlcztcblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgY3VycmVudCBsb2NhbGUuICBJZlxuICAgIC8vIG5vIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGluLCBpdCB3aWxsIHNpbXBseSByZXR1cm4gdGhlIGN1cnJlbnQgZ2xvYmFsXG4gICAgLy8gbG9jYWxlIGtleS5cbiAgICBudW1lcmFsLmxvY2FsZSA9IGZ1bmN0aW9uKGtleSkge1xuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICBvcHRpb25zLmN1cnJlbnRMb2NhbGUgPSBrZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvcHRpb25zLmN1cnJlbnRMb2NhbGU7XG4gICAgfTtcblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBsb2FkZWQgbG9jYWxlIGRhdGEuICBJZlxuICAgIC8vIG5vIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGluLCBpdCB3aWxsIHNpbXBseSByZXR1cm4gdGhlIGN1cnJlbnRcbiAgICAvLyBnbG9iYWwgbG9jYWxlIG9iamVjdC5cbiAgICBudW1lcmFsLmxvY2FsZURhdGEgPSBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgaWYgKCFrZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbGVzW29wdGlvbnMuY3VycmVudExvY2FsZV07XG4gICAgICAgIH1cblxuICAgICAgICBrZXkgPSBrZXkudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICBpZiAoIWxvY2FsZXNba2V5XSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGxvY2FsZSA6ICcgKyBrZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxvY2FsZXNba2V5XTtcbiAgICB9O1xuXG4gICAgbnVtZXJhbC5yZXNldCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkZWZhdWx0cykge1xuICAgICAgICAgICAgb3B0aW9uc1twcm9wZXJ0eV0gPSBkZWZhdWx0c1twcm9wZXJ0eV07XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgbnVtZXJhbC56ZXJvRm9ybWF0ID0gZnVuY3Rpb24oZm9ybWF0KSB7XG4gICAgICAgIG9wdGlvbnMuemVyb0Zvcm1hdCA9IHR5cGVvZihmb3JtYXQpID09PSAnc3RyaW5nJyA/IGZvcm1hdCA6IG51bGw7XG4gICAgfTtcblxuICAgIG51bWVyYWwubnVsbEZvcm1hdCA9IGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgb3B0aW9ucy5udWxsRm9ybWF0ID0gdHlwZW9mKGZvcm1hdCkgPT09ICdzdHJpbmcnID8gZm9ybWF0IDogbnVsbDtcbiAgICB9O1xuXG4gICAgbnVtZXJhbC5kZWZhdWx0Rm9ybWF0ID0gZnVuY3Rpb24oZm9ybWF0KSB7XG4gICAgICAgIG9wdGlvbnMuZGVmYXVsdEZvcm1hdCA9IHR5cGVvZihmb3JtYXQpID09PSAnc3RyaW5nJyA/IGZvcm1hdCA6ICcwLjAnO1xuICAgIH07XG5cbiAgICBudW1lcmFsLnJlZ2lzdGVyID0gZnVuY3Rpb24odHlwZSwgbmFtZSwgZm9ybWF0KSB7XG4gICAgICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgaWYgKHRoaXNbdHlwZSArICdzJ11bbmFtZV0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IobmFtZSArICcgJyArIHR5cGUgKyAnIGFscmVhZHkgcmVnaXN0ZXJlZC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXNbdHlwZSArICdzJ11bbmFtZV0gPSBmb3JtYXQ7XG5cbiAgICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICB9O1xuXG5cbiAgICBudW1lcmFsLnZhbGlkYXRlID0gZnVuY3Rpb24odmFsLCBjdWx0dXJlKSB7XG4gICAgICAgIHZhciBfZGVjaW1hbFNlcCxcbiAgICAgICAgICAgIF90aG91c2FuZFNlcCxcbiAgICAgICAgICAgIF9jdXJyU3ltYm9sLFxuICAgICAgICAgICAgX3ZhbEFycmF5LFxuICAgICAgICAgICAgX2FiYnJPYmosXG4gICAgICAgICAgICBfdGhvdXNhbmRSZWdFeCxcbiAgICAgICAgICAgIGxvY2FsZURhdGEsXG4gICAgICAgICAgICB0ZW1wO1xuXG4gICAgICAgIC8vY29lcmNlIHZhbCB0byBzdHJpbmdcbiAgICAgICAgaWYgKHR5cGVvZiB2YWwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB2YWwgKz0gJyc7XG5cbiAgICAgICAgICAgIGlmIChjb25zb2xlLndhcm4pIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ051bWVyYWwuanM6IFZhbHVlIGlzIG5vdCBzdHJpbmcuIEl0IGhhcyBiZWVuIGNvLWVyY2VkIHRvOiAnLCB2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy90cmltIHdoaXRlc3BhY2VzIGZyb20gZWl0aGVyIHNpZGVzXG4gICAgICAgIHZhbCA9IHZhbC50cmltKCk7XG5cbiAgICAgICAgLy9pZiB2YWwgaXMganVzdCBkaWdpdHMgcmV0dXJuIHRydWVcbiAgICAgICAgaWYgKCEhdmFsLm1hdGNoKC9eXFxkKyQvKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvL2lmIHZhbCBpcyBlbXB0eSByZXR1cm4gZmFsc2VcbiAgICAgICAgaWYgKHZhbCA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vZ2V0IHRoZSBkZWNpbWFsIGFuZCB0aG91c2FuZHMgc2VwYXJhdG9yIGZyb20gbnVtZXJhbC5sb2NhbGVEYXRhXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvL2NoZWNrIGlmIHRoZSBjdWx0dXJlIGlzIHVuZGVyc3Rvb2QgYnkgbnVtZXJhbC4gaWYgbm90LCBkZWZhdWx0IGl0IHRvIGN1cnJlbnQgbG9jYWxlXG4gICAgICAgICAgICBsb2NhbGVEYXRhID0gbnVtZXJhbC5sb2NhbGVEYXRhKGN1bHR1cmUpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBsb2NhbGVEYXRhID0gbnVtZXJhbC5sb2NhbGVEYXRhKG51bWVyYWwubG9jYWxlKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9zZXR1cCB0aGUgZGVsaW1pdGVycyBhbmQgY3VycmVuY3kgc3ltYm9sIGJhc2VkIG9uIGN1bHR1cmUvbG9jYWxlXG4gICAgICAgIF9jdXJyU3ltYm9sID0gbG9jYWxlRGF0YS5jdXJyZW5jeS5zeW1ib2w7XG4gICAgICAgIF9hYmJyT2JqID0gbG9jYWxlRGF0YS5hYmJyZXZpYXRpb25zO1xuICAgICAgICBfZGVjaW1hbFNlcCA9IGxvY2FsZURhdGEuZGVsaW1pdGVycy5kZWNpbWFsO1xuICAgICAgICBpZiAobG9jYWxlRGF0YS5kZWxpbWl0ZXJzLnRob3VzYW5kcyA9PT0gJy4nKSB7XG4gICAgICAgICAgICBfdGhvdXNhbmRTZXAgPSAnXFxcXC4nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgX3Rob3VzYW5kU2VwID0gbG9jYWxlRGF0YS5kZWxpbWl0ZXJzLnRob3VzYW5kcztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHZhbGlkYXRpbmcgY3VycmVuY3kgc3ltYm9sXG4gICAgICAgIHRlbXAgPSB2YWwubWF0Y2goL15bXlxcZF0rLyk7XG4gICAgICAgIGlmICh0ZW1wICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YWwgPSB2YWwuc3Vic3RyKDEpO1xuICAgICAgICAgICAgaWYgKHRlbXBbMF0gIT09IF9jdXJyU3ltYm9sKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy92YWxpZGF0aW5nIGFiYnJldmlhdGlvbiBzeW1ib2xcbiAgICAgICAgdGVtcCA9IHZhbC5tYXRjaCgvW15cXGRdKyQvKTtcbiAgICAgICAgaWYgKHRlbXAgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhbCA9IHZhbC5zbGljZSgwLCAtMSk7XG4gICAgICAgICAgICBpZiAodGVtcFswXSAhPT0gX2FiYnJPYmoudGhvdXNhbmQgJiYgdGVtcFswXSAhPT0gX2FiYnJPYmoubWlsbGlvbiAmJiB0ZW1wWzBdICE9PSBfYWJick9iai5iaWxsaW9uICYmIHRlbXBbMF0gIT09IF9hYmJyT2JqLnRyaWxsaW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgX3Rob3VzYW5kUmVnRXggPSBuZXcgUmVnRXhwKF90aG91c2FuZFNlcCArICd7Mn0nKTtcblxuICAgICAgICBpZiAoIXZhbC5tYXRjaCgvW15cXGQuLF0vZykpIHtcbiAgICAgICAgICAgIF92YWxBcnJheSA9IHZhbC5zcGxpdChfZGVjaW1hbFNlcCk7XG4gICAgICAgICAgICBpZiAoX3ZhbEFycmF5Lmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChfdmFsQXJyYXkubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCAhISBfdmFsQXJyYXlbMF0ubWF0Y2goL15cXGQrLipcXGQkLykgJiYgIV92YWxBcnJheVswXS5tYXRjaChfdGhvdXNhbmRSZWdFeCkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfdmFsQXJyYXlbMF0ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCAhISBfdmFsQXJyYXlbMF0ubWF0Y2goL15cXGQrJC8pICYmICFfdmFsQXJyYXlbMF0ubWF0Y2goX3Rob3VzYW5kUmVnRXgpICYmICEhIF92YWxBcnJheVsxXS5tYXRjaCgvXlxcZCskLykpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICggISEgX3ZhbEFycmF5WzBdLm1hdGNoKC9eXFxkKy4qXFxkJC8pICYmICFfdmFsQXJyYXlbMF0ubWF0Y2goX3Rob3VzYW5kUmVnRXgpICYmICEhIF92YWxBcnJheVsxXS5tYXRjaCgvXlxcZCskLykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgTnVtZXJhbCBQcm90b3R5cGVcbiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICBudW1lcmFsLmZuID0gTnVtZXJhbC5wcm90b3R5cGUgPSB7XG4gICAgICAgIGNsb25lOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1lcmFsKHRoaXMpO1xuICAgICAgICB9LFxuICAgICAgICBmb3JtYXQ6IGZ1bmN0aW9uKGlucHV0U3RyaW5nLCByb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLl92YWx1ZSxcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSBpbnB1dFN0cmluZyB8fCBvcHRpb25zLmRlZmF1bHRGb3JtYXQsXG4gICAgICAgICAgICAgICAga2luZCxcbiAgICAgICAgICAgICAgICBvdXRwdXQsXG4gICAgICAgICAgICAgICAgZm9ybWF0RnVuY3Rpb247XG5cbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgcm91bmRpbmdGdW5jdGlvblxuICAgICAgICAgICAgcm91bmRpbmdGdW5jdGlvbiA9IHJvdW5kaW5nRnVuY3Rpb24gfHwgTWF0aC5yb3VuZDtcblxuICAgICAgICAgICAgLy8gZm9ybWF0IGJhc2VkIG9uIHZhbHVlXG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IDAgJiYgb3B0aW9ucy56ZXJvRm9ybWF0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gb3B0aW9ucy56ZXJvRm9ybWF0O1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gbnVsbCAmJiBvcHRpb25zLm51bGxGb3JtYXQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBvcHRpb25zLm51bGxGb3JtYXQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoa2luZCBpbiBmb3JtYXRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmb3JtYXQubWF0Y2goZm9ybWF0c1traW5kXS5yZWdleHBzLmZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdEZ1bmN0aW9uID0gZm9ybWF0c1traW5kXS5mb3JtYXQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZm9ybWF0RnVuY3Rpb24gPSBmb3JtYXRGdW5jdGlvbiB8fCBudW1lcmFsLl8ubnVtYmVyVG9Gb3JtYXQ7XG5cbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBmb3JtYXRGdW5jdGlvbih2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBpbnB1dDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gTnVtYmVyKHZhbHVlKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG4gICAgICAgIGFkZDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBjb3JyRmFjdG9yID0gXy5jb3JyZWN0aW9uRmFjdG9yLmNhbGwobnVsbCwgdGhpcy5fdmFsdWUsIHZhbHVlKTtcblxuICAgICAgICAgICAgZnVuY3Rpb24gY2JhY2soYWNjdW0sIGN1cnIsIGN1cnJJLCBPKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjY3VtICsgTWF0aC5yb3VuZChjb3JyRmFjdG9yICogY3Vycik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gXy5yZWR1Y2UoW3RoaXMuX3ZhbHVlLCB2YWx1ZV0sIGNiYWNrLCAwKSAvIGNvcnJGYWN0b3I7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuICAgICAgICBzdWJ0cmFjdDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBjb3JyRmFjdG9yID0gXy5jb3JyZWN0aW9uRmFjdG9yLmNhbGwobnVsbCwgdGhpcy5fdmFsdWUsIHZhbHVlKTtcblxuICAgICAgICAgICAgZnVuY3Rpb24gY2JhY2soYWNjdW0sIGN1cnIsIGN1cnJJLCBPKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjY3VtIC0gTWF0aC5yb3VuZChjb3JyRmFjdG9yICogY3Vycik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gXy5yZWR1Y2UoW3ZhbHVlXSwgY2JhY2ssIE1hdGgucm91bmQodGhpcy5fdmFsdWUgKiBjb3JyRmFjdG9yKSkgLyBjb3JyRmFjdG9yO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcbiAgICAgICAgbXVsdGlwbHk6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBjYmFjayhhY2N1bSwgY3VyciwgY3VyckksIE8pIHtcbiAgICAgICAgICAgICAgICB2YXIgY29yckZhY3RvciA9IF8uY29ycmVjdGlvbkZhY3RvcihhY2N1bSwgY3Vycik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoYWNjdW0gKiBjb3JyRmFjdG9yKSAqIE1hdGgucm91bmQoY3VyciAqIGNvcnJGYWN0b3IpIC8gTWF0aC5yb3VuZChjb3JyRmFjdG9yICogY29yckZhY3Rvcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gXy5yZWR1Y2UoW3RoaXMuX3ZhbHVlLCB2YWx1ZV0sIGNiYWNrLCAxKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG4gICAgICAgIGRpdmlkZTogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGNiYWNrKGFjY3VtLCBjdXJyLCBjdXJySSwgTykge1xuICAgICAgICAgICAgICAgIHZhciBjb3JyRmFjdG9yID0gXy5jb3JyZWN0aW9uRmFjdG9yKGFjY3VtLCBjdXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChhY2N1bSAqIGNvcnJGYWN0b3IpIC8gTWF0aC5yb3VuZChjdXJyICogY29yckZhY3Rvcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gXy5yZWR1Y2UoW3RoaXMuX3ZhbHVlLCB2YWx1ZV0sIGNiYWNrKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG4gICAgICAgIGRpZmZlcmVuY2U6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5hYnMobnVtZXJhbCh0aGlzLl92YWx1ZSkuc3VidHJhY3QodmFsdWUpLnZhbHVlKCkpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgRGVmYXVsdCBMb2NhbGUgJiYgRm9ybWF0XG4gICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgbnVtZXJhbC5yZWdpc3RlcignbG9jYWxlJywgJ2VuJywge1xuICAgICAgICBkZWxpbWl0ZXJzOiB7XG4gICAgICAgICAgICB0aG91c2FuZHM6ICcsJyxcbiAgICAgICAgICAgIGRlY2ltYWw6ICcuJ1xuICAgICAgICB9LFxuICAgICAgICBhYmJyZXZpYXRpb25zOiB7XG4gICAgICAgICAgICB0aG91c2FuZDogJ2snLFxuICAgICAgICAgICAgbWlsbGlvbjogJ20nLFxuICAgICAgICAgICAgYmlsbGlvbjogJ2InLFxuICAgICAgICAgICAgdHJpbGxpb246ICd0J1xuICAgICAgICB9LFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbihudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyICUgMTA7XG4gICAgICAgICAgICByZXR1cm4gKH5+KG51bWJlciAlIDEwMCAvIDEwKSA9PT0gMSkgPyAndGgnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMSkgPyAnc3QnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMikgPyAnbmQnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMykgPyAncmQnIDogJ3RoJztcbiAgICAgICAgfSxcbiAgICAgICAgY3VycmVuY3k6IHtcbiAgICAgICAgICAgIHN5bWJvbDogJyQnXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIFxuXG4oZnVuY3Rpb24oKSB7XG4gICAgICAgIG51bWVyYWwucmVnaXN0ZXIoJ2Zvcm1hdCcsICdicHMnLCB7XG4gICAgICAgICAgICByZWdleHBzOiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiAvKEJQUykvLFxuICAgICAgICAgICAgICAgIHVuZm9ybWF0OiAvKEJQUykvXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZm9ybWF0OiBmdW5jdGlvbih2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICAgICAgdmFyIHNwYWNlID0gbnVtZXJhbC5fLmluY2x1ZGVzKGZvcm1hdCwgJyBCUFMnKSA/ICcgJyA6ICcnLFxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQ7XG5cbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlICogMTAwMDA7XG5cbiAgICAgICAgICAgICAgICAvLyBjaGVjayBmb3Igc3BhY2UgYmVmb3JlIEJQU1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKC9cXHM/QlBTLywgJycpO1xuXG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbnVtZXJhbC5fLm51bWJlclRvRm9ybWF0KHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pO1xuXG4gICAgICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhvdXRwdXQsICcpJykpIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0LnNwbGl0KCcnKTtcblxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQuc3BsaWNlKC0xLCAwLCBzcGFjZSArICdCUFMnKTtcblxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQuam9pbignJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0ICsgc3BhY2UgKyAnQlBTJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuZm9ybWF0OiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKyhudW1lcmFsLl8uc3RyaW5nVG9OdW1iZXIoc3RyaW5nKSAqIDAuMDAwMSkudG9GaXhlZCgxNSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xufSkoKTtcblxuXG4oZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBkZWNpbWFsID0ge1xuICAgICAgICAgICAgYmFzZTogMTAwMCxcbiAgICAgICAgICAgIHN1ZmZpeGVzOiBbJ0InLCAnS0InLCAnTUInLCAnR0InLCAnVEInLCAnUEInLCAnRUInLCAnWkInLCAnWUInXVxuICAgICAgICB9LFxuICAgICAgICBiaW5hcnkgPSB7XG4gICAgICAgICAgICBiYXNlOiAxMDI0LFxuICAgICAgICAgICAgc3VmZml4ZXM6IFsnQicsICdLaUInLCAnTWlCJywgJ0dpQicsICdUaUInLCAnUGlCJywgJ0VpQicsICdaaUInLCAnWWlCJ11cbiAgICAgICAgfTtcblxuICAgIHZhciBhbGxTdWZmaXhlcyA9ICBkZWNpbWFsLnN1ZmZpeGVzLmNvbmNhdChiaW5hcnkuc3VmZml4ZXMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVjaW1hbC5zdWZmaXhlcy5pbmRleE9mKGl0ZW0pIDwgMDtcbiAgICAgICAgfSkpO1xuICAgICAgICB2YXIgdW5mb3JtYXRSZWdleCA9IGFsbFN1ZmZpeGVzLmpvaW4oJ3wnKTtcbiAgICAgICAgLy8gQWxsb3cgc3VwcG9ydCBmb3IgQlBTIChodHRwOi8vd3d3LmludmVzdG9wZWRpYS5jb20vdGVybXMvYi9iYXNpc3BvaW50LmFzcClcbiAgICAgICAgdW5mb3JtYXRSZWdleCA9ICcoJyArIHVuZm9ybWF0UmVnZXgucmVwbGFjZSgnQicsICdCKD8hUFMpJykgKyAnKSc7XG5cbiAgICBudW1lcmFsLnJlZ2lzdGVyKCdmb3JtYXQnLCAnYnl0ZXMnLCB7XG4gICAgICAgIHJlZ2V4cHM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogLyhbMFxcc11pP2IpLyxcbiAgICAgICAgICAgIHVuZm9ybWF0OiBuZXcgUmVnRXhwKHVuZm9ybWF0UmVnZXgpXG4gICAgICAgIH0sXG4gICAgICAgIGZvcm1hdDogZnVuY3Rpb24odmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbikge1xuICAgICAgICAgICAgdmFyIG91dHB1dCxcbiAgICAgICAgICAgICAgICBieXRlcyA9IG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICdpYicpID8gYmluYXJ5IDogZGVjaW1hbCxcbiAgICAgICAgICAgICAgICBzdWZmaXggPSBudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnIGInKSB8fCBudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnIGliJykgPyAnICcgOiAnJyxcbiAgICAgICAgICAgICAgICBwb3dlcixcbiAgICAgICAgICAgICAgICBtaW4sXG4gICAgICAgICAgICAgICAgbWF4O1xuXG4gICAgICAgICAgICAvLyBjaGVjayBmb3Igc3BhY2UgYmVmb3JlXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgvXFxzP2k/Yi8sICcnKTtcblxuICAgICAgICAgICAgZm9yIChwb3dlciA9IDA7IHBvd2VyIDw9IGJ5dGVzLnN1ZmZpeGVzLmxlbmd0aDsgcG93ZXIrKykge1xuICAgICAgICAgICAgICAgIG1pbiA9IE1hdGgucG93KGJ5dGVzLmJhc2UsIHBvd2VyKTtcbiAgICAgICAgICAgICAgICBtYXggPSBNYXRoLnBvdyhieXRlcy5iYXNlLCBwb3dlciArIDEpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSAwIHx8IHZhbHVlID49IG1pbiAmJiB2YWx1ZSA8IG1heCkge1xuICAgICAgICAgICAgICAgICAgICBzdWZmaXggKz0gYnl0ZXMuc3VmZml4ZXNbcG93ZXJdO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChtaW4gPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlIC8gbWluO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvdXRwdXQgPSBudW1lcmFsLl8ubnVtYmVyVG9Gb3JtYXQodmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbik7XG5cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQgKyBzdWZmaXg7XG4gICAgICAgIH0sXG4gICAgICAgIHVuZm9ybWF0OiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IG51bWVyYWwuXy5zdHJpbmdUb051bWJlcihzdHJpbmcpLFxuICAgICAgICAgICAgICAgIHBvd2VyLFxuICAgICAgICAgICAgICAgIGJ5dGVzTXVsdGlwbGllcjtcblxuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgZm9yIChwb3dlciA9IGRlY2ltYWwuc3VmZml4ZXMubGVuZ3RoIC0gMTsgcG93ZXIgPj0gMDsgcG93ZXItLSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKHN0cmluZywgZGVjaW1hbC5zdWZmaXhlc1twb3dlcl0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBieXRlc011bHRpcGxpZXIgPSBNYXRoLnBvdyhkZWNpbWFsLmJhc2UsIHBvd2VyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKHN0cmluZywgYmluYXJ5LnN1ZmZpeGVzW3Bvd2VyXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzTXVsdGlwbGllciA9IE1hdGgucG93KGJpbmFyeS5iYXNlLCBwb3dlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFsdWUgKj0gKGJ5dGVzTXVsdGlwbGllciB8fCAxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgfSk7XG59KSgpO1xuXG5cbihmdW5jdGlvbigpIHtcbiAgICAgICAgbnVtZXJhbC5yZWdpc3RlcignZm9ybWF0JywgJ2N1cnJlbmN5Jywge1xuICAgICAgICByZWdleHBzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6IC8oXFwkKS9cbiAgICAgICAgfSxcbiAgICAgICAgZm9ybWF0OiBmdW5jdGlvbih2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlID0gbnVtZXJhbC5sb2NhbGVzW251bWVyYWwub3B0aW9ucy5jdXJyZW50TG9jYWxlXSxcbiAgICAgICAgICAgICAgICBzeW1ib2xzID0ge1xuICAgICAgICAgICAgICAgICAgICBiZWZvcmU6IGZvcm1hdC5tYXRjaCgvXihbXFwrfFxcLXxcXCh8XFxzfFxcJF0qKS8pWzBdLFxuICAgICAgICAgICAgICAgICAgICBhZnRlcjogZm9ybWF0Lm1hdGNoKC8oW1xcK3xcXC18XFwpfFxcc3xcXCRdKikkLylbMF1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgICAgICBzeW1ib2wsXG4gICAgICAgICAgICAgICAgaTtcblxuICAgICAgICAgICAgLy8gc3RyaXAgZm9ybWF0IG9mIHNwYWNlcyBhbmQgJFxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoL1xccz9cXCRcXHM/LywgJycpO1xuXG4gICAgICAgICAgICAvLyBmb3JtYXQgdGhlIG51bWJlclxuICAgICAgICAgICAgb3V0cHV0ID0gbnVtZXJhbC5fLm51bWJlclRvRm9ybWF0KHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pO1xuXG4gICAgICAgICAgICAvLyB1cGRhdGUgdGhlIGJlZm9yZSBhbmQgYWZ0ZXIgYmFzZWQgb24gdmFsdWVcbiAgICAgICAgICAgIGlmICh2YWx1ZSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgc3ltYm9scy5iZWZvcmUgPSBzeW1ib2xzLmJlZm9yZS5yZXBsYWNlKC9bXFwtXFwoXS8sICcnKTtcbiAgICAgICAgICAgICAgICBzeW1ib2xzLmFmdGVyID0gc3ltYm9scy5hZnRlci5yZXBsYWNlKC9bXFwtXFwpXS8sICcnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPCAwICYmICghbnVtZXJhbC5fLmluY2x1ZGVzKHN5bWJvbHMuYmVmb3JlLCAnLScpICYmICFudW1lcmFsLl8uaW5jbHVkZXMoc3ltYm9scy5iZWZvcmUsICcoJykpKSB7XG4gICAgICAgICAgICAgICAgc3ltYm9scy5iZWZvcmUgPSAnLScgKyBzeW1ib2xzLmJlZm9yZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGVhY2ggYmVmb3JlIHN5bWJvbFxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHN5bWJvbHMuYmVmb3JlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgc3ltYm9sID0gc3ltYm9scy5iZWZvcmVbaV07XG5cbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHN5bWJvbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICckJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IG51bWVyYWwuXy5pbnNlcnQob3V0cHV0LCBsb2NhbGUuY3VycmVuY3kuc3ltYm9sLCBpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICcgJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IG51bWVyYWwuXy5pbnNlcnQob3V0cHV0LCAnICcsIGkgKyBsb2NhbGUuY3VycmVuY3kuc3ltYm9sLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBsb29wIHRocm91Z2ggZWFjaCBhZnRlciBzeW1ib2xcbiAgICAgICAgICAgIGZvciAoaSA9IHN5bWJvbHMuYWZ0ZXIubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBzeW1ib2wgPSBzeW1ib2xzLmFmdGVyW2ldO1xuXG4gICAgICAgICAgICAgICAgc3dpdGNoIChzeW1ib2wpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnJCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBpID09PSBzeW1ib2xzLmFmdGVyLmxlbmd0aCAtIDEgPyBvdXRwdXQgKyBsb2NhbGUuY3VycmVuY3kuc3ltYm9sIDogbnVtZXJhbC5fLmluc2VydChvdXRwdXQsIGxvY2FsZS5jdXJyZW5jeS5zeW1ib2wsIC0oc3ltYm9scy5hZnRlci5sZW5ndGggLSAoMSArIGkpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnICc6XG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBpID09PSBzeW1ib2xzLmFmdGVyLmxlbmd0aCAtIDEgPyBvdXRwdXQgKyAnICcgOiBudW1lcmFsLl8uaW5zZXJ0KG91dHB1dCwgJyAnLCAtKHN5bWJvbHMuYWZ0ZXIubGVuZ3RoIC0gKDEgKyBpKSArIGxvY2FsZS5jdXJyZW5jeS5zeW1ib2wubGVuZ3RoIC0gMSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH1cbiAgICB9KTtcbn0pKCk7XG5cblxuKGZ1bmN0aW9uKCkge1xuICAgICAgICBudW1lcmFsLnJlZ2lzdGVyKCdmb3JtYXQnLCAnZXhwb25lbnRpYWwnLCB7XG4gICAgICAgIHJlZ2V4cHM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogLyhlXFwrfGUtKS8sXG4gICAgICAgICAgICB1bmZvcm1hdDogLyhlXFwrfGUtKS9cbiAgICAgICAgfSxcbiAgICAgICAgZm9ybWF0OiBmdW5jdGlvbih2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICB2YXIgb3V0cHV0LFxuICAgICAgICAgICAgICAgIGV4cG9uZW50aWFsID0gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiAhbnVtZXJhbC5fLmlzTmFOKHZhbHVlKSA/IHZhbHVlLnRvRXhwb25lbnRpYWwoKSA6ICcwZSswJyxcbiAgICAgICAgICAgICAgICBwYXJ0cyA9IGV4cG9uZW50aWFsLnNwbGl0KCdlJyk7XG5cbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKC9lW1xcK3xcXC1dezF9MC8sICcnKTtcblxuICAgICAgICAgICAgb3V0cHV0ID0gbnVtZXJhbC5fLm51bWJlclRvRm9ybWF0KE51bWJlcihwYXJ0c1swXSksIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbik7XG5cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQgKyAnZScgKyBwYXJ0c1sxXTtcbiAgICAgICAgfSxcbiAgICAgICAgdW5mb3JtYXQ6IGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgICAgICAgdmFyIHBhcnRzID0gbnVtZXJhbC5fLmluY2x1ZGVzKHN0cmluZywgJ2UrJykgPyBzdHJpbmcuc3BsaXQoJ2UrJykgOiBzdHJpbmcuc3BsaXQoJ2UtJyksXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIocGFydHNbMF0pLFxuICAgICAgICAgICAgICAgIHBvd2VyID0gTnVtYmVyKHBhcnRzWzFdKTtcblxuICAgICAgICAgICAgcG93ZXIgPSBudW1lcmFsLl8uaW5jbHVkZXMoc3RyaW5nLCAnZS0nKSA/IHBvd2VyICo9IC0xIDogcG93ZXI7XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNiYWNrKGFjY3VtLCBjdXJyLCBjdXJySSwgTykge1xuICAgICAgICAgICAgICAgIHZhciBjb3JyRmFjdG9yID0gbnVtZXJhbC5fLmNvcnJlY3Rpb25GYWN0b3IoYWNjdW0sIGN1cnIpLFxuICAgICAgICAgICAgICAgICAgICBudW0gPSAoYWNjdW0gKiBjb3JyRmFjdG9yKSAqIChjdXJyICogY29yckZhY3RvcikgLyAoY29yckZhY3RvciAqIGNvcnJGYWN0b3IpO1xuICAgICAgICAgICAgICAgIHJldHVybiBudW07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBudW1lcmFsLl8ucmVkdWNlKFt2YWx1ZSwgTWF0aC5wb3coMTAsIHBvd2VyKV0sIGNiYWNrLCAxKTtcbiAgICAgICAgfVxuICAgIH0pO1xufSkoKTtcblxuXG4oZnVuY3Rpb24oKSB7XG4gICAgICAgIG51bWVyYWwucmVnaXN0ZXIoJ2Zvcm1hdCcsICdvcmRpbmFsJywge1xuICAgICAgICByZWdleHBzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6IC8obykvXG4gICAgICAgIH0sXG4gICAgICAgIGZvcm1hdDogZnVuY3Rpb24odmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbikge1xuICAgICAgICAgICAgdmFyIGxvY2FsZSA9IG51bWVyYWwubG9jYWxlc1tudW1lcmFsLm9wdGlvbnMuY3VycmVudExvY2FsZV0sXG4gICAgICAgICAgICAgICAgb3V0cHV0LFxuICAgICAgICAgICAgICAgIG9yZGluYWwgPSBudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnIG8nKSA/ICcgJyA6ICcnO1xuXG4gICAgICAgICAgICAvLyBjaGVjayBmb3Igc3BhY2UgYmVmb3JlXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgvXFxzP28vLCAnJyk7XG5cbiAgICAgICAgICAgIG9yZGluYWwgKz0gbG9jYWxlLm9yZGluYWwodmFsdWUpO1xuXG4gICAgICAgICAgICBvdXRwdXQgPSBudW1lcmFsLl8ubnVtYmVyVG9Gb3JtYXQodmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbik7XG5cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQgKyBvcmRpbmFsO1xuICAgICAgICB9XG4gICAgfSk7XG59KSgpO1xuXG5cbihmdW5jdGlvbigpIHtcbiAgICAgICAgbnVtZXJhbC5yZWdpc3RlcignZm9ybWF0JywgJ3BlcmNlbnRhZ2UnLCB7XG4gICAgICAgIHJlZ2V4cHM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogLyglKS8sXG4gICAgICAgICAgICB1bmZvcm1hdDogLyglKS9cbiAgICAgICAgfSxcbiAgICAgICAgZm9ybWF0OiBmdW5jdGlvbih2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICB2YXIgc3BhY2UgPSBudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnICUnKSA/ICcgJyA6ICcnLFxuICAgICAgICAgICAgICAgIG91dHB1dDtcblxuICAgICAgICAgICAgaWYgKG51bWVyYWwub3B0aW9ucy5zY2FsZVBlcmNlbnRCeTEwMCkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgKiAxMDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNoZWNrIGZvciBzcGFjZSBiZWZvcmUgJVxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoL1xccz9cXCUvLCAnJyk7XG5cbiAgICAgICAgICAgIG91dHB1dCA9IG51bWVyYWwuXy5udW1iZXJUb0Zvcm1hdCh2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKTtcblxuICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhvdXRwdXQsICcpJykpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQuc3BsaXQoJycpO1xuXG4gICAgICAgICAgICAgICAgb3V0cHV0LnNwbGljZSgtMSwgMCwgc3BhY2UgKyAnJScpO1xuXG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0LmpvaW4oJycpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQgKyBzcGFjZSArICclJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgdW5mb3JtYXQ6IGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgICAgICAgdmFyIG51bWJlciA9IG51bWVyYWwuXy5zdHJpbmdUb051bWJlcihzdHJpbmcpO1xuICAgICAgICAgICAgaWYgKG51bWVyYWwub3B0aW9ucy5zY2FsZVBlcmNlbnRCeTEwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKiAwLjAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgfVxuICAgIH0pO1xufSkoKTtcblxuXG4oZnVuY3Rpb24oKSB7XG4gICAgICAgIG51bWVyYWwucmVnaXN0ZXIoJ2Zvcm1hdCcsICd0aW1lJywge1xuICAgICAgICByZWdleHBzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6IC8oOikvLFxuICAgICAgICAgICAgdW5mb3JtYXQ6IC8oOikvXG4gICAgICAgIH0sXG4gICAgICAgIGZvcm1hdDogZnVuY3Rpb24odmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbikge1xuICAgICAgICAgICAgdmFyIGhvdXJzID0gTWF0aC5mbG9vcih2YWx1ZSAvIDYwIC8gNjApLFxuICAgICAgICAgICAgICAgIG1pbnV0ZXMgPSBNYXRoLmZsb29yKCh2YWx1ZSAtIChob3VycyAqIDYwICogNjApKSAvIDYwKSxcbiAgICAgICAgICAgICAgICBzZWNvbmRzID0gTWF0aC5yb3VuZCh2YWx1ZSAtIChob3VycyAqIDYwICogNjApIC0gKG1pbnV0ZXMgKiA2MCkpO1xuXG4gICAgICAgICAgICByZXR1cm4gaG91cnMgKyAnOicgKyAobWludXRlcyA8IDEwID8gJzAnICsgbWludXRlcyA6IG1pbnV0ZXMpICsgJzonICsgKHNlY29uZHMgPCAxMCA/ICcwJyArIHNlY29uZHMgOiBzZWNvbmRzKTtcbiAgICAgICAgfSxcbiAgICAgICAgdW5mb3JtYXQ6IGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgICAgICAgdmFyIHRpbWVBcnJheSA9IHN0cmluZy5zcGxpdCgnOicpLFxuICAgICAgICAgICAgICAgIHNlY29uZHMgPSAwO1xuXG4gICAgICAgICAgICAvLyB0dXJuIGhvdXJzIGFuZCBtaW51dGVzIGludG8gc2Vjb25kcyBhbmQgYWRkIHRoZW0gYWxsIHVwXG4gICAgICAgICAgICBpZiAodGltZUFycmF5Lmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgICAgIC8vIGhvdXJzXG4gICAgICAgICAgICAgICAgc2Vjb25kcyA9IHNlY29uZHMgKyAoTnVtYmVyKHRpbWVBcnJheVswXSkgKiA2MCAqIDYwKTtcbiAgICAgICAgICAgICAgICAvLyBtaW51dGVzXG4gICAgICAgICAgICAgICAgc2Vjb25kcyA9IHNlY29uZHMgKyAoTnVtYmVyKHRpbWVBcnJheVsxXSkgKiA2MCk7XG4gICAgICAgICAgICAgICAgLy8gc2Vjb25kc1xuICAgICAgICAgICAgICAgIHNlY29uZHMgPSBzZWNvbmRzICsgTnVtYmVyKHRpbWVBcnJheVsyXSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRpbWVBcnJheS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgICAvLyBtaW51dGVzXG4gICAgICAgICAgICAgICAgc2Vjb25kcyA9IHNlY29uZHMgKyAoTnVtYmVyKHRpbWVBcnJheVswXSkgKiA2MCk7XG4gICAgICAgICAgICAgICAgLy8gc2Vjb25kc1xuICAgICAgICAgICAgICAgIHNlY29uZHMgPSBzZWNvbmRzICsgTnVtYmVyKHRpbWVBcnJheVsxXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKHNlY29uZHMpO1xuICAgICAgICB9XG4gICAgfSk7XG59KSgpO1xuXG5yZXR1cm4gbnVtZXJhbDtcbn0pKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///192\n")},193:function(module,exports,__webpack_require__){eval('var map = {\n\t"./af": 150,\n\t"./af.js": 150,\n\t"./ar": 149,\n\t"./ar-dz": 148,\n\t"./ar-dz.js": 148,\n\t"./ar-kw": 147,\n\t"./ar-kw.js": 147,\n\t"./ar-ly": 146,\n\t"./ar-ly.js": 146,\n\t"./ar-ma": 145,\n\t"./ar-ma.js": 145,\n\t"./ar-sa": 144,\n\t"./ar-sa.js": 144,\n\t"./ar-tn": 143,\n\t"./ar-tn.js": 143,\n\t"./ar.js": 149,\n\t"./az": 142,\n\t"./az.js": 142,\n\t"./be": 141,\n\t"./be.js": 141,\n\t"./bg": 140,\n\t"./bg.js": 140,\n\t"./bm": 139,\n\t"./bm.js": 139,\n\t"./bn": 138,\n\t"./bn.js": 138,\n\t"./bo": 137,\n\t"./bo.js": 137,\n\t"./br": 136,\n\t"./br.js": 136,\n\t"./bs": 135,\n\t"./bs.js": 135,\n\t"./ca": 134,\n\t"./ca.js": 134,\n\t"./cs": 133,\n\t"./cs.js": 133,\n\t"./cv": 132,\n\t"./cv.js": 132,\n\t"./cy": 131,\n\t"./cy.js": 131,\n\t"./da": 130,\n\t"./da.js": 130,\n\t"./de": 129,\n\t"./de-at": 128,\n\t"./de-at.js": 128,\n\t"./de-ch": 127,\n\t"./de-ch.js": 127,\n\t"./de.js": 129,\n\t"./dv": 126,\n\t"./dv.js": 126,\n\t"./el": 125,\n\t"./el.js": 125,\n\t"./en-au": 124,\n\t"./en-au.js": 124,\n\t"./en-ca": 123,\n\t"./en-ca.js": 123,\n\t"./en-gb": 122,\n\t"./en-gb.js": 122,\n\t"./en-ie": 121,\n\t"./en-ie.js": 121,\n\t"./en-il": 120,\n\t"./en-il.js": 120,\n\t"./en-nz": 119,\n\t"./en-nz.js": 119,\n\t"./eo": 118,\n\t"./eo.js": 118,\n\t"./es": 117,\n\t"./es-do": 116,\n\t"./es-do.js": 116,\n\t"./es-us": 115,\n\t"./es-us.js": 115,\n\t"./es.js": 117,\n\t"./et": 114,\n\t"./et.js": 114,\n\t"./eu": 113,\n\t"./eu.js": 113,\n\t"./fa": 112,\n\t"./fa.js": 112,\n\t"./fi": 111,\n\t"./fi.js": 111,\n\t"./fo": 110,\n\t"./fo.js": 110,\n\t"./fr": 109,\n\t"./fr-ca": 108,\n\t"./fr-ca.js": 108,\n\t"./fr-ch": 107,\n\t"./fr-ch.js": 107,\n\t"./fr.js": 109,\n\t"./fy": 106,\n\t"./fy.js": 106,\n\t"./gd": 105,\n\t"./gd.js": 105,\n\t"./gl": 104,\n\t"./gl.js": 104,\n\t"./gom-latn": 103,\n\t"./gom-latn.js": 103,\n\t"./gu": 102,\n\t"./gu.js": 102,\n\t"./he": 101,\n\t"./he.js": 101,\n\t"./hi": 100,\n\t"./hi.js": 100,\n\t"./hr": 99,\n\t"./hr.js": 99,\n\t"./hu": 98,\n\t"./hu.js": 98,\n\t"./hy-am": 97,\n\t"./hy-am.js": 97,\n\t"./id": 96,\n\t"./id.js": 96,\n\t"./is": 95,\n\t"./is.js": 95,\n\t"./it": 94,\n\t"./it.js": 94,\n\t"./ja": 93,\n\t"./ja.js": 93,\n\t"./jv": 92,\n\t"./jv.js": 92,\n\t"./ka": 91,\n\t"./ka.js": 91,\n\t"./kk": 90,\n\t"./kk.js": 90,\n\t"./km": 89,\n\t"./km.js": 89,\n\t"./kn": 88,\n\t"./kn.js": 88,\n\t"./ko": 87,\n\t"./ko.js": 87,\n\t"./ky": 86,\n\t"./ky.js": 86,\n\t"./lb": 85,\n\t"./lb.js": 85,\n\t"./lo": 84,\n\t"./lo.js": 84,\n\t"./lt": 83,\n\t"./lt.js": 83,\n\t"./lv": 82,\n\t"./lv.js": 82,\n\t"./me": 81,\n\t"./me.js": 81,\n\t"./mi": 80,\n\t"./mi.js": 80,\n\t"./mk": 79,\n\t"./mk.js": 79,\n\t"./ml": 78,\n\t"./ml.js": 78,\n\t"./mn": 77,\n\t"./mn.js": 77,\n\t"./mr": 76,\n\t"./mr.js": 76,\n\t"./ms": 75,\n\t"./ms-my": 74,\n\t"./ms-my.js": 74,\n\t"./ms.js": 75,\n\t"./mt": 73,\n\t"./mt.js": 73,\n\t"./my": 72,\n\t"./my.js": 72,\n\t"./nb": 71,\n\t"./nb.js": 71,\n\t"./ne": 70,\n\t"./ne.js": 70,\n\t"./nl": 69,\n\t"./nl-be": 68,\n\t"./nl-be.js": 68,\n\t"./nl.js": 69,\n\t"./nn": 67,\n\t"./nn.js": 67,\n\t"./pa-in": 66,\n\t"./pa-in.js": 66,\n\t"./pl": 65,\n\t"./pl.js": 65,\n\t"./pt": 64,\n\t"./pt-br": 63,\n\t"./pt-br.js": 63,\n\t"./pt.js": 64,\n\t"./ro": 62,\n\t"./ro.js": 62,\n\t"./ru": 61,\n\t"./ru.js": 61,\n\t"./sd": 60,\n\t"./sd.js": 60,\n\t"./se": 59,\n\t"./se.js": 59,\n\t"./si": 58,\n\t"./si.js": 58,\n\t"./sk": 57,\n\t"./sk.js": 57,\n\t"./sl": 56,\n\t"./sl.js": 56,\n\t"./sq": 55,\n\t"./sq.js": 55,\n\t"./sr": 54,\n\t"./sr-cyrl": 53,\n\t"./sr-cyrl.js": 53,\n\t"./sr.js": 54,\n\t"./ss": 52,\n\t"./ss.js": 52,\n\t"./sv": 51,\n\t"./sv.js": 51,\n\t"./sw": 50,\n\t"./sw.js": 50,\n\t"./ta": 49,\n\t"./ta.js": 49,\n\t"./te": 48,\n\t"./te.js": 48,\n\t"./tet": 47,\n\t"./tet.js": 47,\n\t"./tg": 46,\n\t"./tg.js": 46,\n\t"./th": 45,\n\t"./th.js": 45,\n\t"./tl-ph": 44,\n\t"./tl-ph.js": 44,\n\t"./tlh": 43,\n\t"./tlh.js": 43,\n\t"./tr": 42,\n\t"./tr.js": 42,\n\t"./tzl": 41,\n\t"./tzl.js": 41,\n\t"./tzm": 40,\n\t"./tzm-latn": 39,\n\t"./tzm-latn.js": 39,\n\t"./tzm.js": 40,\n\t"./ug-cn": 38,\n\t"./ug-cn.js": 38,\n\t"./uk": 37,\n\t"./uk.js": 37,\n\t"./ur": 36,\n\t"./ur.js": 36,\n\t"./uz": 35,\n\t"./uz-latn": 34,\n\t"./uz-latn.js": 34,\n\t"./uz.js": 35,\n\t"./vi": 33,\n\t"./vi.js": 33,\n\t"./x-pseudo": 32,\n\t"./x-pseudo.js": 32,\n\t"./yo": 31,\n\t"./yo.js": 31,\n\t"./zh-cn": 30,\n\t"./zh-cn.js": 30,\n\t"./zh-hk": 29,\n\t"./zh-hk.js": 29,\n\t"./zh-tw": 28,\n\t"./zh-tw.js": 28\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\tvar module = __webpack_require__(id);\n\treturn module;\n}\nfunction webpackContextResolve(req) {\n\tvar id = map[req];\n\tif(!(id + 1)) { // check for number or string\n\t\tvar e = new Error(\'Cannot find module "\' + req + \'".\');\n\t\te.code = \'MODULE_NOT_FOUND\';\n\t\tthrow e;\n\t}\n\treturn id;\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 193;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZSBzeW5jIF5cXC5cXC8uKiQ/ZmUxNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTkzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIG1hcCA9IHtcblx0XCIuL2FmXCI6IDE1MCxcblx0XCIuL2FmLmpzXCI6IDE1MCxcblx0XCIuL2FyXCI6IDE0OSxcblx0XCIuL2FyLWR6XCI6IDE0OCxcblx0XCIuL2FyLWR6LmpzXCI6IDE0OCxcblx0XCIuL2FyLWt3XCI6IDE0Nyxcblx0XCIuL2FyLWt3LmpzXCI6IDE0Nyxcblx0XCIuL2FyLWx5XCI6IDE0Nixcblx0XCIuL2FyLWx5LmpzXCI6IDE0Nixcblx0XCIuL2FyLW1hXCI6IDE0NSxcblx0XCIuL2FyLW1hLmpzXCI6IDE0NSxcblx0XCIuL2FyLXNhXCI6IDE0NCxcblx0XCIuL2FyLXNhLmpzXCI6IDE0NCxcblx0XCIuL2FyLXRuXCI6IDE0Myxcblx0XCIuL2FyLXRuLmpzXCI6IDE0Myxcblx0XCIuL2FyLmpzXCI6IDE0OSxcblx0XCIuL2F6XCI6IDE0Mixcblx0XCIuL2F6LmpzXCI6IDE0Mixcblx0XCIuL2JlXCI6IDE0MSxcblx0XCIuL2JlLmpzXCI6IDE0MSxcblx0XCIuL2JnXCI6IDE0MCxcblx0XCIuL2JnLmpzXCI6IDE0MCxcblx0XCIuL2JtXCI6IDEzOSxcblx0XCIuL2JtLmpzXCI6IDEzOSxcblx0XCIuL2JuXCI6IDEzOCxcblx0XCIuL2JuLmpzXCI6IDEzOCxcblx0XCIuL2JvXCI6IDEzNyxcblx0XCIuL2JvLmpzXCI6IDEzNyxcblx0XCIuL2JyXCI6IDEzNixcblx0XCIuL2JyLmpzXCI6IDEzNixcblx0XCIuL2JzXCI6IDEzNSxcblx0XCIuL2JzLmpzXCI6IDEzNSxcblx0XCIuL2NhXCI6IDEzNCxcblx0XCIuL2NhLmpzXCI6IDEzNCxcblx0XCIuL2NzXCI6IDEzMyxcblx0XCIuL2NzLmpzXCI6IDEzMyxcblx0XCIuL2N2XCI6IDEzMixcblx0XCIuL2N2LmpzXCI6IDEzMixcblx0XCIuL2N5XCI6IDEzMSxcblx0XCIuL2N5LmpzXCI6IDEzMSxcblx0XCIuL2RhXCI6IDEzMCxcblx0XCIuL2RhLmpzXCI6IDEzMCxcblx0XCIuL2RlXCI6IDEyOSxcblx0XCIuL2RlLWF0XCI6IDEyOCxcblx0XCIuL2RlLWF0LmpzXCI6IDEyOCxcblx0XCIuL2RlLWNoXCI6IDEyNyxcblx0XCIuL2RlLWNoLmpzXCI6IDEyNyxcblx0XCIuL2RlLmpzXCI6IDEyOSxcblx0XCIuL2R2XCI6IDEyNixcblx0XCIuL2R2LmpzXCI6IDEyNixcblx0XCIuL2VsXCI6IDEyNSxcblx0XCIuL2VsLmpzXCI6IDEyNSxcblx0XCIuL2VuLWF1XCI6IDEyNCxcblx0XCIuL2VuLWF1LmpzXCI6IDEyNCxcblx0XCIuL2VuLWNhXCI6IDEyMyxcblx0XCIuL2VuLWNhLmpzXCI6IDEyMyxcblx0XCIuL2VuLWdiXCI6IDEyMixcblx0XCIuL2VuLWdiLmpzXCI6IDEyMixcblx0XCIuL2VuLWllXCI6IDEyMSxcblx0XCIuL2VuLWllLmpzXCI6IDEyMSxcblx0XCIuL2VuLWlsXCI6IDEyMCxcblx0XCIuL2VuLWlsLmpzXCI6IDEyMCxcblx0XCIuL2VuLW56XCI6IDExOSxcblx0XCIuL2VuLW56LmpzXCI6IDExOSxcblx0XCIuL2VvXCI6IDExOCxcblx0XCIuL2VvLmpzXCI6IDExOCxcblx0XCIuL2VzXCI6IDExNyxcblx0XCIuL2VzLWRvXCI6IDExNixcblx0XCIuL2VzLWRvLmpzXCI6IDExNixcblx0XCIuL2VzLXVzXCI6IDExNSxcblx0XCIuL2VzLXVzLmpzXCI6IDExNSxcblx0XCIuL2VzLmpzXCI6IDExNyxcblx0XCIuL2V0XCI6IDExNCxcblx0XCIuL2V0LmpzXCI6IDExNCxcblx0XCIuL2V1XCI6IDExMyxcblx0XCIuL2V1LmpzXCI6IDExMyxcblx0XCIuL2ZhXCI6IDExMixcblx0XCIuL2ZhLmpzXCI6IDExMixcblx0XCIuL2ZpXCI6IDExMSxcblx0XCIuL2ZpLmpzXCI6IDExMSxcblx0XCIuL2ZvXCI6IDExMCxcblx0XCIuL2ZvLmpzXCI6IDExMCxcblx0XCIuL2ZyXCI6IDEwOSxcblx0XCIuL2ZyLWNhXCI6IDEwOCxcblx0XCIuL2ZyLWNhLmpzXCI6IDEwOCxcblx0XCIuL2ZyLWNoXCI6IDEwNyxcblx0XCIuL2ZyLWNoLmpzXCI6IDEwNyxcblx0XCIuL2ZyLmpzXCI6IDEwOSxcblx0XCIuL2Z5XCI6IDEwNixcblx0XCIuL2Z5LmpzXCI6IDEwNixcblx0XCIuL2dkXCI6IDEwNSxcblx0XCIuL2dkLmpzXCI6IDEwNSxcblx0XCIuL2dsXCI6IDEwNCxcblx0XCIuL2dsLmpzXCI6IDEwNCxcblx0XCIuL2dvbS1sYXRuXCI6IDEwMyxcblx0XCIuL2dvbS1sYXRuLmpzXCI6IDEwMyxcblx0XCIuL2d1XCI6IDEwMixcblx0XCIuL2d1LmpzXCI6IDEwMixcblx0XCIuL2hlXCI6IDEwMSxcblx0XCIuL2hlLmpzXCI6IDEwMSxcblx0XCIuL2hpXCI6IDEwMCxcblx0XCIuL2hpLmpzXCI6IDEwMCxcblx0XCIuL2hyXCI6IDk5LFxuXHRcIi4vaHIuanNcIjogOTksXG5cdFwiLi9odVwiOiA5OCxcblx0XCIuL2h1LmpzXCI6IDk4LFxuXHRcIi4vaHktYW1cIjogOTcsXG5cdFwiLi9oeS1hbS5qc1wiOiA5Nyxcblx0XCIuL2lkXCI6IDk2LFxuXHRcIi4vaWQuanNcIjogOTYsXG5cdFwiLi9pc1wiOiA5NSxcblx0XCIuL2lzLmpzXCI6IDk1LFxuXHRcIi4vaXRcIjogOTQsXG5cdFwiLi9pdC5qc1wiOiA5NCxcblx0XCIuL2phXCI6IDkzLFxuXHRcIi4vamEuanNcIjogOTMsXG5cdFwiLi9qdlwiOiA5Mixcblx0XCIuL2p2LmpzXCI6IDkyLFxuXHRcIi4va2FcIjogOTEsXG5cdFwiLi9rYS5qc1wiOiA5MSxcblx0XCIuL2trXCI6IDkwLFxuXHRcIi4va2suanNcIjogOTAsXG5cdFwiLi9rbVwiOiA4OSxcblx0XCIuL2ttLmpzXCI6IDg5LFxuXHRcIi4va25cIjogODgsXG5cdFwiLi9rbi5qc1wiOiA4OCxcblx0XCIuL2tvXCI6IDg3LFxuXHRcIi4va28uanNcIjogODcsXG5cdFwiLi9reVwiOiA4Nixcblx0XCIuL2t5LmpzXCI6IDg2LFxuXHRcIi4vbGJcIjogODUsXG5cdFwiLi9sYi5qc1wiOiA4NSxcblx0XCIuL2xvXCI6IDg0LFxuXHRcIi4vbG8uanNcIjogODQsXG5cdFwiLi9sdFwiOiA4Myxcblx0XCIuL2x0LmpzXCI6IDgzLFxuXHRcIi4vbHZcIjogODIsXG5cdFwiLi9sdi5qc1wiOiA4Mixcblx0XCIuL21lXCI6IDgxLFxuXHRcIi4vbWUuanNcIjogODEsXG5cdFwiLi9taVwiOiA4MCxcblx0XCIuL21pLmpzXCI6IDgwLFxuXHRcIi4vbWtcIjogNzksXG5cdFwiLi9tay5qc1wiOiA3OSxcblx0XCIuL21sXCI6IDc4LFxuXHRcIi4vbWwuanNcIjogNzgsXG5cdFwiLi9tblwiOiA3Nyxcblx0XCIuL21uLmpzXCI6IDc3LFxuXHRcIi4vbXJcIjogNzYsXG5cdFwiLi9tci5qc1wiOiA3Nixcblx0XCIuL21zXCI6IDc1LFxuXHRcIi4vbXMtbXlcIjogNzQsXG5cdFwiLi9tcy1teS5qc1wiOiA3NCxcblx0XCIuL21zLmpzXCI6IDc1LFxuXHRcIi4vbXRcIjogNzMsXG5cdFwiLi9tdC5qc1wiOiA3Myxcblx0XCIuL215XCI6IDcyLFxuXHRcIi4vbXkuanNcIjogNzIsXG5cdFwiLi9uYlwiOiA3MSxcblx0XCIuL25iLmpzXCI6IDcxLFxuXHRcIi4vbmVcIjogNzAsXG5cdFwiLi9uZS5qc1wiOiA3MCxcblx0XCIuL25sXCI6IDY5LFxuXHRcIi4vbmwtYmVcIjogNjgsXG5cdFwiLi9ubC1iZS5qc1wiOiA2OCxcblx0XCIuL25sLmpzXCI6IDY5LFxuXHRcIi4vbm5cIjogNjcsXG5cdFwiLi9ubi5qc1wiOiA2Nyxcblx0XCIuL3BhLWluXCI6IDY2LFxuXHRcIi4vcGEtaW4uanNcIjogNjYsXG5cdFwiLi9wbFwiOiA2NSxcblx0XCIuL3BsLmpzXCI6IDY1LFxuXHRcIi4vcHRcIjogNjQsXG5cdFwiLi9wdC1iclwiOiA2Myxcblx0XCIuL3B0LWJyLmpzXCI6IDYzLFxuXHRcIi4vcHQuanNcIjogNjQsXG5cdFwiLi9yb1wiOiA2Mixcblx0XCIuL3JvLmpzXCI6IDYyLFxuXHRcIi4vcnVcIjogNjEsXG5cdFwiLi9ydS5qc1wiOiA2MSxcblx0XCIuL3NkXCI6IDYwLFxuXHRcIi4vc2QuanNcIjogNjAsXG5cdFwiLi9zZVwiOiA1OSxcblx0XCIuL3NlLmpzXCI6IDU5LFxuXHRcIi4vc2lcIjogNTgsXG5cdFwiLi9zaS5qc1wiOiA1OCxcblx0XCIuL3NrXCI6IDU3LFxuXHRcIi4vc2suanNcIjogNTcsXG5cdFwiLi9zbFwiOiA1Nixcblx0XCIuL3NsLmpzXCI6IDU2LFxuXHRcIi4vc3FcIjogNTUsXG5cdFwiLi9zcS5qc1wiOiA1NSxcblx0XCIuL3NyXCI6IDU0LFxuXHRcIi4vc3ItY3lybFwiOiA1Myxcblx0XCIuL3NyLWN5cmwuanNcIjogNTMsXG5cdFwiLi9zci5qc1wiOiA1NCxcblx0XCIuL3NzXCI6IDUyLFxuXHRcIi4vc3MuanNcIjogNTIsXG5cdFwiLi9zdlwiOiA1MSxcblx0XCIuL3N2LmpzXCI6IDUxLFxuXHRcIi4vc3dcIjogNTAsXG5cdFwiLi9zdy5qc1wiOiA1MCxcblx0XCIuL3RhXCI6IDQ5LFxuXHRcIi4vdGEuanNcIjogNDksXG5cdFwiLi90ZVwiOiA0OCxcblx0XCIuL3RlLmpzXCI6IDQ4LFxuXHRcIi4vdGV0XCI6IDQ3LFxuXHRcIi4vdGV0LmpzXCI6IDQ3LFxuXHRcIi4vdGdcIjogNDYsXG5cdFwiLi90Zy5qc1wiOiA0Nixcblx0XCIuL3RoXCI6IDQ1LFxuXHRcIi4vdGguanNcIjogNDUsXG5cdFwiLi90bC1waFwiOiA0NCxcblx0XCIuL3RsLXBoLmpzXCI6IDQ0LFxuXHRcIi4vdGxoXCI6IDQzLFxuXHRcIi4vdGxoLmpzXCI6IDQzLFxuXHRcIi4vdHJcIjogNDIsXG5cdFwiLi90ci5qc1wiOiA0Mixcblx0XCIuL3R6bFwiOiA0MSxcblx0XCIuL3R6bC5qc1wiOiA0MSxcblx0XCIuL3R6bVwiOiA0MCxcblx0XCIuL3R6bS1sYXRuXCI6IDM5LFxuXHRcIi4vdHptLWxhdG4uanNcIjogMzksXG5cdFwiLi90em0uanNcIjogNDAsXG5cdFwiLi91Zy1jblwiOiAzOCxcblx0XCIuL3VnLWNuLmpzXCI6IDM4LFxuXHRcIi4vdWtcIjogMzcsXG5cdFwiLi91ay5qc1wiOiAzNyxcblx0XCIuL3VyXCI6IDM2LFxuXHRcIi4vdXIuanNcIjogMzYsXG5cdFwiLi91elwiOiAzNSxcblx0XCIuL3V6LWxhdG5cIjogMzQsXG5cdFwiLi91ei1sYXRuLmpzXCI6IDM0LFxuXHRcIi4vdXouanNcIjogMzUsXG5cdFwiLi92aVwiOiAzMyxcblx0XCIuL3ZpLmpzXCI6IDMzLFxuXHRcIi4veC1wc2V1ZG9cIjogMzIsXG5cdFwiLi94LXBzZXVkby5qc1wiOiAzMixcblx0XCIuL3lvXCI6IDMxLFxuXHRcIi4veW8uanNcIjogMzEsXG5cdFwiLi96aC1jblwiOiAzMCxcblx0XCIuL3poLWNuLmpzXCI6IDMwLFxuXHRcIi4vemgtaGtcIjogMjksXG5cdFwiLi96aC1oay5qc1wiOiAyOSxcblx0XCIuL3poLXR3XCI6IDI4LFxuXHRcIi4vemgtdHcuanNcIjogMjhcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG5cdHJldHVybiBtb2R1bGU7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdHZhciBpZCA9IG1hcFtyZXFdO1xuXHRpZighKGlkICsgMSkpIHsgLy8gY2hlY2sgZm9yIG51bWJlciBvciBzdHJpbmdcblx0XHR2YXIgZSA9IG5ldyBFcnJvcignQ2Fubm90IGZpbmQgbW9kdWxlIFwiJyArIHJlcSArICdcIi4nKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gaWQ7XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gMTkzOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///193\n')},194:function(module,exports,__webpack_require__){"use strict";eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction addQueryString(url, params) {\n  if (params && (typeof params === 'undefined' ? 'undefined' : _typeof(params)) === 'object') {\n    var queryString = '',\n        e = encodeURIComponent;\n\n    // Must encode data\n    for (var paramName in params) {\n      queryString += '&' + e(paramName) + '=' + e(params[paramName]);\n    }\n\n    if (!queryString) {\n      return url;\n    }\n\n    url = url + (url.indexOf('?') !== -1 ? '&' : '?') + queryString.slice(1);\n  }\n\n  return url;\n}\n\n// https://gist.github.com/Xeoncross/7663273\nfunction ajax(url, options, callback, data, cache) {\n\n  if (data && (typeof data === 'undefined' ? 'undefined' : _typeof(data)) === 'object') {\n    if (!cache) {\n      data['_t'] = new Date();\n    }\n    // URL encoded form data must be in querystring format\n    data = addQueryString('', data).slice(1);\n  }\n\n  if (options.queryStringParams) {\n    url = addQueryString(url, options.queryStringParams);\n  }\n\n  try {\n    var x;\n    if (XMLHttpRequest) {\n      x = new XMLHttpRequest();\n    } else {\n      x = new ActiveXObject('MSXML2.XMLHTTP.3.0');\n    }\n    x.open(data ? 'POST' : 'GET', url, 1);\n    if (!options.crossDomain) {\n      x.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n    }\n    x.withCredentials = !!options.withCredentials;\n    if (data) {\n      x.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');\n    }\n    if (x.overrideMimeType) {\n      x.overrideMimeType(\"application/json\");\n    }\n    var h = options.customHeaders;\n    if (h) {\n      for (var i in h) {\n        x.setRequestHeader(i, h[i]);\n      }\n    }\n    x.onreadystatechange = function () {\n      x.readyState > 3 && callback && callback(x.responseText, x);\n    };\n    x.send(data);\n  } catch (e) {\n    console && console.log(e);\n  }\n}\n\nexports.default = ajax;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaTE4bmV4dC14aHItYmFja2VuZC9kaXN0L2NvbW1vbmpzL2FqYXguanM/ODZjYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxvR0FBb0csbUJBQW1CLEVBQUUsbUJBQW1CLDhIQUE4SDs7QUFFMVE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIxOTQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxuZnVuY3Rpb24gYWRkUXVlcnlTdHJpbmcodXJsLCBwYXJhbXMpIHtcbiAgaWYgKHBhcmFtcyAmJiAodHlwZW9mIHBhcmFtcyA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YocGFyYW1zKSkgPT09ICdvYmplY3QnKSB7XG4gICAgdmFyIHF1ZXJ5U3RyaW5nID0gJycsXG4gICAgICAgIGUgPSBlbmNvZGVVUklDb21wb25lbnQ7XG5cbiAgICAvLyBNdXN0IGVuY29kZSBkYXRhXG4gICAgZm9yICh2YXIgcGFyYW1OYW1lIGluIHBhcmFtcykge1xuICAgICAgcXVlcnlTdHJpbmcgKz0gJyYnICsgZShwYXJhbU5hbWUpICsgJz0nICsgZShwYXJhbXNbcGFyYW1OYW1lXSk7XG4gICAgfVxuXG4gICAgaWYgKCFxdWVyeVN0cmluZykge1xuICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICB1cmwgPSB1cmwgKyAodXJsLmluZGV4T2YoJz8nKSAhPT0gLTEgPyAnJicgOiAnPycpICsgcXVlcnlTdHJpbmcuc2xpY2UoMSk7XG4gIH1cblxuICByZXR1cm4gdXJsO1xufVxuXG4vLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9YZW9uY3Jvc3MvNzY2MzI3M1xuZnVuY3Rpb24gYWpheCh1cmwsIG9wdGlvbnMsIGNhbGxiYWNrLCBkYXRhLCBjYWNoZSkge1xuXG4gIGlmIChkYXRhICYmICh0eXBlb2YgZGF0YSA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YoZGF0YSkpID09PSAnb2JqZWN0Jykge1xuICAgIGlmICghY2FjaGUpIHtcbiAgICAgIGRhdGFbJ190J10gPSBuZXcgRGF0ZSgpO1xuICAgIH1cbiAgICAvLyBVUkwgZW5jb2RlZCBmb3JtIGRhdGEgbXVzdCBiZSBpbiBxdWVyeXN0cmluZyBmb3JtYXRcbiAgICBkYXRhID0gYWRkUXVlcnlTdHJpbmcoJycsIGRhdGEpLnNsaWNlKDEpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMucXVlcnlTdHJpbmdQYXJhbXMpIHtcbiAgICB1cmwgPSBhZGRRdWVyeVN0cmluZyh1cmwsIG9wdGlvbnMucXVlcnlTdHJpbmdQYXJhbXMpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICB2YXIgeDtcbiAgICBpZiAoWE1MSHR0cFJlcXVlc3QpIHtcbiAgICAgIHggPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgeCA9IG5ldyBBY3RpdmVYT2JqZWN0KCdNU1hNTDIuWE1MSFRUUC4zLjAnKTtcbiAgICB9XG4gICAgeC5vcGVuKGRhdGEgPyAnUE9TVCcgOiAnR0VUJywgdXJsLCAxKTtcbiAgICBpZiAoIW9wdGlvbnMuY3Jvc3NEb21haW4pIHtcbiAgICAgIHguc2V0UmVxdWVzdEhlYWRlcignWC1SZXF1ZXN0ZWQtV2l0aCcsICdYTUxIdHRwUmVxdWVzdCcpO1xuICAgIH1cbiAgICB4LndpdGhDcmVkZW50aWFscyA9ICEhb3B0aW9ucy53aXRoQ3JlZGVudGlhbHM7XG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIHguc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpO1xuICAgIH1cbiAgICBpZiAoeC5vdmVycmlkZU1pbWVUeXBlKSB7XG4gICAgICB4Lm92ZXJyaWRlTWltZVR5cGUoXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgIH1cbiAgICB2YXIgaCA9IG9wdGlvbnMuY3VzdG9tSGVhZGVycztcbiAgICBpZiAoaCkge1xuICAgICAgZm9yICh2YXIgaSBpbiBoKSB7XG4gICAgICAgIHguc2V0UmVxdWVzdEhlYWRlcihpLCBoW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgeC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB4LnJlYWR5U3RhdGUgPiAzICYmIGNhbGxiYWNrICYmIGNhbGxiYWNrKHgucmVzcG9uc2VUZXh0LCB4KTtcbiAgICB9O1xuICAgIHguc2VuZChkYXRhKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUgJiYgY29uc29sZS5sb2coZSk7XG4gIH1cbn1cblxuZXhwb3J0cy5kZWZhdWx0ID0gYWpheDsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///194\n")},195:function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n  value: true\n});\nexports.defaults = defaults;\nexports.extend = extend;\nvar arr = [];\nvar each = arr.forEach;\nvar slice = arr.slice;\n\nfunction defaults(obj) {\n  each.call(slice.call(arguments, 1), function (source) {\n    if (source) {\n      for (var prop in source) {\n        if (obj[prop] === undefined) obj[prop] = source[prop];\n      }\n    }\n  });\n  return obj;\n}\n\nfunction extend(obj) {\n  each.call(slice.call(arguments, 1), function (source) {\n    if (source) {\n      for (var prop in source) {\n        obj[prop] = source[prop];\n      }\n    }\n  });\n  return obj;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaTE4bmV4dC14aHItYmFja2VuZC9kaXN0L2NvbW1vbmpzL3V0aWxzLmpzP2M4YWMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWI7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSIsImZpbGUiOiIxOTUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdHMgPSBkZWZhdWx0cztcbmV4cG9ydHMuZXh0ZW5kID0gZXh0ZW5kO1xudmFyIGFyciA9IFtdO1xudmFyIGVhY2ggPSBhcnIuZm9yRWFjaDtcbnZhciBzbGljZSA9IGFyci5zbGljZTtcblxuZnVuY3Rpb24gZGVmYXVsdHMob2JqKSB7XG4gIGVhY2guY2FsbChzbGljZS5jYWxsKGFyZ3VtZW50cywgMSksIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICBpZiAoc291cmNlKSB7XG4gICAgICBmb3IgKHZhciBwcm9wIGluIHNvdXJjZSkge1xuICAgICAgICBpZiAob2JqW3Byb3BdID09PSB1bmRlZmluZWQpIG9ialtwcm9wXSA9IHNvdXJjZVtwcm9wXTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4gb2JqO1xufVxuXG5mdW5jdGlvbiBleHRlbmQob2JqKSB7XG4gIGVhY2guY2FsbChzbGljZS5jYWxsKGFyZ3VtZW50cywgMSksIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICBpZiAoc291cmNlKSB7XG4gICAgICBmb3IgKHZhciBwcm9wIGluIHNvdXJjZSkge1xuICAgICAgICBvYmpbcHJvcF0gPSBzb3VyY2VbcHJvcF07XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG9iajtcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///195\n')},196:function(module,exports,__webpack_require__){"use strict";eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _utils = __webpack_require__(195);\n\nvar utils = _interopRequireWildcard(_utils);\n\nvar _ajax = __webpack_require__(194);\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction getDefaults() {\n  return {\n    loadPath: '/locales/{{lng}}/{{ns}}.json',\n    addPath: '/locales/add/{{lng}}/{{ns}}',\n    allowMultiLoading: false,\n    parse: JSON.parse,\n    crossDomain: false,\n    ajax: _ajax2.default\n  };\n}\n\nvar Backend = function () {\n  function Backend(services) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    _classCallCheck(this, Backend);\n\n    this.init(services, options);\n\n    this.type = 'backend';\n  }\n\n  _createClass(Backend, [{\n    key: 'init',\n    value: function init(services) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n      this.services = services;\n      this.options = utils.defaults(options, this.options || {}, getDefaults());\n    }\n  }, {\n    key: 'readMulti',\n    value: function readMulti(languages, namespaces, callback) {\n      var loadPath = this.options.loadPath;\n      if (typeof this.options.loadPath === 'function') {\n        loadPath = this.options.loadPath(languages, namespaces);\n      }\n\n      var url = this.services.interpolator.interpolate(loadPath, { lng: languages.join('+'), ns: namespaces.join('+') });\n\n      this.loadUrl(url, callback);\n    }\n  }, {\n    key: 'read',\n    value: function read(language, namespace, callback) {\n      var loadPath = this.options.loadPath;\n      if (typeof this.options.loadPath === 'function') {\n        loadPath = this.options.loadPath([language], [namespace]);\n      }\n\n      var url = this.services.interpolator.interpolate(loadPath, { lng: language, ns: namespace });\n\n      this.loadUrl(url, callback);\n    }\n  }, {\n    key: 'loadUrl',\n    value: function loadUrl(url, callback) {\n      var _this = this;\n\n      this.options.ajax(url, this.options, function (data, xhr) {\n        if (xhr.status >= 500 && xhr.status < 600) return callback('failed loading ' + url, true /* retry */);\n        if (xhr.status >= 400 && xhr.status < 500) return callback('failed loading ' + url, false /* no retry */);\n\n        var ret = void 0,\n            err = void 0;\n        try {\n          ret = _this.options.parse(data, url);\n        } catch (e) {\n          err = 'failed parsing ' + url + ' to json';\n        }\n        if (err) return callback(err, false);\n        callback(null, ret);\n      });\n    }\n  }, {\n    key: 'create',\n    value: function create(languages, namespace, key, fallbackValue) {\n      var _this2 = this;\n\n      if (typeof languages === 'string') languages = [languages];\n\n      var payload = {};\n      payload[key] = fallbackValue || '';\n\n      languages.forEach(function (lng) {\n        var url = _this2.services.interpolator.interpolate(_this2.options.addPath, { lng: lng, ns: namespace });\n\n        _this2.options.ajax(url, _this2.options, function (data, xhr) {\n          //const statusCode = xhr.status.toString();\n          // TODO: if statusCode === 4xx do log\n        }, payload);\n      });\n    }\n  }]);\n\n  return Backend;\n}();\n\nBackend.type = 'backend';\n\nexports.default = Backend;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaTE4bmV4dC14aHItYmFja2VuZC9kaXN0L2NvbW1vbmpzL2luZGV4LmpzPzQyN2IiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWI7QUFDQTtBQUNBLENBQUM7O0FBRUQsZ0NBQWdDLDJDQUEyQyxnQkFBZ0Isa0JBQWtCLE9BQU8sMkJBQTJCLHdEQUF3RCxnQ0FBZ0MsdURBQXVELDJEQUEyRCxFQUFFLEVBQUUseURBQXlELHFFQUFxRSw2REFBNkQsb0JBQW9CLEdBQUcsRUFBRTs7QUFFampCLGFBQWEsbUJBQU8sQ0FBQyxHQUFZOztBQUVqQzs7QUFFQSxZQUFZLG1CQUFPLENBQUMsR0FBVzs7QUFFL0I7O0FBRUEsc0NBQXNDLHVDQUF1QyxnQkFBZ0I7O0FBRTdGLHVDQUF1Qyw2QkFBNkIsWUFBWSxFQUFFLE9BQU8saUJBQWlCLG1CQUFtQix1QkFBdUIsNEVBQTRFLEVBQUUsRUFBRSxzQkFBc0IsZUFBZSxFQUFFOztBQUUzUSxpREFBaUQsMENBQTBDLDBEQUEwRCxFQUFFOztBQUV2SjtBQUNBO0FBQ0EsMEJBQTBCLEtBQUssR0FBRyxJQUFJO0FBQ3RDLDZCQUE2QixLQUFLLEdBQUcsSUFBSTtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwrREFBK0Q7QUFDL0Q7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtFQUFrRSxxREFBcUQ7O0FBRXZIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtFQUFrRSwrQkFBK0I7O0FBRWpHO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLG9GQUFvRiwwQkFBMEI7O0FBRTlHO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQSxHQUFHOztBQUVIO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQSIsImZpbGUiOiIxOTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XG5cbnZhciBfdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzLmpzJyk7XG5cbnZhciB1dGlscyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKF91dGlscyk7XG5cbnZhciBfYWpheCA9IHJlcXVpcmUoJy4vYWpheC5qcycpO1xuXG52YXIgX2FqYXgyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYWpheCk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKG9iaikgeyBpZiAob2JqICYmIG9iai5fX2VzTW9kdWxlKSB7IHJldHVybiBvYmo7IH0gZWxzZSB7IHZhciBuZXdPYmogPSB7fTsgaWYgKG9iaiAhPSBudWxsKSB7IGZvciAodmFyIGtleSBpbiBvYmopIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIG5ld09ialtrZXldID0gb2JqW2tleV07IH0gfSBuZXdPYmouZGVmYXVsdCA9IG9iajsgcmV0dXJuIG5ld09iajsgfSB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRzKCkge1xuICByZXR1cm4ge1xuICAgIGxvYWRQYXRoOiAnL2xvY2FsZXMve3tsbmd9fS97e25zfX0uanNvbicsXG4gICAgYWRkUGF0aDogJy9sb2NhbGVzL2FkZC97e2xuZ319L3t7bnN9fScsXG4gICAgYWxsb3dNdWx0aUxvYWRpbmc6IGZhbHNlLFxuICAgIHBhcnNlOiBKU09OLnBhcnNlLFxuICAgIGNyb3NzRG9tYWluOiBmYWxzZSxcbiAgICBhamF4OiBfYWpheDIuZGVmYXVsdFxuICB9O1xufVxuXG52YXIgQmFja2VuZCA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQmFja2VuZChzZXJ2aWNlcykge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBCYWNrZW5kKTtcblxuICAgIHRoaXMuaW5pdChzZXJ2aWNlcywgb3B0aW9ucyk7XG5cbiAgICB0aGlzLnR5cGUgPSAnYmFja2VuZCc7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoQmFja2VuZCwgW3tcbiAgICBrZXk6ICdpbml0JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW5pdChzZXJ2aWNlcykge1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG4gICAgICB0aGlzLnNlcnZpY2VzID0gc2VydmljZXM7XG4gICAgICB0aGlzLm9wdGlvbnMgPSB1dGlscy5kZWZhdWx0cyhvcHRpb25zLCB0aGlzLm9wdGlvbnMgfHwge30sIGdldERlZmF1bHRzKCkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3JlYWRNdWx0aScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlYWRNdWx0aShsYW5ndWFnZXMsIG5hbWVzcGFjZXMsIGNhbGxiYWNrKSB7XG4gICAgICB2YXIgbG9hZFBhdGggPSB0aGlzLm9wdGlvbnMubG9hZFBhdGg7XG4gICAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5sb2FkUGF0aCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBsb2FkUGF0aCA9IHRoaXMub3B0aW9ucy5sb2FkUGF0aChsYW5ndWFnZXMsIG5hbWVzcGFjZXMpO1xuICAgICAgfVxuXG4gICAgICB2YXIgdXJsID0gdGhpcy5zZXJ2aWNlcy5pbnRlcnBvbGF0b3IuaW50ZXJwb2xhdGUobG9hZFBhdGgsIHsgbG5nOiBsYW5ndWFnZXMuam9pbignKycpLCBuczogbmFtZXNwYWNlcy5qb2luKCcrJykgfSk7XG5cbiAgICAgIHRoaXMubG9hZFVybCh1cmwsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdyZWFkJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVhZChsYW5ndWFnZSwgbmFtZXNwYWNlLCBjYWxsYmFjaykge1xuICAgICAgdmFyIGxvYWRQYXRoID0gdGhpcy5vcHRpb25zLmxvYWRQYXRoO1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMubG9hZFBhdGggPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgbG9hZFBhdGggPSB0aGlzLm9wdGlvbnMubG9hZFBhdGgoW2xhbmd1YWdlXSwgW25hbWVzcGFjZV0pO1xuICAgICAgfVxuXG4gICAgICB2YXIgdXJsID0gdGhpcy5zZXJ2aWNlcy5pbnRlcnBvbGF0b3IuaW50ZXJwb2xhdGUobG9hZFBhdGgsIHsgbG5nOiBsYW5ndWFnZSwgbnM6IG5hbWVzcGFjZSB9KTtcblxuICAgICAgdGhpcy5sb2FkVXJsKHVybCwgY2FsbGJhY2spO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2xvYWRVcmwnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBsb2FkVXJsKHVybCwgY2FsbGJhY2spIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHRoaXMub3B0aW9ucy5hamF4KHVybCwgdGhpcy5vcHRpb25zLCBmdW5jdGlvbiAoZGF0YSwgeGhyKSB7XG4gICAgICAgIGlmICh4aHIuc3RhdHVzID49IDUwMCAmJiB4aHIuc3RhdHVzIDwgNjAwKSByZXR1cm4gY2FsbGJhY2soJ2ZhaWxlZCBsb2FkaW5nICcgKyB1cmwsIHRydWUgLyogcmV0cnkgKi8pO1xuICAgICAgICBpZiAoeGhyLnN0YXR1cyA+PSA0MDAgJiYgeGhyLnN0YXR1cyA8IDUwMCkgcmV0dXJuIGNhbGxiYWNrKCdmYWlsZWQgbG9hZGluZyAnICsgdXJsLCBmYWxzZSAvKiBubyByZXRyeSAqLyk7XG5cbiAgICAgICAgdmFyIHJldCA9IHZvaWQgMCxcbiAgICAgICAgICAgIGVyciA9IHZvaWQgMDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXQgPSBfdGhpcy5vcHRpb25zLnBhcnNlKGRhdGEsIHVybCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBlcnIgPSAnZmFpbGVkIHBhcnNpbmcgJyArIHVybCArICcgdG8ganNvbic7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVyciwgZmFsc2UpO1xuICAgICAgICBjYWxsYmFjayhudWxsLCByZXQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnY3JlYXRlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY3JlYXRlKGxhbmd1YWdlcywgbmFtZXNwYWNlLCBrZXksIGZhbGxiYWNrVmFsdWUpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICBpZiAodHlwZW9mIGxhbmd1YWdlcyA9PT0gJ3N0cmluZycpIGxhbmd1YWdlcyA9IFtsYW5ndWFnZXNdO1xuXG4gICAgICB2YXIgcGF5bG9hZCA9IHt9O1xuICAgICAgcGF5bG9hZFtrZXldID0gZmFsbGJhY2tWYWx1ZSB8fCAnJztcblxuICAgICAgbGFuZ3VhZ2VzLmZvckVhY2goZnVuY3Rpb24gKGxuZykge1xuICAgICAgICB2YXIgdXJsID0gX3RoaXMyLnNlcnZpY2VzLmludGVycG9sYXRvci5pbnRlcnBvbGF0ZShfdGhpczIub3B0aW9ucy5hZGRQYXRoLCB7IGxuZzogbG5nLCBuczogbmFtZXNwYWNlIH0pO1xuXG4gICAgICAgIF90aGlzMi5vcHRpb25zLmFqYXgodXJsLCBfdGhpczIub3B0aW9ucywgZnVuY3Rpb24gKGRhdGEsIHhocikge1xuICAgICAgICAgIC8vY29uc3Qgc3RhdHVzQ29kZSA9IHhoci5zdGF0dXMudG9TdHJpbmcoKTtcbiAgICAgICAgICAvLyBUT0RPOiBpZiBzdGF0dXNDb2RlID09PSA0eHggZG8gbG9nXG4gICAgICAgIH0sIHBheWxvYWQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEJhY2tlbmQ7XG59KCk7XG5cbkJhY2tlbmQudHlwZSA9ICdiYWNrZW5kJztcblxuZXhwb3J0cy5kZWZhdWx0ID0gQmFja2VuZDsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///196\n")},197:function(module,exports,__webpack_require__){eval("module.exports = __webpack_require__(196).default;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaTE4bmV4dC14aHItYmFja2VuZC9pbmRleC5qcz9jZjZkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlCQUFpQixtQkFBTyxDQUFDLEdBQTBCIiwiZmlsZSI6IjE5Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9kaXN0L2NvbW1vbmpzL2luZGV4LmpzJykuZGVmYXVsdDtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///197\n")},198:function(module,exports,__webpack_require__){eval("// This file contains an empty module that does nothing.\n// It's meant to be added as an entry point to the main bundle\n// and helps reliably adding some Aurelia dependencies that are attached \n// to no module in particular, such as `includeAll` results or `aureliaApp`.\n//\n// Trying to attach those dependencies to, for example, 'aurelia-bootstrapper' \n// is unreliable if 'aurelia-bootstrapper' is in a DLL outside the bundle.\n//\n// Trying to attach to 'aurelia-loader-webpack' works well, unless a user\n// configures a customized loader instead (unlikely, but in theory supported).\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXVyZWxpYS13ZWJwYWNrLXBsdWdpbi9ydW50aW1lL2VtcHR5LWVudHJ5LmpzPzE4MDMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTk4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhpcyBmaWxlIGNvbnRhaW5zIGFuIGVtcHR5IG1vZHVsZSB0aGF0IGRvZXMgbm90aGluZy5cbi8vIEl0J3MgbWVhbnQgdG8gYmUgYWRkZWQgYXMgYW4gZW50cnkgcG9pbnQgdG8gdGhlIG1haW4gYnVuZGxlXG4vLyBhbmQgaGVscHMgcmVsaWFibHkgYWRkaW5nIHNvbWUgQXVyZWxpYSBkZXBlbmRlbmNpZXMgdGhhdCBhcmUgYXR0YWNoZWQgXG4vLyB0byBubyBtb2R1bGUgaW4gcGFydGljdWxhciwgc3VjaCBhcyBgaW5jbHVkZUFsbGAgcmVzdWx0cyBvciBgYXVyZWxpYUFwcGAuXG4vL1xuLy8gVHJ5aW5nIHRvIGF0dGFjaCB0aG9zZSBkZXBlbmRlbmNpZXMgdG8sIGZvciBleGFtcGxlLCAnYXVyZWxpYS1ib290c3RyYXBwZXInIFxuLy8gaXMgdW5yZWxpYWJsZSBpZiAnYXVyZWxpYS1ib290c3RyYXBwZXInIGlzIGluIGEgRExMIG91dHNpZGUgdGhlIGJ1bmRsZS5cbi8vXG4vLyBUcnlpbmcgdG8gYXR0YWNoIHRvICdhdXJlbGlhLWxvYWRlci13ZWJwYWNrJyB3b3JrcyB3ZWxsLCB1bmxlc3MgYSB1c2VyXG4vLyBjb25maWd1cmVzIGEgY3VzdG9taXplZCBsb2FkZXIgaW5zdGVhZCAodW5saWtlbHksIGJ1dCBpbiB0aGVvcnkgc3VwcG9ydGVkKS5cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///198\n")},199:function(n,t,i){i(198);i(157);n.exports=i(154)},2:function(module,exports,__webpack_require__){eval("/* WEBPACK VAR INJECTION */(function(module) {var require;//! moment.js\n\n;(function (global, factory) {\n     true ? module.exports = factory() :\n    undefined\n}(this, (function () { 'use strict';\n\n    var hookCallback;\n\n    function hooks () {\n        return hookCallback.apply(null, arguments);\n    }\n\n    // This is done to register the method called with moment()\n    // without creating circular dependencies.\n    function setHookCallback (callback) {\n        hookCallback = callback;\n    }\n\n    function isArray(input) {\n        return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';\n    }\n\n    function isObject(input) {\n        // IE8 will treat undefined and null as object if it wasn't for\n        // input != null\n        return input != null && Object.prototype.toString.call(input) === '[object Object]';\n    }\n\n    function isObjectEmpty(obj) {\n        if (Object.getOwnPropertyNames) {\n            return (Object.getOwnPropertyNames(obj).length === 0);\n        } else {\n            var k;\n            for (k in obj) {\n                if (obj.hasOwnProperty(k)) {\n                    return false;\n                }\n            }\n            return true;\n        }\n    }\n\n    function isUndefined(input) {\n        return input === void 0;\n    }\n\n    function isNumber(input) {\n        return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';\n    }\n\n    function isDate(input) {\n        return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';\n    }\n\n    function map(arr, fn) {\n        var res = [], i;\n        for (i = 0; i < arr.length; ++i) {\n            res.push(fn(arr[i], i));\n        }\n        return res;\n    }\n\n    function hasOwnProp(a, b) {\n        return Object.prototype.hasOwnProperty.call(a, b);\n    }\n\n    function extend(a, b) {\n        for (var i in b) {\n            if (hasOwnProp(b, i)) {\n                a[i] = b[i];\n            }\n        }\n\n        if (hasOwnProp(b, 'toString')) {\n            a.toString = b.toString;\n        }\n\n        if (hasOwnProp(b, 'valueOf')) {\n            a.valueOf = b.valueOf;\n        }\n\n        return a;\n    }\n\n    function createUTC (input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, true).utc();\n    }\n\n    function defaultParsingFlags() {\n        // We need to deep clone this object.\n        return {\n            empty           : false,\n            unusedTokens    : [],\n            unusedInput     : [],\n            overflow        : -2,\n            charsLeftOver   : 0,\n            nullInput       : false,\n            invalidMonth    : null,\n            invalidFormat   : false,\n            userInvalidated : false,\n            iso             : false,\n            parsedDateParts : [],\n            meridiem        : null,\n            rfc2822         : false,\n            weekdayMismatch : false\n        };\n    }\n\n    function getParsingFlags(m) {\n        if (m._pf == null) {\n            m._pf = defaultParsingFlags();\n        }\n        return m._pf;\n    }\n\n    var some;\n    if (Array.prototype.some) {\n        some = Array.prototype.some;\n    } else {\n        some = function (fun) {\n            var t = Object(this);\n            var len = t.length >>> 0;\n\n            for (var i = 0; i < len; i++) {\n                if (i in t && fun.call(this, t[i], i, t)) {\n                    return true;\n                }\n            }\n\n            return false;\n        };\n    }\n\n    function isValid(m) {\n        if (m._isValid == null) {\n            var flags = getParsingFlags(m);\n            var parsedParts = some.call(flags.parsedDateParts, function (i) {\n                return i != null;\n            });\n            var isNowValid = !isNaN(m._d.getTime()) &&\n                flags.overflow < 0 &&\n                !flags.empty &&\n                !flags.invalidMonth &&\n                !flags.invalidWeekday &&\n                !flags.weekdayMismatch &&\n                !flags.nullInput &&\n                !flags.invalidFormat &&\n                !flags.userInvalidated &&\n                (!flags.meridiem || (flags.meridiem && parsedParts));\n\n            if (m._strict) {\n                isNowValid = isNowValid &&\n                    flags.charsLeftOver === 0 &&\n                    flags.unusedTokens.length === 0 &&\n                    flags.bigHour === undefined;\n            }\n\n            if (Object.isFrozen == null || !Object.isFrozen(m)) {\n                m._isValid = isNowValid;\n            }\n            else {\n                return isNowValid;\n            }\n        }\n        return m._isValid;\n    }\n\n    function createInvalid (flags) {\n        var m = createUTC(NaN);\n        if (flags != null) {\n            extend(getParsingFlags(m), flags);\n        }\n        else {\n            getParsingFlags(m).userInvalidated = true;\n        }\n\n        return m;\n    }\n\n    // Plugins that add properties should also add the key here (null value),\n    // so we can properly clone ourselves.\n    var momentProperties = hooks.momentProperties = [];\n\n    function copyConfig(to, from) {\n        var i, prop, val;\n\n        if (!isUndefined(from._isAMomentObject)) {\n            to._isAMomentObject = from._isAMomentObject;\n        }\n        if (!isUndefined(from._i)) {\n            to._i = from._i;\n        }\n        if (!isUndefined(from._f)) {\n            to._f = from._f;\n        }\n        if (!isUndefined(from._l)) {\n            to._l = from._l;\n        }\n        if (!isUndefined(from._strict)) {\n            to._strict = from._strict;\n        }\n        if (!isUndefined(from._tzm)) {\n            to._tzm = from._tzm;\n        }\n        if (!isUndefined(from._isUTC)) {\n            to._isUTC = from._isUTC;\n        }\n        if (!isUndefined(from._offset)) {\n            to._offset = from._offset;\n        }\n        if (!isUndefined(from._pf)) {\n            to._pf = getParsingFlags(from);\n        }\n        if (!isUndefined(from._locale)) {\n            to._locale = from._locale;\n        }\n\n        if (momentProperties.length > 0) {\n            for (i = 0; i < momentProperties.length; i++) {\n                prop = momentProperties[i];\n                val = from[prop];\n                if (!isUndefined(val)) {\n                    to[prop] = val;\n                }\n            }\n        }\n\n        return to;\n    }\n\n    var updateInProgress = false;\n\n    // Moment prototype object\n    function Moment(config) {\n        copyConfig(this, config);\n        this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n        if (!this.isValid()) {\n            this._d = new Date(NaN);\n        }\n        // Prevent infinite loop in case updateOffset creates new moment\n        // objects.\n        if (updateInProgress === false) {\n            updateInProgress = true;\n            hooks.updateOffset(this);\n            updateInProgress = false;\n        }\n    }\n\n    function isMoment (obj) {\n        return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);\n    }\n\n    function absFloor (number) {\n        if (number < 0) {\n            // -0 -> 0\n            return Math.ceil(number) || 0;\n        } else {\n            return Math.floor(number);\n        }\n    }\n\n    function toInt(argumentForCoercion) {\n        var coercedNumber = +argumentForCoercion,\n            value = 0;\n\n        if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n            value = absFloor(coercedNumber);\n        }\n\n        return value;\n    }\n\n    // compare two arrays, return the number of differences\n    function compareArrays(array1, array2, dontConvert) {\n        var len = Math.min(array1.length, array2.length),\n            lengthDiff = Math.abs(array1.length - array2.length),\n            diffs = 0,\n            i;\n        for (i = 0; i < len; i++) {\n            if ((dontConvert && array1[i] !== array2[i]) ||\n                (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {\n                diffs++;\n            }\n        }\n        return diffs + lengthDiff;\n    }\n\n    function warn(msg) {\n        if (hooks.suppressDeprecationWarnings === false &&\n                (typeof console !==  'undefined') && console.warn) {\n            console.warn('Deprecation warning: ' + msg);\n        }\n    }\n\n    function deprecate(msg, fn) {\n        var firstTime = true;\n\n        return extend(function () {\n            if (hooks.deprecationHandler != null) {\n                hooks.deprecationHandler(null, msg);\n            }\n            if (firstTime) {\n                var args = [];\n                var arg;\n                for (var i = 0; i < arguments.length; i++) {\n                    arg = '';\n                    if (typeof arguments[i] === 'object') {\n                        arg += '\\n[' + i + '] ';\n                        for (var key in arguments[0]) {\n                            arg += key + ': ' + arguments[0][key] + ', ';\n                        }\n                        arg = arg.slice(0, -2); // Remove trailing comma and space\n                    } else {\n                        arg = arguments[i];\n                    }\n                    args.push(arg);\n                }\n                warn(msg + '\\nArguments: ' + Array.prototype.slice.call(args).join('') + '\\n' + (new Error()).stack);\n                firstTime = false;\n            }\n            return fn.apply(this, arguments);\n        }, fn);\n    }\n\n    var deprecations = {};\n\n    function deprecateSimple(name, msg) {\n        if (hooks.deprecationHandler != null) {\n            hooks.deprecationHandler(name, msg);\n        }\n        if (!deprecations[name]) {\n            warn(msg);\n            deprecations[name] = true;\n        }\n    }\n\n    hooks.suppressDeprecationWarnings = false;\n    hooks.deprecationHandler = null;\n\n    function isFunction(input) {\n        return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n    }\n\n    function set (config) {\n        var prop, i;\n        for (i in config) {\n            prop = config[i];\n            if (isFunction(prop)) {\n                this[i] = prop;\n            } else {\n                this['_' + i] = prop;\n            }\n        }\n        this._config = config;\n        // Lenient ordinal parsing accepts just a number in addition to\n        // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        this._dayOfMonthOrdinalParseLenient = new RegExp(\n            (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n                '|' + (/\\d{1,2}/).source);\n    }\n\n    function mergeConfigs(parentConfig, childConfig) {\n        var res = extend({}, parentConfig), prop;\n        for (prop in childConfig) {\n            if (hasOwnProp(childConfig, prop)) {\n                if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n                    res[prop] = {};\n                    extend(res[prop], parentConfig[prop]);\n                    extend(res[prop], childConfig[prop]);\n                } else if (childConfig[prop] != null) {\n                    res[prop] = childConfig[prop];\n                } else {\n                    delete res[prop];\n                }\n            }\n        }\n        for (prop in parentConfig) {\n            if (hasOwnProp(parentConfig, prop) &&\n                    !hasOwnProp(childConfig, prop) &&\n                    isObject(parentConfig[prop])) {\n                // make sure changes to properties don't modify parent config\n                res[prop] = extend({}, res[prop]);\n            }\n        }\n        return res;\n    }\n\n    function Locale(config) {\n        if (config != null) {\n            this.set(config);\n        }\n    }\n\n    var keys;\n\n    if (Object.keys) {\n        keys = Object.keys;\n    } else {\n        keys = function (obj) {\n            var i, res = [];\n            for (i in obj) {\n                if (hasOwnProp(obj, i)) {\n                    res.push(i);\n                }\n            }\n            return res;\n        };\n    }\n\n    var defaultCalendar = {\n        sameDay : '[Today at] LT',\n        nextDay : '[Tomorrow at] LT',\n        nextWeek : 'dddd [at] LT',\n        lastDay : '[Yesterday at] LT',\n        lastWeek : '[Last] dddd [at] LT',\n        sameElse : 'L'\n    };\n\n    function calendar (key, mom, now) {\n        var output = this._calendar[key] || this._calendar['sameElse'];\n        return isFunction(output) ? output.call(mom, now) : output;\n    }\n\n    var defaultLongDateFormat = {\n        LTS  : 'h:mm:ss A',\n        LT   : 'h:mm A',\n        L    : 'MM/DD/YYYY',\n        LL   : 'MMMM D, YYYY',\n        LLL  : 'MMMM D, YYYY h:mm A',\n        LLLL : 'dddd, MMMM D, YYYY h:mm A'\n    };\n\n    function longDateFormat (key) {\n        var format = this._longDateFormat[key],\n            formatUpper = this._longDateFormat[key.toUpperCase()];\n\n        if (format || !formatUpper) {\n            return format;\n        }\n\n        this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {\n            return val.slice(1);\n        });\n\n        return this._longDateFormat[key];\n    }\n\n    var defaultInvalidDate = 'Invalid date';\n\n    function invalidDate () {\n        return this._invalidDate;\n    }\n\n    var defaultOrdinal = '%d';\n    var defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n    function ordinal (number) {\n        return this._ordinal.replace('%d', number);\n    }\n\n    var defaultRelativeTime = {\n        future : 'in %s',\n        past   : '%s ago',\n        s  : 'a few seconds',\n        ss : '%d seconds',\n        m  : 'a minute',\n        mm : '%d minutes',\n        h  : 'an hour',\n        hh : '%d hours',\n        d  : 'a day',\n        dd : '%d days',\n        M  : 'a month',\n        MM : '%d months',\n        y  : 'a year',\n        yy : '%d years'\n    };\n\n    function relativeTime (number, withoutSuffix, string, isFuture) {\n        var output = this._relativeTime[string];\n        return (isFunction(output)) ?\n            output(number, withoutSuffix, string, isFuture) :\n            output.replace(/%d/i, number);\n    }\n\n    function pastFuture (diff, output) {\n        var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n        return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n    }\n\n    var aliases = {};\n\n    function addUnitAlias (unit, shorthand) {\n        var lowerCase = unit.toLowerCase();\n        aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n    }\n\n    function normalizeUnits(units) {\n        return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;\n    }\n\n    function normalizeObjectUnits(inputObject) {\n        var normalizedInput = {},\n            normalizedProp,\n            prop;\n\n        for (prop in inputObject) {\n            if (hasOwnProp(inputObject, prop)) {\n                normalizedProp = normalizeUnits(prop);\n                if (normalizedProp) {\n                    normalizedInput[normalizedProp] = inputObject[prop];\n                }\n            }\n        }\n\n        return normalizedInput;\n    }\n\n    var priorities = {};\n\n    function addUnitPriority(unit, priority) {\n        priorities[unit] = priority;\n    }\n\n    function getPrioritizedUnits(unitsObj) {\n        var units = [];\n        for (var u in unitsObj) {\n            units.push({unit: u, priority: priorities[u]});\n        }\n        units.sort(function (a, b) {\n            return a.priority - b.priority;\n        });\n        return units;\n    }\n\n    function zeroFill(number, targetLength, forceSign) {\n        var absNumber = '' + Math.abs(number),\n            zerosToFill = targetLength - absNumber.length,\n            sign = number >= 0;\n        return (sign ? (forceSign ? '+' : '') : '-') +\n            Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;\n    }\n\n    var formattingTokens = /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;\n\n    var localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g;\n\n    var formatFunctions = {};\n\n    var formatTokenFunctions = {};\n\n    // token:    'M'\n    // padded:   ['MM', 2]\n    // ordinal:  'Mo'\n    // callback: function () { this.month() + 1 }\n    function addFormatToken (token, padded, ordinal, callback) {\n        var func = callback;\n        if (typeof callback === 'string') {\n            func = function () {\n                return this[callback]();\n            };\n        }\n        if (token) {\n            formatTokenFunctions[token] = func;\n        }\n        if (padded) {\n            formatTokenFunctions[padded[0]] = function () {\n                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n            };\n        }\n        if (ordinal) {\n            formatTokenFunctions[ordinal] = function () {\n                return this.localeData().ordinal(func.apply(this, arguments), token);\n            };\n        }\n    }\n\n    function removeFormattingTokens(input) {\n        if (input.match(/\\[[\\s\\S]/)) {\n            return input.replace(/^\\[|\\]$/g, '');\n        }\n        return input.replace(/\\\\/g, '');\n    }\n\n    function makeFormatFunction(format) {\n        var array = format.match(formattingTokens), i, length;\n\n        for (i = 0, length = array.length; i < length; i++) {\n            if (formatTokenFunctions[array[i]]) {\n                array[i] = formatTokenFunctions[array[i]];\n            } else {\n                array[i] = removeFormattingTokens(array[i]);\n            }\n        }\n\n        return function (mom) {\n            var output = '', i;\n            for (i = 0; i < length; i++) {\n                output += isFunction(array[i]) ? array[i].call(mom, format) : array[i];\n            }\n            return output;\n        };\n    }\n\n    // format date using native date object\n    function formatMoment(m, format) {\n        if (!m.isValid()) {\n            return m.localeData().invalidDate();\n        }\n\n        format = expandFormat(format, m.localeData());\n        formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);\n\n        return formatFunctions[format](m);\n    }\n\n    function expandFormat(format, locale) {\n        var i = 5;\n\n        function replaceLongDateFormatTokens(input) {\n            return locale.longDateFormat(input) || input;\n        }\n\n        localFormattingTokens.lastIndex = 0;\n        while (i >= 0 && localFormattingTokens.test(format)) {\n            format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);\n            localFormattingTokens.lastIndex = 0;\n            i -= 1;\n        }\n\n        return format;\n    }\n\n    var match1         = /\\d/;            //       0 - 9\n    var match2         = /\\d\\d/;          //      00 - 99\n    var match3         = /\\d{3}/;         //     000 - 999\n    var match4         = /\\d{4}/;         //    0000 - 9999\n    var match6         = /[+-]?\\d{6}/;    // -999999 - 999999\n    var match1to2      = /\\d\\d?/;         //       0 - 99\n    var match3to4      = /\\d\\d\\d\\d?/;     //     999 - 9999\n    var match5to6      = /\\d\\d\\d\\d\\d\\d?/; //   99999 - 999999\n    var match1to3      = /\\d{1,3}/;       //       0 - 999\n    var match1to4      = /\\d{1,4}/;       //       0 - 9999\n    var match1to6      = /[+-]?\\d{1,6}/;  // -999999 - 999999\n\n    var matchUnsigned  = /\\d+/;           //       0 - inf\n    var matchSigned    = /[+-]?\\d+/;      //    -inf - inf\n\n    var matchOffset    = /Z|[+-]\\d\\d:?\\d\\d/gi; // +00:00 -00:00 +0000 -0000 or Z\n    var matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n\n    var matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/; // 123456789 123456789.123\n\n    // any word (or two) characters or numbers including two/three word month in arabic.\n    // includes scottish gaelic two word and hyphenated months\n    var matchWord = /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i;\n\n    var regexes = {};\n\n    function addRegexToken (token, regex, strictRegex) {\n        regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {\n            return (isStrict && strictRegex) ? strictRegex : regex;\n        };\n    }\n\n    function getParseRegexForToken (token, config) {\n        if (!hasOwnProp(regexes, token)) {\n            return new RegExp(unescapeFormat(token));\n        }\n\n        return regexes[token](config._strict, config._locale);\n    }\n\n    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n    function unescapeFormat(s) {\n        return regexEscape(s.replace('\\\\', '').replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (matched, p1, p2, p3, p4) {\n            return p1 || p2 || p3 || p4;\n        }));\n    }\n\n    function regexEscape(s) {\n        return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n    }\n\n    var tokens = {};\n\n    function addParseToken (token, callback) {\n        var i, func = callback;\n        if (typeof token === 'string') {\n            token = [token];\n        }\n        if (isNumber(callback)) {\n            func = function (input, array) {\n                array[callback] = toInt(input);\n            };\n        }\n        for (i = 0; i < token.length; i++) {\n            tokens[token[i]] = func;\n        }\n    }\n\n    function addWeekParseToken (token, callback) {\n        addParseToken(token, function (input, array, config, token) {\n            config._w = config._w || {};\n            callback(input, config._w, config, token);\n        });\n    }\n\n    function addTimeToArrayFromToken(token, input, config) {\n        if (input != null && hasOwnProp(tokens, token)) {\n            tokens[token](input, config._a, config, token);\n        }\n    }\n\n    var YEAR = 0;\n    var MONTH = 1;\n    var DATE = 2;\n    var HOUR = 3;\n    var MINUTE = 4;\n    var SECOND = 5;\n    var MILLISECOND = 6;\n    var WEEK = 7;\n    var WEEKDAY = 8;\n\n    // FORMATTING\n\n    addFormatToken('Y', 0, 0, function () {\n        var y = this.year();\n        return y <= 9999 ? '' + y : '+' + y;\n    });\n\n    addFormatToken(0, ['YY', 2], 0, function () {\n        return this.year() % 100;\n    });\n\n    addFormatToken(0, ['YYYY',   4],       0, 'year');\n    addFormatToken(0, ['YYYYY',  5],       0, 'year');\n    addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n    // ALIASES\n\n    addUnitAlias('year', 'y');\n\n    // PRIORITIES\n\n    addUnitPriority('year', 1);\n\n    // PARSING\n\n    addRegexToken('Y',      matchSigned);\n    addRegexToken('YY',     match1to2, match2);\n    addRegexToken('YYYY',   match1to4, match4);\n    addRegexToken('YYYYY',  match1to6, match6);\n    addRegexToken('YYYYYY', match1to6, match6);\n\n    addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n    addParseToken('YYYY', function (input, array) {\n        array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n    });\n    addParseToken('YY', function (input, array) {\n        array[YEAR] = hooks.parseTwoDigitYear(input);\n    });\n    addParseToken('Y', function (input, array) {\n        array[YEAR] = parseInt(input, 10);\n    });\n\n    // HELPERS\n\n    function daysInYear(year) {\n        return isLeapYear(year) ? 366 : 365;\n    }\n\n    function isLeapYear(year) {\n        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n    }\n\n    // HOOKS\n\n    hooks.parseTwoDigitYear = function (input) {\n        return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n    };\n\n    // MOMENTS\n\n    var getSetYear = makeGetSet('FullYear', true);\n\n    function getIsLeapYear () {\n        return isLeapYear(this.year());\n    }\n\n    function makeGetSet (unit, keepTime) {\n        return function (value) {\n            if (value != null) {\n                set$1(this, unit, value);\n                hooks.updateOffset(this, keepTime);\n                return this;\n            } else {\n                return get(this, unit);\n            }\n        };\n    }\n\n    function get (mom, unit) {\n        return mom.isValid() ?\n            mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;\n    }\n\n    function set$1 (mom, unit, value) {\n        if (mom.isValid() && !isNaN(value)) {\n            if (unit === 'FullYear' && isLeapYear(mom.year()) && mom.month() === 1 && mom.date() === 29) {\n                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value, mom.month(), daysInMonth(value, mom.month()));\n            }\n            else {\n                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function stringGet (units) {\n        units = normalizeUnits(units);\n        if (isFunction(this[units])) {\n            return this[units]();\n        }\n        return this;\n    }\n\n\n    function stringSet (units, value) {\n        if (typeof units === 'object') {\n            units = normalizeObjectUnits(units);\n            var prioritized = getPrioritizedUnits(units);\n            for (var i = 0; i < prioritized.length; i++) {\n                this[prioritized[i].unit](units[prioritized[i].unit]);\n            }\n        } else {\n            units = normalizeUnits(units);\n            if (isFunction(this[units])) {\n                return this[units](value);\n            }\n        }\n        return this;\n    }\n\n    function mod(n, x) {\n        return ((n % x) + x) % x;\n    }\n\n    var indexOf;\n\n    if (Array.prototype.indexOf) {\n        indexOf = Array.prototype.indexOf;\n    } else {\n        indexOf = function (o) {\n            // I know\n            var i;\n            for (i = 0; i < this.length; ++i) {\n                if (this[i] === o) {\n                    return i;\n                }\n            }\n            return -1;\n        };\n    }\n\n    function daysInMonth(year, month) {\n        if (isNaN(year) || isNaN(month)) {\n            return NaN;\n        }\n        var modMonth = mod(month, 12);\n        year += (month - modMonth) / 12;\n        return modMonth === 1 ? (isLeapYear(year) ? 29 : 28) : (31 - modMonth % 7 % 2);\n    }\n\n    // FORMATTING\n\n    addFormatToken('M', ['MM', 2], 'Mo', function () {\n        return this.month() + 1;\n    });\n\n    addFormatToken('MMM', 0, 0, function (format) {\n        return this.localeData().monthsShort(this, format);\n    });\n\n    addFormatToken('MMMM', 0, 0, function (format) {\n        return this.localeData().months(this, format);\n    });\n\n    // ALIASES\n\n    addUnitAlias('month', 'M');\n\n    // PRIORITY\n\n    addUnitPriority('month', 8);\n\n    // PARSING\n\n    addRegexToken('M',    match1to2);\n    addRegexToken('MM',   match1to2, match2);\n    addRegexToken('MMM',  function (isStrict, locale) {\n        return locale.monthsShortRegex(isStrict);\n    });\n    addRegexToken('MMMM', function (isStrict, locale) {\n        return locale.monthsRegex(isStrict);\n    });\n\n    addParseToken(['M', 'MM'], function (input, array) {\n        array[MONTH] = toInt(input) - 1;\n    });\n\n    addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n        var month = config._locale.monthsParse(input, token, config._strict);\n        // if we didn't find a month name, mark the date as invalid.\n        if (month != null) {\n            array[MONTH] = month;\n        } else {\n            getParsingFlags(config).invalidMonth = input;\n        }\n    });\n\n    // LOCALES\n\n    var MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/;\n    var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');\n    function localeMonths (m, format) {\n        if (!m) {\n            return isArray(this._months) ? this._months :\n                this._months['standalone'];\n        }\n        return isArray(this._months) ? this._months[m.month()] :\n            this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];\n    }\n\n    var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');\n    function localeMonthsShort (m, format) {\n        if (!m) {\n            return isArray(this._monthsShort) ? this._monthsShort :\n                this._monthsShort['standalone'];\n        }\n        return isArray(this._monthsShort) ? this._monthsShort[m.month()] :\n            this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];\n    }\n\n    function handleStrictParse(monthName, format, strict) {\n        var i, ii, mom, llc = monthName.toLocaleLowerCase();\n        if (!this._monthsParse) {\n            // this is not used\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n            for (i = 0; i < 12; ++i) {\n                mom = createUTC([2000, i]);\n                this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();\n                this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeMonthsParse (monthName, format, strict) {\n        var i, mom, regex;\n\n        if (this._monthsParseExact) {\n            return handleStrictParse.call(this, monthName, format, strict);\n        }\n\n        if (!this._monthsParse) {\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n        }\n\n        // TODO: add sorting\n        // Sorting makes sure if one month (or abbr) is a prefix of another\n        // see sorting in computeMonthsParse\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            if (strict && !this._longMonthsParse[i]) {\n                this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');\n                this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');\n            }\n            if (!strict && !this._monthsParse[i]) {\n                regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {\n                return i;\n            } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {\n                return i;\n            } else if (!strict && this._monthsParse[i].test(monthName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function setMonth (mom, value) {\n        var dayOfMonth;\n\n        if (!mom.isValid()) {\n            // No op\n            return mom;\n        }\n\n        if (typeof value === 'string') {\n            if (/^\\d+$/.test(value)) {\n                value = toInt(value);\n            } else {\n                value = mom.localeData().monthsParse(value);\n                // TODO: Another silent failure?\n                if (!isNumber(value)) {\n                    return mom;\n                }\n            }\n        }\n\n        dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n        mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n        return mom;\n    }\n\n    function getSetMonth (value) {\n        if (value != null) {\n            setMonth(this, value);\n            hooks.updateOffset(this, true);\n            return this;\n        } else {\n            return get(this, 'Month');\n        }\n    }\n\n    function getDaysInMonth () {\n        return daysInMonth(this.year(), this.month());\n    }\n\n    var defaultMonthsShortRegex = matchWord;\n    function monthsShortRegex (isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsShortStrictRegex;\n            } else {\n                return this._monthsShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsShortRegex')) {\n                this._monthsShortRegex = defaultMonthsShortRegex;\n            }\n            return this._monthsShortStrictRegex && isStrict ?\n                this._monthsShortStrictRegex : this._monthsShortRegex;\n        }\n    }\n\n    var defaultMonthsRegex = matchWord;\n    function monthsRegex (isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsStrictRegex;\n            } else {\n                return this._monthsRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                this._monthsRegex = defaultMonthsRegex;\n            }\n            return this._monthsStrictRegex && isStrict ?\n                this._monthsStrictRegex : this._monthsRegex;\n        }\n    }\n\n    function computeMonthsParse () {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var shortPieces = [], longPieces = [], mixedPieces = [],\n            i, mom;\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            shortPieces.push(this.monthsShort(mom, ''));\n            longPieces.push(this.months(mom, ''));\n            mixedPieces.push(this.months(mom, ''));\n            mixedPieces.push(this.monthsShort(mom, ''));\n        }\n        // Sorting makes sure if one month (or abbr) is a prefix of another it\n        // will match the longer piece.\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n        for (i = 0; i < 12; i++) {\n            shortPieces[i] = regexEscape(shortPieces[i]);\n            longPieces[i] = regexEscape(longPieces[i]);\n        }\n        for (i = 0; i < 24; i++) {\n            mixedPieces[i] = regexEscape(mixedPieces[i]);\n        }\n\n        this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._monthsShortRegex = this._monthsRegex;\n        this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n        this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n    }\n\n    function createDate (y, m, d, h, M, s, ms) {\n        // can't just apply() to create a date:\n        // https://stackoverflow.com/q/181348\n        var date = new Date(y, m, d, h, M, s, ms);\n\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0 && isFinite(date.getFullYear())) {\n            date.setFullYear(y);\n        }\n        return date;\n    }\n\n    function createUTCDate (y) {\n        var date = new Date(Date.UTC.apply(null, arguments));\n\n        // the Date.UTC function remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) {\n            date.setUTCFullYear(y);\n        }\n        return date;\n    }\n\n    // start-of-first-week - start-of-year\n    function firstWeekOffset(year, dow, doy) {\n        var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n            fwd = 7 + dow - doy,\n            // first-week day local weekday -- which local weekday is fwd\n            fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n        return -fwdlw + fwd - 1;\n    }\n\n    // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n    function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n        var localWeekday = (7 + weekday - dow) % 7,\n            weekOffset = firstWeekOffset(year, dow, doy),\n            dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n            resYear, resDayOfYear;\n\n        if (dayOfYear <= 0) {\n            resYear = year - 1;\n            resDayOfYear = daysInYear(resYear) + dayOfYear;\n        } else if (dayOfYear > daysInYear(year)) {\n            resYear = year + 1;\n            resDayOfYear = dayOfYear - daysInYear(year);\n        } else {\n            resYear = year;\n            resDayOfYear = dayOfYear;\n        }\n\n        return {\n            year: resYear,\n            dayOfYear: resDayOfYear\n        };\n    }\n\n    function weekOfYear(mom, dow, doy) {\n        var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n            week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n            resWeek, resYear;\n\n        if (week < 1) {\n            resYear = mom.year() - 1;\n            resWeek = week + weeksInYear(resYear, dow, doy);\n        } else if (week > weeksInYear(mom.year(), dow, doy)) {\n            resWeek = week - weeksInYear(mom.year(), dow, doy);\n            resYear = mom.year() + 1;\n        } else {\n            resYear = mom.year();\n            resWeek = week;\n        }\n\n        return {\n            week: resWeek,\n            year: resYear\n        };\n    }\n\n    function weeksInYear(year, dow, doy) {\n        var weekOffset = firstWeekOffset(year, dow, doy),\n            weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n        return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n    }\n\n    // FORMATTING\n\n    addFormatToken('w', ['ww', 2], 'wo', 'week');\n    addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n    // ALIASES\n\n    addUnitAlias('week', 'w');\n    addUnitAlias('isoWeek', 'W');\n\n    // PRIORITIES\n\n    addUnitPriority('week', 5);\n    addUnitPriority('isoWeek', 5);\n\n    // PARSING\n\n    addRegexToken('w',  match1to2);\n    addRegexToken('ww', match1to2, match2);\n    addRegexToken('W',  match1to2);\n    addRegexToken('WW', match1to2, match2);\n\n    addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {\n        week[token.substr(0, 1)] = toInt(input);\n    });\n\n    // HELPERS\n\n    // LOCALES\n\n    function localeWeek (mom) {\n        return weekOfYear(mom, this._week.dow, this._week.doy).week;\n    }\n\n    var defaultLocaleWeek = {\n        dow : 0, // Sunday is the first day of the week.\n        doy : 6  // The week that contains Jan 1st is the first week of the year.\n    };\n\n    function localeFirstDayOfWeek () {\n        return this._week.dow;\n    }\n\n    function localeFirstDayOfYear () {\n        return this._week.doy;\n    }\n\n    // MOMENTS\n\n    function getSetWeek (input) {\n        var week = this.localeData().week(this);\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    function getSetISOWeek (input) {\n        var week = weekOfYear(this, 1, 4).week;\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('d', 0, 'do', 'day');\n\n    addFormatToken('dd', 0, 0, function (format) {\n        return this.localeData().weekdaysMin(this, format);\n    });\n\n    addFormatToken('ddd', 0, 0, function (format) {\n        return this.localeData().weekdaysShort(this, format);\n    });\n\n    addFormatToken('dddd', 0, 0, function (format) {\n        return this.localeData().weekdays(this, format);\n    });\n\n    addFormatToken('e', 0, 0, 'weekday');\n    addFormatToken('E', 0, 0, 'isoWeekday');\n\n    // ALIASES\n\n    addUnitAlias('day', 'd');\n    addUnitAlias('weekday', 'e');\n    addUnitAlias('isoWeekday', 'E');\n\n    // PRIORITY\n    addUnitPriority('day', 11);\n    addUnitPriority('weekday', 11);\n    addUnitPriority('isoWeekday', 11);\n\n    // PARSING\n\n    addRegexToken('d',    match1to2);\n    addRegexToken('e',    match1to2);\n    addRegexToken('E',    match1to2);\n    addRegexToken('dd',   function (isStrict, locale) {\n        return locale.weekdaysMinRegex(isStrict);\n    });\n    addRegexToken('ddd',   function (isStrict, locale) {\n        return locale.weekdaysShortRegex(isStrict);\n    });\n    addRegexToken('dddd',   function (isStrict, locale) {\n        return locale.weekdaysRegex(isStrict);\n    });\n\n    addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n        var weekday = config._locale.weekdaysParse(input, token, config._strict);\n        // if we didn't get a weekday name, mark the date as invalid\n        if (weekday != null) {\n            week.d = weekday;\n        } else {\n            getParsingFlags(config).invalidWeekday = input;\n        }\n    });\n\n    addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n        week[token] = toInt(input);\n    });\n\n    // HELPERS\n\n    function parseWeekday(input, locale) {\n        if (typeof input !== 'string') {\n            return input;\n        }\n\n        if (!isNaN(input)) {\n            return parseInt(input, 10);\n        }\n\n        input = locale.weekdaysParse(input);\n        if (typeof input === 'number') {\n            return input;\n        }\n\n        return null;\n    }\n\n    function parseIsoWeekday(input, locale) {\n        if (typeof input === 'string') {\n            return locale.weekdaysParse(input) % 7 || 7;\n        }\n        return isNaN(input) ? null : input;\n    }\n\n    // LOCALES\n\n    var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');\n    function localeWeekdays (m, format) {\n        if (!m) {\n            return isArray(this._weekdays) ? this._weekdays :\n                this._weekdays['standalone'];\n        }\n        return isArray(this._weekdays) ? this._weekdays[m.day()] :\n            this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()];\n    }\n\n    var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');\n    function localeWeekdaysShort (m) {\n        return (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort;\n    }\n\n    var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');\n    function localeWeekdaysMin (m) {\n        return (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin;\n    }\n\n    function handleStrictParse$1(weekdayName, format, strict) {\n        var i, ii, mom, llc = weekdayName.toLocaleLowerCase();\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._minWeekdaysParse = [];\n\n            for (i = 0; i < 7; ++i) {\n                mom = createUTC([2000, 1]).day(i);\n                this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();\n                this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();\n                this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeWeekdaysParse (weekdayName, format, strict) {\n        var i, mom, regex;\n\n        if (this._weekdaysParseExact) {\n            return handleStrictParse$1.call(this, weekdayName, format, strict);\n        }\n\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._minWeekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._fullWeekdaysParse = [];\n        }\n\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n\n            mom = createUTC([2000, 1]).day(i);\n            if (strict && !this._fullWeekdaysParse[i]) {\n                this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\\.?') + '$', 'i');\n                this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\\.?') + '$', 'i');\n                this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\\.?') + '$', 'i');\n            }\n            if (!this._weekdaysParse[i]) {\n                regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');\n                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {\n                return i;\n            } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {\n                return i;\n            } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {\n                return i;\n            } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function getSetDayOfWeek (input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n        if (input != null) {\n            input = parseWeekday(input, this.localeData());\n            return this.add(input - day, 'd');\n        } else {\n            return day;\n        }\n    }\n\n    function getSetLocaleDayOfWeek (input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n        return input == null ? weekday : this.add(input - weekday, 'd');\n    }\n\n    function getSetISODayOfWeek (input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n\n        // behaves the same as moment#day except\n        // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n        // as a setter, sunday should belong to the previous week.\n\n        if (input != null) {\n            var weekday = parseIsoWeekday(input, this.localeData());\n            return this.day(this.day() % 7 ? weekday : weekday - 7);\n        } else {\n            return this.day() || 7;\n        }\n    }\n\n    var defaultWeekdaysRegex = matchWord;\n    function weekdaysRegex (isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysStrictRegex;\n            } else {\n                return this._weekdaysRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                this._weekdaysRegex = defaultWeekdaysRegex;\n            }\n            return this._weekdaysStrictRegex && isStrict ?\n                this._weekdaysStrictRegex : this._weekdaysRegex;\n        }\n    }\n\n    var defaultWeekdaysShortRegex = matchWord;\n    function weekdaysShortRegex (isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysShortStrictRegex;\n            } else {\n                return this._weekdaysShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n                this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n            }\n            return this._weekdaysShortStrictRegex && isStrict ?\n                this._weekdaysShortStrictRegex : this._weekdaysShortRegex;\n        }\n    }\n\n    var defaultWeekdaysMinRegex = matchWord;\n    function weekdaysMinRegex (isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysMinStrictRegex;\n            } else {\n                return this._weekdaysMinRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n                this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n            }\n            return this._weekdaysMinStrictRegex && isStrict ?\n                this._weekdaysMinStrictRegex : this._weekdaysMinRegex;\n        }\n    }\n\n\n    function computeWeekdaysParse () {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [],\n            i, mom, minp, shortp, longp;\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, 1]).day(i);\n            minp = this.weekdaysMin(mom, '');\n            shortp = this.weekdaysShort(mom, '');\n            longp = this.weekdays(mom, '');\n            minPieces.push(minp);\n            shortPieces.push(shortp);\n            longPieces.push(longp);\n            mixedPieces.push(minp);\n            mixedPieces.push(shortp);\n            mixedPieces.push(longp);\n        }\n        // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n        // will match the longer piece.\n        minPieces.sort(cmpLenRev);\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n        for (i = 0; i < 7; i++) {\n            shortPieces[i] = regexEscape(shortPieces[i]);\n            longPieces[i] = regexEscape(longPieces[i]);\n            mixedPieces[i] = regexEscape(mixedPieces[i]);\n        }\n\n        this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._weekdaysShortRegex = this._weekdaysRegex;\n        this._weekdaysMinRegex = this._weekdaysRegex;\n\n        this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n        this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n        this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');\n    }\n\n    // FORMATTING\n\n    function hFormat() {\n        return this.hours() % 12 || 12;\n    }\n\n    function kFormat() {\n        return this.hours() || 24;\n    }\n\n    addFormatToken('H', ['HH', 2], 0, 'hour');\n    addFormatToken('h', ['hh', 2], 0, hFormat);\n    addFormatToken('k', ['kk', 2], 0, kFormat);\n\n    addFormatToken('hmm', 0, 0, function () {\n        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('hmmss', 0, 0, function () {\n        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2);\n    });\n\n    addFormatToken('Hmm', 0, 0, function () {\n        return '' + this.hours() + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('Hmmss', 0, 0, function () {\n        return '' + this.hours() + zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2);\n    });\n\n    function meridiem (token, lowercase) {\n        addFormatToken(token, 0, 0, function () {\n            return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);\n        });\n    }\n\n    meridiem('a', true);\n    meridiem('A', false);\n\n    // ALIASES\n\n    addUnitAlias('hour', 'h');\n\n    // PRIORITY\n    addUnitPriority('hour', 13);\n\n    // PARSING\n\n    function matchMeridiem (isStrict, locale) {\n        return locale._meridiemParse;\n    }\n\n    addRegexToken('a',  matchMeridiem);\n    addRegexToken('A',  matchMeridiem);\n    addRegexToken('H',  match1to2);\n    addRegexToken('h',  match1to2);\n    addRegexToken('k',  match1to2);\n    addRegexToken('HH', match1to2, match2);\n    addRegexToken('hh', match1to2, match2);\n    addRegexToken('kk', match1to2, match2);\n\n    addRegexToken('hmm', match3to4);\n    addRegexToken('hmmss', match5to6);\n    addRegexToken('Hmm', match3to4);\n    addRegexToken('Hmmss', match5to6);\n\n    addParseToken(['H', 'HH'], HOUR);\n    addParseToken(['k', 'kk'], function (input, array, config) {\n        var kInput = toInt(input);\n        array[HOUR] = kInput === 24 ? 0 : kInput;\n    });\n    addParseToken(['a', 'A'], function (input, array, config) {\n        config._isPm = config._locale.isPM(input);\n        config._meridiem = input;\n    });\n    addParseToken(['h', 'hh'], function (input, array, config) {\n        array[HOUR] = toInt(input);\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmmss', function (input, array, config) {\n        var pos1 = input.length - 4;\n        var pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('Hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n    });\n    addParseToken('Hmmss', function (input, array, config) {\n        var pos1 = input.length - 4;\n        var pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n    });\n\n    // LOCALES\n\n    function localeIsPM (input) {\n        // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n        // Using charAt should be more compatible.\n        return ((input + '').toLowerCase().charAt(0) === 'p');\n    }\n\n    var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i;\n    function localeMeridiem (hours, minutes, isLower) {\n        if (hours > 11) {\n            return isLower ? 'pm' : 'PM';\n        } else {\n            return isLower ? 'am' : 'AM';\n        }\n    }\n\n\n    // MOMENTS\n\n    // Setting the hour should keep the time, because the user explicitly\n    // specified which hour they want. So trying to maintain the same hour (in\n    // a new timezone) makes sense. Adding/subtracting hours does not follow\n    // this rule.\n    var getSetHour = makeGetSet('Hours', true);\n\n    var baseConfig = {\n        calendar: defaultCalendar,\n        longDateFormat: defaultLongDateFormat,\n        invalidDate: defaultInvalidDate,\n        ordinal: defaultOrdinal,\n        dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n        relativeTime: defaultRelativeTime,\n\n        months: defaultLocaleMonths,\n        monthsShort: defaultLocaleMonthsShort,\n\n        week: defaultLocaleWeek,\n\n        weekdays: defaultLocaleWeekdays,\n        weekdaysMin: defaultLocaleWeekdaysMin,\n        weekdaysShort: defaultLocaleWeekdaysShort,\n\n        meridiemParse: defaultLocaleMeridiemParse\n    };\n\n    // internal storage for locale config files\n    var locales = {};\n    var localeFamilies = {};\n    var globalLocale;\n\n    function normalizeLocale(key) {\n        return key ? key.toLowerCase().replace('_', '-') : key;\n    }\n\n    // pick the locale from the array\n    // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n    // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n    function chooseLocale(names) {\n        var i = 0, j, next, locale, split;\n\n        while (i < names.length) {\n            split = normalizeLocale(names[i]).split('-');\n            j = split.length;\n            next = normalizeLocale(names[i + 1]);\n            next = next ? next.split('-') : null;\n            while (j > 0) {\n                locale = loadLocale(split.slice(0, j).join('-'));\n                if (locale) {\n                    return locale;\n                }\n                if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {\n                    //the next array item is better than a shallower substring of this one\n                    break;\n                }\n                j--;\n            }\n            i++;\n        }\n        return globalLocale;\n    }\n\n    function loadLocale(name) {\n        var oldLocale = null;\n        // TODO: Find a better way to register and load all the locales in Node\n        if (!locales[name] && (typeof module !== 'undefined') &&\n                module && module.exports) {\n            try {\n                oldLocale = globalLocale._abbr;\n                var aliasedRequire = require;\n                __webpack_require__(193)(\"./\" + name);\n                getSetGlobalLocale(oldLocale);\n            } catch (e) {}\n        }\n        return locales[name];\n    }\n\n    // This function will load locale and then set the global locale.  If\n    // no arguments are passed in, it will simply return the current global\n    // locale key.\n    function getSetGlobalLocale (key, values) {\n        var data;\n        if (key) {\n            if (isUndefined(values)) {\n                data = getLocale(key);\n            }\n            else {\n                data = defineLocale(key, values);\n            }\n\n            if (data) {\n                // moment.duration._locale = moment._locale = data;\n                globalLocale = data;\n            }\n            else {\n                if ((typeof console !==  'undefined') && console.warn) {\n                    //warn user if arguments are passed but the locale could not be set\n                    console.warn('Locale ' + key +  ' not found. Did you forget to load it?');\n                }\n            }\n        }\n\n        return globalLocale._abbr;\n    }\n\n    function defineLocale (name, config) {\n        if (config !== null) {\n            var locale, parentConfig = baseConfig;\n            config.abbr = name;\n            if (locales[name] != null) {\n                deprecateSimple('defineLocaleOverride',\n                        'use moment.updateLocale(localeName, config) to change ' +\n                        'an existing locale. moment.defineLocale(localeName, ' +\n                        'config) should only be used for creating a new locale ' +\n                        'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');\n                parentConfig = locales[name]._config;\n            } else if (config.parentLocale != null) {\n                if (locales[config.parentLocale] != null) {\n                    parentConfig = locales[config.parentLocale]._config;\n                } else {\n                    locale = loadLocale(config.parentLocale);\n                    if (locale != null) {\n                        parentConfig = locale._config;\n                    } else {\n                        if (!localeFamilies[config.parentLocale]) {\n                            localeFamilies[config.parentLocale] = [];\n                        }\n                        localeFamilies[config.parentLocale].push({\n                            name: name,\n                            config: config\n                        });\n                        return null;\n                    }\n                }\n            }\n            locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n            if (localeFamilies[name]) {\n                localeFamilies[name].forEach(function (x) {\n                    defineLocale(x.name, x.config);\n                });\n            }\n\n            // backwards compat for now: also set the locale\n            // make sure we set the locale AFTER all child locales have been\n            // created, so we won't end up with the child locale set.\n            getSetGlobalLocale(name);\n\n\n            return locales[name];\n        } else {\n            // useful for testing\n            delete locales[name];\n            return null;\n        }\n    }\n\n    function updateLocale(name, config) {\n        if (config != null) {\n            var locale, tmpLocale, parentConfig = baseConfig;\n            // MERGE\n            tmpLocale = loadLocale(name);\n            if (tmpLocale != null) {\n                parentConfig = tmpLocale._config;\n            }\n            config = mergeConfigs(parentConfig, config);\n            locale = new Locale(config);\n            locale.parentLocale = locales[name];\n            locales[name] = locale;\n\n            // backwards compat for now: also set the locale\n            getSetGlobalLocale(name);\n        } else {\n            // pass null for config to unupdate, useful for tests\n            if (locales[name] != null) {\n                if (locales[name].parentLocale != null) {\n                    locales[name] = locales[name].parentLocale;\n                } else if (locales[name] != null) {\n                    delete locales[name];\n                }\n            }\n        }\n        return locales[name];\n    }\n\n    // returns locale data\n    function getLocale (key) {\n        var locale;\n\n        if (key && key._locale && key._locale._abbr) {\n            key = key._locale._abbr;\n        }\n\n        if (!key) {\n            return globalLocale;\n        }\n\n        if (!isArray(key)) {\n            //short-circuit everything else\n            locale = loadLocale(key);\n            if (locale) {\n                return locale;\n            }\n            key = [key];\n        }\n\n        return chooseLocale(key);\n    }\n\n    function listLocales() {\n        return keys(locales);\n    }\n\n    function checkOverflow (m) {\n        var overflow;\n        var a = m._a;\n\n        if (a && getParsingFlags(m).overflow === -2) {\n            overflow =\n                a[MONTH]       < 0 || a[MONTH]       > 11  ? MONTH :\n                a[DATE]        < 1 || a[DATE]        > daysInMonth(a[YEAR], a[MONTH]) ? DATE :\n                a[HOUR]        < 0 || a[HOUR]        > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :\n                a[MINUTE]      < 0 || a[MINUTE]      > 59  ? MINUTE :\n                a[SECOND]      < 0 || a[SECOND]      > 59  ? SECOND :\n                a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :\n                -1;\n\n            if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {\n                overflow = DATE;\n            }\n            if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n                overflow = WEEK;\n            }\n            if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n                overflow = WEEKDAY;\n            }\n\n            getParsingFlags(m).overflow = overflow;\n        }\n\n        return m;\n    }\n\n    // Pick the first defined of two or three arguments.\n    function defaults(a, b, c) {\n        if (a != null) {\n            return a;\n        }\n        if (b != null) {\n            return b;\n        }\n        return c;\n    }\n\n    function currentDateArray(config) {\n        // hooks is actually the exported moment object\n        var nowValue = new Date(hooks.now());\n        if (config._useUTC) {\n            return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];\n        }\n        return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n    }\n\n    // convert an array to a date.\n    // the array should mirror the parameters below\n    // note: all values past the year are optional and will default to the lowest possible value.\n    // [year, month, day , hour, minute, second, millisecond]\n    function configFromArray (config) {\n        var i, date, input = [], currentDate, expectedWeekday, yearToUse;\n\n        if (config._d) {\n            return;\n        }\n\n        currentDate = currentDateArray(config);\n\n        //compute day of the year from weeks and weekdays\n        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n            dayOfYearFromWeekInfo(config);\n        }\n\n        //if the day of the year is set, figure out what it is\n        if (config._dayOfYear != null) {\n            yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n            if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {\n                getParsingFlags(config)._overflowDayOfYear = true;\n            }\n\n            date = createUTCDate(yearToUse, 0, config._dayOfYear);\n            config._a[MONTH] = date.getUTCMonth();\n            config._a[DATE] = date.getUTCDate();\n        }\n\n        // Default to current date.\n        // * if no year, month, day of month are given, default to today\n        // * if day of month is given, default month and year\n        // * if month is given, default only year\n        // * if year is given, don't default anything\n        for (i = 0; i < 3 && config._a[i] == null; ++i) {\n            config._a[i] = input[i] = currentDate[i];\n        }\n\n        // Zero out whatever was not defaulted, including time\n        for (; i < 7; i++) {\n            config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];\n        }\n\n        // Check for 24:00:00.000\n        if (config._a[HOUR] === 24 &&\n                config._a[MINUTE] === 0 &&\n                config._a[SECOND] === 0 &&\n                config._a[MILLISECOND] === 0) {\n            config._nextDay = true;\n            config._a[HOUR] = 0;\n        }\n\n        config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);\n        expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay();\n\n        // Apply timezone offset from input. The actual utcOffset can be changed\n        // with parseZone.\n        if (config._tzm != null) {\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n        }\n\n        if (config._nextDay) {\n            config._a[HOUR] = 24;\n        }\n\n        // check for mismatching day of week\n        if (config._w && typeof config._w.d !== 'undefined' && config._w.d !== expectedWeekday) {\n            getParsingFlags(config).weekdayMismatch = true;\n        }\n    }\n\n    function dayOfYearFromWeekInfo(config) {\n        var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow;\n\n        w = config._w;\n        if (w.GG != null || w.W != null || w.E != null) {\n            dow = 1;\n            doy = 4;\n\n            // TODO: We need to take the current isoWeekYear, but that depends on\n            // how we interpret now (local, utc, fixed offset). So create\n            // a now version of current config (take local/utc/offset flags, and\n            // create now).\n            weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);\n            week = defaults(w.W, 1);\n            weekday = defaults(w.E, 1);\n            if (weekday < 1 || weekday > 7) {\n                weekdayOverflow = true;\n            }\n        } else {\n            dow = config._locale._week.dow;\n            doy = config._locale._week.doy;\n\n            var curWeek = weekOfYear(createLocal(), dow, doy);\n\n            weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n            // Default to current week.\n            week = defaults(w.w, curWeek.week);\n\n            if (w.d != null) {\n                // weekday -- low day numbers are considered next week\n                weekday = w.d;\n                if (weekday < 0 || weekday > 6) {\n                    weekdayOverflow = true;\n                }\n            } else if (w.e != null) {\n                // local weekday -- counting starts from begining of week\n                weekday = w.e + dow;\n                if (w.e < 0 || w.e > 6) {\n                    weekdayOverflow = true;\n                }\n            } else {\n                // default to begining of week\n                weekday = dow;\n            }\n        }\n        if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n            getParsingFlags(config)._overflowWeeks = true;\n        } else if (weekdayOverflow != null) {\n            getParsingFlags(config)._overflowWeekday = true;\n        } else {\n            temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n            config._a[YEAR] = temp.year;\n            config._dayOfYear = temp.dayOfYear;\n        }\n    }\n\n    // iso 8601 regex\n    // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n    var extendedIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n    var basicIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n\n    var tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/;\n\n    var isoDates = [\n        ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n        ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n        ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n        ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n        ['YYYY-DDD', /\\d{4}-\\d{3}/],\n        ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n        ['YYYYYYMMDD', /[+-]\\d{10}/],\n        ['YYYYMMDD', /\\d{8}/],\n        // YYYYMM is NOT allowed by the standard\n        ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n        ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n        ['YYYYDDD', /\\d{7}/]\n    ];\n\n    // iso time formats and regexes\n    var isoTimes = [\n        ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n        ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n        ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n        ['HH:mm', /\\d\\d:\\d\\d/],\n        ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n        ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n        ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n        ['HHmm', /\\d\\d\\d\\d/],\n        ['HH', /\\d\\d/]\n    ];\n\n    var aspNetJsonRegex = /^\\/?Date\\((\\-?\\d+)/i;\n\n    // date from iso format\n    function configFromISO(config) {\n        var i, l,\n            string = config._i,\n            match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n            allowTime, dateFormat, timeFormat, tzFormat;\n\n        if (match) {\n            getParsingFlags(config).iso = true;\n\n            for (i = 0, l = isoDates.length; i < l; i++) {\n                if (isoDates[i][1].exec(match[1])) {\n                    dateFormat = isoDates[i][0];\n                    allowTime = isoDates[i][2] !== false;\n                    break;\n                }\n            }\n            if (dateFormat == null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[3]) {\n                for (i = 0, l = isoTimes.length; i < l; i++) {\n                    if (isoTimes[i][1].exec(match[3])) {\n                        // match[2] should be 'T' or space\n                        timeFormat = (match[2] || ' ') + isoTimes[i][0];\n                        break;\n                    }\n                }\n                if (timeFormat == null) {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            if (!allowTime && timeFormat != null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[4]) {\n                if (tzRegex.exec(match[4])) {\n                    tzFormat = 'Z';\n                } else {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n            configFromStringAndFormat(config);\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n    var rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/;\n\n    function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n        var result = [\n            untruncateYear(yearStr),\n            defaultLocaleMonthsShort.indexOf(monthStr),\n            parseInt(dayStr, 10),\n            parseInt(hourStr, 10),\n            parseInt(minuteStr, 10)\n        ];\n\n        if (secondStr) {\n            result.push(parseInt(secondStr, 10));\n        }\n\n        return result;\n    }\n\n    function untruncateYear(yearStr) {\n        var year = parseInt(yearStr, 10);\n        if (year <= 49) {\n            return 2000 + year;\n        } else if (year <= 999) {\n            return 1900 + year;\n        }\n        return year;\n    }\n\n    function preprocessRFC2822(s) {\n        // Remove comments and folding whitespace and replace multiple-spaces with a single space\n        return s.replace(/\\([^)]*\\)|[\\n\\t]/g, ' ').replace(/(\\s\\s+)/g, ' ').trim();\n    }\n\n    function checkWeekday(weekdayStr, parsedInput, config) {\n        if (weekdayStr) {\n            // TODO: Replace the vanilla JS Date object with an indepentent day-of-week check.\n            var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n                weekdayActual = new Date(parsedInput[0], parsedInput[1], parsedInput[2]).getDay();\n            if (weekdayProvided !== weekdayActual) {\n                getParsingFlags(config).weekdayMismatch = true;\n                config._isValid = false;\n                return false;\n            }\n        }\n        return true;\n    }\n\n    var obsOffsets = {\n        UT: 0,\n        GMT: 0,\n        EDT: -4 * 60,\n        EST: -5 * 60,\n        CDT: -5 * 60,\n        CST: -6 * 60,\n        MDT: -6 * 60,\n        MST: -7 * 60,\n        PDT: -7 * 60,\n        PST: -8 * 60\n    };\n\n    function calculateOffset(obsOffset, militaryOffset, numOffset) {\n        if (obsOffset) {\n            return obsOffsets[obsOffset];\n        } else if (militaryOffset) {\n            // the only allowed military tz is Z\n            return 0;\n        } else {\n            var hm = parseInt(numOffset, 10);\n            var m = hm % 100, h = (hm - m) / 100;\n            return h * 60 + m;\n        }\n    }\n\n    // date and time from ref 2822 format\n    function configFromRFC2822(config) {\n        var match = rfc2822.exec(preprocessRFC2822(config._i));\n        if (match) {\n            var parsedArray = extractFromRFC2822Strings(match[4], match[3], match[2], match[5], match[6], match[7]);\n            if (!checkWeekday(match[1], parsedArray, config)) {\n                return;\n            }\n\n            config._a = parsedArray;\n            config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n            config._d = createUTCDate.apply(null, config._a);\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n            getParsingFlags(config).rfc2822 = true;\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    // date from iso format or fallback\n    function configFromString(config) {\n        var matched = aspNetJsonRegex.exec(config._i);\n\n        if (matched !== null) {\n            config._d = new Date(+matched[1]);\n            return;\n        }\n\n        configFromISO(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        configFromRFC2822(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        // Final attempt, use Input Fallback\n        hooks.createFromInputFallback(config);\n    }\n\n    hooks.createFromInputFallback = deprecate(\n        'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n        'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n        'discouraged and will be removed in an upcoming major release. Please refer to ' +\n        'http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n        function (config) {\n            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n        }\n    );\n\n    // constant that refers to the ISO standard\n    hooks.ISO_8601 = function () {};\n\n    // constant that refers to the RFC 2822 form\n    hooks.RFC_2822 = function () {};\n\n    // date from string and format string\n    function configFromStringAndFormat(config) {\n        // TODO: Move this to another part of the creation flow to prevent circular deps\n        if (config._f === hooks.ISO_8601) {\n            configFromISO(config);\n            return;\n        }\n        if (config._f === hooks.RFC_2822) {\n            configFromRFC2822(config);\n            return;\n        }\n        config._a = [];\n        getParsingFlags(config).empty = true;\n\n        // This array is used to make a Date, either with `new Date` or `Date.UTC`\n        var string = '' + config._i,\n            i, parsedInput, tokens, token, skipped,\n            stringLength = string.length,\n            totalParsedInputLength = 0;\n\n        tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];\n\n        for (i = 0; i < tokens.length; i++) {\n            token = tokens[i];\n            parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];\n            // console.log('token', token, 'parsedInput', parsedInput,\n            //         'regex', getParseRegexForToken(token, config));\n            if (parsedInput) {\n                skipped = string.substr(0, string.indexOf(parsedInput));\n                if (skipped.length > 0) {\n                    getParsingFlags(config).unusedInput.push(skipped);\n                }\n                string = string.slice(string.indexOf(parsedInput) + parsedInput.length);\n                totalParsedInputLength += parsedInput.length;\n            }\n            // don't parse if it's not a known token\n            if (formatTokenFunctions[token]) {\n                if (parsedInput) {\n                    getParsingFlags(config).empty = false;\n                }\n                else {\n                    getParsingFlags(config).unusedTokens.push(token);\n                }\n                addTimeToArrayFromToken(token, parsedInput, config);\n            }\n            else if (config._strict && !parsedInput) {\n                getParsingFlags(config).unusedTokens.push(token);\n            }\n        }\n\n        // add remaining unparsed input length to the string\n        getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;\n        if (string.length > 0) {\n            getParsingFlags(config).unusedInput.push(string);\n        }\n\n        // clear _12h flag if hour is <= 12\n        if (config._a[HOUR] <= 12 &&\n            getParsingFlags(config).bigHour === true &&\n            config._a[HOUR] > 0) {\n            getParsingFlags(config).bigHour = undefined;\n        }\n\n        getParsingFlags(config).parsedDateParts = config._a.slice(0);\n        getParsingFlags(config).meridiem = config._meridiem;\n        // handle meridiem\n        config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);\n\n        configFromArray(config);\n        checkOverflow(config);\n    }\n\n\n    function meridiemFixWrap (locale, hour, meridiem) {\n        var isPm;\n\n        if (meridiem == null) {\n            // nothing to do\n            return hour;\n        }\n        if (locale.meridiemHour != null) {\n            return locale.meridiemHour(hour, meridiem);\n        } else if (locale.isPM != null) {\n            // Fallback\n            isPm = locale.isPM(meridiem);\n            if (isPm && hour < 12) {\n                hour += 12;\n            }\n            if (!isPm && hour === 12) {\n                hour = 0;\n            }\n            return hour;\n        } else {\n            // this is not supposed to happen\n            return hour;\n        }\n    }\n\n    // date from string and array of format strings\n    function configFromStringAndArray(config) {\n        var tempConfig,\n            bestMoment,\n\n            scoreToBeat,\n            i,\n            currentScore;\n\n        if (config._f.length === 0) {\n            getParsingFlags(config).invalidFormat = true;\n            config._d = new Date(NaN);\n            return;\n        }\n\n        for (i = 0; i < config._f.length; i++) {\n            currentScore = 0;\n            tempConfig = copyConfig({}, config);\n            if (config._useUTC != null) {\n                tempConfig._useUTC = config._useUTC;\n            }\n            tempConfig._f = config._f[i];\n            configFromStringAndFormat(tempConfig);\n\n            if (!isValid(tempConfig)) {\n                continue;\n            }\n\n            // if there is any input that was not parsed add a penalty for that format\n            currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n            //or tokens\n            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n            getParsingFlags(tempConfig).score = currentScore;\n\n            if (scoreToBeat == null || currentScore < scoreToBeat) {\n                scoreToBeat = currentScore;\n                bestMoment = tempConfig;\n            }\n        }\n\n        extend(config, bestMoment || tempConfig);\n    }\n\n    function configFromObject(config) {\n        if (config._d) {\n            return;\n        }\n\n        var i = normalizeObjectUnits(config._i);\n        config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) {\n            return obj && parseInt(obj, 10);\n        });\n\n        configFromArray(config);\n    }\n\n    function createFromConfig (config) {\n        var res = new Moment(checkOverflow(prepareConfig(config)));\n        if (res._nextDay) {\n            // Adding is smart enough around DST\n            res.add(1, 'd');\n            res._nextDay = undefined;\n        }\n\n        return res;\n    }\n\n    function prepareConfig (config) {\n        var input = config._i,\n            format = config._f;\n\n        config._locale = config._locale || getLocale(config._l);\n\n        if (input === null || (format === undefined && input === '')) {\n            return createInvalid({nullInput: true});\n        }\n\n        if (typeof input === 'string') {\n            config._i = input = config._locale.preparse(input);\n        }\n\n        if (isMoment(input)) {\n            return new Moment(checkOverflow(input));\n        } else if (isDate(input)) {\n            config._d = input;\n        } else if (isArray(format)) {\n            configFromStringAndArray(config);\n        } else if (format) {\n            configFromStringAndFormat(config);\n        }  else {\n            configFromInput(config);\n        }\n\n        if (!isValid(config)) {\n            config._d = null;\n        }\n\n        return config;\n    }\n\n    function configFromInput(config) {\n        var input = config._i;\n        if (isUndefined(input)) {\n            config._d = new Date(hooks.now());\n        } else if (isDate(input)) {\n            config._d = new Date(input.valueOf());\n        } else if (typeof input === 'string') {\n            configFromString(config);\n        } else if (isArray(input)) {\n            config._a = map(input.slice(0), function (obj) {\n                return parseInt(obj, 10);\n            });\n            configFromArray(config);\n        } else if (isObject(input)) {\n            configFromObject(config);\n        } else if (isNumber(input)) {\n            // from milliseconds\n            config._d = new Date(input);\n        } else {\n            hooks.createFromInputFallback(config);\n        }\n    }\n\n    function createLocalOrUTC (input, format, locale, strict, isUTC) {\n        var c = {};\n\n        if (locale === true || locale === false) {\n            strict = locale;\n            locale = undefined;\n        }\n\n        if ((isObject(input) && isObjectEmpty(input)) ||\n                (isArray(input) && input.length === 0)) {\n            input = undefined;\n        }\n        // object construction must be done this way.\n        // https://github.com/moment/moment/issues/1423\n        c._isAMomentObject = true;\n        c._useUTC = c._isUTC = isUTC;\n        c._l = locale;\n        c._i = input;\n        c._f = format;\n        c._strict = strict;\n\n        return createFromConfig(c);\n    }\n\n    function createLocal (input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, false);\n    }\n\n    var prototypeMin = deprecate(\n        'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n        function () {\n            var other = createLocal.apply(null, arguments);\n            if (this.isValid() && other.isValid()) {\n                return other < this ? this : other;\n            } else {\n                return createInvalid();\n            }\n        }\n    );\n\n    var prototypeMax = deprecate(\n        'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n        function () {\n            var other = createLocal.apply(null, arguments);\n            if (this.isValid() && other.isValid()) {\n                return other > this ? this : other;\n            } else {\n                return createInvalid();\n            }\n        }\n    );\n\n    // Pick a moment m from moments so that m[fn](other) is true for all\n    // other. This relies on the function fn to be transitive.\n    //\n    // moments should either be an array of moment objects or an array, whose\n    // first element is an array of moment objects.\n    function pickBy(fn, moments) {\n        var res, i;\n        if (moments.length === 1 && isArray(moments[0])) {\n            moments = moments[0];\n        }\n        if (!moments.length) {\n            return createLocal();\n        }\n        res = moments[0];\n        for (i = 1; i < moments.length; ++i) {\n            if (!moments[i].isValid() || moments[i][fn](res)) {\n                res = moments[i];\n            }\n        }\n        return res;\n    }\n\n    // TODO: Use [].sort instead?\n    function min () {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isBefore', args);\n    }\n\n    function max () {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isAfter', args);\n    }\n\n    var now = function () {\n        return Date.now ? Date.now() : +(new Date());\n    };\n\n    var ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'];\n\n    function isDurationValid(m) {\n        for (var key in m) {\n            if (!(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) {\n                return false;\n            }\n        }\n\n        var unitHasDecimal = false;\n        for (var i = 0; i < ordering.length; ++i) {\n            if (m[ordering[i]]) {\n                if (unitHasDecimal) {\n                    return false; // only allow non-integers for smallest unit\n                }\n                if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n                    unitHasDecimal = true;\n                }\n            }\n        }\n\n        return true;\n    }\n\n    function isValid$1() {\n        return this._isValid;\n    }\n\n    function createInvalid$1() {\n        return createDuration(NaN);\n    }\n\n    function Duration (duration) {\n        var normalizedInput = normalizeObjectUnits(duration),\n            years = normalizedInput.year || 0,\n            quarters = normalizedInput.quarter || 0,\n            months = normalizedInput.month || 0,\n            weeks = normalizedInput.week || 0,\n            days = normalizedInput.day || 0,\n            hours = normalizedInput.hour || 0,\n            minutes = normalizedInput.minute || 0,\n            seconds = normalizedInput.second || 0,\n            milliseconds = normalizedInput.millisecond || 0;\n\n        this._isValid = isDurationValid(normalizedInput);\n\n        // representation for dateAddRemove\n        this._milliseconds = +milliseconds +\n            seconds * 1e3 + // 1000\n            minutes * 6e4 + // 1000 * 60\n            hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n        // Because of dateAddRemove treats 24 hours as different from a\n        // day when working around DST, we need to store them separately\n        this._days = +days +\n            weeks * 7;\n        // It is impossible to translate months into days without knowing\n        // which months you are are talking about, so we have to store\n        // it separately.\n        this._months = +months +\n            quarters * 3 +\n            years * 12;\n\n        this._data = {};\n\n        this._locale = getLocale();\n\n        this._bubble();\n    }\n\n    function isDuration (obj) {\n        return obj instanceof Duration;\n    }\n\n    function absRound (number) {\n        if (number < 0) {\n            return Math.round(-1 * number) * -1;\n        } else {\n            return Math.round(number);\n        }\n    }\n\n    // FORMATTING\n\n    function offset (token, separator) {\n        addFormatToken(token, 0, 0, function () {\n            var offset = this.utcOffset();\n            var sign = '+';\n            if (offset < 0) {\n                offset = -offset;\n                sign = '-';\n            }\n            return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2);\n        });\n    }\n\n    offset('Z', ':');\n    offset('ZZ', '');\n\n    // PARSING\n\n    addRegexToken('Z',  matchShortOffset);\n    addRegexToken('ZZ', matchShortOffset);\n    addParseToken(['Z', 'ZZ'], function (input, array, config) {\n        config._useUTC = true;\n        config._tzm = offsetFromString(matchShortOffset, input);\n    });\n\n    // HELPERS\n\n    // timezone chunker\n    // '+10:00' > ['10',  '00']\n    // '-1530'  > ['-15', '30']\n    var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n    function offsetFromString(matcher, string) {\n        var matches = (string || '').match(matcher);\n\n        if (matches === null) {\n            return null;\n        }\n\n        var chunk   = matches[matches.length - 1] || [];\n        var parts   = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n        var minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n        return minutes === 0 ?\n          0 :\n          parts[0] === '+' ? minutes : -minutes;\n    }\n\n    // Return a moment from input, that is local/utc/zone equivalent to model.\n    function cloneWithOffset(input, model) {\n        var res, diff;\n        if (model._isUTC) {\n            res = model.clone();\n            diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();\n            // Use low-level api, because this fn is low-level api.\n            res._d.setTime(res._d.valueOf() + diff);\n            hooks.updateOffset(res, false);\n            return res;\n        } else {\n            return createLocal(input).local();\n        }\n    }\n\n    function getDateOffset (m) {\n        // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n        // https://github.com/moment/moment/pull/1871\n        return -Math.round(m._d.getTimezoneOffset() / 15) * 15;\n    }\n\n    // HOOKS\n\n    // This function will be called whenever a moment is mutated.\n    // It is intended to keep the offset in sync with the timezone.\n    hooks.updateOffset = function () {};\n\n    // MOMENTS\n\n    // keepLocalTime = true means only change the timezone, without\n    // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n    // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n    // +0200, so we adjust the time as needed, to be valid.\n    //\n    // Keeping the time actually adds/subtracts (one hour)\n    // from the actual represented time. That is why we call updateOffset\n    // a second time. In case it wants us to change the offset again\n    // _changeInProgress == true case, then we have to adjust, because\n    // there is no such time in the given timezone.\n    function getSetOffset (input, keepLocalTime, keepMinutes) {\n        var offset = this._offset || 0,\n            localAdjust;\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        if (input != null) {\n            if (typeof input === 'string') {\n                input = offsetFromString(matchShortOffset, input);\n                if (input === null) {\n                    return this;\n                }\n            } else if (Math.abs(input) < 16 && !keepMinutes) {\n                input = input * 60;\n            }\n            if (!this._isUTC && keepLocalTime) {\n                localAdjust = getDateOffset(this);\n            }\n            this._offset = input;\n            this._isUTC = true;\n            if (localAdjust != null) {\n                this.add(localAdjust, 'm');\n            }\n            if (offset !== input) {\n                if (!keepLocalTime || this._changeInProgress) {\n                    addSubtract(this, createDuration(input - offset, 'm'), 1, false);\n                } else if (!this._changeInProgress) {\n                    this._changeInProgress = true;\n                    hooks.updateOffset(this, true);\n                    this._changeInProgress = null;\n                }\n            }\n            return this;\n        } else {\n            return this._isUTC ? offset : getDateOffset(this);\n        }\n    }\n\n    function getSetZone (input, keepLocalTime) {\n        if (input != null) {\n            if (typeof input !== 'string') {\n                input = -input;\n            }\n\n            this.utcOffset(input, keepLocalTime);\n\n            return this;\n        } else {\n            return -this.utcOffset();\n        }\n    }\n\n    function setOffsetToUTC (keepLocalTime) {\n        return this.utcOffset(0, keepLocalTime);\n    }\n\n    function setOffsetToLocal (keepLocalTime) {\n        if (this._isUTC) {\n            this.utcOffset(0, keepLocalTime);\n            this._isUTC = false;\n\n            if (keepLocalTime) {\n                this.subtract(getDateOffset(this), 'm');\n            }\n        }\n        return this;\n    }\n\n    function setOffsetToParsedOffset () {\n        if (this._tzm != null) {\n            this.utcOffset(this._tzm, false, true);\n        } else if (typeof this._i === 'string') {\n            var tZone = offsetFromString(matchOffset, this._i);\n            if (tZone != null) {\n                this.utcOffset(tZone);\n            }\n            else {\n                this.utcOffset(0, true);\n            }\n        }\n        return this;\n    }\n\n    function hasAlignedHourOffset (input) {\n        if (!this.isValid()) {\n            return false;\n        }\n        input = input ? createLocal(input).utcOffset() : 0;\n\n        return (this.utcOffset() - input) % 60 === 0;\n    }\n\n    function isDaylightSavingTime () {\n        return (\n            this.utcOffset() > this.clone().month(0).utcOffset() ||\n            this.utcOffset() > this.clone().month(5).utcOffset()\n        );\n    }\n\n    function isDaylightSavingTimeShifted () {\n        if (!isUndefined(this._isDSTShifted)) {\n            return this._isDSTShifted;\n        }\n\n        var c = {};\n\n        copyConfig(c, this);\n        c = prepareConfig(c);\n\n        if (c._a) {\n            var other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n            this._isDSTShifted = this.isValid() &&\n                compareArrays(c._a, other.toArray()) > 0;\n        } else {\n            this._isDSTShifted = false;\n        }\n\n        return this._isDSTShifted;\n    }\n\n    function isLocal () {\n        return this.isValid() ? !this._isUTC : false;\n    }\n\n    function isUtcOffset () {\n        return this.isValid() ? this._isUTC : false;\n    }\n\n    function isUtc () {\n        return this.isValid() ? this._isUTC && this._offset === 0 : false;\n    }\n\n    // ASP.NET json date format regex\n    var aspNetRegex = /^(\\-|\\+)?(?:(\\d*)[. ])?(\\d+)\\:(\\d+)(?:\\:(\\d+)(\\.\\d*)?)?$/;\n\n    // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n    // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n    // and further modified to allow for strings containing both week and day\n    var isoRegex = /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n    function createDuration (input, key) {\n        var duration = input,\n            // matching against regexp is expensive, do it on demand\n            match = null,\n            sign,\n            ret,\n            diffRes;\n\n        if (isDuration(input)) {\n            duration = {\n                ms : input._milliseconds,\n                d  : input._days,\n                M  : input._months\n            };\n        } else if (isNumber(input)) {\n            duration = {};\n            if (key) {\n                duration[key] = input;\n            } else {\n                duration.milliseconds = input;\n            }\n        } else if (!!(match = aspNetRegex.exec(input))) {\n            sign = (match[1] === '-') ? -1 : 1;\n            duration = {\n                y  : 0,\n                d  : toInt(match[DATE])                         * sign,\n                h  : toInt(match[HOUR])                         * sign,\n                m  : toInt(match[MINUTE])                       * sign,\n                s  : toInt(match[SECOND])                       * sign,\n                ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match\n            };\n        } else if (!!(match = isoRegex.exec(input))) {\n            sign = (match[1] === '-') ? -1 : (match[1] === '+') ? 1 : 1;\n            duration = {\n                y : parseIso(match[2], sign),\n                M : parseIso(match[3], sign),\n                w : parseIso(match[4], sign),\n                d : parseIso(match[5], sign),\n                h : parseIso(match[6], sign),\n                m : parseIso(match[7], sign),\n                s : parseIso(match[8], sign)\n            };\n        } else if (duration == null) {// checks for null or undefined\n            duration = {};\n        } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {\n            diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));\n\n            duration = {};\n            duration.ms = diffRes.milliseconds;\n            duration.M = diffRes.months;\n        }\n\n        ret = new Duration(duration);\n\n        if (isDuration(input) && hasOwnProp(input, '_locale')) {\n            ret._locale = input._locale;\n        }\n\n        return ret;\n    }\n\n    createDuration.fn = Duration.prototype;\n    createDuration.invalid = createInvalid$1;\n\n    function parseIso (inp, sign) {\n        // We'd normally use ~~inp for this, but unfortunately it also\n        // converts floats to ints.\n        // inp may be undefined, so careful calling replace on it.\n        var res = inp && parseFloat(inp.replace(',', '.'));\n        // apply sign while we're at it\n        return (isNaN(res) ? 0 : res) * sign;\n    }\n\n    function positiveMomentsDifference(base, other) {\n        var res = {milliseconds: 0, months: 0};\n\n        res.months = other.month() - base.month() +\n            (other.year() - base.year()) * 12;\n        if (base.clone().add(res.months, 'M').isAfter(other)) {\n            --res.months;\n        }\n\n        res.milliseconds = +other - +(base.clone().add(res.months, 'M'));\n\n        return res;\n    }\n\n    function momentsDifference(base, other) {\n        var res;\n        if (!(base.isValid() && other.isValid())) {\n            return {milliseconds: 0, months: 0};\n        }\n\n        other = cloneWithOffset(other, base);\n        if (base.isBefore(other)) {\n            res = positiveMomentsDifference(base, other);\n        } else {\n            res = positiveMomentsDifference(other, base);\n            res.milliseconds = -res.milliseconds;\n            res.months = -res.months;\n        }\n\n        return res;\n    }\n\n    // TODO: remove 'name' arg after deprecation is removed\n    function createAdder(direction, name) {\n        return function (val, period) {\n            var dur, tmp;\n            //invert the arguments, but complain about it\n            if (period !== null && !isNaN(+period)) {\n                deprecateSimple(name, 'moment().' + name  + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' +\n                'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');\n                tmp = val; val = period; period = tmp;\n            }\n\n            val = typeof val === 'string' ? +val : val;\n            dur = createDuration(val, period);\n            addSubtract(this, dur, direction);\n            return this;\n        };\n    }\n\n    function addSubtract (mom, duration, isAdding, updateOffset) {\n        var milliseconds = duration._milliseconds,\n            days = absRound(duration._days),\n            months = absRound(duration._months);\n\n        if (!mom.isValid()) {\n            // No op\n            return;\n        }\n\n        updateOffset = updateOffset == null ? true : updateOffset;\n\n        if (months) {\n            setMonth(mom, get(mom, 'Month') + months * isAdding);\n        }\n        if (days) {\n            set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n        }\n        if (milliseconds) {\n            mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n        }\n        if (updateOffset) {\n            hooks.updateOffset(mom, days || months);\n        }\n    }\n\n    var add      = createAdder(1, 'add');\n    var subtract = createAdder(-1, 'subtract');\n\n    function getCalendarFormat(myMoment, now) {\n        var diff = myMoment.diff(now, 'days', true);\n        return diff < -6 ? 'sameElse' :\n                diff < -1 ? 'lastWeek' :\n                diff < 0 ? 'lastDay' :\n                diff < 1 ? 'sameDay' :\n                diff < 2 ? 'nextDay' :\n                diff < 7 ? 'nextWeek' : 'sameElse';\n    }\n\n    function calendar$1 (time, formats) {\n        // We want to compare the start of today, vs this.\n        // Getting start-of-today depends on whether we're local/utc/offset or not.\n        var now = time || createLocal(),\n            sod = cloneWithOffset(now, this).startOf('day'),\n            format = hooks.calendarFormat(this, sod) || 'sameElse';\n\n        var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);\n\n        return this.format(output || this.localeData().calendar(format, this, createLocal(now)));\n    }\n\n    function clone () {\n        return new Moment(this);\n    }\n\n    function isAfter (input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');\n        if (units === 'millisecond') {\n            return this.valueOf() > localInput.valueOf();\n        } else {\n            return localInput.valueOf() < this.clone().startOf(units).valueOf();\n        }\n    }\n\n    function isBefore (input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');\n        if (units === 'millisecond') {\n            return this.valueOf() < localInput.valueOf();\n        } else {\n            return this.clone().endOf(units).valueOf() < localInput.valueOf();\n        }\n    }\n\n    function isBetween (from, to, units, inclusivity) {\n        inclusivity = inclusivity || '()';\n        return (inclusivity[0] === '(' ? this.isAfter(from, units) : !this.isBefore(from, units)) &&\n            (inclusivity[1] === ')' ? this.isBefore(to, units) : !this.isAfter(to, units));\n    }\n\n    function isSame (input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input),\n            inputMs;\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units || 'millisecond');\n        if (units === 'millisecond') {\n            return this.valueOf() === localInput.valueOf();\n        } else {\n            inputMs = localInput.valueOf();\n            return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();\n        }\n    }\n\n    function isSameOrAfter (input, units) {\n        return this.isSame(input, units) || this.isAfter(input,units);\n    }\n\n    function isSameOrBefore (input, units) {\n        return this.isSame(input, units) || this.isBefore(input,units);\n    }\n\n    function diff (input, units, asFloat) {\n        var that,\n            zoneDelta,\n            output;\n\n        if (!this.isValid()) {\n            return NaN;\n        }\n\n        that = cloneWithOffset(input, this);\n\n        if (!that.isValid()) {\n            return NaN;\n        }\n\n        zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n        units = normalizeUnits(units);\n\n        switch (units) {\n            case 'year': output = monthDiff(this, that) / 12; break;\n            case 'month': output = monthDiff(this, that); break;\n            case 'quarter': output = monthDiff(this, that) / 3; break;\n            case 'second': output = (this - that) / 1e3; break; // 1000\n            case 'minute': output = (this - that) / 6e4; break; // 1000 * 60\n            case 'hour': output = (this - that) / 36e5; break; // 1000 * 60 * 60\n            case 'day': output = (this - that - zoneDelta) / 864e5; break; // 1000 * 60 * 60 * 24, negate dst\n            case 'week': output = (this - that - zoneDelta) / 6048e5; break; // 1000 * 60 * 60 * 24 * 7, negate dst\n            default: output = this - that;\n        }\n\n        return asFloat ? output : absFloor(output);\n    }\n\n    function monthDiff (a, b) {\n        // difference in months\n        var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()),\n            // b is in (anchor - 1 month, anchor + 1 month)\n            anchor = a.clone().add(wholeMonthDiff, 'months'),\n            anchor2, adjust;\n\n        if (b - anchor < 0) {\n            anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor - anchor2);\n        } else {\n            anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor2 - anchor);\n        }\n\n        //check for negative zero, return zero if negative zero\n        return -(wholeMonthDiff + adjust) || 0;\n    }\n\n    hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n    hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n    function toString () {\n        return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n    }\n\n    function toISOString(keepOffset) {\n        if (!this.isValid()) {\n            return null;\n        }\n        var utc = keepOffset !== true;\n        var m = utc ? this.clone().utc() : this;\n        if (m.year() < 0 || m.year() > 9999) {\n            return formatMoment(m, utc ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ');\n        }\n        if (isFunction(Date.prototype.toISOString)) {\n            // native implementation is ~50x faster, use it when we can\n            if (utc) {\n                return this.toDate().toISOString();\n            } else {\n                return new Date(this.valueOf() + this.utcOffset() * 60 * 1000).toISOString().replace('Z', formatMoment(m, 'Z'));\n            }\n        }\n        return formatMoment(m, utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ');\n    }\n\n    /**\n     * Return a human readable representation of a moment that can\n     * also be evaluated to get a new moment which is the same\n     *\n     * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n     */\n    function inspect () {\n        if (!this.isValid()) {\n            return 'moment.invalid(/* ' + this._i + ' */)';\n        }\n        var func = 'moment';\n        var zone = '';\n        if (!this.isLocal()) {\n            func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n            zone = 'Z';\n        }\n        var prefix = '[' + func + '(\"]';\n        var year = (0 <= this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY';\n        var datetime = '-MM-DD[T]HH:mm:ss.SSS';\n        var suffix = zone + '[\")]';\n\n        return this.format(prefix + year + datetime + suffix);\n    }\n\n    function format (inputString) {\n        if (!inputString) {\n            inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;\n        }\n        var output = formatMoment(this, inputString);\n        return this.localeData().postformat(output);\n    }\n\n    function from (time, withoutSuffix) {\n        if (this.isValid() &&\n                ((isMoment(time) && time.isValid()) ||\n                 createLocal(time).isValid())) {\n            return createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function fromNow (withoutSuffix) {\n        return this.from(createLocal(), withoutSuffix);\n    }\n\n    function to (time, withoutSuffix) {\n        if (this.isValid() &&\n                ((isMoment(time) && time.isValid()) ||\n                 createLocal(time).isValid())) {\n            return createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function toNow (withoutSuffix) {\n        return this.to(createLocal(), withoutSuffix);\n    }\n\n    // If passed a locale key, it will set the locale for this\n    // instance.  Otherwise, it will return the locale configuration\n    // variables for this instance.\n    function locale (key) {\n        var newLocaleData;\n\n        if (key === undefined) {\n            return this._locale._abbr;\n        } else {\n            newLocaleData = getLocale(key);\n            if (newLocaleData != null) {\n                this._locale = newLocaleData;\n            }\n            return this;\n        }\n    }\n\n    var lang = deprecate(\n        'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n        function (key) {\n            if (key === undefined) {\n                return this.localeData();\n            } else {\n                return this.locale(key);\n            }\n        }\n    );\n\n    function localeData () {\n        return this._locale;\n    }\n\n    function startOf (units) {\n        units = normalizeUnits(units);\n        // the following switch intentionally omits break keywords\n        // to utilize falling through the cases.\n        switch (units) {\n            case 'year':\n                this.month(0);\n                /* falls through */\n            case 'quarter':\n            case 'month':\n                this.date(1);\n                /* falls through */\n            case 'week':\n            case 'isoWeek':\n            case 'day':\n            case 'date':\n                this.hours(0);\n                /* falls through */\n            case 'hour':\n                this.minutes(0);\n                /* falls through */\n            case 'minute':\n                this.seconds(0);\n                /* falls through */\n            case 'second':\n                this.milliseconds(0);\n        }\n\n        // weeks are a special case\n        if (units === 'week') {\n            this.weekday(0);\n        }\n        if (units === 'isoWeek') {\n            this.isoWeekday(1);\n        }\n\n        // quarters are also special\n        if (units === 'quarter') {\n            this.month(Math.floor(this.month() / 3) * 3);\n        }\n\n        return this;\n    }\n\n    function endOf (units) {\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond') {\n            return this;\n        }\n\n        // 'date' is an alias for 'day', so it should be considered as such.\n        if (units === 'date') {\n            units = 'day';\n        }\n\n        return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms');\n    }\n\n    function valueOf () {\n        return this._d.valueOf() - ((this._offset || 0) * 60000);\n    }\n\n    function unix () {\n        return Math.floor(this.valueOf() / 1000);\n    }\n\n    function toDate () {\n        return new Date(this.valueOf());\n    }\n\n    function toArray () {\n        var m = this;\n        return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];\n    }\n\n    function toObject () {\n        var m = this;\n        return {\n            years: m.year(),\n            months: m.month(),\n            date: m.date(),\n            hours: m.hours(),\n            minutes: m.minutes(),\n            seconds: m.seconds(),\n            milliseconds: m.milliseconds()\n        };\n    }\n\n    function toJSON () {\n        // new Date(NaN).toJSON() === null\n        return this.isValid() ? this.toISOString() : null;\n    }\n\n    function isValid$2 () {\n        return isValid(this);\n    }\n\n    function parsingFlags () {\n        return extend({}, getParsingFlags(this));\n    }\n\n    function invalidAt () {\n        return getParsingFlags(this).overflow;\n    }\n\n    function creationData() {\n        return {\n            input: this._i,\n            format: this._f,\n            locale: this._locale,\n            isUTC: this._isUTC,\n            strict: this._strict\n        };\n    }\n\n    // FORMATTING\n\n    addFormatToken(0, ['gg', 2], 0, function () {\n        return this.weekYear() % 100;\n    });\n\n    addFormatToken(0, ['GG', 2], 0, function () {\n        return this.isoWeekYear() % 100;\n    });\n\n    function addWeekYearFormatToken (token, getter) {\n        addFormatToken(0, [token, token.length], 0, getter);\n    }\n\n    addWeekYearFormatToken('gggg',     'weekYear');\n    addWeekYearFormatToken('ggggg',    'weekYear');\n    addWeekYearFormatToken('GGGG',  'isoWeekYear');\n    addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n    // ALIASES\n\n    addUnitAlias('weekYear', 'gg');\n    addUnitAlias('isoWeekYear', 'GG');\n\n    // PRIORITY\n\n    addUnitPriority('weekYear', 1);\n    addUnitPriority('isoWeekYear', 1);\n\n\n    // PARSING\n\n    addRegexToken('G',      matchSigned);\n    addRegexToken('g',      matchSigned);\n    addRegexToken('GG',     match1to2, match2);\n    addRegexToken('gg',     match1to2, match2);\n    addRegexToken('GGGG',   match1to4, match4);\n    addRegexToken('gggg',   match1to4, match4);\n    addRegexToken('GGGGG',  match1to6, match6);\n    addRegexToken('ggggg',  match1to6, match6);\n\n    addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {\n        week[token.substr(0, 2)] = toInt(input);\n    });\n\n    addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n        week[token] = hooks.parseTwoDigitYear(input);\n    });\n\n    // MOMENTS\n\n    function getSetWeekYear (input) {\n        return getSetWeekYearHelper.call(this,\n                input,\n                this.week(),\n                this.weekday(),\n                this.localeData()._week.dow,\n                this.localeData()._week.doy);\n    }\n\n    function getSetISOWeekYear (input) {\n        return getSetWeekYearHelper.call(this,\n                input, this.isoWeek(), this.isoWeekday(), 1, 4);\n    }\n\n    function getISOWeeksInYear () {\n        return weeksInYear(this.year(), 1, 4);\n    }\n\n    function getWeeksInYear () {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n        var weeksTarget;\n        if (input == null) {\n            return weekOfYear(this, dow, doy).year;\n        } else {\n            weeksTarget = weeksInYear(input, dow, doy);\n            if (week > weeksTarget) {\n                week = weeksTarget;\n            }\n            return setWeekAll.call(this, input, week, weekday, dow, doy);\n        }\n    }\n\n    function setWeekAll(weekYear, week, weekday, dow, doy) {\n        var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n            date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n        this.year(date.getUTCFullYear());\n        this.month(date.getUTCMonth());\n        this.date(date.getUTCDate());\n        return this;\n    }\n\n    // FORMATTING\n\n    addFormatToken('Q', 0, 'Qo', 'quarter');\n\n    // ALIASES\n\n    addUnitAlias('quarter', 'Q');\n\n    // PRIORITY\n\n    addUnitPriority('quarter', 7);\n\n    // PARSING\n\n    addRegexToken('Q', match1);\n    addParseToken('Q', function (input, array) {\n        array[MONTH] = (toInt(input) - 1) * 3;\n    });\n\n    // MOMENTS\n\n    function getSetQuarter (input) {\n        return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);\n    }\n\n    // FORMATTING\n\n    addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n    // ALIASES\n\n    addUnitAlias('date', 'D');\n\n    // PRIORITY\n    addUnitPriority('date', 9);\n\n    // PARSING\n\n    addRegexToken('D',  match1to2);\n    addRegexToken('DD', match1to2, match2);\n    addRegexToken('Do', function (isStrict, locale) {\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        return isStrict ?\n          (locale._dayOfMonthOrdinalParse || locale._ordinalParse) :\n          locale._dayOfMonthOrdinalParseLenient;\n    });\n\n    addParseToken(['D', 'DD'], DATE);\n    addParseToken('Do', function (input, array) {\n        array[DATE] = toInt(input.match(match1to2)[0]);\n    });\n\n    // MOMENTS\n\n    var getSetDayOfMonth = makeGetSet('Date', true);\n\n    // FORMATTING\n\n    addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n    // ALIASES\n\n    addUnitAlias('dayOfYear', 'DDD');\n\n    // PRIORITY\n    addUnitPriority('dayOfYear', 4);\n\n    // PARSING\n\n    addRegexToken('DDD',  match1to3);\n    addRegexToken('DDDD', match3);\n    addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n        config._dayOfYear = toInt(input);\n    });\n\n    // HELPERS\n\n    // MOMENTS\n\n    function getSetDayOfYear (input) {\n        var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;\n        return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('m', ['mm', 2], 0, 'minute');\n\n    // ALIASES\n\n    addUnitAlias('minute', 'm');\n\n    // PRIORITY\n\n    addUnitPriority('minute', 14);\n\n    // PARSING\n\n    addRegexToken('m',  match1to2);\n    addRegexToken('mm', match1to2, match2);\n    addParseToken(['m', 'mm'], MINUTE);\n\n    // MOMENTS\n\n    var getSetMinute = makeGetSet('Minutes', false);\n\n    // FORMATTING\n\n    addFormatToken('s', ['ss', 2], 0, 'second');\n\n    // ALIASES\n\n    addUnitAlias('second', 's');\n\n    // PRIORITY\n\n    addUnitPriority('second', 15);\n\n    // PARSING\n\n    addRegexToken('s',  match1to2);\n    addRegexToken('ss', match1to2, match2);\n    addParseToken(['s', 'ss'], SECOND);\n\n    // MOMENTS\n\n    var getSetSecond = makeGetSet('Seconds', false);\n\n    // FORMATTING\n\n    addFormatToken('S', 0, 0, function () {\n        return ~~(this.millisecond() / 100);\n    });\n\n    addFormatToken(0, ['SS', 2], 0, function () {\n        return ~~(this.millisecond() / 10);\n    });\n\n    addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n    addFormatToken(0, ['SSSS', 4], 0, function () {\n        return this.millisecond() * 10;\n    });\n    addFormatToken(0, ['SSSSS', 5], 0, function () {\n        return this.millisecond() * 100;\n    });\n    addFormatToken(0, ['SSSSSS', 6], 0, function () {\n        return this.millisecond() * 1000;\n    });\n    addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n        return this.millisecond() * 10000;\n    });\n    addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n        return this.millisecond() * 100000;\n    });\n    addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n        return this.millisecond() * 1000000;\n    });\n\n\n    // ALIASES\n\n    addUnitAlias('millisecond', 'ms');\n\n    // PRIORITY\n\n    addUnitPriority('millisecond', 16);\n\n    // PARSING\n\n    addRegexToken('S',    match1to3, match1);\n    addRegexToken('SS',   match1to3, match2);\n    addRegexToken('SSS',  match1to3, match3);\n\n    var token;\n    for (token = 'SSSS'; token.length <= 9; token += 'S') {\n        addRegexToken(token, matchUnsigned);\n    }\n\n    function parseMs(input, array) {\n        array[MILLISECOND] = toInt(('0.' + input) * 1000);\n    }\n\n    for (token = 'S'; token.length <= 9; token += 'S') {\n        addParseToken(token, parseMs);\n    }\n    // MOMENTS\n\n    var getSetMillisecond = makeGetSet('Milliseconds', false);\n\n    // FORMATTING\n\n    addFormatToken('z',  0, 0, 'zoneAbbr');\n    addFormatToken('zz', 0, 0, 'zoneName');\n\n    // MOMENTS\n\n    function getZoneAbbr () {\n        return this._isUTC ? 'UTC' : '';\n    }\n\n    function getZoneName () {\n        return this._isUTC ? 'Coordinated Universal Time' : '';\n    }\n\n    var proto = Moment.prototype;\n\n    proto.add               = add;\n    proto.calendar          = calendar$1;\n    proto.clone             = clone;\n    proto.diff              = diff;\n    proto.endOf             = endOf;\n    proto.format            = format;\n    proto.from              = from;\n    proto.fromNow           = fromNow;\n    proto.to                = to;\n    proto.toNow             = toNow;\n    proto.get               = stringGet;\n    proto.invalidAt         = invalidAt;\n    proto.isAfter           = isAfter;\n    proto.isBefore          = isBefore;\n    proto.isBetween         = isBetween;\n    proto.isSame            = isSame;\n    proto.isSameOrAfter     = isSameOrAfter;\n    proto.isSameOrBefore    = isSameOrBefore;\n    proto.isValid           = isValid$2;\n    proto.lang              = lang;\n    proto.locale            = locale;\n    proto.localeData        = localeData;\n    proto.max               = prototypeMax;\n    proto.min               = prototypeMin;\n    proto.parsingFlags      = parsingFlags;\n    proto.set               = stringSet;\n    proto.startOf           = startOf;\n    proto.subtract          = subtract;\n    proto.toArray           = toArray;\n    proto.toObject          = toObject;\n    proto.toDate            = toDate;\n    proto.toISOString       = toISOString;\n    proto.inspect           = inspect;\n    proto.toJSON            = toJSON;\n    proto.toString          = toString;\n    proto.unix              = unix;\n    proto.valueOf           = valueOf;\n    proto.creationData      = creationData;\n    proto.year       = getSetYear;\n    proto.isLeapYear = getIsLeapYear;\n    proto.weekYear    = getSetWeekYear;\n    proto.isoWeekYear = getSetISOWeekYear;\n    proto.quarter = proto.quarters = getSetQuarter;\n    proto.month       = getSetMonth;\n    proto.daysInMonth = getDaysInMonth;\n    proto.week           = proto.weeks        = getSetWeek;\n    proto.isoWeek        = proto.isoWeeks     = getSetISOWeek;\n    proto.weeksInYear    = getWeeksInYear;\n    proto.isoWeeksInYear = getISOWeeksInYear;\n    proto.date       = getSetDayOfMonth;\n    proto.day        = proto.days             = getSetDayOfWeek;\n    proto.weekday    = getSetLocaleDayOfWeek;\n    proto.isoWeekday = getSetISODayOfWeek;\n    proto.dayOfYear  = getSetDayOfYear;\n    proto.hour = proto.hours = getSetHour;\n    proto.minute = proto.minutes = getSetMinute;\n    proto.second = proto.seconds = getSetSecond;\n    proto.millisecond = proto.milliseconds = getSetMillisecond;\n    proto.utcOffset            = getSetOffset;\n    proto.utc                  = setOffsetToUTC;\n    proto.local                = setOffsetToLocal;\n    proto.parseZone            = setOffsetToParsedOffset;\n    proto.hasAlignedHourOffset = hasAlignedHourOffset;\n    proto.isDST                = isDaylightSavingTime;\n    proto.isLocal              = isLocal;\n    proto.isUtcOffset          = isUtcOffset;\n    proto.isUtc                = isUtc;\n    proto.isUTC                = isUtc;\n    proto.zoneAbbr = getZoneAbbr;\n    proto.zoneName = getZoneName;\n    proto.dates  = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);\n    proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);\n    proto.years  = deprecate('years accessor is deprecated. Use year instead', getSetYear);\n    proto.zone   = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);\n    proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);\n\n    function createUnix (input) {\n        return createLocal(input * 1000);\n    }\n\n    function createInZone () {\n        return createLocal.apply(null, arguments).parseZone();\n    }\n\n    function preParsePostFormat (string) {\n        return string;\n    }\n\n    var proto$1 = Locale.prototype;\n\n    proto$1.calendar        = calendar;\n    proto$1.longDateFormat  = longDateFormat;\n    proto$1.invalidDate     = invalidDate;\n    proto$1.ordinal         = ordinal;\n    proto$1.preparse        = preParsePostFormat;\n    proto$1.postformat      = preParsePostFormat;\n    proto$1.relativeTime    = relativeTime;\n    proto$1.pastFuture      = pastFuture;\n    proto$1.set             = set;\n\n    proto$1.months            =        localeMonths;\n    proto$1.monthsShort       =        localeMonthsShort;\n    proto$1.monthsParse       =        localeMonthsParse;\n    proto$1.monthsRegex       = monthsRegex;\n    proto$1.monthsShortRegex  = monthsShortRegex;\n    proto$1.week = localeWeek;\n    proto$1.firstDayOfYear = localeFirstDayOfYear;\n    proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n    proto$1.weekdays       =        localeWeekdays;\n    proto$1.weekdaysMin    =        localeWeekdaysMin;\n    proto$1.weekdaysShort  =        localeWeekdaysShort;\n    proto$1.weekdaysParse  =        localeWeekdaysParse;\n\n    proto$1.weekdaysRegex       =        weekdaysRegex;\n    proto$1.weekdaysShortRegex  =        weekdaysShortRegex;\n    proto$1.weekdaysMinRegex    =        weekdaysMinRegex;\n\n    proto$1.isPM = localeIsPM;\n    proto$1.meridiem = localeMeridiem;\n\n    function get$1 (format, index, field, setter) {\n        var locale = getLocale();\n        var utc = createUTC().set(setter, index);\n        return locale[field](utc, format);\n    }\n\n    function listMonthsImpl (format, index, field) {\n        if (isNumber(format)) {\n            index = format;\n            format = undefined;\n        }\n\n        format = format || '';\n\n        if (index != null) {\n            return get$1(format, index, field, 'month');\n        }\n\n        var i;\n        var out = [];\n        for (i = 0; i < 12; i++) {\n            out[i] = get$1(format, i, field, 'month');\n        }\n        return out;\n    }\n\n    // ()\n    // (5)\n    // (fmt, 5)\n    // (fmt)\n    // (true)\n    // (true, 5)\n    // (true, fmt, 5)\n    // (true, fmt)\n    function listWeekdaysImpl (localeSorted, format, index, field) {\n        if (typeof localeSorted === 'boolean') {\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        } else {\n            format = localeSorted;\n            index = format;\n            localeSorted = false;\n\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        }\n\n        var locale = getLocale(),\n            shift = localeSorted ? locale._week.dow : 0;\n\n        if (index != null) {\n            return get$1(format, (index + shift) % 7, field, 'day');\n        }\n\n        var i;\n        var out = [];\n        for (i = 0; i < 7; i++) {\n            out[i] = get$1(format, (i + shift) % 7, field, 'day');\n        }\n        return out;\n    }\n\n    function listMonths (format, index) {\n        return listMonthsImpl(format, index, 'months');\n    }\n\n    function listMonthsShort (format, index) {\n        return listMonthsImpl(format, index, 'monthsShort');\n    }\n\n    function listWeekdays (localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n    }\n\n    function listWeekdaysShort (localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n    }\n\n    function listWeekdaysMin (localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n    }\n\n    getSetGlobalLocale('en', {\n        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (toInt(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        }\n    });\n\n    // Side effect imports\n\n    hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);\n    hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);\n\n    var mathAbs = Math.abs;\n\n    function abs () {\n        var data           = this._data;\n\n        this._milliseconds = mathAbs(this._milliseconds);\n        this._days         = mathAbs(this._days);\n        this._months       = mathAbs(this._months);\n\n        data.milliseconds  = mathAbs(data.milliseconds);\n        data.seconds       = mathAbs(data.seconds);\n        data.minutes       = mathAbs(data.minutes);\n        data.hours         = mathAbs(data.hours);\n        data.months        = mathAbs(data.months);\n        data.years         = mathAbs(data.years);\n\n        return this;\n    }\n\n    function addSubtract$1 (duration, input, value, direction) {\n        var other = createDuration(input, value);\n\n        duration._milliseconds += direction * other._milliseconds;\n        duration._days         += direction * other._days;\n        duration._months       += direction * other._months;\n\n        return duration._bubble();\n    }\n\n    // supports only 2.0-style add(1, 's') or add(duration)\n    function add$1 (input, value) {\n        return addSubtract$1(this, input, value, 1);\n    }\n\n    // supports only 2.0-style subtract(1, 's') or subtract(duration)\n    function subtract$1 (input, value) {\n        return addSubtract$1(this, input, value, -1);\n    }\n\n    function absCeil (number) {\n        if (number < 0) {\n            return Math.floor(number);\n        } else {\n            return Math.ceil(number);\n        }\n    }\n\n    function bubble () {\n        var milliseconds = this._milliseconds;\n        var days         = this._days;\n        var months       = this._months;\n        var data         = this._data;\n        var seconds, minutes, hours, years, monthsFromDays;\n\n        // if we have a mix of positive and negative values, bubble down first\n        // check: https://github.com/moment/moment/issues/2166\n        if (!((milliseconds >= 0 && days >= 0 && months >= 0) ||\n                (milliseconds <= 0 && days <= 0 && months <= 0))) {\n            milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n            days = 0;\n            months = 0;\n        }\n\n        // The following code bubbles up values, see the tests for\n        // examples of what that means.\n        data.milliseconds = milliseconds % 1000;\n\n        seconds           = absFloor(milliseconds / 1000);\n        data.seconds      = seconds % 60;\n\n        minutes           = absFloor(seconds / 60);\n        data.minutes      = minutes % 60;\n\n        hours             = absFloor(minutes / 60);\n        data.hours        = hours % 24;\n\n        days += absFloor(hours / 24);\n\n        // convert days to months\n        monthsFromDays = absFloor(daysToMonths(days));\n        months += monthsFromDays;\n        days -= absCeil(monthsToDays(monthsFromDays));\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        data.days   = days;\n        data.months = months;\n        data.years  = years;\n\n        return this;\n    }\n\n    function daysToMonths (days) {\n        // 400 years have 146097 days (taking into account leap year rules)\n        // 400 years have 12 months === 4800\n        return days * 4800 / 146097;\n    }\n\n    function monthsToDays (months) {\n        // the reverse of daysToMonths\n        return months * 146097 / 4800;\n    }\n\n    function as (units) {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        var days;\n        var months;\n        var milliseconds = this._milliseconds;\n\n        units = normalizeUnits(units);\n\n        if (units === 'month' || units === 'year') {\n            days   = this._days   + milliseconds / 864e5;\n            months = this._months + daysToMonths(days);\n            return units === 'month' ? months : months / 12;\n        } else {\n            // handle milliseconds separately because of floating point math errors (issue #1867)\n            days = this._days + Math.round(monthsToDays(this._months));\n            switch (units) {\n                case 'week'   : return days / 7     + milliseconds / 6048e5;\n                case 'day'    : return days         + milliseconds / 864e5;\n                case 'hour'   : return days * 24    + milliseconds / 36e5;\n                case 'minute' : return days * 1440  + milliseconds / 6e4;\n                case 'second' : return days * 86400 + milliseconds / 1000;\n                // Math.floor prevents floating point math errors here\n                case 'millisecond': return Math.floor(days * 864e5) + milliseconds;\n                default: throw new Error('Unknown unit ' + units);\n            }\n        }\n    }\n\n    // TODO: Use this.as('ms')?\n    function valueOf$1 () {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        return (\n            this._milliseconds +\n            this._days * 864e5 +\n            (this._months % 12) * 2592e6 +\n            toInt(this._months / 12) * 31536e6\n        );\n    }\n\n    function makeAs (alias) {\n        return function () {\n            return this.as(alias);\n        };\n    }\n\n    var asMilliseconds = makeAs('ms');\n    var asSeconds      = makeAs('s');\n    var asMinutes      = makeAs('m');\n    var asHours        = makeAs('h');\n    var asDays         = makeAs('d');\n    var asWeeks        = makeAs('w');\n    var asMonths       = makeAs('M');\n    var asYears        = makeAs('y');\n\n    function clone$1 () {\n        return createDuration(this);\n    }\n\n    function get$2 (units) {\n        units = normalizeUnits(units);\n        return this.isValid() ? this[units + 's']() : NaN;\n    }\n\n    function makeGetter(name) {\n        return function () {\n            return this.isValid() ? this._data[name] : NaN;\n        };\n    }\n\n    var milliseconds = makeGetter('milliseconds');\n    var seconds      = makeGetter('seconds');\n    var minutes      = makeGetter('minutes');\n    var hours        = makeGetter('hours');\n    var days         = makeGetter('days');\n    var months       = makeGetter('months');\n    var years        = makeGetter('years');\n\n    function weeks () {\n        return absFloor(this.days() / 7);\n    }\n\n    var round = Math.round;\n    var thresholds = {\n        ss: 44,         // a few seconds to seconds\n        s : 45,         // seconds to minute\n        m : 45,         // minutes to hour\n        h : 22,         // hours to day\n        d : 26,         // days to month\n        M : 11          // months to year\n    };\n\n    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n        return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n    }\n\n    function relativeTime$1 (posNegDuration, withoutSuffix, locale) {\n        var duration = createDuration(posNegDuration).abs();\n        var seconds  = round(duration.as('s'));\n        var minutes  = round(duration.as('m'));\n        var hours    = round(duration.as('h'));\n        var days     = round(duration.as('d'));\n        var months   = round(duration.as('M'));\n        var years    = round(duration.as('y'));\n\n        var a = seconds <= thresholds.ss && ['s', seconds]  ||\n                seconds < thresholds.s   && ['ss', seconds] ||\n                minutes <= 1             && ['m']           ||\n                minutes < thresholds.m   && ['mm', minutes] ||\n                hours   <= 1             && ['h']           ||\n                hours   < thresholds.h   && ['hh', hours]   ||\n                days    <= 1             && ['d']           ||\n                days    < thresholds.d   && ['dd', days]    ||\n                months  <= 1             && ['M']           ||\n                months  < thresholds.M   && ['MM', months]  ||\n                years   <= 1             && ['y']           || ['yy', years];\n\n        a[2] = withoutSuffix;\n        a[3] = +posNegDuration > 0;\n        a[4] = locale;\n        return substituteTimeAgo.apply(null, a);\n    }\n\n    // This function allows you to set the rounding function for relative time strings\n    function getSetRelativeTimeRounding (roundingFunction) {\n        if (roundingFunction === undefined) {\n            return round;\n        }\n        if (typeof(roundingFunction) === 'function') {\n            round = roundingFunction;\n            return true;\n        }\n        return false;\n    }\n\n    // This function allows you to set a threshold for relative time strings\n    function getSetRelativeTimeThreshold (threshold, limit) {\n        if (thresholds[threshold] === undefined) {\n            return false;\n        }\n        if (limit === undefined) {\n            return thresholds[threshold];\n        }\n        thresholds[threshold] = limit;\n        if (threshold === 's') {\n            thresholds.ss = limit - 1;\n        }\n        return true;\n    }\n\n    function humanize (withSuffix) {\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var locale = this.localeData();\n        var output = relativeTime$1(this, !withSuffix, locale);\n\n        if (withSuffix) {\n            output = locale.pastFuture(+this, output);\n        }\n\n        return locale.postformat(output);\n    }\n\n    var abs$1 = Math.abs;\n\n    function sign(x) {\n        return ((x > 0) - (x < 0)) || +x;\n    }\n\n    function toISOString$1() {\n        // for ISO strings we do not use the normal bubbling rules:\n        //  * milliseconds bubble up until they become hours\n        //  * days do not bubble at all\n        //  * months bubble up until they become years\n        // This is because there is no context-free conversion between hours and days\n        // (think of clock changes)\n        // and also not between days and months (28-31 days per month)\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var seconds = abs$1(this._milliseconds) / 1000;\n        var days         = abs$1(this._days);\n        var months       = abs$1(this._months);\n        var minutes, hours, years;\n\n        // 3600 seconds -> 60 minutes -> 1 hour\n        minutes           = absFloor(seconds / 60);\n        hours             = absFloor(minutes / 60);\n        seconds %= 60;\n        minutes %= 60;\n\n        // 12 months -> 1 year\n        years  = absFloor(months / 12);\n        months %= 12;\n\n\n        // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n        var Y = years;\n        var M = months;\n        var D = days;\n        var h = hours;\n        var m = minutes;\n        var s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n        var total = this.asSeconds();\n\n        if (!total) {\n            // this is the same as C#'s (Noda) and python (isodate)...\n            // but not other JS (goog.date)\n            return 'P0D';\n        }\n\n        var totalSign = total < 0 ? '-' : '';\n        var ymSign = sign(this._months) !== sign(total) ? '-' : '';\n        var daysSign = sign(this._days) !== sign(total) ? '-' : '';\n        var hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n        return totalSign + 'P' +\n            (Y ? ymSign + Y + 'Y' : '') +\n            (M ? ymSign + M + 'M' : '') +\n            (D ? daysSign + D + 'D' : '') +\n            ((h || m || s) ? 'T' : '') +\n            (h ? hmsSign + h + 'H' : '') +\n            (m ? hmsSign + m + 'M' : '') +\n            (s ? hmsSign + s + 'S' : '');\n    }\n\n    var proto$2 = Duration.prototype;\n\n    proto$2.isValid        = isValid$1;\n    proto$2.abs            = abs;\n    proto$2.add            = add$1;\n    proto$2.subtract       = subtract$1;\n    proto$2.as             = as;\n    proto$2.asMilliseconds = asMilliseconds;\n    proto$2.asSeconds      = asSeconds;\n    proto$2.asMinutes      = asMinutes;\n    proto$2.asHours        = asHours;\n    proto$2.asDays         = asDays;\n    proto$2.asWeeks        = asWeeks;\n    proto$2.asMonths       = asMonths;\n    proto$2.asYears        = asYears;\n    proto$2.valueOf        = valueOf$1;\n    proto$2._bubble        = bubble;\n    proto$2.clone          = clone$1;\n    proto$2.get            = get$2;\n    proto$2.milliseconds   = milliseconds;\n    proto$2.seconds        = seconds;\n    proto$2.minutes        = minutes;\n    proto$2.hours          = hours;\n    proto$2.days           = days;\n    proto$2.weeks          = weeks;\n    proto$2.months         = months;\n    proto$2.years          = years;\n    proto$2.humanize       = humanize;\n    proto$2.toISOString    = toISOString$1;\n    proto$2.toString       = toISOString$1;\n    proto$2.toJSON         = toISOString$1;\n    proto$2.locale         = locale;\n    proto$2.localeData     = localeData;\n\n    proto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);\n    proto$2.lang = lang;\n\n    // Side effect imports\n\n    // FORMATTING\n\n    addFormatToken('X', 0, 0, 'unix');\n    addFormatToken('x', 0, 0, 'valueOf');\n\n    // PARSING\n\n    addRegexToken('x', matchSigned);\n    addRegexToken('X', matchTimestamp);\n    addParseToken('X', function (input, array, config) {\n        config._d = new Date(parseFloat(input, 10) * 1000);\n    });\n    addParseToken('x', function (input, array, config) {\n        config._d = new Date(toInt(input));\n    });\n\n    // Side effect imports\n\n\n    hooks.version = '2.22.1';\n\n    setHookCallback(createLocal);\n\n    hooks.fn                    = proto;\n    hooks.min                   = min;\n    hooks.max                   = max;\n    hooks.now                   = now;\n    hooks.utc                   = createUTC;\n    hooks.unix                  = createUnix;\n    hooks.months                = listMonths;\n    hooks.isDate                = isDate;\n    hooks.locale                = getSetGlobalLocale;\n    hooks.invalid               = createInvalid;\n    hooks.duration              = createDuration;\n    hooks.isMoment              = isMoment;\n    hooks.weekdays              = listWeekdays;\n    hooks.parseZone             = createInZone;\n    hooks.localeData            = getLocale;\n    hooks.isDuration            = isDuration;\n    hooks.monthsShort           = listMonthsShort;\n    hooks.weekdaysMin           = listWeekdaysMin;\n    hooks.defineLocale          = defineLocale;\n    hooks.updateLocale          = updateLocale;\n    hooks.locales               = listLocales;\n    hooks.weekdaysShort         = listWeekdaysShort;\n    hooks.normalizeUnits        = normalizeUnits;\n    hooks.relativeTimeRounding  = getSetRelativeTimeRounding;\n    hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n    hooks.calendarFormat        = getCalendarFormat;\n    hooks.prototype             = proto;\n\n    // currently HTML5 input type only supports 24-hour formats\n    hooks.HTML5_FMT = {\n        DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm',             // <input type=\"datetime-local\" />\n        DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss',  // <input type=\"datetime-local\" step=\"1\" />\n        DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS',   // <input type=\"datetime-local\" step=\"0.001\" />\n        DATE: 'YYYY-MM-DD',                             // <input type=\"date\" />\n        TIME: 'HH:mm',                                  // <input type=\"time\" />\n        TIME_SECONDS: 'HH:mm:ss',                       // <input type=\"time\" step=\"1\" />\n        TIME_MS: 'HH:mm:ss.SSS',                        // <input type=\"time\" step=\"0.001\" />\n        WEEK: 'YYYY-[W]WW',                             // <input type=\"week\" />\n        MONTH: 'YYYY-MM'                                // <input type=\"month\" />\n    };\n\n    return hooks;\n\n})));\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(151)(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcz9jMWRmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxJQUFJLEtBQTREO0FBQ2hFLElBQUksU0FDeUI7QUFDN0IsQ0FBQyxxQkFBcUI7O0FBRXRCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1CQUFtQixnQkFBZ0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBLDJCQUEyQixTQUFTO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHVCQUF1Qiw2QkFBNkI7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLFNBQVM7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0Isc0JBQXNCO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQztBQUMvQyxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixJQUFJO0FBQy9COztBQUVBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNENBQTRDLElBQUk7O0FBRWhEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUNBQWlDO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDRMQUE0TCxJQUFJOztBQUVoTSxxRUFBcUUsSUFBSTs7QUFFekU7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSwwQ0FBMEMsWUFBWTtBQUN0RDtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCLFlBQVk7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw4QkFBOEI7QUFDOUIsZ0NBQWdDO0FBQ2hDLDZCQUE2QixFQUFFLEVBQUU7QUFDakMsNkJBQTZCLEVBQUUsRUFBRTtBQUNqQyxrQ0FBa0MsRUFBRSxFQUFFO0FBQ3RDLGlDQUFpQztBQUNqQyxxQ0FBcUM7QUFDckMseUNBQXlDO0FBQ3pDLDZCQUE2QixJQUFJLEVBQUU7QUFDbkMsNkJBQTZCLElBQUksRUFBRTtBQUNuQyxrQ0FBa0MsSUFBSSxFQUFFOztBQUV4QywrQkFBK0I7QUFDL0Isb0NBQW9DOztBQUVwQyw4Q0FBOEM7QUFDOUMscURBQXFEOztBQUVyRCx3Q0FBd0MsSUFBSSxJQUFJOztBQUVoRDtBQUNBO0FBQ0EsMkJBQTJCLE1BQU0sd0VBQXdFLE1BQU0sbUJBQW1CLE1BQU0scUJBQXFCLE1BQU0sRUFBRSxJQUFJOztBQUV6Szs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQSw4Q0FBOEM7QUFDOUM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsa0JBQWtCO0FBQ3JDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLHdCQUF3QjtBQUNuRDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixpQkFBaUI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixRQUFRO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixRQUFRO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsUUFBUTtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsUUFBUTtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsUUFBUTtBQUMzQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixPQUFPO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsT0FBTztBQUMxQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1CQUFtQixPQUFPO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixPQUFPO0FBQzFCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw2QkFBMEIsT0FBTyxDQUFDO0FBQ2xEO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLCtCQUErQjtBQUNsRDtBQUNBOztBQUVBO0FBQ0EsY0FBYyxPQUFPO0FBQ3JCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDJDQUEyQyxFQUFFLElBQUksRUFBRTtBQUNuRCx3Q0FBd0MsRUFBRSxJQUFJLEVBQUU7O0FBRWhEOztBQUVBO0FBQ0EsaUNBQWlDLEVBQUU7QUFDbkMsMkJBQTJCLEVBQUU7QUFDN0IsNkJBQTZCLEVBQUU7QUFDL0IsMkJBQTJCLEVBQUU7QUFDN0IseUJBQXlCLEVBQUUsSUFBSSxFQUFFO0FBQ2pDLHdCQUF3QixFQUFFO0FBQzFCLCtCQUErQixHQUFHO0FBQ2xDLHlCQUF5QixFQUFFO0FBQzNCO0FBQ0EsMkJBQTJCLEVBQUUsSUFBSSxFQUFFO0FBQ25DLDBCQUEwQixFQUFFLElBQUksRUFBRTtBQUNsQyx3QkFBd0IsRUFBRTtBQUMxQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsNENBQTRDLE9BQU87QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCxPQUFPO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOERBQThELElBQUksMERBQTBELElBQUkscUVBQXFFLEVBQUU7O0FBRXZNO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLG1CQUFtQixtQkFBbUI7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0Esa0NBQWtDLGdCQUFnQjtBQUNsRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLG9CQUFvQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1QkFBdUIscUJBQXFCO0FBQzVDO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyw2QkFBNkI7QUFDdEM7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUJBQW1COztBQUVuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsY0FBYztBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLDZEQUE2RDtBQUM3RCx5REFBeUQ7QUFDekQsK0RBQStEO0FBQy9ELHdEQUF3RCxPQUFPO0FBQy9ELHdEQUF3RCxPQUFPO0FBQy9ELHVEQUF1RCxPQUFPO0FBQzlELG1FQUFtRSxPQUFPO0FBQzFFLHFFQUFxRSxPQUFPO0FBQzVFO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLHFCQUFxQjtBQUN4RCxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxxQkFBcUI7QUFDeEQsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0JBQXdCO0FBQ3hCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7OztBQUdMOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHdCQUF3QixtQkFBbUI7QUFDM0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEscUJBQXFCLG1CQUFtQjtBQUN4QztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsUUFBUTtBQUMzQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsT0FBTztBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7O0FBR0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxDQUFDIiwiZmlsZSI6IjIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDpcbiAgICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOlxuICAgIGdsb2JhbC5tb21lbnQgPSBmYWN0b3J5KClcbn0odGhpcywgKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIGhvb2tDYWxsYmFjaztcblxuICAgIGZ1bmN0aW9uIGhvb2tzICgpIHtcbiAgICAgICAgcmV0dXJuIGhvb2tDYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMgZG9uZSB0byByZWdpc3RlciB0aGUgbWV0aG9kIGNhbGxlZCB3aXRoIG1vbWVudCgpXG4gICAgLy8gd2l0aG91dCBjcmVhdGluZyBjaXJjdWxhciBkZXBlbmRlbmNpZXMuXG4gICAgZnVuY3Rpb24gc2V0SG9va0NhbGxiYWNrIChjYWxsYmFjaykge1xuICAgICAgICBob29rQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0FycmF5KGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dCBpbnN0YW5jZW9mIEFycmF5IHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNPYmplY3QoaW5wdXQpIHtcbiAgICAgICAgLy8gSUU4IHdpbGwgdHJlYXQgdW5kZWZpbmVkIGFuZCBudWxsIGFzIG9iamVjdCBpZiBpdCB3YXNuJ3QgZm9yXG4gICAgICAgIC8vIGlucHV0ICE9IG51bGxcbiAgICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGwgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgT2JqZWN0XSc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNPYmplY3RFbXB0eShvYmopIHtcbiAgICAgICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikubGVuZ3RoID09PSAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBrO1xuICAgICAgICAgICAgZm9yIChrIGluIG9iaikge1xuICAgICAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVbmRlZmluZWQoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09PSB2b2lkIDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNOdW1iZXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBpbnB1dCA9PT0gJ251bWJlcicgfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgTnVtYmVyXSc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNEYXRlKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dCBpbnN0YW5jZW9mIERhdGUgfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hcChhcnIsIGZuKSB7XG4gICAgICAgIHZhciByZXMgPSBbXSwgaTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyci5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgcmVzLnB1c2goZm4oYXJyW2ldLCBpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYXNPd25Qcm9wKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLCBiKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHRlbmQoYSwgYikge1xuICAgICAgICBmb3IgKHZhciBpIGluIGIpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGIsIGkpKSB7XG4gICAgICAgICAgICAgICAgYVtpXSA9IGJbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzT3duUHJvcChiLCAndG9TdHJpbmcnKSkge1xuICAgICAgICAgICAgYS50b1N0cmluZyA9IGIudG9TdHJpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzT3duUHJvcChiLCAndmFsdWVPZicpKSB7XG4gICAgICAgICAgICBhLnZhbHVlT2YgPSBiLnZhbHVlT2Y7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVVVEMgKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbE9yVVRDKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0LCB0cnVlKS51dGMoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZWZhdWx0UGFyc2luZ0ZsYWdzKCkge1xuICAgICAgICAvLyBXZSBuZWVkIHRvIGRlZXAgY2xvbmUgdGhpcyBvYmplY3QuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlbXB0eSAgICAgICAgICAgOiBmYWxzZSxcbiAgICAgICAgICAgIHVudXNlZFRva2VucyAgICA6IFtdLFxuICAgICAgICAgICAgdW51c2VkSW5wdXQgICAgIDogW10sXG4gICAgICAgICAgICBvdmVyZmxvdyAgICAgICAgOiAtMixcbiAgICAgICAgICAgIGNoYXJzTGVmdE92ZXIgICA6IDAsXG4gICAgICAgICAgICBudWxsSW5wdXQgICAgICAgOiBmYWxzZSxcbiAgICAgICAgICAgIGludmFsaWRNb250aCAgICA6IG51bGwsXG4gICAgICAgICAgICBpbnZhbGlkRm9ybWF0ICAgOiBmYWxzZSxcbiAgICAgICAgICAgIHVzZXJJbnZhbGlkYXRlZCA6IGZhbHNlLFxuICAgICAgICAgICAgaXNvICAgICAgICAgICAgIDogZmFsc2UsXG4gICAgICAgICAgICBwYXJzZWREYXRlUGFydHMgOiBbXSxcbiAgICAgICAgICAgIG1lcmlkaWVtICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICByZmMyODIyICAgICAgICAgOiBmYWxzZSxcbiAgICAgICAgICAgIHdlZWtkYXlNaXNtYXRjaCA6IGZhbHNlXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UGFyc2luZ0ZsYWdzKG0pIHtcbiAgICAgICAgaWYgKG0uX3BmID09IG51bGwpIHtcbiAgICAgICAgICAgIG0uX3BmID0gZGVmYXVsdFBhcnNpbmdGbGFncygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtLl9wZjtcbiAgICB9XG5cbiAgICB2YXIgc29tZTtcbiAgICBpZiAoQXJyYXkucHJvdG90eXBlLnNvbWUpIHtcbiAgICAgICAgc29tZSA9IEFycmF5LnByb3RvdHlwZS5zb21lO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHNvbWUgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgICAgICAgICB2YXIgdCA9IE9iamVjdCh0aGlzKTtcbiAgICAgICAgICAgIHZhciBsZW4gPSB0Lmxlbmd0aCA+Pj4gMDtcblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChpIGluIHQgJiYgZnVuLmNhbGwodGhpcywgdFtpXSwgaSwgdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZChtKSB7XG4gICAgICAgIGlmIChtLl9pc1ZhbGlkID09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBmbGFncyA9IGdldFBhcnNpbmdGbGFncyhtKTtcbiAgICAgICAgICAgIHZhciBwYXJzZWRQYXJ0cyA9IHNvbWUuY2FsbChmbGFncy5wYXJzZWREYXRlUGFydHMsIGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGkgIT0gbnVsbDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIGlzTm93VmFsaWQgPSAhaXNOYU4obS5fZC5nZXRUaW1lKCkpICYmXG4gICAgICAgICAgICAgICAgZmxhZ3Mub3ZlcmZsb3cgPCAwICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLmVtcHR5ICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLmludmFsaWRNb250aCAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkV2Vla2RheSAmJlxuICAgICAgICAgICAgICAgICFmbGFncy53ZWVrZGF5TWlzbWF0Y2ggJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MubnVsbElucHV0ICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLmludmFsaWRGb3JtYXQgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MudXNlckludmFsaWRhdGVkICYmXG4gICAgICAgICAgICAgICAgKCFmbGFncy5tZXJpZGllbSB8fCAoZmxhZ3MubWVyaWRpZW0gJiYgcGFyc2VkUGFydHMpKTtcblxuICAgICAgICAgICAgaWYgKG0uX3N0cmljdCkge1xuICAgICAgICAgICAgICAgIGlzTm93VmFsaWQgPSBpc05vd1ZhbGlkICYmXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmNoYXJzTGVmdE92ZXIgPT09IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MudW51c2VkVG9rZW5zLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBmbGFncy5iaWdIb3VyID09PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChPYmplY3QuaXNGcm96ZW4gPT0gbnVsbCB8fCAhT2JqZWN0LmlzRnJvemVuKG0pKSB7XG4gICAgICAgICAgICAgICAgbS5faXNWYWxpZCA9IGlzTm93VmFsaWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNOb3dWYWxpZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbS5faXNWYWxpZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJbnZhbGlkIChmbGFncykge1xuICAgICAgICB2YXIgbSA9IGNyZWF0ZVVUQyhOYU4pO1xuICAgICAgICBpZiAoZmxhZ3MgIT0gbnVsbCkge1xuICAgICAgICAgICAgZXh0ZW5kKGdldFBhcnNpbmdGbGFncyhtKSwgZmxhZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKG0pLnVzZXJJbnZhbGlkYXRlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICAvLyBQbHVnaW5zIHRoYXQgYWRkIHByb3BlcnRpZXMgc2hvdWxkIGFsc28gYWRkIHRoZSBrZXkgaGVyZSAobnVsbCB2YWx1ZSksXG4gICAgLy8gc28gd2UgY2FuIHByb3Blcmx5IGNsb25lIG91cnNlbHZlcy5cbiAgICB2YXIgbW9tZW50UHJvcGVydGllcyA9IGhvb2tzLm1vbWVudFByb3BlcnRpZXMgPSBbXTtcblxuICAgIGZ1bmN0aW9uIGNvcHlDb25maWcodG8sIGZyb20pIHtcbiAgICAgICAgdmFyIGksIHByb3AsIHZhbDtcblxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2lzQU1vbWVudE9iamVjdCkpIHtcbiAgICAgICAgICAgIHRvLl9pc0FNb21lbnRPYmplY3QgPSBmcm9tLl9pc0FNb21lbnRPYmplY3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9pKSkge1xuICAgICAgICAgICAgdG8uX2kgPSBmcm9tLl9pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fZikpIHtcbiAgICAgICAgICAgIHRvLl9mID0gZnJvbS5fZjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2wpKSB7XG4gICAgICAgICAgICB0by5fbCA9IGZyb20uX2w7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9zdHJpY3QpKSB7XG4gICAgICAgICAgICB0by5fc3RyaWN0ID0gZnJvbS5fc3RyaWN0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fdHptKSkge1xuICAgICAgICAgICAgdG8uX3R6bSA9IGZyb20uX3R6bTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2lzVVRDKSkge1xuICAgICAgICAgICAgdG8uX2lzVVRDID0gZnJvbS5faXNVVEM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9vZmZzZXQpKSB7XG4gICAgICAgICAgICB0by5fb2Zmc2V0ID0gZnJvbS5fb2Zmc2V0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fcGYpKSB7XG4gICAgICAgICAgICB0by5fcGYgPSBnZXRQYXJzaW5nRmxhZ3MoZnJvbSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9sb2NhbGUpKSB7XG4gICAgICAgICAgICB0by5fbG9jYWxlID0gZnJvbS5fbG9jYWxlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vbWVudFByb3BlcnRpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG1vbWVudFByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwcm9wID0gbW9tZW50UHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgICAgICB2YWwgPSBmcm9tW3Byb3BdO1xuICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQodmFsKSkge1xuICAgICAgICAgICAgICAgICAgICB0b1twcm9wXSA9IHZhbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdG87XG4gICAgfVxuXG4gICAgdmFyIHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcblxuICAgIC8vIE1vbWVudCBwcm90b3R5cGUgb2JqZWN0XG4gICAgZnVuY3Rpb24gTW9tZW50KGNvbmZpZykge1xuICAgICAgICBjb3B5Q29uZmlnKHRoaXMsIGNvbmZpZyk7XG4gICAgICAgIHRoaXMuX2QgPSBuZXcgRGF0ZShjb25maWcuX2QgIT0gbnVsbCA/IGNvbmZpZy5fZC5nZXRUaW1lKCkgOiBOYU4pO1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICB0aGlzLl9kID0gbmV3IERhdGUoTmFOKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBQcmV2ZW50IGluZmluaXRlIGxvb3AgaW4gY2FzZSB1cGRhdGVPZmZzZXQgY3JlYXRlcyBuZXcgbW9tZW50XG4gICAgICAgIC8vIG9iamVjdHMuXG4gICAgICAgIGlmICh1cGRhdGVJblByb2dyZXNzID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdXBkYXRlSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcyk7XG4gICAgICAgICAgICB1cGRhdGVJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc01vbWVudCAob2JqKSB7XG4gICAgICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBNb21lbnQgfHwgKG9iaiAhPSBudWxsICYmIG9iai5faXNBTW9tZW50T2JqZWN0ICE9IG51bGwpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFic0Zsb29yIChudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgICAgIC8vIC0wIC0+IDBcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwobnVtYmVyKSB8fCAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSW50KGFyZ3VtZW50Rm9yQ29lcmNpb24pIHtcbiAgICAgICAgdmFyIGNvZXJjZWROdW1iZXIgPSArYXJndW1lbnRGb3JDb2VyY2lvbixcbiAgICAgICAgICAgIHZhbHVlID0gMDtcblxuICAgICAgICBpZiAoY29lcmNlZE51bWJlciAhPT0gMCAmJiBpc0Zpbml0ZShjb2VyY2VkTnVtYmVyKSkge1xuICAgICAgICAgICAgdmFsdWUgPSBhYnNGbG9vcihjb2VyY2VkTnVtYmVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvLyBjb21wYXJlIHR3byBhcnJheXMsIHJldHVybiB0aGUgbnVtYmVyIG9mIGRpZmZlcmVuY2VzXG4gICAgZnVuY3Rpb24gY29tcGFyZUFycmF5cyhhcnJheTEsIGFycmF5MiwgZG9udENvbnZlcnQpIHtcbiAgICAgICAgdmFyIGxlbiA9IE1hdGgubWluKGFycmF5MS5sZW5ndGgsIGFycmF5Mi5sZW5ndGgpLFxuICAgICAgICAgICAgbGVuZ3RoRGlmZiA9IE1hdGguYWJzKGFycmF5MS5sZW5ndGggLSBhcnJheTIubGVuZ3RoKSxcbiAgICAgICAgICAgIGRpZmZzID0gMCxcbiAgICAgICAgICAgIGk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgaWYgKChkb250Q29udmVydCAmJiBhcnJheTFbaV0gIT09IGFycmF5MltpXSkgfHxcbiAgICAgICAgICAgICAgICAoIWRvbnRDb252ZXJ0ICYmIHRvSW50KGFycmF5MVtpXSkgIT09IHRvSW50KGFycmF5MltpXSkpKSB7XG4gICAgICAgICAgICAgICAgZGlmZnMrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGlmZnMgKyBsZW5ndGhEaWZmO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdhcm4obXNnKSB7XG4gICAgICAgIGlmIChob29rcy5zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3MgPT09IGZhbHNlICYmXG4gICAgICAgICAgICAgICAgKHR5cGVvZiBjb25zb2xlICE9PSAgJ3VuZGVmaW5lZCcpICYmIGNvbnNvbGUud2Fybikge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdEZXByZWNhdGlvbiB3YXJuaW5nOiAnICsgbXNnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlcHJlY2F0ZShtc2csIGZuKSB7XG4gICAgICAgIHZhciBmaXJzdFRpbWUgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiBleHRlbmQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyKG51bGwsIG1zZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmlyc3RUaW1lKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgICAgICAgICB2YXIgYXJnO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZyA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1tpXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyArPSAnXFxuWycgKyBpICsgJ10gJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBhcmd1bWVudHNbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcgKz0ga2V5ICsgJzogJyArIGFyZ3VtZW50c1swXVtrZXldICsgJywgJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZy5zbGljZSgwLCAtMik7IC8vIFJlbW92ZSB0cmFpbGluZyBjb21tYSBhbmQgc3BhY2VcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goYXJnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgd2Fybihtc2cgKyAnXFxuQXJndW1lbnRzOiAnICsgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncykuam9pbignJykgKyAnXFxuJyArIChuZXcgRXJyb3IoKSkuc3RhY2spO1xuICAgICAgICAgICAgICAgIGZpcnN0VGltZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0sIGZuKTtcbiAgICB9XG5cbiAgICB2YXIgZGVwcmVjYXRpb25zID0ge307XG5cbiAgICBmdW5jdGlvbiBkZXByZWNhdGVTaW1wbGUobmFtZSwgbXNnKSB7XG4gICAgICAgIGlmIChob29rcy5kZXByZWNhdGlvbkhhbmRsZXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyKG5hbWUsIG1zZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFkZXByZWNhdGlvbnNbbmFtZV0pIHtcbiAgICAgICAgICAgIHdhcm4obXNnKTtcbiAgICAgICAgICAgIGRlcHJlY2F0aW9uc1tuYW1lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBob29rcy5zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3MgPSBmYWxzZTtcbiAgICBob29rcy5kZXByZWNhdGlvbkhhbmRsZXIgPSBudWxsO1xuXG4gICAgZnVuY3Rpb24gaXNGdW5jdGlvbihpbnB1dCkge1xuICAgICAgICByZXR1cm4gaW5wdXQgaW5zdGFuY2VvZiBGdW5jdGlvbiB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldCAoY29uZmlnKSB7XG4gICAgICAgIHZhciBwcm9wLCBpO1xuICAgICAgICBmb3IgKGkgaW4gY29uZmlnKSB7XG4gICAgICAgICAgICBwcm9wID0gY29uZmlnW2ldO1xuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocHJvcCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzW2ldID0gcHJvcDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpc1snXycgKyBpXSA9IHByb3A7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY29uZmlnID0gY29uZmlnO1xuICAgICAgICAvLyBMZW5pZW50IG9yZGluYWwgcGFyc2luZyBhY2NlcHRzIGp1c3QgYSBudW1iZXIgaW4gYWRkaXRpb24gdG9cbiAgICAgICAgLy8gbnVtYmVyICsgKHBvc3NpYmx5KSBzdHVmZiBjb21pbmcgZnJvbSBfZGF5T2ZNb250aE9yZGluYWxQYXJzZS5cbiAgICAgICAgLy8gVE9ETzogUmVtb3ZlIFwib3JkaW5hbFBhcnNlXCIgZmFsbGJhY2sgaW4gbmV4dCBtYWpvciByZWxlYXNlLlxuICAgICAgICB0aGlzLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlTGVuaWVudCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAodGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZS5zb3VyY2UgfHwgdGhpcy5fb3JkaW5hbFBhcnNlLnNvdXJjZSkgK1xuICAgICAgICAgICAgICAgICd8JyArICgvXFxkezEsMn0vKS5zb3VyY2UpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNoaWxkQ29uZmlnKSB7XG4gICAgICAgIHZhciByZXMgPSBleHRlbmQoe30sIHBhcmVudENvbmZpZyksIHByb3A7XG4gICAgICAgIGZvciAocHJvcCBpbiBjaGlsZENvbmZpZykge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoY2hpbGRDb25maWcsIHByb3ApKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KHBhcmVudENvbmZpZ1twcm9wXSkgJiYgaXNPYmplY3QoY2hpbGRDb25maWdbcHJvcF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBleHRlbmQocmVzW3Byb3BdLCBwYXJlbnRDb25maWdbcHJvcF0pO1xuICAgICAgICAgICAgICAgICAgICBleHRlbmQocmVzW3Byb3BdLCBjaGlsZENvbmZpZ1twcm9wXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZENvbmZpZ1twcm9wXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IGNoaWxkQ29uZmlnW3Byb3BdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZXNbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAocHJvcCBpbiBwYXJlbnRDb25maWcpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKHBhcmVudENvbmZpZywgcHJvcCkgJiZcbiAgICAgICAgICAgICAgICAgICAgIWhhc093blByb3AoY2hpbGRDb25maWcsIHByb3ApICYmXG4gICAgICAgICAgICAgICAgICAgIGlzT2JqZWN0KHBhcmVudENvbmZpZ1twcm9wXSkpIHtcbiAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgY2hhbmdlcyB0byBwcm9wZXJ0aWVzIGRvbid0IG1vZGlmeSBwYXJlbnQgY29uZmlnXG4gICAgICAgICAgICAgICAgcmVzW3Byb3BdID0gZXh0ZW5kKHt9LCByZXNbcHJvcF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gTG9jYWxlKGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0KGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIga2V5cztcblxuICAgIGlmIChPYmplY3Qua2V5cykge1xuICAgICAgICBrZXlzID0gT2JqZWN0LmtleXM7XG4gICAgfSBlbHNlIHtcbiAgICAgICAga2V5cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIHZhciBpLCByZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoaSBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzT3duUHJvcChvYmosIGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKGkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRDYWxlbmRhciA9IHtcbiAgICAgICAgc2FtZURheSA6ICdbVG9kYXkgYXRdIExUJyxcbiAgICAgICAgbmV4dERheSA6ICdbVG9tb3Jyb3cgYXRdIExUJyxcbiAgICAgICAgbmV4dFdlZWsgOiAnZGRkZCBbYXRdIExUJyxcbiAgICAgICAgbGFzdERheSA6ICdbWWVzdGVyZGF5IGF0XSBMVCcsXG4gICAgICAgIGxhc3RXZWVrIDogJ1tMYXN0XSBkZGRkIFthdF0gTFQnLFxuICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBjYWxlbmRhciAoa2V5LCBtb20sIG5vdykge1xuICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fY2FsZW5kYXJba2V5XSB8fCB0aGlzLl9jYWxlbmRhclsnc2FtZUVsc2UnXTtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24ob3V0cHV0KSA/IG91dHB1dC5jYWxsKG1vbSwgbm93KSA6IG91dHB1dDtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvbmdEYXRlRm9ybWF0ID0ge1xuICAgICAgICBMVFMgIDogJ2g6bW06c3MgQScsXG4gICAgICAgIExUICAgOiAnaDptbSBBJyxcbiAgICAgICAgTCAgICA6ICdNTS9ERC9ZWVlZJyxcbiAgICAgICAgTEwgICA6ICdNTU1NIEQsIFlZWVknLFxuICAgICAgICBMTEwgIDogJ01NTU0gRCwgWVlZWSBoOm1tIEEnLFxuICAgICAgICBMTExMIDogJ2RkZGQsIE1NTU0gRCwgWVlZWSBoOm1tIEEnXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGxvbmdEYXRlRm9ybWF0IChrZXkpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleV0sXG4gICAgICAgICAgICBmb3JtYXRVcHBlciA9IHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleS50b1VwcGVyQ2FzZSgpXTtcblxuICAgICAgICBpZiAoZm9ybWF0IHx8ICFmb3JtYXRVcHBlcikge1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleV0gPSBmb3JtYXRVcHBlci5yZXBsYWNlKC9NTU1NfE1NfEREfGRkZGQvZywgZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbC5zbGljZSgxKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleV07XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRJbnZhbGlkRGF0ZSA9ICdJbnZhbGlkIGRhdGUnO1xuXG4gICAgZnVuY3Rpb24gaW52YWxpZERhdGUgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52YWxpZERhdGU7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRPcmRpbmFsID0gJyVkJztcbiAgICB2YXIgZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UgPSAvXFxkezEsMn0vO1xuXG4gICAgZnVuY3Rpb24gb3JkaW5hbCAobnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vcmRpbmFsLnJlcGxhY2UoJyVkJywgbnVtYmVyKTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdFJlbGF0aXZlVGltZSA9IHtcbiAgICAgICAgZnV0dXJlIDogJ2luICVzJyxcbiAgICAgICAgcGFzdCAgIDogJyVzIGFnbycsXG4gICAgICAgIHMgIDogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICBzcyA6ICclZCBzZWNvbmRzJyxcbiAgICAgICAgbSAgOiAnYSBtaW51dGUnLFxuICAgICAgICBtbSA6ICclZCBtaW51dGVzJyxcbiAgICAgICAgaCAgOiAnYW4gaG91cicsXG4gICAgICAgIGhoIDogJyVkIGhvdXJzJyxcbiAgICAgICAgZCAgOiAnYSBkYXknLFxuICAgICAgICBkZCA6ICclZCBkYXlzJyxcbiAgICAgICAgTSAgOiAnYSBtb250aCcsXG4gICAgICAgIE1NIDogJyVkIG1vbnRocycsXG4gICAgICAgIHkgIDogJ2EgeWVhcicsXG4gICAgICAgIHl5IDogJyVkIHllYXJzJ1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWUgKG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fcmVsYXRpdmVUaW1lW3N0cmluZ107XG4gICAgICAgIHJldHVybiAoaXNGdW5jdGlvbihvdXRwdXQpKSA/XG4gICAgICAgICAgICBvdXRwdXQobnVtYmVyLCB3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKSA6XG4gICAgICAgICAgICBvdXRwdXQucmVwbGFjZSgvJWQvaSwgbnVtYmVyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXN0RnV0dXJlIChkaWZmLCBvdXRwdXQpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHRoaXMuX3JlbGF0aXZlVGltZVtkaWZmID4gMCA/ICdmdXR1cmUnIDogJ3Bhc3QnXTtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oZm9ybWF0KSA/IGZvcm1hdChvdXRwdXQpIDogZm9ybWF0LnJlcGxhY2UoLyVzL2ksIG91dHB1dCk7XG4gICAgfVxuXG4gICAgdmFyIGFsaWFzZXMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFVuaXRBbGlhcyAodW5pdCwgc2hvcnRoYW5kKSB7XG4gICAgICAgIHZhciBsb3dlckNhc2UgPSB1bml0LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGFsaWFzZXNbbG93ZXJDYXNlXSA9IGFsaWFzZXNbbG93ZXJDYXNlICsgJ3MnXSA9IGFsaWFzZXNbc2hvcnRoYW5kXSA9IHVuaXQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplVW5pdHModW5pdHMpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB1bml0cyA9PT0gJ3N0cmluZycgPyBhbGlhc2VzW3VuaXRzXSB8fCBhbGlhc2VzW3VuaXRzLnRvTG93ZXJDYXNlKCldIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZU9iamVjdFVuaXRzKGlucHV0T2JqZWN0KSB7XG4gICAgICAgIHZhciBub3JtYWxpemVkSW5wdXQgPSB7fSxcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRQcm9wLFxuICAgICAgICAgICAgcHJvcDtcblxuICAgICAgICBmb3IgKHByb3AgaW4gaW5wdXRPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGlucHV0T2JqZWN0LCBwcm9wKSkge1xuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRQcm9wID0gbm9ybWFsaXplVW5pdHMocHJvcCk7XG4gICAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRQcm9wKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRJbnB1dFtub3JtYWxpemVkUHJvcF0gPSBpbnB1dE9iamVjdFtwcm9wXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9ybWFsaXplZElucHV0O1xuICAgIH1cblxuICAgIHZhciBwcmlvcml0aWVzID0ge307XG5cbiAgICBmdW5jdGlvbiBhZGRVbml0UHJpb3JpdHkodW5pdCwgcHJpb3JpdHkpIHtcbiAgICAgICAgcHJpb3JpdGllc1t1bml0XSA9IHByaW9yaXR5O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFByaW9yaXRpemVkVW5pdHModW5pdHNPYmopIHtcbiAgICAgICAgdmFyIHVuaXRzID0gW107XG4gICAgICAgIGZvciAodmFyIHUgaW4gdW5pdHNPYmopIHtcbiAgICAgICAgICAgIHVuaXRzLnB1c2goe3VuaXQ6IHUsIHByaW9yaXR5OiBwcmlvcml0aWVzW3VdfSk7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGEucHJpb3JpdHkgLSBiLnByaW9yaXR5O1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHVuaXRzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHplcm9GaWxsKG51bWJlciwgdGFyZ2V0TGVuZ3RoLCBmb3JjZVNpZ24pIHtcbiAgICAgICAgdmFyIGFic051bWJlciA9ICcnICsgTWF0aC5hYnMobnVtYmVyKSxcbiAgICAgICAgICAgIHplcm9zVG9GaWxsID0gdGFyZ2V0TGVuZ3RoIC0gYWJzTnVtYmVyLmxlbmd0aCxcbiAgICAgICAgICAgIHNpZ24gPSBudW1iZXIgPj0gMDtcbiAgICAgICAgcmV0dXJuIChzaWduID8gKGZvcmNlU2lnbiA/ICcrJyA6ICcnKSA6ICctJykgK1xuICAgICAgICAgICAgTWF0aC5wb3coMTAsIE1hdGgubWF4KDAsIHplcm9zVG9GaWxsKSkudG9TdHJpbmcoKS5zdWJzdHIoMSkgKyBhYnNOdW1iZXI7XG4gICAgfVxuXG4gICAgdmFyIGZvcm1hdHRpbmdUb2tlbnMgPSAvKFxcW1teXFxbXSpcXF0pfChcXFxcKT8oW0hoXW1tKHNzKT98TW98TU0/TT9NP3xEb3xERERvfEREP0Q/RD98ZGRkP2Q/fGRvP3x3W298d10/fFdbb3xXXT98UW8/fFlZWVlZWXxZWVlZWXxZWVlZfFlZfGdnKGdnZz8pP3xHRyhHR0c/KT98ZXxFfGF8QXxoaD98SEg/fGtrP3xtbT98c3M/fFN7MSw5fXx4fFh8eno/fFpaP3wuKS9nO1xuXG4gICAgdmFyIGxvY2FsRm9ybWF0dGluZ1Rva2VucyA9IC8oXFxbW15cXFtdKlxcXSl8KFxcXFwpPyhMVFN8TFR8TEw/TD9MP3xsezEsNH0pL2c7XG5cbiAgICB2YXIgZm9ybWF0RnVuY3Rpb25zID0ge307XG5cbiAgICB2YXIgZm9ybWF0VG9rZW5GdW5jdGlvbnMgPSB7fTtcblxuICAgIC8vIHRva2VuOiAgICAnTSdcbiAgICAvLyBwYWRkZWQ6ICAgWydNTScsIDJdXG4gICAgLy8gb3JkaW5hbDogICdNbydcbiAgICAvLyBjYWxsYmFjazogZnVuY3Rpb24gKCkgeyB0aGlzLm1vbnRoKCkgKyAxIH1cbiAgICBmdW5jdGlvbiBhZGRGb3JtYXRUb2tlbiAodG9rZW4sIHBhZGRlZCwgb3JkaW5hbCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZ1bmMgPSBjYWxsYmFjaztcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGJhY2tdKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnNbdG9rZW5dID0gZnVuYztcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFkZGVkKSB7XG4gICAgICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9uc1twYWRkZWRbMF1dID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB6ZXJvRmlsbChmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHBhZGRlZFsxXSwgcGFkZGVkWzJdKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9yZGluYWwpIHtcbiAgICAgICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zW29yZGluYWxdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5vcmRpbmFsKGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKSwgdG9rZW4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlbW92ZUZvcm1hdHRpbmdUb2tlbnMoaW5wdXQpIHtcbiAgICAgICAgaWYgKGlucHV0Lm1hdGNoKC9cXFtbXFxzXFxTXS8pKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQucmVwbGFjZSgvXlxcW3xcXF0kL2csICcnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5wdXQucmVwbGFjZSgvXFxcXC9nLCAnJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUZvcm1hdEZ1bmN0aW9uKGZvcm1hdCkge1xuICAgICAgICB2YXIgYXJyYXkgPSBmb3JtYXQubWF0Y2goZm9ybWF0dGluZ1Rva2VucyksIGksIGxlbmd0aDtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBhcnJheS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGZvcm1hdFRva2VuRnVuY3Rpb25zW2FycmF5W2ldXSkge1xuICAgICAgICAgICAgICAgIGFycmF5W2ldID0gZm9ybWF0VG9rZW5GdW5jdGlvbnNbYXJyYXlbaV1dO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHJlbW92ZUZvcm1hdHRpbmdUb2tlbnMoYXJyYXlbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtb20pIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSAnJywgaTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIG91dHB1dCArPSBpc0Z1bmN0aW9uKGFycmF5W2ldKSA/IGFycmF5W2ldLmNhbGwobW9tLCBmb3JtYXQpIDogYXJyYXlbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIGZvcm1hdCBkYXRlIHVzaW5nIG5hdGl2ZSBkYXRlIG9iamVjdFxuICAgIGZ1bmN0aW9uIGZvcm1hdE1vbWVudChtLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFtLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIG0ubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtYXQgPSBleHBhbmRGb3JtYXQoZm9ybWF0LCBtLmxvY2FsZURhdGEoKSk7XG4gICAgICAgIGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdID0gZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0gfHwgbWFrZUZvcm1hdEZ1bmN0aW9uKGZvcm1hdCk7XG5cbiAgICAgICAgcmV0dXJuIGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdKG0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4cGFuZEZvcm1hdChmb3JtYXQsIGxvY2FsZSkge1xuICAgICAgICB2YXIgaSA9IDU7XG5cbiAgICAgICAgZnVuY3Rpb24gcmVwbGFjZUxvbmdEYXRlRm9ybWF0VG9rZW5zKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLmxvbmdEYXRlRm9ybWF0KGlucHV0KSB8fCBpbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy5sYXN0SW5kZXggPSAwO1xuICAgICAgICB3aGlsZSAoaSA+PSAwICYmIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKGxvY2FsRm9ybWF0dGluZ1Rva2VucywgcmVwbGFjZUxvbmdEYXRlRm9ybWF0VG9rZW5zKTtcbiAgICAgICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy5sYXN0SW5kZXggPSAwO1xuICAgICAgICAgICAgaSAtPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICB9XG5cbiAgICB2YXIgbWF0Y2gxICAgICAgICAgPSAvXFxkLzsgICAgICAgICAgICAvLyAgICAgICAwIC0gOVxuICAgIHZhciBtYXRjaDIgICAgICAgICA9IC9cXGRcXGQvOyAgICAgICAgICAvLyAgICAgIDAwIC0gOTlcbiAgICB2YXIgbWF0Y2gzICAgICAgICAgPSAvXFxkezN9LzsgICAgICAgICAvLyAgICAgMDAwIC0gOTk5XG4gICAgdmFyIG1hdGNoNCAgICAgICAgID0gL1xcZHs0fS87ICAgICAgICAgLy8gICAgMDAwMCAtIDk5OTlcbiAgICB2YXIgbWF0Y2g2ICAgICAgICAgPSAvWystXT9cXGR7Nn0vOyAgICAvLyAtOTk5OTk5IC0gOTk5OTk5XG4gICAgdmFyIG1hdGNoMXRvMiAgICAgID0gL1xcZFxcZD8vOyAgICAgICAgIC8vICAgICAgIDAgLSA5OVxuICAgIHZhciBtYXRjaDN0bzQgICAgICA9IC9cXGRcXGRcXGRcXGQ/LzsgICAgIC8vICAgICA5OTkgLSA5OTk5XG4gICAgdmFyIG1hdGNoNXRvNiAgICAgID0gL1xcZFxcZFxcZFxcZFxcZFxcZD8vOyAvLyAgIDk5OTk5IC0gOTk5OTk5XG4gICAgdmFyIG1hdGNoMXRvMyAgICAgID0gL1xcZHsxLDN9LzsgICAgICAgLy8gICAgICAgMCAtIDk5OVxuICAgIHZhciBtYXRjaDF0bzQgICAgICA9IC9cXGR7MSw0fS87ICAgICAgIC8vICAgICAgIDAgLSA5OTk5XG4gICAgdmFyIG1hdGNoMXRvNiAgICAgID0gL1srLV0/XFxkezEsNn0vOyAgLy8gLTk5OTk5OSAtIDk5OTk5OVxuXG4gICAgdmFyIG1hdGNoVW5zaWduZWQgID0gL1xcZCsvOyAgICAgICAgICAgLy8gICAgICAgMCAtIGluZlxuICAgIHZhciBtYXRjaFNpZ25lZCAgICA9IC9bKy1dP1xcZCsvOyAgICAgIC8vICAgIC1pbmYgLSBpbmZcblxuICAgIHZhciBtYXRjaE9mZnNldCAgICA9IC9afFsrLV1cXGRcXGQ6P1xcZFxcZC9naTsgLy8gKzAwOjAwIC0wMDowMCArMDAwMCAtMDAwMCBvciBaXG4gICAgdmFyIG1hdGNoU2hvcnRPZmZzZXQgPSAvWnxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPy9naTsgLy8gKzAwIC0wMCArMDA6MDAgLTAwOjAwICswMDAwIC0wMDAwIG9yIFpcblxuICAgIHZhciBtYXRjaFRpbWVzdGFtcCA9IC9bKy1dP1xcZCsoXFwuXFxkezEsM30pPy87IC8vIDEyMzQ1Njc4OSAxMjM0NTY3ODkuMTIzXG5cbiAgICAvLyBhbnkgd29yZCAob3IgdHdvKSBjaGFyYWN0ZXJzIG9yIG51bWJlcnMgaW5jbHVkaW5nIHR3by90aHJlZSB3b3JkIG1vbnRoIGluIGFyYWJpYy5cbiAgICAvLyBpbmNsdWRlcyBzY290dGlzaCBnYWVsaWMgdHdvIHdvcmQgYW5kIGh5cGhlbmF0ZWQgbW9udGhzXG4gICAgdmFyIG1hdGNoV29yZCA9IC9bMC05XXswLDI1Nn1bJ2EtelxcdTAwQTAtXFx1MDVGRlxcdTA3MDAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkYwN1xcdUZGMTAtXFx1RkZFRl17MSwyNTZ9fFtcXHUwNjAwLVxcdTA2RkZcXC9dezEsMjU2fShcXHMqP1tcXHUwNjAwLVxcdTA2RkZdezEsMjU2fSl7MSwyfS9pO1xuXG4gICAgdmFyIHJlZ2V4ZXMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFJlZ2V4VG9rZW4gKHRva2VuLCByZWdleCwgc3RyaWN0UmVnZXgpIHtcbiAgICAgICAgcmVnZXhlc1t0b2tlbl0gPSBpc0Z1bmN0aW9uKHJlZ2V4KSA/IHJlZ2V4IDogZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGVEYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gKGlzU3RyaWN0ICYmIHN0cmljdFJlZ2V4KSA/IHN0cmljdFJlZ2V4IDogcmVnZXg7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UGFyc2VSZWdleEZvclRva2VuICh0b2tlbiwgY29uZmlnKSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcChyZWdleGVzLCB0b2tlbikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmVnRXhwKHVuZXNjYXBlRm9ybWF0KHRva2VuKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVnZXhlc1t0b2tlbl0oY29uZmlnLl9zdHJpY3QsIGNvbmZpZy5fbG9jYWxlKTtcbiAgICB9XG5cbiAgICAvLyBDb2RlIGZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zNTYxNDkzL2lzLXRoZXJlLWEtcmVnZXhwLWVzY2FwZS1mdW5jdGlvbi1pbi1qYXZhc2NyaXB0XG4gICAgZnVuY3Rpb24gdW5lc2NhcGVGb3JtYXQocykge1xuICAgICAgICByZXR1cm4gcmVnZXhFc2NhcGUocy5yZXBsYWNlKCdcXFxcJywgJycpLnJlcGxhY2UoL1xcXFwoXFxbKXxcXFxcKFxcXSl8XFxbKFteXFxdXFxbXSopXFxdfFxcXFwoLikvZywgZnVuY3Rpb24gKG1hdGNoZWQsIHAxLCBwMiwgcDMsIHA0KSB7XG4gICAgICAgICAgICByZXR1cm4gcDEgfHwgcDIgfHwgcDMgfHwgcDQ7XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWdleEVzY2FwZShzKSB7XG4gICAgICAgIHJldHVybiBzLnJlcGxhY2UoL1stXFwvXFxcXF4kKis/LigpfFtcXF17fV0vZywgJ1xcXFwkJicpO1xuICAgIH1cblxuICAgIHZhciB0b2tlbnMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFBhcnNlVG9rZW4gKHRva2VuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgaSwgZnVuYyA9IGNhbGxiYWNrO1xuICAgICAgICBpZiAodHlwZW9mIHRva2VuID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdG9rZW4gPSBbdG9rZW5dO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc051bWJlcihjYWxsYmFjaykpIHtcbiAgICAgICAgICAgIGZ1bmMgPSBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgICAgICAgICAgYXJyYXlbY2FsbGJhY2tdID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG9rZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRva2Vuc1t0b2tlbltpXV0gPSBmdW5jO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkV2Vla1BhcnNlVG9rZW4gKHRva2VuLCBjYWxsYmFjaykge1xuICAgICAgICBhZGRQYXJzZVRva2VuKHRva2VuLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgICAgICBjb25maWcuX3cgPSBjb25maWcuX3cgfHwge307XG4gICAgICAgICAgICBjYWxsYmFjayhpbnB1dCwgY29uZmlnLl93LCBjb25maWcsIHRva2VuKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkVGltZVRvQXJyYXlGcm9tVG9rZW4odG9rZW4sIGlucHV0LCBjb25maWcpIHtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwgJiYgaGFzT3duUHJvcCh0b2tlbnMsIHRva2VuKSkge1xuICAgICAgICAgICAgdG9rZW5zW3Rva2VuXShpbnB1dCwgY29uZmlnLl9hLCBjb25maWcsIHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBZRUFSID0gMDtcbiAgICB2YXIgTU9OVEggPSAxO1xuICAgIHZhciBEQVRFID0gMjtcbiAgICB2YXIgSE9VUiA9IDM7XG4gICAgdmFyIE1JTlVURSA9IDQ7XG4gICAgdmFyIFNFQ09ORCA9IDU7XG4gICAgdmFyIE1JTExJU0VDT05EID0gNjtcbiAgICB2YXIgV0VFSyA9IDc7XG4gICAgdmFyIFdFRUtEQVkgPSA4O1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1knLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB5ID0gdGhpcy55ZWFyKCk7XG4gICAgICAgIHJldHVybiB5IDw9IDk5OTkgPyAnJyArIHkgOiAnKycgKyB5O1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWScsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnllYXIoKSAlIDEwMDtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVlZWScsICAgNF0sICAgICAgIDAsICd5ZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZWScsICA1XSwgICAgICAgMCwgJ3llYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZWVlZWScsIDYsIHRydWVdLCAwLCAneWVhcicpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCd5ZWFyJywgJ3knKTtcblxuICAgIC8vIFBSSU9SSVRJRVNcblxuICAgIGFkZFVuaXRQcmlvcml0eSgneWVhcicsIDEpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignWScsICAgICAgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1lZJywgICAgIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdZWVlZJywgICBtYXRjaDF0bzQsIG1hdGNoNCk7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWVknLCAgbWF0Y2gxdG82LCBtYXRjaDYpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1lZWVlZWScsIG1hdGNoMXRvNiwgbWF0Y2g2KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydZWVlZWScsICdZWVlZWVknXSwgWUVBUik7XG4gICAgYWRkUGFyc2VUb2tlbignWVlZWScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbWUVBUl0gPSBpbnB1dC5sZW5ndGggPT09IDIgPyBob29rcy5wYXJzZVR3b0RpZ2l0WWVhcihpbnB1dCkgOiB0b0ludChpbnB1dCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignWVknLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID0gaG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1knLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID0gcGFyc2VJbnQoaW5wdXQsIDEwKTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIGZ1bmN0aW9uIGRheXNJblllYXIoeWVhcikge1xuICAgICAgICByZXR1cm4gaXNMZWFwWWVhcih5ZWFyKSA/IDM2NiA6IDM2NTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0xlYXBZZWFyKHllYXIpIHtcbiAgICAgICAgcmV0dXJuICh5ZWFyICUgNCA9PT0gMCAmJiB5ZWFyICUgMTAwICE9PSAwKSB8fCB5ZWFyICUgNDAwID09PSAwO1xuICAgIH1cblxuICAgIC8vIEhPT0tTXG5cbiAgICBob29rcy5wYXJzZVR3b0RpZ2l0WWVhciA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICByZXR1cm4gdG9JbnQoaW5wdXQpICsgKHRvSW50KGlucHV0KSA+IDY4ID8gMTkwMCA6IDIwMDApO1xuICAgIH07XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0WWVhciA9IG1ha2VHZXRTZXQoJ0Z1bGxZZWFyJywgdHJ1ZSk7XG5cbiAgICBmdW5jdGlvbiBnZXRJc0xlYXBZZWFyICgpIHtcbiAgICAgICAgcmV0dXJuIGlzTGVhcFllYXIodGhpcy55ZWFyKCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VHZXRTZXQgKHVuaXQsIGtlZXBUaW1lKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgc2V0JDEodGhpcywgdW5pdCwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCBrZWVwVGltZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXQodGhpcywgdW5pdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0IChtb20sIHVuaXQpIHtcbiAgICAgICAgcmV0dXJuIG1vbS5pc1ZhbGlkKCkgP1xuICAgICAgICAgICAgbW9tLl9kWydnZXQnICsgKG1vbS5faXNVVEMgPyAnVVRDJyA6ICcnKSArIHVuaXRdKCkgOiBOYU47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0JDEgKG1vbSwgdW5pdCwgdmFsdWUpIHtcbiAgICAgICAgaWYgKG1vbS5pc1ZhbGlkKCkgJiYgIWlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKHVuaXQgPT09ICdGdWxsWWVhcicgJiYgaXNMZWFwWWVhcihtb20ueWVhcigpKSAmJiBtb20ubW9udGgoKSA9PT0gMSAmJiBtb20uZGF0ZSgpID09PSAyOSkge1xuICAgICAgICAgICAgICAgIG1vbS5fZFsnc2V0JyArIChtb20uX2lzVVRDID8gJ1VUQycgOiAnJykgKyB1bml0XSh2YWx1ZSwgbW9tLm1vbnRoKCksIGRheXNJbk1vbnRoKHZhbHVlLCBtb20ubW9udGgoKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbW9tLl9kWydzZXQnICsgKG1vbS5faXNVVEMgPyAnVVRDJyA6ICcnKSArIHVuaXRdKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIHN0cmluZ0dldCAodW5pdHMpIHtcbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHRoaXNbdW5pdHNdKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbdW5pdHNdKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBzdHJpbmdTZXQgKHVuaXRzLCB2YWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mIHVuaXRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdW5pdHMgPSBub3JtYWxpemVPYmplY3RVbml0cyh1bml0cyk7XG4gICAgICAgICAgICB2YXIgcHJpb3JpdGl6ZWQgPSBnZXRQcmlvcml0aXplZFVuaXRzKHVuaXRzKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJpb3JpdGl6ZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzW3ByaW9yaXRpemVkW2ldLnVuaXRdKHVuaXRzW3ByaW9yaXRpemVkW2ldLnVuaXRdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24odGhpc1t1bml0c10pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbdW5pdHNdKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb2QobiwgeCkge1xuICAgICAgICByZXR1cm4gKChuICUgeCkgKyB4KSAlIHg7XG4gICAgfVxuXG4gICAgdmFyIGluZGV4T2Y7XG5cbiAgICBpZiAoQXJyYXkucHJvdG90eXBlLmluZGV4T2YpIHtcbiAgICAgICAgaW5kZXhPZiA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGluZGV4T2YgPSBmdW5jdGlvbiAobykge1xuICAgICAgICAgICAgLy8gSSBrbm93XG4gICAgICAgICAgICB2YXIgaTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXNbaV0gPT09IG8pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRheXNJbk1vbnRoKHllYXIsIG1vbnRoKSB7XG4gICAgICAgIGlmIChpc05hTih5ZWFyKSB8fCBpc05hTihtb250aCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG1vZE1vbnRoID0gbW9kKG1vbnRoLCAxMik7XG4gICAgICAgIHllYXIgKz0gKG1vbnRoIC0gbW9kTW9udGgpIC8gMTI7XG4gICAgICAgIHJldHVybiBtb2RNb250aCA9PT0gMSA/IChpc0xlYXBZZWFyKHllYXIpID8gMjkgOiAyOCkgOiAoMzEgLSBtb2RNb250aCAlIDcgJSAyKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignTScsIFsnTU0nLCAyXSwgJ01vJywgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb250aCgpICsgMTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdNTU0nLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHNTaG9ydCh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ01NTU0nLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHModGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnbW9udGgnLCAnTScpO1xuXG4gICAgLy8gUFJJT1JJVFlcblxuICAgIGFkZFVuaXRQcmlvcml0eSgnbW9udGgnLCA4KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ00nLCAgICBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ01NJywgICBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignTU1NJywgIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUubW9udGhzU2hvcnRSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG4gICAgYWRkUmVnZXhUb2tlbignTU1NTScsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUubW9udGhzUmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ00nLCAnTU0nXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtNT05USF0gPSB0b0ludChpbnB1dCkgLSAxO1xuICAgIH0pO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ01NTScsICdNTU1NJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgdmFyIG1vbnRoID0gY29uZmlnLl9sb2NhbGUubW9udGhzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgICAgIC8vIGlmIHdlIGRpZG4ndCBmaW5kIGEgbW9udGggbmFtZSwgbWFyayB0aGUgZGF0ZSBhcyBpbnZhbGlkLlxuICAgICAgICBpZiAobW9udGggIT0gbnVsbCkge1xuICAgICAgICAgICAgYXJyYXlbTU9OVEhdID0gbW9udGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkTW9udGggPSBpbnB1dDtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gTE9DQUxFU1xuXG4gICAgdmFyIE1PTlRIU19JTl9GT1JNQVQgPSAvRFtvRF0/KFxcW1teXFxbXFxdXSpcXF18XFxzKStNTU1NPy87XG4gICAgdmFyIGRlZmF1bHRMb2NhbGVNb250aHMgPSAnSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlcicuc3BsaXQoJ18nKTtcbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHMgKG0sIGZvcm1hdCkge1xuICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRocykgPyB0aGlzLl9tb250aHMgOlxuICAgICAgICAgICAgICAgIHRoaXMuX21vbnRoc1snc3RhbmRhbG9uZSddO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRocykgPyB0aGlzLl9tb250aHNbbS5tb250aCgpXSA6XG4gICAgICAgICAgICB0aGlzLl9tb250aHNbKHRoaXMuX21vbnRocy5pc0Zvcm1hdCB8fCBNT05USFNfSU5fRk9STUFUKS50ZXN0KGZvcm1hdCkgPyAnZm9ybWF0JyA6ICdzdGFuZGFsb25lJ11bbS5tb250aCgpXTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZU1vbnRoc1Nob3J0ID0gJ0phbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjJy5zcGxpdCgnXycpO1xuICAgIGZ1bmN0aW9uIGxvY2FsZU1vbnRoc1Nob3J0IChtLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHNTaG9ydCkgPyB0aGlzLl9tb250aHNTaG9ydCA6XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRbJ3N0YW5kYWxvbmUnXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHNTaG9ydCkgPyB0aGlzLl9tb250aHNTaG9ydFttLm1vbnRoKCldIDpcbiAgICAgICAgICAgIHRoaXMuX21vbnRoc1Nob3J0W01PTlRIU19JTl9GT1JNQVQudGVzdChmb3JtYXQpID8gJ2Zvcm1hdCcgOiAnc3RhbmRhbG9uZSddW20ubW9udGgoKV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlU3RyaWN0UGFyc2UobW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSwgaWksIG1vbSwgbGxjID0gbW9udGhOYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICghdGhpcy5fbW9udGhzUGFyc2UpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IHVzZWRcbiAgICAgICAgICAgIHRoaXMuX21vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgKytpKSB7XG4gICAgICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCBpXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXSA9IHRoaXMubW9udGhzU2hvcnQobW9tLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0gPSB0aGlzLm1vbnRocyhtb20sICcnKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ01NTScpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ01NTScpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHNQYXJzZSAobW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSwgbW9tLCByZWdleDtcblxuICAgICAgICBpZiAodGhpcy5fbW9udGhzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVN0cmljdFBhcnNlLmNhbGwodGhpcywgbW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX21vbnRoc1BhcnNlKSB7XG4gICAgICAgICAgICB0aGlzLl9tb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlID0gW107XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPOiBhZGQgc29ydGluZ1xuICAgICAgICAvLyBTb3J0aW5nIG1ha2VzIHN1cmUgaWYgb25lIG1vbnRoIChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyXG4gICAgICAgIC8vIHNlZSBzb3J0aW5nIGluIGNvbXB1dGVNb250aHNQYXJzZVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIGldKTtcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgIXRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoJ14nICsgdGhpcy5tb250aHMobW9tLCAnJykucmVwbGFjZSgnLicsICcnKSArICckJywgJ2knKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW2ldID0gbmV3IFJlZ0V4cCgnXicgKyB0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnJykgKyAnJCcsICdpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXN0cmljdCAmJiAhdGhpcy5fbW9udGhzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICByZWdleCA9ICdeJyArIHRoaXMubW9udGhzKG1vbSwgJycpICsgJ3xeJyArIHRoaXMubW9udGhzU2hvcnQobW9tLCAnJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9udGhzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKHJlZ2V4LnJlcGxhY2UoJy4nLCAnJyksICdpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB0ZXN0IHRoZSByZWdleFxuICAgICAgICAgICAgaWYgKHN0cmljdCAmJiBmb3JtYXQgPT09ICdNTU1NJyAmJiB0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmljdCAmJiBmb3JtYXQgPT09ICdNTU0nICYmIHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJpY3QgJiYgdGhpcy5fbW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBzZXRNb250aCAobW9tLCB2YWx1ZSkge1xuICAgICAgICB2YXIgZGF5T2ZNb250aDtcblxuICAgICAgICBpZiAoIW1vbS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIC8vIE5vIG9wXG4gICAgICAgICAgICByZXR1cm4gbW9tO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICgvXlxcZCskLy50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdG9JbnQodmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IG1vbS5sb2NhbGVEYXRhKCkubW9udGhzUGFyc2UodmFsdWUpO1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IEFub3RoZXIgc2lsZW50IGZhaWx1cmU/XG4gICAgICAgICAgICAgICAgaWYgKCFpc051bWJlcih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vbTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkYXlPZk1vbnRoID0gTWF0aC5taW4obW9tLmRhdGUoKSwgZGF5c0luTW9udGgobW9tLnllYXIoKSwgdmFsdWUpKTtcbiAgICAgICAgbW9tLl9kWydzZXQnICsgKG1vbS5faXNVVEMgPyAnVVRDJyA6ICcnKSArICdNb250aCddKHZhbHVlLCBkYXlPZk1vbnRoKTtcbiAgICAgICAgcmV0dXJuIG1vbTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRNb250aCAodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHNldE1vbnRoKHRoaXMsIHZhbHVlKTtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGdldCh0aGlzLCAnTW9udGgnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldERheXNJbk1vbnRoICgpIHtcbiAgICAgICAgcmV0dXJuIGRheXNJbk1vbnRoKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCkpO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TW9udGhzU2hvcnRSZWdleCA9IG1hdGNoV29yZDtcbiAgICBmdW5jdGlvbiBtb250aHNTaG9ydFJlZ2V4IChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fbW9udGhzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfbW9udGhzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVNb250aHNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTaG9ydFJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfbW9udGhzU2hvcnRSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRSZWdleCA9IGRlZmF1bHRNb250aHNTaG9ydFJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXggJiYgaXNTdHJpY3QgP1xuICAgICAgICAgICAgICAgIHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXggOiB0aGlzLl9tb250aHNTaG9ydFJlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRNb250aHNSZWdleCA9IG1hdGNoV29yZDtcbiAgICBmdW5jdGlvbiBtb250aHNSZWdleCAoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKHRoaXMuX21vbnRoc1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlTW9udGhzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1JlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfbW9udGhzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX21vbnRoc1JlZ2V4ID0gZGVmYXVsdE1vbnRoc1JlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4ICYmIGlzU3RyaWN0ID9cbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNTdHJpY3RSZWdleCA6IHRoaXMuX21vbnRoc1JlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZU1vbnRoc1BhcnNlICgpIHtcbiAgICAgICAgZnVuY3Rpb24gY21wTGVuUmV2KGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBiLmxlbmd0aCAtIGEubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNob3J0UGllY2VzID0gW10sIGxvbmdQaWVjZXMgPSBbXSwgbWl4ZWRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGksIG1vbTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIC8vIG1ha2UgdGhlIHJlZ2V4IGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeVxuICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCBpXSk7XG4gICAgICAgICAgICBzaG9ydFBpZWNlcy5wdXNoKHRoaXMubW9udGhzU2hvcnQobW9tLCAnJykpO1xuICAgICAgICAgICAgbG9uZ1BpZWNlcy5wdXNoKHRoaXMubW9udGhzKG1vbSwgJycpKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2godGhpcy5tb250aHMobW9tLCAnJykpO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaCh0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTb3J0aW5nIG1ha2VzIHN1cmUgaWYgb25lIG1vbnRoIChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyIGl0XG4gICAgICAgIC8vIHdpbGwgbWF0Y2ggdGhlIGxvbmdlciBwaWVjZS5cbiAgICAgICAgc2hvcnRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBsb25nUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbWl4ZWRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgc2hvcnRQaWVjZXNbaV0gPSByZWdleEVzY2FwZShzaG9ydFBpZWNlc1tpXSk7XG4gICAgICAgICAgICBsb25nUGllY2VzW2ldID0gcmVnZXhFc2NhcGUobG9uZ1BpZWNlc1tpXSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDI0OyBpKyspIHtcbiAgICAgICAgICAgIG1peGVkUGllY2VzW2ldID0gcmVnZXhFc2NhcGUobWl4ZWRQaWVjZXNbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbW9udGhzUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBtaXhlZFBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX21vbnRoc1Nob3J0UmVnZXggPSB0aGlzLl9tb250aHNSZWdleDtcbiAgICAgICAgdGhpcy5fbW9udGhzU3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBsb25nUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIHNob3J0UGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVEYXRlICh5LCBtLCBkLCBoLCBNLCBzLCBtcykge1xuICAgICAgICAvLyBjYW4ndCBqdXN0IGFwcGx5KCkgdG8gY3JlYXRlIGEgZGF0ZTpcbiAgICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xLzE4MTM0OFxuICAgICAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKHksIG0sIGQsIGgsIE0sIHMsIG1zKTtcblxuICAgICAgICAvLyB0aGUgZGF0ZSBjb25zdHJ1Y3RvciByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwICYmIGlzRmluaXRlKGRhdGUuZ2V0RnVsbFllYXIoKSkpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0RnVsbFllYXIoeSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlVVRDRGF0ZSAoeSkge1xuICAgICAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDLmFwcGx5KG51bGwsIGFyZ3VtZW50cykpO1xuXG4gICAgICAgIC8vIHRoZSBEYXRlLlVUQyBmdW5jdGlvbiByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwICYmIGlzRmluaXRlKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSkpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuXG4gICAgLy8gc3RhcnQtb2YtZmlyc3Qtd2VlayAtIHN0YXJ0LW9mLXllYXJcbiAgICBmdW5jdGlvbiBmaXJzdFdlZWtPZmZzZXQoeWVhciwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIC8vIGZpcnN0LXdlZWsgZGF5IC0tIHdoaWNoIGphbnVhcnkgaXMgYWx3YXlzIGluIHRoZSBmaXJzdCB3ZWVrICg0IGZvciBpc28sIDEgZm9yIG90aGVyKVxuICAgICAgICAgICAgZndkID0gNyArIGRvdyAtIGRveSxcbiAgICAgICAgICAgIC8vIGZpcnN0LXdlZWsgZGF5IGxvY2FsIHdlZWtkYXkgLS0gd2hpY2ggbG9jYWwgd2Vla2RheSBpcyBmd2RcbiAgICAgICAgICAgIGZ3ZGx3ID0gKDcgKyBjcmVhdGVVVENEYXRlKHllYXIsIDAsIGZ3ZCkuZ2V0VVRDRGF5KCkgLSBkb3cpICUgNztcblxuICAgICAgICByZXR1cm4gLWZ3ZGx3ICsgZndkIC0gMTtcbiAgICB9XG5cbiAgICAvLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlI0NhbGN1bGF0aW5nX2FfZGF0ZV9naXZlbl90aGVfeWVhci4yQ193ZWVrX251bWJlcl9hbmRfd2Vla2RheVxuICAgIGZ1bmN0aW9uIGRheU9mWWVhckZyb21XZWVrcyh5ZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgbG9jYWxXZWVrZGF5ID0gKDcgKyB3ZWVrZGF5IC0gZG93KSAlIDcsXG4gICAgICAgICAgICB3ZWVrT2Zmc2V0ID0gZmlyc3RXZWVrT2Zmc2V0KHllYXIsIGRvdywgZG95KSxcbiAgICAgICAgICAgIGRheU9mWWVhciA9IDEgKyA3ICogKHdlZWsgLSAxKSArIGxvY2FsV2Vla2RheSArIHdlZWtPZmZzZXQsXG4gICAgICAgICAgICByZXNZZWFyLCByZXNEYXlPZlllYXI7XG5cbiAgICAgICAgaWYgKGRheU9mWWVhciA8PSAwKSB7XG4gICAgICAgICAgICByZXNZZWFyID0geWVhciAtIDE7XG4gICAgICAgICAgICByZXNEYXlPZlllYXIgPSBkYXlzSW5ZZWFyKHJlc1llYXIpICsgZGF5T2ZZZWFyO1xuICAgICAgICB9IGVsc2UgaWYgKGRheU9mWWVhciA+IGRheXNJblllYXIoeWVhcikpIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSB5ZWFyICsgMTtcbiAgICAgICAgICAgIHJlc0RheU9mWWVhciA9IGRheU9mWWVhciAtIGRheXNJblllYXIoeWVhcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNZZWFyID0geWVhcjtcbiAgICAgICAgICAgIHJlc0RheU9mWWVhciA9IGRheU9mWWVhcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB5ZWFyOiByZXNZZWFyLFxuICAgICAgICAgICAgZGF5T2ZZZWFyOiByZXNEYXlPZlllYXJcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrT2ZZZWFyKG1vbSwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIHdlZWtPZmZzZXQgPSBmaXJzdFdlZWtPZmZzZXQobW9tLnllYXIoKSwgZG93LCBkb3kpLFxuICAgICAgICAgICAgd2VlayA9IE1hdGguZmxvb3IoKG1vbS5kYXlPZlllYXIoKSAtIHdlZWtPZmZzZXQgLSAxKSAvIDcpICsgMSxcbiAgICAgICAgICAgIHJlc1dlZWssIHJlc1llYXI7XG5cbiAgICAgICAgaWYgKHdlZWsgPCAxKSB7XG4gICAgICAgICAgICByZXNZZWFyID0gbW9tLnllYXIoKSAtIDE7XG4gICAgICAgICAgICByZXNXZWVrID0gd2VlayArIHdlZWtzSW5ZZWFyKHJlc1llYXIsIGRvdywgZG95KTtcbiAgICAgICAgfSBlbHNlIGlmICh3ZWVrID4gd2Vla3NJblllYXIobW9tLnllYXIoKSwgZG93LCBkb3kpKSB7XG4gICAgICAgICAgICByZXNXZWVrID0gd2VlayAtIHdlZWtzSW5ZZWFyKG1vbS55ZWFyKCksIGRvdywgZG95KTtcbiAgICAgICAgICAgIHJlc1llYXIgPSBtb20ueWVhcigpICsgMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSBtb20ueWVhcigpO1xuICAgICAgICAgICAgcmVzV2VlayA9IHdlZWs7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgd2VlazogcmVzV2VlayxcbiAgICAgICAgICAgIHllYXI6IHJlc1llYXJcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrc0luWWVhcih5ZWFyLCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla09mZnNldCA9IGZpcnN0V2Vla09mZnNldCh5ZWFyLCBkb3csIGRveSksXG4gICAgICAgICAgICB3ZWVrT2Zmc2V0TmV4dCA9IGZpcnN0V2Vla09mZnNldCh5ZWFyICsgMSwgZG93LCBkb3kpO1xuICAgICAgICByZXR1cm4gKGRheXNJblllYXIoeWVhcikgLSB3ZWVrT2Zmc2V0ICsgd2Vla09mZnNldE5leHQpIC8gNztcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigndycsIFsnd3cnLCAyXSwgJ3dvJywgJ3dlZWsnKTtcbiAgICBhZGRGb3JtYXRUb2tlbignVycsIFsnV1cnLCAyXSwgJ1dvJywgJ2lzb1dlZWsnKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnd2VlaycsICd3Jyk7XG4gICAgYWRkVW5pdEFsaWFzKCdpc29XZWVrJywgJ1cnKTtcblxuICAgIC8vIFBSSU9SSVRJRVNcblxuICAgIGFkZFVuaXRQcmlvcml0eSgnd2VlaycsIDUpO1xuICAgIGFkZFVuaXRQcmlvcml0eSgnaXNvV2VlaycsIDUpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbigndycsICBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3d3JywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1cnLCAgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdXVycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsndycsICd3dycsICdXJywgJ1dXJ10sIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB3ZWVrW3Rva2VuLnN1YnN0cigwLCAxKV0gPSB0b0ludChpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICAvLyBMT0NBTEVTXG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrIChtb20pIHtcbiAgICAgICAgcmV0dXJuIHdlZWtPZlllYXIobW9tLCB0aGlzLl93ZWVrLmRvdywgdGhpcy5fd2Vlay5kb3kpLndlZWs7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVXZWVrID0ge1xuICAgICAgICBkb3cgOiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95IDogNiAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMXN0IGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVGaXJzdERheU9mV2VlayAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl93ZWVrLmRvdztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVGaXJzdERheU9mWWVhciAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl93ZWVrLmRveTtcbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXRXZWVrIChpbnB1dCkge1xuICAgICAgICB2YXIgd2VlayA9IHRoaXMubG9jYWxlRGF0YSgpLndlZWsodGhpcyk7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gd2VlayA6IHRoaXMuYWRkKChpbnB1dCAtIHdlZWspICogNywgJ2QnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRJU09XZWVrIChpbnB1dCkge1xuICAgICAgICB2YXIgd2VlayA9IHdlZWtPZlllYXIodGhpcywgMSwgNCkud2VlaztcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyB3ZWVrIDogdGhpcy5hZGQoKGlucHV0IC0gd2VlaykgKiA3LCAnZCcpO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkJywgMCwgJ2RvJywgJ2RheScpO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2RkJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNNaW4odGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkZGQnLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5c1Nob3J0KHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZGRkZCcsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzKHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZScsIDAsIDAsICd3ZWVrZGF5Jyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ0UnLCAwLCAwLCAnaXNvV2Vla2RheScpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdkYXknLCAnZCcpO1xuICAgIGFkZFVuaXRBbGlhcygnd2Vla2RheScsICdlJyk7XG4gICAgYWRkVW5pdEFsaWFzKCdpc29XZWVrZGF5JywgJ0UnKTtcblxuICAgIC8vIFBSSU9SSVRZXG4gICAgYWRkVW5pdFByaW9yaXR5KCdkYXknLCAxMSk7XG4gICAgYWRkVW5pdFByaW9yaXR5KCd3ZWVrZGF5JywgMTEpO1xuICAgIGFkZFVuaXRQcmlvcml0eSgnaXNvV2Vla2RheScsIDExKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ2QnLCAgICBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2UnLCAgICBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0UnLCAgICBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2RkJywgICBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzTWluUmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2RkZCcsICAgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c1Nob3J0UmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2RkZGQnLCAgIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ2RkJywgJ2RkZCcsICdkZGRkJ10sIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB2YXIgd2Vla2RheSA9IGNvbmZpZy5fbG9jYWxlLndlZWtkYXlzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgICAgIC8vIGlmIHdlIGRpZG4ndCBnZXQgYSB3ZWVrZGF5IG5hbWUsIG1hcmsgdGhlIGRhdGUgYXMgaW52YWxpZFxuICAgICAgICBpZiAod2Vla2RheSAhPSBudWxsKSB7XG4gICAgICAgICAgICB3ZWVrLmQgPSB3ZWVrZGF5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZFdlZWtkYXkgPSBpbnB1dDtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydkJywgJ2UnLCAnRSddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgd2Vla1t0b2tlbl0gPSB0b0ludChpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICBmdW5jdGlvbiBwYXJzZVdlZWtkYXkoaW5wdXQsIGxvY2FsZSkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc05hTihpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludChpbnB1dCwgMTApO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5wdXQgPSBsb2NhbGUud2Vla2RheXNQYXJzZShpbnB1dCk7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZUlzb1dlZWtkYXkoaW5wdXQsIGxvY2FsZSkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c1BhcnNlKGlucHV0KSAlIDcgfHwgNztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNOYU4oaW5wdXQpID8gbnVsbCA6IGlucHV0O1xuICAgIH1cblxuICAgIC8vIExPQ0FMRVNcblxuICAgIHZhciBkZWZhdWx0TG9jYWxlV2Vla2RheXMgPSAnU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXknLnNwbGl0KCdfJyk7XG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXMgKG0sIGZvcm1hdCkge1xuICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX3dlZWtkYXlzKSA/IHRoaXMuX3dlZWtkYXlzIDpcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1snc3RhbmRhbG9uZSddO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX3dlZWtkYXlzKSA/IHRoaXMuX3dlZWtkYXlzW20uZGF5KCldIDpcbiAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzW3RoaXMuX3dlZWtkYXlzLmlzRm9ybWF0LnRlc3QoZm9ybWF0KSA/ICdmb3JtYXQnIDogJ3N0YW5kYWxvbmUnXVttLmRheSgpXTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQgPSAnU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Jy5zcGxpdCgnXycpO1xuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzU2hvcnQgKG0pIHtcbiAgICAgICAgcmV0dXJuIChtKSA/IHRoaXMuX3dlZWtkYXlzU2hvcnRbbS5kYXkoKV0gOiB0aGlzLl93ZWVrZGF5c1Nob3J0O1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlV2Vla2RheXNNaW4gPSAnU3VfTW9fVHVfV2VfVGhfRnJfU2EnLnNwbGl0KCdfJyk7XG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXNNaW4gKG0pIHtcbiAgICAgICAgcmV0dXJuIChtKSA/IHRoaXMuX3dlZWtkYXlzTWluW20uZGF5KCldIDogdGhpcy5fd2Vla2RheXNNaW47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlU3RyaWN0UGFyc2UkMSh3ZWVrZGF5TmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksIGlpLCBtb20sIGxsYyA9IHdlZWtkYXlOYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZSkge1xuICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlID0gW107XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyArK2kpIHtcbiAgICAgICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIDFdKS5kYXkoaSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZVtpXSA9IHRoaXMud2Vla2RheXNNaW4obW9tLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbaV0gPSB0aGlzLndlZWtkYXlzU2hvcnQobW9tLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlW2ldID0gdGhpcy53ZWVrZGF5cyhtb20sICcnKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ2RkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09ICdkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdkZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09ICdkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXNQYXJzZSAod2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLCBtb20sIHJlZ2V4O1xuXG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVTdHJpY3RQYXJzZSQxLmNhbGwodGhpcywgd2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZSkge1xuICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9mdWxsV2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG5cbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgIXRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKCdeJyArIHRoaXMud2Vla2RheXMobW9tLCAnJykucmVwbGFjZSgnLicsICdcXC4/JykgKyAnJCcsICdpJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cCgnXicgKyB0aGlzLndlZWtkYXlzU2hvcnQobW9tLCAnJykucmVwbGFjZSgnLicsICdcXC4/JykgKyAnJCcsICdpJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoJ14nICsgdGhpcy53ZWVrZGF5c01pbihtb20sICcnKS5yZXBsYWNlKCcuJywgJ1xcLj8nKSArICckJywgJ2knKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHJlZ2V4ID0gJ14nICsgdGhpcy53ZWVrZGF5cyhtb20sICcnKSArICd8XicgKyB0aGlzLndlZWtkYXlzU2hvcnQobW9tLCAnJykgKyAnfF4nICsgdGhpcy53ZWVrZGF5c01pbihtb20sICcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChyZWdleC5yZXBsYWNlKCcuJywgJycpLCAnaScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGVzdCB0aGUgcmVnZXhcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgZm9ybWF0ID09PSAnZGRkZCcgJiYgdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyaWN0ICYmIGZvcm1hdCA9PT0gJ2RkZCcgJiYgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmljdCAmJiBmb3JtYXQgPT09ICdkZCcgJiYgdGhpcy5fbWluV2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyaWN0ICYmIHRoaXMuX3dlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldERheU9mV2VlayAoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGwgPyB0aGlzIDogTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkYXkgPSB0aGlzLl9pc1VUQyA/IHRoaXMuX2QuZ2V0VVRDRGF5KCkgOiB0aGlzLl9kLmdldERheSgpO1xuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaW5wdXQgPSBwYXJzZVdlZWtkYXkoaW5wdXQsIHRoaXMubG9jYWxlRGF0YSgpKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFkZChpbnB1dCAtIGRheSwgJ2QnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBkYXk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRMb2NhbGVEYXlPZldlZWsgKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgd2Vla2RheSA9ICh0aGlzLmRheSgpICsgNyAtIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdykgJSA3O1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWtkYXkgOiB0aGlzLmFkZChpbnB1dCAtIHdlZWtkYXksICdkJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPRGF5T2ZXZWVrIChpbnB1dCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBiZWhhdmVzIHRoZSBzYW1lIGFzIG1vbWVudCNkYXkgZXhjZXB0XG4gICAgICAgIC8vIGFzIGEgZ2V0dGVyLCByZXR1cm5zIDcgaW5zdGVhZCBvZiAwICgxLTcgcmFuZ2UgaW5zdGVhZCBvZiAwLTYpXG4gICAgICAgIC8vIGFzIGEgc2V0dGVyLCBzdW5kYXkgc2hvdWxkIGJlbG9uZyB0byB0aGUgcHJldmlvdXMgd2Vlay5cblxuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIHdlZWtkYXkgPSBwYXJzZUlzb1dlZWtkYXkoaW5wdXQsIHRoaXMubG9jYWxlRGF0YSgpKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRheSh0aGlzLmRheSgpICUgNyA/IHdlZWtkYXkgOiB3ZWVrZGF5IC0gNyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXkoKSB8fCA3O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRXZWVrZGF5c1JlZ2V4ID0gbWF0Y2hXb3JkO1xuICAgIGZ1bmN0aW9uIHdlZWtkYXlzUmVnZXggKGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVXZWVrZGF5c1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1JlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCAmJiBpc1N0cmljdCA/XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCA6IHRoaXMuX3dlZWtkYXlzUmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdFdlZWtkYXlzU2hvcnRSZWdleCA9IG1hdGNoV29yZDtcbiAgICBmdW5jdGlvbiB3ZWVrZGF5c1Nob3J0UmVnZXggKGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVXZWVrZGF5c1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNTaG9ydFJlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXggPSBkZWZhdWx0V2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleCAmJiBpc1N0cmljdCA/XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4IDogdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRXZWVrZGF5c01pblJlZ2V4ID0gbWF0Y2hXb3JkO1xuICAgIGZ1bmN0aW9uIHdlZWtkYXlzTWluUmVnZXggKGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVXZWVrZGF5c1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c01pblJlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c01pblJlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzTWluUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleCAmJiBpc1N0cmljdCA/XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleCA6IHRoaXMuX3dlZWtkYXlzTWluUmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVXZWVrZGF5c1BhcnNlICgpIHtcbiAgICAgICAgZnVuY3Rpb24gY21wTGVuUmV2KGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBiLmxlbmd0aCAtIGEubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1pblBpZWNlcyA9IFtdLCBzaG9ydFBpZWNlcyA9IFtdLCBsb25nUGllY2VzID0gW10sIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLCBtb20sIG1pbnAsIHNob3J0cCwgbG9uZ3A7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIC8vIG1ha2UgdGhlIHJlZ2V4IGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeVxuICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCAxXSkuZGF5KGkpO1xuICAgICAgICAgICAgbWlucCA9IHRoaXMud2Vla2RheXNNaW4obW9tLCAnJyk7XG4gICAgICAgICAgICBzaG9ydHAgPSB0aGlzLndlZWtkYXlzU2hvcnQobW9tLCAnJyk7XG4gICAgICAgICAgICBsb25ncCA9IHRoaXMud2Vla2RheXMobW9tLCAnJyk7XG4gICAgICAgICAgICBtaW5QaWVjZXMucHVzaChtaW5wKTtcbiAgICAgICAgICAgIHNob3J0UGllY2VzLnB1c2goc2hvcnRwKTtcbiAgICAgICAgICAgIGxvbmdQaWVjZXMucHVzaChsb25ncCk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKG1pbnApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChzaG9ydHApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChsb25ncCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU29ydGluZyBtYWtlcyBzdXJlIGlmIG9uZSB3ZWVrZGF5IChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyIGl0XG4gICAgICAgIC8vIHdpbGwgbWF0Y2ggdGhlIGxvbmdlciBwaWVjZS5cbiAgICAgICAgbWluUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgc2hvcnRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBsb25nUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbWl4ZWRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICBzaG9ydFBpZWNlc1tpXSA9IHJlZ2V4RXNjYXBlKHNob3J0UGllY2VzW2ldKTtcbiAgICAgICAgICAgIGxvbmdQaWVjZXNbaV0gPSByZWdleEVzY2FwZShsb25nUGllY2VzW2ldKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzW2ldID0gcmVnZXhFc2NhcGUobWl4ZWRQaWVjZXNbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fd2Vla2RheXNSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIG1peGVkUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4ID0gdGhpcy5fd2Vla2RheXNSZWdleDtcbiAgICAgICAgdGhpcy5fd2Vla2RheXNNaW5SZWdleCA9IHRoaXMuX3dlZWtkYXlzUmVnZXg7XG5cbiAgICAgICAgdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIGxvbmdQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBzaG9ydFBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBtaW5QaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGZ1bmN0aW9uIGhGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhvdXJzKCkgJSAxMiB8fCAxMjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBrRm9ybWF0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ob3VycygpIHx8IDI0O1xuICAgIH1cblxuICAgIGFkZEZvcm1hdFRva2VuKCdIJywgWydISCcsIDJdLCAwLCAnaG91cicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdoJywgWydoaCcsIDJdLCAwLCBoRm9ybWF0KTtcbiAgICBhZGRGb3JtYXRUb2tlbignaycsIFsna2snLCAyXSwgMCwga0Zvcm1hdCk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignaG1tJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJycgKyBoRm9ybWF0LmFwcGx5KHRoaXMpICsgemVyb0ZpbGwodGhpcy5taW51dGVzKCksIDIpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2htbXNzJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJycgKyBoRm9ybWF0LmFwcGx5KHRoaXMpICsgemVyb0ZpbGwodGhpcy5taW51dGVzKCksIDIpICtcbiAgICAgICAgICAgIHplcm9GaWxsKHRoaXMuc2Vjb25kcygpLCAyKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdIbW0nLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnJyArIHRoaXMuaG91cnMoKSArIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdIbW1zcycsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICcnICsgdGhpcy5ob3VycygpICsgemVyb0ZpbGwodGhpcy5taW51dGVzKCksIDIpICtcbiAgICAgICAgICAgIHplcm9GaWxsKHRoaXMuc2Vjb25kcygpLCAyKTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIG1lcmlkaWVtICh0b2tlbiwgbG93ZXJjYXNlKSB7XG4gICAgICAgIGFkZEZvcm1hdFRva2VuKHRva2VuLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubWVyaWRpZW0odGhpcy5ob3VycygpLCB0aGlzLm1pbnV0ZXMoKSwgbG93ZXJjYXNlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbWVyaWRpZW0oJ2EnLCB0cnVlKTtcbiAgICBtZXJpZGllbSgnQScsIGZhbHNlKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnaG91cicsICdoJyk7XG5cbiAgICAvLyBQUklPUklUWVxuICAgIGFkZFVuaXRQcmlvcml0eSgnaG91cicsIDEzKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGZ1bmN0aW9uIG1hdGNoTWVyaWRpZW0gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5fbWVyaWRpZW1QYXJzZTtcbiAgICB9XG5cbiAgICBhZGRSZWdleFRva2VuKCdhJywgIG1hdGNoTWVyaWRpZW0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0EnLCAgbWF0Y2hNZXJpZGllbSk7XG4gICAgYWRkUmVnZXhUb2tlbignSCcsICBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2gnLCAgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdrJywgIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignSEgnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignaGgnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbigna2snLCBtYXRjaDF0bzIsIG1hdGNoMik7XG5cbiAgICBhZGRSZWdleFRva2VuKCdobW0nLCBtYXRjaDN0bzQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2htbXNzJywgbWF0Y2g1dG82KTtcbiAgICBhZGRSZWdleFRva2VuKCdIbW0nLCBtYXRjaDN0bzQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0htbXNzJywgbWF0Y2g1dG82KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydIJywgJ0hIJ10sIEhPVVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydrJywgJ2trJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIga0lucHV0ID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICBhcnJheVtIT1VSXSA9IGtJbnB1dCA9PT0gMjQgPyAwIDoga0lucHV0O1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oWydhJywgJ0EnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5faXNQbSA9IGNvbmZpZy5fbG9jYWxlLmlzUE0oaW5wdXQpO1xuICAgICAgICBjb25maWcuX21lcmlkaWVtID0gaW5wdXQ7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ2gnLCAnaGgnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdobW0nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvcyA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvcykpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvcykpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdobW1zcycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zMSA9IGlucHV0Lmxlbmd0aCAtIDQ7XG4gICAgICAgIHZhciBwb3MyID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zMSkpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvczEsIDIpKTtcbiAgICAgICAgYXJyYXlbU0VDT05EXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MyKSk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB0cnVlO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ0htbScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zKSk7XG4gICAgICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zKSk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignSG1tc3MnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvczEgPSBpbnB1dC5sZW5ndGggLSA0O1xuICAgICAgICB2YXIgcG9zMiA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvczEpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MxLCAyKSk7XG4gICAgICAgIGFycmF5W1NFQ09ORF0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMikpO1xuICAgIH0pO1xuXG4gICAgLy8gTE9DQUxFU1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlSXNQTSAoaW5wdXQpIHtcbiAgICAgICAgLy8gSUU4IFF1aXJrcyBNb2RlICYgSUU3IFN0YW5kYXJkcyBNb2RlIGRvIG5vdCBhbGxvdyBhY2Nlc3Npbmcgc3RyaW5ncyBsaWtlIGFycmF5c1xuICAgICAgICAvLyBVc2luZyBjaGFyQXQgc2hvdWxkIGJlIG1vcmUgY29tcGF0aWJsZS5cbiAgICAgICAgcmV0dXJuICgoaW5wdXQgKyAnJykudG9Mb3dlckNhc2UoKS5jaGFyQXQoMCkgPT09ICdwJyk7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVNZXJpZGllbVBhcnNlID0gL1thcF1cXC4/bT9cXC4/L2k7XG4gICAgZnVuY3Rpb24gbG9jYWxlTWVyaWRpZW0gKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgIGlmIChob3VycyA+IDExKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdwbScgOiAnUE0nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnYW0nIDogJ0FNJztcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgLy8gU2V0dGluZyB0aGUgaG91ciBzaG91bGQga2VlcCB0aGUgdGltZSwgYmVjYXVzZSB0aGUgdXNlciBleHBsaWNpdGx5XG4gICAgLy8gc3BlY2lmaWVkIHdoaWNoIGhvdXIgdGhleSB3YW50LiBTbyB0cnlpbmcgdG8gbWFpbnRhaW4gdGhlIHNhbWUgaG91ciAoaW5cbiAgICAvLyBhIG5ldyB0aW1lem9uZSkgbWFrZXMgc2Vuc2UuIEFkZGluZy9zdWJ0cmFjdGluZyBob3VycyBkb2VzIG5vdCBmb2xsb3dcbiAgICAvLyB0aGlzIHJ1bGUuXG4gICAgdmFyIGdldFNldEhvdXIgPSBtYWtlR2V0U2V0KCdIb3VycycsIHRydWUpO1xuXG4gICAgdmFyIGJhc2VDb25maWcgPSB7XG4gICAgICAgIGNhbGVuZGFyOiBkZWZhdWx0Q2FsZW5kYXIsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiBkZWZhdWx0TG9uZ0RhdGVGb3JtYXQsXG4gICAgICAgIGludmFsaWREYXRlOiBkZWZhdWx0SW52YWxpZERhdGUsXG4gICAgICAgIG9yZGluYWw6IGRlZmF1bHRPcmRpbmFsLFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiBkZWZhdWx0RGF5T2ZNb250aE9yZGluYWxQYXJzZSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiBkZWZhdWx0UmVsYXRpdmVUaW1lLFxuXG4gICAgICAgIG1vbnRoczogZGVmYXVsdExvY2FsZU1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQ6IGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydCxcblxuICAgICAgICB3ZWVrOiBkZWZhdWx0TG9jYWxlV2VlayxcblxuICAgICAgICB3ZWVrZGF5czogZGVmYXVsdExvY2FsZVdlZWtkYXlzLFxuICAgICAgICB3ZWVrZGF5c01pbjogZGVmYXVsdExvY2FsZVdlZWtkYXlzTWluLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiBkZWZhdWx0TG9jYWxlV2Vla2RheXNTaG9ydCxcblxuICAgICAgICBtZXJpZGllbVBhcnNlOiBkZWZhdWx0TG9jYWxlTWVyaWRpZW1QYXJzZVxuICAgIH07XG5cbiAgICAvLyBpbnRlcm5hbCBzdG9yYWdlIGZvciBsb2NhbGUgY29uZmlnIGZpbGVzXG4gICAgdmFyIGxvY2FsZXMgPSB7fTtcbiAgICB2YXIgbG9jYWxlRmFtaWxpZXMgPSB7fTtcbiAgICB2YXIgZ2xvYmFsTG9jYWxlO1xuXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplTG9jYWxlKGtleSkge1xuICAgICAgICByZXR1cm4ga2V5ID8ga2V5LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnXycsICctJykgOiBrZXk7XG4gICAgfVxuXG4gICAgLy8gcGljayB0aGUgbG9jYWxlIGZyb20gdGhlIGFycmF5XG4gICAgLy8gdHJ5IFsnZW4tYXUnLCAnZW4tZ2InXSBhcyAnZW4tYXUnLCAnZW4tZ2InLCAnZW4nLCBhcyBpbiBtb3ZlIHRocm91Z2ggdGhlIGxpc3QgdHJ5aW5nIGVhY2hcbiAgICAvLyBzdWJzdHJpbmcgZnJvbSBtb3N0IHNwZWNpZmljIHRvIGxlYXN0LCBidXQgbW92ZSB0byB0aGUgbmV4dCBhcnJheSBpdGVtIGlmIGl0J3MgYSBtb3JlIHNwZWNpZmljIHZhcmlhbnQgdGhhbiB0aGUgY3VycmVudCByb290XG4gICAgZnVuY3Rpb24gY2hvb3NlTG9jYWxlKG5hbWVzKSB7XG4gICAgICAgIHZhciBpID0gMCwgaiwgbmV4dCwgbG9jYWxlLCBzcGxpdDtcblxuICAgICAgICB3aGlsZSAoaSA8IG5hbWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgc3BsaXQgPSBub3JtYWxpemVMb2NhbGUobmFtZXNbaV0pLnNwbGl0KCctJyk7XG4gICAgICAgICAgICBqID0gc3BsaXQubGVuZ3RoO1xuICAgICAgICAgICAgbmV4dCA9IG5vcm1hbGl6ZUxvY2FsZShuYW1lc1tpICsgMV0pO1xuICAgICAgICAgICAgbmV4dCA9IG5leHQgPyBuZXh0LnNwbGl0KCctJykgOiBudWxsO1xuICAgICAgICAgICAgd2hpbGUgKGogPiAwKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxlID0gbG9hZExvY2FsZShzcGxpdC5zbGljZSgwLCBqKS5qb2luKCctJykpO1xuICAgICAgICAgICAgICAgIGlmIChsb2NhbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG5leHQgJiYgbmV4dC5sZW5ndGggPj0gaiAmJiBjb21wYXJlQXJyYXlzKHNwbGl0LCBuZXh0LCB0cnVlKSA+PSBqIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICAvL3RoZSBuZXh0IGFycmF5IGl0ZW0gaXMgYmV0dGVyIHRoYW4gYSBzaGFsbG93ZXIgc3Vic3RyaW5nIG9mIHRoaXMgb25lXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBqLS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2FkTG9jYWxlKG5hbWUpIHtcbiAgICAgICAgdmFyIG9sZExvY2FsZSA9IG51bGw7XG4gICAgICAgIC8vIFRPRE86IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIHJlZ2lzdGVyIGFuZCBsb2FkIGFsbCB0aGUgbG9jYWxlcyBpbiBOb2RlXG4gICAgICAgIGlmICghbG9jYWxlc1tuYW1lXSAmJiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcpICYmXG4gICAgICAgICAgICAgICAgbW9kdWxlICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIG9sZExvY2FsZSA9IGdsb2JhbExvY2FsZS5fYWJicjtcbiAgICAgICAgICAgICAgICB2YXIgYWxpYXNlZFJlcXVpcmUgPSByZXF1aXJlO1xuICAgICAgICAgICAgICAgIGFsaWFzZWRSZXF1aXJlKCcuL2xvY2FsZS8nICsgbmFtZSk7XG4gICAgICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG9sZExvY2FsZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2NhbGVzW25hbWVdO1xuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBsb2FkIGxvY2FsZSBhbmQgdGhlbiBzZXQgdGhlIGdsb2JhbCBsb2NhbGUuICBJZlxuICAgIC8vIG5vIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGluLCBpdCB3aWxsIHNpbXBseSByZXR1cm4gdGhlIGN1cnJlbnQgZ2xvYmFsXG4gICAgLy8gbG9jYWxlIGtleS5cbiAgICBmdW5jdGlvbiBnZXRTZXRHbG9iYWxMb2NhbGUgKGtleSwgdmFsdWVzKSB7XG4gICAgICAgIHZhciBkYXRhO1xuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQodmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBnZXRMb2NhbGUoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkZWZpbmVMb2NhbGUoa2V5LCB2YWx1ZXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIC8vIG1vbWVudC5kdXJhdGlvbi5fbG9jYWxlID0gbW9tZW50Ll9sb2NhbGUgPSBkYXRhO1xuICAgICAgICAgICAgICAgIGdsb2JhbExvY2FsZSA9IGRhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoKHR5cGVvZiBjb25zb2xlICE9PSAgJ3VuZGVmaW5lZCcpICYmIGNvbnNvbGUud2Fybikge1xuICAgICAgICAgICAgICAgICAgICAvL3dhcm4gdXNlciBpZiBhcmd1bWVudHMgYXJlIHBhc3NlZCBidXQgdGhlIGxvY2FsZSBjb3VsZCBub3QgYmUgc2V0XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignTG9jYWxlICcgKyBrZXkgKyAgJyBub3QgZm91bmQuIERpZCB5b3UgZm9yZ2V0IHRvIGxvYWQgaXQ/Jyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZS5fYWJicjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZWZpbmVMb2NhbGUgKG5hbWUsIGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlLCBwYXJlbnRDb25maWcgPSBiYXNlQ29uZmlnO1xuICAgICAgICAgICAgY29uZmlnLmFiYnIgPSBuYW1lO1xuICAgICAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGRlcHJlY2F0ZVNpbXBsZSgnZGVmaW5lTG9jYWxlT3ZlcnJpZGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3VzZSBtb21lbnQudXBkYXRlTG9jYWxlKGxvY2FsZU5hbWUsIGNvbmZpZykgdG8gY2hhbmdlICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2FuIGV4aXN0aW5nIGxvY2FsZS4gbW9tZW50LmRlZmluZUxvY2FsZShsb2NhbGVOYW1lLCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdjb25maWcpIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGNyZWF0aW5nIGEgbmV3IGxvY2FsZSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9kZWZpbmUtbG9jYWxlLyBmb3IgbW9yZSBpbmZvLicpO1xuICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGxvY2FsZXNbbmFtZV0uX2NvbmZpZztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLnBhcmVudExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZXNbY29uZmlnLnBhcmVudExvY2FsZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBsb2NhbGVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdLl9jb25maWc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxlID0gbG9hZExvY2FsZShjb25maWcucGFyZW50TG9jYWxlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBsb2NhbGUuX2NvbmZpZztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbG9jYWxlRmFtaWxpZXNbY29uZmlnLnBhcmVudExvY2FsZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGVGYW1pbGllc1tjb25maWcucGFyZW50TG9jYWxlXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlRmFtaWxpZXNbY29uZmlnLnBhcmVudExvY2FsZV0ucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWc6IGNvbmZpZ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBuZXcgTG9jYWxlKG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNvbmZpZykpO1xuXG4gICAgICAgICAgICBpZiAobG9jYWxlRmFtaWxpZXNbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICBsb2NhbGVGYW1pbGllc1tuYW1lXS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmluZUxvY2FsZSh4Lm5hbWUsIHguY29uZmlnKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gYmFja3dhcmRzIGNvbXBhdCBmb3Igbm93OiBhbHNvIHNldCB0aGUgbG9jYWxlXG4gICAgICAgICAgICAvLyBtYWtlIHN1cmUgd2Ugc2V0IHRoZSBsb2NhbGUgQUZURVIgYWxsIGNoaWxkIGxvY2FsZXMgaGF2ZSBiZWVuXG4gICAgICAgICAgICAvLyBjcmVhdGVkLCBzbyB3ZSB3b24ndCBlbmQgdXAgd2l0aCB0aGUgY2hpbGQgbG9jYWxlIHNldC5cbiAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShuYW1lKTtcblxuXG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHVzZWZ1bCBmb3IgdGVzdGluZ1xuICAgICAgICAgICAgZGVsZXRlIGxvY2FsZXNbbmFtZV07XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUxvY2FsZShuYW1lLCBjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlLCB0bXBMb2NhbGUsIHBhcmVudENvbmZpZyA9IGJhc2VDb25maWc7XG4gICAgICAgICAgICAvLyBNRVJHRVxuICAgICAgICAgICAgdG1wTG9jYWxlID0gbG9hZExvY2FsZShuYW1lKTtcbiAgICAgICAgICAgIGlmICh0bXBMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IHRtcExvY2FsZS5fY29uZmlnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uZmlnID0gbWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY29uZmlnKTtcbiAgICAgICAgICAgIGxvY2FsZSA9IG5ldyBMb2NhbGUoY29uZmlnKTtcbiAgICAgICAgICAgIGxvY2FsZS5wYXJlbnRMb2NhbGUgPSBsb2NhbGVzW25hbWVdO1xuICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IGxvY2FsZTtcblxuICAgICAgICAgICAgLy8gYmFja3dhcmRzIGNvbXBhdCBmb3Igbm93OiBhbHNvIHNldCB0aGUgbG9jYWxlXG4gICAgICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGUobmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBwYXNzIG51bGwgZm9yIGNvbmZpZyB0byB1bnVwZGF0ZSwgdXNlZnVsIGZvciB0ZXN0c1xuICAgICAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdLnBhcmVudExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBsb2NhbGVzW25hbWVdLnBhcmVudExvY2FsZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvY2FsZXNbbmFtZV07XG4gICAgfVxuXG4gICAgLy8gcmV0dXJucyBsb2NhbGUgZGF0YVxuICAgIGZ1bmN0aW9uIGdldExvY2FsZSAoa2V5KSB7XG4gICAgICAgIHZhciBsb2NhbGU7XG5cbiAgICAgICAgaWYgKGtleSAmJiBrZXkuX2xvY2FsZSAmJiBrZXkuX2xvY2FsZS5fYWJicikge1xuICAgICAgICAgICAga2V5ID0ga2V5Ll9sb2NhbGUuX2FiYnI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWtleSkge1xuICAgICAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNBcnJheShrZXkpKSB7XG4gICAgICAgICAgICAvL3Nob3J0LWNpcmN1aXQgZXZlcnl0aGluZyBlbHNlXG4gICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKGtleSk7XG4gICAgICAgICAgICBpZiAobG9jYWxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGtleSA9IFtrZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNob29zZUxvY2FsZShrZXkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RMb2NhbGVzKCkge1xuICAgICAgICByZXR1cm4ga2V5cyhsb2NhbGVzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja092ZXJmbG93IChtKSB7XG4gICAgICAgIHZhciBvdmVyZmxvdztcbiAgICAgICAgdmFyIGEgPSBtLl9hO1xuXG4gICAgICAgIGlmIChhICYmIGdldFBhcnNpbmdGbGFncyhtKS5vdmVyZmxvdyA9PT0gLTIpIHtcbiAgICAgICAgICAgIG92ZXJmbG93ID1cbiAgICAgICAgICAgICAgICBhW01PTlRIXSAgICAgICA8IDAgfHwgYVtNT05USF0gICAgICAgPiAxMSAgPyBNT05USCA6XG4gICAgICAgICAgICAgICAgYVtEQVRFXSAgICAgICAgPCAxIHx8IGFbREFURV0gICAgICAgID4gZGF5c0luTW9udGgoYVtZRUFSXSwgYVtNT05USF0pID8gREFURSA6XG4gICAgICAgICAgICAgICAgYVtIT1VSXSAgICAgICAgPCAwIHx8IGFbSE9VUl0gICAgICAgID4gMjQgfHwgKGFbSE9VUl0gPT09IDI0ICYmIChhW01JTlVURV0gIT09IDAgfHwgYVtTRUNPTkRdICE9PSAwIHx8IGFbTUlMTElTRUNPTkRdICE9PSAwKSkgPyBIT1VSIDpcbiAgICAgICAgICAgICAgICBhW01JTlVURV0gICAgICA8IDAgfHwgYVtNSU5VVEVdICAgICAgPiA1OSAgPyBNSU5VVEUgOlxuICAgICAgICAgICAgICAgIGFbU0VDT05EXSAgICAgIDwgMCB8fCBhW1NFQ09ORF0gICAgICA+IDU5ICA/IFNFQ09ORCA6XG4gICAgICAgICAgICAgICAgYVtNSUxMSVNFQ09ORF0gPCAwIHx8IGFbTUlMTElTRUNPTkRdID4gOTk5ID8gTUlMTElTRUNPTkQgOlxuICAgICAgICAgICAgICAgIC0xO1xuXG4gICAgICAgICAgICBpZiAoZ2V0UGFyc2luZ0ZsYWdzKG0pLl9vdmVyZmxvd0RheU9mWWVhciAmJiAob3ZlcmZsb3cgPCBZRUFSIHx8IG92ZXJmbG93ID4gREFURSkpIHtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdyA9IERBVEU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZ2V0UGFyc2luZ0ZsYWdzKG0pLl9vdmVyZmxvd1dlZWtzICYmIG92ZXJmbG93ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gV0VFSztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChnZXRQYXJzaW5nRmxhZ3MobSkuX292ZXJmbG93V2Vla2RheSAmJiBvdmVyZmxvdyA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdyA9IFdFRUtEQVk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhtKS5vdmVyZmxvdyA9IG92ZXJmbG93O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgLy8gUGljayB0aGUgZmlyc3QgZGVmaW5lZCBvZiB0d28gb3IgdGhyZWUgYXJndW1lbnRzLlxuICAgIGZ1bmN0aW9uIGRlZmF1bHRzKGEsIGIsIGMpIHtcbiAgICAgICAgaWYgKGEgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGIgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3VycmVudERhdGVBcnJheShjb25maWcpIHtcbiAgICAgICAgLy8gaG9va3MgaXMgYWN0dWFsbHkgdGhlIGV4cG9ydGVkIG1vbWVudCBvYmplY3RcbiAgICAgICAgdmFyIG5vd1ZhbHVlID0gbmV3IERhdGUoaG9va3Mubm93KCkpO1xuICAgICAgICBpZiAoY29uZmlnLl91c2VVVEMpIHtcbiAgICAgICAgICAgIHJldHVybiBbbm93VmFsdWUuZ2V0VVRDRnVsbFllYXIoKSwgbm93VmFsdWUuZ2V0VVRDTW9udGgoKSwgbm93VmFsdWUuZ2V0VVRDRGF0ZSgpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW25vd1ZhbHVlLmdldEZ1bGxZZWFyKCksIG5vd1ZhbHVlLmdldE1vbnRoKCksIG5vd1ZhbHVlLmdldERhdGUoKV07XG4gICAgfVxuXG4gICAgLy8gY29udmVydCBhbiBhcnJheSB0byBhIGRhdGUuXG4gICAgLy8gdGhlIGFycmF5IHNob3VsZCBtaXJyb3IgdGhlIHBhcmFtZXRlcnMgYmVsb3dcbiAgICAvLyBub3RlOiBhbGwgdmFsdWVzIHBhc3QgdGhlIHllYXIgYXJlIG9wdGlvbmFsIGFuZCB3aWxsIGRlZmF1bHQgdG8gdGhlIGxvd2VzdCBwb3NzaWJsZSB2YWx1ZS5cbiAgICAvLyBbeWVhciwgbW9udGgsIGRheSAsIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZF1cbiAgICBmdW5jdGlvbiBjb25maWdGcm9tQXJyYXkgKGNvbmZpZykge1xuICAgICAgICB2YXIgaSwgZGF0ZSwgaW5wdXQgPSBbXSwgY3VycmVudERhdGUsIGV4cGVjdGVkV2Vla2RheSwgeWVhclRvVXNlO1xuXG4gICAgICAgIGlmIChjb25maWcuX2QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnREYXRlID0gY3VycmVudERhdGVBcnJheShjb25maWcpO1xuXG4gICAgICAgIC8vY29tcHV0ZSBkYXkgb2YgdGhlIHllYXIgZnJvbSB3ZWVrcyBhbmQgd2Vla2RheXNcbiAgICAgICAgaWYgKGNvbmZpZy5fdyAmJiBjb25maWcuX2FbREFURV0gPT0gbnVsbCAmJiBjb25maWcuX2FbTU9OVEhdID09IG51bGwpIHtcbiAgICAgICAgICAgIGRheU9mWWVhckZyb21XZWVrSW5mbyhjb25maWcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9pZiB0aGUgZGF5IG9mIHRoZSB5ZWFyIGlzIHNldCwgZmlndXJlIG91dCB3aGF0IGl0IGlzXG4gICAgICAgIGlmIChjb25maWcuX2RheU9mWWVhciAhPSBudWxsKSB7XG4gICAgICAgICAgICB5ZWFyVG9Vc2UgPSBkZWZhdWx0cyhjb25maWcuX2FbWUVBUl0sIGN1cnJlbnREYXRlW1lFQVJdKTtcblxuICAgICAgICAgICAgaWYgKGNvbmZpZy5fZGF5T2ZZZWFyID4gZGF5c0luWWVhcih5ZWFyVG9Vc2UpIHx8IGNvbmZpZy5fZGF5T2ZZZWFyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuX292ZXJmbG93RGF5T2ZZZWFyID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGF0ZSA9IGNyZWF0ZVVUQ0RhdGUoeWVhclRvVXNlLCAwLCBjb25maWcuX2RheU9mWWVhcik7XG4gICAgICAgICAgICBjb25maWcuX2FbTU9OVEhdID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgICAgICAgICAgY29uZmlnLl9hW0RBVEVdID0gZGF0ZS5nZXRVVENEYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZWZhdWx0IHRvIGN1cnJlbnQgZGF0ZS5cbiAgICAgICAgLy8gKiBpZiBubyB5ZWFyLCBtb250aCwgZGF5IG9mIG1vbnRoIGFyZSBnaXZlbiwgZGVmYXVsdCB0byB0b2RheVxuICAgICAgICAvLyAqIGlmIGRheSBvZiBtb250aCBpcyBnaXZlbiwgZGVmYXVsdCBtb250aCBhbmQgeWVhclxuICAgICAgICAvLyAqIGlmIG1vbnRoIGlzIGdpdmVuLCBkZWZhdWx0IG9ubHkgeWVhclxuICAgICAgICAvLyAqIGlmIHllYXIgaXMgZ2l2ZW4sIGRvbid0IGRlZmF1bHQgYW55dGhpbmdcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDMgJiYgY29uZmlnLl9hW2ldID09IG51bGw7ICsraSkge1xuICAgICAgICAgICAgY29uZmlnLl9hW2ldID0gaW5wdXRbaV0gPSBjdXJyZW50RGF0ZVtpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFplcm8gb3V0IHdoYXRldmVyIHdhcyBub3QgZGVmYXVsdGVkLCBpbmNsdWRpbmcgdGltZVxuICAgICAgICBmb3IgKDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgY29uZmlnLl9hW2ldID0gaW5wdXRbaV0gPSAoY29uZmlnLl9hW2ldID09IG51bGwpID8gKGkgPT09IDIgPyAxIDogMCkgOiBjb25maWcuX2FbaV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaGVjayBmb3IgMjQ6MDA6MDAuMDAwXG4gICAgICAgIGlmIChjb25maWcuX2FbSE9VUl0gPT09IDI0ICYmXG4gICAgICAgICAgICAgICAgY29uZmlnLl9hW01JTlVURV0gPT09IDAgJiZcbiAgICAgICAgICAgICAgICBjb25maWcuX2FbU0VDT05EXSA9PT0gMCAmJlxuICAgICAgICAgICAgICAgIGNvbmZpZy5fYVtNSUxMSVNFQ09ORF0gPT09IDApIHtcbiAgICAgICAgICAgIGNvbmZpZy5fbmV4dERheSA9IHRydWU7XG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnLl9kID0gKGNvbmZpZy5fdXNlVVRDID8gY3JlYXRlVVRDRGF0ZSA6IGNyZWF0ZURhdGUpLmFwcGx5KG51bGwsIGlucHV0KTtcbiAgICAgICAgZXhwZWN0ZWRXZWVrZGF5ID0gY29uZmlnLl91c2VVVEMgPyBjb25maWcuX2QuZ2V0VVRDRGF5KCkgOiBjb25maWcuX2QuZ2V0RGF5KCk7XG5cbiAgICAgICAgLy8gQXBwbHkgdGltZXpvbmUgb2Zmc2V0IGZyb20gaW5wdXQuIFRoZSBhY3R1YWwgdXRjT2Zmc2V0IGNhbiBiZSBjaGFuZ2VkXG4gICAgICAgIC8vIHdpdGggcGFyc2Vab25lLlxuICAgICAgICBpZiAoY29uZmlnLl90em0gIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uZmlnLl9kLnNldFVUQ01pbnV0ZXMoY29uZmlnLl9kLmdldFVUQ01pbnV0ZXMoKSAtIGNvbmZpZy5fdHptKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcuX25leHREYXkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9IDI0O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2hlY2sgZm9yIG1pc21hdGNoaW5nIGRheSBvZiB3ZWVrXG4gICAgICAgIGlmIChjb25maWcuX3cgJiYgdHlwZW9mIGNvbmZpZy5fdy5kICE9PSAndW5kZWZpbmVkJyAmJiBjb25maWcuX3cuZCAhPT0gZXhwZWN0ZWRXZWVrZGF5KSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS53ZWVrZGF5TWlzbWF0Y2ggPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGF5T2ZZZWFyRnJvbVdlZWtJbmZvKGNvbmZpZykge1xuICAgICAgICB2YXIgdywgd2Vla1llYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95LCB0ZW1wLCB3ZWVrZGF5T3ZlcmZsb3c7XG5cbiAgICAgICAgdyA9IGNvbmZpZy5fdztcbiAgICAgICAgaWYgKHcuR0cgIT0gbnVsbCB8fCB3LlcgIT0gbnVsbCB8fCB3LkUgIT0gbnVsbCkge1xuICAgICAgICAgICAgZG93ID0gMTtcbiAgICAgICAgICAgIGRveSA9IDQ7XG5cbiAgICAgICAgICAgIC8vIFRPRE86IFdlIG5lZWQgdG8gdGFrZSB0aGUgY3VycmVudCBpc29XZWVrWWVhciwgYnV0IHRoYXQgZGVwZW5kcyBvblxuICAgICAgICAgICAgLy8gaG93IHdlIGludGVycHJldCBub3cgKGxvY2FsLCB1dGMsIGZpeGVkIG9mZnNldCkuIFNvIGNyZWF0ZVxuICAgICAgICAgICAgLy8gYSBub3cgdmVyc2lvbiBvZiBjdXJyZW50IGNvbmZpZyAodGFrZSBsb2NhbC91dGMvb2Zmc2V0IGZsYWdzLCBhbmRcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBub3cpLlxuICAgICAgICAgICAgd2Vla1llYXIgPSBkZWZhdWx0cyh3LkdHLCBjb25maWcuX2FbWUVBUl0sIHdlZWtPZlllYXIoY3JlYXRlTG9jYWwoKSwgMSwgNCkueWVhcik7XG4gICAgICAgICAgICB3ZWVrID0gZGVmYXVsdHMody5XLCAxKTtcbiAgICAgICAgICAgIHdlZWtkYXkgPSBkZWZhdWx0cyh3LkUsIDEpO1xuICAgICAgICAgICAgaWYgKHdlZWtkYXkgPCAxIHx8IHdlZWtkYXkgPiA3KSB7XG4gICAgICAgICAgICAgICAgd2Vla2RheU92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRvdyA9IGNvbmZpZy5fbG9jYWxlLl93ZWVrLmRvdztcbiAgICAgICAgICAgIGRveSA9IGNvbmZpZy5fbG9jYWxlLl93ZWVrLmRveTtcblxuICAgICAgICAgICAgdmFyIGN1cldlZWsgPSB3ZWVrT2ZZZWFyKGNyZWF0ZUxvY2FsKCksIGRvdywgZG95KTtcblxuICAgICAgICAgICAgd2Vla1llYXIgPSBkZWZhdWx0cyh3LmdnLCBjb25maWcuX2FbWUVBUl0sIGN1cldlZWsueWVhcik7XG5cbiAgICAgICAgICAgIC8vIERlZmF1bHQgdG8gY3VycmVudCB3ZWVrLlxuICAgICAgICAgICAgd2VlayA9IGRlZmF1bHRzKHcudywgY3VyV2Vlay53ZWVrKTtcblxuICAgICAgICAgICAgaWYgKHcuZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gd2Vla2RheSAtLSBsb3cgZGF5IG51bWJlcnMgYXJlIGNvbnNpZGVyZWQgbmV4dCB3ZWVrXG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IHcuZDtcbiAgICAgICAgICAgICAgICBpZiAod2Vla2RheSA8IDAgfHwgd2Vla2RheSA+IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgd2Vla2RheU92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHcuZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gbG9jYWwgd2Vla2RheSAtLSBjb3VudGluZyBzdGFydHMgZnJvbSBiZWdpbmluZyBvZiB3ZWVrXG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IHcuZSArIGRvdztcbiAgICAgICAgICAgICAgICBpZiAody5lIDwgMCB8fCB3LmUgPiA2KSB7XG4gICAgICAgICAgICAgICAgICAgIHdlZWtkYXlPdmVyZmxvdyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBkZWZhdWx0IHRvIGJlZ2luaW5nIG9mIHdlZWtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5ID0gZG93O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh3ZWVrIDwgMSB8fCB3ZWVrID4gd2Vla3NJblllYXIod2Vla1llYXIsIGRvdywgZG95KSkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuX292ZXJmbG93V2Vla3MgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHdlZWtkYXlPdmVyZmxvdyAhPSBudWxsKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dXZWVrZGF5ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRlbXAgPSBkYXlPZlllYXJGcm9tV2Vla3Mod2Vla1llYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtZRUFSXSA9IHRlbXAueWVhcjtcbiAgICAgICAgICAgIGNvbmZpZy5fZGF5T2ZZZWFyID0gdGVtcC5kYXlPZlllYXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpc28gODYwMSByZWdleFxuICAgIC8vIDAwMDAtMDAtMDAgMDAwMC1XMDAgb3IgMDAwMC1XMDAtMCArIFQgKyAwMCBvciAwMDowMCBvciAwMDowMDowMCBvciAwMDowMDowMC4wMDAgKyArMDA6MDAgb3IgKzAwMDAgb3IgKzAwKVxuICAgIHZhciBleHRlbmRlZElzb1JlZ2V4ID0gL15cXHMqKCg/OlsrLV1cXGR7Nn18XFxkezR9KS0oPzpcXGRcXGQtXFxkXFxkfFdcXGRcXGQtXFxkfFdcXGRcXGR8XFxkXFxkXFxkfFxcZFxcZCkpKD86KFR8ICkoXFxkXFxkKD86OlxcZFxcZCg/OjpcXGRcXGQoPzpbLixdXFxkKyk/KT8pPykoW1xcK1xcLV1cXGRcXGQoPzo6P1xcZFxcZCk/fFxccypaKT8pPyQvO1xuICAgIHZhciBiYXNpY0lzb1JlZ2V4ID0gL15cXHMqKCg/OlsrLV1cXGR7Nn18XFxkezR9KSg/OlxcZFxcZFxcZFxcZHxXXFxkXFxkXFxkfFdcXGRcXGR8XFxkXFxkXFxkfFxcZFxcZCkpKD86KFR8ICkoXFxkXFxkKD86XFxkXFxkKD86XFxkXFxkKD86Wy4sXVxcZCspPyk/KT8pKFtcXCtcXC1dXFxkXFxkKD86Oj9cXGRcXGQpP3xcXHMqWik/KT8kLztcblxuICAgIHZhciB0elJlZ2V4ID0gL1p8WystXVxcZFxcZCg/Ojo/XFxkXFxkKT8vO1xuXG4gICAgdmFyIGlzb0RhdGVzID0gW1xuICAgICAgICBbJ1lZWVlZWS1NTS1ERCcsIC9bKy1dXFxkezZ9LVxcZFxcZC1cXGRcXGQvXSxcbiAgICAgICAgWydZWVlZLU1NLUREJywgL1xcZHs0fS1cXGRcXGQtXFxkXFxkL10sXG4gICAgICAgIFsnR0dHRy1bV11XVy1FJywgL1xcZHs0fS1XXFxkXFxkLVxcZC9dLFxuICAgICAgICBbJ0dHR0ctW1ddV1cnLCAvXFxkezR9LVdcXGRcXGQvLCBmYWxzZV0sXG4gICAgICAgIFsnWVlZWS1EREQnLCAvXFxkezR9LVxcZHszfS9dLFxuICAgICAgICBbJ1lZWVktTU0nLCAvXFxkezR9LVxcZFxcZC8sIGZhbHNlXSxcbiAgICAgICAgWydZWVlZWVlNTUREJywgL1srLV1cXGR7MTB9L10sXG4gICAgICAgIFsnWVlZWU1NREQnLCAvXFxkezh9L10sXG4gICAgICAgIC8vIFlZWVlNTSBpcyBOT1QgYWxsb3dlZCBieSB0aGUgc3RhbmRhcmRcbiAgICAgICAgWydHR0dHW1ddV1dFJywgL1xcZHs0fVdcXGR7M30vXSxcbiAgICAgICAgWydHR0dHW1ddV1cnLCAvXFxkezR9V1xcZHsyfS8sIGZhbHNlXSxcbiAgICAgICAgWydZWVlZREREJywgL1xcZHs3fS9dXG4gICAgXTtcblxuICAgIC8vIGlzbyB0aW1lIGZvcm1hdHMgYW5kIHJlZ2V4ZXNcbiAgICB2YXIgaXNvVGltZXMgPSBbXG4gICAgICAgIFsnSEg6bW06c3MuU1NTUycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZFxcLlxcZCsvXSxcbiAgICAgICAgWydISDptbTpzcyxTU1NTJywgL1xcZFxcZDpcXGRcXGQ6XFxkXFxkLFxcZCsvXSxcbiAgICAgICAgWydISDptbTpzcycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZC9dLFxuICAgICAgICBbJ0hIOm1tJywgL1xcZFxcZDpcXGRcXGQvXSxcbiAgICAgICAgWydISG1tc3MuU1NTUycsIC9cXGRcXGRcXGRcXGRcXGRcXGRcXC5cXGQrL10sXG4gICAgICAgIFsnSEhtbXNzLFNTU1MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkLFxcZCsvXSxcbiAgICAgICAgWydISG1tc3MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkL10sXG4gICAgICAgIFsnSEhtbScsIC9cXGRcXGRcXGRcXGQvXSxcbiAgICAgICAgWydISCcsIC9cXGRcXGQvXVxuICAgIF07XG5cbiAgICB2YXIgYXNwTmV0SnNvblJlZ2V4ID0gL15cXC8/RGF0ZVxcKChcXC0/XFxkKykvaTtcblxuICAgIC8vIGRhdGUgZnJvbSBpc28gZm9ybWF0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUlTTyhjb25maWcpIHtcbiAgICAgICAgdmFyIGksIGwsXG4gICAgICAgICAgICBzdHJpbmcgPSBjb25maWcuX2ksXG4gICAgICAgICAgICBtYXRjaCA9IGV4dGVuZGVkSXNvUmVnZXguZXhlYyhzdHJpbmcpIHx8IGJhc2ljSXNvUmVnZXguZXhlYyhzdHJpbmcpLFxuICAgICAgICAgICAgYWxsb3dUaW1lLCBkYXRlRm9ybWF0LCB0aW1lRm9ybWF0LCB0ekZvcm1hdDtcblxuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmlzbyA9IHRydWU7XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBpc29EYXRlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNvRGF0ZXNbaV1bMV0uZXhlYyhtYXRjaFsxXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZUZvcm1hdCA9IGlzb0RhdGVzW2ldWzBdO1xuICAgICAgICAgICAgICAgICAgICBhbGxvd1RpbWUgPSBpc29EYXRlc1tpXVsyXSAhPT0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRlRm9ybWF0ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbM10pIHtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gaXNvVGltZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc29UaW1lc1tpXVsxXS5leGVjKG1hdGNoWzNdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF0Y2hbMl0gc2hvdWxkIGJlICdUJyBvciBzcGFjZVxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZUZvcm1hdCA9IChtYXRjaFsyXSB8fCAnICcpICsgaXNvVGltZXNbaV1bMF07XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGltZUZvcm1hdCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFhbGxvd1RpbWUgJiYgdGltZUZvcm1hdCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hdGNoWzRdKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR6UmVnZXguZXhlYyhtYXRjaFs0XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdHpGb3JtYXQgPSAnWic7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25maWcuX2YgPSBkYXRlRm9ybWF0ICsgKHRpbWVGb3JtYXQgfHwgJycpICsgKHR6Rm9ybWF0IHx8ICcnKTtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gUkZDIDI4MjIgcmVnZXg6IEZvciBkZXRhaWxzIHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjgyMiNzZWN0aW9uLTMuM1xuICAgIHZhciByZmMyODIyID0gL14oPzooTW9ufFR1ZXxXZWR8VGh1fEZyaXxTYXR8U3VuKSw/XFxzKT8oXFxkezEsMn0pXFxzKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKVxccyhcXGR7Miw0fSlcXHMoXFxkXFxkKTooXFxkXFxkKSg/OjooXFxkXFxkKSk/XFxzKD86KFVUfEdNVHxbRUNNUF1bU0RdVCl8KFtael0pfChbKy1dXFxkezR9KSkkLztcblxuICAgIGZ1bmN0aW9uIGV4dHJhY3RGcm9tUkZDMjgyMlN0cmluZ3MoeWVhclN0ciwgbW9udGhTdHIsIGRheVN0ciwgaG91clN0ciwgbWludXRlU3RyLCBzZWNvbmRTdHIpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IFtcbiAgICAgICAgICAgIHVudHJ1bmNhdGVZZWFyKHllYXJTdHIpLFxuICAgICAgICAgICAgZGVmYXVsdExvY2FsZU1vbnRoc1Nob3J0LmluZGV4T2YobW9udGhTdHIpLFxuICAgICAgICAgICAgcGFyc2VJbnQoZGF5U3RyLCAxMCksXG4gICAgICAgICAgICBwYXJzZUludChob3VyU3RyLCAxMCksXG4gICAgICAgICAgICBwYXJzZUludChtaW51dGVTdHIsIDEwKVxuICAgICAgICBdO1xuXG4gICAgICAgIGlmIChzZWNvbmRTdHIpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHBhcnNlSW50KHNlY29uZFN0ciwgMTApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdW50cnVuY2F0ZVllYXIoeWVhclN0cikge1xuICAgICAgICB2YXIgeWVhciA9IHBhcnNlSW50KHllYXJTdHIsIDEwKTtcbiAgICAgICAgaWYgKHllYXIgPD0gNDkpIHtcbiAgICAgICAgICAgIHJldHVybiAyMDAwICsgeWVhcjtcbiAgICAgICAgfSBlbHNlIGlmICh5ZWFyIDw9IDk5OSkge1xuICAgICAgICAgICAgcmV0dXJuIDE5MDAgKyB5ZWFyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB5ZWFyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByZXByb2Nlc3NSRkMyODIyKHMpIHtcbiAgICAgICAgLy8gUmVtb3ZlIGNvbW1lbnRzIGFuZCBmb2xkaW5nIHdoaXRlc3BhY2UgYW5kIHJlcGxhY2UgbXVsdGlwbGUtc3BhY2VzIHdpdGggYSBzaW5nbGUgc3BhY2VcbiAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgvXFwoW14pXSpcXCl8W1xcblxcdF0vZywgJyAnKS5yZXBsYWNlKC8oXFxzXFxzKykvZywgJyAnKS50cmltKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hlY2tXZWVrZGF5KHdlZWtkYXlTdHIsIHBhcnNlZElucHV0LCBjb25maWcpIHtcbiAgICAgICAgaWYgKHdlZWtkYXlTdHIpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IFJlcGxhY2UgdGhlIHZhbmlsbGEgSlMgRGF0ZSBvYmplY3Qgd2l0aCBhbiBpbmRlcGVudGVudCBkYXktb2Ytd2VlayBjaGVjay5cbiAgICAgICAgICAgIHZhciB3ZWVrZGF5UHJvdmlkZWQgPSBkZWZhdWx0TG9jYWxlV2Vla2RheXNTaG9ydC5pbmRleE9mKHdlZWtkYXlTdHIpLFxuICAgICAgICAgICAgICAgIHdlZWtkYXlBY3R1YWwgPSBuZXcgRGF0ZShwYXJzZWRJbnB1dFswXSwgcGFyc2VkSW5wdXRbMV0sIHBhcnNlZElucHV0WzJdKS5nZXREYXkoKTtcbiAgICAgICAgICAgIGlmICh3ZWVrZGF5UHJvdmlkZWQgIT09IHdlZWtkYXlBY3R1YWwpIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS53ZWVrZGF5TWlzbWF0Y2ggPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgb2JzT2Zmc2V0cyA9IHtcbiAgICAgICAgVVQ6IDAsXG4gICAgICAgIEdNVDogMCxcbiAgICAgICAgRURUOiAtNCAqIDYwLFxuICAgICAgICBFU1Q6IC01ICogNjAsXG4gICAgICAgIENEVDogLTUgKiA2MCxcbiAgICAgICAgQ1NUOiAtNiAqIDYwLFxuICAgICAgICBNRFQ6IC02ICogNjAsXG4gICAgICAgIE1TVDogLTcgKiA2MCxcbiAgICAgICAgUERUOiAtNyAqIDYwLFxuICAgICAgICBQU1Q6IC04ICogNjBcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gY2FsY3VsYXRlT2Zmc2V0KG9ic09mZnNldCwgbWlsaXRhcnlPZmZzZXQsIG51bU9mZnNldCkge1xuICAgICAgICBpZiAob2JzT2Zmc2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gb2JzT2Zmc2V0c1tvYnNPZmZzZXRdO1xuICAgICAgICB9IGVsc2UgaWYgKG1pbGl0YXJ5T2Zmc2V0KSB7XG4gICAgICAgICAgICAvLyB0aGUgb25seSBhbGxvd2VkIG1pbGl0YXJ5IHR6IGlzIFpcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGhtID0gcGFyc2VJbnQobnVtT2Zmc2V0LCAxMCk7XG4gICAgICAgICAgICB2YXIgbSA9IGhtICUgMTAwLCBoID0gKGhtIC0gbSkgLyAxMDA7XG4gICAgICAgICAgICByZXR1cm4gaCAqIDYwICsgbTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgYW5kIHRpbWUgZnJvbSByZWYgMjgyMiBmb3JtYXRcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tUkZDMjgyMihjb25maWcpIHtcbiAgICAgICAgdmFyIG1hdGNoID0gcmZjMjgyMi5leGVjKHByZXByb2Nlc3NSRkMyODIyKGNvbmZpZy5faSkpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIHZhciBwYXJzZWRBcnJheSA9IGV4dHJhY3RGcm9tUkZDMjgyMlN0cmluZ3MobWF0Y2hbNF0sIG1hdGNoWzNdLCBtYXRjaFsyXSwgbWF0Y2hbNV0sIG1hdGNoWzZdLCBtYXRjaFs3XSk7XG4gICAgICAgICAgICBpZiAoIWNoZWNrV2Vla2RheShtYXRjaFsxXSwgcGFyc2VkQXJyYXksIGNvbmZpZykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbmZpZy5fYSA9IHBhcnNlZEFycmF5O1xuICAgICAgICAgICAgY29uZmlnLl90em0gPSBjYWxjdWxhdGVPZmZzZXQobWF0Y2hbOF0sIG1hdGNoWzldLCBtYXRjaFsxMF0pO1xuXG4gICAgICAgICAgICBjb25maWcuX2QgPSBjcmVhdGVVVENEYXRlLmFwcGx5KG51bGwsIGNvbmZpZy5fYSk7XG4gICAgICAgICAgICBjb25maWcuX2Quc2V0VVRDTWludXRlcyhjb25maWcuX2QuZ2V0VVRDTWludXRlcygpIC0gY29uZmlnLl90em0pO1xuXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5yZmMyODIyID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGF0ZSBmcm9tIGlzbyBmb3JtYXQgb3IgZmFsbGJhY2tcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tU3RyaW5nKGNvbmZpZykge1xuICAgICAgICB2YXIgbWF0Y2hlZCA9IGFzcE5ldEpzb25SZWdleC5leGVjKGNvbmZpZy5faSk7XG5cbiAgICAgICAgaWYgKG1hdGNoZWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKCttYXRjaGVkWzFdKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZ0Zyb21JU08oY29uZmlnKTtcbiAgICAgICAgaWYgKGNvbmZpZy5faXNWYWxpZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBjb25maWcuX2lzVmFsaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWdGcm9tUkZDMjgyMihjb25maWcpO1xuICAgICAgICBpZiAoY29uZmlnLl9pc1ZhbGlkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgZGVsZXRlIGNvbmZpZy5faXNWYWxpZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZpbmFsIGF0dGVtcHQsIHVzZSBJbnB1dCBGYWxsYmFja1xuICAgICAgICBob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhjb25maWcpO1xuICAgIH1cblxuICAgIGhvb2tzLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrID0gZGVwcmVjYXRlKFxuICAgICAgICAndmFsdWUgcHJvdmlkZWQgaXMgbm90IGluIGEgcmVjb2duaXplZCBSRkMyODIyIG9yIElTTyBmb3JtYXQuIG1vbWVudCBjb25zdHJ1Y3Rpb24gZmFsbHMgYmFjayB0byBqcyBEYXRlKCksICcgK1xuICAgICAgICAnd2hpY2ggaXMgbm90IHJlbGlhYmxlIGFjcm9zcyBhbGwgYnJvd3NlcnMgYW5kIHZlcnNpb25zLiBOb24gUkZDMjgyMi9JU08gZGF0ZSBmb3JtYXRzIGFyZSAnICtcbiAgICAgICAgJ2Rpc2NvdXJhZ2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYW4gdXBjb21pbmcgbWFqb3IgcmVsZWFzZS4gUGxlYXNlIHJlZmVyIHRvICcgK1xuICAgICAgICAnaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9qcy1kYXRlLyBmb3IgbW9yZSBpbmZvLicsXG4gICAgICAgIGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGNvbmZpZy5faSArIChjb25maWcuX3VzZVVUQyA/ICcgVVRDJyA6ICcnKSk7XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gY29uc3RhbnQgdGhhdCByZWZlcnMgdG8gdGhlIElTTyBzdGFuZGFyZFxuICAgIGhvb2tzLklTT184NjAxID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAvLyBjb25zdGFudCB0aGF0IHJlZmVycyB0byB0aGUgUkZDIDI4MjIgZm9ybVxuICAgIGhvb2tzLlJGQ18yODIyID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAvLyBkYXRlIGZyb20gc3RyaW5nIGFuZCBmb3JtYXQgc3RyaW5nXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpIHtcbiAgICAgICAgLy8gVE9ETzogTW92ZSB0aGlzIHRvIGFub3RoZXIgcGFydCBvZiB0aGUgY3JlYXRpb24gZmxvdyB0byBwcmV2ZW50IGNpcmN1bGFyIGRlcHNcbiAgICAgICAgaWYgKGNvbmZpZy5fZiA9PT0gaG9va3MuSVNPXzg2MDEpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21JU08oY29uZmlnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlnLl9mID09PSBob29rcy5SRkNfMjgyMikge1xuICAgICAgICAgICAgY29uZmlnRnJvbVJGQzI4MjIoY29uZmlnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25maWcuX2EgPSBbXTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZW1wdHkgPSB0cnVlO1xuXG4gICAgICAgIC8vIFRoaXMgYXJyYXkgaXMgdXNlZCB0byBtYWtlIGEgRGF0ZSwgZWl0aGVyIHdpdGggYG5ldyBEYXRlYCBvciBgRGF0ZS5VVENgXG4gICAgICAgIHZhciBzdHJpbmcgPSAnJyArIGNvbmZpZy5faSxcbiAgICAgICAgICAgIGksIHBhcnNlZElucHV0LCB0b2tlbnMsIHRva2VuLCBza2lwcGVkLFxuICAgICAgICAgICAgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICAgIHRvdGFsUGFyc2VkSW5wdXRMZW5ndGggPSAwO1xuXG4gICAgICAgIHRva2VucyA9IGV4cGFuZEZvcm1hdChjb25maWcuX2YsIGNvbmZpZy5fbG9jYWxlKS5tYXRjaChmb3JtYXR0aW5nVG9rZW5zKSB8fCBbXTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1tpXTtcbiAgICAgICAgICAgIHBhcnNlZElucHV0ID0gKHN0cmluZy5tYXRjaChnZXRQYXJzZVJlZ2V4Rm9yVG9rZW4odG9rZW4sIGNvbmZpZykpIHx8IFtdKVswXTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCd0b2tlbicsIHRva2VuLCAncGFyc2VkSW5wdXQnLCBwYXJzZWRJbnB1dCxcbiAgICAgICAgICAgIC8vICAgICAgICAgJ3JlZ2V4JywgZ2V0UGFyc2VSZWdleEZvclRva2VuKHRva2VuLCBjb25maWcpKTtcbiAgICAgICAgICAgIGlmIChwYXJzZWRJbnB1dCkge1xuICAgICAgICAgICAgICAgIHNraXBwZWQgPSBzdHJpbmcuc3Vic3RyKDAsIHN0cmluZy5pbmRleE9mKHBhcnNlZElucHV0KSk7XG4gICAgICAgICAgICAgICAgaWYgKHNraXBwZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRJbnB1dC5wdXNoKHNraXBwZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc2xpY2Uoc3RyaW5nLmluZGV4T2YocGFyc2VkSW5wdXQpICsgcGFyc2VkSW5wdXQubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB0b3RhbFBhcnNlZElucHV0TGVuZ3RoICs9IHBhcnNlZElucHV0Lmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGRvbid0IHBhcnNlIGlmIGl0J3Mgbm90IGEga25vd24gdG9rZW5cbiAgICAgICAgICAgIGlmIChmb3JtYXRUb2tlbkZ1bmN0aW9uc1t0b2tlbl0pIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VkSW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZW1wdHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZFRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYWRkVGltZVRvQXJyYXlGcm9tVG9rZW4odG9rZW4sIHBhcnNlZElucHV0LCBjb25maWcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY29uZmlnLl9zdHJpY3QgJiYgIXBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkVG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWRkIHJlbWFpbmluZyB1bnBhcnNlZCBpbnB1dCBsZW5ndGggdG8gdGhlIHN0cmluZ1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5jaGFyc0xlZnRPdmVyID0gc3RyaW5nTGVuZ3RoIC0gdG90YWxQYXJzZWRJbnB1dExlbmd0aDtcbiAgICAgICAgaWYgKHN0cmluZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRJbnB1dC5wdXNoKHN0cmluZyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjbGVhciBfMTJoIGZsYWcgaWYgaG91ciBpcyA8PSAxMlxuICAgICAgICBpZiAoY29uZmlnLl9hW0hPVVJdIDw9IDEyICYmXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID09PSB0cnVlICYmXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPiAwKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykucGFyc2VkRGF0ZVBhcnRzID0gY29uZmlnLl9hLnNsaWNlKDApO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5tZXJpZGllbSA9IGNvbmZpZy5fbWVyaWRpZW07XG4gICAgICAgIC8vIGhhbmRsZSBtZXJpZGllbVxuICAgICAgICBjb25maWcuX2FbSE9VUl0gPSBtZXJpZGllbUZpeFdyYXAoY29uZmlnLl9sb2NhbGUsIGNvbmZpZy5fYVtIT1VSXSwgY29uZmlnLl9tZXJpZGllbSk7XG5cbiAgICAgICAgY29uZmlnRnJvbUFycmF5KGNvbmZpZyk7XG4gICAgICAgIGNoZWNrT3ZlcmZsb3coY29uZmlnKTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIG1lcmlkaWVtRml4V3JhcCAobG9jYWxlLCBob3VyLCBtZXJpZGllbSkge1xuICAgICAgICB2YXIgaXNQbTtcblxuICAgICAgICBpZiAobWVyaWRpZW0gPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gbm90aGluZyB0byBkb1xuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsZS5tZXJpZGllbUhvdXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS5tZXJpZGllbUhvdXIoaG91ciwgbWVyaWRpZW0pO1xuICAgICAgICB9IGVsc2UgaWYgKGxvY2FsZS5pc1BNICE9IG51bGwpIHtcbiAgICAgICAgICAgIC8vIEZhbGxiYWNrXG4gICAgICAgICAgICBpc1BtID0gbG9jYWxlLmlzUE0obWVyaWRpZW0pO1xuICAgICAgICAgICAgaWYgKGlzUG0gJiYgaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXNQbSAmJiBob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIG5vdCBzdXBwb3NlZCB0byBoYXBwZW5cbiAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGF0ZSBmcm9tIHN0cmluZyBhbmQgYXJyYXkgb2YgZm9ybWF0IHN0cmluZ3NcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tU3RyaW5nQW5kQXJyYXkoY29uZmlnKSB7XG4gICAgICAgIHZhciB0ZW1wQ29uZmlnLFxuICAgICAgICAgICAgYmVzdE1vbWVudCxcblxuICAgICAgICAgICAgc2NvcmVUb0JlYXQsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgY3VycmVudFNjb3JlO1xuXG4gICAgICAgIGlmIChjb25maWcuX2YubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkRm9ybWF0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKE5hTik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29uZmlnLl9mLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjdXJyZW50U2NvcmUgPSAwO1xuICAgICAgICAgICAgdGVtcENvbmZpZyA9IGNvcHlDb25maWcoe30sIGNvbmZpZyk7XG4gICAgICAgICAgICBpZiAoY29uZmlnLl91c2VVVEMgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRlbXBDb25maWcuX3VzZVVUQyA9IGNvbmZpZy5fdXNlVVRDO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGVtcENvbmZpZy5fZiA9IGNvbmZpZy5fZltpXTtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQodGVtcENvbmZpZyk7XG5cbiAgICAgICAgICAgIGlmICghaXNWYWxpZCh0ZW1wQ29uZmlnKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbnkgaW5wdXQgdGhhdCB3YXMgbm90IHBhcnNlZCBhZGQgYSBwZW5hbHR5IGZvciB0aGF0IGZvcm1hdFxuICAgICAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5jaGFyc0xlZnRPdmVyO1xuXG4gICAgICAgICAgICAvL29yIHRva2Vuc1xuICAgICAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS51bnVzZWRUb2tlbnMubGVuZ3RoICogMTA7XG5cbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5zY29yZSA9IGN1cnJlbnRTY29yZTtcblxuICAgICAgICAgICAgaWYgKHNjb3JlVG9CZWF0ID09IG51bGwgfHwgY3VycmVudFNjb3JlIDwgc2NvcmVUb0JlYXQpIHtcbiAgICAgICAgICAgICAgICBzY29yZVRvQmVhdCA9IGN1cnJlbnRTY29yZTtcbiAgICAgICAgICAgICAgICBiZXN0TW9tZW50ID0gdGVtcENvbmZpZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGV4dGVuZChjb25maWcsIGJlc3RNb21lbnQgfHwgdGVtcENvbmZpZyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbU9iamVjdChjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZy5fZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGkgPSBub3JtYWxpemVPYmplY3RVbml0cyhjb25maWcuX2kpO1xuICAgICAgICBjb25maWcuX2EgPSBtYXAoW2kueWVhciwgaS5tb250aCwgaS5kYXkgfHwgaS5kYXRlLCBpLmhvdXIsIGkubWludXRlLCBpLnNlY29uZCwgaS5taWxsaXNlY29uZF0sIGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIHJldHVybiBvYmogJiYgcGFyc2VJbnQob2JqLCAxMCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbmZpZ0Zyb21BcnJheShjb25maWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUZyb21Db25maWcgKGNvbmZpZykge1xuICAgICAgICB2YXIgcmVzID0gbmV3IE1vbWVudChjaGVja092ZXJmbG93KHByZXBhcmVDb25maWcoY29uZmlnKSkpO1xuICAgICAgICBpZiAocmVzLl9uZXh0RGF5KSB7XG4gICAgICAgICAgICAvLyBBZGRpbmcgaXMgc21hcnQgZW5vdWdoIGFyb3VuZCBEU1RcbiAgICAgICAgICAgIHJlcy5hZGQoMSwgJ2QnKTtcbiAgICAgICAgICAgIHJlcy5fbmV4dERheSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlcGFyZUNvbmZpZyAoY29uZmlnKSB7XG4gICAgICAgIHZhciBpbnB1dCA9IGNvbmZpZy5faSxcbiAgICAgICAgICAgIGZvcm1hdCA9IGNvbmZpZy5fZjtcblxuICAgICAgICBjb25maWcuX2xvY2FsZSA9IGNvbmZpZy5fbG9jYWxlIHx8IGdldExvY2FsZShjb25maWcuX2wpO1xuXG4gICAgICAgIGlmIChpbnB1dCA9PT0gbnVsbCB8fCAoZm9ybWF0ID09PSB1bmRlZmluZWQgJiYgaW5wdXQgPT09ICcnKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoe251bGxJbnB1dDogdHJ1ZX0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbmZpZy5faSA9IGlucHV0ID0gY29uZmlnLl9sb2NhbGUucHJlcGFyc2UoaW5wdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTW9tZW50KGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBNb21lbnQoY2hlY2tPdmVyZmxvdyhpbnB1dCkpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRGF0ZShpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IGlucHV0O1xuICAgICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoZm9ybWF0KSkge1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEFycmF5KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0KSB7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KGNvbmZpZyk7XG4gICAgICAgIH0gIGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnRnJvbUlucHV0KGNvbmZpZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzVmFsaWQoY29uZmlnKSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUlucHV0KGNvbmZpZykge1xuICAgICAgICB2YXIgaW5wdXQgPSBjb25maWcuX2k7XG4gICAgICAgIGlmIChpc1VuZGVmaW5lZChpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGhvb2tzLm5vdygpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RhdGUoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShpbnB1dC52YWx1ZU9mKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmcoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9hID0gbWFwKGlucHV0LnNsaWNlKDApLCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KG9iaiwgMTApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc09iamVjdChpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21PYmplY3QoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcihpbnB1dCkpIHtcbiAgICAgICAgICAgIC8vIGZyb20gbWlsbGlzZWNvbmRzXG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShpbnB1dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhjb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlTG9jYWxPclVUQyAoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QsIGlzVVRDKSB7XG4gICAgICAgIHZhciBjID0ge307XG5cbiAgICAgICAgaWYgKGxvY2FsZSA9PT0gdHJ1ZSB8fCBsb2NhbGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBzdHJpY3QgPSBsb2NhbGU7XG4gICAgICAgICAgICBsb2NhbGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKGlzT2JqZWN0KGlucHV0KSAmJiBpc09iamVjdEVtcHR5KGlucHV0KSkgfHxcbiAgICAgICAgICAgICAgICAoaXNBcnJheShpbnB1dCkgJiYgaW5wdXQubGVuZ3RoID09PSAwKSkge1xuICAgICAgICAgICAgaW5wdXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gb2JqZWN0IGNvbnN0cnVjdGlvbiBtdXN0IGJlIGRvbmUgdGhpcyB3YXkuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8xNDIzXG4gICAgICAgIGMuX2lzQU1vbWVudE9iamVjdCA9IHRydWU7XG4gICAgICAgIGMuX3VzZVVUQyA9IGMuX2lzVVRDID0gaXNVVEM7XG4gICAgICAgIGMuX2wgPSBsb2NhbGU7XG4gICAgICAgIGMuX2kgPSBpbnB1dDtcbiAgICAgICAgYy5fZiA9IGZvcm1hdDtcbiAgICAgICAgYy5fc3RyaWN0ID0gc3RyaWN0O1xuXG4gICAgICAgIHJldHVybiBjcmVhdGVGcm9tQ29uZmlnKGMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUxvY2FsIChpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgZmFsc2UpO1xuICAgIH1cblxuICAgIHZhciBwcm90b3R5cGVNaW4gPSBkZXByZWNhdGUoXG4gICAgICAgICdtb21lbnQoKS5taW4gaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5tYXggaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LycsXG4gICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBvdGhlciA9IGNyZWF0ZUxvY2FsLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG90aGVyIDwgdGhpcyA/IHRoaXMgOiBvdGhlcjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB2YXIgcHJvdG90eXBlTWF4ID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50KCkubWF4IGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQubWluIGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvbWluLW1heC8nLFxuICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgb3RoZXIgPSBjcmVhdGVMb2NhbC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNWYWxpZCgpICYmIG90aGVyLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvdGhlciA+IHRoaXMgPyB0aGlzIDogb3RoZXI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbnZhbGlkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gUGljayBhIG1vbWVudCBtIGZyb20gbW9tZW50cyBzbyB0aGF0IG1bZm5dKG90aGVyKSBpcyB0cnVlIGZvciBhbGxcbiAgICAvLyBvdGhlci4gVGhpcyByZWxpZXMgb24gdGhlIGZ1bmN0aW9uIGZuIHRvIGJlIHRyYW5zaXRpdmUuXG4gICAgLy9cbiAgICAvLyBtb21lbnRzIHNob3VsZCBlaXRoZXIgYmUgYW4gYXJyYXkgb2YgbW9tZW50IG9iamVjdHMgb3IgYW4gYXJyYXksIHdob3NlXG4gICAgLy8gZmlyc3QgZWxlbWVudCBpcyBhbiBhcnJheSBvZiBtb21lbnQgb2JqZWN0cy5cbiAgICBmdW5jdGlvbiBwaWNrQnkoZm4sIG1vbWVudHMpIHtcbiAgICAgICAgdmFyIHJlcywgaTtcbiAgICAgICAgaWYgKG1vbWVudHMubGVuZ3RoID09PSAxICYmIGlzQXJyYXkobW9tZW50c1swXSkpIHtcbiAgICAgICAgICAgIG1vbWVudHMgPSBtb21lbnRzWzBdO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbW9tZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVMb2NhbCgpO1xuICAgICAgICB9XG4gICAgICAgIHJlcyA9IG1vbWVudHNbMF07XG4gICAgICAgIGZvciAoaSA9IDE7IGkgPCBtb21lbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBpZiAoIW1vbWVudHNbaV0uaXNWYWxpZCgpIHx8IG1vbWVudHNbaV1bZm5dKHJlcykpIHtcbiAgICAgICAgICAgICAgICByZXMgPSBtb21lbnRzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogVXNlIFtdLnNvcnQgaW5zdGVhZD9cbiAgICBmdW5jdGlvbiBtaW4gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcblxuICAgICAgICByZXR1cm4gcGlja0J5KCdpc0JlZm9yZScsIGFyZ3MpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1heCAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuXG4gICAgICAgIHJldHVybiBwaWNrQnkoJ2lzQWZ0ZXInLCBhcmdzKTtcbiAgICB9XG5cbiAgICB2YXIgbm93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gRGF0ZS5ub3cgPyBEYXRlLm5vdygpIDogKyhuZXcgRGF0ZSgpKTtcbiAgICB9O1xuXG4gICAgdmFyIG9yZGVyaW5nID0gWyd5ZWFyJywgJ3F1YXJ0ZXInLCAnbW9udGgnLCAnd2VlaycsICdkYXknLCAnaG91cicsICdtaW51dGUnLCAnc2Vjb25kJywgJ21pbGxpc2Vjb25kJ107XG5cbiAgICBmdW5jdGlvbiBpc0R1cmF0aW9uVmFsaWQobSkge1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gbSkge1xuICAgICAgICAgICAgaWYgKCEoaW5kZXhPZi5jYWxsKG9yZGVyaW5nLCBrZXkpICE9PSAtMSAmJiAobVtrZXldID09IG51bGwgfHwgIWlzTmFOKG1ba2V5XSkpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB1bml0SGFzRGVjaW1hbCA9IGZhbHNlO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9yZGVyaW5nLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBpZiAobVtvcmRlcmluZ1tpXV0pIHtcbiAgICAgICAgICAgICAgICBpZiAodW5pdEhhc0RlY2ltYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBvbmx5IGFsbG93IG5vbi1pbnRlZ2VycyBmb3Igc21hbGxlc3QgdW5pdFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocGFyc2VGbG9hdChtW29yZGVyaW5nW2ldXSkgIT09IHRvSW50KG1bb3JkZXJpbmdbaV1dKSkge1xuICAgICAgICAgICAgICAgICAgICB1bml0SGFzRGVjaW1hbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZCQxKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNWYWxpZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJbnZhbGlkJDEoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbihOYU4pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIER1cmF0aW9uIChkdXJhdGlvbikge1xuICAgICAgICB2YXIgbm9ybWFsaXplZElucHV0ID0gbm9ybWFsaXplT2JqZWN0VW5pdHMoZHVyYXRpb24pLFxuICAgICAgICAgICAgeWVhcnMgPSBub3JtYWxpemVkSW5wdXQueWVhciB8fCAwLFxuICAgICAgICAgICAgcXVhcnRlcnMgPSBub3JtYWxpemVkSW5wdXQucXVhcnRlciB8fCAwLFxuICAgICAgICAgICAgbW9udGhzID0gbm9ybWFsaXplZElucHV0Lm1vbnRoIHx8IDAsXG4gICAgICAgICAgICB3ZWVrcyA9IG5vcm1hbGl6ZWRJbnB1dC53ZWVrIHx8IDAsXG4gICAgICAgICAgICBkYXlzID0gbm9ybWFsaXplZElucHV0LmRheSB8fCAwLFxuICAgICAgICAgICAgaG91cnMgPSBub3JtYWxpemVkSW5wdXQuaG91ciB8fCAwLFxuICAgICAgICAgICAgbWludXRlcyA9IG5vcm1hbGl6ZWRJbnB1dC5taW51dGUgfHwgMCxcbiAgICAgICAgICAgIHNlY29uZHMgPSBub3JtYWxpemVkSW5wdXQuc2Vjb25kIHx8IDAsXG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgPSBub3JtYWxpemVkSW5wdXQubWlsbGlzZWNvbmQgfHwgMDtcblxuICAgICAgICB0aGlzLl9pc1ZhbGlkID0gaXNEdXJhdGlvblZhbGlkKG5vcm1hbGl6ZWRJbnB1dCk7XG5cbiAgICAgICAgLy8gcmVwcmVzZW50YXRpb24gZm9yIGRhdGVBZGRSZW1vdmVcbiAgICAgICAgdGhpcy5fbWlsbGlzZWNvbmRzID0gK21pbGxpc2Vjb25kcyArXG4gICAgICAgICAgICBzZWNvbmRzICogMWUzICsgLy8gMTAwMFxuICAgICAgICAgICAgbWludXRlcyAqIDZlNCArIC8vIDEwMDAgKiA2MFxuICAgICAgICAgICAgaG91cnMgKiAxMDAwICogNjAgKiA2MDsgLy91c2luZyAxMDAwICogNjAgKiA2MCBpbnN0ZWFkIG9mIDM2ZTUgdG8gYXZvaWQgZmxvYXRpbmcgcG9pbnQgcm91bmRpbmcgZXJyb3JzIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8yOTc4XG4gICAgICAgIC8vIEJlY2F1c2Ugb2YgZGF0ZUFkZFJlbW92ZSB0cmVhdHMgMjQgaG91cnMgYXMgZGlmZmVyZW50IGZyb20gYVxuICAgICAgICAvLyBkYXkgd2hlbiB3b3JraW5nIGFyb3VuZCBEU1QsIHdlIG5lZWQgdG8gc3RvcmUgdGhlbSBzZXBhcmF0ZWx5XG4gICAgICAgIHRoaXMuX2RheXMgPSArZGF5cyArXG4gICAgICAgICAgICB3ZWVrcyAqIDc7XG4gICAgICAgIC8vIEl0IGlzIGltcG9zc2libGUgdG8gdHJhbnNsYXRlIG1vbnRocyBpbnRvIGRheXMgd2l0aG91dCBrbm93aW5nXG4gICAgICAgIC8vIHdoaWNoIG1vbnRocyB5b3UgYXJlIGFyZSB0YWxraW5nIGFib3V0LCBzbyB3ZSBoYXZlIHRvIHN0b3JlXG4gICAgICAgIC8vIGl0IHNlcGFyYXRlbHkuXG4gICAgICAgIHRoaXMuX21vbnRocyA9ICttb250aHMgK1xuICAgICAgICAgICAgcXVhcnRlcnMgKiAzICtcbiAgICAgICAgICAgIHllYXJzICogMTI7XG5cbiAgICAgICAgdGhpcy5fZGF0YSA9IHt9O1xuXG4gICAgICAgIHRoaXMuX2xvY2FsZSA9IGdldExvY2FsZSgpO1xuXG4gICAgICAgIHRoaXMuX2J1YmJsZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRHVyYXRpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgRHVyYXRpb247XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWJzUm91bmQgKG51bWJlcikge1xuICAgICAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoLTEgKiBudW1iZXIpICogLTE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgZnVuY3Rpb24gb2Zmc2V0ICh0b2tlbiwgc2VwYXJhdG9yKSB7XG4gICAgICAgIGFkZEZvcm1hdFRva2VuKHRva2VuLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdGhpcy51dGNPZmZzZXQoKTtcbiAgICAgICAgICAgIHZhciBzaWduID0gJysnO1xuICAgICAgICAgICAgaWYgKG9mZnNldCA8IDApIHtcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSAtb2Zmc2V0O1xuICAgICAgICAgICAgICAgIHNpZ24gPSAnLSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2lnbiArIHplcm9GaWxsKH5+KG9mZnNldCAvIDYwKSwgMikgKyBzZXBhcmF0b3IgKyB6ZXJvRmlsbCh+fihvZmZzZXQpICUgNjAsIDIpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvZmZzZXQoJ1onLCAnOicpO1xuICAgIG9mZnNldCgnWlonLCAnJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdaJywgIG1hdGNoU2hvcnRPZmZzZXQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1paJywgbWF0Y2hTaG9ydE9mZnNldCk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ1onLCAnWlonXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fdXNlVVRDID0gdHJ1ZTtcbiAgICAgICAgY29uZmlnLl90em0gPSBvZmZzZXRGcm9tU3RyaW5nKG1hdGNoU2hvcnRPZmZzZXQsIGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIC8vIHRpbWV6b25lIGNodW5rZXJcbiAgICAvLyAnKzEwOjAwJyA+IFsnMTAnLCAgJzAwJ11cbiAgICAvLyAnLTE1MzAnICA+IFsnLTE1JywgJzMwJ11cbiAgICB2YXIgY2h1bmtPZmZzZXQgPSAvKFtcXCtcXC1dfFxcZFxcZCkvZ2k7XG5cbiAgICBmdW5jdGlvbiBvZmZzZXRGcm9tU3RyaW5nKG1hdGNoZXIsIHN0cmluZykge1xuICAgICAgICB2YXIgbWF0Y2hlcyA9IChzdHJpbmcgfHwgJycpLm1hdGNoKG1hdGNoZXIpO1xuXG4gICAgICAgIGlmIChtYXRjaGVzID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjaHVuayAgID0gbWF0Y2hlc1ttYXRjaGVzLmxlbmd0aCAtIDFdIHx8IFtdO1xuICAgICAgICB2YXIgcGFydHMgICA9IChjaHVuayArICcnKS5tYXRjaChjaHVua09mZnNldCkgfHwgWyctJywgMCwgMF07XG4gICAgICAgIHZhciBtaW51dGVzID0gKyhwYXJ0c1sxXSAqIDYwKSArIHRvSW50KHBhcnRzWzJdKTtcblxuICAgICAgICByZXR1cm4gbWludXRlcyA9PT0gMCA/XG4gICAgICAgICAgMCA6XG4gICAgICAgICAgcGFydHNbMF0gPT09ICcrJyA/IG1pbnV0ZXMgOiAtbWludXRlcztcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gYSBtb21lbnQgZnJvbSBpbnB1dCwgdGhhdCBpcyBsb2NhbC91dGMvem9uZSBlcXVpdmFsZW50IHRvIG1vZGVsLlxuICAgIGZ1bmN0aW9uIGNsb25lV2l0aE9mZnNldChpbnB1dCwgbW9kZWwpIHtcbiAgICAgICAgdmFyIHJlcywgZGlmZjtcbiAgICAgICAgaWYgKG1vZGVsLl9pc1VUQykge1xuICAgICAgICAgICAgcmVzID0gbW9kZWwuY2xvbmUoKTtcbiAgICAgICAgICAgIGRpZmYgPSAoaXNNb21lbnQoaW5wdXQpIHx8IGlzRGF0ZShpbnB1dCkgPyBpbnB1dC52YWx1ZU9mKCkgOiBjcmVhdGVMb2NhbChpbnB1dCkudmFsdWVPZigpKSAtIHJlcy52YWx1ZU9mKCk7XG4gICAgICAgICAgICAvLyBVc2UgbG93LWxldmVsIGFwaSwgYmVjYXVzZSB0aGlzIGZuIGlzIGxvdy1sZXZlbCBhcGkuXG4gICAgICAgICAgICByZXMuX2Quc2V0VGltZShyZXMuX2QudmFsdWVPZigpICsgZGlmZik7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQocmVzLCBmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKGlucHV0KS5sb2NhbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RGF0ZU9mZnNldCAobSkge1xuICAgICAgICAvLyBPbiBGaXJlZm94LjI0IERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyBhIGZsb2F0aW5nIHBvaW50LlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9wdWxsLzE4NzFcbiAgICAgICAgcmV0dXJuIC1NYXRoLnJvdW5kKG0uX2QuZ2V0VGltZXpvbmVPZmZzZXQoKSAvIDE1KSAqIDE1O1xuICAgIH1cblxuICAgIC8vIEhPT0tTXG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIGEgbW9tZW50IGlzIG11dGF0ZWQuXG4gICAgLy8gSXQgaXMgaW50ZW5kZWQgdG8ga2VlcCB0aGUgb2Zmc2V0IGluIHN5bmMgd2l0aCB0aGUgdGltZXpvbmUuXG4gICAgaG9va3MudXBkYXRlT2Zmc2V0ID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICAvLyBrZWVwTG9jYWxUaW1lID0gdHJ1ZSBtZWFucyBvbmx5IGNoYW5nZSB0aGUgdGltZXpvbmUsIHdpdGhvdXRcbiAgICAvLyBhZmZlY3RpbmcgdGhlIGxvY2FsIGhvdXIuIFNvIDU6MzE6MjYgKzAzMDAgLS1bdXRjT2Zmc2V0KDIsIHRydWUpXS0tPlxuICAgIC8vIDU6MzE6MjYgKzAyMDAgSXQgaXMgcG9zc2libGUgdGhhdCA1OjMxOjI2IGRvZXNuJ3QgZXhpc3Qgd2l0aCBvZmZzZXRcbiAgICAvLyArMDIwMCwgc28gd2UgYWRqdXN0IHRoZSB0aW1lIGFzIG5lZWRlZCwgdG8gYmUgdmFsaWQuXG4gICAgLy9cbiAgICAvLyBLZWVwaW5nIHRoZSB0aW1lIGFjdHVhbGx5IGFkZHMvc3VidHJhY3RzIChvbmUgaG91cilcbiAgICAvLyBmcm9tIHRoZSBhY3R1YWwgcmVwcmVzZW50ZWQgdGltZS4gVGhhdCBpcyB3aHkgd2UgY2FsbCB1cGRhdGVPZmZzZXRcbiAgICAvLyBhIHNlY29uZCB0aW1lLiBJbiBjYXNlIGl0IHdhbnRzIHVzIHRvIGNoYW5nZSB0aGUgb2Zmc2V0IGFnYWluXG4gICAgLy8gX2NoYW5nZUluUHJvZ3Jlc3MgPT0gdHJ1ZSBjYXNlLCB0aGVuIHdlIGhhdmUgdG8gYWRqdXN0LCBiZWNhdXNlXG4gICAgLy8gdGhlcmUgaXMgbm8gc3VjaCB0aW1lIGluIHRoZSBnaXZlbiB0aW1lem9uZS5cbiAgICBmdW5jdGlvbiBnZXRTZXRPZmZzZXQgKGlucHV0LCBrZWVwTG9jYWxUaW1lLCBrZWVwTWludXRlcykge1xuICAgICAgICB2YXIgb2Zmc2V0ID0gdGhpcy5fb2Zmc2V0IHx8IDAsXG4gICAgICAgICAgICBsb2NhbEFkanVzdDtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGwgPyB0aGlzIDogTmFOO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaFNob3J0T2Zmc2V0LCBpbnB1dCk7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoTWF0aC5hYnMoaW5wdXQpIDwgMTYgJiYgIWtlZXBNaW51dGVzKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSBpbnB1dCAqIDYwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc1VUQyAmJiBrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxBZGp1c3QgPSBnZXREYXRlT2Zmc2V0KHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fb2Zmc2V0ID0gaW5wdXQ7XG4gICAgICAgICAgICB0aGlzLl9pc1VUQyA9IHRydWU7XG4gICAgICAgICAgICBpZiAobG9jYWxBZGp1c3QgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkKGxvY2FsQWRqdXN0LCAnbScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9mZnNldCAhPT0gaW5wdXQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWtlZXBMb2NhbFRpbWUgfHwgdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICBhZGRTdWJ0cmFjdCh0aGlzLCBjcmVhdGVEdXJhdGlvbihpbnB1dCAtIG9mZnNldCwgJ20nKSwgMSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faXNVVEMgPyBvZmZzZXQgOiBnZXREYXRlT2Zmc2V0KHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0Wm9uZSAoaW5wdXQsIGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSAtaW5wdXQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KGlucHV0LCBrZWVwTG9jYWxUaW1lKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gLXRoaXMudXRjT2Zmc2V0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb1VUQyAoa2VlcExvY2FsVGltZSkge1xuICAgICAgICByZXR1cm4gdGhpcy51dGNPZmZzZXQoMCwga2VlcExvY2FsVGltZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0T2Zmc2V0VG9Mb2NhbCAoa2VlcExvY2FsVGltZSkge1xuICAgICAgICBpZiAodGhpcy5faXNVVEMpIHtcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KDAsIGtlZXBMb2NhbFRpbWUpO1xuICAgICAgICAgICAgdGhpcy5faXNVVEMgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnRyYWN0KGdldERhdGVPZmZzZXQodGhpcyksICdtJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0T2Zmc2V0VG9QYXJzZWRPZmZzZXQgKCkge1xuICAgICAgICBpZiAodGhpcy5fdHptICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KHRoaXMuX3R6bSwgZmFsc2UsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLl9pID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdmFyIHRab25lID0gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaE9mZnNldCwgdGhpcy5faSk7XG4gICAgICAgICAgICBpZiAodFpvbmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KHRab25lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KDAsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhc0FsaWduZWRIb3VyT2Zmc2V0IChpbnB1dCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaW5wdXQgPSBpbnB1dCA/IGNyZWF0ZUxvY2FsKGlucHV0KS51dGNPZmZzZXQoKSA6IDA7XG5cbiAgICAgICAgcmV0dXJuICh0aGlzLnV0Y09mZnNldCgpIC0gaW5wdXQpICUgNjAgPT09IDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNEYXlsaWdodFNhdmluZ1RpbWUgKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoKSA+IHRoaXMuY2xvbmUoKS5tb250aCgwKS51dGNPZmZzZXQoKSB8fFxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoKSA+IHRoaXMuY2xvbmUoKS5tb250aCg1KS51dGNPZmZzZXQoKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF5bGlnaHRTYXZpbmdUaW1lU2hpZnRlZCAoKSB7XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQodGhpcy5faXNEU1RTaGlmdGVkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzRFNUU2hpZnRlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjID0ge307XG5cbiAgICAgICAgY29weUNvbmZpZyhjLCB0aGlzKTtcbiAgICAgICAgYyA9IHByZXBhcmVDb25maWcoYyk7XG5cbiAgICAgICAgaWYgKGMuX2EpIHtcbiAgICAgICAgICAgIHZhciBvdGhlciA9IGMuX2lzVVRDID8gY3JlYXRlVVRDKGMuX2EpIDogY3JlYXRlTG9jYWwoYy5fYSk7XG4gICAgICAgICAgICB0aGlzLl9pc0RTVFNoaWZ0ZWQgPSB0aGlzLmlzVmFsaWQoKSAmJlxuICAgICAgICAgICAgICAgIGNvbXBhcmVBcnJheXMoYy5fYSwgb3RoZXIudG9BcnJheSgpKSA+IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9pc0RTVFNoaWZ0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNMb2NhbCAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/ICF0aGlzLl9pc1VUQyA6IGZhbHNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVXRjT2Zmc2V0ICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy5faXNVVEMgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1V0YyAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2lzVVRDICYmIHRoaXMuX29mZnNldCA9PT0gMCA6IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEFTUC5ORVQganNvbiBkYXRlIGZvcm1hdCByZWdleFxuICAgIHZhciBhc3BOZXRSZWdleCA9IC9eKFxcLXxcXCspPyg/OihcXGQqKVsuIF0pPyhcXGQrKVxcOihcXGQrKSg/OlxcOihcXGQrKShcXC5cXGQqKT8pPyQvO1xuXG4gICAgLy8gZnJvbSBodHRwOi8vZG9jcy5jbG9zdXJlLWxpYnJhcnkuZ29vZ2xlY29kZS5jb20vZ2l0L2Nsb3N1cmVfZ29vZ19kYXRlX2RhdGUuanMuc291cmNlLmh0bWxcbiAgICAvLyBzb21ld2hhdCBtb3JlIGluIGxpbmUgd2l0aCA0LjQuMy4yIDIwMDQgc3BlYywgYnV0IGFsbG93cyBkZWNpbWFsIGFueXdoZXJlXG4gICAgLy8gYW5kIGZ1cnRoZXIgbW9kaWZpZWQgdG8gYWxsb3cgZm9yIHN0cmluZ3MgY29udGFpbmluZyBib3RoIHdlZWsgYW5kIGRheVxuICAgIHZhciBpc29SZWdleCA9IC9eKC18XFwrKT9QKD86KFstK10/WzAtOSwuXSopWSk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopVyk/KD86KFstK10/WzAtOSwuXSopRCk/KD86VCg/OihbLStdP1swLTksLl0qKUgpPyg/OihbLStdP1swLTksLl0qKU0pPyg/OihbLStdP1swLTksLl0qKVMpPyk/JC87XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVEdXJhdGlvbiAoaW5wdXQsIGtleSkge1xuICAgICAgICB2YXIgZHVyYXRpb24gPSBpbnB1dCxcbiAgICAgICAgICAgIC8vIG1hdGNoaW5nIGFnYWluc3QgcmVnZXhwIGlzIGV4cGVuc2l2ZSwgZG8gaXQgb24gZGVtYW5kXG4gICAgICAgICAgICBtYXRjaCA9IG51bGwsXG4gICAgICAgICAgICBzaWduLFxuICAgICAgICAgICAgcmV0LFxuICAgICAgICAgICAgZGlmZlJlcztcblxuICAgICAgICBpZiAoaXNEdXJhdGlvbihpbnB1dCkpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge1xuICAgICAgICAgICAgICAgIG1zIDogaW5wdXQuX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgICAgICBkICA6IGlucHV0Ll9kYXlzLFxuICAgICAgICAgICAgICAgIE0gIDogaW5wdXQuX21vbnRoc1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcihpbnB1dCkpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge307XG4gICAgICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb25ba2V5XSA9IGlucHV0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbi5taWxsaXNlY29uZHMgPSBpbnB1dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICghIShtYXRjaCA9IGFzcE5ldFJlZ2V4LmV4ZWMoaW5wdXQpKSkge1xuICAgICAgICAgICAgc2lnbiA9IChtYXRjaFsxXSA9PT0gJy0nKSA/IC0xIDogMTtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge1xuICAgICAgICAgICAgICAgIHkgIDogMCxcbiAgICAgICAgICAgICAgICBkICA6IHRvSW50KG1hdGNoW0RBVEVdKSAgICAgICAgICAgICAgICAgICAgICAgICAqIHNpZ24sXG4gICAgICAgICAgICAgICAgaCAgOiB0b0ludChtYXRjaFtIT1VSXSkgICAgICAgICAgICAgICAgICAgICAgICAgKiBzaWduLFxuICAgICAgICAgICAgICAgIG0gIDogdG9JbnQobWF0Y2hbTUlOVVRFXSkgICAgICAgICAgICAgICAgICAgICAgICogc2lnbixcbiAgICAgICAgICAgICAgICBzICA6IHRvSW50KG1hdGNoW1NFQ09ORF0pICAgICAgICAgICAgICAgICAgICAgICAqIHNpZ24sXG4gICAgICAgICAgICAgICAgbXMgOiB0b0ludChhYnNSb3VuZChtYXRjaFtNSUxMSVNFQ09ORF0gKiAxMDAwKSkgKiBzaWduIC8vIHRoZSBtaWxsaXNlY29uZCBkZWNpbWFsIHBvaW50IGlzIGluY2x1ZGVkIGluIHRoZSBtYXRjaFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmICghIShtYXRjaCA9IGlzb1JlZ2V4LmV4ZWMoaW5wdXQpKSkge1xuICAgICAgICAgICAgc2lnbiA9IChtYXRjaFsxXSA9PT0gJy0nKSA/IC0xIDogKG1hdGNoWzFdID09PSAnKycpID8gMSA6IDE7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICB5IDogcGFyc2VJc28obWF0Y2hbMl0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIE0gOiBwYXJzZUlzbyhtYXRjaFszXSwgc2lnbiksXG4gICAgICAgICAgICAgICAgdyA6IHBhcnNlSXNvKG1hdGNoWzRdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBkIDogcGFyc2VJc28obWF0Y2hbNV0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIGggOiBwYXJzZUlzbyhtYXRjaFs2XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgbSA6IHBhcnNlSXNvKG1hdGNoWzddLCBzaWduKSxcbiAgICAgICAgICAgICAgICBzIDogcGFyc2VJc28obWF0Y2hbOF0sIHNpZ24pXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKGR1cmF0aW9uID09IG51bGwpIHsvLyBjaGVja3MgZm9yIG51bGwgb3IgdW5kZWZpbmVkXG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkdXJhdGlvbiA9PT0gJ29iamVjdCcgJiYgKCdmcm9tJyBpbiBkdXJhdGlvbiB8fCAndG8nIGluIGR1cmF0aW9uKSkge1xuICAgICAgICAgICAgZGlmZlJlcyA9IG1vbWVudHNEaWZmZXJlbmNlKGNyZWF0ZUxvY2FsKGR1cmF0aW9uLmZyb20pLCBjcmVhdGVMb2NhbChkdXJhdGlvbi50bykpO1xuXG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICAgICAgZHVyYXRpb24ubXMgPSBkaWZmUmVzLm1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgIGR1cmF0aW9uLk0gPSBkaWZmUmVzLm1vbnRocztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldCA9IG5ldyBEdXJhdGlvbihkdXJhdGlvbik7XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpICYmIGhhc093blByb3AoaW5wdXQsICdfbG9jYWxlJykpIHtcbiAgICAgICAgICAgIHJldC5fbG9jYWxlID0gaW5wdXQuX2xvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuXG4gICAgY3JlYXRlRHVyYXRpb24uZm4gPSBEdXJhdGlvbi5wcm90b3R5cGU7XG4gICAgY3JlYXRlRHVyYXRpb24uaW52YWxpZCA9IGNyZWF0ZUludmFsaWQkMTtcblxuICAgIGZ1bmN0aW9uIHBhcnNlSXNvIChpbnAsIHNpZ24pIHtcbiAgICAgICAgLy8gV2UnZCBub3JtYWxseSB1c2Ugfn5pbnAgZm9yIHRoaXMsIGJ1dCB1bmZvcnR1bmF0ZWx5IGl0IGFsc29cbiAgICAgICAgLy8gY29udmVydHMgZmxvYXRzIHRvIGludHMuXG4gICAgICAgIC8vIGlucCBtYXkgYmUgdW5kZWZpbmVkLCBzbyBjYXJlZnVsIGNhbGxpbmcgcmVwbGFjZSBvbiBpdC5cbiAgICAgICAgdmFyIHJlcyA9IGlucCAmJiBwYXJzZUZsb2F0KGlucC5yZXBsYWNlKCcsJywgJy4nKSk7XG4gICAgICAgIC8vIGFwcGx5IHNpZ24gd2hpbGUgd2UncmUgYXQgaXRcbiAgICAgICAgcmV0dXJuIChpc05hTihyZXMpID8gMCA6IHJlcykgKiBzaWduO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpIHtcbiAgICAgICAgdmFyIHJlcyA9IHttaWxsaXNlY29uZHM6IDAsIG1vbnRoczogMH07XG5cbiAgICAgICAgcmVzLm1vbnRocyA9IG90aGVyLm1vbnRoKCkgLSBiYXNlLm1vbnRoKCkgK1xuICAgICAgICAgICAgKG90aGVyLnllYXIoKSAtIGJhc2UueWVhcigpKSAqIDEyO1xuICAgICAgICBpZiAoYmFzZS5jbG9uZSgpLmFkZChyZXMubW9udGhzLCAnTScpLmlzQWZ0ZXIob3RoZXIpKSB7XG4gICAgICAgICAgICAtLXJlcy5tb250aHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXMubWlsbGlzZWNvbmRzID0gK290aGVyIC0gKyhiYXNlLmNsb25lKCkuYWRkKHJlcy5tb250aHMsICdNJykpO1xuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpIHtcbiAgICAgICAgdmFyIHJlcztcbiAgICAgICAgaWYgKCEoYmFzZS5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHttaWxsaXNlY29uZHM6IDAsIG1vbnRoczogMH07XG4gICAgICAgIH1cblxuICAgICAgICBvdGhlciA9IGNsb25lV2l0aE9mZnNldChvdGhlciwgYmFzZSk7XG4gICAgICAgIGlmIChiYXNlLmlzQmVmb3JlKG90aGVyKSkge1xuICAgICAgICAgICAgcmVzID0gcG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZShiYXNlLCBvdGhlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXMgPSBwb3NpdGl2ZU1vbWVudHNEaWZmZXJlbmNlKG90aGVyLCBiYXNlKTtcbiAgICAgICAgICAgIHJlcy5taWxsaXNlY29uZHMgPSAtcmVzLm1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgIHJlcy5tb250aHMgPSAtcmVzLm1vbnRocztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogcmVtb3ZlICduYW1lJyBhcmcgYWZ0ZXIgZGVwcmVjYXRpb24gaXMgcmVtb3ZlZFxuICAgIGZ1bmN0aW9uIGNyZWF0ZUFkZGVyKGRpcmVjdGlvbiwgbmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbCwgcGVyaW9kKSB7XG4gICAgICAgICAgICB2YXIgZHVyLCB0bXA7XG4gICAgICAgICAgICAvL2ludmVydCB0aGUgYXJndW1lbnRzLCBidXQgY29tcGxhaW4gYWJvdXQgaXRcbiAgICAgICAgICAgIGlmIChwZXJpb2QgIT09IG51bGwgJiYgIWlzTmFOKCtwZXJpb2QpKSB7XG4gICAgICAgICAgICAgICAgZGVwcmVjYXRlU2ltcGxlKG5hbWUsICdtb21lbnQoKS4nICsgbmFtZSAgKyAnKHBlcmlvZCwgbnVtYmVyKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIG1vbWVudCgpLicgKyBuYW1lICsgJyhudW1iZXIsIHBlcmlvZCkuICcgK1xuICAgICAgICAgICAgICAgICdTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9hZGQtaW52ZXJ0ZWQtcGFyYW0vIGZvciBtb3JlIGluZm8uJyk7XG4gICAgICAgICAgICAgICAgdG1wID0gdmFsOyB2YWwgPSBwZXJpb2Q7IHBlcmlvZCA9IHRtcDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFsID0gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgPyArdmFsIDogdmFsO1xuICAgICAgICAgICAgZHVyID0gY3JlYXRlRHVyYXRpb24odmFsLCBwZXJpb2QpO1xuICAgICAgICAgICAgYWRkU3VidHJhY3QodGhpcywgZHVyLCBkaXJlY3Rpb24pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkU3VidHJhY3QgKG1vbSwgZHVyYXRpb24sIGlzQWRkaW5nLCB1cGRhdGVPZmZzZXQpIHtcbiAgICAgICAgdmFyIG1pbGxpc2Vjb25kcyA9IGR1cmF0aW9uLl9taWxsaXNlY29uZHMsXG4gICAgICAgICAgICBkYXlzID0gYWJzUm91bmQoZHVyYXRpb24uX2RheXMpLFxuICAgICAgICAgICAgbW9udGhzID0gYWJzUm91bmQoZHVyYXRpb24uX21vbnRocyk7XG5cbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAvLyBObyBvcFxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdXBkYXRlT2Zmc2V0ID0gdXBkYXRlT2Zmc2V0ID09IG51bGwgPyB0cnVlIDogdXBkYXRlT2Zmc2V0O1xuXG4gICAgICAgIGlmIChtb250aHMpIHtcbiAgICAgICAgICAgIHNldE1vbnRoKG1vbSwgZ2V0KG1vbSwgJ01vbnRoJykgKyBtb250aHMgKiBpc0FkZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRheXMpIHtcbiAgICAgICAgICAgIHNldCQxKG1vbSwgJ0RhdGUnLCBnZXQobW9tLCAnRGF0ZScpICsgZGF5cyAqIGlzQWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWlsbGlzZWNvbmRzKSB7XG4gICAgICAgICAgICBtb20uX2Quc2V0VGltZShtb20uX2QudmFsdWVPZigpICsgbWlsbGlzZWNvbmRzICogaXNBZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1cGRhdGVPZmZzZXQpIHtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldChtb20sIGRheXMgfHwgbW9udGhzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBhZGQgICAgICA9IGNyZWF0ZUFkZGVyKDEsICdhZGQnKTtcbiAgICB2YXIgc3VidHJhY3QgPSBjcmVhdGVBZGRlcigtMSwgJ3N1YnRyYWN0Jyk7XG5cbiAgICBmdW5jdGlvbiBnZXRDYWxlbmRhckZvcm1hdChteU1vbWVudCwgbm93KSB7XG4gICAgICAgIHZhciBkaWZmID0gbXlNb21lbnQuZGlmZihub3csICdkYXlzJywgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBkaWZmIDwgLTYgPyAnc2FtZUVsc2UnIDpcbiAgICAgICAgICAgICAgICBkaWZmIDwgLTEgPyAnbGFzdFdlZWsnIDpcbiAgICAgICAgICAgICAgICBkaWZmIDwgMCA/ICdsYXN0RGF5JyA6XG4gICAgICAgICAgICAgICAgZGlmZiA8IDEgPyAnc2FtZURheScgOlxuICAgICAgICAgICAgICAgIGRpZmYgPCAyID8gJ25leHREYXknIDpcbiAgICAgICAgICAgICAgICBkaWZmIDwgNyA/ICduZXh0V2VlaycgOiAnc2FtZUVsc2UnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGVuZGFyJDEgKHRpbWUsIGZvcm1hdHMpIHtcbiAgICAgICAgLy8gV2Ugd2FudCB0byBjb21wYXJlIHRoZSBzdGFydCBvZiB0b2RheSwgdnMgdGhpcy5cbiAgICAgICAgLy8gR2V0dGluZyBzdGFydC1vZi10b2RheSBkZXBlbmRzIG9uIHdoZXRoZXIgd2UncmUgbG9jYWwvdXRjL29mZnNldCBvciBub3QuXG4gICAgICAgIHZhciBub3cgPSB0aW1lIHx8IGNyZWF0ZUxvY2FsKCksXG4gICAgICAgICAgICBzb2QgPSBjbG9uZVdpdGhPZmZzZXQobm93LCB0aGlzKS5zdGFydE9mKCdkYXknKSxcbiAgICAgICAgICAgIGZvcm1hdCA9IGhvb2tzLmNhbGVuZGFyRm9ybWF0KHRoaXMsIHNvZCkgfHwgJ3NhbWVFbHNlJztcblxuICAgICAgICB2YXIgb3V0cHV0ID0gZm9ybWF0cyAmJiAoaXNGdW5jdGlvbihmb3JtYXRzW2Zvcm1hdF0pID8gZm9ybWF0c1tmb3JtYXRdLmNhbGwodGhpcywgbm93KSA6IGZvcm1hdHNbZm9ybWF0XSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KG91dHB1dCB8fCB0aGlzLmxvY2FsZURhdGEoKS5jYWxlbmRhcihmb3JtYXQsIHRoaXMsIGNyZWF0ZUxvY2FsKG5vdykpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbG9uZSAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgTW9tZW50KHRoaXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQWZ0ZXIgKGlucHV0LCB1bml0cykge1xuICAgICAgICB2YXIgbG9jYWxJbnB1dCA9IGlzTW9tZW50KGlucHV0KSA/IGlucHV0IDogY3JlYXRlTG9jYWwoaW5wdXQpO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbElucHV0LmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKCFpc1VuZGVmaW5lZCh1bml0cykgPyB1bml0cyA6ICdtaWxsaXNlY29uZCcpO1xuICAgICAgICBpZiAodW5pdHMgPT09ICdtaWxsaXNlY29uZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSA+IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsSW5wdXQudmFsdWVPZigpIDwgdGhpcy5jbG9uZSgpLnN0YXJ0T2YodW5pdHMpLnZhbHVlT2YoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQmVmb3JlIChpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyghaXNVbmRlZmluZWQodW5pdHMpID8gdW5pdHMgOiAnbWlsbGlzZWNvbmQnKTtcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPCBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb25lKCkuZW5kT2YodW5pdHMpLnZhbHVlT2YoKSA8IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNCZXR3ZWVuIChmcm9tLCB0bywgdW5pdHMsIGluY2x1c2l2aXR5KSB7XG4gICAgICAgIGluY2x1c2l2aXR5ID0gaW5jbHVzaXZpdHkgfHwgJygpJztcbiAgICAgICAgcmV0dXJuIChpbmNsdXNpdml0eVswXSA9PT0gJygnID8gdGhpcy5pc0FmdGVyKGZyb20sIHVuaXRzKSA6ICF0aGlzLmlzQmVmb3JlKGZyb20sIHVuaXRzKSkgJiZcbiAgICAgICAgICAgIChpbmNsdXNpdml0eVsxXSA9PT0gJyknID8gdGhpcy5pc0JlZm9yZSh0bywgdW5pdHMpIDogIXRoaXMuaXNBZnRlcih0bywgdW5pdHMpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWUgKGlucHV0LCB1bml0cykge1xuICAgICAgICB2YXIgbG9jYWxJbnB1dCA9IGlzTW9tZW50KGlucHV0KSA/IGlucHV0IDogY3JlYXRlTG9jYWwoaW5wdXQpLFxuICAgICAgICAgICAgaW5wdXRNcztcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyB8fCAnbWlsbGlzZWNvbmQnKTtcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPT09IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5wdXRNcyA9IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5zdGFydE9mKHVuaXRzKS52YWx1ZU9mKCkgPD0gaW5wdXRNcyAmJiBpbnB1dE1zIDw9IHRoaXMuY2xvbmUoKS5lbmRPZih1bml0cykudmFsdWVPZigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNTYW1lT3JBZnRlciAoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU2FtZShpbnB1dCwgdW5pdHMpIHx8IHRoaXMuaXNBZnRlcihpbnB1dCx1bml0cyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNTYW1lT3JCZWZvcmUgKGlucHV0LCB1bml0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1NhbWUoaW5wdXQsIHVuaXRzKSB8fCB0aGlzLmlzQmVmb3JlKGlucHV0LHVuaXRzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkaWZmIChpbnB1dCwgdW5pdHMsIGFzRmxvYXQpIHtcbiAgICAgICAgdmFyIHRoYXQsXG4gICAgICAgICAgICB6b25lRGVsdGEsXG4gICAgICAgICAgICBvdXRwdXQ7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoYXQgPSBjbG9uZVdpdGhPZmZzZXQoaW5wdXQsIHRoaXMpO1xuXG4gICAgICAgIGlmICghdGhhdC5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICB6b25lRGVsdGEgPSAodGhhdC51dGNPZmZzZXQoKSAtIHRoaXMudXRjT2Zmc2V0KCkpICogNmU0O1xuXG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuXG4gICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgIGNhc2UgJ3llYXInOiBvdXRwdXQgPSBtb250aERpZmYodGhpcywgdGhhdCkgLyAxMjsgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtb250aCc6IG91dHB1dCA9IG1vbnRoRGlmZih0aGlzLCB0aGF0KTsgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdxdWFydGVyJzogb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpIC8gMzsgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOiBvdXRwdXQgPSAodGhpcyAtIHRoYXQpIC8gMWUzOyBicmVhazsgLy8gMTAwMFxuICAgICAgICAgICAgY2FzZSAnbWludXRlJzogb3V0cHV0ID0gKHRoaXMgLSB0aGF0KSAvIDZlNDsgYnJlYWs7IC8vIDEwMDAgKiA2MFxuICAgICAgICAgICAgY2FzZSAnaG91cic6IG91dHB1dCA9ICh0aGlzIC0gdGhhdCkgLyAzNmU1OyBicmVhazsgLy8gMTAwMCAqIDYwICogNjBcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6IG91dHB1dCA9ICh0aGlzIC0gdGhhdCAtIHpvbmVEZWx0YSkgLyA4NjRlNTsgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwICogMjQsIG5lZ2F0ZSBkc3RcbiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOiBvdXRwdXQgPSAodGhpcyAtIHRoYXQgLSB6b25lRGVsdGEpIC8gNjA0OGU1OyBicmVhazsgLy8gMTAwMCAqIDYwICogNjAgKiAyNCAqIDcsIG5lZ2F0ZSBkc3RcbiAgICAgICAgICAgIGRlZmF1bHQ6IG91dHB1dCA9IHRoaXMgLSB0aGF0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFzRmxvYXQgPyBvdXRwdXQgOiBhYnNGbG9vcihvdXRwdXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoRGlmZiAoYSwgYikge1xuICAgICAgICAvLyBkaWZmZXJlbmNlIGluIG1vbnRoc1xuICAgICAgICB2YXIgd2hvbGVNb250aERpZmYgPSAoKGIueWVhcigpIC0gYS55ZWFyKCkpICogMTIpICsgKGIubW9udGgoKSAtIGEubW9udGgoKSksXG4gICAgICAgICAgICAvLyBiIGlzIGluIChhbmNob3IgLSAxIG1vbnRoLCBhbmNob3IgKyAxIG1vbnRoKVxuICAgICAgICAgICAgYW5jaG9yID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiwgJ21vbnRocycpLFxuICAgICAgICAgICAgYW5jaG9yMiwgYWRqdXN0O1xuXG4gICAgICAgIGlmIChiIC0gYW5jaG9yIDwgMCkge1xuICAgICAgICAgICAgYW5jaG9yMiA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYgLSAxLCAnbW9udGhzJyk7XG4gICAgICAgICAgICAvLyBsaW5lYXIgYWNyb3NzIHRoZSBtb250aFxuICAgICAgICAgICAgYWRqdXN0ID0gKGIgLSBhbmNob3IpIC8gKGFuY2hvciAtIGFuY2hvcjIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYW5jaG9yMiA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYgKyAxLCAnbW9udGhzJyk7XG4gICAgICAgICAgICAvLyBsaW5lYXIgYWNyb3NzIHRoZSBtb250aFxuICAgICAgICAgICAgYWRqdXN0ID0gKGIgLSBhbmNob3IpIC8gKGFuY2hvcjIgLSBhbmNob3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9jaGVjayBmb3IgbmVnYXRpdmUgemVybywgcmV0dXJuIHplcm8gaWYgbmVnYXRpdmUgemVyb1xuICAgICAgICByZXR1cm4gLSh3aG9sZU1vbnRoRGlmZiArIGFkanVzdCkgfHwgMDtcbiAgICB9XG5cbiAgICBob29rcy5kZWZhdWx0Rm9ybWF0ID0gJ1lZWVktTU0tRERUSEg6bW06c3NaJztcbiAgICBob29rcy5kZWZhdWx0Rm9ybWF0VXRjID0gJ1lZWVktTU0tRERUSEg6bW06c3NbWl0nO1xuXG4gICAgZnVuY3Rpb24gdG9TdHJpbmcgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmxvY2FsZSgnZW4nKS5mb3JtYXQoJ2RkZCBNTU0gREQgWVlZWSBISDptbTpzcyBbR01UXVpaJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9JU09TdHJpbmcoa2VlcE9mZnNldCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdXRjID0ga2VlcE9mZnNldCAhPT0gdHJ1ZTtcbiAgICAgICAgdmFyIG0gPSB1dGMgPyB0aGlzLmNsb25lKCkudXRjKCkgOiB0aGlzO1xuICAgICAgICBpZiAobS55ZWFyKCkgPCAwIHx8IG0ueWVhcigpID4gOTk5OSkge1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdE1vbWVudChtLCB1dGMgPyAnWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdJyA6ICdZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcpKSB7XG4gICAgICAgICAgICAvLyBuYXRpdmUgaW1wbGVtZW50YXRpb24gaXMgfjUweCBmYXN0ZXIsIHVzZSBpdCB3aGVuIHdlIGNhblxuICAgICAgICAgICAgaWYgKHV0Yykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRvRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSArIHRoaXMudXRjT2Zmc2V0KCkgKiA2MCAqIDEwMDApLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgnWicsIGZvcm1hdE1vbWVudChtLCAnWicpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9ybWF0TW9tZW50KG0sIHV0YyA/ICdZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdJyA6ICdZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTWicpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIGh1bWFuIHJlYWRhYmxlIHJlcHJlc2VudGF0aW9uIG9mIGEgbW9tZW50IHRoYXQgY2FuXG4gICAgICogYWxzbyBiZSBldmFsdWF0ZWQgdG8gZ2V0IGEgbmV3IG1vbWVudCB3aGljaCBpcyB0aGUgc2FtZVxuICAgICAqXG4gICAgICogQGxpbmsgaHR0cHM6Ly9ub2RlanMub3JnL2Rpc3QvbGF0ZXN0L2RvY3MvYXBpL3V0aWwuaHRtbCN1dGlsX2N1c3RvbV9pbnNwZWN0X2Z1bmN0aW9uX29uX29iamVjdHNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpbnNwZWN0ICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuICdtb21lbnQuaW52YWxpZCgvKiAnICsgdGhpcy5faSArICcgKi8pJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgZnVuYyA9ICdtb21lbnQnO1xuICAgICAgICB2YXIgem9uZSA9ICcnO1xuICAgICAgICBpZiAoIXRoaXMuaXNMb2NhbCgpKSB7XG4gICAgICAgICAgICBmdW5jID0gdGhpcy51dGNPZmZzZXQoKSA9PT0gMCA/ICdtb21lbnQudXRjJyA6ICdtb21lbnQucGFyc2Vab25lJztcbiAgICAgICAgICAgIHpvbmUgPSAnWic7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHByZWZpeCA9ICdbJyArIGZ1bmMgKyAnKFwiXSc7XG4gICAgICAgIHZhciB5ZWFyID0gKDAgPD0gdGhpcy55ZWFyKCkgJiYgdGhpcy55ZWFyKCkgPD0gOTk5OSkgPyAnWVlZWScgOiAnWVlZWVlZJztcbiAgICAgICAgdmFyIGRhdGV0aW1lID0gJy1NTS1ERFtUXUhIOm1tOnNzLlNTUyc7XG4gICAgICAgIHZhciBzdWZmaXggPSB6b25lICsgJ1tcIildJztcblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXQocHJlZml4ICsgeWVhciArIGRhdGV0aW1lICsgc3VmZml4KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmb3JtYXQgKGlucHV0U3RyaW5nKSB7XG4gICAgICAgIGlmICghaW5wdXRTdHJpbmcpIHtcbiAgICAgICAgICAgIGlucHV0U3RyaW5nID0gdGhpcy5pc1V0YygpID8gaG9va3MuZGVmYXVsdEZvcm1hdFV0YyA6IGhvb2tzLmRlZmF1bHRGb3JtYXQ7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG91dHB1dCA9IGZvcm1hdE1vbWVudCh0aGlzLCBpbnB1dFN0cmluZyk7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5wb3N0Zm9ybWF0KG91dHB1dCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZnJvbSAodGltZSwgd2l0aG91dFN1ZmZpeCkge1xuICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiZcbiAgICAgICAgICAgICAgICAoKGlzTW9tZW50KHRpbWUpICYmIHRpbWUuaXNWYWxpZCgpKSB8fFxuICAgICAgICAgICAgICAgICBjcmVhdGVMb2NhbCh0aW1lKS5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24oe3RvOiB0aGlzLCBmcm9tOiB0aW1lfSkubG9jYWxlKHRoaXMubG9jYWxlKCkpLmh1bWFuaXplKCF3aXRob3V0U3VmZml4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZnJvbU5vdyAod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mcm9tKGNyZWF0ZUxvY2FsKCksIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvICh0aW1lLCB3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIGlmICh0aGlzLmlzVmFsaWQoKSAmJlxuICAgICAgICAgICAgICAgICgoaXNNb21lbnQodGltZSkgJiYgdGltZS5pc1ZhbGlkKCkpIHx8XG4gICAgICAgICAgICAgICAgIGNyZWF0ZUxvY2FsKHRpbWUpLmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbih7ZnJvbTogdGhpcywgdG86IHRpbWV9KS5sb2NhbGUodGhpcy5sb2NhbGUoKSkuaHVtYW5pemUoIXdpdGhvdXRTdWZmaXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b05vdyAod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gdGhpcy50byhjcmVhdGVMb2NhbCgpLCB3aXRob3V0U3VmZml4KTtcbiAgICB9XG5cbiAgICAvLyBJZiBwYXNzZWQgYSBsb2NhbGUga2V5LCBpdCB3aWxsIHNldCB0aGUgbG9jYWxlIGZvciB0aGlzXG4gICAgLy8gaW5zdGFuY2UuICBPdGhlcndpc2UsIGl0IHdpbGwgcmV0dXJuIHRoZSBsb2NhbGUgY29uZmlndXJhdGlvblxuICAgIC8vIHZhcmlhYmxlcyBmb3IgdGhpcyBpbnN0YW5jZS5cbiAgICBmdW5jdGlvbiBsb2NhbGUgKGtleSkge1xuICAgICAgICB2YXIgbmV3TG9jYWxlRGF0YTtcblxuICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGUuX2FiYnI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdMb2NhbGVEYXRhID0gZ2V0TG9jYWxlKGtleSk7XG4gICAgICAgICAgICBpZiAobmV3TG9jYWxlRGF0YSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9jYWxlID0gbmV3TG9jYWxlRGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGxhbmcgPSBkZXByZWNhdGUoXG4gICAgICAgICdtb21lbnQoKS5sYW5nKCkgaXMgZGVwcmVjYXRlZC4gSW5zdGVhZCwgdXNlIG1vbWVudCgpLmxvY2FsZURhdGEoKSB0byBnZXQgdGhlIGxhbmd1YWdlIGNvbmZpZ3VyYXRpb24uIFVzZSBtb21lbnQoKS5sb2NhbGUoKSB0byBjaGFuZ2UgbGFuZ3VhZ2VzLicsXG4gICAgICAgIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlRGF0YSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RhcnRPZiAodW5pdHMpIHtcbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgIC8vIHRoZSBmb2xsb3dpbmcgc3dpdGNoIGludGVudGlvbmFsbHkgb21pdHMgYnJlYWsga2V5d29yZHNcbiAgICAgICAgLy8gdG8gdXRpbGl6ZSBmYWxsaW5nIHRocm91Z2ggdGhlIGNhc2VzLlxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKDApO1xuICAgICAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgICAgIGNhc2UgJ3F1YXJ0ZXInOlxuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZSgxKTtcbiAgICAgICAgICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgIGNhc2UgJ2lzb1dlZWsnOlxuICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICAgICAgICAgIHRoaXMuaG91cnMoMCk7XG4gICAgICAgICAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgdGhpcy5taW51dGVzKDApO1xuICAgICAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5zZWNvbmRzKDApO1xuICAgICAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgdGhpcy5taWxsaXNlY29uZHMoMCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3ZWVrcyBhcmUgYSBzcGVjaWFsIGNhc2VcbiAgICAgICAgaWYgKHVuaXRzID09PSAnd2VlaycpIHtcbiAgICAgICAgICAgIHRoaXMud2Vla2RheSgwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodW5pdHMgPT09ICdpc29XZWVrJykge1xuICAgICAgICAgICAgdGhpcy5pc29XZWVrZGF5KDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcXVhcnRlcnMgYXJlIGFsc28gc3BlY2lhbFxuICAgICAgICBpZiAodW5pdHMgPT09ICdxdWFydGVyJykge1xuICAgICAgICAgICAgdGhpcy5tb250aChNYXRoLmZsb29yKHRoaXMubW9udGgoKSAvIDMpICogMyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbmRPZiAodW5pdHMpIHtcbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgIGlmICh1bml0cyA9PT0gdW5kZWZpbmVkIHx8IHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vICdkYXRlJyBpcyBhbiBhbGlhcyBmb3IgJ2RheScsIHNvIGl0IHNob3VsZCBiZSBjb25zaWRlcmVkIGFzIHN1Y2guXG4gICAgICAgIGlmICh1bml0cyA9PT0gJ2RhdGUnKSB7XG4gICAgICAgICAgICB1bml0cyA9ICdkYXknO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnRPZih1bml0cykuYWRkKDEsICh1bml0cyA9PT0gJ2lzb1dlZWsnID8gJ3dlZWsnIDogdW5pdHMpKS5zdWJ0cmFjdCgxLCAnbXMnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWx1ZU9mICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2QudmFsdWVPZigpIC0gKCh0aGlzLl9vZmZzZXQgfHwgMCkgKiA2MDAwMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdW5peCAoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKHRoaXMudmFsdWVPZigpIC8gMTAwMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9EYXRlICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMudmFsdWVPZigpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0FycmF5ICgpIHtcbiAgICAgICAgdmFyIG0gPSB0aGlzO1xuICAgICAgICByZXR1cm4gW20ueWVhcigpLCBtLm1vbnRoKCksIG0uZGF0ZSgpLCBtLmhvdXIoKSwgbS5taW51dGUoKSwgbS5zZWNvbmQoKSwgbS5taWxsaXNlY29uZCgpXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b09iamVjdCAoKSB7XG4gICAgICAgIHZhciBtID0gdGhpcztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHllYXJzOiBtLnllYXIoKSxcbiAgICAgICAgICAgIG1vbnRoczogbS5tb250aCgpLFxuICAgICAgICAgICAgZGF0ZTogbS5kYXRlKCksXG4gICAgICAgICAgICBob3VyczogbS5ob3VycygpLFxuICAgICAgICAgICAgbWludXRlczogbS5taW51dGVzKCksXG4gICAgICAgICAgICBzZWNvbmRzOiBtLnNlY29uZHMoKSxcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kczogbS5taWxsaXNlY29uZHMoKVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSlNPTiAoKSB7XG4gICAgICAgIC8vIG5ldyBEYXRlKE5hTikudG9KU09OKCkgPT09IG51bGxcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy50b0lTT1N0cmluZygpIDogbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1ZhbGlkJDIgKCkge1xuICAgICAgICByZXR1cm4gaXNWYWxpZCh0aGlzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzaW5nRmxhZ3MgKCkge1xuICAgICAgICByZXR1cm4gZXh0ZW5kKHt9LCBnZXRQYXJzaW5nRmxhZ3ModGhpcykpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGludmFsaWRBdCAoKSB7XG4gICAgICAgIHJldHVybiBnZXRQYXJzaW5nRmxhZ3ModGhpcykub3ZlcmZsb3c7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRpb25EYXRhKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5wdXQ6IHRoaXMuX2ksXG4gICAgICAgICAgICBmb3JtYXQ6IHRoaXMuX2YsXG4gICAgICAgICAgICBsb2NhbGU6IHRoaXMuX2xvY2FsZSxcbiAgICAgICAgICAgIGlzVVRDOiB0aGlzLl9pc1VUQyxcbiAgICAgICAgICAgIHN0cmljdDogdGhpcy5fc3RyaWN0XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydnZycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndlZWtZZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ0dHJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNvV2Vla1llYXIoKSAlIDEwMDtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4gKHRva2VuLCBnZXR0ZXIpIHtcbiAgICAgICAgYWRkRm9ybWF0VG9rZW4oMCwgW3Rva2VuLCB0b2tlbi5sZW5ndGhdLCAwLCBnZXR0ZXIpO1xuICAgIH1cblxuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ2dnZ2cnLCAgICAgJ3dlZWtZZWFyJyk7XG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignZ2dnZ2cnLCAgICAnd2Vla1llYXInKTtcbiAgICBhZGRXZWVrWWVhckZvcm1hdFRva2VuKCdHR0dHJywgICdpc29XZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ0dHR0dHJywgJ2lzb1dlZWtZZWFyJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ3dlZWtZZWFyJywgJ2dnJyk7XG4gICAgYWRkVW5pdEFsaWFzKCdpc29XZWVrWWVhcicsICdHRycpO1xuXG4gICAgLy8gUFJJT1JJVFlcblxuICAgIGFkZFVuaXRQcmlvcml0eSgnd2Vla1llYXInLCAxKTtcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2lzb1dlZWtZZWFyJywgMSk7XG5cblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0cnLCAgICAgIG1hdGNoU2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCdnJywgICAgICBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignR0cnLCAgICAgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2dnJywgICAgIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdHR0dHJywgICBtYXRjaDF0bzQsIG1hdGNoNCk7XG4gICAgYWRkUmVnZXhUb2tlbignZ2dnZycsICAgbWF0Y2gxdG80LCBtYXRjaDQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0dHR0dHJywgIG1hdGNoMXRvNiwgbWF0Y2g2KTtcbiAgICBhZGRSZWdleFRva2VuKCdnZ2dnZycsICBtYXRjaDF0bzYsIG1hdGNoNik7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ2dnZ2cnLCAnZ2dnZ2cnLCAnR0dHRycsICdHR0dHRyddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgd2Vla1t0b2tlbi5zdWJzdHIoMCwgMildID0gdG9JbnQoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydnZycsICdHRyddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgd2Vla1t0b2tlbl0gPSBob29rcy5wYXJzZVR3b0RpZ2l0WWVhcihpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXRXZWVrWWVhciAoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFNldFdlZWtZZWFySGVscGVyLmNhbGwodGhpcyxcbiAgICAgICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgICAgICB0aGlzLndlZWsoKSxcbiAgICAgICAgICAgICAgICB0aGlzLndlZWtkYXkoKSxcbiAgICAgICAgICAgICAgICB0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3csXG4gICAgICAgICAgICAgICAgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG95KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRJU09XZWVrWWVhciAoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFNldFdlZWtZZWFySGVscGVyLmNhbGwodGhpcyxcbiAgICAgICAgICAgICAgICBpbnB1dCwgdGhpcy5pc29XZWVrKCksIHRoaXMuaXNvV2Vla2RheSgpLCAxLCA0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJU09XZWVrc0luWWVhciAoKSB7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLnllYXIoKSwgMSwgNCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0V2Vla3NJblllYXIgKCkge1xuICAgICAgICB2YXIgd2Vla0luZm8gPSB0aGlzLmxvY2FsZURhdGEoKS5fd2VlaztcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMueWVhcigpLCB3ZWVrSW5mby5kb3csIHdlZWtJbmZvLmRveSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0V2Vla1llYXJIZWxwZXIoaW5wdXQsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KSB7XG4gICAgICAgIHZhciB3ZWVrc1RhcmdldDtcbiAgICAgICAgaWYgKGlucHV0ID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB3ZWVrT2ZZZWFyKHRoaXMsIGRvdywgZG95KS55ZWFyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd2Vla3NUYXJnZXQgPSB3ZWVrc0luWWVhcihpbnB1dCwgZG93LCBkb3kpO1xuICAgICAgICAgICAgaWYgKHdlZWsgPiB3ZWVrc1RhcmdldCkge1xuICAgICAgICAgICAgICAgIHdlZWsgPSB3ZWVrc1RhcmdldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzZXRXZWVrQWxsLmNhbGwodGhpcywgaW5wdXQsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldFdlZWtBbGwod2Vla1llYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KSB7XG4gICAgICAgIHZhciBkYXlPZlllYXJEYXRhID0gZGF5T2ZZZWFyRnJvbVdlZWtzKHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSksXG4gICAgICAgICAgICBkYXRlID0gY3JlYXRlVVRDRGF0ZShkYXlPZlllYXJEYXRhLnllYXIsIDAsIGRheU9mWWVhckRhdGEuZGF5T2ZZZWFyKTtcblxuICAgICAgICB0aGlzLnllYXIoZGF0ZS5nZXRVVENGdWxsWWVhcigpKTtcbiAgICAgICAgdGhpcy5tb250aChkYXRlLmdldFVUQ01vbnRoKCkpO1xuICAgICAgICB0aGlzLmRhdGUoZGF0ZS5nZXRVVENEYXRlKCkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignUScsIDAsICdRbycsICdxdWFydGVyJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ3F1YXJ0ZXInLCAnUScpO1xuXG4gICAgLy8gUFJJT1JJVFlcblxuICAgIGFkZFVuaXRQcmlvcml0eSgncXVhcnRlcicsIDcpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignUScsIG1hdGNoMSk7XG4gICAgYWRkUGFyc2VUb2tlbignUScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbTU9OVEhdID0gKHRvSW50KGlucHV0KSAtIDEpICogMztcbiAgICB9KTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldFF1YXJ0ZXIgKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gTWF0aC5jZWlsKCh0aGlzLm1vbnRoKCkgKyAxKSAvIDMpIDogdGhpcy5tb250aCgoaW5wdXQgLSAxKSAqIDMgKyB0aGlzLm1vbnRoKCkgJSAzKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignRCcsIFsnREQnLCAyXSwgJ0RvJywgJ2RhdGUnKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnZGF0ZScsICdEJyk7XG5cbiAgICAvLyBQUklPUklUWVxuICAgIGFkZFVuaXRQcmlvcml0eSgnZGF0ZScsIDkpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignRCcsICBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0REJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0RvJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgLy8gVE9ETzogUmVtb3ZlIFwib3JkaW5hbFBhcnNlXCIgZmFsbGJhY2sgaW4gbmV4dCBtYWpvciByZWxlYXNlLlxuICAgICAgICByZXR1cm4gaXNTdHJpY3QgP1xuICAgICAgICAgIChsb2NhbGUuX2RheU9mTW9udGhPcmRpbmFsUGFyc2UgfHwgbG9jYWxlLl9vcmRpbmFsUGFyc2UpIDpcbiAgICAgICAgICBsb2NhbGUuX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50O1xuICAgIH0pO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ0QnLCAnREQnXSwgREFURSk7XG4gICAgYWRkUGFyc2VUb2tlbignRG8nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W0RBVEVdID0gdG9JbnQoaW5wdXQubWF0Y2gobWF0Y2gxdG8yKVswXSk7XG4gICAgfSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0RGF5T2ZNb250aCA9IG1ha2VHZXRTZXQoJ0RhdGUnLCB0cnVlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdEREQnLCBbJ0REREQnLCAzXSwgJ0RERG8nLCAnZGF5T2ZZZWFyJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ2RheU9mWWVhcicsICdEREQnKTtcblxuICAgIC8vIFBSSU9SSVRZXG4gICAgYWRkVW5pdFByaW9yaXR5KCdkYXlPZlllYXInLCA0KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0RERCcsICBtYXRjaDF0bzMpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0REREQnLCBtYXRjaDMpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydEREQnLCAnRERERCddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPSB0b0ludChpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXREYXlPZlllYXIgKGlucHV0KSB7XG4gICAgICAgIHZhciBkYXlPZlllYXIgPSBNYXRoLnJvdW5kKCh0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykgLSB0aGlzLmNsb25lKCkuc3RhcnRPZigneWVhcicpKSAvIDg2NGU1KSArIDE7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gZGF5T2ZZZWFyIDogdGhpcy5hZGQoKGlucHV0IC0gZGF5T2ZZZWFyKSwgJ2QnKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignbScsIFsnbW0nLCAyXSwgMCwgJ21pbnV0ZScpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdtaW51dGUnLCAnbScpO1xuXG4gICAgLy8gUFJJT1JJVFlcblxuICAgIGFkZFVuaXRQcmlvcml0eSgnbWludXRlJywgMTQpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignbScsICBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ21tJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydtJywgJ21tJ10sIE1JTlVURSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0TWludXRlID0gbWFrZUdldFNldCgnTWludXRlcycsIGZhbHNlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdzJywgWydzcycsIDJdLCAwLCAnc2Vjb25kJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ3NlY29uZCcsICdzJyk7XG5cbiAgICAvLyBQUklPUklUWVxuXG4gICAgYWRkVW5pdFByaW9yaXR5KCdzZWNvbmQnLCAxNSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdzJywgIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignc3MnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUGFyc2VUb2tlbihbJ3MnLCAnc3MnXSwgU0VDT05EKTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXRTZWNvbmQgPSBtYWtlR2V0U2V0KCdTZWNvbmRzJywgZmFsc2UpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB+fih0aGlzLm1pbGxpc2Vjb25kKCkgLyAxMDApO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTUycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB+fih0aGlzLm1pbGxpc2Vjb25kKCkgLyAxMCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTUycsIDNdLCAwLCAnbWlsbGlzZWNvbmQnKTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1MnLCA0XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTUycsIDVdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1MnLCA2XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTU1MnLCA3XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTUycsIDhdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDAwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTU1MnLCA5XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDAwMDtcbiAgICB9KTtcblxuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdtaWxsaXNlY29uZCcsICdtcycpO1xuXG4gICAgLy8gUFJJT1JJVFlcblxuICAgIGFkZFVuaXRQcmlvcml0eSgnbWlsbGlzZWNvbmQnLCAxNik7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdTJywgICAgbWF0Y2gxdG8zLCBtYXRjaDEpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1NTJywgICBtYXRjaDF0bzMsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignU1NTJywgIG1hdGNoMXRvMywgbWF0Y2gzKTtcblxuICAgIHZhciB0b2tlbjtcbiAgICBmb3IgKHRva2VuID0gJ1NTU1MnOyB0b2tlbi5sZW5ndGggPD0gOTsgdG9rZW4gKz0gJ1MnKSB7XG4gICAgICAgIGFkZFJlZ2V4VG9rZW4odG9rZW4sIG1hdGNoVW5zaWduZWQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlTXMoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W01JTExJU0VDT05EXSA9IHRvSW50KCgnMC4nICsgaW5wdXQpICogMTAwMCk7XG4gICAgfVxuXG4gICAgZm9yICh0b2tlbiA9ICdTJzsgdG9rZW4ubGVuZ3RoIDw9IDk7IHRva2VuICs9ICdTJykge1xuICAgICAgICBhZGRQYXJzZVRva2VuKHRva2VuLCBwYXJzZU1zKTtcbiAgICB9XG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldE1pbGxpc2Vjb25kID0gbWFrZUdldFNldCgnTWlsbGlzZWNvbmRzJywgZmFsc2UpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3onLCAgMCwgMCwgJ3pvbmVBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3p6JywgMCwgMCwgJ3pvbmVOYW1lJyk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRab25lQWJiciAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1VUQyA/ICdVVEMnIDogJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Wm9uZU5hbWUgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNVVEMgPyAnQ29vcmRpbmF0ZWQgVW5pdmVyc2FsIFRpbWUnIDogJyc7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvID0gTW9tZW50LnByb3RvdHlwZTtcblxuICAgIHByb3RvLmFkZCAgICAgICAgICAgICAgID0gYWRkO1xuICAgIHByb3RvLmNhbGVuZGFyICAgICAgICAgID0gY2FsZW5kYXIkMTtcbiAgICBwcm90by5jbG9uZSAgICAgICAgICAgICA9IGNsb25lO1xuICAgIHByb3RvLmRpZmYgICAgICAgICAgICAgID0gZGlmZjtcbiAgICBwcm90by5lbmRPZiAgICAgICAgICAgICA9IGVuZE9mO1xuICAgIHByb3RvLmZvcm1hdCAgICAgICAgICAgID0gZm9ybWF0O1xuICAgIHByb3RvLmZyb20gICAgICAgICAgICAgID0gZnJvbTtcbiAgICBwcm90by5mcm9tTm93ICAgICAgICAgICA9IGZyb21Ob3c7XG4gICAgcHJvdG8udG8gICAgICAgICAgICAgICAgPSB0bztcbiAgICBwcm90by50b05vdyAgICAgICAgICAgICA9IHRvTm93O1xuICAgIHByb3RvLmdldCAgICAgICAgICAgICAgID0gc3RyaW5nR2V0O1xuICAgIHByb3RvLmludmFsaWRBdCAgICAgICAgID0gaW52YWxpZEF0O1xuICAgIHByb3RvLmlzQWZ0ZXIgICAgICAgICAgID0gaXNBZnRlcjtcbiAgICBwcm90by5pc0JlZm9yZSAgICAgICAgICA9IGlzQmVmb3JlO1xuICAgIHByb3RvLmlzQmV0d2VlbiAgICAgICAgID0gaXNCZXR3ZWVuO1xuICAgIHByb3RvLmlzU2FtZSAgICAgICAgICAgID0gaXNTYW1lO1xuICAgIHByb3RvLmlzU2FtZU9yQWZ0ZXIgICAgID0gaXNTYW1lT3JBZnRlcjtcbiAgICBwcm90by5pc1NhbWVPckJlZm9yZSAgICA9IGlzU2FtZU9yQmVmb3JlO1xuICAgIHByb3RvLmlzVmFsaWQgICAgICAgICAgID0gaXNWYWxpZCQyO1xuICAgIHByb3RvLmxhbmcgICAgICAgICAgICAgID0gbGFuZztcbiAgICBwcm90by5sb2NhbGUgICAgICAgICAgICA9IGxvY2FsZTtcbiAgICBwcm90by5sb2NhbGVEYXRhICAgICAgICA9IGxvY2FsZURhdGE7XG4gICAgcHJvdG8ubWF4ICAgICAgICAgICAgICAgPSBwcm90b3R5cGVNYXg7XG4gICAgcHJvdG8ubWluICAgICAgICAgICAgICAgPSBwcm90b3R5cGVNaW47XG4gICAgcHJvdG8ucGFyc2luZ0ZsYWdzICAgICAgPSBwYXJzaW5nRmxhZ3M7XG4gICAgcHJvdG8uc2V0ICAgICAgICAgICAgICAgPSBzdHJpbmdTZXQ7XG4gICAgcHJvdG8uc3RhcnRPZiAgICAgICAgICAgPSBzdGFydE9mO1xuICAgIHByb3RvLnN1YnRyYWN0ICAgICAgICAgID0gc3VidHJhY3Q7XG4gICAgcHJvdG8udG9BcnJheSAgICAgICAgICAgPSB0b0FycmF5O1xuICAgIHByb3RvLnRvT2JqZWN0ICAgICAgICAgID0gdG9PYmplY3Q7XG4gICAgcHJvdG8udG9EYXRlICAgICAgICAgICAgPSB0b0RhdGU7XG4gICAgcHJvdG8udG9JU09TdHJpbmcgICAgICAgPSB0b0lTT1N0cmluZztcbiAgICBwcm90by5pbnNwZWN0ICAgICAgICAgICA9IGluc3BlY3Q7XG4gICAgcHJvdG8udG9KU09OICAgICAgICAgICAgPSB0b0pTT047XG4gICAgcHJvdG8udG9TdHJpbmcgICAgICAgICAgPSB0b1N0cmluZztcbiAgICBwcm90by51bml4ICAgICAgICAgICAgICA9IHVuaXg7XG4gICAgcHJvdG8udmFsdWVPZiAgICAgICAgICAgPSB2YWx1ZU9mO1xuICAgIHByb3RvLmNyZWF0aW9uRGF0YSAgICAgID0gY3JlYXRpb25EYXRhO1xuICAgIHByb3RvLnllYXIgICAgICAgPSBnZXRTZXRZZWFyO1xuICAgIHByb3RvLmlzTGVhcFllYXIgPSBnZXRJc0xlYXBZZWFyO1xuICAgIHByb3RvLndlZWtZZWFyICAgID0gZ2V0U2V0V2Vla1llYXI7XG4gICAgcHJvdG8uaXNvV2Vla1llYXIgPSBnZXRTZXRJU09XZWVrWWVhcjtcbiAgICBwcm90by5xdWFydGVyID0gcHJvdG8ucXVhcnRlcnMgPSBnZXRTZXRRdWFydGVyO1xuICAgIHByb3RvLm1vbnRoICAgICAgID0gZ2V0U2V0TW9udGg7XG4gICAgcHJvdG8uZGF5c0luTW9udGggPSBnZXREYXlzSW5Nb250aDtcbiAgICBwcm90by53ZWVrICAgICAgICAgICA9IHByb3RvLndlZWtzICAgICAgICA9IGdldFNldFdlZWs7XG4gICAgcHJvdG8uaXNvV2VlayAgICAgICAgPSBwcm90by5pc29XZWVrcyAgICAgPSBnZXRTZXRJU09XZWVrO1xuICAgIHByb3RvLndlZWtzSW5ZZWFyICAgID0gZ2V0V2Vla3NJblllYXI7XG4gICAgcHJvdG8uaXNvV2Vla3NJblllYXIgPSBnZXRJU09XZWVrc0luWWVhcjtcbiAgICBwcm90by5kYXRlICAgICAgID0gZ2V0U2V0RGF5T2ZNb250aDtcbiAgICBwcm90by5kYXkgICAgICAgID0gcHJvdG8uZGF5cyAgICAgICAgICAgICA9IGdldFNldERheU9mV2VlaztcbiAgICBwcm90by53ZWVrZGF5ICAgID0gZ2V0U2V0TG9jYWxlRGF5T2ZXZWVrO1xuICAgIHByb3RvLmlzb1dlZWtkYXkgPSBnZXRTZXRJU09EYXlPZldlZWs7XG4gICAgcHJvdG8uZGF5T2ZZZWFyICA9IGdldFNldERheU9mWWVhcjtcbiAgICBwcm90by5ob3VyID0gcHJvdG8uaG91cnMgPSBnZXRTZXRIb3VyO1xuICAgIHByb3RvLm1pbnV0ZSA9IHByb3RvLm1pbnV0ZXMgPSBnZXRTZXRNaW51dGU7XG4gICAgcHJvdG8uc2Vjb25kID0gcHJvdG8uc2Vjb25kcyA9IGdldFNldFNlY29uZDtcbiAgICBwcm90by5taWxsaXNlY29uZCA9IHByb3RvLm1pbGxpc2Vjb25kcyA9IGdldFNldE1pbGxpc2Vjb25kO1xuICAgIHByb3RvLnV0Y09mZnNldCAgICAgICAgICAgID0gZ2V0U2V0T2Zmc2V0O1xuICAgIHByb3RvLnV0YyAgICAgICAgICAgICAgICAgID0gc2V0T2Zmc2V0VG9VVEM7XG4gICAgcHJvdG8ubG9jYWwgICAgICAgICAgICAgICAgPSBzZXRPZmZzZXRUb0xvY2FsO1xuICAgIHByb3RvLnBhcnNlWm9uZSAgICAgICAgICAgID0gc2V0T2Zmc2V0VG9QYXJzZWRPZmZzZXQ7XG4gICAgcHJvdG8uaGFzQWxpZ25lZEhvdXJPZmZzZXQgPSBoYXNBbGlnbmVkSG91ck9mZnNldDtcbiAgICBwcm90by5pc0RTVCAgICAgICAgICAgICAgICA9IGlzRGF5bGlnaHRTYXZpbmdUaW1lO1xuICAgIHByb3RvLmlzTG9jYWwgICAgICAgICAgICAgID0gaXNMb2NhbDtcbiAgICBwcm90by5pc1V0Y09mZnNldCAgICAgICAgICA9IGlzVXRjT2Zmc2V0O1xuICAgIHByb3RvLmlzVXRjICAgICAgICAgICAgICAgID0gaXNVdGM7XG4gICAgcHJvdG8uaXNVVEMgICAgICAgICAgICAgICAgPSBpc1V0YztcbiAgICBwcm90by56b25lQWJiciA9IGdldFpvbmVBYmJyO1xuICAgIHByb3RvLnpvbmVOYW1lID0gZ2V0Wm9uZU5hbWU7XG4gICAgcHJvdG8uZGF0ZXMgID0gZGVwcmVjYXRlKCdkYXRlcyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgZGF0ZSBpbnN0ZWFkLicsIGdldFNldERheU9mTW9udGgpO1xuICAgIHByb3RvLm1vbnRocyA9IGRlcHJlY2F0ZSgnbW9udGhzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb250aCBpbnN0ZWFkJywgZ2V0U2V0TW9udGgpO1xuICAgIHByb3RvLnllYXJzICA9IGRlcHJlY2F0ZSgneWVhcnMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIHllYXIgaW5zdGVhZCcsIGdldFNldFllYXIpO1xuICAgIHByb3RvLnpvbmUgICA9IGRlcHJlY2F0ZSgnbW9tZW50KCkuem9uZSBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50KCkudXRjT2Zmc2V0IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3Mvem9uZS8nLCBnZXRTZXRab25lKTtcbiAgICBwcm90by5pc0RTVFNoaWZ0ZWQgPSBkZXByZWNhdGUoJ2lzRFNUU2hpZnRlZCBpcyBkZXByZWNhdGVkLiBTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9kc3Qtc2hpZnRlZC8gZm9yIG1vcmUgaW5mb3JtYXRpb24nLCBpc0RheWxpZ2h0U2F2aW5nVGltZVNoaWZ0ZWQpO1xuXG4gICAgZnVuY3Rpb24gY3JlYXRlVW5peCAoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKGlucHV0ICogMTAwMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSW5ab25lICgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsLmFwcGx5KG51bGwsIGFyZ3VtZW50cykucGFyc2Vab25lKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlUGFyc2VQb3N0Rm9ybWF0IChzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICB9XG5cbiAgICB2YXIgcHJvdG8kMSA9IExvY2FsZS5wcm90b3R5cGU7XG5cbiAgICBwcm90byQxLmNhbGVuZGFyICAgICAgICA9IGNhbGVuZGFyO1xuICAgIHByb3RvJDEubG9uZ0RhdGVGb3JtYXQgID0gbG9uZ0RhdGVGb3JtYXQ7XG4gICAgcHJvdG8kMS5pbnZhbGlkRGF0ZSAgICAgPSBpbnZhbGlkRGF0ZTtcbiAgICBwcm90byQxLm9yZGluYWwgICAgICAgICA9IG9yZGluYWw7XG4gICAgcHJvdG8kMS5wcmVwYXJzZSAgICAgICAgPSBwcmVQYXJzZVBvc3RGb3JtYXQ7XG4gICAgcHJvdG8kMS5wb3N0Zm9ybWF0ICAgICAgPSBwcmVQYXJzZVBvc3RGb3JtYXQ7XG4gICAgcHJvdG8kMS5yZWxhdGl2ZVRpbWUgICAgPSByZWxhdGl2ZVRpbWU7XG4gICAgcHJvdG8kMS5wYXN0RnV0dXJlICAgICAgPSBwYXN0RnV0dXJlO1xuICAgIHByb3RvJDEuc2V0ICAgICAgICAgICAgID0gc2V0O1xuXG4gICAgcHJvdG8kMS5tb250aHMgICAgICAgICAgICA9ICAgICAgICBsb2NhbGVNb250aHM7XG4gICAgcHJvdG8kMS5tb250aHNTaG9ydCAgICAgICA9ICAgICAgICBsb2NhbGVNb250aHNTaG9ydDtcbiAgICBwcm90byQxLm1vbnRoc1BhcnNlICAgICAgID0gICAgICAgIGxvY2FsZU1vbnRoc1BhcnNlO1xuICAgIHByb3RvJDEubW9udGhzUmVnZXggICAgICAgPSBtb250aHNSZWdleDtcbiAgICBwcm90byQxLm1vbnRoc1Nob3J0UmVnZXggID0gbW9udGhzU2hvcnRSZWdleDtcbiAgICBwcm90byQxLndlZWsgPSBsb2NhbGVXZWVrO1xuICAgIHByb3RvJDEuZmlyc3REYXlPZlllYXIgPSBsb2NhbGVGaXJzdERheU9mWWVhcjtcbiAgICBwcm90byQxLmZpcnN0RGF5T2ZXZWVrID0gbG9jYWxlRmlyc3REYXlPZldlZWs7XG5cbiAgICBwcm90byQxLndlZWtkYXlzICAgICAgID0gICAgICAgIGxvY2FsZVdlZWtkYXlzO1xuICAgIHByb3RvJDEud2Vla2RheXNNaW4gICAgPSAgICAgICAgbG9jYWxlV2Vla2RheXNNaW47XG4gICAgcHJvdG8kMS53ZWVrZGF5c1Nob3J0ICA9ICAgICAgICBsb2NhbGVXZWVrZGF5c1Nob3J0O1xuICAgIHByb3RvJDEud2Vla2RheXNQYXJzZSAgPSAgICAgICAgbG9jYWxlV2Vla2RheXNQYXJzZTtcblxuICAgIHByb3RvJDEud2Vla2RheXNSZWdleCAgICAgICA9ICAgICAgICB3ZWVrZGF5c1JlZ2V4O1xuICAgIHByb3RvJDEud2Vla2RheXNTaG9ydFJlZ2V4ICA9ICAgICAgICB3ZWVrZGF5c1Nob3J0UmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrZGF5c01pblJlZ2V4ICAgID0gICAgICAgIHdlZWtkYXlzTWluUmVnZXg7XG5cbiAgICBwcm90byQxLmlzUE0gPSBsb2NhbGVJc1BNO1xuICAgIHByb3RvJDEubWVyaWRpZW0gPSBsb2NhbGVNZXJpZGllbTtcblxuICAgIGZ1bmN0aW9uIGdldCQxIChmb3JtYXQsIGluZGV4LCBmaWVsZCwgc2V0dGVyKSB7XG4gICAgICAgIHZhciBsb2NhbGUgPSBnZXRMb2NhbGUoKTtcbiAgICAgICAgdmFyIHV0YyA9IGNyZWF0ZVVUQygpLnNldChzZXR0ZXIsIGluZGV4KTtcbiAgICAgICAgcmV0dXJuIGxvY2FsZVtmaWVsZF0odXRjLCBmb3JtYXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RNb250aHNJbXBsIChmb3JtYXQsIGluZGV4LCBmaWVsZCkge1xuICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJyc7XG5cbiAgICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQkMShmb3JtYXQsIGluZGV4LCBmaWVsZCwgJ21vbnRoJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaTtcbiAgICAgICAgdmFyIG91dCA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgb3V0W2ldID0gZ2V0JDEoZm9ybWF0LCBpLCBmaWVsZCwgJ21vbnRoJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG5cbiAgICAvLyAoKVxuICAgIC8vICg1KVxuICAgIC8vIChmbXQsIDUpXG4gICAgLy8gKGZtdClcbiAgICAvLyAodHJ1ZSlcbiAgICAvLyAodHJ1ZSwgNSlcbiAgICAvLyAodHJ1ZSwgZm10LCA1KVxuICAgIC8vICh0cnVlLCBmbXQpXG4gICAgZnVuY3Rpb24gbGlzdFdlZWtkYXlzSW1wbCAobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCBmaWVsZCkge1xuICAgICAgICBpZiAodHlwZW9mIGxvY2FsZVNvcnRlZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9ybWF0ID0gbG9jYWxlU29ydGVkO1xuICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICBsb2NhbGVTb3J0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKGlzTnVtYmVyKGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGZvcm1hdDtcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdCB8fCAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsb2NhbGUgPSBnZXRMb2NhbGUoKSxcbiAgICAgICAgICAgIHNoaWZ0ID0gbG9jYWxlU29ydGVkID8gbG9jYWxlLl93ZWVrLmRvdyA6IDA7XG5cbiAgICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQkMShmb3JtYXQsIChpbmRleCArIHNoaWZ0KSAlIDcsIGZpZWxkLCAnZGF5Jyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaTtcbiAgICAgICAgdmFyIG91dCA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICBvdXRbaV0gPSBnZXQkMShmb3JtYXQsIChpICsgc2hpZnQpICUgNywgZmllbGQsICdkYXknKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RNb250aHMgKGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RNb250aHNJbXBsKGZvcm1hdCwgaW5kZXgsICdtb250aHMnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0TW9udGhzU2hvcnQgKGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RNb250aHNJbXBsKGZvcm1hdCwgaW5kZXgsICdtb250aHNTaG9ydCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5cyAobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgJ3dlZWtkYXlzJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdFdlZWtkYXlzU2hvcnQgKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCkge1xuICAgICAgICByZXR1cm4gbGlzdFdlZWtkYXlzSW1wbChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgsICd3ZWVrZGF5c1Nob3J0Jyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdFdlZWtkYXlzTWluIChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXNNaW4nKTtcbiAgICB9XG5cbiAgICBnZXRTZXRHbG9iYWxMb2NhbGUoJ2VuJywge1xuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0odGh8c3R8bmR8cmQpLyxcbiAgICAgICAgb3JkaW5hbCA6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRvSW50KG51bWJlciAlIDEwMCAvIDEwKSA9PT0gMSkgPyAndGgnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMSkgPyAnc3QnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMikgPyAnbmQnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMykgPyAncmQnIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIFNpZGUgZWZmZWN0IGltcG9ydHNcblxuICAgIGhvb2tzLmxhbmcgPSBkZXByZWNhdGUoJ21vbWVudC5sYW5nIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlIGluc3RlYWQuJywgZ2V0U2V0R2xvYmFsTG9jYWxlKTtcbiAgICBob29rcy5sYW5nRGF0YSA9IGRlcHJlY2F0ZSgnbW9tZW50LmxhbmdEYXRhIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlRGF0YSBpbnN0ZWFkLicsIGdldExvY2FsZSk7XG5cbiAgICB2YXIgbWF0aEFicyA9IE1hdGguYWJzO1xuXG4gICAgZnVuY3Rpb24gYWJzICgpIHtcbiAgICAgICAgdmFyIGRhdGEgICAgICAgICAgID0gdGhpcy5fZGF0YTtcblxuICAgICAgICB0aGlzLl9taWxsaXNlY29uZHMgPSBtYXRoQWJzKHRoaXMuX21pbGxpc2Vjb25kcyk7XG4gICAgICAgIHRoaXMuX2RheXMgICAgICAgICA9IG1hdGhBYnModGhpcy5fZGF5cyk7XG4gICAgICAgIHRoaXMuX21vbnRocyAgICAgICA9IG1hdGhBYnModGhpcy5fbW9udGhzKTtcblxuICAgICAgICBkYXRhLm1pbGxpc2Vjb25kcyAgPSBtYXRoQWJzKGRhdGEubWlsbGlzZWNvbmRzKTtcbiAgICAgICAgZGF0YS5zZWNvbmRzICAgICAgID0gbWF0aEFicyhkYXRhLnNlY29uZHMpO1xuICAgICAgICBkYXRhLm1pbnV0ZXMgICAgICAgPSBtYXRoQWJzKGRhdGEubWludXRlcyk7XG4gICAgICAgIGRhdGEuaG91cnMgICAgICAgICA9IG1hdGhBYnMoZGF0YS5ob3Vycyk7XG4gICAgICAgIGRhdGEubW9udGhzICAgICAgICA9IG1hdGhBYnMoZGF0YS5tb250aHMpO1xuICAgICAgICBkYXRhLnllYXJzICAgICAgICAgPSBtYXRoQWJzKGRhdGEueWVhcnMpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFN1YnRyYWN0JDEgKGR1cmF0aW9uLCBpbnB1dCwgdmFsdWUsIGRpcmVjdGlvbikge1xuICAgICAgICB2YXIgb3RoZXIgPSBjcmVhdGVEdXJhdGlvbihpbnB1dCwgdmFsdWUpO1xuXG4gICAgICAgIGR1cmF0aW9uLl9taWxsaXNlY29uZHMgKz0gZGlyZWN0aW9uICogb3RoZXIuX21pbGxpc2Vjb25kcztcbiAgICAgICAgZHVyYXRpb24uX2RheXMgICAgICAgICArPSBkaXJlY3Rpb24gKiBvdGhlci5fZGF5cztcbiAgICAgICAgZHVyYXRpb24uX21vbnRocyAgICAgICArPSBkaXJlY3Rpb24gKiBvdGhlci5fbW9udGhzO1xuXG4gICAgICAgIHJldHVybiBkdXJhdGlvbi5fYnViYmxlKCk7XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydHMgb25seSAyLjAtc3R5bGUgYWRkKDEsICdzJykgb3IgYWRkKGR1cmF0aW9uKVxuICAgIGZ1bmN0aW9uIGFkZCQxIChpbnB1dCwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGFkZFN1YnRyYWN0JDEodGhpcywgaW5wdXQsIHZhbHVlLCAxKTtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0cyBvbmx5IDIuMC1zdHlsZSBzdWJ0cmFjdCgxLCAncycpIG9yIHN1YnRyYWN0KGR1cmF0aW9uKVxuICAgIGZ1bmN0aW9uIHN1YnRyYWN0JDEgKGlucHV0LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gYWRkU3VidHJhY3QkMSh0aGlzLCBpbnB1dCwgdmFsdWUsIC0xKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhYnNDZWlsIChudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKG51bWJlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWJibGUgKCkge1xuICAgICAgICB2YXIgbWlsbGlzZWNvbmRzID0gdGhpcy5fbWlsbGlzZWNvbmRzO1xuICAgICAgICB2YXIgZGF5cyAgICAgICAgID0gdGhpcy5fZGF5cztcbiAgICAgICAgdmFyIG1vbnRocyAgICAgICA9IHRoaXMuX21vbnRocztcbiAgICAgICAgdmFyIGRhdGEgICAgICAgICA9IHRoaXMuX2RhdGE7XG4gICAgICAgIHZhciBzZWNvbmRzLCBtaW51dGVzLCBob3VycywgeWVhcnMsIG1vbnRoc0Zyb21EYXlzO1xuXG4gICAgICAgIC8vIGlmIHdlIGhhdmUgYSBtaXggb2YgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIHZhbHVlcywgYnViYmxlIGRvd24gZmlyc3RcbiAgICAgICAgLy8gY2hlY2s6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8yMTY2XG4gICAgICAgIGlmICghKChtaWxsaXNlY29uZHMgPj0gMCAmJiBkYXlzID49IDAgJiYgbW9udGhzID49IDApIHx8XG4gICAgICAgICAgICAgICAgKG1pbGxpc2Vjb25kcyA8PSAwICYmIGRheXMgPD0gMCAmJiBtb250aHMgPD0gMCkpKSB7XG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgKz0gYWJzQ2VpbChtb250aHNUb0RheXMobW9udGhzKSArIGRheXMpICogODY0ZTU7XG4gICAgICAgICAgICBkYXlzID0gMDtcbiAgICAgICAgICAgIG1vbnRocyA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYnViYmxlcyB1cCB2YWx1ZXMsIHNlZSB0aGUgdGVzdHMgZm9yXG4gICAgICAgIC8vIGV4YW1wbGVzIG9mIHdoYXQgdGhhdCBtZWFucy5cbiAgICAgICAgZGF0YS5taWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZHMgJSAxMDAwO1xuXG4gICAgICAgIHNlY29uZHMgICAgICAgICAgID0gYWJzRmxvb3IobWlsbGlzZWNvbmRzIC8gMTAwMCk7XG4gICAgICAgIGRhdGEuc2Vjb25kcyAgICAgID0gc2Vjb25kcyAlIDYwO1xuXG4gICAgICAgIG1pbnV0ZXMgICAgICAgICAgID0gYWJzRmxvb3Ioc2Vjb25kcyAvIDYwKTtcbiAgICAgICAgZGF0YS5taW51dGVzICAgICAgPSBtaW51dGVzICUgNjA7XG5cbiAgICAgICAgaG91cnMgICAgICAgICAgICAgPSBhYnNGbG9vcihtaW51dGVzIC8gNjApO1xuICAgICAgICBkYXRhLmhvdXJzICAgICAgICA9IGhvdXJzICUgMjQ7XG5cbiAgICAgICAgZGF5cyArPSBhYnNGbG9vcihob3VycyAvIDI0KTtcblxuICAgICAgICAvLyBjb252ZXJ0IGRheXMgdG8gbW9udGhzXG4gICAgICAgIG1vbnRoc0Zyb21EYXlzID0gYWJzRmxvb3IoZGF5c1RvTW9udGhzKGRheXMpKTtcbiAgICAgICAgbW9udGhzICs9IG1vbnRoc0Zyb21EYXlzO1xuICAgICAgICBkYXlzIC09IGFic0NlaWwobW9udGhzVG9EYXlzKG1vbnRoc0Zyb21EYXlzKSk7XG5cbiAgICAgICAgLy8gMTIgbW9udGhzIC0+IDEgeWVhclxuICAgICAgICB5ZWFycyA9IGFic0Zsb29yKG1vbnRocyAvIDEyKTtcbiAgICAgICAgbW9udGhzICU9IDEyO1xuXG4gICAgICAgIGRhdGEuZGF5cyAgID0gZGF5cztcbiAgICAgICAgZGF0YS5tb250aHMgPSBtb250aHM7XG4gICAgICAgIGRhdGEueWVhcnMgID0geWVhcnM7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGF5c1RvTW9udGhzIChkYXlzKSB7XG4gICAgICAgIC8vIDQwMCB5ZWFycyBoYXZlIDE0NjA5NyBkYXlzICh0YWtpbmcgaW50byBhY2NvdW50IGxlYXAgeWVhciBydWxlcylcbiAgICAgICAgLy8gNDAwIHllYXJzIGhhdmUgMTIgbW9udGhzID09PSA0ODAwXG4gICAgICAgIHJldHVybiBkYXlzICogNDgwMCAvIDE0NjA5NztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aHNUb0RheXMgKG1vbnRocykge1xuICAgICAgICAvLyB0aGUgcmV2ZXJzZSBvZiBkYXlzVG9Nb250aHNcbiAgICAgICAgcmV0dXJuIG1vbnRocyAqIDE0NjA5NyAvIDQ4MDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYXMgKHVuaXRzKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRheXM7XG4gICAgICAgIHZhciBtb250aHM7XG4gICAgICAgIHZhciBtaWxsaXNlY29uZHMgPSB0aGlzLl9taWxsaXNlY29uZHM7XG5cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG5cbiAgICAgICAgaWYgKHVuaXRzID09PSAnbW9udGgnIHx8IHVuaXRzID09PSAneWVhcicpIHtcbiAgICAgICAgICAgIGRheXMgICA9IHRoaXMuX2RheXMgICArIG1pbGxpc2Vjb25kcyAvIDg2NGU1O1xuICAgICAgICAgICAgbW9udGhzID0gdGhpcy5fbW9udGhzICsgZGF5c1RvTW9udGhzKGRheXMpO1xuICAgICAgICAgICAgcmV0dXJuIHVuaXRzID09PSAnbW9udGgnID8gbW9udGhzIDogbW9udGhzIC8gMTI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBoYW5kbGUgbWlsbGlzZWNvbmRzIHNlcGFyYXRlbHkgYmVjYXVzZSBvZiBmbG9hdGluZyBwb2ludCBtYXRoIGVycm9ycyAoaXNzdWUgIzE4NjcpXG4gICAgICAgICAgICBkYXlzID0gdGhpcy5fZGF5cyArIE1hdGgucm91bmQobW9udGhzVG9EYXlzKHRoaXMuX21vbnRocykpO1xuICAgICAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3dlZWsnICAgOiByZXR1cm4gZGF5cyAvIDcgICAgICsgbWlsbGlzZWNvbmRzIC8gNjA0OGU1O1xuICAgICAgICAgICAgICAgIGNhc2UgJ2RheScgICAgOiByZXR1cm4gZGF5cyAgICAgICAgICsgbWlsbGlzZWNvbmRzIC8gODY0ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnaG91cicgICA6IHJldHVybiBkYXlzICogMjQgICAgKyBtaWxsaXNlY29uZHMgLyAzNmU1O1xuICAgICAgICAgICAgICAgIGNhc2UgJ21pbnV0ZScgOiByZXR1cm4gZGF5cyAqIDE0NDAgICsgbWlsbGlzZWNvbmRzIC8gNmU0O1xuICAgICAgICAgICAgICAgIGNhc2UgJ3NlY29uZCcgOiByZXR1cm4gZGF5cyAqIDg2NDAwICsgbWlsbGlzZWNvbmRzIC8gMTAwMDtcbiAgICAgICAgICAgICAgICAvLyBNYXRoLmZsb29yIHByZXZlbnRzIGZsb2F0aW5nIHBvaW50IG1hdGggZXJyb3JzIGhlcmVcbiAgICAgICAgICAgICAgICBjYXNlICdtaWxsaXNlY29uZCc6IHJldHVybiBNYXRoLmZsb29yKGRheXMgKiA4NjRlNSkgKyBtaWxsaXNlY29uZHM7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHVuaXQgJyArIHVuaXRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE86IFVzZSB0aGlzLmFzKCdtcycpP1xuICAgIGZ1bmN0aW9uIHZhbHVlT2YkMSAoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMuX21pbGxpc2Vjb25kcyArXG4gICAgICAgICAgICB0aGlzLl9kYXlzICogODY0ZTUgK1xuICAgICAgICAgICAgKHRoaXMuX21vbnRocyAlIDEyKSAqIDI1OTJlNiArXG4gICAgICAgICAgICB0b0ludCh0aGlzLl9tb250aHMgLyAxMikgKiAzMTUzNmU2XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUFzIChhbGlhcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXMoYWxpYXMpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHZhciBhc01pbGxpc2Vjb25kcyA9IG1ha2VBcygnbXMnKTtcbiAgICB2YXIgYXNTZWNvbmRzICAgICAgPSBtYWtlQXMoJ3MnKTtcbiAgICB2YXIgYXNNaW51dGVzICAgICAgPSBtYWtlQXMoJ20nKTtcbiAgICB2YXIgYXNIb3VycyAgICAgICAgPSBtYWtlQXMoJ2gnKTtcbiAgICB2YXIgYXNEYXlzICAgICAgICAgPSBtYWtlQXMoJ2QnKTtcbiAgICB2YXIgYXNXZWVrcyAgICAgICAgPSBtYWtlQXMoJ3cnKTtcbiAgICB2YXIgYXNNb250aHMgICAgICAgPSBtYWtlQXMoJ00nKTtcbiAgICB2YXIgYXNZZWFycyAgICAgICAgPSBtYWtlQXMoJ3knKTtcblxuICAgIGZ1bmN0aW9uIGNsb25lJDEgKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24odGhpcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0JDIgKHVuaXRzKSB7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzW3VuaXRzICsgJ3MnXSgpIDogTmFOO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VHZXR0ZXIobmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy5fZGF0YVtuYW1lXSA6IE5hTjtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgbWlsbGlzZWNvbmRzID0gbWFrZUdldHRlcignbWlsbGlzZWNvbmRzJyk7XG4gICAgdmFyIHNlY29uZHMgICAgICA9IG1ha2VHZXR0ZXIoJ3NlY29uZHMnKTtcbiAgICB2YXIgbWludXRlcyAgICAgID0gbWFrZUdldHRlcignbWludXRlcycpO1xuICAgIHZhciBob3VycyAgICAgICAgPSBtYWtlR2V0dGVyKCdob3VycycpO1xuICAgIHZhciBkYXlzICAgICAgICAgPSBtYWtlR2V0dGVyKCdkYXlzJyk7XG4gICAgdmFyIG1vbnRocyAgICAgICA9IG1ha2VHZXR0ZXIoJ21vbnRocycpO1xuICAgIHZhciB5ZWFycyAgICAgICAgPSBtYWtlR2V0dGVyKCd5ZWFycycpO1xuXG4gICAgZnVuY3Rpb24gd2Vla3MgKCkge1xuICAgICAgICByZXR1cm4gYWJzRmxvb3IodGhpcy5kYXlzKCkgLyA3KTtcbiAgICB9XG5cbiAgICB2YXIgcm91bmQgPSBNYXRoLnJvdW5kO1xuICAgIHZhciB0aHJlc2hvbGRzID0ge1xuICAgICAgICBzczogNDQsICAgICAgICAgLy8gYSBmZXcgc2Vjb25kcyB0byBzZWNvbmRzXG4gICAgICAgIHMgOiA0NSwgICAgICAgICAvLyBzZWNvbmRzIHRvIG1pbnV0ZVxuICAgICAgICBtIDogNDUsICAgICAgICAgLy8gbWludXRlcyB0byBob3VyXG4gICAgICAgIGggOiAyMiwgICAgICAgICAvLyBob3VycyB0byBkYXlcbiAgICAgICAgZCA6IDI2LCAgICAgICAgIC8vIGRheXMgdG8gbW9udGhcbiAgICAgICAgTSA6IDExICAgICAgICAgIC8vIG1vbnRocyB0byB5ZWFyXG4gICAgfTtcblxuICAgIC8vIGhlbHBlciBmdW5jdGlvbiBmb3IgbW9tZW50LmZuLmZyb20sIG1vbWVudC5mbi5mcm9tTm93LCBhbmQgbW9tZW50LmR1cmF0aW9uLmZuLmh1bWFuaXplXG4gICAgZnVuY3Rpb24gc3Vic3RpdHV0ZVRpbWVBZ28oc3RyaW5nLCBudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGlzRnV0dXJlLCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5yZWxhdGl2ZVRpbWUobnVtYmVyIHx8IDEsICEhd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lJDEgKHBvc05lZ0R1cmF0aW9uLCB3aXRob3V0U3VmZml4LCBsb2NhbGUpIHtcbiAgICAgICAgdmFyIGR1cmF0aW9uID0gY3JlYXRlRHVyYXRpb24ocG9zTmVnRHVyYXRpb24pLmFicygpO1xuICAgICAgICB2YXIgc2Vjb25kcyAgPSByb3VuZChkdXJhdGlvbi5hcygncycpKTtcbiAgICAgICAgdmFyIG1pbnV0ZXMgID0gcm91bmQoZHVyYXRpb24uYXMoJ20nKSk7XG4gICAgICAgIHZhciBob3VycyAgICA9IHJvdW5kKGR1cmF0aW9uLmFzKCdoJykpO1xuICAgICAgICB2YXIgZGF5cyAgICAgPSByb3VuZChkdXJhdGlvbi5hcygnZCcpKTtcbiAgICAgICAgdmFyIG1vbnRocyAgID0gcm91bmQoZHVyYXRpb24uYXMoJ00nKSk7XG4gICAgICAgIHZhciB5ZWFycyAgICA9IHJvdW5kKGR1cmF0aW9uLmFzKCd5JykpO1xuXG4gICAgICAgIHZhciBhID0gc2Vjb25kcyA8PSB0aHJlc2hvbGRzLnNzICYmIFsncycsIHNlY29uZHNdICB8fFxuICAgICAgICAgICAgICAgIHNlY29uZHMgPCB0aHJlc2hvbGRzLnMgICAmJiBbJ3NzJywgc2Vjb25kc10gfHxcbiAgICAgICAgICAgICAgICBtaW51dGVzIDw9IDEgICAgICAgICAgICAgJiYgWydtJ10gICAgICAgICAgIHx8XG4gICAgICAgICAgICAgICAgbWludXRlcyA8IHRocmVzaG9sZHMubSAgICYmIFsnbW0nLCBtaW51dGVzXSB8fFxuICAgICAgICAgICAgICAgIGhvdXJzICAgPD0gMSAgICAgICAgICAgICAmJiBbJ2gnXSAgICAgICAgICAgfHxcbiAgICAgICAgICAgICAgICBob3VycyAgIDwgdGhyZXNob2xkcy5oICAgJiYgWydoaCcsIGhvdXJzXSAgIHx8XG4gICAgICAgICAgICAgICAgZGF5cyAgICA8PSAxICAgICAgICAgICAgICYmIFsnZCddICAgICAgICAgICB8fFxuICAgICAgICAgICAgICAgIGRheXMgICAgPCB0aHJlc2hvbGRzLmQgICAmJiBbJ2RkJywgZGF5c10gICAgfHxcbiAgICAgICAgICAgICAgICBtb250aHMgIDw9IDEgICAgICAgICAgICAgJiYgWydNJ10gICAgICAgICAgIHx8XG4gICAgICAgICAgICAgICAgbW9udGhzICA8IHRocmVzaG9sZHMuTSAgICYmIFsnTU0nLCBtb250aHNdICB8fFxuICAgICAgICAgICAgICAgIHllYXJzICAgPD0gMSAgICAgICAgICAgICAmJiBbJ3knXSAgICAgICAgICAgfHwgWyd5eScsIHllYXJzXTtcblxuICAgICAgICBhWzJdID0gd2l0aG91dFN1ZmZpeDtcbiAgICAgICAgYVszXSA9ICtwb3NOZWdEdXJhdGlvbiA+IDA7XG4gICAgICAgIGFbNF0gPSBsb2NhbGU7XG4gICAgICAgIHJldHVybiBzdWJzdGl0dXRlVGltZUFnby5hcHBseShudWxsLCBhKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc2V0IHRoZSByb3VuZGluZyBmdW5jdGlvbiBmb3IgcmVsYXRpdmUgdGltZSBzdHJpbmdzXG4gICAgZnVuY3Rpb24gZ2V0U2V0UmVsYXRpdmVUaW1lUm91bmRpbmcgKHJvdW5kaW5nRnVuY3Rpb24pIHtcbiAgICAgICAgaWYgKHJvdW5kaW5nRnVuY3Rpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHJvdW5kO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Yocm91bmRpbmdGdW5jdGlvbikgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJvdW5kID0gcm91bmRpbmdGdW5jdGlvbjtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc2V0IGEgdGhyZXNob2xkIGZvciByZWxhdGl2ZSB0aW1lIHN0cmluZ3NcbiAgICBmdW5jdGlvbiBnZXRTZXRSZWxhdGl2ZVRpbWVUaHJlc2hvbGQgKHRocmVzaG9sZCwgbGltaXQpIHtcbiAgICAgICAgaWYgKHRocmVzaG9sZHNbdGhyZXNob2xkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpbWl0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJlc2hvbGRzW3RocmVzaG9sZF07XG4gICAgICAgIH1cbiAgICAgICAgdGhyZXNob2xkc1t0aHJlc2hvbGRdID0gbGltaXQ7XG4gICAgICAgIGlmICh0aHJlc2hvbGQgPT09ICdzJykge1xuICAgICAgICAgICAgdGhyZXNob2xkcy5zcyA9IGxpbWl0IC0gMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBodW1hbml6ZSAod2l0aFN1ZmZpeCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsb2NhbGUgPSB0aGlzLmxvY2FsZURhdGEoKTtcbiAgICAgICAgdmFyIG91dHB1dCA9IHJlbGF0aXZlVGltZSQxKHRoaXMsICF3aXRoU3VmZml4LCBsb2NhbGUpO1xuXG4gICAgICAgIGlmICh3aXRoU3VmZml4KSB7XG4gICAgICAgICAgICBvdXRwdXQgPSBsb2NhbGUucGFzdEZ1dHVyZSgrdGhpcywgb3V0cHV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsb2NhbGUucG9zdGZvcm1hdChvdXRwdXQpO1xuICAgIH1cblxuICAgIHZhciBhYnMkMSA9IE1hdGguYWJzO1xuXG4gICAgZnVuY3Rpb24gc2lnbih4KSB7XG4gICAgICAgIHJldHVybiAoKHggPiAwKSAtICh4IDwgMCkpIHx8ICt4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSVNPU3RyaW5nJDEoKSB7XG4gICAgICAgIC8vIGZvciBJU08gc3RyaW5ncyB3ZSBkbyBub3QgdXNlIHRoZSBub3JtYWwgYnViYmxpbmcgcnVsZXM6XG4gICAgICAgIC8vICAqIG1pbGxpc2Vjb25kcyBidWJibGUgdXAgdW50aWwgdGhleSBiZWNvbWUgaG91cnNcbiAgICAgICAgLy8gICogZGF5cyBkbyBub3QgYnViYmxlIGF0IGFsbFxuICAgICAgICAvLyAgKiBtb250aHMgYnViYmxlIHVwIHVudGlsIHRoZXkgYmVjb21lIHllYXJzXG4gICAgICAgIC8vIFRoaXMgaXMgYmVjYXVzZSB0aGVyZSBpcyBubyBjb250ZXh0LWZyZWUgY29udmVyc2lvbiBiZXR3ZWVuIGhvdXJzIGFuZCBkYXlzXG4gICAgICAgIC8vICh0aGluayBvZiBjbG9jayBjaGFuZ2VzKVxuICAgICAgICAvLyBhbmQgYWxzbyBub3QgYmV0d2VlbiBkYXlzIGFuZCBtb250aHMgKDI4LTMxIGRheXMgcGVyIG1vbnRoKVxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzZWNvbmRzID0gYWJzJDEodGhpcy5fbWlsbGlzZWNvbmRzKSAvIDEwMDA7XG4gICAgICAgIHZhciBkYXlzICAgICAgICAgPSBhYnMkMSh0aGlzLl9kYXlzKTtcbiAgICAgICAgdmFyIG1vbnRocyAgICAgICA9IGFicyQxKHRoaXMuX21vbnRocyk7XG4gICAgICAgIHZhciBtaW51dGVzLCBob3VycywgeWVhcnM7XG5cbiAgICAgICAgLy8gMzYwMCBzZWNvbmRzIC0+IDYwIG1pbnV0ZXMgLT4gMSBob3VyXG4gICAgICAgIG1pbnV0ZXMgICAgICAgICAgID0gYWJzRmxvb3Ioc2Vjb25kcyAvIDYwKTtcbiAgICAgICAgaG91cnMgICAgICAgICAgICAgPSBhYnNGbG9vcihtaW51dGVzIC8gNjApO1xuICAgICAgICBzZWNvbmRzICU9IDYwO1xuICAgICAgICBtaW51dGVzICU9IDYwO1xuXG4gICAgICAgIC8vIDEyIG1vbnRocyAtPiAxIHllYXJcbiAgICAgICAgeWVhcnMgID0gYWJzRmxvb3IobW9udGhzIC8gMTIpO1xuICAgICAgICBtb250aHMgJT0gMTI7XG5cblxuICAgICAgICAvLyBpbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vZG9yZGlsbGUvbW9tZW50LWlzb2R1cmF0aW9uL2Jsb2IvbWFzdGVyL21vbWVudC5pc29kdXJhdGlvbi5qc1xuICAgICAgICB2YXIgWSA9IHllYXJzO1xuICAgICAgICB2YXIgTSA9IG1vbnRocztcbiAgICAgICAgdmFyIEQgPSBkYXlzO1xuICAgICAgICB2YXIgaCA9IGhvdXJzO1xuICAgICAgICB2YXIgbSA9IG1pbnV0ZXM7XG4gICAgICAgIHZhciBzID0gc2Vjb25kcyA/IHNlY29uZHMudG9GaXhlZCgzKS5yZXBsYWNlKC9cXC4/MCskLywgJycpIDogJyc7XG4gICAgICAgIHZhciB0b3RhbCA9IHRoaXMuYXNTZWNvbmRzKCk7XG5cbiAgICAgICAgaWYgKCF0b3RhbCkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0aGUgc2FtZSBhcyBDIydzIChOb2RhKSBhbmQgcHl0aG9uIChpc29kYXRlKS4uLlxuICAgICAgICAgICAgLy8gYnV0IG5vdCBvdGhlciBKUyAoZ29vZy5kYXRlKVxuICAgICAgICAgICAgcmV0dXJuICdQMEQnO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHRvdGFsU2lnbiA9IHRvdGFsIDwgMCA/ICctJyA6ICcnO1xuICAgICAgICB2YXIgeW1TaWduID0gc2lnbih0aGlzLl9tb250aHMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuICAgICAgICB2YXIgZGF5c1NpZ24gPSBzaWduKHRoaXMuX2RheXMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuICAgICAgICB2YXIgaG1zU2lnbiA9IHNpZ24odGhpcy5fbWlsbGlzZWNvbmRzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcblxuICAgICAgICByZXR1cm4gdG90YWxTaWduICsgJ1AnICtcbiAgICAgICAgICAgIChZID8geW1TaWduICsgWSArICdZJyA6ICcnKSArXG4gICAgICAgICAgICAoTSA/IHltU2lnbiArIE0gKyAnTScgOiAnJykgK1xuICAgICAgICAgICAgKEQgPyBkYXlzU2lnbiArIEQgKyAnRCcgOiAnJykgK1xuICAgICAgICAgICAgKChoIHx8IG0gfHwgcykgPyAnVCcgOiAnJykgK1xuICAgICAgICAgICAgKGggPyBobXNTaWduICsgaCArICdIJyA6ICcnKSArXG4gICAgICAgICAgICAobSA/IGhtc1NpZ24gKyBtICsgJ00nIDogJycpICtcbiAgICAgICAgICAgIChzID8gaG1zU2lnbiArIHMgKyAnUycgOiAnJyk7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvJDIgPSBEdXJhdGlvbi5wcm90b3R5cGU7XG5cbiAgICBwcm90byQyLmlzVmFsaWQgICAgICAgID0gaXNWYWxpZCQxO1xuICAgIHByb3RvJDIuYWJzICAgICAgICAgICAgPSBhYnM7XG4gICAgcHJvdG8kMi5hZGQgICAgICAgICAgICA9IGFkZCQxO1xuICAgIHByb3RvJDIuc3VidHJhY3QgICAgICAgPSBzdWJ0cmFjdCQxO1xuICAgIHByb3RvJDIuYXMgICAgICAgICAgICAgPSBhcztcbiAgICBwcm90byQyLmFzTWlsbGlzZWNvbmRzID0gYXNNaWxsaXNlY29uZHM7XG4gICAgcHJvdG8kMi5hc1NlY29uZHMgICAgICA9IGFzU2Vjb25kcztcbiAgICBwcm90byQyLmFzTWludXRlcyAgICAgID0gYXNNaW51dGVzO1xuICAgIHByb3RvJDIuYXNIb3VycyAgICAgICAgPSBhc0hvdXJzO1xuICAgIHByb3RvJDIuYXNEYXlzICAgICAgICAgPSBhc0RheXM7XG4gICAgcHJvdG8kMi5hc1dlZWtzICAgICAgICA9IGFzV2Vla3M7XG4gICAgcHJvdG8kMi5hc01vbnRocyAgICAgICA9IGFzTW9udGhzO1xuICAgIHByb3RvJDIuYXNZZWFycyAgICAgICAgPSBhc1llYXJzO1xuICAgIHByb3RvJDIudmFsdWVPZiAgICAgICAgPSB2YWx1ZU9mJDE7XG4gICAgcHJvdG8kMi5fYnViYmxlICAgICAgICA9IGJ1YmJsZTtcbiAgICBwcm90byQyLmNsb25lICAgICAgICAgID0gY2xvbmUkMTtcbiAgICBwcm90byQyLmdldCAgICAgICAgICAgID0gZ2V0JDI7XG4gICAgcHJvdG8kMi5taWxsaXNlY29uZHMgICA9IG1pbGxpc2Vjb25kcztcbiAgICBwcm90byQyLnNlY29uZHMgICAgICAgID0gc2Vjb25kcztcbiAgICBwcm90byQyLm1pbnV0ZXMgICAgICAgID0gbWludXRlcztcbiAgICBwcm90byQyLmhvdXJzICAgICAgICAgID0gaG91cnM7XG4gICAgcHJvdG8kMi5kYXlzICAgICAgICAgICA9IGRheXM7XG4gICAgcHJvdG8kMi53ZWVrcyAgICAgICAgICA9IHdlZWtzO1xuICAgIHByb3RvJDIubW9udGhzICAgICAgICAgPSBtb250aHM7XG4gICAgcHJvdG8kMi55ZWFycyAgICAgICAgICA9IHllYXJzO1xuICAgIHByb3RvJDIuaHVtYW5pemUgICAgICAgPSBodW1hbml6ZTtcbiAgICBwcm90byQyLnRvSVNPU3RyaW5nICAgID0gdG9JU09TdHJpbmckMTtcbiAgICBwcm90byQyLnRvU3RyaW5nICAgICAgID0gdG9JU09TdHJpbmckMTtcbiAgICBwcm90byQyLnRvSlNPTiAgICAgICAgID0gdG9JU09TdHJpbmckMTtcbiAgICBwcm90byQyLmxvY2FsZSAgICAgICAgID0gbG9jYWxlO1xuICAgIHByb3RvJDIubG9jYWxlRGF0YSAgICAgPSBsb2NhbGVEYXRhO1xuXG4gICAgcHJvdG8kMi50b0lzb1N0cmluZyA9IGRlcHJlY2F0ZSgndG9Jc29TdHJpbmcoKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHRvSVNPU3RyaW5nKCkgaW5zdGVhZCAobm90aWNlIHRoZSBjYXBpdGFscyknLCB0b0lTT1N0cmluZyQxKTtcbiAgICBwcm90byQyLmxhbmcgPSBsYW5nO1xuXG4gICAgLy8gU2lkZSBlZmZlY3QgaW1wb3J0c1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1gnLCAwLCAwLCAndW5peCcpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd4JywgMCwgMCwgJ3ZhbHVlT2YnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3gnLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignWCcsIG1hdGNoVGltZXN0YW1wKTtcbiAgICBhZGRQYXJzZVRva2VuKCdYJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKHBhcnNlRmxvYXQoaW5wdXQsIDEwKSAqIDEwMDApO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ3gnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUodG9JbnQoaW5wdXQpKTtcbiAgICB9KTtcblxuICAgIC8vIFNpZGUgZWZmZWN0IGltcG9ydHNcblxuXG4gICAgaG9va3MudmVyc2lvbiA9ICcyLjIyLjEnO1xuXG4gICAgc2V0SG9va0NhbGxiYWNrKGNyZWF0ZUxvY2FsKTtcblxuICAgIGhvb2tzLmZuICAgICAgICAgICAgICAgICAgICA9IHByb3RvO1xuICAgIGhvb2tzLm1pbiAgICAgICAgICAgICAgICAgICA9IG1pbjtcbiAgICBob29rcy5tYXggICAgICAgICAgICAgICAgICAgPSBtYXg7XG4gICAgaG9va3Mubm93ICAgICAgICAgICAgICAgICAgID0gbm93O1xuICAgIGhvb2tzLnV0YyAgICAgICAgICAgICAgICAgICA9IGNyZWF0ZVVUQztcbiAgICBob29rcy51bml4ICAgICAgICAgICAgICAgICAgPSBjcmVhdGVVbml4O1xuICAgIGhvb2tzLm1vbnRocyAgICAgICAgICAgICAgICA9IGxpc3RNb250aHM7XG4gICAgaG9va3MuaXNEYXRlICAgICAgICAgICAgICAgID0gaXNEYXRlO1xuICAgIGhvb2tzLmxvY2FsZSAgICAgICAgICAgICAgICA9IGdldFNldEdsb2JhbExvY2FsZTtcbiAgICBob29rcy5pbnZhbGlkICAgICAgICAgICAgICAgPSBjcmVhdGVJbnZhbGlkO1xuICAgIGhvb2tzLmR1cmF0aW9uICAgICAgICAgICAgICA9IGNyZWF0ZUR1cmF0aW9uO1xuICAgIGhvb2tzLmlzTW9tZW50ICAgICAgICAgICAgICA9IGlzTW9tZW50O1xuICAgIGhvb2tzLndlZWtkYXlzICAgICAgICAgICAgICA9IGxpc3RXZWVrZGF5cztcbiAgICBob29rcy5wYXJzZVpvbmUgICAgICAgICAgICAgPSBjcmVhdGVJblpvbmU7XG4gICAgaG9va3MubG9jYWxlRGF0YSAgICAgICAgICAgID0gZ2V0TG9jYWxlO1xuICAgIGhvb2tzLmlzRHVyYXRpb24gICAgICAgICAgICA9IGlzRHVyYXRpb247XG4gICAgaG9va3MubW9udGhzU2hvcnQgICAgICAgICAgID0gbGlzdE1vbnRoc1Nob3J0O1xuICAgIGhvb2tzLndlZWtkYXlzTWluICAgICAgICAgICA9IGxpc3RXZWVrZGF5c01pbjtcbiAgICBob29rcy5kZWZpbmVMb2NhbGUgICAgICAgICAgPSBkZWZpbmVMb2NhbGU7XG4gICAgaG9va3MudXBkYXRlTG9jYWxlICAgICAgICAgID0gdXBkYXRlTG9jYWxlO1xuICAgIGhvb2tzLmxvY2FsZXMgICAgICAgICAgICAgICA9IGxpc3RMb2NhbGVzO1xuICAgIGhvb2tzLndlZWtkYXlzU2hvcnQgICAgICAgICA9IGxpc3RXZWVrZGF5c1Nob3J0O1xuICAgIGhvb2tzLm5vcm1hbGl6ZVVuaXRzICAgICAgICA9IG5vcm1hbGl6ZVVuaXRzO1xuICAgIGhvb2tzLnJlbGF0aXZlVGltZVJvdW5kaW5nICA9IGdldFNldFJlbGF0aXZlVGltZVJvdW5kaW5nO1xuICAgIGhvb2tzLnJlbGF0aXZlVGltZVRocmVzaG9sZCA9IGdldFNldFJlbGF0aXZlVGltZVRocmVzaG9sZDtcbiAgICBob29rcy5jYWxlbmRhckZvcm1hdCAgICAgICAgPSBnZXRDYWxlbmRhckZvcm1hdDtcbiAgICBob29rcy5wcm90b3R5cGUgICAgICAgICAgICAgPSBwcm90bztcblxuICAgIC8vIGN1cnJlbnRseSBIVE1MNSBpbnB1dCB0eXBlIG9ubHkgc3VwcG9ydHMgMjQtaG91ciBmb3JtYXRzXG4gICAgaG9va3MuSFRNTDVfRk1UID0ge1xuICAgICAgICBEQVRFVElNRV9MT0NBTDogJ1lZWVktTU0tRERUSEg6bW0nLCAgICAgICAgICAgICAvLyA8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgLz5cbiAgICAgICAgREFURVRJTUVfTE9DQUxfU0VDT05EUzogJ1lZWVktTU0tRERUSEg6bW06c3MnLCAgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIHN0ZXA9XCIxXCIgLz5cbiAgICAgICAgREFURVRJTUVfTE9DQUxfTVM6ICdZWVlZLU1NLUREVEhIOm1tOnNzLlNTUycsICAgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIHN0ZXA9XCIwLjAwMVwiIC8+XG4gICAgICAgIERBVEU6ICdZWVlZLU1NLUREJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDxpbnB1dCB0eXBlPVwiZGF0ZVwiIC8+XG4gICAgICAgIFRJTUU6ICdISDptbScsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDxpbnB1dCB0eXBlPVwidGltZVwiIC8+XG4gICAgICAgIFRJTUVfU0VDT05EUzogJ0hIOm1tOnNzJywgICAgICAgICAgICAgICAgICAgICAgIC8vIDxpbnB1dCB0eXBlPVwidGltZVwiIHN0ZXA9XCIxXCIgLz5cbiAgICAgICAgVElNRV9NUzogJ0hIOm1tOnNzLlNTUycsICAgICAgICAgICAgICAgICAgICAgICAgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgc3RlcD1cIjAuMDAxXCIgLz5cbiAgICAgICAgV0VFSzogJ1lZWVktW1ddV1cnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPGlucHV0IHR5cGU9XCJ3ZWVrXCIgLz5cbiAgICAgICAgTU9OVEg6ICdZWVlZLU1NJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPGlucHV0IHR5cGU9XCJtb250aFwiIC8+XG4gICAgfTtcblxuICAgIHJldHVybiBob29rcztcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2\n")},20:function(module,exports,__webpack_require__){eval("/* WEBPACK VAR INJECTION */(function(global, module) {/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n  /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n  var undefined;\n\n  /** Used as the semantic version number. */\n  var VERSION = '4.17.15';\n\n  /** Used as the size to enable large array optimizations. */\n  var LARGE_ARRAY_SIZE = 200;\n\n  /** Error message constants. */\n  var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n      FUNC_ERROR_TEXT = 'Expected a function';\n\n  /** Used to stand-in for `undefined` hash values. */\n  var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n  /** Used as the maximum memoize cache size. */\n  var MAX_MEMOIZE_SIZE = 500;\n\n  /** Used as the internal argument placeholder. */\n  var PLACEHOLDER = '__lodash_placeholder__';\n\n  /** Used to compose bitmasks for cloning. */\n  var CLONE_DEEP_FLAG = 1,\n      CLONE_FLAT_FLAG = 2,\n      CLONE_SYMBOLS_FLAG = 4;\n\n  /** Used to compose bitmasks for value comparisons. */\n  var COMPARE_PARTIAL_FLAG = 1,\n      COMPARE_UNORDERED_FLAG = 2;\n\n  /** Used to compose bitmasks for function metadata. */\n  var WRAP_BIND_FLAG = 1,\n      WRAP_BIND_KEY_FLAG = 2,\n      WRAP_CURRY_BOUND_FLAG = 4,\n      WRAP_CURRY_FLAG = 8,\n      WRAP_CURRY_RIGHT_FLAG = 16,\n      WRAP_PARTIAL_FLAG = 32,\n      WRAP_PARTIAL_RIGHT_FLAG = 64,\n      WRAP_ARY_FLAG = 128,\n      WRAP_REARG_FLAG = 256,\n      WRAP_FLIP_FLAG = 512;\n\n  /** Used as default options for `_.truncate`. */\n  var DEFAULT_TRUNC_LENGTH = 30,\n      DEFAULT_TRUNC_OMISSION = '...';\n\n  /** Used to detect hot functions by number of calls within a span of milliseconds. */\n  var HOT_COUNT = 800,\n      HOT_SPAN = 16;\n\n  /** Used to indicate the type of lazy iteratees. */\n  var LAZY_FILTER_FLAG = 1,\n      LAZY_MAP_FLAG = 2,\n      LAZY_WHILE_FLAG = 3;\n\n  /** Used as references for various `Number` constants. */\n  var INFINITY = 1 / 0,\n      MAX_SAFE_INTEGER = 9007199254740991,\n      MAX_INTEGER = 1.7976931348623157e+308,\n      NAN = 0 / 0;\n\n  /** Used as references for the maximum length and index of an array. */\n  var MAX_ARRAY_LENGTH = 4294967295,\n      MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n      HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n  /** Used to associate wrap methods with their bit flags. */\n  var wrapFlags = [\n    ['ary', WRAP_ARY_FLAG],\n    ['bind', WRAP_BIND_FLAG],\n    ['bindKey', WRAP_BIND_KEY_FLAG],\n    ['curry', WRAP_CURRY_FLAG],\n    ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n    ['flip', WRAP_FLIP_FLAG],\n    ['partial', WRAP_PARTIAL_FLAG],\n    ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n    ['rearg', WRAP_REARG_FLAG]\n  ];\n\n  /** `Object#toString` result references. */\n  var argsTag = '[object Arguments]',\n      arrayTag = '[object Array]',\n      asyncTag = '[object AsyncFunction]',\n      boolTag = '[object Boolean]',\n      dateTag = '[object Date]',\n      domExcTag = '[object DOMException]',\n      errorTag = '[object Error]',\n      funcTag = '[object Function]',\n      genTag = '[object GeneratorFunction]',\n      mapTag = '[object Map]',\n      numberTag = '[object Number]',\n      nullTag = '[object Null]',\n      objectTag = '[object Object]',\n      promiseTag = '[object Promise]',\n      proxyTag = '[object Proxy]',\n      regexpTag = '[object RegExp]',\n      setTag = '[object Set]',\n      stringTag = '[object String]',\n      symbolTag = '[object Symbol]',\n      undefinedTag = '[object Undefined]',\n      weakMapTag = '[object WeakMap]',\n      weakSetTag = '[object WeakSet]';\n\n  var arrayBufferTag = '[object ArrayBuffer]',\n      dataViewTag = '[object DataView]',\n      float32Tag = '[object Float32Array]',\n      float64Tag = '[object Float64Array]',\n      int8Tag = '[object Int8Array]',\n      int16Tag = '[object Int16Array]',\n      int32Tag = '[object Int32Array]',\n      uint8Tag = '[object Uint8Array]',\n      uint8ClampedTag = '[object Uint8ClampedArray]',\n      uint16Tag = '[object Uint16Array]',\n      uint32Tag = '[object Uint32Array]';\n\n  /** Used to match empty string literals in compiled template source. */\n  var reEmptyStringLeading = /\\b__p \\+= '';/g,\n      reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n      reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n  /** Used to match HTML entities and HTML characters. */\n  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n      reUnescapedHtml = /[&<>\"']/g,\n      reHasEscapedHtml = RegExp(reEscapedHtml.source),\n      reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n  /** Used to match template delimiters. */\n  var reEscape = /<%-([\\s\\S]+?)%>/g,\n      reEvaluate = /<%([\\s\\S]+?)%>/g,\n      reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n  /** Used to match property names within property paths. */\n  var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n      reIsPlainProp = /^\\w*$/,\n      rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n  /**\n   * Used to match `RegExp`\n   * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n   */\n  var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n      reHasRegExpChar = RegExp(reRegExpChar.source);\n\n  /** Used to match leading and trailing whitespace. */\n  var reTrim = /^\\s+|\\s+$/g,\n      reTrimStart = /^\\s+/,\n      reTrimEnd = /\\s+$/;\n\n  /** Used to match wrap detail comments. */\n  var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n      reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n      reSplitDetails = /,? & /;\n\n  /** Used to match words composed of alphanumeric characters. */\n  var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n  /** Used to match backslashes in property paths. */\n  var reEscapeChar = /\\\\(\\\\)?/g;\n\n  /**\n   * Used to match\n   * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n   */\n  var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n  /** Used to match `RegExp` flags from their coerced string values. */\n  var reFlags = /\\w*$/;\n\n  /** Used to detect bad signed hexadecimal string values. */\n  var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n  /** Used to detect binary string values. */\n  var reIsBinary = /^0b[01]+$/i;\n\n  /** Used to detect host constructors (Safari). */\n  var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n  /** Used to detect octal string values. */\n  var reIsOctal = /^0o[0-7]+$/i;\n\n  /** Used to detect unsigned integer values. */\n  var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n  /** Used to match Latin Unicode letters (excluding mathematical operators). */\n  var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n  /** Used to ensure capturing order of template delimiters. */\n  var reNoMatch = /($^)/;\n\n  /** Used to match unescaped characters in compiled string literals. */\n  var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n  /** Used to compose unicode character classes. */\n  var rsAstralRange = '\\\\ud800-\\\\udfff',\n      rsComboMarksRange = '\\\\u0300-\\\\u036f',\n      reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n      rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n      rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n      rsDingbatRange = '\\\\u2700-\\\\u27bf',\n      rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n      rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n      rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n      rsPunctuationRange = '\\\\u2000-\\\\u206f',\n      rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n      rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n      rsVarRange = '\\\\ufe0e\\\\ufe0f',\n      rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n  /** Used to compose unicode capture groups. */\n  var rsApos = \"['\\u2019]\",\n      rsAstral = '[' + rsAstralRange + ']',\n      rsBreak = '[' + rsBreakRange + ']',\n      rsCombo = '[' + rsComboRange + ']',\n      rsDigits = '\\\\d+',\n      rsDingbat = '[' + rsDingbatRange + ']',\n      rsLower = '[' + rsLowerRange + ']',\n      rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n      rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n      rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n      rsNonAstral = '[^' + rsAstralRange + ']',\n      rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n      rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n      rsUpper = '[' + rsUpperRange + ']',\n      rsZWJ = '\\\\u200d';\n\n  /** Used to compose unicode regexes. */\n  var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n      rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n      rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n      rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n      reOptMod = rsModifier + '?',\n      rsOptVar = '[' + rsVarRange + ']?',\n      rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n      rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n      rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n      rsSeq = rsOptVar + reOptMod + rsOptJoin,\n      rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n      rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n  /** Used to match apostrophes. */\n  var reApos = RegExp(rsApos, 'g');\n\n  /**\n   * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n   * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n   */\n  var reComboMark = RegExp(rsCombo, 'g');\n\n  /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n  var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n  /** Used to match complex or compound words. */\n  var reUnicodeWord = RegExp([\n    rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n    rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n    rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n    rsUpper + '+' + rsOptContrUpper,\n    rsOrdUpper,\n    rsOrdLower,\n    rsDigits,\n    rsEmoji\n  ].join('|'), 'g');\n\n  /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n  var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');\n\n  /** Used to detect strings that need a more robust regexp to match words. */\n  var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n  /** Used to assign default `context` object properties. */\n  var contextProps = [\n    'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n    'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n    'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n    'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n    '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n  ];\n\n  /** Used to make template sourceURLs easier to identify. */\n  var templateCounter = -1;\n\n  /** Used to identify `toStringTag` values of typed arrays. */\n  var typedArrayTags = {};\n  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n  typedArrayTags[uint32Tag] = true;\n  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n  typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n  typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n  typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n  typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n  typedArrayTags[setTag] = typedArrayTags[stringTag] =\n  typedArrayTags[weakMapTag] = false;\n\n  /** Used to identify `toStringTag` values supported by `_.clone`. */\n  var cloneableTags = {};\n  cloneableTags[argsTag] = cloneableTags[arrayTag] =\n  cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n  cloneableTags[boolTag] = cloneableTags[dateTag] =\n  cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n  cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n  cloneableTags[int32Tag] = cloneableTags[mapTag] =\n  cloneableTags[numberTag] = cloneableTags[objectTag] =\n  cloneableTags[regexpTag] = cloneableTags[setTag] =\n  cloneableTags[stringTag] = cloneableTags[symbolTag] =\n  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n  cloneableTags[errorTag] = cloneableTags[funcTag] =\n  cloneableTags[weakMapTag] = false;\n\n  /** Used to map Latin Unicode letters to basic Latin letters. */\n  var deburredLetters = {\n    // Latin-1 Supplement block.\n    '\\xc0': 'A',  '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n    '\\xe0': 'a',  '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n    '\\xc7': 'C',  '\\xe7': 'c',\n    '\\xd0': 'D',  '\\xf0': 'd',\n    '\\xc8': 'E',  '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n    '\\xe8': 'e',  '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n    '\\xcc': 'I',  '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n    '\\xec': 'i',  '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n    '\\xd1': 'N',  '\\xf1': 'n',\n    '\\xd2': 'O',  '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n    '\\xf2': 'o',  '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n    '\\xd9': 'U',  '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n    '\\xf9': 'u',  '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n    '\\xdd': 'Y',  '\\xfd': 'y', '\\xff': 'y',\n    '\\xc6': 'Ae', '\\xe6': 'ae',\n    '\\xde': 'Th', '\\xfe': 'th',\n    '\\xdf': 'ss',\n    // Latin Extended-A block.\n    '\\u0100': 'A',  '\\u0102': 'A', '\\u0104': 'A',\n    '\\u0101': 'a',  '\\u0103': 'a', '\\u0105': 'a',\n    '\\u0106': 'C',  '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n    '\\u0107': 'c',  '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n    '\\u010e': 'D',  '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n    '\\u0112': 'E',  '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n    '\\u0113': 'e',  '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n    '\\u011c': 'G',  '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n    '\\u011d': 'g',  '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n    '\\u0124': 'H',  '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n    '\\u0128': 'I',  '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n    '\\u0129': 'i',  '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n    '\\u0134': 'J',  '\\u0135': 'j',\n    '\\u0136': 'K',  '\\u0137': 'k', '\\u0138': 'k',\n    '\\u0139': 'L',  '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n    '\\u013a': 'l',  '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n    '\\u0143': 'N',  '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n    '\\u0144': 'n',  '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n    '\\u014c': 'O',  '\\u014e': 'O', '\\u0150': 'O',\n    '\\u014d': 'o',  '\\u014f': 'o', '\\u0151': 'o',\n    '\\u0154': 'R',  '\\u0156': 'R', '\\u0158': 'R',\n    '\\u0155': 'r',  '\\u0157': 'r', '\\u0159': 'r',\n    '\\u015a': 'S',  '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n    '\\u015b': 's',  '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n    '\\u0162': 'T',  '\\u0164': 'T', '\\u0166': 'T',\n    '\\u0163': 't',  '\\u0165': 't', '\\u0167': 't',\n    '\\u0168': 'U',  '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n    '\\u0169': 'u',  '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n    '\\u0174': 'W',  '\\u0175': 'w',\n    '\\u0176': 'Y',  '\\u0177': 'y', '\\u0178': 'Y',\n    '\\u0179': 'Z',  '\\u017b': 'Z', '\\u017d': 'Z',\n    '\\u017a': 'z',  '\\u017c': 'z', '\\u017e': 'z',\n    '\\u0132': 'IJ', '\\u0133': 'ij',\n    '\\u0152': 'Oe', '\\u0153': 'oe',\n    '\\u0149': \"'n\", '\\u017f': 's'\n  };\n\n  /** Used to map characters to HTML entities. */\n  var htmlEscapes = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#39;'\n  };\n\n  /** Used to map HTML entities to characters. */\n  var htmlUnescapes = {\n    '&amp;': '&',\n    '&lt;': '<',\n    '&gt;': '>',\n    '&quot;': '\"',\n    '&#39;': \"'\"\n  };\n\n  /** Used to escape characters for inclusion in compiled string literals. */\n  var stringEscapes = {\n    '\\\\': '\\\\',\n    \"'\": \"'\",\n    '\\n': 'n',\n    '\\r': 'r',\n    '\\u2028': 'u2028',\n    '\\u2029': 'u2029'\n  };\n\n  /** Built-in method references without a dependency on `root`. */\n  var freeParseFloat = parseFloat,\n      freeParseInt = parseInt;\n\n  /** Detect free variable `global` from Node.js. */\n  var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n  /** Detect free variable `self`. */\n  var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n  /** Used as a reference to the global object. */\n  var root = freeGlobal || freeSelf || Function('return this')();\n\n  /** Detect free variable `exports`. */\n  var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n  /** Detect free variable `module`. */\n  var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n  /** Detect the popular CommonJS extension `module.exports`. */\n  var moduleExports = freeModule && freeModule.exports === freeExports;\n\n  /** Detect free variable `process` from Node.js. */\n  var freeProcess = moduleExports && freeGlobal.process;\n\n  /** Used to access faster Node.js helpers. */\n  var nodeUtil = (function() {\n    try {\n      // Use `util.types` for Node.js 10+.\n      var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n      if (types) {\n        return types;\n      }\n\n      // Legacy `process.binding('util')` for Node.js < 10.\n      return freeProcess && freeProcess.binding && freeProcess.binding('util');\n    } catch (e) {}\n  }());\n\n  /* Node.js helper references. */\n  var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n      nodeIsDate = nodeUtil && nodeUtil.isDate,\n      nodeIsMap = nodeUtil && nodeUtil.isMap,\n      nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n      nodeIsSet = nodeUtil && nodeUtil.isSet,\n      nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * A faster alternative to `Function#apply`, this function invokes `func`\n   * with the `this` binding of `thisArg` and the arguments of `args`.\n   *\n   * @private\n   * @param {Function} func The function to invoke.\n   * @param {*} thisArg The `this` binding of `func`.\n   * @param {Array} args The arguments to invoke `func` with.\n   * @returns {*} Returns the result of `func`.\n   */\n  function apply(func, thisArg, args) {\n    switch (args.length) {\n      case 0: return func.call(thisArg);\n      case 1: return func.call(thisArg, args[0]);\n      case 2: return func.call(thisArg, args[0], args[1]);\n      case 3: return func.call(thisArg, args[0], args[1], args[2]);\n    }\n    return func.apply(thisArg, args);\n  }\n\n  /**\n   * A specialized version of `baseAggregator` for arrays.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} setter The function to set `accumulator` values.\n   * @param {Function} iteratee The iteratee to transform keys.\n   * @param {Object} accumulator The initial aggregated object.\n   * @returns {Function} Returns `accumulator`.\n   */\n  function arrayAggregator(array, setter, iteratee, accumulator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      var value = array[index];\n      setter(accumulator, value, iteratee(value), array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.forEach` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayEach(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (iteratee(array[index], index, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.forEachRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayEachRight(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n\n    while (length--) {\n      if (iteratee(array[length], length, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.every` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if all elements pass the predicate check,\n   *  else `false`.\n   */\n  function arrayEvery(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (!predicate(array[index], index, array)) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  /**\n   * A specialized version of `_.filter` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {Array} Returns the new filtered array.\n   */\n  function arrayFilter(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (predicate(value, index, array)) {\n        result[resIndex++] = value;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * A specialized version of `_.includes` for arrays without support for\n   * specifying an index to search from.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */\n  function arrayIncludes(array, value) {\n    var length = array == null ? 0 : array.length;\n    return !!length && baseIndexOf(array, value, 0) > -1;\n  }\n\n  /**\n   * This function is like `arrayIncludes` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */\n  function arrayIncludesWith(array, value, comparator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (comparator(value, array[index])) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * A specialized version of `_.map` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the new mapped array.\n   */\n  function arrayMap(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        result = Array(length);\n\n    while (++index < length) {\n      result[index] = iteratee(array[index], index, array);\n    }\n    return result;\n  }\n\n  /**\n   * Appends the elements of `values` to `array`.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {Array} values The values to append.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayPush(array, values) {\n    var index = -1,\n        length = values.length,\n        offset = array.length;\n\n    while (++index < length) {\n      array[offset + index] = values[index];\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.reduce` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the first element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduce(array, iteratee, accumulator, initAccum) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    if (initAccum && length) {\n      accumulator = array[++index];\n    }\n    while (++index < length) {\n      accumulator = iteratee(accumulator, array[index], index, array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.reduceRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the last element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n    var length = array == null ? 0 : array.length;\n    if (initAccum && length) {\n      accumulator = array[--length];\n    }\n    while (length--) {\n      accumulator = iteratee(accumulator, array[length], length, array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.some` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if any element passes the predicate check,\n   *  else `false`.\n   */\n  function arraySome(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (predicate(array[index], index, array)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Gets the size of an ASCII `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  var asciiSize = baseProperty('length');\n\n  /**\n   * Converts an ASCII `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function asciiToArray(string) {\n    return string.split('');\n  }\n\n  /**\n   * Splits an ASCII `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n  function asciiWords(string) {\n    return string.match(reAsciiWord) || [];\n  }\n\n  /**\n   * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n   * without support for iteratee shorthands, which iterates over `collection`\n   * using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the found element or its key, else `undefined`.\n   */\n  function baseFindKey(collection, predicate, eachFunc) {\n    var result;\n    eachFunc(collection, function(value, key, collection) {\n      if (predicate(value, key, collection)) {\n        result = key;\n        return false;\n      }\n    });\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.findIndex` and `_.findLastIndex` without\n   * support for iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {number} fromIndex The index to search from.\n   * @param {boolean} [fromRight] Specify iterating from right to left.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseFindIndex(array, predicate, fromIndex, fromRight) {\n    var length = array.length,\n        index = fromIndex + (fromRight ? 1 : -1);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (predicate(array[index], index, array)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseIndexOf(array, value, fromIndex) {\n    return value === value\n      ? strictIndexOf(array, value, fromIndex)\n      : baseFindIndex(array, baseIsNaN, fromIndex);\n  }\n\n  /**\n   * This function is like `baseIndexOf` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseIndexOfWith(array, value, fromIndex, comparator) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (comparator(array[index], value)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * The base implementation of `_.isNaN` without support for number objects.\n   *\n   * @private\n   * @param {*} value The value to check.\n   * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n   */\n  function baseIsNaN(value) {\n    return value !== value;\n  }\n\n  /**\n   * The base implementation of `_.mean` and `_.meanBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the mean.\n   */\n  function baseMean(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n    return length ? (baseSum(array, iteratee) / length) : NAN;\n  }\n\n  /**\n   * The base implementation of `_.property` without support for deep paths.\n   *\n   * @private\n   * @param {string} key The key of the property to get.\n   * @returns {Function} Returns the new accessor function.\n   */\n  function baseProperty(key) {\n    return function(object) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.propertyOf` without support for deep paths.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @returns {Function} Returns the new accessor function.\n   */\n  function basePropertyOf(object) {\n    return function(key) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.reduce` and `_.reduceRight`, without support\n   * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} accumulator The initial value.\n   * @param {boolean} initAccum Specify using the first or last element of\n   *  `collection` as the initial value.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the accumulated value.\n   */\n  function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n    eachFunc(collection, function(value, index, collection) {\n      accumulator = initAccum\n        ? (initAccum = false, value)\n        : iteratee(accumulator, value, index, collection);\n    });\n    return accumulator;\n  }\n\n  /**\n   * The base implementation of `_.sortBy` which uses `comparer` to define the\n   * sort order of `array` and replaces criteria objects with their corresponding\n   * values.\n   *\n   * @private\n   * @param {Array} array The array to sort.\n   * @param {Function} comparer The function to define sort order.\n   * @returns {Array} Returns `array`.\n   */\n  function baseSortBy(array, comparer) {\n    var length = array.length;\n\n    array.sort(comparer);\n    while (length--) {\n      array[length] = array[length].value;\n    }\n    return array;\n  }\n\n  /**\n   * The base implementation of `_.sum` and `_.sumBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the sum.\n   */\n  function baseSum(array, iteratee) {\n    var result,\n        index = -1,\n        length = array.length;\n\n    while (++index < length) {\n      var current = iteratee(array[index]);\n      if (current !== undefined) {\n        result = result === undefined ? current : (result + current);\n      }\n    }\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.times` without support for iteratee shorthands\n   * or max array length checks.\n   *\n   * @private\n   * @param {number} n The number of times to invoke `iteratee`.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the array of results.\n   */\n  function baseTimes(n, iteratee) {\n    var index = -1,\n        result = Array(n);\n\n    while (++index < n) {\n      result[index] = iteratee(index);\n    }\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n   * of key-value pairs for `object` corresponding to the property names of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the key-value pairs.\n   */\n  function baseToPairs(object, props) {\n    return arrayMap(props, function(key) {\n      return [key, object[key]];\n    });\n  }\n\n  /**\n   * The base implementation of `_.unary` without support for storing metadata.\n   *\n   * @private\n   * @param {Function} func The function to cap arguments for.\n   * @returns {Function} Returns the new capped function.\n   */\n  function baseUnary(func) {\n    return function(value) {\n      return func(value);\n    };\n  }\n\n  /**\n   * The base implementation of `_.values` and `_.valuesIn` which creates an\n   * array of `object` property values corresponding to the property names\n   * of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the array of property values.\n   */\n  function baseValues(object, props) {\n    return arrayMap(props, function(key) {\n      return object[key];\n    });\n  }\n\n  /**\n   * Checks if a `cache` value for `key` exists.\n   *\n   * @private\n   * @param {Object} cache The cache to query.\n   * @param {string} key The key of the entry to check.\n   * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n   */\n  function cacheHas(cache, key) {\n    return cache.has(key);\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the first unmatched string symbol.\n   */\n  function charsStartIndex(strSymbols, chrSymbols) {\n    var index = -1,\n        length = strSymbols.length;\n\n    while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the last unmatched string symbol.\n   */\n  function charsEndIndex(strSymbols, chrSymbols) {\n    var index = strSymbols.length;\n\n    while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Gets the number of `placeholder` occurrences in `array`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} placeholder The placeholder to search for.\n   * @returns {number} Returns the placeholder count.\n   */\n  function countHolders(array, placeholder) {\n    var length = array.length,\n        result = 0;\n\n    while (length--) {\n      if (array[length] === placeholder) {\n        ++result;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n   * letters to basic Latin letters.\n   *\n   * @private\n   * @param {string} letter The matched letter to deburr.\n   * @returns {string} Returns the deburred letter.\n   */\n  var deburrLetter = basePropertyOf(deburredLetters);\n\n  /**\n   * Used by `_.escape` to convert characters to HTML entities.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n  /**\n   * Used by `_.template` to escape characters for inclusion in compiled string literals.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  function escapeStringChar(chr) {\n    return '\\\\' + stringEscapes[chr];\n  }\n\n  /**\n   * Gets the value at `key` of `object`.\n   *\n   * @private\n   * @param {Object} [object] The object to query.\n   * @param {string} key The key of the property to get.\n   * @returns {*} Returns the property value.\n   */\n  function getValue(object, key) {\n    return object == null ? undefined : object[key];\n  }\n\n  /**\n   * Checks if `string` contains Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n   */\n  function hasUnicode(string) {\n    return reHasUnicode.test(string);\n  }\n\n  /**\n   * Checks if `string` contains a word composed of Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a word is found, else `false`.\n   */\n  function hasUnicodeWord(string) {\n    return reHasUnicodeWord.test(string);\n  }\n\n  /**\n   * Converts `iterator` to an array.\n   *\n   * @private\n   * @param {Object} iterator The iterator to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function iteratorToArray(iterator) {\n    var data,\n        result = [];\n\n    while (!(data = iterator.next()).done) {\n      result.push(data.value);\n    }\n    return result;\n  }\n\n  /**\n   * Converts `map` to its key-value pairs.\n   *\n   * @private\n   * @param {Object} map The map to convert.\n   * @returns {Array} Returns the key-value pairs.\n   */\n  function mapToArray(map) {\n    var index = -1,\n        result = Array(map.size);\n\n    map.forEach(function(value, key) {\n      result[++index] = [key, value];\n    });\n    return result;\n  }\n\n  /**\n   * Creates a unary function that invokes `func` with its argument transformed.\n   *\n   * @private\n   * @param {Function} func The function to wrap.\n   * @param {Function} transform The argument transform.\n   * @returns {Function} Returns the new function.\n   */\n  function overArg(func, transform) {\n    return function(arg) {\n      return func(transform(arg));\n    };\n  }\n\n  /**\n   * Replaces all `placeholder` elements in `array` with an internal placeholder\n   * and returns an array of their indexes.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {*} placeholder The placeholder to replace.\n   * @returns {Array} Returns the new array of placeholder indexes.\n   */\n  function replaceHolders(array, placeholder) {\n    var index = -1,\n        length = array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (value === placeholder || value === PLACEHOLDER) {\n        array[index] = PLACEHOLDER;\n        result[resIndex++] = index;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Converts `set` to an array of its values.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the values.\n   */\n  function setToArray(set) {\n    var index = -1,\n        result = Array(set.size);\n\n    set.forEach(function(value) {\n      result[++index] = value;\n    });\n    return result;\n  }\n\n  /**\n   * Converts `set` to its value-value pairs.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the value-value pairs.\n   */\n  function setToPairs(set) {\n    var index = -1,\n        result = Array(set.size);\n\n    set.forEach(function(value) {\n      result[++index] = [value, value];\n    });\n    return result;\n  }\n\n  /**\n   * A specialized version of `_.indexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function strictIndexOf(array, value, fromIndex) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * A specialized version of `_.lastIndexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function strictLastIndexOf(array, value, fromIndex) {\n    var index = fromIndex + 1;\n    while (index--) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return index;\n  }\n\n  /**\n   * Gets the number of symbols in `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the string size.\n   */\n  function stringSize(string) {\n    return hasUnicode(string)\n      ? unicodeSize(string)\n      : asciiSize(string);\n  }\n\n  /**\n   * Converts `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function stringToArray(string) {\n    return hasUnicode(string)\n      ? unicodeToArray(string)\n      : asciiToArray(string);\n  }\n\n  /**\n   * Used by `_.unescape` to convert HTML entities to characters.\n   *\n   * @private\n   * @param {string} chr The matched character to unescape.\n   * @returns {string} Returns the unescaped character.\n   */\n  var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n  /**\n   * Gets the size of a Unicode `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  function unicodeSize(string) {\n    var result = reUnicode.lastIndex = 0;\n    while (reUnicode.test(string)) {\n      ++result;\n    }\n    return result;\n  }\n\n  /**\n   * Converts a Unicode `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function unicodeToArray(string) {\n    return string.match(reUnicode) || [];\n  }\n\n  /**\n   * Splits a Unicode `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n  function unicodeWords(string) {\n    return string.match(reUnicodeWord) || [];\n  }\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * Create a new pristine `lodash` function using the `context` object.\n   *\n   * @static\n   * @memberOf _\n   * @since 1.1.0\n   * @category Util\n   * @param {Object} [context=root] The context object.\n   * @returns {Function} Returns a new `lodash` function.\n   * @example\n   *\n   * _.mixin({ 'foo': _.constant('foo') });\n   *\n   * var lodash = _.runInContext();\n   * lodash.mixin({ 'bar': lodash.constant('bar') });\n   *\n   * _.isFunction(_.foo);\n   * // => true\n   * _.isFunction(_.bar);\n   * // => false\n   *\n   * lodash.isFunction(lodash.foo);\n   * // => false\n   * lodash.isFunction(lodash.bar);\n   * // => true\n   *\n   * // Create a suped-up `defer` in Node.js.\n   * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n   */\n  var runInContext = (function runInContext(context) {\n    context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n    /** Built-in constructor references. */\n    var Array = context.Array,\n        Date = context.Date,\n        Error = context.Error,\n        Function = context.Function,\n        Math = context.Math,\n        Object = context.Object,\n        RegExp = context.RegExp,\n        String = context.String,\n        TypeError = context.TypeError;\n\n    /** Used for built-in method references. */\n    var arrayProto = Array.prototype,\n        funcProto = Function.prototype,\n        objectProto = Object.prototype;\n\n    /** Used to detect overreaching core-js shims. */\n    var coreJsData = context['__core-js_shared__'];\n\n    /** Used to resolve the decompiled source of functions. */\n    var funcToString = funcProto.toString;\n\n    /** Used to check objects for own properties. */\n    var hasOwnProperty = objectProto.hasOwnProperty;\n\n    /** Used to generate unique IDs. */\n    var idCounter = 0;\n\n    /** Used to detect methods masquerading as native. */\n    var maskSrcKey = (function() {\n      var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n      return uid ? ('Symbol(src)_1.' + uid) : '';\n    }());\n\n    /**\n     * Used to resolve the\n     * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n     * of values.\n     */\n    var nativeObjectToString = objectProto.toString;\n\n    /** Used to infer the `Object` constructor. */\n    var objectCtorString = funcToString.call(Object);\n\n    /** Used to restore the original `_` reference in `_.noConflict`. */\n    var oldDash = root._;\n\n    /** Used to detect if a method is native. */\n    var reIsNative = RegExp('^' +\n      funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n      .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n    );\n\n    /** Built-in value references. */\n    var Buffer = moduleExports ? context.Buffer : undefined,\n        Symbol = context.Symbol,\n        Uint8Array = context.Uint8Array,\n        allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n        getPrototype = overArg(Object.getPrototypeOf, Object),\n        objectCreate = Object.create,\n        propertyIsEnumerable = objectProto.propertyIsEnumerable,\n        splice = arrayProto.splice,\n        spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n        symIterator = Symbol ? Symbol.iterator : undefined,\n        symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n    var defineProperty = (function() {\n      try {\n        var func = getNative(Object, 'defineProperty');\n        func({}, '', {});\n        return func;\n      } catch (e) {}\n    }());\n\n    /** Mocked built-ins. */\n    var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n        ctxNow = Date && Date.now !== root.Date.now && Date.now,\n        ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n    /* Built-in method references for those with the same name as other `lodash` methods. */\n    var nativeCeil = Math.ceil,\n        nativeFloor = Math.floor,\n        nativeGetSymbols = Object.getOwnPropertySymbols,\n        nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n        nativeIsFinite = context.isFinite,\n        nativeJoin = arrayProto.join,\n        nativeKeys = overArg(Object.keys, Object),\n        nativeMax = Math.max,\n        nativeMin = Math.min,\n        nativeNow = Date.now,\n        nativeParseInt = context.parseInt,\n        nativeRandom = Math.random,\n        nativeReverse = arrayProto.reverse;\n\n    /* Built-in method references that are verified to be native. */\n    var DataView = getNative(context, 'DataView'),\n        Map = getNative(context, 'Map'),\n        Promise = getNative(context, 'Promise'),\n        Set = getNative(context, 'Set'),\n        WeakMap = getNative(context, 'WeakMap'),\n        nativeCreate = getNative(Object, 'create');\n\n    /** Used to store function metadata. */\n    var metaMap = WeakMap && new WeakMap;\n\n    /** Used to lookup unminified function names. */\n    var realNames = {};\n\n    /** Used to detect maps, sets, and weakmaps. */\n    var dataViewCtorString = toSource(DataView),\n        mapCtorString = toSource(Map),\n        promiseCtorString = toSource(Promise),\n        setCtorString = toSource(Set),\n        weakMapCtorString = toSource(WeakMap);\n\n    /** Used to convert symbols to primitives and strings. */\n    var symbolProto = Symbol ? Symbol.prototype : undefined,\n        symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n        symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` object which wraps `value` to enable implicit method\n     * chain sequences. Methods that operate on and return arrays, collections,\n     * and functions can be chained together. Methods that retrieve a single value\n     * or may return a primitive value will automatically end the chain sequence\n     * and return the unwrapped value. Otherwise, the value must be unwrapped\n     * with `_#value`.\n     *\n     * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n     * enabled using `_.chain`.\n     *\n     * The execution of chained methods is lazy, that is, it's deferred until\n     * `_#value` is implicitly or explicitly called.\n     *\n     * Lazy evaluation allows several methods to support shortcut fusion.\n     * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n     * the creation of intermediate arrays and can greatly reduce the number of\n     * iteratee executions. Sections of a chain sequence qualify for shortcut\n     * fusion if the section is applied to an array and iteratees accept only\n     * one argument. The heuristic for whether a section qualifies for shortcut\n     * fusion is subject to change.\n     *\n     * Chaining is supported in custom builds as long as the `_#value` method is\n     * directly or indirectly included in the build.\n     *\n     * In addition to lodash methods, wrappers have `Array` and `String` methods.\n     *\n     * The wrapper `Array` methods are:\n     * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n     *\n     * The wrapper `String` methods are:\n     * `replace` and `split`\n     *\n     * The wrapper methods that support shortcut fusion are:\n     * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n     * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n     * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n     *\n     * The chainable wrapper methods are:\n     * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n     * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n     * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n     * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n     * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n     * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n     * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n     * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n     * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n     * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n     * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n     * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n     * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n     * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n     * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n     * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n     * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n     * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n     * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n     * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n     * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n     * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n     * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n     * `zipObject`, `zipObjectDeep`, and `zipWith`\n     *\n     * The wrapper methods that are **not** chainable by default are:\n     * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n     * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n     * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n     * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n     * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n     * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n     * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n     * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n     * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n     * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n     * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n     * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n     * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n     * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n     * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n     * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n     * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n     * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n     * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n     * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n     * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n     * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n     * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n     * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n     * `upperFirst`, `value`, and `words`\n     *\n     * @name _\n     * @constructor\n     * @category Seq\n     * @param {*} value The value to wrap in a `lodash` instance.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2, 3]);\n     *\n     * // Returns an unwrapped value.\n     * wrapped.reduce(_.add);\n     * // => 6\n     *\n     * // Returns a wrapped value.\n     * var squares = wrapped.map(square);\n     *\n     * _.isArray(squares);\n     * // => false\n     *\n     * _.isArray(squares.value());\n     * // => true\n     */\n    function lodash(value) {\n      if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n        if (value instanceof LodashWrapper) {\n          return value;\n        }\n        if (hasOwnProperty.call(value, '__wrapped__')) {\n          return wrapperClone(value);\n        }\n      }\n      return new LodashWrapper(value);\n    }\n\n    /**\n     * The base implementation of `_.create` without support for assigning\n     * properties to the created object.\n     *\n     * @private\n     * @param {Object} proto The object to inherit from.\n     * @returns {Object} Returns the new object.\n     */\n    var baseCreate = (function() {\n      function object() {}\n      return function(proto) {\n        if (!isObject(proto)) {\n          return {};\n        }\n        if (objectCreate) {\n          return objectCreate(proto);\n        }\n        object.prototype = proto;\n        var result = new object;\n        object.prototype = undefined;\n        return result;\n      };\n    }());\n\n    /**\n     * The function whose prototype chain sequence wrappers inherit from.\n     *\n     * @private\n     */\n    function baseLodash() {\n      // No operation performed.\n    }\n\n    /**\n     * The base constructor for creating `lodash` wrapper objects.\n     *\n     * @private\n     * @param {*} value The value to wrap.\n     * @param {boolean} [chainAll] Enable explicit method chain sequences.\n     */\n    function LodashWrapper(value, chainAll) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__chain__ = !!chainAll;\n      this.__index__ = 0;\n      this.__values__ = undefined;\n    }\n\n    /**\n     * By default, the template delimiters used by lodash are like those in\n     * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n     * following template settings to use alternative delimiters.\n     *\n     * @static\n     * @memberOf _\n     * @type {Object}\n     */\n    lodash.templateSettings = {\n\n      /**\n       * Used to detect `data` property values to be HTML-escaped.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'escape': reEscape,\n\n      /**\n       * Used to detect code to be evaluated.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'evaluate': reEvaluate,\n\n      /**\n       * Used to detect `data` property values to inject.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'interpolate': reInterpolate,\n\n      /**\n       * Used to reference the data object in the template text.\n       *\n       * @memberOf _.templateSettings\n       * @type {string}\n       */\n      'variable': '',\n\n      /**\n       * Used to import variables into the compiled template.\n       *\n       * @memberOf _.templateSettings\n       * @type {Object}\n       */\n      'imports': {\n\n        /**\n         * A reference to the `lodash` function.\n         *\n         * @memberOf _.templateSettings.imports\n         * @type {Function}\n         */\n        '_': lodash\n      }\n    };\n\n    // Ensure wrappers are instances of `baseLodash`.\n    lodash.prototype = baseLodash.prototype;\n    lodash.prototype.constructor = lodash;\n\n    LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n    LodashWrapper.prototype.constructor = LodashWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n     *\n     * @private\n     * @constructor\n     * @param {*} value The value to wrap.\n     */\n    function LazyWrapper(value) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__dir__ = 1;\n      this.__filtered__ = false;\n      this.__iteratees__ = [];\n      this.__takeCount__ = MAX_ARRAY_LENGTH;\n      this.__views__ = [];\n    }\n\n    /**\n     * Creates a clone of the lazy wrapper object.\n     *\n     * @private\n     * @name clone\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the cloned `LazyWrapper` object.\n     */\n    function lazyClone() {\n      var result = new LazyWrapper(this.__wrapped__);\n      result.__actions__ = copyArray(this.__actions__);\n      result.__dir__ = this.__dir__;\n      result.__filtered__ = this.__filtered__;\n      result.__iteratees__ = copyArray(this.__iteratees__);\n      result.__takeCount__ = this.__takeCount__;\n      result.__views__ = copyArray(this.__views__);\n      return result;\n    }\n\n    /**\n     * Reverses the direction of lazy iteration.\n     *\n     * @private\n     * @name reverse\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the new reversed `LazyWrapper` object.\n     */\n    function lazyReverse() {\n      if (this.__filtered__) {\n        var result = new LazyWrapper(this);\n        result.__dir__ = -1;\n        result.__filtered__ = true;\n      } else {\n        result = this.clone();\n        result.__dir__ *= -1;\n      }\n      return result;\n    }\n\n    /**\n     * Extracts the unwrapped value from its lazy wrapper.\n     *\n     * @private\n     * @name value\n     * @memberOf LazyWrapper\n     * @returns {*} Returns the unwrapped value.\n     */\n    function lazyValue() {\n      var array = this.__wrapped__.value(),\n          dir = this.__dir__,\n          isArr = isArray(array),\n          isRight = dir < 0,\n          arrLength = isArr ? array.length : 0,\n          view = getView(0, arrLength, this.__views__),\n          start = view.start,\n          end = view.end,\n          length = end - start,\n          index = isRight ? end : (start - 1),\n          iteratees = this.__iteratees__,\n          iterLength = iteratees.length,\n          resIndex = 0,\n          takeCount = nativeMin(length, this.__takeCount__);\n\n      if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n        return baseWrapperValue(array, this.__actions__);\n      }\n      var result = [];\n\n      outer:\n      while (length-- && resIndex < takeCount) {\n        index += dir;\n\n        var iterIndex = -1,\n            value = array[index];\n\n        while (++iterIndex < iterLength) {\n          var data = iteratees[iterIndex],\n              iteratee = data.iteratee,\n              type = data.type,\n              computed = iteratee(value);\n\n          if (type == LAZY_MAP_FLAG) {\n            value = computed;\n          } else if (!computed) {\n            if (type == LAZY_FILTER_FLAG) {\n              continue outer;\n            } else {\n              break outer;\n            }\n          }\n        }\n        result[resIndex++] = value;\n      }\n      return result;\n    }\n\n    // Ensure `LazyWrapper` is an instance of `baseLodash`.\n    LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n    LazyWrapper.prototype.constructor = LazyWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a hash object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function Hash(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the hash.\n     *\n     * @private\n     * @name clear\n     * @memberOf Hash\n     */\n    function hashClear() {\n      this.__data__ = nativeCreate ? nativeCreate(null) : {};\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the hash.\n     *\n     * @private\n     * @name delete\n     * @memberOf Hash\n     * @param {Object} hash The hash to modify.\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function hashDelete(key) {\n      var result = this.has(key) && delete this.__data__[key];\n      this.size -= result ? 1 : 0;\n      return result;\n    }\n\n    /**\n     * Gets the hash value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Hash\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function hashGet(key) {\n      var data = this.__data__;\n      if (nativeCreate) {\n        var result = data[key];\n        return result === HASH_UNDEFINED ? undefined : result;\n      }\n      return hasOwnProperty.call(data, key) ? data[key] : undefined;\n    }\n\n    /**\n     * Checks if a hash value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Hash\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function hashHas(key) {\n      var data = this.__data__;\n      return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n    }\n\n    /**\n     * Sets the hash `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Hash\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the hash instance.\n     */\n    function hashSet(key, value) {\n      var data = this.__data__;\n      this.size += this.has(key) ? 0 : 1;\n      data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n      return this;\n    }\n\n    // Add methods to `Hash`.\n    Hash.prototype.clear = hashClear;\n    Hash.prototype['delete'] = hashDelete;\n    Hash.prototype.get = hashGet;\n    Hash.prototype.has = hashHas;\n    Hash.prototype.set = hashSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an list cache object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function ListCache(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the list cache.\n     *\n     * @private\n     * @name clear\n     * @memberOf ListCache\n     */\n    function listCacheClear() {\n      this.__data__ = [];\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the list cache.\n     *\n     * @private\n     * @name delete\n     * @memberOf ListCache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function listCacheDelete(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      if (index < 0) {\n        return false;\n      }\n      var lastIndex = data.length - 1;\n      if (index == lastIndex) {\n        data.pop();\n      } else {\n        splice.call(data, index, 1);\n      }\n      --this.size;\n      return true;\n    }\n\n    /**\n     * Gets the list cache value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf ListCache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function listCacheGet(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      return index < 0 ? undefined : data[index][1];\n    }\n\n    /**\n     * Checks if a list cache value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf ListCache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function listCacheHas(key) {\n      return assocIndexOf(this.__data__, key) > -1;\n    }\n\n    /**\n     * Sets the list cache `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf ListCache\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the list cache instance.\n     */\n    function listCacheSet(key, value) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      if (index < 0) {\n        ++this.size;\n        data.push([key, value]);\n      } else {\n        data[index][1] = value;\n      }\n      return this;\n    }\n\n    // Add methods to `ListCache`.\n    ListCache.prototype.clear = listCacheClear;\n    ListCache.prototype['delete'] = listCacheDelete;\n    ListCache.prototype.get = listCacheGet;\n    ListCache.prototype.has = listCacheHas;\n    ListCache.prototype.set = listCacheSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a map cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function MapCache(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the map.\n     *\n     * @private\n     * @name clear\n     * @memberOf MapCache\n     */\n    function mapCacheClear() {\n      this.size = 0;\n      this.__data__ = {\n        'hash': new Hash,\n        'map': new (Map || ListCache),\n        'string': new Hash\n      };\n    }\n\n    /**\n     * Removes `key` and its value from the map.\n     *\n     * @private\n     * @name delete\n     * @memberOf MapCache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function mapCacheDelete(key) {\n      var result = getMapData(this, key)['delete'](key);\n      this.size -= result ? 1 : 0;\n      return result;\n    }\n\n    /**\n     * Gets the map value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf MapCache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function mapCacheGet(key) {\n      return getMapData(this, key).get(key);\n    }\n\n    /**\n     * Checks if a map value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf MapCache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function mapCacheHas(key) {\n      return getMapData(this, key).has(key);\n    }\n\n    /**\n     * Sets the map `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf MapCache\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the map cache instance.\n     */\n    function mapCacheSet(key, value) {\n      var data = getMapData(this, key),\n          size = data.size;\n\n      data.set(key, value);\n      this.size += data.size == size ? 0 : 1;\n      return this;\n    }\n\n    // Add methods to `MapCache`.\n    MapCache.prototype.clear = mapCacheClear;\n    MapCache.prototype['delete'] = mapCacheDelete;\n    MapCache.prototype.get = mapCacheGet;\n    MapCache.prototype.has = mapCacheHas;\n    MapCache.prototype.set = mapCacheSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     *\n     * Creates an array cache object to store unique values.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [values] The values to cache.\n     */\n    function SetCache(values) {\n      var index = -1,\n          length = values == null ? 0 : values.length;\n\n      this.__data__ = new MapCache;\n      while (++index < length) {\n        this.add(values[index]);\n      }\n    }\n\n    /**\n     * Adds `value` to the array cache.\n     *\n     * @private\n     * @name add\n     * @memberOf SetCache\n     * @alias push\n     * @param {*} value The value to cache.\n     * @returns {Object} Returns the cache instance.\n     */\n    function setCacheAdd(value) {\n      this.__data__.set(value, HASH_UNDEFINED);\n      return this;\n    }\n\n    /**\n     * Checks if `value` is in the array cache.\n     *\n     * @private\n     * @name has\n     * @memberOf SetCache\n     * @param {*} value The value to search for.\n     * @returns {number} Returns `true` if `value` is found, else `false`.\n     */\n    function setCacheHas(value) {\n      return this.__data__.has(value);\n    }\n\n    // Add methods to `SetCache`.\n    SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n    SetCache.prototype.has = setCacheHas;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a stack cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function Stack(entries) {\n      var data = this.__data__ = new ListCache(entries);\n      this.size = data.size;\n    }\n\n    /**\n     * Removes all key-value entries from the stack.\n     *\n     * @private\n     * @name clear\n     * @memberOf Stack\n     */\n    function stackClear() {\n      this.__data__ = new ListCache;\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the stack.\n     *\n     * @private\n     * @name delete\n     * @memberOf Stack\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function stackDelete(key) {\n      var data = this.__data__,\n          result = data['delete'](key);\n\n      this.size = data.size;\n      return result;\n    }\n\n    /**\n     * Gets the stack value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Stack\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function stackGet(key) {\n      return this.__data__.get(key);\n    }\n\n    /**\n     * Checks if a stack value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Stack\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function stackHas(key) {\n      return this.__data__.has(key);\n    }\n\n    /**\n     * Sets the stack `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Stack\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the stack cache instance.\n     */\n    function stackSet(key, value) {\n      var data = this.__data__;\n      if (data instanceof ListCache) {\n        var pairs = data.__data__;\n        if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n          pairs.push([key, value]);\n          this.size = ++data.size;\n          return this;\n        }\n        data = this.__data__ = new MapCache(pairs);\n      }\n      data.set(key, value);\n      this.size = data.size;\n      return this;\n    }\n\n    // Add methods to `Stack`.\n    Stack.prototype.clear = stackClear;\n    Stack.prototype['delete'] = stackDelete;\n    Stack.prototype.get = stackGet;\n    Stack.prototype.has = stackHas;\n    Stack.prototype.set = stackSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of the enumerable property names of the array-like `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @param {boolean} inherited Specify returning inherited property names.\n     * @returns {Array} Returns the array of property names.\n     */\n    function arrayLikeKeys(value, inherited) {\n      var isArr = isArray(value),\n          isArg = !isArr && isArguments(value),\n          isBuff = !isArr && !isArg && isBuffer(value),\n          isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n          skipIndexes = isArr || isArg || isBuff || isType,\n          result = skipIndexes ? baseTimes(value.length, String) : [],\n          length = result.length;\n\n      for (var key in value) {\n        if ((inherited || hasOwnProperty.call(value, key)) &&\n            !(skipIndexes && (\n               // Safari 9 has enumerable `arguments.length` in strict mode.\n               key == 'length' ||\n               // Node.js 0.10 has enumerable non-index properties on buffers.\n               (isBuff && (key == 'offset' || key == 'parent')) ||\n               // PhantomJS 2 has enumerable non-index properties on typed arrays.\n               (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n               // Skip index properties.\n               isIndex(key, length)\n            ))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `_.sample` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @returns {*} Returns the random element.\n     */\n    function arraySample(array) {\n      var length = array.length;\n      return length ? array[baseRandom(0, length - 1)] : undefined;\n    }\n\n    /**\n     * A specialized version of `_.sampleSize` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function arraySampleSize(array, n) {\n      return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * A specialized version of `_.shuffle` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function arrayShuffle(array) {\n      return shuffleSelf(copyArray(array));\n    }\n\n    /**\n     * This function is like `assignValue` except that it doesn't assign\n     * `undefined` values.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function assignMergeValue(object, key, value) {\n      if ((value !== undefined && !eq(object[key], value)) ||\n          (value === undefined && !(key in object))) {\n        baseAssignValue(object, key, value);\n      }\n    }\n\n    /**\n     * Assigns `value` to `key` of `object` if the existing value is not equivalent\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function assignValue(object, key, value) {\n      var objValue = object[key];\n      if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n          (value === undefined && !(key in object))) {\n        baseAssignValue(object, key, value);\n      }\n    }\n\n    /**\n     * Gets the index at which the `key` is found in `array` of key-value pairs.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {*} key The key to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     */\n    function assocIndexOf(array, key) {\n      var length = array.length;\n      while (length--) {\n        if (eq(array[length][0], key)) {\n          return length;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * Aggregates elements of `collection` on `accumulator` with keys transformed\n     * by `iteratee` and values set by `setter`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform keys.\n     * @param {Object} accumulator The initial aggregated object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseAggregator(collection, setter, iteratee, accumulator) {\n      baseEach(collection, function(value, key, collection) {\n        setter(accumulator, value, iteratee(value), collection);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.assign` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssign(object, source) {\n      return object && copyObject(source, keys(source), object);\n    }\n\n    /**\n     * The base implementation of `_.assignIn` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssignIn(object, source) {\n      return object && copyObject(source, keysIn(source), object);\n    }\n\n    /**\n     * The base implementation of `assignValue` and `assignMergeValue` without\n     * value checks.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function baseAssignValue(object, key, value) {\n      if (key == '__proto__' && defineProperty) {\n        defineProperty(object, key, {\n          'configurable': true,\n          'enumerable': true,\n          'value': value,\n          'writable': true\n        });\n      } else {\n        object[key] = value;\n      }\n    }\n\n    /**\n     * The base implementation of `_.at` without support for individual paths.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Array} Returns the picked elements.\n     */\n    function baseAt(object, paths) {\n      var index = -1,\n          length = paths.length,\n          result = Array(length),\n          skip = object == null;\n\n      while (++index < length) {\n        result[index] = skip ? undefined : get(object, paths[index]);\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.clamp` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     */\n    function baseClamp(number, lower, upper) {\n      if (number === number) {\n        if (upper !== undefined) {\n          number = number <= upper ? number : upper;\n        }\n        if (lower !== undefined) {\n          number = number >= lower ? number : lower;\n        }\n      }\n      return number;\n    }\n\n    /**\n     * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n     * traversed objects.\n     *\n     * @private\n     * @param {*} value The value to clone.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Deep clone\n     *  2 - Flatten inherited properties\n     *  4 - Clone symbols\n     * @param {Function} [customizer] The function to customize cloning.\n     * @param {string} [key] The key of `value`.\n     * @param {Object} [object] The parent object of `value`.\n     * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n     * @returns {*} Returns the cloned value.\n     */\n    function baseClone(value, bitmask, customizer, key, object, stack) {\n      var result,\n          isDeep = bitmask & CLONE_DEEP_FLAG,\n          isFlat = bitmask & CLONE_FLAT_FLAG,\n          isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n      if (customizer) {\n        result = object ? customizer(value, key, object, stack) : customizer(value);\n      }\n      if (result !== undefined) {\n        return result;\n      }\n      if (!isObject(value)) {\n        return value;\n      }\n      var isArr = isArray(value);\n      if (isArr) {\n        result = initCloneArray(value);\n        if (!isDeep) {\n          return copyArray(value, result);\n        }\n      } else {\n        var tag = getTag(value),\n            isFunc = tag == funcTag || tag == genTag;\n\n        if (isBuffer(value)) {\n          return cloneBuffer(value, isDeep);\n        }\n        if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n          result = (isFlat || isFunc) ? {} : initCloneObject(value);\n          if (!isDeep) {\n            return isFlat\n              ? copySymbolsIn(value, baseAssignIn(result, value))\n              : copySymbols(value, baseAssign(result, value));\n          }\n        } else {\n          if (!cloneableTags[tag]) {\n            return object ? value : {};\n          }\n          result = initCloneByTag(value, tag, isDeep);\n        }\n      }\n      // Check for circular references and return its corresponding clone.\n      stack || (stack = new Stack);\n      var stacked = stack.get(value);\n      if (stacked) {\n        return stacked;\n      }\n      stack.set(value, result);\n\n      if (isSet(value)) {\n        value.forEach(function(subValue) {\n          result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n        });\n      } else if (isMap(value)) {\n        value.forEach(function(subValue, key) {\n          result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n        });\n      }\n\n      var keysFunc = isFull\n        ? (isFlat ? getAllKeysIn : getAllKeys)\n        : (isFlat ? keysIn : keys);\n\n      var props = isArr ? undefined : keysFunc(value);\n      arrayEach(props || value, function(subValue, key) {\n        if (props) {\n          key = subValue;\n          subValue = value[key];\n        }\n        // Recursively populate clone (susceptible to call stack limits).\n        assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.conforms` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseConforms(source) {\n      var props = keys(source);\n      return function(object) {\n        return baseConformsTo(object, source, props);\n      };\n    }\n\n    /**\n     * The base implementation of `_.conformsTo` which accepts `props` to check.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     */\n    function baseConformsTo(object, source, props) {\n      var length = props.length;\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (length--) {\n        var key = props[length],\n            predicate = source[key],\n            value = object[key];\n\n        if ((value === undefined && !(key in object)) || !predicate(value)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * The base implementation of `_.delay` and `_.defer` which accepts `args`\n     * to provide to `func`.\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {Array} args The arguments to provide to `func`.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    function baseDelay(func, wait, args) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return setTimeout(function() { func.apply(undefined, args); }, wait);\n    }\n\n    /**\n     * The base implementation of methods like `_.difference` without support\n     * for excluding multiple arrays or iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Array} values The values to exclude.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     */\n    function baseDifference(array, values, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          isCommon = true,\n          length = array.length,\n          result = [],\n          valuesLength = values.length;\n\n      if (!length) {\n        return result;\n      }\n      if (iteratee) {\n        values = arrayMap(values, baseUnary(iteratee));\n      }\n      if (comparator) {\n        includes = arrayIncludesWith;\n        isCommon = false;\n      }\n      else if (values.length >= LARGE_ARRAY_SIZE) {\n        includes = cacheHas;\n        isCommon = false;\n        values = new SetCache(values);\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee == null ? value : iteratee(value);\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (isCommon && computed === computed) {\n          var valuesIndex = valuesLength;\n          while (valuesIndex--) {\n            if (values[valuesIndex] === computed) {\n              continue outer;\n            }\n          }\n          result.push(value);\n        }\n        else if (!includes(values, computed, comparator)) {\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.forEach` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n    var baseEach = createBaseEach(baseForOwn);\n\n    /**\n     * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n    var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n    /**\n     * The base implementation of `_.every` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`\n     */\n    function baseEvery(collection, predicate) {\n      var result = true;\n      baseEach(collection, function(value, index, collection) {\n        result = !!predicate(value, index, collection);\n        return result;\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of methods like `_.max` and `_.min` which accepts a\n     * `comparator` to determine the extremum value.\n     *\n     * @private\n     * @param {Array} array The array to iterate over.\n     * @param {Function} iteratee The iteratee invoked per iteration.\n     * @param {Function} comparator The comparator used to compare values.\n     * @returns {*} Returns the extremum value.\n     */\n    function baseExtremum(array, iteratee, comparator) {\n      var index = -1,\n          length = array.length;\n\n      while (++index < length) {\n        var value = array[index],\n            current = iteratee(value);\n\n        if (current != null && (computed === undefined\n              ? (current === current && !isSymbol(current))\n              : comparator(current, computed)\n            )) {\n          var computed = current,\n              result = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.fill` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     */\n    function baseFill(array, value, start, end) {\n      var length = array.length;\n\n      start = toInteger(start);\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = (end === undefined || end > length) ? length : toInteger(end);\n      if (end < 0) {\n        end += length;\n      }\n      end = start > end ? 0 : toLength(end);\n      while (start < end) {\n        array[start++] = value;\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.filter` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     */\n    function baseFilter(collection, predicate) {\n      var result = [];\n      baseEach(collection, function(value, index, collection) {\n        if (predicate(value, index, collection)) {\n          result.push(value);\n        }\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.flatten` with support for restricting flattening.\n     *\n     * @private\n     * @param {Array} array The array to flatten.\n     * @param {number} depth The maximum recursion depth.\n     * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n     * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n     * @param {Array} [result=[]] The initial result value.\n     * @returns {Array} Returns the new flattened array.\n     */\n    function baseFlatten(array, depth, predicate, isStrict, result) {\n      var index = -1,\n          length = array.length;\n\n      predicate || (predicate = isFlattenable);\n      result || (result = []);\n\n      while (++index < length) {\n        var value = array[index];\n        if (depth > 0 && predicate(value)) {\n          if (depth > 1) {\n            // Recursively flatten arrays (susceptible to call stack limits).\n            baseFlatten(value, depth - 1, predicate, isStrict, result);\n          } else {\n            arrayPush(result, value);\n          }\n        } else if (!isStrict) {\n          result[result.length] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `baseForOwn` which iterates over `object`\n     * properties returned by `keysFunc` and invokes `iteratee` for each property.\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseFor = createBaseFor();\n\n    /**\n     * This function is like `baseFor` except that it iterates over properties\n     * in the opposite order.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseForRight = createBaseFor(true);\n\n    /**\n     * The base implementation of `_.forOwn` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwn(object, iteratee) {\n      return object && baseFor(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwnRight(object, iteratee) {\n      return object && baseForRight(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.functions` which creates an array of\n     * `object` function property names filtered from `props`.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Array} props The property names to filter.\n     * @returns {Array} Returns the function names.\n     */\n    function baseFunctions(object, props) {\n      return arrayFilter(props, function(key) {\n        return isFunction(object[key]);\n      });\n    }\n\n    /**\n     * The base implementation of `_.get` without support for default values.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseGet(object, path) {\n      path = castPath(path, object);\n\n      var index = 0,\n          length = path.length;\n\n      while (object != null && index < length) {\n        object = object[toKey(path[index++])];\n      }\n      return (index && index == length) ? object : undefined;\n    }\n\n    /**\n     * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n     * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @param {Function} symbolsFunc The function to get the symbols of `object`.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n      var result = keysFunc(object);\n      return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n    }\n\n    /**\n     * The base implementation of `getTag` without fallbacks for buggy environments.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */\n    function baseGetTag(value) {\n      if (value == null) {\n        return value === undefined ? undefinedTag : nullTag;\n      }\n      return (symToStringTag && symToStringTag in Object(value))\n        ? getRawTag(value)\n        : objectToString(value);\n    }\n\n    /**\n     * The base implementation of `_.gt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     */\n    function baseGt(value, other) {\n      return value > other;\n    }\n\n    /**\n     * The base implementation of `_.has` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n    function baseHas(object, key) {\n      return object != null && hasOwnProperty.call(object, key);\n    }\n\n    /**\n     * The base implementation of `_.hasIn` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n    function baseHasIn(object, key) {\n      return object != null && key in Object(object);\n    }\n\n    /**\n     * The base implementation of `_.inRange` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to check.\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     */\n    function baseInRange(number, start, end) {\n      return number >= nativeMin(start, end) && number < nativeMax(start, end);\n    }\n\n    /**\n     * The base implementation of methods like `_.intersection`, without support\n     * for iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of shared values.\n     */\n    function baseIntersection(arrays, iteratee, comparator) {\n      var includes = comparator ? arrayIncludesWith : arrayIncludes,\n          length = arrays[0].length,\n          othLength = arrays.length,\n          othIndex = othLength,\n          caches = Array(othLength),\n          maxLength = Infinity,\n          result = [];\n\n      while (othIndex--) {\n        var array = arrays[othIndex];\n        if (othIndex && iteratee) {\n          array = arrayMap(array, baseUnary(iteratee));\n        }\n        maxLength = nativeMin(array.length, maxLength);\n        caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n          ? new SetCache(othIndex && array)\n          : undefined;\n      }\n      array = arrays[0];\n\n      var index = -1,\n          seen = caches[0];\n\n      outer:\n      while (++index < length && result.length < maxLength) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (!(seen\n              ? cacheHas(seen, computed)\n              : includes(result, computed, comparator)\n            )) {\n          othIndex = othLength;\n          while (--othIndex) {\n            var cache = caches[othIndex];\n            if (!(cache\n                  ? cacheHas(cache, computed)\n                  : includes(arrays[othIndex], computed, comparator))\n                ) {\n              continue outer;\n            }\n          }\n          if (seen) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.invert` and `_.invertBy` which inverts\n     * `object` with values transformed by `iteratee` and set by `setter`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform values.\n     * @param {Object} accumulator The initial inverted object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseInverter(object, setter, iteratee, accumulator) {\n      baseForOwn(object, function(value, key, object) {\n        setter(accumulator, iteratee(value), key, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.invoke` without support for individual\n     * method arguments.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {Array} args The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     */\n    function baseInvoke(object, path, args) {\n      path = castPath(path, object);\n      object = parent(object, path);\n      var func = object == null ? object : object[toKey(last(path))];\n      return func == null ? undefined : apply(func, object, args);\n    }\n\n    /**\n     * The base implementation of `_.isArguments`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     */\n    function baseIsArguments(value) {\n      return isObjectLike(value) && baseGetTag(value) == argsTag;\n    }\n\n    /**\n     * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     */\n    function baseIsArrayBuffer(value) {\n      return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n    }\n\n    /**\n     * The base implementation of `_.isDate` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     */\n    function baseIsDate(value) {\n      return isObjectLike(value) && baseGetTag(value) == dateTag;\n    }\n\n    /**\n     * The base implementation of `_.isEqual` which supports partial comparisons\n     * and tracks traversed objects.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Unordered comparison\n     *  2 - Partial comparison\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     */\n    function baseIsEqual(value, other, bitmask, customizer, stack) {\n      if (value === other) {\n        return true;\n      }\n      if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n        return value !== value && other !== other;\n      }\n      return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n    }\n\n    /**\n     * A specialized version of `baseIsEqual` for arrays and objects which performs\n     * deep comparisons and tracks traversed objects enabling objects with circular\n     * references to be compared.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n      var objIsArr = isArray(object),\n          othIsArr = isArray(other),\n          objTag = objIsArr ? arrayTag : getTag(object),\n          othTag = othIsArr ? arrayTag : getTag(other);\n\n      objTag = objTag == argsTag ? objectTag : objTag;\n      othTag = othTag == argsTag ? objectTag : othTag;\n\n      var objIsObj = objTag == objectTag,\n          othIsObj = othTag == objectTag,\n          isSameTag = objTag == othTag;\n\n      if (isSameTag && isBuffer(object)) {\n        if (!isBuffer(other)) {\n          return false;\n        }\n        objIsArr = true;\n        objIsObj = false;\n      }\n      if (isSameTag && !objIsObj) {\n        stack || (stack = new Stack);\n        return (objIsArr || isTypedArray(object))\n          ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n          : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n      }\n      if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n        if (objIsWrapped || othIsWrapped) {\n          var objUnwrapped = objIsWrapped ? object.value() : object,\n              othUnwrapped = othIsWrapped ? other.value() : other;\n\n          stack || (stack = new Stack);\n          return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n        }\n      }\n      if (!isSameTag) {\n        return false;\n      }\n      stack || (stack = new Stack);\n      return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n    }\n\n    /**\n     * The base implementation of `_.isMap` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     */\n    function baseIsMap(value) {\n      return isObjectLike(value) && getTag(value) == mapTag;\n    }\n\n    /**\n     * The base implementation of `_.isMatch` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Array} matchData The property names, values, and compare flags to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     */\n    function baseIsMatch(object, source, matchData, customizer) {\n      var index = matchData.length,\n          length = index,\n          noCustomizer = !customizer;\n\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (index--) {\n        var data = matchData[index];\n        if ((noCustomizer && data[2])\n              ? data[1] !== object[data[0]]\n              : !(data[0] in object)\n            ) {\n          return false;\n        }\n      }\n      while (++index < length) {\n        data = matchData[index];\n        var key = data[0],\n            objValue = object[key],\n            srcValue = data[1];\n\n        if (noCustomizer && data[2]) {\n          if (objValue === undefined && !(key in object)) {\n            return false;\n          }\n        } else {\n          var stack = new Stack;\n          if (customizer) {\n            var result = customizer(objValue, srcValue, key, object, source, stack);\n          }\n          if (!(result === undefined\n                ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n                : result\n              )) {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n\n    /**\n     * The base implementation of `_.isNative` without bad shim checks.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     */\n    function baseIsNative(value) {\n      if (!isObject(value) || isMasked(value)) {\n        return false;\n      }\n      var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n      return pattern.test(toSource(value));\n    }\n\n    /**\n     * The base implementation of `_.isRegExp` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     */\n    function baseIsRegExp(value) {\n      return isObjectLike(value) && baseGetTag(value) == regexpTag;\n    }\n\n    /**\n     * The base implementation of `_.isSet` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     */\n    function baseIsSet(value) {\n      return isObjectLike(value) && getTag(value) == setTag;\n    }\n\n    /**\n     * The base implementation of `_.isTypedArray` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     */\n    function baseIsTypedArray(value) {\n      return isObjectLike(value) &&\n        isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n    }\n\n    /**\n     * The base implementation of `_.iteratee`.\n     *\n     * @private\n     * @param {*} [value=_.identity] The value to convert to an iteratee.\n     * @returns {Function} Returns the iteratee.\n     */\n    function baseIteratee(value) {\n      // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n      // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n      if (typeof value == 'function') {\n        return value;\n      }\n      if (value == null) {\n        return identity;\n      }\n      if (typeof value == 'object') {\n        return isArray(value)\n          ? baseMatchesProperty(value[0], value[1])\n          : baseMatches(value);\n      }\n      return property(value);\n    }\n\n    /**\n     * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function baseKeys(object) {\n      if (!isPrototype(object)) {\n        return nativeKeys(object);\n      }\n      var result = [];\n      for (var key in Object(object)) {\n        if (hasOwnProperty.call(object, key) && key != 'constructor') {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function baseKeysIn(object) {\n      if (!isObject(object)) {\n        return nativeKeysIn(object);\n      }\n      var isProto = isPrototype(object),\n          result = [];\n\n      for (var key in object) {\n        if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.lt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     */\n    function baseLt(value, other) {\n      return value < other;\n    }\n\n    /**\n     * The base implementation of `_.map` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     */\n    function baseMap(collection, iteratee) {\n      var index = -1,\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value, key, collection) {\n        result[++index] = iteratee(value, key, collection);\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.matches` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseMatches(source) {\n      var matchData = getMatchData(source);\n      if (matchData.length == 1 && matchData[0][2]) {\n        return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n      }\n      return function(object) {\n        return object === source || baseIsMatch(object, source, matchData);\n      };\n    }\n\n    /**\n     * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n     *\n     * @private\n     * @param {string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseMatchesProperty(path, srcValue) {\n      if (isKey(path) && isStrictComparable(srcValue)) {\n        return matchesStrictComparable(toKey(path), srcValue);\n      }\n      return function(object) {\n        var objValue = get(object, path);\n        return (objValue === undefined && objValue === srcValue)\n          ? hasIn(object, path)\n          : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n      };\n    }\n\n    /**\n     * The base implementation of `_.merge` without support for multiple sources.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} [customizer] The function to customize merged values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n    function baseMerge(object, source, srcIndex, customizer, stack) {\n      if (object === source) {\n        return;\n      }\n      baseFor(source, function(srcValue, key) {\n        stack || (stack = new Stack);\n        if (isObject(srcValue)) {\n          baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n        }\n        else {\n          var newValue = customizer\n            ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n            : undefined;\n\n          if (newValue === undefined) {\n            newValue = srcValue;\n          }\n          assignMergeValue(object, key, newValue);\n        }\n      }, keysIn);\n    }\n\n    /**\n     * A specialized version of `baseMerge` for arrays and objects which performs\n     * deep merges and tracks traversed objects enabling objects with circular\n     * references to be merged.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {string} key The key of the value to merge.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} mergeFunc The function to merge values.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n    function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n      var objValue = safeGet(object, key),\n          srcValue = safeGet(source, key),\n          stacked = stack.get(srcValue);\n\n      if (stacked) {\n        assignMergeValue(object, key, stacked);\n        return;\n      }\n      var newValue = customizer\n        ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n        : undefined;\n\n      var isCommon = newValue === undefined;\n\n      if (isCommon) {\n        var isArr = isArray(srcValue),\n            isBuff = !isArr && isBuffer(srcValue),\n            isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n        newValue = srcValue;\n        if (isArr || isBuff || isTyped) {\n          if (isArray(objValue)) {\n            newValue = objValue;\n          }\n          else if (isArrayLikeObject(objValue)) {\n            newValue = copyArray(objValue);\n          }\n          else if (isBuff) {\n            isCommon = false;\n            newValue = cloneBuffer(srcValue, true);\n          }\n          else if (isTyped) {\n            isCommon = false;\n            newValue = cloneTypedArray(srcValue, true);\n          }\n          else {\n            newValue = [];\n          }\n        }\n        else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n          newValue = objValue;\n          if (isArguments(objValue)) {\n            newValue = toPlainObject(objValue);\n          }\n          else if (!isObject(objValue) || isFunction(objValue)) {\n            newValue = initCloneObject(srcValue);\n          }\n        }\n        else {\n          isCommon = false;\n        }\n      }\n      if (isCommon) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, newValue);\n        mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n        stack['delete'](srcValue);\n      }\n      assignMergeValue(object, key, newValue);\n    }\n\n    /**\n     * The base implementation of `_.nth` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {number} n The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     */\n    function baseNth(array, n) {\n      var length = array.length;\n      if (!length) {\n        return;\n      }\n      n += n < 0 ? length : 0;\n      return isIndex(n, length) ? array[n] : undefined;\n    }\n\n    /**\n     * The base implementation of `_.orderBy` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n     * @param {string[]} orders The sort orders of `iteratees`.\n     * @returns {Array} Returns the new sorted array.\n     */\n    function baseOrderBy(collection, iteratees, orders) {\n      var index = -1;\n      iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee()));\n\n      var result = baseMap(collection, function(value, key, collection) {\n        var criteria = arrayMap(iteratees, function(iteratee) {\n          return iteratee(value);\n        });\n        return { 'criteria': criteria, 'index': ++index, 'value': value };\n      });\n\n      return baseSortBy(result, function(object, other) {\n        return compareMultiple(object, other, orders);\n      });\n    }\n\n    /**\n     * The base implementation of `_.pick` without support for individual\n     * property identifiers.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Object} Returns the new object.\n     */\n    function basePick(object, paths) {\n      return basePickBy(object, paths, function(value, path) {\n        return hasIn(object, path);\n      });\n    }\n\n    /**\n     * The base implementation of  `_.pickBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @param {Function} predicate The function invoked per property.\n     * @returns {Object} Returns the new object.\n     */\n    function basePickBy(object, paths, predicate) {\n      var index = -1,\n          length = paths.length,\n          result = {};\n\n      while (++index < length) {\n        var path = paths[index],\n            value = baseGet(object, path);\n\n        if (predicate(value, path)) {\n          baseSet(result, castPath(path, object), value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseProperty` which supports deep paths.\n     *\n     * @private\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     */\n    function basePropertyDeep(path) {\n      return function(object) {\n        return baseGet(object, path);\n      };\n    }\n\n    /**\n     * The base implementation of `_.pullAllBy` without support for iteratee\n     * shorthands.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAll(array, values, iteratee, comparator) {\n      var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n          index = -1,\n          length = values.length,\n          seen = array;\n\n      if (array === values) {\n        values = copyArray(values);\n      }\n      if (iteratee) {\n        seen = arrayMap(array, baseUnary(iteratee));\n      }\n      while (++index < length) {\n        var fromIndex = 0,\n            value = values[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n          if (seen !== array) {\n            splice.call(seen, fromIndex, 1);\n          }\n          splice.call(array, fromIndex, 1);\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.pullAt` without support for individual\n     * indexes or capturing the removed elements.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {number[]} indexes The indexes of elements to remove.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAt(array, indexes) {\n      var length = array ? indexes.length : 0,\n          lastIndex = length - 1;\n\n      while (length--) {\n        var index = indexes[length];\n        if (length == lastIndex || index !== previous) {\n          var previous = index;\n          if (isIndex(index)) {\n            splice.call(array, index, 1);\n          } else {\n            baseUnset(array, index);\n          }\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.random` without support for returning\n     * floating-point numbers.\n     *\n     * @private\n     * @param {number} lower The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the random number.\n     */\n    function baseRandom(lower, upper) {\n      return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n    }\n\n    /**\n     * The base implementation of `_.range` and `_.rangeRight` which doesn't\n     * coerce arguments.\n     *\n     * @private\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} step The value to increment or decrement by.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the range of numbers.\n     */\n    function baseRange(start, end, step, fromRight) {\n      var index = -1,\n          length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n          result = Array(length);\n\n      while (length--) {\n        result[fromRight ? length : ++index] = start;\n        start += step;\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.repeat` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {string} string The string to repeat.\n     * @param {number} n The number of times to repeat the string.\n     * @returns {string} Returns the repeated string.\n     */\n    function baseRepeat(string, n) {\n      var result = '';\n      if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n        return result;\n      }\n      // Leverage the exponentiation by squaring algorithm for a faster repeat.\n      // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n      do {\n        if (n % 2) {\n          result += string;\n        }\n        n = nativeFloor(n / 2);\n        if (n) {\n          string += string;\n        }\n      } while (n);\n\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     */\n    function baseRest(func, start) {\n      return setToString(overRest(func, start, identity), func + '');\n    }\n\n    /**\n     * The base implementation of `_.sample`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     */\n    function baseSample(collection) {\n      return arraySample(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.sampleSize` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function baseSampleSize(collection, n) {\n      var array = values(collection);\n      return shuffleSelf(array, baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * The base implementation of `_.set`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseSet(object, path, value, customizer) {\n      if (!isObject(object)) {\n        return object;\n      }\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          lastIndex = length - 1,\n          nested = object;\n\n      while (nested != null && ++index < length) {\n        var key = toKey(path[index]),\n            newValue = value;\n\n        if (index != lastIndex) {\n          var objValue = nested[key];\n          newValue = customizer ? customizer(objValue, key, nested) : undefined;\n          if (newValue === undefined) {\n            newValue = isObject(objValue)\n              ? objValue\n              : (isIndex(path[index + 1]) ? [] : {});\n          }\n        }\n        assignValue(nested, key, newValue);\n        nested = nested[key];\n      }\n      return object;\n    }\n\n    /**\n     * The base implementation of `setData` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetData = !metaMap ? identity : function(func, data) {\n      metaMap.set(func, data);\n      return func;\n    };\n\n    /**\n     * The base implementation of `setToString` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetToString = !defineProperty ? identity : function(func, string) {\n      return defineProperty(func, 'toString', {\n        'configurable': true,\n        'enumerable': false,\n        'value': constant(string),\n        'writable': true\n      });\n    };\n\n    /**\n     * The base implementation of `_.shuffle`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function baseShuffle(collection) {\n      return shuffleSelf(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.slice` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseSlice(array, start, end) {\n      var index = -1,\n          length = array.length;\n\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = end > length ? length : end;\n      if (end < 0) {\n        end += length;\n      }\n      length = start > end ? 0 : ((end - start) >>> 0);\n      start >>>= 0;\n\n      var result = Array(length);\n      while (++index < length) {\n        result[index] = array[index + start];\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.some` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     */\n    function baseSome(collection, predicate) {\n      var result;\n\n      baseEach(collection, function(value, index, collection) {\n        result = predicate(value, index, collection);\n        return !result;\n      });\n      return !!result;\n    }\n\n    /**\n     * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n     * performs a binary search of `array` to determine the index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndex(array, value, retHighest) {\n      var low = 0,\n          high = array == null ? low : array.length;\n\n      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n        while (low < high) {\n          var mid = (low + high) >>> 1,\n              computed = array[mid];\n\n          if (computed !== null && !isSymbol(computed) &&\n              (retHighest ? (computed <= value) : (computed < value))) {\n            low = mid + 1;\n          } else {\n            high = mid;\n          }\n        }\n        return high;\n      }\n      return baseSortedIndexBy(array, value, identity, retHighest);\n    }\n\n    /**\n     * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n     * which invokes `iteratee` for `value` and each element of `array` to compute\n     * their sort ranking. The iteratee is invoked with one argument; (value).\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} iteratee The iteratee invoked per element.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndexBy(array, value, iteratee, retHighest) {\n      value = iteratee(value);\n\n      var low = 0,\n          high = array == null ? 0 : array.length,\n          valIsNaN = value !== value,\n          valIsNull = value === null,\n          valIsSymbol = isSymbol(value),\n          valIsUndefined = value === undefined;\n\n      while (low < high) {\n        var mid = nativeFloor((low + high) / 2),\n            computed = iteratee(array[mid]),\n            othIsDefined = computed !== undefined,\n            othIsNull = computed === null,\n            othIsReflexive = computed === computed,\n            othIsSymbol = isSymbol(computed);\n\n        if (valIsNaN) {\n          var setLow = retHighest || othIsReflexive;\n        } else if (valIsUndefined) {\n          setLow = othIsReflexive && (retHighest || othIsDefined);\n        } else if (valIsNull) {\n          setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n        } else if (valIsSymbol) {\n          setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n        } else if (othIsNull || othIsSymbol) {\n          setLow = false;\n        } else {\n          setLow = retHighest ? (computed <= value) : (computed < value);\n        }\n        if (setLow) {\n          low = mid + 1;\n        } else {\n          high = mid;\n        }\n      }\n      return nativeMin(high, MAX_ARRAY_INDEX);\n    }\n\n    /**\n     * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n     * support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */\n    function baseSortedUniq(array, iteratee) {\n      var index = -1,\n          length = array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        if (!index || !eq(computed, seen)) {\n          var seen = computed;\n          result[resIndex++] = value === 0 ? 0 : value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.toNumber` which doesn't ensure correct\n     * conversions of binary, hexadecimal, or octal string values.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     */\n    function baseToNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n      if (isSymbol(value)) {\n        return NAN;\n      }\n      return +value;\n    }\n\n    /**\n     * The base implementation of `_.toString` which doesn't convert nullish\n     * values to empty strings.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {string} Returns the string.\n     */\n    function baseToString(value) {\n      // Exit early for strings to avoid a performance hit in some environments.\n      if (typeof value == 'string') {\n        return value;\n      }\n      if (isArray(value)) {\n        // Recursively convert values (susceptible to call stack limits).\n        return arrayMap(value, baseToString) + '';\n      }\n      if (isSymbol(value)) {\n        return symbolToString ? symbolToString.call(value) : '';\n      }\n      var result = (value + '');\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n    }\n\n    /**\n     * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */\n    function baseUniq(array, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          length = array.length,\n          isCommon = true,\n          result = [],\n          seen = result;\n\n      if (comparator) {\n        isCommon = false;\n        includes = arrayIncludesWith;\n      }\n      else if (length >= LARGE_ARRAY_SIZE) {\n        var set = iteratee ? null : createSet(array);\n        if (set) {\n          return setToArray(set);\n        }\n        isCommon = false;\n        includes = cacheHas;\n        seen = new SetCache;\n      }\n      else {\n        seen = iteratee ? [] : result;\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (isCommon && computed === computed) {\n          var seenIndex = seen.length;\n          while (seenIndex--) {\n            if (seen[seenIndex] === computed) {\n              continue outer;\n            }\n          }\n          if (iteratee) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n        else if (!includes(seen, computed, comparator)) {\n          if (seen !== result) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.unset`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The property path to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     */\n    function baseUnset(object, path) {\n      path = castPath(path, object);\n      object = parent(object, path);\n      return object == null || delete object[toKey(last(path))];\n    }\n\n    /**\n     * The base implementation of `_.update`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to update.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseUpdate(object, path, updater, customizer) {\n      return baseSet(object, path, updater(baseGet(object, path)), customizer);\n    }\n\n    /**\n     * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n     * without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {Function} predicate The function invoked per iteration.\n     * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseWhile(array, predicate, isDrop, fromRight) {\n      var length = array.length,\n          index = fromRight ? length : -1;\n\n      while ((fromRight ? index-- : ++index < length) &&\n        predicate(array[index], index, array)) {}\n\n      return isDrop\n        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n    }\n\n    /**\n     * The base implementation of `wrapperValue` which returns the result of\n     * performing a sequence of actions on the unwrapped `value`, where each\n     * successive action is supplied the return value of the previous.\n     *\n     * @private\n     * @param {*} value The unwrapped value.\n     * @param {Array} actions Actions to perform to resolve the unwrapped value.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseWrapperValue(value, actions) {\n      var result = value;\n      if (result instanceof LazyWrapper) {\n        result = result.value();\n      }\n      return arrayReduce(actions, function(result, action) {\n        return action.func.apply(action.thisArg, arrayPush([result], action.args));\n      }, result);\n    }\n\n    /**\n     * The base implementation of methods like `_.xor`, without support for\n     * iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of values.\n     */\n    function baseXor(arrays, iteratee, comparator) {\n      var length = arrays.length;\n      if (length < 2) {\n        return length ? baseUniq(arrays[0]) : [];\n      }\n      var index = -1,\n          result = Array(length);\n\n      while (++index < length) {\n        var array = arrays[index],\n            othIndex = -1;\n\n        while (++othIndex < length) {\n          if (othIndex != index) {\n            result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n          }\n        }\n      }\n      return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n    }\n\n    /**\n     * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n     *\n     * @private\n     * @param {Array} props The property identifiers.\n     * @param {Array} values The property values.\n     * @param {Function} assignFunc The function to assign values.\n     * @returns {Object} Returns the new object.\n     */\n    function baseZipObject(props, values, assignFunc) {\n      var index = -1,\n          length = props.length,\n          valsLength = values.length,\n          result = {};\n\n      while (++index < length) {\n        var value = index < valsLength ? values[index] : undefined;\n        assignFunc(result, props[index], value);\n      }\n      return result;\n    }\n\n    /**\n     * Casts `value` to an empty array if it's not an array like object.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Array|Object} Returns the cast array-like object.\n     */\n    function castArrayLikeObject(value) {\n      return isArrayLikeObject(value) ? value : [];\n    }\n\n    /**\n     * Casts `value` to `identity` if it's not a function.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Function} Returns cast function.\n     */\n    function castFunction(value) {\n      return typeof value == 'function' ? value : identity;\n    }\n\n    /**\n     * Casts `value` to a path array if it's not one.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {Array} Returns the cast property path array.\n     */\n    function castPath(value, object) {\n      if (isArray(value)) {\n        return value;\n      }\n      return isKey(value, object) ? [value] : stringToPath(toString(value));\n    }\n\n    /**\n     * A `baseRest` alias which can be replaced with `identity` by module\n     * replacement plugins.\n     *\n     * @private\n     * @type {Function}\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    var castRest = baseRest;\n\n    /**\n     * Casts `array` to a slice if it's needed.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {number} start The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the cast slice.\n     */\n    function castSlice(array, start, end) {\n      var length = array.length;\n      end = end === undefined ? length : end;\n      return (!start && end >= length) ? array : baseSlice(array, start, end);\n    }\n\n    /**\n     * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n     *\n     * @private\n     * @param {number|Object} id The timer id or timeout object of the timer to clear.\n     */\n    var clearTimeout = ctxClearTimeout || function(id) {\n      return root.clearTimeout(id);\n    };\n\n    /**\n     * Creates a clone of  `buffer`.\n     *\n     * @private\n     * @param {Buffer} buffer The buffer to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Buffer} Returns the cloned buffer.\n     */\n    function cloneBuffer(buffer, isDeep) {\n      if (isDeep) {\n        return buffer.slice();\n      }\n      var length = buffer.length,\n          result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n      buffer.copy(result);\n      return result;\n    }\n\n    /**\n     * Creates a clone of `arrayBuffer`.\n     *\n     * @private\n     * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n     * @returns {ArrayBuffer} Returns the cloned array buffer.\n     */\n    function cloneArrayBuffer(arrayBuffer) {\n      var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n      new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n      return result;\n    }\n\n    /**\n     * Creates a clone of `dataView`.\n     *\n     * @private\n     * @param {Object} dataView The data view to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned data view.\n     */\n    function cloneDataView(dataView, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n      return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n    }\n\n    /**\n     * Creates a clone of `regexp`.\n     *\n     * @private\n     * @param {Object} regexp The regexp to clone.\n     * @returns {Object} Returns the cloned regexp.\n     */\n    function cloneRegExp(regexp) {\n      var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n      result.lastIndex = regexp.lastIndex;\n      return result;\n    }\n\n    /**\n     * Creates a clone of the `symbol` object.\n     *\n     * @private\n     * @param {Object} symbol The symbol object to clone.\n     * @returns {Object} Returns the cloned symbol object.\n     */\n    function cloneSymbol(symbol) {\n      return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n    }\n\n    /**\n     * Creates a clone of `typedArray`.\n     *\n     * @private\n     * @param {Object} typedArray The typed array to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned typed array.\n     */\n    function cloneTypedArray(typedArray, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n      return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n    }\n\n    /**\n     * Compares values to sort them in ascending order.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {number} Returns the sort order indicator for `value`.\n     */\n    function compareAscending(value, other) {\n      if (value !== other) {\n        var valIsDefined = value !== undefined,\n            valIsNull = value === null,\n            valIsReflexive = value === value,\n            valIsSymbol = isSymbol(value);\n\n        var othIsDefined = other !== undefined,\n            othIsNull = other === null,\n            othIsReflexive = other === other,\n            othIsSymbol = isSymbol(other);\n\n        if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n            (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n            (valIsNull && othIsDefined && othIsReflexive) ||\n            (!valIsDefined && othIsReflexive) ||\n            !valIsReflexive) {\n          return 1;\n        }\n        if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n            (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n            (othIsNull && valIsDefined && valIsReflexive) ||\n            (!othIsDefined && valIsReflexive) ||\n            !othIsReflexive) {\n          return -1;\n        }\n      }\n      return 0;\n    }\n\n    /**\n     * Used by `_.orderBy` to compare multiple properties of a value to another\n     * and stable sort them.\n     *\n     * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n     * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n     * of corresponding values.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {boolean[]|string[]} orders The order to sort by for each property.\n     * @returns {number} Returns the sort order indicator for `object`.\n     */\n    function compareMultiple(object, other, orders) {\n      var index = -1,\n          objCriteria = object.criteria,\n          othCriteria = other.criteria,\n          length = objCriteria.length,\n          ordersLength = orders.length;\n\n      while (++index < length) {\n        var result = compareAscending(objCriteria[index], othCriteria[index]);\n        if (result) {\n          if (index >= ordersLength) {\n            return result;\n          }\n          var order = orders[index];\n          return result * (order == 'desc' ? -1 : 1);\n        }\n      }\n      // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n      // that causes it, under certain circumstances, to provide the same value for\n      // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n      // for more details.\n      //\n      // This also ensures a stable sort in V8 and other engines.\n      // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n      return object.index - other.index;\n    }\n\n    /**\n     * Creates an array that is the composition of partially applied arguments,\n     * placeholders, and provided arguments into a single array of arguments.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to prepend to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgs(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersLength = holders.length,\n          leftIndex = -1,\n          leftLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(leftLength + rangeLength),\n          isUncurried = !isCurried;\n\n      while (++leftIndex < leftLength) {\n        result[leftIndex] = partials[leftIndex];\n      }\n      while (++argsIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[holders[argsIndex]] = args[argsIndex];\n        }\n      }\n      while (rangeLength--) {\n        result[leftIndex++] = args[argsIndex++];\n      }\n      return result;\n    }\n\n    /**\n     * This function is like `composeArgs` except that the arguments composition\n     * is tailored for `_.partialRight`.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to append to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgsRight(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersIndex = -1,\n          holdersLength = holders.length,\n          rightIndex = -1,\n          rightLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(rangeLength + rightLength),\n          isUncurried = !isCurried;\n\n      while (++argsIndex < rangeLength) {\n        result[argsIndex] = args[argsIndex];\n      }\n      var offset = argsIndex;\n      while (++rightIndex < rightLength) {\n        result[offset + rightIndex] = partials[rightIndex];\n      }\n      while (++holdersIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[offset + holders[holdersIndex]] = args[argsIndex++];\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Copies the values of `source` to `array`.\n     *\n     * @private\n     * @param {Array} source The array to copy values from.\n     * @param {Array} [array=[]] The array to copy values to.\n     * @returns {Array} Returns `array`.\n     */\n    function copyArray(source, array) {\n      var index = -1,\n          length = source.length;\n\n      array || (array = Array(length));\n      while (++index < length) {\n        array[index] = source[index];\n      }\n      return array;\n    }\n\n    /**\n     * Copies properties of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy properties from.\n     * @param {Array} props The property identifiers to copy.\n     * @param {Object} [object={}] The object to copy properties to.\n     * @param {Function} [customizer] The function to customize copied values.\n     * @returns {Object} Returns `object`.\n     */\n    function copyObject(source, props, object, customizer) {\n      var isNew = !object;\n      object || (object = {});\n\n      var index = -1,\n          length = props.length;\n\n      while (++index < length) {\n        var key = props[index];\n\n        var newValue = customizer\n          ? customizer(object[key], source[key], key, object, source)\n          : undefined;\n\n        if (newValue === undefined) {\n          newValue = source[key];\n        }\n        if (isNew) {\n          baseAssignValue(object, key, newValue);\n        } else {\n          assignValue(object, key, newValue);\n        }\n      }\n      return object;\n    }\n\n    /**\n     * Copies own symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbols(source, object) {\n      return copyObject(source, getSymbols(source), object);\n    }\n\n    /**\n     * Copies own and inherited symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbolsIn(source, object) {\n      return copyObject(source, getSymbolsIn(source), object);\n    }\n\n    /**\n     * Creates a function like `_.groupBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} [initializer] The accumulator object initializer.\n     * @returns {Function} Returns the new aggregator function.\n     */\n    function createAggregator(setter, initializer) {\n      return function(collection, iteratee) {\n        var func = isArray(collection) ? arrayAggregator : baseAggregator,\n            accumulator = initializer ? initializer() : {};\n\n        return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n      };\n    }\n\n    /**\n     * Creates a function like `_.assign`.\n     *\n     * @private\n     * @param {Function} assigner The function to assign values.\n     * @returns {Function} Returns the new assigner function.\n     */\n    function createAssigner(assigner) {\n      return baseRest(function(object, sources) {\n        var index = -1,\n            length = sources.length,\n            customizer = length > 1 ? sources[length - 1] : undefined,\n            guard = length > 2 ? sources[2] : undefined;\n\n        customizer = (assigner.length > 3 && typeof customizer == 'function')\n          ? (length--, customizer)\n          : undefined;\n\n        if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n          customizer = length < 3 ? undefined : customizer;\n          length = 1;\n        }\n        object = Object(object);\n        while (++index < length) {\n          var source = sources[index];\n          if (source) {\n            assigner(object, source, index, customizer);\n          }\n        }\n        return object;\n      });\n    }\n\n    /**\n     * Creates a `baseEach` or `baseEachRight` function.\n     *\n     * @private\n     * @param {Function} eachFunc The function to iterate over a collection.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseEach(eachFunc, fromRight) {\n      return function(collection, iteratee) {\n        if (collection == null) {\n          return collection;\n        }\n        if (!isArrayLike(collection)) {\n          return eachFunc(collection, iteratee);\n        }\n        var length = collection.length,\n            index = fromRight ? length : -1,\n            iterable = Object(collection);\n\n        while ((fromRight ? index-- : ++index < length)) {\n          if (iteratee(iterable[index], index, iterable) === false) {\n            break;\n          }\n        }\n        return collection;\n      };\n    }\n\n    /**\n     * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseFor(fromRight) {\n      return function(object, iteratee, keysFunc) {\n        var index = -1,\n            iterable = Object(object),\n            props = keysFunc(object),\n            length = props.length;\n\n        while (length--) {\n          var key = props[fromRight ? length : ++index];\n          if (iteratee(iterable[key], key, iterable) === false) {\n            break;\n          }\n        }\n        return object;\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with the optional `this`\n     * binding of `thisArg`.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createBind(func, bitmask, thisArg) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return fn.apply(isBind ? thisArg : this, arguments);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a function like `_.lowerFirst`.\n     *\n     * @private\n     * @param {string} methodName The name of the `String` case method to use.\n     * @returns {Function} Returns the new case function.\n     */\n    function createCaseFirst(methodName) {\n      return function(string) {\n        string = toString(string);\n\n        var strSymbols = hasUnicode(string)\n          ? stringToArray(string)\n          : undefined;\n\n        var chr = strSymbols\n          ? strSymbols[0]\n          : string.charAt(0);\n\n        var trailing = strSymbols\n          ? castSlice(strSymbols, 1).join('')\n          : string.slice(1);\n\n        return chr[methodName]() + trailing;\n      };\n    }\n\n    /**\n     * Creates a function like `_.camelCase`.\n     *\n     * @private\n     * @param {Function} callback The function to combine each word.\n     * @returns {Function} Returns the new compounder function.\n     */\n    function createCompounder(callback) {\n      return function(string) {\n        return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n      };\n    }\n\n    /**\n     * Creates a function that produces an instance of `Ctor` regardless of\n     * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n     *\n     * @private\n     * @param {Function} Ctor The constructor to wrap.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCtor(Ctor) {\n      return function() {\n        // Use a `switch` statement to work with class constructors. See\n        // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n        // for more details.\n        var args = arguments;\n        switch (args.length) {\n          case 0: return new Ctor;\n          case 1: return new Ctor(args[0]);\n          case 2: return new Ctor(args[0], args[1]);\n          case 3: return new Ctor(args[0], args[1], args[2]);\n          case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n        }\n        var thisBinding = baseCreate(Ctor.prototype),\n            result = Ctor.apply(thisBinding, args);\n\n        // Mimic the constructor's `return` behavior.\n        // See https://es5.github.io/#x13.2.2 for more details.\n        return isObject(result) ? result : thisBinding;\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to enable currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {number} arity The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCurry(func, bitmask, arity) {\n      var Ctor = createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length,\n            placeholder = getHolder(wrapper);\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n          ? []\n          : replaceHolders(args, placeholder);\n\n        length -= holders.length;\n        if (length < arity) {\n          return createRecurry(\n            func, bitmask, createHybrid, wrapper.placeholder, undefined,\n            args, holders, undefined, undefined, arity - length);\n        }\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return apply(fn, this, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `_.find` or `_.findLast` function.\n     *\n     * @private\n     * @param {Function} findIndexFunc The function to find the collection index.\n     * @returns {Function} Returns the new find function.\n     */\n    function createFind(findIndexFunc) {\n      return function(collection, predicate, fromIndex) {\n        var iterable = Object(collection);\n        if (!isArrayLike(collection)) {\n          var iteratee = getIteratee(predicate, 3);\n          collection = keys(collection);\n          predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n        }\n        var index = findIndexFunc(collection, predicate, fromIndex);\n        return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n      };\n    }\n\n    /**\n     * Creates a `_.flow` or `_.flowRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new flow function.\n     */\n    function createFlow(fromRight) {\n      return flatRest(function(funcs) {\n        var length = funcs.length,\n            index = length,\n            prereq = LodashWrapper.prototype.thru;\n\n        if (fromRight) {\n          funcs.reverse();\n        }\n        while (index--) {\n          var func = funcs[index];\n          if (typeof func != 'function') {\n            throw new TypeError(FUNC_ERROR_TEXT);\n          }\n          if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n            var wrapper = new LodashWrapper([], true);\n          }\n        }\n        index = wrapper ? index : length;\n        while (++index < length) {\n          func = funcs[index];\n\n          var funcName = getFuncName(func),\n              data = funcName == 'wrapper' ? getData(func) : undefined;\n\n          if (data && isLaziable(data[0]) &&\n                data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n                !data[4].length && data[9] == 1\n              ) {\n            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n          } else {\n            wrapper = (func.length == 1 && isLaziable(func))\n              ? wrapper[funcName]()\n              : wrapper.thru(func);\n          }\n        }\n        return function() {\n          var args = arguments,\n              value = args[0];\n\n          if (wrapper && args.length == 1 && isArray(value)) {\n            return wrapper.plant(value).value();\n          }\n          var index = 0,\n              result = length ? funcs[index].apply(this, args) : value;\n\n          while (++index < length) {\n            result = funcs[index].call(this, result);\n          }\n          return result;\n        };\n      });\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with optional `this`\n     * binding of `thisArg`, partial application, and currying.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [partialsRight] The arguments to append to those provided\n     *  to the new function.\n     * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n      var isAry = bitmask & WRAP_ARY_FLAG,\n          isBind = bitmask & WRAP_BIND_FLAG,\n          isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n          isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n          isFlip = bitmask & WRAP_FLIP_FLAG,\n          Ctor = isBindKey ? undefined : createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length;\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        if (isCurried) {\n          var placeholder = getHolder(wrapper),\n              holdersCount = countHolders(args, placeholder);\n        }\n        if (partials) {\n          args = composeArgs(args, partials, holders, isCurried);\n        }\n        if (partialsRight) {\n          args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n        }\n        length -= holdersCount;\n        if (isCurried && length < arity) {\n          var newHolders = replaceHolders(args, placeholder);\n          return createRecurry(\n            func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n            args, newHolders, argPos, ary, arity - length\n          );\n        }\n        var thisBinding = isBind ? thisArg : this,\n            fn = isBindKey ? thisBinding[func] : func;\n\n        length = args.length;\n        if (argPos) {\n          args = reorder(args, argPos);\n        } else if (isFlip && length > 1) {\n          args.reverse();\n        }\n        if (isAry && ary < length) {\n          args.length = ary;\n        }\n        if (this && this !== root && this instanceof wrapper) {\n          fn = Ctor || createCtor(fn);\n        }\n        return fn.apply(thisBinding, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a function like `_.invertBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} toIteratee The function to resolve iteratees.\n     * @returns {Function} Returns the new inverter function.\n     */\n    function createInverter(setter, toIteratee) {\n      return function(object, iteratee) {\n        return baseInverter(object, setter, toIteratee(iteratee), {});\n      };\n    }\n\n    /**\n     * Creates a function that performs a mathematical operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @param {number} [defaultValue] The value used for `undefined` arguments.\n     * @returns {Function} Returns the new mathematical operation function.\n     */\n    function createMathOperation(operator, defaultValue) {\n      return function(value, other) {\n        var result;\n        if (value === undefined && other === undefined) {\n          return defaultValue;\n        }\n        if (value !== undefined) {\n          result = value;\n        }\n        if (other !== undefined) {\n          if (result === undefined) {\n            return other;\n          }\n          if (typeof value == 'string' || typeof other == 'string') {\n            value = baseToString(value);\n            other = baseToString(other);\n          } else {\n            value = baseToNumber(value);\n            other = baseToNumber(other);\n          }\n          result = operator(value, other);\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function like `_.over`.\n     *\n     * @private\n     * @param {Function} arrayFunc The function to iterate over iteratees.\n     * @returns {Function} Returns the new over function.\n     */\n    function createOver(arrayFunc) {\n      return flatRest(function(iteratees) {\n        iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n        return baseRest(function(args) {\n          var thisArg = this;\n          return arrayFunc(iteratees, function(iteratee) {\n            return apply(iteratee, thisArg, args);\n          });\n        });\n      });\n    }\n\n    /**\n     * Creates the padding for `string` based on `length`. The `chars` string\n     * is truncated if the number of characters exceeds `length`.\n     *\n     * @private\n     * @param {number} length The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padding for `string`.\n     */\n    function createPadding(length, chars) {\n      chars = chars === undefined ? ' ' : baseToString(chars);\n\n      var charsLength = chars.length;\n      if (charsLength < 2) {\n        return charsLength ? baseRepeat(chars, length) : chars;\n      }\n      var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n      return hasUnicode(chars)\n        ? castSlice(stringToArray(result), 0, length).join('')\n        : result.slice(0, length);\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with the `this` binding\n     * of `thisArg` and `partials` prepended to the arguments it receives.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {Array} partials The arguments to prepend to those provided to\n     *  the new function.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createPartial(func, bitmask, thisArg, partials) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var argsIndex = -1,\n            argsLength = arguments.length,\n            leftIndex = -1,\n            leftLength = partials.length,\n            args = Array(leftLength + argsLength),\n            fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n        while (++leftIndex < leftLength) {\n          args[leftIndex] = partials[leftIndex];\n        }\n        while (argsLength--) {\n          args[leftIndex++] = arguments[++argsIndex];\n        }\n        return apply(fn, isBind ? thisArg : this, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `_.range` or `_.rangeRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new range function.\n     */\n    function createRange(fromRight) {\n      return function(start, end, step) {\n        if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n          end = step = undefined;\n        }\n        // Ensure the sign of `-0` is preserved.\n        start = toFinite(start);\n        if (end === undefined) {\n          end = start;\n          start = 0;\n        } else {\n          end = toFinite(end);\n        }\n        step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n        return baseRange(start, end, step, fromRight);\n      };\n    }\n\n    /**\n     * Creates a function that performs a relational operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @returns {Function} Returns the new relational operation function.\n     */\n    function createRelationalOperation(operator) {\n      return function(value, other) {\n        if (!(typeof value == 'string' && typeof other == 'string')) {\n          value = toNumber(value);\n          other = toNumber(other);\n        }\n        return operator(value, other);\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to continue currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {Function} wrapFunc The function to create the `func` wrapper.\n     * @param {*} placeholder The placeholder value.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n      var isCurry = bitmask & WRAP_CURRY_FLAG,\n          newHolders = isCurry ? holders : undefined,\n          newHoldersRight = isCurry ? undefined : holders,\n          newPartials = isCurry ? partials : undefined,\n          newPartialsRight = isCurry ? undefined : partials;\n\n      bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n      bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n      if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n        bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n      }\n      var newData = [\n        func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n        newHoldersRight, argPos, ary, arity\n      ];\n\n      var result = wrapFunc.apply(undefined, newData);\n      if (isLaziable(func)) {\n        setData(result, newData);\n      }\n      result.placeholder = placeholder;\n      return setWrapToString(result, func, bitmask);\n    }\n\n    /**\n     * Creates a function like `_.round`.\n     *\n     * @private\n     * @param {string} methodName The name of the `Math` method to use when rounding.\n     * @returns {Function} Returns the new round function.\n     */\n    function createRound(methodName) {\n      var func = Math[methodName];\n      return function(number, precision) {\n        number = toNumber(number);\n        precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n        if (precision && nativeIsFinite(number)) {\n          // Shift with exponential notation to avoid floating-point issues.\n          // See [MDN](https://mdn.io/round#Examples) for more details.\n          var pair = (toString(number) + 'e').split('e'),\n              value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n          pair = (toString(value) + 'e').split('e');\n          return +(pair[0] + 'e' + (+pair[1] - precision));\n        }\n        return func(number);\n      };\n    }\n\n    /**\n     * Creates a set object of `values`.\n     *\n     * @private\n     * @param {Array} values The values to add to the set.\n     * @returns {Object} Returns the new set.\n     */\n    var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n      return new Set(values);\n    };\n\n    /**\n     * Creates a `_.toPairs` or `_.toPairsIn` function.\n     *\n     * @private\n     * @param {Function} keysFunc The function to get the keys of a given object.\n     * @returns {Function} Returns the new pairs function.\n     */\n    function createToPairs(keysFunc) {\n      return function(object) {\n        var tag = getTag(object);\n        if (tag == mapTag) {\n          return mapToArray(object);\n        }\n        if (tag == setTag) {\n          return setToPairs(object);\n        }\n        return baseToPairs(object, keysFunc(object));\n      };\n    }\n\n    /**\n     * Creates a function that either curries or invokes `func` with optional\n     * `this` binding and partially applied arguments.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags.\n     *    1 - `_.bind`\n     *    2 - `_.bindKey`\n     *    4 - `_.curry` or `_.curryRight` of a bound function\n     *    8 - `_.curry`\n     *   16 - `_.curryRight`\n     *   32 - `_.partial`\n     *   64 - `_.partialRight`\n     *  128 - `_.rearg`\n     *  256 - `_.ary`\n     *  512 - `_.flip`\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to be partially applied.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n      var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n      if (!isBindKey && typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var length = partials ? partials.length : 0;\n      if (!length) {\n        bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n        partials = holders = undefined;\n      }\n      ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n      arity = arity === undefined ? arity : toInteger(arity);\n      length -= holders ? holders.length : 0;\n\n      if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n        var partialsRight = partials,\n            holdersRight = holders;\n\n        partials = holders = undefined;\n      }\n      var data = isBindKey ? undefined : getData(func);\n\n      var newData = [\n        func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n        argPos, ary, arity\n      ];\n\n      if (data) {\n        mergeData(newData, data);\n      }\n      func = newData[0];\n      bitmask = newData[1];\n      thisArg = newData[2];\n      partials = newData[3];\n      holders = newData[4];\n      arity = newData[9] = newData[9] === undefined\n        ? (isBindKey ? 0 : func.length)\n        : nativeMax(newData[9] - length, 0);\n\n      if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n        bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n      }\n      if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n        var result = createBind(func, bitmask, thisArg);\n      } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n        result = createCurry(func, bitmask, arity);\n      } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n        result = createPartial(func, bitmask, thisArg, partials);\n      } else {\n        result = createHybrid.apply(undefined, newData);\n      }\n      var setter = data ? baseSetData : setData;\n      return setWrapToString(setter(result, newData), func, bitmask);\n    }\n\n    /**\n     * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n     * of source objects to the destination object for all destination properties\n     * that resolve to `undefined`.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to assign.\n     * @param {Object} object The parent object of `objValue`.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsAssignIn(objValue, srcValue, key, object) {\n      if (objValue === undefined ||\n          (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n        return srcValue;\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n     * objects into destination objects that are passed thru.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to merge.\n     * @param {Object} object The parent object of `objValue`.\n     * @param {Object} source The parent object of `srcValue`.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n      if (isObject(objValue) && isObject(srcValue)) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, objValue);\n        baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n        stack['delete'](srcValue);\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n     * objects.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {string} key The key of the property to inspect.\n     * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n     */\n    function customOmitClone(value) {\n      return isPlainObject(value) ? undefined : value;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for arrays with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Array} array The array to compare.\n     * @param {Array} other The other array to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `array` and `other` objects.\n     * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n     */\n    function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          arrLength = array.length,\n          othLength = other.length;\n\n      if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n        return false;\n      }\n      // Assume cyclic values are equal.\n      var stacked = stack.get(array);\n      if (stacked && stack.get(other)) {\n        return stacked == other;\n      }\n      var index = -1,\n          result = true,\n          seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n      stack.set(array, other);\n      stack.set(other, array);\n\n      // Ignore non-index properties.\n      while (++index < arrLength) {\n        var arrValue = array[index],\n            othValue = other[index];\n\n        if (customizer) {\n          var compared = isPartial\n            ? customizer(othValue, arrValue, index, other, array, stack)\n            : customizer(arrValue, othValue, index, array, other, stack);\n        }\n        if (compared !== undefined) {\n          if (compared) {\n            continue;\n          }\n          result = false;\n          break;\n        }\n        // Recursively compare arrays (susceptible to call stack limits).\n        if (seen) {\n          if (!arraySome(other, function(othValue, othIndex) {\n                if (!cacheHas(seen, othIndex) &&\n                    (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n                  return seen.push(othIndex);\n                }\n              })) {\n            result = false;\n            break;\n          }\n        } else if (!(\n              arrValue === othValue ||\n                equalFunc(arrValue, othValue, bitmask, customizer, stack)\n            )) {\n          result = false;\n          break;\n        }\n      }\n      stack['delete'](array);\n      stack['delete'](other);\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for comparing objects of\n     * the same `toStringTag`.\n     *\n     * **Note:** This function only supports comparing values with tags of\n     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {string} tag The `toStringTag` of the objects to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n      switch (tag) {\n        case dataViewTag:\n          if ((object.byteLength != other.byteLength) ||\n              (object.byteOffset != other.byteOffset)) {\n            return false;\n          }\n          object = object.buffer;\n          other = other.buffer;\n\n        case arrayBufferTag:\n          if ((object.byteLength != other.byteLength) ||\n              !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n            return false;\n          }\n          return true;\n\n        case boolTag:\n        case dateTag:\n        case numberTag:\n          // Coerce booleans to `1` or `0` and dates to milliseconds.\n          // Invalid dates are coerced to `NaN`.\n          return eq(+object, +other);\n\n        case errorTag:\n          return object.name == other.name && object.message == other.message;\n\n        case regexpTag:\n        case stringTag:\n          // Coerce regexes to strings and treat strings, primitives and objects,\n          // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n          // for more details.\n          return object == (other + '');\n\n        case mapTag:\n          var convert = mapToArray;\n\n        case setTag:\n          var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n          convert || (convert = setToArray);\n\n          if (object.size != other.size && !isPartial) {\n            return false;\n          }\n          // Assume cyclic values are equal.\n          var stacked = stack.get(object);\n          if (stacked) {\n            return stacked == other;\n          }\n          bitmask |= COMPARE_UNORDERED_FLAG;\n\n          // Recursively compare objects (susceptible to call stack limits).\n          stack.set(object, other);\n          var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n          stack['delete'](object);\n          return result;\n\n        case symbolTag:\n          if (symbolValueOf) {\n            return symbolValueOf.call(object) == symbolValueOf.call(other);\n          }\n      }\n      return false;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for objects with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          objProps = getAllKeys(object),\n          objLength = objProps.length,\n          othProps = getAllKeys(other),\n          othLength = othProps.length;\n\n      if (objLength != othLength && !isPartial) {\n        return false;\n      }\n      var index = objLength;\n      while (index--) {\n        var key = objProps[index];\n        if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n          return false;\n        }\n      }\n      // Assume cyclic values are equal.\n      var stacked = stack.get(object);\n      if (stacked && stack.get(other)) {\n        return stacked == other;\n      }\n      var result = true;\n      stack.set(object, other);\n      stack.set(other, object);\n\n      var skipCtor = isPartial;\n      while (++index < objLength) {\n        key = objProps[index];\n        var objValue = object[key],\n            othValue = other[key];\n\n        if (customizer) {\n          var compared = isPartial\n            ? customizer(othValue, objValue, key, other, object, stack)\n            : customizer(objValue, othValue, key, object, other, stack);\n        }\n        // Recursively compare objects (susceptible to call stack limits).\n        if (!(compared === undefined\n              ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n              : compared\n            )) {\n          result = false;\n          break;\n        }\n        skipCtor || (skipCtor = key == 'constructor');\n      }\n      if (result && !skipCtor) {\n        var objCtor = object.constructor,\n            othCtor = other.constructor;\n\n        // Non `Object` object instances with different constructors are not equal.\n        if (objCtor != othCtor &&\n            ('constructor' in object && 'constructor' in other) &&\n            !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n              typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n          result = false;\n        }\n      }\n      stack['delete'](object);\n      stack['delete'](other);\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseRest` which flattens the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    function flatRest(func) {\n      return setToString(overRest(func, undefined, flatten), func + '');\n    }\n\n    /**\n     * Creates an array of own enumerable property names and symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function getAllKeys(object) {\n      return baseGetAllKeys(object, keys, getSymbols);\n    }\n\n    /**\n     * Creates an array of own and inherited enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function getAllKeysIn(object) {\n      return baseGetAllKeys(object, keysIn, getSymbolsIn);\n    }\n\n    /**\n     * Gets metadata for `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {*} Returns the metadata for `func`.\n     */\n    var getData = !metaMap ? noop : function(func) {\n      return metaMap.get(func);\n    };\n\n    /**\n     * Gets the name of `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {string} Returns the function name.\n     */\n    function getFuncName(func) {\n      var result = (func.name + ''),\n          array = realNames[result],\n          length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n      while (length--) {\n        var data = array[length],\n            otherFunc = data.func;\n        if (otherFunc == null || otherFunc == func) {\n          return data.name;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Gets the argument placeholder value for `func`.\n     *\n     * @private\n     * @param {Function} func The function to inspect.\n     * @returns {*} Returns the placeholder value.\n     */\n    function getHolder(func) {\n      var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n      return object.placeholder;\n    }\n\n    /**\n     * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n     * this function returns the custom method, otherwise it returns `baseIteratee`.\n     * If arguments are provided, the chosen function is invoked with them and\n     * its result is returned.\n     *\n     * @private\n     * @param {*} [value] The value to convert to an iteratee.\n     * @param {number} [arity] The arity of the created iteratee.\n     * @returns {Function} Returns the chosen function or its result.\n     */\n    function getIteratee() {\n      var result = lodash.iteratee || iteratee;\n      result = result === iteratee ? baseIteratee : result;\n      return arguments.length ? result(arguments[0], arguments[1]) : result;\n    }\n\n    /**\n     * Gets the data for `map`.\n     *\n     * @private\n     * @param {Object} map The map to query.\n     * @param {string} key The reference key.\n     * @returns {*} Returns the map data.\n     */\n    function getMapData(map, key) {\n      var data = map.__data__;\n      return isKeyable(key)\n        ? data[typeof key == 'string' ? 'string' : 'hash']\n        : data.map;\n    }\n\n    /**\n     * Gets the property names, values, and compare flags of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the match data of `object`.\n     */\n    function getMatchData(object) {\n      var result = keys(object),\n          length = result.length;\n\n      while (length--) {\n        var key = result[length],\n            value = object[key];\n\n        result[length] = [key, value, isStrictComparable(value)];\n      }\n      return result;\n    }\n\n    /**\n     * Gets the native function at `key` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the method to get.\n     * @returns {*} Returns the function if it's native, else `undefined`.\n     */\n    function getNative(object, key) {\n      var value = getValue(object, key);\n      return baseIsNative(value) ? value : undefined;\n    }\n\n    /**\n     * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the raw `toStringTag`.\n     */\n    function getRawTag(value) {\n      var isOwn = hasOwnProperty.call(value, symToStringTag),\n          tag = value[symToStringTag];\n\n      try {\n        value[symToStringTag] = undefined;\n        var unmasked = true;\n      } catch (e) {}\n\n      var result = nativeObjectToString.call(value);\n      if (unmasked) {\n        if (isOwn) {\n          value[symToStringTag] = tag;\n        } else {\n          delete value[symToStringTag];\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array of the own enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n      if (object == null) {\n        return [];\n      }\n      object = Object(object);\n      return arrayFilter(nativeGetSymbols(object), function(symbol) {\n        return propertyIsEnumerable.call(object, symbol);\n      });\n    };\n\n    /**\n     * Creates an array of the own and inherited enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n      var result = [];\n      while (object) {\n        arrayPush(result, getSymbols(object));\n        object = getPrototype(object);\n      }\n      return result;\n    };\n\n    /**\n     * Gets the `toStringTag` of `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */\n    var getTag = baseGetTag;\n\n    // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n    if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n        (Map && getTag(new Map) != mapTag) ||\n        (Promise && getTag(Promise.resolve()) != promiseTag) ||\n        (Set && getTag(new Set) != setTag) ||\n        (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n      getTag = function(value) {\n        var result = baseGetTag(value),\n            Ctor = result == objectTag ? value.constructor : undefined,\n            ctorString = Ctor ? toSource(Ctor) : '';\n\n        if (ctorString) {\n          switch (ctorString) {\n            case dataViewCtorString: return dataViewTag;\n            case mapCtorString: return mapTag;\n            case promiseCtorString: return promiseTag;\n            case setCtorString: return setTag;\n            case weakMapCtorString: return weakMapTag;\n          }\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Gets the view, applying any `transforms` to the `start` and `end` positions.\n     *\n     * @private\n     * @param {number} start The start of the view.\n     * @param {number} end The end of the view.\n     * @param {Array} transforms The transformations to apply to the view.\n     * @returns {Object} Returns an object containing the `start` and `end`\n     *  positions of the view.\n     */\n    function getView(start, end, transforms) {\n      var index = -1,\n          length = transforms.length;\n\n      while (++index < length) {\n        var data = transforms[index],\n            size = data.size;\n\n        switch (data.type) {\n          case 'drop':      start += size; break;\n          case 'dropRight': end -= size; break;\n          case 'take':      end = nativeMin(end, start + size); break;\n          case 'takeRight': start = nativeMax(start, end - size); break;\n        }\n      }\n      return { 'start': start, 'end': end };\n    }\n\n    /**\n     * Extracts wrapper details from the `source` body comment.\n     *\n     * @private\n     * @param {string} source The source to inspect.\n     * @returns {Array} Returns the wrapper details.\n     */\n    function getWrapDetails(source) {\n      var match = source.match(reWrapDetails);\n      return match ? match[1].split(reSplitDetails) : [];\n    }\n\n    /**\n     * Checks if `path` exists on `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @param {Function} hasFunc The function to check properties.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     */\n    function hasPath(object, path, hasFunc) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          result = false;\n\n      while (++index < length) {\n        var key = toKey(path[index]);\n        if (!(result = object != null && hasFunc(object, key))) {\n          break;\n        }\n        object = object[key];\n      }\n      if (result || ++index != length) {\n        return result;\n      }\n      length = object == null ? 0 : object.length;\n      return !!length && isLength(length) && isIndex(key, length) &&\n        (isArray(object) || isArguments(object));\n    }\n\n    /**\n     * Initializes an array clone.\n     *\n     * @private\n     * @param {Array} array The array to clone.\n     * @returns {Array} Returns the initialized clone.\n     */\n    function initCloneArray(array) {\n      var length = array.length,\n          result = new array.constructor(length);\n\n      // Add properties assigned by `RegExp#exec`.\n      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n        result.index = array.index;\n        result.input = array.input;\n      }\n      return result;\n    }\n\n    /**\n     * Initializes an object clone.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneObject(object) {\n      return (typeof object.constructor == 'function' && !isPrototype(object))\n        ? baseCreate(getPrototype(object))\n        : {};\n    }\n\n    /**\n     * Initializes an object clone based on its `toStringTag`.\n     *\n     * **Note:** This function only supports cloning values with tags of\n     * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @param {string} tag The `toStringTag` of the object to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneByTag(object, tag, isDeep) {\n      var Ctor = object.constructor;\n      switch (tag) {\n        case arrayBufferTag:\n          return cloneArrayBuffer(object);\n\n        case boolTag:\n        case dateTag:\n          return new Ctor(+object);\n\n        case dataViewTag:\n          return cloneDataView(object, isDeep);\n\n        case float32Tag: case float64Tag:\n        case int8Tag: case int16Tag: case int32Tag:\n        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n          return cloneTypedArray(object, isDeep);\n\n        case mapTag:\n          return new Ctor;\n\n        case numberTag:\n        case stringTag:\n          return new Ctor(object);\n\n        case regexpTag:\n          return cloneRegExp(object);\n\n        case setTag:\n          return new Ctor;\n\n        case symbolTag:\n          return cloneSymbol(object);\n      }\n    }\n\n    /**\n     * Inserts wrapper `details` in a comment at the top of the `source` body.\n     *\n     * @private\n     * @param {string} source The source to modify.\n     * @returns {Array} details The details to insert.\n     * @returns {string} Returns the modified source.\n     */\n    function insertWrapDetails(source, details) {\n      var length = details.length;\n      if (!length) {\n        return source;\n      }\n      var lastIndex = length - 1;\n      details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n      details = details.join(length > 2 ? ', ' : ' ');\n      return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n    }\n\n    /**\n     * Checks if `value` is a flattenable `arguments` object or array.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n     */\n    function isFlattenable(value) {\n      return isArray(value) || isArguments(value) ||\n        !!(spreadableSymbol && value && value[spreadableSymbol]);\n    }\n\n    /**\n     * Checks if `value` is a valid array-like index.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n     * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n     */\n    function isIndex(value, length) {\n      var type = typeof value;\n      length = length == null ? MAX_SAFE_INTEGER : length;\n\n      return !!length &&\n        (type == 'number' ||\n          (type != 'symbol' && reIsUint.test(value))) &&\n            (value > -1 && value % 1 == 0 && value < length);\n    }\n\n    /**\n     * Checks if the given arguments are from an iteratee call.\n     *\n     * @private\n     * @param {*} value The potential iteratee value argument.\n     * @param {*} index The potential iteratee index or key argument.\n     * @param {*} object The potential iteratee object argument.\n     * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n     *  else `false`.\n     */\n    function isIterateeCall(value, index, object) {\n      if (!isObject(object)) {\n        return false;\n      }\n      var type = typeof index;\n      if (type == 'number'\n            ? (isArrayLike(object) && isIndex(index, object.length))\n            : (type == 'string' && index in object)\n          ) {\n        return eq(object[index], value);\n      }\n      return false;\n    }\n\n    /**\n     * Checks if `value` is a property name and not a property path.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n     */\n    function isKey(value, object) {\n      if (isArray(value)) {\n        return false;\n      }\n      var type = typeof value;\n      if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n          value == null || isSymbol(value)) {\n        return true;\n      }\n      return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n        (object != null && value in Object(object));\n    }\n\n    /**\n     * Checks if `value` is suitable for use as unique object key.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n     */\n    function isKeyable(value) {\n      var type = typeof value;\n      return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n        ? (value !== '__proto__')\n        : (value === null);\n    }\n\n    /**\n     * Checks if `func` has a lazy counterpart.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n     *  else `false`.\n     */\n    function isLaziable(func) {\n      var funcName = getFuncName(func),\n          other = lodash[funcName];\n\n      if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n        return false;\n      }\n      if (func === other) {\n        return true;\n      }\n      var data = getData(other);\n      return !!data && func === data[0];\n    }\n\n    /**\n     * Checks if `func` has its source masked.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n     */\n    function isMasked(func) {\n      return !!maskSrcKey && (maskSrcKey in func);\n    }\n\n    /**\n     * Checks if `func` is capable of being masked.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n     */\n    var isMaskable = coreJsData ? isFunction : stubFalse;\n\n    /**\n     * Checks if `value` is likely a prototype object.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n     */\n    function isPrototype(value) {\n      var Ctor = value && value.constructor,\n          proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n      return value === proto;\n    }\n\n    /**\n     * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` if suitable for strict\n     *  equality comparisons, else `false`.\n     */\n    function isStrictComparable(value) {\n      return value === value && !isObject(value);\n    }\n\n    /**\n     * A specialized version of `matchesProperty` for source values suitable\n     * for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {string} key The key of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function matchesStrictComparable(key, srcValue) {\n      return function(object) {\n        if (object == null) {\n          return false;\n        }\n        return object[key] === srcValue &&\n          (srcValue !== undefined || (key in Object(object)));\n      };\n    }\n\n    /**\n     * A specialized version of `_.memoize` which clears the memoized function's\n     * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n     *\n     * @private\n     * @param {Function} func The function to have its output memoized.\n     * @returns {Function} Returns the new memoized function.\n     */\n    function memoizeCapped(func) {\n      var result = memoize(func, function(key) {\n        if (cache.size === MAX_MEMOIZE_SIZE) {\n          cache.clear();\n        }\n        return key;\n      });\n\n      var cache = result.cache;\n      return result;\n    }\n\n    /**\n     * Merges the function metadata of `source` into `data`.\n     *\n     * Merging metadata reduces the number of wrappers used to invoke a function.\n     * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n     * may be applied regardless of execution order. Methods like `_.ary` and\n     * `_.rearg` modify function arguments, making the order in which they are\n     * executed important, preventing the merging of metadata. However, we make\n     * an exception for a safe combined case where curried functions have `_.ary`\n     * and or `_.rearg` applied.\n     *\n     * @private\n     * @param {Array} data The destination metadata.\n     * @param {Array} source The source metadata.\n     * @returns {Array} Returns `data`.\n     */\n    function mergeData(data, source) {\n      var bitmask = data[1],\n          srcBitmask = source[1],\n          newBitmask = bitmask | srcBitmask,\n          isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n      var isCombo =\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n        ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n      // Exit early if metadata can't be merged.\n      if (!(isCommon || isCombo)) {\n        return data;\n      }\n      // Use source `thisArg` if available.\n      if (srcBitmask & WRAP_BIND_FLAG) {\n        data[2] = source[2];\n        // Set when currying a bound function.\n        newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n      }\n      // Compose partial arguments.\n      var value = source[3];\n      if (value) {\n        var partials = data[3];\n        data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n      }\n      // Compose partial right arguments.\n      value = source[5];\n      if (value) {\n        partials = data[5];\n        data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n      }\n      // Use source `argPos` if available.\n      value = source[7];\n      if (value) {\n        data[7] = value;\n      }\n      // Use source `ary` if it's smaller.\n      if (srcBitmask & WRAP_ARY_FLAG) {\n        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n      }\n      // Use source `arity` if one is not provided.\n      if (data[9] == null) {\n        data[9] = source[9];\n      }\n      // Use source `func` and merge bitmasks.\n      data[0] = source[0];\n      data[1] = newBitmask;\n\n      return data;\n    }\n\n    /**\n     * This function is like\n     * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * except that it includes inherited enumerable properties.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function nativeKeysIn(object) {\n      var result = [];\n      if (object != null) {\n        for (var key in Object(object)) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Converts `value` to a string using `Object.prototype.toString`.\n     *\n     * @private\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     */\n    function objectToString(value) {\n      return nativeObjectToString.call(value);\n    }\n\n    /**\n     * A specialized version of `baseRest` which transforms the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @param {Function} transform The rest array transform.\n     * @returns {Function} Returns the new function.\n     */\n    function overRest(func, start, transform) {\n      start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n      return function() {\n        var args = arguments,\n            index = -1,\n            length = nativeMax(args.length - start, 0),\n            array = Array(length);\n\n        while (++index < length) {\n          array[index] = args[start + index];\n        }\n        index = -1;\n        var otherArgs = Array(start + 1);\n        while (++index < start) {\n          otherArgs[index] = args[index];\n        }\n        otherArgs[start] = transform(array);\n        return apply(func, this, otherArgs);\n      };\n    }\n\n    /**\n     * Gets the parent value at `path` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array} path The path to get the parent value of.\n     * @returns {*} Returns the parent value.\n     */\n    function parent(object, path) {\n      return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n    }\n\n    /**\n     * Reorder `array` according to the specified indexes where the element at\n     * the first index is assigned as the first element, the element at\n     * the second index is assigned as the second element, and so on.\n     *\n     * @private\n     * @param {Array} array The array to reorder.\n     * @param {Array} indexes The arranged array indexes.\n     * @returns {Array} Returns `array`.\n     */\n    function reorder(array, indexes) {\n      var arrLength = array.length,\n          length = nativeMin(indexes.length, arrLength),\n          oldArray = copyArray(array);\n\n      while (length--) {\n        var index = indexes[length];\n        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n      }\n      return array;\n    }\n\n    /**\n     * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the property to get.\n     * @returns {*} Returns the property value.\n     */\n    function safeGet(object, key) {\n      if (key === 'constructor' && typeof object[key] === 'function') {\n        return;\n      }\n\n      if (key == '__proto__') {\n        return;\n      }\n\n      return object[key];\n    }\n\n    /**\n     * Sets metadata for `func`.\n     *\n     * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n     * period of time, it will trip its breaker and transition to an identity\n     * function to avoid garbage collection pauses in V8. See\n     * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n     * for more details.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var setData = shortOut(baseSetData);\n\n    /**\n     * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    var setTimeout = ctxSetTimeout || function(func, wait) {\n      return root.setTimeout(func, wait);\n    };\n\n    /**\n     * Sets the `toString` method of `func` to return `string`.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */\n    var setToString = shortOut(baseSetToString);\n\n    /**\n     * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n     * with wrapper details in a comment at the top of the source body.\n     *\n     * @private\n     * @param {Function} wrapper The function to modify.\n     * @param {Function} reference The reference function.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Function} Returns `wrapper`.\n     */\n    function setWrapToString(wrapper, reference, bitmask) {\n      var source = (reference + '');\n      return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n    }\n\n    /**\n     * Creates a function that'll short out and invoke `identity` instead\n     * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n     * milliseconds.\n     *\n     * @private\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new shortable function.\n     */\n    function shortOut(func) {\n      var count = 0,\n          lastCalled = 0;\n\n      return function() {\n        var stamp = nativeNow(),\n            remaining = HOT_SPAN - (stamp - lastCalled);\n\n        lastCalled = stamp;\n        if (remaining > 0) {\n          if (++count >= HOT_COUNT) {\n            return arguments[0];\n          }\n        } else {\n          count = 0;\n        }\n        return func.apply(undefined, arguments);\n      };\n    }\n\n    /**\n     * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @param {number} [size=array.length] The size of `array`.\n     * @returns {Array} Returns `array`.\n     */\n    function shuffleSelf(array, size) {\n      var index = -1,\n          length = array.length,\n          lastIndex = length - 1;\n\n      size = size === undefined ? length : size;\n      while (++index < size) {\n        var rand = baseRandom(index, lastIndex),\n            value = array[rand];\n\n        array[rand] = array[index];\n        array[index] = value;\n      }\n      array.length = size;\n      return array;\n    }\n\n    /**\n     * Converts `string` to a property path array.\n     *\n     * @private\n     * @param {string} string The string to convert.\n     * @returns {Array} Returns the property path array.\n     */\n    var stringToPath = memoizeCapped(function(string) {\n      var result = [];\n      if (string.charCodeAt(0) === 46 /* . */) {\n        result.push('');\n      }\n      string.replace(rePropName, function(match, number, quote, subString) {\n        result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n      });\n      return result;\n    });\n\n    /**\n     * Converts `value` to a string key if it's not a string or symbol.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {string|symbol} Returns the key.\n     */\n    function toKey(value) {\n      if (typeof value == 'string' || isSymbol(value)) {\n        return value;\n      }\n      var result = (value + '');\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n    }\n\n    /**\n     * Converts `func` to its source code.\n     *\n     * @private\n     * @param {Function} func The function to convert.\n     * @returns {string} Returns the source code.\n     */\n    function toSource(func) {\n      if (func != null) {\n        try {\n          return funcToString.call(func);\n        } catch (e) {}\n        try {\n          return (func + '');\n        } catch (e) {}\n      }\n      return '';\n    }\n\n    /**\n     * Updates wrapper `details` based on `bitmask` flags.\n     *\n     * @private\n     * @returns {Array} details The details to modify.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Array} Returns `details`.\n     */\n    function updateWrapDetails(details, bitmask) {\n      arrayEach(wrapFlags, function(pair) {\n        var value = '_.' + pair[0];\n        if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n          details.push(value);\n        }\n      });\n      return details.sort();\n    }\n\n    /**\n     * Creates a clone of `wrapper`.\n     *\n     * @private\n     * @param {Object} wrapper The wrapper to clone.\n     * @returns {Object} Returns the cloned wrapper.\n     */\n    function wrapperClone(wrapper) {\n      if (wrapper instanceof LazyWrapper) {\n        return wrapper.clone();\n      }\n      var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n      result.__actions__ = copyArray(wrapper.__actions__);\n      result.__index__  = wrapper.__index__;\n      result.__values__ = wrapper.__values__;\n      return result;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of elements split into groups the length of `size`.\n     * If `array` can't be split evenly, the final chunk will be the remaining\n     * elements.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to process.\n     * @param {number} [size=1] The length of each chunk\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the new array of chunks.\n     * @example\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 2);\n     * // => [['a', 'b'], ['c', 'd']]\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 3);\n     * // => [['a', 'b', 'c'], ['d']]\n     */\n    function chunk(array, size, guard) {\n      if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n        size = 1;\n      } else {\n        size = nativeMax(toInteger(size), 0);\n      }\n      var length = array == null ? 0 : array.length;\n      if (!length || size < 1) {\n        return [];\n      }\n      var index = 0,\n          resIndex = 0,\n          result = Array(nativeCeil(length / size));\n\n      while (index < length) {\n        result[resIndex++] = baseSlice(array, index, (index += size));\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array with all falsey values removed. The values `false`, `null`,\n     * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to compact.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.compact([0, 1, false, 2, '', 3]);\n     * // => [1, 2, 3]\n     */\n    function compact(array) {\n      var index = -1,\n          length = array == null ? 0 : array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index];\n        if (value) {\n          result[resIndex++] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates a new array concatenating `array` with any additional arrays\n     * and/or values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to concatenate.\n     * @param {...*} [values] The values to concatenate.\n     * @returns {Array} Returns the new concatenated array.\n     * @example\n     *\n     * var array = [1];\n     * var other = _.concat(array, 2, [3], [[4]]);\n     *\n     * console.log(other);\n     * // => [1, 2, 3, [4]]\n     *\n     * console.log(array);\n     * // => [1]\n     */\n    function concat() {\n      var length = arguments.length;\n      if (!length) {\n        return [];\n      }\n      var args = Array(length - 1),\n          array = arguments[0],\n          index = length;\n\n      while (index--) {\n        args[index - 1] = arguments[index];\n      }\n      return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n    }\n\n    /**\n     * Creates an array of `array` values not included in the other given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * **Note:** Unlike `_.pullAll`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.without, _.xor\n     * @example\n     *\n     * _.difference([2, 1], [2, 3]);\n     * // => [1]\n     */\n    var difference = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `iteratee` which\n     * is invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var differenceBy = baseRest(function(array, values) {\n      var iteratee = last(values);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `comparator`\n     * which is invoked to compare elements of `array` to `values`. The order and\n     * references of result values are determined by the first array. The comparator\n     * is invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     *\n     * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }]\n     */\n    var differenceWith = baseRest(function(array, values) {\n      var comparator = last(values);\n      if (isArrayLikeObject(comparator)) {\n        comparator = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.drop([1, 2, 3]);\n     * // => [2, 3]\n     *\n     * _.drop([1, 2, 3], 2);\n     * // => [3]\n     *\n     * _.drop([1, 2, 3], 5);\n     * // => []\n     *\n     * _.drop([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function drop(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.dropRight([1, 2, 3]);\n     * // => [1, 2]\n     *\n     * _.dropRight([1, 2, 3], 2);\n     * // => [1]\n     *\n     * _.dropRight([1, 2, 3], 5);\n     * // => []\n     *\n     * _.dropRight([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function dropRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the end.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.dropRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropRightWhile(users, ['active', false]);\n     * // => objects for ['barney']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropRightWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the beginning.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.dropWhile(users, function(o) { return !o.active; });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropWhile(users, ['active', false]);\n     * // => objects for ['pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true)\n        : [];\n    }\n\n    /**\n     * Fills elements of `array` with `value` from `start` up to, but not\n     * including, `end`.\n     *\n     * **Note:** This method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Array\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.fill(array, 'a');\n     * console.log(array);\n     * // => ['a', 'a', 'a']\n     *\n     * _.fill(Array(3), 2);\n     * // => [2, 2, 2]\n     *\n     * _.fill([4, 6, 8, 10], '*', 1, 3);\n     * // => [4, '*', '*', 10]\n     */\n    function fill(array, value, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n        start = 0;\n        end = length;\n      }\n      return baseFill(array, value, start, end);\n    }\n\n    /**\n     * This method is like `_.find` except that it returns the index of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.findIndex(users, function(o) { return o.user == 'barney'; });\n     * // => 0\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findIndex(users, { 'user': 'fred', 'active': false });\n     * // => 1\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findIndex(users, ['active', false]);\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findIndex(users, 'active');\n     * // => 2\n     */\n    function findIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index);\n    }\n\n    /**\n     * This method is like `_.findIndex` except that it iterates over elements\n     * of `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n     * // => 2\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n     * // => 0\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastIndex(users, ['active', false]);\n     * // => 2\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastIndex(users, 'active');\n     * // => 0\n     */\n    function findLastIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length - 1;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = fromIndex < 0\n          ? nativeMax(length + index, 0)\n          : nativeMin(index, length - 1);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n    }\n\n    /**\n     * Flattens `array` a single level deep.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flatten([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, [3, [4]], 5]\n     */\n    function flatten(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, 1) : [];\n    }\n\n    /**\n     * Recursively flattens `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flattenDeep([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, 3, 4, 5]\n     */\n    function flattenDeep(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, INFINITY) : [];\n    }\n\n    /**\n     * Recursively flatten `array` up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * var array = [1, [2, [3, [4]], 5]];\n     *\n     * _.flattenDepth(array, 1);\n     * // => [1, 2, [3, [4]], 5]\n     *\n     * _.flattenDepth(array, 2);\n     * // => [1, 2, 3, [4], 5]\n     */\n    function flattenDepth(array, depth) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(array, depth);\n    }\n\n    /**\n     * The inverse of `_.toPairs`; this method returns an object composed\n     * from key-value `pairs`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} pairs The key-value pairs.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.fromPairs([['a', 1], ['b', 2]]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function fromPairs(pairs) {\n      var index = -1,\n          length = pairs == null ? 0 : pairs.length,\n          result = {};\n\n      while (++index < length) {\n        var pair = pairs[index];\n        result[pair[0]] = pair[1];\n      }\n      return result;\n    }\n\n    /**\n     * Gets the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias first\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the first element of `array`.\n     * @example\n     *\n     * _.head([1, 2, 3]);\n     * // => 1\n     *\n     * _.head([]);\n     * // => undefined\n     */\n    function head(array) {\n      return (array && array.length) ? array[0] : undefined;\n    }\n\n    /**\n     * Gets the index at which the first occurrence of `value` is found in `array`\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. If `fromIndex` is negative, it's used as the\n     * offset from the end of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.indexOf([1, 2, 1, 2], 2);\n     * // => 1\n     *\n     * // Search from the `fromIndex`.\n     * _.indexOf([1, 2, 1, 2], 2, 2);\n     * // => 3\n     */\n    function indexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseIndexOf(array, value, index);\n    }\n\n    /**\n     * Gets all but the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.initial([1, 2, 3]);\n     * // => [1, 2]\n     */\n    function initial(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 0, -1) : [];\n    }\n\n    /**\n     * Creates an array of unique values that are included in all given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersection([2, 1], [2, 3]);\n     * // => [2]\n     */\n    var intersection = baseRest(function(arrays) {\n      var mapped = arrayMap(arrays, castArrayLikeObject);\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped)\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `iteratee`\n     * which is invoked for each element of each `arrays` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [2.1]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }]\n     */\n    var intersectionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      if (iteratee === last(mapped)) {\n        iteratee = undefined;\n      } else {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `comparator`\n     * which is invoked to compare elements of `arrays`. The order and references\n     * of result values are determined by the first array. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.intersectionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }]\n     */\n    var intersectionWith = baseRest(function(arrays) {\n      var comparator = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      if (comparator) {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Converts all elements in `array` into a string separated by `separator`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to convert.\n     * @param {string} [separator=','] The element separator.\n     * @returns {string} Returns the joined string.\n     * @example\n     *\n     * _.join(['a', 'b', 'c'], '~');\n     * // => 'a~b~c'\n     */\n    function join(array, separator) {\n      return array == null ? '' : nativeJoin.call(array, separator);\n    }\n\n    /**\n     * Gets the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the last element of `array`.\n     * @example\n     *\n     * _.last([1, 2, 3]);\n     * // => 3\n     */\n    function last(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? array[length - 1] : undefined;\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it iterates over elements of\n     * `array` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.lastIndexOf([1, 2, 1, 2], 2);\n     * // => 3\n     *\n     * // Search from the `fromIndex`.\n     * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n     * // => 1\n     */\n    function lastIndexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n      }\n      return value === value\n        ? strictLastIndexOf(array, value, index)\n        : baseFindIndex(array, baseIsNaN, index, true);\n    }\n\n    /**\n     * Gets the element at index `n` of `array`. If `n` is negative, the nth\n     * element from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.11.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=0] The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     *\n     * _.nth(array, 1);\n     * // => 'b'\n     *\n     * _.nth(array, -2);\n     * // => 'c';\n     */\n    function nth(array, n) {\n      return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n    }\n\n    /**\n     * Removes all given values from `array` using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n     * to remove elements from an array by predicate.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...*} [values] The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pull(array, 'a', 'c');\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    var pull = baseRest(pullAll);\n\n    /**\n     * This method is like `_.pull` except that it accepts an array of values to remove.\n     *\n     * **Note:** Unlike `_.difference`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pullAll(array, ['a', 'c']);\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    function pullAll(array, values) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values)\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `iteratee` which is\n     * invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The iteratee is invoked with one argument: (value).\n     *\n     * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n     *\n     * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n     * console.log(array);\n     * // => [{ 'x': 2 }]\n     */\n    function pullAllBy(array, values, iteratee) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, getIteratee(iteratee, 2))\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `comparator` which\n     * is invoked to compare elements of `array` to `values`. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n     *\n     * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n     * console.log(array);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n     */\n    function pullAllWith(array, values, comparator) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, undefined, comparator)\n        : array;\n    }\n\n    /**\n     * Removes elements from `array` corresponding to `indexes` and returns an\n     * array of removed elements.\n     *\n     * **Note:** Unlike `_.at`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     * var pulled = _.pullAt(array, [1, 3]);\n     *\n     * console.log(array);\n     * // => ['a', 'c']\n     *\n     * console.log(pulled);\n     * // => ['b', 'd']\n     */\n    var pullAt = flatRest(function(array, indexes) {\n      var length = array == null ? 0 : array.length,\n          result = baseAt(array, indexes);\n\n      basePullAt(array, arrayMap(indexes, function(index) {\n        return isIndex(index, length) ? +index : index;\n      }).sort(compareAscending));\n\n      return result;\n    });\n\n    /**\n     * Removes all elements from `array` that `predicate` returns truthy for\n     * and returns an array of the removed elements. The predicate is invoked\n     * with three arguments: (value, index, array).\n     *\n     * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n     * to pull elements from an array by value.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = [1, 2, 3, 4];\n     * var evens = _.remove(array, function(n) {\n     *   return n % 2 == 0;\n     * });\n     *\n     * console.log(array);\n     * // => [1, 3]\n     *\n     * console.log(evens);\n     * // => [2, 4]\n     */\n    function remove(array, predicate) {\n      var result = [];\n      if (!(array && array.length)) {\n        return result;\n      }\n      var index = -1,\n          indexes = [],\n          length = array.length;\n\n      predicate = getIteratee(predicate, 3);\n      while (++index < length) {\n        var value = array[index];\n        if (predicate(value, index, array)) {\n          result.push(value);\n          indexes.push(index);\n        }\n      }\n      basePullAt(array, indexes);\n      return result;\n    }\n\n    /**\n     * Reverses `array` so that the first element becomes the last, the second\n     * element becomes the second to last, and so on.\n     *\n     * **Note:** This method mutates `array` and is based on\n     * [`Array#reverse`](https://mdn.io/Array/reverse).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.reverse(array);\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function reverse(array) {\n      return array == null ? array : nativeReverse.call(array);\n    }\n\n    /**\n     * Creates a slice of `array` from `start` up to, but not including, `end`.\n     *\n     * **Note:** This method is used instead of\n     * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n     * returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function slice(array, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n        start = 0;\n        end = length;\n      }\n      else {\n        start = start == null ? 0 : toInteger(start);\n        end = end === undefined ? length : toInteger(end);\n      }\n      return baseSlice(array, start, end);\n    }\n\n    /**\n     * Uses a binary search to determine the lowest index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedIndex([30, 50], 40);\n     * // => 1\n     */\n    function sortedIndex(array, value) {\n      return baseSortedIndex(array, value);\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 0\n     */\n    function sortedIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 1\n     */\n    function sortedIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value);\n        if (index < length && eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it returns the highest\n     * index at which `value` should be inserted into `array` in order to\n     * maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n     * // => 4\n     */\n    function sortedLastIndex(array, value) {\n      return baseSortedIndex(array, value, true);\n    }\n\n    /**\n     * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 1\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 1\n     */\n    function sortedLastIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n    }\n\n    /**\n     * This method is like `_.lastIndexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 3\n     */\n    function sortedLastIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value, true) - 1;\n        if (eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.uniq` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniq([1, 1, 2]);\n     * // => [1, 2]\n     */\n    function sortedUniq(array) {\n      return (array && array.length)\n        ? baseSortedUniq(array)\n        : [];\n    }\n\n    /**\n     * This method is like `_.uniqBy` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n     * // => [1.1, 2.3]\n     */\n    function sortedUniqBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSortedUniq(array, getIteratee(iteratee, 2))\n        : [];\n    }\n\n    /**\n     * Gets all but the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.tail([1, 2, 3]);\n     * // => [2, 3]\n     */\n    function tail(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 1, length) : [];\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.take([1, 2, 3]);\n     * // => [1]\n     *\n     * _.take([1, 2, 3], 2);\n     * // => [1, 2]\n     *\n     * _.take([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.take([1, 2, 3], 0);\n     * // => []\n     */\n    function take(array, n, guard) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.takeRight([1, 2, 3]);\n     * // => [3]\n     *\n     * _.takeRight([1, 2, 3], 2);\n     * // => [2, 3]\n     *\n     * _.takeRight([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.takeRight([1, 2, 3], 0);\n     * // => []\n     */\n    function takeRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the end. Elements are\n     * taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.takeRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeRightWhile(users, ['active', false]);\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeRightWhile(users, 'active');\n     * // => []\n     */\n    function takeRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), false, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the beginning. Elements\n     * are taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.takeWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeWhile(users, ['active', false]);\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeWhile(users, 'active');\n     * // => []\n     */\n    function takeWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3))\n        : [];\n    }\n\n    /**\n     * Creates an array of unique values, in order, from all given arrays using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.union([2], [1, 2]);\n     * // => [2, 1]\n     */\n    var union = baseRest(function(arrays) {\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which uniqueness is computed. Result values are chosen from the first\n     * array in which the value occurs. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    var unionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `comparator` which\n     * is invoked to compare elements of `arrays`. Result values are chosen from\n     * the first array in which the value occurs. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.unionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var unionWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n    });\n\n    /**\n     * Creates a duplicate-free version of an array, using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons, in which only the first occurrence of each element\n     * is kept. The order of result values is determined by the order they occur\n     * in the array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniq([2, 1, 2]);\n     * // => [2, 1]\n     */\n    function uniq(array) {\n      return (array && array.length) ? baseUniq(array) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * uniqueness is computed. The order of result values is determined by the\n     * order they occur in the array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    function uniqBy(array, iteratee) {\n      return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `comparator` which\n     * is invoked to compare elements of `array`. The order of result values is\n     * determined by the order they occur in the array.The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.uniqWith(objects, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n     */\n    function uniqWith(array, comparator) {\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts an array of grouped\n     * elements and creates an array regrouping the elements to their pre-zip\n     * configuration.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.2.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     *\n     * _.unzip(zipped);\n     * // => [['a', 'b'], [1, 2], [true, false]]\n     */\n    function unzip(array) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var length = 0;\n      array = arrayFilter(array, function(group) {\n        if (isArrayLikeObject(group)) {\n          length = nativeMax(group.length, length);\n          return true;\n        }\n      });\n      return baseTimes(length, function(index) {\n        return arrayMap(array, baseProperty(index));\n      });\n    }\n\n    /**\n     * This method is like `_.unzip` except that it accepts `iteratee` to specify\n     * how regrouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  regrouped values.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n     * // => [[1, 10, 100], [2, 20, 200]]\n     *\n     * _.unzipWith(zipped, _.add);\n     * // => [3, 30, 300]\n     */\n    function unzipWith(array, iteratee) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var result = unzip(array);\n      if (iteratee == null) {\n        return result;\n      }\n      return arrayMap(result, function(group) {\n        return apply(iteratee, undefined, group);\n      });\n    }\n\n    /**\n     * Creates an array excluding all given values using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.pull`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...*} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.xor\n     * @example\n     *\n     * _.without([2, 1, 2, 3], 1, 2);\n     * // => [3]\n     */\n    var without = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, values)\n        : [];\n    });\n\n    /**\n     * Creates an array of unique values that is the\n     * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n     * of the given arrays. The order of result values is determined by the order\n     * they occur in the arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.without\n     * @example\n     *\n     * _.xor([2, 1], [2, 3]);\n     * // => [1, 3]\n     */\n    var xor = baseRest(function(arrays) {\n      return baseXor(arrayFilter(arrays, isArrayLikeObject));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which by which they're compared. The order of result values is determined\n     * by the order they occur in the arrays. The iteratee is invoked with one\n     * argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2, 3.4]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var xorBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `comparator` which is\n     * invoked to compare elements of `arrays`. The order of result values is\n     * determined by the order they occur in the arrays. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.xorWith(objects, others, _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var xorWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n    });\n\n    /**\n     * Creates an array of grouped elements, the first of which contains the\n     * first elements of the given arrays, the second of which contains the\n     * second elements of the given arrays, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     */\n    var zip = baseRest(unzip);\n\n    /**\n     * This method is like `_.fromPairs` except that it accepts two arrays,\n     * one of property identifiers and one of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.4.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObject(['a', 'b'], [1, 2]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function zipObject(props, values) {\n      return baseZipObject(props || [], values || [], assignValue);\n    }\n\n    /**\n     * This method is like `_.zipObject` except that it supports property paths.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n     * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n     */\n    function zipObjectDeep(props, values) {\n      return baseZipObject(props || [], values || [], baseSet);\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts `iteratee` to specify\n     * how grouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  grouped values.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n     *   return a + b + c;\n     * });\n     * // => [111, 222]\n     */\n    var zipWith = baseRest(function(arrays) {\n      var length = arrays.length,\n          iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n      iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n      return unzipWith(arrays, iteratee);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n     * chain sequences enabled. The result of such sequences must be unwrapped\n     * with `_#value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Seq\n     * @param {*} value The value to wrap.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36 },\n     *   { 'user': 'fred',    'age': 40 },\n     *   { 'user': 'pebbles', 'age': 1 }\n     * ];\n     *\n     * var youngest = _\n     *   .chain(users)\n     *   .sortBy('age')\n     *   .map(function(o) {\n     *     return o.user + ' is ' + o.age;\n     *   })\n     *   .head()\n     *   .value();\n     * // => 'pebbles is 1'\n     */\n    function chain(value) {\n      var result = lodash(value);\n      result.__chain__ = true;\n      return result;\n    }\n\n    /**\n     * This method invokes `interceptor` and returns `value`. The interceptor\n     * is invoked with one argument; (value). The purpose of this method is to\n     * \"tap into\" a method chain sequence in order to modify intermediate results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * _([1, 2, 3])\n     *  .tap(function(array) {\n     *    // Mutate input array.\n     *    array.pop();\n     *  })\n     *  .reverse()\n     *  .value();\n     * // => [2, 1]\n     */\n    function tap(value, interceptor) {\n      interceptor(value);\n      return value;\n    }\n\n    /**\n     * This method is like `_.tap` except that it returns the result of `interceptor`.\n     * The purpose of this method is to \"pass thru\" values replacing intermediate\n     * results in a method chain sequence.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns the result of `interceptor`.\n     * @example\n     *\n     * _('  abc  ')\n     *  .chain()\n     *  .trim()\n     *  .thru(function(value) {\n     *    return [value];\n     *  })\n     *  .value();\n     * // => ['abc']\n     */\n    function thru(value, interceptor) {\n      return interceptor(value);\n    }\n\n    /**\n     * This method is the wrapper version of `_.at`.\n     *\n     * @name at\n     * @memberOf _\n     * @since 1.0.0\n     * @category Seq\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _(object).at(['a[0].b.c', 'a[1]']).value();\n     * // => [3, 4]\n     */\n    var wrapperAt = flatRest(function(paths) {\n      var length = paths.length,\n          start = length ? paths[0] : 0,\n          value = this.__wrapped__,\n          interceptor = function(object) { return baseAt(object, paths); };\n\n      if (length > 1 || this.__actions__.length ||\n          !(value instanceof LazyWrapper) || !isIndex(start)) {\n        return this.thru(interceptor);\n      }\n      value = value.slice(start, +start + (length ? 1 : 0));\n      value.__actions__.push({\n        'func': thru,\n        'args': [interceptor],\n        'thisArg': undefined\n      });\n      return new LodashWrapper(value, this.__chain__).thru(function(array) {\n        if (length && !array.length) {\n          array.push(undefined);\n        }\n        return array;\n      });\n    });\n\n    /**\n     * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n     *\n     * @name chain\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 40 }\n     * ];\n     *\n     * // A sequence without explicit chaining.\n     * _(users).head();\n     * // => { 'user': 'barney', 'age': 36 }\n     *\n     * // A sequence with explicit chaining.\n     * _(users)\n     *   .chain()\n     *   .head()\n     *   .pick('user')\n     *   .value();\n     * // => { 'user': 'barney' }\n     */\n    function wrapperChain() {\n      return chain(this);\n    }\n\n    /**\n     * Executes the chain sequence and returns the wrapped result.\n     *\n     * @name commit\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2];\n     * var wrapped = _(array).push(3);\n     *\n     * console.log(array);\n     * // => [1, 2]\n     *\n     * wrapped = wrapped.commit();\n     * console.log(array);\n     * // => [1, 2, 3]\n     *\n     * wrapped.last();\n     * // => 3\n     *\n     * console.log(array);\n     * // => [1, 2, 3]\n     */\n    function wrapperCommit() {\n      return new LodashWrapper(this.value(), this.__chain__);\n    }\n\n    /**\n     * Gets the next value on a wrapped object following the\n     * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n     *\n     * @name next\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the next iterator value.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 1 }\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 2 }\n     *\n     * wrapped.next();\n     * // => { 'done': true, 'value': undefined }\n     */\n    function wrapperNext() {\n      if (this.__values__ === undefined) {\n        this.__values__ = toArray(this.value());\n      }\n      var done = this.__index__ >= this.__values__.length,\n          value = done ? undefined : this.__values__[this.__index__++];\n\n      return { 'done': done, 'value': value };\n    }\n\n    /**\n     * Enables the wrapper to be iterable.\n     *\n     * @name Symbol.iterator\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the wrapper object.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped[Symbol.iterator]() === wrapped;\n     * // => true\n     *\n     * Array.from(wrapped);\n     * // => [1, 2]\n     */\n    function wrapperToIterator() {\n      return this;\n    }\n\n    /**\n     * Creates a clone of the chain sequence planting `value` as the wrapped value.\n     *\n     * @name plant\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @param {*} value The value to plant.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2]).map(square);\n     * var other = wrapped.plant([3, 4]);\n     *\n     * other.value();\n     * // => [9, 16]\n     *\n     * wrapped.value();\n     * // => [1, 4]\n     */\n    function wrapperPlant(value) {\n      var result,\n          parent = this;\n\n      while (parent instanceof baseLodash) {\n        var clone = wrapperClone(parent);\n        clone.__index__ = 0;\n        clone.__values__ = undefined;\n        if (result) {\n          previous.__wrapped__ = clone;\n        } else {\n          result = clone;\n        }\n        var previous = clone;\n        parent = parent.__wrapped__;\n      }\n      previous.__wrapped__ = value;\n      return result;\n    }\n\n    /**\n     * This method is the wrapper version of `_.reverse`.\n     *\n     * **Note:** This method mutates the wrapped array.\n     *\n     * @name reverse\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _(array).reverse().value()\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function wrapperReverse() {\n      var value = this.__wrapped__;\n      if (value instanceof LazyWrapper) {\n        var wrapped = value;\n        if (this.__actions__.length) {\n          wrapped = new LazyWrapper(this);\n        }\n        wrapped = wrapped.reverse();\n        wrapped.__actions__.push({\n          'func': thru,\n          'args': [reverse],\n          'thisArg': undefined\n        });\n        return new LodashWrapper(wrapped, this.__chain__);\n      }\n      return this.thru(reverse);\n    }\n\n    /**\n     * Executes the chain sequence to resolve the unwrapped value.\n     *\n     * @name value\n     * @memberOf _\n     * @since 0.1.0\n     * @alias toJSON, valueOf\n     * @category Seq\n     * @returns {*} Returns the resolved unwrapped value.\n     * @example\n     *\n     * _([1, 2, 3]).value();\n     * // => [1, 2, 3]\n     */\n    function wrapperValue() {\n      return baseWrapperValue(this.__wrapped__, this.__actions__);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the number of times the key was returned by `iteratee`. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.countBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': 1, '6': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.countBy(['one', 'two', 'three'], 'length');\n     * // => { '3': 2, '5': 1 }\n     */\n    var countBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        ++result[key];\n      } else {\n        baseAssignValue(result, key, 1);\n      }\n    });\n\n    /**\n     * Checks if `predicate` returns truthy for **all** elements of `collection`.\n     * Iteration is stopped once `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * **Note:** This method returns `true` for\n     * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n     * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n     * elements of empty collections.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.every([true, 1, null, 'yes'], Boolean);\n     * // => false\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.every(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.every(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.every(users, 'active');\n     * // => false\n     */\n    function every(collection, predicate, guard) {\n      var func = isArray(collection) ? arrayEvery : baseEvery;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning an array of all elements\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * **Note:** Unlike `_.remove`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.reject\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * _.filter(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, { 'age': 36, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.filter(users, 'active');\n     * // => objects for ['barney']\n     */\n    function filter(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning the first element\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': true },\n     *   { 'user': 'fred',    'age': 40, 'active': false },\n     *   { 'user': 'pebbles', 'age': 1,  'active': true }\n     * ];\n     *\n     * _.find(users, function(o) { return o.age < 40; });\n     * // => object for 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.find(users, { 'age': 1, 'active': true });\n     * // => object for 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.find(users, ['active', false]);\n     * // => object for 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.find(users, 'active');\n     * // => object for 'barney'\n     */\n    var find = createFind(findIndex);\n\n    /**\n     * This method is like `_.find` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=collection.length-1] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * _.findLast([1, 2, 3, 4], function(n) {\n     *   return n % 2 == 1;\n     * });\n     * // => 3\n     */\n    var findLast = createFind(findLastIndex);\n\n    /**\n     * Creates a flattened array of values by running each element in `collection`\n     * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n     * with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [n, n];\n     * }\n     *\n     * _.flatMap([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMap(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), 1);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDeep([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMapDeep(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), INFINITY);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDepth([1, 2], duplicate, 2);\n     * // => [[1, 1], [2, 2]]\n     */\n    function flatMapDepth(collection, iteratee, depth) {\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(map(collection, iteratee), depth);\n    }\n\n    /**\n     * Iterates over elements of `collection` and invokes `iteratee` for each element.\n     * The iteratee is invoked with three arguments: (value, index|key, collection).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n     * property are iterated like arrays. To avoid this behavior use `_.forIn`\n     * or `_.forOwn` for object iteration.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias each\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEachRight\n     * @example\n     *\n     * _.forEach([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `1` then `2`.\n     *\n     * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forEach(collection, iteratee) {\n      var func = isArray(collection) ? arrayEach : baseEach;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forEach` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @alias eachRight\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEach\n     * @example\n     *\n     * _.forEachRight([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `2` then `1`.\n     */\n    function forEachRight(collection, iteratee) {\n      var func = isArray(collection) ? arrayEachRight : baseEachRight;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The order of grouped values\n     * is determined by the order they occur in `collection`. The corresponding\n     * value of each key is an array of elements responsible for generating the\n     * key. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': [4.2], '6': [6.1, 6.3] }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.groupBy(['one', 'two', 'three'], 'length');\n     * // => { '3': ['one', 'two'], '5': ['three'] }\n     */\n    var groupBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        result[key].push(value);\n      } else {\n        baseAssignValue(result, key, [value]);\n      }\n    });\n\n    /**\n     * Checks if `value` is in `collection`. If `collection` is a string, it's\n     * checked for a substring of `value`, otherwise\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * is used for equality comparisons. If `fromIndex` is negative, it's used as\n     * the offset from the end of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {boolean} Returns `true` if `value` is found, else `false`.\n     * @example\n     *\n     * _.includes([1, 2, 3], 1);\n     * // => true\n     *\n     * _.includes([1, 2, 3], 1, 2);\n     * // => false\n     *\n     * _.includes({ 'a': 1, 'b': 2 }, 1);\n     * // => true\n     *\n     * _.includes('abcd', 'bc');\n     * // => true\n     */\n    function includes(collection, value, fromIndex, guard) {\n      collection = isArrayLike(collection) ? collection : values(collection);\n      fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n      var length = collection.length;\n      if (fromIndex < 0) {\n        fromIndex = nativeMax(length + fromIndex, 0);\n      }\n      return isString(collection)\n        ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n        : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n    }\n\n    /**\n     * Invokes the method at `path` of each element in `collection`, returning\n     * an array of the results of each invoked method. Any additional arguments\n     * are provided to each invoked method. If `path` is a function, it's invoked\n     * for, and `this` bound to, each element in `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array|Function|string} path The path of the method to invoke or\n     *  the function invoked per iteration.\n     * @param {...*} [args] The arguments to invoke each method with.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n     * // => [[1, 5, 7], [1, 2, 3]]\n     *\n     * _.invokeMap([123, 456], String.prototype.split, '');\n     * // => [['1', '2', '3'], ['4', '5', '6']]\n     */\n    var invokeMap = baseRest(function(collection, path, args) {\n      var index = -1,\n          isFunc = typeof path == 'function',\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value) {\n        result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n      });\n      return result;\n    });\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the last element responsible for generating the key. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * var array = [\n     *   { 'dir': 'left', 'code': 97 },\n     *   { 'dir': 'right', 'code': 100 }\n     * ];\n     *\n     * _.keyBy(array, function(o) {\n     *   return String.fromCharCode(o.code);\n     * });\n     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n     *\n     * _.keyBy(array, 'dir');\n     * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n     */\n    var keyBy = createAggregator(function(result, value, key) {\n      baseAssignValue(result, key, value);\n    });\n\n    /**\n     * Creates an array of values by running each element in `collection` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n     *\n     * The guarded methods are:\n     * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n     * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n     * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n     * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * _.map([4, 8], square);\n     * // => [16, 64]\n     *\n     * _.map({ 'a': 4, 'b': 8 }, square);\n     * // => [16, 64] (iteration order is not guaranteed)\n     *\n     * var users = [\n     *   { 'user': 'barney' },\n     *   { 'user': 'fred' }\n     * ];\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, 'user');\n     * // => ['barney', 'fred']\n     */\n    function map(collection, iteratee) {\n      var func = isArray(collection) ? arrayMap : baseMap;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.sortBy` except that it allows specifying the sort\n     * orders of the iteratees to sort by. If `orders` is unspecified, all values\n     * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n     * descending or \"asc\" for ascending sort order of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @param {string[]} [orders] The sort orders of `iteratees`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 34 },\n     *   { 'user': 'fred',   'age': 40 },\n     *   { 'user': 'barney', 'age': 36 }\n     * ];\n     *\n     * // Sort by `user` in ascending order and by `age` in descending order.\n     * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n     */\n    function orderBy(collection, iteratees, orders, guard) {\n      if (collection == null) {\n        return [];\n      }\n      if (!isArray(iteratees)) {\n        iteratees = iteratees == null ? [] : [iteratees];\n      }\n      orders = guard ? undefined : orders;\n      if (!isArray(orders)) {\n        orders = orders == null ? [] : [orders];\n      }\n      return baseOrderBy(collection, iteratees, orders);\n    }\n\n    /**\n     * Creates an array of elements split into two groups, the first of which\n     * contains elements `predicate` returns truthy for, the second of which\n     * contains elements `predicate` returns falsey for. The predicate is\n     * invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of grouped elements.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': false },\n     *   { 'user': 'fred',    'age': 40, 'active': true },\n     *   { 'user': 'pebbles', 'age': 1,  'active': false }\n     * ];\n     *\n     * _.partition(users, function(o) { return o.active; });\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.partition(users, { 'age': 1, 'active': false });\n     * // => objects for [['pebbles'], ['barney', 'fred']]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.partition(users, ['active', false]);\n     * // => objects for [['barney', 'pebbles'], ['fred']]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.partition(users, 'active');\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     */\n    var partition = createAggregator(function(result, value, key) {\n      result[key ? 0 : 1].push(value);\n    }, function() { return [[], []]; });\n\n    /**\n     * Reduces `collection` to a value which is the accumulated result of running\n     * each element in `collection` thru `iteratee`, where each successive\n     * invocation is supplied the return value of the previous. If `accumulator`\n     * is not given, the first element of `collection` is used as the initial\n     * value. The iteratee is invoked with four arguments:\n     * (accumulator, value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.reduce`, `_.reduceRight`, and `_.transform`.\n     *\n     * The guarded methods are:\n     * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n     * and `sortBy`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduceRight\n     * @example\n     *\n     * _.reduce([1, 2], function(sum, n) {\n     *   return sum + n;\n     * }, 0);\n     * // => 3\n     *\n     * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     *   return result;\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n     */\n    function reduce(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduce : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n    }\n\n    /**\n     * This method is like `_.reduce` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduce\n     * @example\n     *\n     * var array = [[0, 1], [2, 3], [4, 5]];\n     *\n     * _.reduceRight(array, function(flattened, other) {\n     *   return flattened.concat(other);\n     * }, []);\n     * // => [4, 5, 2, 3, 0, 1]\n     */\n    function reduceRight(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduceRight : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n    }\n\n    /**\n     * The opposite of `_.filter`; this method returns the elements of `collection`\n     * that `predicate` does **not** return truthy for.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.filter\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': true }\n     * ];\n     *\n     * _.reject(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.reject(users, { 'age': 40, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.reject(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.reject(users, 'active');\n     * // => objects for ['barney']\n     */\n    function reject(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, negate(getIteratee(predicate, 3)));\n    }\n\n    /**\n     * Gets a random element from `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     * @example\n     *\n     * _.sample([1, 2, 3, 4]);\n     * // => 2\n     */\n    function sample(collection) {\n      var func = isArray(collection) ? arraySample : baseSample;\n      return func(collection);\n    }\n\n    /**\n     * Gets `n` random elements at unique keys from `collection` up to the\n     * size of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} [n=1] The number of elements to sample.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the random elements.\n     * @example\n     *\n     * _.sampleSize([1, 2, 3], 2);\n     * // => [3, 1]\n     *\n     * _.sampleSize([1, 2, 3], 4);\n     * // => [2, 3, 1]\n     */\n    function sampleSize(collection, n, guard) {\n      if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n      return func(collection, n);\n    }\n\n    /**\n     * Creates an array of shuffled values, using a version of the\n     * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     * @example\n     *\n     * _.shuffle([1, 2, 3, 4]);\n     * // => [4, 1, 3, 2]\n     */\n    function shuffle(collection) {\n      var func = isArray(collection) ? arrayShuffle : baseShuffle;\n      return func(collection);\n    }\n\n    /**\n     * Gets the size of `collection` by returning its length for array-like\n     * values or the number of own enumerable string keyed properties for objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @returns {number} Returns the collection size.\n     * @example\n     *\n     * _.size([1, 2, 3]);\n     * // => 3\n     *\n     * _.size({ 'a': 1, 'b': 2 });\n     * // => 2\n     *\n     * _.size('pebbles');\n     * // => 7\n     */\n    function size(collection) {\n      if (collection == null) {\n        return 0;\n      }\n      if (isArrayLike(collection)) {\n        return isString(collection) ? stringSize(collection) : collection.length;\n      }\n      var tag = getTag(collection);\n      if (tag == mapTag || tag == setTag) {\n        return collection.size;\n      }\n      return baseKeys(collection).length;\n    }\n\n    /**\n     * Checks if `predicate` returns truthy for **any** element of `collection`.\n     * Iteration is stopped once `predicate` returns truthy. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.some([null, 0, 'yes', false], Boolean);\n     * // => true\n     *\n     * var users = [\n     *   { 'user': 'barney', 'active': true },\n     *   { 'user': 'fred',   'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.some(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.some(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.some(users, 'active');\n     * // => true\n     */\n    function some(collection, predicate, guard) {\n      var func = isArray(collection) ? arraySome : baseSome;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Creates an array of elements, sorted in ascending order by the results of\n     * running each element in a collection thru each iteratee. This method\n     * performs a stable sort, that is, it preserves the original sort order of\n     * equal elements. The iteratees are invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 40 },\n     *   { 'user': 'barney', 'age': 34 }\n     * ];\n     *\n     * _.sortBy(users, [function(o) { return o.user; }]);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n     *\n     * _.sortBy(users, ['user', 'age']);\n     * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]\n     */\n    var sortBy = baseRest(function(collection, iteratees) {\n      if (collection == null) {\n        return [];\n      }\n      var length = iteratees.length;\n      if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n        iteratees = [];\n      } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n        iteratees = [iteratees[0]];\n      }\n      return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Gets the timestamp of the number of milliseconds that have elapsed since\n     * the Unix epoch (1 January 1970 00:00:00 UTC).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Date\n     * @returns {number} Returns the timestamp.\n     * @example\n     *\n     * _.defer(function(stamp) {\n     *   console.log(_.now() - stamp);\n     * }, _.now());\n     * // => Logs the number of milliseconds it took for the deferred invocation.\n     */\n    var now = ctxNow || function() {\n      return root.Date.now();\n    };\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The opposite of `_.before`; this method creates a function that invokes\n     * `func` once it's called `n` or more times.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {number} n The number of calls before `func` is invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var saves = ['profile', 'settings'];\n     *\n     * var done = _.after(saves.length, function() {\n     *   console.log('done saving!');\n     * });\n     *\n     * _.forEach(saves, function(type) {\n     *   asyncSave({ 'type': type, 'complete': done });\n     * });\n     * // => Logs 'done saving!' after the two async saves have completed.\n     */\n    function after(n, func) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n < 1) {\n          return func.apply(this, arguments);\n        }\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func`, with up to `n` arguments,\n     * ignoring any additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @param {number} [n=func.length] The arity cap.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n     * // => [6, 8, 10]\n     */\n    function ary(func, n, guard) {\n      n = guard ? undefined : n;\n      n = (func && n == null) ? func.length : n;\n      return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n    }\n\n    /**\n     * Creates a function that invokes `func`, with the `this` binding and arguments\n     * of the created function, while it's called less than `n` times. Subsequent\n     * calls to the created function return the result of the last `func` invocation.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {number} n The number of calls at which `func` is no longer invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * jQuery(element).on('click', _.before(5, addContactToList));\n     * // => Allows adding up to 4 contacts to the list.\n     */\n    function before(n, func) {\n      var result;\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n > 0) {\n          result = func.apply(this, arguments);\n        }\n        if (n <= 1) {\n          func = undefined;\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of `thisArg`\n     * and `partials` prepended to the arguments it receives.\n     *\n     * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n     * property of bound functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to bind.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * function greet(greeting, punctuation) {\n     *   return greeting + ' ' + this.user + punctuation;\n     * }\n     *\n     * var object = { 'user': 'fred' };\n     *\n     * var bound = _.bind(greet, object, 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bind(greet, object, _, '!');\n     * bound('hi');\n     * // => 'hi fred!'\n     */\n    var bind = baseRest(function(func, thisArg, partials) {\n      var bitmask = WRAP_BIND_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bind));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(func, bitmask, thisArg, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes the method at `object[key]` with `partials`\n     * prepended to the arguments it receives.\n     *\n     * This method differs from `_.bind` by allowing bound functions to reference\n     * methods that may be redefined or don't yet exist. See\n     * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n     * for more details.\n     *\n     * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Function\n     * @param {Object} object The object to invoke the method on.\n     * @param {string} key The key of the method.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * var object = {\n     *   'user': 'fred',\n     *   'greet': function(greeting, punctuation) {\n     *     return greeting + ' ' + this.user + punctuation;\n     *   }\n     * };\n     *\n     * var bound = _.bindKey(object, 'greet', 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * object.greet = function(greeting, punctuation) {\n     *   return greeting + 'ya ' + this.user + punctuation;\n     * };\n     *\n     * bound('!');\n     * // => 'hiya fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bindKey(object, 'greet', _, '!');\n     * bound('hi');\n     * // => 'hiya fred!'\n     */\n    var bindKey = baseRest(function(object, key, partials) {\n      var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bindKey));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(key, bitmask, object, partials, holders);\n    });\n\n    /**\n     * Creates a function that accepts arguments of `func` and either invokes\n     * `func` returning its result, if at least `arity` number of arguments have\n     * been provided, or returns a function that accepts the remaining `func`\n     * arguments, and so on. The arity of `func` may be specified if `func.length`\n     * is not sufficient.\n     *\n     * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curry(abc);\n     *\n     * curried(1)(2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(1)(_, 3)(2);\n     * // => [1, 2, 3]\n     */\n    function curry(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curry.placeholder;\n      return result;\n    }\n\n    /**\n     * This method is like `_.curry` except that arguments are applied to `func`\n     * in the manner of `_.partialRight` instead of `_.partial`.\n     *\n     * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curryRight(abc);\n     *\n     * curried(3)(2)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(2, 3)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(3)(1, _)(2);\n     * // => [1, 2, 3]\n     */\n    function curryRight(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curryRight.placeholder;\n      return result;\n    }\n\n    /**\n     * Creates a debounced function that delays invoking `func` until after `wait`\n     * milliseconds have elapsed since the last time the debounced function was\n     * invoked. The debounced function comes with a `cancel` method to cancel\n     * delayed `func` invocations and a `flush` method to immediately invoke them.\n     * Provide `options` to indicate whether `func` should be invoked on the\n     * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n     * with the last arguments provided to the debounced function. Subsequent\n     * calls to the debounced function return the result of the last `func`\n     * invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the debounced function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.debounce` and `_.throttle`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to debounce.\n     * @param {number} [wait=0] The number of milliseconds to delay.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=false]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {number} [options.maxWait]\n     *  The maximum time `func` is allowed to be delayed before it's invoked.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new debounced function.\n     * @example\n     *\n     * // Avoid costly calculations while the window size is in flux.\n     * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n     *\n     * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n     * jQuery(element).on('click', _.debounce(sendMail, 300, {\n     *   'leading': true,\n     *   'trailing': false\n     * }));\n     *\n     * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n     * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n     * var source = new EventSource('/stream');\n     * jQuery(source).on('message', debounced);\n     *\n     * // Cancel the trailing debounced invocation.\n     * jQuery(window).on('popstate', debounced.cancel);\n     */\n    function debounce(func, wait, options) {\n      var lastArgs,\n          lastThis,\n          maxWait,\n          result,\n          timerId,\n          lastCallTime,\n          lastInvokeTime = 0,\n          leading = false,\n          maxing = false,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      wait = toNumber(wait) || 0;\n      if (isObject(options)) {\n        leading = !!options.leading;\n        maxing = 'maxWait' in options;\n        maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n\n      function invokeFunc(time) {\n        var args = lastArgs,\n            thisArg = lastThis;\n\n        lastArgs = lastThis = undefined;\n        lastInvokeTime = time;\n        result = func.apply(thisArg, args);\n        return result;\n      }\n\n      function leadingEdge(time) {\n        // Reset any `maxWait` timer.\n        lastInvokeTime = time;\n        // Start the timer for the trailing edge.\n        timerId = setTimeout(timerExpired, wait);\n        // Invoke the leading edge.\n        return leading ? invokeFunc(time) : result;\n      }\n\n      function remainingWait(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime,\n            timeWaiting = wait - timeSinceLastCall;\n\n        return maxing\n          ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n          : timeWaiting;\n      }\n\n      function shouldInvoke(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime;\n\n        // Either this is the first call, activity has stopped and we're at the\n        // trailing edge, the system time has gone backwards and we're treating\n        // it as the trailing edge, or we've hit the `maxWait` limit.\n        return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n          (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n      }\n\n      function timerExpired() {\n        var time = now();\n        if (shouldInvoke(time)) {\n          return trailingEdge(time);\n        }\n        // Restart the timer.\n        timerId = setTimeout(timerExpired, remainingWait(time));\n      }\n\n      function trailingEdge(time) {\n        timerId = undefined;\n\n        // Only invoke if we have `lastArgs` which means `func` has been\n        // debounced at least once.\n        if (trailing && lastArgs) {\n          return invokeFunc(time);\n        }\n        lastArgs = lastThis = undefined;\n        return result;\n      }\n\n      function cancel() {\n        if (timerId !== undefined) {\n          clearTimeout(timerId);\n        }\n        lastInvokeTime = 0;\n        lastArgs = lastCallTime = lastThis = timerId = undefined;\n      }\n\n      function flush() {\n        return timerId === undefined ? result : trailingEdge(now());\n      }\n\n      function debounced() {\n        var time = now(),\n            isInvoking = shouldInvoke(time);\n\n        lastArgs = arguments;\n        lastThis = this;\n        lastCallTime = time;\n\n        if (isInvoking) {\n          if (timerId === undefined) {\n            return leadingEdge(lastCallTime);\n          }\n          if (maxing) {\n            // Handle invocations in a tight loop.\n            clearTimeout(timerId);\n            timerId = setTimeout(timerExpired, wait);\n            return invokeFunc(lastCallTime);\n          }\n        }\n        if (timerId === undefined) {\n          timerId = setTimeout(timerExpired, wait);\n        }\n        return result;\n      }\n      debounced.cancel = cancel;\n      debounced.flush = flush;\n      return debounced;\n    }\n\n    /**\n     * Defers invoking the `func` until the current call stack has cleared. Any\n     * additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to defer.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.defer(function(text) {\n     *   console.log(text);\n     * }, 'deferred');\n     * // => Logs 'deferred' after one millisecond.\n     */\n    var defer = baseRest(function(func, args) {\n      return baseDelay(func, 1, args);\n    });\n\n    /**\n     * Invokes `func` after `wait` milliseconds. Any additional arguments are\n     * provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.delay(function(text) {\n     *   console.log(text);\n     * }, 1000, 'later');\n     * // => Logs 'later' after one second.\n     */\n    var delay = baseRest(function(func, wait, args) {\n      return baseDelay(func, toNumber(wait) || 0, args);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments reversed.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to flip arguments for.\n     * @returns {Function} Returns the new flipped function.\n     * @example\n     *\n     * var flipped = _.flip(function() {\n     *   return _.toArray(arguments);\n     * });\n     *\n     * flipped('a', 'b', 'c', 'd');\n     * // => ['d', 'c', 'b', 'a']\n     */\n    function flip(func) {\n      return createWrap(func, WRAP_FLIP_FLAG);\n    }\n\n    /**\n     * Creates a function that memoizes the result of `func`. If `resolver` is\n     * provided, it determines the cache key for storing the result based on the\n     * arguments provided to the memoized function. By default, the first argument\n     * provided to the memoized function is used as the map cache key. The `func`\n     * is invoked with the `this` binding of the memoized function.\n     *\n     * **Note:** The cache is exposed as the `cache` property on the memoized\n     * function. Its creation may be customized by replacing the `_.memoize.Cache`\n     * constructor with one whose instances implement the\n     * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n     * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to have its output memoized.\n     * @param {Function} [resolver] The function to resolve the cache key.\n     * @returns {Function} Returns the new memoized function.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     * var other = { 'c': 3, 'd': 4 };\n     *\n     * var values = _.memoize(_.values);\n     * values(object);\n     * // => [1, 2]\n     *\n     * values(other);\n     * // => [3, 4]\n     *\n     * object.a = 2;\n     * values(object);\n     * // => [1, 2]\n     *\n     * // Modify the result cache.\n     * values.cache.set(object, ['a', 'b']);\n     * values(object);\n     * // => ['a', 'b']\n     *\n     * // Replace `_.memoize.Cache`.\n     * _.memoize.Cache = WeakMap;\n     */\n    function memoize(func, resolver) {\n      if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var memoized = function() {\n        var args = arguments,\n            key = resolver ? resolver.apply(this, args) : args[0],\n            cache = memoized.cache;\n\n        if (cache.has(key)) {\n          return cache.get(key);\n        }\n        var result = func.apply(this, args);\n        memoized.cache = cache.set(key, result) || cache;\n        return result;\n      };\n      memoized.cache = new (memoize.Cache || MapCache);\n      return memoized;\n    }\n\n    // Expose `MapCache`.\n    memoize.Cache = MapCache;\n\n    /**\n     * Creates a function that negates the result of the predicate `func`. The\n     * `func` predicate is invoked with the `this` binding and arguments of the\n     * created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} predicate The predicate to negate.\n     * @returns {Function} Returns the new negated function.\n     * @example\n     *\n     * function isEven(n) {\n     *   return n % 2 == 0;\n     * }\n     *\n     * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n     * // => [1, 3, 5]\n     */\n    function negate(predicate) {\n      if (typeof predicate != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return function() {\n        var args = arguments;\n        switch (args.length) {\n          case 0: return !predicate.call(this);\n          case 1: return !predicate.call(this, args[0]);\n          case 2: return !predicate.call(this, args[0], args[1]);\n          case 3: return !predicate.call(this, args[0], args[1], args[2]);\n        }\n        return !predicate.apply(this, args);\n      };\n    }\n\n    /**\n     * Creates a function that is restricted to invoking `func` once. Repeat calls\n     * to the function return the value of the first invocation. The `func` is\n     * invoked with the `this` binding and arguments of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var initialize = _.once(createApplication);\n     * initialize();\n     * initialize();\n     * // => `createApplication` is invoked once\n     */\n    function once(func) {\n      return before(2, func);\n    }\n\n    /**\n     * Creates a function that invokes `func` with its arguments transformed.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Function\n     * @param {Function} func The function to wrap.\n     * @param {...(Function|Function[])} [transforms=[_.identity]]\n     *  The argument transforms.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * function doubled(n) {\n     *   return n * 2;\n     * }\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var func = _.overArgs(function(x, y) {\n     *   return [x, y];\n     * }, [square, doubled]);\n     *\n     * func(9, 3);\n     * // => [81, 6]\n     *\n     * func(10, 5);\n     * // => [100, 10]\n     */\n    var overArgs = castRest(function(func, transforms) {\n      transforms = (transforms.length == 1 && isArray(transforms[0]))\n        ? arrayMap(transforms[0], baseUnary(getIteratee()))\n        : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n      var funcsLength = transforms.length;\n      return baseRest(function(args) {\n        var index = -1,\n            length = nativeMin(args.length, funcsLength);\n\n        while (++index < length) {\n          args[index] = transforms[index].call(this, args[index]);\n        }\n        return apply(func, this, args);\n      });\n    });\n\n    /**\n     * Creates a function that invokes `func` with `partials` prepended to the\n     * arguments it receives. This method is like `_.bind` except it does **not**\n     * alter the `this` binding.\n     *\n     * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.2.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var sayHelloTo = _.partial(greet, 'hello');\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     *\n     * // Partially applied with placeholders.\n     * var greetFred = _.partial(greet, _, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     */\n    var partial = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partial));\n      return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * This method is like `_.partial` except that partially applied arguments\n     * are appended to the arguments it receives.\n     *\n     * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var greetFred = _.partialRight(greet, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     *\n     * // Partially applied with placeholders.\n     * var sayHelloTo = _.partialRight(greet, 'hello', _);\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     */\n    var partialRight = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partialRight));\n      return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments arranged according\n     * to the specified `indexes` where the argument value at the first index is\n     * provided as the first argument, the argument value at the second index is\n     * provided as the second argument, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to rearrange arguments for.\n     * @param {...(number|number[])} indexes The arranged argument indexes.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var rearged = _.rearg(function(a, b, c) {\n     *   return [a, b, c];\n     * }, [2, 0, 1]);\n     *\n     * rearged('b', 'c', 'a')\n     * // => ['a', 'b', 'c']\n     */\n    var rearg = flatRest(function(func, indexes) {\n      return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n    });\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * created function and arguments from `start` and beyond provided as\n     * an array.\n     *\n     * **Note:** This method is based on the\n     * [rest parameter](https://mdn.io/rest_parameters).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.rest(function(what, names) {\n     *   return what + ' ' + _.initial(names).join(', ') +\n     *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n     * });\n     *\n     * say('hello', 'fred', 'barney', 'pebbles');\n     * // => 'hello fred, barney, & pebbles'\n     */\n    function rest(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start === undefined ? start : toInteger(start);\n      return baseRest(func, start);\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * create function and an array of arguments much like\n     * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n     *\n     * **Note:** This method is based on the\n     * [spread operator](https://mdn.io/spread_operator).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Function\n     * @param {Function} func The function to spread arguments over.\n     * @param {number} [start=0] The start position of the spread.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.spread(function(who, what) {\n     *   return who + ' says ' + what;\n     * });\n     *\n     * say(['fred', 'hello']);\n     * // => 'fred says hello'\n     *\n     * var numbers = Promise.all([\n     *   Promise.resolve(40),\n     *   Promise.resolve(36)\n     * ]);\n     *\n     * numbers.then(_.spread(function(x, y) {\n     *   return x + y;\n     * }));\n     * // => a Promise of 76\n     */\n    function spread(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start == null ? 0 : nativeMax(toInteger(start), 0);\n      return baseRest(function(args) {\n        var array = args[start],\n            otherArgs = castSlice(args, 0, start);\n\n        if (array) {\n          arrayPush(otherArgs, array);\n        }\n        return apply(func, this, otherArgs);\n      });\n    }\n\n    /**\n     * Creates a throttled function that only invokes `func` at most once per\n     * every `wait` milliseconds. The throttled function comes with a `cancel`\n     * method to cancel delayed `func` invocations and a `flush` method to\n     * immediately invoke them. Provide `options` to indicate whether `func`\n     * should be invoked on the leading and/or trailing edge of the `wait`\n     * timeout. The `func` is invoked with the last arguments provided to the\n     * throttled function. Subsequent calls to the throttled function return the\n     * result of the last `func` invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the throttled function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.throttle` and `_.debounce`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to throttle.\n     * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=true]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new throttled function.\n     * @example\n     *\n     * // Avoid excessively updating the position while scrolling.\n     * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n     *\n     * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n     * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n     * jQuery(element).on('click', throttled);\n     *\n     * // Cancel the trailing throttled invocation.\n     * jQuery(window).on('popstate', throttled.cancel);\n     */\n    function throttle(func, wait, options) {\n      var leading = true,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      if (isObject(options)) {\n        leading = 'leading' in options ? !!options.leading : leading;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n      return debounce(func, wait, {\n        'leading': leading,\n        'maxWait': wait,\n        'trailing': trailing\n      });\n    }\n\n    /**\n     * Creates a function that accepts up to one argument, ignoring any\n     * additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.unary(parseInt));\n     * // => [6, 8, 10]\n     */\n    function unary(func) {\n      return ary(func, 1);\n    }\n\n    /**\n     * Creates a function that provides `value` to `wrapper` as its first\n     * argument. Any additional arguments provided to the function are appended\n     * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n     * binding of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {*} value The value to wrap.\n     * @param {Function} [wrapper=identity] The wrapper function.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var p = _.wrap(_.escape, function(func, text) {\n     *   return '<p>' + func(text) + '<\/p>';\n     * });\n     *\n     * p('fred, barney, & pebbles');\n     * // => '<p>fred, barney, &amp; pebbles<\/p>'\n     */\n    function wrap(value, wrapper) {\n      return partial(castFunction(wrapper), value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Casts `value` as an array if it's not one.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Lang\n     * @param {*} value The value to inspect.\n     * @returns {Array} Returns the cast array.\n     * @example\n     *\n     * _.castArray(1);\n     * // => [1]\n     *\n     * _.castArray({ 'a': 1 });\n     * // => [{ 'a': 1 }]\n     *\n     * _.castArray('abc');\n     * // => ['abc']\n     *\n     * _.castArray(null);\n     * // => [null]\n     *\n     * _.castArray(undefined);\n     * // => [undefined]\n     *\n     * _.castArray();\n     * // => []\n     *\n     * var array = [1, 2, 3];\n     * console.log(_.castArray(array) === array);\n     * // => true\n     */\n    function castArray() {\n      if (!arguments.length) {\n        return [];\n      }\n      var value = arguments[0];\n      return isArray(value) ? value : [value];\n    }\n\n    /**\n     * Creates a shallow clone of `value`.\n     *\n     * **Note:** This method is loosely based on the\n     * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n     * and supports cloning arrays, array buffers, booleans, date objects, maps,\n     * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n     * arrays. The own enumerable properties of `arguments` objects are cloned\n     * as plain objects. An empty object is returned for uncloneable values such\n     * as error objects, functions, DOM nodes, and WeakMaps.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeep\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var shallow = _.clone(objects);\n     * console.log(shallow[0] === objects[0]);\n     * // => true\n     */\n    function clone(value) {\n      return baseClone(value, CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.clone` except that it accepts `customizer` which\n     * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n     * cloning is handled by the method instead. The `customizer` is invoked with\n     * up to four arguments; (value [, index|key, object, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeepWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(false);\n     *   }\n     * }\n     *\n     * var el = _.cloneWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 0\n     */\n    function cloneWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * This method is like `_.clone` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.clone\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var deep = _.cloneDeep(objects);\n     * console.log(deep[0] === objects[0]);\n     * // => false\n     */\n    function cloneDeep(value) {\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.cloneWith` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.cloneWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(true);\n     *   }\n     * }\n     *\n     * var el = _.cloneDeepWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 20\n     */\n    function cloneDeepWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * Checks if `object` conforms to `source` by invoking the predicate\n     * properties of `source` with the corresponding property values of `object`.\n     *\n     * **Note:** This method is equivalent to `_.conforms` when `source` is\n     * partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n     * // => true\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n     * // => false\n     */\n    function conformsTo(object, source) {\n      return source == null || baseConformsTo(object, source, keys(source));\n    }\n\n    /**\n     * Performs a\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * comparison between two values to determine if they are equivalent.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     * var other = { 'a': 1 };\n     *\n     * _.eq(object, object);\n     * // => true\n     *\n     * _.eq(object, other);\n     * // => false\n     *\n     * _.eq('a', 'a');\n     * // => true\n     *\n     * _.eq('a', Object('a'));\n     * // => false\n     *\n     * _.eq(NaN, NaN);\n     * // => true\n     */\n    function eq(value, other) {\n      return value === other || (value !== value && other !== other);\n    }\n\n    /**\n     * Checks if `value` is greater than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     * @see _.lt\n     * @example\n     *\n     * _.gt(3, 1);\n     * // => true\n     *\n     * _.gt(3, 3);\n     * // => false\n     *\n     * _.gt(1, 3);\n     * // => false\n     */\n    var gt = createRelationalOperation(baseGt);\n\n    /**\n     * Checks if `value` is greater than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than or equal to\n     *  `other`, else `false`.\n     * @see _.lte\n     * @example\n     *\n     * _.gte(3, 1);\n     * // => true\n     *\n     * _.gte(3, 3);\n     * // => true\n     *\n     * _.gte(1, 3);\n     * // => false\n     */\n    var gte = createRelationalOperation(function(value, other) {\n      return value >= other;\n    });\n\n    /**\n     * Checks if `value` is likely an `arguments` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     *  else `false`.\n     * @example\n     *\n     * _.isArguments(function() { return arguments; }());\n     * // => true\n     *\n     * _.isArguments([1, 2, 3]);\n     * // => false\n     */\n    var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n      return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n        !propertyIsEnumerable.call(value, 'callee');\n    };\n\n    /**\n     * Checks if `value` is classified as an `Array` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n     * @example\n     *\n     * _.isArray([1, 2, 3]);\n     * // => true\n     *\n     * _.isArray(document.body.children);\n     * // => false\n     *\n     * _.isArray('abc');\n     * // => false\n     *\n     * _.isArray(_.noop);\n     * // => false\n     */\n    var isArray = Array.isArray;\n\n    /**\n     * Checks if `value` is classified as an `ArrayBuffer` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     * @example\n     *\n     * _.isArrayBuffer(new ArrayBuffer(2));\n     * // => true\n     *\n     * _.isArrayBuffer(new Array(2));\n     * // => false\n     */\n    var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n    /**\n     * Checks if `value` is array-like. A value is considered array-like if it's\n     * not a function and has a `value.length` that's an integer greater than or\n     * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n     * @example\n     *\n     * _.isArrayLike([1, 2, 3]);\n     * // => true\n     *\n     * _.isArrayLike(document.body.children);\n     * // => true\n     *\n     * _.isArrayLike('abc');\n     * // => true\n     *\n     * _.isArrayLike(_.noop);\n     * // => false\n     */\n    function isArrayLike(value) {\n      return value != null && isLength(value.length) && !isFunction(value);\n    }\n\n    /**\n     * This method is like `_.isArrayLike` except that it also checks if `value`\n     * is an object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array-like object,\n     *  else `false`.\n     * @example\n     *\n     * _.isArrayLikeObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isArrayLikeObject(document.body.children);\n     * // => true\n     *\n     * _.isArrayLikeObject('abc');\n     * // => false\n     *\n     * _.isArrayLikeObject(_.noop);\n     * // => false\n     */\n    function isArrayLikeObject(value) {\n      return isObjectLike(value) && isArrayLike(value);\n    }\n\n    /**\n     * Checks if `value` is classified as a boolean primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n     * @example\n     *\n     * _.isBoolean(false);\n     * // => true\n     *\n     * _.isBoolean(null);\n     * // => false\n     */\n    function isBoolean(value) {\n      return value === true || value === false ||\n        (isObjectLike(value) && baseGetTag(value) == boolTag);\n    }\n\n    /**\n     * Checks if `value` is a buffer.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n     * @example\n     *\n     * _.isBuffer(new Buffer(2));\n     * // => true\n     *\n     * _.isBuffer(new Uint8Array(2));\n     * // => false\n     */\n    var isBuffer = nativeIsBuffer || stubFalse;\n\n    /**\n     * Checks if `value` is classified as a `Date` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     * @example\n     *\n     * _.isDate(new Date);\n     * // => true\n     *\n     * _.isDate('Mon April 23 2012');\n     * // => false\n     */\n    var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n    /**\n     * Checks if `value` is likely a DOM element.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n     * @example\n     *\n     * _.isElement(document.body);\n     * // => true\n     *\n     * _.isElement('<body>');\n     * // => false\n     */\n    function isElement(value) {\n      return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n    }\n\n    /**\n     * Checks if `value` is an empty object, collection, map, or set.\n     *\n     * Objects are considered empty if they have no own enumerable string keyed\n     * properties.\n     *\n     * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n     * jQuery-like collections are considered empty if they have a `length` of `0`.\n     * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n     * @example\n     *\n     * _.isEmpty(null);\n     * // => true\n     *\n     * _.isEmpty(true);\n     * // => true\n     *\n     * _.isEmpty(1);\n     * // => true\n     *\n     * _.isEmpty([1, 2, 3]);\n     * // => false\n     *\n     * _.isEmpty({ 'a': 1 });\n     * // => false\n     */\n    function isEmpty(value) {\n      if (value == null) {\n        return true;\n      }\n      if (isArrayLike(value) &&\n          (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n            isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n        return !value.length;\n      }\n      var tag = getTag(value);\n      if (tag == mapTag || tag == setTag) {\n        return !value.size;\n      }\n      if (isPrototype(value)) {\n        return !baseKeys(value).length;\n      }\n      for (var key in value) {\n        if (hasOwnProperty.call(value, key)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * Performs a deep comparison between two values to determine if they are\n     * equivalent.\n     *\n     * **Note:** This method supports comparing arrays, array buffers, booleans,\n     * date objects, error objects, maps, numbers, `Object` objects, regexes,\n     * sets, strings, symbols, and typed arrays. `Object` objects are compared\n     * by their own, not inherited, enumerable properties. Functions and DOM\n     * nodes are compared by strict equality, i.e. `===`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     * var other = { 'a': 1 };\n     *\n     * _.isEqual(object, other);\n     * // => true\n     *\n     * object === other;\n     * // => false\n     */\n    function isEqual(value, other) {\n      return baseIsEqual(value, other);\n    }\n\n    /**\n     * This method is like `_.isEqual` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with up to\n     * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, othValue) {\n     *   if (isGreeting(objValue) && isGreeting(othValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var array = ['hello', 'goodbye'];\n     * var other = ['hi', 'goodbye'];\n     *\n     * _.isEqualWith(array, other, customizer);\n     * // => true\n     */\n    function isEqualWith(value, other, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      var result = customizer ? customizer(value, other) : undefined;\n      return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n    }\n\n    /**\n     * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n     * `SyntaxError`, `TypeError`, or `URIError` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n     * @example\n     *\n     * _.isError(new Error);\n     * // => true\n     *\n     * _.isError(Error);\n     * // => false\n     */\n    function isError(value) {\n      if (!isObjectLike(value)) {\n        return false;\n      }\n      var tag = baseGetTag(value);\n      return tag == errorTag || tag == domExcTag ||\n        (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n    }\n\n    /**\n     * Checks if `value` is a finite primitive number.\n     *\n     * **Note:** This method is based on\n     * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n     * @example\n     *\n     * _.isFinite(3);\n     * // => true\n     *\n     * _.isFinite(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isFinite(Infinity);\n     * // => false\n     *\n     * _.isFinite('3');\n     * // => false\n     */\n    function isFinite(value) {\n      return typeof value == 'number' && nativeIsFinite(value);\n    }\n\n    /**\n     * Checks if `value` is classified as a `Function` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n     * @example\n     *\n     * _.isFunction(_);\n     * // => true\n     *\n     * _.isFunction(/abc/);\n     * // => false\n     */\n    function isFunction(value) {\n      if (!isObject(value)) {\n        return false;\n      }\n      // The use of `Object#toString` avoids issues with the `typeof` operator\n      // in Safari 9 which returns 'object' for typed arrays and other constructors.\n      var tag = baseGetTag(value);\n      return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n    }\n\n    /**\n     * Checks if `value` is an integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n     * @example\n     *\n     * _.isInteger(3);\n     * // => true\n     *\n     * _.isInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isInteger(Infinity);\n     * // => false\n     *\n     * _.isInteger('3');\n     * // => false\n     */\n    function isInteger(value) {\n      return typeof value == 'number' && value == toInteger(value);\n    }\n\n    /**\n     * Checks if `value` is a valid array-like length.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n     * @example\n     *\n     * _.isLength(3);\n     * // => true\n     *\n     * _.isLength(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isLength(Infinity);\n     * // => false\n     *\n     * _.isLength('3');\n     * // => false\n     */\n    function isLength(value) {\n      return typeof value == 'number' &&\n        value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if `value` is the\n     * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n     * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n     * @example\n     *\n     * _.isObject({});\n     * // => true\n     *\n     * _.isObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isObject(_.noop);\n     * // => true\n     *\n     * _.isObject(null);\n     * // => false\n     */\n    function isObject(value) {\n      var type = typeof value;\n      return value != null && (type == 'object' || type == 'function');\n    }\n\n    /**\n     * Checks if `value` is object-like. A value is object-like if it's not `null`\n     * and has a `typeof` result of \"object\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n     * @example\n     *\n     * _.isObjectLike({});\n     * // => true\n     *\n     * _.isObjectLike([1, 2, 3]);\n     * // => true\n     *\n     * _.isObjectLike(_.noop);\n     * // => false\n     *\n     * _.isObjectLike(null);\n     * // => false\n     */\n    function isObjectLike(value) {\n      return value != null && typeof value == 'object';\n    }\n\n    /**\n     * Checks if `value` is classified as a `Map` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     * @example\n     *\n     * _.isMap(new Map);\n     * // => true\n     *\n     * _.isMap(new WeakMap);\n     * // => false\n     */\n    var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n    /**\n     * Performs a partial deep comparison between `object` and `source` to\n     * determine if `object` contains equivalent property values.\n     *\n     * **Note:** This method is equivalent to `_.matches` when `source` is\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.isMatch(object, { 'b': 2 });\n     * // => true\n     *\n     * _.isMatch(object, { 'b': 1 });\n     * // => false\n     */\n    function isMatch(object, source) {\n      return object === source || baseIsMatch(object, source, getMatchData(source));\n    }\n\n    /**\n     * This method is like `_.isMatch` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with five\n     * arguments: (objValue, srcValue, index|key, object, source).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (isGreeting(objValue) && isGreeting(srcValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var object = { 'greeting': 'hello' };\n     * var source = { 'greeting': 'hi' };\n     *\n     * _.isMatchWith(object, source, customizer);\n     * // => true\n     */\n    function isMatchWith(object, source, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseIsMatch(object, source, getMatchData(source), customizer);\n    }\n\n    /**\n     * Checks if `value` is `NaN`.\n     *\n     * **Note:** This method is based on\n     * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n     * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n     * `undefined` and other non-number values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n     * @example\n     *\n     * _.isNaN(NaN);\n     * // => true\n     *\n     * _.isNaN(new Number(NaN));\n     * // => true\n     *\n     * isNaN(undefined);\n     * // => true\n     *\n     * _.isNaN(undefined);\n     * // => false\n     */\n    function isNaN(value) {\n      // An `NaN` primitive is the only value that is not equal to itself.\n      // Perform the `toStringTag` check first to avoid errors with some\n      // ActiveX objects in IE.\n      return isNumber(value) && value != +value;\n    }\n\n    /**\n     * Checks if `value` is a pristine native function.\n     *\n     * **Note:** This method can't reliably detect native functions in the presence\n     * of the core-js package because core-js circumvents this kind of detection.\n     * Despite multiple requests, the core-js maintainer has made it clear: any\n     * attempt to fix the detection will be obstructed. As a result, we're left\n     * with little choice but to throw an error. Unfortunately, this also affects\n     * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n     * which rely on core-js.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     * @example\n     *\n     * _.isNative(Array.prototype.push);\n     * // => true\n     *\n     * _.isNative(_);\n     * // => false\n     */\n    function isNative(value) {\n      if (isMaskable(value)) {\n        throw new Error(CORE_ERROR_TEXT);\n      }\n      return baseIsNative(value);\n    }\n\n    /**\n     * Checks if `value` is `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n     * @example\n     *\n     * _.isNull(null);\n     * // => true\n     *\n     * _.isNull(void 0);\n     * // => false\n     */\n    function isNull(value) {\n      return value === null;\n    }\n\n    /**\n     * Checks if `value` is `null` or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n     * @example\n     *\n     * _.isNil(null);\n     * // => true\n     *\n     * _.isNil(void 0);\n     * // => true\n     *\n     * _.isNil(NaN);\n     * // => false\n     */\n    function isNil(value) {\n      return value == null;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Number` primitive or object.\n     *\n     * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n     * classified as numbers, use the `_.isFinite` method.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n     * @example\n     *\n     * _.isNumber(3);\n     * // => true\n     *\n     * _.isNumber(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isNumber(Infinity);\n     * // => true\n     *\n     * _.isNumber('3');\n     * // => false\n     */\n    function isNumber(value) {\n      return typeof value == 'number' ||\n        (isObjectLike(value) && baseGetTag(value) == numberTag);\n    }\n\n    /**\n     * Checks if `value` is a plain object, that is, an object created by the\n     * `Object` constructor or one with a `[[Prototype]]` of `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.8.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * _.isPlainObject(new Foo);\n     * // => false\n     *\n     * _.isPlainObject([1, 2, 3]);\n     * // => false\n     *\n     * _.isPlainObject({ 'x': 0, 'y': 0 });\n     * // => true\n     *\n     * _.isPlainObject(Object.create(null));\n     * // => true\n     */\n    function isPlainObject(value) {\n      if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n        return false;\n      }\n      var proto = getPrototype(value);\n      if (proto === null) {\n        return true;\n      }\n      var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n      return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n        funcToString.call(Ctor) == objectCtorString;\n    }\n\n    /**\n     * Checks if `value` is classified as a `RegExp` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     * @example\n     *\n     * _.isRegExp(/abc/);\n     * // => true\n     *\n     * _.isRegExp('/abc/');\n     * // => false\n     */\n    var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n    /**\n     * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n     * double precision number which isn't the result of a rounded unsafe integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n     * @example\n     *\n     * _.isSafeInteger(3);\n     * // => true\n     *\n     * _.isSafeInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isSafeInteger(Infinity);\n     * // => false\n     *\n     * _.isSafeInteger('3');\n     * // => false\n     */\n    function isSafeInteger(value) {\n      return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Set` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     * @example\n     *\n     * _.isSet(new Set);\n     * // => true\n     *\n     * _.isSet(new WeakSet);\n     * // => false\n     */\n    var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n    /**\n     * Checks if `value` is classified as a `String` primitive or object.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n     * @example\n     *\n     * _.isString('abc');\n     * // => true\n     *\n     * _.isString(1);\n     * // => false\n     */\n    function isString(value) {\n      return typeof value == 'string' ||\n        (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n    }\n\n    /**\n     * Checks if `value` is classified as a `Symbol` primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n     * @example\n     *\n     * _.isSymbol(Symbol.iterator);\n     * // => true\n     *\n     * _.isSymbol('abc');\n     * // => false\n     */\n    function isSymbol(value) {\n      return typeof value == 'symbol' ||\n        (isObjectLike(value) && baseGetTag(value) == symbolTag);\n    }\n\n    /**\n     * Checks if `value` is classified as a typed array.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     * @example\n     *\n     * _.isTypedArray(new Uint8Array);\n     * // => true\n     *\n     * _.isTypedArray([]);\n     * // => false\n     */\n    var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n    /**\n     * Checks if `value` is `undefined`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n     * @example\n     *\n     * _.isUndefined(void 0);\n     * // => true\n     *\n     * _.isUndefined(null);\n     * // => false\n     */\n    function isUndefined(value) {\n      return value === undefined;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakMap` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n     * @example\n     *\n     * _.isWeakMap(new WeakMap);\n     * // => true\n     *\n     * _.isWeakMap(new Map);\n     * // => false\n     */\n    function isWeakMap(value) {\n      return isObjectLike(value) && getTag(value) == weakMapTag;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakSet` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n     * @example\n     *\n     * _.isWeakSet(new WeakSet);\n     * // => true\n     *\n     * _.isWeakSet(new Set);\n     * // => false\n     */\n    function isWeakSet(value) {\n      return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n    }\n\n    /**\n     * Checks if `value` is less than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     * @see _.gt\n     * @example\n     *\n     * _.lt(1, 3);\n     * // => true\n     *\n     * _.lt(3, 3);\n     * // => false\n     *\n     * _.lt(3, 1);\n     * // => false\n     */\n    var lt = createRelationalOperation(baseLt);\n\n    /**\n     * Checks if `value` is less than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than or equal to\n     *  `other`, else `false`.\n     * @see _.gte\n     * @example\n     *\n     * _.lte(1, 3);\n     * // => true\n     *\n     * _.lte(3, 3);\n     * // => true\n     *\n     * _.lte(3, 1);\n     * // => false\n     */\n    var lte = createRelationalOperation(function(value, other) {\n      return value <= other;\n    });\n\n    /**\n     * Converts `value` to an array.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the converted array.\n     * @example\n     *\n     * _.toArray({ 'a': 1, 'b': 2 });\n     * // => [1, 2]\n     *\n     * _.toArray('abc');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toArray(1);\n     * // => []\n     *\n     * _.toArray(null);\n     * // => []\n     */\n    function toArray(value) {\n      if (!value) {\n        return [];\n      }\n      if (isArrayLike(value)) {\n        return isString(value) ? stringToArray(value) : copyArray(value);\n      }\n      if (symIterator && value[symIterator]) {\n        return iteratorToArray(value[symIterator]());\n      }\n      var tag = getTag(value),\n          func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n      return func(value);\n    }\n\n    /**\n     * Converts `value` to a finite number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.12.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted number.\n     * @example\n     *\n     * _.toFinite(3.2);\n     * // => 3.2\n     *\n     * _.toFinite(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toFinite(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toFinite('3.2');\n     * // => 3.2\n     */\n    function toFinite(value) {\n      if (!value) {\n        return value === 0 ? value : 0;\n      }\n      value = toNumber(value);\n      if (value === INFINITY || value === -INFINITY) {\n        var sign = (value < 0 ? -1 : 1);\n        return sign * MAX_INTEGER;\n      }\n      return value === value ? value : 0;\n    }\n\n    /**\n     * Converts `value` to an integer.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toInteger(3.2);\n     * // => 3\n     *\n     * _.toInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toInteger(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toInteger('3.2');\n     * // => 3\n     */\n    function toInteger(value) {\n      var result = toFinite(value),\n          remainder = result % 1;\n\n      return result === result ? (remainder ? result - remainder : result) : 0;\n    }\n\n    /**\n     * Converts `value` to an integer suitable for use as the length of an\n     * array-like object.\n     *\n     * **Note:** This method is based on\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toLength(3.2);\n     * // => 3\n     *\n     * _.toLength(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toLength(Infinity);\n     * // => 4294967295\n     *\n     * _.toLength('3.2');\n     * // => 3\n     */\n    function toLength(value) {\n      return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n    }\n\n    /**\n     * Converts `value` to a number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     * @example\n     *\n     * _.toNumber(3.2);\n     * // => 3.2\n     *\n     * _.toNumber(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toNumber(Infinity);\n     * // => Infinity\n     *\n     * _.toNumber('3.2');\n     * // => 3.2\n     */\n    function toNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n      if (isSymbol(value)) {\n        return NAN;\n      }\n      if (isObject(value)) {\n        var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n        value = isObject(other) ? (other + '') : other;\n      }\n      if (typeof value != 'string') {\n        return value === 0 ? value : +value;\n      }\n      value = value.replace(reTrim, '');\n      var isBinary = reIsBinary.test(value);\n      return (isBinary || reIsOctal.test(value))\n        ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n        : (reIsBadHex.test(value) ? NAN : +value);\n    }\n\n    /**\n     * Converts `value` to a plain object flattening inherited enumerable string\n     * keyed properties of `value` to own properties of the plain object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Object} Returns the converted plain object.\n     * @example\n     *\n     * function Foo() {\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.assign({ 'a': 1 }, new Foo);\n     * // => { 'a': 1, 'b': 2 }\n     *\n     * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n     * // => { 'a': 1, 'b': 2, 'c': 3 }\n     */\n    function toPlainObject(value) {\n      return copyObject(value, keysIn(value));\n    }\n\n    /**\n     * Converts `value` to a safe integer. A safe integer can be compared and\n     * represented correctly.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toSafeInteger(3.2);\n     * // => 3\n     *\n     * _.toSafeInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toSafeInteger(Infinity);\n     * // => 9007199254740991\n     *\n     * _.toSafeInteger('3.2');\n     * // => 3\n     */\n    function toSafeInteger(value) {\n      return value\n        ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n        : (value === 0 ? value : 0);\n    }\n\n    /**\n     * Converts `value` to a string. An empty string is returned for `null`\n     * and `undefined` values. The sign of `-0` is preserved.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.toString(null);\n     * // => ''\n     *\n     * _.toString(-0);\n     * // => '-0'\n     *\n     * _.toString([1, 2, 3]);\n     * // => '1,2,3'\n     */\n    function toString(value) {\n      return value == null ? '' : baseToString(value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Assigns own enumerable string keyed properties of source objects to the\n     * destination object. Source objects are applied from left to right.\n     * Subsequent sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object` and is loosely based on\n     * [`Object.assign`](https://mdn.io/Object/assign).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assignIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assign({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var assign = createAssigner(function(object, source) {\n      if (isPrototype(source) || isArrayLike(source)) {\n        copyObject(source, keys(source), object);\n        return;\n      }\n      for (var key in source) {\n        if (hasOwnProperty.call(source, key)) {\n          assignValue(object, key, source[key]);\n        }\n      }\n    });\n\n    /**\n     * This method is like `_.assign` except that it iterates over own and\n     * inherited source properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extend\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assign\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n     */\n    var assignIn = createAssigner(function(object, source) {\n      copyObject(source, keysIn(source), object);\n    });\n\n    /**\n     * This method is like `_.assignIn` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extendWith\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignInWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keysIn(source), object, customizer);\n    });\n\n    /**\n     * This method is like `_.assign` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignInWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keys(source), object, customizer);\n    });\n\n    /**\n     * Creates an array of values corresponding to `paths` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Array} Returns the picked values.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _.at(object, ['a[0].b.c', 'a[1]']);\n     * // => [3, 4]\n     */\n    var at = flatRest(baseAt);\n\n    /**\n     * Creates an object that inherits from the `prototype` object. If a\n     * `properties` object is given, its own enumerable string keyed properties\n     * are assigned to the created object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Object\n     * @param {Object} prototype The object to inherit from.\n     * @param {Object} [properties] The properties to assign to the object.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * function Shape() {\n     *   this.x = 0;\n     *   this.y = 0;\n     * }\n     *\n     * function Circle() {\n     *   Shape.call(this);\n     * }\n     *\n     * Circle.prototype = _.create(Shape.prototype, {\n     *   'constructor': Circle\n     * });\n     *\n     * var circle = new Circle;\n     * circle instanceof Circle;\n     * // => true\n     *\n     * circle instanceof Shape;\n     * // => true\n     */\n    function create(prototype, properties) {\n      var result = baseCreate(prototype);\n      return properties == null ? result : baseAssign(result, properties);\n    }\n\n    /**\n     * Assigns own and inherited enumerable string keyed properties of source\n     * objects to the destination object for all destination properties that\n     * resolve to `undefined`. Source objects are applied from left to right.\n     * Once a property is set, additional values of the same property are ignored.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaultsDeep\n     * @example\n     *\n     * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var defaults = baseRest(function(object, sources) {\n      object = Object(object);\n\n      var index = -1;\n      var length = sources.length;\n      var guard = length > 2 ? sources[2] : undefined;\n\n      if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n        length = 1;\n      }\n\n      while (++index < length) {\n        var source = sources[index];\n        var props = keysIn(source);\n        var propsIndex = -1;\n        var propsLength = props.length;\n\n        while (++propsIndex < propsLength) {\n          var key = props[propsIndex];\n          var value = object[key];\n\n          if (value === undefined ||\n              (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n            object[key] = source[key];\n          }\n        }\n      }\n\n      return object;\n    });\n\n    /**\n     * This method is like `_.defaults` except that it recursively assigns\n     * default properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaults\n     * @example\n     *\n     * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n     * // => { 'a': { 'b': 2, 'c': 3 } }\n     */\n    var defaultsDeep = baseRest(function(args) {\n      args.push(undefined, customDefaultsMerge);\n      return apply(mergeWith, undefined, args);\n    });\n\n    /**\n     * This method is like `_.find` except that it returns the key of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findKey(users, function(o) { return o.age < 40; });\n     * // => 'barney' (iteration order is not guaranteed)\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findKey(users, { 'age': 1, 'active': true });\n     * // => 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findKey(users, 'active');\n     * // => 'barney'\n     */\n    function findKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n    }\n\n    /**\n     * This method is like `_.findKey` except that it iterates over elements of\n     * a collection in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findLastKey(users, function(o) { return o.age < 40; });\n     * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastKey(users, { 'age': 36, 'active': true });\n     * // => 'barney'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastKey(users, 'active');\n     * // => 'pebbles'\n     */\n    function findLastKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n    }\n\n    /**\n     * Iterates over own and inherited enumerable string keyed properties of an\n     * object and invokes `iteratee` for each property. The iteratee is invoked\n     * with three arguments: (value, key, object). Iteratee functions may exit\n     * iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forInRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forIn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n     */\n    function forIn(object, iteratee) {\n      return object == null\n        ? object\n        : baseFor(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * This method is like `_.forIn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forInRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n     */\n    function forInRight(object, iteratee) {\n      return object == null\n        ? object\n        : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * Iterates over own enumerable string keyed properties of an object and\n     * invokes `iteratee` for each property. The iteratee is invoked with three\n     * arguments: (value, key, object). Iteratee functions may exit iteration\n     * early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwnRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forOwn(object, iteratee) {\n      return object && baseForOwn(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forOwn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwnRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n     */\n    function forOwnRight(object, iteratee) {\n      return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an array of function property names from own enumerable properties\n     * of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functionsIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functions(new Foo);\n     * // => ['a', 'b']\n     */\n    function functions(object) {\n      return object == null ? [] : baseFunctions(object, keys(object));\n    }\n\n    /**\n     * Creates an array of function property names from own and inherited\n     * enumerable properties of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functions\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functionsIn(new Foo);\n     * // => ['a', 'b', 'c']\n     */\n    function functionsIn(object) {\n      return object == null ? [] : baseFunctions(object, keysIn(object));\n    }\n\n    /**\n     * Gets the value at `path` of `object`. If the resolved value is\n     * `undefined`, the `defaultValue` is returned in its place.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.get(object, 'a[0].b.c');\n     * // => 3\n     *\n     * _.get(object, ['a', '0', 'b', 'c']);\n     * // => 3\n     *\n     * _.get(object, 'a.b.c', 'default');\n     * // => 'default'\n     */\n    function get(object, path, defaultValue) {\n      var result = object == null ? undefined : baseGet(object, path);\n      return result === undefined ? defaultValue : result;\n    }\n\n    /**\n     * Checks if `path` is a direct property of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = { 'a': { 'b': 2 } };\n     * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.has(object, 'a');\n     * // => true\n     *\n     * _.has(object, 'a.b');\n     * // => true\n     *\n     * _.has(object, ['a', 'b']);\n     * // => true\n     *\n     * _.has(other, 'a');\n     * // => false\n     */\n    function has(object, path) {\n      return object != null && hasPath(object, path, baseHas);\n    }\n\n    /**\n     * Checks if `path` is a direct or inherited property of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.hasIn(object, 'a');\n     * // => true\n     *\n     * _.hasIn(object, 'a.b');\n     * // => true\n     *\n     * _.hasIn(object, ['a', 'b']);\n     * // => true\n     *\n     * _.hasIn(object, 'b');\n     * // => false\n     */\n    function hasIn(object, path) {\n      return object != null && hasPath(object, path, baseHasIn);\n    }\n\n    /**\n     * Creates an object composed of the inverted keys and values of `object`.\n     * If `object` contains duplicate values, subsequent values overwrite\n     * property assignments of previous values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invert(object);\n     * // => { '1': 'c', '2': 'b' }\n     */\n    var invert = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      result[value] = key;\n    }, constant(identity));\n\n    /**\n     * This method is like `_.invert` except that the inverted object is generated\n     * from the results of running each element of `object` thru `iteratee`. The\n     * corresponding inverted value of each inverted key is an array of keys\n     * responsible for generating the inverted value. The iteratee is invoked\n     * with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invertBy(object);\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     *\n     * _.invertBy(object, function(value) {\n     *   return 'group' + value;\n     * });\n     * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n     */\n    var invertBy = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      if (hasOwnProperty.call(result, value)) {\n        result[value].push(key);\n      } else {\n        result[value] = [key];\n      }\n    }, getIteratee);\n\n    /**\n     * Invokes the method at `path` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n     *\n     * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n     * // => [2, 3]\n     */\n    var invoke = baseRest(baseInvoke);\n\n    /**\n     * Creates an array of the own enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects. See the\n     * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * for more details.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keys(new Foo);\n     * // => ['a', 'b'] (iteration order is not guaranteed)\n     *\n     * _.keys('hi');\n     * // => ['0', '1']\n     */\n    function keys(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keysIn(new Foo);\n     * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n     */\n    function keysIn(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n    }\n\n    /**\n     * The opposite of `_.mapValues`; this method creates an object with the\n     * same values as `object` and keys generated by running each own enumerable\n     * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n     * with three arguments: (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapValues\n     * @example\n     *\n     * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   return key + value;\n     * });\n     * // => { 'a1': 1, 'b2': 2 }\n     */\n    function mapKeys(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, iteratee(value, key, object), value);\n      });\n      return result;\n    }\n\n    /**\n     * Creates an object with the same keys as `object` and values generated\n     * by running each own enumerable string keyed property of `object` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapKeys\n     * @example\n     *\n     * var users = {\n     *   'fred':    { 'user': 'fred',    'age': 40 },\n     *   'pebbles': { 'user': 'pebbles', 'age': 1 }\n     * };\n     *\n     * _.mapValues(users, function(o) { return o.age; });\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.mapValues(users, 'age');\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     */\n    function mapValues(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, key, iteratee(value, key, object));\n      });\n      return result;\n    }\n\n    /**\n     * This method is like `_.assign` except that it recursively merges own and\n     * inherited enumerable string keyed properties of source objects into the\n     * destination object. Source properties that resolve to `undefined` are\n     * skipped if a destination value exists. Array and plain object properties\n     * are merged recursively. Other objects and value types are overridden by\n     * assignment. Source objects are applied from left to right. Subsequent\n     * sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {\n     *   'a': [{ 'b': 2 }, { 'd': 4 }]\n     * };\n     *\n     * var other = {\n     *   'a': [{ 'c': 3 }, { 'e': 5 }]\n     * };\n     *\n     * _.merge(object, other);\n     * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n     */\n    var merge = createAssigner(function(object, source, srcIndex) {\n      baseMerge(object, source, srcIndex);\n    });\n\n    /**\n     * This method is like `_.merge` except that it accepts `customizer` which\n     * is invoked to produce the merged values of the destination and source\n     * properties. If `customizer` returns `undefined`, merging is handled by the\n     * method instead. The `customizer` is invoked with six arguments:\n     * (objValue, srcValue, key, object, source, stack).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} customizer The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (_.isArray(objValue)) {\n     *     return objValue.concat(srcValue);\n     *   }\n     * }\n     *\n     * var object = { 'a': [1], 'b': [2] };\n     * var other = { 'a': [3], 'b': [4] };\n     *\n     * _.mergeWith(object, other, customizer);\n     * // => { 'a': [1, 3], 'b': [2, 4] }\n     */\n    var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n      baseMerge(object, source, srcIndex, customizer);\n    });\n\n    /**\n     * The opposite of `_.pick`; this method creates an object composed of the\n     * own and inherited enumerable property paths of `object` that are not omitted.\n     *\n     * **Note:** This method is considerably slower than `_.pick`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to omit.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omit(object, ['a', 'c']);\n     * // => { 'b': '2' }\n     */\n    var omit = flatRest(function(object, paths) {\n      var result = {};\n      if (object == null) {\n        return result;\n      }\n      var isDeep = false;\n      paths = arrayMap(paths, function(path) {\n        path = castPath(path, object);\n        isDeep || (isDeep = path.length > 1);\n        return path;\n      });\n      copyObject(object, getAllKeysIn(object), result);\n      if (isDeep) {\n        result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n      }\n      var length = paths.length;\n      while (length--) {\n        baseUnset(result, paths[length]);\n      }\n      return result;\n    });\n\n    /**\n     * The opposite of `_.pickBy`; this method creates an object composed of\n     * the own and inherited enumerable string keyed properties of `object` that\n     * `predicate` doesn't return truthy for. The predicate is invoked with two\n     * arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omitBy(object, _.isNumber);\n     * // => { 'b': '2' }\n     */\n    function omitBy(object, predicate) {\n      return pickBy(object, negate(getIteratee(predicate)));\n    }\n\n    /**\n     * Creates an object composed of the picked `object` properties.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pick(object, ['a', 'c']);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var pick = flatRest(function(object, paths) {\n      return object == null ? {} : basePick(object, paths);\n    });\n\n    /**\n     * Creates an object composed of the `object` properties `predicate` returns\n     * truthy for. The predicate is invoked with two arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pickBy(object, _.isNumber);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    function pickBy(object, predicate) {\n      if (object == null) {\n        return {};\n      }\n      var props = arrayMap(getAllKeysIn(object), function(prop) {\n        return [prop];\n      });\n      predicate = getIteratee(predicate);\n      return basePickBy(object, props, function(value, path) {\n        return predicate(value, path[0]);\n      });\n    }\n\n    /**\n     * This method is like `_.get` except that if the resolved value is a\n     * function it's invoked with the `this` binding of its parent object and\n     * its result is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to resolve.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n     *\n     * _.result(object, 'a[0].b.c1');\n     * // => 3\n     *\n     * _.result(object, 'a[0].b.c2');\n     * // => 4\n     *\n     * _.result(object, 'a[0].b.c3', 'default');\n     * // => 'default'\n     *\n     * _.result(object, 'a[0].b.c3', _.constant('default'));\n     * // => 'default'\n     */\n    function result(object, path, defaultValue) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length;\n\n      // Ensure the loop is entered when path is empty.\n      if (!length) {\n        length = 1;\n        object = undefined;\n      }\n      while (++index < length) {\n        var value = object == null ? undefined : object[toKey(path[index])];\n        if (value === undefined) {\n          index = length;\n          value = defaultValue;\n        }\n        object = isFunction(value) ? value.call(object) : value;\n      }\n      return object;\n    }\n\n    /**\n     * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n     * it's created. Arrays are created for missing index properties while objects\n     * are created for all other missing properties. Use `_.setWith` to customize\n     * `path` creation.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.set(object, 'a[0].b.c', 4);\n     * console.log(object.a[0].b.c);\n     * // => 4\n     *\n     * _.set(object, ['x', '0', 'y', 'z'], 5);\n     * console.log(object.x[0].y.z);\n     * // => 5\n     */\n    function set(object, path, value) {\n      return object == null ? object : baseSet(object, path, value);\n    }\n\n    /**\n     * This method is like `_.set` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.setWith(object, '[0][1]', 'a', Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function setWith(object, path, value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseSet(object, path, value, customizer);\n    }\n\n    /**\n     * Creates an array of own enumerable string keyed-value pairs for `object`\n     * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n     * entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entries\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairs(new Foo);\n     * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n     */\n    var toPairs = createToPairs(keys);\n\n    /**\n     * Creates an array of own and inherited enumerable string keyed-value pairs\n     * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n     * or set, its entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entriesIn\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairsIn(new Foo);\n     * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n     */\n    var toPairsIn = createToPairs(keysIn);\n\n    /**\n     * An alternative to `_.reduce`; this method transforms `object` to a new\n     * `accumulator` object which is the result of running each of its own\n     * enumerable string keyed properties thru `iteratee`, with each invocation\n     * potentially mutating the `accumulator` object. If `accumulator` is not\n     * provided, a new object with the same `[[Prototype]]` will be used. The\n     * iteratee is invoked with four arguments: (accumulator, value, key, object).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The custom accumulator value.\n     * @returns {*} Returns the accumulated value.\n     * @example\n     *\n     * _.transform([2, 3, 4], function(result, n) {\n     *   result.push(n *= n);\n     *   return n % 2 == 0;\n     * }, []);\n     * // => [4, 9]\n     *\n     * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     */\n    function transform(object, iteratee, accumulator) {\n      var isArr = isArray(object),\n          isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n      iteratee = getIteratee(iteratee, 4);\n      if (accumulator == null) {\n        var Ctor = object && object.constructor;\n        if (isArrLike) {\n          accumulator = isArr ? new Ctor : [];\n        }\n        else if (isObject(object)) {\n          accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n        }\n        else {\n          accumulator = {};\n        }\n      }\n      (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n        return iteratee(accumulator, value, index, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * Removes the property at `path` of `object`.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n     * _.unset(object, 'a[0].b.c');\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     *\n     * _.unset(object, ['a', '0', 'b', 'c']);\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     */\n    function unset(object, path) {\n      return object == null ? true : baseUnset(object, path);\n    }\n\n    /**\n     * This method is like `_.set` except that accepts `updater` to produce the\n     * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n     * is invoked with one argument: (value).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n     * console.log(object.a[0].b.c);\n     * // => 9\n     *\n     * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n     * console.log(object.x[0].y.z);\n     * // => 0\n     */\n    function update(object, path, updater) {\n      return object == null ? object : baseUpdate(object, path, castFunction(updater));\n    }\n\n    /**\n     * This method is like `_.update` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function updateWith(object, path, updater, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n    }\n\n    /**\n     * Creates an array of the own enumerable string keyed property values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.values(new Foo);\n     * // => [1, 2] (iteration order is not guaranteed)\n     *\n     * _.values('hi');\n     * // => ['h', 'i']\n     */\n    function values(object) {\n      return object == null ? [] : baseValues(object, keys(object));\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable string keyed property\n     * values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.valuesIn(new Foo);\n     * // => [1, 2, 3] (iteration order is not guaranteed)\n     */\n    function valuesIn(object) {\n      return object == null ? [] : baseValues(object, keysIn(object));\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Clamps `number` within the inclusive `lower` and `upper` bounds.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Number\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     * @example\n     *\n     * _.clamp(-10, -5, 5);\n     * // => -5\n     *\n     * _.clamp(10, -5, 5);\n     * // => 5\n     */\n    function clamp(number, lower, upper) {\n      if (upper === undefined) {\n        upper = lower;\n        lower = undefined;\n      }\n      if (upper !== undefined) {\n        upper = toNumber(upper);\n        upper = upper === upper ? upper : 0;\n      }\n      if (lower !== undefined) {\n        lower = toNumber(lower);\n        lower = lower === lower ? lower : 0;\n      }\n      return baseClamp(toNumber(number), lower, upper);\n    }\n\n    /**\n     * Checks if `n` is between `start` and up to, but not including, `end`. If\n     * `end` is not specified, it's set to `start` with `start` then set to `0`.\n     * If `start` is greater than `end` the params are swapped to support\n     * negative ranges.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.3.0\n     * @category Number\n     * @param {number} number The number to check.\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     * @see _.range, _.rangeRight\n     * @example\n     *\n     * _.inRange(3, 2, 4);\n     * // => true\n     *\n     * _.inRange(4, 8);\n     * // => true\n     *\n     * _.inRange(4, 2);\n     * // => false\n     *\n     * _.inRange(2, 2);\n     * // => false\n     *\n     * _.inRange(1.2, 2);\n     * // => true\n     *\n     * _.inRange(5.2, 4);\n     * // => false\n     *\n     * _.inRange(-3, -2, -6);\n     * // => true\n     */\n    function inRange(number, start, end) {\n      start = toFinite(start);\n      if (end === undefined) {\n        end = start;\n        start = 0;\n      } else {\n        end = toFinite(end);\n      }\n      number = toNumber(number);\n      return baseInRange(number, start, end);\n    }\n\n    /**\n     * Produces a random number between the inclusive `lower` and `upper` bounds.\n     * If only one argument is provided a number between `0` and the given number\n     * is returned. If `floating` is `true`, or either `lower` or `upper` are\n     * floats, a floating-point number is returned instead of an integer.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Number\n     * @param {number} [lower=0] The lower bound.\n     * @param {number} [upper=1] The upper bound.\n     * @param {boolean} [floating] Specify returning a floating-point number.\n     * @returns {number} Returns the random number.\n     * @example\n     *\n     * _.random(0, 5);\n     * // => an integer between 0 and 5\n     *\n     * _.random(5);\n     * // => also an integer between 0 and 5\n     *\n     * _.random(5, true);\n     * // => a floating-point number between 0 and 5\n     *\n     * _.random(1.2, 5.2);\n     * // => a floating-point number between 1.2 and 5.2\n     */\n    function random(lower, upper, floating) {\n      if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n        upper = floating = undefined;\n      }\n      if (floating === undefined) {\n        if (typeof upper == 'boolean') {\n          floating = upper;\n          upper = undefined;\n        }\n        else if (typeof lower == 'boolean') {\n          floating = lower;\n          lower = undefined;\n        }\n      }\n      if (lower === undefined && upper === undefined) {\n        lower = 0;\n        upper = 1;\n      }\n      else {\n        lower = toFinite(lower);\n        if (upper === undefined) {\n          upper = lower;\n          lower = 0;\n        } else {\n          upper = toFinite(upper);\n        }\n      }\n      if (lower > upper) {\n        var temp = lower;\n        lower = upper;\n        upper = temp;\n      }\n      if (floating || lower % 1 || upper % 1) {\n        var rand = nativeRandom();\n        return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n      }\n      return baseRandom(lower, upper);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the camel cased string.\n     * @example\n     *\n     * _.camelCase('Foo Bar');\n     * // => 'fooBar'\n     *\n     * _.camelCase('--foo-bar--');\n     * // => 'fooBar'\n     *\n     * _.camelCase('__FOO_BAR__');\n     * // => 'fooBar'\n     */\n    var camelCase = createCompounder(function(result, word, index) {\n      word = word.toLowerCase();\n      return result + (index ? capitalize(word) : word);\n    });\n\n    /**\n     * Converts the first character of `string` to upper case and the remaining\n     * to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to capitalize.\n     * @returns {string} Returns the capitalized string.\n     * @example\n     *\n     * _.capitalize('FRED');\n     * // => 'Fred'\n     */\n    function capitalize(string) {\n      return upperFirst(toString(string).toLowerCase());\n    }\n\n    /**\n     * Deburrs `string` by converting\n     * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n     * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n     * letters to basic Latin letters and removing\n     * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to deburr.\n     * @returns {string} Returns the deburred string.\n     * @example\n     *\n     * _.deburr('déjà vu');\n     * // => 'deja vu'\n     */\n    function deburr(string) {\n      string = toString(string);\n      return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n    }\n\n    /**\n     * Checks if `string` ends with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=string.length] The position to search up to.\n     * @returns {boolean} Returns `true` if `string` ends with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.endsWith('abc', 'c');\n     * // => true\n     *\n     * _.endsWith('abc', 'b');\n     * // => false\n     *\n     * _.endsWith('abc', 'b', 2);\n     * // => true\n     */\n    function endsWith(string, target, position) {\n      string = toString(string);\n      target = baseToString(target);\n\n      var length = string.length;\n      position = position === undefined\n        ? length\n        : baseClamp(toInteger(position), 0, length);\n\n      var end = position;\n      position -= target.length;\n      return position >= 0 && string.slice(position, end) == target;\n    }\n\n    /**\n     * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n     * corresponding HTML entities.\n     *\n     * **Note:** No other characters are escaped. To escape additional\n     * characters use a third-party library like [_he_](https://mths.be/he).\n     *\n     * Though the \">\" character is escaped for symmetry, characters like\n     * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n     * unless they're part of a tag or unquoted attribute value. See\n     * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n     * (under \"semi-related fun fact\") for more details.\n     *\n     * When working with HTML you should always\n     * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n     * XSS vectors.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escape('fred, barney, & pebbles');\n     * // => 'fred, barney, &amp; pebbles'\n     */\n    function escape(string) {\n      string = toString(string);\n      return (string && reHasUnescapedHtml.test(string))\n        ? string.replace(reUnescapedHtml, escapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n     * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escapeRegExp('[lodash](https://lodash.com/)');\n     * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n     */\n    function escapeRegExp(string) {\n      string = toString(string);\n      return (string && reHasRegExpChar.test(string))\n        ? string.replace(reRegExpChar, '\\\\$&')\n        : string;\n    }\n\n    /**\n     * Converts `string` to\n     * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the kebab cased string.\n     * @example\n     *\n     * _.kebabCase('Foo Bar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('fooBar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('__FOO_BAR__');\n     * // => 'foo-bar'\n     */\n    var kebabCase = createCompounder(function(result, word, index) {\n      return result + (index ? '-' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts `string`, as space separated words, to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.lowerCase('--Foo-Bar--');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('fooBar');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('__FOO_BAR__');\n     * // => 'foo bar'\n     */\n    var lowerCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts the first character of `string` to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.lowerFirst('Fred');\n     * // => 'fred'\n     *\n     * _.lowerFirst('FRED');\n     * // => 'fRED'\n     */\n    var lowerFirst = createCaseFirst('toLowerCase');\n\n    /**\n     * Pads `string` on the left and right sides if it's shorter than `length`.\n     * Padding characters are truncated if they can't be evenly divided by `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.pad('abc', 8);\n     * // => '  abc   '\n     *\n     * _.pad('abc', 8, '_-');\n     * // => '_-abc_-_'\n     *\n     * _.pad('abc', 3);\n     * // => 'abc'\n     */\n    function pad(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      if (!length || strLength >= length) {\n        return string;\n      }\n      var mid = (length - strLength) / 2;\n      return (\n        createPadding(nativeFloor(mid), chars) +\n        string +\n        createPadding(nativeCeil(mid), chars)\n      );\n    }\n\n    /**\n     * Pads `string` on the right side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padEnd('abc', 6);\n     * // => 'abc   '\n     *\n     * _.padEnd('abc', 6, '_-');\n     * // => 'abc_-_'\n     *\n     * _.padEnd('abc', 3);\n     * // => 'abc'\n     */\n    function padEnd(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (string + createPadding(length - strLength, chars))\n        : string;\n    }\n\n    /**\n     * Pads `string` on the left side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padStart('abc', 6);\n     * // => '   abc'\n     *\n     * _.padStart('abc', 6, '_-');\n     * // => '_-_abc'\n     *\n     * _.padStart('abc', 3);\n     * // => 'abc'\n     */\n    function padStart(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (createPadding(length - strLength, chars) + string)\n        : string;\n    }\n\n    /**\n     * Converts `string` to an integer of the specified radix. If `radix` is\n     * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n     * hexadecimal, in which case a `radix` of `16` is used.\n     *\n     * **Note:** This method aligns with the\n     * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category String\n     * @param {string} string The string to convert.\n     * @param {number} [radix=10] The radix to interpret `value` by.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.parseInt('08');\n     * // => 8\n     *\n     * _.map(['6', '08', '10'], _.parseInt);\n     * // => [6, 8, 10]\n     */\n    function parseInt(string, radix, guard) {\n      if (guard || radix == null) {\n        radix = 0;\n      } else if (radix) {\n        radix = +radix;\n      }\n      return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n    }\n\n    /**\n     * Repeats the given string `n` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to repeat.\n     * @param {number} [n=1] The number of times to repeat the string.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the repeated string.\n     * @example\n     *\n     * _.repeat('*', 3);\n     * // => '***'\n     *\n     * _.repeat('abc', 2);\n     * // => 'abcabc'\n     *\n     * _.repeat('abc', 0);\n     * // => ''\n     */\n    function repeat(string, n, guard) {\n      if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      return baseRepeat(toString(string), n);\n    }\n\n    /**\n     * Replaces matches for `pattern` in `string` with `replacement`.\n     *\n     * **Note:** This method is based on\n     * [`String#replace`](https://mdn.io/String/replace).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to modify.\n     * @param {RegExp|string} pattern The pattern to replace.\n     * @param {Function|string} replacement The match replacement.\n     * @returns {string} Returns the modified string.\n     * @example\n     *\n     * _.replace('Hi Fred', 'Fred', 'Barney');\n     * // => 'Hi Barney'\n     */\n    function replace() {\n      var args = arguments,\n          string = toString(args[0]);\n\n      return args.length < 3 ? string : string.replace(args[1], args[2]);\n    }\n\n    /**\n     * Converts `string` to\n     * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the snake cased string.\n     * @example\n     *\n     * _.snakeCase('Foo Bar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('fooBar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('--FOO-BAR--');\n     * // => 'foo_bar'\n     */\n    var snakeCase = createCompounder(function(result, word, index) {\n      return result + (index ? '_' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Splits `string` by `separator`.\n     *\n     * **Note:** This method is based on\n     * [`String#split`](https://mdn.io/String/split).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to split.\n     * @param {RegExp|string} separator The separator pattern to split by.\n     * @param {number} [limit] The length to truncate results to.\n     * @returns {Array} Returns the string segments.\n     * @example\n     *\n     * _.split('a-b-c', '-', 2);\n     * // => ['a', 'b']\n     */\n    function split(string, separator, limit) {\n      if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n        separator = limit = undefined;\n      }\n      limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n      if (!limit) {\n        return [];\n      }\n      string = toString(string);\n      if (string && (\n            typeof separator == 'string' ||\n            (separator != null && !isRegExp(separator))\n          )) {\n        separator = baseToString(separator);\n        if (!separator && hasUnicode(string)) {\n          return castSlice(stringToArray(string), 0, limit);\n        }\n      }\n      return string.split(separator, limit);\n    }\n\n    /**\n     * Converts `string` to\n     * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.1.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the start cased string.\n     * @example\n     *\n     * _.startCase('--foo-bar--');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('fooBar');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('__FOO_BAR__');\n     * // => 'FOO BAR'\n     */\n    var startCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + upperFirst(word);\n    });\n\n    /**\n     * Checks if `string` starts with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=0] The position to search from.\n     * @returns {boolean} Returns `true` if `string` starts with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.startsWith('abc', 'a');\n     * // => true\n     *\n     * _.startsWith('abc', 'b');\n     * // => false\n     *\n     * _.startsWith('abc', 'b', 1);\n     * // => true\n     */\n    function startsWith(string, target, position) {\n      string = toString(string);\n      position = position == null\n        ? 0\n        : baseClamp(toInteger(position), 0, string.length);\n\n      target = baseToString(target);\n      return string.slice(position, position + target.length) == target;\n    }\n\n    /**\n     * Creates a compiled template function that can interpolate data properties\n     * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n     * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n     * properties may be accessed as free variables in the template. If a setting\n     * object is given, it takes precedence over `_.templateSettings` values.\n     *\n     * **Note:** In the development build `_.template` utilizes\n     * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n     * for easier debugging.\n     *\n     * For more information on precompiling templates see\n     * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n     *\n     * For more information on Chrome extension sandboxes see\n     * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The template string.\n     * @param {Object} [options={}] The options object.\n     * @param {RegExp} [options.escape=_.templateSettings.escape]\n     *  The HTML \"escape\" delimiter.\n     * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n     *  The \"evaluate\" delimiter.\n     * @param {Object} [options.imports=_.templateSettings.imports]\n     *  An object to import into the template as free variables.\n     * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n     *  The \"interpolate\" delimiter.\n     * @param {string} [options.sourceURL='lodash.templateSources[n]']\n     *  The sourceURL of the compiled template.\n     * @param {string} [options.variable='obj']\n     *  The data object variable name.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the compiled template function.\n     * @example\n     *\n     * // Use the \"interpolate\" delimiter to create a compiled template.\n     * var compiled = _.template('hello <%= user %>!');\n     * compiled({ 'user': 'fred' });\n     * // => 'hello fred!'\n     *\n     * // Use the HTML \"escape\" delimiter to escape data property values.\n     * var compiled = _.template('<b><%- value %><\/b>');\n     * compiled({ 'value': '<script>' });\n     * // => '<b>&lt;script&gt;<\/b>'\n     *\n     * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n     * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %><\/li><% }); %>');\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred<\/li><li>barney<\/li>'\n     *\n     * // Use the internal `print` function in \"evaluate\" delimiters.\n     * var compiled = _.template('<% print(\"hello \" + user); %>!');\n     * compiled({ 'user': 'barney' });\n     * // => 'hello barney!'\n     *\n     * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n     * // Disable support by replacing the \"interpolate\" delimiter.\n     * var compiled = _.template('hello ${ user }!');\n     * compiled({ 'user': 'pebbles' });\n     * // => 'hello pebbles!'\n     *\n     * // Use backslashes to treat delimiters as plain text.\n     * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n     * compiled({ 'value': 'ignored' });\n     * // => '<%- value %>'\n     *\n     * // Use the `imports` option to import `jQuery` as `jq`.\n     * var text = '<% jq.each(users, function(user) { %><li><%- user %><\/li><% }); %>';\n     * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred<\/li><li>barney<\/li>'\n     *\n     * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n     * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n     * compiled(data);\n     * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n     *\n     * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n     * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n     * compiled.source;\n     * // => function(data) {\n     * //   var __t, __p = '';\n     * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n     * //   return __p;\n     * // }\n     *\n     * // Use custom template delimiters.\n     * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n     * var compiled = _.template('hello {{ user }}!');\n     * compiled({ 'user': 'mustache' });\n     * // => 'hello mustache!'\n     *\n     * // Use the `source` property to inline compiled templates for meaningful\n     * // line numbers in error messages and stack traces.\n     * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n     *   var JST = {\\\n     *     \"main\": ' + _.template(mainText).source + '\\\n     *   };\\\n     * ');\n     */\n    function template(string, options, guard) {\n      // Based on John Resig's `tmpl` implementation\n      // (http://ejohn.org/blog/javascript-micro-templating/)\n      // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n      var settings = lodash.templateSettings;\n\n      if (guard && isIterateeCall(string, options, guard)) {\n        options = undefined;\n      }\n      string = toString(string);\n      options = assignInWith({}, options, settings, customDefaultsAssignIn);\n\n      var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n          importsKeys = keys(imports),\n          importsValues = baseValues(imports, importsKeys);\n\n      var isEscaping,\n          isEvaluating,\n          index = 0,\n          interpolate = options.interpolate || reNoMatch,\n          source = \"__p += '\";\n\n      // Compile the regexp to match each delimiter.\n      var reDelimiters = RegExp(\n        (options.escape || reNoMatch).source + '|' +\n        interpolate.source + '|' +\n        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n        (options.evaluate || reNoMatch).source + '|$'\n      , 'g');\n\n      // Use a sourceURL for easier debugging.\n      // The sourceURL gets injected into the source that's eval-ed, so be careful\n      // with lookup (in case of e.g. prototype pollution), and strip newlines if any.\n      // A newline wouldn't be a valid sourceURL anyway, and it'd enable code injection.\n      var sourceURL = '//# sourceURL=' +\n        (hasOwnProperty.call(options, 'sourceURL')\n          ? (options.sourceURL + '').replace(/[\\r\\n]/g, ' ')\n          : ('lodash.templateSources[' + (++templateCounter) + ']')\n        ) + '\\n';\n\n      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n        interpolateValue || (interpolateValue = esTemplateValue);\n\n        // Escape characters that can't be included in string literals.\n        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n        // Replace delimiters with snippets.\n        if (escapeValue) {\n          isEscaping = true;\n          source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n        }\n        if (evaluateValue) {\n          isEvaluating = true;\n          source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n        }\n        if (interpolateValue) {\n          source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n        }\n        index = offset + match.length;\n\n        // The JS engine embedded in Adobe products needs `match` returned in\n        // order to produce the correct `offset` value.\n        return match;\n      });\n\n      source += \"';\\n\";\n\n      // If `variable` is not specified wrap a with-statement around the generated\n      // code to add the data object to the top of the scope chain.\n      // Like with sourceURL, we take care to not check the option's prototype,\n      // as this configuration is a code injection vector.\n      var variable = hasOwnProperty.call(options, 'variable') && options.variable;\n      if (!variable) {\n        source = 'with (obj) {\\n' + source + '\\n}\\n';\n      }\n      // Cleanup code by stripping empty strings.\n      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n        .replace(reEmptyStringMiddle, '$1')\n        .replace(reEmptyStringTrailing, '$1;');\n\n      // Frame code as the function body.\n      source = 'function(' + (variable || 'obj') + ') {\\n' +\n        (variable\n          ? ''\n          : 'obj || (obj = {});\\n'\n        ) +\n        \"var __t, __p = ''\" +\n        (isEscaping\n           ? ', __e = _.escape'\n           : ''\n        ) +\n        (isEvaluating\n          ? ', __j = Array.prototype.join;\\n' +\n            \"function print() { __p += __j.call(arguments, '') }\\n\"\n          : ';\\n'\n        ) +\n        source +\n        'return __p\\n}';\n\n      var result = attempt(function() {\n        return Function(importsKeys, sourceURL + 'return ' + source)\n          .apply(undefined, importsValues);\n      });\n\n      // Provide the compiled function's source by its `toString` method or\n      // the `source` property as a convenience for inlining compiled templates.\n      result.source = source;\n      if (isError(result)) {\n        throw result;\n      }\n      return result;\n    }\n\n    /**\n     * Converts `string`, as a whole, to lower case just like\n     * [String#toLowerCase](https://mdn.io/toLowerCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.toLower('--Foo-Bar--');\n     * // => '--foo-bar--'\n     *\n     * _.toLower('fooBar');\n     * // => 'foobar'\n     *\n     * _.toLower('__FOO_BAR__');\n     * // => '__foo_bar__'\n     */\n    function toLower(value) {\n      return toString(value).toLowerCase();\n    }\n\n    /**\n     * Converts `string`, as a whole, to upper case just like\n     * [String#toUpperCase](https://mdn.io/toUpperCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.toUpper('--foo-bar--');\n     * // => '--FOO-BAR--'\n     *\n     * _.toUpper('fooBar');\n     * // => 'FOOBAR'\n     *\n     * _.toUpper('__foo_bar__');\n     * // => '__FOO_BAR__'\n     */\n    function toUpper(value) {\n      return toString(value).toUpperCase();\n    }\n\n    /**\n     * Removes leading and trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trim('  abc  ');\n     * // => 'abc'\n     *\n     * _.trim('-_-abc-_-', '_-');\n     * // => 'abc'\n     *\n     * _.map(['  foo  ', '  bar  '], _.trim);\n     * // => ['foo', 'bar']\n     */\n    function trim(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.replace(reTrim, '');\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          chrSymbols = stringToArray(chars),\n          start = charsStartIndex(strSymbols, chrSymbols),\n          end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n      return castSlice(strSymbols, start, end).join('');\n    }\n\n    /**\n     * Removes trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimEnd('  abc  ');\n     * // => '  abc'\n     *\n     * _.trimEnd('-_-abc-_-', '_-');\n     * // => '-_-abc'\n     */\n    function trimEnd(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.replace(reTrimEnd, '');\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\n\n      return castSlice(strSymbols, 0, end).join('');\n    }\n\n    /**\n     * Removes leading whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimStart('  abc  ');\n     * // => 'abc  '\n     *\n     * _.trimStart('-_-abc-_-', '_-');\n     * // => 'abc-_-'\n     */\n    function trimStart(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.replace(reTrimStart, '');\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          start = charsStartIndex(strSymbols, stringToArray(chars));\n\n      return castSlice(strSymbols, start).join('');\n    }\n\n    /**\n     * Truncates `string` if it's longer than the given maximum string length.\n     * The last characters of the truncated string are replaced with the omission\n     * string which defaults to \"...\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to truncate.\n     * @param {Object} [options={}] The options object.\n     * @param {number} [options.length=30] The maximum string length.\n     * @param {string} [options.omission='...'] The string to indicate text is omitted.\n     * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n     * @returns {string} Returns the truncated string.\n     * @example\n     *\n     * _.truncate('hi-diddly-ho there, neighborino');\n     * // => 'hi-diddly-ho there, neighbo...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': ' '\n     * });\n     * // => 'hi-diddly-ho there,...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': /,? +/\n     * });\n     * // => 'hi-diddly-ho there...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'omission': ' [...]'\n     * });\n     * // => 'hi-diddly-ho there, neig [...]'\n     */\n    function truncate(string, options) {\n      var length = DEFAULT_TRUNC_LENGTH,\n          omission = DEFAULT_TRUNC_OMISSION;\n\n      if (isObject(options)) {\n        var separator = 'separator' in options ? options.separator : separator;\n        length = 'length' in options ? toInteger(options.length) : length;\n        omission = 'omission' in options ? baseToString(options.omission) : omission;\n      }\n      string = toString(string);\n\n      var strLength = string.length;\n      if (hasUnicode(string)) {\n        var strSymbols = stringToArray(string);\n        strLength = strSymbols.length;\n      }\n      if (length >= strLength) {\n        return string;\n      }\n      var end = length - stringSize(omission);\n      if (end < 1) {\n        return omission;\n      }\n      var result = strSymbols\n        ? castSlice(strSymbols, 0, end).join('')\n        : string.slice(0, end);\n\n      if (separator === undefined) {\n        return result + omission;\n      }\n      if (strSymbols) {\n        end += (result.length - end);\n      }\n      if (isRegExp(separator)) {\n        if (string.slice(end).search(separator)) {\n          var match,\n              substring = result;\n\n          if (!separator.global) {\n            separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\n          }\n          separator.lastIndex = 0;\n          while ((match = separator.exec(substring))) {\n            var newEnd = match.index;\n          }\n          result = result.slice(0, newEnd === undefined ? end : newEnd);\n        }\n      } else if (string.indexOf(baseToString(separator), end) != end) {\n        var index = result.lastIndexOf(separator);\n        if (index > -1) {\n          result = result.slice(0, index);\n        }\n      }\n      return result + omission;\n    }\n\n    /**\n     * The inverse of `_.escape`; this method converts the HTML entities\n     * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to\n     * their corresponding characters.\n     *\n     * **Note:** No other HTML entities are unescaped. To unescape additional\n     * HTML entities use a third-party library like [_he_](https://mths.be/he).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.6.0\n     * @category String\n     * @param {string} [string=''] The string to unescape.\n     * @returns {string} Returns the unescaped string.\n     * @example\n     *\n     * _.unescape('fred, barney, &amp; pebbles');\n     * // => 'fred, barney, & pebbles'\n     */\n    function unescape(string) {\n      string = toString(string);\n      return (string && reHasEscapedHtml.test(string))\n        ? string.replace(reEscapedHtml, unescapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Converts `string`, as space separated words, to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.upperCase('--foo-bar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('fooBar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('__foo_bar__');\n     * // => 'FOO BAR'\n     */\n    var upperCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toUpperCase();\n    });\n\n    /**\n     * Converts the first character of `string` to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.upperFirst('fred');\n     * // => 'Fred'\n     *\n     * _.upperFirst('FRED');\n     * // => 'FRED'\n     */\n    var upperFirst = createCaseFirst('toUpperCase');\n\n    /**\n     * Splits `string` into an array of its words.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {RegExp|string} [pattern] The pattern to match words.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the words of `string`.\n     * @example\n     *\n     * _.words('fred, barney, & pebbles');\n     * // => ['fred', 'barney', 'pebbles']\n     *\n     * _.words('fred, barney, & pebbles', /[^, ]+/g);\n     * // => ['fred', 'barney', '&', 'pebbles']\n     */\n    function words(string, pattern, guard) {\n      string = toString(string);\n      pattern = guard ? undefined : pattern;\n\n      if (pattern === undefined) {\n        return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n      }\n      return string.match(pattern) || [];\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Attempts to invoke `func`, returning either the result or the caught error\n     * object. Any additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Function} func The function to attempt.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {*} Returns the `func` result or error object.\n     * @example\n     *\n     * // Avoid throwing errors for invalid selectors.\n     * var elements = _.attempt(function(selector) {\n     *   return document.querySelectorAll(selector);\n     * }, '>_>');\n     *\n     * if (_.isError(elements)) {\n     *   elements = [];\n     * }\n     */\n    var attempt = baseRest(function(func, args) {\n      try {\n        return apply(func, undefined, args);\n      } catch (e) {\n        return isError(e) ? e : new Error(e);\n      }\n    });\n\n    /**\n     * Binds methods of an object to the object itself, overwriting the existing\n     * method.\n     *\n     * **Note:** This method doesn't set the \"length\" property of bound functions.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Object} object The object to bind and assign the bound methods to.\n     * @param {...(string|string[])} methodNames The object method names to bind.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var view = {\n     *   'label': 'docs',\n     *   'click': function() {\n     *     console.log('clicked ' + this.label);\n     *   }\n     * };\n     *\n     * _.bindAll(view, ['click']);\n     * jQuery(element).on('click', view.click);\n     * // => Logs 'clicked docs' when clicked.\n     */\n    var bindAll = flatRest(function(object, methodNames) {\n      arrayEach(methodNames, function(key) {\n        key = toKey(key);\n        baseAssignValue(object, key, bind(object[key], object));\n      });\n      return object;\n    });\n\n    /**\n     * Creates a function that iterates over `pairs` and invokes the corresponding\n     * function of the first predicate to return truthy. The predicate-function\n     * pairs are invoked with the `this` binding and arguments of the created\n     * function.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Array} pairs The predicate-function pairs.\n     * @returns {Function} Returns the new composite function.\n     * @example\n     *\n     * var func = _.cond([\n     *   [_.matches({ 'a': 1 }),           _.constant('matches A')],\n     *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n     *   [_.stubTrue,                      _.constant('no match')]\n     * ]);\n     *\n     * func({ 'a': 1, 'b': 2 });\n     * // => 'matches A'\n     *\n     * func({ 'a': 0, 'b': 1 });\n     * // => 'matches B'\n     *\n     * func({ 'a': '1', 'b': '2' });\n     * // => 'no match'\n     */\n    function cond(pairs) {\n      var length = pairs == null ? 0 : pairs.length,\n          toIteratee = getIteratee();\n\n      pairs = !length ? [] : arrayMap(pairs, function(pair) {\n        if (typeof pair[1] != 'function') {\n          throw new TypeError(FUNC_ERROR_TEXT);\n        }\n        return [toIteratee(pair[0]), pair[1]];\n      });\n\n      return baseRest(function(args) {\n        var index = -1;\n        while (++index < length) {\n          var pair = pairs[index];\n          if (apply(pair[0], this, args)) {\n            return apply(pair[1], this, args);\n          }\n        }\n      });\n    }\n\n    /**\n     * Creates a function that invokes the predicate properties of `source` with\n     * the corresponding property values of a given object, returning `true` if\n     * all predicates return truthy, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.conformsTo` with\n     * `source` partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 2, 'b': 1 },\n     *   { 'a': 1, 'b': 2 }\n     * ];\n     *\n     * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n     * // => [{ 'a': 1, 'b': 2 }]\n     */\n    function conforms(source) {\n      return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that returns `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {*} value The value to return from the new function.\n     * @returns {Function} Returns the new constant function.\n     * @example\n     *\n     * var objects = _.times(2, _.constant({ 'a': 1 }));\n     *\n     * console.log(objects);\n     * // => [{ 'a': 1 }, { 'a': 1 }]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => true\n     */\n    function constant(value) {\n      return function() {\n        return value;\n      };\n    }\n\n    /**\n     * Checks `value` to determine whether a default value should be returned in\n     * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n     * or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Util\n     * @param {*} value The value to check.\n     * @param {*} defaultValue The default value.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * _.defaultTo(1, 10);\n     * // => 1\n     *\n     * _.defaultTo(undefined, 10);\n     * // => 10\n     */\n    function defaultTo(value, defaultValue) {\n      return (value == null || value !== value) ? defaultValue : value;\n    }\n\n    /**\n     * Creates a function that returns the result of invoking the given functions\n     * with the `this` binding of the created function, where each successive\n     * invocation is supplied the return value of the previous.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flowRight\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flow([_.add, square]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flow = createFlow();\n\n    /**\n     * This method is like `_.flow` except that it creates a function that\n     * invokes the given functions from right to left.\n     *\n     * @static\n     * @since 3.0.0\n     * @memberOf _\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flow\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flowRight([square, _.add]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flowRight = createFlow(true);\n\n    /**\n     * This method returns the first argument it receives.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {*} value Any value.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     *\n     * console.log(_.identity(object) === object);\n     * // => true\n     */\n    function identity(value) {\n      return value;\n    }\n\n    /**\n     * Creates a function that invokes `func` with the arguments of the created\n     * function. If `func` is a property name, the created function returns the\n     * property value for a given element. If `func` is an array or object, the\n     * created function returns `true` for elements that contain the equivalent\n     * source properties, otherwise it returns `false`.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Util\n     * @param {*} [func=_.identity] The value to convert to a callback.\n     * @returns {Function} Returns the callback.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n     * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, _.iteratee(['user', 'fred']));\n     * // => [{ 'user': 'fred', 'age': 40 }]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, _.iteratee('user'));\n     * // => ['barney', 'fred']\n     *\n     * // Create custom iteratee shorthands.\n     * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n     *   return !_.isRegExp(func) ? iteratee(func) : function(string) {\n     *     return func.test(string);\n     *   };\n     * });\n     *\n     * _.filter(['abc', 'def'], /ef/);\n     * // => ['def']\n     */\n    function iteratee(func) {\n      return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between a given\n     * object and `source`, returning `true` if the given object has equivalent\n     * property values, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.isMatch` with `source`\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n     * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n     */\n    function matches(source) {\n      return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between the\n     * value at `path` of a given object to `srcValue`, returning `true` if the\n     * object value is equivalent, else `false`.\n     *\n     * **Note:** Partial comparisons will match empty array and empty object\n     * `srcValue` values against any array or object value, respectively. See\n     * `_.isEqual` for a list of supported value comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.find(objects, _.matchesProperty('a', 4));\n     * // => { 'a': 4, 'b': 5, 'c': 6 }\n     */\n    function matchesProperty(path, srcValue) {\n      return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that invokes the method at `path` of a given object.\n     * Any additional arguments are provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': _.constant(2) } },\n     *   { 'a': { 'b': _.constant(1) } }\n     * ];\n     *\n     * _.map(objects, _.method('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(objects, _.method(['a', 'b']));\n     * // => [2, 1]\n     */\n    var method = baseRest(function(path, args) {\n      return function(object) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * The opposite of `_.method`; this method creates a function that invokes\n     * the method at a given path of `object`. Any additional arguments are\n     * provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var array = _.times(3, _.constant),\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n     * // => [2, 0]\n     */\n    var methodOf = baseRest(function(object, args) {\n      return function(path) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * Adds all own enumerable string keyed function properties of a source\n     * object to the destination object. If `object` is a function, then methods\n     * are added to its prototype as well.\n     *\n     * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n     * avoid conflicts caused by modifying the original.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Function|Object} [object=lodash] The destination object.\n     * @param {Object} source The object of functions to add.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n     * @returns {Function|Object} Returns `object`.\n     * @example\n     *\n     * function vowels(string) {\n     *   return _.filter(string, function(v) {\n     *     return /[aeiou]/i.test(v);\n     *   });\n     * }\n     *\n     * _.mixin({ 'vowels': vowels });\n     * _.vowels('fred');\n     * // => ['e']\n     *\n     * _('fred').vowels().value();\n     * // => ['e']\n     *\n     * _.mixin({ 'vowels': vowels }, { 'chain': false });\n     * _('fred').vowels();\n     * // => ['e']\n     */\n    function mixin(object, source, options) {\n      var props = keys(source),\n          methodNames = baseFunctions(source, props);\n\n      if (options == null &&\n          !(isObject(source) && (methodNames.length || !props.length))) {\n        options = source;\n        source = object;\n        object = this;\n        methodNames = baseFunctions(source, keys(source));\n      }\n      var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\n          isFunc = isFunction(object);\n\n      arrayEach(methodNames, function(methodName) {\n        var func = source[methodName];\n        object[methodName] = func;\n        if (isFunc) {\n          object.prototype[methodName] = function() {\n            var chainAll = this.__chain__;\n            if (chain || chainAll) {\n              var result = object(this.__wrapped__),\n                  actions = result.__actions__ = copyArray(this.__actions__);\n\n              actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n              result.__chain__ = chainAll;\n              return result;\n            }\n            return func.apply(object, arrayPush([this.value()], arguments));\n          };\n        }\n      });\n\n      return object;\n    }\n\n    /**\n     * Reverts the `_` variable to its previous value and returns a reference to\n     * the `lodash` function.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @returns {Function} Returns the `lodash` function.\n     * @example\n     *\n     * var lodash = _.noConflict();\n     */\n    function noConflict() {\n      if (root._ === this) {\n        root._ = oldDash;\n      }\n      return this;\n    }\n\n    /**\n     * This method returns `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Util\n     * @example\n     *\n     * _.times(2, _.noop);\n     * // => [undefined, undefined]\n     */\n    function noop() {\n      // No operation performed.\n    }\n\n    /**\n     * Creates a function that gets the argument at index `n`. If `n` is negative,\n     * the nth argument from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [n=0] The index of the argument to return.\n     * @returns {Function} Returns the new pass-thru function.\n     * @example\n     *\n     * var func = _.nthArg(1);\n     * func('a', 'b', 'c', 'd');\n     * // => 'b'\n     *\n     * var func = _.nthArg(-2);\n     * func('a', 'b', 'c', 'd');\n     * // => 'c'\n     */\n    function nthArg(n) {\n      n = toInteger(n);\n      return baseRest(function(args) {\n        return baseNth(args, n);\n      });\n    }\n\n    /**\n     * Creates a function that invokes `iteratees` with the arguments it receives\n     * and returns their results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to invoke.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.over([Math.max, Math.min]);\n     *\n     * func(1, 2, 3, 4);\n     * // => [4, 1]\n     */\n    var over = createOver(arrayMap);\n\n    /**\n     * Creates a function that checks if **all** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overEvery([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => false\n     *\n     * func(NaN);\n     * // => false\n     */\n    var overEvery = createOver(arrayEvery);\n\n    /**\n     * Creates a function that checks if **any** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overSome([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => true\n     *\n     * func(NaN);\n     * // => false\n     */\n    var overSome = createOver(arraySome);\n\n    /**\n     * Creates a function that returns the value at `path` of a given object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': 2 } },\n     *   { 'a': { 'b': 1 } }\n     * ];\n     *\n     * _.map(objects, _.property('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n     * // => [1, 2]\n     */\n    function property(path) {\n      return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n    }\n\n    /**\n     * The opposite of `_.property`; this method creates a function that returns\n     * the value at a given path of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var array = [0, 1, 2],\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n     * // => [2, 0]\n     */\n    function propertyOf(object) {\n      return function(path) {\n        return object == null ? undefined : baseGet(object, path);\n      };\n    }\n\n    /**\n     * Creates an array of numbers (positive and/or negative) progressing from\n     * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n     * `start` is specified without an `end` or `step`. If `end` is not specified,\n     * it's set to `start` with `start` then set to `0`.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.rangeRight\n     * @example\n     *\n     * _.range(4);\n     * // => [0, 1, 2, 3]\n     *\n     * _.range(-4);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 5);\n     * // => [1, 2, 3, 4]\n     *\n     * _.range(0, 20, 5);\n     * // => [0, 5, 10, 15]\n     *\n     * _.range(0, -4, -1);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.range(0);\n     * // => []\n     */\n    var range = createRange();\n\n    /**\n     * This method is like `_.range` except that it populates values in\n     * descending order.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.range\n     * @example\n     *\n     * _.rangeRight(4);\n     * // => [3, 2, 1, 0]\n     *\n     * _.rangeRight(-4);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 5);\n     * // => [4, 3, 2, 1]\n     *\n     * _.rangeRight(0, 20, 5);\n     * // => [15, 10, 5, 0]\n     *\n     * _.rangeRight(0, -4, -1);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.rangeRight(0);\n     * // => []\n     */\n    var rangeRight = createRange(true);\n\n    /**\n     * This method returns a new empty array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Array} Returns the new empty array.\n     * @example\n     *\n     * var arrays = _.times(2, _.stubArray);\n     *\n     * console.log(arrays);\n     * // => [[], []]\n     *\n     * console.log(arrays[0] === arrays[1]);\n     * // => false\n     */\n    function stubArray() {\n      return [];\n    }\n\n    /**\n     * This method returns `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `false`.\n     * @example\n     *\n     * _.times(2, _.stubFalse);\n     * // => [false, false]\n     */\n    function stubFalse() {\n      return false;\n    }\n\n    /**\n     * This method returns a new empty object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Object} Returns the new empty object.\n     * @example\n     *\n     * var objects = _.times(2, _.stubObject);\n     *\n     * console.log(objects);\n     * // => [{}, {}]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => false\n     */\n    function stubObject() {\n      return {};\n    }\n\n    /**\n     * This method returns an empty string.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {string} Returns the empty string.\n     * @example\n     *\n     * _.times(2, _.stubString);\n     * // => ['', '']\n     */\n    function stubString() {\n      return '';\n    }\n\n    /**\n     * This method returns `true`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `true`.\n     * @example\n     *\n     * _.times(2, _.stubTrue);\n     * // => [true, true]\n     */\n    function stubTrue() {\n      return true;\n    }\n\n    /**\n     * Invokes the iteratee `n` times, returning an array of the results of\n     * each invocation. The iteratee is invoked with one argument; (index).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} n The number of times to invoke `iteratee`.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.times(3, String);\n     * // => ['0', '1', '2']\n     *\n     *  _.times(4, _.constant(0));\n     * // => [0, 0, 0, 0]\n     */\n    function times(n, iteratee) {\n      n = toInteger(n);\n      if (n < 1 || n > MAX_SAFE_INTEGER) {\n        return [];\n      }\n      var index = MAX_ARRAY_LENGTH,\n          length = nativeMin(n, MAX_ARRAY_LENGTH);\n\n      iteratee = getIteratee(iteratee);\n      n -= MAX_ARRAY_LENGTH;\n\n      var result = baseTimes(length, iteratee);\n      while (++index < n) {\n        iteratee(index);\n      }\n      return result;\n    }\n\n    /**\n     * Converts `value` to a property path array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the new property path array.\n     * @example\n     *\n     * _.toPath('a.b.c');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toPath('a[0].b.c');\n     * // => ['a', '0', 'b', 'c']\n     */\n    function toPath(value) {\n      if (isArray(value)) {\n        return arrayMap(value, toKey);\n      }\n      return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n    }\n\n    /**\n     * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {string} [prefix=''] The value to prefix the ID with.\n     * @returns {string} Returns the unique ID.\n     * @example\n     *\n     * _.uniqueId('contact_');\n     * // => 'contact_104'\n     *\n     * _.uniqueId();\n     * // => '105'\n     */\n    function uniqueId(prefix) {\n      var id = ++idCounter;\n      return toString(prefix) + id;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Adds two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {number} augend The first number in an addition.\n     * @param {number} addend The second number in an addition.\n     * @returns {number} Returns the total.\n     * @example\n     *\n     * _.add(6, 4);\n     * // => 10\n     */\n    var add = createMathOperation(function(augend, addend) {\n      return augend + addend;\n    }, 0);\n\n    /**\n     * Computes `number` rounded up to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round up.\n     * @param {number} [precision=0] The precision to round up to.\n     * @returns {number} Returns the rounded up number.\n     * @example\n     *\n     * _.ceil(4.006);\n     * // => 5\n     *\n     * _.ceil(6.004, 2);\n     * // => 6.01\n     *\n     * _.ceil(6040, -2);\n     * // => 6100\n     */\n    var ceil = createRound('ceil');\n\n    /**\n     * Divide two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} dividend The first number in a division.\n     * @param {number} divisor The second number in a division.\n     * @returns {number} Returns the quotient.\n     * @example\n     *\n     * _.divide(6, 4);\n     * // => 1.5\n     */\n    var divide = createMathOperation(function(dividend, divisor) {\n      return dividend / divisor;\n    }, 1);\n\n    /**\n     * Computes `number` rounded down to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round down.\n     * @param {number} [precision=0] The precision to round down to.\n     * @returns {number} Returns the rounded down number.\n     * @example\n     *\n     * _.floor(4.006);\n     * // => 4\n     *\n     * _.floor(0.046, 2);\n     * // => 0.04\n     *\n     * _.floor(4060, -2);\n     * // => 4000\n     */\n    var floor = createRound('floor');\n\n    /**\n     * Computes the maximum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * _.max([4, 2, 8, 6]);\n     * // => 8\n     *\n     * _.max([]);\n     * // => undefined\n     */\n    function max(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseGt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.max` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.maxBy(objects, function(o) { return o.n; });\n     * // => { 'n': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.maxBy(objects, 'n');\n     * // => { 'n': 2 }\n     */\n    function maxBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)\n        : undefined;\n    }\n\n    /**\n     * Computes the mean of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * _.mean([4, 2, 8, 6]);\n     * // => 5\n     */\n    function mean(array) {\n      return baseMean(array, identity);\n    }\n\n    /**\n     * This method is like `_.mean` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be averaged.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.meanBy(objects, function(o) { return o.n; });\n     * // => 5\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.meanBy(objects, 'n');\n     * // => 5\n     */\n    function meanBy(array, iteratee) {\n      return baseMean(array, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * Computes the minimum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * _.min([4, 2, 8, 6]);\n     * // => 2\n     *\n     * _.min([]);\n     * // => undefined\n     */\n    function min(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseLt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.min` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.minBy(objects, function(o) { return o.n; });\n     * // => { 'n': 1 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.minBy(objects, 'n');\n     * // => { 'n': 1 }\n     */\n    function minBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)\n        : undefined;\n    }\n\n    /**\n     * Multiply two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} multiplier The first number in a multiplication.\n     * @param {number} multiplicand The second number in a multiplication.\n     * @returns {number} Returns the product.\n     * @example\n     *\n     * _.multiply(6, 4);\n     * // => 24\n     */\n    var multiply = createMathOperation(function(multiplier, multiplicand) {\n      return multiplier * multiplicand;\n    }, 1);\n\n    /**\n     * Computes `number` rounded to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round.\n     * @param {number} [precision=0] The precision to round to.\n     * @returns {number} Returns the rounded number.\n     * @example\n     *\n     * _.round(4.006);\n     * // => 4\n     *\n     * _.round(4.006, 2);\n     * // => 4.01\n     *\n     * _.round(4060, -2);\n     * // => 4100\n     */\n    var round = createRound('round');\n\n    /**\n     * Subtract two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {number} minuend The first number in a subtraction.\n     * @param {number} subtrahend The second number in a subtraction.\n     * @returns {number} Returns the difference.\n     * @example\n     *\n     * _.subtract(6, 4);\n     * // => 2\n     */\n    var subtract = createMathOperation(function(minuend, subtrahend) {\n      return minuend - subtrahend;\n    }, 0);\n\n    /**\n     * Computes the sum of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * _.sum([4, 2, 8, 6]);\n     * // => 20\n     */\n    function sum(array) {\n      return (array && array.length)\n        ? baseSum(array, identity)\n        : 0;\n    }\n\n    /**\n     * This method is like `_.sum` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be summed.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.sumBy(objects, function(o) { return o.n; });\n     * // => 20\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sumBy(objects, 'n');\n     * // => 20\n     */\n    function sumBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSum(array, getIteratee(iteratee, 2))\n        : 0;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return wrapped values in chain sequences.\n    lodash.after = after;\n    lodash.ary = ary;\n    lodash.assign = assign;\n    lodash.assignIn = assignIn;\n    lodash.assignInWith = assignInWith;\n    lodash.assignWith = assignWith;\n    lodash.at = at;\n    lodash.before = before;\n    lodash.bind = bind;\n    lodash.bindAll = bindAll;\n    lodash.bindKey = bindKey;\n    lodash.castArray = castArray;\n    lodash.chain = chain;\n    lodash.chunk = chunk;\n    lodash.compact = compact;\n    lodash.concat = concat;\n    lodash.cond = cond;\n    lodash.conforms = conforms;\n    lodash.constant = constant;\n    lodash.countBy = countBy;\n    lodash.create = create;\n    lodash.curry = curry;\n    lodash.curryRight = curryRight;\n    lodash.debounce = debounce;\n    lodash.defaults = defaults;\n    lodash.defaultsDeep = defaultsDeep;\n    lodash.defer = defer;\n    lodash.delay = delay;\n    lodash.difference = difference;\n    lodash.differenceBy = differenceBy;\n    lodash.differenceWith = differenceWith;\n    lodash.drop = drop;\n    lodash.dropRight = dropRight;\n    lodash.dropRightWhile = dropRightWhile;\n    lodash.dropWhile = dropWhile;\n    lodash.fill = fill;\n    lodash.filter = filter;\n    lodash.flatMap = flatMap;\n    lodash.flatMapDeep = flatMapDeep;\n    lodash.flatMapDepth = flatMapDepth;\n    lodash.flatten = flatten;\n    lodash.flattenDeep = flattenDeep;\n    lodash.flattenDepth = flattenDepth;\n    lodash.flip = flip;\n    lodash.flow = flow;\n    lodash.flowRight = flowRight;\n    lodash.fromPairs = fromPairs;\n    lodash.functions = functions;\n    lodash.functionsIn = functionsIn;\n    lodash.groupBy = groupBy;\n    lodash.initial = initial;\n    lodash.intersection = intersection;\n    lodash.intersectionBy = intersectionBy;\n    lodash.intersectionWith = intersectionWith;\n    lodash.invert = invert;\n    lodash.invertBy = invertBy;\n    lodash.invokeMap = invokeMap;\n    lodash.iteratee = iteratee;\n    lodash.keyBy = keyBy;\n    lodash.keys = keys;\n    lodash.keysIn = keysIn;\n    lodash.map = map;\n    lodash.mapKeys = mapKeys;\n    lodash.mapValues = mapValues;\n    lodash.matches = matches;\n    lodash.matchesProperty = matchesProperty;\n    lodash.memoize = memoize;\n    lodash.merge = merge;\n    lodash.mergeWith = mergeWith;\n    lodash.method = method;\n    lodash.methodOf = methodOf;\n    lodash.mixin = mixin;\n    lodash.negate = negate;\n    lodash.nthArg = nthArg;\n    lodash.omit = omit;\n    lodash.omitBy = omitBy;\n    lodash.once = once;\n    lodash.orderBy = orderBy;\n    lodash.over = over;\n    lodash.overArgs = overArgs;\n    lodash.overEvery = overEvery;\n    lodash.overSome = overSome;\n    lodash.partial = partial;\n    lodash.partialRight = partialRight;\n    lodash.partition = partition;\n    lodash.pick = pick;\n    lodash.pickBy = pickBy;\n    lodash.property = property;\n    lodash.propertyOf = propertyOf;\n    lodash.pull = pull;\n    lodash.pullAll = pullAll;\n    lodash.pullAllBy = pullAllBy;\n    lodash.pullAllWith = pullAllWith;\n    lodash.pullAt = pullAt;\n    lodash.range = range;\n    lodash.rangeRight = rangeRight;\n    lodash.rearg = rearg;\n    lodash.reject = reject;\n    lodash.remove = remove;\n    lodash.rest = rest;\n    lodash.reverse = reverse;\n    lodash.sampleSize = sampleSize;\n    lodash.set = set;\n    lodash.setWith = setWith;\n    lodash.shuffle = shuffle;\n    lodash.slice = slice;\n    lodash.sortBy = sortBy;\n    lodash.sortedUniq = sortedUniq;\n    lodash.sortedUniqBy = sortedUniqBy;\n    lodash.split = split;\n    lodash.spread = spread;\n    lodash.tail = tail;\n    lodash.take = take;\n    lodash.takeRight = takeRight;\n    lodash.takeRightWhile = takeRightWhile;\n    lodash.takeWhile = takeWhile;\n    lodash.tap = tap;\n    lodash.throttle = throttle;\n    lodash.thru = thru;\n    lodash.toArray = toArray;\n    lodash.toPairs = toPairs;\n    lodash.toPairsIn = toPairsIn;\n    lodash.toPath = toPath;\n    lodash.toPlainObject = toPlainObject;\n    lodash.transform = transform;\n    lodash.unary = unary;\n    lodash.union = union;\n    lodash.unionBy = unionBy;\n    lodash.unionWith = unionWith;\n    lodash.uniq = uniq;\n    lodash.uniqBy = uniqBy;\n    lodash.uniqWith = uniqWith;\n    lodash.unset = unset;\n    lodash.unzip = unzip;\n    lodash.unzipWith = unzipWith;\n    lodash.update = update;\n    lodash.updateWith = updateWith;\n    lodash.values = values;\n    lodash.valuesIn = valuesIn;\n    lodash.without = without;\n    lodash.words = words;\n    lodash.wrap = wrap;\n    lodash.xor = xor;\n    lodash.xorBy = xorBy;\n    lodash.xorWith = xorWith;\n    lodash.zip = zip;\n    lodash.zipObject = zipObject;\n    lodash.zipObjectDeep = zipObjectDeep;\n    lodash.zipWith = zipWith;\n\n    // Add aliases.\n    lodash.entries = toPairs;\n    lodash.entriesIn = toPairsIn;\n    lodash.extend = assignIn;\n    lodash.extendWith = assignInWith;\n\n    // Add methods to `lodash.prototype`.\n    mixin(lodash, lodash);\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return unwrapped values in chain sequences.\n    lodash.add = add;\n    lodash.attempt = attempt;\n    lodash.camelCase = camelCase;\n    lodash.capitalize = capitalize;\n    lodash.ceil = ceil;\n    lodash.clamp = clamp;\n    lodash.clone = clone;\n    lodash.cloneDeep = cloneDeep;\n    lodash.cloneDeepWith = cloneDeepWith;\n    lodash.cloneWith = cloneWith;\n    lodash.conformsTo = conformsTo;\n    lodash.deburr = deburr;\n    lodash.defaultTo = defaultTo;\n    lodash.divide = divide;\n    lodash.endsWith = endsWith;\n    lodash.eq = eq;\n    lodash.escape = escape;\n    lodash.escapeRegExp = escapeRegExp;\n    lodash.every = every;\n    lodash.find = find;\n    lodash.findIndex = findIndex;\n    lodash.findKey = findKey;\n    lodash.findLast = findLast;\n    lodash.findLastIndex = findLastIndex;\n    lodash.findLastKey = findLastKey;\n    lodash.floor = floor;\n    lodash.forEach = forEach;\n    lodash.forEachRight = forEachRight;\n    lodash.forIn = forIn;\n    lodash.forInRight = forInRight;\n    lodash.forOwn = forOwn;\n    lodash.forOwnRight = forOwnRight;\n    lodash.get = get;\n    lodash.gt = gt;\n    lodash.gte = gte;\n    lodash.has = has;\n    lodash.hasIn = hasIn;\n    lodash.head = head;\n    lodash.identity = identity;\n    lodash.includes = includes;\n    lodash.indexOf = indexOf;\n    lodash.inRange = inRange;\n    lodash.invoke = invoke;\n    lodash.isArguments = isArguments;\n    lodash.isArray = isArray;\n    lodash.isArrayBuffer = isArrayBuffer;\n    lodash.isArrayLike = isArrayLike;\n    lodash.isArrayLikeObject = isArrayLikeObject;\n    lodash.isBoolean = isBoolean;\n    lodash.isBuffer = isBuffer;\n    lodash.isDate = isDate;\n    lodash.isElement = isElement;\n    lodash.isEmpty = isEmpty;\n    lodash.isEqual = isEqual;\n    lodash.isEqualWith = isEqualWith;\n    lodash.isError = isError;\n    lodash.isFinite = isFinite;\n    lodash.isFunction = isFunction;\n    lodash.isInteger = isInteger;\n    lodash.isLength = isLength;\n    lodash.isMap = isMap;\n    lodash.isMatch = isMatch;\n    lodash.isMatchWith = isMatchWith;\n    lodash.isNaN = isNaN;\n    lodash.isNative = isNative;\n    lodash.isNil = isNil;\n    lodash.isNull = isNull;\n    lodash.isNumber = isNumber;\n    lodash.isObject = isObject;\n    lodash.isObjectLike = isObjectLike;\n    lodash.isPlainObject = isPlainObject;\n    lodash.isRegExp = isRegExp;\n    lodash.isSafeInteger = isSafeInteger;\n    lodash.isSet = isSet;\n    lodash.isString = isString;\n    lodash.isSymbol = isSymbol;\n    lodash.isTypedArray = isTypedArray;\n    lodash.isUndefined = isUndefined;\n    lodash.isWeakMap = isWeakMap;\n    lodash.isWeakSet = isWeakSet;\n    lodash.join = join;\n    lodash.kebabCase = kebabCase;\n    lodash.last = last;\n    lodash.lastIndexOf = lastIndexOf;\n    lodash.lowerCase = lowerCase;\n    lodash.lowerFirst = lowerFirst;\n    lodash.lt = lt;\n    lodash.lte = lte;\n    lodash.max = max;\n    lodash.maxBy = maxBy;\n    lodash.mean = mean;\n    lodash.meanBy = meanBy;\n    lodash.min = min;\n    lodash.minBy = minBy;\n    lodash.stubArray = stubArray;\n    lodash.stubFalse = stubFalse;\n    lodash.stubObject = stubObject;\n    lodash.stubString = stubString;\n    lodash.stubTrue = stubTrue;\n    lodash.multiply = multiply;\n    lodash.nth = nth;\n    lodash.noConflict = noConflict;\n    lodash.noop = noop;\n    lodash.now = now;\n    lodash.pad = pad;\n    lodash.padEnd = padEnd;\n    lodash.padStart = padStart;\n    lodash.parseInt = parseInt;\n    lodash.random = random;\n    lodash.reduce = reduce;\n    lodash.reduceRight = reduceRight;\n    lodash.repeat = repeat;\n    lodash.replace = replace;\n    lodash.result = result;\n    lodash.round = round;\n    lodash.runInContext = runInContext;\n    lodash.sample = sample;\n    lodash.size = size;\n    lodash.snakeCase = snakeCase;\n    lodash.some = some;\n    lodash.sortedIndex = sortedIndex;\n    lodash.sortedIndexBy = sortedIndexBy;\n    lodash.sortedIndexOf = sortedIndexOf;\n    lodash.sortedLastIndex = sortedLastIndex;\n    lodash.sortedLastIndexBy = sortedLastIndexBy;\n    lodash.sortedLastIndexOf = sortedLastIndexOf;\n    lodash.startCase = startCase;\n    lodash.startsWith = startsWith;\n    lodash.subtract = subtract;\n    lodash.sum = sum;\n    lodash.sumBy = sumBy;\n    lodash.template = template;\n    lodash.times = times;\n    lodash.toFinite = toFinite;\n    lodash.toInteger = toInteger;\n    lodash.toLength = toLength;\n    lodash.toLower = toLower;\n    lodash.toNumber = toNumber;\n    lodash.toSafeInteger = toSafeInteger;\n    lodash.toString = toString;\n    lodash.toUpper = toUpper;\n    lodash.trim = trim;\n    lodash.trimEnd = trimEnd;\n    lodash.trimStart = trimStart;\n    lodash.truncate = truncate;\n    lodash.unescape = unescape;\n    lodash.uniqueId = uniqueId;\n    lodash.upperCase = upperCase;\n    lodash.upperFirst = upperFirst;\n\n    // Add aliases.\n    lodash.each = forEach;\n    lodash.eachRight = forEachRight;\n    lodash.first = head;\n\n    mixin(lodash, (function() {\n      var source = {};\n      baseForOwn(lodash, function(func, methodName) {\n        if (!hasOwnProperty.call(lodash.prototype, methodName)) {\n          source[methodName] = func;\n        }\n      });\n      return source;\n    }()), { 'chain': false });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The semantic version number.\n     *\n     * @static\n     * @memberOf _\n     * @type {string}\n     */\n    lodash.VERSION = VERSION;\n\n    // Assign default placeholders.\n    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n      lodash[methodName].placeholder = lodash;\n    });\n\n    // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\n    arrayEach(['drop', 'take'], function(methodName, index) {\n      LazyWrapper.prototype[methodName] = function(n) {\n        n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\n\n        var result = (this.__filtered__ && !index)\n          ? new LazyWrapper(this)\n          : this.clone();\n\n        if (result.__filtered__) {\n          result.__takeCount__ = nativeMin(n, result.__takeCount__);\n        } else {\n          result.__views__.push({\n            'size': nativeMin(n, MAX_ARRAY_LENGTH),\n            'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\n          });\n        }\n        return result;\n      };\n\n      LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n        return this.reverse()[methodName](n).reverse();\n      };\n    });\n\n    // Add `LazyWrapper` methods that accept an `iteratee` value.\n    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n      var type = index + 1,\n          isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\n\n      LazyWrapper.prototype[methodName] = function(iteratee) {\n        var result = this.clone();\n        result.__iteratees__.push({\n          'iteratee': getIteratee(iteratee, 3),\n          'type': type\n        });\n        result.__filtered__ = result.__filtered__ || isFilter;\n        return result;\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.head` and `_.last`.\n    arrayEach(['head', 'last'], function(methodName, index) {\n      var takeName = 'take' + (index ? 'Right' : '');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this[takeName](1).value()[0];\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\n    arrayEach(['initial', 'tail'], function(methodName, index) {\n      var dropName = 'drop' + (index ? '' : 'Right');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n      };\n    });\n\n    LazyWrapper.prototype.compact = function() {\n      return this.filter(identity);\n    };\n\n    LazyWrapper.prototype.find = function(predicate) {\n      return this.filter(predicate).head();\n    };\n\n    LazyWrapper.prototype.findLast = function(predicate) {\n      return this.reverse().find(predicate);\n    };\n\n    LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\n      if (typeof path == 'function') {\n        return new LazyWrapper(this);\n      }\n      return this.map(function(value) {\n        return baseInvoke(value, path, args);\n      });\n    });\n\n    LazyWrapper.prototype.reject = function(predicate) {\n      return this.filter(negate(getIteratee(predicate)));\n    };\n\n    LazyWrapper.prototype.slice = function(start, end) {\n      start = toInteger(start);\n\n      var result = this;\n      if (result.__filtered__ && (start > 0 || end < 0)) {\n        return new LazyWrapper(result);\n      }\n      if (start < 0) {\n        result = result.takeRight(-start);\n      } else if (start) {\n        result = result.drop(start);\n      }\n      if (end !== undefined) {\n        end = toInteger(end);\n        result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n      }\n      return result;\n    };\n\n    LazyWrapper.prototype.takeRightWhile = function(predicate) {\n      return this.reverse().takeWhile(predicate).reverse();\n    };\n\n    LazyWrapper.prototype.toArray = function() {\n      return this.take(MAX_ARRAY_LENGTH);\n    };\n\n    // Add `LazyWrapper` methods to `lodash.prototype`.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\n          isTaker = /^(?:head|last)$/.test(methodName),\n          lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\n          retUnwrapped = isTaker || /^find/.test(methodName);\n\n      if (!lodashFunc) {\n        return;\n      }\n      lodash.prototype[methodName] = function() {\n        var value = this.__wrapped__,\n            args = isTaker ? [1] : arguments,\n            isLazy = value instanceof LazyWrapper,\n            iteratee = args[0],\n            useLazy = isLazy || isArray(value);\n\n        var interceptor = function(value) {\n          var result = lodashFunc.apply(lodash, arrayPush([value], args));\n          return (isTaker && chainAll) ? result[0] : result;\n        };\n\n        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n          // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n          isLazy = useLazy = false;\n        }\n        var chainAll = this.__chain__,\n            isHybrid = !!this.__actions__.length,\n            isUnwrapped = retUnwrapped && !chainAll,\n            onlyLazy = isLazy && !isHybrid;\n\n        if (!retUnwrapped && useLazy) {\n          value = onlyLazy ? value : new LazyWrapper(this);\n          var result = func.apply(value, args);\n          result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n          return new LodashWrapper(result, chainAll);\n        }\n        if (isUnwrapped && onlyLazy) {\n          return func.apply(this, args);\n        }\n        result = this.thru(interceptor);\n        return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\n      };\n    });\n\n    // Add `Array` methods to `lodash.prototype`.\n    arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\n      var func = arrayProto[methodName],\n          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n          retUnwrapped = /^(?:pop|shift)$/.test(methodName);\n\n      lodash.prototype[methodName] = function() {\n        var args = arguments;\n        if (retUnwrapped && !this.__chain__) {\n          var value = this.value();\n          return func.apply(isArray(value) ? value : [], args);\n        }\n        return this[chainName](function(value) {\n          return func.apply(isArray(value) ? value : [], args);\n        });\n      };\n    });\n\n    // Map minified method names to their real names.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var lodashFunc = lodash[methodName];\n      if (lodashFunc) {\n        var key = lodashFunc.name + '';\n        if (!hasOwnProperty.call(realNames, key)) {\n          realNames[key] = [];\n        }\n        realNames[key].push({ 'name': methodName, 'func': lodashFunc });\n      }\n    });\n\n    realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\n      'name': 'wrapper',\n      'func': undefined\n    }];\n\n    // Add methods to `LazyWrapper`.\n    LazyWrapper.prototype.clone = lazyClone;\n    LazyWrapper.prototype.reverse = lazyReverse;\n    LazyWrapper.prototype.value = lazyValue;\n\n    // Add chain sequence methods to the `lodash` wrapper.\n    lodash.prototype.at = wrapperAt;\n    lodash.prototype.chain = wrapperChain;\n    lodash.prototype.commit = wrapperCommit;\n    lodash.prototype.next = wrapperNext;\n    lodash.prototype.plant = wrapperPlant;\n    lodash.prototype.reverse = wrapperReverse;\n    lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n\n    // Add lazy aliases.\n    lodash.prototype.first = lodash.prototype.head;\n\n    if (symIterator) {\n      lodash.prototype[symIterator] = wrapperToIterator;\n    }\n    return lodash;\n  });\n\n  /*--------------------------------------------------------------------------*/\n\n  // Export lodash.\n  var _ = runInContext();\n\n  // Some AMD build optimizers, like r.js, check for condition patterns like:\n  if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n    // Expose Lodash on the global object to prevent errors when Lodash is\n    // loaded by a script tag in the presence of an AMD loader.\n    // See http://requirejs.org/docs/errors.html#mismatch for more details.\n    // Use `_.noConflict` to remove Lodash from the global object.\n    root._ = _;\n\n    // Define as an anonymous module so, through path mapping, it can be\n    // referenced as the \"underscore\" module.\n    define(function() {\n      return _;\n    });\n  }\n  // Check for `exports` after `define` in case a build optimizer adds it.\n  else if (freeModule) {\n    // Export for Node.js.\n    (freeModule.exports = _)._ = _;\n    // Export for CommonJS support.\n    freeExports._ = _;\n  }\n  else {\n    // Export to the global object.\n    root._ = _;\n  }\n}.call(this));\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(22), __webpack_require__(151)(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2xvZGFzaC5qcz8yZWYwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJDQUEyQztBQUMzQztBQUNBLDJEQUEyRDs7QUFFM0Q7QUFDQSwrQ0FBK0M7QUFDL0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EseUJBQXlCO0FBQ3pCLHlCQUF5QjtBQUN6Qjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsTUFBTSxhQUFhLE9BQU87O0FBRXBEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQsRUFBRTtBQUNuRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsMkNBQTJDLEVBQUU7O0FBRTdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZUFBZTtBQUNmLGNBQWM7QUFDZCxjQUFjO0FBQ2QsZ0JBQWdCO0FBQ2hCLGVBQWU7QUFDZjs7QUFFQTtBQUNBO0FBQ0EsVUFBVTtBQUNWLFNBQVM7QUFDVCxTQUFTO0FBQ1QsV0FBVztBQUNYLFVBQVU7QUFDVjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFNBQVM7QUFDdEIsYUFBYSxFQUFFO0FBQ2YsYUFBYSxNQUFNO0FBQ25CLGVBQWUsRUFBRTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsTUFBTTtBQUNuQixhQUFhLFNBQVM7QUFDdEIsYUFBYSxTQUFTO0FBQ3RCLGFBQWEsT0FBTztBQUNwQixlQUFlLFNBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE1BQU07QUFDbkIsYUFBYSxTQUFTO0FBQ3RCLGVBQWUsTUFBTTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxNQUFNO0FBQ25CLGFBQWEsU0FBUztBQUN0QixlQUFlLE1BQU07QUFDckI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE1BQU07QUFDbkIsYUFBYSxTQUFTO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE1BQU07QUFDbkIsYUFBYSxTQUFTO0FBQ3RCLGVBQWUsTUFBTTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxNQUFNO0FBQ25CLGFBQWEsRUFBRTtBQUNmLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxNQUFNO0FBQ25CLGFBQWEsRUFBRTtBQUNmLGFBQWEsU0FBUztBQUN0QixlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsTUFBTTtBQUNuQixhQUFhLFNBQVM7QUFDdEIsZUFBZSxNQUFNO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsTUFBTTtBQUNuQixhQUFhLE1BQU07QUFDbkIsZUFBZSxNQUFNO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxNQUFNO0FBQ25CLGFBQWEsU0FBUztBQUN0QixhQUFhLEVBQUU7QUFDZixhQUFhLFFBQVE7QUFDckI7QUFDQSxlQUFlLEVBQUU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxNQUFNO0FBQ25CLGFBQWEsU0FBUztBQUN0QixhQUFhLEVBQUU7QUFDZixhQUFhLFFBQVE7QUFDckI7QUFDQSxlQUFlLEVBQUU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxNQUFNO0FBQ25CLGFBQWEsU0FBUztBQUN0QixlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQixlQUFlLE9BQU87QUFDdEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQixlQUFlLE1BQU07QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEIsZUFBZSxNQUFNO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsYUFBYTtBQUMxQixhQUFhLFNBQVM7QUFDdEIsYUFBYSxTQUFTO0FBQ3RCLGVBQWUsRUFBRTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsTUFBTTtBQUNuQixhQUFhLFNBQVM7QUFDdEIsYUFBYSxPQUFPO0FBQ3BCLGFBQWEsUUFBUTtBQUNyQixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE1BQU07QUFDbkIsYUFBYSxFQUFFO0FBQ2YsYUFBYSxPQUFPO0FBQ3BCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE1BQU07QUFDbkIsYUFBYSxFQUFFO0FBQ2YsYUFBYSxPQUFPO0FBQ3BCLGFBQWEsU0FBUztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLEVBQUU7QUFDZixlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsTUFBTTtBQUNuQixhQUFhLFNBQVM7QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEIsZUFBZSxTQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQixlQUFlLFNBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGFBQWE7QUFDMUIsYUFBYSxTQUFTO0FBQ3RCLGFBQWEsRUFBRTtBQUNmLGFBQWEsUUFBUTtBQUNyQjtBQUNBLGFBQWEsU0FBUztBQUN0QixlQUFlLEVBQUU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxNQUFNO0FBQ25CLGFBQWEsU0FBUztBQUN0QixlQUFlLE1BQU07QUFDckI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxNQUFNO0FBQ25CLGFBQWEsU0FBUztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEIsYUFBYSxTQUFTO0FBQ3RCLGVBQWUsTUFBTTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEIsYUFBYSxNQUFNO0FBQ25CLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsU0FBUztBQUN0QixlQUFlLFNBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQixhQUFhLE1BQU07QUFDbkIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCLGFBQWEsT0FBTztBQUNwQixlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsTUFBTTtBQUNuQixhQUFhLE1BQU07QUFDbkIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxNQUFNO0FBQ25CLGFBQWEsTUFBTTtBQUNuQixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsTUFBTTtBQUNuQixhQUFhLEVBQUU7QUFDZixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQixlQUFlLE9BQU87QUFDdEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQixlQUFlLE9BQU87QUFDdEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEIsYUFBYSxPQUFPO0FBQ3BCLGVBQWUsRUFBRTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQixlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCLGVBQWUsTUFBTTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCLGVBQWUsTUFBTTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFNBQVM7QUFDdEIsYUFBYSxTQUFTO0FBQ3RCLGVBQWUsU0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsTUFBTTtBQUNuQixhQUFhLEVBQUU7QUFDZixlQUFlLE1BQU07QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQixlQUFlLE1BQU07QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCLGVBQWUsTUFBTTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsTUFBTTtBQUNuQixhQUFhLEVBQUU7QUFDZixhQUFhLE9BQU87QUFDcEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE1BQU07QUFDbkIsYUFBYSxFQUFFO0FBQ2YsYUFBYSxPQUFPO0FBQ3BCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCLGVBQWUsTUFBTTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEIsZUFBZSxNQUFNO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCLGVBQWUsTUFBTTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQixlQUFlLFNBQVM7QUFDeEI7QUFDQTtBQUNBLGNBQWMsMkJBQTJCO0FBQ3pDO0FBQ0E7QUFDQSxtQkFBbUIsZ0NBQWdDO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyw2QkFBNkI7QUFDOUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsT0FBTztBQUNQLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtFQUFrRTtBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLEVBQUU7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsaUJBQWlCLEVBQUU7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLEVBQUU7QUFDakIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsRUFBRTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixFQUFFO0FBQ25CO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsaUJBQWlCLEVBQUU7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLEVBQUU7QUFDakIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGVBQWUsUUFBUTtBQUN2QixpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQixpQkFBaUIsRUFBRTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQixpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLEVBQUU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLEVBQUU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQixlQUFlLEVBQUU7QUFDakIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsYUFBYTtBQUM1QixlQUFlLFNBQVM7QUFDeEIsZUFBZSxTQUFTO0FBQ3hCLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsRUFBRTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxTQUFTO0FBQ3hCLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLGVBQWUsU0FBUztBQUN4QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsRUFBRTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEM7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsU0FBUztBQUN4QixlQUFlLE9BQU87QUFDdEIsZUFBZSxNQUFNO0FBQ3JCLGlCQUFpQixjQUFjO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsNkJBQTZCLEVBQUU7QUFDbkU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQixlQUFlLE1BQU07QUFDckIsZUFBZSxTQUFTO0FBQ3hCLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxhQUFhO0FBQzVCLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsYUFBYTtBQUM5QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxhQUFhO0FBQzVCLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsYUFBYTtBQUM5QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxhQUFhO0FBQzVCLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckIsZUFBZSxTQUFTO0FBQ3hCLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsRUFBRTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckIsZUFBZSxFQUFFO0FBQ2pCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGFBQWE7QUFDNUIsZUFBZSxTQUFTO0FBQ3hCLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxNQUFNO0FBQ3JCLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxTQUFTO0FBQ3hCLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsT0FBTztBQUN4QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxTQUFTO0FBQ3hCLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsT0FBTztBQUN4QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLFNBQVM7QUFDeEIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE1BQU07QUFDckIsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxhQUFhO0FBQzVCLGlCQUFpQixFQUFFO0FBQ25CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsU0FBUztBQUN4QixlQUFlLFNBQVM7QUFDeEIsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxhQUFhO0FBQzVCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsYUFBYTtBQUM1QixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckIsZUFBZSxTQUFTO0FBQ3hCLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLFNBQVM7QUFDeEIsZUFBZSxTQUFTO0FBQ3hCLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxhQUFhO0FBQzVCLGVBQWUsTUFBTTtBQUNyQixpQkFBaUIsRUFBRTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGVBQWUsRUFBRTtBQUNqQixlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBLGVBQWUsU0FBUztBQUN4QixlQUFlLE9BQU87QUFDdEIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxTQUFTO0FBQ3hCLGVBQWUsU0FBUztBQUN4QixlQUFlLE9BQU87QUFDdEIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGFBQWE7QUFDNUIsZUFBZSxTQUFTO0FBQ3hCLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLEVBQUU7QUFDakIsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxTQUFTO0FBQ3hCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxTQUFTO0FBQ3hCLGVBQWUsU0FBUztBQUN4QixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckIsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixFQUFFO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsYUFBYTtBQUM1QixlQUFlLDZCQUE2QjtBQUM1QyxlQUFlLFNBQVM7QUFDeEIsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULGdCQUFnQjtBQUNoQixPQUFPOztBQUVQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLFNBQVM7QUFDeEIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxTQUFTO0FBQ3hCLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGFBQWE7QUFDNUIsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckIsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsU0FBUztBQUN4QixlQUFlLFNBQVM7QUFDeEIsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkIsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsYUFBYTtBQUM1QixpQkFBaUIsRUFBRTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsYUFBYTtBQUM1QixlQUFlLE9BQU87QUFDdEIsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLGFBQWE7QUFDNUIsZUFBZSxFQUFFO0FBQ2pCLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRDtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsU0FBUztBQUN4QixlQUFlLEVBQUU7QUFDakIsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsU0FBUztBQUN4QixlQUFlLFNBQVM7QUFDeEIsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGFBQWE7QUFDNUIsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxhQUFhO0FBQzVCLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckIsZUFBZSxFQUFFO0FBQ2pCLGVBQWUsUUFBUTtBQUN2QixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxRUFBcUU7QUFDckU7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQixlQUFlLEVBQUU7QUFDakIsZUFBZSxTQUFTO0FBQ3hCLGVBQWUsUUFBUTtBQUN2QixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckIsZUFBZSxTQUFTO0FBQ3hCLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsU0FBUztBQUN4QixlQUFlLFNBQVM7QUFDeEIsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsYUFBYTtBQUM1QixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxhQUFhO0FBQzVCLGVBQWUsU0FBUztBQUN4QixlQUFlLFNBQVM7QUFDeEIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQixlQUFlLFNBQVM7QUFDeEIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixlQUFlLE1BQU07QUFDckIsaUJBQWlCLEVBQUU7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsU0FBUztBQUN4QixlQUFlLFNBQVM7QUFDeEIsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQixlQUFlLE1BQU07QUFDckIsZUFBZSxTQUFTO0FBQ3hCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsaUJBQWlCLGFBQWE7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2QsZUFBZSxTQUFTO0FBQ3hCLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGNBQWM7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsWUFBWTtBQUMzQixpQkFBaUIsWUFBWTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxtQkFBbUI7QUFDbEMsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQixlQUFlLE1BQU07QUFDckIsZUFBZSxNQUFNO0FBQ3JCLGdCQUFnQixRQUFRO0FBQ3hCLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckIsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsTUFBTTtBQUNyQixnQkFBZ0IsUUFBUTtBQUN4QixpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckIsZUFBZSxNQUFNO0FBQ3JCLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE1BQU07QUFDckIsZUFBZSxPQUFPLFdBQVc7QUFDakMsZUFBZSxTQUFTO0FBQ3hCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qjs7QUFFNUI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPLFdBQVc7QUFDakMsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPLFdBQVc7QUFDakMsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEIsZUFBZSxTQUFTO0FBQ3hCLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEIsZUFBZSxRQUFRO0FBQ3ZCLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCLGVBQWUsT0FBTztBQUN0QixlQUFlLEVBQUU7QUFDakIsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEIsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsK0NBQStDO0FBQ3BGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsZ0JBQWdCO0FBQy9CLGVBQWUsT0FBTztBQUN0QixlQUFlLEVBQUU7QUFDakIsZUFBZSxNQUFNO0FBQ3JCO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsTUFBTTtBQUNyQjtBQUNBLGVBQWUsTUFBTTtBQUNyQixlQUFlLE1BQU07QUFDckIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsU0FBUztBQUN4QixlQUFlLFNBQVM7QUFDeEIsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0Esb0VBQW9FO0FBQ3BFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEIsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLFNBQVM7QUFDVCxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCLGVBQWUsT0FBTztBQUN0QixlQUFlLEVBQUU7QUFDakIsZUFBZSxNQUFNO0FBQ3JCO0FBQ0EsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEIsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsU0FBUztBQUN4QixlQUFlLEVBQUU7QUFDakIsZUFBZSxFQUFFO0FBQ2pCLGVBQWUsTUFBTTtBQUNyQjtBQUNBLGVBQWUsTUFBTTtBQUNyQixlQUFlLE1BQU07QUFDckIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGdCQUFnQjtBQUMvQixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsTUFBTTtBQUNyQixlQUFlLE1BQU07QUFDckIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGVBQWUsRUFBRTtBQUNqQixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixFQUFFO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixlQUFlLEVBQUU7QUFDakIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsaUJBQWlCLEVBQUU7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixlQUFlLE9BQU87QUFDdEIsaUJBQWlCLEVBQUU7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQixlQUFlLE1BQU07QUFDckIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsU0FBUztBQUN4QixlQUFlLFNBQVM7QUFDeEIsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxTQUFTO0FBQ3hCLGVBQWUsU0FBUztBQUN4QixlQUFlLE9BQU87QUFDdEIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxTQUFTO0FBQ3hCLGVBQWUsU0FBUztBQUN4QixlQUFlLE9BQU87QUFDdEIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCLGlCQUFpQixFQUFFO0FBQ25CO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCLGlCQUFpQixFQUFFO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsaUJBQWlCLEVBQUU7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsRUFBRTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsT0FBTztBQUN4QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxNQUFNO0FBQ3JCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMENBQTBDO0FBQzFDLHdDQUF3QztBQUN4QywrREFBK0Q7QUFDL0QsaUVBQWlFO0FBQ2pFO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLGFBQWE7QUFDNUIsZUFBZSxTQUFTO0FBQ3hCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQixpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixNQUFNO0FBQ3ZCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QztBQUM3Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGVBQWUsRUFBRTtBQUNqQixlQUFlLEVBQUU7QUFDakIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsTUFBTTtBQUNyQixpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE1BQU07QUFDckIsaUJBQWlCLEVBQUU7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsTUFBTTtBQUNyQixpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsaUJBQWlCLEVBQUU7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsU0FBUztBQUN4QixlQUFlLEVBQUU7QUFDakIsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsU0FBUztBQUN4QixlQUFlLE9BQU87QUFDdEIsaUJBQWlCLGNBQWM7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEIsZUFBZSxTQUFTO0FBQ3hCLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsU0FBUztBQUN4QixlQUFlLFNBQVM7QUFDeEIsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckIsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixjQUFjO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixNQUFNO0FBQ3ZCLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsT0FBTztBQUN0QixnQkFBZ0IsT0FBTztBQUN2QixpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckIsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsS0FBSztBQUNwQixpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQixlQUFlLFNBQVM7QUFDeEIsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsU0FBUztBQUN4QixlQUFlLFNBQVM7QUFDeEIsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLFNBQVMsR0FBRyxTQUFTLEtBQUssU0FBUztBQUMzRCxlQUFlLFNBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckIsZUFBZSxTQUFTO0FBQ3hCLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0EsdUJBQXVCLGlCQUFpQixHQUFHLGlCQUFpQjtBQUM1RDtBQUNBLG1DQUFtQyxpQkFBaUI7QUFDcEQsZUFBZSxpQkFBaUI7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQixlQUFlLE9BQU87QUFDdEIsZ0JBQWdCLE9BQU87QUFDdkIsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckIsZUFBZSxPQUFPO0FBQ3RCLGdCQUFnQixPQUFPO0FBQ3ZCLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxVQUFVLG9DQUFvQztBQUM5QyxVQUFVLHFDQUFxQztBQUMvQyxVQUFVO0FBQ1Y7QUFDQTtBQUNBLDRDQUE0QyxrQkFBa0IsRUFBRTtBQUNoRTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MscUNBQXFDO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckIsZUFBZSxTQUFTO0FBQ3hCLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLFVBQVUscUNBQXFDO0FBQy9DLFVBQVUscUNBQXFDO0FBQy9DLFVBQVU7QUFDVjtBQUNBO0FBQ0EsdUNBQXVDLGtCQUFrQixFQUFFO0FBQzNEO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixvQ0FBb0M7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsRUFBRTtBQUNqQixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckIsZUFBZSxTQUFTO0FBQ3hCLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQSxVQUFVLHFDQUFxQztBQUMvQyxVQUFVLHFDQUFxQztBQUMvQyxVQUFVO0FBQ1Y7QUFDQTtBQUNBLHVDQUF1QywyQkFBMkIsRUFBRTtBQUNwRTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsa0NBQWtDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsU0FBUztBQUN4QixlQUFlLE9BQU87QUFDdEIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0EsVUFBVSxvQ0FBb0M7QUFDOUMsVUFBVSxxQ0FBcUM7QUFDL0MsVUFBVTtBQUNWO0FBQ0E7QUFDQSwyQ0FBMkMsNEJBQTRCLEVBQUU7QUFDekU7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLG1DQUFtQztBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckIsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQixlQUFlLE9BQU87QUFDdEIsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQixpQkFBaUIsRUFBRTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsRUFBRTtBQUNqQixlQUFlLE9BQU87QUFDdEIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQixpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEIsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEIsZUFBZSxTQUFTO0FBQ3hCLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixTQUFTLEtBQUssU0FBUyxHQUFHLFNBQVM7QUFDN0QsZUFBZSxTQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEIsZUFBZSxTQUFTO0FBQ3hCLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQSx1QkFBdUIsaUJBQWlCLEdBQUcsaUJBQWlCO0FBQzVELHNCQUFzQixpQkFBaUIsR0FBRyxpQkFBaUI7QUFDM0Q7QUFDQTtBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQixlQUFlLE9BQU87QUFDdEIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQixpQkFBaUIsRUFBRTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQixlQUFlLEVBQUU7QUFDakIsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQixlQUFlLE9BQU87QUFDdEIsaUJBQWlCLEVBQUU7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsS0FBSztBQUNwQixpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsTUFBTTtBQUNyQixpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsTUFBTTtBQUNyQixlQUFlLFNBQVM7QUFDeEIsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBLHFCQUFxQixTQUFTLEdBQUcsU0FBUyxHQUFHLFNBQVMsR0FBRyxTQUFTO0FBQ2xFO0FBQ0EsNEJBQTRCLFNBQVMsR0FBRyxTQUFTO0FBQ2pEO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsTUFBTTtBQUNyQixlQUFlLFNBQVM7QUFDeEIsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBLHFCQUFxQixpQkFBaUIsR0FBRyxpQkFBaUIsR0FBRyxpQkFBaUI7QUFDOUU7QUFDQSw4QkFBOEIsaUJBQWlCO0FBQy9DO0FBQ0EsZUFBZSxpQkFBaUIsR0FBRyxpQkFBaUI7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGVBQWUscUJBQXFCO0FBQ3BDLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQixlQUFlLFNBQVM7QUFDeEIsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsRUFBRTtBQUNqQixlQUFlLFNBQVM7QUFDeEIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLFNBQVMsR0FBRyxTQUFTO0FBQzVDO0FBQ0EsaUNBQWlDLFNBQVMsZUFBZSxZQUFZLEVBQUU7QUFDdkU7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLFNBQVM7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsRUFBRTtBQUNqQixlQUFlLFNBQVM7QUFDeEIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLFNBQVMsR0FBRyxTQUFTO0FBQzVDO0FBQ0EscUNBQXFDLFNBQVMsZUFBZSxZQUFZLEVBQUU7QUFDM0U7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLFNBQVM7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQixpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQixpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckIsZUFBZSxPQUFPO0FBQ3RCLGdCQUFnQixPQUFPO0FBQ3ZCLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQixlQUFlLE9BQU87QUFDdEIsZ0JBQWdCLE9BQU87QUFDdkIsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckIsZUFBZSxTQUFTO0FBQ3hCLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLFVBQVUsb0NBQW9DO0FBQzlDLFVBQVUscUNBQXFDO0FBQy9DLFVBQVU7QUFDVjtBQUNBO0FBQ0EsNENBQTRDLGtCQUFrQixFQUFFO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxxQ0FBcUM7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQixlQUFlLFNBQVM7QUFDeEIsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0EsVUFBVSxxQ0FBcUM7QUFDL0MsVUFBVSxxQ0FBcUM7QUFDL0MsVUFBVTtBQUNWO0FBQ0E7QUFDQSx1Q0FBdUMsa0JBQWtCLEVBQUU7QUFDM0Q7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLG9DQUFvQztBQUMvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsU0FBUyxLQUFLLFNBQVMsR0FBRyxTQUFTO0FBQ3RELGVBQWUsU0FBUyxHQUFHLFNBQVM7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0EsdUJBQXVCLGlCQUFpQixHQUFHLGlCQUFpQjtBQUM1RCxzQkFBc0IsaUJBQWlCLEdBQUcsaUJBQWlCO0FBQzNEO0FBQ0E7QUFDQSxlQUFlLGlCQUFpQixHQUFHLGlCQUFpQixHQUFHLGlCQUFpQjtBQUN4RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQixlQUFlLFNBQVM7QUFDeEIsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLFNBQVMsR0FBRyxTQUFTLEdBQUcsU0FBUztBQUNuRCxlQUFlLFNBQVMsR0FBRyxTQUFTO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0EsdUJBQXVCLGlCQUFpQixHQUFHLGlCQUFpQixHQUFHLGlCQUFpQjtBQUNoRjtBQUNBO0FBQ0EsZUFBZSxpQkFBaUIsR0FBRyxpQkFBaUI7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckIsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsU0FBUztBQUN4QjtBQUNBLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsS0FBSztBQUNwQixpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEIsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsU0FBUztBQUN4QixlQUFlLFNBQVM7QUFDeEIsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLFNBQVMsS0FBSyxTQUFTLEdBQUcsU0FBUztBQUNwRCxlQUFlLFNBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0EsdUJBQXVCLGlCQUFpQixHQUFHLGlCQUFpQjtBQUM1RCxzQkFBc0IsaUJBQWlCLEdBQUcsaUJBQWlCO0FBQzNEO0FBQ0E7QUFDQSxlQUFlLGlCQUFpQixHQUFHLGlCQUFpQjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEIsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckIsZUFBZSxNQUFNO0FBQ3JCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQixlQUFlLE1BQU07QUFDckIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0EsY0FBYyxPQUFPLFFBQVEsU0FBUyxHQUFHLFNBQVMsR0FBRztBQUNyRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEIsZUFBZSxTQUFTO0FBQ3hCO0FBQ0EsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0EsVUFBVSwrQkFBK0I7QUFDekMsVUFBVSwrQkFBK0I7QUFDekMsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0NBQW9DO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixlQUFlLFNBQVM7QUFDeEIsaUJBQWlCLEVBQUU7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsRUFBRTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHFCQUFxQjtBQUNwQyxpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0EscUJBQXFCLFFBQVEsT0FBTyxTQUFTLEVBQUU7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyw4QkFBOEI7O0FBRXhFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQSxVQUFVLDhCQUE4QjtBQUN4QyxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWM7QUFDZDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLEVBQUU7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsYUFBYTtBQUM1QixlQUFlLFNBQVM7QUFDeEIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxhQUFhO0FBQzVCLGVBQWUsU0FBUztBQUN4QixnQkFBZ0IsT0FBTztBQUN2QixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsK0NBQStDO0FBQ3pELFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsb0NBQW9DO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsYUFBYTtBQUM1QixlQUFlLFNBQVM7QUFDeEIsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLDhDQUE4QztBQUN4RCxVQUFVO0FBQ1Y7QUFDQTtBQUNBLG9DQUFvQyxrQkFBa0IsRUFBRTtBQUN4RDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsNEJBQTRCO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxhQUFhO0FBQzVCLGVBQWUsU0FBUztBQUN4QixlQUFlLE9BQU87QUFDdEIsaUJBQWlCLEVBQUU7QUFDbkI7QUFDQTtBQUNBO0FBQ0EsVUFBVSwrQ0FBK0M7QUFDekQsVUFBVSxnREFBZ0Q7QUFDMUQsVUFBVTtBQUNWO0FBQ0E7QUFDQSxrQ0FBa0MsbUJBQW1CLEVBQUU7QUFDdkQ7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLDJCQUEyQjtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGFBQWE7QUFDNUIsZUFBZSxTQUFTO0FBQ3hCLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsRUFBRTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxhQUFhO0FBQzVCLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsYUFBYTtBQUM1QixlQUFlLFNBQVM7QUFDeEIsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGFBQWE7QUFDNUIsZUFBZSxTQUFTO0FBQ3hCLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxhQUFhO0FBQzVCLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsYUFBYTtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxrQkFBa0IsaUJBQWlCO0FBQ25DO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGFBQWE7QUFDNUIsZUFBZSxTQUFTO0FBQ3hCLGlCQUFpQixhQUFhO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGFBQWE7QUFDNUIsZUFBZSxTQUFTO0FBQ3hCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0JBQW9CO0FBQ25DLGVBQWUsRUFBRTtBQUNqQixlQUFlLE9BQU87QUFDdEIsZ0JBQWdCLE9BQU87QUFDdkIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixpQkFBaUI7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxhQUFhO0FBQzVCLGVBQWUsc0JBQXNCO0FBQ3JDO0FBQ0EsZUFBZSxLQUFLO0FBQ3BCLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsYUFBYTtBQUM1QixlQUFlLFNBQVM7QUFDeEIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0EsVUFBVSw0QkFBNEI7QUFDdEMsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSLGNBQWMsT0FBTyw0QkFBNEIsUUFBUSw4QkFBOEI7QUFDdkY7QUFDQTtBQUNBLGNBQWMsVUFBVSw0QkFBNEIsWUFBWSw4QkFBOEI7QUFDOUY7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGFBQWE7QUFDNUIsZUFBZSxTQUFTO0FBQ3hCLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsaUJBQWlCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBLFVBQVUsbUJBQW1CO0FBQzdCLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsYUFBYTtBQUM1QixlQUFlLHFDQUFxQztBQUNwRDtBQUNBLGVBQWUsU0FBUztBQUN4QixnQkFBZ0IsT0FBTztBQUN2QixpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxVQUFVLDhCQUE4QjtBQUN4QyxVQUFVLDhCQUE4QjtBQUN4QyxVQUFVLDhCQUE4QjtBQUN4QyxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGFBQWE7QUFDNUIsZUFBZSxTQUFTO0FBQ3hCLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLFVBQVUsZ0RBQWdEO0FBQzFELFVBQVUsK0NBQStDO0FBQ3pELFVBQVU7QUFDVjtBQUNBO0FBQ0EsdUNBQXVDLGlCQUFpQixFQUFFO0FBQzFEO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQiw0QkFBNEI7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxjQUFjLGlCQUFpQixFQUFFOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsYUFBYTtBQUM1QixlQUFlLFNBQVM7QUFDeEIsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixFQUFFO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLGlCQUFpQix5QkFBeUI7QUFDMUM7QUFDQTtBQUNBLFFBQVEsSUFBSTtBQUNaLGNBQWMsOEJBQThCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsYUFBYTtBQUM1QixlQUFlLFNBQVM7QUFDeEIsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixFQUFFO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGFBQWE7QUFDNUIsZUFBZSxTQUFTO0FBQ3hCLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSwrQ0FBK0M7QUFDekQsVUFBVTtBQUNWO0FBQ0E7QUFDQSxvQ0FBb0Msa0JBQWtCLEVBQUU7QUFDeEQ7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDRCQUE0QjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxhQUFhO0FBQzVCLGlCQUFpQixFQUFFO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxhQUFhO0FBQzVCLGVBQWUsT0FBTztBQUN0QixnQkFBZ0IsT0FBTztBQUN2QixpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsYUFBYTtBQUM1QixpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0JBQW9CO0FBQ25DLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlCQUFpQjtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxhQUFhO0FBQzVCLGVBQWUsU0FBUztBQUN4QixnQkFBZ0IsT0FBTztBQUN2QixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsbUNBQW1DO0FBQzdDLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxzQkFBc0Isb0NBQW9DO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGFBQWE7QUFDNUIsZUFBZSx5QkFBeUI7QUFDeEM7QUFDQSxpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxVQUFVLDhCQUE4QjtBQUN4QyxVQUFVLDhCQUE4QjtBQUN4QyxVQUFVLDhCQUE4QjtBQUN4QyxVQUFVO0FBQ1Y7QUFDQTtBQUNBLHFDQUFxQyxlQUFlLEVBQUU7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLG9CQUFvQixpQ0FBaUM7QUFDckQsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEIsZUFBZSxPQUFPO0FBQ3RCLGdCQUFnQixPQUFPO0FBQ3ZCLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLFNBQVM7QUFDeEIsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEIsZUFBZSxFQUFFO0FBQ2pCLGVBQWUsS0FBSztBQUNwQixpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsS0FBSztBQUNwQixpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsU0FBUztBQUN4QixlQUFlLE9BQU87QUFDdEIsZ0JBQWdCLE9BQU87QUFDdkIsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCLGVBQWUsT0FBTztBQUN0QixnQkFBZ0IsT0FBTztBQUN2QixpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTyxZQUFZO0FBQ2xDLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0Esa0RBQWtELGtCQUFrQjtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEIsZUFBZSxLQUFLO0FBQ3BCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCLGVBQWUsT0FBTztBQUN0QixlQUFlLEtBQUs7QUFDcEIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEIsZUFBZSxTQUFTO0FBQ3hCLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckIsb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEIsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEIsZUFBZSx5QkFBeUI7QUFDeEM7QUFDQSxpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsU0FBUztBQUN4QixlQUFlLEtBQUs7QUFDcEIsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCLGVBQWUsS0FBSztBQUNwQixpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCLGVBQWUscUJBQXFCO0FBQ3BDLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsU0FBUztBQUN4QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPLFlBQVk7QUFDbEMsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXVELG9CQUFvQjtBQUMzRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0Esb0NBQW9DO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUztBQUM3QixlQUFlLFNBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsRUFBRTtBQUNuQjtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsU0FBUyxHQUFHLFNBQVM7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsRUFBRTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsRUFBRTtBQUNuQjtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsU0FBUyxHQUFHLFNBQVM7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixlQUFlLFNBQVM7QUFDeEIsaUJBQWlCLEVBQUU7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBLDZCQUE2QixtQkFBbUIsY0FBYyxFQUFFLEVBQUU7QUFDbEU7QUFDQTtBQUNBLDZCQUE2QixtQkFBbUIsY0FBYyxFQUFFLEVBQUU7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckIsb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxrQkFBa0IsRUFBRTtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0RBQWtELGtCQUFrQixFQUFFO0FBQ3RFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLFNBQVM7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixlQUFlLEVBQUU7QUFDakIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQixvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsZUFBZSxFQUFFO0FBQ2pCLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0EsMEJBQTBCLFNBQVM7QUFDbkM7QUFDQTtBQUNBLDBCQUEwQixTQUFTO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckIscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGlCQUFpQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQSxrQkFBa0IsaUJBQWlCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixTQUFTO0FBQzFCLGNBQWM7QUFDZDtBQUNBLGlCQUFpQixTQUFTO0FBQzFCLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxVQUFVO0FBQ3pCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsU0FBUztBQUMxQixjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLFVBQVU7QUFDekIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixTQUFTO0FBQzVCLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsVUFBVTtBQUN6QixlQUFlLFNBQVM7QUFDeEIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLFNBQVMsR0FBRyxTQUFTLEdBQUcsU0FBUztBQUNsRCxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxVQUFVO0FBQ3pCLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsU0FBUyxHQUFHLFNBQVMsR0FBRyxTQUFTO0FBQ2xELGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUscUJBQXFCO0FBQ3BDLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQSxxQkFBcUIsUUFBUSxPQUFPLFNBQVMsRUFBRTtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLFVBQVU7QUFDekIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLFNBQVMsR0FBRyxTQUFTLEdBQUcsU0FBUztBQUNwRCxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLFVBQVU7QUFDekIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLE9BQU8sU0FBUyxFQUFFLEdBQUcsT0FBTyxpQkFBaUIsRUFBRTtBQUN0RSxjQUFjLE9BQU8saUJBQWlCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsaUJBQWlCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLDRCQUE0QjtBQUNqRCxxQkFBcUIsNkJBQTZCO0FBQ2xELHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0EscUNBQXFDLG1CQUFtQixFQUFFO0FBQzFEO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QiwyQkFBMkI7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLFNBQVM7QUFDeEIsaUJBQWlCLGlCQUFpQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQiw0QkFBNEI7QUFDakQscUJBQXFCLDZCQUE2QjtBQUNsRCxxQkFBcUI7QUFDckI7QUFDQTtBQUNBLHlDQUF5QyxtQkFBbUIsRUFBRTtBQUM5RDtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsNEJBQTRCO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLFNBQVM7QUFDeEIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLGFBQWE7QUFDNUIsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixFQUFFO0FBQ25CO0FBQ0E7QUFDQSxxQkFBcUIsUUFBUSxPQUFPLFNBQVMsRUFBRTtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsYUFBYTtBQUM1QixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0EscUJBQXFCLE9BQU8sU0FBUztBQUNyQyw2QkFBNkIsZ0JBQWdCLFNBQVMsR0FBRztBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLGFBQWE7QUFDNUIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBLDhCQUE4QixnQkFBZ0IsU0FBUyxHQUFHO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLGFBQWE7QUFDNUIsZUFBZSxLQUFLO0FBQ3BCLGlCQUFpQixFQUFFO0FBQ25CO0FBQ0E7QUFDQSxxQkFBcUIsUUFBUSxPQUFPLG9CQUFvQixFQUFFO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsaUJBQWlCO0FBQ25DO0FBQ0EsUUFBUTtBQUNSLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxTQUFTO0FBQ3hCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLCtCQUErQjtBQUNwRCxxQkFBcUI7QUFDckI7QUFDQTtBQUNBLHVDQUF1QyxjQUFjLEVBQUU7QUFDdkQsY0FBYywyQkFBMkI7QUFDekM7QUFDQTtBQUNBO0FBQ0EsY0FBYywyQkFBMkI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLFVBQVU7QUFDekIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFNBQVMsR0FBRyxTQUFTO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixTQUFTLEdBQUcsU0FBUztBQUNyQztBQUNBO0FBQ0E7QUFDQSxjQUFjLFFBQVEsaUJBQWlCLEdBQUcsaUJBQWlCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxVQUFVO0FBQ3pCLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLHFCQUFxQjtBQUNwQyxpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxTQUFTO0FBQ3hCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLHFCQUFxQjtBQUNwQyxpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLGdDQUFnQztBQUNoQyxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxTQUFTO0FBQ3hCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsYUFBYTtBQUM1QixlQUFlLEVBQUU7QUFDakIsaUJBQWlCLEVBQUU7QUFDbkI7QUFDQTtBQUNBLHFCQUFxQixRQUFRLE9BQU8sK0JBQStCLEVBQUU7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLGFBQWE7QUFDNUIsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQSxxQkFBcUIsUUFBUSxPQUFPLFNBQVMsRUFBRTtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsYUFBYTtBQUM1QixlQUFlLEVBQUU7QUFDakIsZUFBZSxTQUFTO0FBQ3hCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLE9BQU8sV0FBVztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0NBQW9DO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxTQUFTO0FBQ3hCLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsRUFBRTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxvQkFBb0IseUJBQXlCO0FBQzdDO0FBQ0EsUUFBUSxJQUFJO0FBQ1osY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLGFBQWE7QUFDNUIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBLHFCQUFxQixRQUFRLE9BQU8sU0FBUyxFQUFFO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxRQUFRLFFBQVEsRUFBRTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxRQUFRLFFBQVEsRUFBRTtBQUNoQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsYUFBYTtBQUM1QixlQUFlLFNBQVM7QUFDeEIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBLHFCQUFxQixRQUFRLE9BQU8sU0FBUyxFQUFFO0FBQy9DO0FBQ0EsaURBQWlELGNBQWMsRUFBRTtBQUNqRTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQsc0JBQXNCLEVBQUU7QUFDekU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLGFBQWE7QUFDNUIsZUFBZSxTQUFTO0FBQ3hCLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxPQUFPLFdBQVc7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQ0FBa0MsS0FBSztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGdCQUFnQixPQUFPO0FBQ3ZCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGdCQUFnQixPQUFPO0FBQ3ZCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxjQUFjO0FBQzdCLGVBQWUsZ0JBQWdCO0FBQy9CLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLGNBQWM7QUFDN0IsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTyxZQUFZO0FBQ2xDLGVBQWUsT0FBTztBQUN0QjtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGlCQUFpQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixzQkFBc0I7QUFDdkMscUJBQXFCLFVBQVU7QUFDL0I7QUFDQTtBQUNBLHNFQUFzRSwyQkFBMkIsRUFBRTtBQUNuRyxpQkFBaUIsOEJBQThCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBLDREQUE0RDtBQUM1RCxpQkFBaUIsbUJBQW1CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLE9BQU87QUFDakQsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixxQkFBcUI7QUFDdEM7QUFDQTtBQUNBO0FBQ0EscURBQXFELDJCQUEyQixFQUFFO0FBQ2xGLHdDQUF3QyxhQUFhLGVBQWUsRUFBRTtBQUN0RSxpQkFBaUIsOEJBQThCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBLHdEQUF3RCxxQ0FBcUM7QUFDN0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwREFBMEQscUJBQXFCO0FBQy9FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkMsWUFBWTtBQUN2RCwwQ0FBMEMsUUFBUTtBQUNsRCxpQkFBaUIscUJBQXFCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7O0FBRS9CLG1DQUFtQztBQUNuQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1Qix3QkFBd0I7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQLG1CQUFtQjs7QUFFbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLG1CQUFtQjtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0Qzs7QUFFNUM7QUFDQSx1REFBdUQ7QUFDdkQ7QUFDQTtBQUNBLDZCQUE2QixFQUFFO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDO0FBQzFDLCtCQUErQixpQ0FBaUM7QUFDaEUsY0FBYztBQUNkO0FBQ0E7QUFDQSxzQkFBc0I7O0FBRXRCO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixnQkFBZ0IsT0FBTztBQUN2QixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGdCQUFnQixPQUFPO0FBQ3ZCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixnQkFBZ0IsT0FBTztBQUN2QixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPLFlBQVk7QUFDbEMsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLGNBQWM7QUFDN0IsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQ0FBaUM7QUFDakMsYUFBYSxRQUFRLFFBQVEsVUFBVSxhQUFhO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLGNBQWM7QUFDN0IsZ0JBQWdCLE9BQU87QUFDdkIsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEIsZUFBZSxLQUFLO0FBQ3BCLGlCQUFpQixFQUFFO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLHFCQUFxQjtBQUNwQyxpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQixpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsU0FBUztBQUM5QixzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBLGFBQWEsaUJBQWlCO0FBQzlCO0FBQ0E7QUFDQSxhQUFhLGlCQUFpQjtBQUM5QjtBQUNBO0FBQ0EsYUFBYSxxQkFBcUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQSxVQUFVLGlCQUFpQjtBQUMzQixVQUFVO0FBQ1Y7QUFDQTtBQUNBLHFDQUFxQyxtQkFBbUIsY0FBYyxFQUFFLEVBQUU7QUFDMUUsZUFBZSxpQkFBaUI7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBLDRDQUE0QyxTQUFTO0FBQ3JEO0FBQ0E7QUFDQSxlQUFlLFNBQVMsR0FBRyxTQUFTO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixFQUFFO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx5QkFBeUI7QUFDeEMsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHlCQUF5QjtBQUN4QyxpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsaUJBQWlCLEVBQUU7QUFDbkI7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBLFVBQVUsOENBQThDO0FBQ3hELFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsbUNBQW1DO0FBQ3RFLGVBQWUsOENBQThDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNEJBQTRCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBLFVBQVUseUJBQXlCO0FBQ25DLFVBQVU7QUFDVjtBQUNBO0FBQ0Esb0NBQW9DLGlCQUFpQjtBQUNyRCxlQUFlLHlCQUF5QjtBQUN4QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsYUFBYTtBQUM1QixlQUFlLEVBQUU7QUFDakIsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0EsVUFBVSx5QkFBeUI7QUFDbkMsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxhQUFhO0FBQzVCLGVBQWUsS0FBSztBQUNwQixpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQSxVQUFVLE9BQU8scUJBQXFCLEVBQUU7QUFDeEMsVUFBVSxPQUFPLHFCQUFxQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsS0FBSztBQUNwQixpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxnQkFBZ0I7QUFDL0IsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTyxZQUFZO0FBQ2xDLGVBQWUsUUFBUTtBQUN2QixpQkFBaUIsZ0JBQWdCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLGdCQUFnQixtQkFBbUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG1CQUFtQixHQUFHLGlCQUFpQjtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw0QkFBNEIscURBQXFEO0FBQ2pGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx5QkFBeUI7QUFDeEM7QUFDQSxpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHlCQUF5QjtBQUN4QztBQUNBLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUseUJBQXlCO0FBQ3hDO0FBQ0EsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsYUFBYTtBQUM1QixpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQSxVQUFVLE9BQU8sU0FBUyxFQUFFO0FBQzVCLFVBQVUsT0FBTyxTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLElBQUk7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0VBQWtFO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxTQUFTO0FBQ3hCLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckIsaUJBQWlCLEVBQUU7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsRUFBRTtBQUNuQjtBQUNBO0FBQ0EsdUJBQXVCLFNBQVMsR0FBRyxTQUFTO0FBQzVDO0FBQ0EscUNBQXFDLFlBQVksRUFBRTtBQUNuRCxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQixlQUFlLFNBQVM7QUFDeEIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBLHVCQUF1QixTQUFTLEdBQUcsU0FBUyxHQUFHLFNBQVMsR0FBRyxTQUFTO0FBQ3BFO0FBQ0Esc0NBQXNDLFlBQVksRUFBRTtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQixpQkFBaUIsRUFBRTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckIsZUFBZSxTQUFTO0FBQ3hCLGlCQUFpQixFQUFFO0FBQ25CO0FBQ0E7QUFDQSx1QkFBdUIsU0FBUyxHQUFHLFNBQVM7QUFDNUM7QUFDQSxxQ0FBcUMsWUFBWSxFQUFFO0FBQ25ELGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQixlQUFlLFNBQVM7QUFDeEIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBLHVCQUF1QixTQUFTLEdBQUcsU0FBUyxHQUFHLFNBQVMsR0FBRyxTQUFTO0FBQ3BFO0FBQ0EscUNBQXFDLFlBQVksRUFBRTtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEtBQUssTUFBTSxpQkFBaUI7O0FBRTVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLDREQUE0RDtBQUMvRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIseUNBQXlDO0FBQ3RFO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogTG9kYXNoIDxodHRwczovL2xvZGFzaC5jb20vPlxuICogQ29weXJpZ2h0IE9wZW5KUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMgPGh0dHBzOi8vb3BlbmpzZi5vcmcvPlxuICogUmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UgPGh0dHBzOi8vbG9kYXNoLmNvbS9saWNlbnNlPlxuICogQmFzZWQgb24gVW5kZXJzY29yZS5qcyAxLjguMyA8aHR0cDovL3VuZGVyc2NvcmVqcy5vcmcvTElDRU5TRT5cbiAqIENvcHlyaWdodCBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9yc1xuICovXG47KGZ1bmN0aW9uKCkge1xuXG4gIC8qKiBVc2VkIGFzIGEgc2FmZSByZWZlcmVuY2UgZm9yIGB1bmRlZmluZWRgIGluIHByZS1FUzUgZW52aXJvbm1lbnRzLiAqL1xuICB2YXIgdW5kZWZpbmVkO1xuXG4gIC8qKiBVc2VkIGFzIHRoZSBzZW1hbnRpYyB2ZXJzaW9uIG51bWJlci4gKi9cbiAgdmFyIFZFUlNJT04gPSAnNC4xNy4xNSc7XG5cbiAgLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXG4gIHZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4gIC8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cbiAgdmFyIENPUkVfRVJST1JfVEVYVCA9ICdVbnN1cHBvcnRlZCBjb3JlLWpzIHVzZS4gVHJ5IGh0dHBzOi8vbnBtcy5pby9zZWFyY2g/cT1wb255ZmlsbC4nLFxuICAgICAgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4gIC8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbiAgdmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4gIC8qKiBVc2VkIGFzIHRoZSBtYXhpbXVtIG1lbW9pemUgY2FjaGUgc2l6ZS4gKi9cbiAgdmFyIE1BWF9NRU1PSVpFX1NJWkUgPSA1MDA7XG5cbiAgLyoqIFVzZWQgYXMgdGhlIGludGVybmFsIGFyZ3VtZW50IHBsYWNlaG9sZGVyLiAqL1xuICB2YXIgUExBQ0VIT0xERVIgPSAnX19sb2Rhc2hfcGxhY2Vob2xkZXJfXyc7XG5cbiAgLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgY2xvbmluZy4gKi9cbiAgdmFyIENMT05FX0RFRVBfRkxBRyA9IDEsXG4gICAgICBDTE9ORV9GTEFUX0ZMQUcgPSAyLFxuICAgICAgQ0xPTkVfU1lNQk9MU19GTEFHID0gNDtcblxuICAvKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbiAgdmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4gIC8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xuICB2YXIgV1JBUF9CSU5EX0ZMQUcgPSAxLFxuICAgICAgV1JBUF9CSU5EX0tFWV9GTEFHID0gMixcbiAgICAgIFdSQVBfQ1VSUllfQk9VTkRfRkxBRyA9IDQsXG4gICAgICBXUkFQX0NVUlJZX0ZMQUcgPSA4LFxuICAgICAgV1JBUF9DVVJSWV9SSUdIVF9GTEFHID0gMTYsXG4gICAgICBXUkFQX1BBUlRJQUxfRkxBRyA9IDMyLFxuICAgICAgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcgPSA2NCxcbiAgICAgIFdSQVBfQVJZX0ZMQUcgPSAxMjgsXG4gICAgICBXUkFQX1JFQVJHX0ZMQUcgPSAyNTYsXG4gICAgICBXUkFQX0ZMSVBfRkxBRyA9IDUxMjtcblxuICAvKiogVXNlZCBhcyBkZWZhdWx0IG9wdGlvbnMgZm9yIGBfLnRydW5jYXRlYC4gKi9cbiAgdmFyIERFRkFVTFRfVFJVTkNfTEVOR1RIID0gMzAsXG4gICAgICBERUZBVUxUX1RSVU5DX09NSVNTSU9OID0gJy4uLic7XG5cbiAgLyoqIFVzZWQgdG8gZGV0ZWN0IGhvdCBmdW5jdGlvbnMgYnkgbnVtYmVyIG9mIGNhbGxzIHdpdGhpbiBhIHNwYW4gb2YgbWlsbGlzZWNvbmRzLiAqL1xuICB2YXIgSE9UX0NPVU5UID0gODAwLFxuICAgICAgSE9UX1NQQU4gPSAxNjtcblxuICAvKiogVXNlZCB0byBpbmRpY2F0ZSB0aGUgdHlwZSBvZiBsYXp5IGl0ZXJhdGVlcy4gKi9cbiAgdmFyIExBWllfRklMVEVSX0ZMQUcgPSAxLFxuICAgICAgTEFaWV9NQVBfRkxBRyA9IDIsXG4gICAgICBMQVpZX1dISUxFX0ZMQUcgPSAzO1xuXG4gIC8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xuICB2YXIgSU5GSU5JVFkgPSAxIC8gMCxcbiAgICAgIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxLFxuICAgICAgTUFYX0lOVEVHRVIgPSAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOCxcbiAgICAgIE5BTiA9IDAgLyAwO1xuXG4gIC8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHRoZSBtYXhpbXVtIGxlbmd0aCBhbmQgaW5kZXggb2YgYW4gYXJyYXkuICovXG4gIHZhciBNQVhfQVJSQVlfTEVOR1RIID0gNDI5NDk2NzI5NSxcbiAgICAgIE1BWF9BUlJBWV9JTkRFWCA9IE1BWF9BUlJBWV9MRU5HVEggLSAxLFxuICAgICAgSEFMRl9NQVhfQVJSQVlfTEVOR1RIID0gTUFYX0FSUkFZX0xFTkdUSCA+Pj4gMTtcblxuICAvKiogVXNlZCB0byBhc3NvY2lhdGUgd3JhcCBtZXRob2RzIHdpdGggdGhlaXIgYml0IGZsYWdzLiAqL1xuICB2YXIgd3JhcEZsYWdzID0gW1xuICAgIFsnYXJ5JywgV1JBUF9BUllfRkxBR10sXG4gICAgWydiaW5kJywgV1JBUF9CSU5EX0ZMQUddLFxuICAgIFsnYmluZEtleScsIFdSQVBfQklORF9LRVlfRkxBR10sXG4gICAgWydjdXJyeScsIFdSQVBfQ1VSUllfRkxBR10sXG4gICAgWydjdXJyeVJpZ2h0JywgV1JBUF9DVVJSWV9SSUdIVF9GTEFHXSxcbiAgICBbJ2ZsaXAnLCBXUkFQX0ZMSVBfRkxBR10sXG4gICAgWydwYXJ0aWFsJywgV1JBUF9QQVJUSUFMX0ZMQUddLFxuICAgIFsncGFydGlhbFJpZ2h0JywgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUddLFxuICAgIFsncmVhcmcnLCBXUkFQX1JFQVJHX0ZMQUddXG4gIF07XG5cbiAgLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xuICB2YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgICAgYXN5bmNUYWcgPSAnW29iamVjdCBBc3luY0Z1bmN0aW9uXScsXG4gICAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICAgIGRvbUV4Y1RhZyA9ICdbb2JqZWN0IERPTUV4Y2VwdGlvbl0nLFxuICAgICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICAgIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsXG4gICAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICAgIHByb21pc2VUYWcgPSAnW29iamVjdCBQcm9taXNlXScsXG4gICAgICBwcm94eVRhZyA9ICdbb2JqZWN0IFByb3h5XScsXG4gICAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgICBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJyxcbiAgICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nLFxuICAgICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJyxcbiAgICAgIHdlYWtTZXRUYWcgPSAnW29iamVjdCBXZWFrU2V0XSc7XG5cbiAgdmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcbiAgICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcblxuICAvKiogVXNlZCB0byBtYXRjaCBlbXB0eSBzdHJpbmcgbGl0ZXJhbHMgaW4gY29tcGlsZWQgdGVtcGxhdGUgc291cmNlLiAqL1xuICB2YXIgcmVFbXB0eVN0cmluZ0xlYWRpbmcgPSAvXFxiX19wIFxcKz0gJyc7L2csXG4gICAgICByZUVtcHR5U3RyaW5nTWlkZGxlID0gL1xcYihfX3AgXFwrPSkgJycgXFwrL2csXG4gICAgICByZUVtcHR5U3RyaW5nVHJhaWxpbmcgPSAvKF9fZVxcKC4qP1xcKXxcXGJfX3RcXCkpIFxcK1xcbicnOy9nO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIEhUTUwgZW50aXRpZXMgYW5kIEhUTUwgY2hhcmFjdGVycy4gKi9cbiAgdmFyIHJlRXNjYXBlZEh0bWwgPSAvJig/OmFtcHxsdHxndHxxdW90fCMzOSk7L2csXG4gICAgICByZVVuZXNjYXBlZEh0bWwgPSAvWyY8PlwiJ10vZyxcbiAgICAgIHJlSGFzRXNjYXBlZEh0bWwgPSBSZWdFeHAocmVFc2NhcGVkSHRtbC5zb3VyY2UpLFxuICAgICAgcmVIYXNVbmVzY2FwZWRIdG1sID0gUmVnRXhwKHJlVW5lc2NhcGVkSHRtbC5zb3VyY2UpO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIHRlbXBsYXRlIGRlbGltaXRlcnMuICovXG4gIHZhciByZUVzY2FwZSA9IC88JS0oW1xcc1xcU10rPyklPi9nLFxuICAgICAgcmVFdmFsdWF0ZSA9IC88JShbXFxzXFxTXSs/KSU+L2csXG4gICAgICByZUludGVycG9sYXRlID0gLzwlPShbXFxzXFxTXSs/KSU+L2c7XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xuICB2YXIgcmVJc0RlZXBQcm9wID0gL1xcLnxcXFsoPzpbXltcXF1dKnwoW1wiJ10pKD86KD8hXFwxKVteXFxcXF18XFxcXC4pKj9cXDEpXFxdLyxcbiAgICAgIHJlSXNQbGFpblByb3AgPSAvXlxcdyokLyxcbiAgICAgIHJlUHJvcE5hbWUgPSAvW14uW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JCkpL2c7XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGBcbiAgICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gICAqL1xuICB2YXIgcmVSZWdFeHBDaGFyID0gL1tcXFxcXiQuKis/KClbXFxde318XS9nLFxuICAgICAgcmVIYXNSZWdFeHBDaGFyID0gUmVnRXhwKHJlUmVnRXhwQ2hhci5zb3VyY2UpO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UuICovXG4gIHZhciByZVRyaW0gPSAvXlxccyt8XFxzKyQvZyxcbiAgICAgIHJlVHJpbVN0YXJ0ID0gL15cXHMrLyxcbiAgICAgIHJlVHJpbUVuZCA9IC9cXHMrJC87XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggd3JhcCBkZXRhaWwgY29tbWVudHMuICovXG4gIHZhciByZVdyYXBDb21tZW50ID0gL1xceyg/OlxcblxcL1xcKiBcXFt3cmFwcGVkIHdpdGggLitcXF0gXFwqXFwvKT9cXG4/LyxcbiAgICAgIHJlV3JhcERldGFpbHMgPSAvXFx7XFxuXFwvXFwqIFxcW3dyYXBwZWQgd2l0aCAoLispXFxdIFxcKi8sXG4gICAgICByZVNwbGl0RGV0YWlscyA9IC8sPyAmIC87XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggd29yZHMgY29tcG9zZWQgb2YgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMuICovXG4gIHZhciByZUFzY2lpV29yZCA9IC9bXlxceDAwLVxceDJmXFx4M2EtXFx4NDBcXHg1Yi1cXHg2MFxceDdiLVxceDdmXSsvZztcblxuICAvKiogVXNlZCB0byBtYXRjaCBiYWNrc2xhc2hlcyBpbiBwcm9wZXJ0eSBwYXRocy4gKi9cbiAgdmFyIHJlRXNjYXBlQ2hhciA9IC9cXFxcKFxcXFwpPy9nO1xuXG4gIC8qKlxuICAgKiBVc2VkIHRvIG1hdGNoXG4gICAqIFtFUyB0ZW1wbGF0ZSBkZWxpbWl0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10ZW1wbGF0ZS1saXRlcmFsLWxleGljYWwtY29tcG9uZW50cykuXG4gICAqL1xuICB2YXIgcmVFc1RlbXBsYXRlID0gL1xcJFxceyhbXlxcXFx9XSooPzpcXFxcLlteXFxcXH1dKikqKVxcfS9nO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgIGZsYWdzIGZyb20gdGhlaXIgY29lcmNlZCBzdHJpbmcgdmFsdWVzLiAqL1xuICB2YXIgcmVGbGFncyA9IC9cXHcqJC87XG5cbiAgLyoqIFVzZWQgdG8gZGV0ZWN0IGJhZCBzaWduZWQgaGV4YWRlY2ltYWwgc3RyaW5nIHZhbHVlcy4gKi9cbiAgdmFyIHJlSXNCYWRIZXggPSAvXlstK10weFswLTlhLWZdKyQvaTtcblxuICAvKiogVXNlZCB0byBkZXRlY3QgYmluYXJ5IHN0cmluZyB2YWx1ZXMuICovXG4gIHZhciByZUlzQmluYXJ5ID0gL14wYlswMV0rJC9pO1xuXG4gIC8qKiBVc2VkIHRvIGRldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpKS4gKi9cbiAgdmFyIHJlSXNIb3N0Q3RvciA9IC9eXFxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXFxdJC87XG5cbiAgLyoqIFVzZWQgdG8gZGV0ZWN0IG9jdGFsIHN0cmluZyB2YWx1ZXMuICovXG4gIHZhciByZUlzT2N0YWwgPSAvXjBvWzAtN10rJC9pO1xuXG4gIC8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cbiAgdmFyIHJlSXNVaW50ID0gL14oPzowfFsxLTldXFxkKikkLztcblxuICAvKiogVXNlZCB0byBtYXRjaCBMYXRpbiBVbmljb2RlIGxldHRlcnMgKGV4Y2x1ZGluZyBtYXRoZW1hdGljYWwgb3BlcmF0b3JzKS4gKi9cbiAgdmFyIHJlTGF0aW4gPSAvW1xceGMwLVxceGQ2XFx4ZDgtXFx4ZjZcXHhmOC1cXHhmZlxcdTAxMDAtXFx1MDE3Zl0vZztcblxuICAvKiogVXNlZCB0byBlbnN1cmUgY2FwdHVyaW5nIG9yZGVyIG9mIHRlbXBsYXRlIGRlbGltaXRlcnMuICovXG4gIHZhciByZU5vTWF0Y2ggPSAvKCReKS87XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggdW5lc2NhcGVkIGNoYXJhY3RlcnMgaW4gY29tcGlsZWQgc3RyaW5nIGxpdGVyYWxzLiAqL1xuICB2YXIgcmVVbmVzY2FwZWRTdHJpbmcgPSAvWydcXG5cXHJcXHUyMDI4XFx1MjAyOVxcXFxdL2c7XG5cbiAgLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIGNoYXJhY3RlciBjbGFzc2VzLiAqL1xuICB2YXIgcnNBc3RyYWxSYW5nZSA9ICdcXFxcdWQ4MDAtXFxcXHVkZmZmJyxcbiAgICAgIHJzQ29tYm9NYXJrc1JhbmdlID0gJ1xcXFx1MDMwMC1cXFxcdTAzNmYnLFxuICAgICAgcmVDb21ib0hhbGZNYXJrc1JhbmdlID0gJ1xcXFx1ZmUyMC1cXFxcdWZlMmYnLFxuICAgICAgcnNDb21ib1N5bWJvbHNSYW5nZSA9ICdcXFxcdTIwZDAtXFxcXHUyMGZmJyxcbiAgICAgIHJzQ29tYm9SYW5nZSA9IHJzQ29tYm9NYXJrc1JhbmdlICsgcmVDb21ib0hhbGZNYXJrc1JhbmdlICsgcnNDb21ib1N5bWJvbHNSYW5nZSxcbiAgICAgIHJzRGluZ2JhdFJhbmdlID0gJ1xcXFx1MjcwMC1cXFxcdTI3YmYnLFxuICAgICAgcnNMb3dlclJhbmdlID0gJ2EtelxcXFx4ZGYtXFxcXHhmNlxcXFx4ZjgtXFxcXHhmZicsXG4gICAgICByc01hdGhPcFJhbmdlID0gJ1xcXFx4YWNcXFxceGIxXFxcXHhkN1xcXFx4ZjcnLFxuICAgICAgcnNOb25DaGFyUmFuZ2UgPSAnXFxcXHgwMC1cXFxceDJmXFxcXHgzYS1cXFxceDQwXFxcXHg1Yi1cXFxceDYwXFxcXHg3Yi1cXFxceGJmJyxcbiAgICAgIHJzUHVuY3R1YXRpb25SYW5nZSA9ICdcXFxcdTIwMDAtXFxcXHUyMDZmJyxcbiAgICAgIHJzU3BhY2VSYW5nZSA9ICcgXFxcXHRcXFxceDBiXFxcXGZcXFxceGEwXFxcXHVmZWZmXFxcXG5cXFxcclxcXFx1MjAyOFxcXFx1MjAyOVxcXFx1MTY4MFxcXFx1MTgwZVxcXFx1MjAwMFxcXFx1MjAwMVxcXFx1MjAwMlxcXFx1MjAwM1xcXFx1MjAwNFxcXFx1MjAwNVxcXFx1MjAwNlxcXFx1MjAwN1xcXFx1MjAwOFxcXFx1MjAwOVxcXFx1MjAwYVxcXFx1MjAyZlxcXFx1MjA1ZlxcXFx1MzAwMCcsXG4gICAgICByc1VwcGVyUmFuZ2UgPSAnQS1aXFxcXHhjMC1cXFxceGQ2XFxcXHhkOC1cXFxceGRlJyxcbiAgICAgIHJzVmFyUmFuZ2UgPSAnXFxcXHVmZTBlXFxcXHVmZTBmJyxcbiAgICAgIHJzQnJlYWtSYW5nZSA9IHJzTWF0aE9wUmFuZ2UgKyByc05vbkNoYXJSYW5nZSArIHJzUHVuY3R1YXRpb25SYW5nZSArIHJzU3BhY2VSYW5nZTtcblxuICAvKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2FwdHVyZSBncm91cHMuICovXG4gIHZhciByc0Fwb3MgPSBcIlsnXFx1MjAxOV1cIixcbiAgICAgIHJzQXN0cmFsID0gJ1snICsgcnNBc3RyYWxSYW5nZSArICddJyxcbiAgICAgIHJzQnJlYWsgPSAnWycgKyByc0JyZWFrUmFuZ2UgKyAnXScsXG4gICAgICByc0NvbWJvID0gJ1snICsgcnNDb21ib1JhbmdlICsgJ10nLFxuICAgICAgcnNEaWdpdHMgPSAnXFxcXGQrJyxcbiAgICAgIHJzRGluZ2JhdCA9ICdbJyArIHJzRGluZ2JhdFJhbmdlICsgJ10nLFxuICAgICAgcnNMb3dlciA9ICdbJyArIHJzTG93ZXJSYW5nZSArICddJyxcbiAgICAgIHJzTWlzYyA9ICdbXicgKyByc0FzdHJhbFJhbmdlICsgcnNCcmVha1JhbmdlICsgcnNEaWdpdHMgKyByc0RpbmdiYXRSYW5nZSArIHJzTG93ZXJSYW5nZSArIHJzVXBwZXJSYW5nZSArICddJyxcbiAgICAgIHJzRml0eiA9ICdcXFxcdWQ4M2NbXFxcXHVkZmZiLVxcXFx1ZGZmZl0nLFxuICAgICAgcnNNb2RpZmllciA9ICcoPzonICsgcnNDb21ibyArICd8JyArIHJzRml0eiArICcpJyxcbiAgICAgIHJzTm9uQXN0cmFsID0gJ1teJyArIHJzQXN0cmFsUmFuZ2UgKyAnXScsXG4gICAgICByc1JlZ2lvbmFsID0gJyg/OlxcXFx1ZDgzY1tcXFxcdWRkZTYtXFxcXHVkZGZmXSl7Mn0nLFxuICAgICAgcnNTdXJyUGFpciA9ICdbXFxcXHVkODAwLVxcXFx1ZGJmZl1bXFxcXHVkYzAwLVxcXFx1ZGZmZl0nLFxuICAgICAgcnNVcHBlciA9ICdbJyArIHJzVXBwZXJSYW5nZSArICddJyxcbiAgICAgIHJzWldKID0gJ1xcXFx1MjAwZCc7XG5cbiAgLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIHJlZ2V4ZXMuICovXG4gIHZhciByc01pc2NMb3dlciA9ICcoPzonICsgcnNMb3dlciArICd8JyArIHJzTWlzYyArICcpJyxcbiAgICAgIHJzTWlzY1VwcGVyID0gJyg/OicgKyByc1VwcGVyICsgJ3wnICsgcnNNaXNjICsgJyknLFxuICAgICAgcnNPcHRDb250ckxvd2VyID0gJyg/OicgKyByc0Fwb3MgKyAnKD86ZHxsbHxtfHJlfHN8dHx2ZSkpPycsXG4gICAgICByc09wdENvbnRyVXBwZXIgPSAnKD86JyArIHJzQXBvcyArICcoPzpEfExMfE18UkV8U3xUfFZFKSk/JyxcbiAgICAgIHJlT3B0TW9kID0gcnNNb2RpZmllciArICc/JyxcbiAgICAgIHJzT3B0VmFyID0gJ1snICsgcnNWYXJSYW5nZSArICddPycsXG4gICAgICByc09wdEpvaW4gPSAnKD86JyArIHJzWldKICsgJyg/OicgKyBbcnNOb25Bc3RyYWwsIHJzUmVnaW9uYWwsIHJzU3VyclBhaXJdLmpvaW4oJ3wnKSArICcpJyArIHJzT3B0VmFyICsgcmVPcHRNb2QgKyAnKSonLFxuICAgICAgcnNPcmRMb3dlciA9ICdcXFxcZCooPzoxc3R8Mm5kfDNyZHwoPyFbMTIzXSlcXFxcZHRoKSg/PVxcXFxifFtBLVpfXSknLFxuICAgICAgcnNPcmRVcHBlciA9ICdcXFxcZCooPzoxU1R8Mk5EfDNSRHwoPyFbMTIzXSlcXFxcZFRIKSg/PVxcXFxifFthLXpfXSknLFxuICAgICAgcnNTZXEgPSByc09wdFZhciArIHJlT3B0TW9kICsgcnNPcHRKb2luLFxuICAgICAgcnNFbW9qaSA9ICcoPzonICsgW3JzRGluZ2JhdCwgcnNSZWdpb25hbCwgcnNTdXJyUGFpcl0uam9pbignfCcpICsgJyknICsgcnNTZXEsXG4gICAgICByc1N5bWJvbCA9ICcoPzonICsgW3JzTm9uQXN0cmFsICsgcnNDb21ibyArICc/JywgcnNDb21ibywgcnNSZWdpb25hbCwgcnNTdXJyUGFpciwgcnNBc3RyYWxdLmpvaW4oJ3wnKSArICcpJztcblxuICAvKiogVXNlZCB0byBtYXRjaCBhcG9zdHJvcGhlcy4gKi9cbiAgdmFyIHJlQXBvcyA9IFJlZ0V4cChyc0Fwb3MsICdnJyk7XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gbWF0Y2ggW2NvbWJpbmluZyBkaWFjcml0aWNhbCBtYXJrc10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29tYmluaW5nX0RpYWNyaXRpY2FsX01hcmtzKSBhbmRcbiAgICogW2NvbWJpbmluZyBkaWFjcml0aWNhbCBtYXJrcyBmb3Igc3ltYm9sc10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29tYmluaW5nX0RpYWNyaXRpY2FsX01hcmtzX2Zvcl9TeW1ib2xzKS5cbiAgICovXG4gIHZhciByZUNvbWJvTWFyayA9IFJlZ0V4cChyc0NvbWJvLCAnZycpO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIFtzdHJpbmcgc3ltYm9sc10oaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtdW5pY29kZSkuICovXG4gIHZhciByZVVuaWNvZGUgPSBSZWdFeHAocnNGaXR6ICsgJyg/PScgKyByc0ZpdHogKyAnKXwnICsgcnNTeW1ib2wgKyByc1NlcSwgJ2cnKTtcblxuICAvKiogVXNlZCB0byBtYXRjaCBjb21wbGV4IG9yIGNvbXBvdW5kIHdvcmRzLiAqL1xuICB2YXIgcmVVbmljb2RlV29yZCA9IFJlZ0V4cChbXG4gICAgcnNVcHBlciArICc/JyArIHJzTG93ZXIgKyAnKycgKyByc09wdENvbnRyTG93ZXIgKyAnKD89JyArIFtyc0JyZWFrLCByc1VwcGVyLCAnJCddLmpvaW4oJ3wnKSArICcpJyxcbiAgICByc01pc2NVcHBlciArICcrJyArIHJzT3B0Q29udHJVcHBlciArICcoPz0nICsgW3JzQnJlYWssIHJzVXBwZXIgKyByc01pc2NMb3dlciwgJyQnXS5qb2luKCd8JykgKyAnKScsXG4gICAgcnNVcHBlciArICc/JyArIHJzTWlzY0xvd2VyICsgJysnICsgcnNPcHRDb250ckxvd2VyLFxuICAgIHJzVXBwZXIgKyAnKycgKyByc09wdENvbnRyVXBwZXIsXG4gICAgcnNPcmRVcHBlcixcbiAgICByc09yZExvd2VyLFxuICAgIHJzRGlnaXRzLFxuICAgIHJzRW1vamlcbiAgXS5qb2luKCd8JyksICdnJyk7XG5cbiAgLyoqIFVzZWQgdG8gZGV0ZWN0IHN0cmluZ3Mgd2l0aCBbemVyby13aWR0aCBqb2luZXJzIG9yIGNvZGUgcG9pbnRzIGZyb20gdGhlIGFzdHJhbCBwbGFuZXNdKGh0dHA6Ly9lZXYuZWUvYmxvZy8yMDE1LzA5LzEyL2RhcmstY29ybmVycy1vZi11bmljb2RlLykuICovXG4gIHZhciByZUhhc1VuaWNvZGUgPSBSZWdFeHAoJ1snICsgcnNaV0ogKyByc0FzdHJhbFJhbmdlICArIHJzQ29tYm9SYW5nZSArIHJzVmFyUmFuZ2UgKyAnXScpO1xuXG4gIC8qKiBVc2VkIHRvIGRldGVjdCBzdHJpbmdzIHRoYXQgbmVlZCBhIG1vcmUgcm9idXN0IHJlZ2V4cCB0byBtYXRjaCB3b3Jkcy4gKi9cbiAgdmFyIHJlSGFzVW5pY29kZVdvcmQgPSAvW2Etel1bQS1aXXxbQS1aXXsyfVthLXpdfFswLTldW2EtekEtWl18W2EtekEtWl1bMC05XXxbXmEtekEtWjAtOSBdLztcblxuICAvKiogVXNlZCB0byBhc3NpZ24gZGVmYXVsdCBgY29udGV4dGAgb2JqZWN0IHByb3BlcnRpZXMuICovXG4gIHZhciBjb250ZXh0UHJvcHMgPSBbXG4gICAgJ0FycmF5JywgJ0J1ZmZlcicsICdEYXRhVmlldycsICdEYXRlJywgJ0Vycm9yJywgJ0Zsb2F0MzJBcnJheScsICdGbG9hdDY0QXJyYXknLFxuICAgICdGdW5jdGlvbicsICdJbnQ4QXJyYXknLCAnSW50MTZBcnJheScsICdJbnQzMkFycmF5JywgJ01hcCcsICdNYXRoJywgJ09iamVjdCcsXG4gICAgJ1Byb21pc2UnLCAnUmVnRXhwJywgJ1NldCcsICdTdHJpbmcnLCAnU3ltYm9sJywgJ1R5cGVFcnJvcicsICdVaW50OEFycmF5JyxcbiAgICAnVWludDhDbGFtcGVkQXJyYXknLCAnVWludDE2QXJyYXknLCAnVWludDMyQXJyYXknLCAnV2Vha01hcCcsXG4gICAgJ18nLCAnY2xlYXJUaW1lb3V0JywgJ2lzRmluaXRlJywgJ3BhcnNlSW50JywgJ3NldFRpbWVvdXQnXG4gIF07XG5cbiAgLyoqIFVzZWQgdG8gbWFrZSB0ZW1wbGF0ZSBzb3VyY2VVUkxzIGVhc2llciB0byBpZGVudGlmeS4gKi9cbiAgdmFyIHRlbXBsYXRlQ291bnRlciA9IC0xO1xuXG4gIC8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIG9mIHR5cGVkIGFycmF5cy4gKi9cbiAgdmFyIHR5cGVkQXJyYXlUYWdzID0ge307XG4gIHR5cGVkQXJyYXlUYWdzW2Zsb2F0MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbZmxvYXQ2NFRhZ10gPVxuICB0eXBlZEFycmF5VGFnc1tpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXSA9XG4gIHR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4VGFnXSA9XG4gIHR5cGVkQXJyYXlUYWdzW3VpbnQ4Q2xhbXBlZFRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50MTZUYWddID1cbiAgdHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG4gIHR5cGVkQXJyYXlUYWdzW2FyZ3NUYWddID0gdHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddID1cbiAgdHlwZWRBcnJheVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gdHlwZWRBcnJheVRhZ3NbYm9vbFRhZ10gPVxuICB0eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRlVGFnXSA9XG4gIHR5cGVkQXJyYXlUYWdzW2Vycm9yVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Z1bmNUYWddID1cbiAgdHlwZWRBcnJheVRhZ3NbbWFwVGFnXSA9IHR5cGVkQXJyYXlUYWdzW251bWJlclRhZ10gPVxuICB0eXBlZEFycmF5VGFnc1tvYmplY3RUYWddID0gdHlwZWRBcnJheVRhZ3NbcmVnZXhwVGFnXSA9XG4gIHR5cGVkQXJyYXlUYWdzW3NldFRhZ10gPSB0eXBlZEFycmF5VGFnc1tzdHJpbmdUYWddID1cbiAgdHlwZWRBcnJheVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTtcblxuICAvKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBzdXBwb3J0ZWQgYnkgYF8uY2xvbmVgLiAqL1xuICB2YXIgY2xvbmVhYmxlVGFncyA9IHt9O1xuICBjbG9uZWFibGVUYWdzW2FyZ3NUYWddID0gY2xvbmVhYmxlVGFnc1thcnJheVRhZ10gPVxuICBjbG9uZWFibGVUYWdzW2FycmF5QnVmZmVyVGFnXSA9IGNsb25lYWJsZVRhZ3NbZGF0YVZpZXdUYWddID1cbiAgY2xvbmVhYmxlVGFnc1tib29sVGFnXSA9IGNsb25lYWJsZVRhZ3NbZGF0ZVRhZ10gPVxuICBjbG9uZWFibGVUYWdzW2Zsb2F0MzJUYWddID0gY2xvbmVhYmxlVGFnc1tmbG9hdDY0VGFnXSA9XG4gIGNsb25lYWJsZVRhZ3NbaW50OFRhZ10gPSBjbG9uZWFibGVUYWdzW2ludDE2VGFnXSA9XG4gIGNsb25lYWJsZVRhZ3NbaW50MzJUYWddID0gY2xvbmVhYmxlVGFnc1ttYXBUYWddID1cbiAgY2xvbmVhYmxlVGFnc1tudW1iZXJUYWddID0gY2xvbmVhYmxlVGFnc1tvYmplY3RUYWddID1cbiAgY2xvbmVhYmxlVGFnc1tyZWdleHBUYWddID0gY2xvbmVhYmxlVGFnc1tzZXRUYWddID1cbiAgY2xvbmVhYmxlVGFnc1tzdHJpbmdUYWddID0gY2xvbmVhYmxlVGFnc1tzeW1ib2xUYWddID1cbiAgY2xvbmVhYmxlVGFnc1t1aW50OFRhZ10gPSBjbG9uZWFibGVUYWdzW3VpbnQ4Q2xhbXBlZFRhZ10gPVxuICBjbG9uZWFibGVUYWdzW3VpbnQxNlRhZ10gPSBjbG9uZWFibGVUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xuICBjbG9uZWFibGVUYWdzW2Vycm9yVGFnXSA9IGNsb25lYWJsZVRhZ3NbZnVuY1RhZ10gPVxuICBjbG9uZWFibGVUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XG5cbiAgLyoqIFVzZWQgdG8gbWFwIExhdGluIFVuaWNvZGUgbGV0dGVycyB0byBiYXNpYyBMYXRpbiBsZXR0ZXJzLiAqL1xuICB2YXIgZGVidXJyZWRMZXR0ZXJzID0ge1xuICAgIC8vIExhdGluLTEgU3VwcGxlbWVudCBibG9jay5cbiAgICAnXFx4YzAnOiAnQScsICAnXFx4YzEnOiAnQScsICdcXHhjMic6ICdBJywgJ1xceGMzJzogJ0EnLCAnXFx4YzQnOiAnQScsICdcXHhjNSc6ICdBJyxcbiAgICAnXFx4ZTAnOiAnYScsICAnXFx4ZTEnOiAnYScsICdcXHhlMic6ICdhJywgJ1xceGUzJzogJ2EnLCAnXFx4ZTQnOiAnYScsICdcXHhlNSc6ICdhJyxcbiAgICAnXFx4YzcnOiAnQycsICAnXFx4ZTcnOiAnYycsXG4gICAgJ1xceGQwJzogJ0QnLCAgJ1xceGYwJzogJ2QnLFxuICAgICdcXHhjOCc6ICdFJywgICdcXHhjOSc6ICdFJywgJ1xceGNhJzogJ0UnLCAnXFx4Y2InOiAnRScsXG4gICAgJ1xceGU4JzogJ2UnLCAgJ1xceGU5JzogJ2UnLCAnXFx4ZWEnOiAnZScsICdcXHhlYic6ICdlJyxcbiAgICAnXFx4Y2MnOiAnSScsICAnXFx4Y2QnOiAnSScsICdcXHhjZSc6ICdJJywgJ1xceGNmJzogJ0knLFxuICAgICdcXHhlYyc6ICdpJywgICdcXHhlZCc6ICdpJywgJ1xceGVlJzogJ2knLCAnXFx4ZWYnOiAnaScsXG4gICAgJ1xceGQxJzogJ04nLCAgJ1xceGYxJzogJ24nLFxuICAgICdcXHhkMic6ICdPJywgICdcXHhkMyc6ICdPJywgJ1xceGQ0JzogJ08nLCAnXFx4ZDUnOiAnTycsICdcXHhkNic6ICdPJywgJ1xceGQ4JzogJ08nLFxuICAgICdcXHhmMic6ICdvJywgICdcXHhmMyc6ICdvJywgJ1xceGY0JzogJ28nLCAnXFx4ZjUnOiAnbycsICdcXHhmNic6ICdvJywgJ1xceGY4JzogJ28nLFxuICAgICdcXHhkOSc6ICdVJywgICdcXHhkYSc6ICdVJywgJ1xceGRiJzogJ1UnLCAnXFx4ZGMnOiAnVScsXG4gICAgJ1xceGY5JzogJ3UnLCAgJ1xceGZhJzogJ3UnLCAnXFx4ZmInOiAndScsICdcXHhmYyc6ICd1JyxcbiAgICAnXFx4ZGQnOiAnWScsICAnXFx4ZmQnOiAneScsICdcXHhmZic6ICd5JyxcbiAgICAnXFx4YzYnOiAnQWUnLCAnXFx4ZTYnOiAnYWUnLFxuICAgICdcXHhkZSc6ICdUaCcsICdcXHhmZSc6ICd0aCcsXG4gICAgJ1xceGRmJzogJ3NzJyxcbiAgICAvLyBMYXRpbiBFeHRlbmRlZC1BIGJsb2NrLlxuICAgICdcXHUwMTAwJzogJ0EnLCAgJ1xcdTAxMDInOiAnQScsICdcXHUwMTA0JzogJ0EnLFxuICAgICdcXHUwMTAxJzogJ2EnLCAgJ1xcdTAxMDMnOiAnYScsICdcXHUwMTA1JzogJ2EnLFxuICAgICdcXHUwMTA2JzogJ0MnLCAgJ1xcdTAxMDgnOiAnQycsICdcXHUwMTBhJzogJ0MnLCAnXFx1MDEwYyc6ICdDJyxcbiAgICAnXFx1MDEwNyc6ICdjJywgICdcXHUwMTA5JzogJ2MnLCAnXFx1MDEwYic6ICdjJywgJ1xcdTAxMGQnOiAnYycsXG4gICAgJ1xcdTAxMGUnOiAnRCcsICAnXFx1MDExMCc6ICdEJywgJ1xcdTAxMGYnOiAnZCcsICdcXHUwMTExJzogJ2QnLFxuICAgICdcXHUwMTEyJzogJ0UnLCAgJ1xcdTAxMTQnOiAnRScsICdcXHUwMTE2JzogJ0UnLCAnXFx1MDExOCc6ICdFJywgJ1xcdTAxMWEnOiAnRScsXG4gICAgJ1xcdTAxMTMnOiAnZScsICAnXFx1MDExNSc6ICdlJywgJ1xcdTAxMTcnOiAnZScsICdcXHUwMTE5JzogJ2UnLCAnXFx1MDExYic6ICdlJyxcbiAgICAnXFx1MDExYyc6ICdHJywgICdcXHUwMTFlJzogJ0cnLCAnXFx1MDEyMCc6ICdHJywgJ1xcdTAxMjInOiAnRycsXG4gICAgJ1xcdTAxMWQnOiAnZycsICAnXFx1MDExZic6ICdnJywgJ1xcdTAxMjEnOiAnZycsICdcXHUwMTIzJzogJ2cnLFxuICAgICdcXHUwMTI0JzogJ0gnLCAgJ1xcdTAxMjYnOiAnSCcsICdcXHUwMTI1JzogJ2gnLCAnXFx1MDEyNyc6ICdoJyxcbiAgICAnXFx1MDEyOCc6ICdJJywgICdcXHUwMTJhJzogJ0knLCAnXFx1MDEyYyc6ICdJJywgJ1xcdTAxMmUnOiAnSScsICdcXHUwMTMwJzogJ0knLFxuICAgICdcXHUwMTI5JzogJ2knLCAgJ1xcdTAxMmInOiAnaScsICdcXHUwMTJkJzogJ2knLCAnXFx1MDEyZic6ICdpJywgJ1xcdTAxMzEnOiAnaScsXG4gICAgJ1xcdTAxMzQnOiAnSicsICAnXFx1MDEzNSc6ICdqJyxcbiAgICAnXFx1MDEzNic6ICdLJywgICdcXHUwMTM3JzogJ2snLCAnXFx1MDEzOCc6ICdrJyxcbiAgICAnXFx1MDEzOSc6ICdMJywgICdcXHUwMTNiJzogJ0wnLCAnXFx1MDEzZCc6ICdMJywgJ1xcdTAxM2YnOiAnTCcsICdcXHUwMTQxJzogJ0wnLFxuICAgICdcXHUwMTNhJzogJ2wnLCAgJ1xcdTAxM2MnOiAnbCcsICdcXHUwMTNlJzogJ2wnLCAnXFx1MDE0MCc6ICdsJywgJ1xcdTAxNDInOiAnbCcsXG4gICAgJ1xcdTAxNDMnOiAnTicsICAnXFx1MDE0NSc6ICdOJywgJ1xcdTAxNDcnOiAnTicsICdcXHUwMTRhJzogJ04nLFxuICAgICdcXHUwMTQ0JzogJ24nLCAgJ1xcdTAxNDYnOiAnbicsICdcXHUwMTQ4JzogJ24nLCAnXFx1MDE0Yic6ICduJyxcbiAgICAnXFx1MDE0Yyc6ICdPJywgICdcXHUwMTRlJzogJ08nLCAnXFx1MDE1MCc6ICdPJyxcbiAgICAnXFx1MDE0ZCc6ICdvJywgICdcXHUwMTRmJzogJ28nLCAnXFx1MDE1MSc6ICdvJyxcbiAgICAnXFx1MDE1NCc6ICdSJywgICdcXHUwMTU2JzogJ1InLCAnXFx1MDE1OCc6ICdSJyxcbiAgICAnXFx1MDE1NSc6ICdyJywgICdcXHUwMTU3JzogJ3InLCAnXFx1MDE1OSc6ICdyJyxcbiAgICAnXFx1MDE1YSc6ICdTJywgICdcXHUwMTVjJzogJ1MnLCAnXFx1MDE1ZSc6ICdTJywgJ1xcdTAxNjAnOiAnUycsXG4gICAgJ1xcdTAxNWInOiAncycsICAnXFx1MDE1ZCc6ICdzJywgJ1xcdTAxNWYnOiAncycsICdcXHUwMTYxJzogJ3MnLFxuICAgICdcXHUwMTYyJzogJ1QnLCAgJ1xcdTAxNjQnOiAnVCcsICdcXHUwMTY2JzogJ1QnLFxuICAgICdcXHUwMTYzJzogJ3QnLCAgJ1xcdTAxNjUnOiAndCcsICdcXHUwMTY3JzogJ3QnLFxuICAgICdcXHUwMTY4JzogJ1UnLCAgJ1xcdTAxNmEnOiAnVScsICdcXHUwMTZjJzogJ1UnLCAnXFx1MDE2ZSc6ICdVJywgJ1xcdTAxNzAnOiAnVScsICdcXHUwMTcyJzogJ1UnLFxuICAgICdcXHUwMTY5JzogJ3UnLCAgJ1xcdTAxNmInOiAndScsICdcXHUwMTZkJzogJ3UnLCAnXFx1MDE2Zic6ICd1JywgJ1xcdTAxNzEnOiAndScsICdcXHUwMTczJzogJ3UnLFxuICAgICdcXHUwMTc0JzogJ1cnLCAgJ1xcdTAxNzUnOiAndycsXG4gICAgJ1xcdTAxNzYnOiAnWScsICAnXFx1MDE3Nyc6ICd5JywgJ1xcdTAxNzgnOiAnWScsXG4gICAgJ1xcdTAxNzknOiAnWicsICAnXFx1MDE3Yic6ICdaJywgJ1xcdTAxN2QnOiAnWicsXG4gICAgJ1xcdTAxN2EnOiAneicsICAnXFx1MDE3Yyc6ICd6JywgJ1xcdTAxN2UnOiAneicsXG4gICAgJ1xcdTAxMzInOiAnSUonLCAnXFx1MDEzMyc6ICdpaicsXG4gICAgJ1xcdTAxNTInOiAnT2UnLCAnXFx1MDE1Myc6ICdvZScsXG4gICAgJ1xcdTAxNDknOiBcIiduXCIsICdcXHUwMTdmJzogJ3MnXG4gIH07XG5cbiAgLyoqIFVzZWQgdG8gbWFwIGNoYXJhY3RlcnMgdG8gSFRNTCBlbnRpdGllcy4gKi9cbiAgdmFyIGh0bWxFc2NhcGVzID0ge1xuICAgICcmJzogJyZhbXA7JyxcbiAgICAnPCc6ICcmbHQ7JyxcbiAgICAnPic6ICcmZ3Q7JyxcbiAgICAnXCInOiAnJnF1b3Q7JyxcbiAgICBcIidcIjogJyYjMzk7J1xuICB9O1xuXG4gIC8qKiBVc2VkIHRvIG1hcCBIVE1MIGVudGl0aWVzIHRvIGNoYXJhY3RlcnMuICovXG4gIHZhciBodG1sVW5lc2NhcGVzID0ge1xuICAgICcmYW1wOyc6ICcmJyxcbiAgICAnJmx0Oyc6ICc8JyxcbiAgICAnJmd0Oyc6ICc+JyxcbiAgICAnJnF1b3Q7JzogJ1wiJyxcbiAgICAnJiMzOTsnOiBcIidcIlxuICB9O1xuXG4gIC8qKiBVc2VkIHRvIGVzY2FwZSBjaGFyYWN0ZXJzIGZvciBpbmNsdXNpb24gaW4gY29tcGlsZWQgc3RyaW5nIGxpdGVyYWxzLiAqL1xuICB2YXIgc3RyaW5nRXNjYXBlcyA9IHtcbiAgICAnXFxcXCc6ICdcXFxcJyxcbiAgICBcIidcIjogXCInXCIsXG4gICAgJ1xcbic6ICduJyxcbiAgICAnXFxyJzogJ3InLFxuICAgICdcXHUyMDI4JzogJ3UyMDI4JyxcbiAgICAnXFx1MjAyOSc6ICd1MjAyOSdcbiAgfTtcblxuICAvKiogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgd2l0aG91dCBhIGRlcGVuZGVuY3kgb24gYHJvb3RgLiAqL1xuICB2YXIgZnJlZVBhcnNlRmxvYXQgPSBwYXJzZUZsb2F0LFxuICAgICAgZnJlZVBhcnNlSW50ID0gcGFyc2VJbnQ7XG5cbiAgLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbiAgdmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xuXG4gIC8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG4gIHZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4gIC8qKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LiAqL1xuICB2YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxuICAvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xuICB2YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbiAgLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xuICB2YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4gIC8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG4gIHZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4gIC8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xuICB2YXIgZnJlZVByb2Nlc3MgPSBtb2R1bGVFeHBvcnRzICYmIGZyZWVHbG9iYWwucHJvY2VzcztcblxuICAvKiogVXNlZCB0byBhY2Nlc3MgZmFzdGVyIE5vZGUuanMgaGVscGVycy4gKi9cbiAgdmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICAvLyBVc2UgYHV0aWwudHlwZXNgIGZvciBOb2RlLmpzIDEwKy5cbiAgICAgIHZhciB0eXBlcyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlICYmIGZyZWVNb2R1bGUucmVxdWlyZSgndXRpbCcpLnR5cGVzO1xuXG4gICAgICBpZiAodHlwZXMpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVzO1xuICAgICAgfVxuXG4gICAgICAvLyBMZWdhY3kgYHByb2Nlc3MuYmluZGluZygndXRpbCcpYCBmb3IgTm9kZS5qcyA8IDEwLlxuICAgICAgcmV0dXJuIGZyZWVQcm9jZXNzICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcgJiYgZnJlZVByb2Nlc3MuYmluZGluZygndXRpbCcpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH0oKSk7XG5cbiAgLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbiAgdmFyIG5vZGVJc0FycmF5QnVmZmVyID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNBcnJheUJ1ZmZlcixcbiAgICAgIG5vZGVJc0RhdGUgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc0RhdGUsXG4gICAgICBub2RlSXNNYXAgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc01hcCxcbiAgICAgIG5vZGVJc1JlZ0V4cCA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzUmVnRXhwLFxuICAgICAgbm9kZUlzU2V0ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNTZXQsXG4gICAgICBub2RlSXNUeXBlZEFycmF5ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNUeXBlZEFycmF5O1xuXG4gIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gIC8qKlxuICAgKiBBIGZhc3RlciBhbHRlcm5hdGl2ZSB0byBgRnVuY3Rpb24jYXBwbHlgLCB0aGlzIGZ1bmN0aW9uIGludm9rZXMgYGZ1bmNgXG4gICAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYCBhbmQgdGhlIGFyZ3VtZW50cyBvZiBgYXJnc2AuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAgICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgYGZ1bmNgIHdpdGguXG4gICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGZ1bmNgLlxuICAgKi9cbiAgZnVuY3Rpb24gYXBwbHkoZnVuYywgdGhpc0FyZywgYXJncykge1xuICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnKTtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdKTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgIGNhc2UgMzogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG4gIH1cblxuICAvKipcbiAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlQWdncmVnYXRvcmAgZm9yIGFycmF5cy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXR0ZXIgVGhlIGZ1bmN0aW9uIHRvIHNldCBgYWNjdW11bGF0b3JgIHZhbHVlcy5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGl0ZXJhdGVlIHRvIHRyYW5zZm9ybSBrZXlzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gYWNjdW11bGF0b3IgVGhlIGluaXRpYWwgYWdncmVnYXRlZCBvYmplY3QuXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgYWNjdW11bGF0b3JgLlxuICAgKi9cbiAgZnVuY3Rpb24gYXJyYXlBZ2dyZWdhdG9yKGFycmF5LCBzZXR0ZXIsIGl0ZXJhdGVlLCBhY2N1bXVsYXRvcikge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgICBzZXR0ZXIoYWNjdW11bGF0b3IsIHZhbHVlLCBpdGVyYXRlZSh2YWx1ZSksIGFycmF5KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5mb3JFYWNoYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAgICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICovXG4gIGZ1bmN0aW9uIGFycmF5RWFjaChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgaWYgKGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcnJheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZm9yRWFjaFJpZ2h0YCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAgICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICovXG4gIGZ1bmN0aW9uIGFycmF5RWFjaFJpZ2h0KGFycmF5LCBpdGVyYXRlZSkge1xuICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgaWYgKGl0ZXJhdGVlKGFycmF5W2xlbmd0aF0sIGxlbmd0aCwgYXJyYXkpID09PSBmYWxzZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5ldmVyeWAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gICAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbGwgZWxlbWVudHMgcGFzcyB0aGUgcHJlZGljYXRlIGNoZWNrLFxuICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgKi9cbiAgZnVuY3Rpb24gYXJyYXlFdmVyeShhcnJheSwgcHJlZGljYXRlKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGlmICghcHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5maWx0ZXJgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICAgKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmaWx0ZXJlZCBhcnJheS5cbiAgICovXG4gIGZ1bmN0aW9uIGFycmF5RmlsdGVyKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgICAgcmVzdWx0ID0gW107XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uaW5jbHVkZXNgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICAgKiBzcGVjaWZ5aW5nIGFuIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgKiBAcGFyYW0geyp9IHRhcmdldCBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB0YXJnZXRgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gICAqL1xuICBmdW5jdGlvbiBhcnJheUluY2x1ZGVzKGFycmF5LCB2YWx1ZSkge1xuICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICByZXR1cm4gISFsZW5ndGggJiYgYmFzZUluZGV4T2YoYXJyYXksIHZhbHVlLCAwKSA+IC0xO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZSBgYXJyYXlJbmNsdWRlc2AgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBhIGNvbXBhcmF0b3IuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAqIEBwYXJhbSB7Kn0gdGFyZ2V0IFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb21wYXJhdG9yIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdGFyZ2V0YCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICAgKi9cbiAgZnVuY3Rpb24gYXJyYXlJbmNsdWRlc1dpdGgoYXJyYXksIHZhbHVlLCBjb21wYXJhdG9yKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGlmIChjb21wYXJhdG9yKHZhbHVlLCBhcnJheVtpbmRleF0pKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1hcGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gICAqIHNob3J0aGFuZHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIGFycmF5LlxuICAgKi9cbiAgZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQXBwZW5kcyB0aGUgZWxlbWVudHMgb2YgYHZhbHVlc2AgdG8gYGFycmF5YC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAgICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYXBwZW5kLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICovXG4gIGZ1bmN0aW9uIGFycmF5UHVzaChhcnJheSwgdmFsdWVzKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICAgIG9mZnNldCA9IGFycmF5Lmxlbmd0aDtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBhcnJheVtvZmZzZXQgKyBpbmRleF0gPSB2YWx1ZXNbaW5kZXhdO1xuICAgIH1cbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cblxuICAvKipcbiAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnJlZHVjZWAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gICAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICogQHBhcmFtIHsqfSBbYWNjdW11bGF0b3JdIFRoZSBpbml0aWFsIHZhbHVlLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpbml0QWNjdW1dIFNwZWNpZnkgdXNpbmcgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYGFycmF5YCBhc1xuICAgKiAgdGhlIGluaXRpYWwgdmFsdWUuXG4gICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS5cbiAgICovXG4gIGZ1bmN0aW9uIGFycmF5UmVkdWNlKGFycmF5LCBpdGVyYXRlZSwgYWNjdW11bGF0b3IsIGluaXRBY2N1bSkge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICAgIGlmIChpbml0QWNjdW0gJiYgbGVuZ3RoKSB7XG4gICAgICBhY2N1bXVsYXRvciA9IGFycmF5WysraW5kZXhdO1xuICAgIH1cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgYWNjdW11bGF0b3IgPSBpdGVyYXRlZShhY2N1bXVsYXRvciwgYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gIH1cblxuICAvKipcbiAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnJlZHVjZVJpZ2h0YCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAgICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgKiBAcGFyYW0geyp9IFthY2N1bXVsYXRvcl0gVGhlIGluaXRpYWwgdmFsdWUuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2luaXRBY2N1bV0gU3BlY2lmeSB1c2luZyB0aGUgbGFzdCBlbGVtZW50IG9mIGBhcnJheWAgYXNcbiAgICogIHRoZSBpbml0aWFsIHZhbHVlLlxuICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgYWNjdW11bGF0ZWQgdmFsdWUuXG4gICAqL1xuICBmdW5jdGlvbiBhcnJheVJlZHVjZVJpZ2h0KGFycmF5LCBpdGVyYXRlZSwgYWNjdW11bGF0b3IsIGluaXRBY2N1bSkge1xuICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICBpZiAoaW5pdEFjY3VtICYmIGxlbmd0aCkge1xuICAgICAgYWNjdW11bGF0b3IgPSBhcnJheVstLWxlbmd0aF07XG4gICAgfVxuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgYWNjdW11bGF0b3IgPSBpdGVyYXRlZShhY2N1bXVsYXRvciwgYXJyYXlbbGVuZ3RoXSwgbGVuZ3RoLCBhcnJheSk7XG4gICAgfVxuICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uc29tZWAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gICAqIHNob3J0aGFuZHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbnkgZWxlbWVudCBwYXNzZXMgdGhlIHByZWRpY2F0ZSBjaGVjayxcbiAgICogIGVsc2UgYGZhbHNlYC5cbiAgICovXG4gIGZ1bmN0aW9uIGFycmF5U29tZShhcnJheSwgcHJlZGljYXRlKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc2l6ZSBvZiBhbiBBU0NJSSBgc3RyaW5nYC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIGluc3BlY3QuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHN0cmluZyBzaXplLlxuICAgKi9cbiAgdmFyIGFzY2lpU2l6ZSA9IGJhc2VQcm9wZXJ0eSgnbGVuZ3RoJyk7XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGFuIEFTQ0lJIGBzdHJpbmdgIHRvIGFuIGFycmF5LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgYXJyYXkuXG4gICAqL1xuICBmdW5jdGlvbiBhc2NpaVRvQXJyYXkoc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZy5zcGxpdCgnJyk7XG4gIH1cblxuICAvKipcbiAgICogU3BsaXRzIGFuIEFTQ0lJIGBzdHJpbmdgIGludG8gYW4gYXJyYXkgb2YgaXRzIHdvcmRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHdvcmRzIG9mIGBzdHJpbmdgLlxuICAgKi9cbiAgZnVuY3Rpb24gYXNjaWlXb3JkcyhzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nLm1hdGNoKHJlQXNjaWlXb3JkKSB8fCBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBtZXRob2RzIGxpa2UgYF8uZmluZEtleWAgYW5kIGBfLmZpbmRMYXN0S2V5YCxcbiAgICogd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLCB3aGljaCBpdGVyYXRlcyBvdmVyIGBjb2xsZWN0aW9uYFxuICAgKiB1c2luZyBgZWFjaEZ1bmNgLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpbnNwZWN0LlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZWFjaEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGl0ZXJhdGUgb3ZlciBgY29sbGVjdGlvbmAuXG4gICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmb3VuZCBlbGVtZW50IG9yIGl0cyBrZXksIGVsc2UgYHVuZGVmaW5lZGAuXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlRmluZEtleShjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGVhY2hGdW5jKSB7XG4gICAgdmFyIHJlc3VsdDtcbiAgICBlYWNoRnVuYyhjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwga2V5LCBjb2xsZWN0aW9uKSB7XG4gICAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBrZXksIGNvbGxlY3Rpb24pKSB7XG4gICAgICAgIHJlc3VsdCA9IGtleTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmluZEluZGV4YCBhbmQgYF8uZmluZExhc3RJbmRleGAgd2l0aG91dFxuICAgKiBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VGaW5kSW5kZXgoYXJyYXksIHByZWRpY2F0ZSwgZnJvbUluZGV4LCBmcm9tUmlnaHQpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICBpbmRleCA9IGZyb21JbmRleCArIChmcm9tUmlnaHQgPyAxIDogLTEpO1xuXG4gICAgd2hpbGUgKChmcm9tUmlnaHQgPyBpbmRleC0tIDogKytpbmRleCA8IGxlbmd0aCkpIHtcbiAgICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmluZGV4T2ZgIHdpdGhvdXQgYGZyb21JbmRleGAgYm91bmRzIGNoZWNrcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZUluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IHZhbHVlXG4gICAgICA/IHN0cmljdEluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpXG4gICAgICA6IGJhc2VGaW5kSW5kZXgoYXJyYXksIGJhc2VJc05hTiwgZnJvbUluZGV4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGJhc2VJbmRleE9mYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGEgY29tcGFyYXRvci5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb21wYXJhdG9yIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlSW5kZXhPZldpdGgoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgsIGNvbXBhcmF0b3IpIHtcbiAgICB2YXIgaW5kZXggPSBmcm9tSW5kZXggLSAxLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgaWYgKGNvbXBhcmF0b3IoYXJyYXlbaW5kZXhdLCB2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYU5gIHdpdGhvdXQgc3VwcG9ydCBmb3IgbnVtYmVyIG9iamVjdHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBgTmFOYCwgZWxzZSBgZmFsc2VgLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZUlzTmFOKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tZWFuYCBhbmQgYF8ubWVhbkJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yXG4gICAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIG1lYW4uXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlTWVhbihhcnJheSwgaXRlcmF0ZWUpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgcmV0dXJuIGxlbmd0aCA/IChiYXNlU3VtKGFycmF5LCBpdGVyYXRlZSkgLyBsZW5ndGgpIDogTkFOO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnByb3BlcnR5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VQcm9wZXJ0eShrZXkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnByb3BlcnR5T2ZgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVlcCBwYXRocy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VQcm9wZXJ0eU9mKG9iamVjdCkge1xuICAgIHJldHVybiBmdW5jdGlvbihrZXkpIHtcbiAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucmVkdWNlYCBhbmQgYF8ucmVkdWNlUmlnaHRgLCB3aXRob3V0IHN1cHBvcnRcbiAgICogZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMsIHdoaWNoIGl0ZXJhdGVzIG92ZXIgYGNvbGxlY3Rpb25gIHVzaW5nIGBlYWNoRnVuY2AuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICogQHBhcmFtIHsqfSBhY2N1bXVsYXRvciBUaGUgaW5pdGlhbCB2YWx1ZS5cbiAgICogQHBhcmFtIHtib29sZWFufSBpbml0QWNjdW0gU3BlY2lmeSB1c2luZyB0aGUgZmlyc3Qgb3IgbGFzdCBlbGVtZW50IG9mXG4gICAqICBgY29sbGVjdGlvbmAgYXMgdGhlIGluaXRpYWwgdmFsdWUuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGVhY2hGdW5jIFRoZSBmdW5jdGlvbiB0byBpdGVyYXRlIG92ZXIgYGNvbGxlY3Rpb25gLlxuICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgYWNjdW11bGF0ZWQgdmFsdWUuXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlUmVkdWNlKGNvbGxlY3Rpb24sIGl0ZXJhdGVlLCBhY2N1bXVsYXRvciwgaW5pdEFjY3VtLCBlYWNoRnVuYykge1xuICAgIGVhY2hGdW5jKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgICAgYWNjdW11bGF0b3IgPSBpbml0QWNjdW1cbiAgICAgICAgPyAoaW5pdEFjY3VtID0gZmFsc2UsIHZhbHVlKVxuICAgICAgICA6IGl0ZXJhdGVlKGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pO1xuICAgIH0pO1xuICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zb3J0QnlgIHdoaWNoIHVzZXMgYGNvbXBhcmVyYCB0byBkZWZpbmUgdGhlXG4gICAqIHNvcnQgb3JkZXIgb2YgYGFycmF5YCBhbmQgcmVwbGFjZXMgY3JpdGVyaWEgb2JqZWN0cyB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmdcbiAgICogdmFsdWVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc29ydC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY29tcGFyZXIgVGhlIGZ1bmN0aW9uIHRvIGRlZmluZSBzb3J0IG9yZGVyLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VTb3J0QnkoYXJyYXksIGNvbXBhcmVyKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICAgIGFycmF5LnNvcnQoY29tcGFyZXIpO1xuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgYXJyYXlbbGVuZ3RoXSA9IGFycmF5W2xlbmd0aF0udmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBhcnJheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zdW1gIGFuZCBgXy5zdW1CeWAgd2l0aG91dCBzdXBwb3J0IGZvclxuICAgKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBzdW0uXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlU3VtKGFycmF5LCBpdGVyYXRlZSkge1xuICAgIHZhciByZXN1bHQsXG4gICAgICAgIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICB2YXIgY3VycmVudCA9IGl0ZXJhdGVlKGFycmF5W2luZGV4XSk7XG4gICAgICBpZiAoY3VycmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gY3VycmVudCA6IChyZXN1bHQgKyBjdXJyZW50KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50aW1lc2Agd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzXG4gICAqIG9yIG1heCBhcnJheSBsZW5ndGggY2hlY2tzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIGludm9rZSBgaXRlcmF0ZWVgLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlVGltZXMobiwgaXRlcmF0ZWUpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgcmVzdWx0ID0gQXJyYXkobik7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShpbmRleCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udG9QYWlyc2AgYW5kIGBfLnRvUGFpcnNJbmAgd2hpY2ggY3JlYXRlcyBhbiBhcnJheVxuICAgKiBvZiBrZXktdmFsdWUgcGFpcnMgZm9yIGBvYmplY3RgIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3BlcnR5IG5hbWVzIG9mIGBwcm9wc2AuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IG5hbWVzIHRvIGdldCB2YWx1ZXMgZm9yLlxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBrZXktdmFsdWUgcGFpcnMuXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlVG9QYWlycyhvYmplY3QsIHByb3BzKSB7XG4gICAgcmV0dXJuIGFycmF5TWFwKHByb3BzLCBmdW5jdGlvbihrZXkpIHtcbiAgICAgIHJldHVybiBba2V5LCBvYmplY3Rba2V5XV07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5hcnlgIHdpdGhvdXQgc3VwcG9ydCBmb3Igc3RvcmluZyBtZXRhZGF0YS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBmb3IuXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VVbmFyeShmdW5jKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gZnVuYyh2YWx1ZSk7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy52YWx1ZXNgIGFuZCBgXy52YWx1ZXNJbmAgd2hpY2ggY3JlYXRlcyBhblxuICAgKiBhcnJheSBvZiBgb2JqZWN0YCBwcm9wZXJ0eSB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byB0aGUgcHJvcGVydHkgbmFtZXNcbiAgICogb2YgYHByb3BzYC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgbmFtZXMgdG8gZ2V0IHZhbHVlcyBmb3IuXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IHZhbHVlcy5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VWYWx1ZXMob2JqZWN0LCBwcm9wcykge1xuICAgIHJldHVybiBhcnJheU1hcChwcm9wcywgZnVuY3Rpb24oa2V5KSB7XG4gICAgICByZXR1cm4gb2JqZWN0W2tleV07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGEgYGNhY2hlYCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gY2FjaGUgVGhlIGNhY2hlIHRvIHF1ZXJ5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICAgKi9cbiAgZnVuY3Rpb24gY2FjaGVIYXMoY2FjaGUsIGtleSkge1xuICAgIHJldHVybiBjYWNoZS5oYXMoa2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIGJ5IGBfLnRyaW1gIGFuZCBgXy50cmltU3RhcnRgIHRvIGdldCB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IHN0cmluZyBzeW1ib2xcbiAgICogdGhhdCBpcyBub3QgZm91bmQgaW4gdGhlIGNoYXJhY3RlciBzeW1ib2xzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBzdHJTeW1ib2xzIFRoZSBzdHJpbmcgc3ltYm9scyB0byBpbnNwZWN0LlxuICAgKiBAcGFyYW0ge0FycmF5fSBjaHJTeW1ib2xzIFRoZSBjaGFyYWN0ZXIgc3ltYm9scyB0byBmaW5kLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgdW5tYXRjaGVkIHN0cmluZyBzeW1ib2wuXG4gICAqL1xuICBmdW5jdGlvbiBjaGFyc1N0YXJ0SW5kZXgoc3RyU3ltYm9scywgY2hyU3ltYm9scykge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBzdHJTeW1ib2xzLmxlbmd0aDtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoICYmIGJhc2VJbmRleE9mKGNoclN5bWJvbHMsIHN0clN5bWJvbHNbaW5kZXhdLCAwKSA+IC0xKSB7fVxuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIGJ5IGBfLnRyaW1gIGFuZCBgXy50cmltRW5kYCB0byBnZXQgdGhlIGluZGV4IG9mIHRoZSBsYXN0IHN0cmluZyBzeW1ib2xcbiAgICogdGhhdCBpcyBub3QgZm91bmQgaW4gdGhlIGNoYXJhY3RlciBzeW1ib2xzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBzdHJTeW1ib2xzIFRoZSBzdHJpbmcgc3ltYm9scyB0byBpbnNwZWN0LlxuICAgKiBAcGFyYW0ge0FycmF5fSBjaHJTeW1ib2xzIFRoZSBjaGFyYWN0ZXIgc3ltYm9scyB0byBmaW5kLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbGFzdCB1bm1hdGNoZWQgc3RyaW5nIHN5bWJvbC5cbiAgICovXG4gIGZ1bmN0aW9uIGNoYXJzRW5kSW5kZXgoc3RyU3ltYm9scywgY2hyU3ltYm9scykge1xuICAgIHZhciBpbmRleCA9IHN0clN5bWJvbHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGluZGV4LS0gJiYgYmFzZUluZGV4T2YoY2hyU3ltYm9scywgc3RyU3ltYm9sc1tpbmRleF0sIDApID4gLTEpIHt9XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIG51bWJlciBvZiBgcGxhY2Vob2xkZXJgIG9jY3VycmVuY2VzIGluIGBhcnJheWAuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgKiBAcGFyYW0geyp9IHBsYWNlaG9sZGVyIFRoZSBwbGFjZWhvbGRlciB0byBzZWFyY2ggZm9yLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBwbGFjZWhvbGRlciBjb3VudC5cbiAgICovXG4gIGZ1bmN0aW9uIGNvdW50SG9sZGVycyhhcnJheSwgcGxhY2Vob2xkZXIpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICByZXN1bHQgPSAwO1xuXG4gICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICBpZiAoYXJyYXlbbGVuZ3RoXSA9PT0gcGxhY2Vob2xkZXIpIHtcbiAgICAgICAgKytyZXN1bHQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogVXNlZCBieSBgXy5kZWJ1cnJgIHRvIGNvbnZlcnQgTGF0aW4tMSBTdXBwbGVtZW50IGFuZCBMYXRpbiBFeHRlbmRlZC1BXG4gICAqIGxldHRlcnMgdG8gYmFzaWMgTGF0aW4gbGV0dGVycy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxldHRlciBUaGUgbWF0Y2hlZCBsZXR0ZXIgdG8gZGVidXJyLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBkZWJ1cnJlZCBsZXR0ZXIuXG4gICAqL1xuICB2YXIgZGVidXJyTGV0dGVyID0gYmFzZVByb3BlcnR5T2YoZGVidXJyZWRMZXR0ZXJzKTtcblxuICAvKipcbiAgICogVXNlZCBieSBgXy5lc2NhcGVgIHRvIGNvbnZlcnQgY2hhcmFjdGVycyB0byBIVE1MIGVudGl0aWVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hyIFRoZSBtYXRjaGVkIGNoYXJhY3RlciB0byBlc2NhcGUuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGVzY2FwZWQgY2hhcmFjdGVyLlxuICAgKi9cbiAgdmFyIGVzY2FwZUh0bWxDaGFyID0gYmFzZVByb3BlcnR5T2YoaHRtbEVzY2FwZXMpO1xuXG4gIC8qKlxuICAgKiBVc2VkIGJ5IGBfLnRlbXBsYXRlYCB0byBlc2NhcGUgY2hhcmFjdGVycyBmb3IgaW5jbHVzaW9uIGluIGNvbXBpbGVkIHN0cmluZyBsaXRlcmFscy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNociBUaGUgbWF0Y2hlZCBjaGFyYWN0ZXIgdG8gZXNjYXBlLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBlc2NhcGVkIGNoYXJhY3Rlci5cbiAgICovXG4gIGZ1bmN0aW9uIGVzY2FwZVN0cmluZ0NoYXIoY2hyKSB7XG4gICAgcmV0dXJuICdcXFxcJyArIHN0cmluZ0VzY2FwZXNbY2hyXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gICAqL1xuICBmdW5jdGlvbiBnZXRWYWx1ZShvYmplY3QsIGtleSkge1xuICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBgc3RyaW5nYCBjb250YWlucyBVbmljb2RlIHN5bWJvbHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYSBzeW1ib2wgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAgICovXG4gIGZ1bmN0aW9uIGhhc1VuaWNvZGUoc3RyaW5nKSB7XG4gICAgcmV0dXJuIHJlSGFzVW5pY29kZS50ZXN0KHN0cmluZyk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGBzdHJpbmdgIGNvbnRhaW5zIGEgd29yZCBjb21wb3NlZCBvZiBVbmljb2RlIHN5bWJvbHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYSB3b3JkIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gICAqL1xuICBmdW5jdGlvbiBoYXNVbmljb2RlV29yZChzdHJpbmcpIHtcbiAgICByZXR1cm4gcmVIYXNVbmljb2RlV29yZC50ZXN0KHN0cmluZyk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYGl0ZXJhdG9yYCB0byBhbiBhcnJheS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IGl0ZXJhdG9yIFRoZSBpdGVyYXRvciB0byBjb252ZXJ0LlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAgICovXG4gIGZ1bmN0aW9uIGl0ZXJhdG9yVG9BcnJheShpdGVyYXRvcikge1xuICAgIHZhciBkYXRhLFxuICAgICAgICByZXN1bHQgPSBbXTtcblxuICAgIHdoaWxlICghKGRhdGEgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGRhdGEudmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGBtYXBgIHRvIGl0cyBrZXktdmFsdWUgcGFpcnMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBjb252ZXJ0LlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGtleS12YWx1ZSBwYWlycy5cbiAgICovXG4gIGZ1bmN0aW9uIG1hcFRvQXJyYXkobWFwKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIHJlc3VsdCA9IEFycmF5KG1hcC5zaXplKTtcblxuICAgIG1hcC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgIHJlc3VsdFsrK2luZGV4XSA9IFtrZXksIHZhbHVlXTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIGFyZ3VtZW50IHRyYW5zZm9ybS5cbiAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAqL1xuICBmdW5jdGlvbiBvdmVyQXJnKGZ1bmMsIHRyYW5zZm9ybSkge1xuICAgIHJldHVybiBmdW5jdGlvbihhcmcpIHtcbiAgICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIGFsbCBgcGxhY2Vob2xkZXJgIGVsZW1lbnRzIGluIGBhcnJheWAgd2l0aCBhbiBpbnRlcm5hbCBwbGFjZWhvbGRlclxuICAgKiBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiB0aGVpciBpbmRleGVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICAgKiBAcGFyYW0geyp9IHBsYWNlaG9sZGVyIFRoZSBwbGFjZWhvbGRlciB0byByZXBsYWNlLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBwbGFjZWhvbGRlciBpbmRleGVzLlxuICAgKi9cbiAgZnVuY3Rpb24gcmVwbGFjZUhvbGRlcnMoYXJyYXksIHBsYWNlaG9sZGVyKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgcmVzSW5kZXggPSAwLFxuICAgICAgICByZXN1bHQgPSBbXTtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgICBpZiAodmFsdWUgPT09IHBsYWNlaG9sZGVyIHx8IHZhbHVlID09PSBQTEFDRUhPTERFUikge1xuICAgICAgICBhcnJheVtpbmRleF0gPSBQTEFDRUhPTERFUjtcbiAgICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gaW5kZXg7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYHNldGAgdG8gYW4gYXJyYXkgb2YgaXRzIHZhbHVlcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IHNldCBUaGUgc2V0IHRvIGNvbnZlcnQuXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgdmFsdWVzLlxuICAgKi9cbiAgZnVuY3Rpb24gc2V0VG9BcnJheShzZXQpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgcmVzdWx0ID0gQXJyYXkoc2V0LnNpemUpO1xuXG4gICAgc2V0LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJlc3VsdFsrK2luZGV4XSA9IHZhbHVlO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYHNldGAgdG8gaXRzIHZhbHVlLXZhbHVlIHBhaXJzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gc2V0IFRoZSBzZXQgdG8gY29udmVydC5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB2YWx1ZS12YWx1ZSBwYWlycy5cbiAgICovXG4gIGZ1bmN0aW9uIHNldFRvUGFpcnMoc2V0KSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIHJlc3VsdCA9IEFycmF5KHNldC5zaXplKTtcblxuICAgIHNldC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXN1bHRbKytpbmRleF0gPSBbdmFsdWUsIHZhbHVlXTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5pbmRleE9mYCB3aGljaCBwZXJmb3JtcyBzdHJpY3QgZXF1YWxpdHlcbiAgICogY29tcGFyaXNvbnMgb2YgdmFsdWVzLCBpLmUuIGA9PT1gLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gICAqL1xuICBmdW5jdGlvbiBzdHJpY3RJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KSB7XG4gICAgdmFyIGluZGV4ID0gZnJvbUluZGV4IC0gMSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGlmIChhcnJheVtpbmRleF0gPT09IHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5sYXN0SW5kZXhPZmAgd2hpY2ggcGVyZm9ybXMgc3RyaWN0IGVxdWFsaXR5XG4gICAqIGNvbXBhcmlzb25zIG9mIHZhbHVlcywgaS5lLiBgPT09YC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICAgKi9cbiAgZnVuY3Rpb24gc3RyaWN0TGFzdEluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgaW5kZXggPSBmcm9tSW5kZXggKyAxO1xuICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICBpZiAoYXJyYXlbaW5kZXhdID09PSB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBudW1iZXIgb2Ygc3ltYm9scyBpbiBgc3RyaW5nYC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHN0cmluZyBzaXplLlxuICAgKi9cbiAgZnVuY3Rpb24gc3RyaW5nU2l6ZShzdHJpbmcpIHtcbiAgICByZXR1cm4gaGFzVW5pY29kZShzdHJpbmcpXG4gICAgICA/IHVuaWNvZGVTaXplKHN0cmluZylcbiAgICAgIDogYXNjaWlTaXplKHN0cmluZyk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYHN0cmluZ2AgdG8gYW4gYXJyYXkuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAgICovXG4gIGZ1bmN0aW9uIHN0cmluZ1RvQXJyYXkoc3RyaW5nKSB7XG4gICAgcmV0dXJuIGhhc1VuaWNvZGUoc3RyaW5nKVxuICAgICAgPyB1bmljb2RlVG9BcnJheShzdHJpbmcpXG4gICAgICA6IGFzY2lpVG9BcnJheShzdHJpbmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZWQgYnkgYF8udW5lc2NhcGVgIHRvIGNvbnZlcnQgSFRNTCBlbnRpdGllcyB0byBjaGFyYWN0ZXJzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hyIFRoZSBtYXRjaGVkIGNoYXJhY3RlciB0byB1bmVzY2FwZS5cbiAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdW5lc2NhcGVkIGNoYXJhY3Rlci5cbiAgICovXG4gIHZhciB1bmVzY2FwZUh0bWxDaGFyID0gYmFzZVByb3BlcnR5T2YoaHRtbFVuZXNjYXBlcyk7XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHNpemUgb2YgYSBVbmljb2RlIGBzdHJpbmdgLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgaW5zcGVjdC5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgc3RyaW5nIHNpemUuXG4gICAqL1xuICBmdW5jdGlvbiB1bmljb2RlU2l6ZShzdHJpbmcpIHtcbiAgICB2YXIgcmVzdWx0ID0gcmVVbmljb2RlLmxhc3RJbmRleCA9IDA7XG4gICAgd2hpbGUgKHJlVW5pY29kZS50ZXN0KHN0cmluZykpIHtcbiAgICAgICsrcmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgVW5pY29kZSBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY29udmVydGVkIGFycmF5LlxuICAgKi9cbiAgZnVuY3Rpb24gdW5pY29kZVRvQXJyYXkoc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZy5tYXRjaChyZVVuaWNvZGUpIHx8IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwbGl0cyBhIFVuaWNvZGUgYHN0cmluZ2AgaW50byBhbiBhcnJheSBvZiBpdHMgd29yZHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgd29yZHMgb2YgYHN0cmluZ2AuXG4gICAqL1xuICBmdW5jdGlvbiB1bmljb2RlV29yZHMoc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZy5tYXRjaChyZVVuaWNvZGVXb3JkKSB8fCBbXTtcbiAgfVxuXG4gIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgcHJpc3RpbmUgYGxvZGFzaGAgZnVuY3Rpb24gdXNpbmcgdGhlIGBjb250ZXh0YCBvYmplY3QuXG4gICAqXG4gICAqIEBzdGF0aWNcbiAgICogQG1lbWJlck9mIF9cbiAgICogQHNpbmNlIDEuMS4wXG4gICAqIEBjYXRlZ29yeSBVdGlsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbY29udGV4dD1yb290XSBUaGUgY29udGV4dCBvYmplY3QuXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBhIG5ldyBgbG9kYXNoYCBmdW5jdGlvbi5cbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogXy5taXhpbih7ICdmb28nOiBfLmNvbnN0YW50KCdmb28nKSB9KTtcbiAgICpcbiAgICogdmFyIGxvZGFzaCA9IF8ucnVuSW5Db250ZXh0KCk7XG4gICAqIGxvZGFzaC5taXhpbih7ICdiYXInOiBsb2Rhc2guY29uc3RhbnQoJ2JhcicpIH0pO1xuICAgKlxuICAgKiBfLmlzRnVuY3Rpb24oXy5mb28pO1xuICAgKiAvLyA9PiB0cnVlXG4gICAqIF8uaXNGdW5jdGlvbihfLmJhcik7XG4gICAqIC8vID0+IGZhbHNlXG4gICAqXG4gICAqIGxvZGFzaC5pc0Z1bmN0aW9uKGxvZGFzaC5mb28pO1xuICAgKiAvLyA9PiBmYWxzZVxuICAgKiBsb2Rhc2guaXNGdW5jdGlvbihsb2Rhc2guYmFyKTtcbiAgICogLy8gPT4gdHJ1ZVxuICAgKlxuICAgKiAvLyBDcmVhdGUgYSBzdXBlZC11cCBgZGVmZXJgIGluIE5vZGUuanMuXG4gICAqIHZhciBkZWZlciA9IF8ucnVuSW5Db250ZXh0KHsgJ3NldFRpbWVvdXQnOiBzZXRJbW1lZGlhdGUgfSkuZGVmZXI7XG4gICAqL1xuICB2YXIgcnVuSW5Db250ZXh0ID0gKGZ1bmN0aW9uIHJ1bkluQ29udGV4dChjb250ZXh0KSB7XG4gICAgY29udGV4dCA9IGNvbnRleHQgPT0gbnVsbCA/IHJvb3QgOiBfLmRlZmF1bHRzKHJvb3QuT2JqZWN0KCksIGNvbnRleHQsIF8ucGljayhyb290LCBjb250ZXh0UHJvcHMpKTtcblxuICAgIC8qKiBCdWlsdC1pbiBjb25zdHJ1Y3RvciByZWZlcmVuY2VzLiAqL1xuICAgIHZhciBBcnJheSA9IGNvbnRleHQuQXJyYXksXG4gICAgICAgIERhdGUgPSBjb250ZXh0LkRhdGUsXG4gICAgICAgIEVycm9yID0gY29udGV4dC5FcnJvcixcbiAgICAgICAgRnVuY3Rpb24gPSBjb250ZXh0LkZ1bmN0aW9uLFxuICAgICAgICBNYXRoID0gY29udGV4dC5NYXRoLFxuICAgICAgICBPYmplY3QgPSBjb250ZXh0Lk9iamVjdCxcbiAgICAgICAgUmVnRXhwID0gY29udGV4dC5SZWdFeHAsXG4gICAgICAgIFN0cmluZyA9IGNvbnRleHQuU3RyaW5nLFxuICAgICAgICBUeXBlRXJyb3IgPSBjb250ZXh0LlR5cGVFcnJvcjtcblxuICAgIC8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbiAgICB2YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZSxcbiAgICAgICAgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgICAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbiAgICAvKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXG4gICAgdmFyIGNvcmVKc0RhdGEgPSBjb250ZXh0WydfX2NvcmUtanNfc2hhcmVkX18nXTtcblxuICAgIC8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbiAgICB2YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4gICAgLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG4gICAgdmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbiAgICAvKiogVXNlZCB0byBnZW5lcmF0ZSB1bmlxdWUgSURzLiAqL1xuICAgIHZhciBpZENvdW50ZXIgPSAwO1xuXG4gICAgLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbiAgICB2YXIgbWFza1NyY0tleSA9IChmdW5jdGlvbigpIHtcbiAgICAgIHZhciB1aWQgPSAvW14uXSskLy5leGVjKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAnJyk7XG4gICAgICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG4gICAgfSgpKTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAgICAgKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAgICAgKiBvZiB2YWx1ZXMuXG4gICAgICovXG4gICAgdmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbiAgICAvKiogVXNlZCB0byBpbmZlciB0aGUgYE9iamVjdGAgY29uc3RydWN0b3IuICovXG4gICAgdmFyIG9iamVjdEN0b3JTdHJpbmcgPSBmdW5jVG9TdHJpbmcuY2FsbChPYmplY3QpO1xuXG4gICAgLyoqIFVzZWQgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYF9gIHJlZmVyZW5jZSBpbiBgXy5ub0NvbmZsaWN0YC4gKi9cbiAgICB2YXIgb2xkRGFzaCA9IHJvb3QuXztcblxuICAgIC8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG4gICAgdmFyIHJlSXNOYXRpdmUgPSBSZWdFeHAoJ14nICtcbiAgICAgIGZ1bmNUb1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gICAgICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcbiAgICApO1xuXG4gICAgLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG4gICAgdmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyBjb250ZXh0LkJ1ZmZlciA6IHVuZGVmaW5lZCxcbiAgICAgICAgU3ltYm9sID0gY29udGV4dC5TeW1ib2wsXG4gICAgICAgIFVpbnQ4QXJyYXkgPSBjb250ZXh0LlVpbnQ4QXJyYXksXG4gICAgICAgIGFsbG9jVW5zYWZlID0gQnVmZmVyID8gQnVmZmVyLmFsbG9jVW5zYWZlIDogdW5kZWZpbmVkLFxuICAgICAgICBnZXRQcm90b3R5cGUgPSBvdmVyQXJnKE9iamVjdC5nZXRQcm90b3R5cGVPZiwgT2JqZWN0KSxcbiAgICAgICAgb2JqZWN0Q3JlYXRlID0gT2JqZWN0LmNyZWF0ZSxcbiAgICAgICAgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZSxcbiAgICAgICAgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2UsXG4gICAgICAgIHNwcmVhZGFibGVTeW1ib2wgPSBTeW1ib2wgPyBTeW1ib2wuaXNDb25jYXRTcHJlYWRhYmxlIDogdW5kZWZpbmVkLFxuICAgICAgICBzeW1JdGVyYXRvciA9IFN5bWJvbCA/IFN5bWJvbC5pdGVyYXRvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbiAgICB2YXIgZGVmaW5lUHJvcGVydHkgPSAoZnVuY3Rpb24oKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgZnVuYyA9IGdldE5hdGl2ZShPYmplY3QsICdkZWZpbmVQcm9wZXJ0eScpO1xuICAgICAgICBmdW5jKHt9LCAnJywge30pO1xuICAgICAgICByZXR1cm4gZnVuYztcbiAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgfSgpKTtcblxuICAgIC8qKiBNb2NrZWQgYnVpbHQtaW5zLiAqL1xuICAgIHZhciBjdHhDbGVhclRpbWVvdXQgPSBjb250ZXh0LmNsZWFyVGltZW91dCAhPT0gcm9vdC5jbGVhclRpbWVvdXQgJiYgY29udGV4dC5jbGVhclRpbWVvdXQsXG4gICAgICAgIGN0eE5vdyA9IERhdGUgJiYgRGF0ZS5ub3cgIT09IHJvb3QuRGF0ZS5ub3cgJiYgRGF0ZS5ub3csXG4gICAgICAgIGN0eFNldFRpbWVvdXQgPSBjb250ZXh0LnNldFRpbWVvdXQgIT09IHJvb3Quc2V0VGltZW91dCAmJiBjb250ZXh0LnNldFRpbWVvdXQ7XG5cbiAgICAvKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG4gICAgdmFyIG5hdGl2ZUNlaWwgPSBNYXRoLmNlaWwsXG4gICAgICAgIG5hdGl2ZUZsb29yID0gTWF0aC5mbG9vcixcbiAgICAgICAgbmF0aXZlR2V0U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsXG4gICAgICAgIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyID8gQnVmZmVyLmlzQnVmZmVyIDogdW5kZWZpbmVkLFxuICAgICAgICBuYXRpdmVJc0Zpbml0ZSA9IGNvbnRleHQuaXNGaW5pdGUsXG4gICAgICAgIG5hdGl2ZUpvaW4gPSBhcnJheVByb3RvLmpvaW4sXG4gICAgICAgIG5hdGl2ZUtleXMgPSBvdmVyQXJnKE9iamVjdC5rZXlzLCBPYmplY3QpLFxuICAgICAgICBuYXRpdmVNYXggPSBNYXRoLm1heCxcbiAgICAgICAgbmF0aXZlTWluID0gTWF0aC5taW4sXG4gICAgICAgIG5hdGl2ZU5vdyA9IERhdGUubm93LFxuICAgICAgICBuYXRpdmVQYXJzZUludCA9IGNvbnRleHQucGFyc2VJbnQsXG4gICAgICAgIG5hdGl2ZVJhbmRvbSA9IE1hdGgucmFuZG9tLFxuICAgICAgICBuYXRpdmVSZXZlcnNlID0gYXJyYXlQcm90by5yZXZlcnNlO1xuXG4gICAgLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xuICAgIHZhciBEYXRhVmlldyA9IGdldE5hdGl2ZShjb250ZXh0LCAnRGF0YVZpZXcnKSxcbiAgICAgICAgTWFwID0gZ2V0TmF0aXZlKGNvbnRleHQsICdNYXAnKSxcbiAgICAgICAgUHJvbWlzZSA9IGdldE5hdGl2ZShjb250ZXh0LCAnUHJvbWlzZScpLFxuICAgICAgICBTZXQgPSBnZXROYXRpdmUoY29udGV4dCwgJ1NldCcpLFxuICAgICAgICBXZWFrTWFwID0gZ2V0TmF0aXZlKGNvbnRleHQsICdXZWFrTWFwJyksXG4gICAgICAgIG5hdGl2ZUNyZWF0ZSA9IGdldE5hdGl2ZShPYmplY3QsICdjcmVhdGUnKTtcblxuICAgIC8qKiBVc2VkIHRvIHN0b3JlIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xuICAgIHZhciBtZXRhTWFwID0gV2Vha01hcCAmJiBuZXcgV2Vha01hcDtcblxuICAgIC8qKiBVc2VkIHRvIGxvb2t1cCB1bm1pbmlmaWVkIGZ1bmN0aW9uIG5hbWVzLiAqL1xuICAgIHZhciByZWFsTmFtZXMgPSB7fTtcblxuICAgIC8qKiBVc2VkIHRvIGRldGVjdCBtYXBzLCBzZXRzLCBhbmQgd2Vha21hcHMuICovXG4gICAgdmFyIGRhdGFWaWV3Q3RvclN0cmluZyA9IHRvU291cmNlKERhdGFWaWV3KSxcbiAgICAgICAgbWFwQ3RvclN0cmluZyA9IHRvU291cmNlKE1hcCksXG4gICAgICAgIHByb21pc2VDdG9yU3RyaW5nID0gdG9Tb3VyY2UoUHJvbWlzZSksXG4gICAgICAgIHNldEN0b3JTdHJpbmcgPSB0b1NvdXJjZShTZXQpLFxuICAgICAgICB3ZWFrTWFwQ3RvclN0cmluZyA9IHRvU291cmNlKFdlYWtNYXApO1xuXG4gICAgLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG4gICAgdmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgc3ltYm9sVmFsdWVPZiA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udmFsdWVPZiA6IHVuZGVmaW5lZCxcbiAgICAgICAgc3ltYm9sVG9TdHJpbmcgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnRvU3RyaW5nIDogdW5kZWZpbmVkO1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBsb2Rhc2hgIG9iamVjdCB3aGljaCB3cmFwcyBgdmFsdWVgIHRvIGVuYWJsZSBpbXBsaWNpdCBtZXRob2RcbiAgICAgKiBjaGFpbiBzZXF1ZW5jZXMuIE1ldGhvZHMgdGhhdCBvcGVyYXRlIG9uIGFuZCByZXR1cm4gYXJyYXlzLCBjb2xsZWN0aW9ucyxcbiAgICAgKiBhbmQgZnVuY3Rpb25zIGNhbiBiZSBjaGFpbmVkIHRvZ2V0aGVyLiBNZXRob2RzIHRoYXQgcmV0cmlldmUgYSBzaW5nbGUgdmFsdWVcbiAgICAgKiBvciBtYXkgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlIHdpbGwgYXV0b21hdGljYWxseSBlbmQgdGhlIGNoYWluIHNlcXVlbmNlXG4gICAgICogYW5kIHJldHVybiB0aGUgdW53cmFwcGVkIHZhbHVlLiBPdGhlcndpc2UsIHRoZSB2YWx1ZSBtdXN0IGJlIHVud3JhcHBlZFxuICAgICAqIHdpdGggYF8jdmFsdWVgLlxuICAgICAqXG4gICAgICogRXhwbGljaXQgY2hhaW4gc2VxdWVuY2VzLCB3aGljaCBtdXN0IGJlIHVud3JhcHBlZCB3aXRoIGBfI3ZhbHVlYCwgbWF5IGJlXG4gICAgICogZW5hYmxlZCB1c2luZyBgXy5jaGFpbmAuXG4gICAgICpcbiAgICAgKiBUaGUgZXhlY3V0aW9uIG9mIGNoYWluZWQgbWV0aG9kcyBpcyBsYXp5LCB0aGF0IGlzLCBpdCdzIGRlZmVycmVkIHVudGlsXG4gICAgICogYF8jdmFsdWVgIGlzIGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBMYXp5IGV2YWx1YXRpb24gYWxsb3dzIHNldmVyYWwgbWV0aG9kcyB0byBzdXBwb3J0IHNob3J0Y3V0IGZ1c2lvbi5cbiAgICAgKiBTaG9ydGN1dCBmdXNpb24gaXMgYW4gb3B0aW1pemF0aW9uIHRvIG1lcmdlIGl0ZXJhdGVlIGNhbGxzOyB0aGlzIGF2b2lkc1xuICAgICAqIHRoZSBjcmVhdGlvbiBvZiBpbnRlcm1lZGlhdGUgYXJyYXlzIGFuZCBjYW4gZ3JlYXRseSByZWR1Y2UgdGhlIG51bWJlciBvZlxuICAgICAqIGl0ZXJhdGVlIGV4ZWN1dGlvbnMuIFNlY3Rpb25zIG9mIGEgY2hhaW4gc2VxdWVuY2UgcXVhbGlmeSBmb3Igc2hvcnRjdXRcbiAgICAgKiBmdXNpb24gaWYgdGhlIHNlY3Rpb24gaXMgYXBwbGllZCB0byBhbiBhcnJheSBhbmQgaXRlcmF0ZWVzIGFjY2VwdCBvbmx5XG4gICAgICogb25lIGFyZ3VtZW50LiBUaGUgaGV1cmlzdGljIGZvciB3aGV0aGVyIGEgc2VjdGlvbiBxdWFsaWZpZXMgZm9yIHNob3J0Y3V0XG4gICAgICogZnVzaW9uIGlzIHN1YmplY3QgdG8gY2hhbmdlLlxuICAgICAqXG4gICAgICogQ2hhaW5pbmcgaXMgc3VwcG9ydGVkIGluIGN1c3RvbSBidWlsZHMgYXMgbG9uZyBhcyB0aGUgYF8jdmFsdWVgIG1ldGhvZCBpc1xuICAgICAqIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLlxuICAgICAqXG4gICAgICogSW4gYWRkaXRpb24gdG8gbG9kYXNoIG1ldGhvZHMsIHdyYXBwZXJzIGhhdmUgYEFycmF5YCBhbmQgYFN0cmluZ2AgbWV0aG9kcy5cbiAgICAgKlxuICAgICAqIFRoZSB3cmFwcGVyIGBBcnJheWAgbWV0aG9kcyBhcmU6XG4gICAgICogYGNvbmNhdGAsIGBqb2luYCwgYHBvcGAsIGBwdXNoYCwgYHNoaWZ0YCwgYHNvcnRgLCBgc3BsaWNlYCwgYW5kIGB1bnNoaWZ0YFxuICAgICAqXG4gICAgICogVGhlIHdyYXBwZXIgYFN0cmluZ2AgbWV0aG9kcyBhcmU6XG4gICAgICogYHJlcGxhY2VgIGFuZCBgc3BsaXRgXG4gICAgICpcbiAgICAgKiBUaGUgd3JhcHBlciBtZXRob2RzIHRoYXQgc3VwcG9ydCBzaG9ydGN1dCBmdXNpb24gYXJlOlxuICAgICAqIGBhdGAsIGBjb21wYWN0YCwgYGRyb3BgLCBgZHJvcFJpZ2h0YCwgYGRyb3BXaGlsZWAsIGBmaWx0ZXJgLCBgZmluZGAsXG4gICAgICogYGZpbmRMYXN0YCwgYGhlYWRgLCBgaW5pdGlhbGAsIGBsYXN0YCwgYG1hcGAsIGByZWplY3RgLCBgcmV2ZXJzZWAsIGBzbGljZWAsXG4gICAgICogYHRhaWxgLCBgdGFrZWAsIGB0YWtlUmlnaHRgLCBgdGFrZVJpZ2h0V2hpbGVgLCBgdGFrZVdoaWxlYCwgYW5kIGB0b0FycmF5YFxuICAgICAqXG4gICAgICogVGhlIGNoYWluYWJsZSB3cmFwcGVyIG1ldGhvZHMgYXJlOlxuICAgICAqIGBhZnRlcmAsIGBhcnlgLCBgYXNzaWduYCwgYGFzc2lnbkluYCwgYGFzc2lnbkluV2l0aGAsIGBhc3NpZ25XaXRoYCwgYGF0YCxcbiAgICAgKiBgYmVmb3JlYCwgYGJpbmRgLCBgYmluZEFsbGAsIGBiaW5kS2V5YCwgYGNhc3RBcnJheWAsIGBjaGFpbmAsIGBjaHVua2AsXG4gICAgICogYGNvbW1pdGAsIGBjb21wYWN0YCwgYGNvbmNhdGAsIGBjb25mb3Jtc2AsIGBjb25zdGFudGAsIGBjb3VudEJ5YCwgYGNyZWF0ZWAsXG4gICAgICogYGN1cnJ5YCwgYGRlYm91bmNlYCwgYGRlZmF1bHRzYCwgYGRlZmF1bHRzRGVlcGAsIGBkZWZlcmAsIGBkZWxheWAsXG4gICAgICogYGRpZmZlcmVuY2VgLCBgZGlmZmVyZW5jZUJ5YCwgYGRpZmZlcmVuY2VXaXRoYCwgYGRyb3BgLCBgZHJvcFJpZ2h0YCxcbiAgICAgKiBgZHJvcFJpZ2h0V2hpbGVgLCBgZHJvcFdoaWxlYCwgYGV4dGVuZGAsIGBleHRlbmRXaXRoYCwgYGZpbGxgLCBgZmlsdGVyYCxcbiAgICAgKiBgZmxhdE1hcGAsIGBmbGF0TWFwRGVlcGAsIGBmbGF0TWFwRGVwdGhgLCBgZmxhdHRlbmAsIGBmbGF0dGVuRGVlcGAsXG4gICAgICogYGZsYXR0ZW5EZXB0aGAsIGBmbGlwYCwgYGZsb3dgLCBgZmxvd1JpZ2h0YCwgYGZyb21QYWlyc2AsIGBmdW5jdGlvbnNgLFxuICAgICAqIGBmdW5jdGlvbnNJbmAsIGBncm91cEJ5YCwgYGluaXRpYWxgLCBgaW50ZXJzZWN0aW9uYCwgYGludGVyc2VjdGlvbkJ5YCxcbiAgICAgKiBgaW50ZXJzZWN0aW9uV2l0aGAsIGBpbnZlcnRgLCBgaW52ZXJ0QnlgLCBgaW52b2tlTWFwYCwgYGl0ZXJhdGVlYCwgYGtleUJ5YCxcbiAgICAgKiBga2V5c2AsIGBrZXlzSW5gLCBgbWFwYCwgYG1hcEtleXNgLCBgbWFwVmFsdWVzYCwgYG1hdGNoZXNgLCBgbWF0Y2hlc1Byb3BlcnR5YCxcbiAgICAgKiBgbWVtb2l6ZWAsIGBtZXJnZWAsIGBtZXJnZVdpdGhgLCBgbWV0aG9kYCwgYG1ldGhvZE9mYCwgYG1peGluYCwgYG5lZ2F0ZWAsXG4gICAgICogYG50aEFyZ2AsIGBvbWl0YCwgYG9taXRCeWAsIGBvbmNlYCwgYG9yZGVyQnlgLCBgb3ZlcmAsIGBvdmVyQXJnc2AsXG4gICAgICogYG92ZXJFdmVyeWAsIGBvdmVyU29tZWAsIGBwYXJ0aWFsYCwgYHBhcnRpYWxSaWdodGAsIGBwYXJ0aXRpb25gLCBgcGlja2AsXG4gICAgICogYHBpY2tCeWAsIGBwbGFudGAsIGBwcm9wZXJ0eWAsIGBwcm9wZXJ0eU9mYCwgYHB1bGxgLCBgcHVsbEFsbGAsIGBwdWxsQWxsQnlgLFxuICAgICAqIGBwdWxsQWxsV2l0aGAsIGBwdWxsQXRgLCBgcHVzaGAsIGByYW5nZWAsIGByYW5nZVJpZ2h0YCwgYHJlYXJnYCwgYHJlamVjdGAsXG4gICAgICogYHJlbW92ZWAsIGByZXN0YCwgYHJldmVyc2VgLCBgc2FtcGxlU2l6ZWAsIGBzZXRgLCBgc2V0V2l0aGAsIGBzaHVmZmxlYCxcbiAgICAgKiBgc2xpY2VgLCBgc29ydGAsIGBzb3J0QnlgLCBgc3BsaWNlYCwgYHNwcmVhZGAsIGB0YWlsYCwgYHRha2VgLCBgdGFrZVJpZ2h0YCxcbiAgICAgKiBgdGFrZVJpZ2h0V2hpbGVgLCBgdGFrZVdoaWxlYCwgYHRhcGAsIGB0aHJvdHRsZWAsIGB0aHJ1YCwgYHRvQXJyYXlgLFxuICAgICAqIGB0b1BhaXJzYCwgYHRvUGFpcnNJbmAsIGB0b1BhdGhgLCBgdG9QbGFpbk9iamVjdGAsIGB0cmFuc2Zvcm1gLCBgdW5hcnlgLFxuICAgICAqIGB1bmlvbmAsIGB1bmlvbkJ5YCwgYHVuaW9uV2l0aGAsIGB1bmlxYCwgYHVuaXFCeWAsIGB1bmlxV2l0aGAsIGB1bnNldGAsXG4gICAgICogYHVuc2hpZnRgLCBgdW56aXBgLCBgdW56aXBXaXRoYCwgYHVwZGF0ZWAsIGB1cGRhdGVXaXRoYCwgYHZhbHVlc2AsXG4gICAgICogYHZhbHVlc0luYCwgYHdpdGhvdXRgLCBgd3JhcGAsIGB4b3JgLCBgeG9yQnlgLCBgeG9yV2l0aGAsIGB6aXBgLFxuICAgICAqIGB6aXBPYmplY3RgLCBgemlwT2JqZWN0RGVlcGAsIGFuZCBgemlwV2l0aGBcbiAgICAgKlxuICAgICAqIFRoZSB3cmFwcGVyIG1ldGhvZHMgdGhhdCBhcmUgKipub3QqKiBjaGFpbmFibGUgYnkgZGVmYXVsdCBhcmU6XG4gICAgICogYGFkZGAsIGBhdHRlbXB0YCwgYGNhbWVsQ2FzZWAsIGBjYXBpdGFsaXplYCwgYGNlaWxgLCBgY2xhbXBgLCBgY2xvbmVgLFxuICAgICAqIGBjbG9uZURlZXBgLCBgY2xvbmVEZWVwV2l0aGAsIGBjbG9uZVdpdGhgLCBgY29uZm9ybXNUb2AsIGBkZWJ1cnJgLFxuICAgICAqIGBkZWZhdWx0VG9gLCBgZGl2aWRlYCwgYGVhY2hgLCBgZWFjaFJpZ2h0YCwgYGVuZHNXaXRoYCwgYGVxYCwgYGVzY2FwZWAsXG4gICAgICogYGVzY2FwZVJlZ0V4cGAsIGBldmVyeWAsIGBmaW5kYCwgYGZpbmRJbmRleGAsIGBmaW5kS2V5YCwgYGZpbmRMYXN0YCxcbiAgICAgKiBgZmluZExhc3RJbmRleGAsIGBmaW5kTGFzdEtleWAsIGBmaXJzdGAsIGBmbG9vcmAsIGBmb3JFYWNoYCwgYGZvckVhY2hSaWdodGAsXG4gICAgICogYGZvckluYCwgYGZvckluUmlnaHRgLCBgZm9yT3duYCwgYGZvck93blJpZ2h0YCwgYGdldGAsIGBndGAsIGBndGVgLCBgaGFzYCxcbiAgICAgKiBgaGFzSW5gLCBgaGVhZGAsIGBpZGVudGl0eWAsIGBpbmNsdWRlc2AsIGBpbmRleE9mYCwgYGluUmFuZ2VgLCBgaW52b2tlYCxcbiAgICAgKiBgaXNBcmd1bWVudHNgLCBgaXNBcnJheWAsIGBpc0FycmF5QnVmZmVyYCwgYGlzQXJyYXlMaWtlYCwgYGlzQXJyYXlMaWtlT2JqZWN0YCxcbiAgICAgKiBgaXNCb29sZWFuYCwgYGlzQnVmZmVyYCwgYGlzRGF0ZWAsIGBpc0VsZW1lbnRgLCBgaXNFbXB0eWAsIGBpc0VxdWFsYCxcbiAgICAgKiBgaXNFcXVhbFdpdGhgLCBgaXNFcnJvcmAsIGBpc0Zpbml0ZWAsIGBpc0Z1bmN0aW9uYCwgYGlzSW50ZWdlcmAsIGBpc0xlbmd0aGAsXG4gICAgICogYGlzTWFwYCwgYGlzTWF0Y2hgLCBgaXNNYXRjaFdpdGhgLCBgaXNOYU5gLCBgaXNOYXRpdmVgLCBgaXNOaWxgLCBgaXNOdWxsYCxcbiAgICAgKiBgaXNOdW1iZXJgLCBgaXNPYmplY3RgLCBgaXNPYmplY3RMaWtlYCwgYGlzUGxhaW5PYmplY3RgLCBgaXNSZWdFeHBgLFxuICAgICAqIGBpc1NhZmVJbnRlZ2VyYCwgYGlzU2V0YCwgYGlzU3RyaW5nYCwgYGlzVW5kZWZpbmVkYCwgYGlzVHlwZWRBcnJheWAsXG4gICAgICogYGlzV2Vha01hcGAsIGBpc1dlYWtTZXRgLCBgam9pbmAsIGBrZWJhYkNhc2VgLCBgbGFzdGAsIGBsYXN0SW5kZXhPZmAsXG4gICAgICogYGxvd2VyQ2FzZWAsIGBsb3dlckZpcnN0YCwgYGx0YCwgYGx0ZWAsIGBtYXhgLCBgbWF4QnlgLCBgbWVhbmAsIGBtZWFuQnlgLFxuICAgICAqIGBtaW5gLCBgbWluQnlgLCBgbXVsdGlwbHlgLCBgbm9Db25mbGljdGAsIGBub29wYCwgYG5vd2AsIGBudGhgLCBgcGFkYCxcbiAgICAgKiBgcGFkRW5kYCwgYHBhZFN0YXJ0YCwgYHBhcnNlSW50YCwgYHBvcGAsIGByYW5kb21gLCBgcmVkdWNlYCwgYHJlZHVjZVJpZ2h0YCxcbiAgICAgKiBgcmVwZWF0YCwgYHJlc3VsdGAsIGByb3VuZGAsIGBydW5JbkNvbnRleHRgLCBgc2FtcGxlYCwgYHNoaWZ0YCwgYHNpemVgLFxuICAgICAqIGBzbmFrZUNhc2VgLCBgc29tZWAsIGBzb3J0ZWRJbmRleGAsIGBzb3J0ZWRJbmRleEJ5YCwgYHNvcnRlZExhc3RJbmRleGAsXG4gICAgICogYHNvcnRlZExhc3RJbmRleEJ5YCwgYHN0YXJ0Q2FzZWAsIGBzdGFydHNXaXRoYCwgYHN0dWJBcnJheWAsIGBzdHViRmFsc2VgLFxuICAgICAqIGBzdHViT2JqZWN0YCwgYHN0dWJTdHJpbmdgLCBgc3R1YlRydWVgLCBgc3VidHJhY3RgLCBgc3VtYCwgYHN1bUJ5YCxcbiAgICAgKiBgdGVtcGxhdGVgLCBgdGltZXNgLCBgdG9GaW5pdGVgLCBgdG9JbnRlZ2VyYCwgYHRvSlNPTmAsIGB0b0xlbmd0aGAsXG4gICAgICogYHRvTG93ZXJgLCBgdG9OdW1iZXJgLCBgdG9TYWZlSW50ZWdlcmAsIGB0b1N0cmluZ2AsIGB0b1VwcGVyYCwgYHRyaW1gLFxuICAgICAqIGB0cmltRW5kYCwgYHRyaW1TdGFydGAsIGB0cnVuY2F0ZWAsIGB1bmVzY2FwZWAsIGB1bmlxdWVJZGAsIGB1cHBlckNhc2VgLFxuICAgICAqIGB1cHBlckZpcnN0YCwgYHZhbHVlYCwgYW5kIGB3b3Jkc2BcbiAgICAgKlxuICAgICAqIEBuYW1lIF9cbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKiBAY2F0ZWdvcnkgU2VxXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gd3JhcCBpbiBhIGBsb2Rhc2hgIGluc3RhbmNlLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBzcXVhcmUobikge1xuICAgICAqICAgcmV0dXJuIG4gKiBuO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciB3cmFwcGVkID0gXyhbMSwgMiwgM10pO1xuICAgICAqXG4gICAgICogLy8gUmV0dXJucyBhbiB1bndyYXBwZWQgdmFsdWUuXG4gICAgICogd3JhcHBlZC5yZWR1Y2UoXy5hZGQpO1xuICAgICAqIC8vID0+IDZcbiAgICAgKlxuICAgICAqIC8vIFJldHVybnMgYSB3cmFwcGVkIHZhbHVlLlxuICAgICAqIHZhciBzcXVhcmVzID0gd3JhcHBlZC5tYXAoc3F1YXJlKTtcbiAgICAgKlxuICAgICAqIF8uaXNBcnJheShzcXVhcmVzKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5KHNxdWFyZXMudmFsdWUoKSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxvZGFzaCh2YWx1ZSkge1xuICAgICAgaWYgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgIWlzQXJyYXkodmFsdWUpICYmICEodmFsdWUgaW5zdGFuY2VvZiBMYXp5V3JhcHBlcikpIHtcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTG9kYXNoV3JhcHBlcikge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ19fd3JhcHBlZF9fJykpIHtcbiAgICAgICAgICByZXR1cm4gd3JhcHBlckNsb25lKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBMb2Rhc2hXcmFwcGVyKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jcmVhdGVgIHdpdGhvdXQgc3VwcG9ydCBmb3IgYXNzaWduaW5nXG4gICAgICogcHJvcGVydGllcyB0byB0aGUgY3JlYXRlZCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm90byBUaGUgb2JqZWN0IHRvIGluaGVyaXQgZnJvbS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICAgICAqL1xuICAgIHZhciBiYXNlQ3JlYXRlID0gKGZ1bmN0aW9uKCkge1xuICAgICAgZnVuY3Rpb24gb2JqZWN0KCkge31cbiAgICAgIHJldHVybiBmdW5jdGlvbihwcm90bykge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KHByb3RvKSkge1xuICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob2JqZWN0Q3JlYXRlKSB7XG4gICAgICAgICAgcmV0dXJuIG9iamVjdENyZWF0ZShwcm90byk7XG4gICAgICAgIH1cbiAgICAgICAgb2JqZWN0LnByb3RvdHlwZSA9IHByb3RvO1xuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IG9iamVjdDtcbiAgICAgICAgb2JqZWN0LnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH07XG4gICAgfSgpKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBmdW5jdGlvbiB3aG9zZSBwcm90b3R5cGUgY2hhaW4gc2VxdWVuY2Ugd3JhcHBlcnMgaW5oZXJpdCBmcm9tLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlTG9kYXNoKCkge1xuICAgICAgLy8gTm8gb3BlcmF0aW9uIHBlcmZvcm1lZC5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBjb25zdHJ1Y3RvciBmb3IgY3JlYXRpbmcgYGxvZGFzaGAgd3JhcHBlciBvYmplY3RzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB3cmFwLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NoYWluQWxsXSBFbmFibGUgZXhwbGljaXQgbWV0aG9kIGNoYWluIHNlcXVlbmNlcy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBMb2Rhc2hXcmFwcGVyKHZhbHVlLCBjaGFpbkFsbCkge1xuICAgICAgdGhpcy5fX3dyYXBwZWRfXyA9IHZhbHVlO1xuICAgICAgdGhpcy5fX2FjdGlvbnNfXyA9IFtdO1xuICAgICAgdGhpcy5fX2NoYWluX18gPSAhIWNoYWluQWxsO1xuICAgICAgdGhpcy5fX2luZGV4X18gPSAwO1xuICAgICAgdGhpcy5fX3ZhbHVlc19fID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIHRoZSB0ZW1wbGF0ZSBkZWxpbWl0ZXJzIHVzZWQgYnkgbG9kYXNoIGFyZSBsaWtlIHRob3NlIGluXG4gICAgICogZW1iZWRkZWQgUnVieSAoRVJCKSBhcyB3ZWxsIGFzIEVTMjAxNSB0ZW1wbGF0ZSBzdHJpbmdzLiBDaGFuZ2UgdGhlXG4gICAgICogZm9sbG93aW5nIHRlbXBsYXRlIHNldHRpbmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHR5cGUge09iamVjdH1cbiAgICAgKi9cbiAgICBsb2Rhc2gudGVtcGxhdGVTZXR0aW5ncyA9IHtcblxuICAgICAgLyoqXG4gICAgICAgKiBVc2VkIHRvIGRldGVjdCBgZGF0YWAgcHJvcGVydHkgdmFsdWVzIHRvIGJlIEhUTUwtZXNjYXBlZC5cbiAgICAgICAqXG4gICAgICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAgICAgKiBAdHlwZSB7UmVnRXhwfVxuICAgICAgICovXG4gICAgICAnZXNjYXBlJzogcmVFc2NhcGUsXG5cbiAgICAgIC8qKlxuICAgICAgICogVXNlZCB0byBkZXRlY3QgY29kZSB0byBiZSBldmFsdWF0ZWQuXG4gICAgICAgKlxuICAgICAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5nc1xuICAgICAgICogQHR5cGUge1JlZ0V4cH1cbiAgICAgICAqL1xuICAgICAgJ2V2YWx1YXRlJzogcmVFdmFsdWF0ZSxcblxuICAgICAgLyoqXG4gICAgICAgKiBVc2VkIHRvIGRldGVjdCBgZGF0YWAgcHJvcGVydHkgdmFsdWVzIHRvIGluamVjdC5cbiAgICAgICAqXG4gICAgICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAgICAgKiBAdHlwZSB7UmVnRXhwfVxuICAgICAgICovXG4gICAgICAnaW50ZXJwb2xhdGUnOiByZUludGVycG9sYXRlLFxuXG4gICAgICAvKipcbiAgICAgICAqIFVzZWQgdG8gcmVmZXJlbmNlIHRoZSBkYXRhIG9iamVjdCBpbiB0aGUgdGVtcGxhdGUgdGV4dC5cbiAgICAgICAqXG4gICAgICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAgICovXG4gICAgICAndmFyaWFibGUnOiAnJyxcblxuICAgICAgLyoqXG4gICAgICAgKiBVc2VkIHRvIGltcG9ydCB2YXJpYWJsZXMgaW50byB0aGUgY29tcGlsZWQgdGVtcGxhdGUuXG4gICAgICAgKlxuICAgICAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5nc1xuICAgICAgICogQHR5cGUge09iamVjdH1cbiAgICAgICAqL1xuICAgICAgJ2ltcG9ydHMnOiB7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBgbG9kYXNoYCBmdW5jdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5ncy5pbXBvcnRzXG4gICAgICAgICAqIEB0eXBlIHtGdW5jdGlvbn1cbiAgICAgICAgICovXG4gICAgICAgICdfJzogbG9kYXNoXG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIEVuc3VyZSB3cmFwcGVycyBhcmUgaW5zdGFuY2VzIG9mIGBiYXNlTG9kYXNoYC5cbiAgICBsb2Rhc2gucHJvdG90eXBlID0gYmFzZUxvZGFzaC5wcm90b3R5cGU7XG4gICAgbG9kYXNoLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGxvZGFzaDtcblxuICAgIExvZGFzaFdyYXBwZXIucHJvdG90eXBlID0gYmFzZUNyZWF0ZShiYXNlTG9kYXNoLnByb3RvdHlwZSk7XG4gICAgTG9kYXNoV3JhcHBlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2Rhc2hXcmFwcGVyO1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGxhenkgd3JhcHBlciBvYmplY3Qgd2hpY2ggd3JhcHMgYHZhbHVlYCB0byBlbmFibGUgbGF6eSBldmFsdWF0aW9uLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB3cmFwLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIExhenlXcmFwcGVyKHZhbHVlKSB7XG4gICAgICB0aGlzLl9fd3JhcHBlZF9fID0gdmFsdWU7XG4gICAgICB0aGlzLl9fYWN0aW9uc19fID0gW107XG4gICAgICB0aGlzLl9fZGlyX18gPSAxO1xuICAgICAgdGhpcy5fX2ZpbHRlcmVkX18gPSBmYWxzZTtcbiAgICAgIHRoaXMuX19pdGVyYXRlZXNfXyA9IFtdO1xuICAgICAgdGhpcy5fX3Rha2VDb3VudF9fID0gTUFYX0FSUkFZX0xFTkdUSDtcbiAgICAgIHRoaXMuX192aWV3c19fID0gW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoZSBsYXp5IHdyYXBwZXIgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBjbG9uZVxuICAgICAqIEBtZW1iZXJPZiBMYXp5V3JhcHBlclxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCBgTGF6eVdyYXBwZXJgIG9iamVjdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsYXp5Q2xvbmUoKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbmV3IExhenlXcmFwcGVyKHRoaXMuX193cmFwcGVkX18pO1xuICAgICAgcmVzdWx0Ll9fYWN0aW9uc19fID0gY29weUFycmF5KHRoaXMuX19hY3Rpb25zX18pO1xuICAgICAgcmVzdWx0Ll9fZGlyX18gPSB0aGlzLl9fZGlyX187XG4gICAgICByZXN1bHQuX19maWx0ZXJlZF9fID0gdGhpcy5fX2ZpbHRlcmVkX187XG4gICAgICByZXN1bHQuX19pdGVyYXRlZXNfXyA9IGNvcHlBcnJheSh0aGlzLl9faXRlcmF0ZWVzX18pO1xuICAgICAgcmVzdWx0Ll9fdGFrZUNvdW50X18gPSB0aGlzLl9fdGFrZUNvdW50X187XG4gICAgICByZXN1bHQuX192aWV3c19fID0gY29weUFycmF5KHRoaXMuX192aWV3c19fKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV2ZXJzZXMgdGhlIGRpcmVjdGlvbiBvZiBsYXp5IGl0ZXJhdGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgcmV2ZXJzZVxuICAgICAqIEBtZW1iZXJPZiBMYXp5V3JhcHBlclxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyByZXZlcnNlZCBgTGF6eVdyYXBwZXJgIG9iamVjdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsYXp5UmV2ZXJzZSgpIHtcbiAgICAgIGlmICh0aGlzLl9fZmlsdGVyZWRfXykge1xuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IExhenlXcmFwcGVyKHRoaXMpO1xuICAgICAgICByZXN1bHQuX19kaXJfXyA9IC0xO1xuICAgICAgICByZXN1bHQuX19maWx0ZXJlZF9fID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IHRoaXMuY2xvbmUoKTtcbiAgICAgICAgcmVzdWx0Ll9fZGlyX18gKj0gLTE7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4dHJhY3RzIHRoZSB1bndyYXBwZWQgdmFsdWUgZnJvbSBpdHMgbGF6eSB3cmFwcGVyLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSB2YWx1ZVxuICAgICAqIEBtZW1iZXJPZiBMYXp5V3JhcHBlclxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSB1bndyYXBwZWQgdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gbGF6eVZhbHVlKCkge1xuICAgICAgdmFyIGFycmF5ID0gdGhpcy5fX3dyYXBwZWRfXy52YWx1ZSgpLFxuICAgICAgICAgIGRpciA9IHRoaXMuX19kaXJfXyxcbiAgICAgICAgICBpc0FyciA9IGlzQXJyYXkoYXJyYXkpLFxuICAgICAgICAgIGlzUmlnaHQgPSBkaXIgPCAwLFxuICAgICAgICAgIGFyckxlbmd0aCA9IGlzQXJyID8gYXJyYXkubGVuZ3RoIDogMCxcbiAgICAgICAgICB2aWV3ID0gZ2V0VmlldygwLCBhcnJMZW5ndGgsIHRoaXMuX192aWV3c19fKSxcbiAgICAgICAgICBzdGFydCA9IHZpZXcuc3RhcnQsXG4gICAgICAgICAgZW5kID0gdmlldy5lbmQsXG4gICAgICAgICAgbGVuZ3RoID0gZW5kIC0gc3RhcnQsXG4gICAgICAgICAgaW5kZXggPSBpc1JpZ2h0ID8gZW5kIDogKHN0YXJ0IC0gMSksXG4gICAgICAgICAgaXRlcmF0ZWVzID0gdGhpcy5fX2l0ZXJhdGVlc19fLFxuICAgICAgICAgIGl0ZXJMZW5ndGggPSBpdGVyYXRlZXMubGVuZ3RoLFxuICAgICAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgICAgICB0YWtlQ291bnQgPSBuYXRpdmVNaW4obGVuZ3RoLCB0aGlzLl9fdGFrZUNvdW50X18pO1xuXG4gICAgICBpZiAoIWlzQXJyIHx8ICghaXNSaWdodCAmJiBhcnJMZW5ndGggPT0gbGVuZ3RoICYmIHRha2VDb3VudCA9PSBsZW5ndGgpKSB7XG4gICAgICAgIHJldHVybiBiYXNlV3JhcHBlclZhbHVlKGFycmF5LCB0aGlzLl9fYWN0aW9uc19fKTtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHQgPSBbXTtcblxuICAgICAgb3V0ZXI6XG4gICAgICB3aGlsZSAobGVuZ3RoLS0gJiYgcmVzSW5kZXggPCB0YWtlQ291bnQpIHtcbiAgICAgICAgaW5kZXggKz0gZGlyO1xuXG4gICAgICAgIHZhciBpdGVySW5kZXggPSAtMSxcbiAgICAgICAgICAgIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgICAgIHdoaWxlICgrK2l0ZXJJbmRleCA8IGl0ZXJMZW5ndGgpIHtcbiAgICAgICAgICB2YXIgZGF0YSA9IGl0ZXJhdGVlc1tpdGVySW5kZXhdLFxuICAgICAgICAgICAgICBpdGVyYXRlZSA9IGRhdGEuaXRlcmF0ZWUsXG4gICAgICAgICAgICAgIHR5cGUgPSBkYXRhLnR5cGUsXG4gICAgICAgICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUodmFsdWUpO1xuXG4gICAgICAgICAgaWYgKHR5cGUgPT0gTEFaWV9NQVBfRkxBRykge1xuICAgICAgICAgICAgdmFsdWUgPSBjb21wdXRlZDtcbiAgICAgICAgICB9IGVsc2UgaWYgKCFjb21wdXRlZCkge1xuICAgICAgICAgICAgaWYgKHR5cGUgPT0gTEFaWV9GSUxURVJfRkxBRykge1xuICAgICAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGJyZWFrIG91dGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLy8gRW5zdXJlIGBMYXp5V3JhcHBlcmAgaXMgYW4gaW5zdGFuY2Ugb2YgYGJhc2VMb2Rhc2hgLlxuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZSA9IGJhc2VDcmVhdGUoYmFzZUxvZGFzaC5wcm90b3R5cGUpO1xuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExhenlXcmFwcGVyO1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGhhc2ggb2JqZWN0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBIYXNoKGVudHJpZXMpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgaGFzaC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgY2xlYXJcbiAgICAgKiBAbWVtYmVyT2YgSGFzaFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGhhc2hDbGVhcigpIHtcbiAgICAgIHRoaXMuX19kYXRhX18gPSBuYXRpdmVDcmVhdGUgPyBuYXRpdmVDcmVhdGUobnVsbCkgOiB7fTtcbiAgICAgIHRoaXMuc2l6ZSA9IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGhhc2guXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGRlbGV0ZVxuICAgICAqIEBtZW1iZXJPZiBIYXNoXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBoYXNoRGVsZXRlKGtleSkge1xuICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuaGFzKGtleSkgJiYgZGVsZXRlIHRoaXMuX19kYXRhX19ba2V5XTtcbiAgICAgIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgaGFzaCB2YWx1ZSBmb3IgYGtleWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGdldFxuICAgICAqIEBtZW1iZXJPZiBIYXNoXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGhhc2hHZXQoa2V5KSB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gICAgICBpZiAobmF0aXZlQ3JlYXRlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBkYXRhW2tleV07XG4gICAgICAgIHJldHVybiByZXN1bHQgPT09IEhBU0hfVU5ERUZJTkVEID8gdW5kZWZpbmVkIDogcmVzdWx0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSA/IGRhdGFba2V5XSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYSBoYXNoIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGhhc1xuICAgICAqIEBtZW1iZXJPZiBIYXNoXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGhhc2hIYXMoa2V5KSB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gICAgICByZXR1cm4gbmF0aXZlQ3JlYXRlID8gKGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkKSA6IGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBoYXNoIGBrZXlgIHRvIGB2YWx1ZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIHNldFxuICAgICAqIEBtZW1iZXJPZiBIYXNoXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGhhc2ggaW5zdGFuY2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaGFzaFNldChrZXksIHZhbHVlKSB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gICAgICB0aGlzLnNpemUgKz0gdGhpcy5oYXMoa2V5KSA/IDAgOiAxO1xuICAgICAgZGF0YVtrZXldID0gKG5hdGl2ZUNyZWF0ZSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSA/IEhBU0hfVU5ERUZJTkVEIDogdmFsdWU7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBBZGQgbWV0aG9kcyB0byBgSGFzaGAuXG4gICAgSGFzaC5wcm90b3R5cGUuY2xlYXIgPSBoYXNoQ2xlYXI7XG4gICAgSGFzaC5wcm90b3R5cGVbJ2RlbGV0ZSddID0gaGFzaERlbGV0ZTtcbiAgICBIYXNoLnByb3RvdHlwZS5nZXQgPSBoYXNoR2V0O1xuICAgIEhhc2gucHJvdG90eXBlLmhhcyA9IGhhc2hIYXM7XG4gICAgSGFzaC5wcm90b3R5cGUuc2V0ID0gaGFzaFNldDtcblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gbGlzdCBjYWNoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIExpc3RDYWNoZShlbnRyaWVzKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgICAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGNsZWFyXG4gICAgICogQG1lbWJlck9mIExpc3RDYWNoZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxpc3RDYWNoZUNsZWFyKCkge1xuICAgICAgdGhpcy5fX2RhdGFfXyA9IFtdO1xuICAgICAgdGhpcy5zaXplID0gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgZGVsZXRlXG4gICAgICogQG1lbWJlck9mIExpc3RDYWNoZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsaXN0Q2FjaGVEZWxldGUoa2V5KSB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xuICAgICAgaWYgKGluZGV4ID09IGxhc3RJbmRleCkge1xuICAgICAgICBkYXRhLnBvcCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3BsaWNlLmNhbGwoZGF0YSwgaW5kZXgsIDEpO1xuICAgICAgfVxuICAgICAgLS10aGlzLnNpemU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgZ2V0XG4gICAgICogQG1lbWJlck9mIExpc3RDYWNoZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsaXN0Q2FjaGVHZXQoa2V5KSB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICAgICAgcmV0dXJuIGluZGV4IDwgMCA/IHVuZGVmaW5lZCA6IGRhdGFbaW5kZXhdWzFdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBhIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgaGFzXG4gICAgICogQG1lbWJlck9mIExpc3RDYWNoZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsaXN0Q2FjaGVIYXMoa2V5KSB7XG4gICAgICByZXR1cm4gYXNzb2NJbmRleE9mKHRoaXMuX19kYXRhX18sIGtleSkgPiAtMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIHNldFxuICAgICAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbGlzdCBjYWNoZSBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgKyt0aGlzLnNpemU7XG4gICAgICAgIGRhdGEucHVzaChba2V5LCB2YWx1ZV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YVtpbmRleF1bMV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIEFkZCBtZXRob2RzIHRvIGBMaXN0Q2FjaGVgLlxuICAgIExpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBsaXN0Q2FjaGVDbGVhcjtcbiAgICBMaXN0Q2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IGxpc3RDYWNoZURlbGV0ZTtcbiAgICBMaXN0Q2FjaGUucHJvdG90eXBlLmdldCA9IGxpc3RDYWNoZUdldDtcbiAgICBMaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IGxpc3RDYWNoZUhhcztcbiAgICBMaXN0Q2FjaGUucHJvdG90eXBlLnNldCA9IGxpc3RDYWNoZVNldDtcblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBtYXAgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gTWFwQ2FjaGUoZW50cmllcykge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICAgICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGNsZWFyXG4gICAgICogQG1lbWJlck9mIE1hcENhY2hlXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWFwQ2FjaGVDbGVhcigpIHtcbiAgICAgIHRoaXMuc2l6ZSA9IDA7XG4gICAgICB0aGlzLl9fZGF0YV9fID0ge1xuICAgICAgICAnaGFzaCc6IG5ldyBIYXNoLFxuICAgICAgICAnbWFwJzogbmV3IChNYXAgfHwgTGlzdENhY2hlKSxcbiAgICAgICAgJ3N0cmluZyc6IG5ldyBIYXNoXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGRlbGV0ZVxuICAgICAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXBDYWNoZURlbGV0ZShrZXkpIHtcbiAgICAgIHZhciByZXN1bHQgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XG4gICAgICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG1hcCB2YWx1ZSBmb3IgYGtleWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGdldFxuICAgICAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXBDYWNoZUdldChrZXkpIHtcbiAgICAgIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuZ2V0KGtleSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGEgbWFwIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGhhc1xuICAgICAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXBDYWNoZUhhcyhrZXkpIHtcbiAgICAgIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuaGFzKGtleSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbWFwIGBrZXlgIHRvIGB2YWx1ZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIHNldFxuICAgICAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWFwQ2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgdmFyIGRhdGEgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSksXG4gICAgICAgICAgc2l6ZSA9IGRhdGEuc2l6ZTtcblxuICAgICAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICB0aGlzLnNpemUgKz0gZGF0YS5zaXplID09IHNpemUgPyAwIDogMTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXG4gICAgTWFwQ2FjaGUucHJvdG90eXBlLmNsZWFyID0gbWFwQ2FjaGVDbGVhcjtcbiAgICBNYXBDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbWFwQ2FjaGVEZWxldGU7XG4gICAgTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcENhY2hlR2V0O1xuICAgIE1hcENhY2hlLnByb3RvdHlwZS5oYXMgPSBtYXBDYWNoZUhhcztcbiAgICBNYXBDYWNoZS5wcm90b3R5cGUuc2V0ID0gbWFwQ2FjaGVTZXQ7XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIHVuaXF1ZSB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gY2FjaGUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gU2V0Q2FjaGUodmFsdWVzKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSB2YWx1ZXMgPT0gbnVsbCA/IDAgOiB2YWx1ZXMubGVuZ3RoO1xuXG4gICAgICB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlO1xuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdGhpcy5hZGQodmFsdWVzW2luZGV4XSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBgdmFsdWVgIHRvIHRoZSBhcnJheSBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgYWRkXG4gICAgICogQG1lbWJlck9mIFNldENhY2hlXG4gICAgICogQGFsaWFzIHB1c2hcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjYWNoZS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjYWNoZSBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzZXRDYWNoZUFkZCh2YWx1ZSkge1xuICAgICAgdGhpcy5fX2RhdGFfXy5zZXQodmFsdWUsIEhBU0hfVU5ERUZJTkVEKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGluIHRoZSBhcnJheSBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgaGFzXG4gICAgICogQG1lbWJlck9mIFNldENhY2hlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2V0Q2FjaGVIYXModmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIG1ldGhvZHMgdG8gYFNldENhY2hlYC5cbiAgICBTZXRDYWNoZS5wcm90b3R5cGUuYWRkID0gU2V0Q2FjaGUucHJvdG90eXBlLnB1c2ggPSBzZXRDYWNoZUFkZDtcbiAgICBTZXRDYWNoZS5wcm90b3R5cGUuaGFzID0gc2V0Q2FjaGVIYXM7XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc3RhY2sgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gU3RhY2soZW50cmllcykge1xuICAgICAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IExpc3RDYWNoZShlbnRyaWVzKTtcbiAgICAgIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBzdGFjay5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgY2xlYXJcbiAgICAgKiBAbWVtYmVyT2YgU3RhY2tcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdGFja0NsZWFyKCkge1xuICAgICAgdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGU7XG4gICAgICB0aGlzLnNpemUgPSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBzdGFjay5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgZGVsZXRlXG4gICAgICogQG1lbWJlck9mIFN0YWNrXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN0YWNrRGVsZXRlKGtleSkge1xuICAgICAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgICAgIHJlc3VsdCA9IGRhdGFbJ2RlbGV0ZSddKGtleSk7XG5cbiAgICAgIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgc3RhY2sgdmFsdWUgZm9yIGBrZXlgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBnZXRcbiAgICAgKiBAbWVtYmVyT2YgU3RhY2tcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3RhY2tHZXQoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoa2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYSBzdGFjayB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBoYXNcbiAgICAgKiBAbWVtYmVyT2YgU3RhY2tcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3RhY2tIYXMoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoa2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdGFjayBga2V5YCB0byBgdmFsdWVgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBzZXRcbiAgICAgKiBAbWVtYmVyT2YgU3RhY2tcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgc3RhY2sgY2FjaGUgaW5zdGFuY2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3RhY2tTZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBMaXN0Q2FjaGUpIHtcbiAgICAgICAgdmFyIHBhaXJzID0gZGF0YS5fX2RhdGFfXztcbiAgICAgICAgaWYgKCFNYXAgfHwgKHBhaXJzLmxlbmd0aCA8IExBUkdFX0FSUkFZX1NJWkUgLSAxKSkge1xuICAgICAgICAgIHBhaXJzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgICAgICAgICB0aGlzLnNpemUgPSArK2RhdGEuc2l6ZTtcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZShwYWlycyk7XG4gICAgICB9XG4gICAgICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgICAgIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIEFkZCBtZXRob2RzIHRvIGBTdGFja2AuXG4gICAgU3RhY2sucHJvdG90eXBlLmNsZWFyID0gc3RhY2tDbGVhcjtcbiAgICBTdGFjay5wcm90b3R5cGVbJ2RlbGV0ZSddID0gc3RhY2tEZWxldGU7XG4gICAgU3RhY2sucHJvdG90eXBlLmdldCA9IHN0YWNrR2V0O1xuICAgIFN0YWNrLnByb3RvdHlwZS5oYXMgPSBzdGFja0hhcztcbiAgICBTdGFjay5wcm90b3R5cGUuc2V0ID0gc3RhY2tTZXQ7XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBhcnJheS1saWtlIGB2YWx1ZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5oZXJpdGVkIFNwZWNpZnkgcmV0dXJuaW5nIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lcy5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsIGluaGVyaXRlZCkge1xuICAgICAgdmFyIGlzQXJyID0gaXNBcnJheSh2YWx1ZSksXG4gICAgICAgICAgaXNBcmcgPSAhaXNBcnIgJiYgaXNBcmd1bWVudHModmFsdWUpLFxuICAgICAgICAgIGlzQnVmZiA9ICFpc0FyciAmJiAhaXNBcmcgJiYgaXNCdWZmZXIodmFsdWUpLFxuICAgICAgICAgIGlzVHlwZSA9ICFpc0FyciAmJiAhaXNBcmcgJiYgIWlzQnVmZiAmJiBpc1R5cGVkQXJyYXkodmFsdWUpLFxuICAgICAgICAgIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSxcbiAgICAgICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IGJhc2VUaW1lcyh2YWx1ZS5sZW5ndGgsIFN0cmluZykgOiBbXSxcbiAgICAgICAgICBsZW5ndGggPSByZXN1bHQubGVuZ3RoO1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgaWYgKChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkgJiZcbiAgICAgICAgICAgICEoc2tpcEluZGV4ZXMgJiYgKFxuICAgICAgICAgICAgICAgLy8gU2FmYXJpIDkgaGFzIGVudW1lcmFibGUgYGFyZ3VtZW50cy5sZW5ndGhgIGluIHN0cmljdCBtb2RlLlxuICAgICAgICAgICAgICAga2V5ID09ICdsZW5ndGgnIHx8XG4gICAgICAgICAgICAgICAvLyBOb2RlLmpzIDAuMTAgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gYnVmZmVycy5cbiAgICAgICAgICAgICAgIChpc0J1ZmYgJiYgKGtleSA9PSAnb2Zmc2V0JyB8fCBrZXkgPT0gJ3BhcmVudCcpKSB8fFxuICAgICAgICAgICAgICAgLy8gUGhhbnRvbUpTIDIgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gdHlwZWQgYXJyYXlzLlxuICAgICAgICAgICAgICAgKGlzVHlwZSAmJiAoa2V5ID09ICdidWZmZXInIHx8IGtleSA9PSAnYnl0ZUxlbmd0aCcgfHwga2V5ID09ICdieXRlT2Zmc2V0JykpIHx8XG4gICAgICAgICAgICAgICAvLyBTa2lwIGluZGV4IHByb3BlcnRpZXMuXG4gICAgICAgICAgICAgICBpc0luZGV4KGtleSwgbGVuZ3RoKVxuICAgICAgICAgICAgKSkpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5zYW1wbGVgIGZvciBhcnJheXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzYW1wbGUuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJhbmRvbSBlbGVtZW50LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFycmF5U2FtcGxlKGFycmF5KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICAgICAgcmV0dXJuIGxlbmd0aCA/IGFycmF5W2Jhc2VSYW5kb20oMCwgbGVuZ3RoIC0gMSldIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5zYW1wbGVTaXplYCBmb3IgYXJyYXlzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc2FtcGxlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gc2FtcGxlLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcmFuZG9tIGVsZW1lbnRzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFycmF5U2FtcGxlU2l6ZShhcnJheSwgbikge1xuICAgICAgcmV0dXJuIHNodWZmbGVTZWxmKGNvcHlBcnJheShhcnJheSksIGJhc2VDbGFtcChuLCAwLCBhcnJheS5sZW5ndGgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uc2h1ZmZsZWAgZm9yIGFycmF5cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHNodWZmbGUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgc2h1ZmZsZWQgYXJyYXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYXJyYXlTaHVmZmxlKGFycmF5KSB7XG4gICAgICByZXR1cm4gc2h1ZmZsZVNlbGYoY29weUFycmF5KGFycmF5KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBhc3NpZ25WYWx1ZWAgZXhjZXB0IHRoYXQgaXQgZG9lc24ndCBhc3NpZ25cbiAgICAgKiBgdW5kZWZpbmVkYCB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFzc2lnbk1lcmdlVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gICAgICBpZiAoKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgIWVxKG9iamVjdFtrZXldLCB2YWx1ZSkpIHx8XG4gICAgICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcbiAgICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXNzaWducyBgdmFsdWVgIHRvIGBrZXlgIG9mIGBvYmplY3RgIGlmIHRoZSBleGlzdGluZyB2YWx1ZSBpcyBub3QgZXF1aXZhbGVudFxuICAgICAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gICAgICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgICAgIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldO1xuICAgICAgaWYgKCEoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYgZXEob2JqVmFsdWUsIHZhbHVlKSkgfHxcbiAgICAgICAgICAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleSBpbiBvYmplY3QpKSkge1xuICAgICAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgYGtleWAgaXMgZm91bmQgaW4gYGFycmF5YCBvZiBrZXktdmFsdWUgcGFpcnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Kn0ga2V5IFRoZSBrZXkgdG8gc2VhcmNoIGZvci5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFzc29jSW5kZXhPZihhcnJheSwga2V5KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIGlmIChlcShhcnJheVtsZW5ndGhdWzBdLCBrZXkpKSB7XG4gICAgICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFnZ3JlZ2F0ZXMgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gIG9uIGBhY2N1bXVsYXRvcmAgd2l0aCBrZXlzIHRyYW5zZm9ybWVkXG4gICAgICogYnkgYGl0ZXJhdGVlYCBhbmQgdmFsdWVzIHNldCBieSBgc2V0dGVyYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHNldHRlciBUaGUgZnVuY3Rpb24gdG8gc2V0IGBhY2N1bXVsYXRvcmAgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBpdGVyYXRlZSB0byB0cmFuc2Zvcm0ga2V5cy5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gYWNjdW11bGF0b3IgVGhlIGluaXRpYWwgYWdncmVnYXRlZCBvYmplY3QuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBhY2N1bXVsYXRvcmAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUFnZ3JlZ2F0b3IoY29sbGVjdGlvbiwgc2V0dGVyLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IpIHtcbiAgICAgIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBrZXksIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgc2V0dGVyKGFjY3VtdWxhdG9yLCB2YWx1ZSwgaXRlcmF0ZWUodmFsdWUpLCBjb2xsZWN0aW9uKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmFzc2lnbmAgd2l0aG91dCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzb3VyY2VzXG4gICAgICogb3IgYGN1c3RvbWl6ZXJgIGZ1bmN0aW9ucy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlQXNzaWduKG9iamVjdCwgc291cmNlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ICYmIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzKHNvdXJjZSksIG9iamVjdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uYXNzaWduSW5gIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlc1xuICAgICAqIG9yIGBjdXN0b21pemVyYCBmdW5jdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUFzc2lnbkluKG9iamVjdCwgc291cmNlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ICYmIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzSW4oc291cmNlKSwgb2JqZWN0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgYXNzaWduVmFsdWVgIGFuZCBgYXNzaWduTWVyZ2VWYWx1ZWAgd2l0aG91dFxuICAgICAqIHZhbHVlIGNoZWNrcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKGtleSA9PSAnX19wcm90b19fJyAmJiBkZWZpbmVQcm9wZXJ0eSkge1xuICAgICAgICBkZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwge1xuICAgICAgICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICAgICAgICdlbnVtZXJhYmxlJzogdHJ1ZSxcbiAgICAgICAgICAndmFsdWUnOiB2YWx1ZSxcbiAgICAgICAgICAnd3JpdGFibGUnOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5hdGAgd2l0aG91dCBzdXBwb3J0IGZvciBpbmRpdmlkdWFsIHBhdGhzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGhzIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBwaWNrLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcGlja2VkIGVsZW1lbnRzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VBdChvYmplY3QsIHBhdGhzKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBwYXRocy5sZW5ndGgsXG4gICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKSxcbiAgICAgICAgICBza2lwID0gb2JqZWN0ID09IG51bGw7XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdFtpbmRleF0gPSBza2lwID8gdW5kZWZpbmVkIDogZ2V0KG9iamVjdCwgcGF0aHNbaW5kZXhdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uY2xhbXBgIHdoaWNoIGRvZXNuJ3QgY29lcmNlIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG51bWJlciBUaGUgbnVtYmVyIHRvIGNsYW1wLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbG93ZXJdIFRoZSBsb3dlciBib3VuZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdXBwZXIgVGhlIHVwcGVyIGJvdW5kLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNsYW1wZWQgbnVtYmVyLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VDbGFtcChudW1iZXIsIGxvd2VyLCB1cHBlcikge1xuICAgICAgaWYgKG51bWJlciA9PT0gbnVtYmVyKSB7XG4gICAgICAgIGlmICh1cHBlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbnVtYmVyID0gbnVtYmVyIDw9IHVwcGVyID8gbnVtYmVyIDogdXBwZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvd2VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBudW1iZXIgPSBudW1iZXIgPj0gbG93ZXIgPyBudW1iZXIgOiBsb3dlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jbG9uZWAgYW5kIGBfLmNsb25lRGVlcGAgd2hpY2ggdHJhY2tzXG4gICAgICogdHJhdmVyc2VkIG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNsb25lLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAgICAgKiAgMSAtIERlZXAgY2xvbmVcbiAgICAgKiAgMiAtIEZsYXR0ZW4gaW5oZXJpdGVkIHByb3BlcnRpZXNcbiAgICAgKiAgNCAtIENsb25lIHN5bWJvbHNcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjbG9uaW5nLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBba2V5XSBUaGUga2V5IG9mIGB2YWx1ZWAuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBwYXJlbnQgb2JqZWN0IG9mIGB2YWx1ZWAuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGFuZCB0aGVpciBjbG9uZSBjb3VudGVycGFydHMuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGNsb25lZCB2YWx1ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlQ2xvbmUodmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGtleSwgb2JqZWN0LCBzdGFjaykge1xuICAgICAgdmFyIHJlc3VsdCxcbiAgICAgICAgICBpc0RlZXAgPSBiaXRtYXNrICYgQ0xPTkVfREVFUF9GTEFHLFxuICAgICAgICAgIGlzRmxhdCA9IGJpdG1hc2sgJiBDTE9ORV9GTEFUX0ZMQUcsXG4gICAgICAgICAgaXNGdWxsID0gYml0bWFzayAmIENMT05FX1NZTUJPTFNfRkxBRztcblxuICAgICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgICAgcmVzdWx0ID0gb2JqZWN0ID8gY3VzdG9taXplcih2YWx1ZSwga2V5LCBvYmplY3QsIHN0YWNrKSA6IGN1c3RvbWl6ZXIodmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKTtcbiAgICAgIGlmIChpc0Fycikge1xuICAgICAgICByZXN1bHQgPSBpbml0Q2xvbmVBcnJheSh2YWx1ZSk7XG4gICAgICAgIGlmICghaXNEZWVwKSB7XG4gICAgICAgICAgcmV0dXJuIGNvcHlBcnJheSh2YWx1ZSwgcmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHRhZyA9IGdldFRhZyh2YWx1ZSksXG4gICAgICAgICAgICBpc0Z1bmMgPSB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnO1xuXG4gICAgICAgIGlmIChpc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gY2xvbmVCdWZmZXIodmFsdWUsIGlzRGVlcCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhZyA9PSBvYmplY3RUYWcgfHwgdGFnID09IGFyZ3NUYWcgfHwgKGlzRnVuYyAmJiAhb2JqZWN0KSkge1xuICAgICAgICAgIHJlc3VsdCA9IChpc0ZsYXQgfHwgaXNGdW5jKSA/IHt9IDogaW5pdENsb25lT2JqZWN0KHZhbHVlKTtcbiAgICAgICAgICBpZiAoIWlzRGVlcCkge1xuICAgICAgICAgICAgcmV0dXJuIGlzRmxhdFxuICAgICAgICAgICAgICA/IGNvcHlTeW1ib2xzSW4odmFsdWUsIGJhc2VBc3NpZ25JbihyZXN1bHQsIHZhbHVlKSlcbiAgICAgICAgICAgICAgOiBjb3B5U3ltYm9scyh2YWx1ZSwgYmFzZUFzc2lnbihyZXN1bHQsIHZhbHVlKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghY2xvbmVhYmxlVGFnc1t0YWddKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqZWN0ID8gdmFsdWUgOiB7fTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzdWx0ID0gaW5pdENsb25lQnlUYWcodmFsdWUsIHRhZywgaXNEZWVwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gQ2hlY2sgZm9yIGNpcmN1bGFyIHJlZmVyZW5jZXMgYW5kIHJldHVybiBpdHMgY29ycmVzcG9uZGluZyBjbG9uZS5cbiAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldCh2YWx1ZSk7XG4gICAgICBpZiAoc3RhY2tlZCkge1xuICAgICAgICByZXR1cm4gc3RhY2tlZDtcbiAgICAgIH1cbiAgICAgIHN0YWNrLnNldCh2YWx1ZSwgcmVzdWx0KTtcblxuICAgICAgaWYgKGlzU2V0KHZhbHVlKSkge1xuICAgICAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKHN1YlZhbHVlKSB7XG4gICAgICAgICAgcmVzdWx0LmFkZChiYXNlQ2xvbmUoc3ViVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN1YlZhbHVlLCB2YWx1ZSwgc3RhY2spKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGlzTWFwKHZhbHVlKSkge1xuICAgICAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKHN1YlZhbHVlLCBrZXkpIHtcbiAgICAgICAgICByZXN1bHQuc2V0KGtleSwgYmFzZUNsb25lKHN1YlZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBrZXksIHZhbHVlLCBzdGFjaykpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdmFyIGtleXNGdW5jID0gaXNGdWxsXG4gICAgICAgID8gKGlzRmxhdCA/IGdldEFsbEtleXNJbiA6IGdldEFsbEtleXMpXG4gICAgICAgIDogKGlzRmxhdCA/IGtleXNJbiA6IGtleXMpO1xuXG4gICAgICB2YXIgcHJvcHMgPSBpc0FyciA/IHVuZGVmaW5lZCA6IGtleXNGdW5jKHZhbHVlKTtcbiAgICAgIGFycmF5RWFjaChwcm9wcyB8fCB2YWx1ZSwgZnVuY3Rpb24oc3ViVmFsdWUsIGtleSkge1xuICAgICAgICBpZiAocHJvcHMpIHtcbiAgICAgICAgICBrZXkgPSBzdWJWYWx1ZTtcbiAgICAgICAgICBzdWJWYWx1ZSA9IHZhbHVlW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgcG9wdWxhdGUgY2xvbmUgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgICAgYXNzaWduVmFsdWUocmVzdWx0LCBrZXksIGJhc2VDbG9uZShzdWJWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwga2V5LCB2YWx1ZSwgc3RhY2spKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jb25mb3Jtc2Agd2hpY2ggZG9lc24ndCBjbG9uZSBgc291cmNlYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHByZWRpY2F0ZXMgdG8gY29uZm9ybSB0by5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VDb25mb3Jtcyhzb3VyY2UpIHtcbiAgICAgIHZhciBwcm9wcyA9IGtleXMoc291cmNlKTtcbiAgICAgIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIGJhc2VDb25mb3Jtc1RvKG9iamVjdCwgc291cmNlLCBwcm9wcyk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNvbmZvcm1zVG9gIHdoaWNoIGFjY2VwdHMgYHByb3BzYCB0byBjaGVjay5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHByZWRpY2F0ZXMgdG8gY29uZm9ybSB0by5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYG9iamVjdGAgY29uZm9ybXMsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlQ29uZm9ybXNUbyhvYmplY3QsIHNvdXJjZSwgcHJvcHMpIHtcbiAgICAgIHZhciBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG4gICAgICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuICFsZW5ndGg7XG4gICAgICB9XG4gICAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICB2YXIga2V5ID0gcHJvcHNbbGVuZ3RoXSxcbiAgICAgICAgICAgIHByZWRpY2F0ZSA9IHNvdXJjZVtrZXldLFxuICAgICAgICAgICAgdmFsdWUgPSBvYmplY3Rba2V5XTtcblxuICAgICAgICBpZiAoKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkgfHwgIXByZWRpY2F0ZSh2YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmRlbGF5YCBhbmQgYF8uZGVmZXJgIHdoaWNoIGFjY2VwdHMgYGFyZ3NgXG4gICAgICogdG8gcHJvdmlkZSB0byBgZnVuY2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRlbGF5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3YWl0IFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIGRlbGF5IGludm9jYXRpb24uXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIHByb3ZpZGUgdG8gYGZ1bmNgLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ8T2JqZWN0fSBSZXR1cm5zIHRoZSB0aW1lciBpZCBvciB0aW1lb3V0IG9iamVjdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlRGVsYXkoZnVuYywgd2FpdCwgYXJncykge1xuICAgICAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGZ1bmMuYXBwbHkodW5kZWZpbmVkLCBhcmdzKTsgfSwgd2FpdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgbWV0aG9kcyBsaWtlIGBfLmRpZmZlcmVuY2VgIHdpdGhvdXQgc3VwcG9ydFxuICAgICAqIGZvciBleGNsdWRpbmcgbXVsdGlwbGUgYXJyYXlzIG9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGV4Y2x1ZGUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZURpZmZlcmVuY2UoYXJyYXksIHZhbHVlcywgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRlcyxcbiAgICAgICAgICBpc0NvbW1vbiA9IHRydWUsXG4gICAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIHJlc3VsdCA9IFtdLFxuICAgICAgICAgIHZhbHVlc0xlbmd0aCA9IHZhbHVlcy5sZW5ndGg7XG5cbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICBpZiAoaXRlcmF0ZWUpIHtcbiAgICAgICAgdmFsdWVzID0gYXJyYXlNYXAodmFsdWVzLCBiYXNlVW5hcnkoaXRlcmF0ZWUpKTtcbiAgICAgIH1cbiAgICAgIGlmIChjb21wYXJhdG9yKSB7XG4gICAgICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRlc1dpdGg7XG4gICAgICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBlbHNlIGlmICh2YWx1ZXMubGVuZ3RoID49IExBUkdFX0FSUkFZX1NJWkUpIHtcbiAgICAgICAgaW5jbHVkZXMgPSBjYWNoZUhhcztcbiAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICAgICAgdmFsdWVzID0gbmV3IFNldENhY2hlKHZhbHVlcyk7XG4gICAgICB9XG4gICAgICBvdXRlcjpcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPT0gbnVsbCA/IHZhbHVlIDogaXRlcmF0ZWUodmFsdWUpO1xuXG4gICAgICAgIHZhbHVlID0gKGNvbXBhcmF0b3IgfHwgdmFsdWUgIT09IDApID8gdmFsdWUgOiAwO1xuICAgICAgICBpZiAoaXNDb21tb24gJiYgY29tcHV0ZWQgPT09IGNvbXB1dGVkKSB7XG4gICAgICAgICAgdmFyIHZhbHVlc0luZGV4ID0gdmFsdWVzTGVuZ3RoO1xuICAgICAgICAgIHdoaWxlICh2YWx1ZXNJbmRleC0tKSB7XG4gICAgICAgICAgICBpZiAodmFsdWVzW3ZhbHVlc0luZGV4XSA9PT0gY29tcHV0ZWQpIHtcbiAgICAgICAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghaW5jbHVkZXModmFsdWVzLCBjb21wdXRlZCwgY29tcGFyYXRvcikpIHtcbiAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZm9yRWFjaGAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fSBSZXR1cm5zIGBjb2xsZWN0aW9uYC5cbiAgICAgKi9cbiAgICB2YXIgYmFzZUVhY2ggPSBjcmVhdGVCYXNlRWFjaChiYXNlRm9yT3duKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZvckVhY2hSaWdodGAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fSBSZXR1cm5zIGBjb2xsZWN0aW9uYC5cbiAgICAgKi9cbiAgICB2YXIgYmFzZUVhY2hSaWdodCA9IGNyZWF0ZUJhc2VFYWNoKGJhc2VGb3JPd25SaWdodCwgdHJ1ZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5ldmVyeWAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFsbCBlbGVtZW50cyBwYXNzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gICAgICogIGVsc2UgYGZhbHNlYFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VFdmVyeShjb2xsZWN0aW9uLCBwcmVkaWNhdGUpIHtcbiAgICAgIHZhciByZXN1bHQgPSB0cnVlO1xuICAgICAgYmFzZUVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgIHJlc3VsdCA9ICEhcHJlZGljYXRlKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgbWV0aG9kcyBsaWtlIGBfLm1heGAgYW5kIGBfLm1pbmAgd2hpY2ggYWNjZXB0cyBhXG4gICAgICogYGNvbXBhcmF0b3JgIHRvIGRldGVybWluZSB0aGUgZXh0cmVtdW0gdmFsdWUuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb21wYXJhdG9yIFRoZSBjb21wYXJhdG9yIHVzZWQgdG8gY29tcGFyZSB2YWx1ZXMuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGV4dHJlbXVtIHZhbHVlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VFeHRyZW11bShhcnJheSwgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICAgICAgY3VycmVudCA9IGl0ZXJhdGVlKHZhbHVlKTtcblxuICAgICAgICBpZiAoY3VycmVudCAhPSBudWxsICYmIChjb21wdXRlZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgID8gKGN1cnJlbnQgPT09IGN1cnJlbnQgJiYgIWlzU3ltYm9sKGN1cnJlbnQpKVxuICAgICAgICAgICAgICA6IGNvbXBhcmF0b3IoY3VycmVudCwgY29tcHV0ZWQpXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgdmFyIGNvbXB1dGVkID0gY3VycmVudCxcbiAgICAgICAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmlsbGAgd2l0aG91dCBhbiBpdGVyYXRlZSBjYWxsIGd1YXJkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmlsbC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBmaWxsIGBhcnJheWAgd2l0aC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBwb3NpdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2VuZD1hcnJheS5sZW5ndGhdIFRoZSBlbmQgcG9zaXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUZpbGwoYXJyYXksIHZhbHVlLCBzdGFydCwgZW5kKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gICAgICBzdGFydCA9IHRvSW50ZWdlcihzdGFydCk7XG4gICAgICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgICAgIHN0YXJ0ID0gLXN0YXJ0ID4gbGVuZ3RoID8gMCA6IChsZW5ndGggKyBzdGFydCk7XG4gICAgICB9XG4gICAgICBlbmQgPSAoZW5kID09PSB1bmRlZmluZWQgfHwgZW5kID4gbGVuZ3RoKSA/IGxlbmd0aCA6IHRvSW50ZWdlcihlbmQpO1xuICAgICAgaWYgKGVuZCA8IDApIHtcbiAgICAgICAgZW5kICs9IGxlbmd0aDtcbiAgICAgIH1cbiAgICAgIGVuZCA9IHN0YXJ0ID4gZW5kID8gMCA6IHRvTGVuZ3RoKGVuZCk7XG4gICAgICB3aGlsZSAoc3RhcnQgPCBlbmQpIHtcbiAgICAgICAgYXJyYXlbc3RhcnQrK10gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhcnJheTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5maWx0ZXJgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VGaWx0ZXIoY29sbGVjdGlvbiwgcHJlZGljYXRlKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICBiYXNlRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmxhdHRlbmAgd2l0aCBzdXBwb3J0IGZvciByZXN0cmljdGluZyBmbGF0dGVuaW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGVwdGggVGhlIG1heGltdW0gcmVjdXJzaW9uIGRlcHRoLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3ByZWRpY2F0ZT1pc0ZsYXR0ZW5hYmxlXSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzU3RyaWN0XSBSZXN0cmljdCB0byB2YWx1ZXMgdGhhdCBwYXNzIGBwcmVkaWNhdGVgIGNoZWNrcy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbcmVzdWx0PVtdXSBUaGUgaW5pdGlhbCByZXN1bHQgdmFsdWUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VGbGF0dGVuKGFycmF5LCBkZXB0aCwgcHJlZGljYXRlLCBpc1N0cmljdCwgcmVzdWx0KSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgICAgIHByZWRpY2F0ZSB8fCAocHJlZGljYXRlID0gaXNGbGF0dGVuYWJsZSk7XG4gICAgICByZXN1bHQgfHwgKHJlc3VsdCA9IFtdKTtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgICAgICBpZiAoZGVwdGggPiAwICYmIHByZWRpY2F0ZSh2YWx1ZSkpIHtcbiAgICAgICAgICBpZiAoZGVwdGggPiAxKSB7XG4gICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBmbGF0dGVuIGFycmF5cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgICAgICAgYmFzZUZsYXR0ZW4odmFsdWUsIGRlcHRoIC0gMSwgcHJlZGljYXRlLCBpc1N0cmljdCwgcmVzdWx0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXJyYXlQdXNoKHJlc3VsdCwgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICghaXNTdHJpY3QpIHtcbiAgICAgICAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aF0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgYmFzZUZvck93bmAgd2hpY2ggaXRlcmF0ZXMgb3ZlciBgb2JqZWN0YFxuICAgICAqIHByb3BlcnRpZXMgcmV0dXJuZWQgYnkgYGtleXNGdW5jYCBhbmQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIHByb3BlcnR5LlxuICAgICAqIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb24gZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKi9cbiAgICB2YXIgYmFzZUZvciA9IGNyZWF0ZUJhc2VGb3IoKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZSBgYmFzZUZvcmAgZXhjZXB0IHRoYXQgaXQgaXRlcmF0ZXMgb3ZlciBwcm9wZXJ0aWVzXG4gICAgICogaW4gdGhlIG9wcG9zaXRlIG9yZGVyLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0ga2V5c0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUga2V5cyBvZiBgb2JqZWN0YC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqL1xuICAgIHZhciBiYXNlRm9yUmlnaHQgPSBjcmVhdGVCYXNlRm9yKHRydWUpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZm9yT3duYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VGb3JPd24ob2JqZWN0LCBpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIG9iamVjdCAmJiBiYXNlRm9yKG9iamVjdCwgaXRlcmF0ZWUsIGtleXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZvck93blJpZ2h0YCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VGb3JPd25SaWdodChvYmplY3QsIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ICYmIGJhc2VGb3JSaWdodChvYmplY3QsIGl0ZXJhdGVlLCBrZXlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mdW5jdGlvbnNgIHdoaWNoIGNyZWF0ZXMgYW4gYXJyYXkgb2ZcbiAgICAgKiBgb2JqZWN0YCBmdW5jdGlvbiBwcm9wZXJ0eSBuYW1lcyBmaWx0ZXJlZCBmcm9tIGBwcm9wc2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBuYW1lcyB0byBmaWx0ZXIuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBuYW1lcy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlRnVuY3Rpb25zKG9iamVjdCwgcHJvcHMpIHtcbiAgICAgIHJldHVybiBhcnJheUZpbHRlcihwcm9wcywgZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKG9iamVjdFtrZXldKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmdldGAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWZhdWx0IHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VHZXQob2JqZWN0LCBwYXRoKSB7XG4gICAgICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcblxuICAgICAgdmFyIGluZGV4ID0gMCxcbiAgICAgICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKG9iamVjdCAhPSBudWxsICYmIGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIG9iamVjdCA9IG9iamVjdFt0b0tleShwYXRoW2luZGV4KytdKV07XG4gICAgICB9XG4gICAgICByZXR1cm4gKGluZGV4ICYmIGluZGV4ID09IGxlbmd0aCkgPyBvYmplY3QgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldEFsbEtleXNgIGFuZCBgZ2V0QWxsS2V5c0luYCB3aGljaCB1c2VzXG4gICAgICogYGtleXNGdW5jYCBhbmQgYHN5bWJvbHNGdW5jYCB0byBnZXQgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXG4gICAgICogc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gc3ltYm9sc0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5c0Z1bmMsIHN5bWJvbHNGdW5jKSB7XG4gICAgICB2YXIgcmVzdWx0ID0ga2V5c0Z1bmMob2JqZWN0KTtcbiAgICAgIHJldHVybiBpc0FycmF5KG9iamVjdCkgPyByZXN1bHQgOiBhcnJheVB1c2gocmVzdWx0LCBzeW1ib2xzRnVuYyhvYmplY3QpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0VGFnYCB3aXRob3V0IGZhbGxiYWNrcyBmb3IgYnVnZ3kgZW52aXJvbm1lbnRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VHZXRUYWcodmFsdWUpIHtcbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkVGFnIDogbnVsbFRhZztcbiAgICAgIH1cbiAgICAgIHJldHVybiAoc3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKSlcbiAgICAgICAgPyBnZXRSYXdUYWcodmFsdWUpXG4gICAgICAgIDogb2JqZWN0VG9TdHJpbmcodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmd0YCB3aGljaCBkb2Vzbid0IGNvZXJjZSBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBncmVhdGVyIHRoYW4gYG90aGVyYCxcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VHdCh2YWx1ZSwgb3RoZXIpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA+IG90aGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmhhc2Agd2l0aG91dCBzdXBwb3J0IGZvciBkZWVwIHBhdGhzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30ga2V5IFRoZSBrZXkgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VIYXMob2JqZWN0LCBrZXkpIHtcbiAgICAgIHJldHVybiBvYmplY3QgIT0gbnVsbCAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5oYXNJbmAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWVwIHBhdGhzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30ga2V5IFRoZSBrZXkgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VIYXNJbihvYmplY3QsIGtleSkge1xuICAgICAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGtleSBpbiBPYmplY3Qob2JqZWN0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pblJhbmdlYCB3aGljaCBkb2Vzbid0IGNvZXJjZSBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXIgVGhlIG51bWJlciB0byBjaGVjay5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgVGhlIHN0YXJ0IG9mIHRoZSByYW5nZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgb2YgdGhlIHJhbmdlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgbnVtYmVyYCBpcyBpbiB0aGUgcmFuZ2UsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlSW5SYW5nZShudW1iZXIsIHN0YXJ0LCBlbmQpIHtcbiAgICAgIHJldHVybiBudW1iZXIgPj0gbmF0aXZlTWluKHN0YXJ0LCBlbmQpICYmIG51bWJlciA8IG5hdGl2ZU1heChzdGFydCwgZW5kKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBtZXRob2RzIGxpa2UgYF8uaW50ZXJzZWN0aW9uYCwgd2l0aG91dCBzdXBwb3J0XG4gICAgICogZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMsIHRoYXQgYWNjZXB0cyBhbiBhcnJheSBvZiBhcnJheXMgdG8gaW5zcGVjdC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXlzIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWVdIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIHNoYXJlZCB2YWx1ZXMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUludGVyc2VjdGlvbihhcnJheXMsIGl0ZXJhdGVlLCBjb21wYXJhdG9yKSB7XG4gICAgICB2YXIgaW5jbHVkZXMgPSBjb21wYXJhdG9yID8gYXJyYXlJbmNsdWRlc1dpdGggOiBhcnJheUluY2x1ZGVzLFxuICAgICAgICAgIGxlbmd0aCA9IGFycmF5c1swXS5sZW5ndGgsXG4gICAgICAgICAgb3RoTGVuZ3RoID0gYXJyYXlzLmxlbmd0aCxcbiAgICAgICAgICBvdGhJbmRleCA9IG90aExlbmd0aCxcbiAgICAgICAgICBjYWNoZXMgPSBBcnJheShvdGhMZW5ndGgpLFxuICAgICAgICAgIG1heExlbmd0aCA9IEluZmluaXR5LFxuICAgICAgICAgIHJlc3VsdCA9IFtdO1xuXG4gICAgICB3aGlsZSAob3RoSW5kZXgtLSkge1xuICAgICAgICB2YXIgYXJyYXkgPSBhcnJheXNbb3RoSW5kZXhdO1xuICAgICAgICBpZiAob3RoSW5kZXggJiYgaXRlcmF0ZWUpIHtcbiAgICAgICAgICBhcnJheSA9IGFycmF5TWFwKGFycmF5LCBiYXNlVW5hcnkoaXRlcmF0ZWUpKTtcbiAgICAgICAgfVxuICAgICAgICBtYXhMZW5ndGggPSBuYXRpdmVNaW4oYXJyYXkubGVuZ3RoLCBtYXhMZW5ndGgpO1xuICAgICAgICBjYWNoZXNbb3RoSW5kZXhdID0gIWNvbXBhcmF0b3IgJiYgKGl0ZXJhdGVlIHx8IChsZW5ndGggPj0gMTIwICYmIGFycmF5Lmxlbmd0aCA+PSAxMjApKVxuICAgICAgICAgID8gbmV3IFNldENhY2hlKG90aEluZGV4ICYmIGFycmF5KVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgYXJyYXkgPSBhcnJheXNbMF07XG5cbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIHNlZW4gPSBjYWNoZXNbMF07XG5cbiAgICAgIG91dGVyOlxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGggJiYgcmVzdWx0Lmxlbmd0aCA8IG1heExlbmd0aCkge1xuICAgICAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlID8gaXRlcmF0ZWUodmFsdWUpIDogdmFsdWU7XG5cbiAgICAgICAgdmFsdWUgPSAoY29tcGFyYXRvciB8fCB2YWx1ZSAhPT0gMCkgPyB2YWx1ZSA6IDA7XG4gICAgICAgIGlmICghKHNlZW5cbiAgICAgICAgICAgICAgPyBjYWNoZUhhcyhzZWVuLCBjb21wdXRlZClcbiAgICAgICAgICAgICAgOiBpbmNsdWRlcyhyZXN1bHQsIGNvbXB1dGVkLCBjb21wYXJhdG9yKVxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgIG90aEluZGV4ID0gb3RoTGVuZ3RoO1xuICAgICAgICAgIHdoaWxlICgtLW90aEluZGV4KSB7XG4gICAgICAgICAgICB2YXIgY2FjaGUgPSBjYWNoZXNbb3RoSW5kZXhdO1xuICAgICAgICAgICAgaWYgKCEoY2FjaGVcbiAgICAgICAgICAgICAgICAgID8gY2FjaGVIYXMoY2FjaGUsIGNvbXB1dGVkKVxuICAgICAgICAgICAgICAgICAgOiBpbmNsdWRlcyhhcnJheXNbb3RoSW5kZXhdLCBjb21wdXRlZCwgY29tcGFyYXRvcikpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc2Vlbikge1xuICAgICAgICAgICAgc2Vlbi5wdXNoKGNvbXB1dGVkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmludmVydGAgYW5kIGBfLmludmVydEJ5YCB3aGljaCBpbnZlcnRzXG4gICAgICogYG9iamVjdGAgd2l0aCB2YWx1ZXMgdHJhbnNmb3JtZWQgYnkgYGl0ZXJhdGVlYCBhbmQgc2V0IGJ5IGBzZXR0ZXJgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHNldHRlciBUaGUgZnVuY3Rpb24gdG8gc2V0IGBhY2N1bXVsYXRvcmAgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBpdGVyYXRlZSB0byB0cmFuc2Zvcm0gdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBhY2N1bXVsYXRvciBUaGUgaW5pdGlhbCBpbnZlcnRlZCBvYmplY3QuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBhY2N1bXVsYXRvcmAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUludmVydGVyKG9iamVjdCwgc2V0dGVyLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IpIHtcbiAgICAgIGJhc2VGb3JPd24ob2JqZWN0LCBmdW5jdGlvbih2YWx1ZSwga2V5LCBvYmplY3QpIHtcbiAgICAgICAgc2V0dGVyKGFjY3VtdWxhdG9yLCBpdGVyYXRlZSh2YWx1ZSksIGtleSwgb2JqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmludm9rZWAgd2l0aG91dCBzdXBwb3J0IGZvciBpbmRpdmlkdWFsXG4gICAgICogbWV0aG9kIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBtZXRob2QgdG8gaW52b2tlLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgdGhlIG1ldGhvZCB3aXRoLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGludm9rZWQgbWV0aG9kLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJbnZva2Uob2JqZWN0LCBwYXRoLCBhcmdzKSB7XG4gICAgICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcbiAgICAgIG9iamVjdCA9IHBhcmVudChvYmplY3QsIHBhdGgpO1xuICAgICAgdmFyIGZ1bmMgPSBvYmplY3QgPT0gbnVsbCA/IG9iamVjdCA6IG9iamVjdFt0b0tleShsYXN0KHBhdGgpKV07XG4gICAgICByZXR1cm4gZnVuYyA9PSBudWxsID8gdW5kZWZpbmVkIDogYXBwbHkoZnVuYywgb2JqZWN0LCBhcmdzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0FyZ3VtZW50c2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlSXNBcmd1bWVudHModmFsdWUpIHtcbiAgICAgIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFyZ3NUYWc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcnJheUJ1ZmZlcmAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5IGJ1ZmZlciwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJc0FycmF5QnVmZmVyKHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBhcnJheUJ1ZmZlclRhZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0RhdGVgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGRhdGUgb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUlzRGF0ZSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gZGF0ZVRhZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0VxdWFsYCB3aGljaCBzdXBwb3J0cyBwYXJ0aWFsIGNvbXBhcmlzb25zXG4gICAgICogYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAgICAgKiAgMSAtIFVub3JkZXJlZCBjb21wYXJpc29uXG4gICAgICogIDIgLSBQYXJ0aWFsIGNvbXBhcmlzb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIGB2YWx1ZWAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJc0VxdWFsKHZhbHVlLCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spIHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gb3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCBvdGhlciA9PSBudWxsIHx8ICghaXNPYmplY3RMaWtlKHZhbHVlKSAmJiAhaXNPYmplY3RMaWtlKG90aGVyKSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXI7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZUlzRXF1YWxEZWVwKHZhbHVlLCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgYmFzZUlzRXF1YWwsIHN0YWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsYCBmb3IgYXJyYXlzIGFuZCBvYmplY3RzIHdoaWNoIHBlcmZvcm1zXG4gICAgICogZGVlcCBjb21wYXJpc29ucyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhclxuICAgICAqIHJlZmVyZW5jZXMgdG8gYmUgY29tcGFyZWQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUlzRXF1YWxEZWVwKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgICAgIHZhciBvYmpJc0FyciA9IGlzQXJyYXkob2JqZWN0KSxcbiAgICAgICAgICBvdGhJc0FyciA9IGlzQXJyYXkob3RoZXIpLFxuICAgICAgICAgIG9ialRhZyA9IG9iaklzQXJyID8gYXJyYXlUYWcgOiBnZXRUYWcob2JqZWN0KSxcbiAgICAgICAgICBvdGhUYWcgPSBvdGhJc0FyciA/IGFycmF5VGFnIDogZ2V0VGFnKG90aGVyKTtcblxuICAgICAgb2JqVGFnID0gb2JqVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvYmpUYWc7XG4gICAgICBvdGhUYWcgPSBvdGhUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG90aFRhZztcblxuICAgICAgdmFyIG9iaklzT2JqID0gb2JqVGFnID09IG9iamVjdFRhZyxcbiAgICAgICAgICBvdGhJc09iaiA9IG90aFRhZyA9PSBvYmplY3RUYWcsXG4gICAgICAgICAgaXNTYW1lVGFnID0gb2JqVGFnID09IG90aFRhZztcblxuICAgICAgaWYgKGlzU2FtZVRhZyAmJiBpc0J1ZmZlcihvYmplY3QpKSB7XG4gICAgICAgIGlmICghaXNCdWZmZXIob3RoZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIG9iaklzQXJyID0gdHJ1ZTtcbiAgICAgICAgb2JqSXNPYmogPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1NhbWVUYWcgJiYgIW9iaklzT2JqKSB7XG4gICAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgICAgIHJldHVybiAob2JqSXNBcnIgfHwgaXNUeXBlZEFycmF5KG9iamVjdCkpXG4gICAgICAgICAgPyBlcXVhbEFycmF5cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKVxuICAgICAgICAgIDogZXF1YWxCeVRhZyhvYmplY3QsIG90aGVyLCBvYmpUYWcsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xuICAgICAgfVxuICAgICAgaWYgKCEoYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHKSkge1xuICAgICAgICB2YXIgb2JqSXNXcmFwcGVkID0gb2JqSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsICdfX3dyYXBwZWRfXycpLFxuICAgICAgICAgICAgb3RoSXNXcmFwcGVkID0gb3RoSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwgJ19fd3JhcHBlZF9fJyk7XG5cbiAgICAgICAgaWYgKG9iaklzV3JhcHBlZCB8fCBvdGhJc1dyYXBwZWQpIHtcbiAgICAgICAgICB2YXIgb2JqVW53cmFwcGVkID0gb2JqSXNXcmFwcGVkID8gb2JqZWN0LnZhbHVlKCkgOiBvYmplY3QsXG4gICAgICAgICAgICAgIG90aFVud3JhcHBlZCA9IG90aElzV3JhcHBlZCA/IG90aGVyLnZhbHVlKCkgOiBvdGhlcjtcblxuICAgICAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgICAgICAgcmV0dXJuIGVxdWFsRnVuYyhvYmpVbndyYXBwZWQsIG90aFVud3JhcHBlZCwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWlzU2FtZVRhZykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICAgICAgcmV0dXJuIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc01hcGAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbWFwLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUlzTWFwKHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBnZXRUYWcodmFsdWUpID09IG1hcFRhZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc01hdGNoYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXMgdG8gbWF0Y2guXG4gICAgICogQHBhcmFtIHtBcnJheX0gbWF0Y2hEYXRhIFRoZSBwcm9wZXJ0eSBuYW1lcywgdmFsdWVzLCBhbmQgY29tcGFyZSBmbGFncyB0byBtYXRjaC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYG9iamVjdGAgaXMgYSBtYXRjaCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJc01hdGNoKG9iamVjdCwgc291cmNlLCBtYXRjaERhdGEsIGN1c3RvbWl6ZXIpIHtcbiAgICAgIHZhciBpbmRleCA9IG1hdGNoRGF0YS5sZW5ndGgsXG4gICAgICAgICAgbGVuZ3RoID0gaW5kZXgsXG4gICAgICAgICAgbm9DdXN0b21pemVyID0gIWN1c3RvbWl6ZXI7XG5cbiAgICAgIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gIWxlbmd0aDtcbiAgICAgIH1cbiAgICAgIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICAgICAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICAgICAgdmFyIGRhdGEgPSBtYXRjaERhdGFbaW5kZXhdO1xuICAgICAgICBpZiAoKG5vQ3VzdG9taXplciAmJiBkYXRhWzJdKVxuICAgICAgICAgICAgICA/IGRhdGFbMV0gIT09IG9iamVjdFtkYXRhWzBdXVxuICAgICAgICAgICAgICA6ICEoZGF0YVswXSBpbiBvYmplY3QpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGRhdGEgPSBtYXRjaERhdGFbaW5kZXhdO1xuICAgICAgICB2YXIga2V5ID0gZGF0YVswXSxcbiAgICAgICAgICAgIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXG4gICAgICAgICAgICBzcmNWYWx1ZSA9IGRhdGFbMV07XG5cbiAgICAgICAgaWYgKG5vQ3VzdG9taXplciAmJiBkYXRhWzJdKSB7XG4gICAgICAgICAgaWYgKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgc3RhY2sgPSBuZXcgU3RhY2s7XG4gICAgICAgICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QsIHNvdXJjZSwgc3RhY2spO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIShyZXN1bHQgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gYmFzZUlzRXF1YWwoc3JjVmFsdWUsIG9ialZhbHVlLCBDT01QQVJFX1BBUlRJQUxfRkxBRyB8IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcsIGN1c3RvbWl6ZXIsIHN0YWNrKVxuICAgICAgICAgICAgICAgIDogcmVzdWx0XG4gICAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmF0aXZlYCB3aXRob3V0IGJhZCBzaGltIGNoZWNrcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcbiAgICAgIGlmICghaXNPYmplY3QodmFsdWUpIHx8IGlzTWFza2VkKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB2YXIgcGF0dGVybiA9IGlzRnVuY3Rpb24odmFsdWUpID8gcmVJc05hdGl2ZSA6IHJlSXNIb3N0Q3RvcjtcbiAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QodG9Tb3VyY2UodmFsdWUpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1JlZ0V4cGAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcmVnZXhwLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUlzUmVnRXhwKHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSByZWdleHBUYWc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNTZXRgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHNldCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJc1NldCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgZ2V0VGFnKHZhbHVlKSA9PSBzZXRUYWc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNUeXBlZEFycmF5YCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJc1R5cGVkQXJyYXkodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmXG4gICAgICAgIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgISF0eXBlZEFycmF5VGFnc1tiYXNlR2V0VGFnKHZhbHVlKV07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXRlcmF0ZWVgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IFt2YWx1ZT1fLmlkZW50aXR5XSBUaGUgdmFsdWUgdG8gY29udmVydCB0byBhbiBpdGVyYXRlZS5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGl0ZXJhdGVlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJdGVyYXRlZSh2YWx1ZSkge1xuICAgICAgLy8gRG9uJ3Qgc3RvcmUgdGhlIGB0eXBlb2ZgIHJlc3VsdCBpbiBhIHZhcmlhYmxlIHRvIGF2b2lkIGEgSklUIGJ1ZyBpbiBTYWZhcmkgOS5cbiAgICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MDM0IGZvciBtb3JlIGRldGFpbHMuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGlkZW50aXR5O1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgICA/IGJhc2VNYXRjaGVzUHJvcGVydHkodmFsdWVbMF0sIHZhbHVlWzFdKVxuICAgICAgICAgIDogYmFzZU1hdGNoZXModmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VLZXlzKG9iamVjdCkge1xuICAgICAgaWYgKCFpc1Byb3RvdHlwZShvYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBuYXRpdmVLZXlzKG9iamVjdCk7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGtleSAhPSAnY29uc3RydWN0b3InKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzSW5gIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUtleXNJbihvYmplY3QpIHtcbiAgICAgIGlmICghaXNPYmplY3Qob2JqZWN0KSkge1xuICAgICAgICByZXR1cm4gbmF0aXZlS2V5c0luKG9iamVjdCk7XG4gICAgICB9XG4gICAgICB2YXIgaXNQcm90byA9IGlzUHJvdG90eXBlKG9iamVjdCksXG4gICAgICAgICAgcmVzdWx0ID0gW107XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgaWYgKCEoa2V5ID09ICdjb25zdHJ1Y3RvcicgJiYgKGlzUHJvdG8gfHwgIWhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSkpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmx0YCB3aGljaCBkb2Vzbid0IGNvZXJjZSBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBsZXNzIHRoYW4gYG90aGVyYCxcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VMdCh2YWx1ZSwgb3RoZXIpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA8IG90aGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1hcGAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZU1hcChjb2xsZWN0aW9uLCBpdGVyYXRlZSkge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgcmVzdWx0ID0gaXNBcnJheUxpa2UoY29sbGVjdGlvbikgPyBBcnJheShjb2xsZWN0aW9uLmxlbmd0aCkgOiBbXTtcblxuICAgICAgYmFzZUVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGtleSwgY29sbGVjdGlvbikge1xuICAgICAgICByZXN1bHRbKytpbmRleF0gPSBpdGVyYXRlZSh2YWx1ZSwga2V5LCBjb2xsZWN0aW9uKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXRjaGVzYCB3aGljaCBkb2Vzbid0IGNsb25lIGBzb3VyY2VgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZU1hdGNoZXMoc291cmNlKSB7XG4gICAgICB2YXIgbWF0Y2hEYXRhID0gZ2V0TWF0Y2hEYXRhKHNvdXJjZSk7XG4gICAgICBpZiAobWF0Y2hEYXRhLmxlbmd0aCA9PSAxICYmIG1hdGNoRGF0YVswXVsyXSkge1xuICAgICAgICByZXR1cm4gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUobWF0Y2hEYXRhWzBdWzBdLCBtYXRjaERhdGFbMF1bMV0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAgICByZXR1cm4gb2JqZWN0ID09PSBzb3VyY2UgfHwgYmFzZUlzTWF0Y2gob2JqZWN0LCBzb3VyY2UsIG1hdGNoRGF0YSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1hdGNoZXNQcm9wZXJ0eWAgd2hpY2ggZG9lc24ndCBjbG9uZSBgc3JjVmFsdWVgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICAgICAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZU1hdGNoZXNQcm9wZXJ0eShwYXRoLCBzcmNWYWx1ZSkge1xuICAgICAgaWYgKGlzS2V5KHBhdGgpICYmIGlzU3RyaWN0Q29tcGFyYWJsZShzcmNWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKHRvS2V5KHBhdGgpLCBzcmNWYWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgICAgIHZhciBvYmpWYWx1ZSA9IGdldChvYmplY3QsIHBhdGgpO1xuICAgICAgICByZXR1cm4gKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgb2JqVmFsdWUgPT09IHNyY1ZhbHVlKVxuICAgICAgICAgID8gaGFzSW4ob2JqZWN0LCBwYXRoKVxuICAgICAgICAgIDogYmFzZUlzRXF1YWwoc3JjVmFsdWUsIG9ialZhbHVlLCBDT01QQVJFX1BBUlRJQUxfRkxBRyB8IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tZXJnZWAgd2l0aG91dCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzb3VyY2VzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3JjSW5kZXggVGhlIGluZGV4IG9mIGBzb3VyY2VgLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIG1lcmdlZCB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBzb3VyY2UgdmFsdWVzIGFuZCB0aGVpciBtZXJnZWRcbiAgICAgKiAgY291bnRlcnBhcnRzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VNZXJnZShvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgsIGN1c3RvbWl6ZXIsIHN0YWNrKSB7XG4gICAgICBpZiAob2JqZWN0ID09PSBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgYmFzZUZvcihzb3VyY2UsIGZ1bmN0aW9uKHNyY1ZhbHVlLCBrZXkpIHtcbiAgICAgICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICAgICAgaWYgKGlzT2JqZWN0KHNyY1ZhbHVlKSkge1xuICAgICAgICAgIGJhc2VNZXJnZURlZXAob2JqZWN0LCBzb3VyY2UsIGtleSwgc3JjSW5kZXgsIGJhc2VNZXJnZSwgY3VzdG9taXplciwgc3RhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcbiAgICAgICAgICAgID8gY3VzdG9taXplcihzYWZlR2V0KG9iamVjdCwga2V5KSwgc3JjVmFsdWUsIChrZXkgKyAnJyksIG9iamVjdCwgc291cmNlLCBzdGFjaylcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICAgICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gc3JjVmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFzc2lnbk1lcmdlVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSwga2V5c0luKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VNZXJnZWAgZm9yIGFycmF5cyBhbmQgb2JqZWN0cyB3aGljaCBwZXJmb3Jtc1xuICAgICAqIGRlZXAgbWVyZ2VzIGFuZCB0cmFja3MgdHJhdmVyc2VkIG9iamVjdHMgZW5hYmxpbmcgb2JqZWN0cyB3aXRoIGNpcmN1bGFyXG4gICAgICogcmVmZXJlbmNlcyB0byBiZSBtZXJnZWQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gbWVyZ2UuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNyY0luZGV4IFRoZSBpbmRleCBvZiBgc291cmNlYC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBtZXJnZUZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1lcmdlIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBhc3NpZ25lZCB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBzb3VyY2UgdmFsdWVzIGFuZCB0aGVpciBtZXJnZWRcbiAgICAgKiAgY291bnRlcnBhcnRzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VNZXJnZURlZXAob2JqZWN0LCBzb3VyY2UsIGtleSwgc3JjSW5kZXgsIG1lcmdlRnVuYywgY3VzdG9taXplciwgc3RhY2spIHtcbiAgICAgIHZhciBvYmpWYWx1ZSA9IHNhZmVHZXQob2JqZWN0LCBrZXkpLFxuICAgICAgICAgIHNyY1ZhbHVlID0gc2FmZUdldChzb3VyY2UsIGtleSksXG4gICAgICAgICAgc3RhY2tlZCA9IHN0YWNrLmdldChzcmNWYWx1ZSk7XG5cbiAgICAgIGlmIChzdGFja2VkKSB7XG4gICAgICAgIGFzc2lnbk1lcmdlVmFsdWUob2JqZWN0LCBrZXksIHN0YWNrZWQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgbmV3VmFsdWUgPSBjdXN0b21pemVyXG4gICAgICAgID8gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUsIChrZXkgKyAnJyksIG9iamVjdCwgc291cmNlLCBzdGFjaylcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIHZhciBpc0NvbW1vbiA9IG5ld1ZhbHVlID09PSB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChpc0NvbW1vbikge1xuICAgICAgICB2YXIgaXNBcnIgPSBpc0FycmF5KHNyY1ZhbHVlKSxcbiAgICAgICAgICAgIGlzQnVmZiA9ICFpc0FyciAmJiBpc0J1ZmZlcihzcmNWYWx1ZSksXG4gICAgICAgICAgICBpc1R5cGVkID0gIWlzQXJyICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHNyY1ZhbHVlKTtcblxuICAgICAgICBuZXdWYWx1ZSA9IHNyY1ZhbHVlO1xuICAgICAgICBpZiAoaXNBcnIgfHwgaXNCdWZmIHx8IGlzVHlwZWQpIHtcbiAgICAgICAgICBpZiAoaXNBcnJheShvYmpWYWx1ZSkpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gb2JqVmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKGlzQXJyYXlMaWtlT2JqZWN0KG9ialZhbHVlKSkge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSBjb3B5QXJyYXkob2JqVmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChpc0J1ZmYpIHtcbiAgICAgICAgICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9IGNsb25lQnVmZmVyKHNyY1ZhbHVlLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAoaXNUeXBlZCkge1xuICAgICAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gY2xvbmVUeXBlZEFycmF5KHNyY1ZhbHVlLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9IFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHNyY1ZhbHVlKSB8fCBpc0FyZ3VtZW50cyhzcmNWYWx1ZSkpIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9IG9ialZhbHVlO1xuICAgICAgICAgIGlmIChpc0FyZ3VtZW50cyhvYmpWYWx1ZSkpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gdG9QbGFpbk9iamVjdChvYmpWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKCFpc09iamVjdChvYmpWYWx1ZSkgfHwgaXNGdW5jdGlvbihvYmpWYWx1ZSkpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gaW5pdENsb25lT2JqZWN0KHNyY1ZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGlzQ29tbW9uKSB7XG4gICAgICAgIC8vIFJlY3Vyc2l2ZWx5IG1lcmdlIG9iamVjdHMgYW5kIGFycmF5cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgICBzdGFjay5zZXQoc3JjVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICAgICAgbWVyZ2VGdW5jKG5ld1ZhbHVlLCBzcmNWYWx1ZSwgc3JjSW5kZXgsIGN1c3RvbWl6ZXIsIHN0YWNrKTtcbiAgICAgICAgc3RhY2tbJ2RlbGV0ZSddKHNyY1ZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGFzc2lnbk1lcmdlVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5udGhgIHdoaWNoIGRvZXNuJ3QgY29lcmNlIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBpbmRleCBvZiB0aGUgZWxlbWVudCB0byByZXR1cm4uXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG50aCBlbGVtZW50IG9mIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZU50aChhcnJheSwgbikge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG4gKz0gbiA8IDAgPyBsZW5ndGggOiAwO1xuICAgICAgcmV0dXJuIGlzSW5kZXgobiwgbGVuZ3RoKSA/IGFycmF5W25dIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm9yZGVyQnlgIHdpdGhvdXQgcGFyYW0gZ3VhcmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbltdfE9iamVjdFtdfHN0cmluZ1tdfSBpdGVyYXRlZXMgVGhlIGl0ZXJhdGVlcyB0byBzb3J0IGJ5LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nW119IG9yZGVycyBUaGUgc29ydCBvcmRlcnMgb2YgYGl0ZXJhdGVlc2AuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgc29ydGVkIGFycmF5LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VPcmRlckJ5KGNvbGxlY3Rpb24sIGl0ZXJhdGVlcywgb3JkZXJzKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMTtcbiAgICAgIGl0ZXJhdGVlcyA9IGFycmF5TWFwKGl0ZXJhdGVlcy5sZW5ndGggPyBpdGVyYXRlZXMgOiBbaWRlbnRpdHldLCBiYXNlVW5hcnkoZ2V0SXRlcmF0ZWUoKSkpO1xuXG4gICAgICB2YXIgcmVzdWx0ID0gYmFzZU1hcChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwga2V5LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgIHZhciBjcml0ZXJpYSA9IGFycmF5TWFwKGl0ZXJhdGVlcywgZnVuY3Rpb24oaXRlcmF0ZWUpIHtcbiAgICAgICAgICByZXR1cm4gaXRlcmF0ZWUodmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsgJ2NyaXRlcmlhJzogY3JpdGVyaWEsICdpbmRleCc6ICsraW5kZXgsICd2YWx1ZSc6IHZhbHVlIH07XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGJhc2VTb3J0QnkocmVzdWx0LCBmdW5jdGlvbihvYmplY3QsIG90aGVyKSB7XG4gICAgICAgIHJldHVybiBjb21wYXJlTXVsdGlwbGUob2JqZWN0LCBvdGhlciwgb3JkZXJzKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnBpY2tgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaW5kaXZpZHVhbFxuICAgICAqIHByb3BlcnR5IGlkZW50aWZpZXJzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBzb3VyY2Ugb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGhzIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBwaWNrLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVBpY2sob2JqZWN0LCBwYXRocykge1xuICAgICAgcmV0dXJuIGJhc2VQaWNrQnkob2JqZWN0LCBwYXRocywgZnVuY3Rpb24odmFsdWUsIHBhdGgpIHtcbiAgICAgICAgcmV0dXJuIGhhc0luKG9iamVjdCwgcGF0aCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiAgYF8ucGlja0J5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gICAgICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aHMgVGhlIHByb3BlcnR5IHBhdGhzIHRvIHBpY2suXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBwcm9wZXJ0eS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VQaWNrQnkob2JqZWN0LCBwYXRocywgcHJlZGljYXRlKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBwYXRocy5sZW5ndGgsXG4gICAgICAgICAgcmVzdWx0ID0ge307XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBwYXRoID0gcGF0aHNbaW5kZXhdLFxuICAgICAgICAgICAgdmFsdWUgPSBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG5cbiAgICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgcGF0aCkpIHtcbiAgICAgICAgICBiYXNlU2V0KHJlc3VsdCwgY2FzdFBhdGgocGF0aCwgb2JqZWN0KSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVByb3BlcnR5YCB3aGljaCBzdXBwb3J0cyBkZWVwIHBhdGhzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VQcm9wZXJ0eURlZXAocGF0aCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAgICByZXR1cm4gYmFzZUdldChvYmplY3QsIHBhdGgpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5wdWxsQWxsQnlgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAgICAgKiBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIHJlbW92ZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWVdIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VQdWxsQWxsKGFycmF5LCB2YWx1ZXMsIGl0ZXJhdGVlLCBjb21wYXJhdG9yKSB7XG4gICAgICB2YXIgaW5kZXhPZiA9IGNvbXBhcmF0b3IgPyBiYXNlSW5kZXhPZldpdGggOiBiYXNlSW5kZXhPZixcbiAgICAgICAgICBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICAgICAgc2VlbiA9IGFycmF5O1xuXG4gICAgICBpZiAoYXJyYXkgPT09IHZhbHVlcykge1xuICAgICAgICB2YWx1ZXMgPSBjb3B5QXJyYXkodmFsdWVzKTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVyYXRlZSkge1xuICAgICAgICBzZWVuID0gYXJyYXlNYXAoYXJyYXksIGJhc2VVbmFyeShpdGVyYXRlZSkpO1xuICAgICAgfVxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIGZyb21JbmRleCA9IDAsXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlc1tpbmRleF0sXG4gICAgICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlID8gaXRlcmF0ZWUodmFsdWUpIDogdmFsdWU7XG5cbiAgICAgICAgd2hpbGUgKChmcm9tSW5kZXggPSBpbmRleE9mKHNlZW4sIGNvbXB1dGVkLCBmcm9tSW5kZXgsIGNvbXBhcmF0b3IpKSA+IC0xKSB7XG4gICAgICAgICAgaWYgKHNlZW4gIT09IGFycmF5KSB7XG4gICAgICAgICAgICBzcGxpY2UuY2FsbChzZWVuLCBmcm9tSW5kZXgsIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzcGxpY2UuY2FsbChhcnJheSwgZnJvbUluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnB1bGxBdGAgd2l0aG91dCBzdXBwb3J0IGZvciBpbmRpdmlkdWFsXG4gICAgICogaW5kZXhlcyBvciBjYXB0dXJpbmcgdGhlIHJlbW92ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtudW1iZXJbXX0gaW5kZXhlcyBUaGUgaW5kZXhlcyBvZiBlbGVtZW50cyB0byByZW1vdmUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVB1bGxBdChhcnJheSwgaW5kZXhlcykge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID8gaW5kZXhlcy5sZW5ndGggOiAwLFxuICAgICAgICAgIGxhc3RJbmRleCA9IGxlbmd0aCAtIDE7XG5cbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICB2YXIgaW5kZXggPSBpbmRleGVzW2xlbmd0aF07XG4gICAgICAgIGlmIChsZW5ndGggPT0gbGFzdEluZGV4IHx8IGluZGV4ICE9PSBwcmV2aW91cykge1xuICAgICAgICAgIHZhciBwcmV2aW91cyA9IGluZGV4O1xuICAgICAgICAgIGlmIChpc0luZGV4KGluZGV4KSkge1xuICAgICAgICAgICAgc3BsaWNlLmNhbGwoYXJyYXksIGluZGV4LCAxKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYmFzZVVuc2V0KGFycmF5LCBpbmRleCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJyYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucmFuZG9tYCB3aXRob3V0IHN1cHBvcnQgZm9yIHJldHVybmluZ1xuICAgICAqIGZsb2F0aW5nLXBvaW50IG51bWJlcnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsb3dlciBUaGUgbG93ZXIgYm91bmQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHVwcGVyIFRoZSB1cHBlciBib3VuZC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSByYW5kb20gbnVtYmVyLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VSYW5kb20obG93ZXIsIHVwcGVyKSB7XG4gICAgICByZXR1cm4gbG93ZXIgKyBuYXRpdmVGbG9vcihuYXRpdmVSYW5kb20oKSAqICh1cHBlciAtIGxvd2VyICsgMSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJhbmdlYCBhbmQgYF8ucmFuZ2VSaWdodGAgd2hpY2ggZG9lc24ndFxuICAgICAqIGNvZXJjZSBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnQgb2YgdGhlIHJhbmdlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBvZiB0aGUgcmFuZ2UuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHN0ZXAgVGhlIHZhbHVlIHRvIGluY3JlbWVudCBvciBkZWNyZW1lbnQgYnkuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSByYW5nZSBvZiBudW1iZXJzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VSYW5nZShzdGFydCwgZW5kLCBzdGVwLCBmcm9tUmlnaHQpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1heChuYXRpdmVDZWlsKChlbmQgLSBzdGFydCkgLyAoc3RlcCB8fCAxKSksIDApLFxuICAgICAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICByZXN1bHRbZnJvbVJpZ2h0ID8gbGVuZ3RoIDogKytpbmRleF0gPSBzdGFydDtcbiAgICAgICAgc3RhcnQgKz0gc3RlcDtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucmVwZWF0YCB3aGljaCBkb2Vzbid0IGNvZXJjZSBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byByZXBlYXQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiB0aW1lcyB0byByZXBlYXQgdGhlIHN0cmluZy5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByZXBlYXRlZCBzdHJpbmcuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVJlcGVhdChzdHJpbmcsIG4pIHtcbiAgICAgIHZhciByZXN1bHQgPSAnJztcbiAgICAgIGlmICghc3RyaW5nIHx8IG4gPCAxIHx8IG4gPiBNQVhfU0FGRV9JTlRFR0VSKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICAvLyBMZXZlcmFnZSB0aGUgZXhwb25lbnRpYXRpb24gYnkgc3F1YXJpbmcgYWxnb3JpdGhtIGZvciBhIGZhc3RlciByZXBlYXQuXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRXhwb25lbnRpYXRpb25fYnlfc3F1YXJpbmcgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKG4gJSAyKSB7XG4gICAgICAgICAgcmVzdWx0ICs9IHN0cmluZztcbiAgICAgICAgfVxuICAgICAgICBuID0gbmF0aXZlRmxvb3IobiAvIDIpO1xuICAgICAgICBpZiAobikge1xuICAgICAgICAgIHN0cmluZyArPSBzdHJpbmc7XG4gICAgICAgIH1cbiAgICAgIH0gd2hpbGUgKG4pO1xuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJlc3RgIHdoaWNoIGRvZXNuJ3QgdmFsaWRhdGUgb3IgY29lcmNlIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVJlc3QoZnVuYywgc3RhcnQpIHtcbiAgICAgIHJldHVybiBzZXRUb1N0cmluZyhvdmVyUmVzdChmdW5jLCBzdGFydCwgaWRlbnRpdHkpLCBmdW5jICsgJycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNhbXBsZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIHNhbXBsZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmFuZG9tIGVsZW1lbnQuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVNhbXBsZShjb2xsZWN0aW9uKSB7XG4gICAgICByZXR1cm4gYXJyYXlTYW1wbGUodmFsdWVzKGNvbGxlY3Rpb24pKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zYW1wbGVTaXplYCB3aXRob3V0IHBhcmFtIGd1YXJkcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gc2FtcGxlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gc2FtcGxlLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcmFuZG9tIGVsZW1lbnRzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VTYW1wbGVTaXplKGNvbGxlY3Rpb24sIG4pIHtcbiAgICAgIHZhciBhcnJheSA9IHZhbHVlcyhjb2xsZWN0aW9uKTtcbiAgICAgIHJldHVybiBzaHVmZmxlU2VsZihhcnJheSwgYmFzZUNsYW1wKG4sIDAsIGFycmF5Lmxlbmd0aCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNldGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHNldC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgcGF0aCBjcmVhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VTZXQob2JqZWN0LCBwYXRoLCB2YWx1ZSwgY3VzdG9taXplcikge1xuICAgICAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICB9XG4gICAgICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcblxuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGgsXG4gICAgICAgICAgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMSxcbiAgICAgICAgICBuZXN0ZWQgPSBvYmplY3Q7XG5cbiAgICAgIHdoaWxlIChuZXN0ZWQgIT0gbnVsbCAmJiArK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSB0b0tleShwYXRoW2luZGV4XSksXG4gICAgICAgICAgICBuZXdWYWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgIGlmIChpbmRleCAhPSBsYXN0SW5kZXgpIHtcbiAgICAgICAgICB2YXIgb2JqVmFsdWUgPSBuZXN0ZWRba2V5XTtcbiAgICAgICAgICBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXIgPyBjdXN0b21pemVyKG9ialZhbHVlLCBrZXksIG5lc3RlZCkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gaXNPYmplY3Qob2JqVmFsdWUpXG4gICAgICAgICAgICAgID8gb2JqVmFsdWVcbiAgICAgICAgICAgICAgOiAoaXNJbmRleChwYXRoW2luZGV4ICsgMV0pID8gW10gOiB7fSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGFzc2lnblZhbHVlKG5lc3RlZCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgICAgIG5lc3RlZCA9IG5lc3RlZFtrZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0RGF0YWAgd2l0aG91dCBzdXBwb3J0IGZvciBob3QgbG9vcCBzaG9ydGluZy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXNzb2NpYXRlIG1ldGFkYXRhIHdpdGguXG4gICAgICogQHBhcmFtIHsqfSBkYXRhIFRoZSBtZXRhZGF0YS5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICAgICAqL1xuICAgIHZhciBiYXNlU2V0RGF0YSA9ICFtZXRhTWFwID8gaWRlbnRpdHkgOiBmdW5jdGlvbihmdW5jLCBkYXRhKSB7XG4gICAgICBtZXRhTWFwLnNldChmdW5jLCBkYXRhKTtcbiAgICAgIHJldHVybiBmdW5jO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0VG9TdHJpbmdgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gICAgICovXG4gICAgdmFyIGJhc2VTZXRUb1N0cmluZyA9ICFkZWZpbmVQcm9wZXJ0eSA/IGlkZW50aXR5IDogZnVuY3Rpb24oZnVuYywgc3RyaW5nKSB7XG4gICAgICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuYywgJ3RvU3RyaW5nJywge1xuICAgICAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAgICAgJ2VudW1lcmFibGUnOiBmYWxzZSxcbiAgICAgICAgJ3ZhbHVlJzogY29uc3RhbnQoc3RyaW5nKSxcbiAgICAgICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNodWZmbGVgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBzaHVmZmxlLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IHNodWZmbGVkIGFycmF5LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VTaHVmZmxlKGNvbGxlY3Rpb24pIHtcbiAgICAgIHJldHVybiBzaHVmZmxlU2VsZih2YWx1ZXMoY29sbGVjdGlvbikpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNsaWNlYCB3aXRob3V0IGFuIGl0ZXJhdGVlIGNhbGwgZ3VhcmQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzbGljZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBwb3NpdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2VuZD1hcnJheS5sZW5ndGhdIFRoZSBlbmQgcG9zaXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VTbGljZShhcnJheSwgc3RhcnQsIGVuZCkge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gICAgICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgICAgIHN0YXJ0ID0gLXN0YXJ0ID4gbGVuZ3RoID8gMCA6IChsZW5ndGggKyBzdGFydCk7XG4gICAgICB9XG4gICAgICBlbmQgPSBlbmQgPiBsZW5ndGggPyBsZW5ndGggOiBlbmQ7XG4gICAgICBpZiAoZW5kIDwgMCkge1xuICAgICAgICBlbmQgKz0gbGVuZ3RoO1xuICAgICAgfVxuICAgICAgbGVuZ3RoID0gc3RhcnQgPiBlbmQgPyAwIDogKChlbmQgLSBzdGFydCkgPj4+IDApO1xuICAgICAgc3RhcnQgPj4+PSAwO1xuXG4gICAgICB2YXIgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdFtpbmRleF0gPSBhcnJheVtpbmRleCArIHN0YXJ0XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc29tZWAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFueSBlbGVtZW50IHBhc3NlcyB0aGUgcHJlZGljYXRlIGNoZWNrLFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVNvbWUoY29sbGVjdGlvbiwgcHJlZGljYXRlKSB7XG4gICAgICB2YXIgcmVzdWx0O1xuXG4gICAgICBiYXNlRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgcmVzdWx0ID0gcHJlZGljYXRlKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgICAgIHJldHVybiAhcmVzdWx0O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gISFyZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc29ydGVkSW5kZXhgIGFuZCBgXy5zb3J0ZWRMYXN0SW5kZXhgIHdoaWNoXG4gICAgICogcGVyZm9ybXMgYSBiaW5hcnkgc2VhcmNoIG9mIGBhcnJheWAgdG8gZGV0ZXJtaW5lIHRoZSBpbmRleCBhdCB3aGljaCBgdmFsdWVgXG4gICAgICogc2hvdWxkIGJlIGluc2VydGVkIGludG8gYGFycmF5YCBpbiBvcmRlciB0byBtYWludGFpbiBpdHMgc29ydCBvcmRlci5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIHNvcnRlZCBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGV2YWx1YXRlLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JldEhpZ2hlc3RdIFNwZWNpZnkgcmV0dXJuaW5nIHRoZSBoaWdoZXN0IHF1YWxpZmllZCBpbmRleC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBhdCB3aGljaCBgdmFsdWVgIHNob3VsZCBiZSBpbnNlcnRlZFxuICAgICAqICBpbnRvIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVNvcnRlZEluZGV4KGFycmF5LCB2YWx1ZSwgcmV0SGlnaGVzdCkge1xuICAgICAgdmFyIGxvdyA9IDAsXG4gICAgICAgICAgaGlnaCA9IGFycmF5ID09IG51bGwgPyBsb3cgOiBhcnJheS5sZW5ndGg7XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiYgdmFsdWUgPT09IHZhbHVlICYmIGhpZ2ggPD0gSEFMRl9NQVhfQVJSQVlfTEVOR1RIKSB7XG4gICAgICAgIHdoaWxlIChsb3cgPCBoaWdoKSB7XG4gICAgICAgICAgdmFyIG1pZCA9IChsb3cgKyBoaWdoKSA+Pj4gMSxcbiAgICAgICAgICAgICAgY29tcHV0ZWQgPSBhcnJheVttaWRdO1xuXG4gICAgICAgICAgaWYgKGNvbXB1dGVkICE9PSBudWxsICYmICFpc1N5bWJvbChjb21wdXRlZCkgJiZcbiAgICAgICAgICAgICAgKHJldEhpZ2hlc3QgPyAoY29tcHV0ZWQgPD0gdmFsdWUpIDogKGNvbXB1dGVkIDwgdmFsdWUpKSkge1xuICAgICAgICAgICAgbG93ID0gbWlkICsgMTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaGlnaCA9IG1pZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhpZ2g7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZVNvcnRlZEluZGV4QnkoYXJyYXksIHZhbHVlLCBpZGVudGl0eSwgcmV0SGlnaGVzdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc29ydGVkSW5kZXhCeWAgYW5kIGBfLnNvcnRlZExhc3RJbmRleEJ5YFxuICAgICAqIHdoaWNoIGludm9rZXMgYGl0ZXJhdGVlYCBmb3IgYHZhbHVlYCBhbmQgZWFjaCBlbGVtZW50IG9mIGBhcnJheWAgdG8gY29tcHV0ZVxuICAgICAqIHRoZWlyIHNvcnQgcmFua2luZy4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ7ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBzb3J0ZWQgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBldmFsdWF0ZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXRIaWdoZXN0XSBTcGVjaWZ5IHJldHVybmluZyB0aGUgaGlnaGVzdCBxdWFsaWZpZWQgaW5kZXguXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggYXQgd2hpY2ggYHZhbHVlYCBzaG91bGQgYmUgaW5zZXJ0ZWRcbiAgICAgKiAgaW50byBgYXJyYXlgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VTb3J0ZWRJbmRleEJ5KGFycmF5LCB2YWx1ZSwgaXRlcmF0ZWUsIHJldEhpZ2hlc3QpIHtcbiAgICAgIHZhbHVlID0gaXRlcmF0ZWUodmFsdWUpO1xuXG4gICAgICB2YXIgbG93ID0gMCxcbiAgICAgICAgICBoaWdoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICAgICAgdmFsSXNOYU4gPSB2YWx1ZSAhPT0gdmFsdWUsXG4gICAgICAgICAgdmFsSXNOdWxsID0gdmFsdWUgPT09IG51bGwsXG4gICAgICAgICAgdmFsSXNTeW1ib2wgPSBpc1N5bWJvbCh2YWx1ZSksXG4gICAgICAgICAgdmFsSXNVbmRlZmluZWQgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xuXG4gICAgICB3aGlsZSAobG93IDwgaGlnaCkge1xuICAgICAgICB2YXIgbWlkID0gbmF0aXZlRmxvb3IoKGxvdyArIGhpZ2gpIC8gMiksXG4gICAgICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlKGFycmF5W21pZF0pLFxuICAgICAgICAgICAgb3RoSXNEZWZpbmVkID0gY29tcHV0ZWQgIT09IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG90aElzTnVsbCA9IGNvbXB1dGVkID09PSBudWxsLFxuICAgICAgICAgICAgb3RoSXNSZWZsZXhpdmUgPSBjb21wdXRlZCA9PT0gY29tcHV0ZWQsXG4gICAgICAgICAgICBvdGhJc1N5bWJvbCA9IGlzU3ltYm9sKGNvbXB1dGVkKTtcblxuICAgICAgICBpZiAodmFsSXNOYU4pIHtcbiAgICAgICAgICB2YXIgc2V0TG93ID0gcmV0SGlnaGVzdCB8fCBvdGhJc1JlZmxleGl2ZTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWxJc1VuZGVmaW5lZCkge1xuICAgICAgICAgIHNldExvdyA9IG90aElzUmVmbGV4aXZlICYmIChyZXRIaWdoZXN0IHx8IG90aElzRGVmaW5lZCk7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsSXNOdWxsKSB7XG4gICAgICAgICAgc2V0TG93ID0gb3RoSXNSZWZsZXhpdmUgJiYgb3RoSXNEZWZpbmVkICYmIChyZXRIaWdoZXN0IHx8ICFvdGhJc051bGwpO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbElzU3ltYm9sKSB7XG4gICAgICAgICAgc2V0TG93ID0gb3RoSXNSZWZsZXhpdmUgJiYgb3RoSXNEZWZpbmVkICYmICFvdGhJc051bGwgJiYgKHJldEhpZ2hlc3QgfHwgIW90aElzU3ltYm9sKTtcbiAgICAgICAgfSBlbHNlIGlmIChvdGhJc051bGwgfHwgb3RoSXNTeW1ib2wpIHtcbiAgICAgICAgICBzZXRMb3cgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRMb3cgPSByZXRIaWdoZXN0ID8gKGNvbXB1dGVkIDw9IHZhbHVlKSA6IChjb21wdXRlZCA8IHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2V0TG93KSB7XG4gICAgICAgICAgbG93ID0gbWlkICsgMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdoID0gbWlkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbmF0aXZlTWluKGhpZ2gsIE1BWF9BUlJBWV9JTkRFWCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc29ydGVkVW5pcWAgYW5kIGBfLnNvcnRlZFVuaXFCeWAgd2l0aG91dFxuICAgICAqIHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZHVwbGljYXRlIGZyZWUgYXJyYXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVNvcnRlZFVuaXEoYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgICAgcmVzSW5kZXggPSAwLFxuICAgICAgICAgIHJlc3VsdCA9IFtdO1xuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlID8gaXRlcmF0ZWUodmFsdWUpIDogdmFsdWU7XG5cbiAgICAgICAgaWYgKCFpbmRleCB8fCAhZXEoY29tcHV0ZWQsIHNlZW4pKSB7XG4gICAgICAgICAgdmFyIHNlZW4gPSBjb21wdXRlZDtcbiAgICAgICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50b051bWJlcmAgd2hpY2ggZG9lc24ndCBlbnN1cmUgY29ycmVjdFxuICAgICAqIGNvbnZlcnNpb25zIG9mIGJpbmFyeSwgaGV4YWRlY2ltYWwsIG9yIG9jdGFsIHN0cmluZyB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgbnVtYmVyLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VUb051bWJlcih2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBOQU47XG4gICAgICB9XG4gICAgICByZXR1cm4gK3ZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRvU3RyaW5nYCB3aGljaCBkb2Vzbid0IGNvbnZlcnQgbnVsbGlzaFxuICAgICAqIHZhbHVlcyB0byBlbXB0eSBzdHJpbmdzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0cmluZy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlVG9TdHJpbmcodmFsdWUpIHtcbiAgICAgIC8vIEV4aXQgZWFybHkgZm9yIHN0cmluZ3MgdG8gYXZvaWQgYSBwZXJmb3JtYW5jZSBoaXQgaW4gc29tZSBlbnZpcm9ubWVudHMuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAvLyBSZWN1cnNpdmVseSBjb252ZXJ0IHZhbHVlcyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgICByZXR1cm4gYXJyYXlNYXAodmFsdWUsIGJhc2VUb1N0cmluZykgKyAnJztcbiAgICAgIH1cbiAgICAgIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHN5bWJvbFRvU3RyaW5nID8gc3ltYm9sVG9TdHJpbmcuY2FsbCh2YWx1ZSkgOiAnJztcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gICAgICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5pcUJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZHVwbGljYXRlIGZyZWUgYXJyYXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVVuaXEoYXJyYXksIGl0ZXJhdGVlLCBjb21wYXJhdG9yKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXMsXG4gICAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIGlzQ29tbW9uID0gdHJ1ZSxcbiAgICAgICAgICByZXN1bHQgPSBbXSxcbiAgICAgICAgICBzZWVuID0gcmVzdWx0O1xuXG4gICAgICBpZiAoY29tcGFyYXRvcikge1xuICAgICAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgICAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXNXaXRoO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAobGVuZ3RoID49IExBUkdFX0FSUkFZX1NJWkUpIHtcbiAgICAgICAgdmFyIHNldCA9IGl0ZXJhdGVlID8gbnVsbCA6IGNyZWF0ZVNldChhcnJheSk7XG4gICAgICAgIGlmIChzZXQpIHtcbiAgICAgICAgICByZXR1cm4gc2V0VG9BcnJheShzZXQpO1xuICAgICAgICB9XG4gICAgICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgICAgIGluY2x1ZGVzID0gY2FjaGVIYXM7XG4gICAgICAgIHNlZW4gPSBuZXcgU2V0Q2FjaGU7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgc2VlbiA9IGl0ZXJhdGVlID8gW10gOiByZXN1bHQ7XG4gICAgICB9XG4gICAgICBvdXRlcjpcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPyBpdGVyYXRlZSh2YWx1ZSkgOiB2YWx1ZTtcblxuICAgICAgICB2YWx1ZSA9IChjb21wYXJhdG9yIHx8IHZhbHVlICE9PSAwKSA/IHZhbHVlIDogMDtcbiAgICAgICAgaWYgKGlzQ29tbW9uICYmIGNvbXB1dGVkID09PSBjb21wdXRlZCkge1xuICAgICAgICAgIHZhciBzZWVuSW5kZXggPSBzZWVuLmxlbmd0aDtcbiAgICAgICAgICB3aGlsZSAoc2VlbkluZGV4LS0pIHtcbiAgICAgICAgICAgIGlmIChzZWVuW3NlZW5JbmRleF0gPT09IGNvbXB1dGVkKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXRlcmF0ZWUpIHtcbiAgICAgICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghaW5jbHVkZXMoc2VlbiwgY29tcHV0ZWQsIGNvbXBhcmF0b3IpKSB7XG4gICAgICAgICAgaWYgKHNlZW4gIT09IHJlc3VsdCkge1xuICAgICAgICAgICAgc2Vlbi5wdXNoKGNvbXB1dGVkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuc2V0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcHJvcGVydHkgcGF0aCB0byB1bnNldC5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHByb3BlcnR5IGlzIGRlbGV0ZWQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlVW5zZXQob2JqZWN0LCBwYXRoKSB7XG4gICAgICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcbiAgICAgIG9iamVjdCA9IHBhcmVudChvYmplY3QsIHBhdGgpO1xuICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsIHx8IGRlbGV0ZSBvYmplY3RbdG9LZXkobGFzdChwYXRoKSldO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVwZGF0ZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHVwZGF0ZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSB1cGRhdGVyIFRoZSBmdW5jdGlvbiB0byBwcm9kdWNlIHRoZSB1cGRhdGVkIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIHBhdGggY3JlYXRpb24uXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlVXBkYXRlKG9iamVjdCwgcGF0aCwgdXBkYXRlciwgY3VzdG9taXplcikge1xuICAgICAgcmV0dXJuIGJhc2VTZXQob2JqZWN0LCBwYXRoLCB1cGRhdGVyKGJhc2VHZXQob2JqZWN0LCBwYXRoKSksIGN1c3RvbWl6ZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIG1ldGhvZHMgbGlrZSBgXy5kcm9wV2hpbGVgIGFuZCBgXy50YWtlV2hpbGVgXG4gICAgICogd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbaXNEcm9wXSBTcGVjaWZ5IGRyb3BwaW5nIGVsZW1lbnRzIGluc3RlYWQgb2YgdGFraW5nIHRoZW0uXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VXaGlsZShhcnJheSwgcHJlZGljYXRlLCBpc0Ryb3AsIGZyb21SaWdodCkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgICBpbmRleCA9IGZyb21SaWdodCA/IGxlbmd0aCA6IC0xO1xuXG4gICAgICB3aGlsZSAoKGZyb21SaWdodCA/IGluZGV4LS0gOiArK2luZGV4IDwgbGVuZ3RoKSAmJlxuICAgICAgICBwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7fVxuXG4gICAgICByZXR1cm4gaXNEcm9wXG4gICAgICAgID8gYmFzZVNsaWNlKGFycmF5LCAoZnJvbVJpZ2h0ID8gMCA6IGluZGV4KSwgKGZyb21SaWdodCA/IGluZGV4ICsgMSA6IGxlbmd0aCkpXG4gICAgICAgIDogYmFzZVNsaWNlKGFycmF5LCAoZnJvbVJpZ2h0ID8gaW5kZXggKyAxIDogMCksIChmcm9tUmlnaHQgPyBsZW5ndGggOiBpbmRleCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGB3cmFwcGVyVmFsdWVgIHdoaWNoIHJldHVybnMgdGhlIHJlc3VsdCBvZlxuICAgICAqIHBlcmZvcm1pbmcgYSBzZXF1ZW5jZSBvZiBhY3Rpb25zIG9uIHRoZSB1bndyYXBwZWQgYHZhbHVlYCwgd2hlcmUgZWFjaFxuICAgICAqIHN1Y2Nlc3NpdmUgYWN0aW9uIGlzIHN1cHBsaWVkIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHByZXZpb3VzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB1bndyYXBwZWQgdmFsdWUuXG4gICAgICogQHBhcmFtIHtBcnJheX0gYWN0aW9ucyBBY3Rpb25zIHRvIHBlcmZvcm0gdG8gcmVzb2x2ZSB0aGUgdW53cmFwcGVkIHZhbHVlLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlV3JhcHBlclZhbHVlKHZhbHVlLCBhY3Rpb25zKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gdmFsdWU7XG4gICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgTGF6eVdyYXBwZXIpIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnZhbHVlKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJyYXlSZWR1Y2UoYWN0aW9ucywgZnVuY3Rpb24ocmVzdWx0LCBhY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGFjdGlvbi5mdW5jLmFwcGx5KGFjdGlvbi50aGlzQXJnLCBhcnJheVB1c2goW3Jlc3VsdF0sIGFjdGlvbi5hcmdzKSk7XG4gICAgICB9LCByZXN1bHQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIG1ldGhvZHMgbGlrZSBgXy54b3JgLCB3aXRob3V0IHN1cHBvcnQgZm9yXG4gICAgICogaXRlcmF0ZWUgc2hvcnRoYW5kcywgdGhhdCBhY2NlcHRzIGFuIGFycmF5IG9mIGFycmF5cyB0byBpbnNwZWN0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheXMgVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgdmFsdWVzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VYb3IoYXJyYXlzLCBpdGVyYXRlZSwgY29tcGFyYXRvcikge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5cy5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3RoIDwgMikge1xuICAgICAgICByZXR1cm4gbGVuZ3RoID8gYmFzZVVuaXEoYXJyYXlzWzBdKSA6IFtdO1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIGFycmF5ID0gYXJyYXlzW2luZGV4XSxcbiAgICAgICAgICAgIG90aEluZGV4ID0gLTE7XG5cbiAgICAgICAgd2hpbGUgKCsrb3RoSW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICBpZiAob3RoSW5kZXggIT0gaW5kZXgpIHtcbiAgICAgICAgICAgIHJlc3VsdFtpbmRleF0gPSBiYXNlRGlmZmVyZW5jZShyZXN1bHRbaW5kZXhdIHx8IGFycmF5LCBhcnJheXNbb3RoSW5kZXhdLCBpdGVyYXRlZSwgY29tcGFyYXRvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZVVuaXEoYmFzZUZsYXR0ZW4ocmVzdWx0LCAxKSwgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy56aXBPYmplY3RgIHdoaWNoIGFzc2lnbnMgdmFsdWVzIHVzaW5nIGBhc3NpZ25GdW5jYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgcHJvcGVydHkgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGFzc2lnbkZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFzc2lnbiB2YWx1ZXMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlWmlwT2JqZWN0KHByb3BzLCB2YWx1ZXMsIGFzc2lnbkZ1bmMpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aCxcbiAgICAgICAgICB2YWxzTGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgICAgICByZXN1bHQgPSB7fTtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gaW5kZXggPCB2YWxzTGVuZ3RoID8gdmFsdWVzW2luZGV4XSA6IHVuZGVmaW5lZDtcbiAgICAgICAgYXNzaWduRnVuYyhyZXN1bHQsIHByb3BzW2luZGV4XSwgdmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXN0cyBgdmFsdWVgIHRvIGFuIGVtcHR5IGFycmF5IGlmIGl0J3Mgbm90IGFuIGFycmF5IGxpa2Ugb2JqZWN0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheXxPYmplY3R9IFJldHVybnMgdGhlIGNhc3QgYXJyYXktbGlrZSBvYmplY3QuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2FzdEFycmF5TGlrZU9iamVjdCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzQXJyYXlMaWtlT2JqZWN0KHZhbHVlKSA/IHZhbHVlIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FzdHMgYHZhbHVlYCB0byBgaWRlbnRpdHlgIGlmIGl0J3Mgbm90IGEgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGNhc3QgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2FzdEZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdmdW5jdGlvbicgPyB2YWx1ZSA6IGlkZW50aXR5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhc3RzIGB2YWx1ZWAgdG8gYSBwYXRoIGFycmF5IGlmIGl0J3Mgbm90IG9uZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNhc3RQYXRoKHZhbHVlLCBvYmplY3QpIHtcbiAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gaXNLZXkodmFsdWUsIG9iamVjdCkgPyBbdmFsdWVdIDogc3RyaW5nVG9QYXRoKHRvU3RyaW5nKHZhbHVlKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBgYmFzZVJlc3RgIGFsaWFzIHdoaWNoIGNhbiBiZSByZXBsYWNlZCB3aXRoIGBpZGVudGl0eWAgYnkgbW9kdWxlXG4gICAgICogcmVwbGFjZW1lbnQgcGx1Z2lucy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge0Z1bmN0aW9ufVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICovXG4gICAgdmFyIGNhc3RSZXN0ID0gYmFzZVJlc3Q7XG5cbiAgICAvKipcbiAgICAgKiBDYXN0cyBgYXJyYXlgIHRvIGEgc2xpY2UgaWYgaXQncyBuZWVkZWQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnQgcG9zaXRpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtlbmQ9YXJyYXkubGVuZ3RoXSBUaGUgZW5kIHBvc2l0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBzbGljZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjYXN0U2xpY2UoYXJyYXksIHN0YXJ0LCBlbmQpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gICAgICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IGVuZDtcbiAgICAgIHJldHVybiAoIXN0YXJ0ICYmIGVuZCA+PSBsZW5ndGgpID8gYXJyYXkgOiBiYXNlU2xpY2UoYXJyYXksIHN0YXJ0LCBlbmQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc2ltcGxlIHdyYXBwZXIgYXJvdW5kIHRoZSBnbG9iYWwgW2BjbGVhclRpbWVvdXRgXShodHRwczovL21kbi5pby9jbGVhclRpbWVvdXQpLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge251bWJlcnxPYmplY3R9IGlkIFRoZSB0aW1lciBpZCBvciB0aW1lb3V0IG9iamVjdCBvZiB0aGUgdGltZXIgdG8gY2xlYXIuXG4gICAgICovXG4gICAgdmFyIGNsZWFyVGltZW91dCA9IGN0eENsZWFyVGltZW91dCB8fCBmdW5jdGlvbihpZCkge1xuICAgICAgcmV0dXJuIHJvb3QuY2xlYXJUaW1lb3V0KGlkKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNsb25lIG9mICBgYnVmZmVyYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZmZlciBUaGUgYnVmZmVyIHRvIGNsb25lLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gICAgICogQHJldHVybnMge0J1ZmZlcn0gUmV0dXJucyB0aGUgY2xvbmVkIGJ1ZmZlci5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbG9uZUJ1ZmZlcihidWZmZXIsIGlzRGVlcCkge1xuICAgICAgaWYgKGlzRGVlcCkge1xuICAgICAgICByZXR1cm4gYnVmZmVyLnNsaWNlKCk7XG4gICAgICB9XG4gICAgICB2YXIgbGVuZ3RoID0gYnVmZmVyLmxlbmd0aCxcbiAgICAgICAgICByZXN1bHQgPSBhbGxvY1Vuc2FmZSA/IGFsbG9jVW5zYWZlKGxlbmd0aCkgOiBuZXcgYnVmZmVyLmNvbnN0cnVjdG9yKGxlbmd0aCk7XG5cbiAgICAgIGJ1ZmZlci5jb3B5KHJlc3VsdCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgYXJyYXlCdWZmZXJgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5QnVmZmVyfSBhcnJheUJ1ZmZlciBUaGUgYXJyYXkgYnVmZmVyIHRvIGNsb25lLlxuICAgICAqIEByZXR1cm5zIHtBcnJheUJ1ZmZlcn0gUmV0dXJucyB0aGUgY2xvbmVkIGFycmF5IGJ1ZmZlci5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbG9uZUFycmF5QnVmZmVyKGFycmF5QnVmZmVyKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbmV3IGFycmF5QnVmZmVyLmNvbnN0cnVjdG9yKGFycmF5QnVmZmVyLmJ5dGVMZW5ndGgpO1xuICAgICAgbmV3IFVpbnQ4QXJyYXkocmVzdWx0KS5zZXQobmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNsb25lIG9mIGBkYXRhVmlld2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhVmlldyBUaGUgZGF0YSB2aWV3IHRvIGNsb25lLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIGRhdGEgdmlldy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbG9uZURhdGFWaWV3KGRhdGFWaWV3LCBpc0RlZXApIHtcbiAgICAgIHZhciBidWZmZXIgPSBpc0RlZXAgPyBjbG9uZUFycmF5QnVmZmVyKGRhdGFWaWV3LmJ1ZmZlcikgOiBkYXRhVmlldy5idWZmZXI7XG4gICAgICByZXR1cm4gbmV3IGRhdGFWaWV3LmNvbnN0cnVjdG9yKGJ1ZmZlciwgZGF0YVZpZXcuYnl0ZU9mZnNldCwgZGF0YVZpZXcuYnl0ZUxlbmd0aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNsb25lIG9mIGByZWdleHBgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gcmVnZXhwIFRoZSByZWdleHAgdG8gY2xvbmUuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHJlZ2V4cC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbG9uZVJlZ0V4cChyZWdleHApIHtcbiAgICAgIHZhciByZXN1bHQgPSBuZXcgcmVnZXhwLmNvbnN0cnVjdG9yKHJlZ2V4cC5zb3VyY2UsIHJlRmxhZ3MuZXhlYyhyZWdleHApKTtcbiAgICAgIHJlc3VsdC5sYXN0SW5kZXggPSByZWdleHAubGFzdEluZGV4O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhlIGBzeW1ib2xgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHN5bWJvbCBUaGUgc3ltYm9sIG9iamVjdCB0byBjbG9uZS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgc3ltYm9sIG9iamVjdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbG9uZVN5bWJvbChzeW1ib2wpIHtcbiAgICAgIHJldHVybiBzeW1ib2xWYWx1ZU9mID8gT2JqZWN0KHN5bWJvbFZhbHVlT2YuY2FsbChzeW1ib2wpKSA6IHt9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgdHlwZWRBcnJheWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSB0eXBlZEFycmF5IFRoZSB0eXBlZCBhcnJheSB0byBjbG9uZS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCB0eXBlZCBhcnJheS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbG9uZVR5cGVkQXJyYXkodHlwZWRBcnJheSwgaXNEZWVwKSB7XG4gICAgICB2YXIgYnVmZmVyID0gaXNEZWVwID8gY2xvbmVBcnJheUJ1ZmZlcih0eXBlZEFycmF5LmJ1ZmZlcikgOiB0eXBlZEFycmF5LmJ1ZmZlcjtcbiAgICAgIHJldHVybiBuZXcgdHlwZWRBcnJheS5jb25zdHJ1Y3RvcihidWZmZXIsIHR5cGVkQXJyYXkuYnl0ZU9mZnNldCwgdHlwZWRBcnJheS5sZW5ndGgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbXBhcmVzIHZhbHVlcyB0byBzb3J0IHRoZW0gaW4gYXNjZW5kaW5nIG9yZGVyLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgc29ydCBvcmRlciBpbmRpY2F0b3IgZm9yIGB2YWx1ZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29tcGFyZUFzY2VuZGluZyh2YWx1ZSwgb3RoZXIpIHtcbiAgICAgIGlmICh2YWx1ZSAhPT0gb3RoZXIpIHtcbiAgICAgICAgdmFyIHZhbElzRGVmaW5lZCA9IHZhbHVlICE9PSB1bmRlZmluZWQsXG4gICAgICAgICAgICB2YWxJc051bGwgPSB2YWx1ZSA9PT0gbnVsbCxcbiAgICAgICAgICAgIHZhbElzUmVmbGV4aXZlID0gdmFsdWUgPT09IHZhbHVlLFxuICAgICAgICAgICAgdmFsSXNTeW1ib2wgPSBpc1N5bWJvbCh2YWx1ZSk7XG5cbiAgICAgICAgdmFyIG90aElzRGVmaW5lZCA9IG90aGVyICE9PSB1bmRlZmluZWQsXG4gICAgICAgICAgICBvdGhJc051bGwgPSBvdGhlciA9PT0gbnVsbCxcbiAgICAgICAgICAgIG90aElzUmVmbGV4aXZlID0gb3RoZXIgPT09IG90aGVyLFxuICAgICAgICAgICAgb3RoSXNTeW1ib2wgPSBpc1N5bWJvbChvdGhlcik7XG5cbiAgICAgICAgaWYgKCghb3RoSXNOdWxsICYmICFvdGhJc1N5bWJvbCAmJiAhdmFsSXNTeW1ib2wgJiYgdmFsdWUgPiBvdGhlcikgfHxcbiAgICAgICAgICAgICh2YWxJc1N5bWJvbCAmJiBvdGhJc0RlZmluZWQgJiYgb3RoSXNSZWZsZXhpdmUgJiYgIW90aElzTnVsbCAmJiAhb3RoSXNTeW1ib2wpIHx8XG4gICAgICAgICAgICAodmFsSXNOdWxsICYmIG90aElzRGVmaW5lZCAmJiBvdGhJc1JlZmxleGl2ZSkgfHxcbiAgICAgICAgICAgICghdmFsSXNEZWZpbmVkICYmIG90aElzUmVmbGV4aXZlKSB8fFxuICAgICAgICAgICAgIXZhbElzUmVmbGV4aXZlKSB7XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCghdmFsSXNOdWxsICYmICF2YWxJc1N5bWJvbCAmJiAhb3RoSXNTeW1ib2wgJiYgdmFsdWUgPCBvdGhlcikgfHxcbiAgICAgICAgICAgIChvdGhJc1N5bWJvbCAmJiB2YWxJc0RlZmluZWQgJiYgdmFsSXNSZWZsZXhpdmUgJiYgIXZhbElzTnVsbCAmJiAhdmFsSXNTeW1ib2wpIHx8XG4gICAgICAgICAgICAob3RoSXNOdWxsICYmIHZhbElzRGVmaW5lZCAmJiB2YWxJc1JlZmxleGl2ZSkgfHxcbiAgICAgICAgICAgICghb3RoSXNEZWZpbmVkICYmIHZhbElzUmVmbGV4aXZlKSB8fFxuICAgICAgICAgICAgIW90aElzUmVmbGV4aXZlKSB7XG4gICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGJ5IGBfLm9yZGVyQnlgIHRvIGNvbXBhcmUgbXVsdGlwbGUgcHJvcGVydGllcyBvZiBhIHZhbHVlIHRvIGFub3RoZXJcbiAgICAgKiBhbmQgc3RhYmxlIHNvcnQgdGhlbS5cbiAgICAgKlxuICAgICAqIElmIGBvcmRlcnNgIGlzIHVuc3BlY2lmaWVkLCBhbGwgdmFsdWVzIGFyZSBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyLiBPdGhlcndpc2UsXG4gICAgICogc3BlY2lmeSBhbiBvcmRlciBvZiBcImRlc2NcIiBmb3IgZGVzY2VuZGluZyBvciBcImFzY1wiIGZvciBhc2NlbmRpbmcgc29ydCBvcmRlclxuICAgICAqIG9mIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbltdfHN0cmluZ1tdfSBvcmRlcnMgVGhlIG9yZGVyIHRvIHNvcnQgYnkgZm9yIGVhY2ggcHJvcGVydHkuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgc29ydCBvcmRlciBpbmRpY2F0b3IgZm9yIGBvYmplY3RgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbXBhcmVNdWx0aXBsZShvYmplY3QsIG90aGVyLCBvcmRlcnMpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIG9iakNyaXRlcmlhID0gb2JqZWN0LmNyaXRlcmlhLFxuICAgICAgICAgIG90aENyaXRlcmlhID0gb3RoZXIuY3JpdGVyaWEsXG4gICAgICAgICAgbGVuZ3RoID0gb2JqQ3JpdGVyaWEubGVuZ3RoLFxuICAgICAgICAgIG9yZGVyc0xlbmd0aCA9IG9yZGVycy5sZW5ndGg7XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBjb21wYXJlQXNjZW5kaW5nKG9iakNyaXRlcmlhW2luZGV4XSwgb3RoQ3JpdGVyaWFbaW5kZXhdKTtcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIGlmIChpbmRleCA+PSBvcmRlcnNMZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBvcmRlciA9IG9yZGVyc1tpbmRleF07XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdCAqIChvcmRlciA9PSAnZGVzYycgPyAtMSA6IDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBGaXhlcyBhbiBgQXJyYXkjc29ydGAgYnVnIGluIHRoZSBKUyBlbmdpbmUgZW1iZWRkZWQgaW4gQWRvYmUgYXBwbGljYXRpb25zXG4gICAgICAvLyB0aGF0IGNhdXNlcyBpdCwgdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzLCB0byBwcm92aWRlIHRoZSBzYW1lIHZhbHVlIGZvclxuICAgICAgLy8gYG9iamVjdGAgYW5kIGBvdGhlcmAuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vamFzaGtlbmFzL3VuZGVyc2NvcmUvcHVsbC8xMjQ3XG4gICAgICAvLyBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgLy9cbiAgICAgIC8vIFRoaXMgYWxzbyBlbnN1cmVzIGEgc3RhYmxlIHNvcnQgaW4gVjggYW5kIG90aGVyIGVuZ2luZXMuXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9OTAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgIHJldHVybiBvYmplY3QuaW5kZXggLSBvdGhlci5pbmRleDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IHRoYXQgaXMgdGhlIGNvbXBvc2l0aW9uIG9mIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cyxcbiAgICAgKiBwbGFjZWhvbGRlcnMsIGFuZCBwcm92aWRlZCBhcmd1bWVudHMgaW50byBhIHNpbmdsZSBhcnJheSBvZiBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBwYXJ0aWFscyBUaGUgYXJndW1lbnRzIHRvIHByZXBlbmQgdG8gdGhvc2UgcHJvdmlkZWQuXG4gICAgICogQHBhcmFtIHtBcnJheX0gaG9sZGVycyBUaGUgYHBhcnRpYWxzYCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICAgICAqIEBwYXJhbXMge2Jvb2xlYW59IFtpc0N1cnJpZWRdIFNwZWNpZnkgY29tcG9zaW5nIGZvciBhIGN1cnJpZWQgZnVuY3Rpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgY29tcG9zZWQgYXJndW1lbnRzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbXBvc2VBcmdzKGFyZ3MsIHBhcnRpYWxzLCBob2xkZXJzLCBpc0N1cnJpZWQpIHtcbiAgICAgIHZhciBhcmdzSW5kZXggPSAtMSxcbiAgICAgICAgICBhcmdzTGVuZ3RoID0gYXJncy5sZW5ndGgsXG4gICAgICAgICAgaG9sZGVyc0xlbmd0aCA9IGhvbGRlcnMubGVuZ3RoLFxuICAgICAgICAgIGxlZnRJbmRleCA9IC0xLFxuICAgICAgICAgIGxlZnRMZW5ndGggPSBwYXJ0aWFscy5sZW5ndGgsXG4gICAgICAgICAgcmFuZ2VMZW5ndGggPSBuYXRpdmVNYXgoYXJnc0xlbmd0aCAtIGhvbGRlcnNMZW5ndGgsIDApLFxuICAgICAgICAgIHJlc3VsdCA9IEFycmF5KGxlZnRMZW5ndGggKyByYW5nZUxlbmd0aCksXG4gICAgICAgICAgaXNVbmN1cnJpZWQgPSAhaXNDdXJyaWVkO1xuXG4gICAgICB3aGlsZSAoKytsZWZ0SW5kZXggPCBsZWZ0TGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdFtsZWZ0SW5kZXhdID0gcGFydGlhbHNbbGVmdEluZGV4XTtcbiAgICAgIH1cbiAgICAgIHdoaWxlICgrK2FyZ3NJbmRleCA8IGhvbGRlcnNMZW5ndGgpIHtcbiAgICAgICAgaWYgKGlzVW5jdXJyaWVkIHx8IGFyZ3NJbmRleCA8IGFyZ3NMZW5ndGgpIHtcbiAgICAgICAgICByZXN1bHRbaG9sZGVyc1thcmdzSW5kZXhdXSA9IGFyZ3NbYXJnc0luZGV4XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgd2hpbGUgKHJhbmdlTGVuZ3RoLS0pIHtcbiAgICAgICAgcmVzdWx0W2xlZnRJbmRleCsrXSA9IGFyZ3NbYXJnc0luZGV4KytdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGNvbXBvc2VBcmdzYCBleGNlcHQgdGhhdCB0aGUgYXJndW1lbnRzIGNvbXBvc2l0aW9uXG4gICAgICogaXMgdGFpbG9yZWQgZm9yIGBfLnBhcnRpYWxSaWdodGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBwYXJ0aWFscyBUaGUgYXJndW1lbnRzIHRvIGFwcGVuZCB0byB0aG9zZSBwcm92aWRlZC5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBob2xkZXJzIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gICAgICogQHBhcmFtcyB7Ym9vbGVhbn0gW2lzQ3VycmllZF0gU3BlY2lmeSBjb21wb3NpbmcgZm9yIGEgY3VycmllZCBmdW5jdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBjb21wb3NlZCBhcmd1bWVudHMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29tcG9zZUFyZ3NSaWdodChhcmdzLCBwYXJ0aWFscywgaG9sZGVycywgaXNDdXJyaWVkKSB7XG4gICAgICB2YXIgYXJnc0luZGV4ID0gLTEsXG4gICAgICAgICAgYXJnc0xlbmd0aCA9IGFyZ3MubGVuZ3RoLFxuICAgICAgICAgIGhvbGRlcnNJbmRleCA9IC0xLFxuICAgICAgICAgIGhvbGRlcnNMZW5ndGggPSBob2xkZXJzLmxlbmd0aCxcbiAgICAgICAgICByaWdodEluZGV4ID0gLTEsXG4gICAgICAgICAgcmlnaHRMZW5ndGggPSBwYXJ0aWFscy5sZW5ndGgsXG4gICAgICAgICAgcmFuZ2VMZW5ndGggPSBuYXRpdmVNYXgoYXJnc0xlbmd0aCAtIGhvbGRlcnNMZW5ndGgsIDApLFxuICAgICAgICAgIHJlc3VsdCA9IEFycmF5KHJhbmdlTGVuZ3RoICsgcmlnaHRMZW5ndGgpLFxuICAgICAgICAgIGlzVW5jdXJyaWVkID0gIWlzQ3VycmllZDtcblxuICAgICAgd2hpbGUgKCsrYXJnc0luZGV4IDwgcmFuZ2VMZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0W2FyZ3NJbmRleF0gPSBhcmdzW2FyZ3NJbmRleF07XG4gICAgICB9XG4gICAgICB2YXIgb2Zmc2V0ID0gYXJnc0luZGV4O1xuICAgICAgd2hpbGUgKCsrcmlnaHRJbmRleCA8IHJpZ2h0TGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdFtvZmZzZXQgKyByaWdodEluZGV4XSA9IHBhcnRpYWxzW3JpZ2h0SW5kZXhdO1xuICAgICAgfVxuICAgICAgd2hpbGUgKCsraG9sZGVyc0luZGV4IDwgaG9sZGVyc0xlbmd0aCkge1xuICAgICAgICBpZiAoaXNVbmN1cnJpZWQgfHwgYXJnc0luZGV4IDwgYXJnc0xlbmd0aCkge1xuICAgICAgICAgIHJlc3VsdFtvZmZzZXQgKyBob2xkZXJzW2hvbGRlcnNJbmRleF1dID0gYXJnc1thcmdzSW5kZXgrK107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29waWVzIHRoZSB2YWx1ZXMgb2YgYHNvdXJjZWAgdG8gYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyBmcm9tLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheT1bXV0gVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIHRvLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvcHlBcnJheShzb3VyY2UsIGFycmF5KSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuXG4gICAgICBhcnJheSB8fCAoYXJyYXkgPSBBcnJheShsZW5ndGgpKTtcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGFycmF5W2luZGV4XSA9IHNvdXJjZVtpbmRleF07XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJyYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29waWVzIHByb3BlcnRpZXMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgaWRlbnRpZmllcnMgdG8gY29weS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgdG8uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29waWVkIHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvcHlPYmplY3Qoc291cmNlLCBwcm9wcywgb2JqZWN0LCBjdXN0b21pemVyKSB7XG4gICAgICB2YXIgaXNOZXcgPSAhb2JqZWN0O1xuICAgICAgb2JqZWN0IHx8IChvYmplY3QgPSB7fSk7XG5cbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIGtleSA9IHByb3BzW2luZGV4XTtcblxuICAgICAgICB2YXIgbmV3VmFsdWUgPSBjdXN0b21pemVyXG4gICAgICAgICAgPyBjdXN0b21pemVyKG9iamVjdFtrZXldLCBzb3VyY2Vba2V5XSwga2V5LCBvYmplY3QsIHNvdXJjZSlcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG5ld1ZhbHVlID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTmV3KSB7XG4gICAgICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb3BpZXMgb3duIHN5bWJvbHMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgZnJvbS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgdG8uXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb3B5U3ltYm9scyhzb3VyY2UsIG9iamVjdCkge1xuICAgICAgcmV0dXJuIGNvcHlPYmplY3Qoc291cmNlLCBnZXRTeW1ib2xzKHNvdXJjZSksIG9iamVjdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29waWVzIG93biBhbmQgaW5oZXJpdGVkIHN5bWJvbHMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgZnJvbS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgdG8uXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb3B5U3ltYm9sc0luKHNvdXJjZSwgb2JqZWN0KSB7XG4gICAgICByZXR1cm4gY29weU9iamVjdChzb3VyY2UsIGdldFN5bWJvbHNJbihzb3VyY2UpLCBvYmplY3QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLmdyb3VwQnlgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXR0ZXIgVGhlIGZ1bmN0aW9uIHRvIHNldCBhY2N1bXVsYXRvciB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2luaXRpYWxpemVyXSBUaGUgYWNjdW11bGF0b3Igb2JqZWN0IGluaXRpYWxpemVyLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFnZ3JlZ2F0b3IgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlQWdncmVnYXRvcihzZXR0ZXIsIGluaXRpYWxpemVyKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlBZ2dyZWdhdG9yIDogYmFzZUFnZ3JlZ2F0b3IsXG4gICAgICAgICAgICBhY2N1bXVsYXRvciA9IGluaXRpYWxpemVyID8gaW5pdGlhbGl6ZXIoKSA6IHt9O1xuXG4gICAgICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIHNldHRlciwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDIpLCBhY2N1bXVsYXRvcik7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLmFzc2lnbmAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGFzc2lnbmVyIFRoZSBmdW5jdGlvbiB0byBhc3NpZ24gdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFzc2lnbmVyIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUFzc2lnbmVyKGFzc2lnbmVyKSB7XG4gICAgICByZXR1cm4gYmFzZVJlc3QoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2VzKSB7XG4gICAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgICAgbGVuZ3RoID0gc291cmNlcy5sZW5ndGgsXG4gICAgICAgICAgICBjdXN0b21pemVyID0gbGVuZ3RoID4gMSA/IHNvdXJjZXNbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBndWFyZCA9IGxlbmd0aCA+IDIgPyBzb3VyY2VzWzJdIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGN1c3RvbWl6ZXIgPSAoYXNzaWduZXIubGVuZ3RoID4gMyAmJiB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nKVxuICAgICAgICAgID8gKGxlbmd0aC0tLCBjdXN0b21pemVyKVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbChzb3VyY2VzWzBdLCBzb3VyY2VzWzFdLCBndWFyZCkpIHtcbiAgICAgICAgICBjdXN0b21pemVyID0gbGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IGN1c3RvbWl6ZXI7XG4gICAgICAgICAgbGVuZ3RoID0gMTtcbiAgICAgICAgfVxuICAgICAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICB2YXIgc291cmNlID0gc291cmNlc1tpbmRleF07XG4gICAgICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICAgICAgYXNzaWduZXIob2JqZWN0LCBzb3VyY2UsIGluZGV4LCBjdXN0b21pemVyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBgYmFzZUVhY2hgIG9yIGBiYXNlRWFjaFJpZ2h0YCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZWFjaEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGl0ZXJhdGUgb3ZlciBhIGNvbGxlY3Rpb24uXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYmFzZSBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVCYXNlRWFjaChlYWNoRnVuYywgZnJvbVJpZ2h0KSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgICAgICAgaWYgKGNvbGxlY3Rpb24gPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNBcnJheUxpa2UoY29sbGVjdGlvbikpIHtcbiAgICAgICAgICByZXR1cm4gZWFjaEZ1bmMoY29sbGVjdGlvbiwgaXRlcmF0ZWUpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aCxcbiAgICAgICAgICAgIGluZGV4ID0gZnJvbVJpZ2h0ID8gbGVuZ3RoIDogLTEsXG4gICAgICAgICAgICBpdGVyYWJsZSA9IE9iamVjdChjb2xsZWN0aW9uKTtcblxuICAgICAgICB3aGlsZSAoKGZyb21SaWdodCA/IGluZGV4LS0gOiArK2luZGV4IDwgbGVuZ3RoKSkge1xuICAgICAgICAgIGlmIChpdGVyYXRlZShpdGVyYWJsZVtpbmRleF0sIGluZGV4LCBpdGVyYWJsZSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBiYXNlIGZ1bmN0aW9uIGZvciBtZXRob2RzIGxpa2UgYF8uZm9ySW5gIGFuZCBgXy5mb3JPd25gLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBiYXNlIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUJhc2VGb3IoZnJvbVJpZ2h0KSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0LCBpdGVyYXRlZSwga2V5c0Z1bmMpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBpdGVyYWJsZSA9IE9iamVjdChvYmplY3QpLFxuICAgICAgICAgICAgcHJvcHMgPSBrZXlzRnVuYyhvYmplY3QpLFxuICAgICAgICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gICAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICAgIHZhciBrZXkgPSBwcm9wc1tmcm9tUmlnaHQgPyBsZW5ndGggOiArK2luZGV4XTtcbiAgICAgICAgICBpZiAoaXRlcmF0ZWUoaXRlcmFibGVba2V5XSwga2V5LCBpdGVyYWJsZSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYGZ1bmNgIHRvIGludm9rZSBpdCB3aXRoIHRoZSBvcHRpb25hbCBgdGhpc2BcbiAgICAgKiBiaW5kaW5nIG9mIGB0aGlzQXJnYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVCaW5kKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcpIHtcbiAgICAgIHZhciBpc0JpbmQgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcsXG4gICAgICAgICAgQ3RvciA9IGNyZWF0ZUN0b3IoZnVuYyk7XG5cbiAgICAgIGZ1bmN0aW9uIHdyYXBwZXIoKSB7XG4gICAgICAgIHZhciBmbiA9ICh0aGlzICYmIHRoaXMgIT09IHJvb3QgJiYgdGhpcyBpbnN0YW5jZW9mIHdyYXBwZXIpID8gQ3RvciA6IGZ1bmM7XG4gICAgICAgIHJldHVybiBmbi5hcHBseShpc0JpbmQgPyB0aGlzQXJnIDogdGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3cmFwcGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLmxvd2VyRmlyc3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kTmFtZSBUaGUgbmFtZSBvZiB0aGUgYFN0cmluZ2AgY2FzZSBtZXRob2QgdG8gdXNlLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhc2UgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlQ2FzZUZpcnN0KG1ldGhvZE5hbWUpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcblxuICAgICAgICB2YXIgc3RyU3ltYm9scyA9IGhhc1VuaWNvZGUoc3RyaW5nKVxuICAgICAgICAgID8gc3RyaW5nVG9BcnJheShzdHJpbmcpXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgdmFyIGNociA9IHN0clN5bWJvbHNcbiAgICAgICAgICA/IHN0clN5bWJvbHNbMF1cbiAgICAgICAgICA6IHN0cmluZy5jaGFyQXQoMCk7XG5cbiAgICAgICAgdmFyIHRyYWlsaW5nID0gc3RyU3ltYm9sc1xuICAgICAgICAgID8gY2FzdFNsaWNlKHN0clN5bWJvbHMsIDEpLmpvaW4oJycpXG4gICAgICAgICAgOiBzdHJpbmcuc2xpY2UoMSk7XG5cbiAgICAgICAgcmV0dXJuIGNoclttZXRob2ROYW1lXSgpICsgdHJhaWxpbmc7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLmNhbWVsQ2FzZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBmdW5jdGlvbiB0byBjb21iaW5lIGVhY2ggd29yZC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb21wb3VuZGVyIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUNvbXBvdW5kZXIoY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIGFycmF5UmVkdWNlKHdvcmRzKGRlYnVycihzdHJpbmcpLnJlcGxhY2UocmVBcG9zLCAnJykpLCBjYWxsYmFjaywgJycpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBwcm9kdWNlcyBhbiBpbnN0YW5jZSBvZiBgQ3RvcmAgcmVnYXJkbGVzcyBvZlxuICAgICAqIHdoZXRoZXIgaXQgd2FzIGludm9rZWQgYXMgcGFydCBvZiBhIGBuZXdgIGV4cHJlc3Npb24gb3IgYnkgYGNhbGxgIG9yIGBhcHBseWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IEN0b3IgVGhlIGNvbnN0cnVjdG9yIHRvIHdyYXAuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVDdG9yKEN0b3IpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgLy8gVXNlIGEgYHN3aXRjaGAgc3RhdGVtZW50IHRvIHdvcmsgd2l0aCBjbGFzcyBjb25zdHJ1Y3RvcnMuIFNlZVxuICAgICAgICAvLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWZ1bmN0aW9uLW9iamVjdHMtY2FsbC10aGlzYXJndW1lbnQtYXJndW1lbnRzbGlzdFxuICAgICAgICAvLyBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBDdG9yO1xuICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0pO1xuICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0pO1xuICAgICAgICAgIGNhc2UgNjogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0sIGFyZ3NbNV0pO1xuICAgICAgICAgIGNhc2UgNzogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0sIGFyZ3NbNV0sIGFyZ3NbNl0pO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0aGlzQmluZGluZyA9IGJhc2VDcmVhdGUoQ3Rvci5wcm90b3R5cGUpLFxuICAgICAgICAgICAgcmVzdWx0ID0gQ3Rvci5hcHBseSh0aGlzQmluZGluZywgYXJncyk7XG5cbiAgICAgICAgLy8gTWltaWMgdGhlIGNvbnN0cnVjdG9yJ3MgYHJldHVybmAgYmVoYXZpb3IuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2VzNS5naXRodWIuaW8vI3gxMy4yLjIgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgICAgcmV0dXJuIGlzT2JqZWN0KHJlc3VsdCkgPyByZXN1bHQgOiB0aGlzQmluZGluZztcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYGZ1bmNgIHRvIGVuYWJsZSBjdXJyeWluZy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBhcml0eSBUaGUgYXJpdHkgb2YgYGZ1bmNgLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlQ3VycnkoZnVuYywgYml0bWFzaywgYXJpdHkpIHtcbiAgICAgIHZhciBDdG9yID0gY3JlYXRlQ3RvcihmdW5jKTtcblxuICAgICAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsXG4gICAgICAgICAgICBhcmdzID0gQXJyYXkobGVuZ3RoKSxcbiAgICAgICAgICAgIGluZGV4ID0gbGVuZ3RoLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXIgPSBnZXRIb2xkZXIod3JhcHBlcik7XG5cbiAgICAgICAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICAgICAgICBhcmdzW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGhvbGRlcnMgPSAobGVuZ3RoIDwgMyAmJiBhcmdzWzBdICE9PSBwbGFjZWhvbGRlciAmJiBhcmdzW2xlbmd0aCAtIDFdICE9PSBwbGFjZWhvbGRlcilcbiAgICAgICAgICA/IFtdXG4gICAgICAgICAgOiByZXBsYWNlSG9sZGVycyhhcmdzLCBwbGFjZWhvbGRlcik7XG5cbiAgICAgICAgbGVuZ3RoIC09IGhvbGRlcnMubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoIDwgYXJpdHkpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlUmVjdXJyeShcbiAgICAgICAgICAgIGZ1bmMsIGJpdG1hc2ssIGNyZWF0ZUh5YnJpZCwgd3JhcHBlci5wbGFjZWhvbGRlciwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgYXJncywgaG9sZGVycywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFyaXR5IC0gbGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZm4gPSAodGhpcyAmJiB0aGlzICE9PSByb290ICYmIHRoaXMgaW5zdGFuY2VvZiB3cmFwcGVyKSA/IEN0b3IgOiBmdW5jO1xuICAgICAgICByZXR1cm4gYXBwbHkoZm4sIHRoaXMsIGFyZ3MpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdyYXBwZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBfLmZpbmRgIG9yIGBfLmZpbmRMYXN0YCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZmluZEluZGV4RnVuYyBUaGUgZnVuY3Rpb24gdG8gZmluZCB0aGUgY29sbGVjdGlvbiBpbmRleC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmaW5kIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUZpbmQoZmluZEluZGV4RnVuYykge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZnJvbUluZGV4KSB7XG4gICAgICAgIHZhciBpdGVyYWJsZSA9IE9iamVjdChjb2xsZWN0aW9uKTtcbiAgICAgICAgaWYgKCFpc0FycmF5TGlrZShjb2xsZWN0aW9uKSkge1xuICAgICAgICAgIHZhciBpdGVyYXRlZSA9IGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMyk7XG4gICAgICAgICAgY29sbGVjdGlvbiA9IGtleXMoY29sbGVjdGlvbik7XG4gICAgICAgICAgcHJlZGljYXRlID0gZnVuY3Rpb24oa2V5KSB7IHJldHVybiBpdGVyYXRlZShpdGVyYWJsZVtrZXldLCBrZXksIGl0ZXJhYmxlKTsgfTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaW5kZXggPSBmaW5kSW5kZXhGdW5jKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZnJvbUluZGV4KTtcbiAgICAgICAgcmV0dXJuIGluZGV4ID4gLTEgPyBpdGVyYWJsZVtpdGVyYXRlZSA/IGNvbGxlY3Rpb25baW5kZXhdIDogaW5kZXhdIDogdW5kZWZpbmVkO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYF8uZmxvd2Agb3IgYF8uZmxvd1JpZ2h0YCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZmxvdyBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVGbG93KGZyb21SaWdodCkge1xuICAgICAgcmV0dXJuIGZsYXRSZXN0KGZ1bmN0aW9uKGZ1bmNzKSB7XG4gICAgICAgIHZhciBsZW5ndGggPSBmdW5jcy5sZW5ndGgsXG4gICAgICAgICAgICBpbmRleCA9IGxlbmd0aCxcbiAgICAgICAgICAgIHByZXJlcSA9IExvZGFzaFdyYXBwZXIucHJvdG90eXBlLnRocnU7XG5cbiAgICAgICAgaWYgKGZyb21SaWdodCkge1xuICAgICAgICAgIGZ1bmNzLnJldmVyc2UoKTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoaW5kZXgtLSkge1xuICAgICAgICAgIHZhciBmdW5jID0gZnVuY3NbaW5kZXhdO1xuICAgICAgICAgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwcmVyZXEgJiYgIXdyYXBwZXIgJiYgZ2V0RnVuY05hbWUoZnVuYykgPT0gJ3dyYXBwZXInKSB7XG4gICAgICAgICAgICB2YXIgd3JhcHBlciA9IG5ldyBMb2Rhc2hXcmFwcGVyKFtdLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaW5kZXggPSB3cmFwcGVyID8gaW5kZXggOiBsZW5ndGg7XG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgZnVuYyA9IGZ1bmNzW2luZGV4XTtcblxuICAgICAgICAgIHZhciBmdW5jTmFtZSA9IGdldEZ1bmNOYW1lKGZ1bmMpLFxuICAgICAgICAgICAgICBkYXRhID0gZnVuY05hbWUgPT0gJ3dyYXBwZXInID8gZ2V0RGF0YShmdW5jKSA6IHVuZGVmaW5lZDtcblxuICAgICAgICAgIGlmIChkYXRhICYmIGlzTGF6aWFibGUoZGF0YVswXSkgJiZcbiAgICAgICAgICAgICAgICBkYXRhWzFdID09IChXUkFQX0FSWV9GTEFHIHwgV1JBUF9DVVJSWV9GTEFHIHwgV1JBUF9QQVJUSUFMX0ZMQUcgfCBXUkFQX1JFQVJHX0ZMQUcpICYmXG4gICAgICAgICAgICAgICAgIWRhdGFbNF0ubGVuZ3RoICYmIGRhdGFbOV0gPT0gMVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgIHdyYXBwZXIgPSB3cmFwcGVyW2dldEZ1bmNOYW1lKGRhdGFbMF0pXS5hcHBseSh3cmFwcGVyLCBkYXRhWzNdKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd3JhcHBlciA9IChmdW5jLmxlbmd0aCA9PSAxICYmIGlzTGF6aWFibGUoZnVuYykpXG4gICAgICAgICAgICAgID8gd3JhcHBlcltmdW5jTmFtZV0oKVxuICAgICAgICAgICAgICA6IHdyYXBwZXIudGhydShmdW5jKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICAgICAgICB2YWx1ZSA9IGFyZ3NbMF07XG5cbiAgICAgICAgICBpZiAod3JhcHBlciAmJiBhcmdzLmxlbmd0aCA9PSAxICYmIGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gd3JhcHBlci5wbGFudCh2YWx1ZSkudmFsdWUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIGluZGV4ID0gMCxcbiAgICAgICAgICAgICAgcmVzdWx0ID0gbGVuZ3RoID8gZnVuY3NbaW5kZXhdLmFwcGx5KHRoaXMsIGFyZ3MpIDogdmFsdWU7XG5cbiAgICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gZnVuY3NbaW5kZXhdLmNhbGwodGhpcywgcmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBpbnZva2UgaXQgd2l0aCBvcHRpb25hbCBgdGhpc2BcbiAgICAgKiBiaW5kaW5nIG9mIGB0aGlzQXJnYCwgcGFydGlhbCBhcHBsaWNhdGlvbiwgYW5kIGN1cnJ5aW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufHN0cmluZ30gZnVuYyBUaGUgZnVuY3Rpb24gb3IgbWV0aG9kIG5hbWUgdG8gd3JhcC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gICAgICogQHBhcmFtIHtBcnJheX0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIHByZXBlbmQgdG8gdGhvc2UgcHJvdmlkZWQgdG9cbiAgICAgKiAgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbaG9sZGVyc10gVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbcGFydGlhbHNSaWdodF0gVGhlIGFyZ3VtZW50cyB0byBhcHBlbmQgdG8gdGhvc2UgcHJvdmlkZWRcbiAgICAgKiAgdG8gdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbaG9sZGVyc1JpZ2h0XSBUaGUgYHBhcnRpYWxzUmlnaHRgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gICAgICogQHBhcmFtIHtBcnJheX0gW2FyZ1Bvc10gVGhlIGFyZ3VtZW50IHBvc2l0aW9ucyBvZiB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJ5XSBUaGUgYXJpdHkgY2FwIG9mIGBmdW5jYC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2FyaXR5XSBUaGUgYXJpdHkgb2YgYGZ1bmNgLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlSHlicmlkKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzLCBwYXJ0aWFsc1JpZ2h0LCBob2xkZXJzUmlnaHQsIGFyZ1BvcywgYXJ5LCBhcml0eSkge1xuICAgICAgdmFyIGlzQXJ5ID0gYml0bWFzayAmIFdSQVBfQVJZX0ZMQUcsXG4gICAgICAgICAgaXNCaW5kID0gYml0bWFzayAmIFdSQVBfQklORF9GTEFHLFxuICAgICAgICAgIGlzQmluZEtleSA9IGJpdG1hc2sgJiBXUkFQX0JJTkRfS0VZX0ZMQUcsXG4gICAgICAgICAgaXNDdXJyaWVkID0gYml0bWFzayAmIChXUkFQX0NVUlJZX0ZMQUcgfCBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcpLFxuICAgICAgICAgIGlzRmxpcCA9IGJpdG1hc2sgJiBXUkFQX0ZMSVBfRkxBRyxcbiAgICAgICAgICBDdG9yID0gaXNCaW5kS2V5ID8gdW5kZWZpbmVkIDogY3JlYXRlQ3RvcihmdW5jKTtcblxuICAgICAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsXG4gICAgICAgICAgICBhcmdzID0gQXJyYXkobGVuZ3RoKSxcbiAgICAgICAgICAgIGluZGV4ID0gbGVuZ3RoO1xuXG4gICAgICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0N1cnJpZWQpIHtcbiAgICAgICAgICB2YXIgcGxhY2Vob2xkZXIgPSBnZXRIb2xkZXIod3JhcHBlciksXG4gICAgICAgICAgICAgIGhvbGRlcnNDb3VudCA9IGNvdW50SG9sZGVycyhhcmdzLCBwbGFjZWhvbGRlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcnRpYWxzKSB7XG4gICAgICAgICAgYXJncyA9IGNvbXBvc2VBcmdzKGFyZ3MsIHBhcnRpYWxzLCBob2xkZXJzLCBpc0N1cnJpZWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJ0aWFsc1JpZ2h0KSB7XG4gICAgICAgICAgYXJncyA9IGNvbXBvc2VBcmdzUmlnaHQoYXJncywgcGFydGlhbHNSaWdodCwgaG9sZGVyc1JpZ2h0LCBpc0N1cnJpZWQpO1xuICAgICAgICB9XG4gICAgICAgIGxlbmd0aCAtPSBob2xkZXJzQ291bnQ7XG4gICAgICAgIGlmIChpc0N1cnJpZWQgJiYgbGVuZ3RoIDwgYXJpdHkpIHtcbiAgICAgICAgICB2YXIgbmV3SG9sZGVycyA9IHJlcGxhY2VIb2xkZXJzKGFyZ3MsIHBsYWNlaG9sZGVyKTtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlUmVjdXJyeShcbiAgICAgICAgICAgIGZ1bmMsIGJpdG1hc2ssIGNyZWF0ZUh5YnJpZCwgd3JhcHBlci5wbGFjZWhvbGRlciwgdGhpc0FyZyxcbiAgICAgICAgICAgIGFyZ3MsIG5ld0hvbGRlcnMsIGFyZ1BvcywgYXJ5LCBhcml0eSAtIGxlbmd0aFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRoaXNCaW5kaW5nID0gaXNCaW5kID8gdGhpc0FyZyA6IHRoaXMsXG4gICAgICAgICAgICBmbiA9IGlzQmluZEtleSA/IHRoaXNCaW5kaW5nW2Z1bmNdIDogZnVuYztcblxuICAgICAgICBsZW5ndGggPSBhcmdzLmxlbmd0aDtcbiAgICAgICAgaWYgKGFyZ1Bvcykge1xuICAgICAgICAgIGFyZ3MgPSByZW9yZGVyKGFyZ3MsIGFyZ1Bvcyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNGbGlwICYmIGxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBhcmdzLnJldmVyc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBcnkgJiYgYXJ5IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgYXJncy5sZW5ndGggPSBhcnk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikge1xuICAgICAgICAgIGZuID0gQ3RvciB8fCBjcmVhdGVDdG9yKGZuKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm4uYXBwbHkodGhpc0JpbmRpbmcsIGFyZ3MpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdyYXBwZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8uaW52ZXJ0QnlgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXR0ZXIgVGhlIGZ1bmN0aW9uIHRvIHNldCBhY2N1bXVsYXRvciB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gdG9JdGVyYXRlZSBUaGUgZnVuY3Rpb24gdG8gcmVzb2x2ZSBpdGVyYXRlZXMuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgaW52ZXJ0ZXIgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlSW52ZXJ0ZXIoc2V0dGVyLCB0b0l0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0LCBpdGVyYXRlZSkge1xuICAgICAgICByZXR1cm4gYmFzZUludmVydGVyKG9iamVjdCwgc2V0dGVyLCB0b0l0ZXJhdGVlKGl0ZXJhdGVlKSwge30pO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBwZXJmb3JtcyBhIG1hdGhlbWF0aWNhbCBvcGVyYXRpb24gb24gdHdvIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gb3BlcmF0b3IgVGhlIGZ1bmN0aW9uIHRvIHBlcmZvcm0gdGhlIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2RlZmF1bHRWYWx1ZV0gVGhlIHZhbHVlIHVzZWQgZm9yIGB1bmRlZmluZWRgIGFyZ3VtZW50cy5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtYXRoZW1hdGljYWwgb3BlcmF0aW9uIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZU1hdGhPcGVyYXRpb24ob3BlcmF0b3IsIGRlZmF1bHRWYWx1ZSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBvdGhlcikge1xuICAgICAgICB2YXIgcmVzdWx0O1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBvdGhlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvdGhlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gb3RoZXI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgdHlwZW9mIG90aGVyID09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGJhc2VUb1N0cmluZyh2YWx1ZSk7XG4gICAgICAgICAgICBvdGhlciA9IGJhc2VUb1N0cmluZyhvdGhlcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlID0gYmFzZVRvTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgICAgIG90aGVyID0gYmFzZVRvTnVtYmVyKG90aGVyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzdWx0ID0gb3BlcmF0b3IodmFsdWUsIG90aGVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5vdmVyYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gYXJyYXlGdW5jIFRoZSBmdW5jdGlvbiB0byBpdGVyYXRlIG92ZXIgaXRlcmF0ZWVzLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG92ZXIgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlT3ZlcihhcnJheUZ1bmMpIHtcbiAgICAgIHJldHVybiBmbGF0UmVzdChmdW5jdGlvbihpdGVyYXRlZXMpIHtcbiAgICAgICAgaXRlcmF0ZWVzID0gYXJyYXlNYXAoaXRlcmF0ZWVzLCBiYXNlVW5hcnkoZ2V0SXRlcmF0ZWUoKSkpO1xuICAgICAgICByZXR1cm4gYmFzZVJlc3QoZnVuY3Rpb24oYXJncykge1xuICAgICAgICAgIHZhciB0aGlzQXJnID0gdGhpcztcbiAgICAgICAgICByZXR1cm4gYXJyYXlGdW5jKGl0ZXJhdGVlcywgZnVuY3Rpb24oaXRlcmF0ZWUpIHtcbiAgICAgICAgICAgIHJldHVybiBhcHBseShpdGVyYXRlZSwgdGhpc0FyZywgYXJncyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyB0aGUgcGFkZGluZyBmb3IgYHN0cmluZ2AgYmFzZWQgb24gYGxlbmd0aGAuIFRoZSBgY2hhcnNgIHN0cmluZ1xuICAgICAqIGlzIHRydW5jYXRlZCBpZiB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgZXhjZWVkcyBgbGVuZ3RoYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aCBUaGUgcGFkZGluZyBsZW5ndGguXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtjaGFycz0nICddIFRoZSBzdHJpbmcgdXNlZCBhcyBwYWRkaW5nLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHBhZGRpbmcgZm9yIGBzdHJpbmdgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZVBhZGRpbmcobGVuZ3RoLCBjaGFycykge1xuICAgICAgY2hhcnMgPSBjaGFycyA9PT0gdW5kZWZpbmVkID8gJyAnIDogYmFzZVRvU3RyaW5nKGNoYXJzKTtcblxuICAgICAgdmFyIGNoYXJzTGVuZ3RoID0gY2hhcnMubGVuZ3RoO1xuICAgICAgaWYgKGNoYXJzTGVuZ3RoIDwgMikge1xuICAgICAgICByZXR1cm4gY2hhcnNMZW5ndGggPyBiYXNlUmVwZWF0KGNoYXJzLCBsZW5ndGgpIDogY2hhcnM7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0ID0gYmFzZVJlcGVhdChjaGFycywgbmF0aXZlQ2VpbChsZW5ndGggLyBzdHJpbmdTaXplKGNoYXJzKSkpO1xuICAgICAgcmV0dXJuIGhhc1VuaWNvZGUoY2hhcnMpXG4gICAgICAgID8gY2FzdFNsaWNlKHN0cmluZ1RvQXJyYXkocmVzdWx0KSwgMCwgbGVuZ3RoKS5qb2luKCcnKVxuICAgICAgICA6IHJlc3VsdC5zbGljZSgwLCBsZW5ndGgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBpbnZva2UgaXQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmdcbiAgICAgKiBvZiBgdGhpc0FyZ2AgYW5kIGBwYXJ0aWFsc2AgcHJlcGVuZGVkIHRvIHRoZSBhcmd1bWVudHMgaXQgcmVjZWl2ZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBwYXJ0aWFscyBUaGUgYXJndW1lbnRzIHRvIHByZXBlbmQgdG8gdGhvc2UgcHJvdmlkZWQgdG9cbiAgICAgKiAgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZVBhcnRpYWwoZnVuYywgYml0bWFzaywgdGhpc0FyZywgcGFydGlhbHMpIHtcbiAgICAgIHZhciBpc0JpbmQgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcsXG4gICAgICAgICAgQ3RvciA9IGNyZWF0ZUN0b3IoZnVuYyk7XG5cbiAgICAgIGZ1bmN0aW9uIHdyYXBwZXIoKSB7XG4gICAgICAgIHZhciBhcmdzSW5kZXggPSAtMSxcbiAgICAgICAgICAgIGFyZ3NMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuICAgICAgICAgICAgbGVmdEluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZWZ0TGVuZ3RoID0gcGFydGlhbHMubGVuZ3RoLFxuICAgICAgICAgICAgYXJncyA9IEFycmF5KGxlZnRMZW5ndGggKyBhcmdzTGVuZ3RoKSxcbiAgICAgICAgICAgIGZuID0gKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikgPyBDdG9yIDogZnVuYztcblxuICAgICAgICB3aGlsZSAoKytsZWZ0SW5kZXggPCBsZWZ0TGVuZ3RoKSB7XG4gICAgICAgICAgYXJnc1tsZWZ0SW5kZXhdID0gcGFydGlhbHNbbGVmdEluZGV4XTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoYXJnc0xlbmd0aC0tKSB7XG4gICAgICAgICAgYXJnc1tsZWZ0SW5kZXgrK10gPSBhcmd1bWVudHNbKythcmdzSW5kZXhdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcHBseShmbiwgaXNCaW5kID8gdGhpc0FyZyA6IHRoaXMsIGFyZ3MpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdyYXBwZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBfLnJhbmdlYCBvciBgXy5yYW5nZVJpZ2h0YCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcmFuZ2UgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlUmFuZ2UoZnJvbVJpZ2h0KSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oc3RhcnQsIGVuZCwgc3RlcCkge1xuICAgICAgICBpZiAoc3RlcCAmJiB0eXBlb2Ygc3RlcCAhPSAnbnVtYmVyJyAmJiBpc0l0ZXJhdGVlQ2FsbChzdGFydCwgZW5kLCBzdGVwKSkge1xuICAgICAgICAgIGVuZCA9IHN0ZXAgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRW5zdXJlIHRoZSBzaWduIG9mIGAtMGAgaXMgcHJlc2VydmVkLlxuICAgICAgICBzdGFydCA9IHRvRmluaXRlKHN0YXJ0KTtcbiAgICAgICAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZW5kID0gc3RhcnQ7XG4gICAgICAgICAgc3RhcnQgPSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVuZCA9IHRvRmluaXRlKGVuZCk7XG4gICAgICAgIH1cbiAgICAgICAgc3RlcCA9IHN0ZXAgPT09IHVuZGVmaW5lZCA/IChzdGFydCA8IGVuZCA/IDEgOiAtMSkgOiB0b0Zpbml0ZShzdGVwKTtcbiAgICAgICAgcmV0dXJuIGJhc2VSYW5nZShzdGFydCwgZW5kLCBzdGVwLCBmcm9tUmlnaHQpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBwZXJmb3JtcyBhIHJlbGF0aW9uYWwgb3BlcmF0aW9uIG9uIHR3byB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IG9wZXJhdG9yIFRoZSBmdW5jdGlvbiB0byBwZXJmb3JtIHRoZSBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcmVsYXRpb25hbCBvcGVyYXRpb24gZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlUmVsYXRpb25hbE9wZXJhdGlvbihvcGVyYXRvcikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBvdGhlcikge1xuICAgICAgICBpZiAoISh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgJiYgdHlwZW9mIG90aGVyID09ICdzdHJpbmcnKSkge1xuICAgICAgICAgIHZhbHVlID0gdG9OdW1iZXIodmFsdWUpO1xuICAgICAgICAgIG90aGVyID0gdG9OdW1iZXIob3RoZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvcGVyYXRvcih2YWx1ZSwgb3RoZXIpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZnVuY2AgdG8gY29udGludWUgY3VycnlpbmcuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSB3cmFwRnVuYyBUaGUgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBgZnVuY2Agd3JhcHBlci5cbiAgICAgKiBAcGFyYW0geyp9IHBsYWNlaG9sZGVyIFRoZSBwbGFjZWhvbGRlciB2YWx1ZS5cbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBwcmVwZW5kIHRvIHRob3NlIHByb3ZpZGVkIHRvXG4gICAgICogIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIHtBcnJheX0gW2hvbGRlcnNdIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gICAgICogQHBhcmFtIHtBcnJheX0gW2FyZ1Bvc10gVGhlIGFyZ3VtZW50IHBvc2l0aW9ucyBvZiB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJ5XSBUaGUgYXJpdHkgY2FwIG9mIGBmdW5jYC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2FyaXR5XSBUaGUgYXJpdHkgb2YgYGZ1bmNgLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlUmVjdXJyeShmdW5jLCBiaXRtYXNrLCB3cmFwRnVuYywgcGxhY2Vob2xkZXIsIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzLCBhcmdQb3MsIGFyeSwgYXJpdHkpIHtcbiAgICAgIHZhciBpc0N1cnJ5ID0gYml0bWFzayAmIFdSQVBfQ1VSUllfRkxBRyxcbiAgICAgICAgICBuZXdIb2xkZXJzID0gaXNDdXJyeSA/IGhvbGRlcnMgOiB1bmRlZmluZWQsXG4gICAgICAgICAgbmV3SG9sZGVyc1JpZ2h0ID0gaXNDdXJyeSA/IHVuZGVmaW5lZCA6IGhvbGRlcnMsXG4gICAgICAgICAgbmV3UGFydGlhbHMgPSBpc0N1cnJ5ID8gcGFydGlhbHMgOiB1bmRlZmluZWQsXG4gICAgICAgICAgbmV3UGFydGlhbHNSaWdodCA9IGlzQ3VycnkgPyB1bmRlZmluZWQgOiBwYXJ0aWFscztcblxuICAgICAgYml0bWFzayB8PSAoaXNDdXJyeSA/IFdSQVBfUEFSVElBTF9GTEFHIDogV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcpO1xuICAgICAgYml0bWFzayAmPSB+KGlzQ3VycnkgPyBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyA6IFdSQVBfUEFSVElBTF9GTEFHKTtcblxuICAgICAgaWYgKCEoYml0bWFzayAmIFdSQVBfQ1VSUllfQk9VTkRfRkxBRykpIHtcbiAgICAgICAgYml0bWFzayAmPSB+KFdSQVBfQklORF9GTEFHIHwgV1JBUF9CSU5EX0tFWV9GTEFHKTtcbiAgICAgIH1cbiAgICAgIHZhciBuZXdEYXRhID0gW1xuICAgICAgICBmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBuZXdQYXJ0aWFscywgbmV3SG9sZGVycywgbmV3UGFydGlhbHNSaWdodCxcbiAgICAgICAgbmV3SG9sZGVyc1JpZ2h0LCBhcmdQb3MsIGFyeSwgYXJpdHlcbiAgICAgIF07XG5cbiAgICAgIHZhciByZXN1bHQgPSB3cmFwRnVuYy5hcHBseSh1bmRlZmluZWQsIG5ld0RhdGEpO1xuICAgICAgaWYgKGlzTGF6aWFibGUoZnVuYykpIHtcbiAgICAgICAgc2V0RGF0YShyZXN1bHQsIG5ld0RhdGEpO1xuICAgICAgfVxuICAgICAgcmVzdWx0LnBsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXI7XG4gICAgICByZXR1cm4gc2V0V3JhcFRvU3RyaW5nKHJlc3VsdCwgZnVuYywgYml0bWFzayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8ucm91bmRgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kTmFtZSBUaGUgbmFtZSBvZiB0aGUgYE1hdGhgIG1ldGhvZCB0byB1c2Ugd2hlbiByb3VuZGluZy5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyByb3VuZCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVSb3VuZChtZXRob2ROYW1lKSB7XG4gICAgICB2YXIgZnVuYyA9IE1hdGhbbWV0aG9kTmFtZV07XG4gICAgICByZXR1cm4gZnVuY3Rpb24obnVtYmVyLCBwcmVjaXNpb24pIHtcbiAgICAgICAgbnVtYmVyID0gdG9OdW1iZXIobnVtYmVyKTtcbiAgICAgICAgcHJlY2lzaW9uID0gcHJlY2lzaW9uID09IG51bGwgPyAwIDogbmF0aXZlTWluKHRvSW50ZWdlcihwcmVjaXNpb24pLCAyOTIpO1xuICAgICAgICBpZiAocHJlY2lzaW9uICYmIG5hdGl2ZUlzRmluaXRlKG51bWJlcikpIHtcbiAgICAgICAgICAvLyBTaGlmdCB3aXRoIGV4cG9uZW50aWFsIG5vdGF0aW9uIHRvIGF2b2lkIGZsb2F0aW5nLXBvaW50IGlzc3Vlcy5cbiAgICAgICAgICAvLyBTZWUgW01ETl0oaHR0cHM6Ly9tZG4uaW8vcm91bmQjRXhhbXBsZXMpIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICAgICAgdmFyIHBhaXIgPSAodG9TdHJpbmcobnVtYmVyKSArICdlJykuc3BsaXQoJ2UnKSxcbiAgICAgICAgICAgICAgdmFsdWUgPSBmdW5jKHBhaXJbMF0gKyAnZScgKyAoK3BhaXJbMV0gKyBwcmVjaXNpb24pKTtcblxuICAgICAgICAgIHBhaXIgPSAodG9TdHJpbmcodmFsdWUpICsgJ2UnKS5zcGxpdCgnZScpO1xuICAgICAgICAgIHJldHVybiArKHBhaXJbMF0gKyAnZScgKyAoK3BhaXJbMV0gLSBwcmVjaXNpb24pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVuYyhudW1iZXIpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2V0IG9iamVjdCBvZiBgdmFsdWVzYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYWRkIHRvIHRoZSBzZXQuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IHNldC5cbiAgICAgKi9cbiAgICB2YXIgY3JlYXRlU2V0ID0gIShTZXQgJiYgKDEgLyBzZXRUb0FycmF5KG5ldyBTZXQoWywtMF0pKVsxXSkgPT0gSU5GSU5JVFkpID8gbm9vcCA6IGZ1bmN0aW9uKHZhbHVlcykge1xuICAgICAgcmV0dXJuIG5ldyBTZXQodmFsdWVzKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBfLnRvUGFpcnNgIG9yIGBfLnRvUGFpcnNJbmAgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYSBnaXZlbiBvYmplY3QuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcGFpcnMgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlVG9QYWlycyhrZXlzRnVuYykge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAgICB2YXIgdGFnID0gZ2V0VGFnKG9iamVjdCk7XG4gICAgICAgIGlmICh0YWcgPT0gbWFwVGFnKSB7XG4gICAgICAgICAgcmV0dXJuIG1hcFRvQXJyYXkob2JqZWN0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGFnID09IHNldFRhZykge1xuICAgICAgICAgIHJldHVybiBzZXRUb1BhaXJzKG9iamVjdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJhc2VUb1BhaXJzKG9iamVjdCwga2V5c0Z1bmMob2JqZWN0KSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGVpdGhlciBjdXJyaWVzIG9yIGludm9rZXMgYGZ1bmNgIHdpdGggb3B0aW9uYWxcbiAgICAgKiBgdGhpc2AgYmluZGluZyBhbmQgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufHN0cmluZ30gZnVuYyBUaGUgZnVuY3Rpb24gb3IgbWV0aG9kIG5hbWUgdG8gd3JhcC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAgICAgKiAgICAxIC0gYF8uYmluZGBcbiAgICAgKiAgICAyIC0gYF8uYmluZEtleWBcbiAgICAgKiAgICA0IC0gYF8uY3VycnlgIG9yIGBfLmN1cnJ5UmlnaHRgIG9mIGEgYm91bmQgZnVuY3Rpb25cbiAgICAgKiAgICA4IC0gYF8uY3VycnlgXG4gICAgICogICAxNiAtIGBfLmN1cnJ5UmlnaHRgXG4gICAgICogICAzMiAtIGBfLnBhcnRpYWxgXG4gICAgICogICA2NCAtIGBfLnBhcnRpYWxSaWdodGBcbiAgICAgKiAgMTI4IC0gYF8ucmVhcmdgXG4gICAgICogIDI1NiAtIGBfLmFyeWBcbiAgICAgKiAgNTEyIC0gYF8uZmxpcGBcbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBiZSBwYXJ0aWFsbHkgYXBwbGllZC5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbaG9sZGVyc10gVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbYXJnUG9zXSBUaGUgYXJndW1lbnQgcG9zaXRpb25zIG9mIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFthcnldIFRoZSBhcml0eSBjYXAgb2YgYGZ1bmNgLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJpdHldIFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVXcmFwKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzLCBhcmdQb3MsIGFyeSwgYXJpdHkpIHtcbiAgICAgIHZhciBpc0JpbmRLZXkgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0tFWV9GTEFHO1xuICAgICAgaWYgKCFpc0JpbmRLZXkgJiYgdHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gICAgICB9XG4gICAgICB2YXIgbGVuZ3RoID0gcGFydGlhbHMgPyBwYXJ0aWFscy5sZW5ndGggOiAwO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgYml0bWFzayAmPSB+KFdSQVBfUEFSVElBTF9GTEFHIHwgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcpO1xuICAgICAgICBwYXJ0aWFscyA9IGhvbGRlcnMgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBhcnkgPSBhcnkgPT09IHVuZGVmaW5lZCA/IGFyeSA6IG5hdGl2ZU1heCh0b0ludGVnZXIoYXJ5KSwgMCk7XG4gICAgICBhcml0eSA9IGFyaXR5ID09PSB1bmRlZmluZWQgPyBhcml0eSA6IHRvSW50ZWdlcihhcml0eSk7XG4gICAgICBsZW5ndGggLT0gaG9sZGVycyA/IGhvbGRlcnMubGVuZ3RoIDogMDtcblxuICAgICAgaWYgKGJpdG1hc2sgJiBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRykge1xuICAgICAgICB2YXIgcGFydGlhbHNSaWdodCA9IHBhcnRpYWxzLFxuICAgICAgICAgICAgaG9sZGVyc1JpZ2h0ID0gaG9sZGVycztcblxuICAgICAgICBwYXJ0aWFscyA9IGhvbGRlcnMgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICB2YXIgZGF0YSA9IGlzQmluZEtleSA/IHVuZGVmaW5lZCA6IGdldERhdGEoZnVuYyk7XG5cbiAgICAgIHZhciBuZXdEYXRhID0gW1xuICAgICAgICBmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscywgaG9sZGVycywgcGFydGlhbHNSaWdodCwgaG9sZGVyc1JpZ2h0LFxuICAgICAgICBhcmdQb3MsIGFyeSwgYXJpdHlcbiAgICAgIF07XG5cbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIG1lcmdlRGF0YShuZXdEYXRhLCBkYXRhKTtcbiAgICAgIH1cbiAgICAgIGZ1bmMgPSBuZXdEYXRhWzBdO1xuICAgICAgYml0bWFzayA9IG5ld0RhdGFbMV07XG4gICAgICB0aGlzQXJnID0gbmV3RGF0YVsyXTtcbiAgICAgIHBhcnRpYWxzID0gbmV3RGF0YVszXTtcbiAgICAgIGhvbGRlcnMgPSBuZXdEYXRhWzRdO1xuICAgICAgYXJpdHkgPSBuZXdEYXRhWzldID0gbmV3RGF0YVs5XSA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8gKGlzQmluZEtleSA/IDAgOiBmdW5jLmxlbmd0aClcbiAgICAgICAgOiBuYXRpdmVNYXgobmV3RGF0YVs5XSAtIGxlbmd0aCwgMCk7XG5cbiAgICAgIGlmICghYXJpdHkgJiYgYml0bWFzayAmIChXUkFQX0NVUlJZX0ZMQUcgfCBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcpKSB7XG4gICAgICAgIGJpdG1hc2sgJj0gfihXUkFQX0NVUlJZX0ZMQUcgfCBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcpO1xuICAgICAgfVxuICAgICAgaWYgKCFiaXRtYXNrIHx8IGJpdG1hc2sgPT0gV1JBUF9CSU5EX0ZMQUcpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGNyZWF0ZUJpbmQoZnVuYywgYml0bWFzaywgdGhpc0FyZyk7XG4gICAgICB9IGVsc2UgaWYgKGJpdG1hc2sgPT0gV1JBUF9DVVJSWV9GTEFHIHx8IGJpdG1hc2sgPT0gV1JBUF9DVVJSWV9SSUdIVF9GTEFHKSB7XG4gICAgICAgIHJlc3VsdCA9IGNyZWF0ZUN1cnJ5KGZ1bmMsIGJpdG1hc2ssIGFyaXR5KTtcbiAgICAgIH0gZWxzZSBpZiAoKGJpdG1hc2sgPT0gV1JBUF9QQVJUSUFMX0ZMQUcgfHwgYml0bWFzayA9PSAoV1JBUF9CSU5EX0ZMQUcgfCBXUkFQX1BBUlRJQUxfRkxBRykpICYmICFob2xkZXJzLmxlbmd0aCkge1xuICAgICAgICByZXN1bHQgPSBjcmVhdGVQYXJ0aWFsKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IGNyZWF0ZUh5YnJpZC5hcHBseSh1bmRlZmluZWQsIG5ld0RhdGEpO1xuICAgICAgfVxuICAgICAgdmFyIHNldHRlciA9IGRhdGEgPyBiYXNlU2V0RGF0YSA6IHNldERhdGE7XG4gICAgICByZXR1cm4gc2V0V3JhcFRvU3RyaW5nKHNldHRlcihyZXN1bHQsIG5ld0RhdGEpLCBmdW5jLCBiaXRtYXNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGJ5IGBfLmRlZmF1bHRzYCB0byBjdXN0b21pemUgaXRzIGBfLmFzc2lnbkluYCB1c2UgdG8gYXNzaWduIHByb3BlcnRpZXNcbiAgICAgKiBvZiBzb3VyY2Ugb2JqZWN0cyB0byB0aGUgZGVzdGluYXRpb24gb2JqZWN0IGZvciBhbGwgZGVzdGluYXRpb24gcHJvcGVydGllc1xuICAgICAqIHRoYXQgcmVzb2x2ZSB0byBgdW5kZWZpbmVkYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSBvYmpWYWx1ZSBUaGUgZGVzdGluYXRpb24gdmFsdWUuXG4gICAgICogQHBhcmFtIHsqfSBzcmNWYWx1ZSBUaGUgc291cmNlIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHBhcmVudCBvYmplY3Qgb2YgYG9ialZhbHVlYC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgdmFsdWUgdG8gYXNzaWduLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGN1c3RvbURlZmF1bHRzQXNzaWduSW4ob2JqVmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCkge1xuICAgICAgaWYgKG9ialZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAoZXEob2JqVmFsdWUsIG9iamVjdFByb3RvW2tleV0pICYmICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpIHtcbiAgICAgICAgcmV0dXJuIHNyY1ZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9ialZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVzZWQgYnkgYF8uZGVmYXVsdHNEZWVwYCB0byBjdXN0b21pemUgaXRzIGBfLm1lcmdlYCB1c2UgdG8gbWVyZ2Ugc291cmNlXG4gICAgICogb2JqZWN0cyBpbnRvIGRlc3RpbmF0aW9uIG9iamVjdHMgdGhhdCBhcmUgcGFzc2VkIHRocnUuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gb2JqVmFsdWUgVGhlIGRlc3RpbmF0aW9uIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHNvdXJjZSB2YWx1ZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIG1lcmdlLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHBhcmVudCBvYmplY3Qgb2YgYG9ialZhbHVlYC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBwYXJlbnQgb2JqZWN0IG9mIGBzcmNWYWx1ZWAuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBzb3VyY2UgdmFsdWVzIGFuZCB0aGVpciBtZXJnZWRcbiAgICAgKiAgY291bnRlcnBhcnRzLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3VzdG9tRGVmYXVsdHNNZXJnZShvYmpWYWx1ZSwgc3JjVmFsdWUsIGtleSwgb2JqZWN0LCBzb3VyY2UsIHN0YWNrKSB7XG4gICAgICBpZiAoaXNPYmplY3Qob2JqVmFsdWUpICYmIGlzT2JqZWN0KHNyY1ZhbHVlKSkge1xuICAgICAgICAvLyBSZWN1cnNpdmVseSBtZXJnZSBvYmplY3RzIGFuZCBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgICAgc3RhY2suc2V0KHNyY1ZhbHVlLCBvYmpWYWx1ZSk7XG4gICAgICAgIGJhc2VNZXJnZShvYmpWYWx1ZSwgc3JjVmFsdWUsIHVuZGVmaW5lZCwgY3VzdG9tRGVmYXVsdHNNZXJnZSwgc3RhY2spO1xuICAgICAgICBzdGFja1snZGVsZXRlJ10oc3JjVmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9ialZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVzZWQgYnkgYF8ub21pdGAgdG8gY3VzdG9taXplIGl0cyBgXy5jbG9uZURlZXBgIHVzZSB0byBvbmx5IGNsb25lIHBsYWluXG4gICAgICogb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHVuY2xvbmVkIHZhbHVlIG9yIGB1bmRlZmluZWRgIHRvIGRlZmVyIGNsb25pbmcgdG8gYF8uY2xvbmVEZWVwYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjdXN0b21PbWl0Q2xvbmUodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc1BsYWluT2JqZWN0KHZhbHVlKSA/IHVuZGVmaW5lZCA6IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgYXJyYXlzIHdpdGggc3VwcG9ydCBmb3JcbiAgICAgKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IG90aGVyIFRoZSBvdGhlciBhcnJheSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYGFycmF5YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJyYXlzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZXF1YWxBcnJheXMoYXJyYXksIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gICAgICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxuICAgICAgICAgIGFyckxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgICBvdGhMZW5ndGggPSBvdGhlci5sZW5ndGg7XG5cbiAgICAgIGlmIChhcnJMZW5ndGggIT0gb3RoTGVuZ3RoICYmICEoaXNQYXJ0aWFsICYmIG90aExlbmd0aCA+IGFyckxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICAgICAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQoYXJyYXkpO1xuICAgICAgaWYgKHN0YWNrZWQgJiYgc3RhY2suZ2V0KG90aGVyKSkge1xuICAgICAgICByZXR1cm4gc3RhY2tlZCA9PSBvdGhlcjtcbiAgICAgIH1cbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIHJlc3VsdCA9IHRydWUsXG4gICAgICAgICAgc2VlbiA9IChiaXRtYXNrICYgQ09NUEFSRV9VTk9SREVSRURfRkxBRykgPyBuZXcgU2V0Q2FjaGUgOiB1bmRlZmluZWQ7XG5cbiAgICAgIHN0YWNrLnNldChhcnJheSwgb3RoZXIpO1xuICAgICAgc3RhY2suc2V0KG90aGVyLCBhcnJheSk7XG5cbiAgICAgIC8vIElnbm9yZSBub24taW5kZXggcHJvcGVydGllcy5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgYXJyTGVuZ3RoKSB7XG4gICAgICAgIHZhciBhcnJWYWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICAgIG90aFZhbHVlID0gb3RoZXJbaW5kZXhdO1xuXG4gICAgICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXG4gICAgICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIGFyclZhbHVlLCBpbmRleCwgb3RoZXIsIGFycmF5LCBzdGFjaylcbiAgICAgICAgICAgIDogY3VzdG9taXplcihhcnJWYWx1ZSwgb3RoVmFsdWUsIGluZGV4LCBhcnJheSwgb3RoZXIsIHN0YWNrKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tcGFyZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmIChjb21wYXJlZCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICAgIGlmIChzZWVuKSB7XG4gICAgICAgICAgaWYgKCFhcnJheVNvbWUob3RoZXIsIGZ1bmN0aW9uKG90aFZhbHVlLCBvdGhJbmRleCkge1xuICAgICAgICAgICAgICAgIGlmICghY2FjaGVIYXMoc2Vlbiwgb3RoSW5kZXgpICYmXG4gICAgICAgICAgICAgICAgICAgIChhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHwgZXF1YWxGdW5jKGFyclZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spKSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlZW4ucHVzaChvdGhJbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoIShcbiAgICAgICAgICAgICAgYXJyVmFsdWUgPT09IG90aFZhbHVlIHx8XG4gICAgICAgICAgICAgICAgZXF1YWxGdW5jKGFyclZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHN0YWNrWydkZWxldGUnXShhcnJheSk7XG4gICAgICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGNvbXBhcmluZyBvYmplY3RzIG9mXG4gICAgICogdGhlIHNhbWUgYHRvU3RyaW5nVGFnYC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIGZ1bmN0aW9uIG9ubHkgc3VwcG9ydHMgY29tcGFyaW5nIHZhbHVlcyB3aXRoIHRhZ3Mgb2ZcbiAgICAgKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE51bWJlcmAsIGBSZWdFeHBgLCBvciBgU3RyaW5nYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSBgdG9TdHJpbmdUYWdgIG9mIHRoZSBvYmplY3RzIHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgdGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gICAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgICBjYXNlIGRhdGFWaWV3VGFnOlxuICAgICAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcbiAgICAgICAgICAgICAgKG9iamVjdC5ieXRlT2Zmc2V0ICE9IG90aGVyLmJ5dGVPZmZzZXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9iamVjdCA9IG9iamVjdC5idWZmZXI7XG4gICAgICAgICAgb3RoZXIgPSBvdGhlci5idWZmZXI7XG5cbiAgICAgICAgY2FzZSBhcnJheUJ1ZmZlclRhZzpcbiAgICAgICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XG4gICAgICAgICAgICAgICFlcXVhbEZ1bmMobmV3IFVpbnQ4QXJyYXkob2JqZWN0KSwgbmV3IFVpbnQ4QXJyYXkob3RoZXIpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgICBjYXNlIGJvb2xUYWc6XG4gICAgICAgIGNhc2UgZGF0ZVRhZzpcbiAgICAgICAgY2FzZSBudW1iZXJUYWc6XG4gICAgICAgICAgLy8gQ29lcmNlIGJvb2xlYW5zIHRvIGAxYCBvciBgMGAgYW5kIGRhdGVzIHRvIG1pbGxpc2Vjb25kcy5cbiAgICAgICAgICAvLyBJbnZhbGlkIGRhdGVzIGFyZSBjb2VyY2VkIHRvIGBOYU5gLlxuICAgICAgICAgIHJldHVybiBlcSgrb2JqZWN0LCArb3RoZXIpO1xuXG4gICAgICAgIGNhc2UgZXJyb3JUYWc6XG4gICAgICAgICAgcmV0dXJuIG9iamVjdC5uYW1lID09IG90aGVyLm5hbWUgJiYgb2JqZWN0Lm1lc3NhZ2UgPT0gb3RoZXIubWVzc2FnZTtcblxuICAgICAgICBjYXNlIHJlZ2V4cFRhZzpcbiAgICAgICAgY2FzZSBzdHJpbmdUYWc6XG4gICAgICAgICAgLy8gQ29lcmNlIHJlZ2V4ZXMgdG8gc3RyaW5ncyBhbmQgdHJlYXQgc3RyaW5ncywgcHJpbWl0aXZlcyBhbmQgb2JqZWN0cyxcbiAgICAgICAgICAvLyBhcyBlcXVhbC4gU2VlIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1yZWdleHAucHJvdG90eXBlLnRvc3RyaW5nXG4gICAgICAgICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgICAgICByZXR1cm4gb2JqZWN0ID09IChvdGhlciArICcnKTtcblxuICAgICAgICBjYXNlIG1hcFRhZzpcbiAgICAgICAgICB2YXIgY29udmVydCA9IG1hcFRvQXJyYXk7XG5cbiAgICAgICAgY2FzZSBzZXRUYWc6XG4gICAgICAgICAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRztcbiAgICAgICAgICBjb252ZXJ0IHx8IChjb252ZXJ0ID0gc2V0VG9BcnJheSk7XG5cbiAgICAgICAgICBpZiAob2JqZWN0LnNpemUgIT0gb3RoZXIuc2l6ZSAmJiAhaXNQYXJ0aWFsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEFzc3VtZSBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgICAgICAgICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldChvYmplY3QpO1xuICAgICAgICAgIGlmIChzdGFja2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhY2tlZCA9PSBvdGhlcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgYml0bWFzayB8PSBDT01QQVJFX1VOT1JERVJFRF9GTEFHO1xuXG4gICAgICAgICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICAgICAgc3RhY2suc2V0KG9iamVjdCwgb3RoZXIpO1xuICAgICAgICAgIHZhciByZXN1bHQgPSBlcXVhbEFycmF5cyhjb252ZXJ0KG9iamVjdCksIGNvbnZlcnQob3RoZXIpLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgICAgICAgICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuXG4gICAgICAgIGNhc2Ugc3ltYm9sVGFnOlxuICAgICAgICAgIGlmIChzeW1ib2xWYWx1ZU9mKSB7XG4gICAgICAgICAgICByZXR1cm4gc3ltYm9sVmFsdWVPZi5jYWxsKG9iamVjdCkgPT0gc3ltYm9sVmFsdWVPZi5jYWxsKG90aGVyKTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBvYmplY3RzIHdpdGggc3VwcG9ydCBmb3JcbiAgICAgKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gICAgICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxuICAgICAgICAgIG9ialByb3BzID0gZ2V0QWxsS2V5cyhvYmplY3QpLFxuICAgICAgICAgIG9iakxlbmd0aCA9IG9ialByb3BzLmxlbmd0aCxcbiAgICAgICAgICBvdGhQcm9wcyA9IGdldEFsbEtleXMob3RoZXIpLFxuICAgICAgICAgIG90aExlbmd0aCA9IG90aFByb3BzLmxlbmd0aDtcblxuICAgICAgaWYgKG9iakxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIWlzUGFydGlhbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB2YXIgaW5kZXggPSBvYmpMZW5ndGg7XG4gICAgICB3aGlsZSAoaW5kZXgtLSkge1xuICAgICAgICB2YXIga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xuICAgICAgICBpZiAoIShpc1BhcnRpYWwgPyBrZXkgaW4gb3RoZXIgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCBrZXkpKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICAgICAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcbiAgICAgIGlmIChzdGFja2VkICYmIHN0YWNrLmdldChvdGhlcikpIHtcbiAgICAgICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0ID0gdHJ1ZTtcbiAgICAgIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcbiAgICAgIHN0YWNrLnNldChvdGhlciwgb2JqZWN0KTtcblxuICAgICAgdmFyIHNraXBDdG9yID0gaXNQYXJ0aWFsO1xuICAgICAgd2hpbGUgKCsraW5kZXggPCBvYmpMZW5ndGgpIHtcbiAgICAgICAga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xuICAgICAgICB2YXIgb2JqVmFsdWUgPSBvYmplY3Rba2V5XSxcbiAgICAgICAgICAgIG90aFZhbHVlID0gb3RoZXJba2V5XTtcblxuICAgICAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxuICAgICAgICAgICAgPyBjdXN0b21pemVyKG90aFZhbHVlLCBvYmpWYWx1ZSwga2V5LCBvdGhlciwgb2JqZWN0LCBzdGFjaylcbiAgICAgICAgICAgIDogY3VzdG9taXplcihvYmpWYWx1ZSwgb3RoVmFsdWUsIGtleSwgb2JqZWN0LCBvdGhlciwgc3RhY2spO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgICBpZiAoIShjb21wYXJlZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgID8gKG9ialZhbHVlID09PSBvdGhWYWx1ZSB8fCBlcXVhbEZ1bmMob2JqVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykpXG4gICAgICAgICAgICAgIDogY29tcGFyZWRcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBza2lwQ3RvciB8fCAoc2tpcEN0b3IgPSBrZXkgPT0gJ2NvbnN0cnVjdG9yJyk7XG4gICAgICB9XG4gICAgICBpZiAocmVzdWx0ICYmICFza2lwQ3Rvcikge1xuICAgICAgICB2YXIgb2JqQ3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcixcbiAgICAgICAgICAgIG90aEN0b3IgPSBvdGhlci5jb25zdHJ1Y3RvcjtcblxuICAgICAgICAvLyBOb24gYE9iamVjdGAgb2JqZWN0IGluc3RhbmNlcyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVhbC5cbiAgICAgICAgaWYgKG9iakN0b3IgIT0gb3RoQ3RvciAmJlxuICAgICAgICAgICAgKCdjb25zdHJ1Y3RvcicgaW4gb2JqZWN0ICYmICdjb25zdHJ1Y3RvcicgaW4gb3RoZXIpICYmXG4gICAgICAgICAgICAhKHR5cGVvZiBvYmpDdG9yID09ICdmdW5jdGlvbicgJiYgb2JqQ3RvciBpbnN0YW5jZW9mIG9iakN0b3IgJiZcbiAgICAgICAgICAgICAgdHlwZW9mIG90aEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvdGhDdG9yIGluc3RhbmNlb2Ygb3RoQ3RvcikpIHtcbiAgICAgICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc3RhY2tbJ2RlbGV0ZSddKG9iamVjdCk7XG4gICAgICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VSZXN0YCB3aGljaCBmbGF0dGVucyB0aGUgcmVzdCBhcnJheS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmbGF0UmVzdChmdW5jKSB7XG4gICAgICByZXR1cm4gc2V0VG9TdHJpbmcob3ZlclJlc3QoZnVuYywgdW5kZWZpbmVkLCBmbGF0dGVuKSwgZnVuYyArICcnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRBbGxLZXlzKG9iamVjdCkge1xuICAgICAgcmV0dXJuIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5cywgZ2V0U3ltYm9scyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZFxuICAgICAqIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldEFsbEtleXNJbihvYmplY3QpIHtcbiAgICAgIHJldHVybiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXNJbiwgZ2V0U3ltYm9sc0luKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIG1ldGFkYXRhIGZvciBgZnVuY2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtZXRhZGF0YSBmb3IgYGZ1bmNgLlxuICAgICAqL1xuICAgIHZhciBnZXREYXRhID0gIW1ldGFNYXAgPyBub29wIDogZnVuY3Rpb24oZnVuYykge1xuICAgICAgcmV0dXJuIG1ldGFNYXAuZ2V0KGZ1bmMpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBuYW1lIG9mIGBmdW5jYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZnVuY3Rpb24gbmFtZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRGdW5jTmFtZShmdW5jKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gKGZ1bmMubmFtZSArICcnKSxcbiAgICAgICAgICBhcnJheSA9IHJlYWxOYW1lc1tyZXN1bHRdLFxuICAgICAgICAgIGxlbmd0aCA9IGhhc093blByb3BlcnR5LmNhbGwocmVhbE5hbWVzLCByZXN1bHQpID8gYXJyYXkubGVuZ3RoIDogMDtcblxuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIHZhciBkYXRhID0gYXJyYXlbbGVuZ3RoXSxcbiAgICAgICAgICAgIG90aGVyRnVuYyA9IGRhdGEuZnVuYztcbiAgICAgICAgaWYgKG90aGVyRnVuYyA9PSBudWxsIHx8IG90aGVyRnVuYyA9PSBmdW5jKSB7XG4gICAgICAgICAgcmV0dXJuIGRhdGEubmFtZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBhcmd1bWVudCBwbGFjZWhvbGRlciB2YWx1ZSBmb3IgYGZ1bmNgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwbGFjZWhvbGRlciB2YWx1ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRIb2xkZXIoZnVuYykge1xuICAgICAgdmFyIG9iamVjdCA9IGhhc093blByb3BlcnR5LmNhbGwobG9kYXNoLCAncGxhY2Vob2xkZXInKSA/IGxvZGFzaCA6IGZ1bmM7XG4gICAgICByZXR1cm4gb2JqZWN0LnBsYWNlaG9sZGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGFwcHJvcHJpYXRlIFwiaXRlcmF0ZWVcIiBmdW5jdGlvbi4gSWYgYF8uaXRlcmF0ZWVgIGlzIGN1c3RvbWl6ZWQsXG4gICAgICogdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjdXN0b20gbWV0aG9kLCBvdGhlcndpc2UgaXQgcmV0dXJucyBgYmFzZUl0ZXJhdGVlYC5cbiAgICAgKiBJZiBhcmd1bWVudHMgYXJlIHByb3ZpZGVkLCB0aGUgY2hvc2VuIGZ1bmN0aW9uIGlzIGludm9rZWQgd2l0aCB0aGVtIGFuZFxuICAgICAqIGl0cyByZXN1bHQgaXMgcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gW3ZhbHVlXSBUaGUgdmFsdWUgdG8gY29udmVydCB0byBhbiBpdGVyYXRlZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2FyaXR5XSBUaGUgYXJpdHkgb2YgdGhlIGNyZWF0ZWQgaXRlcmF0ZWUuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBjaG9zZW4gZnVuY3Rpb24gb3IgaXRzIHJlc3VsdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRJdGVyYXRlZSgpIHtcbiAgICAgIHZhciByZXN1bHQgPSBsb2Rhc2guaXRlcmF0ZWUgfHwgaXRlcmF0ZWU7XG4gICAgICByZXN1bHQgPSByZXN1bHQgPT09IGl0ZXJhdGVlID8gYmFzZUl0ZXJhdGVlIDogcmVzdWx0O1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyByZXN1bHQoYXJndW1lbnRzWzBdLCBhcmd1bWVudHNbMV0pIDogcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUgcmVmZXJlbmNlIGtleS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWFwIGRhdGEuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0TWFwRGF0YShtYXAsIGtleSkge1xuICAgICAgdmFyIGRhdGEgPSBtYXAuX19kYXRhX187XG4gICAgICByZXR1cm4gaXNLZXlhYmxlKGtleSlcbiAgICAgICAgPyBkYXRhW3R5cGVvZiBrZXkgPT0gJ3N0cmluZycgPyAnc3RyaW5nJyA6ICdoYXNoJ11cbiAgICAgICAgOiBkYXRhLm1hcDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBwcm9wZXJ0eSBuYW1lcywgdmFsdWVzLCBhbmQgY29tcGFyZSBmbGFncyBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbWF0Y2ggZGF0YSBvZiBgb2JqZWN0YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRNYXRjaERhdGEob2JqZWN0KSB7XG4gICAgICB2YXIgcmVzdWx0ID0ga2V5cyhvYmplY3QpLFxuICAgICAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICB2YXIga2V5ID0gcmVzdWx0W2xlbmd0aF0sXG4gICAgICAgICAgICB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXG4gICAgICAgIHJlc3VsdFtsZW5ndGhdID0gW2tleSwgdmFsdWUsIGlzU3RyaWN0Q29tcGFyYWJsZSh2YWx1ZSldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIG1ldGhvZCB0byBnZXQuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZ1bmN0aW9uIGlmIGl0J3MgbmF0aXZlLCBlbHNlIGB1bmRlZmluZWRgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldE5hdGl2ZShvYmplY3QsIGtleSkge1xuICAgICAgdmFyIHZhbHVlID0gZ2V0VmFsdWUob2JqZWN0LCBrZXkpO1xuICAgICAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VHZXRUYWdgIHdoaWNoIGlnbm9yZXMgYFN5bWJvbC50b1N0cmluZ1RhZ2AgdmFsdWVzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByYXcgYHRvU3RyaW5nVGFnYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRSYXdUYWcodmFsdWUpIHtcbiAgICAgIHZhciBpc093biA9IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIHN5bVRvU3RyaW5nVGFnKSxcbiAgICAgICAgICB0YWcgPSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdmFyIHVubWFza2VkID0gdHJ1ZTtcbiAgICAgIH0gY2F0Y2ggKGUpIHt9XG5cbiAgICAgIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgICAgIGlmICh1bm1hc2tlZCkge1xuICAgICAgICBpZiAoaXNPd24pIHtcbiAgICAgICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBzeW1ib2xzLlxuICAgICAqL1xuICAgIHZhciBnZXRTeW1ib2xzID0gIW5hdGl2ZUdldFN5bWJvbHMgPyBzdHViQXJyYXkgOiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICAgIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgICAgIHJldHVybiBhcnJheUZpbHRlcihuYXRpdmVHZXRTeW1ib2xzKG9iamVjdCksIGZ1bmN0aW9uKHN5bWJvbCkge1xuICAgICAgICByZXR1cm4gcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmplY3QsIHN5bWJvbCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBzeW1ib2xzLlxuICAgICAqL1xuICAgIHZhciBnZXRTeW1ib2xzSW4gPSAhbmF0aXZlR2V0U3ltYm9scyA/IHN0dWJBcnJheSA6IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgd2hpbGUgKG9iamVjdCkge1xuICAgICAgICBhcnJheVB1c2gocmVzdWx0LCBnZXRTeW1ib2xzKG9iamVjdCkpO1xuICAgICAgICBvYmplY3QgPSBnZXRQcm90b3R5cGUob2JqZWN0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGB0b1N0cmluZ1RhZ2Agb2YgYHZhbHVlYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAgICAgKi9cbiAgICB2YXIgZ2V0VGFnID0gYmFzZUdldFRhZztcblxuICAgIC8vIEZhbGxiYWNrIGZvciBkYXRhIHZpZXdzLCBtYXBzLCBzZXRzLCBhbmQgd2VhayBtYXBzIGluIElFIDExIGFuZCBwcm9taXNlcyBpbiBOb2RlLmpzIDwgNi5cbiAgICBpZiAoKERhdGFWaWV3ICYmIGdldFRhZyhuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDEpKSkgIT0gZGF0YVZpZXdUYWcpIHx8XG4gICAgICAgIChNYXAgJiYgZ2V0VGFnKG5ldyBNYXApICE9IG1hcFRhZykgfHxcbiAgICAgICAgKFByb21pc2UgJiYgZ2V0VGFnKFByb21pc2UucmVzb2x2ZSgpKSAhPSBwcm9taXNlVGFnKSB8fFxuICAgICAgICAoU2V0ICYmIGdldFRhZyhuZXcgU2V0KSAhPSBzZXRUYWcpIHx8XG4gICAgICAgIChXZWFrTWFwICYmIGdldFRhZyhuZXcgV2Vha01hcCkgIT0gd2Vha01hcFRhZykpIHtcbiAgICAgIGdldFRhZyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBiYXNlR2V0VGFnKHZhbHVlKSxcbiAgICAgICAgICAgIEN0b3IgPSByZXN1bHQgPT0gb2JqZWN0VGFnID8gdmFsdWUuY29uc3RydWN0b3IgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBjdG9yU3RyaW5nID0gQ3RvciA/IHRvU291cmNlKEN0b3IpIDogJyc7XG5cbiAgICAgICAgaWYgKGN0b3JTdHJpbmcpIHtcbiAgICAgICAgICBzd2l0Y2ggKGN0b3JTdHJpbmcpIHtcbiAgICAgICAgICAgIGNhc2UgZGF0YVZpZXdDdG9yU3RyaW5nOiByZXR1cm4gZGF0YVZpZXdUYWc7XG4gICAgICAgICAgICBjYXNlIG1hcEN0b3JTdHJpbmc6IHJldHVybiBtYXBUYWc7XG4gICAgICAgICAgICBjYXNlIHByb21pc2VDdG9yU3RyaW5nOiByZXR1cm4gcHJvbWlzZVRhZztcbiAgICAgICAgICAgIGNhc2Ugc2V0Q3RvclN0cmluZzogcmV0dXJuIHNldFRhZztcbiAgICAgICAgICAgIGNhc2Ugd2Vha01hcEN0b3JTdHJpbmc6IHJldHVybiB3ZWFrTWFwVGFnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSB2aWV3LCBhcHBseWluZyBhbnkgYHRyYW5zZm9ybXNgIHRvIHRoZSBgc3RhcnRgIGFuZCBgZW5kYCBwb3NpdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnQgb2YgdGhlIHZpZXcuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIG9mIHRoZSB2aWV3LlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHRyYW5zZm9ybXMgVGhlIHRyYW5zZm9ybWF0aW9ucyB0byBhcHBseSB0byB0aGUgdmlldy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBgc3RhcnRgIGFuZCBgZW5kYFxuICAgICAqICBwb3NpdGlvbnMgb2YgdGhlIHZpZXcuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0VmlldyhzdGFydCwgZW5kLCB0cmFuc2Zvcm1zKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSB0cmFuc2Zvcm1zLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIGRhdGEgPSB0cmFuc2Zvcm1zW2luZGV4XSxcbiAgICAgICAgICAgIHNpemUgPSBkYXRhLnNpemU7XG5cbiAgICAgICAgc3dpdGNoIChkYXRhLnR5cGUpIHtcbiAgICAgICAgICBjYXNlICdkcm9wJzogICAgICBzdGFydCArPSBzaXplOyBicmVhaztcbiAgICAgICAgICBjYXNlICdkcm9wUmlnaHQnOiBlbmQgLT0gc2l6ZTsgYnJlYWs7XG4gICAgICAgICAgY2FzZSAndGFrZSc6ICAgICAgZW5kID0gbmF0aXZlTWluKGVuZCwgc3RhcnQgKyBzaXplKTsgYnJlYWs7XG4gICAgICAgICAgY2FzZSAndGFrZVJpZ2h0Jzogc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQsIGVuZCAtIHNpemUpOyBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHsgJ3N0YXJ0Jzogc3RhcnQsICdlbmQnOiBlbmQgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFeHRyYWN0cyB3cmFwcGVyIGRldGFpbHMgZnJvbSB0aGUgYHNvdXJjZWAgYm9keSBjb21tZW50LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIFRoZSBzb3VyY2UgdG8gaW5zcGVjdC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHdyYXBwZXIgZGV0YWlscy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRXcmFwRGV0YWlscyhzb3VyY2UpIHtcbiAgICAgIHZhciBtYXRjaCA9IHNvdXJjZS5tYXRjaChyZVdyYXBEZXRhaWxzKTtcbiAgICAgIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdLnNwbGl0KHJlU3BsaXREZXRhaWxzKSA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgcGF0aGAgZXhpc3RzIG9uIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gY2hlY2suXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaGFzRnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2sgcHJvcGVydGllcy5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHBhdGhgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGhhc1BhdGgob2JqZWN0LCBwYXRoLCBoYXNGdW5jKSB7XG4gICAgICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcblxuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGgsXG4gICAgICAgICAgcmVzdWx0ID0gZmFsc2U7XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSB0b0tleShwYXRoW2luZGV4XSk7XG4gICAgICAgIGlmICghKHJlc3VsdCA9IG9iamVjdCAhPSBudWxsICYmIGhhc0Z1bmMob2JqZWN0LCBrZXkpKSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIG9iamVjdCA9IG9iamVjdFtrZXldO1xuICAgICAgfVxuICAgICAgaWYgKHJlc3VsdCB8fCArK2luZGV4ICE9IGxlbmd0aCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgbGVuZ3RoID0gb2JqZWN0ID09IG51bGwgPyAwIDogb2JqZWN0Lmxlbmd0aDtcbiAgICAgIHJldHVybiAhIWxlbmd0aCAmJiBpc0xlbmd0aChsZW5ndGgpICYmIGlzSW5kZXgoa2V5LCBsZW5ndGgpICYmXG4gICAgICAgIChpc0FycmF5KG9iamVjdCkgfHwgaXNBcmd1bWVudHMob2JqZWN0KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZXMgYW4gYXJyYXkgY2xvbmUuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjbG9uZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluaXRDbG9uZUFycmF5KGFycmF5KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIHJlc3VsdCA9IG5ldyBhcnJheS5jb25zdHJ1Y3RvcihsZW5ndGgpO1xuXG4gICAgICAvLyBBZGQgcHJvcGVydGllcyBhc3NpZ25lZCBieSBgUmVnRXhwI2V4ZWNgLlxuICAgICAgaWYgKGxlbmd0aCAmJiB0eXBlb2YgYXJyYXlbMF0gPT0gJ3N0cmluZycgJiYgaGFzT3duUHJvcGVydHkuY2FsbChhcnJheSwgJ2luZGV4JykpIHtcbiAgICAgICAgcmVzdWx0LmluZGV4ID0gYXJyYXkuaW5kZXg7XG4gICAgICAgIHJlc3VsdC5pbnB1dCA9IGFycmF5LmlucHV0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplcyBhbiBvYmplY3QgY2xvbmUuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjbG9uZS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpbml0Q2xvbmVPYmplY3Qob2JqZWN0KSB7XG4gICAgICByZXR1cm4gKHR5cGVvZiBvYmplY3QuY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNQcm90b3R5cGUob2JqZWN0KSlcbiAgICAgICAgPyBiYXNlQ3JlYXRlKGdldFByb3RvdHlwZShvYmplY3QpKVxuICAgICAgICA6IHt9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemVzIGFuIG9iamVjdCBjbG9uZSBiYXNlZCBvbiBpdHMgYHRvU3RyaW5nVGFnYC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIGZ1bmN0aW9uIG9ubHkgc3VwcG9ydHMgY2xvbmluZyB2YWx1ZXMgd2l0aCB0YWdzIG9mXG4gICAgICogYEJvb2xlYW5gLCBgRGF0ZWAsIGBFcnJvcmAsIGBNYXBgLCBgTnVtYmVyYCwgYFJlZ0V4cGAsIGBTZXRgLCBvciBgU3RyaW5nYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNsb25lLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0YWcgVGhlIGB0b1N0cmluZ1RhZ2Agb2YgdGhlIG9iamVjdCB0byBjbG9uZS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluaXRDbG9uZUJ5VGFnKG9iamVjdCwgdGFnLCBpc0RlZXApIHtcbiAgICAgIHZhciBDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yO1xuICAgICAgc3dpdGNoICh0YWcpIHtcbiAgICAgICAgY2FzZSBhcnJheUJ1ZmZlclRhZzpcbiAgICAgICAgICByZXR1cm4gY2xvbmVBcnJheUJ1ZmZlcihvYmplY3QpO1xuXG4gICAgICAgIGNhc2UgYm9vbFRhZzpcbiAgICAgICAgY2FzZSBkYXRlVGFnOlxuICAgICAgICAgIHJldHVybiBuZXcgQ3Rvcigrb2JqZWN0KTtcblxuICAgICAgICBjYXNlIGRhdGFWaWV3VGFnOlxuICAgICAgICAgIHJldHVybiBjbG9uZURhdGFWaWV3KG9iamVjdCwgaXNEZWVwKTtcblxuICAgICAgICBjYXNlIGZsb2F0MzJUYWc6IGNhc2UgZmxvYXQ2NFRhZzpcbiAgICAgICAgY2FzZSBpbnQ4VGFnOiBjYXNlIGludDE2VGFnOiBjYXNlIGludDMyVGFnOlxuICAgICAgICBjYXNlIHVpbnQ4VGFnOiBjYXNlIHVpbnQ4Q2xhbXBlZFRhZzogY2FzZSB1aW50MTZUYWc6IGNhc2UgdWludDMyVGFnOlxuICAgICAgICAgIHJldHVybiBjbG9uZVR5cGVkQXJyYXkob2JqZWN0LCBpc0RlZXApO1xuXG4gICAgICAgIGNhc2UgbWFwVGFnOlxuICAgICAgICAgIHJldHVybiBuZXcgQ3RvcjtcblxuICAgICAgICBjYXNlIG51bWJlclRhZzpcbiAgICAgICAgY2FzZSBzdHJpbmdUYWc6XG4gICAgICAgICAgcmV0dXJuIG5ldyBDdG9yKG9iamVjdCk7XG5cbiAgICAgICAgY2FzZSByZWdleHBUYWc6XG4gICAgICAgICAgcmV0dXJuIGNsb25lUmVnRXhwKG9iamVjdCk7XG5cbiAgICAgICAgY2FzZSBzZXRUYWc6XG4gICAgICAgICAgcmV0dXJuIG5ldyBDdG9yO1xuXG4gICAgICAgIGNhc2Ugc3ltYm9sVGFnOlxuICAgICAgICAgIHJldHVybiBjbG9uZVN5bWJvbChvYmplY3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluc2VydHMgd3JhcHBlciBgZGV0YWlsc2AgaW4gYSBjb21tZW50IGF0IHRoZSB0b3Agb2YgdGhlIGBzb3VyY2VgIGJvZHkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgVGhlIHNvdXJjZSB0byBtb2RpZnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBkZXRhaWxzIFRoZSBkZXRhaWxzIHRvIGluc2VydC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBtb2RpZmllZCBzb3VyY2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaW5zZXJ0V3JhcERldGFpbHMoc291cmNlLCBkZXRhaWxzKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gZGV0YWlscy5sZW5ndGg7XG4gICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICByZXR1cm4gc291cmNlO1xuICAgICAgfVxuICAgICAgdmFyIGxhc3RJbmRleCA9IGxlbmd0aCAtIDE7XG4gICAgICBkZXRhaWxzW2xhc3RJbmRleF0gPSAobGVuZ3RoID4gMSA/ICcmICcgOiAnJykgKyBkZXRhaWxzW2xhc3RJbmRleF07XG4gICAgICBkZXRhaWxzID0gZGV0YWlscy5qb2luKGxlbmd0aCA+IDIgPyAnLCAnIDogJyAnKTtcbiAgICAgIHJldHVybiBzb3VyY2UucmVwbGFjZShyZVdyYXBDb21tZW50LCAne1xcbi8qIFt3cmFwcGVkIHdpdGggJyArIGRldGFpbHMgKyAnXSAqL1xcbicpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgZmxhdHRlbmFibGUgYGFyZ3VtZW50c2Agb2JqZWN0IG9yIGFycmF5LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBmbGF0dGVuYWJsZSwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzRmxhdHRlbmFibGUodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc0FycmF5KHZhbHVlKSB8fCBpc0FyZ3VtZW50cyh2YWx1ZSkgfHxcbiAgICAgICAgISEoc3ByZWFkYWJsZVN5bWJvbCAmJiB2YWx1ZSAmJiB2YWx1ZVtzcHJlYWRhYmxlU3ltYm9sXSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD1NQVhfU0FGRV9JTlRFR0VSXSBUaGUgdXBwZXIgYm91bmRzIG9mIGEgdmFsaWQgaW5kZXguXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBpbmRleCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzSW5kZXgodmFsdWUsIGxlbmd0aCkge1xuICAgICAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gICAgICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XG5cbiAgICAgIHJldHVybiAhIWxlbmd0aCAmJlxuICAgICAgICAodHlwZSA9PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcbiAgICAgICAgICAgICh2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDwgbGVuZ3RoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgdGhlIGdpdmVuIGFyZ3VtZW50cyBhcmUgZnJvbSBhbiBpdGVyYXRlZSBjYWxsLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgdmFsdWUgYXJndW1lbnQuXG4gICAgICogQHBhcmFtIHsqfSBpbmRleCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIGluZGV4IG9yIGtleSBhcmd1bWVudC5cbiAgICAgKiBAcGFyYW0geyp9IG9iamVjdCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIG9iamVjdCBhcmd1bWVudC5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFyZ3VtZW50cyBhcmUgZnJvbSBhbiBpdGVyYXRlZSBjYWxsLFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNJdGVyYXRlZUNhbGwodmFsdWUsIGluZGV4LCBvYmplY3QpIHtcbiAgICAgIGlmICghaXNPYmplY3Qob2JqZWN0KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB2YXIgdHlwZSA9IHR5cGVvZiBpbmRleDtcbiAgICAgIGlmICh0eXBlID09ICdudW1iZXInXG4gICAgICAgICAgICA/IChpc0FycmF5TGlrZShvYmplY3QpICYmIGlzSW5kZXgoaW5kZXgsIG9iamVjdC5sZW5ndGgpKVxuICAgICAgICAgICAgOiAodHlwZSA9PSAnc3RyaW5nJyAmJiBpbmRleCBpbiBvYmplY3QpXG4gICAgICAgICAgKSB7XG4gICAgICAgIHJldHVybiBlcShvYmplY3RbaW5kZXhdLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lIGFuZCBub3QgYSBwcm9wZXJ0eSBwYXRoLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzS2V5KHZhbHVlLCBvYmplY3QpIHtcbiAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgICAgIGlmICh0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicgfHxcbiAgICAgICAgICB2YWx1ZSA9PSBudWxsIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZUlzUGxhaW5Qcm9wLnRlc3QodmFsdWUpIHx8ICFyZUlzRGVlcFByb3AudGVzdCh2YWx1ZSkgfHxcbiAgICAgICAgKG9iamVjdCAhPSBudWxsICYmIHZhbHVlIGluIE9iamVjdChvYmplY3QpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSBmb3IgdXNlIGFzIHVuaXF1ZSBvYmplY3Qga2V5LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzS2V5YWJsZSh2YWx1ZSkge1xuICAgICAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gICAgICByZXR1cm4gKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nKVxuICAgICAgICA/ICh2YWx1ZSAhPT0gJ19fcHJvdG9fXycpXG4gICAgICAgIDogKHZhbHVlID09PSBudWxsKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBhIGxhenkgY291bnRlcnBhcnQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaGFzIGEgbGF6eSBjb3VudGVycGFydCxcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzTGF6aWFibGUoZnVuYykge1xuICAgICAgdmFyIGZ1bmNOYW1lID0gZ2V0RnVuY05hbWUoZnVuYyksXG4gICAgICAgICAgb3RoZXIgPSBsb2Rhc2hbZnVuY05hbWVdO1xuXG4gICAgICBpZiAodHlwZW9mIG90aGVyICE9ICdmdW5jdGlvbicgfHwgIShmdW5jTmFtZSBpbiBMYXp5V3JhcHBlci5wcm90b3R5cGUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChmdW5jID09PSBvdGhlcikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHZhciBkYXRhID0gZ2V0RGF0YShvdGhlcik7XG4gICAgICByZXR1cm4gISFkYXRhICYmIGZ1bmMgPT09IGRhdGFbMF07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgaXRzIHNvdXJjZSBtYXNrZWQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2VkLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNNYXNrZWQoZnVuYykge1xuICAgICAgcmV0dXJuICEhbWFza1NyY0tleSAmJiAobWFza1NyY0tleSBpbiBmdW5jKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYGZ1bmNgIGlzIGNhcGFibGUgb2YgYmVpbmcgbWFza2VkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGZ1bmNgIGlzIG1hc2thYmxlLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgdmFyIGlzTWFza2FibGUgPSBjb3JlSnNEYXRhID8gaXNGdW5jdGlvbiA6IHN0dWJGYWxzZTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvdG90eXBlLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcbiAgICAgIHZhciBDdG9yID0gdmFsdWUgJiYgdmFsdWUuY29uc3RydWN0b3IsXG4gICAgICAgICAgcHJvdG8gPSAodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSkgfHwgb2JqZWN0UHJvdG87XG5cbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gcHJvdG87XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUgZm9yIHN0cmljdCBlcXVhbGl0eSBjb21wYXJpc29ucywgaS5lLiBgPT09YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaWYgc3VpdGFibGUgZm9yIHN0cmljdFxuICAgICAqICBlcXVhbGl0eSBjb21wYXJpc29ucywgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzU3RyaWN0Q29tcGFyYWJsZSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSAmJiAhaXNPYmplY3QodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgbWF0Y2hlc1Byb3BlcnR5YCBmb3Igc291cmNlIHZhbHVlcyBzdWl0YWJsZVxuICAgICAqIGZvciBzdHJpY3QgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGkuZS4gYD09PWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICAgICAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUoa2V5LCBzcmNWYWx1ZSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAgICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iamVjdFtrZXldID09PSBzcmNWYWx1ZSAmJlxuICAgICAgICAgIChzcmNWYWx1ZSAhPT0gdW5kZWZpbmVkIHx8IChrZXkgaW4gT2JqZWN0KG9iamVjdCkpKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1lbW9pemVgIHdoaWNoIGNsZWFycyB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24nc1xuICAgICAqIGNhY2hlIHdoZW4gaXQgZXhjZWVkcyBgTUFYX01FTU9JWkVfU0laRWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGhhdmUgaXRzIG91dHB1dCBtZW1vaXplZC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtZW1vaXplQ2FwcGVkKGZ1bmMpIHtcbiAgICAgIHZhciByZXN1bHQgPSBtZW1vaXplKGZ1bmMsIGZ1bmN0aW9uKGtleSkge1xuICAgICAgICBpZiAoY2FjaGUuc2l6ZSA9PT0gTUFYX01FTU9JWkVfU0laRSkge1xuICAgICAgICAgIGNhY2hlLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgY2FjaGUgPSByZXN1bHQuY2FjaGU7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1lcmdlcyB0aGUgZnVuY3Rpb24gbWV0YWRhdGEgb2YgYHNvdXJjZWAgaW50byBgZGF0YWAuXG4gICAgICpcbiAgICAgKiBNZXJnaW5nIG1ldGFkYXRhIHJlZHVjZXMgdGhlIG51bWJlciBvZiB3cmFwcGVycyB1c2VkIHRvIGludm9rZSBhIGZ1bmN0aW9uLlxuICAgICAqIFRoaXMgaXMgcG9zc2libGUgYmVjYXVzZSBtZXRob2RzIGxpa2UgYF8uYmluZGAsIGBfLmN1cnJ5YCwgYW5kIGBfLnBhcnRpYWxgXG4gICAgICogbWF5IGJlIGFwcGxpZWQgcmVnYXJkbGVzcyBvZiBleGVjdXRpb24gb3JkZXIuIE1ldGhvZHMgbGlrZSBgXy5hcnlgIGFuZFxuICAgICAqIGBfLnJlYXJnYCBtb2RpZnkgZnVuY3Rpb24gYXJndW1lbnRzLCBtYWtpbmcgdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgYXJlXG4gICAgICogZXhlY3V0ZWQgaW1wb3J0YW50LCBwcmV2ZW50aW5nIHRoZSBtZXJnaW5nIG9mIG1ldGFkYXRhLiBIb3dldmVyLCB3ZSBtYWtlXG4gICAgICogYW4gZXhjZXB0aW9uIGZvciBhIHNhZmUgY29tYmluZWQgY2FzZSB3aGVyZSBjdXJyaWVkIGZ1bmN0aW9ucyBoYXZlIGBfLmFyeWBcbiAgICAgKiBhbmQgb3IgYF8ucmVhcmdgIGFwcGxpZWQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGRhdGEgVGhlIGRlc3RpbmF0aW9uIG1ldGFkYXRhLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHNvdXJjZSBUaGUgc291cmNlIG1ldGFkYXRhLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgZGF0YWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWVyZ2VEYXRhKGRhdGEsIHNvdXJjZSkge1xuICAgICAgdmFyIGJpdG1hc2sgPSBkYXRhWzFdLFxuICAgICAgICAgIHNyY0JpdG1hc2sgPSBzb3VyY2VbMV0sXG4gICAgICAgICAgbmV3Qml0bWFzayA9IGJpdG1hc2sgfCBzcmNCaXRtYXNrLFxuICAgICAgICAgIGlzQ29tbW9uID0gbmV3Qml0bWFzayA8IChXUkFQX0JJTkRfRkxBRyB8IFdSQVBfQklORF9LRVlfRkxBRyB8IFdSQVBfQVJZX0ZMQUcpO1xuXG4gICAgICB2YXIgaXNDb21ibyA9XG4gICAgICAgICgoc3JjQml0bWFzayA9PSBXUkFQX0FSWV9GTEFHKSAmJiAoYml0bWFzayA9PSBXUkFQX0NVUlJZX0ZMQUcpKSB8fFxuICAgICAgICAoKHNyY0JpdG1hc2sgPT0gV1JBUF9BUllfRkxBRykgJiYgKGJpdG1hc2sgPT0gV1JBUF9SRUFSR19GTEFHKSAmJiAoZGF0YVs3XS5sZW5ndGggPD0gc291cmNlWzhdKSkgfHxcbiAgICAgICAgKChzcmNCaXRtYXNrID09IChXUkFQX0FSWV9GTEFHIHwgV1JBUF9SRUFSR19GTEFHKSkgJiYgKHNvdXJjZVs3XS5sZW5ndGggPD0gc291cmNlWzhdKSAmJiAoYml0bWFzayA9PSBXUkFQX0NVUlJZX0ZMQUcpKTtcblxuICAgICAgLy8gRXhpdCBlYXJseSBpZiBtZXRhZGF0YSBjYW4ndCBiZSBtZXJnZWQuXG4gICAgICBpZiAoIShpc0NvbW1vbiB8fCBpc0NvbWJvKSkge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH1cbiAgICAgIC8vIFVzZSBzb3VyY2UgYHRoaXNBcmdgIGlmIGF2YWlsYWJsZS5cbiAgICAgIGlmIChzcmNCaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcpIHtcbiAgICAgICAgZGF0YVsyXSA9IHNvdXJjZVsyXTtcbiAgICAgICAgLy8gU2V0IHdoZW4gY3VycnlpbmcgYSBib3VuZCBmdW5jdGlvbi5cbiAgICAgICAgbmV3Qml0bWFzayB8PSBiaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcgPyAwIDogV1JBUF9DVVJSWV9CT1VORF9GTEFHO1xuICAgICAgfVxuICAgICAgLy8gQ29tcG9zZSBwYXJ0aWFsIGFyZ3VtZW50cy5cbiAgICAgIHZhciB2YWx1ZSA9IHNvdXJjZVszXTtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB2YXIgcGFydGlhbHMgPSBkYXRhWzNdO1xuICAgICAgICBkYXRhWzNdID0gcGFydGlhbHMgPyBjb21wb3NlQXJncyhwYXJ0aWFscywgdmFsdWUsIHNvdXJjZVs0XSkgOiB2YWx1ZTtcbiAgICAgICAgZGF0YVs0XSA9IHBhcnRpYWxzID8gcmVwbGFjZUhvbGRlcnMoZGF0YVszXSwgUExBQ0VIT0xERVIpIDogc291cmNlWzRdO1xuICAgICAgfVxuICAgICAgLy8gQ29tcG9zZSBwYXJ0aWFsIHJpZ2h0IGFyZ3VtZW50cy5cbiAgICAgIHZhbHVlID0gc291cmNlWzVdO1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHBhcnRpYWxzID0gZGF0YVs1XTtcbiAgICAgICAgZGF0YVs1XSA9IHBhcnRpYWxzID8gY29tcG9zZUFyZ3NSaWdodChwYXJ0aWFscywgdmFsdWUsIHNvdXJjZVs2XSkgOiB2YWx1ZTtcbiAgICAgICAgZGF0YVs2XSA9IHBhcnRpYWxzID8gcmVwbGFjZUhvbGRlcnMoZGF0YVs1XSwgUExBQ0VIT0xERVIpIDogc291cmNlWzZdO1xuICAgICAgfVxuICAgICAgLy8gVXNlIHNvdXJjZSBgYXJnUG9zYCBpZiBhdmFpbGFibGUuXG4gICAgICB2YWx1ZSA9IHNvdXJjZVs3XTtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBkYXRhWzddID0gdmFsdWU7XG4gICAgICB9XG4gICAgICAvLyBVc2Ugc291cmNlIGBhcnlgIGlmIGl0J3Mgc21hbGxlci5cbiAgICAgIGlmIChzcmNCaXRtYXNrICYgV1JBUF9BUllfRkxBRykge1xuICAgICAgICBkYXRhWzhdID0gZGF0YVs4XSA9PSBudWxsID8gc291cmNlWzhdIDogbmF0aXZlTWluKGRhdGFbOF0sIHNvdXJjZVs4XSk7XG4gICAgICB9XG4gICAgICAvLyBVc2Ugc291cmNlIGBhcml0eWAgaWYgb25lIGlzIG5vdCBwcm92aWRlZC5cbiAgICAgIGlmIChkYXRhWzldID09IG51bGwpIHtcbiAgICAgICAgZGF0YVs5XSA9IHNvdXJjZVs5XTtcbiAgICAgIH1cbiAgICAgIC8vIFVzZSBzb3VyY2UgYGZ1bmNgIGFuZCBtZXJnZSBiaXRtYXNrcy5cbiAgICAgIGRhdGFbMF0gPSBzb3VyY2VbMF07XG4gICAgICBkYXRhWzFdID0gbmV3Qml0bWFzaztcblxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlXG4gICAgICogW2BPYmplY3Qua2V5c2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICAgICAqIGV4Y2VwdCB0aGF0IGl0IGluY2x1ZGVzIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnRpZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG5hdGl2ZUtleXNJbihvYmplY3QpIHtcbiAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgIGlmIChvYmplY3QgIT0gbnVsbCkge1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcgdXNpbmcgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gICAgICovXG4gICAgZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcodmFsdWUpIHtcbiAgICAgIHJldHVybiBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VSZXN0YCB3aGljaCB0cmFuc2Zvcm1zIHRoZSByZXN0IGFycmF5LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIHJlc3QgYXJyYXkgdHJhbnNmb3JtLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCB0cmFuc2Zvcm0pIHtcbiAgICAgIHN0YXJ0ID0gbmF0aXZlTWF4KHN0YXJ0ID09PSB1bmRlZmluZWQgPyAoZnVuYy5sZW5ndGggLSAxKSA6IHN0YXJ0LCAwKTtcbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgICAgICBpbmRleCA9IC0xLFxuICAgICAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3MubGVuZ3RoIC0gc3RhcnQsIDApLFxuICAgICAgICAgICAgYXJyYXkgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgYXJyYXlbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTtcbiAgICAgICAgfVxuICAgICAgICBpbmRleCA9IC0xO1xuICAgICAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcbiAgICAgICAgd2hpbGUgKCsraW5kZXggPCBzdGFydCkge1xuICAgICAgICAgIG90aGVyQXJnc1tpbmRleF0gPSBhcmdzW2luZGV4XTtcbiAgICAgICAgfVxuICAgICAgICBvdGhlckFyZ3Nbc3RhcnRdID0gdHJhbnNmb3JtKGFycmF5KTtcbiAgICAgICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHRoaXMsIG90aGVyQXJncyk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHBhcmVudCB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoIFRoZSBwYXRoIHRvIGdldCB0aGUgcGFyZW50IHZhbHVlIG9mLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwYXJlbnQgdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gcGFyZW50KG9iamVjdCwgcGF0aCkge1xuICAgICAgcmV0dXJuIHBhdGgubGVuZ3RoIDwgMiA/IG9iamVjdCA6IGJhc2VHZXQob2JqZWN0LCBiYXNlU2xpY2UocGF0aCwgMCwgLTEpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW9yZGVyIGBhcnJheWAgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgaW5kZXhlcyB3aGVyZSB0aGUgZWxlbWVudCBhdFxuICAgICAqIHRoZSBmaXJzdCBpbmRleCBpcyBhc3NpZ25lZCBhcyB0aGUgZmlyc3QgZWxlbWVudCwgdGhlIGVsZW1lbnQgYXRcbiAgICAgKiB0aGUgc2Vjb25kIGluZGV4IGlzIGFzc2lnbmVkIGFzIHRoZSBzZWNvbmQgZWxlbWVudCwgYW5kIHNvIG9uLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcmVvcmRlci5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBpbmRleGVzIFRoZSBhcnJhbmdlZCBhcnJheSBpbmRleGVzLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlb3JkZXIoYXJyYXksIGluZGV4ZXMpIHtcbiAgICAgIHZhciBhcnJMZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWluKGluZGV4ZXMubGVuZ3RoLCBhcnJMZW5ndGgpLFxuICAgICAgICAgIG9sZEFycmF5ID0gY29weUFycmF5KGFycmF5KTtcblxuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGluZGV4ZXNbbGVuZ3RoXTtcbiAgICAgICAgYXJyYXlbbGVuZ3RoXSA9IGlzSW5kZXgoaW5kZXgsIGFyckxlbmd0aCkgPyBvbGRBcnJheVtpbmRleF0gOiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJyYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAsIHVubGVzcyBga2V5YCBpcyBcIl9fcHJvdG9fX1wiIG9yIFwiY29uc3RydWN0b3JcIi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzYWZlR2V0KG9iamVjdCwga2V5KSB7XG4gICAgICBpZiAoa2V5ID09PSAnY29uc3RydWN0b3InICYmIHR5cGVvZiBvYmplY3Rba2V5XSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChrZXkgPT0gJ19fcHJvdG9fXycpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb2JqZWN0W2tleV07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBtZXRhZGF0YSBmb3IgYGZ1bmNgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIElmIHRoaXMgZnVuY3Rpb24gYmVjb21lcyBob3QsIGkuZS4gaXMgaW52b2tlZCBhIGxvdCBpbiBhIHNob3J0XG4gICAgICogcGVyaW9kIG9mIHRpbWUsIGl0IHdpbGwgdHJpcCBpdHMgYnJlYWtlciBhbmQgdHJhbnNpdGlvbiB0byBhbiBpZGVudGl0eVxuICAgICAqIGZ1bmN0aW9uIHRvIGF2b2lkIGdhcmJhZ2UgY29sbGVjdGlvbiBwYXVzZXMgaW4gVjguIFNlZVxuICAgICAqIFtWOCBpc3N1ZSAyMDcwXShodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0yMDcwKVxuICAgICAqIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFzc29jaWF0ZSBtZXRhZGF0YSB3aXRoLlxuICAgICAqIEBwYXJhbSB7Kn0gZGF0YSBUaGUgbWV0YWRhdGEuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAgICAgKi9cbiAgICB2YXIgc2V0RGF0YSA9IHNob3J0T3V0KGJhc2VTZXREYXRhKTtcblxuICAgIC8qKlxuICAgICAqIEEgc2ltcGxlIHdyYXBwZXIgYXJvdW5kIHRoZSBnbG9iYWwgW2BzZXRUaW1lb3V0YF0oaHR0cHM6Ly9tZG4uaW8vc2V0VGltZW91dCkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRlbGF5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3YWl0IFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIGRlbGF5IGludm9jYXRpb24uXG4gICAgICogQHJldHVybnMge251bWJlcnxPYmplY3R9IFJldHVybnMgdGhlIHRpbWVyIGlkIG9yIHRpbWVvdXQgb2JqZWN0LlxuICAgICAqL1xuICAgIHZhciBzZXRUaW1lb3V0ID0gY3R4U2V0VGltZW91dCB8fCBmdW5jdGlvbihmdW5jLCB3YWl0KSB7XG4gICAgICByZXR1cm4gcm9vdC5zZXRUaW1lb3V0KGZ1bmMsIHdhaXQpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBgdG9TdHJpbmdgIG1ldGhvZCBvZiBgZnVuY2AgdG8gcmV0dXJuIGBzdHJpbmdgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICAgICAqL1xuICAgIHZhciBzZXRUb1N0cmluZyA9IHNob3J0T3V0KGJhc2VTZXRUb1N0cmluZyk7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBgdG9TdHJpbmdgIG1ldGhvZCBvZiBgd3JhcHBlcmAgdG8gbWltaWMgdGhlIHNvdXJjZSBvZiBgcmVmZXJlbmNlYFxuICAgICAqIHdpdGggd3JhcHBlciBkZXRhaWxzIGluIGEgY29tbWVudCBhdCB0aGUgdG9wIG9mIHRoZSBzb3VyY2UgYm9keS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gd3JhcHBlciBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHJlZmVyZW5jZSBUaGUgcmVmZXJlbmNlIGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGB3cmFwcGVyYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzZXRXcmFwVG9TdHJpbmcod3JhcHBlciwgcmVmZXJlbmNlLCBiaXRtYXNrKSB7XG4gICAgICB2YXIgc291cmNlID0gKHJlZmVyZW5jZSArICcnKTtcbiAgICAgIHJldHVybiBzZXRUb1N0cmluZyh3cmFwcGVyLCBpbnNlcnRXcmFwRGV0YWlscyhzb3VyY2UsIHVwZGF0ZVdyYXBEZXRhaWxzKGdldFdyYXBEZXRhaWxzKHNvdXJjZSksIGJpdG1hc2spKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQnbGwgc2hvcnQgb3V0IGFuZCBpbnZva2UgYGlkZW50aXR5YCBpbnN0ZWFkXG4gICAgICogb2YgYGZ1bmNgIHdoZW4gaXQncyBjYWxsZWQgYEhPVF9DT1VOVGAgb3IgbW9yZSB0aW1lcyBpbiBgSE9UX1NQQU5gXG4gICAgICogbWlsbGlzZWNvbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byByZXN0cmljdC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzaG9ydGFibGUgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2hvcnRPdXQoZnVuYykge1xuICAgICAgdmFyIGNvdW50ID0gMCxcbiAgICAgICAgICBsYXN0Q2FsbGVkID0gMDtcblxuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgc3RhbXAgPSBuYXRpdmVOb3coKSxcbiAgICAgICAgICAgIHJlbWFpbmluZyA9IEhPVF9TUEFOIC0gKHN0YW1wIC0gbGFzdENhbGxlZCk7XG5cbiAgICAgICAgbGFzdENhbGxlZCA9IHN0YW1wO1xuICAgICAgICBpZiAocmVtYWluaW5nID4gMCkge1xuICAgICAgICAgIGlmICgrK2NvdW50ID49IEhPVF9DT1VOVCkge1xuICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1swXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY291bnQgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNodWZmbGVgIHdoaWNoIG11dGF0ZXMgYW5kIHNldHMgdGhlIHNpemUgb2YgYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHNodWZmbGUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzaXplPWFycmF5Lmxlbmd0aF0gVGhlIHNpemUgb2YgYGFycmF5YC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzaHVmZmxlU2VsZihhcnJheSwgc2l6ZSkge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIGxhc3RJbmRleCA9IGxlbmd0aCAtIDE7XG5cbiAgICAgIHNpemUgPSBzaXplID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiBzaXplO1xuICAgICAgd2hpbGUgKCsraW5kZXggPCBzaXplKSB7XG4gICAgICAgIHZhciByYW5kID0gYmFzZVJhbmRvbShpbmRleCwgbGFzdEluZGV4KSxcbiAgICAgICAgICAgIHZhbHVlID0gYXJyYXlbcmFuZF07XG5cbiAgICAgICAgYXJyYXlbcmFuZF0gPSBhcnJheVtpbmRleF07XG4gICAgICAgIGFycmF5W2luZGV4XSA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgYXJyYXkubGVuZ3RoID0gc2l6ZTtcbiAgICAgIHJldHVybiBhcnJheTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgc3RyaW5nYCB0byBhIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAgICAgKi9cbiAgICB2YXIgc3RyaW5nVG9QYXRoID0gbWVtb2l6ZUNhcHBlZChmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgIGlmIChzdHJpbmcuY2hhckNvZGVBdCgwKSA9PT0gNDYgLyogLiAqLykge1xuICAgICAgICByZXN1bHQucHVzaCgnJyk7XG4gICAgICB9XG4gICAgICBzdHJpbmcucmVwbGFjZShyZVByb3BOYW1lLCBmdW5jdGlvbihtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHF1b3RlID8gc3ViU3RyaW5nLnJlcGxhY2UocmVFc2NhcGVDaGFyLCAnJDEnKSA6IChudW1iZXIgfHwgbWF0Y2gpKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcga2V5IGlmIGl0J3Mgbm90IGEgc3RyaW5nIG9yIHN5bWJvbC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfHN5bWJvbH0gUmV0dXJucyB0aGUga2V5LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRvS2V5KHZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICAgICAgcmV0dXJuIChyZXN1bHQgPT0gJzAnICYmICgxIC8gdmFsdWUpID09IC1JTkZJTklUWSkgPyAnLTAnIDogcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGBmdW5jYCB0byBpdHMgc291cmNlIGNvZGUuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc291cmNlIGNvZGUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykge1xuICAgICAgaWYgKGZ1bmMgIT0gbnVsbCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBmdW5jVG9TdHJpbmcuY2FsbChmdW5jKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gKGZ1bmMgKyAnJyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICB9XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyB3cmFwcGVyIGBkZXRhaWxzYCBiYXNlZCBvbiBgYml0bWFza2AgZmxhZ3MuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gZGV0YWlscyBUaGUgZGV0YWlscyB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGRldGFpbHNgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHVwZGF0ZVdyYXBEZXRhaWxzKGRldGFpbHMsIGJpdG1hc2spIHtcbiAgICAgIGFycmF5RWFjaCh3cmFwRmxhZ3MsIGZ1bmN0aW9uKHBhaXIpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gJ18uJyArIHBhaXJbMF07XG4gICAgICAgIGlmICgoYml0bWFzayAmIHBhaXJbMV0pICYmICFhcnJheUluY2x1ZGVzKGRldGFpbHMsIHZhbHVlKSkge1xuICAgICAgICAgIGRldGFpbHMucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGRldGFpbHMuc29ydCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgd3JhcHBlcmAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSB3cmFwcGVyIFRoZSB3cmFwcGVyIHRvIGNsb25lLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCB3cmFwcGVyLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdyYXBwZXJDbG9uZSh3cmFwcGVyKSB7XG4gICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIExhenlXcmFwcGVyKSB7XG4gICAgICAgIHJldHVybiB3cmFwcGVyLmNsb25lKCk7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0ID0gbmV3IExvZGFzaFdyYXBwZXIod3JhcHBlci5fX3dyYXBwZWRfXywgd3JhcHBlci5fX2NoYWluX18pO1xuICAgICAgcmVzdWx0Ll9fYWN0aW9uc19fID0gY29weUFycmF5KHdyYXBwZXIuX19hY3Rpb25zX18pO1xuICAgICAgcmVzdWx0Ll9faW5kZXhfXyAgPSB3cmFwcGVyLl9faW5kZXhfXztcbiAgICAgIHJlc3VsdC5fX3ZhbHVlc19fID0gd3JhcHBlci5fX3ZhbHVlc19fO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIGVsZW1lbnRzIHNwbGl0IGludG8gZ3JvdXBzIHRoZSBsZW5ndGggb2YgYHNpemVgLlxuICAgICAqIElmIGBhcnJheWAgY2FuJ3QgYmUgc3BsaXQgZXZlbmx5LCB0aGUgZmluYWwgY2h1bmsgd2lsbCBiZSB0aGUgcmVtYWluaW5nXG4gICAgICogZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcHJvY2Vzcy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3NpemU9MV0gVGhlIGxlbmd0aCBvZiBlYWNoIGNodW5rXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBjaHVua3MuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uY2h1bmsoWydhJywgJ2InLCAnYycsICdkJ10sIDIpO1xuICAgICAqIC8vID0+IFtbJ2EnLCAnYiddLCBbJ2MnLCAnZCddXVxuICAgICAqXG4gICAgICogXy5jaHVuayhbJ2EnLCAnYicsICdjJywgJ2QnXSwgMyk7XG4gICAgICogLy8gPT4gW1snYScsICdiJywgJ2MnXSwgWydkJ11dXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2h1bmsoYXJyYXksIHNpemUsIGd1YXJkKSB7XG4gICAgICBpZiAoKGd1YXJkID8gaXNJdGVyYXRlZUNhbGwoYXJyYXksIHNpemUsIGd1YXJkKSA6IHNpemUgPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgc2l6ZSA9IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzaXplID0gbmF0aXZlTWF4KHRvSW50ZWdlcihzaXplKSwgMCk7XG4gICAgICB9XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICBpZiAoIWxlbmd0aCB8fCBzaXplIDwgMSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICB2YXIgaW5kZXggPSAwLFxuICAgICAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgICAgICByZXN1bHQgPSBBcnJheShuYXRpdmVDZWlsKGxlbmd0aCAvIHNpemUpKTtcblxuICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IGJhc2VTbGljZShhcnJheSwgaW5kZXgsIChpbmRleCArPSBzaXplKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgd2l0aCBhbGwgZmFsc2V5IHZhbHVlcyByZW1vdmVkLiBUaGUgdmFsdWVzIGBmYWxzZWAsIGBudWxsYCxcbiAgICAgKiBgMGAsIGBcIlwiYCwgYHVuZGVmaW5lZGAsIGFuZCBgTmFOYCBhcmUgZmFsc2V5LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNvbXBhY3QuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmNvbXBhY3QoWzAsIDEsIGZhbHNlLCAyLCAnJywgM10pO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbXBhY3QoYXJyYXkpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgICAgICByZXN1bHQgPSBbXTtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGFycmF5IGNvbmNhdGVuYXRpbmcgYGFycmF5YCB3aXRoIGFueSBhZGRpdGlvbmFsIGFycmF5c1xuICAgICAqIGFuZC9vciB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gY29uY2F0ZW5hdGUuXG4gICAgICogQHBhcmFtIHsuLi4qfSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGNvbmNhdGVuYXRlLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGNvbmNhdGVuYXRlZCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gWzFdO1xuICAgICAqIHZhciBvdGhlciA9IF8uY29uY2F0KGFycmF5LCAyLCBbM10sIFtbNF1dKTtcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKG90aGVyKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgMywgWzRdXVxuICAgICAqXG4gICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAqIC8vID0+IFsxXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbmNhdCgpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgdmFyIGFyZ3MgPSBBcnJheShsZW5ndGggLSAxKSxcbiAgICAgICAgICBhcnJheSA9IGFyZ3VtZW50c1swXSxcbiAgICAgICAgICBpbmRleCA9IGxlbmd0aDtcblxuICAgICAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICAgICAgYXJnc1tpbmRleCAtIDFdID0gYXJndW1lbnRzW2luZGV4XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhcnJheVB1c2goaXNBcnJheShhcnJheSkgPyBjb3B5QXJyYXkoYXJyYXkpIDogW2FycmF5XSwgYmFzZUZsYXR0ZW4oYXJncywgMSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgYGFycmF5YCB2YWx1ZXMgbm90IGluY2x1ZGVkIGluIHRoZSBvdGhlciBnaXZlbiBhcnJheXNcbiAgICAgKiB1c2luZyBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICAgICAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy4gVGhlIG9yZGVyIGFuZCByZWZlcmVuY2VzIG9mIHJlc3VsdCB2YWx1ZXMgYXJlXG4gICAgICogZGV0ZXJtaW5lZCBieSB0aGUgZmlyc3QgYXJyYXkuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVW5saWtlIGBfLnB1bGxBbGxgLCB0aGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGFycmF5LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsuLi5BcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBleGNsdWRlLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAgICAgKiBAc2VlIF8ud2l0aG91dCwgXy54b3JcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5kaWZmZXJlbmNlKFsyLCAxXSwgWzIsIDNdKTtcbiAgICAgKiAvLyA9PiBbMV1cbiAgICAgKi9cbiAgICB2YXIgZGlmZmVyZW5jZSA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5LCB2YWx1ZXMpIHtcbiAgICAgIHJldHVybiBpc0FycmF5TGlrZU9iamVjdChhcnJheSlcbiAgICAgICAgPyBiYXNlRGlmZmVyZW5jZShhcnJheSwgYmFzZUZsYXR0ZW4odmFsdWVzLCAxLCBpc0FycmF5TGlrZU9iamVjdCwgdHJ1ZSkpXG4gICAgICAgIDogW107XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmRpZmZlcmVuY2VgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB3aGljaFxuICAgICAqIGlzIGludm9rZWQgZm9yIGVhY2ggZWxlbWVudCBvZiBgYXJyYXlgIGFuZCBgdmFsdWVzYCB0byBnZW5lcmF0ZSB0aGUgY3JpdGVyaW9uXG4gICAgICogYnkgd2hpY2ggdGhleSdyZSBjb21wYXJlZC4gVGhlIG9yZGVyIGFuZCByZWZlcmVuY2VzIG9mIHJlc3VsdCB2YWx1ZXMgYXJlXG4gICAgICogZGV0ZXJtaW5lZCBieSB0aGUgZmlyc3QgYXJyYXkuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OlxuICAgICAqICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVW5saWtlIGBfLnB1bGxBbGxCeWAsIHRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGV4Y2x1ZGUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5kaWZmZXJlbmNlQnkoWzIuMSwgMS4yXSwgWzIuMywgMy40XSwgTWF0aC5mbG9vcik7XG4gICAgICogLy8gPT4gWzEuMl1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZGlmZmVyZW5jZUJ5KFt7ICd4JzogMiB9LCB7ICd4JzogMSB9XSwgW3sgJ3gnOiAxIH1dLCAneCcpO1xuICAgICAqIC8vID0+IFt7ICd4JzogMiB9XVxuICAgICAqL1xuICAgIHZhciBkaWZmZXJlbmNlQnkgPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheSwgdmFsdWVzKSB7XG4gICAgICB2YXIgaXRlcmF0ZWUgPSBsYXN0KHZhbHVlcyk7XG4gICAgICBpZiAoaXNBcnJheUxpa2VPYmplY3QoaXRlcmF0ZWUpKSB7XG4gICAgICAgIGl0ZXJhdGVlID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGlzQXJyYXlMaWtlT2JqZWN0KGFycmF5KVxuICAgICAgICA/IGJhc2VEaWZmZXJlbmNlKGFycmF5LCBiYXNlRmxhdHRlbih2YWx1ZXMsIDEsIGlzQXJyYXlMaWtlT2JqZWN0LCB0cnVlKSwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDIpKVxuICAgICAgICA6IFtdO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5kaWZmZXJlbmNlYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjb21wYXJhdG9yYFxuICAgICAqIHdoaWNoIGlzIGludm9rZWQgdG8gY29tcGFyZSBlbGVtZW50cyBvZiBgYXJyYXlgIHRvIGB2YWx1ZXNgLiBUaGUgb3JkZXIgYW5kXG4gICAgICogcmVmZXJlbmNlcyBvZiByZXN1bHQgdmFsdWVzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBmaXJzdCBhcnJheS4gVGhlIGNvbXBhcmF0b3JcbiAgICAgKiBpcyBpbnZva2VkIHdpdGggdHdvIGFyZ3VtZW50czogKGFyclZhbCwgb3RoVmFsKS5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBVbmxpa2UgYF8ucHVsbEFsbFdpdGhgLCB0aGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGFycmF5LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsuLi5BcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBleGNsdWRlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogMiwgJ3knOiAxIH1dO1xuICAgICAqXG4gICAgICogXy5kaWZmZXJlbmNlV2l0aChvYmplY3RzLCBbeyAneCc6IDEsICd5JzogMiB9XSwgXy5pc0VxdWFsKTtcbiAgICAgKiAvLyA9PiBbeyAneCc6IDIsICd5JzogMSB9XVxuICAgICAqL1xuICAgIHZhciBkaWZmZXJlbmNlV2l0aCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5LCB2YWx1ZXMpIHtcbiAgICAgIHZhciBjb21wYXJhdG9yID0gbGFzdCh2YWx1ZXMpO1xuICAgICAgaWYgKGlzQXJyYXlMaWtlT2JqZWN0KGNvbXBhcmF0b3IpKSB7XG4gICAgICAgIGNvbXBhcmF0b3IgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gaXNBcnJheUxpa2VPYmplY3QoYXJyYXkpXG4gICAgICAgID8gYmFzZURpZmZlcmVuY2UoYXJyYXksIGJhc2VGbGF0dGVuKHZhbHVlcywgMSwgaXNBcnJheUxpa2VPYmplY3QsIHRydWUpLCB1bmRlZmluZWQsIGNvbXBhcmF0b3IpXG4gICAgICAgIDogW107XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2xpY2Ugb2YgYGFycmF5YCB3aXRoIGBuYCBlbGVtZW50cyBkcm9wcGVkIGZyb20gdGhlIGJlZ2lubmluZy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjUuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW249MV0gVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBkcm9wLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmRyb3AoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiBbMiwgM11cbiAgICAgKlxuICAgICAqIF8uZHJvcChbMSwgMiwgM10sIDIpO1xuICAgICAqIC8vID0+IFszXVxuICAgICAqXG4gICAgICogXy5kcm9wKFsxLCAyLCAzXSwgNSk7XG4gICAgICogLy8gPT4gW11cbiAgICAgKlxuICAgICAqIF8uZHJvcChbMSwgMiwgM10sIDApO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRyb3AoYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBuID0gKGd1YXJkIHx8IG4gPT09IHVuZGVmaW5lZCkgPyAxIDogdG9JbnRlZ2VyKG4pO1xuICAgICAgcmV0dXJuIGJhc2VTbGljZShhcnJheSwgbiA8IDAgPyAwIDogbiwgbGVuZ3RoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2xpY2Ugb2YgYGFycmF5YCB3aXRoIGBuYCBlbGVtZW50cyBkcm9wcGVkIGZyb20gdGhlIGVuZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW249MV0gVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBkcm9wLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmRyb3BSaWdodChbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IFsxLCAyXVxuICAgICAqXG4gICAgICogXy5kcm9wUmlnaHQoWzEsIDIsIDNdLCAyKTtcbiAgICAgKiAvLyA9PiBbMV1cbiAgICAgKlxuICAgICAqIF8uZHJvcFJpZ2h0KFsxLCAyLCAzXSwgNSk7XG4gICAgICogLy8gPT4gW11cbiAgICAgKlxuICAgICAqIF8uZHJvcFJpZ2h0KFsxLCAyLCAzXSwgMCk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICovXG4gICAgZnVuY3Rpb24gZHJvcFJpZ2h0KGFycmF5LCBuLCBndWFyZCkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgbiA9IChndWFyZCB8fCBuID09PSB1bmRlZmluZWQpID8gMSA6IHRvSW50ZWdlcihuKTtcbiAgICAgIG4gPSBsZW5ndGggLSBuO1xuICAgICAgcmV0dXJuIGJhc2VTbGljZShhcnJheSwgMCwgbiA8IDAgPyAwIDogbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgZXhjbHVkaW5nIGVsZW1lbnRzIGRyb3BwZWQgZnJvbSB0aGUgZW5kLlxuICAgICAqIEVsZW1lbnRzIGFyZSBkcm9wcGVkIHVudGlsIGBwcmVkaWNhdGVgIHJldHVybnMgZmFsc2V5LiBUaGUgcHJlZGljYXRlIGlzXG4gICAgICogaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleCwgYXJyYXkpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhY3RpdmUnOiB0cnVlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhY3RpdmUnOiBmYWxzZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8uZHJvcFJpZ2h0V2hpbGUodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuICFvLmFjdGl2ZTsgfSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmRyb3BSaWdodFdoaWxlKHVzZXJzLCB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogZmFsc2UgfSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknLCAnZnJlZCddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5kcm9wUmlnaHRXaGlsZSh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5J11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZHJvcFJpZ2h0V2hpbGUodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leScsICdmcmVkJywgJ3BlYmJsZXMnXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRyb3BSaWdodFdoaWxlKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgICAgICA/IGJhc2VXaGlsZShhcnJheSwgZ2V0SXRlcmF0ZWUocHJlZGljYXRlLCAzKSwgdHJ1ZSwgdHJ1ZSlcbiAgICAgICAgOiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2xpY2Ugb2YgYGFycmF5YCBleGNsdWRpbmcgZWxlbWVudHMgZHJvcHBlZCBmcm9tIHRoZSBiZWdpbm5pbmcuXG4gICAgICogRWxlbWVudHMgYXJlIGRyb3BwZWQgdW50aWwgYHByZWRpY2F0ZWAgcmV0dXJucyBmYWxzZXkuIFRoZSBwcmVkaWNhdGUgaXNcbiAgICAgKiBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4LCBhcnJheSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhY3RpdmUnOiB0cnVlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5kcm9wV2hpbGUodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuICFvLmFjdGl2ZTsgfSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydwZWJibGVzJ11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5kcm9wV2hpbGUodXNlcnMsIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FjdGl2ZSc6IGZhbHNlIH0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCcsICdwZWJibGVzJ11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmRyb3BXaGlsZSh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsncGViYmxlcyddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmRyb3BXaGlsZSh1c2VycywgJ2FjdGl2ZScpO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5JywgJ2ZyZWQnLCAncGViYmxlcyddXG4gICAgICovXG4gICAgZnVuY3Rpb24gZHJvcFdoaWxlKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgICAgICA/IGJhc2VXaGlsZShhcnJheSwgZ2V0SXRlcmF0ZWUocHJlZGljYXRlLCAzKSwgdHJ1ZSlcbiAgICAgICAgOiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaWxscyBlbGVtZW50cyBvZiBgYXJyYXlgIHdpdGggYHZhbHVlYCBmcm9tIGBzdGFydGAgdXAgdG8sIGJ1dCBub3RcbiAgICAgKiBpbmNsdWRpbmcsIGBlbmRgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjIuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmaWxsLlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGZpbGwgYGFycmF5YCB3aXRoLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IHBvc2l0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gWzEsIDIsIDNdO1xuICAgICAqXG4gICAgICogXy5maWxsKGFycmF5LCAnYScpO1xuICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgKiAvLyA9PiBbJ2EnLCAnYScsICdhJ11cbiAgICAgKlxuICAgICAqIF8uZmlsbChBcnJheSgzKSwgMik7XG4gICAgICogLy8gPT4gWzIsIDIsIDJdXG4gICAgICpcbiAgICAgKiBfLmZpbGwoWzQsIDYsIDgsIDEwXSwgJyonLCAxLCAzKTtcbiAgICAgKiAvLyA9PiBbNCwgJyonLCAnKicsIDEwXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbGwoYXJyYXksIHZhbHVlLCBzdGFydCwgZW5kKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBpZiAoc3RhcnQgJiYgdHlwZW9mIHN0YXJ0ICE9ICdudW1iZXInICYmIGlzSXRlcmF0ZWVDYWxsKGFycmF5LCB2YWx1ZSwgc3RhcnQpKSB7XG4gICAgICAgIHN0YXJ0ID0gMDtcbiAgICAgICAgZW5kID0gbGVuZ3RoO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VGaWxsKGFycmF5LCB2YWx1ZSwgc3RhcnQsIGVuZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5maW5kYCBleGNlcHQgdGhhdCBpdCByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZmlyc3RcbiAgICAgKiBlbGVtZW50IGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvciBpbnN0ZWFkIG9mIHRoZSBlbGVtZW50IGl0c2VsZi5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAxLjEuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2Zyb21JbmRleD0wXSBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZvdW5kIGVsZW1lbnQsIGVsc2UgYC0xYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhY3RpdmUnOiB0cnVlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5maW5kSW5kZXgodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8udXNlciA9PSAnYmFybmV5JzsgfSk7XG4gICAgICogLy8gPT4gMFxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbmRJbmRleCh1c2VycywgeyAndXNlcic6ICdmcmVkJywgJ2FjdGl2ZSc6IGZhbHNlIH0pO1xuICAgICAqIC8vID0+IDFcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbmRJbmRleCh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICAgICAqIC8vID0+IDBcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmluZEluZGV4KHVzZXJzLCAnYWN0aXZlJyk7XG4gICAgICogLy8gPT4gMlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbmRJbmRleChhcnJheSwgcHJlZGljYXRlLCBmcm9tSW5kZXgpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICAgIHZhciBpbmRleCA9IGZyb21JbmRleCA9PSBudWxsID8gMCA6IHRvSW50ZWdlcihmcm9tSW5kZXgpO1xuICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICBpbmRleCA9IG5hdGl2ZU1heChsZW5ndGggKyBpbmRleCwgMCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZUZpbmRJbmRleChhcnJheSwgZ2V0SXRlcmF0ZWUocHJlZGljYXRlLCAzKSwgaW5kZXgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmluZEluZGV4YCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIGVsZW1lbnRzXG4gICAgICogb2YgYGNvbGxlY3Rpb25gIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAyLjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2Zyb21JbmRleD1hcnJheS5sZW5ndGgtMV0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmb3VuZCBlbGVtZW50LCBlbHNlIGAtMWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhY3RpdmUnOiB0cnVlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhY3RpdmUnOiBmYWxzZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8uZmluZExhc3RJbmRleCh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gby51c2VyID09ICdwZWJibGVzJzsgfSk7XG4gICAgICogLy8gPT4gMlxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbmRMYXN0SW5kZXgodXNlcnMsIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FjdGl2ZSc6IHRydWUgfSk7XG4gICAgICogLy8gPT4gMFxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmluZExhc3RJbmRleCh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICAgICAqIC8vID0+IDJcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmluZExhc3RJbmRleCh1c2VycywgJ2FjdGl2ZScpO1xuICAgICAqIC8vID0+IDBcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmaW5kTGFzdEluZGV4KGFycmF5LCBwcmVkaWNhdGUsIGZyb21JbmRleCkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gbGVuZ3RoIC0gMTtcbiAgICAgIGlmIChmcm9tSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpbmRleCA9IHRvSW50ZWdlcihmcm9tSW5kZXgpO1xuICAgICAgICBpbmRleCA9IGZyb21JbmRleCA8IDBcbiAgICAgICAgICA/IG5hdGl2ZU1heChsZW5ndGggKyBpbmRleCwgMClcbiAgICAgICAgICA6IG5hdGl2ZU1pbihpbmRleCwgbGVuZ3RoIC0gMSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZUZpbmRJbmRleChhcnJheSwgZ2V0SXRlcmF0ZWUocHJlZGljYXRlLCAzKSwgaW5kZXgsIHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZsYXR0ZW5zIGBhcnJheWAgYSBzaW5nbGUgbGV2ZWwgZGVlcC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5mbGF0dGVuKFsxLCBbMiwgWzMsIFs0XV0sIDVdXSk7XG4gICAgICogLy8gPT4gWzEsIDIsIFszLCBbNF1dLCA1XVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZsYXR0ZW4oYXJyYXkpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIHJldHVybiBsZW5ndGggPyBiYXNlRmxhdHRlbihhcnJheSwgMSkgOiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWN1cnNpdmVseSBmbGF0dGVucyBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZsYXR0ZW4uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmZsYXR0ZW5EZWVwKFsxLCBbMiwgWzMsIFs0XV0sIDVdXSk7XG4gICAgICogLy8gPT4gWzEsIDIsIDMsIDQsIDVdXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmxhdHRlbkRlZXAoYXJyYXkpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIHJldHVybiBsZW5ndGggPyBiYXNlRmxhdHRlbihhcnJheSwgSU5GSU5JVFkpIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVjdXJzaXZlbHkgZmxhdHRlbiBgYXJyYXlgIHVwIHRvIGBkZXB0aGAgdGltZXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC40LjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2RlcHRoPTFdIFRoZSBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFsxLCBbMiwgWzMsIFs0XV0sIDVdXTtcbiAgICAgKlxuICAgICAqIF8uZmxhdHRlbkRlcHRoKGFycmF5LCAxKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgWzMsIFs0XV0sIDVdXG4gICAgICpcbiAgICAgKiBfLmZsYXR0ZW5EZXB0aChhcnJheSwgMik7XG4gICAgICogLy8gPT4gWzEsIDIsIDMsIFs0XSwgNV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmbGF0dGVuRGVwdGgoYXJyYXksIGRlcHRoKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBkZXB0aCA9IGRlcHRoID09PSB1bmRlZmluZWQgPyAxIDogdG9JbnRlZ2VyKGRlcHRoKTtcbiAgICAgIHJldHVybiBiYXNlRmxhdHRlbihhcnJheSwgZGVwdGgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBpbnZlcnNlIG9mIGBfLnRvUGFpcnNgOyB0aGlzIG1ldGhvZCByZXR1cm5zIGFuIG9iamVjdCBjb21wb3NlZFxuICAgICAqIGZyb20ga2V5LXZhbHVlIGBwYWlyc2AuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBwYWlycyBUaGUga2V5LXZhbHVlIHBhaXJzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZnJvbVBhaXJzKFtbJ2EnLCAxXSwgWydiJywgMl1dKTtcbiAgICAgKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmcm9tUGFpcnMocGFpcnMpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IHBhaXJzID09IG51bGwgPyAwIDogcGFpcnMubGVuZ3RoLFxuICAgICAgICAgIHJlc3VsdCA9IHt9O1xuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgcGFpciA9IHBhaXJzW2luZGV4XTtcbiAgICAgICAgcmVzdWx0W3BhaXJbMF1dID0gcGFpclsxXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgZmlyc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGFsaWFzIGZpcnN0XG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmaXJzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaGVhZChbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IDFcbiAgICAgKlxuICAgICAqIF8uaGVhZChbXSk7XG4gICAgICogLy8gPT4gdW5kZWZpbmVkXG4gICAgICovXG4gICAgZnVuY3Rpb24gaGVhZChhcnJheSkge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpID8gYXJyYXlbMF0gOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgaW5kZXggYXQgd2hpY2ggdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYHZhbHVlYCBpcyBmb3VuZCBpbiBgYXJyYXlgXG4gICAgICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAgICAgKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuIElmIGBmcm9tSW5kZXhgIGlzIG5lZ2F0aXZlLCBpdCdzIHVzZWQgYXMgdGhlXG4gICAgICogb2Zmc2V0IGZyb20gdGhlIGVuZCBvZiBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2Zyb21JbmRleD0wXSBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pbmRleE9mKFsxLCAyLCAxLCAyXSwgMik7XG4gICAgICogLy8gPT4gMVxuICAgICAqXG4gICAgICogLy8gU2VhcmNoIGZyb20gdGhlIGBmcm9tSW5kZXhgLlxuICAgICAqIF8uaW5kZXhPZihbMSwgMiwgMSwgMl0sIDIsIDIpO1xuICAgICAqIC8vID0+IDNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICB2YXIgaW5kZXggPSBmcm9tSW5kZXggPT0gbnVsbCA/IDAgOiB0b0ludGVnZXIoZnJvbUluZGV4KTtcbiAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgaW5kZXggPSBuYXRpdmVNYXgobGVuZ3RoICsgaW5kZXgsIDApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VJbmRleE9mKGFycmF5LCB2YWx1ZSwgaW5kZXgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYWxsIGJ1dCB0aGUgbGFzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmluaXRpYWwoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiBbMSwgMl1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpbml0aWFsKGFycmF5KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICByZXR1cm4gbGVuZ3RoID8gYmFzZVNsaWNlKGFycmF5LCAwLCAtMSkgOiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIHVuaXF1ZSB2YWx1ZXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gYWxsIGdpdmVuIGFycmF5c1xuICAgICAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gICAgICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLiBUaGUgb3JkZXIgYW5kIHJlZmVyZW5jZXMgb2YgcmVzdWx0IHZhbHVlcyBhcmVcbiAgICAgKiBkZXRlcm1pbmVkIGJ5IHRoZSBmaXJzdCBhcnJheS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBpbnRlcnNlY3RpbmcgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmludGVyc2VjdGlvbihbMiwgMV0sIFsyLCAzXSk7XG4gICAgICogLy8gPT4gWzJdXG4gICAgICovXG4gICAgdmFyIGludGVyc2VjdGlvbiA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cykge1xuICAgICAgdmFyIG1hcHBlZCA9IGFycmF5TWFwKGFycmF5cywgY2FzdEFycmF5TGlrZU9iamVjdCk7XG4gICAgICByZXR1cm4gKG1hcHBlZC5sZW5ndGggJiYgbWFwcGVkWzBdID09PSBhcnJheXNbMF0pXG4gICAgICAgID8gYmFzZUludGVyc2VjdGlvbihtYXBwZWQpXG4gICAgICAgIDogW107XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmludGVyc2VjdGlvbmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgXG4gICAgICogd2hpY2ggaXMgaW52b2tlZCBmb3IgZWFjaCBlbGVtZW50IG9mIGVhY2ggYGFycmF5c2AgdG8gZ2VuZXJhdGUgdGhlIGNyaXRlcmlvblxuICAgICAqIGJ5IHdoaWNoIHRoZXkncmUgY29tcGFyZWQuIFRoZSBvcmRlciBhbmQgcmVmZXJlbmNlcyBvZiByZXN1bHQgdmFsdWVzIGFyZVxuICAgICAqIGRldGVybWluZWQgYnkgdGhlIGZpcnN0IGFycmF5LiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDpcbiAgICAgKiAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBpbnRlcnNlY3RpbmcgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmludGVyc2VjdGlvbkJ5KFsyLjEsIDEuMl0sIFsyLjMsIDMuNF0sIE1hdGguZmxvb3IpO1xuICAgICAqIC8vID0+IFsyLjFdXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmludGVyc2VjdGlvbkJ5KFt7ICd4JzogMSB9XSwgW3sgJ3gnOiAyIH0sIHsgJ3gnOiAxIH1dLCAneCcpO1xuICAgICAqIC8vID0+IFt7ICd4JzogMSB9XVxuICAgICAqL1xuICAgIHZhciBpbnRlcnNlY3Rpb25CeSA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cykge1xuICAgICAgdmFyIGl0ZXJhdGVlID0gbGFzdChhcnJheXMpLFxuICAgICAgICAgIG1hcHBlZCA9IGFycmF5TWFwKGFycmF5cywgY2FzdEFycmF5TGlrZU9iamVjdCk7XG5cbiAgICAgIGlmIChpdGVyYXRlZSA9PT0gbGFzdChtYXBwZWQpKSB7XG4gICAgICAgIGl0ZXJhdGVlID0gdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWFwcGVkLnBvcCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIChtYXBwZWQubGVuZ3RoICYmIG1hcHBlZFswXSA9PT0gYXJyYXlzWzBdKVxuICAgICAgICA/IGJhc2VJbnRlcnNlY3Rpb24obWFwcGVkLCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMikpXG4gICAgICAgIDogW107XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmludGVyc2VjdGlvbmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY29tcGFyYXRvcmBcbiAgICAgKiB3aGljaCBpcyBpbnZva2VkIHRvIGNvbXBhcmUgZWxlbWVudHMgb2YgYGFycmF5c2AuIFRoZSBvcmRlciBhbmQgcmVmZXJlbmNlc1xuICAgICAqIG9mIHJlc3VsdCB2YWx1ZXMgYXJlIGRldGVybWluZWQgYnkgdGhlIGZpcnN0IGFycmF5LiBUaGUgY29tcGFyYXRvciBpc1xuICAgICAqIGludm9rZWQgd2l0aCB0d28gYXJndW1lbnRzOiAoYXJyVmFsLCBvdGhWYWwpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGludGVyc2VjdGluZyB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW3sgJ3gnOiAxLCAneSc6IDIgfSwgeyAneCc6IDIsICd5JzogMSB9XTtcbiAgICAgKiB2YXIgb3RoZXJzID0gW3sgJ3gnOiAxLCAneSc6IDEgfSwgeyAneCc6IDEsICd5JzogMiB9XTtcbiAgICAgKlxuICAgICAqIF8uaW50ZXJzZWN0aW9uV2l0aChvYmplY3RzLCBvdGhlcnMsIF8uaXNFcXVhbCk7XG4gICAgICogLy8gPT4gW3sgJ3gnOiAxLCAneSc6IDIgfV1cbiAgICAgKi9cbiAgICB2YXIgaW50ZXJzZWN0aW9uV2l0aCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cykge1xuICAgICAgdmFyIGNvbXBhcmF0b3IgPSBsYXN0KGFycmF5cyksXG4gICAgICAgICAgbWFwcGVkID0gYXJyYXlNYXAoYXJyYXlzLCBjYXN0QXJyYXlMaWtlT2JqZWN0KTtcblxuICAgICAgY29tcGFyYXRvciA9IHR5cGVvZiBjb21wYXJhdG9yID09ICdmdW5jdGlvbicgPyBjb21wYXJhdG9yIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKGNvbXBhcmF0b3IpIHtcbiAgICAgICAgbWFwcGVkLnBvcCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIChtYXBwZWQubGVuZ3RoICYmIG1hcHBlZFswXSA9PT0gYXJyYXlzWzBdKVxuICAgICAgICA/IGJhc2VJbnRlcnNlY3Rpb24obWFwcGVkLCB1bmRlZmluZWQsIGNvbXBhcmF0b3IpXG4gICAgICAgIDogW107XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhbGwgZWxlbWVudHMgaW4gYGFycmF5YCBpbnRvIGEgc3RyaW5nIHNlcGFyYXRlZCBieSBgc2VwYXJhdG9yYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjb252ZXJ0LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc2VwYXJhdG9yPScsJ10gVGhlIGVsZW1lbnQgc2VwYXJhdG9yLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGpvaW5lZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uam9pbihbJ2EnLCAnYicsICdjJ10sICd+Jyk7XG4gICAgICogLy8gPT4gJ2F+Yn5jJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGpvaW4oYXJyYXksIHNlcGFyYXRvcikge1xuICAgICAgcmV0dXJuIGFycmF5ID09IG51bGwgPyAnJyA6IG5hdGl2ZUpvaW4uY2FsbChhcnJheSwgc2VwYXJhdG9yKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBsYXN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbGFzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ubGFzdChbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IDNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsYXN0KGFycmF5KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICByZXR1cm4gbGVuZ3RoID8gYXJyYXlbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pbmRleE9mYCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mXG4gICAgICogYGFycmF5YCBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZnJvbUluZGV4PWFycmF5Lmxlbmd0aC0xXSBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5sYXN0SW5kZXhPZihbMSwgMiwgMSwgMl0sIDIpO1xuICAgICAqIC8vID0+IDNcbiAgICAgKlxuICAgICAqIC8vIFNlYXJjaCBmcm9tIHRoZSBgZnJvbUluZGV4YC5cbiAgICAgKiBfLmxhc3RJbmRleE9mKFsxLCAyLCAxLCAyXSwgMiwgMik7XG4gICAgICogLy8gPT4gMVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxhc3RJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICB2YXIgaW5kZXggPSBsZW5ndGg7XG4gICAgICBpZiAoZnJvbUluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaW5kZXggPSB0b0ludGVnZXIoZnJvbUluZGV4KTtcbiAgICAgICAgaW5kZXggPSBpbmRleCA8IDAgPyBuYXRpdmVNYXgobGVuZ3RoICsgaW5kZXgsIDApIDogbmF0aXZlTWluKGluZGV4LCBsZW5ndGggLSAxKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gdmFsdWVcbiAgICAgICAgPyBzdHJpY3RMYXN0SW5kZXhPZihhcnJheSwgdmFsdWUsIGluZGV4KVxuICAgICAgICA6IGJhc2VGaW5kSW5kZXgoYXJyYXksIGJhc2VJc05hTiwgaW5kZXgsIHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGVsZW1lbnQgYXQgaW5kZXggYG5gIG9mIGBhcnJheWAuIElmIGBuYCBpcyBuZWdhdGl2ZSwgdGhlIG50aFxuICAgICAqIGVsZW1lbnQgZnJvbSB0aGUgZW5kIGlzIHJldHVybmVkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMTEuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW249MF0gVGhlIGluZGV4IG9mIHRoZSBlbGVtZW50IHRvIHJldHVybi5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbnRoIGVsZW1lbnQgb2YgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gWydhJywgJ2InLCAnYycsICdkJ107XG4gICAgICpcbiAgICAgKiBfLm50aChhcnJheSwgMSk7XG4gICAgICogLy8gPT4gJ2InXG4gICAgICpcbiAgICAgKiBfLm50aChhcnJheSwgLTIpO1xuICAgICAqIC8vID0+ICdjJztcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBudGgoYXJyYXksIG4pIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKSA/IGJhc2VOdGgoYXJyYXksIHRvSW50ZWdlcihuKSkgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhbGwgZ2l2ZW4gdmFsdWVzIGZyb20gYGFycmF5YCB1c2luZ1xuICAgICAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gICAgICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFVubGlrZSBgXy53aXRob3V0YCwgdGhpcyBtZXRob2QgbXV0YXRlcyBgYXJyYXlgLiBVc2UgYF8ucmVtb3ZlYFxuICAgICAqIHRvIHJlbW92ZSBlbGVtZW50cyBmcm9tIGFuIGFycmF5IGJ5IHByZWRpY2F0ZS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAyLjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHsuLi4qfSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIHJlbW92ZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gWydhJywgJ2InLCAnYycsICdhJywgJ2InLCAnYyddO1xuICAgICAqXG4gICAgICogXy5wdWxsKGFycmF5LCAnYScsICdjJyk7XG4gICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAqIC8vID0+IFsnYicsICdiJ11cbiAgICAgKi9cbiAgICB2YXIgcHVsbCA9IGJhc2VSZXN0KHB1bGxBbGwpO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5wdWxsYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGFuIGFycmF5IG9mIHZhbHVlcyB0byByZW1vdmUuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVW5saWtlIGBfLmRpZmZlcmVuY2VgLCB0aGlzIG1ldGhvZCBtdXRhdGVzIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIHJlbW92ZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gWydhJywgJ2InLCAnYycsICdhJywgJ2InLCAnYyddO1xuICAgICAqXG4gICAgICogXy5wdWxsQWxsKGFycmF5LCBbJ2EnLCAnYyddKTtcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gICAgICogLy8gPT4gWydiJywgJ2InXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHB1bGxBbGwoYXJyYXksIHZhbHVlcykge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGggJiYgdmFsdWVzICYmIHZhbHVlcy5sZW5ndGgpXG4gICAgICAgID8gYmFzZVB1bGxBbGwoYXJyYXksIHZhbHVlcylcbiAgICAgICAgOiBhcnJheTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnB1bGxBbGxgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB3aGljaCBpc1xuICAgICAqIGludm9rZWQgZm9yIGVhY2ggZWxlbWVudCBvZiBgYXJyYXlgIGFuZCBgdmFsdWVzYCB0byBnZW5lcmF0ZSB0aGUgY3JpdGVyaW9uXG4gICAgICogYnkgd2hpY2ggdGhleSdyZSBjb21wYXJlZC4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVW5saWtlIGBfLmRpZmZlcmVuY2VCeWAsIHRoaXMgbWV0aG9kIG11dGF0ZXMgYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gcmVtb3ZlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gW3sgJ3gnOiAxIH0sIHsgJ3gnOiAyIH0sIHsgJ3gnOiAzIH0sIHsgJ3gnOiAxIH1dO1xuICAgICAqXG4gICAgICogXy5wdWxsQWxsQnkoYXJyYXksIFt7ICd4JzogMSB9LCB7ICd4JzogMyB9XSwgJ3gnKTtcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gICAgICogLy8gPT4gW3sgJ3gnOiAyIH1dXG4gICAgICovXG4gICAgZnVuY3Rpb24gcHVsbEFsbEJ5KGFycmF5LCB2YWx1ZXMsIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aCAmJiB2YWx1ZXMgJiYgdmFsdWVzLmxlbmd0aClcbiAgICAgICAgPyBiYXNlUHVsbEFsbChhcnJheSwgdmFsdWVzLCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMikpXG4gICAgICAgIDogYXJyYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5wdWxsQWxsYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjb21wYXJhdG9yYCB3aGljaFxuICAgICAqIGlzIGludm9rZWQgdG8gY29tcGFyZSBlbGVtZW50cyBvZiBgYXJyYXlgIHRvIGB2YWx1ZXNgLiBUaGUgY29tcGFyYXRvciBpc1xuICAgICAqIGludm9rZWQgd2l0aCB0d28gYXJndW1lbnRzOiAoYXJyVmFsLCBvdGhWYWwpLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFVubGlrZSBgXy5kaWZmZXJlbmNlV2l0aGAsIHRoaXMgbWV0aG9kIG11dGF0ZXMgYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjYuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gcmVtb3ZlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogMywgJ3knOiA0IH0sIHsgJ3gnOiA1LCAneSc6IDYgfV07XG4gICAgICpcbiAgICAgKiBfLnB1bGxBbGxXaXRoKGFycmF5LCBbeyAneCc6IDMsICd5JzogNCB9XSwgXy5pc0VxdWFsKTtcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gICAgICogLy8gPT4gW3sgJ3gnOiAxLCAneSc6IDIgfSwgeyAneCc6IDUsICd5JzogNiB9XVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHB1bGxBbGxXaXRoKGFycmF5LCB2YWx1ZXMsIGNvbXBhcmF0b3IpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoICYmIHZhbHVlcyAmJiB2YWx1ZXMubGVuZ3RoKVxuICAgICAgICA/IGJhc2VQdWxsQWxsKGFycmF5LCB2YWx1ZXMsIHVuZGVmaW5lZCwgY29tcGFyYXRvcilcbiAgICAgICAgOiBhcnJheTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGVsZW1lbnRzIGZyb20gYGFycmF5YCBjb3JyZXNwb25kaW5nIHRvIGBpbmRleGVzYCBhbmQgcmV0dXJucyBhblxuICAgICAqIGFycmF5IG9mIHJlbW92ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVW5saWtlIGBfLmF0YCwgdGhpcyBtZXRob2QgbXV0YXRlcyBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0gey4uLihudW1iZXJ8bnVtYmVyW10pfSBbaW5kZXhlc10gVGhlIGluZGV4ZXMgb2YgZWxlbWVudHMgdG8gcmVtb3ZlLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIHJlbW92ZWQgZWxlbWVudHMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFsnYScsICdiJywgJ2MnLCAnZCddO1xuICAgICAqIHZhciBwdWxsZWQgPSBfLnB1bGxBdChhcnJheSwgWzEsIDNdKTtcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgKiAvLyA9PiBbJ2EnLCAnYyddXG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhwdWxsZWQpO1xuICAgICAqIC8vID0+IFsnYicsICdkJ11cbiAgICAgKi9cbiAgICB2YXIgcHVsbEF0ID0gZmxhdFJlc3QoZnVuY3Rpb24oYXJyYXksIGluZGV4ZXMpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgICByZXN1bHQgPSBiYXNlQXQoYXJyYXksIGluZGV4ZXMpO1xuXG4gICAgICBiYXNlUHVsbEF0KGFycmF5LCBhcnJheU1hcChpbmRleGVzLCBmdW5jdGlvbihpbmRleCkge1xuICAgICAgICByZXR1cm4gaXNJbmRleChpbmRleCwgbGVuZ3RoKSA/ICtpbmRleCA6IGluZGV4O1xuICAgICAgfSkuc29ydChjb21wYXJlQXNjZW5kaW5nKSk7XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGFsbCBlbGVtZW50cyBmcm9tIGBhcnJheWAgdGhhdCBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3JcbiAgICAgKiBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiB0aGUgcmVtb3ZlZCBlbGVtZW50cy4gVGhlIHByZWRpY2F0ZSBpcyBpbnZva2VkXG4gICAgICogd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXgsIGFycmF5KS5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBVbmxpa2UgYF8uZmlsdGVyYCwgdGhpcyBtZXRob2QgbXV0YXRlcyBgYXJyYXlgLiBVc2UgYF8ucHVsbGBcbiAgICAgKiB0byBwdWxsIGVsZW1lbnRzIGZyb20gYW4gYXJyYXkgYnkgdmFsdWUuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiByZW1vdmVkIGVsZW1lbnRzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbMSwgMiwgMywgNF07XG4gICAgICogdmFyIGV2ZW5zID0gXy5yZW1vdmUoYXJyYXksIGZ1bmN0aW9uKG4pIHtcbiAgICAgKiAgIHJldHVybiBuICUgMiA9PSAwO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAqIC8vID0+IFsxLCAzXVxuICAgICAqXG4gICAgICogY29uc29sZS5sb2coZXZlbnMpO1xuICAgICAqIC8vID0+IFsyLCA0XVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlbW92ZShhcnJheSwgcHJlZGljYXRlKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICBpZiAoIShhcnJheSAmJiBhcnJheS5sZW5ndGgpKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBpbmRleGVzID0gW10sXG4gICAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gICAgICBwcmVkaWNhdGUgPSBnZXRJdGVyYXRlZShwcmVkaWNhdGUsIDMpO1xuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgICAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICAgIGluZGV4ZXMucHVzaChpbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJhc2VQdWxsQXQoYXJyYXksIGluZGV4ZXMpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXZlcnNlcyBgYXJyYXlgIHNvIHRoYXQgdGhlIGZpcnN0IGVsZW1lbnQgYmVjb21lcyB0aGUgbGFzdCwgdGhlIHNlY29uZFxuICAgICAqIGVsZW1lbnQgYmVjb21lcyB0aGUgc2Vjb25kIHRvIGxhc3QsIGFuZCBzbyBvbi5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBhcnJheWAgYW5kIGlzIGJhc2VkIG9uXG4gICAgICogW2BBcnJheSNyZXZlcnNlYF0oaHR0cHM6Ly9tZG4uaW8vQXJyYXkvcmV2ZXJzZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbMSwgMiwgM107XG4gICAgICpcbiAgICAgKiBfLnJldmVyc2UoYXJyYXkpO1xuICAgICAqIC8vID0+IFszLCAyLCAxXVxuICAgICAqXG4gICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAqIC8vID0+IFszLCAyLCAxXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJldmVyc2UoYXJyYXkpIHtcbiAgICAgIHJldHVybiBhcnJheSA9PSBudWxsID8gYXJyYXkgOiBuYXRpdmVSZXZlcnNlLmNhbGwoYXJyYXkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzbGljZSBvZiBgYXJyYXlgIGZyb20gYHN0YXJ0YCB1cCB0bywgYnV0IG5vdCBpbmNsdWRpbmcsIGBlbmRgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW5zdGVhZCBvZlxuICAgICAqIFtgQXJyYXkjc2xpY2VgXShodHRwczovL21kbi5pby9BcnJheS9zbGljZSkgdG8gZW5zdXJlIGRlbnNlIGFycmF5cyBhcmVcbiAgICAgKiByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzbGljZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBwb3NpdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2VuZD1hcnJheS5sZW5ndGhdIFRoZSBlbmQgcG9zaXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNsaWNlKGFycmF5LCBzdGFydCwgZW5kKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBpZiAoZW5kICYmIHR5cGVvZiBlbmQgIT0gJ251bWJlcicgJiYgaXNJdGVyYXRlZUNhbGwoYXJyYXksIHN0YXJ0LCBlbmQpKSB7XG4gICAgICAgIHN0YXJ0ID0gMDtcbiAgICAgICAgZW5kID0gbGVuZ3RoO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHN0YXJ0ID0gc3RhcnQgPT0gbnVsbCA/IDAgOiB0b0ludGVnZXIoc3RhcnQpO1xuICAgICAgICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvSW50ZWdlcihlbmQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VTbGljZShhcnJheSwgc3RhcnQsIGVuZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXNlcyBhIGJpbmFyeSBzZWFyY2ggdG8gZGV0ZXJtaW5lIHRoZSBsb3dlc3QgaW5kZXggYXQgd2hpY2ggYHZhbHVlYFxuICAgICAqIHNob3VsZCBiZSBpbnNlcnRlZCBpbnRvIGBhcnJheWAgaW4gb3JkZXIgdG8gbWFpbnRhaW4gaXRzIHNvcnQgb3JkZXIuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgc29ydGVkIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gZXZhbHVhdGUuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggYXQgd2hpY2ggYHZhbHVlYCBzaG91bGQgYmUgaW5zZXJ0ZWRcbiAgICAgKiAgaW50byBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnNvcnRlZEluZGV4KFszMCwgNTBdLCA0MCk7XG4gICAgICogLy8gPT4gMVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNvcnRlZEluZGV4KGFycmF5LCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIGJhc2VTb3J0ZWRJbmRleChhcnJheSwgdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uc29ydGVkSW5kZXhgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYFxuICAgICAqIHdoaWNoIGlzIGludm9rZWQgZm9yIGB2YWx1ZWAgYW5kIGVhY2ggZWxlbWVudCBvZiBgYXJyYXlgIHRvIGNvbXB1dGUgdGhlaXJcbiAgICAgKiBzb3J0IHJhbmtpbmcuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIHNvcnRlZCBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGV2YWx1YXRlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBhdCB3aGljaCBgdmFsdWVgIHNob3VsZCBiZSBpbnNlcnRlZFxuICAgICAqICBpbnRvIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW3sgJ3gnOiA0IH0sIHsgJ3gnOiA1IH1dO1xuICAgICAqXG4gICAgICogXy5zb3J0ZWRJbmRleEJ5KG9iamVjdHMsIHsgJ3gnOiA0IH0sIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8ueDsgfSk7XG4gICAgICogLy8gPT4gMFxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5zb3J0ZWRJbmRleEJ5KG9iamVjdHMsIHsgJ3gnOiA0IH0sICd4Jyk7XG4gICAgICogLy8gPT4gMFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNvcnRlZEluZGV4QnkoYXJyYXksIHZhbHVlLCBpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIGJhc2VTb3J0ZWRJbmRleEJ5KGFycmF5LCB2YWx1ZSwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDIpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmluZGV4T2ZgIGV4Y2VwdCB0aGF0IGl0IHBlcmZvcm1zIGEgYmluYXJ5XG4gICAgICogc2VhcmNoIG9uIGEgc29ydGVkIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc29ydGVkSW5kZXhPZihbNCwgNSwgNSwgNSwgNl0sIDUpO1xuICAgICAqIC8vID0+IDFcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzb3J0ZWRJbmRleE9mKGFycmF5LCB2YWx1ZSkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgaWYgKGxlbmd0aCkge1xuICAgICAgICB2YXIgaW5kZXggPSBiYXNlU29ydGVkSW5kZXgoYXJyYXksIHZhbHVlKTtcbiAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoICYmIGVxKGFycmF5W2luZGV4XSwgdmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5zb3J0ZWRJbmRleGAgZXhjZXB0IHRoYXQgaXQgcmV0dXJucyB0aGUgaGlnaGVzdFxuICAgICAqIGluZGV4IGF0IHdoaWNoIGB2YWx1ZWAgc2hvdWxkIGJlIGluc2VydGVkIGludG8gYGFycmF5YCBpbiBvcmRlciB0b1xuICAgICAqIG1haW50YWluIGl0cyBzb3J0IG9yZGVyLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIHNvcnRlZCBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGV2YWx1YXRlLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IGF0IHdoaWNoIGB2YWx1ZWAgc2hvdWxkIGJlIGluc2VydGVkXG4gICAgICogIGludG8gYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zb3J0ZWRMYXN0SW5kZXgoWzQsIDUsIDUsIDUsIDZdLCA1KTtcbiAgICAgKiAvLyA9PiA0XG4gICAgICovXG4gICAgZnVuY3Rpb24gc29ydGVkTGFzdEluZGV4KGFycmF5LCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIGJhc2VTb3J0ZWRJbmRleChhcnJheSwgdmFsdWUsIHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uc29ydGVkTGFzdEluZGV4YCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWBcbiAgICAgKiB3aGljaCBpcyBpbnZva2VkIGZvciBgdmFsdWVgIGFuZCBlYWNoIGVsZW1lbnQgb2YgYGFycmF5YCB0byBjb21wdXRlIHRoZWlyXG4gICAgICogc29ydCByYW5raW5nLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBzb3J0ZWQgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBldmFsdWF0ZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggYXQgd2hpY2ggYHZhbHVlYCBzaG91bGQgYmUgaW5zZXJ0ZWRcbiAgICAgKiAgaW50byBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFt7ICd4JzogNCB9LCB7ICd4JzogNSB9XTtcbiAgICAgKlxuICAgICAqIF8uc29ydGVkTGFzdEluZGV4Qnkob2JqZWN0cywgeyAneCc6IDQgfSwgZnVuY3Rpb24obykgeyByZXR1cm4gby54OyB9KTtcbiAgICAgKiAvLyA9PiAxXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnNvcnRlZExhc3RJbmRleEJ5KG9iamVjdHMsIHsgJ3gnOiA0IH0sICd4Jyk7XG4gICAgICogLy8gPT4gMVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNvcnRlZExhc3RJbmRleEJ5KGFycmF5LCB2YWx1ZSwgaXRlcmF0ZWUpIHtcbiAgICAgIHJldHVybiBiYXNlU29ydGVkSW5kZXhCeShhcnJheSwgdmFsdWUsIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5sYXN0SW5kZXhPZmAgZXhjZXB0IHRoYXQgaXQgcGVyZm9ybXMgYSBiaW5hcnlcbiAgICAgKiBzZWFyY2ggb24gYSBzb3J0ZWQgYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zb3J0ZWRMYXN0SW5kZXhPZihbNCwgNSwgNSwgNSwgNl0sIDUpO1xuICAgICAqIC8vID0+IDNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzb3J0ZWRMYXN0SW5kZXhPZihhcnJheSwgdmFsdWUpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIGlmIChsZW5ndGgpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gYmFzZVNvcnRlZEluZGV4KGFycmF5LCB2YWx1ZSwgdHJ1ZSkgLSAxO1xuICAgICAgICBpZiAoZXEoYXJyYXlbaW5kZXhdLCB2YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnVuaXFgIGV4Y2VwdCB0aGF0IGl0J3MgZGVzaWduZWQgYW5kIG9wdGltaXplZFxuICAgICAqIGZvciBzb3J0ZWQgYXJyYXlzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZHVwbGljYXRlIGZyZWUgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc29ydGVkVW5pcShbMSwgMSwgMl0pO1xuICAgICAqIC8vID0+IFsxLCAyXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNvcnRlZFVuaXEoYXJyYXkpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgICAgICA/IGJhc2VTb3J0ZWRVbmlxKGFycmF5KVxuICAgICAgICA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8udW5pcUJ5YCBleGNlcHQgdGhhdCBpdCdzIGRlc2lnbmVkIGFuZCBvcHRpbWl6ZWRcbiAgICAgKiBmb3Igc29ydGVkIGFycmF5cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZHVwbGljYXRlIGZyZWUgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc29ydGVkVW5pcUJ5KFsxLjEsIDEuMiwgMi4zLCAyLjRdLCBNYXRoLmZsb29yKTtcbiAgICAgKiAvLyA9PiBbMS4xLCAyLjNdXG4gICAgICovXG4gICAgZnVuY3Rpb24gc29ydGVkVW5pcUJ5KGFycmF5LCBpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgICAgID8gYmFzZVNvcnRlZFVuaXEoYXJyYXksIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSlcbiAgICAgICAgOiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGFsbCBidXQgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udGFpbChbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IFsyLCAzXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRhaWwoYXJyYXkpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIHJldHVybiBsZW5ndGggPyBiYXNlU2xpY2UoYXJyYXksIDEsIGxlbmd0aCkgOiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2xpY2Ugb2YgYGFycmF5YCB3aXRoIGBuYCBlbGVtZW50cyB0YWtlbiBmcm9tIHRoZSBiZWdpbm5pbmcuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtuPTFdIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gdGFrZS5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50YWtlKFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gWzFdXG4gICAgICpcbiAgICAgKiBfLnRha2UoWzEsIDIsIDNdLCAyKTtcbiAgICAgKiAvLyA9PiBbMSwgMl1cbiAgICAgKlxuICAgICAqIF8udGFrZShbMSwgMiwgM10sIDUpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqXG4gICAgICogXy50YWtlKFsxLCAyLCAzXSwgMCk7XG4gICAgICogLy8gPT4gW11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0YWtlKGFycmF5LCBuLCBndWFyZCkge1xuICAgICAgaWYgKCEoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBuID0gKGd1YXJkIHx8IG4gPT09IHVuZGVmaW5lZCkgPyAxIDogdG9JbnRlZ2VyKG4pO1xuICAgICAgcmV0dXJuIGJhc2VTbGljZShhcnJheSwgMCwgbiA8IDAgPyAwIDogbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgd2l0aCBgbmAgZWxlbWVudHMgdGFrZW4gZnJvbSB0aGUgZW5kLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbj0xXSBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHRha2UuXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udGFrZVJpZ2h0KFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gWzNdXG4gICAgICpcbiAgICAgKiBfLnRha2VSaWdodChbMSwgMiwgM10sIDIpO1xuICAgICAqIC8vID0+IFsyLCAzXVxuICAgICAqXG4gICAgICogXy50YWtlUmlnaHQoWzEsIDIsIDNdLCA1KTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKlxuICAgICAqIF8udGFrZVJpZ2h0KFsxLCAyLCAzXSwgMCk7XG4gICAgICogLy8gPT4gW11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0YWtlUmlnaHQoYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBuID0gKGd1YXJkIHx8IG4gPT09IHVuZGVmaW5lZCkgPyAxIDogdG9JbnRlZ2VyKG4pO1xuICAgICAgbiA9IGxlbmd0aCAtIG47XG4gICAgICByZXR1cm4gYmFzZVNsaWNlKGFycmF5LCBuIDwgMCA/IDAgOiBuLCBsZW5ndGgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzbGljZSBvZiBgYXJyYXlgIHdpdGggZWxlbWVudHMgdGFrZW4gZnJvbSB0aGUgZW5kLiBFbGVtZW50cyBhcmVcbiAgICAgKiB0YWtlbiB1bnRpbCBgcHJlZGljYXRlYCByZXR1cm5zIGZhbHNleS4gVGhlIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGhcbiAgICAgKiB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXgsIGFycmF5KS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICAnYWN0aXZlJzogdHJ1ZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogZmFsc2UgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLnRha2VSaWdodFdoaWxlKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiAhby5hY3RpdmU7IH0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCcsICdwZWJibGVzJ11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy50YWtlUmlnaHRXaGlsZSh1c2VycywgeyAndXNlcic6ICdwZWJibGVzJywgJ2FjdGl2ZSc6IGZhbHNlIH0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsncGViYmxlcyddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy50YWtlUmlnaHRXaGlsZSh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCcsICdwZWJibGVzJ11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8udGFrZVJpZ2h0V2hpbGUodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgKiAvLyA9PiBbXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRha2VSaWdodFdoaWxlKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgICAgICA/IGJhc2VXaGlsZShhcnJheSwgZ2V0SXRlcmF0ZWUocHJlZGljYXRlLCAzKSwgZmFsc2UsIHRydWUpXG4gICAgICAgIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgd2l0aCBlbGVtZW50cyB0YWtlbiBmcm9tIHRoZSBiZWdpbm5pbmcuIEVsZW1lbnRzXG4gICAgICogYXJlIHRha2VuIHVudGlsIGBwcmVkaWNhdGVgIHJldHVybnMgZmFsc2V5LiBUaGUgcHJlZGljYXRlIGlzIGludm9rZWQgd2l0aFxuICAgICAqIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleCwgYXJyYXkpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogdHJ1ZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8udGFrZVdoaWxlKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiAhby5hY3RpdmU7IH0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5JywgJ2ZyZWQnXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnRha2VXaGlsZSh1c2VycywgeyAndXNlcic6ICdiYXJuZXknLCAnYWN0aXZlJzogZmFsc2UgfSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8udGFrZVdoaWxlKHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknLCAnZnJlZCddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnRha2VXaGlsZSh1c2VycywgJ2FjdGl2ZScpO1xuICAgICAqIC8vID0+IFtdXG4gICAgICovXG4gICAgZnVuY3Rpb24gdGFrZVdoaWxlKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgICAgICA/IGJhc2VXaGlsZShhcnJheSwgZ2V0SXRlcmF0ZWUocHJlZGljYXRlLCAzKSlcbiAgICAgICAgOiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIHVuaXF1ZSB2YWx1ZXMsIGluIG9yZGVyLCBmcm9tIGFsbCBnaXZlbiBhcnJheXMgdXNpbmdcbiAgICAgKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICAgICAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBjb21iaW5lZCB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udW5pb24oWzJdLCBbMSwgMl0pO1xuICAgICAqIC8vID0+IFsyLCAxXVxuICAgICAqL1xuICAgIHZhciB1bmlvbiA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cykge1xuICAgICAgcmV0dXJuIGJhc2VVbmlxKGJhc2VGbGF0dGVuKGFycmF5cywgMSwgaXNBcnJheUxpa2VPYmplY3QsIHRydWUpKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8udW5pb25gIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB3aGljaCBpc1xuICAgICAqIGludm9rZWQgZm9yIGVhY2ggZWxlbWVudCBvZiBlYWNoIGBhcnJheXNgIHRvIGdlbmVyYXRlIHRoZSBjcml0ZXJpb24gYnlcbiAgICAgKiB3aGljaCB1bmlxdWVuZXNzIGlzIGNvbXB1dGVkLiBSZXN1bHQgdmFsdWVzIGFyZSBjaG9zZW4gZnJvbSB0aGUgZmlyc3RcbiAgICAgKiBhcnJheSBpbiB3aGljaCB0aGUgdmFsdWUgb2NjdXJzLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDpcbiAgICAgKiAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBjb21iaW5lZCB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udW5pb25CeShbMi4xXSwgWzEuMiwgMi4zXSwgTWF0aC5mbG9vcik7XG4gICAgICogLy8gPT4gWzIuMSwgMS4yXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy51bmlvbkJ5KFt7ICd4JzogMSB9XSwgW3sgJ3gnOiAyIH0sIHsgJ3gnOiAxIH1dLCAneCcpO1xuICAgICAqIC8vID0+IFt7ICd4JzogMSB9LCB7ICd4JzogMiB9XVxuICAgICAqL1xuICAgIHZhciB1bmlvbkJ5ID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKSB7XG4gICAgICB2YXIgaXRlcmF0ZWUgPSBsYXN0KGFycmF5cyk7XG4gICAgICBpZiAoaXNBcnJheUxpa2VPYmplY3QoaXRlcmF0ZWUpKSB7XG4gICAgICAgIGl0ZXJhdGVlID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VVbmlxKGJhc2VGbGF0dGVuKGFycmF5cywgMSwgaXNBcnJheUxpa2VPYmplY3QsIHRydWUpLCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMikpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy51bmlvbmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY29tcGFyYXRvcmAgd2hpY2hcbiAgICAgKiBpcyBpbnZva2VkIHRvIGNvbXBhcmUgZWxlbWVudHMgb2YgYGFycmF5c2AuIFJlc3VsdCB2YWx1ZXMgYXJlIGNob3NlbiBmcm9tXG4gICAgICogdGhlIGZpcnN0IGFycmF5IGluIHdoaWNoIHRoZSB2YWx1ZSBvY2N1cnMuIFRoZSBjb21wYXJhdG9yIGlzIGludm9rZWRcbiAgICAgKiB3aXRoIHR3byBhcmd1bWVudHM6IChhcnJWYWwsIG90aFZhbCkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgY29tYmluZWQgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFt7ICd4JzogMSwgJ3knOiAyIH0sIHsgJ3gnOiAyLCAneSc6IDEgfV07XG4gICAgICogdmFyIG90aGVycyA9IFt7ICd4JzogMSwgJ3knOiAxIH0sIHsgJ3gnOiAxLCAneSc6IDIgfV07XG4gICAgICpcbiAgICAgKiBfLnVuaW9uV2l0aChvYmplY3RzLCBvdGhlcnMsIF8uaXNFcXVhbCk7XG4gICAgICogLy8gPT4gW3sgJ3gnOiAxLCAneSc6IDIgfSwgeyAneCc6IDIsICd5JzogMSB9LCB7ICd4JzogMSwgJ3knOiAxIH1dXG4gICAgICovXG4gICAgdmFyIHVuaW9uV2l0aCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cykge1xuICAgICAgdmFyIGNvbXBhcmF0b3IgPSBsYXN0KGFycmF5cyk7XG4gICAgICBjb21wYXJhdG9yID0gdHlwZW9mIGNvbXBhcmF0b3IgPT0gJ2Z1bmN0aW9uJyA/IGNvbXBhcmF0b3IgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gYmFzZVVuaXEoYmFzZUZsYXR0ZW4oYXJyYXlzLCAxLCBpc0FycmF5TGlrZU9iamVjdCwgdHJ1ZSksIHVuZGVmaW5lZCwgY29tcGFyYXRvcik7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZHVwbGljYXRlLWZyZWUgdmVyc2lvbiBvZiBhbiBhcnJheSwgdXNpbmdcbiAgICAgKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICAgICAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucywgaW4gd2hpY2ggb25seSB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBlYWNoIGVsZW1lbnRcbiAgICAgKiBpcyBrZXB0LiBUaGUgb3JkZXIgb2YgcmVzdWx0IHZhbHVlcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBvcmRlciB0aGV5IG9jY3VyXG4gICAgICogaW4gdGhlIGFycmF5LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZHVwbGljYXRlIGZyZWUgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udW5pcShbMiwgMSwgMl0pO1xuICAgICAqIC8vID0+IFsyLCAxXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHVuaXEoYXJyYXkpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKSA/IGJhc2VVbmlxKGFycmF5KSA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8udW5pcWAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHdoaWNoIGlzXG4gICAgICogaW52b2tlZCBmb3IgZWFjaCBlbGVtZW50IGluIGBhcnJheWAgdG8gZ2VuZXJhdGUgdGhlIGNyaXRlcmlvbiBieSB3aGljaFxuICAgICAqIHVuaXF1ZW5lc3MgaXMgY29tcHV0ZWQuIFRoZSBvcmRlciBvZiByZXN1bHQgdmFsdWVzIGlzIGRldGVybWluZWQgYnkgdGhlXG4gICAgICogb3JkZXIgdGhleSBvY2N1ciBpbiB0aGUgYXJyYXkuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OlxuICAgICAqICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZHVwbGljYXRlIGZyZWUgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udW5pcUJ5KFsyLjEsIDEuMiwgMi4zXSwgTWF0aC5mbG9vcik7XG4gICAgICogLy8gPT4gWzIuMSwgMS4yXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy51bmlxQnkoW3sgJ3gnOiAxIH0sIHsgJ3gnOiAyIH0sIHsgJ3gnOiAxIH1dLCAneCcpO1xuICAgICAqIC8vID0+IFt7ICd4JzogMSB9LCB7ICd4JzogMiB9XVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHVuaXFCeShhcnJheSwgaXRlcmF0ZWUpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKSA/IGJhc2VVbmlxKGFycmF5LCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMikpIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy51bmlxYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjb21wYXJhdG9yYCB3aGljaFxuICAgICAqIGlzIGludm9rZWQgdG8gY29tcGFyZSBlbGVtZW50cyBvZiBgYXJyYXlgLiBUaGUgb3JkZXIgb2YgcmVzdWx0IHZhbHVlcyBpc1xuICAgICAqIGRldGVybWluZWQgYnkgdGhlIG9yZGVyIHRoZXkgb2NjdXIgaW4gdGhlIGFycmF5LlRoZSBjb21wYXJhdG9yIGlzIGludm9rZWRcbiAgICAgKiB3aXRoIHR3byBhcmd1bWVudHM6IChhcnJWYWwsIG90aFZhbCkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBkdXBsaWNhdGUgZnJlZSBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogMiwgJ3knOiAxIH0sIHsgJ3gnOiAxLCAneSc6IDIgfV07XG4gICAgICpcbiAgICAgKiBfLnVuaXFXaXRoKG9iamVjdHMsIF8uaXNFcXVhbCk7XG4gICAgICogLy8gPT4gW3sgJ3gnOiAxLCAneSc6IDIgfSwgeyAneCc6IDIsICd5JzogMSB9XVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHVuaXFXaXRoKGFycmF5LCBjb21wYXJhdG9yKSB7XG4gICAgICBjb21wYXJhdG9yID0gdHlwZW9mIGNvbXBhcmF0b3IgPT0gJ2Z1bmN0aW9uJyA/IGNvbXBhcmF0b3IgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkgPyBiYXNlVW5pcShhcnJheSwgdW5kZWZpbmVkLCBjb21wYXJhdG9yKSA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uemlwYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGFuIGFycmF5IG9mIGdyb3VwZWRcbiAgICAgKiBlbGVtZW50cyBhbmQgY3JlYXRlcyBhbiBhcnJheSByZWdyb3VwaW5nIHRoZSBlbGVtZW50cyB0byB0aGVpciBwcmUtemlwXG4gICAgICogY29uZmlndXJhdGlvbi5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAxLjIuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSBvZiBncm91cGVkIGVsZW1lbnRzIHRvIHByb2Nlc3MuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgcmVncm91cGVkIGVsZW1lbnRzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgemlwcGVkID0gXy56aXAoWydhJywgJ2InXSwgWzEsIDJdLCBbdHJ1ZSwgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiBbWydhJywgMSwgdHJ1ZV0sIFsnYicsIDIsIGZhbHNlXV1cbiAgICAgKlxuICAgICAqIF8udW56aXAoemlwcGVkKTtcbiAgICAgKiAvLyA9PiBbWydhJywgJ2InXSwgWzEsIDJdLCBbdHJ1ZSwgZmFsc2VdXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHVuemlwKGFycmF5KSB7XG4gICAgICBpZiAoIShhcnJheSAmJiBhcnJheS5sZW5ndGgpKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIHZhciBsZW5ndGggPSAwO1xuICAgICAgYXJyYXkgPSBhcnJheUZpbHRlcihhcnJheSwgZnVuY3Rpb24oZ3JvdXApIHtcbiAgICAgICAgaWYgKGlzQXJyYXlMaWtlT2JqZWN0KGdyb3VwKSkge1xuICAgICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1heChncm91cC5sZW5ndGgsIGxlbmd0aCk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGJhc2VUaW1lcyhsZW5ndGgsIGZ1bmN0aW9uKGluZGV4KSB7XG4gICAgICAgIHJldHVybiBhcnJheU1hcChhcnJheSwgYmFzZVByb3BlcnR5KGluZGV4KSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnVuemlwYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWAgdG8gc3BlY2lmeVxuICAgICAqIGhvdyByZWdyb3VwZWQgdmFsdWVzIHNob3VsZCBiZSBjb21iaW5lZC4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCB0aGVcbiAgICAgKiBlbGVtZW50cyBvZiBlYWNoIGdyb3VwOiAoLi4uZ3JvdXApLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuOC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IG9mIGdyb3VwZWQgZWxlbWVudHMgdG8gcHJvY2Vzcy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIHRvIGNvbWJpbmVcbiAgICAgKiAgcmVncm91cGVkIHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiByZWdyb3VwZWQgZWxlbWVudHMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB6aXBwZWQgPSBfLnppcChbMSwgMl0sIFsxMCwgMjBdLCBbMTAwLCAyMDBdKTtcbiAgICAgKiAvLyA9PiBbWzEsIDEwLCAxMDBdLCBbMiwgMjAsIDIwMF1dXG4gICAgICpcbiAgICAgKiBfLnVuemlwV2l0aCh6aXBwZWQsIF8uYWRkKTtcbiAgICAgKiAvLyA9PiBbMywgMzAsIDMwMF1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1bnppcFdpdGgoYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgICBpZiAoIShhcnJheSAmJiBhcnJheS5sZW5ndGgpKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHQgPSB1bnppcChhcnJheSk7XG4gICAgICBpZiAoaXRlcmF0ZWUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFycmF5TWFwKHJlc3VsdCwgZnVuY3Rpb24oZ3JvdXApIHtcbiAgICAgICAgcmV0dXJuIGFwcGx5KGl0ZXJhdGVlLCB1bmRlZmluZWQsIGdyb3VwKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgZXhjbHVkaW5nIGFsbCBnaXZlbiB2YWx1ZXMgdXNpbmdcbiAgICAgKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICAgICAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBVbmxpa2UgYF8ucHVsbGAsIHRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0gey4uLip9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gZXhjbHVkZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gICAgICogQHNlZSBfLmRpZmZlcmVuY2UsIF8ueG9yXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ud2l0aG91dChbMiwgMSwgMiwgM10sIDEsIDIpO1xuICAgICAqIC8vID0+IFszXVxuICAgICAqL1xuICAgIHZhciB3aXRob3V0ID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXksIHZhbHVlcykge1xuICAgICAgcmV0dXJuIGlzQXJyYXlMaWtlT2JqZWN0KGFycmF5KVxuICAgICAgICA/IGJhc2VEaWZmZXJlbmNlKGFycmF5LCB2YWx1ZXMpXG4gICAgICAgIDogW107XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIHVuaXF1ZSB2YWx1ZXMgdGhhdCBpcyB0aGVcbiAgICAgKiBbc3ltbWV0cmljIGRpZmZlcmVuY2VdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1N5bW1ldHJpY19kaWZmZXJlbmNlKVxuICAgICAqIG9mIHRoZSBnaXZlbiBhcnJheXMuIFRoZSBvcmRlciBvZiByZXN1bHQgdmFsdWVzIGlzIGRldGVybWluZWQgYnkgdGhlIG9yZGVyXG4gICAgICogdGhleSBvY2N1ciBpbiB0aGUgYXJyYXlzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuNC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAgICAgKiBAc2VlIF8uZGlmZmVyZW5jZSwgXy53aXRob3V0XG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ueG9yKFsyLCAxXSwgWzIsIDNdKTtcbiAgICAgKiAvLyA9PiBbMSwgM11cbiAgICAgKi9cbiAgICB2YXIgeG9yID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKSB7XG4gICAgICByZXR1cm4gYmFzZVhvcihhcnJheUZpbHRlcihhcnJheXMsIGlzQXJyYXlMaWtlT2JqZWN0KSk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnhvcmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHdoaWNoIGlzXG4gICAgICogaW52b2tlZCBmb3IgZWFjaCBlbGVtZW50IG9mIGVhY2ggYGFycmF5c2AgdG8gZ2VuZXJhdGUgdGhlIGNyaXRlcmlvbiBieVxuICAgICAqIHdoaWNoIGJ5IHdoaWNoIHRoZXkncmUgY29tcGFyZWQuIFRoZSBvcmRlciBvZiByZXN1bHQgdmFsdWVzIGlzIGRldGVybWluZWRcbiAgICAgKiBieSB0aGUgb3JkZXIgdGhleSBvY2N1ciBpbiB0aGUgYXJyYXlzLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZVxuICAgICAqIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ueG9yQnkoWzIuMSwgMS4yXSwgWzIuMywgMy40XSwgTWF0aC5mbG9vcik7XG4gICAgICogLy8gPT4gWzEuMiwgMy40XVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy54b3JCeShbeyAneCc6IDEgfV0sIFt7ICd4JzogMiB9LCB7ICd4JzogMSB9XSwgJ3gnKTtcbiAgICAgKiAvLyA9PiBbeyAneCc6IDIgfV1cbiAgICAgKi9cbiAgICB2YXIgeG9yQnkgPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheXMpIHtcbiAgICAgIHZhciBpdGVyYXRlZSA9IGxhc3QoYXJyYXlzKTtcbiAgICAgIGlmIChpc0FycmF5TGlrZU9iamVjdChpdGVyYXRlZSkpIHtcbiAgICAgICAgaXRlcmF0ZWUgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZVhvcihhcnJheUZpbHRlcihhcnJheXMsIGlzQXJyYXlMaWtlT2JqZWN0KSwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDIpKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8ueG9yYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjb21wYXJhdG9yYCB3aGljaCBpc1xuICAgICAqIGludm9rZWQgdG8gY29tcGFyZSBlbGVtZW50cyBvZiBgYXJyYXlzYC4gVGhlIG9yZGVyIG9mIHJlc3VsdCB2YWx1ZXMgaXNcbiAgICAgKiBkZXRlcm1pbmVkIGJ5IHRoZSBvcmRlciB0aGV5IG9jY3VyIGluIHRoZSBhcnJheXMuIFRoZSBjb21wYXJhdG9yIGlzIGludm9rZWRcbiAgICAgKiB3aXRoIHR3byBhcmd1bWVudHM6IChhcnJWYWwsIG90aFZhbCkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFt7ICd4JzogMSwgJ3knOiAyIH0sIHsgJ3gnOiAyLCAneSc6IDEgfV07XG4gICAgICogdmFyIG90aGVycyA9IFt7ICd4JzogMSwgJ3knOiAxIH0sIHsgJ3gnOiAxLCAneSc6IDIgfV07XG4gICAgICpcbiAgICAgKiBfLnhvcldpdGgob2JqZWN0cywgb3RoZXJzLCBfLmlzRXF1YWwpO1xuICAgICAqIC8vID0+IFt7ICd4JzogMiwgJ3knOiAxIH0sIHsgJ3gnOiAxLCAneSc6IDEgfV1cbiAgICAgKi9cbiAgICB2YXIgeG9yV2l0aCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cykge1xuICAgICAgdmFyIGNvbXBhcmF0b3IgPSBsYXN0KGFycmF5cyk7XG4gICAgICBjb21wYXJhdG9yID0gdHlwZW9mIGNvbXBhcmF0b3IgPT0gJ2Z1bmN0aW9uJyA/IGNvbXBhcmF0b3IgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gYmFzZVhvcihhcnJheUZpbHRlcihhcnJheXMsIGlzQXJyYXlMaWtlT2JqZWN0KSwgdW5kZWZpbmVkLCBjb21wYXJhdG9yKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgZ3JvdXBlZCBlbGVtZW50cywgdGhlIGZpcnN0IG9mIHdoaWNoIGNvbnRhaW5zIHRoZVxuICAgICAqIGZpcnN0IGVsZW1lbnRzIG9mIHRoZSBnaXZlbiBhcnJheXMsIHRoZSBzZWNvbmQgb2Ygd2hpY2ggY29udGFpbnMgdGhlXG4gICAgICogc2Vjb25kIGVsZW1lbnRzIG9mIHRoZSBnaXZlbiBhcnJheXMsIGFuZCBzbyBvbi5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gcHJvY2Vzcy5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBncm91cGVkIGVsZW1lbnRzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnppcChbJ2EnLCAnYiddLCBbMSwgMl0sIFt0cnVlLCBmYWxzZV0pO1xuICAgICAqIC8vID0+IFtbJ2EnLCAxLCB0cnVlXSwgWydiJywgMiwgZmFsc2VdXVxuICAgICAqL1xuICAgIHZhciB6aXAgPSBiYXNlUmVzdCh1bnppcCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmZyb21QYWlyc2AgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyB0d28gYXJyYXlzLFxuICAgICAqIG9uZSBvZiBwcm9wZXJ0eSBpZGVudGlmaWVycyBhbmQgb25lIG9mIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuNC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gW3Byb3BzPVtdXSBUaGUgcHJvcGVydHkgaWRlbnRpZmllcnMuXG4gICAgICogQHBhcmFtIHtBcnJheX0gW3ZhbHVlcz1bXV0gVGhlIHByb3BlcnR5IHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnppcE9iamVjdChbJ2EnLCAnYiddLCBbMSwgMl0pO1xuICAgICAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIgfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHppcE9iamVjdChwcm9wcywgdmFsdWVzKSB7XG4gICAgICByZXR1cm4gYmFzZVppcE9iamVjdChwcm9wcyB8fCBbXSwgdmFsdWVzIHx8IFtdLCBhc3NpZ25WYWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy56aXBPYmplY3RgIGV4Y2VwdCB0aGF0IGl0IHN1cHBvcnRzIHByb3BlcnR5IHBhdGhzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gW3Byb3BzPVtdXSBUaGUgcHJvcGVydHkgaWRlbnRpZmllcnMuXG4gICAgICogQHBhcmFtIHtBcnJheX0gW3ZhbHVlcz1bXV0gVGhlIHByb3BlcnR5IHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnppcE9iamVjdERlZXAoWydhLmJbMF0uYycsICdhLmJbMV0uZCddLCBbMSwgMl0pO1xuICAgICAqIC8vID0+IHsgJ2EnOiB7ICdiJzogW3sgJ2MnOiAxIH0sIHsgJ2QnOiAyIH1dIH0gfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHppcE9iamVjdERlZXAocHJvcHMsIHZhbHVlcykge1xuICAgICAgcmV0dXJuIGJhc2VaaXBPYmplY3QocHJvcHMgfHwgW10sIHZhbHVlcyB8fCBbXSwgYmFzZVNldCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy56aXBgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB0byBzcGVjaWZ5XG4gICAgICogaG93IGdyb3VwZWQgdmFsdWVzIHNob3VsZCBiZSBjb21iaW5lZC4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCB0aGVcbiAgICAgKiBlbGVtZW50cyBvZiBlYWNoIGdyb3VwOiAoLi4uZ3JvdXApLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuOC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBwcm9jZXNzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gdG8gY29tYmluZVxuICAgICAqICBncm91cGVkIHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBncm91cGVkIGVsZW1lbnRzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnppcFdpdGgoWzEsIDJdLCBbMTAsIDIwXSwgWzEwMCwgMjAwXSwgZnVuY3Rpb24oYSwgYiwgYykge1xuICAgICAqICAgcmV0dXJuIGEgKyBiICsgYztcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiBbMTExLCAyMjJdXG4gICAgICovXG4gICAgdmFyIHppcFdpdGggPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheXMpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheXMubGVuZ3RoLFxuICAgICAgICAgIGl0ZXJhdGVlID0gbGVuZ3RoID4gMSA/IGFycmF5c1tsZW5ndGggLSAxXSA6IHVuZGVmaW5lZDtcblxuICAgICAgaXRlcmF0ZWUgPSB0eXBlb2YgaXRlcmF0ZWUgPT0gJ2Z1bmN0aW9uJyA/IChhcnJheXMucG9wKCksIGl0ZXJhdGVlKSA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiB1bnppcFdpdGgoYXJyYXlzLCBpdGVyYXRlZSk7XG4gICAgfSk7XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZSB0aGF0IHdyYXBzIGB2YWx1ZWAgd2l0aCBleHBsaWNpdCBtZXRob2RcbiAgICAgKiBjaGFpbiBzZXF1ZW5jZXMgZW5hYmxlZC4gVGhlIHJlc3VsdCBvZiBzdWNoIHNlcXVlbmNlcyBtdXN0IGJlIHVud3JhcHBlZFxuICAgICAqIHdpdGggYF8jdmFsdWVgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDEuMy4wXG4gICAgICogQGNhdGVnb3J5IFNlcVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyYXAuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IGBsb2Rhc2hgIHdyYXBwZXIgaW5zdGFuY2UuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhZ2UnOiAzNiB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FnZSc6IDQwIH0sXG4gICAgICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWdlJzogMSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIHZhciB5b3VuZ2VzdCA9IF9cbiAgICAgKiAgIC5jaGFpbih1c2VycylcbiAgICAgKiAgIC5zb3J0QnkoJ2FnZScpXG4gICAgICogICAubWFwKGZ1bmN0aW9uKG8pIHtcbiAgICAgKiAgICAgcmV0dXJuIG8udXNlciArICcgaXMgJyArIG8uYWdlO1xuICAgICAqICAgfSlcbiAgICAgKiAgIC5oZWFkKClcbiAgICAgKiAgIC52YWx1ZSgpO1xuICAgICAqIC8vID0+ICdwZWJibGVzIGlzIDEnXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2hhaW4odmFsdWUpIHtcbiAgICAgIHZhciByZXN1bHQgPSBsb2Rhc2godmFsdWUpO1xuICAgICAgcmVzdWx0Ll9fY2hhaW5fXyA9IHRydWU7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGludm9rZXMgYGludGVyY2VwdG9yYCBhbmQgcmV0dXJucyBgdmFsdWVgLiBUaGUgaW50ZXJjZXB0b3JcbiAgICAgKiBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OyAodmFsdWUpLiBUaGUgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpcyB0b1xuICAgICAqIFwidGFwIGludG9cIiBhIG1ldGhvZCBjaGFpbiBzZXF1ZW5jZSBpbiBvcmRlciB0byBtb2RpZnkgaW50ZXJtZWRpYXRlIHJlc3VsdHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgU2VxXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvdmlkZSB0byBgaW50ZXJjZXB0b3JgLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGludGVyY2VwdG9yIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgYHZhbHVlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXyhbMSwgMiwgM10pXG4gICAgICogIC50YXAoZnVuY3Rpb24oYXJyYXkpIHtcbiAgICAgKiAgICAvLyBNdXRhdGUgaW5wdXQgYXJyYXkuXG4gICAgICogICAgYXJyYXkucG9wKCk7XG4gICAgICogIH0pXG4gICAgICogIC5yZXZlcnNlKClcbiAgICAgKiAgLnZhbHVlKCk7XG4gICAgICogLy8gPT4gWzIsIDFdXG4gICAgICovXG4gICAgZnVuY3Rpb24gdGFwKHZhbHVlLCBpbnRlcmNlcHRvcikge1xuICAgICAgaW50ZXJjZXB0b3IodmFsdWUpO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8udGFwYCBleGNlcHQgdGhhdCBpdCByZXR1cm5zIHRoZSByZXN1bHQgb2YgYGludGVyY2VwdG9yYC5cbiAgICAgKiBUaGUgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpcyB0byBcInBhc3MgdGhydVwiIHZhbHVlcyByZXBsYWNpbmcgaW50ZXJtZWRpYXRlXG4gICAgICogcmVzdWx0cyBpbiBhIG1ldGhvZCBjaGFpbiBzZXF1ZW5jZS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBTZXFcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm92aWRlIHRvIGBpbnRlcmNlcHRvcmAuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaW50ZXJjZXB0b3IgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzdWx0IG9mIGBpbnRlcmNlcHRvcmAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8oJyAgYWJjICAnKVxuICAgICAqICAuY2hhaW4oKVxuICAgICAqICAudHJpbSgpXG4gICAgICogIC50aHJ1KGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICogICAgcmV0dXJuIFt2YWx1ZV07XG4gICAgICogIH0pXG4gICAgICogIC52YWx1ZSgpO1xuICAgICAqIC8vID0+IFsnYWJjJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0aHJ1KHZhbHVlLCBpbnRlcmNlcHRvcikge1xuICAgICAgcmV0dXJuIGludGVyY2VwdG9yKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB0aGUgd3JhcHBlciB2ZXJzaW9uIG9mIGBfLmF0YC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGF0XG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMS4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU2VxXG4gICAgICogQHBhcmFtIHsuLi4oc3RyaW5nfHN0cmluZ1tdKX0gW3BhdGhzXSBUaGUgcHJvcGVydHkgcGF0aHMgdG8gcGljay5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MnOiAzIH0gfSwgNF0gfTtcbiAgICAgKlxuICAgICAqIF8ob2JqZWN0KS5hdChbJ2FbMF0uYi5jJywgJ2FbMV0nXSkudmFsdWUoKTtcbiAgICAgKiAvLyA9PiBbMywgNF1cbiAgICAgKi9cbiAgICB2YXIgd3JhcHBlckF0ID0gZmxhdFJlc3QoZnVuY3Rpb24ocGF0aHMpIHtcbiAgICAgIHZhciBsZW5ndGggPSBwYXRocy5sZW5ndGgsXG4gICAgICAgICAgc3RhcnQgPSBsZW5ndGggPyBwYXRoc1swXSA6IDAsXG4gICAgICAgICAgdmFsdWUgPSB0aGlzLl9fd3JhcHBlZF9fLFxuICAgICAgICAgIGludGVyY2VwdG9yID0gZnVuY3Rpb24ob2JqZWN0KSB7IHJldHVybiBiYXNlQXQob2JqZWN0LCBwYXRocyk7IH07XG5cbiAgICAgIGlmIChsZW5ndGggPiAxIHx8IHRoaXMuX19hY3Rpb25zX18ubGVuZ3RoIHx8XG4gICAgICAgICAgISh2YWx1ZSBpbnN0YW5jZW9mIExhenlXcmFwcGVyKSB8fCAhaXNJbmRleChzdGFydCkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGhydShpbnRlcmNlcHRvcik7XG4gICAgICB9XG4gICAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKHN0YXJ0LCArc3RhcnQgKyAobGVuZ3RoID8gMSA6IDApKTtcbiAgICAgIHZhbHVlLl9fYWN0aW9uc19fLnB1c2goe1xuICAgICAgICAnZnVuYyc6IHRocnUsXG4gICAgICAgICdhcmdzJzogW2ludGVyY2VwdG9yXSxcbiAgICAgICAgJ3RoaXNBcmcnOiB1bmRlZmluZWRcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG5ldyBMb2Rhc2hXcmFwcGVyKHZhbHVlLCB0aGlzLl9fY2hhaW5fXykudGhydShmdW5jdGlvbihhcnJheSkge1xuICAgICAgICBpZiAobGVuZ3RoICYmICFhcnJheS5sZW5ndGgpIHtcbiAgICAgICAgICBhcnJheS5wdXNoKHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZSB3aXRoIGV4cGxpY2l0IG1ldGhvZCBjaGFpbiBzZXF1ZW5jZXMgZW5hYmxlZC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNoYWluXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgU2VxXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IGBsb2Rhc2hgIHdyYXBwZXIgaW5zdGFuY2UuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2IH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0MCB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIC8vIEEgc2VxdWVuY2Ugd2l0aG91dCBleHBsaWNpdCBjaGFpbmluZy5cbiAgICAgKiBfKHVzZXJzKS5oZWFkKCk7XG4gICAgICogLy8gPT4geyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYgfVxuICAgICAqXG4gICAgICogLy8gQSBzZXF1ZW5jZSB3aXRoIGV4cGxpY2l0IGNoYWluaW5nLlxuICAgICAqIF8odXNlcnMpXG4gICAgICogICAuY2hhaW4oKVxuICAgICAqICAgLmhlYWQoKVxuICAgICAqICAgLnBpY2soJ3VzZXInKVxuICAgICAqICAgLnZhbHVlKCk7XG4gICAgICogLy8gPT4geyAndXNlcic6ICdiYXJuZXknIH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB3cmFwcGVyQ2hhaW4oKSB7XG4gICAgICByZXR1cm4gY2hhaW4odGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXhlY3V0ZXMgdGhlIGNoYWluIHNlcXVlbmNlIGFuZCByZXR1cm5zIHRoZSB3cmFwcGVkIHJlc3VsdC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNvbW1pdFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMi4wXG4gICAgICogQGNhdGVnb3J5IFNlcVxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbMSwgMl07XG4gICAgICogdmFyIHdyYXBwZWQgPSBfKGFycmF5KS5wdXNoKDMpO1xuICAgICAqXG4gICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAqIC8vID0+IFsxLCAyXVxuICAgICAqXG4gICAgICogd3JhcHBlZCA9IHdyYXBwZWQuY29tbWl0KCk7XG4gICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqXG4gICAgICogd3JhcHBlZC5sYXN0KCk7XG4gICAgICogLy8gPT4gM1xuICAgICAqXG4gICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdyYXBwZXJDb21taXQoKSB7XG4gICAgICByZXR1cm4gbmV3IExvZGFzaFdyYXBwZXIodGhpcy52YWx1ZSgpLCB0aGlzLl9fY2hhaW5fXyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbmV4dCB2YWx1ZSBvbiBhIHdyYXBwZWQgb2JqZWN0IGZvbGxvd2luZyB0aGVcbiAgICAgKiBbaXRlcmF0b3IgcHJvdG9jb2xdKGh0dHBzOi8vbWRuLmlvL2l0ZXJhdGlvbl9wcm90b2NvbHMjaXRlcmF0b3IpLlxuICAgICAqXG4gICAgICogQG5hbWUgbmV4dFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFNlcVxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5leHQgaXRlcmF0b3IgdmFsdWUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB3cmFwcGVkID0gXyhbMSwgMl0pO1xuICAgICAqXG4gICAgICogd3JhcHBlZC5uZXh0KCk7XG4gICAgICogLy8gPT4geyAnZG9uZSc6IGZhbHNlLCAndmFsdWUnOiAxIH1cbiAgICAgKlxuICAgICAqIHdyYXBwZWQubmV4dCgpO1xuICAgICAqIC8vID0+IHsgJ2RvbmUnOiBmYWxzZSwgJ3ZhbHVlJzogMiB9XG4gICAgICpcbiAgICAgKiB3cmFwcGVkLm5leHQoKTtcbiAgICAgKiAvLyA9PiB7ICdkb25lJzogdHJ1ZSwgJ3ZhbHVlJzogdW5kZWZpbmVkIH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB3cmFwcGVyTmV4dCgpIHtcbiAgICAgIGlmICh0aGlzLl9fdmFsdWVzX18gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl9fdmFsdWVzX18gPSB0b0FycmF5KHRoaXMudmFsdWUoKSk7XG4gICAgICB9XG4gICAgICB2YXIgZG9uZSA9IHRoaXMuX19pbmRleF9fID49IHRoaXMuX192YWx1ZXNfXy5sZW5ndGgsXG4gICAgICAgICAgdmFsdWUgPSBkb25lID8gdW5kZWZpbmVkIDogdGhpcy5fX3ZhbHVlc19fW3RoaXMuX19pbmRleF9fKytdO1xuXG4gICAgICByZXR1cm4geyAnZG9uZSc6IGRvbmUsICd2YWx1ZSc6IHZhbHVlIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW5hYmxlcyB0aGUgd3JhcHBlciB0byBiZSBpdGVyYWJsZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIFN5bWJvbC5pdGVyYXRvclxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFNlcVxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIHdyYXBwZXIgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgd3JhcHBlZCA9IF8oWzEsIDJdKTtcbiAgICAgKlxuICAgICAqIHdyYXBwZWRbU3ltYm9sLml0ZXJhdG9yXSgpID09PSB3cmFwcGVkO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIEFycmF5LmZyb20od3JhcHBlZCk7XG4gICAgICogLy8gPT4gWzEsIDJdXG4gICAgICovXG4gICAgZnVuY3Rpb24gd3JhcHBlclRvSXRlcmF0b3IoKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhlIGNoYWluIHNlcXVlbmNlIHBsYW50aW5nIGB2YWx1ZWAgYXMgdGhlIHdyYXBwZWQgdmFsdWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBwbGFudFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMi4wXG4gICAgICogQGNhdGVnb3J5IFNlcVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHBsYW50LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBzcXVhcmUobikge1xuICAgICAqICAgcmV0dXJuIG4gKiBuO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciB3cmFwcGVkID0gXyhbMSwgMl0pLm1hcChzcXVhcmUpO1xuICAgICAqIHZhciBvdGhlciA9IHdyYXBwZWQucGxhbnQoWzMsIDRdKTtcbiAgICAgKlxuICAgICAqIG90aGVyLnZhbHVlKCk7XG4gICAgICogLy8gPT4gWzksIDE2XVxuICAgICAqXG4gICAgICogd3JhcHBlZC52YWx1ZSgpO1xuICAgICAqIC8vID0+IFsxLCA0XVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdyYXBwZXJQbGFudCh2YWx1ZSkge1xuICAgICAgdmFyIHJlc3VsdCxcbiAgICAgICAgICBwYXJlbnQgPSB0aGlzO1xuXG4gICAgICB3aGlsZSAocGFyZW50IGluc3RhbmNlb2YgYmFzZUxvZGFzaCkge1xuICAgICAgICB2YXIgY2xvbmUgPSB3cmFwcGVyQ2xvbmUocGFyZW50KTtcbiAgICAgICAgY2xvbmUuX19pbmRleF9fID0gMDtcbiAgICAgICAgY2xvbmUuX192YWx1ZXNfXyA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIHByZXZpb3VzLl9fd3JhcHBlZF9fID0gY2xvbmU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0ID0gY2xvbmU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHByZXZpb3VzID0gY2xvbmU7XG4gICAgICAgIHBhcmVudCA9IHBhcmVudC5fX3dyYXBwZWRfXztcbiAgICAgIH1cbiAgICAgIHByZXZpb3VzLl9fd3JhcHBlZF9fID0gdmFsdWU7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHRoZSB3cmFwcGVyIHZlcnNpb24gb2YgYF8ucmV2ZXJzZWAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyB0aGUgd3JhcHBlZCBhcnJheS5cbiAgICAgKlxuICAgICAqIEBuYW1lIHJldmVyc2VcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBTZXFcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gWzEsIDIsIDNdO1xuICAgICAqXG4gICAgICogXyhhcnJheSkucmV2ZXJzZSgpLnZhbHVlKClcbiAgICAgKiAvLyA9PiBbMywgMiwgMV1cbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgKiAvLyA9PiBbMywgMiwgMV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB3cmFwcGVyUmV2ZXJzZSgpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHRoaXMuX193cmFwcGVkX187XG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBMYXp5V3JhcHBlcikge1xuICAgICAgICB2YXIgd3JhcHBlZCA9IHZhbHVlO1xuICAgICAgICBpZiAodGhpcy5fX2FjdGlvbnNfXy5sZW5ndGgpIHtcbiAgICAgICAgICB3cmFwcGVkID0gbmV3IExhenlXcmFwcGVyKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHdyYXBwZWQgPSB3cmFwcGVkLnJldmVyc2UoKTtcbiAgICAgICAgd3JhcHBlZC5fX2FjdGlvbnNfXy5wdXNoKHtcbiAgICAgICAgICAnZnVuYyc6IHRocnUsXG4gICAgICAgICAgJ2FyZ3MnOiBbcmV2ZXJzZV0sXG4gICAgICAgICAgJ3RoaXNBcmcnOiB1bmRlZmluZWRcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZXcgTG9kYXNoV3JhcHBlcih3cmFwcGVkLCB0aGlzLl9fY2hhaW5fXyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy50aHJ1KHJldmVyc2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGVzIHRoZSBjaGFpbiBzZXF1ZW5jZSB0byByZXNvbHZlIHRoZSB1bndyYXBwZWQgdmFsdWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSB2YWx1ZVxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGFsaWFzIHRvSlNPTiwgdmFsdWVPZlxuICAgICAqIEBjYXRlZ29yeSBTZXFcbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdW53cmFwcGVkIHZhbHVlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfKFsxLCAyLCAzXSkudmFsdWUoKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB3cmFwcGVyVmFsdWUoKSB7XG4gICAgICByZXR1cm4gYmFzZVdyYXBwZXJWYWx1ZSh0aGlzLl9fd3JhcHBlZF9fLCB0aGlzLl9fYWN0aW9uc19fKTtcbiAgICB9XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiBrZXlzIGdlbmVyYXRlZCBmcm9tIHRoZSByZXN1bHRzIG9mIHJ1bm5pbmdcbiAgICAgKiBlYWNoIGVsZW1lbnQgb2YgYGNvbGxlY3Rpb25gIHRocnUgYGl0ZXJhdGVlYC4gVGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgb2ZcbiAgICAgKiBlYWNoIGtleSBpcyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBrZXkgd2FzIHJldHVybmVkIGJ5IGBpdGVyYXRlZWAuIFRoZVxuICAgICAqIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC41LjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIHRvIHRyYW5zZm9ybSBrZXlzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNvbXBvc2VkIGFnZ3JlZ2F0ZSBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uY291bnRCeShbNi4xLCA0LjIsIDYuM10sIE1hdGguZmxvb3IpO1xuICAgICAqIC8vID0+IHsgJzQnOiAxLCAnNic6IDIgfVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5jb3VudEJ5KFsnb25lJywgJ3R3bycsICd0aHJlZSddLCAnbGVuZ3RoJyk7XG4gICAgICogLy8gPT4geyAnMyc6IDIsICc1JzogMSB9XG4gICAgICovXG4gICAgdmFyIGNvdW50QnkgPSBjcmVhdGVBZ2dyZWdhdG9yKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwocmVzdWx0LCBrZXkpKSB7XG4gICAgICAgICsrcmVzdWx0W2tleV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiYXNlQXNzaWduVmFsdWUocmVzdWx0LCBrZXksIDEpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvciAqKmFsbCoqIGVsZW1lbnRzIG9mIGBjb2xsZWN0aW9uYC5cbiAgICAgKiBJdGVyYXRpb24gaXMgc3RvcHBlZCBvbmNlIGBwcmVkaWNhdGVgIHJldHVybnMgZmFsc2V5LiBUaGUgcHJlZGljYXRlIGlzXG4gICAgICogaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIHJldHVybnMgYHRydWVgIGZvclxuICAgICAqIFtlbXB0eSBjb2xsZWN0aW9uc10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRW1wdHlfc2V0KSBiZWNhdXNlXG4gICAgICogW2V2ZXJ5dGhpbmcgaXMgdHJ1ZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVmFjdW91c190cnV0aCkgb2ZcbiAgICAgKiBlbGVtZW50cyBvZiBlbXB0eSBjb2xsZWN0aW9ucy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbGwgZWxlbWVudHMgcGFzcyB0aGUgcHJlZGljYXRlIGNoZWNrLFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZXZlcnkoW3RydWUsIDEsIG51bGwsICd5ZXMnXSwgQm9vbGVhbik7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2LCAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQwLCAnYWN0aXZlJzogZmFsc2UgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZXZlcnkodXNlcnMsIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FjdGl2ZSc6IGZhbHNlIH0pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5ldmVyeSh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZXZlcnkodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGV2ZXJ5KGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZ3VhcmQpIHtcbiAgICAgIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5RXZlcnkgOiBiYXNlRXZlcnk7XG4gICAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoY29sbGVjdGlvbiwgcHJlZGljYXRlLCBndWFyZCkpIHtcbiAgICAgICAgcHJlZGljYXRlID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgZ2V0SXRlcmF0ZWUocHJlZGljYXRlLCAzKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZiBgY29sbGVjdGlvbmAsIHJldHVybmluZyBhbiBhcnJheSBvZiBhbGwgZWxlbWVudHNcbiAgICAgKiBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IuIFRoZSBwcmVkaWNhdGUgaXMgaW52b2tlZCB3aXRoIHRocmVlXG4gICAgICogYXJndW1lbnRzOiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVW5saWtlIGBfLnJlbW92ZWAsIHRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gICAgICogQHNlZSBfLnJlamVjdFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQwLCAnYWN0aXZlJzogZmFsc2UgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLmZpbHRlcih1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gIW8uYWN0aXZlOyB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2ZyZWQnXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbHRlcih1c2VycywgeyAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5J11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbHRlcih1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbHRlcih1c2VycywgJ2FjdGl2ZScpO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5J11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmaWx0ZXIoY29sbGVjdGlvbiwgcHJlZGljYXRlKSB7XG4gICAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheUZpbHRlciA6IGJhc2VGaWx0ZXI7XG4gICAgICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBnZXRJdGVyYXRlZShwcmVkaWNhdGUsIDMpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mIGBjb2xsZWN0aW9uYCwgcmV0dXJuaW5nIHRoZSBmaXJzdCBlbGVtZW50XG4gICAgICogYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkgZm9yLiBUaGUgcHJlZGljYXRlIGlzIGludm9rZWQgd2l0aCB0aHJlZVxuICAgICAqIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2Zyb21JbmRleD0wXSBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hdGNoZWQgZWxlbWVudCwgZWxzZSBgdW5kZWZpbmVkYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FnZSc6IDM2LCAnYWN0aXZlJzogdHJ1ZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FnZSc6IDQwLCAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhZ2UnOiAxLCAgJ2FjdGl2ZSc6IHRydWUgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLmZpbmQodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8uYWdlIDwgNDA7IH0pO1xuICAgICAqIC8vID0+IG9iamVjdCBmb3IgJ2Jhcm5leSdcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maW5kKHVzZXJzLCB7ICdhZ2UnOiAxLCAnYWN0aXZlJzogdHJ1ZSB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3QgZm9yICdwZWJibGVzJ1xuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmluZCh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICAgICAqIC8vID0+IG9iamVjdCBmb3IgJ2ZyZWQnXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbmQodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgKiAvLyA9PiBvYmplY3QgZm9yICdiYXJuZXknXG4gICAgICovXG4gICAgdmFyIGZpbmQgPSBjcmVhdGVGaW5kKGZpbmRJbmRleCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmZpbmRgIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2ZcbiAgICAgKiBgY29sbGVjdGlvbmAgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuMC4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2Zyb21JbmRleD1jb2xsZWN0aW9uLmxlbmd0aC0xXSBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hdGNoZWQgZWxlbWVudCwgZWxzZSBgdW5kZWZpbmVkYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5maW5kTGFzdChbMSwgMiwgMywgNF0sIGZ1bmN0aW9uKG4pIHtcbiAgICAgKiAgIHJldHVybiBuICUgMiA9PSAxO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IDNcbiAgICAgKi9cbiAgICB2YXIgZmluZExhc3QgPSBjcmVhdGVGaW5kKGZpbmRMYXN0SW5kZXgpO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZsYXR0ZW5lZCBhcnJheSBvZiB2YWx1ZXMgYnkgcnVubmluZyBlYWNoIGVsZW1lbnQgaW4gYGNvbGxlY3Rpb25gXG4gICAgICogdGhydSBgaXRlcmF0ZWVgIGFuZCBmbGF0dGVuaW5nIHRoZSBtYXBwZWQgcmVzdWx0cy4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWRcbiAgICAgKiB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBkdXBsaWNhdGUobikge1xuICAgICAqICAgcmV0dXJuIFtuLCBuXTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBfLmZsYXRNYXAoWzEsIDJdLCBkdXBsaWNhdGUpO1xuICAgICAqIC8vID0+IFsxLCAxLCAyLCAyXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZsYXRNYXAoY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgICAgIHJldHVybiBiYXNlRmxhdHRlbihtYXAoY29sbGVjdGlvbiwgaXRlcmF0ZWUpLCAxKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmZsYXRNYXBgIGV4Y2VwdCB0aGF0IGl0IHJlY3Vyc2l2ZWx5IGZsYXR0ZW5zIHRoZVxuICAgICAqIG1hcHBlZCByZXN1bHRzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuNy4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBkdXBsaWNhdGUobikge1xuICAgICAqICAgcmV0dXJuIFtbW24sIG5dXV07XG4gICAgICogfVxuICAgICAqXG4gICAgICogXy5mbGF0TWFwRGVlcChbMSwgMl0sIGR1cGxpY2F0ZSk7XG4gICAgICogLy8gPT4gWzEsIDEsIDIsIDJdXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmxhdE1hcERlZXAoY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgICAgIHJldHVybiBiYXNlRmxhdHRlbihtYXAoY29sbGVjdGlvbiwgaXRlcmF0ZWUpLCBJTkZJTklUWSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5mbGF0TWFwYCBleGNlcHQgdGhhdCBpdCByZWN1cnNpdmVseSBmbGF0dGVucyB0aGVcbiAgICAgKiBtYXBwZWQgcmVzdWx0cyB1cCB0byBgZGVwdGhgIHRpbWVzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuNy4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtkZXB0aD0xXSBUaGUgbWF4aW11bSByZWN1cnNpb24gZGVwdGguXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBkdXBsaWNhdGUobikge1xuICAgICAqICAgcmV0dXJuIFtbW24sIG5dXV07XG4gICAgICogfVxuICAgICAqXG4gICAgICogXy5mbGF0TWFwRGVwdGgoWzEsIDJdLCBkdXBsaWNhdGUsIDIpO1xuICAgICAqIC8vID0+IFtbMSwgMV0sIFsyLCAyXV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmbGF0TWFwRGVwdGgoY29sbGVjdGlvbiwgaXRlcmF0ZWUsIGRlcHRoKSB7XG4gICAgICBkZXB0aCA9IGRlcHRoID09PSB1bmRlZmluZWQgPyAxIDogdG9JbnRlZ2VyKGRlcHRoKTtcbiAgICAgIHJldHVybiBiYXNlRmxhdHRlbihtYXAoY29sbGVjdGlvbiwgaXRlcmF0ZWUpLCBkZXB0aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZiBgY29sbGVjdGlvbmAgYW5kIGludm9rZXMgYGl0ZXJhdGVlYCBmb3IgZWFjaCBlbGVtZW50LlxuICAgICAqIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gICAgICogSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0IGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIEFzIHdpdGggb3RoZXIgXCJDb2xsZWN0aW9uc1wiIG1ldGhvZHMsIG9iamVjdHMgd2l0aCBhIFwibGVuZ3RoXCJcbiAgICAgKiBwcm9wZXJ0eSBhcmUgaXRlcmF0ZWQgbGlrZSBhcnJheXMuIFRvIGF2b2lkIHRoaXMgYmVoYXZpb3IgdXNlIGBfLmZvckluYFxuICAgICAqIG9yIGBfLmZvck93bmAgZm9yIG9iamVjdCBpdGVyYXRpb24uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAYWxpYXMgZWFjaFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheXxPYmplY3R9IFJldHVybnMgYGNvbGxlY3Rpb25gLlxuICAgICAqIEBzZWUgXy5mb3JFYWNoUmlnaHRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5mb3JFYWNoKFsxLCAyXSwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKHZhbHVlKTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiBMb2dzIGAxYCB0aGVuIGAyYC5cbiAgICAgKlxuICAgICAqIF8uZm9yRWFjaCh7ICdhJzogMSwgJ2InOiAyIH0sIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGtleSk7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4gTG9ncyAnYScgdGhlbiAnYicgKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZCkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZm9yRWFjaChjb2xsZWN0aW9uLCBpdGVyYXRlZSkge1xuICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlFYWNoIDogYmFzZUVhY2g7XG4gICAgICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZm9yRWFjaGAgZXhjZXB0IHRoYXQgaXQgaXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZlxuICAgICAqIGBjb2xsZWN0aW9uYCBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi4wLjBcbiAgICAgKiBAYWxpYXMgZWFjaFJpZ2h0XG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fE9iamVjdH0gUmV0dXJucyBgY29sbGVjdGlvbmAuXG4gICAgICogQHNlZSBfLmZvckVhY2hcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5mb3JFYWNoUmlnaHQoWzEsIDJdLCBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAqICAgY29uc29sZS5sb2codmFsdWUpO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IExvZ3MgYDJgIHRoZW4gYDFgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZvckVhY2hSaWdodChjb2xsZWN0aW9uLCBpdGVyYXRlZSkge1xuICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlFYWNoUmlnaHQgOiBiYXNlRWFjaFJpZ2h0O1xuICAgICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDMpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiBrZXlzIGdlbmVyYXRlZCBmcm9tIHRoZSByZXN1bHRzIG9mIHJ1bm5pbmdcbiAgICAgKiBlYWNoIGVsZW1lbnQgb2YgYGNvbGxlY3Rpb25gIHRocnUgYGl0ZXJhdGVlYC4gVGhlIG9yZGVyIG9mIGdyb3VwZWQgdmFsdWVzXG4gICAgICogaXMgZGV0ZXJtaW5lZCBieSB0aGUgb3JkZXIgdGhleSBvY2N1ciBpbiBgY29sbGVjdGlvbmAuIFRoZSBjb3JyZXNwb25kaW5nXG4gICAgICogdmFsdWUgb2YgZWFjaCBrZXkgaXMgYW4gYXJyYXkgb2YgZWxlbWVudHMgcmVzcG9uc2libGUgZm9yIGdlbmVyYXRpbmcgdGhlXG4gICAgICoga2V5LiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgdG8gdHJhbnNmb3JtIGtleXMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY29tcG9zZWQgYWdncmVnYXRlIG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5ncm91cEJ5KFs2LjEsIDQuMiwgNi4zXSwgTWF0aC5mbG9vcik7XG4gICAgICogLy8gPT4geyAnNCc6IFs0LjJdLCAnNic6IFs2LjEsIDYuM10gfVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5ncm91cEJ5KFsnb25lJywgJ3R3bycsICd0aHJlZSddLCAnbGVuZ3RoJyk7XG4gICAgICogLy8gPT4geyAnMyc6IFsnb25lJywgJ3R3byddLCAnNSc6IFsndGhyZWUnXSB9XG4gICAgICovXG4gICAgdmFyIGdyb3VwQnkgPSBjcmVhdGVBZ2dyZWdhdG9yKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwocmVzdWx0LCBrZXkpKSB7XG4gICAgICAgIHJlc3VsdFtrZXldLnB1c2godmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmFzZUFzc2lnblZhbHVlKHJlc3VsdCwga2V5LCBbdmFsdWVdKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGluIGBjb2xsZWN0aW9uYC4gSWYgYGNvbGxlY3Rpb25gIGlzIGEgc3RyaW5nLCBpdCdzXG4gICAgICogY2hlY2tlZCBmb3IgYSBzdWJzdHJpbmcgb2YgYHZhbHVlYCwgb3RoZXJ3aXNlXG4gICAgICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAgICAgKiBpcyB1c2VkIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy4gSWYgYGZyb21JbmRleGAgaXMgbmVnYXRpdmUsIGl0J3MgdXNlZCBhc1xuICAgICAqIHRoZSBvZmZzZXQgZnJvbSB0aGUgZW5kIG9mIGBjb2xsZWN0aW9uYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R8c3RyaW5nfSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2Zyb21JbmRleD0wXSBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ucmVkdWNlYC5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmluY2x1ZGVzKFsxLCAyLCAzXSwgMSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pbmNsdWRlcyhbMSwgMiwgM10sIDEsIDIpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmluY2x1ZGVzKHsgJ2EnOiAxLCAnYic6IDIgfSwgMSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pbmNsdWRlcygnYWJjZCcsICdiYycpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpbmNsdWRlcyhjb2xsZWN0aW9uLCB2YWx1ZSwgZnJvbUluZGV4LCBndWFyZCkge1xuICAgICAgY29sbGVjdGlvbiA9IGlzQXJyYXlMaWtlKGNvbGxlY3Rpb24pID8gY29sbGVjdGlvbiA6IHZhbHVlcyhjb2xsZWN0aW9uKTtcbiAgICAgIGZyb21JbmRleCA9IChmcm9tSW5kZXggJiYgIWd1YXJkKSA/IHRvSW50ZWdlcihmcm9tSW5kZXgpIDogMDtcblxuICAgICAgdmFyIGxlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoO1xuICAgICAgaWYgKGZyb21JbmRleCA8IDApIHtcbiAgICAgICAgZnJvbUluZGV4ID0gbmF0aXZlTWF4KGxlbmd0aCArIGZyb21JbmRleCwgMCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaXNTdHJpbmcoY29sbGVjdGlvbilcbiAgICAgICAgPyAoZnJvbUluZGV4IDw9IGxlbmd0aCAmJiBjb2xsZWN0aW9uLmluZGV4T2YodmFsdWUsIGZyb21JbmRleCkgPiAtMSlcbiAgICAgICAgOiAoISFsZW5ndGggJiYgYmFzZUluZGV4T2YoY29sbGVjdGlvbiwgdmFsdWUsIGZyb21JbmRleCkgPiAtMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW52b2tlcyB0aGUgbWV0aG9kIGF0IGBwYXRoYCBvZiBlYWNoIGVsZW1lbnQgaW4gYGNvbGxlY3Rpb25gLCByZXR1cm5pbmdcbiAgICAgKiBhbiBhcnJheSBvZiB0aGUgcmVzdWx0cyBvZiBlYWNoIGludm9rZWQgbWV0aG9kLiBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHNcbiAgICAgKiBhcmUgcHJvdmlkZWQgdG8gZWFjaCBpbnZva2VkIG1ldGhvZC4gSWYgYHBhdGhgIGlzIGEgZnVuY3Rpb24sIGl0J3MgaW52b2tlZFxuICAgICAqIGZvciwgYW5kIGB0aGlzYCBib3VuZCB0bywgZWFjaCBlbGVtZW50IGluIGBjb2xsZWN0aW9uYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7QXJyYXl8RnVuY3Rpb258c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBtZXRob2QgdG8gaW52b2tlIG9yXG4gICAgICogIHRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsuLi4qfSBbYXJnc10gVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgZWFjaCBtZXRob2Qgd2l0aC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaW52b2tlTWFwKFtbNSwgMSwgN10sIFszLCAyLCAxXV0sICdzb3J0Jyk7XG4gICAgICogLy8gPT4gW1sxLCA1LCA3XSwgWzEsIDIsIDNdXVxuICAgICAqXG4gICAgICogXy5pbnZva2VNYXAoWzEyMywgNDU2XSwgU3RyaW5nLnByb3RvdHlwZS5zcGxpdCwgJycpO1xuICAgICAqIC8vID0+IFtbJzEnLCAnMicsICczJ10sIFsnNCcsICc1JywgJzYnXV1cbiAgICAgKi9cbiAgICB2YXIgaW52b2tlTWFwID0gYmFzZVJlc3QoZnVuY3Rpb24oY29sbGVjdGlvbiwgcGF0aCwgYXJncykge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgaXNGdW5jID0gdHlwZW9mIHBhdGggPT0gJ2Z1bmN0aW9uJyxcbiAgICAgICAgICByZXN1bHQgPSBpc0FycmF5TGlrZShjb2xsZWN0aW9uKSA/IEFycmF5KGNvbGxlY3Rpb24ubGVuZ3RoKSA6IFtdO1xuXG4gICAgICBiYXNlRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICByZXN1bHRbKytpbmRleF0gPSBpc0Z1bmMgPyBhcHBseShwYXRoLCB2YWx1ZSwgYXJncykgOiBiYXNlSW52b2tlKHZhbHVlLCBwYXRoLCBhcmdzKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIGtleXMgZ2VuZXJhdGVkIGZyb20gdGhlIHJlc3VsdHMgb2YgcnVubmluZ1xuICAgICAqIGVhY2ggZWxlbWVudCBvZiBgY29sbGVjdGlvbmAgdGhydSBgaXRlcmF0ZWVgLiBUaGUgY29ycmVzcG9uZGluZyB2YWx1ZSBvZlxuICAgICAqIGVhY2gga2V5IGlzIHRoZSBsYXN0IGVsZW1lbnQgcmVzcG9uc2libGUgZm9yIGdlbmVyYXRpbmcgdGhlIGtleS4gVGhlXG4gICAgICogaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgdG8gdHJhbnNmb3JtIGtleXMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY29tcG9zZWQgYWdncmVnYXRlIG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gW1xuICAgICAqICAgeyAnZGlyJzogJ2xlZnQnLCAnY29kZSc6IDk3IH0sXG4gICAgICogICB7ICdkaXInOiAncmlnaHQnLCAnY29kZSc6IDEwMCB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8ua2V5QnkoYXJyYXksIGZ1bmN0aW9uKG8pIHtcbiAgICAgKiAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKG8uY29kZSk7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4geyAnYSc6IHsgJ2Rpcic6ICdsZWZ0JywgJ2NvZGUnOiA5NyB9LCAnZCc6IHsgJ2Rpcic6ICdyaWdodCcsICdjb2RlJzogMTAwIH0gfVxuICAgICAqXG4gICAgICogXy5rZXlCeShhcnJheSwgJ2RpcicpO1xuICAgICAqIC8vID0+IHsgJ2xlZnQnOiB7ICdkaXInOiAnbGVmdCcsICdjb2RlJzogOTcgfSwgJ3JpZ2h0JzogeyAnZGlyJzogJ3JpZ2h0JywgJ2NvZGUnOiAxMDAgfSB9XG4gICAgICovXG4gICAgdmFyIGtleUJ5ID0gY3JlYXRlQWdncmVnYXRvcihmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICAgIGJhc2VBc3NpZ25WYWx1ZShyZXN1bHQsIGtleSwgdmFsdWUpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiB2YWx1ZXMgYnkgcnVubmluZyBlYWNoIGVsZW1lbnQgaW4gYGNvbGxlY3Rpb25gIHRocnVcbiAgICAgKiBgaXRlcmF0ZWVgLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czpcbiAgICAgKiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gICAgICpcbiAgICAgKiBNYW55IGxvZGFzaCBtZXRob2RzIGFyZSBndWFyZGVkIHRvIHdvcmsgYXMgaXRlcmF0ZWVzIGZvciBtZXRob2RzIGxpa2VcbiAgICAgKiBgXy5ldmVyeWAsIGBfLmZpbHRlcmAsIGBfLm1hcGAsIGBfLm1hcFZhbHVlc2AsIGBfLnJlamVjdGAsIGFuZCBgXy5zb21lYC5cbiAgICAgKlxuICAgICAqIFRoZSBndWFyZGVkIG1ldGhvZHMgYXJlOlxuICAgICAqIGBhcnlgLCBgY2h1bmtgLCBgY3VycnlgLCBgY3VycnlSaWdodGAsIGBkcm9wYCwgYGRyb3BSaWdodGAsIGBldmVyeWAsXG4gICAgICogYGZpbGxgLCBgaW52ZXJ0YCwgYHBhcnNlSW50YCwgYHJhbmRvbWAsIGByYW5nZWAsIGByYW5nZVJpZ2h0YCwgYHJlcGVhdGAsXG4gICAgICogYHNhbXBsZVNpemVgLCBgc2xpY2VgLCBgc29tZWAsIGBzb3J0QnlgLCBgc3BsaXRgLCBgdGFrZWAsIGB0YWtlUmlnaHRgLFxuICAgICAqIGB0ZW1wbGF0ZWAsIGB0cmltYCwgYHRyaW1FbmRgLCBgdHJpbVN0YXJ0YCwgYW5kIGB3b3Jkc2BcbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gc3F1YXJlKG4pIHtcbiAgICAgKiAgIHJldHVybiBuICogbjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBfLm1hcChbNCwgOF0sIHNxdWFyZSk7XG4gICAgICogLy8gPT4gWzE2LCA2NF1cbiAgICAgKlxuICAgICAqIF8ubWFwKHsgJ2EnOiA0LCAnYic6IDggfSwgc3F1YXJlKTtcbiAgICAgKiAvLyA9PiBbMTYsIDY0XSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5tYXAodXNlcnMsICd1c2VyJyk7XG4gICAgICogLy8gPT4gWydiYXJuZXknLCAnZnJlZCddXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWFwKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gICAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheU1hcCA6IGJhc2VNYXA7XG4gICAgICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uc29ydEJ5YCBleGNlcHQgdGhhdCBpdCBhbGxvd3Mgc3BlY2lmeWluZyB0aGUgc29ydFxuICAgICAqIG9yZGVycyBvZiB0aGUgaXRlcmF0ZWVzIHRvIHNvcnQgYnkuIElmIGBvcmRlcnNgIGlzIHVuc3BlY2lmaWVkLCBhbGwgdmFsdWVzXG4gICAgICogYXJlIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXIuIE90aGVyd2lzZSwgc3BlY2lmeSBhbiBvcmRlciBvZiBcImRlc2NcIiBmb3JcbiAgICAgKiBkZXNjZW5kaW5nIG9yIFwiYXNjXCIgZm9yIGFzY2VuZGluZyBzb3J0IG9yZGVyIG9mIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBcnJheVtdfEZ1bmN0aW9uW118T2JqZWN0W118c3RyaW5nW119IFtpdGVyYXRlZXM9W18uaWRlbnRpdHldXVxuICAgICAqICBUaGUgaXRlcmF0ZWVzIHRvIHNvcnQgYnkuXG4gICAgICogQHBhcmFtIHtzdHJpbmdbXX0gW29yZGVyc10gVGhlIHNvcnQgb3JkZXJzIG9mIGBpdGVyYXRlZXNgLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLnJlZHVjZWAuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgc29ydGVkIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0OCB9LFxuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzQgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQwIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIC8vIFNvcnQgYnkgYHVzZXJgIGluIGFzY2VuZGluZyBvcmRlciBhbmQgYnkgYGFnZWAgaW4gZGVzY2VuZGluZyBvcmRlci5cbiAgICAgKiBfLm9yZGVyQnkodXNlcnMsIFsndXNlcicsICdhZ2UnXSwgWydhc2MnLCAnZGVzYyddKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbWydiYXJuZXknLCAzNl0sIFsnYmFybmV5JywgMzRdLCBbJ2ZyZWQnLCA0OF0sIFsnZnJlZCcsIDQwXV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBvcmRlckJ5KGNvbGxlY3Rpb24sIGl0ZXJhdGVlcywgb3JkZXJzLCBndWFyZCkge1xuICAgICAgaWYgKGNvbGxlY3Rpb24gPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXJyYXkoaXRlcmF0ZWVzKSkge1xuICAgICAgICBpdGVyYXRlZXMgPSBpdGVyYXRlZXMgPT0gbnVsbCA/IFtdIDogW2l0ZXJhdGVlc107XG4gICAgICB9XG4gICAgICBvcmRlcnMgPSBndWFyZCA/IHVuZGVmaW5lZCA6IG9yZGVycztcbiAgICAgIGlmICghaXNBcnJheShvcmRlcnMpKSB7XG4gICAgICAgIG9yZGVycyA9IG9yZGVycyA9PSBudWxsID8gW10gOiBbb3JkZXJzXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlT3JkZXJCeShjb2xsZWN0aW9uLCBpdGVyYXRlZXMsIG9yZGVycyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBlbGVtZW50cyBzcGxpdCBpbnRvIHR3byBncm91cHMsIHRoZSBmaXJzdCBvZiB3aGljaFxuICAgICAqIGNvbnRhaW5zIGVsZW1lbnRzIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvciwgdGhlIHNlY29uZCBvZiB3aGljaFxuICAgICAqIGNvbnRhaW5zIGVsZW1lbnRzIGBwcmVkaWNhdGVgIHJldHVybnMgZmFsc2V5IGZvci4gVGhlIHByZWRpY2F0ZSBpc1xuICAgICAqIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBncm91cGVkIGVsZW1lbnRzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICAnYWdlJzogMzYsICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FnZSc6IDQwLCAnYWN0aXZlJzogdHJ1ZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdwZWJibGVzJywgJ2FnZSc6IDEsICAnYWN0aXZlJzogZmFsc2UgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLnBhcnRpdGlvbih1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gby5hY3RpdmU7IH0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFtbJ2ZyZWQnXSwgWydiYXJuZXknLCAncGViYmxlcyddXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnBhcnRpdGlvbih1c2VycywgeyAnYWdlJzogMSwgJ2FjdGl2ZSc6IGZhbHNlIH0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFtbJ3BlYmJsZXMnXSwgWydiYXJuZXknLCAnZnJlZCddXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8ucGFydGl0aW9uKHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgW1snYmFybmV5JywgJ3BlYmJsZXMnXSwgWydmcmVkJ11dXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnBhcnRpdGlvbih1c2VycywgJ2FjdGl2ZScpO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFtbJ2ZyZWQnXSwgWydiYXJuZXknLCAncGViYmxlcyddXVxuICAgICAqL1xuICAgIHZhciBwYXJ0aXRpb24gPSBjcmVhdGVBZ2dyZWdhdG9yKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgICAgcmVzdWx0W2tleSA/IDAgOiAxXS5wdXNoKHZhbHVlKTtcbiAgICB9LCBmdW5jdGlvbigpIHsgcmV0dXJuIFtbXSwgW11dOyB9KTtcblxuICAgIC8qKlxuICAgICAqIFJlZHVjZXMgYGNvbGxlY3Rpb25gIHRvIGEgdmFsdWUgd2hpY2ggaXMgdGhlIGFjY3VtdWxhdGVkIHJlc3VsdCBvZiBydW5uaW5nXG4gICAgICogZWFjaCBlbGVtZW50IGluIGBjb2xsZWN0aW9uYCB0aHJ1IGBpdGVyYXRlZWAsIHdoZXJlIGVhY2ggc3VjY2Vzc2l2ZVxuICAgICAqIGludm9jYXRpb24gaXMgc3VwcGxpZWQgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgcHJldmlvdXMuIElmIGBhY2N1bXVsYXRvcmBcbiAgICAgKiBpcyBub3QgZ2l2ZW4sIHRoZSBmaXJzdCBlbGVtZW50IG9mIGBjb2xsZWN0aW9uYCBpcyB1c2VkIGFzIHRoZSBpbml0aWFsXG4gICAgICogdmFsdWUuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggZm91ciBhcmd1bWVudHM6XG4gICAgICogKGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAgICAgKlxuICAgICAqIE1hbnkgbG9kYXNoIG1ldGhvZHMgYXJlIGd1YXJkZWQgdG8gd29yayBhcyBpdGVyYXRlZXMgZm9yIG1ldGhvZHMgbGlrZVxuICAgICAqIGBfLnJlZHVjZWAsIGBfLnJlZHVjZVJpZ2h0YCwgYW5kIGBfLnRyYW5zZm9ybWAuXG4gICAgICpcbiAgICAgKiBUaGUgZ3VhcmRlZCBtZXRob2RzIGFyZTpcbiAgICAgKiBgYXNzaWduYCwgYGRlZmF1bHRzYCwgYGRlZmF1bHRzRGVlcGAsIGBpbmNsdWRlc2AsIGBtZXJnZWAsIGBvcmRlckJ5YCxcbiAgICAgKiBhbmQgYHNvcnRCeWBcbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Kn0gW2FjY3VtdWxhdG9yXSBUaGUgaW5pdGlhbCB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgYWNjdW11bGF0ZWQgdmFsdWUuXG4gICAgICogQHNlZSBfLnJlZHVjZVJpZ2h0XG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ucmVkdWNlKFsxLCAyXSwgZnVuY3Rpb24oc3VtLCBuKSB7XG4gICAgICogICByZXR1cm4gc3VtICsgbjtcbiAgICAgKiB9LCAwKTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICpcbiAgICAgKiBfLnJlZHVjZSh7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDEgfSwgZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgICogICAocmVzdWx0W3ZhbHVlXSB8fCAocmVzdWx0W3ZhbHVlXSA9IFtdKSkucHVzaChrZXkpO1xuICAgICAqICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgKiB9LCB7fSk7XG4gICAgICogLy8gPT4geyAnMSc6IFsnYScsICdjJ10sICcyJzogWydiJ10gfSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlZHVjZShjb2xsZWN0aW9uLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IpIHtcbiAgICAgIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5UmVkdWNlIDogYmFzZVJlZHVjZSxcbiAgICAgICAgICBpbml0QWNjdW0gPSBhcmd1bWVudHMubGVuZ3RoIDwgMztcblxuICAgICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDQpLCBhY2N1bXVsYXRvciwgaW5pdEFjY3VtLCBiYXNlRWFjaCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5yZWR1Y2VgIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2ZcbiAgICAgKiBgY29sbGVjdGlvbmAgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBbYWNjdW11bGF0b3JdIFRoZSBpbml0aWFsIHZhbHVlLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS5cbiAgICAgKiBAc2VlIF8ucmVkdWNlXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFtbMCwgMV0sIFsyLCAzXSwgWzQsIDVdXTtcbiAgICAgKlxuICAgICAqIF8ucmVkdWNlUmlnaHQoYXJyYXksIGZ1bmN0aW9uKGZsYXR0ZW5lZCwgb3RoZXIpIHtcbiAgICAgKiAgIHJldHVybiBmbGF0dGVuZWQuY29uY2F0KG90aGVyKTtcbiAgICAgKiB9LCBbXSk7XG4gICAgICogLy8gPT4gWzQsIDUsIDIsIDMsIDAsIDFdXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVkdWNlUmlnaHQoY29sbGVjdGlvbiwgaXRlcmF0ZWUsIGFjY3VtdWxhdG9yKSB7XG4gICAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheVJlZHVjZVJpZ2h0IDogYmFzZVJlZHVjZSxcbiAgICAgICAgICBpbml0QWNjdW0gPSBhcmd1bWVudHMubGVuZ3RoIDwgMztcblxuICAgICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDQpLCBhY2N1bXVsYXRvciwgaW5pdEFjY3VtLCBiYXNlRWFjaFJpZ2h0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3Bwb3NpdGUgb2YgYF8uZmlsdGVyYDsgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gXG4gICAgICogdGhhdCBgcHJlZGljYXRlYCBkb2VzICoqbm90KiogcmV0dXJuIHRydXRoeSBmb3IuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gICAgICogQHNlZSBfLmZpbHRlclxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IHRydWUgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLnJlamVjdCh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gIW8uYWN0aXZlOyB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2ZyZWQnXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnJlamVjdCh1c2VycywgeyAnYWdlJzogNDAsICdhY3RpdmUnOiB0cnVlIH0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5J11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnJlamVjdCh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnJlamVjdCh1c2VycywgJ2FjdGl2ZScpO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5J11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZWplY3QoY29sbGVjdGlvbiwgcHJlZGljYXRlKSB7XG4gICAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheUZpbHRlciA6IGJhc2VGaWx0ZXI7XG4gICAgICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBuZWdhdGUoZ2V0SXRlcmF0ZWUocHJlZGljYXRlLCAzKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYSByYW5kb20gZWxlbWVudCBmcm9tIGBjb2xsZWN0aW9uYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAyLjAuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gc2FtcGxlLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByYW5kb20gZWxlbWVudC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zYW1wbGUoWzEsIDIsIDMsIDRdKTtcbiAgICAgKiAvLyA9PiAyXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2FtcGxlKGNvbGxlY3Rpb24pIHtcbiAgICAgIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5U2FtcGxlIDogYmFzZVNhbXBsZTtcbiAgICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYG5gIHJhbmRvbSBlbGVtZW50cyBhdCB1bmlxdWUga2V5cyBmcm9tIGBjb2xsZWN0aW9uYCB1cCB0byB0aGVcbiAgICAgKiBzaXplIG9mIGBjb2xsZWN0aW9uYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gc2FtcGxlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbj0xXSBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHNhbXBsZS5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcmFuZG9tIGVsZW1lbnRzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnNhbXBsZVNpemUoWzEsIDIsIDNdLCAyKTtcbiAgICAgKiAvLyA9PiBbMywgMV1cbiAgICAgKlxuICAgICAqIF8uc2FtcGxlU2l6ZShbMSwgMiwgM10sIDQpO1xuICAgICAqIC8vID0+IFsyLCAzLCAxXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNhbXBsZVNpemUoY29sbGVjdGlvbiwgbiwgZ3VhcmQpIHtcbiAgICAgIGlmICgoZ3VhcmQgPyBpc0l0ZXJhdGVlQ2FsbChjb2xsZWN0aW9uLCBuLCBndWFyZCkgOiBuID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgIG4gPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbiA9IHRvSW50ZWdlcihuKTtcbiAgICAgIH1cbiAgICAgIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5U2FtcGxlU2l6ZSA6IGJhc2VTYW1wbGVTaXplO1xuICAgICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBzaHVmZmxlZCB2YWx1ZXMsIHVzaW5nIGEgdmVyc2lvbiBvZiB0aGVcbiAgICAgKiBbRmlzaGVyLVlhdGVzIHNodWZmbGVdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Zpc2hlci1ZYXRlc19zaHVmZmxlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gc2h1ZmZsZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBzaHVmZmxlZCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zaHVmZmxlKFsxLCAyLCAzLCA0XSk7XG4gICAgICogLy8gPT4gWzQsIDEsIDMsIDJdXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2h1ZmZsZShjb2xsZWN0aW9uKSB7XG4gICAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheVNodWZmbGUgOiBiYXNlU2h1ZmZsZTtcbiAgICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHNpemUgb2YgYGNvbGxlY3Rpb25gIGJ5IHJldHVybmluZyBpdHMgbGVuZ3RoIGZvciBhcnJheS1saWtlXG4gICAgICogdmFsdWVzIG9yIHRoZSBudW1iZXIgb2Ygb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgZm9yIG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fHN0cmluZ30gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbGxlY3Rpb24gc2l6ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zaXplKFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gM1xuICAgICAqXG4gICAgICogXy5zaXplKHsgJ2EnOiAxLCAnYic6IDIgfSk7XG4gICAgICogLy8gPT4gMlxuICAgICAqXG4gICAgICogXy5zaXplKCdwZWJibGVzJyk7XG4gICAgICogLy8gPT4gN1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNpemUoY29sbGVjdGlvbikge1xuICAgICAgaWYgKGNvbGxlY3Rpb24gPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICAgIGlmIChpc0FycmF5TGlrZShjb2xsZWN0aW9uKSkge1xuICAgICAgICByZXR1cm4gaXNTdHJpbmcoY29sbGVjdGlvbikgPyBzdHJpbmdTaXplKGNvbGxlY3Rpb24pIDogY29sbGVjdGlvbi5sZW5ndGg7XG4gICAgICB9XG4gICAgICB2YXIgdGFnID0gZ2V0VGFnKGNvbGxlY3Rpb24pO1xuICAgICAgaWYgKHRhZyA9PSBtYXBUYWcgfHwgdGFnID09IHNldFRhZykge1xuICAgICAgICByZXR1cm4gY29sbGVjdGlvbi5zaXplO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VLZXlzKGNvbGxlY3Rpb24pLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkgZm9yICoqYW55KiogZWxlbWVudCBvZiBgY29sbGVjdGlvbmAuXG4gICAgICogSXRlcmF0aW9uIGlzIHN0b3BwZWQgb25jZSBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeS4gVGhlIHByZWRpY2F0ZSBpc1xuICAgICAqIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbnkgZWxlbWVudCBwYXNzZXMgdGhlIHByZWRpY2F0ZSBjaGVjayxcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnNvbWUoW251bGwsIDAsICd5ZXMnLCBmYWxzZV0sIEJvb2xlYW4pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FjdGl2ZSc6IGZhbHNlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnNvbWUodXNlcnMsIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FjdGl2ZSc6IGZhbHNlIH0pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5zb21lKHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5zb21lKHVzZXJzLCAnYWN0aXZlJyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNvbWUoY29sbGVjdGlvbiwgcHJlZGljYXRlLCBndWFyZCkge1xuICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlTb21lIDogYmFzZVNvbWU7XG4gICAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoY29sbGVjdGlvbiwgcHJlZGljYXRlLCBndWFyZCkpIHtcbiAgICAgICAgcHJlZGljYXRlID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgZ2V0SXRlcmF0ZWUocHJlZGljYXRlLCAzKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBlbGVtZW50cywgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlciBieSB0aGUgcmVzdWx0cyBvZlxuICAgICAqIHJ1bm5pbmcgZWFjaCBlbGVtZW50IGluIGEgY29sbGVjdGlvbiB0aHJ1IGVhY2ggaXRlcmF0ZWUuIFRoaXMgbWV0aG9kXG4gICAgICogcGVyZm9ybXMgYSBzdGFibGUgc29ydCwgdGhhdCBpcywgaXQgcHJlc2VydmVzIHRoZSBvcmlnaW5hbCBzb3J0IG9yZGVyIG9mXG4gICAgICogZXF1YWwgZWxlbWVudHMuIFRoZSBpdGVyYXRlZXMgYXJlIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0gey4uLihGdW5jdGlvbnxGdW5jdGlvbltdKX0gW2l0ZXJhdGVlcz1bXy5pZGVudGl0eV1dXG4gICAgICogIFRoZSBpdGVyYXRlZXMgdG8gc29ydCBieS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBzb3J0ZWQgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQ4IH0sXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDAgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM0IH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5zb3J0QnkodXNlcnMsIFtmdW5jdGlvbihvKSB7IHJldHVybiBvLnVzZXI7IH1dKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbWydiYXJuZXknLCAzNl0sIFsnYmFybmV5JywgMzRdLCBbJ2ZyZWQnLCA0OF0sIFsnZnJlZCcsIDQwXV1cbiAgICAgKlxuICAgICAqIF8uc29ydEJ5KHVzZXJzLCBbJ3VzZXInLCAnYWdlJ10pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFtbJ2Jhcm5leScsIDM0XSwgWydiYXJuZXknLCAzNl0sIFsnZnJlZCcsIDQwXSwgWydmcmVkJywgNDhdXVxuICAgICAqL1xuICAgIHZhciBzb3J0QnkgPSBiYXNlUmVzdChmdW5jdGlvbihjb2xsZWN0aW9uLCBpdGVyYXRlZXMpIHtcbiAgICAgIGlmIChjb2xsZWN0aW9uID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgdmFyIGxlbmd0aCA9IGl0ZXJhdGVlcy5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3RoID4gMSAmJiBpc0l0ZXJhdGVlQ2FsbChjb2xsZWN0aW9uLCBpdGVyYXRlZXNbMF0sIGl0ZXJhdGVlc1sxXSkpIHtcbiAgICAgICAgaXRlcmF0ZWVzID0gW107XG4gICAgICB9IGVsc2UgaWYgKGxlbmd0aCA+IDIgJiYgaXNJdGVyYXRlZUNhbGwoaXRlcmF0ZWVzWzBdLCBpdGVyYXRlZXNbMV0sIGl0ZXJhdGVlc1syXSkpIHtcbiAgICAgICAgaXRlcmF0ZWVzID0gW2l0ZXJhdGVlc1swXV07XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZU9yZGVyQnkoY29sbGVjdGlvbiwgYmFzZUZsYXR0ZW4oaXRlcmF0ZWVzLCAxKSwgW10pO1xuICAgIH0pO1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgdGltZXN0YW1wIG9mIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRoYXQgaGF2ZSBlbGFwc2VkIHNpbmNlXG4gICAgICogdGhlIFVuaXggZXBvY2ggKDEgSmFudWFyeSAxOTcwIDAwOjAwOjAwIFVUQykuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi40LjBcbiAgICAgKiBAY2F0ZWdvcnkgRGF0ZVxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHRpbWVzdGFtcC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5kZWZlcihmdW5jdGlvbihzdGFtcCkge1xuICAgICAqICAgY29uc29sZS5sb2coXy5ub3coKSAtIHN0YW1wKTtcbiAgICAgKiB9LCBfLm5vdygpKTtcbiAgICAgKiAvLyA9PiBMb2dzIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGl0IHRvb2sgZm9yIHRoZSBkZWZlcnJlZCBpbnZvY2F0aW9uLlxuICAgICAqL1xuICAgIHZhciBub3cgPSBjdHhOb3cgfHwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gcm9vdC5EYXRlLm5vdygpO1xuICAgIH07XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3Bwb3NpdGUgb2YgYF8uYmVmb3JlYDsgdGhpcyBtZXRob2QgY3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlc1xuICAgICAqIGBmdW5jYCBvbmNlIGl0J3MgY2FsbGVkIGBuYCBvciBtb3JlIHRpbWVzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiBjYWxscyBiZWZvcmUgYGZ1bmNgIGlzIGludm9rZWQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcmVzdHJpY3RlZCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHNhdmVzID0gWydwcm9maWxlJywgJ3NldHRpbmdzJ107XG4gICAgICpcbiAgICAgKiB2YXIgZG9uZSA9IF8uYWZ0ZXIoc2F2ZXMubGVuZ3RoLCBmdW5jdGlvbigpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdkb25lIHNhdmluZyEnKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIF8uZm9yRWFjaChzYXZlcywgZnVuY3Rpb24odHlwZSkge1xuICAgICAqICAgYXN5bmNTYXZlKHsgJ3R5cGUnOiB0eXBlLCAnY29tcGxldGUnOiBkb25lIH0pO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IExvZ3MgJ2RvbmUgc2F2aW5nIScgYWZ0ZXIgdGhlIHR3byBhc3luYyBzYXZlcyBoYXZlIGNvbXBsZXRlZC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhZnRlcihuLCBmdW5jKSB7XG4gICAgICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gICAgICB9XG4gICAgICBuID0gdG9JbnRlZ2VyKG4pO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoLS1uIDwgMSkge1xuICAgICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2AsIHdpdGggdXAgdG8gYG5gIGFyZ3VtZW50cyxcbiAgICAgKiBpZ25vcmluZyBhbnkgYWRkaXRpb25hbCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjYXAgYXJndW1lbnRzIGZvci5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW249ZnVuYy5sZW5ndGhdIFRoZSBhcml0eSBjYXAuXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ubWFwKFsnNicsICc4JywgJzEwJ10sIF8uYXJ5KHBhcnNlSW50LCAxKSk7XG4gICAgICogLy8gPT4gWzYsIDgsIDEwXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFyeShmdW5jLCBuLCBndWFyZCkge1xuICAgICAgbiA9IGd1YXJkID8gdW5kZWZpbmVkIDogbjtcbiAgICAgIG4gPSAoZnVuYyAmJiBuID09IG51bGwpID8gZnVuYy5sZW5ndGggOiBuO1xuICAgICAgcmV0dXJuIGNyZWF0ZVdyYXAoZnVuYywgV1JBUF9BUllfRkxBRywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBuKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCwgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgYW5kIGFyZ3VtZW50c1xuICAgICAqIG9mIHRoZSBjcmVhdGVkIGZ1bmN0aW9uLCB3aGlsZSBpdCdzIGNhbGxlZCBsZXNzIHRoYW4gYG5gIHRpbWVzLiBTdWJzZXF1ZW50XG4gICAgICogY2FsbHMgdG8gdGhlIGNyZWF0ZWQgZnVuY3Rpb24gcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYGZ1bmNgIGludm9jYXRpb24uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIGNhbGxzIGF0IHdoaWNoIGBmdW5jYCBpcyBubyBsb25nZXIgaW52b2tlZC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byByZXN0cmljdC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyByZXN0cmljdGVkIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBqUXVlcnkoZWxlbWVudCkub24oJ2NsaWNrJywgXy5iZWZvcmUoNSwgYWRkQ29udGFjdFRvTGlzdCkpO1xuICAgICAqIC8vID0+IEFsbG93cyBhZGRpbmcgdXAgdG8gNCBjb250YWN0cyB0byB0aGUgbGlzdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiZWZvcmUobiwgZnVuYykge1xuICAgICAgdmFyIHJlc3VsdDtcbiAgICAgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgICAgIH1cbiAgICAgIG4gPSB0b0ludGVnZXIobik7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICgtLW4gPiAwKSB7XG4gICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuIDw9IDEpIHtcbiAgICAgICAgICBmdW5jID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYFxuICAgICAqIGFuZCBgcGFydGlhbHNgIHByZXBlbmRlZCB0byB0aGUgYXJndW1lbnRzIGl0IHJlY2VpdmVzLlxuICAgICAqXG4gICAgICogVGhlIGBfLmJpbmQucGxhY2Vob2xkZXJgIHZhbHVlLCB3aGljaCBkZWZhdWx0cyB0byBgX2AgaW4gbW9ub2xpdGhpYyBidWlsZHMsXG4gICAgICogbWF5IGJlIHVzZWQgYXMgYSBwbGFjZWhvbGRlciBmb3IgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFVubGlrZSBuYXRpdmUgYEZ1bmN0aW9uI2JpbmRgLCB0aGlzIG1ldGhvZCBkb2Vzbid0IHNldCB0aGUgXCJsZW5ndGhcIlxuICAgICAqIHByb3BlcnR5IG9mIGJvdW5kIGZ1bmN0aW9ucy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGJpbmQuXG4gICAgICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gICAgICogQHBhcmFtIHsuLi4qfSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gYmUgcGFydGlhbGx5IGFwcGxpZWQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYm91bmQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGdyZWV0KGdyZWV0aW5nLCBwdW5jdHVhdGlvbikge1xuICAgICAqICAgcmV0dXJuIGdyZWV0aW5nICsgJyAnICsgdGhpcy51c2VyICsgcHVuY3R1YXRpb247XG4gICAgICogfVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ3VzZXInOiAnZnJlZCcgfTtcbiAgICAgKlxuICAgICAqIHZhciBib3VuZCA9IF8uYmluZChncmVldCwgb2JqZWN0LCAnaGknKTtcbiAgICAgKiBib3VuZCgnIScpO1xuICAgICAqIC8vID0+ICdoaSBmcmVkISdcbiAgICAgKlxuICAgICAqIC8vIEJvdW5kIHdpdGggcGxhY2Vob2xkZXJzLlxuICAgICAqIHZhciBib3VuZCA9IF8uYmluZChncmVldCwgb2JqZWN0LCBfLCAnIScpO1xuICAgICAqIGJvdW5kKCdoaScpO1xuICAgICAqIC8vID0+ICdoaSBmcmVkISdcbiAgICAgKi9cbiAgICB2YXIgYmluZCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGZ1bmMsIHRoaXNBcmcsIHBhcnRpYWxzKSB7XG4gICAgICB2YXIgYml0bWFzayA9IFdSQVBfQklORF9GTEFHO1xuICAgICAgaWYgKHBhcnRpYWxzLmxlbmd0aCkge1xuICAgICAgICB2YXIgaG9sZGVycyA9IHJlcGxhY2VIb2xkZXJzKHBhcnRpYWxzLCBnZXRIb2xkZXIoYmluZCkpO1xuICAgICAgICBiaXRtYXNrIHw9IFdSQVBfUEFSVElBTF9GTEFHO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNyZWF0ZVdyYXAoZnVuYywgYml0bWFzaywgdGhpc0FyZywgcGFydGlhbHMsIGhvbGRlcnMpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyB0aGUgbWV0aG9kIGF0IGBvYmplY3Rba2V5XWAgd2l0aCBgcGFydGlhbHNgXG4gICAgICogcHJlcGVuZGVkIHRvIHRoZSBhcmd1bWVudHMgaXQgcmVjZWl2ZXMuXG4gICAgICpcbiAgICAgKiBUaGlzIG1ldGhvZCBkaWZmZXJzIGZyb20gYF8uYmluZGAgYnkgYWxsb3dpbmcgYm91bmQgZnVuY3Rpb25zIHRvIHJlZmVyZW5jZVxuICAgICAqIG1ldGhvZHMgdGhhdCBtYXkgYmUgcmVkZWZpbmVkIG9yIGRvbid0IHlldCBleGlzdC4gU2VlXG4gICAgICogW1BldGVyIE1pY2hhdXgncyBhcnRpY2xlXShodHRwOi8vcGV0ZXIubWljaGF1eC5jYS9hcnRpY2xlcy9sYXp5LWZ1bmN0aW9uLWRlZmluaXRpb24tcGF0dGVybilcbiAgICAgKiBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqXG4gICAgICogVGhlIGBfLmJpbmRLZXkucGxhY2Vob2xkZXJgIHZhbHVlLCB3aGljaCBkZWZhdWx0cyB0byBgX2AgaW4gbW9ub2xpdGhpY1xuICAgICAqIGJ1aWxkcywgbWF5IGJlIHVzZWQgYXMgYSBwbGFjZWhvbGRlciBmb3IgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMTAuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnZva2UgdGhlIG1ldGhvZCBvbi5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIG1ldGhvZC5cbiAgICAgKiBAcGFyYW0gey4uLip9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBiZSBwYXJ0aWFsbHkgYXBwbGllZC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBib3VuZCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHtcbiAgICAgKiAgICd1c2VyJzogJ2ZyZWQnLFxuICAgICAqICAgJ2dyZWV0JzogZnVuY3Rpb24oZ3JlZXRpbmcsIHB1bmN0dWF0aW9uKSB7XG4gICAgICogICAgIHJldHVybiBncmVldGluZyArICcgJyArIHRoaXMudXNlciArIHB1bmN0dWF0aW9uO1xuICAgICAqICAgfVxuICAgICAqIH07XG4gICAgICpcbiAgICAgKiB2YXIgYm91bmQgPSBfLmJpbmRLZXkob2JqZWN0LCAnZ3JlZXQnLCAnaGknKTtcbiAgICAgKiBib3VuZCgnIScpO1xuICAgICAqIC8vID0+ICdoaSBmcmVkISdcbiAgICAgKlxuICAgICAqIG9iamVjdC5ncmVldCA9IGZ1bmN0aW9uKGdyZWV0aW5nLCBwdW5jdHVhdGlvbikge1xuICAgICAqICAgcmV0dXJuIGdyZWV0aW5nICsgJ3lhICcgKyB0aGlzLnVzZXIgKyBwdW5jdHVhdGlvbjtcbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogYm91bmQoJyEnKTtcbiAgICAgKiAvLyA9PiAnaGl5YSBmcmVkISdcbiAgICAgKlxuICAgICAqIC8vIEJvdW5kIHdpdGggcGxhY2Vob2xkZXJzLlxuICAgICAqIHZhciBib3VuZCA9IF8uYmluZEtleShvYmplY3QsICdncmVldCcsIF8sICchJyk7XG4gICAgICogYm91bmQoJ2hpJyk7XG4gICAgICogLy8gPT4gJ2hpeWEgZnJlZCEnXG4gICAgICovXG4gICAgdmFyIGJpbmRLZXkgPSBiYXNlUmVzdChmdW5jdGlvbihvYmplY3QsIGtleSwgcGFydGlhbHMpIHtcbiAgICAgIHZhciBiaXRtYXNrID0gV1JBUF9CSU5EX0ZMQUcgfCBXUkFQX0JJTkRfS0VZX0ZMQUc7XG4gICAgICBpZiAocGFydGlhbHMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBob2xkZXJzID0gcmVwbGFjZUhvbGRlcnMocGFydGlhbHMsIGdldEhvbGRlcihiaW5kS2V5KSk7XG4gICAgICAgIGJpdG1hc2sgfD0gV1JBUF9QQVJUSUFMX0ZMQUc7XG4gICAgICB9XG4gICAgICByZXR1cm4gY3JlYXRlV3JhcChrZXksIGJpdG1hc2ssIG9iamVjdCwgcGFydGlhbHMsIGhvbGRlcnMpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyBhcmd1bWVudHMgb2YgYGZ1bmNgIGFuZCBlaXRoZXIgaW52b2tlc1xuICAgICAqIGBmdW5jYCByZXR1cm5pbmcgaXRzIHJlc3VsdCwgaWYgYXQgbGVhc3QgYGFyaXR5YCBudW1iZXIgb2YgYXJndW1lbnRzIGhhdmVcbiAgICAgKiBiZWVuIHByb3ZpZGVkLCBvciByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIHRoZSByZW1haW5pbmcgYGZ1bmNgXG4gICAgICogYXJndW1lbnRzLCBhbmQgc28gb24uIFRoZSBhcml0eSBvZiBgZnVuY2AgbWF5IGJlIHNwZWNpZmllZCBpZiBgZnVuYy5sZW5ndGhgXG4gICAgICogaXMgbm90IHN1ZmZpY2llbnQuXG4gICAgICpcbiAgICAgKiBUaGUgYF8uY3VycnkucGxhY2Vob2xkZXJgIHZhbHVlLCB3aGljaCBkZWZhdWx0cyB0byBgX2AgaW4gbW9ub2xpdGhpYyBidWlsZHMsXG4gICAgICogbWF5IGJlIHVzZWQgYXMgYSBwbGFjZWhvbGRlciBmb3IgcHJvdmlkZWQgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGRvZXNuJ3Qgc2V0IHRoZSBcImxlbmd0aFwiIHByb3BlcnR5IG9mIGN1cnJpZWQgZnVuY3Rpb25zLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuMC4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY3VycnkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFthcml0eT1mdW5jLmxlbmd0aF0gVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGN1cnJpZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhYmMgPSBmdW5jdGlvbihhLCBiLCBjKSB7XG4gICAgICogICByZXR1cm4gW2EsIGIsIGNdO1xuICAgICAqIH07XG4gICAgICpcbiAgICAgKiB2YXIgY3VycmllZCA9IF8uY3VycnkoYWJjKTtcbiAgICAgKlxuICAgICAqIGN1cnJpZWQoMSkoMikoMyk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICpcbiAgICAgKiBjdXJyaWVkKDEsIDIpKDMpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqXG4gICAgICogY3VycmllZCgxLCAyLCAzKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKlxuICAgICAqIC8vIEN1cnJpZWQgd2l0aCBwbGFjZWhvbGRlcnMuXG4gICAgICogY3VycmllZCgxKShfLCAzKSgyKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjdXJyeShmdW5jLCBhcml0eSwgZ3VhcmQpIHtcbiAgICAgIGFyaXR5ID0gZ3VhcmQgPyB1bmRlZmluZWQgOiBhcml0eTtcbiAgICAgIHZhciByZXN1bHQgPSBjcmVhdGVXcmFwKGZ1bmMsIFdSQVBfQ1VSUllfRkxBRywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFyaXR5KTtcbiAgICAgIHJlc3VsdC5wbGFjZWhvbGRlciA9IGN1cnJ5LnBsYWNlaG9sZGVyO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmN1cnJ5YCBleGNlcHQgdGhhdCBhcmd1bWVudHMgYXJlIGFwcGxpZWQgdG8gYGZ1bmNgXG4gICAgICogaW4gdGhlIG1hbm5lciBvZiBgXy5wYXJ0aWFsUmlnaHRgIGluc3RlYWQgb2YgYF8ucGFydGlhbGAuXG4gICAgICpcbiAgICAgKiBUaGUgYF8uY3VycnlSaWdodC5wbGFjZWhvbGRlcmAgdmFsdWUsIHdoaWNoIGRlZmF1bHRzIHRvIGBfYCBpbiBtb25vbGl0aGljXG4gICAgICogYnVpbGRzLCBtYXkgYmUgdXNlZCBhcyBhIHBsYWNlaG9sZGVyIGZvciBwcm92aWRlZCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgZG9lc24ndCBzZXQgdGhlIFwibGVuZ3RoXCIgcHJvcGVydHkgb2YgY3VycmllZCBmdW5jdGlvbnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjdXJyeS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2FyaXR5PWZ1bmMubGVuZ3RoXSBUaGUgYXJpdHkgb2YgYGZ1bmNgLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY3VycmllZCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFiYyA9IGZ1bmN0aW9uKGEsIGIsIGMpIHtcbiAgICAgKiAgIHJldHVybiBbYSwgYiwgY107XG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIHZhciBjdXJyaWVkID0gXy5jdXJyeVJpZ2h0KGFiYyk7XG4gICAgICpcbiAgICAgKiBjdXJyaWVkKDMpKDIpKDEpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqXG4gICAgICogY3VycmllZCgyLCAzKSgxKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKlxuICAgICAqIGN1cnJpZWQoMSwgMiwgMyk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICpcbiAgICAgKiAvLyBDdXJyaWVkIHdpdGggcGxhY2Vob2xkZXJzLlxuICAgICAqIGN1cnJpZWQoMykoMSwgXykoMik7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3VycnlSaWdodChmdW5jLCBhcml0eSwgZ3VhcmQpIHtcbiAgICAgIGFyaXR5ID0gZ3VhcmQgPyB1bmRlZmluZWQgOiBhcml0eTtcbiAgICAgIHZhciByZXN1bHQgPSBjcmVhdGVXcmFwKGZ1bmMsIFdSQVBfQ1VSUllfUklHSFRfRkxBRywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFyaXR5KTtcbiAgICAgIHJlc3VsdC5wbGFjZWhvbGRlciA9IGN1cnJ5UmlnaHQucGxhY2Vob2xkZXI7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBkZWJvdW5jZWQgZnVuY3Rpb24gdGhhdCBkZWxheXMgaW52b2tpbmcgYGZ1bmNgIHVudGlsIGFmdGVyIGB3YWl0YFxuICAgICAqIG1pbGxpc2Vjb25kcyBoYXZlIGVsYXBzZWQgc2luY2UgdGhlIGxhc3QgdGltZSB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uIHdhc1xuICAgICAqIGludm9rZWQuIFRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gY29tZXMgd2l0aCBhIGBjYW5jZWxgIG1ldGhvZCB0byBjYW5jZWxcbiAgICAgKiBkZWxheWVkIGBmdW5jYCBpbnZvY2F0aW9ucyBhbmQgYSBgZmx1c2hgIG1ldGhvZCB0byBpbW1lZGlhdGVseSBpbnZva2UgdGhlbS5cbiAgICAgKiBQcm92aWRlIGBvcHRpb25zYCB0byBpbmRpY2F0ZSB3aGV0aGVyIGBmdW5jYCBzaG91bGQgYmUgaW52b2tlZCBvbiB0aGVcbiAgICAgKiBsZWFkaW5nIGFuZC9vciB0cmFpbGluZyBlZGdlIG9mIHRoZSBgd2FpdGAgdGltZW91dC4gVGhlIGBmdW5jYCBpcyBpbnZva2VkXG4gICAgICogd2l0aCB0aGUgbGFzdCBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlIGRlYm91bmNlZCBmdW5jdGlvbi4gU3Vic2VxdWVudFxuICAgICAqIGNhbGxzIHRvIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYGZ1bmNgXG4gICAgICogaW52b2NhdGlvbi5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBJZiBgbGVhZGluZ2AgYW5kIGB0cmFpbGluZ2Agb3B0aW9ucyBhcmUgYHRydWVgLCBgZnVuY2AgaXNcbiAgICAgKiBpbnZva2VkIG9uIHRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0IG9ubHkgaWYgdGhlIGRlYm91bmNlZCBmdW5jdGlvblxuICAgICAqIGlzIGludm9rZWQgbW9yZSB0aGFuIG9uY2UgZHVyaW5nIHRoZSBgd2FpdGAgdGltZW91dC5cbiAgICAgKlxuICAgICAqIElmIGB3YWl0YCBpcyBgMGAgYW5kIGBsZWFkaW5nYCBpcyBgZmFsc2VgLCBgZnVuY2AgaW52b2NhdGlvbiBpcyBkZWZlcnJlZFxuICAgICAqIHVudGlsIHRvIHRoZSBuZXh0IHRpY2ssIHNpbWlsYXIgdG8gYHNldFRpbWVvdXRgIHdpdGggYSB0aW1lb3V0IG9mIGAwYC5cbiAgICAgKlxuICAgICAqIFNlZSBbRGF2aWQgQ29yYmFjaG8ncyBhcnRpY2xlXShodHRwczovL2Nzcy10cmlja3MuY29tL2RlYm91bmNpbmctdGhyb3R0bGluZy1leHBsYWluZWQtZXhhbXBsZXMvKVxuICAgICAqIGZvciBkZXRhaWxzIG92ZXIgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gYF8uZGVib3VuY2VgIGFuZCBgXy50aHJvdHRsZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBkZWJvdW5jZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3dhaXQ9MF0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZGVsYXkuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBUaGUgb3B0aW9ucyBvYmplY3QuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5sZWFkaW5nPWZhbHNlXVxuICAgICAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSBsZWFkaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1heFdhaXRdXG4gICAgICogIFRoZSBtYXhpbXVtIHRpbWUgYGZ1bmNgIGlzIGFsbG93ZWQgdG8gYmUgZGVsYXllZCBiZWZvcmUgaXQncyBpbnZva2VkLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudHJhaWxpbmc9dHJ1ZV1cbiAgICAgKiAgU3BlY2lmeSBpbnZva2luZyBvbiB0aGUgdHJhaWxpbmcgZWRnZSBvZiB0aGUgdGltZW91dC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBkZWJvdW5jZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIEF2b2lkIGNvc3RseSBjYWxjdWxhdGlvbnMgd2hpbGUgdGhlIHdpbmRvdyBzaXplIGlzIGluIGZsdXguXG4gICAgICogalF1ZXJ5KHdpbmRvdykub24oJ3Jlc2l6ZScsIF8uZGVib3VuY2UoY2FsY3VsYXRlTGF5b3V0LCAxNTApKTtcbiAgICAgKlxuICAgICAqIC8vIEludm9rZSBgc2VuZE1haWxgIHdoZW4gY2xpY2tlZCwgZGVib3VuY2luZyBzdWJzZXF1ZW50IGNhbGxzLlxuICAgICAqIGpRdWVyeShlbGVtZW50KS5vbignY2xpY2snLCBfLmRlYm91bmNlKHNlbmRNYWlsLCAzMDAsIHtcbiAgICAgKiAgICdsZWFkaW5nJzogdHJ1ZSxcbiAgICAgKiAgICd0cmFpbGluZyc6IGZhbHNlXG4gICAgICogfSkpO1xuICAgICAqXG4gICAgICogLy8gRW5zdXJlIGBiYXRjaExvZ2AgaXMgaW52b2tlZCBvbmNlIGFmdGVyIDEgc2Vjb25kIG9mIGRlYm91bmNlZCBjYWxscy5cbiAgICAgKiB2YXIgZGVib3VuY2VkID0gXy5kZWJvdW5jZShiYXRjaExvZywgMjUwLCB7ICdtYXhXYWl0JzogMTAwMCB9KTtcbiAgICAgKiB2YXIgc291cmNlID0gbmV3IEV2ZW50U291cmNlKCcvc3RyZWFtJyk7XG4gICAgICogalF1ZXJ5KHNvdXJjZSkub24oJ21lc3NhZ2UnLCBkZWJvdW5jZWQpO1xuICAgICAqXG4gICAgICogLy8gQ2FuY2VsIHRoZSB0cmFpbGluZyBkZWJvdW5jZWQgaW52b2NhdGlvbi5cbiAgICAgKiBqUXVlcnkod2luZG93KS5vbigncG9wc3RhdGUnLCBkZWJvdW5jZWQuY2FuY2VsKTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkZWJvdW5jZShmdW5jLCB3YWl0LCBvcHRpb25zKSB7XG4gICAgICB2YXIgbGFzdEFyZ3MsXG4gICAgICAgICAgbGFzdFRoaXMsXG4gICAgICAgICAgbWF4V2FpdCxcbiAgICAgICAgICByZXN1bHQsXG4gICAgICAgICAgdGltZXJJZCxcbiAgICAgICAgICBsYXN0Q2FsbFRpbWUsXG4gICAgICAgICAgbGFzdEludm9rZVRpbWUgPSAwLFxuICAgICAgICAgIGxlYWRpbmcgPSBmYWxzZSxcbiAgICAgICAgICBtYXhpbmcgPSBmYWxzZSxcbiAgICAgICAgICB0cmFpbGluZyA9IHRydWU7XG5cbiAgICAgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgICAgIH1cbiAgICAgIHdhaXQgPSB0b051bWJlcih3YWl0KSB8fCAwO1xuICAgICAgaWYgKGlzT2JqZWN0KG9wdGlvbnMpKSB7XG4gICAgICAgIGxlYWRpbmcgPSAhIW9wdGlvbnMubGVhZGluZztcbiAgICAgICAgbWF4aW5nID0gJ21heFdhaXQnIGluIG9wdGlvbnM7XG4gICAgICAgIG1heFdhaXQgPSBtYXhpbmcgPyBuYXRpdmVNYXgodG9OdW1iZXIob3B0aW9ucy5tYXhXYWl0KSB8fCAwLCB3YWl0KSA6IG1heFdhaXQ7XG4gICAgICAgIHRyYWlsaW5nID0gJ3RyYWlsaW5nJyBpbiBvcHRpb25zID8gISFvcHRpb25zLnRyYWlsaW5nIDogdHJhaWxpbmc7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGludm9rZUZ1bmModGltZSkge1xuICAgICAgICB2YXIgYXJncyA9IGxhc3RBcmdzLFxuICAgICAgICAgICAgdGhpc0FyZyA9IGxhc3RUaGlzO1xuXG4gICAgICAgIGxhc3RBcmdzID0gbGFzdFRoaXMgPSB1bmRlZmluZWQ7XG4gICAgICAgIGxhc3RJbnZva2VUaW1lID0gdGltZTtcbiAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gbGVhZGluZ0VkZ2UodGltZSkge1xuICAgICAgICAvLyBSZXNldCBhbnkgYG1heFdhaXRgIHRpbWVyLlxuICAgICAgICBsYXN0SW52b2tlVGltZSA9IHRpbWU7XG4gICAgICAgIC8vIFN0YXJ0IHRoZSB0aW1lciBmb3IgdGhlIHRyYWlsaW5nIGVkZ2UuXG4gICAgICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgd2FpdCk7XG4gICAgICAgIC8vIEludm9rZSB0aGUgbGVhZGluZyBlZGdlLlxuICAgICAgICByZXR1cm4gbGVhZGluZyA/IGludm9rZUZ1bmModGltZSkgOiByZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHJlbWFpbmluZ1dhaXQodGltZSkge1xuICAgICAgICB2YXIgdGltZVNpbmNlTGFzdENhbGwgPSB0aW1lIC0gbGFzdENhbGxUaW1lLFxuICAgICAgICAgICAgdGltZVNpbmNlTGFzdEludm9rZSA9IHRpbWUgLSBsYXN0SW52b2tlVGltZSxcbiAgICAgICAgICAgIHRpbWVXYWl0aW5nID0gd2FpdCAtIHRpbWVTaW5jZUxhc3RDYWxsO1xuXG4gICAgICAgIHJldHVybiBtYXhpbmdcbiAgICAgICAgICA/IG5hdGl2ZU1pbih0aW1lV2FpdGluZywgbWF4V2FpdCAtIHRpbWVTaW5jZUxhc3RJbnZva2UpXG4gICAgICAgICAgOiB0aW1lV2FpdGluZztcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gc2hvdWxkSW52b2tlKHRpbWUpIHtcbiAgICAgICAgdmFyIHRpbWVTaW5jZUxhc3RDYWxsID0gdGltZSAtIGxhc3RDYWxsVGltZSxcbiAgICAgICAgICAgIHRpbWVTaW5jZUxhc3RJbnZva2UgPSB0aW1lIC0gbGFzdEludm9rZVRpbWU7XG5cbiAgICAgICAgLy8gRWl0aGVyIHRoaXMgaXMgdGhlIGZpcnN0IGNhbGwsIGFjdGl2aXR5IGhhcyBzdG9wcGVkIGFuZCB3ZSdyZSBhdCB0aGVcbiAgICAgICAgLy8gdHJhaWxpbmcgZWRnZSwgdGhlIHN5c3RlbSB0aW1lIGhhcyBnb25lIGJhY2t3YXJkcyBhbmQgd2UncmUgdHJlYXRpbmdcbiAgICAgICAgLy8gaXQgYXMgdGhlIHRyYWlsaW5nIGVkZ2UsIG9yIHdlJ3ZlIGhpdCB0aGUgYG1heFdhaXRgIGxpbWl0LlxuICAgICAgICByZXR1cm4gKGxhc3RDYWxsVGltZSA9PT0gdW5kZWZpbmVkIHx8ICh0aW1lU2luY2VMYXN0Q2FsbCA+PSB3YWl0KSB8fFxuICAgICAgICAgICh0aW1lU2luY2VMYXN0Q2FsbCA8IDApIHx8IChtYXhpbmcgJiYgdGltZVNpbmNlTGFzdEludm9rZSA+PSBtYXhXYWl0KSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHRpbWVyRXhwaXJlZCgpIHtcbiAgICAgICAgdmFyIHRpbWUgPSBub3coKTtcbiAgICAgICAgaWYgKHNob3VsZEludm9rZSh0aW1lKSkge1xuICAgICAgICAgIHJldHVybiB0cmFpbGluZ0VkZ2UodGltZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmVzdGFydCB0aGUgdGltZXIuXG4gICAgICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgcmVtYWluaW5nV2FpdCh0aW1lKSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHRyYWlsaW5nRWRnZSh0aW1lKSB7XG4gICAgICAgIHRpbWVySWQgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgLy8gT25seSBpbnZva2UgaWYgd2UgaGF2ZSBgbGFzdEFyZ3NgIHdoaWNoIG1lYW5zIGBmdW5jYCBoYXMgYmVlblxuICAgICAgICAvLyBkZWJvdW5jZWQgYXQgbGVhc3Qgb25jZS5cbiAgICAgICAgaWYgKHRyYWlsaW5nICYmIGxhc3RBcmdzKSB7XG4gICAgICAgICAgcmV0dXJuIGludm9rZUZ1bmModGltZSk7XG4gICAgICAgIH1cbiAgICAgICAgbGFzdEFyZ3MgPSBsYXN0VGhpcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgICAgICBpZiAodGltZXJJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICAgICAgICB9XG4gICAgICAgIGxhc3RJbnZva2VUaW1lID0gMDtcbiAgICAgICAgbGFzdEFyZ3MgPSBsYXN0Q2FsbFRpbWUgPSBsYXN0VGhpcyA9IHRpbWVySWQgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgICAgICByZXR1cm4gdGltZXJJZCA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogdHJhaWxpbmdFZGdlKG5vdygpKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gZGVib3VuY2VkKCkge1xuICAgICAgICB2YXIgdGltZSA9IG5vdygpLFxuICAgICAgICAgICAgaXNJbnZva2luZyA9IHNob3VsZEludm9rZSh0aW1lKTtcblxuICAgICAgICBsYXN0QXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgbGFzdFRoaXMgPSB0aGlzO1xuICAgICAgICBsYXN0Q2FsbFRpbWUgPSB0aW1lO1xuXG4gICAgICAgIGlmIChpc0ludm9raW5nKSB7XG4gICAgICAgICAgaWYgKHRpbWVySWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGxlYWRpbmdFZGdlKGxhc3RDYWxsVGltZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChtYXhpbmcpIHtcbiAgICAgICAgICAgIC8vIEhhbmRsZSBpbnZvY2F0aW9ucyBpbiBhIHRpZ2h0IGxvb3AuXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXJJZCk7XG4gICAgICAgICAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHdhaXQpO1xuICAgICAgICAgICAgcmV0dXJuIGludm9rZUZ1bmMobGFzdENhbGxUaW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRpbWVySWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgd2FpdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIGRlYm91bmNlZC5jYW5jZWwgPSBjYW5jZWw7XG4gICAgICBkZWJvdW5jZWQuZmx1c2ggPSBmbHVzaDtcbiAgICAgIHJldHVybiBkZWJvdW5jZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVmZXJzIGludm9raW5nIHRoZSBgZnVuY2AgdW50aWwgdGhlIGN1cnJlbnQgY2FsbCBzdGFjayBoYXMgY2xlYXJlZC4gQW55XG4gICAgICogYWRkaXRpb25hbCBhcmd1bWVudHMgYXJlIHByb3ZpZGVkIHRvIGBmdW5jYCB3aGVuIGl0J3MgaW52b2tlZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRlZmVyLlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHRpbWVyIGlkLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmRlZmVyKGZ1bmN0aW9uKHRleHQpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKHRleHQpO1xuICAgICAqIH0sICdkZWZlcnJlZCcpO1xuICAgICAqIC8vID0+IExvZ3MgJ2RlZmVycmVkJyBhZnRlciBvbmUgbWlsbGlzZWNvbmQuXG4gICAgICovXG4gICAgdmFyIGRlZmVyID0gYmFzZVJlc3QoZnVuY3Rpb24oZnVuYywgYXJncykge1xuICAgICAgcmV0dXJuIGJhc2VEZWxheShmdW5jLCAxLCBhcmdzKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIEludm9rZXMgYGZ1bmNgIGFmdGVyIGB3YWl0YCBtaWxsaXNlY29uZHMuIEFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyBhcmVcbiAgICAgKiBwcm92aWRlZCB0byBgZnVuY2Agd2hlbiBpdCdzIGludm9rZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBkZWxheS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2FpdCBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byBkZWxheSBpbnZvY2F0aW9uLlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHRpbWVyIGlkLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmRlbGF5KGZ1bmN0aW9uKHRleHQpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKHRleHQpO1xuICAgICAqIH0sIDEwMDAsICdsYXRlcicpO1xuICAgICAqIC8vID0+IExvZ3MgJ2xhdGVyJyBhZnRlciBvbmUgc2Vjb25kLlxuICAgICAqL1xuICAgIHZhciBkZWxheSA9IGJhc2VSZXN0KGZ1bmN0aW9uKGZ1bmMsIHdhaXQsIGFyZ3MpIHtcbiAgICAgIHJldHVybiBiYXNlRGVsYXkoZnVuYywgdG9OdW1iZXIod2FpdCkgfHwgMCwgYXJncyk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGFyZ3VtZW50cyByZXZlcnNlZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGZsaXAgYXJndW1lbnRzIGZvci5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmbGlwcGVkIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgZmxpcHBlZCA9IF8uZmxpcChmdW5jdGlvbigpIHtcbiAgICAgKiAgIHJldHVybiBfLnRvQXJyYXkoYXJndW1lbnRzKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIGZsaXBwZWQoJ2EnLCAnYicsICdjJywgJ2QnKTtcbiAgICAgKiAvLyA9PiBbJ2QnLCAnYycsICdiJywgJ2EnXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZsaXAoZnVuYykge1xuICAgICAgcmV0dXJuIGNyZWF0ZVdyYXAoZnVuYywgV1JBUF9GTElQX0ZMQUcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IG1lbW9pemVzIHRoZSByZXN1bHQgb2YgYGZ1bmNgLiBJZiBgcmVzb2x2ZXJgIGlzXG4gICAgICogcHJvdmlkZWQsIGl0IGRldGVybWluZXMgdGhlIGNhY2hlIGtleSBmb3Igc3RvcmluZyB0aGUgcmVzdWx0IGJhc2VkIG9uIHRoZVxuICAgICAqIGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uIEJ5IGRlZmF1bHQsIHRoZSBmaXJzdCBhcmd1bWVudFxuICAgICAqIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbiBpcyB1c2VkIGFzIHRoZSBtYXAgY2FjaGUga2V5LiBUaGUgYGZ1bmNgXG4gICAgICogaXMgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhlIGNhY2hlIGlzIGV4cG9zZWQgYXMgdGhlIGBjYWNoZWAgcHJvcGVydHkgb24gdGhlIG1lbW9pemVkXG4gICAgICogZnVuY3Rpb24uIEl0cyBjcmVhdGlvbiBtYXkgYmUgY3VzdG9taXplZCBieSByZXBsYWNpbmcgdGhlIGBfLm1lbW9pemUuQ2FjaGVgXG4gICAgICogY29uc3RydWN0b3Igd2l0aCBvbmUgd2hvc2UgaW5zdGFuY2VzIGltcGxlbWVudCB0aGVcbiAgICAgKiBbYE1hcGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXByb3BlcnRpZXMtb2YtdGhlLW1hcC1wcm90b3R5cGUtb2JqZWN0KVxuICAgICAqIG1ldGhvZCBpbnRlcmZhY2Ugb2YgYGNsZWFyYCwgYGRlbGV0ZWAsIGBnZXRgLCBgaGFzYCwgYW5kIGBzZXRgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtyZXNvbHZlcl0gVGhlIGZ1bmN0aW9uIHRvIHJlc29sdmUgdGhlIGNhY2hlIGtleS5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIgfTtcbiAgICAgKiB2YXIgb3RoZXIgPSB7ICdjJzogMywgJ2QnOiA0IH07XG4gICAgICpcbiAgICAgKiB2YXIgdmFsdWVzID0gXy5tZW1vaXplKF8udmFsdWVzKTtcbiAgICAgKiB2YWx1ZXMob2JqZWN0KTtcbiAgICAgKiAvLyA9PiBbMSwgMl1cbiAgICAgKlxuICAgICAqIHZhbHVlcyhvdGhlcik7XG4gICAgICogLy8gPT4gWzMsIDRdXG4gICAgICpcbiAgICAgKiBvYmplY3QuYSA9IDI7XG4gICAgICogdmFsdWVzKG9iamVjdCk7XG4gICAgICogLy8gPT4gWzEsIDJdXG4gICAgICpcbiAgICAgKiAvLyBNb2RpZnkgdGhlIHJlc3VsdCBjYWNoZS5cbiAgICAgKiB2YWx1ZXMuY2FjaGUuc2V0KG9iamVjdCwgWydhJywgJ2InXSk7XG4gICAgICogdmFsdWVzKG9iamVjdCk7XG4gICAgICogLy8gPT4gWydhJywgJ2InXVxuICAgICAqXG4gICAgICogLy8gUmVwbGFjZSBgXy5tZW1vaXplLkNhY2hlYC5cbiAgICAgKiBfLm1lbW9pemUuQ2FjaGUgPSBXZWFrTWFwO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1lbW9pemUoZnVuYywgcmVzb2x2ZXIpIHtcbiAgICAgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nIHx8IChyZXNvbHZlciAhPSBudWxsICYmIHR5cGVvZiByZXNvbHZlciAhPSAnZnVuY3Rpb24nKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gICAgICB9XG4gICAgICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgICAgICBrZXkgPSByZXNvbHZlciA/IHJlc29sdmVyLmFwcGx5KHRoaXMsIGFyZ3MpIDogYXJnc1swXSxcbiAgICAgICAgICAgIGNhY2hlID0gbWVtb2l6ZWQuY2FjaGU7XG5cbiAgICAgICAgaWYgKGNhY2hlLmhhcyhrZXkpKSB7XG4gICAgICAgICAgcmV0dXJuIGNhY2hlLmdldChrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZXN1bHQgPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICBtZW1vaXplZC5jYWNoZSA9IGNhY2hlLnNldChrZXksIHJlc3VsdCkgfHwgY2FjaGU7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9O1xuICAgICAgbWVtb2l6ZWQuY2FjaGUgPSBuZXcgKG1lbW9pemUuQ2FjaGUgfHwgTWFwQ2FjaGUpO1xuICAgICAgcmV0dXJuIG1lbW9pemVkO1xuICAgIH1cblxuICAgIC8vIEV4cG9zZSBgTWFwQ2FjaGVgLlxuICAgIG1lbW9pemUuQ2FjaGUgPSBNYXBDYWNoZTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IG5lZ2F0ZXMgdGhlIHJlc3VsdCBvZiB0aGUgcHJlZGljYXRlIGBmdW5jYC4gVGhlXG4gICAgICogYGZ1bmNgIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIGFuZCBhcmd1bWVudHMgb2YgdGhlXG4gICAgICogY3JlYXRlZCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgcHJlZGljYXRlIHRvIG5lZ2F0ZS5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBuZWdhdGVkIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBpc0V2ZW4obikge1xuICAgICAqICAgcmV0dXJuIG4gJSAyID09IDA7XG4gICAgICogfVxuICAgICAqXG4gICAgICogXy5maWx0ZXIoWzEsIDIsIDMsIDQsIDUsIDZdLCBfLm5lZ2F0ZShpc0V2ZW4pKTtcbiAgICAgKiAvLyA9PiBbMSwgMywgNV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBuZWdhdGUocHJlZGljYXRlKSB7XG4gICAgICBpZiAodHlwZW9mIHByZWRpY2F0ZSAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICBjYXNlIDA6IHJldHVybiAhcHJlZGljYXRlLmNhbGwodGhpcyk7XG4gICAgICAgICAgY2FzZSAxOiByZXR1cm4gIXByZWRpY2F0ZS5jYWxsKHRoaXMsIGFyZ3NbMF0pO1xuICAgICAgICAgIGNhc2UgMjogcmV0dXJuICFwcmVkaWNhdGUuY2FsbCh0aGlzLCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiAhcHJlZGljYXRlLmNhbGwodGhpcywgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICFwcmVkaWNhdGUuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGlzIHJlc3RyaWN0ZWQgdG8gaW52b2tpbmcgYGZ1bmNgIG9uY2UuIFJlcGVhdCBjYWxsc1xuICAgICAqIHRvIHRoZSBmdW5jdGlvbiByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBpbnZvY2F0aW9uLiBUaGUgYGZ1bmNgIGlzXG4gICAgICogaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBhbmQgYXJndW1lbnRzIG9mIHRoZSBjcmVhdGVkIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcmVzdHJpY3RlZCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGluaXRpYWxpemUgPSBfLm9uY2UoY3JlYXRlQXBwbGljYXRpb24pO1xuICAgICAqIGluaXRpYWxpemUoKTtcbiAgICAgKiBpbml0aWFsaXplKCk7XG4gICAgICogLy8gPT4gYGNyZWF0ZUFwcGxpY2F0aW9uYCBpcyBpbnZva2VkIG9uY2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBvbmNlKGZ1bmMpIHtcbiAgICAgIHJldHVybiBiZWZvcmUoMiwgZnVuYyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBpdHMgYXJndW1lbnRzIHRyYW5zZm9ybWVkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAgICAgKiBAcGFyYW0gey4uLihGdW5jdGlvbnxGdW5jdGlvbltdKX0gW3RyYW5zZm9ybXM9W18uaWRlbnRpdHldXVxuICAgICAqICBUaGUgYXJndW1lbnQgdHJhbnNmb3Jtcy5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gZG91YmxlZChuKSB7XG4gICAgICogICByZXR1cm4gbiAqIDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gc3F1YXJlKG4pIHtcbiAgICAgKiAgIHJldHVybiBuICogbjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiB2YXIgZnVuYyA9IF8ub3ZlckFyZ3MoZnVuY3Rpb24oeCwgeSkge1xuICAgICAqICAgcmV0dXJuIFt4LCB5XTtcbiAgICAgKiB9LCBbc3F1YXJlLCBkb3VibGVkXSk7XG4gICAgICpcbiAgICAgKiBmdW5jKDksIDMpO1xuICAgICAqIC8vID0+IFs4MSwgNl1cbiAgICAgKlxuICAgICAqIGZ1bmMoMTAsIDUpO1xuICAgICAqIC8vID0+IFsxMDAsIDEwXVxuICAgICAqL1xuICAgIHZhciBvdmVyQXJncyA9IGNhc3RSZXN0KGZ1bmN0aW9uKGZ1bmMsIHRyYW5zZm9ybXMpIHtcbiAgICAgIHRyYW5zZm9ybXMgPSAodHJhbnNmb3Jtcy5sZW5ndGggPT0gMSAmJiBpc0FycmF5KHRyYW5zZm9ybXNbMF0pKVxuICAgICAgICA/IGFycmF5TWFwKHRyYW5zZm9ybXNbMF0sIGJhc2VVbmFyeShnZXRJdGVyYXRlZSgpKSlcbiAgICAgICAgOiBhcnJheU1hcChiYXNlRmxhdHRlbih0cmFuc2Zvcm1zLCAxKSwgYmFzZVVuYXJ5KGdldEl0ZXJhdGVlKCkpKTtcblxuICAgICAgdmFyIGZ1bmNzTGVuZ3RoID0gdHJhbnNmb3Jtcy5sZW5ndGg7XG4gICAgICByZXR1cm4gYmFzZVJlc3QoZnVuY3Rpb24oYXJncykge1xuICAgICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1pbihhcmdzLmxlbmd0aCwgZnVuY3NMZW5ndGgpO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgYXJnc1tpbmRleF0gPSB0cmFuc2Zvcm1zW2luZGV4XS5jYWxsKHRoaXMsIGFyZ3NbaW5kZXhdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXBwbHkoZnVuYywgdGhpcywgYXJncyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggYHBhcnRpYWxzYCBwcmVwZW5kZWQgdG8gdGhlXG4gICAgICogYXJndW1lbnRzIGl0IHJlY2VpdmVzLiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmJpbmRgIGV4Y2VwdCBpdCBkb2VzICoqbm90KipcbiAgICAgKiBhbHRlciB0aGUgYHRoaXNgIGJpbmRpbmcuXG4gICAgICpcbiAgICAgKiBUaGUgYF8ucGFydGlhbC5wbGFjZWhvbGRlcmAgdmFsdWUsIHdoaWNoIGRlZmF1bHRzIHRvIGBfYCBpbiBtb25vbGl0aGljXG4gICAgICogYnVpbGRzLCBtYXkgYmUgdXNlZCBhcyBhIHBsYWNlaG9sZGVyIGZvciBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgZG9lc24ndCBzZXQgdGhlIFwibGVuZ3RoXCIgcHJvcGVydHkgb2YgcGFydGlhbGx5XG4gICAgICogYXBwbGllZCBmdW5jdGlvbnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4yLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBwYXJ0aWFsbHkgYXBwbHkgYXJndW1lbnRzIHRvLlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIGJlIHBhcnRpYWxseSBhcHBsaWVkLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHBhcnRpYWxseSBhcHBsaWVkIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBncmVldChncmVldGluZywgbmFtZSkge1xuICAgICAqICAgcmV0dXJuIGdyZWV0aW5nICsgJyAnICsgbmFtZTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiB2YXIgc2F5SGVsbG9UbyA9IF8ucGFydGlhbChncmVldCwgJ2hlbGxvJyk7XG4gICAgICogc2F5SGVsbG9UbygnZnJlZCcpO1xuICAgICAqIC8vID0+ICdoZWxsbyBmcmVkJ1xuICAgICAqXG4gICAgICogLy8gUGFydGlhbGx5IGFwcGxpZWQgd2l0aCBwbGFjZWhvbGRlcnMuXG4gICAgICogdmFyIGdyZWV0RnJlZCA9IF8ucGFydGlhbChncmVldCwgXywgJ2ZyZWQnKTtcbiAgICAgKiBncmVldEZyZWQoJ2hpJyk7XG4gICAgICogLy8gPT4gJ2hpIGZyZWQnXG4gICAgICovXG4gICAgdmFyIHBhcnRpYWwgPSBiYXNlUmVzdChmdW5jdGlvbihmdW5jLCBwYXJ0aWFscykge1xuICAgICAgdmFyIGhvbGRlcnMgPSByZXBsYWNlSG9sZGVycyhwYXJ0aWFscywgZ2V0SG9sZGVyKHBhcnRpYWwpKTtcbiAgICAgIHJldHVybiBjcmVhdGVXcmFwKGZ1bmMsIFdSQVBfUEFSVElBTF9GTEFHLCB1bmRlZmluZWQsIHBhcnRpYWxzLCBob2xkZXJzKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8ucGFydGlhbGAgZXhjZXB0IHRoYXQgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzXG4gICAgICogYXJlIGFwcGVuZGVkIHRvIHRoZSBhcmd1bWVudHMgaXQgcmVjZWl2ZXMuXG4gICAgICpcbiAgICAgKiBUaGUgYF8ucGFydGlhbFJpZ2h0LnBsYWNlaG9sZGVyYCB2YWx1ZSwgd2hpY2ggZGVmYXVsdHMgdG8gYF9gIGluIG1vbm9saXRoaWNcbiAgICAgKiBidWlsZHMsIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBkb2Vzbid0IHNldCB0aGUgXCJsZW5ndGhcIiBwcm9wZXJ0eSBvZiBwYXJ0aWFsbHlcbiAgICAgKiBhcHBsaWVkIGZ1bmN0aW9ucy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAxLjAuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHBhcnRpYWxseSBhcHBseSBhcmd1bWVudHMgdG8uXG4gICAgICogQHBhcmFtIHsuLi4qfSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gYmUgcGFydGlhbGx5IGFwcGxpZWQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcGFydGlhbGx5IGFwcGxpZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGdyZWV0KGdyZWV0aW5nLCBuYW1lKSB7XG4gICAgICogICByZXR1cm4gZ3JlZXRpbmcgKyAnICcgKyBuYW1lO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciBncmVldEZyZWQgPSBfLnBhcnRpYWxSaWdodChncmVldCwgJ2ZyZWQnKTtcbiAgICAgKiBncmVldEZyZWQoJ2hpJyk7XG4gICAgICogLy8gPT4gJ2hpIGZyZWQnXG4gICAgICpcbiAgICAgKiAvLyBQYXJ0aWFsbHkgYXBwbGllZCB3aXRoIHBsYWNlaG9sZGVycy5cbiAgICAgKiB2YXIgc2F5SGVsbG9UbyA9IF8ucGFydGlhbFJpZ2h0KGdyZWV0LCAnaGVsbG8nLCBfKTtcbiAgICAgKiBzYXlIZWxsb1RvKCdmcmVkJyk7XG4gICAgICogLy8gPT4gJ2hlbGxvIGZyZWQnXG4gICAgICovXG4gICAgdmFyIHBhcnRpYWxSaWdodCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGZ1bmMsIHBhcnRpYWxzKSB7XG4gICAgICB2YXIgaG9sZGVycyA9IHJlcGxhY2VIb2xkZXJzKHBhcnRpYWxzLCBnZXRIb2xkZXIocGFydGlhbFJpZ2h0KSk7XG4gICAgICByZXR1cm4gY3JlYXRlV3JhcChmdW5jLCBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRywgdW5kZWZpbmVkLCBwYXJ0aWFscywgaG9sZGVycyk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGFyZ3VtZW50cyBhcnJhbmdlZCBhY2NvcmRpbmdcbiAgICAgKiB0byB0aGUgc3BlY2lmaWVkIGBpbmRleGVzYCB3aGVyZSB0aGUgYXJndW1lbnQgdmFsdWUgYXQgdGhlIGZpcnN0IGluZGV4IGlzXG4gICAgICogcHJvdmlkZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LCB0aGUgYXJndW1lbnQgdmFsdWUgYXQgdGhlIHNlY29uZCBpbmRleCBpc1xuICAgICAqIHByb3ZpZGVkIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQsIGFuZCBzbyBvbi5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlYXJyYW5nZSBhcmd1bWVudHMgZm9yLlxuICAgICAqIEBwYXJhbSB7Li4uKG51bWJlcnxudW1iZXJbXSl9IGluZGV4ZXMgVGhlIGFycmFuZ2VkIGFyZ3VtZW50IGluZGV4ZXMuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciByZWFyZ2VkID0gXy5yZWFyZyhmdW5jdGlvbihhLCBiLCBjKSB7XG4gICAgICogICByZXR1cm4gW2EsIGIsIGNdO1xuICAgICAqIH0sIFsyLCAwLCAxXSk7XG4gICAgICpcbiAgICAgKiByZWFyZ2VkKCdiJywgJ2MnLCAnYScpXG4gICAgICogLy8gPT4gWydhJywgJ2InLCAnYyddXG4gICAgICovXG4gICAgdmFyIHJlYXJnID0gZmxhdFJlc3QoZnVuY3Rpb24oZnVuYywgaW5kZXhlcykge1xuICAgICAgcmV0dXJuIGNyZWF0ZVdyYXAoZnVuYywgV1JBUF9SRUFSR19GTEFHLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBpbmRleGVzKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIHRoZVxuICAgICAqIGNyZWF0ZWQgZnVuY3Rpb24gYW5kIGFyZ3VtZW50cyBmcm9tIGBzdGFydGAgYW5kIGJleW9uZCBwcm92aWRlZCBhc1xuICAgICAqIGFuIGFycmF5LlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uIHRoZVxuICAgICAqIFtyZXN0IHBhcmFtZXRlcl0oaHR0cHM6Ly9tZG4uaW8vcmVzdF9wYXJhbWV0ZXJzKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgc2F5ID0gXy5yZXN0KGZ1bmN0aW9uKHdoYXQsIG5hbWVzKSB7XG4gICAgICogICByZXR1cm4gd2hhdCArICcgJyArIF8uaW5pdGlhbChuYW1lcykuam9pbignLCAnKSArXG4gICAgICogICAgIChfLnNpemUobmFtZXMpID4gMSA/ICcsICYgJyA6ICcnKSArIF8ubGFzdChuYW1lcyk7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBzYXkoJ2hlbGxvJywgJ2ZyZWQnLCAnYmFybmV5JywgJ3BlYmJsZXMnKTtcbiAgICAgKiAvLyA9PiAnaGVsbG8gZnJlZCwgYmFybmV5LCAmIHBlYmJsZXMnXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVzdChmdW5jLCBzdGFydCkge1xuICAgICAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgfVxuICAgICAgc3RhcnQgPSBzdGFydCA9PT0gdW5kZWZpbmVkID8gc3RhcnQgOiB0b0ludGVnZXIoc3RhcnQpO1xuICAgICAgcmV0dXJuIGJhc2VSZXN0KGZ1bmMsIHN0YXJ0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGVcbiAgICAgKiBjcmVhdGUgZnVuY3Rpb24gYW5kIGFuIGFycmF5IG9mIGFyZ3VtZW50cyBtdWNoIGxpa2VcbiAgICAgKiBbYEZ1bmN0aW9uI2FwcGx5YF0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSkuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgYmFzZWQgb24gdGhlXG4gICAgICogW3NwcmVhZCBvcGVyYXRvcl0oaHR0cHM6Ly9tZG4uaW8vc3ByZWFkX29wZXJhdG9yKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjIuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHNwcmVhZCBhcmd1bWVudHMgb3Zlci5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgc3ByZWFkLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgc2F5ID0gXy5zcHJlYWQoZnVuY3Rpb24od2hvLCB3aGF0KSB7XG4gICAgICogICByZXR1cm4gd2hvICsgJyBzYXlzICcgKyB3aGF0O1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogc2F5KFsnZnJlZCcsICdoZWxsbyddKTtcbiAgICAgKiAvLyA9PiAnZnJlZCBzYXlzIGhlbGxvJ1xuICAgICAqXG4gICAgICogdmFyIG51bWJlcnMgPSBQcm9taXNlLmFsbChbXG4gICAgICogICBQcm9taXNlLnJlc29sdmUoNDApLFxuICAgICAqICAgUHJvbWlzZS5yZXNvbHZlKDM2KVxuICAgICAqIF0pO1xuICAgICAqXG4gICAgICogbnVtYmVycy50aGVuKF8uc3ByZWFkKGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgKiAgIHJldHVybiB4ICsgeTtcbiAgICAgKiB9KSk7XG4gICAgICogLy8gPT4gYSBQcm9taXNlIG9mIDc2XG4gICAgICovXG4gICAgZnVuY3Rpb24gc3ByZWFkKGZ1bmMsIHN0YXJ0KSB7XG4gICAgICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gICAgICB9XG4gICAgICBzdGFydCA9IHN0YXJ0ID09IG51bGwgPyAwIDogbmF0aXZlTWF4KHRvSW50ZWdlcihzdGFydCksIDApO1xuICAgICAgcmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKGFyZ3MpIHtcbiAgICAgICAgdmFyIGFycmF5ID0gYXJnc1tzdGFydF0sXG4gICAgICAgICAgICBvdGhlckFyZ3MgPSBjYXN0U2xpY2UoYXJncywgMCwgc3RhcnQpO1xuXG4gICAgICAgIGlmIChhcnJheSkge1xuICAgICAgICAgIGFycmF5UHVzaChvdGhlckFyZ3MsIGFycmF5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXBwbHkoZnVuYywgdGhpcywgb3RoZXJBcmdzKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSB0aHJvdHRsZWQgZnVuY3Rpb24gdGhhdCBvbmx5IGludm9rZXMgYGZ1bmNgIGF0IG1vc3Qgb25jZSBwZXJcbiAgICAgKiBldmVyeSBgd2FpdGAgbWlsbGlzZWNvbmRzLiBUaGUgdGhyb3R0bGVkIGZ1bmN0aW9uIGNvbWVzIHdpdGggYSBgY2FuY2VsYFxuICAgICAqIG1ldGhvZCB0byBjYW5jZWwgZGVsYXllZCBgZnVuY2AgaW52b2NhdGlvbnMgYW5kIGEgYGZsdXNoYCBtZXRob2QgdG9cbiAgICAgKiBpbW1lZGlhdGVseSBpbnZva2UgdGhlbS4gUHJvdmlkZSBgb3B0aW9uc2AgdG8gaW5kaWNhdGUgd2hldGhlciBgZnVuY2BcbiAgICAgKiBzaG91bGQgYmUgaW52b2tlZCBvbiB0aGUgbGVhZGluZyBhbmQvb3IgdHJhaWxpbmcgZWRnZSBvZiB0aGUgYHdhaXRgXG4gICAgICogdGltZW91dC4gVGhlIGBmdW5jYCBpcyBpbnZva2VkIHdpdGggdGhlIGxhc3QgYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZVxuICAgICAqIHRocm90dGxlZCBmdW5jdGlvbi4gU3Vic2VxdWVudCBjYWxscyB0byB0aGUgdGhyb3R0bGVkIGZ1bmN0aW9uIHJldHVybiB0aGVcbiAgICAgKiByZXN1bHQgb2YgdGhlIGxhc3QgYGZ1bmNgIGludm9jYXRpb24uXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogSWYgYGxlYWRpbmdgIGFuZCBgdHJhaWxpbmdgIG9wdGlvbnMgYXJlIGB0cnVlYCwgYGZ1bmNgIGlzXG4gICAgICogaW52b2tlZCBvbiB0aGUgdHJhaWxpbmcgZWRnZSBvZiB0aGUgdGltZW91dCBvbmx5IGlmIHRoZSB0aHJvdHRsZWQgZnVuY3Rpb25cbiAgICAgKiBpcyBpbnZva2VkIG1vcmUgdGhhbiBvbmNlIGR1cmluZyB0aGUgYHdhaXRgIHRpbWVvdXQuXG4gICAgICpcbiAgICAgKiBJZiBgd2FpdGAgaXMgYDBgIGFuZCBgbGVhZGluZ2AgaXMgYGZhbHNlYCwgYGZ1bmNgIGludm9jYXRpb24gaXMgZGVmZXJyZWRcbiAgICAgKiB1bnRpbCB0byB0aGUgbmV4dCB0aWNrLCBzaW1pbGFyIHRvIGBzZXRUaW1lb3V0YCB3aXRoIGEgdGltZW91dCBvZiBgMGAuXG4gICAgICpcbiAgICAgKiBTZWUgW0RhdmlkIENvcmJhY2hvJ3MgYXJ0aWNsZV0oaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS9kZWJvdW5jaW5nLXRocm90dGxpbmctZXhwbGFpbmVkLWV4YW1wbGVzLylcbiAgICAgKiBmb3IgZGV0YWlscyBvdmVyIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGBfLnRocm90dGxlYCBhbmQgYF8uZGVib3VuY2VgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gdGhyb3R0bGUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt3YWl0PTBdIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRocm90dGxlIGludm9jYXRpb25zIHRvLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubGVhZGluZz10cnVlXVxuICAgICAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSBsZWFkaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy50cmFpbGluZz10cnVlXVxuICAgICAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHRocm90dGxlZCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gQXZvaWQgZXhjZXNzaXZlbHkgdXBkYXRpbmcgdGhlIHBvc2l0aW9uIHdoaWxlIHNjcm9sbGluZy5cbiAgICAgKiBqUXVlcnkod2luZG93KS5vbignc2Nyb2xsJywgXy50aHJvdHRsZSh1cGRhdGVQb3NpdGlvbiwgMTAwKSk7XG4gICAgICpcbiAgICAgKiAvLyBJbnZva2UgYHJlbmV3VG9rZW5gIHdoZW4gdGhlIGNsaWNrIGV2ZW50IGlzIGZpcmVkLCBidXQgbm90IG1vcmUgdGhhbiBvbmNlIGV2ZXJ5IDUgbWludXRlcy5cbiAgICAgKiB2YXIgdGhyb3R0bGVkID0gXy50aHJvdHRsZShyZW5ld1Rva2VuLCAzMDAwMDAsIHsgJ3RyYWlsaW5nJzogZmFsc2UgfSk7XG4gICAgICogalF1ZXJ5KGVsZW1lbnQpLm9uKCdjbGljaycsIHRocm90dGxlZCk7XG4gICAgICpcbiAgICAgKiAvLyBDYW5jZWwgdGhlIHRyYWlsaW5nIHRocm90dGxlZCBpbnZvY2F0aW9uLlxuICAgICAqIGpRdWVyeSh3aW5kb3cpLm9uKCdwb3BzdGF0ZScsIHRocm90dGxlZC5jYW5jZWwpO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRocm90dGxlKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBsZWFkaW5nID0gdHJ1ZSxcbiAgICAgICAgICB0cmFpbGluZyA9IHRydWU7XG5cbiAgICAgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc09iamVjdChvcHRpb25zKSkge1xuICAgICAgICBsZWFkaW5nID0gJ2xlYWRpbmcnIGluIG9wdGlvbnMgPyAhIW9wdGlvbnMubGVhZGluZyA6IGxlYWRpbmc7XG4gICAgICAgIHRyYWlsaW5nID0gJ3RyYWlsaW5nJyBpbiBvcHRpb25zID8gISFvcHRpb25zLnRyYWlsaW5nIDogdHJhaWxpbmc7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGVib3VuY2UoZnVuYywgd2FpdCwge1xuICAgICAgICAnbGVhZGluZyc6IGxlYWRpbmcsXG4gICAgICAgICdtYXhXYWl0Jzogd2FpdCxcbiAgICAgICAgJ3RyYWlsaW5nJzogdHJhaWxpbmdcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgdXAgdG8gb25lIGFyZ3VtZW50LCBpZ25vcmluZyBhbnlcbiAgICAgKiBhZGRpdGlvbmFsIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5tYXAoWyc2JywgJzgnLCAnMTAnXSwgXy51bmFyeShwYXJzZUludCkpO1xuICAgICAqIC8vID0+IFs2LCA4LCAxMF1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1bmFyeShmdW5jKSB7XG4gICAgICByZXR1cm4gYXJ5KGZ1bmMsIDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHByb3ZpZGVzIGB2YWx1ZWAgdG8gYHdyYXBwZXJgIGFzIGl0cyBmaXJzdFxuICAgICAqIGFyZ3VtZW50LiBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlIGZ1bmN0aW9uIGFyZSBhcHBlbmRlZFxuICAgICAqIHRvIHRob3NlIHByb3ZpZGVkIHRvIHRoZSBgd3JhcHBlcmAuIFRoZSB3cmFwcGVyIGlzIGludm9rZWQgd2l0aCB0aGUgYHRoaXNgXG4gICAgICogYmluZGluZyBvZiB0aGUgY3JlYXRlZCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyYXAuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3dyYXBwZXI9aWRlbnRpdHldIFRoZSB3cmFwcGVyIGZ1bmN0aW9uLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgcCA9IF8ud3JhcChfLmVzY2FwZSwgZnVuY3Rpb24oZnVuYywgdGV4dCkge1xuICAgICAqICAgcmV0dXJuICc8cD4nICsgZnVuYyh0ZXh0KSArICc8L3A+JztcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIHAoJ2ZyZWQsIGJhcm5leSwgJiBwZWJibGVzJyk7XG4gICAgICogLy8gPT4gJzxwPmZyZWQsIGJhcm5leSwgJmFtcDsgcGViYmxlczwvcD4nXG4gICAgICovXG4gICAgZnVuY3Rpb24gd3JhcCh2YWx1ZSwgd3JhcHBlcikge1xuICAgICAgcmV0dXJuIHBhcnRpYWwoY2FzdEZ1bmN0aW9uKHdyYXBwZXIpLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ2FzdHMgYHZhbHVlYCBhcyBhbiBhcnJheSBpZiBpdCdzIG5vdCBvbmUuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC40LjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjYXN0IGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmNhc3RBcnJheSgxKTtcbiAgICAgKiAvLyA9PiBbMV1cbiAgICAgKlxuICAgICAqIF8uY2FzdEFycmF5KHsgJ2EnOiAxIH0pO1xuICAgICAqIC8vID0+IFt7ICdhJzogMSB9XVxuICAgICAqXG4gICAgICogXy5jYXN0QXJyYXkoJ2FiYycpO1xuICAgICAqIC8vID0+IFsnYWJjJ11cbiAgICAgKlxuICAgICAqIF8uY2FzdEFycmF5KG51bGwpO1xuICAgICAqIC8vID0+IFtudWxsXVxuICAgICAqXG4gICAgICogXy5jYXN0QXJyYXkodW5kZWZpbmVkKTtcbiAgICAgKiAvLyA9PiBbdW5kZWZpbmVkXVxuICAgICAqXG4gICAgICogXy5jYXN0QXJyYXkoKTtcbiAgICAgKiAvLyA9PiBbXVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gWzEsIDIsIDNdO1xuICAgICAqIGNvbnNvbGUubG9nKF8uY2FzdEFycmF5KGFycmF5KSA9PT0gYXJyYXkpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjYXN0QXJyYXkoKSB7XG4gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgdmFyIHZhbHVlID0gYXJndW1lbnRzWzBdO1xuICAgICAgcmV0dXJuIGlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzaGFsbG93IGNsb25lIG9mIGB2YWx1ZWAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvbiB0aGVcbiAgICAgKiBbc3RydWN0dXJlZCBjbG9uZSBhbGdvcml0aG1dKGh0dHBzOi8vbWRuLmlvL1N0cnVjdHVyZWRfY2xvbmVfYWxnb3JpdGhtKVxuICAgICAqIGFuZCBzdXBwb3J0cyBjbG9uaW5nIGFycmF5cywgYXJyYXkgYnVmZmVycywgYm9vbGVhbnMsIGRhdGUgb2JqZWN0cywgbWFwcyxcbiAgICAgKiBudW1iZXJzLCBgT2JqZWN0YCBvYmplY3RzLCByZWdleGVzLCBzZXRzLCBzdHJpbmdzLCBzeW1ib2xzLCBhbmQgdHlwZWRcbiAgICAgKiBhcnJheXMuIFRoZSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0aWVzIG9mIGBhcmd1bWVudHNgIG9iamVjdHMgYXJlIGNsb25lZFxuICAgICAqIGFzIHBsYWluIG9iamVjdHMuIEFuIGVtcHR5IG9iamVjdCBpcyByZXR1cm5lZCBmb3IgdW5jbG9uZWFibGUgdmFsdWVzIHN1Y2hcbiAgICAgKiBhcyBlcnJvciBvYmplY3RzLCBmdW5jdGlvbnMsIERPTSBub2RlcywgYW5kIFdlYWtNYXBzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjbG9uZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgY2xvbmVkIHZhbHVlLlxuICAgICAqIEBzZWUgXy5jbG9uZURlZXBcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBbeyAnYSc6IDEgfSwgeyAnYic6IDIgfV07XG4gICAgICpcbiAgICAgKiB2YXIgc2hhbGxvdyA9IF8uY2xvbmUob2JqZWN0cyk7XG4gICAgICogY29uc29sZS5sb2coc2hhbGxvd1swXSA9PT0gb2JqZWN0c1swXSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNsb25lKHZhbHVlKSB7XG4gICAgICByZXR1cm4gYmFzZUNsb25lKHZhbHVlLCBDTE9ORV9TWU1CT0xTX0ZMQUcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uY2xvbmVgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGN1c3RvbWl6ZXJgIHdoaWNoXG4gICAgICogaXMgaW52b2tlZCB0byBwcm9kdWNlIHRoZSBjbG9uZWQgdmFsdWUuIElmIGBjdXN0b21pemVyYCByZXR1cm5zIGB1bmRlZmluZWRgLFxuICAgICAqIGNsb25pbmcgaXMgaGFuZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmAgaXMgaW52b2tlZCB3aXRoXG4gICAgICogdXAgdG8gZm91ciBhcmd1bWVudHM7ICh2YWx1ZSBbLCBpbmRleHxrZXksIG9iamVjdCwgc3RhY2tdKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2xvbmUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY2xvbmluZy5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgY2xvbmVkIHZhbHVlLlxuICAgICAqIEBzZWUgXy5jbG9uZURlZXBXaXRoXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGN1c3RvbWl6ZXIodmFsdWUpIHtcbiAgICAgKiAgIGlmIChfLmlzRWxlbWVudCh2YWx1ZSkpIHtcbiAgICAgKiAgICAgcmV0dXJuIHZhbHVlLmNsb25lTm9kZShmYWxzZSk7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogdmFyIGVsID0gXy5jbG9uZVdpdGgoZG9jdW1lbnQuYm9keSwgY3VzdG9taXplcik7XG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhlbCA9PT0gZG9jdW1lbnQuYm9keSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKiBjb25zb2xlLmxvZyhlbC5ub2RlTmFtZSk7XG4gICAgICogLy8gPT4gJ0JPRFknXG4gICAgICogY29uc29sZS5sb2coZWwuY2hpbGROb2Rlcy5sZW5ndGgpO1xuICAgICAqIC8vID0+IDBcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbG9uZVdpdGgodmFsdWUsIGN1c3RvbWl6ZXIpIHtcbiAgICAgIGN1c3RvbWl6ZXIgPSB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nID8gY3VzdG9taXplciA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBiYXNlQ2xvbmUodmFsdWUsIENMT05FX1NZTUJPTFNfRkxBRywgY3VzdG9taXplcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5jbG9uZWAgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgY2xvbmVzIGB2YWx1ZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMS4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHJlY3Vyc2l2ZWx5IGNsb25lLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBkZWVwIGNsb25lZCB2YWx1ZS5cbiAgICAgKiBAc2VlIF8uY2xvbmVcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBbeyAnYSc6IDEgfSwgeyAnYic6IDIgfV07XG4gICAgICpcbiAgICAgKiB2YXIgZGVlcCA9IF8uY2xvbmVEZWVwKG9iamVjdHMpO1xuICAgICAqIGNvbnNvbGUubG9nKGRlZXBbMF0gPT09IG9iamVjdHNbMF0pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2xvbmVEZWVwKHZhbHVlKSB7XG4gICAgICByZXR1cm4gYmFzZUNsb25lKHZhbHVlLCBDTE9ORV9ERUVQX0ZMQUcgfCBDTE9ORV9TWU1CT0xTX0ZMQUcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uY2xvbmVXaXRoYCBleGNlcHQgdGhhdCBpdCByZWN1cnNpdmVseSBjbG9uZXMgYHZhbHVlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcmVjdXJzaXZlbHkgY2xvbmUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY2xvbmluZy5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZGVlcCBjbG9uZWQgdmFsdWUuXG4gICAgICogQHNlZSBfLmNsb25lV2l0aFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBjdXN0b21pemVyKHZhbHVlKSB7XG4gICAgICogICBpZiAoXy5pc0VsZW1lbnQodmFsdWUpKSB7XG4gICAgICogICAgIHJldHVybiB2YWx1ZS5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogdmFyIGVsID0gXy5jbG9uZURlZXBXaXRoKGRvY3VtZW50LmJvZHksIGN1c3RvbWl6ZXIpO1xuICAgICAqXG4gICAgICogY29uc29sZS5sb2coZWwgPT09IGRvY3VtZW50LmJvZHkpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICogY29uc29sZS5sb2coZWwubm9kZU5hbWUpO1xuICAgICAqIC8vID0+ICdCT0RZJ1xuICAgICAqIGNvbnNvbGUubG9nKGVsLmNoaWxkTm9kZXMubGVuZ3RoKTtcbiAgICAgKiAvLyA9PiAyMFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNsb25lRGVlcFdpdGgodmFsdWUsIGN1c3RvbWl6ZXIpIHtcbiAgICAgIGN1c3RvbWl6ZXIgPSB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nID8gY3VzdG9taXplciA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBiYXNlQ2xvbmUodmFsdWUsIENMT05FX0RFRVBfRkxBRyB8IENMT05FX1NZTUJPTFNfRkxBRywgY3VzdG9taXplcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGBvYmplY3RgIGNvbmZvcm1zIHRvIGBzb3VyY2VgIGJ5IGludm9raW5nIHRoZSBwcmVkaWNhdGVcbiAgICAgKiBwcm9wZXJ0aWVzIG9mIGBzb3VyY2VgIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgdmFsdWVzIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGVxdWl2YWxlbnQgdG8gYF8uY29uZm9ybXNgIHdoZW4gYHNvdXJjZWAgaXNcbiAgICAgKiBwYXJ0aWFsbHkgYXBwbGllZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjE0LjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSBwcmVkaWNhdGVzIHRvIGNvbmZvcm0gdG8uXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBvYmplY3RgIGNvbmZvcm1zLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyIH07XG4gICAgICpcbiAgICAgKiBfLmNvbmZvcm1zVG8ob2JqZWN0LCB7ICdiJzogZnVuY3Rpb24obikgeyByZXR1cm4gbiA+IDE7IH0gfSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5jb25mb3Jtc1RvKG9iamVjdCwgeyAnYic6IGZ1bmN0aW9uKG4pIHsgcmV0dXJuIG4gPiAyOyB9IH0pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29uZm9ybXNUbyhvYmplY3QsIHNvdXJjZSkge1xuICAgICAgcmV0dXJuIHNvdXJjZSA9PSBudWxsIHx8IGJhc2VDb25mb3Jtc1RvKG9iamVjdCwgc291cmNlLCBrZXlzKHNvdXJjZSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm1zIGFcbiAgICAgKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICAgICAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gICAgICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAgICAgKlxuICAgICAqIF8uZXEob2JqZWN0LCBvYmplY3QpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uZXEob2JqZWN0LCBvdGhlcik7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uZXEoJ2EnLCAnYScpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uZXEoJ2EnLCBPYmplY3QoJ2EnKSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uZXEoTmFOLCBOYU4pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlcSh2YWx1ZSwgb3RoZXIpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gb3RoZXIgfHwgKHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGdyZWF0ZXIgdGhhbiBgb3RoZXJgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuOS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZ3JlYXRlciB0aGFuIGBvdGhlcmAsXG4gICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAc2VlIF8ubHRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5ndCgzLCAxKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmd0KDMsIDMpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmd0KDEsIDMpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgdmFyIGd0ID0gY3JlYXRlUmVsYXRpb25hbE9wZXJhdGlvbihiYXNlR3QpO1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGBvdGhlcmAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy45LjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG9cbiAgICAgKiAgYG90aGVyYCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBzZWUgXy5sdGVcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5ndGUoMywgMSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5ndGUoMywgMyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5ndGUoMSwgMyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICB2YXIgZ3RlID0gY3JlYXRlUmVsYXRpb25hbE9wZXJhdGlvbihmdW5jdGlvbih2YWx1ZSwgb3RoZXIpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA+PSBvdGhlcjtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhbiBgYXJndW1lbnRzYCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIHZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCAnY2FsbGVlJykgJiZcbiAgICAgICAgIXByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodmFsdWUsICdjYWxsZWUnKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5KFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzQXJyYXkoJ2FiYycpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzQXJyYXkoXy5ub29wKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIHZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5QnVmZmVyYCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4zLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5IGJ1ZmZlciwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzQXJyYXlCdWZmZXIobmV3IEFycmF5QnVmZmVyKDIpKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzQXJyYXlCdWZmZXIobmV3IEFycmF5KDIpKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIHZhciBpc0FycmF5QnVmZmVyID0gbm9kZUlzQXJyYXlCdWZmZXIgPyBiYXNlVW5hcnkobm9kZUlzQXJyYXlCdWZmZXIpIDogYmFzZUlzQXJyYXlCdWZmZXI7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLiBBIHZhbHVlIGlzIGNvbnNpZGVyZWQgYXJyYXktbGlrZSBpZiBpdCdzXG4gICAgICogbm90IGEgZnVuY3Rpb24gYW5kIGhhcyBhIGB2YWx1ZS5sZW5ndGhgIHRoYXQncyBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBvclxuICAgICAqIGVxdWFsIHRvIGAwYCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUmAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5TGlrZShbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNBcnJheUxpa2UoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5TGlrZSgnYWJjJyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5TGlrZShfLm5vb3ApO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgIWlzRnVuY3Rpb24odmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaXNBcnJheUxpa2VgIGV4Y2VwdCB0aGF0IGl0IGFsc28gY2hlY2tzIGlmIGB2YWx1ZWBcbiAgICAgKiBpcyBhbiBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LWxpa2Ugb2JqZWN0LFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNBcnJheUxpa2VPYmplY3QoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzQXJyYXlMaWtlT2JqZWN0KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNBcnJheUxpa2VPYmplY3QoJ2FiYycpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzQXJyYXlMaWtlT2JqZWN0KF8ubm9vcCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0FycmF5TGlrZU9iamVjdCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaXNBcnJheUxpa2UodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBib29sZWFuIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYm9vbGVhbiwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzQm9vbGVhbihmYWxzZSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0Jvb2xlYW4obnVsbCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0Jvb2xlYW4odmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gZmFsc2UgfHxcbiAgICAgICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gYm9vbFRhZyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4zLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICB2YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBzdHViRmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYERhdGVgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBkYXRlIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzRGF0ZShuZXcgRGF0ZSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0RhdGUoJ01vbiBBcHJpbCAyMyAyMDEyJyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICB2YXIgaXNEYXRlID0gbm9kZUlzRGF0ZSA/IGJhc2VVbmFyeShub2RlSXNEYXRlKSA6IGJhc2VJc0RhdGU7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYSBET00gZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBET00gZWxlbWVudCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzRWxlbWVudChkb2N1bWVudC5ib2R5KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzRWxlbWVudCgnPGJvZHk+Jyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0VsZW1lbnQodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIHZhbHVlLm5vZGVUeXBlID09PSAxICYmICFpc1BsYWluT2JqZWN0KHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhbiBlbXB0eSBvYmplY3QsIGNvbGxlY3Rpb24sIG1hcCwgb3Igc2V0LlxuICAgICAqXG4gICAgICogT2JqZWN0cyBhcmUgY29uc2lkZXJlZCBlbXB0eSBpZiB0aGV5IGhhdmUgbm8gb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkXG4gICAgICogcHJvcGVydGllcy5cbiAgICAgKlxuICAgICAqIEFycmF5LWxpa2UgdmFsdWVzIHN1Y2ggYXMgYGFyZ3VtZW50c2Agb2JqZWN0cywgYXJyYXlzLCBidWZmZXJzLCBzdHJpbmdzLCBvclxuICAgICAqIGpRdWVyeS1saWtlIGNvbGxlY3Rpb25zIGFyZSBjb25zaWRlcmVkIGVtcHR5IGlmIHRoZXkgaGF2ZSBhIGBsZW5ndGhgIG9mIGAwYC5cbiAgICAgKiBTaW1pbGFybHksIG1hcHMgYW5kIHNldHMgYXJlIGNvbnNpZGVyZWQgZW1wdHkgaWYgdGhleSBoYXZlIGEgYHNpemVgIG9mIGAwYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZW1wdHksIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0VtcHR5KG51bGwpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNFbXB0eSh0cnVlKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzRW1wdHkoMSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0VtcHR5KFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaXNFbXB0eSh7ICdhJzogMSB9KTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzRW1wdHkodmFsdWUpIHtcbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGlzQXJyYXlMaWtlKHZhbHVlKSAmJlxuICAgICAgICAgIChpc0FycmF5KHZhbHVlKSB8fCB0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbHVlLnNwbGljZSA9PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgICAgICBpc0J1ZmZlcih2YWx1ZSkgfHwgaXNUeXBlZEFycmF5KHZhbHVlKSB8fCBpc0FyZ3VtZW50cyh2YWx1ZSkpKSB7XG4gICAgICAgIHJldHVybiAhdmFsdWUubGVuZ3RoO1xuICAgICAgfVxuICAgICAgdmFyIHRhZyA9IGdldFRhZyh2YWx1ZSk7XG4gICAgICBpZiAodGFnID09IG1hcFRhZyB8fCB0YWcgPT0gc2V0VGFnKSB7XG4gICAgICAgIHJldHVybiAhdmFsdWUuc2l6ZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1Byb3RvdHlwZSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuICFiYXNlS2V5cyh2YWx1ZSkubGVuZ3RoO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQZXJmb3JtcyBhIGRlZXAgY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlXG4gICAgICogZXF1aXZhbGVudC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBzdXBwb3J0cyBjb21wYXJpbmcgYXJyYXlzLCBhcnJheSBidWZmZXJzLCBib29sZWFucyxcbiAgICAgKiBkYXRlIG9iamVjdHMsIGVycm9yIG9iamVjdHMsIG1hcHMsIG51bWJlcnMsIGBPYmplY3RgIG9iamVjdHMsIHJlZ2V4ZXMsXG4gICAgICogc2V0cywgc3RyaW5ncywgc3ltYm9scywgYW5kIHR5cGVkIGFycmF5cy4gYE9iamVjdGAgb2JqZWN0cyBhcmUgY29tcGFyZWRcbiAgICAgKiBieSB0aGVpciBvd24sIG5vdCBpbmhlcml0ZWQsIGVudW1lcmFibGUgcHJvcGVydGllcy4gRnVuY3Rpb25zIGFuZCBET01cbiAgICAgKiBub2RlcyBhcmUgY29tcGFyZWQgYnkgc3RyaWN0IGVxdWFsaXR5LCBpLmUuIGA9PT1gLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gICAgICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAgICAgKlxuICAgICAqIF8uaXNFcXVhbChvYmplY3QsIG90aGVyKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBvYmplY3QgPT09IG90aGVyO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNFcXVhbCh2YWx1ZSwgb3RoZXIpIHtcbiAgICAgIHJldHVybiBiYXNlSXNFcXVhbCh2YWx1ZSwgb3RoZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaXNFcXVhbGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmAgd2hpY2hcbiAgICAgKiBpcyBpbnZva2VkIHRvIGNvbXBhcmUgdmFsdWVzLiBJZiBgY3VzdG9taXplcmAgcmV0dXJucyBgdW5kZWZpbmVkYCwgY29tcGFyaXNvbnNcbiAgICAgKiBhcmUgaGFuZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmAgaXMgaW52b2tlZCB3aXRoIHVwIHRvXG4gICAgICogc2l4IGFyZ3VtZW50czogKG9ialZhbHVlLCBvdGhWYWx1ZSBbLCBpbmRleHxrZXksIG9iamVjdCwgb3RoZXIsIHN0YWNrXSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBpc0dyZWV0aW5nKHZhbHVlKSB7XG4gICAgICogICByZXR1cm4gL15oKD86aXxlbGxvKSQvLnRlc3QodmFsdWUpO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGN1c3RvbWl6ZXIob2JqVmFsdWUsIG90aFZhbHVlKSB7XG4gICAgICogICBpZiAoaXNHcmVldGluZyhvYmpWYWx1ZSkgJiYgaXNHcmVldGluZyhvdGhWYWx1ZSkpIHtcbiAgICAgKiAgICAgcmV0dXJuIHRydWU7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gWydoZWxsbycsICdnb29kYnllJ107XG4gICAgICogdmFyIG90aGVyID0gWydoaScsICdnb29kYnllJ107XG4gICAgICpcbiAgICAgKiBfLmlzRXF1YWxXaXRoKGFycmF5LCBvdGhlciwgY3VzdG9taXplcik7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzRXF1YWxXaXRoKHZhbHVlLCBvdGhlciwgY3VzdG9taXplcikge1xuICAgICAgY3VzdG9taXplciA9IHR5cGVvZiBjdXN0b21pemVyID09ICdmdW5jdGlvbicgPyBjdXN0b21pemVyIDogdW5kZWZpbmVkO1xuICAgICAgdmFyIHJlc3VsdCA9IGN1c3RvbWl6ZXIgPyBjdXN0b21pemVyKHZhbHVlLCBvdGhlcikgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQgPyBiYXNlSXNFcXVhbCh2YWx1ZSwgb3RoZXIsIHVuZGVmaW5lZCwgY3VzdG9taXplcikgOiAhIXJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhbiBgRXJyb3JgLCBgRXZhbEVycm9yYCwgYFJhbmdlRXJyb3JgLCBgUmVmZXJlbmNlRXJyb3JgLFxuICAgICAqIGBTeW50YXhFcnJvcmAsIGBUeXBlRXJyb3JgLCBvciBgVVJJRXJyb3JgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gZXJyb3Igb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNFcnJvcihuZXcgRXJyb3IpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNFcnJvcihFcnJvcik7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0Vycm9yKHZhbHVlKSB7XG4gICAgICBpZiAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdmFyIHRhZyA9IGJhc2VHZXRUYWcodmFsdWUpO1xuICAgICAgcmV0dXJuIHRhZyA9PSBlcnJvclRhZyB8fCB0YWcgPT0gZG9tRXhjVGFnIHx8XG4gICAgICAgICh0eXBlb2YgdmFsdWUubWVzc2FnZSA9PSAnc3RyaW5nJyAmJiB0eXBlb2YgdmFsdWUubmFtZSA9PSAnc3RyaW5nJyAmJiAhaXNQbGFpbk9iamVjdCh2YWx1ZSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgZmluaXRlIHByaW1pdGl2ZSBudW1iZXIuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgYmFzZWQgb25cbiAgICAgKiBbYE51bWJlci5pc0Zpbml0ZWBdKGh0dHBzOi8vbWRuLmlvL051bWJlci9pc0Zpbml0ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZmluaXRlIG51bWJlciwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzRmluaXRlKDMpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNGaW5pdGUoTnVtYmVyLk1JTl9WQUxVRSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0Zpbml0ZShJbmZpbml0eSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaXNGaW5pdGUoJzMnKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzRmluaXRlKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmIG5hdGl2ZUlzRmluaXRlKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZnVuY3Rpb24sIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0Z1bmN0aW9uKF8pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNGdW5jdGlvbigvYWJjLyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gICAgICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgICAgIC8vIGluIFNhZmFyaSA5IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5cyBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxuICAgICAgdmFyIHRhZyA9IGJhc2VHZXRUYWcodmFsdWUpO1xuICAgICAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWcgfHwgdGFnID09IGFzeW5jVGFnIHx8IHRhZyA9PSBwcm94eVRhZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhbiBpbnRlZ2VyLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uXG4gICAgICogW2BOdW1iZXIuaXNJbnRlZ2VyYF0oaHR0cHM6Ly9tZG4uaW8vTnVtYmVyL2lzSW50ZWdlcikuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGludGVnZXIsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0ludGVnZXIoMyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0ludGVnZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaXNJbnRlZ2VyKEluZmluaXR5KTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc0ludGVnZXIoJzMnKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzSW50ZWdlcih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJiB2YWx1ZSA9PSB0b0ludGVnZXIodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBsZW5ndGguXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvblxuICAgICAqIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2xlbmd0aCkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgbGVuZ3RoLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNMZW5ndGgoMyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0xlbmd0aChOdW1iZXIuTUlOX1ZBTFVFKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc0xlbmd0aChJbmZpbml0eSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaXNMZW5ndGgoJzMnKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmXG4gICAgICAgIHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAgICAgKiBbbGFuZ3VhZ2UgdHlwZV0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMpXG4gICAgICogb2YgYE9iamVjdGAuIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc09iamVjdCh7fSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzT2JqZWN0KG51bGwpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgICAgIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICAgICAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZS4gQSB2YWx1ZSBpcyBvYmplY3QtbGlrZSBpZiBpdCdzIG5vdCBgbnVsbGBcbiAgICAgKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBNYXBgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjMuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBtYXAsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc01hcChuZXcgTWFwKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzTWFwKG5ldyBXZWFrTWFwKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIHZhciBpc01hcCA9IG5vZGVJc01hcCA/IGJhc2VVbmFyeShub2RlSXNNYXApIDogYmFzZUlzTWFwO1xuXG4gICAgLyoqXG4gICAgICogUGVyZm9ybXMgYSBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbiBiZXR3ZWVuIGBvYmplY3RgIGFuZCBgc291cmNlYCB0b1xuICAgICAqIGRldGVybWluZSBpZiBgb2JqZWN0YCBjb250YWlucyBlcXVpdmFsZW50IHByb3BlcnR5IHZhbHVlcy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBlcXVpdmFsZW50IHRvIGBfLm1hdGNoZXNgIHdoZW4gYHNvdXJjZWAgaXNcbiAgICAgKiBwYXJ0aWFsbHkgYXBwbGllZC5cbiAgICAgKlxuICAgICAqIFBhcnRpYWwgY29tcGFyaXNvbnMgd2lsbCBtYXRjaCBlbXB0eSBhcnJheSBhbmQgZW1wdHkgb2JqZWN0IGBzb3VyY2VgXG4gICAgICogdmFsdWVzIGFnYWluc3QgYW55IGFycmF5IG9yIG9iamVjdCB2YWx1ZSwgcmVzcGVjdGl2ZWx5LiBTZWUgYF8uaXNFcXVhbGBcbiAgICAgKiBmb3IgYSBsaXN0IG9mIHN1cHBvcnRlZCB2YWx1ZSBjb21wYXJpc29ucy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYG9iamVjdGAgaXMgYSBtYXRjaCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogMiB9O1xuICAgICAqXG4gICAgICogXy5pc01hdGNoKG9iamVjdCwgeyAnYic6IDIgfSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc01hdGNoKG9iamVjdCwgeyAnYic6IDEgfSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc01hdGNoKG9iamVjdCwgc291cmNlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ID09PSBzb3VyY2UgfHwgYmFzZUlzTWF0Y2gob2JqZWN0LCBzb3VyY2UsIGdldE1hdGNoRGF0YShzb3VyY2UpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmlzTWF0Y2hgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGN1c3RvbWl6ZXJgIHdoaWNoXG4gICAgICogaXMgaW52b2tlZCB0byBjb21wYXJlIHZhbHVlcy4gSWYgYGN1c3RvbWl6ZXJgIHJldHVybnMgYHVuZGVmaW5lZGAsIGNvbXBhcmlzb25zXG4gICAgICogYXJlIGhhbmRsZWQgYnkgdGhlIG1ldGhvZCBpbnN0ZWFkLiBUaGUgYGN1c3RvbWl6ZXJgIGlzIGludm9rZWQgd2l0aCBmaXZlXG4gICAgICogYXJndW1lbnRzOiAob2JqVmFsdWUsIHNyY1ZhbHVlLCBpbmRleHxrZXksIG9iamVjdCwgc291cmNlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYG9iamVjdGAgaXMgYSBtYXRjaCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBpc0dyZWV0aW5nKHZhbHVlKSB7XG4gICAgICogICByZXR1cm4gL15oKD86aXxlbGxvKSQvLnRlc3QodmFsdWUpO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlKSB7XG4gICAgICogICBpZiAoaXNHcmVldGluZyhvYmpWYWx1ZSkgJiYgaXNHcmVldGluZyhzcmNWYWx1ZSkpIHtcbiAgICAgKiAgICAgcmV0dXJuIHRydWU7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2dyZWV0aW5nJzogJ2hlbGxvJyB9O1xuICAgICAqIHZhciBzb3VyY2UgPSB7ICdncmVldGluZyc6ICdoaScgfTtcbiAgICAgKlxuICAgICAqIF8uaXNNYXRjaFdpdGgob2JqZWN0LCBzb3VyY2UsIGN1c3RvbWl6ZXIpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc01hdGNoV2l0aChvYmplY3QsIHNvdXJjZSwgY3VzdG9taXplcikge1xuICAgICAgY3VzdG9taXplciA9IHR5cGVvZiBjdXN0b21pemVyID09ICdmdW5jdGlvbicgPyBjdXN0b21pemVyIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIGJhc2VJc01hdGNoKG9iamVjdCwgc291cmNlLCBnZXRNYXRjaERhdGEoc291cmNlKSwgY3VzdG9taXplcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYE5hTmAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgYmFzZWQgb25cbiAgICAgKiBbYE51bWJlci5pc05hTmBdKGh0dHBzOi8vbWRuLmlvL051bWJlci9pc05hTikgYW5kIGlzIG5vdCB0aGUgc2FtZSBhc1xuICAgICAqIGdsb2JhbCBbYGlzTmFOYF0oaHR0cHM6Ly9tZG4uaW8vaXNOYU4pIHdoaWNoIHJldHVybnMgYHRydWVgIGZvclxuICAgICAqIGB1bmRlZmluZWRgIGFuZCBvdGhlciBub24tbnVtYmVyIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYE5hTmAsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc05hTihOYU4pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNOYU4obmV3IE51bWJlcihOYU4pKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBpc05hTih1bmRlZmluZWQpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNOYU4odW5kZWZpbmVkKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzTmFOKHZhbHVlKSB7XG4gICAgICAvLyBBbiBgTmFOYCBwcmltaXRpdmUgaXMgdGhlIG9ubHkgdmFsdWUgdGhhdCBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLlxuICAgICAgLy8gUGVyZm9ybSB0aGUgYHRvU3RyaW5nVGFnYCBjaGVjayBmaXJzdCB0byBhdm9pZCBlcnJvcnMgd2l0aCBzb21lXG4gICAgICAvLyBBY3RpdmVYIG9iamVjdHMgaW4gSUUuXG4gICAgICByZXR1cm4gaXNOdW1iZXIodmFsdWUpICYmIHZhbHVlICE9ICt2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHByaXN0aW5lIG5hdGl2ZSBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBjYW4ndCByZWxpYWJseSBkZXRlY3QgbmF0aXZlIGZ1bmN0aW9ucyBpbiB0aGUgcHJlc2VuY2VcbiAgICAgKiBvZiB0aGUgY29yZS1qcyBwYWNrYWdlIGJlY2F1c2UgY29yZS1qcyBjaXJjdW12ZW50cyB0aGlzIGtpbmQgb2YgZGV0ZWN0aW9uLlxuICAgICAqIERlc3BpdGUgbXVsdGlwbGUgcmVxdWVzdHMsIHRoZSBjb3JlLWpzIG1haW50YWluZXIgaGFzIG1hZGUgaXQgY2xlYXI6IGFueVxuICAgICAqIGF0dGVtcHQgdG8gZml4IHRoZSBkZXRlY3Rpb24gd2lsbCBiZSBvYnN0cnVjdGVkLiBBcyBhIHJlc3VsdCwgd2UncmUgbGVmdFxuICAgICAqIHdpdGggbGl0dGxlIGNob2ljZSBidXQgdG8gdGhyb3cgYW4gZXJyb3IuIFVuZm9ydHVuYXRlbHksIHRoaXMgYWxzbyBhZmZlY3RzXG4gICAgICogcGFja2FnZXMsIGxpa2UgW2JhYmVsLXBvbHlmaWxsXShodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9iYWJlbC1wb2x5ZmlsbCksXG4gICAgICogd2hpY2ggcmVseSBvbiBjb3JlLWpzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG5hdGl2ZSBmdW5jdGlvbixcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzTmF0aXZlKEFycmF5LnByb3RvdHlwZS5wdXNoKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzTmF0aXZlKF8pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNOYXRpdmUodmFsdWUpIHtcbiAgICAgIGlmIChpc01hc2thYmxlKHZhbHVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoQ09SRV9FUlJPUl9URVhUKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlSXNOYXRpdmUodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGBudWxsYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYG51bGxgLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNOdWxsKG51bGwpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNOdWxsKHZvaWQgMCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc051bGwodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBgbnVsbGAgb3IgYHVuZGVmaW5lZGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG51bGxpc2gsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc05pbChudWxsKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzTmlsKHZvaWQgMCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc05pbChOYU4pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNOaWwodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA9PSBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgTnVtYmVyYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRvIGV4Y2x1ZGUgYEluZmluaXR5YCwgYC1JbmZpbml0eWAsIGFuZCBgTmFOYCwgd2hpY2ggYXJlXG4gICAgICogY2xhc3NpZmllZCBhcyBudW1iZXJzLCB1c2UgdGhlIGBfLmlzRmluaXRlYCBtZXRob2QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbnVtYmVyLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNOdW1iZXIoMyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc051bWJlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzTnVtYmVyKEluZmluaXR5KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzTnVtYmVyKCczJyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc051bWJlcih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyB8fFxuICAgICAgICAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBudW1iZXJUYWcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCB0aGF0IGlzLCBhbiBvYmplY3QgY3JlYXRlZCBieSB0aGVcbiAgICAgKiBgT2JqZWN0YCBjb25zdHJ1Y3RvciBvciBvbmUgd2l0aCBhIGBbW1Byb3RvdHlwZV1dYCBvZiBgbnVsbGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC44LjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYSA9IDE7XG4gICAgICogfVxuICAgICAqXG4gICAgICogXy5pc1BsYWluT2JqZWN0KG5ldyBGb28pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzUGxhaW5PYmplY3QoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc1BsYWluT2JqZWN0KHsgJ3gnOiAwLCAneSc6IDAgfSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc1BsYWluT2JqZWN0KE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gICAgICBpZiAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgfHwgYmFzZUdldFRhZyh2YWx1ZSkgIT0gb2JqZWN0VGFnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHZhciBwcm90byA9IGdldFByb3RvdHlwZSh2YWx1ZSk7XG4gICAgICBpZiAocHJvdG8gPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICB2YXIgQ3RvciA9IGhhc093blByb3BlcnR5LmNhbGwocHJvdG8sICdjb25zdHJ1Y3RvcicpICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuICAgICAgcmV0dXJuIHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiZcbiAgICAgICAgZnVuY1RvU3RyaW5nLmNhbGwoQ3RvcikgPT0gb2JqZWN0Q3RvclN0cmluZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFJlZ0V4cGAgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHJlZ2V4cCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzUmVnRXhwKC9hYmMvKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzUmVnRXhwKCcvYWJjLycpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgdmFyIGlzUmVnRXhwID0gbm9kZUlzUmVnRXhwID8gYmFzZVVuYXJ5KG5vZGVJc1JlZ0V4cCkgOiBiYXNlSXNSZWdFeHA7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHNhZmUgaW50ZWdlci4gQW4gaW50ZWdlciBpcyBzYWZlIGlmIGl0J3MgYW4gSUVFRS03NTRcbiAgICAgKiBkb3VibGUgcHJlY2lzaW9uIG51bWJlciB3aGljaCBpc24ndCB0aGUgcmVzdWx0IG9mIGEgcm91bmRlZCB1bnNhZmUgaW50ZWdlci5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBiYXNlZCBvblxuICAgICAqIFtgTnVtYmVyLmlzU2FmZUludGVnZXJgXShodHRwczovL21kbi5pby9OdW1iZXIvaXNTYWZlSW50ZWdlcikuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc2FmZSBpbnRlZ2VyLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNTYWZlSW50ZWdlcigzKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzU2FmZUludGVnZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaXNTYWZlSW50ZWdlcihJbmZpbml0eSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaXNTYWZlSW50ZWdlcignMycpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNTYWZlSW50ZWdlcih2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzSW50ZWdlcih2YWx1ZSkgJiYgdmFsdWUgPj0gLU1BWF9TQUZFX0lOVEVHRVIgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFNldGAgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMy4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHNldCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzU2V0KG5ldyBTZXQpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNTZXQobmV3IFdlYWtTZXQpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgdmFyIGlzU2V0ID0gbm9kZUlzU2V0ID8gYmFzZVVuYXJ5KG5vZGVJc1NldCkgOiBiYXNlSXNTZXQ7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN0cmluZ2AgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzdHJpbmcsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc1N0cmluZygnYWJjJyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc1N0cmluZygxKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8XG4gICAgICAgICghaXNBcnJheSh2YWx1ZSkgJiYgaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBzdHJpbmdUYWcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU3ltYm9sYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN5bWJvbCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzU3ltYm9sKFN5bWJvbC5pdGVyYXRvcik7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc1N5bWJvbCgnYWJjJyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3ltYm9sJyB8fFxuICAgICAgICAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBzeW1ib2xUYWcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSB0eXBlZCBhcnJheS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzVHlwZWRBcnJheShuZXcgVWludDhBcnJheSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc1R5cGVkQXJyYXkoW10pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgdmFyIGlzVHlwZWRBcnJheSA9IG5vZGVJc1R5cGVkQXJyYXkgPyBiYXNlVW5hcnkobm9kZUlzVHlwZWRBcnJheSkgOiBiYXNlSXNUeXBlZEFycmF5O1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYHVuZGVmaW5lZGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGB1bmRlZmluZWRgLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNVbmRlZmluZWQodm9pZCAwKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzVW5kZWZpbmVkKG51bGwpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgV2Vha01hcGAgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMy4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHdlYWsgbWFwLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNXZWFrTWFwKG5ldyBXZWFrTWFwKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzV2Vha01hcChuZXcgTWFwKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzV2Vha01hcCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgZ2V0VGFnKHZhbHVlKSA9PSB3ZWFrTWFwVGFnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgV2Vha1NldGAgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMy4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHdlYWsgc2V0LCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNXZWFrU2V0KG5ldyBXZWFrU2V0KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzV2Vha1NldChuZXcgU2V0KTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzV2Vha1NldCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gd2Vha1NldFRhZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsZXNzIHRoYW4gYG90aGVyYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjkuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGxlc3MgdGhhbiBgb3RoZXJgLFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICogQHNlZSBfLmd0XG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ubHQoMSwgMyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5sdCgzLCAzKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5sdCgzLCAxKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIHZhciBsdCA9IGNyZWF0ZVJlbGF0aW9uYWxPcGVyYXRpb24oYmFzZUx0KTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgb3RoZXJgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuOS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvXG4gICAgICogIGBvdGhlcmAsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAc2VlIF8uZ3RlXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ubHRlKDEsIDMpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8ubHRlKDMsIDMpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8ubHRlKDMsIDEpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgdmFyIGx0ZSA9IGNyZWF0ZVJlbGF0aW9uYWxPcGVyYXRpb24oZnVuY3Rpb24odmFsdWUsIG90aGVyKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPD0gb3RoZXI7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGFuIGFycmF5LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY29udmVydGVkIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRvQXJyYXkoeyAnYSc6IDEsICdiJzogMiB9KTtcbiAgICAgKiAvLyA9PiBbMSwgMl1cbiAgICAgKlxuICAgICAqIF8udG9BcnJheSgnYWJjJyk7XG4gICAgICogLy8gPT4gWydhJywgJ2InLCAnYyddXG4gICAgICpcbiAgICAgKiBfLnRvQXJyYXkoMSk7XG4gICAgICogLy8gPT4gW11cbiAgICAgKlxuICAgICAqIF8udG9BcnJheShudWxsKTtcbiAgICAgKiAvLyA9PiBbXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRvQXJyYXkodmFsdWUpIHtcbiAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgaWYgKGlzQXJyYXlMaWtlKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gaXNTdHJpbmcodmFsdWUpID8gc3RyaW5nVG9BcnJheSh2YWx1ZSkgOiBjb3B5QXJyYXkodmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKHN5bUl0ZXJhdG9yICYmIHZhbHVlW3N5bUl0ZXJhdG9yXSkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JUb0FycmF5KHZhbHVlW3N5bUl0ZXJhdG9yXSgpKTtcbiAgICAgIH1cbiAgICAgIHZhciB0YWcgPSBnZXRUYWcodmFsdWUpLFxuICAgICAgICAgIGZ1bmMgPSB0YWcgPT0gbWFwVGFnID8gbWFwVG9BcnJheSA6ICh0YWcgPT0gc2V0VGFnID8gc2V0VG9BcnJheSA6IHZhbHVlcyk7XG5cbiAgICAgIHJldHVybiBmdW5jKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgZmluaXRlIG51bWJlci5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjEyLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29udmVydGVkIG51bWJlci5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50b0Zpbml0ZSgzLjIpO1xuICAgICAqIC8vID0+IDMuMlxuICAgICAqXG4gICAgICogXy50b0Zpbml0ZShOdW1iZXIuTUlOX1ZBTFVFKTtcbiAgICAgKiAvLyA9PiA1ZS0zMjRcbiAgICAgKlxuICAgICAqIF8udG9GaW5pdGUoSW5maW5pdHkpO1xuICAgICAqIC8vID0+IDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4XG4gICAgICpcbiAgICAgKiBfLnRvRmluaXRlKCczLjInKTtcbiAgICAgKiAvLyA9PiAzLjJcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0b0Zpbml0ZSh2YWx1ZSkge1xuICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgPT09IDAgPyB2YWx1ZSA6IDA7XG4gICAgICB9XG4gICAgICB2YWx1ZSA9IHRvTnVtYmVyKHZhbHVlKTtcbiAgICAgIGlmICh2YWx1ZSA9PT0gSU5GSU5JVFkgfHwgdmFsdWUgPT09IC1JTkZJTklUWSkge1xuICAgICAgICB2YXIgc2lnbiA9ICh2YWx1ZSA8IDAgPyAtMSA6IDEpO1xuICAgICAgICByZXR1cm4gc2lnbiAqIE1BWF9JTlRFR0VSO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSA/IHZhbHVlIDogMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGFuIGludGVnZXIuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvblxuICAgICAqIFtgVG9JbnRlZ2VyYF0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvaW50ZWdlcikuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29udmVydGVkIGludGVnZXIuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udG9JbnRlZ2VyKDMuMik7XG4gICAgICogLy8gPT4gM1xuICAgICAqXG4gICAgICogXy50b0ludGVnZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG4gICAgICogLy8gPT4gMFxuICAgICAqXG4gICAgICogXy50b0ludGVnZXIoSW5maW5pdHkpO1xuICAgICAqIC8vID0+IDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4XG4gICAgICpcbiAgICAgKiBfLnRvSW50ZWdlcignMy4yJyk7XG4gICAgICogLy8gPT4gM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRvSW50ZWdlcih2YWx1ZSkge1xuICAgICAgdmFyIHJlc3VsdCA9IHRvRmluaXRlKHZhbHVlKSxcbiAgICAgICAgICByZW1haW5kZXIgPSByZXN1bHQgJSAxO1xuXG4gICAgICByZXR1cm4gcmVzdWx0ID09PSByZXN1bHQgPyAocmVtYWluZGVyID8gcmVzdWx0IC0gcmVtYWluZGVyIDogcmVzdWx0KSA6IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhbiBpbnRlZ2VyIHN1aXRhYmxlIGZvciB1c2UgYXMgdGhlIGxlbmd0aCBvZiBhblxuICAgICAqIGFycmF5LWxpa2Ugb2JqZWN0LlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uXG4gICAgICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbGVuZ3RoKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgaW50ZWdlci5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50b0xlbmd0aCgzLjIpO1xuICAgICAqIC8vID0+IDNcbiAgICAgKlxuICAgICAqIF8udG9MZW5ndGgoTnVtYmVyLk1JTl9WQUxVRSk7XG4gICAgICogLy8gPT4gMFxuICAgICAqXG4gICAgICogXy50b0xlbmd0aChJbmZpbml0eSk7XG4gICAgICogLy8gPT4gNDI5NDk2NzI5NVxuICAgICAqXG4gICAgICogXy50b0xlbmd0aCgnMy4yJyk7XG4gICAgICogLy8gPT4gM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRvTGVuZ3RoKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPyBiYXNlQ2xhbXAodG9JbnRlZ2VyKHZhbHVlKSwgMCwgTUFYX0FSUkFZX0xFTkdUSCkgOiAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBudW1iZXIuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgbnVtYmVyLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRvTnVtYmVyKDMuMik7XG4gICAgICogLy8gPT4gMy4yXG4gICAgICpcbiAgICAgKiBfLnRvTnVtYmVyKE51bWJlci5NSU5fVkFMVUUpO1xuICAgICAqIC8vID0+IDVlLTMyNFxuICAgICAqXG4gICAgICogXy50b051bWJlcihJbmZpbml0eSk7XG4gICAgICogLy8gPT4gSW5maW5pdHlcbiAgICAgKlxuICAgICAqIF8udG9OdW1iZXIoJzMuMicpO1xuICAgICAqIC8vID0+IDMuMlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRvTnVtYmVyKHZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09ICdudW1iZXInKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIE5BTjtcbiAgICAgIH1cbiAgICAgIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgdmFyIG90aGVyID0gdHlwZW9mIHZhbHVlLnZhbHVlT2YgPT0gJ2Z1bmN0aW9uJyA/IHZhbHVlLnZhbHVlT2YoKSA6IHZhbHVlO1xuICAgICAgICB2YWx1ZSA9IGlzT2JqZWN0KG90aGVyKSA/IChvdGhlciArICcnKSA6IG90aGVyO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gdmFsdWUgPT09IDAgPyB2YWx1ZSA6ICt2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZShyZVRyaW0sICcnKTtcbiAgICAgIHZhciBpc0JpbmFyeSA9IHJlSXNCaW5hcnkudGVzdCh2YWx1ZSk7XG4gICAgICByZXR1cm4gKGlzQmluYXJ5IHx8IHJlSXNPY3RhbC50ZXN0KHZhbHVlKSlcbiAgICAgICAgPyBmcmVlUGFyc2VJbnQodmFsdWUuc2xpY2UoMiksIGlzQmluYXJ5ID8gMiA6IDgpXG4gICAgICAgIDogKHJlSXNCYWRIZXgudGVzdCh2YWx1ZSkgPyBOQU4gOiArdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBwbGFpbiBvYmplY3QgZmxhdHRlbmluZyBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmdcbiAgICAgKiBrZXllZCBwcm9wZXJ0aWVzIG9mIGB2YWx1ZWAgdG8gb3duIHByb3BlcnRpZXMgb2YgdGhlIHBsYWluIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgcGxhaW4gb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmIgPSAyO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gICAgICpcbiAgICAgKiBfLmFzc2lnbih7ICdhJzogMSB9LCBuZXcgRm9vKTtcbiAgICAgKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH1cbiAgICAgKlxuICAgICAqIF8uYXNzaWduKHsgJ2EnOiAxIH0sIF8udG9QbGFpbk9iamVjdChuZXcgRm9vKSk7XG4gICAgICogLy8gPT4geyAnYSc6IDEsICdiJzogMiwgJ2MnOiAzIH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0b1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gICAgICByZXR1cm4gY29weU9iamVjdCh2YWx1ZSwga2V5c0luKHZhbHVlKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhIHNhZmUgaW50ZWdlci4gQSBzYWZlIGludGVnZXIgY2FuIGJlIGNvbXBhcmVkIGFuZFxuICAgICAqIHJlcHJlc2VudGVkIGNvcnJlY3RseS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgaW50ZWdlci5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50b1NhZmVJbnRlZ2VyKDMuMik7XG4gICAgICogLy8gPT4gM1xuICAgICAqXG4gICAgICogXy50b1NhZmVJbnRlZ2VyKE51bWJlci5NSU5fVkFMVUUpO1xuICAgICAqIC8vID0+IDBcbiAgICAgKlxuICAgICAqIF8udG9TYWZlSW50ZWdlcihJbmZpbml0eSk7XG4gICAgICogLy8gPT4gOTAwNzE5OTI1NDc0MDk5MVxuICAgICAqXG4gICAgICogXy50b1NhZmVJbnRlZ2VyKCczLjInKTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICovXG4gICAgZnVuY3Rpb24gdG9TYWZlSW50ZWdlcih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICAgID8gYmFzZUNsYW1wKHRvSW50ZWdlcih2YWx1ZSksIC1NQVhfU0FGRV9JTlRFR0VSLCBNQVhfU0FGRV9JTlRFR0VSKVxuICAgICAgICA6ICh2YWx1ZSA9PT0gMCA/IHZhbHVlIDogMCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZy4gQW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIGZvciBgbnVsbGBcbiAgICAgKiBhbmQgYHVuZGVmaW5lZGAgdmFsdWVzLiBUaGUgc2lnbiBvZiBgLTBgIGlzIHByZXNlcnZlZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRvU3RyaW5nKG51bGwpO1xuICAgICAqIC8vID0+ICcnXG4gICAgICpcbiAgICAgKiBfLnRvU3RyaW5nKC0wKTtcbiAgICAgKiAvLyA9PiAnLTAnXG4gICAgICpcbiAgICAgKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gJzEsMiwzJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICcnIDogYmFzZVRvU3RyaW5nKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBBc3NpZ25zIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIG9mIHNvdXJjZSBvYmplY3RzIHRvIHRoZVxuICAgICAqIGRlc3RpbmF0aW9uIG9iamVjdC4gU291cmNlIG9iamVjdHMgYXJlIGFwcGxpZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0LlxuICAgICAqIFN1YnNlcXVlbnQgc291cmNlcyBvdmVyd3JpdGUgcHJvcGVydHkgYXNzaWdubWVudHMgb2YgcHJldmlvdXMgc291cmNlcy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgIGFuZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gICAgICogW2BPYmplY3QuYXNzaWduYF0oaHR0cHM6Ly9tZG4uaW8vT2JqZWN0L2Fzc2lnbikuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xMC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gey4uLk9iamVjdH0gW3NvdXJjZXNdIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBzZWUgXy5hc3NpZ25JblxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSAxO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEJhcigpIHtcbiAgICAgKiAgIHRoaXMuYyA9IDM7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5iID0gMjtcbiAgICAgKiBCYXIucHJvdG90eXBlLmQgPSA0O1xuICAgICAqXG4gICAgICogXy5hc3NpZ24oeyAnYSc6IDAgfSwgbmV3IEZvbywgbmV3IEJhcik7XG4gICAgICogLy8gPT4geyAnYSc6IDEsICdjJzogMyB9XG4gICAgICovXG4gICAgdmFyIGFzc2lnbiA9IGNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlKSB7XG4gICAgICBpZiAoaXNQcm90b3R5cGUoc291cmNlKSB8fCBpc0FycmF5TGlrZShzb3VyY2UpKSB7XG4gICAgICAgIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzKHNvdXJjZSksIG9iamVjdCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5hc3NpZ25gIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgb3duIGFuZFxuICAgICAqIGluaGVyaXRlZCBzb3VyY2UgcHJvcGVydGllcy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGFsaWFzIGV4dGVuZFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAc2VlIF8uYXNzaWduXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYSA9IDE7XG4gICAgICogfVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gQmFyKCkge1xuICAgICAqICAgdGhpcy5jID0gMztcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmIgPSAyO1xuICAgICAqIEJhci5wcm90b3R5cGUuZCA9IDQ7XG4gICAgICpcbiAgICAgKiBfLmFzc2lnbkluKHsgJ2EnOiAwIH0sIG5ldyBGb28sIG5ldyBCYXIpO1xuICAgICAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIsICdjJzogMywgJ2QnOiA0IH1cbiAgICAgKi9cbiAgICB2YXIgYXNzaWduSW4gPSBjcmVhdGVBc3NpZ25lcihmdW5jdGlvbihvYmplY3QsIHNvdXJjZSkge1xuICAgICAgY29weU9iamVjdChzb3VyY2UsIGtleXNJbihzb3VyY2UpLCBvYmplY3QpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5hc3NpZ25JbmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmBcbiAgICAgKiB3aGljaCBpcyBpbnZva2VkIHRvIHByb2R1Y2UgdGhlIGFzc2lnbmVkIHZhbHVlcy4gSWYgYGN1c3RvbWl6ZXJgIHJldHVybnNcbiAgICAgKiBgdW5kZWZpbmVkYCwgYXNzaWdubWVudCBpcyBoYW5kbGVkIGJ5IHRoZSBtZXRob2QgaW5zdGVhZC4gVGhlIGBjdXN0b21pemVyYFxuICAgICAqIGlzIGludm9rZWQgd2l0aCBmaXZlIGFyZ3VtZW50czogKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QsIHNvdXJjZSkuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBhbGlhcyBleHRlbmRXaXRoXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gey4uLk9iamVjdH0gc291cmNlcyBUaGUgc291cmNlIG9iamVjdHMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQHNlZSBfLmFzc2lnbldpdGhcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUpIHtcbiAgICAgKiAgIHJldHVybiBfLmlzVW5kZWZpbmVkKG9ialZhbHVlKSA/IHNyY1ZhbHVlIDogb2JqVmFsdWU7XG4gICAgICogfVxuICAgICAqXG4gICAgICogdmFyIGRlZmF1bHRzID0gXy5wYXJ0aWFsUmlnaHQoXy5hc3NpZ25JbldpdGgsIGN1c3RvbWl6ZXIpO1xuICAgICAqXG4gICAgICogZGVmYXVsdHMoeyAnYSc6IDEgfSwgeyAnYic6IDIgfSwgeyAnYSc6IDMgfSk7XG4gICAgICogLy8gPT4geyAnYSc6IDEsICdiJzogMiB9XG4gICAgICovXG4gICAgdmFyIGFzc2lnbkluV2l0aCA9IGNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCwgY3VzdG9taXplcikge1xuICAgICAgY29weU9iamVjdChzb3VyY2UsIGtleXNJbihzb3VyY2UpLCBvYmplY3QsIGN1c3RvbWl6ZXIpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5hc3NpZ25gIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGN1c3RvbWl6ZXJgXG4gICAgICogd2hpY2ggaXMgaW52b2tlZCB0byBwcm9kdWNlIHRoZSBhc3NpZ25lZCB2YWx1ZXMuIElmIGBjdXN0b21pemVyYCByZXR1cm5zXG4gICAgICogYHVuZGVmaW5lZGAsIGFzc2lnbm1lbnQgaXMgaGFuZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmBcbiAgICAgKiBpcyBpbnZva2VkIHdpdGggZml2ZSBhcmd1bWVudHM6IChvYmpWYWx1ZSwgc3JjVmFsdWUsIGtleSwgb2JqZWN0LCBzb3VyY2UpLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBzb3VyY2VzIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBhc3NpZ25lZCB2YWx1ZXMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAc2VlIF8uYXNzaWduSW5XaXRoXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlKSB7XG4gICAgICogICByZXR1cm4gXy5pc1VuZGVmaW5lZChvYmpWYWx1ZSkgPyBzcmNWYWx1ZSA6IG9ialZhbHVlO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciBkZWZhdWx0cyA9IF8ucGFydGlhbFJpZ2h0KF8uYXNzaWduV2l0aCwgY3VzdG9taXplcik7XG4gICAgICpcbiAgICAgKiBkZWZhdWx0cyh7ICdhJzogMSB9LCB7ICdiJzogMiB9LCB7ICdhJzogMyB9KTtcbiAgICAgKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH1cbiAgICAgKi9cbiAgICB2YXIgYXNzaWduV2l0aCA9IGNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCwgY3VzdG9taXplcikge1xuICAgICAgY29weU9iamVjdChzb3VyY2UsIGtleXMoc291cmNlKSwgb2JqZWN0LCBjdXN0b21pemVyKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gYHBhdGhzYCBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAxLjAuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7Li4uKHN0cmluZ3xzdHJpbmdbXSl9IFtwYXRoc10gVGhlIHByb3BlcnR5IHBhdGhzIHRvIHBpY2suXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBwaWNrZWQgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9LCA0XSB9O1xuICAgICAqXG4gICAgICogXy5hdChvYmplY3QsIFsnYVswXS5iLmMnLCAnYVsxXSddKTtcbiAgICAgKiAvLyA9PiBbMywgNF1cbiAgICAgKi9cbiAgICB2YXIgYXQgPSBmbGF0UmVzdChiYXNlQXQpO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBvYmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIHRoZSBgcHJvdG90eXBlYCBvYmplY3QuIElmIGFcbiAgICAgKiBgcHJvcGVydGllc2Agb2JqZWN0IGlzIGdpdmVuLCBpdHMgb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXNcbiAgICAgKiBhcmUgYXNzaWduZWQgdG8gdGhlIGNyZWF0ZWQgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuMy4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm90b3R5cGUgVGhlIG9iamVjdCB0byBpbmhlcml0IGZyb20uXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzXSBUaGUgcHJvcGVydGllcyB0byBhc3NpZ24gdG8gdGhlIG9iamVjdC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBTaGFwZSgpIHtcbiAgICAgKiAgIHRoaXMueCA9IDA7XG4gICAgICogICB0aGlzLnkgPSAwO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIENpcmNsZSgpIHtcbiAgICAgKiAgIFNoYXBlLmNhbGwodGhpcyk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogQ2lyY2xlLnByb3RvdHlwZSA9IF8uY3JlYXRlKFNoYXBlLnByb3RvdHlwZSwge1xuICAgICAqICAgJ2NvbnN0cnVjdG9yJzogQ2lyY2xlXG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiB2YXIgY2lyY2xlID0gbmV3IENpcmNsZTtcbiAgICAgKiBjaXJjbGUgaW5zdGFuY2VvZiBDaXJjbGU7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogY2lyY2xlIGluc3RhbmNlb2YgU2hhcGU7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZShwcm90b3R5cGUsIHByb3BlcnRpZXMpIHtcbiAgICAgIHZhciByZXN1bHQgPSBiYXNlQ3JlYXRlKHByb3RvdHlwZSk7XG4gICAgICByZXR1cm4gcHJvcGVydGllcyA9PSBudWxsID8gcmVzdWx0IDogYmFzZUFzc2lnbihyZXN1bHQsIHByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFzc2lnbnMgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBzb3VyY2VcbiAgICAgKiBvYmplY3RzIHRvIHRoZSBkZXN0aW5hdGlvbiBvYmplY3QgZm9yIGFsbCBkZXN0aW5hdGlvbiBwcm9wZXJ0aWVzIHRoYXRcbiAgICAgKiByZXNvbHZlIHRvIGB1bmRlZmluZWRgLiBTb3VyY2Ugb2JqZWN0cyBhcmUgYXBwbGllZCBmcm9tIGxlZnQgdG8gcmlnaHQuXG4gICAgICogT25jZSBhIHByb3BlcnR5IGlzIHNldCwgYWRkaXRpb25hbCB2YWx1ZXMgb2YgdGhlIHNhbWUgcHJvcGVydHkgYXJlIGlnbm9yZWQuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAc2VlIF8uZGVmYXVsdHNEZWVwXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZGVmYXVsdHMoeyAnYSc6IDEgfSwgeyAnYic6IDIgfSwgeyAnYSc6IDMgfSk7XG4gICAgICogLy8gPT4geyAnYSc6IDEsICdiJzogMiB9XG4gICAgICovXG4gICAgdmFyIGRlZmF1bHRzID0gYmFzZVJlc3QoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2VzKSB7XG4gICAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcblxuICAgICAgdmFyIGluZGV4ID0gLTE7XG4gICAgICB2YXIgbGVuZ3RoID0gc291cmNlcy5sZW5ndGg7XG4gICAgICB2YXIgZ3VhcmQgPSBsZW5ndGggPiAyID8gc291cmNlc1syXSA6IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKHNvdXJjZXNbMF0sIHNvdXJjZXNbMV0sIGd1YXJkKSkge1xuICAgICAgICBsZW5ndGggPSAxO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgc291cmNlID0gc291cmNlc1tpbmRleF07XG4gICAgICAgIHZhciBwcm9wcyA9IGtleXNJbihzb3VyY2UpO1xuICAgICAgICB2YXIgcHJvcHNJbmRleCA9IC0xO1xuICAgICAgICB2YXIgcHJvcHNMZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgICAgICAgd2hpbGUgKCsrcHJvcHNJbmRleCA8IHByb3BzTGVuZ3RoKSB7XG4gICAgICAgICAgdmFyIGtleSA9IHByb3BzW3Byb3BzSW5kZXhdO1xuICAgICAgICAgIHZhciB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXG4gICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgKGVxKHZhbHVlLCBvYmplY3RQcm90b1trZXldKSAmJiAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSB7XG4gICAgICAgICAgICBvYmplY3Rba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5kZWZhdWx0c2AgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgYXNzaWduc1xuICAgICAqIGRlZmF1bHQgcHJvcGVydGllcy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMTAuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAc2VlIF8uZGVmYXVsdHNcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5kZWZhdWx0c0RlZXAoeyAnYSc6IHsgJ2InOiAyIH0gfSwgeyAnYSc6IHsgJ2InOiAxLCAnYyc6IDMgfSB9KTtcbiAgICAgKiAvLyA9PiB7ICdhJzogeyAnYic6IDIsICdjJzogMyB9IH1cbiAgICAgKi9cbiAgICB2YXIgZGVmYXVsdHNEZWVwID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJncykge1xuICAgICAgYXJncy5wdXNoKHVuZGVmaW5lZCwgY3VzdG9tRGVmYXVsdHNNZXJnZSk7XG4gICAgICByZXR1cm4gYXBwbHkobWVyZ2VXaXRoLCB1bmRlZmluZWQsIGFyZ3MpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5maW5kYCBleGNlcHQgdGhhdCBpdCByZXR1cm5zIHRoZSBrZXkgb2YgdGhlIGZpcnN0XG4gICAgICogZWxlbWVudCBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IgaW5zdGVhZCBvZiB0aGUgZWxlbWVudCBpdHNlbGYuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMS4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfSBSZXR1cm5zIHRoZSBrZXkgb2YgdGhlIG1hdGNoZWQgZWxlbWVudCxcbiAgICAgKiAgZWxzZSBgdW5kZWZpbmVkYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0ge1xuICAgICAqICAgJ2Jhcm5leSc6ICB7ICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgKiAgICdmcmVkJzogICAgeyAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgJ3BlYmJsZXMnOiB7ICdhZ2UnOiAxLCAgJ2FjdGl2ZSc6IHRydWUgfVxuICAgICAqIH07XG4gICAgICpcbiAgICAgKiBfLmZpbmRLZXkodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8uYWdlIDwgNDA7IH0pO1xuICAgICAqIC8vID0+ICdiYXJuZXknIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmluZEtleSh1c2VycywgeyAnYWdlJzogMSwgJ2FjdGl2ZSc6IHRydWUgfSk7XG4gICAgICogLy8gPT4gJ3BlYmJsZXMnXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maW5kS2V5KHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gJ2ZyZWQnXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbmRLZXkodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgKiAvLyA9PiAnYmFybmV5J1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbmRLZXkob2JqZWN0LCBwcmVkaWNhdGUpIHtcbiAgICAgIHJldHVybiBiYXNlRmluZEtleShvYmplY3QsIGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMyksIGJhc2VGb3JPd24pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmluZEtleWAgZXhjZXB0IHRoYXQgaXQgaXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZlxuICAgICAqIGEgY29sbGVjdGlvbiBpbiB0aGUgb3Bwb3NpdGUgb3JkZXIuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfSBSZXR1cm5zIHRoZSBrZXkgb2YgdGhlIG1hdGNoZWQgZWxlbWVudCxcbiAgICAgKiAgZWxzZSBgdW5kZWZpbmVkYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0ge1xuICAgICAqICAgJ2Jhcm5leSc6ICB7ICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgKiAgICdmcmVkJzogICAgeyAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgJ3BlYmJsZXMnOiB7ICdhZ2UnOiAxLCAgJ2FjdGl2ZSc6IHRydWUgfVxuICAgICAqIH07XG4gICAgICpcbiAgICAgKiBfLmZpbmRMYXN0S2V5KHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLmFnZSA8IDQwOyB9KTtcbiAgICAgKiAvLyA9PiByZXR1cm5zICdwZWJibGVzJyBhc3N1bWluZyBgXy5maW5kS2V5YCByZXR1cm5zICdiYXJuZXknXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmluZExhc3RLZXkodXNlcnMsIHsgJ2FnZSc6IDM2LCAnYWN0aXZlJzogdHJ1ZSB9KTtcbiAgICAgKiAvLyA9PiAnYmFybmV5J1xuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmluZExhc3RLZXkodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiAnZnJlZCdcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmluZExhc3RLZXkodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgKiAvLyA9PiAncGViYmxlcydcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmaW5kTGFzdEtleShvYmplY3QsIHByZWRpY2F0ZSkge1xuICAgICAgcmV0dXJuIGJhc2VGaW5kS2V5KG9iamVjdCwgZ2V0SXRlcmF0ZWUocHJlZGljYXRlLCAzKSwgYmFzZUZvck93blJpZ2h0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJdGVyYXRlcyBvdmVyIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2YgYW5cbiAgICAgKiBvYmplY3QgYW5kIGludm9rZXMgYGl0ZXJhdGVlYCBmb3IgZWFjaCBwcm9wZXJ0eS4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWRcbiAgICAgKiB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBrZXksIG9iamVjdCkuIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdFxuICAgICAqIGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMy4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAc2VlIF8uZm9ySW5SaWdodFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSAxO1xuICAgICAqICAgdGhpcy5iID0gMjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICAgICAqXG4gICAgICogXy5mb3JJbihuZXcgRm9vLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICogICBjb25zb2xlLmxvZyhrZXkpO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IExvZ3MgJ2EnLCAnYicsIHRoZW4gJ2MnIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZvckluKG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbFxuICAgICAgICA/IG9iamVjdFxuICAgICAgICA6IGJhc2VGb3Iob2JqZWN0LCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMyksIGtleXNJbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5mb3JJbmAgZXhjZXB0IHRoYXQgaXQgaXRlcmF0ZXMgb3ZlciBwcm9wZXJ0aWVzIG9mXG4gICAgICogYG9iamVjdGAgaW4gdGhlIG9wcG9zaXRlIG9yZGVyLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuMC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAc2VlIF8uZm9ySW5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiAgIHRoaXMuYiA9IDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAgICAgKlxuICAgICAqIF8uZm9ySW5SaWdodChuZXcgRm9vLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICogICBjb25zb2xlLmxvZyhrZXkpO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IExvZ3MgJ2MnLCAnYicsIHRoZW4gJ2EnIGFzc3VtaW5nIGBfLmZvckluYCBsb2dzICdhJywgJ2InLCB0aGVuICdjJy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmb3JJblJpZ2h0KG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbFxuICAgICAgICA/IG9iamVjdFxuICAgICAgICA6IGJhc2VGb3JSaWdodChvYmplY3QsIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAzKSwga2V5c0luKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJdGVyYXRlcyBvdmVyIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIG9mIGFuIG9iamVjdCBhbmRcbiAgICAgKiBpbnZva2VzIGBpdGVyYXRlZWAgZm9yIGVhY2ggcHJvcGVydHkuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAgICAgKiBhcmd1bWVudHM6ICh2YWx1ZSwga2V5LCBvYmplY3QpLiBJdGVyYXRlZSBmdW5jdGlvbnMgbWF5IGV4aXQgaXRlcmF0aW9uXG4gICAgICogZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjMuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQHNlZSBfLmZvck93blJpZ2h0XG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYSA9IDE7XG4gICAgICogICB0aGlzLmIgPSAyO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gICAgICpcbiAgICAgKiBfLmZvck93bihuZXcgRm9vLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICogICBjb25zb2xlLmxvZyhrZXkpO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IExvZ3MgJ2EnIHRoZW4gJ2InIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZvck93bihvYmplY3QsIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ICYmIGJhc2VGb3JPd24ob2JqZWN0LCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZm9yT3duYCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIHByb3BlcnRpZXMgb2ZcbiAgICAgKiBgb2JqZWN0YCBpbiB0aGUgb3Bwb3NpdGUgb3JkZXIuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBzZWUgXy5mb3JPd25cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiAgIHRoaXMuYiA9IDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAgICAgKlxuICAgICAqIF8uZm9yT3duUmlnaHQobmV3IEZvbywgZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgICAqICAgY29uc29sZS5sb2coa2V5KTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiBMb2dzICdiJyB0aGVuICdhJyBhc3N1bWluZyBgXy5mb3JPd25gIGxvZ3MgJ2EnIHRoZW4gJ2InLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZvck93blJpZ2h0KG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgICAgIHJldHVybiBvYmplY3QgJiYgYmFzZUZvck93blJpZ2h0KG9iamVjdCwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDMpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIGZ1bmN0aW9uIHByb3BlcnR5IG5hbWVzIGZyb20gb3duIGVudW1lcmFibGUgcHJvcGVydGllc1xuICAgICAqIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgZnVuY3Rpb24gbmFtZXMuXG4gICAgICogQHNlZSBfLmZ1bmN0aW9uc0luXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYSA9IF8uY29uc3RhbnQoJ2EnKTtcbiAgICAgKiAgIHRoaXMuYiA9IF8uY29uc3RhbnQoJ2InKTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmMgPSBfLmNvbnN0YW50KCdjJyk7XG4gICAgICpcbiAgICAgKiBfLmZ1bmN0aW9ucyhuZXcgRm9vKTtcbiAgICAgKiAvLyA9PiBbJ2EnLCAnYiddXG4gICAgICovXG4gICAgZnVuY3Rpb24gZnVuY3Rpb25zKG9iamVjdCkge1xuICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gW10gOiBiYXNlRnVuY3Rpb25zKG9iamVjdCwga2V5cyhvYmplY3QpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIGZ1bmN0aW9uIHByb3BlcnR5IG5hbWVzIGZyb20gb3duIGFuZCBpbmhlcml0ZWRcbiAgICAgKiBlbnVtZXJhYmxlIHByb3BlcnRpZXMgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBuYW1lcy5cbiAgICAgKiBAc2VlIF8uZnVuY3Rpb25zXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYSA9IF8uY29uc3RhbnQoJ2EnKTtcbiAgICAgKiAgIHRoaXMuYiA9IF8uY29uc3RhbnQoJ2InKTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmMgPSBfLmNvbnN0YW50KCdjJyk7XG4gICAgICpcbiAgICAgKiBfLmZ1bmN0aW9uc0luKG5ldyBGb28pO1xuICAgICAqIC8vID0+IFsnYScsICdiJywgJ2MnXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZ1bmN0aW9uc0luKG9iamVjdCkge1xuICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gW10gOiBiYXNlRnVuY3Rpb25zKG9iamVjdCwga2V5c0luKG9iamVjdCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHZhbHVlIGF0IGBwYXRoYCBvZiBgb2JqZWN0YC4gSWYgdGhlIHJlc29sdmVkIHZhbHVlIGlzXG4gICAgICogYHVuZGVmaW5lZGAsIHRoZSBgZGVmYXVsdFZhbHVlYCBpcyByZXR1cm5lZCBpbiBpdHMgcGxhY2UuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy43LjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gICAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXSBUaGUgdmFsdWUgcmV0dXJuZWQgZm9yIGB1bmRlZmluZWRgIHJlc29sdmVkIHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH1dIH07XG4gICAgICpcbiAgICAgKiBfLmdldChvYmplY3QsICdhWzBdLmIuYycpO1xuICAgICAqIC8vID0+IDNcbiAgICAgKlxuICAgICAqIF8uZ2V0KG9iamVjdCwgWydhJywgJzAnLCAnYicsICdjJ10pO1xuICAgICAqIC8vID0+IDNcbiAgICAgKlxuICAgICAqIF8uZ2V0KG9iamVjdCwgJ2EuYi5jJywgJ2RlZmF1bHQnKTtcbiAgICAgKiAvLyA9PiAnZGVmYXVsdCdcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXQob2JqZWN0LCBwYXRoLCBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHZhciByZXN1bHQgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGJhc2VHZXQob2JqZWN0LCBwYXRoKTtcbiAgICAgIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRWYWx1ZSA6IHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHBhdGhgIGlzIGEgZGlyZWN0IHByb3BlcnR5IG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHBhdGhgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IHsgJ2InOiAyIH0gfTtcbiAgICAgKiB2YXIgb3RoZXIgPSBfLmNyZWF0ZSh7ICdhJzogXy5jcmVhdGUoeyAnYic6IDIgfSkgfSk7XG4gICAgICpcbiAgICAgKiBfLmhhcyhvYmplY3QsICdhJyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5oYXMob2JqZWN0LCAnYS5iJyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5oYXMob2JqZWN0LCBbJ2EnLCAnYiddKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmhhcyhvdGhlciwgJ2EnKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGhhcyhvYmplY3QsIHBhdGgpIHtcbiAgICAgIHJldHVybiBvYmplY3QgIT0gbnVsbCAmJiBoYXNQYXRoKG9iamVjdCwgcGF0aCwgYmFzZUhhcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGBwYXRoYCBpcyBhIGRpcmVjdCBvciBpbmhlcml0ZWQgcHJvcGVydHkgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgcGF0aGAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSBfLmNyZWF0ZSh7ICdhJzogXy5jcmVhdGUoeyAnYic6IDIgfSkgfSk7XG4gICAgICpcbiAgICAgKiBfLmhhc0luKG9iamVjdCwgJ2EnKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmhhc0luKG9iamVjdCwgJ2EuYicpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaGFzSW4ob2JqZWN0LCBbJ2EnLCAnYiddKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmhhc0luKG9iamVjdCwgJ2InKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGhhc0luKG9iamVjdCwgcGF0aCkge1xuICAgICAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGhhc1BhdGgob2JqZWN0LCBwYXRoLCBiYXNlSGFzSW4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIHRoZSBpbnZlcnRlZCBrZXlzIGFuZCB2YWx1ZXMgb2YgYG9iamVjdGAuXG4gICAgICogSWYgYG9iamVjdGAgY29udGFpbnMgZHVwbGljYXRlIHZhbHVlcywgc3Vic2VxdWVudCB2YWx1ZXMgb3ZlcndyaXRlXG4gICAgICogcHJvcGVydHkgYXNzaWdubWVudHMgb2YgcHJldmlvdXMgdmFsdWVzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuNy4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnZlcnQuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IGludmVydGVkIG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIsICdjJzogMSB9O1xuICAgICAqXG4gICAgICogXy5pbnZlcnQob2JqZWN0KTtcbiAgICAgKiAvLyA9PiB7ICcxJzogJ2MnLCAnMic6ICdiJyB9XG4gICAgICovXG4gICAgdmFyIGludmVydCA9IGNyZWF0ZUludmVydGVyKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiZcbiAgICAgICAgICB0eXBlb2YgdmFsdWUudG9TdHJpbmcgIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YWx1ZSA9IG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICAgICAgfVxuXG4gICAgICByZXN1bHRbdmFsdWVdID0ga2V5O1xuICAgIH0sIGNvbnN0YW50KGlkZW50aXR5KSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmludmVydGAgZXhjZXB0IHRoYXQgdGhlIGludmVydGVkIG9iamVjdCBpcyBnZW5lcmF0ZWRcbiAgICAgKiBmcm9tIHRoZSByZXN1bHRzIG9mIHJ1bm5pbmcgZWFjaCBlbGVtZW50IG9mIGBvYmplY3RgIHRocnUgYGl0ZXJhdGVlYC4gVGhlXG4gICAgICogY29ycmVzcG9uZGluZyBpbnZlcnRlZCB2YWx1ZSBvZiBlYWNoIGludmVydGVkIGtleSBpcyBhbiBhcnJheSBvZiBrZXlzXG4gICAgICogcmVzcG9uc2libGUgZm9yIGdlbmVyYXRpbmcgdGhlIGludmVydGVkIHZhbHVlLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZFxuICAgICAqIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMS4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnZlcnQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBpbnZlcnRlZCBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDEgfTtcbiAgICAgKlxuICAgICAqIF8uaW52ZXJ0Qnkob2JqZWN0KTtcbiAgICAgKiAvLyA9PiB7ICcxJzogWydhJywgJ2MnXSwgJzInOiBbJ2InXSB9XG4gICAgICpcbiAgICAgKiBfLmludmVydEJ5KG9iamVjdCwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgKiAgIHJldHVybiAnZ3JvdXAnICsgdmFsdWU7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4geyAnZ3JvdXAxJzogWydhJywgJ2MnXSwgJ2dyb3VwMic6IFsnYiddIH1cbiAgICAgKi9cbiAgICB2YXIgaW52ZXJ0QnkgPSBjcmVhdGVJbnZlcnRlcihmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmXG4gICAgICAgICAgdHlwZW9mIHZhbHVlLnRvU3RyaW5nICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFsdWUgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwocmVzdWx0LCB2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0W3ZhbHVlXS5wdXNoKGtleSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRbdmFsdWVdID0gW2tleV07XG4gICAgICB9XG4gICAgfSwgZ2V0SXRlcmF0ZWUpO1xuXG4gICAgLyoqXG4gICAgICogSW52b2tlcyB0aGUgbWV0aG9kIGF0IGBwYXRoYCBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIG1ldGhvZCB0byBpbnZva2UuXG4gICAgICogQHBhcmFtIHsuLi4qfSBbYXJnc10gVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgdGhlIG1ldGhvZCB3aXRoLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGludm9rZWQgbWV0aG9kLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IFsxLCAyLCAzLCA0XSB9IH1dIH07XG4gICAgICpcbiAgICAgKiBfLmludm9rZShvYmplY3QsICdhWzBdLmIuYy5zbGljZScsIDEsIDMpO1xuICAgICAqIC8vID0+IFsyLCAzXVxuICAgICAqL1xuICAgIHZhciBpbnZva2UgPSBiYXNlUmVzdChiYXNlSW52b2tlKTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuIFNlZSB0aGVcbiAgICAgKiBbRVMgc3BlY10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gICAgICogZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiAgIHRoaXMuYiA9IDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAgICAgKlxuICAgICAqIF8ua2V5cyhuZXcgRm9vKTtcbiAgICAgKiAvLyA9PiBbJ2EnLCAnYiddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gICAgICpcbiAgICAgKiBfLmtleXMoJ2hpJyk7XG4gICAgICogLy8gPT4gWycwJywgJzEnXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG4gICAgICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0KSA6IGJhc2VLZXlzKG9iamVjdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSAxO1xuICAgICAqICAgdGhpcy5iID0gMjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICAgICAqXG4gICAgICogXy5rZXlzSW4obmV3IEZvbyk7XG4gICAgICogLy8gPT4gWydhJywgJ2InLCAnYyddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gICAgICovXG4gICAgZnVuY3Rpb24ga2V5c0luKG9iamVjdCkge1xuICAgICAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCwgdHJ1ZSkgOiBiYXNlS2V5c0luKG9iamVjdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG9wcG9zaXRlIG9mIGBfLm1hcFZhbHVlc2A7IHRoaXMgbWV0aG9kIGNyZWF0ZXMgYW4gb2JqZWN0IHdpdGggdGhlXG4gICAgICogc2FtZSB2YWx1ZXMgYXMgYG9iamVjdGAgYW5kIGtleXMgZ2VuZXJhdGVkIGJ5IHJ1bm5pbmcgZWFjaCBvd24gZW51bWVyYWJsZVxuICAgICAqIHN0cmluZyBrZXllZCBwcm9wZXJ0eSBvZiBgb2JqZWN0YCB0aHJ1IGBpdGVyYXRlZWAuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkXG4gICAgICogd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwga2V5LCBvYmplY3QpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuOC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBvYmplY3QuXG4gICAgICogQHNlZSBfLm1hcFZhbHVlc1xuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLm1hcEtleXMoeyAnYSc6IDEsICdiJzogMiB9LCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICogICByZXR1cm4ga2V5ICsgdmFsdWU7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4geyAnYTEnOiAxLCAnYjInOiAyIH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXBLZXlzKG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICAgIGl0ZXJhdGVlID0gZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDMpO1xuXG4gICAgICBiYXNlRm9yT3duKG9iamVjdCwgZnVuY3Rpb24odmFsdWUsIGtleSwgb2JqZWN0KSB7XG4gICAgICAgIGJhc2VBc3NpZ25WYWx1ZShyZXN1bHQsIGl0ZXJhdGVlKHZhbHVlLCBrZXksIG9iamVjdCksIHZhbHVlKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIGtleXMgYXMgYG9iamVjdGAgYW5kIHZhbHVlcyBnZW5lcmF0ZWRcbiAgICAgKiBieSBydW5uaW5nIGVhY2ggb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnR5IG9mIGBvYmplY3RgIHRocnVcbiAgICAgKiBgaXRlcmF0ZWVgLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czpcbiAgICAgKiAodmFsdWUsIGtleSwgb2JqZWN0KS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAyLjQuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgb2JqZWN0LlxuICAgICAqIEBzZWUgXy5tYXBLZXlzXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IHtcbiAgICAgKiAgICdmcmVkJzogICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FnZSc6IDQwIH0sXG4gICAgICogICAncGViYmxlcyc6IHsgJ3VzZXInOiAncGViYmxlcycsICdhZ2UnOiAxIH1cbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogXy5tYXBWYWx1ZXModXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8uYWdlOyB9KTtcbiAgICAgKiAvLyA9PiB7ICdmcmVkJzogNDAsICdwZWJibGVzJzogMSB9IChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLm1hcFZhbHVlcyh1c2VycywgJ2FnZScpO1xuICAgICAqIC8vID0+IHsgJ2ZyZWQnOiA0MCwgJ3BlYmJsZXMnOiAxIH0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXBWYWx1ZXMob2JqZWN0LCBpdGVyYXRlZSkge1xuICAgICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgICAgaXRlcmF0ZWUgPSBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMyk7XG5cbiAgICAgIGJhc2VGb3JPd24ob2JqZWN0LCBmdW5jdGlvbih2YWx1ZSwga2V5LCBvYmplY3QpIHtcbiAgICAgICAgYmFzZUFzc2lnblZhbHVlKHJlc3VsdCwga2V5LCBpdGVyYXRlZSh2YWx1ZSwga2V5LCBvYmplY3QpKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmFzc2lnbmAgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgbWVyZ2VzIG93biBhbmRcbiAgICAgKiBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBzb3VyY2Ugb2JqZWN0cyBpbnRvIHRoZVxuICAgICAqIGRlc3RpbmF0aW9uIG9iamVjdC4gU291cmNlIHByb3BlcnRpZXMgdGhhdCByZXNvbHZlIHRvIGB1bmRlZmluZWRgIGFyZVxuICAgICAqIHNraXBwZWQgaWYgYSBkZXN0aW5hdGlvbiB2YWx1ZSBleGlzdHMuIEFycmF5IGFuZCBwbGFpbiBvYmplY3QgcHJvcGVydGllc1xuICAgICAqIGFyZSBtZXJnZWQgcmVjdXJzaXZlbHkuIE90aGVyIG9iamVjdHMgYW5kIHZhbHVlIHR5cGVzIGFyZSBvdmVycmlkZGVuIGJ5XG4gICAgICogYXNzaWdubWVudC4gU291cmNlIG9iamVjdHMgYXJlIGFwcGxpZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0LiBTdWJzZXF1ZW50XG4gICAgICogc291cmNlcyBvdmVyd3JpdGUgcHJvcGVydHkgYXNzaWdubWVudHMgb2YgcHJldmlvdXMgc291cmNlcy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuNS4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gey4uLk9iamVjdH0gW3NvdXJjZXNdIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0ge1xuICAgICAqICAgJ2EnOiBbeyAnYic6IDIgfSwgeyAnZCc6IDQgfV1cbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogdmFyIG90aGVyID0ge1xuICAgICAqICAgJ2EnOiBbeyAnYyc6IDMgfSwgeyAnZSc6IDUgfV1cbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogXy5tZXJnZShvYmplY3QsIG90aGVyKTtcbiAgICAgKiAvLyA9PiB7ICdhJzogW3sgJ2InOiAyLCAnYyc6IDMgfSwgeyAnZCc6IDQsICdlJzogNSB9XSB9XG4gICAgICovXG4gICAgdmFyIG1lcmdlID0gY3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4KSB7XG4gICAgICBiYXNlTWVyZ2Uob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4KTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8ubWVyZ2VgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGN1c3RvbWl6ZXJgIHdoaWNoXG4gICAgICogaXMgaW52b2tlZCB0byBwcm9kdWNlIHRoZSBtZXJnZWQgdmFsdWVzIG9mIHRoZSBkZXN0aW5hdGlvbiBhbmQgc291cmNlXG4gICAgICogcHJvcGVydGllcy4gSWYgYGN1c3RvbWl6ZXJgIHJldHVybnMgYHVuZGVmaW5lZGAsIG1lcmdpbmcgaXMgaGFuZGxlZCBieSB0aGVcbiAgICAgKiBtZXRob2QgaW5zdGVhZC4gVGhlIGBjdXN0b21pemVyYCBpcyBpbnZva2VkIHdpdGggc2l4IGFyZ3VtZW50czpcbiAgICAgKiAob2JqVmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCwgc291cmNlLCBzdGFjaykuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHsuLi5PYmplY3R9IHNvdXJjZXMgVGhlIHNvdXJjZSBvYmplY3RzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBhc3NpZ25lZCB2YWx1ZXMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUpIHtcbiAgICAgKiAgIGlmIChfLmlzQXJyYXkob2JqVmFsdWUpKSB7XG4gICAgICogICAgIHJldHVybiBvYmpWYWx1ZS5jb25jYXQoc3JjVmFsdWUpO1xuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogWzFdLCAnYic6IFsyXSB9O1xuICAgICAqIHZhciBvdGhlciA9IHsgJ2EnOiBbM10sICdiJzogWzRdIH07XG4gICAgICpcbiAgICAgKiBfLm1lcmdlV2l0aChvYmplY3QsIG90aGVyLCBjdXN0b21pemVyKTtcbiAgICAgKiAvLyA9PiB7ICdhJzogWzEsIDNdLCAnYic6IFsyLCA0XSB9XG4gICAgICovXG4gICAgdmFyIG1lcmdlV2l0aCA9IGNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCwgY3VzdG9taXplcikge1xuICAgICAgYmFzZU1lcmdlKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCwgY3VzdG9taXplcik7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3Bwb3NpdGUgb2YgYF8ucGlja2A7IHRoaXMgbWV0aG9kIGNyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIHRoZVxuICAgICAqIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgcGF0aHMgb2YgYG9iamVjdGAgdGhhdCBhcmUgbm90IG9taXR0ZWQuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgY29uc2lkZXJhYmx5IHNsb3dlciB0aGFuIGBfLnBpY2tgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gICAgICogQHBhcmFtIHsuLi4oc3RyaW5nfHN0cmluZ1tdKX0gW3BhdGhzXSBUaGUgcHJvcGVydHkgcGF0aHMgdG8gb21pdC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogJzInLCAnYyc6IDMgfTtcbiAgICAgKlxuICAgICAqIF8ub21pdChvYmplY3QsIFsnYScsICdjJ10pO1xuICAgICAqIC8vID0+IHsgJ2InOiAnMicgfVxuICAgICAqL1xuICAgIHZhciBvbWl0ID0gZmxhdFJlc3QoZnVuY3Rpb24ob2JqZWN0LCBwYXRocykge1xuICAgICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgICAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICB2YXIgaXNEZWVwID0gZmFsc2U7XG4gICAgICBwYXRocyA9IGFycmF5TWFwKHBhdGhzLCBmdW5jdGlvbihwYXRoKSB7XG4gICAgICAgIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuICAgICAgICBpc0RlZXAgfHwgKGlzRGVlcCA9IHBhdGgubGVuZ3RoID4gMSk7XG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgICAgfSk7XG4gICAgICBjb3B5T2JqZWN0KG9iamVjdCwgZ2V0QWxsS2V5c0luKG9iamVjdCksIHJlc3VsdCk7XG4gICAgICBpZiAoaXNEZWVwKSB7XG4gICAgICAgIHJlc3VsdCA9IGJhc2VDbG9uZShyZXN1bHQsIENMT05FX0RFRVBfRkxBRyB8IENMT05FX0ZMQVRfRkxBRyB8IENMT05FX1NZTUJPTFNfRkxBRywgY3VzdG9tT21pdENsb25lKTtcbiAgICAgIH1cbiAgICAgIHZhciBsZW5ndGggPSBwYXRocy5sZW5ndGg7XG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgYmFzZVVuc2V0KHJlc3VsdCwgcGF0aHNbbGVuZ3RoXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9wcG9zaXRlIG9mIGBfLnBpY2tCeWA7IHRoaXMgbWV0aG9kIGNyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mXG4gICAgICogdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2YgYG9iamVjdGAgdGhhdFxuICAgICAqIGBwcmVkaWNhdGVgIGRvZXNuJ3QgcmV0dXJuIHRydXRoeSBmb3IuIFRoZSBwcmVkaWNhdGUgaXMgaW52b2tlZCB3aXRoIHR3b1xuICAgICAqIGFyZ3VtZW50czogKHZhbHVlLCBrZXkpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgcHJvcGVydHkuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6ICcyJywgJ2MnOiAzIH07XG4gICAgICpcbiAgICAgKiBfLm9taXRCeShvYmplY3QsIF8uaXNOdW1iZXIpO1xuICAgICAqIC8vID0+IHsgJ2InOiAnMicgfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG9taXRCeShvYmplY3QsIHByZWRpY2F0ZSkge1xuICAgICAgcmV0dXJuIHBpY2tCeShvYmplY3QsIG5lZ2F0ZShnZXRJdGVyYXRlZShwcmVkaWNhdGUpKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2YgdGhlIHBpY2tlZCBgb2JqZWN0YCBwcm9wZXJ0aWVzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gICAgICogQHBhcmFtIHsuLi4oc3RyaW5nfHN0cmluZ1tdKX0gW3BhdGhzXSBUaGUgcHJvcGVydHkgcGF0aHMgdG8gcGljay5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogJzInLCAnYyc6IDMgfTtcbiAgICAgKlxuICAgICAqIF8ucGljayhvYmplY3QsIFsnYScsICdjJ10pO1xuICAgICAqIC8vID0+IHsgJ2EnOiAxLCAnYyc6IDMgfVxuICAgICAqL1xuICAgIHZhciBwaWNrID0gZmxhdFJlc3QoZnVuY3Rpb24ob2JqZWN0LCBwYXRocykge1xuICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8ge30gOiBiYXNlUGljayhvYmplY3QsIHBhdGhzKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIHRoZSBgb2JqZWN0YCBwcm9wZXJ0aWVzIGBwcmVkaWNhdGVgIHJldHVybnNcbiAgICAgKiB0cnV0aHkgZm9yLiBUaGUgcHJlZGljYXRlIGlzIGludm9rZWQgd2l0aCB0d28gYXJndW1lbnRzOiAodmFsdWUsIGtleSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBwcm9wZXJ0eS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogJzInLCAnYyc6IDMgfTtcbiAgICAgKlxuICAgICAqIF8ucGlja0J5KG9iamVjdCwgXy5pc051bWJlcik7XG4gICAgICogLy8gPT4geyAnYSc6IDEsICdjJzogMyB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gcGlja0J5KG9iamVjdCwgcHJlZGljYXRlKSB7XG4gICAgICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgdmFyIHByb3BzID0gYXJyYXlNYXAoZ2V0QWxsS2V5c0luKG9iamVjdCksIGZ1bmN0aW9uKHByb3ApIHtcbiAgICAgICAgcmV0dXJuIFtwcm9wXTtcbiAgICAgIH0pO1xuICAgICAgcHJlZGljYXRlID0gZ2V0SXRlcmF0ZWUocHJlZGljYXRlKTtcbiAgICAgIHJldHVybiBiYXNlUGlja0J5KG9iamVjdCwgcHJvcHMsIGZ1bmN0aW9uKHZhbHVlLCBwYXRoKSB7XG4gICAgICAgIHJldHVybiBwcmVkaWNhdGUodmFsdWUsIHBhdGhbMF0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5nZXRgIGV4Y2VwdCB0aGF0IGlmIHRoZSByZXNvbHZlZCB2YWx1ZSBpcyBhXG4gICAgICogZnVuY3Rpb24gaXQncyBpbnZva2VkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGl0cyBwYXJlbnQgb2JqZWN0IGFuZFxuICAgICAqIGl0cyByZXN1bHQgaXMgcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byByZXNvbHZlLlxuICAgICAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV0gVGhlIHZhbHVlIHJldHVybmVkIGZvciBgdW5kZWZpbmVkYCByZXNvbHZlZCB2YWx1ZXMuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYzEnOiAzLCAnYzInOiBfLmNvbnN0YW50KDQpIH0gfV0gfTtcbiAgICAgKlxuICAgICAqIF8ucmVzdWx0KG9iamVjdCwgJ2FbMF0uYi5jMScpO1xuICAgICAqIC8vID0+IDNcbiAgICAgKlxuICAgICAqIF8ucmVzdWx0KG9iamVjdCwgJ2FbMF0uYi5jMicpO1xuICAgICAqIC8vID0+IDRcbiAgICAgKlxuICAgICAqIF8ucmVzdWx0KG9iamVjdCwgJ2FbMF0uYi5jMycsICdkZWZhdWx0Jyk7XG4gICAgICogLy8gPT4gJ2RlZmF1bHQnXG4gICAgICpcbiAgICAgKiBfLnJlc3VsdChvYmplY3QsICdhWzBdLmIuYzMnLCBfLmNvbnN0YW50KCdkZWZhdWx0JykpO1xuICAgICAqIC8vID0+ICdkZWZhdWx0J1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlc3VsdChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuICAgICAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuXG4gICAgICAvLyBFbnN1cmUgdGhlIGxvb3AgaXMgZW50ZXJlZCB3aGVuIHBhdGggaXMgZW1wdHkuXG4gICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICBsZW5ndGggPSAxO1xuICAgICAgICBvYmplY3QgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgdmFsdWUgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFt0b0tleShwYXRoW2luZGV4XSldO1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGluZGV4ID0gbGVuZ3RoO1xuICAgICAgICAgIHZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIG9iamVjdCA9IGlzRnVuY3Rpb24odmFsdWUpID8gdmFsdWUuY2FsbChvYmplY3QpIDogdmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHZhbHVlIGF0IGBwYXRoYCBvZiBgb2JqZWN0YC4gSWYgYSBwb3J0aW9uIG9mIGBwYXRoYCBkb2Vzbid0IGV4aXN0LFxuICAgICAqIGl0J3MgY3JlYXRlZC4gQXJyYXlzIGFyZSBjcmVhdGVkIGZvciBtaXNzaW5nIGluZGV4IHByb3BlcnRpZXMgd2hpbGUgb2JqZWN0c1xuICAgICAqIGFyZSBjcmVhdGVkIGZvciBhbGwgb3RoZXIgbWlzc2luZyBwcm9wZXJ0aWVzLiBVc2UgYF8uc2V0V2l0aGAgdG8gY3VzdG9taXplXG4gICAgICogYHBhdGhgIGNyZWF0aW9uLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy43LjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9XSB9O1xuICAgICAqXG4gICAgICogXy5zZXQob2JqZWN0LCAnYVswXS5iLmMnLCA0KTtcbiAgICAgKiBjb25zb2xlLmxvZyhvYmplY3QuYVswXS5iLmMpO1xuICAgICAqIC8vID0+IDRcbiAgICAgKlxuICAgICAqIF8uc2V0KG9iamVjdCwgWyd4JywgJzAnLCAneScsICd6J10sIDUpO1xuICAgICAqIGNvbnNvbGUubG9nKG9iamVjdC54WzBdLnkueik7XG4gICAgICogLy8gPT4gNVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNldChvYmplY3QsIHBhdGgsIHZhbHVlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyBvYmplY3QgOiBiYXNlU2V0KG9iamVjdCwgcGF0aCwgdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uc2V0YCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjdXN0b21pemVyYCB3aGljaCBpc1xuICAgICAqIGludm9rZWQgdG8gcHJvZHVjZSB0aGUgb2JqZWN0cyBvZiBgcGF0aGAuICBJZiBgY3VzdG9taXplcmAgcmV0dXJucyBgdW5kZWZpbmVkYFxuICAgICAqIHBhdGggY3JlYXRpb24gaXMgaGFuZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmAgaXMgaW52b2tlZFxuICAgICAqIHdpdGggdGhyZWUgYXJndW1lbnRzOiAobnNWYWx1ZSwga2V5LCBuc09iamVjdCkuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBzZXQuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGFzc2lnbmVkIHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0ge307XG4gICAgICpcbiAgICAgKiBfLnNldFdpdGgob2JqZWN0LCAnWzBdWzFdJywgJ2EnLCBPYmplY3QpO1xuICAgICAqIC8vID0+IHsgJzAnOiB7ICcxJzogJ2EnIH0gfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNldFdpdGgob2JqZWN0LCBwYXRoLCB2YWx1ZSwgY3VzdG9taXplcikge1xuICAgICAgY3VzdG9taXplciA9IHR5cGVvZiBjdXN0b21pemVyID09ICdmdW5jdGlvbicgPyBjdXN0b21pemVyIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gb2JqZWN0IDogYmFzZVNldChvYmplY3QsIHBhdGgsIHZhbHVlLCBjdXN0b21pemVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZC12YWx1ZSBwYWlycyBmb3IgYG9iamVjdGBcbiAgICAgKiB3aGljaCBjYW4gYmUgY29uc3VtZWQgYnkgYF8uZnJvbVBhaXJzYC4gSWYgYG9iamVjdGAgaXMgYSBtYXAgb3Igc2V0LCBpdHNcbiAgICAgKiBlbnRyaWVzIGFyZSByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBhbGlhcyBlbnRyaWVzXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGtleS12YWx1ZSBwYWlycy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiAgIHRoaXMuYiA9IDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAgICAgKlxuICAgICAqIF8udG9QYWlycyhuZXcgRm9vKTtcbiAgICAgKiAvLyA9PiBbWydhJywgMV0sIFsnYicsIDJdXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAqL1xuICAgIHZhciB0b1BhaXJzID0gY3JlYXRlVG9QYWlycyhrZXlzKTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQtdmFsdWUgcGFpcnNcbiAgICAgKiBmb3IgYG9iamVjdGAgd2hpY2ggY2FuIGJlIGNvbnN1bWVkIGJ5IGBfLmZyb21QYWlyc2AuIElmIGBvYmplY3RgIGlzIGEgbWFwXG4gICAgICogb3Igc2V0LCBpdHMgZW50cmllcyBhcmUgcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAYWxpYXMgZW50cmllc0luXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGtleS12YWx1ZSBwYWlycy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiAgIHRoaXMuYiA9IDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAgICAgKlxuICAgICAqIF8udG9QYWlyc0luKG5ldyBGb28pO1xuICAgICAqIC8vID0+IFtbJ2EnLCAxXSwgWydiJywgMl0sIFsnYycsIDNdXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAqL1xuICAgIHZhciB0b1BhaXJzSW4gPSBjcmVhdGVUb1BhaXJzKGtleXNJbik7XG5cbiAgICAvKipcbiAgICAgKiBBbiBhbHRlcm5hdGl2ZSB0byBgXy5yZWR1Y2VgOyB0aGlzIG1ldGhvZCB0cmFuc2Zvcm1zIGBvYmplY3RgIHRvIGEgbmV3XG4gICAgICogYGFjY3VtdWxhdG9yYCBvYmplY3Qgd2hpY2ggaXMgdGhlIHJlc3VsdCBvZiBydW5uaW5nIGVhY2ggb2YgaXRzIG93blxuICAgICAqIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgdGhydSBgaXRlcmF0ZWVgLCB3aXRoIGVhY2ggaW52b2NhdGlvblxuICAgICAqIHBvdGVudGlhbGx5IG11dGF0aW5nIHRoZSBgYWNjdW11bGF0b3JgIG9iamVjdC4gSWYgYGFjY3VtdWxhdG9yYCBpcyBub3RcbiAgICAgKiBwcm92aWRlZCwgYSBuZXcgb2JqZWN0IHdpdGggdGhlIHNhbWUgYFtbUHJvdG90eXBlXV1gIHdpbGwgYmUgdXNlZC4gVGhlXG4gICAgICogaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIGZvdXIgYXJndW1lbnRzOiAoYWNjdW11bGF0b3IsIHZhbHVlLCBrZXksIG9iamVjdCkuXG4gICAgICogSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0IGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDEuMy4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBbYWNjdW11bGF0b3JdIFRoZSBjdXN0b20gYWNjdW11bGF0b3IgdmFsdWUuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGFjY3VtdWxhdGVkIHZhbHVlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRyYW5zZm9ybShbMiwgMywgNF0sIGZ1bmN0aW9uKHJlc3VsdCwgbikge1xuICAgICAqICAgcmVzdWx0LnB1c2gobiAqPSBuKTtcbiAgICAgKiAgIHJldHVybiBuICUgMiA9PSAwO1xuICAgICAqIH0sIFtdKTtcbiAgICAgKiAvLyA9PiBbNCwgOV1cbiAgICAgKlxuICAgICAqIF8udHJhbnNmb3JtKHsgJ2EnOiAxLCAnYic6IDIsICdjJzogMSB9LCBmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICAgKiAgIChyZXN1bHRbdmFsdWVdIHx8IChyZXN1bHRbdmFsdWVdID0gW10pKS5wdXNoKGtleSk7XG4gICAgICogfSwge30pO1xuICAgICAqIC8vID0+IHsgJzEnOiBbJ2EnLCAnYyddLCAnMic6IFsnYiddIH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0cmFuc2Zvcm0ob2JqZWN0LCBpdGVyYXRlZSwgYWNjdW11bGF0b3IpIHtcbiAgICAgIHZhciBpc0FyciA9IGlzQXJyYXkob2JqZWN0KSxcbiAgICAgICAgICBpc0Fyckxpa2UgPSBpc0FyciB8fCBpc0J1ZmZlcihvYmplY3QpIHx8IGlzVHlwZWRBcnJheShvYmplY3QpO1xuXG4gICAgICBpdGVyYXRlZSA9IGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCA0KTtcbiAgICAgIGlmIChhY2N1bXVsYXRvciA9PSBudWxsKSB7XG4gICAgICAgIHZhciBDdG9yID0gb2JqZWN0ICYmIG9iamVjdC5jb25zdHJ1Y3RvcjtcbiAgICAgICAgaWYgKGlzQXJyTGlrZSkge1xuICAgICAgICAgIGFjY3VtdWxhdG9yID0gaXNBcnIgPyBuZXcgQ3RvciA6IFtdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgICAgICBhY2N1bXVsYXRvciA9IGlzRnVuY3Rpb24oQ3RvcikgPyBiYXNlQ3JlYXRlKGdldFByb3RvdHlwZShvYmplY3QpKSA6IHt9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGFjY3VtdWxhdG9yID0ge307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIChpc0Fyckxpa2UgPyBhcnJheUVhY2ggOiBiYXNlRm9yT3duKShvYmplY3QsIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgb2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBpdGVyYXRlZShhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBvYmplY3QpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgcHJvcGVydHkgYXQgYHBhdGhgIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gdW5zZXQuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBwcm9wZXJ0eSBpcyBkZWxldGVkLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogNyB9IH1dIH07XG4gICAgICogXy51bnNldChvYmplY3QsICdhWzBdLmIuYycpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKG9iamVjdCk7XG4gICAgICogLy8gPT4geyAnYSc6IFt7ICdiJzoge30gfV0gfTtcbiAgICAgKlxuICAgICAqIF8udW5zZXQob2JqZWN0LCBbJ2EnLCAnMCcsICdiJywgJ2MnXSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogY29uc29sZS5sb2cob2JqZWN0KTtcbiAgICAgKiAvLyA9PiB7ICdhJzogW3sgJ2InOiB7fSB9XSB9O1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHVuc2V0KG9iamVjdCwgcGF0aCkge1xuICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdHJ1ZSA6IGJhc2VVbnNldChvYmplY3QsIHBhdGgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uc2V0YCBleGNlcHQgdGhhdCBhY2NlcHRzIGB1cGRhdGVyYCB0byBwcm9kdWNlIHRoZVxuICAgICAqIHZhbHVlIHRvIHNldC4gVXNlIGBfLnVwZGF0ZVdpdGhgIHRvIGN1c3RvbWl6ZSBgcGF0aGAgY3JlYXRpb24uIFRoZSBgdXBkYXRlcmBcbiAgICAgKiBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC42LjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHVwZGF0ZXIgVGhlIGZ1bmN0aW9uIHRvIHByb2R1Y2UgdGhlIHVwZGF0ZWQgdmFsdWUuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MnOiAzIH0gfV0gfTtcbiAgICAgKlxuICAgICAqIF8udXBkYXRlKG9iamVjdCwgJ2FbMF0uYi5jJywgZnVuY3Rpb24obikgeyByZXR1cm4gbiAqIG47IH0pO1xuICAgICAqIGNvbnNvbGUubG9nKG9iamVjdC5hWzBdLmIuYyk7XG4gICAgICogLy8gPT4gOVxuICAgICAqXG4gICAgICogXy51cGRhdGUob2JqZWN0LCAneFswXS55LnonLCBmdW5jdGlvbihuKSB7IHJldHVybiBuID8gbiArIDEgOiAwOyB9KTtcbiAgICAgKiBjb25zb2xlLmxvZyhvYmplY3QueFswXS55LnopO1xuICAgICAqIC8vID0+IDBcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1cGRhdGUob2JqZWN0LCBwYXRoLCB1cGRhdGVyKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyBvYmplY3QgOiBiYXNlVXBkYXRlKG9iamVjdCwgcGF0aCwgY2FzdEZ1bmN0aW9uKHVwZGF0ZXIpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnVwZGF0ZWAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmAgd2hpY2ggaXNcbiAgICAgKiBpbnZva2VkIHRvIHByb2R1Y2UgdGhlIG9iamVjdHMgb2YgYHBhdGhgLiAgSWYgYGN1c3RvbWl6ZXJgIHJldHVybnMgYHVuZGVmaW5lZGBcbiAgICAgKiBwYXRoIGNyZWF0aW9uIGlzIGhhbmRsZWQgYnkgdGhlIG1ldGhvZCBpbnN0ZWFkLiBUaGUgYGN1c3RvbWl6ZXJgIGlzIGludm9rZWRcbiAgICAgKiB3aXRoIHRocmVlIGFyZ3VtZW50czogKG5zVmFsdWUsIGtleSwgbnNPYmplY3QpLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC42LjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHVwZGF0ZXIgVGhlIGZ1bmN0aW9uIHRvIHByb2R1Y2UgdGhlIHVwZGF0ZWQgdmFsdWUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7fTtcbiAgICAgKlxuICAgICAqIF8udXBkYXRlV2l0aChvYmplY3QsICdbMF1bMV0nLCBfLmNvbnN0YW50KCdhJyksIE9iamVjdCk7XG4gICAgICogLy8gPT4geyAnMCc6IHsgJzEnOiAnYScgfSB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gdXBkYXRlV2l0aChvYmplY3QsIHBhdGgsIHVwZGF0ZXIsIGN1c3RvbWl6ZXIpIHtcbiAgICAgIGN1c3RvbWl6ZXIgPSB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nID8gY3VzdG9taXplciA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IG9iamVjdCA6IGJhc2VVcGRhdGUob2JqZWN0LCBwYXRoLCBjYXN0RnVuY3Rpb24odXBkYXRlciksIGN1c3RvbWl6ZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0eSB2YWx1ZXMgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYSA9IDE7XG4gICAgICogICB0aGlzLmIgPSAyO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gICAgICpcbiAgICAgKiBfLnZhbHVlcyhuZXcgRm9vKTtcbiAgICAgKiAvLyA9PiBbMSwgMl0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgKlxuICAgICAqIF8udmFsdWVzKCdoaScpO1xuICAgICAqIC8vID0+IFsnaCcsICdpJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB2YWx1ZXMob2JqZWN0KSB7XG4gICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyBbXSA6IGJhc2VWYWx1ZXMob2JqZWN0LCBrZXlzKG9iamVjdCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnR5XG4gICAgICogdmFsdWVzIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSAxO1xuICAgICAqICAgdGhpcy5iID0gMjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICAgICAqXG4gICAgICogXy52YWx1ZXNJbihuZXcgRm9vKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB2YWx1ZXNJbihvYmplY3QpIHtcbiAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IFtdIDogYmFzZVZhbHVlcyhvYmplY3QsIGtleXNJbihvYmplY3QpKTtcbiAgICB9XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBDbGFtcHMgYG51bWJlcmAgd2l0aGluIHRoZSBpbmNsdXNpdmUgYGxvd2VyYCBhbmQgYHVwcGVyYCBib3VuZHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTnVtYmVyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG51bWJlciBUaGUgbnVtYmVyIHRvIGNsYW1wLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbG93ZXJdIFRoZSBsb3dlciBib3VuZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdXBwZXIgVGhlIHVwcGVyIGJvdW5kLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNsYW1wZWQgbnVtYmVyLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmNsYW1wKC0xMCwgLTUsIDUpO1xuICAgICAqIC8vID0+IC01XG4gICAgICpcbiAgICAgKiBfLmNsYW1wKDEwLCAtNSwgNSk7XG4gICAgICogLy8gPT4gNVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNsYW1wKG51bWJlciwgbG93ZXIsIHVwcGVyKSB7XG4gICAgICBpZiAodXBwZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB1cHBlciA9IGxvd2VyO1xuICAgICAgICBsb3dlciA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmICh1cHBlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHVwcGVyID0gdG9OdW1iZXIodXBwZXIpO1xuICAgICAgICB1cHBlciA9IHVwcGVyID09PSB1cHBlciA/IHVwcGVyIDogMDtcbiAgICAgIH1cbiAgICAgIGlmIChsb3dlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxvd2VyID0gdG9OdW1iZXIobG93ZXIpO1xuICAgICAgICBsb3dlciA9IGxvd2VyID09PSBsb3dlciA/IGxvd2VyIDogMDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlQ2xhbXAodG9OdW1iZXIobnVtYmVyKSwgbG93ZXIsIHVwcGVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYG5gIGlzIGJldHdlZW4gYHN0YXJ0YCBhbmQgdXAgdG8sIGJ1dCBub3QgaW5jbHVkaW5nLCBgZW5kYC4gSWZcbiAgICAgKiBgZW5kYCBpcyBub3Qgc3BlY2lmaWVkLCBpdCdzIHNldCB0byBgc3RhcnRgIHdpdGggYHN0YXJ0YCB0aGVuIHNldCB0byBgMGAuXG4gICAgICogSWYgYHN0YXJ0YCBpcyBncmVhdGVyIHRoYW4gYGVuZGAgdGhlIHBhcmFtcyBhcmUgc3dhcHBlZCB0byBzdXBwb3J0XG4gICAgICogbmVnYXRpdmUgcmFuZ2VzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMy4wXG4gICAgICogQGNhdGVnb3J5IE51bWJlclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXIgVGhlIG51bWJlciB0byBjaGVjay5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBvZiB0aGUgcmFuZ2UuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIG9mIHRoZSByYW5nZS5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYG51bWJlcmAgaXMgaW4gdGhlIHJhbmdlLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQHNlZSBfLnJhbmdlLCBfLnJhbmdlUmlnaHRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pblJhbmdlKDMsIDIsIDQpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaW5SYW5nZSg0LCA4KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmluUmFuZ2UoNCwgMik7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaW5SYW5nZSgyLCAyKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pblJhbmdlKDEuMiwgMik7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pblJhbmdlKDUuMiwgNCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaW5SYW5nZSgtMywgLTIsIC02KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaW5SYW5nZShudW1iZXIsIHN0YXJ0LCBlbmQpIHtcbiAgICAgIHN0YXJ0ID0gdG9GaW5pdGUoc3RhcnQpO1xuICAgICAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGVuZCA9IHN0YXJ0O1xuICAgICAgICBzdGFydCA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbmQgPSB0b0Zpbml0ZShlbmQpO1xuICAgICAgfVxuICAgICAgbnVtYmVyID0gdG9OdW1iZXIobnVtYmVyKTtcbiAgICAgIHJldHVybiBiYXNlSW5SYW5nZShudW1iZXIsIHN0YXJ0LCBlbmQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb2R1Y2VzIGEgcmFuZG9tIG51bWJlciBiZXR3ZWVuIHRoZSBpbmNsdXNpdmUgYGxvd2VyYCBhbmQgYHVwcGVyYCBib3VuZHMuXG4gICAgICogSWYgb25seSBvbmUgYXJndW1lbnQgaXMgcHJvdmlkZWQgYSBudW1iZXIgYmV0d2VlbiBgMGAgYW5kIHRoZSBnaXZlbiBudW1iZXJcbiAgICAgKiBpcyByZXR1cm5lZC4gSWYgYGZsb2F0aW5nYCBpcyBgdHJ1ZWAsIG9yIGVpdGhlciBgbG93ZXJgIG9yIGB1cHBlcmAgYXJlXG4gICAgICogZmxvYXRzLCBhIGZsb2F0aW5nLXBvaW50IG51bWJlciBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mIGFuIGludGVnZXIuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogSmF2YVNjcmlwdCBmb2xsb3dzIHRoZSBJRUVFLTc1NCBzdGFuZGFyZCBmb3IgcmVzb2x2aW5nXG4gICAgICogZmxvYXRpbmctcG9pbnQgdmFsdWVzIHdoaWNoIGNhbiBwcm9kdWNlIHVuZXhwZWN0ZWQgcmVzdWx0cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjcuMFxuICAgICAqIEBjYXRlZ29yeSBOdW1iZXJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xvd2VyPTBdIFRoZSBsb3dlciBib3VuZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3VwcGVyPTFdIFRoZSB1cHBlciBib3VuZC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmbG9hdGluZ10gU3BlY2lmeSByZXR1cm5pbmcgYSBmbG9hdGluZy1wb2ludCBudW1iZXIuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgcmFuZG9tIG51bWJlci5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5yYW5kb20oMCwgNSk7XG4gICAgICogLy8gPT4gYW4gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDVcbiAgICAgKlxuICAgICAqIF8ucmFuZG9tKDUpO1xuICAgICAqIC8vID0+IGFsc28gYW4gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDVcbiAgICAgKlxuICAgICAqIF8ucmFuZG9tKDUsIHRydWUpO1xuICAgICAqIC8vID0+IGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyIGJldHdlZW4gMCBhbmQgNVxuICAgICAqXG4gICAgICogXy5yYW5kb20oMS4yLCA1LjIpO1xuICAgICAqIC8vID0+IGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyIGJldHdlZW4gMS4yIGFuZCA1LjJcbiAgICAgKi9cbiAgICBmdW5jdGlvbiByYW5kb20obG93ZXIsIHVwcGVyLCBmbG9hdGluZykge1xuICAgICAgaWYgKGZsb2F0aW5nICYmIHR5cGVvZiBmbG9hdGluZyAhPSAnYm9vbGVhbicgJiYgaXNJdGVyYXRlZUNhbGwobG93ZXIsIHVwcGVyLCBmbG9hdGluZykpIHtcbiAgICAgICAgdXBwZXIgPSBmbG9hdGluZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChmbG9hdGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdXBwZXIgPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgZmxvYXRpbmcgPSB1cHBlcjtcbiAgICAgICAgICB1cHBlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgbG93ZXIgPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgZmxvYXRpbmcgPSBsb3dlcjtcbiAgICAgICAgICBsb3dlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGxvd2VyID09PSB1bmRlZmluZWQgJiYgdXBwZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsb3dlciA9IDA7XG4gICAgICAgIHVwcGVyID0gMTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBsb3dlciA9IHRvRmluaXRlKGxvd2VyKTtcbiAgICAgICAgaWYgKHVwcGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB1cHBlciA9IGxvd2VyO1xuICAgICAgICAgIGxvd2VyID0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1cHBlciA9IHRvRmluaXRlKHVwcGVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGxvd2VyID4gdXBwZXIpIHtcbiAgICAgICAgdmFyIHRlbXAgPSBsb3dlcjtcbiAgICAgICAgbG93ZXIgPSB1cHBlcjtcbiAgICAgICAgdXBwZXIgPSB0ZW1wO1xuICAgICAgfVxuICAgICAgaWYgKGZsb2F0aW5nIHx8IGxvd2VyICUgMSB8fCB1cHBlciAlIDEpIHtcbiAgICAgICAgdmFyIHJhbmQgPSBuYXRpdmVSYW5kb20oKTtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZU1pbihsb3dlciArIChyYW5kICogKHVwcGVyIC0gbG93ZXIgKyBmcmVlUGFyc2VGbG9hdCgnMWUtJyArICgocmFuZCArICcnKS5sZW5ndGggLSAxKSkpKSwgdXBwZXIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VSYW5kb20obG93ZXIsIHVwcGVyKTtcbiAgICB9XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgc3RyaW5nYCB0byBbY2FtZWwgY2FzZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ2FtZWxDYXNlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNhbWVsIGNhc2VkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5jYW1lbENhc2UoJ0ZvbyBCYXInKTtcbiAgICAgKiAvLyA9PiAnZm9vQmFyJ1xuICAgICAqXG4gICAgICogXy5jYW1lbENhc2UoJy0tZm9vLWJhci0tJyk7XG4gICAgICogLy8gPT4gJ2Zvb0JhcidcbiAgICAgKlxuICAgICAqIF8uY2FtZWxDYXNlKCdfX0ZPT19CQVJfXycpO1xuICAgICAqIC8vID0+ICdmb29CYXInXG4gICAgICovXG4gICAgdmFyIGNhbWVsQ2FzZSA9IGNyZWF0ZUNvbXBvdW5kZXIoZnVuY3Rpb24ocmVzdWx0LCB3b3JkLCBpbmRleCkge1xuICAgICAgd29yZCA9IHdvcmQudG9Mb3dlckNhc2UoKTtcbiAgICAgIHJldHVybiByZXN1bHQgKyAoaW5kZXggPyBjYXBpdGFsaXplKHdvcmQpIDogd29yZCk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGBzdHJpbmdgIHRvIHVwcGVyIGNhc2UgYW5kIHRoZSByZW1haW5pbmdcbiAgICAgKiB0byBsb3dlciBjYXNlLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNhcGl0YWxpemUuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY2FwaXRhbGl6ZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmNhcGl0YWxpemUoJ0ZSRUQnKTtcbiAgICAgKiAvLyA9PiAnRnJlZCdcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjYXBpdGFsaXplKHN0cmluZykge1xuICAgICAgcmV0dXJuIHVwcGVyRmlyc3QodG9TdHJpbmcoc3RyaW5nKS50b0xvd2VyQ2FzZSgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWJ1cnJzIGBzdHJpbmdgIGJ5IGNvbnZlcnRpbmdcbiAgICAgKiBbTGF0aW4tMSBTdXBwbGVtZW50XShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MYXRpbi0xX1N1cHBsZW1lbnRfKFVuaWNvZGVfYmxvY2spI0NoYXJhY3Rlcl90YWJsZSlcbiAgICAgKiBhbmQgW0xhdGluIEV4dGVuZGVkLUFdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xhdGluX0V4dGVuZGVkLUEpXG4gICAgICogbGV0dGVycyB0byBiYXNpYyBMYXRpbiBsZXR0ZXJzIGFuZCByZW1vdmluZ1xuICAgICAqIFtjb21iaW5pbmcgZGlhY3JpdGljYWwgbWFya3NdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbWJpbmluZ19EaWFjcml0aWNhbF9NYXJrcykuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gZGVidXJyLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGRlYnVycmVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5kZWJ1cnIoJ2TDqWrDoCB2dScpO1xuICAgICAqIC8vID0+ICdkZWphIHZ1J1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRlYnVycihzdHJpbmcpIHtcbiAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgICByZXR1cm4gc3RyaW5nICYmIHN0cmluZy5yZXBsYWNlKHJlTGF0aW4sIGRlYnVyckxldHRlcikucmVwbGFjZShyZUNvbWJvTWFyaywgJycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgc3RyaW5nYCBlbmRzIHdpdGggdGhlIGdpdmVuIHRhcmdldCBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3RhcmdldF0gVGhlIHN0cmluZyB0byBzZWFyY2ggZm9yLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbcG9zaXRpb249c3RyaW5nLmxlbmd0aF0gVGhlIHBvc2l0aW9uIHRvIHNlYXJjaCB1cCB0by5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHN0cmluZ2AgZW5kcyB3aXRoIGB0YXJnZXRgLFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZW5kc1dpdGgoJ2FiYycsICdjJyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5lbmRzV2l0aCgnYWJjJywgJ2InKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5lbmRzV2l0aCgnYWJjJywgJ2InLCAyKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gZW5kc1dpdGgoc3RyaW5nLCB0YXJnZXQsIHBvc2l0aW9uKSB7XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgdGFyZ2V0ID0gYmFzZVRvU3RyaW5nKHRhcmdldCk7XG5cbiAgICAgIHZhciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoO1xuICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbiA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8gbGVuZ3RoXG4gICAgICAgIDogYmFzZUNsYW1wKHRvSW50ZWdlcihwb3NpdGlvbiksIDAsIGxlbmd0aCk7XG5cbiAgICAgIHZhciBlbmQgPSBwb3NpdGlvbjtcbiAgICAgIHBvc2l0aW9uIC09IHRhcmdldC5sZW5ndGg7XG4gICAgICByZXR1cm4gcG9zaXRpb24gPj0gMCAmJiBzdHJpbmcuc2xpY2UocG9zaXRpb24sIGVuZCkgPT0gdGFyZ2V0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIHRoZSBjaGFyYWN0ZXJzIFwiJlwiLCBcIjxcIiwgXCI+XCIsICdcIicsIGFuZCBcIidcIiBpbiBgc3RyaW5nYCB0byB0aGVpclxuICAgICAqIGNvcnJlc3BvbmRpbmcgSFRNTCBlbnRpdGllcy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBObyBvdGhlciBjaGFyYWN0ZXJzIGFyZSBlc2NhcGVkLiBUbyBlc2NhcGUgYWRkaXRpb25hbFxuICAgICAqIGNoYXJhY3RlcnMgdXNlIGEgdGhpcmQtcGFydHkgbGlicmFyeSBsaWtlIFtfaGVfXShodHRwczovL210aHMuYmUvaGUpLlxuICAgICAqXG4gICAgICogVGhvdWdoIHRoZSBcIj5cIiBjaGFyYWN0ZXIgaXMgZXNjYXBlZCBmb3Igc3ltbWV0cnksIGNoYXJhY3RlcnMgbGlrZVxuICAgICAqIFwiPlwiIGFuZCBcIi9cIiBkb24ndCBuZWVkIGVzY2FwaW5nIGluIEhUTUwgYW5kIGhhdmUgbm8gc3BlY2lhbCBtZWFuaW5nXG4gICAgICogdW5sZXNzIHRoZXkncmUgcGFydCBvZiBhIHRhZyBvciB1bnF1b3RlZCBhdHRyaWJ1dGUgdmFsdWUuIFNlZVxuICAgICAqIFtNYXRoaWFzIEJ5bmVucydzIGFydGljbGVdKGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9hbWJpZ3VvdXMtYW1wZXJzYW5kcylcbiAgICAgKiAodW5kZXIgXCJzZW1pLXJlbGF0ZWQgZnVuIGZhY3RcIikgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKlxuICAgICAqIFdoZW4gd29ya2luZyB3aXRoIEhUTUwgeW91IHNob3VsZCBhbHdheXNcbiAgICAgKiBbcXVvdGUgYXR0cmlidXRlIHZhbHVlc10oaHR0cDovL3dvbmtvLmNvbS9wb3N0L2h0bWwtZXNjYXBpbmcpIHRvIHJlZHVjZVxuICAgICAqIFhTUyB2ZWN0b3JzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGVzY2FwZS5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBlc2NhcGVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5lc2NhcGUoJ2ZyZWQsIGJhcm5leSwgJiBwZWJibGVzJyk7XG4gICAgICogLy8gPT4gJ2ZyZWQsIGJhcm5leSwgJmFtcDsgcGViYmxlcydcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlc2NhcGUoc3RyaW5nKSB7XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgcmV0dXJuIChzdHJpbmcgJiYgcmVIYXNVbmVzY2FwZWRIdG1sLnRlc3Qoc3RyaW5nKSlcbiAgICAgICAgPyBzdHJpbmcucmVwbGFjZShyZVVuZXNjYXBlZEh0bWwsIGVzY2FwZUh0bWxDaGFyKVxuICAgICAgICA6IHN0cmluZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFc2NhcGVzIHRoZSBgUmVnRXhwYCBzcGVjaWFsIGNoYXJhY3RlcnMgXCJeXCIsIFwiJFwiLCBcIlxcXCIsIFwiLlwiLCBcIipcIiwgXCIrXCIsXG4gICAgICogXCI/XCIsIFwiKFwiLCBcIilcIiwgXCJbXCIsIFwiXVwiLCBcIntcIiwgXCJ9XCIsIGFuZCBcInxcIiBpbiBgc3RyaW5nYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBlc2NhcGUuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZXNjYXBlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZXNjYXBlUmVnRXhwKCdbbG9kYXNoXShodHRwczovL2xvZGFzaC5jb20vKScpO1xuICAgICAqIC8vID0+ICdcXFtsb2Rhc2hcXF1cXChodHRwczovL2xvZGFzaFxcLmNvbS9cXCknXG4gICAgICovXG4gICAgZnVuY3Rpb24gZXNjYXBlUmVnRXhwKHN0cmluZykge1xuICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIHJldHVybiAoc3RyaW5nICYmIHJlSGFzUmVnRXhwQ2hhci50ZXN0KHN0cmluZykpXG4gICAgICAgID8gc3RyaW5nLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXCQmJylcbiAgICAgICAgOiBzdHJpbmc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHN0cmluZ2AgdG9cbiAgICAgKiBba2ViYWIgY2FzZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGV0dGVyX2Nhc2UjU3BlY2lhbF9jYXNlX3N0eWxlcykuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBrZWJhYiBjYXNlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ua2ViYWJDYXNlKCdGb28gQmFyJyk7XG4gICAgICogLy8gPT4gJ2Zvby1iYXInXG4gICAgICpcbiAgICAgKiBfLmtlYmFiQ2FzZSgnZm9vQmFyJyk7XG4gICAgICogLy8gPT4gJ2Zvby1iYXInXG4gICAgICpcbiAgICAgKiBfLmtlYmFiQ2FzZSgnX19GT09fQkFSX18nKTtcbiAgICAgKiAvLyA9PiAnZm9vLWJhcidcbiAgICAgKi9cbiAgICB2YXIga2ViYWJDYXNlID0gY3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsIHdvcmQsIGluZGV4KSB7XG4gICAgICByZXR1cm4gcmVzdWx0ICsgKGluZGV4ID8gJy0nIDogJycpICsgd29yZC50b0xvd2VyQ2FzZSgpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHN0cmluZ2AsIGFzIHNwYWNlIHNlcGFyYXRlZCB3b3JkcywgdG8gbG93ZXIgY2FzZS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGxvd2VyIGNhc2VkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5sb3dlckNhc2UoJy0tRm9vLUJhci0tJyk7XG4gICAgICogLy8gPT4gJ2ZvbyBiYXInXG4gICAgICpcbiAgICAgKiBfLmxvd2VyQ2FzZSgnZm9vQmFyJyk7XG4gICAgICogLy8gPT4gJ2ZvbyBiYXInXG4gICAgICpcbiAgICAgKiBfLmxvd2VyQ2FzZSgnX19GT09fQkFSX18nKTtcbiAgICAgKiAvLyA9PiAnZm9vIGJhcidcbiAgICAgKi9cbiAgICB2YXIgbG93ZXJDYXNlID0gY3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsIHdvcmQsIGluZGV4KSB7XG4gICAgICByZXR1cm4gcmVzdWx0ICsgKGluZGV4ID8gJyAnIDogJycpICsgd29yZC50b0xvd2VyQ2FzZSgpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBgc3RyaW5nYCB0byBsb3dlciBjYXNlLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5sb3dlckZpcnN0KCdGcmVkJyk7XG4gICAgICogLy8gPT4gJ2ZyZWQnXG4gICAgICpcbiAgICAgKiBfLmxvd2VyRmlyc3QoJ0ZSRUQnKTtcbiAgICAgKiAvLyA9PiAnZlJFRCdcbiAgICAgKi9cbiAgICB2YXIgbG93ZXJGaXJzdCA9IGNyZWF0ZUNhc2VGaXJzdCgndG9Mb3dlckNhc2UnKTtcblxuICAgIC8qKlxuICAgICAqIFBhZHMgYHN0cmluZ2Agb24gdGhlIGxlZnQgYW5kIHJpZ2h0IHNpZGVzIGlmIGl0J3Mgc2hvcnRlciB0aGFuIGBsZW5ndGhgLlxuICAgICAqIFBhZGRpbmcgY2hhcmFjdGVycyBhcmUgdHJ1bmNhdGVkIGlmIHRoZXkgY2FuJ3QgYmUgZXZlbmx5IGRpdmlkZWQgYnkgYGxlbmd0aGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gcGFkLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPTBdIFRoZSBwYWRkaW5nIGxlbmd0aC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2NoYXJzPScgJ10gVGhlIHN0cmluZyB1c2VkIGFzIHBhZGRpbmcuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcGFkZGVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5wYWQoJ2FiYycsIDgpO1xuICAgICAqIC8vID0+ICcgIGFiYyAgICdcbiAgICAgKlxuICAgICAqIF8ucGFkKCdhYmMnLCA4LCAnXy0nKTtcbiAgICAgKiAvLyA9PiAnXy1hYmNfLV8nXG4gICAgICpcbiAgICAgKiBfLnBhZCgnYWJjJywgMyk7XG4gICAgICogLy8gPT4gJ2FiYydcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwYWQoc3RyaW5nLCBsZW5ndGgsIGNoYXJzKSB7XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgbGVuZ3RoID0gdG9JbnRlZ2VyKGxlbmd0aCk7XG5cbiAgICAgIHZhciBzdHJMZW5ndGggPSBsZW5ndGggPyBzdHJpbmdTaXplKHN0cmluZykgOiAwO1xuICAgICAgaWYgKCFsZW5ndGggfHwgc3RyTGVuZ3RoID49IGxlbmd0aCkge1xuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgICAgfVxuICAgICAgdmFyIG1pZCA9IChsZW5ndGggLSBzdHJMZW5ndGgpIC8gMjtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGNyZWF0ZVBhZGRpbmcobmF0aXZlRmxvb3IobWlkKSwgY2hhcnMpICtcbiAgICAgICAgc3RyaW5nICtcbiAgICAgICAgY3JlYXRlUGFkZGluZyhuYXRpdmVDZWlsKG1pZCksIGNoYXJzKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYWRzIGBzdHJpbmdgIG9uIHRoZSByaWdodCBzaWRlIGlmIGl0J3Mgc2hvcnRlciB0aGFuIGBsZW5ndGhgLiBQYWRkaW5nXG4gICAgICogY2hhcmFjdGVycyBhcmUgdHJ1bmNhdGVkIGlmIHRoZXkgZXhjZWVkIGBsZW5ndGhgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHBhZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD0wXSBUaGUgcGFkZGluZyBsZW5ndGguXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtjaGFycz0nICddIFRoZSBzdHJpbmcgdXNlZCBhcyBwYWRkaW5nLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHBhZGRlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ucGFkRW5kKCdhYmMnLCA2KTtcbiAgICAgKiAvLyA9PiAnYWJjICAgJ1xuICAgICAqXG4gICAgICogXy5wYWRFbmQoJ2FiYycsIDYsICdfLScpO1xuICAgICAqIC8vID0+ICdhYmNfLV8nXG4gICAgICpcbiAgICAgKiBfLnBhZEVuZCgnYWJjJywgMyk7XG4gICAgICogLy8gPT4gJ2FiYydcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwYWRFbmQoc3RyaW5nLCBsZW5ndGgsIGNoYXJzKSB7XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgbGVuZ3RoID0gdG9JbnRlZ2VyKGxlbmd0aCk7XG5cbiAgICAgIHZhciBzdHJMZW5ndGggPSBsZW5ndGggPyBzdHJpbmdTaXplKHN0cmluZykgOiAwO1xuICAgICAgcmV0dXJuIChsZW5ndGggJiYgc3RyTGVuZ3RoIDwgbGVuZ3RoKVxuICAgICAgICA/IChzdHJpbmcgKyBjcmVhdGVQYWRkaW5nKGxlbmd0aCAtIHN0ckxlbmd0aCwgY2hhcnMpKVxuICAgICAgICA6IHN0cmluZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYWRzIGBzdHJpbmdgIG9uIHRoZSBsZWZ0IHNpZGUgaWYgaXQncyBzaG9ydGVyIHRoYW4gYGxlbmd0aGAuIFBhZGRpbmdcbiAgICAgKiBjaGFyYWN0ZXJzIGFyZSB0cnVuY2F0ZWQgaWYgdGhleSBleGNlZWQgYGxlbmd0aGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gcGFkLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPTBdIFRoZSBwYWRkaW5nIGxlbmd0aC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2NoYXJzPScgJ10gVGhlIHN0cmluZyB1c2VkIGFzIHBhZGRpbmcuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcGFkZGVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5wYWRTdGFydCgnYWJjJywgNik7XG4gICAgICogLy8gPT4gJyAgIGFiYydcbiAgICAgKlxuICAgICAqIF8ucGFkU3RhcnQoJ2FiYycsIDYsICdfLScpO1xuICAgICAqIC8vID0+ICdfLV9hYmMnXG4gICAgICpcbiAgICAgKiBfLnBhZFN0YXJ0KCdhYmMnLCAzKTtcbiAgICAgKiAvLyA9PiAnYWJjJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHBhZFN0YXJ0KHN0cmluZywgbGVuZ3RoLCBjaGFycykge1xuICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIGxlbmd0aCA9IHRvSW50ZWdlcihsZW5ndGgpO1xuXG4gICAgICB2YXIgc3RyTGVuZ3RoID0gbGVuZ3RoID8gc3RyaW5nU2l6ZShzdHJpbmcpIDogMDtcbiAgICAgIHJldHVybiAobGVuZ3RoICYmIHN0ckxlbmd0aCA8IGxlbmd0aClcbiAgICAgICAgPyAoY3JlYXRlUGFkZGluZyhsZW5ndGggLSBzdHJMZW5ndGgsIGNoYXJzKSArIHN0cmluZylcbiAgICAgICAgOiBzdHJpbmc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHN0cmluZ2AgdG8gYW4gaW50ZWdlciBvZiB0aGUgc3BlY2lmaWVkIHJhZGl4LiBJZiBgcmFkaXhgIGlzXG4gICAgICogYHVuZGVmaW5lZGAgb3IgYDBgLCBhIGByYWRpeGAgb2YgYDEwYCBpcyB1c2VkIHVubGVzcyBgdmFsdWVgIGlzIGFcbiAgICAgKiBoZXhhZGVjaW1hbCwgaW4gd2hpY2ggY2FzZSBhIGByYWRpeGAgb2YgYDE2YCBpcyB1c2VkLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGFsaWducyB3aXRoIHRoZVxuICAgICAqIFtFUzUgaW1wbGVtZW50YXRpb25dKGh0dHBzOi8vZXM1LmdpdGh1Yi5pby8jeDE1LjEuMi4yKSBvZiBgcGFyc2VJbnRgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDEuMS4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbcmFkaXg9MTBdIFRoZSByYWRpeCB0byBpbnRlcnByZXQgYHZhbHVlYCBieS5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBpbnRlZ2VyLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnBhcnNlSW50KCcwOCcpO1xuICAgICAqIC8vID0+IDhcbiAgICAgKlxuICAgICAqIF8ubWFwKFsnNicsICcwOCcsICcxMCddLCBfLnBhcnNlSW50KTtcbiAgICAgKiAvLyA9PiBbNiwgOCwgMTBdXG4gICAgICovXG4gICAgZnVuY3Rpb24gcGFyc2VJbnQoc3RyaW5nLCByYWRpeCwgZ3VhcmQpIHtcbiAgICAgIGlmIChndWFyZCB8fCByYWRpeCA9PSBudWxsKSB7XG4gICAgICAgIHJhZGl4ID0gMDtcbiAgICAgIH0gZWxzZSBpZiAocmFkaXgpIHtcbiAgICAgICAgcmFkaXggPSArcmFkaXg7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmF0aXZlUGFyc2VJbnQodG9TdHJpbmcoc3RyaW5nKS5yZXBsYWNlKHJlVHJpbVN0YXJ0LCAnJyksIHJhZGl4IHx8IDApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlcGVhdHMgdGhlIGdpdmVuIHN0cmluZyBgbmAgdGltZXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gcmVwZWF0LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbj0xXSBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdCB0aGUgc3RyaW5nLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmVwZWF0ZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnJlcGVhdCgnKicsIDMpO1xuICAgICAqIC8vID0+ICcqKionXG4gICAgICpcbiAgICAgKiBfLnJlcGVhdCgnYWJjJywgMik7XG4gICAgICogLy8gPT4gJ2FiY2FiYydcbiAgICAgKlxuICAgICAqIF8ucmVwZWF0KCdhYmMnLCAwKTtcbiAgICAgKiAvLyA9PiAnJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlcGVhdChzdHJpbmcsIG4sIGd1YXJkKSB7XG4gICAgICBpZiAoKGd1YXJkID8gaXNJdGVyYXRlZUNhbGwoc3RyaW5nLCBuLCBndWFyZCkgOiBuID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgIG4gPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbiA9IHRvSW50ZWdlcihuKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlUmVwZWF0KHRvU3RyaW5nKHN0cmluZyksIG4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlcGxhY2VzIG1hdGNoZXMgZm9yIGBwYXR0ZXJuYCBpbiBgc3RyaW5nYCB3aXRoIGByZXBsYWNlbWVudGAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgYmFzZWQgb25cbiAgICAgKiBbYFN0cmluZyNyZXBsYWNlYF0oaHR0cHM6Ly9tZG4uaW8vU3RyaW5nL3JlcGxhY2UpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge1JlZ0V4cHxzdHJpbmd9IHBhdHRlcm4gVGhlIHBhdHRlcm4gdG8gcmVwbGFjZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufHN0cmluZ30gcmVwbGFjZW1lbnQgVGhlIG1hdGNoIHJlcGxhY2VtZW50LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIG1vZGlmaWVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5yZXBsYWNlKCdIaSBGcmVkJywgJ0ZyZWQnLCAnQmFybmV5Jyk7XG4gICAgICogLy8gPT4gJ0hpIEJhcm5leSdcbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZXBsYWNlKCkge1xuICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgICAgc3RyaW5nID0gdG9TdHJpbmcoYXJnc1swXSk7XG5cbiAgICAgIHJldHVybiBhcmdzLmxlbmd0aCA8IDMgPyBzdHJpbmcgOiBzdHJpbmcucmVwbGFjZShhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgc3RyaW5nYCB0b1xuICAgICAqIFtzbmFrZSBjYXNlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TbmFrZV9jYXNlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNuYWtlIGNhc2VkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zbmFrZUNhc2UoJ0ZvbyBCYXInKTtcbiAgICAgKiAvLyA9PiAnZm9vX2JhcidcbiAgICAgKlxuICAgICAqIF8uc25ha2VDYXNlKCdmb29CYXInKTtcbiAgICAgKiAvLyA9PiAnZm9vX2JhcidcbiAgICAgKlxuICAgICAqIF8uc25ha2VDYXNlKCctLUZPTy1CQVItLScpO1xuICAgICAqIC8vID0+ICdmb29fYmFyJ1xuICAgICAqL1xuICAgIHZhciBzbmFrZUNhc2UgPSBjcmVhdGVDb21wb3VuZGVyKGZ1bmN0aW9uKHJlc3VsdCwgd29yZCwgaW5kZXgpIHtcbiAgICAgIHJldHVybiByZXN1bHQgKyAoaW5kZXggPyAnXycgOiAnJykgKyB3b3JkLnRvTG93ZXJDYXNlKCk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBTcGxpdHMgYHN0cmluZ2AgYnkgYHNlcGFyYXRvcmAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgYmFzZWQgb25cbiAgICAgKiBbYFN0cmluZyNzcGxpdGBdKGh0dHBzOi8vbWRuLmlvL1N0cmluZy9zcGxpdCkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gc3BsaXQuXG4gICAgICogQHBhcmFtIHtSZWdFeHB8c3RyaW5nfSBzZXBhcmF0b3IgVGhlIHNlcGFyYXRvciBwYXR0ZXJuIHRvIHNwbGl0IGJ5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGltaXRdIFRoZSBsZW5ndGggdG8gdHJ1bmNhdGUgcmVzdWx0cyB0by5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHN0cmluZyBzZWdtZW50cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zcGxpdCgnYS1iLWMnLCAnLScsIDIpO1xuICAgICAqIC8vID0+IFsnYScsICdiJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzcGxpdChzdHJpbmcsIHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIGlmIChsaW1pdCAmJiB0eXBlb2YgbGltaXQgIT0gJ251bWJlcicgJiYgaXNJdGVyYXRlZUNhbGwoc3RyaW5nLCBzZXBhcmF0b3IsIGxpbWl0KSkge1xuICAgICAgICBzZXBhcmF0b3IgPSBsaW1pdCA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGxpbWl0ID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9BUlJBWV9MRU5HVEggOiBsaW1pdCA+Pj4gMDtcbiAgICAgIGlmICghbGltaXQpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIGlmIChzdHJpbmcgJiYgKFxuICAgICAgICAgICAgdHlwZW9mIHNlcGFyYXRvciA9PSAnc3RyaW5nJyB8fFxuICAgICAgICAgICAgKHNlcGFyYXRvciAhPSBudWxsICYmICFpc1JlZ0V4cChzZXBhcmF0b3IpKVxuICAgICAgICAgICkpIHtcbiAgICAgICAgc2VwYXJhdG9yID0gYmFzZVRvU3RyaW5nKHNlcGFyYXRvcik7XG4gICAgICAgIGlmICghc2VwYXJhdG9yICYmIGhhc1VuaWNvZGUoc3RyaW5nKSkge1xuICAgICAgICAgIHJldHVybiBjYXN0U2xpY2Uoc3RyaW5nVG9BcnJheShzdHJpbmcpLCAwLCBsaW1pdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzdHJpbmcuc3BsaXQoc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHN0cmluZ2AgdG9cbiAgICAgKiBbc3RhcnQgY2FzZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGV0dGVyX2Nhc2UjU3R5bGlzdGljX29yX3NwZWNpYWxpc2VkX3VzYWdlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjEuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0YXJ0IGNhc2VkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zdGFydENhc2UoJy0tZm9vLWJhci0tJyk7XG4gICAgICogLy8gPT4gJ0ZvbyBCYXInXG4gICAgICpcbiAgICAgKiBfLnN0YXJ0Q2FzZSgnZm9vQmFyJyk7XG4gICAgICogLy8gPT4gJ0ZvbyBCYXInXG4gICAgICpcbiAgICAgKiBfLnN0YXJ0Q2FzZSgnX19GT09fQkFSX18nKTtcbiAgICAgKiAvLyA9PiAnRk9PIEJBUidcbiAgICAgKi9cbiAgICB2YXIgc3RhcnRDYXNlID0gY3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsIHdvcmQsIGluZGV4KSB7XG4gICAgICByZXR1cm4gcmVzdWx0ICsgKGluZGV4ID8gJyAnIDogJycpICsgdXBwZXJGaXJzdCh3b3JkKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgc3RyaW5nYCBzdGFydHMgd2l0aCB0aGUgZ2l2ZW4gdGFyZ2V0IHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdGFyZ2V0XSBUaGUgc3RyaW5nIHRvIHNlYXJjaCBmb3IuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtwb3NpdGlvbj0wXSBUaGUgcG9zaXRpb24gdG8gc2VhcmNoIGZyb20uXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBzdHJpbmdgIHN0YXJ0cyB3aXRoIGB0YXJnZXRgLFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc3RhcnRzV2l0aCgnYWJjJywgJ2EnKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLnN0YXJ0c1dpdGgoJ2FiYycsICdiJyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uc3RhcnRzV2l0aCgnYWJjJywgJ2InLCAxKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3RhcnRzV2l0aChzdHJpbmcsIHRhcmdldCwgcG9zaXRpb24pIHtcbiAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uID09IG51bGxcbiAgICAgICAgPyAwXG4gICAgICAgIDogYmFzZUNsYW1wKHRvSW50ZWdlcihwb3NpdGlvbiksIDAsIHN0cmluZy5sZW5ndGgpO1xuXG4gICAgICB0YXJnZXQgPSBiYXNlVG9TdHJpbmcodGFyZ2V0KTtcbiAgICAgIHJldHVybiBzdHJpbmcuc2xpY2UocG9zaXRpb24sIHBvc2l0aW9uICsgdGFyZ2V0Lmxlbmd0aCkgPT0gdGFyZ2V0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjb21waWxlZCB0ZW1wbGF0ZSBmdW5jdGlvbiB0aGF0IGNhbiBpbnRlcnBvbGF0ZSBkYXRhIHByb3BlcnRpZXNcbiAgICAgKiBpbiBcImludGVycG9sYXRlXCIgZGVsaW1pdGVycywgSFRNTC1lc2NhcGUgaW50ZXJwb2xhdGVkIGRhdGEgcHJvcGVydGllcyBpblxuICAgICAqIFwiZXNjYXBlXCIgZGVsaW1pdGVycywgYW5kIGV4ZWN1dGUgSmF2YVNjcmlwdCBpbiBcImV2YWx1YXRlXCIgZGVsaW1pdGVycy4gRGF0YVxuICAgICAqIHByb3BlcnRpZXMgbWF5IGJlIGFjY2Vzc2VkIGFzIGZyZWUgdmFyaWFibGVzIGluIHRoZSB0ZW1wbGF0ZS4gSWYgYSBzZXR0aW5nXG4gICAgICogb2JqZWN0IGlzIGdpdmVuLCBpdCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgYF8udGVtcGxhdGVTZXR0aW5nc2AgdmFsdWVzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIEluIHRoZSBkZXZlbG9wbWVudCBidWlsZCBgXy50ZW1wbGF0ZWAgdXRpbGl6ZXNcbiAgICAgKiBbc291cmNlVVJMc10oaHR0cDovL3d3dy5odG1sNXJvY2tzLmNvbS9lbi90dXRvcmlhbHMvZGV2ZWxvcGVydG9vbHMvc291cmNlbWFwcy8jdG9jLXNvdXJjZXVybClcbiAgICAgKiBmb3IgZWFzaWVyIGRlYnVnZ2luZy5cbiAgICAgKlxuICAgICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHByZWNvbXBpbGluZyB0ZW1wbGF0ZXMgc2VlXG4gICAgICogW2xvZGFzaCdzIGN1c3RvbSBidWlsZHMgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9sb2Rhc2guY29tL2N1c3RvbS1idWlsZHMpLlxuICAgICAqXG4gICAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gQ2hyb21lIGV4dGVuc2lvbiBzYW5kYm94ZXMgc2VlXG4gICAgICogW0Nocm9tZSdzIGV4dGVuc2lvbnMgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kZXZlbG9wZXIuY2hyb21lLmNvbS9leHRlbnNpb25zL3NhbmRib3hpbmdFdmFsKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHRlbXBsYXRlIHN0cmluZy5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIFRoZSBvcHRpb25zIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge1JlZ0V4cH0gW29wdGlvbnMuZXNjYXBlPV8udGVtcGxhdGVTZXR0aW5ncy5lc2NhcGVdXG4gICAgICogIFRoZSBIVE1MIFwiZXNjYXBlXCIgZGVsaW1pdGVyLlxuICAgICAqIEBwYXJhbSB7UmVnRXhwfSBbb3B0aW9ucy5ldmFsdWF0ZT1fLnRlbXBsYXRlU2V0dGluZ3MuZXZhbHVhdGVdXG4gICAgICogIFRoZSBcImV2YWx1YXRlXCIgZGVsaW1pdGVyLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5pbXBvcnRzPV8udGVtcGxhdGVTZXR0aW5ncy5pbXBvcnRzXVxuICAgICAqICBBbiBvYmplY3QgdG8gaW1wb3J0IGludG8gdGhlIHRlbXBsYXRlIGFzIGZyZWUgdmFyaWFibGVzLlxuICAgICAqIEBwYXJhbSB7UmVnRXhwfSBbb3B0aW9ucy5pbnRlcnBvbGF0ZT1fLnRlbXBsYXRlU2V0dGluZ3MuaW50ZXJwb2xhdGVdXG4gICAgICogIFRoZSBcImludGVycG9sYXRlXCIgZGVsaW1pdGVyLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5zb3VyY2VVUkw9J2xvZGFzaC50ZW1wbGF0ZVNvdXJjZXNbbl0nXVxuICAgICAqICBUaGUgc291cmNlVVJMIG9mIHRoZSBjb21waWxlZCB0ZW1wbGF0ZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMudmFyaWFibGU9J29iaiddXG4gICAgICogIFRoZSBkYXRhIG9iamVjdCB2YXJpYWJsZSBuYW1lLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBjb21waWxlZCB0ZW1wbGF0ZSBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gVXNlIHRoZSBcImludGVycG9sYXRlXCIgZGVsaW1pdGVyIHRvIGNyZWF0ZSBhIGNvbXBpbGVkIHRlbXBsYXRlLlxuICAgICAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJ2hlbGxvIDwlPSB1c2VyICU+IScpO1xuICAgICAqIGNvbXBpbGVkKHsgJ3VzZXInOiAnZnJlZCcgfSk7XG4gICAgICogLy8gPT4gJ2hlbGxvIGZyZWQhJ1xuICAgICAqXG4gICAgICogLy8gVXNlIHRoZSBIVE1MIFwiZXNjYXBlXCIgZGVsaW1pdGVyIHRvIGVzY2FwZSBkYXRhIHByb3BlcnR5IHZhbHVlcy5cbiAgICAgKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCc8Yj48JS0gdmFsdWUgJT48L2I+Jyk7XG4gICAgICogY29tcGlsZWQoeyAndmFsdWUnOiAnPHNjcmlwdD4nIH0pO1xuICAgICAqIC8vID0+ICc8Yj4mbHQ7c2NyaXB0Jmd0OzwvYj4nXG4gICAgICpcbiAgICAgKiAvLyBVc2UgdGhlIFwiZXZhbHVhdGVcIiBkZWxpbWl0ZXIgdG8gZXhlY3V0ZSBKYXZhU2NyaXB0IGFuZCBnZW5lcmF0ZSBIVE1MLlxuICAgICAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzwlIF8uZm9yRWFjaCh1c2VycywgZnVuY3Rpb24odXNlcikgeyAlPjxsaT48JS0gdXNlciAlPjwvbGk+PCUgfSk7ICU+Jyk7XG4gICAgICogY29tcGlsZWQoeyAndXNlcnMnOiBbJ2ZyZWQnLCAnYmFybmV5J10gfSk7XG4gICAgICogLy8gPT4gJzxsaT5mcmVkPC9saT48bGk+YmFybmV5PC9saT4nXG4gICAgICpcbiAgICAgKiAvLyBVc2UgdGhlIGludGVybmFsIGBwcmludGAgZnVuY3Rpb24gaW4gXCJldmFsdWF0ZVwiIGRlbGltaXRlcnMuXG4gICAgICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnPCUgcHJpbnQoXCJoZWxsbyBcIiArIHVzZXIpOyAlPiEnKTtcbiAgICAgKiBjb21waWxlZCh7ICd1c2VyJzogJ2Jhcm5leScgfSk7XG4gICAgICogLy8gPT4gJ2hlbGxvIGJhcm5leSEnXG4gICAgICpcbiAgICAgKiAvLyBVc2UgdGhlIEVTIHRlbXBsYXRlIGxpdGVyYWwgZGVsaW1pdGVyIGFzIGFuIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXIuXG4gICAgICogLy8gRGlzYWJsZSBzdXBwb3J0IGJ5IHJlcGxhY2luZyB0aGUgXCJpbnRlcnBvbGF0ZVwiIGRlbGltaXRlci5cbiAgICAgKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyAkeyB1c2VyIH0hJyk7XG4gICAgICogY29tcGlsZWQoeyAndXNlcic6ICdwZWJibGVzJyB9KTtcbiAgICAgKiAvLyA9PiAnaGVsbG8gcGViYmxlcyEnXG4gICAgICpcbiAgICAgKiAvLyBVc2UgYmFja3NsYXNoZXMgdG8gdHJlYXQgZGVsaW1pdGVycyBhcyBwbGFpbiB0ZXh0LlxuICAgICAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzwlPSBcIlxcXFw8JS0gdmFsdWUgJVxcXFw+XCIgJT4nKTtcbiAgICAgKiBjb21waWxlZCh7ICd2YWx1ZSc6ICdpZ25vcmVkJyB9KTtcbiAgICAgKiAvLyA9PiAnPCUtIHZhbHVlICU+J1xuICAgICAqXG4gICAgICogLy8gVXNlIHRoZSBgaW1wb3J0c2Agb3B0aW9uIHRvIGltcG9ydCBgalF1ZXJ5YCBhcyBganFgLlxuICAgICAqIHZhciB0ZXh0ID0gJzwlIGpxLmVhY2godXNlcnMsIGZ1bmN0aW9uKHVzZXIpIHsgJT48bGk+PCUtIHVzZXIgJT48L2xpPjwlIH0pOyAlPic7XG4gICAgICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSh0ZXh0LCB7ICdpbXBvcnRzJzogeyAnanEnOiBqUXVlcnkgfSB9KTtcbiAgICAgKiBjb21waWxlZCh7ICd1c2Vycyc6IFsnZnJlZCcsICdiYXJuZXknXSB9KTtcbiAgICAgKiAvLyA9PiAnPGxpPmZyZWQ8L2xpPjxsaT5iYXJuZXk8L2xpPidcbiAgICAgKlxuICAgICAqIC8vIFVzZSB0aGUgYHNvdXJjZVVSTGAgb3B0aW9uIHRvIHNwZWNpZnkgYSBjdXN0b20gc291cmNlVVJMIGZvciB0aGUgdGVtcGxhdGUuXG4gICAgICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnaGVsbG8gPCU9IHVzZXIgJT4hJywgeyAnc291cmNlVVJMJzogJy9iYXNpYy9ncmVldGluZy5qc3QnIH0pO1xuICAgICAqIGNvbXBpbGVkKGRhdGEpO1xuICAgICAqIC8vID0+IEZpbmQgdGhlIHNvdXJjZSBvZiBcImdyZWV0aW5nLmpzdFwiIHVuZGVyIHRoZSBTb3VyY2VzIHRhYiBvciBSZXNvdXJjZXMgcGFuZWwgb2YgdGhlIHdlYiBpbnNwZWN0b3IuXG4gICAgICpcbiAgICAgKiAvLyBVc2UgdGhlIGB2YXJpYWJsZWAgb3B0aW9uIHRvIGVuc3VyZSBhIHdpdGgtc3RhdGVtZW50IGlzbid0IHVzZWQgaW4gdGhlIGNvbXBpbGVkIHRlbXBsYXRlLlxuICAgICAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJ2hpIDwlPSBkYXRhLnVzZXIgJT4hJywgeyAndmFyaWFibGUnOiAnZGF0YScgfSk7XG4gICAgICogY29tcGlsZWQuc291cmNlO1xuICAgICAqIC8vID0+IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgKiAvLyAgIHZhciBfX3QsIF9fcCA9ICcnO1xuICAgICAqIC8vICAgX19wICs9ICdoaSAnICsgKChfX3QgPSAoIGRhdGEudXNlciApKSA9PSBudWxsID8gJycgOiBfX3QpICsgJyEnO1xuICAgICAqIC8vICAgcmV0dXJuIF9fcDtcbiAgICAgKiAvLyB9XG4gICAgICpcbiAgICAgKiAvLyBVc2UgY3VzdG9tIHRlbXBsYXRlIGRlbGltaXRlcnMuXG4gICAgICogXy50ZW1wbGF0ZVNldHRpbmdzLmludGVycG9sYXRlID0gL3t7KFtcXHNcXFNdKz8pfX0vZztcbiAgICAgKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyB7eyB1c2VyIH19IScpO1xuICAgICAqIGNvbXBpbGVkKHsgJ3VzZXInOiAnbXVzdGFjaGUnIH0pO1xuICAgICAqIC8vID0+ICdoZWxsbyBtdXN0YWNoZSEnXG4gICAgICpcbiAgICAgKiAvLyBVc2UgdGhlIGBzb3VyY2VgIHByb3BlcnR5IHRvIGlubGluZSBjb21waWxlZCB0ZW1wbGF0ZXMgZm9yIG1lYW5pbmdmdWxcbiAgICAgKiAvLyBsaW5lIG51bWJlcnMgaW4gZXJyb3IgbWVzc2FnZXMgYW5kIHN0YWNrIHRyYWNlcy5cbiAgICAgKiBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAnanN0LmpzJyksICdcXFxuICAgICAqICAgdmFyIEpTVCA9IHtcXFxuICAgICAqICAgICBcIm1haW5cIjogJyArIF8udGVtcGxhdGUobWFpblRleHQpLnNvdXJjZSArICdcXFxuICAgICAqICAgfTtcXFxuICAgICAqICcpO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRlbXBsYXRlKHN0cmluZywgb3B0aW9ucywgZ3VhcmQpIHtcbiAgICAgIC8vIEJhc2VkIG9uIEpvaG4gUmVzaWcncyBgdG1wbGAgaW1wbGVtZW50YXRpb25cbiAgICAgIC8vIChodHRwOi8vZWpvaG4ub3JnL2Jsb2cvamF2YXNjcmlwdC1taWNyby10ZW1wbGF0aW5nLylcbiAgICAgIC8vIGFuZCBMYXVyYSBEb2t0b3JvdmEncyBkb1QuanMgKGh0dHBzOi8vZ2l0aHViLmNvbS9vbGFkby9kb1QpLlxuICAgICAgdmFyIHNldHRpbmdzID0gbG9kYXNoLnRlbXBsYXRlU2V0dGluZ3M7XG5cbiAgICAgIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbChzdHJpbmcsIG9wdGlvbnMsIGd1YXJkKSkge1xuICAgICAgICBvcHRpb25zID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIG9wdGlvbnMgPSBhc3NpZ25JbldpdGgoe30sIG9wdGlvbnMsIHNldHRpbmdzLCBjdXN0b21EZWZhdWx0c0Fzc2lnbkluKTtcblxuICAgICAgdmFyIGltcG9ydHMgPSBhc3NpZ25JbldpdGgoe30sIG9wdGlvbnMuaW1wb3J0cywgc2V0dGluZ3MuaW1wb3J0cywgY3VzdG9tRGVmYXVsdHNBc3NpZ25JbiksXG4gICAgICAgICAgaW1wb3J0c0tleXMgPSBrZXlzKGltcG9ydHMpLFxuICAgICAgICAgIGltcG9ydHNWYWx1ZXMgPSBiYXNlVmFsdWVzKGltcG9ydHMsIGltcG9ydHNLZXlzKTtcblxuICAgICAgdmFyIGlzRXNjYXBpbmcsXG4gICAgICAgICAgaXNFdmFsdWF0aW5nLFxuICAgICAgICAgIGluZGV4ID0gMCxcbiAgICAgICAgICBpbnRlcnBvbGF0ZSA9IG9wdGlvbnMuaW50ZXJwb2xhdGUgfHwgcmVOb01hdGNoLFxuICAgICAgICAgIHNvdXJjZSA9IFwiX19wICs9ICdcIjtcblxuICAgICAgLy8gQ29tcGlsZSB0aGUgcmVnZXhwIHRvIG1hdGNoIGVhY2ggZGVsaW1pdGVyLlxuICAgICAgdmFyIHJlRGVsaW1pdGVycyA9IFJlZ0V4cChcbiAgICAgICAgKG9wdGlvbnMuZXNjYXBlIHx8IHJlTm9NYXRjaCkuc291cmNlICsgJ3wnICtcbiAgICAgICAgaW50ZXJwb2xhdGUuc291cmNlICsgJ3wnICtcbiAgICAgICAgKGludGVycG9sYXRlID09PSByZUludGVycG9sYXRlID8gcmVFc1RlbXBsYXRlIDogcmVOb01hdGNoKS5zb3VyY2UgKyAnfCcgK1xuICAgICAgICAob3B0aW9ucy5ldmFsdWF0ZSB8fCByZU5vTWF0Y2gpLnNvdXJjZSArICd8JCdcbiAgICAgICwgJ2cnKTtcblxuICAgICAgLy8gVXNlIGEgc291cmNlVVJMIGZvciBlYXNpZXIgZGVidWdnaW5nLlxuICAgICAgLy8gVGhlIHNvdXJjZVVSTCBnZXRzIGluamVjdGVkIGludG8gdGhlIHNvdXJjZSB0aGF0J3MgZXZhbC1lZCwgc28gYmUgY2FyZWZ1bFxuICAgICAgLy8gd2l0aCBsb29rdXAgKGluIGNhc2Ugb2YgZS5nLiBwcm90b3R5cGUgcG9sbHV0aW9uKSwgYW5kIHN0cmlwIG5ld2xpbmVzIGlmIGFueS5cbiAgICAgIC8vIEEgbmV3bGluZSB3b3VsZG4ndCBiZSBhIHZhbGlkIHNvdXJjZVVSTCBhbnl3YXksIGFuZCBpdCdkIGVuYWJsZSBjb2RlIGluamVjdGlvbi5cbiAgICAgIHZhciBzb3VyY2VVUkwgPSAnLy8jIHNvdXJjZVVSTD0nICtcbiAgICAgICAgKGhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgJ3NvdXJjZVVSTCcpXG4gICAgICAgICAgPyAob3B0aW9ucy5zb3VyY2VVUkwgKyAnJykucmVwbGFjZSgvW1xcclxcbl0vZywgJyAnKVxuICAgICAgICAgIDogKCdsb2Rhc2gudGVtcGxhdGVTb3VyY2VzWycgKyAoKyt0ZW1wbGF0ZUNvdW50ZXIpICsgJ10nKVxuICAgICAgICApICsgJ1xcbic7XG5cbiAgICAgIHN0cmluZy5yZXBsYWNlKHJlRGVsaW1pdGVycywgZnVuY3Rpb24obWF0Y2gsIGVzY2FwZVZhbHVlLCBpbnRlcnBvbGF0ZVZhbHVlLCBlc1RlbXBsYXRlVmFsdWUsIGV2YWx1YXRlVmFsdWUsIG9mZnNldCkge1xuICAgICAgICBpbnRlcnBvbGF0ZVZhbHVlIHx8IChpbnRlcnBvbGF0ZVZhbHVlID0gZXNUZW1wbGF0ZVZhbHVlKTtcblxuICAgICAgICAvLyBFc2NhcGUgY2hhcmFjdGVycyB0aGF0IGNhbid0IGJlIGluY2x1ZGVkIGluIHN0cmluZyBsaXRlcmFscy5cbiAgICAgICAgc291cmNlICs9IHN0cmluZy5zbGljZShpbmRleCwgb2Zmc2V0KS5yZXBsYWNlKHJlVW5lc2NhcGVkU3RyaW5nLCBlc2NhcGVTdHJpbmdDaGFyKTtcblxuICAgICAgICAvLyBSZXBsYWNlIGRlbGltaXRlcnMgd2l0aCBzbmlwcGV0cy5cbiAgICAgICAgaWYgKGVzY2FwZVZhbHVlKSB7XG4gICAgICAgICAgaXNFc2NhcGluZyA9IHRydWU7XG4gICAgICAgICAgc291cmNlICs9IFwiJyArXFxuX19lKFwiICsgZXNjYXBlVmFsdWUgKyBcIikgK1xcbidcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZhbHVhdGVWYWx1ZSkge1xuICAgICAgICAgIGlzRXZhbHVhdGluZyA9IHRydWU7XG4gICAgICAgICAgc291cmNlICs9IFwiJztcXG5cIiArIGV2YWx1YXRlVmFsdWUgKyBcIjtcXG5fX3AgKz0gJ1wiO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnRlcnBvbGF0ZVZhbHVlKSB7XG4gICAgICAgICAgc291cmNlICs9IFwiJyArXFxuKChfX3QgPSAoXCIgKyBpbnRlcnBvbGF0ZVZhbHVlICsgXCIpKSA9PSBudWxsID8gJycgOiBfX3QpICtcXG4nXCI7XG4gICAgICAgIH1cbiAgICAgICAgaW5kZXggPSBvZmZzZXQgKyBtYXRjaC5sZW5ndGg7XG5cbiAgICAgICAgLy8gVGhlIEpTIGVuZ2luZSBlbWJlZGRlZCBpbiBBZG9iZSBwcm9kdWN0cyBuZWVkcyBgbWF0Y2hgIHJldHVybmVkIGluXG4gICAgICAgIC8vIG9yZGVyIHRvIHByb2R1Y2UgdGhlIGNvcnJlY3QgYG9mZnNldGAgdmFsdWUuXG4gICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgIH0pO1xuXG4gICAgICBzb3VyY2UgKz0gXCInO1xcblwiO1xuXG4gICAgICAvLyBJZiBgdmFyaWFibGVgIGlzIG5vdCBzcGVjaWZpZWQgd3JhcCBhIHdpdGgtc3RhdGVtZW50IGFyb3VuZCB0aGUgZ2VuZXJhdGVkXG4gICAgICAvLyBjb2RlIHRvIGFkZCB0aGUgZGF0YSBvYmplY3QgdG8gdGhlIHRvcCBvZiB0aGUgc2NvcGUgY2hhaW4uXG4gICAgICAvLyBMaWtlIHdpdGggc291cmNlVVJMLCB3ZSB0YWtlIGNhcmUgdG8gbm90IGNoZWNrIHRoZSBvcHRpb24ncyBwcm90b3R5cGUsXG4gICAgICAvLyBhcyB0aGlzIGNvbmZpZ3VyYXRpb24gaXMgYSBjb2RlIGluamVjdGlvbiB2ZWN0b3IuXG4gICAgICB2YXIgdmFyaWFibGUgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMsICd2YXJpYWJsZScpICYmIG9wdGlvbnMudmFyaWFibGU7XG4gICAgICBpZiAoIXZhcmlhYmxlKSB7XG4gICAgICAgIHNvdXJjZSA9ICd3aXRoIChvYmopIHtcXG4nICsgc291cmNlICsgJ1xcbn1cXG4nO1xuICAgICAgfVxuICAgICAgLy8gQ2xlYW51cCBjb2RlIGJ5IHN0cmlwcGluZyBlbXB0eSBzdHJpbmdzLlxuICAgICAgc291cmNlID0gKGlzRXZhbHVhdGluZyA/IHNvdXJjZS5yZXBsYWNlKHJlRW1wdHlTdHJpbmdMZWFkaW5nLCAnJykgOiBzb3VyY2UpXG4gICAgICAgIC5yZXBsYWNlKHJlRW1wdHlTdHJpbmdNaWRkbGUsICckMScpXG4gICAgICAgIC5yZXBsYWNlKHJlRW1wdHlTdHJpbmdUcmFpbGluZywgJyQxOycpO1xuXG4gICAgICAvLyBGcmFtZSBjb2RlIGFzIHRoZSBmdW5jdGlvbiBib2R5LlxuICAgICAgc291cmNlID0gJ2Z1bmN0aW9uKCcgKyAodmFyaWFibGUgfHwgJ29iaicpICsgJykge1xcbicgK1xuICAgICAgICAodmFyaWFibGVcbiAgICAgICAgICA/ICcnXG4gICAgICAgICAgOiAnb2JqIHx8IChvYmogPSB7fSk7XFxuJ1xuICAgICAgICApICtcbiAgICAgICAgXCJ2YXIgX190LCBfX3AgPSAnJ1wiICtcbiAgICAgICAgKGlzRXNjYXBpbmdcbiAgICAgICAgICAgPyAnLCBfX2UgPSBfLmVzY2FwZSdcbiAgICAgICAgICAgOiAnJ1xuICAgICAgICApICtcbiAgICAgICAgKGlzRXZhbHVhdGluZ1xuICAgICAgICAgID8gJywgX19qID0gQXJyYXkucHJvdG90eXBlLmpvaW47XFxuJyArXG4gICAgICAgICAgICBcImZ1bmN0aW9uIHByaW50KCkgeyBfX3AgKz0gX19qLmNhbGwoYXJndW1lbnRzLCAnJykgfVxcblwiXG4gICAgICAgICAgOiAnO1xcbidcbiAgICAgICAgKSArXG4gICAgICAgIHNvdXJjZSArXG4gICAgICAgICdyZXR1cm4gX19wXFxufSc7XG5cbiAgICAgIHZhciByZXN1bHQgPSBhdHRlbXB0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gRnVuY3Rpb24oaW1wb3J0c0tleXMsIHNvdXJjZVVSTCArICdyZXR1cm4gJyArIHNvdXJjZSlcbiAgICAgICAgICAuYXBwbHkodW5kZWZpbmVkLCBpbXBvcnRzVmFsdWVzKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBQcm92aWRlIHRoZSBjb21waWxlZCBmdW5jdGlvbidzIHNvdXJjZSBieSBpdHMgYHRvU3RyaW5nYCBtZXRob2Qgb3JcbiAgICAgIC8vIHRoZSBgc291cmNlYCBwcm9wZXJ0eSBhcyBhIGNvbnZlbmllbmNlIGZvciBpbmxpbmluZyBjb21waWxlZCB0ZW1wbGF0ZXMuXG4gICAgICByZXN1bHQuc291cmNlID0gc291cmNlO1xuICAgICAgaWYgKGlzRXJyb3IocmVzdWx0KSkge1xuICAgICAgICB0aHJvdyByZXN1bHQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGBzdHJpbmdgLCBhcyBhIHdob2xlLCB0byBsb3dlciBjYXNlIGp1c3QgbGlrZVxuICAgICAqIFtTdHJpbmcjdG9Mb3dlckNhc2VdKGh0dHBzOi8vbWRuLmlvL3RvTG93ZXJDYXNlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGxvd2VyIGNhc2VkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50b0xvd2VyKCctLUZvby1CYXItLScpO1xuICAgICAqIC8vID0+ICctLWZvby1iYXItLSdcbiAgICAgKlxuICAgICAqIF8udG9Mb3dlcignZm9vQmFyJyk7XG4gICAgICogLy8gPT4gJ2Zvb2JhcidcbiAgICAgKlxuICAgICAqIF8udG9Mb3dlcignX19GT09fQkFSX18nKTtcbiAgICAgKiAvLyA9PiAnX19mb29fYmFyX18nXG4gICAgICovXG4gICAgZnVuY3Rpb24gdG9Mb3dlcih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRvU3RyaW5nKHZhbHVlKS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGBzdHJpbmdgLCBhcyBhIHdob2xlLCB0byB1cHBlciBjYXNlIGp1c3QgbGlrZVxuICAgICAqIFtTdHJpbmcjdG9VcHBlckNhc2VdKGh0dHBzOi8vbWRuLmlvL3RvVXBwZXJDYXNlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHVwcGVyIGNhc2VkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50b1VwcGVyKCctLWZvby1iYXItLScpO1xuICAgICAqIC8vID0+ICctLUZPTy1CQVItLSdcbiAgICAgKlxuICAgICAqIF8udG9VcHBlcignZm9vQmFyJyk7XG4gICAgICogLy8gPT4gJ0ZPT0JBUidcbiAgICAgKlxuICAgICAqIF8udG9VcHBlcignX19mb29fYmFyX18nKTtcbiAgICAgKiAvLyA9PiAnX19GT09fQkFSX18nXG4gICAgICovXG4gICAgZnVuY3Rpb24gdG9VcHBlcih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRvU3RyaW5nKHZhbHVlKS50b1VwcGVyQ2FzZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSBvciBzcGVjaWZpZWQgY2hhcmFjdGVycyBmcm9tIGBzdHJpbmdgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHRyaW0uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtjaGFycz13aGl0ZXNwYWNlXSBUaGUgY2hhcmFjdGVycyB0byB0cmltLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdHJpbW1lZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udHJpbSgnICBhYmMgICcpO1xuICAgICAqIC8vID0+ICdhYmMnXG4gICAgICpcbiAgICAgKiBfLnRyaW0oJy1fLWFiYy1fLScsICdfLScpO1xuICAgICAqIC8vID0+ICdhYmMnXG4gICAgICpcbiAgICAgKiBfLm1hcChbJyAgZm9vICAnLCAnICBiYXIgICddLCBfLnRyaW0pO1xuICAgICAqIC8vID0+IFsnZm9vJywgJ2JhciddXG4gICAgICovXG4gICAgZnVuY3Rpb24gdHJpbShzdHJpbmcsIGNoYXJzLCBndWFyZCkge1xuICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIGlmIChzdHJpbmcgJiYgKGd1YXJkIHx8IGNoYXJzID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZShyZVRyaW0sICcnKTtcbiAgICAgIH1cbiAgICAgIGlmICghc3RyaW5nIHx8ICEoY2hhcnMgPSBiYXNlVG9TdHJpbmcoY2hhcnMpKSkge1xuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgICAgfVxuICAgICAgdmFyIHN0clN5bWJvbHMgPSBzdHJpbmdUb0FycmF5KHN0cmluZyksXG4gICAgICAgICAgY2hyU3ltYm9scyA9IHN0cmluZ1RvQXJyYXkoY2hhcnMpLFxuICAgICAgICAgIHN0YXJ0ID0gY2hhcnNTdGFydEluZGV4KHN0clN5bWJvbHMsIGNoclN5bWJvbHMpLFxuICAgICAgICAgIGVuZCA9IGNoYXJzRW5kSW5kZXgoc3RyU3ltYm9scywgY2hyU3ltYm9scykgKyAxO1xuXG4gICAgICByZXR1cm4gY2FzdFNsaWNlKHN0clN5bWJvbHMsIHN0YXJ0LCBlbmQpLmpvaW4oJycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdHJhaWxpbmcgd2hpdGVzcGFjZSBvciBzcGVjaWZpZWQgY2hhcmFjdGVycyBmcm9tIGBzdHJpbmdgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHRyaW0uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtjaGFycz13aGl0ZXNwYWNlXSBUaGUgY2hhcmFjdGVycyB0byB0cmltLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdHJpbW1lZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udHJpbUVuZCgnICBhYmMgICcpO1xuICAgICAqIC8vID0+ICcgIGFiYydcbiAgICAgKlxuICAgICAqIF8udHJpbUVuZCgnLV8tYWJjLV8tJywgJ18tJyk7XG4gICAgICogLy8gPT4gJy1fLWFiYydcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0cmltRW5kKHN0cmluZywgY2hhcnMsIGd1YXJkKSB7XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgaWYgKHN0cmluZyAmJiAoZ3VhcmQgfHwgY2hhcnMgPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKHJlVHJpbUVuZCwgJycpO1xuICAgICAgfVxuICAgICAgaWYgKCFzdHJpbmcgfHwgIShjaGFycyA9IGJhc2VUb1N0cmluZyhjaGFycykpKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgICB9XG4gICAgICB2YXIgc3RyU3ltYm9scyA9IHN0cmluZ1RvQXJyYXkoc3RyaW5nKSxcbiAgICAgICAgICBlbmQgPSBjaGFyc0VuZEluZGV4KHN0clN5bWJvbHMsIHN0cmluZ1RvQXJyYXkoY2hhcnMpKSArIDE7XG5cbiAgICAgIHJldHVybiBjYXN0U2xpY2Uoc3RyU3ltYm9scywgMCwgZW5kKS5qb2luKCcnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGxlYWRpbmcgd2hpdGVzcGFjZSBvciBzcGVjaWZpZWQgY2hhcmFjdGVycyBmcm9tIGBzdHJpbmdgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHRyaW0uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtjaGFycz13aGl0ZXNwYWNlXSBUaGUgY2hhcmFjdGVycyB0byB0cmltLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdHJpbW1lZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udHJpbVN0YXJ0KCcgIGFiYyAgJyk7XG4gICAgICogLy8gPT4gJ2FiYyAgJ1xuICAgICAqXG4gICAgICogXy50cmltU3RhcnQoJy1fLWFiYy1fLScsICdfLScpO1xuICAgICAqIC8vID0+ICdhYmMtXy0nXG4gICAgICovXG4gICAgZnVuY3Rpb24gdHJpbVN0YXJ0KHN0cmluZywgY2hhcnMsIGd1YXJkKSB7XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgaWYgKHN0cmluZyAmJiAoZ3VhcmQgfHwgY2hhcnMgPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKHJlVHJpbVN0YXJ0LCAnJyk7XG4gICAgICB9XG4gICAgICBpZiAoIXN0cmluZyB8fCAhKGNoYXJzID0gYmFzZVRvU3RyaW5nKGNoYXJzKSkpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgIH1cbiAgICAgIHZhciBzdHJTeW1ib2xzID0gc3RyaW5nVG9BcnJheShzdHJpbmcpLFxuICAgICAgICAgIHN0YXJ0ID0gY2hhcnNTdGFydEluZGV4KHN0clN5bWJvbHMsIHN0cmluZ1RvQXJyYXkoY2hhcnMpKTtcblxuICAgICAgcmV0dXJuIGNhc3RTbGljZShzdHJTeW1ib2xzLCBzdGFydCkuam9pbignJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJ1bmNhdGVzIGBzdHJpbmdgIGlmIGl0J3MgbG9uZ2VyIHRoYW4gdGhlIGdpdmVuIG1heGltdW0gc3RyaW5nIGxlbmd0aC5cbiAgICAgKiBUaGUgbGFzdCBjaGFyYWN0ZXJzIG9mIHRoZSB0cnVuY2F0ZWQgc3RyaW5nIGFyZSByZXBsYWNlZCB3aXRoIHRoZSBvbWlzc2lvblxuICAgICAqIHN0cmluZyB3aGljaCBkZWZhdWx0cyB0byBcIi4uLlwiLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHRydW5jYXRlLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5sZW5ndGg9MzBdIFRoZSBtYXhpbXVtIHN0cmluZyBsZW5ndGguXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLm9taXNzaW9uPScuLi4nXSBUaGUgc3RyaW5nIHRvIGluZGljYXRlIHRleHQgaXMgb21pdHRlZC5cbiAgICAgKiBAcGFyYW0ge1JlZ0V4cHxzdHJpbmd9IFtvcHRpb25zLnNlcGFyYXRvcl0gVGhlIHNlcGFyYXRvciBwYXR0ZXJuIHRvIHRydW5jYXRlIHRvLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHRydW5jYXRlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udHJ1bmNhdGUoJ2hpLWRpZGRseS1obyB0aGVyZSwgbmVpZ2hib3Jpbm8nKTtcbiAgICAgKiAvLyA9PiAnaGktZGlkZGx5LWhvIHRoZXJlLCBuZWlnaGJvLi4uJ1xuICAgICAqXG4gICAgICogXy50cnVuY2F0ZSgnaGktZGlkZGx5LWhvIHRoZXJlLCBuZWlnaGJvcmlubycsIHtcbiAgICAgKiAgICdsZW5ndGgnOiAyNCxcbiAgICAgKiAgICdzZXBhcmF0b3InOiAnICdcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiAnaGktZGlkZGx5LWhvIHRoZXJlLC4uLidcbiAgICAgKlxuICAgICAqIF8udHJ1bmNhdGUoJ2hpLWRpZGRseS1obyB0aGVyZSwgbmVpZ2hib3Jpbm8nLCB7XG4gICAgICogICAnbGVuZ3RoJzogMjQsXG4gICAgICogICAnc2VwYXJhdG9yJzogLyw/ICsvXG4gICAgICogfSk7XG4gICAgICogLy8gPT4gJ2hpLWRpZGRseS1obyB0aGVyZS4uLidcbiAgICAgKlxuICAgICAqIF8udHJ1bmNhdGUoJ2hpLWRpZGRseS1obyB0aGVyZSwgbmVpZ2hib3Jpbm8nLCB7XG4gICAgICogICAnb21pc3Npb24nOiAnIFsuLi5dJ1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+ICdoaS1kaWRkbHktaG8gdGhlcmUsIG5laWcgWy4uLl0nXG4gICAgICovXG4gICAgZnVuY3Rpb24gdHJ1bmNhdGUoc3RyaW5nLCBvcHRpb25zKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gREVGQVVMVF9UUlVOQ19MRU5HVEgsXG4gICAgICAgICAgb21pc3Npb24gPSBERUZBVUxUX1RSVU5DX09NSVNTSU9OO1xuXG4gICAgICBpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcbiAgICAgICAgdmFyIHNlcGFyYXRvciA9ICdzZXBhcmF0b3InIGluIG9wdGlvbnMgPyBvcHRpb25zLnNlcGFyYXRvciA6IHNlcGFyYXRvcjtcbiAgICAgICAgbGVuZ3RoID0gJ2xlbmd0aCcgaW4gb3B0aW9ucyA/IHRvSW50ZWdlcihvcHRpb25zLmxlbmd0aCkgOiBsZW5ndGg7XG4gICAgICAgIG9taXNzaW9uID0gJ29taXNzaW9uJyBpbiBvcHRpb25zID8gYmFzZVRvU3RyaW5nKG9wdGlvbnMub21pc3Npb24pIDogb21pc3Npb247XG4gICAgICB9XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuXG4gICAgICB2YXIgc3RyTGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcbiAgICAgIGlmIChoYXNVbmljb2RlKHN0cmluZykpIHtcbiAgICAgICAgdmFyIHN0clN5bWJvbHMgPSBzdHJpbmdUb0FycmF5KHN0cmluZyk7XG4gICAgICAgIHN0ckxlbmd0aCA9IHN0clN5bWJvbHMubGVuZ3RoO1xuICAgICAgfVxuICAgICAgaWYgKGxlbmd0aCA+PSBzdHJMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgIH1cbiAgICAgIHZhciBlbmQgPSBsZW5ndGggLSBzdHJpbmdTaXplKG9taXNzaW9uKTtcbiAgICAgIGlmIChlbmQgPCAxKSB7XG4gICAgICAgIHJldHVybiBvbWlzc2lvbjtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHQgPSBzdHJTeW1ib2xzXG4gICAgICAgID8gY2FzdFNsaWNlKHN0clN5bWJvbHMsIDAsIGVuZCkuam9pbignJylcbiAgICAgICAgOiBzdHJpbmcuc2xpY2UoMCwgZW5kKTtcblxuICAgICAgaWYgKHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQgKyBvbWlzc2lvbjtcbiAgICAgIH1cbiAgICAgIGlmIChzdHJTeW1ib2xzKSB7XG4gICAgICAgIGVuZCArPSAocmVzdWx0Lmxlbmd0aCAtIGVuZCk7XG4gICAgICB9XG4gICAgICBpZiAoaXNSZWdFeHAoc2VwYXJhdG9yKSkge1xuICAgICAgICBpZiAoc3RyaW5nLnNsaWNlKGVuZCkuc2VhcmNoKHNlcGFyYXRvcikpIHtcbiAgICAgICAgICB2YXIgbWF0Y2gsXG4gICAgICAgICAgICAgIHN1YnN0cmluZyA9IHJlc3VsdDtcblxuICAgICAgICAgIGlmICghc2VwYXJhdG9yLmdsb2JhbCkge1xuICAgICAgICAgICAgc2VwYXJhdG9yID0gUmVnRXhwKHNlcGFyYXRvci5zb3VyY2UsIHRvU3RyaW5nKHJlRmxhZ3MuZXhlYyhzZXBhcmF0b3IpKSArICdnJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNlcGFyYXRvci5sYXN0SW5kZXggPSAwO1xuICAgICAgICAgIHdoaWxlICgobWF0Y2ggPSBzZXBhcmF0b3IuZXhlYyhzdWJzdHJpbmcpKSkge1xuICAgICAgICAgICAgdmFyIG5ld0VuZCA9IG1hdGNoLmluZGV4O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQuc2xpY2UoMCwgbmV3RW5kID09PSB1bmRlZmluZWQgPyBlbmQgOiBuZXdFbmQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHN0cmluZy5pbmRleE9mKGJhc2VUb1N0cmluZyhzZXBhcmF0b3IpLCBlbmQpICE9IGVuZCkge1xuICAgICAgICB2YXIgaW5kZXggPSByZXN1bHQubGFzdEluZGV4T2Yoc2VwYXJhdG9yKTtcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQuc2xpY2UoMCwgaW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0ICsgb21pc3Npb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGludmVyc2Ugb2YgYF8uZXNjYXBlYDsgdGhpcyBtZXRob2QgY29udmVydHMgdGhlIEhUTUwgZW50aXRpZXNcbiAgICAgKiBgJmFtcDtgLCBgJmx0O2AsIGAmZ3Q7YCwgYCZxdW90O2AsIGFuZCBgJiMzOTtgIGluIGBzdHJpbmdgIHRvXG4gICAgICogdGhlaXIgY29ycmVzcG9uZGluZyBjaGFyYWN0ZXJzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIE5vIG90aGVyIEhUTUwgZW50aXRpZXMgYXJlIHVuZXNjYXBlZC4gVG8gdW5lc2NhcGUgYWRkaXRpb25hbFxuICAgICAqIEhUTUwgZW50aXRpZXMgdXNlIGEgdGhpcmQtcGFydHkgbGlicmFyeSBsaWtlIFtfaGVfXShodHRwczovL210aHMuYmUvaGUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuNi4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHVuZXNjYXBlLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHVuZXNjYXBlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udW5lc2NhcGUoJ2ZyZWQsIGJhcm5leSwgJmFtcDsgcGViYmxlcycpO1xuICAgICAqIC8vID0+ICdmcmVkLCBiYXJuZXksICYgcGViYmxlcydcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1bmVzY2FwZShzdHJpbmcpIHtcbiAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgICByZXR1cm4gKHN0cmluZyAmJiByZUhhc0VzY2FwZWRIdG1sLnRlc3Qoc3RyaW5nKSlcbiAgICAgICAgPyBzdHJpbmcucmVwbGFjZShyZUVzY2FwZWRIdG1sLCB1bmVzY2FwZUh0bWxDaGFyKVxuICAgICAgICA6IHN0cmluZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgc3RyaW5nYCwgYXMgc3BhY2Ugc2VwYXJhdGVkIHdvcmRzLCB0byB1cHBlciBjYXNlLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdXBwZXIgY2FzZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnVwcGVyQ2FzZSgnLS1mb28tYmFyJyk7XG4gICAgICogLy8gPT4gJ0ZPTyBCQVInXG4gICAgICpcbiAgICAgKiBfLnVwcGVyQ2FzZSgnZm9vQmFyJyk7XG4gICAgICogLy8gPT4gJ0ZPTyBCQVInXG4gICAgICpcbiAgICAgKiBfLnVwcGVyQ2FzZSgnX19mb29fYmFyX18nKTtcbiAgICAgKiAvLyA9PiAnRk9PIEJBUidcbiAgICAgKi9cbiAgICB2YXIgdXBwZXJDYXNlID0gY3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsIHdvcmQsIGluZGV4KSB7XG4gICAgICByZXR1cm4gcmVzdWx0ICsgKGluZGV4ID8gJyAnIDogJycpICsgd29yZC50b1VwcGVyQ2FzZSgpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBgc3RyaW5nYCB0byB1cHBlciBjYXNlLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy51cHBlckZpcnN0KCdmcmVkJyk7XG4gICAgICogLy8gPT4gJ0ZyZWQnXG4gICAgICpcbiAgICAgKiBfLnVwcGVyRmlyc3QoJ0ZSRUQnKTtcbiAgICAgKiAvLyA9PiAnRlJFRCdcbiAgICAgKi9cbiAgICB2YXIgdXBwZXJGaXJzdCA9IGNyZWF0ZUNhc2VGaXJzdCgndG9VcHBlckNhc2UnKTtcblxuICAgIC8qKlxuICAgICAqIFNwbGl0cyBgc3RyaW5nYCBpbnRvIGFuIGFycmF5IG9mIGl0cyB3b3Jkcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7UmVnRXhwfHN0cmluZ30gW3BhdHRlcm5dIFRoZSBwYXR0ZXJuIHRvIG1hdGNoIHdvcmRzLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB3b3JkcyBvZiBgc3RyaW5nYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy53b3JkcygnZnJlZCwgYmFybmV5LCAmIHBlYmJsZXMnKTtcbiAgICAgKiAvLyA9PiBbJ2ZyZWQnLCAnYmFybmV5JywgJ3BlYmJsZXMnXVxuICAgICAqXG4gICAgICogXy53b3JkcygnZnJlZCwgYmFybmV5LCAmIHBlYmJsZXMnLCAvW14sIF0rL2cpO1xuICAgICAqIC8vID0+IFsnZnJlZCcsICdiYXJuZXknLCAnJicsICdwZWJibGVzJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB3b3JkcyhzdHJpbmcsIHBhdHRlcm4sIGd1YXJkKSB7XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgcGF0dGVybiA9IGd1YXJkID8gdW5kZWZpbmVkIDogcGF0dGVybjtcblxuICAgICAgaWYgKHBhdHRlcm4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gaGFzVW5pY29kZVdvcmQoc3RyaW5nKSA/IHVuaWNvZGVXb3JkcyhzdHJpbmcpIDogYXNjaWlXb3JkcyhzdHJpbmcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0cmluZy5tYXRjaChwYXR0ZXJuKSB8fCBbXTtcbiAgICB9XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBBdHRlbXB0cyB0byBpbnZva2UgYGZ1bmNgLCByZXR1cm5pbmcgZWl0aGVyIHRoZSByZXN1bHQgb3IgdGhlIGNhdWdodCBlcnJvclxuICAgICAqIG9iamVjdC4gQW55IGFkZGl0aW9uYWwgYXJndW1lbnRzIGFyZSBwcm92aWRlZCB0byBgZnVuY2Agd2hlbiBpdCdzIGludm9rZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGF0dGVtcHQuXG4gICAgICogQHBhcmFtIHsuLi4qfSBbYXJnc10gVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgYGZ1bmNgIHdpdGguXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGBmdW5jYCByZXN1bHQgb3IgZXJyb3Igb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBBdm9pZCB0aHJvd2luZyBlcnJvcnMgZm9yIGludmFsaWQgc2VsZWN0b3JzLlxuICAgICAqIHZhciBlbGVtZW50cyA9IF8uYXR0ZW1wdChmdW5jdGlvbihzZWxlY3Rvcikge1xuICAgICAqICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICAgICAqIH0sICc+Xz4nKTtcbiAgICAgKlxuICAgICAqIGlmIChfLmlzRXJyb3IoZWxlbWVudHMpKSB7XG4gICAgICogICBlbGVtZW50cyA9IFtdO1xuICAgICAqIH1cbiAgICAgKi9cbiAgICB2YXIgYXR0ZW1wdCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGZ1bmMsIGFyZ3MpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhcHBseShmdW5jLCB1bmRlZmluZWQsIGFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gaXNFcnJvcihlKSA/IGUgOiBuZXcgRXJyb3IoZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBCaW5kcyBtZXRob2RzIG9mIGFuIG9iamVjdCB0byB0aGUgb2JqZWN0IGl0c2VsZiwgb3ZlcndyaXRpbmcgdGhlIGV4aXN0aW5nXG4gICAgICogbWV0aG9kLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGRvZXNuJ3Qgc2V0IHRoZSBcImxlbmd0aFwiIHByb3BlcnR5IG9mIGJvdW5kIGZ1bmN0aW9ucy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGJpbmQgYW5kIGFzc2lnbiB0aGUgYm91bmQgbWV0aG9kcyB0by5cbiAgICAgKiBAcGFyYW0gey4uLihzdHJpbmd8c3RyaW5nW10pfSBtZXRob2ROYW1lcyBUaGUgb2JqZWN0IG1ldGhvZCBuYW1lcyB0byBiaW5kLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB2aWV3ID0ge1xuICAgICAqICAgJ2xhYmVsJzogJ2RvY3MnLFxuICAgICAqICAgJ2NsaWNrJzogZnVuY3Rpb24oKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdjbGlja2VkICcgKyB0aGlzLmxhYmVsKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogXy5iaW5kQWxsKHZpZXcsIFsnY2xpY2snXSk7XG4gICAgICogalF1ZXJ5KGVsZW1lbnQpLm9uKCdjbGljaycsIHZpZXcuY2xpY2spO1xuICAgICAqIC8vID0+IExvZ3MgJ2NsaWNrZWQgZG9jcycgd2hlbiBjbGlja2VkLlxuICAgICAqL1xuICAgIHZhciBiaW5kQWxsID0gZmxhdFJlc3QoZnVuY3Rpb24ob2JqZWN0LCBtZXRob2ROYW1lcykge1xuICAgICAgYXJyYXlFYWNoKG1ldGhvZE5hbWVzLCBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAga2V5ID0gdG9LZXkoa2V5KTtcbiAgICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBiaW5kKG9iamVjdFtrZXldLCBvYmplY3QpKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGl0ZXJhdGVzIG92ZXIgYHBhaXJzYCBhbmQgaW52b2tlcyB0aGUgY29ycmVzcG9uZGluZ1xuICAgICAqIGZ1bmN0aW9uIG9mIHRoZSBmaXJzdCBwcmVkaWNhdGUgdG8gcmV0dXJuIHRydXRoeS4gVGhlIHByZWRpY2F0ZS1mdW5jdGlvblxuICAgICAqIHBhaXJzIGFyZSBpbnZva2VkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIGFuZCBhcmd1bWVudHMgb2YgdGhlIGNyZWF0ZWRcbiAgICAgKiBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtBcnJheX0gcGFpcnMgVGhlIHByZWRpY2F0ZS1mdW5jdGlvbiBwYWlycy5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb21wb3NpdGUgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBmdW5jID0gXy5jb25kKFtcbiAgICAgKiAgIFtfLm1hdGNoZXMoeyAnYSc6IDEgfSksICAgICAgICAgICBfLmNvbnN0YW50KCdtYXRjaGVzIEEnKV0sXG4gICAgICogICBbXy5jb25mb3Jtcyh7ICdiJzogXy5pc051bWJlciB9KSwgXy5jb25zdGFudCgnbWF0Y2hlcyBCJyldLFxuICAgICAqICAgW18uc3R1YlRydWUsICAgICAgICAgICAgICAgICAgICAgIF8uY29uc3RhbnQoJ25vIG1hdGNoJyldXG4gICAgICogXSk7XG4gICAgICpcbiAgICAgKiBmdW5jKHsgJ2EnOiAxLCAnYic6IDIgfSk7XG4gICAgICogLy8gPT4gJ21hdGNoZXMgQSdcbiAgICAgKlxuICAgICAqIGZ1bmMoeyAnYSc6IDAsICdiJzogMSB9KTtcbiAgICAgKiAvLyA9PiAnbWF0Y2hlcyBCJ1xuICAgICAqXG4gICAgICogZnVuYyh7ICdhJzogJzEnLCAnYic6ICcyJyB9KTtcbiAgICAgKiAvLyA9PiAnbm8gbWF0Y2gnXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29uZChwYWlycykge1xuICAgICAgdmFyIGxlbmd0aCA9IHBhaXJzID09IG51bGwgPyAwIDogcGFpcnMubGVuZ3RoLFxuICAgICAgICAgIHRvSXRlcmF0ZWUgPSBnZXRJdGVyYXRlZSgpO1xuXG4gICAgICBwYWlycyA9ICFsZW5ndGggPyBbXSA6IGFycmF5TWFwKHBhaXJzLCBmdW5jdGlvbihwYWlyKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcGFpclsxXSAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbdG9JdGVyYXRlZShwYWlyWzBdKSwgcGFpclsxXV07XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKGFyZ3MpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTE7XG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgdmFyIHBhaXIgPSBwYWlyc1tpbmRleF07XG4gICAgICAgICAgaWYgKGFwcGx5KHBhaXJbMF0sIHRoaXMsIGFyZ3MpKSB7XG4gICAgICAgICAgICByZXR1cm4gYXBwbHkocGFpclsxXSwgdGhpcywgYXJncyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIHRoZSBwcmVkaWNhdGUgcHJvcGVydGllcyBvZiBgc291cmNlYCB3aXRoXG4gICAgICogdGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgdmFsdWVzIG9mIGEgZ2l2ZW4gb2JqZWN0LCByZXR1cm5pbmcgYHRydWVgIGlmXG4gICAgICogYWxsIHByZWRpY2F0ZXMgcmV0dXJuIHRydXRoeSwgZWxzZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoZSBjcmVhdGVkIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gYF8uY29uZm9ybXNUb2Agd2l0aFxuICAgICAqIGBzb3VyY2VgIHBhcnRpYWxseSBhcHBsaWVkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgcHJlZGljYXRlcyB0byBjb25mb3JtIHRvLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW1xuICAgICAqICAgeyAnYSc6IDIsICdiJzogMSB9LFxuICAgICAqICAgeyAnYSc6IDEsICdiJzogMiB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8uZmlsdGVyKG9iamVjdHMsIF8uY29uZm9ybXMoeyAnYic6IGZ1bmN0aW9uKG4pIHsgcmV0dXJuIG4gPiAxOyB9IH0pKTtcbiAgICAgKiAvLyA9PiBbeyAnYSc6IDEsICdiJzogMiB9XVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbmZvcm1zKHNvdXJjZSkge1xuICAgICAgcmV0dXJuIGJhc2VDb25mb3JtcyhiYXNlQ2xvbmUoc291cmNlLCBDTE9ORV9ERUVQX0ZMQUcpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGB2YWx1ZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi40LjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHJldHVybiBmcm9tIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29uc3RhbnQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gXy50aW1lcygyLCBfLmNvbnN0YW50KHsgJ2EnOiAxIH0pKTtcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKG9iamVjdHMpO1xuICAgICAqIC8vID0+IFt7ICdhJzogMSB9LCB7ICdhJzogMSB9XVxuICAgICAqXG4gICAgICogY29uc29sZS5sb2cob2JqZWN0c1swXSA9PT0gb2JqZWN0c1sxXSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbnN0YW50KHZhbHVlKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGB2YWx1ZWAgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBkZWZhdWx0IHZhbHVlIHNob3VsZCBiZSByZXR1cm5lZCBpblxuICAgICAqIGl0cyBwbGFjZS4gVGhlIGBkZWZhdWx0VmFsdWVgIGlzIHJldHVybmVkIGlmIGB2YWx1ZWAgaXMgYE5hTmAsIGBudWxsYCxcbiAgICAgKiBvciBgdW5kZWZpbmVkYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjE0LjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEBwYXJhbSB7Kn0gZGVmYXVsdFZhbHVlIFRoZSBkZWZhdWx0IHZhbHVlLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5kZWZhdWx0VG8oMSwgMTApO1xuICAgICAqIC8vID0+IDFcbiAgICAgKlxuICAgICAqIF8uZGVmYXVsdFRvKHVuZGVmaW5lZCwgMTApO1xuICAgICAqIC8vID0+IDEwXG4gICAgICovXG4gICAgZnVuY3Rpb24gZGVmYXVsdFRvKHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHJldHVybiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSAhPT0gdmFsdWUpID8gZGVmYXVsdFZhbHVlIDogdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgcmVzdWx0IG9mIGludm9raW5nIHRoZSBnaXZlbiBmdW5jdGlvbnNcbiAgICAgKiB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgY3JlYXRlZCBmdW5jdGlvbiwgd2hlcmUgZWFjaCBzdWNjZXNzaXZlXG4gICAgICogaW52b2NhdGlvbiBpcyBzdXBwbGllZCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBwcmV2aW91cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHsuLi4oRnVuY3Rpb258RnVuY3Rpb25bXSl9IFtmdW5jc10gVGhlIGZ1bmN0aW9ucyB0byBpbnZva2UuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29tcG9zaXRlIGZ1bmN0aW9uLlxuICAgICAqIEBzZWUgXy5mbG93UmlnaHRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gc3F1YXJlKG4pIHtcbiAgICAgKiAgIHJldHVybiBuICogbjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiB2YXIgYWRkU3F1YXJlID0gXy5mbG93KFtfLmFkZCwgc3F1YXJlXSk7XG4gICAgICogYWRkU3F1YXJlKDEsIDIpO1xuICAgICAqIC8vID0+IDlcbiAgICAgKi9cbiAgICB2YXIgZmxvdyA9IGNyZWF0ZUZsb3coKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmxvd2AgZXhjZXB0IHRoYXQgaXQgY3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXRcbiAgICAgKiBpbnZva2VzIHRoZSBnaXZlbiBmdW5jdGlvbnMgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0gey4uLihGdW5jdGlvbnxGdW5jdGlvbltdKX0gW2Z1bmNzXSBUaGUgZnVuY3Rpb25zIHRvIGludm9rZS5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb21wb3NpdGUgZnVuY3Rpb24uXG4gICAgICogQHNlZSBfLmZsb3dcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gc3F1YXJlKG4pIHtcbiAgICAgKiAgIHJldHVybiBuICogbjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiB2YXIgYWRkU3F1YXJlID0gXy5mbG93UmlnaHQoW3NxdWFyZSwgXy5hZGRdKTtcbiAgICAgKiBhZGRTcXVhcmUoMSwgMik7XG4gICAgICogLy8gPT4gOVxuICAgICAqL1xuICAgIHZhciBmbG93UmlnaHQgPSBjcmVhdGVGbG93KHRydWUpO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZmlyc3QgYXJndW1lbnQgaXQgcmVjZWl2ZXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgQW55IHZhbHVlLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIGB2YWx1ZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICAgICAqXG4gICAgICogY29uc29sZS5sb2coXy5pZGVudGl0eShvYmplY3QpID09PSBvYmplY3QpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggdGhlIGFyZ3VtZW50cyBvZiB0aGUgY3JlYXRlZFxuICAgICAqIGZ1bmN0aW9uLiBJZiBgZnVuY2AgaXMgYSBwcm9wZXJ0eSBuYW1lLCB0aGUgY3JlYXRlZCBmdW5jdGlvbiByZXR1cm5zIHRoZVxuICAgICAqIHByb3BlcnR5IHZhbHVlIGZvciBhIGdpdmVuIGVsZW1lbnQuIElmIGBmdW5jYCBpcyBhbiBhcnJheSBvciBvYmplY3QsIHRoZVxuICAgICAqIGNyZWF0ZWQgZnVuY3Rpb24gcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgY29udGFpbiB0aGUgZXF1aXZhbGVudFxuICAgICAqIHNvdXJjZSBwcm9wZXJ0aWVzLCBvdGhlcndpc2UgaXQgcmV0dXJucyBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0geyp9IFtmdW5jPV8uaWRlbnRpdHldIFRoZSB2YWx1ZSB0byBjb252ZXJ0IHRvIGEgY2FsbGJhY2suXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBjYWxsYmFjay5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IGZhbHNlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbHRlcih1c2VycywgXy5pdGVyYXRlZSh7ICd1c2VyJzogJ2Jhcm5leScsICdhY3RpdmUnOiB0cnVlIH0pKTtcbiAgICAgKiAvLyA9PiBbeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH1dXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maWx0ZXIodXNlcnMsIF8uaXRlcmF0ZWUoWyd1c2VyJywgJ2ZyZWQnXSkpO1xuICAgICAqIC8vID0+IFt7ICd1c2VyJzogJ2ZyZWQnLCAnYWdlJzogNDAgfV1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8ubWFwKHVzZXJzLCBfLml0ZXJhdGVlKCd1c2VyJykpO1xuICAgICAqIC8vID0+IFsnYmFybmV5JywgJ2ZyZWQnXVxuICAgICAqXG4gICAgICogLy8gQ3JlYXRlIGN1c3RvbSBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqIF8uaXRlcmF0ZWUgPSBfLndyYXAoXy5pdGVyYXRlZSwgZnVuY3Rpb24oaXRlcmF0ZWUsIGZ1bmMpIHtcbiAgICAgKiAgIHJldHVybiAhXy5pc1JlZ0V4cChmdW5jKSA/IGl0ZXJhdGVlKGZ1bmMpIDogZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICogICAgIHJldHVybiBmdW5jLnRlc3Qoc3RyaW5nKTtcbiAgICAgKiAgIH07XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBfLmZpbHRlcihbJ2FiYycsICdkZWYnXSwgL2VmLyk7XG4gICAgICogLy8gPT4gWydkZWYnXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGl0ZXJhdGVlKGZ1bmMpIHtcbiAgICAgIHJldHVybiBiYXNlSXRlcmF0ZWUodHlwZW9mIGZ1bmMgPT0gJ2Z1bmN0aW9uJyA/IGZ1bmMgOiBiYXNlQ2xvbmUoZnVuYywgQ0xPTkVfREVFUF9GTEFHKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcGVyZm9ybXMgYSBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbiBiZXR3ZWVuIGEgZ2l2ZW5cbiAgICAgKiBvYmplY3QgYW5kIGBzb3VyY2VgLCByZXR1cm5pbmcgYHRydWVgIGlmIHRoZSBnaXZlbiBvYmplY3QgaGFzIGVxdWl2YWxlbnRcbiAgICAgKiBwcm9wZXJ0eSB2YWx1ZXMsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGUgY3JlYXRlZCBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIGBfLmlzTWF0Y2hgIHdpdGggYHNvdXJjZWBcbiAgICAgKiBwYXJ0aWFsbHkgYXBwbGllZC5cbiAgICAgKlxuICAgICAqIFBhcnRpYWwgY29tcGFyaXNvbnMgd2lsbCBtYXRjaCBlbXB0eSBhcnJheSBhbmQgZW1wdHkgb2JqZWN0IGBzb3VyY2VgXG4gICAgICogdmFsdWVzIGFnYWluc3QgYW55IGFycmF5IG9yIG9iamVjdCB2YWx1ZSwgcmVzcGVjdGl2ZWx5LiBTZWUgYF8uaXNFcXVhbGBcbiAgICAgKiBmb3IgYSBsaXN0IG9mIHN1cHBvcnRlZCB2YWx1ZSBjb21wYXJpc29ucy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFtcbiAgICAgKiAgIHsgJ2EnOiAxLCAnYic6IDIsICdjJzogMyB9LFxuICAgICAqICAgeyAnYSc6IDQsICdiJzogNSwgJ2MnOiA2IH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5maWx0ZXIob2JqZWN0cywgXy5tYXRjaGVzKHsgJ2EnOiA0LCAnYyc6IDYgfSkpO1xuICAgICAqIC8vID0+IFt7ICdhJzogNCwgJ2InOiA1LCAnYyc6IDYgfV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXRjaGVzKHNvdXJjZSkge1xuICAgICAgcmV0dXJuIGJhc2VNYXRjaGVzKGJhc2VDbG9uZShzb3VyY2UsIENMT05FX0RFRVBfRkxBRykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHBlcmZvcm1zIGEgcGFydGlhbCBkZWVwIGNvbXBhcmlzb24gYmV0d2VlbiB0aGVcbiAgICAgKiB2YWx1ZSBhdCBgcGF0aGAgb2YgYSBnaXZlbiBvYmplY3QgdG8gYHNyY1ZhbHVlYCwgcmV0dXJuaW5nIGB0cnVlYCBpZiB0aGVcbiAgICAgKiBvYmplY3QgdmFsdWUgaXMgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFBhcnRpYWwgY29tcGFyaXNvbnMgd2lsbCBtYXRjaCBlbXB0eSBhcnJheSBhbmQgZW1wdHkgb2JqZWN0XG4gICAgICogYHNyY1ZhbHVlYCB2YWx1ZXMgYWdhaW5zdCBhbnkgYXJyYXkgb3Igb2JqZWN0IHZhbHVlLCByZXNwZWN0aXZlbHkuIFNlZVxuICAgICAqIGBfLmlzRXF1YWxgIGZvciBhIGxpc3Qgb2Ygc3VwcG9ydGVkIHZhbHVlIGNvbXBhcmlzb25zLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMi4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICAgICAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW1xuICAgICAqICAgeyAnYSc6IDEsICdiJzogMiwgJ2MnOiAzIH0sXG4gICAgICogICB7ICdhJzogNCwgJ2InOiA1LCAnYyc6IDYgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLmZpbmQob2JqZWN0cywgXy5tYXRjaGVzUHJvcGVydHkoJ2EnLCA0KSk7XG4gICAgICogLy8gPT4geyAnYSc6IDQsICdiJzogNSwgJ2MnOiA2IH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXRjaGVzUHJvcGVydHkocGF0aCwgc3JjVmFsdWUpIHtcbiAgICAgIHJldHVybiBiYXNlTWF0Y2hlc1Byb3BlcnR5KHBhdGgsIGJhc2VDbG9uZShzcmNWYWx1ZSwgQ0xPTkVfREVFUF9GTEFHKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyB0aGUgbWV0aG9kIGF0IGBwYXRoYCBvZiBhIGdpdmVuIG9iamVjdC5cbiAgICAgKiBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHMgYXJlIHByb3ZpZGVkIHRvIHRoZSBpbnZva2VkIG1ldGhvZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjcuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIG1ldGhvZCB0byBpbnZva2UuXG4gICAgICogQHBhcmFtIHsuLi4qfSBbYXJnc10gVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgdGhlIG1ldGhvZCB3aXRoLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGludm9rZXIgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW1xuICAgICAqICAgeyAnYSc6IHsgJ2InOiBfLmNvbnN0YW50KDIpIH0gfSxcbiAgICAgKiAgIHsgJ2EnOiB7ICdiJzogXy5jb25zdGFudCgxKSB9IH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5tYXAob2JqZWN0cywgXy5tZXRob2QoJ2EuYicpKTtcbiAgICAgKiAvLyA9PiBbMiwgMV1cbiAgICAgKlxuICAgICAqIF8ubWFwKG9iamVjdHMsIF8ubWV0aG9kKFsnYScsICdiJ10pKTtcbiAgICAgKiAvLyA9PiBbMiwgMV1cbiAgICAgKi9cbiAgICB2YXIgbWV0aG9kID0gYmFzZVJlc3QoZnVuY3Rpb24ocGF0aCwgYXJncykge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAgICByZXR1cm4gYmFzZUludm9rZShvYmplY3QsIHBhdGgsIGFyZ3MpO1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHBvc2l0ZSBvZiBgXy5tZXRob2RgOyB0aGlzIG1ldGhvZCBjcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzXG4gICAgICogdGhlIG1ldGhvZCBhdCBhIGdpdmVuIHBhdGggb2YgYG9iamVjdGAuIEFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyBhcmVcbiAgICAgKiBwcm92aWRlZCB0byB0aGUgaW52b2tlZCBtZXRob2QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy43LjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0gey4uLip9IFthcmdzXSBUaGUgYXJndW1lbnRzIHRvIGludm9rZSB0aGUgbWV0aG9kIHdpdGguXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgaW52b2tlciBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gXy50aW1lcygzLCBfLmNvbnN0YW50KSxcbiAgICAgKiAgICAgb2JqZWN0ID0geyAnYSc6IGFycmF5LCAnYic6IGFycmF5LCAnYyc6IGFycmF5IH07XG4gICAgICpcbiAgICAgKiBfLm1hcChbJ2FbMl0nLCAnY1swXSddLCBfLm1ldGhvZE9mKG9iamVjdCkpO1xuICAgICAqIC8vID0+IFsyLCAwXVxuICAgICAqXG4gICAgICogXy5tYXAoW1snYScsICcyJ10sIFsnYycsICcwJ11dLCBfLm1ldGhvZE9mKG9iamVjdCkpO1xuICAgICAqIC8vID0+IFsyLCAwXVxuICAgICAqL1xuICAgIHZhciBtZXRob2RPZiA9IGJhc2VSZXN0KGZ1bmN0aW9uKG9iamVjdCwgYXJncykge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHBhdGgpIHtcbiAgICAgICAgcmV0dXJuIGJhc2VJbnZva2Uob2JqZWN0LCBwYXRoLCBhcmdzKTtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGFsbCBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgZnVuY3Rpb24gcHJvcGVydGllcyBvZiBhIHNvdXJjZVxuICAgICAqIG9iamVjdCB0byB0aGUgZGVzdGluYXRpb24gb2JqZWN0LiBJZiBgb2JqZWN0YCBpcyBhIGZ1bmN0aW9uLCB0aGVuIG1ldGhvZHNcbiAgICAgKiBhcmUgYWRkZWQgdG8gaXRzIHByb3RvdHlwZSBhcyB3ZWxsLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFVzZSBgXy5ydW5JbkNvbnRleHRgIHRvIGNyZWF0ZSBhIHByaXN0aW5lIGBsb2Rhc2hgIGZ1bmN0aW9uIHRvXG4gICAgICogYXZvaWQgY29uZmxpY3RzIGNhdXNlZCBieSBtb2RpZnlpbmcgdGhlIG9yaWdpbmFsLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufE9iamVjdH0gW29iamVjdD1sb2Rhc2hdIFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIGZ1bmN0aW9ucyB0byBhZGQuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBUaGUgb3B0aW9ucyBvYmplY3QuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5jaGFpbj10cnVlXSBTcGVjaWZ5IHdoZXRoZXIgbWl4aW5zIGFyZSBjaGFpbmFibGUuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufE9iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gdm93ZWxzKHN0cmluZykge1xuICAgICAqICAgcmV0dXJuIF8uZmlsdGVyKHN0cmluZywgZnVuY3Rpb24odikge1xuICAgICAqICAgICByZXR1cm4gL1thZWlvdV0vaS50ZXN0KHYpO1xuICAgICAqICAgfSk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogXy5taXhpbih7ICd2b3dlbHMnOiB2b3dlbHMgfSk7XG4gICAgICogXy52b3dlbHMoJ2ZyZWQnKTtcbiAgICAgKiAvLyA9PiBbJ2UnXVxuICAgICAqXG4gICAgICogXygnZnJlZCcpLnZvd2VscygpLnZhbHVlKCk7XG4gICAgICogLy8gPT4gWydlJ11cbiAgICAgKlxuICAgICAqIF8ubWl4aW4oeyAndm93ZWxzJzogdm93ZWxzIH0sIHsgJ2NoYWluJzogZmFsc2UgfSk7XG4gICAgICogXygnZnJlZCcpLnZvd2VscygpO1xuICAgICAqIC8vID0+IFsnZSddXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWl4aW4ob2JqZWN0LCBzb3VyY2UsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBwcm9wcyA9IGtleXMoc291cmNlKSxcbiAgICAgICAgICBtZXRob2ROYW1lcyA9IGJhc2VGdW5jdGlvbnMoc291cmNlLCBwcm9wcyk7XG5cbiAgICAgIGlmIChvcHRpb25zID09IG51bGwgJiZcbiAgICAgICAgICAhKGlzT2JqZWN0KHNvdXJjZSkgJiYgKG1ldGhvZE5hbWVzLmxlbmd0aCB8fCAhcHJvcHMubGVuZ3RoKSkpIHtcbiAgICAgICAgb3B0aW9ucyA9IHNvdXJjZTtcbiAgICAgICAgc291cmNlID0gb2JqZWN0O1xuICAgICAgICBvYmplY3QgPSB0aGlzO1xuICAgICAgICBtZXRob2ROYW1lcyA9IGJhc2VGdW5jdGlvbnMoc291cmNlLCBrZXlzKHNvdXJjZSkpO1xuICAgICAgfVxuICAgICAgdmFyIGNoYWluID0gIShpc09iamVjdChvcHRpb25zKSAmJiAnY2hhaW4nIGluIG9wdGlvbnMpIHx8ICEhb3B0aW9ucy5jaGFpbixcbiAgICAgICAgICBpc0Z1bmMgPSBpc0Z1bmN0aW9uKG9iamVjdCk7XG5cbiAgICAgIGFycmF5RWFjaChtZXRob2ROYW1lcywgZnVuY3Rpb24obWV0aG9kTmFtZSkge1xuICAgICAgICB2YXIgZnVuYyA9IHNvdXJjZVttZXRob2ROYW1lXTtcbiAgICAgICAgb2JqZWN0W21ldGhvZE5hbWVdID0gZnVuYztcbiAgICAgICAgaWYgKGlzRnVuYykge1xuICAgICAgICAgIG9iamVjdC5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBjaGFpbkFsbCA9IHRoaXMuX19jaGFpbl9fO1xuICAgICAgICAgICAgaWYgKGNoYWluIHx8IGNoYWluQWxsKSB7XG4gICAgICAgICAgICAgIHZhciByZXN1bHQgPSBvYmplY3QodGhpcy5fX3dyYXBwZWRfXyksXG4gICAgICAgICAgICAgICAgICBhY3Rpb25zID0gcmVzdWx0Ll9fYWN0aW9uc19fID0gY29weUFycmF5KHRoaXMuX19hY3Rpb25zX18pO1xuXG4gICAgICAgICAgICAgIGFjdGlvbnMucHVzaCh7ICdmdW5jJzogZnVuYywgJ2FyZ3MnOiBhcmd1bWVudHMsICd0aGlzQXJnJzogb2JqZWN0IH0pO1xuICAgICAgICAgICAgICByZXN1bHQuX19jaGFpbl9fID0gY2hhaW5BbGw7XG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseShvYmplY3QsIGFycmF5UHVzaChbdGhpcy52YWx1ZSgpXSwgYXJndW1lbnRzKSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV2ZXJ0cyB0aGUgYF9gIHZhcmlhYmxlIHRvIGl0cyBwcmV2aW91cyB2YWx1ZSBhbmQgcmV0dXJucyBhIHJlZmVyZW5jZSB0b1xuICAgICAqIHRoZSBgbG9kYXNoYCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBgbG9kYXNoYCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGxvZGFzaCA9IF8ubm9Db25mbGljdCgpO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIG5vQ29uZmxpY3QoKSB7XG4gICAgICBpZiAocm9vdC5fID09PSB0aGlzKSB7XG4gICAgICAgIHJvb3QuXyA9IG9sZERhc2g7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGB1bmRlZmluZWRgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuMy4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50aW1lcygyLCBfLm5vb3ApO1xuICAgICAqIC8vID0+IFt1bmRlZmluZWQsIHVuZGVmaW5lZF1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBub29wKCkge1xuICAgICAgLy8gTm8gb3BlcmF0aW9uIHBlcmZvcm1lZC5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBnZXRzIHRoZSBhcmd1bWVudCBhdCBpbmRleCBgbmAuIElmIGBuYCBpcyBuZWdhdGl2ZSxcbiAgICAgKiB0aGUgbnRoIGFyZ3VtZW50IGZyb20gdGhlIGVuZCBpcyByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtuPTBdIFRoZSBpbmRleCBvZiB0aGUgYXJndW1lbnQgdG8gcmV0dXJuLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHBhc3MtdGhydSBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGZ1bmMgPSBfLm50aEFyZygxKTtcbiAgICAgKiBmdW5jKCdhJywgJ2InLCAnYycsICdkJyk7XG4gICAgICogLy8gPT4gJ2InXG4gICAgICpcbiAgICAgKiB2YXIgZnVuYyA9IF8ubnRoQXJnKC0yKTtcbiAgICAgKiBmdW5jKCdhJywgJ2InLCAnYycsICdkJyk7XG4gICAgICogLy8gPT4gJ2MnXG4gICAgICovXG4gICAgZnVuY3Rpb24gbnRoQXJnKG4pIHtcbiAgICAgIG4gPSB0b0ludGVnZXIobik7XG4gICAgICByZXR1cm4gYmFzZVJlc3QoZnVuY3Rpb24oYXJncykge1xuICAgICAgICByZXR1cm4gYmFzZU50aChhcmdzLCBuKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGl0ZXJhdGVlc2Agd2l0aCB0aGUgYXJndW1lbnRzIGl0IHJlY2VpdmVzXG4gICAgICogYW5kIHJldHVybnMgdGhlaXIgcmVzdWx0cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHsuLi4oRnVuY3Rpb258RnVuY3Rpb25bXSl9IFtpdGVyYXRlZXM9W18uaWRlbnRpdHldXVxuICAgICAqICBUaGUgaXRlcmF0ZWVzIHRvIGludm9rZS5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGZ1bmMgPSBfLm92ZXIoW01hdGgubWF4LCBNYXRoLm1pbl0pO1xuICAgICAqXG4gICAgICogZnVuYygxLCAyLCAzLCA0KTtcbiAgICAgKiAvLyA9PiBbNCwgMV1cbiAgICAgKi9cbiAgICB2YXIgb3ZlciA9IGNyZWF0ZU92ZXIoYXJyYXlNYXApO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGlmICoqYWxsKiogb2YgdGhlIGBwcmVkaWNhdGVzYCByZXR1cm5cbiAgICAgKiB0cnV0aHkgd2hlbiBpbnZva2VkIHdpdGggdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHsuLi4oRnVuY3Rpb258RnVuY3Rpb25bXSl9IFtwcmVkaWNhdGVzPVtfLmlkZW50aXR5XV1cbiAgICAgKiAgVGhlIHByZWRpY2F0ZXMgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBmdW5jID0gXy5vdmVyRXZlcnkoW0Jvb2xlYW4sIGlzRmluaXRlXSk7XG4gICAgICpcbiAgICAgKiBmdW5jKCcxJyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogZnVuYyhudWxsKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogZnVuYyhOYU4pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgdmFyIG92ZXJFdmVyeSA9IGNyZWF0ZU92ZXIoYXJyYXlFdmVyeSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBjaGVja3MgaWYgKiphbnkqKiBvZiB0aGUgYHByZWRpY2F0ZXNgIHJldHVyblxuICAgICAqIHRydXRoeSB3aGVuIGludm9rZWQgd2l0aCB0aGUgYXJndW1lbnRzIGl0IHJlY2VpdmVzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0gey4uLihGdW5jdGlvbnxGdW5jdGlvbltdKX0gW3ByZWRpY2F0ZXM9W18uaWRlbnRpdHldXVxuICAgICAqICBUaGUgcHJlZGljYXRlcyB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGZ1bmMgPSBfLm92ZXJTb21lKFtCb29sZWFuLCBpc0Zpbml0ZV0pO1xuICAgICAqXG4gICAgICogZnVuYygnMScpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIGZ1bmMobnVsbCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogZnVuYyhOYU4pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgdmFyIG92ZXJTb21lID0gY3JlYXRlT3ZlcihhcnJheVNvbWUpO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgdmFsdWUgYXQgYHBhdGhgIG9mIGEgZ2l2ZW4gb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuNC4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFtcbiAgICAgKiAgIHsgJ2EnOiB7ICdiJzogMiB9IH0sXG4gICAgICogICB7ICdhJzogeyAnYic6IDEgfSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8ubWFwKG9iamVjdHMsIF8ucHJvcGVydHkoJ2EuYicpKTtcbiAgICAgKiAvLyA9PiBbMiwgMV1cbiAgICAgKlxuICAgICAqIF8ubWFwKF8uc29ydEJ5KG9iamVjdHMsIF8ucHJvcGVydHkoWydhJywgJ2InXSkpLCAnYS5iJyk7XG4gICAgICogLy8gPT4gWzEsIDJdXG4gICAgICovXG4gICAgZnVuY3Rpb24gcHJvcGVydHkocGF0aCkge1xuICAgICAgcmV0dXJuIGlzS2V5KHBhdGgpID8gYmFzZVByb3BlcnR5KHRvS2V5KHBhdGgpKSA6IGJhc2VQcm9wZXJ0eURlZXAocGF0aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG9wcG9zaXRlIG9mIGBfLnByb3BlcnR5YDsgdGhpcyBtZXRob2QgY3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJuc1xuICAgICAqIHRoZSB2YWx1ZSBhdCBhIGdpdmVuIHBhdGggb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gWzAsIDEsIDJdLFxuICAgICAqICAgICBvYmplY3QgPSB7ICdhJzogYXJyYXksICdiJzogYXJyYXksICdjJzogYXJyYXkgfTtcbiAgICAgKlxuICAgICAqIF8ubWFwKFsnYVsyXScsICdjWzBdJ10sIF8ucHJvcGVydHlPZihvYmplY3QpKTtcbiAgICAgKiAvLyA9PiBbMiwgMF1cbiAgICAgKlxuICAgICAqIF8ubWFwKFtbJ2EnLCAnMiddLCBbJ2MnLCAnMCddXSwgXy5wcm9wZXJ0eU9mKG9iamVjdCkpO1xuICAgICAqIC8vID0+IFsyLCAwXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHByb3BlcnR5T2Yob2JqZWN0KSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24ocGF0aCkge1xuICAgICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgbnVtYmVycyAocG9zaXRpdmUgYW5kL29yIG5lZ2F0aXZlKSBwcm9ncmVzc2luZyBmcm9tXG4gICAgICogYHN0YXJ0YCB1cCB0bywgYnV0IG5vdCBpbmNsdWRpbmcsIGBlbmRgLiBBIHN0ZXAgb2YgYC0xYCBpcyB1c2VkIGlmIGEgbmVnYXRpdmVcbiAgICAgKiBgc3RhcnRgIGlzIHNwZWNpZmllZCB3aXRob3V0IGFuIGBlbmRgIG9yIGBzdGVwYC4gSWYgYGVuZGAgaXMgbm90IHNwZWNpZmllZCxcbiAgICAgKiBpdCdzIHNldCB0byBgc3RhcnRgIHdpdGggYHN0YXJ0YCB0aGVuIHNldCB0byBgMGAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogSmF2YVNjcmlwdCBmb2xsb3dzIHRoZSBJRUVFLTc1NCBzdGFuZGFyZCBmb3IgcmVzb2x2aW5nXG4gICAgICogZmxvYXRpbmctcG9pbnQgdmFsdWVzIHdoaWNoIGNhbiBwcm9kdWNlIHVuZXhwZWN0ZWQgcmVzdWx0cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgb2YgdGhlIHJhbmdlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBvZiB0aGUgcmFuZ2UuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGVwPTFdIFRoZSB2YWx1ZSB0byBpbmNyZW1lbnQgb3IgZGVjcmVtZW50IGJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcmFuZ2Ugb2YgbnVtYmVycy5cbiAgICAgKiBAc2VlIF8uaW5SYW5nZSwgXy5yYW5nZVJpZ2h0XG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ucmFuZ2UoNCk7XG4gICAgICogLy8gPT4gWzAsIDEsIDIsIDNdXG4gICAgICpcbiAgICAgKiBfLnJhbmdlKC00KTtcbiAgICAgKiAvLyA9PiBbMCwgLTEsIC0yLCAtM11cbiAgICAgKlxuICAgICAqIF8ucmFuZ2UoMSwgNSk7XG4gICAgICogLy8gPT4gWzEsIDIsIDMsIDRdXG4gICAgICpcbiAgICAgKiBfLnJhbmdlKDAsIDIwLCA1KTtcbiAgICAgKiAvLyA9PiBbMCwgNSwgMTAsIDE1XVxuICAgICAqXG4gICAgICogXy5yYW5nZSgwLCAtNCwgLTEpO1xuICAgICAqIC8vID0+IFswLCAtMSwgLTIsIC0zXVxuICAgICAqXG4gICAgICogXy5yYW5nZSgxLCA0LCAwKTtcbiAgICAgKiAvLyA9PiBbMSwgMSwgMV1cbiAgICAgKlxuICAgICAqIF8ucmFuZ2UoMCk7XG4gICAgICogLy8gPT4gW11cbiAgICAgKi9cbiAgICB2YXIgcmFuZ2UgPSBjcmVhdGVSYW5nZSgpO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5yYW5nZWAgZXhjZXB0IHRoYXQgaXQgcG9wdWxhdGVzIHZhbHVlcyBpblxuICAgICAqIGRlc2NlbmRpbmcgb3JkZXIuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IG9mIHRoZSByYW5nZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgb2YgdGhlIHJhbmdlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcD0xXSBUaGUgdmFsdWUgdG8gaW5jcmVtZW50IG9yIGRlY3JlbWVudCBieS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHJhbmdlIG9mIG51bWJlcnMuXG4gICAgICogQHNlZSBfLmluUmFuZ2UsIF8ucmFuZ2VcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5yYW5nZVJpZ2h0KDQpO1xuICAgICAqIC8vID0+IFszLCAyLCAxLCAwXVxuICAgICAqXG4gICAgICogXy5yYW5nZVJpZ2h0KC00KTtcbiAgICAgKiAvLyA9PiBbLTMsIC0yLCAtMSwgMF1cbiAgICAgKlxuICAgICAqIF8ucmFuZ2VSaWdodCgxLCA1KTtcbiAgICAgKiAvLyA9PiBbNCwgMywgMiwgMV1cbiAgICAgKlxuICAgICAqIF8ucmFuZ2VSaWdodCgwLCAyMCwgNSk7XG4gICAgICogLy8gPT4gWzE1LCAxMCwgNSwgMF1cbiAgICAgKlxuICAgICAqIF8ucmFuZ2VSaWdodCgwLCAtNCwgLTEpO1xuICAgICAqIC8vID0+IFstMywgLTIsIC0xLCAwXVxuICAgICAqXG4gICAgICogXy5yYW5nZVJpZ2h0KDEsIDQsIDApO1xuICAgICAqIC8vID0+IFsxLCAxLCAxXVxuICAgICAqXG4gICAgICogXy5yYW5nZVJpZ2h0KDApO1xuICAgICAqIC8vID0+IFtdXG4gICAgICovXG4gICAgdmFyIHJhbmdlUmlnaHQgPSBjcmVhdGVSYW5nZSh0cnVlKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgZW1wdHkgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4xMy4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBlbXB0eSBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5cyA9IF8udGltZXMoMiwgXy5zdHViQXJyYXkpO1xuICAgICAqXG4gICAgICogY29uc29sZS5sb2coYXJyYXlzKTtcbiAgICAgKiAvLyA9PiBbW10sIFtdXVxuICAgICAqXG4gICAgICogY29uc29sZS5sb2coYXJyYXlzWzBdID09PSBhcnJheXNbMV0pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3R1YkFycmF5KCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjEzLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpO1xuICAgICAqIC8vID0+IFtmYWxzZSwgZmFsc2VdXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgZW1wdHkgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMTMuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IGVtcHR5IG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBfLnRpbWVzKDIsIF8uc3R1Yk9iamVjdCk7XG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcbiAgICAgKiAvLyA9PiBbe30sIHt9XVxuICAgICAqXG4gICAgICogY29uc29sZS5sb2cob2JqZWN0c1swXSA9PT0gb2JqZWN0c1sxXSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdHViT2JqZWN0KCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYW4gZW1wdHkgc3RyaW5nLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMTMuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZW1wdHkgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRpbWVzKDIsIF8uc3R1YlN0cmluZyk7XG4gICAgICogLy8gPT4gWycnLCAnJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdHViU3RyaW5nKCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYHRydWVgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMTMuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRpbWVzKDIsIF8uc3R1YlRydWUpO1xuICAgICAqIC8vID0+IFt0cnVlLCB0cnVlXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN0dWJUcnVlKCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW52b2tlcyB0aGUgaXRlcmF0ZWUgYG5gIHRpbWVzLCByZXR1cm5pbmcgYW4gYXJyYXkgb2YgdGhlIHJlc3VsdHMgb2ZcbiAgICAgKiBlYWNoIGludm9jYXRpb24uIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OyAoaW5kZXgpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIGludm9rZSBgaXRlcmF0ZWVgLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcmVzdWx0cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50aW1lcygzLCBTdHJpbmcpO1xuICAgICAqIC8vID0+IFsnMCcsICcxJywgJzInXVxuICAgICAqXG4gICAgICogIF8udGltZXMoNCwgXy5jb25zdGFudCgwKSk7XG4gICAgICogLy8gPT4gWzAsIDAsIDAsIDBdXG4gICAgICovXG4gICAgZnVuY3Rpb24gdGltZXMobiwgaXRlcmF0ZWUpIHtcbiAgICAgIG4gPSB0b0ludGVnZXIobik7XG4gICAgICBpZiAobiA8IDEgfHwgbiA+IE1BWF9TQUZFX0lOVEVHRVIpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gTUFYX0FSUkFZX0xFTkdUSCxcbiAgICAgICAgICBsZW5ndGggPSBuYXRpdmVNaW4obiwgTUFYX0FSUkFZX0xFTkdUSCk7XG5cbiAgICAgIGl0ZXJhdGVlID0gZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUpO1xuICAgICAgbiAtPSBNQVhfQVJSQVlfTEVOR1RIO1xuXG4gICAgICB2YXIgcmVzdWx0ID0gYmFzZVRpbWVzKGxlbmd0aCwgaXRlcmF0ZWUpO1xuICAgICAgd2hpbGUgKCsraW5kZXggPCBuKSB7XG4gICAgICAgIGl0ZXJhdGVlKGluZGV4KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50b1BhdGgoJ2EuYi5jJyk7XG4gICAgICogLy8gPT4gWydhJywgJ2InLCAnYyddXG4gICAgICpcbiAgICAgKiBfLnRvUGF0aCgnYVswXS5iLmMnKTtcbiAgICAgKiAvLyA9PiBbJ2EnLCAnMCcsICdiJywgJ2MnXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRvUGF0aCh2YWx1ZSkge1xuICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBhcnJheU1hcCh2YWx1ZSwgdG9LZXkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGlzU3ltYm9sKHZhbHVlKSA/IFt2YWx1ZV0gOiBjb3B5QXJyYXkoc3RyaW5nVG9QYXRoKHRvU3RyaW5nKHZhbHVlKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlcyBhIHVuaXF1ZSBJRC4gSWYgYHByZWZpeGAgaXMgZ2l2ZW4sIHRoZSBJRCBpcyBhcHBlbmRlZCB0byBpdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtwcmVmaXg9JyddIFRoZSB2YWx1ZSB0byBwcmVmaXggdGhlIElEIHdpdGguXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdW5pcXVlIElELlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnVuaXF1ZUlkKCdjb250YWN0XycpO1xuICAgICAqIC8vID0+ICdjb250YWN0XzEwNCdcbiAgICAgKlxuICAgICAqIF8udW5pcXVlSWQoKTtcbiAgICAgKiAvLyA9PiAnMTA1J1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHVuaXF1ZUlkKHByZWZpeCkge1xuICAgICAgdmFyIGlkID0gKytpZENvdW50ZXI7XG4gICAgICByZXR1cm4gdG9TdHJpbmcocHJlZml4KSArIGlkO1xuICAgIH1cblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIEFkZHMgdHdvIG51bWJlcnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy40LjBcbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBhdWdlbmQgVGhlIGZpcnN0IG51bWJlciBpbiBhbiBhZGRpdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYWRkZW5kIFRoZSBzZWNvbmQgbnVtYmVyIGluIGFuIGFkZGl0aW9uLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHRvdGFsLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmFkZCg2LCA0KTtcbiAgICAgKiAvLyA9PiAxMFxuICAgICAqL1xuICAgIHZhciBhZGQgPSBjcmVhdGVNYXRoT3BlcmF0aW9uKGZ1bmN0aW9uKGF1Z2VuZCwgYWRkZW5kKSB7XG4gICAgICByZXR1cm4gYXVnZW5kICsgYWRkZW5kO1xuICAgIH0sIDApO1xuXG4gICAgLyoqXG4gICAgICogQ29tcHV0ZXMgYG51bWJlcmAgcm91bmRlZCB1cCB0byBgcHJlY2lzaW9uYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjEwLjBcbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXIgVGhlIG51bWJlciB0byByb3VuZCB1cC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3ByZWNpc2lvbj0wXSBUaGUgcHJlY2lzaW9uIHRvIHJvdW5kIHVwIHRvLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHJvdW5kZWQgdXAgbnVtYmVyLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmNlaWwoNC4wMDYpO1xuICAgICAqIC8vID0+IDVcbiAgICAgKlxuICAgICAqIF8uY2VpbCg2LjAwNCwgMik7XG4gICAgICogLy8gPT4gNi4wMVxuICAgICAqXG4gICAgICogXy5jZWlsKDYwNDAsIC0yKTtcbiAgICAgKiAvLyA9PiA2MTAwXG4gICAgICovXG4gICAgdmFyIGNlaWwgPSBjcmVhdGVSb3VuZCgnY2VpbCcpO1xuXG4gICAgLyoqXG4gICAgICogRGl2aWRlIHR3byBudW1iZXJzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuNy4wXG4gICAgICogQGNhdGVnb3J5IE1hdGhcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGl2aWRlbmQgVGhlIGZpcnN0IG51bWJlciBpbiBhIGRpdmlzaW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkaXZpc29yIFRoZSBzZWNvbmQgbnVtYmVyIGluIGEgZGl2aXNpb24uXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgcXVvdGllbnQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZGl2aWRlKDYsIDQpO1xuICAgICAqIC8vID0+IDEuNVxuICAgICAqL1xuICAgIHZhciBkaXZpZGUgPSBjcmVhdGVNYXRoT3BlcmF0aW9uKGZ1bmN0aW9uKGRpdmlkZW5kLCBkaXZpc29yKSB7XG4gICAgICByZXR1cm4gZGl2aWRlbmQgLyBkaXZpc29yO1xuICAgIH0sIDEpO1xuXG4gICAgLyoqXG4gICAgICogQ29tcHV0ZXMgYG51bWJlcmAgcm91bmRlZCBkb3duIHRvIGBwcmVjaXNpb25gLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMTAuMFxuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG51bWJlciBUaGUgbnVtYmVyIHRvIHJvdW5kIGRvd24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtwcmVjaXNpb249MF0gVGhlIHByZWNpc2lvbiB0byByb3VuZCBkb3duIHRvLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHJvdW5kZWQgZG93biBudW1iZXIuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZmxvb3IoNC4wMDYpO1xuICAgICAqIC8vID0+IDRcbiAgICAgKlxuICAgICAqIF8uZmxvb3IoMC4wNDYsIDIpO1xuICAgICAqIC8vID0+IDAuMDRcbiAgICAgKlxuICAgICAqIF8uZmxvb3IoNDA2MCwgLTIpO1xuICAgICAqIC8vID0+IDQwMDBcbiAgICAgKi9cbiAgICB2YXIgZmxvb3IgPSBjcmVhdGVSb3VuZCgnZmxvb3InKTtcblxuICAgIC8qKlxuICAgICAqIENvbXB1dGVzIHRoZSBtYXhpbXVtIHZhbHVlIG9mIGBhcnJheWAuIElmIGBhcnJheWAgaXMgZW1wdHkgb3IgZmFsc2V5LFxuICAgICAqIGB1bmRlZmluZWRgIGlzIHJldHVybmVkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE1hdGhcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXhpbXVtIHZhbHVlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLm1heChbNCwgMiwgOCwgNl0pO1xuICAgICAqIC8vID0+IDhcbiAgICAgKlxuICAgICAqIF8ubWF4KFtdKTtcbiAgICAgKiAvLyA9PiB1bmRlZmluZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXgoYXJyYXkpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgICAgICA/IGJhc2VFeHRyZW11bShhcnJheSwgaWRlbnRpdHksIGJhc2VHdClcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5tYXhgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB3aGljaCBpc1xuICAgICAqIGludm9rZWQgZm9yIGVhY2ggZWxlbWVudCBpbiBgYXJyYXlgIHRvIGdlbmVyYXRlIHRoZSBjcml0ZXJpb24gYnkgd2hpY2hcbiAgICAgKiB0aGUgdmFsdWUgaXMgcmFua2VkLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1heGltdW0gdmFsdWUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW3sgJ24nOiAxIH0sIHsgJ24nOiAyIH1dO1xuICAgICAqXG4gICAgICogXy5tYXhCeShvYmplY3RzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLm47IH0pO1xuICAgICAqIC8vID0+IHsgJ24nOiAyIH1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8ubWF4Qnkob2JqZWN0cywgJ24nKTtcbiAgICAgKiAvLyA9PiB7ICduJzogMiB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gbWF4QnkoYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICAgICAgPyBiYXNlRXh0cmVtdW0oYXJyYXksIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSwgYmFzZUd0KVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21wdXRlcyB0aGUgbWVhbiBvZiB0aGUgdmFsdWVzIGluIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgbWVhbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5tZWFuKFs0LCAyLCA4LCA2XSk7XG4gICAgICogLy8gPT4gNVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1lYW4oYXJyYXkpIHtcbiAgICAgIHJldHVybiBiYXNlTWVhbihhcnJheSwgaWRlbnRpdHkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8ubWVhbmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHdoaWNoIGlzXG4gICAgICogaW52b2tlZCBmb3IgZWFjaCBlbGVtZW50IGluIGBhcnJheWAgdG8gZ2VuZXJhdGUgdGhlIHZhbHVlIHRvIGJlIGF2ZXJhZ2VkLlxuICAgICAqIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuNy4wXG4gICAgICogQGNhdGVnb3J5IE1hdGhcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBtZWFuLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFt7ICduJzogNCB9LCB7ICduJzogMiB9LCB7ICduJzogOCB9LCB7ICduJzogNiB9XTtcbiAgICAgKlxuICAgICAqIF8ubWVhbkJ5KG9iamVjdHMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8ubjsgfSk7XG4gICAgICogLy8gPT4gNVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5tZWFuQnkob2JqZWN0cywgJ24nKTtcbiAgICAgKiAvLyA9PiA1XG4gICAgICovXG4gICAgZnVuY3Rpb24gbWVhbkJ5KGFycmF5LCBpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIGJhc2VNZWFuKGFycmF5LCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMikpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbXB1dGVzIHRoZSBtaW5pbXVtIHZhbHVlIG9mIGBhcnJheWAuIElmIGBhcnJheWAgaXMgZW1wdHkgb3IgZmFsc2V5LFxuICAgICAqIGB1bmRlZmluZWRgIGlzIHJldHVybmVkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE1hdGhcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtaW5pbXVtIHZhbHVlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLm1pbihbNCwgMiwgOCwgNl0pO1xuICAgICAqIC8vID0+IDJcbiAgICAgKlxuICAgICAqIF8ubWluKFtdKTtcbiAgICAgKiAvLyA9PiB1bmRlZmluZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtaW4oYXJyYXkpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgICAgICA/IGJhc2VFeHRyZW11bShhcnJheSwgaWRlbnRpdHksIGJhc2VMdClcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5taW5gIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB3aGljaCBpc1xuICAgICAqIGludm9rZWQgZm9yIGVhY2ggZWxlbWVudCBpbiBgYXJyYXlgIHRvIGdlbmVyYXRlIHRoZSBjcml0ZXJpb24gYnkgd2hpY2hcbiAgICAgKiB0aGUgdmFsdWUgaXMgcmFua2VkLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1pbmltdW0gdmFsdWUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW3sgJ24nOiAxIH0sIHsgJ24nOiAyIH1dO1xuICAgICAqXG4gICAgICogXy5taW5CeShvYmplY3RzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLm47IH0pO1xuICAgICAqIC8vID0+IHsgJ24nOiAxIH1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8ubWluQnkob2JqZWN0cywgJ24nKTtcbiAgICAgKiAvLyA9PiB7ICduJzogMSB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gbWluQnkoYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICAgICAgPyBiYXNlRXh0cmVtdW0oYXJyYXksIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSwgYmFzZUx0KVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNdWx0aXBseSB0d28gbnVtYmVycy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjcuMFxuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG11bHRpcGxpZXIgVGhlIGZpcnN0IG51bWJlciBpbiBhIG11bHRpcGxpY2F0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBtdWx0aXBsaWNhbmQgVGhlIHNlY29uZCBudW1iZXIgaW4gYSBtdWx0aXBsaWNhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBwcm9kdWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLm11bHRpcGx5KDYsIDQpO1xuICAgICAqIC8vID0+IDI0XG4gICAgICovXG4gICAgdmFyIG11bHRpcGx5ID0gY3JlYXRlTWF0aE9wZXJhdGlvbihmdW5jdGlvbihtdWx0aXBsaWVyLCBtdWx0aXBsaWNhbmQpIHtcbiAgICAgIHJldHVybiBtdWx0aXBsaWVyICogbXVsdGlwbGljYW5kO1xuICAgIH0sIDEpO1xuXG4gICAgLyoqXG4gICAgICogQ29tcHV0ZXMgYG51bWJlcmAgcm91bmRlZCB0byBgcHJlY2lzaW9uYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjEwLjBcbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXIgVGhlIG51bWJlciB0byByb3VuZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3ByZWNpc2lvbj0wXSBUaGUgcHJlY2lzaW9uIHRvIHJvdW5kIHRvLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHJvdW5kZWQgbnVtYmVyLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnJvdW5kKDQuMDA2KTtcbiAgICAgKiAvLyA9PiA0XG4gICAgICpcbiAgICAgKiBfLnJvdW5kKDQuMDA2LCAyKTtcbiAgICAgKiAvLyA9PiA0LjAxXG4gICAgICpcbiAgICAgKiBfLnJvdW5kKDQwNjAsIC0yKTtcbiAgICAgKiAvLyA9PiA0MTAwXG4gICAgICovXG4gICAgdmFyIHJvdW5kID0gY3JlYXRlUm91bmQoJ3JvdW5kJyk7XG5cbiAgICAvKipcbiAgICAgKiBTdWJ0cmFjdCB0d28gbnVtYmVycy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG1pbnVlbmQgVGhlIGZpcnN0IG51bWJlciBpbiBhIHN1YnRyYWN0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdWJ0cmFoZW5kIFRoZSBzZWNvbmQgbnVtYmVyIGluIGEgc3VidHJhY3Rpb24uXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgZGlmZmVyZW5jZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zdWJ0cmFjdCg2LCA0KTtcbiAgICAgKiAvLyA9PiAyXG4gICAgICovXG4gICAgdmFyIHN1YnRyYWN0ID0gY3JlYXRlTWF0aE9wZXJhdGlvbihmdW5jdGlvbihtaW51ZW5kLCBzdWJ0cmFoZW5kKSB7XG4gICAgICByZXR1cm4gbWludWVuZCAtIHN1YnRyYWhlbmQ7XG4gICAgfSwgMCk7XG5cbiAgICAvKipcbiAgICAgKiBDb21wdXRlcyB0aGUgc3VtIG9mIHRoZSB2YWx1ZXMgaW4gYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjQuMFxuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBzdW0uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc3VtKFs0LCAyLCA4LCA2XSk7XG4gICAgICogLy8gPT4gMjBcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdW0oYXJyYXkpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgICAgICA/IGJhc2VTdW0oYXJyYXksIGlkZW50aXR5KVxuICAgICAgICA6IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5zdW1gIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB3aGljaCBpc1xuICAgICAqIGludm9rZWQgZm9yIGVhY2ggZWxlbWVudCBpbiBgYXJyYXlgIHRvIGdlbmVyYXRlIHRoZSB2YWx1ZSB0byBiZSBzdW1tZWQuXG4gICAgICogVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHN1bS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBbeyAnbic6IDQgfSwgeyAnbic6IDIgfSwgeyAnbic6IDggfSwgeyAnbic6IDYgfV07XG4gICAgICpcbiAgICAgKiBfLnN1bUJ5KG9iamVjdHMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8ubjsgfSk7XG4gICAgICogLy8gPT4gMjBcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uc3VtQnkob2JqZWN0cywgJ24nKTtcbiAgICAgKiAvLyA9PiAyMFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN1bUJ5KGFycmF5LCBpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgICAgID8gYmFzZVN1bShhcnJheSwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDIpKVxuICAgICAgICA6IDA7XG4gICAgfVxuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLy8gQWRkIG1ldGhvZHMgdGhhdCByZXR1cm4gd3JhcHBlZCB2YWx1ZXMgaW4gY2hhaW4gc2VxdWVuY2VzLlxuICAgIGxvZGFzaC5hZnRlciA9IGFmdGVyO1xuICAgIGxvZGFzaC5hcnkgPSBhcnk7XG4gICAgbG9kYXNoLmFzc2lnbiA9IGFzc2lnbjtcbiAgICBsb2Rhc2guYXNzaWduSW4gPSBhc3NpZ25JbjtcbiAgICBsb2Rhc2guYXNzaWduSW5XaXRoID0gYXNzaWduSW5XaXRoO1xuICAgIGxvZGFzaC5hc3NpZ25XaXRoID0gYXNzaWduV2l0aDtcbiAgICBsb2Rhc2guYXQgPSBhdDtcbiAgICBsb2Rhc2guYmVmb3JlID0gYmVmb3JlO1xuICAgIGxvZGFzaC5iaW5kID0gYmluZDtcbiAgICBsb2Rhc2guYmluZEFsbCA9IGJpbmRBbGw7XG4gICAgbG9kYXNoLmJpbmRLZXkgPSBiaW5kS2V5O1xuICAgIGxvZGFzaC5jYXN0QXJyYXkgPSBjYXN0QXJyYXk7XG4gICAgbG9kYXNoLmNoYWluID0gY2hhaW47XG4gICAgbG9kYXNoLmNodW5rID0gY2h1bms7XG4gICAgbG9kYXNoLmNvbXBhY3QgPSBjb21wYWN0O1xuICAgIGxvZGFzaC5jb25jYXQgPSBjb25jYXQ7XG4gICAgbG9kYXNoLmNvbmQgPSBjb25kO1xuICAgIGxvZGFzaC5jb25mb3JtcyA9IGNvbmZvcm1zO1xuICAgIGxvZGFzaC5jb25zdGFudCA9IGNvbnN0YW50O1xuICAgIGxvZGFzaC5jb3VudEJ5ID0gY291bnRCeTtcbiAgICBsb2Rhc2guY3JlYXRlID0gY3JlYXRlO1xuICAgIGxvZGFzaC5jdXJyeSA9IGN1cnJ5O1xuICAgIGxvZGFzaC5jdXJyeVJpZ2h0ID0gY3VycnlSaWdodDtcbiAgICBsb2Rhc2guZGVib3VuY2UgPSBkZWJvdW5jZTtcbiAgICBsb2Rhc2guZGVmYXVsdHMgPSBkZWZhdWx0cztcbiAgICBsb2Rhc2guZGVmYXVsdHNEZWVwID0gZGVmYXVsdHNEZWVwO1xuICAgIGxvZGFzaC5kZWZlciA9IGRlZmVyO1xuICAgIGxvZGFzaC5kZWxheSA9IGRlbGF5O1xuICAgIGxvZGFzaC5kaWZmZXJlbmNlID0gZGlmZmVyZW5jZTtcbiAgICBsb2Rhc2guZGlmZmVyZW5jZUJ5ID0gZGlmZmVyZW5jZUJ5O1xuICAgIGxvZGFzaC5kaWZmZXJlbmNlV2l0aCA9IGRpZmZlcmVuY2VXaXRoO1xuICAgIGxvZGFzaC5kcm9wID0gZHJvcDtcbiAgICBsb2Rhc2guZHJvcFJpZ2h0ID0gZHJvcFJpZ2h0O1xuICAgIGxvZGFzaC5kcm9wUmlnaHRXaGlsZSA9IGRyb3BSaWdodFdoaWxlO1xuICAgIGxvZGFzaC5kcm9wV2hpbGUgPSBkcm9wV2hpbGU7XG4gICAgbG9kYXNoLmZpbGwgPSBmaWxsO1xuICAgIGxvZGFzaC5maWx0ZXIgPSBmaWx0ZXI7XG4gICAgbG9kYXNoLmZsYXRNYXAgPSBmbGF0TWFwO1xuICAgIGxvZGFzaC5mbGF0TWFwRGVlcCA9IGZsYXRNYXBEZWVwO1xuICAgIGxvZGFzaC5mbGF0TWFwRGVwdGggPSBmbGF0TWFwRGVwdGg7XG4gICAgbG9kYXNoLmZsYXR0ZW4gPSBmbGF0dGVuO1xuICAgIGxvZGFzaC5mbGF0dGVuRGVlcCA9IGZsYXR0ZW5EZWVwO1xuICAgIGxvZGFzaC5mbGF0dGVuRGVwdGggPSBmbGF0dGVuRGVwdGg7XG4gICAgbG9kYXNoLmZsaXAgPSBmbGlwO1xuICAgIGxvZGFzaC5mbG93ID0gZmxvdztcbiAgICBsb2Rhc2guZmxvd1JpZ2h0ID0gZmxvd1JpZ2h0O1xuICAgIGxvZGFzaC5mcm9tUGFpcnMgPSBmcm9tUGFpcnM7XG4gICAgbG9kYXNoLmZ1bmN0aW9ucyA9IGZ1bmN0aW9ucztcbiAgICBsb2Rhc2guZnVuY3Rpb25zSW4gPSBmdW5jdGlvbnNJbjtcbiAgICBsb2Rhc2guZ3JvdXBCeSA9IGdyb3VwQnk7XG4gICAgbG9kYXNoLmluaXRpYWwgPSBpbml0aWFsO1xuICAgIGxvZGFzaC5pbnRlcnNlY3Rpb24gPSBpbnRlcnNlY3Rpb247XG4gICAgbG9kYXNoLmludGVyc2VjdGlvbkJ5ID0gaW50ZXJzZWN0aW9uQnk7XG4gICAgbG9kYXNoLmludGVyc2VjdGlvbldpdGggPSBpbnRlcnNlY3Rpb25XaXRoO1xuICAgIGxvZGFzaC5pbnZlcnQgPSBpbnZlcnQ7XG4gICAgbG9kYXNoLmludmVydEJ5ID0gaW52ZXJ0Qnk7XG4gICAgbG9kYXNoLmludm9rZU1hcCA9IGludm9rZU1hcDtcbiAgICBsb2Rhc2guaXRlcmF0ZWUgPSBpdGVyYXRlZTtcbiAgICBsb2Rhc2gua2V5QnkgPSBrZXlCeTtcbiAgICBsb2Rhc2gua2V5cyA9IGtleXM7XG4gICAgbG9kYXNoLmtleXNJbiA9IGtleXNJbjtcbiAgICBsb2Rhc2gubWFwID0gbWFwO1xuICAgIGxvZGFzaC5tYXBLZXlzID0gbWFwS2V5cztcbiAgICBsb2Rhc2gubWFwVmFsdWVzID0gbWFwVmFsdWVzO1xuICAgIGxvZGFzaC5tYXRjaGVzID0gbWF0Y2hlcztcbiAgICBsb2Rhc2gubWF0Y2hlc1Byb3BlcnR5ID0gbWF0Y2hlc1Byb3BlcnR5O1xuICAgIGxvZGFzaC5tZW1vaXplID0gbWVtb2l6ZTtcbiAgICBsb2Rhc2gubWVyZ2UgPSBtZXJnZTtcbiAgICBsb2Rhc2gubWVyZ2VXaXRoID0gbWVyZ2VXaXRoO1xuICAgIGxvZGFzaC5tZXRob2QgPSBtZXRob2Q7XG4gICAgbG9kYXNoLm1ldGhvZE9mID0gbWV0aG9kT2Y7XG4gICAgbG9kYXNoLm1peGluID0gbWl4aW47XG4gICAgbG9kYXNoLm5lZ2F0ZSA9IG5lZ2F0ZTtcbiAgICBsb2Rhc2gubnRoQXJnID0gbnRoQXJnO1xuICAgIGxvZGFzaC5vbWl0ID0gb21pdDtcbiAgICBsb2Rhc2gub21pdEJ5ID0gb21pdEJ5O1xuICAgIGxvZGFzaC5vbmNlID0gb25jZTtcbiAgICBsb2Rhc2gub3JkZXJCeSA9IG9yZGVyQnk7XG4gICAgbG9kYXNoLm92ZXIgPSBvdmVyO1xuICAgIGxvZGFzaC5vdmVyQXJncyA9IG92ZXJBcmdzO1xuICAgIGxvZGFzaC5vdmVyRXZlcnkgPSBvdmVyRXZlcnk7XG4gICAgbG9kYXNoLm92ZXJTb21lID0gb3ZlclNvbWU7XG4gICAgbG9kYXNoLnBhcnRpYWwgPSBwYXJ0aWFsO1xuICAgIGxvZGFzaC5wYXJ0aWFsUmlnaHQgPSBwYXJ0aWFsUmlnaHQ7XG4gICAgbG9kYXNoLnBhcnRpdGlvbiA9IHBhcnRpdGlvbjtcbiAgICBsb2Rhc2gucGljayA9IHBpY2s7XG4gICAgbG9kYXNoLnBpY2tCeSA9IHBpY2tCeTtcbiAgICBsb2Rhc2gucHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICBsb2Rhc2gucHJvcGVydHlPZiA9IHByb3BlcnR5T2Y7XG4gICAgbG9kYXNoLnB1bGwgPSBwdWxsO1xuICAgIGxvZGFzaC5wdWxsQWxsID0gcHVsbEFsbDtcbiAgICBsb2Rhc2gucHVsbEFsbEJ5ID0gcHVsbEFsbEJ5O1xuICAgIGxvZGFzaC5wdWxsQWxsV2l0aCA9IHB1bGxBbGxXaXRoO1xuICAgIGxvZGFzaC5wdWxsQXQgPSBwdWxsQXQ7XG4gICAgbG9kYXNoLnJhbmdlID0gcmFuZ2U7XG4gICAgbG9kYXNoLnJhbmdlUmlnaHQgPSByYW5nZVJpZ2h0O1xuICAgIGxvZGFzaC5yZWFyZyA9IHJlYXJnO1xuICAgIGxvZGFzaC5yZWplY3QgPSByZWplY3Q7XG4gICAgbG9kYXNoLnJlbW92ZSA9IHJlbW92ZTtcbiAgICBsb2Rhc2gucmVzdCA9IHJlc3Q7XG4gICAgbG9kYXNoLnJldmVyc2UgPSByZXZlcnNlO1xuICAgIGxvZGFzaC5zYW1wbGVTaXplID0gc2FtcGxlU2l6ZTtcbiAgICBsb2Rhc2guc2V0ID0gc2V0O1xuICAgIGxvZGFzaC5zZXRXaXRoID0gc2V0V2l0aDtcbiAgICBsb2Rhc2guc2h1ZmZsZSA9IHNodWZmbGU7XG4gICAgbG9kYXNoLnNsaWNlID0gc2xpY2U7XG4gICAgbG9kYXNoLnNvcnRCeSA9IHNvcnRCeTtcbiAgICBsb2Rhc2guc29ydGVkVW5pcSA9IHNvcnRlZFVuaXE7XG4gICAgbG9kYXNoLnNvcnRlZFVuaXFCeSA9IHNvcnRlZFVuaXFCeTtcbiAgICBsb2Rhc2guc3BsaXQgPSBzcGxpdDtcbiAgICBsb2Rhc2guc3ByZWFkID0gc3ByZWFkO1xuICAgIGxvZGFzaC50YWlsID0gdGFpbDtcbiAgICBsb2Rhc2gudGFrZSA9IHRha2U7XG4gICAgbG9kYXNoLnRha2VSaWdodCA9IHRha2VSaWdodDtcbiAgICBsb2Rhc2gudGFrZVJpZ2h0V2hpbGUgPSB0YWtlUmlnaHRXaGlsZTtcbiAgICBsb2Rhc2gudGFrZVdoaWxlID0gdGFrZVdoaWxlO1xuICAgIGxvZGFzaC50YXAgPSB0YXA7XG4gICAgbG9kYXNoLnRocm90dGxlID0gdGhyb3R0bGU7XG4gICAgbG9kYXNoLnRocnUgPSB0aHJ1O1xuICAgIGxvZGFzaC50b0FycmF5ID0gdG9BcnJheTtcbiAgICBsb2Rhc2gudG9QYWlycyA9IHRvUGFpcnM7XG4gICAgbG9kYXNoLnRvUGFpcnNJbiA9IHRvUGFpcnNJbjtcbiAgICBsb2Rhc2gudG9QYXRoID0gdG9QYXRoO1xuICAgIGxvZGFzaC50b1BsYWluT2JqZWN0ID0gdG9QbGFpbk9iamVjdDtcbiAgICBsb2Rhc2gudHJhbnNmb3JtID0gdHJhbnNmb3JtO1xuICAgIGxvZGFzaC51bmFyeSA9IHVuYXJ5O1xuICAgIGxvZGFzaC51bmlvbiA9IHVuaW9uO1xuICAgIGxvZGFzaC51bmlvbkJ5ID0gdW5pb25CeTtcbiAgICBsb2Rhc2gudW5pb25XaXRoID0gdW5pb25XaXRoO1xuICAgIGxvZGFzaC51bmlxID0gdW5pcTtcbiAgICBsb2Rhc2gudW5pcUJ5ID0gdW5pcUJ5O1xuICAgIGxvZGFzaC51bmlxV2l0aCA9IHVuaXFXaXRoO1xuICAgIGxvZGFzaC51bnNldCA9IHVuc2V0O1xuICAgIGxvZGFzaC51bnppcCA9IHVuemlwO1xuICAgIGxvZGFzaC51bnppcFdpdGggPSB1bnppcFdpdGg7XG4gICAgbG9kYXNoLnVwZGF0ZSA9IHVwZGF0ZTtcbiAgICBsb2Rhc2gudXBkYXRlV2l0aCA9IHVwZGF0ZVdpdGg7XG4gICAgbG9kYXNoLnZhbHVlcyA9IHZhbHVlcztcbiAgICBsb2Rhc2gudmFsdWVzSW4gPSB2YWx1ZXNJbjtcbiAgICBsb2Rhc2gud2l0aG91dCA9IHdpdGhvdXQ7XG4gICAgbG9kYXNoLndvcmRzID0gd29yZHM7XG4gICAgbG9kYXNoLndyYXAgPSB3cmFwO1xuICAgIGxvZGFzaC54b3IgPSB4b3I7XG4gICAgbG9kYXNoLnhvckJ5ID0geG9yQnk7XG4gICAgbG9kYXNoLnhvcldpdGggPSB4b3JXaXRoO1xuICAgIGxvZGFzaC56aXAgPSB6aXA7XG4gICAgbG9kYXNoLnppcE9iamVjdCA9IHppcE9iamVjdDtcbiAgICBsb2Rhc2guemlwT2JqZWN0RGVlcCA9IHppcE9iamVjdERlZXA7XG4gICAgbG9kYXNoLnppcFdpdGggPSB6aXBXaXRoO1xuXG4gICAgLy8gQWRkIGFsaWFzZXMuXG4gICAgbG9kYXNoLmVudHJpZXMgPSB0b1BhaXJzO1xuICAgIGxvZGFzaC5lbnRyaWVzSW4gPSB0b1BhaXJzSW47XG4gICAgbG9kYXNoLmV4dGVuZCA9IGFzc2lnbkluO1xuICAgIGxvZGFzaC5leHRlbmRXaXRoID0gYXNzaWduSW5XaXRoO1xuXG4gICAgLy8gQWRkIG1ldGhvZHMgdG8gYGxvZGFzaC5wcm90b3R5cGVgLlxuICAgIG1peGluKGxvZGFzaCwgbG9kYXNoKTtcblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8vIEFkZCBtZXRob2RzIHRoYXQgcmV0dXJuIHVud3JhcHBlZCB2YWx1ZXMgaW4gY2hhaW4gc2VxdWVuY2VzLlxuICAgIGxvZGFzaC5hZGQgPSBhZGQ7XG4gICAgbG9kYXNoLmF0dGVtcHQgPSBhdHRlbXB0O1xuICAgIGxvZGFzaC5jYW1lbENhc2UgPSBjYW1lbENhc2U7XG4gICAgbG9kYXNoLmNhcGl0YWxpemUgPSBjYXBpdGFsaXplO1xuICAgIGxvZGFzaC5jZWlsID0gY2VpbDtcbiAgICBsb2Rhc2guY2xhbXAgPSBjbGFtcDtcbiAgICBsb2Rhc2guY2xvbmUgPSBjbG9uZTtcbiAgICBsb2Rhc2guY2xvbmVEZWVwID0gY2xvbmVEZWVwO1xuICAgIGxvZGFzaC5jbG9uZURlZXBXaXRoID0gY2xvbmVEZWVwV2l0aDtcbiAgICBsb2Rhc2guY2xvbmVXaXRoID0gY2xvbmVXaXRoO1xuICAgIGxvZGFzaC5jb25mb3Jtc1RvID0gY29uZm9ybXNUbztcbiAgICBsb2Rhc2guZGVidXJyID0gZGVidXJyO1xuICAgIGxvZGFzaC5kZWZhdWx0VG8gPSBkZWZhdWx0VG87XG4gICAgbG9kYXNoLmRpdmlkZSA9IGRpdmlkZTtcbiAgICBsb2Rhc2guZW5kc1dpdGggPSBlbmRzV2l0aDtcbiAgICBsb2Rhc2guZXEgPSBlcTtcbiAgICBsb2Rhc2guZXNjYXBlID0gZXNjYXBlO1xuICAgIGxvZGFzaC5lc2NhcGVSZWdFeHAgPSBlc2NhcGVSZWdFeHA7XG4gICAgbG9kYXNoLmV2ZXJ5ID0gZXZlcnk7XG4gICAgbG9kYXNoLmZpbmQgPSBmaW5kO1xuICAgIGxvZGFzaC5maW5kSW5kZXggPSBmaW5kSW5kZXg7XG4gICAgbG9kYXNoLmZpbmRLZXkgPSBmaW5kS2V5O1xuICAgIGxvZGFzaC5maW5kTGFzdCA9IGZpbmRMYXN0O1xuICAgIGxvZGFzaC5maW5kTGFzdEluZGV4ID0gZmluZExhc3RJbmRleDtcbiAgICBsb2Rhc2guZmluZExhc3RLZXkgPSBmaW5kTGFzdEtleTtcbiAgICBsb2Rhc2guZmxvb3IgPSBmbG9vcjtcbiAgICBsb2Rhc2guZm9yRWFjaCA9IGZvckVhY2g7XG4gICAgbG9kYXNoLmZvckVhY2hSaWdodCA9IGZvckVhY2hSaWdodDtcbiAgICBsb2Rhc2guZm9ySW4gPSBmb3JJbjtcbiAgICBsb2Rhc2guZm9ySW5SaWdodCA9IGZvckluUmlnaHQ7XG4gICAgbG9kYXNoLmZvck93biA9IGZvck93bjtcbiAgICBsb2Rhc2guZm9yT3duUmlnaHQgPSBmb3JPd25SaWdodDtcbiAgICBsb2Rhc2guZ2V0ID0gZ2V0O1xuICAgIGxvZGFzaC5ndCA9IGd0O1xuICAgIGxvZGFzaC5ndGUgPSBndGU7XG4gICAgbG9kYXNoLmhhcyA9IGhhcztcbiAgICBsb2Rhc2guaGFzSW4gPSBoYXNJbjtcbiAgICBsb2Rhc2guaGVhZCA9IGhlYWQ7XG4gICAgbG9kYXNoLmlkZW50aXR5ID0gaWRlbnRpdHk7XG4gICAgbG9kYXNoLmluY2x1ZGVzID0gaW5jbHVkZXM7XG4gICAgbG9kYXNoLmluZGV4T2YgPSBpbmRleE9mO1xuICAgIGxvZGFzaC5pblJhbmdlID0gaW5SYW5nZTtcbiAgICBsb2Rhc2guaW52b2tlID0gaW52b2tlO1xuICAgIGxvZGFzaC5pc0FyZ3VtZW50cyA9IGlzQXJndW1lbnRzO1xuICAgIGxvZGFzaC5pc0FycmF5ID0gaXNBcnJheTtcbiAgICBsb2Rhc2guaXNBcnJheUJ1ZmZlciA9IGlzQXJyYXlCdWZmZXI7XG4gICAgbG9kYXNoLmlzQXJyYXlMaWtlID0gaXNBcnJheUxpa2U7XG4gICAgbG9kYXNoLmlzQXJyYXlMaWtlT2JqZWN0ID0gaXNBcnJheUxpa2VPYmplY3Q7XG4gICAgbG9kYXNoLmlzQm9vbGVhbiA9IGlzQm9vbGVhbjtcbiAgICBsb2Rhc2guaXNCdWZmZXIgPSBpc0J1ZmZlcjtcbiAgICBsb2Rhc2guaXNEYXRlID0gaXNEYXRlO1xuICAgIGxvZGFzaC5pc0VsZW1lbnQgPSBpc0VsZW1lbnQ7XG4gICAgbG9kYXNoLmlzRW1wdHkgPSBpc0VtcHR5O1xuICAgIGxvZGFzaC5pc0VxdWFsID0gaXNFcXVhbDtcbiAgICBsb2Rhc2guaXNFcXVhbFdpdGggPSBpc0VxdWFsV2l0aDtcbiAgICBsb2Rhc2guaXNFcnJvciA9IGlzRXJyb3I7XG4gICAgbG9kYXNoLmlzRmluaXRlID0gaXNGaW5pdGU7XG4gICAgbG9kYXNoLmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uO1xuICAgIGxvZGFzaC5pc0ludGVnZXIgPSBpc0ludGVnZXI7XG4gICAgbG9kYXNoLmlzTGVuZ3RoID0gaXNMZW5ndGg7XG4gICAgbG9kYXNoLmlzTWFwID0gaXNNYXA7XG4gICAgbG9kYXNoLmlzTWF0Y2ggPSBpc01hdGNoO1xuICAgIGxvZGFzaC5pc01hdGNoV2l0aCA9IGlzTWF0Y2hXaXRoO1xuICAgIGxvZGFzaC5pc05hTiA9IGlzTmFOO1xuICAgIGxvZGFzaC5pc05hdGl2ZSA9IGlzTmF0aXZlO1xuICAgIGxvZGFzaC5pc05pbCA9IGlzTmlsO1xuICAgIGxvZGFzaC5pc051bGwgPSBpc051bGw7XG4gICAgbG9kYXNoLmlzTnVtYmVyID0gaXNOdW1iZXI7XG4gICAgbG9kYXNoLmlzT2JqZWN0ID0gaXNPYmplY3Q7XG4gICAgbG9kYXNoLmlzT2JqZWN0TGlrZSA9IGlzT2JqZWN0TGlrZTtcbiAgICBsb2Rhc2guaXNQbGFpbk9iamVjdCA9IGlzUGxhaW5PYmplY3Q7XG4gICAgbG9kYXNoLmlzUmVnRXhwID0gaXNSZWdFeHA7XG4gICAgbG9kYXNoLmlzU2FmZUludGVnZXIgPSBpc1NhZmVJbnRlZ2VyO1xuICAgIGxvZGFzaC5pc1NldCA9IGlzU2V0O1xuICAgIGxvZGFzaC5pc1N0cmluZyA9IGlzU3RyaW5nO1xuICAgIGxvZGFzaC5pc1N5bWJvbCA9IGlzU3ltYm9sO1xuICAgIGxvZGFzaC5pc1R5cGVkQXJyYXkgPSBpc1R5cGVkQXJyYXk7XG4gICAgbG9kYXNoLmlzVW5kZWZpbmVkID0gaXNVbmRlZmluZWQ7XG4gICAgbG9kYXNoLmlzV2Vha01hcCA9IGlzV2Vha01hcDtcbiAgICBsb2Rhc2guaXNXZWFrU2V0ID0gaXNXZWFrU2V0O1xuICAgIGxvZGFzaC5qb2luID0gam9pbjtcbiAgICBsb2Rhc2gua2ViYWJDYXNlID0ga2ViYWJDYXNlO1xuICAgIGxvZGFzaC5sYXN0ID0gbGFzdDtcbiAgICBsb2Rhc2gubGFzdEluZGV4T2YgPSBsYXN0SW5kZXhPZjtcbiAgICBsb2Rhc2gubG93ZXJDYXNlID0gbG93ZXJDYXNlO1xuICAgIGxvZGFzaC5sb3dlckZpcnN0ID0gbG93ZXJGaXJzdDtcbiAgICBsb2Rhc2gubHQgPSBsdDtcbiAgICBsb2Rhc2gubHRlID0gbHRlO1xuICAgIGxvZGFzaC5tYXggPSBtYXg7XG4gICAgbG9kYXNoLm1heEJ5ID0gbWF4Qnk7XG4gICAgbG9kYXNoLm1lYW4gPSBtZWFuO1xuICAgIGxvZGFzaC5tZWFuQnkgPSBtZWFuQnk7XG4gICAgbG9kYXNoLm1pbiA9IG1pbjtcbiAgICBsb2Rhc2gubWluQnkgPSBtaW5CeTtcbiAgICBsb2Rhc2guc3R1YkFycmF5ID0gc3R1YkFycmF5O1xuICAgIGxvZGFzaC5zdHViRmFsc2UgPSBzdHViRmFsc2U7XG4gICAgbG9kYXNoLnN0dWJPYmplY3QgPSBzdHViT2JqZWN0O1xuICAgIGxvZGFzaC5zdHViU3RyaW5nID0gc3R1YlN0cmluZztcbiAgICBsb2Rhc2guc3R1YlRydWUgPSBzdHViVHJ1ZTtcbiAgICBsb2Rhc2gubXVsdGlwbHkgPSBtdWx0aXBseTtcbiAgICBsb2Rhc2gubnRoID0gbnRoO1xuICAgIGxvZGFzaC5ub0NvbmZsaWN0ID0gbm9Db25mbGljdDtcbiAgICBsb2Rhc2gubm9vcCA9IG5vb3A7XG4gICAgbG9kYXNoLm5vdyA9IG5vdztcbiAgICBsb2Rhc2gucGFkID0gcGFkO1xuICAgIGxvZGFzaC5wYWRFbmQgPSBwYWRFbmQ7XG4gICAgbG9kYXNoLnBhZFN0YXJ0ID0gcGFkU3RhcnQ7XG4gICAgbG9kYXNoLnBhcnNlSW50ID0gcGFyc2VJbnQ7XG4gICAgbG9kYXNoLnJhbmRvbSA9IHJhbmRvbTtcbiAgICBsb2Rhc2gucmVkdWNlID0gcmVkdWNlO1xuICAgIGxvZGFzaC5yZWR1Y2VSaWdodCA9IHJlZHVjZVJpZ2h0O1xuICAgIGxvZGFzaC5yZXBlYXQgPSByZXBlYXQ7XG4gICAgbG9kYXNoLnJlcGxhY2UgPSByZXBsYWNlO1xuICAgIGxvZGFzaC5yZXN1bHQgPSByZXN1bHQ7XG4gICAgbG9kYXNoLnJvdW5kID0gcm91bmQ7XG4gICAgbG9kYXNoLnJ1bkluQ29udGV4dCA9IHJ1bkluQ29udGV4dDtcbiAgICBsb2Rhc2guc2FtcGxlID0gc2FtcGxlO1xuICAgIGxvZGFzaC5zaXplID0gc2l6ZTtcbiAgICBsb2Rhc2guc25ha2VDYXNlID0gc25ha2VDYXNlO1xuICAgIGxvZGFzaC5zb21lID0gc29tZTtcbiAgICBsb2Rhc2guc29ydGVkSW5kZXggPSBzb3J0ZWRJbmRleDtcbiAgICBsb2Rhc2guc29ydGVkSW5kZXhCeSA9IHNvcnRlZEluZGV4Qnk7XG4gICAgbG9kYXNoLnNvcnRlZEluZGV4T2YgPSBzb3J0ZWRJbmRleE9mO1xuICAgIGxvZGFzaC5zb3J0ZWRMYXN0SW5kZXggPSBzb3J0ZWRMYXN0SW5kZXg7XG4gICAgbG9kYXNoLnNvcnRlZExhc3RJbmRleEJ5ID0gc29ydGVkTGFzdEluZGV4Qnk7XG4gICAgbG9kYXNoLnNvcnRlZExhc3RJbmRleE9mID0gc29ydGVkTGFzdEluZGV4T2Y7XG4gICAgbG9kYXNoLnN0YXJ0Q2FzZSA9IHN0YXJ0Q2FzZTtcbiAgICBsb2Rhc2guc3RhcnRzV2l0aCA9IHN0YXJ0c1dpdGg7XG4gICAgbG9kYXNoLnN1YnRyYWN0ID0gc3VidHJhY3Q7XG4gICAgbG9kYXNoLnN1bSA9IHN1bTtcbiAgICBsb2Rhc2guc3VtQnkgPSBzdW1CeTtcbiAgICBsb2Rhc2gudGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbiAgICBsb2Rhc2gudGltZXMgPSB0aW1lcztcbiAgICBsb2Rhc2gudG9GaW5pdGUgPSB0b0Zpbml0ZTtcbiAgICBsb2Rhc2gudG9JbnRlZ2VyID0gdG9JbnRlZ2VyO1xuICAgIGxvZGFzaC50b0xlbmd0aCA9IHRvTGVuZ3RoO1xuICAgIGxvZGFzaC50b0xvd2VyID0gdG9Mb3dlcjtcbiAgICBsb2Rhc2gudG9OdW1iZXIgPSB0b051bWJlcjtcbiAgICBsb2Rhc2gudG9TYWZlSW50ZWdlciA9IHRvU2FmZUludGVnZXI7XG4gICAgbG9kYXNoLnRvU3RyaW5nID0gdG9TdHJpbmc7XG4gICAgbG9kYXNoLnRvVXBwZXIgPSB0b1VwcGVyO1xuICAgIGxvZGFzaC50cmltID0gdHJpbTtcbiAgICBsb2Rhc2gudHJpbUVuZCA9IHRyaW1FbmQ7XG4gICAgbG9kYXNoLnRyaW1TdGFydCA9IHRyaW1TdGFydDtcbiAgICBsb2Rhc2gudHJ1bmNhdGUgPSB0cnVuY2F0ZTtcbiAgICBsb2Rhc2gudW5lc2NhcGUgPSB1bmVzY2FwZTtcbiAgICBsb2Rhc2gudW5pcXVlSWQgPSB1bmlxdWVJZDtcbiAgICBsb2Rhc2gudXBwZXJDYXNlID0gdXBwZXJDYXNlO1xuICAgIGxvZGFzaC51cHBlckZpcnN0ID0gdXBwZXJGaXJzdDtcblxuICAgIC8vIEFkZCBhbGlhc2VzLlxuICAgIGxvZGFzaC5lYWNoID0gZm9yRWFjaDtcbiAgICBsb2Rhc2guZWFjaFJpZ2h0ID0gZm9yRWFjaFJpZ2h0O1xuICAgIGxvZGFzaC5maXJzdCA9IGhlYWQ7XG5cbiAgICBtaXhpbihsb2Rhc2gsIChmdW5jdGlvbigpIHtcbiAgICAgIHZhciBzb3VyY2UgPSB7fTtcbiAgICAgIGJhc2VGb3JPd24obG9kYXNoLCBmdW5jdGlvbihmdW5jLCBtZXRob2ROYW1lKSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcGVydHkuY2FsbChsb2Rhc2gucHJvdG90eXBlLCBtZXRob2ROYW1lKSkge1xuICAgICAgICAgIHNvdXJjZVttZXRob2ROYW1lXSA9IGZ1bmM7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICB9KCkpLCB7ICdjaGFpbic6IGZhbHNlIH0pO1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNlbWFudGljIHZlcnNpb24gbnVtYmVyLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICBsb2Rhc2guVkVSU0lPTiA9IFZFUlNJT047XG5cbiAgICAvLyBBc3NpZ24gZGVmYXVsdCBwbGFjZWhvbGRlcnMuXG4gICAgYXJyYXlFYWNoKFsnYmluZCcsICdiaW5kS2V5JywgJ2N1cnJ5JywgJ2N1cnJ5UmlnaHQnLCAncGFydGlhbCcsICdwYXJ0aWFsUmlnaHQnXSwgZnVuY3Rpb24obWV0aG9kTmFtZSkge1xuICAgICAgbG9kYXNoW21ldGhvZE5hbWVdLnBsYWNlaG9sZGVyID0gbG9kYXNoO1xuICAgIH0pO1xuXG4gICAgLy8gQWRkIGBMYXp5V3JhcHBlcmAgbWV0aG9kcyBmb3IgYF8uZHJvcGAgYW5kIGBfLnRha2VgIHZhcmlhbnRzLlxuICAgIGFycmF5RWFjaChbJ2Ryb3AnLCAndGFrZSddLCBmdW5jdGlvbihtZXRob2ROYW1lLCBpbmRleCkge1xuICAgICAgTGF6eVdyYXBwZXIucHJvdG90eXBlW21ldGhvZE5hbWVdID0gZnVuY3Rpb24obikge1xuICAgICAgICBuID0gbiA9PT0gdW5kZWZpbmVkID8gMSA6IG5hdGl2ZU1heCh0b0ludGVnZXIobiksIDApO1xuXG4gICAgICAgIHZhciByZXN1bHQgPSAodGhpcy5fX2ZpbHRlcmVkX18gJiYgIWluZGV4KVxuICAgICAgICAgID8gbmV3IExhenlXcmFwcGVyKHRoaXMpXG4gICAgICAgICAgOiB0aGlzLmNsb25lKCk7XG5cbiAgICAgICAgaWYgKHJlc3VsdC5fX2ZpbHRlcmVkX18pIHtcbiAgICAgICAgICByZXN1bHQuX190YWtlQ291bnRfXyA9IG5hdGl2ZU1pbihuLCByZXN1bHQuX190YWtlQ291bnRfXyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0Ll9fdmlld3NfXy5wdXNoKHtcbiAgICAgICAgICAgICdzaXplJzogbmF0aXZlTWluKG4sIE1BWF9BUlJBWV9MRU5HVEgpLFxuICAgICAgICAgICAgJ3R5cGUnOiBtZXRob2ROYW1lICsgKHJlc3VsdC5fX2Rpcl9fIDwgMCA/ICdSaWdodCcgOiAnJylcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfTtcblxuICAgICAgTGF6eVdyYXBwZXIucHJvdG90eXBlW21ldGhvZE5hbWUgKyAnUmlnaHQnXSA9IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmV2ZXJzZSgpW21ldGhvZE5hbWVdKG4pLnJldmVyc2UoKTtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgYExhenlXcmFwcGVyYCBtZXRob2RzIHRoYXQgYWNjZXB0IGFuIGBpdGVyYXRlZWAgdmFsdWUuXG4gICAgYXJyYXlFYWNoKFsnZmlsdGVyJywgJ21hcCcsICd0YWtlV2hpbGUnXSwgZnVuY3Rpb24obWV0aG9kTmFtZSwgaW5kZXgpIHtcbiAgICAgIHZhciB0eXBlID0gaW5kZXggKyAxLFxuICAgICAgICAgIGlzRmlsdGVyID0gdHlwZSA9PSBMQVpZX0ZJTFRFUl9GTEFHIHx8IHR5cGUgPT0gTEFaWV9XSElMRV9GTEFHO1xuXG4gICAgICBMYXp5V3JhcHBlci5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbihpdGVyYXRlZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5jbG9uZSgpO1xuICAgICAgICByZXN1bHQuX19pdGVyYXRlZXNfXy5wdXNoKHtcbiAgICAgICAgICAnaXRlcmF0ZWUnOiBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMyksXG4gICAgICAgICAgJ3R5cGUnOiB0eXBlXG4gICAgICAgIH0pO1xuICAgICAgICByZXN1bHQuX19maWx0ZXJlZF9fID0gcmVzdWx0Ll9fZmlsdGVyZWRfXyB8fCBpc0ZpbHRlcjtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgYExhenlXcmFwcGVyYCBtZXRob2RzIGZvciBgXy5oZWFkYCBhbmQgYF8ubGFzdGAuXG4gICAgYXJyYXlFYWNoKFsnaGVhZCcsICdsYXN0J10sIGZ1bmN0aW9uKG1ldGhvZE5hbWUsIGluZGV4KSB7XG4gICAgICB2YXIgdGFrZU5hbWUgPSAndGFrZScgKyAoaW5kZXggPyAnUmlnaHQnIDogJycpO1xuXG4gICAgICBMYXp5V3JhcHBlci5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbdGFrZU5hbWVdKDEpLnZhbHVlKClbMF07XG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgLy8gQWRkIGBMYXp5V3JhcHBlcmAgbWV0aG9kcyBmb3IgYF8uaW5pdGlhbGAgYW5kIGBfLnRhaWxgLlxuICAgIGFycmF5RWFjaChbJ2luaXRpYWwnLCAndGFpbCddLCBmdW5jdGlvbihtZXRob2ROYW1lLCBpbmRleCkge1xuICAgICAgdmFyIGRyb3BOYW1lID0gJ2Ryb3AnICsgKGluZGV4ID8gJycgOiAnUmlnaHQnKTtcblxuICAgICAgTGF6eVdyYXBwZXIucHJvdG90eXBlW21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9fZmlsdGVyZWRfXyA/IG5ldyBMYXp5V3JhcHBlcih0aGlzKSA6IHRoaXNbZHJvcE5hbWVdKDEpO1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS5jb21wYWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5maWx0ZXIoaWRlbnRpdHkpO1xuICAgIH07XG5cbiAgICBMYXp5V3JhcHBlci5wcm90b3R5cGUuZmluZCA9IGZ1bmN0aW9uKHByZWRpY2F0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKHByZWRpY2F0ZSkuaGVhZCgpO1xuICAgIH07XG5cbiAgICBMYXp5V3JhcHBlci5wcm90b3R5cGUuZmluZExhc3QgPSBmdW5jdGlvbihwcmVkaWNhdGUpIHtcbiAgICAgIHJldHVybiB0aGlzLnJldmVyc2UoKS5maW5kKHByZWRpY2F0ZSk7XG4gICAgfTtcblxuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS5pbnZva2VNYXAgPSBiYXNlUmVzdChmdW5jdGlvbihwYXRoLCBhcmdzKSB7XG4gICAgICBpZiAodHlwZW9mIHBhdGggPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IExhenlXcmFwcGVyKHRoaXMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBiYXNlSW52b2tlKHZhbHVlLCBwYXRoLCBhcmdzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgTGF6eVdyYXBwZXIucHJvdG90eXBlLnJlamVjdCA9IGZ1bmN0aW9uKHByZWRpY2F0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKG5lZ2F0ZShnZXRJdGVyYXRlZShwcmVkaWNhdGUpKSk7XG4gICAgfTtcblxuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICAgIHN0YXJ0ID0gdG9JbnRlZ2VyKHN0YXJ0KTtcblxuICAgICAgdmFyIHJlc3VsdCA9IHRoaXM7XG4gICAgICBpZiAocmVzdWx0Ll9fZmlsdGVyZWRfXyAmJiAoc3RhcnQgPiAwIHx8IGVuZCA8IDApKSB7XG4gICAgICAgIHJldHVybiBuZXcgTGF6eVdyYXBwZXIocmVzdWx0KTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGFydCA8IDApIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnRha2VSaWdodCgtc3RhcnQpO1xuICAgICAgfSBlbHNlIGlmIChzdGFydCkge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQuZHJvcChzdGFydCk7XG4gICAgICB9XG4gICAgICBpZiAoZW5kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZW5kID0gdG9JbnRlZ2VyKGVuZCk7XG4gICAgICAgIHJlc3VsdCA9IGVuZCA8IDAgPyByZXN1bHQuZHJvcFJpZ2h0KC1lbmQpIDogcmVzdWx0LnRha2UoZW5kIC0gc3RhcnQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgTGF6eVdyYXBwZXIucHJvdG90eXBlLnRha2VSaWdodFdoaWxlID0gZnVuY3Rpb24ocHJlZGljYXRlKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXZlcnNlKCkudGFrZVdoaWxlKHByZWRpY2F0ZSkucmV2ZXJzZSgpO1xuICAgIH07XG5cbiAgICBMYXp5V3JhcHBlci5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMudGFrZShNQVhfQVJSQVlfTEVOR1RIKTtcbiAgICB9O1xuXG4gICAgLy8gQWRkIGBMYXp5V3JhcHBlcmAgbWV0aG9kcyB0byBgbG9kYXNoLnByb3RvdHlwZWAuXG4gICAgYmFzZUZvck93bihMYXp5V3JhcHBlci5wcm90b3R5cGUsIGZ1bmN0aW9uKGZ1bmMsIG1ldGhvZE5hbWUpIHtcbiAgICAgIHZhciBjaGVja0l0ZXJhdGVlID0gL14oPzpmaWx0ZXJ8ZmluZHxtYXB8cmVqZWN0KXxXaGlsZSQvLnRlc3QobWV0aG9kTmFtZSksXG4gICAgICAgICAgaXNUYWtlciA9IC9eKD86aGVhZHxsYXN0KSQvLnRlc3QobWV0aG9kTmFtZSksXG4gICAgICAgICAgbG9kYXNoRnVuYyA9IGxvZGFzaFtpc1Rha2VyID8gKCd0YWtlJyArIChtZXRob2ROYW1lID09ICdsYXN0JyA/ICdSaWdodCcgOiAnJykpIDogbWV0aG9kTmFtZV0sXG4gICAgICAgICAgcmV0VW53cmFwcGVkID0gaXNUYWtlciB8fCAvXmZpbmQvLnRlc3QobWV0aG9kTmFtZSk7XG5cbiAgICAgIGlmICghbG9kYXNoRnVuYykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsb2Rhc2gucHJvdG90eXBlW21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuX193cmFwcGVkX18sXG4gICAgICAgICAgICBhcmdzID0gaXNUYWtlciA/IFsxXSA6IGFyZ3VtZW50cyxcbiAgICAgICAgICAgIGlzTGF6eSA9IHZhbHVlIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIsXG4gICAgICAgICAgICBpdGVyYXRlZSA9IGFyZ3NbMF0sXG4gICAgICAgICAgICB1c2VMYXp5ID0gaXNMYXp5IHx8IGlzQXJyYXkodmFsdWUpO1xuXG4gICAgICAgIHZhciBpbnRlcmNlcHRvciA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IGxvZGFzaEZ1bmMuYXBwbHkobG9kYXNoLCBhcnJheVB1c2goW3ZhbHVlXSwgYXJncykpO1xuICAgICAgICAgIHJldHVybiAoaXNUYWtlciAmJiBjaGFpbkFsbCkgPyByZXN1bHRbMF0gOiByZXN1bHQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHVzZUxhenkgJiYgY2hlY2tJdGVyYXRlZSAmJiB0eXBlb2YgaXRlcmF0ZWUgPT0gJ2Z1bmN0aW9uJyAmJiBpdGVyYXRlZS5sZW5ndGggIT0gMSkge1xuICAgICAgICAgIC8vIEF2b2lkIGxhenkgdXNlIGlmIHRoZSBpdGVyYXRlZSBoYXMgYSBcImxlbmd0aFwiIHZhbHVlIG90aGVyIHRoYW4gYDFgLlxuICAgICAgICAgIGlzTGF6eSA9IHVzZUxhenkgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY2hhaW5BbGwgPSB0aGlzLl9fY2hhaW5fXyxcbiAgICAgICAgICAgIGlzSHlicmlkID0gISF0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCxcbiAgICAgICAgICAgIGlzVW53cmFwcGVkID0gcmV0VW53cmFwcGVkICYmICFjaGFpbkFsbCxcbiAgICAgICAgICAgIG9ubHlMYXp5ID0gaXNMYXp5ICYmICFpc0h5YnJpZDtcblxuICAgICAgICBpZiAoIXJldFVud3JhcHBlZCAmJiB1c2VMYXp5KSB7XG4gICAgICAgICAgdmFsdWUgPSBvbmx5TGF6eSA/IHZhbHVlIDogbmV3IExhenlXcmFwcGVyKHRoaXMpO1xuICAgICAgICAgIHZhciByZXN1bHQgPSBmdW5jLmFwcGx5KHZhbHVlLCBhcmdzKTtcbiAgICAgICAgICByZXN1bHQuX19hY3Rpb25zX18ucHVzaCh7ICdmdW5jJzogdGhydSwgJ2FyZ3MnOiBbaW50ZXJjZXB0b3JdLCAndGhpc0FyZyc6IHVuZGVmaW5lZCB9KTtcbiAgICAgICAgICByZXR1cm4gbmV3IExvZGFzaFdyYXBwZXIocmVzdWx0LCBjaGFpbkFsbCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzVW53cmFwcGVkICYmIG9ubHlMYXp5KSB7XG4gICAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gdGhpcy50aHJ1KGludGVyY2VwdG9yKTtcbiAgICAgICAgcmV0dXJuIGlzVW53cmFwcGVkID8gKGlzVGFrZXIgPyByZXN1bHQudmFsdWUoKVswXSA6IHJlc3VsdC52YWx1ZSgpKSA6IHJlc3VsdDtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgYEFycmF5YCBtZXRob2RzIHRvIGBsb2Rhc2gucHJvdG90eXBlYC5cbiAgICBhcnJheUVhY2goWydwb3AnLCAncHVzaCcsICdzaGlmdCcsICdzb3J0JywgJ3NwbGljZScsICd1bnNoaWZ0J10sIGZ1bmN0aW9uKG1ldGhvZE5hbWUpIHtcbiAgICAgIHZhciBmdW5jID0gYXJyYXlQcm90b1ttZXRob2ROYW1lXSxcbiAgICAgICAgICBjaGFpbk5hbWUgPSAvXig/OnB1c2h8c29ydHx1bnNoaWZ0KSQvLnRlc3QobWV0aG9kTmFtZSkgPyAndGFwJyA6ICd0aHJ1JyxcbiAgICAgICAgICByZXRVbndyYXBwZWQgPSAvXig/OnBvcHxzaGlmdCkkLy50ZXN0KG1ldGhvZE5hbWUpO1xuXG4gICAgICBsb2Rhc2gucHJvdG90eXBlW21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICBpZiAocmV0VW53cmFwcGVkICYmICF0aGlzLl9fY2hhaW5fXykge1xuICAgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWUoKTtcbiAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseShpc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW10sIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzW2NoYWluTmFtZV0oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseShpc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW10sIGFyZ3MpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyBNYXAgbWluaWZpZWQgbWV0aG9kIG5hbWVzIHRvIHRoZWlyIHJlYWwgbmFtZXMuXG4gICAgYmFzZUZvck93bihMYXp5V3JhcHBlci5wcm90b3R5cGUsIGZ1bmN0aW9uKGZ1bmMsIG1ldGhvZE5hbWUpIHtcbiAgICAgIHZhciBsb2Rhc2hGdW5jID0gbG9kYXNoW21ldGhvZE5hbWVdO1xuICAgICAgaWYgKGxvZGFzaEZ1bmMpIHtcbiAgICAgICAgdmFyIGtleSA9IGxvZGFzaEZ1bmMubmFtZSArICcnO1xuICAgICAgICBpZiAoIWhhc093blByb3BlcnR5LmNhbGwocmVhbE5hbWVzLCBrZXkpKSB7XG4gICAgICAgICAgcmVhbE5hbWVzW2tleV0gPSBbXTtcbiAgICAgICAgfVxuICAgICAgICByZWFsTmFtZXNba2V5XS5wdXNoKHsgJ25hbWUnOiBtZXRob2ROYW1lLCAnZnVuYyc6IGxvZGFzaEZ1bmMgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZWFsTmFtZXNbY3JlYXRlSHlicmlkKHVuZGVmaW5lZCwgV1JBUF9CSU5EX0tFWV9GTEFHKS5uYW1lXSA9IFt7XG4gICAgICAnbmFtZSc6ICd3cmFwcGVyJyxcbiAgICAgICdmdW5jJzogdW5kZWZpbmVkXG4gICAgfV07XG5cbiAgICAvLyBBZGQgbWV0aG9kcyB0byBgTGF6eVdyYXBwZXJgLlxuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS5jbG9uZSA9IGxhenlDbG9uZTtcbiAgICBMYXp5V3JhcHBlci5wcm90b3R5cGUucmV2ZXJzZSA9IGxhenlSZXZlcnNlO1xuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS52YWx1ZSA9IGxhenlWYWx1ZTtcblxuICAgIC8vIEFkZCBjaGFpbiBzZXF1ZW5jZSBtZXRob2RzIHRvIHRoZSBgbG9kYXNoYCB3cmFwcGVyLlxuICAgIGxvZGFzaC5wcm90b3R5cGUuYXQgPSB3cmFwcGVyQXQ7XG4gICAgbG9kYXNoLnByb3RvdHlwZS5jaGFpbiA9IHdyYXBwZXJDaGFpbjtcbiAgICBsb2Rhc2gucHJvdG90eXBlLmNvbW1pdCA9IHdyYXBwZXJDb21taXQ7XG4gICAgbG9kYXNoLnByb3RvdHlwZS5uZXh0ID0gd3JhcHBlck5leHQ7XG4gICAgbG9kYXNoLnByb3RvdHlwZS5wbGFudCA9IHdyYXBwZXJQbGFudDtcbiAgICBsb2Rhc2gucHJvdG90eXBlLnJldmVyc2UgPSB3cmFwcGVyUmV2ZXJzZTtcbiAgICBsb2Rhc2gucHJvdG90eXBlLnRvSlNPTiA9IGxvZGFzaC5wcm90b3R5cGUudmFsdWVPZiA9IGxvZGFzaC5wcm90b3R5cGUudmFsdWUgPSB3cmFwcGVyVmFsdWU7XG5cbiAgICAvLyBBZGQgbGF6eSBhbGlhc2VzLlxuICAgIGxvZGFzaC5wcm90b3R5cGUuZmlyc3QgPSBsb2Rhc2gucHJvdG90eXBlLmhlYWQ7XG5cbiAgICBpZiAoc3ltSXRlcmF0b3IpIHtcbiAgICAgIGxvZGFzaC5wcm90b3R5cGVbc3ltSXRlcmF0b3JdID0gd3JhcHBlclRvSXRlcmF0b3I7XG4gICAgfVxuICAgIHJldHVybiBsb2Rhc2g7XG4gIH0pO1xuXG4gIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gIC8vIEV4cG9ydCBsb2Rhc2guXG4gIHZhciBfID0gcnVuSW5Db250ZXh0KCk7XG5cbiAgLy8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3IgY29uZGl0aW9uIHBhdHRlcm5zIGxpa2U6XG4gIGlmICh0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT0gJ29iamVjdCcgJiYgZGVmaW5lLmFtZCkge1xuICAgIC8vIEV4cG9zZSBMb2Rhc2ggb24gdGhlIGdsb2JhbCBvYmplY3QgdG8gcHJldmVudCBlcnJvcnMgd2hlbiBMb2Rhc2ggaXNcbiAgICAvLyBsb2FkZWQgYnkgYSBzY3JpcHQgdGFnIGluIHRoZSBwcmVzZW5jZSBvZiBhbiBBTUQgbG9hZGVyLlxuICAgIC8vIFNlZSBodHRwOi8vcmVxdWlyZWpzLm9yZy9kb2NzL2Vycm9ycy5odG1sI21pc21hdGNoIGZvciBtb3JlIGRldGFpbHMuXG4gICAgLy8gVXNlIGBfLm5vQ29uZmxpY3RgIHRvIHJlbW92ZSBMb2Rhc2ggZnJvbSB0aGUgZ2xvYmFsIG9iamVjdC5cbiAgICByb290Ll8gPSBfO1xuXG4gICAgLy8gRGVmaW5lIGFzIGFuIGFub255bW91cyBtb2R1bGUgc28sIHRocm91Z2ggcGF0aCBtYXBwaW5nLCBpdCBjYW4gYmVcbiAgICAvLyByZWZlcmVuY2VkIGFzIHRoZSBcInVuZGVyc2NvcmVcIiBtb2R1bGUuXG4gICAgZGVmaW5lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIF87XG4gICAgfSk7XG4gIH1cbiAgLy8gQ2hlY2sgZm9yIGBleHBvcnRzYCBhZnRlciBgZGVmaW5lYCBpbiBjYXNlIGEgYnVpbGQgb3B0aW1pemVyIGFkZHMgaXQuXG4gIGVsc2UgaWYgKGZyZWVNb2R1bGUpIHtcbiAgICAvLyBFeHBvcnQgZm9yIE5vZGUuanMuXG4gICAgKGZyZWVNb2R1bGUuZXhwb3J0cyA9IF8pLl8gPSBfO1xuICAgIC8vIEV4cG9ydCBmb3IgQ29tbW9uSlMgc3VwcG9ydC5cbiAgICBmcmVlRXhwb3J0cy5fID0gXztcbiAgfVxuICBlbHNlIHtcbiAgICAvLyBFeHBvcnQgdG8gdGhlIGdsb2JhbCBvYmplY3QuXG4gICAgcm9vdC5fID0gXztcbiAgfVxufS5jYWxsKHRoaXMpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///20\n")},201:function(module,exports,__webpack_require__){eval("// removed by extract-text-webpack-plugin\n    if(false) { var cssReload; }\n  //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29udGVudC1wYWdlLnNjc3M/MGIyNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLE9BQU8sS0FBVSxFQUFFLGtCQUtkIiwiZmlsZSI6IjIwMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIHJlbW92ZWQgYnkgZXh0cmFjdC10ZXh0LXdlYnBhY2stcGx1Z2luXG4gICAgaWYobW9kdWxlLmhvdCkge1xuICAgICAgLy8gMTczMDMxMDI4NzM4NVxuICAgICAgdmFyIGNzc1JlbG9hZCA9IHJlcXVpcmUoXCIhLi4vbm9kZV9tb2R1bGVzL2Nzcy1ob3QtbG9hZGVyL2hvdE1vZHVsZVJlcGxhY2VtZW50LmpzXCIpKG1vZHVsZS5pZCwge1wiZmlsZU1hcFwiOlwie2ZpbGVOYW1lfVwifSk7XG4gICAgICBtb2R1bGUuaG90LmRpc3Bvc2UoY3NzUmVsb2FkKTtcbiAgICAgIG1vZHVsZS5ob3QuYWNjZXB0KHVuZGVmaW5lZCwgY3NzUmVsb2FkKTtcbiAgICB9XG4gICJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///201\n")},206:function(module,exports){eval("// removed by extract-text-webpack-plugin//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGluc3AvZHJvcGRvd24vZGlzdC9uYXRpdmUtbW9kdWxlcy9kcm9wZG93bi5jc3M/OTBjNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSIsImZpbGUiOiIyMDYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyByZW1vdmVkIGJ5IGV4dHJhY3QtdGV4dC13ZWJwYWNrLXBsdWdpbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///206\n")},21:function(module,exports,__webpack_require__){"use strict";eval("\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar aurelia_fetch_client_1 = __webpack_require__(12);\r\nvar TreadstoneRepository = /** @class */ (function () {\r\n    function TreadstoneRepository() {\r\n        this.httpClient = new aurelia_fetch_client_1.HttpClient();\r\n        this.configureHttp();\r\n    }\r\n    TreadstoneRepository.prototype.configureHttp = function () {\r\n        this.httpClient.configure(function (config) {\r\n            config\r\n                .withDefaults({\r\n                credentials: 'same-origin',\r\n                headers: {\r\n                    Accept: 'application/json',\r\n                    Cookie: document.cookie\r\n                }\r\n            })\r\n                .rejectErrorResponses();\r\n        });\r\n    };\r\n    return TreadstoneRepository;\r\n}());\r\nexports.TreadstoneRepository = TreadstoneRepository;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvVHJlYWRzdG9uZVJlcG9zaXRvcnkudHM/MTIwZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE4QyxjQUFjO0FBQzVELDZCQUE2QixtQkFBTyxDQUFDLEVBQXNCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLENBQUM7QUFDRCIsImZpbGUiOiIyMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBhdXJlbGlhX2ZldGNoX2NsaWVudF8xID0gcmVxdWlyZShcImF1cmVsaWEtZmV0Y2gtY2xpZW50XCIpO1xyXG52YXIgVHJlYWRzdG9uZVJlcG9zaXRvcnkgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBUcmVhZHN0b25lUmVwb3NpdG9yeSgpIHtcclxuICAgICAgICB0aGlzLmh0dHBDbGllbnQgPSBuZXcgYXVyZWxpYV9mZXRjaF9jbGllbnRfMS5IdHRwQ2xpZW50KCk7XHJcbiAgICAgICAgdGhpcy5jb25maWd1cmVIdHRwKCk7XHJcbiAgICB9XHJcbiAgICBUcmVhZHN0b25lUmVwb3NpdG9yeS5wcm90b3R5cGUuY29uZmlndXJlSHR0cCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmh0dHBDbGllbnQuY29uZmlndXJlKGZ1bmN0aW9uIChjb25maWcpIHtcclxuICAgICAgICAgICAgY29uZmlnXHJcbiAgICAgICAgICAgICAgICAud2l0aERlZmF1bHRzKHtcclxuICAgICAgICAgICAgICAgIGNyZWRlbnRpYWxzOiAnc2FtZS1vcmlnaW4nLFxyXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAgICAgICAgICAgICAgIENvb2tpZTogZG9jdW1lbnQuY29va2llXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAucmVqZWN0RXJyb3JSZXNwb25zZXMoKTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gVHJlYWRzdG9uZVJlcG9zaXRvcnk7XHJcbn0oKSk7XHJcbmV4cG9ydHMuVHJlYWRzdG9uZVJlcG9zaXRvcnkgPSBUcmVhZHN0b25lUmVwb3NpdG9yeTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///21\n")},22:function(module,exports){eval('var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || Function("return this")() || (1, eval)("this");\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === "object") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it\'s\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzP2NkMDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0Q0FBNEM7O0FBRTVDIiwiZmlsZSI6IjIyLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGc7XG5cbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXG5nID0gKGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcztcbn0pKCk7XG5cbnRyeSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxuXHRnID0gZyB8fCBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCkgfHwgKDEsIGV2YWwpKFwidGhpc1wiKTtcbn0gY2F0Y2ggKGUpIHtcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcblx0aWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpIGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///22\n')},23:function(module,exports,__webpack_require__){"use strict";eval('\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nexports.ResponsivePageViewModel = window[\'PageViewModel\'];\r\nvar ResponsivePageTemplate;\r\n(function (ResponsivePageTemplate) {\r\n    ResponsivePageTemplate["Default"] = "Default";\r\n    ResponsivePageTemplate["Fenced"] = "Fenced";\r\n    ResponsivePageTemplate["TransparentNavigation"] = "TransparentNavigation";\r\n})(ResponsivePageTemplate = exports.ResponsivePageTemplate || (exports.ResponsivePageTemplate = {}));\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvUmVzcG9uc2l2ZVBhZ2VWaWV3TW9kZWwudHM/MWQ0MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE4QyxjQUFjO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsaUdBQWlHIiwiZmlsZSI6IjIzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZXhwb3J0cy5SZXNwb25zaXZlUGFnZVZpZXdNb2RlbCA9IHdpbmRvd1snUGFnZVZpZXdNb2RlbCddO1xyXG52YXIgUmVzcG9uc2l2ZVBhZ2VUZW1wbGF0ZTtcclxuKGZ1bmN0aW9uIChSZXNwb25zaXZlUGFnZVRlbXBsYXRlKSB7XHJcbiAgICBSZXNwb25zaXZlUGFnZVRlbXBsYXRlW1wiRGVmYXVsdFwiXSA9IFwiRGVmYXVsdFwiO1xyXG4gICAgUmVzcG9uc2l2ZVBhZ2VUZW1wbGF0ZVtcIkZlbmNlZFwiXSA9IFwiRmVuY2VkXCI7XHJcbiAgICBSZXNwb25zaXZlUGFnZVRlbXBsYXRlW1wiVHJhbnNwYXJlbnROYXZpZ2F0aW9uXCJdID0gXCJUcmFuc3BhcmVudE5hdmlnYXRpb25cIjtcclxufSkoUmVzcG9uc2l2ZVBhZ2VUZW1wbGF0ZSA9IGV4cG9ydHMuUmVzcG9uc2l2ZVBhZ2VUZW1wbGF0ZSB8fCAoZXhwb3J0cy5SZXNwb25zaXZlUGFnZVRlbXBsYXRlID0ge30pKTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///23\n')},24:function(module,exports,__webpack_require__){"use strict";eval('\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nexports.landscapeImageWidths = [\r\n    375,\r\n    768,\r\n    1024\r\n].map(function (width) { return width * window.devicePixelRatio; });\r\n// these assume an aspect ratio of 4:5. these were derived based off of the landscape widths\r\n// which were used to calculate as follows: width / 4 * 5 = height\r\nexports.portraitImageHeights = [\r\n    468.75,\r\n    960,\r\n    1280\r\n].map(function (height) { return height * window.devicePixelRatio; });\r\nfunction getNormalizedImageDimension(ImageDimensions, length) {\r\n    var closest = Math.max.apply(null, ImageDimensions); // Get the highest number.\r\n    for (var i = 0; i < ImageDimensions.length; i++) {\r\n        if (ImageDimensions[i] >= length && ImageDimensions[i] < closest) {\r\n            closest = ImageDimensions[i];\r\n        } // Check if it\'s higher than your number, but lower than your closest value\r\n    }\r\n    return closest;\r\n}\r\nexports.getNormalizedImageDimension = getNormalizedImageDimension;\r\nfunction getNormalizedImageUrl(imageUrl, containerWidth, containerHeight) {\r\n    var imageString = "background-image: url(\'" + imageUrl + "&align=center";\r\n    var imageWidthHeight = containerWidth >= containerHeight\r\n        ? imageString + "&width=" + getNormalizedImageDimension(exports.landscapeImageWidths, containerWidth) + "\');"\r\n        : imageString + "&height=" + getNormalizedImageDimension(exports.portraitImageHeights, containerHeight) + "\');";\r\n    return imageWidthHeight;\r\n}\r\nexports.getNormalizedImageUrl = getNormalizedImageUrl;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvdXRpbGl0aWVzL0ltYWdlVXRpbGl0aWVzLnRzP2MxNWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBOEMsY0FBYztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qix3Q0FBd0MsRUFBRTtBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIseUNBQXlDLEVBQUU7QUFDcEU7QUFDQSx3REFBd0Q7QUFDeEQsbUJBQW1CLDRCQUE0QjtBQUMvQztBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0hBQW9IO0FBQ3BILHNIQUFzSDtBQUN0SDtBQUNBO0FBQ0EiLCJmaWxlIjoiMjQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG5leHBvcnRzLmxhbmRzY2FwZUltYWdlV2lkdGhzID0gW1xyXG4gICAgMzc1LFxyXG4gICAgNzY4LFxyXG4gICAgMTAyNFxyXG5dLm1hcChmdW5jdGlvbiAod2lkdGgpIHsgcmV0dXJuIHdpZHRoICogd2luZG93LmRldmljZVBpeGVsUmF0aW87IH0pO1xyXG4vLyB0aGVzZSBhc3N1bWUgYW4gYXNwZWN0IHJhdGlvIG9mIDQ6NS4gdGhlc2Ugd2VyZSBkZXJpdmVkIGJhc2VkIG9mZiBvZiB0aGUgbGFuZHNjYXBlIHdpZHRoc1xyXG4vLyB3aGljaCB3ZXJlIHVzZWQgdG8gY2FsY3VsYXRlIGFzIGZvbGxvd3M6IHdpZHRoIC8gNCAqIDUgPSBoZWlnaHRcclxuZXhwb3J0cy5wb3J0cmFpdEltYWdlSGVpZ2h0cyA9IFtcclxuICAgIDQ2OC43NSxcclxuICAgIDk2MCxcclxuICAgIDEyODBcclxuXS5tYXAoZnVuY3Rpb24gKGhlaWdodCkgeyByZXR1cm4gaGVpZ2h0ICogd2luZG93LmRldmljZVBpeGVsUmF0aW87IH0pO1xyXG5mdW5jdGlvbiBnZXROb3JtYWxpemVkSW1hZ2VEaW1lbnNpb24oSW1hZ2VEaW1lbnNpb25zLCBsZW5ndGgpIHtcclxuICAgIHZhciBjbG9zZXN0ID0gTWF0aC5tYXguYXBwbHkobnVsbCwgSW1hZ2VEaW1lbnNpb25zKTsgLy8gR2V0IHRoZSBoaWdoZXN0IG51bWJlci5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgSW1hZ2VEaW1lbnNpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKEltYWdlRGltZW5zaW9uc1tpXSA+PSBsZW5ndGggJiYgSW1hZ2VEaW1lbnNpb25zW2ldIDwgY2xvc2VzdCkge1xyXG4gICAgICAgICAgICBjbG9zZXN0ID0gSW1hZ2VEaW1lbnNpb25zW2ldO1xyXG4gICAgICAgIH0gLy8gQ2hlY2sgaWYgaXQncyBoaWdoZXIgdGhhbiB5b3VyIG51bWJlciwgYnV0IGxvd2VyIHRoYW4geW91ciBjbG9zZXN0IHZhbHVlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2xvc2VzdDtcclxufVxyXG5leHBvcnRzLmdldE5vcm1hbGl6ZWRJbWFnZURpbWVuc2lvbiA9IGdldE5vcm1hbGl6ZWRJbWFnZURpbWVuc2lvbjtcclxuZnVuY3Rpb24gZ2V0Tm9ybWFsaXplZEltYWdlVXJsKGltYWdlVXJsLCBjb250YWluZXJXaWR0aCwgY29udGFpbmVySGVpZ2h0KSB7XHJcbiAgICB2YXIgaW1hZ2VTdHJpbmcgPSBcImJhY2tncm91bmQtaW1hZ2U6IHVybCgnXCIgKyBpbWFnZVVybCArIFwiJmFsaWduPWNlbnRlclwiO1xyXG4gICAgdmFyIGltYWdlV2lkdGhIZWlnaHQgPSBjb250YWluZXJXaWR0aCA+PSBjb250YWluZXJIZWlnaHRcclxuICAgICAgICA/IGltYWdlU3RyaW5nICsgXCImd2lkdGg9XCIgKyBnZXROb3JtYWxpemVkSW1hZ2VEaW1lbnNpb24oZXhwb3J0cy5sYW5kc2NhcGVJbWFnZVdpZHRocywgY29udGFpbmVyV2lkdGgpICsgXCInKTtcIlxyXG4gICAgICAgIDogaW1hZ2VTdHJpbmcgKyBcIiZoZWlnaHQ9XCIgKyBnZXROb3JtYWxpemVkSW1hZ2VEaW1lbnNpb24oZXhwb3J0cy5wb3J0cmFpdEltYWdlSGVpZ2h0cywgY29udGFpbmVySGVpZ2h0KSArIFwiJyk7XCI7XHJcbiAgICByZXR1cm4gaW1hZ2VXaWR0aEhlaWdodDtcclxufVxyXG5leHBvcnRzLmdldE5vcm1hbGl6ZWRJbWFnZVVybCA9IGdldE5vcm1hbGl6ZWRJbWFnZVVybDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///24\n')},25:function(module,exports,__webpack_require__){"use strict";eval("\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar SortOrder_1 = __webpack_require__(18);\r\nfunction sortObjectArrayByNumber(propertyNameToSortOn, objectsToSort, sortOrder) {\r\n    return objectsToSort.sort(function (a, b) {\r\n        var valueA = a[propertyNameToSortOn];\r\n        if (!valueA) {\r\n            valueA = 0;\r\n        }\r\n        var valueB = b[propertyNameToSortOn];\r\n        if (!valueB) {\r\n            valueB = 0;\r\n        }\r\n        return sortOrder === SortOrder_1.SortOrder.Ascending ? valueA - valueB : valueB - valueA;\r\n    });\r\n}\r\nexports.sortObjectArrayByNumber = sortObjectArrayByNumber;\r\nfunction sortObjectArrayByString(propertyNameToSortOn, objectsToSort, sortOrder) {\r\n    var sortedList = objectsToSort.sort(function (a, b) {\r\n        var valueA = a[propertyNameToSortOn];\r\n        var valueB = b[propertyNameToSortOn];\r\n        var result = stringComparer(valueA, valueB);\r\n        return sortOrder === SortOrder_1.SortOrder.Ascending ? result : -result;\r\n    });\r\n    return sortedList;\r\n}\r\nexports.sortObjectArrayByString = sortObjectArrayByString;\r\nfunction sortObjectArrayByBoolean(propertyNameToSortOn, objectsToSort, sortOrder) {\r\n    return objectsToSort.sort(function (a, b) {\r\n        var valueA = !!a[propertyNameToSortOn] ? 1 : 0;\r\n        var valueB = !!b[propertyNameToSortOn] ? 1 : 0;\r\n        return sortOrder === SortOrder_1.SortOrder.Ascending ? valueA - valueB : valueB - valueA;\r\n    });\r\n}\r\nexports.sortObjectArrayByBoolean = sortObjectArrayByBoolean;\r\nfunction stringComparer(valueA, valueB) {\r\n    if (!valueA) {\r\n        valueA = '';\r\n    }\r\n    if (!valueB) {\r\n        valueB = '';\r\n    }\r\n    valueA = valueA.trim();\r\n    valueB = valueB.trim();\r\n    if (valueA === valueB) {\r\n        return 0;\r\n    }\r\n    return valueA > valueB ? 1 : -1;\r\n}\r\nexports.stringComparer = stringComparer;\r\nexports.filterListSortComparer = function (a, b, list) {\r\n    // 0 represents the 'all' option in the given filter list\r\n    if (a === '0') {\r\n        return -1;\r\n    } // so force this option to be first\r\n    if (b === '0') {\r\n        return 1;\r\n    }\r\n    return stringComparer(list[a], list[b]);\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvdXRpbGl0aWVzL1NvcnRVdGlsaXRpZXMudHM/OTEwOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE4QyxjQUFjO0FBQzVELGtCQUFrQixtQkFBTyxDQUFDLEVBQWE7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMjUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgU29ydE9yZGVyXzEgPSByZXF1aXJlKFwiLi9Tb3J0T3JkZXJcIik7XHJcbmZ1bmN0aW9uIHNvcnRPYmplY3RBcnJheUJ5TnVtYmVyKHByb3BlcnR5TmFtZVRvU29ydE9uLCBvYmplY3RzVG9Tb3J0LCBzb3J0T3JkZXIpIHtcclxuICAgIHJldHVybiBvYmplY3RzVG9Tb3J0LnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgICAgICB2YXIgdmFsdWVBID0gYVtwcm9wZXJ0eU5hbWVUb1NvcnRPbl07XHJcbiAgICAgICAgaWYgKCF2YWx1ZUEpIHtcclxuICAgICAgICAgICAgdmFsdWVBID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHZhbHVlQiA9IGJbcHJvcGVydHlOYW1lVG9Tb3J0T25dO1xyXG4gICAgICAgIGlmICghdmFsdWVCKSB7XHJcbiAgICAgICAgICAgIHZhbHVlQiA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzb3J0T3JkZXIgPT09IFNvcnRPcmRlcl8xLlNvcnRPcmRlci5Bc2NlbmRpbmcgPyB2YWx1ZUEgLSB2YWx1ZUIgOiB2YWx1ZUIgLSB2YWx1ZUE7XHJcbiAgICB9KTtcclxufVxyXG5leHBvcnRzLnNvcnRPYmplY3RBcnJheUJ5TnVtYmVyID0gc29ydE9iamVjdEFycmF5QnlOdW1iZXI7XHJcbmZ1bmN0aW9uIHNvcnRPYmplY3RBcnJheUJ5U3RyaW5nKHByb3BlcnR5TmFtZVRvU29ydE9uLCBvYmplY3RzVG9Tb3J0LCBzb3J0T3JkZXIpIHtcclxuICAgIHZhciBzb3J0ZWRMaXN0ID0gb2JqZWN0c1RvU29ydC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICAgICAgdmFyIHZhbHVlQSA9IGFbcHJvcGVydHlOYW1lVG9Tb3J0T25dO1xyXG4gICAgICAgIHZhciB2YWx1ZUIgPSBiW3Byb3BlcnR5TmFtZVRvU29ydE9uXTtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gc3RyaW5nQ29tcGFyZXIodmFsdWVBLCB2YWx1ZUIpO1xyXG4gICAgICAgIHJldHVybiBzb3J0T3JkZXIgPT09IFNvcnRPcmRlcl8xLlNvcnRPcmRlci5Bc2NlbmRpbmcgPyByZXN1bHQgOiAtcmVzdWx0O1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gc29ydGVkTGlzdDtcclxufVxyXG5leHBvcnRzLnNvcnRPYmplY3RBcnJheUJ5U3RyaW5nID0gc29ydE9iamVjdEFycmF5QnlTdHJpbmc7XHJcbmZ1bmN0aW9uIHNvcnRPYmplY3RBcnJheUJ5Qm9vbGVhbihwcm9wZXJ0eU5hbWVUb1NvcnRPbiwgb2JqZWN0c1RvU29ydCwgc29ydE9yZGVyKSB7XHJcbiAgICByZXR1cm4gb2JqZWN0c1RvU29ydC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICAgICAgdmFyIHZhbHVlQSA9ICEhYVtwcm9wZXJ0eU5hbWVUb1NvcnRPbl0gPyAxIDogMDtcclxuICAgICAgICB2YXIgdmFsdWVCID0gISFiW3Byb3BlcnR5TmFtZVRvU29ydE9uXSA/IDEgOiAwO1xyXG4gICAgICAgIHJldHVybiBzb3J0T3JkZXIgPT09IFNvcnRPcmRlcl8xLlNvcnRPcmRlci5Bc2NlbmRpbmcgPyB2YWx1ZUEgLSB2YWx1ZUIgOiB2YWx1ZUIgLSB2YWx1ZUE7XHJcbiAgICB9KTtcclxufVxyXG5leHBvcnRzLnNvcnRPYmplY3RBcnJheUJ5Qm9vbGVhbiA9IHNvcnRPYmplY3RBcnJheUJ5Qm9vbGVhbjtcclxuZnVuY3Rpb24gc3RyaW5nQ29tcGFyZXIodmFsdWVBLCB2YWx1ZUIpIHtcclxuICAgIGlmICghdmFsdWVBKSB7XHJcbiAgICAgICAgdmFsdWVBID0gJyc7XHJcbiAgICB9XHJcbiAgICBpZiAoIXZhbHVlQikge1xyXG4gICAgICAgIHZhbHVlQiA9ICcnO1xyXG4gICAgfVxyXG4gICAgdmFsdWVBID0gdmFsdWVBLnRyaW0oKTtcclxuICAgIHZhbHVlQiA9IHZhbHVlQi50cmltKCk7XHJcbiAgICBpZiAodmFsdWVBID09PSB2YWx1ZUIpIHtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZUEgPiB2YWx1ZUIgPyAxIDogLTE7XHJcbn1cclxuZXhwb3J0cy5zdHJpbmdDb21wYXJlciA9IHN0cmluZ0NvbXBhcmVyO1xyXG5leHBvcnRzLmZpbHRlckxpc3RTb3J0Q29tcGFyZXIgPSBmdW5jdGlvbiAoYSwgYiwgbGlzdCkge1xyXG4gICAgLy8gMCByZXByZXNlbnRzIHRoZSAnYWxsJyBvcHRpb24gaW4gdGhlIGdpdmVuIGZpbHRlciBsaXN0XHJcbiAgICBpZiAoYSA9PT0gJzAnKSB7XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgfSAvLyBzbyBmb3JjZSB0aGlzIG9wdGlvbiB0byBiZSBmaXJzdFxyXG4gICAgaWYgKGIgPT09ICcwJykge1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0cmluZ0NvbXBhcmVyKGxpc3RbYV0sIGxpc3RbYl0pO1xyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///25\n")},26:function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Headers\", function() { return Headers; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RequestMessage\", function() { return RequestMessage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"HttpResponseMessage\", function() { return HttpResponseMessage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mimeTypes\", function() { return mimeTypes; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RequestMessageProcessor\", function() { return RequestMessageProcessor; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"timeoutTransformer\", function() { return timeoutTransformer; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"callbackParameterNameTransformer\", function() { return callbackParameterNameTransformer; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"credentialsTransformer\", function() { return credentialsTransformer; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"progressTransformer\", function() { return progressTransformer; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"downloadProgressTransformer\", function() { return downloadProgressTransformer; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"responseTypeTransformer\", function() { return responseTypeTransformer; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"headerTransformer\", function() { return headerTransformer; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"contentTransformer\", function() { return contentTransformer; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"JSONPRequestMessage\", function() { return JSONPRequestMessage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createJSONPRequestMessageProcessor\", function() { return createJSONPRequestMessageProcessor; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"HttpRequestMessage\", function() { return HttpRequestMessage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createHttpRequestMessageProcessor\", function() { return createHttpRequestMessageProcessor; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RequestBuilder\", function() { return RequestBuilder; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"HttpClient\", function() { return HttpClient; });\n/* harmony import */ var aurelia_path__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7);\n/* harmony import */ var aurelia_pal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(0);\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\n\n\n\nvar Headers = function () {\n  function Headers() {\n    var headers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n    \n\n    this.headers = {};\n\n    for (var _key in headers) {\n      this.headers[_key.toLowerCase()] = { key: _key, value: headers[_key] };\n    }\n  }\n\n  Headers.prototype.add = function add(key, value) {\n    this.headers[key.toLowerCase()] = { key: key, value: value };\n  };\n\n  Headers.prototype.get = function get(key) {\n    var header = this.headers[key.toLowerCase()];\n    return header ? header.value : undefined;\n  };\n\n  Headers.prototype.clear = function clear() {\n    this.headers = {};\n  };\n\n  Headers.prototype.has = function has(header) {\n    return this.headers.hasOwnProperty(header.toLowerCase());\n  };\n\n  Headers.prototype.configureXHR = function configureXHR(xhr) {\n    for (var name in this.headers) {\n      if (this.headers.hasOwnProperty(name)) {\n        xhr.setRequestHeader(this.headers[name].key, this.headers[name].value);\n      }\n    }\n  };\n\n  Headers.parse = function parse(headerStr) {\n    var headers = new Headers();\n    if (!headerStr) {\n      return headers;\n    }\n\n    var headerPairs = headerStr.split('\\r\\n');\n    for (var i = 0; i < headerPairs.length; i++) {\n      var headerPair = headerPairs[i];\n\n      var index = headerPair.indexOf(': ');\n      if (index > 0) {\n        var _key2 = headerPair.substring(0, index);\n        var val = headerPair.substring(index + 2);\n        headers.add(_key2, val);\n      }\n    }\n\n    return headers;\n  };\n\n  return Headers;\n}();\n\nvar RequestMessage = function () {\n  function RequestMessage(method, url, content, headers) {\n    \n\n    this.method = method;\n    this.url = url;\n    this.content = content;\n    this.headers = headers || new Headers();\n    this.baseUrl = '';\n  }\n\n  RequestMessage.prototype.buildFullUrl = function buildFullUrl() {\n    var absoluteUrl = /^([a-z][a-z0-9+\\-.]*:)?\\/\\//i;\n    var url = absoluteUrl.test(this.url) ? this.url : Object(aurelia_path__WEBPACK_IMPORTED_MODULE_0__[\"join\"])(this.baseUrl, this.url);\n\n    if (this.params) {\n      var qs = Object(aurelia_path__WEBPACK_IMPORTED_MODULE_0__[\"buildQueryString\"])(this.params, this.traditional);\n      url = qs ? url + (this.url.indexOf('?') < 0 ? '?' : '&') + qs : url;\n    }\n\n    return url;\n  };\n\n  return RequestMessage;\n}();\n\nvar HttpResponseMessage = function () {\n  function HttpResponseMessage(requestMessage, xhr, responseType, reviver) {\n    \n\n    this.requestMessage = requestMessage;\n    this.statusCode = xhr.status;\n    this.response = xhr.response || xhr.responseText;\n    this.isSuccess = xhr.status >= 200 && xhr.status < 400;\n    this.statusText = xhr.statusText;\n    this.reviver = reviver;\n    this.mimeType = null;\n\n    if (xhr.getAllResponseHeaders) {\n      try {\n        this.headers = Headers.parse(xhr.getAllResponseHeaders());\n      } catch (err) {\n        if (xhr.requestHeaders) this.headers = new Headers(xhr.requestHeaders);\n      }\n    } else {\n      this.headers = new Headers();\n    }\n\n    var contentType = void 0;\n\n    if (this.headers && this.headers.headers) {\n      contentType = this.headers.get('Content-Type');\n    }\n\n    if (contentType) {\n      this.mimeType = responseType = contentType.split(';')[0].trim();\n      if (mimeTypes.hasOwnProperty(this.mimeType)) responseType = mimeTypes[this.mimeType];\n    }\n\n    this.responseType = responseType;\n  }\n\n  _createClass(HttpResponseMessage, [{\n    key: 'content',\n    get: function get() {\n      try {\n        if (this._content !== undefined) {\n          return this._content;\n        }\n\n        if (this.response === undefined || this.response === null || this.response === '') {\n          this._content = this.response;\n          return this._content;\n        }\n\n        if (this.responseType === 'json') {\n          this._content = JSON.parse(this.response, this.reviver);\n          return this._content;\n        }\n\n        if (this.reviver) {\n          this._content = this.reviver(this.response);\n          return this._content;\n        }\n\n        this._content = this.response;\n        return this._content;\n      } catch (e) {\n        if (this.isSuccess) {\n          throw e;\n        }\n\n        this._content = null;\n        return this._content;\n      }\n    }\n  }]);\n\n  return HttpResponseMessage;\n}();\n\nvar mimeTypes = {\n  'text/html': 'html',\n  'text/javascript': 'js',\n  'application/javascript': 'js',\n  'text/json': 'json',\n  'application/json': 'json',\n  'application/rss+xml': 'rss',\n  'application/atom+xml': 'atom',\n  'application/xhtml+xml': 'xhtml',\n  'text/markdown': 'md',\n  'text/xml': 'xml',\n  'text/mathml': 'mml',\n  'application/xml': 'xml',\n  'text/yml': 'yml',\n  'text/csv': 'csv',\n  'text/css': 'css',\n  'text/less': 'less',\n  'text/stylus': 'styl',\n  'text/scss': 'scss',\n  'text/sass': 'sass',\n  'text/plain': 'txt'\n};\n\nfunction applyXhrTransformers(xhrTransformers, client, processor, message, xhr) {\n  var i = void 0;\n  var ii = void 0;\n\n  for (i = 0, ii = xhrTransformers.length; i < ii; ++i) {\n    xhrTransformers[i](client, processor, message, xhr);\n  }\n}\n\nvar RequestMessageProcessor = function () {\n  function RequestMessageProcessor(xhrType, xhrTransformers) {\n    \n\n    this.XHRType = xhrType;\n    this.xhrTransformers = xhrTransformers;\n    this.isAborted = false;\n  }\n\n  RequestMessageProcessor.prototype.abort = function abort() {\n    if (this.xhr && this.xhr.readyState !== aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* PLATFORM */ \"d\"].XMLHttpRequest.UNSENT) {\n      this.xhr.abort();\n    }\n\n    this.isAborted = true;\n  };\n\n  RequestMessageProcessor.prototype.process = function process(client, requestMessage) {\n    var _this = this;\n\n    var promise = new Promise(function (resolve, reject) {\n      var xhr = _this.xhr = new _this.XHRType();\n\n      xhr.onload = function (e) {\n        var response = new HttpResponseMessage(requestMessage, xhr, requestMessage.responseType, requestMessage.reviver);\n        if (response.isSuccess) {\n          resolve(response);\n        } else {\n          reject(response);\n        }\n      };\n\n      xhr.ontimeout = function (e) {\n        reject(new HttpResponseMessage(requestMessage, {\n          response: e,\n          status: xhr.status,\n          statusText: xhr.statusText\n        }, 'timeout'));\n      };\n\n      xhr.onerror = function (e) {\n        reject(new HttpResponseMessage(requestMessage, {\n          response: e,\n          status: xhr.status,\n          statusText: xhr.statusText\n        }, 'error'));\n      };\n\n      xhr.onabort = function (e) {\n        reject(new HttpResponseMessage(requestMessage, {\n          response: e,\n          status: xhr.status,\n          statusText: xhr.statusText\n        }, 'abort'));\n      };\n    });\n\n    return Promise.resolve(requestMessage).then(function (message) {\n      var processRequest = function processRequest() {\n        if (_this.isAborted) {\n          _this.xhr.abort();\n        } else {\n          _this.xhr.open(message.method, message.buildFullUrl(), true, message.user, message.password);\n          applyXhrTransformers(_this.xhrTransformers, client, _this, message, _this.xhr);\n          if (typeof message.content === 'undefined') {\n            _this.xhr.send();\n          } else {\n            _this.xhr.send(message.content);\n          }\n        }\n\n        return promise;\n      };\n\n      var chain = [[processRequest, undefined]];\n\n      var interceptors = message.interceptors || [];\n      interceptors.forEach(function (interceptor) {\n        if (interceptor.request || interceptor.requestError) {\n          chain.unshift([interceptor.request ? interceptor.request.bind(interceptor) : undefined, interceptor.requestError ? interceptor.requestError.bind(interceptor) : undefined]);\n        }\n\n        if (interceptor.response || interceptor.responseError) {\n          chain.push([interceptor.response ? interceptor.response.bind(interceptor) : undefined, interceptor.responseError ? interceptor.responseError.bind(interceptor) : undefined]);\n        }\n      });\n\n      var interceptorsPromise = Promise.resolve(message);\n\n      while (chain.length) {\n        var _interceptorsPromise;\n\n        interceptorsPromise = (_interceptorsPromise = interceptorsPromise).then.apply(_interceptorsPromise, chain.shift());\n      }\n\n      return interceptorsPromise;\n    });\n  };\n\n  return RequestMessageProcessor;\n}();\n\nfunction timeoutTransformer(client, processor, message, xhr) {\n  if (message.timeout !== undefined) {\n    xhr.timeout = message.timeout;\n  }\n}\n\nfunction callbackParameterNameTransformer(client, processor, message, xhr) {\n  if (message.callbackParameterName !== undefined) {\n    xhr.callbackParameterName = message.callbackParameterName;\n  }\n}\n\nfunction credentialsTransformer(client, processor, message, xhr) {\n  if (message.withCredentials !== undefined) {\n    xhr.withCredentials = message.withCredentials;\n  }\n}\n\nfunction progressTransformer(client, processor, message, xhr) {\n  if (message.progressCallback) {\n    xhr.upload.onprogress = message.progressCallback;\n  }\n}\n\nfunction downloadProgressTransformer(client, processor, message, xhr) {\n  if (message.downloadProgressCallback) {\n    xhr.onprogress = message.downloadProgressCallback;\n  }\n}\n\nfunction responseTypeTransformer(client, processor, message, xhr) {\n  var responseType = message.responseType;\n\n  if (responseType === 'json') {\n    responseType = 'text';\n  }\n\n  xhr.responseType = responseType;\n}\n\nfunction headerTransformer(client, processor, message, xhr) {\n  message.headers.configureXHR(xhr);\n}\n\nfunction contentTransformer(client, processor, message, xhr) {\n  if (message.skipContentProcessing) {\n    return;\n  }\n\n  if (aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* PLATFORM */ \"d\"].global.FormData && message.content instanceof FormData) {\n    return;\n  }\n\n  if (aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* PLATFORM */ \"d\"].global.Blob && message.content instanceof Blob) {\n    return;\n  }\n\n  if (aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* PLATFORM */ \"d\"].global.ArrayBuffer && message.content instanceof ArrayBuffer) {\n    return;\n  }\n\n  if (message.content instanceof Document) {\n    return;\n  }\n\n  if (typeof message.content === 'string') {\n    return;\n  }\n\n  if (message.content === null || message.content === undefined) {\n    return;\n  }\n\n  message.content = JSON.stringify(message.content, message.replacer);\n\n  if (!message.headers.has('Content-Type')) {\n    message.headers.add('Content-Type', 'application/json');\n  }\n}\n\nvar JSONPRequestMessage = function (_RequestMessage) {\n  _inherits(JSONPRequestMessage, _RequestMessage);\n\n  function JSONPRequestMessage(url, callbackParameterName) {\n    \n\n    var _this2 = _possibleConstructorReturn(this, _RequestMessage.call(this, 'JSONP', url));\n\n    _this2.responseType = 'jsonp';\n    _this2.callbackParameterName = callbackParameterName;\n    return _this2;\n  }\n\n  return JSONPRequestMessage;\n}(RequestMessage);\n\nvar JSONPXHR = function () {\n  function JSONPXHR() {\n    \n  }\n\n  JSONPXHR.prototype.open = function open(method, url) {\n    this.method = method;\n    this.url = url;\n    this.callbackName = 'jsonp_callback_' + Math.round(100000 * Math.random());\n  };\n\n  JSONPXHR.prototype.send = function send() {\n    var _this3 = this;\n\n    var url = this.url + (this.url.indexOf('?') >= 0 ? '&' : '?') + encodeURIComponent(this.callbackParameterName) + '=' + this.callbackName;\n    var script = aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* DOM */ \"b\"].createElement('script');\n\n    script.src = url;\n    script.onerror = function (e) {\n      cleanUp();\n\n      _this3.status = 0;\n      _this3.onerror(new Error('error'));\n    };\n\n    var cleanUp = function cleanUp() {\n      delete aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* PLATFORM */ \"d\"].global[_this3.callbackName];\n      aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* DOM */ \"b\"].removeNode(script);\n    };\n\n    aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* PLATFORM */ \"d\"].global[this.callbackName] = function (data) {\n      cleanUp();\n\n      if (_this3.status === undefined) {\n        _this3.status = 200;\n        _this3.statusText = 'OK';\n        _this3.response = data;\n        _this3.onload(_this3);\n      }\n    };\n\n    aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* DOM */ \"b\"].appendNode(script);\n\n    if (this.timeout !== undefined) {\n      setTimeout(function () {\n        if (_this3.status === undefined) {\n          _this3.status = 0;\n          _this3.ontimeout(new Error('timeout'));\n        }\n      }, this.timeout);\n    }\n  };\n\n  JSONPXHR.prototype.abort = function abort() {\n    if (this.status === undefined) {\n      this.status = 0;\n      this.onabort(new Error('abort'));\n    }\n  };\n\n  JSONPXHR.prototype.setRequestHeader = function setRequestHeader() {};\n\n  return JSONPXHR;\n}();\n\nfunction createJSONPRequestMessageProcessor() {\n  return new RequestMessageProcessor(JSONPXHR, [timeoutTransformer, callbackParameterNameTransformer]);\n}\n\nvar HttpRequestMessage = function (_RequestMessage2) {\n  _inherits(HttpRequestMessage, _RequestMessage2);\n\n  function HttpRequestMessage(method, url, content, headers) {\n    \n\n    var _this4 = _possibleConstructorReturn(this, _RequestMessage2.call(this, method, url, content, headers));\n\n    _this4.responseType = 'json';return _this4;\n  }\n\n  return HttpRequestMessage;\n}(RequestMessage);\n\nfunction createHttpRequestMessageProcessor() {\n  return new RequestMessageProcessor(aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* PLATFORM */ \"d\"].XMLHttpRequest, [timeoutTransformer, credentialsTransformer, progressTransformer, downloadProgressTransformer, responseTypeTransformer, contentTransformer, headerTransformer]);\n}\n\nvar RequestBuilder = function () {\n  function RequestBuilder(client) {\n    \n\n    this.client = client;\n    this.transformers = client.requestTransformers.slice(0);\n    this.useJsonp = false;\n  }\n\n  RequestBuilder.prototype.asDelete = function asDelete() {\n    return this._addTransformer(function (client, processor, message) {\n      message.method = 'DELETE';\n    });\n  };\n\n  RequestBuilder.prototype.asGet = function asGet() {\n    return this._addTransformer(function (client, processor, message) {\n      message.method = 'GET';\n    });\n  };\n\n  RequestBuilder.prototype.asHead = function asHead() {\n    return this._addTransformer(function (client, processor, message) {\n      message.method = 'HEAD';\n    });\n  };\n\n  RequestBuilder.prototype.asOptions = function asOptions() {\n    return this._addTransformer(function (client, processor, message) {\n      message.method = 'OPTIONS';\n    });\n  };\n\n  RequestBuilder.prototype.asPatch = function asPatch() {\n    return this._addTransformer(function (client, processor, message) {\n      message.method = 'PATCH';\n    });\n  };\n\n  RequestBuilder.prototype.asPost = function asPost() {\n    return this._addTransformer(function (client, processor, message) {\n      message.method = 'POST';\n    });\n  };\n\n  RequestBuilder.prototype.asPut = function asPut() {\n    return this._addTransformer(function (client, processor, message) {\n      message.method = 'PUT';\n    });\n  };\n\n  RequestBuilder.prototype.asJsonp = function asJsonp(callbackParameterName) {\n    this.useJsonp = true;\n    return this._addTransformer(function (client, processor, message) {\n      message.callbackParameterName = callbackParameterName;\n    });\n  };\n\n  RequestBuilder.prototype.withUrl = function withUrl(url) {\n    return this._addTransformer(function (client, processor, message) {\n      message.url = url;\n    });\n  };\n\n  RequestBuilder.prototype.withContent = function withContent(content) {\n    return this._addTransformer(function (client, processor, message) {\n      message.content = content;\n    });\n  };\n\n  RequestBuilder.prototype.withBaseUrl = function withBaseUrl(baseUrl) {\n    return this._addTransformer(function (client, processor, message) {\n      message.baseUrl = baseUrl;\n    });\n  };\n\n  RequestBuilder.prototype.withParams = function withParams(params, traditional) {\n    return this._addTransformer(function (client, processor, message) {\n      message.traditional = traditional;\n      message.params = params;\n    });\n  };\n\n  RequestBuilder.prototype.withResponseType = function withResponseType(responseType) {\n    return this._addTransformer(function (client, processor, message) {\n      message.responseType = responseType;\n    });\n  };\n\n  RequestBuilder.prototype.withTimeout = function withTimeout(timeout) {\n    return this._addTransformer(function (client, processor, message) {\n      message.timeout = timeout;\n    });\n  };\n\n  RequestBuilder.prototype.withHeader = function withHeader(key, value) {\n    return this._addTransformer(function (client, processor, message) {\n      message.headers.add(key, value);\n    });\n  };\n\n  RequestBuilder.prototype.withCredentials = function withCredentials(value) {\n    return this._addTransformer(function (client, processor, message) {\n      message.withCredentials = value;\n    });\n  };\n\n  RequestBuilder.prototype.withLogin = function withLogin(user, password) {\n    return this._addTransformer(function (client, processor, message) {\n      message.user = user;message.password = password;\n    });\n  };\n\n  RequestBuilder.prototype.withReviver = function withReviver(reviver) {\n    return this._addTransformer(function (client, processor, message) {\n      message.reviver = reviver;\n    });\n  };\n\n  RequestBuilder.prototype.withReplacer = function withReplacer(replacer) {\n    return this._addTransformer(function (client, processor, message) {\n      message.replacer = replacer;\n    });\n  };\n\n  RequestBuilder.prototype.withProgressCallback = function withProgressCallback(progressCallback) {\n    return this._addTransformer(function (client, processor, message) {\n      message.progressCallback = progressCallback;\n    });\n  };\n\n  RequestBuilder.prototype.withDownloadProgressCallback = function withDownloadProgressCallback(downloadProgressCallback) {\n    return this._addTransformer(function (client, processor, message) {\n      message.downloadProgressCallback = downloadProgressCallback;\n    });\n  };\n\n  RequestBuilder.prototype.withCallbackParameterName = function withCallbackParameterName(callbackParameterName) {\n    return this._addTransformer(function (client, processor, message) {\n      message.callbackParameterName = callbackParameterName;\n    });\n  };\n\n  RequestBuilder.prototype.withInterceptor = function withInterceptor(interceptor) {\n    return this._addTransformer(function (client, processor, message) {\n      message.interceptors = message.interceptors || [];\n      message.interceptors.unshift(interceptor);\n    });\n  };\n\n  RequestBuilder.prototype.skipContentProcessing = function skipContentProcessing() {\n    return this._addTransformer(function (client, processor, message) {\n      message.skipContentProcessing = true;\n    });\n  };\n\n  RequestBuilder.prototype._addTransformer = function _addTransformer(fn) {\n    this.transformers.push(fn);\n    return this;\n  };\n\n  RequestBuilder.addHelper = function addHelper(name, fn) {\n    RequestBuilder.prototype[name] = function () {\n      return this._addTransformer(fn.apply(this, arguments));\n    };\n  };\n\n  RequestBuilder.prototype.send = function send() {\n    var message = this.useJsonp ? new JSONPRequestMessage() : new HttpRequestMessage();\n    return this.client.send(message, this.transformers);\n  };\n\n  return RequestBuilder;\n}();\n\nfunction trackRequestStart(client, processor) {\n  client.pendingRequests.push(processor);\n  client.isRequesting = true;\n}\n\nfunction trackRequestEnd(client, processor) {\n  var index = client.pendingRequests.indexOf(processor);\n\n  client.pendingRequests.splice(index, 1);\n  client.isRequesting = client.pendingRequests.length > 0;\n\n  if (!client.isRequesting) {\n    var evt = aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* DOM */ \"b\"].createCustomEvent('aurelia-http-client-requests-drained', { bubbles: true, cancelable: true });\n    setTimeout(function () {\n      return aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* DOM */ \"b\"].dispatchEvent(evt);\n    }, 1);\n  }\n}\n\nvar HttpClient = function () {\n  function HttpClient() {\n    \n\n    this.isRequesting = false;\n\n    this.requestTransformers = [];\n    this.requestProcessorFactories = new Map();\n    this.requestProcessorFactories.set(HttpRequestMessage, createHttpRequestMessageProcessor);\n    this.requestProcessorFactories.set(JSONPRequestMessage, createJSONPRequestMessageProcessor);\n    this.pendingRequests = [];\n  }\n\n  HttpClient.prototype.configure = function configure(fn) {\n    var builder = new RequestBuilder(this);\n    fn(builder);\n    this.requestTransformers = builder.transformers;\n    return this;\n  };\n\n  HttpClient.prototype.createRequest = function createRequest(url) {\n    var builder = new RequestBuilder(this);\n\n    if (url) {\n      builder.withUrl(url);\n    }\n\n    return builder;\n  };\n\n  HttpClient.prototype.send = function send(requestMessage, transformers) {\n    var _this5 = this;\n\n    var createProcessor = this.requestProcessorFactories.get(requestMessage.constructor);\n    var processor = void 0;\n    var promise = void 0;\n    var i = void 0;\n    var ii = void 0;\n\n    if (!createProcessor) {\n      throw new Error('No request message processor factory for ' + requestMessage.constructor + '.');\n    }\n\n    processor = createProcessor();\n    trackRequestStart(this, processor);\n\n    transformers = transformers || this.requestTransformers;\n\n    promise = Promise.resolve(requestMessage).then(function (message) {\n      for (i = 0, ii = transformers.length; i < ii; ++i) {\n        transformers[i](_this5, processor, message);\n      }\n\n      return processor.process(_this5, message).then(function (response) {\n        trackRequestEnd(_this5, processor);\n        return response;\n      }).catch(function (response) {\n        trackRequestEnd(_this5, processor);\n        throw response;\n      });\n    });\n\n    promise.abort = promise.cancel = function () {\n      processor.abort();\n    };\n\n    return promise;\n  };\n\n  HttpClient.prototype.delete = function _delete(url) {\n    return this.createRequest(url).asDelete().send();\n  };\n\n  HttpClient.prototype.get = function get(url, params, traditional) {\n    var req = this.createRequest(url).asGet();\n\n    if (params) {\n      return req.withParams(params, traditional).send();\n    }\n\n    return req.send();\n  };\n\n  HttpClient.prototype.head = function head(url) {\n    return this.createRequest(url).asHead().send();\n  };\n\n  HttpClient.prototype.jsonp = function jsonp(url) {\n    var callbackParameterName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'jsoncallback';\n\n    return this.createRequest(url).asJsonp(callbackParameterName).send();\n  };\n\n  HttpClient.prototype.options = function options(url) {\n    return this.createRequest(url).asOptions().send();\n  };\n\n  HttpClient.prototype.put = function put(url, content) {\n    return this.createRequest(url).asPut().withContent(content).send();\n  };\n\n  HttpClient.prototype.patch = function patch(url, content) {\n    return this.createRequest(url).asPatch().withContent(content).send();\n  };\n\n  HttpClient.prototype.post = function post(url, content) {\n    return this.createRequest(url).asPost().withContent(content).send();\n  };\n\n  return HttpClient;\n}();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXVyZWxpYS1odHRwLWNsaWVudC9kaXN0L25hdGl2ZS1tb2R1bGVzL2F1cmVsaWEtaHR0cC1jbGllbnQuanM/ZDVhMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGdDQUFnQywyQ0FBMkMsZ0JBQWdCLGtCQUFrQixPQUFPLDJCQUEyQix3REFBd0QsZ0NBQWdDLHVEQUF1RCwyREFBMkQsRUFBRSxFQUFFLHlEQUF5RCxxRUFBcUUsNkRBQTZELG9CQUFvQixHQUFHLEVBQUU7O0FBRWpqQixpREFBaUQsYUFBYSx1RkFBdUYsRUFBRSx1RkFBdUY7O0FBRTlPLDBDQUEwQywrREFBK0QscUdBQXFHLEVBQUUseUVBQXlFLGVBQWUseUVBQXlFLEVBQUUsRUFBRSx1SEFBdUg7Ozs7QUFJdGI7QUFDVjs7QUFFckM7QUFDUDtBQUNBOzs7O0FBSUE7O0FBRUE7QUFDQSwwQ0FBMEM7QUFDMUM7QUFDQTs7QUFFQTtBQUNBLHVDQUF1QztBQUN2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsd0JBQXdCO0FBQzNDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVNO0FBQ1A7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0RBQXNELHlEQUFJOztBQUUxRDtBQUNBLGVBQWUscUVBQWdCO0FBQy9CO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRU07QUFDUDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx5REFBeUQ7QUFDekQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLENBQUM7O0FBRU07QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDBDQUEwQyxRQUFRO0FBQ2xEO0FBQ0E7QUFDQTs7QUFFTztBQUNQOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDRDQUE0Qyw0REFBUTtBQUNwRDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBLENBQUM7O0FBRU07QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRU87QUFDUDtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBOztBQUVBLE1BQU0sNERBQVE7QUFDZDtBQUNBOztBQUVBLE1BQU0sNERBQVE7QUFDZDtBQUNBOztBQUVBLE1BQU0sNERBQVE7QUFDZDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7O0FBRUE7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQix1REFBRzs7QUFFcEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGFBQWEsNERBQVE7QUFDckIsTUFBTSx1REFBRztBQUNUOztBQUVBLElBQUksNERBQVE7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJLHVEQUFHOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLENBQUM7O0FBRU07QUFDUDtBQUNBOztBQUVPO0FBQ1A7O0FBRUE7OztBQUdBOztBQUVBLGlDQUFpQztBQUNqQzs7QUFFQTtBQUNBLENBQUM7O0FBRU07QUFDUCxxQ0FBcUMsNERBQVE7QUFDN0M7O0FBRU87QUFDUDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLHVEQUFHLDREQUE0RCxrQ0FBa0M7QUFDL0c7QUFDQSxhQUFhLHVEQUFHO0FBQ2hCLEtBQUs7QUFDTDtBQUNBOztBQUVPO0FBQ1A7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSwyQ0FBMkMsUUFBUTtBQUNuRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDIiwiZmlsZSI6IjI2LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG5cblxuaW1wb3J0IHsgam9pbiwgYnVpbGRRdWVyeVN0cmluZyB9IGZyb20gJ2F1cmVsaWEtcGF0aCc7XG5pbXBvcnQgeyBQTEFURk9STSwgRE9NIH0gZnJvbSAnYXVyZWxpYS1wYWwnO1xuXG5leHBvcnQgdmFyIEhlYWRlcnMgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEhlYWRlcnMoKSB7XG4gICAgdmFyIGhlYWRlcnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuXG4gICAgXG5cbiAgICB0aGlzLmhlYWRlcnMgPSB7fTtcblxuICAgIGZvciAodmFyIF9rZXkgaW4gaGVhZGVycykge1xuICAgICAgdGhpcy5oZWFkZXJzW19rZXkudG9Mb3dlckNhc2UoKV0gPSB7IGtleTogX2tleSwgdmFsdWU6IGhlYWRlcnNbX2tleV0gfTtcbiAgICB9XG4gIH1cblxuICBIZWFkZXJzLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBhZGQoa2V5LCB2YWx1ZSkge1xuICAgIHRoaXMuaGVhZGVyc1trZXkudG9Mb3dlckNhc2UoKV0gPSB7IGtleToga2V5LCB2YWx1ZTogdmFsdWUgfTtcbiAgfTtcblxuICBIZWFkZXJzLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgdmFyIGhlYWRlciA9IHRoaXMuaGVhZGVyc1trZXkudG9Mb3dlckNhc2UoKV07XG4gICAgcmV0dXJuIGhlYWRlciA/IGhlYWRlci52YWx1ZSA6IHVuZGVmaW5lZDtcbiAgfTtcblxuICBIZWFkZXJzLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgIHRoaXMuaGVhZGVycyA9IHt9O1xuICB9O1xuXG4gIEhlYWRlcnMucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIGhhcyhoZWFkZXIpIHtcbiAgICByZXR1cm4gdGhpcy5oZWFkZXJzLmhhc093blByb3BlcnR5KGhlYWRlci50b0xvd2VyQ2FzZSgpKTtcbiAgfTtcblxuICBIZWFkZXJzLnByb3RvdHlwZS5jb25maWd1cmVYSFIgPSBmdW5jdGlvbiBjb25maWd1cmVYSFIoeGhyKSB7XG4gICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLmhlYWRlcnMpIHtcbiAgICAgIGlmICh0aGlzLmhlYWRlcnMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIodGhpcy5oZWFkZXJzW25hbWVdLmtleSwgdGhpcy5oZWFkZXJzW25hbWVdLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgSGVhZGVycy5wYXJzZSA9IGZ1bmN0aW9uIHBhcnNlKGhlYWRlclN0cikge1xuICAgIHZhciBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKTtcbiAgICBpZiAoIWhlYWRlclN0cikge1xuICAgICAgcmV0dXJuIGhlYWRlcnM7XG4gICAgfVxuXG4gICAgdmFyIGhlYWRlclBhaXJzID0gaGVhZGVyU3RyLnNwbGl0KCdcXHJcXG4nKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhlYWRlclBhaXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaGVhZGVyUGFpciA9IGhlYWRlclBhaXJzW2ldO1xuXG4gICAgICB2YXIgaW5kZXggPSBoZWFkZXJQYWlyLmluZGV4T2YoJzogJyk7XG4gICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgIHZhciBfa2V5MiA9IGhlYWRlclBhaXIuc3Vic3RyaW5nKDAsIGluZGV4KTtcbiAgICAgICAgdmFyIHZhbCA9IGhlYWRlclBhaXIuc3Vic3RyaW5nKGluZGV4ICsgMik7XG4gICAgICAgIGhlYWRlcnMuYWRkKF9rZXkyLCB2YWwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoZWFkZXJzO1xuICB9O1xuXG4gIHJldHVybiBIZWFkZXJzO1xufSgpO1xuXG5leHBvcnQgdmFyIFJlcXVlc3RNZXNzYWdlID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBSZXF1ZXN0TWVzc2FnZShtZXRob2QsIHVybCwgY29udGVudCwgaGVhZGVycykge1xuICAgIFxuXG4gICAgdGhpcy5tZXRob2QgPSBtZXRob2Q7XG4gICAgdGhpcy51cmwgPSB1cmw7XG4gICAgdGhpcy5jb250ZW50ID0gY29udGVudDtcbiAgICB0aGlzLmhlYWRlcnMgPSBoZWFkZXJzIHx8IG5ldyBIZWFkZXJzKCk7XG4gICAgdGhpcy5iYXNlVXJsID0gJyc7XG4gIH1cblxuICBSZXF1ZXN0TWVzc2FnZS5wcm90b3R5cGUuYnVpbGRGdWxsVXJsID0gZnVuY3Rpb24gYnVpbGRGdWxsVXJsKCkge1xuICAgIHZhciBhYnNvbHV0ZVVybCA9IC9eKFthLXpdW2EtejAtOStcXC0uXSo6KT9cXC9cXC8vaTtcbiAgICB2YXIgdXJsID0gYWJzb2x1dGVVcmwudGVzdCh0aGlzLnVybCkgPyB0aGlzLnVybCA6IGpvaW4odGhpcy5iYXNlVXJsLCB0aGlzLnVybCk7XG5cbiAgICBpZiAodGhpcy5wYXJhbXMpIHtcbiAgICAgIHZhciBxcyA9IGJ1aWxkUXVlcnlTdHJpbmcodGhpcy5wYXJhbXMsIHRoaXMudHJhZGl0aW9uYWwpO1xuICAgICAgdXJsID0gcXMgPyB1cmwgKyAodGhpcy51cmwuaW5kZXhPZignPycpIDwgMCA/ICc/JyA6ICcmJykgKyBxcyA6IHVybDtcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsO1xuICB9O1xuXG4gIHJldHVybiBSZXF1ZXN0TWVzc2FnZTtcbn0oKTtcblxuZXhwb3J0IHZhciBIdHRwUmVzcG9uc2VNZXNzYWdlID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBIdHRwUmVzcG9uc2VNZXNzYWdlKHJlcXVlc3RNZXNzYWdlLCB4aHIsIHJlc3BvbnNlVHlwZSwgcmV2aXZlcikge1xuICAgIFxuXG4gICAgdGhpcy5yZXF1ZXN0TWVzc2FnZSA9IHJlcXVlc3RNZXNzYWdlO1xuICAgIHRoaXMuc3RhdHVzQ29kZSA9IHhoci5zdGF0dXM7XG4gICAgdGhpcy5yZXNwb25zZSA9IHhoci5yZXNwb25zZSB8fCB4aHIucmVzcG9uc2VUZXh0O1xuICAgIHRoaXMuaXNTdWNjZXNzID0geGhyLnN0YXR1cyA+PSAyMDAgJiYgeGhyLnN0YXR1cyA8IDQwMDtcbiAgICB0aGlzLnN0YXR1c1RleHQgPSB4aHIuc3RhdHVzVGV4dDtcbiAgICB0aGlzLnJldml2ZXIgPSByZXZpdmVyO1xuICAgIHRoaXMubWltZVR5cGUgPSBudWxsO1xuXG4gICAgaWYgKHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuaGVhZGVycyA9IEhlYWRlcnMucGFyc2UoeGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoeGhyLnJlcXVlc3RIZWFkZXJzKSB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyh4aHIucmVxdWVzdEhlYWRlcnMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycygpO1xuICAgIH1cblxuICAgIHZhciBjb250ZW50VHlwZSA9IHZvaWQgMDtcblxuICAgIGlmICh0aGlzLmhlYWRlcnMgJiYgdGhpcy5oZWFkZXJzLmhlYWRlcnMpIHtcbiAgICAgIGNvbnRlbnRUeXBlID0gdGhpcy5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJyk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRlbnRUeXBlKSB7XG4gICAgICB0aGlzLm1pbWVUeXBlID0gcmVzcG9uc2VUeXBlID0gY29udGVudFR5cGUuc3BsaXQoJzsnKVswXS50cmltKCk7XG4gICAgICBpZiAobWltZVR5cGVzLmhhc093blByb3BlcnR5KHRoaXMubWltZVR5cGUpKSByZXNwb25zZVR5cGUgPSBtaW1lVHlwZXNbdGhpcy5taW1lVHlwZV07XG4gICAgfVxuXG4gICAgdGhpcy5yZXNwb25zZVR5cGUgPSByZXNwb25zZVR5cGU7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoSHR0cFJlc3BvbnNlTWVzc2FnZSwgW3tcbiAgICBrZXk6ICdjb250ZW50JyxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICh0aGlzLl9jb250ZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fY29udGVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnJlc3BvbnNlID09PSB1bmRlZmluZWQgfHwgdGhpcy5yZXNwb25zZSA9PT0gbnVsbCB8fCB0aGlzLnJlc3BvbnNlID09PSAnJykge1xuICAgICAgICAgIHRoaXMuX2NvbnRlbnQgPSB0aGlzLnJlc3BvbnNlO1xuICAgICAgICAgIHJldHVybiB0aGlzLl9jb250ZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucmVzcG9uc2VUeXBlID09PSAnanNvbicpIHtcbiAgICAgICAgICB0aGlzLl9jb250ZW50ID0gSlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlLCB0aGlzLnJldml2ZXIpO1xuICAgICAgICAgIHJldHVybiB0aGlzLl9jb250ZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucmV2aXZlcikge1xuICAgICAgICAgIHRoaXMuX2NvbnRlbnQgPSB0aGlzLnJldml2ZXIodGhpcy5yZXNwb25zZSk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jb250ZW50ID0gdGhpcy5yZXNwb25zZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRlbnQ7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3VjY2Vzcykge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jb250ZW50ID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRlbnQ7XG4gICAgICB9XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEh0dHBSZXNwb25zZU1lc3NhZ2U7XG59KCk7XG5cbmV4cG9ydCB2YXIgbWltZVR5cGVzID0ge1xuICAndGV4dC9odG1sJzogJ2h0bWwnLFxuICAndGV4dC9qYXZhc2NyaXB0JzogJ2pzJyxcbiAgJ2FwcGxpY2F0aW9uL2phdmFzY3JpcHQnOiAnanMnLFxuICAndGV4dC9qc29uJzogJ2pzb24nLFxuICAnYXBwbGljYXRpb24vanNvbic6ICdqc29uJyxcbiAgJ2FwcGxpY2F0aW9uL3Jzcyt4bWwnOiAncnNzJyxcbiAgJ2FwcGxpY2F0aW9uL2F0b20reG1sJzogJ2F0b20nLFxuICAnYXBwbGljYXRpb24veGh0bWwreG1sJzogJ3hodG1sJyxcbiAgJ3RleHQvbWFya2Rvd24nOiAnbWQnLFxuICAndGV4dC94bWwnOiAneG1sJyxcbiAgJ3RleHQvbWF0aG1sJzogJ21tbCcsXG4gICdhcHBsaWNhdGlvbi94bWwnOiAneG1sJyxcbiAgJ3RleHQveW1sJzogJ3ltbCcsXG4gICd0ZXh0L2Nzdic6ICdjc3YnLFxuICAndGV4dC9jc3MnOiAnY3NzJyxcbiAgJ3RleHQvbGVzcyc6ICdsZXNzJyxcbiAgJ3RleHQvc3R5bHVzJzogJ3N0eWwnLFxuICAndGV4dC9zY3NzJzogJ3Njc3MnLFxuICAndGV4dC9zYXNzJzogJ3Nhc3MnLFxuICAndGV4dC9wbGFpbic6ICd0eHQnXG59O1xuXG5mdW5jdGlvbiBhcHBseVhoclRyYW5zZm9ybWVycyh4aHJUcmFuc2Zvcm1lcnMsIGNsaWVudCwgcHJvY2Vzc29yLCBtZXNzYWdlLCB4aHIpIHtcbiAgdmFyIGkgPSB2b2lkIDA7XG4gIHZhciBpaSA9IHZvaWQgMDtcblxuICBmb3IgKGkgPSAwLCBpaSA9IHhoclRyYW5zZm9ybWVycy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgeGhyVHJhbnNmb3JtZXJzW2ldKGNsaWVudCwgcHJvY2Vzc29yLCBtZXNzYWdlLCB4aHIpO1xuICB9XG59XG5cbmV4cG9ydCB2YXIgUmVxdWVzdE1lc3NhZ2VQcm9jZXNzb3IgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFJlcXVlc3RNZXNzYWdlUHJvY2Vzc29yKHhoclR5cGUsIHhoclRyYW5zZm9ybWVycykge1xuICAgIFxuXG4gICAgdGhpcy5YSFJUeXBlID0geGhyVHlwZTtcbiAgICB0aGlzLnhoclRyYW5zZm9ybWVycyA9IHhoclRyYW5zZm9ybWVycztcbiAgICB0aGlzLmlzQWJvcnRlZCA9IGZhbHNlO1xuICB9XG5cbiAgUmVxdWVzdE1lc3NhZ2VQcm9jZXNzb3IucHJvdG90eXBlLmFib3J0ID0gZnVuY3Rpb24gYWJvcnQoKSB7XG4gICAgaWYgKHRoaXMueGhyICYmIHRoaXMueGhyLnJlYWR5U3RhdGUgIT09IFBMQVRGT1JNLlhNTEh0dHBSZXF1ZXN0LlVOU0VOVCkge1xuICAgICAgdGhpcy54aHIuYWJvcnQoKTtcbiAgICB9XG5cbiAgICB0aGlzLmlzQWJvcnRlZCA9IHRydWU7XG4gIH07XG5cbiAgUmVxdWVzdE1lc3NhZ2VQcm9jZXNzb3IucHJvdG90eXBlLnByb2Nlc3MgPSBmdW5jdGlvbiBwcm9jZXNzKGNsaWVudCwgcmVxdWVzdE1lc3NhZ2UpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgeGhyID0gX3RoaXMueGhyID0gbmV3IF90aGlzLlhIUlR5cGUoKTtcblxuICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHZhciByZXNwb25zZSA9IG5ldyBIdHRwUmVzcG9uc2VNZXNzYWdlKHJlcXVlc3RNZXNzYWdlLCB4aHIsIHJlcXVlc3RNZXNzYWdlLnJlc3BvbnNlVHlwZSwgcmVxdWVzdE1lc3NhZ2UucmV2aXZlcik7XG4gICAgICAgIGlmIChyZXNwb25zZS5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3QocmVzcG9uc2UpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB4aHIub250aW1lb3V0ID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBIdHRwUmVzcG9uc2VNZXNzYWdlKHJlcXVlc3RNZXNzYWdlLCB7XG4gICAgICAgICAgcmVzcG9uc2U6IGUsXG4gICAgICAgICAgc3RhdHVzOiB4aHIuc3RhdHVzLFxuICAgICAgICAgIHN0YXR1c1RleHQ6IHhoci5zdGF0dXNUZXh0XG4gICAgICAgIH0sICd0aW1lb3V0JykpO1xuICAgICAgfTtcblxuICAgICAgeGhyLm9uZXJyb3IgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICByZWplY3QobmV3IEh0dHBSZXNwb25zZU1lc3NhZ2UocmVxdWVzdE1lc3NhZ2UsIHtcbiAgICAgICAgICByZXNwb25zZTogZSxcbiAgICAgICAgICBzdGF0dXM6IHhoci5zdGF0dXMsXG4gICAgICAgICAgc3RhdHVzVGV4dDogeGhyLnN0YXR1c1RleHRcbiAgICAgICAgfSwgJ2Vycm9yJykpO1xuICAgICAgfTtcblxuICAgICAgeGhyLm9uYWJvcnQgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICByZWplY3QobmV3IEh0dHBSZXNwb25zZU1lc3NhZ2UocmVxdWVzdE1lc3NhZ2UsIHtcbiAgICAgICAgICByZXNwb25zZTogZSxcbiAgICAgICAgICBzdGF0dXM6IHhoci5zdGF0dXMsXG4gICAgICAgICAgc3RhdHVzVGV4dDogeGhyLnN0YXR1c1RleHRcbiAgICAgICAgfSwgJ2Fib3J0JykpO1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVxdWVzdE1lc3NhZ2UpLnRoZW4oZnVuY3Rpb24gKG1lc3NhZ2UpIHtcbiAgICAgIHZhciBwcm9jZXNzUmVxdWVzdCA9IGZ1bmN0aW9uIHByb2Nlc3NSZXF1ZXN0KCkge1xuICAgICAgICBpZiAoX3RoaXMuaXNBYm9ydGVkKSB7XG4gICAgICAgICAgX3RoaXMueGhyLmFib3J0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX3RoaXMueGhyLm9wZW4obWVzc2FnZS5tZXRob2QsIG1lc3NhZ2UuYnVpbGRGdWxsVXJsKCksIHRydWUsIG1lc3NhZ2UudXNlciwgbWVzc2FnZS5wYXNzd29yZCk7XG4gICAgICAgICAgYXBwbHlYaHJUcmFuc2Zvcm1lcnMoX3RoaXMueGhyVHJhbnNmb3JtZXJzLCBjbGllbnQsIF90aGlzLCBtZXNzYWdlLCBfdGhpcy54aHIpO1xuICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZS5jb250ZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgX3RoaXMueGhyLnNlbmQoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgX3RoaXMueGhyLnNlbmQobWVzc2FnZS5jb250ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICAgIH07XG5cbiAgICAgIHZhciBjaGFpbiA9IFtbcHJvY2Vzc1JlcXVlc3QsIHVuZGVmaW5lZF1dO1xuXG4gICAgICB2YXIgaW50ZXJjZXB0b3JzID0gbWVzc2FnZS5pbnRlcmNlcHRvcnMgfHwgW107XG4gICAgICBpbnRlcmNlcHRvcnMuZm9yRWFjaChmdW5jdGlvbiAoaW50ZXJjZXB0b3IpIHtcbiAgICAgICAgaWYgKGludGVyY2VwdG9yLnJlcXVlc3QgfHwgaW50ZXJjZXB0b3IucmVxdWVzdEVycm9yKSB7XG4gICAgICAgICAgY2hhaW4udW5zaGlmdChbaW50ZXJjZXB0b3IucmVxdWVzdCA/IGludGVyY2VwdG9yLnJlcXVlc3QuYmluZChpbnRlcmNlcHRvcikgOiB1bmRlZmluZWQsIGludGVyY2VwdG9yLnJlcXVlc3RFcnJvciA/IGludGVyY2VwdG9yLnJlcXVlc3RFcnJvci5iaW5kKGludGVyY2VwdG9yKSA6IHVuZGVmaW5lZF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGludGVyY2VwdG9yLnJlc3BvbnNlIHx8IGludGVyY2VwdG9yLnJlc3BvbnNlRXJyb3IpIHtcbiAgICAgICAgICBjaGFpbi5wdXNoKFtpbnRlcmNlcHRvci5yZXNwb25zZSA/IGludGVyY2VwdG9yLnJlc3BvbnNlLmJpbmQoaW50ZXJjZXB0b3IpIDogdW5kZWZpbmVkLCBpbnRlcmNlcHRvci5yZXNwb25zZUVycm9yID8gaW50ZXJjZXB0b3IucmVzcG9uc2VFcnJvci5iaW5kKGludGVyY2VwdG9yKSA6IHVuZGVmaW5lZF0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdmFyIGludGVyY2VwdG9yc1Byb21pc2UgPSBQcm9taXNlLnJlc29sdmUobWVzc2FnZSk7XG5cbiAgICAgIHdoaWxlIChjaGFpbi5sZW5ndGgpIHtcbiAgICAgICAgdmFyIF9pbnRlcmNlcHRvcnNQcm9taXNlO1xuXG4gICAgICAgIGludGVyY2VwdG9yc1Byb21pc2UgPSAoX2ludGVyY2VwdG9yc1Byb21pc2UgPSBpbnRlcmNlcHRvcnNQcm9taXNlKS50aGVuLmFwcGx5KF9pbnRlcmNlcHRvcnNQcm9taXNlLCBjaGFpbi5zaGlmdCgpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGludGVyY2VwdG9yc1Byb21pc2U7XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIFJlcXVlc3RNZXNzYWdlUHJvY2Vzc29yO1xufSgpO1xuXG5leHBvcnQgZnVuY3Rpb24gdGltZW91dFRyYW5zZm9ybWVyKGNsaWVudCwgcHJvY2Vzc29yLCBtZXNzYWdlLCB4aHIpIHtcbiAgaWYgKG1lc3NhZ2UudGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgeGhyLnRpbWVvdXQgPSBtZXNzYWdlLnRpbWVvdXQ7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGxiYWNrUGFyYW1ldGVyTmFtZVRyYW5zZm9ybWVyKGNsaWVudCwgcHJvY2Vzc29yLCBtZXNzYWdlLCB4aHIpIHtcbiAgaWYgKG1lc3NhZ2UuY2FsbGJhY2tQYXJhbWV0ZXJOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICB4aHIuY2FsbGJhY2tQYXJhbWV0ZXJOYW1lID0gbWVzc2FnZS5jYWxsYmFja1BhcmFtZXRlck5hbWU7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWRlbnRpYWxzVHJhbnNmb3JtZXIoY2xpZW50LCBwcm9jZXNzb3IsIG1lc3NhZ2UsIHhocikge1xuICBpZiAobWVzc2FnZS53aXRoQ3JlZGVudGlhbHMgIT09IHVuZGVmaW5lZCkge1xuICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSBtZXNzYWdlLndpdGhDcmVkZW50aWFscztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvZ3Jlc3NUcmFuc2Zvcm1lcihjbGllbnQsIHByb2Nlc3NvciwgbWVzc2FnZSwgeGhyKSB7XG4gIGlmIChtZXNzYWdlLnByb2dyZXNzQ2FsbGJhY2spIHtcbiAgICB4aHIudXBsb2FkLm9ucHJvZ3Jlc3MgPSBtZXNzYWdlLnByb2dyZXNzQ2FsbGJhY2s7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvd25sb2FkUHJvZ3Jlc3NUcmFuc2Zvcm1lcihjbGllbnQsIHByb2Nlc3NvciwgbWVzc2FnZSwgeGhyKSB7XG4gIGlmIChtZXNzYWdlLmRvd25sb2FkUHJvZ3Jlc3NDYWxsYmFjaykge1xuICAgIHhoci5vbnByb2dyZXNzID0gbWVzc2FnZS5kb3dubG9hZFByb2dyZXNzQ2FsbGJhY2s7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc3BvbnNlVHlwZVRyYW5zZm9ybWVyKGNsaWVudCwgcHJvY2Vzc29yLCBtZXNzYWdlLCB4aHIpIHtcbiAgdmFyIHJlc3BvbnNlVHlwZSA9IG1lc3NhZ2UucmVzcG9uc2VUeXBlO1xuXG4gIGlmIChyZXNwb25zZVR5cGUgPT09ICdqc29uJykge1xuICAgIHJlc3BvbnNlVHlwZSA9ICd0ZXh0JztcbiAgfVxuXG4gIHhoci5yZXNwb25zZVR5cGUgPSByZXNwb25zZVR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoZWFkZXJUcmFuc2Zvcm1lcihjbGllbnQsIHByb2Nlc3NvciwgbWVzc2FnZSwgeGhyKSB7XG4gIG1lc3NhZ2UuaGVhZGVycy5jb25maWd1cmVYSFIoeGhyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRlbnRUcmFuc2Zvcm1lcihjbGllbnQsIHByb2Nlc3NvciwgbWVzc2FnZSwgeGhyKSB7XG4gIGlmIChtZXNzYWdlLnNraXBDb250ZW50UHJvY2Vzc2luZykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChQTEFURk9STS5nbG9iYWwuRm9ybURhdGEgJiYgbWVzc2FnZS5jb250ZW50IGluc3RhbmNlb2YgRm9ybURhdGEpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoUExBVEZPUk0uZ2xvYmFsLkJsb2IgJiYgbWVzc2FnZS5jb250ZW50IGluc3RhbmNlb2YgQmxvYikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChQTEFURk9STS5nbG9iYWwuQXJyYXlCdWZmZXIgJiYgbWVzc2FnZS5jb250ZW50IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAobWVzc2FnZS5jb250ZW50IGluc3RhbmNlb2YgRG9jdW1lbnQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodHlwZW9mIG1lc3NhZ2UuY29udGVudCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAobWVzc2FnZS5jb250ZW50ID09PSBudWxsIHx8IG1lc3NhZ2UuY29udGVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbWVzc2FnZS5jb250ZW50ID0gSlNPTi5zdHJpbmdpZnkobWVzc2FnZS5jb250ZW50LCBtZXNzYWdlLnJlcGxhY2VyKTtcblxuICBpZiAoIW1lc3NhZ2UuaGVhZGVycy5oYXMoJ0NvbnRlbnQtVHlwZScpKSB7XG4gICAgbWVzc2FnZS5oZWFkZXJzLmFkZCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgfVxufVxuXG5leHBvcnQgdmFyIEpTT05QUmVxdWVzdE1lc3NhZ2UgPSBmdW5jdGlvbiAoX1JlcXVlc3RNZXNzYWdlKSB7XG4gIF9pbmhlcml0cyhKU09OUFJlcXVlc3RNZXNzYWdlLCBfUmVxdWVzdE1lc3NhZ2UpO1xuXG4gIGZ1bmN0aW9uIEpTT05QUmVxdWVzdE1lc3NhZ2UodXJsLCBjYWxsYmFja1BhcmFtZXRlck5hbWUpIHtcbiAgICBcblxuICAgIHZhciBfdGhpczIgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfUmVxdWVzdE1lc3NhZ2UuY2FsbCh0aGlzLCAnSlNPTlAnLCB1cmwpKTtcblxuICAgIF90aGlzMi5yZXNwb25zZVR5cGUgPSAnanNvbnAnO1xuICAgIF90aGlzMi5jYWxsYmFja1BhcmFtZXRlck5hbWUgPSBjYWxsYmFja1BhcmFtZXRlck5hbWU7XG4gICAgcmV0dXJuIF90aGlzMjtcbiAgfVxuXG4gIHJldHVybiBKU09OUFJlcXVlc3RNZXNzYWdlO1xufShSZXF1ZXN0TWVzc2FnZSk7XG5cbnZhciBKU09OUFhIUiA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gSlNPTlBYSFIoKSB7XG4gICAgXG4gIH1cblxuICBKU09OUFhIUi5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uIG9wZW4obWV0aG9kLCB1cmwpIHtcbiAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZDtcbiAgICB0aGlzLnVybCA9IHVybDtcbiAgICB0aGlzLmNhbGxiYWNrTmFtZSA9ICdqc29ucF9jYWxsYmFja18nICsgTWF0aC5yb3VuZCgxMDAwMDAgKiBNYXRoLnJhbmRvbSgpKTtcbiAgfTtcblxuICBKU09OUFhIUi5wcm90b3R5cGUuc2VuZCA9IGZ1bmN0aW9uIHNlbmQoKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB2YXIgdXJsID0gdGhpcy51cmwgKyAodGhpcy51cmwuaW5kZXhPZignPycpID49IDAgPyAnJicgOiAnPycpICsgZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuY2FsbGJhY2tQYXJhbWV0ZXJOYW1lKSArICc9JyArIHRoaXMuY2FsbGJhY2tOYW1lO1xuICAgIHZhciBzY3JpcHQgPSBET00uY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG5cbiAgICBzY3JpcHQuc3JjID0gdXJsO1xuICAgIHNjcmlwdC5vbmVycm9yID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgIGNsZWFuVXAoKTtcblxuICAgICAgX3RoaXMzLnN0YXR1cyA9IDA7XG4gICAgICBfdGhpczMub25lcnJvcihuZXcgRXJyb3IoJ2Vycm9yJykpO1xuICAgIH07XG5cbiAgICB2YXIgY2xlYW5VcCA9IGZ1bmN0aW9uIGNsZWFuVXAoKSB7XG4gICAgICBkZWxldGUgUExBVEZPUk0uZ2xvYmFsW190aGlzMy5jYWxsYmFja05hbWVdO1xuICAgICAgRE9NLnJlbW92ZU5vZGUoc2NyaXB0KTtcbiAgICB9O1xuXG4gICAgUExBVEZPUk0uZ2xvYmFsW3RoaXMuY2FsbGJhY2tOYW1lXSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICBjbGVhblVwKCk7XG5cbiAgICAgIGlmIChfdGhpczMuc3RhdHVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgX3RoaXMzLnN0YXR1cyA9IDIwMDtcbiAgICAgICAgX3RoaXMzLnN0YXR1c1RleHQgPSAnT0snO1xuICAgICAgICBfdGhpczMucmVzcG9uc2UgPSBkYXRhO1xuICAgICAgICBfdGhpczMub25sb2FkKF90aGlzMyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIERPTS5hcHBlbmROb2RlKHNjcmlwdCk7XG5cbiAgICBpZiAodGhpcy50aW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoX3RoaXMzLnN0YXR1cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgX3RoaXMzLnN0YXR1cyA9IDA7XG4gICAgICAgICAgX3RoaXMzLm9udGltZW91dChuZXcgRXJyb3IoJ3RpbWVvdXQnKSk7XG4gICAgICAgIH1cbiAgICAgIH0sIHRoaXMudGltZW91dCk7XG4gICAgfVxuICB9O1xuXG4gIEpTT05QWEhSLnByb3RvdHlwZS5hYm9ydCA9IGZ1bmN0aW9uIGFib3J0KCkge1xuICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnN0YXR1cyA9IDA7XG4gICAgICB0aGlzLm9uYWJvcnQobmV3IEVycm9yKCdhYm9ydCcpKTtcbiAgICB9XG4gIH07XG5cbiAgSlNPTlBYSFIucHJvdG90eXBlLnNldFJlcXVlc3RIZWFkZXIgPSBmdW5jdGlvbiBzZXRSZXF1ZXN0SGVhZGVyKCkge307XG5cbiAgcmV0dXJuIEpTT05QWEhSO1xufSgpO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSlNPTlBSZXF1ZXN0TWVzc2FnZVByb2Nlc3NvcigpIHtcbiAgcmV0dXJuIG5ldyBSZXF1ZXN0TWVzc2FnZVByb2Nlc3NvcihKU09OUFhIUiwgW3RpbWVvdXRUcmFuc2Zvcm1lciwgY2FsbGJhY2tQYXJhbWV0ZXJOYW1lVHJhbnNmb3JtZXJdKTtcbn1cblxuZXhwb3J0IHZhciBIdHRwUmVxdWVzdE1lc3NhZ2UgPSBmdW5jdGlvbiAoX1JlcXVlc3RNZXNzYWdlMikge1xuICBfaW5oZXJpdHMoSHR0cFJlcXVlc3RNZXNzYWdlLCBfUmVxdWVzdE1lc3NhZ2UyKTtcblxuICBmdW5jdGlvbiBIdHRwUmVxdWVzdE1lc3NhZ2UobWV0aG9kLCB1cmwsIGNvbnRlbnQsIGhlYWRlcnMpIHtcbiAgICBcblxuICAgIHZhciBfdGhpczQgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfUmVxdWVzdE1lc3NhZ2UyLmNhbGwodGhpcywgbWV0aG9kLCB1cmwsIGNvbnRlbnQsIGhlYWRlcnMpKTtcblxuICAgIF90aGlzNC5yZXNwb25zZVR5cGUgPSAnanNvbic7cmV0dXJuIF90aGlzNDtcbiAgfVxuXG4gIHJldHVybiBIdHRwUmVxdWVzdE1lc3NhZ2U7XG59KFJlcXVlc3RNZXNzYWdlKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUh0dHBSZXF1ZXN0TWVzc2FnZVByb2Nlc3NvcigpIHtcbiAgcmV0dXJuIG5ldyBSZXF1ZXN0TWVzc2FnZVByb2Nlc3NvcihQTEFURk9STS5YTUxIdHRwUmVxdWVzdCwgW3RpbWVvdXRUcmFuc2Zvcm1lciwgY3JlZGVudGlhbHNUcmFuc2Zvcm1lciwgcHJvZ3Jlc3NUcmFuc2Zvcm1lciwgZG93bmxvYWRQcm9ncmVzc1RyYW5zZm9ybWVyLCByZXNwb25zZVR5cGVUcmFuc2Zvcm1lciwgY29udGVudFRyYW5zZm9ybWVyLCBoZWFkZXJUcmFuc2Zvcm1lcl0pO1xufVxuXG5leHBvcnQgdmFyIFJlcXVlc3RCdWlsZGVyID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBSZXF1ZXN0QnVpbGRlcihjbGllbnQpIHtcbiAgICBcblxuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50O1xuICAgIHRoaXMudHJhbnNmb3JtZXJzID0gY2xpZW50LnJlcXVlc3RUcmFuc2Zvcm1lcnMuc2xpY2UoMCk7XG4gICAgdGhpcy51c2VKc29ucCA9IGZhbHNlO1xuICB9XG5cbiAgUmVxdWVzdEJ1aWxkZXIucHJvdG90eXBlLmFzRGVsZXRlID0gZnVuY3Rpb24gYXNEZWxldGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FkZFRyYW5zZm9ybWVyKGZ1bmN0aW9uIChjbGllbnQsIHByb2Nlc3NvciwgbWVzc2FnZSkge1xuICAgICAgbWVzc2FnZS5tZXRob2QgPSAnREVMRVRFJztcbiAgICB9KTtcbiAgfTtcblxuICBSZXF1ZXN0QnVpbGRlci5wcm90b3R5cGUuYXNHZXQgPSBmdW5jdGlvbiBhc0dldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fYWRkVHJhbnNmb3JtZXIoZnVuY3Rpb24gKGNsaWVudCwgcHJvY2Vzc29yLCBtZXNzYWdlKSB7XG4gICAgICBtZXNzYWdlLm1ldGhvZCA9ICdHRVQnO1xuICAgIH0pO1xuICB9O1xuXG4gIFJlcXVlc3RCdWlsZGVyLnByb3RvdHlwZS5hc0hlYWQgPSBmdW5jdGlvbiBhc0hlYWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FkZFRyYW5zZm9ybWVyKGZ1bmN0aW9uIChjbGllbnQsIHByb2Nlc3NvciwgbWVzc2FnZSkge1xuICAgICAgbWVzc2FnZS5tZXRob2QgPSAnSEVBRCc7XG4gICAgfSk7XG4gIH07XG5cbiAgUmVxdWVzdEJ1aWxkZXIucHJvdG90eXBlLmFzT3B0aW9ucyA9IGZ1bmN0aW9uIGFzT3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5fYWRkVHJhbnNmb3JtZXIoZnVuY3Rpb24gKGNsaWVudCwgcHJvY2Vzc29yLCBtZXNzYWdlKSB7XG4gICAgICBtZXNzYWdlLm1ldGhvZCA9ICdPUFRJT05TJztcbiAgICB9KTtcbiAgfTtcblxuICBSZXF1ZXN0QnVpbGRlci5wcm90b3R5cGUuYXNQYXRjaCA9IGZ1bmN0aW9uIGFzUGF0Y2goKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FkZFRyYW5zZm9ybWVyKGZ1bmN0aW9uIChjbGllbnQsIHByb2Nlc3NvciwgbWVzc2FnZSkge1xuICAgICAgbWVzc2FnZS5tZXRob2QgPSAnUEFUQ0gnO1xuICAgIH0pO1xuICB9O1xuXG4gIFJlcXVlc3RCdWlsZGVyLnByb3RvdHlwZS5hc1Bvc3QgPSBmdW5jdGlvbiBhc1Bvc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FkZFRyYW5zZm9ybWVyKGZ1bmN0aW9uIChjbGllbnQsIHByb2Nlc3NvciwgbWVzc2FnZSkge1xuICAgICAgbWVzc2FnZS5tZXRob2QgPSAnUE9TVCc7XG4gICAgfSk7XG4gIH07XG5cbiAgUmVxdWVzdEJ1aWxkZXIucHJvdG90eXBlLmFzUHV0ID0gZnVuY3Rpb24gYXNQdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FkZFRyYW5zZm9ybWVyKGZ1bmN0aW9uIChjbGllbnQsIHByb2Nlc3NvciwgbWVzc2FnZSkge1xuICAgICAgbWVzc2FnZS5tZXRob2QgPSAnUFVUJztcbiAgICB9KTtcbiAgfTtcblxuICBSZXF1ZXN0QnVpbGRlci5wcm90b3R5cGUuYXNKc29ucCA9IGZ1bmN0aW9uIGFzSnNvbnAoY2FsbGJhY2tQYXJhbWV0ZXJOYW1lKSB7XG4gICAgdGhpcy51c2VKc29ucCA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXMuX2FkZFRyYW5zZm9ybWVyKGZ1bmN0aW9uIChjbGllbnQsIHByb2Nlc3NvciwgbWVzc2FnZSkge1xuICAgICAgbWVzc2FnZS5jYWxsYmFja1BhcmFtZXRlck5hbWUgPSBjYWxsYmFja1BhcmFtZXRlck5hbWU7XG4gICAgfSk7XG4gIH07XG5cbiAgUmVxdWVzdEJ1aWxkZXIucHJvdG90eXBlLndpdGhVcmwgPSBmdW5jdGlvbiB3aXRoVXJsKHVybCkge1xuICAgIHJldHVybiB0aGlzLl9hZGRUcmFuc2Zvcm1lcihmdW5jdGlvbiAoY2xpZW50LCBwcm9jZXNzb3IsIG1lc3NhZ2UpIHtcbiAgICAgIG1lc3NhZ2UudXJsID0gdXJsO1xuICAgIH0pO1xuICB9O1xuXG4gIFJlcXVlc3RCdWlsZGVyLnByb3RvdHlwZS53aXRoQ29udGVudCA9IGZ1bmN0aW9uIHdpdGhDb250ZW50KGNvbnRlbnQpIHtcbiAgICByZXR1cm4gdGhpcy5fYWRkVHJhbnNmb3JtZXIoZnVuY3Rpb24gKGNsaWVudCwgcHJvY2Vzc29yLCBtZXNzYWdlKSB7XG4gICAgICBtZXNzYWdlLmNvbnRlbnQgPSBjb250ZW50O1xuICAgIH0pO1xuICB9O1xuXG4gIFJlcXVlc3RCdWlsZGVyLnByb3RvdHlwZS53aXRoQmFzZVVybCA9IGZ1bmN0aW9uIHdpdGhCYXNlVXJsKGJhc2VVcmwpIHtcbiAgICByZXR1cm4gdGhpcy5fYWRkVHJhbnNmb3JtZXIoZnVuY3Rpb24gKGNsaWVudCwgcHJvY2Vzc29yLCBtZXNzYWdlKSB7XG4gICAgICBtZXNzYWdlLmJhc2VVcmwgPSBiYXNlVXJsO1xuICAgIH0pO1xuICB9O1xuXG4gIFJlcXVlc3RCdWlsZGVyLnByb3RvdHlwZS53aXRoUGFyYW1zID0gZnVuY3Rpb24gd2l0aFBhcmFtcyhwYXJhbXMsIHRyYWRpdGlvbmFsKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FkZFRyYW5zZm9ybWVyKGZ1bmN0aW9uIChjbGllbnQsIHByb2Nlc3NvciwgbWVzc2FnZSkge1xuICAgICAgbWVzc2FnZS50cmFkaXRpb25hbCA9IHRyYWRpdGlvbmFsO1xuICAgICAgbWVzc2FnZS5wYXJhbXMgPSBwYXJhbXM7XG4gICAgfSk7XG4gIH07XG5cbiAgUmVxdWVzdEJ1aWxkZXIucHJvdG90eXBlLndpdGhSZXNwb25zZVR5cGUgPSBmdW5jdGlvbiB3aXRoUmVzcG9uc2VUeXBlKHJlc3BvbnNlVHlwZSkge1xuICAgIHJldHVybiB0aGlzLl9hZGRUcmFuc2Zvcm1lcihmdW5jdGlvbiAoY2xpZW50LCBwcm9jZXNzb3IsIG1lc3NhZ2UpIHtcbiAgICAgIG1lc3NhZ2UucmVzcG9uc2VUeXBlID0gcmVzcG9uc2VUeXBlO1xuICAgIH0pO1xuICB9O1xuXG4gIFJlcXVlc3RCdWlsZGVyLnByb3RvdHlwZS53aXRoVGltZW91dCA9IGZ1bmN0aW9uIHdpdGhUaW1lb3V0KHRpbWVvdXQpIHtcbiAgICByZXR1cm4gdGhpcy5fYWRkVHJhbnNmb3JtZXIoZnVuY3Rpb24gKGNsaWVudCwgcHJvY2Vzc29yLCBtZXNzYWdlKSB7XG4gICAgICBtZXNzYWdlLnRpbWVvdXQgPSB0aW1lb3V0O1xuICAgIH0pO1xuICB9O1xuXG4gIFJlcXVlc3RCdWlsZGVyLnByb3RvdHlwZS53aXRoSGVhZGVyID0gZnVuY3Rpb24gd2l0aEhlYWRlcihrZXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FkZFRyYW5zZm9ybWVyKGZ1bmN0aW9uIChjbGllbnQsIHByb2Nlc3NvciwgbWVzc2FnZSkge1xuICAgICAgbWVzc2FnZS5oZWFkZXJzLmFkZChrZXksIHZhbHVlKTtcbiAgICB9KTtcbiAgfTtcblxuICBSZXF1ZXN0QnVpbGRlci5wcm90b3R5cGUud2l0aENyZWRlbnRpYWxzID0gZnVuY3Rpb24gd2l0aENyZWRlbnRpYWxzKHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FkZFRyYW5zZm9ybWVyKGZ1bmN0aW9uIChjbGllbnQsIHByb2Nlc3NvciwgbWVzc2FnZSkge1xuICAgICAgbWVzc2FnZS53aXRoQ3JlZGVudGlhbHMgPSB2YWx1ZTtcbiAgICB9KTtcbiAgfTtcblxuICBSZXF1ZXN0QnVpbGRlci5wcm90b3R5cGUud2l0aExvZ2luID0gZnVuY3Rpb24gd2l0aExvZ2luKHVzZXIsIHBhc3N3b3JkKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FkZFRyYW5zZm9ybWVyKGZ1bmN0aW9uIChjbGllbnQsIHByb2Nlc3NvciwgbWVzc2FnZSkge1xuICAgICAgbWVzc2FnZS51c2VyID0gdXNlcjttZXNzYWdlLnBhc3N3b3JkID0gcGFzc3dvcmQ7XG4gICAgfSk7XG4gIH07XG5cbiAgUmVxdWVzdEJ1aWxkZXIucHJvdG90eXBlLndpdGhSZXZpdmVyID0gZnVuY3Rpb24gd2l0aFJldml2ZXIocmV2aXZlcikge1xuICAgIHJldHVybiB0aGlzLl9hZGRUcmFuc2Zvcm1lcihmdW5jdGlvbiAoY2xpZW50LCBwcm9jZXNzb3IsIG1lc3NhZ2UpIHtcbiAgICAgIG1lc3NhZ2UucmV2aXZlciA9IHJldml2ZXI7XG4gICAgfSk7XG4gIH07XG5cbiAgUmVxdWVzdEJ1aWxkZXIucHJvdG90eXBlLndpdGhSZXBsYWNlciA9IGZ1bmN0aW9uIHdpdGhSZXBsYWNlcihyZXBsYWNlcikge1xuICAgIHJldHVybiB0aGlzLl9hZGRUcmFuc2Zvcm1lcihmdW5jdGlvbiAoY2xpZW50LCBwcm9jZXNzb3IsIG1lc3NhZ2UpIHtcbiAgICAgIG1lc3NhZ2UucmVwbGFjZXIgPSByZXBsYWNlcjtcbiAgICB9KTtcbiAgfTtcblxuICBSZXF1ZXN0QnVpbGRlci5wcm90b3R5cGUud2l0aFByb2dyZXNzQ2FsbGJhY2sgPSBmdW5jdGlvbiB3aXRoUHJvZ3Jlc3NDYWxsYmFjayhwcm9ncmVzc0NhbGxiYWNrKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FkZFRyYW5zZm9ybWVyKGZ1bmN0aW9uIChjbGllbnQsIHByb2Nlc3NvciwgbWVzc2FnZSkge1xuICAgICAgbWVzc2FnZS5wcm9ncmVzc0NhbGxiYWNrID0gcHJvZ3Jlc3NDYWxsYmFjaztcbiAgICB9KTtcbiAgfTtcblxuICBSZXF1ZXN0QnVpbGRlci5wcm90b3R5cGUud2l0aERvd25sb2FkUHJvZ3Jlc3NDYWxsYmFjayA9IGZ1bmN0aW9uIHdpdGhEb3dubG9hZFByb2dyZXNzQ2FsbGJhY2soZG93bmxvYWRQcm9ncmVzc0NhbGxiYWNrKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FkZFRyYW5zZm9ybWVyKGZ1bmN0aW9uIChjbGllbnQsIHByb2Nlc3NvciwgbWVzc2FnZSkge1xuICAgICAgbWVzc2FnZS5kb3dubG9hZFByb2dyZXNzQ2FsbGJhY2sgPSBkb3dubG9hZFByb2dyZXNzQ2FsbGJhY2s7XG4gICAgfSk7XG4gIH07XG5cbiAgUmVxdWVzdEJ1aWxkZXIucHJvdG90eXBlLndpdGhDYWxsYmFja1BhcmFtZXRlck5hbWUgPSBmdW5jdGlvbiB3aXRoQ2FsbGJhY2tQYXJhbWV0ZXJOYW1lKGNhbGxiYWNrUGFyYW1ldGVyTmFtZSkge1xuICAgIHJldHVybiB0aGlzLl9hZGRUcmFuc2Zvcm1lcihmdW5jdGlvbiAoY2xpZW50LCBwcm9jZXNzb3IsIG1lc3NhZ2UpIHtcbiAgICAgIG1lc3NhZ2UuY2FsbGJhY2tQYXJhbWV0ZXJOYW1lID0gY2FsbGJhY2tQYXJhbWV0ZXJOYW1lO1xuICAgIH0pO1xuICB9O1xuXG4gIFJlcXVlc3RCdWlsZGVyLnByb3RvdHlwZS53aXRoSW50ZXJjZXB0b3IgPSBmdW5jdGlvbiB3aXRoSW50ZXJjZXB0b3IoaW50ZXJjZXB0b3IpIHtcbiAgICByZXR1cm4gdGhpcy5fYWRkVHJhbnNmb3JtZXIoZnVuY3Rpb24gKGNsaWVudCwgcHJvY2Vzc29yLCBtZXNzYWdlKSB7XG4gICAgICBtZXNzYWdlLmludGVyY2VwdG9ycyA9IG1lc3NhZ2UuaW50ZXJjZXB0b3JzIHx8IFtdO1xuICAgICAgbWVzc2FnZS5pbnRlcmNlcHRvcnMudW5zaGlmdChpbnRlcmNlcHRvcik7XG4gICAgfSk7XG4gIH07XG5cbiAgUmVxdWVzdEJ1aWxkZXIucHJvdG90eXBlLnNraXBDb250ZW50UHJvY2Vzc2luZyA9IGZ1bmN0aW9uIHNraXBDb250ZW50UHJvY2Vzc2luZygpIHtcbiAgICByZXR1cm4gdGhpcy5fYWRkVHJhbnNmb3JtZXIoZnVuY3Rpb24gKGNsaWVudCwgcHJvY2Vzc29yLCBtZXNzYWdlKSB7XG4gICAgICBtZXNzYWdlLnNraXBDb250ZW50UHJvY2Vzc2luZyA9IHRydWU7XG4gICAgfSk7XG4gIH07XG5cbiAgUmVxdWVzdEJ1aWxkZXIucHJvdG90eXBlLl9hZGRUcmFuc2Zvcm1lciA9IGZ1bmN0aW9uIF9hZGRUcmFuc2Zvcm1lcihmbikge1xuICAgIHRoaXMudHJhbnNmb3JtZXJzLnB1c2goZm4pO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIFJlcXVlc3RCdWlsZGVyLmFkZEhlbHBlciA9IGZ1bmN0aW9uIGFkZEhlbHBlcihuYW1lLCBmbikge1xuICAgIFJlcXVlc3RCdWlsZGVyLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9hZGRUcmFuc2Zvcm1lcihmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgICB9O1xuICB9O1xuXG4gIFJlcXVlc3RCdWlsZGVyLnByb3RvdHlwZS5zZW5kID0gZnVuY3Rpb24gc2VuZCgpIHtcbiAgICB2YXIgbWVzc2FnZSA9IHRoaXMudXNlSnNvbnAgPyBuZXcgSlNPTlBSZXF1ZXN0TWVzc2FnZSgpIDogbmV3IEh0dHBSZXF1ZXN0TWVzc2FnZSgpO1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kKG1lc3NhZ2UsIHRoaXMudHJhbnNmb3JtZXJzKTtcbiAgfTtcblxuICByZXR1cm4gUmVxdWVzdEJ1aWxkZXI7XG59KCk7XG5cbmZ1bmN0aW9uIHRyYWNrUmVxdWVzdFN0YXJ0KGNsaWVudCwgcHJvY2Vzc29yKSB7XG4gIGNsaWVudC5wZW5kaW5nUmVxdWVzdHMucHVzaChwcm9jZXNzb3IpO1xuICBjbGllbnQuaXNSZXF1ZXN0aW5nID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gdHJhY2tSZXF1ZXN0RW5kKGNsaWVudCwgcHJvY2Vzc29yKSB7XG4gIHZhciBpbmRleCA9IGNsaWVudC5wZW5kaW5nUmVxdWVzdHMuaW5kZXhPZihwcm9jZXNzb3IpO1xuXG4gIGNsaWVudC5wZW5kaW5nUmVxdWVzdHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgY2xpZW50LmlzUmVxdWVzdGluZyA9IGNsaWVudC5wZW5kaW5nUmVxdWVzdHMubGVuZ3RoID4gMDtcblxuICBpZiAoIWNsaWVudC5pc1JlcXVlc3RpbmcpIHtcbiAgICB2YXIgZXZ0ID0gRE9NLmNyZWF0ZUN1c3RvbUV2ZW50KCdhdXJlbGlhLWh0dHAtY2xpZW50LXJlcXVlc3RzLWRyYWluZWQnLCB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUgfSk7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gRE9NLmRpc3BhdGNoRXZlbnQoZXZ0KTtcbiAgICB9LCAxKTtcbiAgfVxufVxuXG5leHBvcnQgdmFyIEh0dHBDbGllbnQgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEh0dHBDbGllbnQoKSB7XG4gICAgXG5cbiAgICB0aGlzLmlzUmVxdWVzdGluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5yZXF1ZXN0VHJhbnNmb3JtZXJzID0gW107XG4gICAgdGhpcy5yZXF1ZXN0UHJvY2Vzc29yRmFjdG9yaWVzID0gbmV3IE1hcCgpO1xuICAgIHRoaXMucmVxdWVzdFByb2Nlc3NvckZhY3Rvcmllcy5zZXQoSHR0cFJlcXVlc3RNZXNzYWdlLCBjcmVhdGVIdHRwUmVxdWVzdE1lc3NhZ2VQcm9jZXNzb3IpO1xuICAgIHRoaXMucmVxdWVzdFByb2Nlc3NvckZhY3Rvcmllcy5zZXQoSlNPTlBSZXF1ZXN0TWVzc2FnZSwgY3JlYXRlSlNPTlBSZXF1ZXN0TWVzc2FnZVByb2Nlc3Nvcik7XG4gICAgdGhpcy5wZW5kaW5nUmVxdWVzdHMgPSBbXTtcbiAgfVxuXG4gIEh0dHBDbGllbnQucHJvdG90eXBlLmNvbmZpZ3VyZSA9IGZ1bmN0aW9uIGNvbmZpZ3VyZShmbikge1xuICAgIHZhciBidWlsZGVyID0gbmV3IFJlcXVlc3RCdWlsZGVyKHRoaXMpO1xuICAgIGZuKGJ1aWxkZXIpO1xuICAgIHRoaXMucmVxdWVzdFRyYW5zZm9ybWVycyA9IGJ1aWxkZXIudHJhbnNmb3JtZXJzO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEh0dHBDbGllbnQucHJvdG90eXBlLmNyZWF0ZVJlcXVlc3QgPSBmdW5jdGlvbiBjcmVhdGVSZXF1ZXN0KHVybCkge1xuICAgIHZhciBidWlsZGVyID0gbmV3IFJlcXVlc3RCdWlsZGVyKHRoaXMpO1xuXG4gICAgaWYgKHVybCkge1xuICAgICAgYnVpbGRlci53aXRoVXJsKHVybCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1aWxkZXI7XG4gIH07XG5cbiAgSHR0cENsaWVudC5wcm90b3R5cGUuc2VuZCA9IGZ1bmN0aW9uIHNlbmQocmVxdWVzdE1lc3NhZ2UsIHRyYW5zZm9ybWVycykge1xuICAgIHZhciBfdGhpczUgPSB0aGlzO1xuXG4gICAgdmFyIGNyZWF0ZVByb2Nlc3NvciA9IHRoaXMucmVxdWVzdFByb2Nlc3NvckZhY3Rvcmllcy5nZXQocmVxdWVzdE1lc3NhZ2UuY29uc3RydWN0b3IpO1xuICAgIHZhciBwcm9jZXNzb3IgPSB2b2lkIDA7XG4gICAgdmFyIHByb21pc2UgPSB2b2lkIDA7XG4gICAgdmFyIGkgPSB2b2lkIDA7XG4gICAgdmFyIGlpID0gdm9pZCAwO1xuXG4gICAgaWYgKCFjcmVhdGVQcm9jZXNzb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gcmVxdWVzdCBtZXNzYWdlIHByb2Nlc3NvciBmYWN0b3J5IGZvciAnICsgcmVxdWVzdE1lc3NhZ2UuY29uc3RydWN0b3IgKyAnLicpO1xuICAgIH1cblxuICAgIHByb2Nlc3NvciA9IGNyZWF0ZVByb2Nlc3NvcigpO1xuICAgIHRyYWNrUmVxdWVzdFN0YXJ0KHRoaXMsIHByb2Nlc3Nvcik7XG5cbiAgICB0cmFuc2Zvcm1lcnMgPSB0cmFuc2Zvcm1lcnMgfHwgdGhpcy5yZXF1ZXN0VHJhbnNmb3JtZXJzO1xuXG4gICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShyZXF1ZXN0TWVzc2FnZSkudGhlbihmdW5jdGlvbiAobWVzc2FnZSkge1xuICAgICAgZm9yIChpID0gMCwgaWkgPSB0cmFuc2Zvcm1lcnMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgICB0cmFuc2Zvcm1lcnNbaV0oX3RoaXM1LCBwcm9jZXNzb3IsIG1lc3NhZ2UpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJvY2Vzc29yLnByb2Nlc3MoX3RoaXM1LCBtZXNzYWdlKS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICB0cmFja1JlcXVlc3RFbmQoX3RoaXM1LCBwcm9jZXNzb3IpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICB9KS5jYXRjaChmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgdHJhY2tSZXF1ZXN0RW5kKF90aGlzNSwgcHJvY2Vzc29yKTtcbiAgICAgICAgdGhyb3cgcmVzcG9uc2U7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHByb21pc2UuYWJvcnQgPSBwcm9taXNlLmNhbmNlbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb2Nlc3Nvci5hYm9ydCgpO1xuICAgIH07XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfTtcblxuICBIdHRwQ2xpZW50LnByb3RvdHlwZS5kZWxldGUgPSBmdW5jdGlvbiBfZGVsZXRlKHVybCkge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZVJlcXVlc3QodXJsKS5hc0RlbGV0ZSgpLnNlbmQoKTtcbiAgfTtcblxuICBIdHRwQ2xpZW50LnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiBnZXQodXJsLCBwYXJhbXMsIHRyYWRpdGlvbmFsKSB7XG4gICAgdmFyIHJlcSA9IHRoaXMuY3JlYXRlUmVxdWVzdCh1cmwpLmFzR2V0KCk7XG5cbiAgICBpZiAocGFyYW1zKSB7XG4gICAgICByZXR1cm4gcmVxLndpdGhQYXJhbXMocGFyYW1zLCB0cmFkaXRpb25hbCkuc2VuZCgpO1xuICAgIH1cblxuICAgIHJldHVybiByZXEuc2VuZCgpO1xuICB9O1xuXG4gIEh0dHBDbGllbnQucHJvdG90eXBlLmhlYWQgPSBmdW5jdGlvbiBoZWFkKHVybCkge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZVJlcXVlc3QodXJsKS5hc0hlYWQoKS5zZW5kKCk7XG4gIH07XG5cbiAgSHR0cENsaWVudC5wcm90b3R5cGUuanNvbnAgPSBmdW5jdGlvbiBqc29ucCh1cmwpIHtcbiAgICB2YXIgY2FsbGJhY2tQYXJhbWV0ZXJOYW1lID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnanNvbmNhbGxiYWNrJztcblxuICAgIHJldHVybiB0aGlzLmNyZWF0ZVJlcXVlc3QodXJsKS5hc0pzb25wKGNhbGxiYWNrUGFyYW1ldGVyTmFtZSkuc2VuZCgpO1xuICB9O1xuXG4gIEh0dHBDbGllbnQucHJvdG90eXBlLm9wdGlvbnMgPSBmdW5jdGlvbiBvcHRpb25zKHVybCkge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZVJlcXVlc3QodXJsKS5hc09wdGlvbnMoKS5zZW5kKCk7XG4gIH07XG5cbiAgSHR0cENsaWVudC5wcm90b3R5cGUucHV0ID0gZnVuY3Rpb24gcHV0KHVybCwgY29udGVudCkge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZVJlcXVlc3QodXJsKS5hc1B1dCgpLndpdGhDb250ZW50KGNvbnRlbnQpLnNlbmQoKTtcbiAgfTtcblxuICBIdHRwQ2xpZW50LnByb3RvdHlwZS5wYXRjaCA9IGZ1bmN0aW9uIHBhdGNoKHVybCwgY29udGVudCkge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZVJlcXVlc3QodXJsKS5hc1BhdGNoKCkud2l0aENvbnRlbnQoY29udGVudCkuc2VuZCgpO1xuICB9O1xuXG4gIEh0dHBDbGllbnQucHJvdG90eXBlLnBvc3QgPSBmdW5jdGlvbiBwb3N0KHVybCwgY29udGVudCkge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZVJlcXVlc3QodXJsKS5hc1Bvc3QoKS53aXRoQ29udGVudChjb250ZW50KS5zZW5kKCk7XG4gIH07XG5cbiAgcmV0dXJuIEh0dHBDbGllbnQ7XG59KCk7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///26\n")},27:function(module,exports,__webpack_require__){"use strict";eval("\nvar strictUriEncode = __webpack_require__(189);\nvar objectAssign = __webpack_require__(188);\nvar decodeComponent = __webpack_require__(187);\n\nfunction encoderForArrayFormat(opts) {\n\tswitch (opts.arrayFormat) {\n\t\tcase 'index':\n\t\t\treturn function (key, value, index) {\n\t\t\t\treturn value === null ? [\n\t\t\t\t\tencode(key, opts),\n\t\t\t\t\t'[',\n\t\t\t\t\tindex,\n\t\t\t\t\t']'\n\t\t\t\t].join('') : [\n\t\t\t\t\tencode(key, opts),\n\t\t\t\t\t'[',\n\t\t\t\t\tencode(index, opts),\n\t\t\t\t\t']=',\n\t\t\t\t\tencode(value, opts)\n\t\t\t\t].join('');\n\t\t\t};\n\n\t\tcase 'bracket':\n\t\t\treturn function (key, value) {\n\t\t\t\treturn value === null ? encode(key, opts) : [\n\t\t\t\t\tencode(key, opts),\n\t\t\t\t\t'[]=',\n\t\t\t\t\tencode(value, opts)\n\t\t\t\t].join('');\n\t\t\t};\n\n\t\tdefault:\n\t\t\treturn function (key, value) {\n\t\t\t\treturn value === null ? encode(key, opts) : [\n\t\t\t\t\tencode(key, opts),\n\t\t\t\t\t'=',\n\t\t\t\t\tencode(value, opts)\n\t\t\t\t].join('');\n\t\t\t};\n\t}\n}\n\nfunction parserForArrayFormat(opts) {\n\tvar result;\n\n\tswitch (opts.arrayFormat) {\n\t\tcase 'index':\n\t\t\treturn function (key, value, accumulator) {\n\t\t\t\tresult = /\\[(\\d*)\\]$/.exec(key);\n\n\t\t\t\tkey = key.replace(/\\[\\d*\\]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = {};\n\t\t\t\t}\n\n\t\t\t\taccumulator[key][result[1]] = value;\n\t\t\t};\n\n\t\tcase 'bracket':\n\t\t\treturn function (key, value, accumulator) {\n\t\t\t\tresult = /(\\[\\])$/.exec(key);\n\t\t\t\tkey = key.replace(/\\[\\]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t} else if (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = [value];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\n\t\tdefault:\n\t\t\treturn function (key, value, accumulator) {\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\t}\n}\n\nfunction encode(value, opts) {\n\tif (opts.encode) {\n\t\treturn opts.strict ? strictUriEncode(value) : encodeURIComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction keysSorter(input) {\n\tif (Array.isArray(input)) {\n\t\treturn input.sort();\n\t} else if (typeof input === 'object') {\n\t\treturn keysSorter(Object.keys(input)).sort(function (a, b) {\n\t\t\treturn Number(a) - Number(b);\n\t\t}).map(function (key) {\n\t\t\treturn input[key];\n\t\t});\n\t}\n\n\treturn input;\n}\n\nfunction extract(str) {\n\tvar queryStart = str.indexOf('?');\n\tif (queryStart === -1) {\n\t\treturn '';\n\t}\n\treturn str.slice(queryStart + 1);\n}\n\nfunction parse(str, opts) {\n\topts = objectAssign({arrayFormat: 'none'}, opts);\n\n\tvar formatter = parserForArrayFormat(opts);\n\n\t// Create an object with no prototype\n\t// https://github.com/sindresorhus/query-string/issues/47\n\tvar ret = Object.create(null);\n\n\tif (typeof str !== 'string') {\n\t\treturn ret;\n\t}\n\n\tstr = str.trim().replace(/^[?#&]/, '');\n\n\tif (!str) {\n\t\treturn ret;\n\t}\n\n\tstr.split('&').forEach(function (param) {\n\t\tvar parts = param.replace(/\\+/g, ' ').split('=');\n\t\t// Firefox (pre 40) decodes `%3D` to `=`\n\t\t// https://github.com/sindresorhus/query-string/pull/37\n\t\tvar key = parts.shift();\n\t\tvar val = parts.length > 0 ? parts.join('=') : undefined;\n\n\t\t// missing `=` should be `null`:\n\t\t// http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters\n\t\tval = val === undefined ? null : decodeComponent(val);\n\n\t\tformatter(decodeComponent(key), val, ret);\n\t});\n\n\treturn Object.keys(ret).sort().reduce(function (result, key) {\n\t\tvar val = ret[key];\n\t\tif (Boolean(val) && typeof val === 'object' && !Array.isArray(val)) {\n\t\t\t// Sort object keys, not values\n\t\t\tresult[key] = keysSorter(val);\n\t\t} else {\n\t\t\tresult[key] = val;\n\t\t}\n\n\t\treturn result;\n\t}, Object.create(null));\n}\n\nexports.extract = extract;\nexports.parse = parse;\n\nexports.stringify = function (obj, opts) {\n\tvar defaults = {\n\t\tencode: true,\n\t\tstrict: true,\n\t\tarrayFormat: 'none'\n\t};\n\n\topts = objectAssign(defaults, opts);\n\n\tif (opts.sort === false) {\n\t\topts.sort = function () {};\n\t}\n\n\tvar formatter = encoderForArrayFormat(opts);\n\n\treturn obj ? Object.keys(obj).sort(opts.sort).map(function (key) {\n\t\tvar val = obj[key];\n\n\t\tif (val === undefined) {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (val === null) {\n\t\t\treturn encode(key, opts);\n\t\t}\n\n\t\tif (Array.isArray(val)) {\n\t\t\tvar result = [];\n\n\t\t\tval.slice().forEach(function (val2) {\n\t\t\t\tif (val2 === undefined) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tresult.push(formatter(key, val2, result.length));\n\t\t\t});\n\n\t\t\treturn result.join('&');\n\t\t}\n\n\t\treturn encode(key, opts) + '=' + encode(val, opts);\n\t}).filter(function (x) {\n\t\treturn x.length > 0;\n\t}).join('&') : '';\n};\n\nexports.parseUrl = function (str, opts) {\n\treturn {\n\t\turl: str.split('?')[0] || '',\n\t\tquery: parse(extract(str), opts)\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcXVlcnktc3RyaW5nL2luZGV4LmpzPzcyYmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixzQkFBc0IsbUJBQU8sQ0FBQyxHQUFtQjtBQUNqRCxtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLHNCQUFzQixtQkFBTyxDQUFDLEdBQXNCOztBQUVwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNCQUFzQixvQkFBb0I7O0FBRTFDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJOztBQUVKO0FBQ0E7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjI3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIHN0cmljdFVyaUVuY29kZSA9IHJlcXVpcmUoJ3N0cmljdC11cmktZW5jb2RlJyk7XG52YXIgb2JqZWN0QXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xudmFyIGRlY29kZUNvbXBvbmVudCA9IHJlcXVpcmUoJ2RlY29kZS11cmktY29tcG9uZW50Jyk7XG5cbmZ1bmN0aW9uIGVuY29kZXJGb3JBcnJheUZvcm1hdChvcHRzKSB7XG5cdHN3aXRjaCAob3B0cy5hcnJheUZvcm1hdCkge1xuXHRcdGNhc2UgJ2luZGV4Jzpcblx0XHRcdHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgaW5kZXgpIHtcblx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSBudWxsID8gW1xuXHRcdFx0XHRcdGVuY29kZShrZXksIG9wdHMpLFxuXHRcdFx0XHRcdCdbJyxcblx0XHRcdFx0XHRpbmRleCxcblx0XHRcdFx0XHQnXSdcblx0XHRcdFx0XS5qb2luKCcnKSA6IFtcblx0XHRcdFx0XHRlbmNvZGUoa2V5LCBvcHRzKSxcblx0XHRcdFx0XHQnWycsXG5cdFx0XHRcdFx0ZW5jb2RlKGluZGV4LCBvcHRzKSxcblx0XHRcdFx0XHQnXT0nLFxuXHRcdFx0XHRcdGVuY29kZSh2YWx1ZSwgb3B0cylcblx0XHRcdFx0XS5qb2luKCcnKTtcblx0XHRcdH07XG5cblx0XHRjYXNlICdicmFja2V0Jzpcblx0XHRcdHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IG51bGwgPyBlbmNvZGUoa2V5LCBvcHRzKSA6IFtcblx0XHRcdFx0XHRlbmNvZGUoa2V5LCBvcHRzKSxcblx0XHRcdFx0XHQnW109Jyxcblx0XHRcdFx0XHRlbmNvZGUodmFsdWUsIG9wdHMpXG5cdFx0XHRcdF0uam9pbignJyk7XG5cdFx0XHR9O1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IG51bGwgPyBlbmNvZGUoa2V5LCBvcHRzKSA6IFtcblx0XHRcdFx0XHRlbmNvZGUoa2V5LCBvcHRzKSxcblx0XHRcdFx0XHQnPScsXG5cdFx0XHRcdFx0ZW5jb2RlKHZhbHVlLCBvcHRzKVxuXHRcdFx0XHRdLmpvaW4oJycpO1xuXHRcdFx0fTtcblx0fVxufVxuXG5mdW5jdGlvbiBwYXJzZXJGb3JBcnJheUZvcm1hdChvcHRzKSB7XG5cdHZhciByZXN1bHQ7XG5cblx0c3dpdGNoIChvcHRzLmFycmF5Rm9ybWF0KSB7XG5cdFx0Y2FzZSAnaW5kZXgnOlxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIChrZXksIHZhbHVlLCBhY2N1bXVsYXRvcikge1xuXHRcdFx0XHRyZXN1bHQgPSAvXFxbKFxcZCopXFxdJC8uZXhlYyhrZXkpO1xuXG5cdFx0XHRcdGtleSA9IGtleS5yZXBsYWNlKC9cXFtcXGQqXFxdJC8sICcnKTtcblxuXHRcdFx0XHRpZiAoIXJlc3VsdCkge1xuXHRcdFx0XHRcdGFjY3VtdWxhdG9yW2tleV0gPSB2YWx1ZTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoYWNjdW11bGF0b3Jba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0YWNjdW11bGF0b3Jba2V5XSA9IHt9O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YWNjdW11bGF0b3Jba2V5XVtyZXN1bHRbMV1dID0gdmFsdWU7XG5cdFx0XHR9O1xuXG5cdFx0Y2FzZSAnYnJhY2tldCc6XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gKGtleSwgdmFsdWUsIGFjY3VtdWxhdG9yKSB7XG5cdFx0XHRcdHJlc3VsdCA9IC8oXFxbXFxdKSQvLmV4ZWMoa2V5KTtcblx0XHRcdFx0a2V5ID0ga2V5LnJlcGxhY2UoL1xcW1xcXSQvLCAnJyk7XG5cblx0XHRcdFx0aWYgKCFyZXN1bHQpIHtcblx0XHRcdFx0XHRhY2N1bXVsYXRvcltrZXldID0gdmFsdWU7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFjY3VtdWxhdG9yW2tleV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGFjY3VtdWxhdG9yW2tleV0gPSBbdmFsdWVdO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGFjY3VtdWxhdG9yW2tleV0gPSBbXS5jb25jYXQoYWNjdW11bGF0b3Jba2V5XSwgdmFsdWUpO1xuXHRcdFx0fTtcblxuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gKGtleSwgdmFsdWUsIGFjY3VtdWxhdG9yKSB7XG5cdFx0XHRcdGlmIChhY2N1bXVsYXRvcltrZXldID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRhY2N1bXVsYXRvcltrZXldID0gdmFsdWU7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YWNjdW11bGF0b3Jba2V5XSA9IFtdLmNvbmNhdChhY2N1bXVsYXRvcltrZXldLCB2YWx1ZSk7XG5cdFx0XHR9O1xuXHR9XG59XG5cbmZ1bmN0aW9uIGVuY29kZSh2YWx1ZSwgb3B0cykge1xuXHRpZiAob3B0cy5lbmNvZGUpIHtcblx0XHRyZXR1cm4gb3B0cy5zdHJpY3QgPyBzdHJpY3RVcmlFbmNvZGUodmFsdWUpIDogZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcblx0fVxuXG5cdHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24ga2V5c1NvcnRlcihpbnB1dCkge1xuXHRpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcblx0XHRyZXR1cm4gaW5wdXQuc29ydCgpO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcpIHtcblx0XHRyZXR1cm4ga2V5c1NvcnRlcihPYmplY3Qua2V5cyhpbnB1dCkpLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcblx0XHRcdHJldHVybiBOdW1iZXIoYSkgLSBOdW1iZXIoYik7XG5cdFx0fSkubWFwKGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdHJldHVybiBpbnB1dFtrZXldO1xuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIGlucHV0O1xufVxuXG5mdW5jdGlvbiBleHRyYWN0KHN0cikge1xuXHR2YXIgcXVlcnlTdGFydCA9IHN0ci5pbmRleE9mKCc/Jyk7XG5cdGlmIChxdWVyeVN0YXJ0ID09PSAtMSkge1xuXHRcdHJldHVybiAnJztcblx0fVxuXHRyZXR1cm4gc3RyLnNsaWNlKHF1ZXJ5U3RhcnQgKyAxKTtcbn1cblxuZnVuY3Rpb24gcGFyc2Uoc3RyLCBvcHRzKSB7XG5cdG9wdHMgPSBvYmplY3RBc3NpZ24oe2FycmF5Rm9ybWF0OiAnbm9uZSd9LCBvcHRzKTtcblxuXHR2YXIgZm9ybWF0dGVyID0gcGFyc2VyRm9yQXJyYXlGb3JtYXQob3B0cyk7XG5cblx0Ly8gQ3JlYXRlIGFuIG9iamVjdCB3aXRoIG5vIHByb3RvdHlwZVxuXHQvLyBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL3F1ZXJ5LXN0cmluZy9pc3N1ZXMvNDdcblx0dmFyIHJldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cblx0aWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG5cdFx0cmV0dXJuIHJldDtcblx0fVxuXG5cdHN0ciA9IHN0ci50cmltKCkucmVwbGFjZSgvXls/IyZdLywgJycpO1xuXG5cdGlmICghc3RyKSB7XG5cdFx0cmV0dXJuIHJldDtcblx0fVxuXG5cdHN0ci5zcGxpdCgnJicpLmZvckVhY2goZnVuY3Rpb24gKHBhcmFtKSB7XG5cdFx0dmFyIHBhcnRzID0gcGFyYW0ucmVwbGFjZSgvXFwrL2csICcgJykuc3BsaXQoJz0nKTtcblx0XHQvLyBGaXJlZm94IChwcmUgNDApIGRlY29kZXMgYCUzRGAgdG8gYD1gXG5cdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9xdWVyeS1zdHJpbmcvcHVsbC8zN1xuXHRcdHZhciBrZXkgPSBwYXJ0cy5zaGlmdCgpO1xuXHRcdHZhciB2YWwgPSBwYXJ0cy5sZW5ndGggPiAwID8gcGFydHMuam9pbignPScpIDogdW5kZWZpbmVkO1xuXG5cdFx0Ly8gbWlzc2luZyBgPWAgc2hvdWxkIGJlIGBudWxsYDpcblx0XHQvLyBodHRwOi8vdzMub3JnL1RSLzIwMTIvV0QtdXJsLTIwMTIwNTI0LyNjb2xsZWN0LXVybC1wYXJhbWV0ZXJzXG5cdFx0dmFsID0gdmFsID09PSB1bmRlZmluZWQgPyBudWxsIDogZGVjb2RlQ29tcG9uZW50KHZhbCk7XG5cblx0XHRmb3JtYXR0ZXIoZGVjb2RlQ29tcG9uZW50KGtleSksIHZhbCwgcmV0KTtcblx0fSk7XG5cblx0cmV0dXJuIE9iamVjdC5rZXlzKHJldCkuc29ydCgpLnJlZHVjZShmdW5jdGlvbiAocmVzdWx0LCBrZXkpIHtcblx0XHR2YXIgdmFsID0gcmV0W2tleV07XG5cdFx0aWYgKEJvb2xlYW4odmFsKSAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWwpKSB7XG5cdFx0XHQvLyBTb3J0IG9iamVjdCBrZXlzLCBub3QgdmFsdWVzXG5cdFx0XHRyZXN1bHRba2V5XSA9IGtleXNTb3J0ZXIodmFsKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVzdWx0W2tleV0gPSB2YWw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSwgT2JqZWN0LmNyZWF0ZShudWxsKSk7XG59XG5cbmV4cG9ydHMuZXh0cmFjdCA9IGV4dHJhY3Q7XG5leHBvcnRzLnBhcnNlID0gcGFyc2U7XG5cbmV4cG9ydHMuc3RyaW5naWZ5ID0gZnVuY3Rpb24gKG9iaiwgb3B0cykge1xuXHR2YXIgZGVmYXVsdHMgPSB7XG5cdFx0ZW5jb2RlOiB0cnVlLFxuXHRcdHN0cmljdDogdHJ1ZSxcblx0XHRhcnJheUZvcm1hdDogJ25vbmUnXG5cdH07XG5cblx0b3B0cyA9IG9iamVjdEFzc2lnbihkZWZhdWx0cywgb3B0cyk7XG5cblx0aWYgKG9wdHMuc29ydCA9PT0gZmFsc2UpIHtcblx0XHRvcHRzLnNvcnQgPSBmdW5jdGlvbiAoKSB7fTtcblx0fVxuXG5cdHZhciBmb3JtYXR0ZXIgPSBlbmNvZGVyRm9yQXJyYXlGb3JtYXQob3B0cyk7XG5cblx0cmV0dXJuIG9iaiA/IE9iamVjdC5rZXlzKG9iaikuc29ydChvcHRzLnNvcnQpLm1hcChmdW5jdGlvbiAoa2V5KSB7XG5cdFx0dmFyIHZhbCA9IG9ialtrZXldO1xuXG5cdFx0aWYgKHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0fVxuXG5cdFx0aWYgKHZhbCA9PT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIGVuY29kZShrZXksIG9wdHMpO1xuXHRcdH1cblxuXHRcdGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcblx0XHRcdHZhciByZXN1bHQgPSBbXTtcblxuXHRcdFx0dmFsLnNsaWNlKCkuZm9yRWFjaChmdW5jdGlvbiAodmFsMikge1xuXHRcdFx0XHRpZiAodmFsMiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmVzdWx0LnB1c2goZm9ybWF0dGVyKGtleSwgdmFsMiwgcmVzdWx0Lmxlbmd0aCkpO1xuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiByZXN1bHQuam9pbignJicpO1xuXHRcdH1cblxuXHRcdHJldHVybiBlbmNvZGUoa2V5LCBvcHRzKSArICc9JyArIGVuY29kZSh2YWwsIG9wdHMpO1xuXHR9KS5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcblx0XHRyZXR1cm4geC5sZW5ndGggPiAwO1xuXHR9KS5qb2luKCcmJykgOiAnJztcbn07XG5cbmV4cG9ydHMucGFyc2VVcmwgPSBmdW5jdGlvbiAoc3RyLCBvcHRzKSB7XG5cdHJldHVybiB7XG5cdFx0dXJsOiBzdHIuc3BsaXQoJz8nKVswXSB8fCAnJyxcblx0XHRxdWVyeTogcGFyc2UoZXh0cmFjdChzdHIpLCBvcHRzKVxuXHR9O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///27\n")},28:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var zhTw = moment.defineLocale('zh-tw', {\n        months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n        monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n        weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n        weekdaysMin : '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY/MM/DD',\n            LL : 'YYYY年M月D日',\n            LLL : 'YYYY年M月D日 HH:mm',\n            LLLL : 'YYYY年M月D日dddd HH:mm',\n            l : 'YYYY/M/D',\n            ll : 'YYYY年M月D日',\n            lll : 'YYYY年M月D日 HH:mm',\n            llll : 'YYYY年M月D日dddd HH:mm'\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '中午') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar : {\n            sameDay : '[今天] LT',\n            nextDay : '[明天] LT',\n            nextWeek : '[下]dddd LT',\n            lastDay : '[昨天] LT',\n            lastWeek : '[上]dddd LT',\n            sameElse : 'L'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                case 'd' :\n                case 'D' :\n                case 'DDD' :\n                    return number + '日';\n                case 'M' :\n                    return number + '月';\n                case 'w' :\n                case 'W' :\n                    return number + '週';\n                default :\n                    return number;\n            }\n        },\n        relativeTime : {\n            future : '%s內',\n            past : '%s前',\n            s : '幾秒',\n            ss : '%d 秒',\n            m : '1 分鐘',\n            mm : '%d 分鐘',\n            h : '1 小時',\n            hh : '%d 小時',\n            d : '1 天',\n            dd : '%d 天',\n            M : '1 個月',\n            MM : '%d 個月',\n            y : '1 年',\n            yy : '%d 年'\n        }\n    });\n\n    return zhTw;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS96aC10dy5qcz85MGVhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwiZmlsZSI6IjI4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgemhUdyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3poLXR3Jywge1xuICAgICAgICBtb250aHMgOiAn5LiA5pyIX+S6jOaciF/kuInmnIhf5Zub5pyIX+S6lOaciF/lha3mnIhf5LiD5pyIX+WFq+aciF/kuZ3mnIhf5Y2B5pyIX+WNgeS4gOaciF/ljYHkuozmnIgnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJzHmnIhfMuaciF8z5pyIXzTmnIhfNeaciF825pyIXzfmnIhfOOaciF855pyIXzEw5pyIXzEx5pyIXzEy5pyIJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6ICfmmJ/mnJ/ml6Vf5pif5pyf5LiAX+aYn+acn+S6jF/mmJ/mnJ/kuIlf5pif5pyf5ZubX+aYn+acn+S6lF/mmJ/mnJ/lha0nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAn6YCx5pelX+mAseS4gF/pgLHkuoxf6YCx5LiJX+mAseWbm1/pgLHkupRf6YCx5YWtJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICfml6Vf5LiAX+S6jF/kuIlf5ZubX+S6lF/lha0nLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnWVlZWS9NTS9ERCcsXG4gICAgICAgICAgICBMTCA6ICdZWVlZ5bm0TeaciETml6UnLFxuICAgICAgICAgICAgTExMIDogJ1lZWVnlubRN5pyIROaXpSBISDptbScsXG4gICAgICAgICAgICBMTExMIDogJ1lZWVnlubRN5pyIROaXpWRkZGQgSEg6bW0nLFxuICAgICAgICAgICAgbCA6ICdZWVlZL00vRCcsXG4gICAgICAgICAgICBsbCA6ICdZWVlZ5bm0TeaciETml6UnLFxuICAgICAgICAgICAgbGxsIDogJ1lZWVnlubRN5pyIROaXpSBISDptbScsXG4gICAgICAgICAgICBsbGxsIDogJ1lZWVnlubRN5pyIROaXpWRkZGQgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/lh4zmmah85pep5LiKfOS4iuWNiHzkuK3ljYh85LiL5Y2IfOaZmuS4ii8sXG4gICAgICAgIG1lcmlkaWVtSG91ciA6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICflh4zmmagnIHx8IG1lcmlkaWVtID09PSAn5pep5LiKJyB8fCBtZXJpZGllbSA9PT0gJ+S4iuWNiCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfkuK3ljYgnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTEgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+S4i+WNiCcgfHwgbWVyaWRpZW0gPT09ICfmmZrkuIonKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW0gOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICB2YXIgaG0gPSBob3VyICogMTAwICsgbWludXRlO1xuICAgICAgICAgICAgaWYgKGhtIDwgNjAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICflh4zmmagnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDkwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5pep5LiKJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCAxMTMwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfkuIrljYgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDEyMzApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+S4reWNiCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgMTgwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5LiL5Y2IJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfmmZrkuIonO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgOiAnW+S7iuWkqV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICdb5piO5aSpXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdb5LiLXWRkZGQgTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdb5pio5aSpXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlayA6ICdb5LiKXWRkZGQgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KOaXpXzmnIh86YCxKS8sXG4gICAgICAgIG9yZGluYWwgOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZCcgOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0QnIDpcbiAgICAgICAgICAgICAgICBjYXNlICdEREQnIDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfml6UnO1xuICAgICAgICAgICAgICAgIGNhc2UgJ00nIDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfmnIgnO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3cnIDpcbiAgICAgICAgICAgICAgICBjYXNlICdXJyA6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn6YCxJztcbiAgICAgICAgICAgICAgICBkZWZhdWx0IDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJyVz5YWnJyxcbiAgICAgICAgICAgIHBhc3QgOiAnJXPliY0nLFxuICAgICAgICAgICAgcyA6ICflub7np5InLFxuICAgICAgICAgICAgc3MgOiAnJWQg56eSJyxcbiAgICAgICAgICAgIG0gOiAnMSDliIbpkJgnLFxuICAgICAgICAgICAgbW0gOiAnJWQg5YiG6ZCYJyxcbiAgICAgICAgICAgIGggOiAnMSDlsI/mmYInLFxuICAgICAgICAgICAgaGggOiAnJWQg5bCP5pmCJyxcbiAgICAgICAgICAgIGQgOiAnMSDlpKknLFxuICAgICAgICAgICAgZGQgOiAnJWQg5aSpJyxcbiAgICAgICAgICAgIE0gOiAnMSDlgIvmnIgnLFxuICAgICAgICAgICAgTU0gOiAnJWQg5YCL5pyIJyxcbiAgICAgICAgICAgIHkgOiAnMSDlubQnLFxuICAgICAgICAgICAgeXkgOiAnJWQg5bm0J1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gemhUdztcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///28\n")},29:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var zhHk = moment.defineLocale('zh-hk', {\n        months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n        monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n        weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n        weekdaysMin : '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY/MM/DD',\n            LL : 'YYYY年M月D日',\n            LLL : 'YYYY年M月D日 HH:mm',\n            LLLL : 'YYYY年M月D日dddd HH:mm',\n            l : 'YYYY/M/D',\n            ll : 'YYYY年M月D日',\n            lll : 'YYYY年M月D日 HH:mm',\n            llll : 'YYYY年M月D日dddd HH:mm'\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '中午') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar : {\n            sameDay : '[今天]LT',\n            nextDay : '[明天]LT',\n            nextWeek : '[下]ddddLT',\n            lastDay : '[昨天]LT',\n            lastWeek : '[上]ddddLT',\n            sameElse : 'L'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                case 'd' :\n                case 'D' :\n                case 'DDD' :\n                    return number + '日';\n                case 'M' :\n                    return number + '月';\n                case 'w' :\n                case 'W' :\n                    return number + '週';\n                default :\n                    return number;\n            }\n        },\n        relativeTime : {\n            future : '%s內',\n            past : '%s前',\n            s : '幾秒',\n            ss : '%d 秒',\n            m : '1 分鐘',\n            mm : '%d 分鐘',\n            h : '1 小時',\n            hh : '%d 小時',\n            d : '1 天',\n            dd : '%d 天',\n            M : '1 個月',\n            MM : '%d 個月',\n            y : '1 年',\n            yy : '%d 年'\n        }\n    });\n\n    return zhHk;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS96aC1oay5qcz80OWFiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwiZmlsZSI6IjI5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgemhIayA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3poLWhrJywge1xuICAgICAgICBtb250aHMgOiAn5LiA5pyIX+S6jOaciF/kuInmnIhf5Zub5pyIX+S6lOaciF/lha3mnIhf5LiD5pyIX+WFq+aciF/kuZ3mnIhf5Y2B5pyIX+WNgeS4gOaciF/ljYHkuozmnIgnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJzHmnIhfMuaciF8z5pyIXzTmnIhfNeaciF825pyIXzfmnIhfOOaciF855pyIXzEw5pyIXzEx5pyIXzEy5pyIJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6ICfmmJ/mnJ/ml6Vf5pif5pyf5LiAX+aYn+acn+S6jF/mmJ/mnJ/kuIlf5pif5pyf5ZubX+aYn+acn+S6lF/mmJ/mnJ/lha0nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAn6YCx5pelX+mAseS4gF/pgLHkuoxf6YCx5LiJX+mAseWbm1/pgLHkupRf6YCx5YWtJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICfml6Vf5LiAX+S6jF/kuIlf5ZubX+S6lF/lha0nLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnWVlZWS9NTS9ERCcsXG4gICAgICAgICAgICBMTCA6ICdZWVlZ5bm0TeaciETml6UnLFxuICAgICAgICAgICAgTExMIDogJ1lZWVnlubRN5pyIROaXpSBISDptbScsXG4gICAgICAgICAgICBMTExMIDogJ1lZWVnlubRN5pyIROaXpWRkZGQgSEg6bW0nLFxuICAgICAgICAgICAgbCA6ICdZWVlZL00vRCcsXG4gICAgICAgICAgICBsbCA6ICdZWVlZ5bm0TeaciETml6UnLFxuICAgICAgICAgICAgbGxsIDogJ1lZWVnlubRN5pyIROaXpSBISDptbScsXG4gICAgICAgICAgICBsbGxsIDogJ1lZWVnlubRN5pyIROaXpWRkZGQgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/lh4zmmah85pep5LiKfOS4iuWNiHzkuK3ljYh85LiL5Y2IfOaZmuS4ii8sXG4gICAgICAgIG1lcmlkaWVtSG91ciA6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICflh4zmmagnIHx8IG1lcmlkaWVtID09PSAn5pep5LiKJyB8fCBtZXJpZGllbSA9PT0gJ+S4iuWNiCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfkuK3ljYgnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTEgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+S4i+WNiCcgfHwgbWVyaWRpZW0gPT09ICfmmZrkuIonKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW0gOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICB2YXIgaG0gPSBob3VyICogMTAwICsgbWludXRlO1xuICAgICAgICAgICAgaWYgKGhtIDwgNjAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICflh4zmmagnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDkwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5pep5LiKJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCAxMTMwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfkuIrljYgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDEyMzApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+S4reWNiCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgMTgwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5LiL5Y2IJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfmmZrkuIonO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgOiAnW+S7iuWkqV1MVCcsXG4gICAgICAgICAgICBuZXh0RGF5IDogJ1vmmI7lpKldTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnW+S4i11kZGRkTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdb5pio5aSpXUxUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogJ1vkuIpdZGRkZExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSjml6V85pyIfOmAsSkvLFxuICAgICAgICBvcmRpbmFsIDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2QnIDpcbiAgICAgICAgICAgICAgICBjYXNlICdEJyA6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJyA6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn5pelJztcbiAgICAgICAgICAgICAgICBjYXNlICdNJyA6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn5pyIJztcbiAgICAgICAgICAgICAgICBjYXNlICd3JyA6XG4gICAgICAgICAgICAgICAgY2FzZSAnVycgOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+mAsSc7XG4gICAgICAgICAgICAgICAgZGVmYXVsdCA6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICclc+WFpycsXG4gICAgICAgICAgICBwYXN0IDogJyVz5YmNJyxcbiAgICAgICAgICAgIHMgOiAn5bm+56eSJyxcbiAgICAgICAgICAgIHNzIDogJyVkIOenkicsXG4gICAgICAgICAgICBtIDogJzEg5YiG6ZCYJyxcbiAgICAgICAgICAgIG1tIDogJyVkIOWIhumQmCcsXG4gICAgICAgICAgICBoIDogJzEg5bCP5pmCJyxcbiAgICAgICAgICAgIGhoIDogJyVkIOWwj+aZgicsXG4gICAgICAgICAgICBkIDogJzEg5aSpJyxcbiAgICAgICAgICAgIGRkIDogJyVkIOWkqScsXG4gICAgICAgICAgICBNIDogJzEg5YCL5pyIJyxcbiAgICAgICAgICAgIE1NIDogJyVkIOWAi+aciCcsXG4gICAgICAgICAgICB5IDogJzEg5bm0JyxcbiAgICAgICAgICAgIHl5IDogJyVkIOW5tCdcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHpoSGs7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///29\n")},3:function(module,__webpack_exports__,__webpack_require__){"use strict";eval("/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return Animator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return BehaviorInstruction; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"c\", function() { return BehaviorPropertyObserver; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"d\", function() { return BindableProperty; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"e\", function() { return BindingLanguage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"f\", function() { return BoundViewFactory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"g\", function() { return CompositionEngine; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"h\", function() { return CompositionTransaction; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"i\", function() { return CompositionTransactionNotifier; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"j\", function() { return CompositionTransactionOwnershipToken; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"k\", function() { return Controller; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"l\", function() { return ConventionalViewStrategy; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"m\", function() { return ElementConfigResource; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"n\", function() { return ElementEvents; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"o\", function() { return HtmlBehaviorResource; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"p\", function() { return InlineViewStrategy; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"q\", function() { return ModuleAnalyzer; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"r\", function() { return NoViewStrategy; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"s\", function() { return PassThroughSlot; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"t\", function() { return RelativeViewStrategy; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"u\", function() { return ResourceDescription; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"v\", function() { return ResourceLoadContext; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"w\", function() { return ResourceModule; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"x\", function() { return ShadowDOM; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"y\", function() { return ShadowSlot; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"z\", function() { return SlotCustomAttribute; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"A\", function() { return StaticViewStrategy; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"B\", function() { return SwapStrategies; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"C\", function() { return TargetInstruction; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"D\", function() { return TemplateRegistryViewStrategy; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"E\", function() { return TemplatingEngine; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"F\", function() { return View; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"G\", function() { return ViewCompileInstruction; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"H\", function() { return ViewCompiler; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"I\", function() { return ViewEngine; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"J\", function() { return ViewEngineHooksResource; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"K\", function() { return ViewFactory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"L\", function() { return ViewLocator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"M\", function() { return ViewResources; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"N\", function() { return ViewSlot; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"O\", function() { return _hyphenate; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"P\", function() { return _isAllWhitespace; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Q\", function() { return animationEvent; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"R\", function() { return behavior; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"S\", function() { return bindable; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"T\", function() { return child; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"U\", function() { return children; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"V\", function() { return containerless; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"W\", function() { return customAttribute; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"X\", function() { return customElement; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Y\", function() { return dynamicOptions; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Z\", function() { return elementConfig; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Aa\", function() { return inlineView; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Ba\", function() { return noView; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Ca\", function() { return processAttributes; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Da\", function() { return processContent; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Ea\", function() { return resource; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Fa\", function() { return templateController; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Ga\", function() { return useShadowDOM; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Ha\", function() { return useView; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Ia\", function() { return useViewStrategy; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Ja\", function() { return validateBehaviorName; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Ka\", function() { return view; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"La\", function() { return viewEngineHooks; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Ma\", function() { return viewResources; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Na\", function() { return viewStrategy; });\n/* harmony import */ var aurelia_pal__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0);\n/* harmony import */ var aurelia_loader__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(8);\n/* harmony import */ var aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4);\n/* harmony import */ var aurelia_path__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7);\n/* harmony import */ var aurelia_logging__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(5);\n/* harmony import */ var aurelia_binding__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(1);\n/* harmony import */ var aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(6);\n/* harmony import */ var aurelia_task_queue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(10);\n\n\n\n\n\n\n\n\n\nvar ElementEvents = (function () {\r\n    function ElementEvents(element) {\r\n        this.element = element;\r\n        this.subscriptions = {};\r\n    }\r\n    ElementEvents.prototype._enqueueHandler = function (handler) {\r\n        this.subscriptions[handler.eventName] = this.subscriptions[handler.eventName] || [];\r\n        this.subscriptions[handler.eventName].push(handler);\r\n    };\r\n    ElementEvents.prototype._dequeueHandler = function (handler) {\r\n        var index;\r\n        var subscriptions = this.subscriptions[handler.eventName];\r\n        if (subscriptions) {\r\n            index = subscriptions.indexOf(handler);\r\n            if (index > -1) {\r\n                subscriptions.splice(index, 1);\r\n            }\r\n        }\r\n        return handler;\r\n    };\r\n    ElementEvents.prototype.publish = function (eventName, detail, bubbles, cancelable) {\r\n        if (detail === void 0) { detail = {}; }\r\n        if (bubbles === void 0) { bubbles = true; }\r\n        if (cancelable === void 0) { cancelable = true; }\r\n        var event = aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* DOM */ \"b\"].createCustomEvent(eventName, { cancelable: cancelable, bubbles: bubbles, detail: detail });\r\n        this.element.dispatchEvent(event);\r\n    };\r\n    ElementEvents.prototype.subscribe = function (eventName, handler, captureOrOptions) {\r\n        if (typeof handler === 'function') {\r\n            if (captureOrOptions === undefined) {\r\n                captureOrOptions = ElementEvents.defaultListenerOptions;\r\n            }\r\n            var eventHandler = new EventHandlerImpl(this, eventName, handler, captureOrOptions, false);\r\n            return eventHandler;\r\n        }\r\n        return undefined;\r\n    };\r\n    ElementEvents.prototype.subscribeOnce = function (eventName, handler, captureOrOptions) {\r\n        if (typeof handler === 'function') {\r\n            if (captureOrOptions === undefined) {\r\n                captureOrOptions = ElementEvents.defaultListenerOptions;\r\n            }\r\n            var eventHandler = new EventHandlerImpl(this, eventName, handler, captureOrOptions, true);\r\n            return eventHandler;\r\n        }\r\n        return undefined;\r\n    };\r\n    ElementEvents.prototype.dispose = function (eventName) {\r\n        if (eventName && typeof eventName === 'string') {\r\n            var subscriptions = this.subscriptions[eventName];\r\n            if (subscriptions) {\r\n                while (subscriptions.length) {\r\n                    var subscription = subscriptions.pop();\r\n                    if (subscription) {\r\n                        subscription.dispose();\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        else {\r\n            this.disposeAll();\r\n        }\r\n    };\r\n    ElementEvents.prototype.disposeAll = function () {\r\n        for (var key in this.subscriptions) {\r\n            this.dispose(key);\r\n        }\r\n    };\r\n    ElementEvents.defaultListenerOptions = true;\r\n    return ElementEvents;\r\n}());\r\nvar EventHandlerImpl = (function () {\r\n    function EventHandlerImpl(owner, eventName, handler, captureOrOptions, once) {\r\n        this.owner = owner;\r\n        this.eventName = eventName;\r\n        this.handler = handler;\r\n        this.capture = typeof captureOrOptions === 'boolean' ? captureOrOptions : captureOrOptions.capture;\r\n        this.bubbles = !this.capture;\r\n        this.captureOrOptions = captureOrOptions;\r\n        this.once = once;\r\n        owner.element.addEventListener(eventName, this, captureOrOptions);\r\n        owner._enqueueHandler(this);\r\n    }\r\n    EventHandlerImpl.prototype.handleEvent = function (e) {\r\n        var fn = this.handler;\r\n        fn(e);\r\n        if (this.once) {\r\n            this.dispose();\r\n        }\r\n    };\r\n    EventHandlerImpl.prototype.dispose = function () {\r\n        this.owner.element.removeEventListener(this.eventName, this, this.captureOrOptions);\r\n        this.owner._dequeueHandler(this);\r\n        this.owner = this.handler = null;\r\n    };\r\n    return EventHandlerImpl;\r\n}());\n\nvar ResourceLoadContext = (function () {\r\n    function ResourceLoadContext() {\r\n        this.dependencies = {};\r\n    }\r\n    ResourceLoadContext.prototype.addDependency = function (url) {\r\n        this.dependencies[url] = true;\r\n    };\r\n    ResourceLoadContext.prototype.hasDependency = function (url) {\r\n        return url in this.dependencies;\r\n    };\r\n    return ResourceLoadContext;\r\n}());\r\nvar ViewCompileInstruction = (function () {\r\n    function ViewCompileInstruction(targetShadowDOM, compileSurrogate) {\r\n        if (targetShadowDOM === void 0) { targetShadowDOM = false; }\r\n        if (compileSurrogate === void 0) { compileSurrogate = false; }\r\n        this.targetShadowDOM = targetShadowDOM;\r\n        this.compileSurrogate = compileSurrogate;\r\n        this.associatedModuleId = null;\r\n    }\r\n    ViewCompileInstruction.normal = new ViewCompileInstruction();\r\n    return ViewCompileInstruction;\r\n}());\r\nvar BehaviorInstruction = (function () {\r\n    function BehaviorInstruction() {\r\n    }\r\n    BehaviorInstruction.enhance = function () {\r\n        var instruction = new BehaviorInstruction();\r\n        instruction.enhance = true;\r\n        return instruction;\r\n    };\r\n    BehaviorInstruction.unitTest = function (type, attributes) {\r\n        var instruction = new BehaviorInstruction();\r\n        instruction.type = type;\r\n        instruction.attributes = attributes || {};\r\n        return instruction;\r\n    };\r\n    BehaviorInstruction.element = function (node, type) {\r\n        var instruction = new BehaviorInstruction();\r\n        instruction.type = type;\r\n        instruction.attributes = {};\r\n        instruction.anchorIsContainer = !(node.hasAttribute('containerless') || type.containerless);\r\n        instruction.initiatedByBehavior = true;\r\n        return instruction;\r\n    };\r\n    BehaviorInstruction.attribute = function (attrName, type) {\r\n        var instruction = new BehaviorInstruction();\r\n        instruction.attrName = attrName;\r\n        instruction.type = type || null;\r\n        instruction.attributes = {};\r\n        return instruction;\r\n    };\r\n    BehaviorInstruction.dynamic = function (host, viewModel, viewFactory) {\r\n        var instruction = new BehaviorInstruction();\r\n        instruction.host = host;\r\n        instruction.viewModel = viewModel;\r\n        instruction.viewFactory = viewFactory;\r\n        instruction.inheritBindingContext = true;\r\n        return instruction;\r\n    };\r\n    BehaviorInstruction.normal = new BehaviorInstruction();\r\n    return BehaviorInstruction;\r\n}());\r\nvar biProto = BehaviorInstruction.prototype;\r\nbiProto.initiatedByBehavior = false;\r\nbiProto.enhance = false;\r\nbiProto.partReplacements = null;\r\nbiProto.viewFactory = null;\r\nbiProto.originalAttrName = null;\r\nbiProto.skipContentProcessing = false;\r\nbiProto.contentFactory = null;\r\nbiProto.viewModel = null;\r\nbiProto.anchorIsContainer = false;\r\nbiProto.host = null;\r\nbiProto.attributes = null;\r\nbiProto.type = null;\r\nbiProto.attrName = null;\r\nbiProto.inheritBindingContext = false;\r\nvar TargetInstruction = (function () {\r\n    function TargetInstruction() {\r\n    }\r\n    TargetInstruction.shadowSlot = function (parentInjectorId) {\r\n        var instruction = new TargetInstruction();\r\n        instruction.parentInjectorId = parentInjectorId;\r\n        instruction.shadowSlot = true;\r\n        return instruction;\r\n    };\r\n    TargetInstruction.contentExpression = function (expression) {\r\n        var instruction = new TargetInstruction();\r\n        instruction.contentExpression = expression;\r\n        return instruction;\r\n    };\r\n    TargetInstruction.letElement = function (expressions) {\r\n        var instruction = new TargetInstruction();\r\n        instruction.expressions = expressions;\r\n        instruction.letElement = true;\r\n        return instruction;\r\n    };\r\n    TargetInstruction.lifting = function (parentInjectorId, liftingInstruction) {\r\n        var instruction = new TargetInstruction();\r\n        instruction.parentInjectorId = parentInjectorId;\r\n        instruction.expressions = TargetInstruction.noExpressions;\r\n        instruction.behaviorInstructions = [liftingInstruction];\r\n        instruction.viewFactory = liftingInstruction.viewFactory;\r\n        instruction.providers = [liftingInstruction.type.target];\r\n        instruction.lifting = true;\r\n        return instruction;\r\n    };\r\n    TargetInstruction.normal = function (injectorId, parentInjectorId, providers, behaviorInstructions, expressions, elementInstruction) {\r\n        var instruction = new TargetInstruction();\r\n        instruction.injectorId = injectorId;\r\n        instruction.parentInjectorId = parentInjectorId;\r\n        instruction.providers = providers;\r\n        instruction.behaviorInstructions = behaviorInstructions;\r\n        instruction.expressions = expressions;\r\n        instruction.anchorIsContainer = elementInstruction ? elementInstruction.anchorIsContainer : true;\r\n        instruction.elementInstruction = elementInstruction;\r\n        return instruction;\r\n    };\r\n    TargetInstruction.surrogate = function (providers, behaviorInstructions, expressions, values) {\r\n        var instruction = new TargetInstruction();\r\n        instruction.expressions = expressions;\r\n        instruction.behaviorInstructions = behaviorInstructions;\r\n        instruction.providers = providers;\r\n        instruction.values = values;\r\n        return instruction;\r\n    };\r\n    TargetInstruction.noExpressions = Object.freeze([]);\r\n    return TargetInstruction;\r\n}());\r\nvar tiProto = TargetInstruction.prototype;\r\ntiProto.injectorId = null;\r\ntiProto.parentInjectorId = null;\r\ntiProto.shadowSlot = false;\r\ntiProto.slotName = null;\r\ntiProto.slotFallbackFactory = null;\r\ntiProto.contentExpression = null;\r\ntiProto.letElement = false;\r\ntiProto.expressions = null;\r\ntiProto.expressions = null;\r\ntiProto.providers = null;\r\ntiProto.viewFactory = null;\r\ntiProto.anchorIsContainer = false;\r\ntiProto.elementInstruction = null;\r\ntiProto.lifting = false;\r\ntiProto.values = null;\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nfunction __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\n\nvar capitalMatcher = /([A-Z])/g;\r\nfunction addHyphenAndLower(char) {\r\n    return '-' + char.toLowerCase();\r\n}\r\nfunction _hyphenate(name) {\r\n    return (name.charAt(0).toLowerCase() + name.slice(1)).replace(capitalMatcher, addHyphenAndLower);\r\n}\r\nfunction _isAllWhitespace(node) {\r\n    return !(node.auInterpolationTarget || (/[^\\t\\n\\r ]/.test(node.textContent)));\r\n}\n\nvar BehaviorPropertyObserver = (function () {\r\n    function BehaviorPropertyObserver(taskQueue, obj, propertyName, selfSubscriber, initialValue) {\r\n        this.taskQueue = taskQueue;\r\n        this.obj = obj;\r\n        this.propertyName = propertyName;\r\n        this.notqueued = true;\r\n        this.publishing = false;\r\n        this.selfSubscriber = selfSubscriber;\r\n        this.currentValue = this.oldValue = initialValue;\r\n    }\r\n    BehaviorPropertyObserver.prototype.getValue = function () {\r\n        return this.currentValue;\r\n    };\r\n    BehaviorPropertyObserver.prototype.setValue = function (newValue) {\r\n        var oldValue = this.currentValue;\r\n        if (!Object.is(newValue, oldValue)) {\r\n            this.oldValue = oldValue;\r\n            this.currentValue = newValue;\r\n            if (this.publishing && this.notqueued) {\r\n                if (this.taskQueue.flushing) {\r\n                    this.call();\r\n                }\r\n                else {\r\n                    this.notqueued = false;\r\n                    this.taskQueue.queueMicroTask(this);\r\n                }\r\n            }\r\n        }\r\n    };\r\n    BehaviorPropertyObserver.prototype.call = function () {\r\n        var oldValue = this.oldValue;\r\n        var newValue = this.currentValue;\r\n        this.notqueued = true;\r\n        if (Object.is(newValue, oldValue)) {\r\n            return;\r\n        }\r\n        if (this.selfSubscriber) {\r\n            this.selfSubscriber(newValue, oldValue);\r\n        }\r\n        this.callSubscribers(newValue, oldValue);\r\n        this.oldValue = newValue;\r\n    };\r\n    BehaviorPropertyObserver.prototype.callSubscribers = function (newValue, oldValue) {\r\n        throw new Error('Method not implemented.');\r\n    };\r\n    BehaviorPropertyObserver.prototype.subscribe = function (context, callable) {\r\n        this.addSubscriber(context, callable);\r\n    };\r\n    BehaviorPropertyObserver.prototype.addSubscriber = function (context, callable) {\r\n        throw new Error('Method not implemented.');\r\n    };\r\n    BehaviorPropertyObserver.prototype.unsubscribe = function (context, callable) {\r\n        this.removeSubscriber(context, callable);\r\n    };\r\n    BehaviorPropertyObserver.prototype.removeSubscriber = function (context, callable) {\r\n        throw new Error('Method not implemented.');\r\n    };\r\n    BehaviorPropertyObserver = __decorate([\r\n        Object(aurelia_binding__WEBPACK_IMPORTED_MODULE_5__[\"subscriberCollection\"])()\r\n    ], BehaviorPropertyObserver);\r\n    return BehaviorPropertyObserver;\r\n}());\n\nfunction getObserver(instance, name) {\r\n    var lookup = instance.__observers__;\r\n    if (lookup === undefined) {\r\n        var ctor = Object.getPrototypeOf(instance).constructor;\r\n        var behavior = aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].get(aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].resource, ctor);\r\n        if (!behavior.isInitialized) {\r\n            behavior.initialize(aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_6__[/* Container */ \"b\"].instance || new aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_6__[/* Container */ \"b\"](), instance.constructor);\r\n        }\r\n        lookup = behavior.observerLocator.getOrCreateObserversLookup(instance);\r\n        behavior._ensurePropertiesDefined(instance, lookup);\r\n    }\r\n    return lookup[name];\r\n}\r\nvar BindableProperty = (function () {\r\n    function BindableProperty(nameOrConfig) {\r\n        if (typeof nameOrConfig === 'string') {\r\n            this.name = nameOrConfig;\r\n        }\r\n        else {\r\n            Object.assign(this, nameOrConfig);\r\n        }\r\n        this.attribute = this.attribute || _hyphenate(this.name);\r\n        var defaultBindingMode = this.defaultBindingMode;\r\n        if (defaultBindingMode === null || defaultBindingMode === undefined) {\r\n            this.defaultBindingMode = aurelia_binding__WEBPACK_IMPORTED_MODULE_5__[\"bindingMode\"].oneWay;\r\n        }\r\n        else if (typeof defaultBindingMode === 'string') {\r\n            this.defaultBindingMode = aurelia_binding__WEBPACK_IMPORTED_MODULE_5__[\"bindingMode\"][defaultBindingMode] || aurelia_binding__WEBPACK_IMPORTED_MODULE_5__[\"bindingMode\"].oneWay;\r\n        }\r\n        this.changeHandler = this.changeHandler || null;\r\n        this.owner = null;\r\n        this.descriptor = null;\r\n    }\r\n    BindableProperty.prototype.registerWith = function (target, behavior, descriptor) {\r\n        behavior.properties.push(this);\r\n        behavior.attributes[this.attribute] = this;\r\n        this.owner = behavior;\r\n        if (descriptor) {\r\n            this.descriptor = descriptor;\r\n            return this._configureDescriptor(descriptor);\r\n        }\r\n        return undefined;\r\n    };\r\n    BindableProperty.prototype._configureDescriptor = function (descriptor) {\r\n        var name = this.name;\r\n        descriptor.configurable = true;\r\n        descriptor.enumerable = true;\r\n        if ('initializer' in descriptor) {\r\n            this.defaultValue = descriptor.initializer;\r\n            delete descriptor.initializer;\r\n            delete descriptor.writable;\r\n        }\r\n        if ('value' in descriptor) {\r\n            this.defaultValue = descriptor.value;\r\n            delete descriptor.value;\r\n            delete descriptor.writable;\r\n        }\r\n        descriptor.get = function () {\r\n            return getObserver(this, name).getValue();\r\n        };\r\n        descriptor.set = function (value) {\r\n            getObserver(this, name).setValue(value);\r\n        };\r\n        descriptor.get.getObserver = function (obj) {\r\n            return getObserver(obj, name);\r\n        };\r\n        return descriptor;\r\n    };\r\n    BindableProperty.prototype.defineOn = function (target, behavior) {\r\n        var name = this.name;\r\n        var handlerName;\r\n        if (this.changeHandler === null) {\r\n            handlerName = name + 'Changed';\r\n            if (handlerName in target.prototype) {\r\n                this.changeHandler = handlerName;\r\n            }\r\n        }\r\n        if (this.descriptor === null) {\r\n            Object.defineProperty(target.prototype, name, this._configureDescriptor({}));\r\n        }\r\n    };\r\n    BindableProperty.prototype.createObserver = function (viewModel) {\r\n        var selfSubscriber = null;\r\n        var defaultValue = this.defaultValue;\r\n        var changeHandlerName = this.changeHandler;\r\n        var name = this.name;\r\n        var initialValue;\r\n        if (this.hasOptions) {\r\n            return undefined;\r\n        }\r\n        if (changeHandlerName in viewModel) {\r\n            if ('propertyChanged' in viewModel) {\r\n                selfSubscriber = function (newValue, oldValue) {\r\n                    viewModel[changeHandlerName](newValue, oldValue);\r\n                    viewModel.propertyChanged(name, newValue, oldValue);\r\n                };\r\n            }\r\n            else {\r\n                selfSubscriber = function (newValue, oldValue) { return viewModel[changeHandlerName](newValue, oldValue); };\r\n            }\r\n        }\r\n        else if ('propertyChanged' in viewModel) {\r\n            selfSubscriber = function (newValue, oldValue) { return viewModel.propertyChanged(name, newValue, oldValue); };\r\n        }\r\n        else if (changeHandlerName !== null) {\r\n            throw new Error(\"Change handler \".concat(changeHandlerName, \" was specified but not declared on the class.\"));\r\n        }\r\n        if (defaultValue !== undefined) {\r\n            initialValue = typeof defaultValue === 'function' ? defaultValue.call(viewModel) : defaultValue;\r\n        }\r\n        return new BehaviorPropertyObserver(this.owner.taskQueue, viewModel, this.name, selfSubscriber, initialValue);\r\n    };\r\n    BindableProperty.prototype._initialize = function (viewModel, observerLookup, attributes, behaviorHandlesBind, boundProperties) {\r\n        var selfSubscriber;\r\n        var observer;\r\n        var attribute;\r\n        var defaultValue = this.defaultValue;\r\n        if (this.isDynamic) {\r\n            for (var key in attributes) {\r\n                this._createDynamicProperty(viewModel, observerLookup, behaviorHandlesBind, key, attributes[key], boundProperties);\r\n            }\r\n        }\r\n        else if (!this.hasOptions) {\r\n            observer = observerLookup[this.name];\r\n            if (attributes !== null) {\r\n                selfSubscriber = observer.selfSubscriber;\r\n                attribute = attributes[this.attribute];\r\n                if (behaviorHandlesBind) {\r\n                    observer.selfSubscriber = null;\r\n                }\r\n                if (typeof attribute === 'string') {\r\n                    viewModel[this.name] = attribute;\r\n                    observer.call();\r\n                }\r\n                else if (attribute) {\r\n                    boundProperties.push({ observer: observer, binding: attribute.createBinding(viewModel) });\r\n                }\r\n                else if (defaultValue !== undefined) {\r\n                    observer.call();\r\n                }\r\n                observer.selfSubscriber = selfSubscriber;\r\n            }\r\n            observer.publishing = true;\r\n        }\r\n    };\r\n    BindableProperty.prototype._createDynamicProperty = function (viewModel, observerLookup, behaviorHandlesBind, name, attribute, boundProperties) {\r\n        var changeHandlerName = name + 'Changed';\r\n        var selfSubscriber = null;\r\n        var observer;\r\n        var info;\r\n        if (changeHandlerName in viewModel) {\r\n            if ('propertyChanged' in viewModel) {\r\n                selfSubscriber = function (newValue, oldValue) {\r\n                    viewModel[changeHandlerName](newValue, oldValue);\r\n                    viewModel.propertyChanged(name, newValue, oldValue);\r\n                };\r\n            }\r\n            else {\r\n                selfSubscriber = function (newValue, oldValue) { return viewModel[changeHandlerName](newValue, oldValue); };\r\n            }\r\n        }\r\n        else if ('propertyChanged' in viewModel) {\r\n            selfSubscriber = function (newValue, oldValue) { return viewModel.propertyChanged(name, newValue, oldValue); };\r\n        }\r\n        observer = observerLookup[name] = new BehaviorPropertyObserver(this.owner.taskQueue, viewModel, name, selfSubscriber);\r\n        Object.defineProperty(viewModel, name, {\r\n            configurable: true,\r\n            enumerable: true,\r\n            get: observer.getValue.bind(observer),\r\n            set: observer.setValue.bind(observer)\r\n        });\r\n        if (behaviorHandlesBind) {\r\n            observer.selfSubscriber = null;\r\n        }\r\n        if (typeof attribute === 'string') {\r\n            viewModel[name] = attribute;\r\n            observer.call();\r\n        }\r\n        else if (attribute) {\r\n            info = { observer: observer, binding: attribute.createBinding(viewModel) };\r\n            boundProperties.push(info);\r\n        }\r\n        observer.publishing = true;\r\n        observer.selfSubscriber = selfSubscriber;\r\n    };\r\n    return BindableProperty;\r\n}());\n\nvar ViewLocator = (function () {\r\n    function ViewLocator() {\r\n    }\r\n    ViewLocator.prototype.getViewStrategy = function (value) {\r\n        if (!value) {\r\n            return null;\r\n        }\r\n        if (typeof value === 'object' && 'getViewStrategy' in value) {\r\n            var origin_1 = aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* Origin */ \"a\"].get(value.constructor);\r\n            value = value.getViewStrategy();\r\n            if (typeof value === 'string') {\r\n                value = new RelativeViewStrategy(value);\r\n            }\r\n            viewStrategy.assert(value);\r\n            if (origin_1.moduleId) {\r\n                value.makeRelativeTo(origin_1.moduleId);\r\n            }\r\n            return value;\r\n        }\r\n        if (typeof value === 'string') {\r\n            value = new RelativeViewStrategy(value);\r\n        }\r\n        if (viewStrategy.validate(value)) {\r\n            return value;\r\n        }\r\n        if (typeof value !== 'function') {\r\n            value = value.constructor;\r\n        }\r\n        if ('$view' in value) {\r\n            var c = value.$view;\r\n            var view = void 0;\r\n            c = typeof c === 'function' ? c.call(value) : c;\r\n            if (c === null) {\r\n                view = new NoViewStrategy();\r\n            }\r\n            else {\r\n                view = c instanceof StaticViewStrategy ? c : new StaticViewStrategy(c);\r\n            }\r\n            aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].define(ViewLocator.viewStrategyMetadataKey, view, value);\r\n            return view;\r\n        }\r\n        var origin = aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* Origin */ \"a\"].get(value);\r\n        var strategy = aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].get(ViewLocator.viewStrategyMetadataKey, value);\r\n        if (!strategy) {\r\n            if (!origin.moduleId) {\r\n                throw new Error('Cannot determine default view strategy for object.\\n' + value);\r\n            }\r\n            strategy = this.createFallbackViewStrategy(origin);\r\n        }\r\n        else if (origin.moduleId) {\r\n            strategy.moduleId = origin.moduleId;\r\n        }\r\n        return strategy;\r\n    };\r\n    ViewLocator.prototype.createFallbackViewStrategy = function (origin) {\r\n        return new ConventionalViewStrategy(this, origin);\r\n    };\r\n    ViewLocator.prototype.convertOriginToViewUrl = function (origin) {\r\n        var moduleId = origin.moduleId;\r\n        var id = (moduleId.endsWith('.js') || moduleId.endsWith('.ts')) ? moduleId.substring(0, moduleId.length - 3) : moduleId;\r\n        return id + '.html';\r\n    };\r\n    ViewLocator.viewStrategyMetadataKey = 'aurelia:view-strategy';\r\n    return ViewLocator;\r\n}());\n\nfunction mi(name) {\r\n    throw new Error(\"BindingLanguage must implement \".concat(name, \"().\"));\r\n}\r\nvar BindingLanguage = (function () {\r\n    function BindingLanguage() {\r\n    }\r\n    BindingLanguage.prototype.inspectAttribute = function (resources, elementName, attrName, attrValue) {\r\n        mi('inspectAttribute');\r\n    };\r\n    BindingLanguage.prototype.createAttributeInstruction = function (resources, element, info, existingInstruction, context) {\r\n        mi('createAttributeInstruction');\r\n    };\r\n    BindingLanguage.prototype.createLetExpressions = function (resources, element) {\r\n        mi('createLetExpressions');\r\n    };\r\n    BindingLanguage.prototype.inspectTextContent = function (resources, value) {\r\n        mi('inspectTextContent');\r\n    };\r\n    return BindingLanguage;\r\n}());\n\nvar noNodes = Object.freeze([]);\r\nvar SlotCustomAttribute = (function () {\r\n    function SlotCustomAttribute(element) {\r\n        this.element = element;\r\n        this.element.auSlotAttribute = this;\r\n    }\r\n    SlotCustomAttribute.inject = function () {\r\n        return [aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* DOM */ \"b\"].Element];\r\n    };\r\n    SlotCustomAttribute.prototype.valueChanged = function (newValue, oldValue) { };\r\n    return SlotCustomAttribute;\r\n}());\r\nvar PassThroughSlot = (function () {\r\n    function PassThroughSlot(anchor, name, destinationName, fallbackFactory) {\r\n        this.anchor = anchor;\r\n        this.anchor.viewSlot = this;\r\n        this.name = name;\r\n        this.destinationName = destinationName;\r\n        this.fallbackFactory = fallbackFactory;\r\n        this.destinationSlot = null;\r\n        this.projections = 0;\r\n        this.contentView = null;\r\n        var attr = new SlotCustomAttribute(this.anchor);\r\n        attr.value = this.destinationName;\r\n    }\r\n    Object.defineProperty(PassThroughSlot.prototype, \"needsFallbackRendering\", {\r\n        get: function () {\r\n            return this.fallbackFactory && this.projections === 0;\r\n        },\r\n        enumerable: false,\r\n        configurable: true\r\n    });\r\n    PassThroughSlot.prototype.renderFallbackContent = function (view, nodes, projectionSource, index) {\r\n        if (this.contentView === null) {\r\n            this.contentView = this.fallbackFactory.create(this.ownerView.container);\r\n            this.contentView.bind(this.ownerView.bindingContext, this.ownerView.overrideContext);\r\n            var slots = Object.create(null);\r\n            slots[this.destinationSlot.name] = this.destinationSlot;\r\n            ShadowDOM.distributeView(this.contentView, slots, projectionSource, index, this.destinationSlot.name);\r\n        }\r\n    };\r\n    PassThroughSlot.prototype.passThroughTo = function (destinationSlot) {\r\n        this.destinationSlot = destinationSlot;\r\n    };\r\n    PassThroughSlot.prototype.addNode = function (view, node, projectionSource, index) {\r\n        if (this.contentView !== null) {\r\n            this.contentView.removeNodes();\r\n            this.contentView.detached();\r\n            this.contentView.unbind();\r\n            this.contentView = null;\r\n        }\r\n        if (node.viewSlot instanceof PassThroughSlot) {\r\n            node.viewSlot.passThroughTo(this);\r\n            return;\r\n        }\r\n        this.projections++;\r\n        this.destinationSlot.addNode(view, node, projectionSource, index);\r\n    };\r\n    PassThroughSlot.prototype.removeView = function (view, projectionSource) {\r\n        this.projections--;\r\n        this.destinationSlot.removeView(view, projectionSource);\r\n        if (this.needsFallbackRendering) {\r\n            this.renderFallbackContent(null, noNodes, projectionSource);\r\n        }\r\n    };\r\n    PassThroughSlot.prototype.removeAll = function (projectionSource) {\r\n        this.projections = 0;\r\n        this.destinationSlot.removeAll(projectionSource);\r\n        if (this.needsFallbackRendering) {\r\n            this.renderFallbackContent(null, noNodes, projectionSource);\r\n        }\r\n    };\r\n    PassThroughSlot.prototype.projectFrom = function (view, projectionSource) {\r\n        this.destinationSlot.projectFrom(view, projectionSource);\r\n    };\r\n    PassThroughSlot.prototype.created = function (ownerView) {\r\n        this.ownerView = ownerView;\r\n    };\r\n    PassThroughSlot.prototype.bind = function (view) {\r\n        if (this.contentView) {\r\n            this.contentView.bind(view.bindingContext, view.overrideContext);\r\n        }\r\n    };\r\n    PassThroughSlot.prototype.attached = function () {\r\n        if (this.contentView) {\r\n            this.contentView.attached();\r\n        }\r\n    };\r\n    PassThroughSlot.prototype.detached = function () {\r\n        if (this.contentView) {\r\n            this.contentView.detached();\r\n        }\r\n    };\r\n    PassThroughSlot.prototype.unbind = function () {\r\n        if (this.contentView) {\r\n            this.contentView.unbind();\r\n        }\r\n    };\r\n    return PassThroughSlot;\r\n}());\r\nvar ShadowSlot = (function () {\r\n    function ShadowSlot(anchor, name, fallbackFactory) {\r\n        this.anchor = anchor;\r\n        this.anchor.isContentProjectionSource = true;\r\n        this.anchor.viewSlot = this;\r\n        this.name = name;\r\n        this.fallbackFactory = fallbackFactory;\r\n        this.contentView = null;\r\n        this.projections = 0;\r\n        this.children = [];\r\n        this.projectFromAnchors = null;\r\n        this.destinationSlots = null;\r\n    }\r\n    Object.defineProperty(ShadowSlot.prototype, \"needsFallbackRendering\", {\r\n        get: function () {\r\n            return this.fallbackFactory && this.projections === 0;\r\n        },\r\n        enumerable: false,\r\n        configurable: true\r\n    });\r\n    ShadowSlot.prototype.addNode = function (view, node, projectionSource, index, destination) {\r\n        var $node = node;\r\n        if (this.contentView !== null) {\r\n            this.contentView.removeNodes();\r\n            this.contentView.detached();\r\n            this.contentView.unbind();\r\n            this.contentView = null;\r\n        }\r\n        if ($node.viewSlot instanceof PassThroughSlot) {\r\n            $node.viewSlot.passThroughTo(this);\r\n            return;\r\n        }\r\n        if (this.destinationSlots !== null) {\r\n            ShadowDOM.distributeNodes(view, [$node], this.destinationSlots, this, index);\r\n        }\r\n        else {\r\n            $node.auOwnerView = view;\r\n            $node.auProjectionSource = projectionSource;\r\n            $node.auAssignedSlot = this;\r\n            var anchor = this._findAnchor(view, $node, projectionSource, index);\r\n            var parent_1 = anchor.parentNode;\r\n            parent_1.insertBefore($node, anchor);\r\n            this.children.push($node);\r\n            this.projections++;\r\n        }\r\n    };\r\n    ShadowSlot.prototype.removeView = function (view, projectionSource) {\r\n        if (this.destinationSlots !== null) {\r\n            ShadowDOM.undistributeView(view, this.destinationSlots, this);\r\n        }\r\n        else if (this.contentView && this.contentView.hasSlots) {\r\n            ShadowDOM.undistributeView(view, this.contentView.slots, projectionSource);\r\n        }\r\n        else {\r\n            var found = this.children.find(function (x) { return x.auSlotProjectFrom === projectionSource; });\r\n            if (found) {\r\n                var children = found.auProjectionChildren;\r\n                var ownChildren = this.children;\r\n                for (var i = 0, ii = children.length; i < ii; ++i) {\r\n                    var child = children[i];\r\n                    if (child.auOwnerView === view) {\r\n                        children.splice(i, 1);\r\n                        view.fragment.appendChild(child);\r\n                        i--;\r\n                        ii--;\r\n                        this.projections--;\r\n                        var idx = ownChildren.indexOf(child);\r\n                        if (idx > -1) {\r\n                            ownChildren.splice(idx, 1);\r\n                        }\r\n                    }\r\n                }\r\n                if (this.needsFallbackRendering) {\r\n                    this.renderFallbackContent(view, noNodes, projectionSource);\r\n                }\r\n            }\r\n        }\r\n    };\r\n    ShadowSlot.prototype.removeAll = function (projectionSource) {\r\n        if (this.destinationSlots !== null) {\r\n            ShadowDOM.undistributeAll(this.destinationSlots, this);\r\n        }\r\n        else if (this.contentView && this.contentView.hasSlots) {\r\n            ShadowDOM.undistributeAll(this.contentView.slots, projectionSource);\r\n        }\r\n        else {\r\n            var found = this.children.find(function (x) { return x.auSlotProjectFrom === projectionSource; });\r\n            if (found) {\r\n                var children = found.auProjectionChildren;\r\n                var ownChildren = this.children;\r\n                for (var i = 0, ii = children.length; i < ii; ++i) {\r\n                    var child = children[i];\r\n                    child.auOwnerView.fragment.appendChild(child);\r\n                    this.projections--;\r\n                    var idx = ownChildren.indexOf(child);\r\n                    if (idx > -1) {\r\n                        ownChildren.splice(idx, 1);\r\n                    }\r\n                }\r\n                found.auProjectionChildren = [];\r\n                if (this.needsFallbackRendering) {\r\n                    this.renderFallbackContent(null, noNodes, projectionSource);\r\n                }\r\n            }\r\n        }\r\n    };\r\n    ShadowSlot.prototype._findAnchor = function (view, node, projectionSource, index) {\r\n        if (projectionSource) {\r\n            var found = this.children.find(function (x) { return x.auSlotProjectFrom === projectionSource; });\r\n            if (found) {\r\n                if (index !== undefined) {\r\n                    var children = found.auProjectionChildren;\r\n                    var viewIndex = -1;\r\n                    var lastView = void 0;\r\n                    for (var i = 0, ii = children.length; i < ii; ++i) {\r\n                        var current = children[i];\r\n                        if (current.auOwnerView !== lastView) {\r\n                            viewIndex++;\r\n                            lastView = current.auOwnerView;\r\n                            if (viewIndex >= index && lastView !== view) {\r\n                                children.splice(i, 0, node);\r\n                                return current;\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n                found.auProjectionChildren.push(node);\r\n                return found;\r\n            }\r\n        }\r\n        return this.anchor;\r\n    };\r\n    ShadowSlot.prototype.projectTo = function (slots) {\r\n        this.destinationSlots = slots;\r\n    };\r\n    ShadowSlot.prototype.projectFrom = function (view, projectionSource) {\r\n        var anchor = aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* DOM */ \"b\"].createComment('anchor');\r\n        var parent = this.anchor.parentNode;\r\n        anchor.auSlotProjectFrom = projectionSource;\r\n        anchor.auOwnerView = view;\r\n        anchor.auProjectionChildren = [];\r\n        parent.insertBefore(anchor, this.anchor);\r\n        this.children.push(anchor);\r\n        if (this.projectFromAnchors === null) {\r\n            this.projectFromAnchors = [];\r\n        }\r\n        this.projectFromAnchors.push(anchor);\r\n    };\r\n    ShadowSlot.prototype.renderFallbackContent = function (view, nodes, projectionSource, index) {\r\n        if (this.contentView === null) {\r\n            this.contentView = this.fallbackFactory.create(this.ownerView.container);\r\n            this.contentView.bind(this.ownerView.bindingContext, this.ownerView.overrideContext);\r\n            this.contentView.insertNodesBefore(this.anchor);\r\n        }\r\n        if (this.contentView.hasSlots) {\r\n            var slots = this.contentView.slots;\r\n            var projectFromAnchors = this.projectFromAnchors;\r\n            if (projectFromAnchors !== null) {\r\n                for (var slotName in slots) {\r\n                    var slot = slots[slotName];\r\n                    for (var i = 0, ii = projectFromAnchors.length; i < ii; ++i) {\r\n                        var anchor = projectFromAnchors[i];\r\n                        slot.projectFrom(anchor.auOwnerView, anchor.auSlotProjectFrom);\r\n                    }\r\n                }\r\n            }\r\n            this.fallbackSlots = slots;\r\n            ShadowDOM.distributeNodes(view, nodes, slots, projectionSource, index);\r\n        }\r\n    };\r\n    ShadowSlot.prototype.created = function (ownerView) {\r\n        this.ownerView = ownerView;\r\n    };\r\n    ShadowSlot.prototype.bind = function (view) {\r\n        if (this.contentView) {\r\n            this.contentView.bind(view.bindingContext, view.overrideContext);\r\n        }\r\n    };\r\n    ShadowSlot.prototype.attached = function () {\r\n        if (this.contentView) {\r\n            this.contentView.attached();\r\n        }\r\n    };\r\n    ShadowSlot.prototype.detached = function () {\r\n        if (this.contentView) {\r\n            this.contentView.detached();\r\n        }\r\n    };\r\n    ShadowSlot.prototype.unbind = function () {\r\n        if (this.contentView) {\r\n            this.contentView.unbind();\r\n        }\r\n    };\r\n    return ShadowSlot;\r\n}());\r\nvar ShadowDOM = (function () {\r\n    function ShadowDOM() {\r\n    }\r\n    ShadowDOM.getSlotName = function (node) {\r\n        if (node.auSlotAttribute === undefined) {\r\n            return ShadowDOM.defaultSlotKey;\r\n        }\r\n        return node.auSlotAttribute.value;\r\n    };\r\n    ShadowDOM.distributeView = function (view, slots, projectionSource, index, destinationOverride) {\r\n        var nodes;\r\n        if (view === null) {\r\n            nodes = noNodes;\r\n        }\r\n        else {\r\n            var childNodes = view.fragment.childNodes;\r\n            var ii = childNodes.length;\r\n            nodes = new Array(ii);\r\n            for (var i = 0; i < ii; ++i) {\r\n                nodes[i] = childNodes[i];\r\n            }\r\n        }\r\n        ShadowDOM.distributeNodes(view, nodes, slots, projectionSource, index, destinationOverride);\r\n    };\r\n    ShadowDOM.undistributeView = function (view, slots, projectionSource) {\r\n        for (var slotName in slots) {\r\n            slots[slotName].removeView(view, projectionSource);\r\n        }\r\n    };\r\n    ShadowDOM.undistributeAll = function (slots, projectionSource) {\r\n        for (var slotName in slots) {\r\n            slots[slotName].removeAll(projectionSource);\r\n        }\r\n    };\r\n    ShadowDOM.distributeNodes = function (view, nodes, slots, projectionSource, index, destinationOverride) {\r\n        for (var i = 0, ii = nodes.length; i < ii; ++i) {\r\n            var currentNode = nodes[i];\r\n            var nodeType = currentNode.nodeType;\r\n            if (currentNode.isContentProjectionSource) {\r\n                currentNode.viewSlot.projectTo(slots);\r\n                for (var slotName in slots) {\r\n                    slots[slotName].projectFrom(view, currentNode.viewSlot);\r\n                }\r\n                nodes.splice(i, 1);\r\n                ii--;\r\n                i--;\r\n            }\r\n            else if (nodeType === 1 || nodeType === 3 || currentNode.viewSlot instanceof PassThroughSlot) {\r\n                if (nodeType === 3 && _isAllWhitespace(currentNode)) {\r\n                    nodes.splice(i, 1);\r\n                    ii--;\r\n                    i--;\r\n                }\r\n                else {\r\n                    var found = slots[destinationOverride || ShadowDOM.getSlotName(currentNode)];\r\n                    if (found) {\r\n                        found.addNode(view, currentNode, projectionSource, index);\r\n                        nodes.splice(i, 1);\r\n                        ii--;\r\n                        i--;\r\n                    }\r\n                }\r\n            }\r\n            else {\r\n                nodes.splice(i, 1);\r\n                ii--;\r\n                i--;\r\n            }\r\n        }\r\n        for (var slotName in slots) {\r\n            var slot = slots[slotName];\r\n            if (slot.needsFallbackRendering) {\r\n                slot.renderFallbackContent(view, nodes, projectionSource, index);\r\n            }\r\n        }\r\n    };\r\n    ShadowDOM.defaultSlotKey = '__au-default-slot-key__';\r\n    return ShadowDOM;\r\n}());\n\nvar CompositionTransactionNotifier = (function () {\r\n    function CompositionTransactionNotifier(owner) {\r\n        this.owner = owner;\r\n        this.owner._compositionCount++;\r\n    }\r\n    CompositionTransactionNotifier.prototype.done = function () {\r\n        this.owner._compositionCount--;\r\n        this.owner._tryCompleteTransaction();\r\n    };\r\n    return CompositionTransactionNotifier;\r\n}());\r\nvar CompositionTransactionOwnershipToken = (function () {\r\n    function CompositionTransactionOwnershipToken(owner) {\r\n        this.owner = owner;\r\n        this.owner._ownershipToken = this;\r\n        this.thenable = this._createThenable();\r\n    }\r\n    CompositionTransactionOwnershipToken.prototype.waitForCompositionComplete = function () {\r\n        this.owner._tryCompleteTransaction();\r\n        return this.thenable;\r\n    };\r\n    CompositionTransactionOwnershipToken.prototype.resolve = function () {\r\n        this._resolveCallback();\r\n    };\r\n    CompositionTransactionOwnershipToken.prototype._resolveCallback = function () {\r\n        throw new Error(\"Method not implemented.\");\r\n    };\r\n    CompositionTransactionOwnershipToken.prototype._createThenable = function () {\r\n        var _this = this;\r\n        return new Promise(function (resolve) {\r\n            _this._resolveCallback = resolve;\r\n        });\r\n    };\r\n    return CompositionTransactionOwnershipToken;\r\n}());\r\nvar CompositionTransaction = (function () {\r\n    function CompositionTransaction() {\r\n        this._ownershipToken = null;\r\n        this._compositionCount = 0;\r\n    }\r\n    CompositionTransaction.prototype.tryCapture = function () {\r\n        return this._ownershipToken === null\r\n            ? new CompositionTransactionOwnershipToken(this)\r\n            : null;\r\n    };\r\n    CompositionTransaction.prototype.enlist = function () {\r\n        return new CompositionTransactionNotifier(this);\r\n    };\r\n    CompositionTransaction.prototype._tryCompleteTransaction = function () {\r\n        if (this._compositionCount <= 0) {\r\n            this._compositionCount = 0;\r\n            if (this._ownershipToken !== null) {\r\n                var token = this._ownershipToken;\r\n                this._ownershipToken = null;\r\n                token.resolve();\r\n            }\r\n        }\r\n    };\r\n    return CompositionTransaction;\r\n}());\n\nvar View = (function () {\r\n    function View(container, viewFactory, fragment, controllers, bindings, children, slots) {\r\n        this.container = container;\r\n        this.viewFactory = viewFactory;\r\n        this.resources = viewFactory.resources;\r\n        this.fragment = fragment;\r\n        this.firstChild = fragment.firstChild;\r\n        this.lastChild = fragment.lastChild;\r\n        this.controllers = controllers;\r\n        this.bindings = bindings;\r\n        this.children = children;\r\n        this.slots = slots;\r\n        this.hasSlots = false;\r\n        this.fromCache = false;\r\n        this.isBound = false;\r\n        this.isAttached = false;\r\n        this.bindingContext = null;\r\n        this.overrideContext = null;\r\n        this.controller = null;\r\n        this.viewModelScope = null;\r\n        this.animatableElement = undefined;\r\n        this._isUserControlled = false;\r\n        this.contentView = null;\r\n        for (var _ in slots) {\r\n            this.hasSlots = true;\r\n            break;\r\n        }\r\n    }\r\n    View.prototype.returnToCache = function () {\r\n        this.viewFactory.returnViewToCache(this);\r\n    };\r\n    View.prototype.created = function () {\r\n        var i;\r\n        var ii;\r\n        var controllers = this.controllers;\r\n        for (i = 0, ii = controllers.length; i < ii; ++i) {\r\n            controllers[i].created(this);\r\n        }\r\n    };\r\n    View.prototype.bind = function (bindingContext, overrideContext, _systemUpdate) {\r\n        var controllers;\r\n        var bindings;\r\n        var children;\r\n        var i;\r\n        var ii;\r\n        if (_systemUpdate && this._isUserControlled) {\r\n            return;\r\n        }\r\n        if (this.isBound) {\r\n            if (this.bindingContext === bindingContext) {\r\n                return;\r\n            }\r\n            this.unbind();\r\n        }\r\n        this.isBound = true;\r\n        this.bindingContext = bindingContext;\r\n        this.overrideContext = overrideContext || Object(aurelia_binding__WEBPACK_IMPORTED_MODULE_5__[\"createOverrideContext\"])(bindingContext);\r\n        this.resources._invokeHook('beforeBind', this);\r\n        bindings = this.bindings;\r\n        for (i = 0, ii = bindings.length; i < ii; ++i) {\r\n            bindings[i].bind(this);\r\n        }\r\n        if (this.viewModelScope !== null) {\r\n            bindingContext.bind(this.viewModelScope.bindingContext, this.viewModelScope.overrideContext);\r\n            this.viewModelScope = null;\r\n        }\r\n        controllers = this.controllers;\r\n        for (i = 0, ii = controllers.length; i < ii; ++i) {\r\n            controllers[i].bind(this);\r\n        }\r\n        children = this.children;\r\n        for (i = 0, ii = children.length; i < ii; ++i) {\r\n            children[i].bind(bindingContext, overrideContext, true);\r\n        }\r\n        if (this.hasSlots) {\r\n            ShadowDOM.distributeView(this.contentView, this.slots);\r\n        }\r\n    };\r\n    View.prototype.addBinding = function (binding) {\r\n        this.bindings.push(binding);\r\n        if (this.isBound) {\r\n            binding.bind(this);\r\n        }\r\n    };\r\n    View.prototype.unbind = function () {\r\n        var controllers;\r\n        var bindings;\r\n        var children;\r\n        var i;\r\n        var ii;\r\n        if (this.isBound) {\r\n            this.isBound = false;\r\n            this.resources._invokeHook('beforeUnbind', this);\r\n            if (this.controller !== null) {\r\n                this.controller.unbind();\r\n            }\r\n            bindings = this.bindings;\r\n            for (i = 0, ii = bindings.length; i < ii; ++i) {\r\n                bindings[i].unbind();\r\n            }\r\n            controllers = this.controllers;\r\n            for (i = 0, ii = controllers.length; i < ii; ++i) {\r\n                controllers[i].unbind();\r\n            }\r\n            children = this.children;\r\n            for (i = 0, ii = children.length; i < ii; ++i) {\r\n                children[i].unbind();\r\n            }\r\n            this.bindingContext = null;\r\n            this.overrideContext = null;\r\n        }\r\n    };\r\n    View.prototype.insertNodesBefore = function (refNode) {\r\n        refNode.parentNode.insertBefore(this.fragment, refNode);\r\n    };\r\n    View.prototype.appendNodesTo = function (parent) {\r\n        parent.appendChild(this.fragment);\r\n    };\r\n    View.prototype.removeNodes = function () {\r\n        var fragment = this.fragment;\r\n        var current = this.firstChild;\r\n        var end = this.lastChild;\r\n        var next;\r\n        while (current) {\r\n            next = current.nextSibling;\r\n            fragment.appendChild(current);\r\n            if (current === end) {\r\n                break;\r\n            }\r\n            current = next;\r\n        }\r\n    };\r\n    View.prototype.attached = function () {\r\n        var controllers;\r\n        var children;\r\n        var i;\r\n        var ii;\r\n        if (this.isAttached) {\r\n            return;\r\n        }\r\n        this.isAttached = true;\r\n        if (this.controller !== null) {\r\n            this.controller.attached();\r\n        }\r\n        controllers = this.controllers;\r\n        for (i = 0, ii = controllers.length; i < ii; ++i) {\r\n            controllers[i].attached();\r\n        }\r\n        children = this.children;\r\n        for (i = 0, ii = children.length; i < ii; ++i) {\r\n            children[i].attached();\r\n        }\r\n    };\r\n    View.prototype.detached = function () {\r\n        var controllers;\r\n        var children;\r\n        var i;\r\n        var ii;\r\n        if (this.isAttached) {\r\n            this.isAttached = false;\r\n            if (this.controller !== null) {\r\n                this.controller.detached();\r\n            }\r\n            controllers = this.controllers;\r\n            for (i = 0, ii = controllers.length; i < ii; ++i) {\r\n                controllers[i].detached();\r\n            }\r\n            children = this.children;\r\n            for (i = 0, ii = children.length; i < ii; ++i) {\r\n                children[i].detached();\r\n            }\r\n        }\r\n    };\r\n    return View;\r\n}());\n\nvar Animator = (function () {\r\n    function Animator() {\r\n    }\r\n    Animator.prototype.enter = function (element) {\r\n        return Promise.resolve(false);\r\n    };\r\n    Animator.prototype.leave = function (element) {\r\n        return Promise.resolve(false);\r\n    };\r\n    Animator.prototype.removeClass = function (element, className) {\r\n        element.classList.remove(className);\r\n        return Promise.resolve(false);\r\n    };\r\n    Animator.prototype.addClass = function (element, className) {\r\n        element.classList.add(className);\r\n        return Promise.resolve(false);\r\n    };\r\n    Animator.prototype.animate = function (element, className) {\r\n        return Promise.resolve(false);\r\n    };\r\n    Animator.prototype.runSequence = function (animations) {\r\n        return Promise.resolve(false);\r\n    };\r\n    Animator.prototype.registerEffect = function (effectName, properties) { };\r\n    Animator.prototype.unregisterEffect = function (effectName) { };\r\n    return Animator;\r\n}());\n\nfunction getAnimatableElement(view) {\r\n    if (view.animatableElement !== undefined) {\r\n        return view.animatableElement;\r\n    }\r\n    var current = view.firstChild;\r\n    while (current && current.nodeType !== 1) {\r\n        current = current.nextSibling;\r\n    }\r\n    if (current && current.nodeType === 1) {\r\n        return (view.animatableElement = current.classList.contains('au-animate') ? current : null);\r\n    }\r\n    return (view.animatableElement = null);\r\n}\r\nvar ViewSlot = (function () {\r\n    function ViewSlot(anchor, anchorIsContainer, animator) {\r\n        if (animator === void 0) { animator = Animator.instance; }\r\n        this.anchor = anchor;\r\n        this.anchorIsContainer = anchorIsContainer;\r\n        this.bindingContext = null;\r\n        this.overrideContext = null;\r\n        this.animator = animator;\r\n        this.children = [];\r\n        this.isBound = false;\r\n        this.isAttached = false;\r\n        this.contentSelectors = null;\r\n        anchor.viewSlot = this;\r\n        anchor.isContentProjectionSource = false;\r\n    }\r\n    ViewSlot.prototype.animateView = function (view, direction) {\r\n        if (direction === void 0) { direction = 'enter'; }\r\n        var animatableElement = getAnimatableElement(view);\r\n        if (animatableElement !== null) {\r\n            switch (direction) {\r\n                case 'enter':\r\n                    return this.animator.enter(animatableElement);\r\n                case 'leave':\r\n                    return this.animator.leave(animatableElement);\r\n                default:\r\n                    throw new Error('Invalid animation direction: ' + direction);\r\n            }\r\n        }\r\n    };\r\n    ViewSlot.prototype.transformChildNodesIntoView = function () {\r\n        var parent = this.anchor;\r\n        this.children.push({\r\n            fragment: parent,\r\n            firstChild: parent.firstChild,\r\n            lastChild: parent.lastChild,\r\n            returnToCache: function () { },\r\n            removeNodes: function () {\r\n                var last;\r\n                while (last = parent.lastChild) {\r\n                    parent.removeChild(last);\r\n                }\r\n            },\r\n            created: function () { },\r\n            bind: function () { },\r\n            unbind: function () { },\r\n            attached: function () { },\r\n            detached: function () { }\r\n        });\r\n    };\r\n    ViewSlot.prototype.bind = function (bindingContext, overrideContext) {\r\n        var i;\r\n        var ii;\r\n        var children;\r\n        if (this.isBound) {\r\n            if (this.bindingContext === bindingContext) {\r\n                return;\r\n            }\r\n            this.unbind();\r\n        }\r\n        this.isBound = true;\r\n        this.bindingContext = bindingContext = bindingContext || this.bindingContext;\r\n        this.overrideContext = overrideContext = overrideContext || this.overrideContext;\r\n        children = this.children;\r\n        for (i = 0, ii = children.length; i < ii; ++i) {\r\n            children[i].bind(bindingContext, overrideContext, true);\r\n        }\r\n    };\r\n    ViewSlot.prototype.unbind = function () {\r\n        if (this.isBound) {\r\n            var i = void 0;\r\n            var ii = void 0;\r\n            var children = this.children;\r\n            this.isBound = false;\r\n            this.bindingContext = null;\r\n            this.overrideContext = null;\r\n            for (i = 0, ii = children.length; i < ii; ++i) {\r\n                children[i].unbind();\r\n            }\r\n        }\r\n    };\r\n    ViewSlot.prototype.add = function (view) {\r\n        if (this.anchorIsContainer) {\r\n            view.appendNodesTo(this.anchor);\r\n        }\r\n        else {\r\n            view.insertNodesBefore(this.anchor);\r\n        }\r\n        this.children.push(view);\r\n        if (this.isAttached) {\r\n            view.attached();\r\n            return this.animateView(view, 'enter');\r\n        }\r\n    };\r\n    ViewSlot.prototype.insert = function (index, view) {\r\n        var children = this.children;\r\n        var length = children.length;\r\n        if ((index === 0 && length === 0) || index >= length) {\r\n            return this.add(view);\r\n        }\r\n        view.insertNodesBefore(children[index].firstChild);\r\n        children.splice(index, 0, view);\r\n        if (this.isAttached) {\r\n            view.attached();\r\n            return this.animateView(view, 'enter');\r\n        }\r\n    };\r\n    ViewSlot.prototype.move = function (sourceIndex, targetIndex) {\r\n        if (sourceIndex === targetIndex) {\r\n            return;\r\n        }\r\n        var children = this.children;\r\n        var view = children[sourceIndex];\r\n        view.removeNodes();\r\n        view.insertNodesBefore(children[targetIndex].firstChild);\r\n        children.splice(sourceIndex, 1);\r\n        children.splice(targetIndex, 0, view);\r\n    };\r\n    ViewSlot.prototype.remove = function (view, returnToCache, skipAnimation) {\r\n        return this.removeAt(this.children.indexOf(view), returnToCache, skipAnimation);\r\n    };\r\n    ViewSlot.prototype.removeMany = function (viewsToRemove, returnToCache, skipAnimation) {\r\n        var _this = this;\r\n        var children = this.children;\r\n        var ii = viewsToRemove.length;\r\n        var i;\r\n        var rmPromises = [];\r\n        viewsToRemove.forEach(function (child) {\r\n            if (skipAnimation) {\r\n                child.removeNodes();\r\n                return;\r\n            }\r\n            var animation = _this.animateView(child, 'leave');\r\n            if (animation) {\r\n                rmPromises.push(animation.then(function () { return child.removeNodes(); }));\r\n            }\r\n            else {\r\n                child.removeNodes();\r\n            }\r\n        });\r\n        var removeAction = function () {\r\n            if (_this.isAttached) {\r\n                for (i = 0; i < ii; ++i) {\r\n                    viewsToRemove[i].detached();\r\n                }\r\n            }\r\n            if (returnToCache) {\r\n                for (i = 0; i < ii; ++i) {\r\n                    viewsToRemove[i].returnToCache();\r\n                }\r\n            }\r\n            for (i = 0; i < ii; ++i) {\r\n                var index = children.indexOf(viewsToRemove[i]);\r\n                if (index >= 0) {\r\n                    children.splice(index, 1);\r\n                }\r\n            }\r\n        };\r\n        if (rmPromises.length > 0) {\r\n            return Promise.all(rmPromises).then(function () { return removeAction(); });\r\n        }\r\n        return removeAction();\r\n    };\r\n    ViewSlot.prototype.removeAt = function (index, returnToCache, skipAnimation) {\r\n        var _this = this;\r\n        var view = this.children[index];\r\n        var removeAction = function () {\r\n            index = _this.children.indexOf(view);\r\n            view.removeNodes();\r\n            _this.children.splice(index, 1);\r\n            if (_this.isAttached) {\r\n                view.detached();\r\n            }\r\n            if (returnToCache) {\r\n                view.returnToCache();\r\n            }\r\n            return view;\r\n        };\r\n        if (!skipAnimation) {\r\n            var animation = this.animateView(view, 'leave');\r\n            if (animation) {\r\n                return animation.then(function () { return removeAction(); });\r\n            }\r\n        }\r\n        return removeAction();\r\n    };\r\n    ViewSlot.prototype.removeAll = function (returnToCache, skipAnimation) {\r\n        var _this = this;\r\n        var children = this.children;\r\n        var ii = children.length;\r\n        var i;\r\n        var rmPromises = [];\r\n        children.forEach(function (child) {\r\n            if (skipAnimation) {\r\n                child.removeNodes();\r\n                return;\r\n            }\r\n            var animation = _this.animateView(child, 'leave');\r\n            if (animation) {\r\n                rmPromises.push(animation.then(function () { return child.removeNodes(); }));\r\n            }\r\n            else {\r\n                child.removeNodes();\r\n            }\r\n        });\r\n        var removeAction = function () {\r\n            if (_this.isAttached) {\r\n                for (i = 0; i < ii; ++i) {\r\n                    children[i].detached();\r\n                }\r\n            }\r\n            if (returnToCache) {\r\n                for (i = 0; i < ii; ++i) {\r\n                    var child = children[i];\r\n                    if (child) {\r\n                        child.returnToCache();\r\n                    }\r\n                }\r\n            }\r\n            _this.children = [];\r\n        };\r\n        if (rmPromises.length > 0) {\r\n            return Promise.all(rmPromises).then(function () { return removeAction(); });\r\n        }\r\n        return removeAction();\r\n    };\r\n    ViewSlot.prototype.attached = function () {\r\n        var i;\r\n        var ii;\r\n        var children;\r\n        var child;\r\n        if (this.isAttached) {\r\n            return;\r\n        }\r\n        this.isAttached = true;\r\n        children = this.children;\r\n        for (i = 0, ii = children.length; i < ii; ++i) {\r\n            child = children[i];\r\n            child.attached();\r\n            this.animateView(child, 'enter');\r\n        }\r\n    };\r\n    ViewSlot.prototype.detached = function () {\r\n        var i;\r\n        var ii;\r\n        var children;\r\n        if (this.isAttached) {\r\n            this.isAttached = false;\r\n            children = this.children;\r\n            for (i = 0, ii = children.length; i < ii; ++i) {\r\n                children[i].detached();\r\n            }\r\n        }\r\n    };\r\n    ViewSlot.prototype.projectTo = function (slots) {\r\n        var _this = this;\r\n        this.projectToSlots = slots;\r\n        this.add = this._projectionAdd;\r\n        this.insert = this._projectionInsert;\r\n        this.move = this._projectionMove;\r\n        this.remove = this._projectionRemove;\r\n        this.removeAt = this._projectionRemoveAt;\r\n        this.removeMany = this._projectionRemoveMany;\r\n        this.removeAll = this._projectionRemoveAll;\r\n        this.children.forEach(function (view) { return ShadowDOM.distributeView(view, slots, _this); });\r\n    };\r\n    ViewSlot.prototype._projectionAdd = function (view) {\r\n        ShadowDOM.distributeView(view, this.projectToSlots, this);\r\n        this.children.push(view);\r\n        if (this.isAttached) {\r\n            view.attached();\r\n        }\r\n    };\r\n    ViewSlot.prototype._projectionInsert = function (index, view) {\r\n        if ((index === 0 && !this.children.length) || index >= this.children.length) {\r\n            this.add(view);\r\n        }\r\n        else {\r\n            ShadowDOM.distributeView(view, this.projectToSlots, this, index);\r\n            this.children.splice(index, 0, view);\r\n            if (this.isAttached) {\r\n                view.attached();\r\n            }\r\n        }\r\n    };\r\n    ViewSlot.prototype._projectionMove = function (sourceIndex, targetIndex) {\r\n        if (sourceIndex === targetIndex) {\r\n            return;\r\n        }\r\n        var children = this.children;\r\n        var view = children[sourceIndex];\r\n        ShadowDOM.undistributeView(view, this.projectToSlots, this);\r\n        ShadowDOM.distributeView(view, this.projectToSlots, this, targetIndex);\r\n        children.splice(sourceIndex, 1);\r\n        children.splice(targetIndex, 0, view);\r\n    };\r\n    ViewSlot.prototype._projectionRemove = function (view, returnToCache) {\r\n        ShadowDOM.undistributeView(view, this.projectToSlots, this);\r\n        this.children.splice(this.children.indexOf(view), 1);\r\n        if (this.isAttached) {\r\n            view.detached();\r\n        }\r\n        if (returnToCache) {\r\n            view.returnToCache();\r\n        }\r\n    };\r\n    ViewSlot.prototype._projectionRemoveAt = function (index, returnToCache) {\r\n        var view = this.children[index];\r\n        ShadowDOM.undistributeView(view, this.projectToSlots, this);\r\n        this.children.splice(index, 1);\r\n        if (this.isAttached) {\r\n            view.detached();\r\n        }\r\n        if (returnToCache) {\r\n            view.returnToCache();\r\n        }\r\n    };\r\n    ViewSlot.prototype._projectionRemoveMany = function (viewsToRemove, returnToCache) {\r\n        var _this = this;\r\n        viewsToRemove.forEach(function (view) { return _this.remove(view, returnToCache); });\r\n    };\r\n    ViewSlot.prototype._projectionRemoveAll = function (returnToCache) {\r\n        ShadowDOM.undistributeAll(this.projectToSlots, this);\r\n        var children = this.children;\r\n        var ii = children.length;\r\n        for (var i = 0; i < ii; ++i) {\r\n            if (returnToCache) {\r\n                children[i].returnToCache();\r\n            }\r\n            else if (this.isAttached) {\r\n                children[i].detached();\r\n            }\r\n        }\r\n        this.children = [];\r\n    };\r\n    return ViewSlot;\r\n}());\n\nvar $resolver = aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_6__[/* resolver */ \"A\"];\r\nvar ProviderResolver = (function () {\r\n    function ProviderResolver() {\r\n    }\r\n    ProviderResolver.prototype.get = function (container, key) {\r\n        var id = key.__providerId__;\r\n        return id in container ? container[id] : (container[id] = container.invoke(key));\r\n    };\r\n    ProviderResolver = __decorate([\r\n        $resolver\r\n    ], ProviderResolver);\r\n    return ProviderResolver;\r\n}());\r\nvar providerResolverInstance = new ProviderResolver();\r\nfunction elementContainerGet(key) {\r\n    if (key === aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* DOM */ \"b\"].Element) {\r\n        return this.element;\r\n    }\r\n    if (key === BoundViewFactory) {\r\n        if (this.boundViewFactory) {\r\n            return this.boundViewFactory;\r\n        }\r\n        var factory = this.instruction.viewFactory;\r\n        var partReplacements = this.partReplacements;\r\n        if (partReplacements) {\r\n            factory = partReplacements[factory.part] || factory;\r\n        }\r\n        this.boundViewFactory = new BoundViewFactory(this, factory, partReplacements);\r\n        return this.boundViewFactory;\r\n    }\r\n    if (key === ViewSlot) {\r\n        if (this.viewSlot === undefined) {\r\n            this.viewSlot = new ViewSlot(this.element, this.instruction.anchorIsContainer);\r\n            this.element.isContentProjectionSource = this.instruction.lifting;\r\n            this.children.push(this.viewSlot);\r\n        }\r\n        return this.viewSlot;\r\n    }\r\n    if (key === ElementEvents) {\r\n        return this.elementEvents || (this.elementEvents = new ElementEvents(this.element));\r\n    }\r\n    if (key === CompositionTransaction) {\r\n        return this.compositionTransaction || (this.compositionTransaction = this.parent.get(key));\r\n    }\r\n    if (key === ViewResources) {\r\n        return this.viewResources;\r\n    }\r\n    if (key === TargetInstruction) {\r\n        return this.instruction;\r\n    }\r\n    return this.superGet(key);\r\n}\r\nfunction createElementContainer(parent, element, instruction, children, partReplacements, resources) {\r\n    var container = parent.createChild();\r\n    var providers;\r\n    var i;\r\n    container.element = element;\r\n    container.instruction = instruction;\r\n    container.children = children;\r\n    container.viewResources = resources;\r\n    container.partReplacements = partReplacements;\r\n    providers = instruction.providers;\r\n    i = providers.length;\r\n    while (i--) {\r\n        container._resolvers.set(providers[i], providerResolverInstance);\r\n    }\r\n    container.superGet = container.get;\r\n    container.get = elementContainerGet;\r\n    return container;\r\n}\r\nfunction hasAttribute(name) {\r\n    return this._element.hasAttribute(name);\r\n}\r\nfunction getAttribute(name) {\r\n    return this._element.getAttribute(name);\r\n}\r\nfunction setAttribute(name, value) {\r\n    this._element.setAttribute(name, value);\r\n}\r\nfunction makeElementIntoAnchor(element, elementInstruction) {\r\n    var anchor = aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* DOM */ \"b\"].createComment('anchor');\r\n    if (elementInstruction) {\r\n        var firstChild = element.firstChild;\r\n        if (firstChild && firstChild.tagName === 'AU-CONTENT') {\r\n            anchor.contentElement = firstChild;\r\n        }\r\n        anchor._element = element;\r\n        anchor.hasAttribute = hasAttribute;\r\n        anchor.getAttribute = getAttribute;\r\n        anchor.setAttribute = setAttribute;\r\n    }\r\n    aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* DOM */ \"b\"].replaceNode(anchor, element);\r\n    return anchor;\r\n}\r\nfunction applyInstructions(containers, element, instruction, controllers, bindings, children, shadowSlots, partReplacements, resources) {\r\n    var behaviorInstructions = instruction.behaviorInstructions;\r\n    var expressions = instruction.expressions;\r\n    var elementContainer;\r\n    var i;\r\n    var ii;\r\n    var current;\r\n    var instance;\r\n    if (instruction.contentExpression) {\r\n        bindings.push(instruction.contentExpression.createBinding(element.nextSibling));\r\n        element.nextSibling.auInterpolationTarget = true;\r\n        element.parentNode.removeChild(element);\r\n        return;\r\n    }\r\n    if (instruction.shadowSlot) {\r\n        var commentAnchor = aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* DOM */ \"b\"].createComment('slot');\r\n        var slot = void 0;\r\n        if (instruction.slotDestination) {\r\n            slot = new PassThroughSlot(commentAnchor, instruction.slotName, instruction.slotDestination, instruction.slotFallbackFactory);\r\n        }\r\n        else {\r\n            slot = new ShadowSlot(commentAnchor, instruction.slotName, instruction.slotFallbackFactory);\r\n        }\r\n        aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* DOM */ \"b\"].replaceNode(commentAnchor, element);\r\n        shadowSlots[instruction.slotName] = slot;\r\n        controllers.push(slot);\r\n        return;\r\n    }\r\n    if (instruction.letElement) {\r\n        for (i = 0, ii = expressions.length; i < ii; ++i) {\r\n            bindings.push(expressions[i].createBinding());\r\n        }\r\n        element.parentNode.removeChild(element);\r\n        return;\r\n    }\r\n    if (behaviorInstructions.length) {\r\n        if (!instruction.anchorIsContainer) {\r\n            element = makeElementIntoAnchor(element, instruction.elementInstruction);\r\n        }\r\n        containers[instruction.injectorId] = elementContainer =\r\n            createElementContainer(containers[instruction.parentInjectorId], element, instruction, children, partReplacements, resources);\r\n        for (i = 0, ii = behaviorInstructions.length; i < ii; ++i) {\r\n            current = behaviorInstructions[i];\r\n            instance = current.type.create(elementContainer, current, element, bindings);\r\n            controllers.push(instance);\r\n        }\r\n    }\r\n    for (i = 0, ii = expressions.length; i < ii; ++i) {\r\n        bindings.push(expressions[i].createBinding(element));\r\n    }\r\n}\r\nfunction styleStringToObject(style, target) {\r\n    var attributes = style.split(';');\r\n    var firstIndexOfColon;\r\n    var i;\r\n    var current;\r\n    var key;\r\n    var value;\r\n    target = target || {};\r\n    for (i = 0; i < attributes.length; i++) {\r\n        current = attributes[i];\r\n        firstIndexOfColon = current.indexOf(':');\r\n        key = current.substring(0, firstIndexOfColon).trim();\r\n        value = current.substring(firstIndexOfColon + 1).trim();\r\n        target[key] = value;\r\n    }\r\n    return target;\r\n}\r\nfunction styleObjectToString(obj) {\r\n    var result = '';\r\n    for (var key in obj) {\r\n        result += key + ':' + obj[key] + ';';\r\n    }\r\n    return result;\r\n}\r\nfunction applySurrogateInstruction(container, element, instruction, controllers, bindings, children) {\r\n    var behaviorInstructions = instruction.behaviorInstructions;\r\n    var expressions = instruction.expressions;\r\n    var providers = instruction.providers;\r\n    var values = instruction.values;\r\n    var i;\r\n    var ii;\r\n    var current;\r\n    var instance;\r\n    var currentAttributeValue;\r\n    i = providers.length;\r\n    while (i--) {\r\n        container._resolvers.set(providers[i], providerResolverInstance);\r\n    }\r\n    for (var key in values) {\r\n        currentAttributeValue = element.getAttribute(key);\r\n        if (currentAttributeValue) {\r\n            if (key === 'class') {\r\n                element.setAttribute('class', currentAttributeValue + ' ' + values[key]);\r\n            }\r\n            else if (key === 'style') {\r\n                var styleObject = styleStringToObject(values[key]);\r\n                styleStringToObject(currentAttributeValue, styleObject);\r\n                element.setAttribute('style', styleObjectToString(styleObject));\r\n            }\r\n        }\r\n        else {\r\n            element.setAttribute(key, values[key]);\r\n        }\r\n    }\r\n    if (behaviorInstructions.length) {\r\n        for (i = 0, ii = behaviorInstructions.length; i < ii; ++i) {\r\n            current = behaviorInstructions[i];\r\n            instance = current.type.create(container, current, element, bindings);\r\n            if (instance.contentView) {\r\n                children.push(instance.contentView);\r\n            }\r\n            controllers.push(instance);\r\n        }\r\n    }\r\n    for (i = 0, ii = expressions.length; i < ii; ++i) {\r\n        bindings.push(expressions[i].createBinding(element));\r\n    }\r\n}\r\nvar BoundViewFactory = (function () {\r\n    function BoundViewFactory(parentContainer, viewFactory, partReplacements) {\r\n        this.parentContainer = parentContainer;\r\n        this.viewFactory = viewFactory;\r\n        this.factoryCreateInstruction = { partReplacements: partReplacements };\r\n    }\r\n    BoundViewFactory.prototype.create = function () {\r\n        var view = this.viewFactory.create(this.parentContainer.createChild(), this.factoryCreateInstruction);\r\n        view._isUserControlled = true;\r\n        return view;\r\n    };\r\n    Object.defineProperty(BoundViewFactory.prototype, \"isCaching\", {\r\n        get: function () {\r\n            return this.viewFactory.isCaching;\r\n        },\r\n        enumerable: false,\r\n        configurable: true\r\n    });\r\n    BoundViewFactory.prototype.setCacheSize = function (size, doNotOverrideIfAlreadySet) {\r\n        this.viewFactory.setCacheSize(size, doNotOverrideIfAlreadySet);\r\n    };\r\n    BoundViewFactory.prototype.getCachedView = function () {\r\n        return this.viewFactory.getCachedView();\r\n    };\r\n    BoundViewFactory.prototype.returnViewToCache = function (view) {\r\n        this.viewFactory.returnViewToCache(view);\r\n    };\r\n    return BoundViewFactory;\r\n}());\r\nvar ViewFactory = (function () {\r\n    function ViewFactory(template, instructions, resources) {\r\n        this.isCaching = false;\r\n        this.template = template;\r\n        this.instructions = instructions;\r\n        this.resources = resources;\r\n        this.cacheSize = -1;\r\n        this.cache = null;\r\n    }\r\n    ViewFactory.prototype.setCacheSize = function (size, doNotOverrideIfAlreadySet) {\r\n        if (size) {\r\n            if (size === '*') {\r\n                size = Number.MAX_VALUE;\r\n            }\r\n            else if (typeof size === 'string') {\r\n                size = parseInt(size, 10);\r\n            }\r\n        }\r\n        if (this.cacheSize === -1 || !doNotOverrideIfAlreadySet) {\r\n            this.cacheSize = Number(size);\r\n        }\r\n        if (this.cacheSize > 0) {\r\n            this.cache = [];\r\n        }\r\n        else {\r\n            this.cache = null;\r\n        }\r\n        this.isCaching = this.cacheSize > 0;\r\n    };\r\n    ViewFactory.prototype.getCachedView = function () {\r\n        return this.cache !== null ? (this.cache.pop() || null) : null;\r\n    };\r\n    ViewFactory.prototype.returnViewToCache = function (view) {\r\n        if (view.isAttached) {\r\n            view.detached();\r\n        }\r\n        if (view.isBound) {\r\n            view.unbind();\r\n        }\r\n        if (this.cache !== null && this.cache.length < this.cacheSize) {\r\n            view.fromCache = true;\r\n            this.cache.push(view);\r\n        }\r\n    };\r\n    ViewFactory.prototype.create = function (container, createInstruction, element) {\r\n        createInstruction = createInstruction || BehaviorInstruction.normal;\r\n        var cachedView = this.getCachedView();\r\n        if (cachedView !== null) {\r\n            return cachedView;\r\n        }\r\n        var fragment = createInstruction.enhance ? this.template : this.template.cloneNode(true);\r\n        var instructables = fragment.querySelectorAll('.au-target');\r\n        var instructions = this.instructions;\r\n        var resources = this.resources;\r\n        var controllers = [];\r\n        var bindings = [];\r\n        var children = [];\r\n        var shadowSlots = Object.create(null);\r\n        var containers = { root: container };\r\n        var partReplacements = createInstruction.partReplacements;\r\n        var i;\r\n        var ii;\r\n        var view;\r\n        var instructable;\r\n        var instruction;\r\n        this.resources._invokeHook('beforeCreate', this, container, fragment, createInstruction);\r\n        if (element && this.surrogateInstruction !== null) {\r\n            applySurrogateInstruction(container, element, this.surrogateInstruction, controllers, bindings, children);\r\n        }\r\n        if (createInstruction.enhance && fragment.hasAttribute('au-target-id')) {\r\n            instructable = fragment;\r\n            instruction = instructions[instructable.getAttribute('au-target-id')];\r\n            applyInstructions(containers, instructable, instruction, controllers, bindings, children, shadowSlots, partReplacements, resources);\r\n        }\r\n        for (i = 0, ii = instructables.length; i < ii; ++i) {\r\n            instructable = instructables[i];\r\n            instruction = instructions[instructable.getAttribute('au-target-id')];\r\n            applyInstructions(containers, instructable, instruction, controllers, bindings, children, shadowSlots, partReplacements, resources);\r\n        }\r\n        view = new View(container, this, fragment, controllers, bindings, children, shadowSlots);\r\n        if (!createInstruction.initiatedByBehavior) {\r\n            view.created();\r\n        }\r\n        this.resources._invokeHook('afterCreate', view);\r\n        return view;\r\n    };\r\n    return ViewFactory;\r\n}());\n\nvar nextInjectorId = 0;\r\nfunction getNextInjectorId() {\r\n    return ++nextInjectorId;\r\n}\r\nvar lastAUTargetID = 0;\r\nfunction getNextAUTargetID() {\r\n    return (++lastAUTargetID).toString();\r\n}\r\nfunction makeIntoInstructionTarget(element) {\r\n    var value = element.getAttribute('class');\r\n    var auTargetID = getNextAUTargetID();\r\n    element.setAttribute('class', (value ? value + ' au-target' : 'au-target'));\r\n    element.setAttribute('au-target-id', auTargetID);\r\n    return auTargetID;\r\n}\r\nfunction makeShadowSlot(compiler, resources, node, instructions, parentInjectorId) {\r\n    var auShadowSlot = aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* DOM */ \"b\"].createElement('au-shadow-slot');\r\n    aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* DOM */ \"b\"].replaceNode(auShadowSlot, node);\r\n    var auTargetID = makeIntoInstructionTarget(auShadowSlot);\r\n    var instruction = TargetInstruction.shadowSlot(parentInjectorId);\r\n    instruction.slotName = node.getAttribute('name') || ShadowDOM.defaultSlotKey;\r\n    instruction.slotDestination = node.getAttribute('slot');\r\n    if (node.innerHTML.trim()) {\r\n        var fragment = aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* DOM */ \"b\"].createDocumentFragment();\r\n        var child = void 0;\r\n        while (child = node.firstChild) {\r\n            fragment.appendChild(child);\r\n        }\r\n        instruction.slotFallbackFactory = compiler.compile(fragment, resources);\r\n    }\r\n    instructions[auTargetID] = instruction;\r\n    return auShadowSlot;\r\n}\r\nvar defaultLetHandler = BindingLanguage.prototype.createLetExpressions;\r\nvar ViewCompiler = (function () {\r\n    function ViewCompiler(bindingLanguage, resources) {\r\n        this.bindingLanguage = bindingLanguage;\r\n        this.resources = resources;\r\n    }\r\n    ViewCompiler.inject = function () {\r\n        return [BindingLanguage, ViewResources];\r\n    };\r\n    ViewCompiler.prototype.compile = function (source, resources, compileInstruction) {\r\n        resources = resources || this.resources;\r\n        compileInstruction = compileInstruction || ViewCompileInstruction.normal;\r\n        source = typeof source === 'string' ? aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* DOM */ \"b\"].createTemplateFromMarkup(source) : source;\r\n        var content;\r\n        var part;\r\n        var cacheSize;\r\n        if (source.content) {\r\n            part = source.getAttribute('part');\r\n            cacheSize = source.getAttribute('view-cache');\r\n            content = aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* DOM */ \"b\"].adoptNode(source.content);\r\n        }\r\n        else {\r\n            content = source;\r\n        }\r\n        compileInstruction.targetShadowDOM = compileInstruction.targetShadowDOM && aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* FEATURE */ \"c\"].shadowDOM;\r\n        resources._invokeHook('beforeCompile', content, resources, compileInstruction);\r\n        var instructions = {};\r\n        this._compileNode(content, resources, instructions, source, 'root', !compileInstruction.targetShadowDOM);\r\n        var firstChild = content.firstChild;\r\n        if (firstChild && firstChild.nodeType === 1) {\r\n            var targetId = firstChild.getAttribute('au-target-id');\r\n            if (targetId) {\r\n                var ins = instructions[targetId];\r\n                if (ins.shadowSlot || ins.lifting || (ins.elementInstruction && !ins.elementInstruction.anchorIsContainer)) {\r\n                    content.insertBefore(aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* DOM */ \"b\"].createComment('view'), firstChild);\r\n                }\r\n            }\r\n        }\r\n        var factory = new ViewFactory(content, instructions, resources);\r\n        factory.surrogateInstruction = compileInstruction.compileSurrogate ? this._compileSurrogate(source, resources) : null;\r\n        factory.part = part;\r\n        if (cacheSize) {\r\n            factory.setCacheSize(cacheSize);\r\n        }\r\n        resources._invokeHook('afterCompile', factory);\r\n        return factory;\r\n    };\r\n    ViewCompiler.prototype._compileNode = function (node, resources, instructions, parentNode, parentInjectorId, targetLightDOM) {\r\n        switch (node.nodeType) {\r\n            case 1:\r\n                return this._compileElement(node, resources, instructions, parentNode, parentInjectorId, targetLightDOM);\r\n            case 3:\r\n                var expression = resources.getBindingLanguage(this.bindingLanguage).inspectTextContent(resources, node.wholeText);\r\n                if (expression) {\r\n                    var marker = aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* DOM */ \"b\"].createElement('au-marker');\r\n                    var auTargetID = makeIntoInstructionTarget(marker);\r\n                    (node.parentNode || parentNode).insertBefore(marker, node);\r\n                    node.textContent = ' ';\r\n                    instructions[auTargetID] = TargetInstruction.contentExpression(expression);\r\n                    while (node.nextSibling && node.nextSibling.nodeType === 3) {\r\n                        (node.parentNode || parentNode).removeChild(node.nextSibling);\r\n                    }\r\n                }\r\n                else {\r\n                    while (node.nextSibling && node.nextSibling.nodeType === 3) {\r\n                        node = node.nextSibling;\r\n                    }\r\n                }\r\n                return node.nextSibling;\r\n            case 11:\r\n                var currentChild = node.firstChild;\r\n                while (currentChild) {\r\n                    currentChild = this._compileNode(currentChild, resources, instructions, node, parentInjectorId, targetLightDOM);\r\n                }\r\n                break;\r\n        }\r\n        return node.nextSibling;\r\n    };\r\n    ViewCompiler.prototype._compileSurrogate = function (node, resources) {\r\n        var tagName = node.tagName.toLowerCase();\r\n        var attributes = node.attributes;\r\n        var bindingLanguage = resources.getBindingLanguage(this.bindingLanguage);\r\n        var knownAttribute;\r\n        var property;\r\n        var instruction;\r\n        var i;\r\n        var ii;\r\n        var attr;\r\n        var attrName;\r\n        var attrValue;\r\n        var info;\r\n        var type;\r\n        var expressions = [];\r\n        var expression;\r\n        var behaviorInstructions = [];\r\n        var values = {};\r\n        var hasValues = false;\r\n        var providers = [];\r\n        for (i = 0, ii = attributes.length; i < ii; ++i) {\r\n            attr = attributes[i];\r\n            attrName = attr.name;\r\n            attrValue = attr.value;\r\n            info = bindingLanguage.inspectAttribute(resources, tagName, attrName, attrValue);\r\n            type = resources.getAttribute(info.attrName);\r\n            if (type) {\r\n                knownAttribute = resources.mapAttribute(info.attrName);\r\n                if (knownAttribute) {\r\n                    property = type.attributes[knownAttribute];\r\n                    if (property) {\r\n                        info.defaultBindingMode = property.defaultBindingMode;\r\n                        if (!info.command && !info.expression) {\r\n                            info.command = property.hasOptions ? 'options' : null;\r\n                        }\r\n                        if (info.command && (info.command !== 'options') && type.primaryProperty) {\r\n                            var primaryProperty = type.primaryProperty;\r\n                            attrName = info.attrName = primaryProperty.attribute;\r\n                            info.defaultBindingMode = primaryProperty.defaultBindingMode;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            instruction = bindingLanguage.createAttributeInstruction(resources, node, info, undefined, type);\r\n            if (instruction) {\r\n                if (instruction.alteredAttr) {\r\n                    type = resources.getAttribute(instruction.attrName);\r\n                }\r\n                if (instruction.discrete) {\r\n                    expressions.push(instruction);\r\n                }\r\n                else {\r\n                    if (type) {\r\n                        instruction.type = type;\r\n                        this._configureProperties(instruction, resources);\r\n                        if (type.liftsContent) {\r\n                            throw new Error('You cannot place a template controller on a surrogate element.');\r\n                        }\r\n                        else {\r\n                            behaviorInstructions.push(instruction);\r\n                        }\r\n                    }\r\n                    else {\r\n                        expressions.push(instruction.attributes[instruction.attrName]);\r\n                    }\r\n                }\r\n            }\r\n            else {\r\n                if (type) {\r\n                    instruction = BehaviorInstruction.attribute(attrName, type);\r\n                    instruction.attributes[resources.mapAttribute(attrName)] = attrValue;\r\n                    if (type.liftsContent) {\r\n                        throw new Error('You cannot place a template controller on a surrogate element.');\r\n                    }\r\n                    else {\r\n                        behaviorInstructions.push(instruction);\r\n                    }\r\n                }\r\n                else if (attrName !== 'id' && attrName !== 'part' && attrName !== 'replace-part') {\r\n                    hasValues = true;\r\n                    values[attrName] = attrValue;\r\n                }\r\n            }\r\n        }\r\n        if (expressions.length || behaviorInstructions.length || hasValues) {\r\n            for (i = 0, ii = behaviorInstructions.length; i < ii; ++i) {\r\n                instruction = behaviorInstructions[i];\r\n                instruction.type.compile(this, resources, node, instruction);\r\n                providers.push(instruction.type.target);\r\n            }\r\n            for (i = 0, ii = expressions.length; i < ii; ++i) {\r\n                expression = expressions[i];\r\n                if (expression.attrToRemove !== undefined) {\r\n                    node.removeAttribute(expression.attrToRemove);\r\n                }\r\n            }\r\n            return TargetInstruction.surrogate(providers, behaviorInstructions, expressions, values);\r\n        }\r\n        return null;\r\n    };\r\n    ViewCompiler.prototype._compileElement = function (node, resources, instructions, parentNode, parentInjectorId, targetLightDOM) {\r\n        var tagName = node.tagName.toLowerCase();\r\n        var attributes = node.attributes;\r\n        var expressions = [];\r\n        var expression;\r\n        var behaviorInstructions = [];\r\n        var providers = [];\r\n        var bindingLanguage = resources.getBindingLanguage(this.bindingLanguage);\r\n        var liftingInstruction;\r\n        var viewFactory;\r\n        var type;\r\n        var elementInstruction;\r\n        var elementProperty;\r\n        var i;\r\n        var ii;\r\n        var attr;\r\n        var attrName;\r\n        var attrValue;\r\n        var originalAttrName;\r\n        var instruction;\r\n        var info;\r\n        var property;\r\n        var knownAttribute;\r\n        var auTargetID;\r\n        var injectorId;\r\n        if (tagName === 'slot') {\r\n            if (targetLightDOM) {\r\n                node = makeShadowSlot(this, resources, node, instructions, parentInjectorId);\r\n            }\r\n            return node.nextSibling;\r\n        }\r\n        else if (tagName === 'template') {\r\n            if (!('content' in node)) {\r\n                throw new Error('You cannot place a template element within ' + node.namespaceURI + ' namespace');\r\n            }\r\n            viewFactory = this.compile(node, resources);\r\n            viewFactory.part = node.getAttribute('part');\r\n        }\r\n        else {\r\n            type = resources.getElement(node.getAttribute('as-element') || tagName);\r\n            if (tagName === 'let' && !type && bindingLanguage.createLetExpressions !== defaultLetHandler) {\r\n                expressions = bindingLanguage.createLetExpressions(resources, node);\r\n                auTargetID = makeIntoInstructionTarget(node);\r\n                instructions[auTargetID] = TargetInstruction.letElement(expressions);\r\n                return node.nextSibling;\r\n            }\r\n            if (type) {\r\n                elementInstruction = BehaviorInstruction.element(node, type);\r\n                type.processAttributes(this, resources, node, attributes, elementInstruction);\r\n                behaviorInstructions.push(elementInstruction);\r\n            }\r\n        }\r\n        for (i = 0, ii = attributes.length; i < ii; ++i) {\r\n            attr = attributes[i];\r\n            originalAttrName = attrName = attr.name;\r\n            attrValue = attr.value;\r\n            info = bindingLanguage.inspectAttribute(resources, tagName, attrName, attrValue);\r\n            if (targetLightDOM && info.attrName === 'slot') {\r\n                info.attrName = attrName = 'au-slot';\r\n            }\r\n            type = resources.getAttribute(info.attrName);\r\n            elementProperty = null;\r\n            if (type) {\r\n                knownAttribute = resources.mapAttribute(info.attrName);\r\n                if (knownAttribute) {\r\n                    property = type.attributes[knownAttribute];\r\n                    if (property) {\r\n                        info.defaultBindingMode = property.defaultBindingMode;\r\n                        if (!info.command && !info.expression) {\r\n                            info.command = property.hasOptions ? 'options' : null;\r\n                        }\r\n                        if (info.command && (info.command !== 'options') && type.primaryProperty) {\r\n                            var primaryProperty = type.primaryProperty;\r\n                            attrName = info.attrName = primaryProperty.attribute;\r\n                            info.defaultBindingMode = primaryProperty.defaultBindingMode;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            else if (elementInstruction) {\r\n                elementProperty = elementInstruction.type.attributes[info.attrName];\r\n                if (elementProperty) {\r\n                    info.defaultBindingMode = elementProperty.defaultBindingMode;\r\n                }\r\n            }\r\n            if (elementProperty) {\r\n                instruction = bindingLanguage.createAttributeInstruction(resources, node, info, elementInstruction);\r\n            }\r\n            else {\r\n                instruction = bindingLanguage.createAttributeInstruction(resources, node, info, undefined, type);\r\n            }\r\n            if (instruction) {\r\n                if (instruction.alteredAttr) {\r\n                    type = resources.getAttribute(instruction.attrName);\r\n                }\r\n                if (instruction.discrete) {\r\n                    expressions.push(instruction);\r\n                }\r\n                else {\r\n                    if (type) {\r\n                        instruction.type = type;\r\n                        this._configureProperties(instruction, resources);\r\n                        if (type.liftsContent) {\r\n                            instruction.originalAttrName = originalAttrName;\r\n                            liftingInstruction = instruction;\r\n                            break;\r\n                        }\r\n                        else {\r\n                            behaviorInstructions.push(instruction);\r\n                        }\r\n                    }\r\n                    else if (elementProperty) {\r\n                        elementInstruction.attributes[info.attrName].targetProperty = elementProperty.name;\r\n                    }\r\n                    else {\r\n                        expressions.push(instruction.attributes[instruction.attrName]);\r\n                    }\r\n                }\r\n            }\r\n            else {\r\n                if (type) {\r\n                    instruction = BehaviorInstruction.attribute(attrName, type);\r\n                    instruction.attributes[resources.mapAttribute(attrName)] = attrValue;\r\n                    if (type.liftsContent) {\r\n                        instruction.originalAttrName = originalAttrName;\r\n                        liftingInstruction = instruction;\r\n                        break;\r\n                    }\r\n                    else {\r\n                        behaviorInstructions.push(instruction);\r\n                    }\r\n                }\r\n                else if (elementProperty) {\r\n                    elementInstruction.attributes[attrName] = attrValue;\r\n                }\r\n            }\r\n        }\r\n        if (liftingInstruction) {\r\n            liftingInstruction.viewFactory = viewFactory;\r\n            node = liftingInstruction.type.compile(this, resources, node, liftingInstruction, parentNode);\r\n            auTargetID = makeIntoInstructionTarget(node);\r\n            instructions[auTargetID] = TargetInstruction.lifting(parentInjectorId, liftingInstruction);\r\n        }\r\n        else {\r\n            var skipContentProcessing = false;\r\n            if (expressions.length || behaviorInstructions.length) {\r\n                injectorId = behaviorInstructions.length ? getNextInjectorId() : false;\r\n                for (i = 0, ii = behaviorInstructions.length; i < ii; ++i) {\r\n                    instruction = behaviorInstructions[i];\r\n                    instruction.type.compile(this, resources, node, instruction, parentNode);\r\n                    providers.push(instruction.type.target);\r\n                    skipContentProcessing = skipContentProcessing || instruction.skipContentProcessing;\r\n                }\r\n                for (i = 0, ii = expressions.length; i < ii; ++i) {\r\n                    expression = expressions[i];\r\n                    if (expression.attrToRemove !== undefined) {\r\n                        node.removeAttribute(expression.attrToRemove);\r\n                    }\r\n                }\r\n                auTargetID = makeIntoInstructionTarget(node);\r\n                instructions[auTargetID] = TargetInstruction.normal(injectorId, parentInjectorId, providers, behaviorInstructions, expressions, elementInstruction);\r\n            }\r\n            if (skipContentProcessing) {\r\n                return node.nextSibling;\r\n            }\r\n            var currentChild = node.firstChild;\r\n            while (currentChild) {\r\n                currentChild = this._compileNode(currentChild, resources, instructions, node, injectorId || parentInjectorId, targetLightDOM);\r\n            }\r\n        }\r\n        return node.nextSibling;\r\n    };\r\n    ViewCompiler.prototype._configureProperties = function (instruction, resources) {\r\n        var type = instruction.type;\r\n        var attrName = instruction.attrName;\r\n        var attributes = instruction.attributes;\r\n        var property;\r\n        var key;\r\n        var value;\r\n        var knownAttribute = resources.mapAttribute(attrName);\r\n        if (knownAttribute && attrName in attributes && knownAttribute !== attrName) {\r\n            attributes[knownAttribute] = attributes[attrName];\r\n            delete attributes[attrName];\r\n        }\r\n        for (key in attributes) {\r\n            value = attributes[key];\r\n            if (value !== null && typeof value === 'object') {\r\n                property = type.attributes[key];\r\n                if (property !== undefined) {\r\n                    value.targetProperty = property.name;\r\n                }\r\n                else {\r\n                    value.targetProperty = key;\r\n                }\r\n            }\r\n        }\r\n    };\r\n    return ViewCompiler;\r\n}());\n\nvar ViewEngineHooksResource = (function () {\r\n    function ViewEngineHooksResource() {\r\n    }\r\n    ViewEngineHooksResource.prototype.initialize = function (container, target) {\r\n        this.instance = container.get(target);\r\n    };\r\n    ViewEngineHooksResource.prototype.register = function (registry, name) {\r\n        registry.registerViewEngineHooks(this.instance);\r\n    };\r\n    ViewEngineHooksResource.prototype.load = function (container, target) { };\r\n    ViewEngineHooksResource.convention = function (name) {\r\n        if (name.endsWith('ViewEngineHooks')) {\r\n            return new ViewEngineHooksResource();\r\n        }\r\n    };\r\n    return ViewEngineHooksResource;\r\n}());\r\nfunction viewEngineHooks(target) {\r\n    var deco = function (t) {\r\n        aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].define(aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].resource, new ViewEngineHooksResource(), t);\r\n    };\r\n    return target ? deco(target) : deco;\r\n}\n\nvar ResourceModule = (function () {\r\n    function ResourceModule(moduleId) {\r\n        this.id = moduleId;\r\n        this.moduleInstance = null;\r\n        this.mainResource = null;\r\n        this.resources = null;\r\n        this.viewStrategy = null;\r\n        this.isInitialized = false;\r\n        this.onLoaded = null;\r\n        this.loadContext = null;\r\n    }\r\n    ResourceModule.prototype.initialize = function (container) {\r\n        var current = this.mainResource;\r\n        var resources = this.resources;\r\n        var vs = this.viewStrategy;\r\n        if (this.isInitialized) {\r\n            return;\r\n        }\r\n        this.isInitialized = true;\r\n        if (current !== undefined) {\r\n            current.metadata.viewStrategy = vs;\r\n            current.initialize(container);\r\n        }\r\n        for (var i = 0, ii = resources.length; i < ii; ++i) {\r\n            current = resources[i];\r\n            current.metadata.viewStrategy = vs;\r\n            current.initialize(container);\r\n        }\r\n    };\r\n    ResourceModule.prototype.register = function (registry, name) {\r\n        var main = this.mainResource;\r\n        var resources = this.resources;\r\n        if (main !== undefined) {\r\n            main.register(registry, name);\r\n            name = null;\r\n        }\r\n        for (var i = 0, ii = resources.length; i < ii; ++i) {\r\n            resources[i].register(registry, name);\r\n            name = null;\r\n        }\r\n    };\r\n    ResourceModule.prototype.load = function (container, loadContext) {\r\n        if (this.onLoaded !== null) {\r\n            return this.loadContext === loadContext ? Promise.resolve() : this.onLoaded;\r\n        }\r\n        var main = this.mainResource;\r\n        var resources = this.resources;\r\n        var loads;\r\n        if (main !== undefined) {\r\n            loads = new Array(resources.length + 1);\r\n            loads[0] = main.load(container, loadContext);\r\n            for (var i = 0, ii = resources.length; i < ii; ++i) {\r\n                loads[i + 1] = resources[i].load(container, loadContext);\r\n            }\r\n        }\r\n        else {\r\n            loads = new Array(resources.length);\r\n            for (var i = 0, ii = resources.length; i < ii; ++i) {\r\n                loads[i] = resources[i].load(container, loadContext);\r\n            }\r\n        }\r\n        this.loadContext = loadContext;\r\n        this.onLoaded = Promise.all(loads);\r\n        return this.onLoaded;\r\n    };\r\n    return ResourceModule;\r\n}());\r\nvar ResourceDescription = (function () {\r\n    function ResourceDescription(key, exportedValue, resourceTypeMeta) {\r\n        if (!resourceTypeMeta) {\r\n            resourceTypeMeta = aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].get(aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].resource, exportedValue);\r\n            if (!resourceTypeMeta) {\r\n                resourceTypeMeta = new HtmlBehaviorResource();\r\n                resourceTypeMeta.elementName = _hyphenate(key);\r\n                aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].define(aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].resource, resourceTypeMeta, exportedValue);\r\n            }\r\n        }\r\n        if (resourceTypeMeta instanceof HtmlBehaviorResource) {\r\n            if (resourceTypeMeta.elementName === undefined) {\r\n                resourceTypeMeta.elementName = _hyphenate(key);\r\n            }\r\n            else if (resourceTypeMeta.attributeName === undefined) {\r\n                resourceTypeMeta.attributeName = _hyphenate(key);\r\n            }\r\n            else if (resourceTypeMeta.attributeName === null && resourceTypeMeta.elementName === null) {\r\n                HtmlBehaviorResource.convention(key, resourceTypeMeta);\r\n            }\r\n        }\r\n        else if (!resourceTypeMeta.name) {\r\n            resourceTypeMeta.name = _hyphenate(key);\r\n        }\r\n        this.metadata = resourceTypeMeta;\r\n        this.value = exportedValue;\r\n    }\r\n    ResourceDescription.prototype.initialize = function (container) {\r\n        this.metadata.initialize(container, this.value);\r\n    };\r\n    ResourceDescription.prototype.register = function (registry, name) {\r\n        this.metadata.register(registry, name);\r\n    };\r\n    ResourceDescription.prototype.load = function (container, loadContext) {\r\n        return this.metadata.load(container, this.value, loadContext);\r\n    };\r\n    return ResourceDescription;\r\n}());\r\nvar ModuleAnalyzer = (function () {\r\n    function ModuleAnalyzer() {\r\n        this.cache = Object.create(null);\r\n    }\r\n    ModuleAnalyzer.prototype.getAnalysis = function (moduleId) {\r\n        return this.cache[moduleId];\r\n    };\r\n    ModuleAnalyzer.prototype.analyze = function (moduleId, moduleInstance, mainResourceKey) {\r\n        var mainResource;\r\n        var fallbackValue;\r\n        var fallbackKey;\r\n        var resourceTypeMeta;\r\n        var key;\r\n        var exportedValue;\r\n        var resources = [];\r\n        var conventional;\r\n        var vs;\r\n        var resourceModule;\r\n        resourceModule = this.cache[moduleId];\r\n        if (resourceModule) {\r\n            return resourceModule;\r\n        }\r\n        resourceModule = new ResourceModule(moduleId);\r\n        this.cache[moduleId] = resourceModule;\r\n        if (typeof moduleInstance === 'function') {\r\n            moduleInstance = { 'default': moduleInstance };\r\n        }\r\n        if (mainResourceKey) {\r\n            mainResource = new ResourceDescription(mainResourceKey, moduleInstance[mainResourceKey]);\r\n        }\r\n        for (key in moduleInstance) {\r\n            exportedValue = moduleInstance[key];\r\n            if (key === mainResourceKey || typeof exportedValue !== 'function') {\r\n                continue;\r\n            }\r\n            resourceTypeMeta = aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].get(aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].resource, exportedValue);\r\n            if (resourceTypeMeta) {\r\n                if (resourceTypeMeta instanceof HtmlBehaviorResource) {\r\n                    ViewResources.convention(exportedValue, resourceTypeMeta);\r\n                    if (resourceTypeMeta.attributeName === null && resourceTypeMeta.elementName === null) {\r\n                        HtmlBehaviorResource.convention(key, resourceTypeMeta);\r\n                    }\r\n                    if (resourceTypeMeta.attributeName === null && resourceTypeMeta.elementName === null) {\r\n                        resourceTypeMeta.elementName = _hyphenate(key);\r\n                    }\r\n                }\r\n                if (!mainResource && resourceTypeMeta instanceof HtmlBehaviorResource && resourceTypeMeta.elementName !== null) {\r\n                    mainResource = new ResourceDescription(key, exportedValue, resourceTypeMeta);\r\n                }\r\n                else {\r\n                    resources.push(new ResourceDescription(key, exportedValue, resourceTypeMeta));\r\n                }\r\n            }\r\n            else if (viewStrategy.decorates(exportedValue)) {\r\n                vs = exportedValue;\r\n            }\r\n            else if (exportedValue instanceof aurelia_loader__WEBPACK_IMPORTED_MODULE_1__[/* TemplateRegistryEntry */ \"c\"]) {\r\n                vs = new TemplateRegistryViewStrategy(moduleId, exportedValue);\r\n            }\r\n            else {\r\n                if (conventional = ViewResources.convention(exportedValue)) {\r\n                    if (conventional.elementName !== null && !mainResource) {\r\n                        mainResource = new ResourceDescription(key, exportedValue, conventional);\r\n                    }\r\n                    else {\r\n                        resources.push(new ResourceDescription(key, exportedValue, conventional));\r\n                    }\r\n                    aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].define(aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].resource, conventional, exportedValue);\r\n                }\r\n                else if (conventional = HtmlBehaviorResource.convention(key)) {\r\n                    if (conventional.elementName !== null && !mainResource) {\r\n                        mainResource = new ResourceDescription(key, exportedValue, conventional);\r\n                    }\r\n                    else {\r\n                        resources.push(new ResourceDescription(key, exportedValue, conventional));\r\n                    }\r\n                    aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].define(aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].resource, conventional, exportedValue);\r\n                }\r\n                else if (conventional = aurelia_binding__WEBPACK_IMPORTED_MODULE_5__[\"ValueConverterResource\"].convention(key)\r\n                    || aurelia_binding__WEBPACK_IMPORTED_MODULE_5__[\"BindingBehaviorResource\"].convention(key)\r\n                    || ViewEngineHooksResource.convention(key)) {\r\n                    resources.push(new ResourceDescription(key, exportedValue, conventional));\r\n                    aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].define(aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].resource, conventional, exportedValue);\r\n                }\r\n                else if (!fallbackValue) {\r\n                    fallbackValue = exportedValue;\r\n                    fallbackKey = key;\r\n                }\r\n            }\r\n        }\r\n        if (!mainResource && fallbackValue) {\r\n            mainResource = new ResourceDescription(fallbackKey, fallbackValue);\r\n        }\r\n        resourceModule.moduleInstance = moduleInstance;\r\n        resourceModule.mainResource = mainResource;\r\n        resourceModule.resources = resources;\r\n        resourceModule.viewStrategy = vs;\r\n        return resourceModule;\r\n    };\r\n    return ModuleAnalyzer;\r\n}());\n\nvar logger = aurelia_logging__WEBPACK_IMPORTED_MODULE_4__[\"getLogger\"]('templating');\r\nfunction ensureRegistryEntry(loader, urlOrRegistryEntry) {\r\n    if (urlOrRegistryEntry instanceof aurelia_loader__WEBPACK_IMPORTED_MODULE_1__[/* TemplateRegistryEntry */ \"c\"]) {\r\n        return Promise.resolve(urlOrRegistryEntry);\r\n    }\r\n    return loader.loadTemplate(urlOrRegistryEntry);\r\n}\r\nvar ProxyViewFactory = (function () {\r\n    function ProxyViewFactory(promise) {\r\n        var _this = this;\r\n        promise.then(function (x) { return _this.viewFactory = x; });\r\n    }\r\n    ProxyViewFactory.prototype.create = function (container, bindingContext, createInstruction, element) {\r\n        return this.viewFactory.create(container, bindingContext, createInstruction, element);\r\n    };\r\n    Object.defineProperty(ProxyViewFactory.prototype, \"isCaching\", {\r\n        get: function () {\r\n            return this.viewFactory.isCaching;\r\n        },\r\n        enumerable: false,\r\n        configurable: true\r\n    });\r\n    ProxyViewFactory.prototype.setCacheSize = function (size, doNotOverrideIfAlreadySet) {\r\n        this.viewFactory.setCacheSize(size, doNotOverrideIfAlreadySet);\r\n    };\r\n    ProxyViewFactory.prototype.getCachedView = function () {\r\n        return this.viewFactory.getCachedView();\r\n    };\r\n    ProxyViewFactory.prototype.returnViewToCache = function (view) {\r\n        this.viewFactory.returnViewToCache(view);\r\n    };\r\n    return ProxyViewFactory;\r\n}());\r\nvar auSlotBehavior = null;\r\nvar ViewEngine = (function () {\r\n    function ViewEngine(loader, container, viewCompiler, moduleAnalyzer, appResources) {\r\n        this.loader = loader;\r\n        this.container = container;\r\n        this.viewCompiler = viewCompiler;\r\n        this.moduleAnalyzer = moduleAnalyzer;\r\n        this.appResources = appResources;\r\n        this._pluginMap = {};\r\n        if (auSlotBehavior === null) {\r\n            auSlotBehavior = new HtmlBehaviorResource();\r\n            auSlotBehavior.attributeName = 'au-slot';\r\n            aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].define(aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].resource, auSlotBehavior, SlotCustomAttribute);\r\n        }\r\n        auSlotBehavior.initialize(container, SlotCustomAttribute);\r\n        auSlotBehavior.register(appResources);\r\n    }\r\n    ViewEngine.inject = function () {\r\n        return [aurelia_loader__WEBPACK_IMPORTED_MODULE_1__[/* Loader */ \"a\"], aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_6__[/* Container */ \"b\"], ViewCompiler, ModuleAnalyzer, ViewResources];\r\n    };\r\n    ViewEngine.prototype.addResourcePlugin = function (extension, implementation) {\r\n        var name = extension.replace('.', '') + '-resource-plugin';\r\n        this._pluginMap[extension] = name;\r\n        this.loader.addPlugin(name, implementation);\r\n    };\r\n    ViewEngine.prototype.loadViewFactory = function (urlOrRegistryEntry, compileInstruction, loadContext, target) {\r\n        var _this = this;\r\n        loadContext = loadContext || new ResourceLoadContext();\r\n        return ensureRegistryEntry(this.loader, urlOrRegistryEntry).then(function (registryEntry) {\r\n            var url = registryEntry.address;\r\n            if (registryEntry.onReady) {\r\n                if (!loadContext.hasDependency(url)) {\r\n                    loadContext.addDependency(url);\r\n                    return registryEntry.onReady;\r\n                }\r\n                if (registryEntry.template === null) {\r\n                    return registryEntry.onReady;\r\n                }\r\n                return Promise.resolve(new ProxyViewFactory(registryEntry.onReady));\r\n            }\r\n            loadContext.addDependency(url);\r\n            registryEntry.onReady = _this.loadTemplateResources(registryEntry, compileInstruction, loadContext, target).then(function (resources) {\r\n                registryEntry.resources = resources;\r\n                if (registryEntry.template === null) {\r\n                    return registryEntry.factory = null;\r\n                }\r\n                var viewFactory = _this.viewCompiler.compile(registryEntry.template, resources, compileInstruction);\r\n                return registryEntry.factory = viewFactory;\r\n            });\r\n            return registryEntry.onReady;\r\n        });\r\n    };\r\n    ViewEngine.prototype.loadTemplateResources = function (registryEntry, compileInstruction, loadContext, target) {\r\n        var resources = new ViewResources(this.appResources, registryEntry.address);\r\n        var dependencies = registryEntry.dependencies;\r\n        var importIds;\r\n        var names;\r\n        compileInstruction = compileInstruction || ViewCompileInstruction.normal;\r\n        if (dependencies.length === 0 && !compileInstruction.associatedModuleId) {\r\n            return Promise.resolve(resources);\r\n        }\r\n        importIds = dependencies.map(function (x) { return x.src; });\r\n        names = dependencies.map(function (x) { return x.name; });\r\n        logger.debug(\"importing resources for \".concat(registryEntry.address), importIds);\r\n        if (target) {\r\n            var viewModelRequires = aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].get(ViewEngine.viewModelRequireMetadataKey, target);\r\n            if (viewModelRequires) {\r\n                var templateImportCount = importIds.length;\r\n                for (var i = 0, ii = viewModelRequires.length; i < ii; ++i) {\r\n                    var req = viewModelRequires[i];\r\n                    var importId = typeof req === 'function'\r\n                        ? aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* Origin */ \"a\"].get(req).moduleId\r\n                        : Object(aurelia_path__WEBPACK_IMPORTED_MODULE_3__[\"relativeToFile\"])(req.src || req, registryEntry.address);\r\n                    if (importIds.indexOf(importId) === -1) {\r\n                        importIds.push(importId);\r\n                        names.push(req.as);\r\n                    }\r\n                }\r\n                logger.debug(\"importing ViewModel resources for \".concat(compileInstruction.associatedModuleId), importIds.slice(templateImportCount));\r\n            }\r\n        }\r\n        return this.importViewResources(importIds, names, resources, compileInstruction, loadContext);\r\n    };\r\n    ViewEngine.prototype.importViewModelResource = function (moduleImport, moduleMember) {\r\n        var _this = this;\r\n        return this.loader.loadModule(moduleImport).then(function (viewModelModule) {\r\n            var normalizedId = aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* Origin */ \"a\"].get(viewModelModule).moduleId;\r\n            var resourceModule = _this.moduleAnalyzer.analyze(normalizedId, viewModelModule, moduleMember);\r\n            if (!resourceModule.mainResource) {\r\n                throw new Error(\"No view model found in module \\\"\".concat(moduleImport, \"\\\".\"));\r\n            }\r\n            resourceModule.initialize(_this.container);\r\n            return resourceModule.mainResource;\r\n        });\r\n    };\r\n    ViewEngine.prototype.importViewResources = function (moduleIds, names, resources, compileInstruction, loadContext) {\r\n        var _this = this;\r\n        loadContext = loadContext || new ResourceLoadContext();\r\n        compileInstruction = compileInstruction || ViewCompileInstruction.normal;\r\n        moduleIds = moduleIds.map(function (x) { return _this._applyLoaderPlugin(x); });\r\n        return this.loader.loadAllModules(moduleIds).then(function (imports) {\r\n            var i;\r\n            var ii;\r\n            var analysis;\r\n            var normalizedId;\r\n            var current;\r\n            var associatedModule;\r\n            var container = _this.container;\r\n            var moduleAnalyzer = _this.moduleAnalyzer;\r\n            var allAnalysis = new Array(imports.length);\r\n            for (i = 0, ii = imports.length; i < ii; ++i) {\r\n                current = imports[i];\r\n                normalizedId = aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* Origin */ \"a\"].get(current).moduleId;\r\n                analysis = moduleAnalyzer.analyze(normalizedId, current);\r\n                analysis.initialize(container);\r\n                analysis.register(resources, names[i]);\r\n                allAnalysis[i] = analysis;\r\n            }\r\n            if (compileInstruction.associatedModuleId) {\r\n                associatedModule = moduleAnalyzer.getAnalysis(compileInstruction.associatedModuleId);\r\n                if (associatedModule) {\r\n                    associatedModule.register(resources);\r\n                }\r\n            }\r\n            for (i = 0, ii = allAnalysis.length; i < ii; ++i) {\r\n                allAnalysis[i] = allAnalysis[i].load(container, loadContext);\r\n            }\r\n            return Promise.all(allAnalysis).then(function () { return resources; });\r\n        });\r\n    };\r\n    ViewEngine.prototype._applyLoaderPlugin = function (id) {\r\n        var index = id.lastIndexOf('.');\r\n        if (index !== -1) {\r\n            var ext = id.substring(index);\r\n            var pluginName = this._pluginMap[ext];\r\n            if (pluginName === undefined) {\r\n                return id;\r\n            }\r\n            return this.loader.applyPluginToUrl(id, pluginName);\r\n        }\r\n        return id;\r\n    };\r\n    ViewEngine.viewModelRequireMetadataKey = 'aurelia:view-model-require';\r\n    return ViewEngine;\r\n}());\n\nvar Controller = (function () {\r\n    function Controller(behavior, instruction, viewModel, container) {\r\n        this.behavior = behavior;\r\n        this.instruction = instruction;\r\n        this.viewModel = viewModel;\r\n        this.isAttached = false;\r\n        this.view = null;\r\n        this.isBound = false;\r\n        this.scope = null;\r\n        this.container = container;\r\n        this.elementEvents = container.elementEvents || null;\r\n        var observerLookup = behavior.observerLocator.getOrCreateObserversLookup(viewModel);\r\n        var handlesBind = behavior.handlesBind;\r\n        var attributes = instruction.attributes;\r\n        var boundProperties = this.boundProperties = [];\r\n        var properties = behavior.properties;\r\n        var i;\r\n        var ii;\r\n        behavior._ensurePropertiesDefined(viewModel, observerLookup);\r\n        for (i = 0, ii = properties.length; i < ii; ++i) {\r\n            properties[i]._initialize(viewModel, observerLookup, attributes, handlesBind, boundProperties);\r\n        }\r\n    }\r\n    Controller.prototype.created = function (owningView) {\r\n        if (this.behavior.handlesCreated) {\r\n            this.viewModel.created(owningView, this.view);\r\n        }\r\n    };\r\n    Controller.prototype.automate = function (overrideContext, owningView) {\r\n        this.view.bindingContext = this.viewModel;\r\n        this.view.overrideContext = overrideContext || Object(aurelia_binding__WEBPACK_IMPORTED_MODULE_5__[\"createOverrideContext\"])(this.viewModel);\r\n        this.view._isUserControlled = true;\r\n        if (this.behavior.handlesCreated) {\r\n            this.viewModel.created(owningView || null, this.view);\r\n        }\r\n        this.bind(this.view);\r\n    };\r\n    Controller.prototype.bind = function (scope) {\r\n        var skipSelfSubscriber = this.behavior.handlesBind;\r\n        var boundProperties = this.boundProperties;\r\n        var i;\r\n        var ii;\r\n        var x;\r\n        var observer;\r\n        var selfSubscriber;\r\n        if (this.isBound) {\r\n            if (this.scope === scope) {\r\n                return;\r\n            }\r\n            this.unbind();\r\n        }\r\n        this.isBound = true;\r\n        this.scope = scope;\r\n        for (i = 0, ii = boundProperties.length; i < ii; ++i) {\r\n            x = boundProperties[i];\r\n            observer = x.observer;\r\n            selfSubscriber = observer.selfSubscriber;\r\n            observer.publishing = false;\r\n            if (skipSelfSubscriber) {\r\n                observer.selfSubscriber = null;\r\n            }\r\n            x.binding.bind(scope);\r\n            observer.call();\r\n            observer.publishing = true;\r\n            observer.selfSubscriber = selfSubscriber;\r\n        }\r\n        var overrideContext;\r\n        if (this.view !== null) {\r\n            if (skipSelfSubscriber) {\r\n                this.view.viewModelScope = scope;\r\n            }\r\n            if (this.viewModel === scope.overrideContext.bindingContext) {\r\n                overrideContext = scope.overrideContext;\r\n            }\r\n            else if (this.instruction.inheritBindingContext) {\r\n                overrideContext = Object(aurelia_binding__WEBPACK_IMPORTED_MODULE_5__[\"createOverrideContext\"])(this.viewModel, scope.overrideContext);\r\n            }\r\n            else {\r\n                overrideContext = Object(aurelia_binding__WEBPACK_IMPORTED_MODULE_5__[\"createOverrideContext\"])(this.viewModel);\r\n                overrideContext.__parentOverrideContext = scope.overrideContext;\r\n            }\r\n            this.view.bind(this.viewModel, overrideContext);\r\n        }\r\n        else if (skipSelfSubscriber) {\r\n            overrideContext = scope.overrideContext;\r\n            if (scope.overrideContext.__parentOverrideContext !== undefined\r\n                && this.viewModel.viewFactory && this.viewModel.viewFactory.factoryCreateInstruction.partReplacements) {\r\n                overrideContext = Object.assign({}, scope.overrideContext);\r\n                overrideContext.parentOverrideContext = scope.overrideContext.__parentOverrideContext;\r\n            }\r\n            this.viewModel.bind(scope.bindingContext, overrideContext);\r\n        }\r\n    };\r\n    Controller.prototype.unbind = function () {\r\n        if (this.isBound) {\r\n            var boundProperties = this.boundProperties;\r\n            var i = void 0;\r\n            var ii = void 0;\r\n            this.isBound = false;\r\n            this.scope = null;\r\n            if (this.view !== null) {\r\n                this.view.unbind();\r\n            }\r\n            if (this.behavior.handlesUnbind) {\r\n                this.viewModel.unbind();\r\n            }\r\n            if (this.elementEvents !== null) {\r\n                this.elementEvents.disposeAll();\r\n            }\r\n            for (i = 0, ii = boundProperties.length; i < ii; ++i) {\r\n                boundProperties[i].binding.unbind();\r\n            }\r\n        }\r\n    };\r\n    Controller.prototype.attached = function () {\r\n        if (this.isAttached) {\r\n            return;\r\n        }\r\n        this.isAttached = true;\r\n        if (this.behavior.handlesAttached) {\r\n            this.viewModel.attached();\r\n        }\r\n        if (this.view !== null) {\r\n            this.view.attached();\r\n        }\r\n    };\r\n    Controller.prototype.detached = function () {\r\n        if (this.isAttached) {\r\n            this.isAttached = false;\r\n            if (this.view !== null) {\r\n                this.view.detached();\r\n            }\r\n            if (this.behavior.handlesDetached) {\r\n                this.viewModel.detached();\r\n            }\r\n        }\r\n    };\r\n    return Controller;\r\n}());\n\nvar lastProviderId = 0;\r\nfunction nextProviderId() {\r\n    return ++lastProviderId;\r\n}\r\nfunction doProcessContent() { return true; }\r\nfunction doProcessAttributes() { }\r\nvar HtmlBehaviorResource = (function () {\r\n    function HtmlBehaviorResource() {\r\n        this.elementName = null;\r\n        this.attributeName = null;\r\n        this.attributeDefaultBindingMode = undefined;\r\n        this.liftsContent = false;\r\n        this.targetShadowDOM = false;\r\n        this.shadowDOMOptions = null;\r\n        this.processAttributes = doProcessAttributes;\r\n        this.processContent = doProcessContent;\r\n        this.usesShadowDOM = false;\r\n        this.childBindings = null;\r\n        this.hasDynamicOptions = false;\r\n        this.containerless = false;\r\n        this.properties = [];\r\n        this.attributes = {};\r\n        this.isInitialized = false;\r\n        this.primaryProperty = null;\r\n    }\r\n    HtmlBehaviorResource.convention = function (name, existing) {\r\n        var behavior;\r\n        if (name.endsWith('CustomAttribute')) {\r\n            behavior = existing || new HtmlBehaviorResource();\r\n            behavior.attributeName = _hyphenate(name.substring(0, name.length - 15));\r\n        }\r\n        if (name.endsWith('CustomElement')) {\r\n            behavior = existing || new HtmlBehaviorResource();\r\n            behavior.elementName = _hyphenate(name.substring(0, name.length - 13));\r\n        }\r\n        return behavior;\r\n    };\r\n    HtmlBehaviorResource.prototype.addChildBinding = function (behavior) {\r\n        if (this.childBindings === null) {\r\n            this.childBindings = [];\r\n        }\r\n        this.childBindings.push(behavior);\r\n    };\r\n    HtmlBehaviorResource.prototype.initialize = function (container, target) {\r\n        var proto = target.prototype;\r\n        var properties = this.properties;\r\n        var attributeName = this.attributeName;\r\n        var attributeDefaultBindingMode = this.attributeDefaultBindingMode;\r\n        var i;\r\n        var ii;\r\n        var current;\r\n        if (this.isInitialized) {\r\n            return;\r\n        }\r\n        this.isInitialized = true;\r\n        target.__providerId__ = nextProviderId();\r\n        this.observerLocator = container.get(aurelia_binding__WEBPACK_IMPORTED_MODULE_5__[\"ObserverLocator\"]);\r\n        this.taskQueue = container.get(aurelia_task_queue__WEBPACK_IMPORTED_MODULE_7__[/* TaskQueue */ \"a\"]);\r\n        this.target = target;\r\n        this.usesShadowDOM = this.targetShadowDOM && aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* FEATURE */ \"c\"].shadowDOM;\r\n        this.handlesCreated = ('created' in proto);\r\n        this.handlesBind = ('bind' in proto);\r\n        this.handlesUnbind = ('unbind' in proto);\r\n        this.handlesAttached = ('attached' in proto);\r\n        this.handlesDetached = ('detached' in proto);\r\n        this.htmlName = this.elementName || this.attributeName;\r\n        if (attributeName !== null) {\r\n            if (properties.length === 0) {\r\n                new BindableProperty({\r\n                    name: 'value',\r\n                    changeHandler: 'valueChanged' in proto ? 'valueChanged' : null,\r\n                    attribute: attributeName,\r\n                    defaultBindingMode: attributeDefaultBindingMode\r\n                }).registerWith(target, this);\r\n            }\r\n            current = properties[0];\r\n            if (properties.length === 1 && current.name === 'value') {\r\n                current.isDynamic = current.hasOptions = this.hasDynamicOptions;\r\n                current.defineOn(target, this);\r\n            }\r\n            else {\r\n                for (i = 0, ii = properties.length; i < ii; ++i) {\r\n                    properties[i].defineOn(target, this);\r\n                    if (properties[i].primaryProperty) {\r\n                        if (this.primaryProperty) {\r\n                            throw new Error('Only one bindable property on a custom element can be defined as the default');\r\n                        }\r\n                        this.primaryProperty = properties[i];\r\n                    }\r\n                }\r\n                current = new BindableProperty({\r\n                    name: 'value',\r\n                    changeHandler: 'valueChanged' in proto ? 'valueChanged' : null,\r\n                    attribute: attributeName,\r\n                    defaultBindingMode: attributeDefaultBindingMode\r\n                });\r\n                current.hasOptions = true;\r\n                current.registerWith(target, this);\r\n            }\r\n        }\r\n        else {\r\n            for (i = 0, ii = properties.length; i < ii; ++i) {\r\n                properties[i].defineOn(target, this);\r\n            }\r\n            this._copyInheritedProperties(container, target);\r\n        }\r\n    };\r\n    HtmlBehaviorResource.prototype.register = function (registry, name) {\r\n        var _this = this;\r\n        if (this.attributeName !== null) {\r\n            registry.registerAttribute(name || this.attributeName, this, this.attributeName);\r\n            if (Array.isArray(this.aliases)) {\r\n                this.aliases\r\n                    .forEach(function (alias) {\r\n                    registry.registerAttribute(alias, _this, _this.attributeName);\r\n                });\r\n            }\r\n        }\r\n        if (this.elementName !== null) {\r\n            registry.registerElement(name || this.elementName, this);\r\n        }\r\n    };\r\n    HtmlBehaviorResource.prototype.aliases = function (aliases) {\r\n        throw new Error('Method not implemented.');\r\n    };\r\n    HtmlBehaviorResource.prototype.load = function (container, target, loadContext, viewStrategy, transientView) {\r\n        var _this = this;\r\n        var options;\r\n        if (this.elementName !== null) {\r\n            viewStrategy = container.get(ViewLocator).getViewStrategy(viewStrategy || this.viewStrategy || target);\r\n            options = new ViewCompileInstruction(this.targetShadowDOM, true);\r\n            if (!viewStrategy.moduleId) {\r\n                viewStrategy.moduleId = aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* Origin */ \"a\"].get(target).moduleId;\r\n            }\r\n            return viewStrategy\r\n                .loadViewFactory(container.get(ViewEngine), options, loadContext, target)\r\n                .then(function (viewFactory) {\r\n                if (!transientView || !_this.viewFactory) {\r\n                    _this.viewFactory = viewFactory;\r\n                }\r\n                return viewFactory;\r\n            });\r\n        }\r\n        return Promise.resolve(this);\r\n    };\r\n    HtmlBehaviorResource.prototype.compile = function (compiler, resources, node, instruction, parentNode) {\r\n        if (this.liftsContent) {\r\n            if (!instruction.viewFactory) {\r\n                var template = aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* DOM */ \"b\"].createElement('template');\r\n                var fragment = aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* DOM */ \"b\"].createDocumentFragment();\r\n                var cacheSize = node.getAttribute('view-cache');\r\n                var part = node.getAttribute('part');\r\n                node.removeAttribute(instruction.originalAttrName);\r\n                aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* DOM */ \"b\"].replaceNode(template, node, parentNode);\r\n                fragment.appendChild(node);\r\n                instruction.viewFactory = compiler.compile(fragment, resources);\r\n                if (part) {\r\n                    instruction.viewFactory.part = part;\r\n                    node.removeAttribute('part');\r\n                }\r\n                if (cacheSize) {\r\n                    instruction.viewFactory.setCacheSize(cacheSize);\r\n                    node.removeAttribute('view-cache');\r\n                }\r\n                node = template;\r\n            }\r\n        }\r\n        else if (this.elementName !== null) {\r\n            var partReplacements = {};\r\n            if (this.processContent(compiler, resources, node, instruction) && node.hasChildNodes()) {\r\n                var currentChild = node.firstChild;\r\n                var contentElement = this.usesShadowDOM ? null : aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* DOM */ \"b\"].createElement('au-content');\r\n                var nextSibling = void 0;\r\n                var toReplace = void 0;\r\n                while (currentChild) {\r\n                    nextSibling = currentChild.nextSibling;\r\n                    if (currentChild.tagName === 'TEMPLATE' && (toReplace = currentChild.getAttribute('replace-part'))) {\r\n                        partReplacements[toReplace] = compiler.compile(currentChild, resources);\r\n                        aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* DOM */ \"b\"].removeNode(currentChild, parentNode);\r\n                        instruction.partReplacements = partReplacements;\r\n                    }\r\n                    else if (contentElement !== null) {\r\n                        if (currentChild.nodeType === 3 && _isAllWhitespace(currentChild)) {\r\n                            aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* DOM */ \"b\"].removeNode(currentChild, parentNode);\r\n                        }\r\n                        else {\r\n                            contentElement.appendChild(currentChild);\r\n                        }\r\n                    }\r\n                    currentChild = nextSibling;\r\n                }\r\n                if (contentElement !== null && contentElement.hasChildNodes()) {\r\n                    node.appendChild(contentElement);\r\n                }\r\n                instruction.skipContentProcessing = false;\r\n            }\r\n            else {\r\n                instruction.skipContentProcessing = true;\r\n            }\r\n        }\r\n        else if (!this.processContent(compiler, resources, node, instruction)) {\r\n            instruction.skipContentProcessing = true;\r\n        }\r\n        return node;\r\n    };\r\n    HtmlBehaviorResource.prototype.create = function (container, instruction, element, bindings) {\r\n        var viewHost;\r\n        var au = null;\r\n        instruction = instruction || BehaviorInstruction.normal;\r\n        element = element || null;\r\n        bindings = bindings || null;\r\n        if (this.elementName !== null && element) {\r\n            if (this.usesShadowDOM) {\r\n                viewHost = element.attachShadow(this.shadowDOMOptions);\r\n                container.registerInstance(aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* DOM */ \"b\"].boundary, viewHost);\r\n            }\r\n            else {\r\n                viewHost = element;\r\n                if (this.targetShadowDOM) {\r\n                    container.registerInstance(aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* DOM */ \"b\"].boundary, viewHost);\r\n                }\r\n            }\r\n        }\r\n        if (element !== null) {\r\n            element.au = au = element.au || {};\r\n        }\r\n        var viewModel = instruction.viewModel || container.get(this.target);\r\n        var controller = new Controller(this, instruction, viewModel, container);\r\n        var childBindings = this.childBindings;\r\n        var viewFactory;\r\n        if (this.liftsContent) {\r\n            au.controller = controller;\r\n        }\r\n        else if (this.elementName !== null) {\r\n            viewFactory = instruction.viewFactory || this.viewFactory;\r\n            container.viewModel = viewModel;\r\n            if (viewFactory) {\r\n                controller.view = viewFactory.create(container, instruction, element);\r\n            }\r\n            if (element !== null) {\r\n                au.controller = controller;\r\n                if (controller.view) {\r\n                    if (!this.usesShadowDOM && (element.childNodes.length === 1 || element.contentElement)) {\r\n                        var contentElement = element.childNodes[0] || element.contentElement;\r\n                        controller.view.contentView = { fragment: contentElement };\r\n                        contentElement.parentNode && aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* DOM */ \"b\"].removeNode(contentElement);\r\n                    }\r\n                    if (instruction.anchorIsContainer) {\r\n                        if (childBindings !== null) {\r\n                            for (var i = 0, ii = childBindings.length; i < ii; ++i) {\r\n                                controller.view.addBinding(childBindings[i].create(element, viewModel, controller));\r\n                            }\r\n                        }\r\n                        controller.view.appendNodesTo(viewHost);\r\n                    }\r\n                    else {\r\n                        controller.view.insertNodesBefore(viewHost);\r\n                    }\r\n                }\r\n                else if (childBindings !== null) {\r\n                    for (var i = 0, ii = childBindings.length; i < ii; ++i) {\r\n                        bindings.push(childBindings[i].create(element, viewModel, controller));\r\n                    }\r\n                }\r\n            }\r\n            else if (controller.view) {\r\n                controller.view.controller = controller;\r\n                if (childBindings !== null) {\r\n                    for (var i = 0, ii = childBindings.length; i < ii; ++i) {\r\n                        controller.view.addBinding(childBindings[i].create(instruction.host, viewModel, controller));\r\n                    }\r\n                }\r\n            }\r\n            else if (childBindings !== null) {\r\n                for (var i = 0, ii = childBindings.length; i < ii; ++i) {\r\n                    bindings.push(childBindings[i].create(instruction.host, viewModel, controller));\r\n                }\r\n            }\r\n        }\r\n        else if (childBindings !== null) {\r\n            for (var i = 0, ii = childBindings.length; i < ii; ++i) {\r\n                bindings.push(childBindings[i].create(element, viewModel, controller));\r\n            }\r\n        }\r\n        if (au !== null) {\r\n            au[this.htmlName] = controller;\r\n        }\r\n        if (instruction.initiatedByBehavior && viewFactory) {\r\n            controller.view.created();\r\n        }\r\n        return controller;\r\n    };\r\n    HtmlBehaviorResource.prototype._ensurePropertiesDefined = function (instance, lookup) {\r\n        var properties;\r\n        var i;\r\n        var ii;\r\n        var observer;\r\n        if ('__propertiesDefined__' in lookup) {\r\n            return;\r\n        }\r\n        lookup.__propertiesDefined__ = true;\r\n        properties = this.properties;\r\n        for (i = 0, ii = properties.length; i < ii; ++i) {\r\n            observer = properties[i].createObserver(instance);\r\n            if (observer !== undefined) {\r\n                lookup[observer.propertyName] = observer;\r\n            }\r\n        }\r\n    };\r\n    HtmlBehaviorResource.prototype._copyInheritedProperties = function (container, target) {\r\n        var behavior;\r\n        var derived = target;\r\n        while (true) {\r\n            var proto = Object.getPrototypeOf(target.prototype);\r\n            target = proto && proto.constructor;\r\n            if (!target) {\r\n                return;\r\n            }\r\n            behavior = aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].getOwn(aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].resource, target);\r\n            if (behavior) {\r\n                break;\r\n            }\r\n        }\r\n        behavior.initialize(container, target);\r\n        var _loop_1 = function (i, ii) {\r\n            var prop = behavior.properties[i];\r\n            if (this_1.properties.some(function (p) { return p.name === prop.name; })) {\r\n                return \"continue\";\r\n            }\r\n            new BindableProperty(prop).registerWith(derived, this_1);\r\n        };\r\n        var this_1 = this;\r\n        for (var i = 0, ii = behavior.properties.length; i < ii; ++i) {\r\n            _loop_1(i);\r\n        }\r\n    };\r\n    return HtmlBehaviorResource;\r\n}());\n\nfunction register(lookup, name, resource, type) {\r\n    if (!name) {\r\n        return;\r\n    }\r\n    var existing = lookup[name];\r\n    if (existing) {\r\n        if (existing !== resource) {\r\n            throw new Error(\"Attempted to register \".concat(type, \" when one with the same name already exists. Name: \").concat(name, \".\"));\r\n        }\r\n        return;\r\n    }\r\n    lookup[name] = resource;\r\n}\r\nfunction validateBehaviorName(name, type) {\r\n    if (/[A-Z]/.test(name)) {\r\n        var newName = _hyphenate(name);\r\n        aurelia_logging__WEBPACK_IMPORTED_MODULE_4__[\"getLogger\"]('templating')\r\n            .warn(\"'\".concat(name, \"' is not a valid \").concat(type, \" name and has been converted to '\").concat(newName, \"'. Upper-case letters are not allowed because the DOM is not case-sensitive.\"));\r\n        return newName;\r\n    }\r\n    return name;\r\n}\r\nvar conventionMark = '__au_resource__';\r\nvar ViewResources = (function () {\r\n    function ViewResources(parent, viewUrl) {\r\n        this.bindingLanguage = null;\r\n        this.parent = parent || null;\r\n        this.hasParent = this.parent !== null;\r\n        this.viewUrl = viewUrl || '';\r\n        this.lookupFunctions = {\r\n            valueConverters: this.getValueConverter.bind(this),\r\n            bindingBehaviors: this.getBindingBehavior.bind(this)\r\n        };\r\n        this.attributes = Object.create(null);\r\n        this.elements = Object.create(null);\r\n        this.valueConverters = Object.create(null);\r\n        this.bindingBehaviors = Object.create(null);\r\n        this.attributeMap = Object.create(null);\r\n        this.values = Object.create(null);\r\n        this.beforeCompile = this.afterCompile = this.beforeCreate = this.afterCreate = this.beforeBind = this.beforeUnbind = false;\r\n    }\r\n    ViewResources.convention = function (target, existing) {\r\n        var resource;\r\n        if (existing && conventionMark in existing) {\r\n            return existing;\r\n        }\r\n        if ('$resource' in target) {\r\n            var config = target.$resource;\r\n            if (typeof config === 'string') {\r\n                resource = existing || new HtmlBehaviorResource();\r\n                resource[conventionMark] = true;\r\n                if (!resource.elementName) {\r\n                    resource.elementName = validateBehaviorName(config, 'custom element');\r\n                }\r\n            }\r\n            else {\r\n                if (typeof config === 'function') {\r\n                    config = config.call(target);\r\n                }\r\n                if (typeof config === 'string') {\r\n                    config = { name: config };\r\n                }\r\n                config = Object.assign({}, config);\r\n                var resourceType = config.type || 'element';\r\n                var name_1 = config.name;\r\n                switch (resourceType) {\r\n                    case 'element':\r\n                    case 'attribute':\r\n                        resource = existing || new HtmlBehaviorResource();\r\n                        resource[conventionMark] = true;\r\n                        if (resourceType === 'element') {\r\n                            if (!resource.elementName) {\r\n                                resource.elementName = name_1\r\n                                    ? validateBehaviorName(name_1, 'custom element')\r\n                                    : _hyphenate(target.name);\r\n                            }\r\n                        }\r\n                        else {\r\n                            if (!resource.attributeName) {\r\n                                resource.attributeName = name_1\r\n                                    ? validateBehaviorName(name_1, 'custom attribute')\r\n                                    : _hyphenate(target.name);\r\n                            }\r\n                        }\r\n                        if ('templateController' in config) {\r\n                            config.liftsContent = config.templateController;\r\n                            delete config.templateController;\r\n                        }\r\n                        if ('defaultBindingMode' in config && resource.attributeDefaultBindingMode !== undefined) {\r\n                            config.attributeDefaultBindingMode = config.defaultBindingMode;\r\n                            delete config.defaultBindingMode;\r\n                        }\r\n                        delete config.name;\r\n                        Object.assign(resource, config);\r\n                        break;\r\n                    case 'valueConverter':\r\n                        resource = new aurelia_binding__WEBPACK_IMPORTED_MODULE_5__[\"ValueConverterResource\"](Object(aurelia_binding__WEBPACK_IMPORTED_MODULE_5__[\"camelCase\"])(name_1 || target.name));\r\n                        break;\r\n                    case 'bindingBehavior':\r\n                        resource = new aurelia_binding__WEBPACK_IMPORTED_MODULE_5__[\"BindingBehaviorResource\"](Object(aurelia_binding__WEBPACK_IMPORTED_MODULE_5__[\"camelCase\"])(name_1 || target.name));\r\n                        break;\r\n                    case 'viewEngineHooks':\r\n                        resource = new ViewEngineHooksResource();\r\n                        break;\r\n                }\r\n            }\r\n            if (resource instanceof HtmlBehaviorResource) {\r\n                var bindables = typeof config === 'string' ? undefined : config.bindables;\r\n                var currentProps = resource.properties;\r\n                if (Array.isArray(bindables)) {\r\n                    for (var i = 0, ii = bindables.length; ii > i; ++i) {\r\n                        var prop = bindables[i];\r\n                        if (!prop || (typeof prop !== 'string' && !prop.name)) {\r\n                            throw new Error(\"Invalid bindable property at \\\"\".concat(i, \"\\\" for class \\\"\").concat(target.name, \"\\\". Expected either a string or an object with \\\"name\\\" property.\"));\r\n                        }\r\n                        var newProp = new BindableProperty(prop);\r\n                        var existed = false;\r\n                        for (var j = 0, jj = currentProps.length; jj > j; ++j) {\r\n                            if (currentProps[j].name === newProp.name) {\r\n                                existed = true;\r\n                                break;\r\n                            }\r\n                        }\r\n                        if (existed) {\r\n                            continue;\r\n                        }\r\n                        newProp.registerWith(target, resource);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        return resource;\r\n    };\r\n    ViewResources.prototype._tryAddHook = function (obj, name) {\r\n        if (typeof obj[name] === 'function') {\r\n            var func = obj[name].bind(obj);\r\n            var counter = 1;\r\n            var callbackName = void 0;\r\n            while (this[callbackName = name + counter.toString()] !== undefined) {\r\n                counter++;\r\n            }\r\n            this[name] = true;\r\n            this[callbackName] = func;\r\n        }\r\n    };\r\n    ViewResources.prototype._invokeHook = function (name, one, two, three, four) {\r\n        if (this.hasParent) {\r\n            this.parent._invokeHook(name, one, two, three, four);\r\n        }\r\n        if (this[name]) {\r\n            this[name + '1'](one, two, three, four);\r\n            var callbackName = name + '2';\r\n            if (this[callbackName]) {\r\n                this[callbackName](one, two, three, four);\r\n                callbackName = name + '3';\r\n                if (this[callbackName]) {\r\n                    this[callbackName](one, two, three, four);\r\n                    var counter = 4;\r\n                    while (this[callbackName = name + counter.toString()] !== undefined) {\r\n                        this[callbackName](one, two, three, four);\r\n                        counter++;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    };\r\n    ViewResources.prototype.registerViewEngineHooks = function (hooks) {\r\n        this._tryAddHook(hooks, 'beforeCompile');\r\n        this._tryAddHook(hooks, 'afterCompile');\r\n        this._tryAddHook(hooks, 'beforeCreate');\r\n        this._tryAddHook(hooks, 'afterCreate');\r\n        this._tryAddHook(hooks, 'beforeBind');\r\n        this._tryAddHook(hooks, 'beforeUnbind');\r\n    };\r\n    ViewResources.prototype.getBindingLanguage = function (bindingLanguageFallback) {\r\n        return this.bindingLanguage || (this.bindingLanguage = bindingLanguageFallback);\r\n    };\r\n    ViewResources.prototype.patchInParent = function (newParent) {\r\n        var originalParent = this.parent;\r\n        this.parent = newParent || null;\r\n        this.hasParent = this.parent !== null;\r\n        if (newParent.parent === null) {\r\n            newParent.parent = originalParent;\r\n            newParent.hasParent = originalParent !== null;\r\n        }\r\n    };\r\n    ViewResources.prototype.relativeToView = function (path) {\r\n        return Object(aurelia_path__WEBPACK_IMPORTED_MODULE_3__[\"relativeToFile\"])(path, this.viewUrl);\r\n    };\r\n    ViewResources.prototype.registerElement = function (tagName, behavior) {\r\n        register(this.elements, tagName, behavior, 'an Element');\r\n    };\r\n    ViewResources.prototype.getElement = function (tagName) {\r\n        return this.elements[tagName] || (this.hasParent ? this.parent.getElement(tagName) : null);\r\n    };\r\n    ViewResources.prototype.mapAttribute = function (attribute) {\r\n        return this.attributeMap[attribute] || (this.hasParent ? this.parent.mapAttribute(attribute) : null);\r\n    };\r\n    ViewResources.prototype.registerAttribute = function (attribute, behavior, knownAttribute) {\r\n        this.attributeMap[attribute] = knownAttribute;\r\n        register(this.attributes, attribute, behavior, 'an Attribute');\r\n    };\r\n    ViewResources.prototype.getAttribute = function (attribute) {\r\n        return this.attributes[attribute] || (this.hasParent ? this.parent.getAttribute(attribute) : null);\r\n    };\r\n    ViewResources.prototype.registerValueConverter = function (name, valueConverter) {\r\n        register(this.valueConverters, name, valueConverter, 'a ValueConverter');\r\n    };\r\n    ViewResources.prototype.getValueConverter = function (name) {\r\n        return this.valueConverters[name] || (this.hasParent ? this.parent.getValueConverter(name) : null);\r\n    };\r\n    ViewResources.prototype.registerBindingBehavior = function (name, bindingBehavior) {\r\n        register(this.bindingBehaviors, name, bindingBehavior, 'a BindingBehavior');\r\n    };\r\n    ViewResources.prototype.getBindingBehavior = function (name) {\r\n        return this.bindingBehaviors[name] || (this.hasParent ? this.parent.getBindingBehavior(name) : null);\r\n    };\r\n    ViewResources.prototype.registerValue = function (name, value) {\r\n        register(this.values, name, value, 'a value');\r\n    };\r\n    ViewResources.prototype.getValue = function (name) {\r\n        return this.values[name] || (this.hasParent ? this.parent.getValue(name) : null);\r\n    };\r\n    ViewResources.prototype.autoRegister = function (container, impl) {\r\n        var resourceTypeMeta = aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].getOwn(aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].resource, impl);\r\n        if (resourceTypeMeta) {\r\n            if (resourceTypeMeta instanceof HtmlBehaviorResource) {\r\n                ViewResources.convention(impl, resourceTypeMeta);\r\n                if (resourceTypeMeta.attributeName === null && resourceTypeMeta.elementName === null) {\r\n                    HtmlBehaviorResource.convention(impl.name, resourceTypeMeta);\r\n                }\r\n                if (resourceTypeMeta.attributeName === null && resourceTypeMeta.elementName === null) {\r\n                    resourceTypeMeta.elementName = _hyphenate(impl.name);\r\n                }\r\n            }\r\n        }\r\n        else {\r\n            resourceTypeMeta = ViewResources.convention(impl)\r\n                || HtmlBehaviorResource.convention(impl.name)\r\n                || aurelia_binding__WEBPACK_IMPORTED_MODULE_5__[\"ValueConverterResource\"].convention(impl.name)\r\n                || aurelia_binding__WEBPACK_IMPORTED_MODULE_5__[\"BindingBehaviorResource\"].convention(impl.name)\r\n                || ViewEngineHooksResource.convention(impl.name);\r\n            if (!resourceTypeMeta) {\r\n                resourceTypeMeta = new HtmlBehaviorResource();\r\n                resourceTypeMeta.elementName = _hyphenate(impl.name);\r\n            }\r\n            aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].define(aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].resource, resourceTypeMeta, impl);\r\n        }\r\n        resourceTypeMeta.initialize(container, impl);\r\n        resourceTypeMeta.register(this, undefined);\r\n        return resourceTypeMeta;\r\n    };\r\n    return ViewResources;\r\n}());\n\nvar viewStrategy = aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* protocol */ \"f\"].create('aurelia:view-strategy', {\r\n    validate: function (target) {\r\n        if (!(typeof target.loadViewFactory === 'function')) {\r\n            return 'View strategies must implement: loadViewFactory(viewEngine: ViewEngine, compileInstruction: ViewCompileInstruction, loadContext?: ResourceLoadContext): Promise<ViewFactory>';\r\n        }\r\n        return true;\r\n    },\r\n    compose: function (target) {\r\n        if (!(typeof target.makeRelativeTo === 'function')) {\r\n            target.makeRelativeTo = aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* PLATFORM */ \"d\"].noop;\r\n        }\r\n    }\r\n});\r\nvar RelativeViewStrategy = (function () {\r\n    function RelativeViewStrategy(path) {\r\n        this.path = path;\r\n        this.absolutePath = null;\r\n    }\r\n    RelativeViewStrategy.prototype.loadViewFactory = function (viewEngine, compileInstruction, loadContext, target) {\r\n        if (this.absolutePath === null && this.moduleId) {\r\n            this.absolutePath = Object(aurelia_path__WEBPACK_IMPORTED_MODULE_3__[\"relativeToFile\"])(this.path, this.moduleId);\r\n        }\r\n        compileInstruction.associatedModuleId = this.moduleId;\r\n        return viewEngine.loadViewFactory(this.absolutePath || this.path, compileInstruction, loadContext, target);\r\n    };\r\n    RelativeViewStrategy.prototype.makeRelativeTo = function (file) {\r\n        if (this.absolutePath === null) {\r\n            this.absolutePath = Object(aurelia_path__WEBPACK_IMPORTED_MODULE_3__[\"relativeToFile\"])(this.path, file);\r\n        }\r\n    };\r\n    RelativeViewStrategy = __decorate([\r\n        viewStrategy()\r\n    ], RelativeViewStrategy);\r\n    return RelativeViewStrategy;\r\n}());\r\nvar ConventionalViewStrategy = (function () {\r\n    function ConventionalViewStrategy(viewLocator, origin) {\r\n        this.moduleId = origin.moduleId;\r\n        this.viewUrl = viewLocator.convertOriginToViewUrl(origin);\r\n    }\r\n    ConventionalViewStrategy.prototype.loadViewFactory = function (viewEngine, compileInstruction, loadContext, target) {\r\n        compileInstruction.associatedModuleId = this.moduleId;\r\n        return viewEngine.loadViewFactory(this.viewUrl, compileInstruction, loadContext, target);\r\n    };\r\n    ConventionalViewStrategy = __decorate([\r\n        viewStrategy()\r\n    ], ConventionalViewStrategy);\r\n    return ConventionalViewStrategy;\r\n}());\r\nvar NoViewStrategy = (function () {\r\n    function NoViewStrategy(dependencies, dependencyBaseUrl) {\r\n        this.dependencies = dependencies || null;\r\n        this.dependencyBaseUrl = dependencyBaseUrl || '';\r\n    }\r\n    NoViewStrategy.prototype.loadViewFactory = function (viewEngine, compileInstruction, loadContext, target) {\r\n        var entry = this.entry;\r\n        var dependencies = this.dependencies;\r\n        if (entry && entry.factoryIsReady) {\r\n            return Promise.resolve(null);\r\n        }\r\n        this.entry = entry = new aurelia_loader__WEBPACK_IMPORTED_MODULE_1__[/* TemplateRegistryEntry */ \"c\"](this.moduleId || this.dependencyBaseUrl);\r\n        entry.dependencies = [];\r\n        entry.templateIsLoaded = true;\r\n        if (dependencies !== null) {\r\n            for (var i = 0, ii = dependencies.length; i < ii; ++i) {\r\n                var current = dependencies[i];\r\n                if (typeof current === 'string' || typeof current === 'function') {\r\n                    entry.addDependency(current);\r\n                }\r\n                else {\r\n                    entry.addDependency(current.from, current.as);\r\n                }\r\n            }\r\n        }\r\n        compileInstruction.associatedModuleId = this.moduleId;\r\n        return viewEngine.loadViewFactory(entry, compileInstruction, loadContext, target);\r\n    };\r\n    NoViewStrategy = __decorate([\r\n        viewStrategy()\r\n    ], NoViewStrategy);\r\n    return NoViewStrategy;\r\n}());\r\nvar TemplateRegistryViewStrategy = (function () {\r\n    function TemplateRegistryViewStrategy(moduleId, entry) {\r\n        this.moduleId = moduleId;\r\n        this.entry = entry;\r\n    }\r\n    TemplateRegistryViewStrategy.prototype.loadViewFactory = function (viewEngine, compileInstruction, loadContext, target) {\r\n        var entry = this.entry;\r\n        if (entry.factoryIsReady) {\r\n            return Promise.resolve(entry.factory);\r\n        }\r\n        compileInstruction.associatedModuleId = this.moduleId;\r\n        return viewEngine.loadViewFactory(entry, compileInstruction, loadContext, target);\r\n    };\r\n    TemplateRegistryViewStrategy = __decorate([\r\n        viewStrategy()\r\n    ], TemplateRegistryViewStrategy);\r\n    return TemplateRegistryViewStrategy;\r\n}());\r\nvar InlineViewStrategy = (function () {\r\n    function InlineViewStrategy(markup, dependencies, dependencyBaseUrl) {\r\n        this.markup = markup;\r\n        this.dependencies = dependencies || null;\r\n        this.dependencyBaseUrl = dependencyBaseUrl || '';\r\n    }\r\n    InlineViewStrategy.prototype.loadViewFactory = function (viewEngine, compileInstruction, loadContext, target) {\r\n        var entry = this.entry;\r\n        var dependencies = this.dependencies;\r\n        if (entry && entry.factoryIsReady) {\r\n            return Promise.resolve(entry.factory);\r\n        }\r\n        this.entry = entry = new aurelia_loader__WEBPACK_IMPORTED_MODULE_1__[/* TemplateRegistryEntry */ \"c\"](this.moduleId || this.dependencyBaseUrl);\r\n        entry.template = aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* DOM */ \"b\"].createTemplateFromMarkup(this.markup);\r\n        if (dependencies !== null) {\r\n            for (var i = 0, ii = dependencies.length; i < ii; ++i) {\r\n                var current = dependencies[i];\r\n                if (typeof current === 'string' || typeof current === 'function') {\r\n                    entry.addDependency(current);\r\n                }\r\n                else {\r\n                    entry.addDependency(current.from, current.as);\r\n                }\r\n            }\r\n        }\r\n        compileInstruction.associatedModuleId = this.moduleId;\r\n        return viewEngine.loadViewFactory(entry, compileInstruction, loadContext, target);\r\n    };\r\n    InlineViewStrategy = __decorate([\r\n        viewStrategy()\r\n    ], InlineViewStrategy);\r\n    return InlineViewStrategy;\r\n}());\r\nvar StaticViewStrategy = (function () {\r\n    function StaticViewStrategy(config) {\r\n        if (typeof config === 'string' || (config instanceof aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* DOM */ \"b\"].Element && config.tagName === 'TEMPLATE')) {\r\n            config = {\r\n                template: config\r\n            };\r\n        }\r\n        this.template = config.template;\r\n        this.dependencies = config.dependencies || [];\r\n        this.factoryIsReady = false;\r\n        this.onReady = null;\r\n        this.moduleId = 'undefined';\r\n    }\r\n    StaticViewStrategy.prototype.loadViewFactory = function (viewEngine, compileInstruction, loadContext, target) {\r\n        var _this = this;\r\n        if (this.factoryIsReady) {\r\n            return Promise.resolve(this.factory);\r\n        }\r\n        var $deps = this.dependencies;\r\n        var deps = typeof $deps === 'function' ? $deps() : $deps;\r\n        deps = deps ? deps : [];\r\n        deps = Array.isArray(deps) ? deps : [deps];\r\n        return Promise.all(deps).then(function (dependencies) {\r\n            var container = viewEngine.container;\r\n            var appResources = viewEngine.appResources;\r\n            var viewCompiler = viewEngine.viewCompiler;\r\n            var viewResources = new ViewResources(appResources);\r\n            var resource;\r\n            var elDeps = [];\r\n            if (target) {\r\n                viewResources.autoRegister(container, target);\r\n            }\r\n            for (var _i = 0, dependencies_1 = dependencies; _i < dependencies_1.length; _i++) {\r\n                var dep = dependencies_1[_i];\r\n                if (typeof dep === 'function') {\r\n                    resource = viewResources.autoRegister(container, dep);\r\n                    if (resource.elementName !== null) {\r\n                        elDeps.push(resource);\r\n                    }\r\n                }\r\n                else if (dep && typeof dep === 'object') {\r\n                    for (var key in dep) {\r\n                        var exported = dep[key];\r\n                        if (typeof exported === 'function') {\r\n                            resource = viewResources.autoRegister(container, exported);\r\n                            if (resource.elementName !== null) {\r\n                                elDeps.push(resource);\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n                else {\r\n                    throw new Error(\"dependency neither function nor object. Received: \\\"\".concat(typeof dep, \"\\\"\"));\r\n                }\r\n            }\r\n            return Promise.all(elDeps.map(function (el) { return el.load(container, el.target); })).then(function () {\r\n                var factory = _this.template !== null\r\n                    ? viewCompiler.compile(_this.template, viewResources, compileInstruction)\r\n                    : null;\r\n                _this.factoryIsReady = true;\r\n                _this.factory = factory;\r\n                return factory;\r\n            });\r\n        });\r\n    };\r\n    StaticViewStrategy = __decorate([\r\n        viewStrategy()\r\n    ], StaticViewStrategy);\r\n    return StaticViewStrategy;\r\n}());\n\nfunction remove(viewSlot, previous) {\r\n    return Array.isArray(previous)\r\n        ? viewSlot.removeMany(previous, true)\r\n        : viewSlot.remove(previous, true);\r\n}\r\nvar SwapStrategies = {\r\n    before: function (viewSlot, previous, callback) {\r\n        return (previous === undefined)\r\n            ? callback()\r\n            : callback().then(function () { return remove(viewSlot, previous); });\r\n    },\r\n    with: function (viewSlot, previous, callback) {\r\n        return (previous === undefined)\r\n            ? callback()\r\n            : Promise.all([remove(viewSlot, previous), callback()]);\r\n    },\r\n    after: function (viewSlot, previous, callback) {\r\n        return Promise.resolve(viewSlot.removeAll(true)).then(callback);\r\n    }\r\n};\n\nfunction tryActivateViewModel(context) {\r\n    if (context.skipActivation || typeof context.viewModel.activate !== 'function') {\r\n        return Promise.resolve();\r\n    }\r\n    return context.viewModel.activate(context.model) || Promise.resolve();\r\n}\r\nvar CompositionEngine = (function () {\r\n    function CompositionEngine(viewEngine, viewLocator) {\r\n        this.viewEngine = viewEngine;\r\n        this.viewLocator = viewLocator;\r\n    }\r\n    CompositionEngine.prototype._swap = function (context, view) {\r\n        var swapStrategy = SwapStrategies[context.swapOrder] || SwapStrategies.after;\r\n        var previousViews = context.viewSlot.children.slice();\r\n        return swapStrategy(context.viewSlot, previousViews, function () {\r\n            return Promise.resolve(context.viewSlot.add(view)).then(function () {\r\n                if (context.currentController) {\r\n                    context.currentController.unbind();\r\n                }\r\n            });\r\n        }).then(function () {\r\n            if (context.compositionTransactionNotifier) {\r\n                context.compositionTransactionNotifier.done();\r\n            }\r\n        });\r\n    };\r\n    CompositionEngine.prototype._createControllerAndSwap = function (context) {\r\n        var _this = this;\r\n        return this.createController(context).then(function (controller) {\r\n            if (context.compositionTransactionOwnershipToken) {\r\n                return context.compositionTransactionOwnershipToken\r\n                    .waitForCompositionComplete()\r\n                    .then(function () {\r\n                    controller.automate(context.overrideContext, context.owningView);\r\n                    return _this._swap(context, controller.view);\r\n                })\r\n                    .then(function () { return controller; });\r\n            }\r\n            controller.automate(context.overrideContext, context.owningView);\r\n            return _this._swap(context, controller.view).then(function () { return controller; });\r\n        });\r\n    };\r\n    CompositionEngine.prototype.createController = function (context) {\r\n        var _this = this;\r\n        var childContainer;\r\n        var viewModel;\r\n        var viewModelResource;\r\n        var m;\r\n        return this\r\n            .ensureViewModel(context)\r\n            .then(tryActivateViewModel)\r\n            .then(function () {\r\n            childContainer = context.childContainer;\r\n            viewModel = context.viewModel;\r\n            viewModelResource = context.viewModelResource;\r\n            m = viewModelResource.metadata;\r\n            var viewStrategy = _this.viewLocator.getViewStrategy(context.view || viewModel);\r\n            if (context.viewResources) {\r\n                viewStrategy.makeRelativeTo(context.viewResources.viewUrl);\r\n            }\r\n            return m.load(childContainer, viewModelResource.value, null, viewStrategy, true);\r\n        }).then(function (viewFactory) { return m.create(childContainer, BehaviorInstruction.dynamic(context.host, viewModel, viewFactory)); });\r\n    };\r\n    CompositionEngine.prototype.ensureViewModel = function (context) {\r\n        var childContainer = context.childContainer = (context.childContainer || context.container.createChild());\r\n        if (typeof context.viewModel === 'string') {\r\n            context.viewModel = context.viewResources\r\n                ? context.viewResources.relativeToView(context.viewModel)\r\n                : context.viewModel;\r\n            return this.viewEngine.importViewModelResource(context.viewModel).then(function (viewModelResource) {\r\n                childContainer.autoRegister(viewModelResource.value);\r\n                if (context.host) {\r\n                    childContainer.registerInstance(aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* DOM */ \"b\"].Element, context.host);\r\n                }\r\n                context.viewModel = childContainer.viewModel = childContainer.get(viewModelResource.value);\r\n                context.viewModelResource = viewModelResource;\r\n                return context;\r\n            });\r\n        }\r\n        var ctor = context.viewModel.constructor;\r\n        var isClass = typeof context.viewModel === 'function';\r\n        if (isClass) {\r\n            ctor = context.viewModel;\r\n            childContainer.autoRegister(ctor);\r\n        }\r\n        var m = aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].getOrCreateOwn(aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].resource, HtmlBehaviorResource, ctor);\r\n        m.elementName = m.elementName || 'dynamic-element';\r\n        m.initialize(isClass ? childContainer : (context.container || childContainer), ctor);\r\n        context.viewModelResource = { metadata: m, value: ctor };\r\n        if (context.host) {\r\n            childContainer.registerInstance(aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* DOM */ \"b\"].Element, context.host);\r\n        }\r\n        childContainer.viewModel = context.viewModel = isClass ? childContainer.get(ctor) : context.viewModel;\r\n        return Promise.resolve(context);\r\n    };\r\n    CompositionEngine.prototype.compose = function (context) {\r\n        var _this = this;\r\n        context.childContainer = context.childContainer || context.container.createChild();\r\n        context.view = this.viewLocator.getViewStrategy(context.view);\r\n        var transaction = context.childContainer.get(CompositionTransaction);\r\n        var compositionTransactionOwnershipToken = transaction.tryCapture();\r\n        if (compositionTransactionOwnershipToken) {\r\n            context.compositionTransactionOwnershipToken = compositionTransactionOwnershipToken;\r\n        }\r\n        else {\r\n            context.compositionTransactionNotifier = transaction.enlist();\r\n        }\r\n        if (context.viewModel) {\r\n            return this._createControllerAndSwap(context);\r\n        }\r\n        else if (context.view) {\r\n            if (context.viewResources) {\r\n                context.view.makeRelativeTo(context.viewResources.viewUrl);\r\n            }\r\n            return context.view.loadViewFactory(this.viewEngine, new ViewCompileInstruction()).then(function (viewFactory) {\r\n                var result = viewFactory.create(context.childContainer);\r\n                result.bind(context.bindingContext, context.overrideContext);\r\n                if (context.compositionTransactionOwnershipToken) {\r\n                    return context.compositionTransactionOwnershipToken.waitForCompositionComplete()\r\n                        .then(function () { return _this._swap(context, result); })\r\n                        .then(function () { return result; });\r\n                }\r\n                return _this._swap(context, result).then(function () { return result; });\r\n            });\r\n        }\r\n        else if (context.viewSlot) {\r\n            context.viewSlot.removeAll();\r\n            if (context.compositionTransactionNotifier) {\r\n                context.compositionTransactionNotifier.done();\r\n            }\r\n            return Promise.resolve(null);\r\n        }\r\n        return Promise.resolve(null);\r\n    };\r\n    CompositionEngine = __decorate([\r\n        Object(aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_6__[/* inject */ \"s\"])(ViewEngine, ViewLocator)\r\n    ], CompositionEngine);\r\n    return CompositionEngine;\r\n}());\n\nvar animationEvent = {\r\n    enterBegin: 'animation:enter:begin',\r\n    enterActive: 'animation:enter:active',\r\n    enterDone: 'animation:enter:done',\r\n    enterTimeout: 'animation:enter:timeout',\r\n    leaveBegin: 'animation:leave:begin',\r\n    leaveActive: 'animation:leave:active',\r\n    leaveDone: 'animation:leave:done',\r\n    leaveTimeout: 'animation:leave:timeout',\r\n    staggerNext: 'animation:stagger:next',\r\n    removeClassBegin: 'animation:remove-class:begin',\r\n    removeClassActive: 'animation:remove-class:active',\r\n    removeClassDone: 'animation:remove-class:done',\r\n    removeClassTimeout: 'animation:remove-class:timeout',\r\n    addClassBegin: 'animation:add-class:begin',\r\n    addClassActive: 'animation:add-class:active',\r\n    addClassDone: 'animation:add-class:done',\r\n    addClassTimeout: 'animation:add-class:timeout',\r\n    animateBegin: 'animation:animate:begin',\r\n    animateActive: 'animation:animate:active',\r\n    animateDone: 'animation:animate:done',\r\n    animateTimeout: 'animation:animate:timeout',\r\n    sequenceBegin: 'animation:sequence:begin',\r\n    sequenceDone: 'animation:sequence:done'\r\n};\n\nfunction createChildObserverDecorator(selectorOrConfig, all) {\r\n    return function (target, key, descriptor) {\r\n        var actualTarget = typeof key === 'string' ? target.constructor : target;\r\n        var r = aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].getOrCreateOwn(aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].resource, HtmlBehaviorResource, actualTarget);\r\n        if (typeof selectorOrConfig === 'string') {\r\n            selectorOrConfig = {\r\n                selector: selectorOrConfig,\r\n                name: key\r\n            };\r\n        }\r\n        if (descriptor) {\r\n            descriptor.writable = true;\r\n            descriptor.configurable = true;\r\n        }\r\n        selectorOrConfig.all = all;\r\n        r.addChildBinding(new ChildObserver(selectorOrConfig));\r\n    };\r\n}\r\nfunction children(selectorOrConfig) {\r\n    return createChildObserverDecorator(selectorOrConfig, true);\r\n}\r\nfunction child(selectorOrConfig) {\r\n    return createChildObserverDecorator(selectorOrConfig, false);\r\n}\r\nvar ChildObserver = (function () {\r\n    function ChildObserver(config) {\r\n        this.name = config.name;\r\n        this.changeHandler = config.changeHandler || this.name + 'Changed';\r\n        this.selector = config.selector;\r\n        this.all = config.all;\r\n    }\r\n    ChildObserver.prototype.create = function (viewHost, viewModel, controller) {\r\n        return new ChildObserverBinder(this.selector, viewHost, this.name, viewModel, controller, this.changeHandler, this.all);\r\n    };\r\n    return ChildObserver;\r\n}());\r\nvar noMutations = [];\r\nfunction trackMutation(groupedMutations, binder, record) {\r\n    var mutations = groupedMutations.get(binder);\r\n    if (!mutations) {\r\n        mutations = [];\r\n        groupedMutations.set(binder, mutations);\r\n    }\r\n    mutations.push(record);\r\n}\r\nfunction onChildChange(mutations, observer) {\r\n    var binders = observer.binders;\r\n    var bindersLength = binders.length;\r\n    var groupedMutations = new Map();\r\n    for (var i = 0, ii = mutations.length; i < ii; ++i) {\r\n        var record = mutations[i];\r\n        var added = record.addedNodes;\r\n        var removed = record.removedNodes;\r\n        for (var j = 0, jj = removed.length; j < jj; ++j) {\r\n            var node = removed[j];\r\n            if (node.nodeType === 1) {\r\n                for (var k = 0; k < bindersLength; ++k) {\r\n                    var binder = binders[k];\r\n                    if (binder.onRemove(node)) {\r\n                        trackMutation(groupedMutations, binder, record);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        for (var j = 0, jj = added.length; j < jj; ++j) {\r\n            var node = added[j];\r\n            if (node.nodeType === 1) {\r\n                for (var k = 0; k < bindersLength; ++k) {\r\n                    var binder = binders[k];\r\n                    if (binder.onAdd(node)) {\r\n                        trackMutation(groupedMutations, binder, record);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n    groupedMutations.forEach(function (mutationRecords, binder) {\r\n        if (binder.isBound && binder.changeHandler !== null) {\r\n            binder.viewModel[binder.changeHandler](mutationRecords);\r\n        }\r\n    });\r\n}\r\nvar ChildObserverBinder = (function () {\r\n    function ChildObserverBinder(selector, viewHost, property, viewModel, controller, changeHandler, all) {\r\n        this.selector = selector;\r\n        this.viewHost = viewHost;\r\n        this.property = property;\r\n        this.viewModel = viewModel;\r\n        this.controller = controller;\r\n        this.changeHandler = changeHandler in viewModel ? changeHandler : null;\r\n        this.usesShadowDOM = controller.behavior.usesShadowDOM;\r\n        this.all = all;\r\n        if (!this.usesShadowDOM && controller.view && controller.view.contentView) {\r\n            this.contentView = controller.view.contentView;\r\n        }\r\n        else {\r\n            this.contentView = null;\r\n        }\r\n        this.source = null;\r\n        this.isBound = false;\r\n    }\r\n    ChildObserverBinder.prototype.matches = function (element) {\r\n        if (element.matches(this.selector)) {\r\n            if (this.contentView === null) {\r\n                return true;\r\n            }\r\n            var contentView = this.contentView;\r\n            var assignedSlot = element.auAssignedSlot;\r\n            if (assignedSlot && assignedSlot.projectFromAnchors) {\r\n                var anchors = assignedSlot.projectFromAnchors;\r\n                for (var i = 0, ii = anchors.length; i < ii; ++i) {\r\n                    if (anchors[i].auOwnerView === contentView) {\r\n                        return true;\r\n                    }\r\n                }\r\n                return false;\r\n            }\r\n            return element.auOwnerView === contentView;\r\n        }\r\n        return false;\r\n    };\r\n    ChildObserverBinder.prototype.bind = function (source) {\r\n        if (this.isBound) {\r\n            if (this.source === source) {\r\n                return;\r\n            }\r\n            this.source = source;\r\n        }\r\n        this.isBound = true;\r\n        var viewHost = this.viewHost;\r\n        var viewModel = this.viewModel;\r\n        var observer = viewHost.__childObserver__;\r\n        if (!observer) {\r\n            observer = viewHost.__childObserver__ = aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* DOM */ \"b\"].createMutationObserver(onChildChange);\r\n            var options = {\r\n                childList: true,\r\n                subtree: !this.usesShadowDOM\r\n            };\r\n            observer.observe(viewHost, options);\r\n            observer.binders = [];\r\n        }\r\n        observer.binders.push(this);\r\n        if (this.usesShadowDOM) {\r\n            var current = viewHost.firstElementChild;\r\n            if (this.all) {\r\n                var items = viewModel[this.property];\r\n                if (!items) {\r\n                    items = viewModel[this.property] = [];\r\n                }\r\n                else {\r\n                    items.splice(0);\r\n                }\r\n                while (current) {\r\n                    if (this.matches(current)) {\r\n                        items.push(current.au && current.au.controller ? current.au.controller.viewModel : current);\r\n                    }\r\n                    current = current.nextElementSibling;\r\n                }\r\n                if (this.changeHandler !== null) {\r\n                    this.viewModel[this.changeHandler](noMutations);\r\n                }\r\n            }\r\n            else {\r\n                while (current) {\r\n                    if (this.matches(current)) {\r\n                        var value = current.au && current.au.controller ? current.au.controller.viewModel : current;\r\n                        this.viewModel[this.property] = value;\r\n                        if (this.changeHandler !== null) {\r\n                            this.viewModel[this.changeHandler](value);\r\n                        }\r\n                        break;\r\n                    }\r\n                    current = current.nextElementSibling;\r\n                }\r\n            }\r\n        }\r\n    };\r\n    ChildObserverBinder.prototype.onRemove = function (element) {\r\n        if (this.matches(element)) {\r\n            var value = element.au && element.au.controller ? element.au.controller.viewModel : element;\r\n            if (this.all) {\r\n                var items = (this.viewModel[this.property] || (this.viewModel[this.property] = []));\r\n                var index = items.indexOf(value);\r\n                if (index !== -1) {\r\n                    items.splice(index, 1);\r\n                }\r\n                return true;\r\n            }\r\n            var currentValue = this.viewModel[this.property];\r\n            if (currentValue === value) {\r\n                this.viewModel[this.property] = null;\r\n                if (this.isBound && this.changeHandler !== null) {\r\n                    this.viewModel[this.changeHandler](value);\r\n                }\r\n            }\r\n        }\r\n        return false;\r\n    };\r\n    ChildObserverBinder.prototype.onAdd = function (element) {\r\n        if (this.matches(element)) {\r\n            var value = element.au && element.au.controller ? element.au.controller.viewModel : element;\r\n            if (this.all) {\r\n                var items = (this.viewModel[this.property] || (this.viewModel[this.property] = []));\r\n                if (this.selector === '*') {\r\n                    items.push(value);\r\n                    return true;\r\n                }\r\n                var index = 0;\r\n                var prev = element.previousElementSibling;\r\n                while (prev) {\r\n                    if (this.matches(prev)) {\r\n                        index++;\r\n                    }\r\n                    prev = prev.previousElementSibling;\r\n                }\r\n                items.splice(index, 0, value);\r\n                return true;\r\n            }\r\n            this.viewModel[this.property] = value;\r\n            if (this.isBound && this.changeHandler !== null) {\r\n                this.viewModel[this.changeHandler](value);\r\n            }\r\n        }\r\n        return false;\r\n    };\r\n    ChildObserverBinder.prototype.unbind = function () {\r\n        if (!this.isBound) {\r\n            return;\r\n        }\r\n        this.isBound = false;\r\n        this.source = null;\r\n        var childObserver = this.viewHost.__childObserver__;\r\n        if (childObserver) {\r\n            var binders = childObserver.binders;\r\n            if (binders && binders.length) {\r\n                var idx = binders.indexOf(this);\r\n                if (idx !== -1) {\r\n                    binders.splice(idx, 1);\r\n                }\r\n                if (binders.length === 0) {\r\n                    childObserver.disconnect();\r\n                    this.viewHost.__childObserver__ = null;\r\n                }\r\n            }\r\n            if (this.usesShadowDOM) {\r\n                this.viewModel[this.property] = null;\r\n            }\r\n        }\r\n    };\r\n    return ChildObserverBinder;\r\n}());\n\nvar ElementConfigResource = (function () {\r\n    function ElementConfigResource() {\r\n    }\r\n    ElementConfigResource.prototype.initialize = function (container, target) { };\r\n    ElementConfigResource.prototype.register = function (registry, name) { };\r\n    ElementConfigResource.prototype.load = function (container, target) {\r\n        var config = new target();\r\n        var eventManager = container.get(aurelia_binding__WEBPACK_IMPORTED_MODULE_5__[\"EventManager\"]);\r\n        eventManager.registerElementConfig(config);\r\n    };\r\n    return ElementConfigResource;\r\n}());\n\nfunction resource(instanceOrConfig) {\r\n    return function (target) {\r\n        var isConfig = typeof instanceOrConfig === 'string' || Object.getPrototypeOf(instanceOrConfig) === Object.prototype;\r\n        if (isConfig) {\r\n            target.$resource = instanceOrConfig;\r\n        }\r\n        else {\r\n            aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].define(aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].resource, instanceOrConfig, target);\r\n        }\r\n    };\r\n}\r\nfunction behavior(override) {\r\n    return function (target) {\r\n        if (override instanceof HtmlBehaviorResource) {\r\n            aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].define(aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].resource, override, target);\r\n        }\r\n        else {\r\n            var r = aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].getOrCreateOwn(aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].resource, HtmlBehaviorResource, target);\r\n            Object.assign(r, override);\r\n        }\r\n    };\r\n}\r\nfunction customElement(name) {\r\n    return function (target) {\r\n        var r = aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].getOrCreateOwn(aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].resource, HtmlBehaviorResource, target);\r\n        r.elementName = validateBehaviorName(name, 'custom element');\r\n    };\r\n}\r\nfunction customAttribute(name, defaultBindingMode, aliases) {\r\n    return function (target) {\r\n        var r = aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].getOrCreateOwn(aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].resource, HtmlBehaviorResource, target);\r\n        r.attributeName = validateBehaviorName(name, 'custom attribute');\r\n        r.attributeDefaultBindingMode = defaultBindingMode;\r\n        r.aliases = aliases;\r\n    };\r\n}\r\nfunction templateController(target) {\r\n    var deco = function (t) {\r\n        var r = aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].getOrCreateOwn(aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].resource, HtmlBehaviorResource, t);\r\n        r.liftsContent = true;\r\n    };\r\n    return target ? deco(target) : deco;\r\n}\r\nfunction bindable(nameOrConfigOrTarget, key, descriptor) {\r\n    var deco = function (target, key2, descriptor2) {\r\n        var actualTarget = key2 ? target.constructor : target;\r\n        var r = aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].getOrCreateOwn(aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].resource, HtmlBehaviorResource, actualTarget);\r\n        var prop;\r\n        if (key2) {\r\n            nameOrConfigOrTarget = nameOrConfigOrTarget || {};\r\n            nameOrConfigOrTarget.name = key2;\r\n        }\r\n        prop = new BindableProperty(nameOrConfigOrTarget);\r\n        return prop.registerWith(actualTarget, r, descriptor2);\r\n    };\r\n    if (!nameOrConfigOrTarget) {\r\n        return deco;\r\n    }\r\n    if (key) {\r\n        var target = nameOrConfigOrTarget;\r\n        nameOrConfigOrTarget = null;\r\n        return deco(target, key, descriptor);\r\n    }\r\n    return deco;\r\n}\r\nfunction dynamicOptions(target) {\r\n    var deco = function (t) {\r\n        var r = aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].getOrCreateOwn(aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].resource, HtmlBehaviorResource, t);\r\n        r.hasDynamicOptions = true;\r\n    };\r\n    return target ? deco(target) : deco;\r\n}\r\nvar defaultShadowDOMOptions = { mode: 'open' };\r\nfunction useShadowDOM(targetOrOptions) {\r\n    var options = typeof targetOrOptions === 'function' || !targetOrOptions\r\n        ? defaultShadowDOMOptions\r\n        : targetOrOptions;\r\n    var deco = function (t) {\r\n        var r = aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].getOrCreateOwn(aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].resource, HtmlBehaviorResource, t);\r\n        r.targetShadowDOM = true;\r\n        r.shadowDOMOptions = options;\r\n    };\r\n    return typeof targetOrOptions === 'function' ? deco(targetOrOptions) : deco;\r\n}\r\nfunction processAttributes(processor) {\r\n    return function (t) {\r\n        var r = aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].getOrCreateOwn(aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].resource, HtmlBehaviorResource, t);\r\n        r.processAttributes = function (compiler, resources, node, attributes, elementInstruction) {\r\n            try {\r\n                processor(compiler, resources, node, attributes, elementInstruction);\r\n            }\r\n            catch (error) {\r\n                aurelia_logging__WEBPACK_IMPORTED_MODULE_4__[\"getLogger\"]('templating').error(error);\r\n            }\r\n        };\r\n    };\r\n}\r\nfunction doNotProcessContent() { return false; }\r\nfunction processContent(processor) {\r\n    return function (t) {\r\n        var r = aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].getOrCreateOwn(aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].resource, HtmlBehaviorResource, t);\r\n        r.processContent = processor ? function (compiler, resources, node, instruction) {\r\n            try {\r\n                return processor(compiler, resources, node, instruction);\r\n            }\r\n            catch (error) {\r\n                aurelia_logging__WEBPACK_IMPORTED_MODULE_4__[\"getLogger\"]('templating').error(error);\r\n                return false;\r\n            }\r\n        } : doNotProcessContent;\r\n    };\r\n}\r\nfunction containerless(target) {\r\n    var deco = function (t) {\r\n        var r = aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].getOrCreateOwn(aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].resource, HtmlBehaviorResource, t);\r\n        r.containerless = true;\r\n    };\r\n    return target ? deco(target) : deco;\r\n}\r\nfunction useViewStrategy(strategy) {\r\n    return function (target) {\r\n        aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].define(ViewLocator.viewStrategyMetadataKey, strategy, target);\r\n    };\r\n}\r\nfunction useView(path) {\r\n    return useViewStrategy(new RelativeViewStrategy(path));\r\n}\r\nfunction inlineView(markup, dependencies, dependencyBaseUrl) {\r\n    return useViewStrategy(new InlineViewStrategy(markup, dependencies, dependencyBaseUrl));\r\n}\r\nfunction noView(targetOrDependencies, dependencyBaseUrl) {\r\n    var target;\r\n    var dependencies;\r\n    if (typeof targetOrDependencies === 'function') {\r\n        target = targetOrDependencies;\r\n    }\r\n    else {\r\n        dependencies = targetOrDependencies;\r\n        target = undefined;\r\n    }\r\n    var deco = function (t) {\r\n        aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].define(ViewLocator.viewStrategyMetadataKey, new NoViewStrategy(dependencies, dependencyBaseUrl), t);\r\n    };\r\n    return target ? deco(target) : deco;\r\n}\r\nfunction view(templateOrConfig) {\r\n    return function (target) {\r\n        target.$view = templateOrConfig;\r\n    };\r\n}\r\nfunction elementConfig(target) {\r\n    var deco = function (t) {\r\n        aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].define(aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].resource, new ElementConfigResource(), t);\r\n    };\r\n    return target ? deco(target) : deco;\r\n}\r\nfunction viewResources() {\r\n    var resources = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        resources[_i] = arguments[_i];\r\n    }\r\n    return function (target) {\r\n        aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ \"d\"].define(ViewEngine.viewModelRequireMetadataKey, resources, target);\r\n    };\r\n}\n\nvar TemplatingEngine = (function () {\r\n    function TemplatingEngine(container, moduleAnalyzer, viewCompiler, compositionEngine) {\r\n        this._container = container;\r\n        this._moduleAnalyzer = moduleAnalyzer;\r\n        this._viewCompiler = viewCompiler;\r\n        this._compositionEngine = compositionEngine;\r\n        container.registerInstance(Animator, Animator.instance = new Animator());\r\n    }\r\n    TemplatingEngine.prototype.configureAnimator = function (animator) {\r\n        this._container.unregister(Animator);\r\n        this._container.registerInstance(Animator, Animator.instance = animator);\r\n    };\r\n    TemplatingEngine.prototype.compose = function (context) {\r\n        return this._compositionEngine.compose(context);\r\n    };\r\n    TemplatingEngine.prototype.enhance = function (instruction) {\r\n        if (instruction instanceof aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* DOM */ \"b\"].Element) {\r\n            instruction = { element: instruction };\r\n        }\r\n        var compilerInstructions = { letExpressions: [] };\r\n        var resources = instruction.resources || this._container.get(ViewResources);\r\n        this._viewCompiler._compileNode(instruction.element, resources, compilerInstructions, instruction.element.parentNode, 'root', true);\r\n        var factory = new ViewFactory(instruction.element, compilerInstructions, resources);\r\n        var container = instruction.container || this._container.createChild();\r\n        var view = factory.create(container, BehaviorInstruction.enhance());\r\n        view.bind(instruction.bindingContext || {}, instruction.overrideContext);\r\n        view.firstChild = view.lastChild = view.fragment;\r\n        view.fragment = aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* DOM */ \"b\"].createDocumentFragment();\r\n        view.attached();\r\n        return view;\r\n    };\r\n    TemplatingEngine.inject = [aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_6__[/* Container */ \"b\"], ModuleAnalyzer, ViewCompiler, CompositionEngine];\r\n    return TemplatingEngine;\r\n}());\n\n\n//# sourceMappingURL=aurelia-templating.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXVyZWxpYS10ZW1wbGF0aW5nL2Rpc3QvbmF0aXZlLW1vZHVsZXMvYXVyZWxpYS10ZW1wbGF0aW5nLmpzPzg2MjgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFxRDtBQUNVO0FBQ0Q7QUFDaEI7QUFDQTtBQUN3STtBQUMzRztBQUM1Qjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLGFBQWE7QUFDN0MsaUNBQWlDLGdCQUFnQjtBQUNqRCxvQ0FBb0MsbUJBQW1CO0FBQ3ZELG9CQUFvQix1REFBRywrQkFBK0IsMkRBQTJEO0FBQ2pIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EseUNBQXlDLHlCQUF5QjtBQUNsRSwwQ0FBMEMsMEJBQTBCO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxRQUFRO0FBQ3BEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLDRFQUFvQjtBQUM1QjtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixpRUFBUSxLQUFLLGlFQUFRO0FBQzVDO0FBQ0EsZ0NBQWdDLDhFQUFTLGlCQUFpQiw4RUFBUztBQUNuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLDJEQUFXO0FBQ2pEO0FBQ0E7QUFDQSxzQ0FBc0MsMkRBQVcsd0JBQXdCLDJEQUFXO0FBQ3BGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzRkFBc0Y7QUFDdEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnRUFBZ0UseURBQXlEO0FBQ3pIO0FBQ0E7QUFDQTtBQUNBLDREQUE0RCw0REFBNEQ7QUFDeEg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyxrRUFBa0U7QUFDNUc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnRUFBZ0UseURBQXlEO0FBQ3pIO0FBQ0E7QUFDQTtBQUNBLDREQUE0RCw0REFBNEQ7QUFDeEg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsK0RBQU07QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksaUVBQVE7QUFDcEI7QUFDQTtBQUNBLHFCQUFxQiwrREFBTTtBQUMzQix1QkFBdUIsaUVBQVE7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsdURBQUc7QUFDbkI7QUFDQSxnRkFBZ0Y7QUFDaEY7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXlELGlEQUFpRCxFQUFFO0FBQzVHO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRCxRQUFRO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlEQUF5RCxpREFBaUQsRUFBRTtBQUM1RztBQUNBO0FBQ0E7QUFDQSxxREFBcUQsUUFBUTtBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXlELGlEQUFpRCxFQUFFO0FBQzVHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQsUUFBUTtBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsdURBQUc7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1FQUFtRSxRQUFRO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsUUFBUTtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyxRQUFRO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxRQUFRO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0QsNkVBQXFCO0FBQ3ZFO0FBQ0E7QUFDQSx5Q0FBeUMsUUFBUTtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxRQUFRO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxRQUFRO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDLFFBQVE7QUFDckQ7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELFFBQVE7QUFDeEQ7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDLFFBQVE7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLFFBQVE7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLFFBQVE7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCxRQUFRO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QyxRQUFRO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRUFBMkU7QUFDM0UsaUVBQWlFO0FBQ2pFO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsOEJBQThCO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLHFCQUFxQjtBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsRUFBRTtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLGtDQUFrQyxFQUFFO0FBQ3BDLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLG1DQUFtQyxFQUFFO0FBQ3JDLG1DQUFtQztBQUNuQyxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLFFBQVE7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QyxRQUFRO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDREQUE0RCw0QkFBNEIsRUFBRTtBQUMxRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsMkJBQTJCLFFBQVE7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsUUFBUTtBQUNuQztBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsUUFBUTtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZEQUE2RCx1QkFBdUIsRUFBRTtBQUN0RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQsdUJBQXVCLEVBQUU7QUFDNUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDREQUE0RCw0QkFBNEIsRUFBRTtBQUMxRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsMkJBQTJCLFFBQVE7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsUUFBUTtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQsdUJBQXVCLEVBQUU7QUFDdEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsUUFBUTtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsUUFBUTtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0NBQStDLHFEQUFxRCxFQUFFO0FBQ3RHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQywwQ0FBMEMsRUFBRTtBQUMzRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLFFBQVE7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVELGdCQUFnQiw2RUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxnQkFBZ0IsdURBQUc7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsdURBQUc7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLHVEQUFHO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qix1REFBRztBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsdURBQUc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLFFBQVE7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRCxRQUFRO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsUUFBUTtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHVCQUF1QjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFELFFBQVE7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QyxRQUFRO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsdURBQUc7QUFDMUIsSUFBSSx1REFBRztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsdURBQUc7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLHVEQUFHO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQix1REFBRztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1GQUFtRiwyREFBTztBQUMxRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsdURBQUc7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsdURBQUc7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkMsUUFBUTtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlEQUF5RCxRQUFRO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELFFBQVE7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkMsUUFBUTtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZEQUE2RCxRQUFRO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0QsUUFBUTtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRUFBMkU7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxRQUFRLGlFQUFRLFFBQVEsaUVBQVE7QUFDaEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0RBQWtELFFBQVE7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRCxRQUFRO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLGlFQUFRLEtBQUssaUVBQVE7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGlFQUFRLFFBQVEsaUVBQVE7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsaUVBQVEsS0FBSyxpRUFBUTtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLDRFQUFxQjtBQUNuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixpRUFBUSxRQUFRLGlFQUFRO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsaUVBQVEsUUFBUSxpRUFBUTtBQUM1QztBQUNBLHdDQUF3QyxzRUFBc0I7QUFDOUQsdUJBQXVCLHVFQUF1QjtBQUM5QztBQUNBO0FBQ0Esb0JBQW9CLGlFQUFRLFFBQVEsaUVBQVE7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQsYUFBYSx5REFBb0I7QUFDakM7QUFDQSxzQ0FBc0MsNEVBQXFCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLDhCQUE4QixFQUFFO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxpRUFBUSxRQUFRLGlFQUFRO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsNkRBQU0sRUFBRSw4RUFBUztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1ELGNBQWMsRUFBRTtBQUNuRSwrQ0FBK0MsZUFBZSxFQUFFO0FBQ2hFO0FBQ0E7QUFDQSxvQ0FBb0MsaUVBQVE7QUFDNUM7QUFDQTtBQUNBLDhEQUE4RCxRQUFRO0FBQ3RFO0FBQ0E7QUFDQSwwQkFBMEIsK0RBQU07QUFDaEMsMEJBQTBCLG1FQUFjO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLCtEQUFNO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELG9DQUFvQyxFQUFFO0FBQ3RGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLFFBQVE7QUFDcEQ7QUFDQSwrQkFBK0IsK0RBQU07QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCxRQUFRO0FBQ3hEO0FBQ0E7QUFDQSw4REFBOEQsa0JBQWtCLEVBQUU7QUFDbEYsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkMsUUFBUTtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RCw2RUFBcUI7QUFDNUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0QsUUFBUTtBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsNkVBQXFCO0FBQ3ZEO0FBQ0E7QUFDQSxrQ0FBa0MsNkVBQXFCO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0Q7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9ELFFBQVE7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLGFBQWE7QUFDMUMsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsK0RBQWU7QUFDNUQsdUNBQXVDLG9FQUFTO0FBQ2hEO0FBQ0EscURBQXFELDJEQUFPO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1ELFFBQVE7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyxRQUFRO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLCtEQUFNO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLHVEQUFHO0FBQ2xDLCtCQUErQix1REFBRztBQUNsQztBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsdURBQUc7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlFQUFpRSx1REFBRztBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsdURBQUc7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsdURBQUc7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLHVEQUFHO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0NBQStDLHVEQUFHO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RDtBQUN2RCxxREFBcUQsdURBQUc7QUFDeEQ7QUFDQTtBQUNBO0FBQ0Esc0VBQXNFLFFBQVE7QUFDOUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4REFBOEQsUUFBUTtBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhEQUE4RCxRQUFRO0FBQ3RFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwREFBMEQsUUFBUTtBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNELFFBQVE7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLFFBQVE7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLGlFQUFRLFFBQVEsaUVBQVE7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQsNkJBQTZCLEVBQUU7QUFDcEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdEQUF3RCxRQUFRO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEseURBQ2M7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLHNFQUFzQixDQUFDLGlFQUFTO0FBQ3ZFO0FBQ0E7QUFDQSx1Q0FBdUMsdUVBQXVCLENBQUMsaUVBQVM7QUFDeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwREFBMEQsUUFBUTtBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpRUFBaUUsUUFBUTtBQUN6RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG1FQUFjO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixpRUFBUSxRQUFRLGlFQUFRO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsc0VBQXNCO0FBQ3pDLG1CQUFtQix1RUFBdUI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksaUVBQVEsUUFBUSxpRUFBUTtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVELG1CQUFtQixpRUFBUTtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxvQ0FBb0MsNERBQVE7QUFDNUM7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxtRUFBYztBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsbUVBQWM7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsNEVBQXFCO0FBQ3REO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRCxRQUFRO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLDRFQUFxQjtBQUN0RCx5QkFBeUIsdURBQUc7QUFDNUI7QUFDQSxxREFBcUQsUUFBUTtBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsNkRBQTZELHVEQUFHO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyREFBMkQsNEJBQTRCO0FBQ3ZGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXlELHNDQUFzQyxFQUFFO0FBQ2pHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLG1DQUFtQyxFQUFFO0FBQ2hGLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLHVDQUF1QyxtQkFBbUIsRUFBRTtBQUM1RDtBQUNBO0FBQ0EsMkVBQTJFLG1CQUFtQixFQUFFO0FBQ2hHLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUywrQkFBK0Isb0dBQW9HLEVBQUU7QUFDOUk7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0QsdURBQUc7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsaUVBQVEsZ0JBQWdCLGlFQUFRO0FBQ2hEO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckM7QUFDQSw0Q0FBNEMsdURBQUc7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkMscUNBQXFDLEVBQUU7QUFDbEYsMkNBQTJDLGVBQWUsRUFBRTtBQUM1RDtBQUNBLHNFQUFzRSxlQUFlLEVBQUU7QUFDdkYsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLG1GQUFNO0FBQ2Q7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGlFQUFRLGdCQUFnQixpRUFBUTtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyxRQUFRO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxRQUFRO0FBQ3BEO0FBQ0E7QUFDQSwrQkFBK0IsbUJBQW1CO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLFFBQVE7QUFDbEQ7QUFDQTtBQUNBLCtCQUErQixtQkFBbUI7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0QsUUFBUTtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRCx1REFBRztBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSwrRUFBK0U7QUFDL0UsMEVBQTBFO0FBQzFFO0FBQ0E7QUFDQSx5Q0FBeUMsNERBQVk7QUFDckQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksaUVBQVEsUUFBUSxpRUFBUTtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLGlFQUFRLFFBQVEsaUVBQVE7QUFDcEM7QUFDQTtBQUNBLG9CQUFvQixpRUFBUSxnQkFBZ0IsaUVBQVE7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGlFQUFRLGdCQUFnQixpRUFBUTtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGlFQUFRLGdCQUFnQixpRUFBUTtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixpRUFBUSxnQkFBZ0IsaUVBQVE7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsaUVBQVEsZ0JBQWdCLGlFQUFRO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsaUVBQVEsZ0JBQWdCLGlFQUFRO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsaUVBQVEsZ0JBQWdCLGlFQUFRO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGlFQUFRLGdCQUFnQixpRUFBUTtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHlEQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxjQUFjO0FBQzlDO0FBQ0E7QUFDQSxnQkFBZ0IsaUVBQVEsZ0JBQWdCLGlFQUFRO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IseURBQW9CO0FBQ3BDO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsaUVBQVEsZ0JBQWdCLGlFQUFRO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsaUVBQVE7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLGlFQUFRO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxpRUFBUSxRQUFRLGlFQUFRO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsdUJBQXVCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBLFFBQVEsaUVBQVE7QUFDaEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyx1REFBRztBQUN0QywyQkFBMkI7QUFDM0I7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBLHdCQUF3Qix1REFBRztBQUMzQjtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsOEVBQVM7QUFDeEM7QUFDQSxDQUFDOztBQUU4bEM7QUFDL2xDIiwiZmlsZSI6IjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET00sIEZFQVRVUkUsIFBMQVRGT1JNIH0gZnJvbSAnYXVyZWxpYS1wYWwnO1xuaW1wb3J0IHsgVGVtcGxhdGVSZWdpc3RyeUVudHJ5LCBMb2FkZXIgfSBmcm9tICdhdXJlbGlhLWxvYWRlcic7XG5pbXBvcnQgeyBtZXRhZGF0YSwgT3JpZ2luLCBwcm90b2NvbCB9IGZyb20gJ2F1cmVsaWEtbWV0YWRhdGEnO1xuaW1wb3J0IHsgcmVsYXRpdmVUb0ZpbGUgfSBmcm9tICdhdXJlbGlhLXBhdGgnO1xuaW1wb3J0ICogYXMgTG9nTWFuYWdlciBmcm9tICdhdXJlbGlhLWxvZ2dpbmcnO1xuaW1wb3J0IHsgc3Vic2NyaWJlckNvbGxlY3Rpb24sIGJpbmRpbmdNb2RlLCBjcmVhdGVPdmVycmlkZUNvbnRleHQsIFZhbHVlQ29udmVydGVyUmVzb3VyY2UsIEJpbmRpbmdCZWhhdmlvclJlc291cmNlLCBPYnNlcnZlckxvY2F0b3IsIGNhbWVsQ2FzZSwgRXZlbnRNYW5hZ2VyIH0gZnJvbSAnYXVyZWxpYS1iaW5kaW5nJztcbmltcG9ydCB7IENvbnRhaW5lciwgcmVzb2x2ZXIsIGluamVjdCB9IGZyb20gJ2F1cmVsaWEtZGVwZW5kZW5jeS1pbmplY3Rpb24nO1xuaW1wb3J0IHsgVGFza1F1ZXVlIH0gZnJvbSAnYXVyZWxpYS10YXNrLXF1ZXVlJztcblxudmFyIEVsZW1lbnRFdmVudHMgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gRWxlbWVudEV2ZW50cyhlbGVtZW50KSB7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSB7fTtcclxuICAgIH1cclxuICAgIEVsZW1lbnRFdmVudHMucHJvdG90eXBlLl9lbnF1ZXVlSGFuZGxlciA9IGZ1bmN0aW9uIChoYW5kbGVyKSB7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zW2hhbmRsZXIuZXZlbnROYW1lXSA9IHRoaXMuc3Vic2NyaXB0aW9uc1toYW5kbGVyLmV2ZW50TmFtZV0gfHwgW107XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zW2hhbmRsZXIuZXZlbnROYW1lXS5wdXNoKGhhbmRsZXIpO1xyXG4gICAgfTtcclxuICAgIEVsZW1lbnRFdmVudHMucHJvdG90eXBlLl9kZXF1ZXVlSGFuZGxlciA9IGZ1bmN0aW9uIChoYW5kbGVyKSB7XHJcbiAgICAgICAgdmFyIGluZGV4O1xyXG4gICAgICAgIHZhciBzdWJzY3JpcHRpb25zID0gdGhpcy5zdWJzY3JpcHRpb25zW2hhbmRsZXIuZXZlbnROYW1lXTtcclxuICAgICAgICBpZiAoc3Vic2NyaXB0aW9ucykge1xyXG4gICAgICAgICAgICBpbmRleCA9IHN1YnNjcmlwdGlvbnMuaW5kZXhPZihoYW5kbGVyKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbnMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaGFuZGxlcjtcclxuICAgIH07XHJcbiAgICBFbGVtZW50RXZlbnRzLnByb3RvdHlwZS5wdWJsaXNoID0gZnVuY3Rpb24gKGV2ZW50TmFtZSwgZGV0YWlsLCBidWJibGVzLCBjYW5jZWxhYmxlKSB7XHJcbiAgICAgICAgaWYgKGRldGFpbCA9PT0gdm9pZCAwKSB7IGRldGFpbCA9IHt9OyB9XHJcbiAgICAgICAgaWYgKGJ1YmJsZXMgPT09IHZvaWQgMCkgeyBidWJibGVzID0gdHJ1ZTsgfVxyXG4gICAgICAgIGlmIChjYW5jZWxhYmxlID09PSB2b2lkIDApIHsgY2FuY2VsYWJsZSA9IHRydWU7IH1cclxuICAgICAgICB2YXIgZXZlbnQgPSBET00uY3JlYXRlQ3VzdG9tRXZlbnQoZXZlbnROYW1lLCB7IGNhbmNlbGFibGU6IGNhbmNlbGFibGUsIGJ1YmJsZXM6IGJ1YmJsZXMsIGRldGFpbDogZGV0YWlsIH0pO1xyXG4gICAgICAgIHRoaXMuZWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcclxuICAgIH07XHJcbiAgICBFbGVtZW50RXZlbnRzLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoZXZlbnROYW1lLCBoYW5kbGVyLCBjYXB0dXJlT3JPcHRpb25zKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGlmIChjYXB0dXJlT3JPcHRpb25zID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIGNhcHR1cmVPck9wdGlvbnMgPSBFbGVtZW50RXZlbnRzLmRlZmF1bHRMaXN0ZW5lck9wdGlvbnM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGV2ZW50SGFuZGxlciA9IG5ldyBFdmVudEhhbmRsZXJJbXBsKHRoaXMsIGV2ZW50TmFtZSwgaGFuZGxlciwgY2FwdHVyZU9yT3B0aW9ucywgZmFsc2UpO1xyXG4gICAgICAgICAgICByZXR1cm4gZXZlbnRIYW5kbGVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfTtcclxuICAgIEVsZW1lbnRFdmVudHMucHJvdG90eXBlLnN1YnNjcmliZU9uY2UgPSBmdW5jdGlvbiAoZXZlbnROYW1lLCBoYW5kbGVyLCBjYXB0dXJlT3JPcHRpb25zKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGlmIChjYXB0dXJlT3JPcHRpb25zID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIGNhcHR1cmVPck9wdGlvbnMgPSBFbGVtZW50RXZlbnRzLmRlZmF1bHRMaXN0ZW5lck9wdGlvbnM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGV2ZW50SGFuZGxlciA9IG5ldyBFdmVudEhhbmRsZXJJbXBsKHRoaXMsIGV2ZW50TmFtZSwgaGFuZGxlciwgY2FwdHVyZU9yT3B0aW9ucywgdHJ1ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBldmVudEhhbmRsZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9O1xyXG4gICAgRWxlbWVudEV2ZW50cy5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uIChldmVudE5hbWUpIHtcclxuICAgICAgICBpZiAoZXZlbnROYW1lICYmIHR5cGVvZiBldmVudE5hbWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHZhciBzdWJzY3JpcHRpb25zID0gdGhpcy5zdWJzY3JpcHRpb25zW2V2ZW50TmFtZV07XHJcbiAgICAgICAgICAgIGlmIChzdWJzY3JpcHRpb25zKSB7XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoc3Vic2NyaXB0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc3Vic2NyaXB0aW9uID0gc3Vic2NyaXB0aW9ucy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi5kaXNwb3NlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmRpc3Bvc2VBbGwoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgRWxlbWVudEV2ZW50cy5wcm90b3R5cGUuZGlzcG9zZUFsbCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5zdWJzY3JpcHRpb25zKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzcG9zZShrZXkpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBFbGVtZW50RXZlbnRzLmRlZmF1bHRMaXN0ZW5lck9wdGlvbnMgPSB0cnVlO1xyXG4gICAgcmV0dXJuIEVsZW1lbnRFdmVudHM7XHJcbn0oKSk7XHJcbnZhciBFdmVudEhhbmRsZXJJbXBsID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEV2ZW50SGFuZGxlckltcGwob3duZXIsIGV2ZW50TmFtZSwgaGFuZGxlciwgY2FwdHVyZU9yT3B0aW9ucywgb25jZSkge1xyXG4gICAgICAgIHRoaXMub3duZXIgPSBvd25lcjtcclxuICAgICAgICB0aGlzLmV2ZW50TmFtZSA9IGV2ZW50TmFtZTtcclxuICAgICAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyO1xyXG4gICAgICAgIHRoaXMuY2FwdHVyZSA9IHR5cGVvZiBjYXB0dXJlT3JPcHRpb25zID09PSAnYm9vbGVhbicgPyBjYXB0dXJlT3JPcHRpb25zIDogY2FwdHVyZU9yT3B0aW9ucy5jYXB0dXJlO1xyXG4gICAgICAgIHRoaXMuYnViYmxlcyA9ICF0aGlzLmNhcHR1cmU7XHJcbiAgICAgICAgdGhpcy5jYXB0dXJlT3JPcHRpb25zID0gY2FwdHVyZU9yT3B0aW9ucztcclxuICAgICAgICB0aGlzLm9uY2UgPSBvbmNlO1xyXG4gICAgICAgIG93bmVyLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIHRoaXMsIGNhcHR1cmVPck9wdGlvbnMpO1xyXG4gICAgICAgIG93bmVyLl9lbnF1ZXVlSGFuZGxlcih0aGlzKTtcclxuICAgIH1cclxuICAgIEV2ZW50SGFuZGxlckltcGwucHJvdG90eXBlLmhhbmRsZUV2ZW50ID0gZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICB2YXIgZm4gPSB0aGlzLmhhbmRsZXI7XHJcbiAgICAgICAgZm4oZSk7XHJcbiAgICAgICAgaWYgKHRoaXMub25jZSkge1xyXG4gICAgICAgICAgICB0aGlzLmRpc3Bvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgRXZlbnRIYW5kbGVySW1wbC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLm93bmVyLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLmV2ZW50TmFtZSwgdGhpcywgdGhpcy5jYXB0dXJlT3JPcHRpb25zKTtcclxuICAgICAgICB0aGlzLm93bmVyLl9kZXF1ZXVlSGFuZGxlcih0aGlzKTtcclxuICAgICAgICB0aGlzLm93bmVyID0gdGhpcy5oYW5kbGVyID0gbnVsbDtcclxuICAgIH07XHJcbiAgICByZXR1cm4gRXZlbnRIYW5kbGVySW1wbDtcclxufSgpKTtcblxudmFyIFJlc291cmNlTG9hZENvbnRleHQgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gUmVzb3VyY2VMb2FkQ29udGV4dCgpIHtcclxuICAgICAgICB0aGlzLmRlcGVuZGVuY2llcyA9IHt9O1xyXG4gICAgfVxyXG4gICAgUmVzb3VyY2VMb2FkQ29udGV4dC5wcm90b3R5cGUuYWRkRGVwZW5kZW5jeSA9IGZ1bmN0aW9uICh1cmwpIHtcclxuICAgICAgICB0aGlzLmRlcGVuZGVuY2llc1t1cmxdID0gdHJ1ZTtcclxuICAgIH07XHJcbiAgICBSZXNvdXJjZUxvYWRDb250ZXh0LnByb3RvdHlwZS5oYXNEZXBlbmRlbmN5ID0gZnVuY3Rpb24gKHVybCkge1xyXG4gICAgICAgIHJldHVybiB1cmwgaW4gdGhpcy5kZXBlbmRlbmNpZXM7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIFJlc291cmNlTG9hZENvbnRleHQ7XHJcbn0oKSk7XHJcbnZhciBWaWV3Q29tcGlsZUluc3RydWN0aW9uID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIFZpZXdDb21waWxlSW5zdHJ1Y3Rpb24odGFyZ2V0U2hhZG93RE9NLCBjb21waWxlU3Vycm9nYXRlKSB7XHJcbiAgICAgICAgaWYgKHRhcmdldFNoYWRvd0RPTSA9PT0gdm9pZCAwKSB7IHRhcmdldFNoYWRvd0RPTSA9IGZhbHNlOyB9XHJcbiAgICAgICAgaWYgKGNvbXBpbGVTdXJyb2dhdGUgPT09IHZvaWQgMCkgeyBjb21waWxlU3Vycm9nYXRlID0gZmFsc2U7IH1cclxuICAgICAgICB0aGlzLnRhcmdldFNoYWRvd0RPTSA9IHRhcmdldFNoYWRvd0RPTTtcclxuICAgICAgICB0aGlzLmNvbXBpbGVTdXJyb2dhdGUgPSBjb21waWxlU3Vycm9nYXRlO1xyXG4gICAgICAgIHRoaXMuYXNzb2NpYXRlZE1vZHVsZUlkID0gbnVsbDtcclxuICAgIH1cclxuICAgIFZpZXdDb21waWxlSW5zdHJ1Y3Rpb24ubm9ybWFsID0gbmV3IFZpZXdDb21waWxlSW5zdHJ1Y3Rpb24oKTtcclxuICAgIHJldHVybiBWaWV3Q29tcGlsZUluc3RydWN0aW9uO1xyXG59KCkpO1xyXG52YXIgQmVoYXZpb3JJbnN0cnVjdGlvbiA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBCZWhhdmlvckluc3RydWN0aW9uKCkge1xyXG4gICAgfVxyXG4gICAgQmVoYXZpb3JJbnN0cnVjdGlvbi5lbmhhbmNlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBpbnN0cnVjdGlvbiA9IG5ldyBCZWhhdmlvckluc3RydWN0aW9uKCk7XHJcbiAgICAgICAgaW5zdHJ1Y3Rpb24uZW5oYW5jZSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIGluc3RydWN0aW9uO1xyXG4gICAgfTtcclxuICAgIEJlaGF2aW9ySW5zdHJ1Y3Rpb24udW5pdFRlc3QgPSBmdW5jdGlvbiAodHlwZSwgYXR0cmlidXRlcykge1xyXG4gICAgICAgIHZhciBpbnN0cnVjdGlvbiA9IG5ldyBCZWhhdmlvckluc3RydWN0aW9uKCk7XHJcbiAgICAgICAgaW5zdHJ1Y3Rpb24udHlwZSA9IHR5cGU7XHJcbiAgICAgICAgaW5zdHJ1Y3Rpb24uYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMgfHwge307XHJcbiAgICAgICAgcmV0dXJuIGluc3RydWN0aW9uO1xyXG4gICAgfTtcclxuICAgIEJlaGF2aW9ySW5zdHJ1Y3Rpb24uZWxlbWVudCA9IGZ1bmN0aW9uIChub2RlLCB0eXBlKSB7XHJcbiAgICAgICAgdmFyIGluc3RydWN0aW9uID0gbmV3IEJlaGF2aW9ySW5zdHJ1Y3Rpb24oKTtcclxuICAgICAgICBpbnN0cnVjdGlvbi50eXBlID0gdHlwZTtcclxuICAgICAgICBpbnN0cnVjdGlvbi5hdHRyaWJ1dGVzID0ge307XHJcbiAgICAgICAgaW5zdHJ1Y3Rpb24uYW5jaG9ySXNDb250YWluZXIgPSAhKG5vZGUuaGFzQXR0cmlidXRlKCdjb250YWluZXJsZXNzJykgfHwgdHlwZS5jb250YWluZXJsZXNzKTtcclxuICAgICAgICBpbnN0cnVjdGlvbi5pbml0aWF0ZWRCeUJlaGF2aW9yID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb247XHJcbiAgICB9O1xyXG4gICAgQmVoYXZpb3JJbnN0cnVjdGlvbi5hdHRyaWJ1dGUgPSBmdW5jdGlvbiAoYXR0ck5hbWUsIHR5cGUpIHtcclxuICAgICAgICB2YXIgaW5zdHJ1Y3Rpb24gPSBuZXcgQmVoYXZpb3JJbnN0cnVjdGlvbigpO1xyXG4gICAgICAgIGluc3RydWN0aW9uLmF0dHJOYW1lID0gYXR0ck5hbWU7XHJcbiAgICAgICAgaW5zdHJ1Y3Rpb24udHlwZSA9IHR5cGUgfHwgbnVsbDtcclxuICAgICAgICBpbnN0cnVjdGlvbi5hdHRyaWJ1dGVzID0ge307XHJcbiAgICAgICAgcmV0dXJuIGluc3RydWN0aW9uO1xyXG4gICAgfTtcclxuICAgIEJlaGF2aW9ySW5zdHJ1Y3Rpb24uZHluYW1pYyA9IGZ1bmN0aW9uIChob3N0LCB2aWV3TW9kZWwsIHZpZXdGYWN0b3J5KSB7XHJcbiAgICAgICAgdmFyIGluc3RydWN0aW9uID0gbmV3IEJlaGF2aW9ySW5zdHJ1Y3Rpb24oKTtcclxuICAgICAgICBpbnN0cnVjdGlvbi5ob3N0ID0gaG9zdDtcclxuICAgICAgICBpbnN0cnVjdGlvbi52aWV3TW9kZWwgPSB2aWV3TW9kZWw7XHJcbiAgICAgICAgaW5zdHJ1Y3Rpb24udmlld0ZhY3RvcnkgPSB2aWV3RmFjdG9yeTtcclxuICAgICAgICBpbnN0cnVjdGlvbi5pbmhlcml0QmluZGluZ0NvbnRleHQgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvbjtcclxuICAgIH07XHJcbiAgICBCZWhhdmlvckluc3RydWN0aW9uLm5vcm1hbCA9IG5ldyBCZWhhdmlvckluc3RydWN0aW9uKCk7XHJcbiAgICByZXR1cm4gQmVoYXZpb3JJbnN0cnVjdGlvbjtcclxufSgpKTtcclxudmFyIGJpUHJvdG8gPSBCZWhhdmlvckluc3RydWN0aW9uLnByb3RvdHlwZTtcclxuYmlQcm90by5pbml0aWF0ZWRCeUJlaGF2aW9yID0gZmFsc2U7XHJcbmJpUHJvdG8uZW5oYW5jZSA9IGZhbHNlO1xyXG5iaVByb3RvLnBhcnRSZXBsYWNlbWVudHMgPSBudWxsO1xyXG5iaVByb3RvLnZpZXdGYWN0b3J5ID0gbnVsbDtcclxuYmlQcm90by5vcmlnaW5hbEF0dHJOYW1lID0gbnVsbDtcclxuYmlQcm90by5za2lwQ29udGVudFByb2Nlc3NpbmcgPSBmYWxzZTtcclxuYmlQcm90by5jb250ZW50RmFjdG9yeSA9IG51bGw7XHJcbmJpUHJvdG8udmlld01vZGVsID0gbnVsbDtcclxuYmlQcm90by5hbmNob3JJc0NvbnRhaW5lciA9IGZhbHNlO1xyXG5iaVByb3RvLmhvc3QgPSBudWxsO1xyXG5iaVByb3RvLmF0dHJpYnV0ZXMgPSBudWxsO1xyXG5iaVByb3RvLnR5cGUgPSBudWxsO1xyXG5iaVByb3RvLmF0dHJOYW1lID0gbnVsbDtcclxuYmlQcm90by5pbmhlcml0QmluZGluZ0NvbnRleHQgPSBmYWxzZTtcclxudmFyIFRhcmdldEluc3RydWN0aW9uID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIFRhcmdldEluc3RydWN0aW9uKCkge1xyXG4gICAgfVxyXG4gICAgVGFyZ2V0SW5zdHJ1Y3Rpb24uc2hhZG93U2xvdCA9IGZ1bmN0aW9uIChwYXJlbnRJbmplY3RvcklkKSB7XHJcbiAgICAgICAgdmFyIGluc3RydWN0aW9uID0gbmV3IFRhcmdldEluc3RydWN0aW9uKCk7XHJcbiAgICAgICAgaW5zdHJ1Y3Rpb24ucGFyZW50SW5qZWN0b3JJZCA9IHBhcmVudEluamVjdG9ySWQ7XHJcbiAgICAgICAgaW5zdHJ1Y3Rpb24uc2hhZG93U2xvdCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIGluc3RydWN0aW9uO1xyXG4gICAgfTtcclxuICAgIFRhcmdldEluc3RydWN0aW9uLmNvbnRlbnRFeHByZXNzaW9uID0gZnVuY3Rpb24gKGV4cHJlc3Npb24pIHtcclxuICAgICAgICB2YXIgaW5zdHJ1Y3Rpb24gPSBuZXcgVGFyZ2V0SW5zdHJ1Y3Rpb24oKTtcclxuICAgICAgICBpbnN0cnVjdGlvbi5jb250ZW50RXhwcmVzc2lvbiA9IGV4cHJlc3Npb247XHJcbiAgICAgICAgcmV0dXJuIGluc3RydWN0aW9uO1xyXG4gICAgfTtcclxuICAgIFRhcmdldEluc3RydWN0aW9uLmxldEVsZW1lbnQgPSBmdW5jdGlvbiAoZXhwcmVzc2lvbnMpIHtcclxuICAgICAgICB2YXIgaW5zdHJ1Y3Rpb24gPSBuZXcgVGFyZ2V0SW5zdHJ1Y3Rpb24oKTtcclxuICAgICAgICBpbnN0cnVjdGlvbi5leHByZXNzaW9ucyA9IGV4cHJlc3Npb25zO1xyXG4gICAgICAgIGluc3RydWN0aW9uLmxldEVsZW1lbnQgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvbjtcclxuICAgIH07XHJcbiAgICBUYXJnZXRJbnN0cnVjdGlvbi5saWZ0aW5nID0gZnVuY3Rpb24gKHBhcmVudEluamVjdG9ySWQsIGxpZnRpbmdJbnN0cnVjdGlvbikge1xyXG4gICAgICAgIHZhciBpbnN0cnVjdGlvbiA9IG5ldyBUYXJnZXRJbnN0cnVjdGlvbigpO1xyXG4gICAgICAgIGluc3RydWN0aW9uLnBhcmVudEluamVjdG9ySWQgPSBwYXJlbnRJbmplY3RvcklkO1xyXG4gICAgICAgIGluc3RydWN0aW9uLmV4cHJlc3Npb25zID0gVGFyZ2V0SW5zdHJ1Y3Rpb24ubm9FeHByZXNzaW9ucztcclxuICAgICAgICBpbnN0cnVjdGlvbi5iZWhhdmlvckluc3RydWN0aW9ucyA9IFtsaWZ0aW5nSW5zdHJ1Y3Rpb25dO1xyXG4gICAgICAgIGluc3RydWN0aW9uLnZpZXdGYWN0b3J5ID0gbGlmdGluZ0luc3RydWN0aW9uLnZpZXdGYWN0b3J5O1xyXG4gICAgICAgIGluc3RydWN0aW9uLnByb3ZpZGVycyA9IFtsaWZ0aW5nSW5zdHJ1Y3Rpb24udHlwZS50YXJnZXRdO1xyXG4gICAgICAgIGluc3RydWN0aW9uLmxpZnRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvbjtcclxuICAgIH07XHJcbiAgICBUYXJnZXRJbnN0cnVjdGlvbi5ub3JtYWwgPSBmdW5jdGlvbiAoaW5qZWN0b3JJZCwgcGFyZW50SW5qZWN0b3JJZCwgcHJvdmlkZXJzLCBiZWhhdmlvckluc3RydWN0aW9ucywgZXhwcmVzc2lvbnMsIGVsZW1lbnRJbnN0cnVjdGlvbikge1xyXG4gICAgICAgIHZhciBpbnN0cnVjdGlvbiA9IG5ldyBUYXJnZXRJbnN0cnVjdGlvbigpO1xyXG4gICAgICAgIGluc3RydWN0aW9uLmluamVjdG9ySWQgPSBpbmplY3RvcklkO1xyXG4gICAgICAgIGluc3RydWN0aW9uLnBhcmVudEluamVjdG9ySWQgPSBwYXJlbnRJbmplY3RvcklkO1xyXG4gICAgICAgIGluc3RydWN0aW9uLnByb3ZpZGVycyA9IHByb3ZpZGVycztcclxuICAgICAgICBpbnN0cnVjdGlvbi5iZWhhdmlvckluc3RydWN0aW9ucyA9IGJlaGF2aW9ySW5zdHJ1Y3Rpb25zO1xyXG4gICAgICAgIGluc3RydWN0aW9uLmV4cHJlc3Npb25zID0gZXhwcmVzc2lvbnM7XHJcbiAgICAgICAgaW5zdHJ1Y3Rpb24uYW5jaG9ySXNDb250YWluZXIgPSBlbGVtZW50SW5zdHJ1Y3Rpb24gPyBlbGVtZW50SW5zdHJ1Y3Rpb24uYW5jaG9ySXNDb250YWluZXIgOiB0cnVlO1xyXG4gICAgICAgIGluc3RydWN0aW9uLmVsZW1lbnRJbnN0cnVjdGlvbiA9IGVsZW1lbnRJbnN0cnVjdGlvbjtcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb247XHJcbiAgICB9O1xyXG4gICAgVGFyZ2V0SW5zdHJ1Y3Rpb24uc3Vycm9nYXRlID0gZnVuY3Rpb24gKHByb3ZpZGVycywgYmVoYXZpb3JJbnN0cnVjdGlvbnMsIGV4cHJlc3Npb25zLCB2YWx1ZXMpIHtcclxuICAgICAgICB2YXIgaW5zdHJ1Y3Rpb24gPSBuZXcgVGFyZ2V0SW5zdHJ1Y3Rpb24oKTtcclxuICAgICAgICBpbnN0cnVjdGlvbi5leHByZXNzaW9ucyA9IGV4cHJlc3Npb25zO1xyXG4gICAgICAgIGluc3RydWN0aW9uLmJlaGF2aW9ySW5zdHJ1Y3Rpb25zID0gYmVoYXZpb3JJbnN0cnVjdGlvbnM7XHJcbiAgICAgICAgaW5zdHJ1Y3Rpb24ucHJvdmlkZXJzID0gcHJvdmlkZXJzO1xyXG4gICAgICAgIGluc3RydWN0aW9uLnZhbHVlcyA9IHZhbHVlcztcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb247XHJcbiAgICB9O1xyXG4gICAgVGFyZ2V0SW5zdHJ1Y3Rpb24ubm9FeHByZXNzaW9ucyA9IE9iamVjdC5mcmVlemUoW10pO1xyXG4gICAgcmV0dXJuIFRhcmdldEluc3RydWN0aW9uO1xyXG59KCkpO1xyXG52YXIgdGlQcm90byA9IFRhcmdldEluc3RydWN0aW9uLnByb3RvdHlwZTtcclxudGlQcm90by5pbmplY3RvcklkID0gbnVsbDtcclxudGlQcm90by5wYXJlbnRJbmplY3RvcklkID0gbnVsbDtcclxudGlQcm90by5zaGFkb3dTbG90ID0gZmFsc2U7XHJcbnRpUHJvdG8uc2xvdE5hbWUgPSBudWxsO1xyXG50aVByb3RvLnNsb3RGYWxsYmFja0ZhY3RvcnkgPSBudWxsO1xyXG50aVByb3RvLmNvbnRlbnRFeHByZXNzaW9uID0gbnVsbDtcclxudGlQcm90by5sZXRFbGVtZW50ID0gZmFsc2U7XHJcbnRpUHJvdG8uZXhwcmVzc2lvbnMgPSBudWxsO1xyXG50aVByb3RvLmV4cHJlc3Npb25zID0gbnVsbDtcclxudGlQcm90by5wcm92aWRlcnMgPSBudWxsO1xyXG50aVByb3RvLnZpZXdGYWN0b3J5ID0gbnVsbDtcclxudGlQcm90by5hbmNob3JJc0NvbnRhaW5lciA9IGZhbHNlO1xyXG50aVByb3RvLmVsZW1lbnRJbnN0cnVjdGlvbiA9IG51bGw7XHJcbnRpUHJvdG8ubGlmdGluZyA9IGZhbHNlO1xyXG50aVByb3RvLnZhbHVlcyA9IG51bGw7XG5cbi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcblxyXG5mdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59XG5cbnZhciBjYXBpdGFsTWF0Y2hlciA9IC8oW0EtWl0pL2c7XHJcbmZ1bmN0aW9uIGFkZEh5cGhlbkFuZExvd2VyKGNoYXIpIHtcclxuICAgIHJldHVybiAnLScgKyBjaGFyLnRvTG93ZXJDYXNlKCk7XHJcbn1cclxuZnVuY3Rpb24gX2h5cGhlbmF0ZShuYW1lKSB7XHJcbiAgICByZXR1cm4gKG5hbWUuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBuYW1lLnNsaWNlKDEpKS5yZXBsYWNlKGNhcGl0YWxNYXRjaGVyLCBhZGRIeXBoZW5BbmRMb3dlcik7XHJcbn1cclxuZnVuY3Rpb24gX2lzQWxsV2hpdGVzcGFjZShub2RlKSB7XHJcbiAgICByZXR1cm4gIShub2RlLmF1SW50ZXJwb2xhdGlvblRhcmdldCB8fCAoL1teXFx0XFxuXFxyIF0vLnRlc3Qobm9kZS50ZXh0Q29udGVudCkpKTtcclxufVxuXG52YXIgQmVoYXZpb3JQcm9wZXJ0eU9ic2VydmVyID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEJlaGF2aW9yUHJvcGVydHlPYnNlcnZlcih0YXNrUXVldWUsIG9iaiwgcHJvcGVydHlOYW1lLCBzZWxmU3Vic2NyaWJlciwgaW5pdGlhbFZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy50YXNrUXVldWUgPSB0YXNrUXVldWU7XHJcbiAgICAgICAgdGhpcy5vYmogPSBvYmo7XHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWU7XHJcbiAgICAgICAgdGhpcy5ub3RxdWV1ZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucHVibGlzaGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VsZlN1YnNjcmliZXIgPSBzZWxmU3Vic2NyaWJlcjtcclxuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHRoaXMub2xkVmFsdWUgPSBpbml0aWFsVmFsdWU7XHJcbiAgICB9XHJcbiAgICBCZWhhdmlvclByb3BlcnR5T2JzZXJ2ZXIucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRWYWx1ZTtcclxuICAgIH07XHJcbiAgICBCZWhhdmlvclByb3BlcnR5T2JzZXJ2ZXIucHJvdG90eXBlLnNldFZhbHVlID0gZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XHJcbiAgICAgICAgdmFyIG9sZFZhbHVlID0gdGhpcy5jdXJyZW50VmFsdWU7XHJcbiAgICAgICAgaWYgKCFPYmplY3QuaXMobmV3VmFsdWUsIG9sZFZhbHVlKSkge1xyXG4gICAgICAgICAgICB0aGlzLm9sZFZhbHVlID0gb2xkVmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gbmV3VmFsdWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnB1Ymxpc2hpbmcgJiYgdGhpcy5ub3RxdWV1ZWQpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRhc2tRdWV1ZS5mbHVzaGluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RxdWV1ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhc2tRdWV1ZS5xdWV1ZU1pY3JvVGFzayh0aGlzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBCZWhhdmlvclByb3BlcnR5T2JzZXJ2ZXIucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIG9sZFZhbHVlID0gdGhpcy5vbGRWYWx1ZTtcclxuICAgICAgICB2YXIgbmV3VmFsdWUgPSB0aGlzLmN1cnJlbnRWYWx1ZTtcclxuICAgICAgICB0aGlzLm5vdHF1ZXVlZCA9IHRydWU7XHJcbiAgICAgICAgaWYgKE9iamVjdC5pcyhuZXdWYWx1ZSwgb2xkVmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZlN1YnNjcmliZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxmU3Vic2NyaWJlcihuZXdWYWx1ZSwgb2xkVmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNhbGxTdWJzY3JpYmVycyhuZXdWYWx1ZSwgb2xkVmFsdWUpO1xyXG4gICAgICAgIHRoaXMub2xkVmFsdWUgPSBuZXdWYWx1ZTtcclxuICAgIH07XHJcbiAgICBCZWhhdmlvclByb3BlcnR5T2JzZXJ2ZXIucHJvdG90eXBlLmNhbGxTdWJzY3JpYmVycyA9IGZ1bmN0aW9uIChuZXdWYWx1ZSwgb2xkVmFsdWUpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XHJcbiAgICB9O1xyXG4gICAgQmVoYXZpb3JQcm9wZXJ0eU9ic2VydmVyLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoY29udGV4dCwgY2FsbGFibGUpIHtcclxuICAgICAgICB0aGlzLmFkZFN1YnNjcmliZXIoY29udGV4dCwgY2FsbGFibGUpO1xyXG4gICAgfTtcclxuICAgIEJlaGF2aW9yUHJvcGVydHlPYnNlcnZlci5wcm90b3R5cGUuYWRkU3Vic2NyaWJlciA9IGZ1bmN0aW9uIChjb250ZXh0LCBjYWxsYWJsZSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcclxuICAgIH07XHJcbiAgICBCZWhhdmlvclByb3BlcnR5T2JzZXJ2ZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKGNvbnRleHQsIGNhbGxhYmxlKSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVTdWJzY3JpYmVyKGNvbnRleHQsIGNhbGxhYmxlKTtcclxuICAgIH07XHJcbiAgICBCZWhhdmlvclByb3BlcnR5T2JzZXJ2ZXIucHJvdG90eXBlLnJlbW92ZVN1YnNjcmliZXIgPSBmdW5jdGlvbiAoY29udGV4dCwgY2FsbGFibGUpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XHJcbiAgICB9O1xyXG4gICAgQmVoYXZpb3JQcm9wZXJ0eU9ic2VydmVyID0gX19kZWNvcmF0ZShbXHJcbiAgICAgICAgc3Vic2NyaWJlckNvbGxlY3Rpb24oKVxyXG4gICAgXSwgQmVoYXZpb3JQcm9wZXJ0eU9ic2VydmVyKTtcclxuICAgIHJldHVybiBCZWhhdmlvclByb3BlcnR5T2JzZXJ2ZXI7XHJcbn0oKSk7XG5cbmZ1bmN0aW9uIGdldE9ic2VydmVyKGluc3RhbmNlLCBuYW1lKSB7XHJcbiAgICB2YXIgbG9va3VwID0gaW5zdGFuY2UuX19vYnNlcnZlcnNfXztcclxuICAgIGlmIChsb29rdXAgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHZhciBjdG9yID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGluc3RhbmNlKS5jb25zdHJ1Y3RvcjtcclxuICAgICAgICB2YXIgYmVoYXZpb3IgPSBtZXRhZGF0YS5nZXQobWV0YWRhdGEucmVzb3VyY2UsIGN0b3IpO1xyXG4gICAgICAgIGlmICghYmVoYXZpb3IuaXNJbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICBiZWhhdmlvci5pbml0aWFsaXplKENvbnRhaW5lci5pbnN0YW5jZSB8fCBuZXcgQ29udGFpbmVyKCksIGluc3RhbmNlLmNvbnN0cnVjdG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbG9va3VwID0gYmVoYXZpb3Iub2JzZXJ2ZXJMb2NhdG9yLmdldE9yQ3JlYXRlT2JzZXJ2ZXJzTG9va3VwKGluc3RhbmNlKTtcclxuICAgICAgICBiZWhhdmlvci5fZW5zdXJlUHJvcGVydGllc0RlZmluZWQoaW5zdGFuY2UsIGxvb2t1cCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbG9va3VwW25hbWVdO1xyXG59XHJcbnZhciBCaW5kYWJsZVByb3BlcnR5ID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEJpbmRhYmxlUHJvcGVydHkobmFtZU9yQ29uZmlnKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBuYW1lT3JDb25maWcgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWVPckNvbmZpZztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgbmFtZU9yQ29uZmlnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGUgPSB0aGlzLmF0dHJpYnV0ZSB8fCBfaHlwaGVuYXRlKHRoaXMubmFtZSk7XHJcbiAgICAgICAgdmFyIGRlZmF1bHRCaW5kaW5nTW9kZSA9IHRoaXMuZGVmYXVsdEJpbmRpbmdNb2RlO1xyXG4gICAgICAgIGlmIChkZWZhdWx0QmluZGluZ01vZGUgPT09IG51bGwgfHwgZGVmYXVsdEJpbmRpbmdNb2RlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5kZWZhdWx0QmluZGluZ01vZGUgPSBiaW5kaW5nTW9kZS5vbmVXYXk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBkZWZhdWx0QmluZGluZ01vZGUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdEJpbmRpbmdNb2RlID0gYmluZGluZ01vZGVbZGVmYXVsdEJpbmRpbmdNb2RlXSB8fCBiaW5kaW5nTW9kZS5vbmVXYXk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2hhbmdlSGFuZGxlciA9IHRoaXMuY2hhbmdlSGFuZGxlciB8fCBudWxsO1xyXG4gICAgICAgIHRoaXMub3duZXIgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZGVzY3JpcHRvciA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBCaW5kYWJsZVByb3BlcnR5LnByb3RvdHlwZS5yZWdpc3RlcldpdGggPSBmdW5jdGlvbiAodGFyZ2V0LCBiZWhhdmlvciwgZGVzY3JpcHRvcikge1xyXG4gICAgICAgIGJlaGF2aW9yLnByb3BlcnRpZXMucHVzaCh0aGlzKTtcclxuICAgICAgICBiZWhhdmlvci5hdHRyaWJ1dGVzW3RoaXMuYXR0cmlidXRlXSA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5vd25lciA9IGJlaGF2aW9yO1xyXG4gICAgICAgIGlmIChkZXNjcmlwdG9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVzY3JpcHRvciA9IGRlc2NyaXB0b3I7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb25maWd1cmVEZXNjcmlwdG9yKGRlc2NyaXB0b3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfTtcclxuICAgIEJpbmRhYmxlUHJvcGVydHkucHJvdG90eXBlLl9jb25maWd1cmVEZXNjcmlwdG9yID0gZnVuY3Rpb24gKGRlc2NyaXB0b3IpIHtcclxuICAgICAgICB2YXIgbmFtZSA9IHRoaXMubmFtZTtcclxuICAgICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XHJcbiAgICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gdHJ1ZTtcclxuICAgICAgICBpZiAoJ2luaXRpYWxpemVyJyBpbiBkZXNjcmlwdG9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdFZhbHVlID0gZGVzY3JpcHRvci5pbml0aWFsaXplcjtcclxuICAgICAgICAgICAgZGVsZXRlIGRlc2NyaXB0b3IuaW5pdGlhbGl6ZXI7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBkZXNjcmlwdG9yLndyaXRhYmxlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoJ3ZhbHVlJyBpbiBkZXNjcmlwdG9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdFZhbHVlID0gZGVzY3JpcHRvci52YWx1ZTtcclxuICAgICAgICAgICAgZGVsZXRlIGRlc2NyaXB0b3IudmFsdWU7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBkZXNjcmlwdG9yLndyaXRhYmxlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXNjcmlwdG9yLmdldCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGdldE9ic2VydmVyKHRoaXMsIG5hbWUpLmdldFZhbHVlKCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBkZXNjcmlwdG9yLnNldCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICBnZXRPYnNlcnZlcih0aGlzLCBuYW1lKS5zZXRWYWx1ZSh2YWx1ZSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBkZXNjcmlwdG9yLmdldC5nZXRPYnNlcnZlciA9IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICAgICAgcmV0dXJuIGdldE9ic2VydmVyKG9iaiwgbmFtZSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcclxuICAgIH07XHJcbiAgICBCaW5kYWJsZVByb3BlcnR5LnByb3RvdHlwZS5kZWZpbmVPbiA9IGZ1bmN0aW9uICh0YXJnZXQsIGJlaGF2aW9yKSB7XHJcbiAgICAgICAgdmFyIG5hbWUgPSB0aGlzLm5hbWU7XHJcbiAgICAgICAgdmFyIGhhbmRsZXJOYW1lO1xyXG4gICAgICAgIGlmICh0aGlzLmNoYW5nZUhhbmRsZXIgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgaGFuZGxlck5hbWUgPSBuYW1lICsgJ0NoYW5nZWQnO1xyXG4gICAgICAgICAgICBpZiAoaGFuZGxlck5hbWUgaW4gdGFyZ2V0LnByb3RvdHlwZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VIYW5kbGVyID0gaGFuZGxlck5hbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZGVzY3JpcHRvciA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LnByb3RvdHlwZSwgbmFtZSwgdGhpcy5fY29uZmlndXJlRGVzY3JpcHRvcih7fSkpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBCaW5kYWJsZVByb3BlcnR5LnByb3RvdHlwZS5jcmVhdGVPYnNlcnZlciA9IGZ1bmN0aW9uICh2aWV3TW9kZWwpIHtcclxuICAgICAgICB2YXIgc2VsZlN1YnNjcmliZXIgPSBudWxsO1xyXG4gICAgICAgIHZhciBkZWZhdWx0VmFsdWUgPSB0aGlzLmRlZmF1bHRWYWx1ZTtcclxuICAgICAgICB2YXIgY2hhbmdlSGFuZGxlck5hbWUgPSB0aGlzLmNoYW5nZUhhbmRsZXI7XHJcbiAgICAgICAgdmFyIG5hbWUgPSB0aGlzLm5hbWU7XHJcbiAgICAgICAgdmFyIGluaXRpYWxWYWx1ZTtcclxuICAgICAgICBpZiAodGhpcy5oYXNPcHRpb25zKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjaGFuZ2VIYW5kbGVyTmFtZSBpbiB2aWV3TW9kZWwpIHtcclxuICAgICAgICAgICAgaWYgKCdwcm9wZXJ0eUNoYW5nZWQnIGluIHZpZXdNb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgc2VsZlN1YnNjcmliZXIgPSBmdW5jdGlvbiAobmV3VmFsdWUsIG9sZFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmlld01vZGVsW2NoYW5nZUhhbmRsZXJOYW1lXShuZXdWYWx1ZSwgb2xkVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlbC5wcm9wZXJ0eUNoYW5nZWQobmFtZSwgbmV3VmFsdWUsIG9sZFZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmU3Vic2NyaWJlciA9IGZ1bmN0aW9uIChuZXdWYWx1ZSwgb2xkVmFsdWUpIHsgcmV0dXJuIHZpZXdNb2RlbFtjaGFuZ2VIYW5kbGVyTmFtZV0obmV3VmFsdWUsIG9sZFZhbHVlKTsgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICgncHJvcGVydHlDaGFuZ2VkJyBpbiB2aWV3TW9kZWwpIHtcclxuICAgICAgICAgICAgc2VsZlN1YnNjcmliZXIgPSBmdW5jdGlvbiAobmV3VmFsdWUsIG9sZFZhbHVlKSB7IHJldHVybiB2aWV3TW9kZWwucHJvcGVydHlDaGFuZ2VkKG5hbWUsIG5ld1ZhbHVlLCBvbGRWYWx1ZSk7IH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGNoYW5nZUhhbmRsZXJOYW1lICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNoYW5nZSBoYW5kbGVyIFwiLmNvbmNhdChjaGFuZ2VIYW5kbGVyTmFtZSwgXCIgd2FzIHNwZWNpZmllZCBidXQgbm90IGRlY2xhcmVkIG9uIHRoZSBjbGFzcy5cIikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaW5pdGlhbFZhbHVlID0gdHlwZW9mIGRlZmF1bHRWYWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IGRlZmF1bHRWYWx1ZS5jYWxsKHZpZXdNb2RlbCkgOiBkZWZhdWx0VmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgQmVoYXZpb3JQcm9wZXJ0eU9ic2VydmVyKHRoaXMub3duZXIudGFza1F1ZXVlLCB2aWV3TW9kZWwsIHRoaXMubmFtZSwgc2VsZlN1YnNjcmliZXIsIGluaXRpYWxWYWx1ZSk7XHJcbiAgICB9O1xyXG4gICAgQmluZGFibGVQcm9wZXJ0eS5wcm90b3R5cGUuX2luaXRpYWxpemUgPSBmdW5jdGlvbiAodmlld01vZGVsLCBvYnNlcnZlckxvb2t1cCwgYXR0cmlidXRlcywgYmVoYXZpb3JIYW5kbGVzQmluZCwgYm91bmRQcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgdmFyIHNlbGZTdWJzY3JpYmVyO1xyXG4gICAgICAgIHZhciBvYnNlcnZlcjtcclxuICAgICAgICB2YXIgYXR0cmlidXRlO1xyXG4gICAgICAgIHZhciBkZWZhdWx0VmFsdWUgPSB0aGlzLmRlZmF1bHRWYWx1ZTtcclxuICAgICAgICBpZiAodGhpcy5pc0R5bmFtaWMpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUR5bmFtaWNQcm9wZXJ0eSh2aWV3TW9kZWwsIG9ic2VydmVyTG9va3VwLCBiZWhhdmlvckhhbmRsZXNCaW5kLCBrZXksIGF0dHJpYnV0ZXNba2V5XSwgYm91bmRQcm9wZXJ0aWVzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICghdGhpcy5oYXNPcHRpb25zKSB7XHJcbiAgICAgICAgICAgIG9ic2VydmVyID0gb2JzZXJ2ZXJMb29rdXBbdGhpcy5uYW1lXTtcclxuICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHNlbGZTdWJzY3JpYmVyID0gb2JzZXJ2ZXIuc2VsZlN1YnNjcmliZXI7XHJcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzW3RoaXMuYXR0cmlidXRlXTtcclxuICAgICAgICAgICAgICAgIGlmIChiZWhhdmlvckhhbmRsZXNCaW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuc2VsZlN1YnNjcmliZXIgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhdHRyaWJ1dGUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmlld01vZGVsW3RoaXMubmFtZV0gPSBhdHRyaWJ1dGU7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY2FsbCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoYXR0cmlidXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYm91bmRQcm9wZXJ0aWVzLnB1c2goeyBvYnNlcnZlcjogb2JzZXJ2ZXIsIGJpbmRpbmc6IGF0dHJpYnV0ZS5jcmVhdGVCaW5kaW5nKHZpZXdNb2RlbCkgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmNhbGwoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIG9ic2VydmVyLnNlbGZTdWJzY3JpYmVyID0gc2VsZlN1YnNjcmliZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb2JzZXJ2ZXIucHVibGlzaGluZyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIEJpbmRhYmxlUHJvcGVydHkucHJvdG90eXBlLl9jcmVhdGVEeW5hbWljUHJvcGVydHkgPSBmdW5jdGlvbiAodmlld01vZGVsLCBvYnNlcnZlckxvb2t1cCwgYmVoYXZpb3JIYW5kbGVzQmluZCwgbmFtZSwgYXR0cmlidXRlLCBib3VuZFByb3BlcnRpZXMpIHtcclxuICAgICAgICB2YXIgY2hhbmdlSGFuZGxlck5hbWUgPSBuYW1lICsgJ0NoYW5nZWQnO1xyXG4gICAgICAgIHZhciBzZWxmU3Vic2NyaWJlciA9IG51bGw7XHJcbiAgICAgICAgdmFyIG9ic2VydmVyO1xyXG4gICAgICAgIHZhciBpbmZvO1xyXG4gICAgICAgIGlmIChjaGFuZ2VIYW5kbGVyTmFtZSBpbiB2aWV3TW9kZWwpIHtcclxuICAgICAgICAgICAgaWYgKCdwcm9wZXJ0eUNoYW5nZWQnIGluIHZpZXdNb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgc2VsZlN1YnNjcmliZXIgPSBmdW5jdGlvbiAobmV3VmFsdWUsIG9sZFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmlld01vZGVsW2NoYW5nZUhhbmRsZXJOYW1lXShuZXdWYWx1ZSwgb2xkVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlbC5wcm9wZXJ0eUNoYW5nZWQobmFtZSwgbmV3VmFsdWUsIG9sZFZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmU3Vic2NyaWJlciA9IGZ1bmN0aW9uIChuZXdWYWx1ZSwgb2xkVmFsdWUpIHsgcmV0dXJuIHZpZXdNb2RlbFtjaGFuZ2VIYW5kbGVyTmFtZV0obmV3VmFsdWUsIG9sZFZhbHVlKTsgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICgncHJvcGVydHlDaGFuZ2VkJyBpbiB2aWV3TW9kZWwpIHtcclxuICAgICAgICAgICAgc2VsZlN1YnNjcmliZXIgPSBmdW5jdGlvbiAobmV3VmFsdWUsIG9sZFZhbHVlKSB7IHJldHVybiB2aWV3TW9kZWwucHJvcGVydHlDaGFuZ2VkKG5hbWUsIG5ld1ZhbHVlLCBvbGRWYWx1ZSk7IH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG9ic2VydmVyID0gb2JzZXJ2ZXJMb29rdXBbbmFtZV0gPSBuZXcgQmVoYXZpb3JQcm9wZXJ0eU9ic2VydmVyKHRoaXMub3duZXIudGFza1F1ZXVlLCB2aWV3TW9kZWwsIG5hbWUsIHNlbGZTdWJzY3JpYmVyKTtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodmlld01vZGVsLCBuYW1lLCB7XHJcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgZ2V0OiBvYnNlcnZlci5nZXRWYWx1ZS5iaW5kKG9ic2VydmVyKSxcclxuICAgICAgICAgICAgc2V0OiBvYnNlcnZlci5zZXRWYWx1ZS5iaW5kKG9ic2VydmVyKVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChiZWhhdmlvckhhbmRsZXNCaW5kKSB7XHJcbiAgICAgICAgICAgIG9ic2VydmVyLnNlbGZTdWJzY3JpYmVyID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBhdHRyaWJ1dGUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHZpZXdNb2RlbFtuYW1lXSA9IGF0dHJpYnV0ZTtcclxuICAgICAgICAgICAgb2JzZXJ2ZXIuY2FsbCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChhdHRyaWJ1dGUpIHtcclxuICAgICAgICAgICAgaW5mbyA9IHsgb2JzZXJ2ZXI6IG9ic2VydmVyLCBiaW5kaW5nOiBhdHRyaWJ1dGUuY3JlYXRlQmluZGluZyh2aWV3TW9kZWwpIH07XHJcbiAgICAgICAgICAgIGJvdW5kUHJvcGVydGllcy5wdXNoKGluZm8pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvYnNlcnZlci5wdWJsaXNoaW5nID0gdHJ1ZTtcclxuICAgICAgICBvYnNlcnZlci5zZWxmU3Vic2NyaWJlciA9IHNlbGZTdWJzY3JpYmVyO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBCaW5kYWJsZVByb3BlcnR5O1xyXG59KCkpO1xuXG52YXIgVmlld0xvY2F0b3IgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gVmlld0xvY2F0b3IoKSB7XHJcbiAgICB9XHJcbiAgICBWaWV3TG9jYXRvci5wcm90b3R5cGUuZ2V0Vmlld1N0cmF0ZWd5ID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgJ2dldFZpZXdTdHJhdGVneScgaW4gdmFsdWUpIHtcclxuICAgICAgICAgICAgdmFyIG9yaWdpbl8xID0gT3JpZ2luLmdldCh2YWx1ZS5jb25zdHJ1Y3Rvcik7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuZ2V0Vmlld1N0cmF0ZWd5KCk7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IG5ldyBSZWxhdGl2ZVZpZXdTdHJhdGVneSh2YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmlld1N0cmF0ZWd5LmFzc2VydCh2YWx1ZSk7XHJcbiAgICAgICAgICAgIGlmIChvcmlnaW5fMS5tb2R1bGVJZCkge1xyXG4gICAgICAgICAgICAgICAgdmFsdWUubWFrZVJlbGF0aXZlVG8ob3JpZ2luXzEubW9kdWxlSWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBuZXcgUmVsYXRpdmVWaWV3U3RyYXRlZ3kodmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmlld1N0cmF0ZWd5LnZhbGlkYXRlKHZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5jb25zdHJ1Y3RvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCckdmlldycgaW4gdmFsdWUpIHtcclxuICAgICAgICAgICAgdmFyIGMgPSB2YWx1ZS4kdmlldztcclxuICAgICAgICAgICAgdmFyIHZpZXcgPSB2b2lkIDA7XHJcbiAgICAgICAgICAgIGMgPSB0eXBlb2YgYyA9PT0gJ2Z1bmN0aW9uJyA/IGMuY2FsbCh2YWx1ZSkgOiBjO1xyXG4gICAgICAgICAgICBpZiAoYyA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdmlldyA9IG5ldyBOb1ZpZXdTdHJhdGVneSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmlldyA9IGMgaW5zdGFuY2VvZiBTdGF0aWNWaWV3U3RyYXRlZ3kgPyBjIDogbmV3IFN0YXRpY1ZpZXdTdHJhdGVneShjKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBtZXRhZGF0YS5kZWZpbmUoVmlld0xvY2F0b3Iudmlld1N0cmF0ZWd5TWV0YWRhdGFLZXksIHZpZXcsIHZhbHVlKTtcclxuICAgICAgICAgICAgcmV0dXJuIHZpZXc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBvcmlnaW4gPSBPcmlnaW4uZ2V0KHZhbHVlKTtcclxuICAgICAgICB2YXIgc3RyYXRlZ3kgPSBtZXRhZGF0YS5nZXQoVmlld0xvY2F0b3Iudmlld1N0cmF0ZWd5TWV0YWRhdGFLZXksIHZhbHVlKTtcclxuICAgICAgICBpZiAoIXN0cmF0ZWd5KSB7XHJcbiAgICAgICAgICAgIGlmICghb3JpZ2luLm1vZHVsZUlkKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBkZXRlcm1pbmUgZGVmYXVsdCB2aWV3IHN0cmF0ZWd5IGZvciBvYmplY3QuXFxuJyArIHZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzdHJhdGVneSA9IHRoaXMuY3JlYXRlRmFsbGJhY2tWaWV3U3RyYXRlZ3kob3JpZ2luKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAob3JpZ2luLm1vZHVsZUlkKSB7XHJcbiAgICAgICAgICAgIHN0cmF0ZWd5Lm1vZHVsZUlkID0gb3JpZ2luLm1vZHVsZUlkO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3RyYXRlZ3k7XHJcbiAgICB9O1xyXG4gICAgVmlld0xvY2F0b3IucHJvdG90eXBlLmNyZWF0ZUZhbGxiYWNrVmlld1N0cmF0ZWd5ID0gZnVuY3Rpb24gKG9yaWdpbikge1xyXG4gICAgICAgIHJldHVybiBuZXcgQ29udmVudGlvbmFsVmlld1N0cmF0ZWd5KHRoaXMsIG9yaWdpbik7XHJcbiAgICB9O1xyXG4gICAgVmlld0xvY2F0b3IucHJvdG90eXBlLmNvbnZlcnRPcmlnaW5Ub1ZpZXdVcmwgPSBmdW5jdGlvbiAob3JpZ2luKSB7XHJcbiAgICAgICAgdmFyIG1vZHVsZUlkID0gb3JpZ2luLm1vZHVsZUlkO1xyXG4gICAgICAgIHZhciBpZCA9IChtb2R1bGVJZC5lbmRzV2l0aCgnLmpzJykgfHwgbW9kdWxlSWQuZW5kc1dpdGgoJy50cycpKSA/IG1vZHVsZUlkLnN1YnN0cmluZygwLCBtb2R1bGVJZC5sZW5ndGggLSAzKSA6IG1vZHVsZUlkO1xyXG4gICAgICAgIHJldHVybiBpZCArICcuaHRtbCc7XHJcbiAgICB9O1xyXG4gICAgVmlld0xvY2F0b3Iudmlld1N0cmF0ZWd5TWV0YWRhdGFLZXkgPSAnYXVyZWxpYTp2aWV3LXN0cmF0ZWd5JztcclxuICAgIHJldHVybiBWaWV3TG9jYXRvcjtcclxufSgpKTtcblxuZnVuY3Rpb24gbWkobmFtZSkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQmluZGluZ0xhbmd1YWdlIG11c3QgaW1wbGVtZW50IFwiLmNvbmNhdChuYW1lLCBcIigpLlwiKSk7XHJcbn1cclxudmFyIEJpbmRpbmdMYW5ndWFnZSA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBCaW5kaW5nTGFuZ3VhZ2UoKSB7XHJcbiAgICB9XHJcbiAgICBCaW5kaW5nTGFuZ3VhZ2UucHJvdG90eXBlLmluc3BlY3RBdHRyaWJ1dGUgPSBmdW5jdGlvbiAocmVzb3VyY2VzLCBlbGVtZW50TmFtZSwgYXR0ck5hbWUsIGF0dHJWYWx1ZSkge1xyXG4gICAgICAgIG1pKCdpbnNwZWN0QXR0cmlidXRlJyk7XHJcbiAgICB9O1xyXG4gICAgQmluZGluZ0xhbmd1YWdlLnByb3RvdHlwZS5jcmVhdGVBdHRyaWJ1dGVJbnN0cnVjdGlvbiA9IGZ1bmN0aW9uIChyZXNvdXJjZXMsIGVsZW1lbnQsIGluZm8sIGV4aXN0aW5nSW5zdHJ1Y3Rpb24sIGNvbnRleHQpIHtcclxuICAgICAgICBtaSgnY3JlYXRlQXR0cmlidXRlSW5zdHJ1Y3Rpb24nKTtcclxuICAgIH07XHJcbiAgICBCaW5kaW5nTGFuZ3VhZ2UucHJvdG90eXBlLmNyZWF0ZUxldEV4cHJlc3Npb25zID0gZnVuY3Rpb24gKHJlc291cmNlcywgZWxlbWVudCkge1xyXG4gICAgICAgIG1pKCdjcmVhdGVMZXRFeHByZXNzaW9ucycpO1xyXG4gICAgfTtcclxuICAgIEJpbmRpbmdMYW5ndWFnZS5wcm90b3R5cGUuaW5zcGVjdFRleHRDb250ZW50ID0gZnVuY3Rpb24gKHJlc291cmNlcywgdmFsdWUpIHtcclxuICAgICAgICBtaSgnaW5zcGVjdFRleHRDb250ZW50Jyk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIEJpbmRpbmdMYW5ndWFnZTtcclxufSgpKTtcblxudmFyIG5vTm9kZXMgPSBPYmplY3QuZnJlZXplKFtdKTtcclxudmFyIFNsb3RDdXN0b21BdHRyaWJ1dGUgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gU2xvdEN1c3RvbUF0dHJpYnV0ZShlbGVtZW50KSB7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcclxuICAgICAgICB0aGlzLmVsZW1lbnQuYXVTbG90QXR0cmlidXRlID0gdGhpcztcclxuICAgIH1cclxuICAgIFNsb3RDdXN0b21BdHRyaWJ1dGUuaW5qZWN0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBbRE9NLkVsZW1lbnRdO1xyXG4gICAgfTtcclxuICAgIFNsb3RDdXN0b21BdHRyaWJ1dGUucHJvdG90eXBlLnZhbHVlQ2hhbmdlZCA9IGZ1bmN0aW9uIChuZXdWYWx1ZSwgb2xkVmFsdWUpIHsgfTtcclxuICAgIHJldHVybiBTbG90Q3VzdG9tQXR0cmlidXRlO1xyXG59KCkpO1xyXG52YXIgUGFzc1Rocm91Z2hTbG90ID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIFBhc3NUaHJvdWdoU2xvdChhbmNob3IsIG5hbWUsIGRlc3RpbmF0aW9uTmFtZSwgZmFsbGJhY2tGYWN0b3J5KSB7XHJcbiAgICAgICAgdGhpcy5hbmNob3IgPSBhbmNob3I7XHJcbiAgICAgICAgdGhpcy5hbmNob3Iudmlld1Nsb3QgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XHJcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbk5hbWUgPSBkZXN0aW5hdGlvbk5hbWU7XHJcbiAgICAgICAgdGhpcy5mYWxsYmFja0ZhY3RvcnkgPSBmYWxsYmFja0ZhY3Rvcnk7XHJcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvblNsb3QgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucHJvamVjdGlvbnMgPSAwO1xyXG4gICAgICAgIHRoaXMuY29udGVudFZpZXcgPSBudWxsO1xyXG4gICAgICAgIHZhciBhdHRyID0gbmV3IFNsb3RDdXN0b21BdHRyaWJ1dGUodGhpcy5hbmNob3IpO1xyXG4gICAgICAgIGF0dHIudmFsdWUgPSB0aGlzLmRlc3RpbmF0aW9uTmFtZTtcclxuICAgIH1cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQYXNzVGhyb3VnaFNsb3QucHJvdG90eXBlLCBcIm5lZWRzRmFsbGJhY2tSZW5kZXJpbmdcIiwge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mYWxsYmFja0ZhY3RvcnkgJiYgdGhpcy5wcm9qZWN0aW9ucyA9PT0gMDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICBQYXNzVGhyb3VnaFNsb3QucHJvdG90eXBlLnJlbmRlckZhbGxiYWNrQ29udGVudCA9IGZ1bmN0aW9uICh2aWV3LCBub2RlcywgcHJvamVjdGlvblNvdXJjZSwgaW5kZXgpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250ZW50VmlldyA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRWaWV3ID0gdGhpcy5mYWxsYmFja0ZhY3RvcnkuY3JlYXRlKHRoaXMub3duZXJWaWV3LmNvbnRhaW5lcik7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGVudFZpZXcuYmluZCh0aGlzLm93bmVyVmlldy5iaW5kaW5nQ29udGV4dCwgdGhpcy5vd25lclZpZXcub3ZlcnJpZGVDb250ZXh0KTtcclxuICAgICAgICAgICAgdmFyIHNsb3RzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcclxuICAgICAgICAgICAgc2xvdHNbdGhpcy5kZXN0aW5hdGlvblNsb3QubmFtZV0gPSB0aGlzLmRlc3RpbmF0aW9uU2xvdDtcclxuICAgICAgICAgICAgU2hhZG93RE9NLmRpc3RyaWJ1dGVWaWV3KHRoaXMuY29udGVudFZpZXcsIHNsb3RzLCBwcm9qZWN0aW9uU291cmNlLCBpbmRleCwgdGhpcy5kZXN0aW5hdGlvblNsb3QubmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIFBhc3NUaHJvdWdoU2xvdC5wcm90b3R5cGUucGFzc1Rocm91Z2hUbyA9IGZ1bmN0aW9uIChkZXN0aW5hdGlvblNsb3QpIHtcclxuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uU2xvdCA9IGRlc3RpbmF0aW9uU2xvdDtcclxuICAgIH07XHJcbiAgICBQYXNzVGhyb3VnaFNsb3QucHJvdG90eXBlLmFkZE5vZGUgPSBmdW5jdGlvbiAodmlldywgbm9kZSwgcHJvamVjdGlvblNvdXJjZSwgaW5kZXgpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250ZW50VmlldyAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRWaWV3LnJlbW92ZU5vZGVzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGVudFZpZXcuZGV0YWNoZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5jb250ZW50Vmlldy51bmJpbmQoKTtcclxuICAgICAgICAgICAgdGhpcy5jb250ZW50VmlldyA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChub2RlLnZpZXdTbG90IGluc3RhbmNlb2YgUGFzc1Rocm91Z2hTbG90KSB7XHJcbiAgICAgICAgICAgIG5vZGUudmlld1Nsb3QucGFzc1Rocm91Z2hUbyh0aGlzKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByb2plY3Rpb25zKys7XHJcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvblNsb3QuYWRkTm9kZSh2aWV3LCBub2RlLCBwcm9qZWN0aW9uU291cmNlLCBpbmRleCk7XHJcbiAgICB9O1xyXG4gICAgUGFzc1Rocm91Z2hTbG90LnByb3RvdHlwZS5yZW1vdmVWaWV3ID0gZnVuY3Rpb24gKHZpZXcsIHByb2plY3Rpb25Tb3VyY2UpIHtcclxuICAgICAgICB0aGlzLnByb2plY3Rpb25zLS07XHJcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvblNsb3QucmVtb3ZlVmlldyh2aWV3LCBwcm9qZWN0aW9uU291cmNlKTtcclxuICAgICAgICBpZiAodGhpcy5uZWVkc0ZhbGxiYWNrUmVuZGVyaW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyRmFsbGJhY2tDb250ZW50KG51bGwsIG5vTm9kZXMsIHByb2plY3Rpb25Tb3VyY2UpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBQYXNzVGhyb3VnaFNsb3QucHJvdG90eXBlLnJlbW92ZUFsbCA9IGZ1bmN0aW9uIChwcm9qZWN0aW9uU291cmNlKSB7XHJcbiAgICAgICAgdGhpcy5wcm9qZWN0aW9ucyA9IDA7XHJcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvblNsb3QucmVtb3ZlQWxsKHByb2plY3Rpb25Tb3VyY2UpO1xyXG4gICAgICAgIGlmICh0aGlzLm5lZWRzRmFsbGJhY2tSZW5kZXJpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJGYWxsYmFja0NvbnRlbnQobnVsbCwgbm9Ob2RlcywgcHJvamVjdGlvblNvdXJjZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIFBhc3NUaHJvdWdoU2xvdC5wcm90b3R5cGUucHJvamVjdEZyb20gPSBmdW5jdGlvbiAodmlldywgcHJvamVjdGlvblNvdXJjZSkge1xyXG4gICAgICAgIHRoaXMuZGVzdGluYXRpb25TbG90LnByb2plY3RGcm9tKHZpZXcsIHByb2plY3Rpb25Tb3VyY2UpO1xyXG4gICAgfTtcclxuICAgIFBhc3NUaHJvdWdoU2xvdC5wcm90b3R5cGUuY3JlYXRlZCA9IGZ1bmN0aW9uIChvd25lclZpZXcpIHtcclxuICAgICAgICB0aGlzLm93bmVyVmlldyA9IG93bmVyVmlldztcclxuICAgIH07XHJcbiAgICBQYXNzVGhyb3VnaFNsb3QucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAodmlldykge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnRWaWV3KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGVudFZpZXcuYmluZCh2aWV3LmJpbmRpbmdDb250ZXh0LCB2aWV3Lm92ZXJyaWRlQ29udGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIFBhc3NUaHJvdWdoU2xvdC5wcm90b3R5cGUuYXR0YWNoZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udGVudFZpZXcpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250ZW50Vmlldy5hdHRhY2hlZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBQYXNzVGhyb3VnaFNsb3QucHJvdG90eXBlLmRldGFjaGVkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnRWaWV3KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGVudFZpZXcuZGV0YWNoZWQoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgUGFzc1Rocm91Z2hTbG90LnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udGVudFZpZXcpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250ZW50Vmlldy51bmJpbmQoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIFBhc3NUaHJvdWdoU2xvdDtcclxufSgpKTtcclxudmFyIFNoYWRvd1Nsb3QgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gU2hhZG93U2xvdChhbmNob3IsIG5hbWUsIGZhbGxiYWNrRmFjdG9yeSkge1xyXG4gICAgICAgIHRoaXMuYW5jaG9yID0gYW5jaG9yO1xyXG4gICAgICAgIHRoaXMuYW5jaG9yLmlzQ29udGVudFByb2plY3Rpb25Tb3VyY2UgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuYW5jaG9yLnZpZXdTbG90ID0gdGhpcztcclxuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xyXG4gICAgICAgIHRoaXMuZmFsbGJhY2tGYWN0b3J5ID0gZmFsbGJhY2tGYWN0b3J5O1xyXG4gICAgICAgIHRoaXMuY29udGVudFZpZXcgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucHJvamVjdGlvbnMgPSAwO1xyXG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcclxuICAgICAgICB0aGlzLnByb2plY3RGcm9tQW5jaG9ycyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvblNsb3RzID0gbnVsbDtcclxuICAgIH1cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTaGFkb3dTbG90LnByb3RvdHlwZSwgXCJuZWVkc0ZhbGxiYWNrUmVuZGVyaW5nXCIsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmFsbGJhY2tGYWN0b3J5ICYmIHRoaXMucHJvamVjdGlvbnMgPT09IDA7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgIH0pO1xyXG4gICAgU2hhZG93U2xvdC5wcm90b3R5cGUuYWRkTm9kZSA9IGZ1bmN0aW9uICh2aWV3LCBub2RlLCBwcm9qZWN0aW9uU291cmNlLCBpbmRleCwgZGVzdGluYXRpb24pIHtcclxuICAgICAgICB2YXIgJG5vZGUgPSBub2RlO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnRWaWV3ICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGVudFZpZXcucmVtb3ZlTm9kZXMoKTtcclxuICAgICAgICAgICAgdGhpcy5jb250ZW50Vmlldy5kZXRhY2hlZCgpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRWaWV3LnVuYmluZCgpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRWaWV3ID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCRub2RlLnZpZXdTbG90IGluc3RhbmNlb2YgUGFzc1Rocm91Z2hTbG90KSB7XHJcbiAgICAgICAgICAgICRub2RlLnZpZXdTbG90LnBhc3NUaHJvdWdoVG8odGhpcyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZGVzdGluYXRpb25TbG90cyAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBTaGFkb3dET00uZGlzdHJpYnV0ZU5vZGVzKHZpZXcsIFskbm9kZV0sIHRoaXMuZGVzdGluYXRpb25TbG90cywgdGhpcywgaW5kZXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgJG5vZGUuYXVPd25lclZpZXcgPSB2aWV3O1xyXG4gICAgICAgICAgICAkbm9kZS5hdVByb2plY3Rpb25Tb3VyY2UgPSBwcm9qZWN0aW9uU291cmNlO1xyXG4gICAgICAgICAgICAkbm9kZS5hdUFzc2lnbmVkU2xvdCA9IHRoaXM7XHJcbiAgICAgICAgICAgIHZhciBhbmNob3IgPSB0aGlzLl9maW5kQW5jaG9yKHZpZXcsICRub2RlLCBwcm9qZWN0aW9uU291cmNlLCBpbmRleCk7XHJcbiAgICAgICAgICAgIHZhciBwYXJlbnRfMSA9IGFuY2hvci5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICBwYXJlbnRfMS5pbnNlcnRCZWZvcmUoJG5vZGUsIGFuY2hvcik7XHJcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaCgkbm9kZSk7XHJcbiAgICAgICAgICAgIHRoaXMucHJvamVjdGlvbnMrKztcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgU2hhZG93U2xvdC5wcm90b3R5cGUucmVtb3ZlVmlldyA9IGZ1bmN0aW9uICh2aWV3LCBwcm9qZWN0aW9uU291cmNlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGVzdGluYXRpb25TbG90cyAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBTaGFkb3dET00udW5kaXN0cmlidXRlVmlldyh2aWV3LCB0aGlzLmRlc3RpbmF0aW9uU2xvdHMsIHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLmNvbnRlbnRWaWV3ICYmIHRoaXMuY29udGVudFZpZXcuaGFzU2xvdHMpIHtcclxuICAgICAgICAgICAgU2hhZG93RE9NLnVuZGlzdHJpYnV0ZVZpZXcodmlldywgdGhpcy5jb250ZW50Vmlldy5zbG90cywgcHJvamVjdGlvblNvdXJjZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgZm91bmQgPSB0aGlzLmNoaWxkcmVuLmZpbmQoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHguYXVTbG90UHJvamVjdEZyb20gPT09IHByb2plY3Rpb25Tb3VyY2U7IH0pO1xyXG4gICAgICAgICAgICBpZiAoZm91bmQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjaGlsZHJlbiA9IGZvdW5kLmF1UHJvamVjdGlvbkNoaWxkcmVuO1xyXG4gICAgICAgICAgICAgICAgdmFyIG93bkNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQuYXVPd25lclZpZXcgPT09IHZpZXcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4uc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3LmZyYWdtZW50LmFwcGVuZENoaWxkKGNoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaS0tO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpaS0tO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2plY3Rpb25zLS07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpZHggPSBvd25DaGlsZHJlbi5pbmRleE9mKGNoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlkeCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25DaGlsZHJlbi5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm5lZWRzRmFsbGJhY2tSZW5kZXJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckZhbGxiYWNrQ29udGVudCh2aWV3LCBub05vZGVzLCBwcm9qZWN0aW9uU291cmNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBTaGFkb3dTbG90LnByb3RvdHlwZS5yZW1vdmVBbGwgPSBmdW5jdGlvbiAocHJvamVjdGlvblNvdXJjZSkge1xyXG4gICAgICAgIGlmICh0aGlzLmRlc3RpbmF0aW9uU2xvdHMgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgU2hhZG93RE9NLnVuZGlzdHJpYnV0ZUFsbCh0aGlzLmRlc3RpbmF0aW9uU2xvdHMsIHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLmNvbnRlbnRWaWV3ICYmIHRoaXMuY29udGVudFZpZXcuaGFzU2xvdHMpIHtcclxuICAgICAgICAgICAgU2hhZG93RE9NLnVuZGlzdHJpYnV0ZUFsbCh0aGlzLmNvbnRlbnRWaWV3LnNsb3RzLCBwcm9qZWN0aW9uU291cmNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciBmb3VuZCA9IHRoaXMuY2hpbGRyZW4uZmluZChmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5hdVNsb3RQcm9qZWN0RnJvbSA9PT0gcHJvamVjdGlvblNvdXJjZTsgfSk7XHJcbiAgICAgICAgICAgIGlmIChmb3VuZCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNoaWxkcmVuID0gZm91bmQuYXVQcm9qZWN0aW9uQ2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICB2YXIgb3duQ2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkLmF1T3duZXJWaWV3LmZyYWdtZW50LmFwcGVuZENoaWxkKGNoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2plY3Rpb25zLS07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlkeCA9IG93bkNoaWxkcmVuLmluZGV4T2YoY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpZHggPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvd25DaGlsZHJlbi5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmb3VuZC5hdVByb2plY3Rpb25DaGlsZHJlbiA9IFtdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubmVlZHNGYWxsYmFja1JlbmRlcmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyRmFsbGJhY2tDb250ZW50KG51bGwsIG5vTm9kZXMsIHByb2plY3Rpb25Tb3VyY2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIFNoYWRvd1Nsb3QucHJvdG90eXBlLl9maW5kQW5jaG9yID0gZnVuY3Rpb24gKHZpZXcsIG5vZGUsIHByb2plY3Rpb25Tb3VyY2UsIGluZGV4KSB7XHJcbiAgICAgICAgaWYgKHByb2plY3Rpb25Tb3VyY2UpIHtcclxuICAgICAgICAgICAgdmFyIGZvdW5kID0gdGhpcy5jaGlsZHJlbi5maW5kKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LmF1U2xvdFByb2plY3RGcm9tID09PSBwcm9qZWN0aW9uU291cmNlOyB9KTtcclxuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZHJlbiA9IGZvdW5kLmF1UHJvamVjdGlvbkNoaWxkcmVuO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB2aWV3SW5kZXggPSAtMTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbGFzdFZpZXcgPSB2b2lkIDA7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudCA9IGNoaWxkcmVuW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudC5hdU93bmVyVmlldyAhPT0gbGFzdFZpZXcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdJbmRleCsrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFZpZXcgPSBjdXJyZW50LmF1T3duZXJWaWV3O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZpZXdJbmRleCA+PSBpbmRleCAmJiBsYXN0VmlldyAhPT0gdmlldykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnNwbGljZShpLCAwLCBub2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZvdW5kLmF1UHJvamVjdGlvbkNoaWxkcmVuLnB1c2gobm9kZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZm91bmQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYW5jaG9yO1xyXG4gICAgfTtcclxuICAgIFNoYWRvd1Nsb3QucHJvdG90eXBlLnByb2plY3RUbyA9IGZ1bmN0aW9uIChzbG90cykge1xyXG4gICAgICAgIHRoaXMuZGVzdGluYXRpb25TbG90cyA9IHNsb3RzO1xyXG4gICAgfTtcclxuICAgIFNoYWRvd1Nsb3QucHJvdG90eXBlLnByb2plY3RGcm9tID0gZnVuY3Rpb24gKHZpZXcsIHByb2plY3Rpb25Tb3VyY2UpIHtcclxuICAgICAgICB2YXIgYW5jaG9yID0gRE9NLmNyZWF0ZUNvbW1lbnQoJ2FuY2hvcicpO1xyXG4gICAgICAgIHZhciBwYXJlbnQgPSB0aGlzLmFuY2hvci5wYXJlbnROb2RlO1xyXG4gICAgICAgIGFuY2hvci5hdVNsb3RQcm9qZWN0RnJvbSA9IHByb2plY3Rpb25Tb3VyY2U7XHJcbiAgICAgICAgYW5jaG9yLmF1T3duZXJWaWV3ID0gdmlldztcclxuICAgICAgICBhbmNob3IuYXVQcm9qZWN0aW9uQ2hpbGRyZW4gPSBbXTtcclxuICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGFuY2hvciwgdGhpcy5hbmNob3IpO1xyXG4gICAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChhbmNob3IpO1xyXG4gICAgICAgIGlmICh0aGlzLnByb2plY3RGcm9tQW5jaG9ycyA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLnByb2plY3RGcm9tQW5jaG9ycyA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByb2plY3RGcm9tQW5jaG9ycy5wdXNoKGFuY2hvcik7XHJcbiAgICB9O1xyXG4gICAgU2hhZG93U2xvdC5wcm90b3R5cGUucmVuZGVyRmFsbGJhY2tDb250ZW50ID0gZnVuY3Rpb24gKHZpZXcsIG5vZGVzLCBwcm9qZWN0aW9uU291cmNlLCBpbmRleCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnRWaWV3ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGVudFZpZXcgPSB0aGlzLmZhbGxiYWNrRmFjdG9yeS5jcmVhdGUodGhpcy5vd25lclZpZXcuY29udGFpbmVyKTtcclxuICAgICAgICAgICAgdGhpcy5jb250ZW50Vmlldy5iaW5kKHRoaXMub3duZXJWaWV3LmJpbmRpbmdDb250ZXh0LCB0aGlzLm93bmVyVmlldy5vdmVycmlkZUNvbnRleHQpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRWaWV3Lmluc2VydE5vZGVzQmVmb3JlKHRoaXMuYW5jaG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY29udGVudFZpZXcuaGFzU2xvdHMpIHtcclxuICAgICAgICAgICAgdmFyIHNsb3RzID0gdGhpcy5jb250ZW50Vmlldy5zbG90cztcclxuICAgICAgICAgICAgdmFyIHByb2plY3RGcm9tQW5jaG9ycyA9IHRoaXMucHJvamVjdEZyb21BbmNob3JzO1xyXG4gICAgICAgICAgICBpZiAocHJvamVjdEZyb21BbmNob3JzICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBzbG90TmFtZSBpbiBzbG90cykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzbG90ID0gc2xvdHNbc2xvdE5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHByb2plY3RGcm9tQW5jaG9ycy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbmNob3IgPSBwcm9qZWN0RnJvbUFuY2hvcnNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNsb3QucHJvamVjdEZyb20oYW5jaG9yLmF1T3duZXJWaWV3LCBhbmNob3IuYXVTbG90UHJvamVjdEZyb20pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmZhbGxiYWNrU2xvdHMgPSBzbG90cztcclxuICAgICAgICAgICAgU2hhZG93RE9NLmRpc3RyaWJ1dGVOb2Rlcyh2aWV3LCBub2Rlcywgc2xvdHMsIHByb2plY3Rpb25Tb3VyY2UsIGluZGV4KTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgU2hhZG93U2xvdC5wcm90b3R5cGUuY3JlYXRlZCA9IGZ1bmN0aW9uIChvd25lclZpZXcpIHtcclxuICAgICAgICB0aGlzLm93bmVyVmlldyA9IG93bmVyVmlldztcclxuICAgIH07XHJcbiAgICBTaGFkb3dTbG90LnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKHZpZXcpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250ZW50Vmlldykge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRWaWV3LmJpbmQodmlldy5iaW5kaW5nQ29udGV4dCwgdmlldy5vdmVycmlkZUNvbnRleHQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBTaGFkb3dTbG90LnByb3RvdHlwZS5hdHRhY2hlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250ZW50Vmlldykge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRWaWV3LmF0dGFjaGVkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIFNoYWRvd1Nsb3QucHJvdG90eXBlLmRldGFjaGVkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnRWaWV3KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGVudFZpZXcuZGV0YWNoZWQoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgU2hhZG93U2xvdC5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnRWaWV3KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGVudFZpZXcudW5iaW5kKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiBTaGFkb3dTbG90O1xyXG59KCkpO1xyXG52YXIgU2hhZG93RE9NID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIFNoYWRvd0RPTSgpIHtcclxuICAgIH1cclxuICAgIFNoYWRvd0RPTS5nZXRTbG90TmFtZSA9IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICAgICAgaWYgKG5vZGUuYXVTbG90QXR0cmlidXRlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFNoYWRvd0RPTS5kZWZhdWx0U2xvdEtleTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5vZGUuYXVTbG90QXR0cmlidXRlLnZhbHVlO1xyXG4gICAgfTtcclxuICAgIFNoYWRvd0RPTS5kaXN0cmlidXRlVmlldyA9IGZ1bmN0aW9uICh2aWV3LCBzbG90cywgcHJvamVjdGlvblNvdXJjZSwgaW5kZXgsIGRlc3RpbmF0aW9uT3ZlcnJpZGUpIHtcclxuICAgICAgICB2YXIgbm9kZXM7XHJcbiAgICAgICAgaWYgKHZpZXcgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgbm9kZXMgPSBub05vZGVzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdmFyIGNoaWxkTm9kZXMgPSB2aWV3LmZyYWdtZW50LmNoaWxkTm9kZXM7XHJcbiAgICAgICAgICAgIHZhciBpaSA9IGNoaWxkTm9kZXMubGVuZ3RoO1xyXG4gICAgICAgICAgICBub2RlcyA9IG5ldyBBcnJheShpaSk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaWk7ICsraSkge1xyXG4gICAgICAgICAgICAgICAgbm9kZXNbaV0gPSBjaGlsZE5vZGVzW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFNoYWRvd0RPTS5kaXN0cmlidXRlTm9kZXModmlldywgbm9kZXMsIHNsb3RzLCBwcm9qZWN0aW9uU291cmNlLCBpbmRleCwgZGVzdGluYXRpb25PdmVycmlkZSk7XHJcbiAgICB9O1xyXG4gICAgU2hhZG93RE9NLnVuZGlzdHJpYnV0ZVZpZXcgPSBmdW5jdGlvbiAodmlldywgc2xvdHMsIHByb2plY3Rpb25Tb3VyY2UpIHtcclxuICAgICAgICBmb3IgKHZhciBzbG90TmFtZSBpbiBzbG90cykge1xyXG4gICAgICAgICAgICBzbG90c1tzbG90TmFtZV0ucmVtb3ZlVmlldyh2aWV3LCBwcm9qZWN0aW9uU291cmNlKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgU2hhZG93RE9NLnVuZGlzdHJpYnV0ZUFsbCA9IGZ1bmN0aW9uIChzbG90cywgcHJvamVjdGlvblNvdXJjZSkge1xyXG4gICAgICAgIGZvciAodmFyIHNsb3ROYW1lIGluIHNsb3RzKSB7XHJcbiAgICAgICAgICAgIHNsb3RzW3Nsb3ROYW1lXS5yZW1vdmVBbGwocHJvamVjdGlvblNvdXJjZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIFNoYWRvd0RPTS5kaXN0cmlidXRlTm9kZXMgPSBmdW5jdGlvbiAodmlldywgbm9kZXMsIHNsb3RzLCBwcm9qZWN0aW9uU291cmNlLCBpbmRleCwgZGVzdGluYXRpb25PdmVycmlkZSkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IG5vZGVzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnROb2RlID0gbm9kZXNbaV07XHJcbiAgICAgICAgICAgIHZhciBub2RlVHlwZSA9IGN1cnJlbnROb2RlLm5vZGVUeXBlO1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudE5vZGUuaXNDb250ZW50UHJvamVjdGlvblNvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgY3VycmVudE5vZGUudmlld1Nsb3QucHJvamVjdFRvKHNsb3RzKTtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIHNsb3ROYW1lIGluIHNsb3RzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2xvdHNbc2xvdE5hbWVdLnByb2plY3RGcm9tKHZpZXcsIGN1cnJlbnROb2RlLnZpZXdTbG90KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIG5vZGVzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgICAgIGlpLS07XHJcbiAgICAgICAgICAgICAgICBpLS07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAobm9kZVR5cGUgPT09IDEgfHwgbm9kZVR5cGUgPT09IDMgfHwgY3VycmVudE5vZGUudmlld1Nsb3QgaW5zdGFuY2VvZiBQYXNzVGhyb3VnaFNsb3QpIHtcclxuICAgICAgICAgICAgICAgIGlmIChub2RlVHlwZSA9PT0gMyAmJiBfaXNBbGxXaGl0ZXNwYWNlKGN1cnJlbnROb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGVzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICBpaS0tO1xyXG4gICAgICAgICAgICAgICAgICAgIGktLTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBmb3VuZCA9IHNsb3RzW2Rlc3RpbmF0aW9uT3ZlcnJpZGUgfHwgU2hhZG93RE9NLmdldFNsb3ROYW1lKGN1cnJlbnROb2RlKV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kLmFkZE5vZGUodmlldywgY3VycmVudE5vZGUsIHByb2plY3Rpb25Tb3VyY2UsIGluZGV4KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpaS0tO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpLS07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbm9kZXMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgaWktLTtcclxuICAgICAgICAgICAgICAgIGktLTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKHZhciBzbG90TmFtZSBpbiBzbG90cykge1xyXG4gICAgICAgICAgICB2YXIgc2xvdCA9IHNsb3RzW3Nsb3ROYW1lXTtcclxuICAgICAgICAgICAgaWYgKHNsb3QubmVlZHNGYWxsYmFja1JlbmRlcmluZykge1xyXG4gICAgICAgICAgICAgICAgc2xvdC5yZW5kZXJGYWxsYmFja0NvbnRlbnQodmlldywgbm9kZXMsIHByb2plY3Rpb25Tb3VyY2UsIGluZGV4KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBTaGFkb3dET00uZGVmYXVsdFNsb3RLZXkgPSAnX19hdS1kZWZhdWx0LXNsb3Qta2V5X18nO1xyXG4gICAgcmV0dXJuIFNoYWRvd0RPTTtcclxufSgpKTtcblxudmFyIENvbXBvc2l0aW9uVHJhbnNhY3Rpb25Ob3RpZmllciA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBDb21wb3NpdGlvblRyYW5zYWN0aW9uTm90aWZpZXIob3duZXIpIHtcclxuICAgICAgICB0aGlzLm93bmVyID0gb3duZXI7XHJcbiAgICAgICAgdGhpcy5vd25lci5fY29tcG9zaXRpb25Db3VudCsrO1xyXG4gICAgfVxyXG4gICAgQ29tcG9zaXRpb25UcmFuc2FjdGlvbk5vdGlmaWVyLnByb3RvdHlwZS5kb25lID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMub3duZXIuX2NvbXBvc2l0aW9uQ291bnQtLTtcclxuICAgICAgICB0aGlzLm93bmVyLl90cnlDb21wbGV0ZVRyYW5zYWN0aW9uKCk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIENvbXBvc2l0aW9uVHJhbnNhY3Rpb25Ob3RpZmllcjtcclxufSgpKTtcclxudmFyIENvbXBvc2l0aW9uVHJhbnNhY3Rpb25Pd25lcnNoaXBUb2tlbiA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBDb21wb3NpdGlvblRyYW5zYWN0aW9uT3duZXJzaGlwVG9rZW4ob3duZXIpIHtcclxuICAgICAgICB0aGlzLm93bmVyID0gb3duZXI7XHJcbiAgICAgICAgdGhpcy5vd25lci5fb3duZXJzaGlwVG9rZW4gPSB0aGlzO1xyXG4gICAgICAgIHRoaXMudGhlbmFibGUgPSB0aGlzLl9jcmVhdGVUaGVuYWJsZSgpO1xyXG4gICAgfVxyXG4gICAgQ29tcG9zaXRpb25UcmFuc2FjdGlvbk93bmVyc2hpcFRva2VuLnByb3RvdHlwZS53YWl0Rm9yQ29tcG9zaXRpb25Db21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLm93bmVyLl90cnlDb21wbGV0ZVRyYW5zYWN0aW9uKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGhlbmFibGU7XHJcbiAgICB9O1xyXG4gICAgQ29tcG9zaXRpb25UcmFuc2FjdGlvbk93bmVyc2hpcFRva2VuLnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX3Jlc29sdmVDYWxsYmFjaygpO1xyXG4gICAgfTtcclxuICAgIENvbXBvc2l0aW9uVHJhbnNhY3Rpb25Pd25lcnNoaXBUb2tlbi5wcm90b3R5cGUuX3Jlc29sdmVDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcclxuICAgIH07XHJcbiAgICBDb21wb3NpdGlvblRyYW5zYWN0aW9uT3duZXJzaGlwVG9rZW4ucHJvdG90eXBlLl9jcmVhdGVUaGVuYWJsZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xyXG4gICAgICAgICAgICBfdGhpcy5fcmVzb2x2ZUNhbGxiYWNrID0gcmVzb2x2ZTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gQ29tcG9zaXRpb25UcmFuc2FjdGlvbk93bmVyc2hpcFRva2VuO1xyXG59KCkpO1xyXG52YXIgQ29tcG9zaXRpb25UcmFuc2FjdGlvbiA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBDb21wb3NpdGlvblRyYW5zYWN0aW9uKCkge1xyXG4gICAgICAgIHRoaXMuX293bmVyc2hpcFRva2VuID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9jb21wb3NpdGlvbkNvdW50ID0gMDtcclxuICAgIH1cclxuICAgIENvbXBvc2l0aW9uVHJhbnNhY3Rpb24ucHJvdG90eXBlLnRyeUNhcHR1cmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX293bmVyc2hpcFRva2VuID09PSBudWxsXHJcbiAgICAgICAgICAgID8gbmV3IENvbXBvc2l0aW9uVHJhbnNhY3Rpb25Pd25lcnNoaXBUb2tlbih0aGlzKVxyXG4gICAgICAgICAgICA6IG51bGw7XHJcbiAgICB9O1xyXG4gICAgQ29tcG9zaXRpb25UcmFuc2FjdGlvbi5wcm90b3R5cGUuZW5saXN0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgQ29tcG9zaXRpb25UcmFuc2FjdGlvbk5vdGlmaWVyKHRoaXMpO1xyXG4gICAgfTtcclxuICAgIENvbXBvc2l0aW9uVHJhbnNhY3Rpb24ucHJvdG90eXBlLl90cnlDb21wbGV0ZVRyYW5zYWN0aW9uID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9jb21wb3NpdGlvbkNvdW50IDw9IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRpb25Db3VudCA9IDA7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9vd25lcnNoaXBUb2tlbiAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHRva2VuID0gdGhpcy5fb3duZXJzaGlwVG9rZW47XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vd25lcnNoaXBUb2tlbiA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0b2tlbi5yZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIENvbXBvc2l0aW9uVHJhbnNhY3Rpb247XHJcbn0oKSk7XG5cbnZhciBWaWV3ID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIFZpZXcoY29udGFpbmVyLCB2aWV3RmFjdG9yeSwgZnJhZ21lbnQsIGNvbnRyb2xsZXJzLCBiaW5kaW5ncywgY2hpbGRyZW4sIHNsb3RzKSB7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XHJcbiAgICAgICAgdGhpcy52aWV3RmFjdG9yeSA9IHZpZXdGYWN0b3J5O1xyXG4gICAgICAgIHRoaXMucmVzb3VyY2VzID0gdmlld0ZhY3RvcnkucmVzb3VyY2VzO1xyXG4gICAgICAgIHRoaXMuZnJhZ21lbnQgPSBmcmFnbWVudDtcclxuICAgICAgICB0aGlzLmZpcnN0Q2hpbGQgPSBmcmFnbWVudC5maXJzdENoaWxkO1xyXG4gICAgICAgIHRoaXMubGFzdENoaWxkID0gZnJhZ21lbnQubGFzdENoaWxkO1xyXG4gICAgICAgIHRoaXMuY29udHJvbGxlcnMgPSBjb250cm9sbGVycztcclxuICAgICAgICB0aGlzLmJpbmRpbmdzID0gYmluZGluZ3M7XHJcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xyXG4gICAgICAgIHRoaXMuc2xvdHMgPSBzbG90cztcclxuICAgICAgICB0aGlzLmhhc1Nsb3RzID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5mcm9tQ2FjaGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzQm91bmQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzQXR0YWNoZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmJpbmRpbmdDb250ZXh0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLm92ZXJyaWRlQ29udGV4dCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jb250cm9sbGVyID0gbnVsbDtcclxuICAgICAgICB0aGlzLnZpZXdNb2RlbFNjb3BlID0gbnVsbDtcclxuICAgICAgICB0aGlzLmFuaW1hdGFibGVFbGVtZW50ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuX2lzVXNlckNvbnRyb2xsZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNvbnRlbnRWaWV3ID0gbnVsbDtcclxuICAgICAgICBmb3IgKHZhciBfIGluIHNsb3RzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFzU2xvdHMgPSB0cnVlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBWaWV3LnByb3RvdHlwZS5yZXR1cm5Ub0NhY2hlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMudmlld0ZhY3RvcnkucmV0dXJuVmlld1RvQ2FjaGUodGhpcyk7XHJcbiAgICB9O1xyXG4gICAgVmlldy5wcm90b3R5cGUuY3JlYXRlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgaTtcclxuICAgICAgICB2YXIgaWk7XHJcbiAgICAgICAgdmFyIGNvbnRyb2xsZXJzID0gdGhpcy5jb250cm9sbGVycztcclxuICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IGNvbnRyb2xsZXJzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcclxuICAgICAgICAgICAgY29udHJvbGxlcnNbaV0uY3JlYXRlZCh0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgVmlldy5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChiaW5kaW5nQ29udGV4dCwgb3ZlcnJpZGVDb250ZXh0LCBfc3lzdGVtVXBkYXRlKSB7XHJcbiAgICAgICAgdmFyIGNvbnRyb2xsZXJzO1xyXG4gICAgICAgIHZhciBiaW5kaW5ncztcclxuICAgICAgICB2YXIgY2hpbGRyZW47XHJcbiAgICAgICAgdmFyIGk7XHJcbiAgICAgICAgdmFyIGlpO1xyXG4gICAgICAgIGlmIChfc3lzdGVtVXBkYXRlICYmIHRoaXMuX2lzVXNlckNvbnRyb2xsZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5pc0JvdW5kKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmJpbmRpbmdDb250ZXh0ID09PSBiaW5kaW5nQ29udGV4dCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMudW5iaW5kKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNCb3VuZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5iaW5kaW5nQ29udGV4dCA9IGJpbmRpbmdDb250ZXh0O1xyXG4gICAgICAgIHRoaXMub3ZlcnJpZGVDb250ZXh0ID0gb3ZlcnJpZGVDb250ZXh0IHx8IGNyZWF0ZU92ZXJyaWRlQ29udGV4dChiaW5kaW5nQ29udGV4dCk7XHJcbiAgICAgICAgdGhpcy5yZXNvdXJjZXMuX2ludm9rZUhvb2soJ2JlZm9yZUJpbmQnLCB0aGlzKTtcclxuICAgICAgICBiaW5kaW5ncyA9IHRoaXMuYmluZGluZ3M7XHJcbiAgICAgICAgZm9yIChpID0gMCwgaWkgPSBiaW5kaW5ncy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XHJcbiAgICAgICAgICAgIGJpbmRpbmdzW2ldLmJpbmQodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnZpZXdNb2RlbFNjb3BlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGJpbmRpbmdDb250ZXh0LmJpbmQodGhpcy52aWV3TW9kZWxTY29wZS5iaW5kaW5nQ29udGV4dCwgdGhpcy52aWV3TW9kZWxTY29wZS5vdmVycmlkZUNvbnRleHQpO1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdNb2RlbFNjb3BlID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29udHJvbGxlcnMgPSB0aGlzLmNvbnRyb2xsZXJzO1xyXG4gICAgICAgIGZvciAoaSA9IDAsIGlpID0gY29udHJvbGxlcnMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xyXG4gICAgICAgICAgICBjb250cm9sbGVyc1tpXS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47XHJcbiAgICAgICAgZm9yIChpID0gMCwgaWkgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XHJcbiAgICAgICAgICAgIGNoaWxkcmVuW2ldLmJpbmQoYmluZGluZ0NvbnRleHQsIG92ZXJyaWRlQ29udGV4dCwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmhhc1Nsb3RzKSB7XHJcbiAgICAgICAgICAgIFNoYWRvd0RPTS5kaXN0cmlidXRlVmlldyh0aGlzLmNvbnRlbnRWaWV3LCB0aGlzLnNsb3RzKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgVmlldy5wcm90b3R5cGUuYWRkQmluZGluZyA9IGZ1bmN0aW9uIChiaW5kaW5nKSB7XHJcbiAgICAgICAgdGhpcy5iaW5kaW5ncy5wdXNoKGJpbmRpbmcpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzQm91bmQpIHtcclxuICAgICAgICAgICAgYmluZGluZy5iaW5kKHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBWaWV3LnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGNvbnRyb2xsZXJzO1xyXG4gICAgICAgIHZhciBiaW5kaW5ncztcclxuICAgICAgICB2YXIgY2hpbGRyZW47XHJcbiAgICAgICAgdmFyIGk7XHJcbiAgICAgICAgdmFyIGlpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzQm91bmQpIHtcclxuICAgICAgICAgICAgdGhpcy5pc0JvdW5kID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMucmVzb3VyY2VzLl9pbnZva2VIb29rKCdiZWZvcmVVbmJpbmQnLCB0aGlzKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbGxlciAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyLnVuYmluZCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJpbmRpbmdzID0gdGhpcy5iaW5kaW5ncztcclxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWkgPSBiaW5kaW5ncy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XHJcbiAgICAgICAgICAgICAgICBiaW5kaW5nc1tpXS51bmJpbmQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb250cm9sbGVycyA9IHRoaXMuY29udHJvbGxlcnM7XHJcbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGlpID0gY29udHJvbGxlcnMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xyXG4gICAgICAgICAgICAgICAgY29udHJvbGxlcnNbaV0udW5iaW5kKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xyXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcclxuICAgICAgICAgICAgICAgIGNoaWxkcmVuW2ldLnVuYmluZCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuYmluZGluZ0NvbnRleHQgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLm92ZXJyaWRlQ29udGV4dCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIFZpZXcucHJvdG90eXBlLmluc2VydE5vZGVzQmVmb3JlID0gZnVuY3Rpb24gKHJlZk5vZGUpIHtcclxuICAgICAgICByZWZOb2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuZnJhZ21lbnQsIHJlZk5vZGUpO1xyXG4gICAgfTtcclxuICAgIFZpZXcucHJvdG90eXBlLmFwcGVuZE5vZGVzVG8gPSBmdW5jdGlvbiAocGFyZW50KSB7XHJcbiAgICAgICAgcGFyZW50LmFwcGVuZENoaWxkKHRoaXMuZnJhZ21lbnQpO1xyXG4gICAgfTtcclxuICAgIFZpZXcucHJvdG90eXBlLnJlbW92ZU5vZGVzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBmcmFnbWVudCA9IHRoaXMuZnJhZ21lbnQ7XHJcbiAgICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzLmZpcnN0Q2hpbGQ7XHJcbiAgICAgICAgdmFyIGVuZCA9IHRoaXMubGFzdENoaWxkO1xyXG4gICAgICAgIHZhciBuZXh0O1xyXG4gICAgICAgIHdoaWxlIChjdXJyZW50KSB7XHJcbiAgICAgICAgICAgIG5leHQgPSBjdXJyZW50Lm5leHRTaWJsaW5nO1xyXG4gICAgICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChjdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY3VycmVudCA9IG5leHQ7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIFZpZXcucHJvdG90eXBlLmF0dGFjaGVkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBjb250cm9sbGVycztcclxuICAgICAgICB2YXIgY2hpbGRyZW47XHJcbiAgICAgICAgdmFyIGk7XHJcbiAgICAgICAgdmFyIGlpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzQXR0YWNoZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzQXR0YWNoZWQgPSB0cnVlO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2xsZXIgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyLmF0dGFjaGVkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnRyb2xsZXJzID0gdGhpcy5jb250cm9sbGVycztcclxuICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IGNvbnRyb2xsZXJzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcclxuICAgICAgICAgICAgY29udHJvbGxlcnNbaV0uYXR0YWNoZWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xyXG4gICAgICAgIGZvciAoaSA9IDAsIGlpID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xyXG4gICAgICAgICAgICBjaGlsZHJlbltpXS5hdHRhY2hlZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBWaWV3LnByb3RvdHlwZS5kZXRhY2hlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgY29udHJvbGxlcnM7XHJcbiAgICAgICAgdmFyIGNoaWxkcmVuO1xyXG4gICAgICAgIHZhciBpO1xyXG4gICAgICAgIHZhciBpaTtcclxuICAgICAgICBpZiAodGhpcy5pc0F0dGFjaGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNBdHRhY2hlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jb250cm9sbGVyICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXIuZGV0YWNoZWQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb250cm9sbGVycyA9IHRoaXMuY29udHJvbGxlcnM7XHJcbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGlpID0gY29udHJvbGxlcnMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xyXG4gICAgICAgICAgICAgICAgY29udHJvbGxlcnNbaV0uZGV0YWNoZWQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47XHJcbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGlpID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW5baV0uZGV0YWNoZWQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICByZXR1cm4gVmlldztcclxufSgpKTtcblxudmFyIEFuaW1hdG9yID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEFuaW1hdG9yKCkge1xyXG4gICAgfVxyXG4gICAgQW5pbWF0b3IucHJvdG90eXBlLmVudGVyID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgIH07XHJcbiAgICBBbmltYXRvci5wcm90b3R5cGUubGVhdmUgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgfTtcclxuICAgIEFuaW1hdG9yLnByb3RvdHlwZS5yZW1vdmVDbGFzcyA9IGZ1bmN0aW9uIChlbGVtZW50LCBjbGFzc05hbWUpIHtcclxuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lKTtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgIH07XHJcbiAgICBBbmltYXRvci5wcm90b3R5cGUuYWRkQ2xhc3MgPSBmdW5jdGlvbiAoZWxlbWVudCwgY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICB9O1xyXG4gICAgQW5pbWF0b3IucHJvdG90eXBlLmFuaW1hdGUgPSBmdW5jdGlvbiAoZWxlbWVudCwgY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICB9O1xyXG4gICAgQW5pbWF0b3IucHJvdG90eXBlLnJ1blNlcXVlbmNlID0gZnVuY3Rpb24gKGFuaW1hdGlvbnMpIHtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgIH07XHJcbiAgICBBbmltYXRvci5wcm90b3R5cGUucmVnaXN0ZXJFZmZlY3QgPSBmdW5jdGlvbiAoZWZmZWN0TmFtZSwgcHJvcGVydGllcykgeyB9O1xyXG4gICAgQW5pbWF0b3IucHJvdG90eXBlLnVucmVnaXN0ZXJFZmZlY3QgPSBmdW5jdGlvbiAoZWZmZWN0TmFtZSkgeyB9O1xyXG4gICAgcmV0dXJuIEFuaW1hdG9yO1xyXG59KCkpO1xuXG5mdW5jdGlvbiBnZXRBbmltYXRhYmxlRWxlbWVudCh2aWV3KSB7XHJcbiAgICBpZiAodmlldy5hbmltYXRhYmxlRWxlbWVudCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuIHZpZXcuYW5pbWF0YWJsZUVsZW1lbnQ7XHJcbiAgICB9XHJcbiAgICB2YXIgY3VycmVudCA9IHZpZXcuZmlyc3RDaGlsZDtcclxuICAgIHdoaWxlIChjdXJyZW50ICYmIGN1cnJlbnQubm9kZVR5cGUgIT09IDEpIHtcclxuICAgICAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0U2libGluZztcclxuICAgIH1cclxuICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnQubm9kZVR5cGUgPT09IDEpIHtcclxuICAgICAgICByZXR1cm4gKHZpZXcuYW5pbWF0YWJsZUVsZW1lbnQgPSBjdXJyZW50LmNsYXNzTGlzdC5jb250YWlucygnYXUtYW5pbWF0ZScpID8gY3VycmVudCA6IG51bGwpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICh2aWV3LmFuaW1hdGFibGVFbGVtZW50ID0gbnVsbCk7XHJcbn1cclxudmFyIFZpZXdTbG90ID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIFZpZXdTbG90KGFuY2hvciwgYW5jaG9ySXNDb250YWluZXIsIGFuaW1hdG9yKSB7XHJcbiAgICAgICAgaWYgKGFuaW1hdG9yID09PSB2b2lkIDApIHsgYW5pbWF0b3IgPSBBbmltYXRvci5pbnN0YW5jZTsgfVxyXG4gICAgICAgIHRoaXMuYW5jaG9yID0gYW5jaG9yO1xyXG4gICAgICAgIHRoaXMuYW5jaG9ySXNDb250YWluZXIgPSBhbmNob3JJc0NvbnRhaW5lcjtcclxuICAgICAgICB0aGlzLmJpbmRpbmdDb250ZXh0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLm92ZXJyaWRlQ29udGV4dCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5hbmltYXRvciA9IGFuaW1hdG9yO1xyXG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcclxuICAgICAgICB0aGlzLmlzQm91bmQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzQXR0YWNoZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNvbnRlbnRTZWxlY3RvcnMgPSBudWxsO1xyXG4gICAgICAgIGFuY2hvci52aWV3U2xvdCA9IHRoaXM7XHJcbiAgICAgICAgYW5jaG9yLmlzQ29udGVudFByb2plY3Rpb25Tb3VyY2UgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIFZpZXdTbG90LnByb3RvdHlwZS5hbmltYXRlVmlldyA9IGZ1bmN0aW9uICh2aWV3LCBkaXJlY3Rpb24pIHtcclxuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSB2b2lkIDApIHsgZGlyZWN0aW9uID0gJ2VudGVyJzsgfVxyXG4gICAgICAgIHZhciBhbmltYXRhYmxlRWxlbWVudCA9IGdldEFuaW1hdGFibGVFbGVtZW50KHZpZXcpO1xyXG4gICAgICAgIGlmIChhbmltYXRhYmxlRWxlbWVudCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnZW50ZXInOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFuaW1hdG9yLmVudGVyKGFuaW1hdGFibGVFbGVtZW50KTtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ2xlYXZlJzpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hbmltYXRvci5sZWF2ZShhbmltYXRhYmxlRWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBhbmltYXRpb24gZGlyZWN0aW9uOiAnICsgZGlyZWN0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBWaWV3U2xvdC5wcm90b3R5cGUudHJhbnNmb3JtQ2hpbGROb2Rlc0ludG9WaWV3ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBwYXJlbnQgPSB0aGlzLmFuY2hvcjtcclxuICAgICAgICB0aGlzLmNoaWxkcmVuLnB1c2goe1xyXG4gICAgICAgICAgICBmcmFnbWVudDogcGFyZW50LFxyXG4gICAgICAgICAgICBmaXJzdENoaWxkOiBwYXJlbnQuZmlyc3RDaGlsZCxcclxuICAgICAgICAgICAgbGFzdENoaWxkOiBwYXJlbnQubGFzdENoaWxkLFxyXG4gICAgICAgICAgICByZXR1cm5Ub0NhY2hlOiBmdW5jdGlvbiAoKSB7IH0sXHJcbiAgICAgICAgICAgIHJlbW92ZU5vZGVzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbGFzdDtcclxuICAgICAgICAgICAgICAgIHdoaWxlIChsYXN0ID0gcGFyZW50Lmxhc3RDaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudC5yZW1vdmVDaGlsZChsYXN0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY3JlYXRlZDogZnVuY3Rpb24gKCkgeyB9LFxyXG4gICAgICAgICAgICBiaW5kOiBmdW5jdGlvbiAoKSB7IH0sXHJcbiAgICAgICAgICAgIHVuYmluZDogZnVuY3Rpb24gKCkgeyB9LFxyXG4gICAgICAgICAgICBhdHRhY2hlZDogZnVuY3Rpb24gKCkgeyB9LFxyXG4gICAgICAgICAgICBkZXRhY2hlZDogZnVuY3Rpb24gKCkgeyB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgVmlld1Nsb3QucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoYmluZGluZ0NvbnRleHQsIG92ZXJyaWRlQ29udGV4dCkge1xyXG4gICAgICAgIHZhciBpO1xyXG4gICAgICAgIHZhciBpaTtcclxuICAgICAgICB2YXIgY2hpbGRyZW47XHJcbiAgICAgICAgaWYgKHRoaXMuaXNCb3VuZCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5iaW5kaW5nQ29udGV4dCA9PT0gYmluZGluZ0NvbnRleHQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnVuYmluZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzQm91bmQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuYmluZGluZ0NvbnRleHQgPSBiaW5kaW5nQ29udGV4dCA9IGJpbmRpbmdDb250ZXh0IHx8IHRoaXMuYmluZGluZ0NvbnRleHQ7XHJcbiAgICAgICAgdGhpcy5vdmVycmlkZUNvbnRleHQgPSBvdmVycmlkZUNvbnRleHQgPSBvdmVycmlkZUNvbnRleHQgfHwgdGhpcy5vdmVycmlkZUNvbnRleHQ7XHJcbiAgICAgICAgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xyXG4gICAgICAgIGZvciAoaSA9IDAsIGlpID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xyXG4gICAgICAgICAgICBjaGlsZHJlbltpXS5iaW5kKGJpbmRpbmdDb250ZXh0LCBvdmVycmlkZUNvbnRleHQsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBWaWV3U2xvdC5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzQm91bmQpIHtcclxuICAgICAgICAgICAgdmFyIGkgPSB2b2lkIDA7XHJcbiAgICAgICAgICAgIHZhciBpaSA9IHZvaWQgMDtcclxuICAgICAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcclxuICAgICAgICAgICAgdGhpcy5pc0JvdW5kID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuYmluZGluZ0NvbnRleHQgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLm92ZXJyaWRlQ29udGV4dCA9IG51bGw7XHJcbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGlpID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW5baV0udW5iaW5kKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgVmlld1Nsb3QucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uICh2aWV3KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYW5jaG9ySXNDb250YWluZXIpIHtcclxuICAgICAgICAgICAgdmlldy5hcHBlbmROb2Rlc1RvKHRoaXMuYW5jaG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHZpZXcuaW5zZXJ0Tm9kZXNCZWZvcmUodGhpcy5hbmNob3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNoaWxkcmVuLnB1c2godmlldyk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNBdHRhY2hlZCkge1xyXG4gICAgICAgICAgICB2aWV3LmF0dGFjaGVkKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFuaW1hdGVWaWV3KHZpZXcsICdlbnRlcicpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBWaWV3U2xvdC5wcm90b3R5cGUuaW5zZXJ0ID0gZnVuY3Rpb24gKGluZGV4LCB2aWV3KSB7XHJcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcclxuICAgICAgICB2YXIgbGVuZ3RoID0gY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICAgIGlmICgoaW5kZXggPT09IDAgJiYgbGVuZ3RoID09PSAwKSB8fCBpbmRleCA+PSBsZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkKHZpZXcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2aWV3Lmluc2VydE5vZGVzQmVmb3JlKGNoaWxkcmVuW2luZGV4XS5maXJzdENoaWxkKTtcclxuICAgICAgICBjaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIHZpZXcpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzQXR0YWNoZWQpIHtcclxuICAgICAgICAgICAgdmlldy5hdHRhY2hlZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hbmltYXRlVmlldyh2aWV3LCAnZW50ZXInKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgVmlld1Nsb3QucHJvdG90eXBlLm1vdmUgPSBmdW5jdGlvbiAoc291cmNlSW5kZXgsIHRhcmdldEluZGV4KSB7XHJcbiAgICAgICAgaWYgKHNvdXJjZUluZGV4ID09PSB0YXJnZXRJbmRleCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47XHJcbiAgICAgICAgdmFyIHZpZXcgPSBjaGlsZHJlbltzb3VyY2VJbmRleF07XHJcbiAgICAgICAgdmlldy5yZW1vdmVOb2RlcygpO1xyXG4gICAgICAgIHZpZXcuaW5zZXJ0Tm9kZXNCZWZvcmUoY2hpbGRyZW5bdGFyZ2V0SW5kZXhdLmZpcnN0Q2hpbGQpO1xyXG4gICAgICAgIGNoaWxkcmVuLnNwbGljZShzb3VyY2VJbmRleCwgMSk7XHJcbiAgICAgICAgY2hpbGRyZW4uc3BsaWNlKHRhcmdldEluZGV4LCAwLCB2aWV3KTtcclxuICAgIH07XHJcbiAgICBWaWV3U2xvdC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKHZpZXcsIHJldHVyblRvQ2FjaGUsIHNraXBBbmltYXRpb24pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdmVBdCh0aGlzLmNoaWxkcmVuLmluZGV4T2YodmlldyksIHJldHVyblRvQ2FjaGUsIHNraXBBbmltYXRpb24pO1xyXG4gICAgfTtcclxuICAgIFZpZXdTbG90LnByb3RvdHlwZS5yZW1vdmVNYW55ID0gZnVuY3Rpb24gKHZpZXdzVG9SZW1vdmUsIHJldHVyblRvQ2FjaGUsIHNraXBBbmltYXRpb24pIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47XHJcbiAgICAgICAgdmFyIGlpID0gdmlld3NUb1JlbW92ZS5sZW5ndGg7XHJcbiAgICAgICAgdmFyIGk7XHJcbiAgICAgICAgdmFyIHJtUHJvbWlzZXMgPSBbXTtcclxuICAgICAgICB2aWV3c1RvUmVtb3ZlLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XHJcbiAgICAgICAgICAgIGlmIChza2lwQW5pbWF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBjaGlsZC5yZW1vdmVOb2RlcygpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBhbmltYXRpb24gPSBfdGhpcy5hbmltYXRlVmlldyhjaGlsZCwgJ2xlYXZlJyk7XHJcbiAgICAgICAgICAgIGlmIChhbmltYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIHJtUHJvbWlzZXMucHVzaChhbmltYXRpb24udGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiBjaGlsZC5yZW1vdmVOb2RlcygpOyB9KSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjaGlsZC5yZW1vdmVOb2RlcygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdmFyIHJlbW92ZUFjdGlvbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKF90aGlzLmlzQXR0YWNoZWQpIHtcclxuICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpaTsgKytpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmlld3NUb1JlbW92ZVtpXS5kZXRhY2hlZCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChyZXR1cm5Ub0NhY2hlKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaWk7ICsraSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZpZXdzVG9SZW1vdmVbaV0ucmV0dXJuVG9DYWNoZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpaTsgKytpKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBjaGlsZHJlbi5pbmRleE9mKHZpZXdzVG9SZW1vdmVbaV0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAocm1Qcm9taXNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChybVByb21pc2VzKS50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlbW92ZUFjdGlvbigpOyB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlbW92ZUFjdGlvbigpO1xyXG4gICAgfTtcclxuICAgIFZpZXdTbG90LnByb3RvdHlwZS5yZW1vdmVBdCA9IGZ1bmN0aW9uIChpbmRleCwgcmV0dXJuVG9DYWNoZSwgc2tpcEFuaW1hdGlvbikge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdmFyIHZpZXcgPSB0aGlzLmNoaWxkcmVuW2luZGV4XTtcclxuICAgICAgICB2YXIgcmVtb3ZlQWN0aW9uID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpbmRleCA9IF90aGlzLmNoaWxkcmVuLmluZGV4T2Yodmlldyk7XHJcbiAgICAgICAgICAgIHZpZXcucmVtb3ZlTm9kZXMoKTtcclxuICAgICAgICAgICAgX3RoaXMuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgaWYgKF90aGlzLmlzQXR0YWNoZWQpIHtcclxuICAgICAgICAgICAgICAgIHZpZXcuZGV0YWNoZWQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocmV0dXJuVG9DYWNoZSkge1xyXG4gICAgICAgICAgICAgICAgdmlldy5yZXR1cm5Ub0NhY2hlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHZpZXc7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoIXNraXBBbmltYXRpb24pIHtcclxuICAgICAgICAgICAgdmFyIGFuaW1hdGlvbiA9IHRoaXMuYW5pbWF0ZVZpZXcodmlldywgJ2xlYXZlJyk7XHJcbiAgICAgICAgICAgIGlmIChhbmltYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhbmltYXRpb24udGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiByZW1vdmVBY3Rpb24oKTsgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlbW92ZUFjdGlvbigpO1xyXG4gICAgfTtcclxuICAgIFZpZXdTbG90LnByb3RvdHlwZS5yZW1vdmVBbGwgPSBmdW5jdGlvbiAocmV0dXJuVG9DYWNoZSwgc2tpcEFuaW1hdGlvbikge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcclxuICAgICAgICB2YXIgaWkgPSBjaGlsZHJlbi5sZW5ndGg7XHJcbiAgICAgICAgdmFyIGk7XHJcbiAgICAgICAgdmFyIHJtUHJvbWlzZXMgPSBbXTtcclxuICAgICAgICBjaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xyXG4gICAgICAgICAgICBpZiAoc2tpcEFuaW1hdGlvbikge1xyXG4gICAgICAgICAgICAgICAgY2hpbGQucmVtb3ZlTm9kZXMoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgYW5pbWF0aW9uID0gX3RoaXMuYW5pbWF0ZVZpZXcoY2hpbGQsICdsZWF2ZScpO1xyXG4gICAgICAgICAgICBpZiAoYW5pbWF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBybVByb21pc2VzLnB1c2goYW5pbWF0aW9uLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4gY2hpbGQucmVtb3ZlTm9kZXMoKTsgfSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY2hpbGQucmVtb3ZlTm9kZXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHZhciByZW1vdmVBY3Rpb24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChfdGhpcy5pc0F0dGFjaGVkKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaWk7ICsraSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuW2ldLmRldGFjaGVkKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHJldHVyblRvQ2FjaGUpIHtcclxuICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpaTsgKytpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gY2hpbGRyZW5baV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLnJldHVyblRvQ2FjaGUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgX3RoaXMuY2hpbGRyZW4gPSBbXTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChybVByb21pc2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHJtUHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVtb3ZlQWN0aW9uKCk7IH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVtb3ZlQWN0aW9uKCk7XHJcbiAgICB9O1xyXG4gICAgVmlld1Nsb3QucHJvdG90eXBlLmF0dGFjaGVkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBpO1xyXG4gICAgICAgIHZhciBpaTtcclxuICAgICAgICB2YXIgY2hpbGRyZW47XHJcbiAgICAgICAgdmFyIGNoaWxkO1xyXG4gICAgICAgIGlmICh0aGlzLmlzQXR0YWNoZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzQXR0YWNoZWQgPSB0cnVlO1xyXG4gICAgICAgIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcclxuICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcclxuICAgICAgICAgICAgY2hpbGQgPSBjaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgY2hpbGQuYXR0YWNoZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5hbmltYXRlVmlldyhjaGlsZCwgJ2VudGVyJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIFZpZXdTbG90LnByb3RvdHlwZS5kZXRhY2hlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgaTtcclxuICAgICAgICB2YXIgaWk7XHJcbiAgICAgICAgdmFyIGNoaWxkcmVuO1xyXG4gICAgICAgIGlmICh0aGlzLmlzQXR0YWNoZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5pc0F0dGFjaGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcclxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWkgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XHJcbiAgICAgICAgICAgICAgICBjaGlsZHJlbltpXS5kZXRhY2hlZCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIFZpZXdTbG90LnByb3RvdHlwZS5wcm9qZWN0VG8gPSBmdW5jdGlvbiAoc2xvdHMpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMucHJvamVjdFRvU2xvdHMgPSBzbG90cztcclxuICAgICAgICB0aGlzLmFkZCA9IHRoaXMuX3Byb2plY3Rpb25BZGQ7XHJcbiAgICAgICAgdGhpcy5pbnNlcnQgPSB0aGlzLl9wcm9qZWN0aW9uSW5zZXJ0O1xyXG4gICAgICAgIHRoaXMubW92ZSA9IHRoaXMuX3Byb2plY3Rpb25Nb3ZlO1xyXG4gICAgICAgIHRoaXMucmVtb3ZlID0gdGhpcy5fcHJvamVjdGlvblJlbW92ZTtcclxuICAgICAgICB0aGlzLnJlbW92ZUF0ID0gdGhpcy5fcHJvamVjdGlvblJlbW92ZUF0O1xyXG4gICAgICAgIHRoaXMucmVtb3ZlTWFueSA9IHRoaXMuX3Byb2plY3Rpb25SZW1vdmVNYW55O1xyXG4gICAgICAgIHRoaXMucmVtb3ZlQWxsID0gdGhpcy5fcHJvamVjdGlvblJlbW92ZUFsbDtcclxuICAgICAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKHZpZXcpIHsgcmV0dXJuIFNoYWRvd0RPTS5kaXN0cmlidXRlVmlldyh2aWV3LCBzbG90cywgX3RoaXMpOyB9KTtcclxuICAgIH07XHJcbiAgICBWaWV3U2xvdC5wcm90b3R5cGUuX3Byb2plY3Rpb25BZGQgPSBmdW5jdGlvbiAodmlldykge1xyXG4gICAgICAgIFNoYWRvd0RPTS5kaXN0cmlidXRlVmlldyh2aWV3LCB0aGlzLnByb2plY3RUb1Nsb3RzLCB0aGlzKTtcclxuICAgICAgICB0aGlzLmNoaWxkcmVuLnB1c2godmlldyk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNBdHRhY2hlZCkge1xyXG4gICAgICAgICAgICB2aWV3LmF0dGFjaGVkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIFZpZXdTbG90LnByb3RvdHlwZS5fcHJvamVjdGlvbkluc2VydCA9IGZ1bmN0aW9uIChpbmRleCwgdmlldykge1xyXG4gICAgICAgIGlmICgoaW5kZXggPT09IDAgJiYgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoKSB8fCBpbmRleCA+PSB0aGlzLmNoaWxkcmVuLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLmFkZCh2aWV3KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIFNoYWRvd0RPTS5kaXN0cmlidXRlVmlldyh2aWV3LCB0aGlzLnByb2plY3RUb1Nsb3RzLCB0aGlzLCBpbmRleCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAwLCB2aWV3KTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNBdHRhY2hlZCkge1xyXG4gICAgICAgICAgICAgICAgdmlldy5hdHRhY2hlZCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIFZpZXdTbG90LnByb3RvdHlwZS5fcHJvamVjdGlvbk1vdmUgPSBmdW5jdGlvbiAoc291cmNlSW5kZXgsIHRhcmdldEluZGV4KSB7XHJcbiAgICAgICAgaWYgKHNvdXJjZUluZGV4ID09PSB0YXJnZXRJbmRleCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47XHJcbiAgICAgICAgdmFyIHZpZXcgPSBjaGlsZHJlbltzb3VyY2VJbmRleF07XHJcbiAgICAgICAgU2hhZG93RE9NLnVuZGlzdHJpYnV0ZVZpZXcodmlldywgdGhpcy5wcm9qZWN0VG9TbG90cywgdGhpcyk7XHJcbiAgICAgICAgU2hhZG93RE9NLmRpc3RyaWJ1dGVWaWV3KHZpZXcsIHRoaXMucHJvamVjdFRvU2xvdHMsIHRoaXMsIHRhcmdldEluZGV4KTtcclxuICAgICAgICBjaGlsZHJlbi5zcGxpY2Uoc291cmNlSW5kZXgsIDEpO1xyXG4gICAgICAgIGNoaWxkcmVuLnNwbGljZSh0YXJnZXRJbmRleCwgMCwgdmlldyk7XHJcbiAgICB9O1xyXG4gICAgVmlld1Nsb3QucHJvdG90eXBlLl9wcm9qZWN0aW9uUmVtb3ZlID0gZnVuY3Rpb24gKHZpZXcsIHJldHVyblRvQ2FjaGUpIHtcclxuICAgICAgICBTaGFkb3dET00udW5kaXN0cmlidXRlVmlldyh2aWV3LCB0aGlzLnByb2plY3RUb1Nsb3RzLCB0aGlzKTtcclxuICAgICAgICB0aGlzLmNoaWxkcmVuLnNwbGljZSh0aGlzLmNoaWxkcmVuLmluZGV4T2YodmlldyksIDEpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzQXR0YWNoZWQpIHtcclxuICAgICAgICAgICAgdmlldy5kZXRhY2hlZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmV0dXJuVG9DYWNoZSkge1xyXG4gICAgICAgICAgICB2aWV3LnJldHVyblRvQ2FjaGUoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgVmlld1Nsb3QucHJvdG90eXBlLl9wcm9qZWN0aW9uUmVtb3ZlQXQgPSBmdW5jdGlvbiAoaW5kZXgsIHJldHVyblRvQ2FjaGUpIHtcclxuICAgICAgICB2YXIgdmlldyA9IHRoaXMuY2hpbGRyZW5baW5kZXhdO1xyXG4gICAgICAgIFNoYWRvd0RPTS51bmRpc3RyaWJ1dGVWaWV3KHZpZXcsIHRoaXMucHJvamVjdFRvU2xvdHMsIHRoaXMpO1xyXG4gICAgICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICBpZiAodGhpcy5pc0F0dGFjaGVkKSB7XHJcbiAgICAgICAgICAgIHZpZXcuZGV0YWNoZWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJldHVyblRvQ2FjaGUpIHtcclxuICAgICAgICAgICAgdmlldy5yZXR1cm5Ub0NhY2hlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIFZpZXdTbG90LnByb3RvdHlwZS5fcHJvamVjdGlvblJlbW92ZU1hbnkgPSBmdW5jdGlvbiAodmlld3NUb1JlbW92ZSwgcmV0dXJuVG9DYWNoZSkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdmlld3NUb1JlbW92ZS5mb3JFYWNoKGZ1bmN0aW9uICh2aWV3KSB7IHJldHVybiBfdGhpcy5yZW1vdmUodmlldywgcmV0dXJuVG9DYWNoZSk7IH0pO1xyXG4gICAgfTtcclxuICAgIFZpZXdTbG90LnByb3RvdHlwZS5fcHJvamVjdGlvblJlbW92ZUFsbCA9IGZ1bmN0aW9uIChyZXR1cm5Ub0NhY2hlKSB7XHJcbiAgICAgICAgU2hhZG93RE9NLnVuZGlzdHJpYnV0ZUFsbCh0aGlzLnByb2plY3RUb1Nsb3RzLCB0aGlzKTtcclxuICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xyXG4gICAgICAgIHZhciBpaSA9IGNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlpOyArK2kpIHtcclxuICAgICAgICAgICAgaWYgKHJldHVyblRvQ2FjaGUpIHtcclxuICAgICAgICAgICAgICAgIGNoaWxkcmVuW2ldLnJldHVyblRvQ2FjaGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLmlzQXR0YWNoZWQpIHtcclxuICAgICAgICAgICAgICAgIGNoaWxkcmVuW2ldLmRldGFjaGVkKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBWaWV3U2xvdDtcclxufSgpKTtcblxudmFyICRyZXNvbHZlciA9IHJlc29sdmVyO1xyXG52YXIgUHJvdmlkZXJSZXNvbHZlciA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBQcm92aWRlclJlc29sdmVyKCkge1xyXG4gICAgfVxyXG4gICAgUHJvdmlkZXJSZXNvbHZlci5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGNvbnRhaW5lciwga2V5KSB7XHJcbiAgICAgICAgdmFyIGlkID0ga2V5Ll9fcHJvdmlkZXJJZF9fO1xyXG4gICAgICAgIHJldHVybiBpZCBpbiBjb250YWluZXIgPyBjb250YWluZXJbaWRdIDogKGNvbnRhaW5lcltpZF0gPSBjb250YWluZXIuaW52b2tlKGtleSkpO1xyXG4gICAgfTtcclxuICAgIFByb3ZpZGVyUmVzb2x2ZXIgPSBfX2RlY29yYXRlKFtcclxuICAgICAgICAkcmVzb2x2ZXJcclxuICAgIF0sIFByb3ZpZGVyUmVzb2x2ZXIpO1xyXG4gICAgcmV0dXJuIFByb3ZpZGVyUmVzb2x2ZXI7XHJcbn0oKSk7XHJcbnZhciBwcm92aWRlclJlc29sdmVySW5zdGFuY2UgPSBuZXcgUHJvdmlkZXJSZXNvbHZlcigpO1xyXG5mdW5jdGlvbiBlbGVtZW50Q29udGFpbmVyR2V0KGtleSkge1xyXG4gICAgaWYgKGtleSA9PT0gRE9NLkVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50O1xyXG4gICAgfVxyXG4gICAgaWYgKGtleSA9PT0gQm91bmRWaWV3RmFjdG9yeSkge1xyXG4gICAgICAgIGlmICh0aGlzLmJvdW5kVmlld0ZhY3RvcnkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYm91bmRWaWV3RmFjdG9yeTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGZhY3RvcnkgPSB0aGlzLmluc3RydWN0aW9uLnZpZXdGYWN0b3J5O1xyXG4gICAgICAgIHZhciBwYXJ0UmVwbGFjZW1lbnRzID0gdGhpcy5wYXJ0UmVwbGFjZW1lbnRzO1xyXG4gICAgICAgIGlmIChwYXJ0UmVwbGFjZW1lbnRzKSB7XHJcbiAgICAgICAgICAgIGZhY3RvcnkgPSBwYXJ0UmVwbGFjZW1lbnRzW2ZhY3RvcnkucGFydF0gfHwgZmFjdG9yeTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5ib3VuZFZpZXdGYWN0b3J5ID0gbmV3IEJvdW5kVmlld0ZhY3RvcnkodGhpcywgZmFjdG9yeSwgcGFydFJlcGxhY2VtZW50cyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYm91bmRWaWV3RmFjdG9yeTtcclxuICAgIH1cclxuICAgIGlmIChrZXkgPT09IFZpZXdTbG90KSB7XHJcbiAgICAgICAgaWYgKHRoaXMudmlld1Nsb3QgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdTbG90ID0gbmV3IFZpZXdTbG90KHRoaXMuZWxlbWVudCwgdGhpcy5pbnN0cnVjdGlvbi5hbmNob3JJc0NvbnRhaW5lcik7XHJcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5pc0NvbnRlbnRQcm9qZWN0aW9uU291cmNlID0gdGhpcy5pbnN0cnVjdGlvbi5saWZ0aW5nO1xyXG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuLnB1c2godGhpcy52aWV3U2xvdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdTbG90O1xyXG4gICAgfVxyXG4gICAgaWYgKGtleSA9PT0gRWxlbWVudEV2ZW50cykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRFdmVudHMgfHwgKHRoaXMuZWxlbWVudEV2ZW50cyA9IG5ldyBFbGVtZW50RXZlbnRzKHRoaXMuZWxlbWVudCkpO1xyXG4gICAgfVxyXG4gICAgaWYgKGtleSA9PT0gQ29tcG9zaXRpb25UcmFuc2FjdGlvbikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbXBvc2l0aW9uVHJhbnNhY3Rpb24gfHwgKHRoaXMuY29tcG9zaXRpb25UcmFuc2FjdGlvbiA9IHRoaXMucGFyZW50LmdldChrZXkpKTtcclxuICAgIH1cclxuICAgIGlmIChrZXkgPT09IFZpZXdSZXNvdXJjZXMpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52aWV3UmVzb3VyY2VzO1xyXG4gICAgfVxyXG4gICAgaWYgKGtleSA9PT0gVGFyZ2V0SW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pbnN0cnVjdGlvbjtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLnN1cGVyR2V0KGtleSk7XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudENvbnRhaW5lcihwYXJlbnQsIGVsZW1lbnQsIGluc3RydWN0aW9uLCBjaGlsZHJlbiwgcGFydFJlcGxhY2VtZW50cywgcmVzb3VyY2VzKSB7XHJcbiAgICB2YXIgY29udGFpbmVyID0gcGFyZW50LmNyZWF0ZUNoaWxkKCk7XHJcbiAgICB2YXIgcHJvdmlkZXJzO1xyXG4gICAgdmFyIGk7XHJcbiAgICBjb250YWluZXIuZWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgICBjb250YWluZXIuaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbjtcclxuICAgIGNvbnRhaW5lci5jaGlsZHJlbiA9IGNoaWxkcmVuO1xyXG4gICAgY29udGFpbmVyLnZpZXdSZXNvdXJjZXMgPSByZXNvdXJjZXM7XHJcbiAgICBjb250YWluZXIucGFydFJlcGxhY2VtZW50cyA9IHBhcnRSZXBsYWNlbWVudHM7XHJcbiAgICBwcm92aWRlcnMgPSBpbnN0cnVjdGlvbi5wcm92aWRlcnM7XHJcbiAgICBpID0gcHJvdmlkZXJzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgICBjb250YWluZXIuX3Jlc29sdmVycy5zZXQocHJvdmlkZXJzW2ldLCBwcm92aWRlclJlc29sdmVySW5zdGFuY2UpO1xyXG4gICAgfVxyXG4gICAgY29udGFpbmVyLnN1cGVyR2V0ID0gY29udGFpbmVyLmdldDtcclxuICAgIGNvbnRhaW5lci5nZXQgPSBlbGVtZW50Q29udGFpbmVyR2V0O1xyXG4gICAgcmV0dXJuIGNvbnRhaW5lcjtcclxufVxyXG5mdW5jdGlvbiBoYXNBdHRyaWJ1dGUobmFtZSkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQuaGFzQXR0cmlidXRlKG5hbWUpO1xyXG59XHJcbmZ1bmN0aW9uIGdldEF0dHJpYnV0ZShuYW1lKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUobmFtZSk7XHJcbn1cclxuZnVuY3Rpb24gc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKSB7XHJcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XHJcbn1cclxuZnVuY3Rpb24gbWFrZUVsZW1lbnRJbnRvQW5jaG9yKGVsZW1lbnQsIGVsZW1lbnRJbnN0cnVjdGlvbikge1xyXG4gICAgdmFyIGFuY2hvciA9IERPTS5jcmVhdGVDb21tZW50KCdhbmNob3InKTtcclxuICAgIGlmIChlbGVtZW50SW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICB2YXIgZmlyc3RDaGlsZCA9IGVsZW1lbnQuZmlyc3RDaGlsZDtcclxuICAgICAgICBpZiAoZmlyc3RDaGlsZCAmJiBmaXJzdENoaWxkLnRhZ05hbWUgPT09ICdBVS1DT05URU5UJykge1xyXG4gICAgICAgICAgICBhbmNob3IuY29udGVudEVsZW1lbnQgPSBmaXJzdENoaWxkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhbmNob3IuX2VsZW1lbnQgPSBlbGVtZW50O1xyXG4gICAgICAgIGFuY2hvci5oYXNBdHRyaWJ1dGUgPSBoYXNBdHRyaWJ1dGU7XHJcbiAgICAgICAgYW5jaG9yLmdldEF0dHJpYnV0ZSA9IGdldEF0dHJpYnV0ZTtcclxuICAgICAgICBhbmNob3Iuc2V0QXR0cmlidXRlID0gc2V0QXR0cmlidXRlO1xyXG4gICAgfVxyXG4gICAgRE9NLnJlcGxhY2VOb2RlKGFuY2hvciwgZWxlbWVudCk7XHJcbiAgICByZXR1cm4gYW5jaG9yO1xyXG59XHJcbmZ1bmN0aW9uIGFwcGx5SW5zdHJ1Y3Rpb25zKGNvbnRhaW5lcnMsIGVsZW1lbnQsIGluc3RydWN0aW9uLCBjb250cm9sbGVycywgYmluZGluZ3MsIGNoaWxkcmVuLCBzaGFkb3dTbG90cywgcGFydFJlcGxhY2VtZW50cywgcmVzb3VyY2VzKSB7XHJcbiAgICB2YXIgYmVoYXZpb3JJbnN0cnVjdGlvbnMgPSBpbnN0cnVjdGlvbi5iZWhhdmlvckluc3RydWN0aW9ucztcclxuICAgIHZhciBleHByZXNzaW9ucyA9IGluc3RydWN0aW9uLmV4cHJlc3Npb25zO1xyXG4gICAgdmFyIGVsZW1lbnRDb250YWluZXI7XHJcbiAgICB2YXIgaTtcclxuICAgIHZhciBpaTtcclxuICAgIHZhciBjdXJyZW50O1xyXG4gICAgdmFyIGluc3RhbmNlO1xyXG4gICAgaWYgKGluc3RydWN0aW9uLmNvbnRlbnRFeHByZXNzaW9uKSB7XHJcbiAgICAgICAgYmluZGluZ3MucHVzaChpbnN0cnVjdGlvbi5jb250ZW50RXhwcmVzc2lvbi5jcmVhdGVCaW5kaW5nKGVsZW1lbnQubmV4dFNpYmxpbmcpKTtcclxuICAgICAgICBlbGVtZW50Lm5leHRTaWJsaW5nLmF1SW50ZXJwb2xhdGlvblRhcmdldCA9IHRydWU7XHJcbiAgICAgICAgZWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsZW1lbnQpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChpbnN0cnVjdGlvbi5zaGFkb3dTbG90KSB7XHJcbiAgICAgICAgdmFyIGNvbW1lbnRBbmNob3IgPSBET00uY3JlYXRlQ29tbWVudCgnc2xvdCcpO1xyXG4gICAgICAgIHZhciBzbG90ID0gdm9pZCAwO1xyXG4gICAgICAgIGlmIChpbnN0cnVjdGlvbi5zbG90RGVzdGluYXRpb24pIHtcclxuICAgICAgICAgICAgc2xvdCA9IG5ldyBQYXNzVGhyb3VnaFNsb3QoY29tbWVudEFuY2hvciwgaW5zdHJ1Y3Rpb24uc2xvdE5hbWUsIGluc3RydWN0aW9uLnNsb3REZXN0aW5hdGlvbiwgaW5zdHJ1Y3Rpb24uc2xvdEZhbGxiYWNrRmFjdG9yeSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBzbG90ID0gbmV3IFNoYWRvd1Nsb3QoY29tbWVudEFuY2hvciwgaW5zdHJ1Y3Rpb24uc2xvdE5hbWUsIGluc3RydWN0aW9uLnNsb3RGYWxsYmFja0ZhY3RvcnkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBET00ucmVwbGFjZU5vZGUoY29tbWVudEFuY2hvciwgZWxlbWVudCk7XHJcbiAgICAgICAgc2hhZG93U2xvdHNbaW5zdHJ1Y3Rpb24uc2xvdE5hbWVdID0gc2xvdDtcclxuICAgICAgICBjb250cm9sbGVycy5wdXNoKHNsb3QpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChpbnN0cnVjdGlvbi5sZXRFbGVtZW50KSB7XHJcbiAgICAgICAgZm9yIChpID0gMCwgaWkgPSBleHByZXNzaW9ucy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XHJcbiAgICAgICAgICAgIGJpbmRpbmdzLnB1c2goZXhwcmVzc2lvbnNbaV0uY3JlYXRlQmluZGluZygpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsZW1lbnQpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChiZWhhdmlvckluc3RydWN0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICBpZiAoIWluc3RydWN0aW9uLmFuY2hvcklzQ29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQgPSBtYWtlRWxlbWVudEludG9BbmNob3IoZWxlbWVudCwgaW5zdHJ1Y3Rpb24uZWxlbWVudEluc3RydWN0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29udGFpbmVyc1tpbnN0cnVjdGlvbi5pbmplY3RvcklkXSA9IGVsZW1lbnRDb250YWluZXIgPVxyXG4gICAgICAgICAgICBjcmVhdGVFbGVtZW50Q29udGFpbmVyKGNvbnRhaW5lcnNbaW5zdHJ1Y3Rpb24ucGFyZW50SW5qZWN0b3JJZF0sIGVsZW1lbnQsIGluc3RydWN0aW9uLCBjaGlsZHJlbiwgcGFydFJlcGxhY2VtZW50cywgcmVzb3VyY2VzKTtcclxuICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IGJlaGF2aW9ySW5zdHJ1Y3Rpb25zLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcclxuICAgICAgICAgICAgY3VycmVudCA9IGJlaGF2aW9ySW5zdHJ1Y3Rpb25zW2ldO1xyXG4gICAgICAgICAgICBpbnN0YW5jZSA9IGN1cnJlbnQudHlwZS5jcmVhdGUoZWxlbWVudENvbnRhaW5lciwgY3VycmVudCwgZWxlbWVudCwgYmluZGluZ3MpO1xyXG4gICAgICAgICAgICBjb250cm9sbGVycy5wdXNoKGluc3RhbmNlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKGkgPSAwLCBpaSA9IGV4cHJlc3Npb25zLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcclxuICAgICAgICBiaW5kaW5ncy5wdXNoKGV4cHJlc3Npb25zW2ldLmNyZWF0ZUJpbmRpbmcoZWxlbWVudCkpO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHN0eWxlU3RyaW5nVG9PYmplY3Qoc3R5bGUsIHRhcmdldCkge1xyXG4gICAgdmFyIGF0dHJpYnV0ZXMgPSBzdHlsZS5zcGxpdCgnOycpO1xyXG4gICAgdmFyIGZpcnN0SW5kZXhPZkNvbG9uO1xyXG4gICAgdmFyIGk7XHJcbiAgICB2YXIgY3VycmVudDtcclxuICAgIHZhciBrZXk7XHJcbiAgICB2YXIgdmFsdWU7XHJcbiAgICB0YXJnZXQgPSB0YXJnZXQgfHwge307XHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgYXR0cmlidXRlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGN1cnJlbnQgPSBhdHRyaWJ1dGVzW2ldO1xyXG4gICAgICAgIGZpcnN0SW5kZXhPZkNvbG9uID0gY3VycmVudC5pbmRleE9mKCc6Jyk7XHJcbiAgICAgICAga2V5ID0gY3VycmVudC5zdWJzdHJpbmcoMCwgZmlyc3RJbmRleE9mQ29sb24pLnRyaW0oKTtcclxuICAgICAgICB2YWx1ZSA9IGN1cnJlbnQuc3Vic3RyaW5nKGZpcnN0SW5kZXhPZkNvbG9uICsgMSkudHJpbSgpO1xyXG4gICAgICAgIHRhcmdldFtrZXldID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGFyZ2V0O1xyXG59XHJcbmZ1bmN0aW9uIHN0eWxlT2JqZWN0VG9TdHJpbmcob2JqKSB7XHJcbiAgICB2YXIgcmVzdWx0ID0gJyc7XHJcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XHJcbiAgICAgICAgcmVzdWx0ICs9IGtleSArICc6JyArIG9ialtrZXldICsgJzsnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5mdW5jdGlvbiBhcHBseVN1cnJvZ2F0ZUluc3RydWN0aW9uKGNvbnRhaW5lciwgZWxlbWVudCwgaW5zdHJ1Y3Rpb24sIGNvbnRyb2xsZXJzLCBiaW5kaW5ncywgY2hpbGRyZW4pIHtcclxuICAgIHZhciBiZWhhdmlvckluc3RydWN0aW9ucyA9IGluc3RydWN0aW9uLmJlaGF2aW9ySW5zdHJ1Y3Rpb25zO1xyXG4gICAgdmFyIGV4cHJlc3Npb25zID0gaW5zdHJ1Y3Rpb24uZXhwcmVzc2lvbnM7XHJcbiAgICB2YXIgcHJvdmlkZXJzID0gaW5zdHJ1Y3Rpb24ucHJvdmlkZXJzO1xyXG4gICAgdmFyIHZhbHVlcyA9IGluc3RydWN0aW9uLnZhbHVlcztcclxuICAgIHZhciBpO1xyXG4gICAgdmFyIGlpO1xyXG4gICAgdmFyIGN1cnJlbnQ7XHJcbiAgICB2YXIgaW5zdGFuY2U7XHJcbiAgICB2YXIgY3VycmVudEF0dHJpYnV0ZVZhbHVlO1xyXG4gICAgaSA9IHByb3ZpZGVycy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgICAgY29udGFpbmVyLl9yZXNvbHZlcnMuc2V0KHByb3ZpZGVyc1tpXSwgcHJvdmlkZXJSZXNvbHZlckluc3RhbmNlKTtcclxuICAgIH1cclxuICAgIGZvciAodmFyIGtleSBpbiB2YWx1ZXMpIHtcclxuICAgICAgICBjdXJyZW50QXR0cmlidXRlVmFsdWUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShrZXkpO1xyXG4gICAgICAgIGlmIChjdXJyZW50QXR0cmlidXRlVmFsdWUpIHtcclxuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2NsYXNzJykge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgY3VycmVudEF0dHJpYnV0ZVZhbHVlICsgJyAnICsgdmFsdWVzW2tleV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gJ3N0eWxlJykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHN0eWxlT2JqZWN0ID0gc3R5bGVTdHJpbmdUb09iamVjdCh2YWx1ZXNba2V5XSk7XHJcbiAgICAgICAgICAgICAgICBzdHlsZVN0cmluZ1RvT2JqZWN0KGN1cnJlbnRBdHRyaWJ1dGVWYWx1ZSwgc3R5bGVPYmplY3QpO1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgc3R5bGVPYmplY3RUb1N0cmluZyhzdHlsZU9iamVjdCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShrZXksIHZhbHVlc1trZXldKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoYmVoYXZpb3JJbnN0cnVjdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgZm9yIChpID0gMCwgaWkgPSBiZWhhdmlvckluc3RydWN0aW9ucy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnQgPSBiZWhhdmlvckluc3RydWN0aW9uc1tpXTtcclxuICAgICAgICAgICAgaW5zdGFuY2UgPSBjdXJyZW50LnR5cGUuY3JlYXRlKGNvbnRhaW5lciwgY3VycmVudCwgZWxlbWVudCwgYmluZGluZ3MpO1xyXG4gICAgICAgICAgICBpZiAoaW5zdGFuY2UuY29udGVudFZpZXcpIHtcclxuICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goaW5zdGFuY2UuY29udGVudFZpZXcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnRyb2xsZXJzLnB1c2goaW5zdGFuY2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAoaSA9IDAsIGlpID0gZXhwcmVzc2lvbnMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xyXG4gICAgICAgIGJpbmRpbmdzLnB1c2goZXhwcmVzc2lvbnNbaV0uY3JlYXRlQmluZGluZyhlbGVtZW50KSk7XHJcbiAgICB9XHJcbn1cclxudmFyIEJvdW5kVmlld0ZhY3RvcnkgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gQm91bmRWaWV3RmFjdG9yeShwYXJlbnRDb250YWluZXIsIHZpZXdGYWN0b3J5LCBwYXJ0UmVwbGFjZW1lbnRzKSB7XHJcbiAgICAgICAgdGhpcy5wYXJlbnRDb250YWluZXIgPSBwYXJlbnRDb250YWluZXI7XHJcbiAgICAgICAgdGhpcy52aWV3RmFjdG9yeSA9IHZpZXdGYWN0b3J5O1xyXG4gICAgICAgIHRoaXMuZmFjdG9yeUNyZWF0ZUluc3RydWN0aW9uID0geyBwYXJ0UmVwbGFjZW1lbnRzOiBwYXJ0UmVwbGFjZW1lbnRzIH07XHJcbiAgICB9XHJcbiAgICBCb3VuZFZpZXdGYWN0b3J5LnByb3RvdHlwZS5jcmVhdGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHZpZXcgPSB0aGlzLnZpZXdGYWN0b3J5LmNyZWF0ZSh0aGlzLnBhcmVudENvbnRhaW5lci5jcmVhdGVDaGlsZCgpLCB0aGlzLmZhY3RvcnlDcmVhdGVJbnN0cnVjdGlvbik7XHJcbiAgICAgICAgdmlldy5faXNVc2VyQ29udHJvbGxlZCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHZpZXc7XHJcbiAgICB9O1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJvdW5kVmlld0ZhY3RvcnkucHJvdG90eXBlLCBcImlzQ2FjaGluZ1wiLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZpZXdGYWN0b3J5LmlzQ2FjaGluZztcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICBCb3VuZFZpZXdGYWN0b3J5LnByb3RvdHlwZS5zZXRDYWNoZVNpemUgPSBmdW5jdGlvbiAoc2l6ZSwgZG9Ob3RPdmVycmlkZUlmQWxyZWFkeVNldCkge1xyXG4gICAgICAgIHRoaXMudmlld0ZhY3Rvcnkuc2V0Q2FjaGVTaXplKHNpemUsIGRvTm90T3ZlcnJpZGVJZkFscmVhZHlTZXQpO1xyXG4gICAgfTtcclxuICAgIEJvdW5kVmlld0ZhY3RvcnkucHJvdG90eXBlLmdldENhY2hlZFZpZXcgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0ZhY3RvcnkuZ2V0Q2FjaGVkVmlldygpO1xyXG4gICAgfTtcclxuICAgIEJvdW5kVmlld0ZhY3RvcnkucHJvdG90eXBlLnJldHVyblZpZXdUb0NhY2hlID0gZnVuY3Rpb24gKHZpZXcpIHtcclxuICAgICAgICB0aGlzLnZpZXdGYWN0b3J5LnJldHVyblZpZXdUb0NhY2hlKHZpZXcpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBCb3VuZFZpZXdGYWN0b3J5O1xyXG59KCkpO1xyXG52YXIgVmlld0ZhY3RvcnkgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gVmlld0ZhY3RvcnkodGVtcGxhdGUsIGluc3RydWN0aW9ucywgcmVzb3VyY2VzKSB7XHJcbiAgICAgICAgdGhpcy5pc0NhY2hpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlID0gdGVtcGxhdGU7XHJcbiAgICAgICAgdGhpcy5pbnN0cnVjdGlvbnMgPSBpbnN0cnVjdGlvbnM7XHJcbiAgICAgICAgdGhpcy5yZXNvdXJjZXMgPSByZXNvdXJjZXM7XHJcbiAgICAgICAgdGhpcy5jYWNoZVNpemUgPSAtMTtcclxuICAgICAgICB0aGlzLmNhY2hlID0gbnVsbDtcclxuICAgIH1cclxuICAgIFZpZXdGYWN0b3J5LnByb3RvdHlwZS5zZXRDYWNoZVNpemUgPSBmdW5jdGlvbiAoc2l6ZSwgZG9Ob3RPdmVycmlkZUlmQWxyZWFkeVNldCkge1xyXG4gICAgICAgIGlmIChzaXplKSB7XHJcbiAgICAgICAgICAgIGlmIChzaXplID09PSAnKicpIHtcclxuICAgICAgICAgICAgICAgIHNpemUgPSBOdW1iZXIuTUFYX1ZBTFVFO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBzaXplID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgc2l6ZSA9IHBhcnNlSW50KHNpemUsIDEwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jYWNoZVNpemUgPT09IC0xIHx8ICFkb05vdE92ZXJyaWRlSWZBbHJlYWR5U2V0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FjaGVTaXplID0gTnVtYmVyKHNpemUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jYWNoZVNpemUgPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FjaGUgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FjaGUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzQ2FjaGluZyA9IHRoaXMuY2FjaGVTaXplID4gMDtcclxuICAgIH07XHJcbiAgICBWaWV3RmFjdG9yeS5wcm90b3R5cGUuZ2V0Q2FjaGVkVmlldyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYWNoZSAhPT0gbnVsbCA/ICh0aGlzLmNhY2hlLnBvcCgpIHx8IG51bGwpIDogbnVsbDtcclxuICAgIH07XHJcbiAgICBWaWV3RmFjdG9yeS5wcm90b3R5cGUucmV0dXJuVmlld1RvQ2FjaGUgPSBmdW5jdGlvbiAodmlldykge1xyXG4gICAgICAgIGlmICh2aWV3LmlzQXR0YWNoZWQpIHtcclxuICAgICAgICAgICAgdmlldy5kZXRhY2hlZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmlldy5pc0JvdW5kKSB7XHJcbiAgICAgICAgICAgIHZpZXcudW5iaW5kKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmNhY2hlICE9PSBudWxsICYmIHRoaXMuY2FjaGUubGVuZ3RoIDwgdGhpcy5jYWNoZVNpemUpIHtcclxuICAgICAgICAgICAgdmlldy5mcm9tQ2FjaGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmNhY2hlLnB1c2godmlldyk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIFZpZXdGYWN0b3J5LnByb3RvdHlwZS5jcmVhdGUgPSBmdW5jdGlvbiAoY29udGFpbmVyLCBjcmVhdGVJbnN0cnVjdGlvbiwgZWxlbWVudCkge1xyXG4gICAgICAgIGNyZWF0ZUluc3RydWN0aW9uID0gY3JlYXRlSW5zdHJ1Y3Rpb24gfHwgQmVoYXZpb3JJbnN0cnVjdGlvbi5ub3JtYWw7XHJcbiAgICAgICAgdmFyIGNhY2hlZFZpZXcgPSB0aGlzLmdldENhY2hlZFZpZXcoKTtcclxuICAgICAgICBpZiAoY2FjaGVkVmlldyAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkVmlldztcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGZyYWdtZW50ID0gY3JlYXRlSW5zdHJ1Y3Rpb24uZW5oYW5jZSA/IHRoaXMudGVtcGxhdGUgOiB0aGlzLnRlbXBsYXRlLmNsb25lTm9kZSh0cnVlKTtcclxuICAgICAgICB2YXIgaW5zdHJ1Y3RhYmxlcyA9IGZyYWdtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5hdS10YXJnZXQnKTtcclxuICAgICAgICB2YXIgaW5zdHJ1Y3Rpb25zID0gdGhpcy5pbnN0cnVjdGlvbnM7XHJcbiAgICAgICAgdmFyIHJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xyXG4gICAgICAgIHZhciBjb250cm9sbGVycyA9IFtdO1xyXG4gICAgICAgIHZhciBiaW5kaW5ncyA9IFtdO1xyXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IFtdO1xyXG4gICAgICAgIHZhciBzaGFkb3dTbG90cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XHJcbiAgICAgICAgdmFyIGNvbnRhaW5lcnMgPSB7IHJvb3Q6IGNvbnRhaW5lciB9O1xyXG4gICAgICAgIHZhciBwYXJ0UmVwbGFjZW1lbnRzID0gY3JlYXRlSW5zdHJ1Y3Rpb24ucGFydFJlcGxhY2VtZW50cztcclxuICAgICAgICB2YXIgaTtcclxuICAgICAgICB2YXIgaWk7XHJcbiAgICAgICAgdmFyIHZpZXc7XHJcbiAgICAgICAgdmFyIGluc3RydWN0YWJsZTtcclxuICAgICAgICB2YXIgaW5zdHJ1Y3Rpb247XHJcbiAgICAgICAgdGhpcy5yZXNvdXJjZXMuX2ludm9rZUhvb2soJ2JlZm9yZUNyZWF0ZScsIHRoaXMsIGNvbnRhaW5lciwgZnJhZ21lbnQsIGNyZWF0ZUluc3RydWN0aW9uKTtcclxuICAgICAgICBpZiAoZWxlbWVudCAmJiB0aGlzLnN1cnJvZ2F0ZUluc3RydWN0aW9uICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGFwcGx5U3Vycm9nYXRlSW5zdHJ1Y3Rpb24oY29udGFpbmVyLCBlbGVtZW50LCB0aGlzLnN1cnJvZ2F0ZUluc3RydWN0aW9uLCBjb250cm9sbGVycywgYmluZGluZ3MsIGNoaWxkcmVuKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNyZWF0ZUluc3RydWN0aW9uLmVuaGFuY2UgJiYgZnJhZ21lbnQuaGFzQXR0cmlidXRlKCdhdS10YXJnZXQtaWQnKSkge1xyXG4gICAgICAgICAgICBpbnN0cnVjdGFibGUgPSBmcmFnbWVudDtcclxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnNbaW5zdHJ1Y3RhYmxlLmdldEF0dHJpYnV0ZSgnYXUtdGFyZ2V0LWlkJyldO1xyXG4gICAgICAgICAgICBhcHBseUluc3RydWN0aW9ucyhjb250YWluZXJzLCBpbnN0cnVjdGFibGUsIGluc3RydWN0aW9uLCBjb250cm9sbGVycywgYmluZGluZ3MsIGNoaWxkcmVuLCBzaGFkb3dTbG90cywgcGFydFJlcGxhY2VtZW50cywgcmVzb3VyY2VzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChpID0gMCwgaWkgPSBpbnN0cnVjdGFibGVzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcclxuICAgICAgICAgICAgaW5zdHJ1Y3RhYmxlID0gaW5zdHJ1Y3RhYmxlc1tpXTtcclxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnNbaW5zdHJ1Y3RhYmxlLmdldEF0dHJpYnV0ZSgnYXUtdGFyZ2V0LWlkJyldO1xyXG4gICAgICAgICAgICBhcHBseUluc3RydWN0aW9ucyhjb250YWluZXJzLCBpbnN0cnVjdGFibGUsIGluc3RydWN0aW9uLCBjb250cm9sbGVycywgYmluZGluZ3MsIGNoaWxkcmVuLCBzaGFkb3dTbG90cywgcGFydFJlcGxhY2VtZW50cywgcmVzb3VyY2VzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmlldyA9IG5ldyBWaWV3KGNvbnRhaW5lciwgdGhpcywgZnJhZ21lbnQsIGNvbnRyb2xsZXJzLCBiaW5kaW5ncywgY2hpbGRyZW4sIHNoYWRvd1Nsb3RzKTtcclxuICAgICAgICBpZiAoIWNyZWF0ZUluc3RydWN0aW9uLmluaXRpYXRlZEJ5QmVoYXZpb3IpIHtcclxuICAgICAgICAgICAgdmlldy5jcmVhdGVkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVzb3VyY2VzLl9pbnZva2VIb29rKCdhZnRlckNyZWF0ZScsIHZpZXcpO1xyXG4gICAgICAgIHJldHVybiB2aWV3O1xyXG4gICAgfTtcclxuICAgIHJldHVybiBWaWV3RmFjdG9yeTtcclxufSgpKTtcblxudmFyIG5leHRJbmplY3RvcklkID0gMDtcclxuZnVuY3Rpb24gZ2V0TmV4dEluamVjdG9ySWQoKSB7XHJcbiAgICByZXR1cm4gKytuZXh0SW5qZWN0b3JJZDtcclxufVxyXG52YXIgbGFzdEFVVGFyZ2V0SUQgPSAwO1xyXG5mdW5jdGlvbiBnZXROZXh0QVVUYXJnZXRJRCgpIHtcclxuICAgIHJldHVybiAoKytsYXN0QVVUYXJnZXRJRCkudG9TdHJpbmcoKTtcclxufVxyXG5mdW5jdGlvbiBtYWtlSW50b0luc3RydWN0aW9uVGFyZ2V0KGVsZW1lbnQpIHtcclxuICAgIHZhciB2YWx1ZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdjbGFzcycpO1xyXG4gICAgdmFyIGF1VGFyZ2V0SUQgPSBnZXROZXh0QVVUYXJnZXRJRCgpO1xyXG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgKHZhbHVlID8gdmFsdWUgKyAnIGF1LXRhcmdldCcgOiAnYXUtdGFyZ2V0JykpO1xyXG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2F1LXRhcmdldC1pZCcsIGF1VGFyZ2V0SUQpO1xyXG4gICAgcmV0dXJuIGF1VGFyZ2V0SUQ7XHJcbn1cclxuZnVuY3Rpb24gbWFrZVNoYWRvd1Nsb3QoY29tcGlsZXIsIHJlc291cmNlcywgbm9kZSwgaW5zdHJ1Y3Rpb25zLCBwYXJlbnRJbmplY3RvcklkKSB7XHJcbiAgICB2YXIgYXVTaGFkb3dTbG90ID0gRE9NLmNyZWF0ZUVsZW1lbnQoJ2F1LXNoYWRvdy1zbG90Jyk7XHJcbiAgICBET00ucmVwbGFjZU5vZGUoYXVTaGFkb3dTbG90LCBub2RlKTtcclxuICAgIHZhciBhdVRhcmdldElEID0gbWFrZUludG9JbnN0cnVjdGlvblRhcmdldChhdVNoYWRvd1Nsb3QpO1xyXG4gICAgdmFyIGluc3RydWN0aW9uID0gVGFyZ2V0SW5zdHJ1Y3Rpb24uc2hhZG93U2xvdChwYXJlbnRJbmplY3RvcklkKTtcclxuICAgIGluc3RydWN0aW9uLnNsb3ROYW1lID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ25hbWUnKSB8fCBTaGFkb3dET00uZGVmYXVsdFNsb3RLZXk7XHJcbiAgICBpbnN0cnVjdGlvbi5zbG90RGVzdGluYXRpb24gPSBub2RlLmdldEF0dHJpYnV0ZSgnc2xvdCcpO1xyXG4gICAgaWYgKG5vZGUuaW5uZXJIVE1MLnRyaW0oKSkge1xyXG4gICAgICAgIHZhciBmcmFnbWVudCA9IERPTS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XHJcbiAgICAgICAgdmFyIGNoaWxkID0gdm9pZCAwO1xyXG4gICAgICAgIHdoaWxlIChjaGlsZCA9IG5vZGUuZmlyc3RDaGlsZCkge1xyXG4gICAgICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChjaGlsZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGluc3RydWN0aW9uLnNsb3RGYWxsYmFja0ZhY3RvcnkgPSBjb21waWxlci5jb21waWxlKGZyYWdtZW50LCByZXNvdXJjZXMpO1xyXG4gICAgfVxyXG4gICAgaW5zdHJ1Y3Rpb25zW2F1VGFyZ2V0SURdID0gaW5zdHJ1Y3Rpb247XHJcbiAgICByZXR1cm4gYXVTaGFkb3dTbG90O1xyXG59XHJcbnZhciBkZWZhdWx0TGV0SGFuZGxlciA9IEJpbmRpbmdMYW5ndWFnZS5wcm90b3R5cGUuY3JlYXRlTGV0RXhwcmVzc2lvbnM7XHJcbnZhciBWaWV3Q29tcGlsZXIgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gVmlld0NvbXBpbGVyKGJpbmRpbmdMYW5ndWFnZSwgcmVzb3VyY2VzKSB7XHJcbiAgICAgICAgdGhpcy5iaW5kaW5nTGFuZ3VhZ2UgPSBiaW5kaW5nTGFuZ3VhZ2U7XHJcbiAgICAgICAgdGhpcy5yZXNvdXJjZXMgPSByZXNvdXJjZXM7XHJcbiAgICB9XHJcbiAgICBWaWV3Q29tcGlsZXIuaW5qZWN0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBbQmluZGluZ0xhbmd1YWdlLCBWaWV3UmVzb3VyY2VzXTtcclxuICAgIH07XHJcbiAgICBWaWV3Q29tcGlsZXIucHJvdG90eXBlLmNvbXBpbGUgPSBmdW5jdGlvbiAoc291cmNlLCByZXNvdXJjZXMsIGNvbXBpbGVJbnN0cnVjdGlvbikge1xyXG4gICAgICAgIHJlc291cmNlcyA9IHJlc291cmNlcyB8fCB0aGlzLnJlc291cmNlcztcclxuICAgICAgICBjb21waWxlSW5zdHJ1Y3Rpb24gPSBjb21waWxlSW5zdHJ1Y3Rpb24gfHwgVmlld0NvbXBpbGVJbnN0cnVjdGlvbi5ub3JtYWw7XHJcbiAgICAgICAgc291cmNlID0gdHlwZW9mIHNvdXJjZSA9PT0gJ3N0cmluZycgPyBET00uY3JlYXRlVGVtcGxhdGVGcm9tTWFya3VwKHNvdXJjZSkgOiBzb3VyY2U7XHJcbiAgICAgICAgdmFyIGNvbnRlbnQ7XHJcbiAgICAgICAgdmFyIHBhcnQ7XHJcbiAgICAgICAgdmFyIGNhY2hlU2l6ZTtcclxuICAgICAgICBpZiAoc291cmNlLmNvbnRlbnQpIHtcclxuICAgICAgICAgICAgcGFydCA9IHNvdXJjZS5nZXRBdHRyaWJ1dGUoJ3BhcnQnKTtcclxuICAgICAgICAgICAgY2FjaGVTaXplID0gc291cmNlLmdldEF0dHJpYnV0ZSgndmlldy1jYWNoZScpO1xyXG4gICAgICAgICAgICBjb250ZW50ID0gRE9NLmFkb3B0Tm9kZShzb3VyY2UuY29udGVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb250ZW50ID0gc291cmNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb21waWxlSW5zdHJ1Y3Rpb24udGFyZ2V0U2hhZG93RE9NID0gY29tcGlsZUluc3RydWN0aW9uLnRhcmdldFNoYWRvd0RPTSAmJiBGRUFUVVJFLnNoYWRvd0RPTTtcclxuICAgICAgICByZXNvdXJjZXMuX2ludm9rZUhvb2soJ2JlZm9yZUNvbXBpbGUnLCBjb250ZW50LCByZXNvdXJjZXMsIGNvbXBpbGVJbnN0cnVjdGlvbik7XHJcbiAgICAgICAgdmFyIGluc3RydWN0aW9ucyA9IHt9O1xyXG4gICAgICAgIHRoaXMuX2NvbXBpbGVOb2RlKGNvbnRlbnQsIHJlc291cmNlcywgaW5zdHJ1Y3Rpb25zLCBzb3VyY2UsICdyb290JywgIWNvbXBpbGVJbnN0cnVjdGlvbi50YXJnZXRTaGFkb3dET00pO1xyXG4gICAgICAgIHZhciBmaXJzdENoaWxkID0gY29udGVudC5maXJzdENoaWxkO1xyXG4gICAgICAgIGlmIChmaXJzdENoaWxkICYmIGZpcnN0Q2hpbGQubm9kZVR5cGUgPT09IDEpIHtcclxuICAgICAgICAgICAgdmFyIHRhcmdldElkID0gZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoJ2F1LXRhcmdldC1pZCcpO1xyXG4gICAgICAgICAgICBpZiAodGFyZ2V0SWQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBpbnMgPSBpbnN0cnVjdGlvbnNbdGFyZ2V0SWRdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlucy5zaGFkb3dTbG90IHx8IGlucy5saWZ0aW5nIHx8IChpbnMuZWxlbWVudEluc3RydWN0aW9uICYmICFpbnMuZWxlbWVudEluc3RydWN0aW9uLmFuY2hvcklzQ29udGFpbmVyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuaW5zZXJ0QmVmb3JlKERPTS5jcmVhdGVDb21tZW50KCd2aWV3JyksIGZpcnN0Q2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBmYWN0b3J5ID0gbmV3IFZpZXdGYWN0b3J5KGNvbnRlbnQsIGluc3RydWN0aW9ucywgcmVzb3VyY2VzKTtcclxuICAgICAgICBmYWN0b3J5LnN1cnJvZ2F0ZUluc3RydWN0aW9uID0gY29tcGlsZUluc3RydWN0aW9uLmNvbXBpbGVTdXJyb2dhdGUgPyB0aGlzLl9jb21waWxlU3Vycm9nYXRlKHNvdXJjZSwgcmVzb3VyY2VzKSA6IG51bGw7XHJcbiAgICAgICAgZmFjdG9yeS5wYXJ0ID0gcGFydDtcclxuICAgICAgICBpZiAoY2FjaGVTaXplKSB7XHJcbiAgICAgICAgICAgIGZhY3Rvcnkuc2V0Q2FjaGVTaXplKGNhY2hlU2l6ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc291cmNlcy5faW52b2tlSG9vaygnYWZ0ZXJDb21waWxlJywgZmFjdG9yeSk7XHJcbiAgICAgICAgcmV0dXJuIGZhY3Rvcnk7XHJcbiAgICB9O1xyXG4gICAgVmlld0NvbXBpbGVyLnByb3RvdHlwZS5fY29tcGlsZU5vZGUgPSBmdW5jdGlvbiAobm9kZSwgcmVzb3VyY2VzLCBpbnN0cnVjdGlvbnMsIHBhcmVudE5vZGUsIHBhcmVudEluamVjdG9ySWQsIHRhcmdldExpZ2h0RE9NKSB7XHJcbiAgICAgICAgc3dpdGNoIChub2RlLm5vZGVUeXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb21waWxlRWxlbWVudChub2RlLCByZXNvdXJjZXMsIGluc3RydWN0aW9ucywgcGFyZW50Tm9kZSwgcGFyZW50SW5qZWN0b3JJZCwgdGFyZ2V0TGlnaHRET00pO1xyXG4gICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICB2YXIgZXhwcmVzc2lvbiA9IHJlc291cmNlcy5nZXRCaW5kaW5nTGFuZ3VhZ2UodGhpcy5iaW5kaW5nTGFuZ3VhZ2UpLmluc3BlY3RUZXh0Q29udGVudChyZXNvdXJjZXMsIG5vZGUud2hvbGVUZXh0KTtcclxuICAgICAgICAgICAgICAgIGlmIChleHByZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1hcmtlciA9IERPTS5jcmVhdGVFbGVtZW50KCdhdS1tYXJrZXInKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYXVUYXJnZXRJRCA9IG1ha2VJbnRvSW5zdHJ1Y3Rpb25UYXJnZXQobWFya2VyKTtcclxuICAgICAgICAgICAgICAgICAgICAobm9kZS5wYXJlbnROb2RlIHx8IHBhcmVudE5vZGUpLmluc2VydEJlZm9yZShtYXJrZXIsIG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUudGV4dENvbnRlbnQgPSAnICc7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2F1VGFyZ2V0SURdID0gVGFyZ2V0SW5zdHJ1Y3Rpb24uY29udGVudEV4cHJlc3Npb24oZXhwcmVzc2lvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG5vZGUubmV4dFNpYmxpbmcgJiYgbm9kZS5uZXh0U2libGluZy5ub2RlVHlwZSA9PT0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAobm9kZS5wYXJlbnROb2RlIHx8IHBhcmVudE5vZGUpLnJlbW92ZUNoaWxkKG5vZGUubmV4dFNpYmxpbmcpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChub2RlLm5leHRTaWJsaW5nICYmIG5vZGUubmV4dFNpYmxpbmcubm9kZVR5cGUgPT09IDMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgICAgIGNhc2UgMTE6XHJcbiAgICAgICAgICAgICAgICB2YXIgY3VycmVudENoaWxkID0gbm9kZS5maXJzdENoaWxkO1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKGN1cnJlbnRDaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDaGlsZCA9IHRoaXMuX2NvbXBpbGVOb2RlKGN1cnJlbnRDaGlsZCwgcmVzb3VyY2VzLCBpbnN0cnVjdGlvbnMsIG5vZGUsIHBhcmVudEluamVjdG9ySWQsIHRhcmdldExpZ2h0RE9NKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbm9kZS5uZXh0U2libGluZztcclxuICAgIH07XHJcbiAgICBWaWV3Q29tcGlsZXIucHJvdG90eXBlLl9jb21waWxlU3Vycm9nYXRlID0gZnVuY3Rpb24gKG5vZGUsIHJlc291cmNlcykge1xyXG4gICAgICAgIHZhciB0YWdOYW1lID0gbm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBub2RlLmF0dHJpYnV0ZXM7XHJcbiAgICAgICAgdmFyIGJpbmRpbmdMYW5ndWFnZSA9IHJlc291cmNlcy5nZXRCaW5kaW5nTGFuZ3VhZ2UodGhpcy5iaW5kaW5nTGFuZ3VhZ2UpO1xyXG4gICAgICAgIHZhciBrbm93bkF0dHJpYnV0ZTtcclxuICAgICAgICB2YXIgcHJvcGVydHk7XHJcbiAgICAgICAgdmFyIGluc3RydWN0aW9uO1xyXG4gICAgICAgIHZhciBpO1xyXG4gICAgICAgIHZhciBpaTtcclxuICAgICAgICB2YXIgYXR0cjtcclxuICAgICAgICB2YXIgYXR0ck5hbWU7XHJcbiAgICAgICAgdmFyIGF0dHJWYWx1ZTtcclxuICAgICAgICB2YXIgaW5mbztcclxuICAgICAgICB2YXIgdHlwZTtcclxuICAgICAgICB2YXIgZXhwcmVzc2lvbnMgPSBbXTtcclxuICAgICAgICB2YXIgZXhwcmVzc2lvbjtcclxuICAgICAgICB2YXIgYmVoYXZpb3JJbnN0cnVjdGlvbnMgPSBbXTtcclxuICAgICAgICB2YXIgdmFsdWVzID0ge307XHJcbiAgICAgICAgdmFyIGhhc1ZhbHVlcyA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBwcm92aWRlcnMgPSBbXTtcclxuICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IGF0dHJpYnV0ZXMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xyXG4gICAgICAgICAgICBhdHRyID0gYXR0cmlidXRlc1tpXTtcclxuICAgICAgICAgICAgYXR0ck5hbWUgPSBhdHRyLm5hbWU7XHJcbiAgICAgICAgICAgIGF0dHJWYWx1ZSA9IGF0dHIudmFsdWU7XHJcbiAgICAgICAgICAgIGluZm8gPSBiaW5kaW5nTGFuZ3VhZ2UuaW5zcGVjdEF0dHJpYnV0ZShyZXNvdXJjZXMsIHRhZ05hbWUsIGF0dHJOYW1lLCBhdHRyVmFsdWUpO1xyXG4gICAgICAgICAgICB0eXBlID0gcmVzb3VyY2VzLmdldEF0dHJpYnV0ZShpbmZvLmF0dHJOYW1lKTtcclxuICAgICAgICAgICAgaWYgKHR5cGUpIHtcclxuICAgICAgICAgICAgICAgIGtub3duQXR0cmlidXRlID0gcmVzb3VyY2VzLm1hcEF0dHJpYnV0ZShpbmZvLmF0dHJOYW1lKTtcclxuICAgICAgICAgICAgICAgIGlmIChrbm93bkF0dHJpYnV0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5ID0gdHlwZS5hdHRyaWJ1dGVzW2tub3duQXR0cmlidXRlXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5kZWZhdWx0QmluZGluZ01vZGUgPSBwcm9wZXJ0eS5kZWZhdWx0QmluZGluZ01vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaW5mby5jb21tYW5kICYmICFpbmZvLmV4cHJlc3Npb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8uY29tbWFuZCA9IHByb3BlcnR5Lmhhc09wdGlvbnMgPyAnb3B0aW9ucycgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmZvLmNvbW1hbmQgJiYgKGluZm8uY29tbWFuZCAhPT0gJ29wdGlvbnMnKSAmJiB0eXBlLnByaW1hcnlQcm9wZXJ0eSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByaW1hcnlQcm9wZXJ0eSA9IHR5cGUucHJpbWFyeVByb3BlcnR5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ck5hbWUgPSBpbmZvLmF0dHJOYW1lID0gcHJpbWFyeVByb3BlcnR5LmF0dHJpYnV0ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8uZGVmYXVsdEJpbmRpbmdNb2RlID0gcHJpbWFyeVByb3BlcnR5LmRlZmF1bHRCaW5kaW5nTW9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpbnN0cnVjdGlvbiA9IGJpbmRpbmdMYW5ndWFnZS5jcmVhdGVBdHRyaWJ1dGVJbnN0cnVjdGlvbihyZXNvdXJjZXMsIG5vZGUsIGluZm8sIHVuZGVmaW5lZCwgdHlwZSk7XHJcbiAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGluc3RydWN0aW9uLmFsdGVyZWRBdHRyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9IHJlc291cmNlcy5nZXRBdHRyaWJ1dGUoaW5zdHJ1Y3Rpb24uYXR0ck5hbWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGluc3RydWN0aW9uLmRpc2NyZXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnMucHVzaChpbnN0cnVjdGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbi50eXBlID0gdHlwZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29uZmlndXJlUHJvcGVydGllcyhpbnN0cnVjdGlvbiwgcmVzb3VyY2VzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUubGlmdHNDb250ZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBjYW5ub3QgcGxhY2UgYSB0ZW1wbGF0ZSBjb250cm9sbGVyIG9uIGEgc3Vycm9nYXRlIGVsZW1lbnQuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWhhdmlvckluc3RydWN0aW9ucy5wdXNoKGluc3RydWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnMucHVzaChpbnN0cnVjdGlvbi5hdHRyaWJ1dGVzW2luc3RydWN0aW9uLmF0dHJOYW1lXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbiA9IEJlaGF2aW9ySW5zdHJ1Y3Rpb24uYXR0cmlidXRlKGF0dHJOYW1lLCB0eXBlKTtcclxuICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbi5hdHRyaWJ1dGVzW3Jlc291cmNlcy5tYXBBdHRyaWJ1dGUoYXR0ck5hbWUpXSA9IGF0dHJWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZS5saWZ0c0NvbnRlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgY2Fubm90IHBsYWNlIGEgdGVtcGxhdGUgY29udHJvbGxlciBvbiBhIHN1cnJvZ2F0ZSBlbGVtZW50LicpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmVoYXZpb3JJbnN0cnVjdGlvbnMucHVzaChpbnN0cnVjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoYXR0ck5hbWUgIT09ICdpZCcgJiYgYXR0ck5hbWUgIT09ICdwYXJ0JyAmJiBhdHRyTmFtZSAhPT0gJ3JlcGxhY2UtcGFydCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBoYXNWYWx1ZXMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlc1thdHRyTmFtZV0gPSBhdHRyVmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGV4cHJlc3Npb25zLmxlbmd0aCB8fCBiZWhhdmlvckluc3RydWN0aW9ucy5sZW5ndGggfHwgaGFzVmFsdWVzKSB7XHJcbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGlpID0gYmVoYXZpb3JJbnN0cnVjdGlvbnMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xyXG4gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb24gPSBiZWhhdmlvckluc3RydWN0aW9uc1tpXTtcclxuICAgICAgICAgICAgICAgIGluc3RydWN0aW9uLnR5cGUuY29tcGlsZSh0aGlzLCByZXNvdXJjZXMsIG5vZGUsIGluc3RydWN0aW9uKTtcclxuICAgICAgICAgICAgICAgIHByb3ZpZGVycy5wdXNoKGluc3RydWN0aW9uLnR5cGUudGFyZ2V0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IGV4cHJlc3Npb25zLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcclxuICAgICAgICAgICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uc1tpXTtcclxuICAgICAgICAgICAgICAgIGlmIChleHByZXNzaW9uLmF0dHJUb1JlbW92ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoZXhwcmVzc2lvbi5hdHRyVG9SZW1vdmUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBUYXJnZXRJbnN0cnVjdGlvbi5zdXJyb2dhdGUocHJvdmlkZXJzLCBiZWhhdmlvckluc3RydWN0aW9ucywgZXhwcmVzc2lvbnMsIHZhbHVlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfTtcclxuICAgIFZpZXdDb21waWxlci5wcm90b3R5cGUuX2NvbXBpbGVFbGVtZW50ID0gZnVuY3Rpb24gKG5vZGUsIHJlc291cmNlcywgaW5zdHJ1Y3Rpb25zLCBwYXJlbnROb2RlLCBwYXJlbnRJbmplY3RvcklkLCB0YXJnZXRMaWdodERPTSkge1xyXG4gICAgICAgIHZhciB0YWdOYW1lID0gbm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBub2RlLmF0dHJpYnV0ZXM7XHJcbiAgICAgICAgdmFyIGV4cHJlc3Npb25zID0gW107XHJcbiAgICAgICAgdmFyIGV4cHJlc3Npb247XHJcbiAgICAgICAgdmFyIGJlaGF2aW9ySW5zdHJ1Y3Rpb25zID0gW107XHJcbiAgICAgICAgdmFyIHByb3ZpZGVycyA9IFtdO1xyXG4gICAgICAgIHZhciBiaW5kaW5nTGFuZ3VhZ2UgPSByZXNvdXJjZXMuZ2V0QmluZGluZ0xhbmd1YWdlKHRoaXMuYmluZGluZ0xhbmd1YWdlKTtcclxuICAgICAgICB2YXIgbGlmdGluZ0luc3RydWN0aW9uO1xyXG4gICAgICAgIHZhciB2aWV3RmFjdG9yeTtcclxuICAgICAgICB2YXIgdHlwZTtcclxuICAgICAgICB2YXIgZWxlbWVudEluc3RydWN0aW9uO1xyXG4gICAgICAgIHZhciBlbGVtZW50UHJvcGVydHk7XHJcbiAgICAgICAgdmFyIGk7XHJcbiAgICAgICAgdmFyIGlpO1xyXG4gICAgICAgIHZhciBhdHRyO1xyXG4gICAgICAgIHZhciBhdHRyTmFtZTtcclxuICAgICAgICB2YXIgYXR0clZhbHVlO1xyXG4gICAgICAgIHZhciBvcmlnaW5hbEF0dHJOYW1lO1xyXG4gICAgICAgIHZhciBpbnN0cnVjdGlvbjtcclxuICAgICAgICB2YXIgaW5mbztcclxuICAgICAgICB2YXIgcHJvcGVydHk7XHJcbiAgICAgICAgdmFyIGtub3duQXR0cmlidXRlO1xyXG4gICAgICAgIHZhciBhdVRhcmdldElEO1xyXG4gICAgICAgIHZhciBpbmplY3RvcklkO1xyXG4gICAgICAgIGlmICh0YWdOYW1lID09PSAnc2xvdCcpIHtcclxuICAgICAgICAgICAgaWYgKHRhcmdldExpZ2h0RE9NKSB7XHJcbiAgICAgICAgICAgICAgICBub2RlID0gbWFrZVNoYWRvd1Nsb3QodGhpcywgcmVzb3VyY2VzLCBub2RlLCBpbnN0cnVjdGlvbnMsIHBhcmVudEluamVjdG9ySWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBub2RlLm5leHRTaWJsaW5nO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0YWdOYW1lID09PSAndGVtcGxhdGUnKSB7XHJcbiAgICAgICAgICAgIGlmICghKCdjb250ZW50JyBpbiBub2RlKSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgY2Fubm90IHBsYWNlIGEgdGVtcGxhdGUgZWxlbWVudCB3aXRoaW4gJyArIG5vZGUubmFtZXNwYWNlVVJJICsgJyBuYW1lc3BhY2UnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2aWV3RmFjdG9yeSA9IHRoaXMuY29tcGlsZShub2RlLCByZXNvdXJjZXMpO1xyXG4gICAgICAgICAgICB2aWV3RmFjdG9yeS5wYXJ0ID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ3BhcnQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHR5cGUgPSByZXNvdXJjZXMuZ2V0RWxlbWVudChub2RlLmdldEF0dHJpYnV0ZSgnYXMtZWxlbWVudCcpIHx8IHRhZ05hbWUpO1xyXG4gICAgICAgICAgICBpZiAodGFnTmFtZSA9PT0gJ2xldCcgJiYgIXR5cGUgJiYgYmluZGluZ0xhbmd1YWdlLmNyZWF0ZUxldEV4cHJlc3Npb25zICE9PSBkZWZhdWx0TGV0SGFuZGxlcikge1xyXG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbnMgPSBiaW5kaW5nTGFuZ3VhZ2UuY3JlYXRlTGV0RXhwcmVzc2lvbnMocmVzb3VyY2VzLCBub2RlKTtcclxuICAgICAgICAgICAgICAgIGF1VGFyZ2V0SUQgPSBtYWtlSW50b0luc3RydWN0aW9uVGFyZ2V0KG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2F1VGFyZ2V0SURdID0gVGFyZ2V0SW5zdHJ1Y3Rpb24ubGV0RWxlbWVudChleHByZXNzaW9ucyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5uZXh0U2libGluZztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodHlwZSkge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudEluc3RydWN0aW9uID0gQmVoYXZpb3JJbnN0cnVjdGlvbi5lbGVtZW50KG5vZGUsIHR5cGUpO1xyXG4gICAgICAgICAgICAgICAgdHlwZS5wcm9jZXNzQXR0cmlidXRlcyh0aGlzLCByZXNvdXJjZXMsIG5vZGUsIGF0dHJpYnV0ZXMsIGVsZW1lbnRJbnN0cnVjdGlvbik7XHJcbiAgICAgICAgICAgICAgICBiZWhhdmlvckluc3RydWN0aW9ucy5wdXNoKGVsZW1lbnRJbnN0cnVjdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChpID0gMCwgaWkgPSBhdHRyaWJ1dGVzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcclxuICAgICAgICAgICAgYXR0ciA9IGF0dHJpYnV0ZXNbaV07XHJcbiAgICAgICAgICAgIG9yaWdpbmFsQXR0ck5hbWUgPSBhdHRyTmFtZSA9IGF0dHIubmFtZTtcclxuICAgICAgICAgICAgYXR0clZhbHVlID0gYXR0ci52YWx1ZTtcclxuICAgICAgICAgICAgaW5mbyA9IGJpbmRpbmdMYW5ndWFnZS5pbnNwZWN0QXR0cmlidXRlKHJlc291cmNlcywgdGFnTmFtZSwgYXR0ck5hbWUsIGF0dHJWYWx1ZSk7XHJcbiAgICAgICAgICAgIGlmICh0YXJnZXRMaWdodERPTSAmJiBpbmZvLmF0dHJOYW1lID09PSAnc2xvdCcpIHtcclxuICAgICAgICAgICAgICAgIGluZm8uYXR0ck5hbWUgPSBhdHRyTmFtZSA9ICdhdS1zbG90JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0eXBlID0gcmVzb3VyY2VzLmdldEF0dHJpYnV0ZShpbmZvLmF0dHJOYW1lKTtcclxuICAgICAgICAgICAgZWxlbWVudFByb3BlcnR5ID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKHR5cGUpIHtcclxuICAgICAgICAgICAgICAgIGtub3duQXR0cmlidXRlID0gcmVzb3VyY2VzLm1hcEF0dHJpYnV0ZShpbmZvLmF0dHJOYW1lKTtcclxuICAgICAgICAgICAgICAgIGlmIChrbm93bkF0dHJpYnV0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5ID0gdHlwZS5hdHRyaWJ1dGVzW2tub3duQXR0cmlidXRlXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5kZWZhdWx0QmluZGluZ01vZGUgPSBwcm9wZXJ0eS5kZWZhdWx0QmluZGluZ01vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaW5mby5jb21tYW5kICYmICFpbmZvLmV4cHJlc3Npb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8uY29tbWFuZCA9IHByb3BlcnR5Lmhhc09wdGlvbnMgPyAnb3B0aW9ucycgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmZvLmNvbW1hbmQgJiYgKGluZm8uY29tbWFuZCAhPT0gJ29wdGlvbnMnKSAmJiB0eXBlLnByaW1hcnlQcm9wZXJ0eSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByaW1hcnlQcm9wZXJ0eSA9IHR5cGUucHJpbWFyeVByb3BlcnR5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ck5hbWUgPSBpbmZvLmF0dHJOYW1lID0gcHJpbWFyeVByb3BlcnR5LmF0dHJpYnV0ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8uZGVmYXVsdEJpbmRpbmdNb2RlID0gcHJpbWFyeVByb3BlcnR5LmRlZmF1bHRCaW5kaW5nTW9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChlbGVtZW50SW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRQcm9wZXJ0eSA9IGVsZW1lbnRJbnN0cnVjdGlvbi50eXBlLmF0dHJpYnV0ZXNbaW5mby5hdHRyTmFtZV07XHJcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudFByb3BlcnR5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5mby5kZWZhdWx0QmluZGluZ01vZGUgPSBlbGVtZW50UHJvcGVydHkuZGVmYXVsdEJpbmRpbmdNb2RlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50UHJvcGVydHkpIHtcclxuICAgICAgICAgICAgICAgIGluc3RydWN0aW9uID0gYmluZGluZ0xhbmd1YWdlLmNyZWF0ZUF0dHJpYnV0ZUluc3RydWN0aW9uKHJlc291cmNlcywgbm9kZSwgaW5mbywgZWxlbWVudEluc3RydWN0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGluc3RydWN0aW9uID0gYmluZGluZ0xhbmd1YWdlLmNyZWF0ZUF0dHJpYnV0ZUluc3RydWN0aW9uKHJlc291cmNlcywgbm9kZSwgaW5mbywgdW5kZWZpbmVkLCB0eXBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi5hbHRlcmVkQXR0cikge1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSByZXNvdXJjZXMuZ2V0QXR0cmlidXRlKGluc3RydWN0aW9uLmF0dHJOYW1lKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi5kaXNjcmV0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25zLnB1c2goaW5zdHJ1Y3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb24udHlwZSA9IHR5cGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbmZpZ3VyZVByb3BlcnRpZXMoaW5zdHJ1Y3Rpb24sIHJlc291cmNlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlLmxpZnRzQ29udGVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb24ub3JpZ2luYWxBdHRyTmFtZSA9IG9yaWdpbmFsQXR0ck5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWZ0aW5nSW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVoYXZpb3JJbnN0cnVjdGlvbnMucHVzaChpbnN0cnVjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZWxlbWVudFByb3BlcnR5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRJbnN0cnVjdGlvbi5hdHRyaWJ1dGVzW2luZm8uYXR0ck5hbWVdLnRhcmdldFByb3BlcnR5ID0gZWxlbWVudFByb3BlcnR5Lm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9ucy5wdXNoKGluc3RydWN0aW9uLmF0dHJpYnV0ZXNbaW5zdHJ1Y3Rpb24uYXR0ck5hbWVdKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uID0gQmVoYXZpb3JJbnN0cnVjdGlvbi5hdHRyaWJ1dGUoYXR0ck5hbWUsIHR5cGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uLmF0dHJpYnV0ZXNbcmVzb3VyY2VzLm1hcEF0dHJpYnV0ZShhdHRyTmFtZSldID0gYXR0clZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlLmxpZnRzQ29udGVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbi5vcmlnaW5hbEF0dHJOYW1lID0gb3JpZ2luYWxBdHRyTmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGlmdGluZ0luc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmVoYXZpb3JJbnN0cnVjdGlvbnMucHVzaChpbnN0cnVjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZWxlbWVudFByb3BlcnR5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudEluc3RydWN0aW9uLmF0dHJpYnV0ZXNbYXR0ck5hbWVdID0gYXR0clZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChsaWZ0aW5nSW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICAgICAgbGlmdGluZ0luc3RydWN0aW9uLnZpZXdGYWN0b3J5ID0gdmlld0ZhY3Rvcnk7XHJcbiAgICAgICAgICAgIG5vZGUgPSBsaWZ0aW5nSW5zdHJ1Y3Rpb24udHlwZS5jb21waWxlKHRoaXMsIHJlc291cmNlcywgbm9kZSwgbGlmdGluZ0luc3RydWN0aW9uLCBwYXJlbnROb2RlKTtcclxuICAgICAgICAgICAgYXVUYXJnZXRJRCA9IG1ha2VJbnRvSW5zdHJ1Y3Rpb25UYXJnZXQobm9kZSk7XHJcbiAgICAgICAgICAgIGluc3RydWN0aW9uc1thdVRhcmdldElEXSA9IFRhcmdldEluc3RydWN0aW9uLmxpZnRpbmcocGFyZW50SW5qZWN0b3JJZCwgbGlmdGluZ0luc3RydWN0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciBza2lwQ29udGVudFByb2Nlc3NpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKGV4cHJlc3Npb25zLmxlbmd0aCB8fCBiZWhhdmlvckluc3RydWN0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGluamVjdG9ySWQgPSBiZWhhdmlvckluc3RydWN0aW9ucy5sZW5ndGggPyBnZXROZXh0SW5qZWN0b3JJZCgpIDogZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IGJlaGF2aW9ySW5zdHJ1Y3Rpb25zLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcclxuICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbiA9IGJlaGF2aW9ySW5zdHJ1Y3Rpb25zW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uLnR5cGUuY29tcGlsZSh0aGlzLCByZXNvdXJjZXMsIG5vZGUsIGluc3RydWN0aW9uLCBwYXJlbnROb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICBwcm92aWRlcnMucHVzaChpbnN0cnVjdGlvbi50eXBlLnRhcmdldCk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2tpcENvbnRlbnRQcm9jZXNzaW5nID0gc2tpcENvbnRlbnRQcm9jZXNzaW5nIHx8IGluc3RydWN0aW9uLnNraXBDb250ZW50UHJvY2Vzc2luZztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGlpID0gZXhwcmVzc2lvbnMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXhwcmVzc2lvbi5hdHRyVG9SZW1vdmUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShleHByZXNzaW9uLmF0dHJUb1JlbW92ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYXVUYXJnZXRJRCA9IG1ha2VJbnRvSW5zdHJ1Y3Rpb25UYXJnZXQobm9kZSk7XHJcbiAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbYXVUYXJnZXRJRF0gPSBUYXJnZXRJbnN0cnVjdGlvbi5ub3JtYWwoaW5qZWN0b3JJZCwgcGFyZW50SW5qZWN0b3JJZCwgcHJvdmlkZXJzLCBiZWhhdmlvckluc3RydWN0aW9ucywgZXhwcmVzc2lvbnMsIGVsZW1lbnRJbnN0cnVjdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHNraXBDb250ZW50UHJvY2Vzc2luZykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGN1cnJlbnRDaGlsZCA9IG5vZGUuZmlyc3RDaGlsZDtcclxuICAgICAgICAgICAgd2hpbGUgKGN1cnJlbnRDaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgY3VycmVudENoaWxkID0gdGhpcy5fY29tcGlsZU5vZGUoY3VycmVudENoaWxkLCByZXNvdXJjZXMsIGluc3RydWN0aW9ucywgbm9kZSwgaW5qZWN0b3JJZCB8fCBwYXJlbnRJbmplY3RvcklkLCB0YXJnZXRMaWdodERPTSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5vZGUubmV4dFNpYmxpbmc7XHJcbiAgICB9O1xyXG4gICAgVmlld0NvbXBpbGVyLnByb3RvdHlwZS5fY29uZmlndXJlUHJvcGVydGllcyA9IGZ1bmN0aW9uIChpbnN0cnVjdGlvbiwgcmVzb3VyY2VzKSB7XHJcbiAgICAgICAgdmFyIHR5cGUgPSBpbnN0cnVjdGlvbi50eXBlO1xyXG4gICAgICAgIHZhciBhdHRyTmFtZSA9IGluc3RydWN0aW9uLmF0dHJOYW1lO1xyXG4gICAgICAgIHZhciBhdHRyaWJ1dGVzID0gaW5zdHJ1Y3Rpb24uYXR0cmlidXRlcztcclxuICAgICAgICB2YXIgcHJvcGVydHk7XHJcbiAgICAgICAgdmFyIGtleTtcclxuICAgICAgICB2YXIgdmFsdWU7XHJcbiAgICAgICAgdmFyIGtub3duQXR0cmlidXRlID0gcmVzb3VyY2VzLm1hcEF0dHJpYnV0ZShhdHRyTmFtZSk7XHJcbiAgICAgICAgaWYgKGtub3duQXR0cmlidXRlICYmIGF0dHJOYW1lIGluIGF0dHJpYnV0ZXMgJiYga25vd25BdHRyaWJ1dGUgIT09IGF0dHJOYW1lKSB7XHJcbiAgICAgICAgICAgIGF0dHJpYnV0ZXNba25vd25BdHRyaWJ1dGVdID0gYXR0cmlidXRlc1thdHRyTmFtZV07XHJcbiAgICAgICAgICAgIGRlbGV0ZSBhdHRyaWJ1dGVzW2F0dHJOYW1lXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChrZXkgaW4gYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IGF0dHJpYnV0ZXNba2V5XTtcclxuICAgICAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgICAgIHByb3BlcnR5ID0gdHlwZS5hdHRyaWJ1dGVzW2tleV07XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLnRhcmdldFByb3BlcnR5ID0gcHJvcGVydHkubmFtZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLnRhcmdldFByb3BlcnR5ID0ga2V5O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiBWaWV3Q29tcGlsZXI7XHJcbn0oKSk7XG5cbnZhciBWaWV3RW5naW5lSG9va3NSZXNvdXJjZSA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBWaWV3RW5naW5lSG9va3NSZXNvdXJjZSgpIHtcclxuICAgIH1cclxuICAgIFZpZXdFbmdpbmVIb29rc1Jlc291cmNlLnByb3RvdHlwZS5pbml0aWFsaXplID0gZnVuY3Rpb24gKGNvbnRhaW5lciwgdGFyZ2V0KSB7XHJcbiAgICAgICAgdGhpcy5pbnN0YW5jZSA9IGNvbnRhaW5lci5nZXQodGFyZ2V0KTtcclxuICAgIH07XHJcbiAgICBWaWV3RW5naW5lSG9va3NSZXNvdXJjZS5wcm90b3R5cGUucmVnaXN0ZXIgPSBmdW5jdGlvbiAocmVnaXN0cnksIG5hbWUpIHtcclxuICAgICAgICByZWdpc3RyeS5yZWdpc3RlclZpZXdFbmdpbmVIb29rcyh0aGlzLmluc3RhbmNlKTtcclxuICAgIH07XHJcbiAgICBWaWV3RW5naW5lSG9va3NSZXNvdXJjZS5wcm90b3R5cGUubG9hZCA9IGZ1bmN0aW9uIChjb250YWluZXIsIHRhcmdldCkgeyB9O1xyXG4gICAgVmlld0VuZ2luZUhvb2tzUmVzb3VyY2UuY29udmVudGlvbiA9IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgaWYgKG5hbWUuZW5kc1dpdGgoJ1ZpZXdFbmdpbmVIb29rcycpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmlld0VuZ2luZUhvb2tzUmVzb3VyY2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIFZpZXdFbmdpbmVIb29rc1Jlc291cmNlO1xyXG59KCkpO1xyXG5mdW5jdGlvbiB2aWV3RW5naW5lSG9va3ModGFyZ2V0KSB7XHJcbiAgICB2YXIgZGVjbyA9IGZ1bmN0aW9uICh0KSB7XHJcbiAgICAgICAgbWV0YWRhdGEuZGVmaW5lKG1ldGFkYXRhLnJlc291cmNlLCBuZXcgVmlld0VuZ2luZUhvb2tzUmVzb3VyY2UoKSwgdCk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHRhcmdldCA/IGRlY28odGFyZ2V0KSA6IGRlY287XHJcbn1cblxudmFyIFJlc291cmNlTW9kdWxlID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIFJlc291cmNlTW9kdWxlKG1vZHVsZUlkKSB7XHJcbiAgICAgICAgdGhpcy5pZCA9IG1vZHVsZUlkO1xyXG4gICAgICAgIHRoaXMubW9kdWxlSW5zdGFuY2UgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubWFpblJlc291cmNlID0gbnVsbDtcclxuICAgICAgICB0aGlzLnJlc291cmNlcyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy52aWV3U3RyYXRlZ3kgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMub25Mb2FkZWQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubG9hZENvbnRleHQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgUmVzb3VyY2VNb2R1bGUucHJvdG90eXBlLmluaXRpYWxpemUgPSBmdW5jdGlvbiAoY29udGFpbmVyKSB7XHJcbiAgICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzLm1haW5SZXNvdXJjZTtcclxuICAgICAgICB2YXIgcmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXM7XHJcbiAgICAgICAgdmFyIHZzID0gdGhpcy52aWV3U3RyYXRlZ3k7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNJbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgaWYgKGN1cnJlbnQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBjdXJyZW50Lm1ldGFkYXRhLnZpZXdTdHJhdGVneSA9IHZzO1xyXG4gICAgICAgICAgICBjdXJyZW50LmluaXRpYWxpemUoY29udGFpbmVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gcmVzb3VyY2VzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcclxuICAgICAgICAgICAgY3VycmVudCA9IHJlc291cmNlc1tpXTtcclxuICAgICAgICAgICAgY3VycmVudC5tZXRhZGF0YS52aWV3U3RyYXRlZ3kgPSB2cztcclxuICAgICAgICAgICAgY3VycmVudC5pbml0aWFsaXplKGNvbnRhaW5lcik7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIFJlc291cmNlTW9kdWxlLnByb3RvdHlwZS5yZWdpc3RlciA9IGZ1bmN0aW9uIChyZWdpc3RyeSwgbmFtZSkge1xyXG4gICAgICAgIHZhciBtYWluID0gdGhpcy5tYWluUmVzb3VyY2U7XHJcbiAgICAgICAgdmFyIHJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xyXG4gICAgICAgIGlmIChtYWluICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgbWFpbi5yZWdpc3RlcihyZWdpc3RyeSwgbmFtZSk7XHJcbiAgICAgICAgICAgIG5hbWUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSByZXNvdXJjZXMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xyXG4gICAgICAgICAgICByZXNvdXJjZXNbaV0ucmVnaXN0ZXIocmVnaXN0cnksIG5hbWUpO1xyXG4gICAgICAgICAgICBuYW1lID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgUmVzb3VyY2VNb2R1bGUucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY29udGFpbmVyLCBsb2FkQ29udGV4dCkge1xyXG4gICAgICAgIGlmICh0aGlzLm9uTG9hZGVkICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRDb250ZXh0ID09PSBsb2FkQ29udGV4dCA/IFByb21pc2UucmVzb2x2ZSgpIDogdGhpcy5vbkxvYWRlZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG1haW4gPSB0aGlzLm1haW5SZXNvdXJjZTtcclxuICAgICAgICB2YXIgcmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXM7XHJcbiAgICAgICAgdmFyIGxvYWRzO1xyXG4gICAgICAgIGlmIChtYWluICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgbG9hZHMgPSBuZXcgQXJyYXkocmVzb3VyY2VzLmxlbmd0aCArIDEpO1xyXG4gICAgICAgICAgICBsb2Fkc1swXSA9IG1haW4ubG9hZChjb250YWluZXIsIGxvYWRDb250ZXh0KTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gcmVzb3VyY2VzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcclxuICAgICAgICAgICAgICAgIGxvYWRzW2kgKyAxXSA9IHJlc291cmNlc1tpXS5sb2FkKGNvbnRhaW5lciwgbG9hZENvbnRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsb2FkcyA9IG5ldyBBcnJheShyZXNvdXJjZXMubGVuZ3RoKTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gcmVzb3VyY2VzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcclxuICAgICAgICAgICAgICAgIGxvYWRzW2ldID0gcmVzb3VyY2VzW2ldLmxvYWQoY29udGFpbmVyLCBsb2FkQ29udGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5sb2FkQ29udGV4dCA9IGxvYWRDb250ZXh0O1xyXG4gICAgICAgIHRoaXMub25Mb2FkZWQgPSBQcm9taXNlLmFsbChsb2Fkcyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub25Mb2FkZWQ7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIFJlc291cmNlTW9kdWxlO1xyXG59KCkpO1xyXG52YXIgUmVzb3VyY2VEZXNjcmlwdGlvbiA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBSZXNvdXJjZURlc2NyaXB0aW9uKGtleSwgZXhwb3J0ZWRWYWx1ZSwgcmVzb3VyY2VUeXBlTWV0YSkge1xyXG4gICAgICAgIGlmICghcmVzb3VyY2VUeXBlTWV0YSkge1xyXG4gICAgICAgICAgICByZXNvdXJjZVR5cGVNZXRhID0gbWV0YWRhdGEuZ2V0KG1ldGFkYXRhLnJlc291cmNlLCBleHBvcnRlZFZhbHVlKTtcclxuICAgICAgICAgICAgaWYgKCFyZXNvdXJjZVR5cGVNZXRhKSB7XHJcbiAgICAgICAgICAgICAgICByZXNvdXJjZVR5cGVNZXRhID0gbmV3IEh0bWxCZWhhdmlvclJlc291cmNlKCk7XHJcbiAgICAgICAgICAgICAgICByZXNvdXJjZVR5cGVNZXRhLmVsZW1lbnROYW1lID0gX2h5cGhlbmF0ZShrZXkpO1xyXG4gICAgICAgICAgICAgICAgbWV0YWRhdGEuZGVmaW5lKG1ldGFkYXRhLnJlc291cmNlLCByZXNvdXJjZVR5cGVNZXRhLCBleHBvcnRlZFZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVzb3VyY2VUeXBlTWV0YSBpbnN0YW5jZW9mIEh0bWxCZWhhdmlvclJlc291cmNlKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXNvdXJjZVR5cGVNZXRhLmVsZW1lbnROYW1lID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHJlc291cmNlVHlwZU1ldGEuZWxlbWVudE5hbWUgPSBfaHlwaGVuYXRlKGtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAocmVzb3VyY2VUeXBlTWV0YS5hdHRyaWJ1dGVOYW1lID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHJlc291cmNlVHlwZU1ldGEuYXR0cmlidXRlTmFtZSA9IF9oeXBoZW5hdGUoa2V5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChyZXNvdXJjZVR5cGVNZXRhLmF0dHJpYnV0ZU5hbWUgPT09IG51bGwgJiYgcmVzb3VyY2VUeXBlTWV0YS5lbGVtZW50TmFtZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgSHRtbEJlaGF2aW9yUmVzb3VyY2UuY29udmVudGlvbihrZXksIHJlc291cmNlVHlwZU1ldGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKCFyZXNvdXJjZVR5cGVNZXRhLm5hbWUpIHtcclxuICAgICAgICAgICAgcmVzb3VyY2VUeXBlTWV0YS5uYW1lID0gX2h5cGhlbmF0ZShrZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm1ldGFkYXRhID0gcmVzb3VyY2VUeXBlTWV0YTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gZXhwb3J0ZWRWYWx1ZTtcclxuICAgIH1cclxuICAgIFJlc291cmNlRGVzY3JpcHRpb24ucHJvdG90eXBlLmluaXRpYWxpemUgPSBmdW5jdGlvbiAoY29udGFpbmVyKSB7XHJcbiAgICAgICAgdGhpcy5tZXRhZGF0YS5pbml0aWFsaXplKGNvbnRhaW5lciwgdGhpcy52YWx1ZSk7XHJcbiAgICB9O1xyXG4gICAgUmVzb3VyY2VEZXNjcmlwdGlvbi5wcm90b3R5cGUucmVnaXN0ZXIgPSBmdW5jdGlvbiAocmVnaXN0cnksIG5hbWUpIHtcclxuICAgICAgICB0aGlzLm1ldGFkYXRhLnJlZ2lzdGVyKHJlZ2lzdHJ5LCBuYW1lKTtcclxuICAgIH07XHJcbiAgICBSZXNvdXJjZURlc2NyaXB0aW9uLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNvbnRhaW5lciwgbG9hZENvbnRleHQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tZXRhZGF0YS5sb2FkKGNvbnRhaW5lciwgdGhpcy52YWx1ZSwgbG9hZENvbnRleHQpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBSZXNvdXJjZURlc2NyaXB0aW9uO1xyXG59KCkpO1xyXG52YXIgTW9kdWxlQW5hbHl6ZXIgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gTW9kdWxlQW5hbHl6ZXIoKSB7XHJcbiAgICAgICAgdGhpcy5jYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XHJcbiAgICB9XHJcbiAgICBNb2R1bGVBbmFseXplci5wcm90b3R5cGUuZ2V0QW5hbHlzaXMgPSBmdW5jdGlvbiAobW9kdWxlSWQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYWNoZVttb2R1bGVJZF07XHJcbiAgICB9O1xyXG4gICAgTW9kdWxlQW5hbHl6ZXIucHJvdG90eXBlLmFuYWx5emUgPSBmdW5jdGlvbiAobW9kdWxlSWQsIG1vZHVsZUluc3RhbmNlLCBtYWluUmVzb3VyY2VLZXkpIHtcclxuICAgICAgICB2YXIgbWFpblJlc291cmNlO1xyXG4gICAgICAgIHZhciBmYWxsYmFja1ZhbHVlO1xyXG4gICAgICAgIHZhciBmYWxsYmFja0tleTtcclxuICAgICAgICB2YXIgcmVzb3VyY2VUeXBlTWV0YTtcclxuICAgICAgICB2YXIga2V5O1xyXG4gICAgICAgIHZhciBleHBvcnRlZFZhbHVlO1xyXG4gICAgICAgIHZhciByZXNvdXJjZXMgPSBbXTtcclxuICAgICAgICB2YXIgY29udmVudGlvbmFsO1xyXG4gICAgICAgIHZhciB2cztcclxuICAgICAgICB2YXIgcmVzb3VyY2VNb2R1bGU7XHJcbiAgICAgICAgcmVzb3VyY2VNb2R1bGUgPSB0aGlzLmNhY2hlW21vZHVsZUlkXTtcclxuICAgICAgICBpZiAocmVzb3VyY2VNb2R1bGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc291cmNlTW9kdWxlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXNvdXJjZU1vZHVsZSA9IG5ldyBSZXNvdXJjZU1vZHVsZShtb2R1bGVJZCk7XHJcbiAgICAgICAgdGhpcy5jYWNoZVttb2R1bGVJZF0gPSByZXNvdXJjZU1vZHVsZTtcclxuICAgICAgICBpZiAodHlwZW9mIG1vZHVsZUluc3RhbmNlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIG1vZHVsZUluc3RhbmNlID0geyAnZGVmYXVsdCc6IG1vZHVsZUluc3RhbmNlIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYWluUmVzb3VyY2VLZXkpIHtcclxuICAgICAgICAgICAgbWFpblJlc291cmNlID0gbmV3IFJlc291cmNlRGVzY3JpcHRpb24obWFpblJlc291cmNlS2V5LCBtb2R1bGVJbnN0YW5jZVttYWluUmVzb3VyY2VLZXldKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChrZXkgaW4gbW9kdWxlSW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9IG1vZHVsZUluc3RhbmNlW2tleV07XHJcbiAgICAgICAgICAgIGlmIChrZXkgPT09IG1haW5SZXNvdXJjZUtleSB8fCB0eXBlb2YgZXhwb3J0ZWRWYWx1ZSAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzb3VyY2VUeXBlTWV0YSA9IG1ldGFkYXRhLmdldChtZXRhZGF0YS5yZXNvdXJjZSwgZXhwb3J0ZWRWYWx1ZSk7XHJcbiAgICAgICAgICAgIGlmIChyZXNvdXJjZVR5cGVNZXRhKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzb3VyY2VUeXBlTWV0YSBpbnN0YW5jZW9mIEh0bWxCZWhhdmlvclJlc291cmNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgVmlld1Jlc291cmNlcy5jb252ZW50aW9uKGV4cG9ydGVkVmFsdWUsIHJlc291cmNlVHlwZU1ldGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNvdXJjZVR5cGVNZXRhLmF0dHJpYnV0ZU5hbWUgPT09IG51bGwgJiYgcmVzb3VyY2VUeXBlTWV0YS5lbGVtZW50TmFtZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBIdG1sQmVoYXZpb3JSZXNvdXJjZS5jb252ZW50aW9uKGtleSwgcmVzb3VyY2VUeXBlTWV0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNvdXJjZVR5cGVNZXRhLmF0dHJpYnV0ZU5hbWUgPT09IG51bGwgJiYgcmVzb3VyY2VUeXBlTWV0YS5lbGVtZW50TmFtZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZVR5cGVNZXRhLmVsZW1lbnROYW1lID0gX2h5cGhlbmF0ZShrZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghbWFpblJlc291cmNlICYmIHJlc291cmNlVHlwZU1ldGEgaW5zdGFuY2VvZiBIdG1sQmVoYXZpb3JSZXNvdXJjZSAmJiByZXNvdXJjZVR5cGVNZXRhLmVsZW1lbnROYW1lICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFpblJlc291cmNlID0gbmV3IFJlc291cmNlRGVzY3JpcHRpb24oa2V5LCBleHBvcnRlZFZhbHVlLCByZXNvdXJjZVR5cGVNZXRhKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlcy5wdXNoKG5ldyBSZXNvdXJjZURlc2NyaXB0aW9uKGtleSwgZXhwb3J0ZWRWYWx1ZSwgcmVzb3VyY2VUeXBlTWV0YSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHZpZXdTdHJhdGVneS5kZWNvcmF0ZXMoZXhwb3J0ZWRWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHZzID0gZXhwb3J0ZWRWYWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChleHBvcnRlZFZhbHVlIGluc3RhbmNlb2YgVGVtcGxhdGVSZWdpc3RyeUVudHJ5KSB7XHJcbiAgICAgICAgICAgICAgICB2cyA9IG5ldyBUZW1wbGF0ZVJlZ2lzdHJ5Vmlld1N0cmF0ZWd5KG1vZHVsZUlkLCBleHBvcnRlZFZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChjb252ZW50aW9uYWwgPSBWaWV3UmVzb3VyY2VzLmNvbnZlbnRpb24oZXhwb3J0ZWRWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udmVudGlvbmFsLmVsZW1lbnROYW1lICE9PSBudWxsICYmICFtYWluUmVzb3VyY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWFpblJlc291cmNlID0gbmV3IFJlc291cmNlRGVzY3JpcHRpb24oa2V5LCBleHBvcnRlZFZhbHVlLCBjb252ZW50aW9uYWwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzLnB1c2gobmV3IFJlc291cmNlRGVzY3JpcHRpb24oa2V5LCBleHBvcnRlZFZhbHVlLCBjb252ZW50aW9uYWwpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEuZGVmaW5lKG1ldGFkYXRhLnJlc291cmNlLCBjb252ZW50aW9uYWwsIGV4cG9ydGVkVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY29udmVudGlvbmFsID0gSHRtbEJlaGF2aW9yUmVzb3VyY2UuY29udmVudGlvbihrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnZlbnRpb25hbC5lbGVtZW50TmFtZSAhPT0gbnVsbCAmJiAhbWFpblJlc291cmNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1haW5SZXNvdXJjZSA9IG5ldyBSZXNvdXJjZURlc2NyaXB0aW9uKGtleSwgZXhwb3J0ZWRWYWx1ZSwgY29udmVudGlvbmFsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlcy5wdXNoKG5ldyBSZXNvdXJjZURlc2NyaXB0aW9uKGtleSwgZXhwb3J0ZWRWYWx1ZSwgY29udmVudGlvbmFsKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLmRlZmluZShtZXRhZGF0YS5yZXNvdXJjZSwgY29udmVudGlvbmFsLCBleHBvcnRlZFZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnZlbnRpb25hbCA9IFZhbHVlQ29udmVydGVyUmVzb3VyY2UuY29udmVudGlvbihrZXkpXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgQmluZGluZ0JlaGF2aW9yUmVzb3VyY2UuY29udmVudGlvbihrZXkpXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgVmlld0VuZ2luZUhvb2tzUmVzb3VyY2UuY29udmVudGlvbihrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzLnB1c2gobmV3IFJlc291cmNlRGVzY3JpcHRpb24oa2V5LCBleHBvcnRlZFZhbHVlLCBjb252ZW50aW9uYWwpKTtcclxuICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS5kZWZpbmUobWV0YWRhdGEucmVzb3VyY2UsIGNvbnZlbnRpb25hbCwgZXhwb3J0ZWRWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICghZmFsbGJhY2tWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZhbGxiYWNrVmFsdWUgPSBleHBvcnRlZFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGZhbGxiYWNrS2V5ID0ga2V5O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghbWFpblJlc291cmNlICYmIGZhbGxiYWNrVmFsdWUpIHtcclxuICAgICAgICAgICAgbWFpblJlc291cmNlID0gbmV3IFJlc291cmNlRGVzY3JpcHRpb24oZmFsbGJhY2tLZXksIGZhbGxiYWNrVmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXNvdXJjZU1vZHVsZS5tb2R1bGVJbnN0YW5jZSA9IG1vZHVsZUluc3RhbmNlO1xyXG4gICAgICAgIHJlc291cmNlTW9kdWxlLm1haW5SZXNvdXJjZSA9IG1haW5SZXNvdXJjZTtcclxuICAgICAgICByZXNvdXJjZU1vZHVsZS5yZXNvdXJjZXMgPSByZXNvdXJjZXM7XHJcbiAgICAgICAgcmVzb3VyY2VNb2R1bGUudmlld1N0cmF0ZWd5ID0gdnM7XHJcbiAgICAgICAgcmV0dXJuIHJlc291cmNlTW9kdWxlO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBNb2R1bGVBbmFseXplcjtcclxufSgpKTtcblxudmFyIGxvZ2dlciA9IExvZ01hbmFnZXIuZ2V0TG9nZ2VyKCd0ZW1wbGF0aW5nJyk7XHJcbmZ1bmN0aW9uIGVuc3VyZVJlZ2lzdHJ5RW50cnkobG9hZGVyLCB1cmxPclJlZ2lzdHJ5RW50cnkpIHtcclxuICAgIGlmICh1cmxPclJlZ2lzdHJ5RW50cnkgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZ2lzdHJ5RW50cnkpIHtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVybE9yUmVnaXN0cnlFbnRyeSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbG9hZGVyLmxvYWRUZW1wbGF0ZSh1cmxPclJlZ2lzdHJ5RW50cnkpO1xyXG59XHJcbnZhciBQcm94eVZpZXdGYWN0b3J5ID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIFByb3h5Vmlld0ZhY3RvcnkocHJvbWlzZSkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uICh4KSB7IHJldHVybiBfdGhpcy52aWV3RmFjdG9yeSA9IHg7IH0pO1xyXG4gICAgfVxyXG4gICAgUHJveHlWaWV3RmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlID0gZnVuY3Rpb24gKGNvbnRhaW5lciwgYmluZGluZ0NvbnRleHQsIGNyZWF0ZUluc3RydWN0aW9uLCBlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0ZhY3RvcnkuY3JlYXRlKGNvbnRhaW5lciwgYmluZGluZ0NvbnRleHQsIGNyZWF0ZUluc3RydWN0aW9uLCBlbGVtZW50KTtcclxuICAgIH07XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUHJveHlWaWV3RmFjdG9yeS5wcm90b3R5cGUsIFwiaXNDYWNoaW5nXCIsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmlld0ZhY3RvcnkuaXNDYWNoaW5nO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXHJcbiAgICB9KTtcclxuICAgIFByb3h5Vmlld0ZhY3RvcnkucHJvdG90eXBlLnNldENhY2hlU2l6ZSA9IGZ1bmN0aW9uIChzaXplLCBkb05vdE92ZXJyaWRlSWZBbHJlYWR5U2V0KSB7XHJcbiAgICAgICAgdGhpcy52aWV3RmFjdG9yeS5zZXRDYWNoZVNpemUoc2l6ZSwgZG9Ob3RPdmVycmlkZUlmQWxyZWFkeVNldCk7XHJcbiAgICB9O1xyXG4gICAgUHJveHlWaWV3RmFjdG9yeS5wcm90b3R5cGUuZ2V0Q2FjaGVkVmlldyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52aWV3RmFjdG9yeS5nZXRDYWNoZWRWaWV3KCk7XHJcbiAgICB9O1xyXG4gICAgUHJveHlWaWV3RmFjdG9yeS5wcm90b3R5cGUucmV0dXJuVmlld1RvQ2FjaGUgPSBmdW5jdGlvbiAodmlldykge1xyXG4gICAgICAgIHRoaXMudmlld0ZhY3RvcnkucmV0dXJuVmlld1RvQ2FjaGUodmlldyk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIFByb3h5Vmlld0ZhY3Rvcnk7XHJcbn0oKSk7XHJcbnZhciBhdVNsb3RCZWhhdmlvciA9IG51bGw7XHJcbnZhciBWaWV3RW5naW5lID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIFZpZXdFbmdpbmUobG9hZGVyLCBjb250YWluZXIsIHZpZXdDb21waWxlciwgbW9kdWxlQW5hbHl6ZXIsIGFwcFJlc291cmNlcykge1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gbG9hZGVyO1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyID0gY29udGFpbmVyO1xyXG4gICAgICAgIHRoaXMudmlld0NvbXBpbGVyID0gdmlld0NvbXBpbGVyO1xyXG4gICAgICAgIHRoaXMubW9kdWxlQW5hbHl6ZXIgPSBtb2R1bGVBbmFseXplcjtcclxuICAgICAgICB0aGlzLmFwcFJlc291cmNlcyA9IGFwcFJlc291cmNlcztcclxuICAgICAgICB0aGlzLl9wbHVnaW5NYXAgPSB7fTtcclxuICAgICAgICBpZiAoYXVTbG90QmVoYXZpb3IgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgYXVTbG90QmVoYXZpb3IgPSBuZXcgSHRtbEJlaGF2aW9yUmVzb3VyY2UoKTtcclxuICAgICAgICAgICAgYXVTbG90QmVoYXZpb3IuYXR0cmlidXRlTmFtZSA9ICdhdS1zbG90JztcclxuICAgICAgICAgICAgbWV0YWRhdGEuZGVmaW5lKG1ldGFkYXRhLnJlc291cmNlLCBhdVNsb3RCZWhhdmlvciwgU2xvdEN1c3RvbUF0dHJpYnV0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF1U2xvdEJlaGF2aW9yLmluaXRpYWxpemUoY29udGFpbmVyLCBTbG90Q3VzdG9tQXR0cmlidXRlKTtcclxuICAgICAgICBhdVNsb3RCZWhhdmlvci5yZWdpc3RlcihhcHBSZXNvdXJjZXMpO1xyXG4gICAgfVxyXG4gICAgVmlld0VuZ2luZS5pbmplY3QgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtMb2FkZXIsIENvbnRhaW5lciwgVmlld0NvbXBpbGVyLCBNb2R1bGVBbmFseXplciwgVmlld1Jlc291cmNlc107XHJcbiAgICB9O1xyXG4gICAgVmlld0VuZ2luZS5wcm90b3R5cGUuYWRkUmVzb3VyY2VQbHVnaW4gPSBmdW5jdGlvbiAoZXh0ZW5zaW9uLCBpbXBsZW1lbnRhdGlvbikge1xyXG4gICAgICAgIHZhciBuYW1lID0gZXh0ZW5zaW9uLnJlcGxhY2UoJy4nLCAnJykgKyAnLXJlc291cmNlLXBsdWdpbic7XHJcbiAgICAgICAgdGhpcy5fcGx1Z2luTWFwW2V4dGVuc2lvbl0gPSBuYW1lO1xyXG4gICAgICAgIHRoaXMubG9hZGVyLmFkZFBsdWdpbihuYW1lLCBpbXBsZW1lbnRhdGlvbik7XHJcbiAgICB9O1xyXG4gICAgVmlld0VuZ2luZS5wcm90b3R5cGUubG9hZFZpZXdGYWN0b3J5ID0gZnVuY3Rpb24gKHVybE9yUmVnaXN0cnlFbnRyeSwgY29tcGlsZUluc3RydWN0aW9uLCBsb2FkQ29udGV4dCwgdGFyZ2V0KSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICBsb2FkQ29udGV4dCA9IGxvYWRDb250ZXh0IHx8IG5ldyBSZXNvdXJjZUxvYWRDb250ZXh0KCk7XHJcbiAgICAgICAgcmV0dXJuIGVuc3VyZVJlZ2lzdHJ5RW50cnkodGhpcy5sb2FkZXIsIHVybE9yUmVnaXN0cnlFbnRyeSkudGhlbihmdW5jdGlvbiAocmVnaXN0cnlFbnRyeSkge1xyXG4gICAgICAgICAgICB2YXIgdXJsID0gcmVnaXN0cnlFbnRyeS5hZGRyZXNzO1xyXG4gICAgICAgICAgICBpZiAocmVnaXN0cnlFbnRyeS5vblJlYWR5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWxvYWRDb250ZXh0Lmhhc0RlcGVuZGVuY3kodXJsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvYWRDb250ZXh0LmFkZERlcGVuZGVuY3kodXJsKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVnaXN0cnlFbnRyeS5vblJlYWR5O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHJlZ2lzdHJ5RW50cnkudGVtcGxhdGUgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVnaXN0cnlFbnRyeS5vblJlYWR5O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgUHJveHlWaWV3RmFjdG9yeShyZWdpc3RyeUVudHJ5Lm9uUmVhZHkpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsb2FkQ29udGV4dC5hZGREZXBlbmRlbmN5KHVybCk7XHJcbiAgICAgICAgICAgIHJlZ2lzdHJ5RW50cnkub25SZWFkeSA9IF90aGlzLmxvYWRUZW1wbGF0ZVJlc291cmNlcyhyZWdpc3RyeUVudHJ5LCBjb21waWxlSW5zdHJ1Y3Rpb24sIGxvYWRDb250ZXh0LCB0YXJnZXQpLnRoZW4oZnVuY3Rpb24gKHJlc291cmNlcykge1xyXG4gICAgICAgICAgICAgICAgcmVnaXN0cnlFbnRyeS5yZXNvdXJjZXMgPSByZXNvdXJjZXM7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVnaXN0cnlFbnRyeS50ZW1wbGF0ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWdpc3RyeUVudHJ5LmZhY3RvcnkgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIHZpZXdGYWN0b3J5ID0gX3RoaXMudmlld0NvbXBpbGVyLmNvbXBpbGUocmVnaXN0cnlFbnRyeS50ZW1wbGF0ZSwgcmVzb3VyY2VzLCBjb21waWxlSW5zdHJ1Y3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZ2lzdHJ5RW50cnkuZmFjdG9yeSA9IHZpZXdGYWN0b3J5O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlZ2lzdHJ5RW50cnkub25SZWFkeTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICBWaWV3RW5naW5lLnByb3RvdHlwZS5sb2FkVGVtcGxhdGVSZXNvdXJjZXMgPSBmdW5jdGlvbiAocmVnaXN0cnlFbnRyeSwgY29tcGlsZUluc3RydWN0aW9uLCBsb2FkQ29udGV4dCwgdGFyZ2V0KSB7XHJcbiAgICAgICAgdmFyIHJlc291cmNlcyA9IG5ldyBWaWV3UmVzb3VyY2VzKHRoaXMuYXBwUmVzb3VyY2VzLCByZWdpc3RyeUVudHJ5LmFkZHJlc3MpO1xyXG4gICAgICAgIHZhciBkZXBlbmRlbmNpZXMgPSByZWdpc3RyeUVudHJ5LmRlcGVuZGVuY2llcztcclxuICAgICAgICB2YXIgaW1wb3J0SWRzO1xyXG4gICAgICAgIHZhciBuYW1lcztcclxuICAgICAgICBjb21waWxlSW5zdHJ1Y3Rpb24gPSBjb21waWxlSW5zdHJ1Y3Rpb24gfHwgVmlld0NvbXBpbGVJbnN0cnVjdGlvbi5ub3JtYWw7XHJcbiAgICAgICAgaWYgKGRlcGVuZGVuY2llcy5sZW5ndGggPT09IDAgJiYgIWNvbXBpbGVJbnN0cnVjdGlvbi5hc3NvY2lhdGVkTW9kdWxlSWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNvdXJjZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpbXBvcnRJZHMgPSBkZXBlbmRlbmNpZXMubWFwKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LnNyYzsgfSk7XHJcbiAgICAgICAgbmFtZXMgPSBkZXBlbmRlbmNpZXMubWFwKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4Lm5hbWU7IH0pO1xyXG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhcImltcG9ydGluZyByZXNvdXJjZXMgZm9yIFwiLmNvbmNhdChyZWdpc3RyeUVudHJ5LmFkZHJlc3MpLCBpbXBvcnRJZHMpO1xyXG4gICAgICAgIGlmICh0YXJnZXQpIHtcclxuICAgICAgICAgICAgdmFyIHZpZXdNb2RlbFJlcXVpcmVzID0gbWV0YWRhdGEuZ2V0KFZpZXdFbmdpbmUudmlld01vZGVsUmVxdWlyZU1ldGFkYXRhS2V5LCB0YXJnZXQpO1xyXG4gICAgICAgICAgICBpZiAodmlld01vZGVsUmVxdWlyZXMpIHtcclxuICAgICAgICAgICAgICAgIHZhciB0ZW1wbGF0ZUltcG9ydENvdW50ID0gaW1wb3J0SWRzLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHZpZXdNb2RlbFJlcXVpcmVzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcmVxID0gdmlld01vZGVsUmVxdWlyZXNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGltcG9ydElkID0gdHlwZW9mIHJlcSA9PT0gJ2Z1bmN0aW9uJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IE9yaWdpbi5nZXQocmVxKS5tb2R1bGVJZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHJlbGF0aXZlVG9GaWxlKHJlcS5zcmMgfHwgcmVxLCByZWdpc3RyeUVudHJ5LmFkZHJlc3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbXBvcnRJZHMuaW5kZXhPZihpbXBvcnRJZCkgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydElkcy5wdXNoKGltcG9ydElkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXMucHVzaChyZXEuYXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhcImltcG9ydGluZyBWaWV3TW9kZWwgcmVzb3VyY2VzIGZvciBcIi5jb25jYXQoY29tcGlsZUluc3RydWN0aW9uLmFzc29jaWF0ZWRNb2R1bGVJZCksIGltcG9ydElkcy5zbGljZSh0ZW1wbGF0ZUltcG9ydENvdW50KSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0Vmlld1Jlc291cmNlcyhpbXBvcnRJZHMsIG5hbWVzLCByZXNvdXJjZXMsIGNvbXBpbGVJbnN0cnVjdGlvbiwgbG9hZENvbnRleHQpO1xyXG4gICAgfTtcclxuICAgIFZpZXdFbmdpbmUucHJvdG90eXBlLmltcG9ydFZpZXdNb2RlbFJlc291cmNlID0gZnVuY3Rpb24gKG1vZHVsZUltcG9ydCwgbW9kdWxlTWVtYmVyKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICByZXR1cm4gdGhpcy5sb2FkZXIubG9hZE1vZHVsZShtb2R1bGVJbXBvcnQpLnRoZW4oZnVuY3Rpb24gKHZpZXdNb2RlbE1vZHVsZSkge1xyXG4gICAgICAgICAgICB2YXIgbm9ybWFsaXplZElkID0gT3JpZ2luLmdldCh2aWV3TW9kZWxNb2R1bGUpLm1vZHVsZUlkO1xyXG4gICAgICAgICAgICB2YXIgcmVzb3VyY2VNb2R1bGUgPSBfdGhpcy5tb2R1bGVBbmFseXplci5hbmFseXplKG5vcm1hbGl6ZWRJZCwgdmlld01vZGVsTW9kdWxlLCBtb2R1bGVNZW1iZXIpO1xyXG4gICAgICAgICAgICBpZiAoIXJlc291cmNlTW9kdWxlLm1haW5SZXNvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gdmlldyBtb2RlbCBmb3VuZCBpbiBtb2R1bGUgXFxcIlwiLmNvbmNhdChtb2R1bGVJbXBvcnQsIFwiXFxcIi5cIikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc291cmNlTW9kdWxlLmluaXRpYWxpemUoX3RoaXMuY29udGFpbmVyKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc291cmNlTW9kdWxlLm1haW5SZXNvdXJjZTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICBWaWV3RW5naW5lLnByb3RvdHlwZS5pbXBvcnRWaWV3UmVzb3VyY2VzID0gZnVuY3Rpb24gKG1vZHVsZUlkcywgbmFtZXMsIHJlc291cmNlcywgY29tcGlsZUluc3RydWN0aW9uLCBsb2FkQ29udGV4dCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgbG9hZENvbnRleHQgPSBsb2FkQ29udGV4dCB8fCBuZXcgUmVzb3VyY2VMb2FkQ29udGV4dCgpO1xyXG4gICAgICAgIGNvbXBpbGVJbnN0cnVjdGlvbiA9IGNvbXBpbGVJbnN0cnVjdGlvbiB8fCBWaWV3Q29tcGlsZUluc3RydWN0aW9uLm5vcm1hbDtcclxuICAgICAgICBtb2R1bGVJZHMgPSBtb2R1bGVJZHMubWFwKGZ1bmN0aW9uICh4KSB7IHJldHVybiBfdGhpcy5fYXBwbHlMb2FkZXJQbHVnaW4oeCk7IH0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxvYWRlci5sb2FkQWxsTW9kdWxlcyhtb2R1bGVJZHMpLnRoZW4oZnVuY3Rpb24gKGltcG9ydHMpIHtcclxuICAgICAgICAgICAgdmFyIGk7XHJcbiAgICAgICAgICAgIHZhciBpaTtcclxuICAgICAgICAgICAgdmFyIGFuYWx5c2lzO1xyXG4gICAgICAgICAgICB2YXIgbm9ybWFsaXplZElkO1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudDtcclxuICAgICAgICAgICAgdmFyIGFzc29jaWF0ZWRNb2R1bGU7XHJcbiAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBfdGhpcy5jb250YWluZXI7XHJcbiAgICAgICAgICAgIHZhciBtb2R1bGVBbmFseXplciA9IF90aGlzLm1vZHVsZUFuYWx5emVyO1xyXG4gICAgICAgICAgICB2YXIgYWxsQW5hbHlzaXMgPSBuZXcgQXJyYXkoaW1wb3J0cy5sZW5ndGgpO1xyXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IGltcG9ydHMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xyXG4gICAgICAgICAgICAgICAgY3VycmVudCA9IGltcG9ydHNbaV07XHJcbiAgICAgICAgICAgICAgICBub3JtYWxpemVkSWQgPSBPcmlnaW4uZ2V0KGN1cnJlbnQpLm1vZHVsZUlkO1xyXG4gICAgICAgICAgICAgICAgYW5hbHlzaXMgPSBtb2R1bGVBbmFseXplci5hbmFseXplKG5vcm1hbGl6ZWRJZCwgY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICBhbmFseXNpcy5pbml0aWFsaXplKGNvbnRhaW5lcik7XHJcbiAgICAgICAgICAgICAgICBhbmFseXNpcy5yZWdpc3RlcihyZXNvdXJjZXMsIG5hbWVzW2ldKTtcclxuICAgICAgICAgICAgICAgIGFsbEFuYWx5c2lzW2ldID0gYW5hbHlzaXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGNvbXBpbGVJbnN0cnVjdGlvbi5hc3NvY2lhdGVkTW9kdWxlSWQpIHtcclxuICAgICAgICAgICAgICAgIGFzc29jaWF0ZWRNb2R1bGUgPSBtb2R1bGVBbmFseXplci5nZXRBbmFseXNpcyhjb21waWxlSW5zdHJ1Y3Rpb24uYXNzb2NpYXRlZE1vZHVsZUlkKTtcclxuICAgICAgICAgICAgICAgIGlmIChhc3NvY2lhdGVkTW9kdWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXNzb2NpYXRlZE1vZHVsZS5yZWdpc3RlcihyZXNvdXJjZXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGlpID0gYWxsQW5hbHlzaXMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xyXG4gICAgICAgICAgICAgICAgYWxsQW5hbHlzaXNbaV0gPSBhbGxBbmFseXNpc1tpXS5sb2FkKGNvbnRhaW5lciwgbG9hZENvbnRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChhbGxBbmFseXNpcykudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiByZXNvdXJjZXM7IH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIFZpZXdFbmdpbmUucHJvdG90eXBlLl9hcHBseUxvYWRlclBsdWdpbiA9IGZ1bmN0aW9uIChpZCkge1xyXG4gICAgICAgIHZhciBpbmRleCA9IGlkLmxhc3RJbmRleE9mKCcuJyk7XHJcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICB2YXIgZXh0ID0gaWQuc3Vic3RyaW5nKGluZGV4KTtcclxuICAgICAgICAgICAgdmFyIHBsdWdpbk5hbWUgPSB0aGlzLl9wbHVnaW5NYXBbZXh0XTtcclxuICAgICAgICAgICAgaWYgKHBsdWdpbk5hbWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGlkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRlci5hcHBseVBsdWdpblRvVXJsKGlkLCBwbHVnaW5OYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGlkO1xyXG4gICAgfTtcclxuICAgIFZpZXdFbmdpbmUudmlld01vZGVsUmVxdWlyZU1ldGFkYXRhS2V5ID0gJ2F1cmVsaWE6dmlldy1tb2RlbC1yZXF1aXJlJztcclxuICAgIHJldHVybiBWaWV3RW5naW5lO1xyXG59KCkpO1xuXG52YXIgQ29udHJvbGxlciA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBDb250cm9sbGVyKGJlaGF2aW9yLCBpbnN0cnVjdGlvbiwgdmlld01vZGVsLCBjb250YWluZXIpIHtcclxuICAgICAgICB0aGlzLmJlaGF2aW9yID0gYmVoYXZpb3I7XHJcbiAgICAgICAgdGhpcy5pbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uO1xyXG4gICAgICAgIHRoaXMudmlld01vZGVsID0gdmlld01vZGVsO1xyXG4gICAgICAgIHRoaXMuaXNBdHRhY2hlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudmlldyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5pc0JvdW5kID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zY29wZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50RXZlbnRzID0gY29udGFpbmVyLmVsZW1lbnRFdmVudHMgfHwgbnVsbDtcclxuICAgICAgICB2YXIgb2JzZXJ2ZXJMb29rdXAgPSBiZWhhdmlvci5vYnNlcnZlckxvY2F0b3IuZ2V0T3JDcmVhdGVPYnNlcnZlcnNMb29rdXAodmlld01vZGVsKTtcclxuICAgICAgICB2YXIgaGFuZGxlc0JpbmQgPSBiZWhhdmlvci5oYW5kbGVzQmluZDtcclxuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IGluc3RydWN0aW9uLmF0dHJpYnV0ZXM7XHJcbiAgICAgICAgdmFyIGJvdW5kUHJvcGVydGllcyA9IHRoaXMuYm91bmRQcm9wZXJ0aWVzID0gW107XHJcbiAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBiZWhhdmlvci5wcm9wZXJ0aWVzO1xyXG4gICAgICAgIHZhciBpO1xyXG4gICAgICAgIHZhciBpaTtcclxuICAgICAgICBiZWhhdmlvci5fZW5zdXJlUHJvcGVydGllc0RlZmluZWQodmlld01vZGVsLCBvYnNlcnZlckxvb2t1cCk7XHJcbiAgICAgICAgZm9yIChpID0gMCwgaWkgPSBwcm9wZXJ0aWVzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcclxuICAgICAgICAgICAgcHJvcGVydGllc1tpXS5faW5pdGlhbGl6ZSh2aWV3TW9kZWwsIG9ic2VydmVyTG9va3VwLCBhdHRyaWJ1dGVzLCBoYW5kbGVzQmluZCwgYm91bmRQcm9wZXJ0aWVzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBDb250cm9sbGVyLnByb3RvdHlwZS5jcmVhdGVkID0gZnVuY3Rpb24gKG93bmluZ1ZpZXcpIHtcclxuICAgICAgICBpZiAodGhpcy5iZWhhdmlvci5oYW5kbGVzQ3JlYXRlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdNb2RlbC5jcmVhdGVkKG93bmluZ1ZpZXcsIHRoaXMudmlldyk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIENvbnRyb2xsZXIucHJvdG90eXBlLmF1dG9tYXRlID0gZnVuY3Rpb24gKG92ZXJyaWRlQ29udGV4dCwgb3duaW5nVmlldykge1xyXG4gICAgICAgIHRoaXMudmlldy5iaW5kaW5nQ29udGV4dCA9IHRoaXMudmlld01vZGVsO1xyXG4gICAgICAgIHRoaXMudmlldy5vdmVycmlkZUNvbnRleHQgPSBvdmVycmlkZUNvbnRleHQgfHwgY3JlYXRlT3ZlcnJpZGVDb250ZXh0KHRoaXMudmlld01vZGVsKTtcclxuICAgICAgICB0aGlzLnZpZXcuX2lzVXNlckNvbnRyb2xsZWQgPSB0cnVlO1xyXG4gICAgICAgIGlmICh0aGlzLmJlaGF2aW9yLmhhbmRsZXNDcmVhdGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlld01vZGVsLmNyZWF0ZWQob3duaW5nVmlldyB8fCBudWxsLCB0aGlzLnZpZXcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmJpbmQodGhpcy52aWV3KTtcclxuICAgIH07XHJcbiAgICBDb250cm9sbGVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKHNjb3BlKSB7XHJcbiAgICAgICAgdmFyIHNraXBTZWxmU3Vic2NyaWJlciA9IHRoaXMuYmVoYXZpb3IuaGFuZGxlc0JpbmQ7XHJcbiAgICAgICAgdmFyIGJvdW5kUHJvcGVydGllcyA9IHRoaXMuYm91bmRQcm9wZXJ0aWVzO1xyXG4gICAgICAgIHZhciBpO1xyXG4gICAgICAgIHZhciBpaTtcclxuICAgICAgICB2YXIgeDtcclxuICAgICAgICB2YXIgb2JzZXJ2ZXI7XHJcbiAgICAgICAgdmFyIHNlbGZTdWJzY3JpYmVyO1xyXG4gICAgICAgIGlmICh0aGlzLmlzQm91bmQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2NvcGUgPT09IHNjb3BlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy51bmJpbmQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc0JvdW5kID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNjb3BlID0gc2NvcGU7XHJcbiAgICAgICAgZm9yIChpID0gMCwgaWkgPSBib3VuZFByb3BlcnRpZXMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xyXG4gICAgICAgICAgICB4ID0gYm91bmRQcm9wZXJ0aWVzW2ldO1xyXG4gICAgICAgICAgICBvYnNlcnZlciA9IHgub2JzZXJ2ZXI7XHJcbiAgICAgICAgICAgIHNlbGZTdWJzY3JpYmVyID0gb2JzZXJ2ZXIuc2VsZlN1YnNjcmliZXI7XHJcbiAgICAgICAgICAgIG9ic2VydmVyLnB1Ymxpc2hpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHNraXBTZWxmU3Vic2NyaWJlcikge1xyXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIuc2VsZlN1YnNjcmliZXIgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHguYmluZGluZy5iaW5kKHNjb3BlKTtcclxuICAgICAgICAgICAgb2JzZXJ2ZXIuY2FsbCgpO1xyXG4gICAgICAgICAgICBvYnNlcnZlci5wdWJsaXNoaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgb2JzZXJ2ZXIuc2VsZlN1YnNjcmliZXIgPSBzZWxmU3Vic2NyaWJlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG92ZXJyaWRlQ29udGV4dDtcclxuICAgICAgICBpZiAodGhpcy52aWV3ICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChza2lwU2VsZlN1YnNjcmliZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmlldy52aWV3TW9kZWxTY29wZSA9IHNjb3BlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZpZXdNb2RlbCA9PT0gc2NvcGUub3ZlcnJpZGVDb250ZXh0LmJpbmRpbmdDb250ZXh0KSB7XHJcbiAgICAgICAgICAgICAgICBvdmVycmlkZUNvbnRleHQgPSBzY29wZS5vdmVycmlkZUNvbnRleHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5pbnN0cnVjdGlvbi5pbmhlcml0QmluZGluZ0NvbnRleHQpIHtcclxuICAgICAgICAgICAgICAgIG92ZXJyaWRlQ29udGV4dCA9IGNyZWF0ZU92ZXJyaWRlQ29udGV4dCh0aGlzLnZpZXdNb2RlbCwgc2NvcGUub3ZlcnJpZGVDb250ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG92ZXJyaWRlQ29udGV4dCA9IGNyZWF0ZU92ZXJyaWRlQ29udGV4dCh0aGlzLnZpZXdNb2RlbCk7XHJcbiAgICAgICAgICAgICAgICBvdmVycmlkZUNvbnRleHQuX19wYXJlbnRPdmVycmlkZUNvbnRleHQgPSBzY29wZS5vdmVycmlkZUNvbnRleHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy52aWV3LmJpbmQodGhpcy52aWV3TW9kZWwsIG92ZXJyaWRlQ29udGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHNraXBTZWxmU3Vic2NyaWJlcikge1xyXG4gICAgICAgICAgICBvdmVycmlkZUNvbnRleHQgPSBzY29wZS5vdmVycmlkZUNvbnRleHQ7XHJcbiAgICAgICAgICAgIGlmIChzY29wZS5vdmVycmlkZUNvbnRleHQuX19wYXJlbnRPdmVycmlkZUNvbnRleHQgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICAgICAgJiYgdGhpcy52aWV3TW9kZWwudmlld0ZhY3RvcnkgJiYgdGhpcy52aWV3TW9kZWwudmlld0ZhY3RvcnkuZmFjdG9yeUNyZWF0ZUluc3RydWN0aW9uLnBhcnRSZXBsYWNlbWVudHMpIHtcclxuICAgICAgICAgICAgICAgIG92ZXJyaWRlQ29udGV4dCA9IE9iamVjdC5hc3NpZ24oe30sIHNjb3BlLm92ZXJyaWRlQ29udGV4dCk7XHJcbiAgICAgICAgICAgICAgICBvdmVycmlkZUNvbnRleHQucGFyZW50T3ZlcnJpZGVDb250ZXh0ID0gc2NvcGUub3ZlcnJpZGVDb250ZXh0Ll9fcGFyZW50T3ZlcnJpZGVDb250ZXh0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMudmlld01vZGVsLmJpbmQoc2NvcGUuYmluZGluZ0NvbnRleHQsIG92ZXJyaWRlQ29udGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIENvbnRyb2xsZXIucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0JvdW5kKSB7XHJcbiAgICAgICAgICAgIHZhciBib3VuZFByb3BlcnRpZXMgPSB0aGlzLmJvdW5kUHJvcGVydGllcztcclxuICAgICAgICAgICAgdmFyIGkgPSB2b2lkIDA7XHJcbiAgICAgICAgICAgIHZhciBpaSA9IHZvaWQgMDtcclxuICAgICAgICAgICAgdGhpcy5pc0JvdW5kID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2NvcGUgPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAodGhpcy52aWV3ICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXcudW5iaW5kKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuYmVoYXZpb3IuaGFuZGxlc1VuYmluZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52aWV3TW9kZWwudW5iaW5kKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuZWxlbWVudEV2ZW50cyAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50RXZlbnRzLmRpc3Bvc2VBbGwoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IGJvdW5kUHJvcGVydGllcy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XHJcbiAgICAgICAgICAgICAgICBib3VuZFByb3BlcnRpZXNbaV0uYmluZGluZy51bmJpbmQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBDb250cm9sbGVyLnByb3RvdHlwZS5hdHRhY2hlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0F0dGFjaGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc0F0dGFjaGVkID0gdHJ1ZTtcclxuICAgICAgICBpZiAodGhpcy5iZWhhdmlvci5oYW5kbGVzQXR0YWNoZWQpIHtcclxuICAgICAgICAgICAgdGhpcy52aWV3TW9kZWwuYXR0YWNoZWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMudmlldyAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLnZpZXcuYXR0YWNoZWQoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgQ29udHJvbGxlci5wcm90b3R5cGUuZGV0YWNoZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNBdHRhY2hlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmlzQXR0YWNoZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMudmlldyAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52aWV3LmRldGFjaGVkKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuYmVoYXZpb3IuaGFuZGxlc0RldGFjaGVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdNb2RlbC5kZXRhY2hlZCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiBDb250cm9sbGVyO1xyXG59KCkpO1xuXG52YXIgbGFzdFByb3ZpZGVySWQgPSAwO1xyXG5mdW5jdGlvbiBuZXh0UHJvdmlkZXJJZCgpIHtcclxuICAgIHJldHVybiArK2xhc3RQcm92aWRlcklkO1xyXG59XHJcbmZ1bmN0aW9uIGRvUHJvY2Vzc0NvbnRlbnQoKSB7IHJldHVybiB0cnVlOyB9XHJcbmZ1bmN0aW9uIGRvUHJvY2Vzc0F0dHJpYnV0ZXMoKSB7IH1cclxudmFyIEh0bWxCZWhhdmlvclJlc291cmNlID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEh0bWxCZWhhdmlvclJlc291cmNlKCkge1xyXG4gICAgICAgIHRoaXMuZWxlbWVudE5hbWUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlTmFtZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVEZWZhdWx0QmluZGluZ01vZGUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5saWZ0c0NvbnRlbnQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnRhcmdldFNoYWRvd0RPTSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2hhZG93RE9NT3B0aW9ucyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5wcm9jZXNzQXR0cmlidXRlcyA9IGRvUHJvY2Vzc0F0dHJpYnV0ZXM7XHJcbiAgICAgICAgdGhpcy5wcm9jZXNzQ29udGVudCA9IGRvUHJvY2Vzc0NvbnRlbnQ7XHJcbiAgICAgICAgdGhpcy51c2VzU2hhZG93RE9NID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jaGlsZEJpbmRpbmdzID0gbnVsbDtcclxuICAgICAgICB0aGlzLmhhc0R5bmFtaWNPcHRpb25zID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJsZXNzID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gW107XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzID0ge307XHJcbiAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5wcmltYXJ5UHJvcGVydHkgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgSHRtbEJlaGF2aW9yUmVzb3VyY2UuY29udmVudGlvbiA9IGZ1bmN0aW9uIChuYW1lLCBleGlzdGluZykge1xyXG4gICAgICAgIHZhciBiZWhhdmlvcjtcclxuICAgICAgICBpZiAobmFtZS5lbmRzV2l0aCgnQ3VzdG9tQXR0cmlidXRlJykpIHtcclxuICAgICAgICAgICAgYmVoYXZpb3IgPSBleGlzdGluZyB8fCBuZXcgSHRtbEJlaGF2aW9yUmVzb3VyY2UoKTtcclxuICAgICAgICAgICAgYmVoYXZpb3IuYXR0cmlidXRlTmFtZSA9IF9oeXBoZW5hdGUobmFtZS5zdWJzdHJpbmcoMCwgbmFtZS5sZW5ndGggLSAxNSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmFtZS5lbmRzV2l0aCgnQ3VzdG9tRWxlbWVudCcpKSB7XHJcbiAgICAgICAgICAgIGJlaGF2aW9yID0gZXhpc3RpbmcgfHwgbmV3IEh0bWxCZWhhdmlvclJlc291cmNlKCk7XHJcbiAgICAgICAgICAgIGJlaGF2aW9yLmVsZW1lbnROYW1lID0gX2h5cGhlbmF0ZShuYW1lLnN1YnN0cmluZygwLCBuYW1lLmxlbmd0aCAtIDEzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBiZWhhdmlvcjtcclxuICAgIH07XHJcbiAgICBIdG1sQmVoYXZpb3JSZXNvdXJjZS5wcm90b3R5cGUuYWRkQ2hpbGRCaW5kaW5nID0gZnVuY3Rpb24gKGJlaGF2aW9yKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRCaW5kaW5ncyA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmNoaWxkQmluZGluZ3MgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jaGlsZEJpbmRpbmdzLnB1c2goYmVoYXZpb3IpO1xyXG4gICAgfTtcclxuICAgIEh0bWxCZWhhdmlvclJlc291cmNlLnByb3RvdHlwZS5pbml0aWFsaXplID0gZnVuY3Rpb24gKGNvbnRhaW5lciwgdGFyZ2V0KSB7XHJcbiAgICAgICAgdmFyIHByb3RvID0gdGFyZ2V0LnByb3RvdHlwZTtcclxuICAgICAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMucHJvcGVydGllcztcclxuICAgICAgICB2YXIgYXR0cmlidXRlTmFtZSA9IHRoaXMuYXR0cmlidXRlTmFtZTtcclxuICAgICAgICB2YXIgYXR0cmlidXRlRGVmYXVsdEJpbmRpbmdNb2RlID0gdGhpcy5hdHRyaWJ1dGVEZWZhdWx0QmluZGluZ01vZGU7XHJcbiAgICAgICAgdmFyIGk7XHJcbiAgICAgICAgdmFyIGlpO1xyXG4gICAgICAgIHZhciBjdXJyZW50O1xyXG4gICAgICAgIGlmICh0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgIHRhcmdldC5fX3Byb3ZpZGVySWRfXyA9IG5leHRQcm92aWRlcklkKCk7XHJcbiAgICAgICAgdGhpcy5vYnNlcnZlckxvY2F0b3IgPSBjb250YWluZXIuZ2V0KE9ic2VydmVyTG9jYXRvcik7XHJcbiAgICAgICAgdGhpcy50YXNrUXVldWUgPSBjb250YWluZXIuZ2V0KFRhc2tRdWV1ZSk7XHJcbiAgICAgICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7XHJcbiAgICAgICAgdGhpcy51c2VzU2hhZG93RE9NID0gdGhpcy50YXJnZXRTaGFkb3dET00gJiYgRkVBVFVSRS5zaGFkb3dET007XHJcbiAgICAgICAgdGhpcy5oYW5kbGVzQ3JlYXRlZCA9ICgnY3JlYXRlZCcgaW4gcHJvdG8pO1xyXG4gICAgICAgIHRoaXMuaGFuZGxlc0JpbmQgPSAoJ2JpbmQnIGluIHByb3RvKTtcclxuICAgICAgICB0aGlzLmhhbmRsZXNVbmJpbmQgPSAoJ3VuYmluZCcgaW4gcHJvdG8pO1xyXG4gICAgICAgIHRoaXMuaGFuZGxlc0F0dGFjaGVkID0gKCdhdHRhY2hlZCcgaW4gcHJvdG8pO1xyXG4gICAgICAgIHRoaXMuaGFuZGxlc0RldGFjaGVkID0gKCdkZXRhY2hlZCcgaW4gcHJvdG8pO1xyXG4gICAgICAgIHRoaXMuaHRtbE5hbWUgPSB0aGlzLmVsZW1lbnROYW1lIHx8IHRoaXMuYXR0cmlidXRlTmFtZTtcclxuICAgICAgICBpZiAoYXR0cmlidXRlTmFtZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAocHJvcGVydGllcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIG5ldyBCaW5kYWJsZVByb3BlcnR5KHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiAndmFsdWUnLFxyXG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZUhhbmRsZXI6ICd2YWx1ZUNoYW5nZWQnIGluIHByb3RvID8gJ3ZhbHVlQ2hhbmdlZCcgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZTogYXR0cmlidXRlTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0QmluZGluZ01vZGU6IGF0dHJpYnV0ZURlZmF1bHRCaW5kaW5nTW9kZVxyXG4gICAgICAgICAgICAgICAgfSkucmVnaXN0ZXJXaXRoKHRhcmdldCwgdGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY3VycmVudCA9IHByb3BlcnRpZXNbMF07XHJcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMSAmJiBjdXJyZW50Lm5hbWUgPT09ICd2YWx1ZScpIHtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnQuaXNEeW5hbWljID0gY3VycmVudC5oYXNPcHRpb25zID0gdGhpcy5oYXNEeW5hbWljT3B0aW9ucztcclxuICAgICAgICAgICAgICAgIGN1cnJlbnQuZGVmaW5lT24odGFyZ2V0LCB0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGlpID0gcHJvcGVydGllcy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllc1tpXS5kZWZpbmVPbih0YXJnZXQsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2ldLnByaW1hcnlQcm9wZXJ0eSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wcmltYXJ5UHJvcGVydHkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignT25seSBvbmUgYmluZGFibGUgcHJvcGVydHkgb24gYSBjdXN0b20gZWxlbWVudCBjYW4gYmUgZGVmaW5lZCBhcyB0aGUgZGVmYXVsdCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJpbWFyeVByb3BlcnR5ID0gcHJvcGVydGllc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50ID0gbmV3IEJpbmRhYmxlUHJvcGVydHkoe1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICd2YWx1ZScsXHJcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlSGFuZGxlcjogJ3ZhbHVlQ2hhbmdlZCcgaW4gcHJvdG8gPyAndmFsdWVDaGFuZ2VkJyA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlOiBhdHRyaWJ1dGVOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRCaW5kaW5nTW9kZTogYXR0cmlidXRlRGVmYXVsdEJpbmRpbmdNb2RlXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnQuaGFzT3B0aW9ucyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50LnJlZ2lzdGVyV2l0aCh0YXJnZXQsIHRoaXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IHByb3BlcnRpZXMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xyXG4gICAgICAgICAgICAgICAgcHJvcGVydGllc1tpXS5kZWZpbmVPbih0YXJnZXQsIHRoaXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX2NvcHlJbmhlcml0ZWRQcm9wZXJ0aWVzKGNvbnRhaW5lciwgdGFyZ2V0KTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgSHRtbEJlaGF2aW9yUmVzb3VyY2UucHJvdG90eXBlLnJlZ2lzdGVyID0gZnVuY3Rpb24gKHJlZ2lzdHJ5LCBuYW1lKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICBpZiAodGhpcy5hdHRyaWJ1dGVOYW1lICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQXR0cmlidXRlKG5hbWUgfHwgdGhpcy5hdHRyaWJ1dGVOYW1lLCB0aGlzLCB0aGlzLmF0dHJpYnV0ZU5hbWUpO1xyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmFsaWFzZXMpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFsaWFzZXNcclxuICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaChmdW5jdGlvbiAoYWxpYXMpIHtcclxuICAgICAgICAgICAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlckF0dHJpYnV0ZShhbGlhcywgX3RoaXMsIF90aGlzLmF0dHJpYnV0ZU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudE5hbWUgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJFbGVtZW50KG5hbWUgfHwgdGhpcy5lbGVtZW50TmFtZSwgdGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIEh0bWxCZWhhdmlvclJlc291cmNlLnByb3RvdHlwZS5hbGlhc2VzID0gZnVuY3Rpb24gKGFsaWFzZXMpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XHJcbiAgICB9O1xyXG4gICAgSHRtbEJlaGF2aW9yUmVzb3VyY2UucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY29udGFpbmVyLCB0YXJnZXQsIGxvYWRDb250ZXh0LCB2aWV3U3RyYXRlZ3ksIHRyYW5zaWVudFZpZXcpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHZhciBvcHRpb25zO1xyXG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnROYW1lICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHZpZXdTdHJhdGVneSA9IGNvbnRhaW5lci5nZXQoVmlld0xvY2F0b3IpLmdldFZpZXdTdHJhdGVneSh2aWV3U3RyYXRlZ3kgfHwgdGhpcy52aWV3U3RyYXRlZ3kgfHwgdGFyZ2V0KTtcclxuICAgICAgICAgICAgb3B0aW9ucyA9IG5ldyBWaWV3Q29tcGlsZUluc3RydWN0aW9uKHRoaXMudGFyZ2V0U2hhZG93RE9NLCB0cnVlKTtcclxuICAgICAgICAgICAgaWYgKCF2aWV3U3RyYXRlZ3kubW9kdWxlSWQpIHtcclxuICAgICAgICAgICAgICAgIHZpZXdTdHJhdGVneS5tb2R1bGVJZCA9IE9yaWdpbi5nZXQodGFyZ2V0KS5tb2R1bGVJZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdmlld1N0cmF0ZWd5XHJcbiAgICAgICAgICAgICAgICAubG9hZFZpZXdGYWN0b3J5KGNvbnRhaW5lci5nZXQoVmlld0VuZ2luZSksIG9wdGlvbnMsIGxvYWRDb250ZXh0LCB0YXJnZXQpXHJcbiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAodmlld0ZhY3RvcnkpIHtcclxuICAgICAgICAgICAgICAgIGlmICghdHJhbnNpZW50VmlldyB8fCAhX3RoaXMudmlld0ZhY3RvcnkpIHtcclxuICAgICAgICAgICAgICAgICAgICBfdGhpcy52aWV3RmFjdG9yeSA9IHZpZXdGYWN0b3J5O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZpZXdGYWN0b3J5O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzKTtcclxuICAgIH07XHJcbiAgICBIdG1sQmVoYXZpb3JSZXNvdXJjZS5wcm90b3R5cGUuY29tcGlsZSA9IGZ1bmN0aW9uIChjb21waWxlciwgcmVzb3VyY2VzLCBub2RlLCBpbnN0cnVjdGlvbiwgcGFyZW50Tm9kZSkge1xyXG4gICAgICAgIGlmICh0aGlzLmxpZnRzQ29udGVudCkge1xyXG4gICAgICAgICAgICBpZiAoIWluc3RydWN0aW9uLnZpZXdGYWN0b3J5KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdGVtcGxhdGUgPSBET00uY3JlYXRlRWxlbWVudCgndGVtcGxhdGUnKTtcclxuICAgICAgICAgICAgICAgIHZhciBmcmFnbWVudCA9IERPTS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2FjaGVTaXplID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ3ZpZXctY2FjaGUnKTtcclxuICAgICAgICAgICAgICAgIHZhciBwYXJ0ID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ3BhcnQnKTtcclxuICAgICAgICAgICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKGluc3RydWN0aW9uLm9yaWdpbmFsQXR0ck5hbWUpO1xyXG4gICAgICAgICAgICAgICAgRE9NLnJlcGxhY2VOb2RlKHRlbXBsYXRlLCBub2RlLCBwYXJlbnROb2RlKTtcclxuICAgICAgICAgICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb24udmlld0ZhY3RvcnkgPSBjb21waWxlci5jb21waWxlKGZyYWdtZW50LCByZXNvdXJjZXMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhcnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbi52aWV3RmFjdG9yeS5wYXJ0ID0gcGFydDtcclxuICAgICAgICAgICAgICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZSgncGFydCcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGNhY2hlU2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uLnZpZXdGYWN0b3J5LnNldENhY2hlU2l6ZShjYWNoZVNpemUpO1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKCd2aWV3LWNhY2hlJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBub2RlID0gdGVtcGxhdGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5lbGVtZW50TmFtZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB2YXIgcGFydFJlcGxhY2VtZW50cyA9IHt9O1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wcm9jZXNzQ29udGVudChjb21waWxlciwgcmVzb3VyY2VzLCBub2RlLCBpbnN0cnVjdGlvbikgJiYgbm9kZS5oYXNDaGlsZE5vZGVzKCkpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjdXJyZW50Q2hpbGQgPSBub2RlLmZpcnN0Q2hpbGQ7XHJcbiAgICAgICAgICAgICAgICB2YXIgY29udGVudEVsZW1lbnQgPSB0aGlzLnVzZXNTaGFkb3dET00gPyBudWxsIDogRE9NLmNyZWF0ZUVsZW1lbnQoJ2F1LWNvbnRlbnQnKTtcclxuICAgICAgICAgICAgICAgIHZhciBuZXh0U2libGluZyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgICAgIHZhciB0b1JlcGxhY2UgPSB2b2lkIDA7XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoY3VycmVudENoaWxkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dFNpYmxpbmcgPSBjdXJyZW50Q2hpbGQubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRDaGlsZC50YWdOYW1lID09PSAnVEVNUExBVEUnICYmICh0b1JlcGxhY2UgPSBjdXJyZW50Q2hpbGQuZ2V0QXR0cmlidXRlKCdyZXBsYWNlLXBhcnQnKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFydFJlcGxhY2VtZW50c1t0b1JlcGxhY2VdID0gY29tcGlsZXIuY29tcGlsZShjdXJyZW50Q2hpbGQsIHJlc291cmNlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIERPTS5yZW1vdmVOb2RlKGN1cnJlbnRDaGlsZCwgcGFyZW50Tm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uLnBhcnRSZXBsYWNlbWVudHMgPSBwYXJ0UmVwbGFjZW1lbnRzO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb250ZW50RWxlbWVudCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudENoaWxkLm5vZGVUeXBlID09PSAzICYmIF9pc0FsbFdoaXRlc3BhY2UoY3VycmVudENoaWxkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRE9NLnJlbW92ZU5vZGUoY3VycmVudENoaWxkLCBwYXJlbnROb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRFbGVtZW50LmFwcGVuZENoaWxkKGN1cnJlbnRDaGlsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudENoaWxkID0gbmV4dFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoY29udGVudEVsZW1lbnQgIT09IG51bGwgJiYgY29udGVudEVsZW1lbnQuaGFzQ2hpbGROb2RlcygpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5hcHBlbmRDaGlsZChjb250ZW50RWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbi5za2lwQ29udGVudFByb2Nlc3NpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGluc3RydWN0aW9uLnNraXBDb250ZW50UHJvY2Vzc2luZyA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoIXRoaXMucHJvY2Vzc0NvbnRlbnQoY29tcGlsZXIsIHJlc291cmNlcywgbm9kZSwgaW5zdHJ1Y3Rpb24pKSB7XHJcbiAgICAgICAgICAgIGluc3RydWN0aW9uLnNraXBDb250ZW50UHJvY2Vzc2luZyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBub2RlO1xyXG4gICAgfTtcclxuICAgIEh0bWxCZWhhdmlvclJlc291cmNlLnByb3RvdHlwZS5jcmVhdGUgPSBmdW5jdGlvbiAoY29udGFpbmVyLCBpbnN0cnVjdGlvbiwgZWxlbWVudCwgYmluZGluZ3MpIHtcclxuICAgICAgICB2YXIgdmlld0hvc3Q7XHJcbiAgICAgICAgdmFyIGF1ID0gbnVsbDtcclxuICAgICAgICBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uIHx8IEJlaGF2aW9ySW5zdHJ1Y3Rpb24ubm9ybWFsO1xyXG4gICAgICAgIGVsZW1lbnQgPSBlbGVtZW50IHx8IG51bGw7XHJcbiAgICAgICAgYmluZGluZ3MgPSBiaW5kaW5ncyB8fCBudWxsO1xyXG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnROYW1lICE9PSBudWxsICYmIGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudXNlc1NoYWRvd0RPTSkge1xyXG4gICAgICAgICAgICAgICAgdmlld0hvc3QgPSBlbGVtZW50LmF0dGFjaFNoYWRvdyh0aGlzLnNoYWRvd0RPTU9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgY29udGFpbmVyLnJlZ2lzdGVySW5zdGFuY2UoRE9NLmJvdW5kYXJ5LCB2aWV3SG9zdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2aWV3SG9zdCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy50YXJnZXRTaGFkb3dET00pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXIucmVnaXN0ZXJJbnN0YW5jZShET00uYm91bmRhcnksIHZpZXdIb3N0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZWxlbWVudCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBlbGVtZW50LmF1ID0gYXUgPSBlbGVtZW50LmF1IHx8IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdmlld01vZGVsID0gaW5zdHJ1Y3Rpb24udmlld01vZGVsIHx8IGNvbnRhaW5lci5nZXQodGhpcy50YXJnZXQpO1xyXG4gICAgICAgIHZhciBjb250cm9sbGVyID0gbmV3IENvbnRyb2xsZXIodGhpcywgaW5zdHJ1Y3Rpb24sIHZpZXdNb2RlbCwgY29udGFpbmVyKTtcclxuICAgICAgICB2YXIgY2hpbGRCaW5kaW5ncyA9IHRoaXMuY2hpbGRCaW5kaW5ncztcclxuICAgICAgICB2YXIgdmlld0ZhY3Rvcnk7XHJcbiAgICAgICAgaWYgKHRoaXMubGlmdHNDb250ZW50KSB7XHJcbiAgICAgICAgICAgIGF1LmNvbnRyb2xsZXIgPSBjb250cm9sbGVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLmVsZW1lbnROYW1lICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHZpZXdGYWN0b3J5ID0gaW5zdHJ1Y3Rpb24udmlld0ZhY3RvcnkgfHwgdGhpcy52aWV3RmFjdG9yeTtcclxuICAgICAgICAgICAgY29udGFpbmVyLnZpZXdNb2RlbCA9IHZpZXdNb2RlbDtcclxuICAgICAgICAgICAgaWYgKHZpZXdGYWN0b3J5KSB7XHJcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyLnZpZXcgPSB2aWV3RmFjdG9yeS5jcmVhdGUoY29udGFpbmVyLCBpbnN0cnVjdGlvbiwgZWxlbWVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGF1LmNvbnRyb2xsZXIgPSBjb250cm9sbGVyO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXIudmlldykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy51c2VzU2hhZG93RE9NICYmIChlbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAxIHx8IGVsZW1lbnQuY29udGVudEVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250ZW50RWxlbWVudCA9IGVsZW1lbnQuY2hpbGROb2Rlc1swXSB8fCBlbGVtZW50LmNvbnRlbnRFbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLnZpZXcuY29udGVudFZpZXcgPSB7IGZyYWdtZW50OiBjb250ZW50RWxlbWVudCB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50RWxlbWVudC5wYXJlbnROb2RlICYmIERPTS5yZW1vdmVOb2RlKGNvbnRlbnRFbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RydWN0aW9uLmFuY2hvcklzQ29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZEJpbmRpbmdzICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBjaGlsZEJpbmRpbmdzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLnZpZXcuYWRkQmluZGluZyhjaGlsZEJpbmRpbmdzW2ldLmNyZWF0ZShlbGVtZW50LCB2aWV3TW9kZWwsIGNvbnRyb2xsZXIpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLnZpZXcuYXBwZW5kTm9kZXNUbyh2aWV3SG9zdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLnZpZXcuaW5zZXJ0Tm9kZXNCZWZvcmUodmlld0hvc3QpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoaWxkQmluZGluZ3MgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBjaGlsZEJpbmRpbmdzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmluZGluZ3MucHVzaChjaGlsZEJpbmRpbmdzW2ldLmNyZWF0ZShlbGVtZW50LCB2aWV3TW9kZWwsIGNvbnRyb2xsZXIpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoY29udHJvbGxlci52aWV3KSB7XHJcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyLnZpZXcuY29udHJvbGxlciA9IGNvbnRyb2xsZXI7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGRCaW5kaW5ncyAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGNoaWxkQmluZGluZ3MubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLnZpZXcuYWRkQmluZGluZyhjaGlsZEJpbmRpbmdzW2ldLmNyZWF0ZShpbnN0cnVjdGlvbi5ob3N0LCB2aWV3TW9kZWwsIGNvbnRyb2xsZXIpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoY2hpbGRCaW5kaW5ncyAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gY2hpbGRCaW5kaW5ncy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmluZGluZ3MucHVzaChjaGlsZEJpbmRpbmdzW2ldLmNyZWF0ZShpbnN0cnVjdGlvbi5ob3N0LCB2aWV3TW9kZWwsIGNvbnRyb2xsZXIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChjaGlsZEJpbmRpbmdzICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGNoaWxkQmluZGluZ3MubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xyXG4gICAgICAgICAgICAgICAgYmluZGluZ3MucHVzaChjaGlsZEJpbmRpbmdzW2ldLmNyZWF0ZShlbGVtZW50LCB2aWV3TW9kZWwsIGNvbnRyb2xsZXIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYXUgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgYXVbdGhpcy5odG1sTmFtZV0gPSBjb250cm9sbGVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24uaW5pdGlhdGVkQnlCZWhhdmlvciAmJiB2aWV3RmFjdG9yeSkge1xyXG4gICAgICAgICAgICBjb250cm9sbGVyLnZpZXcuY3JlYXRlZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY29udHJvbGxlcjtcclxuICAgIH07XHJcbiAgICBIdG1sQmVoYXZpb3JSZXNvdXJjZS5wcm90b3R5cGUuX2Vuc3VyZVByb3BlcnRpZXNEZWZpbmVkID0gZnVuY3Rpb24gKGluc3RhbmNlLCBsb29rdXApIHtcclxuICAgICAgICB2YXIgcHJvcGVydGllcztcclxuICAgICAgICB2YXIgaTtcclxuICAgICAgICB2YXIgaWk7XHJcbiAgICAgICAgdmFyIG9ic2VydmVyO1xyXG4gICAgICAgIGlmICgnX19wcm9wZXJ0aWVzRGVmaW5lZF9fJyBpbiBsb29rdXApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsb29rdXAuX19wcm9wZXJ0aWVzRGVmaW5lZF9fID0gdHJ1ZTtcclxuICAgICAgICBwcm9wZXJ0aWVzID0gdGhpcy5wcm9wZXJ0aWVzO1xyXG4gICAgICAgIGZvciAoaSA9IDAsIGlpID0gcHJvcGVydGllcy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XHJcbiAgICAgICAgICAgIG9ic2VydmVyID0gcHJvcGVydGllc1tpXS5jcmVhdGVPYnNlcnZlcihpbnN0YW5jZSk7XHJcbiAgICAgICAgICAgIGlmIChvYnNlcnZlciAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBsb29rdXBbb2JzZXJ2ZXIucHJvcGVydHlOYW1lXSA9IG9ic2VydmVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIEh0bWxCZWhhdmlvclJlc291cmNlLnByb3RvdHlwZS5fY29weUluaGVyaXRlZFByb3BlcnRpZXMgPSBmdW5jdGlvbiAoY29udGFpbmVyLCB0YXJnZXQpIHtcclxuICAgICAgICB2YXIgYmVoYXZpb3I7XHJcbiAgICAgICAgdmFyIGRlcml2ZWQgPSB0YXJnZXQ7XHJcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcclxuICAgICAgICAgICAgdmFyIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldC5wcm90b3R5cGUpO1xyXG4gICAgICAgICAgICB0YXJnZXQgPSBwcm90byAmJiBwcm90by5jb25zdHJ1Y3RvcjtcclxuICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBiZWhhdmlvciA9IG1ldGFkYXRhLmdldE93bihtZXRhZGF0YS5yZXNvdXJjZSwgdGFyZ2V0KTtcclxuICAgICAgICAgICAgaWYgKGJlaGF2aW9yKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBiZWhhdmlvci5pbml0aWFsaXplKGNvbnRhaW5lciwgdGFyZ2V0KTtcclxuICAgICAgICB2YXIgX2xvb3BfMSA9IGZ1bmN0aW9uIChpLCBpaSkge1xyXG4gICAgICAgICAgICB2YXIgcHJvcCA9IGJlaGF2aW9yLnByb3BlcnRpZXNbaV07XHJcbiAgICAgICAgICAgIGlmICh0aGlzXzEucHJvcGVydGllcy5zb21lKGZ1bmN0aW9uIChwKSB7IHJldHVybiBwLm5hbWUgPT09IHByb3AubmFtZTsgfSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBcImNvbnRpbnVlXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbmV3IEJpbmRhYmxlUHJvcGVydHkocHJvcCkucmVnaXN0ZXJXaXRoKGRlcml2ZWQsIHRoaXNfMSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB2YXIgdGhpc18xID0gdGhpcztcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBiZWhhdmlvci5wcm9wZXJ0aWVzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcclxuICAgICAgICAgICAgX2xvb3BfMShpKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIEh0bWxCZWhhdmlvclJlc291cmNlO1xyXG59KCkpO1xuXG5mdW5jdGlvbiByZWdpc3Rlcihsb29rdXAsIG5hbWUsIHJlc291cmNlLCB0eXBlKSB7XHJcbiAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB2YXIgZXhpc3RpbmcgPSBsb29rdXBbbmFtZV07XHJcbiAgICBpZiAoZXhpc3RpbmcpIHtcclxuICAgICAgICBpZiAoZXhpc3RpbmcgIT09IHJlc291cmNlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkF0dGVtcHRlZCB0byByZWdpc3RlciBcIi5jb25jYXQodHlwZSwgXCIgd2hlbiBvbmUgd2l0aCB0aGUgc2FtZSBuYW1lIGFscmVhZHkgZXhpc3RzLiBOYW1lOiBcIikuY29uY2F0KG5hbWUsIFwiLlwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxvb2t1cFtuYW1lXSA9IHJlc291cmNlO1xyXG59XHJcbmZ1bmN0aW9uIHZhbGlkYXRlQmVoYXZpb3JOYW1lKG5hbWUsIHR5cGUpIHtcclxuICAgIGlmICgvW0EtWl0vLnRlc3QobmFtZSkpIHtcclxuICAgICAgICB2YXIgbmV3TmFtZSA9IF9oeXBoZW5hdGUobmFtZSk7XHJcbiAgICAgICAgTG9nTWFuYWdlclxyXG4gICAgICAgICAgICAuZ2V0TG9nZ2VyKCd0ZW1wbGF0aW5nJylcclxuICAgICAgICAgICAgLndhcm4oXCInXCIuY29uY2F0KG5hbWUsIFwiJyBpcyBub3QgYSB2YWxpZCBcIikuY29uY2F0KHR5cGUsIFwiIG5hbWUgYW5kIGhhcyBiZWVuIGNvbnZlcnRlZCB0byAnXCIpLmNvbmNhdChuZXdOYW1lLCBcIicuIFVwcGVyLWNhc2UgbGV0dGVycyBhcmUgbm90IGFsbG93ZWQgYmVjYXVzZSB0aGUgRE9NIGlzIG5vdCBjYXNlLXNlbnNpdGl2ZS5cIikpO1xyXG4gICAgICAgIHJldHVybiBuZXdOYW1lO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbn1cclxudmFyIGNvbnZlbnRpb25NYXJrID0gJ19fYXVfcmVzb3VyY2VfXyc7XHJcbnZhciBWaWV3UmVzb3VyY2VzID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIFZpZXdSZXNvdXJjZXMocGFyZW50LCB2aWV3VXJsKSB7XHJcbiAgICAgICAgdGhpcy5iaW5kaW5nTGFuZ3VhZ2UgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50IHx8IG51bGw7XHJcbiAgICAgICAgdGhpcy5oYXNQYXJlbnQgPSB0aGlzLnBhcmVudCAhPT0gbnVsbDtcclxuICAgICAgICB0aGlzLnZpZXdVcmwgPSB2aWV3VXJsIHx8ICcnO1xyXG4gICAgICAgIHRoaXMubG9va3VwRnVuY3Rpb25zID0ge1xyXG4gICAgICAgICAgICB2YWx1ZUNvbnZlcnRlcnM6IHRoaXMuZ2V0VmFsdWVDb252ZXJ0ZXIuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgYmluZGluZ0JlaGF2aW9yczogdGhpcy5nZXRCaW5kaW5nQmVoYXZpb3IuYmluZCh0aGlzKVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcclxuICAgICAgICB0aGlzLmVsZW1lbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcclxuICAgICAgICB0aGlzLnZhbHVlQ29udmVydGVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XHJcbiAgICAgICAgdGhpcy5iaW5kaW5nQmVoYXZpb3JzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZU1hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xyXG4gICAgICAgIHRoaXMuYmVmb3JlQ29tcGlsZSA9IHRoaXMuYWZ0ZXJDb21waWxlID0gdGhpcy5iZWZvcmVDcmVhdGUgPSB0aGlzLmFmdGVyQ3JlYXRlID0gdGhpcy5iZWZvcmVCaW5kID0gdGhpcy5iZWZvcmVVbmJpbmQgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIFZpZXdSZXNvdXJjZXMuY29udmVudGlvbiA9IGZ1bmN0aW9uICh0YXJnZXQsIGV4aXN0aW5nKSB7XHJcbiAgICAgICAgdmFyIHJlc291cmNlO1xyXG4gICAgICAgIGlmIChleGlzdGluZyAmJiBjb252ZW50aW9uTWFyayBpbiBleGlzdGluZykge1xyXG4gICAgICAgICAgICByZXR1cm4gZXhpc3Rpbmc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgnJHJlc291cmNlJyBpbiB0YXJnZXQpIHtcclxuICAgICAgICAgICAgdmFyIGNvbmZpZyA9IHRhcmdldC4kcmVzb3VyY2U7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UgPSBleGlzdGluZyB8fCBuZXcgSHRtbEJlaGF2aW9yUmVzb3VyY2UoKTtcclxuICAgICAgICAgICAgICAgIHJlc291cmNlW2NvbnZlbnRpb25NYXJrXSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXJlc291cmNlLmVsZW1lbnROYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZWxlbWVudE5hbWUgPSB2YWxpZGF0ZUJlaGF2aW9yTmFtZShjb25maWcsICdjdXN0b20gZWxlbWVudCcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25maWcgPSBjb25maWcuY2FsbCh0YXJnZXQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnID0geyBuYW1lOiBjb25maWcgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIGNvbmZpZyk7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVzb3VyY2VUeXBlID0gY29uZmlnLnR5cGUgfHwgJ2VsZW1lbnQnO1xyXG4gICAgICAgICAgICAgICAgdmFyIG5hbWVfMSA9IGNvbmZpZy5uYW1lO1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChyZXNvdXJjZVR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdlbGVtZW50JzpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdhdHRyaWJ1dGUnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZSA9IGV4aXN0aW5nIHx8IG5ldyBIdG1sQmVoYXZpb3JSZXNvdXJjZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZVtjb252ZW50aW9uTWFya10gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzb3VyY2VUeXBlID09PSAnZWxlbWVudCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzb3VyY2UuZWxlbWVudE5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5lbGVtZW50TmFtZSA9IG5hbWVfMVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHZhbGlkYXRlQmVoYXZpb3JOYW1lKG5hbWVfMSwgJ2N1c3RvbSBlbGVtZW50JylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfaHlwaGVuYXRlKHRhcmdldC5uYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzb3VyY2UuYXR0cmlidXRlTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmF0dHJpYnV0ZU5hbWUgPSBuYW1lXzFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB2YWxpZGF0ZUJlaGF2aW9yTmFtZShuYW1lXzEsICdjdXN0b20gYXR0cmlidXRlJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfaHlwaGVuYXRlKHRhcmdldC5uYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJ3RlbXBsYXRlQ29udHJvbGxlcicgaW4gY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcubGlmdHNDb250ZW50ID0gY29uZmlnLnRlbXBsYXRlQ29udHJvbGxlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjb25maWcudGVtcGxhdGVDb250cm9sbGVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgnZGVmYXVsdEJpbmRpbmdNb2RlJyBpbiBjb25maWcgJiYgcmVzb3VyY2UuYXR0cmlidXRlRGVmYXVsdEJpbmRpbmdNb2RlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5hdHRyaWJ1dGVEZWZhdWx0QmluZGluZ01vZGUgPSBjb25maWcuZGVmYXVsdEJpbmRpbmdNb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGNvbmZpZy5kZWZhdWx0QmluZGluZ01vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGNvbmZpZy5uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHJlc291cmNlLCBjb25maWcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICd2YWx1ZUNvbnZlcnRlcic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlID0gbmV3IFZhbHVlQ29udmVydGVyUmVzb3VyY2UoY2FtZWxDYXNlKG5hbWVfMSB8fCB0YXJnZXQubmFtZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdiaW5kaW5nQmVoYXZpb3InOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZSA9IG5ldyBCaW5kaW5nQmVoYXZpb3JSZXNvdXJjZShjYW1lbENhc2UobmFtZV8xIHx8IHRhcmdldC5uYW1lKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3ZpZXdFbmdpbmVIb29rcyc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlID0gbmV3IFZpZXdFbmdpbmVIb29rc1Jlc291cmNlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChyZXNvdXJjZSBpbnN0YW5jZW9mIEh0bWxCZWhhdmlvclJlc291cmNlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYmluZGFibGVzID0gdHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycgPyB1bmRlZmluZWQgOiBjb25maWcuYmluZGFibGVzO1xyXG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRQcm9wcyA9IHJlc291cmNlLnByb3BlcnRpZXM7XHJcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShiaW5kYWJsZXMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gYmluZGFibGVzLmxlbmd0aDsgaWkgPiBpOyArK2kpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb3AgPSBiaW5kYWJsZXNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJvcCB8fCAodHlwZW9mIHByb3AgIT09ICdzdHJpbmcnICYmICFwcm9wLm5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGJpbmRhYmxlIHByb3BlcnR5IGF0IFxcXCJcIi5jb25jYXQoaSwgXCJcXFwiIGZvciBjbGFzcyBcXFwiXCIpLmNvbmNhdCh0YXJnZXQubmFtZSwgXCJcXFwiLiBFeHBlY3RlZCBlaXRoZXIgYSBzdHJpbmcgb3IgYW4gb2JqZWN0IHdpdGggXFxcIm5hbWVcXFwiIHByb3BlcnR5LlwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld1Byb3AgPSBuZXcgQmluZGFibGVQcm9wZXJ0eShwcm9wKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGV4aXN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGpqID0gY3VycmVudFByb3BzLmxlbmd0aDsgamogPiBqOyArK2opIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50UHJvcHNbal0ubmFtZSA9PT0gbmV3UHJvcC5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4aXN0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1Byb3AucmVnaXN0ZXJXaXRoKHRhcmdldCwgcmVzb3VyY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzb3VyY2U7XHJcbiAgICB9O1xyXG4gICAgVmlld1Jlc291cmNlcy5wcm90b3R5cGUuX3RyeUFkZEhvb2sgPSBmdW5jdGlvbiAob2JqLCBuYW1lKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBvYmpbbmFtZV0gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgdmFyIGZ1bmMgPSBvYmpbbmFtZV0uYmluZChvYmopO1xyXG4gICAgICAgICAgICB2YXIgY291bnRlciA9IDE7XHJcbiAgICAgICAgICAgIHZhciBjYWxsYmFja05hbWUgPSB2b2lkIDA7XHJcbiAgICAgICAgICAgIHdoaWxlICh0aGlzW2NhbGxiYWNrTmFtZSA9IG5hbWUgKyBjb3VudGVyLnRvU3RyaW5nKCldICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIGNvdW50ZXIrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzW25hbWVdID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpc1tjYWxsYmFja05hbWVdID0gZnVuYztcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgVmlld1Jlc291cmNlcy5wcm90b3R5cGUuX2ludm9rZUhvb2sgPSBmdW5jdGlvbiAobmFtZSwgb25lLCB0d28sIHRocmVlLCBmb3VyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzUGFyZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFyZW50Ll9pbnZva2VIb29rKG5hbWUsIG9uZSwgdHdvLCB0aHJlZSwgZm91cik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzW25hbWVdKSB7XHJcbiAgICAgICAgICAgIHRoaXNbbmFtZSArICcxJ10ob25lLCB0d28sIHRocmVlLCBmb3VyKTtcclxuICAgICAgICAgICAgdmFyIGNhbGxiYWNrTmFtZSA9IG5hbWUgKyAnMic7XHJcbiAgICAgICAgICAgIGlmICh0aGlzW2NhbGxiYWNrTmFtZV0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXNbY2FsbGJhY2tOYW1lXShvbmUsIHR3bywgdGhyZWUsIGZvdXIpO1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2tOYW1lID0gbmFtZSArICczJztcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzW2NhbGxiYWNrTmFtZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzW2NhbGxiYWNrTmFtZV0ob25lLCB0d28sIHRocmVlLCBmb3VyKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY291bnRlciA9IDQ7XHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRoaXNbY2FsbGJhY2tOYW1lID0gbmFtZSArIGNvdW50ZXIudG9TdHJpbmcoKV0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2NhbGxiYWNrTmFtZV0ob25lLCB0d28sIHRocmVlLCBmb3VyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY291bnRlcisrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBWaWV3UmVzb3VyY2VzLnByb3RvdHlwZS5yZWdpc3RlclZpZXdFbmdpbmVIb29rcyA9IGZ1bmN0aW9uIChob29rcykge1xyXG4gICAgICAgIHRoaXMuX3RyeUFkZEhvb2soaG9va3MsICdiZWZvcmVDb21waWxlJyk7XHJcbiAgICAgICAgdGhpcy5fdHJ5QWRkSG9vayhob29rcywgJ2FmdGVyQ29tcGlsZScpO1xyXG4gICAgICAgIHRoaXMuX3RyeUFkZEhvb2soaG9va3MsICdiZWZvcmVDcmVhdGUnKTtcclxuICAgICAgICB0aGlzLl90cnlBZGRIb29rKGhvb2tzLCAnYWZ0ZXJDcmVhdGUnKTtcclxuICAgICAgICB0aGlzLl90cnlBZGRIb29rKGhvb2tzLCAnYmVmb3JlQmluZCcpO1xyXG4gICAgICAgIHRoaXMuX3RyeUFkZEhvb2soaG9va3MsICdiZWZvcmVVbmJpbmQnKTtcclxuICAgIH07XHJcbiAgICBWaWV3UmVzb3VyY2VzLnByb3RvdHlwZS5nZXRCaW5kaW5nTGFuZ3VhZ2UgPSBmdW5jdGlvbiAoYmluZGluZ0xhbmd1YWdlRmFsbGJhY2spIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iaW5kaW5nTGFuZ3VhZ2UgfHwgKHRoaXMuYmluZGluZ0xhbmd1YWdlID0gYmluZGluZ0xhbmd1YWdlRmFsbGJhY2spO1xyXG4gICAgfTtcclxuICAgIFZpZXdSZXNvdXJjZXMucHJvdG90eXBlLnBhdGNoSW5QYXJlbnQgPSBmdW5jdGlvbiAobmV3UGFyZW50KSB7XHJcbiAgICAgICAgdmFyIG9yaWdpbmFsUGFyZW50ID0gdGhpcy5wYXJlbnQ7XHJcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBuZXdQYXJlbnQgfHwgbnVsbDtcclxuICAgICAgICB0aGlzLmhhc1BhcmVudCA9IHRoaXMucGFyZW50ICE9PSBudWxsO1xyXG4gICAgICAgIGlmIChuZXdQYXJlbnQucGFyZW50ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIG5ld1BhcmVudC5wYXJlbnQgPSBvcmlnaW5hbFBhcmVudDtcclxuICAgICAgICAgICAgbmV3UGFyZW50Lmhhc1BhcmVudCA9IG9yaWdpbmFsUGFyZW50ICE9PSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBWaWV3UmVzb3VyY2VzLnByb3RvdHlwZS5yZWxhdGl2ZVRvVmlldyA9IGZ1bmN0aW9uIChwYXRoKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlbGF0aXZlVG9GaWxlKHBhdGgsIHRoaXMudmlld1VybCk7XHJcbiAgICB9O1xyXG4gICAgVmlld1Jlc291cmNlcy5wcm90b3R5cGUucmVnaXN0ZXJFbGVtZW50ID0gZnVuY3Rpb24gKHRhZ05hbWUsIGJlaGF2aW9yKSB7XHJcbiAgICAgICAgcmVnaXN0ZXIodGhpcy5lbGVtZW50cywgdGFnTmFtZSwgYmVoYXZpb3IsICdhbiBFbGVtZW50Jyk7XHJcbiAgICB9O1xyXG4gICAgVmlld1Jlc291cmNlcy5wcm90b3R5cGUuZ2V0RWxlbWVudCA9IGZ1bmN0aW9uICh0YWdOYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudHNbdGFnTmFtZV0gfHwgKHRoaXMuaGFzUGFyZW50ID8gdGhpcy5wYXJlbnQuZ2V0RWxlbWVudCh0YWdOYW1lKSA6IG51bGwpO1xyXG4gICAgfTtcclxuICAgIFZpZXdSZXNvdXJjZXMucHJvdG90eXBlLm1hcEF0dHJpYnV0ZSA9IGZ1bmN0aW9uIChhdHRyaWJ1dGUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hdHRyaWJ1dGVNYXBbYXR0cmlidXRlXSB8fCAodGhpcy5oYXNQYXJlbnQgPyB0aGlzLnBhcmVudC5tYXBBdHRyaWJ1dGUoYXR0cmlidXRlKSA6IG51bGwpO1xyXG4gICAgfTtcclxuICAgIFZpZXdSZXNvdXJjZXMucHJvdG90eXBlLnJlZ2lzdGVyQXR0cmlidXRlID0gZnVuY3Rpb24gKGF0dHJpYnV0ZSwgYmVoYXZpb3IsIGtub3duQXR0cmlidXRlKSB7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVNYXBbYXR0cmlidXRlXSA9IGtub3duQXR0cmlidXRlO1xyXG4gICAgICAgIHJlZ2lzdGVyKHRoaXMuYXR0cmlidXRlcywgYXR0cmlidXRlLCBiZWhhdmlvciwgJ2FuIEF0dHJpYnV0ZScpO1xyXG4gICAgfTtcclxuICAgIFZpZXdSZXNvdXJjZXMucHJvdG90eXBlLmdldEF0dHJpYnV0ZSA9IGZ1bmN0aW9uIChhdHRyaWJ1dGUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW2F0dHJpYnV0ZV0gfHwgKHRoaXMuaGFzUGFyZW50ID8gdGhpcy5wYXJlbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSkgOiBudWxsKTtcclxuICAgIH07XHJcbiAgICBWaWV3UmVzb3VyY2VzLnByb3RvdHlwZS5yZWdpc3RlclZhbHVlQ29udmVydGVyID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlQ29udmVydGVyKSB7XHJcbiAgICAgICAgcmVnaXN0ZXIodGhpcy52YWx1ZUNvbnZlcnRlcnMsIG5hbWUsIHZhbHVlQ29udmVydGVyLCAnYSBWYWx1ZUNvbnZlcnRlcicpO1xyXG4gICAgfTtcclxuICAgIFZpZXdSZXNvdXJjZXMucHJvdG90eXBlLmdldFZhbHVlQ29udmVydGVyID0gZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUNvbnZlcnRlcnNbbmFtZV0gfHwgKHRoaXMuaGFzUGFyZW50ID8gdGhpcy5wYXJlbnQuZ2V0VmFsdWVDb252ZXJ0ZXIobmFtZSkgOiBudWxsKTtcclxuICAgIH07XHJcbiAgICBWaWV3UmVzb3VyY2VzLnByb3RvdHlwZS5yZWdpc3RlckJpbmRpbmdCZWhhdmlvciA9IGZ1bmN0aW9uIChuYW1lLCBiaW5kaW5nQmVoYXZpb3IpIHtcclxuICAgICAgICByZWdpc3Rlcih0aGlzLmJpbmRpbmdCZWhhdmlvcnMsIG5hbWUsIGJpbmRpbmdCZWhhdmlvciwgJ2EgQmluZGluZ0JlaGF2aW9yJyk7XHJcbiAgICB9O1xyXG4gICAgVmlld1Jlc291cmNlcy5wcm90b3R5cGUuZ2V0QmluZGluZ0JlaGF2aW9yID0gZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iaW5kaW5nQmVoYXZpb3JzW25hbWVdIHx8ICh0aGlzLmhhc1BhcmVudCA/IHRoaXMucGFyZW50LmdldEJpbmRpbmdCZWhhdmlvcihuYW1lKSA6IG51bGwpO1xyXG4gICAgfTtcclxuICAgIFZpZXdSZXNvdXJjZXMucHJvdG90eXBlLnJlZ2lzdGVyVmFsdWUgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcclxuICAgICAgICByZWdpc3Rlcih0aGlzLnZhbHVlcywgbmFtZSwgdmFsdWUsICdhIHZhbHVlJyk7XHJcbiAgICB9O1xyXG4gICAgVmlld1Jlc291cmNlcy5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1tuYW1lXSB8fCAodGhpcy5oYXNQYXJlbnQgPyB0aGlzLnBhcmVudC5nZXRWYWx1ZShuYW1lKSA6IG51bGwpO1xyXG4gICAgfTtcclxuICAgIFZpZXdSZXNvdXJjZXMucHJvdG90eXBlLmF1dG9SZWdpc3RlciA9IGZ1bmN0aW9uIChjb250YWluZXIsIGltcGwpIHtcclxuICAgICAgICB2YXIgcmVzb3VyY2VUeXBlTWV0YSA9IG1ldGFkYXRhLmdldE93bihtZXRhZGF0YS5yZXNvdXJjZSwgaW1wbCk7XHJcbiAgICAgICAgaWYgKHJlc291cmNlVHlwZU1ldGEpIHtcclxuICAgICAgICAgICAgaWYgKHJlc291cmNlVHlwZU1ldGEgaW5zdGFuY2VvZiBIdG1sQmVoYXZpb3JSZXNvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgVmlld1Jlc291cmNlcy5jb252ZW50aW9uKGltcGwsIHJlc291cmNlVHlwZU1ldGEpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc291cmNlVHlwZU1ldGEuYXR0cmlidXRlTmFtZSA9PT0gbnVsbCAmJiByZXNvdXJjZVR5cGVNZXRhLmVsZW1lbnROYW1lID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgSHRtbEJlaGF2aW9yUmVzb3VyY2UuY29udmVudGlvbihpbXBsLm5hbWUsIHJlc291cmNlVHlwZU1ldGEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHJlc291cmNlVHlwZU1ldGEuYXR0cmlidXRlTmFtZSA9PT0gbnVsbCAmJiByZXNvdXJjZVR5cGVNZXRhLmVsZW1lbnROYW1lID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VUeXBlTWV0YS5lbGVtZW50TmFtZSA9IF9oeXBoZW5hdGUoaW1wbC5uYW1lKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmVzb3VyY2VUeXBlTWV0YSA9IFZpZXdSZXNvdXJjZXMuY29udmVudGlvbihpbXBsKVxyXG4gICAgICAgICAgICAgICAgfHwgSHRtbEJlaGF2aW9yUmVzb3VyY2UuY29udmVudGlvbihpbXBsLm5hbWUpXHJcbiAgICAgICAgICAgICAgICB8fCBWYWx1ZUNvbnZlcnRlclJlc291cmNlLmNvbnZlbnRpb24oaW1wbC5uYW1lKVxyXG4gICAgICAgICAgICAgICAgfHwgQmluZGluZ0JlaGF2aW9yUmVzb3VyY2UuY29udmVudGlvbihpbXBsLm5hbWUpXHJcbiAgICAgICAgICAgICAgICB8fCBWaWV3RW5naW5lSG9va3NSZXNvdXJjZS5jb252ZW50aW9uKGltcGwubmFtZSk7XHJcbiAgICAgICAgICAgIGlmICghcmVzb3VyY2VUeXBlTWV0YSkge1xyXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VUeXBlTWV0YSA9IG5ldyBIdG1sQmVoYXZpb3JSZXNvdXJjZSgpO1xyXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VUeXBlTWV0YS5lbGVtZW50TmFtZSA9IF9oeXBoZW5hdGUoaW1wbC5uYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBtZXRhZGF0YS5kZWZpbmUobWV0YWRhdGEucmVzb3VyY2UsIHJlc291cmNlVHlwZU1ldGEsIGltcGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXNvdXJjZVR5cGVNZXRhLmluaXRpYWxpemUoY29udGFpbmVyLCBpbXBsKTtcclxuICAgICAgICByZXNvdXJjZVR5cGVNZXRhLnJlZ2lzdGVyKHRoaXMsIHVuZGVmaW5lZCk7XHJcbiAgICAgICAgcmV0dXJuIHJlc291cmNlVHlwZU1ldGE7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIFZpZXdSZXNvdXJjZXM7XHJcbn0oKSk7XG5cbnZhciB2aWV3U3RyYXRlZ3kgPSBwcm90b2NvbC5jcmVhdGUoJ2F1cmVsaWE6dmlldy1zdHJhdGVneScsIHtcclxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbiAodGFyZ2V0KSB7XHJcbiAgICAgICAgaWYgKCEodHlwZW9mIHRhcmdldC5sb2FkVmlld0ZhY3RvcnkgPT09ICdmdW5jdGlvbicpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnVmlldyBzdHJhdGVnaWVzIG11c3QgaW1wbGVtZW50OiBsb2FkVmlld0ZhY3Rvcnkodmlld0VuZ2luZTogVmlld0VuZ2luZSwgY29tcGlsZUluc3RydWN0aW9uOiBWaWV3Q29tcGlsZUluc3RydWN0aW9uLCBsb2FkQ29udGV4dD86IFJlc291cmNlTG9hZENvbnRleHQpOiBQcm9taXNlPFZpZXdGYWN0b3J5Pic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSxcclxuICAgIGNvbXBvc2U6IGZ1bmN0aW9uICh0YXJnZXQpIHtcclxuICAgICAgICBpZiAoISh0eXBlb2YgdGFyZ2V0Lm1ha2VSZWxhdGl2ZVRvID09PSAnZnVuY3Rpb24nKSkge1xyXG4gICAgICAgICAgICB0YXJnZXQubWFrZVJlbGF0aXZlVG8gPSBQTEFURk9STS5ub29wO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcbnZhciBSZWxhdGl2ZVZpZXdTdHJhdGVneSA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBSZWxhdGl2ZVZpZXdTdHJhdGVneShwYXRoKSB7XHJcbiAgICAgICAgdGhpcy5wYXRoID0gcGF0aDtcclxuICAgICAgICB0aGlzLmFic29sdXRlUGF0aCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBSZWxhdGl2ZVZpZXdTdHJhdGVneS5wcm90b3R5cGUubG9hZFZpZXdGYWN0b3J5ID0gZnVuY3Rpb24gKHZpZXdFbmdpbmUsIGNvbXBpbGVJbnN0cnVjdGlvbiwgbG9hZENvbnRleHQsIHRhcmdldCkge1xyXG4gICAgICAgIGlmICh0aGlzLmFic29sdXRlUGF0aCA9PT0gbnVsbCAmJiB0aGlzLm1vZHVsZUlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWJzb2x1dGVQYXRoID0gcmVsYXRpdmVUb0ZpbGUodGhpcy5wYXRoLCB0aGlzLm1vZHVsZUlkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29tcGlsZUluc3RydWN0aW9uLmFzc29jaWF0ZWRNb2R1bGVJZCA9IHRoaXMubW9kdWxlSWQ7XHJcbiAgICAgICAgcmV0dXJuIHZpZXdFbmdpbmUubG9hZFZpZXdGYWN0b3J5KHRoaXMuYWJzb2x1dGVQYXRoIHx8IHRoaXMucGF0aCwgY29tcGlsZUluc3RydWN0aW9uLCBsb2FkQ29udGV4dCwgdGFyZ2V0KTtcclxuICAgIH07XHJcbiAgICBSZWxhdGl2ZVZpZXdTdHJhdGVneS5wcm90b3R5cGUubWFrZVJlbGF0aXZlVG8gPSBmdW5jdGlvbiAoZmlsZSkge1xyXG4gICAgICAgIGlmICh0aGlzLmFic29sdXRlUGF0aCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmFic29sdXRlUGF0aCA9IHJlbGF0aXZlVG9GaWxlKHRoaXMucGF0aCwgZmlsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIFJlbGF0aXZlVmlld1N0cmF0ZWd5ID0gX19kZWNvcmF0ZShbXHJcbiAgICAgICAgdmlld1N0cmF0ZWd5KClcclxuICAgIF0sIFJlbGF0aXZlVmlld1N0cmF0ZWd5KTtcclxuICAgIHJldHVybiBSZWxhdGl2ZVZpZXdTdHJhdGVneTtcclxufSgpKTtcclxudmFyIENvbnZlbnRpb25hbFZpZXdTdHJhdGVneSA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBDb252ZW50aW9uYWxWaWV3U3RyYXRlZ3kodmlld0xvY2F0b3IsIG9yaWdpbikge1xyXG4gICAgICAgIHRoaXMubW9kdWxlSWQgPSBvcmlnaW4ubW9kdWxlSWQ7XHJcbiAgICAgICAgdGhpcy52aWV3VXJsID0gdmlld0xvY2F0b3IuY29udmVydE9yaWdpblRvVmlld1VybChvcmlnaW4pO1xyXG4gICAgfVxyXG4gICAgQ29udmVudGlvbmFsVmlld1N0cmF0ZWd5LnByb3RvdHlwZS5sb2FkVmlld0ZhY3RvcnkgPSBmdW5jdGlvbiAodmlld0VuZ2luZSwgY29tcGlsZUluc3RydWN0aW9uLCBsb2FkQ29udGV4dCwgdGFyZ2V0KSB7XHJcbiAgICAgICAgY29tcGlsZUluc3RydWN0aW9uLmFzc29jaWF0ZWRNb2R1bGVJZCA9IHRoaXMubW9kdWxlSWQ7XHJcbiAgICAgICAgcmV0dXJuIHZpZXdFbmdpbmUubG9hZFZpZXdGYWN0b3J5KHRoaXMudmlld1VybCwgY29tcGlsZUluc3RydWN0aW9uLCBsb2FkQ29udGV4dCwgdGFyZ2V0KTtcclxuICAgIH07XHJcbiAgICBDb252ZW50aW9uYWxWaWV3U3RyYXRlZ3kgPSBfX2RlY29yYXRlKFtcclxuICAgICAgICB2aWV3U3RyYXRlZ3koKVxyXG4gICAgXSwgQ29udmVudGlvbmFsVmlld1N0cmF0ZWd5KTtcclxuICAgIHJldHVybiBDb252ZW50aW9uYWxWaWV3U3RyYXRlZ3k7XHJcbn0oKSk7XHJcbnZhciBOb1ZpZXdTdHJhdGVneSA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBOb1ZpZXdTdHJhdGVneShkZXBlbmRlbmNpZXMsIGRlcGVuZGVuY3lCYXNlVXJsKSB7XHJcbiAgICAgICAgdGhpcy5kZXBlbmRlbmNpZXMgPSBkZXBlbmRlbmNpZXMgfHwgbnVsbDtcclxuICAgICAgICB0aGlzLmRlcGVuZGVuY3lCYXNlVXJsID0gZGVwZW5kZW5jeUJhc2VVcmwgfHwgJyc7XHJcbiAgICB9XHJcbiAgICBOb1ZpZXdTdHJhdGVneS5wcm90b3R5cGUubG9hZFZpZXdGYWN0b3J5ID0gZnVuY3Rpb24gKHZpZXdFbmdpbmUsIGNvbXBpbGVJbnN0cnVjdGlvbiwgbG9hZENvbnRleHQsIHRhcmdldCkge1xyXG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMuZW50cnk7XHJcbiAgICAgICAgdmFyIGRlcGVuZGVuY2llcyA9IHRoaXMuZGVwZW5kZW5jaWVzO1xyXG4gICAgICAgIGlmIChlbnRyeSAmJiBlbnRyeS5mYWN0b3J5SXNSZWFkeSkge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVudHJ5ID0gZW50cnkgPSBuZXcgVGVtcGxhdGVSZWdpc3RyeUVudHJ5KHRoaXMubW9kdWxlSWQgfHwgdGhpcy5kZXBlbmRlbmN5QmFzZVVybCk7XHJcbiAgICAgICAgZW50cnkuZGVwZW5kZW5jaWVzID0gW107XHJcbiAgICAgICAgZW50cnkudGVtcGxhdGVJc0xvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgaWYgKGRlcGVuZGVuY2llcyAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBkZXBlbmRlbmNpZXMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSBkZXBlbmRlbmNpZXNbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBjdXJyZW50ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW50cnkuYWRkRGVwZW5kZW5jeShjdXJyZW50KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGVudHJ5LmFkZERlcGVuZGVuY3koY3VycmVudC5mcm9tLCBjdXJyZW50LmFzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb21waWxlSW5zdHJ1Y3Rpb24uYXNzb2NpYXRlZE1vZHVsZUlkID0gdGhpcy5tb2R1bGVJZDtcclxuICAgICAgICByZXR1cm4gdmlld0VuZ2luZS5sb2FkVmlld0ZhY3RvcnkoZW50cnksIGNvbXBpbGVJbnN0cnVjdGlvbiwgbG9hZENvbnRleHQsIHRhcmdldCk7XHJcbiAgICB9O1xyXG4gICAgTm9WaWV3U3RyYXRlZ3kgPSBfX2RlY29yYXRlKFtcclxuICAgICAgICB2aWV3U3RyYXRlZ3koKVxyXG4gICAgXSwgTm9WaWV3U3RyYXRlZ3kpO1xyXG4gICAgcmV0dXJuIE5vVmlld1N0cmF0ZWd5O1xyXG59KCkpO1xyXG52YXIgVGVtcGxhdGVSZWdpc3RyeVZpZXdTdHJhdGVneSA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBUZW1wbGF0ZVJlZ2lzdHJ5Vmlld1N0cmF0ZWd5KG1vZHVsZUlkLCBlbnRyeSkge1xyXG4gICAgICAgIHRoaXMubW9kdWxlSWQgPSBtb2R1bGVJZDtcclxuICAgICAgICB0aGlzLmVudHJ5ID0gZW50cnk7XHJcbiAgICB9XHJcbiAgICBUZW1wbGF0ZVJlZ2lzdHJ5Vmlld1N0cmF0ZWd5LnByb3RvdHlwZS5sb2FkVmlld0ZhY3RvcnkgPSBmdW5jdGlvbiAodmlld0VuZ2luZSwgY29tcGlsZUluc3RydWN0aW9uLCBsb2FkQ29udGV4dCwgdGFyZ2V0KSB7XHJcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy5lbnRyeTtcclxuICAgICAgICBpZiAoZW50cnkuZmFjdG9yeUlzUmVhZHkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShlbnRyeS5mYWN0b3J5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29tcGlsZUluc3RydWN0aW9uLmFzc29jaWF0ZWRNb2R1bGVJZCA9IHRoaXMubW9kdWxlSWQ7XHJcbiAgICAgICAgcmV0dXJuIHZpZXdFbmdpbmUubG9hZFZpZXdGYWN0b3J5KGVudHJ5LCBjb21waWxlSW5zdHJ1Y3Rpb24sIGxvYWRDb250ZXh0LCB0YXJnZXQpO1xyXG4gICAgfTtcclxuICAgIFRlbXBsYXRlUmVnaXN0cnlWaWV3U3RyYXRlZ3kgPSBfX2RlY29yYXRlKFtcclxuICAgICAgICB2aWV3U3RyYXRlZ3koKVxyXG4gICAgXSwgVGVtcGxhdGVSZWdpc3RyeVZpZXdTdHJhdGVneSk7XHJcbiAgICByZXR1cm4gVGVtcGxhdGVSZWdpc3RyeVZpZXdTdHJhdGVneTtcclxufSgpKTtcclxudmFyIElubGluZVZpZXdTdHJhdGVneSA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBJbmxpbmVWaWV3U3RyYXRlZ3kobWFya3VwLCBkZXBlbmRlbmNpZXMsIGRlcGVuZGVuY3lCYXNlVXJsKSB7XHJcbiAgICAgICAgdGhpcy5tYXJrdXAgPSBtYXJrdXA7XHJcbiAgICAgICAgdGhpcy5kZXBlbmRlbmNpZXMgPSBkZXBlbmRlbmNpZXMgfHwgbnVsbDtcclxuICAgICAgICB0aGlzLmRlcGVuZGVuY3lCYXNlVXJsID0gZGVwZW5kZW5jeUJhc2VVcmwgfHwgJyc7XHJcbiAgICB9XHJcbiAgICBJbmxpbmVWaWV3U3RyYXRlZ3kucHJvdG90eXBlLmxvYWRWaWV3RmFjdG9yeSA9IGZ1bmN0aW9uICh2aWV3RW5naW5lLCBjb21waWxlSW5zdHJ1Y3Rpb24sIGxvYWRDb250ZXh0LCB0YXJnZXQpIHtcclxuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLmVudHJ5O1xyXG4gICAgICAgIHZhciBkZXBlbmRlbmNpZXMgPSB0aGlzLmRlcGVuZGVuY2llcztcclxuICAgICAgICBpZiAoZW50cnkgJiYgZW50cnkuZmFjdG9yeUlzUmVhZHkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShlbnRyeS5mYWN0b3J5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5lbnRyeSA9IGVudHJ5ID0gbmV3IFRlbXBsYXRlUmVnaXN0cnlFbnRyeSh0aGlzLm1vZHVsZUlkIHx8IHRoaXMuZGVwZW5kZW5jeUJhc2VVcmwpO1xyXG4gICAgICAgIGVudHJ5LnRlbXBsYXRlID0gRE9NLmNyZWF0ZVRlbXBsYXRlRnJvbU1hcmt1cCh0aGlzLm1hcmt1cCk7XHJcbiAgICAgICAgaWYgKGRlcGVuZGVuY2llcyAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBkZXBlbmRlbmNpZXMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSBkZXBlbmRlbmNpZXNbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBjdXJyZW50ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW50cnkuYWRkRGVwZW5kZW5jeShjdXJyZW50KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGVudHJ5LmFkZERlcGVuZGVuY3koY3VycmVudC5mcm9tLCBjdXJyZW50LmFzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb21waWxlSW5zdHJ1Y3Rpb24uYXNzb2NpYXRlZE1vZHVsZUlkID0gdGhpcy5tb2R1bGVJZDtcclxuICAgICAgICByZXR1cm4gdmlld0VuZ2luZS5sb2FkVmlld0ZhY3RvcnkoZW50cnksIGNvbXBpbGVJbnN0cnVjdGlvbiwgbG9hZENvbnRleHQsIHRhcmdldCk7XHJcbiAgICB9O1xyXG4gICAgSW5saW5lVmlld1N0cmF0ZWd5ID0gX19kZWNvcmF0ZShbXHJcbiAgICAgICAgdmlld1N0cmF0ZWd5KClcclxuICAgIF0sIElubGluZVZpZXdTdHJhdGVneSk7XHJcbiAgICByZXR1cm4gSW5saW5lVmlld1N0cmF0ZWd5O1xyXG59KCkpO1xyXG52YXIgU3RhdGljVmlld1N0cmF0ZWd5ID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIFN0YXRpY1ZpZXdTdHJhdGVneShjb25maWcpIHtcclxuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycgfHwgKGNvbmZpZyBpbnN0YW5jZW9mIERPTS5FbGVtZW50ICYmIGNvbmZpZy50YWdOYW1lID09PSAnVEVNUExBVEUnKSkge1xyXG4gICAgICAgICAgICBjb25maWcgPSB7XHJcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogY29uZmlnXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudGVtcGxhdGUgPSBjb25maWcudGVtcGxhdGU7XHJcbiAgICAgICAgdGhpcy5kZXBlbmRlbmNpZXMgPSBjb25maWcuZGVwZW5kZW5jaWVzIHx8IFtdO1xyXG4gICAgICAgIHRoaXMuZmFjdG9yeUlzUmVhZHkgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm9uUmVhZHkgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubW9kdWxlSWQgPSAndW5kZWZpbmVkJztcclxuICAgIH1cclxuICAgIFN0YXRpY1ZpZXdTdHJhdGVneS5wcm90b3R5cGUubG9hZFZpZXdGYWN0b3J5ID0gZnVuY3Rpb24gKHZpZXdFbmdpbmUsIGNvbXBpbGVJbnN0cnVjdGlvbiwgbG9hZENvbnRleHQsIHRhcmdldCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgaWYgKHRoaXMuZmFjdG9yeUlzUmVhZHkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmZhY3RvcnkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgJGRlcHMgPSB0aGlzLmRlcGVuZGVuY2llcztcclxuICAgICAgICB2YXIgZGVwcyA9IHR5cGVvZiAkZGVwcyA9PT0gJ2Z1bmN0aW9uJyA/ICRkZXBzKCkgOiAkZGVwcztcclxuICAgICAgICBkZXBzID0gZGVwcyA/IGRlcHMgOiBbXTtcclxuICAgICAgICBkZXBzID0gQXJyYXkuaXNBcnJheShkZXBzKSA/IGRlcHMgOiBbZGVwc107XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGRlcHMpLnRoZW4oZnVuY3Rpb24gKGRlcGVuZGVuY2llcykge1xyXG4gICAgICAgICAgICB2YXIgY29udGFpbmVyID0gdmlld0VuZ2luZS5jb250YWluZXI7XHJcbiAgICAgICAgICAgIHZhciBhcHBSZXNvdXJjZXMgPSB2aWV3RW5naW5lLmFwcFJlc291cmNlcztcclxuICAgICAgICAgICAgdmFyIHZpZXdDb21waWxlciA9IHZpZXdFbmdpbmUudmlld0NvbXBpbGVyO1xyXG4gICAgICAgICAgICB2YXIgdmlld1Jlc291cmNlcyA9IG5ldyBWaWV3UmVzb3VyY2VzKGFwcFJlc291cmNlcyk7XHJcbiAgICAgICAgICAgIHZhciByZXNvdXJjZTtcclxuICAgICAgICAgICAgdmFyIGVsRGVwcyA9IFtdO1xyXG4gICAgICAgICAgICBpZiAodGFyZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICB2aWV3UmVzb3VyY2VzLmF1dG9SZWdpc3Rlcihjb250YWluZXIsIHRhcmdldCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBkZXBlbmRlbmNpZXNfMSA9IGRlcGVuZGVuY2llczsgX2kgPCBkZXBlbmRlbmNpZXNfMS5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBkZXAgPSBkZXBlbmRlbmNpZXNfMVtfaV07XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRlcCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlID0gdmlld1Jlc291cmNlcy5hdXRvUmVnaXN0ZXIoY29udGFpbmVyLCBkZXApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNvdXJjZS5lbGVtZW50TmFtZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbERlcHMucHVzaChyZXNvdXJjZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZGVwICYmIHR5cGVvZiBkZXAgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGRlcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXhwb3J0ZWQgPSBkZXBba2V5XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRlZCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UgPSB2aWV3UmVzb3VyY2VzLmF1dG9SZWdpc3Rlcihjb250YWluZXIsIGV4cG9ydGVkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNvdXJjZS5lbGVtZW50TmFtZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsRGVwcy5wdXNoKHJlc291cmNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImRlcGVuZGVuY3kgbmVpdGhlciBmdW5jdGlvbiBub3Igb2JqZWN0LiBSZWNlaXZlZDogXFxcIlwiLmNvbmNhdCh0eXBlb2YgZGVwLCBcIlxcXCJcIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChlbERlcHMubWFwKGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gZWwubG9hZChjb250YWluZXIsIGVsLnRhcmdldCk7IH0pKS50aGVuKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHZhciBmYWN0b3J5ID0gX3RoaXMudGVtcGxhdGUgIT09IG51bGxcclxuICAgICAgICAgICAgICAgICAgICA/IHZpZXdDb21waWxlci5jb21waWxlKF90aGlzLnRlbXBsYXRlLCB2aWV3UmVzb3VyY2VzLCBjb21waWxlSW5zdHJ1Y3Rpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuZmFjdG9yeUlzUmVhZHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuZmFjdG9yeSA9IGZhY3Rvcnk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFjdG9yeTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgU3RhdGljVmlld1N0cmF0ZWd5ID0gX19kZWNvcmF0ZShbXHJcbiAgICAgICAgdmlld1N0cmF0ZWd5KClcclxuICAgIF0sIFN0YXRpY1ZpZXdTdHJhdGVneSk7XHJcbiAgICByZXR1cm4gU3RhdGljVmlld1N0cmF0ZWd5O1xyXG59KCkpO1xuXG5mdW5jdGlvbiByZW1vdmUodmlld1Nsb3QsIHByZXZpb3VzKSB7XHJcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShwcmV2aW91cylcclxuICAgICAgICA/IHZpZXdTbG90LnJlbW92ZU1hbnkocHJldmlvdXMsIHRydWUpXHJcbiAgICAgICAgOiB2aWV3U2xvdC5yZW1vdmUocHJldmlvdXMsIHRydWUpO1xyXG59XHJcbnZhciBTd2FwU3RyYXRlZ2llcyA9IHtcclxuICAgIGJlZm9yZTogZnVuY3Rpb24gKHZpZXdTbG90LCBwcmV2aW91cywgY2FsbGJhY2spIHtcclxuICAgICAgICByZXR1cm4gKHByZXZpb3VzID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgID8gY2FsbGJhY2soKVxyXG4gICAgICAgICAgICA6IGNhbGxiYWNrKCkudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiByZW1vdmUodmlld1Nsb3QsIHByZXZpb3VzKTsgfSk7XHJcbiAgICB9LFxyXG4gICAgd2l0aDogZnVuY3Rpb24gKHZpZXdTbG90LCBwcmV2aW91cywgY2FsbGJhY2spIHtcclxuICAgICAgICByZXR1cm4gKHByZXZpb3VzID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgID8gY2FsbGJhY2soKVxyXG4gICAgICAgICAgICA6IFByb21pc2UuYWxsKFtyZW1vdmUodmlld1Nsb3QsIHByZXZpb3VzKSwgY2FsbGJhY2soKV0pO1xyXG4gICAgfSxcclxuICAgIGFmdGVyOiBmdW5jdGlvbiAodmlld1Nsb3QsIHByZXZpb3VzLCBjYWxsYmFjaykge1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmlld1Nsb3QucmVtb3ZlQWxsKHRydWUpKS50aGVuKGNhbGxiYWNrKTtcclxuICAgIH1cclxufTtcblxuZnVuY3Rpb24gdHJ5QWN0aXZhdGVWaWV3TW9kZWwoY29udGV4dCkge1xyXG4gICAgaWYgKGNvbnRleHQuc2tpcEFjdGl2YXRpb24gfHwgdHlwZW9mIGNvbnRleHQudmlld01vZGVsLmFjdGl2YXRlICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbnRleHQudmlld01vZGVsLmFjdGl2YXRlKGNvbnRleHQubW9kZWwpIHx8IFByb21pc2UucmVzb2x2ZSgpO1xyXG59XHJcbnZhciBDb21wb3NpdGlvbkVuZ2luZSA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBDb21wb3NpdGlvbkVuZ2luZSh2aWV3RW5naW5lLCB2aWV3TG9jYXRvcikge1xyXG4gICAgICAgIHRoaXMudmlld0VuZ2luZSA9IHZpZXdFbmdpbmU7XHJcbiAgICAgICAgdGhpcy52aWV3TG9jYXRvciA9IHZpZXdMb2NhdG9yO1xyXG4gICAgfVxyXG4gICAgQ29tcG9zaXRpb25FbmdpbmUucHJvdG90eXBlLl9zd2FwID0gZnVuY3Rpb24gKGNvbnRleHQsIHZpZXcpIHtcclxuICAgICAgICB2YXIgc3dhcFN0cmF0ZWd5ID0gU3dhcFN0cmF0ZWdpZXNbY29udGV4dC5zd2FwT3JkZXJdIHx8IFN3YXBTdHJhdGVnaWVzLmFmdGVyO1xyXG4gICAgICAgIHZhciBwcmV2aW91c1ZpZXdzID0gY29udGV4dC52aWV3U2xvdC5jaGlsZHJlbi5zbGljZSgpO1xyXG4gICAgICAgIHJldHVybiBzd2FwU3RyYXRlZ3koY29udGV4dC52aWV3U2xvdCwgcHJldmlvdXNWaWV3cywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNvbnRleHQudmlld1Nsb3QuYWRkKHZpZXcpKS50aGVuKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmN1cnJlbnRDb250cm9sbGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jdXJyZW50Q29udHJvbGxlci51bmJpbmQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChjb250ZXh0LmNvbXBvc2l0aW9uVHJhbnNhY3Rpb25Ob3RpZmllcikge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5jb21wb3NpdGlvblRyYW5zYWN0aW9uTm90aWZpZXIuZG9uZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgQ29tcG9zaXRpb25FbmdpbmUucHJvdG90eXBlLl9jcmVhdGVDb250cm9sbGVyQW5kU3dhcCA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVDb250cm9sbGVyKGNvbnRleHQpLnRoZW4oZnVuY3Rpb24gKGNvbnRyb2xsZXIpIHtcclxuICAgICAgICAgICAgaWYgKGNvbnRleHQuY29tcG9zaXRpb25UcmFuc2FjdGlvbk93bmVyc2hpcFRva2VuKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5jb21wb3NpdGlvblRyYW5zYWN0aW9uT3duZXJzaGlwVG9rZW5cclxuICAgICAgICAgICAgICAgICAgICAud2FpdEZvckNvbXBvc2l0aW9uQ29tcGxldGUoKVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLmF1dG9tYXRlKGNvbnRleHQub3ZlcnJpZGVDb250ZXh0LCBjb250ZXh0Lm93bmluZ1ZpZXcpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5fc3dhcChjb250ZXh0LCBjb250cm9sbGVyLnZpZXcpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiBjb250cm9sbGVyOyB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb250cm9sbGVyLmF1dG9tYXRlKGNvbnRleHQub3ZlcnJpZGVDb250ZXh0LCBjb250ZXh0Lm93bmluZ1ZpZXcpO1xyXG4gICAgICAgICAgICByZXR1cm4gX3RoaXMuX3N3YXAoY29udGV4dCwgY29udHJvbGxlci52aWV3KS50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbnRyb2xsZXI7IH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIENvbXBvc2l0aW9uRW5naW5lLnByb3RvdHlwZS5jcmVhdGVDb250cm9sbGVyID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHZhciBjaGlsZENvbnRhaW5lcjtcclxuICAgICAgICB2YXIgdmlld01vZGVsO1xyXG4gICAgICAgIHZhciB2aWV3TW9kZWxSZXNvdXJjZTtcclxuICAgICAgICB2YXIgbTtcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgICAgICAgICAuZW5zdXJlVmlld01vZGVsKGNvbnRleHQpXHJcbiAgICAgICAgICAgIC50aGVuKHRyeUFjdGl2YXRlVmlld01vZGVsKVxyXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGNoaWxkQ29udGFpbmVyID0gY29udGV4dC5jaGlsZENvbnRhaW5lcjtcclxuICAgICAgICAgICAgdmlld01vZGVsID0gY29udGV4dC52aWV3TW9kZWw7XHJcbiAgICAgICAgICAgIHZpZXdNb2RlbFJlc291cmNlID0gY29udGV4dC52aWV3TW9kZWxSZXNvdXJjZTtcclxuICAgICAgICAgICAgbSA9IHZpZXdNb2RlbFJlc291cmNlLm1ldGFkYXRhO1xyXG4gICAgICAgICAgICB2YXIgdmlld1N0cmF0ZWd5ID0gX3RoaXMudmlld0xvY2F0b3IuZ2V0Vmlld1N0cmF0ZWd5KGNvbnRleHQudmlldyB8fCB2aWV3TW9kZWwpO1xyXG4gICAgICAgICAgICBpZiAoY29udGV4dC52aWV3UmVzb3VyY2VzKSB7XHJcbiAgICAgICAgICAgICAgICB2aWV3U3RyYXRlZ3kubWFrZVJlbGF0aXZlVG8oY29udGV4dC52aWV3UmVzb3VyY2VzLnZpZXdVcmwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBtLmxvYWQoY2hpbGRDb250YWluZXIsIHZpZXdNb2RlbFJlc291cmNlLnZhbHVlLCBudWxsLCB2aWV3U3RyYXRlZ3ksIHRydWUpO1xyXG4gICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHZpZXdGYWN0b3J5KSB7IHJldHVybiBtLmNyZWF0ZShjaGlsZENvbnRhaW5lciwgQmVoYXZpb3JJbnN0cnVjdGlvbi5keW5hbWljKGNvbnRleHQuaG9zdCwgdmlld01vZGVsLCB2aWV3RmFjdG9yeSkpOyB9KTtcclxuICAgIH07XHJcbiAgICBDb21wb3NpdGlvbkVuZ2luZS5wcm90b3R5cGUuZW5zdXJlVmlld01vZGVsID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcclxuICAgICAgICB2YXIgY2hpbGRDb250YWluZXIgPSBjb250ZXh0LmNoaWxkQ29udGFpbmVyID0gKGNvbnRleHQuY2hpbGRDb250YWluZXIgfHwgY29udGV4dC5jb250YWluZXIuY3JlYXRlQ2hpbGQoKSk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBjb250ZXh0LnZpZXdNb2RlbCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgY29udGV4dC52aWV3TW9kZWwgPSBjb250ZXh0LnZpZXdSZXNvdXJjZXNcclxuICAgICAgICAgICAgICAgID8gY29udGV4dC52aWV3UmVzb3VyY2VzLnJlbGF0aXZlVG9WaWV3KGNvbnRleHQudmlld01vZGVsKVxyXG4gICAgICAgICAgICAgICAgOiBjb250ZXh0LnZpZXdNb2RlbDtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmlld0VuZ2luZS5pbXBvcnRWaWV3TW9kZWxSZXNvdXJjZShjb250ZXh0LnZpZXdNb2RlbCkudGhlbihmdW5jdGlvbiAodmlld01vZGVsUmVzb3VyY2UpIHtcclxuICAgICAgICAgICAgICAgIGNoaWxkQ29udGFpbmVyLmF1dG9SZWdpc3Rlcih2aWV3TW9kZWxSZXNvdXJjZS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5ob3N0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRDb250YWluZXIucmVnaXN0ZXJJbnN0YW5jZShET00uRWxlbWVudCwgY29udGV4dC5ob3N0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnRleHQudmlld01vZGVsID0gY2hpbGRDb250YWluZXIudmlld01vZGVsID0gY2hpbGRDb250YWluZXIuZ2V0KHZpZXdNb2RlbFJlc291cmNlLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQudmlld01vZGVsUmVzb3VyY2UgPSB2aWV3TW9kZWxSZXNvdXJjZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGN0b3IgPSBjb250ZXh0LnZpZXdNb2RlbC5jb25zdHJ1Y3RvcjtcclxuICAgICAgICB2YXIgaXNDbGFzcyA9IHR5cGVvZiBjb250ZXh0LnZpZXdNb2RlbCA9PT0gJ2Z1bmN0aW9uJztcclxuICAgICAgICBpZiAoaXNDbGFzcykge1xyXG4gICAgICAgICAgICBjdG9yID0gY29udGV4dC52aWV3TW9kZWw7XHJcbiAgICAgICAgICAgIGNoaWxkQ29udGFpbmVyLmF1dG9SZWdpc3RlcihjdG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG0gPSBtZXRhZGF0YS5nZXRPckNyZWF0ZU93bihtZXRhZGF0YS5yZXNvdXJjZSwgSHRtbEJlaGF2aW9yUmVzb3VyY2UsIGN0b3IpO1xyXG4gICAgICAgIG0uZWxlbWVudE5hbWUgPSBtLmVsZW1lbnROYW1lIHx8ICdkeW5hbWljLWVsZW1lbnQnO1xyXG4gICAgICAgIG0uaW5pdGlhbGl6ZShpc0NsYXNzID8gY2hpbGRDb250YWluZXIgOiAoY29udGV4dC5jb250YWluZXIgfHwgY2hpbGRDb250YWluZXIpLCBjdG9yKTtcclxuICAgICAgICBjb250ZXh0LnZpZXdNb2RlbFJlc291cmNlID0geyBtZXRhZGF0YTogbSwgdmFsdWU6IGN0b3IgfTtcclxuICAgICAgICBpZiAoY29udGV4dC5ob3N0KSB7XHJcbiAgICAgICAgICAgIGNoaWxkQ29udGFpbmVyLnJlZ2lzdGVySW5zdGFuY2UoRE9NLkVsZW1lbnQsIGNvbnRleHQuaG9zdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNoaWxkQ29udGFpbmVyLnZpZXdNb2RlbCA9IGNvbnRleHQudmlld01vZGVsID0gaXNDbGFzcyA/IGNoaWxkQ29udGFpbmVyLmdldChjdG9yKSA6IGNvbnRleHQudmlld01vZGVsO1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY29udGV4dCk7XHJcbiAgICB9O1xyXG4gICAgQ29tcG9zaXRpb25FbmdpbmUucHJvdG90eXBlLmNvbXBvc2UgPSBmdW5jdGlvbiAoY29udGV4dCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgY29udGV4dC5jaGlsZENvbnRhaW5lciA9IGNvbnRleHQuY2hpbGRDb250YWluZXIgfHwgY29udGV4dC5jb250YWluZXIuY3JlYXRlQ2hpbGQoKTtcclxuICAgICAgICBjb250ZXh0LnZpZXcgPSB0aGlzLnZpZXdMb2NhdG9yLmdldFZpZXdTdHJhdGVneShjb250ZXh0LnZpZXcpO1xyXG4gICAgICAgIHZhciB0cmFuc2FjdGlvbiA9IGNvbnRleHQuY2hpbGRDb250YWluZXIuZ2V0KENvbXBvc2l0aW9uVHJhbnNhY3Rpb24pO1xyXG4gICAgICAgIHZhciBjb21wb3NpdGlvblRyYW5zYWN0aW9uT3duZXJzaGlwVG9rZW4gPSB0cmFuc2FjdGlvbi50cnlDYXB0dXJlKCk7XHJcbiAgICAgICAgaWYgKGNvbXBvc2l0aW9uVHJhbnNhY3Rpb25Pd25lcnNoaXBUb2tlbikge1xyXG4gICAgICAgICAgICBjb250ZXh0LmNvbXBvc2l0aW9uVHJhbnNhY3Rpb25Pd25lcnNoaXBUb2tlbiA9IGNvbXBvc2l0aW9uVHJhbnNhY3Rpb25Pd25lcnNoaXBUb2tlbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnRleHQuY29tcG9zaXRpb25UcmFuc2FjdGlvbk5vdGlmaWVyID0gdHJhbnNhY3Rpb24uZW5saXN0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb250ZXh0LnZpZXdNb2RlbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY3JlYXRlQ29udHJvbGxlckFuZFN3YXAoY29udGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGNvbnRleHQudmlldykge1xyXG4gICAgICAgICAgICBpZiAoY29udGV4dC52aWV3UmVzb3VyY2VzKSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LnZpZXcubWFrZVJlbGF0aXZlVG8oY29udGV4dC52aWV3UmVzb3VyY2VzLnZpZXdVcmwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LnZpZXcubG9hZFZpZXdGYWN0b3J5KHRoaXMudmlld0VuZ2luZSwgbmV3IFZpZXdDb21waWxlSW5zdHJ1Y3Rpb24oKSkudGhlbihmdW5jdGlvbiAodmlld0ZhY3RvcnkpIHtcclxuICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB2aWV3RmFjdG9yeS5jcmVhdGUoY29udGV4dC5jaGlsZENvbnRhaW5lcik7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQuYmluZChjb250ZXh0LmJpbmRpbmdDb250ZXh0LCBjb250ZXh0Lm92ZXJyaWRlQ29udGV4dCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5jb21wb3NpdGlvblRyYW5zYWN0aW9uT3duZXJzaGlwVG9rZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5jb21wb3NpdGlvblRyYW5zYWN0aW9uT3duZXJzaGlwVG9rZW4ud2FpdEZvckNvbXBvc2l0aW9uQ29tcGxldGUoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5fc3dhcChjb250ZXh0LCByZXN1bHQpOyB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiByZXN1bHQ7IH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLl9zd2FwKGNvbnRleHQsIHJlc3VsdCkudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiByZXN1bHQ7IH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY29udGV4dC52aWV3U2xvdCkge1xyXG4gICAgICAgICAgICBjb250ZXh0LnZpZXdTbG90LnJlbW92ZUFsbCgpO1xyXG4gICAgICAgICAgICBpZiAoY29udGV4dC5jb21wb3NpdGlvblRyYW5zYWN0aW9uTm90aWZpZXIpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQuY29tcG9zaXRpb25UcmFuc2FjdGlvbk5vdGlmaWVyLmRvbmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xyXG4gICAgfTtcclxuICAgIENvbXBvc2l0aW9uRW5naW5lID0gX19kZWNvcmF0ZShbXHJcbiAgICAgICAgaW5qZWN0KFZpZXdFbmdpbmUsIFZpZXdMb2NhdG9yKVxyXG4gICAgXSwgQ29tcG9zaXRpb25FbmdpbmUpO1xyXG4gICAgcmV0dXJuIENvbXBvc2l0aW9uRW5naW5lO1xyXG59KCkpO1xuXG52YXIgYW5pbWF0aW9uRXZlbnQgPSB7XHJcbiAgICBlbnRlckJlZ2luOiAnYW5pbWF0aW9uOmVudGVyOmJlZ2luJyxcclxuICAgIGVudGVyQWN0aXZlOiAnYW5pbWF0aW9uOmVudGVyOmFjdGl2ZScsXHJcbiAgICBlbnRlckRvbmU6ICdhbmltYXRpb246ZW50ZXI6ZG9uZScsXHJcbiAgICBlbnRlclRpbWVvdXQ6ICdhbmltYXRpb246ZW50ZXI6dGltZW91dCcsXHJcbiAgICBsZWF2ZUJlZ2luOiAnYW5pbWF0aW9uOmxlYXZlOmJlZ2luJyxcclxuICAgIGxlYXZlQWN0aXZlOiAnYW5pbWF0aW9uOmxlYXZlOmFjdGl2ZScsXHJcbiAgICBsZWF2ZURvbmU6ICdhbmltYXRpb246bGVhdmU6ZG9uZScsXHJcbiAgICBsZWF2ZVRpbWVvdXQ6ICdhbmltYXRpb246bGVhdmU6dGltZW91dCcsXHJcbiAgICBzdGFnZ2VyTmV4dDogJ2FuaW1hdGlvbjpzdGFnZ2VyOm5leHQnLFxyXG4gICAgcmVtb3ZlQ2xhc3NCZWdpbjogJ2FuaW1hdGlvbjpyZW1vdmUtY2xhc3M6YmVnaW4nLFxyXG4gICAgcmVtb3ZlQ2xhc3NBY3RpdmU6ICdhbmltYXRpb246cmVtb3ZlLWNsYXNzOmFjdGl2ZScsXHJcbiAgICByZW1vdmVDbGFzc0RvbmU6ICdhbmltYXRpb246cmVtb3ZlLWNsYXNzOmRvbmUnLFxyXG4gICAgcmVtb3ZlQ2xhc3NUaW1lb3V0OiAnYW5pbWF0aW9uOnJlbW92ZS1jbGFzczp0aW1lb3V0JyxcclxuICAgIGFkZENsYXNzQmVnaW46ICdhbmltYXRpb246YWRkLWNsYXNzOmJlZ2luJyxcclxuICAgIGFkZENsYXNzQWN0aXZlOiAnYW5pbWF0aW9uOmFkZC1jbGFzczphY3RpdmUnLFxyXG4gICAgYWRkQ2xhc3NEb25lOiAnYW5pbWF0aW9uOmFkZC1jbGFzczpkb25lJyxcclxuICAgIGFkZENsYXNzVGltZW91dDogJ2FuaW1hdGlvbjphZGQtY2xhc3M6dGltZW91dCcsXHJcbiAgICBhbmltYXRlQmVnaW46ICdhbmltYXRpb246YW5pbWF0ZTpiZWdpbicsXHJcbiAgICBhbmltYXRlQWN0aXZlOiAnYW5pbWF0aW9uOmFuaW1hdGU6YWN0aXZlJyxcclxuICAgIGFuaW1hdGVEb25lOiAnYW5pbWF0aW9uOmFuaW1hdGU6ZG9uZScsXHJcbiAgICBhbmltYXRlVGltZW91dDogJ2FuaW1hdGlvbjphbmltYXRlOnRpbWVvdXQnLFxyXG4gICAgc2VxdWVuY2VCZWdpbjogJ2FuaW1hdGlvbjpzZXF1ZW5jZTpiZWdpbicsXHJcbiAgICBzZXF1ZW5jZURvbmU6ICdhbmltYXRpb246c2VxdWVuY2U6ZG9uZSdcclxufTtcblxuZnVuY3Rpb24gY3JlYXRlQ2hpbGRPYnNlcnZlckRlY29yYXRvcihzZWxlY3Rvck9yQ29uZmlnLCBhbGwpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IpIHtcclxuICAgICAgICB2YXIgYWN0dWFsVGFyZ2V0ID0gdHlwZW9mIGtleSA9PT0gJ3N0cmluZycgPyB0YXJnZXQuY29uc3RydWN0b3IgOiB0YXJnZXQ7XHJcbiAgICAgICAgdmFyIHIgPSBtZXRhZGF0YS5nZXRPckNyZWF0ZU93bihtZXRhZGF0YS5yZXNvdXJjZSwgSHRtbEJlaGF2aW9yUmVzb3VyY2UsIGFjdHVhbFRhcmdldCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBzZWxlY3Rvck9yQ29uZmlnID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBzZWxlY3Rvck9yQ29uZmlnID0ge1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6IHNlbGVjdG9yT3JDb25maWcsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBrZXlcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGRlc2NyaXB0b3IpIHtcclxuICAgICAgICAgICAgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2VsZWN0b3JPckNvbmZpZy5hbGwgPSBhbGw7XHJcbiAgICAgICAgci5hZGRDaGlsZEJpbmRpbmcobmV3IENoaWxkT2JzZXJ2ZXIoc2VsZWN0b3JPckNvbmZpZykpO1xyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBjaGlsZHJlbihzZWxlY3Rvck9yQ29uZmlnKSB7XHJcbiAgICByZXR1cm4gY3JlYXRlQ2hpbGRPYnNlcnZlckRlY29yYXRvcihzZWxlY3Rvck9yQ29uZmlnLCB0cnVlKTtcclxufVxyXG5mdW5jdGlvbiBjaGlsZChzZWxlY3Rvck9yQ29uZmlnKSB7XHJcbiAgICByZXR1cm4gY3JlYXRlQ2hpbGRPYnNlcnZlckRlY29yYXRvcihzZWxlY3Rvck9yQ29uZmlnLCBmYWxzZSk7XHJcbn1cclxudmFyIENoaWxkT2JzZXJ2ZXIgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gQ2hpbGRPYnNlcnZlcihjb25maWcpIHtcclxuICAgICAgICB0aGlzLm5hbWUgPSBjb25maWcubmFtZTtcclxuICAgICAgICB0aGlzLmNoYW5nZUhhbmRsZXIgPSBjb25maWcuY2hhbmdlSGFuZGxlciB8fCB0aGlzLm5hbWUgKyAnQ2hhbmdlZCc7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RvciA9IGNvbmZpZy5zZWxlY3RvcjtcclxuICAgICAgICB0aGlzLmFsbCA9IGNvbmZpZy5hbGw7XHJcbiAgICB9XHJcbiAgICBDaGlsZE9ic2VydmVyLnByb3RvdHlwZS5jcmVhdGUgPSBmdW5jdGlvbiAodmlld0hvc3QsIHZpZXdNb2RlbCwgY29udHJvbGxlcikge1xyXG4gICAgICAgIHJldHVybiBuZXcgQ2hpbGRPYnNlcnZlckJpbmRlcih0aGlzLnNlbGVjdG9yLCB2aWV3SG9zdCwgdGhpcy5uYW1lLCB2aWV3TW9kZWwsIGNvbnRyb2xsZXIsIHRoaXMuY2hhbmdlSGFuZGxlciwgdGhpcy5hbGwpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBDaGlsZE9ic2VydmVyO1xyXG59KCkpO1xyXG52YXIgbm9NdXRhdGlvbnMgPSBbXTtcclxuZnVuY3Rpb24gdHJhY2tNdXRhdGlvbihncm91cGVkTXV0YXRpb25zLCBiaW5kZXIsIHJlY29yZCkge1xyXG4gICAgdmFyIG11dGF0aW9ucyA9IGdyb3VwZWRNdXRhdGlvbnMuZ2V0KGJpbmRlcik7XHJcbiAgICBpZiAoIW11dGF0aW9ucykge1xyXG4gICAgICAgIG11dGF0aW9ucyA9IFtdO1xyXG4gICAgICAgIGdyb3VwZWRNdXRhdGlvbnMuc2V0KGJpbmRlciwgbXV0YXRpb25zKTtcclxuICAgIH1cclxuICAgIG11dGF0aW9ucy5wdXNoKHJlY29yZCk7XHJcbn1cclxuZnVuY3Rpb24gb25DaGlsZENoYW5nZShtdXRhdGlvbnMsIG9ic2VydmVyKSB7XHJcbiAgICB2YXIgYmluZGVycyA9IG9ic2VydmVyLmJpbmRlcnM7XHJcbiAgICB2YXIgYmluZGVyc0xlbmd0aCA9IGJpbmRlcnMubGVuZ3RoO1xyXG4gICAgdmFyIGdyb3VwZWRNdXRhdGlvbnMgPSBuZXcgTWFwKCk7XHJcbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBtdXRhdGlvbnMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xyXG4gICAgICAgIHZhciByZWNvcmQgPSBtdXRhdGlvbnNbaV07XHJcbiAgICAgICAgdmFyIGFkZGVkID0gcmVjb3JkLmFkZGVkTm9kZXM7XHJcbiAgICAgICAgdmFyIHJlbW92ZWQgPSByZWNvcmQucmVtb3ZlZE5vZGVzO1xyXG4gICAgICAgIGZvciAodmFyIGogPSAwLCBqaiA9IHJlbW92ZWQubGVuZ3RoOyBqIDwgamo7ICsraikge1xyXG4gICAgICAgICAgICB2YXIgbm9kZSA9IHJlbW92ZWRbal07XHJcbiAgICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGJpbmRlcnNMZW5ndGg7ICsraykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBiaW5kZXIgPSBiaW5kZXJzW2tdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChiaW5kZXIub25SZW1vdmUobm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2tNdXRhdGlvbihncm91cGVkTXV0YXRpb25zLCBiaW5kZXIsIHJlY29yZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIGogPSAwLCBqaiA9IGFkZGVkLmxlbmd0aDsgaiA8IGpqOyArK2opIHtcclxuICAgICAgICAgICAgdmFyIG5vZGUgPSBhZGRlZFtqXTtcclxuICAgICAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgYmluZGVyc0xlbmd0aDsgKytrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGJpbmRlciA9IGJpbmRlcnNba107XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJpbmRlci5vbkFkZChub2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFja011dGF0aW9uKGdyb3VwZWRNdXRhdGlvbnMsIGJpbmRlciwgcmVjb3JkKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBncm91cGVkTXV0YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKG11dGF0aW9uUmVjb3JkcywgYmluZGVyKSB7XHJcbiAgICAgICAgaWYgKGJpbmRlci5pc0JvdW5kICYmIGJpbmRlci5jaGFuZ2VIYW5kbGVyICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGJpbmRlci52aWV3TW9kZWxbYmluZGVyLmNoYW5nZUhhbmRsZXJdKG11dGF0aW9uUmVjb3Jkcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxudmFyIENoaWxkT2JzZXJ2ZXJCaW5kZXIgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gQ2hpbGRPYnNlcnZlckJpbmRlcihzZWxlY3Rvciwgdmlld0hvc3QsIHByb3BlcnR5LCB2aWV3TW9kZWwsIGNvbnRyb2xsZXIsIGNoYW5nZUhhbmRsZXIsIGFsbCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0b3IgPSBzZWxlY3RvcjtcclxuICAgICAgICB0aGlzLnZpZXdIb3N0ID0gdmlld0hvc3Q7XHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0eSA9IHByb3BlcnR5O1xyXG4gICAgICAgIHRoaXMudmlld01vZGVsID0gdmlld01vZGVsO1xyXG4gICAgICAgIHRoaXMuY29udHJvbGxlciA9IGNvbnRyb2xsZXI7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VIYW5kbGVyID0gY2hhbmdlSGFuZGxlciBpbiB2aWV3TW9kZWwgPyBjaGFuZ2VIYW5kbGVyIDogbnVsbDtcclxuICAgICAgICB0aGlzLnVzZXNTaGFkb3dET00gPSBjb250cm9sbGVyLmJlaGF2aW9yLnVzZXNTaGFkb3dET007XHJcbiAgICAgICAgdGhpcy5hbGwgPSBhbGw7XHJcbiAgICAgICAgaWYgKCF0aGlzLnVzZXNTaGFkb3dET00gJiYgY29udHJvbGxlci52aWV3ICYmIGNvbnRyb2xsZXIudmlldy5jb250ZW50Vmlldykge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRWaWV3ID0gY29udHJvbGxlci52aWV3LmNvbnRlbnRWaWV3O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jb250ZW50VmlldyA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc291cmNlID0gbnVsbDtcclxuICAgICAgICB0aGlzLmlzQm91bmQgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIENoaWxkT2JzZXJ2ZXJCaW5kZXIucHJvdG90eXBlLm1hdGNoZXMgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgIGlmIChlbGVtZW50Lm1hdGNoZXModGhpcy5zZWxlY3RvcikpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29udGVudFZpZXcgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBjb250ZW50VmlldyA9IHRoaXMuY29udGVudFZpZXc7XHJcbiAgICAgICAgICAgIHZhciBhc3NpZ25lZFNsb3QgPSBlbGVtZW50LmF1QXNzaWduZWRTbG90O1xyXG4gICAgICAgICAgICBpZiAoYXNzaWduZWRTbG90ICYmIGFzc2lnbmVkU2xvdC5wcm9qZWN0RnJvbUFuY2hvcnMpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhbmNob3JzID0gYXNzaWduZWRTbG90LnByb2plY3RGcm9tQW5jaG9ycztcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGFuY2hvcnMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhbmNob3JzW2ldLmF1T3duZXJWaWV3ID09PSBjb250ZW50Vmlldykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQuYXVPd25lclZpZXcgPT09IGNvbnRlbnRWaWV3O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9O1xyXG4gICAgQ2hpbGRPYnNlcnZlckJpbmRlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChzb3VyY2UpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0JvdW5kKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZSA9PT0gc291cmNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNCb3VuZCA9IHRydWU7XHJcbiAgICAgICAgdmFyIHZpZXdIb3N0ID0gdGhpcy52aWV3SG9zdDtcclxuICAgICAgICB2YXIgdmlld01vZGVsID0gdGhpcy52aWV3TW9kZWw7XHJcbiAgICAgICAgdmFyIG9ic2VydmVyID0gdmlld0hvc3QuX19jaGlsZE9ic2VydmVyX187XHJcbiAgICAgICAgaWYgKCFvYnNlcnZlcikge1xyXG4gICAgICAgICAgICBvYnNlcnZlciA9IHZpZXdIb3N0Ll9fY2hpbGRPYnNlcnZlcl9fID0gRE9NLmNyZWF0ZU11dGF0aW9uT2JzZXJ2ZXIob25DaGlsZENoYW5nZSk7XHJcbiAgICAgICAgICAgIHZhciBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgc3VidHJlZTogIXRoaXMudXNlc1NoYWRvd0RPTVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBvYnNlcnZlci5vYnNlcnZlKHZpZXdIb3N0LCBvcHRpb25zKTtcclxuICAgICAgICAgICAgb2JzZXJ2ZXIuYmluZGVycyA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvYnNlcnZlci5iaW5kZXJzLnB1c2godGhpcyk7XHJcbiAgICAgICAgaWYgKHRoaXMudXNlc1NoYWRvd0RPTSkge1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudCA9IHZpZXdIb3N0LmZpcnN0RWxlbWVudENoaWxkO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5hbGwpIHtcclxuICAgICAgICAgICAgICAgIHZhciBpdGVtcyA9IHZpZXdNb2RlbFt0aGlzLnByb3BlcnR5XTtcclxuICAgICAgICAgICAgICAgIGlmICghaXRlbXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtcyA9IHZpZXdNb2RlbFt0aGlzLnByb3BlcnR5XSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXMuc3BsaWNlKDApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgd2hpbGUgKGN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaGVzKGN1cnJlbnQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goY3VycmVudC5hdSAmJiBjdXJyZW50LmF1LmNvbnRyb2xsZXIgPyBjdXJyZW50LmF1LmNvbnRyb2xsZXIudmlld01vZGVsIDogY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHRFbGVtZW50U2libGluZztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoYW5nZUhhbmRsZXIgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdNb2RlbFt0aGlzLmNoYW5nZUhhbmRsZXJdKG5vTXV0YXRpb25zKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHdoaWxlIChjdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2hlcyhjdXJyZW50KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBjdXJyZW50LmF1ICYmIGN1cnJlbnQuYXUuY29udHJvbGxlciA/IGN1cnJlbnQuYXUuY29udHJvbGxlci52aWV3TW9kZWwgOiBjdXJyZW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdNb2RlbFt0aGlzLnByb3BlcnR5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jaGFuZ2VIYW5kbGVyICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdNb2RlbFt0aGlzLmNoYW5nZUhhbmRsZXJdKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQubmV4dEVsZW1lbnRTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIENoaWxkT2JzZXJ2ZXJCaW5kZXIucHJvdG90eXBlLm9uUmVtb3ZlID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICBpZiAodGhpcy5tYXRjaGVzKGVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IGVsZW1lbnQuYXUgJiYgZWxlbWVudC5hdS5jb250cm9sbGVyID8gZWxlbWVudC5hdS5jb250cm9sbGVyLnZpZXdNb2RlbCA6IGVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmFsbCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGl0ZW1zID0gKHRoaXMudmlld01vZGVsW3RoaXMucHJvcGVydHldIHx8ICh0aGlzLnZpZXdNb2RlbFt0aGlzLnByb3BlcnR5XSA9IFtdKSk7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBpdGVtcy5pbmRleE9mKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGN1cnJlbnRWYWx1ZSA9IHRoaXMudmlld01vZGVsW3RoaXMucHJvcGVydHldO1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudFZhbHVlID09PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52aWV3TW9kZWxbdGhpcy5wcm9wZXJ0eV0gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNCb3VuZCAmJiB0aGlzLmNoYW5nZUhhbmRsZXIgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdNb2RlbFt0aGlzLmNoYW5nZUhhbmRsZXJdKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9O1xyXG4gICAgQ2hpbGRPYnNlcnZlckJpbmRlci5wcm90b3R5cGUub25BZGQgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgIGlmICh0aGlzLm1hdGNoZXMoZWxlbWVudCkpIHtcclxuICAgICAgICAgICAgdmFyIHZhbHVlID0gZWxlbWVudC5hdSAmJiBlbGVtZW50LmF1LmNvbnRyb2xsZXIgPyBlbGVtZW50LmF1LmNvbnRyb2xsZXIudmlld01vZGVsIDogZWxlbWVudDtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYWxsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaXRlbXMgPSAodGhpcy52aWV3TW9kZWxbdGhpcy5wcm9wZXJ0eV0gfHwgKHRoaXMudmlld01vZGVsW3RoaXMucHJvcGVydHldID0gW10pKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdG9yID09PSAnKicpIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgICB2YXIgcHJldiA9IGVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZztcclxuICAgICAgICAgICAgICAgIHdoaWxlIChwcmV2KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2hlcyhwcmV2KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleCsrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBwcmV2ID0gcHJldi5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaXRlbXMuc3BsaWNlKGluZGV4LCAwLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnZpZXdNb2RlbFt0aGlzLnByb3BlcnR5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0JvdW5kICYmIHRoaXMuY2hhbmdlSGFuZGxlciAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52aWV3TW9kZWxbdGhpcy5jaGFuZ2VIYW5kbGVyXSh2YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfTtcclxuICAgIENoaWxkT2JzZXJ2ZXJCaW5kZXIucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNCb3VuZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNCb3VuZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc291cmNlID0gbnVsbDtcclxuICAgICAgICB2YXIgY2hpbGRPYnNlcnZlciA9IHRoaXMudmlld0hvc3QuX19jaGlsZE9ic2VydmVyX187XHJcbiAgICAgICAgaWYgKGNoaWxkT2JzZXJ2ZXIpIHtcclxuICAgICAgICAgICAgdmFyIGJpbmRlcnMgPSBjaGlsZE9ic2VydmVyLmJpbmRlcnM7XHJcbiAgICAgICAgICAgIGlmIChiaW5kZXJzICYmIGJpbmRlcnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gYmluZGVycy5pbmRleE9mKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlkeCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBiaW5kZXJzLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGJpbmRlcnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRPYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3SG9zdC5fX2NoaWxkT2JzZXJ2ZXJfXyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMudXNlc1NoYWRvd0RPTSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52aWV3TW9kZWxbdGhpcy5wcm9wZXJ0eV0gPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiBDaGlsZE9ic2VydmVyQmluZGVyO1xyXG59KCkpO1xuXG52YXIgRWxlbWVudENvbmZpZ1Jlc291cmNlID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEVsZW1lbnRDb25maWdSZXNvdXJjZSgpIHtcclxuICAgIH1cclxuICAgIEVsZW1lbnRDb25maWdSZXNvdXJjZS5wcm90b3R5cGUuaW5pdGlhbGl6ZSA9IGZ1bmN0aW9uIChjb250YWluZXIsIHRhcmdldCkgeyB9O1xyXG4gICAgRWxlbWVudENvbmZpZ1Jlc291cmNlLnByb3RvdHlwZS5yZWdpc3RlciA9IGZ1bmN0aW9uIChyZWdpc3RyeSwgbmFtZSkgeyB9O1xyXG4gICAgRWxlbWVudENvbmZpZ1Jlc291cmNlLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNvbnRhaW5lciwgdGFyZ2V0KSB7XHJcbiAgICAgICAgdmFyIGNvbmZpZyA9IG5ldyB0YXJnZXQoKTtcclxuICAgICAgICB2YXIgZXZlbnRNYW5hZ2VyID0gY29udGFpbmVyLmdldChFdmVudE1hbmFnZXIpO1xyXG4gICAgICAgIGV2ZW50TWFuYWdlci5yZWdpc3RlckVsZW1lbnRDb25maWcoY29uZmlnKTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gRWxlbWVudENvbmZpZ1Jlc291cmNlO1xyXG59KCkpO1xuXG5mdW5jdGlvbiByZXNvdXJjZShpbnN0YW5jZU9yQ29uZmlnKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCkge1xyXG4gICAgICAgIHZhciBpc0NvbmZpZyA9IHR5cGVvZiBpbnN0YW5jZU9yQ29uZmlnID09PSAnc3RyaW5nJyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoaW5zdGFuY2VPckNvbmZpZykgPT09IE9iamVjdC5wcm90b3R5cGU7XHJcbiAgICAgICAgaWYgKGlzQ29uZmlnKSB7XHJcbiAgICAgICAgICAgIHRhcmdldC4kcmVzb3VyY2UgPSBpbnN0YW5jZU9yQ29uZmlnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbWV0YWRhdGEuZGVmaW5lKG1ldGFkYXRhLnJlc291cmNlLCBpbnN0YW5jZU9yQ29uZmlnLCB0YXJnZXQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gYmVoYXZpb3Iob3ZlcnJpZGUpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0KSB7XHJcbiAgICAgICAgaWYgKG92ZXJyaWRlIGluc3RhbmNlb2YgSHRtbEJlaGF2aW9yUmVzb3VyY2UpIHtcclxuICAgICAgICAgICAgbWV0YWRhdGEuZGVmaW5lKG1ldGFkYXRhLnJlc291cmNlLCBvdmVycmlkZSwgdGFyZ2V0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciByID0gbWV0YWRhdGEuZ2V0T3JDcmVhdGVPd24obWV0YWRhdGEucmVzb3VyY2UsIEh0bWxCZWhhdmlvclJlc291cmNlLCB0YXJnZXQpO1xyXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHIsIG92ZXJyaWRlKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGN1c3RvbUVsZW1lbnQobmFtZSkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQpIHtcclxuICAgICAgICB2YXIgciA9IG1ldGFkYXRhLmdldE9yQ3JlYXRlT3duKG1ldGFkYXRhLnJlc291cmNlLCBIdG1sQmVoYXZpb3JSZXNvdXJjZSwgdGFyZ2V0KTtcclxuICAgICAgICByLmVsZW1lbnROYW1lID0gdmFsaWRhdGVCZWhhdmlvck5hbWUobmFtZSwgJ2N1c3RvbSBlbGVtZW50Jyk7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGN1c3RvbUF0dHJpYnV0ZShuYW1lLCBkZWZhdWx0QmluZGluZ01vZGUsIGFsaWFzZXMpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0KSB7XHJcbiAgICAgICAgdmFyIHIgPSBtZXRhZGF0YS5nZXRPckNyZWF0ZU93bihtZXRhZGF0YS5yZXNvdXJjZSwgSHRtbEJlaGF2aW9yUmVzb3VyY2UsIHRhcmdldCk7XHJcbiAgICAgICAgci5hdHRyaWJ1dGVOYW1lID0gdmFsaWRhdGVCZWhhdmlvck5hbWUobmFtZSwgJ2N1c3RvbSBhdHRyaWJ1dGUnKTtcclxuICAgICAgICByLmF0dHJpYnV0ZURlZmF1bHRCaW5kaW5nTW9kZSA9IGRlZmF1bHRCaW5kaW5nTW9kZTtcclxuICAgICAgICByLmFsaWFzZXMgPSBhbGlhc2VzO1xyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiB0ZW1wbGF0ZUNvbnRyb2xsZXIodGFyZ2V0KSB7XHJcbiAgICB2YXIgZGVjbyA9IGZ1bmN0aW9uICh0KSB7XHJcbiAgICAgICAgdmFyIHIgPSBtZXRhZGF0YS5nZXRPckNyZWF0ZU93bihtZXRhZGF0YS5yZXNvdXJjZSwgSHRtbEJlaGF2aW9yUmVzb3VyY2UsIHQpO1xyXG4gICAgICAgIHIubGlmdHNDb250ZW50ID0gdHJ1ZTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gdGFyZ2V0ID8gZGVjbyh0YXJnZXQpIDogZGVjbztcclxufVxyXG5mdW5jdGlvbiBiaW5kYWJsZShuYW1lT3JDb25maWdPclRhcmdldCwga2V5LCBkZXNjcmlwdG9yKSB7XHJcbiAgICB2YXIgZGVjbyA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleTIsIGRlc2NyaXB0b3IyKSB7XHJcbiAgICAgICAgdmFyIGFjdHVhbFRhcmdldCA9IGtleTIgPyB0YXJnZXQuY29uc3RydWN0b3IgOiB0YXJnZXQ7XHJcbiAgICAgICAgdmFyIHIgPSBtZXRhZGF0YS5nZXRPckNyZWF0ZU93bihtZXRhZGF0YS5yZXNvdXJjZSwgSHRtbEJlaGF2aW9yUmVzb3VyY2UsIGFjdHVhbFRhcmdldCk7XHJcbiAgICAgICAgdmFyIHByb3A7XHJcbiAgICAgICAgaWYgKGtleTIpIHtcclxuICAgICAgICAgICAgbmFtZU9yQ29uZmlnT3JUYXJnZXQgPSBuYW1lT3JDb25maWdPclRhcmdldCB8fCB7fTtcclxuICAgICAgICAgICAgbmFtZU9yQ29uZmlnT3JUYXJnZXQubmFtZSA9IGtleTI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHByb3AgPSBuZXcgQmluZGFibGVQcm9wZXJ0eShuYW1lT3JDb25maWdPclRhcmdldCk7XHJcbiAgICAgICAgcmV0dXJuIHByb3AucmVnaXN0ZXJXaXRoKGFjdHVhbFRhcmdldCwgciwgZGVzY3JpcHRvcjIpO1xyXG4gICAgfTtcclxuICAgIGlmICghbmFtZU9yQ29uZmlnT3JUYXJnZXQpIHtcclxuICAgICAgICByZXR1cm4gZGVjbztcclxuICAgIH1cclxuICAgIGlmIChrZXkpIHtcclxuICAgICAgICB2YXIgdGFyZ2V0ID0gbmFtZU9yQ29uZmlnT3JUYXJnZXQ7XHJcbiAgICAgICAgbmFtZU9yQ29uZmlnT3JUYXJnZXQgPSBudWxsO1xyXG4gICAgICAgIHJldHVybiBkZWNvKHRhcmdldCwga2V5LCBkZXNjcmlwdG9yKTtcclxuICAgIH1cclxuICAgIHJldHVybiBkZWNvO1xyXG59XHJcbmZ1bmN0aW9uIGR5bmFtaWNPcHRpb25zKHRhcmdldCkge1xyXG4gICAgdmFyIGRlY28gPSBmdW5jdGlvbiAodCkge1xyXG4gICAgICAgIHZhciByID0gbWV0YWRhdGEuZ2V0T3JDcmVhdGVPd24obWV0YWRhdGEucmVzb3VyY2UsIEh0bWxCZWhhdmlvclJlc291cmNlLCB0KTtcclxuICAgICAgICByLmhhc0R5bmFtaWNPcHRpb25zID0gdHJ1ZTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gdGFyZ2V0ID8gZGVjbyh0YXJnZXQpIDogZGVjbztcclxufVxyXG52YXIgZGVmYXVsdFNoYWRvd0RPTU9wdGlvbnMgPSB7IG1vZGU6ICdvcGVuJyB9O1xyXG5mdW5jdGlvbiB1c2VTaGFkb3dET00odGFyZ2V0T3JPcHRpb25zKSB7XHJcbiAgICB2YXIgb3B0aW9ucyA9IHR5cGVvZiB0YXJnZXRPck9wdGlvbnMgPT09ICdmdW5jdGlvbicgfHwgIXRhcmdldE9yT3B0aW9uc1xyXG4gICAgICAgID8gZGVmYXVsdFNoYWRvd0RPTU9wdGlvbnNcclxuICAgICAgICA6IHRhcmdldE9yT3B0aW9ucztcclxuICAgIHZhciBkZWNvID0gZnVuY3Rpb24gKHQpIHtcclxuICAgICAgICB2YXIgciA9IG1ldGFkYXRhLmdldE9yQ3JlYXRlT3duKG1ldGFkYXRhLnJlc291cmNlLCBIdG1sQmVoYXZpb3JSZXNvdXJjZSwgdCk7XHJcbiAgICAgICAgci50YXJnZXRTaGFkb3dET00gPSB0cnVlO1xyXG4gICAgICAgIHIuc2hhZG93RE9NT3B0aW9ucyA9IG9wdGlvbnM7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHR5cGVvZiB0YXJnZXRPck9wdGlvbnMgPT09ICdmdW5jdGlvbicgPyBkZWNvKHRhcmdldE9yT3B0aW9ucykgOiBkZWNvO1xyXG59XHJcbmZ1bmN0aW9uIHByb2Nlc3NBdHRyaWJ1dGVzKHByb2Nlc3Nvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0KSB7XHJcbiAgICAgICAgdmFyIHIgPSBtZXRhZGF0YS5nZXRPckNyZWF0ZU93bihtZXRhZGF0YS5yZXNvdXJjZSwgSHRtbEJlaGF2aW9yUmVzb3VyY2UsIHQpO1xyXG4gICAgICAgIHIucHJvY2Vzc0F0dHJpYnV0ZXMgPSBmdW5jdGlvbiAoY29tcGlsZXIsIHJlc291cmNlcywgbm9kZSwgYXR0cmlidXRlcywgZWxlbWVudEluc3RydWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBwcm9jZXNzb3IoY29tcGlsZXIsIHJlc291cmNlcywgbm9kZSwgYXR0cmlidXRlcywgZWxlbWVudEluc3RydWN0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIExvZ01hbmFnZXIuZ2V0TG9nZ2VyKCd0ZW1wbGF0aW5nJykuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gZG9Ob3RQcm9jZXNzQ29udGVudCgpIHsgcmV0dXJuIGZhbHNlOyB9XHJcbmZ1bmN0aW9uIHByb2Nlc3NDb250ZW50KHByb2Nlc3Nvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0KSB7XHJcbiAgICAgICAgdmFyIHIgPSBtZXRhZGF0YS5nZXRPckNyZWF0ZU93bihtZXRhZGF0YS5yZXNvdXJjZSwgSHRtbEJlaGF2aW9yUmVzb3VyY2UsIHQpO1xyXG4gICAgICAgIHIucHJvY2Vzc0NvbnRlbnQgPSBwcm9jZXNzb3IgPyBmdW5jdGlvbiAoY29tcGlsZXIsIHJlc291cmNlcywgbm9kZSwgaW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9jZXNzb3IoY29tcGlsZXIsIHJlc291cmNlcywgbm9kZSwgaW5zdHJ1Y3Rpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgTG9nTWFuYWdlci5nZXRMb2dnZXIoJ3RlbXBsYXRpbmcnKS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IDogZG9Ob3RQcm9jZXNzQ29udGVudDtcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gY29udGFpbmVybGVzcyh0YXJnZXQpIHtcclxuICAgIHZhciBkZWNvID0gZnVuY3Rpb24gKHQpIHtcclxuICAgICAgICB2YXIgciA9IG1ldGFkYXRhLmdldE9yQ3JlYXRlT3duKG1ldGFkYXRhLnJlc291cmNlLCBIdG1sQmVoYXZpb3JSZXNvdXJjZSwgdCk7XHJcbiAgICAgICAgci5jb250YWluZXJsZXNzID0gdHJ1ZTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gdGFyZ2V0ID8gZGVjbyh0YXJnZXQpIDogZGVjbztcclxufVxyXG5mdW5jdGlvbiB1c2VWaWV3U3RyYXRlZ3koc3RyYXRlZ3kpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0KSB7XHJcbiAgICAgICAgbWV0YWRhdGEuZGVmaW5lKFZpZXdMb2NhdG9yLnZpZXdTdHJhdGVneU1ldGFkYXRhS2V5LCBzdHJhdGVneSwgdGFyZ2V0KTtcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gdXNlVmlldyhwYXRoKSB7XHJcbiAgICByZXR1cm4gdXNlVmlld1N0cmF0ZWd5KG5ldyBSZWxhdGl2ZVZpZXdTdHJhdGVneShwYXRoKSk7XHJcbn1cclxuZnVuY3Rpb24gaW5saW5lVmlldyhtYXJrdXAsIGRlcGVuZGVuY2llcywgZGVwZW5kZW5jeUJhc2VVcmwpIHtcclxuICAgIHJldHVybiB1c2VWaWV3U3RyYXRlZ3kobmV3IElubGluZVZpZXdTdHJhdGVneShtYXJrdXAsIGRlcGVuZGVuY2llcywgZGVwZW5kZW5jeUJhc2VVcmwpKTtcclxufVxyXG5mdW5jdGlvbiBub1ZpZXcodGFyZ2V0T3JEZXBlbmRlbmNpZXMsIGRlcGVuZGVuY3lCYXNlVXJsKSB7XHJcbiAgICB2YXIgdGFyZ2V0O1xyXG4gICAgdmFyIGRlcGVuZGVuY2llcztcclxuICAgIGlmICh0eXBlb2YgdGFyZ2V0T3JEZXBlbmRlbmNpZXMgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICB0YXJnZXQgPSB0YXJnZXRPckRlcGVuZGVuY2llcztcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGRlcGVuZGVuY2llcyA9IHRhcmdldE9yRGVwZW5kZW5jaWVzO1xyXG4gICAgICAgIHRhcmdldCA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIHZhciBkZWNvID0gZnVuY3Rpb24gKHQpIHtcclxuICAgICAgICBtZXRhZGF0YS5kZWZpbmUoVmlld0xvY2F0b3Iudmlld1N0cmF0ZWd5TWV0YWRhdGFLZXksIG5ldyBOb1ZpZXdTdHJhdGVneShkZXBlbmRlbmNpZXMsIGRlcGVuZGVuY3lCYXNlVXJsKSwgdCk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHRhcmdldCA/IGRlY28odGFyZ2V0KSA6IGRlY287XHJcbn1cclxuZnVuY3Rpb24gdmlldyh0ZW1wbGF0ZU9yQ29uZmlnKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCkge1xyXG4gICAgICAgIHRhcmdldC4kdmlldyA9IHRlbXBsYXRlT3JDb25maWc7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGVsZW1lbnRDb25maWcodGFyZ2V0KSB7XHJcbiAgICB2YXIgZGVjbyA9IGZ1bmN0aW9uICh0KSB7XHJcbiAgICAgICAgbWV0YWRhdGEuZGVmaW5lKG1ldGFkYXRhLnJlc291cmNlLCBuZXcgRWxlbWVudENvbmZpZ1Jlc291cmNlKCksIHQpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiB0YXJnZXQgPyBkZWNvKHRhcmdldCkgOiBkZWNvO1xyXG59XHJcbmZ1bmN0aW9uIHZpZXdSZXNvdXJjZXMoKSB7XHJcbiAgICB2YXIgcmVzb3VyY2VzID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIHJlc291cmNlc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQpIHtcclxuICAgICAgICBtZXRhZGF0YS5kZWZpbmUoVmlld0VuZ2luZS52aWV3TW9kZWxSZXF1aXJlTWV0YWRhdGFLZXksIHJlc291cmNlcywgdGFyZ2V0KTtcclxuICAgIH07XHJcbn1cblxudmFyIFRlbXBsYXRpbmdFbmdpbmUgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gVGVtcGxhdGluZ0VuZ2luZShjb250YWluZXIsIG1vZHVsZUFuYWx5emVyLCB2aWV3Q29tcGlsZXIsIGNvbXBvc2l0aW9uRW5naW5lKSB7XHJcbiAgICAgICAgdGhpcy5fY29udGFpbmVyID0gY29udGFpbmVyO1xyXG4gICAgICAgIHRoaXMuX21vZHVsZUFuYWx5emVyID0gbW9kdWxlQW5hbHl6ZXI7XHJcbiAgICAgICAgdGhpcy5fdmlld0NvbXBpbGVyID0gdmlld0NvbXBpbGVyO1xyXG4gICAgICAgIHRoaXMuX2NvbXBvc2l0aW9uRW5naW5lID0gY29tcG9zaXRpb25FbmdpbmU7XHJcbiAgICAgICAgY29udGFpbmVyLnJlZ2lzdGVySW5zdGFuY2UoQW5pbWF0b3IsIEFuaW1hdG9yLmluc3RhbmNlID0gbmV3IEFuaW1hdG9yKCkpO1xyXG4gICAgfVxyXG4gICAgVGVtcGxhdGluZ0VuZ2luZS5wcm90b3R5cGUuY29uZmlndXJlQW5pbWF0b3IgPSBmdW5jdGlvbiAoYW5pbWF0b3IpIHtcclxuICAgICAgICB0aGlzLl9jb250YWluZXIudW5yZWdpc3RlcihBbmltYXRvcik7XHJcbiAgICAgICAgdGhpcy5fY29udGFpbmVyLnJlZ2lzdGVySW5zdGFuY2UoQW5pbWF0b3IsIEFuaW1hdG9yLmluc3RhbmNlID0gYW5pbWF0b3IpO1xyXG4gICAgfTtcclxuICAgIFRlbXBsYXRpbmdFbmdpbmUucHJvdG90eXBlLmNvbXBvc2UgPSBmdW5jdGlvbiAoY29udGV4dCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jb21wb3NpdGlvbkVuZ2luZS5jb21wb3NlKGNvbnRleHQpO1xyXG4gICAgfTtcclxuICAgIFRlbXBsYXRpbmdFbmdpbmUucHJvdG90eXBlLmVuaGFuY2UgPSBmdW5jdGlvbiAoaW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24gaW5zdGFuY2VvZiBET00uRWxlbWVudCkge1xyXG4gICAgICAgICAgICBpbnN0cnVjdGlvbiA9IHsgZWxlbWVudDogaW5zdHJ1Y3Rpb24gfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGNvbXBpbGVySW5zdHJ1Y3Rpb25zID0geyBsZXRFeHByZXNzaW9uczogW10gfTtcclxuICAgICAgICB2YXIgcmVzb3VyY2VzID0gaW5zdHJ1Y3Rpb24ucmVzb3VyY2VzIHx8IHRoaXMuX2NvbnRhaW5lci5nZXQoVmlld1Jlc291cmNlcyk7XHJcbiAgICAgICAgdGhpcy5fdmlld0NvbXBpbGVyLl9jb21waWxlTm9kZShpbnN0cnVjdGlvbi5lbGVtZW50LCByZXNvdXJjZXMsIGNvbXBpbGVySW5zdHJ1Y3Rpb25zLCBpbnN0cnVjdGlvbi5lbGVtZW50LnBhcmVudE5vZGUsICdyb290JywgdHJ1ZSk7XHJcbiAgICAgICAgdmFyIGZhY3RvcnkgPSBuZXcgVmlld0ZhY3RvcnkoaW5zdHJ1Y3Rpb24uZWxlbWVudCwgY29tcGlsZXJJbnN0cnVjdGlvbnMsIHJlc291cmNlcyk7XHJcbiAgICAgICAgdmFyIGNvbnRhaW5lciA9IGluc3RydWN0aW9uLmNvbnRhaW5lciB8fCB0aGlzLl9jb250YWluZXIuY3JlYXRlQ2hpbGQoKTtcclxuICAgICAgICB2YXIgdmlldyA9IGZhY3RvcnkuY3JlYXRlKGNvbnRhaW5lciwgQmVoYXZpb3JJbnN0cnVjdGlvbi5lbmhhbmNlKCkpO1xyXG4gICAgICAgIHZpZXcuYmluZChpbnN0cnVjdGlvbi5iaW5kaW5nQ29udGV4dCB8fCB7fSwgaW5zdHJ1Y3Rpb24ub3ZlcnJpZGVDb250ZXh0KTtcclxuICAgICAgICB2aWV3LmZpcnN0Q2hpbGQgPSB2aWV3Lmxhc3RDaGlsZCA9IHZpZXcuZnJhZ21lbnQ7XHJcbiAgICAgICAgdmlldy5mcmFnbWVudCA9IERPTS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XHJcbiAgICAgICAgdmlldy5hdHRhY2hlZCgpO1xyXG4gICAgICAgIHJldHVybiB2aWV3O1xyXG4gICAgfTtcclxuICAgIFRlbXBsYXRpbmdFbmdpbmUuaW5qZWN0ID0gW0NvbnRhaW5lciwgTW9kdWxlQW5hbHl6ZXIsIFZpZXdDb21waWxlciwgQ29tcG9zaXRpb25FbmdpbmVdO1xyXG4gICAgcmV0dXJuIFRlbXBsYXRpbmdFbmdpbmU7XHJcbn0oKSk7XG5cbmV4cG9ydCB7IEFuaW1hdG9yLCBCZWhhdmlvckluc3RydWN0aW9uLCBCZWhhdmlvclByb3BlcnR5T2JzZXJ2ZXIsIEJpbmRhYmxlUHJvcGVydHksIEJpbmRpbmdMYW5ndWFnZSwgQm91bmRWaWV3RmFjdG9yeSwgQ29tcG9zaXRpb25FbmdpbmUsIENvbXBvc2l0aW9uVHJhbnNhY3Rpb24sIENvbXBvc2l0aW9uVHJhbnNhY3Rpb25Ob3RpZmllciwgQ29tcG9zaXRpb25UcmFuc2FjdGlvbk93bmVyc2hpcFRva2VuLCBDb250cm9sbGVyLCBDb252ZW50aW9uYWxWaWV3U3RyYXRlZ3ksIEVsZW1lbnRDb25maWdSZXNvdXJjZSwgRWxlbWVudEV2ZW50cywgSHRtbEJlaGF2aW9yUmVzb3VyY2UsIElubGluZVZpZXdTdHJhdGVneSwgTW9kdWxlQW5hbHl6ZXIsIE5vVmlld1N0cmF0ZWd5LCBQYXNzVGhyb3VnaFNsb3QsIFJlbGF0aXZlVmlld1N0cmF0ZWd5LCBSZXNvdXJjZURlc2NyaXB0aW9uLCBSZXNvdXJjZUxvYWRDb250ZXh0LCBSZXNvdXJjZU1vZHVsZSwgU2hhZG93RE9NLCBTaGFkb3dTbG90LCBTbG90Q3VzdG9tQXR0cmlidXRlLCBTdGF0aWNWaWV3U3RyYXRlZ3ksIFN3YXBTdHJhdGVnaWVzLCBUYXJnZXRJbnN0cnVjdGlvbiwgVGVtcGxhdGVSZWdpc3RyeVZpZXdTdHJhdGVneSwgVGVtcGxhdGluZ0VuZ2luZSwgVmlldywgVmlld0NvbXBpbGVJbnN0cnVjdGlvbiwgVmlld0NvbXBpbGVyLCBWaWV3RW5naW5lLCBWaWV3RW5naW5lSG9va3NSZXNvdXJjZSwgVmlld0ZhY3RvcnksIFZpZXdMb2NhdG9yLCBWaWV3UmVzb3VyY2VzLCBWaWV3U2xvdCwgX2h5cGhlbmF0ZSwgX2lzQWxsV2hpdGVzcGFjZSwgYW5pbWF0aW9uRXZlbnQsIGJlaGF2aW9yLCBiaW5kYWJsZSwgY2hpbGQsIGNoaWxkcmVuLCBjb250YWluZXJsZXNzLCBjdXN0b21BdHRyaWJ1dGUsIGN1c3RvbUVsZW1lbnQsIGR5bmFtaWNPcHRpb25zLCBlbGVtZW50Q29uZmlnLCBpbmxpbmVWaWV3LCBub1ZpZXcsIHByb2Nlc3NBdHRyaWJ1dGVzLCBwcm9jZXNzQ29udGVudCwgcmVzb3VyY2UsIHRlbXBsYXRlQ29udHJvbGxlciwgdXNlU2hhZG93RE9NLCB1c2VWaWV3LCB1c2VWaWV3U3RyYXRlZ3ksIHZhbGlkYXRlQmVoYXZpb3JOYW1lLCB2aWV3LCB2aWV3RW5naW5lSG9va3MsIHZpZXdSZXNvdXJjZXMsIHZpZXdTdHJhdGVneSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXVyZWxpYS10ZW1wbGF0aW5nLmpzLm1hcFxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3\n")},30:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var zhCn = moment.defineLocale('zh-cn', {\n        months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n        monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n        weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort : '周日_周一_周二_周三_周四_周五_周六'.split('_'),\n        weekdaysMin : '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY/MM/DD',\n            LL : 'YYYY年M月D日',\n            LLL : 'YYYY年M月D日Ah点mm分',\n            LLLL : 'YYYY年M月D日ddddAh点mm分',\n            l : 'YYYY/M/D',\n            ll : 'YYYY年M月D日',\n            lll : 'YYYY年M月D日 HH:mm',\n            llll : 'YYYY年M月D日dddd HH:mm'\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' ||\n                    meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            } else {\n                // '中午'\n                return hour >= 11 ? hour : hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar : {\n            sameDay : '[今天]LT',\n            nextDay : '[明天]LT',\n            nextWeek : '[下]ddddLT',\n            lastDay : '[昨天]LT',\n            lastWeek : '[上]ddddLT',\n            sameElse : 'L'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|周)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                case 'M':\n                    return number + '月';\n                case 'w':\n                case 'W':\n                    return number + '周';\n                default:\n                    return number;\n            }\n        },\n        relativeTime : {\n            future : '%s内',\n            past : '%s前',\n            s : '几秒',\n            ss : '%d 秒',\n            m : '1 分钟',\n            mm : '%d 分钟',\n            h : '1 小时',\n            hh : '%d 小时',\n            d : '1 天',\n            dd : '%d 天',\n            M : '1 个月',\n            MM : '%d 个月',\n            y : '1 年',\n            yy : '%d 年'\n        },\n        week : {\n            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return zhCn;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS96aC1jbi5qcz81YzNhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiIzMC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIHpoQ24gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd6aC1jbicsIHtcbiAgICAgICAgbW9udGhzIDogJ+S4gOaciF/kuozmnIhf5LiJ5pyIX+Wbm+aciF/kupTmnIhf5YWt5pyIX+S4g+aciF/lhavmnIhf5Lmd5pyIX+WNgeaciF/ljYHkuIDmnIhf5Y2B5LqM5pyIJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICcx5pyIXzLmnIhfM+aciF805pyIXzXmnIhfNuaciF835pyIXzjmnIhfOeaciF8xMOaciF8xMeaciF8xMuaciCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXMgOiAn5pif5pyf5pelX+aYn+acn+S4gF/mmJ/mnJ/kuoxf5pif5pyf5LiJX+aYn+acn+Wbm1/mmJ/mnJ/kupRf5pif5pyf5YWtJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ+WRqOaXpV/lkajkuIBf5ZGo5LqMX+WRqOS4iV/lkajlm5tf5ZGo5LqUX+WRqOWFrScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAn5pelX+S4gF/kuoxf5LiJX+Wbm1/kupRf5YWtJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ1lZWVkvTU0vREQnLFxuICAgICAgICAgICAgTEwgOiAnWVlZWeW5tE3mnIhE5pelJyxcbiAgICAgICAgICAgIExMTCA6ICdZWVlZ5bm0TeaciETml6VBaOeCuW1t5YiGJyxcbiAgICAgICAgICAgIExMTEwgOiAnWVlZWeW5tE3mnIhE5pelZGRkZEFo54K5bW3liIYnLFxuICAgICAgICAgICAgbCA6ICdZWVlZL00vRCcsXG4gICAgICAgICAgICBsbCA6ICdZWVlZ5bm0TeaciETml6UnLFxuICAgICAgICAgICAgbGxsIDogJ1lZWVnlubRN5pyIROaXpSBISDptbScsXG4gICAgICAgICAgICBsbGxsIDogJ1lZWVnlubRN5pyIROaXpWRkZGQgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/lh4zmmah85pep5LiKfOS4iuWNiHzkuK3ljYh85LiL5Y2IfOaZmuS4ii8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+WHjOaZqCcgfHwgbWVyaWRpZW0gPT09ICfml6nkuIonIHx8XG4gICAgICAgICAgICAgICAgICAgIG1lcmlkaWVtID09PSAn5LiK5Y2IJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+S4i+WNiCcgfHwgbWVyaWRpZW0gPT09ICfmmZrkuIonKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gJ+S4reWNiCdcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMSA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtIDogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgdmFyIGhtID0gaG91ciAqIDEwMCArIG1pbnV0ZTtcbiAgICAgICAgICAgIGlmIChobSA8IDYwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5YeM5pmoJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCA5MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+aXqeS4iic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgMTEzMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5LiK5Y2IJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCAxMjMwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfkuK3ljYgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDE4MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+S4i+WNiCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5pma5LiKJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1vku4rlpKldTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICdb5piO5aSpXUxUJyxcbiAgICAgICAgICAgIG5leHRXZWVrIDogJ1vkuItdZGRkZExUJyxcbiAgICAgICAgICAgIGxhc3REYXkgOiAnW+aYqOWkqV1MVCcsXG4gICAgICAgICAgICBsYXN0V2VlayA6ICdb5LiKXWRkZGRMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0o5pelfOaciHzlkagpLyxcbiAgICAgICAgb3JkaW5hbCA6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+aXpSc7XG4gICAgICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn5pyIJztcbiAgICAgICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICflkagnO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICclc+WGhScsXG4gICAgICAgICAgICBwYXN0IDogJyVz5YmNJyxcbiAgICAgICAgICAgIHMgOiAn5Yeg56eSJyxcbiAgICAgICAgICAgIHNzIDogJyVkIOenkicsXG4gICAgICAgICAgICBtIDogJzEg5YiG6ZKfJyxcbiAgICAgICAgICAgIG1tIDogJyVkIOWIhumSnycsXG4gICAgICAgICAgICBoIDogJzEg5bCP5pe2JyxcbiAgICAgICAgICAgIGhoIDogJyVkIOWwj+aXticsXG4gICAgICAgICAgICBkIDogJzEg5aSpJyxcbiAgICAgICAgICAgIGRkIDogJyVkIOWkqScsXG4gICAgICAgICAgICBNIDogJzEg5Liq5pyIJyxcbiAgICAgICAgICAgIE1NIDogJyVkIOS4quaciCcsXG4gICAgICAgICAgICB5IDogJzEg5bm0JyxcbiAgICAgICAgICAgIHl5IDogJyVkIOW5tCdcbiAgICAgICAgfSxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIC8vIEdCL1QgNzQwOC0xOTk044CK5pWw5o2u5YWD5ZKM5Lqk5o2i5qC85byPwrfkv6Hmga/kuqTmjaLCt+aXpeacn+WSjOaXtumXtOihqOekuuazleOAi+S4jklTTyA4NjAxOjE5ODjnrYnmlYhcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNCAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gemhDbjtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///30\n")},31:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var yo = moment.defineLocale('yo', {\n        months : 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split('_'),\n        monthsShort : 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'),\n        weekdays : 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'),\n        weekdaysShort : 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'),\n        weekdaysMin : 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'),\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY h:mm A',\n            LLLL : 'dddd, D MMMM YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : '[Ònì ni] LT',\n            nextDay : '[Ọ̀la ni] LT',\n            nextWeek : 'dddd [Ọsẹ̀ tón\\'bọ] [ni] LT',\n            lastDay : '[Àna ni] LT',\n            lastWeek : 'dddd [Ọsẹ̀ tólọ́] [ni] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'ní %s',\n            past : '%s kọjá',\n            s : 'ìsẹjú aayá die',\n            ss :'aayá %d',\n            m : 'ìsẹjú kan',\n            mm : 'ìsẹjú %d',\n            h : 'wákati kan',\n            hh : 'wákati %d',\n            d : 'ọjọ́ kan',\n            dd : 'ọjọ́ %d',\n            M : 'osù kan',\n            MM : 'osù %d',\n            y : 'ọdún kan',\n            yy : 'ọdún %d'\n        },\n        dayOfMonthOrdinalParse : /ọjọ́\\s\\d{1,2}/,\n        ordinal : 'ọjọ́ %d',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4 // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return yo;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS95by5qcz83ZjMzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsMkNBQTJDLElBQUk7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiIzMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIHlvID0gbW9tZW50LmRlZmluZUxvY2FsZSgneW8nLCB7XG4gICAgICAgIG1vbnRocyA6ICdT4bq5zIFy4bq5zIFfRcyAcmXMgGxlzIBf4bq4cuG6ucyAbmHMgF9JzIBnYmXMgV9FzIBiaWJpX0/MgGt1zIBkdV9BZ+G6uW1vX0/MgGd1zIFuX093ZXdlX+G7jMyAd2HMgHJhzIBfQmXMgWx1zIFf4buMzIBw4bq5zIDMgCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAnU+G6ucyBcl9FzIBybF/hurhybl9JzIBnYl9FzIBiaV9PzIBrdcyAX0Fn4bq5X0/MgGd1zIFfT3dlX+G7jMyAd2HMgF9CZcyBbF/hu4zMgHDhurnMgMyAJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6ICdBzIBpzIBrdcyBX0FqZcyBX0nMgHPhurnMgWd1bl/hu4xq4buNzIFydcyBX+G7jGrhu43MgWLhu41f4bq4dGnMgF9BzIBiYcyBbeG6ucyBdGEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAnQcyAacyAa19BamXMgV9JzIBz4bq5zIFf4buManJf4buMamJf4bq4dGnMgF9BzIBiYcyBJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICdBzIBpzIBfQWpfScyAc1/hu4xyX+G7jGJf4bq4dF9BzIBiJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ2g6bW0gQScsXG4gICAgICAgICAgICBMVFMgOiAnaDptbTpzcyBBJyxcbiAgICAgICAgICAgIEwgOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVkgaDptbSBBJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgOiAnW0/MgG5pzIAgbmldIExUJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW+G7jMyAbGEgbmldIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrIDogJ2RkZGQgW+G7jHPhurnMgCB0b8yBblxcJ2Lhu41dIFtuaV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdbQcyAbmEgbmldIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogJ2RkZGQgW+G7jHPhurnMgCB0b8yBbOG7jcyBXSBbbmldIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICduacyBICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAnJXMga+G7jWphzIEnLFxuICAgICAgICAgICAgcyA6ICdpzIBz4bq5anXMgSBhYXlhzIEgZGllJyxcbiAgICAgICAgICAgIHNzIDonYWF5YcyBICVkJyxcbiAgICAgICAgICAgIG0gOiAnacyAc+G6uWp1zIEga2FuJyxcbiAgICAgICAgICAgIG1tIDogJ2nMgHPhurlqdcyBICVkJyxcbiAgICAgICAgICAgIGggOiAnd2HMgWthdGkga2FuJyxcbiAgICAgICAgICAgIGhoIDogJ3dhzIFrYXRpICVkJyxcbiAgICAgICAgICAgIGQgOiAn4buNauG7jcyBIGthbicsXG4gICAgICAgICAgICBkZCA6ICfhu41q4buNzIEgJWQnLFxuICAgICAgICAgICAgTSA6ICdvc3XMgCBrYW4nLFxuICAgICAgICAgICAgTU0gOiAnb3N1zIAgJWQnLFxuICAgICAgICAgICAgeSA6ICfhu41kdcyBbiBrYW4nLFxuICAgICAgICAgICAgeXkgOiAn4buNZHXMgW4gJWQnXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2UgOiAv4buNauG7jcyBXFxzXFxkezEsMn0vLFxuICAgICAgICBvcmRpbmFsIDogJ+G7jWrhu43MgSAlZCcsXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4geW87XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///31\n")},32:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var xPseudo = moment.defineLocale('x-pseudo', {\n        months : 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split('_'),\n        monthsShort : 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split('_'),\n        weekdaysShort : 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),\n        weekdaysMin : 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[T~ódá~ý át] LT',\n            nextDay : '[T~ómó~rró~w át] LT',\n            nextWeek : 'dddd [át] LT',\n            lastDay : '[Ý~ést~érdá~ý át] LT',\n            lastWeek : '[L~ást] dddd [át] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'í~ñ %s',\n            past : '%s á~gó',\n            s : 'á ~féw ~sécó~ñds',\n            ss : '%d s~écóñ~ds',\n            m : 'á ~míñ~úté',\n            mm : '%d m~íñú~tés',\n            h : 'á~ñ hó~úr',\n            hh : '%d h~óúrs',\n            d : 'á ~dáý',\n            dd : '%d d~áýs',\n            M : 'á ~móñ~th',\n            MM : '%d m~óñt~hs',\n            y : 'á ~ýéár',\n            yy : '%d ý~éárs'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return xPseudo;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS94LXBzZXVkby5qcz9mZDdlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiIzMi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIHhQc2V1ZG8gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd4LXBzZXVkbycsIHtcbiAgICAgICAgbW9udGhzIDogJ0p+w6HDscO6w6F+csO9X0Z+w6licsO6fsOhcsO9X35Nw6FyY35oX8OBcH5yw61sX35Nw6HDvV9+SsO6w7HDqX5fSsO6bH7DvV/DgcO6fmfDunN0fl9Tw6lwfnTDqW1ifsOpcl/Dk35jdMOzYn7DqXJfw5F+w7N2w6ltfmLDqXJffkTDqWPDqX5tYsOpcicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAnSn7DocOxX35Gw6liX35Nw6FyX37DgXByX35Nw6HDvV9+SsO6w7FffkrDumxffsOBw7pnX35Tw6lwX37Dk2N0X37DkcOzdl9+RMOpYycuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdCA6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzIDogJ1N+w7rDsWTDoX7DvV9Nw7N+w7Fkw6HDvX5fVMO6w6l+c2TDocO9fl9Xw6lkfsOxw6lzZH7DocO9X1R+aMO6cnN+ZMOhw71ffkZyw61kfsOhw71fU37DoXTDunJ+ZMOhw70nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAnU37DusOxX35Nw7PDsV9+VMO6w6lfflfDqWRfflRow7pffkZyw61fflPDoXQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ1N+w7pfTcOzfl9Uw7pfflfDqV9UfmhfRnJ+X1PDoScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0IDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdISDptbScsXG4gICAgICAgICAgICBMIDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICdbVH7Ds2TDoX7DvSDDoXRdIExUJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW1R+w7Ntw7N+cnLDs353IMOhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnZGRkZCBbw6F0XSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5IDogJ1vDnX7DqXN0fsOpcmTDoX7DvSDDoXRdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogJ1tMfsOhc3RdIGRkZGQgW8OhdF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ8OtfsOxICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAnJXMgw6F+Z8OzJyxcbiAgICAgICAgICAgIHMgOiAnw6EgfmbDqXcgfnPDqWPDs37DsWRzJyxcbiAgICAgICAgICAgIHNzIDogJyVkIHN+w6ljw7PDsX5kcycsXG4gICAgICAgICAgICBtIDogJ8OhIH5tw63DsX7DunTDqScsXG4gICAgICAgICAgICBtbSA6ICclZCBtfsOtw7HDun50w6lzJyxcbiAgICAgICAgICAgIGggOiAnw6F+w7EgaMOzfsO6cicsXG4gICAgICAgICAgICBoaCA6ICclZCBofsOzw7pycycsXG4gICAgICAgICAgICBkIDogJ8OhIH5kw6HDvScsXG4gICAgICAgICAgICBkZCA6ICclZCBkfsOhw71zJyxcbiAgICAgICAgICAgIE0gOiAnw6Egfm3Ds8OxfnRoJyxcbiAgICAgICAgICAgIE1NIDogJyVkIG1+w7PDsXR+aHMnLFxuICAgICAgICAgICAgeSA6ICfDoSB+w73DqcOhcicsXG4gICAgICAgICAgICB5eSA6ICclZCDDvX7DqcOhcnMnXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSh0aHxzdHxuZHxyZCkvLFxuICAgICAgICBvcmRpbmFsIDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAofn4obnVtYmVyICUgMTAwIC8gMTApID09PSAxKSA/ICd0aCcgOlxuICAgICAgICAgICAgICAgIChiID09PSAxKSA/ICdzdCcgOlxuICAgICAgICAgICAgICAgIChiID09PSAyKSA/ICduZCcgOlxuICAgICAgICAgICAgICAgIChiID09PSAzKSA/ICdyZCcgOiAndGgnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNCAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4geFBzZXVkbztcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///32\n")},33:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var vi = moment.defineLocale('vi', {\n        months : 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split('_'),\n        monthsShort : 'Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split('_'),\n        weekdaysShort : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n        weekdaysMin : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n        weekdaysParseExact : true,\n        meridiemParse: /sa|ch/i,\n        isPM : function (input) {\n            return /^ch$/i.test(input);\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower ? 'sa' : 'SA';\n            } else {\n                return isLower ? 'ch' : 'CH';\n            }\n        },\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM [năm] YYYY',\n            LLL : 'D MMMM [năm] YYYY HH:mm',\n            LLLL : 'dddd, D MMMM [năm] YYYY HH:mm',\n            l : 'DD/M/YYYY',\n            ll : 'D MMM YYYY',\n            lll : 'D MMM YYYY HH:mm',\n            llll : 'ddd, D MMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Hôm nay lúc] LT',\n            nextDay: '[Ngày mai lúc] LT',\n            nextWeek: 'dddd [tuần tới lúc] LT',\n            lastDay: '[Hôm qua lúc] LT',\n            lastWeek: 'dddd [tuần rồi lúc] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : '%s tới',\n            past : '%s trước',\n            s : 'vài giây',\n            ss : '%d giây' ,\n            m : 'một phút',\n            mm : '%d phút',\n            h : 'một giờ',\n            hh : '%d giờ',\n            d : 'một ngày',\n            dd : '%d ngày',\n            M : 'một tháng',\n            MM : '%d tháng',\n            y : 'một năm',\n            yy : '%d năm'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal : function (number) {\n            return number;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return vi;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS92aS5qcz8yOTIxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiMzMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciB2aSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3ZpJywge1xuICAgICAgICBtb250aHMgOiAndGjDoW5nIDFfdGjDoW5nIDJfdGjDoW5nIDNfdGjDoW5nIDRfdGjDoW5nIDVfdGjDoW5nIDZfdGjDoW5nIDdfdGjDoW5nIDhfdGjDoW5nIDlfdGjDoW5nIDEwX3Row6FuZyAxMV90aMOhbmcgMTInLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ1RoMDFfVGgwMl9UaDAzX1RoMDRfVGgwNV9UaDA2X1RoMDdfVGgwOF9UaDA5X1RoMTBfVGgxMV9UaDEyJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0IDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXMgOiAnY2jhu6cgbmjhuq10X3Ro4bupIGhhaV90aOG7qSBiYV90aOG7qSB0xrBfdGjhu6kgbsSDbV90aOG7qSBzw6F1X3Ro4bupIGLhuqN5Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ0NOX1QyX1QzX1Q0X1Q1X1Q2X1Q3Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICdDTl9UMl9UM19UNF9UNV9UNl9UNycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0IDogdHJ1ZSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL3NhfGNoL2ksXG4gICAgICAgIGlzUE0gOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAvXmNoJC9pLnRlc3QoaW5wdXQpO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbSA6IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXJzIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdzYScgOiAnU0EnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdjaCcgOiAnQ0gnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFtuxINtXSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdEIE1NTU0gW27Eg21dIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBEIE1NTU0gW27Eg21dIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgbCA6ICdERC9NL1lZWVknLFxuICAgICAgICAgICAgbGwgOiAnRCBNTU0gWVlZWScsXG4gICAgICAgICAgICBsbGwgOiAnRCBNTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBsbGxsIDogJ2RkZCwgRCBNTU0gWVlZWSBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0jDtG0gbmF5IGzDumNdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbTmfDoHkgbWFpIGzDumNdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbdHXhuqduIHThu5tpIGzDumNdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbSMO0bSBxdWEgbMO6Y10gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFt0deG6p24gcuG7k2kgbMO6Y10gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnJXMgdOG7m2knLFxuICAgICAgICAgICAgcGFzdCA6ICclcyB0csaw4bubYycsXG4gICAgICAgICAgICBzIDogJ3bDoGkgZ2nDonknLFxuICAgICAgICAgICAgc3MgOiAnJWQgZ2nDonknICxcbiAgICAgICAgICAgIG0gOiAnbeG7mXQgcGjDunQnLFxuICAgICAgICAgICAgbW0gOiAnJWQgcGjDunQnLFxuICAgICAgICAgICAgaCA6ICdt4buZdCBnaeG7nScsXG4gICAgICAgICAgICBoaCA6ICclZCBnaeG7nScsXG4gICAgICAgICAgICBkIDogJ23hu5l0IG5nw6B5JyxcbiAgICAgICAgICAgIGRkIDogJyVkIG5nw6B5JyxcbiAgICAgICAgICAgIE0gOiAnbeG7mXQgdGjDoW5nJyxcbiAgICAgICAgICAgIE1NIDogJyVkIHRow6FuZycsXG4gICAgICAgICAgICB5IDogJ23hu5l0IG7Eg20nLFxuICAgICAgICAgICAgeXkgOiAnJWQgbsSDbSdcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9LyxcbiAgICAgICAgb3JkaW5hbCA6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHZpO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///33\n")},34:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var uzLatn = moment.defineLocale('uz-latn', {\n        months : 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split('_'),\n        monthsShort : 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'),\n        weekdays : 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split('_'),\n        weekdaysShort : 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'),\n        weekdaysMin : 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'D MMMM YYYY, dddd HH:mm'\n        },\n        calendar : {\n            sameDay : '[Bugun soat] LT [da]',\n            nextDay : '[Ertaga] LT [da]',\n            nextWeek : 'dddd [kuni soat] LT [da]',\n            lastDay : '[Kecha soat] LT [da]',\n            lastWeek : '[O\\'tgan] dddd [kuni soat] LT [da]',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'Yaqin %s ichida',\n            past : 'Bir necha %s oldin',\n            s : 'soniya',\n            ss : '%d soniya',\n            m : 'bir daqiqa',\n            mm : '%d daqiqa',\n            h : 'bir soat',\n            hh : '%d soat',\n            d : 'bir kun',\n            dd : '%d kun',\n            M : 'bir oy',\n            MM : '%d oy',\n            y : 'bir yil',\n            yy : '%d yil'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return uzLatn;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91ei1sYXRuLmpzPzAxMGUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLENBQVc7QUFDckUsR0FBRyxTQUNzQjtBQUN6QixDQUFDLDJCQUEyQjs7O0FBRzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiIzNC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIHV6TGF0biA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3V6LWxhdG4nLCB7XG4gICAgICAgIG1vbnRocyA6ICdZYW52YXJfRmV2cmFsX01hcnRfQXByZWxfTWF5X0l5dW5fSXl1bF9Bdmd1c3RfU2VudGFicl9Pa3RhYnJfTm95YWJyX0Rla2Ficicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAnWWFuX0Zldl9NYXJfQXByX01heV9JeXVuX0l5dWxfQXZnX1Nlbl9Pa3RfTm95X0Rlaycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXMgOiAnWWFrc2hhbmJhX0R1c2hhbmJhX1Nlc2hhbmJhX0Nob3JzaGFuYmFfUGF5c2hhbmJhX0p1bWFfU2hhbmJhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ1lha19EdXNoX1Nlc2hfQ2hvcl9QYXlfSnVtX1NoYW4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ1lhX0R1X1NlX0Nob19QYV9KdV9TaGEnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdEIE1NTU0gWVlZWSwgZGRkZCBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1tCdWd1biBzb2F0XSBMVCBbZGFdJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW0VydGFnYV0gTFQgW2RhXScsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdkZGRkIFtrdW5pIHNvYXRdIExUIFtkYV0nLFxuICAgICAgICAgICAgbGFzdERheSA6ICdbS2VjaGEgc29hdF0gTFQgW2RhXScsXG4gICAgICAgICAgICBsYXN0V2VlayA6ICdbT1xcJ3RnYW5dIGRkZGQgW2t1bmkgc29hdF0gTFQgW2RhXScsXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnWWFxaW4gJXMgaWNoaWRhJyxcbiAgICAgICAgICAgIHBhc3QgOiAnQmlyIG5lY2hhICVzIG9sZGluJyxcbiAgICAgICAgICAgIHMgOiAnc29uaXlhJyxcbiAgICAgICAgICAgIHNzIDogJyVkIHNvbml5YScsXG4gICAgICAgICAgICBtIDogJ2JpciBkYXFpcWEnLFxuICAgICAgICAgICAgbW0gOiAnJWQgZGFxaXFhJyxcbiAgICAgICAgICAgIGggOiAnYmlyIHNvYXQnLFxuICAgICAgICAgICAgaGggOiAnJWQgc29hdCcsXG4gICAgICAgICAgICBkIDogJ2JpciBrdW4nLFxuICAgICAgICAgICAgZGQgOiAnJWQga3VuJyxcbiAgICAgICAgICAgIE0gOiAnYmlyIG95JyxcbiAgICAgICAgICAgIE1NIDogJyVkIG95JyxcbiAgICAgICAgICAgIHkgOiAnYmlyIHlpbCcsXG4gICAgICAgICAgICB5eSA6ICclZCB5aWwnXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDcgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDFzdCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHV6TGF0bjtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///34\n")},35:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var uz = moment.defineLocale('uz', {\n        months : 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'),\n        monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n        weekdays : 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),\n        weekdaysShort : 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),\n        weekdaysMin : 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'D MMMM YYYY, dddd HH:mm'\n        },\n        calendar : {\n            sameDay : '[Бугун соат] LT [да]',\n            nextDay : '[Эртага] LT [да]',\n            nextWeek : 'dddd [куни соат] LT [да]',\n            lastDay : '[Кеча соат] LT [да]',\n            lastWeek : '[Утган] dddd [куни соат] LT [да]',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'Якин %s ичида',\n            past : 'Бир неча %s олдин',\n            s : 'фурсат',\n            ss : '%d фурсат',\n            m : 'бир дакика',\n            mm : '%d дакика',\n            h : 'бир соат',\n            hh : '%d соат',\n            d : 'бир кун',\n            dd : '%d кун',\n            M : 'бир ой',\n            MM : '%d ой',\n            y : 'бир йил',\n            yy : '%d йил'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return uz;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91ei5qcz8yZThjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiMzUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciB1eiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3V6Jywge1xuICAgICAgICBtb250aHMgOiAn0Y/QvdCy0LDRgF/RhNC10LLRgNCw0Ltf0LzQsNGA0YJf0LDQv9GA0LXQu1/QvNCw0Llf0LjRjtC9X9C40Y7Qu1/QsNCy0LPRg9GB0YJf0YHQtdC90YLRj9Cx0YBf0L7QutGC0Y/QsdGAX9C90L7Rj9Cx0YBf0LTQtdC60LDQsdGAJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICfRj9C90LJf0YTQtdCyX9C80LDRgF/QsNC/0YBf0LzQsNC5X9C40Y7QvV/QuNGO0Ltf0LDQstCzX9GB0LXQvV/QvtC60YJf0L3QvtGPX9C00LXQuicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXMgOiAn0K/QutGI0LDQvdCx0LBf0JTRg9GI0LDQvdCx0LBf0KHQtdGI0LDQvdCx0LBf0KfQvtGA0YjQsNC90LHQsF/Qn9Cw0LnRiNCw0L3QsdCwX9CW0YPQvNCwX9Co0LDQvdCx0LAnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAn0K/QutGIX9CU0YPRiF/QodC10Yhf0KfQvtGAX9Cf0LDQuV/QltGD0Lxf0KjQsNC9Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICfQr9C6X9CU0YNf0KHQtV/Qp9C+X9Cf0LBf0JbRg1/QqNCwJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnRCBNTU1NIFlZWVksIGRkZGQgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICdb0JHRg9Cz0YPQvSDRgdC+0LDRgl0gTFQgW9C00LBdJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW9Ct0YDRgtCw0LPQsF0gTFQgW9C00LBdJyxcbiAgICAgICAgICAgIG5leHRXZWVrIDogJ2RkZGQgW9C60YPQvdC4INGB0L7QsNGCXSBMVCBb0LTQsF0nLFxuICAgICAgICAgICAgbGFzdERheSA6ICdb0JrQtdGH0LAg0YHQvtCw0YJdIExUIFvQtNCwXScsXG4gICAgICAgICAgICBsYXN0V2VlayA6ICdb0KPRgtCz0LDQvV0gZGRkZCBb0LrRg9C90Lgg0YHQvtCw0YJdIExUIFvQtNCwXScsXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAn0K/QutC40L0gJXMg0LjRh9C40LTQsCcsXG4gICAgICAgICAgICBwYXN0IDogJ9CR0LjRgCDQvdC10YfQsCAlcyDQvtC70LTQuNC9JyxcbiAgICAgICAgICAgIHMgOiAn0YTRg9GA0YHQsNGCJyxcbiAgICAgICAgICAgIHNzIDogJyVkINGE0YPRgNGB0LDRgicsXG4gICAgICAgICAgICBtIDogJ9Cx0LjRgCDQtNCw0LrQuNC60LAnLFxuICAgICAgICAgICAgbW0gOiAnJWQg0LTQsNC60LjQutCwJyxcbiAgICAgICAgICAgIGggOiAn0LHQuNGAINGB0L7QsNGCJyxcbiAgICAgICAgICAgIGhoIDogJyVkINGB0L7QsNGCJyxcbiAgICAgICAgICAgIGQgOiAn0LHQuNGAINC60YPQvScsXG4gICAgICAgICAgICBkZCA6ICclZCDQutGD0L0nLFxuICAgICAgICAgICAgTSA6ICfQsdC40YAg0L7QuScsXG4gICAgICAgICAgICBNTSA6ICclZCDQvtC5JyxcbiAgICAgICAgICAgIHkgOiAn0LHQuNGAINC50LjQuycsXG4gICAgICAgICAgICB5eSA6ICclZCDQudC40LsnXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDcgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHV6O1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///35\n")},36:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var months = [\n        'جنوری',\n        'فروری',\n        'مارچ',\n        'اپریل',\n        'مئی',\n        'جون',\n        'جولائی',\n        'اگست',\n        'ستمبر',\n        'اکتوبر',\n        'نومبر',\n        'دسمبر'\n    ];\n    var days = [\n        'اتوار',\n        'پیر',\n        'منگل',\n        'بدھ',\n        'جمعرات',\n        'جمعہ',\n        'ہفتہ'\n    ];\n\n    var ur = moment.defineLocale('ur', {\n        months : months,\n        monthsShort : months,\n        weekdays : days,\n        weekdaysShort : days,\n        weekdaysMin : days,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd، D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /صبح|شام/,\n        isPM : function (input) {\n            return 'شام' === input;\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'صبح';\n            }\n            return 'شام';\n        },\n        calendar : {\n            sameDay : '[آج بوقت] LT',\n            nextDay : '[کل بوقت] LT',\n            nextWeek : 'dddd [بوقت] LT',\n            lastDay : '[گذشتہ روز بوقت] LT',\n            lastWeek : '[گذشتہ] dddd [بوقت] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s بعد',\n            past : '%s قبل',\n            s : 'چند سیکنڈ',\n            ss : '%d سیکنڈ',\n            m : 'ایک منٹ',\n            mm : '%d منٹ',\n            h : 'ایک گھنٹہ',\n            hh : '%d گھنٹے',\n            d : 'ایک دن',\n            dd : '%d دن',\n            M : 'ایک ماہ',\n            MM : '%d ماہ',\n            y : 'ایک سال',\n            yy : '%d سال'\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return ur;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91ci5qcz81Mjk0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiMzYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBtb250aHMgPSBbXG4gICAgICAgICfYrNmG2YjYsduMJyxcbiAgICAgICAgJ9mB2LHZiNix24wnLFxuICAgICAgICAn2YXYp9ix2oYnLFxuICAgICAgICAn2KfZvtix24zZhCcsXG4gICAgICAgICfZhdim24wnLFxuICAgICAgICAn2KzZiNmGJyxcbiAgICAgICAgJ9is2YjZhNin2KbbjCcsXG4gICAgICAgICfYp9qv2LPYqicsXG4gICAgICAgICfYs9iq2YXYqNixJyxcbiAgICAgICAgJ9in2qnYqtmI2KjYsScsXG4gICAgICAgICfZhtmI2YXYqNixJyxcbiAgICAgICAgJ9iv2LPZhdio2LEnXG4gICAgXTtcbiAgICB2YXIgZGF5cyA9IFtcbiAgICAgICAgJ9in2KrZiNin2LEnLFxuICAgICAgICAn2b7bjNixJyxcbiAgICAgICAgJ9mF2Ybar9mEJyxcbiAgICAgICAgJ9io2K/avicsXG4gICAgICAgICfYrNmF2LnYsdin2KonLFxuICAgICAgICAn2KzZhdi524EnLFxuICAgICAgICAn24HZgdiq24EnXG4gICAgXTtcblxuICAgIHZhciB1ciA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3VyJywge1xuICAgICAgICBtb250aHMgOiBtb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0IDogbW9udGhzLFxuICAgICAgICB3ZWVrZGF5cyA6IGRheXMsXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiBkYXlzLFxuICAgICAgICB3ZWVrZGF5c01pbiA6IGRheXMsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRk2IwgRCBNTU1NIFlZWVkgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/Ytdio2K182LTYp9mFLyxcbiAgICAgICAgaXNQTSA6IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuICfYtNin2YUnID09PSBpbnB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW0gOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfYtdio2K0nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICfYtNin2YUnO1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgOiAnW9ii2Kwg2KjZiNmC2KpdIExUJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW9qp2YQg2KjZiNmC2KpdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrIDogJ2RkZGQgW9io2YjZgtiqXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5IDogJ1var9iw2LTYqtuBINix2YjYsiDYqNmI2YLYql0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiAnW9qv2LDYtNiq24FdIGRkZGQgW9io2YjZgtiqXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnJXMg2KjYudivJyxcbiAgICAgICAgICAgIHBhc3QgOiAnJXMg2YLYqNmEJyxcbiAgICAgICAgICAgIHMgOiAn2obZhtivINiz24zaqdmG2ognLFxuICAgICAgICAgICAgc3MgOiAnJWQg2LPbjNqp2YbaiCcsXG4gICAgICAgICAgICBtIDogJ9in24zaqSDZhdmG2bknLFxuICAgICAgICAgICAgbW0gOiAnJWQg2YXZhtm5JyxcbiAgICAgICAgICAgIGggOiAn2KfbjNqpINqv2r7Zhtm524EnLFxuICAgICAgICAgICAgaGggOiAnJWQg2q/avtmG2bnbkicsXG4gICAgICAgICAgICBkIDogJ9in24zaqSDYr9mGJyxcbiAgICAgICAgICAgIGRkIDogJyVkINiv2YYnLFxuICAgICAgICAgICAgTSA6ICfYp9uM2qkg2YXYp9uBJyxcbiAgICAgICAgICAgIE1NIDogJyVkINmF2KfbgScsXG4gICAgICAgICAgICB5IDogJ9in24zaqSDYs9in2YQnLFxuICAgICAgICAgICAgeXkgOiAnJWQg2LPYp9mEJ1xuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC/YjC9nLCAnLCcpO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoLywvZywgJ9iMJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHVyO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///36\n")},37:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            'ss': withoutSuffix ? 'секунда_секунди_секунд' : 'секунду_секунди_секунд',\n            'mm': withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',\n            'hh': withoutSuffix ? 'година_години_годин' : 'годину_години_годин',\n            'dd': 'день_дні_днів',\n            'MM': 'місяць_місяці_місяців',\n            'yy': 'рік_роки_років'\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'хвилина' : 'хвилину';\n        }\n        else if (key === 'h') {\n            return withoutSuffix ? 'година' : 'годину';\n        }\n        else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n    function weekdaysCaseReplace(m, format) {\n        var weekdays = {\n            'nominative': 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'),\n            'accusative': 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split('_'),\n            'genitive': 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split('_')\n        };\n\n        if (!m) {\n            return weekdays['nominative'];\n        }\n\n        var nounCase = (/(\\[[ВвУу]\\]) ?dddd/).test(format) ?\n            'accusative' :\n            ((/\\[?(?:минулої|наступної)? ?\\] ?dddd/).test(format) ?\n                'genitive' :\n                'nominative');\n        return weekdays[nounCase][m.day()];\n    }\n    function processHoursFunction(str) {\n        return function () {\n            return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';\n        };\n    }\n\n    var uk = moment.defineLocale('uk', {\n        months : {\n            'format': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_'),\n            'standalone': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_')\n        },\n        monthsShort : 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split('_'),\n        weekdays : weekdaysCaseReplace,\n        weekdaysShort : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY р.',\n            LLL : 'D MMMM YYYY р., HH:mm',\n            LLLL : 'dddd, D MMMM YYYY р., HH:mm'\n        },\n        calendar : {\n            sameDay: processHoursFunction('[Сьогодні '),\n            nextDay: processHoursFunction('[Завтра '),\n            lastDay: processHoursFunction('[Вчора '),\n            nextWeek: processHoursFunction('[У] dddd ['),\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 5:\n                    case 6:\n                        return processHoursFunction('[Минулої] dddd [').call(this);\n                    case 1:\n                    case 2:\n                    case 4:\n                        return processHoursFunction('[Минулого] dddd [').call(this);\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'за %s',\n            past : '%s тому',\n            s : 'декілька секунд',\n            ss : relativeTimeWithPlural,\n            m : relativeTimeWithPlural,\n            mm : relativeTimeWithPlural,\n            h : 'годину',\n            hh : relativeTimeWithPlural,\n            d : 'день',\n            dd : relativeTimeWithPlural,\n            M : 'місяць',\n            MM : relativeTimeWithPlural,\n            y : 'рік',\n            yy : relativeTimeWithPlural\n        },\n        // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason\n        meridiemParse: /ночі|ранку|дня|вечора/,\n        isPM: function (input) {\n            return /^(дня|вечора)$/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночі';\n            } else if (hour < 12) {\n                return 'ранку';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечора';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(й|го)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                case 'w':\n                case 'W':\n                    return number + '-й';\n                case 'D':\n                    return number + '-го';\n                default:\n                    return number;\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return uk;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91ay5qcz9hZGEyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiIzNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgZnVuY3Rpb24gcGx1cmFsKHdvcmQsIG51bSkge1xuICAgICAgICB2YXIgZm9ybXMgPSB3b3JkLnNwbGl0KCdfJyk7XG4gICAgICAgIHJldHVybiBudW0gJSAxMCA9PT0gMSAmJiBudW0gJSAxMDAgIT09IDExID8gZm9ybXNbMF0gOiAobnVtICUgMTAgPj0gMiAmJiBudW0gJSAxMCA8PSA0ICYmIChudW0gJSAxMDAgPCAxMCB8fCBudW0gJSAxMDAgPj0gMjApID8gZm9ybXNbMV0gOiBmb3Jtc1syXSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbGF0aXZlVGltZVdpdGhQbHVyYWwobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXkpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHtcbiAgICAgICAgICAgICdzcyc6IHdpdGhvdXRTdWZmaXggPyAn0YHQtdC60YPQvdC00LBf0YHQtdC60YPQvdC00Lhf0YHQtdC60YPQvdC0JyA6ICfRgdC10LrRg9C90LTRg1/RgdC10LrRg9C90LTQuF/RgdC10LrRg9C90LQnLFxuICAgICAgICAgICAgJ21tJzogd2l0aG91dFN1ZmZpeCA/ICfRhdCy0LjQu9C40L3QsF/RhdCy0LjQu9C40L3QuF/RhdCy0LjQu9C40L0nIDogJ9GF0LLQuNC70LjQvdGDX9GF0LLQuNC70LjQvdC4X9GF0LLQuNC70LjQvScsXG4gICAgICAgICAgICAnaGgnOiB3aXRob3V0U3VmZml4ID8gJ9Cz0L7QtNC40L3QsF/Qs9C+0LTQuNC90Lhf0LPQvtC00LjQvScgOiAn0LPQvtC00LjQvdGDX9Cz0L7QtNC40L3QuF/Qs9C+0LTQuNC9JyxcbiAgICAgICAgICAgICdkZCc6ICfQtNC10L3RjF/QtNC90ZZf0LTQvdGW0LInLFxuICAgICAgICAgICAgJ01NJzogJ9C80ZbRgdGP0YbRjF/QvNGW0YHRj9GG0ZZf0LzRltGB0Y/RhtGW0LInLFxuICAgICAgICAgICAgJ3l5JzogJ9GA0ZbQul/RgNC+0LrQuF/RgNC+0LrRltCyJ1xuICAgICAgICB9O1xuICAgICAgICBpZiAoa2V5ID09PSAnbScpIHtcbiAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ9GF0LLQuNC70LjQvdCwJyA6ICfRhdCy0LjQu9C40L3Rgyc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoa2V5ID09PSAnaCcpIHtcbiAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ9Cz0L7QtNC40L3QsCcgOiAn0LPQvtC00LjQvdGDJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnICcgKyBwbHVyYWwoZm9ybWF0W2tleV0sICtudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdlZWtkYXlzQ2FzZVJlcGxhY2UobSwgZm9ybWF0KSB7XG4gICAgICAgIHZhciB3ZWVrZGF5cyA9IHtcbiAgICAgICAgICAgICdub21pbmF0aXZlJzogJ9C90LXQtNGW0LvRj1/Qv9C+0L3QtdC00ZbQu9C+0Lpf0LLRltCy0YLQvtGA0L7Qul/RgdC10YDQtdC00LBf0YfQtdGC0LLQtdGAX9C/4oCZ0Y/RgtC90LjRhtGPX9GB0YPQsdC+0YLQsCcuc3BsaXQoJ18nKSxcbiAgICAgICAgICAgICdhY2N1c2F0aXZlJzogJ9C90LXQtNGW0LvRjl/Qv9C+0L3QtdC00ZbQu9C+0Lpf0LLRltCy0YLQvtGA0L7Qul/RgdC10YDQtdC00YNf0YfQtdGC0LLQtdGAX9C/4oCZ0Y/RgtC90LjRhtGOX9GB0YPQsdC+0YLRgycuc3BsaXQoJ18nKSxcbiAgICAgICAgICAgICdnZW5pdGl2ZSc6ICfQvdC10LTRltC70ZZf0L/QvtC90LXQtNGW0LvQutCwX9Cy0ZbQstGC0L7RgNC60LBf0YHQtdGA0LXQtNC4X9GH0LXRgtCy0LXRgNCz0LBf0L/igJnRj9GC0L3QuNGG0ZZf0YHRg9Cx0L7RgtC4Jy5zcGxpdCgnXycpXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gd2Vla2RheXNbJ25vbWluYXRpdmUnXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBub3VuQ2FzZSA9ICgvKFxcW1vQktCy0KPRg11cXF0pID9kZGRkLykudGVzdChmb3JtYXQpID9cbiAgICAgICAgICAgICdhY2N1c2F0aXZlJyA6XG4gICAgICAgICAgICAoKC9cXFs/KD860LzQuNC90YPQu9C+0Zd80L3QsNGB0YLRg9C/0L3QvtGXKT8gP1xcXSA/ZGRkZC8pLnRlc3QoZm9ybWF0KSA/XG4gICAgICAgICAgICAgICAgJ2dlbml0aXZlJyA6XG4gICAgICAgICAgICAgICAgJ25vbWluYXRpdmUnKTtcbiAgICAgICAgcmV0dXJuIHdlZWtkYXlzW25vdW5DYXNlXVttLmRheSgpXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHJvY2Vzc0hvdXJzRnVuY3Rpb24oc3RyKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyICsgJ9C+JyArICh0aGlzLmhvdXJzKCkgPT09IDExID8gJ9CxJyA6ICcnKSArICddIExUJztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgdWsgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd1aycsIHtcbiAgICAgICAgbW9udGhzIDoge1xuICAgICAgICAgICAgJ2Zvcm1hdCc6ICfRgdGW0YfQvdGPX9C70Y7RgtC+0LPQvl/QsdC10YDQtdC30L3Rj1/QutCy0ZbRgtC90Y9f0YLRgNCw0LLQvdGPX9GH0LXRgNCy0L3Rj1/Qu9C40L/QvdGPX9GB0LXRgNC/0L3Rj1/QstC10YDQtdGB0L3Rj1/QttC+0LLRgtC90Y9f0LvQuNGB0YLQvtC/0LDQtNCwX9Cz0YDRg9C00L3Rjycuc3BsaXQoJ18nKSxcbiAgICAgICAgICAgICdzdGFuZGFsb25lJzogJ9GB0ZbRh9C10L3RjF/Qu9GO0YLQuNC5X9Cx0LXRgNC10LfQtdC90Yxf0LrQstGW0YLQtdC90Yxf0YLRgNCw0LLQtdC90Yxf0YfQtdGA0LLQtdC90Yxf0LvQuNC/0LXQvdGMX9GB0LXRgNC/0LXQvdGMX9Cy0LXRgNC10YHQtdC90Yxf0LbQvtCy0YLQtdC90Yxf0LvQuNGB0YLQvtC/0LDQtF/Qs9GA0YPQtNC10L3RjCcuc3BsaXQoJ18nKVxuICAgICAgICB9LFxuICAgICAgICBtb250aHNTaG9ydCA6ICfRgdGW0Ydf0LvRjtGCX9Cx0LXRgF/QutCy0ZbRgl/RgtGA0LDQsl/Rh9C10YDQsl/Qu9C40L9f0YHQtdGA0L9f0LLQtdGAX9C20L7QstGCX9C70LjRgdGCX9Cz0YDRg9C0Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6IHdlZWtkYXlzQ2FzZVJlcGxhY2UsXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAn0L3QtF/Qv9C9X9Cy0YJf0YHRgF/Rh9GCX9C/0YJf0YHQsScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAn0L3QtF/Qv9C9X9Cy0YJf0YHRgF/Rh9GCX9C/0YJf0YHQsScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdISDptbScsXG4gICAgICAgICAgICBMVFMgOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QgTU1NTSBZWVlZINGALicsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVkg0YAuLCBISDptbScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQsIEQgTU1NTSBZWVlZINGALiwgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheTogcHJvY2Vzc0hvdXJzRnVuY3Rpb24oJ1vQodGM0L7Qs9C+0LTQvdGWICcpLFxuICAgICAgICAgICAgbmV4dERheTogcHJvY2Vzc0hvdXJzRnVuY3Rpb24oJ1vQl9Cw0LLRgtGA0LAgJyksXG4gICAgICAgICAgICBsYXN0RGF5OiBwcm9jZXNzSG91cnNGdW5jdGlvbignW9CS0YfQvtGA0LAgJyksXG4gICAgICAgICAgICBuZXh0V2VlazogcHJvY2Vzc0hvdXJzRnVuY3Rpb24oJ1vQo10gZGRkZCBbJyksXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvY2Vzc0hvdXJzRnVuY3Rpb24oJ1vQnNC40L3Rg9C70L7Rl10gZGRkZCBbJykuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9jZXNzSG91cnNGdW5jdGlvbignW9Cc0LjQvdGD0LvQvtCz0L5dIGRkZGQgWycpLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ9C30LAgJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICclcyDRgtC+0LzRgycsXG4gICAgICAgICAgICBzIDogJ9C00LXQutGW0LvRjNC60LAg0YHQtdC60YPQvdC0JyxcbiAgICAgICAgICAgIHNzIDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIG0gOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgbW0gOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgaCA6ICfQs9C+0LTQuNC90YMnLFxuICAgICAgICAgICAgaGggOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgZCA6ICfQtNC10L3RjCcsXG4gICAgICAgICAgICBkZCA6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBNIDogJ9C80ZbRgdGP0YbRjCcsXG4gICAgICAgICAgICBNTSA6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICB5IDogJ9GA0ZbQuicsXG4gICAgICAgICAgICB5eSA6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWxcbiAgICAgICAgfSxcbiAgICAgICAgLy8gTS4gRS46IHRob3NlIHR3byBhcmUgdmlydHVhbGx5IHVudXNlZCBidXQgYSB1c2VyIG1pZ2h0IHdhbnQgdG8gaW1wbGVtZW50IHRoZW0gZm9yIGhpcy9oZXIgd2Vic2l0ZSBmb3Igc29tZSByZWFzb25cbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9C90L7Rh9GWfNGA0LDQvdC60YN80LTQvdGPfNCy0LXRh9C+0YDQsC8sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIC9eKNC00L3Rj3zQstC10YfQvtGA0LApJC8udGVzdChpbnB1dCk7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtIDogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfQvdC+0YfRlic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0YDQsNC90LrRgyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0LTQvdGPJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfQstC10YfQvtGA0LAnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0tKNC5fNCz0L4pLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgY2FzZSAndyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnVyc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdC5JztcbiAgICAgICAgICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0LPQvic7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNyAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMXN0IGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdWs7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///37\n")},38:function(module,exports,__webpack_require__){eval("//! moment.js language configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var ugCn = moment.defineLocale('ug-cn', {\n        months: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n            '_'\n        ),\n        monthsShort: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n            '_'\n        ),\n        weekdays: 'يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە'.split(\n            '_'\n        ),\n        weekdaysShort: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n        weekdaysMin: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'YYYY-يىلىM-ئاينىڭD-كۈنى',\n            LLL: 'YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',\n            LLLL: 'dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm'\n        },\n        meridiemParse: /يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (\n                meridiem === 'يېرىم كېچە' ||\n                meridiem === 'سەھەر' ||\n                meridiem === 'چۈشتىن بۇرۇن'\n            ) {\n                return hour;\n            } else if (meridiem === 'چۈشتىن كېيىن' || meridiem === 'كەچ') {\n                return hour + 12;\n            } else {\n                return hour >= 11 ? hour : hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return 'يېرىم كېچە';\n            } else if (hm < 900) {\n                return 'سەھەر';\n            } else if (hm < 1130) {\n                return 'چۈشتىن بۇرۇن';\n            } else if (hm < 1230) {\n                return 'چۈش';\n            } else if (hm < 1800) {\n                return 'چۈشتىن كېيىن';\n            } else {\n                return 'كەچ';\n            }\n        },\n        calendar: {\n            sameDay: '[بۈگۈن سائەت] LT',\n            nextDay: '[ئەتە سائەت] LT',\n            nextWeek: '[كېلەركى] dddd [سائەت] LT',\n            lastDay: '[تۆنۈگۈن] LT',\n            lastWeek: '[ئالدىنقى] dddd [سائەت] LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: '%s كېيىن',\n            past: '%s بۇرۇن',\n            s: 'نەچچە سېكونت',\n            ss: '%d سېكونت',\n            m: 'بىر مىنۇت',\n            mm: '%d مىنۇت',\n            h: 'بىر سائەت',\n            hh: '%d سائەت',\n            d: 'بىر كۈن',\n            dd: '%d كۈن',\n            M: 'بىر ئاي',\n            MM: '%d ئاي',\n            y: 'بىر يىل',\n            yy: '%d يىل'\n        },\n\n        dayOfMonthOrdinalParse: /\\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '-كۈنى';\n                case 'w':\n                case 'W':\n                    return number + '-ھەپتە';\n                default:\n                    return number;\n            }\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n            dow: 1, // Monday is the first day of the week.\n            doy: 7 // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return ugCn;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91Zy1jbi5qcz82MTE3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiIzOC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbGFuZ3VhZ2UgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgdWdDbiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3VnLWNuJywge1xuICAgICAgICBtb250aHM6ICfZitin2Ybbi9in2LFf2YHbkNuL2LHYp9mEX9mF2KfYsdiqX9im2KfZvtix25DZhF/Zhdin2Ypf2KbZidmK24fZhl/YptmJ2Yrbh9mEX9im2Kfbi9i624fYs9iqX9iz25DZhtiq25XYqNmJ2LFf2KbbhtmD2Krbldio2YnYsV/ZhtmI2YrYp9io2YnYsV/Yr9uQ2YPYp9io2YnYsScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfZitin2Ybbi9in2LFf2YHbkNuL2LHYp9mEX9mF2KfYsdiqX9im2KfZvtix25DZhF/Zhdin2Ypf2KbZidmK24fZhl/YptmJ2Yrbh9mEX9im2Kfbi9i624fYs9iqX9iz25DZhtiq25XYqNmJ2LFf2KbbhtmD2Krbldio2YnYsV/ZhtmI2YrYp9io2YnYsV/Yr9uQ2YPYp9io2YnYsScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICfZituV2YPYtNuV2YbYqNuVX9iv24jYtNuV2YbYqNuVX9iz25XZiti025XZhtio25Vf2obYp9ix2LTbldmG2KjblV/ZvtuV2YrYtNuV2YbYqNuVX9is24jZhduVX9i025XZhtio25UnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfZituVX9iv24hf2LPblV/ahtinX9m+25Vf2KzbiF/YtNuVJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9mK25Vf2K/biF/Ys9uVX9qG2Kdf2b7blV/YrNuIX9i025UnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdZWVlZLU1NLUREJyxcbiAgICAgICAgICAgIExMOiAnWVlZWS3ZitmJ2YTZiU0t2KbYp9mK2YbZidqtRC3Zg9uI2YbZiScsXG4gICAgICAgICAgICBMTEw6ICdZWVlZLdmK2YnZhNmJTS3Yptin2YrZhtmJ2q1ELdmD24jZhtmJ2IwgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGTYjCBZWVlZLdmK2YnZhNmJTS3Yptin2YrZhtmJ2q1ELdmD24jZhtmJ2IwgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/ZituQ2LHZidmFINmD25DahtuVfNiz25XavtuV2LF82obbiNi02KrZidmGINio24fYsduH2YZ82obbiNi0fNqG24jYtNiq2YnZhiDZg9uQ2YrZidmGfNmD25Xahi8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9PT0gJ9mK25DYsdmJ2YUg2YPbkNqG25UnIHx8XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPT09ICfYs9uV2r7bldixJyB8fFxuICAgICAgICAgICAgICAgIG1lcmlkaWVtID09PSAn2obbiNi02KrZidmGINio24fYsduH2YYnXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfahtuI2LTYqtmJ2YYg2YPbkNmK2YnZhicgfHwgbWVyaWRpZW0gPT09ICfZg9uV2oYnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTEgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgdmFyIGhtID0gaG91ciAqIDEwMCArIG1pbnV0ZTtcbiAgICAgICAgICAgIGlmIChobSA8IDYwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn2YrbkNix2YnZhSDZg9uQ2obblSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgOTAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfYs9uV2r7bldixJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCAxMTMwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfahtuI2LTYqtmJ2YYg2Kjbh9ix24fZhic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgMTIzMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn2obbiNi0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCAxODAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfahtuI2LTYqtmJ2YYg2YPbkNmK2YnZhic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn2YPbldqGJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb2KjbiNqv24jZhiDYs9in2KbbldiqXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9im25XYqtuVINiz2KfYptuV2KpdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW9mD25DZhNuV2LHZg9mJXSBkZGRkIFvYs9in2KbbldiqXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9iq24bZhtuI2q/biNmGXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vYptin2YTYr9mJ2YbZgtmJXSBkZGRkIFvYs9in2KbbldiqXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg2YPbkNmK2YnZhicsXG4gICAgICAgICAgICBwYXN0OiAnJXMg2Kjbh9ix24fZhicsXG4gICAgICAgICAgICBzOiAn2YbbldqG2obblSDYs9uQ2YPZiNmG2KonLFxuICAgICAgICAgICAgc3M6ICclZCDYs9uQ2YPZiNmG2KonLFxuICAgICAgICAgICAgbTogJ9io2YnYsSDZhdmJ2Ybbh9iqJyxcbiAgICAgICAgICAgIG1tOiAnJWQg2YXZidmG24fYqicsXG4gICAgICAgICAgICBoOiAn2KjZidixINiz2KfYptuV2KonLFxuICAgICAgICAgICAgaGg6ICclZCDYs9in2KbbldiqJyxcbiAgICAgICAgICAgIGQ6ICfYqNmJ2LEg2YPbiNmGJyxcbiAgICAgICAgICAgIGRkOiAnJWQg2YPbiNmGJyxcbiAgICAgICAgICAgIE06ICfYqNmJ2LEg2KbYp9mKJyxcbiAgICAgICAgICAgIE1NOiAnJWQg2KbYp9mKJyxcbiAgICAgICAgICAgIHk6ICfYqNmJ2LEg2YrZidmEJyxcbiAgICAgICAgICAgIHl5OiAnJWQg2YrZidmEJ1xuICAgICAgICB9LFxuXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSgt2YPbiNmG2Yl8Ldim2KfZinwt2r7bldm+2KrblSkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct2YPbiNmG2YknO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3cnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3avtuV2b7YqtuVJztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC/YjC9nLCAnLCcpO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoLywvZywgJ9iMJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIC8vIEdCL1QgNzQwOC0xOTk044CK5pWw5o2u5YWD5ZKM5Lqk5o2i5qC85byPwrfkv6Hmga/kuqTmjaLCt+aXpeacn+WSjOaXtumXtOihqOekuuazleOAi+S4jklTTyA4NjAxOjE5ODjnrYnmlYhcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMXN0IGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdWdDbjtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///38\n")},39:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var tzmLatn = moment.defineLocale('tzm-latn', {\n        months : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),\n        monthsShort : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),\n        weekdays : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        weekdaysShort : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        weekdaysMin : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[asdkh g] LT',\n            nextDay: '[aska g] LT',\n            nextWeek: 'dddd [g] LT',\n            lastDay: '[assant g] LT',\n            lastWeek: 'dddd [g] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'dadkh s yan %s',\n            past : 'yan %s',\n            s : 'imik',\n            ss : '%d imik',\n            m : 'minuḍ',\n            mm : '%d minuḍ',\n            h : 'saɛa',\n            hh : '%d tassaɛin',\n            d : 'ass',\n            dd : '%d ossan',\n            M : 'ayowr',\n            MM : '%d iyyirn',\n            y : 'asgas',\n            yy : '%d isgasn'\n        },\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return tzmLatn;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90em0tbGF0bi5qcz9iNTNkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiMzkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciB0em1MYXRuID0gbW9tZW50LmRlZmluZUxvY2FsZSgndHptLWxhdG4nLCB7XG4gICAgICAgIG1vbnRocyA6ICdpbm5heXJfYnLLpGF5csukX21hcsukc8ukX2licmlyX21heXl3X3l3bnl3X3l3bHl3el/Jo3fFoXRfxaF3dGFuYmlyX2t0y6R3YnLLpF9ud3dhbmJpcl9kd2puYmlyJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICdpbm5heXJfYnLLpGF5csukX21hcsukc8ukX2licmlyX21heXl3X3l3bnl3X3l3bHl3el/Jo3fFoXRfxaF3dGFuYmlyX2t0y6R3YnLLpF9ud3dhbmJpcl9kd2puYmlyJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6ICdhc2FtYXNfYXluYXNfYXNpbmFzX2FrcmFzX2Frd2FzX2FzaW13YXNfYXNp4biNeWFzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ2FzYW1hc19heW5hc19hc2luYXNfYWtyYXNfYWt3YXNfYXNpbXdhc19hc2nhuI15YXMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ2FzYW1hc19heW5hc19hc2luYXNfYWtyYXNfYWt3YXNfYXNpbXdhc19hc2nhuI15YXMnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbYXNka2ggZ10gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1thc2thIGddIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbZ10gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1thc3NhbnQgZ10gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFtnXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICdkYWRraCBzIHlhbiAlcycsXG4gICAgICAgICAgICBwYXN0IDogJ3lhbiAlcycsXG4gICAgICAgICAgICBzIDogJ2ltaWsnLFxuICAgICAgICAgICAgc3MgOiAnJWQgaW1paycsXG4gICAgICAgICAgICBtIDogJ21pbnXhuI0nLFxuICAgICAgICAgICAgbW0gOiAnJWQgbWludeG4jScsXG4gICAgICAgICAgICBoIDogJ3NhyZthJyxcbiAgICAgICAgICAgIGhoIDogJyVkIHRhc3NhyZtpbicsXG4gICAgICAgICAgICBkIDogJ2FzcycsXG4gICAgICAgICAgICBkZCA6ICclZCBvc3NhbicsXG4gICAgICAgICAgICBNIDogJ2F5b3dyJyxcbiAgICAgICAgICAgIE1NIDogJyVkIGl5eWlybicsXG4gICAgICAgICAgICB5IDogJ2FzZ2FzJyxcbiAgICAgICAgICAgIHl5IDogJyVkIGlzZ2FzbidcbiAgICAgICAgfSxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDYsIC8vIFNhdHVyZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiAxMiAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMXN0IGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHptTGF0bjtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///39\n")},4:function(module,__webpack_exports__,__webpack_require__){"use strict";eval("/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"d\", function() { return metadata; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return Origin; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return decorators; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"c\", function() { return deprecated; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"e\", function() { return mixin; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"f\", function() { return protocol; });\n/* harmony import */ var aurelia_pal__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0);\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n\n\n\n\nfunction isObject(val) {\n  return val && (typeof val === 'function' || (typeof val === 'undefined' ? 'undefined' : _typeof(val)) === 'object');\n}\n\nvar metadata = {\n  resource: 'aurelia:resource',\n  paramTypes: 'design:paramtypes',\n  propertyType: 'design:type',\n  properties: 'design:properties',\n  get: function get(metadataKey, target, targetKey) {\n    if (!isObject(target)) {\n      return undefined;\n    }\n    var result = metadata.getOwn(metadataKey, target, targetKey);\n    return result === undefined ? metadata.get(metadataKey, Object.getPrototypeOf(target), targetKey) : result;\n  },\n  getOwn: function getOwn(metadataKey, target, targetKey) {\n    if (!isObject(target)) {\n      return undefined;\n    }\n    return Reflect.getOwnMetadata(metadataKey, target, targetKey);\n  },\n  define: function define(metadataKey, metadataValue, target, targetKey) {\n    Reflect.defineMetadata(metadataKey, metadataValue, target, targetKey);\n  },\n  getOrCreateOwn: function getOrCreateOwn(metadataKey, Type, target, targetKey) {\n    var result = metadata.getOwn(metadataKey, target, targetKey);\n\n    if (result === undefined) {\n      result = new Type();\n      Reflect.defineMetadata(metadataKey, result, target, targetKey);\n    }\n\n    return result;\n  }\n};\n\nvar originStorage = new Map();\nvar unknownOrigin = Object.freeze({ moduleId: undefined, moduleMember: undefined });\n\nvar Origin = function () {\n  function Origin(moduleId, moduleMember) {\n    \n\n    this.moduleId = moduleId;\n    this.moduleMember = moduleMember;\n  }\n\n  Origin.get = function get(fn) {\n    var origin = originStorage.get(fn);\n\n    if (origin === undefined) {\n      aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* PLATFORM */ \"d\"].eachModule(function (key, value) {\n        if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object') {\n          for (var name in value) {\n            try {\n              var exp = value[name];\n              if (exp === fn) {\n                originStorage.set(fn, origin = new Origin(key, name));\n                return true;\n              }\n            } catch (e) {}\n          }\n        }\n\n        if (value === fn) {\n          originStorage.set(fn, origin = new Origin(key, 'default'));\n          return true;\n        }\n\n        return false;\n      });\n    }\n\n    return origin || unknownOrigin;\n  };\n\n  Origin.set = function set(fn, origin) {\n    originStorage.set(fn, origin);\n  };\n\n  return Origin;\n}();\n\nfunction decorators() {\n  for (var _len = arguments.length, rest = Array(_len), _key = 0; _key < _len; _key++) {\n    rest[_key] = arguments[_key];\n  }\n\n  var applicator = function applicator(target, key, descriptor) {\n    var i = rest.length;\n\n    if (key) {\n      descriptor = descriptor || {\n        value: target[key],\n        writable: true,\n        configurable: true,\n        enumerable: true\n      };\n\n      while (i--) {\n        descriptor = rest[i](target, key, descriptor) || descriptor;\n      }\n\n      Object.defineProperty(target, key, descriptor);\n    } else {\n      while (i--) {\n        target = rest[i](target) || target;\n      }\n    }\n\n    return target;\n  };\n\n  applicator.on = applicator;\n  return applicator;\n}\n\nfunction deprecated(optionsOrTarget, maybeKey, maybeDescriptor) {\n  function decorator(target, key, descriptor) {\n    var methodSignature = target.constructor.name + '#' + key;\n    var options = maybeKey ? {} : optionsOrTarget || {};\n    var message = 'DEPRECATION - ' + methodSignature;\n\n    if (typeof descriptor.value !== 'function') {\n      throw new SyntaxError('Only methods can be marked as deprecated.');\n    }\n\n    if (options.message) {\n      message += ' - ' + options.message;\n    }\n\n    return _extends({}, descriptor, {\n      value: function deprecationWrapper() {\n        if (options.error) {\n          throw new Error(message);\n        } else {\n          console.warn(message);\n        }\n\n        return descriptor.value.apply(this, arguments);\n      }\n    });\n  }\n\n  return maybeKey ? decorator(optionsOrTarget, maybeKey, maybeDescriptor) : decorator;\n}\n\nfunction mixin(behavior) {\n  var instanceKeys = Object.keys(behavior);\n\n  function _mixin(possible) {\n    var decorator = function decorator(target) {\n      var resolvedTarget = typeof target === 'function' ? target.prototype : target;\n\n      var i = instanceKeys.length;\n      while (i--) {\n        var property = instanceKeys[i];\n        Object.defineProperty(resolvedTarget, property, {\n          value: behavior[property],\n          writable: true\n        });\n      }\n    };\n\n    return possible ? decorator(possible) : decorator;\n  }\n\n  return _mixin;\n}\n\nfunction alwaysValid() {\n  return true;\n}\nfunction noCompose() {}\n\nfunction ensureProtocolOptions(options) {\n  if (options === undefined) {\n    options = {};\n  } else if (typeof options === 'function') {\n    options = {\n      validate: options\n    };\n  }\n\n  if (!options.validate) {\n    options.validate = alwaysValid;\n  }\n\n  if (!options.compose) {\n    options.compose = noCompose;\n  }\n\n  return options;\n}\n\nfunction createProtocolValidator(validate) {\n  return function (target) {\n    var result = validate(target);\n    return result === true;\n  };\n}\n\nfunction createProtocolAsserter(name, validate) {\n  return function (target) {\n    var result = validate(target);\n    if (result !== true) {\n      throw new Error(result || name + ' was not correctly implemented.');\n    }\n  };\n}\n\nfunction protocol(name, options) {\n  options = ensureProtocolOptions(options);\n\n  var result = function result(target) {\n    var resolvedTarget = typeof target === 'function' ? target.prototype : target;\n\n    options.compose(resolvedTarget);\n    result.assert(resolvedTarget);\n\n    Object.defineProperty(resolvedTarget, 'protocol:' + name, {\n      enumerable: false,\n      configurable: false,\n      writable: false,\n      value: true\n    });\n  };\n\n  result.validate = createProtocolValidator(options.validate);\n  result.assert = createProtocolAsserter(name, options.validate);\n\n  return result;\n}\n\nprotocol.create = function (name, options) {\n  options = ensureProtocolOptions(options);\n  var hidden = 'protocol:' + name;\n  var result = function result(target) {\n    var decorator = protocol(name, options);\n    return target ? decorator(target) : decorator;\n  };\n\n  result.decorates = function (obj) {\n    return obj[hidden] === true;\n  };\n  result.validate = createProtocolValidator(options.validate);\n  result.assert = createProtocolAsserter(name, options.validate);\n\n  return result;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXVyZWxpYS1tZXRhZGF0YS9kaXN0L25hdGl2ZS1tb2R1bGVzL2F1cmVsaWEtbWV0YWRhdGEuanM/YWFiNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLG1EQUFtRCxnQkFBZ0Isc0JBQXNCLE9BQU8sMkJBQTJCLDBCQUEwQix5REFBeUQsMkJBQTJCLEVBQUUsRUFBRSxFQUFFLGVBQWU7O0FBRTlQLG9HQUFvRyxtQkFBbUIsRUFBRSxtQkFBbUIsOEhBQThIOzs7O0FBSW5POztBQUV2QztBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQ0FBbUMsK0NBQStDOztBQUUzRTtBQUNQOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLE1BQU0sNERBQVE7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVNO0FBQ1AsaUVBQWlFLGFBQWE7QUFDOUU7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsImZpbGUiOiI0LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxudmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG5cblxuaW1wb3J0IHsgUExBVEZPUk0gfSBmcm9tICdhdXJlbGlhLXBhbCc7XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbCkge1xuICByZXR1cm4gdmFsICYmICh0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZih2YWwpKSA9PT0gJ29iamVjdCcpO1xufVxuXG5leHBvcnQgdmFyIG1ldGFkYXRhID0ge1xuICByZXNvdXJjZTogJ2F1cmVsaWE6cmVzb3VyY2UnLFxuICBwYXJhbVR5cGVzOiAnZGVzaWduOnBhcmFtdHlwZXMnLFxuICBwcm9wZXJ0eVR5cGU6ICdkZXNpZ246dHlwZScsXG4gIHByb3BlcnRpZXM6ICdkZXNpZ246cHJvcGVydGllcycsXG4gIGdldDogZnVuY3Rpb24gZ2V0KG1ldGFkYXRhS2V5LCB0YXJnZXQsIHRhcmdldEtleSkge1xuICAgIGlmICghaXNPYmplY3QodGFyZ2V0KSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IG1ldGFkYXRhLmdldE93bihtZXRhZGF0YUtleSwgdGFyZ2V0LCB0YXJnZXRLZXkpO1xuICAgIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IG1ldGFkYXRhLmdldChtZXRhZGF0YUtleSwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldCksIHRhcmdldEtleSkgOiByZXN1bHQ7XG4gIH0sXG4gIGdldE93bjogZnVuY3Rpb24gZ2V0T3duKG1ldGFkYXRhS2V5LCB0YXJnZXQsIHRhcmdldEtleSkge1xuICAgIGlmICghaXNPYmplY3QodGFyZ2V0KSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIFJlZmxlY3QuZ2V0T3duTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCwgdGFyZ2V0S2V5KTtcbiAgfSxcbiAgZGVmaW5lOiBmdW5jdGlvbiBkZWZpbmUobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsIHRhcmdldCwgdGFyZ2V0S2V5KSB7XG4gICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSwgdGFyZ2V0LCB0YXJnZXRLZXkpO1xuICB9LFxuICBnZXRPckNyZWF0ZU93bjogZnVuY3Rpb24gZ2V0T3JDcmVhdGVPd24obWV0YWRhdGFLZXksIFR5cGUsIHRhcmdldCwgdGFyZ2V0S2V5KSB7XG4gICAgdmFyIHJlc3VsdCA9IG1ldGFkYXRhLmdldE93bihtZXRhZGF0YUtleSwgdGFyZ2V0LCB0YXJnZXRLZXkpO1xuXG4gICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXN1bHQgPSBuZXcgVHlwZSgpO1xuICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShtZXRhZGF0YUtleSwgcmVzdWx0LCB0YXJnZXQsIHRhcmdldEtleSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufTtcblxudmFyIG9yaWdpblN0b3JhZ2UgPSBuZXcgTWFwKCk7XG52YXIgdW5rbm93bk9yaWdpbiA9IE9iamVjdC5mcmVlemUoeyBtb2R1bGVJZDogdW5kZWZpbmVkLCBtb2R1bGVNZW1iZXI6IHVuZGVmaW5lZCB9KTtcblxuZXhwb3J0IHZhciBPcmlnaW4gPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIE9yaWdpbihtb2R1bGVJZCwgbW9kdWxlTWVtYmVyKSB7XG4gICAgXG5cbiAgICB0aGlzLm1vZHVsZUlkID0gbW9kdWxlSWQ7XG4gICAgdGhpcy5tb2R1bGVNZW1iZXIgPSBtb2R1bGVNZW1iZXI7XG4gIH1cblxuICBPcmlnaW4uZ2V0ID0gZnVuY3Rpb24gZ2V0KGZuKSB7XG4gICAgdmFyIG9yaWdpbiA9IG9yaWdpblN0b3JhZ2UuZ2V0KGZuKTtcblxuICAgIGlmIChvcmlnaW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgUExBVEZPUk0uZWFjaE1vZHVsZShmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAoKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YodmFsdWUpKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIHZhbHVlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB2YXIgZXhwID0gdmFsdWVbbmFtZV07XG4gICAgICAgICAgICAgIGlmIChleHAgPT09IGZuKSB7XG4gICAgICAgICAgICAgICAgb3JpZ2luU3RvcmFnZS5zZXQoZm4sIG9yaWdpbiA9IG5ldyBPcmlnaW4oa2V5LCBuYW1lKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSBmbikge1xuICAgICAgICAgIG9yaWdpblN0b3JhZ2Uuc2V0KGZuLCBvcmlnaW4gPSBuZXcgT3JpZ2luKGtleSwgJ2RlZmF1bHQnKSk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3JpZ2luIHx8IHVua25vd25PcmlnaW47XG4gIH07XG5cbiAgT3JpZ2luLnNldCA9IGZ1bmN0aW9uIHNldChmbiwgb3JpZ2luKSB7XG4gICAgb3JpZ2luU3RvcmFnZS5zZXQoZm4sIG9yaWdpbik7XG4gIH07XG5cbiAgcmV0dXJuIE9yaWdpbjtcbn0oKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29yYXRvcnMoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgcmVzdFtfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHZhciBhcHBsaWNhdG9yID0gZnVuY3Rpb24gYXBwbGljYXRvcih0YXJnZXQsIGtleSwgZGVzY3JpcHRvcikge1xuICAgIHZhciBpID0gcmVzdC5sZW5ndGg7XG5cbiAgICBpZiAoa2V5KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZGVzY3JpcHRvciB8fCB7XG4gICAgICAgIHZhbHVlOiB0YXJnZXRba2V5XSxcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgfTtcblxuICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICBkZXNjcmlwdG9yID0gcmVzdFtpXSh0YXJnZXQsIGtleSwgZGVzY3JpcHRvcikgfHwgZGVzY3JpcHRvcjtcbiAgICAgIH1cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICB0YXJnZXQgPSByZXN0W2ldKHRhcmdldCkgfHwgdGFyZ2V0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG5cbiAgYXBwbGljYXRvci5vbiA9IGFwcGxpY2F0b3I7XG4gIHJldHVybiBhcHBsaWNhdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVwcmVjYXRlZChvcHRpb25zT3JUYXJnZXQsIG1heWJlS2V5LCBtYXliZURlc2NyaXB0b3IpIHtcbiAgZnVuY3Rpb24gZGVjb3JhdG9yKHRhcmdldCwga2V5LCBkZXNjcmlwdG9yKSB7XG4gICAgdmFyIG1ldGhvZFNpZ25hdHVyZSA9IHRhcmdldC5jb25zdHJ1Y3Rvci5uYW1lICsgJyMnICsga2V5O1xuICAgIHZhciBvcHRpb25zID0gbWF5YmVLZXkgPyB7fSA6IG9wdGlvbnNPclRhcmdldCB8fCB7fTtcbiAgICB2YXIgbWVzc2FnZSA9ICdERVBSRUNBVElPTiAtICcgKyBtZXRob2RTaWduYXR1cmU7XG5cbiAgICBpZiAodHlwZW9mIGRlc2NyaXB0b3IudmFsdWUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignT25seSBtZXRob2RzIGNhbiBiZSBtYXJrZWQgYXMgZGVwcmVjYXRlZC4nKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5tZXNzYWdlKSB7XG4gICAgICBtZXNzYWdlICs9ICcgLSAnICsgb3B0aW9ucy5tZXNzYWdlO1xuICAgIH1cblxuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgZGVzY3JpcHRvciwge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGRlcHJlY2F0aW9uV3JhcHBlcigpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuZXJyb3IpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3IudmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBtYXliZUtleSA/IGRlY29yYXRvcihvcHRpb25zT3JUYXJnZXQsIG1heWJlS2V5LCBtYXliZURlc2NyaXB0b3IpIDogZGVjb3JhdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWl4aW4oYmVoYXZpb3IpIHtcbiAgdmFyIGluc3RhbmNlS2V5cyA9IE9iamVjdC5rZXlzKGJlaGF2aW9yKTtcblxuICBmdW5jdGlvbiBfbWl4aW4ocG9zc2libGUpIHtcbiAgICB2YXIgZGVjb3JhdG9yID0gZnVuY3Rpb24gZGVjb3JhdG9yKHRhcmdldCkge1xuICAgICAgdmFyIHJlc29sdmVkVGFyZ2V0ID0gdHlwZW9mIHRhcmdldCA9PT0gJ2Z1bmN0aW9uJyA/IHRhcmdldC5wcm90b3R5cGUgOiB0YXJnZXQ7XG5cbiAgICAgIHZhciBpID0gaW5zdGFuY2VLZXlzLmxlbmd0aDtcbiAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgdmFyIHByb3BlcnR5ID0gaW5zdGFuY2VLZXlzW2ldO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVzb2x2ZWRUYXJnZXQsIHByb3BlcnR5LCB7XG4gICAgICAgICAgdmFsdWU6IGJlaGF2aW9yW3Byb3BlcnR5XSxcbiAgICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIHBvc3NpYmxlID8gZGVjb3JhdG9yKHBvc3NpYmxlKSA6IGRlY29yYXRvcjtcbiAgfVxuXG4gIHJldHVybiBfbWl4aW47XG59XG5cbmZ1bmN0aW9uIGFsd2F5c1ZhbGlkKCkge1xuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIG5vQ29tcG9zZSgpIHt9XG5cbmZ1bmN0aW9uIGVuc3VyZVByb3RvY29sT3B0aW9ucyhvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpIHtcbiAgICBvcHRpb25zID0ge307XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBvcHRpb25zID0ge1xuICAgICAgdmFsaWRhdGU6IG9wdGlvbnNcbiAgICB9O1xuICB9XG5cbiAgaWYgKCFvcHRpb25zLnZhbGlkYXRlKSB7XG4gICAgb3B0aW9ucy52YWxpZGF0ZSA9IGFsd2F5c1ZhbGlkO1xuICB9XG5cbiAgaWYgKCFvcHRpb25zLmNvbXBvc2UpIHtcbiAgICBvcHRpb25zLmNvbXBvc2UgPSBub0NvbXBvc2U7XG4gIH1cblxuICByZXR1cm4gb3B0aW9ucztcbn1cblxuZnVuY3Rpb24gY3JlYXRlUHJvdG9jb2xWYWxpZGF0b3IodmFsaWRhdGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICB2YXIgcmVzdWx0ID0gdmFsaWRhdGUodGFyZ2V0KTtcbiAgICByZXR1cm4gcmVzdWx0ID09PSB0cnVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVQcm90b2NvbEFzc2VydGVyKG5hbWUsIHZhbGlkYXRlKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgdmFyIHJlc3VsdCA9IHZhbGlkYXRlKHRhcmdldCk7XG4gICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHJlc3VsdCB8fCBuYW1lICsgJyB3YXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnRlZC4nKTtcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm90b2NvbChuYW1lLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBlbnN1cmVQcm90b2NvbE9wdGlvbnMob3B0aW9ucyk7XG5cbiAgdmFyIHJlc3VsdCA9IGZ1bmN0aW9uIHJlc3VsdCh0YXJnZXQpIHtcbiAgICB2YXIgcmVzb2x2ZWRUYXJnZXQgPSB0eXBlb2YgdGFyZ2V0ID09PSAnZnVuY3Rpb24nID8gdGFyZ2V0LnByb3RvdHlwZSA6IHRhcmdldDtcblxuICAgIG9wdGlvbnMuY29tcG9zZShyZXNvbHZlZFRhcmdldCk7XG4gICAgcmVzdWx0LmFzc2VydChyZXNvbHZlZFRhcmdldCk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVzb2x2ZWRUYXJnZXQsICdwcm90b2NvbDonICsgbmFtZSwge1xuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IHRydWVcbiAgICB9KTtcbiAgfTtcblxuICByZXN1bHQudmFsaWRhdGUgPSBjcmVhdGVQcm90b2NvbFZhbGlkYXRvcihvcHRpb25zLnZhbGlkYXRlKTtcbiAgcmVzdWx0LmFzc2VydCA9IGNyZWF0ZVByb3RvY29sQXNzZXJ0ZXIobmFtZSwgb3B0aW9ucy52YWxpZGF0ZSk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxucHJvdG9jb2wuY3JlYXRlID0gZnVuY3Rpb24gKG5hbWUsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IGVuc3VyZVByb3RvY29sT3B0aW9ucyhvcHRpb25zKTtcbiAgdmFyIGhpZGRlbiA9ICdwcm90b2NvbDonICsgbmFtZTtcbiAgdmFyIHJlc3VsdCA9IGZ1bmN0aW9uIHJlc3VsdCh0YXJnZXQpIHtcbiAgICB2YXIgZGVjb3JhdG9yID0gcHJvdG9jb2wobmFtZSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHRhcmdldCA/IGRlY29yYXRvcih0YXJnZXQpIDogZGVjb3JhdG9yO1xuICB9O1xuXG4gIHJlc3VsdC5kZWNvcmF0ZXMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIG9ialtoaWRkZW5dID09PSB0cnVlO1xuICB9O1xuICByZXN1bHQudmFsaWRhdGUgPSBjcmVhdGVQcm90b2NvbFZhbGlkYXRvcihvcHRpb25zLnZhbGlkYXRlKTtcbiAgcmVzdWx0LmFzc2VydCA9IGNyZWF0ZVByb3RvY29sQXNzZXJ0ZXIobmFtZSwgb3B0aW9ucy52YWxpZGF0ZSk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4\n")},40:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var tzm = moment.defineLocale('tzm', {\n        months : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),\n        monthsShort : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),\n        weekdays : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        weekdaysShort : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        weekdaysMin : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',\n            nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',\n            nextWeek: 'dddd [ⴴ] LT',\n            lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',\n            lastWeek: 'dddd [ⴴ] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',\n            past : 'ⵢⴰⵏ %s',\n            s : 'ⵉⵎⵉⴽ',\n            ss : '%d ⵉⵎⵉⴽ',\n            m : 'ⵎⵉⵏⵓⴺ',\n            mm : '%d ⵎⵉⵏⵓⴺ',\n            h : 'ⵙⴰⵄⴰ',\n            hh : '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',\n            d : 'ⴰⵙⵙ',\n            dd : '%d oⵙⵙⴰⵏ',\n            M : 'ⴰⵢoⵓⵔ',\n            MM : '%d ⵉⵢⵢⵉⵔⵏ',\n            y : 'ⴰⵙⴳⴰⵙ',\n            yy : '%d ⵉⵙⴳⴰⵙⵏ'\n        },\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return tzm;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90em0uanM/YzEwOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsQ0FBVztBQUNyRSxHQUFHLFNBQ3NCO0FBQ3pCLENBQUMsMkJBQTJCOzs7QUFHNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwiZmlsZSI6IjQwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgdHptID0gbW9tZW50LmRlZmluZUxvY2FsZSgndHptJywge1xuICAgICAgICBtb250aHMgOiAn4rWJ4rWP4rWP4rSw4rWi4rWUX+K0seK1leK0sOK1ouK1lV/itY7itLDitZXitZpf4rWJ4rSx4rWU4rWJ4rWUX+K1juK0sOK1ouK1ouK1k1/itaLitZPitY/itaLitZNf4rWi4rWT4rWN4rWi4rWT4rWjX+K1luK1k+K1m+K1nF/itZvitZPitZzitLDitY/itLHitYnitZRf4rS94rWf4rWT4rSx4rWVX+K1j+K1k+K1oeK0sOK1j+K0seK1ieK1lF/itLfitZPitYritY/itLHitYnitZQnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ+K1ieK1j+K1j+K0sOK1ouK1lF/itLHitZXitLDitaLitZVf4rWO4rSw4rWV4rWaX+K1ieK0seK1lOK1ieK1lF/itY7itLDitaLitaLitZNf4rWi4rWT4rWP4rWi4rWTX+K1ouK1k+K1jeK1ouK1k+K1o1/itZbitZPitZvitZxf4rWb4rWT4rWc4rSw4rWP4rSx4rWJ4rWUX+K0veK1n+K1k+K0seK1lV/itY/itZPitaHitLDitY/itLHitYnitZRf4rS34rWT4rWK4rWP4rSx4rWJ4rWUJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6ICfitLDitZnitLDitY7itLDitZlf4rSw4rWi4rWP4rSw4rWZX+K0sOK1meK1ieK1j+K0sOK1mV/itLDitL3itZTitLDitZlf4rSw4rS94rWh4rSw4rWZX+K0sOK1meK1ieK1juK1oeK0sOK1mV/itLDitZnitYnitLnitaLitLDitZknLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAn4rSw4rWZ4rSw4rWO4rSw4rWZX+K0sOK1ouK1j+K0sOK1mV/itLDitZnitYnitY/itLDitZlf4rSw4rS94rWU4rSw4rWZX+K0sOK0veK1oeK0sOK1mV/itLDitZnitYnitY7itaHitLDitZlf4rSw4rWZ4rWJ4rS54rWi4rSw4rWZJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICfitLDitZnitLDitY7itLDitZlf4rSw4rWi4rWP4rSw4rWZX+K0sOK1meK1ieK1j+K0sOK1mV/itLDitL3itZTitLDitZlf4rSw4rS94rWh4rSw4rWZX+K0sOK1meK1ieK1juK1oeK0sOK1mV/itLDitZnitYnitLnitaLitLDitZknLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vitLDitZnitLfitYUg4rS0XSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+K0sOK1meK0veK0sCDitLRdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb4rS0XSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+K0sOK1muK0sOK1j+K1nCDitLRdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBb4rS0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICfitLfitLDitLfitYUg4rWZIOK1ouK0sOK1jyAlcycsXG4gICAgICAgICAgICBwYXN0IDogJ+K1ouK0sOK1jyAlcycsXG4gICAgICAgICAgICBzIDogJ+K1ieK1juK1ieK0vScsXG4gICAgICAgICAgICBzcyA6ICclZCDitYnitY7itYnitL0nLFxuICAgICAgICAgICAgbSA6ICfitY7itYnitY/itZPitLonLFxuICAgICAgICAgICAgbW0gOiAnJWQg4rWO4rWJ4rWP4rWT4rS6JyxcbiAgICAgICAgICAgIGggOiAn4rWZ4rSw4rWE4rSwJyxcbiAgICAgICAgICAgIGhoIDogJyVkIOK1nOK0sOK1meK1meK0sOK1hOK1ieK1jycsXG4gICAgICAgICAgICBkIDogJ+K0sOK1meK1mScsXG4gICAgICAgICAgICBkZCA6ICclZCBv4rWZ4rWZ4rSw4rWPJyxcbiAgICAgICAgICAgIE0gOiAn4rSw4rWib+K1k+K1lCcsXG4gICAgICAgICAgICBNTSA6ICclZCDitYnitaLitaLitYnitZTitY8nLFxuICAgICAgICAgICAgeSA6ICfitLDitZnitLPitLDitZknLFxuICAgICAgICAgICAgeXkgOiAnJWQg4rWJ4rWZ4rSz4rSw4rWZ4rWPJ1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogNiwgLy8gU2F0dXJkYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDEyICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxc3QgaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB0em07XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///40\n")},41:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.\n    // This is currently too difficult (maybe even impossible) to add.\n    var tzl = moment.defineLocale('tzl', {\n        months : 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split('_'),\n        monthsShort : 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),\n        weekdays : 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),\n        weekdaysShort : 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),\n        weekdaysMin : 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),\n        longDateFormat : {\n            LT : 'HH.mm',\n            LTS : 'HH.mm.ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM [dallas] YYYY',\n            LLL : 'D. MMMM [dallas] YYYY HH.mm',\n            LLLL : 'dddd, [li] D. MMMM [dallas] YYYY HH.mm'\n        },\n        meridiemParse: /d\\'o|d\\'a/i,\n        isPM : function (input) {\n            return 'd\\'o' === input.toLowerCase();\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'd\\'o' : 'D\\'O';\n            } else {\n                return isLower ? 'd\\'a' : 'D\\'A';\n            }\n        },\n        calendar : {\n            sameDay : '[oxhi à] LT',\n            nextDay : '[demà à] LT',\n            nextWeek : 'dddd [à] LT',\n            lastDay : '[ieiri à] LT',\n            lastWeek : '[sür el] dddd [lasteu à] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'osprei %s',\n            past : 'ja%s',\n            s : processRelativeTime,\n            ss : processRelativeTime,\n            m : processRelativeTime,\n            mm : processRelativeTime,\n            h : processRelativeTime,\n            hh : processRelativeTime,\n            d : processRelativeTime,\n            dd : processRelativeTime,\n            M : processRelativeTime,\n            MM : processRelativeTime,\n            y : processRelativeTime,\n            yy : processRelativeTime\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            's': ['viensas secunds', '\\'iensas secunds'],\n            'ss': [number + ' secunds', '' + number + ' secunds'],\n            'm': ['\\'n míut', '\\'iens míut'],\n            'mm': [number + ' míuts', '' + number + ' míuts'],\n            'h': ['\\'n þora', '\\'iensa þora'],\n            'hh': [number + ' þoras', '' + number + ' þoras'],\n            'd': ['\\'n ziua', '\\'iensa ziua'],\n            'dd': [number + ' ziuas', '' + number + ' ziuas'],\n            'M': ['\\'n mes', '\\'iens mes'],\n            'MM': [number + ' mesen', '' + number + ' mesen'],\n            'y': ['\\'n ar', '\\'iens ar'],\n            'yy': [number + ' ars', '' + number + ' ars']\n        };\n        return isFuture ? format[key][0] : (withoutSuffix ? format[key][0] : format[key][1]);\n    }\n\n    return tzl;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90emwuanM/Y2Y1MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsQ0FBVztBQUNyRSxHQUFHLFNBQ3NCO0FBQ3pCLENBQUMsMkJBQTJCOzs7QUFHNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxDQUFDIiwiZmlsZSI6IjQxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICAvLyBBZnRlciB0aGUgeWVhciB0aGVyZSBzaG91bGQgYmUgYSBzbGFzaCBhbmQgdGhlIGFtb3VudCBvZiB5ZWFycyBzaW5jZSBEZWNlbWJlciAyNiwgMTk3OSBpbiBSb21hbiBudW1lcmFscy5cbiAgICAvLyBUaGlzIGlzIGN1cnJlbnRseSB0b28gZGlmZmljdWx0IChtYXliZSBldmVuIGltcG9zc2libGUpIHRvIGFkZC5cbiAgICB2YXIgdHpsID0gbW9tZW50LmRlZmluZUxvY2FsZSgndHpsJywge1xuICAgICAgICBtb250aHMgOiAnSmFudWFyX0ZldnJhZ2xoX01hcsOnX0F2csOvdV9NYWlfR8O8bl9KdWxpYV9HdXNjaHRfU2V0ZW12YXJfTGlzdG9ww6R0c19Ob2VtdmFyX1plY2VtdmFyJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICdKYW5fRmV2X01hcl9BdnJfTWFpX0fDvG5fSnVsX0d1c19TZXRfTGlzX05vZV9aZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzIDogJ1PDumxhZGlfTMO6bmXDp2lfTWFpdHppX03DoXJjdXJpX1how7phZGlfVmnDqW5lcsOnaV9Tw6F0dXJpJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ1PDumxfTMO6bl9NYWlfTcOhcl9YaMO6X1Zpw6lfU8OhdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAnU8O6X0zDul9NYV9Nw6FfWGhfVmlfU8OhJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hILm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISC5tbS5zcycsXG4gICAgICAgICAgICBMIDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEwgOiAnRC4gTU1NTSBbZGFsbGFzXSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdELiBNTU1NIFtkYWxsYXNdIFlZWVkgSEgubW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBbbGldIEQuIE1NTU0gW2RhbGxhc10gWVlZWSBISC5tbSdcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL2RcXCdvfGRcXCdhL2ksXG4gICAgICAgIGlzUE0gOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAnZFxcJ28nID09PSBpbnB1dC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbSA6IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXJzID4gMTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdkXFwnbycgOiAnRFxcJ08nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdkXFwnYScgOiAnRFxcJ0EnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgOiAnW294aGkgw6BdIExUJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW2RlbcOgIMOgXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdkZGRkIFvDoF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdbaWVpcmkgw6BdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogJ1tzw7xyIGVsXSBkZGRkIFtsYXN0ZXUgw6BdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICdvc3ByZWkgJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICdqYSVzJyxcbiAgICAgICAgICAgIHMgOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgc3MgOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgbSA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtbSA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBoIDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGhoIDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGQgOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZGQgOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgTSA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBNTSA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5IDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHl5IDogcHJvY2Vzc1JlbGF0aXZlVGltZVxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsIDogJyVkLicsXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc1JlbGF0aXZlVGltZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHtcbiAgICAgICAgICAgICdzJzogWyd2aWVuc2FzIHNlY3VuZHMnLCAnXFwnaWVuc2FzIHNlY3VuZHMnXSxcbiAgICAgICAgICAgICdzcyc6IFtudW1iZXIgKyAnIHNlY3VuZHMnLCAnJyArIG51bWJlciArICcgc2VjdW5kcyddLFxuICAgICAgICAgICAgJ20nOiBbJ1xcJ24gbcOtdXQnLCAnXFwnaWVucyBtw611dCddLFxuICAgICAgICAgICAgJ21tJzogW251bWJlciArICcgbcOtdXRzJywgJycgKyBudW1iZXIgKyAnIG3DrXV0cyddLFxuICAgICAgICAgICAgJ2gnOiBbJ1xcJ24gw75vcmEnLCAnXFwnaWVuc2Egw75vcmEnXSxcbiAgICAgICAgICAgICdoaCc6IFtudW1iZXIgKyAnIMO+b3JhcycsICcnICsgbnVtYmVyICsgJyDDvm9yYXMnXSxcbiAgICAgICAgICAgICdkJzogWydcXCduIHppdWEnLCAnXFwnaWVuc2Egeml1YSddLFxuICAgICAgICAgICAgJ2RkJzogW251bWJlciArICcgeml1YXMnLCAnJyArIG51bWJlciArICcgeml1YXMnXSxcbiAgICAgICAgICAgICdNJzogWydcXCduIG1lcycsICdcXCdpZW5zIG1lcyddLFxuICAgICAgICAgICAgJ01NJzogW251bWJlciArICcgbWVzZW4nLCAnJyArIG51bWJlciArICcgbWVzZW4nXSxcbiAgICAgICAgICAgICd5JzogWydcXCduIGFyJywgJ1xcJ2llbnMgYXInXSxcbiAgICAgICAgICAgICd5eSc6IFtudW1iZXIgKyAnIGFycycsICcnICsgbnVtYmVyICsgJyBhcnMnXVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyBmb3JtYXRba2V5XVswXSA6ICh3aXRob3V0U3VmZml4ID8gZm9ybWF0W2tleV1bMF0gOiBmb3JtYXRba2V5XVsxXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR6bDtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///41\n")},42:function(module,exports,__webpack_require__){eval("\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n    var suffixes = {\n        1: '\\'inci',\n        5: '\\'inci',\n        8: '\\'inci',\n        70: '\\'inci',\n        80: '\\'inci',\n        2: '\\'nci',\n        7: '\\'nci',\n        20: '\\'nci',\n        50: '\\'nci',\n        3: '\\'üncü',\n        4: '\\'üncü',\n        100: '\\'üncü',\n        6: '\\'ncı',\n        9: '\\'uncu',\n        10: '\\'uncu',\n        30: '\\'uncu',\n        60: '\\'ıncı',\n        90: '\\'ıncı'\n    };\n\n    var tr = moment.defineLocale('tr', {\n        months : 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split('_'),\n        monthsShort : 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),\n        weekdays : 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split('_'),\n        weekdaysShort : 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'),\n        weekdaysMin : 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[bugün saat] LT',\n            nextDay : '[yarın saat] LT',\n            nextWeek : '[gelecek] dddd [saat] LT',\n            lastDay : '[dün] LT',\n            lastWeek : '[geçen] dddd [saat] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s sonra',\n            past : '%s önce',\n            s : 'birkaç saniye',\n            ss : '%d saniye',\n            m : 'bir dakika',\n            mm : '%d dakika',\n            h : 'bir saat',\n            hh : '%d saat',\n            d : 'bir gün',\n            dd : '%d gün',\n            M : 'bir ay',\n            MM : '%d ay',\n            y : 'bir yıl',\n            yy : '%d yıl'\n        },\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'Do':\n                case 'DD':\n                    return number;\n                default:\n                    if (number === 0) {  // special case for zero\n                        return number + '\\'ıncı';\n                    }\n                    var a = number % 10,\n                        b = number % 100 - a,\n                        c = number >= 100 ? 100 : null;\n                    return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return tr;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90ci5qcz8wZTgxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsQ0FBVztBQUNyRSxHQUFHLFNBQ3NCO0FBQ3pCLENBQUMsMkJBQTJCOztBQUU1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwiZmlsZSI6IjQyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIHN1ZmZpeGVzID0ge1xuICAgICAgICAxOiAnXFwnaW5jaScsXG4gICAgICAgIDU6ICdcXCdpbmNpJyxcbiAgICAgICAgODogJ1xcJ2luY2knLFxuICAgICAgICA3MDogJ1xcJ2luY2knLFxuICAgICAgICA4MDogJ1xcJ2luY2knLFxuICAgICAgICAyOiAnXFwnbmNpJyxcbiAgICAgICAgNzogJ1xcJ25jaScsXG4gICAgICAgIDIwOiAnXFwnbmNpJyxcbiAgICAgICAgNTA6ICdcXCduY2knLFxuICAgICAgICAzOiAnXFwnw7xuY8O8JyxcbiAgICAgICAgNDogJ1xcJ8O8bmPDvCcsXG4gICAgICAgIDEwMDogJ1xcJ8O8bmPDvCcsXG4gICAgICAgIDY6ICdcXCduY8SxJyxcbiAgICAgICAgOTogJ1xcJ3VuY3UnLFxuICAgICAgICAxMDogJ1xcJ3VuY3UnLFxuICAgICAgICAzMDogJ1xcJ3VuY3UnLFxuICAgICAgICA2MDogJ1xcJ8SxbmPEsScsXG4gICAgICAgIDkwOiAnXFwnxLFuY8SxJ1xuICAgIH07XG5cbiAgICB2YXIgdHIgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd0cicsIHtcbiAgICAgICAgbW9udGhzIDogJ09jYWtfxZ51YmF0X01hcnRfTmlzYW5fTWF5xLFzX0hhemlyYW5fVGVtbXV6X0HEn3VzdG9zX0V5bMO8bF9Fa2ltX0thc8SxbV9BcmFsxLFrJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICdPY2FfxZ51Yl9NYXJfTmlzX01heV9IYXpfVGVtX0HEn3VfRXlsX0VraV9LYXNfQXJhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6ICdQYXphcl9QYXphcnRlc2lfU2FsxLFfw4dhcsWfYW1iYV9QZXLFn2VtYmVfQ3VtYV9DdW1hcnRlc2knLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAnUGF6X1B0c19TYWxfw4dhcl9QZXJfQ3VtX0N0cycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAnUHpfUHRfU2Ffw4dhX1BlX0N1X0N0Jy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICdbYnVnw7xuIHNhYXRdIExUJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW3lhcsSxbiBzYWF0XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdbZ2VsZWNla10gZGRkZCBbc2FhdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdbZMO8bl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiAnW2dlw6dlbl0gZGRkZCBbc2FhdF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJyVzIHNvbnJhJyxcbiAgICAgICAgICAgIHBhc3QgOiAnJXMgw7ZuY2UnLFxuICAgICAgICAgICAgcyA6ICdiaXJrYcOnIHNhbml5ZScsXG4gICAgICAgICAgICBzcyA6ICclZCBzYW5peWUnLFxuICAgICAgICAgICAgbSA6ICdiaXIgZGFraWthJyxcbiAgICAgICAgICAgIG1tIDogJyVkIGRha2lrYScsXG4gICAgICAgICAgICBoIDogJ2JpciBzYWF0JyxcbiAgICAgICAgICAgIGhoIDogJyVkIHNhYXQnLFxuICAgICAgICAgICAgZCA6ICdiaXIgZ8O8bicsXG4gICAgICAgICAgICBkZCA6ICclZCBnw7xuJyxcbiAgICAgICAgICAgIE0gOiAnYmlyIGF5JyxcbiAgICAgICAgICAgIE1NIDogJyVkIGF5JyxcbiAgICAgICAgICAgIHkgOiAnYmlyIHnEsWwnLFxuICAgICAgICAgICAgeXkgOiAnJWQgecSxbCdcbiAgICAgICAgfSxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RvJzpcbiAgICAgICAgICAgICAgICBjYXNlICdERCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMCkgeyAgLy8gc3BlY2lhbCBjYXNlIGZvciB6ZXJvXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ1xcJ8SxbmPEsSc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBudW1iZXIgJSAxMDAgLSBhLFxuICAgICAgICAgICAgICAgICAgICAgICAgYyA9IG51bWJlciA+PSAxMDAgPyAxMDAgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKHN1ZmZpeGVzW2FdIHx8IHN1ZmZpeGVzW2JdIHx8IHN1ZmZpeGVzW2NdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNyAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMXN0IGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHI7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///42\n")},43:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');\n\n    function translateFuture(output) {\n        var time = output;\n        time = (output.indexOf('jaj') !== -1) ?\n        time.slice(0, -3) + 'leS' :\n        (output.indexOf('jar') !== -1) ?\n        time.slice(0, -3) + 'waQ' :\n        (output.indexOf('DIS') !== -1) ?\n        time.slice(0, -3) + 'nem' :\n        time + ' pIq';\n        return time;\n    }\n\n    function translatePast(output) {\n        var time = output;\n        time = (output.indexOf('jaj') !== -1) ?\n        time.slice(0, -3) + 'Hu’' :\n        (output.indexOf('jar') !== -1) ?\n        time.slice(0, -3) + 'wen' :\n        (output.indexOf('DIS') !== -1) ?\n        time.slice(0, -3) + 'ben' :\n        time + ' ret';\n        return time;\n    }\n\n    function translate(number, withoutSuffix, string, isFuture) {\n        var numberNoun = numberAsNoun(number);\n        switch (string) {\n            case 'ss':\n                return numberNoun + ' lup';\n            case 'mm':\n                return numberNoun + ' tup';\n            case 'hh':\n                return numberNoun + ' rep';\n            case 'dd':\n                return numberNoun + ' jaj';\n            case 'MM':\n                return numberNoun + ' jar';\n            case 'yy':\n                return numberNoun + ' DIS';\n        }\n    }\n\n    function numberAsNoun(number) {\n        var hundred = Math.floor((number % 1000) / 100),\n        ten = Math.floor((number % 100) / 10),\n        one = number % 10,\n        word = '';\n        if (hundred > 0) {\n            word += numbersNouns[hundred] + 'vatlh';\n        }\n        if (ten > 0) {\n            word += ((word !== '') ? ' ' : '') + numbersNouns[ten] + 'maH';\n        }\n        if (one > 0) {\n            word += ((word !== '') ? ' ' : '') + numbersNouns[one];\n        }\n        return (word === '') ? 'pagh' : word;\n    }\n\n    var tlh = moment.defineLocale('tlh', {\n        months : 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split('_'),\n        monthsShort : 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n        weekdaysShort : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n        weekdaysMin : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[DaHjaj] LT',\n            nextDay: '[wa’leS] LT',\n            nextWeek: 'LLL',\n            lastDay: '[wa’Hu’] LT',\n            lastWeek: 'LLL',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : translateFuture,\n            past : translatePast,\n            s : 'puS lup',\n            ss : translate,\n            m : 'wa’ tup',\n            mm : translate,\n            h : 'wa’ rep',\n            hh : translate,\n            d : 'wa’ jaj',\n            dd : translate,\n            M : 'wa’ jar',\n            MM : translate,\n            y : 'wa’ DIS',\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return tlh;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90bGguanM/Y2Y3NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsQ0FBVztBQUNyRSxHQUFHLFNBQ3NCO0FBQ3pCLENBQUMsMkJBQTJCOzs7QUFHNUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiI0My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIG51bWJlcnNOb3VucyA9ICdwYWdoX3dh4oCZX2NoYeKAmV93ZWpfbG9TX3ZhZ2hfamF2X1NvY2hfY2hvcmdoX0h1dCcuc3BsaXQoJ18nKTtcblxuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZUZ1dHVyZShvdXRwdXQpIHtcbiAgICAgICAgdmFyIHRpbWUgPSBvdXRwdXQ7XG4gICAgICAgIHRpbWUgPSAob3V0cHV0LmluZGV4T2YoJ2phaicpICE9PSAtMSkgP1xuICAgICAgICB0aW1lLnNsaWNlKDAsIC0zKSArICdsZVMnIDpcbiAgICAgICAgKG91dHB1dC5pbmRleE9mKCdqYXInKSAhPT0gLTEpID9cbiAgICAgICAgdGltZS5zbGljZSgwLCAtMykgKyAnd2FRJyA6XG4gICAgICAgIChvdXRwdXQuaW5kZXhPZignRElTJykgIT09IC0xKSA/XG4gICAgICAgIHRpbWUuc2xpY2UoMCwgLTMpICsgJ25lbScgOlxuICAgICAgICB0aW1lICsgJyBwSXEnO1xuICAgICAgICByZXR1cm4gdGltZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0cmFuc2xhdGVQYXN0KG91dHB1dCkge1xuICAgICAgICB2YXIgdGltZSA9IG91dHB1dDtcbiAgICAgICAgdGltZSA9IChvdXRwdXQuaW5kZXhPZignamFqJykgIT09IC0xKSA/XG4gICAgICAgIHRpbWUuc2xpY2UoMCwgLTMpICsgJ0h14oCZJyA6XG4gICAgICAgIChvdXRwdXQuaW5kZXhPZignamFyJykgIT09IC0xKSA/XG4gICAgICAgIHRpbWUuc2xpY2UoMCwgLTMpICsgJ3dlbicgOlxuICAgICAgICAob3V0cHV0LmluZGV4T2YoJ0RJUycpICE9PSAtMSkgP1xuICAgICAgICB0aW1lLnNsaWNlKDAsIC0zKSArICdiZW4nIDpcbiAgICAgICAgdGltZSArICcgcmV0JztcbiAgICAgICAgcmV0dXJuIHRpbWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlKG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgbnVtYmVyTm91biA9IG51bWJlckFzTm91bihudW1iZXIpO1xuICAgICAgICBzd2l0Y2ggKHN0cmluZykge1xuICAgICAgICAgICAgY2FzZSAnc3MnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJOb3VuICsgJyBsdXAnO1xuICAgICAgICAgICAgY2FzZSAnbW0nOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJOb3VuICsgJyB0dXAnO1xuICAgICAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJOb3VuICsgJyByZXAnO1xuICAgICAgICAgICAgY2FzZSAnZGQnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJOb3VuICsgJyBqYWonO1xuICAgICAgICAgICAgY2FzZSAnTU0nOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJOb3VuICsgJyBqYXInO1xuICAgICAgICAgICAgY2FzZSAneXknOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJOb3VuICsgJyBESVMnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbnVtYmVyQXNOb3VuKG51bWJlcikge1xuICAgICAgICB2YXIgaHVuZHJlZCA9IE1hdGguZmxvb3IoKG51bWJlciAlIDEwMDApIC8gMTAwKSxcbiAgICAgICAgdGVuID0gTWF0aC5mbG9vcigobnVtYmVyICUgMTAwKSAvIDEwKSxcbiAgICAgICAgb25lID0gbnVtYmVyICUgMTAsXG4gICAgICAgIHdvcmQgPSAnJztcbiAgICAgICAgaWYgKGh1bmRyZWQgPiAwKSB7XG4gICAgICAgICAgICB3b3JkICs9IG51bWJlcnNOb3Vuc1todW5kcmVkXSArICd2YXRsaCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRlbiA+IDApIHtcbiAgICAgICAgICAgIHdvcmQgKz0gKCh3b3JkICE9PSAnJykgPyAnICcgOiAnJykgKyBudW1iZXJzTm91bnNbdGVuXSArICdtYUgnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvbmUgPiAwKSB7XG4gICAgICAgICAgICB3b3JkICs9ICgod29yZCAhPT0gJycpID8gJyAnIDogJycpICsgbnVtYmVyc05vdW5zW29uZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICh3b3JkID09PSAnJykgPyAncGFnaCcgOiB3b3JkO1xuICAgIH1cblxuICAgIHZhciB0bGggPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd0bGgnLCB7XG4gICAgICAgIG1vbnRocyA6ICd0ZXJh4oCZIGphciB3YeKAmV90ZXJh4oCZIGphciBjaGHigJlfdGVyYeKAmSBqYXIgd2VqX3RlcmHigJkgamFyIGxvU190ZXJh4oCZIGphciB2YWdoX3RlcmHigJkgamFyIGphdl90ZXJh4oCZIGphciBTb2NoX3RlcmHigJkgamFyIGNob3JnaF90ZXJh4oCZIGphciBIdXRfdGVyYeKAmSBqYXIgd2HigJltYUhfdGVyYeKAmSBqYXIgd2HigJltYUggd2HigJlfdGVyYeKAmSBqYXIgd2HigJltYUggY2hh4oCZJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICdqYXIgd2HigJlfamFyIGNoYeKAmV9qYXIgd2VqX2phciBsb1NfamFyIHZhZ2hfamFyIGphdl9qYXIgU29jaF9qYXIgY2hvcmdoX2phciBIdXRfamFyIHdh4oCZbWFIX2phciB3YeKAmW1hSCB3YeKAmV9qYXIgd2HigJltYUggY2hh4oCZJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0IDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXMgOiAnbG9qbUl0amFqX0RhU2phal9wb3ZqYWpfZ2hJdGxoamFqX2xvZ2hqYWpfYnVxamFqX2doSW5qYWonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAnbG9qbUl0amFqX0RhU2phal9wb3ZqYWpfZ2hJdGxoamFqX2xvZ2hqYWpfYnVxamFqX2doSW5qYWonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ2xvam1JdGphal9EYVNqYWpfcG92amFqX2doSXRsaGphal9sb2doamFqX2J1cWphal9naEluamFqJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tEYUhqYWpdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbd2HigJlsZVNdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnTExMJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbd2HigJlIdeKAmV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdMTEwnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiB0cmFuc2xhdGVGdXR1cmUsXG4gICAgICAgICAgICBwYXN0IDogdHJhbnNsYXRlUGFzdCxcbiAgICAgICAgICAgIHMgOiAncHVTIGx1cCcsXG4gICAgICAgICAgICBzcyA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG0gOiAnd2HigJkgdHVwJyxcbiAgICAgICAgICAgIG1tIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaCA6ICd3YeKAmSByZXAnLFxuICAgICAgICAgICAgaGggOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkIDogJ3dh4oCZIGphaicsXG4gICAgICAgICAgICBkZCA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE0gOiAnd2HigJkgamFyJyxcbiAgICAgICAgICAgIE1NIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgeSA6ICd3YeKAmSBESVMnLFxuICAgICAgICAgICAgeXkgOiB0cmFuc2xhdGVcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbCA6ICclZC4nLFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA0ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB0bGg7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///43\n")},44:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var tlPh = moment.defineLocale('tl-ph', {\n        months : 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split('_'),\n        monthsShort : 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),\n        weekdays : 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split('_'),\n        weekdaysShort : 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),\n        weekdaysMin : 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'MM/D/YYYY',\n            LL : 'MMMM D, YYYY',\n            LLL : 'MMMM D, YYYY HH:mm',\n            LLLL : 'dddd, MMMM DD, YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: 'LT [ngayong araw]',\n            nextDay: '[Bukas ng] LT',\n            nextWeek: 'LT [sa susunod na] dddd',\n            lastDay: 'LT [kahapon]',\n            lastWeek: 'LT [noong nakaraang] dddd',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'sa loob ng %s',\n            past : '%s ang nakalipas',\n            s : 'ilang segundo',\n            ss : '%d segundo',\n            m : 'isang minuto',\n            mm : '%d minuto',\n            h : 'isang oras',\n            hh : '%d oras',\n            d : 'isang araw',\n            dd : '%d araw',\n            M : 'isang buwan',\n            MM : '%d buwan',\n            y : 'isang taon',\n            yy : '%d taon'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal : function (number) {\n            return number;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return tlPh;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90bC1waC5qcz8wZjM4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiI0NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIHRsUGggPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd0bC1waCcsIHtcbiAgICAgICAgbW9udGhzIDogJ0VuZXJvX1BlYnJlcm9fTWFyc29fQWJyaWxfTWF5b19IdW55b19IdWx5b19BZ29zdG9fU2V0eWVtYnJlX09rdHVicmVfTm9ieWVtYnJlX0Rpc3llbWJyZScuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAnRW5lX1BlYl9NYXJfQWJyX01heV9IdW5fSHVsX0Fnb19TZXRfT2t0X05vYl9EaXMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzIDogJ0xpbmdnb19MdW5lc19NYXJ0ZXNfTWl5ZXJrdWxlc19IdXdlYmVzX0JpeWVybmVzX1NhYmFkbycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICdMaW5fTHVuX01hcl9NaXlfSHV3X0JpeV9TYWInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ0xpX0x1X01hX01pX0h1X0JpX1NhYicuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdISDptbScsXG4gICAgICAgICAgICBMVFMgOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdNTS9EL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnTU1NTSBELCBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdNTU1NIEQsIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBNTU1NIERELCBZWVlZIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdMVCBbbmdheW9uZyBhcmF3XScsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0J1a2FzIG5nXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ0xUIFtzYSBzdXN1bm9kIG5hXSBkZGRkJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdMVCBba2FoYXBvbl0nLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdMVCBbbm9vbmcgbmFrYXJhYW5nXSBkZGRkJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ3NhIGxvb2IgbmcgJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICclcyBhbmcgbmFrYWxpcGFzJyxcbiAgICAgICAgICAgIHMgOiAnaWxhbmcgc2VndW5kbycsXG4gICAgICAgICAgICBzcyA6ICclZCBzZWd1bmRvJyxcbiAgICAgICAgICAgIG0gOiAnaXNhbmcgbWludXRvJyxcbiAgICAgICAgICAgIG1tIDogJyVkIG1pbnV0bycsXG4gICAgICAgICAgICBoIDogJ2lzYW5nIG9yYXMnLFxuICAgICAgICAgICAgaGggOiAnJWQgb3JhcycsXG4gICAgICAgICAgICBkIDogJ2lzYW5nIGFyYXcnLFxuICAgICAgICAgICAgZGQgOiAnJWQgYXJhdycsXG4gICAgICAgICAgICBNIDogJ2lzYW5nIGJ1d2FuJyxcbiAgICAgICAgICAgIE1NIDogJyVkIGJ1d2FuJyxcbiAgICAgICAgICAgIHkgOiAnaXNhbmcgdGFvbicsXG4gICAgICAgICAgICB5eSA6ICclZCB0YW9uJ1xuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0vLFxuICAgICAgICBvcmRpbmFsIDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgfSxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNCAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGxQaDtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///44\n")},45:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var th = moment.defineLocale('th', {\n        months : 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split('_'),\n        monthsShort : 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),\n        weekdaysShort : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference\n        weekdaysMin : 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY เวลา H:mm',\n            LLLL : 'วันddddที่ D MMMM YYYY เวลา H:mm'\n        },\n        meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,\n        isPM: function (input) {\n            return input === 'หลังเที่ยง';\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ก่อนเที่ยง';\n            } else {\n                return 'หลังเที่ยง';\n            }\n        },\n        calendar : {\n            sameDay : '[วันนี้ เวลา] LT',\n            nextDay : '[พรุ่งนี้ เวลา] LT',\n            nextWeek : 'dddd[หน้า เวลา] LT',\n            lastDay : '[เมื่อวานนี้ เวลา] LT',\n            lastWeek : '[วัน]dddd[ที่แล้ว เวลา] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'อีก %s',\n            past : '%sที่แล้ว',\n            s : 'ไม่กี่วินาที',\n            ss : '%d วินาที',\n            m : '1 นาที',\n            mm : '%d นาที',\n            h : '1 ชั่วโมง',\n            hh : '%d ชั่วโมง',\n            d : '1 วัน',\n            dd : '%d วัน',\n            M : '1 เดือน',\n            MM : '%d เดือน',\n            y : '1 ปี',\n            yy : '%d ปี'\n        }\n    });\n\n    return th;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90aC5qcz8xMGU4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwiZmlsZSI6IjQ1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgdGggPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd0aCcsIHtcbiAgICAgICAgbW9udGhzIDogJ+C4oeC4geC4o+C4suC4hOC4oV/guIHguLjguKHguKDguLLguJ7guLHguJnguJjguYxf4Lih4Li14LiZ4Liy4LiE4LihX+C5gOC4oeC4qeC4suC4ouC4mV/guJ7guKTguKnguKDguLLguITguKFf4Lih4Li04LiW4Li44LiZ4Liy4Lii4LiZX+C4geC4o+C4geC4juC4suC4hOC4oV/guKrguLTguIfguKvguLLguITguKFf4LiB4Lix4LiZ4Lii4Liy4Lii4LiZX+C4leC4uOC4peC4suC4hOC4oV/guJ7guKTguKjguIjguLTguIHguLLguKLguJlf4LiY4Lix4LiZ4Lin4Liy4LiE4LihJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICfguKEu4LiELl/guIEu4LieLl/guKHguLUu4LiELl/guYDguKEu4LiiLl/guJ4u4LiELl/guKHguLQu4LiiLl/guIEu4LiELl/guKou4LiELl/guIEu4LiiLl/guJUu4LiELl/guJ4u4LiiLl/guJgu4LiELicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXMgOiAn4Lit4Liy4LiX4Li04LiV4Lii4LmMX+C4iOC4seC4meC4l+C4o+C5jF/guK3guLHguIfguITguLLguKNf4Lie4Li44LiYX+C4nuC4pOC4q+C4seC4quC4muC4lOC4tV/guKjguLjguIHguKPguYxf4LmA4Liq4Liy4Lij4LmMJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ+C4reC4suC4l+C4tOC4leC4ouC5jF/guIjguLHguJnguJfguKPguYxf4Lit4Lix4LiH4LiE4Liy4LijX+C4nuC4uOC4mF/guJ7guKTguKvguLHguKpf4Lio4Li44LiB4Lij4LmMX+C5gOC4quC4suC4o+C5jCcuc3BsaXQoJ18nKSwgLy8geWVzLCB0aHJlZSBjaGFyYWN0ZXJzIGRpZmZlcmVuY2VcbiAgICAgICAgd2Vla2RheXNNaW4gOiAn4Lit4LiyLl/guIguX+C4rS5f4LieLl/guJ7guKQuX+C4qC5f4LiqLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0IDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVkg4LmA4Lin4Lil4LiyIEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICfguKfguLHguJlkZGRk4LiX4Li14LmIIEQgTU1NTSBZWVlZIOC5gOC4p+C4peC4siBIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv4LiB4LmI4Lit4LiZ4LmA4LiX4Li14LmI4Lii4LiHfOC4q+C4peC4seC4h+C5gOC4l+C4teC5iOC4ouC4hy8sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ID09PSAn4Lir4Lil4Lix4LiH4LmA4LiX4Li14LmI4Lii4LiHJztcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW0gOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfguIHguYjguK3guJnguYDguJfguLXguYjguKLguIcnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+C4q+C4peC4seC4h+C5gOC4l+C4teC5iOC4ouC4hyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICdb4Lin4Lix4LiZ4LiZ4Li14LmJIOC5gOC4p+C4peC4sl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICdb4Lie4Lij4Li44LmI4LiH4LiZ4Li14LmJIOC5gOC4p+C4peC4sl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnZGRkZFvguKvguJnguYnguLIg4LmA4Lin4Lil4LiyXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5IDogJ1vguYDguKHguLfguYjguK3guKfguLLguJnguJnguLXguYkg4LmA4Lin4Lil4LiyXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlayA6ICdb4Lin4Lix4LiZXWRkZGRb4LiX4Li14LmI4LmB4Lil4LmJ4LinIOC5gOC4p+C4peC4sl0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ+C4reC4teC4gSAlcycsXG4gICAgICAgICAgICBwYXN0IDogJyVz4LiX4Li14LmI4LmB4Lil4LmJ4LinJyxcbiAgICAgICAgICAgIHMgOiAn4LmE4Lih4LmI4LiB4Li14LmI4Lin4Li04LiZ4Liy4LiX4Li1JyxcbiAgICAgICAgICAgIHNzIDogJyVkIOC4p+C4tOC4meC4suC4l+C4tScsXG4gICAgICAgICAgICBtIDogJzEg4LiZ4Liy4LiX4Li1JyxcbiAgICAgICAgICAgIG1tIDogJyVkIOC4meC4suC4l+C4tScsXG4gICAgICAgICAgICBoIDogJzEg4LiK4Lix4LmI4Lin4LmC4Lih4LiHJyxcbiAgICAgICAgICAgIGhoIDogJyVkIOC4iuC4seC5iOC4p+C5guC4oeC4hycsXG4gICAgICAgICAgICBkIDogJzEg4Lin4Lix4LiZJyxcbiAgICAgICAgICAgIGRkIDogJyVkIOC4p+C4seC4mScsXG4gICAgICAgICAgICBNIDogJzEg4LmA4LiU4Li34Lit4LiZJyxcbiAgICAgICAgICAgIE1NIDogJyVkIOC5gOC4lOC4t+C4reC4mScsXG4gICAgICAgICAgICB5IDogJzEg4Lib4Li1JyxcbiAgICAgICAgICAgIHl5IDogJyVkIOC4m+C4tSdcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///45\n")},46:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var suffixes = {\n        0: '-ум',\n        1: '-ум',\n        2: '-юм',\n        3: '-юм',\n        4: '-ум',\n        5: '-ум',\n        6: '-ум',\n        7: '-ум',\n        8: '-ум',\n        9: '-ум',\n        10: '-ум',\n        12: '-ум',\n        13: '-ум',\n        20: '-ум',\n        30: '-юм',\n        40: '-ум',\n        50: '-ум',\n        60: '-ум',\n        70: '-ум',\n        80: '-ум',\n        90: '-ум',\n        100: '-ум'\n    };\n\n    var tg = moment.defineLocale('tg', {\n        months : 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'),\n        monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n        weekdays : 'якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе'.split('_'),\n        weekdaysShort : 'яшб_дшб_сшб_чшб_пшб_ҷум_шнб'.split('_'),\n        weekdaysMin : 'яш_дш_сш_чш_пш_ҷм_шб'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Имрӯз соати] LT',\n            nextDay : '[Пагоҳ соати] LT',\n            lastDay : '[Дирӯз соати] LT',\n            nextWeek : 'dddd[и] [ҳафтаи оянда соати] LT',\n            lastWeek : 'dddd[и] [ҳафтаи гузашта соати] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'баъди %s',\n            past : '%s пеш',\n            s : 'якчанд сония',\n            m : 'як дақиқа',\n            mm : '%d дақиқа',\n            h : 'як соат',\n            hh : '%d соат',\n            d : 'як рӯз',\n            dd : '%d рӯз',\n            M : 'як моҳ',\n            MM : '%d моҳ',\n            y : 'як сол',\n            yy : '%d сол'\n        },\n        meridiemParse: /шаб|субҳ|рӯз|бегоҳ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'шаб') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'субҳ') {\n                return hour;\n            } else if (meridiem === 'рӯз') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'бегоҳ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'шаб';\n            } else if (hour < 11) {\n                return 'субҳ';\n            } else if (hour < 16) {\n                return 'рӯз';\n            } else if (hour < 19) {\n                return 'бегоҳ';\n            } else {\n                return 'шаб';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ум|юм)/,\n        ordinal: function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1th is the first week of the year.\n        }\n    });\n\n    return tg;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90Zy5qcz8zYjFiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwiZmlsZSI6IjQ2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgc3VmZml4ZXMgPSB7XG4gICAgICAgIDA6ICct0YPQvCcsXG4gICAgICAgIDE6ICct0YPQvCcsXG4gICAgICAgIDI6ICct0Y7QvCcsXG4gICAgICAgIDM6ICct0Y7QvCcsXG4gICAgICAgIDQ6ICct0YPQvCcsXG4gICAgICAgIDU6ICct0YPQvCcsXG4gICAgICAgIDY6ICct0YPQvCcsXG4gICAgICAgIDc6ICct0YPQvCcsXG4gICAgICAgIDg6ICct0YPQvCcsXG4gICAgICAgIDk6ICct0YPQvCcsXG4gICAgICAgIDEwOiAnLdGD0LwnLFxuICAgICAgICAxMjogJy3Rg9C8JyxcbiAgICAgICAgMTM6ICct0YPQvCcsXG4gICAgICAgIDIwOiAnLdGD0LwnLFxuICAgICAgICAzMDogJy3RjtC8JyxcbiAgICAgICAgNDA6ICct0YPQvCcsXG4gICAgICAgIDUwOiAnLdGD0LwnLFxuICAgICAgICA2MDogJy3Rg9C8JyxcbiAgICAgICAgNzA6ICct0YPQvCcsXG4gICAgICAgIDgwOiAnLdGD0LwnLFxuICAgICAgICA5MDogJy3Rg9C8JyxcbiAgICAgICAgMTAwOiAnLdGD0LwnXG4gICAgfTtcblxuICAgIHZhciB0ZyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3RnJywge1xuICAgICAgICBtb250aHMgOiAn0Y/QvdCy0LDRgF/RhNC10LLRgNCw0Ltf0LzQsNGA0YJf0LDQv9GA0LXQu1/QvNCw0Llf0LjRjtC9X9C40Y7Qu1/QsNCy0LPRg9GB0YJf0YHQtdC90YLRj9Cx0YBf0L7QutGC0Y/QsdGAX9C90L7Rj9Cx0YBf0LTQtdC60LDQsdGAJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICfRj9C90LJf0YTQtdCyX9C80LDRgF/QsNC/0YBf0LzQsNC5X9C40Y7QvV/QuNGO0Ltf0LDQstCzX9GB0LXQvV/QvtC60YJf0L3QvtGPX9C00LXQuicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXMgOiAn0Y/QutGI0LDQvdCx0LVf0LTRg9GI0LDQvdCx0LVf0YHQtdGI0LDQvdCx0LVf0YfQvtGA0YjQsNC90LHQtV/Qv9Cw0L3St9GI0LDQvdCx0LVf0rfRg9C80YrQsF/RiNCw0L3QsdC1Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ9GP0YjQsV/QtNGI0LFf0YHRiNCxX9GH0YjQsV/Qv9GI0LFf0rfRg9C8X9GI0L3QsScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAn0Y/RiF/QtNGIX9GB0Yhf0YfRiF/Qv9GIX9K30Lxf0YjQsScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdISDptbScsXG4gICAgICAgICAgICBMVFMgOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgOiAnW9CY0LzRgNOv0Lcg0YHQvtCw0YLQuF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICdb0J/QsNCz0L7SsyDRgdC+0LDRgtC4XSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5IDogJ1vQlNC40YDTr9C3INGB0L7QsNGC0LhdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrIDogJ2RkZGRb0LhdIFvSs9Cw0YTRgtCw0Lgg0L7Rj9C90LTQsCDRgdC+0LDRgtC4XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlayA6ICdkZGRkW9C4XSBb0rPQsNGE0YLQsNC4INCz0YPQt9Cw0YjRgtCwINGB0L7QsNGC0LhdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICfQsdCw0YrQtNC4ICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAnJXMg0L/QtdGIJyxcbiAgICAgICAgICAgIHMgOiAn0Y/QutGH0LDQvdC0INGB0L7QvdC40Y8nLFxuICAgICAgICAgICAgbSA6ICfRj9C6INC00LDSm9C40pvQsCcsXG4gICAgICAgICAgICBtbSA6ICclZCDQtNCw0pvQuNKb0LAnLFxuICAgICAgICAgICAgaCA6ICfRj9C6INGB0L7QsNGCJyxcbiAgICAgICAgICAgIGhoIDogJyVkINGB0L7QsNGCJyxcbiAgICAgICAgICAgIGQgOiAn0Y/QuiDRgNOv0LcnLFxuICAgICAgICAgICAgZGQgOiAnJWQg0YDTr9C3JyxcbiAgICAgICAgICAgIE0gOiAn0Y/QuiDQvNC+0rMnLFxuICAgICAgICAgICAgTU0gOiAnJWQg0LzQvtKzJyxcbiAgICAgICAgICAgIHkgOiAn0Y/QuiDRgdC+0LsnLFxuICAgICAgICAgICAgeXkgOiAnJWQg0YHQvtC7J1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv0YjQsNCxfNGB0YPQsdKzfNGA06/Qt3zQsdC10LPQvtKzLyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn0YjQsNCxJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyIDwgNCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn0YHRg9Cx0rMnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn0YDTr9C3Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDExID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfQsdC10LPQvtKzJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9GI0LDQsSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0YHRg9Cx0rMnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9GA06/Qtyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxOSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0LHQtdCz0L7Ssyc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0YjQsNCxJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9LSjRg9C8fNGO0LwpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGEgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBiID0gbnVtYmVyID49IDEwMCA/IDEwMCA6IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKHN1ZmZpeGVzW251bWJlcl0gfHwgc3VmZml4ZXNbYV0gfHwgc3VmZml4ZXNbYl0pO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA3ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxdGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB0ZztcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///46\n")},47:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var tet = moment.defineLocale('tet', {\n        months : 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split('_'),\n        monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n        weekdays : 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'),\n        weekdaysShort : 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'),\n        weekdaysMin : 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Ohin iha] LT',\n            nextDay: '[Aban iha] LT',\n            nextWeek: 'dddd [iha] LT',\n            lastDay: '[Horiseik iha] LT',\n            lastWeek: 'dddd [semana kotuk] [iha] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'iha %s',\n            past : '%s liuba',\n            s : 'minutu balun',\n            ss : 'minutu %d',\n            m : 'minutu ida',\n            mm : 'minutu %d',\n            h : 'oras ida',\n            hh : 'oras %d',\n            d : 'loron ida',\n            dd : 'loron %d',\n            M : 'fulan ida',\n            MM : 'fulan %d',\n            y : 'tinan ida',\n            yy : 'tinan %d'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return tet;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90ZXQuanM/NTc2YyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsQ0FBVztBQUNyRSxHQUFHLFNBQ3NCO0FBQ3pCLENBQUMsMkJBQTJCOzs7QUFHNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwiZmlsZSI6IjQ3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgdGV0ID0gbW9tZW50LmRlZmluZUxvY2FsZSgndGV0Jywge1xuICAgICAgICBtb250aHMgOiAnSmFuZWlydV9GZXZlcmVpcnVfTWFyc3VfQWJyaWxfTWFpdV9KdcOxdV9KdWxsdV9BZ3VzdHVfU2V0ZW1icnVfT3V0dWJydV9Ob3ZlbWJydV9EZXplbWJydScuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAnSmFuX0Zldl9NYXJfQWJyX01haV9KdW5fSnVsX0Fnb19TZXRfT3V0X05vdl9EZXonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzIDogJ0RvbWluZ3VfU2VndW5kYV9UZXJzYV9LdWFydGFfS2ludGFfU2VzdGFfU2FiYWR1Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ0RvbV9TZWdfVGVyc19LdWFfS2ludF9TZXN0X1NhYicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAnRG9fU2VnX1RlX0t1X0tpX1Nlc19TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdISDptbScsXG4gICAgICAgICAgICBMVFMgOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbT2hpbiBpaGFdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbQWJhbiBpaGFdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbaWhhXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0hvcmlzZWlrIGloYV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFtzZW1hbmEga290dWtdIFtpaGFdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ2loYSAlcycsXG4gICAgICAgICAgICBwYXN0IDogJyVzIGxpdWJhJyxcbiAgICAgICAgICAgIHMgOiAnbWludXR1IGJhbHVuJyxcbiAgICAgICAgICAgIHNzIDogJ21pbnV0dSAlZCcsXG4gICAgICAgICAgICBtIDogJ21pbnV0dSBpZGEnLFxuICAgICAgICAgICAgbW0gOiAnbWludXR1ICVkJyxcbiAgICAgICAgICAgIGggOiAnb3JhcyBpZGEnLFxuICAgICAgICAgICAgaGggOiAnb3JhcyAlZCcsXG4gICAgICAgICAgICBkIDogJ2xvcm9uIGlkYScsXG4gICAgICAgICAgICBkZCA6ICdsb3JvbiAlZCcsXG4gICAgICAgICAgICBNIDogJ2Z1bGFuIGlkYScsXG4gICAgICAgICAgICBNTSA6ICdmdWxhbiAlZCcsXG4gICAgICAgICAgICB5IDogJ3RpbmFuIGlkYScsXG4gICAgICAgICAgICB5eSA6ICd0aW5hbiAlZCdcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHN0fG5kfHJkfHRoKS8sXG4gICAgICAgIG9yZGluYWwgOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh+fihudW1iZXIgJSAxMDAgLyAxMCkgPT09IDEpID8gJ3RoJyA6XG4gICAgICAgICAgICAgICAgKGIgPT09IDEpID8gJ3N0JyA6XG4gICAgICAgICAgICAgICAgKGIgPT09IDIpID8gJ25kJyA6XG4gICAgICAgICAgICAgICAgKGIgPT09IDMpID8gJ3JkJyA6ICd0aCc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA0ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB0ZXQ7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///47\n")},48:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var te = moment.defineLocale('te', {\n        months : 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జూలై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split('_'),\n        monthsShort : 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జూలై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split('_'),\n        weekdaysShort : 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),\n        weekdaysMin : 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm',\n            LTS : 'A h:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm'\n        },\n        calendar : {\n            sameDay : '[నేడు] LT',\n            nextDay : '[రేపు] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[నిన్న] LT',\n            lastWeek : '[గత] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s లో',\n            past : '%s క్రితం',\n            s : 'కొన్ని క్షణాలు',\n            ss : '%d సెకన్లు',\n            m : 'ఒక నిమిషం',\n            mm : '%d నిమిషాలు',\n            h : 'ఒక గంట',\n            hh : '%d గంటలు',\n            d : 'ఒక రోజు',\n            dd : '%d రోజులు',\n            M : 'ఒక నెల',\n            MM : '%d నెలలు',\n            y : 'ఒక సంవత్సరం',\n            yy : '%d సంవత్సరాలు'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}వ/,\n        ordinal : '%dవ',\n        meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'రాత్రి') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ఉదయం') {\n                return hour;\n            } else if (meridiem === 'మధ్యాహ్నం') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'సాయంత్రం') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'రాత్రి';\n            } else if (hour < 10) {\n                return 'ఉదయం';\n            } else if (hour < 17) {\n                return 'మధ్యాహ్నం';\n            } else if (hour < 20) {\n                return 'సాయంత్రం';\n            } else {\n                return 'రాత్రి';\n            }\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return te;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90ZS5qcz81Y2JiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxxQ0FBcUMsSUFBSTtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiNDguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciB0ZSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3RlJywge1xuICAgICAgICBtb250aHMgOiAn4LCc4LCo4LC14LCw4LC/X+Cwq+Cwv+CwrOCxjeCwsOCwteCwsOCwv1/gsK7gsL7gsLDgsY3gsJrgsL9f4LCP4LCq4LGN4LCw4LC/4LCy4LGNX+CwruCxh1/gsJzgsYLgsKjgsY1f4LCc4LGC4LCy4LGG4LGWX+CwhuCwl+CwuOCxjeCwn+CxgV/gsLjgsYbgsKrgsY3gsJ/gsYbgsILgsKzgsLDgsY1f4LCF4LCV4LGN4LCf4LGL4LCs4LCw4LGNX+CwqOCwteCwguCwrOCwsOCxjV/gsKHgsL/gsLjgsYbgsILgsKzgsLDgsY0nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ+CwnOCwqC5f4LCr4LC/4LCs4LGN4LCwLl/gsK7gsL7gsLDgsY3gsJrgsL9f4LCP4LCq4LGN4LCw4LC/Ll/gsK7gsYdf4LCc4LGC4LCo4LGNX+CwnOCxguCwsuCxhuCxll/gsIbgsJcuX+CwuOCxhuCwquCxjS5f4LCF4LCV4LGN4LCf4LGLLl/gsKjgsLUuX+CwoeCwv+CwuOCxhi4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICB3ZWVrZGF5cyA6ICfgsIbgsKbgsL/gsLXgsL7gsLDgsIJf4LC44LGL4LCu4LC14LC+4LCw4LCCX+CwruCwguCwl+Cws+CwteCwvuCwsOCwgl/gsKzgsYHgsKfgsLXgsL7gsLDgsIJf4LCX4LGB4LCw4LGB4LC14LC+4LCw4LCCX+CwtuCxgeCwleCxjeCwsOCwteCwvuCwsOCwgl/gsLbgsKjgsL/gsLXgsL7gsLDgsIInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAn4LCG4LCm4LC/X+CwuOCxi+Cwrl/gsK7gsILgsJfgsLNf4LCs4LGB4LCnX+Cwl+CxgeCwsOCxgV/gsLbgsYHgsJXgsY3gsLBf4LC24LCo4LC/Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICfgsIZf4LC44LGLX+CwruCwgl/gsKzgsYFf4LCX4LGBX+CwtuCxgV/gsLYnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnQSBoOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdBIGg6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdEIE1NTU0gWVlZWSwgQSBoOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1vgsKjgsYfgsKHgsYFdIExUJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW+CwsOCxh+CwquCxgV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnZGRkZCwgTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdb4LCo4LC/4LCo4LGN4LCoXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlayA6ICdb4LCX4LCkXSBkZGRkLCBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnJXMg4LCy4LGLJyxcbiAgICAgICAgICAgIHBhc3QgOiAnJXMg4LCV4LGN4LCw4LC/4LCk4LCCJyxcbiAgICAgICAgICAgIHMgOiAn4LCV4LGK4LCo4LGN4LCo4LC/IOCwleCxjeCwt+Cwo+CwvuCwsuCxgScsXG4gICAgICAgICAgICBzcyA6ICclZCDgsLjgsYbgsJXgsKjgsY3gsLLgsYEnLFxuICAgICAgICAgICAgbSA6ICfgsJLgsJUg4LCo4LC/4LCu4LC/4LC34LCCJyxcbiAgICAgICAgICAgIG1tIDogJyVkIOCwqOCwv+CwruCwv+Cwt+CwvuCwsuCxgScsXG4gICAgICAgICAgICBoIDogJ+CwkuCwlSDgsJfgsILgsJ8nLFxuICAgICAgICAgICAgaGggOiAnJWQg4LCX4LCC4LCf4LCy4LGBJyxcbiAgICAgICAgICAgIGQgOiAn4LCS4LCVIOCwsOCxi+CwnOCxgScsXG4gICAgICAgICAgICBkZCA6ICclZCDgsLDgsYvgsJzgsYHgsLLgsYEnLFxuICAgICAgICAgICAgTSA6ICfgsJLgsJUg4LCo4LGG4LCyJyxcbiAgICAgICAgICAgIE1NIDogJyVkIOCwqOCxhuCwsuCwsuCxgScsXG4gICAgICAgICAgICB5IDogJ+CwkuCwlSDgsLjgsILgsLXgsKTgsY3gsLjgsLDgsIInLFxuICAgICAgICAgICAgeXkgOiAnJWQg4LC44LCC4LC14LCk4LGN4LC44LCw4LC+4LCy4LGBJ1xuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlIDogL1xcZHsxLDJ94LC1LyxcbiAgICAgICAgb3JkaW5hbCA6ICclZOCwtScsXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/gsLDgsL7gsKTgsY3gsLDgsL984LCJ4LCm4LCv4LCCfOCwruCwp+CxjeCwr+CwvuCwueCxjeCwqOCwgnzgsLjgsL7gsK/gsILgsKTgsY3gsLDgsIIvLFxuICAgICAgICBtZXJpZGllbUhvdXIgOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn4LCw4LC+4LCk4LGN4LCw4LC/Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyIDwgNCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4LCJ4LCm4LCv4LCCJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CwruCwp+CxjeCwr+CwvuCwueCxjeCwqOCwgicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4LC44LC+4LCv4LCC4LCk4LGN4LCw4LCCJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtIDogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgsLDgsL7gsKTgsY3gsLDgsL8nO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CwieCwpuCwr+Cwgic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LCu4LCn4LGN4LCv4LC+4LC54LGN4LCo4LCCJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgsLjgsL7gsK/gsILgsKTgsY3gsLDgsIInO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CwsOCwvuCwpOCxjeCwsOCwvyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDYgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDFzdCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRlO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///48\n")},49:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '௧',\n        '2': '௨',\n        '3': '௩',\n        '4': '௪',\n        '5': '௫',\n        '6': '௬',\n        '7': '௭',\n        '8': '௮',\n        '9': '௯',\n        '0': '௦'\n    }, numberMap = {\n        '௧': '1',\n        '௨': '2',\n        '௩': '3',\n        '௪': '4',\n        '௫': '5',\n        '௬': '6',\n        '௭': '7',\n        '௮': '8',\n        '௯': '9',\n        '௦': '0'\n    };\n\n    var ta = moment.defineLocale('ta', {\n        months : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),\n        monthsShort : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),\n        weekdays : 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split('_'),\n        weekdaysShort : 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split('_'),\n        weekdaysMin : 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, HH:mm',\n            LLLL : 'dddd, D MMMM YYYY, HH:mm'\n        },\n        calendar : {\n            sameDay : '[இன்று] LT',\n            nextDay : '[நாளை] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[நேற்று] LT',\n            lastWeek : '[கடந்த வாரம்] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s இல்',\n            past : '%s முன்',\n            s : 'ஒரு சில விநாடிகள்',\n            ss : '%d விநாடிகள்',\n            m : 'ஒரு நிமிடம்',\n            mm : '%d நிமிடங்கள்',\n            h : 'ஒரு மணி நேரம்',\n            hh : '%d மணி நேரம்',\n            d : 'ஒரு நாள்',\n            dd : '%d நாட்கள்',\n            M : 'ஒரு மாதம்',\n            MM : '%d மாதங்கள்',\n            y : 'ஒரு வருடம்',\n            yy : '%d ஆண்டுகள்'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}வது/,\n        ordinal : function (number) {\n            return number + 'வது';\n        },\n        preparse: function (string) {\n            return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // refer http://ta.wikipedia.org/s/1er1\n        meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 2) {\n                return ' யாமம்';\n            } else if (hour < 6) {\n                return ' வைகறை';  // வைகறை\n            } else if (hour < 10) {\n                return ' காலை'; // காலை\n            } else if (hour < 14) {\n                return ' நண்பகல்'; // நண்பகல்\n            } else if (hour < 18) {\n                return ' எற்பாடு'; // எற்பாடு\n            } else if (hour < 22) {\n                return ' மாலை'; // மாலை\n            } else {\n                return ' யாமம்';\n            }\n        },\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'யாமம்') {\n                return hour < 2 ? hour : hour + 12;\n            } else if (meridiem === 'வைகறை' || meridiem === 'காலை') {\n                return hour;\n            } else if (meridiem === 'நண்பகல்') {\n                return hour >= 10 ? hour : hour + 12;\n            } else {\n                return hour + 12;\n            }\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return ta;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90YS5qcz8zZGU1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsZ0NBQWdDO0FBQ2hDLGFBQWE7QUFDYiwrQkFBK0I7QUFDL0IsYUFBYTtBQUNiLGtDQUFrQztBQUNsQyxhQUFhO0FBQ2Isa0NBQWtDO0FBQ2xDLGFBQWE7QUFDYiwrQkFBK0I7QUFDL0IsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiNDkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICcxJzogJ+CvpycsXG4gICAgICAgICcyJzogJ+CvqCcsXG4gICAgICAgICczJzogJ+CvqScsXG4gICAgICAgICc0JzogJ+CvqicsXG4gICAgICAgICc1JzogJ+CvqycsXG4gICAgICAgICc2JzogJ+CvrCcsXG4gICAgICAgICc3JzogJ+CvrScsXG4gICAgICAgICc4JzogJ+CvricsXG4gICAgICAgICc5JzogJ+CvrycsXG4gICAgICAgICcwJzogJ+CvpidcbiAgICB9LCBudW1iZXJNYXAgPSB7XG4gICAgICAgICfgr6cnOiAnMScsXG4gICAgICAgICfgr6gnOiAnMicsXG4gICAgICAgICfgr6knOiAnMycsXG4gICAgICAgICfgr6onOiAnNCcsXG4gICAgICAgICfgr6snOiAnNScsXG4gICAgICAgICfgr6wnOiAnNicsXG4gICAgICAgICfgr60nOiAnNycsXG4gICAgICAgICfgr64nOiAnOCcsXG4gICAgICAgICfgr68nOiAnOScsXG4gICAgICAgICfgr6YnOiAnMCdcbiAgICB9O1xuXG4gICAgdmFyIHRhID0gbW9tZW50LmRlZmluZUxvY2FsZSgndGEnLCB7XG4gICAgICAgIG1vbnRocyA6ICfgrpzgrqngrrXgrrDgrr9f4K6q4K6/4K6q4K+N4K6w4K614K6w4K6/X+CuruCuvuCusOCvjeCumuCvjV/gro/grqrgr43grrDgrrLgr41f4K6u4K+HX+CunOCvguCuqeCvjV/grpzgr4LgrrLgr4hf4K6G4K6V4K644K+N4K6f4K+NX+CumuCvhuCuquCvjeCun+CvhuCuruCvjeCuquCusOCvjV/groXgrpXgr43grp/gr4fgrr7grqrgrrDgr41f4K6o4K614K6u4K+N4K6q4K6w4K+NX+Cun+Cuv+CumuCuruCvjeCuquCusOCvjScuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAn4K6c4K6p4K614K6w4K6/X+CuquCuv+CuquCvjeCusOCuteCusOCuv1/grq7grr7grrDgr43grprgr41f4K6P4K6q4K+N4K6w4K6y4K+NX+CuruCvh1/grpzgr4Lgrqngr41f4K6c4K+C4K6y4K+IX+CuhuCuleCuuOCvjeCun+CvjV/grprgr4bgrqrgr43grp/gr4bgrq7gr43grqrgrrDgr41f4K6F4K6V4K+N4K6f4K+H4K6+4K6q4K6w4K+NX+CuqOCuteCuruCvjeCuquCusOCvjV/grp/grr/grprgrq7gr43grqrgrrDgr40nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzIDogJ+CunuCuvuCur+Cuv+CuseCvjeCuseCvgeCuleCvjeCuleCuv+CutOCuruCviF/grqTgrr/grpngr43grpXgrp/gr43grpXgrr/grrTgrq7gr4hf4K6a4K+G4K614K+N4K614K6+4K6v4K+N4K6V4K6/4K604K6u4K+IX+CuquCvgeCupOCuqeCvjeCuleCuv+CutOCuruCviF/grrXgrr/grq/grr7grrTgrpXgr43grpXgrr/grrTgrq7gr4hf4K614K+G4K6z4K+N4K6z4K6/4K6V4K+N4K6V4K6/4K604K6u4K+IX+CumuCuqeCuv+CuleCvjeCuleCuv+CutOCuruCviCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICfgrp7grr7grq/grr/grrHgr4Ff4K6k4K6/4K6Z4K+N4K6V4K6z4K+NX+CumuCvhuCuteCvjeCuteCuvuCur+CvjV/grqrgr4HgrqTgrqngr41f4K614K6/4K6v4K6+4K604K6p4K+NX+CuteCvhuCus+CvjeCus+Cuv1/grprgrqngrr8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ+CunuCuvl/grqTgrr9f4K6a4K+GX+CuquCvgV/grrXgrr9f4K614K+GX+Cumicuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdISDptbScsXG4gICAgICAgICAgICBMVFMgOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdEIE1NTU0gWVlZWSwgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBEIE1NTU0gWVlZWSwgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICdb4K6H4K6p4K+N4K6x4K+BXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5IDogJ1vgrqjgrr7grrPgr4hdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrIDogJ2RkZGQsIExUJyxcbiAgICAgICAgICAgIGxhc3REYXkgOiAnW+CuqOCvh+CuseCvjeCuseCvgV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiAnW+CuleCun+CuqOCvjeCupCDgrrXgrr7grrDgrq7gr41dIGRkZGQsIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICclcyDgrofgrrLgr40nLFxuICAgICAgICAgICAgcGFzdCA6ICclcyDgrq7gr4Hgrqngr40nLFxuICAgICAgICAgICAgcyA6ICfgrpLgrrDgr4Eg4K6a4K6/4K6yIOCuteCuv+CuqOCuvuCun+Cuv+CuleCus+CvjScsXG4gICAgICAgICAgICBzcyA6ICclZCDgrrXgrr/grqjgrr7grp/grr/grpXgrrPgr40nLFxuICAgICAgICAgICAgbSA6ICfgrpLgrrDgr4Eg4K6o4K6/4K6u4K6/4K6f4K6u4K+NJyxcbiAgICAgICAgICAgIG1tIDogJyVkIOCuqOCuv+CuruCuv+Cun+CumeCvjeCuleCus+CvjScsXG4gICAgICAgICAgICBoIDogJ+CukuCusOCvgSDgrq7grqPgrr8g4K6o4K+H4K6w4K6u4K+NJyxcbiAgICAgICAgICAgIGhoIDogJyVkIOCuruCuo+CuvyDgrqjgr4fgrrDgrq7gr40nLFxuICAgICAgICAgICAgZCA6ICfgrpLgrrDgr4Eg4K6o4K6+4K6z4K+NJyxcbiAgICAgICAgICAgIGRkIDogJyVkIOCuqOCuvuCun+CvjeCuleCus+CvjScsXG4gICAgICAgICAgICBNIDogJ+CukuCusOCvgSDgrq7grr7grqTgrq7gr40nLFxuICAgICAgICAgICAgTU0gOiAnJWQg4K6u4K6+4K6k4K6Z4K+N4K6V4K6z4K+NJyxcbiAgICAgICAgICAgIHkgOiAn4K6S4K6w4K+BIOCuteCusOCvgeCun+CuruCvjScsXG4gICAgICAgICAgICB5eSA6ICclZCDgrobgrqPgr43grp/gr4HgrpXgrrPgr40nXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfeCuteCupOCvgS8sXG4gICAgICAgIG9yZGluYWwgOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+CuteCupOCvgSc7XG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1vgr6fgr6jgr6ngr6rgr6vgr6zgr63gr67gr6/gr6ZdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIHJlZmVyIGh0dHA6Ly90YS53aWtpcGVkaWEub3JnL3MvMWVyMVxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv4K6v4K6+4K6u4K6u4K+NfOCuteCviOCuleCuseCviHzgrpXgrr7grrLgr4h84K6o4K6j4K+N4K6q4K6V4K6y4K+NfOCujuCuseCvjeCuquCuvuCun+CvgXzgrq7grr7grrLgr4gvLFxuICAgICAgICBtZXJpZGllbSA6IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAnIOCur+CuvuCuruCuruCvjSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCA2KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcg4K614K+I4K6V4K6x4K+IJzsgIC8vIOCuteCviOCuleCuseCviFxuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyDgrpXgrr7grrLgr4gnOyAvLyDgrpXgrr7grrLgr4hcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcg4K6o4K6j4K+N4K6q4K6V4K6y4K+NJzsgLy8g4K6o4K6j4K+N4K6q4K6V4K6y4K+NXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxOCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnIOCujuCuseCvjeCuquCuvuCun+CvgSc7IC8vIOCujuCuseCvjeCuquCuvuCun+CvgVxuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyDgrq7grr7grrLgr4gnOyAvLyDgrq7grr7grrLgr4hcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcg4K6v4K6+4K6u4K6u4K+NJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1Ib3VyIDogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+Cur+CuvuCuruCuruCvjScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA8IDIgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CuteCviOCuleCuseCviCcgfHwgbWVyaWRpZW0gPT09ICfgrpXgrr7grrLgr4gnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4K6o4K6j4K+N4K6q4K6V4K6y4K+NJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDEwID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNiAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMXN0IGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGE7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///49\n")},5:function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "logLevel", function() { return logLevel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLogger", function() { return getLogger; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addAppender", function() { return addAppender; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeAppender", function() { return removeAppender; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getAppenders", function() { return getAppenders; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clearAppenders", function() { return clearAppenders; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addCustomLevel", function() { return addCustomLevel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeCustomLevel", function() { return removeCustomLevel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setLevel", function() { return setLevel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLevel", function() { return getLevel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Logger", function() { return Logger; });\n\n\nvar logLevel = {\n  none: 0,\n  error: 10,\n  warn: 20,\n  info: 30,\n  debug: 40\n};\n\nvar loggers = {};\nvar appenders = [];\nvar globalDefaultLevel = logLevel.none;\n\nvar standardLevels = [\'none\', \'error\', \'warn\', \'info\', \'debug\'];\nfunction isStandardLevel(level) {\n  return standardLevels.filter(function (l) {\n    return l === level;\n  }).length > 0;\n}\n\nfunction appendArgs() {\n  return [this].concat(Array.prototype.slice.call(arguments));\n}\n\nfunction logFactory(level) {\n  var threshold = logLevel[level];\n  return function () {\n    if (this.level < threshold) {\n      return;\n    }\n\n    var args = appendArgs.apply(this, arguments);\n    var i = appenders.length;\n    while (i--) {\n      var _appenders$i;\n\n      (_appenders$i = appenders[i])[level].apply(_appenders$i, args);\n    }\n  };\n}\n\nfunction logFactoryCustom(level) {\n  var threshold = logLevel[level];\n  return function () {\n    if (this.level < threshold) {\n      return;\n    }\n\n    var args = appendArgs.apply(this, arguments);\n    var i = appenders.length;\n    while (i--) {\n      var appender = appenders[i];\n      if (appender[level] !== undefined) {\n        appender[level].apply(appender, args);\n      }\n    }\n  };\n}\n\nfunction connectLoggers() {\n  var proto = Logger.prototype;\n  for (var _level in logLevel) {\n    if (isStandardLevel(_level)) {\n      if (_level !== \'none\') {\n        proto[_level] = logFactory(_level);\n      }\n    } else {\n      proto[_level] = logFactoryCustom(_level);\n    }\n  }\n}\n\nfunction disconnectLoggers() {\n  var proto = Logger.prototype;\n  for (var _level2 in logLevel) {\n    if (_level2 !== \'none\') {\n      proto[_level2] = function () {};\n    }\n  }\n}\n\nfunction getLogger(id) {\n  return loggers[id] || new Logger(id);\n}\n\nfunction addAppender(appender) {\n  if (appenders.push(appender) === 1) {\n    connectLoggers();\n  }\n}\n\nfunction removeAppender(appender) {\n  appenders = appenders.filter(function (a) {\n    return a !== appender;\n  });\n}\n\nfunction getAppenders() {\n  return [].concat(appenders);\n}\n\nfunction clearAppenders() {\n  appenders = [];\n  disconnectLoggers();\n}\n\nfunction addCustomLevel(name, value) {\n  if (logLevel[name] !== undefined) {\n    throw Error(\'Log level "\' + name + \'" already exists.\');\n  }\n\n  if (isNaN(value)) {\n    throw Error(\'Value must be a number.\');\n  }\n\n  logLevel[name] = value;\n\n  if (appenders.length > 0) {\n    connectLoggers();\n  } else {\n    Logger.prototype[name] = function () {};\n  }\n}\n\nfunction removeCustomLevel(name) {\n  if (logLevel[name] === undefined) {\n    return;\n  }\n\n  if (isStandardLevel(name)) {\n    throw Error(\'Built-in log level "\' + name + \'" cannot be removed.\');\n  }\n\n  delete logLevel[name];\n  delete Logger.prototype[name];\n}\n\nfunction setLevel(level) {\n  globalDefaultLevel = level;\n  for (var key in loggers) {\n    loggers[key].setLevel(level);\n  }\n}\n\nfunction getLevel() {\n  return globalDefaultLevel;\n}\n\nvar Logger = function () {\n  function Logger(id) {\n    \n\n    var cached = loggers[id];\n    if (cached) {\n      return cached;\n    }\n\n    loggers[id] = this;\n    this.id = id;\n    this.level = globalDefaultLevel;\n  }\n\n  Logger.prototype.debug = function debug(message) {};\n\n  Logger.prototype.info = function info(message) {};\n\n  Logger.prototype.warn = function warn(message) {};\n\n  Logger.prototype.error = function error(message) {};\n\n  Logger.prototype.setLevel = function setLevel(level) {\n    this.level = level;\n  };\n\n  Logger.prototype.isDebugEnabled = function isDebugEnabled() {\n    return this.level === logLevel.debug;\n  };\n\n  return Logger;\n}();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXVyZWxpYS1sb2dnaW5nL2Rpc3QvbmF0aXZlLW1vZHVsZXMvYXVyZWxpYS1sb2dnaW5nLmpzPzMwZmQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRU87QUFDUDtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7O0FBRU87QUFDUDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUMiLCJmaWxlIjoiNS5qcyIsInNvdXJjZXNDb250ZW50IjpbIlxuXG5leHBvcnQgdmFyIGxvZ0xldmVsID0ge1xuICBub25lOiAwLFxuICBlcnJvcjogMTAsXG4gIHdhcm46IDIwLFxuICBpbmZvOiAzMCxcbiAgZGVidWc6IDQwXG59O1xuXG52YXIgbG9nZ2VycyA9IHt9O1xudmFyIGFwcGVuZGVycyA9IFtdO1xudmFyIGdsb2JhbERlZmF1bHRMZXZlbCA9IGxvZ0xldmVsLm5vbmU7XG5cbnZhciBzdGFuZGFyZExldmVscyA9IFsnbm9uZScsICdlcnJvcicsICd3YXJuJywgJ2luZm8nLCAnZGVidWcnXTtcbmZ1bmN0aW9uIGlzU3RhbmRhcmRMZXZlbChsZXZlbCkge1xuICByZXR1cm4gc3RhbmRhcmRMZXZlbHMuZmlsdGVyKGZ1bmN0aW9uIChsKSB7XG4gICAgcmV0dXJuIGwgPT09IGxldmVsO1xuICB9KS5sZW5ndGggPiAwO1xufVxuXG5mdW5jdGlvbiBhcHBlbmRBcmdzKCkge1xuICByZXR1cm4gW3RoaXNdLmNvbmNhdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKTtcbn1cblxuZnVuY3Rpb24gbG9nRmFjdG9yeShsZXZlbCkge1xuICB2YXIgdGhyZXNob2xkID0gbG9nTGV2ZWxbbGV2ZWxdO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLmxldmVsIDwgdGhyZXNob2xkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGFyZ3MgPSBhcHBlbmRBcmdzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgdmFyIGkgPSBhcHBlbmRlcnMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIHZhciBfYXBwZW5kZXJzJGk7XG5cbiAgICAgIChfYXBwZW5kZXJzJGkgPSBhcHBlbmRlcnNbaV0pW2xldmVsXS5hcHBseShfYXBwZW5kZXJzJGksIGFyZ3MpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gbG9nRmFjdG9yeUN1c3RvbShsZXZlbCkge1xuICB2YXIgdGhyZXNob2xkID0gbG9nTGV2ZWxbbGV2ZWxdO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLmxldmVsIDwgdGhyZXNob2xkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGFyZ3MgPSBhcHBlbmRBcmdzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgdmFyIGkgPSBhcHBlbmRlcnMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIHZhciBhcHBlbmRlciA9IGFwcGVuZGVyc1tpXTtcbiAgICAgIGlmIChhcHBlbmRlcltsZXZlbF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhcHBlbmRlcltsZXZlbF0uYXBwbHkoYXBwZW5kZXIsIGFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gY29ubmVjdExvZ2dlcnMoKSB7XG4gIHZhciBwcm90byA9IExvZ2dlci5wcm90b3R5cGU7XG4gIGZvciAodmFyIF9sZXZlbCBpbiBsb2dMZXZlbCkge1xuICAgIGlmIChpc1N0YW5kYXJkTGV2ZWwoX2xldmVsKSkge1xuICAgICAgaWYgKF9sZXZlbCAhPT0gJ25vbmUnKSB7XG4gICAgICAgIHByb3RvW19sZXZlbF0gPSBsb2dGYWN0b3J5KF9sZXZlbCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb3RvW19sZXZlbF0gPSBsb2dGYWN0b3J5Q3VzdG9tKF9sZXZlbCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGRpc2Nvbm5lY3RMb2dnZXJzKCkge1xuICB2YXIgcHJvdG8gPSBMb2dnZXIucHJvdG90eXBlO1xuICBmb3IgKHZhciBfbGV2ZWwyIGluIGxvZ0xldmVsKSB7XG4gICAgaWYgKF9sZXZlbDIgIT09ICdub25lJykge1xuICAgICAgcHJvdG9bX2xldmVsMl0gPSBmdW5jdGlvbiAoKSB7fTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExvZ2dlcihpZCkge1xuICByZXR1cm4gbG9nZ2Vyc1tpZF0gfHwgbmV3IExvZ2dlcihpZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRBcHBlbmRlcihhcHBlbmRlcikge1xuICBpZiAoYXBwZW5kZXJzLnB1c2goYXBwZW5kZXIpID09PSAxKSB7XG4gICAgY29ubmVjdExvZ2dlcnMoKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlQXBwZW5kZXIoYXBwZW5kZXIpIHtcbiAgYXBwZW5kZXJzID0gYXBwZW5kZXJzLmZpbHRlcihmdW5jdGlvbiAoYSkge1xuICAgIHJldHVybiBhICE9PSBhcHBlbmRlcjtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBcHBlbmRlcnMoKSB7XG4gIHJldHVybiBbXS5jb25jYXQoYXBwZW5kZXJzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyQXBwZW5kZXJzKCkge1xuICBhcHBlbmRlcnMgPSBbXTtcbiAgZGlzY29ubmVjdExvZ2dlcnMoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZEN1c3RvbUxldmVsKG5hbWUsIHZhbHVlKSB7XG4gIGlmIChsb2dMZXZlbFtuYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgRXJyb3IoJ0xvZyBsZXZlbCBcIicgKyBuYW1lICsgJ1wiIGFscmVhZHkgZXhpc3RzLicpO1xuICB9XG5cbiAgaWYgKGlzTmFOKHZhbHVlKSkge1xuICAgIHRocm93IEVycm9yKCdWYWx1ZSBtdXN0IGJlIGEgbnVtYmVyLicpO1xuICB9XG5cbiAgbG9nTGV2ZWxbbmFtZV0gPSB2YWx1ZTtcblxuICBpZiAoYXBwZW5kZXJzLmxlbmd0aCA+IDApIHtcbiAgICBjb25uZWN0TG9nZ2VycygpO1xuICB9IGVsc2Uge1xuICAgIExvZ2dlci5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbiAoKSB7fTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlQ3VzdG9tTGV2ZWwobmFtZSkge1xuICBpZiAobG9nTGV2ZWxbbmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChpc1N0YW5kYXJkTGV2ZWwobmFtZSkpIHtcbiAgICB0aHJvdyBFcnJvcignQnVpbHQtaW4gbG9nIGxldmVsIFwiJyArIG5hbWUgKyAnXCIgY2Fubm90IGJlIHJlbW92ZWQuJyk7XG4gIH1cblxuICBkZWxldGUgbG9nTGV2ZWxbbmFtZV07XG4gIGRlbGV0ZSBMb2dnZXIucHJvdG90eXBlW25hbWVdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0TGV2ZWwobGV2ZWwpIHtcbiAgZ2xvYmFsRGVmYXVsdExldmVsID0gbGV2ZWw7XG4gIGZvciAodmFyIGtleSBpbiBsb2dnZXJzKSB7XG4gICAgbG9nZ2Vyc1trZXldLnNldExldmVsKGxldmVsKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGV2ZWwoKSB7XG4gIHJldHVybiBnbG9iYWxEZWZhdWx0TGV2ZWw7XG59XG5cbmV4cG9ydCB2YXIgTG9nZ2VyID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBMb2dnZXIoaWQpIHtcbiAgICBcblxuICAgIHZhciBjYWNoZWQgPSBsb2dnZXJzW2lkXTtcbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICByZXR1cm4gY2FjaGVkO1xuICAgIH1cblxuICAgIGxvZ2dlcnNbaWRdID0gdGhpcztcbiAgICB0aGlzLmlkID0gaWQ7XG4gICAgdGhpcy5sZXZlbCA9IGdsb2JhbERlZmF1bHRMZXZlbDtcbiAgfVxuXG4gIExvZ2dlci5wcm90b3R5cGUuZGVidWcgPSBmdW5jdGlvbiBkZWJ1ZyhtZXNzYWdlKSB7fTtcblxuICBMb2dnZXIucHJvdG90eXBlLmluZm8gPSBmdW5jdGlvbiBpbmZvKG1lc3NhZ2UpIHt9O1xuXG4gIExvZ2dlci5wcm90b3R5cGUud2FybiA9IGZ1bmN0aW9uIHdhcm4obWVzc2FnZSkge307XG5cbiAgTG9nZ2VyLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIGVycm9yKG1lc3NhZ2UpIHt9O1xuXG4gIExvZ2dlci5wcm90b3R5cGUuc2V0TGV2ZWwgPSBmdW5jdGlvbiBzZXRMZXZlbChsZXZlbCkge1xuICAgIHRoaXMubGV2ZWwgPSBsZXZlbDtcbiAgfTtcblxuICBMb2dnZXIucHJvdG90eXBlLmlzRGVidWdFbmFibGVkID0gZnVuY3Rpb24gaXNEZWJ1Z0VuYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMubGV2ZWwgPT09IGxvZ0xldmVsLmRlYnVnO1xuICB9O1xuXG4gIHJldHVybiBMb2dnZXI7XG59KCk7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5\n')},50:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var sw = moment.defineLocale('sw', {\n        months : 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split('_'),\n        monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),\n        weekdays : 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split('_'),\n        weekdaysShort : 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),\n        weekdaysMin : 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[leo saa] LT',\n            nextDay : '[kesho saa] LT',\n            nextWeek : '[wiki ijayo] dddd [saat] LT',\n            lastDay : '[jana] LT',\n            lastWeek : '[wiki iliyopita] dddd [saat] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s baadaye',\n            past : 'tokea %s',\n            s : 'hivi punde',\n            ss : 'sekunde %d',\n            m : 'dakika moja',\n            mm : 'dakika %d',\n            h : 'saa limoja',\n            hh : 'masaa %d',\n            d : 'siku moja',\n            dd : 'masiku %d',\n            M : 'mwezi mmoja',\n            MM : 'miezi %d',\n            y : 'mwaka mmoja',\n            yy : 'miaka %d'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return sw;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zdy5qcz83NGRjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiI1MC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIHN3ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnc3cnLCB7XG4gICAgICAgIG1vbnRocyA6ICdKYW51YXJpX0ZlYnJ1YXJpX01hY2hpX0FwcmlsaV9NZWlfSnVuaV9KdWxhaV9BZ29zdGlfU2VwdGVtYmFfT2t0b2JhX05vdmVtYmFfRGVzZW1iYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAnSmFuX0ZlYl9NYWNfQXByX01laV9KdW5fSnVsX0Fnb19TZXBfT2t0X05vdl9EZXMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzIDogJ0p1bWFwaWxpX0p1bWF0YXR1X0p1bWFubmVfSnVtYXRhbm9fQWxoYW1pc2lfSWp1bWFhX0p1bWFtb3NpJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ0pwbF9KdGF0X0pubmVfSnRhbl9BbGhfSWptX0ptb3MnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ0oyX0ozX0o0X0o1X0FsX0lqX0oxJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICdbbGVvIHNhYV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICdba2VzaG8gc2FhXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdbd2lraSBpamF5b10gZGRkZCBbc2FhdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdbamFuYV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiAnW3dpa2kgaWxpeW9waXRhXSBkZGRkIFtzYWF0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnJXMgYmFhZGF5ZScsXG4gICAgICAgICAgICBwYXN0IDogJ3Rva2VhICVzJyxcbiAgICAgICAgICAgIHMgOiAnaGl2aSBwdW5kZScsXG4gICAgICAgICAgICBzcyA6ICdzZWt1bmRlICVkJyxcbiAgICAgICAgICAgIG0gOiAnZGFraWthIG1vamEnLFxuICAgICAgICAgICAgbW0gOiAnZGFraWthICVkJyxcbiAgICAgICAgICAgIGggOiAnc2FhIGxpbW9qYScsXG4gICAgICAgICAgICBoaCA6ICdtYXNhYSAlZCcsXG4gICAgICAgICAgICBkIDogJ3Npa3UgbW9qYScsXG4gICAgICAgICAgICBkZCA6ICdtYXNpa3UgJWQnLFxuICAgICAgICAgICAgTSA6ICdtd2V6aSBtbW9qYScsXG4gICAgICAgICAgICBNTSA6ICdtaWV6aSAlZCcsXG4gICAgICAgICAgICB5IDogJ213YWthIG1tb2phJyxcbiAgICAgICAgICAgIHl5IDogJ21pYWthICVkJ1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA3ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxc3QgaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBzdztcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///50\n")},51:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var sv = moment.defineLocale('sv', {\n        months : 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        weekdays : 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),\n        weekdaysShort : 'sön_mån_tis_ons_tor_fre_lör'.split('_'),\n        weekdaysMin : 'sö_må_ti_on_to_fr_lö'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY-MM-DD',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY [kl.] HH:mm',\n            LLLL : 'dddd D MMMM YYYY [kl.] HH:mm',\n            lll : 'D MMM YYYY HH:mm',\n            llll : 'ddd D MMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Idag] LT',\n            nextDay: '[Imorgon] LT',\n            lastDay: '[Igår] LT',\n            nextWeek: '[På] dddd LT',\n            lastWeek: '[I] dddd[s] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'om %s',\n            past : 'för %s sedan',\n            s : 'några sekunder',\n            ss : '%d sekunder',\n            m : 'en minut',\n            mm : '%d minuter',\n            h : 'en timme',\n            hh : '%d timmar',\n            d : 'en dag',\n            dd : '%d dagar',\n            M : 'en månad',\n            MM : '%d månader',\n            y : 'ett år',\n            yy : '%d år'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(e|a)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'e' :\n                (b === 1) ? 'a' :\n                (b === 2) ? 'a' :\n                (b === 3) ? 'e' : 'e';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return sv;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zdi5qcz81ZmJkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwiZmlsZSI6IjUxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgc3YgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdzdicsIHtcbiAgICAgICAgbW9udGhzIDogJ2phbnVhcmlfZmVicnVhcmlfbWFyc19hcHJpbF9tYWpfanVuaV9qdWxpX2F1Z3VzdGlfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXInLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ2phbl9mZWJfbWFyX2Fwcl9tYWpfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVjJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6ICdzw7ZuZGFnX23DpW5kYWdfdGlzZGFnX29uc2RhZ190b3JzZGFnX2ZyZWRhZ19sw7ZyZGFnJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ3PDtm5fbcOlbl90aXNfb25zX3Rvcl9mcmVfbMO2cicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAnc8O2X23DpV90aV9vbl90b19mcl9sw7YnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnWVlZWS1NTS1ERCcsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVkgW2tsLl0gSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkIEQgTU1NTSBZWVlZIFtrbC5dIEhIOm1tJyxcbiAgICAgICAgICAgIGxsbCA6ICdEIE1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIGxsbGwgOiAnZGRkIEQgTU1NIFlZWVkgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tJZGFnXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0ltb3Jnb25dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbSWfDpXJdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW1DDpV0gZGRkZCBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tJXSBkZGRkW3NdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ29tICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAnZsO2ciAlcyBzZWRhbicsXG4gICAgICAgICAgICBzIDogJ27DpWdyYSBzZWt1bmRlcicsXG4gICAgICAgICAgICBzcyA6ICclZCBzZWt1bmRlcicsXG4gICAgICAgICAgICBtIDogJ2VuIG1pbnV0JyxcbiAgICAgICAgICAgIG1tIDogJyVkIG1pbnV0ZXInLFxuICAgICAgICAgICAgaCA6ICdlbiB0aW1tZScsXG4gICAgICAgICAgICBoaCA6ICclZCB0aW1tYXInLFxuICAgICAgICAgICAgZCA6ICdlbiBkYWcnLFxuICAgICAgICAgICAgZGQgOiAnJWQgZGFnYXInLFxuICAgICAgICAgICAgTSA6ICdlbiBtw6VuYWQnLFxuICAgICAgICAgICAgTU0gOiAnJWQgbcOlbmFkZXInLFxuICAgICAgICAgICAgeSA6ICdldHQgw6VyJyxcbiAgICAgICAgICAgIHl5IDogJyVkIMOlcidcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KGV8YSkvLFxuICAgICAgICBvcmRpbmFsIDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAofn4obnVtYmVyICUgMTAwIC8gMTApID09PSAxKSA/ICdlJyA6XG4gICAgICAgICAgICAgICAgKGIgPT09IDEpID8gJ2EnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMikgPyAnYScgOlxuICAgICAgICAgICAgICAgIChiID09PSAzKSA/ICdlJyA6ICdlJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHN2O1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///51\n")},52:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var ss = moment.defineLocale('ss', {\n        months : \"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni\".split('_'),\n        monthsShort : 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),\n        weekdays : 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split('_'),\n        weekdaysShort : 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),\n        weekdaysMin : 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY h:mm A',\n            LLLL : 'dddd, D MMMM YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : '[Namuhla nga] LT',\n            nextDay : '[Kusasa nga] LT',\n            nextWeek : 'dddd [nga] LT',\n            lastDay : '[Itolo nga] LT',\n            lastWeek : 'dddd [leliphelile] [nga] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'nga %s',\n            past : 'wenteka nga %s',\n            s : 'emizuzwana lomcane',\n            ss : '%d mzuzwana',\n            m : 'umzuzu',\n            mm : '%d emizuzu',\n            h : 'lihora',\n            hh : '%d emahora',\n            d : 'lilanga',\n            dd : '%d emalanga',\n            M : 'inyanga',\n            MM : '%d tinyanga',\n            y : 'umnyaka',\n            yy : '%d iminyaka'\n        },\n        meridiemParse: /ekuseni|emini|entsambama|ebusuku/,\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'ekuseni';\n            } else if (hours < 15) {\n                return 'emini';\n            } else if (hours < 19) {\n                return 'entsambama';\n            } else {\n                return 'ebusuku';\n            }\n        },\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ekuseni') {\n                return hour;\n            } else if (meridiem === 'emini') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {\n                if (hour === 0) {\n                    return 0;\n                }\n                return hour + 12;\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal : '%d',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return ss;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zcy5qcz81MmJkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiNTIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBzcyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3NzJywge1xuICAgICAgICBtb250aHMgOiBcIkJoaW1iaWR2d2FuZV9JbmRsb3ZhbmFfSW5kbG92J2xlbmtodWx1X01hYmFzYV9Jbmtod2VraHdldGlfSW5obGFiYV9LaG9sd2FuZV9JbmdjaV9JbnlvbmlfSW1waGFsYV9Md2V0aV9JbmdvbmdvbmlcIi5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICdCaGlfSW5hX0ludV9NYWJfSW5rX0luaF9LaG9fSWdjX0lueV9JbXBfTHdlX0lnbycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXMgOiAnTGlzb250Zm9fVW1zb21idWx1a29fTGVzaWJpbGlfTGVzaXRzYXRmdV9MZXNpbmVfTGVzaWhsYW51X1VtZ2NpYmVsbycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICdMaXNfVW1iX0xzYl9MZXNfTHNpX0xzaF9VbWcnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ0xpX1VzX0xiX0x0X0xzX0xoX1VnJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ2g6bW0gQScsXG4gICAgICAgICAgICBMVFMgOiAnaDptbTpzcyBBJyxcbiAgICAgICAgICAgIEwgOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVkgaDptbSBBJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgOiAnW05hbXVobGEgbmdhXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5IDogJ1tLdXNhc2EgbmdhXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdkZGRkIFtuZ2FdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXkgOiAnW0l0b2xvIG5nYV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiAnZGRkZCBbbGVsaXBoZWxpbGVdIFtuZ2FdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICduZ2EgJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICd3ZW50ZWthIG5nYSAlcycsXG4gICAgICAgICAgICBzIDogJ2VtaXp1endhbmEgbG9tY2FuZScsXG4gICAgICAgICAgICBzcyA6ICclZCBtenV6d2FuYScsXG4gICAgICAgICAgICBtIDogJ3VtenV6dScsXG4gICAgICAgICAgICBtbSA6ICclZCBlbWl6dXp1JyxcbiAgICAgICAgICAgIGggOiAnbGlob3JhJyxcbiAgICAgICAgICAgIGhoIDogJyVkIGVtYWhvcmEnLFxuICAgICAgICAgICAgZCA6ICdsaWxhbmdhJyxcbiAgICAgICAgICAgIGRkIDogJyVkIGVtYWxhbmdhJyxcbiAgICAgICAgICAgIE0gOiAnaW55YW5nYScsXG4gICAgICAgICAgICBNTSA6ICclZCB0aW55YW5nYScsXG4gICAgICAgICAgICB5IDogJ3Vtbnlha2EnLFxuICAgICAgICAgICAgeXkgOiAnJWQgaW1pbnlha2EnXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC9la3VzZW5pfGVtaW5pfGVudHNhbWJhbWF8ZWJ1c3VrdS8sXG4gICAgICAgIG1lcmlkaWVtIDogZnVuY3Rpb24gKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91cnMgPCAxMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnZWt1c2VuaSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXJzIDwgMTUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2VtaW5pJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91cnMgPCAxOSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnZW50c2FtYmFtYSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAnZWJ1c3VrdSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtSG91ciA6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICdla3VzZW5pJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ2VtaW5pJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDExID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICdlbnRzYW1iYW1hJyB8fCBtZXJpZGllbSA9PT0gJ2VidXN1a3UnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS8sXG4gICAgICAgIG9yZGluYWwgOiAnJWQnLFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA0ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBzcztcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///52\n")},53:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var translator = {\n        words: { //Different grammatical cases\n            ss: ['секунда', 'секунде', 'секунди'],\n            m: ['један минут', 'једне минуте'],\n            mm: ['минут', 'минуте', 'минута'],\n            h: ['један сат', 'једног сата'],\n            hh: ['сат', 'сата', 'сати'],\n            dd: ['дан', 'дана', 'дана'],\n            MM: ['месец', 'месеца', 'месеци'],\n            yy: ['година', 'године', 'година']\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n        },\n        translate: function (number, withoutSuffix, key) {\n            var wordKey = translator.words[key];\n            if (key.length === 1) {\n                return withoutSuffix ? wordKey[0] : wordKey[1];\n            } else {\n                return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n            }\n        }\n    };\n\n    var srCyrl = moment.defineLocale('sr-cyrl', {\n        months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split('_'),\n        monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),\n        weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),\n        weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS : 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar: {\n            sameDay: '[данас у] LT',\n            nextDay: '[сутра у] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[у] [недељу] [у] LT';\n                    case 3:\n                        return '[у] [среду] [у] LT';\n                    case 6:\n                        return '[у] [суботу] [у] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[у] dddd [у] LT';\n                }\n            },\n            lastDay  : '[јуче у] LT',\n            lastWeek : function () {\n                var lastWeekDays = [\n                    '[прошле] [недеље] [у] LT',\n                    '[прошлог] [понедељка] [у] LT',\n                    '[прошлог] [уторка] [у] LT',\n                    '[прошле] [среде] [у] LT',\n                    '[прошлог] [четвртка] [у] LT',\n                    '[прошлог] [петка] [у] LT',\n                    '[прошле] [суботе] [у] LT'\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'за %s',\n            past   : 'пре %s',\n            s      : 'неколико секунди',\n            ss     : translator.translate,\n            m      : translator.translate,\n            mm     : translator.translate,\n            h      : translator.translate,\n            hh     : translator.translate,\n            d      : 'дан',\n            dd     : translator.translate,\n            M      : 'месец',\n            MM     : translator.translate,\n            y      : 'годину',\n            yy     : translator.translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return srCyrl;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zci1jeXJsLmpzPzEzZTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLENBQVc7QUFDckUsR0FBRyxTQUNzQjtBQUN6QixDQUFDLDJCQUEyQjs7O0FBRzVCO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiNTMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciB0cmFuc2xhdG9yID0ge1xuICAgICAgICB3b3JkczogeyAvL0RpZmZlcmVudCBncmFtbWF0aWNhbCBjYXNlc1xuICAgICAgICAgICAgc3M6IFsn0YHQtdC60YPQvdC00LAnLCAn0YHQtdC60YPQvdC00LUnLCAn0YHQtdC60YPQvdC00LgnXSxcbiAgICAgICAgICAgIG06IFsn0ZjQtdC00LDQvSDQvNC40L3Rg9GCJywgJ9GY0LXQtNC90LUg0LzQuNC90YPRgtC1J10sXG4gICAgICAgICAgICBtbTogWyfQvNC40L3Rg9GCJywgJ9C80LjQvdGD0YLQtScsICfQvNC40L3Rg9GC0LAnXSxcbiAgICAgICAgICAgIGg6IFsn0ZjQtdC00LDQvSDRgdCw0YInLCAn0ZjQtdC00L3QvtCzINGB0LDRgtCwJ10sXG4gICAgICAgICAgICBoaDogWyfRgdCw0YInLCAn0YHQsNGC0LAnLCAn0YHQsNGC0LgnXSxcbiAgICAgICAgICAgIGRkOiBbJ9C00LDQvScsICfQtNCw0L3QsCcsICfQtNCw0L3QsCddLFxuICAgICAgICAgICAgTU06IFsn0LzQtdGB0LXRhicsICfQvNC10YHQtdGG0LAnLCAn0LzQtdGB0LXRhtC4J10sXG4gICAgICAgICAgICB5eTogWyfQs9C+0LTQuNC90LAnLCAn0LPQvtC00LjQvdC1JywgJ9Cz0L7QtNC40L3QsCddXG4gICAgICAgIH0sXG4gICAgICAgIGNvcnJlY3RHcmFtbWF0aWNhbENhc2U6IGZ1bmN0aW9uIChudW1iZXIsIHdvcmRLZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgPT09IDEgPyB3b3JkS2V5WzBdIDogKG51bWJlciA+PSAyICYmIG51bWJlciA8PSA0ID8gd29yZEtleVsxXSA6IHdvcmRLZXlbMl0pO1xuICAgICAgICB9LFxuICAgICAgICB0cmFuc2xhdGU6IGZ1bmN0aW9uIChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSkge1xuICAgICAgICAgICAgdmFyIHdvcmRLZXkgPSB0cmFuc2xhdG9yLndvcmRzW2tleV07XG4gICAgICAgICAgICBpZiAoa2V5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gd29yZEtleVswXSA6IHdvcmRLZXlbMV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnICcgKyB0cmFuc2xhdG9yLmNvcnJlY3RHcmFtbWF0aWNhbENhc2UobnVtYmVyLCB3b3JkS2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgc3JDeXJsID0gbW9tZW50LmRlZmluZUxvY2FsZSgnc3ItY3lybCcsIHtcbiAgICAgICAgbW9udGhzOiAn0ZjQsNC90YPQsNGAX9GE0LXQsdGA0YPQsNGAX9C80LDRgNGCX9Cw0L/RgNC40Ltf0LzQsNGYX9GY0YPQvV/RmNGD0Ltf0LDQstCz0YPRgdGCX9GB0LXQv9GC0LXQvNCx0LDRgF/QvtC60YLQvtCx0LDRgF/QvdC+0LLQtdC80LHQsNGAX9C00LXRhtC10LzQsdCw0YAnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAn0ZjQsNC9Ll/RhNC10LEuX9C80LDRgC5f0LDQv9GALl/QvNCw0Zhf0ZjRg9C9X9GY0YPQu1/QsNCy0LMuX9GB0LXQvy5f0L7QutGCLl/QvdC+0LIuX9C00LXRhi4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAn0L3QtdC00LXRmdCwX9C/0L7QvdC10LTQtdGZ0LDQul/Rg9GC0L7RgNCw0Lpf0YHRgNC10LTQsF/Rh9C10YLQstGA0YLQsNC6X9C/0LXRgtCw0Lpf0YHRg9Cx0L7RgtCwJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn0L3QtdC0Ll/Qv9C+0L0uX9GD0YLQvi5f0YHRgNC1Ll/Rh9C10YIuX9C/0LXRgi5f0YHRg9CxLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfQvdC1X9C/0L5f0YPRgl/RgdGAX9GH0LVf0L/QtV/RgdGDJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRC4gTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QuIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBELiBNTU1NIFlZWVkgSDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb0LTQsNC90LDRgSDRg10gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vRgdGD0YLRgNCwINGDXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vRg10gW9C90LXQtNC10ZnRg10gW9GDXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9GDXSBb0YHRgNC10LTRg10gW9GDXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9GDXSBb0YHRg9Cx0L7RgtGDXSBb0YNdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0YNdIGRkZGQgW9GDXSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXkgIDogJ1vRmNGD0YfQtSDRg10gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxhc3RXZWVrRGF5cyA9IFtcbiAgICAgICAgICAgICAgICAgICAgJ1vQv9GA0L7RiNC70LVdIFvQvdC10LTQtdGZ0LVdIFvRg10gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW9C/0YDQvtGI0LvQvtCzXSBb0L/QvtC90LXQtNC10ZnQutCwXSBb0YNdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1vQv9GA0L7RiNC70L7Qs10gW9GD0YLQvtGA0LrQsF0gW9GDXSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdb0L/RgNC+0YjQu9C1XSBb0YHRgNC10LTQtV0gW9GDXSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdb0L/RgNC+0YjQu9C+0LNdIFvRh9C10YLQstGA0YLQutCwXSBb0YNdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1vQv9GA0L7RiNC70L7Qs10gW9C/0LXRgtC60LBdIFvRg10gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW9C/0YDQvtGI0LvQtV0gW9GB0YPQsdC+0YLQtV0gW9GDXSBMVCdcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIHJldHVybiBsYXN0V2Vla0RheXNbdGhpcy5kYXkoKV07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ9C30LAgJXMnLFxuICAgICAgICAgICAgcGFzdCAgIDogJ9C/0YDQtSAlcycsXG4gICAgICAgICAgICBzICAgICAgOiAn0L3QtdC60L7Qu9C40LrQviDRgdC10LrRg9C90LTQuCcsXG4gICAgICAgICAgICBzcyAgICAgOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG0gICAgICA6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgbW0gICAgIDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBoICAgICAgOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGhoICAgICA6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgZCAgICAgIDogJ9C00LDQvScsXG4gICAgICAgICAgICBkZCAgICAgOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE0gICAgICA6ICfQvNC10YHQtdGGJyxcbiAgICAgICAgICAgIE1NICAgICA6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgeSAgICAgIDogJ9Cz0L7QtNC40L3RgycsXG4gICAgICAgICAgICB5eSAgICAgOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZVxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsIDogJyVkLicsXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDcgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDFzdCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNyQ3lybDtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///53\n")},54:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var translator = {\n        words: { //Different grammatical cases\n            ss: ['sekunda', 'sekunde', 'sekundi'],\n            m: ['jedan minut', 'jedne minute'],\n            mm: ['minut', 'minute', 'minuta'],\n            h: ['jedan sat', 'jednog sata'],\n            hh: ['sat', 'sata', 'sati'],\n            dd: ['dan', 'dana', 'dana'],\n            MM: ['mesec', 'meseca', 'meseci'],\n            yy: ['godina', 'godine', 'godina']\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n        },\n        translate: function (number, withoutSuffix, key) {\n            var wordKey = translator.words[key];\n            if (key.length === 1) {\n                return withoutSuffix ? wordKey[0] : wordKey[1];\n            } else {\n                return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n            }\n        }\n    };\n\n    var sr = moment.defineLocale('sr', {\n        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),\n        monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split('_'),\n        weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS : 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sutra u] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedelju] [u] LT';\n                    case 3:\n                        return '[u] [sredu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay  : '[juče u] LT',\n            lastWeek : function () {\n                var lastWeekDays = [\n                    '[prošle] [nedelje] [u] LT',\n                    '[prošlog] [ponedeljka] [u] LT',\n                    '[prošlog] [utorka] [u] LT',\n                    '[prošle] [srede] [u] LT',\n                    '[prošlog] [četvrtka] [u] LT',\n                    '[prošlog] [petka] [u] LT',\n                    '[prošle] [subote] [u] LT'\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past   : 'pre %s',\n            s      : 'nekoliko sekundi',\n            ss     : translator.translate,\n            m      : translator.translate,\n            mm     : translator.translate,\n            h      : translator.translate,\n            hh     : translator.translate,\n            d      : 'dan',\n            dd     : translator.translate,\n            M      : 'mesec',\n            MM     : translator.translate,\n            y      : 'godinu',\n            yy     : translator.translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return sr;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zci5qcz9jZjFlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwiZmlsZSI6IjU0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgdHJhbnNsYXRvciA9IHtcbiAgICAgICAgd29yZHM6IHsgLy9EaWZmZXJlbnQgZ3JhbW1hdGljYWwgY2FzZXNcbiAgICAgICAgICAgIHNzOiBbJ3Nla3VuZGEnLCAnc2VrdW5kZScsICdzZWt1bmRpJ10sXG4gICAgICAgICAgICBtOiBbJ2plZGFuIG1pbnV0JywgJ2plZG5lIG1pbnV0ZSddLFxuICAgICAgICAgICAgbW06IFsnbWludXQnLCAnbWludXRlJywgJ21pbnV0YSddLFxuICAgICAgICAgICAgaDogWydqZWRhbiBzYXQnLCAnamVkbm9nIHNhdGEnXSxcbiAgICAgICAgICAgIGhoOiBbJ3NhdCcsICdzYXRhJywgJ3NhdGknXSxcbiAgICAgICAgICAgIGRkOiBbJ2RhbicsICdkYW5hJywgJ2RhbmEnXSxcbiAgICAgICAgICAgIE1NOiBbJ21lc2VjJywgJ21lc2VjYScsICdtZXNlY2knXSxcbiAgICAgICAgICAgIHl5OiBbJ2dvZGluYScsICdnb2RpbmUnLCAnZ29kaW5hJ11cbiAgICAgICAgfSxcbiAgICAgICAgY29ycmVjdEdyYW1tYXRpY2FsQ2FzZTogZnVuY3Rpb24gKG51bWJlciwgd29yZEtleSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciA9PT0gMSA/IHdvcmRLZXlbMF0gOiAobnVtYmVyID49IDIgJiYgbnVtYmVyIDw9IDQgPyB3b3JkS2V5WzFdIDogd29yZEtleVsyXSk7XG4gICAgICAgIH0sXG4gICAgICAgIHRyYW5zbGF0ZTogZnVuY3Rpb24gKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5KSB7XG4gICAgICAgICAgICB2YXIgd29yZEtleSA9IHRyYW5zbGF0b3Iud29yZHNba2V5XTtcbiAgICAgICAgICAgIGlmIChrZXkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyB3b3JkS2V5WzBdIDogd29yZEtleVsxXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICcgJyArIHRyYW5zbGF0b3IuY29ycmVjdEdyYW1tYXRpY2FsQ2FzZShudW1iZXIsIHdvcmRLZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBzciA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3NyJywge1xuICAgICAgICBtb250aHM6ICdqYW51YXJfZmVicnVhcl9tYXJ0X2FwcmlsX21hal9qdW5fanVsX2F2Z3VzdF9zZXB0ZW1iYXJfb2t0b2Jhcl9ub3ZlbWJhcl9kZWNlbWJhcicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdqYW4uX2ZlYi5fbWFyLl9hcHIuX21hal9qdW5fanVsX2F2Zy5fc2VwLl9va3QuX25vdi5fZGVjLicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICduZWRlbGphX3BvbmVkZWxqYWtfdXRvcmFrX3NyZWRhX8SNZXR2cnRha19wZXRha19zdWJvdGEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICduZWQuX3Bvbi5fdXRvLl9zcmUuX8SNZXQuX3BldC5fc3ViLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICduZV9wb191dF9zcl/EjWVfcGVfc3UnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdCA6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWSBIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tkYW5hcyB1XSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW3N1dHJhIHVdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIFtuZWRlbGp1XSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBbc3JlZHVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIFtzdWJvdHVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIGRkZGQgW3VdIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheSAgOiAnW2p1xI1lIHVdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBsYXN0V2Vla0RheXMgPSBbXG4gICAgICAgICAgICAgICAgICAgICdbcHJvxaFsZV0gW25lZGVsamVdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdbcHJvxaFsb2ddIFtwb25lZGVsamthXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW3Byb8WhbG9nXSBbdXRvcmthXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW3Byb8WhbGVdIFtzcmVkZV0gW3VdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1twcm/FoWxvZ10gW8SNZXR2cnRrYV0gW3VdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1twcm/FoWxvZ10gW3BldGthXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW3Byb8WhbGVdIFtzdWJvdGVdIFt1XSBMVCdcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIHJldHVybiBsYXN0V2Vla0RheXNbdGhpcy5kYXkoKV07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ3phICVzJyxcbiAgICAgICAgICAgIHBhc3QgICA6ICdwcmUgJXMnLFxuICAgICAgICAgICAgcyAgICAgIDogJ25la29saWtvIHNla3VuZGknLFxuICAgICAgICAgICAgc3MgICAgIDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBtICAgICAgOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1tICAgICA6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgaCAgICAgIDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBoaCAgICAgOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGQgICAgICA6ICdkYW4nLFxuICAgICAgICAgICAgZGQgICAgIDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBNICAgICAgOiAnbWVzZWMnLFxuICAgICAgICAgICAgTU0gICAgIDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICB5ICAgICAgOiAnZ29kaW51JyxcbiAgICAgICAgICAgIHl5ICAgICA6IHRyYW5zbGF0b3IudHJhbnNsYXRlXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWwgOiAnJWQuJyxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNyAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMXN0IGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3I7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///54\n")},55:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var sq = moment.defineLocale('sq', {\n        months : 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split('_'),\n        monthsShort : 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),\n        weekdays : 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split('_'),\n        weekdaysShort : 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),\n        weekdaysMin : 'D_H_Ma_Më_E_P_Sh'.split('_'),\n        weekdaysParseExact : true,\n        meridiemParse: /PD|MD/,\n        isPM: function (input) {\n            return input.charAt(0) === 'M';\n        },\n        meridiem : function (hours, minutes, isLower) {\n            return hours < 12 ? 'PD' : 'MD';\n        },\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Sot në] LT',\n            nextDay : '[Nesër në] LT',\n            nextWeek : 'dddd [në] LT',\n            lastDay : '[Dje në] LT',\n            lastWeek : 'dddd [e kaluar në] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'në %s',\n            past : '%s më parë',\n            s : 'disa sekonda',\n            ss : '%d sekonda',\n            m : 'një minutë',\n            mm : '%d minuta',\n            h : 'një orë',\n            hh : '%d orë',\n            d : 'një ditë',\n            dd : '%d ditë',\n            M : 'një muaj',\n            MM : '%d muaj',\n            y : 'një vit',\n            yy : '%d vite'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return sq;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zcS5qcz9jOGYzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwiZmlsZSI6IjU1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgc3EgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdzcScsIHtcbiAgICAgICAgbW9udGhzIDogJ0phbmFyX1Noa3VydF9NYXJzX1ByaWxsX01hal9RZXJzaG9yX0tvcnJpa19HdXNodF9TaHRhdG9yX1RldG9yX07Dq250b3JfRGhqZXRvcicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAnSmFuX1Noa19NYXJfUHJpX01hal9RZXJfS29yX0d1c19TaHRfVGV0X07Dq25fRGhqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6ICdFIERpZWxfRSBIw6tuw6tfRSBNYXJ0w6tfRSBNw6tya3Vyw6tfRSBFbmp0ZV9FIFByZW10ZV9FIFNodHVuw6snLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAnRGllX0jDq25fTWFyX03Dq3JfRW5qX1ByZV9TaHQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ0RfSF9NYV9Nw6tfRV9QX1NoJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAvUER8TUQvLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dC5jaGFyQXQoMCkgPT09ICdNJztcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW0gOiBmdW5jdGlvbiAoaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBob3VycyA8IDEyID8gJ1BEJyA6ICdNRCc7XG4gICAgICAgIH0sXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1tTb3QgbsOrXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5IDogJ1tOZXPDq3IgbsOrXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdkZGRkIFtuw6tdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXkgOiAnW0RqZSBuw6tdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogJ2RkZGQgW2Uga2FsdWFyIG7Dq10gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ27DqyAlcycsXG4gICAgICAgICAgICBwYXN0IDogJyVzIG3DqyBwYXLDqycsXG4gICAgICAgICAgICBzIDogJ2Rpc2Egc2Vrb25kYScsXG4gICAgICAgICAgICBzcyA6ICclZCBzZWtvbmRhJyxcbiAgICAgICAgICAgIG0gOiAnbmrDqyBtaW51dMOrJyxcbiAgICAgICAgICAgIG1tIDogJyVkIG1pbnV0YScsXG4gICAgICAgICAgICBoIDogJ25qw6sgb3LDqycsXG4gICAgICAgICAgICBoaCA6ICclZCBvcsOrJyxcbiAgICAgICAgICAgIGQgOiAnbmrDqyBkaXTDqycsXG4gICAgICAgICAgICBkZCA6ICclZCBkaXTDqycsXG4gICAgICAgICAgICBNIDogJ25qw6sgbXVhaicsXG4gICAgICAgICAgICBNTSA6ICclZCBtdWFqJyxcbiAgICAgICAgICAgIHkgOiAnbmrDqyB2aXQnLFxuICAgICAgICAgICAgeXkgOiAnJWQgdml0ZSdcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbCA6ICclZC4nLFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA0ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBzcTtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///55\n")},56:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':\n                return withoutSuffix || isFuture ? 'nekaj sekund' : 'nekaj sekundami';\n            case 'ss':\n                if (number === 1) {\n                    result += withoutSuffix ? 'sekundo' : 'sekundi';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah';\n                } else {\n                    result += withoutSuffix || isFuture ? 'sekund' : 'sekund';\n                }\n                return result;\n            case 'm':\n                return withoutSuffix ? 'ena minuta' : 'eno minuto';\n            case 'mm':\n                if (number === 1) {\n                    result += withoutSuffix ? 'minuta' : 'minuto';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'minuti' : 'minutama';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'minute' : 'minutami';\n                } else {\n                    result += withoutSuffix || isFuture ? 'minut' : 'minutami';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'ena ura' : 'eno uro';\n            case 'hh':\n                if (number === 1) {\n                    result += withoutSuffix ? 'ura' : 'uro';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'uri' : 'urama';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'ure' : 'urami';\n                } else {\n                    result += withoutSuffix || isFuture ? 'ur' : 'urami';\n                }\n                return result;\n            case 'd':\n                return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';\n            case 'dd':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'dan' : 'dnem';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';\n                } else {\n                    result += withoutSuffix || isFuture ? 'dni' : 'dnevi';\n                }\n                return result;\n            case 'M':\n                return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';\n            case 'MM':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'mesece' : 'meseci';\n                } else {\n                    result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';\n                }\n                return result;\n            case 'y':\n                return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';\n            case 'yy':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'leto' : 'letom';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'leti' : 'letoma';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'leta' : 'leti';\n                } else {\n                    result += withoutSuffix || isFuture ? 'let' : 'leti';\n                }\n                return result;\n        }\n    }\n\n    var sl = moment.defineLocale('sl', {\n        months : 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split('_'),\n        monthsShort : 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),\n        weekdaysShort : 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),\n        weekdaysMin : 'ne_po_to_sr_če_pe_so'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY H:mm',\n            LLLL : 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay  : '[danes ob] LT',\n            nextDay  : '[jutri ob] LT',\n\n            nextWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v] [nedeljo] [ob] LT';\n                    case 3:\n                        return '[v] [sredo] [ob] LT';\n                    case 6:\n                        return '[v] [soboto] [ob] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[v] dddd [ob] LT';\n                }\n            },\n            lastDay  : '[včeraj ob] LT',\n            lastWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[prejšnjo] [nedeljo] [ob] LT';\n                    case 3:\n                        return '[prejšnjo] [sredo] [ob] LT';\n                    case 6:\n                        return '[prejšnjo] [soboto] [ob] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prejšnji] dddd [ob] LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'čez %s',\n            past   : 'pred %s',\n            s      : processRelativeTime,\n            ss     : processRelativeTime,\n            m      : processRelativeTime,\n            mm     : processRelativeTime,\n            h      : processRelativeTime,\n            hh     : processRelativeTime,\n            d      : processRelativeTime,\n            dd     : processRelativeTime,\n            M      : processRelativeTime,\n            MM     : processRelativeTime,\n            y      : processRelativeTime,\n            yy     : processRelativeTime\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return sl;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zbC5qcz84MTU1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiNTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NSZWxhdGl2ZVRpbWUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBudW1iZXIgKyAnICc7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICduZWthaiBzZWt1bmQnIDogJ25la2FqIHNla3VuZGFtaSc7XG4gICAgICAgICAgICBjYXNlICdzcyc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCA/ICdzZWt1bmRvJyA6ICdzZWt1bmRpJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdzZWt1bmRpJyA6ICdzZWt1bmRhaCc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPCA1KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ3Nla3VuZGUnIDogJ3Nla3VuZGFoJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdzZWt1bmQnIDogJ3Nla3VuZCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdlbmEgbWludXRhJyA6ICdlbm8gbWludXRvJztcbiAgICAgICAgICAgIGNhc2UgJ21tJzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4ID8gJ21pbnV0YScgOiAnbWludXRvJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdtaW51dGknIDogJ21pbnV0YW1hJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA8IDUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbWludXRlJyA6ICdtaW51dGFtaSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbWludXQnIDogJ21pbnV0YW1pJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIGNhc2UgJ2gnOlxuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ2VuYSB1cmEnIDogJ2VubyB1cm8nO1xuICAgICAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggPyAndXJhJyA6ICd1cm8nO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ3VyaScgOiAndXJhbWEnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyIDwgNSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICd1cmUnIDogJ3VyYW1pJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICd1cicgOiAndXJhbWknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnZW4gZGFuJyA6ICdlbmltIGRuZW0nO1xuICAgICAgICAgICAgY2FzZSAnZGQnOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnZGFuJyA6ICdkbmVtJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdkbmknIDogJ2RuZXZvbWEnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2RuaScgOiAnZG5ldmknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnZW4gbWVzZWMnIDogJ2VuaW0gbWVzZWNlbSc7XG4gICAgICAgICAgICBjYXNlICdNTSc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdtZXNlYycgOiAnbWVzZWNlbSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbWVzZWNhJyA6ICdtZXNlY2VtYSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPCA1KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ21lc2VjZScgOiAnbWVzZWNpJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdtZXNlY2V2JyA6ICdtZXNlY2knO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAneSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnZW5vIGxldG8nIDogJ2VuaW0gbGV0b20nO1xuICAgICAgICAgICAgY2FzZSAneXknOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbGV0bycgOiAnbGV0b20nO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2xldGknIDogJ2xldG9tYSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPCA1KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2xldGEnIDogJ2xldGknO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2xldCcgOiAnbGV0aSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc2wgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdzbCcsIHtcbiAgICAgICAgbW9udGhzIDogJ2phbnVhcl9mZWJydWFyX21hcmVjX2FwcmlsX21hal9qdW5pal9qdWxpal9hdmd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXInLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ2phbi5fZmViLl9tYXIuX2Fwci5fbWFqLl9qdW4uX2p1bC5fYXZnLl9zZXAuX29rdC5fbm92Ll9kZWMuJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5cyA6ICduZWRlbGphX3BvbmVkZWxqZWtfdG9yZWtfc3JlZGFfxI1ldHJ0ZWtfcGV0ZWtfc29ib3RhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ25lZC5fcG9uLl90b3IuX3NyZS5fxI1ldC5fcGV0Ll9zb2IuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICduZV9wb190b19zcl/EjWVfcGVfc28nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdCA6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSDptbScsXG4gICAgICAgICAgICBMVFMgOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEwgOiAnRC4gTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdELiBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQsIEQuIE1NTU0gWVlZWSBIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgIDogJ1tkYW5lcyBvYl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheSAgOiAnW2p1dHJpIG9iXSBMVCcsXG5cbiAgICAgICAgICAgIG5leHRXZWVrIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2XSBbbmVkZWxqb10gW29iXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ZdIFtzcmVkb10gW29iXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ZdIFtzb2JvdG9dIFtvYl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2XSBkZGRkIFtvYl0gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5ICA6ICdbdsSNZXJhaiBvYl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ByZWrFoW5qb10gW25lZGVsam9dIFtvYl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1twcmVqxaFuam9dIFtzcmVkb10gW29iXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ByZWrFoW5qb10gW3NvYm90b10gW29iXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ByZWrFoW5qaV0gZGRkZCBbb2JdIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ8SNZXogJXMnLFxuICAgICAgICAgICAgcGFzdCAgIDogJ3ByZWQgJXMnLFxuICAgICAgICAgICAgcyAgICAgIDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHNzICAgICA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtICAgICAgOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgbW0gICAgIDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGggICAgICA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBoaCAgICAgOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZCAgICAgIDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGRkICAgICA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBNICAgICAgOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgTU0gICAgIDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHkgICAgICA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5eSAgICAgOiBwcm9jZXNzUmVsYXRpdmVUaW1lXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWwgOiAnJWQuJyxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNyAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMXN0IGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2w7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///56\n")},57:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var months = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split('_'),\n        monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');\n    function plural(n) {\n        return (n > 1) && (n < 5);\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':  // a few seconds / in a few seconds / a few seconds ago\n                return (withoutSuffix || isFuture) ? 'pár sekúnd' : 'pár sekundami';\n            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'sekundy' : 'sekúnd');\n                } else {\n                    return result + 'sekundami';\n                }\n                break;\n            case 'm':  // a minute / in a minute / a minute ago\n                return withoutSuffix ? 'minúta' : (isFuture ? 'minútu' : 'minútou');\n            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'minúty' : 'minút');\n                } else {\n                    return result + 'minútami';\n                }\n                break;\n            case 'h':  // an hour / in an hour / an hour ago\n                return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');\n            case 'hh': // 9 hours / in 9 hours / 9 hours ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'hodiny' : 'hodín');\n                } else {\n                    return result + 'hodinami';\n                }\n                break;\n            case 'd':  // a day / in a day / a day ago\n                return (withoutSuffix || isFuture) ? 'deň' : 'dňom';\n            case 'dd': // 9 days / in 9 days / 9 days ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'dni' : 'dní');\n                } else {\n                    return result + 'dňami';\n                }\n                break;\n            case 'M':  // a month / in a month / a month ago\n                return (withoutSuffix || isFuture) ? 'mesiac' : 'mesiacom';\n            case 'MM': // 9 months / in 9 months / 9 months ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'mesiace' : 'mesiacov');\n                } else {\n                    return result + 'mesiacmi';\n                }\n                break;\n            case 'y':  // a year / in a year / a year ago\n                return (withoutSuffix || isFuture) ? 'rok' : 'rokom';\n            case 'yy': // 9 years / in 9 years / 9 years ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'roky' : 'rokov');\n                } else {\n                    return result + 'rokmi';\n                }\n                break;\n        }\n    }\n\n    var sk = moment.defineLocale('sk', {\n        months : months,\n        monthsShort : monthsShort,\n        weekdays : 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),\n        weekdaysShort : 'ne_po_ut_st_št_pi_so'.split('_'),\n        weekdaysMin : 'ne_po_ut_st_št_pi_so'.split('_'),\n        longDateFormat : {\n            LT: 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY H:mm',\n            LLLL : 'dddd D. MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay: '[dnes o] LT',\n            nextDay: '[zajtra o] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v nedeľu o] LT';\n                    case 1:\n                    case 2:\n                        return '[v] dddd [o] LT';\n                    case 3:\n                        return '[v stredu o] LT';\n                    case 4:\n                        return '[vo štvrtok o] LT';\n                    case 5:\n                        return '[v piatok o] LT';\n                    case 6:\n                        return '[v sobotu o] LT';\n                }\n            },\n            lastDay: '[včera o] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[minulú nedeľu o] LT';\n                    case 1:\n                    case 2:\n                        return '[minulý] dddd [o] LT';\n                    case 3:\n                        return '[minulú stredu o] LT';\n                    case 4:\n                    case 5:\n                        return '[minulý] dddd [o] LT';\n                    case 6:\n                        return '[minulú sobotu o] LT';\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past : 'pred %s',\n            s : translate,\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : translate,\n            hh : translate,\n            d : translate,\n            dd : translate,\n            M : translate,\n            MM : translate,\n            y : translate,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return sk;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zay5qcz83YmU2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiI1Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIG1vbnRocyA9ICdqYW51w6FyX2ZlYnJ1w6FyX21hcmVjX2FwcsOtbF9tw6FqX2rDum5fasO6bF9hdWd1c3Rfc2VwdGVtYmVyX29rdMOzYmVyX25vdmVtYmVyX2RlY2VtYmVyJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA9ICdqYW5fZmViX21hcl9hcHJfbcOhal9qw7puX2rDumxfYXVnX3NlcF9va3Rfbm92X2RlYycuc3BsaXQoJ18nKTtcbiAgICBmdW5jdGlvbiBwbHVyYWwobikge1xuICAgICAgICByZXR1cm4gKG4gPiAxKSAmJiAobiA8IDUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB0cmFuc2xhdGUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBudW1iZXIgKyAnICc7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdzJzogIC8vIGEgZmV3IHNlY29uZHMgLyBpbiBhIGZldyBzZWNvbmRzIC8gYSBmZXcgc2Vjb25kcyBhZ29cbiAgICAgICAgICAgICAgICByZXR1cm4gKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpID8gJ3DDoXIgc2Vrw7puZCcgOiAncMOhciBzZWt1bmRhbWknO1xuICAgICAgICAgICAgY2FzZSAnc3MnOiAvLyA5IHNlY29uZHMgLyBpbiA5IHNlY29uZHMgLyA5IHNlY29uZHMgYWdvXG4gICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdzZWt1bmR5JyA6ICdzZWvDum5kJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdzZWt1bmRhbWknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ20nOiAgLy8gYSBtaW51dGUgLyBpbiBhIG1pbnV0ZSAvIGEgbWludXRlIGFnb1xuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ21pbsO6dGEnIDogKGlzRnV0dXJlID8gJ21pbsO6dHUnIDogJ21pbsO6dG91Jyk7XG4gICAgICAgICAgICBjYXNlICdtbSc6IC8vIDkgbWludXRlcyAvIGluIDkgbWludXRlcyAvIDkgbWludXRlcyBhZ29cbiAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ21pbsO6dHknIDogJ21pbsO6dCcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnbWluw7p0YW1pJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdoJzogIC8vIGFuIGhvdXIgLyBpbiBhbiBob3VyIC8gYW4gaG91ciBhZ29cbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdob2RpbmEnIDogKGlzRnV0dXJlID8gJ2hvZGludScgOiAnaG9kaW5vdScpO1xuICAgICAgICAgICAgY2FzZSAnaGgnOiAvLyA5IGhvdXJzIC8gaW4gOSBob3VycyAvIDkgaG91cnMgYWdvXG4gICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdob2RpbnknIDogJ2hvZMOtbicpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnaG9kaW5hbWknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2QnOiAgLy8gYSBkYXkgLyBpbiBhIGRheSAvIGEgZGF5IGFnb1xuICAgICAgICAgICAgICAgIHJldHVybiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkgPyAnZGXFiCcgOiAnZMWIb20nO1xuICAgICAgICAgICAgY2FzZSAnZGQnOiAvLyA5IGRheXMgLyBpbiA5IGRheXMgLyA5IGRheXMgYWdvXG4gICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdkbmknIDogJ2Ruw60nKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ2TFiGFtaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnTSc6ICAvLyBhIG1vbnRoIC8gaW4gYSBtb250aCAvIGEgbW9udGggYWdvXG4gICAgICAgICAgICAgICAgcmV0dXJuICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlKSA/ICdtZXNpYWMnIDogJ21lc2lhY29tJztcbiAgICAgICAgICAgIGNhc2UgJ01NJzogLy8gOSBtb250aHMgLyBpbiA5IG1vbnRocyAvIDkgbW9udGhzIGFnb1xuICAgICAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnbWVzaWFjZScgOiAnbWVzaWFjb3YnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ21lc2lhY21pJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd5JzogIC8vIGEgeWVhciAvIGluIGEgeWVhciAvIGEgeWVhciBhZ29cbiAgICAgICAgICAgICAgICByZXR1cm4gKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpID8gJ3JvaycgOiAncm9rb20nO1xuICAgICAgICAgICAgY2FzZSAneXknOiAvLyA5IHllYXJzIC8gaW4gOSB5ZWFycyAvIDkgeWVhcnMgYWdvXG4gICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdyb2t5JyA6ICdyb2tvdicpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAncm9rbWknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzayA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3NrJywge1xuICAgICAgICBtb250aHMgOiBtb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0IDogbW9udGhzU2hvcnQsXG4gICAgICAgIHdlZWtkYXlzIDogJ25lZGXEvmFfcG9uZGVsb2tfdXRvcm9rX3N0cmVkYV/FoXR2cnRva19waWF0b2tfc29ib3RhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ25lX3BvX3V0X3N0X8WhdF9waV9zbycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAnbmVfcG9fdXRfc3RfxaF0X3BpX3NvJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUOiAnSDptbScsXG4gICAgICAgICAgICBMVFMgOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEwgOiAnRC4gTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdELiBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQgRC4gTU1NTSBZWVlZIEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tkbmVzIG9dIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbemFqdHJhIG9dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3YgbmVkZcS+dSBvXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdl0gZGRkZCBbb10gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2IHN0cmVkdSBvXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ZvIMWhdHZydG9rIG9dIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdiBwaWF0b2sgb10gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2IHNvYm90dSBvXSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbdsSNZXJhIG9dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW21pbnVsw7ogbmVkZcS+dSBvXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbbWludWzDvV0gZGRkZCBbb10gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1ttaW51bMO6IHN0cmVkdSBvXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbbWludWzDvV0gZGRkZCBbb10gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1ttaW51bMO6IHNvYm90dSBvXSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ3phICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAncHJlZCAlcycsXG4gICAgICAgICAgICBzIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgc3MgOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbW0gOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaGggOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZGQgOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTU0gOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5IDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgeXkgOiB0cmFuc2xhdGVcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbCA6ICclZC4nLFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA0ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBzaztcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///57\n")},58:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    /*jshint -W100*/\n    var si = moment.defineLocale('si', {\n        months : 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split('_'),\n        monthsShort : 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split('_'),\n        weekdays : 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split('_'),\n        weekdaysShort : 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'),\n        weekdaysMin : 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'a h:mm',\n            LTS : 'a h:mm:ss',\n            L : 'YYYY/MM/DD',\n            LL : 'YYYY MMMM D',\n            LLL : 'YYYY MMMM D, a h:mm',\n            LLLL : 'YYYY MMMM D [වැනි] dddd, a h:mm:ss'\n        },\n        calendar : {\n            sameDay : '[අද] LT[ට]',\n            nextDay : '[හෙට] LT[ට]',\n            nextWeek : 'dddd LT[ට]',\n            lastDay : '[ඊයේ] LT[ට]',\n            lastWeek : '[පසුගිය] dddd LT[ට]',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%sකින්',\n            past : '%sකට පෙර',\n            s : 'තත්පර කිහිපය',\n            ss : 'තත්පර %d',\n            m : 'මිනිත්තුව',\n            mm : 'මිනිත්තු %d',\n            h : 'පැය',\n            hh : 'පැය %d',\n            d : 'දිනය',\n            dd : 'දින %d',\n            M : 'මාසය',\n            MM : 'මාස %d',\n            y : 'වසර',\n            yy : 'වසර %d'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2} වැනි/,\n        ordinal : function (number) {\n            return number + ' වැනි';\n        },\n        meridiemParse : /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,\n        isPM : function (input) {\n            return input === 'ප.ව.' || input === 'පස් වරු';\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'ප.ව.' : 'පස් වරු';\n            } else {\n                return isLower ? 'පෙ.ව.' : 'පෙර වරු';\n            }\n        }\n    });\n\n    return si;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zaS5qcz9lZGE1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiNTguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIC8qanNoaW50IC1XMTAwKi9cbiAgICB2YXIgc2kgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdzaScsIHtcbiAgICAgICAgbW9udGhzIDogJ+C2ouC2seC3gOC3j+C2u+C3kl/gtrTgt5ngtrbgtrvgt4Dgt4/gtrvgt5Jf4La44LeP4La74LeK4Lat4LeUX+C2heC2tOC3iuKAjeC2u+C3muC2veC3il/gtrjgt5Dgtrrgt5Jf4Lai4LeW4Lax4LeSX+C2ouC3luC2veC3kl/gtoXgtpzgt53gt4Pgt4rgtq3gt5Rf4LeD4LeQ4La04LeK4Lat4LeQ4La44LeK4La24La74LeKX+C2lOC2muC3iuC2reC3neC2tuC2u+C3il/gtrHgt5zgt4Dgt5Dgtrjgt4rgtrbgtrvgt4pf4Lav4LeZ4LeD4LeQ4La44LeK4La24La74LeKJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICfgtqLgtrFf4La04LeZ4La2X+C2uOC3j+C2u+C3il/gtoXgtrTgt4pf4La44LeQ4La64LeSX+C2ouC3luC2seC3kl/gtqLgt5bgtr3gt5Jf4LaF4Lac4LedX+C3g+C3kOC2tOC3il/gtpTgtprgt4pf4Lax4Lec4LeA4LeQX+C2r+C3meC3g+C3kCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXMgOiAn4LaJ4La74LeS4Lav4LePX+C3g+C2s+C3lOC2r+C3j1/gtoXgtp/gt4Tgtrvgt5Tgt4Dgt4/gtq/gt49f4La24Lav4LeP4Lav4LePX+C2tuC3iuKAjeC2u+C3hOC3g+C3iuC2tOC2reC3kuC2seC3iuC2r+C3j1/gt4Pgt5Lgtprgt5Tgtrvgt4/gtq/gt49f4LeD4LeZ4Lax4LeD4LeU4La74LeP4Lav4LePJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ+C2ieC2u+C3kl/gt4PgtrPgt5Rf4LaF4LafX+C2tuC2r+C3j1/gtrbgt4rigI3gtrvgt4Rf4LeD4LeS4Laa4LeUX+C3g+C3meC2sScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAn4LaJX+C3g1/gtoVf4La2X+C2tuC3iuKAjeC2u1/gt4Pgt5Jf4LeD4LeZJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ2EgaDptbScsXG4gICAgICAgICAgICBMVFMgOiAnYSBoOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnWVlZWS9NTS9ERCcsXG4gICAgICAgICAgICBMTCA6ICdZWVlZIE1NTU0gRCcsXG4gICAgICAgICAgICBMTEwgOiAnWVlZWSBNTU1NIEQsIGEgaDptbScsXG4gICAgICAgICAgICBMTExMIDogJ1lZWVkgTU1NTSBEIFvgt4Dgt5DgtrHgt5JdIGRkZGQsIGEgaDptbTpzcydcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1vgtoXgtq9dIExUW+C2p10nLFxuICAgICAgICAgICAgbmV4dERheSA6ICdb4LeE4LeZ4LanXSBMVFvgtqddJyxcbiAgICAgICAgICAgIG5leHRXZWVrIDogJ2RkZGQgTFRb4LanXScsXG4gICAgICAgICAgICBsYXN0RGF5IDogJ1vgtorgtrrgt5pdIExUW+C2p10nLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiAnW+C2tOC3g+C3lOC2nOC3kuC2ul0gZGRkZCBMVFvgtqddJyxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICclc+C2muC3kuC2seC3iicsXG4gICAgICAgICAgICBwYXN0IDogJyVz4Laa4LanIOC2tOC3meC2uycsXG4gICAgICAgICAgICBzIDogJ+C2reC2reC3iuC2tOC2uyDgtprgt5Lgt4Tgt5LgtrTgtronLFxuICAgICAgICAgICAgc3MgOiAn4Lat4Lat4LeK4La04La7ICVkJyxcbiAgICAgICAgICAgIG0gOiAn4La44LeS4Lax4LeS4Lat4LeK4Lat4LeU4LeAJyxcbiAgICAgICAgICAgIG1tIDogJ+C2uOC3kuC2seC3kuC2reC3iuC2reC3lCAlZCcsXG4gICAgICAgICAgICBoIDogJ+C2tOC3kOC2uicsXG4gICAgICAgICAgICBoaCA6ICfgtrTgt5DgtrogJWQnLFxuICAgICAgICAgICAgZCA6ICfgtq/gt5LgtrHgtronLFxuICAgICAgICAgICAgZGQgOiAn4Lav4LeS4LaxICVkJyxcbiAgICAgICAgICAgIE0gOiAn4La44LeP4LeD4La6JyxcbiAgICAgICAgICAgIE1NIDogJ+C2uOC3j+C3gyAlZCcsXG4gICAgICAgICAgICB5IDogJ+C3gOC3g+C2uycsXG4gICAgICAgICAgICB5eSA6ICfgt4Dgt4PgtrsgJWQnXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSDgt4Dgt5DgtrHgt5IvLFxuICAgICAgICBvcmRpbmFsIDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICcg4LeA4LeQ4Lax4LeSJztcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZSA6IC/gtrTgt5ngtrsg4LeA4La74LeUfOC2tOC3g+C3iiDgt4Dgtrvgt5R84La04LeZLuC3gHzgtrQu4LeALi8sXG4gICAgICAgIGlzUE0gOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCA9PT0gJ+C2tC7gt4AuJyB8fCBpbnB1dCA9PT0gJ+C2tOC3g+C3iiDgt4Dgtrvgt5QnO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbSA6IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXJzID4gMTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICfgtrQu4LeALicgOiAn4La04LeD4LeKIOC3gOC2u+C3lCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ+C2tOC3mS7gt4AuJyA6ICfgtrTgt5ngtrsg4LeA4La74LeUJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNpO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///58\n")},59:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var se = moment.defineLocale('se', {\n        months : 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split('_'),\n        monthsShort : 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'),\n        weekdays : 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split('_'),\n        weekdaysShort : 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),\n        weekdaysMin : 's_v_m_g_d_b_L'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'MMMM D. [b.] YYYY',\n            LLL : 'MMMM D. [b.] YYYY [ti.] HH:mm',\n            LLLL : 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm'\n        },\n        calendar : {\n            sameDay: '[otne ti] LT',\n            nextDay: '[ihttin ti] LT',\n            nextWeek: 'dddd [ti] LT',\n            lastDay: '[ikte ti] LT',\n            lastWeek: '[ovddit] dddd [ti] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : '%s geažes',\n            past : 'maŋit %s',\n            s : 'moadde sekunddat',\n            ss: '%d sekunddat',\n            m : 'okta minuhta',\n            mm : '%d minuhtat',\n            h : 'okta diimmu',\n            hh : '%d diimmut',\n            d : 'okta beaivi',\n            dd : '%d beaivvit',\n            M : 'okta mánnu',\n            MM : '%d mánut',\n            y : 'okta jahki',\n            yy : '%d jagit'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return se;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zZS5qcz9mZmZmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiI1OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIHNlID0gbW9tZW50LmRlZmluZUxvY2FsZSgnc2UnLCB7XG4gICAgICAgIG1vbnRocyA6ICdvxJHEkWFqYWdlbcOhbm51X2d1b3Z2YW3DoW5udV9uanVrxI1hbcOhbm51X2N1b8WLb23DoW5udV9taWVzc2Vtw6FubnVfZ2Vhc3NlbcOhbm51X3N1b2lkbmVtw6FubnVfYm9yZ2Vtw6FubnVfxI1ha8SNYW3DoW5udV9nb2xnZ290bcOhbm51X3Nrw6FibWFtw6FubnVfanVvdmxhbcOhbm51Jy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICdvxJHEkWpfZ3Vvdl9uanVrX2N1b19taWVzX2dlYXNfc3VvaV9ib3JnX8SNYWvEjV9nb2xnX3Nrw6FiX2p1b3YnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzIDogJ3NvdG5hYmVhaXZpX3Z1b3Nzw6FyZ2FfbWHFi8WLZWLDoXJnYV9nYXNrYXZhaGtrdV9kdW9yYXN0YXRfYmVhcmphZGF0X2zDoXZ2YXJkYXQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAnc290bl92dW9zX21hxYtfZ2Fza19kdW9yX2JlYXJfbMOhdicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAnc192X21fZ19kX2JfTCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdISDptbScsXG4gICAgICAgICAgICBMVFMgOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ01NTU0gRC4gW2IuXSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdNTU1NIEQuIFtiLl0gWVlZWSBbdGkuXSBISDptbScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQsIE1NTU0gRC4gW2IuXSBZWVlZIFt0aS5dIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbb3RuZSB0aV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tpaHR0aW4gdGldIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbdGldIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbaWt0ZSB0aV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbb3ZkZGl0XSBkZGRkIFt0aV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnJXMgZ2Vhxb5lcycsXG4gICAgICAgICAgICBwYXN0IDogJ21hxYtpdCAlcycsXG4gICAgICAgICAgICBzIDogJ21vYWRkZSBzZWt1bmRkYXQnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWt1bmRkYXQnLFxuICAgICAgICAgICAgbSA6ICdva3RhIG1pbnVodGEnLFxuICAgICAgICAgICAgbW0gOiAnJWQgbWludWh0YXQnLFxuICAgICAgICAgICAgaCA6ICdva3RhIGRpaW1tdScsXG4gICAgICAgICAgICBoaCA6ICclZCBkaWltbXV0JyxcbiAgICAgICAgICAgIGQgOiAnb2t0YSBiZWFpdmknLFxuICAgICAgICAgICAgZGQgOiAnJWQgYmVhaXZ2aXQnLFxuICAgICAgICAgICAgTSA6ICdva3RhIG3DoW5udScsXG4gICAgICAgICAgICBNTSA6ICclZCBtw6FudXQnLFxuICAgICAgICAgICAgeSA6ICdva3RhIGphaGtpJyxcbiAgICAgICAgICAgIHl5IDogJyVkIGphZ2l0J1xuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsIDogJyVkLicsXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNlO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///59\n")},6:function(module,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "n", function() { return _emptyParameters; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return InvocationHandler; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return Container; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "p", function() { return autoinject; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "s", function() { return inject; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "u", function() { return invoker; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "t", function() { return invokeAsFactory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return FactoryInvoker; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "z", function() { return registration; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "C", function() { return transient; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "B", function() { return singleton; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "m", function() { return TransientRegistration; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "j", function() { return SingletonRegistration; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "A", function() { return resolver; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "k", function() { return Strategy; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "l", function() { return StrategyResolver; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return Lazy; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return All; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return Optional; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return Parent; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return Factory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return NewInstance; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "r", function() { return getDecoratorDependencies; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "v", function() { return lazy; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "o", function() { return all; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "x", function() { return optional; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "y", function() { return parent; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "q", function() { return factory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "w", function() { return newInstance; });\n/* harmony import */ var aurelia_metadata__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4);\n/* harmony import */ var aurelia_pal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(0);\n\n\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the "License"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n\r\nfunction __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nfunction __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);\r\n}\n\nfunction isInjectable(potentialTarget) {\r\n    return !!potentialTarget;\r\n}\r\nfunction autoinject(potentialTarget) {\r\n    var deco = function (target) {\r\n        if (!target.hasOwnProperty(\'inject\')) {\r\n            target.inject = (aurelia_metadata__WEBPACK_IMPORTED_MODULE_0__[/* metadata */ "d"].getOwn(aurelia_metadata__WEBPACK_IMPORTED_MODULE_0__[/* metadata */ "d"].paramTypes, target) ||\r\n                _emptyParameters).slice();\r\n            if (target.inject && target.inject.length > 0) {\r\n                if (target.inject[target.inject.length - 1] === Object) {\r\n                    target.inject.splice(-1, 1);\r\n                }\r\n            }\r\n        }\r\n    };\r\n    if (isInjectable(potentialTarget)) {\r\n        return deco(potentialTarget);\r\n    }\r\n    return deco;\r\n}\r\nfunction inject() {\r\n    var rest = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        rest[_i] = arguments[_i];\r\n    }\r\n    return function (target, _key, descriptor) {\r\n        if (typeof descriptor === \'number\') {\r\n            autoinject(target);\r\n            if (rest.length === 1) {\r\n                target.inject[descriptor] = rest[0];\r\n            }\r\n            return;\r\n        }\r\n        if (descriptor) {\r\n            var fn = descriptor.value;\r\n            fn.inject = rest;\r\n        }\r\n        else {\r\n            target.inject = rest;\r\n        }\r\n    };\r\n}\n\nvar resolver = aurelia_metadata__WEBPACK_IMPORTED_MODULE_0__[/* protocol */ "f"].create(\'aurelia:resolver\', function (target) {\r\n    if (!(typeof target.get === \'function\')) {\r\n        return \'Resolvers must implement: get(container: Container, key: any): any\';\r\n    }\r\n    return true;\r\n});\r\nvar Strategy;\r\n(function (Strategy) {\r\n    Strategy[Strategy["instance"] = 0] = "instance";\r\n    Strategy[Strategy["singleton"] = 1] = "singleton";\r\n    Strategy[Strategy["transient"] = 2] = "transient";\r\n    Strategy[Strategy["function"] = 3] = "function";\r\n    Strategy[Strategy["array"] = 4] = "array";\r\n    Strategy[Strategy["alias"] = 5] = "alias";\r\n})(Strategy || (Strategy = {}));\r\nfunction isStrategy(actual, expected, state) {\r\n    return actual === expected;\r\n}\r\nvar StrategyResolver = (function () {\r\n    function StrategyResolver(strategy, state) {\r\n        this.strategy = strategy;\r\n        this.state = state;\r\n    }\r\n    StrategyResolver.prototype.get = function (container, key) {\r\n        if (isStrategy(this.strategy, Strategy.instance, this.state)) {\r\n            return this.state;\r\n        }\r\n        if (isStrategy(this.strategy, Strategy.singleton, this.state)) {\r\n            var singleton = container.invoke(this.state);\r\n            this.state = singleton;\r\n            this.strategy = 0;\r\n            return singleton;\r\n        }\r\n        if (isStrategy(this.strategy, Strategy.transient, this.state)) {\r\n            return container.invoke(this.state);\r\n        }\r\n        if (isStrategy(this.strategy, Strategy.function, this.state)) {\r\n            return this.state(container, key, this);\r\n        }\r\n        if (isStrategy(this.strategy, Strategy.array, this.state)) {\r\n            return this.state[0].get(container, key);\r\n        }\r\n        if (isStrategy(this.strategy, Strategy.alias, this.state)) {\r\n            return container.get(this.state);\r\n        }\r\n        throw new Error(\'Invalid strategy: \' + this.strategy);\r\n    };\r\n    StrategyResolver = __decorate([\r\n        resolver(),\r\n        __metadata("design:paramtypes", [Number, Object])\r\n    ], StrategyResolver);\r\n    return StrategyResolver;\r\n}());\r\nvar Lazy = (function () {\r\n    function Lazy(key) {\r\n        this._key = key;\r\n    }\r\n    Lazy_1 = Lazy;\r\n    Lazy.prototype.get = function (container) {\r\n        var _this = this;\r\n        return function () { return container.get(_this._key); };\r\n    };\r\n    Lazy.of = function (key) {\r\n        return new Lazy_1(key);\r\n    };\r\n    var Lazy_1;\r\n    Lazy = Lazy_1 = __decorate([\r\n        resolver(),\r\n        __metadata("design:paramtypes", [Object])\r\n    ], Lazy);\r\n    return Lazy;\r\n}());\r\nvar All = (function () {\r\n    function All(key) {\r\n        this._key = key;\r\n    }\r\n    All_1 = All;\r\n    All.prototype.get = function (container) {\r\n        return container.getAll(this._key);\r\n    };\r\n    All.of = function (key) {\r\n        return new All_1(key);\r\n    };\r\n    var All_1;\r\n    All = All_1 = __decorate([\r\n        resolver(),\r\n        __metadata("design:paramtypes", [Object])\r\n    ], All);\r\n    return All;\r\n}());\r\nvar Optional = (function () {\r\n    function Optional(key, checkParent) {\r\n        if (checkParent === void 0) { checkParent = true; }\r\n        this._key = key;\r\n        this._checkParent = checkParent;\r\n    }\r\n    Optional_1 = Optional;\r\n    Optional.prototype.get = function (container) {\r\n        if (container.hasResolver(this._key, this._checkParent)) {\r\n            return container.get(this._key);\r\n        }\r\n        return null;\r\n    };\r\n    Optional.of = function (key, checkParent) {\r\n        if (checkParent === void 0) { checkParent = true; }\r\n        return new Optional_1(key, checkParent);\r\n    };\r\n    var Optional_1;\r\n    Optional = Optional_1 = __decorate([\r\n        resolver(),\r\n        __metadata("design:paramtypes", [Object, Boolean])\r\n    ], Optional);\r\n    return Optional;\r\n}());\r\nvar Parent = (function () {\r\n    function Parent(key) {\r\n        this._key = key;\r\n    }\r\n    Parent_1 = Parent;\r\n    Parent.prototype.get = function (container) {\r\n        return container.parent ? container.parent.get(this._key) : null;\r\n    };\r\n    Parent.of = function (key) {\r\n        return new Parent_1(key);\r\n    };\r\n    var Parent_1;\r\n    Parent = Parent_1 = __decorate([\r\n        resolver(),\r\n        __metadata("design:paramtypes", [Object])\r\n    ], Parent);\r\n    return Parent;\r\n}());\r\nvar Factory = (function () {\r\n    function Factory(key) {\r\n        this._key = key;\r\n    }\r\n    Factory_1 = Factory;\r\n    Factory.prototype.get = function (container) {\r\n        var fn = this._key;\r\n        var resolver = container.getResolver(fn);\r\n        if (resolver && resolver.strategy === Strategy.function) {\r\n            fn = resolver.state;\r\n        }\r\n        return function () {\r\n            var rest = [];\r\n            for (var _i = 0; _i < arguments.length; _i++) {\r\n                rest[_i] = arguments[_i];\r\n            }\r\n            return container.invoke(fn, rest);\r\n        };\r\n    };\r\n    Factory.of = function (key) {\r\n        return new Factory_1(key);\r\n    };\r\n    var Factory_1;\r\n    Factory = Factory_1 = __decorate([\r\n        resolver(),\r\n        __metadata("design:paramtypes", [Object])\r\n    ], Factory);\r\n    return Factory;\r\n}());\r\nvar NewInstance = (function () {\r\n    function NewInstance(key) {\r\n        var dynamicDependencies = [];\r\n        for (var _i = 1; _i < arguments.length; _i++) {\r\n            dynamicDependencies[_i - 1] = arguments[_i];\r\n        }\r\n        this.key = key;\r\n        this.asKey = key;\r\n        this.dynamicDependencies = dynamicDependencies;\r\n    }\r\n    NewInstance_1 = NewInstance;\r\n    NewInstance.prototype.get = function (container) {\r\n        var dynamicDependencies = this.dynamicDependencies.length > 0\r\n            ? this.dynamicDependencies.map(function (dependency) {\r\n                return dependency[\'protocol:aurelia:resolver\']\r\n                    ? dependency.get(container)\r\n                    : container.get(dependency);\r\n            })\r\n            : undefined;\r\n        var fn = this.key;\r\n        var resolver = container.getResolver(fn);\r\n        if (resolver && resolver.strategy === 3) {\r\n            fn = resolver.state;\r\n        }\r\n        var instance = container.invoke(fn, dynamicDependencies);\r\n        container.registerInstance(this.asKey, instance);\r\n        return instance;\r\n    };\r\n    NewInstance.prototype.as = function (key) {\r\n        this.asKey = key;\r\n        return this;\r\n    };\r\n    NewInstance.of = function (key) {\r\n        var dynamicDependencies = [];\r\n        for (var _i = 1; _i < arguments.length; _i++) {\r\n            dynamicDependencies[_i - 1] = arguments[_i];\r\n        }\r\n        return new (NewInstance_1.bind.apply(NewInstance_1, [void 0, key].concat(dynamicDependencies)))();\r\n    };\r\n    var NewInstance_1;\r\n    NewInstance = NewInstance_1 = __decorate([\r\n        resolver(),\r\n        __metadata("design:paramtypes", [Object, Object])\r\n    ], NewInstance);\r\n    return NewInstance;\r\n}());\r\nfunction getDecoratorDependencies(target) {\r\n    autoinject(target);\r\n    return target.inject;\r\n}\r\nfunction lazy(keyValue) {\r\n    return function (target, _key, index) {\r\n        var inject$$1 = getDecoratorDependencies(target);\r\n        inject$$1[index] = Lazy.of(keyValue);\r\n    };\r\n}\r\nfunction all(keyValue) {\r\n    return function (target, _key, index) {\r\n        var inject$$1 = getDecoratorDependencies(target);\r\n        inject$$1[index] = All.of(keyValue);\r\n    };\r\n}\r\nfunction optional(checkParentOrTarget) {\r\n    if (checkParentOrTarget === void 0) { checkParentOrTarget = true; }\r\n    var deco = function (checkParent) {\r\n        return function (target, _key, index) {\r\n            var inject$$1 = getDecoratorDependencies(target);\r\n            inject$$1[index] = Optional.of(inject$$1[index], checkParent);\r\n        };\r\n    };\r\n    if (typeof checkParentOrTarget === \'boolean\') {\r\n        return deco(checkParentOrTarget);\r\n    }\r\n    return deco(true);\r\n}\r\nfunction parent(target, _key, index) {\r\n    var inject$$1 = getDecoratorDependencies(target);\r\n    inject$$1[index] = Parent.of(inject$$1[index]);\r\n}\r\nfunction factory(keyValue) {\r\n    return function (target, _key, index) {\r\n        var inject$$1 = getDecoratorDependencies(target);\r\n        inject$$1[index] = Factory.of(keyValue);\r\n    };\r\n}\r\nfunction newInstance(asKeyOrTarget) {\r\n    var dynamicDependencies = [];\r\n    for (var _i = 1; _i < arguments.length; _i++) {\r\n        dynamicDependencies[_i - 1] = arguments[_i];\r\n    }\r\n    var deco = function (asKey) {\r\n        return function (target, _key, index) {\r\n            var inject$$1 = getDecoratorDependencies(target);\r\n            inject$$1[index] = NewInstance.of.apply(NewInstance, [inject$$1[index]].concat(dynamicDependencies));\r\n            if (!!asKey) {\r\n                inject$$1[index].as(asKey);\r\n            }\r\n        };\r\n    };\r\n    if (arguments.length >= 1) {\r\n        return deco(asKeyOrTarget);\r\n    }\r\n    return deco();\r\n}\n\nfunction validateKey(key) {\r\n    if (key === null || key === undefined) {\r\n        throw new Error(\'key/value cannot be null or undefined. Are you trying to inject/register something that doesn\\\'t exist with DI?\');\r\n    }\r\n}\r\nvar _emptyParameters = Object.freeze([]);\r\naurelia_metadata__WEBPACK_IMPORTED_MODULE_0__[/* metadata */ "d"].registration = \'aurelia:registration\';\r\naurelia_metadata__WEBPACK_IMPORTED_MODULE_0__[/* metadata */ "d"].invoker = \'aurelia:invoker\';\r\nvar resolverDecorates = resolver.decorates;\r\nvar InvocationHandler = (function () {\r\n    function InvocationHandler(fn, invoker, dependencies) {\r\n        this.fn = fn;\r\n        this.invoker = invoker;\r\n        this.dependencies = dependencies;\r\n    }\r\n    InvocationHandler.prototype.invoke = function (container, dynamicDependencies) {\r\n        return dynamicDependencies !== undefined\r\n            ? this.invoker.invokeWithDynamicDependencies(container, this.fn, this.dependencies, dynamicDependencies)\r\n            : this.invoker.invoke(container, this.fn, this.dependencies);\r\n    };\r\n    return InvocationHandler;\r\n}());\r\nfunction invokeWithDynamicDependencies(container, fn, staticDependencies, dynamicDependencies) {\r\n    var i = staticDependencies.length;\r\n    var args = new Array(i);\r\n    var lookup;\r\n    while (i--) {\r\n        lookup = staticDependencies[i];\r\n        if (lookup === null || lookup === undefined) {\r\n            throw new Error(\'Constructor Parameter with index \' +\r\n                i +\r\n                \' cannot be null or undefined. Are you trying to inject/register something that doesn\\\'t exist with DI?\');\r\n        }\r\n        else {\r\n            args[i] = container.get(lookup);\r\n        }\r\n    }\r\n    if (dynamicDependencies !== undefined) {\r\n        args = args.concat(dynamicDependencies);\r\n    }\r\n    return Reflect.construct(fn, args);\r\n}\r\nvar classInvoker = {\r\n    invoke: function (container, Type, deps) {\r\n        var instances = deps.map(function (dep) { return container.get(dep); });\r\n        return Reflect.construct(Type, instances);\r\n    },\r\n    invokeWithDynamicDependencies: invokeWithDynamicDependencies\r\n};\r\nfunction getDependencies(f) {\r\n    if (!f.hasOwnProperty(\'inject\')) {\r\n        return [];\r\n    }\r\n    if (typeof f.inject === \'function\') {\r\n        return f.inject();\r\n    }\r\n    return f.inject;\r\n}\r\nvar Container = (function () {\r\n    function Container(configuration) {\r\n        if (configuration === undefined) {\r\n            configuration = {};\r\n        }\r\n        this._configuration = configuration;\r\n        this._onHandlerCreated = configuration.onHandlerCreated;\r\n        this._handlers =\r\n            configuration.handlers || (configuration.handlers = new Map());\r\n        this._resolvers = new Map();\r\n        this.root = this;\r\n        this.parent = null;\r\n    }\r\n    Container.prototype.makeGlobal = function () {\r\n        Container.instance = this;\r\n        return this;\r\n    };\r\n    Container.prototype.setHandlerCreatedCallback = function (onHandlerCreated) {\r\n        this._onHandlerCreated = onHandlerCreated;\r\n        this._configuration.onHandlerCreated = onHandlerCreated;\r\n    };\r\n    Container.prototype.registerInstance = function (key, instance) {\r\n        return this.registerResolver(key, new StrategyResolver(0, instance === undefined ? key : instance));\r\n    };\r\n    Container.prototype.registerSingleton = function (key, fn) {\r\n        return this.registerResolver(key, new StrategyResolver(1, fn === undefined ? key : fn));\r\n    };\r\n    Container.prototype.registerTransient = function (key, fn) {\r\n        return this.registerResolver(key, new StrategyResolver(2, fn === undefined ? key : fn));\r\n    };\r\n    Container.prototype.registerHandler = function (key, handler) {\r\n        return this.registerResolver(key, new StrategyResolver(3, handler));\r\n    };\r\n    Container.prototype.registerAlias = function (originalKey, aliasKey) {\r\n        return this.registerResolver(aliasKey, new StrategyResolver(5, originalKey));\r\n    };\r\n    Container.prototype.registerResolver = function (key, resolver$$1) {\r\n        validateKey(key);\r\n        var allResolvers = this._resolvers;\r\n        var result = allResolvers.get(key);\r\n        if (result === undefined) {\r\n            allResolvers.set(key, resolver$$1);\r\n        }\r\n        else if (result.strategy === 4) {\r\n            result.state.push(resolver$$1);\r\n        }\r\n        else {\r\n            allResolvers.set(key, new StrategyResolver(4, [result, resolver$$1]));\r\n        }\r\n        return resolver$$1;\r\n    };\r\n    Container.prototype.autoRegister = function (key, fn) {\r\n        fn = fn === undefined ? key : fn;\r\n        if (typeof fn === \'function\') {\r\n            var registration = aurelia_metadata__WEBPACK_IMPORTED_MODULE_0__[/* metadata */ "d"].get(aurelia_metadata__WEBPACK_IMPORTED_MODULE_0__[/* metadata */ "d"].registration, fn);\r\n            if (registration === undefined) {\r\n                return this.registerResolver(key, new StrategyResolver(1, fn));\r\n            }\r\n            return registration.registerResolver(this, key, fn);\r\n        }\r\n        return this.registerResolver(key, new StrategyResolver(0, fn));\r\n    };\r\n    Container.prototype.autoRegisterAll = function (fns) {\r\n        var i = fns.length;\r\n        while (i--) {\r\n            this.autoRegister(fns[i]);\r\n        }\r\n    };\r\n    Container.prototype.unregister = function (key) {\r\n        this._resolvers.delete(key);\r\n    };\r\n    Container.prototype.hasResolver = function (key, checkParent) {\r\n        if (checkParent === void 0) { checkParent = false; }\r\n        validateKey(key);\r\n        return (this._resolvers.has(key) ||\r\n            (checkParent &&\r\n                this.parent !== null &&\r\n                this.parent.hasResolver(key, checkParent)));\r\n    };\r\n    Container.prototype.getResolver = function (key) {\r\n        return this._resolvers.get(key);\r\n    };\r\n    Container.prototype.get = function (key) {\r\n        validateKey(key);\r\n        if (key === Container) {\r\n            return this;\r\n        }\r\n        if (resolverDecorates(key)) {\r\n            return key.get(this, key);\r\n        }\r\n        var resolver$$1 = this._resolvers.get(key);\r\n        if (resolver$$1 === undefined) {\r\n            if (this.parent === null) {\r\n                return this.autoRegister(key).get(this, key);\r\n            }\r\n            var registration = aurelia_metadata__WEBPACK_IMPORTED_MODULE_0__[/* metadata */ "d"].get(aurelia_metadata__WEBPACK_IMPORTED_MODULE_0__[/* metadata */ "d"].registration, key);\r\n            if (registration === undefined) {\r\n                return this.parent._get(key);\r\n            }\r\n            return registration.registerResolver(this, key, key).get(this, key);\r\n        }\r\n        return resolver$$1.get(this, key);\r\n    };\r\n    Container.prototype._get = function (key) {\r\n        var resolver$$1 = this._resolvers.get(key);\r\n        if (resolver$$1 === undefined) {\r\n            if (this.parent === null) {\r\n                return this.autoRegister(key).get(this, key);\r\n            }\r\n            return this.parent._get(key);\r\n        }\r\n        return resolver$$1.get(this, key);\r\n    };\r\n    Container.prototype.getAll = function (key) {\r\n        validateKey(key);\r\n        var resolver$$1 = this._resolvers.get(key);\r\n        if (resolver$$1 === undefined) {\r\n            if (this.parent === null) {\r\n                return _emptyParameters;\r\n            }\r\n            return this.parent.getAll(key);\r\n        }\r\n        if (resolver$$1.strategy === 4) {\r\n            var state = resolver$$1.state;\r\n            var i = state.length;\r\n            var results = new Array(i);\r\n            while (i--) {\r\n                results[i] = state[i].get(this, key);\r\n            }\r\n            return results;\r\n        }\r\n        return [resolver$$1.get(this, key)];\r\n    };\r\n    Container.prototype.createChild = function () {\r\n        var child = new Container(this._configuration);\r\n        child.root = this.root;\r\n        child.parent = this;\r\n        return child;\r\n    };\r\n    Container.prototype.invoke = function (fn, dynamicDependencies) {\r\n        try {\r\n            var handler = this._handlers.get(fn);\r\n            if (handler === undefined) {\r\n                handler = this._createInvocationHandler(fn);\r\n                this._handlers.set(fn, handler);\r\n            }\r\n            return handler.invoke(this, dynamicDependencies);\r\n        }\r\n        catch (e) {\r\n            throw new aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* AggregateError */ "a"]("Error invoking " + fn.name + ". Check the inner error for details.", e, true);\r\n        }\r\n    };\r\n    Container.prototype._createInvocationHandler = function (fn) {\r\n        var dependencies;\r\n        if (fn.inject === undefined) {\r\n            dependencies =\r\n                aurelia_metadata__WEBPACK_IMPORTED_MODULE_0__[/* metadata */ "d"].getOwn(aurelia_metadata__WEBPACK_IMPORTED_MODULE_0__[/* metadata */ "d"].paramTypes, fn) || _emptyParameters;\r\n        }\r\n        else {\r\n            dependencies = [];\r\n            var ctor = fn;\r\n            while (typeof ctor === \'function\') {\r\n                dependencies.push.apply(dependencies, getDependencies(ctor));\r\n                ctor = Object.getPrototypeOf(ctor);\r\n            }\r\n        }\r\n        var invoker = aurelia_metadata__WEBPACK_IMPORTED_MODULE_0__[/* metadata */ "d"].getOwn(aurelia_metadata__WEBPACK_IMPORTED_MODULE_0__[/* metadata */ "d"].invoker, fn) || classInvoker;\r\n        var handler = new InvocationHandler(fn, invoker, dependencies);\r\n        return this._onHandlerCreated !== undefined\r\n            ? this._onHandlerCreated(handler)\r\n            : handler;\r\n    };\r\n    return Container;\r\n}());\n\nfunction invoker(value) {\r\n    return function (target) {\r\n        aurelia_metadata__WEBPACK_IMPORTED_MODULE_0__[/* metadata */ "d"].define(aurelia_metadata__WEBPACK_IMPORTED_MODULE_0__[/* metadata */ "d"].invoker, value, target);\r\n    };\r\n}\r\nfunction invokeAsFactory(potentialTarget) {\r\n    var deco = function (target) {\r\n        aurelia_metadata__WEBPACK_IMPORTED_MODULE_0__[/* metadata */ "d"].define(aurelia_metadata__WEBPACK_IMPORTED_MODULE_0__[/* metadata */ "d"].invoker, FactoryInvoker.instance, target);\r\n    };\r\n    return potentialTarget ? deco(potentialTarget) : deco;\r\n}\r\nvar FactoryInvoker = (function () {\r\n    function FactoryInvoker() {\r\n    }\r\n    FactoryInvoker.prototype.invoke = function (container, fn, dependencies) {\r\n        var i = dependencies.length;\r\n        var args = new Array(i);\r\n        while (i--) {\r\n            args[i] = container.get(dependencies[i]);\r\n        }\r\n        return fn.apply(undefined, args);\r\n    };\r\n    FactoryInvoker.prototype.invokeWithDynamicDependencies = function (container, fn, staticDependencies, dynamicDependencies) {\r\n        var i = staticDependencies.length;\r\n        var args = new Array(i);\r\n        while (i--) {\r\n            args[i] = container.get(staticDependencies[i]);\r\n        }\r\n        if (dynamicDependencies !== undefined) {\r\n            args = args.concat(dynamicDependencies);\r\n        }\r\n        return fn.apply(undefined, args);\r\n    };\r\n    return FactoryInvoker;\r\n}());\r\nFactoryInvoker.instance = new FactoryInvoker();\n\nfunction registration(value) {\r\n    return function (target) {\r\n        aurelia_metadata__WEBPACK_IMPORTED_MODULE_0__[/* metadata */ "d"].define(aurelia_metadata__WEBPACK_IMPORTED_MODULE_0__[/* metadata */ "d"].registration, value, target);\r\n    };\r\n}\r\nfunction transient(key) {\r\n    return registration(new TransientRegistration(key));\r\n}\r\nfunction singleton(keyOrRegisterInChild, registerInChild) {\r\n    if (registerInChild === void 0) { registerInChild = false; }\r\n    return registration(new SingletonRegistration(keyOrRegisterInChild, registerInChild));\r\n}\r\nvar TransientRegistration = (function () {\r\n    function TransientRegistration(key) {\r\n        this._key = key;\r\n    }\r\n    TransientRegistration.prototype.registerResolver = function (container, key, fn) {\r\n        var existingResolver = container.getResolver(this._key || key);\r\n        return existingResolver === undefined\r\n            ? container.registerTransient((this._key || key), fn)\r\n            : existingResolver;\r\n    };\r\n    return TransientRegistration;\r\n}());\r\nvar SingletonRegistration = (function () {\r\n    function SingletonRegistration(keyOrRegisterInChild, registerInChild) {\r\n        if (registerInChild === void 0) { registerInChild = false; }\r\n        if (typeof keyOrRegisterInChild === \'boolean\') {\r\n            this._registerInChild = keyOrRegisterInChild;\r\n        }\r\n        else {\r\n            this._key = keyOrRegisterInChild;\r\n            this._registerInChild = registerInChild;\r\n        }\r\n    }\r\n    SingletonRegistration.prototype.registerResolver = function (container, key, fn) {\r\n        var targetContainer = this._registerInChild ? container : container.root;\r\n        var existingResolver = targetContainer.getResolver(this._key || key);\r\n        return existingResolver === undefined\r\n            ? targetContainer.registerSingleton(this._key || key, fn)\r\n            : existingResolver;\r\n    };\r\n    return SingletonRegistration;\r\n}());\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXVyZWxpYS1kZXBlbmRlbmN5LWluamVjdGlvbi9kaXN0L25hdGl2ZS1tb2R1bGVzL2F1cmVsaWEtZGVwZW5kZW5jeS1pbmplY3Rpb24uanM/ZGQ0ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFzRDtBQUNUOztBQUU3QztBQUNBO0FBQ0EsK0RBQStEO0FBQy9EO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxRQUFRO0FBQ3BEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixpRUFBUSxRQUFRLGlFQUFRO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQix1QkFBdUI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZUFBZSxpRUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyw0QkFBNEI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsa0NBQWtDO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLHFDQUFxQyxvQkFBb0I7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyxvQkFBb0I7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLHVCQUF1QjtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qix1QkFBdUI7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsdUJBQXVCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsNEJBQTRCO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsdUJBQXVCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlFQUFRO0FBQ1IsaUVBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCwyQkFBMkIsRUFBRTtBQUM5RTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLGlFQUFRLEtBQUssaUVBQVE7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyxxQkFBcUI7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsaUVBQVEsS0FBSyxpRUFBUTtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLGtFQUFjO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixpRUFBUSxRQUFRLGlFQUFRO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixpRUFBUSxRQUFRLGlFQUFRO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBLFFBQVEsaUVBQVEsUUFBUSxpRUFBUTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsaUVBQVEsUUFBUSxpRUFBUTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBO0FBQ0E7QUFDQSxRQUFRLGlFQUFRLFFBQVEsaUVBQVE7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLHlCQUF5QjtBQUM5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EseUNBQXlDLHlCQUF5QjtBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRStXIiwiZmlsZSI6IjYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtZXRhZGF0YSwgcHJvdG9jb2wgfSBmcm9tICdhdXJlbGlhLW1ldGFkYXRhJztcbmltcG9ydCB7IEFnZ3JlZ2F0ZUVycm9yIH0gZnJvbSAnYXVyZWxpYS1wYWwnO1xuXG4vKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZVxyXG50aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZVxyXG5MaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG5cclxuVEhJUyBDT0RFIElTIFBST1ZJREVEIE9OIEFOICpBUyBJUyogQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxyXG5LSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIEFOWSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsXHJcbk1FUkNIQU5UQUJMSVRZIE9SIE5PTi1JTkZSSU5HRU1FTlQuXHJcblxyXG5TZWUgdGhlIEFwYWNoZSBWZXJzaW9uIDIuMCBMaWNlbnNlIGZvciBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcclxuYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG5cclxuZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcclxufVxuXG5mdW5jdGlvbiBpc0luamVjdGFibGUocG90ZW50aWFsVGFyZ2V0KSB7XHJcbiAgICByZXR1cm4gISFwb3RlbnRpYWxUYXJnZXQ7XHJcbn1cclxuZnVuY3Rpb24gYXV0b2luamVjdChwb3RlbnRpYWxUYXJnZXQpIHtcclxuICAgIHZhciBkZWNvID0gZnVuY3Rpb24gKHRhcmdldCkge1xyXG4gICAgICAgIGlmICghdGFyZ2V0Lmhhc093blByb3BlcnR5KCdpbmplY3QnKSkge1xyXG4gICAgICAgICAgICB0YXJnZXQuaW5qZWN0ID0gKG1ldGFkYXRhLmdldE93bihtZXRhZGF0YS5wYXJhbVR5cGVzLCB0YXJnZXQpIHx8XHJcbiAgICAgICAgICAgICAgICBfZW1wdHlQYXJhbWV0ZXJzKS5zbGljZSgpO1xyXG4gICAgICAgICAgICBpZiAodGFyZ2V0LmluamVjdCAmJiB0YXJnZXQuaW5qZWN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGlmICh0YXJnZXQuaW5qZWN0W3RhcmdldC5pbmplY3QubGVuZ3RoIC0gMV0gPT09IE9iamVjdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5pbmplY3Quc3BsaWNlKC0xLCAxKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBpZiAoaXNJbmplY3RhYmxlKHBvdGVudGlhbFRhcmdldCkpIHtcclxuICAgICAgICByZXR1cm4gZGVjbyhwb3RlbnRpYWxUYXJnZXQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRlY287XHJcbn1cclxuZnVuY3Rpb24gaW5qZWN0KCkge1xyXG4gICAgdmFyIHJlc3QgPSBbXTtcclxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgcmVzdFtfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIF9rZXksIGRlc2NyaXB0b3IpIHtcclxuICAgICAgICBpZiAodHlwZW9mIGRlc2NyaXB0b3IgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgIGF1dG9pbmplY3QodGFyZ2V0KTtcclxuICAgICAgICAgICAgaWYgKHJlc3QubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuaW5qZWN0W2Rlc2NyaXB0b3JdID0gcmVzdFswXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkZXNjcmlwdG9yKSB7XHJcbiAgICAgICAgICAgIHZhciBmbiA9IGRlc2NyaXB0b3IudmFsdWU7XHJcbiAgICAgICAgICAgIGZuLmluamVjdCA9IHJlc3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0YXJnZXQuaW5qZWN0ID0gcmVzdDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XG5cbnZhciByZXNvbHZlciA9IHByb3RvY29sLmNyZWF0ZSgnYXVyZWxpYTpyZXNvbHZlcicsIGZ1bmN0aW9uICh0YXJnZXQpIHtcclxuICAgIGlmICghKHR5cGVvZiB0YXJnZXQuZ2V0ID09PSAnZnVuY3Rpb24nKSkge1xyXG4gICAgICAgIHJldHVybiAnUmVzb2x2ZXJzIG11c3QgaW1wbGVtZW50OiBnZXQoY29udGFpbmVyOiBDb250YWluZXIsIGtleTogYW55KTogYW55JztcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59KTtcclxudmFyIFN0cmF0ZWd5O1xyXG4oZnVuY3Rpb24gKFN0cmF0ZWd5KSB7XHJcbiAgICBTdHJhdGVneVtTdHJhdGVneVtcImluc3RhbmNlXCJdID0gMF0gPSBcImluc3RhbmNlXCI7XHJcbiAgICBTdHJhdGVneVtTdHJhdGVneVtcInNpbmdsZXRvblwiXSA9IDFdID0gXCJzaW5nbGV0b25cIjtcclxuICAgIFN0cmF0ZWd5W1N0cmF0ZWd5W1widHJhbnNpZW50XCJdID0gMl0gPSBcInRyYW5zaWVudFwiO1xyXG4gICAgU3RyYXRlZ3lbU3RyYXRlZ3lbXCJmdW5jdGlvblwiXSA9IDNdID0gXCJmdW5jdGlvblwiO1xyXG4gICAgU3RyYXRlZ3lbU3RyYXRlZ3lbXCJhcnJheVwiXSA9IDRdID0gXCJhcnJheVwiO1xyXG4gICAgU3RyYXRlZ3lbU3RyYXRlZ3lbXCJhbGlhc1wiXSA9IDVdID0gXCJhbGlhc1wiO1xyXG59KShTdHJhdGVneSB8fCAoU3RyYXRlZ3kgPSB7fSkpO1xyXG5mdW5jdGlvbiBpc1N0cmF0ZWd5KGFjdHVhbCwgZXhwZWN0ZWQsIHN0YXRlKSB7XHJcbiAgICByZXR1cm4gYWN0dWFsID09PSBleHBlY3RlZDtcclxufVxyXG52YXIgU3RyYXRlZ3lSZXNvbHZlciA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBTdHJhdGVneVJlc29sdmVyKHN0cmF0ZWd5LCBzdGF0ZSkge1xyXG4gICAgICAgIHRoaXMuc3RyYXRlZ3kgPSBzdHJhdGVneTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGU7XHJcbiAgICB9XHJcbiAgICBTdHJhdGVneVJlc29sdmVyLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoY29udGFpbmVyLCBrZXkpIHtcclxuICAgICAgICBpZiAoaXNTdHJhdGVneSh0aGlzLnN0cmF0ZWd5LCBTdHJhdGVneS5pbnN0YW5jZSwgdGhpcy5zdGF0ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1N0cmF0ZWd5KHRoaXMuc3RyYXRlZ3ksIFN0cmF0ZWd5LnNpbmdsZXRvbiwgdGhpcy5zdGF0ZSkpIHtcclxuICAgICAgICAgICAgdmFyIHNpbmdsZXRvbiA9IGNvbnRhaW5lci5pbnZva2UodGhpcy5zdGF0ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBzaW5nbGV0b247XHJcbiAgICAgICAgICAgIHRoaXMuc3RyYXRlZ3kgPSAwO1xyXG4gICAgICAgICAgICByZXR1cm4gc2luZ2xldG9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNTdHJhdGVneSh0aGlzLnN0cmF0ZWd5LCBTdHJhdGVneS50cmFuc2llbnQsIHRoaXMuc3RhdGUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb250YWluZXIuaW52b2tlKHRoaXMuc3RhdGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNTdHJhdGVneSh0aGlzLnN0cmF0ZWd5LCBTdHJhdGVneS5mdW5jdGlvbiwgdGhpcy5zdGF0ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUoY29udGFpbmVyLCBrZXksIHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNTdHJhdGVneSh0aGlzLnN0cmF0ZWd5LCBTdHJhdGVneS5hcnJheSwgdGhpcy5zdGF0ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVbMF0uZ2V0KGNvbnRhaW5lciwga2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzU3RyYXRlZ3kodGhpcy5zdHJhdGVneSwgU3RyYXRlZ3kuYWxpYXMsIHRoaXMuc3RhdGUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb250YWluZXIuZ2V0KHRoaXMuc3RhdGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc3RyYXRlZ3k6ICcgKyB0aGlzLnN0cmF0ZWd5KTtcclxuICAgIH07XHJcbiAgICBTdHJhdGVneVJlc29sdmVyID0gX19kZWNvcmF0ZShbXHJcbiAgICAgICAgcmVzb2x2ZXIoKSxcclxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW051bWJlciwgT2JqZWN0XSlcclxuICAgIF0sIFN0cmF0ZWd5UmVzb2x2ZXIpO1xyXG4gICAgcmV0dXJuIFN0cmF0ZWd5UmVzb2x2ZXI7XHJcbn0oKSk7XHJcbnZhciBMYXp5ID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIExhenkoa2V5KSB7XHJcbiAgICAgICAgdGhpcy5fa2V5ID0ga2V5O1xyXG4gICAgfVxyXG4gICAgTGF6eV8xID0gTGF6eTtcclxuICAgIExhenkucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChjb250YWluZXIpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb250YWluZXIuZ2V0KF90aGlzLl9rZXkpOyB9O1xyXG4gICAgfTtcclxuICAgIExhenkub2YgPSBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBMYXp5XzEoa2V5KTtcclxuICAgIH07XHJcbiAgICB2YXIgTGF6eV8xO1xyXG4gICAgTGF6eSA9IExhenlfMSA9IF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIHJlc29sdmVyKCksXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtPYmplY3RdKVxyXG4gICAgXSwgTGF6eSk7XHJcbiAgICByZXR1cm4gTGF6eTtcclxufSgpKTtcclxudmFyIEFsbCA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBBbGwoa2V5KSB7XHJcbiAgICAgICAgdGhpcy5fa2V5ID0ga2V5O1xyXG4gICAgfVxyXG4gICAgQWxsXzEgPSBBbGw7XHJcbiAgICBBbGwucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChjb250YWluZXIpIHtcclxuICAgICAgICByZXR1cm4gY29udGFpbmVyLmdldEFsbCh0aGlzLl9rZXkpO1xyXG4gICAgfTtcclxuICAgIEFsbC5vZiA9IGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICByZXR1cm4gbmV3IEFsbF8xKGtleSk7XHJcbiAgICB9O1xyXG4gICAgdmFyIEFsbF8xO1xyXG4gICAgQWxsID0gQWxsXzEgPSBfX2RlY29yYXRlKFtcclxuICAgICAgICByZXNvbHZlcigpLFxyXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbT2JqZWN0XSlcclxuICAgIF0sIEFsbCk7XHJcbiAgICByZXR1cm4gQWxsO1xyXG59KCkpO1xyXG52YXIgT3B0aW9uYWwgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gT3B0aW9uYWwoa2V5LCBjaGVja1BhcmVudCkge1xyXG4gICAgICAgIGlmIChjaGVja1BhcmVudCA9PT0gdm9pZCAwKSB7IGNoZWNrUGFyZW50ID0gdHJ1ZTsgfVxyXG4gICAgICAgIHRoaXMuX2tleSA9IGtleTtcclxuICAgICAgICB0aGlzLl9jaGVja1BhcmVudCA9IGNoZWNrUGFyZW50O1xyXG4gICAgfVxyXG4gICAgT3B0aW9uYWxfMSA9IE9wdGlvbmFsO1xyXG4gICAgT3B0aW9uYWwucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChjb250YWluZXIpIHtcclxuICAgICAgICBpZiAoY29udGFpbmVyLmhhc1Jlc29sdmVyKHRoaXMuX2tleSwgdGhpcy5fY2hlY2tQYXJlbnQpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb250YWluZXIuZ2V0KHRoaXMuX2tleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfTtcclxuICAgIE9wdGlvbmFsLm9mID0gZnVuY3Rpb24gKGtleSwgY2hlY2tQYXJlbnQpIHtcclxuICAgICAgICBpZiAoY2hlY2tQYXJlbnQgPT09IHZvaWQgMCkgeyBjaGVja1BhcmVudCA9IHRydWU7IH1cclxuICAgICAgICByZXR1cm4gbmV3IE9wdGlvbmFsXzEoa2V5LCBjaGVja1BhcmVudCk7XHJcbiAgICB9O1xyXG4gICAgdmFyIE9wdGlvbmFsXzE7XHJcbiAgICBPcHRpb25hbCA9IE9wdGlvbmFsXzEgPSBfX2RlY29yYXRlKFtcclxuICAgICAgICByZXNvbHZlcigpLFxyXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbT2JqZWN0LCBCb29sZWFuXSlcclxuICAgIF0sIE9wdGlvbmFsKTtcclxuICAgIHJldHVybiBPcHRpb25hbDtcclxufSgpKTtcclxudmFyIFBhcmVudCA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBQYXJlbnQoa2V5KSB7XHJcbiAgICAgICAgdGhpcy5fa2V5ID0ga2V5O1xyXG4gICAgfVxyXG4gICAgUGFyZW50XzEgPSBQYXJlbnQ7XHJcbiAgICBQYXJlbnQucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChjb250YWluZXIpIHtcclxuICAgICAgICByZXR1cm4gY29udGFpbmVyLnBhcmVudCA/IGNvbnRhaW5lci5wYXJlbnQuZ2V0KHRoaXMuX2tleSkgOiBudWxsO1xyXG4gICAgfTtcclxuICAgIFBhcmVudC5vZiA9IGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFBhcmVudF8xKGtleSk7XHJcbiAgICB9O1xyXG4gICAgdmFyIFBhcmVudF8xO1xyXG4gICAgUGFyZW50ID0gUGFyZW50XzEgPSBfX2RlY29yYXRlKFtcclxuICAgICAgICByZXNvbHZlcigpLFxyXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbT2JqZWN0XSlcclxuICAgIF0sIFBhcmVudCk7XHJcbiAgICByZXR1cm4gUGFyZW50O1xyXG59KCkpO1xyXG52YXIgRmFjdG9yeSA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBGYWN0b3J5KGtleSkge1xyXG4gICAgICAgIHRoaXMuX2tleSA9IGtleTtcclxuICAgIH1cclxuICAgIEZhY3RvcnlfMSA9IEZhY3Rvcnk7XHJcbiAgICBGYWN0b3J5LnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoY29udGFpbmVyKSB7XHJcbiAgICAgICAgdmFyIGZuID0gdGhpcy5fa2V5O1xyXG4gICAgICAgIHZhciByZXNvbHZlciA9IGNvbnRhaW5lci5nZXRSZXNvbHZlcihmbik7XHJcbiAgICAgICAgaWYgKHJlc29sdmVyICYmIHJlc29sdmVyLnN0cmF0ZWd5ID09PSBTdHJhdGVneS5mdW5jdGlvbikge1xyXG4gICAgICAgICAgICBmbiA9IHJlc29sdmVyLnN0YXRlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgcmVzdCA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICAgICAgcmVzdFtfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBjb250YWluZXIuaW52b2tlKGZuLCByZXN0KTtcclxuICAgICAgICB9O1xyXG4gICAgfTtcclxuICAgIEZhY3Rvcnkub2YgPSBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBGYWN0b3J5XzEoa2V5KTtcclxuICAgIH07XHJcbiAgICB2YXIgRmFjdG9yeV8xO1xyXG4gICAgRmFjdG9yeSA9IEZhY3RvcnlfMSA9IF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIHJlc29sdmVyKCksXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtPYmplY3RdKVxyXG4gICAgXSwgRmFjdG9yeSk7XHJcbiAgICByZXR1cm4gRmFjdG9yeTtcclxufSgpKTtcclxudmFyIE5ld0luc3RhbmNlID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIE5ld0luc3RhbmNlKGtleSkge1xyXG4gICAgICAgIHZhciBkeW5hbWljRGVwZW5kZW5jaWVzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgZHluYW1pY0RlcGVuZGVuY2llc1tfaSAtIDFdID0gYXJndW1lbnRzW19pXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5rZXkgPSBrZXk7XHJcbiAgICAgICAgdGhpcy5hc0tleSA9IGtleTtcclxuICAgICAgICB0aGlzLmR5bmFtaWNEZXBlbmRlbmNpZXMgPSBkeW5hbWljRGVwZW5kZW5jaWVzO1xyXG4gICAgfVxyXG4gICAgTmV3SW5zdGFuY2VfMSA9IE5ld0luc3RhbmNlO1xyXG4gICAgTmV3SW5zdGFuY2UucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChjb250YWluZXIpIHtcclxuICAgICAgICB2YXIgZHluYW1pY0RlcGVuZGVuY2llcyA9IHRoaXMuZHluYW1pY0RlcGVuZGVuY2llcy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgID8gdGhpcy5keW5hbWljRGVwZW5kZW5jaWVzLm1hcChmdW5jdGlvbiAoZGVwZW5kZW5jeSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlcGVuZGVuY3lbJ3Byb3RvY29sOmF1cmVsaWE6cmVzb2x2ZXInXVxyXG4gICAgICAgICAgICAgICAgICAgID8gZGVwZW5kZW5jeS5nZXQoY29udGFpbmVyKVxyXG4gICAgICAgICAgICAgICAgICAgIDogY29udGFpbmVyLmdldChkZXBlbmRlbmN5KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgdmFyIGZuID0gdGhpcy5rZXk7XHJcbiAgICAgICAgdmFyIHJlc29sdmVyID0gY29udGFpbmVyLmdldFJlc29sdmVyKGZuKTtcclxuICAgICAgICBpZiAocmVzb2x2ZXIgJiYgcmVzb2x2ZXIuc3RyYXRlZ3kgPT09IDMpIHtcclxuICAgICAgICAgICAgZm4gPSByZXNvbHZlci5zdGF0ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGluc3RhbmNlID0gY29udGFpbmVyLmludm9rZShmbiwgZHluYW1pY0RlcGVuZGVuY2llcyk7XHJcbiAgICAgICAgY29udGFpbmVyLnJlZ2lzdGVySW5zdGFuY2UodGhpcy5hc0tleSwgaW5zdGFuY2UpO1xyXG4gICAgICAgIHJldHVybiBpbnN0YW5jZTtcclxuICAgIH07XHJcbiAgICBOZXdJbnN0YW5jZS5wcm90b3R5cGUuYXMgPSBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgdGhpcy5hc0tleSA9IGtleTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH07XHJcbiAgICBOZXdJbnN0YW5jZS5vZiA9IGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICB2YXIgZHluYW1pY0RlcGVuZGVuY2llcyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIGR5bmFtaWNEZXBlbmRlbmNpZXNbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgKE5ld0luc3RhbmNlXzEuYmluZC5hcHBseShOZXdJbnN0YW5jZV8xLCBbdm9pZCAwLCBrZXldLmNvbmNhdChkeW5hbWljRGVwZW5kZW5jaWVzKSkpKCk7XHJcbiAgICB9O1xyXG4gICAgdmFyIE5ld0luc3RhbmNlXzE7XHJcbiAgICBOZXdJbnN0YW5jZSA9IE5ld0luc3RhbmNlXzEgPSBfX2RlY29yYXRlKFtcclxuICAgICAgICByZXNvbHZlcigpLFxyXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbT2JqZWN0LCBPYmplY3RdKVxyXG4gICAgXSwgTmV3SW5zdGFuY2UpO1xyXG4gICAgcmV0dXJuIE5ld0luc3RhbmNlO1xyXG59KCkpO1xyXG5mdW5jdGlvbiBnZXREZWNvcmF0b3JEZXBlbmRlbmNpZXModGFyZ2V0KSB7XHJcbiAgICBhdXRvaW5qZWN0KHRhcmdldCk7XHJcbiAgICByZXR1cm4gdGFyZ2V0LmluamVjdDtcclxufVxyXG5mdW5jdGlvbiBsYXp5KGtleVZhbHVlKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgX2tleSwgaW5kZXgpIHtcclxuICAgICAgICB2YXIgaW5qZWN0JCQxID0gZ2V0RGVjb3JhdG9yRGVwZW5kZW5jaWVzKHRhcmdldCk7XHJcbiAgICAgICAgaW5qZWN0JCQxW2luZGV4XSA9IExhenkub2Yoa2V5VmFsdWUpO1xyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBhbGwoa2V5VmFsdWUpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBfa2V5LCBpbmRleCkge1xyXG4gICAgICAgIHZhciBpbmplY3QkJDEgPSBnZXREZWNvcmF0b3JEZXBlbmRlbmNpZXModGFyZ2V0KTtcclxuICAgICAgICBpbmplY3QkJDFbaW5kZXhdID0gQWxsLm9mKGtleVZhbHVlKTtcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gb3B0aW9uYWwoY2hlY2tQYXJlbnRPclRhcmdldCkge1xyXG4gICAgaWYgKGNoZWNrUGFyZW50T3JUYXJnZXQgPT09IHZvaWQgMCkgeyBjaGVja1BhcmVudE9yVGFyZ2V0ID0gdHJ1ZTsgfVxyXG4gICAgdmFyIGRlY28gPSBmdW5jdGlvbiAoY2hlY2tQYXJlbnQpIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgX2tleSwgaW5kZXgpIHtcclxuICAgICAgICAgICAgdmFyIGluamVjdCQkMSA9IGdldERlY29yYXRvckRlcGVuZGVuY2llcyh0YXJnZXQpO1xyXG4gICAgICAgICAgICBpbmplY3QkJDFbaW5kZXhdID0gT3B0aW9uYWwub2YoaW5qZWN0JCQxW2luZGV4XSwgY2hlY2tQYXJlbnQpO1xyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG4gICAgaWYgKHR5cGVvZiBjaGVja1BhcmVudE9yVGFyZ2V0ID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICByZXR1cm4gZGVjbyhjaGVja1BhcmVudE9yVGFyZ2V0KTtcclxuICAgIH1cclxuICAgIHJldHVybiBkZWNvKHRydWUpO1xyXG59XHJcbmZ1bmN0aW9uIHBhcmVudCh0YXJnZXQsIF9rZXksIGluZGV4KSB7XHJcbiAgICB2YXIgaW5qZWN0JCQxID0gZ2V0RGVjb3JhdG9yRGVwZW5kZW5jaWVzKHRhcmdldCk7XHJcbiAgICBpbmplY3QkJDFbaW5kZXhdID0gUGFyZW50Lm9mKGluamVjdCQkMVtpbmRleF0pO1xyXG59XHJcbmZ1bmN0aW9uIGZhY3Rvcnkoa2V5VmFsdWUpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBfa2V5LCBpbmRleCkge1xyXG4gICAgICAgIHZhciBpbmplY3QkJDEgPSBnZXREZWNvcmF0b3JEZXBlbmRlbmNpZXModGFyZ2V0KTtcclxuICAgICAgICBpbmplY3QkJDFbaW5kZXhdID0gRmFjdG9yeS5vZihrZXlWYWx1ZSk7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIG5ld0luc3RhbmNlKGFzS2V5T3JUYXJnZXQpIHtcclxuICAgIHZhciBkeW5hbWljRGVwZW5kZW5jaWVzID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIGR5bmFtaWNEZXBlbmRlbmNpZXNbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICB9XHJcbiAgICB2YXIgZGVjbyA9IGZ1bmN0aW9uIChhc0tleSkge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBfa2V5LCBpbmRleCkge1xyXG4gICAgICAgICAgICB2YXIgaW5qZWN0JCQxID0gZ2V0RGVjb3JhdG9yRGVwZW5kZW5jaWVzKHRhcmdldCk7XHJcbiAgICAgICAgICAgIGluamVjdCQkMVtpbmRleF0gPSBOZXdJbnN0YW5jZS5vZi5hcHBseShOZXdJbnN0YW5jZSwgW2luamVjdCQkMVtpbmRleF1dLmNvbmNhdChkeW5hbWljRGVwZW5kZW5jaWVzKSk7XHJcbiAgICAgICAgICAgIGlmICghIWFzS2V5KSB7XHJcbiAgICAgICAgICAgICAgICBpbmplY3QkJDFbaW5kZXhdLmFzKGFzS2V5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMSkge1xyXG4gICAgICAgIHJldHVybiBkZWNvKGFzS2V5T3JUYXJnZXQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRlY28oKTtcclxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUtleShrZXkpIHtcclxuICAgIGlmIChrZXkgPT09IG51bGwgfHwga2V5ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2tleS92YWx1ZSBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIEFyZSB5b3UgdHJ5aW5nIHRvIGluamVjdC9yZWdpc3RlciBzb21ldGhpbmcgdGhhdCBkb2VzblxcJ3QgZXhpc3Qgd2l0aCBEST8nKTtcclxuICAgIH1cclxufVxyXG52YXIgX2VtcHR5UGFyYW1ldGVycyA9IE9iamVjdC5mcmVlemUoW10pO1xyXG5tZXRhZGF0YS5yZWdpc3RyYXRpb24gPSAnYXVyZWxpYTpyZWdpc3RyYXRpb24nO1xyXG5tZXRhZGF0YS5pbnZva2VyID0gJ2F1cmVsaWE6aW52b2tlcic7XHJcbnZhciByZXNvbHZlckRlY29yYXRlcyA9IHJlc29sdmVyLmRlY29yYXRlcztcclxudmFyIEludm9jYXRpb25IYW5kbGVyID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEludm9jYXRpb25IYW5kbGVyKGZuLCBpbnZva2VyLCBkZXBlbmRlbmNpZXMpIHtcclxuICAgICAgICB0aGlzLmZuID0gZm47XHJcbiAgICAgICAgdGhpcy5pbnZva2VyID0gaW52b2tlcjtcclxuICAgICAgICB0aGlzLmRlcGVuZGVuY2llcyA9IGRlcGVuZGVuY2llcztcclxuICAgIH1cclxuICAgIEludm9jYXRpb25IYW5kbGVyLnByb3RvdHlwZS5pbnZva2UgPSBmdW5jdGlvbiAoY29udGFpbmVyLCBkeW5hbWljRGVwZW5kZW5jaWVzKSB7XHJcbiAgICAgICAgcmV0dXJuIGR5bmFtaWNEZXBlbmRlbmNpZXMgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IHRoaXMuaW52b2tlci5pbnZva2VXaXRoRHluYW1pY0RlcGVuZGVuY2llcyhjb250YWluZXIsIHRoaXMuZm4sIHRoaXMuZGVwZW5kZW5jaWVzLCBkeW5hbWljRGVwZW5kZW5jaWVzKVxyXG4gICAgICAgICAgICA6IHRoaXMuaW52b2tlci5pbnZva2UoY29udGFpbmVyLCB0aGlzLmZuLCB0aGlzLmRlcGVuZGVuY2llcyk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIEludm9jYXRpb25IYW5kbGVyO1xyXG59KCkpO1xyXG5mdW5jdGlvbiBpbnZva2VXaXRoRHluYW1pY0RlcGVuZGVuY2llcyhjb250YWluZXIsIGZuLCBzdGF0aWNEZXBlbmRlbmNpZXMsIGR5bmFtaWNEZXBlbmRlbmNpZXMpIHtcclxuICAgIHZhciBpID0gc3RhdGljRGVwZW5kZW5jaWVzLmxlbmd0aDtcclxuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGkpO1xyXG4gICAgdmFyIGxvb2t1cDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgICBsb29rdXAgPSBzdGF0aWNEZXBlbmRlbmNpZXNbaV07XHJcbiAgICAgICAgaWYgKGxvb2t1cCA9PT0gbnVsbCB8fCBsb29rdXAgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbnN0cnVjdG9yIFBhcmFtZXRlciB3aXRoIGluZGV4ICcgK1xyXG4gICAgICAgICAgICAgICAgaSArXHJcbiAgICAgICAgICAgICAgICAnIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4gQXJlIHlvdSB0cnlpbmcgdG8gaW5qZWN0L3JlZ2lzdGVyIHNvbWV0aGluZyB0aGF0IGRvZXNuXFwndCBleGlzdCB3aXRoIERJPycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgYXJnc1tpXSA9IGNvbnRhaW5lci5nZXQobG9va3VwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoZHluYW1pY0RlcGVuZGVuY2llcyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KGR5bmFtaWNEZXBlbmRlbmNpZXMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFJlZmxlY3QuY29uc3RydWN0KGZuLCBhcmdzKTtcclxufVxyXG52YXIgY2xhc3NJbnZva2VyID0ge1xyXG4gICAgaW52b2tlOiBmdW5jdGlvbiAoY29udGFpbmVyLCBUeXBlLCBkZXBzKSB7XHJcbiAgICAgICAgdmFyIGluc3RhbmNlcyA9IGRlcHMubWFwKGZ1bmN0aW9uIChkZXApIHsgcmV0dXJuIGNvbnRhaW5lci5nZXQoZGVwKTsgfSk7XHJcbiAgICAgICAgcmV0dXJuIFJlZmxlY3QuY29uc3RydWN0KFR5cGUsIGluc3RhbmNlcyk7XHJcbiAgICB9LFxyXG4gICAgaW52b2tlV2l0aER5bmFtaWNEZXBlbmRlbmNpZXM6IGludm9rZVdpdGhEeW5hbWljRGVwZW5kZW5jaWVzXHJcbn07XHJcbmZ1bmN0aW9uIGdldERlcGVuZGVuY2llcyhmKSB7XHJcbiAgICBpZiAoIWYuaGFzT3duUHJvcGVydHkoJ2luamVjdCcpKSB7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBmLmluamVjdCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIHJldHVybiBmLmluamVjdCgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGYuaW5qZWN0O1xyXG59XHJcbnZhciBDb250YWluZXIgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gQ29udGFpbmVyKGNvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247XHJcbiAgICAgICAgdGhpcy5fb25IYW5kbGVyQ3JlYXRlZCA9IGNvbmZpZ3VyYXRpb24ub25IYW5kbGVyQ3JlYXRlZDtcclxuICAgICAgICB0aGlzLl9oYW5kbGVycyA9XHJcbiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uaGFuZGxlcnMgfHwgKGNvbmZpZ3VyYXRpb24uaGFuZGxlcnMgPSBuZXcgTWFwKCkpO1xyXG4gICAgICAgIHRoaXMuX3Jlc29sdmVycyA9IG5ldyBNYXAoKTtcclxuICAgICAgICB0aGlzLnJvb3QgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDtcclxuICAgIH1cclxuICAgIENvbnRhaW5lci5wcm90b3R5cGUubWFrZUdsb2JhbCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBDb250YWluZXIuaW5zdGFuY2UgPSB0aGlzO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfTtcclxuICAgIENvbnRhaW5lci5wcm90b3R5cGUuc2V0SGFuZGxlckNyZWF0ZWRDYWxsYmFjayA9IGZ1bmN0aW9uIChvbkhhbmRsZXJDcmVhdGVkKSB7XHJcbiAgICAgICAgdGhpcy5fb25IYW5kbGVyQ3JlYXRlZCA9IG9uSGFuZGxlckNyZWF0ZWQ7XHJcbiAgICAgICAgdGhpcy5fY29uZmlndXJhdGlvbi5vbkhhbmRsZXJDcmVhdGVkID0gb25IYW5kbGVyQ3JlYXRlZDtcclxuICAgIH07XHJcbiAgICBDb250YWluZXIucHJvdG90eXBlLnJlZ2lzdGVySW5zdGFuY2UgPSBmdW5jdGlvbiAoa2V5LCBpbnN0YW5jZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlZ2lzdGVyUmVzb2x2ZXIoa2V5LCBuZXcgU3RyYXRlZ3lSZXNvbHZlcigwLCBpbnN0YW5jZSA9PT0gdW5kZWZpbmVkID8ga2V5IDogaW5zdGFuY2UpKTtcclxuICAgIH07XHJcbiAgICBDb250YWluZXIucHJvdG90eXBlLnJlZ2lzdGVyU2luZ2xldG9uID0gZnVuY3Rpb24gKGtleSwgZm4pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZWdpc3RlclJlc29sdmVyKGtleSwgbmV3IFN0cmF0ZWd5UmVzb2x2ZXIoMSwgZm4gPT09IHVuZGVmaW5lZCA/IGtleSA6IGZuKSk7XHJcbiAgICB9O1xyXG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5yZWdpc3RlclRyYW5zaWVudCA9IGZ1bmN0aW9uIChrZXksIGZuKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVnaXN0ZXJSZXNvbHZlcihrZXksIG5ldyBTdHJhdGVneVJlc29sdmVyKDIsIGZuID09PSB1bmRlZmluZWQgPyBrZXkgOiBmbikpO1xyXG4gICAgfTtcclxuICAgIENvbnRhaW5lci5wcm90b3R5cGUucmVnaXN0ZXJIYW5kbGVyID0gZnVuY3Rpb24gKGtleSwgaGFuZGxlcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlZ2lzdGVyUmVzb2x2ZXIoa2V5LCBuZXcgU3RyYXRlZ3lSZXNvbHZlcigzLCBoYW5kbGVyKSk7XHJcbiAgICB9O1xyXG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5yZWdpc3RlckFsaWFzID0gZnVuY3Rpb24gKG9yaWdpbmFsS2V5LCBhbGlhc0tleSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlZ2lzdGVyUmVzb2x2ZXIoYWxpYXNLZXksIG5ldyBTdHJhdGVneVJlc29sdmVyKDUsIG9yaWdpbmFsS2V5KSk7XHJcbiAgICB9O1xyXG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5yZWdpc3RlclJlc29sdmVyID0gZnVuY3Rpb24gKGtleSwgcmVzb2x2ZXIkJDEpIHtcclxuICAgICAgICB2YWxpZGF0ZUtleShrZXkpO1xyXG4gICAgICAgIHZhciBhbGxSZXNvbHZlcnMgPSB0aGlzLl9yZXNvbHZlcnM7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IGFsbFJlc29sdmVycy5nZXQoa2V5KTtcclxuICAgICAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgYWxsUmVzb2x2ZXJzLnNldChrZXksIHJlc29sdmVyJCQxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAocmVzdWx0LnN0cmF0ZWd5ID09PSA0KSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5zdGF0ZS5wdXNoKHJlc29sdmVyJCQxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGFsbFJlc29sdmVycy5zZXQoa2V5LCBuZXcgU3RyYXRlZ3lSZXNvbHZlcig0LCBbcmVzdWx0LCByZXNvbHZlciQkMV0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVyJCQxO1xyXG4gICAgfTtcclxuICAgIENvbnRhaW5lci5wcm90b3R5cGUuYXV0b1JlZ2lzdGVyID0gZnVuY3Rpb24gKGtleSwgZm4pIHtcclxuICAgICAgICBmbiA9IGZuID09PSB1bmRlZmluZWQgPyBrZXkgOiBmbjtcclxuICAgICAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHZhciByZWdpc3RyYXRpb24gPSBtZXRhZGF0YS5nZXQobWV0YWRhdGEucmVnaXN0cmF0aW9uLCBmbik7XHJcbiAgICAgICAgICAgIGlmIChyZWdpc3RyYXRpb24gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVnaXN0ZXJSZXNvbHZlcihrZXksIG5ldyBTdHJhdGVneVJlc29sdmVyKDEsIGZuKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlZ2lzdHJhdGlvbi5yZWdpc3RlclJlc29sdmVyKHRoaXMsIGtleSwgZm4pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5yZWdpc3RlclJlc29sdmVyKGtleSwgbmV3IFN0cmF0ZWd5UmVzb2x2ZXIoMCwgZm4pKTtcclxuICAgIH07XHJcbiAgICBDb250YWluZXIucHJvdG90eXBlLmF1dG9SZWdpc3RlckFsbCA9IGZ1bmN0aW9uIChmbnMpIHtcclxuICAgICAgICB2YXIgaSA9IGZucy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUgKGktLSkge1xyXG4gICAgICAgICAgICB0aGlzLmF1dG9SZWdpc3RlcihmbnNbaV0pO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBDb250YWluZXIucHJvdG90eXBlLnVucmVnaXN0ZXIgPSBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgdGhpcy5fcmVzb2x2ZXJzLmRlbGV0ZShrZXkpO1xyXG4gICAgfTtcclxuICAgIENvbnRhaW5lci5wcm90b3R5cGUuaGFzUmVzb2x2ZXIgPSBmdW5jdGlvbiAoa2V5LCBjaGVja1BhcmVudCkge1xyXG4gICAgICAgIGlmIChjaGVja1BhcmVudCA9PT0gdm9pZCAwKSB7IGNoZWNrUGFyZW50ID0gZmFsc2U7IH1cclxuICAgICAgICB2YWxpZGF0ZUtleShrZXkpO1xyXG4gICAgICAgIHJldHVybiAodGhpcy5fcmVzb2x2ZXJzLmhhcyhrZXkpIHx8XHJcbiAgICAgICAgICAgIChjaGVja1BhcmVudCAmJlxyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQgIT09IG51bGwgJiZcclxuICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Lmhhc1Jlc29sdmVyKGtleSwgY2hlY2tQYXJlbnQpKSk7XHJcbiAgICB9O1xyXG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5nZXRSZXNvbHZlciA9IGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb2x2ZXJzLmdldChrZXkpO1xyXG4gICAgfTtcclxuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIHZhbGlkYXRlS2V5KGtleSk7XHJcbiAgICAgICAgaWYgKGtleSA9PT0gQ29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVzb2x2ZXJEZWNvcmF0ZXMoa2V5KSkge1xyXG4gICAgICAgICAgICByZXR1cm4ga2V5LmdldCh0aGlzLCBrZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcmVzb2x2ZXIkJDEgPSB0aGlzLl9yZXNvbHZlcnMuZ2V0KGtleSk7XHJcbiAgICAgICAgaWYgKHJlc29sdmVyJCQxID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucGFyZW50ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hdXRvUmVnaXN0ZXIoa2V5KS5nZXQodGhpcywga2V5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgcmVnaXN0cmF0aW9uID0gbWV0YWRhdGEuZ2V0KG1ldGFkYXRhLnJlZ2lzdHJhdGlvbiwga2V5KTtcclxuICAgICAgICAgICAgaWYgKHJlZ2lzdHJhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQuX2dldChrZXkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZWdpc3RyYXRpb24ucmVnaXN0ZXJSZXNvbHZlcih0aGlzLCBrZXksIGtleSkuZ2V0KHRoaXMsIGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXNvbHZlciQkMS5nZXQodGhpcywga2V5KTtcclxuICAgIH07XHJcbiAgICBDb250YWluZXIucHJvdG90eXBlLl9nZXQgPSBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgdmFyIHJlc29sdmVyJCQxID0gdGhpcy5fcmVzb2x2ZXJzLmdldChrZXkpO1xyXG4gICAgICAgIGlmIChyZXNvbHZlciQkMSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXV0b1JlZ2lzdGVyKGtleSkuZ2V0KHRoaXMsIGtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50Ll9nZXQoa2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVyJCQxLmdldCh0aGlzLCBrZXkpO1xyXG4gICAgfTtcclxuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZ2V0QWxsID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIHZhbGlkYXRlS2V5KGtleSk7XHJcbiAgICAgICAgdmFyIHJlc29sdmVyJCQxID0gdGhpcy5fcmVzb2x2ZXJzLmdldChrZXkpO1xyXG4gICAgICAgIGlmIChyZXNvbHZlciQkMSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9lbXB0eVBhcmFtZXRlcnM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50LmdldEFsbChrZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVzb2x2ZXIkJDEuc3RyYXRlZ3kgPT09IDQpIHtcclxuICAgICAgICAgICAgdmFyIHN0YXRlID0gcmVzb2x2ZXIkJDEuc3RhdGU7XHJcbiAgICAgICAgICAgIHZhciBpID0gc3RhdGUubGVuZ3RoO1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IG5ldyBBcnJheShpKTtcclxuICAgICAgICAgICAgd2hpbGUgKGktLSkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0c1tpXSA9IHN0YXRlW2ldLmdldCh0aGlzLCBrZXkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gW3Jlc29sdmVyJCQxLmdldCh0aGlzLCBrZXkpXTtcclxuICAgIH07XHJcbiAgICBDb250YWluZXIucHJvdG90eXBlLmNyZWF0ZUNoaWxkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBjaGlsZCA9IG5ldyBDb250YWluZXIodGhpcy5fY29uZmlndXJhdGlvbik7XHJcbiAgICAgICAgY2hpbGQucm9vdCA9IHRoaXMucm9vdDtcclxuICAgICAgICBjaGlsZC5wYXJlbnQgPSB0aGlzO1xyXG4gICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgIH07XHJcbiAgICBDb250YWluZXIucHJvdG90eXBlLmludm9rZSA9IGZ1bmN0aW9uIChmbiwgZHluYW1pY0RlcGVuZGVuY2llcykge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciBoYW5kbGVyID0gdGhpcy5faGFuZGxlcnMuZ2V0KGZuKTtcclxuICAgICAgICAgICAgaWYgKGhhbmRsZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgaGFuZGxlciA9IHRoaXMuX2NyZWF0ZUludm9jYXRpb25IYW5kbGVyKGZuKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZXJzLnNldChmbiwgaGFuZGxlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZXIuaW52b2tlKHRoaXMsIGR5bmFtaWNEZXBlbmRlbmNpZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgQWdncmVnYXRlRXJyb3IoXCJFcnJvciBpbnZva2luZyBcIiArIGZuLm5hbWUgKyBcIi4gQ2hlY2sgdGhlIGlubmVyIGVycm9yIGZvciBkZXRhaWxzLlwiLCBlLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5fY3JlYXRlSW52b2NhdGlvbkhhbmRsZXIgPSBmdW5jdGlvbiAoZm4pIHtcclxuICAgICAgICB2YXIgZGVwZW5kZW5jaWVzO1xyXG4gICAgICAgIGlmIChmbi5pbmplY3QgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBkZXBlbmRlbmNpZXMgPVxyXG4gICAgICAgICAgICAgICAgbWV0YWRhdGEuZ2V0T3duKG1ldGFkYXRhLnBhcmFtVHlwZXMsIGZuKSB8fCBfZW1wdHlQYXJhbWV0ZXJzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZGVwZW5kZW5jaWVzID0gW107XHJcbiAgICAgICAgICAgIHZhciBjdG9yID0gZm47XHJcbiAgICAgICAgICAgIHdoaWxlICh0eXBlb2YgY3RvciA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzLnB1c2guYXBwbHkoZGVwZW5kZW5jaWVzLCBnZXREZXBlbmRlbmNpZXMoY3RvcikpO1xyXG4gICAgICAgICAgICAgICAgY3RvciA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihjdG9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgaW52b2tlciA9IG1ldGFkYXRhLmdldE93bihtZXRhZGF0YS5pbnZva2VyLCBmbikgfHwgY2xhc3NJbnZva2VyO1xyXG4gICAgICAgIHZhciBoYW5kbGVyID0gbmV3IEludm9jYXRpb25IYW5kbGVyKGZuLCBpbnZva2VyLCBkZXBlbmRlbmNpZXMpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9vbkhhbmRsZXJDcmVhdGVkICE9PSB1bmRlZmluZWRcclxuICAgICAgICAgICAgPyB0aGlzLl9vbkhhbmRsZXJDcmVhdGVkKGhhbmRsZXIpXHJcbiAgICAgICAgICAgIDogaGFuZGxlcjtcclxuICAgIH07XHJcbiAgICByZXR1cm4gQ29udGFpbmVyO1xyXG59KCkpO1xuXG5mdW5jdGlvbiBpbnZva2VyKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCkge1xyXG4gICAgICAgIG1ldGFkYXRhLmRlZmluZShtZXRhZGF0YS5pbnZva2VyLCB2YWx1ZSwgdGFyZ2V0KTtcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gaW52b2tlQXNGYWN0b3J5KHBvdGVudGlhbFRhcmdldCkge1xyXG4gICAgdmFyIGRlY28gPSBmdW5jdGlvbiAodGFyZ2V0KSB7XHJcbiAgICAgICAgbWV0YWRhdGEuZGVmaW5lKG1ldGFkYXRhLmludm9rZXIsIEZhY3RvcnlJbnZva2VyLmluc3RhbmNlLCB0YXJnZXQpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBwb3RlbnRpYWxUYXJnZXQgPyBkZWNvKHBvdGVudGlhbFRhcmdldCkgOiBkZWNvO1xyXG59XHJcbnZhciBGYWN0b3J5SW52b2tlciA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBGYWN0b3J5SW52b2tlcigpIHtcclxuICAgIH1cclxuICAgIEZhY3RvcnlJbnZva2VyLnByb3RvdHlwZS5pbnZva2UgPSBmdW5jdGlvbiAoY29udGFpbmVyLCBmbiwgZGVwZW5kZW5jaWVzKSB7XHJcbiAgICAgICAgdmFyIGkgPSBkZXBlbmRlbmNpZXMubGVuZ3RoO1xyXG4gICAgICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGkpO1xyXG4gICAgICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgICAgICAgYXJnc1tpXSA9IGNvbnRhaW5lci5nZXQoZGVwZW5kZW5jaWVzW2ldKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZuLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XHJcbiAgICB9O1xyXG4gICAgRmFjdG9yeUludm9rZXIucHJvdG90eXBlLmludm9rZVdpdGhEeW5hbWljRGVwZW5kZW5jaWVzID0gZnVuY3Rpb24gKGNvbnRhaW5lciwgZm4sIHN0YXRpY0RlcGVuZGVuY2llcywgZHluYW1pY0RlcGVuZGVuY2llcykge1xyXG4gICAgICAgIHZhciBpID0gc3RhdGljRGVwZW5kZW5jaWVzLmxlbmd0aDtcclxuICAgICAgICB2YXIgYXJncyA9IG5ldyBBcnJheShpKTtcclxuICAgICAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgICAgICAgIGFyZ3NbaV0gPSBjb250YWluZXIuZ2V0KHN0YXRpY0RlcGVuZGVuY2llc1tpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkeW5hbWljRGVwZW5kZW5jaWVzICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KGR5bmFtaWNEZXBlbmRlbmNpZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZm4uYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gRmFjdG9yeUludm9rZXI7XHJcbn0oKSk7XHJcbkZhY3RvcnlJbnZva2VyLmluc3RhbmNlID0gbmV3IEZhY3RvcnlJbnZva2VyKCk7XG5cbmZ1bmN0aW9uIHJlZ2lzdHJhdGlvbih2YWx1ZSkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQpIHtcclxuICAgICAgICBtZXRhZGF0YS5kZWZpbmUobWV0YWRhdGEucmVnaXN0cmF0aW9uLCB2YWx1ZSwgdGFyZ2V0KTtcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gdHJhbnNpZW50KGtleSkge1xyXG4gICAgcmV0dXJuIHJlZ2lzdHJhdGlvbihuZXcgVHJhbnNpZW50UmVnaXN0cmF0aW9uKGtleSkpO1xyXG59XHJcbmZ1bmN0aW9uIHNpbmdsZXRvbihrZXlPclJlZ2lzdGVySW5DaGlsZCwgcmVnaXN0ZXJJbkNoaWxkKSB7XHJcbiAgICBpZiAocmVnaXN0ZXJJbkNoaWxkID09PSB2b2lkIDApIHsgcmVnaXN0ZXJJbkNoaWxkID0gZmFsc2U7IH1cclxuICAgIHJldHVybiByZWdpc3RyYXRpb24obmV3IFNpbmdsZXRvblJlZ2lzdHJhdGlvbihrZXlPclJlZ2lzdGVySW5DaGlsZCwgcmVnaXN0ZXJJbkNoaWxkKSk7XHJcbn1cclxudmFyIFRyYW5zaWVudFJlZ2lzdHJhdGlvbiA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBUcmFuc2llbnRSZWdpc3RyYXRpb24oa2V5KSB7XHJcbiAgICAgICAgdGhpcy5fa2V5ID0ga2V5O1xyXG4gICAgfVxyXG4gICAgVHJhbnNpZW50UmVnaXN0cmF0aW9uLnByb3RvdHlwZS5yZWdpc3RlclJlc29sdmVyID0gZnVuY3Rpb24gKGNvbnRhaW5lciwga2V5LCBmbikge1xyXG4gICAgICAgIHZhciBleGlzdGluZ1Jlc29sdmVyID0gY29udGFpbmVyLmdldFJlc29sdmVyKHRoaXMuX2tleSB8fCBrZXkpO1xyXG4gICAgICAgIHJldHVybiBleGlzdGluZ1Jlc29sdmVyID09PSB1bmRlZmluZWRcclxuICAgICAgICAgICAgPyBjb250YWluZXIucmVnaXN0ZXJUcmFuc2llbnQoKHRoaXMuX2tleSB8fCBrZXkpLCBmbilcclxuICAgICAgICAgICAgOiBleGlzdGluZ1Jlc29sdmVyO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBUcmFuc2llbnRSZWdpc3RyYXRpb247XHJcbn0oKSk7XHJcbnZhciBTaW5nbGV0b25SZWdpc3RyYXRpb24gPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gU2luZ2xldG9uUmVnaXN0cmF0aW9uKGtleU9yUmVnaXN0ZXJJbkNoaWxkLCByZWdpc3RlckluQ2hpbGQpIHtcclxuICAgICAgICBpZiAocmVnaXN0ZXJJbkNoaWxkID09PSB2b2lkIDApIHsgcmVnaXN0ZXJJbkNoaWxkID0gZmFsc2U7IH1cclxuICAgICAgICBpZiAodHlwZW9mIGtleU9yUmVnaXN0ZXJJbkNoaWxkID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVnaXN0ZXJJbkNoaWxkID0ga2V5T3JSZWdpc3RlckluQ2hpbGQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9rZXkgPSBrZXlPclJlZ2lzdGVySW5DaGlsZDtcclxuICAgICAgICAgICAgdGhpcy5fcmVnaXN0ZXJJbkNoaWxkID0gcmVnaXN0ZXJJbkNoaWxkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIFNpbmdsZXRvblJlZ2lzdHJhdGlvbi5wcm90b3R5cGUucmVnaXN0ZXJSZXNvbHZlciA9IGZ1bmN0aW9uIChjb250YWluZXIsIGtleSwgZm4pIHtcclxuICAgICAgICB2YXIgdGFyZ2V0Q29udGFpbmVyID0gdGhpcy5fcmVnaXN0ZXJJbkNoaWxkID8gY29udGFpbmVyIDogY29udGFpbmVyLnJvb3Q7XHJcbiAgICAgICAgdmFyIGV4aXN0aW5nUmVzb2x2ZXIgPSB0YXJnZXRDb250YWluZXIuZ2V0UmVzb2x2ZXIodGhpcy5fa2V5IHx8IGtleSk7XHJcbiAgICAgICAgcmV0dXJuIGV4aXN0aW5nUmVzb2x2ZXIgPT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IHRhcmdldENvbnRhaW5lci5yZWdpc3RlclNpbmdsZXRvbih0aGlzLl9rZXkgfHwga2V5LCBmbilcclxuICAgICAgICAgICAgOiBleGlzdGluZ1Jlc29sdmVyO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBTaW5nbGV0b25SZWdpc3RyYXRpb247XHJcbn0oKSk7XG5cbmV4cG9ydCB7IF9lbXB0eVBhcmFtZXRlcnMsIEludm9jYXRpb25IYW5kbGVyLCBDb250YWluZXIsIGF1dG9pbmplY3QsIGluamVjdCwgaW52b2tlciwgaW52b2tlQXNGYWN0b3J5LCBGYWN0b3J5SW52b2tlciwgcmVnaXN0cmF0aW9uLCB0cmFuc2llbnQsIHNpbmdsZXRvbiwgVHJhbnNpZW50UmVnaXN0cmF0aW9uLCBTaW5nbGV0b25SZWdpc3RyYXRpb24sIHJlc29sdmVyLCBTdHJhdGVneSwgU3RyYXRlZ3lSZXNvbHZlciwgTGF6eSwgQWxsLCBPcHRpb25hbCwgUGFyZW50LCBGYWN0b3J5LCBOZXdJbnN0YW5jZSwgZ2V0RGVjb3JhdG9yRGVwZW5kZW5jaWVzLCBsYXp5LCBhbGwsIG9wdGlvbmFsLCBwYXJlbnQsIGZhY3RvcnksIG5ld0luc3RhbmNlIH07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6\n')},60:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var months = [\n        'جنوري',\n        'فيبروري',\n        'مارچ',\n        'اپريل',\n        'مئي',\n        'جون',\n        'جولاءِ',\n        'آگسٽ',\n        'سيپٽمبر',\n        'آڪٽوبر',\n        'نومبر',\n        'ڊسمبر'\n    ];\n    var days = [\n        'آچر',\n        'سومر',\n        'اڱارو',\n        'اربع',\n        'خميس',\n        'جمع',\n        'ڇنڇر'\n    ];\n\n    var sd = moment.defineLocale('sd', {\n        months : months,\n        monthsShort : months,\n        weekdays : days,\n        weekdaysShort : days,\n        weekdaysMin : days,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd، D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /صبح|شام/,\n        isPM : function (input) {\n            return 'شام' === input;\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'صبح';\n            }\n            return 'شام';\n        },\n        calendar : {\n            sameDay : '[اڄ] LT',\n            nextDay : '[سڀاڻي] LT',\n            nextWeek : 'dddd [اڳين هفتي تي] LT',\n            lastDay : '[ڪالهه] LT',\n            lastWeek : '[گزريل هفتي] dddd [تي] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s پوء',\n            past : '%s اڳ',\n            s : 'چند سيڪنڊ',\n            ss : '%d سيڪنڊ',\n            m : 'هڪ منٽ',\n            mm : '%d منٽ',\n            h : 'هڪ ڪلاڪ',\n            hh : '%d ڪلاڪ',\n            d : 'هڪ ڏينهن',\n            dd : '%d ڏينهن',\n            M : 'هڪ مهينو',\n            MM : '%d مهينا',\n            y : 'هڪ سال',\n            yy : '%d سال'\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return sd;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zZC5qcz82Nzg0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiNjAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBtb250aHMgPSBbXG4gICAgICAgICfYrNmG2YjYsdmKJyxcbiAgICAgICAgJ9mB2YrYqNix2YjYsdmKJyxcbiAgICAgICAgJ9mF2KfYsdqGJyxcbiAgICAgICAgJ9in2b7YsdmK2YQnLFxuICAgICAgICAn2YXYptmKJyxcbiAgICAgICAgJ9is2YjZhicsXG4gICAgICAgICfYrNmI2YTYp9ih2ZAnLFxuICAgICAgICAn2KLar9iz2b0nLFxuICAgICAgICAn2LPZitm+2b3Zhdio2LEnLFxuICAgICAgICAn2KLaqtm92YjYqNixJyxcbiAgICAgICAgJ9mG2YjZhdio2LEnLFxuICAgICAgICAn2orYs9mF2KjYsSdcbiAgICBdO1xuICAgIHZhciBkYXlzID0gW1xuICAgICAgICAn2KLahtixJyxcbiAgICAgICAgJ9iz2YjZhdixJyxcbiAgICAgICAgJ9in2rHYp9ix2YgnLFxuICAgICAgICAn2KfYsdio2LknLFxuICAgICAgICAn2K7ZhdmK2LMnLFxuICAgICAgICAn2KzZhdi5JyxcbiAgICAgICAgJ9qH2Ybah9ixJ1xuICAgIF07XG5cbiAgICB2YXIgc2QgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdzZCcsIHtcbiAgICAgICAgbW9udGhzIDogbW9udGhzLFxuICAgICAgICBtb250aHNTaG9ydCA6IG1vbnRocyxcbiAgICAgICAgd2Vla2RheXMgOiBkYXlzLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogZGF5cyxcbiAgICAgICAgd2Vla2RheXNNaW4gOiBkYXlzLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZNiMIEQgTU1NTSBZWVlZIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv2LXYqNitfNi02KfZhS8sXG4gICAgICAgIGlzUE0gOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAn2LTYp9mFJyA9PT0gaW5wdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtIDogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn2LXYqNitJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAn2LTYp9mFJztcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1vYp9qEXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5IDogJ1vYs9qA2Kfau9mKXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdkZGRkIFvYp9qz2YrZhiDZh9mB2KrZiiDYqtmKXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5IDogJ1vaqtin2YTZh9mHXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlayA6ICdb2q/Ystix2YrZhCDZh9mB2KrZil0gZGRkZCBb2KrZil0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJyVzINm+2YjYoScsXG4gICAgICAgICAgICBwYXN0IDogJyVzINin2rMnLFxuICAgICAgICAgICAgcyA6ICfahtmG2K8g2LPZitqq2YbaiicsXG4gICAgICAgICAgICBzcyA6ICclZCDYs9mK2qrZhtqKJyxcbiAgICAgICAgICAgIG0gOiAn2YfaqiDZhdmG2b0nLFxuICAgICAgICAgICAgbW0gOiAnJWQg2YXZhtm9JyxcbiAgICAgICAgICAgIGggOiAn2YfaqiDaqtmE2KfaqicsXG4gICAgICAgICAgICBoaCA6ICclZCDaqtmE2KfaqicsXG4gICAgICAgICAgICBkIDogJ9mH2qog2o/ZitmG2YfZhicsXG4gICAgICAgICAgICBkZCA6ICclZCDaj9mK2YbZh9mGJyxcbiAgICAgICAgICAgIE0gOiAn2YfaqiDZhdmH2YrZhtmIJyxcbiAgICAgICAgICAgIE1NIDogJyVkINmF2YfZitmG2KcnLFxuICAgICAgICAgICAgeSA6ICfZh9qqINiz2KfZhCcsXG4gICAgICAgICAgICB5eSA6ICclZCDYs9in2YQnXG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL9iML2csICcsJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvLC9nLCAn2IwnKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNCAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2Q7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///60\n")},61:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            'ss': withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n            'mm': withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',\n            'hh': 'час_часа_часов',\n            'dd': 'день_дня_дней',\n            'MM': 'месяц_месяца_месяцев',\n            'yy': 'год_года_лет'\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'минута' : 'минуту';\n        }\n        else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n    var monthsParse = [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[йя]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i];\n\n    // http://new.gramota.ru/spravka/rules/139-prop : § 103\n    // Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637\n    // CLDR data:          http://www.unicode.org/cldr/charts/28/summary/ru.html#1753\n    var ru = moment.defineLocale('ru', {\n        months : {\n            format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_'),\n            standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_')\n        },\n        monthsShort : {\n            // по CLDR именно \"июл.\" и \"июн.\", но какой смысл менять букву на точку ?\n            format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split('_'),\n            standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split('_')\n        },\n        weekdays : {\n            standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'),\n            format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_'),\n            isFormat: /\\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\\] ?dddd/\n        },\n        weekdaysShort : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n        weekdaysMin : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n        monthsParse : monthsParse,\n        longMonthsParse : monthsParse,\n        shortMonthsParse : monthsParse,\n\n        // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки\n        monthsRegex: /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n        // копия предыдущего\n        monthsShortRegex: /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n        // полные названия с падежами\n        monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,\n\n        // Выражение, которое соотвествует только сокращённым формам\n        monthsShortStrictRegex: /^(янв\\.|февр?\\.|мар[т.]|апр\\.|ма[яй]|июн[ья.]|июл[ья.]|авг\\.|сент?\\.|окт\\.|нояб?\\.|дек\\.)/i,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY г.',\n            LLL : 'D MMMM YYYY г., H:mm',\n            LLLL : 'dddd, D MMMM YYYY г., H:mm'\n        },\n        calendar : {\n            sameDay: '[Сегодня, в] LT',\n            nextDay: '[Завтра, в] LT',\n            lastDay: '[Вчера, в] LT',\n            nextWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    switch (this.day()) {\n                        case 0:\n                            return '[В следующее] dddd, [в] LT';\n                        case 1:\n                        case 2:\n                        case 4:\n                            return '[В следующий] dddd, [в] LT';\n                        case 3:\n                        case 5:\n                        case 6:\n                            return '[В следующую] dddd, [в] LT';\n                    }\n                } else {\n                    if (this.day() === 2) {\n                        return '[Во] dddd, [в] LT';\n                    } else {\n                        return '[В] dddd, [в] LT';\n                    }\n                }\n            },\n            lastWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    switch (this.day()) {\n                        case 0:\n                            return '[В прошлое] dddd, [в] LT';\n                        case 1:\n                        case 2:\n                        case 4:\n                            return '[В прошлый] dddd, [в] LT';\n                        case 3:\n                        case 5:\n                        case 6:\n                            return '[В прошлую] dddd, [в] LT';\n                    }\n                } else {\n                    if (this.day() === 2) {\n                        return '[Во] dddd, [в] LT';\n                    } else {\n                        return '[В] dddd, [в] LT';\n                    }\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'через %s',\n            past : '%s назад',\n            s : 'несколько секунд',\n            ss : relativeTimeWithPlural,\n            m : relativeTimeWithPlural,\n            mm : relativeTimeWithPlural,\n            h : 'час',\n            hh : relativeTimeWithPlural,\n            d : 'день',\n            dd : relativeTimeWithPlural,\n            M : 'месяц',\n            MM : relativeTimeWithPlural,\n            y : 'год',\n            yy : relativeTimeWithPlural\n        },\n        meridiemParse: /ночи|утра|дня|вечера/i,\n        isPM : function (input) {\n            return /^(дня|вечера)$/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночи';\n            } else if (hour < 12) {\n                return 'утра';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечера';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(й|го|я)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                    return number + '-й';\n                case 'D':\n                    return number + '-го';\n                case 'w':\n                case 'W':\n                    return number + '-я';\n                default:\n                    return number;\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return ru;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ydS5qcz85NTdjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwiZmlsZSI6IjYxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICBmdW5jdGlvbiBwbHVyYWwod29yZCwgbnVtKSB7XG4gICAgICAgIHZhciBmb3JtcyA9IHdvcmQuc3BsaXQoJ18nKTtcbiAgICAgICAgcmV0dXJuIG51bSAlIDEwID09PSAxICYmIG51bSAlIDEwMCAhPT0gMTEgPyBmb3Jtc1swXSA6IChudW0gJSAxMCA+PSAyICYmIG51bSAlIDEwIDw9IDQgJiYgKG51bSAlIDEwMCA8IDEwIHx8IG51bSAlIDEwMCA+PSAyMCkgPyBmb3Jtc1sxXSA6IGZvcm1zWzJdKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lV2l0aFBsdXJhbChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSkge1xuICAgICAgICB2YXIgZm9ybWF0ID0ge1xuICAgICAgICAgICAgJ3NzJzogd2l0aG91dFN1ZmZpeCA/ICfRgdC10LrRg9C90LTQsF/RgdC10LrRg9C90LTRi1/RgdC10LrRg9C90LQnIDogJ9GB0LXQutGD0L3QtNGDX9GB0LXQutGD0L3QtNGLX9GB0LXQutGD0L3QtCcsXG4gICAgICAgICAgICAnbW0nOiB3aXRob3V0U3VmZml4ID8gJ9C80LjQvdGD0YLQsF/QvNC40L3Rg9GC0Ytf0LzQuNC90YPRgicgOiAn0LzQuNC90YPRgtGDX9C80LjQvdGD0YLRi1/QvNC40L3Rg9GCJyxcbiAgICAgICAgICAgICdoaCc6ICfRh9Cw0YFf0YfQsNGB0LBf0YfQsNGB0L7QsicsXG4gICAgICAgICAgICAnZGQnOiAn0LTQtdC90Yxf0LTQvdGPX9C00L3QtdC5JyxcbiAgICAgICAgICAgICdNTSc6ICfQvNC10YHRj9GGX9C80LXRgdGP0YbQsF/QvNC10YHRj9GG0LXQsicsXG4gICAgICAgICAgICAneXknOiAn0LPQvtC0X9Cz0L7QtNCwX9C70LXRgidcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGtleSA9PT0gJ20nKSB7XG4gICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICfQvNC40L3Rg9GC0LAnIDogJ9C80LjQvdGD0YLRgyc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJyAnICsgcGx1cmFsKGZvcm1hdFtrZXldLCArbnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgbW9udGhzUGFyc2UgPSBbL17Rj9C90LIvaSwgL17RhNC10LIvaSwgL17QvNCw0YAvaSwgL17QsNC/0YAvaSwgL17QvNCwW9C50Y9dL2ksIC9e0LjRjtC9L2ksIC9e0LjRjtC7L2ksIC9e0LDQstCzL2ksIC9e0YHQtdC9L2ksIC9e0L7QutGCL2ksIC9e0L3QvtGPL2ksIC9e0LTQtdC6L2ldO1xuXG4gICAgLy8gaHR0cDovL25ldy5ncmFtb3RhLnJ1L3NwcmF2a2EvcnVsZXMvMTM5LXByb3AgOiDCpyAxMDNcbiAgICAvLyDQodC+0LrRgNCw0YnQtdC90LjRjyDQvNC10YHRj9GG0LXQsjogaHR0cDovL25ldy5ncmFtb3RhLnJ1L3NwcmF2a2EvYnVyby9zZWFyY2gtYW5zd2VyP3M9MjQyNjM3XG4gICAgLy8gQ0xEUiBkYXRhOiAgICAgICAgICBodHRwOi8vd3d3LnVuaWNvZGUub3JnL2NsZHIvY2hhcnRzLzI4L3N1bW1hcnkvcnUuaHRtbCMxNzUzXG4gICAgdmFyIHJ1ID0gbW9tZW50LmRlZmluZUxvY2FsZSgncnUnLCB7XG4gICAgICAgIG1vbnRocyA6IHtcbiAgICAgICAgICAgIGZvcm1hdDogJ9GP0L3QstCw0YDRj1/RhNC10LLRgNCw0LvRj1/QvNCw0YDRgtCwX9Cw0L/RgNC10LvRj1/QvNCw0Y9f0LjRjtC90Y9f0LjRjtC70Y9f0LDQstCz0YPRgdGC0LBf0YHQtdC90YLRj9Cx0YDRj1/QvtC60YLRj9Cx0YDRj1/QvdC+0Y/QsdGA0Y9f0LTQtdC60LDQsdGA0Y8nLnNwbGl0KCdfJyksXG4gICAgICAgICAgICBzdGFuZGFsb25lOiAn0Y/QvdCy0LDRgNGMX9GE0LXQstGA0LDQu9GMX9C80LDRgNGCX9Cw0L/RgNC10LvRjF/QvNCw0Llf0LjRjtC90Yxf0LjRjtC70Yxf0LDQstCz0YPRgdGCX9GB0LXQvdGC0Y/QsdGA0Yxf0L7QutGC0Y/QsdGA0Yxf0L3QvtGP0LHRgNGMX9C00LXQutCw0LHRgNGMJy5zcGxpdCgnXycpXG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1Nob3J0IDoge1xuICAgICAgICAgICAgLy8g0L/QviBDTERSINC40LzQtdC90L3QviBcItC40Y7Quy5cIiDQuCBcItC40Y7QvS5cIiwg0L3QviDQutCw0LrQvtC5INGB0LzRi9GB0Lsg0LzQtdC90Y/RgtGMINCx0YPQutCy0YMg0L3QsCDRgtC+0YfQutGDID9cbiAgICAgICAgICAgIGZvcm1hdDogJ9GP0L3Qsi5f0YTQtdCy0YAuX9C80LDRgC5f0LDQv9GALl/QvNCw0Y9f0LjRjtC90Y9f0LjRjtC70Y9f0LDQstCzLl/RgdC10L3Rgi5f0L7QutGCLl/QvdC+0Y/QsS5f0LTQtdC6Licuc3BsaXQoJ18nKSxcbiAgICAgICAgICAgIHN0YW5kYWxvbmU6ICfRj9C90LIuX9GE0LXQstGALl/QvNCw0YDRgl/QsNC/0YAuX9C80LDQuV/QuNGO0L3RjF/QuNGO0LvRjF/QsNCy0LMuX9GB0LXQvdGCLl/QvtC60YIuX9C90L7Rj9CxLl/QtNC10LouJy5zcGxpdCgnXycpXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWtkYXlzIDoge1xuICAgICAgICAgICAgc3RhbmRhbG9uZTogJ9Cy0L7RgdC60YDQtdGB0LXQvdGM0LVf0L/QvtC90LXQtNC10LvRjNC90LjQul/QstGC0L7RgNC90LjQul/RgdGA0LXQtNCwX9GH0LXRgtCy0LXRgNCzX9C/0Y/RgtC90LjRhtCwX9GB0YPQsdCx0L7RgtCwJy5zcGxpdCgnXycpLFxuICAgICAgICAgICAgZm9ybWF0OiAn0LLQvtGB0LrRgNC10YHQtdC90YzQtV/Qv9C+0L3QtdC00LXQu9GM0L3QuNC6X9Cy0YLQvtGA0L3QuNC6X9GB0YDQtdC00YNf0YfQtdGC0LLQtdGA0LNf0L/Rj9GC0L3QuNGG0YNf0YHRg9Cx0LHQvtGC0YMnLnNwbGl0KCdfJyksXG4gICAgICAgICAgICBpc0Zvcm1hdDogL1xcWyA/W9CS0LJdID8oPzrQv9GA0L7RiNC70YPRjnzRgdC70LXQtNGD0Y7RidGD0Y580Y3RgtGDKT8gP1xcXSA/ZGRkZC9cbiAgICAgICAgfSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICfQstGBX9C/0L1f0LLRgl/RgdGAX9GH0YJf0L/Rgl/RgdCxJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICfQstGBX9C/0L1f0LLRgl/RgdGAX9GH0YJf0L/Rgl/RgdCxJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZSA6IG1vbnRoc1BhcnNlLFxuICAgICAgICBsb25nTW9udGhzUGFyc2UgOiBtb250aHNQYXJzZSxcbiAgICAgICAgc2hvcnRNb250aHNQYXJzZSA6IG1vbnRoc1BhcnNlLFxuXG4gICAgICAgIC8vINC/0L7Qu9C90YvQtSDQvdCw0LfQstCw0L3QuNGPINGBINC/0LDQtNC10LbQsNC80LgsINC/0L4g0YLRgNC4INCx0YPQutCy0YssINC00LvRjyDQvdC10LrQvtGC0L7RgNGL0YUsINC/0L4gNCDQsdGD0LrQstGLLCDRgdC+0LrRgNCw0YnQtdC90LjRjyDRgSDRgtC+0YfQutC+0Lkg0Lgg0LHQtdC3INGC0L7Rh9C60LhcbiAgICAgICAgbW9udGhzUmVnZXg6IC9eKNGP0L3QstCw0YBb0YzRj1180Y/QvdCyXFwuP3zRhNC10LLRgNCw0Ltb0YzRj1180YTQtdCy0YA/XFwuP3zQvNCw0YDRgtCwP3zQvNCw0YBcXC4/fNCw0L/RgNC10Ltb0YzRj1180LDQv9GAXFwuP3zQvNCwW9C50Y9dfNC40Y7QvVvRjNGPXXzQuNGO0L1cXC4/fNC40Y7Qu1vRjNGPXXzQuNGO0LtcXC4/fNCw0LLQs9GD0YHRgtCwP3zQsNCy0LNcXC4/fNGB0LXQvdGC0Y/QsdGAW9GM0Y9dfNGB0LXQvdGCP1xcLj980L7QutGC0Y/QsdGAW9GM0Y9dfNC+0LrRglxcLj980L3QvtGP0LHRgFvRjNGPXXzQvdC+0Y/QsT9cXC4/fNC00LXQutCw0LHRgFvRjNGPXXzQtNC10LpcXC4/KS9pLFxuXG4gICAgICAgIC8vINC60L7Qv9C40Y8g0L/RgNC10LTRi9C00YPRidC10LPQvlxuICAgICAgICBtb250aHNTaG9ydFJlZ2V4OiAvXijRj9C90LLQsNGAW9GM0Y9dfNGP0L3QslxcLj980YTQtdCy0YDQsNC7W9GM0Y9dfNGE0LXQstGAP1xcLj980LzQsNGA0YLQsD980LzQsNGAXFwuP3zQsNC/0YDQtdC7W9GM0Y9dfNCw0L/RgFxcLj980LzQsFvQudGPXXzQuNGO0L1b0YzRj1180LjRjtC9XFwuP3zQuNGO0Ltb0YzRj1180LjRjtC7XFwuP3zQsNCy0LPRg9GB0YLQsD980LDQstCzXFwuP3zRgdC10L3RgtGP0LHRgFvRjNGPXXzRgdC10L3Rgj9cXC4/fNC+0LrRgtGP0LHRgFvRjNGPXXzQvtC60YJcXC4/fNC90L7Rj9Cx0YBb0YzRj1180L3QvtGP0LE/XFwuP3zQtNC10LrQsNCx0YBb0YzRj1180LTQtdC6XFwuPykvaSxcblxuICAgICAgICAvLyDQv9C+0LvQvdGL0LUg0L3QsNC30LLQsNC90LjRjyDRgSDQv9Cw0LTQtdC20LDQvNC4XG4gICAgICAgIG1vbnRoc1N0cmljdFJlZ2V4OiAvXijRj9C90LLQsNGAW9GP0YxdfNGE0LXQstGA0LDQu1vRj9GMXXzQvNCw0YDRgtCwP3zQsNC/0YDQtdC7W9GP0YxdfNC80LBb0Y/QuV180LjRjtC9W9GP0YxdfNC40Y7Qu1vRj9GMXXzQsNCy0LPRg9GB0YLQsD980YHQtdC90YLRj9Cx0YBb0Y/RjF180L7QutGC0Y/QsdGAW9GP0YxdfNC90L7Rj9Cx0YBb0Y/RjF180LTQtdC60LDQsdGAW9GP0YxdKS9pLFxuXG4gICAgICAgIC8vINCS0YvRgNCw0LbQtdC90LjQtSwg0LrQvtGC0L7RgNC+0LUg0YHQvtC+0YLQstC10YHRgtCy0YPQtdGCINGC0L7Qu9GM0LrQviDRgdC+0LrRgNCw0YnRkdC90L3Ri9C8INGE0L7RgNC80LDQvFxuICAgICAgICBtb250aHNTaG9ydFN0cmljdFJlZ2V4OiAvXijRj9C90LJcXC580YTQtdCy0YA/XFwufNC80LDRgFvRgi5dfNCw0L/RgFxcLnzQvNCwW9GP0LldfNC40Y7QvVvRjNGPLl180LjRjtC7W9GM0Y8uXXzQsNCy0LNcXC580YHQtdC90YI/XFwufNC+0LrRglxcLnzQvdC+0Y/QsT9cXC580LTQtdC6XFwuKS9pLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QgTU1NTSBZWVlZINCzLicsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVkg0LMuLCBIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgRCBNTU1NIFlZWVkg0LMuLCBIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb0KHQtdCz0L7QtNC90Y8sINCyXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9CX0LDQstGC0YDQsCwg0LJdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb0JLRh9C10YDQsCwg0LJdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAobm93KSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vdy53ZWVrKCkgIT09IHRoaXMud2VlaygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CSINGB0LvQtdC00YPRjtGJ0LXQtV0gZGRkZCwgW9CyXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0JIg0YHQu9C10LTRg9GO0YnQuNC5XSBkZGRkLCBb0LJdIExUJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vQkiDRgdC70LXQtNGD0Y7RidGD0Y5dIGRkZGQsIFvQsl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF5KCkgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CS0L5dIGRkZGQsIFvQsl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0JJdIGRkZGQsIFvQsl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAobm93KSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vdy53ZWVrKCkgIT09IHRoaXMud2VlaygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CSINC/0YDQvtGI0LvQvtC1XSBkZGRkLCBb0LJdIExUJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vQkiDQv9GA0L7RiNC70YvQuV0gZGRkZCwgW9CyXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0JIg0L/RgNC+0YjQu9GD0Y5dIGRkZGQsIFvQsl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF5KCkgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CS0L5dIGRkZGQsIFvQsl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0JJdIGRkZGQsIFvQsl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ9GH0LXRgNC10LcgJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICclcyDQvdCw0LfQsNC0JyxcbiAgICAgICAgICAgIHMgOiAn0L3QtdGB0LrQvtC70YzQutC+INGB0LXQutGD0L3QtCcsXG4gICAgICAgICAgICBzcyA6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBtIDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIG1tIDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIGggOiAn0YfQsNGBJyxcbiAgICAgICAgICAgIGhoIDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIGQgOiAn0LTQtdC90YwnLFxuICAgICAgICAgICAgZGQgOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgTSA6ICfQvNC10YHRj9GGJyxcbiAgICAgICAgICAgIE1NIDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIHkgOiAn0LPQvtC0JyxcbiAgICAgICAgICAgIHl5IDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv0L3QvtGH0Lh80YPRgtGA0LB80LTQvdGPfNCy0LXRh9C10YDQsC9pLFxuICAgICAgICBpc1BNIDogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gL14o0LTQvdGPfNCy0LXRh9C10YDQsCkkLy50ZXN0KGlucHV0KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW0gOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9C90L7Rh9C4JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfRg9GC0YDQsCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0LTQvdGPJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfQstC10YfQtdGA0LAnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0tKNC5fNCz0L580Y8pLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdC5JztcbiAgICAgICAgICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0LPQvic7XG4gICAgICAgICAgICAgICAgY2FzZSAndyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnVyc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdGPJztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA0ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBydTtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///61\n")},62:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n                'ss': 'secunde',\n                'mm': 'minute',\n                'hh': 'ore',\n                'dd': 'zile',\n                'MM': 'luni',\n                'yy': 'ani'\n            },\n            separator = ' ';\n        if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {\n            separator = ' de ';\n        }\n        return number + separator + format[key];\n    }\n\n    var ro = moment.defineLocale('ro', {\n        months : 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split('_'),\n        monthsShort : 'ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),\n        weekdaysShort : 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),\n        weekdaysMin : 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY H:mm',\n            LLLL : 'dddd, D MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay: '[azi la] LT',\n            nextDay: '[mâine la] LT',\n            nextWeek: 'dddd [la] LT',\n            lastDay: '[ieri la] LT',\n            lastWeek: '[fosta] dddd [la] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'peste %s',\n            past : '%s în urmă',\n            s : 'câteva secunde',\n            ss : relativeTimeWithPlural,\n            m : 'un minut',\n            mm : relativeTimeWithPlural,\n            h : 'o oră',\n            hh : relativeTimeWithPlural,\n            d : 'o zi',\n            dd : relativeTimeWithPlural,\n            M : 'o lună',\n            MM : relativeTimeWithPlural,\n            y : 'un an',\n            yy : relativeTimeWithPlural\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return ro;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9yby5qcz85NzJjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiI2Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lV2l0aFBsdXJhbChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSkge1xuICAgICAgICB2YXIgZm9ybWF0ID0ge1xuICAgICAgICAgICAgICAgICdzcyc6ICdzZWN1bmRlJyxcbiAgICAgICAgICAgICAgICAnbW0nOiAnbWludXRlJyxcbiAgICAgICAgICAgICAgICAnaGgnOiAnb3JlJyxcbiAgICAgICAgICAgICAgICAnZGQnOiAnemlsZScsXG4gICAgICAgICAgICAgICAgJ01NJzogJ2x1bmknLFxuICAgICAgICAgICAgICAgICd5eSc6ICdhbmknXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2VwYXJhdG9yID0gJyAnO1xuICAgICAgICBpZiAobnVtYmVyICUgMTAwID49IDIwIHx8IChudW1iZXIgPj0gMTAwICYmIG51bWJlciAlIDEwMCA9PT0gMCkpIHtcbiAgICAgICAgICAgIHNlcGFyYXRvciA9ICcgZGUgJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVtYmVyICsgc2VwYXJhdG9yICsgZm9ybWF0W2tleV07XG4gICAgfVxuXG4gICAgdmFyIHJvID0gbW9tZW50LmRlZmluZUxvY2FsZSgncm8nLCB7XG4gICAgICAgIG1vbnRocyA6ICdpYW51YXJpZV9mZWJydWFyaWVfbWFydGllX2FwcmlsaWVfbWFpX2l1bmllX2l1bGllX2F1Z3VzdF9zZXB0ZW1icmllX29jdG9tYnJpZV9ub2llbWJyaWVfZGVjZW1icmllJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICdpYW4uX2ZlYnIuX21hcnQuX2Fwci5fbWFpX2l1bi5faXVsLl9hdWcuX3NlcHQuX29jdC5fbm92Ll9kZWMuJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5cyA6ICdkdW1pbmljxINfbHVuaV9tYXLIm2lfbWllcmN1cmlfam9pX3ZpbmVyaV9zw6JtYsSDdMSDJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ0R1bV9MdW5fTWFyX01pZV9Kb2lfVmluX1PDom0nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ0R1X0x1X01hX01pX0pvX1ZpX1PDoicuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQsIEQgTU1NTSBZWVlZIEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheTogJ1themkgbGFdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbbcOiaW5lIGxhXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2xhXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2llcmkgbGFdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW2Zvc3RhXSBkZGRkIFtsYV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAncGVzdGUgJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICclcyDDrm4gdXJtxIMnLFxuICAgICAgICAgICAgcyA6ICdjw6J0ZXZhIHNlY3VuZGUnLFxuICAgICAgICAgICAgc3MgOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgbSA6ICd1biBtaW51dCcsXG4gICAgICAgICAgICBtbSA6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBoIDogJ28gb3LEgycsXG4gICAgICAgICAgICBoaCA6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBkIDogJ28gemknLFxuICAgICAgICAgICAgZGQgOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgTSA6ICdvIGx1bsSDJyxcbiAgICAgICAgICAgIE1NIDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIHkgOiAndW4gYW4nLFxuICAgICAgICAgICAgeXkgOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDcgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDFzdCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJvO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///62\n")},63:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var ptBr = moment.defineLocale('pt-br', {\n        months : 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split('_'),\n        monthsShort : 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),\n        weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),\n        weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n        weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D [de] MMMM [de] YYYY',\n            LLL : 'D [de] MMMM [de] YYYY [às] HH:mm',\n            LLLL : 'dddd, D [de] MMMM [de] YYYY [às] HH:mm'\n        },\n        calendar : {\n            sameDay: '[Hoje às] LT',\n            nextDay: '[Amanhã às] LT',\n            nextWeek: 'dddd [às] LT',\n            lastDay: '[Ontem às] LT',\n            lastWeek: function () {\n                return (this.day() === 0 || this.day() === 6) ?\n                    '[Último] dddd [às] LT' : // Saturday + Sunday\n                    '[Última] dddd [às] LT'; // Monday - Friday\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'em %s',\n            past : 'há %s',\n            s : 'poucos segundos',\n            ss : '%d segundos',\n            m : 'um minuto',\n            mm : '%d minutos',\n            h : 'uma hora',\n            hh : '%d horas',\n            d : 'um dia',\n            dd : '%d dias',\n            M : 'um mês',\n            MM : '%d meses',\n            y : 'um ano',\n            yy : '%d anos'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal : '%dº'\n    });\n\n    return ptBr;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9wdC1ici5qcz9kMmQ0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEM7QUFDNUMsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiI2My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIHB0QnIgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdwdC1icicsIHtcbiAgICAgICAgbW9udGhzIDogJ2phbmVpcm9fZmV2ZXJlaXJvX21hcsOnb19hYnJpbF9tYWlvX2p1bmhvX2p1bGhvX2Fnb3N0b19zZXRlbWJyb19vdXR1YnJvX25vdmVtYnJvX2RlemVtYnJvJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICdqYW5fZmV2X21hcl9hYnJfbWFpX2p1bl9qdWxfYWdvX3NldF9vdXRfbm92X2Rleicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXMgOiAnRG9taW5nb19TZWd1bmRhLWZlaXJhX1RlcsOnYS1mZWlyYV9RdWFydGEtZmVpcmFfUXVpbnRhLWZlaXJhX1NleHRhLWZlaXJhX1PDoWJhZG8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAnRG9tX1NlZ19UZXJfUXVhX1F1aV9TZXhfU8OhYicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAnRG9fMsKqXzPCql80wqpfNcKqXzbCql9Tw6EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdCA6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgW2RlXSBNTU1NIFtkZV0gWVlZWSBbw6BzXSBISDptbScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBbw6BzXSBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0hvamUgw6BzXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0FtYW5ow6Mgw6BzXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW8Ogc10gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tPbnRlbSDDoHNdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLmRheSgpID09PSAwIHx8IHRoaXMuZGF5KCkgPT09IDYpID9cbiAgICAgICAgICAgICAgICAgICAgJ1vDmmx0aW1vXSBkZGRkIFvDoHNdIExUJyA6IC8vIFNhdHVyZGF5ICsgU3VuZGF5XG4gICAgICAgICAgICAgICAgICAgICdbw5psdGltYV0gZGRkZCBbw6BzXSBMVCc7IC8vIE1vbmRheSAtIEZyaWRheVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ2VtICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAnaMOhICVzJyxcbiAgICAgICAgICAgIHMgOiAncG91Y29zIHNlZ3VuZG9zJyxcbiAgICAgICAgICAgIHNzIDogJyVkIHNlZ3VuZG9zJyxcbiAgICAgICAgICAgIG0gOiAndW0gbWludXRvJyxcbiAgICAgICAgICAgIG1tIDogJyVkIG1pbnV0b3MnLFxuICAgICAgICAgICAgaCA6ICd1bWEgaG9yYScsXG4gICAgICAgICAgICBoaCA6ICclZCBob3JhcycsXG4gICAgICAgICAgICBkIDogJ3VtIGRpYScsXG4gICAgICAgICAgICBkZCA6ICclZCBkaWFzJyxcbiAgICAgICAgICAgIE0gOiAndW0gbcOqcycsXG4gICAgICAgICAgICBNTSA6ICclZCBtZXNlcycsXG4gICAgICAgICAgICB5IDogJ3VtIGFubycsXG4gICAgICAgICAgICB5eSA6ICclZCBhbm9zJ1xuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3Cui8sXG4gICAgICAgIG9yZGluYWwgOiAnJWTCuidcbiAgICB9KTtcblxuICAgIHJldHVybiBwdEJyO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///63\n")},64:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var pt = moment.defineLocale('pt', {\n        months : 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split('_'),\n        monthsShort : 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),\n        weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),\n        weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n        weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D [de] MMMM [de] YYYY',\n            LLL : 'D [de] MMMM [de] YYYY HH:mm',\n            LLLL : 'dddd, D [de] MMMM [de] YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Hoje às] LT',\n            nextDay: '[Amanhã às] LT',\n            nextWeek: 'dddd [às] LT',\n            lastDay: '[Ontem às] LT',\n            lastWeek: function () {\n                return (this.day() === 0 || this.day() === 6) ?\n                    '[Último] dddd [às] LT' : // Saturday + Sunday\n                    '[Última] dddd [às] LT'; // Monday - Friday\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'em %s',\n            past : 'há %s',\n            s : 'segundos',\n            ss : '%d segundos',\n            m : 'um minuto',\n            mm : '%d minutos',\n            h : 'uma hora',\n            hh : '%d horas',\n            d : 'um dia',\n            dd : '%d dias',\n            M : 'um mês',\n            MM : '%d meses',\n            y : 'um ano',\n            yy : '%d anos'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal : '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return pt;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9wdC5qcz9mMjYwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEM7QUFDNUMsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwiZmlsZSI6IjY0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgcHQgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdwdCcsIHtcbiAgICAgICAgbW9udGhzIDogJ2phbmVpcm9fZmV2ZXJlaXJvX21hcsOnb19hYnJpbF9tYWlvX2p1bmhvX2p1bGhvX2Fnb3N0b19zZXRlbWJyb19vdXR1YnJvX25vdmVtYnJvX2RlemVtYnJvJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICdqYW5fZmV2X21hcl9hYnJfbWFpX2p1bl9qdWxfYWdvX3NldF9vdXRfbm92X2Rleicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXMgOiAnRG9taW5nb19TZWd1bmRhLWZlaXJhX1RlcsOnYS1mZWlyYV9RdWFydGEtZmVpcmFfUXVpbnRhLWZlaXJhX1NleHRhLWZlaXJhX1PDoWJhZG8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAnRG9tX1NlZ19UZXJfUXVhX1F1aV9TZXhfU8OhYicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAnRG9fMsKqXzPCql80wqpfNcKqXzbCql9Tw6EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdCA6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgW2RlXSBNTU1NIFtkZV0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0hvamUgw6BzXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0FtYW5ow6Mgw6BzXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW8Ogc10gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tPbnRlbSDDoHNdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLmRheSgpID09PSAwIHx8IHRoaXMuZGF5KCkgPT09IDYpID9cbiAgICAgICAgICAgICAgICAgICAgJ1vDmmx0aW1vXSBkZGRkIFvDoHNdIExUJyA6IC8vIFNhdHVyZGF5ICsgU3VuZGF5XG4gICAgICAgICAgICAgICAgICAgICdbw5psdGltYV0gZGRkZCBbw6BzXSBMVCc7IC8vIE1vbmRheSAtIEZyaWRheVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ2VtICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAnaMOhICVzJyxcbiAgICAgICAgICAgIHMgOiAnc2VndW5kb3MnLFxuICAgICAgICAgICAgc3MgOiAnJWQgc2VndW5kb3MnLFxuICAgICAgICAgICAgbSA6ICd1bSBtaW51dG8nLFxuICAgICAgICAgICAgbW0gOiAnJWQgbWludXRvcycsXG4gICAgICAgICAgICBoIDogJ3VtYSBob3JhJyxcbiAgICAgICAgICAgIGhoIDogJyVkIGhvcmFzJyxcbiAgICAgICAgICAgIGQgOiAndW0gZGlhJyxcbiAgICAgICAgICAgIGRkIDogJyVkIGRpYXMnLFxuICAgICAgICAgICAgTSA6ICd1bSBtw6pzJyxcbiAgICAgICAgICAgIE1NIDogJyVkIG1lc2VzJyxcbiAgICAgICAgICAgIHkgOiAndW0gYW5vJyxcbiAgICAgICAgICAgIHl5IDogJyVkIGFub3MnXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfcK6LyxcbiAgICAgICAgb3JkaW5hbCA6ICclZMK6JyxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNCAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcHQ7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///64\n")},65:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split('_'),\n        monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split('_');\n    function plural(n) {\n        return (n % 10 < 5) && (n % 10 > 1) && ((~~(n / 10) % 10) !== 1);\n    }\n    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                return result + (plural(number) ? 'sekundy' : 'sekund');\n            case 'm':\n                return withoutSuffix ? 'minuta' : 'minutę';\n            case 'mm':\n                return result + (plural(number) ? 'minuty' : 'minut');\n            case 'h':\n                return withoutSuffix  ? 'godzina'  : 'godzinę';\n            case 'hh':\n                return result + (plural(number) ? 'godziny' : 'godzin');\n            case 'MM':\n                return result + (plural(number) ? 'miesiące' : 'miesięcy');\n            case 'yy':\n                return result + (plural(number) ? 'lata' : 'lat');\n        }\n    }\n\n    var pl = moment.defineLocale('pl', {\n        months : function (momentToFormat, format) {\n            if (!momentToFormat) {\n                return monthsNominative;\n            } else if (format === '') {\n                // Hack: if format empty we know this is used to generate\n                // RegExp by moment. Give then back both valid forms of months\n                // in RegExp ready format.\n                return '(' + monthsSubjective[momentToFormat.month()] + '|' + monthsNominative[momentToFormat.month()] + ')';\n            } else if (/D MMMM/.test(format)) {\n                return monthsSubjective[momentToFormat.month()];\n            } else {\n                return monthsNominative[momentToFormat.month()];\n            }\n        },\n        monthsShort : 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),\n        weekdays : 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'),\n        weekdaysShort : 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),\n        weekdaysMin : 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Dziś o] LT',\n            nextDay: '[Jutro o] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[W niedzielę o] LT';\n\n                    case 2:\n                        return '[We wtorek o] LT';\n\n                    case 3:\n                        return '[W środę o] LT';\n\n                    case 6:\n                        return '[W sobotę o] LT';\n\n                    default:\n                        return '[W] dddd [o] LT';\n                }\n            },\n            lastDay: '[Wczoraj o] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[W zeszłą niedzielę o] LT';\n                    case 3:\n                        return '[W zeszłą środę o] LT';\n                    case 6:\n                        return '[W zeszłą sobotę o] LT';\n                    default:\n                        return '[W zeszły] dddd [o] LT';\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past : '%s temu',\n            s : 'kilka sekund',\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : translate,\n            hh : translate,\n            d : '1 dzień',\n            dd : '%d dni',\n            M : 'miesiąc',\n            MM : translate,\n            y : 'rok',\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return pl;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9wbC5qcz84ZDU3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiNjUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBtb250aHNOb21pbmF0aXZlID0gJ3N0eWN6ZcWEX2x1dHlfbWFyemVjX2t3aWVjaWXFhF9tYWpfY3plcndpZWNfbGlwaWVjX3NpZXJwaWXFhF93cnplc2llxYRfcGHFumR6aWVybmlrX2xpc3RvcGFkX2dydWR6aWXFhCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU3ViamVjdGl2ZSA9ICdzdHljem5pYV9sdXRlZ29fbWFyY2Ffa3dpZXRuaWFfbWFqYV9jemVyd2NhX2xpcGNhX3NpZXJwbmlhX3dyemXFm25pYV9wYcW6ZHppZXJuaWthX2xpc3RvcGFkYV9ncnVkbmlhJy5zcGxpdCgnXycpO1xuICAgIGZ1bmN0aW9uIHBsdXJhbChuKSB7XG4gICAgICAgIHJldHVybiAobiAlIDEwIDwgNSkgJiYgKG4gJSAxMCA+IDEpICYmICgofn4obiAvIDEwKSAlIDEwKSAhPT0gMSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gbnVtYmVyICsgJyAnO1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAnc3MnOlxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnc2VrdW5keScgOiAnc2VrdW5kJyk7XG4gICAgICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdtaW51dGEnIDogJ21pbnV0xJknO1xuICAgICAgICAgICAgY2FzZSAnbW0nOlxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnbWludXR5JyA6ICdtaW51dCcpO1xuICAgICAgICAgICAgY2FzZSAnaCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggID8gJ2dvZHppbmEnICA6ICdnb2R6aW7EmSc7XG4gICAgICAgICAgICBjYXNlICdoaCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdnb2R6aW55JyA6ICdnb2R6aW4nKTtcbiAgICAgICAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ21pZXNpxIVjZScgOiAnbWllc2nEmWN5Jyk7XG4gICAgICAgICAgICBjYXNlICd5eSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdsYXRhJyA6ICdsYXQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBwbCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3BsJywge1xuICAgICAgICBtb250aHMgOiBmdW5jdGlvbiAobW9tZW50VG9Gb3JtYXQsIGZvcm1hdCkge1xuICAgICAgICAgICAgaWYgKCFtb21lbnRUb0Zvcm1hdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNOb21pbmF0aXZlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgLy8gSGFjazogaWYgZm9ybWF0IGVtcHR5IHdlIGtub3cgdGhpcyBpcyB1c2VkIHRvIGdlbmVyYXRlXG4gICAgICAgICAgICAgICAgLy8gUmVnRXhwIGJ5IG1vbWVudC4gR2l2ZSB0aGVuIGJhY2sgYm90aCB2YWxpZCBmb3JtcyBvZiBtb250aHNcbiAgICAgICAgICAgICAgICAvLyBpbiBSZWdFeHAgcmVhZHkgZm9ybWF0LlxuICAgICAgICAgICAgICAgIHJldHVybiAnKCcgKyBtb250aHNTdWJqZWN0aXZlW21vbWVudFRvRm9ybWF0Lm1vbnRoKCldICsgJ3wnICsgbW9udGhzTm9taW5hdGl2ZVttb21lbnRUb0Zvcm1hdC5tb250aCgpXSArICcpJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoL0QgTU1NTS8udGVzdChmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1N1YmplY3RpdmVbbW9tZW50VG9Gb3JtYXQubW9udGgoKV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNOb21pbmF0aXZlW21vbWVudFRvRm9ybWF0Lm1vbnRoKCldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtb250aHNTaG9ydCA6ICdzdHlfbHV0X21hcl9rd2lfbWFqX2N6ZV9saXBfc2llX3dyel9wYcW6X2xpc19ncnUnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzIDogJ25pZWR6aWVsYV9wb25pZWR6aWHFgmVrX3d0b3Jla1/Fm3JvZGFfY3p3YXJ0ZWtfcGnEhXRla19zb2JvdGEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAnbmR6X3Bvbl93dF/Fm3JfY3p3X3B0X3NvYicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAnTmRfUG5fV3RfxZpyX0N6X1B0X1NvJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tEemnFmyBvXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0p1dHJvIG9dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW1cgbmllZHppZWzEmSBvXSBMVCc7XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbV2Ugd3RvcmVrIG9dIExUJztcblxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1tXIMWbcm9kxJkgb10gTFQnO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW1cgc29ib3TEmSBvXSBMVCc7XG5cbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW1ddIGRkZGQgW29dIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheTogJ1tXY3pvcmFqIG9dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW1cgemVzesWCxIUgbmllZHppZWzEmSBvXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW1cgemVzesWCxIUgxZtyb2TEmSBvXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW1cgemVzesWCxIUgc29ib3TEmSBvXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1tXIHplc3rFgnldIGRkZGQgW29dIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnemEgJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICclcyB0ZW11JyxcbiAgICAgICAgICAgIHMgOiAna2lsa2Egc2VrdW5kJyxcbiAgICAgICAgICAgIHNzIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbSA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1tIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaCA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGhoIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZCA6ICcxIGR6aWXFhCcsXG4gICAgICAgICAgICBkZCA6ICclZCBkbmknLFxuICAgICAgICAgICAgTSA6ICdtaWVzacSFYycsXG4gICAgICAgICAgICBNTSA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHkgOiAncm9rJyxcbiAgICAgICAgICAgIHl5IDogdHJhbnNsYXRlXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWwgOiAnJWQuJyxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNCAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcGw7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///65\n")},66:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '੧',\n        '2': '੨',\n        '3': '੩',\n        '4': '੪',\n        '5': '੫',\n        '6': '੬',\n        '7': '੭',\n        '8': '੮',\n        '9': '੯',\n        '0': '੦'\n    },\n    numberMap = {\n        '੧': '1',\n        '੨': '2',\n        '੩': '3',\n        '੪': '4',\n        '੫': '5',\n        '੬': '6',\n        '੭': '7',\n        '੮': '8',\n        '੯': '9',\n        '੦': '0'\n    };\n\n    var paIn = moment.defineLocale('pa-in', {\n        // There are months name as per Nanakshahi Calender but they are not used as rigidly in modern Punjabi.\n        months : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),\n        monthsShort : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),\n        weekdays : 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split('_'),\n        weekdaysShort : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n        weekdaysMin : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm ਵਜੇ',\n            LTS : 'A h:mm:ss ਵਜੇ',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm ਵਜੇ',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm ਵਜੇ'\n        },\n        calendar : {\n            sameDay : '[ਅਜ] LT',\n            nextDay : '[ਕਲ] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[ਕਲ] LT',\n            lastWeek : '[ਪਿਛਲੇ] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s ਵਿੱਚ',\n            past : '%s ਪਿਛਲੇ',\n            s : 'ਕੁਝ ਸਕਿੰਟ',\n            ss : '%d ਸਕਿੰਟ',\n            m : 'ਇਕ ਮਿੰਟ',\n            mm : '%d ਮਿੰਟ',\n            h : 'ਇੱਕ ਘੰਟਾ',\n            hh : '%d ਘੰਟੇ',\n            d : 'ਇੱਕ ਦਿਨ',\n            dd : '%d ਦਿਨ',\n            M : 'ਇੱਕ ਮਹੀਨਾ',\n            MM : '%d ਮਹੀਨੇ',\n            y : 'ਇੱਕ ਸਾਲ',\n            yy : '%d ਸਾਲ'\n        },\n        preparse: function (string) {\n            return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // Punjabi notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.\n        meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ਰਾਤ') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ਸਵੇਰ') {\n                return hour;\n            } else if (meridiem === 'ਦੁਪਹਿਰ') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'ਸ਼ਾਮ') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ਰਾਤ';\n            } else if (hour < 10) {\n                return 'ਸਵੇਰ';\n            } else if (hour < 17) {\n                return 'ਦੁਪਹਿਰ';\n            } else if (hour < 20) {\n                return 'ਸ਼ਾਮ';\n            } else {\n                return 'ਰਾਤ';\n            }\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return paIn;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9wYS1pbi5qcz9mM2ZmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiNjYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICcxJzogJ+CppycsXG4gICAgICAgICcyJzogJ+CpqCcsXG4gICAgICAgICczJzogJ+CpqScsXG4gICAgICAgICc0JzogJ+CpqicsXG4gICAgICAgICc1JzogJ+CpqycsXG4gICAgICAgICc2JzogJ+CprCcsXG4gICAgICAgICc3JzogJ+CprScsXG4gICAgICAgICc4JzogJ+CpricsXG4gICAgICAgICc5JzogJ+CprycsXG4gICAgICAgICcwJzogJ+CppidcbiAgICB9LFxuICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgJ+Cppyc6ICcxJyxcbiAgICAgICAgJ+CpqCc6ICcyJyxcbiAgICAgICAgJ+CpqSc6ICczJyxcbiAgICAgICAgJ+Cpqic6ICc0JyxcbiAgICAgICAgJ+Cpqyc6ICc1JyxcbiAgICAgICAgJ+CprCc6ICc2JyxcbiAgICAgICAgJ+CprSc6ICc3JyxcbiAgICAgICAgJ+Cpric6ICc4JyxcbiAgICAgICAgJ+Cpryc6ICc5JyxcbiAgICAgICAgJ+Cppic6ICcwJ1xuICAgIH07XG5cbiAgICB2YXIgcGFJbiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3BhLWluJywge1xuICAgICAgICAvLyBUaGVyZSBhcmUgbW9udGhzIG5hbWUgYXMgcGVyIE5hbmFrc2hhaGkgQ2FsZW5kZXIgYnV0IHRoZXkgYXJlIG5vdCB1c2VkIGFzIHJpZ2lkbHkgaW4gbW9kZXJuIFB1bmphYmkuXG4gICAgICAgIG1vbnRocyA6ICfgqJzgqKjgqLXgqLDgqYBf4Kir4Ki84Kiw4Ki14Kiw4KmAX+CoruCovuCosOComl/gqIXgqKrgqY3gqLDgqYjgqLJf4Kiu4KiIX+ConOCpguCoqF/gqJzgqYHgqLLgqL7gqIhf4KiF4KiX4Ki44KikX+CouOCopOCpsOCorOCosF/gqIXgqJXgqKTgqYLgqKzgqLBf4Kio4Ki14Kmw4Kis4KiwX+CopuCouOCpsOCorOCosCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAn4Kic4Kio4Ki14Kiw4KmAX+Coq+CovOCosOCoteCosOCpgF/gqK7gqL7gqLDgqJpf4KiF4Kiq4KmN4Kiw4KmI4KiyX+CoruCoiF/gqJzgqYLgqKhf4Kic4KmB4Kiy4Ki+4KiIX+CoheCol+CouOCopF/gqLjgqKTgqbDgqKzgqLBf4KiF4KiV4Kik4KmC4Kis4KiwX+CoqOCoteCpsOCorOCosF/gqKbgqLjgqbDgqKzgqLAnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzIDogJ+CokOCopOCoteCovuCosF/gqLjgqYvgqK7gqLXgqL7gqLBf4Kiu4Kmw4KiX4Kiy4Ki14Ki+4KiwX+CorOCpgeCop+CoteCovuCosF/gqLXgqYDgqLDgqLXgqL7gqLBf4Ki44Ki84KmB4Kmx4KiV4Kiw4Ki14Ki+4KiwX+CouOCovOCoqOCpgOComuCosOCoteCovuCosCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICfgqJDgqKRf4Ki44KmL4KiuX+CoruCpsOCol+Cosl/gqKzgqYHgqKdf4Ki14KmA4KiwX+CouOCovOCpgeColeCosF/gqLjgqLzgqKjgqYAnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ+CokOCopF/gqLjgqYvgqK5f4Kiu4Kmw4KiX4KiyX+CorOCpgeCop1/gqLXgqYDgqLBf4Ki44Ki84KmB4KiV4KiwX+CouOCovOCoqOCpgCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdBIGg6bW0g4Ki14Kic4KmHJyxcbiAgICAgICAgICAgIExUUyA6ICdBIGg6bW06c3Mg4Ki14Kic4KmHJyxcbiAgICAgICAgICAgIEwgOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVksIEEgaDptbSDgqLXgqJzgqYcnLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIOCoteConOCphydcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1vgqIXgqJxdIExUJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW+ColeCosl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnZGRkZCwgTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdb4KiV4KiyXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlayA6ICdb4Kiq4Ki/4Kib4Kiy4KmHXSBkZGRkLCBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnJXMg4Ki14Ki/4Kmx4KiaJyxcbiAgICAgICAgICAgIHBhc3QgOiAnJXMg4Kiq4Ki/4Kib4Kiy4KmHJyxcbiAgICAgICAgICAgIHMgOiAn4KiV4KmB4KidIOCouOColeCov+CpsOConycsXG4gICAgICAgICAgICBzcyA6ICclZCDgqLjgqJXgqL/gqbDgqJ8nLFxuICAgICAgICAgICAgbSA6ICfgqIfgqJUg4Kiu4Ki/4Kmw4KifJyxcbiAgICAgICAgICAgIG1tIDogJyVkIOCoruCov+CpsOConycsXG4gICAgICAgICAgICBoIDogJ+Coh+CpseColSDgqJjgqbDgqJ/gqL4nLFxuICAgICAgICAgICAgaGggOiAnJWQg4KiY4Kmw4Kif4KmHJyxcbiAgICAgICAgICAgIGQgOiAn4KiH4Kmx4KiVIOCopuCov+CoqCcsXG4gICAgICAgICAgICBkZCA6ICclZCDgqKbgqL/gqKgnLFxuICAgICAgICAgICAgTSA6ICfgqIfgqbHgqJUg4Kiu4Ki54KmA4Kio4Ki+JyxcbiAgICAgICAgICAgIE1NIDogJyVkIOCoruCoueCpgOCoqOCphycsXG4gICAgICAgICAgICB5IDogJ+Coh+CpseColSDgqLjgqL7gqLInLFxuICAgICAgICAgICAgeXkgOiAnJWQg4Ki44Ki+4KiyJ1xuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b4Kmn4Kmo4Kmp4Kmq4Kmr4Kms4Kmt4Kmu4Kmv4KmmXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICAvLyBQdW5qYWJpIG5vdGF0aW9uIGZvciBtZXJpZGllbXMgYXJlIHF1aXRlIGZ1enp5IGluIHByYWN0aWNlLiBXaGlsZSB0aGVyZSBleGlzdHNcbiAgICAgICAgLy8gYSByaWdpZCBub3Rpb24gb2YgYSAnUGFoYXInIGl0IGlzIG5vdCB1c2VkIGFzIHJpZ2lkbHkgaW4gbW9kZXJuIFB1bmphYmkuXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/gqLDgqL7gqKR84Ki44Ki14KmH4KiwfOCopuCpgeCoquCoueCov+CosHzgqLjgqLzgqL7gqK4vLFxuICAgICAgICBtZXJpZGllbUhvdXIgOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn4Kiw4Ki+4KikJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyIDwgNCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4Ki44Ki14KmH4KiwJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CopuCpgeCoquCoueCov+CosCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4Ki44Ki84Ki+4KiuJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtIDogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgqLDgqL7gqKQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CouOCoteCph+CosCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Kim4KmB4Kiq4Ki54Ki/4KiwJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgqLjgqLzgqL7gqK4nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CosOCovuCopCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDYgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDFzdCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHBhSW47XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///66\n")},67:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var nn = moment.defineLocale('nn', {\n        months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n        weekdays : 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),\n        weekdaysShort : 'sun_mån_tys_ons_tor_fre_lau'.split('_'),\n        weekdaysMin : 'su_må_ty_on_to_fr_lø'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY [kl.] H:mm',\n            LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'\n        },\n        calendar : {\n            sameDay: '[I dag klokka] LT',\n            nextDay: '[I morgon klokka] LT',\n            nextWeek: 'dddd [klokka] LT',\n            lastDay: '[I går klokka] LT',\n            lastWeek: '[Føregåande] dddd [klokka] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'om %s',\n            past : '%s sidan',\n            s : 'nokre sekund',\n            ss : '%d sekund',\n            m : 'eit minutt',\n            mm : '%d minutt',\n            h : 'ein time',\n            hh : '%d timar',\n            d : 'ein dag',\n            dd : '%d dagar',\n            M : 'ein månad',\n            MM : '%d månader',\n            y : 'eit år',\n            yy : '%d år'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return nn;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ubi5qcz9iODRjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiI2Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIG5uID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbm4nLCB7XG4gICAgICAgIG1vbnRocyA6ICdqYW51YXJfZmVicnVhcl9tYXJzX2FwcmlsX21haV9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2Rlc2VtYmVyJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICdqYW5fZmViX21hcl9hcHJfbWFpX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2Rlcycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXMgOiAnc3VuZGFnX23DpW5kYWdfdHlzZGFnX29uc2RhZ190b3JzZGFnX2ZyZWRhZ19sYXVyZGFnJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ3N1bl9tw6VuX3R5c19vbnNfdG9yX2ZyZV9sYXUnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ3N1X23DpV90eV9vbl90b19mcl9sw7gnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QuIE1NTU0gWVlZWSBba2wuXSBIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCBELiBNTU1NIFlZWVkgW2tsLl0gSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tJIGRhZyBrbG9ra2FdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbSSBtb3Jnb24ga2xva2thXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2tsb2trYV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tJIGfDpXIga2xva2thXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tGw7hyZWfDpWFuZGVdIGRkZGQgW2tsb2trYV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnb20gJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICclcyBzaWRhbicsXG4gICAgICAgICAgICBzIDogJ25va3JlIHNla3VuZCcsXG4gICAgICAgICAgICBzcyA6ICclZCBzZWt1bmQnLFxuICAgICAgICAgICAgbSA6ICdlaXQgbWludXR0JyxcbiAgICAgICAgICAgIG1tIDogJyVkIG1pbnV0dCcsXG4gICAgICAgICAgICBoIDogJ2VpbiB0aW1lJyxcbiAgICAgICAgICAgIGhoIDogJyVkIHRpbWFyJyxcbiAgICAgICAgICAgIGQgOiAnZWluIGRhZycsXG4gICAgICAgICAgICBkZCA6ICclZCBkYWdhcicsXG4gICAgICAgICAgICBNIDogJ2VpbiBtw6VuYWQnLFxuICAgICAgICAgICAgTU0gOiAnJWQgbcOlbmFkZXInLFxuICAgICAgICAgICAgeSA6ICdlaXQgw6VyJyxcbiAgICAgICAgICAgIHl5IDogJyVkIMOlcidcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbCA6ICclZC4nLFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA0ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBubjtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///67\n")},68:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n        monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');\n\n    var monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];\n    var monthsRegex = /^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n    var nlBe = moment.defineLocale('nl-be', {\n        months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),\n        monthsShort : function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: /^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,\n        monthsShortStrictRegex: /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n        monthsParse : monthsParse,\n        longMonthsParse : monthsParse,\n        shortMonthsParse : monthsParse,\n\n        weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n        weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),\n        weekdaysMin : 'zo_ma_di_wo_do_vr_za'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[vandaag om] LT',\n            nextDay: '[morgen om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[gisteren om] LT',\n            lastWeek: '[afgelopen] dddd [om] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'over %s',\n            past : '%s geleden',\n            s : 'een paar seconden',\n            ss : '%d seconden',\n            m : 'één minuut',\n            mm : '%d minuten',\n            h : 'één uur',\n            hh : '%d uur',\n            d : 'één dag',\n            dd : '%d dagen',\n            M : 'één maand',\n            MM : '%d maanden',\n            y : 'één jaar',\n            yy : '%d jaar'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal : function (number) {\n            return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return nlBe;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ubC1iZS5qcz9kYjI5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiI2OC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIG1vbnRoc1Nob3J0V2l0aERvdHMgPSAnamFuLl9mZWIuX21ydC5fYXByLl9tZWlfanVuLl9qdWwuX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVjLicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnRXaXRob3V0RG90cyA9ICdqYW5fZmViX21ydF9hcHJfbWVpX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlYycuc3BsaXQoJ18nKTtcblxuICAgIHZhciBtb250aHNQYXJzZSA9IFsvXmphbi9pLCAvXmZlYi9pLCAvXm1hYXJ0fG1ydC4/JC9pLCAvXmFwci9pLCAvXm1laSQvaSwgL15qdW5baS5dPyQvaSwgL15qdWxbaS5dPyQvaSwgL15hdWcvaSwgL15zZXAvaSwgL15va3QvaSwgL15ub3YvaSwgL15kZWMvaV07XG4gICAgdmFyIG1vbnRoc1JlZ2V4ID0gL14oamFudWFyaXxmZWJydWFyaXxtYWFydHxhcHJpbHxtZWl8YXByaWx8anVbbmxdaXxhdWd1c3R1c3xzZXB0ZW1iZXJ8b2t0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcnxqYW5cXC4/fGZlYlxcLj98bXJ0XFwuP3xhcHJcXC4/fGp1W25sXVxcLj98YXVnXFwuP3xzZXBcXC4/fG9rdFxcLj98bm92XFwuP3xkZWNcXC4/KS9pO1xuXG4gICAgdmFyIG5sQmUgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdubC1iZScsIHtcbiAgICAgICAgbW9udGhzIDogJ2phbnVhcmlfZmVicnVhcmlfbWFhcnRfYXByaWxfbWVpX2p1bmlfanVsaV9hdWd1c3R1c19zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZWNlbWJlcicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiBmdW5jdGlvbiAobSwgZm9ybWF0KSB7XG4gICAgICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnRXaXRoRG90cztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoLy1NTU0tLy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnRXaXRob3V0RG90c1ttLm1vbnRoKCldO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnRXaXRoRG90c1ttLm1vbnRoKCldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIG1vbnRoc1JlZ2V4OiBtb250aHNSZWdleCxcbiAgICAgICAgbW9udGhzU2hvcnRSZWdleDogbW9udGhzUmVnZXgsXG4gICAgICAgIG1vbnRoc1N0cmljdFJlZ2V4OiAvXihqYW51YXJpfGZlYnJ1YXJpfG1hYXJ0fG1laXxqdVtubF1pfGFwcmlsfGF1Z3VzdHVzfHNlcHRlbWJlcnxva3RvYmVyfG5vdmVtYmVyfGRlY2VtYmVyKS9pLFxuICAgICAgICBtb250aHNTaG9ydFN0cmljdFJlZ2V4OiAvXihqYW5cXC4/fGZlYlxcLj98bXJ0XFwuP3xhcHJcXC4/fG1laXxqdVtubF1cXC4/fGF1Z1xcLj98c2VwXFwuP3xva3RcXC4/fG5vdlxcLj98ZGVjXFwuPykvaSxcblxuICAgICAgICBtb250aHNQYXJzZSA6IG1vbnRoc1BhcnNlLFxuICAgICAgICBsb25nTW9udGhzUGFyc2UgOiBtb250aHNQYXJzZSxcbiAgICAgICAgc2hvcnRNb250aHNQYXJzZSA6IG1vbnRoc1BhcnNlLFxuXG4gICAgICAgIHdlZWtkYXlzIDogJ3pvbmRhZ19tYWFuZGFnX2RpbnNkYWdfd29lbnNkYWdfZG9uZGVyZGFnX3ZyaWpkYWdfemF0ZXJkYWcnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAnem8uX21hLl9kaS5fd28uX2RvLl92ci5femEuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICd6b19tYV9kaV93b19kb192cl96YScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0IDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdISDptbScsXG4gICAgICAgICAgICBMVFMgOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheTogJ1t2YW5kYWFnIG9tXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW21vcmdlbiBvbV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtvbV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tnaXN0ZXJlbiBvbV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbYWZnZWxvcGVuXSBkZGRkIFtvbV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnb3ZlciAlcycsXG4gICAgICAgICAgICBwYXN0IDogJyVzIGdlbGVkZW4nLFxuICAgICAgICAgICAgcyA6ICdlZW4gcGFhciBzZWNvbmRlbicsXG4gICAgICAgICAgICBzcyA6ICclZCBzZWNvbmRlbicsXG4gICAgICAgICAgICBtIDogJ8Opw6luIG1pbnV1dCcsXG4gICAgICAgICAgICBtbSA6ICclZCBtaW51dGVuJyxcbiAgICAgICAgICAgIGggOiAnw6nDqW4gdXVyJyxcbiAgICAgICAgICAgIGhoIDogJyVkIHV1cicsXG4gICAgICAgICAgICBkIDogJ8Opw6luIGRhZycsXG4gICAgICAgICAgICBkZCA6ICclZCBkYWdlbicsXG4gICAgICAgICAgICBNIDogJ8Opw6luIG1hYW5kJyxcbiAgICAgICAgICAgIE1NIDogJyVkIG1hYW5kZW4nLFxuICAgICAgICAgICAgeSA6ICfDqcOpbiBqYWFyJyxcbiAgICAgICAgICAgIHl5IDogJyVkIGphYXInXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdGV8ZGUpLyxcbiAgICAgICAgb3JkaW5hbCA6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAoKG51bWJlciA9PT0gMSB8fCBudW1iZXIgPT09IDggfHwgbnVtYmVyID49IDIwKSA/ICdzdGUnIDogJ2RlJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5sQmU7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///68\n")},69:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n        monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');\n\n    var monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];\n    var monthsRegex = /^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n    var nl = moment.defineLocale('nl', {\n        months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),\n        monthsShort : function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: /^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,\n        monthsShortStrictRegex: /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n        monthsParse : monthsParse,\n        longMonthsParse : monthsParse,\n        shortMonthsParse : monthsParse,\n\n        weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n        weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),\n        weekdaysMin : 'zo_ma_di_wo_do_vr_za'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD-MM-YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[vandaag om] LT',\n            nextDay: '[morgen om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[gisteren om] LT',\n            lastWeek: '[afgelopen] dddd [om] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'over %s',\n            past : '%s geleden',\n            s : 'een paar seconden',\n            ss : '%d seconden',\n            m : 'één minuut',\n            mm : '%d minuten',\n            h : 'één uur',\n            hh : '%d uur',\n            d : 'één dag',\n            dd : '%d dagen',\n            M : 'één maand',\n            MM : '%d maanden',\n            y : 'één jaar',\n            yy : '%d jaar'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal : function (number) {\n            return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return nl;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ubC5qcz9mYWNkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiI2OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIG1vbnRoc1Nob3J0V2l0aERvdHMgPSAnamFuLl9mZWIuX21ydC5fYXByLl9tZWlfanVuLl9qdWwuX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVjLicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnRXaXRob3V0RG90cyA9ICdqYW5fZmViX21ydF9hcHJfbWVpX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlYycuc3BsaXQoJ18nKTtcblxuICAgIHZhciBtb250aHNQYXJzZSA9IFsvXmphbi9pLCAvXmZlYi9pLCAvXm1hYXJ0fG1ydC4/JC9pLCAvXmFwci9pLCAvXm1laSQvaSwgL15qdW5baS5dPyQvaSwgL15qdWxbaS5dPyQvaSwgL15hdWcvaSwgL15zZXAvaSwgL15va3QvaSwgL15ub3YvaSwgL15kZWMvaV07XG4gICAgdmFyIG1vbnRoc1JlZ2V4ID0gL14oamFudWFyaXxmZWJydWFyaXxtYWFydHxhcHJpbHxtZWl8YXByaWx8anVbbmxdaXxhdWd1c3R1c3xzZXB0ZW1iZXJ8b2t0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcnxqYW5cXC4/fGZlYlxcLj98bXJ0XFwuP3xhcHJcXC4/fGp1W25sXVxcLj98YXVnXFwuP3xzZXBcXC4/fG9rdFxcLj98bm92XFwuP3xkZWNcXC4/KS9pO1xuXG4gICAgdmFyIG5sID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbmwnLCB7XG4gICAgICAgIG1vbnRocyA6ICdqYW51YXJpX2ZlYnJ1YXJpX21hYXJ0X2FwcmlsX21laV9qdW5pX2p1bGlfYXVndXN0dXNfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXInLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogZnVuY3Rpb24gKG0sIGZvcm1hdCkge1xuICAgICAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0V2l0aERvdHM7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKC8tTU1NLS8udGVzdChmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0V2l0aG91dERvdHNbbS5tb250aCgpXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0V2l0aERvdHNbbS5tb250aCgpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBtb250aHNSZWdleDogbW9udGhzUmVnZXgsXG4gICAgICAgIG1vbnRoc1Nob3J0UmVnZXg6IG1vbnRoc1JlZ2V4LFxuICAgICAgICBtb250aHNTdHJpY3RSZWdleDogL14oamFudWFyaXxmZWJydWFyaXxtYWFydHxtZWl8anVbbmxdaXxhcHJpbHxhdWd1c3R1c3xzZXB0ZW1iZXJ8b2t0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcikvaSxcbiAgICAgICAgbW9udGhzU2hvcnRTdHJpY3RSZWdleDogL14oamFuXFwuP3xmZWJcXC4/fG1ydFxcLj98YXByXFwuP3xtZWl8anVbbmxdXFwuP3xhdWdcXC4/fHNlcFxcLj98b2t0XFwuP3xub3ZcXC4/fGRlY1xcLj8pL2ksXG5cbiAgICAgICAgbW9udGhzUGFyc2UgOiBtb250aHNQYXJzZSxcbiAgICAgICAgbG9uZ01vbnRoc1BhcnNlIDogbW9udGhzUGFyc2UsXG4gICAgICAgIHNob3J0TW9udGhzUGFyc2UgOiBtb250aHNQYXJzZSxcblxuICAgICAgICB3ZWVrZGF5cyA6ICd6b25kYWdfbWFhbmRhZ19kaW5zZGFnX3dvZW5zZGFnX2RvbmRlcmRhZ192cmlqZGFnX3phdGVyZGFnJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ3pvLl9tYS5fZGkuX3dvLl9kby5fdnIuX3phLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAnem9fbWFfZGlfd29fZG9fdnJfemEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdCA6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQtTU0tWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbdmFuZGFhZyBvbV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1ttb3JnZW4gb21dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbb21dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbZ2lzdGVyZW4gb21dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW2FmZ2Vsb3Blbl0gZGRkZCBbb21dIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ292ZXIgJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICclcyBnZWxlZGVuJyxcbiAgICAgICAgICAgIHMgOiAnZWVuIHBhYXIgc2Vjb25kZW4nLFxuICAgICAgICAgICAgc3MgOiAnJWQgc2Vjb25kZW4nLFxuICAgICAgICAgICAgbSA6ICfDqcOpbiBtaW51dXQnLFxuICAgICAgICAgICAgbW0gOiAnJWQgbWludXRlbicsXG4gICAgICAgICAgICBoIDogJ8Opw6luIHV1cicsXG4gICAgICAgICAgICBoaCA6ICclZCB1dXInLFxuICAgICAgICAgICAgZCA6ICfDqcOpbiBkYWcnLFxuICAgICAgICAgICAgZGQgOiAnJWQgZGFnZW4nLFxuICAgICAgICAgICAgTSA6ICfDqcOpbiBtYWFuZCcsXG4gICAgICAgICAgICBNTSA6ICclZCBtYWFuZGVuJyxcbiAgICAgICAgICAgIHkgOiAnw6nDqW4gamFhcicsXG4gICAgICAgICAgICB5eSA6ICclZCBqYWFyJ1xuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oc3RlfGRlKS8sXG4gICAgICAgIG9yZGluYWwgOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKChudW1iZXIgPT09IDEgfHwgbnVtYmVyID09PSA4IHx8IG51bWJlciA+PSAyMCkgPyAnc3RlJyA6ICdkZScpO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA0ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBubDtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///69\n")},7:function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"buildQueryString\", function() { return buildQueryString; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"join\", function() { return join; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"parseQueryString\", function() { return parseQueryString; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"relativeToFile\", function() { return relativeToFile; });\nfunction trimDots(ary) {\r\n    for (var i = 0; i < ary.length; ++i) {\r\n        var part = ary[i];\r\n        if (part === '.') {\r\n            ary.splice(i, 1);\r\n            i -= 1;\r\n        }\r\n        else if (part === '..') {\r\n            if (i === 0 || (i === 1 && ary[2] === '..') || ary[i - 1] === '..') {\r\n                continue;\r\n            }\r\n            else if (i > 0) {\r\n                ary.splice(i - 1, 2);\r\n                i -= 2;\r\n            }\r\n        }\r\n    }\r\n}\r\nfunction relativeToFile(name, file) {\r\n    var fileParts = file && file.split('/');\r\n    var nameParts = name.trim().split('/');\r\n    if (nameParts[0].charAt(0) === '.' && fileParts) {\r\n        var normalizedBaseParts = fileParts.slice(0, fileParts.length - 1);\r\n        nameParts.unshift.apply(nameParts, normalizedBaseParts);\r\n    }\r\n    trimDots(nameParts);\r\n    return nameParts.join('/');\r\n}\r\nfunction join(path1, path2) {\r\n    if (!path1) {\r\n        return path2;\r\n    }\r\n    if (!path2) {\r\n        return path1;\r\n    }\r\n    var schemeMatch = path1.match(/^([^/]*?:)\\//);\r\n    var scheme = (schemeMatch && schemeMatch.length > 0) ? schemeMatch[1] : '';\r\n    path1 = path1.substr(scheme.length);\r\n    var urlPrefix;\r\n    if (path1.indexOf('///') === 0 && scheme === 'file:') {\r\n        urlPrefix = '///';\r\n    }\r\n    else if (path1.indexOf('//') === 0) {\r\n        urlPrefix = '//';\r\n    }\r\n    else if (path1.indexOf('/') === 0) {\r\n        urlPrefix = '/';\r\n    }\r\n    else {\r\n        urlPrefix = '';\r\n    }\r\n    var trailingSlash = path2.slice(-1) === '/' ? '/' : '';\r\n    var url1 = path1.split('/');\r\n    var url2 = path2.split('/');\r\n    var url3 = [];\r\n    for (var i = 0, ii = url1.length; i < ii; ++i) {\r\n        if (url1[i] === '..') {\r\n            if (url3.length && url3[url3.length - 1] !== '..') {\r\n                url3.pop();\r\n            }\r\n            else {\r\n                url3.push(url1[i]);\r\n            }\r\n        }\r\n        else if (url1[i] === '.' || url1[i] === '') {\r\n            continue;\r\n        }\r\n        else {\r\n            url3.push(url1[i]);\r\n        }\r\n    }\r\n    for (var i = 0, ii = url2.length; i < ii; ++i) {\r\n        if (url2[i] === '..') {\r\n            if (url3.length && url3[url3.length - 1] !== '..') {\r\n                url3.pop();\r\n            }\r\n            else {\r\n                url3.push(url2[i]);\r\n            }\r\n        }\r\n        else if (url2[i] === '.' || url2[i] === '') {\r\n            continue;\r\n        }\r\n        else {\r\n            url3.push(url2[i]);\r\n        }\r\n    }\r\n    return scheme + urlPrefix + url3.join('/') + trailingSlash;\r\n}\r\nvar encode = encodeURIComponent;\r\nvar encodeKey = function (k) { return encode(k).replace('%24', '$'); };\r\nfunction buildParam(key, value, traditional) {\r\n    var result = [];\r\n    if (value === null || value === undefined) {\r\n        return result;\r\n    }\r\n    if (Array.isArray(value)) {\r\n        for (var i = 0, l = value.length; i < l; i++) {\r\n            if (traditional) {\r\n                result.push(encodeKey(key) + \"=\" + encode(value[i]));\r\n            }\r\n            else {\r\n                var arrayKey = key + '[' + (typeof value[i] === 'object' && value[i] !== null ? i : '') + ']';\r\n                result = result.concat(buildParam(arrayKey, value[i]));\r\n            }\r\n        }\r\n    }\r\n    else if (typeof (value) === 'object' && !traditional) {\r\n        for (var propertyName in value) {\r\n            result = result.concat(buildParam(key + '[' + propertyName + ']', value[propertyName]));\r\n        }\r\n    }\r\n    else {\r\n        result.push(encodeKey(key) + \"=\" + encode(value));\r\n    }\r\n    return result;\r\n}\r\nfunction buildQueryString(params, traditional) {\r\n    var pairs = [];\r\n    var keys = Object.keys(params || {}).sort();\r\n    for (var i = 0, len = keys.length; i < len; i++) {\r\n        var key = keys[i];\r\n        pairs = pairs.concat(buildParam(key, params[key], traditional));\r\n    }\r\n    if (pairs.length === 0) {\r\n        return '';\r\n    }\r\n    return pairs.join('&');\r\n}\r\nfunction processScalarParam(existedParam, value) {\r\n    if (Array.isArray(existedParam)) {\r\n        existedParam.push(value);\r\n        return existedParam;\r\n    }\r\n    if (existedParam !== undefined) {\r\n        return [existedParam, value];\r\n    }\r\n    return value;\r\n}\r\nfunction parseComplexParam(queryParams, keys, value) {\r\n    var currentParams = queryParams;\r\n    var keysLastIndex = keys.length - 1;\r\n    for (var j = 0; j <= keysLastIndex; j++) {\r\n        var key = keys[j] === '' ? currentParams.length : keys[j];\r\n        preventPollution(key);\r\n        if (j < keysLastIndex) {\r\n            var prevValue = !currentParams[key] || typeof currentParams[key] === 'object' ? currentParams[key] : [currentParams[key]];\r\n            currentParams = currentParams[key] = prevValue || (isNaN(keys[j + 1]) ? {} : []);\r\n        }\r\n        else {\r\n            currentParams = currentParams[key] = value;\r\n        }\r\n    }\r\n}\r\nfunction parseQueryString(queryString) {\r\n    var queryParams = {};\r\n    if (!queryString || typeof queryString !== 'string') {\r\n        return queryParams;\r\n    }\r\n    var query = queryString;\r\n    if (query.charAt(0) === '?') {\r\n        query = query.substr(1);\r\n    }\r\n    var pairs = query.replace(/\\+/g, ' ').split('&');\r\n    for (var i = 0; i < pairs.length; i++) {\r\n        var pair = pairs[i].split('=');\r\n        var key = decodeURIComponent(pair[0]);\r\n        if (!key) {\r\n            continue;\r\n        }\r\n        var keys = key.split('][');\r\n        var keysLastIndex = keys.length - 1;\r\n        if (/\\[/.test(keys[0]) && /\\]$/.test(keys[keysLastIndex])) {\r\n            keys[keysLastIndex] = keys[keysLastIndex].replace(/\\]$/, '');\r\n            keys = keys.shift().split('[').concat(keys);\r\n            keysLastIndex = keys.length - 1;\r\n        }\r\n        else {\r\n            keysLastIndex = 0;\r\n        }\r\n        if (pair.length >= 2) {\r\n            var value = pair[1] ? decodeURIComponent(pair[1]) : '';\r\n            if (keysLastIndex) {\r\n                parseComplexParam(queryParams, keys, value);\r\n            }\r\n            else {\r\n                preventPollution(key);\r\n                queryParams[key] = processScalarParam(queryParams[key], value);\r\n            }\r\n        }\r\n        else {\r\n            queryParams[key] = true;\r\n        }\r\n    }\r\n    return queryParams;\r\n}\r\nfunction preventPollution(key) {\r\n    if (key === '__proto__') {\r\n        throw new Error('Prototype pollution detected.');\r\n    }\r\n}\n\n\n//# sourceMappingURL=aurelia-path.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXVyZWxpYS1wYXRoL2Rpc3QvbmF0aXZlLW1vZHVsZXMvYXVyZWxpYS1wYXRoLmpzPzg4M2QiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0EsbUJBQW1CLGdCQUFnQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLFFBQVE7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLFFBQVE7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLHNDQUFzQztBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsT0FBTztBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkMsc0NBQXNDLFNBQVM7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLG9CQUFvQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBLHNGQUFzRjtBQUN0RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixrQkFBa0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVvRTtBQUNwRSIsImZpbGUiOiI3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gdHJpbURvdHMoYXJ5KSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyeS5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgIHZhciBwYXJ0ID0gYXJ5W2ldO1xyXG4gICAgICAgIGlmIChwYXJ0ID09PSAnLicpIHtcclxuICAgICAgICAgICAgYXJ5LnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgaSAtPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChwYXJ0ID09PSAnLi4nKSB7XHJcbiAgICAgICAgICAgIGlmIChpID09PSAwIHx8IChpID09PSAxICYmIGFyeVsyXSA9PT0gJy4uJykgfHwgYXJ5W2kgLSAxXSA9PT0gJy4uJykge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoaSA+IDApIHtcclxuICAgICAgICAgICAgICAgIGFyeS5zcGxpY2UoaSAtIDEsIDIpO1xyXG4gICAgICAgICAgICAgICAgaSAtPSAyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHJlbGF0aXZlVG9GaWxlKG5hbWUsIGZpbGUpIHtcclxuICAgIHZhciBmaWxlUGFydHMgPSBmaWxlICYmIGZpbGUuc3BsaXQoJy8nKTtcclxuICAgIHZhciBuYW1lUGFydHMgPSBuYW1lLnRyaW0oKS5zcGxpdCgnLycpO1xyXG4gICAgaWYgKG5hbWVQYXJ0c1swXS5jaGFyQXQoMCkgPT09ICcuJyAmJiBmaWxlUGFydHMpIHtcclxuICAgICAgICB2YXIgbm9ybWFsaXplZEJhc2VQYXJ0cyA9IGZpbGVQYXJ0cy5zbGljZSgwLCBmaWxlUGFydHMubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgbmFtZVBhcnRzLnVuc2hpZnQuYXBwbHkobmFtZVBhcnRzLCBub3JtYWxpemVkQmFzZVBhcnRzKTtcclxuICAgIH1cclxuICAgIHRyaW1Eb3RzKG5hbWVQYXJ0cyk7XHJcbiAgICByZXR1cm4gbmFtZVBhcnRzLmpvaW4oJy8nKTtcclxufVxyXG5mdW5jdGlvbiBqb2luKHBhdGgxLCBwYXRoMikge1xyXG4gICAgaWYgKCFwYXRoMSkge1xyXG4gICAgICAgIHJldHVybiBwYXRoMjtcclxuICAgIH1cclxuICAgIGlmICghcGF0aDIpIHtcclxuICAgICAgICByZXR1cm4gcGF0aDE7XHJcbiAgICB9XHJcbiAgICB2YXIgc2NoZW1lTWF0Y2ggPSBwYXRoMS5tYXRjaCgvXihbXi9dKj86KVxcLy8pO1xyXG4gICAgdmFyIHNjaGVtZSA9IChzY2hlbWVNYXRjaCAmJiBzY2hlbWVNYXRjaC5sZW5ndGggPiAwKSA/IHNjaGVtZU1hdGNoWzFdIDogJyc7XHJcbiAgICBwYXRoMSA9IHBhdGgxLnN1YnN0cihzY2hlbWUubGVuZ3RoKTtcclxuICAgIHZhciB1cmxQcmVmaXg7XHJcbiAgICBpZiAocGF0aDEuaW5kZXhPZignLy8vJykgPT09IDAgJiYgc2NoZW1lID09PSAnZmlsZTonKSB7XHJcbiAgICAgICAgdXJsUHJlZml4ID0gJy8vLyc7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChwYXRoMS5pbmRleE9mKCcvLycpID09PSAwKSB7XHJcbiAgICAgICAgdXJsUHJlZml4ID0gJy8vJztcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHBhdGgxLmluZGV4T2YoJy8nKSA9PT0gMCkge1xyXG4gICAgICAgIHVybFByZWZpeCA9ICcvJztcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHVybFByZWZpeCA9ICcnO1xyXG4gICAgfVxyXG4gICAgdmFyIHRyYWlsaW5nU2xhc2ggPSBwYXRoMi5zbGljZSgtMSkgPT09ICcvJyA/ICcvJyA6ICcnO1xyXG4gICAgdmFyIHVybDEgPSBwYXRoMS5zcGxpdCgnLycpO1xyXG4gICAgdmFyIHVybDIgPSBwYXRoMi5zcGxpdCgnLycpO1xyXG4gICAgdmFyIHVybDMgPSBbXTtcclxuICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHVybDEubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xyXG4gICAgICAgIGlmICh1cmwxW2ldID09PSAnLi4nKSB7XHJcbiAgICAgICAgICAgIGlmICh1cmwzLmxlbmd0aCAmJiB1cmwzW3VybDMubGVuZ3RoIC0gMV0gIT09ICcuLicpIHtcclxuICAgICAgICAgICAgICAgIHVybDMucG9wKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB1cmwzLnB1c2godXJsMVtpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodXJsMVtpXSA9PT0gJy4nIHx8IHVybDFbaV0gPT09ICcnKSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdXJsMy5wdXNoKHVybDFbaV0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHVybDIubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xyXG4gICAgICAgIGlmICh1cmwyW2ldID09PSAnLi4nKSB7XHJcbiAgICAgICAgICAgIGlmICh1cmwzLmxlbmd0aCAmJiB1cmwzW3VybDMubGVuZ3RoIC0gMV0gIT09ICcuLicpIHtcclxuICAgICAgICAgICAgICAgIHVybDMucG9wKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB1cmwzLnB1c2godXJsMltpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodXJsMltpXSA9PT0gJy4nIHx8IHVybDJbaV0gPT09ICcnKSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdXJsMy5wdXNoKHVybDJbaV0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBzY2hlbWUgKyB1cmxQcmVmaXggKyB1cmwzLmpvaW4oJy8nKSArIHRyYWlsaW5nU2xhc2g7XHJcbn1cclxudmFyIGVuY29kZSA9IGVuY29kZVVSSUNvbXBvbmVudDtcclxudmFyIGVuY29kZUtleSA9IGZ1bmN0aW9uIChrKSB7IHJldHVybiBlbmNvZGUoaykucmVwbGFjZSgnJTI0JywgJyQnKTsgfTtcclxuZnVuY3Rpb24gYnVpbGRQYXJhbShrZXksIHZhbHVlLCB0cmFkaXRpb25hbCkge1xyXG4gICAgdmFyIHJlc3VsdCA9IFtdO1xyXG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRyYWRpdGlvbmFsKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChlbmNvZGVLZXkoa2V5KSArIFwiPVwiICsgZW5jb2RlKHZhbHVlW2ldKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXJyYXlLZXkgPSBrZXkgKyAnWycgKyAodHlwZW9mIHZhbHVlW2ldID09PSAnb2JqZWN0JyAmJiB2YWx1ZVtpXSAhPT0gbnVsbCA/IGkgOiAnJykgKyAnXSc7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KGJ1aWxkUGFyYW0oYXJyYXlLZXksIHZhbHVlW2ldKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2YgKHZhbHVlKSA9PT0gJ29iamVjdCcgJiYgIXRyYWRpdGlvbmFsKSB7XHJcbiAgICAgICAgZm9yICh2YXIgcHJvcGVydHlOYW1lIGluIHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoYnVpbGRQYXJhbShrZXkgKyAnWycgKyBwcm9wZXJ0eU5hbWUgKyAnXScsIHZhbHVlW3Byb3BlcnR5TmFtZV0pKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXN1bHQucHVzaChlbmNvZGVLZXkoa2V5KSArIFwiPVwiICsgZW5jb2RlKHZhbHVlKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcbmZ1bmN0aW9uIGJ1aWxkUXVlcnlTdHJpbmcocGFyYW1zLCB0cmFkaXRpb25hbCkge1xyXG4gICAgdmFyIHBhaXJzID0gW107XHJcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHBhcmFtcyB8fCB7fSkuc29ydCgpO1xyXG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGtleXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcclxuICAgICAgICBwYWlycyA9IHBhaXJzLmNvbmNhdChidWlsZFBhcmFtKGtleSwgcGFyYW1zW2tleV0sIHRyYWRpdGlvbmFsKSk7XHJcbiAgICB9XHJcbiAgICBpZiAocGFpcnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBhaXJzLmpvaW4oJyYnKTtcclxufVxyXG5mdW5jdGlvbiBwcm9jZXNzU2NhbGFyUGFyYW0oZXhpc3RlZFBhcmFtLCB2YWx1ZSkge1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZXhpc3RlZFBhcmFtKSkge1xyXG4gICAgICAgIGV4aXN0ZWRQYXJhbS5wdXNoKHZhbHVlKTtcclxuICAgICAgICByZXR1cm4gZXhpc3RlZFBhcmFtO1xyXG4gICAgfVxyXG4gICAgaWYgKGV4aXN0ZWRQYXJhbSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuIFtleGlzdGVkUGFyYW0sIHZhbHVlXTtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZTtcclxufVxyXG5mdW5jdGlvbiBwYXJzZUNvbXBsZXhQYXJhbShxdWVyeVBhcmFtcywga2V5cywgdmFsdWUpIHtcclxuICAgIHZhciBjdXJyZW50UGFyYW1zID0gcXVlcnlQYXJhbXM7XHJcbiAgICB2YXIga2V5c0xhc3RJbmRleCA9IGtleXMubGVuZ3RoIC0gMTtcclxuICAgIGZvciAodmFyIGogPSAwOyBqIDw9IGtleXNMYXN0SW5kZXg7IGorKykge1xyXG4gICAgICAgIHZhciBrZXkgPSBrZXlzW2pdID09PSAnJyA/IGN1cnJlbnRQYXJhbXMubGVuZ3RoIDoga2V5c1tqXTtcclxuICAgICAgICBwcmV2ZW50UG9sbHV0aW9uKGtleSk7XHJcbiAgICAgICAgaWYgKGogPCBrZXlzTGFzdEluZGV4KSB7XHJcbiAgICAgICAgICAgIHZhciBwcmV2VmFsdWUgPSAhY3VycmVudFBhcmFtc1trZXldIHx8IHR5cGVvZiBjdXJyZW50UGFyYW1zW2tleV0gPT09ICdvYmplY3QnID8gY3VycmVudFBhcmFtc1trZXldIDogW2N1cnJlbnRQYXJhbXNba2V5XV07XHJcbiAgICAgICAgICAgIGN1cnJlbnRQYXJhbXMgPSBjdXJyZW50UGFyYW1zW2tleV0gPSBwcmV2VmFsdWUgfHwgKGlzTmFOKGtleXNbaiArIDFdKSA/IHt9IDogW10pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY3VycmVudFBhcmFtcyA9IGN1cnJlbnRQYXJhbXNba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBwYXJzZVF1ZXJ5U3RyaW5nKHF1ZXJ5U3RyaW5nKSB7XHJcbiAgICB2YXIgcXVlcnlQYXJhbXMgPSB7fTtcclxuICAgIGlmICghcXVlcnlTdHJpbmcgfHwgdHlwZW9mIHF1ZXJ5U3RyaW5nICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHJldHVybiBxdWVyeVBhcmFtcztcclxuICAgIH1cclxuICAgIHZhciBxdWVyeSA9IHF1ZXJ5U3RyaW5nO1xyXG4gICAgaWYgKHF1ZXJ5LmNoYXJBdCgwKSA9PT0gJz8nKSB7XHJcbiAgICAgICAgcXVlcnkgPSBxdWVyeS5zdWJzdHIoMSk7XHJcbiAgICB9XHJcbiAgICB2YXIgcGFpcnMgPSBxdWVyeS5yZXBsYWNlKC9cXCsvZywgJyAnKS5zcGxpdCgnJicpO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYWlycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBwYWlyID0gcGFpcnNbaV0uc3BsaXQoJz0nKTtcclxuICAgICAgICB2YXIga2V5ID0gZGVjb2RlVVJJQ29tcG9uZW50KHBhaXJbMF0pO1xyXG4gICAgICAgIGlmICgha2V5KSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIga2V5cyA9IGtleS5zcGxpdCgnXVsnKTtcclxuICAgICAgICB2YXIga2V5c0xhc3RJbmRleCA9IGtleXMubGVuZ3RoIC0gMTtcclxuICAgICAgICBpZiAoL1xcWy8udGVzdChrZXlzWzBdKSAmJiAvXFxdJC8udGVzdChrZXlzW2tleXNMYXN0SW5kZXhdKSkge1xyXG4gICAgICAgICAgICBrZXlzW2tleXNMYXN0SW5kZXhdID0ga2V5c1trZXlzTGFzdEluZGV4XS5yZXBsYWNlKC9cXF0kLywgJycpO1xyXG4gICAgICAgICAgICBrZXlzID0ga2V5cy5zaGlmdCgpLnNwbGl0KCdbJykuY29uY2F0KGtleXMpO1xyXG4gICAgICAgICAgICBrZXlzTGFzdEluZGV4ID0ga2V5cy5sZW5ndGggLSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAga2V5c0xhc3RJbmRleCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYWlyLmxlbmd0aCA+PSAyKSB7XHJcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IHBhaXJbMV0gPyBkZWNvZGVVUklDb21wb25lbnQocGFpclsxXSkgOiAnJztcclxuICAgICAgICAgICAgaWYgKGtleXNMYXN0SW5kZXgpIHtcclxuICAgICAgICAgICAgICAgIHBhcnNlQ29tcGxleFBhcmFtKHF1ZXJ5UGFyYW1zLCBrZXlzLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBwcmV2ZW50UG9sbHV0aW9uKGtleSk7XHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtc1trZXldID0gcHJvY2Vzc1NjYWxhclBhcmFtKHF1ZXJ5UGFyYW1zW2tleV0sIHZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbXNba2V5XSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHF1ZXJ5UGFyYW1zO1xyXG59XHJcbmZ1bmN0aW9uIHByZXZlbnRQb2xsdXRpb24oa2V5KSB7XHJcbiAgICBpZiAoa2V5ID09PSAnX19wcm90b19fJykge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUHJvdG90eXBlIHBvbGx1dGlvbiBkZXRlY3RlZC4nKTtcclxuICAgIH1cclxufVxuXG5leHBvcnQgeyBidWlsZFF1ZXJ5U3RyaW5nLCBqb2luLCBwYXJzZVF1ZXJ5U3RyaW5nLCByZWxhdGl2ZVRvRmlsZSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXVyZWxpYS1wYXRoLmpzLm1hcFxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7\n")},70:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '१',\n        '2': '२',\n        '3': '३',\n        '4': '४',\n        '5': '५',\n        '6': '६',\n        '7': '७',\n        '8': '८',\n        '9': '९',\n        '0': '०'\n    },\n    numberMap = {\n        '१': '1',\n        '२': '2',\n        '३': '3',\n        '४': '4',\n        '५': '5',\n        '६': '6',\n        '७': '7',\n        '८': '8',\n        '९': '9',\n        '०': '0'\n    };\n\n    var ne = moment.defineLocale('ne', {\n        months : 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split('_'),\n        monthsShort : 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split('_'),\n        weekdaysShort : 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),\n        weekdaysMin : 'आ._सो._मं._बु._बि._शु._श.'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'Aको h:mm बजे',\n            LTS : 'Aको h:mm:ss बजे',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, Aको h:mm बजे',\n            LLLL : 'dddd, D MMMM YYYY, Aको h:mm बजे'\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /राति|बिहान|दिउँसो|साँझ/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'राति') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'बिहान') {\n                return hour;\n            } else if (meridiem === 'दिउँसो') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'साँझ') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 3) {\n                return 'राति';\n            } else if (hour < 12) {\n                return 'बिहान';\n            } else if (hour < 16) {\n                return 'दिउँसो';\n            } else if (hour < 20) {\n                return 'साँझ';\n            } else {\n                return 'राति';\n            }\n        },\n        calendar : {\n            sameDay : '[आज] LT',\n            nextDay : '[भोलि] LT',\n            nextWeek : '[आउँदो] dddd[,] LT',\n            lastDay : '[हिजो] LT',\n            lastWeek : '[गएको] dddd[,] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%sमा',\n            past : '%s अगाडि',\n            s : 'केही क्षण',\n            ss : '%d सेकेण्ड',\n            m : 'एक मिनेट',\n            mm : '%d मिनेट',\n            h : 'एक घण्टा',\n            hh : '%d घण्टा',\n            d : 'एक दिन',\n            dd : '%d दिन',\n            M : 'एक महिना',\n            MM : '%d महिना',\n            y : 'एक बर्ष',\n            yy : '%d बर्ष'\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return ne;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9uZS5qcz8zYTM5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwiZmlsZSI6IjcwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAnMSc6ICfgpacnLFxuICAgICAgICAnMic6ICfgpagnLFxuICAgICAgICAnMyc6ICfgpaknLFxuICAgICAgICAnNCc6ICfgpaonLFxuICAgICAgICAnNSc6ICfgpasnLFxuICAgICAgICAnNic6ICfgpawnLFxuICAgICAgICAnNyc6ICfgpa0nLFxuICAgICAgICAnOCc6ICfgpa4nLFxuICAgICAgICAnOSc6ICfgpa8nLFxuICAgICAgICAnMCc6ICfgpaYnXG4gICAgfSxcbiAgICBudW1iZXJNYXAgPSB7XG4gICAgICAgICfgpacnOiAnMScsXG4gICAgICAgICfgpagnOiAnMicsXG4gICAgICAgICfgpaknOiAnMycsXG4gICAgICAgICfgpaonOiAnNCcsXG4gICAgICAgICfgpasnOiAnNScsXG4gICAgICAgICfgpawnOiAnNicsXG4gICAgICAgICfgpa0nOiAnNycsXG4gICAgICAgICfgpa4nOiAnOCcsXG4gICAgICAgICfgpa8nOiAnOScsXG4gICAgICAgICfgpaYnOiAnMCdcbiAgICB9O1xuXG4gICAgdmFyIG5lID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbmUnLCB7XG4gICAgICAgIG1vbnRocyA6ICfgpJzgpKjgpLXgpLDgpYBf4KSr4KWH4KSs4KWN4KSw4KWB4KS14KSw4KWAX+CkruCkvuCksOCljeCkml/gpIXgpKrgpY3gpLDgpL/gpLJf4KSu4KSIX+CknOClgeCkqF/gpJzgpYHgpLLgpL7gpIhf4KSF4KSX4KS34KWN4KSfX+CkuOClh+CkquCljeCkn+Clh+CkruCljeCkrOCksF/gpIXgpJXgpY3gpJ/gpYvgpKzgpLBf4KSo4KWL4KSt4KWH4KSu4KWN4KSs4KSwX+CkoeCkv+CkuOClh+CkruCljeCkrOCksCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAn4KSc4KSoLl/gpKvgpYfgpKzgpY3gpLDgpYEuX+CkruCkvuCksOCljeCkml/gpIXgpKrgpY3gpLDgpL8uX+CkruCkiF/gpJzgpYHgpKhf4KSc4KWB4KSy4KS+4KSILl/gpIXgpJcuX+CkuOClh+CkquCljeCkny5f4KSF4KSV4KWN4KSf4KWLLl/gpKjgpYvgpK3gpYcuX+CkoeCkv+CkuOClhy4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICB3ZWVrZGF5cyA6ICfgpIbgpIfgpKTgpKzgpL7gpLBf4KS44KWL4KSu4KSs4KS+4KSwX+CkruCkmeCljeCkl+CksuCkrOCkvuCksF/gpKzgpYHgpKfgpKzgpL7gpLBf4KSs4KS/4KS54KS/4KSs4KS+4KSwX+CktuClgeCkleCljeCksOCkrOCkvuCksF/gpLbgpKjgpL/gpKzgpL7gpLAnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAn4KSG4KSH4KSkLl/gpLjgpYvgpK4uX+CkruCkmeCljeCkl+Cksi5f4KSs4KWB4KSnLl/gpKzgpL/gpLngpL8uX+CktuClgeCkleCljeCksC5f4KS24KSo4KS/Licuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAn4KSGLl/gpLjgpYsuX+CkruCkgi5f4KSs4KWBLl/gpKzgpL8uX+CktuClgS5f4KS2Licuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0IDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdB4KSV4KWLIGg6bW0g4KSs4KSc4KWHJyxcbiAgICAgICAgICAgIExUUyA6ICdB4KSV4KWLIGg6bW06c3Mg4KSs4KSc4KWHJyxcbiAgICAgICAgICAgIEwgOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVksIEHgpJXgpYsgaDptbSDgpKzgpJzgpYcnLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBEIE1NTU0gWVlZWSwgQeCkleCliyBoOm1tIOCkrOCknOClhydcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW+Clp+ClqOClqeClquClq+ClrOClreClruClr+Clpl0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+CksOCkvuCkpOCkv3zgpKzgpL/gpLngpL7gpKh84KSm4KS/4KSJ4KSB4KS44KWLfOCkuOCkvuCkgeCknS8sXG4gICAgICAgIG1lcmlkaWVtSG91ciA6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICfgpLDgpL7gpKTgpL8nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPCA0ID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgpKzgpL/gpLngpL7gpKgnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4KSm4KS/4KSJ4KSB4KS44KWLJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDEwID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgpLjgpL7gpIHgpJ0nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW0gOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CksOCkvuCkpOCkvyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KSs4KS/4KS54KS+4KSoJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE2KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpKbgpL/gpIngpIHgpLjgpYsnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CkuOCkvuCkgeCknSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KSw4KS+4KSk4KS/JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1vgpIbgpJxdIExUJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW+CkreCli+CksuCkv10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnW+CkhuCkieCkgeCkpuCli10gZGRkZFssXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5IDogJ1vgpLngpL/gpJzgpYtdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogJ1vgpJfgpI/gpJXgpYtdIGRkZGRbLF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJyVz4KSu4KS+JyxcbiAgICAgICAgICAgIHBhc3QgOiAnJXMg4KSF4KSX4KS+4KSh4KS/JyxcbiAgICAgICAgICAgIHMgOiAn4KSV4KWH4KS54KWAIOCkleCljeCkt+CkoycsXG4gICAgICAgICAgICBzcyA6ICclZCDgpLjgpYfgpJXgpYfgpKPgpY3gpKEnLFxuICAgICAgICAgICAgbSA6ICfgpI/gpJUg4KSu4KS/4KSo4KWH4KSfJyxcbiAgICAgICAgICAgIG1tIDogJyVkIOCkruCkv+CkqOClh+CknycsXG4gICAgICAgICAgICBoIDogJ+Ckj+CklSDgpJjgpKPgpY3gpJ/gpL4nLFxuICAgICAgICAgICAgaGggOiAnJWQg4KSY4KSj4KWN4KSf4KS+JyxcbiAgICAgICAgICAgIGQgOiAn4KSP4KSVIOCkpuCkv+CkqCcsXG4gICAgICAgICAgICBkZCA6ICclZCDgpKbgpL/gpKgnLFxuICAgICAgICAgICAgTSA6ICfgpI/gpJUg4KSu4KS54KS/4KSo4KS+JyxcbiAgICAgICAgICAgIE1NIDogJyVkIOCkruCkueCkv+CkqOCkvicsXG4gICAgICAgICAgICB5IDogJ+Ckj+CklSDgpKzgpLDgpY3gpLcnLFxuICAgICAgICAgICAgeXkgOiAnJWQg4KSs4KSw4KWN4KS3J1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA2ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxc3QgaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBuZTtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///70\n")},71:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var nb = moment.defineLocale('nb', {\n        months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n        monthsShort : 'jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n        weekdaysShort : 'sø._ma._ti._on._to._fr._lø.'.split('_'),\n        weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY [kl.] HH:mm',\n            LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'\n        },\n        calendar : {\n            sameDay: '[i dag kl.] LT',\n            nextDay: '[i morgen kl.] LT',\n            nextWeek: 'dddd [kl.] LT',\n            lastDay: '[i går kl.] LT',\n            lastWeek: '[forrige] dddd [kl.] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'om %s',\n            past : '%s siden',\n            s : 'noen sekunder',\n            ss : '%d sekunder',\n            m : 'ett minutt',\n            mm : '%d minutter',\n            h : 'en time',\n            hh : '%d timer',\n            d : 'en dag',\n            dd : '%d dager',\n            M : 'en måned',\n            MM : '%d måneder',\n            y : 'ett år',\n            yy : '%d år'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return nb;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9uYi5qcz82Y2UzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiNzEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBuYiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ25iJywge1xuICAgICAgICBtb250aHMgOiAnamFudWFyX2ZlYnJ1YXJfbWFyc19hcHJpbF9tYWlfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZXNlbWJlcicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAnamFuLl9mZWIuX21hcnNfYXByaWxfbWFpX2p1bmlfanVsaV9hdWcuX3NlcC5fb2t0Ll9ub3YuX2Rlcy4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICB3ZWVrZGF5cyA6ICdzw7huZGFnX21hbmRhZ190aXJzZGFnX29uc2RhZ190b3JzZGFnX2ZyZWRhZ19sw7hyZGFnJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ3PDuC5fbWEuX3RpLl9vbi5fdG8uX2ZyLl9sw7guJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICdzw7hfbWFfdGlfb25fdG9fZnJfbMO4Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEwgOiAnRC4gTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdELiBNTU1NIFlZWVkgW2tsLl0gSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkIEQuIE1NTU0gWVlZWSBba2wuXSBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2kgZGFnIGtsLl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tpIG1vcmdlbiBrbC5dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBba2wuXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2kgZ8OlciBrbC5dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW2ZvcnJpZ2VdIGRkZGQgW2tsLl0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnb20gJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICclcyBzaWRlbicsXG4gICAgICAgICAgICBzIDogJ25vZW4gc2VrdW5kZXInLFxuICAgICAgICAgICAgc3MgOiAnJWQgc2VrdW5kZXInLFxuICAgICAgICAgICAgbSA6ICdldHQgbWludXR0JyxcbiAgICAgICAgICAgIG1tIDogJyVkIG1pbnV0dGVyJyxcbiAgICAgICAgICAgIGggOiAnZW4gdGltZScsXG4gICAgICAgICAgICBoaCA6ICclZCB0aW1lcicsXG4gICAgICAgICAgICBkIDogJ2VuIGRhZycsXG4gICAgICAgICAgICBkZCA6ICclZCBkYWdlcicsXG4gICAgICAgICAgICBNIDogJ2VuIG3DpW5lZCcsXG4gICAgICAgICAgICBNTSA6ICclZCBtw6VuZWRlcicsXG4gICAgICAgICAgICB5IDogJ2V0dCDDpXInLFxuICAgICAgICAgICAgeXkgOiAnJWQgw6VyJ1xuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsIDogJyVkLicsXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5iO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///71\n")},72:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '၁',\n        '2': '၂',\n        '3': '၃',\n        '4': '၄',\n        '5': '၅',\n        '6': '၆',\n        '7': '၇',\n        '8': '၈',\n        '9': '၉',\n        '0': '၀'\n    }, numberMap = {\n        '၁': '1',\n        '၂': '2',\n        '၃': '3',\n        '၄': '4',\n        '၅': '5',\n        '၆': '6',\n        '၇': '7',\n        '၈': '8',\n        '၉': '9',\n        '၀': '0'\n    };\n\n    var my = moment.defineLocale('my', {\n        months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split('_'),\n        monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),\n        weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split('_'),\n        weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n        weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar: {\n            sameDay: '[ယနေ.] LT [မှာ]',\n            nextDay: '[မနက်ဖြန်] LT [မှာ]',\n            nextWeek: 'dddd LT [မှာ]',\n            lastDay: '[မနေ.က] LT [မှာ]',\n            lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: 'လာမည့် %s မှာ',\n            past: 'လွန်ခဲ့သော %s က',\n            s: 'စက္ကန်.အနည်းငယ်',\n            ss : '%d စက္ကန့်',\n            m: 'တစ်မိနစ်',\n            mm: '%d မိနစ်',\n            h: 'တစ်နာရီ',\n            hh: '%d နာရီ',\n            d: 'တစ်ရက်',\n            dd: '%d ရက်',\n            M: 'တစ်လ',\n            MM: '%d လ',\n            y: 'တစ်နှစ်',\n            yy: '%d နှစ်'\n        },\n        preparse: function (string) {\n            return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4 // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return my;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9teS5qcz84Njg5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiNzIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICcxJzogJ+GBgScsXG4gICAgICAgICcyJzogJ+GBgicsXG4gICAgICAgICczJzogJ+GBgycsXG4gICAgICAgICc0JzogJ+GBhCcsXG4gICAgICAgICc1JzogJ+GBhScsXG4gICAgICAgICc2JzogJ+GBhicsXG4gICAgICAgICc3JzogJ+GBhycsXG4gICAgICAgICc4JzogJ+GBiCcsXG4gICAgICAgICc5JzogJ+GBiScsXG4gICAgICAgICcwJzogJ+GBgCdcbiAgICB9LCBudW1iZXJNYXAgPSB7XG4gICAgICAgICfhgYEnOiAnMScsXG4gICAgICAgICfhgYInOiAnMicsXG4gICAgICAgICfhgYMnOiAnMycsXG4gICAgICAgICfhgYQnOiAnNCcsXG4gICAgICAgICfhgYUnOiAnNScsXG4gICAgICAgICfhgYYnOiAnNicsXG4gICAgICAgICfhgYcnOiAnNycsXG4gICAgICAgICfhgYgnOiAnOCcsXG4gICAgICAgICfhgYknOiAnOScsXG4gICAgICAgICfhgYAnOiAnMCdcbiAgICB9O1xuXG4gICAgdmFyIG15ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbXknLCB7XG4gICAgICAgIG1vbnRoczogJ+GAh+GAlOGAuuGAlOGAneGAq+GAm+GArl/hgJbhgLHhgJbhgLHhgKzhgLrhgJ3hgKvhgJvhgK5f4YCZ4YCQ4YC6X+GAp+GAleGAvOGArl/hgJnhgLFf4YCH4YC94YCU4YC6X+GAh+GAsOGAnOGAreGAr+GAhOGAul/hgJ7hgLzhgILhgK/hgJDhgLpf4YCF4YCA4YC64YCQ4YCE4YC64YCY4YCsX+GAoeGAseGArOGAgOGAuuGAkOGAreGAr+GAmOGArF/hgJThgK3hgK/hgJ3hgIThgLrhgJjhgKxf4YCS4YCu4YCH4YCE4YC64YCY4YCsJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydDogJ+GAh+GAlOGAul/hgJbhgLFf4YCZ4YCQ4YC6X+GAleGAvOGArl/hgJnhgLFf4YCH4YC94YCU4YC6X+GAnOGAreGAr+GAhOGAul/hgJ7hgLxf4YCF4YCA4YC6X+GAoeGAseGArOGAgOGAul/hgJThgK3hgK9f4YCS4YCuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ+GAkOGAlOGAhOGAuuGAueGAguGAlOGAveGAsV/hgJDhgJThgIThgLrhgLnhgJzhgKxf4YCh4YCE4YC64YC54YCC4YCrX+GAl+GAr+GAkuGAueGAk+GAn+GAsOGAuF/hgIDhgLzhgKzhgJ7hgJXhgJDhgLHhgLhf4YCe4YCx4YCs4YCA4YC84YCsX+GAheGAlOGAsScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+GAlOGAveGAsV/hgJzhgKxf4YCC4YCrX+GAn+GAsOGAuF/hgIDhgLzhgKxf4YCe4YCx4YCsX+GAlOGAsScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfhgJThgL3hgLFf4YCc4YCsX+GAguGAq1/hgJ/hgLDhgLhf4YCA4YC84YCsX+GAnuGAseGArF/hgJThgLEnLnNwbGl0KCdfJyksXG5cbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb4YCa4YCU4YCxLl0gTFQgW+GAmeGAvuGArF0nLFxuICAgICAgICAgICAgbmV4dERheTogJ1vhgJnhgJThgIDhgLrhgJbhgLzhgJThgLpdIExUIFvhgJnhgL7hgKxdJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBMVCBb4YCZ4YC+4YCsXScsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+GAmeGAlOGAsS7hgIBdIExUIFvhgJnhgL7hgKxdJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW+GAleGAvOGAruGAuOGAgeGAsuGAt+GAnuGAseGArF0gZGRkZCBMVCBb4YCZ4YC+4YCsXScsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn4YCc4YCs4YCZ4YCK4YC64YC3ICVzIOGAmeGAvuGArCcsXG4gICAgICAgICAgICBwYXN0OiAn4YCc4YC94YCU4YC64YCB4YCy4YC34YCe4YCx4YCsICVzIOGAgCcsXG4gICAgICAgICAgICBzOiAn4YCF4YCA4YC54YCA4YCU4YC6LuGAoeGAlOGAiuGAuuGAuOGAhOGAmuGAuicsXG4gICAgICAgICAgICBzcyA6ICclZCDhgIXhgIDhgLnhgIDhgJThgLfhgLonLFxuICAgICAgICAgICAgbTogJ+GAkOGAheGAuuGAmeGAreGAlOGAheGAuicsXG4gICAgICAgICAgICBtbTogJyVkIOGAmeGAreGAlOGAheGAuicsXG4gICAgICAgICAgICBoOiAn4YCQ4YCF4YC64YCU4YCs4YCb4YCuJyxcbiAgICAgICAgICAgIGhoOiAnJWQg4YCU4YCs4YCb4YCuJyxcbiAgICAgICAgICAgIGQ6ICfhgJDhgIXhgLrhgJvhgIDhgLonLFxuICAgICAgICAgICAgZGQ6ICclZCDhgJvhgIDhgLonLFxuICAgICAgICAgICAgTTogJ+GAkOGAheGAuuGAnCcsXG4gICAgICAgICAgICBNTTogJyVkIOGAnCcsXG4gICAgICAgICAgICB5OiAn4YCQ4YCF4YC64YCU4YC+4YCF4YC6JyxcbiAgICAgICAgICAgIHl5OiAnJWQg4YCU4YC+4YCF4YC6J1xuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b4YGB4YGC4YGD4YGE4YGF4YGG4YGH4YGI4YGJ4YGAXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0IC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDFzdCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG15O1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///72\n")},73:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var mt = moment.defineLocale('mt', {\n        months : 'Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru'.split('_'),\n        monthsShort : 'Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ'.split('_'),\n        weekdays : 'Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt'.split('_'),\n        weekdaysShort : 'Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib'.split('_'),\n        weekdaysMin : 'Ħa_Tn_Tl_Er_Ħa_Ġi_Si'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Illum fil-]LT',\n            nextDay : '[Għada fil-]LT',\n            nextWeek : 'dddd [fil-]LT',\n            lastDay : '[Il-bieraħ fil-]LT',\n            lastWeek : 'dddd [li għadda] [fil-]LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'f’ %s',\n            past : '%s ilu',\n            s : 'ftit sekondi',\n            ss : '%d sekondi',\n            m : 'minuta',\n            mm : '%d minuti',\n            h : 'siegħa',\n            hh : '%d siegħat',\n            d : 'ġurnata',\n            dd : '%d ġranet',\n            M : 'xahar',\n            MM : '%d xhur',\n            y : 'sena',\n            yy : '%d sni'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal: '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return mt;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tdC5qcz8xYjQ1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QscUNBQXFDLElBQUk7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiI3My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIG10ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbXQnLCB7XG4gICAgICAgIG1vbnRocyA6ICdKYW5uYXJfRnJhcl9NYXJ6dV9BcHJpbF9NZWpqdV/EoHVuanVfTHVsanVfQXd3aXNzdV9TZXR0ZW1icnVfT3R0dWJydV9Ob3ZlbWJydV9EacSLZW1icnUnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ0phbl9GcmFfTWFyX0Fwcl9NZWpfxKB1bl9MdWxfQXd3X1NldF9PdHRfTm92X0RpxIsnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzIDogJ0lsLcSmYWRkX0l0LVRuZWpuX0l0LVRsaWV0YV9MLUVyYmfEp2FfSWwtxKZhbWlzX0lsLcSgaW1nxKdhX0lzLVNpYnQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAnxKZhZF9UbmVfVGxpX0VyYl/EpmFtX8SgaW1fU2liJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICfEpmFfVG5fVGxfRXJfxKZhX8SgaV9TaScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdISDptbScsXG4gICAgICAgICAgICBMVFMgOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgOiAnW0lsbHVtIGZpbC1dTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICdbR8SnYWRhIGZpbC1dTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnZGRkZCBbZmlsLV1MVCcsXG4gICAgICAgICAgICBsYXN0RGF5IDogJ1tJbC1iaWVyYcSnIGZpbC1dTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiAnZGRkZCBbbGkgZ8SnYWRkYV0gW2ZpbC1dTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ2bigJkgJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICclcyBpbHUnLFxuICAgICAgICAgICAgcyA6ICdmdGl0IHNla29uZGknLFxuICAgICAgICAgICAgc3MgOiAnJWQgc2Vrb25kaScsXG4gICAgICAgICAgICBtIDogJ21pbnV0YScsXG4gICAgICAgICAgICBtbSA6ICclZCBtaW51dGknLFxuICAgICAgICAgICAgaCA6ICdzaWVnxKdhJyxcbiAgICAgICAgICAgIGhoIDogJyVkIHNpZWfEp2F0JyxcbiAgICAgICAgICAgIGQgOiAnxKF1cm5hdGEnLFxuICAgICAgICAgICAgZGQgOiAnJWQgxKFyYW5ldCcsXG4gICAgICAgICAgICBNIDogJ3hhaGFyJyxcbiAgICAgICAgICAgIE1NIDogJyVkIHhodXInLFxuICAgICAgICAgICAgeSA6ICdzZW5hJyxcbiAgICAgICAgICAgIHl5IDogJyVkIHNuaSdcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZSA6IC9cXGR7MSwyfcK6LyxcbiAgICAgICAgb3JkaW5hbDogJyVkwronLFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA0ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBtdDtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///73\n")},74:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var msMy = moment.defineLocale('ms-my', {\n        months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),\n        monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n        weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n        weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n        weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat : {\n            LT : 'HH.mm',\n            LTS : 'HH.mm.ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY [pukul] HH.mm',\n            LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n        },\n        meridiemParse: /pagi|tengahari|petang|malam/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'tengahari') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'petang' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'tengahari';\n            } else if (hours < 19) {\n                return 'petang';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar : {\n            sameDay : '[Hari ini pukul] LT',\n            nextDay : '[Esok pukul] LT',\n            nextWeek : 'dddd [pukul] LT',\n            lastDay : '[Kelmarin pukul] LT',\n            lastWeek : 'dddd [lepas pukul] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'dalam %s',\n            past : '%s yang lepas',\n            s : 'beberapa saat',\n            ss : '%d saat',\n            m : 'seminit',\n            mm : '%d minit',\n            h : 'sejam',\n            hh : '%d jam',\n            d : 'sehari',\n            dd : '%d hari',\n            M : 'sebulan',\n            MM : '%d bulan',\n            y : 'setahun',\n            yy : '%d tahun'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return msMy;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tcy1teS5qcz82NDAzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiI3NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIG1zTXkgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdtcy1teScsIHtcbiAgICAgICAgbW9udGhzIDogJ0phbnVhcmlfRmVicnVhcmlfTWFjX0FwcmlsX01laV9KdW5fSnVsYWlfT2dvc19TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EaXNlbWJlcicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAnSmFuX0ZlYl9NYWNfQXByX01laV9KdW5fSnVsX09nc19TZXBfT2t0X05vdl9EaXMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzIDogJ0FoYWRfSXNuaW5fU2VsYXNhX1JhYnVfS2hhbWlzX0p1bWFhdF9TYWJ0dScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICdBaGRfSXNuX1NlbF9SYWJfS2hhX0p1bV9TYWInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ0FoX0lzX1NsX1JiX0ttX0ptX1NiJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hILm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISC5tbS5zcycsXG4gICAgICAgICAgICBMIDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tJ1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAvcGFnaXx0ZW5nYWhhcml8cGV0YW5nfG1hbGFtLyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAncGFnaScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICd0ZW5nYWhhcmknKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTEgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ3BldGFuZycgfHwgbWVyaWRpZW0gPT09ICdtYWxhbScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbSA6IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXJzIDwgMTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3BhZ2knO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VycyA8IDE1KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICd0ZW5nYWhhcmknO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VycyA8IDE5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdwZXRhbmcnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ21hbGFtJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1tIYXJpIGluaSBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICdbRXNvayBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnZGRkZCBbcHVrdWxdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXkgOiAnW0tlbG1hcmluIHB1a3VsXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlayA6ICdkZGRkIFtsZXBhcyBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ2RhbGFtICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAnJXMgeWFuZyBsZXBhcycsXG4gICAgICAgICAgICBzIDogJ2JlYmVyYXBhIHNhYXQnLFxuICAgICAgICAgICAgc3MgOiAnJWQgc2FhdCcsXG4gICAgICAgICAgICBtIDogJ3NlbWluaXQnLFxuICAgICAgICAgICAgbW0gOiAnJWQgbWluaXQnLFxuICAgICAgICAgICAgaCA6ICdzZWphbScsXG4gICAgICAgICAgICBoaCA6ICclZCBqYW0nLFxuICAgICAgICAgICAgZCA6ICdzZWhhcmknLFxuICAgICAgICAgICAgZGQgOiAnJWQgaGFyaScsXG4gICAgICAgICAgICBNIDogJ3NlYnVsYW4nLFxuICAgICAgICAgICAgTU0gOiAnJWQgYnVsYW4nLFxuICAgICAgICAgICAgeSA6ICdzZXRhaHVuJyxcbiAgICAgICAgICAgIHl5IDogJyVkIHRhaHVuJ1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA3ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxc3QgaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBtc015O1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///74\n")},75:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var ms = moment.defineLocale('ms', {\n        months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),\n        monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n        weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n        weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n        weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat : {\n            LT : 'HH.mm',\n            LTS : 'HH.mm.ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY [pukul] HH.mm',\n            LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n        },\n        meridiemParse: /pagi|tengahari|petang|malam/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'tengahari') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'petang' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'tengahari';\n            } else if (hours < 19) {\n                return 'petang';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar : {\n            sameDay : '[Hari ini pukul] LT',\n            nextDay : '[Esok pukul] LT',\n            nextWeek : 'dddd [pukul] LT',\n            lastDay : '[Kelmarin pukul] LT',\n            lastWeek : 'dddd [lepas pukul] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'dalam %s',\n            past : '%s yang lepas',\n            s : 'beberapa saat',\n            ss : '%d saat',\n            m : 'seminit',\n            mm : '%d minit',\n            h : 'sejam',\n            hh : '%d jam',\n            d : 'sehari',\n            dd : '%d hari',\n            M : 'sebulan',\n            MM : '%d bulan',\n            y : 'setahun',\n            yy : '%d tahun'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return ms;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tcy5qcz9lYmU0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiI3NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIG1zID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbXMnLCB7XG4gICAgICAgIG1vbnRocyA6ICdKYW51YXJpX0ZlYnJ1YXJpX01hY19BcHJpbF9NZWlfSnVuX0p1bGFpX09nb3NfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGlzZW1iZXInLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ0phbl9GZWJfTWFjX0Fwcl9NZWlfSnVuX0p1bF9PZ3NfU2VwX09rdF9Ob3ZfRGlzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6ICdBaGFkX0lzbmluX1NlbGFzYV9SYWJ1X0toYW1pc19KdW1hYXRfU2FidHUnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAnQWhkX0lzbl9TZWxfUmFiX0toYV9KdW1fU2FiJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICdBaF9Jc19TbF9SYl9LbV9KbV9TYicuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdISC5tbScsXG4gICAgICAgICAgICBMVFMgOiAnSEgubW0uc3MnLFxuICAgICAgICAgICAgTCA6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbSdcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL3BhZ2l8dGVuZ2FoYXJpfHBldGFuZ3xtYWxhbS8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ3BhZ2knKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAndGVuZ2FoYXJpJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDExID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICdwZXRhbmcnIHx8IG1lcmlkaWVtID09PSAnbWFsYW0nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW0gOiBmdW5jdGlvbiAoaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VycyA8IDExKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdwYWdpJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91cnMgPCAxNSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAndGVuZ2FoYXJpJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91cnMgPCAxOSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAncGV0YW5nJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdtYWxhbSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICdbSGFyaSBpbmkgcHVrdWxdIExUJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW0Vzb2sgcHVrdWxdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrIDogJ2RkZGQgW3B1a3VsXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5IDogJ1tLZWxtYXJpbiBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiAnZGRkZCBbbGVwYXMgcHVrdWxdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICdkYWxhbSAlcycsXG4gICAgICAgICAgICBwYXN0IDogJyVzIHlhbmcgbGVwYXMnLFxuICAgICAgICAgICAgcyA6ICdiZWJlcmFwYSBzYWF0JyxcbiAgICAgICAgICAgIHNzIDogJyVkIHNhYXQnLFxuICAgICAgICAgICAgbSA6ICdzZW1pbml0JyxcbiAgICAgICAgICAgIG1tIDogJyVkIG1pbml0JyxcbiAgICAgICAgICAgIGggOiAnc2VqYW0nLFxuICAgICAgICAgICAgaGggOiAnJWQgamFtJyxcbiAgICAgICAgICAgIGQgOiAnc2VoYXJpJyxcbiAgICAgICAgICAgIGRkIDogJyVkIGhhcmknLFxuICAgICAgICAgICAgTSA6ICdzZWJ1bGFuJyxcbiAgICAgICAgICAgIE1NIDogJyVkIGJ1bGFuJyxcbiAgICAgICAgICAgIHkgOiAnc2V0YWh1bicsXG4gICAgICAgICAgICB5eSA6ICclZCB0YWh1bidcbiAgICAgICAgfSxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNyAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMXN0IGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbXM7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///75\n")},76:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '१',\n        '2': '२',\n        '3': '३',\n        '4': '४',\n        '5': '५',\n        '6': '६',\n        '7': '७',\n        '8': '८',\n        '9': '९',\n        '0': '०'\n    },\n    numberMap = {\n        '१': '1',\n        '२': '2',\n        '३': '3',\n        '४': '4',\n        '५': '5',\n        '६': '6',\n        '७': '7',\n        '८': '8',\n        '९': '9',\n        '०': '0'\n    };\n\n    function relativeTimeMr(number, withoutSuffix, string, isFuture)\n    {\n        var output = '';\n        if (withoutSuffix) {\n            switch (string) {\n                case 's': output = 'काही सेकंद'; break;\n                case 'ss': output = '%d सेकंद'; break;\n                case 'm': output = 'एक मिनिट'; break;\n                case 'mm': output = '%d मिनिटे'; break;\n                case 'h': output = 'एक तास'; break;\n                case 'hh': output = '%d तास'; break;\n                case 'd': output = 'एक दिवस'; break;\n                case 'dd': output = '%d दिवस'; break;\n                case 'M': output = 'एक महिना'; break;\n                case 'MM': output = '%d महिने'; break;\n                case 'y': output = 'एक वर्ष'; break;\n                case 'yy': output = '%d वर्षे'; break;\n            }\n        }\n        else {\n            switch (string) {\n                case 's': output = 'काही सेकंदां'; break;\n                case 'ss': output = '%d सेकंदां'; break;\n                case 'm': output = 'एका मिनिटा'; break;\n                case 'mm': output = '%d मिनिटां'; break;\n                case 'h': output = 'एका तासा'; break;\n                case 'hh': output = '%d तासां'; break;\n                case 'd': output = 'एका दिवसा'; break;\n                case 'dd': output = '%d दिवसां'; break;\n                case 'M': output = 'एका महिन्या'; break;\n                case 'MM': output = '%d महिन्यां'; break;\n                case 'y': output = 'एका वर्षा'; break;\n                case 'yy': output = '%d वर्षां'; break;\n            }\n        }\n        return output.replace(/%d/i, number);\n    }\n\n    var mr = moment.defineLocale('mr', {\n        months : 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split('_'),\n        monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n        weekdaysShort : 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),\n        weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm वाजता',\n            LTS : 'A h:mm:ss वाजता',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm वाजता',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm वाजता'\n        },\n        calendar : {\n            sameDay : '[आज] LT',\n            nextDay : '[उद्या] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[काल] LT',\n            lastWeek: '[मागील] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future: '%sमध्ये',\n            past: '%sपूर्वी',\n            s: relativeTimeMr,\n            ss: relativeTimeMr,\n            m: relativeTimeMr,\n            mm: relativeTimeMr,\n            h: relativeTimeMr,\n            hh: relativeTimeMr,\n            d: relativeTimeMr,\n            dd: relativeTimeMr,\n            M: relativeTimeMr,\n            MM: relativeTimeMr,\n            y: relativeTimeMr,\n            yy: relativeTimeMr\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /रात्री|सकाळी|दुपारी|सायंकाळी/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'रात्री') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'सकाळी') {\n                return hour;\n            } else if (meridiem === 'दुपारी') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'सायंकाळी') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'रात्री';\n            } else if (hour < 10) {\n                return 'सकाळी';\n            } else if (hour < 17) {\n                return 'दुपारी';\n            } else if (hour < 20) {\n                return 'सायंकाळी';\n            } else {\n                return 'रात्री';\n            }\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return mr;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tci5qcz8zOWJkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdEO0FBQ2hELCtDQUErQztBQUMvQyw4Q0FBOEM7QUFDOUMsZ0RBQWdEO0FBQ2hELDRDQUE0QztBQUM1Qyw2Q0FBNkM7QUFDN0MsNkNBQTZDO0FBQzdDLDhDQUE4QztBQUM5Qyw4Q0FBOEM7QUFDOUMsK0NBQStDO0FBQy9DLDZDQUE2QztBQUM3QywrQ0FBK0M7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0Q7QUFDbEQsaURBQWlEO0FBQ2pELGdEQUFnRDtBQUNoRCxpREFBaUQ7QUFDakQsOENBQThDO0FBQzlDLCtDQUErQztBQUMvQywrQ0FBK0M7QUFDL0MsZ0RBQWdEO0FBQ2hELGlEQUFpRDtBQUNqRCxrREFBa0Q7QUFDbEQsK0NBQStDO0FBQy9DLGdEQUFnRDtBQUNoRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiI3Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgJzEnOiAn4KWnJyxcbiAgICAgICAgJzInOiAn4KWoJyxcbiAgICAgICAgJzMnOiAn4KWpJyxcbiAgICAgICAgJzQnOiAn4KWqJyxcbiAgICAgICAgJzUnOiAn4KWrJyxcbiAgICAgICAgJzYnOiAn4KWsJyxcbiAgICAgICAgJzcnOiAn4KWtJyxcbiAgICAgICAgJzgnOiAn4KWuJyxcbiAgICAgICAgJzknOiAn4KWvJyxcbiAgICAgICAgJzAnOiAn4KWmJ1xuICAgIH0sXG4gICAgbnVtYmVyTWFwID0ge1xuICAgICAgICAn4KWnJzogJzEnLFxuICAgICAgICAn4KWoJzogJzInLFxuICAgICAgICAn4KWpJzogJzMnLFxuICAgICAgICAn4KWqJzogJzQnLFxuICAgICAgICAn4KWrJzogJzUnLFxuICAgICAgICAn4KWsJzogJzYnLFxuICAgICAgICAn4KWtJzogJzcnLFxuICAgICAgICAn4KWuJzogJzgnLFxuICAgICAgICAn4KWvJzogJzknLFxuICAgICAgICAn4KWmJzogJzAnXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHJlbGF0aXZlVGltZU1yKG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSlcbiAgICB7XG4gICAgICAgIHZhciBvdXRwdXQgPSAnJztcbiAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoc3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAncyc6IG91dHB1dCA9ICfgpJXgpL7gpLngpYAg4KS44KWH4KSV4KSC4KSmJzsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3MnOiBvdXRwdXQgPSAnJWQg4KS44KWH4KSV4KSC4KSmJzsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnbSc6IG91dHB1dCA9ICfgpI/gpJUg4KSu4KS/4KSo4KS/4KSfJzsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnbW0nOiBvdXRwdXQgPSAnJWQg4KSu4KS/4KSo4KS/4KSf4KWHJzsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnaCc6IG91dHB1dCA9ICfgpI/gpJUg4KSk4KS+4KS4JzsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnaGgnOiBvdXRwdXQgPSAnJWQg4KSk4KS+4KS4JzsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6IG91dHB1dCA9ICfgpI/gpJUg4KSm4KS/4KS14KS4JzsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnZGQnOiBvdXRwdXQgPSAnJWQg4KSm4KS/4KS14KS4JzsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnTSc6IG91dHB1dCA9ICfgpI/gpJUg4KSu4KS54KS/4KSo4KS+JzsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnTU0nOiBvdXRwdXQgPSAnJWQg4KSu4KS54KS/4KSo4KWHJzsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAneSc6IG91dHB1dCA9ICfgpI/gpJUg4KS14KSw4KWN4KS3JzsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAneXknOiBvdXRwdXQgPSAnJWQg4KS14KSw4KWN4KS34KWHJzsgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHN0cmluZykge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3MnOiBvdXRwdXQgPSAn4KSV4KS+4KS54KWAIOCkuOClh+CkleCkguCkpuCkvuCkgic7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3NzJzogb3V0cHV0ID0gJyVkIOCkuOClh+CkleCkguCkpuCkvuCkgic7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ20nOiBvdXRwdXQgPSAn4KSP4KSV4KS+IOCkruCkv+CkqOCkv+Ckn+Ckvic7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ21tJzogb3V0cHV0ID0gJyVkIOCkruCkv+CkqOCkv+Ckn+CkvuCkgic7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2gnOiBvdXRwdXQgPSAn4KSP4KSV4KS+IOCkpOCkvuCkuOCkvic7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2hoJzogb3V0cHV0ID0gJyVkIOCkpOCkvuCkuOCkvuCkgic7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOiBvdXRwdXQgPSAn4KSP4KSV4KS+IOCkpuCkv+CkteCkuOCkvic7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2RkJzogb3V0cHV0ID0gJyVkIOCkpuCkv+CkteCkuOCkvuCkgic7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ00nOiBvdXRwdXQgPSAn4KSP4KSV4KS+IOCkruCkueCkv+CkqOCljeCkr+Ckvic7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ01NJzogb3V0cHV0ID0gJyVkIOCkruCkueCkv+CkqOCljeCkr+CkvuCkgic7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3knOiBvdXRwdXQgPSAn4KSP4KSV4KS+IOCkteCksOCljeCkt+Ckvic7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3l5Jzogb3V0cHV0ID0gJyVkIOCkteCksOCljeCkt+CkvuCkgic7IGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXQucmVwbGFjZSgvJWQvaSwgbnVtYmVyKTtcbiAgICB9XG5cbiAgICB2YXIgbXIgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdtcicsIHtcbiAgICAgICAgbW9udGhzIDogJ+CknOCkvuCkqOClh+CkteCkvuCksOClgF/gpKvgpYfgpKzgpY3gpLDgpYHgpLXgpL7gpLDgpYBf4KSu4KS+4KSw4KWN4KSaX+Ckj+CkquCljeCksOCkv+Cksl/gpK7gpYdf4KSc4KWC4KSoX+CknOClgeCksuCliF/gpJHgpJfgpLjgpY3gpJ9f4KS44KSq4KWN4KSf4KWH4KSC4KSs4KSwX+CkkeCkleCljeCkn+Cli+CkrOCksF/gpKjgpYvgpLXgpY3gpLngpYfgpILgpKzgpLBf4KSh4KS/4KS44KWH4KSC4KSs4KSwJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydDogJ+CknOCkvuCkqOClhy5f4KSr4KWH4KSs4KWN4KSw4KWBLl/gpK7gpL7gpLDgpY3gpJouX+Ckj+CkquCljeCksOCkvy5f4KSu4KWHLl/gpJzgpYLgpKguX+CknOClgeCksuCliC5f4KSR4KSXLl/gpLjgpKrgpY3gpJ/gpYfgpIIuX+CkkeCkleCljeCkn+Cliy5f4KSo4KWL4KS14KWN4KS54KWH4KSCLl/gpKHgpL/gpLjgpYfgpIIuJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0IDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXMgOiAn4KSw4KS14KS/4KS14KS+4KSwX+CkuOCli+CkruCkteCkvuCksF/gpK7gpILgpJfgpLPgpLXgpL7gpLBf4KSs4KWB4KSn4KS14KS+4KSwX+Ckl+ClgeCksOClguCkteCkvuCksF/gpLbgpYHgpJXgpY3gpLDgpLXgpL7gpLBf4KS24KSo4KS/4KS14KS+4KSwJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ+CksOCkteCkv1/gpLjgpYvgpK5f4KSu4KSC4KSX4KSzX+CkrOClgeCkp1/gpJfgpYHgpLDgpYJf4KS24KWB4KSV4KWN4KSwX+CktuCkqOCkvycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAn4KSwX+CkuOCli1/gpK7gpIJf4KSs4KWBX+Ckl+ClgV/gpLbgpYFf4KS2Jy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0EgaDptbSDgpLXgpL7gpJzgpKTgpL4nLFxuICAgICAgICAgICAgTFRTIDogJ0EgaDptbTpzcyDgpLXgpL7gpJzgpKTgpL4nLFxuICAgICAgICAgICAgTCA6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdEIE1NTU0gWVlZWSwgQSBoOm1tIOCkteCkvuCknOCkpOCkvicsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0g4KS14KS+4KSc4KSk4KS+J1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgOiAnW+CkhuCknF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICdb4KSJ4KSm4KWN4KSv4KS+XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdkZGRkLCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5IDogJ1vgpJXgpL7gpLJdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW+CkruCkvuCkl+ClgOCksl0gZGRkZCwgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXPgpK7gpKfgpY3gpK/gpYcnLFxuICAgICAgICAgICAgcGFzdDogJyVz4KSq4KWC4KSw4KWN4KS14KWAJyxcbiAgICAgICAgICAgIHM6IHJlbGF0aXZlVGltZU1yLFxuICAgICAgICAgICAgc3M6IHJlbGF0aXZlVGltZU1yLFxuICAgICAgICAgICAgbTogcmVsYXRpdmVUaW1lTXIsXG4gICAgICAgICAgICBtbTogcmVsYXRpdmVUaW1lTXIsXG4gICAgICAgICAgICBoOiByZWxhdGl2ZVRpbWVNcixcbiAgICAgICAgICAgIGhoOiByZWxhdGl2ZVRpbWVNcixcbiAgICAgICAgICAgIGQ6IHJlbGF0aXZlVGltZU1yLFxuICAgICAgICAgICAgZGQ6IHJlbGF0aXZlVGltZU1yLFxuICAgICAgICAgICAgTTogcmVsYXRpdmVUaW1lTXIsXG4gICAgICAgICAgICBNTTogcmVsYXRpdmVUaW1lTXIsXG4gICAgICAgICAgICB5OiByZWxhdGl2ZVRpbWVNcixcbiAgICAgICAgICAgIHl5OiByZWxhdGl2ZVRpbWVNclxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b4KWn4KWo4KWp4KWq4KWr4KWs4KWt4KWu4KWv4KWmXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv4KSw4KS+4KSk4KWN4KSw4KWAfOCkuOCkleCkvuCks+ClgHzgpKbgpYHgpKrgpL7gpLDgpYB84KS44KS+4KSv4KSC4KSV4KS+4KSz4KWALyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyIDogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+CksOCkvuCkpOCljeCksOClgCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA8IDQgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CkuOCkleCkvuCks+ClgCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgpKbgpYHgpKrgpL7gpLDgpYAnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTAgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CkuOCkvuCkr+CkguCkleCkvuCks+ClgCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpLDgpL7gpKTgpY3gpLDgpYAnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CkuOCkleCkvuCks+ClgCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KSm4KWB4KSq4KS+4KSw4KWAJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpLjgpL7gpK/gpILgpJXgpL7gpLPgpYAnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CksOCkvuCkpOCljeCksOClgCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDYgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDFzdCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1yO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///76\n")},77:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    function translate(number, withoutSuffix, key, isFuture) {\n        switch (key) {\n            case 's':\n                return withoutSuffix ? 'хэдхэн секунд' : 'хэдхэн секундын';\n            case 'ss':\n                return number + (withoutSuffix ? ' секунд' : ' секундын');\n            case 'm':\n            case 'mm':\n                return number + (withoutSuffix ? ' минут' : ' минутын');\n            case 'h':\n            case 'hh':\n                return number + (withoutSuffix ? ' цаг' : ' цагийн');\n            case 'd':\n            case 'dd':\n                return number + (withoutSuffix ? ' өдөр' : ' өдрийн');\n            case 'M':\n            case 'MM':\n                return number + (withoutSuffix ? ' сар' : ' сарын');\n            case 'y':\n            case 'yy':\n                return number + (withoutSuffix ? ' жил' : ' жилийн');\n            default:\n                return number;\n        }\n    }\n\n    var mn = moment.defineLocale('mn', {\n        months : 'Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар'.split('_'),\n        monthsShort : '1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба'.split('_'),\n        weekdaysShort : 'Ням_Дав_Мяг_Лха_Пүр_Баа_Бям'.split('_'),\n        weekdaysMin : 'Ня_Да_Мя_Лх_Пү_Ба_Бя'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY-MM-DD',\n            LL : 'YYYY оны MMMMын D',\n            LLL : 'YYYY оны MMMMын D HH:mm',\n            LLLL : 'dddd, YYYY оны MMMMын D HH:mm'\n        },\n        meridiemParse: /ҮӨ|ҮХ/i,\n        isPM : function (input) {\n            return input === 'ҮХ';\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ҮӨ';\n            } else {\n                return 'ҮХ';\n            }\n        },\n        calendar : {\n            sameDay : '[Өнөөдөр] LT',\n            nextDay : '[Маргааш] LT',\n            nextWeek : '[Ирэх] dddd LT',\n            lastDay : '[Өчигдөр] LT',\n            lastWeek : '[Өнгөрсөн] dddd LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s дараа',\n            past : '%s өмнө',\n            s : translate,\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : translate,\n            hh : translate,\n            d : translate,\n            dd : translate,\n            M : translate,\n            MM : translate,\n            y : translate,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2} өдөр/,\n        ordinal : function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + ' өдөр';\n                default:\n                    return number;\n            }\n        }\n    });\n\n    return mn;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tbi5qcz85NThiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiI3Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAn0YXRjdC00YXRjdC9INGB0LXQutGD0L3QtCcgOiAn0YXRjdC00YXRjdC9INGB0LXQutGD0L3QtNGL0L0nO1xuICAgICAgICAgICAgY2FzZSAnc3MnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAod2l0aG91dFN1ZmZpeCA/ICcg0YHQtdC60YPQvdC0JyA6ICcg0YHQtdC60YPQvdC00YvQvScpO1xuICAgICAgICAgICAgY2FzZSAnbSc6XG4gICAgICAgICAgICBjYXNlICdtbSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICh3aXRob3V0U3VmZml4ID8gJyDQvNC40L3Rg9GCJyA6ICcg0LzQuNC90YPRgtGL0L0nKTtcbiAgICAgICAgICAgIGNhc2UgJ2gnOlxuICAgICAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAod2l0aG91dFN1ZmZpeCA/ICcg0YbQsNCzJyA6ICcg0YbQsNCz0LjQudC9Jyk7XG4gICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgIGNhc2UgJ2RkJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKHdpdGhvdXRTdWZmaXggPyAnINOp0LTTqdGAJyA6ICcg06nQtNGA0LjQudC9Jyk7XG4gICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKHdpdGhvdXRTdWZmaXggPyAnINGB0LDRgCcgOiAnINGB0LDRgNGL0L0nKTtcbiAgICAgICAgICAgIGNhc2UgJ3knOlxuICAgICAgICAgICAgY2FzZSAneXknOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAod2l0aG91dFN1ZmZpeCA/ICcg0LbQuNC7JyA6ICcg0LbQuNC70LjQudC9Jyk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbW4gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdtbicsIHtcbiAgICAgICAgbW9udGhzIDogJ9Cd0Y3Qs9C00q/Qs9GN0Y3RgCDRgdCw0YBf0KXQvtGR0YDQtNGD0LPQsNCw0YAg0YHQsNGAX9CT0YPRgNCw0LLQtNGD0LPQsNCw0YAg0YHQsNGAX9CU06nRgNOp0LLQtNKv0LPRjdGN0YAg0YHQsNGAX9Ci0LDQstC00YPQs9Cw0LDRgCDRgdCw0YBf0JfRg9GA0LPQsNC00YPQs9Cw0LDRgCDRgdCw0YBf0JTQvtC70LTRg9Cz0LDQsNGAINGB0LDRgF/QndCw0LnQvNC00YPQs9Cw0LDRgCDRgdCw0YBf0JXRgdC00q/Qs9GN0Y3RgCDRgdCw0YBf0JDRgNCw0LLQtNGD0LPQsNCw0YAg0YHQsNGAX9CQ0YDQstCw0L0g0L3RjdCz0LTSr9Cz0Y3RjdGAINGB0LDRgF/QkNGA0LLQsNC9INGF0L7RkdGA0LTRg9Cz0LDQsNGAINGB0LDRgCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAnMSDRgdCw0YBfMiDRgdCw0YBfMyDRgdCw0YBfNCDRgdCw0YBfNSDRgdCw0YBfNiDRgdCw0YBfNyDRgdCw0YBfOCDRgdCw0YBfOSDRgdCw0YBfMTAg0YHQsNGAXzExINGB0LDRgF8xMiDRgdCw0YAnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICB3ZWVrZGF5cyA6ICfQndGP0Lxf0JTQsNCy0LDQsF/QnNGP0LPQvNCw0YBf0JvRhdCw0LPQstCwX9Cf0q/RgNGN0LJf0JHQsNCw0YHQsNC9X9CR0Y/QvNCx0LAnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAn0J3Rj9C8X9CU0LDQsl/QnNGP0LNf0JvRhdCwX9Cf0q/RgF/QkdCw0LBf0JHRj9C8Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICfQndGPX9CU0LBf0JzRj1/Qm9GFX9Cf0q9f0JHQsF/QkdGPJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ1lZWVktTU0tREQnLFxuICAgICAgICAgICAgTEwgOiAnWVlZWSDQvtC90YsgTU1NTdGL0L0gRCcsXG4gICAgICAgICAgICBMTEwgOiAnWVlZWSDQvtC90YsgTU1NTdGL0L0gRCBISDptbScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQsIFlZWVkg0L7QvdGLIE1NTU3Ri9C9IEQgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/SrtOofNKu0KUvaSxcbiAgICAgICAgaXNQTSA6IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ID09PSAn0q7QpSc7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtIDogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0q7TqCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0q7QpSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICdb06jQvdOp06nQtNOp0YBdIExUJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW9Cc0LDRgNCz0LDQsNGIXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdb0JjRgNGN0YVdIGRkZGQgTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdb06jRh9C40LPQtNOp0YBdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogJ1vTqNC90LPTqdGA0YHTqdC9XSBkZGRkIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICclcyDQtNCw0YDQsNCwJyxcbiAgICAgICAgICAgIHBhc3QgOiAnJXMg06nQvNC906knLFxuICAgICAgICAgICAgcyA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHNzIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbSA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1tIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaCA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGhoIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZCA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGRkIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTSA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE1NIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgeSA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHl5IDogdHJhbnNsYXRlXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSDTqdC006nRgC8sXG4gICAgICAgIG9yZGluYWwgOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICcg06nQtNOp0YAnO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBtbjtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///77\n")},78:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var ml = moment.defineLocale('ml', {\n        months : 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split('_'),\n        monthsShort : 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split('_'),\n        weekdaysShort : 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),\n        weekdaysMin : 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm -നു',\n            LTS : 'A h:mm:ss -നു',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm -നു',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm -നു'\n        },\n        calendar : {\n            sameDay : '[ഇന്ന്] LT',\n            nextDay : '[നാളെ] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[ഇന്നലെ] LT',\n            lastWeek : '[കഴിഞ്ഞ] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s കഴിഞ്ഞ്',\n            past : '%s മുൻപ്',\n            s : 'അൽപ നിമിഷങ്ങൾ',\n            ss : '%d സെക്കൻഡ്',\n            m : 'ഒരു മിനിറ്റ്',\n            mm : '%d മിനിറ്റ്',\n            h : 'ഒരു മണിക്കൂർ',\n            hh : '%d മണിക്കൂർ',\n            d : 'ഒരു ദിവസം',\n            dd : '%d ദിവസം',\n            M : 'ഒരു മാസം',\n            MM : '%d മാസം',\n            y : 'ഒരു വർഷം',\n            yy : '%d വർഷം'\n        },\n        meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if ((meridiem === 'രാത്രി' && hour >= 4) ||\n                    meridiem === 'ഉച്ച കഴിഞ്ഞ്' ||\n                    meridiem === 'വൈകുന്നേരം') {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'രാത്രി';\n            } else if (hour < 12) {\n                return 'രാവിലെ';\n            } else if (hour < 17) {\n                return 'ഉച്ച കഴിഞ്ഞ്';\n            } else if (hour < 20) {\n                return 'വൈകുന്നേരം';\n            } else {\n                return 'രാത്രി';\n            }\n        }\n    });\n\n    return ml;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tbC5qcz8wMmZiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwiZmlsZSI6Ijc4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgbWwgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdtbCcsIHtcbiAgICAgICAgbW9udGhzIDogJ+C0nOC0qOC1geC0teC0sOC0v1/gtKvgtYbgtKzgtY3gtLDgtYHgtLXgtLDgtL9f4LSu4LS+4LW84LSa4LWN4LSa4LWNX+C0j+C0quC1jeC0sOC0v+C1vV/gtK7gtYfgtK/gtY1f4LSc4LWC4LW6X+C0nOC1guC0suC1iF/gtJPgtJfgtLjgtY3gtLHgtY3gtLHgtY1f4LS44LWG4LSq4LWN4LSx4LWN4LSx4LSC4LSs4LW8X+C0kuC0leC1jeC0n+C1i+C0rOC1vF/gtKjgtLXgtILgtKzgtbxf4LSh4LS/4LS44LSC4LSs4LW8Jy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICfgtJzgtKjgtYEuX+C0q+C1huC0rOC1jeC0sOC1gS5f4LSu4LS+4LW8Ll/gtI/gtKrgtY3gtLDgtL8uX+C0ruC1h+C0r+C1jV/gtJzgtYLgtbpf4LSc4LWC4LSy4LWILl/gtJPgtJcuX+C0uOC1huC0quC1jeC0seC1jeC0sS5f4LSS4LSV4LWN4LSf4LWLLl/gtKjgtLXgtIIuX+C0oeC0v+C0uOC0gi4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICB3ZWVrZGF5cyA6ICfgtJ7gtL7gtK/gtLHgtL7gtLTgtY3gtJpf4LSk4LS/4LSZ4LWN4LSV4LSz4LS+4LS04LWN4LSaX+C0muC1iuC0teC1jeC0teC0vuC0tOC1jeC0ml/gtKzgtYHgtKfgtKjgtL7gtLTgtY3gtJpf4LS14LWN4LSv4LS+4LS04LS+4LS04LWN4LSaX+C0teC1huC0s+C1jeC0s+C0v+C0r+C0vuC0tOC1jeC0ml/gtLbgtKjgtL/gtK/gtL7gtLTgtY3gtJonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAn4LSe4LS+4LSv4LW8X+C0pOC0v+C0meC1jeC0leC1vl/gtJrgtYrgtLXgtY3gtLVf4LSs4LWB4LSn4LW7X+C0teC1jeC0r+C0vuC0tOC0gl/gtLXgtYbgtLPgtY3gtLPgtL9f4LS24LSo4LS/Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICfgtJ7gtL5f4LSk4LS/X+C0muC1il/gtKzgtYFf4LS14LWN4LSv4LS+X+C0teC1hl/gtLYnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnQSBoOm1tIC3gtKjgtYEnLFxuICAgICAgICAgICAgTFRTIDogJ0EgaDptbTpzcyAt4LSo4LWBJyxcbiAgICAgICAgICAgIEwgOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVksIEEgaDptbSAt4LSo4LWBJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSAt4LSo4LWBJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgOiAnW+C0h+C0qOC1jeC0qOC1jV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICdb4LSo4LS+4LSz4LWGXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdkZGRkLCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5IDogJ1vgtIfgtKjgtY3gtKjgtLLgtYZdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogJ1vgtJXgtLTgtL/gtJ7gtY3gtJ5dIGRkZGQsIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICclcyDgtJXgtLTgtL/gtJ7gtY3gtJ7gtY0nLFxuICAgICAgICAgICAgcGFzdCA6ICclcyDgtK7gtYHgtbvgtKrgtY0nLFxuICAgICAgICAgICAgcyA6ICfgtIXgtb3gtKog4LSo4LS/4LSu4LS/4LS34LSZ4LWN4LSZ4LW+JyxcbiAgICAgICAgICAgIHNzIDogJyVkIOC0uOC1huC0leC1jeC0leC1u+C0oeC1jScsXG4gICAgICAgICAgICBtIDogJ+C0kuC0sOC1gSDgtK7gtL/gtKjgtL/gtLHgtY3gtLHgtY0nLFxuICAgICAgICAgICAgbW0gOiAnJWQg4LSu4LS/4LSo4LS/4LSx4LWN4LSx4LWNJyxcbiAgICAgICAgICAgIGggOiAn4LSS4LSw4LWBIOC0ruC0o+C0v+C0leC1jeC0leC1guC1vCcsXG4gICAgICAgICAgICBoaCA6ICclZCDgtK7gtKPgtL/gtJXgtY3gtJXgtYLgtbwnLFxuICAgICAgICAgICAgZCA6ICfgtJLgtLDgtYEg4LSm4LS/4LS14LS44LSCJyxcbiAgICAgICAgICAgIGRkIDogJyVkIOC0puC0v+C0teC0uOC0gicsXG4gICAgICAgICAgICBNIDogJ+C0kuC0sOC1gSDgtK7gtL7gtLjgtIInLFxuICAgICAgICAgICAgTU0gOiAnJWQg4LSu4LS+4LS44LSCJyxcbiAgICAgICAgICAgIHkgOiAn4LSS4LSw4LWBIOC0teC1vOC0t+C0gicsXG4gICAgICAgICAgICB5eSA6ICclZCDgtLXgtbzgtLfgtIInXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/gtLDgtL7gtKTgtY3gtLDgtL984LSw4LS+4LS14LS/4LSy4LWGfOC0ieC0muC1jeC0miDgtJXgtLTgtL/gtJ7gtY3gtJ7gtY184LS14LWI4LSV4LWB4LSo4LWN4LSo4LWH4LSw4LSCfOC0sOC0vuC0pOC1jeC0sOC0vy9pLFxuICAgICAgICBtZXJpZGllbUhvdXIgOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChtZXJpZGllbSA9PT0gJ+C0sOC0vuC0pOC1jeC0sOC0vycgJiYgaG91ciA+PSA0KSB8fFxuICAgICAgICAgICAgICAgICAgICBtZXJpZGllbSA9PT0gJ+C0ieC0muC1jeC0miDgtJXgtLTgtL/gtJ7gtY3gtJ7gtY0nIHx8XG4gICAgICAgICAgICAgICAgICAgIG1lcmlkaWVtID09PSAn4LS14LWI4LSV4LWB4LSo4LWN4LSo4LWH4LSw4LSCJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbSA6IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LSw4LS+4LSk4LWN4LSw4LS/JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgtLDgtL7gtLXgtL/gtLLgtYYnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+C0ieC0muC1jeC0miDgtJXgtLTgtL/gtJ7gtY3gtJ7gtY0nO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+C0teC1iOC0leC1geC0qOC1jeC0qOC1h+C0sOC0gic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LSw4LS+4LSk4LWN4LSw4LS/JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1sO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///78\n")},79:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var mk = moment.defineLocale('mk', {\n        months : 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split('_'),\n        monthsShort : 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),\n        weekdays : 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split('_'),\n        weekdaysShort : 'нед_пон_вто_сре_чет_пет_саб'.split('_'),\n        weekdaysMin : 'нe_пo_вт_ср_че_пе_сa'.split('_'),\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'D.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY H:mm',\n            LLLL : 'dddd, D MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay : '[Денес во] LT',\n            nextDay : '[Утре во] LT',\n            nextWeek : '[Во] dddd [во] LT',\n            lastDay : '[Вчера во] LT',\n            lastWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 6:\n                        return '[Изминатата] dddd [во] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[Изминатиот] dddd [во] LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'после %s',\n            past : 'пред %s',\n            s : 'неколку секунди',\n            ss : '%d секунди',\n            m : 'минута',\n            mm : '%d минути',\n            h : 'час',\n            hh : '%d часа',\n            d : 'ден',\n            dd : '%d дена',\n            M : 'месец',\n            MM : '%d месеци',\n            y : 'година',\n            yy : '%d години'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n        ordinal : function (number) {\n            var lastDigit = number % 10,\n                last2Digits = number % 100;\n            if (number === 0) {\n                return number + '-ев';\n            } else if (last2Digits === 0) {\n                return number + '-ен';\n            } else if (last2Digits > 10 && last2Digits < 20) {\n                return number + '-ти';\n            } else if (lastDigit === 1) {\n                return number + '-ви';\n            } else if (lastDigit === 2) {\n                return number + '-ри';\n            } else if (lastDigit === 7 || lastDigit === 8) {\n                return number + '-ми';\n            } else {\n                return number + '-ти';\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return mk;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tay5qcz82OTA5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiNzkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBtayA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ21rJywge1xuICAgICAgICBtb250aHMgOiAn0ZjQsNC90YPQsNGA0Lhf0YTQtdCy0YDRg9Cw0YDQuF/QvNCw0YDRgl/QsNC/0YDQuNC7X9C80LDRmF/RmNGD0L3QuF/RmNGD0LvQuF/QsNCy0LPRg9GB0YJf0YHQtdC/0YLQtdC80LLRgNC4X9C+0LrRgtC+0LzQstGA0Lhf0L3QvtC10LzQstGA0Lhf0LTQtdC60LXQvNCy0YDQuCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAn0ZjQsNC9X9GE0LXQsl/QvNCw0YBf0LDQv9GAX9C80LDRmF/RmNGD0L1f0ZjRg9C7X9Cw0LLQs1/RgdC10L9f0L7QutGCX9C90L7QtV/QtNC10LonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzIDogJ9C90LXQtNC10LvQsF/Qv9C+0L3QtdC00LXQu9C90LjQul/QstGC0L7RgNC90LjQul/RgdGA0LXQtNCwX9GH0LXRgtCy0YDRgtC+0Lpf0L/QtdGC0L7Qul/RgdCw0LHQvtGC0LAnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAn0L3QtdC0X9C/0L7QvV/QstGC0L5f0YHRgNC1X9GH0LXRgl/Qv9C10YJf0YHQsNCxJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICfQvWVf0L9vX9Cy0YJf0YHRgF/Rh9C1X9C/0LVf0YFhJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdELk1NLllZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBEIE1NTU0gWVlZWSBIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgOiAnW9CU0LXQvdC10YEg0LLQvl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICdb0KPRgtGA0LUg0LLQvl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnW9CS0L5dIGRkZGQgW9Cy0L5dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXkgOiAnW9CS0YfQtdGA0LAg0LLQvl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vQmNC30LzQuNC90LDRgtCw0YLQsF0gZGRkZCBb0LLQvl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vQmNC30LzQuNC90LDRgtC40L7Rgl0gZGRkZCBb0LLQvl0gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAn0L/QvtGB0LvQtSAlcycsXG4gICAgICAgICAgICBwYXN0IDogJ9C/0YDQtdC0ICVzJyxcbiAgICAgICAgICAgIHMgOiAn0L3QtdC60L7Qu9C60YMg0YHQtdC60YPQvdC00LgnLFxuICAgICAgICAgICAgc3MgOiAnJWQg0YHQtdC60YPQvdC00LgnLFxuICAgICAgICAgICAgbSA6ICfQvNC40L3Rg9GC0LAnLFxuICAgICAgICAgICAgbW0gOiAnJWQg0LzQuNC90YPRgtC4JyxcbiAgICAgICAgICAgIGggOiAn0YfQsNGBJyxcbiAgICAgICAgICAgIGhoIDogJyVkINGH0LDRgdCwJyxcbiAgICAgICAgICAgIGQgOiAn0LTQtdC9JyxcbiAgICAgICAgICAgIGRkIDogJyVkINC00LXQvdCwJyxcbiAgICAgICAgICAgIE0gOiAn0LzQtdGB0LXRhicsXG4gICAgICAgICAgICBNTSA6ICclZCDQvNC10YHQtdGG0LgnLFxuICAgICAgICAgICAgeSA6ICfQs9C+0LTQuNC90LAnLFxuICAgICAgICAgICAgeXkgOiAnJWQg0LPQvtC00LjQvdC4J1xuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0tKNC10LJ80LXQvXzRgtC4fNCy0Lh80YDQuHzQvNC4KS8sXG4gICAgICAgIG9yZGluYWwgOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgbGFzdERpZ2l0ID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgbGFzdDJEaWdpdHMgPSBudW1iZXIgJSAxMDA7XG4gICAgICAgICAgICBpZiAobnVtYmVyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0LXQsic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxhc3QyRGlnaXRzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0LXQvSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxhc3QyRGlnaXRzID4gMTAgJiYgbGFzdDJEaWdpdHMgPCAyMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdGC0LgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChsYXN0RGlnaXQgPT09IDEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3QstC4JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdERpZ2l0ID09PSAyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0YDQuCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxhc3REaWdpdCA9PT0gNyB8fCBsYXN0RGlnaXQgPT09IDgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3QvNC4JztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0YLQuCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDcgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDFzdCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1rO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///79\n")},8:function(module,__webpack_exports__,__webpack_require__){"use strict";eval("/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return TemplateDependency; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"c\", function() { return TemplateRegistryEntry; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return Loader; });\n/* harmony import */ var aurelia_path__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7);\n/* harmony import */ var aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4);\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\n\n\n\n\n\nvar TemplateDependency = function TemplateDependency(src, name) {\n  \n\n  this.src = src;\n  this.name = name;\n};\n\nvar TemplateRegistryEntry = function () {\n  function TemplateRegistryEntry(address) {\n    \n\n    this.templateIsLoaded = false;\n    this.factoryIsReady = false;\n    this.resources = null;\n    this.dependencies = null;\n\n    this.address = address;\n    this.onReady = null;\n    this._template = null;\n    this._factory = null;\n  }\n\n  TemplateRegistryEntry.prototype.addDependency = function addDependency(src, name) {\n    var finalSrc = typeof src === 'string' ? Object(aurelia_path__WEBPACK_IMPORTED_MODULE_0__[\"relativeToFile\"])(src, this.address) : aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[/* Origin */ \"a\"].get(src).moduleId;\n\n    this.dependencies.push(new TemplateDependency(finalSrc, name));\n  };\n\n  _createClass(TemplateRegistryEntry, [{\n    key: 'template',\n    get: function get() {\n      return this._template;\n    },\n    set: function set(value) {\n      var address = this.address;\n      var requires = void 0;\n      var current = void 0;\n      var src = void 0;\n      var dependencies = void 0;\n\n      this._template = value;\n      this.templateIsLoaded = true;\n\n      requires = value.content.querySelectorAll('require');\n      dependencies = this.dependencies = new Array(requires.length);\n\n      for (var i = 0, ii = requires.length; i < ii; ++i) {\n        current = requires[i];\n        src = current.getAttribute('from');\n\n        if (!src) {\n          throw new Error('<require> element in ' + address + ' has no \"from\" attribute.');\n        }\n\n        dependencies[i] = new TemplateDependency(Object(aurelia_path__WEBPACK_IMPORTED_MODULE_0__[\"relativeToFile\"])(src, address), current.getAttribute('as'));\n\n        if (current.parentNode) {\n          current.parentNode.removeChild(current);\n        }\n      }\n    }\n  }, {\n    key: 'factory',\n    get: function get() {\n      return this._factory;\n    },\n    set: function set(value) {\n      this._factory = value;\n      this.factoryIsReady = true;\n    }\n  }]);\n\n  return TemplateRegistryEntry;\n}();\n\nvar Loader = function () {\n  function Loader() {\n    \n\n    this.templateRegistry = {};\n  }\n\n  Loader.prototype.map = function map(id, source) {\n    throw new Error('Loaders must implement map(id, source).');\n  };\n\n  Loader.prototype.normalizeSync = function normalizeSync(moduleId, relativeTo) {\n    throw new Error('Loaders must implement normalizeSync(moduleId, relativeTo).');\n  };\n\n  Loader.prototype.normalize = function normalize(moduleId, relativeTo) {\n    throw new Error('Loaders must implement normalize(moduleId: string, relativeTo: string): Promise<string>.');\n  };\n\n  Loader.prototype.loadModule = function loadModule(id) {\n    throw new Error('Loaders must implement loadModule(id).');\n  };\n\n  Loader.prototype.loadAllModules = function loadAllModules(ids) {\n    throw new Error('Loader must implement loadAllModules(ids).');\n  };\n\n  Loader.prototype.loadTemplate = function loadTemplate(url) {\n    throw new Error('Loader must implement loadTemplate(url).');\n  };\n\n  Loader.prototype.loadText = function loadText(url) {\n    throw new Error('Loader must implement loadText(url).');\n  };\n\n  Loader.prototype.applyPluginToUrl = function applyPluginToUrl(url, pluginName) {\n    throw new Error('Loader must implement applyPluginToUrl(url, pluginName).');\n  };\n\n  Loader.prototype.addPlugin = function addPlugin(pluginName, implementation) {\n    throw new Error('Loader must implement addPlugin(pluginName, implementation).');\n  };\n\n  Loader.prototype.getOrCreateTemplateRegistryEntry = function getOrCreateTemplateRegistryEntry(address) {\n    return this.templateRegistry[address] || (this.templateRegistry[address] = new TemplateRegistryEntry(address));\n  };\n\n  return Loader;\n}();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXVyZWxpYS1sb2FkZXIvZGlzdC9uYXRpdmUtbW9kdWxlcy9hdXJlbGlhLWxvYWRlci5qcz82NWQ1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxnQ0FBZ0MsMkNBQTJDLGdCQUFnQixrQkFBa0IsT0FBTywyQkFBMkIsd0RBQXdELGdDQUFnQyx1REFBdUQsMkRBQTJELEVBQUUsRUFBRSx5REFBeUQscUVBQXFFLDZEQUE2RCxvQkFBb0IsR0FBRyxFQUFFOzs7O0FBSW5nQjtBQUNKOztBQUVuQzs7O0FBR1A7QUFDQTtBQUNBOztBQUVPO0FBQ1A7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2Q0FBNkMsbUVBQWMsc0JBQXNCLCtEQUFNOztBQUV2RjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsMkNBQTJDLFFBQVE7QUFDbkQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsaURBQWlELG1FQUFjOztBQUUvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxDQUFDOztBQUVNO0FBQ1A7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQyIsImZpbGUiOiI4LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxuXG5cbmltcG9ydCB7IHJlbGF0aXZlVG9GaWxlIH0gZnJvbSAnYXVyZWxpYS1wYXRoJztcbmltcG9ydCB7IE9yaWdpbiB9IGZyb20gJ2F1cmVsaWEtbWV0YWRhdGEnO1xuXG5leHBvcnQgdmFyIFRlbXBsYXRlRGVwZW5kZW5jeSA9IGZ1bmN0aW9uIFRlbXBsYXRlRGVwZW5kZW5jeShzcmMsIG5hbWUpIHtcbiAgXG5cbiAgdGhpcy5zcmMgPSBzcmM7XG4gIHRoaXMubmFtZSA9IG5hbWU7XG59O1xuXG5leHBvcnQgdmFyIFRlbXBsYXRlUmVnaXN0cnlFbnRyeSA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gVGVtcGxhdGVSZWdpc3RyeUVudHJ5KGFkZHJlc3MpIHtcbiAgICBcblxuICAgIHRoaXMudGVtcGxhdGVJc0xvYWRlZCA9IGZhbHNlO1xuICAgIHRoaXMuZmFjdG9yeUlzUmVhZHkgPSBmYWxzZTtcbiAgICB0aGlzLnJlc291cmNlcyA9IG51bGw7XG4gICAgdGhpcy5kZXBlbmRlbmNpZXMgPSBudWxsO1xuXG4gICAgdGhpcy5hZGRyZXNzID0gYWRkcmVzcztcbiAgICB0aGlzLm9uUmVhZHkgPSBudWxsO1xuICAgIHRoaXMuX3RlbXBsYXRlID0gbnVsbDtcbiAgICB0aGlzLl9mYWN0b3J5ID0gbnVsbDtcbiAgfVxuXG4gIFRlbXBsYXRlUmVnaXN0cnlFbnRyeS5wcm90b3R5cGUuYWRkRGVwZW5kZW5jeSA9IGZ1bmN0aW9uIGFkZERlcGVuZGVuY3koc3JjLCBuYW1lKSB7XG4gICAgdmFyIGZpbmFsU3JjID0gdHlwZW9mIHNyYyA9PT0gJ3N0cmluZycgPyByZWxhdGl2ZVRvRmlsZShzcmMsIHRoaXMuYWRkcmVzcykgOiBPcmlnaW4uZ2V0KHNyYykubW9kdWxlSWQ7XG5cbiAgICB0aGlzLmRlcGVuZGVuY2llcy5wdXNoKG5ldyBUZW1wbGF0ZURlcGVuZGVuY3koZmluYWxTcmMsIG5hbWUpKTtcbiAgfTtcblxuICBfY3JlYXRlQ2xhc3MoVGVtcGxhdGVSZWdpc3RyeUVudHJ5LCBbe1xuICAgIGtleTogJ3RlbXBsYXRlJyxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZTtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gc2V0KHZhbHVlKSB7XG4gICAgICB2YXIgYWRkcmVzcyA9IHRoaXMuYWRkcmVzcztcbiAgICAgIHZhciByZXF1aXJlcyA9IHZvaWQgMDtcbiAgICAgIHZhciBjdXJyZW50ID0gdm9pZCAwO1xuICAgICAgdmFyIHNyYyA9IHZvaWQgMDtcbiAgICAgIHZhciBkZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbiAgICAgIHRoaXMuX3RlbXBsYXRlID0gdmFsdWU7XG4gICAgICB0aGlzLnRlbXBsYXRlSXNMb2FkZWQgPSB0cnVlO1xuXG4gICAgICByZXF1aXJlcyA9IHZhbHVlLmNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgncmVxdWlyZScpO1xuICAgICAgZGVwZW5kZW5jaWVzID0gdGhpcy5kZXBlbmRlbmNpZXMgPSBuZXcgQXJyYXkocmVxdWlyZXMubGVuZ3RoKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gcmVxdWlyZXMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgICBjdXJyZW50ID0gcmVxdWlyZXNbaV07XG4gICAgICAgIHNyYyA9IGN1cnJlbnQuZ2V0QXR0cmlidXRlKCdmcm9tJyk7XG5cbiAgICAgICAgaWYgKCFzcmMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJzxyZXF1aXJlPiBlbGVtZW50IGluICcgKyBhZGRyZXNzICsgJyBoYXMgbm8gXCJmcm9tXCIgYXR0cmlidXRlLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVwZW5kZW5jaWVzW2ldID0gbmV3IFRlbXBsYXRlRGVwZW5kZW5jeShyZWxhdGl2ZVRvRmlsZShzcmMsIGFkZHJlc3MpLCBjdXJyZW50LmdldEF0dHJpYnV0ZSgnYXMnKSk7XG5cbiAgICAgICAgaWYgKGN1cnJlbnQucGFyZW50Tm9kZSkge1xuICAgICAgICAgIGN1cnJlbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2ZhY3RvcnknLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2ZhY3Rvcnk7XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgICAgdGhpcy5fZmFjdG9yeSA9IHZhbHVlO1xuICAgICAgdGhpcy5mYWN0b3J5SXNSZWFkeSA9IHRydWU7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFRlbXBsYXRlUmVnaXN0cnlFbnRyeTtcbn0oKTtcblxuZXhwb3J0IHZhciBMb2FkZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIExvYWRlcigpIHtcbiAgICBcblxuICAgIHRoaXMudGVtcGxhdGVSZWdpc3RyeSA9IHt9O1xuICB9XG5cbiAgTG9hZGVyLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiBtYXAoaWQsIHNvdXJjZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignTG9hZGVycyBtdXN0IGltcGxlbWVudCBtYXAoaWQsIHNvdXJjZSkuJyk7XG4gIH07XG5cbiAgTG9hZGVyLnByb3RvdHlwZS5ub3JtYWxpemVTeW5jID0gZnVuY3Rpb24gbm9ybWFsaXplU3luYyhtb2R1bGVJZCwgcmVsYXRpdmVUbykge1xuICAgIHRocm93IG5ldyBFcnJvcignTG9hZGVycyBtdXN0IGltcGxlbWVudCBub3JtYWxpemVTeW5jKG1vZHVsZUlkLCByZWxhdGl2ZVRvKS4nKTtcbiAgfTtcblxuICBMb2FkZXIucHJvdG90eXBlLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uIG5vcm1hbGl6ZShtb2R1bGVJZCwgcmVsYXRpdmVUbykge1xuICAgIHRocm93IG5ldyBFcnJvcignTG9hZGVycyBtdXN0IGltcGxlbWVudCBub3JtYWxpemUobW9kdWxlSWQ6IHN0cmluZywgcmVsYXRpdmVUbzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+LicpO1xuICB9O1xuXG4gIExvYWRlci5wcm90b3R5cGUubG9hZE1vZHVsZSA9IGZ1bmN0aW9uIGxvYWRNb2R1bGUoaWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvYWRlcnMgbXVzdCBpbXBsZW1lbnQgbG9hZE1vZHVsZShpZCkuJyk7XG4gIH07XG5cbiAgTG9hZGVyLnByb3RvdHlwZS5sb2FkQWxsTW9kdWxlcyA9IGZ1bmN0aW9uIGxvYWRBbGxNb2R1bGVzKGlkcykge1xuICAgIHRocm93IG5ldyBFcnJvcignTG9hZGVyIG11c3QgaW1wbGVtZW50IGxvYWRBbGxNb2R1bGVzKGlkcykuJyk7XG4gIH07XG5cbiAgTG9hZGVyLnByb3RvdHlwZS5sb2FkVGVtcGxhdGUgPSBmdW5jdGlvbiBsb2FkVGVtcGxhdGUodXJsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdMb2FkZXIgbXVzdCBpbXBsZW1lbnQgbG9hZFRlbXBsYXRlKHVybCkuJyk7XG4gIH07XG5cbiAgTG9hZGVyLnByb3RvdHlwZS5sb2FkVGV4dCA9IGZ1bmN0aW9uIGxvYWRUZXh0KHVybCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTG9hZGVyIG11c3QgaW1wbGVtZW50IGxvYWRUZXh0KHVybCkuJyk7XG4gIH07XG5cbiAgTG9hZGVyLnByb3RvdHlwZS5hcHBseVBsdWdpblRvVXJsID0gZnVuY3Rpb24gYXBwbHlQbHVnaW5Ub1VybCh1cmwsIHBsdWdpbk5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvYWRlciBtdXN0IGltcGxlbWVudCBhcHBseVBsdWdpblRvVXJsKHVybCwgcGx1Z2luTmFtZSkuJyk7XG4gIH07XG5cbiAgTG9hZGVyLnByb3RvdHlwZS5hZGRQbHVnaW4gPSBmdW5jdGlvbiBhZGRQbHVnaW4ocGx1Z2luTmFtZSwgaW1wbGVtZW50YXRpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvYWRlciBtdXN0IGltcGxlbWVudCBhZGRQbHVnaW4ocGx1Z2luTmFtZSwgaW1wbGVtZW50YXRpb24pLicpO1xuICB9O1xuXG4gIExvYWRlci5wcm90b3R5cGUuZ2V0T3JDcmVhdGVUZW1wbGF0ZVJlZ2lzdHJ5RW50cnkgPSBmdW5jdGlvbiBnZXRPckNyZWF0ZVRlbXBsYXRlUmVnaXN0cnlFbnRyeShhZGRyZXNzKSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVSZWdpc3RyeVthZGRyZXNzXSB8fCAodGhpcy50ZW1wbGF0ZVJlZ2lzdHJ5W2FkZHJlc3NdID0gbmV3IFRlbXBsYXRlUmVnaXN0cnlFbnRyeShhZGRyZXNzKSk7XG4gIH07XG5cbiAgcmV0dXJuIExvYWRlcjtcbn0oKTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8\n")},80:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var mi = moment.defineLocale('mi', {\n        months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split('_'),\n        monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split('_'),\n        monthsRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsShortRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsShortStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,2}/i,\n        weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),\n        weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n        weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [i] HH:mm',\n            LLLL: 'dddd, D MMMM YYYY [i] HH:mm'\n        },\n        calendar: {\n            sameDay: '[i teie mahana, i] LT',\n            nextDay: '[apopo i] LT',\n            nextWeek: 'dddd [i] LT',\n            lastDay: '[inanahi i] LT',\n            lastWeek: 'dddd [whakamutunga i] LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: 'i roto i %s',\n            past: '%s i mua',\n            s: 'te hēkona ruarua',\n            ss: '%d hēkona',\n            m: 'he meneti',\n            mm: '%d meneti',\n            h: 'te haora',\n            hh: '%d haora',\n            d: 'he ra',\n            dd: '%d ra',\n            M: 'he marama',\n            MM: '%d marama',\n            y: 'he tau',\n            yy: '%d tau'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return mi;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9taS5qcz82ODhiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQSx1REFBdUQsSUFBSTtBQUMzRCw2REFBNkQsSUFBSTtBQUNqRSw0REFBNEQsSUFBSTtBQUNoRSxrRUFBa0UsSUFBSTtBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiI4MC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIG1pID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbWknLCB7XG4gICAgICAgIG1vbnRoczogJ0tvaGktdMSBdGVfSHVpLXRhbmd1cnVfUG91dMWrLXRlLXJhbmdpX1BhZW5nYS13aMSBd2jEgV9IYXJhdHVhX1BpcGlyaV9IxY1uZ29pbmdvaV9IZXJlLXR1cmkta8WNa8SBX01haHVydV9XaGlyaW5nYS3EgS1udWt1X1doaXJpbmdhLcSBLXJhbmdpX0hha2loZWEnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnS29oaV9IdWlfUG91X1BhZV9IYXJhX1BpcGlfSMWNbmdvaV9IZXJlX01haHVfV2hpLW51X1doaS1yYV9IYWtpJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNSZWdleDogLyg/OlsnYS16XFx1MDEwMVxcdTAxNERcXHUwMTZCXStcXC0/KXsxLDN9L2ksXG4gICAgICAgIG1vbnRoc1N0cmljdFJlZ2V4OiAvKD86WydhLXpcXHUwMTAxXFx1MDE0RFxcdTAxNkJdK1xcLT8pezEsM30vaSxcbiAgICAgICAgbW9udGhzU2hvcnRSZWdleDogLyg/OlsnYS16XFx1MDEwMVxcdTAxNERcXHUwMTZCXStcXC0/KXsxLDN9L2ksXG4gICAgICAgIG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6IC8oPzpbJ2EtelxcdTAxMDFcXHUwMTREXFx1MDE2Ql0rXFwtPyl7MSwyfS9pLFxuICAgICAgICB3ZWVrZGF5czogJ1LEgXRhcHVfTWFuZV9UxatyZWlfV2VuZXJlaV9UxIFpdGVfUGFyYWlyZV9IxIF0YXJlaScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1RhX01hX1TFq19XZV9UxIFpX1BhX0jEgScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdUYV9NYV9UxatfV2VfVMSBaV9QYV9IxIEnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgW2ldIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBbaV0gSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2kgdGVpZSBtYWhhbmEsIGldIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbYXBvcG8gaV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtpXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2luYW5haGkgaV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFt3aGFrYW11dHVuZ2EgaV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2kgcm90byBpICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBpIG11YScsXG4gICAgICAgICAgICBzOiAndGUgaMSTa29uYSBydWFydWEnLFxuICAgICAgICAgICAgc3M6ICclZCBoxJNrb25hJyxcbiAgICAgICAgICAgIG06ICdoZSBtZW5ldGknLFxuICAgICAgICAgICAgbW06ICclZCBtZW5ldGknLFxuICAgICAgICAgICAgaDogJ3RlIGhhb3JhJyxcbiAgICAgICAgICAgIGhoOiAnJWQgaGFvcmEnLFxuICAgICAgICAgICAgZDogJ2hlIHJhJyxcbiAgICAgICAgICAgIGRkOiAnJWQgcmEnLFxuICAgICAgICAgICAgTTogJ2hlIG1hcmFtYScsXG4gICAgICAgICAgICBNTTogJyVkIG1hcmFtYScsXG4gICAgICAgICAgICB5OiAnaGUgdGF1JyxcbiAgICAgICAgICAgIHl5OiAnJWQgdGF1J1xuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3Cui8sXG4gICAgICAgIG9yZGluYWw6ICclZMK6JyxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNCAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWk7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///80\n")},81:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var translator = {\n        words: { //Different grammatical cases\n            ss: ['sekund', 'sekunda', 'sekundi'],\n            m: ['jedan minut', 'jednog minuta'],\n            mm: ['minut', 'minuta', 'minuta'],\n            h: ['jedan sat', 'jednog sata'],\n            hh: ['sat', 'sata', 'sati'],\n            dd: ['dan', 'dana', 'dana'],\n            MM: ['mjesec', 'mjeseca', 'mjeseci'],\n            yy: ['godina', 'godine', 'godina']\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n        },\n        translate: function (number, withoutSuffix, key) {\n            var wordKey = translator.words[key];\n            if (key.length === 1) {\n                return withoutSuffix ? wordKey[0] : wordKey[1];\n            } else {\n                return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n            }\n        }\n    };\n\n    var me = moment.defineLocale('me', {\n        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),\n        monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n        monthsParseExact : true,\n        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS : 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sjutra u] LT',\n\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay  : '[juče u] LT',\n            lastWeek : function () {\n                var lastWeekDays = [\n                    '[prošle] [nedjelje] [u] LT',\n                    '[prošlog] [ponedjeljka] [u] LT',\n                    '[prošlog] [utorka] [u] LT',\n                    '[prošle] [srijede] [u] LT',\n                    '[prošlog] [četvrtka] [u] LT',\n                    '[prošlog] [petka] [u] LT',\n                    '[prošle] [subote] [u] LT'\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past   : 'prije %s',\n            s      : 'nekoliko sekundi',\n            ss     : translator.translate,\n            m      : translator.translate,\n            mm     : translator.translate,\n            h      : translator.translate,\n            hh     : translator.translate,\n            d      : 'dan',\n            dd     : translator.translate,\n            M      : 'mjesec',\n            MM     : translator.translate,\n            y      : 'godinu',\n            yy     : translator.translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return me;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tZS5qcz8yOTNjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiI4MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIHRyYW5zbGF0b3IgPSB7XG4gICAgICAgIHdvcmRzOiB7IC8vRGlmZmVyZW50IGdyYW1tYXRpY2FsIGNhc2VzXG4gICAgICAgICAgICBzczogWydzZWt1bmQnLCAnc2VrdW5kYScsICdzZWt1bmRpJ10sXG4gICAgICAgICAgICBtOiBbJ2plZGFuIG1pbnV0JywgJ2plZG5vZyBtaW51dGEnXSxcbiAgICAgICAgICAgIG1tOiBbJ21pbnV0JywgJ21pbnV0YScsICdtaW51dGEnXSxcbiAgICAgICAgICAgIGg6IFsnamVkYW4gc2F0JywgJ2plZG5vZyBzYXRhJ10sXG4gICAgICAgICAgICBoaDogWydzYXQnLCAnc2F0YScsICdzYXRpJ10sXG4gICAgICAgICAgICBkZDogWydkYW4nLCAnZGFuYScsICdkYW5hJ10sXG4gICAgICAgICAgICBNTTogWydtamVzZWMnLCAnbWplc2VjYScsICdtamVzZWNpJ10sXG4gICAgICAgICAgICB5eTogWydnb2RpbmEnLCAnZ29kaW5lJywgJ2dvZGluYSddXG4gICAgICAgIH0sXG4gICAgICAgIGNvcnJlY3RHcmFtbWF0aWNhbENhc2U6IGZ1bmN0aW9uIChudW1iZXIsIHdvcmRLZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgPT09IDEgPyB3b3JkS2V5WzBdIDogKG51bWJlciA+PSAyICYmIG51bWJlciA8PSA0ID8gd29yZEtleVsxXSA6IHdvcmRLZXlbMl0pO1xuICAgICAgICB9LFxuICAgICAgICB0cmFuc2xhdGU6IGZ1bmN0aW9uIChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSkge1xuICAgICAgICAgICAgdmFyIHdvcmRLZXkgPSB0cmFuc2xhdG9yLndvcmRzW2tleV07XG4gICAgICAgICAgICBpZiAoa2V5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gd29yZEtleVswXSA6IHdvcmRLZXlbMV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnICcgKyB0cmFuc2xhdG9yLmNvcnJlY3RHcmFtbWF0aWNhbENhc2UobnVtYmVyLCB3b3JkS2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgbWUgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdtZScsIHtcbiAgICAgICAgbW9udGhzOiAnamFudWFyX2ZlYnJ1YXJfbWFydF9hcHJpbF9tYWpfanVuX2p1bF9hdmd1c3Rfc2VwdGVtYmFyX29rdG9iYXJfbm92ZW1iYXJfZGVjZW1iYXInLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnamFuLl9mZWIuX21hci5fYXByLl9tYWpfanVuX2p1bF9hdmcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ25lZGplbGphX3BvbmVkamVsamFrX3V0b3Jha19zcmlqZWRhX8SNZXR2cnRha19wZXRha19zdWJvdGEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICduZWQuX3Bvbi5fdXRvLl9zcmkuX8SNZXQuX3BldC5fc3ViLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICduZV9wb191dF9zcl/EjWVfcGVfc3UnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdCA6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWSBIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tkYW5hcyB1XSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW3NqdXRyYSB1XSBMVCcsXG5cbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIFtuZWRqZWxqdV0gW3VdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gW3NyaWplZHVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIFtzdWJvdHVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIGRkZGQgW3VdIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheSAgOiAnW2p1xI1lIHVdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBsYXN0V2Vla0RheXMgPSBbXG4gICAgICAgICAgICAgICAgICAgICdbcHJvxaFsZV0gW25lZGplbGplXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW3Byb8WhbG9nXSBbcG9uZWRqZWxqa2FdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdbcHJvxaFsb2ddIFt1dG9ya2FdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdbcHJvxaFsZV0gW3NyaWplZGVdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdbcHJvxaFsb2ddIFvEjWV0dnJ0a2FdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdbcHJvxaFsb2ddIFtwZXRrYV0gW3VdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1twcm/FoWxlXSBbc3Vib3RlXSBbdV0gTFQnXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbGFzdFdlZWtEYXlzW3RoaXMuZGF5KCldO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICd6YSAlcycsXG4gICAgICAgICAgICBwYXN0ICAgOiAncHJpamUgJXMnLFxuICAgICAgICAgICAgcyAgICAgIDogJ25la29saWtvIHNla3VuZGknLFxuICAgICAgICAgICAgc3MgICAgIDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBtICAgICAgOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1tICAgICA6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgaCAgICAgIDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBoaCAgICAgOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGQgICAgICA6ICdkYW4nLFxuICAgICAgICAgICAgZGQgICAgIDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBNICAgICAgOiAnbWplc2VjJyxcbiAgICAgICAgICAgIE1NICAgICA6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgeSAgICAgIDogJ2dvZGludScsXG4gICAgICAgICAgICB5eSAgICAgOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZVxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsIDogJyVkLicsXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDcgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDFzdCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1lO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///81\n")},82:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var units = {\n        'ss': 'sekundes_sekundēm_sekunde_sekundes'.split('_'),\n        'm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n        'mm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n        'h': 'stundas_stundām_stunda_stundas'.split('_'),\n        'hh': 'stundas_stundām_stunda_stundas'.split('_'),\n        'd': 'dienas_dienām_diena_dienas'.split('_'),\n        'dd': 'dienas_dienām_diena_dienas'.split('_'),\n        'M': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n        'MM': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n        'y': 'gada_gadiem_gads_gadi'.split('_'),\n        'yy': 'gada_gadiem_gads_gadi'.split('_')\n    };\n    /**\n     * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.\n     */\n    function format(forms, number, withoutSuffix) {\n        if (withoutSuffix) {\n            // E.g. \"21 minūte\", \"3 minūtes\".\n            return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];\n        } else {\n            // E.g. \"21 minūtes\" as in \"pēc 21 minūtes\".\n            // E.g. \"3 minūtēm\" as in \"pēc 3 minūtēm\".\n            return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];\n        }\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        return number + ' ' + format(units[key], number, withoutSuffix);\n    }\n    function relativeTimeWithSingular(number, withoutSuffix, key) {\n        return format(units[key], number, withoutSuffix);\n    }\n    function relativeSeconds(number, withoutSuffix) {\n        return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';\n    }\n\n    var lv = moment.defineLocale('lv', {\n        months : 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),\n        weekdays : 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split('_'),\n        weekdaysShort : 'Sv_P_O_T_C_Pk_S'.split('_'),\n        weekdaysMin : 'Sv_P_O_T_C_Pk_S'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY.',\n            LL : 'YYYY. [gada] D. MMMM',\n            LLL : 'YYYY. [gada] D. MMMM, HH:mm',\n            LLLL : 'YYYY. [gada] D. MMMM, dddd, HH:mm'\n        },\n        calendar : {\n            sameDay : '[Šodien pulksten] LT',\n            nextDay : '[Rīt pulksten] LT',\n            nextWeek : 'dddd [pulksten] LT',\n            lastDay : '[Vakar pulksten] LT',\n            lastWeek : '[Pagājušā] dddd [pulksten] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'pēc %s',\n            past : 'pirms %s',\n            s : relativeSeconds,\n            ss : relativeTimeWithPlural,\n            m : relativeTimeWithSingular,\n            mm : relativeTimeWithPlural,\n            h : relativeTimeWithSingular,\n            hh : relativeTimeWithPlural,\n            d : relativeTimeWithSingular,\n            dd : relativeTimeWithPlural,\n            M : relativeTimeWithSingular,\n            MM : relativeTimeWithPlural,\n            y : relativeTimeWithSingular,\n            yy : relativeTimeWithPlural\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return lv;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9sdi5qcz9iOTdjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNERBQTREO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwiZmlsZSI6IjgyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgdW5pdHMgPSB7XG4gICAgICAgICdzcyc6ICdzZWt1bmRlc19zZWt1bmTEk21fc2VrdW5kZV9zZWt1bmRlcycuc3BsaXQoJ18nKSxcbiAgICAgICAgJ20nOiAnbWluxat0ZXNfbWluxat0xJNtX21pbsWrdGVfbWluxat0ZXMnLnNwbGl0KCdfJyksXG4gICAgICAgICdtbSc6ICdtaW7Fq3Rlc19taW7Fq3TEk21fbWluxat0ZV9taW7Fq3Rlcycuc3BsaXQoJ18nKSxcbiAgICAgICAgJ2gnOiAnc3R1bmRhc19zdHVuZMSBbV9zdHVuZGFfc3R1bmRhcycuc3BsaXQoJ18nKSxcbiAgICAgICAgJ2hoJzogJ3N0dW5kYXNfc3R1bmTEgW1fc3R1bmRhX3N0dW5kYXMnLnNwbGl0KCdfJyksXG4gICAgICAgICdkJzogJ2RpZW5hc19kaWVuxIFtX2RpZW5hX2RpZW5hcycuc3BsaXQoJ18nKSxcbiAgICAgICAgJ2RkJzogJ2RpZW5hc19kaWVuxIFtX2RpZW5hX2RpZW5hcycuc3BsaXQoJ18nKSxcbiAgICAgICAgJ00nOiAnbcSTbmXFoWFfbcSTbmXFoWllbV9txJNuZXNpc19txJNuZcWhaScuc3BsaXQoJ18nKSxcbiAgICAgICAgJ01NJzogJ23Ek25lxaFhX23Ek25lxaFpZW1fbcSTbmVzaXNfbcSTbmXFoWknLnNwbGl0KCdfJyksXG4gICAgICAgICd5JzogJ2dhZGFfZ2FkaWVtX2dhZHNfZ2FkaScuc3BsaXQoJ18nKSxcbiAgICAgICAgJ3l5JzogJ2dhZGFfZ2FkaWVtX2dhZHNfZ2FkaScuc3BsaXQoJ18nKVxuICAgIH07XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHdpdGhvdXRTdWZmaXggYm9vbGVhbiB0cnVlID0gYSBsZW5ndGggb2YgdGltZTsgZmFsc2UgPSBiZWZvcmUvYWZ0ZXIgYSBwZXJpb2Qgb2YgdGltZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmb3JtYXQoZm9ybXMsIG51bWJlciwgd2l0aG91dFN1ZmZpeCkge1xuICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICAgICAgLy8gRS5nLiBcIjIxIG1pbsWrdGVcIiwgXCIzIG1pbsWrdGVzXCIuXG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICUgMTAgPT09IDEgJiYgbnVtYmVyICUgMTAwICE9PSAxMSA/IGZvcm1zWzJdIDogZm9ybXNbM107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBFLmcuIFwiMjEgbWluxat0ZXNcIiBhcyBpbiBcInDEk2MgMjEgbWluxat0ZXNcIi5cbiAgICAgICAgICAgIC8vIEUuZy4gXCIzIG1pbsWrdMSTbVwiIGFzIGluIFwicMSTYyAzIG1pbsWrdMSTbVwiLlxuICAgICAgICAgICAgcmV0dXJuIG51bWJlciAlIDEwID09PSAxICYmIG51bWJlciAlIDEwMCAhPT0gMTEgPyBmb3Jtc1swXSA6IGZvcm1zWzFdO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbGF0aXZlVGltZVdpdGhQbHVyYWwobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIG51bWJlciArICcgJyArIGZvcm1hdCh1bml0c1trZXldLCBudW1iZXIsIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWVXaXRoU2luZ3VsYXIobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdCh1bml0c1trZXldLCBudW1iZXIsIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVNlY29uZHMobnVtYmVyLCB3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ2Rhxb5hcyBzZWt1bmRlcycgOiAnZGHFvsSBbSBzZWt1bmTEk20nO1xuICAgIH1cblxuICAgIHZhciBsdiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2x2Jywge1xuICAgICAgICBtb250aHMgOiAnamFudsSBcmlzX2ZlYnJ1xIFyaXNfbWFydHNfYXByxKtsaXNfbWFpanNfasWrbmlqc19qxatsaWpzX2F1Z3VzdHNfc2VwdGVtYnJpc19va3RvYnJpc19ub3ZlbWJyaXNfZGVjZW1icmlzJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICdqYW5fZmViX21hcl9hcHJfbWFpX2rFq25fasWrbF9hdWdfc2VwX29rdF9ub3ZfZGVjJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6ICdzdsSTdGRpZW5hX3Bpcm1kaWVuYV9vdHJkaWVuYV90cmXFoWRpZW5hX2NldHVydGRpZW5hX3BpZWt0ZGllbmFfc2VzdGRpZW5hJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ1N2X1BfT19UX0NfUGtfUycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAnU3ZfUF9PX1RfQ19Qa19TJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0RELk1NLllZWVkuJyxcbiAgICAgICAgICAgIExMIDogJ1lZWVkuIFtnYWRhXSBELiBNTU1NJyxcbiAgICAgICAgICAgIExMTCA6ICdZWVlZLiBbZ2FkYV0gRC4gTU1NTSwgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdZWVlZLiBbZ2FkYV0gRC4gTU1NTSwgZGRkZCwgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICdbxaBvZGllbiBwdWxrc3Rlbl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICdbUsSrdCBwdWxrc3Rlbl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnZGRkZCBbcHVsa3N0ZW5dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXkgOiAnW1Zha2FyIHB1bGtzdGVuXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlayA6ICdbUGFnxIFqdcWhxIFdIGRkZGQgW3B1bGtzdGVuXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAncMSTYyAlcycsXG4gICAgICAgICAgICBwYXN0IDogJ3Bpcm1zICVzJyxcbiAgICAgICAgICAgIHMgOiByZWxhdGl2ZVNlY29uZHMsXG4gICAgICAgICAgICBzcyA6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBtIDogcmVsYXRpdmVUaW1lV2l0aFNpbmd1bGFyLFxuICAgICAgICAgICAgbW0gOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgaCA6IHJlbGF0aXZlVGltZVdpdGhTaW5ndWxhcixcbiAgICAgICAgICAgIGhoIDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIGQgOiByZWxhdGl2ZVRpbWVXaXRoU2luZ3VsYXIsXG4gICAgICAgICAgICBkZCA6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBNIDogcmVsYXRpdmVUaW1lV2l0aFNpbmd1bGFyLFxuICAgICAgICAgICAgTU0gOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgeSA6IHJlbGF0aXZlVGltZVdpdGhTaW5ndWxhcixcbiAgICAgICAgICAgIHl5IDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsIDogJyVkLicsXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGx2O1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///82\n")},83:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var units = {\n        'ss' : 'sekundė_sekundžių_sekundes',\n        'm' : 'minutė_minutės_minutę',\n        'mm': 'minutės_minučių_minutes',\n        'h' : 'valanda_valandos_valandą',\n        'hh': 'valandos_valandų_valandas',\n        'd' : 'diena_dienos_dieną',\n        'dd': 'dienos_dienų_dienas',\n        'M' : 'mėnuo_mėnesio_mėnesį',\n        'MM': 'mėnesiai_mėnesių_mėnesius',\n        'y' : 'metai_metų_metus',\n        'yy': 'metai_metų_metus'\n    };\n    function translateSeconds(number, withoutSuffix, key, isFuture) {\n        if (withoutSuffix) {\n            return 'kelios sekundės';\n        } else {\n            return isFuture ? 'kelių sekundžių' : 'kelias sekundes';\n        }\n    }\n    function translateSingular(number, withoutSuffix, key, isFuture) {\n        return withoutSuffix ? forms(key)[0] : (isFuture ? forms(key)[1] : forms(key)[2]);\n    }\n    function special(number) {\n        return number % 10 === 0 || (number > 10 && number < 20);\n    }\n    function forms(key) {\n        return units[key].split('_');\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        if (number === 1) {\n            return result + translateSingular(number, withoutSuffix, key[0], isFuture);\n        } else if (withoutSuffix) {\n            return result + (special(number) ? forms(key)[1] : forms(key)[0]);\n        } else {\n            if (isFuture) {\n                return result + forms(key)[1];\n            } else {\n                return result + (special(number) ? forms(key)[1] : forms(key)[2]);\n            }\n        }\n    }\n    var lt = moment.defineLocale('lt', {\n        months : {\n            format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split('_'),\n            standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split('_'),\n            isFormat: /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|MMMM?(\\[[^\\[\\]]*\\]|\\s)+D[oD]?/\n        },\n        monthsShort : 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),\n        weekdays : {\n            format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split('_'),\n            standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split('_'),\n            isFormat: /dddd HH:mm/\n        },\n        weekdaysShort : 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),\n        weekdaysMin : 'S_P_A_T_K_Pn_Š'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY-MM-DD',\n            LL : 'YYYY [m.] MMMM D [d.]',\n            LLL : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n            LLLL : 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',\n            l : 'YYYY-MM-DD',\n            ll : 'YYYY [m.] MMMM D [d.]',\n            lll : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n            llll : 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]'\n        },\n        calendar : {\n            sameDay : '[Šiandien] LT',\n            nextDay : '[Rytoj] LT',\n            nextWeek : 'dddd LT',\n            lastDay : '[Vakar] LT',\n            lastWeek : '[Praėjusį] dddd LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'po %s',\n            past : 'prieš %s',\n            s : translateSeconds,\n            ss : translate,\n            m : translateSingular,\n            mm : translate,\n            h : translateSingular,\n            hh : translate,\n            d : translateSingular,\n            dd : translate,\n            M : translateSingular,\n            MM : translate,\n            y : translateSingular,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-oji/,\n        ordinal : function (number) {\n            return number + '-oji';\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return lt;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9sdC5qcz8yNmY5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiODMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciB1bml0cyA9IHtcbiAgICAgICAgJ3NzJyA6ICdzZWt1bmTEl19zZWt1bmTFvmnFs19zZWt1bmRlcycsXG4gICAgICAgICdtJyA6ICdtaW51dMSXX21pbnV0xJdzX21pbnV0xJknLFxuICAgICAgICAnbW0nOiAnbWludXTEl3NfbWludcSNacWzX21pbnV0ZXMnLFxuICAgICAgICAnaCcgOiAndmFsYW5kYV92YWxhbmRvc192YWxhbmTEhScsXG4gICAgICAgICdoaCc6ICd2YWxhbmRvc192YWxhbmTFs192YWxhbmRhcycsXG4gICAgICAgICdkJyA6ICdkaWVuYV9kaWVub3NfZGllbsSFJyxcbiAgICAgICAgJ2RkJzogJ2RpZW5vc19kaWVuxbNfZGllbmFzJyxcbiAgICAgICAgJ00nIDogJ23El251b19txJduZXNpb19txJduZXPErycsXG4gICAgICAgICdNTSc6ICdtxJduZXNpYWlfbcSXbmVzacWzX23El25lc2l1cycsXG4gICAgICAgICd5JyA6ICdtZXRhaV9tZXTFs19tZXR1cycsXG4gICAgICAgICd5eSc6ICdtZXRhaV9tZXTFs19tZXR1cydcbiAgICB9O1xuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZVNlY29uZHMobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIGlmICh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgICAgICByZXR1cm4gJ2tlbGlvcyBzZWt1bmTEl3MnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gJ2tlbGnFsyBzZWt1bmTFvmnFsycgOiAna2VsaWFzIHNla3VuZGVzJztcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB0cmFuc2xhdGVTaW5ndWxhcihudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyBmb3JtcyhrZXkpWzBdIDogKGlzRnV0dXJlID8gZm9ybXMoa2V5KVsxXSA6IGZvcm1zKGtleSlbMl0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzcGVjaWFsKG51bWJlcikge1xuICAgICAgICByZXR1cm4gbnVtYmVyICUgMTAgPT09IDAgfHwgKG51bWJlciA+IDEwICYmIG51bWJlciA8IDIwKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZm9ybXMoa2V5KSB7XG4gICAgICAgIHJldHVybiB1bml0c1trZXldLnNwbGl0KCdfJyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IG51bWJlciArICcgJztcbiAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIHRyYW5zbGF0ZVNpbmd1bGFyKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5WzBdLCBpc0Z1dHVyZSk7XG4gICAgICAgIH0gZWxzZSBpZiAod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChzcGVjaWFsKG51bWJlcikgPyBmb3JtcyhrZXkpWzFdIDogZm9ybXMoa2V5KVswXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgZm9ybXMoa2V5KVsxXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChzcGVjaWFsKG51bWJlcikgPyBmb3JtcyhrZXkpWzFdIDogZm9ybXMoa2V5KVsyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFyIGx0ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbHQnLCB7XG4gICAgICAgIG1vbnRocyA6IHtcbiAgICAgICAgICAgIGZvcm1hdDogJ3NhdXNpb192YXNhcmlvX2tvdm9fYmFsYW5kxb5pb19nZWd1xb7El3NfYmlyxb5lbGlvX2xpZXBvc19ydWdwasWrxI1pb19ydWdzxJdqb19zcGFsaW9fbGFwa3JpxI1pb19ncnVvZMW+aW8nLnNwbGl0KCdfJyksXG4gICAgICAgICAgICBzdGFuZGFsb25lOiAnc2F1c2lzX3Zhc2FyaXNfa292YXNfYmFsYW5kaXNfZ2VndcW+xJdfYmlyxb5lbGlzX2xpZXBhX3J1Z3Bqxat0aXNfcnVnc8SXamlzX3NwYWxpc19sYXBrcml0aXNfZ3J1b2Rpcycuc3BsaXQoJ18nKSxcbiAgICAgICAgICAgIGlzRm9ybWF0OiAvRFtvRF0/KFxcW1teXFxbXFxdXSpcXF18XFxzKStNTU1NP3xNTU1NPyhcXFtbXlxcW1xcXV0qXFxdfFxccykrRFtvRF0/L1xuICAgICAgICB9LFxuICAgICAgICBtb250aHNTaG9ydCA6ICdzYXVfdmFzX2tvdl9iYWxfZ2VnX2Jpcl9saWVfcmdwX3Jnc19zcGFfbGFwX2dyZCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXMgOiB7XG4gICAgICAgICAgICBmb3JtYXQ6ICdzZWttYWRpZW7Er19waXJtYWRpZW7Er19hbnRyYWRpZW7Er190cmXEjWlhZGllbsSvX2tldHZpcnRhZGllbsSvX3Blbmt0YWRpZW7Er1/FoWXFoXRhZGllbsSvJy5zcGxpdCgnXycpLFxuICAgICAgICAgICAgc3RhbmRhbG9uZTogJ3Nla21hZGllbmlzX3Bpcm1hZGllbmlzX2FudHJhZGllbmlzX3RyZcSNaWFkaWVuaXNfa2V0dmlydGFkaWVuaXNfcGVua3RhZGllbmlzX8WhZcWhdGFkaWVuaXMnLnNwbGl0KCdfJyksXG4gICAgICAgICAgICBpc0Zvcm1hdDogL2RkZGQgSEg6bW0vXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAnU2VrX1Bpcl9BbnRfVHJlX0tldF9QZW5fxaBlxaEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ1NfUF9BX1RfS19Qbl/FoCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0IDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdISDptbScsXG4gICAgICAgICAgICBMVFMgOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdZWVlZLU1NLUREJyxcbiAgICAgICAgICAgIExMIDogJ1lZWVkgW20uXSBNTU1NIEQgW2QuXScsXG4gICAgICAgICAgICBMTEwgOiAnWVlZWSBbbS5dIE1NTU0gRCBbZC5dLCBISDptbSBbdmFsLl0nLFxuICAgICAgICAgICAgTExMTCA6ICdZWVlZIFttLl0gTU1NTSBEIFtkLl0sIGRkZGQsIEhIOm1tIFt2YWwuXScsXG4gICAgICAgICAgICBsIDogJ1lZWVktTU0tREQnLFxuICAgICAgICAgICAgbGwgOiAnWVlZWSBbbS5dIE1NTU0gRCBbZC5dJyxcbiAgICAgICAgICAgIGxsbCA6ICdZWVlZIFttLl0gTU1NTSBEIFtkLl0sIEhIOm1tIFt2YWwuXScsXG4gICAgICAgICAgICBsbGxsIDogJ1lZWVkgW20uXSBNTU1NIEQgW2QuXSwgZGRkLCBISDptbSBbdmFsLl0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICdbxaBpYW5kaWVuXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5IDogJ1tSeXRval0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnZGRkZCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5IDogJ1tWYWthcl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiAnW1ByYcSXanVzxK9dIGRkZGQgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ3BvICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAncHJpZcWhICVzJyxcbiAgICAgICAgICAgIHMgOiB0cmFuc2xhdGVTZWNvbmRzLFxuICAgICAgICAgICAgc3MgOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtIDogdHJhbnNsYXRlU2luZ3VsYXIsXG4gICAgICAgICAgICBtbSA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGggOiB0cmFuc2xhdGVTaW5ndWxhcixcbiAgICAgICAgICAgIGhoIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZCA6IHRyYW5zbGF0ZVNpbmd1bGFyLFxuICAgICAgICAgICAgZGQgOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNIDogdHJhbnNsYXRlU2luZ3VsYXIsXG4gICAgICAgICAgICBNTSA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHkgOiB0cmFuc2xhdGVTaW5ndWxhcixcbiAgICAgICAgICAgIHl5IDogdHJhbnNsYXRlXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS1vamkvLFxuICAgICAgICBvcmRpbmFsIDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICctb2ppJztcbiAgICAgICAgfSxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNCAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbHQ7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///83\n")},84:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var lo = moment.defineLocale('lo', {\n        months : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),\n        monthsShort : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),\n        weekdays : 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n        weekdaysShort : 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n        weekdaysMin : 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'ວັນdddd D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/,\n        isPM: function (input) {\n            return input === 'ຕອນແລງ';\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ຕອນເຊົ້າ';\n            } else {\n                return 'ຕອນແລງ';\n            }\n        },\n        calendar : {\n            sameDay : '[ມື້ນີ້ເວລາ] LT',\n            nextDay : '[ມື້ອື່ນເວລາ] LT',\n            nextWeek : '[ວັນ]dddd[ໜ້າເວລາ] LT',\n            lastDay : '[ມື້ວານນີ້ເວລາ] LT',\n            lastWeek : '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'ອີກ %s',\n            past : '%sຜ່ານມາ',\n            s : 'ບໍ່ເທົ່າໃດວິນາທີ',\n            ss : '%d ວິນາທີ' ,\n            m : '1 ນາທີ',\n            mm : '%d ນາທີ',\n            h : '1 ຊົ່ວໂມງ',\n            hh : '%d ຊົ່ວໂມງ',\n            d : '1 ມື້',\n            dd : '%d ມື້',\n            M : '1 ເດືອນ',\n            MM : '%d ເດືອນ',\n            y : '1 ປີ',\n            yy : '%d ປີ'\n        },\n        dayOfMonthOrdinalParse: /(ທີ່)\\d{1,2}/,\n        ordinal : function (number) {\n            return 'ທີ່' + number;\n        }\n    });\n\n    return lo;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9sby5qcz9iMjlkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QseUNBQXlDLElBQUk7QUFDN0M7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwiZmlsZSI6Ijg0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgbG8gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdsbycsIHtcbiAgICAgICAgbW9udGhzIDogJ+C6oeC6seC6h+C6geC6reC6mV/guoHgurjguqHgup7gurJf4Lqh4Lq14LqZ4LqyX+C7gOC6oeC6quC6sl/gup7gurbgupTguqrgurDgup7gurJf4Lqh4Lq04LqW4Lq44LqZ4LqyX+C6geC7jeC6peC6sOC6geC6u+C6lF/guqrgurTguofguqvgurJf4LqB4Lqx4LqZ4LqN4LqyX+C6leC6uOC6peC6sl/gup7gurDguojgurTguoFf4LqX4Lqx4LqZ4Lqn4LqyJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICfguqHgurHguofguoHguq3guplf4LqB4Lq44Lqh4Lqe4LqyX+C6oeC6teC6meC6sl/gu4DguqHguqrgurJf4Lqe4Lq24LqU4Lqq4Lqw4Lqe4LqyX+C6oeC6tOC6luC6uOC6meC6sl/guoHgu43guqXgurDguoHgurvgupRf4Lqq4Lq04LqH4Lqr4LqyX+C6geC6seC6meC6jeC6sl/gupXgurjguqXgurJf4Lqe4Lqw4LqI4Lq04LqBX+C6l+C6seC6meC6p+C6sicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXMgOiAn4Lqt4Lqy4LqX4Lq04LqUX+C6iOC6seC6mV/guq3gurHguofguoTgurLguplf4Lqe4Lq44LqUX+C6nuC6sOC6q+C6seC6lF/guqrgurjguoFf4LuA4Lqq4Lq74LqyJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ+C6l+C6tOC6lF/guojgurHguplf4Lqt4Lqx4LqH4LqE4Lqy4LqZX+C6nuC6uOC6lF/gup7gurDguqvgurHgupRf4Lqq4Lq44LqBX+C7gOC6quC6u+C6sicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAn4LqXX+C6iF/guq3guoRf4LqeX+C6nuC6q1/guqrguoFf4LqqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAn4Lqn4Lqx4LqZZGRkZCBEIE1NTU0gWVlZWSBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+C6leC6reC6meC7gOC6iuC6u+C7ieC6snzgupXguq3gupngu4HguqXguocvLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCA9PT0gJ+C6leC6reC6meC7geC6peC6hyc7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtIDogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LqV4Lqt4LqZ4LuA4LqK4Lq74LuJ4LqyJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgupXguq3gupngu4HguqXguocnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgOiAnW+C6oeC6t+C7ieC6meC6teC7ieC7gOC6p+C6peC6sl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICdb4Lqh4Lq34LuJ4Lqt4Lq34LuI4LqZ4LuA4Lqn4Lql4LqyXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdb4Lqn4Lqx4LqZXWRkZGRb4Luc4LuJ4Lqy4LuA4Lqn4Lql4LqyXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5IDogJ1vguqHgurfgu4nguqfgurLgupngupngurXgu4ngu4DguqfguqXgurJdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogJ1vguqfgurHgupldZGRkZFvgu4HguqXgu4nguqfgupngurXgu4ngu4DguqfguqXgurJdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICfguq3gurXguoEgJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICclc+C6nOC7iOC6suC6meC6oeC6sicsXG4gICAgICAgICAgICBzIDogJ+C6muC7jeC7iOC7gOC6l+C6u+C7iOC6suC7g+C6lOC6p+C6tOC6meC6suC6l+C6tScsXG4gICAgICAgICAgICBzcyA6ICclZCDguqfgurTgupngurLgupfgurUnICxcbiAgICAgICAgICAgIG0gOiAnMSDgupngurLgupfgurUnLFxuICAgICAgICAgICAgbW0gOiAnJWQg4LqZ4Lqy4LqX4Lq1JyxcbiAgICAgICAgICAgIGggOiAnMSDguorgurvgu4jguqfgu4LguqHguocnLFxuICAgICAgICAgICAgaGggOiAnJWQg4LqK4Lq74LuI4Lqn4LuC4Lqh4LqHJyxcbiAgICAgICAgICAgIGQgOiAnMSDguqHgurfgu4knLFxuICAgICAgICAgICAgZGQgOiAnJWQg4Lqh4Lq34LuJJyxcbiAgICAgICAgICAgIE0gOiAnMSDgu4DgupTgurfguq3gupknLFxuICAgICAgICAgICAgTU0gOiAnJWQg4LuA4LqU4Lq34Lqt4LqZJyxcbiAgICAgICAgICAgIHkgOiAnMSDgupvgurUnLFxuICAgICAgICAgICAgeXkgOiAnJWQg4Lqb4Lq1J1xuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvKOC6l+C6teC7iClcXGR7MSwyfS8sXG4gICAgICAgIG9yZGluYWwgOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gJ+C6l+C6teC7iCcgKyBudW1iZXI7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBsbztcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///84\n")},85:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            'm': ['eng Minutt', 'enger Minutt'],\n            'h': ['eng Stonn', 'enger Stonn'],\n            'd': ['een Dag', 'engem Dag'],\n            'M': ['ee Mount', 'engem Mount'],\n            'y': ['ee Joer', 'engem Joer']\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n    function processFutureTime(string) {\n        var number = string.substr(0, string.indexOf(' '));\n        if (eifelerRegelAppliesToNumber(number)) {\n            return 'a ' + string;\n        }\n        return 'an ' + string;\n    }\n    function processPastTime(string) {\n        var number = string.substr(0, string.indexOf(' '));\n        if (eifelerRegelAppliesToNumber(number)) {\n            return 'viru ' + string;\n        }\n        return 'virun ' + string;\n    }\n    /**\n     * Returns true if the word before the given number loses the '-n' ending.\n     * e.g. 'an 10 Deeg' but 'a 5 Deeg'\n     *\n     * @param number {integer}\n     * @returns {boolean}\n     */\n    function eifelerRegelAppliesToNumber(number) {\n        number = parseInt(number, 10);\n        if (isNaN(number)) {\n            return false;\n        }\n        if (number < 0) {\n            // Negative Number --> always true\n            return true;\n        } else if (number < 10) {\n            // Only 1 digit\n            if (4 <= number && number <= 7) {\n                return true;\n            }\n            return false;\n        } else if (number < 100) {\n            // 2 digits\n            var lastDigit = number % 10, firstDigit = number / 10;\n            if (lastDigit === 0) {\n                return eifelerRegelAppliesToNumber(firstDigit);\n            }\n            return eifelerRegelAppliesToNumber(lastDigit);\n        } else if (number < 10000) {\n            // 3 or 4 digits --> recursively check first digit\n            while (number >= 10) {\n                number = number / 10;\n            }\n            return eifelerRegelAppliesToNumber(number);\n        } else {\n            // Anything larger than 4 digits: recursively check first n-3 digits\n            number = number / 1000;\n            return eifelerRegelAppliesToNumber(number);\n        }\n    }\n\n    var lb = moment.defineLocale('lb', {\n        months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n        monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact : true,\n        weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split('_'),\n        weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),\n        weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat: {\n            LT: 'H:mm [Auer]',\n            LTS: 'H:mm:ss [Auer]',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm [Auer]',\n            LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]'\n        },\n        calendar: {\n            sameDay: '[Haut um] LT',\n            sameElse: 'L',\n            nextDay: '[Muer um] LT',\n            nextWeek: 'dddd [um] LT',\n            lastDay: '[Gëschter um] LT',\n            lastWeek: function () {\n                // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule\n                switch (this.day()) {\n                    case 2:\n                    case 4:\n                        return '[Leschten] dddd [um] LT';\n                    default:\n                        return '[Leschte] dddd [um] LT';\n                }\n            }\n        },\n        relativeTime : {\n            future : processFutureTime,\n            past : processPastTime,\n            s : 'e puer Sekonnen',\n            ss : '%d Sekonnen',\n            m : processRelativeTime,\n            mm : '%d Minutten',\n            h : processRelativeTime,\n            hh : '%d Stonnen',\n            d : processRelativeTime,\n            dd : '%d Deeg',\n            M : processRelativeTime,\n            MM : '%d Méint',\n            y : processRelativeTime,\n            yy : '%d Joer'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return lb;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9sYi5qcz80NDBjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QixpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiODUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NSZWxhdGl2ZVRpbWUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgICAgICAnbSc6IFsnZW5nIE1pbnV0dCcsICdlbmdlciBNaW51dHQnXSxcbiAgICAgICAgICAgICdoJzogWydlbmcgU3Rvbm4nLCAnZW5nZXIgU3Rvbm4nXSxcbiAgICAgICAgICAgICdkJzogWydlZW4gRGFnJywgJ2VuZ2VtIERhZyddLFxuICAgICAgICAgICAgJ00nOiBbJ2VlIE1vdW50JywgJ2VuZ2VtIE1vdW50J10sXG4gICAgICAgICAgICAneSc6IFsnZWUgSm9lcicsICdlbmdlbSBKb2VyJ11cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyBmb3JtYXRba2V5XVswXSA6IGZvcm1hdFtrZXldWzFdO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwcm9jZXNzRnV0dXJlVGltZShzdHJpbmcpIHtcbiAgICAgICAgdmFyIG51bWJlciA9IHN0cmluZy5zdWJzdHIoMCwgc3RyaW5nLmluZGV4T2YoJyAnKSk7XG4gICAgICAgIGlmIChlaWZlbGVyUmVnZWxBcHBsaWVzVG9OdW1iZXIobnVtYmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuICdhICcgKyBzdHJpbmc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICdhbiAnICsgc3RyaW5nO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwcm9jZXNzUGFzdFRpbWUoc3RyaW5nKSB7XG4gICAgICAgIHZhciBudW1iZXIgPSBzdHJpbmcuc3Vic3RyKDAsIHN0cmluZy5pbmRleE9mKCcgJykpO1xuICAgICAgICBpZiAoZWlmZWxlclJlZ2VsQXBwbGllc1RvTnVtYmVyKG51bWJlcikpIHtcbiAgICAgICAgICAgIHJldHVybiAndmlydSAnICsgc3RyaW5nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAndmlydW4gJyArIHN0cmluZztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSB3b3JkIGJlZm9yZSB0aGUgZ2l2ZW4gbnVtYmVyIGxvc2VzIHRoZSAnLW4nIGVuZGluZy5cbiAgICAgKiBlLmcuICdhbiAxMCBEZWVnJyBidXQgJ2EgNSBEZWVnJ1xuICAgICAqXG4gICAgICogQHBhcmFtIG51bWJlciB7aW50ZWdlcn1cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlaWZlbGVyUmVnZWxBcHBsaWVzVG9OdW1iZXIobnVtYmVyKSB7XG4gICAgICAgIG51bWJlciA9IHBhcnNlSW50KG51bWJlciwgMTApO1xuICAgICAgICBpZiAoaXNOYU4obnVtYmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICAgICAgICAvLyBOZWdhdGl2ZSBOdW1iZXIgLS0+IGFsd2F5cyB0cnVlXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPCAxMCkge1xuICAgICAgICAgICAgLy8gT25seSAxIGRpZ2l0XG4gICAgICAgICAgICBpZiAoNCA8PSBudW1iZXIgJiYgbnVtYmVyIDw9IDcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPCAxMDApIHtcbiAgICAgICAgICAgIC8vIDIgZGlnaXRzXG4gICAgICAgICAgICB2YXIgbGFzdERpZ2l0ID0gbnVtYmVyICUgMTAsIGZpcnN0RGlnaXQgPSBudW1iZXIgLyAxMDtcbiAgICAgICAgICAgIGlmIChsYXN0RGlnaXQgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZWlmZWxlclJlZ2VsQXBwbGllc1RvTnVtYmVyKGZpcnN0RGlnaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGVpZmVsZXJSZWdlbEFwcGxpZXNUb051bWJlcihsYXN0RGlnaXQpO1xuICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA8IDEwMDAwKSB7XG4gICAgICAgICAgICAvLyAzIG9yIDQgZGlnaXRzIC0tPiByZWN1cnNpdmVseSBjaGVjayBmaXJzdCBkaWdpdFxuICAgICAgICAgICAgd2hpbGUgKG51bWJlciA+PSAxMCkge1xuICAgICAgICAgICAgICAgIG51bWJlciA9IG51bWJlciAvIDEwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGVpZmVsZXJSZWdlbEFwcGxpZXNUb051bWJlcihudW1iZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQW55dGhpbmcgbGFyZ2VyIHRoYW4gNCBkaWdpdHM6IHJlY3Vyc2l2ZWx5IGNoZWNrIGZpcnN0IG4tMyBkaWdpdHNcbiAgICAgICAgICAgIG51bWJlciA9IG51bWJlciAvIDEwMDA7XG4gICAgICAgICAgICByZXR1cm4gZWlmZWxlclJlZ2VsQXBwbGllc1RvTnVtYmVyKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbGIgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdsYicsIHtcbiAgICAgICAgbW9udGhzOiAnSmFudWFyX0ZlYnJ1YXJfTcOkZXJ6X0FicsOrbGxfTWVlX0p1bmlfSnVsaV9BdWd1c3RfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGV6ZW1iZXInLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSmFuLl9GZWJyLl9NcnouX0Fici5fTWVlX0p1bi5fSnVsLl9BdWcuX1NlcHQuX09rdC5fTm92Ll9EZXouJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0IDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICdTb25uZGVnX03DqWluZGVnX0TDq25zY2hkZWdfTcOrdHR3b2NoX0Rvbm5lc2NoZGVnX0ZyZWlkZWdfU2Ftc2NoZGVnJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnU28uX03DqS5fRMOrLl9Nw6suX0RvLl9Gci5fU2EuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1NvX03DqV9Ew6tfTcOrX0RvX0ZyX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tIFtBdWVyXScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzIFtBdWVyXScsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkgSDptbSBbQXVlcl0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWSBIOm1tIFtBdWVyXSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbSGF1dCB1bV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbTXVlciB1bV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFt1bV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tHw6tzY2h0ZXIgdW1dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgLy8gRGlmZmVyZW50IGRhdGUgc3RyaW5nIGZvciAnRMOrbnNjaGRlZycgKFR1ZXNkYXkpIGFuZCAnRG9ubmVzY2hkZWcnIChUaHVyc2RheSkgZHVlIHRvIHBob25vbG9naWNhbCBydWxlXG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbTGVzY2h0ZW5dIGRkZGQgW3VtXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1tMZXNjaHRlXSBkZGRkIFt1bV0gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogcHJvY2Vzc0Z1dHVyZVRpbWUsXG4gICAgICAgICAgICBwYXN0IDogcHJvY2Vzc1Bhc3RUaW1lLFxuICAgICAgICAgICAgcyA6ICdlIHB1ZXIgU2Vrb25uZW4nLFxuICAgICAgICAgICAgc3MgOiAnJWQgU2Vrb25uZW4nLFxuICAgICAgICAgICAgbSA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtbSA6ICclZCBNaW51dHRlbicsXG4gICAgICAgICAgICBoIDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGhoIDogJyVkIFN0b25uZW4nLFxuICAgICAgICAgICAgZCA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBkZCA6ICclZCBEZWVnJyxcbiAgICAgICAgICAgIE0gOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgTU0gOiAnJWQgTcOpaW50JyxcbiAgICAgICAgICAgIHkgOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeXkgOiAnJWQgSm9lcidcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGxiO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///85\n")},86:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var suffixes = {\n        0: '-чү',\n        1: '-чи',\n        2: '-чи',\n        3: '-чү',\n        4: '-чү',\n        5: '-чи',\n        6: '-чы',\n        7: '-чи',\n        8: '-чи',\n        9: '-чу',\n        10: '-чу',\n        20: '-чы',\n        30: '-чу',\n        40: '-чы',\n        50: '-чү',\n        60: '-чы',\n        70: '-чи',\n        80: '-чи',\n        90: '-чу',\n        100: '-чү'\n    };\n\n    var ky = moment.defineLocale('ky', {\n        months : 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'),\n        monthsShort : 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'),\n        weekdays : 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split('_'),\n        weekdaysShort : 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'),\n        weekdaysMin : 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Бүгүн саат] LT',\n            nextDay : '[Эртең саат] LT',\n            nextWeek : 'dddd [саат] LT',\n            lastDay : '[Кече саат] LT',\n            lastWeek : '[Өткен аптанын] dddd [күнү] [саат] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s ичинде',\n            past : '%s мурун',\n            s : 'бирнече секунд',\n            ss : '%d секунд',\n            m : 'бир мүнөт',\n            mm : '%d мүнөт',\n            h : 'бир саат',\n            hh : '%d саат',\n            d : 'бир күн',\n            dd : '%d күн',\n            M : 'бир ай',\n            MM : '%d ай',\n            y : 'бир жыл',\n            yy : '%d жыл'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(чи|чы|чү|чу)/,\n        ordinal : function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return ky;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9reS5qcz85NjA5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiODYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBzdWZmaXhlcyA9IHtcbiAgICAgICAgMDogJy3Rh9KvJyxcbiAgICAgICAgMTogJy3Rh9C4JyxcbiAgICAgICAgMjogJy3Rh9C4JyxcbiAgICAgICAgMzogJy3Rh9KvJyxcbiAgICAgICAgNDogJy3Rh9KvJyxcbiAgICAgICAgNTogJy3Rh9C4JyxcbiAgICAgICAgNjogJy3Rh9GLJyxcbiAgICAgICAgNzogJy3Rh9C4JyxcbiAgICAgICAgODogJy3Rh9C4JyxcbiAgICAgICAgOTogJy3Rh9GDJyxcbiAgICAgICAgMTA6ICct0YfRgycsXG4gICAgICAgIDIwOiAnLdGH0YsnLFxuICAgICAgICAzMDogJy3Rh9GDJyxcbiAgICAgICAgNDA6ICct0YfRiycsXG4gICAgICAgIDUwOiAnLdGH0q8nLFxuICAgICAgICA2MDogJy3Rh9GLJyxcbiAgICAgICAgNzA6ICct0YfQuCcsXG4gICAgICAgIDgwOiAnLdGH0LgnLFxuICAgICAgICA5MDogJy3Rh9GDJyxcbiAgICAgICAgMTAwOiAnLdGH0q8nXG4gICAgfTtcblxuICAgIHZhciBreSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2t5Jywge1xuICAgICAgICBtb250aHMgOiAn0Y/QvdCy0LDRgNGMX9GE0LXQstGA0LDQu9GMX9C80LDRgNGCX9Cw0L/RgNC10LvRjF/QvNCw0Llf0LjRjtC90Yxf0LjRjtC70Yxf0LDQstCz0YPRgdGCX9GB0LXQvdGC0Y/QsdGA0Yxf0L7QutGC0Y/QsdGA0Yxf0L3QvtGP0LHRgNGMX9C00LXQutCw0LHRgNGMJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICfRj9C90LJf0YTQtdCyX9C80LDRgNGCX9Cw0L/RgF/QvNCw0Llf0LjRjtC90Yxf0LjRjtC70Yxf0LDQstCzX9GB0LXQvV/QvtC60YJf0L3QvtGPX9C00LXQuicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXMgOiAn0JbQtdC60YjQtdC80LHQuF/QlNKv0LnRiNOp0LzQsdKvX9Co0LXQudGI0LXQvNCx0Lhf0KjQsNGA0YjQtdC80LHQuF/QkdC10LnRiNC10LzQsdC4X9CW0YPQvNCwX9CY0YjQtdC80LHQuCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICfQltC10Lpf0JTSr9C5X9Co0LXQuV/QqNCw0YBf0JHQtdC5X9CW0YPQvF/QmNGI0LUnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ9CW0Lpf0JTQuV/QqNC5X9Co0YBf0JHQuV/QltC8X9CY0YgnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1vQkdKv0LPSr9C9INGB0LDQsNGCXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5IDogJ1vQrdGA0YLQtdKjINGB0LDQsNGCXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdkZGRkIFvRgdCw0LDRgl0gTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdb0JrQtdGH0LUg0YHQsNCw0YJdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogJ1vTqNGC0LrQtdC9INCw0L/RgtCw0L3Ri9C9XSBkZGRkIFvQutKv0L3Sr10gW9GB0LDQsNGCXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnJXMg0LjRh9C40L3QtNC1JyxcbiAgICAgICAgICAgIHBhc3QgOiAnJXMg0LzRg9GA0YPQvScsXG4gICAgICAgICAgICBzIDogJ9Cx0LjRgNC90LXRh9C1INGB0LXQutGD0L3QtCcsXG4gICAgICAgICAgICBzcyA6ICclZCDRgdC10LrRg9C90LQnLFxuICAgICAgICAgICAgbSA6ICfQsdC40YAg0LzSr9C906nRgicsXG4gICAgICAgICAgICBtbSA6ICclZCDQvNKv0L3TqdGCJyxcbiAgICAgICAgICAgIGggOiAn0LHQuNGAINGB0LDQsNGCJyxcbiAgICAgICAgICAgIGhoIDogJyVkINGB0LDQsNGCJyxcbiAgICAgICAgICAgIGQgOiAn0LHQuNGAINC60q/QvScsXG4gICAgICAgICAgICBkZCA6ICclZCDQutKv0L0nLFxuICAgICAgICAgICAgTSA6ICfQsdC40YAg0LDQuScsXG4gICAgICAgICAgICBNTSA6ICclZCDQsNC5JyxcbiAgICAgICAgICAgIHkgOiAn0LHQuNGAINC20YvQuycsXG4gICAgICAgICAgICB5eSA6ICclZCDQttGL0LsnXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS0o0YfQuHzRh9GLfNGH0q980YfRgykvLFxuICAgICAgICBvcmRpbmFsIDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGEgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBiID0gbnVtYmVyID49IDEwMCA/IDEwMCA6IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKHN1ZmZpeGVzW251bWJlcl0gfHwgc3VmZml4ZXNbYV0gfHwgc3VmZml4ZXNbYl0pO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA3ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxc3QgaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBreTtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///86\n")},87:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var ko = moment.defineLocale('ko', {\n        months : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),\n        monthsShort : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),\n        weekdays : '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),\n        weekdaysShort : '일_월_화_수_목_금_토'.split('_'),\n        weekdaysMin : '일_월_화_수_목_금_토'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm',\n            LTS : 'A h:mm:ss',\n            L : 'YYYY.MM.DD.',\n            LL : 'YYYY년 MMMM D일',\n            LLL : 'YYYY년 MMMM D일 A h:mm',\n            LLLL : 'YYYY년 MMMM D일 dddd A h:mm',\n            l : 'YYYY.MM.DD.',\n            ll : 'YYYY년 MMMM D일',\n            lll : 'YYYY년 MMMM D일 A h:mm',\n            llll : 'YYYY년 MMMM D일 dddd A h:mm'\n        },\n        calendar : {\n            sameDay : '오늘 LT',\n            nextDay : '내일 LT',\n            nextWeek : 'dddd LT',\n            lastDay : '어제 LT',\n            lastWeek : '지난주 dddd LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s 후',\n            past : '%s 전',\n            s : '몇 초',\n            ss : '%d초',\n            m : '1분',\n            mm : '%d분',\n            h : '한 시간',\n            hh : '%d시간',\n            d : '하루',\n            dd : '%d일',\n            M : '한 달',\n            MM : '%d달',\n            y : '일 년',\n            yy : '%d년'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}(일|월|주)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '일';\n                case 'M':\n                    return number + '월';\n                case 'w':\n                case 'W':\n                    return number + '주';\n                default:\n                    return number;\n            }\n        },\n        meridiemParse : /오전|오후/,\n        isPM : function (token) {\n            return token === '오후';\n        },\n        meridiem : function (hour, minute, isUpper) {\n            return hour < 12 ? '오전' : '오후';\n        }\n    });\n\n    return ko;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9rby5qcz8yMmY4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxxQ0FBcUMsSUFBSTtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiODcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBrbyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2tvJywge1xuICAgICAgICBtb250aHMgOiAnMeyblF8y7JuUXzPsm5RfNOyblF817JuUXzbsm5RfN+yblF847JuUXznsm5RfMTDsm5RfMTHsm5RfMTLsm5QnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJzHsm5RfMuyblF8z7JuUXzTsm5RfNeyblF827JuUXzfsm5RfOOyblF857JuUXzEw7JuUXzEx7JuUXzEy7JuUJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6ICfsnbzsmpTsnbxf7JuU7JqU7J28X+2ZlOyalOydvF/siJjsmpTsnbxf66qp7JqU7J28X+q4iOyalOydvF/thqDsmpTsnbwnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAn7J28X+yblF/tmZRf7IiYX+uqqV/quIhf7YagJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICfsnbxf7JuUX+2ZlF/siJhf66qpX+q4iF/thqAnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnQSBoOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdBIGg6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdZWVlZLk1NLkRELicsXG4gICAgICAgICAgICBMTCA6ICdZWVlZ64WEIE1NTU0gROydvCcsXG4gICAgICAgICAgICBMTEwgOiAnWVlZWeuFhCBNTU1NIETsnbwgQSBoOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnWVlZWeuFhCBNTU1NIETsnbwgZGRkZCBBIGg6bW0nLFxuICAgICAgICAgICAgbCA6ICdZWVlZLk1NLkRELicsXG4gICAgICAgICAgICBsbCA6ICdZWVlZ64WEIE1NTU0gROydvCcsXG4gICAgICAgICAgICBsbGwgOiAnWVlZWeuFhCBNTU1NIETsnbwgQSBoOm1tJyxcbiAgICAgICAgICAgIGxsbGwgOiAnWVlZWeuFhCBNTU1NIETsnbwgZGRkZCBBIGg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICfsmKTripggTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICfrgrTsnbwgTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnZGRkZCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5IDogJ+yWtOygnCBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlayA6ICfsp4Drgpzso7wgZGRkZCBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnJXMg7ZuEJyxcbiAgICAgICAgICAgIHBhc3QgOiAnJXMg7KCEJyxcbiAgICAgICAgICAgIHMgOiAn66qHIOy0iCcsXG4gICAgICAgICAgICBzcyA6ICclZOy0iCcsXG4gICAgICAgICAgICBtIDogJzHrtoQnLFxuICAgICAgICAgICAgbW0gOiAnJWTrtoQnLFxuICAgICAgICAgICAgaCA6ICftlZwg7Iuc6rCEJyxcbiAgICAgICAgICAgIGhoIDogJyVk7Iuc6rCEJyxcbiAgICAgICAgICAgIGQgOiAn7ZWY66OoJyxcbiAgICAgICAgICAgIGRkIDogJyVk7J28JyxcbiAgICAgICAgICAgIE0gOiAn7ZWcIOuLrCcsXG4gICAgICAgICAgICBNTSA6ICclZOuLrCcsXG4gICAgICAgICAgICB5IDogJ+ydvCDrhYQnLFxuICAgICAgICAgICAgeXkgOiAnJWTrhYQnXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2UgOiAvXFxkezEsMn0o7J28fOyblHzso7wpLyxcbiAgICAgICAgb3JkaW5hbCA6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+ydvCc7XG4gICAgICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn7JuUJztcbiAgICAgICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfso7wnO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2UgOiAv7Jik7KCEfOyYpO2bhC8sXG4gICAgICAgIGlzUE0gOiBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbiA9PT0gJ+yYpO2bhCc7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtIDogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNVcHBlcikge1xuICAgICAgICAgICAgcmV0dXJuIGhvdXIgPCAxMiA/ICfsmKTsoIQnIDogJ+yYpO2bhCc7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBrbztcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///87\n")},88:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '೧',\n        '2': '೨',\n        '3': '೩',\n        '4': '೪',\n        '5': '೫',\n        '6': '೬',\n        '7': '೭',\n        '8': '೮',\n        '9': '೯',\n        '0': '೦'\n    },\n    numberMap = {\n        '೧': '1',\n        '೨': '2',\n        '೩': '3',\n        '೪': '4',\n        '೫': '5',\n        '೬': '6',\n        '೭': '7',\n        '೮': '8',\n        '೯': '9',\n        '೦': '0'\n    };\n\n    var kn = moment.defineLocale('kn', {\n        months : 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split('_'),\n        monthsShort : 'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split('_'),\n        weekdaysShort : 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'),\n        weekdaysMin : 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm',\n            LTS : 'A h:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm'\n        },\n        calendar : {\n            sameDay : '[ಇಂದು] LT',\n            nextDay : '[ನಾಳೆ] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[ನಿನ್ನೆ] LT',\n            lastWeek : '[ಕೊನೆಯ] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s ನಂತರ',\n            past : '%s ಹಿಂದೆ',\n            s : 'ಕೆಲವು ಕ್ಷಣಗಳು',\n            ss : '%d ಸೆಕೆಂಡುಗಳು',\n            m : 'ಒಂದು ನಿಮಿಷ',\n            mm : '%d ನಿಮಿಷ',\n            h : 'ಒಂದು ಗಂಟೆ',\n            hh : '%d ಗಂಟೆ',\n            d : 'ಒಂದು ದಿನ',\n            dd : '%d ದಿನ',\n            M : 'ಒಂದು ತಿಂಗಳು',\n            MM : '%d ತಿಂಗಳು',\n            y : 'ಒಂದು ವರ್ಷ',\n            yy : '%d ವರ್ಷ'\n        },\n        preparse: function (string) {\n            return string.replace(/[೧೨೩೪೫೬೭೮೯೦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ರಾತ್ರಿ') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ಬೆಳಿಗ್ಗೆ') {\n                return hour;\n            } else if (meridiem === 'ಮಧ್ಯಾಹ್ನ') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'ಸಂಜೆ') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ರಾತ್ರಿ';\n            } else if (hour < 10) {\n                return 'ಬೆಳಿಗ್ಗೆ';\n            } else if (hour < 17) {\n                return 'ಮಧ್ಯಾಹ್ನ';\n            } else if (hour < 20) {\n                return 'ಸಂಜೆ';\n            } else {\n                return 'ರಾತ್ರಿ';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ನೇ)/,\n        ordinal : function (number) {\n            return number + 'ನೇ';\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return kn;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9rbi5qcz8zZTkyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwiZmlsZSI6Ijg4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAnMSc6ICfgs6cnLFxuICAgICAgICAnMic6ICfgs6gnLFxuICAgICAgICAnMyc6ICfgs6knLFxuICAgICAgICAnNCc6ICfgs6onLFxuICAgICAgICAnNSc6ICfgs6snLFxuICAgICAgICAnNic6ICfgs6wnLFxuICAgICAgICAnNyc6ICfgs60nLFxuICAgICAgICAnOCc6ICfgs64nLFxuICAgICAgICAnOSc6ICfgs68nLFxuICAgICAgICAnMCc6ICfgs6YnXG4gICAgfSxcbiAgICBudW1iZXJNYXAgPSB7XG4gICAgICAgICfgs6cnOiAnMScsXG4gICAgICAgICfgs6gnOiAnMicsXG4gICAgICAgICfgs6knOiAnMycsXG4gICAgICAgICfgs6onOiAnNCcsXG4gICAgICAgICfgs6snOiAnNScsXG4gICAgICAgICfgs6wnOiAnNicsXG4gICAgICAgICfgs60nOiAnNycsXG4gICAgICAgICfgs64nOiAnOCcsXG4gICAgICAgICfgs68nOiAnOScsXG4gICAgICAgICfgs6YnOiAnMCdcbiAgICB9O1xuXG4gICAgdmFyIGtuID0gbW9tZW50LmRlZmluZUxvY2FsZSgna24nLCB7XG4gICAgICAgIG1vbnRocyA6ICfgspzgsqjgsrXgsrDgsr9f4LKr4LOG4LKs4LON4LKw4LK14LKw4LK/X+CyruCyvuCysOCzjeCymuCzjV/gso/gsqrgs43gsrDgsr/gsrLgs41f4LKu4LOG4LOVX+CynOCzguCyqOCzjV/gspzgs4HgsrLgs4bgs5Zf4LKG4LKX4LK44LON4LKf4LONX+CyuOCzhuCyquCzjeCyn+CzhuCyguCyrOCysOCzjV/gsoXgspXgs43gsp/gs4bgs4Lgs5XgsqzgsrDgs41f4LKo4LK14LOG4LKC4LKs4LKw4LONX+CyoeCyv+CyuOCzhuCyguCyrOCysOCzjScuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAn4LKc4LKoX+Cyq+CzhuCyrOCzjeCysF/gsq7gsr7gsrDgs43gsprgs41f4LKP4LKq4LON4LKw4LK/4LKy4LONX+CyruCzhuCzlV/gspzgs4Lgsqjgs41f4LKc4LOB4LKy4LOG4LOWX+CyhuCyl+CyuOCzjeCyn+CzjV/gsrjgs4bgsqrgs43gsp/gs4bgsoJf4LKF4LKV4LON4LKf4LOG4LOC4LOVX+CyqOCyteCzhuCygl/gsqHgsr/gsrjgs4bgsoInLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzIDogJ+CyreCyvuCyqOCzgeCyteCyvuCysF/gsrjgs4bgs4Lgs5Xgsq7gsrXgsr7gsrBf4LKu4LKC4LKX4LKz4LK14LK+4LKwX+CyrOCzgeCyp+CyteCyvuCysF/gspfgs4HgsrDgs4HgsrXgsr7gsrBf4LK24LOB4LKV4LON4LKw4LK14LK+4LKwX+CytuCyqOCyv+CyteCyvuCysCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICfgsq3gsr7gsqjgs4Ff4LK44LOG4LOC4LOV4LKuX+CyruCyguCyl+Cys1/gsqzgs4Hgsqdf4LKX4LOB4LKw4LOBX+CytuCzgeCyleCzjeCysF/gsrbgsqjgsr8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ+CyreCyvl/gsrjgs4bgs4Lgs5Vf4LKu4LKCX+CyrOCzgV/gspfgs4Ff4LK24LOBX+Cyticuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdBIGg6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0EgaDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZLCBBIGg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgOiAnW+Cyh+CyguCypuCzgV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICdb4LKo4LK+4LKz4LOGXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdkZGRkLCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5IDogJ1vgsqjgsr/gsqjgs43gsqjgs4ZdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogJ1vgspXgs4bgs4Lgsqjgs4bgsq9dIGRkZGQsIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICclcyDgsqjgsoLgsqTgsrAnLFxuICAgICAgICAgICAgcGFzdCA6ICclcyDgsrngsr/gsoLgsqbgs4YnLFxuICAgICAgICAgICAgcyA6ICfgspXgs4bgsrLgsrXgs4Eg4LKV4LON4LK34LKj4LKX4LKz4LOBJyxcbiAgICAgICAgICAgIHNzIDogJyVkIOCyuOCzhuCyleCzhuCyguCyoeCzgeCyl+Cys+CzgScsXG4gICAgICAgICAgICBtIDogJ+CykuCyguCypuCzgSDgsqjgsr/gsq7gsr/gsrcnLFxuICAgICAgICAgICAgbW0gOiAnJWQg4LKo4LK/4LKu4LK/4LK3JyxcbiAgICAgICAgICAgIGggOiAn4LKS4LKC4LKm4LOBIOCyl+CyguCyn+CzhicsXG4gICAgICAgICAgICBoaCA6ICclZCDgspfgsoLgsp/gs4YnLFxuICAgICAgICAgICAgZCA6ICfgspLgsoLgsqbgs4Eg4LKm4LK/4LKoJyxcbiAgICAgICAgICAgIGRkIDogJyVkIOCypuCyv+CyqCcsXG4gICAgICAgICAgICBNIDogJ+CykuCyguCypuCzgSDgsqTgsr/gsoLgspfgsrPgs4EnLFxuICAgICAgICAgICAgTU0gOiAnJWQg4LKk4LK/4LKC4LKX4LKz4LOBJyxcbiAgICAgICAgICAgIHkgOiAn4LKS4LKC4LKm4LOBIOCyteCysOCzjeCytycsXG4gICAgICAgICAgICB5eSA6ICclZCDgsrXgsrDgs43gsrcnXG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1vgs6fgs6jgs6ngs6rgs6vgs6zgs63gs67gs6/gs6ZdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/gsrDgsr7gsqTgs43gsrDgsr984LKs4LOG4LKz4LK/4LKX4LON4LKX4LOGfOCyruCyp+CzjeCyr+CyvuCyueCzjeCyqHzgsrjgsoLgspzgs4YvLFxuICAgICAgICBtZXJpZGllbUhvdXIgOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn4LKw4LK+4LKk4LON4LKw4LK/Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyIDwgNCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4LKs4LOG4LKz4LK/4LKX4LON4LKX4LOGJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CyruCyp+CzjeCyr+CyvuCyueCzjeCyqCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4LK44LKC4LKc4LOGJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtIDogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgsrDgsr7gsqTgs43gsrDgsr8nO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CyrOCzhuCys+Cyv+Cyl+CzjeCyl+Czhic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LKu4LKn4LON4LKv4LK+4LK54LON4LKoJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgsrjgsoLgspzgs4YnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CysOCyvuCypOCzjeCysOCyvyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSjgsqjgs4bgs5UpLyxcbiAgICAgICAgb3JkaW5hbCA6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn4LKo4LOG4LOVJztcbiAgICAgICAgfSxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNiAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMXN0IGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4ga247XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///88\n")},89:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '១',\n        '2': '២',\n        '3': '៣',\n        '4': '៤',\n        '5': '៥',\n        '6': '៦',\n        '7': '៧',\n        '8': '៨',\n        '9': '៩',\n        '0': '០'\n    }, numberMap = {\n        '១': '1',\n        '២': '2',\n        '៣': '3',\n        '៤': '4',\n        '៥': '5',\n        '៦': '6',\n        '៧': '7',\n        '៨': '8',\n        '៩': '9',\n        '០': '0'\n    };\n\n    var km = moment.defineLocale('km', {\n        months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(\n            '_'\n        ),\n        monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(\n            '_'\n        ),\n        weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),\n        weekdaysShort: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n        weekdaysMin: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /ព្រឹក|ល្ងាច/,\n        isPM: function (input) {\n            return input === 'ល្ងាច';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ព្រឹក';\n            } else {\n                return 'ល្ងាច';\n            }\n        },\n        calendar: {\n            sameDay: '[ថ្ងៃនេះ ម៉ោង] LT',\n            nextDay: '[ស្អែក ម៉ោង] LT',\n            nextWeek: 'dddd [ម៉ោង] LT',\n            lastDay: '[ម្សិលមិញ ម៉ោង] LT',\n            lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: '%sទៀត',\n            past: '%sមុន',\n            s: 'ប៉ុន្មានវិនាទី',\n            ss: '%d វិនាទី',\n            m: 'មួយនាទី',\n            mm: '%d នាទី',\n            h: 'មួយម៉ោង',\n            hh: '%d ម៉ោង',\n            d: 'មួយថ្ងៃ',\n            dd: '%d ថ្ងៃ',\n            M: 'មួយខែ',\n            MM: '%d ខែ',\n            y: 'មួយឆ្នាំ',\n            yy: '%d ឆ្នាំ'\n        },\n        dayOfMonthOrdinalParse : /ទី\\d{1,2}/,\n        ordinal : 'ទី%d',\n        preparse: function (string) {\n            return string.replace(/[១២៣៤៥៦៧៨៩០]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4 // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return km;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9rbS5qcz9lODFkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsdUNBQXVDLElBQUk7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiODkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICcxJzogJ+GfoScsXG4gICAgICAgICcyJzogJ+GfoicsXG4gICAgICAgICczJzogJ+GfoycsXG4gICAgICAgICc0JzogJ+GfpCcsXG4gICAgICAgICc1JzogJ+GfpScsXG4gICAgICAgICc2JzogJ+GfpicsXG4gICAgICAgICc3JzogJ+GfpycsXG4gICAgICAgICc4JzogJ+GfqCcsXG4gICAgICAgICc5JzogJ+GfqScsXG4gICAgICAgICcwJzogJ+GfoCdcbiAgICB9LCBudW1iZXJNYXAgPSB7XG4gICAgICAgICfhn6EnOiAnMScsXG4gICAgICAgICfhn6InOiAnMicsXG4gICAgICAgICfhn6MnOiAnMycsXG4gICAgICAgICfhn6QnOiAnNCcsXG4gICAgICAgICfhn6UnOiAnNScsXG4gICAgICAgICfhn6YnOiAnNicsXG4gICAgICAgICfhn6cnOiAnNycsXG4gICAgICAgICfhn6gnOiAnOCcsXG4gICAgICAgICfhn6knOiAnOScsXG4gICAgICAgICfhn6AnOiAnMCdcbiAgICB9O1xuXG4gICAgdmFyIGttID0gbW9tZW50LmRlZmluZUxvY2FsZSgna20nLCB7XG4gICAgICAgIG1vbnRoczogJ+GemOGegOGemuGetl/hnoDhnrvhnpjhn5Lhnpfhn4hf4Z6Y4Z644Z6T4Z62X+GemOGfgeGen+Getl/hnqfhnp/hnpfhnrZf4Z6Y4Z634Z6Q4Z674Z6T4Z62X+GegOGegOGfkuGegOGeiuGetl/hnp/hnrjhnqDhnrZf4Z6A4Z6J4Z+S4Z6J4Z62X+Gej+Geu+Gem+Getl/hnpzhnrfhnoXhn5LhnobhnrfhnoDhnrZf4Z6S4Z+S4Z6T4Z68Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ+GemOGegOGemuGetl/hnoDhnrvhnpjhn5Lhnpfhn4hf4Z6Y4Z644Z6T4Z62X+GemOGfgeGen+Getl/hnqfhnp/hnpfhnrZf4Z6Y4Z634Z6Q4Z674Z6T4Z62X+GegOGegOGfkuGegOGeiuGetl/hnp/hnrjhnqDhnrZf4Z6A4Z6J4Z+S4Z6J4Z62X+Gej+Geu+Gem+Getl/hnpzhnrfhnoXhn5LhnobhnrfhnoDhnrZf4Z6S4Z+S4Z6T4Z68Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ+GeouGetuGekeGet+Gej+GfkuGemV/hnoXhn5DhnpPhn5LhnpFf4Z6i4Z6E4Z+S4Z6C4Z624Z6aX+GeluGeu+Gekl/hnpbhn5LhnprhnqDhnp/hn5LhnpThno/hnrfhn41f4Z6f4Z674Z6A4Z+S4Z6aX+Gen+GfheGemuGfjScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+GeouGetl/hnoVf4Z6iX+Gell/hnpbhn5Lhnppf4Z6f4Z67X+Genycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfhnqLhnrZf4Z6FX+Geol/hnpZf4Z6W4Z+S4Z6aX+Gen+Geu1/hnp8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/hnpbhn5LhnprhnrnhnoB84Z6b4Z+S4Z6E4Z624Z6FLyxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgPT09ICfhnpvhn5LhnoThnrbhnoUnO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Z6W4Z+S4Z6a4Z654Z6AJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfhnpvhn5LhnoThnrbhnoUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vhnpDhn5LhnoThn4PhnpPhn4Hhn4cg4Z6Y4Z+J4Z+E4Z6EXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+Gen+GfkuGeouGfguGegCDhnpjhn4nhn4ThnoRdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb4Z6Y4Z+J4Z+E4Z6EXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+GemOGfkuGen+Get+Gem+GemOGet+GeiSDhnpjhn4nhn4ThnoRdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBb4Z6f4Z6U4Z+S4Z6P4Z624Z6g4Z+N4Z6Y4Z674Z6TXSBb4Z6Y4Z+J4Z+E4Z6EXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXPhnpHhn4Dhno8nLFxuICAgICAgICAgICAgcGFzdDogJyVz4Z6Y4Z674Z6TJyxcbiAgICAgICAgICAgIHM6ICfhnpThn4nhnrvhnpPhn5LhnpjhnrbhnpPhnpzhnrfhnpPhnrbhnpHhnrgnLFxuICAgICAgICAgICAgc3M6ICclZCDhnpzhnrfhnpPhnrbhnpHhnrgnLFxuICAgICAgICAgICAgbTogJ+GemOGeveGemeGek+GetuGekeGeuCcsXG4gICAgICAgICAgICBtbTogJyVkIOGek+GetuGekeGeuCcsXG4gICAgICAgICAgICBoOiAn4Z6Y4Z694Z6Z4Z6Y4Z+J4Z+E4Z6EJyxcbiAgICAgICAgICAgIGhoOiAnJWQg4Z6Y4Z+J4Z+E4Z6EJyxcbiAgICAgICAgICAgIGQ6ICfhnpjhnr3hnpnhnpDhn5LhnoThn4MnLFxuICAgICAgICAgICAgZGQ6ICclZCDhnpDhn5LhnoThn4MnLFxuICAgICAgICAgICAgTTogJ+GemOGeveGemeGegeGfgicsXG4gICAgICAgICAgICBNTTogJyVkIOGegeGfgicsXG4gICAgICAgICAgICB5OiAn4Z6Y4Z694Z6Z4Z6G4Z+S4Z6T4Z624Z+GJyxcbiAgICAgICAgICAgIHl5OiAnJWQg4Z6G4Z+S4Z6T4Z624Z+GJ1xuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlIDogL+GekeGeuFxcZHsxLDJ9LyxcbiAgICAgICAgb3JkaW5hbCA6ICfhnpHhnrglZCcsXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1vhn6Hhn6Lhn6Phn6Thn6Xhn6bhn6fhn6jhn6nhn6BdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4ga207XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///89\n")},9:function(module,__webpack_exports__,__webpack_require__){"use strict";eval("\n// EXTERNAL MODULE: ./node_modules/aurelia-logging/dist/native-modules/aurelia-logging.js\nvar aurelia_logging = __webpack_require__(5);\n\n// CONCATENATED MODULE: ./node_modules/i18next/dist/es/logger.js\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar consoleLogger = {\n  type: 'logger',\n\n  log: function log(args) {\n    this.output('log', args);\n  },\n  warn: function warn(args) {\n    this.output('warn', args);\n  },\n  error: function error(args) {\n    this.output('error', args);\n  },\n  output: function output(type, args) {\n    var _console;\n\n    /* eslint no-console: 0 */\n    if (console && console[type]) (_console = console)[type].apply(_console, _toConsumableArray(args));\n  }\n};\n\nvar Logger = function () {\n  function Logger(concreteLogger) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    _classCallCheck(this, Logger);\n\n    this.init(concreteLogger, options);\n  }\n\n  Logger.prototype.init = function init(concreteLogger) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    this.prefix = options.prefix || 'i18next:';\n    this.logger = concreteLogger || consoleLogger;\n    this.options = options;\n    this.debug = options.debug;\n  };\n\n  Logger.prototype.setDebug = function setDebug(bool) {\n    this.debug = bool;\n  };\n\n  Logger.prototype.log = function log() {\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return this.forward(args, 'log', '', true);\n  };\n\n  Logger.prototype.warn = function warn() {\n    for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n\n    return this.forward(args, 'warn', '', true);\n  };\n\n  Logger.prototype.error = function error() {\n    for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n      args[_key3] = arguments[_key3];\n    }\n\n    return this.forward(args, 'error', '');\n  };\n\n  Logger.prototype.deprecate = function deprecate() {\n    for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n      args[_key4] = arguments[_key4];\n    }\n\n    return this.forward(args, 'warn', 'WARNING DEPRECATED: ', true);\n  };\n\n  Logger.prototype.forward = function forward(args, lvl, prefix, debugOnly) {\n    if (debugOnly && !this.debug) return null;\n    if (typeof args[0] === 'string') args[0] = '' + prefix + this.prefix + ' ' + args[0];\n    return this.logger[lvl](args);\n  };\n\n  Logger.prototype.create = function create(moduleName) {\n    return new Logger(this.logger, _extends({ prefix: this.prefix + ':' + moduleName + ':' }, this.options));\n  };\n\n  return Logger;\n}();\n\n/* harmony default export */ var logger = (new Logger());\n// CONCATENATED MODULE: ./node_modules/i18next/dist/es/EventEmitter.js\nfunction EventEmitter_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar EventEmitter = function () {\n  function EventEmitter() {\n    EventEmitter_classCallCheck(this, EventEmitter);\n\n    this.observers = {};\n  }\n\n  EventEmitter.prototype.on = function on(events, listener) {\n    var _this = this;\n\n    events.split(' ').forEach(function (event) {\n      _this.observers[event] = _this.observers[event] || [];\n      _this.observers[event].push(listener);\n    });\n    return this;\n  };\n\n  EventEmitter.prototype.off = function off(event, listener) {\n    var _this2 = this;\n\n    if (!this.observers[event]) {\n      return;\n    }\n\n    this.observers[event].forEach(function () {\n      if (!listener) {\n        delete _this2.observers[event];\n      } else {\n        var index = _this2.observers[event].indexOf(listener);\n        if (index > -1) {\n          _this2.observers[event].splice(index, 1);\n        }\n      }\n    });\n  };\n\n  EventEmitter.prototype.emit = function emit(event) {\n    for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    if (this.observers[event]) {\n      var cloned = [].concat(this.observers[event]);\n      cloned.forEach(function (observer) {\n        observer.apply(undefined, args);\n      });\n    }\n\n    if (this.observers['*']) {\n      var _cloned = [].concat(this.observers['*']);\n      _cloned.forEach(function (observer) {\n        observer.apply(observer, [event].concat(args));\n      });\n    }\n  };\n\n  return EventEmitter;\n}();\n\n/* harmony default export */ var es_EventEmitter = (EventEmitter);\n// CONCATENATED MODULE: ./node_modules/i18next/dist/es/utils.js\nfunction makeString(object) {\n  if (object == null) return '';\n  /* eslint prefer-template: 0 */\n  return '' + object;\n}\n\nfunction copy(a, s, t) {\n  a.forEach(function (m) {\n    if (s[m]) t[m] = s[m];\n  });\n}\n\nfunction getLastOfPath(object, path, Empty) {\n  function cleanKey(key) {\n    return key && key.indexOf('###') > -1 ? key.replace(/###/g, '.') : key;\n  }\n\n  function canNotTraverseDeeper() {\n    return !object || typeof object === 'string';\n  }\n\n  var stack = typeof path !== 'string' ? [].concat(path) : path.split('.');\n  while (stack.length > 1) {\n    if (canNotTraverseDeeper()) return {};\n\n    var key = cleanKey(stack.shift());\n    if (!object[key] && Empty) object[key] = new Empty();\n    object = object[key];\n  }\n\n  if (canNotTraverseDeeper()) return {};\n  return {\n    obj: object,\n    k: cleanKey(stack.shift())\n  };\n}\n\nfunction setPath(object, path, newValue) {\n  var _getLastOfPath = getLastOfPath(object, path, Object),\n      obj = _getLastOfPath.obj,\n      k = _getLastOfPath.k;\n\n  obj[k] = newValue;\n}\n\nfunction pushPath(object, path, newValue, concat) {\n  var _getLastOfPath2 = getLastOfPath(object, path, Object),\n      obj = _getLastOfPath2.obj,\n      k = _getLastOfPath2.k;\n\n  obj[k] = obj[k] || [];\n  if (concat) obj[k] = obj[k].concat(newValue);\n  if (!concat) obj[k].push(newValue);\n}\n\nfunction getPath(object, path) {\n  var _getLastOfPath3 = getLastOfPath(object, path),\n      obj = _getLastOfPath3.obj,\n      k = _getLastOfPath3.k;\n\n  if (!obj) return undefined;\n  return obj[k];\n}\n\nfunction deepExtend(target, source, overwrite) {\n  /* eslint no-restricted-syntax: 0 */\n  for (var prop in source) {\n    if (prop in target) {\n      // If we reached a leaf string in target or source then replace with source or skip depending on the 'overwrite' switch\n      if (typeof target[prop] === 'string' || target[prop] instanceof String || typeof source[prop] === 'string' || source[prop] instanceof String) {\n        if (overwrite) target[prop] = source[prop];\n      } else {\n        deepExtend(target[prop], source[prop], overwrite);\n      }\n    } else {\n      target[prop] = source[prop];\n    }\n  }\n  return target;\n}\n\nfunction regexEscape(str) {\n  /* eslint no-useless-escape: 0 */\n  return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\n}\n\n/* eslint-disable */\nvar _entityMap = {\n  \"&\": \"&amp;\",\n  \"<\": \"&lt;\",\n  \">\": \"&gt;\",\n  '\"': '&quot;',\n  \"'\": '&#39;',\n  \"/\": '&#x2F;'\n};\n/* eslint-enable */\n\nfunction utils_escape(data) {\n  if (typeof data === 'string') {\n    return data.replace(/[&<>\"'\\/]/g, function (s) {\n      return _entityMap[s];\n    });\n  }\n\n  return data;\n}\n// CONCATENATED MODULE: ./node_modules/i18next/dist/es/ResourceStore.js\nvar ResourceStore_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }\n\nfunction ResourceStore_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); }\n\n\n\n\nvar ResourceStore_ResourceStore = function (_EventEmitter) {\n  _inherits(ResourceStore, _EventEmitter);\n\n  function ResourceStore(data) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { ns: ['translation'], defaultNS: 'translation' };\n\n    ResourceStore_classCallCheck(this, ResourceStore);\n\n    var _this = _possibleConstructorReturn(this, _EventEmitter.call(this));\n\n    _this.data = data || {};\n    _this.options = options;\n    if (_this.options.keySeparator === undefined) {\n      _this.options.keySeparator = '.';\n    }\n    return _this;\n  }\n\n  ResourceStore.prototype.addNamespaces = function addNamespaces(ns) {\n    if (this.options.ns.indexOf(ns) < 0) {\n      this.options.ns.push(ns);\n    }\n  };\n\n  ResourceStore.prototype.removeNamespaces = function removeNamespaces(ns) {\n    var index = this.options.ns.indexOf(ns);\n    if (index > -1) {\n      this.options.ns.splice(index, 1);\n    }\n  };\n\n  ResourceStore.prototype.getResource = function getResource(lng, ns, key) {\n    var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n    var keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n\n    var path = [lng, ns];\n    if (key && typeof key !== 'string') path = path.concat(key);\n    if (key && typeof key === 'string') path = path.concat(keySeparator ? key.split(keySeparator) : key);\n\n    if (lng.indexOf('.') > -1) {\n      path = lng.split('.');\n    }\n\n    return getPath(this.data, path);\n  };\n\n  ResourceStore.prototype.addResource = function addResource(lng, ns, key, value) {\n    var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : { silent: false };\n\n    var keySeparator = this.options.keySeparator;\n    if (keySeparator === undefined) keySeparator = '.';\n\n    var path = [lng, ns];\n    if (key) path = path.concat(keySeparator ? key.split(keySeparator) : key);\n\n    if (lng.indexOf('.') > -1) {\n      path = lng.split('.');\n      value = ns;\n      ns = path[1];\n    }\n\n    this.addNamespaces(ns);\n\n    setPath(this.data, path, value);\n\n    if (!options.silent) this.emit('added', lng, ns, key, value);\n  };\n\n  ResourceStore.prototype.addResources = function addResources(lng, ns, resources) {\n    var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : { silent: false };\n\n    /* eslint no-restricted-syntax: 0 */\n    for (var m in resources) {\n      if (typeof resources[m] === 'string') this.addResource(lng, ns, m, resources[m], { silent: true });\n    }\n    if (!options.silent) this.emit('added', lng, ns, resources);\n  };\n\n  ResourceStore.prototype.addResourceBundle = function addResourceBundle(lng, ns, resources, deep, overwrite) {\n    var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : { silent: false };\n\n    var path = [lng, ns];\n    if (lng.indexOf('.') > -1) {\n      path = lng.split('.');\n      deep = resources;\n      resources = ns;\n      ns = path[1];\n    }\n\n    this.addNamespaces(ns);\n\n    var pack = getPath(this.data, path) || {};\n\n    if (deep) {\n      deepExtend(pack, resources, overwrite);\n    } else {\n      pack = ResourceStore_extends({}, pack, resources);\n    }\n\n    setPath(this.data, path, pack);\n\n    if (!options.silent) this.emit('added', lng, ns, resources);\n  };\n\n  ResourceStore.prototype.removeResourceBundle = function removeResourceBundle(lng, ns) {\n    if (this.hasResourceBundle(lng, ns)) {\n      delete this.data[lng][ns];\n    }\n    this.removeNamespaces(ns);\n\n    this.emit('removed', lng, ns);\n  };\n\n  ResourceStore.prototype.hasResourceBundle = function hasResourceBundle(lng, ns) {\n    return this.getResource(lng, ns) !== undefined;\n  };\n\n  ResourceStore.prototype.getResourceBundle = function getResourceBundle(lng, ns) {\n    if (!ns) ns = this.options.defaultNS;\n\n    // COMPATIBILITY: remove extend in v2.1.0\n    if (this.options.compatibilityAPI === 'v1') return ResourceStore_extends({}, this.getResource(lng, ns));\n\n    return this.getResource(lng, ns);\n  };\n\n  ResourceStore.prototype.getDataByLanguage = function getDataByLanguage(lng) {\n    return this.data[lng];\n  };\n\n  ResourceStore.prototype.toJSON = function toJSON() {\n    return this.data;\n  };\n\n  return ResourceStore;\n}(es_EventEmitter);\n\n/* harmony default export */ var es_ResourceStore = (ResourceStore_ResourceStore);\n// CONCATENATED MODULE: ./node_modules/i18next/dist/es/postProcessor.js\n/* harmony default export */ var postProcessor = ({\n\n  processors: {},\n\n  addPostProcessor: function addPostProcessor(module) {\n    this.processors[module.name] = module;\n  },\n  handle: function handle(processors, value, key, options, translator) {\n    var _this = this;\n\n    processors.forEach(function (processor) {\n      if (_this.processors[processor]) value = _this.processors[processor].process(value, key, options, translator);\n    });\n\n    return value;\n  }\n});\n// CONCATENATED MODULE: ./node_modules/i18next/dist/es/Translator.js\nvar Translator_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction Translator_defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }\n\nfunction Translator_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction Translator_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction Translator_inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : Translator_defaults(subClass, superClass); }\n\n\n\n\n\n\nvar Translator_Translator = function (_EventEmitter) {\n  Translator_inherits(Translator, _EventEmitter);\n\n  function Translator(services) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    Translator_classCallCheck(this, Translator);\n\n    var _this = Translator_possibleConstructorReturn(this, _EventEmitter.call(this));\n\n    copy(['resourceStore', 'languageUtils', 'pluralResolver', 'interpolator', 'backendConnector', 'i18nFormat'], services, _this);\n\n    _this.options = options;\n    if (_this.options.keySeparator === undefined) {\n      _this.options.keySeparator = '.';\n    }\n\n    _this.logger = logger.create('translator');\n    return _this;\n  }\n\n  Translator.prototype.changeLanguage = function changeLanguage(lng) {\n    if (lng) this.language = lng;\n  };\n\n  Translator.prototype.exists = function exists(key) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { interpolation: {} };\n\n    var resolved = this.resolve(key, options);\n    return resolved && resolved.res !== undefined;\n  };\n\n  Translator.prototype.extractFromKey = function extractFromKey(key, options) {\n    var nsSeparator = options.nsSeparator || this.options.nsSeparator;\n    if (nsSeparator === undefined) nsSeparator = ':';\n\n    var keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n\n    var namespaces = options.ns || this.options.defaultNS;\n    if (nsSeparator && key.indexOf(nsSeparator) > -1) {\n      var parts = key.split(nsSeparator);\n      if (nsSeparator !== keySeparator || nsSeparator === keySeparator && this.options.ns.indexOf(parts[0]) > -1) namespaces = parts.shift();\n      key = parts.join(keySeparator);\n    }\n    if (typeof namespaces === 'string') namespaces = [namespaces];\n\n    return {\n      key: key,\n      namespaces: namespaces\n    };\n  };\n\n  Translator.prototype.translate = function translate(keys, options) {\n    var _this2 = this;\n\n    if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) !== 'object' && this.options.overloadTranslationOptionHandler) {\n      /* eslint prefer-rest-params: 0 */\n      options = this.options.overloadTranslationOptionHandler(arguments);\n    }\n    if (!options) options = {};\n\n    // non valid keys handling\n    if (keys === undefined || keys === null || keys === '') return '';\n    if (typeof keys === 'number') keys = String(keys);\n    if (typeof keys === 'string') keys = [keys];\n\n    // separators\n    var keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n\n    // get namespace(s)\n\n    var _extractFromKey = this.extractFromKey(keys[keys.length - 1], options),\n        key = _extractFromKey.key,\n        namespaces = _extractFromKey.namespaces;\n\n    var namespace = namespaces[namespaces.length - 1];\n\n    // return key on CIMode\n    var lng = options.lng || this.language;\n    var appendNamespaceToCIMode = options.appendNamespaceToCIMode || this.options.appendNamespaceToCIMode;\n    if (lng && lng.toLowerCase() === 'cimode') {\n      if (appendNamespaceToCIMode) {\n        var nsSeparator = options.nsSeparator || this.options.nsSeparator;\n        return namespace + nsSeparator + key;\n      }\n\n      return key;\n    }\n\n    // resolve from store\n    var resolved = this.resolve(keys, options);\n    var res = resolved && resolved.res;\n    var resUsedKey = resolved && resolved.usedKey || key;\n\n    var resType = Object.prototype.toString.apply(res);\n    var noObject = ['[object Number]', '[object Function]', '[object RegExp]'];\n    var joinArrays = options.joinArrays !== undefined ? options.joinArrays : this.options.joinArrays;\n\n    // object\n    var handleAsObjectInI18nFormat = !this.i18nFormat || this.i18nFormat.handleAsObject;\n    var handleAsObject = typeof res !== 'string' && typeof res !== 'boolean' && typeof res !== 'number';\n    if (handleAsObjectInI18nFormat && res && handleAsObject && noObject.indexOf(resType) < 0 && !(joinArrays && resType === '[object Array]')) {\n      if (!options.returnObjects && !this.options.returnObjects) {\n        this.logger.warn('accessing an object - but returnObjects options is not enabled!');\n        return this.options.returnedObjectHandler ? this.options.returnedObjectHandler(resUsedKey, res, options) : 'key \\'' + key + ' (' + this.language + ')\\' returned an object instead of string.';\n      }\n\n      // if we got a separator we loop over children - else we just return object as is\n      // as having it set to false means no hierarchy so no lookup for nested values\n      if (keySeparator) {\n        var copy = resType === '[object Array]' ? [] : {}; // apply child translation on a copy\n\n        /* eslint no-restricted-syntax: 0 */\n        for (var m in res) {\n          if (Object.prototype.hasOwnProperty.call(res, m)) {\n            var deepKey = '' + resUsedKey + keySeparator + m;\n            copy[m] = this.translate(deepKey, Translator_extends({}, options, { joinArrays: false, ns: namespaces }));\n            if (copy[m] === deepKey) copy[m] = res[m]; // if nothing found use orginal value as fallback\n          }\n        }\n        res = copy;\n      }\n    } else if (handleAsObjectInI18nFormat && joinArrays && resType === '[object Array]') {\n      // array special treatment\n      res = res.join(joinArrays);\n      if (res) res = this.extendTranslation(res, keys, options);\n    } else {\n      // string, empty or null\n      var usedDefault = false;\n      var usedKey = false;\n\n      // fallback value\n      if (!this.isValidLookup(res) && options.defaultValue !== undefined) {\n        usedDefault = true;\n\n        if (options.count !== undefined) {\n          var suffix = this.pluralResolver.getSuffix(lng, options.count);\n          res = options['defaultValue' + suffix];\n        }\n        if (!res) res = options.defaultValue;\n      }\n      if (!this.isValidLookup(res)) {\n        usedKey = true;\n        res = key;\n      }\n\n      // save missing\n      var updateMissing = options.defaultValue && options.defaultValue !== res && this.options.updateMissing;\n      if (usedKey || usedDefault || updateMissing) {\n        this.logger.log(updateMissing ? 'updateKey' : 'missingKey', lng, namespace, key, updateMissing ? options.defaultValue : res);\n\n        var lngs = [];\n        var fallbackLngs = this.languageUtils.getFallbackCodes(this.options.fallbackLng, options.lng || this.language);\n        if (this.options.saveMissingTo === 'fallback' && fallbackLngs && fallbackLngs[0]) {\n          for (var i = 0; i < fallbackLngs.length; i++) {\n            lngs.push(fallbackLngs[i]);\n          }\n        } else if (this.options.saveMissingTo === 'all') {\n          lngs = this.languageUtils.toResolveHierarchy(options.lng || this.language);\n        } else {\n          lngs.push(options.lng || this.language);\n        }\n\n        var send = function send(l, k) {\n          if (_this2.options.missingKeyHandler) {\n            _this2.options.missingKeyHandler(l, namespace, k, updateMissing ? options.defaultValue : res, updateMissing, options);\n          } else if (_this2.backendConnector && _this2.backendConnector.saveMissing) {\n            _this2.backendConnector.saveMissing(l, namespace, k, updateMissing ? options.defaultValue : res, updateMissing, options);\n          }\n          _this2.emit('missingKey', l, namespace, k, res);\n        };\n\n        if (this.options.saveMissing) {\n          var needsPluralHandling = options.count !== undefined && typeof options.count !== 'string';\n          if (this.options.saveMissingPlurals && needsPluralHandling) {\n            lngs.forEach(function (l) {\n              var plurals = _this2.pluralResolver.getPluralFormsOfKey(l, key);\n\n              plurals.forEach(function (p) {\n                return send([l], p);\n              });\n            });\n          } else {\n            send(lngs, key);\n          }\n        }\n      }\n\n      // extend\n      res = this.extendTranslation(res, keys, options, resolved);\n\n      // append namespace if still key\n      if (usedKey && res === key && this.options.appendNamespaceToMissingKey) res = namespace + ':' + key;\n\n      // parseMissingKeyHandler\n      if (usedKey && this.options.parseMissingKeyHandler) res = this.options.parseMissingKeyHandler(res);\n    }\n\n    // return\n    return res;\n  };\n\n  Translator.prototype.extendTranslation = function extendTranslation(res, key, options, resolved) {\n    var _this3 = this;\n\n    if (this.i18nFormat && this.i18nFormat.parse) {\n      res = this.i18nFormat.parse(res, options, resolved.usedLng, resolved.usedNS, resolved.usedKey, { resolved: resolved });\n    } else if (!options.skipInterpolation) {\n      // i18next.parsing\n      if (options.interpolation) this.interpolator.init(Translator_extends({}, options, { interpolation: Translator_extends({}, this.options.interpolation, options.interpolation) }));\n\n      // interpolate\n      var data = options.replace && typeof options.replace !== 'string' ? options.replace : options;\n      if (this.options.interpolation.defaultVariables) data = Translator_extends({}, this.options.interpolation.defaultVariables, data);\n      res = this.interpolator.interpolate(res, data, options.lng || this.language, options);\n\n      // nesting\n      if (options.nest !== false) res = this.interpolator.nest(res, function () {\n        return _this3.translate.apply(_this3, arguments);\n      }, options);\n\n      if (options.interpolation) this.interpolator.reset();\n    }\n\n    // post process\n    var postProcess = options.postProcess || this.options.postProcess;\n    var postProcessorNames = typeof postProcess === 'string' ? [postProcess] : postProcess;\n\n    if (res !== undefined && res !== null && postProcessorNames && postProcessorNames.length && options.applyPostProcessor !== false) {\n      res = postProcessor.handle(postProcessorNames, res, key, options, this);\n    }\n\n    return res;\n  };\n\n  Translator.prototype.resolve = function resolve(keys) {\n    var _this4 = this;\n\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    var found = void 0;\n    var usedKey = void 0;\n    var usedLng = void 0;\n    var usedNS = void 0;\n\n    if (typeof keys === 'string') keys = [keys];\n\n    // forEach possible key\n    keys.forEach(function (k) {\n      if (_this4.isValidLookup(found)) return;\n      var extracted = _this4.extractFromKey(k, options);\n      var key = extracted.key;\n      usedKey = key;\n      var namespaces = extracted.namespaces;\n      if (_this4.options.fallbackNS) namespaces = namespaces.concat(_this4.options.fallbackNS);\n\n      var needsPluralHandling = options.count !== undefined && typeof options.count !== 'string';\n      var needsContextHandling = options.context !== undefined && typeof options.context === 'string' && options.context !== '';\n\n      var codes = options.lngs ? options.lngs : _this4.languageUtils.toResolveHierarchy(options.lng || _this4.language, options.fallbackLng);\n\n      namespaces.forEach(function (ns) {\n        if (_this4.isValidLookup(found)) return;\n        usedNS = ns;\n\n        codes.forEach(function (code) {\n          if (_this4.isValidLookup(found)) return;\n          usedLng = code;\n\n          var finalKey = key;\n          var finalKeys = [finalKey];\n\n          if (_this4.i18nFormat && _this4.i18nFormat.addLookupKeys) {\n            _this4.i18nFormat.addLookupKeys(finalKeys, key, code, ns, options);\n          } else {\n            var pluralSuffix = void 0;\n            if (needsPluralHandling) pluralSuffix = _this4.pluralResolver.getSuffix(code, options.count);\n\n            // fallback for plural if context not found\n            if (needsPluralHandling && needsContextHandling) finalKeys.push(finalKey + pluralSuffix);\n\n            // get key for context if needed\n            if (needsContextHandling) finalKeys.push(finalKey += '' + _this4.options.contextSeparator + options.context);\n\n            // get key for plural if needed\n            if (needsPluralHandling) finalKeys.push(finalKey += pluralSuffix);\n          }\n\n          // iterate over finalKeys starting with most specific pluralkey (-> contextkey only) -> singularkey only\n          var possibleKey = void 0;\n          /* eslint no-cond-assign: 0 */\n          while (possibleKey = finalKeys.pop()) {\n            if (!_this4.isValidLookup(found)) {\n              found = _this4.getResource(code, ns, possibleKey, options);\n            }\n          }\n        });\n      });\n    });\n\n    return { res: found, usedKey: usedKey, usedLng: usedLng, usedNS: usedNS };\n  };\n\n  Translator.prototype.isValidLookup = function isValidLookup(res) {\n    return res !== undefined && !(!this.options.returnNull && res === null) && !(!this.options.returnEmptyString && res === '');\n  };\n\n  Translator.prototype.getResource = function getResource(code, ns, key) {\n    var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n    if (this.i18nFormat && this.i18nFormat.getResource) return this.i18nFormat.getResource(code, ns, key, options);\n    return this.resourceStore.getResource(code, ns, key, options);\n  };\n\n  return Translator;\n}(es_EventEmitter);\n\n/* harmony default export */ var es_Translator = (Translator_Translator);\n// CONCATENATED MODULE: ./node_modules/i18next/dist/es/LanguageUtils.js\nfunction LanguageUtils_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\nfunction capitalize(string) {\n  return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nvar LanguageUtils_LanguageUtil = function () {\n  function LanguageUtil(options) {\n    LanguageUtils_classCallCheck(this, LanguageUtil);\n\n    this.options = options;\n\n    this.whitelist = this.options.whitelist || false;\n    this.logger = logger.create('languageUtils');\n  }\n\n  LanguageUtil.prototype.getScriptPartFromCode = function getScriptPartFromCode(code) {\n    if (!code || code.indexOf('-') < 0) return null;\n\n    var p = code.split('-');\n    if (p.length === 2) return null;\n    p.pop();\n    return this.formatLanguageCode(p.join('-'));\n  };\n\n  LanguageUtil.prototype.getLanguagePartFromCode = function getLanguagePartFromCode(code) {\n    if (!code || code.indexOf('-') < 0) return code;\n\n    var p = code.split('-');\n    return this.formatLanguageCode(p[0]);\n  };\n\n  LanguageUtil.prototype.formatLanguageCode = function formatLanguageCode(code) {\n    // http://www.iana.org/assignments/language-tags/language-tags.xhtml\n    if (typeof code === 'string' && code.indexOf('-') > -1) {\n      var specialCases = ['hans', 'hant', 'latn', 'cyrl', 'cans', 'mong', 'arab'];\n      var p = code.split('-');\n\n      if (this.options.lowerCaseLng) {\n        p = p.map(function (part) {\n          return part.toLowerCase();\n        });\n      } else if (p.length === 2) {\n        p[0] = p[0].toLowerCase();\n        p[1] = p[1].toUpperCase();\n\n        if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n      } else if (p.length === 3) {\n        p[0] = p[0].toLowerCase();\n\n        // if lenght 2 guess it's a country\n        if (p[1].length === 2) p[1] = p[1].toUpperCase();\n        if (p[0] !== 'sgn' && p[2].length === 2) p[2] = p[2].toUpperCase();\n\n        if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n        if (specialCases.indexOf(p[2].toLowerCase()) > -1) p[2] = capitalize(p[2].toLowerCase());\n      }\n\n      return p.join('-');\n    }\n\n    return this.options.cleanCode || this.options.lowerCaseLng ? code.toLowerCase() : code;\n  };\n\n  LanguageUtil.prototype.isWhitelisted = function isWhitelisted(code) {\n    if (this.options.load === 'languageOnly' || this.options.nonExplicitWhitelist) {\n      code = this.getLanguagePartFromCode(code);\n    }\n    return !this.whitelist || !this.whitelist.length || this.whitelist.indexOf(code) > -1;\n  };\n\n  LanguageUtil.prototype.getFallbackCodes = function getFallbackCodes(fallbacks, code) {\n    if (!fallbacks) return [];\n    if (typeof fallbacks === 'string') fallbacks = [fallbacks];\n    if (Object.prototype.toString.apply(fallbacks) === '[object Array]') return fallbacks;\n\n    if (!code) return fallbacks.default || [];\n\n    // asume we have an object defining fallbacks\n    var found = fallbacks[code];\n    if (!found) found = fallbacks[this.getScriptPartFromCode(code)];\n    if (!found) found = fallbacks[this.formatLanguageCode(code)];\n    if (!found) found = fallbacks.default;\n\n    return found || [];\n  };\n\n  LanguageUtil.prototype.toResolveHierarchy = function toResolveHierarchy(code, fallbackCode) {\n    var _this = this;\n\n    var fallbackCodes = this.getFallbackCodes(fallbackCode || this.options.fallbackLng || [], code);\n\n    var codes = [];\n    var addCode = function addCode(c) {\n      if (!c) return;\n      if (_this.isWhitelisted(c)) {\n        codes.push(c);\n      } else {\n        _this.logger.warn('rejecting non-whitelisted language code: ' + c);\n      }\n    };\n\n    if (typeof code === 'string' && code.indexOf('-') > -1) {\n      if (this.options.load !== 'languageOnly') addCode(this.formatLanguageCode(code));\n      if (this.options.load !== 'languageOnly' && this.options.load !== 'currentOnly') addCode(this.getScriptPartFromCode(code));\n      if (this.options.load !== 'currentOnly') addCode(this.getLanguagePartFromCode(code));\n    } else if (typeof code === 'string') {\n      addCode(this.formatLanguageCode(code));\n    }\n\n    fallbackCodes.forEach(function (fc) {\n      if (codes.indexOf(fc) < 0) addCode(_this.formatLanguageCode(fc));\n    });\n\n    return codes;\n  };\n\n  return LanguageUtil;\n}();\n\n/* harmony default export */ var LanguageUtils = (LanguageUtils_LanguageUtil);\n// CONCATENATED MODULE: ./node_modules/i18next/dist/es/PluralResolver.js\nfunction PluralResolver_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n// definition http://translate.sourceforge.net/wiki/l10n/pluralforms\n/* eslint-disable */\nvar sets = [{ lngs: ['ach', 'ak', 'am', 'arn', 'br', 'fil', 'gun', 'ln', 'mfe', 'mg', 'mi', 'oc', 'pt', 'pt-BR', 'tg', 'ti', 'tr', 'uz', 'wa'], nr: [1, 2], fc: 1 }, { lngs: ['af', 'an', 'ast', 'az', 'bg', 'bn', 'ca', 'da', 'de', 'dev', 'el', 'en', 'eo', 'es', 'et', 'eu', 'fi', 'fo', 'fur', 'fy', 'gl', 'gu', 'ha', 'he', 'hi', 'hu', 'hy', 'ia', 'it', 'kn', 'ku', 'lb', 'mai', 'ml', 'mn', 'mr', 'nah', 'nap', 'nb', 'ne', 'nl', 'nn', 'no', 'nso', 'pa', 'pap', 'pms', 'ps', 'pt-PT', 'rm', 'sco', 'se', 'si', 'so', 'son', 'sq', 'sv', 'sw', 'ta', 'te', 'tk', 'ur', 'yo'], nr: [1, 2], fc: 2 }, { lngs: ['ay', 'bo', 'cgg', 'fa', 'id', 'ja', 'jbo', 'ka', 'kk', 'km', 'ko', 'ky', 'lo', 'ms', 'sah', 'su', 'th', 'tt', 'ug', 'vi', 'wo', 'zh'], nr: [1], fc: 3 }, { lngs: ['be', 'bs', 'dz', 'hr', 'ru', 'sr', 'uk'], nr: [1, 2, 5], fc: 4 }, { lngs: ['ar'], nr: [0, 1, 2, 3, 11, 100], fc: 5 }, { lngs: ['cs', 'sk'], nr: [1, 2, 5], fc: 6 }, { lngs: ['csb', 'pl'], nr: [1, 2, 5], fc: 7 }, { lngs: ['cy'], nr: [1, 2, 3, 8], fc: 8 }, { lngs: ['fr'], nr: [1, 2], fc: 9 }, { lngs: ['ga'], nr: [1, 2, 3, 7, 11], fc: 10 }, { lngs: ['gd'], nr: [1, 2, 3, 20], fc: 11 }, { lngs: ['is'], nr: [1, 2], fc: 12 }, { lngs: ['jv'], nr: [0, 1], fc: 13 }, { lngs: ['kw'], nr: [1, 2, 3, 4], fc: 14 }, { lngs: ['lt'], nr: [1, 2, 10], fc: 15 }, { lngs: ['lv'], nr: [1, 2, 0], fc: 16 }, { lngs: ['mk'], nr: [1, 2], fc: 17 }, { lngs: ['mnk'], nr: [0, 1, 2], fc: 18 }, { lngs: ['mt'], nr: [1, 2, 11, 20], fc: 19 }, { lngs: ['or'], nr: [2, 1], fc: 2 }, { lngs: ['ro'], nr: [1, 2, 20], fc: 20 }, { lngs: ['sl'], nr: [5, 1, 2, 3], fc: 21 }, { lngs: ['he'], nr: [1, 2, 20, 21], fc: 22 }];\n\nvar _rulesPluralsTypes = {\n  1: function _(n) {\n    return Number(n > 1);\n  },\n  2: function _(n) {\n    return Number(n != 1);\n  },\n  3: function _(n) {\n    return 0;\n  },\n  4: function _(n) {\n    return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n  },\n  5: function _(n) {\n    return Number(n === 0 ? 0 : n == 1 ? 1 : n == 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5);\n  },\n  6: function _(n) {\n    return Number(n == 1 ? 0 : n >= 2 && n <= 4 ? 1 : 2);\n  },\n  7: function _(n) {\n    return Number(n == 1 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n  },\n  8: function _(n) {\n    return Number(n == 1 ? 0 : n == 2 ? 1 : n != 8 && n != 11 ? 2 : 3);\n  },\n  9: function _(n) {\n    return Number(n >= 2);\n  },\n  10: function _(n) {\n    return Number(n == 1 ? 0 : n == 2 ? 1 : n < 7 ? 2 : n < 11 ? 3 : 4);\n  },\n  11: function _(n) {\n    return Number(n == 1 || n == 11 ? 0 : n == 2 || n == 12 ? 1 : n > 2 && n < 20 ? 2 : 3);\n  },\n  12: function _(n) {\n    return Number(n % 10 != 1 || n % 100 == 11);\n  },\n  13: function _(n) {\n    return Number(n !== 0);\n  },\n  14: function _(n) {\n    return Number(n == 1 ? 0 : n == 2 ? 1 : n == 3 ? 2 : 3);\n  },\n  15: function _(n) {\n    return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n  },\n  16: function _(n) {\n    return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n !== 0 ? 1 : 2);\n  },\n  17: function _(n) {\n    return Number(n == 1 || n % 10 == 1 ? 0 : 1);\n  },\n  18: function _(n) {\n    return Number(n == 0 ? 0 : n == 1 ? 1 : 2);\n  },\n  19: function _(n) {\n    return Number(n == 1 ? 0 : n === 0 || n % 100 > 1 && n % 100 < 11 ? 1 : n % 100 > 10 && n % 100 < 20 ? 2 : 3);\n  },\n  20: function _(n) {\n    return Number(n == 1 ? 0 : n === 0 || n % 100 > 0 && n % 100 < 20 ? 1 : 2);\n  },\n  21: function _(n) {\n    return Number(n % 100 == 1 ? 1 : n % 100 == 2 ? 2 : n % 100 == 3 || n % 100 == 4 ? 3 : 0);\n  },\n  22: function _(n) {\n    return Number(n === 1 ? 0 : n === 2 ? 1 : (n < 0 || n > 10) && n % 10 == 0 ? 2 : 3);\n  }\n};\n/* eslint-enable */\n\nfunction createRules() {\n  var rules = {};\n  sets.forEach(function (set) {\n    set.lngs.forEach(function (l) {\n      rules[l] = {\n        numbers: set.nr,\n        plurals: _rulesPluralsTypes[set.fc]\n      };\n    });\n  });\n  return rules;\n}\n\nvar PluralResolver_PluralResolver = function () {\n  function PluralResolver(languageUtils) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    PluralResolver_classCallCheck(this, PluralResolver);\n\n    this.languageUtils = languageUtils;\n    this.options = options;\n\n    this.logger = logger.create('pluralResolver');\n\n    this.rules = createRules();\n  }\n\n  PluralResolver.prototype.addRule = function addRule(lng, obj) {\n    this.rules[lng] = obj;\n  };\n\n  PluralResolver.prototype.getRule = function getRule(code) {\n    return this.rules[code] || this.rules[this.languageUtils.getLanguagePartFromCode(code)];\n  };\n\n  PluralResolver.prototype.needsPlural = function needsPlural(code) {\n    var rule = this.getRule(code);\n\n    return rule && rule.numbers.length > 1;\n  };\n\n  PluralResolver.prototype.getPluralFormsOfKey = function getPluralFormsOfKey(code, key) {\n    var _this = this;\n\n    var ret = [];\n\n    var rule = this.getRule(code);\n\n    if (!rule) return ret;\n\n    rule.numbers.forEach(function (n) {\n      var suffix = _this.getSuffix(code, n);\n      ret.push('' + key + suffix);\n    });\n\n    return ret;\n  };\n\n  PluralResolver.prototype.getSuffix = function getSuffix(code, count) {\n    var _this2 = this;\n\n    var rule = this.getRule(code);\n\n    if (rule) {\n      // if (rule.numbers.length === 1) return ''; // only singular\n\n      var idx = rule.noAbs ? rule.plurals(count) : rule.plurals(Math.abs(count));\n      var suffix = rule.numbers[idx];\n\n      // special treatment for lngs only having singular and plural\n      if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n        if (suffix === 2) {\n          suffix = 'plural';\n        } else if (suffix === 1) {\n          suffix = '';\n        }\n      }\n\n      var returnSuffix = function returnSuffix() {\n        return _this2.options.prepend && suffix.toString() ? _this2.options.prepend + suffix.toString() : suffix.toString();\n      };\n\n      // COMPATIBILITY JSON\n      // v1\n      if (this.options.compatibilityJSON === 'v1') {\n        if (suffix === 1) return '';\n        if (typeof suffix === 'number') return '_plural_' + suffix.toString();\n        return returnSuffix();\n      } else if ( /* v2 */this.options.compatibilityJSON === 'v2' && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n        return returnSuffix();\n      } else if ( /* v3 - gettext index */this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n        return returnSuffix();\n      }\n      return this.options.prepend && idx.toString() ? this.options.prepend + idx.toString() : idx.toString();\n    }\n\n    this.logger.warn('no plural rule found for: ' + code);\n    return '';\n  };\n\n  return PluralResolver;\n}();\n\n/* harmony default export */ var es_PluralResolver = (PluralResolver_PluralResolver);\n// CONCATENATED MODULE: ./node_modules/i18next/dist/es/Interpolator.js\nvar Interpolator_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction Interpolator_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\nvar Interpolator_Interpolator = function () {\n  function Interpolator() {\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n    Interpolator_classCallCheck(this, Interpolator);\n\n    this.logger = logger.create('interpolator');\n\n    this.init(options, true);\n  }\n\n  /* eslint no-param-reassign: 0 */\n\n\n  Interpolator.prototype.init = function init() {\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    var reset = arguments[1];\n\n    if (reset) {\n      this.options = options;\n      this.format = options.interpolation && options.interpolation.format || function (value) {\n        return value;\n      };\n    }\n    if (!options.interpolation) options.interpolation = { escapeValue: true };\n\n    var iOpts = options.interpolation;\n\n    this.escape = iOpts.escape !== undefined ? iOpts.escape : utils_escape;\n    this.escapeValue = iOpts.escapeValue !== undefined ? iOpts.escapeValue : true;\n    this.useRawValueToEscape = iOpts.useRawValueToEscape !== undefined ? iOpts.useRawValueToEscape : false;\n\n    this.prefix = iOpts.prefix ? regexEscape(iOpts.prefix) : iOpts.prefixEscaped || '{{';\n    this.suffix = iOpts.suffix ? regexEscape(iOpts.suffix) : iOpts.suffixEscaped || '}}';\n\n    this.formatSeparator = iOpts.formatSeparator ? iOpts.formatSeparator : iOpts.formatSeparator || ',';\n\n    this.unescapePrefix = iOpts.unescapeSuffix ? '' : iOpts.unescapePrefix || '-';\n    this.unescapeSuffix = this.unescapePrefix ? '' : iOpts.unescapeSuffix || '';\n\n    this.nestingPrefix = iOpts.nestingPrefix ? regexEscape(iOpts.nestingPrefix) : iOpts.nestingPrefixEscaped || regexEscape('$t(');\n    this.nestingSuffix = iOpts.nestingSuffix ? regexEscape(iOpts.nestingSuffix) : iOpts.nestingSuffixEscaped || regexEscape(')');\n\n    this.maxReplaces = iOpts.maxReplaces ? iOpts.maxReplaces : 1000;\n\n    // the regexp\n    this.resetRegExp();\n  };\n\n  Interpolator.prototype.reset = function reset() {\n    if (this.options) this.init(this.options);\n  };\n\n  Interpolator.prototype.resetRegExp = function resetRegExp() {\n    // the regexp\n    var regexpStr = this.prefix + '(.+?)' + this.suffix;\n    this.regexp = new RegExp(regexpStr, 'g');\n\n    var regexpUnescapeStr = '' + this.prefix + this.unescapePrefix + '(.+?)' + this.unescapeSuffix + this.suffix;\n    this.regexpUnescape = new RegExp(regexpUnescapeStr, 'g');\n\n    var nestingRegexpStr = this.nestingPrefix + '(.+?)' + this.nestingSuffix;\n    this.nestingRegexp = new RegExp(nestingRegexpStr, 'g');\n  };\n\n  Interpolator.prototype.interpolate = function interpolate(str, data, lng, options) {\n    var _this = this;\n\n    var match = void 0;\n    var value = void 0;\n    var replaces = void 0;\n\n    function regexSafe(val) {\n      return val.replace(/\\$/g, '$$$$');\n    }\n\n    var handleFormat = function handleFormat(key) {\n      if (key.indexOf(_this.formatSeparator) < 0) return getPath(data, key);\n\n      var p = key.split(_this.formatSeparator);\n      var k = p.shift().trim();\n      var f = p.join(_this.formatSeparator).trim();\n\n      return _this.format(getPath(data, k), f, lng);\n    };\n\n    this.resetRegExp();\n\n    var missingInterpolationHandler = options && options.missingInterpolationHandler || this.options.missingInterpolationHandler;\n\n    replaces = 0;\n    // unescape if has unescapePrefix/Suffix\n    /* eslint no-cond-assign: 0 */\n    while (match = this.regexpUnescape.exec(str)) {\n      value = handleFormat(match[1].trim());\n      str = str.replace(match[0], value);\n      this.regexpUnescape.lastIndex = 0;\n      replaces++;\n      if (replaces >= this.maxReplaces) {\n        break;\n      }\n    }\n\n    replaces = 0;\n    // regular escape on demand\n    while (match = this.regexp.exec(str)) {\n      value = handleFormat(match[1].trim());\n      if (value === undefined) {\n        if (typeof missingInterpolationHandler === 'function') {\n          var temp = missingInterpolationHandler(str, match);\n          value = typeof temp === 'string' ? temp : '';\n        } else {\n          this.logger.warn('missed to pass in variable ' + match[1] + ' for interpolating ' + str);\n          value = '';\n        }\n      } else if (typeof value !== 'string' && !this.useRawValueToEscape) {\n        value = makeString(value);\n      }\n      value = this.escapeValue ? regexSafe(this.escape(value)) : regexSafe(value);\n      str = str.replace(match[0], value);\n      this.regexp.lastIndex = 0;\n      replaces++;\n      if (replaces >= this.maxReplaces) {\n        break;\n      }\n    }\n    return str;\n  };\n\n  Interpolator.prototype.nest = function nest(str, fc) {\n    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n    var match = void 0;\n    var value = void 0;\n\n    var clonedOptions = Interpolator_extends({}, options);\n    clonedOptions.applyPostProcessor = false; // avoid post processing on nested lookup\n\n    // if value is something like \"myKey\": \"lorem $(anotherKey, { \"count\": {{aValueInOptions}} })\"\n    function handleHasOptions(key, inheritedOptions) {\n      if (key.indexOf(',') < 0) return key;\n\n      var p = key.split(',');\n      key = p.shift();\n      var optionsString = p.join(',');\n      optionsString = this.interpolate(optionsString, clonedOptions);\n      optionsString = optionsString.replace(/'/g, '\"');\n\n      try {\n        clonedOptions = JSON.parse(optionsString);\n\n        if (inheritedOptions) clonedOptions = Interpolator_extends({}, inheritedOptions, clonedOptions);\n      } catch (e) {\n        this.logger.error('failed parsing options string in nesting for key ' + key, e);\n      }\n\n      return key;\n    }\n\n    // regular escape on demand\n    while (match = this.nestingRegexp.exec(str)) {\n      value = fc(handleHasOptions.call(this, match[1].trim(), clonedOptions), clonedOptions);\n\n      // is only the nesting key (key1 = '$(key2)') return the value without stringify\n      if (value && match[0] === str && typeof value !== 'string') return value;\n\n      // no string to include or empty\n      if (typeof value !== 'string') value = makeString(value);\n      if (!value) {\n        this.logger.warn('missed to resolve ' + match[1] + ' for nesting ' + str);\n        value = '';\n      }\n      // Nested keys should not be escaped by default #854\n      // value = this.escapeValue ? regexSafe(utils.escape(value)) : regexSafe(value);\n      str = str.replace(match[0], value);\n      this.regexp.lastIndex = 0;\n    }\n    return str;\n  };\n\n  return Interpolator;\n}();\n\n/* harmony default export */ var es_Interpolator = (Interpolator_Interpolator);\n// CONCATENATED MODULE: ./node_modules/i18next/dist/es/BackendConnector.js\nvar BackendConnector_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nfunction BackendConnector_defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }\n\nfunction BackendConnector_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction BackendConnector_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction BackendConnector_inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : BackendConnector_defaults(subClass, superClass); }\n\n\n\n\n\nfunction remove(arr, what) {\n  var found = arr.indexOf(what);\n\n  while (found !== -1) {\n    arr.splice(found, 1);\n    found = arr.indexOf(what);\n  }\n}\n\nvar BackendConnector_Connector = function (_EventEmitter) {\n  BackendConnector_inherits(Connector, _EventEmitter);\n\n  function Connector(backend, store, services) {\n    var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n    BackendConnector_classCallCheck(this, Connector);\n\n    var _this = BackendConnector_possibleConstructorReturn(this, _EventEmitter.call(this));\n\n    _this.backend = backend;\n    _this.store = store;\n    _this.languageUtils = services.languageUtils;\n    _this.options = options;\n    _this.logger = logger.create('backendConnector');\n\n    _this.state = {};\n    _this.queue = [];\n\n    if (_this.backend && _this.backend.init) {\n      _this.backend.init(services, options.backend, options);\n    }\n    return _this;\n  }\n\n  Connector.prototype.queueLoad = function queueLoad(languages, namespaces, options, callback) {\n    var _this2 = this;\n\n    // find what needs to be loaded\n    var toLoad = [];\n    var pending = [];\n    var toLoadLanguages = [];\n    var toLoadNamespaces = [];\n\n    languages.forEach(function (lng) {\n      var hasAllNamespaces = true;\n\n      namespaces.forEach(function (ns) {\n        var name = lng + '|' + ns;\n\n        if (!options.reload && _this2.store.hasResourceBundle(lng, ns)) {\n          _this2.state[name] = 2; // loaded\n        } else if (_this2.state[name] < 0) {\n          // nothing to do for err\n        } else if (_this2.state[name] === 1) {\n          if (pending.indexOf(name) < 0) pending.push(name);\n        } else {\n          _this2.state[name] = 1; // pending\n\n          hasAllNamespaces = false;\n\n          if (pending.indexOf(name) < 0) pending.push(name);\n          if (toLoad.indexOf(name) < 0) toLoad.push(name);\n          if (toLoadNamespaces.indexOf(ns) < 0) toLoadNamespaces.push(ns);\n        }\n      });\n\n      if (!hasAllNamespaces) toLoadLanguages.push(lng);\n    });\n\n    if (toLoad.length || pending.length) {\n      this.queue.push({\n        pending: pending,\n        loaded: {},\n        errors: [],\n        callback: callback\n      });\n    }\n\n    return {\n      toLoad: toLoad,\n      pending: pending,\n      toLoadLanguages: toLoadLanguages,\n      toLoadNamespaces: toLoadNamespaces\n    };\n  };\n\n  Connector.prototype.loaded = function loaded(name, err, data) {\n    var _name$split = name.split('|'),\n        _name$split2 = _slicedToArray(_name$split, 2),\n        lng = _name$split2[0],\n        ns = _name$split2[1];\n\n    if (err) this.emit('failedLoading', lng, ns, err);\n\n    if (data) {\n      this.store.addResourceBundle(lng, ns, data);\n    }\n\n    // set loaded\n    this.state[name] = err ? -1 : 2;\n\n    // consolidated loading done in this run - only emit once for a loaded namespace\n    var loaded = {};\n\n    // callback if ready\n    this.queue.forEach(function (q) {\n      pushPath(q.loaded, [lng], ns);\n      remove(q.pending, name);\n\n      if (err) q.errors.push(err);\n\n      if (q.pending.length === 0 && !q.done) {\n        // only do once per loaded -> this.emit('loaded', q.loaded);\n        Object.keys(q.loaded).forEach(function (l) {\n          if (!loaded[l]) loaded[l] = [];\n          if (q.loaded[l].length) {\n            q.loaded[l].forEach(function (ns) {\n              if (loaded[l].indexOf(ns) < 0) loaded[l].push(ns);\n            });\n          }\n        });\n\n        /* eslint no-param-reassign: 0 */\n        q.done = true;\n        if (q.errors.length) {\n          q.callback(q.errors);\n        } else {\n          q.callback();\n        }\n      }\n    });\n\n    // emit consolidated loaded event\n    this.emit('loaded', loaded);\n\n    // remove done load requests\n    this.queue = this.queue.filter(function (q) {\n      return !q.done;\n    });\n  };\n\n  Connector.prototype.read = function read(lng, ns, fcName) {\n    var tried = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n\n    var _this3 = this;\n\n    var wait = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 250;\n    var callback = arguments[5];\n\n    if (!lng.length) return callback(null, {}); // noting to load\n\n    return this.backend[fcName](lng, ns, function (err, data) {\n      if (err && data /* = retryFlag */ && tried < 5) {\n        setTimeout(function () {\n          _this3.read.call(_this3, lng, ns, fcName, tried + 1, wait * 2, callback);\n        }, wait);\n        return;\n      }\n      callback(err, data);\n    });\n  };\n\n  /* eslint consistent-return: 0 */\n\n\n  Connector.prototype.prepareLoading = function prepareLoading(languages, namespaces) {\n    var _this4 = this;\n\n    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    var callback = arguments[3];\n\n    if (!this.backend) {\n      this.logger.warn('No backend was added via i18next.use. Will not load resources.');\n      return callback && callback();\n    }\n\n    if (typeof languages === 'string') languages = this.languageUtils.toResolveHierarchy(languages);\n    if (typeof namespaces === 'string') namespaces = [namespaces];\n\n    var toLoad = this.queueLoad(languages, namespaces, options, callback);\n    if (!toLoad.toLoad.length) {\n      if (!toLoad.pending.length) callback(); // nothing to load and no pendings...callback now\n      return null; // pendings will trigger callback\n    }\n\n    toLoad.toLoad.forEach(function (name) {\n      _this4.loadOne(name);\n    });\n  };\n\n  Connector.prototype.load = function load(languages, namespaces, callback) {\n    this.prepareLoading(languages, namespaces, {}, callback);\n  };\n\n  Connector.prototype.reload = function reload(languages, namespaces, callback) {\n    this.prepareLoading(languages, namespaces, { reload: true }, callback);\n  };\n\n  Connector.prototype.loadOne = function loadOne(name) {\n    var _this5 = this;\n\n    var prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n\n    var _name$split3 = name.split('|'),\n        _name$split4 = _slicedToArray(_name$split3, 2),\n        lng = _name$split4[0],\n        ns = _name$split4[1];\n\n    this.read(lng, ns, 'read', null, null, function (err, data) {\n      if (err) _this5.logger.warn(prefix + 'loading namespace ' + ns + ' for language ' + lng + ' failed', err);\n      if (!err && data) _this5.logger.log(prefix + 'loaded namespace ' + ns + ' for language ' + lng, data);\n\n      _this5.loaded(name, err, data);\n    });\n  };\n\n  Connector.prototype.saveMissing = function saveMissing(languages, namespace, key, fallbackValue, isUpdate) {\n    var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n\n    if (this.backend && this.backend.create) {\n      this.backend.create(languages, namespace, key, fallbackValue, null /* unused callback */, BackendConnector_extends({}, options, { isUpdate: isUpdate }));\n    }\n\n    // write to store to avoid resending\n    if (!languages || !languages[0]) return;\n    this.store.addResource(languages[0], namespace, key, fallbackValue);\n  };\n\n  return Connector;\n}(es_EventEmitter);\n\n/* harmony default export */ var BackendConnector = (BackendConnector_Connector);\n// CONCATENATED MODULE: ./node_modules/i18next/dist/es/defaults.js\n\nfunction get() {\n  return {\n    debug: false,\n    initImmediate: true,\n\n    ns: ['translation'],\n    defaultNS: ['translation'],\n    fallbackLng: ['dev'],\n    fallbackNS: false, // string or array of namespaces\n\n    whitelist: false, // array with whitelisted languages\n    nonExplicitWhitelist: false,\n    load: 'all', // | currentOnly | languageOnly\n    preload: false, // array with preload languages\n\n    simplifyPluralSuffix: true,\n    keySeparator: '.',\n    nsSeparator: ':',\n    pluralSeparator: '_',\n    contextSeparator: '_',\n\n    saveMissing: false, // enable to send missing values\n    updateMissing: false, // enable to update default values if different from translated value (only useful on initial development, or when keeping code as source of truth)\n    saveMissingTo: 'fallback', // 'current' || 'all'\n    saveMissingPlurals: true, // will save all forms not only singular key\n    missingKeyHandler: false, // function(lng, ns, key, fallbackValue) -> override if prefer on handling\n    missingInterpolationHandler: false, // function(str, match)\n\n    postProcess: false, // string or array of postProcessor names\n    returnNull: true, // allows null value as valid translation\n    returnEmptyString: true, // allows empty string value as valid translation\n    returnObjects: false,\n    joinArrays: false, // or string to join array\n    returnedObjectHandler: function returnedObjectHandler() {}, // function(key, value, options) triggered if key returns object but returnObjects is set to false\n    parseMissingKeyHandler: false, // function(key) parsed a key that was not found in t() before returning\n    appendNamespaceToMissingKey: false,\n    appendNamespaceToCIMode: false,\n    overloadTranslationOptionHandler: function handle(args) {\n      var ret = {};\n      if (args[1]) ret.defaultValue = args[1];\n      if (args[2]) ret.tDescription = args[2];\n      return ret;\n    },\n    interpolation: {\n      escapeValue: true,\n      format: function format(value, _format, lng) {\n        return value;\n      },\n      prefix: '{{',\n      suffix: '}}',\n      formatSeparator: ',',\n      // prefixEscaped: '{{',\n      // suffixEscaped: '}}',\n      // unescapeSuffix: '',\n      unescapePrefix: '-',\n\n      nestingPrefix: '$t(',\n      nestingSuffix: ')',\n      // nestingPrefixEscaped: '$t(',\n      // nestingSuffixEscaped: ')',\n      // defaultVariables: undefined // object that can have values to interpolate on - extends passed in interpolation data\n      maxReplaces: 1000 // max replaces to prevent endless loop\n    }\n  };\n}\n\n/* eslint no-param-reassign: 0 */\nfunction transformOptions(options) {\n  // create namespace object if namespace is passed in as string\n  if (typeof options.ns === 'string') options.ns = [options.ns];\n  if (typeof options.fallbackLng === 'string') options.fallbackLng = [options.fallbackLng];\n  if (typeof options.fallbackNS === 'string') options.fallbackNS = [options.fallbackNS];\n\n  // extend whitelist with cimode\n  if (options.whitelist && options.whitelist.indexOf('cimode') < 0) {\n    options.whitelist = options.whitelist.concat(['cimode']);\n  }\n\n  return options;\n}\n// CONCATENATED MODULE: ./node_modules/i18next/dist/es/i18next.js\nvar i18next_typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar i18next_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction i18next_defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }\n\nfunction i18next_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction i18next_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction i18next_inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : i18next_defaults(subClass, superClass); }\n\n\n\n\n\n\n\n\n\n\n\n\nfunction noop() {}\n\nvar i18next_I18n = function (_EventEmitter) {\n  i18next_inherits(I18n, _EventEmitter);\n\n  function I18n() {\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    var callback = arguments[1];\n\n    i18next_classCallCheck(this, I18n);\n\n    var _this = i18next_possibleConstructorReturn(this, _EventEmitter.call(this));\n\n    _this.options = transformOptions(options);\n    _this.services = {};\n    _this.logger = logger;\n    _this.modules = { external: [] };\n\n    if (callback && !_this.isInitialized && !options.isClone) {\n      var _ret;\n\n      // https://github.com/i18next/i18next/issues/879\n      if (!_this.options.initImmediate) return _ret = _this.init(options, callback), i18next_possibleConstructorReturn(_this, _ret);\n      setTimeout(function () {\n        _this.init(options, callback);\n      }, 0);\n    }\n    return _this;\n  }\n\n  I18n.prototype.init = function init() {\n    var _this2 = this;\n\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    var callback = arguments[1];\n\n    if (typeof options === 'function') {\n      callback = options;\n      options = {};\n    }\n    this.options = i18next_extends({}, get(), this.options, transformOptions(options));\n\n    this.format = this.options.interpolation.format;\n    if (!callback) callback = noop;\n\n    function createClassOnDemand(ClassOrObject) {\n      if (!ClassOrObject) return null;\n      if (typeof ClassOrObject === 'function') return new ClassOrObject();\n      return ClassOrObject;\n    }\n\n    // init services\n    if (!this.options.isClone) {\n      if (this.modules.logger) {\n        logger.init(createClassOnDemand(this.modules.logger), this.options);\n      } else {\n        logger.init(null, this.options);\n      }\n\n      var lu = new LanguageUtils(this.options);\n      this.store = new es_ResourceStore(this.options.resources, this.options);\n\n      var s = this.services;\n      s.logger = logger;\n      s.resourceStore = this.store;\n      s.languageUtils = lu;\n      s.pluralResolver = new es_PluralResolver(lu, { prepend: this.options.pluralSeparator, compatibilityJSON: this.options.compatibilityJSON, simplifyPluralSuffix: this.options.simplifyPluralSuffix });\n      s.interpolator = new es_Interpolator(this.options);\n\n      s.backendConnector = new BackendConnector(createClassOnDemand(this.modules.backend), s.resourceStore, s, this.options);\n      // pipe events from backendConnector\n      s.backendConnector.on('*', function (event) {\n        for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n          args[_key - 1] = arguments[_key];\n        }\n\n        _this2.emit.apply(_this2, [event].concat(args));\n      });\n\n      if (this.modules.languageDetector) {\n        s.languageDetector = createClassOnDemand(this.modules.languageDetector);\n        s.languageDetector.init(s, this.options.detection, this.options);\n      }\n\n      if (this.modules.i18nFormat) {\n        s.i18nFormat = createClassOnDemand(this.modules.i18nFormat);\n        if (s.i18nFormat.init) s.i18nFormat.init(this);\n      }\n\n      this.translator = new es_Translator(this.services, this.options);\n      // pipe events from translator\n      this.translator.on('*', function (event) {\n        for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n          args[_key2 - 1] = arguments[_key2];\n        }\n\n        _this2.emit.apply(_this2, [event].concat(args));\n      });\n\n      this.modules.external.forEach(function (m) {\n        if (m.init) m.init(_this2);\n      });\n    }\n\n    // append api\n    var storeApi = ['getResource', 'addResource', 'addResources', 'addResourceBundle', 'removeResourceBundle', 'hasResourceBundle', 'getResourceBundle', 'getDataByLanguage'];\n    storeApi.forEach(function (fcName) {\n      _this2[fcName] = function () {\n        var _store;\n\n        return (_store = _this2.store)[fcName].apply(_store, arguments);\n      };\n    });\n\n    var load = function load() {\n      _this2.changeLanguage(_this2.options.lng, function (err, t) {\n        _this2.isInitialized = true;\n        _this2.logger.log('initialized', _this2.options);\n        _this2.emit('initialized', _this2.options);\n\n        callback(err, t);\n      });\n    };\n\n    if (this.options.resources || !this.options.initImmediate) {\n      load();\n    } else {\n      setTimeout(load, 0);\n    }\n\n    return this;\n  };\n\n  /* eslint consistent-return: 0 */\n\n\n  I18n.prototype.loadResources = function loadResources() {\n    var _this3 = this;\n\n    var callback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : noop;\n\n    if (!this.options.resources) {\n      if (this.language && this.language.toLowerCase() === 'cimode') return callback(); // avoid loading resources for cimode\n\n      var toLoad = [];\n\n      var append = function append(lng) {\n        if (!lng) return;\n        var lngs = _this3.services.languageUtils.toResolveHierarchy(lng);\n        lngs.forEach(function (l) {\n          if (toLoad.indexOf(l) < 0) toLoad.push(l);\n        });\n      };\n\n      if (!this.language) {\n        // at least load fallbacks in this case\n        var fallbacks = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n        fallbacks.forEach(function (l) {\n          return append(l);\n        });\n      } else {\n        append(this.language);\n      }\n\n      if (this.options.preload) {\n        this.options.preload.forEach(function (l) {\n          return append(l);\n        });\n      }\n\n      this.services.backendConnector.load(toLoad, this.options.ns, callback);\n    } else {\n      callback(null);\n    }\n  };\n\n  I18n.prototype.reloadResources = function reloadResources(lngs, ns, callback) {\n    if (!lngs) lngs = this.languages;\n    if (!ns) ns = this.options.ns;\n    if (!callback) callback = function callback() {};\n    this.services.backendConnector.reload(lngs, ns, callback);\n  };\n\n  I18n.prototype.use = function use(module) {\n    if (module.type === 'backend') {\n      this.modules.backend = module;\n    }\n\n    if (module.type === 'logger' || module.log && module.warn && module.error) {\n      this.modules.logger = module;\n    }\n\n    if (module.type === 'languageDetector') {\n      this.modules.languageDetector = module;\n    }\n\n    if (module.type === 'i18nFormat') {\n      this.modules.i18nFormat = module;\n    }\n\n    if (module.type === 'postProcessor') {\n      postProcessor.addPostProcessor(module);\n    }\n\n    if (module.type === '3rdParty') {\n      this.modules.external.push(module);\n    }\n\n    return this;\n  };\n\n  I18n.prototype.changeLanguage = function changeLanguage(lng, callback) {\n    var _this4 = this;\n\n    var done = function done(err, l) {\n      _this4.translator.changeLanguage(l);\n\n      if (l) {\n        _this4.emit('languageChanged', l);\n        _this4.logger.log('languageChanged', l);\n      }\n\n      if (callback) callback(err, function () {\n        return _this4.t.apply(_this4, arguments);\n      });\n    };\n\n    var setLng = function setLng(l) {\n      if (l) {\n        _this4.language = l;\n        _this4.languages = _this4.services.languageUtils.toResolveHierarchy(l);\n        if (!_this4.translator.language) _this4.translator.changeLanguage(l);\n\n        if (_this4.services.languageDetector) _this4.services.languageDetector.cacheUserLanguage(l);\n      }\n\n      _this4.loadResources(function (err) {\n        done(err, l);\n      });\n    };\n\n    if (!lng && this.services.languageDetector && !this.services.languageDetector.async) {\n      setLng(this.services.languageDetector.detect());\n    } else if (!lng && this.services.languageDetector && this.services.languageDetector.async) {\n      this.services.languageDetector.detect(setLng);\n    } else {\n      setLng(lng);\n    }\n  };\n\n  I18n.prototype.getFixedT = function getFixedT(lng, ns) {\n    var _this5 = this;\n\n    var fixedT = function fixedT(key, opts) {\n      for (var _len3 = arguments.length, rest = Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) {\n        rest[_key3 - 2] = arguments[_key3];\n      }\n\n      var options = i18next_extends({}, opts);\n      if ((typeof opts === 'undefined' ? 'undefined' : i18next_typeof(opts)) !== 'object') {\n        options = _this5.options.overloadTranslationOptionHandler([key, opts].concat(rest));\n      }\n\n      options.lng = options.lng || fixedT.lng;\n      options.lngs = options.lngs || fixedT.lngs;\n      options.ns = options.ns || fixedT.ns;\n      return _this5.t(key, options);\n    };\n    if (typeof lng === 'string') {\n      fixedT.lng = lng;\n    } else {\n      fixedT.lngs = lng;\n    }\n    fixedT.ns = ns;\n    return fixedT;\n  };\n\n  I18n.prototype.t = function t() {\n    var _translator;\n\n    return this.translator && (_translator = this.translator).translate.apply(_translator, arguments);\n  };\n\n  I18n.prototype.exists = function exists() {\n    var _translator2;\n\n    return this.translator && (_translator2 = this.translator).exists.apply(_translator2, arguments);\n  };\n\n  I18n.prototype.setDefaultNamespace = function setDefaultNamespace(ns) {\n    this.options.defaultNS = ns;\n  };\n\n  I18n.prototype.loadNamespaces = function loadNamespaces(ns, callback) {\n    var _this6 = this;\n\n    if (!this.options.ns) return callback && callback();\n    if (typeof ns === 'string') ns = [ns];\n\n    ns.forEach(function (n) {\n      if (_this6.options.ns.indexOf(n) < 0) _this6.options.ns.push(n);\n    });\n\n    this.loadResources(callback);\n  };\n\n  I18n.prototype.loadLanguages = function loadLanguages(lngs, callback) {\n    if (typeof lngs === 'string') lngs = [lngs];\n    var preloaded = this.options.preload || [];\n\n    var newLngs = lngs.filter(function (lng) {\n      return preloaded.indexOf(lng) < 0;\n    });\n    // Exit early if all given languages are already preloaded\n    if (!newLngs.length) return callback();\n\n    this.options.preload = preloaded.concat(newLngs);\n    this.loadResources(callback);\n  };\n\n  I18n.prototype.dir = function dir(lng) {\n    if (!lng) lng = this.languages && this.languages.length > 0 ? this.languages[0] : this.language;\n    if (!lng) return 'rtl';\n\n    var rtlLngs = ['ar', 'shu', 'sqr', 'ssh', 'xaa', 'yhd', 'yud', 'aao', 'abh', 'abv', 'acm', 'acq', 'acw', 'acx', 'acy', 'adf', 'ads', 'aeb', 'aec', 'afb', 'ajp', 'apc', 'apd', 'arb', 'arq', 'ars', 'ary', 'arz', 'auz', 'avl', 'ayh', 'ayl', 'ayn', 'ayp', 'bbz', 'pga', 'he', 'iw', 'ps', 'pbt', 'pbu', 'pst', 'prp', 'prd', 'ur', 'ydd', 'yds', 'yih', 'ji', 'yi', 'hbo', 'men', 'xmn', 'fa', 'jpr', 'peo', 'pes', 'prs', 'dv', 'sam'];\n\n    return rtlLngs.indexOf(this.services.languageUtils.getLanguagePartFromCode(lng)) >= 0 ? 'rtl' : 'ltr';\n  };\n\n  /* eslint class-methods-use-this: 0 */\n\n\n  I18n.prototype.createInstance = function createInstance() {\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    var callback = arguments[1];\n\n    return new I18n(options, callback);\n  };\n\n  I18n.prototype.cloneInstance = function cloneInstance() {\n    var _this7 = this;\n\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n\n    var mergedOptions = i18next_extends({}, this.options, options, { isClone: true });\n    var clone = new I18n(mergedOptions);\n    var membersToCopy = ['store', 'services', 'language'];\n    membersToCopy.forEach(function (m) {\n      clone[m] = _this7[m];\n    });\n    clone.translator = new es_Translator(clone.services, clone.options);\n    clone.translator.on('*', function (event) {\n      for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n        args[_key4 - 1] = arguments[_key4];\n      }\n\n      clone.emit.apply(clone, [event].concat(args));\n    });\n    clone.init(mergedOptions, callback);\n    clone.translator.options = clone.options; // sync options\n\n    return clone;\n  };\n\n  return I18n;\n}(es_EventEmitter);\n\n/* harmony default export */ var i18next = (new i18next_I18n());\n// CONCATENATED MODULE: ./node_modules/i18next/dist/es/index.js\n\n\n/* harmony default export */ var es = (i18next);\n\nvar changeLanguage = i18next.changeLanguage.bind(i18next);\nvar es_cloneInstance = i18next.cloneInstance.bind(i18next);\nvar createInstance = i18next.createInstance.bind(i18next);\nvar dir = i18next.dir.bind(i18next);\nvar exists = i18next.exists.bind(i18next);\nvar getFixedT = i18next.getFixedT.bind(i18next);\nvar es_init = i18next.init.bind(i18next);\nvar loadLanguages = i18next.loadLanguages.bind(i18next);\nvar loadNamespaces = i18next.loadNamespaces.bind(i18next);\nvar loadResources = i18next.loadResources.bind(i18next);\nvar off = i18next.off.bind(i18next);\nvar on = i18next.on.bind(i18next);\nvar setDefaultNamespace = i18next.setDefaultNamespace.bind(i18next);\nvar es_t = i18next.t.bind(i18next);\nvar es_use = i18next.use.bind(i18next);\n// EXTERNAL MODULE: ./node_modules/aurelia-pal/dist/native-modules/aurelia-pal.js\nvar aurelia_pal = __webpack_require__(0);\n\n// EXTERNAL MODULE: ./node_modules/aurelia-event-aggregator/dist/native-modules/aurelia-event-aggregator.js\nvar aurelia_event_aggregator = __webpack_require__(\"aurelia-event-aggregator\");\n\n// EXTERNAL MODULE: ./node_modules/aurelia-templating-resources/dist/native-modules/aurelia-templating-resources.js\nvar aurelia_templating_resources = __webpack_require__(\"aurelia-templating-resources\");\n\n// CONCATENATED MODULE: ./node_modules/aurelia-i18n/dist/native-modules/i18n.js\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return i18n_I18N; });\nvar _class, _temp;\n\n\n\n\n\n\n\n\n\nvar i18n_I18N = (_temp = _class = function () {\n  function I18N(ea, signaler) {\n    var _this = this;\n\n    \n\n    this.globalVars = {};\n    this.params = {};\n    this.i18nextDefered = {\n      resolve: null,\n      promise: null\n    };\n\n    this.i18next = es;\n    this.ea = ea;\n    this.Intl = aurelia_pal[\"d\" /* PLATFORM */].global.Intl;\n    this.signaler = signaler;\n    this.i18nextDefered.promise = new Promise(function (resolve) {\n      return _this.i18nextDefered.resolve = resolve;\n    });\n  }\n\n  I18N.prototype.setup = function setup(options) {\n    var _this2 = this;\n\n    var defaultOptions = {\n      skipTranslationOnMissingKey: false,\n      compatibilityAPI: 'v1',\n      compatibilityJSON: 'v1',\n      lng: 'en',\n      attributes: ['t', 'i18n'],\n      fallbackLng: 'en',\n      debug: false\n    };\n\n    es.init(options || defaultOptions, function (err, t) {\n      if (es.options.attributes instanceof String) {\n        es.options.attributes = [es.options.attributes];\n      }\n\n      _this2.i18nextDefered.resolve(_this2.i18next);\n    });\n\n    return this.i18nextDefered.promise;\n  };\n\n  I18N.prototype.i18nextReady = function i18nextReady() {\n    return this.i18nextDefered.promise;\n  };\n\n  I18N.prototype.setLocale = function setLocale(locale) {\n    var _this3 = this;\n\n    return new Promise(function (resolve) {\n      var oldLocale = _this3.getLocale();\n      _this3.i18next.changeLanguage(locale, function (err, tr) {\n        _this3.ea.publish('i18n:locale:changed', { oldValue: oldLocale, newValue: locale });\n        _this3.signaler.signal('aurelia-translation-signal');\n        resolve(tr);\n      });\n    });\n  };\n\n  I18N.prototype.getLocale = function getLocale() {\n    return this.i18next.language;\n  };\n\n  I18N.prototype.nf = function nf(options, locales) {\n    return new this.Intl.NumberFormat(locales || this.getLocale(), options || {});\n  };\n\n  I18N.prototype.uf = function uf(number, locale) {\n    var nf = this.nf({}, locale || this.getLocale());\n    var comparer = nf.format(10000 / 3);\n\n    var thousandSeparator = comparer[1];\n    var decimalSeparator = comparer[5];\n\n    if (thousandSeparator === '.') {\n      thousandSeparator = '\\\\.';\n    }\n\n    var result = number.replace(new RegExp(thousandSeparator, 'g'), '').replace(/[^\\d.,-]/g, '').replace(decimalSeparator, '.');\n\n    return Number(result);\n  };\n\n  I18N.prototype.df = function df(options, locales) {\n    return new this.Intl.DateTimeFormat(locales || this.getLocale(), options);\n  };\n\n  I18N.prototype.tr = function tr(key, options) {\n    var fullOptions = this.globalVars;\n\n    if (options !== undefined) {\n      fullOptions = Object.assign(Object.assign({}, this.globalVars), options);\n    }\n\n    return this.i18next.t(key, fullOptions);\n  };\n\n  I18N.prototype.registerGlobalVariable = function registerGlobalVariable(key, value) {\n    this.globalVars[key] = value;\n  };\n\n  I18N.prototype.unregisterGlobalVariable = function unregisterGlobalVariable(key) {\n    delete this.globalVars[key];\n  };\n\n  I18N.prototype.updateTranslations = function updateTranslations(el) {\n    if (!el || !el.querySelectorAll) {\n      return;\n    }\n\n    var i = void 0;\n    var l = void 0;\n\n    var selector = [].concat(this.i18next.options.attributes);\n    for (i = 0, l = selector.length; i < l; i++) {\n      selector[i] = '[' + selector[i] + ']';\n    }selector = selector.join(',');\n\n    var nodes = el.querySelectorAll(selector);\n    for (i = 0, l = nodes.length; i < l; i++) {\n      var node = nodes[i];\n      var keys = void 0;\n      var params = void 0;\n\n      for (var i2 = 0, l2 = this.i18next.options.attributes.length; i2 < l2; i2++) {\n        keys = node.getAttribute(this.i18next.options.attributes[i2]);\n        var pname = this.i18next.options.attributes[i2] + '-params';\n\n        if (pname && node.au && node.au[pname]) {\n          params = node.au[pname].viewModel.value;\n        }\n\n        if (keys) break;\n      }\n\n      if (!keys) continue;\n\n      this.updateValue(node, keys, params);\n    }\n  };\n\n  I18N.prototype.updateValue = function updateValue(node, value, params) {\n    if (value === null || value === undefined) {\n      return;\n    }\n\n    var keys = value.toString().split(';');\n    var i = keys.length;\n\n    while (i--) {\n      var key = keys[i];\n\n      var re = /\\[([a-z\\-, ]*)\\]/ig;\n\n      var m = void 0;\n      var attr = 'text';\n\n      if (node.nodeName === 'IMG') attr = 'src';\n\n      while ((m = re.exec(key)) !== null) {\n        if (m.index === re.lastIndex) {\n          re.lastIndex++;\n        }\n        if (m) {\n          key = key.replace(m[0], '');\n          attr = m[1];\n        }\n      }\n\n      var attrs = attr.split(',');\n      var j = attrs.length;\n\n      while (j--) {\n        attr = attrs[j].trim();\n\n        if (!node._textContent) node._textContent = node.textContent;\n        if (!node._innerHTML) node._innerHTML = node.innerHTML;\n\n        var attrCC = attr.replace(/-([a-z])/g, function (g) {\n          return g[1].toUpperCase();\n        });\n        var reservedNames = ['prepend', 'append', 'text', 'html'];\n        var i18nLogger = aurelia_logging[\"getLogger\"]('i18n');\n\n        if (reservedNames.indexOf(attr) > -1 && node.au && node.au.controller && node.au.controller.viewModel && attrCC in node.au.controller.viewModel) {\n          i18nLogger.warn('Aurelia I18N reserved attribute name\\n\\n  [' + reservedNames.join(', ') + ']\\n\\n  Your custom element has a bindable named ' + attr + ' which is a reserved word.\\n\\n  If you\\'d like Aurelia I18N to translate your bindable instead, please consider giving it another name.');\n        }\n\n        if (this.i18next.options.skipTranslationOnMissingKey && this.tr(key, params) === key) {\n          i18nLogger.warn('Couldn\\'t find translation for key: ' + key);\n          return;\n        }\n\n        switch (attr) {\n          case 'text':\n            var newChild = aurelia_pal[\"b\" /* DOM */].createTextNode(this.tr(key, params));\n            if (node._newChild && node._newChild.parentNode === node) {\n              node.removeChild(node._newChild);\n            }\n\n            node._newChild = newChild;\n            while (node.firstChild) {\n              node.removeChild(node.firstChild);\n            }\n            node.appendChild(node._newChild);\n            break;\n          case 'prepend':\n            var prependParser = aurelia_pal[\"b\" /* DOM */].createElement('div');\n            prependParser.innerHTML = this.tr(key, params);\n            for (var ni = node.childNodes.length - 1; ni >= 0; ni--) {\n              if (node.childNodes[ni]._prepended) {\n                node.removeChild(node.childNodes[ni]);\n              }\n            }\n\n            for (var pi = prependParser.childNodes.length - 1; pi >= 0; pi--) {\n              prependParser.childNodes[pi]._prepended = true;\n              if (node.firstChild) {\n                node.insertBefore(prependParser.childNodes[pi], node.firstChild);\n              } else {\n                node.appendChild(prependParser.childNodes[pi]);\n              }\n            }\n            break;\n          case 'append':\n            var appendParser = aurelia_pal[\"b\" /* DOM */].createElement('div');\n            appendParser.innerHTML = this.tr(key, params);\n            for (var _ni = node.childNodes.length - 1; _ni >= 0; _ni--) {\n              if (node.childNodes[_ni]._appended) {\n                node.removeChild(node.childNodes[_ni]);\n              }\n            }\n\n            while (appendParser.firstChild) {\n              appendParser.firstChild._appended = true;\n              node.appendChild(appendParser.firstChild);\n            }\n            break;\n          case 'html':\n            node.innerHTML = this.tr(key, params);\n            break;\n          default:\n            if (node.au && node.au.controller && node.au.controller.viewModel && attrCC in node.au.controller.viewModel) {\n              node.au.controller.viewModel[attrCC] = this.tr(key, params);\n            } else {\n              node.setAttribute(attr, this.tr(key, params));\n            }\n\n            break;\n        }\n      }\n    }\n  };\n\n  return I18N;\n}(), _class.inject = [aurelia_event_aggregator[\"EventAggregator\"], aurelia_templating_resources[\"a\" /* BindingSignaler */]], _temp);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaTE4bmV4dC9kaXN0L2VzL2xvZ2dlci5qcz82NzYzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9pMThuZXh0L2Rpc3QvZXMvRXZlbnRFbWl0dGVyLmpzPzgyYzEiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2kxOG5leHQvZGlzdC9lcy91dGlscy5qcz9mNTc0Iiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9pMThuZXh0L2Rpc3QvZXMvUmVzb3VyY2VTdG9yZS5qcz81NjZkIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9pMThuZXh0L2Rpc3QvZXMvcG9zdFByb2Nlc3Nvci5qcz84OGMyIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9pMThuZXh0L2Rpc3QvZXMvVHJhbnNsYXRvci5qcz82YWU5Iiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9pMThuZXh0L2Rpc3QvZXMvTGFuZ3VhZ2VVdGlscy5qcz81Y2E4Iiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9pMThuZXh0L2Rpc3QvZXMvUGx1cmFsUmVzb2x2ZXIuanM/YzMzMSIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaTE4bmV4dC9kaXN0L2VzL0ludGVycG9sYXRvci5qcz9lZTAxIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9pMThuZXh0L2Rpc3QvZXMvQmFja2VuZENvbm5lY3Rvci5qcz9mMTM3Iiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9pMThuZXh0L2Rpc3QvZXMvZGVmYXVsdHMuanM/NTI1MCIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaTE4bmV4dC9kaXN0L2VzL2kxOG5leHQuanM/ZWMwMyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaTE4bmV4dC9kaXN0L2VzL2luZGV4LmpzPzhjYTgiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F1cmVsaWEtaTE4bi9kaXN0L25hdGl2ZS1tb2R1bGVzL2kxOG4uanM/ZmZjNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG1EQUFtRCxnQkFBZ0Isc0JBQXNCLE9BQU8sMkJBQTJCLDBCQUEwQix5REFBeUQsMkJBQTJCLEVBQUUsRUFBRSxFQUFFLGVBQWU7O0FBRTlQLGlEQUFpRCwwQ0FBMEMsMERBQTBELEVBQUU7O0FBRXZKLGtDQUFrQywwQkFBMEIsMENBQTBDLGdCQUFnQixPQUFPLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxPQUFPLHdCQUF3QixFQUFFOztBQUVqTTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1FQUFtRSxhQUFhO0FBQ2hGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHNFQUFzRSxlQUFlO0FBQ3JGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHNFQUFzRSxlQUFlO0FBQ3JGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHNFQUFzRSxlQUFlO0FBQ3JGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNkNBQTZDLCtDQUErQztBQUM1Rjs7QUFFQTtBQUNBLENBQUM7O0FBRWMsdURBQVksRTs7QUM3RjNCLFNBQVMsMkJBQWUseUJBQXlCLDBDQUEwQywwREFBMEQsRUFBRTs7QUFFdko7QUFDQTtBQUNBLElBQUksMkJBQWU7O0FBRW5CO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBLHNGQUFzRixhQUFhO0FBQ25HO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRWMsZ0VBQVksRTs7QUM3RHBCO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0EsaUNBQWlDLEVBQUU7QUFDbkM7O0FBRUE7QUFDQTtBQUNBLGFBQWE7QUFDYixZQUFZO0FBQ1osWUFBWTtBQUNaLGNBQWM7QUFDZCxhQUFhO0FBQ2IsY0FBYztBQUNkO0FBQ0E7O0FBRU8sU0FBUyxZQUFNO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBLEM7O0FDekdBLElBQUkscUJBQVEsdUNBQXVDLGdCQUFnQixzQkFBc0IsT0FBTywyQkFBMkIsMEJBQTBCLHlEQUF5RCwyQkFBMkIsRUFBRSxFQUFFLEVBQUUsZUFBZTs7QUFFOVAsbUNBQW1DLGlEQUFpRCxnQkFBZ0IsaUJBQWlCLE9BQU8sbUJBQW1CLDREQUE0RCw2REFBNkQsd0NBQXdDLEVBQUUsRUFBRSxZQUFZOztBQUVoVSxTQUFTLDRCQUFlLHlCQUF5QiwwQ0FBMEMsMERBQTBELEVBQUU7O0FBRXZKLGlEQUFpRCxhQUFhLHVGQUF1RixFQUFFLHVGQUF1Rjs7QUFFOU8sMENBQTBDLCtEQUErRCxxR0FBcUcsRUFBRSx5RUFBeUUsZUFBZSx5RUFBeUUsRUFBRSxFQUFFLHVIQUF1SDs7QUFFL2I7QUFDVDs7QUFFcEMsSUFBSSwyQkFBYTtBQUNqQjs7QUFFQTtBQUNBLHVGQUF1Rjs7QUFFdkYsSUFBSSw0QkFBZTs7QUFFbkI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLFdBQVcsT0FBYTtBQUN4Qjs7QUFFQTtBQUNBLHVGQUF1Rjs7QUFFdkY7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsSUFBSSxPQUFhOztBQUVqQjtBQUNBOztBQUVBO0FBQ0EsdUZBQXVGOztBQUV2RjtBQUNBO0FBQ0Esd0ZBQXdGLGVBQWU7QUFDdkc7QUFDQTtBQUNBOztBQUVBO0FBQ0EsdUZBQXVGOztBQUV2RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxlQUFlLE9BQWE7O0FBRTVCO0FBQ0EsTUFBTSxVQUFnQjtBQUN0QixLQUFLO0FBQ0wsYUFBYSxxQkFBUSxHQUFHO0FBQ3hCOztBQUVBLElBQUksT0FBYTs7QUFFakI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSx1REFBdUQscUJBQVEsR0FBRzs7QUFFbEU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQyxDQUFDLGVBQVk7O0FBRUMsZ0ZBQWEsRTs7QUN2SmI7O0FBRWYsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLENBQUMsRTs7QUNoQkQsSUFBSSxrQkFBUSx1Q0FBdUMsZ0JBQWdCLHNCQUFzQixPQUFPLDJCQUEyQiwwQkFBMEIseURBQXlELDJCQUEyQixFQUFFLEVBQUUsRUFBRSxlQUFlOztBQUU5UCxvR0FBb0csbUJBQW1CLEVBQUUsbUJBQW1CLDhIQUE4SDs7QUFFMVEsU0FBUyxtQkFBUyxpQkFBaUIsaURBQWlELGdCQUFnQixpQkFBaUIsT0FBTyxtQkFBbUIsNERBQTRELDZEQUE2RCx3Q0FBd0MsRUFBRSxFQUFFLFlBQVk7O0FBRWhVLFNBQVMseUJBQWUseUJBQXlCLDBDQUEwQywwREFBMEQsRUFBRTs7QUFFdkosU0FBUyxvQ0FBMEIsY0FBYyxhQUFhLHVGQUF1RixFQUFFLHVGQUF1Rjs7QUFFOU8sU0FBUyxtQkFBUyx3QkFBd0IsK0RBQStELHFHQUFxRyxFQUFFLHlFQUF5RSxlQUFlLHlFQUF5RSxFQUFFLEVBQUUsdUZBQXVGLG1CQUFTLHVCQUF1Qjs7QUFFdmM7QUFDUTtBQUNFO0FBQ1g7O0FBRXBDLElBQUkscUJBQVU7QUFDZCxFQUFFLG1CQUFTOztBQUVYO0FBQ0E7O0FBRUEsSUFBSSx5QkFBZTs7QUFFbkIsZ0JBQWdCLG9DQUEwQjs7QUFFMUMsSUFBSSxJQUFVOztBQUVkO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQixNQUFVO0FBQzdCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsdUZBQXVGLGtCQUFrQjs7QUFFekc7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMERBQTBEOztBQUUxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxrQkFBUSxHQUFHLFlBQVksb0NBQW9DO0FBQ3pHLHNEQUFzRDtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIseUJBQXlCO0FBQ2xEO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZUFBZTtBQUNmLGFBQWE7QUFDYixXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHNHQUFzRyxxQkFBcUI7QUFDM0gsS0FBSztBQUNMO0FBQ0Esd0RBQXdELGtCQUFRLEdBQUcsWUFBWSxnQkFBZ0Isa0JBQVEsR0FBRyxzREFBc0Q7O0FBRWhLO0FBQ0E7QUFDQSw4REFBOEQsa0JBQVEsR0FBRztBQUN6RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsWUFBWSxhQUFhO0FBQ3pCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQLEtBQUs7O0FBRUwsWUFBWTtBQUNaOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUMsQ0FBQyxlQUFZOztBQUVDLHVFQUFVLEU7O0FDOVV6QixTQUFTLDRCQUFlLHlCQUF5QiwwQ0FBMEMsMERBQTBELEVBQUU7O0FBRWxIOztBQUVyQztBQUNBO0FBQ0E7O0FBRUEsSUFBSSwwQkFBWTtBQUNoQjtBQUNBLElBQUksNEJBQWU7O0FBRW5COztBQUVBO0FBQ0Esa0JBQWtCLE1BQVU7QUFDNUI7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVjLDRFQUFZLEU7O0FDMUgzQixTQUFTLDZCQUFlLHlCQUF5QiwwQ0FBMEMsMERBQTBELEVBQUU7O0FBRWxIOztBQUVyQztBQUNBO0FBQ0EsYUFBYSxzSkFBc0osR0FBRyxvYUFBb2EsR0FBRyxnS0FBZ0ssR0FBRyx5RUFBeUUsR0FBRyxpREFBaUQsR0FBRywyQ0FBMkMsR0FBRyw0Q0FBNEMsR0FBRyx3Q0FBd0MsR0FBRyxrQ0FBa0MsR0FBRyw2Q0FBNkMsR0FBRywwQ0FBMEMsR0FBRyxtQ0FBbUMsR0FBRyxtQ0FBbUMsR0FBRyx5Q0FBeUMsR0FBRyx1Q0FBdUMsR0FBRyxzQ0FBc0MsR0FBRyxtQ0FBbUMsR0FBRyx1Q0FBdUMsR0FBRywyQ0FBMkMsR0FBRyxrQ0FBa0MsR0FBRyx1Q0FBdUMsR0FBRyx5Q0FBeUMsR0FBRywyQ0FBMkM7O0FBRXptRDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTs7QUFFQSxJQUFJLDZCQUFjO0FBQ2xCO0FBQ0E7O0FBRUEsSUFBSSw2QkFBZTs7QUFFbkI7QUFDQTs7QUFFQSxrQkFBa0IsTUFBVTs7QUFFNUI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0Esa0RBQWtEOztBQUVsRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRWMsbUZBQWMsRTs7QUNyTDdCLElBQUksb0JBQVEsdUNBQXVDLGdCQUFnQixzQkFBc0IsT0FBTywyQkFBMkIsMEJBQTBCLHlEQUF5RCwyQkFBMkIsRUFBRSxFQUFFLEVBQUUsZUFBZTs7QUFFOVAsU0FBUywyQkFBZSx5QkFBeUIsMENBQTBDLDBEQUEwRCxFQUFFOztBQUVuSDtBQUNDOztBQUVyQyxJQUFJLHlCQUFZO0FBQ2hCO0FBQ0E7O0FBRUEsSUFBSSwyQkFBZTs7QUFFbkIsa0JBQWtCLE1BQVU7O0FBRTVCO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQ7O0FBRXpEOztBQUVBLDhEQUE4RCxZQUFZO0FBQzFFO0FBQ0E7O0FBRUEsaUNBQWlDLFdBQWlCLDJDQUEyQztBQUM3RixpQ0FBaUMsV0FBaUIsMkNBQTJDOztBQUU3Rjs7QUFFQTtBQUNBOztBQUVBLCtDQUErQyxXQUFpQixzREFBc0QsV0FBaUI7QUFDdkksK0NBQStDLFdBQWlCLHNEQUFzRCxXQUFpQjs7QUFFdkk7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx5REFBeUQsT0FBYTs7QUFFdEU7QUFDQTtBQUNBOztBQUVBLDBCQUEwQixPQUFhO0FBQ3ZDOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxnQkFBZ0IsVUFBZ0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsd0JBQXdCLG9CQUFRLEdBQUc7QUFDbkMsNkNBQTZDOztBQUU3QyxpRUFBaUUsWUFBWSxpQkFBaUIsRUFBRTtBQUNoRztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw4Q0FBOEMsb0JBQVEsR0FBRztBQUN6RCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsNkNBQTZDLFVBQWdCO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVjLDZFQUFZLEU7O0FDOUwzQixJQUFJLHdCQUFRLHVDQUF1QyxnQkFBZ0Isc0JBQXNCLE9BQU8sMkJBQTJCLDBCQUEwQix5REFBeUQsMkJBQTJCLEVBQUUsRUFBRSxFQUFFLGVBQWU7O0FBRTlQLGtDQUFrQyxpQ0FBaUMsZUFBZSxlQUFlLGdCQUFnQixvQkFBb0IsTUFBTSwwQ0FBMEMsK0JBQStCLGFBQWEscUJBQXFCLG1DQUFtQyxFQUFFLEVBQUUsY0FBYyxXQUFXLFVBQVUsRUFBRSxVQUFVLE1BQU0seUNBQXlDLEVBQUUsVUFBVSxrQkFBa0IsRUFBRSxFQUFFLGFBQWEsRUFBRSwyQkFBMkIsMEJBQTBCLFlBQVksRUFBRSwyQ0FBMkMsOEJBQThCLEVBQUUsT0FBTyw2RUFBNkUsRUFBRSxHQUFHLEVBQUU7O0FBRXJwQixTQUFTLHlCQUFTLGlCQUFpQixpREFBaUQsZ0JBQWdCLGlCQUFpQixPQUFPLG1CQUFtQiw0REFBNEQsNkRBQTZELHdDQUF3QyxFQUFFLEVBQUUsWUFBWTs7QUFFaFUsU0FBUywrQkFBZSx5QkFBeUIsMENBQTBDLDBEQUEwRCxFQUFFOztBQUV2SixTQUFTLDBDQUEwQixjQUFjLGFBQWEsdUZBQXVGLEVBQUUsdUZBQXVGOztBQUU5TyxTQUFTLHlCQUFTLHdCQUF3QiwrREFBK0QscUdBQXFHLEVBQUUseUVBQXlFLGVBQWUseUVBQXlFLEVBQUUsRUFBRSx1RkFBdUYseUJBQVMsdUJBQXVCOztBQUV4YztBQUNDO0FBQ1E7O0FBRTdDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJLDBCQUFTO0FBQ2IsRUFBRSx5QkFBUzs7QUFFWDtBQUNBOztBQUVBLElBQUksK0JBQWU7O0FBRW5CLGdCQUFnQiwwQ0FBMEI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLE1BQVU7O0FBRTdCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsaUNBQWlDO0FBQ2pDLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVCxpQ0FBaUM7O0FBRWpDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNLFFBQWM7QUFDcEI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLDZDQUE2QyxFQUFFOztBQUUvQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0Msa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSxpREFBaUQ7QUFDakQ7O0FBRUE7QUFDQSxnREFBZ0QsZUFBZTtBQUMvRDs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsZ0dBQWdHLHdCQUFRLEdBQUcsWUFBWSxxQkFBcUI7QUFDNUk7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDLENBQUMsZUFBWTs7QUFFQywrRUFBUyxFOztBQ3ZQVDtBQUNmO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4REFBOEQ7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxpQkFBaUI7QUFDakIsaUJBQWlCO0FBQ2pCO0FBQ0EsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDOztBQ2hGQSxJQUFJLGNBQU8seUZBQXlGLG1CQUFtQixFQUFFLG1CQUFtQiw4SEFBOEg7O0FBRTFRLElBQUksZUFBUSx1Q0FBdUMsZ0JBQWdCLHNCQUFzQixPQUFPLDJCQUEyQiwwQkFBMEIseURBQXlELDJCQUEyQixFQUFFLEVBQUUsRUFBRSxlQUFlOztBQUU5UCxTQUFTLGdCQUFTLGlCQUFpQixpREFBaUQsZ0JBQWdCLGlCQUFpQixPQUFPLG1CQUFtQiw0REFBNEQsNkRBQTZELHdDQUF3QyxFQUFFLEVBQUUsWUFBWTs7QUFFaFUsU0FBUyxzQkFBZSx5QkFBeUIsMENBQTBDLDBEQUEwRCxFQUFFOztBQUV2SixTQUFTLGlDQUEwQixjQUFjLGFBQWEsdUZBQXVGLEVBQUUsdUZBQXVGOztBQUU5TyxTQUFTLGdCQUFTLHdCQUF3QiwrREFBK0QscUdBQXFHLEVBQUUseUVBQXlFLGVBQWUseUVBQXlFLEVBQUUsRUFBRSx1RkFBdUYsZ0JBQVMsdUJBQXVCOztBQUV2YztBQUNRO0FBQ0U7QUFDTjtBQUNNO0FBQ0U7QUFDSjtBQUNRO0FBQ2dCO0FBQ3RCOztBQUUvQzs7QUFFQSxJQUFJLFlBQUk7QUFDUixFQUFFLGdCQUFTOztBQUVYO0FBQ0E7QUFDQTs7QUFFQSxJQUFJLHNCQUFlOztBQUVuQixnQkFBZ0IsaUNBQTBCOztBQUUxQyxvQkFBb0IsZ0JBQWdCO0FBQ3BDO0FBQ0EsbUJBQW1CLE1BQVU7QUFDN0IscUJBQXFCOztBQUVyQjtBQUNBOztBQUVBO0FBQ0EscUZBQXFGLGlDQUEwQjtBQUMvRztBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsZUFBUSxHQUFHLEVBQUUsR0FBVyxrQkFBa0IsZ0JBQWdCOztBQUU3RTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUSxNQUFVO0FBQ2xCLE9BQU87QUFDUCxRQUFRLE1BQVU7QUFDbEI7O0FBRUEsbUJBQW1CLGFBQWE7QUFDaEMsdUJBQXVCLGdCQUFhOztBQUVwQztBQUNBLGlCQUFpQixNQUFVO0FBQzNCO0FBQ0E7QUFDQSw2QkFBNkIsaUJBQWMsTUFBTSxvSkFBb0o7QUFDck0sMkJBQTJCLGVBQVk7O0FBRXZDLCtCQUErQixnQkFBZ0I7QUFDL0M7QUFDQTtBQUNBLDBGQUEwRixhQUFhO0FBQ3ZHO0FBQ0E7O0FBRUE7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDRCQUE0QixhQUFVO0FBQ3RDO0FBQ0E7QUFDQSw4RkFBOEYsZUFBZTtBQUM3RztBQUNBOztBQUVBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7O0FBR0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLHVGQUF1Rjs7QUFFdkY7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTSxhQUFhO0FBQ25COztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSw0RkFBNEYsZUFBZTtBQUMzRztBQUNBOztBQUVBLG9CQUFvQixlQUFRLEdBQUc7QUFDL0IsdURBQXVELGNBQU87QUFDOUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsd0JBQXdCLGVBQVEsR0FBRywwQkFBMEIsZ0JBQWdCO0FBQzdFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLDJCQUEyQixhQUFVO0FBQ3JDO0FBQ0EsNEZBQTRGLGVBQWU7QUFDM0c7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBLDZDQUE2Qzs7QUFFN0M7QUFDQTs7QUFFQTtBQUNBLENBQUMsQ0FBQyxlQUFZOztBQUVDLGdEQUFJLFlBQUksRUFBRSxFOztBQ3ZZVTs7QUFFcEIsOENBQU8sRUFBQzs7QUFFaEIscUJBQXFCLE9BQU8scUJBQXFCLE9BQU87QUFDeEQsSUFBSSxnQkFBYSxHQUFHLE9BQU8sb0JBQW9CLE9BQU87QUFDdEQscUJBQXFCLE9BQU8scUJBQXFCLE9BQU87QUFDeEQsVUFBVSxPQUFPLFVBQVUsT0FBTztBQUNsQyxhQUFhLE9BQU8sYUFBYSxPQUFPO0FBQ3hDLGdCQUFnQixPQUFPLGdCQUFnQixPQUFPO0FBQzlDLElBQUksT0FBSSxHQUFHLE9BQU8sV0FBVyxPQUFPO0FBQ3BDLG9CQUFvQixPQUFPLG9CQUFvQixPQUFPO0FBQ3RELHFCQUFxQixPQUFPLHFCQUFxQixPQUFPO0FBQ3hELG9CQUFvQixPQUFPLG9CQUFvQixPQUFPO0FBQ3RELFVBQVUsT0FBTyxVQUFVLE9BQU87QUFDbEMsU0FBUyxPQUFPLFNBQVMsT0FBTztBQUNoQywwQkFBMEIsT0FBTywwQkFBMEIsT0FBTztBQUNsRSxJQUFJLElBQUMsR0FBRyxPQUFPLFFBQVEsT0FBTztBQUM5QixJQUFJLE1BQUcsR0FBRyxPQUFPLFVBQVUsT0FBTyxFOzs7Ozs7Ozs7OztBQ2xCekM7QUFBQTs7OztBQUk4QztBQUNoQjtBQUNjO0FBQ2U7QUFDSTs7QUFFeEQsSUFBSSxTQUFJO0FBQ2Y7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsRUFBTztBQUMxQjtBQUNBLGdCQUFnQiwrQkFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsSUFBSSxFQUFPO0FBQ1gsVUFBVSxFQUFPO0FBQ2pCLFFBQVEsRUFBTyx1QkFBdUIsRUFBTztBQUM3Qzs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0Qsd0NBQXdDO0FBQzFGO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGdGQUFnRjtBQUNoRjs7QUFFQTtBQUNBLHVCQUF1QjtBQUN2Qjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esa0RBQWtEO0FBQ2xEOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esb0NBQW9DLE9BQU87QUFDM0M7QUFDQSxLQUFLOztBQUVMO0FBQ0EsaUNBQWlDLE9BQU87QUFDeEM7QUFDQTtBQUNBOztBQUVBLG1FQUFtRSxTQUFTO0FBQzVFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHdDQUF3QztBQUN4Qzs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSx5QkFBeUIsNEJBQW9COztBQUU3QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDJCQUEyQiwwQkFBRztBQUM5QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsMEJBQUc7QUFDbkM7QUFDQSxxREFBcUQsU0FBUztBQUM5RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw4REFBOEQsU0FBUztBQUN2RTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQiwwQkFBRztBQUNsQztBQUNBLHNEQUFzRCxVQUFVO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQyxxQkFBcUIsMkNBQWUsRUFBRSx1REFBZSIsImZpbGUiOiI5LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfSBlbHNlIHsgcmV0dXJuIEFycmF5LmZyb20oYXJyKTsgfSB9XG5cbnZhciBjb25zb2xlTG9nZ2VyID0ge1xuICB0eXBlOiAnbG9nZ2VyJyxcblxuICBsb2c6IGZ1bmN0aW9uIGxvZyhhcmdzKSB7XG4gICAgdGhpcy5vdXRwdXQoJ2xvZycsIGFyZ3MpO1xuICB9LFxuICB3YXJuOiBmdW5jdGlvbiB3YXJuKGFyZ3MpIHtcbiAgICB0aGlzLm91dHB1dCgnd2FybicsIGFyZ3MpO1xuICB9LFxuICBlcnJvcjogZnVuY3Rpb24gZXJyb3IoYXJncykge1xuICAgIHRoaXMub3V0cHV0KCdlcnJvcicsIGFyZ3MpO1xuICB9LFxuICBvdXRwdXQ6IGZ1bmN0aW9uIG91dHB1dCh0eXBlLCBhcmdzKSB7XG4gICAgdmFyIF9jb25zb2xlO1xuXG4gICAgLyogZXNsaW50IG5vLWNvbnNvbGU6IDAgKi9cbiAgICBpZiAoY29uc29sZSAmJiBjb25zb2xlW3R5cGVdKSAoX2NvbnNvbGUgPSBjb25zb2xlKVt0eXBlXS5hcHBseShfY29uc29sZSwgX3RvQ29uc3VtYWJsZUFycmF5KGFyZ3MpKTtcbiAgfVxufTtcblxudmFyIExvZ2dlciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTG9nZ2VyKGNvbmNyZXRlTG9nZ2VyKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIExvZ2dlcik7XG5cbiAgICB0aGlzLmluaXQoY29uY3JldGVMb2dnZXIsIG9wdGlvbnMpO1xuICB9XG5cbiAgTG9nZ2VyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gaW5pdChjb25jcmV0ZUxvZ2dlcikge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICAgIHRoaXMucHJlZml4ID0gb3B0aW9ucy5wcmVmaXggfHwgJ2kxOG5leHQ6JztcbiAgICB0aGlzLmxvZ2dlciA9IGNvbmNyZXRlTG9nZ2VyIHx8IGNvbnNvbGVMb2dnZXI7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLmRlYnVnID0gb3B0aW9ucy5kZWJ1ZztcbiAgfTtcblxuICBMb2dnZXIucHJvdG90eXBlLnNldERlYnVnID0gZnVuY3Rpb24gc2V0RGVidWcoYm9vbCkge1xuICAgIHRoaXMuZGVidWcgPSBib29sO1xuICB9O1xuXG4gIExvZ2dlci5wcm90b3R5cGUubG9nID0gZnVuY3Rpb24gbG9nKCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmZvcndhcmQoYXJncywgJ2xvZycsICcnLCB0cnVlKTtcbiAgfTtcblxuICBMb2dnZXIucHJvdG90eXBlLndhcm4gPSBmdW5jdGlvbiB3YXJuKCkge1xuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICBhcmdzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZm9yd2FyZChhcmdzLCAnd2FybicsICcnLCB0cnVlKTtcbiAgfTtcblxuICBMb2dnZXIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gZXJyb3IoKSB7XG4gICAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbjMpLCBfa2V5MyA9IDA7IF9rZXkzIDwgX2xlbjM7IF9rZXkzKyspIHtcbiAgICAgIGFyZ3NbX2tleTNdID0gYXJndW1lbnRzW19rZXkzXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5mb3J3YXJkKGFyZ3MsICdlcnJvcicsICcnKTtcbiAgfTtcblxuICBMb2dnZXIucHJvdG90eXBlLmRlcHJlY2F0ZSA9IGZ1bmN0aW9uIGRlcHJlY2F0ZSgpIHtcbiAgICBmb3IgKHZhciBfbGVuNCA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuNCksIF9rZXk0ID0gMDsgX2tleTQgPCBfbGVuNDsgX2tleTQrKykge1xuICAgICAgYXJnc1tfa2V5NF0gPSBhcmd1bWVudHNbX2tleTRdO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmZvcndhcmQoYXJncywgJ3dhcm4nLCAnV0FSTklORyBERVBSRUNBVEVEOiAnLCB0cnVlKTtcbiAgfTtcblxuICBMb2dnZXIucHJvdG90eXBlLmZvcndhcmQgPSBmdW5jdGlvbiBmb3J3YXJkKGFyZ3MsIGx2bCwgcHJlZml4LCBkZWJ1Z09ubHkpIHtcbiAgICBpZiAoZGVidWdPbmx5ICYmICF0aGlzLmRlYnVnKSByZXR1cm4gbnVsbDtcbiAgICBpZiAodHlwZW9mIGFyZ3NbMF0gPT09ICdzdHJpbmcnKSBhcmdzWzBdID0gJycgKyBwcmVmaXggKyB0aGlzLnByZWZpeCArICcgJyArIGFyZ3NbMF07XG4gICAgcmV0dXJuIHRoaXMubG9nZ2VyW2x2bF0oYXJncyk7XG4gIH07XG5cbiAgTG9nZ2VyLnByb3RvdHlwZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUobW9kdWxlTmFtZSkge1xuICAgIHJldHVybiBuZXcgTG9nZ2VyKHRoaXMubG9nZ2VyLCBfZXh0ZW5kcyh7IHByZWZpeDogdGhpcy5wcmVmaXggKyAnOicgKyBtb2R1bGVOYW1lICsgJzonIH0sIHRoaXMub3B0aW9ucykpO1xuICB9O1xuXG4gIHJldHVybiBMb2dnZXI7XG59KCk7XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBMb2dnZXIoKTsiLCJmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG52YXIgRXZlbnRFbWl0dGVyID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV2ZW50RW1pdHRlcik7XG5cbiAgICB0aGlzLm9ic2VydmVycyA9IHt9O1xuICB9XG5cbiAgRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIG9uKGV2ZW50cywgbGlzdGVuZXIpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgZXZlbnRzLnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIF90aGlzLm9ic2VydmVyc1tldmVudF0gPSBfdGhpcy5vYnNlcnZlcnNbZXZlbnRdIHx8IFtdO1xuICAgICAgX3RoaXMub2JzZXJ2ZXJzW2V2ZW50XS5wdXNoKGxpc3RlbmVyKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IGZ1bmN0aW9uIG9mZihldmVudCwgbGlzdGVuZXIpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIGlmICghdGhpcy5vYnNlcnZlcnNbZXZlbnRdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5vYnNlcnZlcnNbZXZlbnRdLmZvckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFsaXN0ZW5lcikge1xuICAgICAgICBkZWxldGUgX3RoaXMyLm9ic2VydmVyc1tldmVudF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgaW5kZXggPSBfdGhpczIub2JzZXJ2ZXJzW2V2ZW50XS5pbmRleE9mKGxpc3RlbmVyKTtcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICBfdGhpczIub2JzZXJ2ZXJzW2V2ZW50XS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub2JzZXJ2ZXJzW2V2ZW50XSkge1xuICAgICAgdmFyIGNsb25lZCA9IFtdLmNvbmNhdCh0aGlzLm9ic2VydmVyc1tldmVudF0pO1xuICAgICAgY2xvbmVkLmZvckVhY2goZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICAgIG9ic2VydmVyLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vYnNlcnZlcnNbJyonXSkge1xuICAgICAgdmFyIF9jbG9uZWQgPSBbXS5jb25jYXQodGhpcy5vYnNlcnZlcnNbJyonXSk7XG4gICAgICBfY2xvbmVkLmZvckVhY2goZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICAgIG9ic2VydmVyLmFwcGx5KG9ic2VydmVyLCBbZXZlbnRdLmNvbmNhdChhcmdzKSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIEV2ZW50RW1pdHRlcjtcbn0oKTtcblxuZXhwb3J0IGRlZmF1bHQgRXZlbnRFbWl0dGVyOyIsImV4cG9ydCBmdW5jdGlvbiBtYWtlU3RyaW5nKG9iamVjdCkge1xuICBpZiAob2JqZWN0ID09IG51bGwpIHJldHVybiAnJztcbiAgLyogZXNsaW50IHByZWZlci10ZW1wbGF0ZTogMCAqL1xuICByZXR1cm4gJycgKyBvYmplY3Q7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KGEsIHMsIHQpIHtcbiAgYS5mb3JFYWNoKGZ1bmN0aW9uIChtKSB7XG4gICAgaWYgKHNbbV0pIHRbbV0gPSBzW21dO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0TGFzdE9mUGF0aChvYmplY3QsIHBhdGgsIEVtcHR5KSB7XG4gIGZ1bmN0aW9uIGNsZWFuS2V5KGtleSkge1xuICAgIHJldHVybiBrZXkgJiYga2V5LmluZGV4T2YoJyMjIycpID4gLTEgPyBrZXkucmVwbGFjZSgvIyMjL2csICcuJykgOiBrZXk7XG4gIH1cblxuICBmdW5jdGlvbiBjYW5Ob3RUcmF2ZXJzZURlZXBlcigpIHtcbiAgICByZXR1cm4gIW9iamVjdCB8fCB0eXBlb2Ygb2JqZWN0ID09PSAnc3RyaW5nJztcbiAgfVxuXG4gIHZhciBzdGFjayA9IHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJyA/IFtdLmNvbmNhdChwYXRoKSA6IHBhdGguc3BsaXQoJy4nKTtcbiAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDEpIHtcbiAgICBpZiAoY2FuTm90VHJhdmVyc2VEZWVwZXIoKSkgcmV0dXJuIHt9O1xuXG4gICAgdmFyIGtleSA9IGNsZWFuS2V5KHN0YWNrLnNoaWZ0KCkpO1xuICAgIGlmICghb2JqZWN0W2tleV0gJiYgRW1wdHkpIG9iamVjdFtrZXldID0gbmV3IEVtcHR5KCk7XG4gICAgb2JqZWN0ID0gb2JqZWN0W2tleV07XG4gIH1cblxuICBpZiAoY2FuTm90VHJhdmVyc2VEZWVwZXIoKSkgcmV0dXJuIHt9O1xuICByZXR1cm4ge1xuICAgIG9iajogb2JqZWN0LFxuICAgIGs6IGNsZWFuS2V5KHN0YWNrLnNoaWZ0KCkpXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRQYXRoKG9iamVjdCwgcGF0aCwgbmV3VmFsdWUpIHtcbiAgdmFyIF9nZXRMYXN0T2ZQYXRoID0gZ2V0TGFzdE9mUGF0aChvYmplY3QsIHBhdGgsIE9iamVjdCksXG4gICAgICBvYmogPSBfZ2V0TGFzdE9mUGF0aC5vYmosXG4gICAgICBrID0gX2dldExhc3RPZlBhdGguaztcblxuICBvYmpba10gPSBuZXdWYWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHB1c2hQYXRoKG9iamVjdCwgcGF0aCwgbmV3VmFsdWUsIGNvbmNhdCkge1xuICB2YXIgX2dldExhc3RPZlBhdGgyID0gZ2V0TGFzdE9mUGF0aChvYmplY3QsIHBhdGgsIE9iamVjdCksXG4gICAgICBvYmogPSBfZ2V0TGFzdE9mUGF0aDIub2JqLFxuICAgICAgayA9IF9nZXRMYXN0T2ZQYXRoMi5rO1xuXG4gIG9ialtrXSA9IG9ialtrXSB8fCBbXTtcbiAgaWYgKGNvbmNhdCkgb2JqW2tdID0gb2JqW2tdLmNvbmNhdChuZXdWYWx1ZSk7XG4gIGlmICghY29uY2F0KSBvYmpba10ucHVzaChuZXdWYWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXRoKG9iamVjdCwgcGF0aCkge1xuICB2YXIgX2dldExhc3RPZlBhdGgzID0gZ2V0TGFzdE9mUGF0aChvYmplY3QsIHBhdGgpLFxuICAgICAgb2JqID0gX2dldExhc3RPZlBhdGgzLm9iaixcbiAgICAgIGsgPSBfZ2V0TGFzdE9mUGF0aDMuaztcblxuICBpZiAoIW9iaikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIG9ialtrXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZXBFeHRlbmQodGFyZ2V0LCBzb3VyY2UsIG92ZXJ3cml0ZSkge1xuICAvKiBlc2xpbnQgbm8tcmVzdHJpY3RlZC1zeW50YXg6IDAgKi9cbiAgZm9yICh2YXIgcHJvcCBpbiBzb3VyY2UpIHtcbiAgICBpZiAocHJvcCBpbiB0YXJnZXQpIHtcbiAgICAgIC8vIElmIHdlIHJlYWNoZWQgYSBsZWFmIHN0cmluZyBpbiB0YXJnZXQgb3Igc291cmNlIHRoZW4gcmVwbGFjZSB3aXRoIHNvdXJjZSBvciBza2lwIGRlcGVuZGluZyBvbiB0aGUgJ292ZXJ3cml0ZScgc3dpdGNoXG4gICAgICBpZiAodHlwZW9mIHRhcmdldFtwcm9wXSA9PT0gJ3N0cmluZycgfHwgdGFyZ2V0W3Byb3BdIGluc3RhbmNlb2YgU3RyaW5nIHx8IHR5cGVvZiBzb3VyY2VbcHJvcF0gPT09ICdzdHJpbmcnIHx8IHNvdXJjZVtwcm9wXSBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgICAgICBpZiAob3ZlcndyaXRlKSB0YXJnZXRbcHJvcF0gPSBzb3VyY2VbcHJvcF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWVwRXh0ZW5kKHRhcmdldFtwcm9wXSwgc291cmNlW3Byb3BdLCBvdmVyd3JpdGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0YXJnZXRbcHJvcF0gPSBzb3VyY2VbcHJvcF07XG4gICAgfVxuICB9XG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdleEVzY2FwZShzdHIpIHtcbiAgLyogZXNsaW50IG5vLXVzZWxlc3MtZXNjYXBlOiAwICovXG4gIHJldHVybiBzdHIucmVwbGFjZSgvW1xcLVxcW1xcXVxcL1xce1xcfVxcKFxcKVxcKlxcK1xcP1xcLlxcXFxcXF5cXCRcXHxdL2csICdcXFxcJCYnKTtcbn1cblxuLyogZXNsaW50LWRpc2FibGUgKi9cbnZhciBfZW50aXR5TWFwID0ge1xuICBcIiZcIjogXCImYW1wO1wiLFxuICBcIjxcIjogXCImbHQ7XCIsXG4gIFwiPlwiOiBcIiZndDtcIixcbiAgJ1wiJzogJyZxdW90OycsXG4gIFwiJ1wiOiAnJiMzOTsnLFxuICBcIi9cIjogJyYjeDJGOydcbn07XG4vKiBlc2xpbnQtZW5hYmxlICovXG5cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGUoZGF0YSkge1xuICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGRhdGEucmVwbGFjZSgvWyY8PlwiJ1xcL10vZywgZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiBfZW50aXR5TWFwW3NdO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGRhdGE7XG59IiwidmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuZnVuY3Rpb24gX2RlZmF1bHRzKG9iaiwgZGVmYXVsdHMpIHsgdmFyIGtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhkZWZhdWx0cyk7IGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykgeyB2YXIga2V5ID0ga2V5c1tpXTsgdmFyIHZhbHVlID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkZWZhdWx0cywga2V5KTsgaWYgKHZhbHVlICYmIHZhbHVlLmNvbmZpZ3VyYWJsZSAmJiBvYmpba2V5XSA9PT0gdW5kZWZpbmVkKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpOyB9IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBfZGVmYXVsdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSAnLi9FdmVudEVtaXR0ZXIuanMnO1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSAnLi91dGlscy5qcyc7XG5cbnZhciBSZXNvdXJjZVN0b3JlID0gZnVuY3Rpb24gKF9FdmVudEVtaXR0ZXIpIHtcbiAgX2luaGVyaXRzKFJlc291cmNlU3RvcmUsIF9FdmVudEVtaXR0ZXIpO1xuXG4gIGZ1bmN0aW9uIFJlc291cmNlU3RvcmUoZGF0YSkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7IG5zOiBbJ3RyYW5zbGF0aW9uJ10sIGRlZmF1bHROUzogJ3RyYW5zbGF0aW9uJyB9O1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFJlc291cmNlU3RvcmUpO1xuXG4gICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX0V2ZW50RW1pdHRlci5jYWxsKHRoaXMpKTtcblxuICAgIF90aGlzLmRhdGEgPSBkYXRhIHx8IHt9O1xuICAgIF90aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIGlmIChfdGhpcy5vcHRpb25zLmtleVNlcGFyYXRvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBfdGhpcy5vcHRpb25zLmtleVNlcGFyYXRvciA9ICcuJztcbiAgICB9XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgUmVzb3VyY2VTdG9yZS5wcm90b3R5cGUuYWRkTmFtZXNwYWNlcyA9IGZ1bmN0aW9uIGFkZE5hbWVzcGFjZXMobnMpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLm5zLmluZGV4T2YobnMpIDwgMCkge1xuICAgICAgdGhpcy5vcHRpb25zLm5zLnB1c2gobnMpO1xuICAgIH1cbiAgfTtcblxuICBSZXNvdXJjZVN0b3JlLnByb3RvdHlwZS5yZW1vdmVOYW1lc3BhY2VzID0gZnVuY3Rpb24gcmVtb3ZlTmFtZXNwYWNlcyhucykge1xuICAgIHZhciBpbmRleCA9IHRoaXMub3B0aW9ucy5ucy5pbmRleE9mKG5zKTtcbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgdGhpcy5vcHRpb25zLm5zLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9O1xuXG4gIFJlc291cmNlU3RvcmUucHJvdG90eXBlLmdldFJlc291cmNlID0gZnVuY3Rpb24gZ2V0UmVzb3VyY2UobG5nLCBucywga2V5KSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IHt9O1xuXG4gICAgdmFyIGtleVNlcGFyYXRvciA9IG9wdGlvbnMua2V5U2VwYXJhdG9yICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmtleVNlcGFyYXRvciA6IHRoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3I7XG5cbiAgICB2YXIgcGF0aCA9IFtsbmcsIG5zXTtcbiAgICBpZiAoa2V5ICYmIHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSBwYXRoID0gcGF0aC5jb25jYXQoa2V5KTtcbiAgICBpZiAoa2V5ICYmIHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnKSBwYXRoID0gcGF0aC5jb25jYXQoa2V5U2VwYXJhdG9yID8ga2V5LnNwbGl0KGtleVNlcGFyYXRvcikgOiBrZXkpO1xuXG4gICAgaWYgKGxuZy5pbmRleE9mKCcuJykgPiAtMSkge1xuICAgICAgcGF0aCA9IGxuZy5zcGxpdCgnLicpO1xuICAgIH1cblxuICAgIHJldHVybiB1dGlscy5nZXRQYXRoKHRoaXMuZGF0YSwgcGF0aCk7XG4gIH07XG5cbiAgUmVzb3VyY2VTdG9yZS5wcm90b3R5cGUuYWRkUmVzb3VyY2UgPSBmdW5jdGlvbiBhZGRSZXNvdXJjZShsbmcsIG5zLCBrZXksIHZhbHVlKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IHsgc2lsZW50OiBmYWxzZSB9O1xuXG4gICAgdmFyIGtleVNlcGFyYXRvciA9IHRoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3I7XG4gICAgaWYgKGtleVNlcGFyYXRvciA9PT0gdW5kZWZpbmVkKSBrZXlTZXBhcmF0b3IgPSAnLic7XG5cbiAgICB2YXIgcGF0aCA9IFtsbmcsIG5zXTtcbiAgICBpZiAoa2V5KSBwYXRoID0gcGF0aC5jb25jYXQoa2V5U2VwYXJhdG9yID8ga2V5LnNwbGl0KGtleVNlcGFyYXRvcikgOiBrZXkpO1xuXG4gICAgaWYgKGxuZy5pbmRleE9mKCcuJykgPiAtMSkge1xuICAgICAgcGF0aCA9IGxuZy5zcGxpdCgnLicpO1xuICAgICAgdmFsdWUgPSBucztcbiAgICAgIG5zID0gcGF0aFsxXTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZE5hbWVzcGFjZXMobnMpO1xuXG4gICAgdXRpbHMuc2V0UGF0aCh0aGlzLmRhdGEsIHBhdGgsIHZhbHVlKTtcblxuICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHRoaXMuZW1pdCgnYWRkZWQnLCBsbmcsIG5zLCBrZXksIHZhbHVlKTtcbiAgfTtcblxuICBSZXNvdXJjZVN0b3JlLnByb3RvdHlwZS5hZGRSZXNvdXJjZXMgPSBmdW5jdGlvbiBhZGRSZXNvdXJjZXMobG5nLCBucywgcmVzb3VyY2VzKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IHsgc2lsZW50OiBmYWxzZSB9O1xuXG4gICAgLyogZXNsaW50IG5vLXJlc3RyaWN0ZWQtc3ludGF4OiAwICovXG4gICAgZm9yICh2YXIgbSBpbiByZXNvdXJjZXMpIHtcbiAgICAgIGlmICh0eXBlb2YgcmVzb3VyY2VzW21dID09PSAnc3RyaW5nJykgdGhpcy5hZGRSZXNvdXJjZShsbmcsIG5zLCBtLCByZXNvdXJjZXNbbV0sIHsgc2lsZW50OiB0cnVlIH0pO1xuICAgIH1cbiAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB0aGlzLmVtaXQoJ2FkZGVkJywgbG5nLCBucywgcmVzb3VyY2VzKTtcbiAgfTtcblxuICBSZXNvdXJjZVN0b3JlLnByb3RvdHlwZS5hZGRSZXNvdXJjZUJ1bmRsZSA9IGZ1bmN0aW9uIGFkZFJlc291cmNlQnVuZGxlKGxuZywgbnMsIHJlc291cmNlcywgZGVlcCwgb3ZlcndyaXRlKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gNSAmJiBhcmd1bWVudHNbNV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s1XSA6IHsgc2lsZW50OiBmYWxzZSB9O1xuXG4gICAgdmFyIHBhdGggPSBbbG5nLCBuc107XG4gICAgaWYgKGxuZy5pbmRleE9mKCcuJykgPiAtMSkge1xuICAgICAgcGF0aCA9IGxuZy5zcGxpdCgnLicpO1xuICAgICAgZGVlcCA9IHJlc291cmNlcztcbiAgICAgIHJlc291cmNlcyA9IG5zO1xuICAgICAgbnMgPSBwYXRoWzFdO1xuICAgIH1cblxuICAgIHRoaXMuYWRkTmFtZXNwYWNlcyhucyk7XG5cbiAgICB2YXIgcGFjayA9IHV0aWxzLmdldFBhdGgodGhpcy5kYXRhLCBwYXRoKSB8fCB7fTtcblxuICAgIGlmIChkZWVwKSB7XG4gICAgICB1dGlscy5kZWVwRXh0ZW5kKHBhY2ssIHJlc291cmNlcywgb3ZlcndyaXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFjayA9IF9leHRlbmRzKHt9LCBwYWNrLCByZXNvdXJjZXMpO1xuICAgIH1cblxuICAgIHV0aWxzLnNldFBhdGgodGhpcy5kYXRhLCBwYXRoLCBwYWNrKTtcblxuICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHRoaXMuZW1pdCgnYWRkZWQnLCBsbmcsIG5zLCByZXNvdXJjZXMpO1xuICB9O1xuXG4gIFJlc291cmNlU3RvcmUucHJvdG90eXBlLnJlbW92ZVJlc291cmNlQnVuZGxlID0gZnVuY3Rpb24gcmVtb3ZlUmVzb3VyY2VCdW5kbGUobG5nLCBucykge1xuICAgIGlmICh0aGlzLmhhc1Jlc291cmNlQnVuZGxlKGxuZywgbnMpKSB7XG4gICAgICBkZWxldGUgdGhpcy5kYXRhW2xuZ11bbnNdO1xuICAgIH1cbiAgICB0aGlzLnJlbW92ZU5hbWVzcGFjZXMobnMpO1xuXG4gICAgdGhpcy5lbWl0KCdyZW1vdmVkJywgbG5nLCBucyk7XG4gIH07XG5cbiAgUmVzb3VyY2VTdG9yZS5wcm90b3R5cGUuaGFzUmVzb3VyY2VCdW5kbGUgPSBmdW5jdGlvbiBoYXNSZXNvdXJjZUJ1bmRsZShsbmcsIG5zKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2UobG5nLCBucykgIT09IHVuZGVmaW5lZDtcbiAgfTtcblxuICBSZXNvdXJjZVN0b3JlLnByb3RvdHlwZS5nZXRSZXNvdXJjZUJ1bmRsZSA9IGZ1bmN0aW9uIGdldFJlc291cmNlQnVuZGxlKGxuZywgbnMpIHtcbiAgICBpZiAoIW5zKSBucyA9IHRoaXMub3B0aW9ucy5kZWZhdWx0TlM7XG5cbiAgICAvLyBDT01QQVRJQklMSVRZOiByZW1vdmUgZXh0ZW5kIGluIHYyLjEuMFxuICAgIGlmICh0aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUFQSSA9PT0gJ3YxJykgcmV0dXJuIF9leHRlbmRzKHt9LCB0aGlzLmdldFJlc291cmNlKGxuZywgbnMpKTtcblxuICAgIHJldHVybiB0aGlzLmdldFJlc291cmNlKGxuZywgbnMpO1xuICB9O1xuXG4gIFJlc291cmNlU3RvcmUucHJvdG90eXBlLmdldERhdGFCeUxhbmd1YWdlID0gZnVuY3Rpb24gZ2V0RGF0YUJ5TGFuZ3VhZ2UobG5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVtsbmddO1xuICB9O1xuXG4gIFJlc291cmNlU3RvcmUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhO1xuICB9O1xuXG4gIHJldHVybiBSZXNvdXJjZVN0b3JlO1xufShFdmVudEVtaXR0ZXIpO1xuXG5leHBvcnQgZGVmYXVsdCBSZXNvdXJjZVN0b3JlOyIsImV4cG9ydCBkZWZhdWx0IHtcblxuICBwcm9jZXNzb3JzOiB7fSxcblxuICBhZGRQb3N0UHJvY2Vzc29yOiBmdW5jdGlvbiBhZGRQb3N0UHJvY2Vzc29yKG1vZHVsZSkge1xuICAgIHRoaXMucHJvY2Vzc29yc1ttb2R1bGUubmFtZV0gPSBtb2R1bGU7XG4gIH0sXG4gIGhhbmRsZTogZnVuY3Rpb24gaGFuZGxlKHByb2Nlc3NvcnMsIHZhbHVlLCBrZXksIG9wdGlvbnMsIHRyYW5zbGF0b3IpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgcHJvY2Vzc29ycy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9jZXNzb3IpIHtcbiAgICAgIGlmIChfdGhpcy5wcm9jZXNzb3JzW3Byb2Nlc3Nvcl0pIHZhbHVlID0gX3RoaXMucHJvY2Vzc29yc1twcm9jZXNzb3JdLnByb2Nlc3ModmFsdWUsIGtleSwgb3B0aW9ucywgdHJhbnNsYXRvcik7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn07IiwidmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxudmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG5mdW5jdGlvbiBfZGVmYXVsdHMob2JqLCBkZWZhdWx0cykgeyB2YXIga2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGRlZmF1bHRzKTsgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7IHZhciBrZXkgPSBrZXlzW2ldOyB2YXIgdmFsdWUgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGRlZmF1bHRzLCBrZXkpOyBpZiAodmFsdWUgJiYgdmFsdWUuY29uZmlndXJhYmxlICYmIG9ialtrZXldID09PSB1bmRlZmluZWQpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSk7IH0gfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikgPyBjYWxsIDogc2VsZjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IF9kZWZhdWx0cyhzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuaW1wb3J0IGJhc2VMb2dnZXIgZnJvbSAnLi9sb2dnZXIuanMnO1xuaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tICcuL0V2ZW50RW1pdHRlci5qcyc7XG5pbXBvcnQgcG9zdFByb2Nlc3NvciBmcm9tICcuL3Bvc3RQcm9jZXNzb3IuanMnO1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSAnLi91dGlscy5qcyc7XG5cbnZhciBUcmFuc2xhdG9yID0gZnVuY3Rpb24gKF9FdmVudEVtaXR0ZXIpIHtcbiAgX2luaGVyaXRzKFRyYW5zbGF0b3IsIF9FdmVudEVtaXR0ZXIpO1xuXG4gIGZ1bmN0aW9uIFRyYW5zbGF0b3Ioc2VydmljZXMpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVHJhbnNsYXRvcik7XG5cbiAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfRXZlbnRFbWl0dGVyLmNhbGwodGhpcykpO1xuXG4gICAgdXRpbHMuY29weShbJ3Jlc291cmNlU3RvcmUnLCAnbGFuZ3VhZ2VVdGlscycsICdwbHVyYWxSZXNvbHZlcicsICdpbnRlcnBvbGF0b3InLCAnYmFja2VuZENvbm5lY3RvcicsICdpMThuRm9ybWF0J10sIHNlcnZpY2VzLCBfdGhpcyk7XG5cbiAgICBfdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICBpZiAoX3RoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgX3RoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3IgPSAnLic7XG4gICAgfVxuXG4gICAgX3RoaXMubG9nZ2VyID0gYmFzZUxvZ2dlci5jcmVhdGUoJ3RyYW5zbGF0b3InKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBUcmFuc2xhdG9yLnByb3RvdHlwZS5jaGFuZ2VMYW5ndWFnZSA9IGZ1bmN0aW9uIGNoYW5nZUxhbmd1YWdlKGxuZykge1xuICAgIGlmIChsbmcpIHRoaXMubGFuZ3VhZ2UgPSBsbmc7XG4gIH07XG5cbiAgVHJhbnNsYXRvci5wcm90b3R5cGUuZXhpc3RzID0gZnVuY3Rpb24gZXhpc3RzKGtleSkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7IGludGVycG9sYXRpb246IHt9IH07XG5cbiAgICB2YXIgcmVzb2x2ZWQgPSB0aGlzLnJlc29sdmUoa2V5LCBvcHRpb25zKTtcbiAgICByZXR1cm4gcmVzb2x2ZWQgJiYgcmVzb2x2ZWQucmVzICE9PSB1bmRlZmluZWQ7XG4gIH07XG5cbiAgVHJhbnNsYXRvci5wcm90b3R5cGUuZXh0cmFjdEZyb21LZXkgPSBmdW5jdGlvbiBleHRyYWN0RnJvbUtleShrZXksIG9wdGlvbnMpIHtcbiAgICB2YXIgbnNTZXBhcmF0b3IgPSBvcHRpb25zLm5zU2VwYXJhdG9yIHx8IHRoaXMub3B0aW9ucy5uc1NlcGFyYXRvcjtcbiAgICBpZiAobnNTZXBhcmF0b3IgPT09IHVuZGVmaW5lZCkgbnNTZXBhcmF0b3IgPSAnOic7XG5cbiAgICB2YXIga2V5U2VwYXJhdG9yID0gb3B0aW9ucy5rZXlTZXBhcmF0b3IgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMua2V5U2VwYXJhdG9yIDogdGhpcy5vcHRpb25zLmtleVNlcGFyYXRvcjtcblxuICAgIHZhciBuYW1lc3BhY2VzID0gb3B0aW9ucy5ucyB8fCB0aGlzLm9wdGlvbnMuZGVmYXVsdE5TO1xuICAgIGlmIChuc1NlcGFyYXRvciAmJiBrZXkuaW5kZXhPZihuc1NlcGFyYXRvcikgPiAtMSkge1xuICAgICAgdmFyIHBhcnRzID0ga2V5LnNwbGl0KG5zU2VwYXJhdG9yKTtcbiAgICAgIGlmIChuc1NlcGFyYXRvciAhPT0ga2V5U2VwYXJhdG9yIHx8IG5zU2VwYXJhdG9yID09PSBrZXlTZXBhcmF0b3IgJiYgdGhpcy5vcHRpb25zLm5zLmluZGV4T2YocGFydHNbMF0pID4gLTEpIG5hbWVzcGFjZXMgPSBwYXJ0cy5zaGlmdCgpO1xuICAgICAga2V5ID0gcGFydHMuam9pbihrZXlTZXBhcmF0b3IpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG5hbWVzcGFjZXMgPT09ICdzdHJpbmcnKSBuYW1lc3BhY2VzID0gW25hbWVzcGFjZXNdO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGtleToga2V5LFxuICAgICAgbmFtZXNwYWNlczogbmFtZXNwYWNlc1xuICAgIH07XG4gIH07XG5cbiAgVHJhbnNsYXRvci5wcm90b3R5cGUudHJhbnNsYXRlID0gZnVuY3Rpb24gdHJhbnNsYXRlKGtleXMsIG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIGlmICgodHlwZW9mIG9wdGlvbnMgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKG9wdGlvbnMpKSAhPT0gJ29iamVjdCcgJiYgdGhpcy5vcHRpb25zLm92ZXJsb2FkVHJhbnNsYXRpb25PcHRpb25IYW5kbGVyKSB7XG4gICAgICAvKiBlc2xpbnQgcHJlZmVyLXJlc3QtcGFyYW1zOiAwICovXG4gICAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zLm92ZXJsb2FkVHJhbnNsYXRpb25PcHRpb25IYW5kbGVyKGFyZ3VtZW50cyk7XG4gICAgfVxuICAgIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9O1xuXG4gICAgLy8gbm9uIHZhbGlkIGtleXMgaGFuZGxpbmdcbiAgICBpZiAoa2V5cyA9PT0gdW5kZWZpbmVkIHx8IGtleXMgPT09IG51bGwgfHwga2V5cyA9PT0gJycpIHJldHVybiAnJztcbiAgICBpZiAodHlwZW9mIGtleXMgPT09ICdudW1iZXInKSBrZXlzID0gU3RyaW5nKGtleXMpO1xuICAgIGlmICh0eXBlb2Yga2V5cyA9PT0gJ3N0cmluZycpIGtleXMgPSBba2V5c107XG5cbiAgICAvLyBzZXBhcmF0b3JzXG4gICAgdmFyIGtleVNlcGFyYXRvciA9IG9wdGlvbnMua2V5U2VwYXJhdG9yICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmtleVNlcGFyYXRvciA6IHRoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3I7XG5cbiAgICAvLyBnZXQgbmFtZXNwYWNlKHMpXG5cbiAgICB2YXIgX2V4dHJhY3RGcm9tS2V5ID0gdGhpcy5leHRyYWN0RnJvbUtleShrZXlzW2tleXMubGVuZ3RoIC0gMV0sIG9wdGlvbnMpLFxuICAgICAgICBrZXkgPSBfZXh0cmFjdEZyb21LZXkua2V5LFxuICAgICAgICBuYW1lc3BhY2VzID0gX2V4dHJhY3RGcm9tS2V5Lm5hbWVzcGFjZXM7XG5cbiAgICB2YXIgbmFtZXNwYWNlID0gbmFtZXNwYWNlc1tuYW1lc3BhY2VzLmxlbmd0aCAtIDFdO1xuXG4gICAgLy8gcmV0dXJuIGtleSBvbiBDSU1vZGVcbiAgICB2YXIgbG5nID0gb3B0aW9ucy5sbmcgfHwgdGhpcy5sYW5ndWFnZTtcbiAgICB2YXIgYXBwZW5kTmFtZXNwYWNlVG9DSU1vZGUgPSBvcHRpb25zLmFwcGVuZE5hbWVzcGFjZVRvQ0lNb2RlIHx8IHRoaXMub3B0aW9ucy5hcHBlbmROYW1lc3BhY2VUb0NJTW9kZTtcbiAgICBpZiAobG5nICYmIGxuZy50b0xvd2VyQ2FzZSgpID09PSAnY2ltb2RlJykge1xuICAgICAgaWYgKGFwcGVuZE5hbWVzcGFjZVRvQ0lNb2RlKSB7XG4gICAgICAgIHZhciBuc1NlcGFyYXRvciA9IG9wdGlvbnMubnNTZXBhcmF0b3IgfHwgdGhpcy5vcHRpb25zLm5zU2VwYXJhdG9yO1xuICAgICAgICByZXR1cm4gbmFtZXNwYWNlICsgbnNTZXBhcmF0b3IgKyBrZXk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuXG4gICAgLy8gcmVzb2x2ZSBmcm9tIHN0b3JlXG4gICAgdmFyIHJlc29sdmVkID0gdGhpcy5yZXNvbHZlKGtleXMsIG9wdGlvbnMpO1xuICAgIHZhciByZXMgPSByZXNvbHZlZCAmJiByZXNvbHZlZC5yZXM7XG4gICAgdmFyIHJlc1VzZWRLZXkgPSByZXNvbHZlZCAmJiByZXNvbHZlZC51c2VkS2V5IHx8IGtleTtcblxuICAgIHZhciByZXNUeXBlID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5hcHBseShyZXMpO1xuICAgIHZhciBub09iamVjdCA9IFsnW29iamVjdCBOdW1iZXJdJywgJ1tvYmplY3QgRnVuY3Rpb25dJywgJ1tvYmplY3QgUmVnRXhwXSddO1xuICAgIHZhciBqb2luQXJyYXlzID0gb3B0aW9ucy5qb2luQXJyYXlzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmpvaW5BcnJheXMgOiB0aGlzLm9wdGlvbnMuam9pbkFycmF5cztcblxuICAgIC8vIG9iamVjdFxuICAgIHZhciBoYW5kbGVBc09iamVjdEluSTE4bkZvcm1hdCA9ICF0aGlzLmkxOG5Gb3JtYXQgfHwgdGhpcy5pMThuRm9ybWF0LmhhbmRsZUFzT2JqZWN0O1xuICAgIHZhciBoYW5kbGVBc09iamVjdCA9IHR5cGVvZiByZXMgIT09ICdzdHJpbmcnICYmIHR5cGVvZiByZXMgIT09ICdib29sZWFuJyAmJiB0eXBlb2YgcmVzICE9PSAnbnVtYmVyJztcbiAgICBpZiAoaGFuZGxlQXNPYmplY3RJbkkxOG5Gb3JtYXQgJiYgcmVzICYmIGhhbmRsZUFzT2JqZWN0ICYmIG5vT2JqZWN0LmluZGV4T2YocmVzVHlwZSkgPCAwICYmICEoam9pbkFycmF5cyAmJiByZXNUeXBlID09PSAnW29iamVjdCBBcnJheV0nKSkge1xuICAgICAgaWYgKCFvcHRpb25zLnJldHVybk9iamVjdHMgJiYgIXRoaXMub3B0aW9ucy5yZXR1cm5PYmplY3RzKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ2FjY2Vzc2luZyBhbiBvYmplY3QgLSBidXQgcmV0dXJuT2JqZWN0cyBvcHRpb25zIGlzIG5vdCBlbmFibGVkIScpO1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnJldHVybmVkT2JqZWN0SGFuZGxlciA/IHRoaXMub3B0aW9ucy5yZXR1cm5lZE9iamVjdEhhbmRsZXIocmVzVXNlZEtleSwgcmVzLCBvcHRpb25zKSA6ICdrZXkgXFwnJyArIGtleSArICcgKCcgKyB0aGlzLmxhbmd1YWdlICsgJylcXCcgcmV0dXJuZWQgYW4gb2JqZWN0IGluc3RlYWQgb2Ygc3RyaW5nLic7XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIHdlIGdvdCBhIHNlcGFyYXRvciB3ZSBsb29wIG92ZXIgY2hpbGRyZW4gLSBlbHNlIHdlIGp1c3QgcmV0dXJuIG9iamVjdCBhcyBpc1xuICAgICAgLy8gYXMgaGF2aW5nIGl0IHNldCB0byBmYWxzZSBtZWFucyBubyBoaWVyYXJjaHkgc28gbm8gbG9va3VwIGZvciBuZXN0ZWQgdmFsdWVzXG4gICAgICBpZiAoa2V5U2VwYXJhdG9yKSB7XG4gICAgICAgIHZhciBjb3B5ID0gcmVzVHlwZSA9PT0gJ1tvYmplY3QgQXJyYXldJyA/IFtdIDoge307IC8vIGFwcGx5IGNoaWxkIHRyYW5zbGF0aW9uIG9uIGEgY29weVxuXG4gICAgICAgIC8qIGVzbGludCBuby1yZXN0cmljdGVkLXN5bnRheDogMCAqL1xuICAgICAgICBmb3IgKHZhciBtIGluIHJlcykge1xuICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVzLCBtKSkge1xuICAgICAgICAgICAgdmFyIGRlZXBLZXkgPSAnJyArIHJlc1VzZWRLZXkgKyBrZXlTZXBhcmF0b3IgKyBtO1xuICAgICAgICAgICAgY29weVttXSA9IHRoaXMudHJhbnNsYXRlKGRlZXBLZXksIF9leHRlbmRzKHt9LCBvcHRpb25zLCB7IGpvaW5BcnJheXM6IGZhbHNlLCBuczogbmFtZXNwYWNlcyB9KSk7XG4gICAgICAgICAgICBpZiAoY29weVttXSA9PT0gZGVlcEtleSkgY29weVttXSA9IHJlc1ttXTsgLy8gaWYgbm90aGluZyBmb3VuZCB1c2Ugb3JnaW5hbCB2YWx1ZSBhcyBmYWxsYmFja1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXMgPSBjb3B5O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaGFuZGxlQXNPYmplY3RJbkkxOG5Gb3JtYXQgJiYgam9pbkFycmF5cyAmJiByZXNUeXBlID09PSAnW29iamVjdCBBcnJheV0nKSB7XG4gICAgICAvLyBhcnJheSBzcGVjaWFsIHRyZWF0bWVudFxuICAgICAgcmVzID0gcmVzLmpvaW4oam9pbkFycmF5cyk7XG4gICAgICBpZiAocmVzKSByZXMgPSB0aGlzLmV4dGVuZFRyYW5zbGF0aW9uKHJlcywga2V5cywgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHN0cmluZywgZW1wdHkgb3IgbnVsbFxuICAgICAgdmFyIHVzZWREZWZhdWx0ID0gZmFsc2U7XG4gICAgICB2YXIgdXNlZEtleSA9IGZhbHNlO1xuXG4gICAgICAvLyBmYWxsYmFjayB2YWx1ZVxuICAgICAgaWYgKCF0aGlzLmlzVmFsaWRMb29rdXAocmVzKSAmJiBvcHRpb25zLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHVzZWREZWZhdWx0ID0gdHJ1ZTtcblxuICAgICAgICBpZiAob3B0aW9ucy5jb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdmFyIHN1ZmZpeCA9IHRoaXMucGx1cmFsUmVzb2x2ZXIuZ2V0U3VmZml4KGxuZywgb3B0aW9ucy5jb3VudCk7XG4gICAgICAgICAgcmVzID0gb3B0aW9uc1snZGVmYXVsdFZhbHVlJyArIHN1ZmZpeF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyZXMpIHJlcyA9IG9wdGlvbnMuZGVmYXVsdFZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmlzVmFsaWRMb29rdXAocmVzKSkge1xuICAgICAgICB1c2VkS2V5ID0gdHJ1ZTtcbiAgICAgICAgcmVzID0ga2V5O1xuICAgICAgfVxuXG4gICAgICAvLyBzYXZlIG1pc3NpbmdcbiAgICAgIHZhciB1cGRhdGVNaXNzaW5nID0gb3B0aW9ucy5kZWZhdWx0VmFsdWUgJiYgb3B0aW9ucy5kZWZhdWx0VmFsdWUgIT09IHJlcyAmJiB0aGlzLm9wdGlvbnMudXBkYXRlTWlzc2luZztcbiAgICAgIGlmICh1c2VkS2V5IHx8IHVzZWREZWZhdWx0IHx8IHVwZGF0ZU1pc3NpbmcpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIubG9nKHVwZGF0ZU1pc3NpbmcgPyAndXBkYXRlS2V5JyA6ICdtaXNzaW5nS2V5JywgbG5nLCBuYW1lc3BhY2UsIGtleSwgdXBkYXRlTWlzc2luZyA/IG9wdGlvbnMuZGVmYXVsdFZhbHVlIDogcmVzKTtcblxuICAgICAgICB2YXIgbG5ncyA9IFtdO1xuICAgICAgICB2YXIgZmFsbGJhY2tMbmdzID0gdGhpcy5sYW5ndWFnZVV0aWxzLmdldEZhbGxiYWNrQ29kZXModGhpcy5vcHRpb25zLmZhbGxiYWNrTG5nLCBvcHRpb25zLmxuZyB8fCB0aGlzLmxhbmd1YWdlKTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zYXZlTWlzc2luZ1RvID09PSAnZmFsbGJhY2snICYmIGZhbGxiYWNrTG5ncyAmJiBmYWxsYmFja0xuZ3NbMF0pIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZhbGxiYWNrTG5ncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbG5ncy5wdXNoKGZhbGxiYWNrTG5nc1tpXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5zYXZlTWlzc2luZ1RvID09PSAnYWxsJykge1xuICAgICAgICAgIGxuZ3MgPSB0aGlzLmxhbmd1YWdlVXRpbHMudG9SZXNvbHZlSGllcmFyY2h5KG9wdGlvbnMubG5nIHx8IHRoaXMubGFuZ3VhZ2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxuZ3MucHVzaChvcHRpb25zLmxuZyB8fCB0aGlzLmxhbmd1YWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzZW5kID0gZnVuY3Rpb24gc2VuZChsLCBrKSB7XG4gICAgICAgICAgaWYgKF90aGlzMi5vcHRpb25zLm1pc3NpbmdLZXlIYW5kbGVyKSB7XG4gICAgICAgICAgICBfdGhpczIub3B0aW9ucy5taXNzaW5nS2V5SGFuZGxlcihsLCBuYW1lc3BhY2UsIGssIHVwZGF0ZU1pc3NpbmcgPyBvcHRpb25zLmRlZmF1bHRWYWx1ZSA6IHJlcywgdXBkYXRlTWlzc2luZywgb3B0aW9ucyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChfdGhpczIuYmFja2VuZENvbm5lY3RvciAmJiBfdGhpczIuYmFja2VuZENvbm5lY3Rvci5zYXZlTWlzc2luZykge1xuICAgICAgICAgICAgX3RoaXMyLmJhY2tlbmRDb25uZWN0b3Iuc2F2ZU1pc3NpbmcobCwgbmFtZXNwYWNlLCBrLCB1cGRhdGVNaXNzaW5nID8gb3B0aW9ucy5kZWZhdWx0VmFsdWUgOiByZXMsIHVwZGF0ZU1pc3NpbmcsIG9wdGlvbnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfdGhpczIuZW1pdCgnbWlzc2luZ0tleScsIGwsIG5hbWVzcGFjZSwgaywgcmVzKTtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNhdmVNaXNzaW5nKSB7XG4gICAgICAgICAgdmFyIG5lZWRzUGx1cmFsSGFuZGxpbmcgPSBvcHRpb25zLmNvdW50ICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9wdGlvbnMuY291bnQgIT09ICdzdHJpbmcnO1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2F2ZU1pc3NpbmdQbHVyYWxzICYmIG5lZWRzUGx1cmFsSGFuZGxpbmcpIHtcbiAgICAgICAgICAgIGxuZ3MuZm9yRWFjaChmdW5jdGlvbiAobCkge1xuICAgICAgICAgICAgICB2YXIgcGx1cmFscyA9IF90aGlzMi5wbHVyYWxSZXNvbHZlci5nZXRQbHVyYWxGb3Jtc09mS2V5KGwsIGtleSk7XG5cbiAgICAgICAgICAgICAgcGx1cmFscy5mb3JFYWNoKGZ1bmN0aW9uIChwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbmQoW2xdLCBwKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VuZChsbmdzLCBrZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBleHRlbmRcbiAgICAgIHJlcyA9IHRoaXMuZXh0ZW5kVHJhbnNsYXRpb24ocmVzLCBrZXlzLCBvcHRpb25zLCByZXNvbHZlZCk7XG5cbiAgICAgIC8vIGFwcGVuZCBuYW1lc3BhY2UgaWYgc3RpbGwga2V5XG4gICAgICBpZiAodXNlZEtleSAmJiByZXMgPT09IGtleSAmJiB0aGlzLm9wdGlvbnMuYXBwZW5kTmFtZXNwYWNlVG9NaXNzaW5nS2V5KSByZXMgPSBuYW1lc3BhY2UgKyAnOicgKyBrZXk7XG5cbiAgICAgIC8vIHBhcnNlTWlzc2luZ0tleUhhbmRsZXJcbiAgICAgIGlmICh1c2VkS2V5ICYmIHRoaXMub3B0aW9ucy5wYXJzZU1pc3NpbmdLZXlIYW5kbGVyKSByZXMgPSB0aGlzLm9wdGlvbnMucGFyc2VNaXNzaW5nS2V5SGFuZGxlcihyZXMpO1xuICAgIH1cblxuICAgIC8vIHJldHVyblxuICAgIHJldHVybiByZXM7XG4gIH07XG5cbiAgVHJhbnNsYXRvci5wcm90b3R5cGUuZXh0ZW5kVHJhbnNsYXRpb24gPSBmdW5jdGlvbiBleHRlbmRUcmFuc2xhdGlvbihyZXMsIGtleSwgb3B0aW9ucywgcmVzb2x2ZWQpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIGlmICh0aGlzLmkxOG5Gb3JtYXQgJiYgdGhpcy5pMThuRm9ybWF0LnBhcnNlKSB7XG4gICAgICByZXMgPSB0aGlzLmkxOG5Gb3JtYXQucGFyc2UocmVzLCBvcHRpb25zLCByZXNvbHZlZC51c2VkTG5nLCByZXNvbHZlZC51c2VkTlMsIHJlc29sdmVkLnVzZWRLZXksIHsgcmVzb2x2ZWQ6IHJlc29sdmVkIH0pO1xuICAgIH0gZWxzZSBpZiAoIW9wdGlvbnMuc2tpcEludGVycG9sYXRpb24pIHtcbiAgICAgIC8vIGkxOG5leHQucGFyc2luZ1xuICAgICAgaWYgKG9wdGlvbnMuaW50ZXJwb2xhdGlvbikgdGhpcy5pbnRlcnBvbGF0b3IuaW5pdChfZXh0ZW5kcyh7fSwgb3B0aW9ucywgeyBpbnRlcnBvbGF0aW9uOiBfZXh0ZW5kcyh7fSwgdGhpcy5vcHRpb25zLmludGVycG9sYXRpb24sIG9wdGlvbnMuaW50ZXJwb2xhdGlvbikgfSkpO1xuXG4gICAgICAvLyBpbnRlcnBvbGF0ZVxuICAgICAgdmFyIGRhdGEgPSBvcHRpb25zLnJlcGxhY2UgJiYgdHlwZW9mIG9wdGlvbnMucmVwbGFjZSAhPT0gJ3N0cmluZycgPyBvcHRpb25zLnJlcGxhY2UgOiBvcHRpb25zO1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmRlZmF1bHRWYXJpYWJsZXMpIGRhdGEgPSBfZXh0ZW5kcyh7fSwgdGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uZGVmYXVsdFZhcmlhYmxlcywgZGF0YSk7XG4gICAgICByZXMgPSB0aGlzLmludGVycG9sYXRvci5pbnRlcnBvbGF0ZShyZXMsIGRhdGEsIG9wdGlvbnMubG5nIHx8IHRoaXMubGFuZ3VhZ2UsIG9wdGlvbnMpO1xuXG4gICAgICAvLyBuZXN0aW5nXG4gICAgICBpZiAob3B0aW9ucy5uZXN0ICE9PSBmYWxzZSkgcmVzID0gdGhpcy5pbnRlcnBvbGF0b3IubmVzdChyZXMsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzMy50cmFuc2xhdGUuYXBwbHkoX3RoaXMzLCBhcmd1bWVudHMpO1xuICAgICAgfSwgb3B0aW9ucyk7XG5cbiAgICAgIGlmIChvcHRpb25zLmludGVycG9sYXRpb24pIHRoaXMuaW50ZXJwb2xhdG9yLnJlc2V0KCk7XG4gICAgfVxuXG4gICAgLy8gcG9zdCBwcm9jZXNzXG4gICAgdmFyIHBvc3RQcm9jZXNzID0gb3B0aW9ucy5wb3N0UHJvY2VzcyB8fCB0aGlzLm9wdGlvbnMucG9zdFByb2Nlc3M7XG4gICAgdmFyIHBvc3RQcm9jZXNzb3JOYW1lcyA9IHR5cGVvZiBwb3N0UHJvY2VzcyA9PT0gJ3N0cmluZycgPyBbcG9zdFByb2Nlc3NdIDogcG9zdFByb2Nlc3M7XG5cbiAgICBpZiAocmVzICE9PSB1bmRlZmluZWQgJiYgcmVzICE9PSBudWxsICYmIHBvc3RQcm9jZXNzb3JOYW1lcyAmJiBwb3N0UHJvY2Vzc29yTmFtZXMubGVuZ3RoICYmIG9wdGlvbnMuYXBwbHlQb3N0UHJvY2Vzc29yICE9PSBmYWxzZSkge1xuICAgICAgcmVzID0gcG9zdFByb2Nlc3Nvci5oYW5kbGUocG9zdFByb2Nlc3Nvck5hbWVzLCByZXMsIGtleSwgb3B0aW9ucywgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICBUcmFuc2xhdG9yLnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24gcmVzb2x2ZShrZXlzKSB7XG4gICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgICB2YXIgZm91bmQgPSB2b2lkIDA7XG4gICAgdmFyIHVzZWRLZXkgPSB2b2lkIDA7XG4gICAgdmFyIHVzZWRMbmcgPSB2b2lkIDA7XG4gICAgdmFyIHVzZWROUyA9IHZvaWQgMDtcblxuICAgIGlmICh0eXBlb2Yga2V5cyA9PT0gJ3N0cmluZycpIGtleXMgPSBba2V5c107XG5cbiAgICAvLyBmb3JFYWNoIHBvc3NpYmxlIGtleVxuICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgICAgaWYgKF90aGlzNC5pc1ZhbGlkTG9va3VwKGZvdW5kKSkgcmV0dXJuO1xuICAgICAgdmFyIGV4dHJhY3RlZCA9IF90aGlzNC5leHRyYWN0RnJvbUtleShrLCBvcHRpb25zKTtcbiAgICAgIHZhciBrZXkgPSBleHRyYWN0ZWQua2V5O1xuICAgICAgdXNlZEtleSA9IGtleTtcbiAgICAgIHZhciBuYW1lc3BhY2VzID0gZXh0cmFjdGVkLm5hbWVzcGFjZXM7XG4gICAgICBpZiAoX3RoaXM0Lm9wdGlvbnMuZmFsbGJhY2tOUykgbmFtZXNwYWNlcyA9IG5hbWVzcGFjZXMuY29uY2F0KF90aGlzNC5vcHRpb25zLmZhbGxiYWNrTlMpO1xuXG4gICAgICB2YXIgbmVlZHNQbHVyYWxIYW5kbGluZyA9IG9wdGlvbnMuY291bnQgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0aW9ucy5jb3VudCAhPT0gJ3N0cmluZyc7XG4gICAgICB2YXIgbmVlZHNDb250ZXh0SGFuZGxpbmcgPSBvcHRpb25zLmNvbnRleHQgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0aW9ucy5jb250ZXh0ID09PSAnc3RyaW5nJyAmJiBvcHRpb25zLmNvbnRleHQgIT09ICcnO1xuXG4gICAgICB2YXIgY29kZXMgPSBvcHRpb25zLmxuZ3MgPyBvcHRpb25zLmxuZ3MgOiBfdGhpczQubGFuZ3VhZ2VVdGlscy50b1Jlc29sdmVIaWVyYXJjaHkob3B0aW9ucy5sbmcgfHwgX3RoaXM0Lmxhbmd1YWdlLCBvcHRpb25zLmZhbGxiYWNrTG5nKTtcblxuICAgICAgbmFtZXNwYWNlcy5mb3JFYWNoKGZ1bmN0aW9uIChucykge1xuICAgICAgICBpZiAoX3RoaXM0LmlzVmFsaWRMb29rdXAoZm91bmQpKSByZXR1cm47XG4gICAgICAgIHVzZWROUyA9IG5zO1xuXG4gICAgICAgIGNvZGVzLmZvckVhY2goZnVuY3Rpb24gKGNvZGUpIHtcbiAgICAgICAgICBpZiAoX3RoaXM0LmlzVmFsaWRMb29rdXAoZm91bmQpKSByZXR1cm47XG4gICAgICAgICAgdXNlZExuZyA9IGNvZGU7XG5cbiAgICAgICAgICB2YXIgZmluYWxLZXkgPSBrZXk7XG4gICAgICAgICAgdmFyIGZpbmFsS2V5cyA9IFtmaW5hbEtleV07XG5cbiAgICAgICAgICBpZiAoX3RoaXM0LmkxOG5Gb3JtYXQgJiYgX3RoaXM0LmkxOG5Gb3JtYXQuYWRkTG9va3VwS2V5cykge1xuICAgICAgICAgICAgX3RoaXM0LmkxOG5Gb3JtYXQuYWRkTG9va3VwS2V5cyhmaW5hbEtleXMsIGtleSwgY29kZSwgbnMsIG9wdGlvbnMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcGx1cmFsU3VmZml4ID0gdm9pZCAwO1xuICAgICAgICAgICAgaWYgKG5lZWRzUGx1cmFsSGFuZGxpbmcpIHBsdXJhbFN1ZmZpeCA9IF90aGlzNC5wbHVyYWxSZXNvbHZlci5nZXRTdWZmaXgoY29kZSwgb3B0aW9ucy5jb3VudCk7XG5cbiAgICAgICAgICAgIC8vIGZhbGxiYWNrIGZvciBwbHVyYWwgaWYgY29udGV4dCBub3QgZm91bmRcbiAgICAgICAgICAgIGlmIChuZWVkc1BsdXJhbEhhbmRsaW5nICYmIG5lZWRzQ29udGV4dEhhbmRsaW5nKSBmaW5hbEtleXMucHVzaChmaW5hbEtleSArIHBsdXJhbFN1ZmZpeCk7XG5cbiAgICAgICAgICAgIC8vIGdldCBrZXkgZm9yIGNvbnRleHQgaWYgbmVlZGVkXG4gICAgICAgICAgICBpZiAobmVlZHNDb250ZXh0SGFuZGxpbmcpIGZpbmFsS2V5cy5wdXNoKGZpbmFsS2V5ICs9ICcnICsgX3RoaXM0Lm9wdGlvbnMuY29udGV4dFNlcGFyYXRvciArIG9wdGlvbnMuY29udGV4dCk7XG5cbiAgICAgICAgICAgIC8vIGdldCBrZXkgZm9yIHBsdXJhbCBpZiBuZWVkZWRcbiAgICAgICAgICAgIGlmIChuZWVkc1BsdXJhbEhhbmRsaW5nKSBmaW5hbEtleXMucHVzaChmaW5hbEtleSArPSBwbHVyYWxTdWZmaXgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGl0ZXJhdGUgb3ZlciBmaW5hbEtleXMgc3RhcnRpbmcgd2l0aCBtb3N0IHNwZWNpZmljIHBsdXJhbGtleSAoLT4gY29udGV4dGtleSBvbmx5KSAtPiBzaW5ndWxhcmtleSBvbmx5XG4gICAgICAgICAgdmFyIHBvc3NpYmxlS2V5ID0gdm9pZCAwO1xuICAgICAgICAgIC8qIGVzbGludCBuby1jb25kLWFzc2lnbjogMCAqL1xuICAgICAgICAgIHdoaWxlIChwb3NzaWJsZUtleSA9IGZpbmFsS2V5cy5wb3AoKSkge1xuICAgICAgICAgICAgaWYgKCFfdGhpczQuaXNWYWxpZExvb2t1cChmb3VuZCkpIHtcbiAgICAgICAgICAgICAgZm91bmQgPSBfdGhpczQuZ2V0UmVzb3VyY2UoY29kZSwgbnMsIHBvc3NpYmxlS2V5LCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4geyByZXM6IGZvdW5kLCB1c2VkS2V5OiB1c2VkS2V5LCB1c2VkTG5nOiB1c2VkTG5nLCB1c2VkTlM6IHVzZWROUyB9O1xuICB9O1xuXG4gIFRyYW5zbGF0b3IucHJvdG90eXBlLmlzVmFsaWRMb29rdXAgPSBmdW5jdGlvbiBpc1ZhbGlkTG9va3VwKHJlcykge1xuICAgIHJldHVybiByZXMgIT09IHVuZGVmaW5lZCAmJiAhKCF0aGlzLm9wdGlvbnMucmV0dXJuTnVsbCAmJiByZXMgPT09IG51bGwpICYmICEoIXRoaXMub3B0aW9ucy5yZXR1cm5FbXB0eVN0cmluZyAmJiByZXMgPT09ICcnKTtcbiAgfTtcblxuICBUcmFuc2xhdG9yLnByb3RvdHlwZS5nZXRSZXNvdXJjZSA9IGZ1bmN0aW9uIGdldFJlc291cmNlKGNvZGUsIG5zLCBrZXkpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDoge307XG5cbiAgICBpZiAodGhpcy5pMThuRm9ybWF0ICYmIHRoaXMuaTE4bkZvcm1hdC5nZXRSZXNvdXJjZSkgcmV0dXJuIHRoaXMuaTE4bkZvcm1hdC5nZXRSZXNvdXJjZShjb2RlLCBucywga2V5LCBvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZVN0b3JlLmdldFJlc291cmNlKGNvZGUsIG5zLCBrZXksIG9wdGlvbnMpO1xuICB9O1xuXG4gIHJldHVybiBUcmFuc2xhdG9yO1xufShFdmVudEVtaXR0ZXIpO1xuXG5leHBvcnQgZGVmYXVsdCBUcmFuc2xhdG9yOyIsImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmltcG9ydCBiYXNlTG9nZ2VyIGZyb20gJy4vbG9nZ2VyLmpzJztcblxuZnVuY3Rpb24gY2FwaXRhbGl6ZShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0cmluZy5zbGljZSgxKTtcbn1cblxudmFyIExhbmd1YWdlVXRpbCA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTGFuZ3VhZ2VVdGlsKG9wdGlvbnMpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTGFuZ3VhZ2VVdGlsKTtcblxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICB0aGlzLndoaXRlbGlzdCA9IHRoaXMub3B0aW9ucy53aGl0ZWxpc3QgfHwgZmFsc2U7XG4gICAgdGhpcy5sb2dnZXIgPSBiYXNlTG9nZ2VyLmNyZWF0ZSgnbGFuZ3VhZ2VVdGlscycpO1xuICB9XG5cbiAgTGFuZ3VhZ2VVdGlsLnByb3RvdHlwZS5nZXRTY3JpcHRQYXJ0RnJvbUNvZGUgPSBmdW5jdGlvbiBnZXRTY3JpcHRQYXJ0RnJvbUNvZGUoY29kZSkge1xuICAgIGlmICghY29kZSB8fCBjb2RlLmluZGV4T2YoJy0nKSA8IDApIHJldHVybiBudWxsO1xuXG4gICAgdmFyIHAgPSBjb2RlLnNwbGl0KCctJyk7XG4gICAgaWYgKHAubGVuZ3RoID09PSAyKSByZXR1cm4gbnVsbDtcbiAgICBwLnBvcCgpO1xuICAgIHJldHVybiB0aGlzLmZvcm1hdExhbmd1YWdlQ29kZShwLmpvaW4oJy0nKSk7XG4gIH07XG5cbiAgTGFuZ3VhZ2VVdGlsLnByb3RvdHlwZS5nZXRMYW5ndWFnZVBhcnRGcm9tQ29kZSA9IGZ1bmN0aW9uIGdldExhbmd1YWdlUGFydEZyb21Db2RlKGNvZGUpIHtcbiAgICBpZiAoIWNvZGUgfHwgY29kZS5pbmRleE9mKCctJykgPCAwKSByZXR1cm4gY29kZTtcblxuICAgIHZhciBwID0gY29kZS5zcGxpdCgnLScpO1xuICAgIHJldHVybiB0aGlzLmZvcm1hdExhbmd1YWdlQ29kZShwWzBdKTtcbiAgfTtcblxuICBMYW5ndWFnZVV0aWwucHJvdG90eXBlLmZvcm1hdExhbmd1YWdlQ29kZSA9IGZ1bmN0aW9uIGZvcm1hdExhbmd1YWdlQ29kZShjb2RlKSB7XG4gICAgLy8gaHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9sYW5ndWFnZS10YWdzL2xhbmd1YWdlLXRhZ3MueGh0bWxcbiAgICBpZiAodHlwZW9mIGNvZGUgPT09ICdzdHJpbmcnICYmIGNvZGUuaW5kZXhPZignLScpID4gLTEpIHtcbiAgICAgIHZhciBzcGVjaWFsQ2FzZXMgPSBbJ2hhbnMnLCAnaGFudCcsICdsYXRuJywgJ2N5cmwnLCAnY2FucycsICdtb25nJywgJ2FyYWInXTtcbiAgICAgIHZhciBwID0gY29kZS5zcGxpdCgnLScpO1xuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmxvd2VyQ2FzZUxuZykge1xuICAgICAgICBwID0gcC5tYXAoZnVuY3Rpb24gKHBhcnQpIHtcbiAgICAgICAgICByZXR1cm4gcGFydC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAocC5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgcFswXSA9IHBbMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcFsxXSA9IHBbMV0udG9VcHBlckNhc2UoKTtcblxuICAgICAgICBpZiAoc3BlY2lhbENhc2VzLmluZGV4T2YocFsxXS50b0xvd2VyQ2FzZSgpKSA+IC0xKSBwWzFdID0gY2FwaXRhbGl6ZShwWzFdLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgfSBlbHNlIGlmIChwLmxlbmd0aCA9PT0gMykge1xuICAgICAgICBwWzBdID0gcFswXS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgIC8vIGlmIGxlbmdodCAyIGd1ZXNzIGl0J3MgYSBjb3VudHJ5XG4gICAgICAgIGlmIChwWzFdLmxlbmd0aCA9PT0gMikgcFsxXSA9IHBbMV0udG9VcHBlckNhc2UoKTtcbiAgICAgICAgaWYgKHBbMF0gIT09ICdzZ24nICYmIHBbMl0ubGVuZ3RoID09PSAyKSBwWzJdID0gcFsyXS50b1VwcGVyQ2FzZSgpO1xuXG4gICAgICAgIGlmIChzcGVjaWFsQ2FzZXMuaW5kZXhPZihwWzFdLnRvTG93ZXJDYXNlKCkpID4gLTEpIHBbMV0gPSBjYXBpdGFsaXplKHBbMV0udG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIGlmIChzcGVjaWFsQ2FzZXMuaW5kZXhPZihwWzJdLnRvTG93ZXJDYXNlKCkpID4gLTEpIHBbMl0gPSBjYXBpdGFsaXplKHBbMl0udG9Mb3dlckNhc2UoKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwLmpvaW4oJy0nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmNsZWFuQ29kZSB8fCB0aGlzLm9wdGlvbnMubG93ZXJDYXNlTG5nID8gY29kZS50b0xvd2VyQ2FzZSgpIDogY29kZTtcbiAgfTtcblxuICBMYW5ndWFnZVV0aWwucHJvdG90eXBlLmlzV2hpdGVsaXN0ZWQgPSBmdW5jdGlvbiBpc1doaXRlbGlzdGVkKGNvZGUpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmxvYWQgPT09ICdsYW5ndWFnZU9ubHknIHx8IHRoaXMub3B0aW9ucy5ub25FeHBsaWNpdFdoaXRlbGlzdCkge1xuICAgICAgY29kZSA9IHRoaXMuZ2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGUoY29kZSk7XG4gICAgfVxuICAgIHJldHVybiAhdGhpcy53aGl0ZWxpc3QgfHwgIXRoaXMud2hpdGVsaXN0Lmxlbmd0aCB8fCB0aGlzLndoaXRlbGlzdC5pbmRleE9mKGNvZGUpID4gLTE7XG4gIH07XG5cbiAgTGFuZ3VhZ2VVdGlsLnByb3RvdHlwZS5nZXRGYWxsYmFja0NvZGVzID0gZnVuY3Rpb24gZ2V0RmFsbGJhY2tDb2RlcyhmYWxsYmFja3MsIGNvZGUpIHtcbiAgICBpZiAoIWZhbGxiYWNrcykgcmV0dXJuIFtdO1xuICAgIGlmICh0eXBlb2YgZmFsbGJhY2tzID09PSAnc3RyaW5nJykgZmFsbGJhY2tzID0gW2ZhbGxiYWNrc107XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuYXBwbHkoZmFsbGJhY2tzKSA9PT0gJ1tvYmplY3QgQXJyYXldJykgcmV0dXJuIGZhbGxiYWNrcztcblxuICAgIGlmICghY29kZSkgcmV0dXJuIGZhbGxiYWNrcy5kZWZhdWx0IHx8IFtdO1xuXG4gICAgLy8gYXN1bWUgd2UgaGF2ZSBhbiBvYmplY3QgZGVmaW5pbmcgZmFsbGJhY2tzXG4gICAgdmFyIGZvdW5kID0gZmFsbGJhY2tzW2NvZGVdO1xuICAgIGlmICghZm91bmQpIGZvdW5kID0gZmFsbGJhY2tzW3RoaXMuZ2V0U2NyaXB0UGFydEZyb21Db2RlKGNvZGUpXTtcbiAgICBpZiAoIWZvdW5kKSBmb3VuZCA9IGZhbGxiYWNrc1t0aGlzLmZvcm1hdExhbmd1YWdlQ29kZShjb2RlKV07XG4gICAgaWYgKCFmb3VuZCkgZm91bmQgPSBmYWxsYmFja3MuZGVmYXVsdDtcblxuICAgIHJldHVybiBmb3VuZCB8fCBbXTtcbiAgfTtcblxuICBMYW5ndWFnZVV0aWwucHJvdG90eXBlLnRvUmVzb2x2ZUhpZXJhcmNoeSA9IGZ1bmN0aW9uIHRvUmVzb2x2ZUhpZXJhcmNoeShjb2RlLCBmYWxsYmFja0NvZGUpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIGZhbGxiYWNrQ29kZXMgPSB0aGlzLmdldEZhbGxiYWNrQ29kZXMoZmFsbGJhY2tDb2RlIHx8IHRoaXMub3B0aW9ucy5mYWxsYmFja0xuZyB8fCBbXSwgY29kZSk7XG5cbiAgICB2YXIgY29kZXMgPSBbXTtcbiAgICB2YXIgYWRkQ29kZSA9IGZ1bmN0aW9uIGFkZENvZGUoYykge1xuICAgICAgaWYgKCFjKSByZXR1cm47XG4gICAgICBpZiAoX3RoaXMuaXNXaGl0ZWxpc3RlZChjKSkge1xuICAgICAgICBjb2Rlcy5wdXNoKGMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3RoaXMubG9nZ2VyLndhcm4oJ3JlamVjdGluZyBub24td2hpdGVsaXN0ZWQgbGFuZ3VhZ2UgY29kZTogJyArIGMpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAodHlwZW9mIGNvZGUgPT09ICdzdHJpbmcnICYmIGNvZGUuaW5kZXhPZignLScpID4gLTEpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubG9hZCAhPT0gJ2xhbmd1YWdlT25seScpIGFkZENvZGUodGhpcy5mb3JtYXRMYW5ndWFnZUNvZGUoY29kZSkpO1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5sb2FkICE9PSAnbGFuZ3VhZ2VPbmx5JyAmJiB0aGlzLm9wdGlvbnMubG9hZCAhPT0gJ2N1cnJlbnRPbmx5JykgYWRkQ29kZSh0aGlzLmdldFNjcmlwdFBhcnRGcm9tQ29kZShjb2RlKSk7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmxvYWQgIT09ICdjdXJyZW50T25seScpIGFkZENvZGUodGhpcy5nZXRMYW5ndWFnZVBhcnRGcm9tQ29kZShjb2RlKSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY29kZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGFkZENvZGUodGhpcy5mb3JtYXRMYW5ndWFnZUNvZGUoY29kZSkpO1xuICAgIH1cblxuICAgIGZhbGxiYWNrQ29kZXMuZm9yRWFjaChmdW5jdGlvbiAoZmMpIHtcbiAgICAgIGlmIChjb2Rlcy5pbmRleE9mKGZjKSA8IDApIGFkZENvZGUoX3RoaXMuZm9ybWF0TGFuZ3VhZ2VDb2RlKGZjKSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY29kZXM7XG4gIH07XG5cbiAgcmV0dXJuIExhbmd1YWdlVXRpbDtcbn0oKTtcblxuZXhwb3J0IGRlZmF1bHQgTGFuZ3VhZ2VVdGlsOyIsImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmltcG9ydCBiYXNlTG9nZ2VyIGZyb20gJy4vbG9nZ2VyLmpzJztcblxuLy8gZGVmaW5pdGlvbiBodHRwOi8vdHJhbnNsYXRlLnNvdXJjZWZvcmdlLm5ldC93aWtpL2wxMG4vcGx1cmFsZm9ybXNcbi8qIGVzbGludC1kaXNhYmxlICovXG52YXIgc2V0cyA9IFt7IGxuZ3M6IFsnYWNoJywgJ2FrJywgJ2FtJywgJ2FybicsICdicicsICdmaWwnLCAnZ3VuJywgJ2xuJywgJ21mZScsICdtZycsICdtaScsICdvYycsICdwdCcsICdwdC1CUicsICd0ZycsICd0aScsICd0cicsICd1eicsICd3YSddLCBucjogWzEsIDJdLCBmYzogMSB9LCB7IGxuZ3M6IFsnYWYnLCAnYW4nLCAnYXN0JywgJ2F6JywgJ2JnJywgJ2JuJywgJ2NhJywgJ2RhJywgJ2RlJywgJ2RldicsICdlbCcsICdlbicsICdlbycsICdlcycsICdldCcsICdldScsICdmaScsICdmbycsICdmdXInLCAnZnknLCAnZ2wnLCAnZ3UnLCAnaGEnLCAnaGUnLCAnaGknLCAnaHUnLCAnaHknLCAnaWEnLCAnaXQnLCAna24nLCAna3UnLCAnbGInLCAnbWFpJywgJ21sJywgJ21uJywgJ21yJywgJ25haCcsICduYXAnLCAnbmInLCAnbmUnLCAnbmwnLCAnbm4nLCAnbm8nLCAnbnNvJywgJ3BhJywgJ3BhcCcsICdwbXMnLCAncHMnLCAncHQtUFQnLCAncm0nLCAnc2NvJywgJ3NlJywgJ3NpJywgJ3NvJywgJ3NvbicsICdzcScsICdzdicsICdzdycsICd0YScsICd0ZScsICd0aycsICd1cicsICd5byddLCBucjogWzEsIDJdLCBmYzogMiB9LCB7IGxuZ3M6IFsnYXknLCAnYm8nLCAnY2dnJywgJ2ZhJywgJ2lkJywgJ2phJywgJ2pibycsICdrYScsICdraycsICdrbScsICdrbycsICdreScsICdsbycsICdtcycsICdzYWgnLCAnc3UnLCAndGgnLCAndHQnLCAndWcnLCAndmknLCAnd28nLCAnemgnXSwgbnI6IFsxXSwgZmM6IDMgfSwgeyBsbmdzOiBbJ2JlJywgJ2JzJywgJ2R6JywgJ2hyJywgJ3J1JywgJ3NyJywgJ3VrJ10sIG5yOiBbMSwgMiwgNV0sIGZjOiA0IH0sIHsgbG5nczogWydhciddLCBucjogWzAsIDEsIDIsIDMsIDExLCAxMDBdLCBmYzogNSB9LCB7IGxuZ3M6IFsnY3MnLCAnc2snXSwgbnI6IFsxLCAyLCA1XSwgZmM6IDYgfSwgeyBsbmdzOiBbJ2NzYicsICdwbCddLCBucjogWzEsIDIsIDVdLCBmYzogNyB9LCB7IGxuZ3M6IFsnY3knXSwgbnI6IFsxLCAyLCAzLCA4XSwgZmM6IDggfSwgeyBsbmdzOiBbJ2ZyJ10sIG5yOiBbMSwgMl0sIGZjOiA5IH0sIHsgbG5nczogWydnYSddLCBucjogWzEsIDIsIDMsIDcsIDExXSwgZmM6IDEwIH0sIHsgbG5nczogWydnZCddLCBucjogWzEsIDIsIDMsIDIwXSwgZmM6IDExIH0sIHsgbG5nczogWydpcyddLCBucjogWzEsIDJdLCBmYzogMTIgfSwgeyBsbmdzOiBbJ2p2J10sIG5yOiBbMCwgMV0sIGZjOiAxMyB9LCB7IGxuZ3M6IFsna3cnXSwgbnI6IFsxLCAyLCAzLCA0XSwgZmM6IDE0IH0sIHsgbG5nczogWydsdCddLCBucjogWzEsIDIsIDEwXSwgZmM6IDE1IH0sIHsgbG5nczogWydsdiddLCBucjogWzEsIDIsIDBdLCBmYzogMTYgfSwgeyBsbmdzOiBbJ21rJ10sIG5yOiBbMSwgMl0sIGZjOiAxNyB9LCB7IGxuZ3M6IFsnbW5rJ10sIG5yOiBbMCwgMSwgMl0sIGZjOiAxOCB9LCB7IGxuZ3M6IFsnbXQnXSwgbnI6IFsxLCAyLCAxMSwgMjBdLCBmYzogMTkgfSwgeyBsbmdzOiBbJ29yJ10sIG5yOiBbMiwgMV0sIGZjOiAyIH0sIHsgbG5nczogWydybyddLCBucjogWzEsIDIsIDIwXSwgZmM6IDIwIH0sIHsgbG5nczogWydzbCddLCBucjogWzUsIDEsIDIsIDNdLCBmYzogMjEgfSwgeyBsbmdzOiBbJ2hlJ10sIG5yOiBbMSwgMiwgMjAsIDIxXSwgZmM6IDIyIH1dO1xuXG52YXIgX3J1bGVzUGx1cmFsc1R5cGVzID0ge1xuICAxOiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gPiAxKTtcbiAgfSxcbiAgMjogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuICE9IDEpO1xuICB9LFxuICAzOiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gMDtcbiAgfSxcbiAgNDogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuICUgMTAgPT0gMSAmJiBuICUgMTAwICE9IDExID8gMCA6IG4gJSAxMCA+PSAyICYmIG4gJSAxMCA8PSA0ICYmIChuICUgMTAwIDwgMTAgfHwgbiAlIDEwMCA+PSAyMCkgPyAxIDogMik7XG4gIH0sXG4gIDU6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PT0gMCA/IDAgOiBuID09IDEgPyAxIDogbiA9PSAyID8gMiA6IG4gJSAxMDAgPj0gMyAmJiBuICUgMTAwIDw9IDEwID8gMyA6IG4gJSAxMDAgPj0gMTEgPyA0IDogNSk7XG4gIH0sXG4gIDY6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAxID8gMCA6IG4gPj0gMiAmJiBuIDw9IDQgPyAxIDogMik7XG4gIH0sXG4gIDc6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAxID8gMCA6IG4gJSAxMCA+PSAyICYmIG4gJSAxMCA8PSA0ICYmIChuICUgMTAwIDwgMTAgfHwgbiAlIDEwMCA+PSAyMCkgPyAxIDogMik7XG4gIH0sXG4gIDg6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAxID8gMCA6IG4gPT0gMiA/IDEgOiBuICE9IDggJiYgbiAhPSAxMSA/IDIgOiAzKTtcbiAgfSxcbiAgOTogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuID49IDIpO1xuICB9LFxuICAxMDogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuID09IDEgPyAwIDogbiA9PSAyID8gMSA6IG4gPCA3ID8gMiA6IG4gPCAxMSA/IDMgOiA0KTtcbiAgfSxcbiAgMTE6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAxIHx8IG4gPT0gMTEgPyAwIDogbiA9PSAyIHx8IG4gPT0gMTIgPyAxIDogbiA+IDIgJiYgbiA8IDIwID8gMiA6IDMpO1xuICB9LFxuICAxMjogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuICUgMTAgIT0gMSB8fCBuICUgMTAwID09IDExKTtcbiAgfSxcbiAgMTM6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiAhPT0gMCk7XG4gIH0sXG4gIDE0OiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gPT0gMSA/IDAgOiBuID09IDIgPyAxIDogbiA9PSAzID8gMiA6IDMpO1xuICB9LFxuICAxNTogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuICUgMTAgPT0gMSAmJiBuICUgMTAwICE9IDExID8gMCA6IG4gJSAxMCA+PSAyICYmIChuICUgMTAwIDwgMTAgfHwgbiAlIDEwMCA+PSAyMCkgPyAxIDogMik7XG4gIH0sXG4gIDE2OiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gJSAxMCA9PSAxICYmIG4gJSAxMDAgIT0gMTEgPyAwIDogbiAhPT0gMCA/IDEgOiAyKTtcbiAgfSxcbiAgMTc6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAxIHx8IG4gJSAxMCA9PSAxID8gMCA6IDEpO1xuICB9LFxuICAxODogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuID09IDAgPyAwIDogbiA9PSAxID8gMSA6IDIpO1xuICB9LFxuICAxOTogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuID09IDEgPyAwIDogbiA9PT0gMCB8fCBuICUgMTAwID4gMSAmJiBuICUgMTAwIDwgMTEgPyAxIDogbiAlIDEwMCA+IDEwICYmIG4gJSAxMDAgPCAyMCA/IDIgOiAzKTtcbiAgfSxcbiAgMjA6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAxID8gMCA6IG4gPT09IDAgfHwgbiAlIDEwMCA+IDAgJiYgbiAlIDEwMCA8IDIwID8gMSA6IDIpO1xuICB9LFxuICAyMTogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuICUgMTAwID09IDEgPyAxIDogbiAlIDEwMCA9PSAyID8gMiA6IG4gJSAxMDAgPT0gMyB8fCBuICUgMTAwID09IDQgPyAzIDogMCk7XG4gIH0sXG4gIDIyOiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gPT09IDEgPyAwIDogbiA9PT0gMiA/IDEgOiAobiA8IDAgfHwgbiA+IDEwKSAmJiBuICUgMTAgPT0gMCA/IDIgOiAzKTtcbiAgfVxufTtcbi8qIGVzbGludC1lbmFibGUgKi9cblxuZnVuY3Rpb24gY3JlYXRlUnVsZXMoKSB7XG4gIHZhciBydWxlcyA9IHt9O1xuICBzZXRzLmZvckVhY2goZnVuY3Rpb24gKHNldCkge1xuICAgIHNldC5sbmdzLmZvckVhY2goZnVuY3Rpb24gKGwpIHtcbiAgICAgIHJ1bGVzW2xdID0ge1xuICAgICAgICBudW1iZXJzOiBzZXQubnIsXG4gICAgICAgIHBsdXJhbHM6IF9ydWxlc1BsdXJhbHNUeXBlc1tzZXQuZmNdXG4gICAgICB9O1xuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIHJ1bGVzO1xufVxuXG52YXIgUGx1cmFsUmVzb2x2ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFBsdXJhbFJlc29sdmVyKGxhbmd1YWdlVXRpbHMpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUGx1cmFsUmVzb2x2ZXIpO1xuXG4gICAgdGhpcy5sYW5ndWFnZVV0aWxzID0gbGFuZ3VhZ2VVdGlscztcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgdGhpcy5sb2dnZXIgPSBiYXNlTG9nZ2VyLmNyZWF0ZSgncGx1cmFsUmVzb2x2ZXInKTtcblxuICAgIHRoaXMucnVsZXMgPSBjcmVhdGVSdWxlcygpO1xuICB9XG5cbiAgUGx1cmFsUmVzb2x2ZXIucHJvdG90eXBlLmFkZFJ1bGUgPSBmdW5jdGlvbiBhZGRSdWxlKGxuZywgb2JqKSB7XG4gICAgdGhpcy5ydWxlc1tsbmddID0gb2JqO1xuICB9O1xuXG4gIFBsdXJhbFJlc29sdmVyLnByb3RvdHlwZS5nZXRSdWxlID0gZnVuY3Rpb24gZ2V0UnVsZShjb2RlKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZXNbY29kZV0gfHwgdGhpcy5ydWxlc1t0aGlzLmxhbmd1YWdlVXRpbHMuZ2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGUoY29kZSldO1xuICB9O1xuXG4gIFBsdXJhbFJlc29sdmVyLnByb3RvdHlwZS5uZWVkc1BsdXJhbCA9IGZ1bmN0aW9uIG5lZWRzUGx1cmFsKGNvZGUpIHtcbiAgICB2YXIgcnVsZSA9IHRoaXMuZ2V0UnVsZShjb2RlKTtcblxuICAgIHJldHVybiBydWxlICYmIHJ1bGUubnVtYmVycy5sZW5ndGggPiAxO1xuICB9O1xuXG4gIFBsdXJhbFJlc29sdmVyLnByb3RvdHlwZS5nZXRQbHVyYWxGb3Jtc09mS2V5ID0gZnVuY3Rpb24gZ2V0UGx1cmFsRm9ybXNPZktleShjb2RlLCBrZXkpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIHJldCA9IFtdO1xuXG4gICAgdmFyIHJ1bGUgPSB0aGlzLmdldFJ1bGUoY29kZSk7XG5cbiAgICBpZiAoIXJ1bGUpIHJldHVybiByZXQ7XG5cbiAgICBydWxlLm51bWJlcnMuZm9yRWFjaChmdW5jdGlvbiAobikge1xuICAgICAgdmFyIHN1ZmZpeCA9IF90aGlzLmdldFN1ZmZpeChjb2RlLCBuKTtcbiAgICAgIHJldC5wdXNoKCcnICsga2V5ICsgc3VmZml4KTtcbiAgICB9KTtcblxuICAgIHJldHVybiByZXQ7XG4gIH07XG5cbiAgUGx1cmFsUmVzb2x2ZXIucHJvdG90eXBlLmdldFN1ZmZpeCA9IGZ1bmN0aW9uIGdldFN1ZmZpeChjb2RlLCBjb3VudCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgdmFyIHJ1bGUgPSB0aGlzLmdldFJ1bGUoY29kZSk7XG5cbiAgICBpZiAocnVsZSkge1xuICAgICAgLy8gaWYgKHJ1bGUubnVtYmVycy5sZW5ndGggPT09IDEpIHJldHVybiAnJzsgLy8gb25seSBzaW5ndWxhclxuXG4gICAgICB2YXIgaWR4ID0gcnVsZS5ub0FicyA/IHJ1bGUucGx1cmFscyhjb3VudCkgOiBydWxlLnBsdXJhbHMoTWF0aC5hYnMoY291bnQpKTtcbiAgICAgIHZhciBzdWZmaXggPSBydWxlLm51bWJlcnNbaWR4XTtcblxuICAgICAgLy8gc3BlY2lhbCB0cmVhdG1lbnQgZm9yIGxuZ3Mgb25seSBoYXZpbmcgc2luZ3VsYXIgYW5kIHBsdXJhbFxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaW1wbGlmeVBsdXJhbFN1ZmZpeCAmJiBydWxlLm51bWJlcnMubGVuZ3RoID09PSAyICYmIHJ1bGUubnVtYmVyc1swXSA9PT0gMSkge1xuICAgICAgICBpZiAoc3VmZml4ID09PSAyKSB7XG4gICAgICAgICAgc3VmZml4ID0gJ3BsdXJhbCc7XG4gICAgICAgIH0gZWxzZSBpZiAoc3VmZml4ID09PSAxKSB7XG4gICAgICAgICAgc3VmZml4ID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHJldHVyblN1ZmZpeCA9IGZ1bmN0aW9uIHJldHVyblN1ZmZpeCgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzMi5vcHRpb25zLnByZXBlbmQgJiYgc3VmZml4LnRvU3RyaW5nKCkgPyBfdGhpczIub3B0aW9ucy5wcmVwZW5kICsgc3VmZml4LnRvU3RyaW5nKCkgOiBzdWZmaXgudG9TdHJpbmcoKTtcbiAgICAgIH07XG5cbiAgICAgIC8vIENPTVBBVElCSUxJVFkgSlNPTlxuICAgICAgLy8gdjFcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUpTT04gPT09ICd2MScpIHtcbiAgICAgICAgaWYgKHN1ZmZpeCA9PT0gMSkgcmV0dXJuICcnO1xuICAgICAgICBpZiAodHlwZW9mIHN1ZmZpeCA9PT0gJ251bWJlcicpIHJldHVybiAnX3BsdXJhbF8nICsgc3VmZml4LnRvU3RyaW5nKCk7XG4gICAgICAgIHJldHVybiByZXR1cm5TdWZmaXgoKTtcbiAgICAgIH0gZWxzZSBpZiAoIC8qIHYyICovdGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlKU09OID09PSAndjInICYmIHJ1bGUubnVtYmVycy5sZW5ndGggPT09IDIgJiYgcnVsZS5udW1iZXJzWzBdID09PSAxKSB7XG4gICAgICAgIHJldHVybiByZXR1cm5TdWZmaXgoKTtcbiAgICAgIH0gZWxzZSBpZiAoIC8qIHYzIC0gZ2V0dGV4dCBpbmRleCAqL3RoaXMub3B0aW9ucy5zaW1wbGlmeVBsdXJhbFN1ZmZpeCAmJiBydWxlLm51bWJlcnMubGVuZ3RoID09PSAyICYmIHJ1bGUubnVtYmVyc1swXSA9PT0gMSkge1xuICAgICAgICByZXR1cm4gcmV0dXJuU3VmZml4KCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnByZXBlbmQgJiYgaWR4LnRvU3RyaW5nKCkgPyB0aGlzLm9wdGlvbnMucHJlcGVuZCArIGlkeC50b1N0cmluZygpIDogaWR4LnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgdGhpcy5sb2dnZXIud2Fybignbm8gcGx1cmFsIHJ1bGUgZm91bmQgZm9yOiAnICsgY29kZSk7XG4gICAgcmV0dXJuICcnO1xuICB9O1xuXG4gIHJldHVybiBQbHVyYWxSZXNvbHZlcjtcbn0oKTtcblxuZXhwb3J0IGRlZmF1bHQgUGx1cmFsUmVzb2x2ZXI7IiwidmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSAnLi91dGlscy5qcyc7XG5pbXBvcnQgYmFzZUxvZ2dlciBmcm9tICcuL2xvZ2dlci5qcyc7XG5cbnZhciBJbnRlcnBvbGF0b3IgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEludGVycG9sYXRvcigpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgSW50ZXJwb2xhdG9yKTtcblxuICAgIHRoaXMubG9nZ2VyID0gYmFzZUxvZ2dlci5jcmVhdGUoJ2ludGVycG9sYXRvcicpO1xuXG4gICAgdGhpcy5pbml0KG9wdGlvbnMsIHRydWUpO1xuICB9XG5cbiAgLyogZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOiAwICovXG5cblxuICBJbnRlcnBvbGF0b3IucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiBpbml0KCkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICB2YXIgcmVzZXQgPSBhcmd1bWVudHNbMV07XG5cbiAgICBpZiAocmVzZXQpIHtcbiAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICB0aGlzLmZvcm1hdCA9IG9wdGlvbnMuaW50ZXJwb2xhdGlvbiAmJiBvcHRpb25zLmludGVycG9sYXRpb24uZm9ybWF0IHx8IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoIW9wdGlvbnMuaW50ZXJwb2xhdGlvbikgb3B0aW9ucy5pbnRlcnBvbGF0aW9uID0geyBlc2NhcGVWYWx1ZTogdHJ1ZSB9O1xuXG4gICAgdmFyIGlPcHRzID0gb3B0aW9ucy5pbnRlcnBvbGF0aW9uO1xuXG4gICAgdGhpcy5lc2NhcGUgPSBpT3B0cy5lc2NhcGUgIT09IHVuZGVmaW5lZCA/IGlPcHRzLmVzY2FwZSA6IHV0aWxzLmVzY2FwZTtcbiAgICB0aGlzLmVzY2FwZVZhbHVlID0gaU9wdHMuZXNjYXBlVmFsdWUgIT09IHVuZGVmaW5lZCA/IGlPcHRzLmVzY2FwZVZhbHVlIDogdHJ1ZTtcbiAgICB0aGlzLnVzZVJhd1ZhbHVlVG9Fc2NhcGUgPSBpT3B0cy51c2VSYXdWYWx1ZVRvRXNjYXBlICE9PSB1bmRlZmluZWQgPyBpT3B0cy51c2VSYXdWYWx1ZVRvRXNjYXBlIDogZmFsc2U7XG5cbiAgICB0aGlzLnByZWZpeCA9IGlPcHRzLnByZWZpeCA/IHV0aWxzLnJlZ2V4RXNjYXBlKGlPcHRzLnByZWZpeCkgOiBpT3B0cy5wcmVmaXhFc2NhcGVkIHx8ICd7eyc7XG4gICAgdGhpcy5zdWZmaXggPSBpT3B0cy5zdWZmaXggPyB1dGlscy5yZWdleEVzY2FwZShpT3B0cy5zdWZmaXgpIDogaU9wdHMuc3VmZml4RXNjYXBlZCB8fCAnfX0nO1xuXG4gICAgdGhpcy5mb3JtYXRTZXBhcmF0b3IgPSBpT3B0cy5mb3JtYXRTZXBhcmF0b3IgPyBpT3B0cy5mb3JtYXRTZXBhcmF0b3IgOiBpT3B0cy5mb3JtYXRTZXBhcmF0b3IgfHwgJywnO1xuXG4gICAgdGhpcy51bmVzY2FwZVByZWZpeCA9IGlPcHRzLnVuZXNjYXBlU3VmZml4ID8gJycgOiBpT3B0cy51bmVzY2FwZVByZWZpeCB8fCAnLSc7XG4gICAgdGhpcy51bmVzY2FwZVN1ZmZpeCA9IHRoaXMudW5lc2NhcGVQcmVmaXggPyAnJyA6IGlPcHRzLnVuZXNjYXBlU3VmZml4IHx8ICcnO1xuXG4gICAgdGhpcy5uZXN0aW5nUHJlZml4ID0gaU9wdHMubmVzdGluZ1ByZWZpeCA/IHV0aWxzLnJlZ2V4RXNjYXBlKGlPcHRzLm5lc3RpbmdQcmVmaXgpIDogaU9wdHMubmVzdGluZ1ByZWZpeEVzY2FwZWQgfHwgdXRpbHMucmVnZXhFc2NhcGUoJyR0KCcpO1xuICAgIHRoaXMubmVzdGluZ1N1ZmZpeCA9IGlPcHRzLm5lc3RpbmdTdWZmaXggPyB1dGlscy5yZWdleEVzY2FwZShpT3B0cy5uZXN0aW5nU3VmZml4KSA6IGlPcHRzLm5lc3RpbmdTdWZmaXhFc2NhcGVkIHx8IHV0aWxzLnJlZ2V4RXNjYXBlKCcpJyk7XG5cbiAgICB0aGlzLm1heFJlcGxhY2VzID0gaU9wdHMubWF4UmVwbGFjZXMgPyBpT3B0cy5tYXhSZXBsYWNlcyA6IDEwMDA7XG5cbiAgICAvLyB0aGUgcmVnZXhwXG4gICAgdGhpcy5yZXNldFJlZ0V4cCgpO1xuICB9O1xuXG4gIEludGVycG9sYXRvci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiByZXNldCgpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zKSB0aGlzLmluaXQodGhpcy5vcHRpb25zKTtcbiAgfTtcblxuICBJbnRlcnBvbGF0b3IucHJvdG90eXBlLnJlc2V0UmVnRXhwID0gZnVuY3Rpb24gcmVzZXRSZWdFeHAoKSB7XG4gICAgLy8gdGhlIHJlZ2V4cFxuICAgIHZhciByZWdleHBTdHIgPSB0aGlzLnByZWZpeCArICcoLis/KScgKyB0aGlzLnN1ZmZpeDtcbiAgICB0aGlzLnJlZ2V4cCA9IG5ldyBSZWdFeHAocmVnZXhwU3RyLCAnZycpO1xuXG4gICAgdmFyIHJlZ2V4cFVuZXNjYXBlU3RyID0gJycgKyB0aGlzLnByZWZpeCArIHRoaXMudW5lc2NhcGVQcmVmaXggKyAnKC4rPyknICsgdGhpcy51bmVzY2FwZVN1ZmZpeCArIHRoaXMuc3VmZml4O1xuICAgIHRoaXMucmVnZXhwVW5lc2NhcGUgPSBuZXcgUmVnRXhwKHJlZ2V4cFVuZXNjYXBlU3RyLCAnZycpO1xuXG4gICAgdmFyIG5lc3RpbmdSZWdleHBTdHIgPSB0aGlzLm5lc3RpbmdQcmVmaXggKyAnKC4rPyknICsgdGhpcy5uZXN0aW5nU3VmZml4O1xuICAgIHRoaXMubmVzdGluZ1JlZ2V4cCA9IG5ldyBSZWdFeHAobmVzdGluZ1JlZ2V4cFN0ciwgJ2cnKTtcbiAgfTtcblxuICBJbnRlcnBvbGF0b3IucHJvdG90eXBlLmludGVycG9sYXRlID0gZnVuY3Rpb24gaW50ZXJwb2xhdGUoc3RyLCBkYXRhLCBsbmcsIG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIG1hdGNoID0gdm9pZCAwO1xuICAgIHZhciB2YWx1ZSA9IHZvaWQgMDtcbiAgICB2YXIgcmVwbGFjZXMgPSB2b2lkIDA7XG5cbiAgICBmdW5jdGlvbiByZWdleFNhZmUodmFsKSB7XG4gICAgICByZXR1cm4gdmFsLnJlcGxhY2UoL1xcJC9nLCAnJCQkJCcpO1xuICAgIH1cblxuICAgIHZhciBoYW5kbGVGb3JtYXQgPSBmdW5jdGlvbiBoYW5kbGVGb3JtYXQoa2V5KSB7XG4gICAgICBpZiAoa2V5LmluZGV4T2YoX3RoaXMuZm9ybWF0U2VwYXJhdG9yKSA8IDApIHJldHVybiB1dGlscy5nZXRQYXRoKGRhdGEsIGtleSk7XG5cbiAgICAgIHZhciBwID0ga2V5LnNwbGl0KF90aGlzLmZvcm1hdFNlcGFyYXRvcik7XG4gICAgICB2YXIgayA9IHAuc2hpZnQoKS50cmltKCk7XG4gICAgICB2YXIgZiA9IHAuam9pbihfdGhpcy5mb3JtYXRTZXBhcmF0b3IpLnRyaW0oKTtcblxuICAgICAgcmV0dXJuIF90aGlzLmZvcm1hdCh1dGlscy5nZXRQYXRoKGRhdGEsIGspLCBmLCBsbmcpO1xuICAgIH07XG5cbiAgICB0aGlzLnJlc2V0UmVnRXhwKCk7XG5cbiAgICB2YXIgbWlzc2luZ0ludGVycG9sYXRpb25IYW5kbGVyID0gb3B0aW9ucyAmJiBvcHRpb25zLm1pc3NpbmdJbnRlcnBvbGF0aW9uSGFuZGxlciB8fCB0aGlzLm9wdGlvbnMubWlzc2luZ0ludGVycG9sYXRpb25IYW5kbGVyO1xuXG4gICAgcmVwbGFjZXMgPSAwO1xuICAgIC8vIHVuZXNjYXBlIGlmIGhhcyB1bmVzY2FwZVByZWZpeC9TdWZmaXhcbiAgICAvKiBlc2xpbnQgbm8tY29uZC1hc3NpZ246IDAgKi9cbiAgICB3aGlsZSAobWF0Y2ggPSB0aGlzLnJlZ2V4cFVuZXNjYXBlLmV4ZWMoc3RyKSkge1xuICAgICAgdmFsdWUgPSBoYW5kbGVGb3JtYXQobWF0Y2hbMV0udHJpbSgpKTtcbiAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKG1hdGNoWzBdLCB2YWx1ZSk7XG4gICAgICB0aGlzLnJlZ2V4cFVuZXNjYXBlLmxhc3RJbmRleCA9IDA7XG4gICAgICByZXBsYWNlcysrO1xuICAgICAgaWYgKHJlcGxhY2VzID49IHRoaXMubWF4UmVwbGFjZXMpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVwbGFjZXMgPSAwO1xuICAgIC8vIHJlZ3VsYXIgZXNjYXBlIG9uIGRlbWFuZFxuICAgIHdoaWxlIChtYXRjaCA9IHRoaXMucmVnZXhwLmV4ZWMoc3RyKSkge1xuICAgICAgdmFsdWUgPSBoYW5kbGVGb3JtYXQobWF0Y2hbMV0udHJpbSgpKTtcbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbWlzc2luZ0ludGVycG9sYXRpb25IYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdmFyIHRlbXAgPSBtaXNzaW5nSW50ZXJwb2xhdGlvbkhhbmRsZXIoc3RyLCBtYXRjaCk7XG4gICAgICAgICAgdmFsdWUgPSB0eXBlb2YgdGVtcCA9PT0gJ3N0cmluZycgPyB0ZW1wIDogJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIud2FybignbWlzc2VkIHRvIHBhc3MgaW4gdmFyaWFibGUgJyArIG1hdGNoWzFdICsgJyBmb3IgaW50ZXJwb2xhdGluZyAnICsgc3RyKTtcbiAgICAgICAgICB2YWx1ZSA9ICcnO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycgJiYgIXRoaXMudXNlUmF3VmFsdWVUb0VzY2FwZSkge1xuICAgICAgICB2YWx1ZSA9IHV0aWxzLm1ha2VTdHJpbmcodmFsdWUpO1xuICAgICAgfVxuICAgICAgdmFsdWUgPSB0aGlzLmVzY2FwZVZhbHVlID8gcmVnZXhTYWZlKHRoaXMuZXNjYXBlKHZhbHVlKSkgOiByZWdleFNhZmUodmFsdWUpO1xuICAgICAgc3RyID0gc3RyLnJlcGxhY2UobWF0Y2hbMF0sIHZhbHVlKTtcbiAgICAgIHRoaXMucmVnZXhwLmxhc3RJbmRleCA9IDA7XG4gICAgICByZXBsYWNlcysrO1xuICAgICAgaWYgKHJlcGxhY2VzID49IHRoaXMubWF4UmVwbGFjZXMpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG4gIH07XG5cbiAgSW50ZXJwb2xhdG9yLnByb3RvdHlwZS5uZXN0ID0gZnVuY3Rpb24gbmVzdChzdHIsIGZjKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXG4gICAgdmFyIG1hdGNoID0gdm9pZCAwO1xuICAgIHZhciB2YWx1ZSA9IHZvaWQgMDtcblxuICAgIHZhciBjbG9uZWRPcHRpb25zID0gX2V4dGVuZHMoe30sIG9wdGlvbnMpO1xuICAgIGNsb25lZE9wdGlvbnMuYXBwbHlQb3N0UHJvY2Vzc29yID0gZmFsc2U7IC8vIGF2b2lkIHBvc3QgcHJvY2Vzc2luZyBvbiBuZXN0ZWQgbG9va3VwXG5cbiAgICAvLyBpZiB2YWx1ZSBpcyBzb21ldGhpbmcgbGlrZSBcIm15S2V5XCI6IFwibG9yZW0gJChhbm90aGVyS2V5LCB7IFwiY291bnRcIjoge3thVmFsdWVJbk9wdGlvbnN9fSB9KVwiXG4gICAgZnVuY3Rpb24gaGFuZGxlSGFzT3B0aW9ucyhrZXksIGluaGVyaXRlZE9wdGlvbnMpIHtcbiAgICAgIGlmIChrZXkuaW5kZXhPZignLCcpIDwgMCkgcmV0dXJuIGtleTtcblxuICAgICAgdmFyIHAgPSBrZXkuc3BsaXQoJywnKTtcbiAgICAgIGtleSA9IHAuc2hpZnQoKTtcbiAgICAgIHZhciBvcHRpb25zU3RyaW5nID0gcC5qb2luKCcsJyk7XG4gICAgICBvcHRpb25zU3RyaW5nID0gdGhpcy5pbnRlcnBvbGF0ZShvcHRpb25zU3RyaW5nLCBjbG9uZWRPcHRpb25zKTtcbiAgICAgIG9wdGlvbnNTdHJpbmcgPSBvcHRpb25zU3RyaW5nLnJlcGxhY2UoLycvZywgJ1wiJyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNsb25lZE9wdGlvbnMgPSBKU09OLnBhcnNlKG9wdGlvbnNTdHJpbmcpO1xuXG4gICAgICAgIGlmIChpbmhlcml0ZWRPcHRpb25zKSBjbG9uZWRPcHRpb25zID0gX2V4dGVuZHMoe30sIGluaGVyaXRlZE9wdGlvbnMsIGNsb25lZE9wdGlvbnMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignZmFpbGVkIHBhcnNpbmcgb3B0aW9ucyBzdHJpbmcgaW4gbmVzdGluZyBmb3Iga2V5ICcgKyBrZXksIGUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cblxuICAgIC8vIHJlZ3VsYXIgZXNjYXBlIG9uIGRlbWFuZFxuICAgIHdoaWxlIChtYXRjaCA9IHRoaXMubmVzdGluZ1JlZ2V4cC5leGVjKHN0cikpIHtcbiAgICAgIHZhbHVlID0gZmMoaGFuZGxlSGFzT3B0aW9ucy5jYWxsKHRoaXMsIG1hdGNoWzFdLnRyaW0oKSwgY2xvbmVkT3B0aW9ucyksIGNsb25lZE9wdGlvbnMpO1xuXG4gICAgICAvLyBpcyBvbmx5IHRoZSBuZXN0aW5nIGtleSAoa2V5MSA9ICckKGtleTIpJykgcmV0dXJuIHRoZSB2YWx1ZSB3aXRob3V0IHN0cmluZ2lmeVxuICAgICAgaWYgKHZhbHVlICYmIG1hdGNoWzBdID09PSBzdHIgJiYgdHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykgcmV0dXJuIHZhbHVlO1xuXG4gICAgICAvLyBubyBzdHJpbmcgdG8gaW5jbHVkZSBvciBlbXB0eVxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHZhbHVlID0gdXRpbHMubWFrZVN0cmluZyh2YWx1ZSk7XG4gICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ21pc3NlZCB0byByZXNvbHZlICcgKyBtYXRjaFsxXSArICcgZm9yIG5lc3RpbmcgJyArIHN0cik7XG4gICAgICAgIHZhbHVlID0gJyc7XG4gICAgICB9XG4gICAgICAvLyBOZXN0ZWQga2V5cyBzaG91bGQgbm90IGJlIGVzY2FwZWQgYnkgZGVmYXVsdCAjODU0XG4gICAgICAvLyB2YWx1ZSA9IHRoaXMuZXNjYXBlVmFsdWUgPyByZWdleFNhZmUodXRpbHMuZXNjYXBlKHZhbHVlKSkgOiByZWdleFNhZmUodmFsdWUpO1xuICAgICAgc3RyID0gc3RyLnJlcGxhY2UobWF0Y2hbMF0sIHZhbHVlKTtcbiAgICAgIHRoaXMucmVnZXhwLmxhc3RJbmRleCA9IDA7XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG4gIH07XG5cbiAgcmV0dXJuIEludGVycG9sYXRvcjtcbn0oKTtcblxuZXhwb3J0IGRlZmF1bHQgSW50ZXJwb2xhdG9yOyIsInZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbnZhciBfc2xpY2VkVG9BcnJheSA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gc2xpY2VJdGVyYXRvcihhcnIsIGkpIHsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfZSA9IHVuZGVmaW5lZDsgdHJ5IHsgZm9yICh2YXIgX2kgPSBhcnJbU3ltYm9sLml0ZXJhdG9yXSgpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0pIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfSByZXR1cm4gZnVuY3Rpb24gKGFyciwgaSkgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IHJldHVybiBhcnI7IH0gZWxzZSBpZiAoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChhcnIpKSB7IHJldHVybiBzbGljZUl0ZXJhdG9yKGFyciwgaSk7IH0gZWxzZSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlXCIpOyB9IH07IH0oKTtcblxuZnVuY3Rpb24gX2RlZmF1bHRzKG9iaiwgZGVmYXVsdHMpIHsgdmFyIGtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhkZWZhdWx0cyk7IGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykgeyB2YXIga2V5ID0ga2V5c1tpXTsgdmFyIHZhbHVlID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkZWZhdWx0cywga2V5KTsgaWYgKHZhbHVlICYmIHZhbHVlLmNvbmZpZ3VyYWJsZSAmJiBvYmpba2V5XSA9PT0gdW5kZWZpbmVkKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpOyB9IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBfZGVmYXVsdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gJy4vdXRpbHMuanMnO1xuaW1wb3J0IGJhc2VMb2dnZXIgZnJvbSAnLi9sb2dnZXIuanMnO1xuaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tICcuL0V2ZW50RW1pdHRlci5qcyc7XG5cbmZ1bmN0aW9uIHJlbW92ZShhcnIsIHdoYXQpIHtcbiAgdmFyIGZvdW5kID0gYXJyLmluZGV4T2Yod2hhdCk7XG5cbiAgd2hpbGUgKGZvdW5kICE9PSAtMSkge1xuICAgIGFyci5zcGxpY2UoZm91bmQsIDEpO1xuICAgIGZvdW5kID0gYXJyLmluZGV4T2Yod2hhdCk7XG4gIH1cbn1cblxudmFyIENvbm5lY3RvciA9IGZ1bmN0aW9uIChfRXZlbnRFbWl0dGVyKSB7XG4gIF9pbmhlcml0cyhDb25uZWN0b3IsIF9FdmVudEVtaXR0ZXIpO1xuXG4gIGZ1bmN0aW9uIENvbm5lY3RvcihiYWNrZW5kLCBzdG9yZSwgc2VydmljZXMpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDoge307XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ29ubmVjdG9yKTtcblxuICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9FdmVudEVtaXR0ZXIuY2FsbCh0aGlzKSk7XG5cbiAgICBfdGhpcy5iYWNrZW5kID0gYmFja2VuZDtcbiAgICBfdGhpcy5zdG9yZSA9IHN0b3JlO1xuICAgIF90aGlzLmxhbmd1YWdlVXRpbHMgPSBzZXJ2aWNlcy5sYW5ndWFnZVV0aWxzO1xuICAgIF90aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIF90aGlzLmxvZ2dlciA9IGJhc2VMb2dnZXIuY3JlYXRlKCdiYWNrZW5kQ29ubmVjdG9yJyk7XG5cbiAgICBfdGhpcy5zdGF0ZSA9IHt9O1xuICAgIF90aGlzLnF1ZXVlID0gW107XG5cbiAgICBpZiAoX3RoaXMuYmFja2VuZCAmJiBfdGhpcy5iYWNrZW5kLmluaXQpIHtcbiAgICAgIF90aGlzLmJhY2tlbmQuaW5pdChzZXJ2aWNlcywgb3B0aW9ucy5iYWNrZW5kLCBvcHRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgQ29ubmVjdG9yLnByb3RvdHlwZS5xdWV1ZUxvYWQgPSBmdW5jdGlvbiBxdWV1ZUxvYWQobGFuZ3VhZ2VzLCBuYW1lc3BhY2VzLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgLy8gZmluZCB3aGF0IG5lZWRzIHRvIGJlIGxvYWRlZFxuICAgIHZhciB0b0xvYWQgPSBbXTtcbiAgICB2YXIgcGVuZGluZyA9IFtdO1xuICAgIHZhciB0b0xvYWRMYW5ndWFnZXMgPSBbXTtcbiAgICB2YXIgdG9Mb2FkTmFtZXNwYWNlcyA9IFtdO1xuXG4gICAgbGFuZ3VhZ2VzLmZvckVhY2goZnVuY3Rpb24gKGxuZykge1xuICAgICAgdmFyIGhhc0FsbE5hbWVzcGFjZXMgPSB0cnVlO1xuXG4gICAgICBuYW1lc3BhY2VzLmZvckVhY2goZnVuY3Rpb24gKG5zKSB7XG4gICAgICAgIHZhciBuYW1lID0gbG5nICsgJ3wnICsgbnM7XG5cbiAgICAgICAgaWYgKCFvcHRpb25zLnJlbG9hZCAmJiBfdGhpczIuc3RvcmUuaGFzUmVzb3VyY2VCdW5kbGUobG5nLCBucykpIHtcbiAgICAgICAgICBfdGhpczIuc3RhdGVbbmFtZV0gPSAyOyAvLyBsb2FkZWRcbiAgICAgICAgfSBlbHNlIGlmIChfdGhpczIuc3RhdGVbbmFtZV0gPCAwKSB7XG4gICAgICAgICAgLy8gbm90aGluZyB0byBkbyBmb3IgZXJyXG4gICAgICAgIH0gZWxzZSBpZiAoX3RoaXMyLnN0YXRlW25hbWVdID09PSAxKSB7XG4gICAgICAgICAgaWYgKHBlbmRpbmcuaW5kZXhPZihuYW1lKSA8IDApIHBlbmRpbmcucHVzaChuYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfdGhpczIuc3RhdGVbbmFtZV0gPSAxOyAvLyBwZW5kaW5nXG5cbiAgICAgICAgICBoYXNBbGxOYW1lc3BhY2VzID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAocGVuZGluZy5pbmRleE9mKG5hbWUpIDwgMCkgcGVuZGluZy5wdXNoKG5hbWUpO1xuICAgICAgICAgIGlmICh0b0xvYWQuaW5kZXhPZihuYW1lKSA8IDApIHRvTG9hZC5wdXNoKG5hbWUpO1xuICAgICAgICAgIGlmICh0b0xvYWROYW1lc3BhY2VzLmluZGV4T2YobnMpIDwgMCkgdG9Mb2FkTmFtZXNwYWNlcy5wdXNoKG5zKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmICghaGFzQWxsTmFtZXNwYWNlcykgdG9Mb2FkTGFuZ3VhZ2VzLnB1c2gobG5nKTtcbiAgICB9KTtcblxuICAgIGlmICh0b0xvYWQubGVuZ3RoIHx8IHBlbmRpbmcubGVuZ3RoKSB7XG4gICAgICB0aGlzLnF1ZXVlLnB1c2goe1xuICAgICAgICBwZW5kaW5nOiBwZW5kaW5nLFxuICAgICAgICBsb2FkZWQ6IHt9LFxuICAgICAgICBlcnJvcnM6IFtdLFxuICAgICAgICBjYWxsYmFjazogY2FsbGJhY2tcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0b0xvYWQ6IHRvTG9hZCxcbiAgICAgIHBlbmRpbmc6IHBlbmRpbmcsXG4gICAgICB0b0xvYWRMYW5ndWFnZXM6IHRvTG9hZExhbmd1YWdlcyxcbiAgICAgIHRvTG9hZE5hbWVzcGFjZXM6IHRvTG9hZE5hbWVzcGFjZXNcbiAgICB9O1xuICB9O1xuXG4gIENvbm5lY3Rvci5wcm90b3R5cGUubG9hZGVkID0gZnVuY3Rpb24gbG9hZGVkKG5hbWUsIGVyciwgZGF0YSkge1xuICAgIHZhciBfbmFtZSRzcGxpdCA9IG5hbWUuc3BsaXQoJ3wnKSxcbiAgICAgICAgX25hbWUkc3BsaXQyID0gX3NsaWNlZFRvQXJyYXkoX25hbWUkc3BsaXQsIDIpLFxuICAgICAgICBsbmcgPSBfbmFtZSRzcGxpdDJbMF0sXG4gICAgICAgIG5zID0gX25hbWUkc3BsaXQyWzFdO1xuXG4gICAgaWYgKGVycikgdGhpcy5lbWl0KCdmYWlsZWRMb2FkaW5nJywgbG5nLCBucywgZXJyKTtcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICB0aGlzLnN0b3JlLmFkZFJlc291cmNlQnVuZGxlKGxuZywgbnMsIGRhdGEpO1xuICAgIH1cblxuICAgIC8vIHNldCBsb2FkZWRcbiAgICB0aGlzLnN0YXRlW25hbWVdID0gZXJyID8gLTEgOiAyO1xuXG4gICAgLy8gY29uc29saWRhdGVkIGxvYWRpbmcgZG9uZSBpbiB0aGlzIHJ1biAtIG9ubHkgZW1pdCBvbmNlIGZvciBhIGxvYWRlZCBuYW1lc3BhY2VcbiAgICB2YXIgbG9hZGVkID0ge307XG5cbiAgICAvLyBjYWxsYmFjayBpZiByZWFkeVxuICAgIHRoaXMucXVldWUuZm9yRWFjaChmdW5jdGlvbiAocSkge1xuICAgICAgdXRpbHMucHVzaFBhdGgocS5sb2FkZWQsIFtsbmddLCBucyk7XG4gICAgICByZW1vdmUocS5wZW5kaW5nLCBuYW1lKTtcblxuICAgICAgaWYgKGVycikgcS5lcnJvcnMucHVzaChlcnIpO1xuXG4gICAgICBpZiAocS5wZW5kaW5nLmxlbmd0aCA9PT0gMCAmJiAhcS5kb25lKSB7XG4gICAgICAgIC8vIG9ubHkgZG8gb25jZSBwZXIgbG9hZGVkIC0+IHRoaXMuZW1pdCgnbG9hZGVkJywgcS5sb2FkZWQpO1xuICAgICAgICBPYmplY3Qua2V5cyhxLmxvYWRlZCkuZm9yRWFjaChmdW5jdGlvbiAobCkge1xuICAgICAgICAgIGlmICghbG9hZGVkW2xdKSBsb2FkZWRbbF0gPSBbXTtcbiAgICAgICAgICBpZiAocS5sb2FkZWRbbF0ubGVuZ3RoKSB7XG4gICAgICAgICAgICBxLmxvYWRlZFtsXS5mb3JFYWNoKGZ1bmN0aW9uIChucykge1xuICAgICAgICAgICAgICBpZiAobG9hZGVkW2xdLmluZGV4T2YobnMpIDwgMCkgbG9hZGVkW2xdLnB1c2gobnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvKiBlc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246IDAgKi9cbiAgICAgICAgcS5kb25lID0gdHJ1ZTtcbiAgICAgICAgaWYgKHEuZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICAgIHEuY2FsbGJhY2socS5lcnJvcnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHEuY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gZW1pdCBjb25zb2xpZGF0ZWQgbG9hZGVkIGV2ZW50XG4gICAgdGhpcy5lbWl0KCdsb2FkZWQnLCBsb2FkZWQpO1xuXG4gICAgLy8gcmVtb3ZlIGRvbmUgbG9hZCByZXF1ZXN0c1xuICAgIHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLmZpbHRlcihmdW5jdGlvbiAocSkge1xuICAgICAgcmV0dXJuICFxLmRvbmU7XG4gICAgfSk7XG4gIH07XG5cbiAgQ29ubmVjdG9yLnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24gcmVhZChsbmcsIG5zLCBmY05hbWUpIHtcbiAgICB2YXIgdHJpZWQgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IDA7XG5cbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHZhciB3YWl0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDQgJiYgYXJndW1lbnRzWzRdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNF0gOiAyNTA7XG4gICAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzWzVdO1xuXG4gICAgaWYgKCFsbmcubGVuZ3RoKSByZXR1cm4gY2FsbGJhY2sobnVsbCwge30pOyAvLyBub3RpbmcgdG8gbG9hZFxuXG4gICAgcmV0dXJuIHRoaXMuYmFja2VuZFtmY05hbWVdKGxuZywgbnMsIGZ1bmN0aW9uIChlcnIsIGRhdGEpIHtcbiAgICAgIGlmIChlcnIgJiYgZGF0YSAvKiA9IHJldHJ5RmxhZyAqLyAmJiB0cmllZCA8IDUpIHtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMzLnJlYWQuY2FsbChfdGhpczMsIGxuZywgbnMsIGZjTmFtZSwgdHJpZWQgKyAxLCB3YWl0ICogMiwgY2FsbGJhY2spO1xuICAgICAgICB9LCB3YWl0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY2FsbGJhY2soZXJyLCBkYXRhKTtcbiAgICB9KTtcbiAgfTtcblxuICAvKiBlc2xpbnQgY29uc2lzdGVudC1yZXR1cm46IDAgKi9cblxuXG4gIENvbm5lY3Rvci5wcm90b3R5cGUucHJlcGFyZUxvYWRpbmcgPSBmdW5jdGlvbiBwcmVwYXJlTG9hZGluZyhsYW5ndWFnZXMsIG5hbWVzcGFjZXMpIHtcbiAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB7fTtcbiAgICB2YXIgY2FsbGJhY2sgPSBhcmd1bWVudHNbM107XG5cbiAgICBpZiAoIXRoaXMuYmFja2VuZCkge1xuICAgICAgdGhpcy5sb2dnZXIud2FybignTm8gYmFja2VuZCB3YXMgYWRkZWQgdmlhIGkxOG5leHQudXNlLiBXaWxsIG5vdCBsb2FkIHJlc291cmNlcy4nKTtcbiAgICAgIHJldHVybiBjYWxsYmFjayAmJiBjYWxsYmFjaygpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbGFuZ3VhZ2VzID09PSAnc3RyaW5nJykgbGFuZ3VhZ2VzID0gdGhpcy5sYW5ndWFnZVV0aWxzLnRvUmVzb2x2ZUhpZXJhcmNoeShsYW5ndWFnZXMpO1xuICAgIGlmICh0eXBlb2YgbmFtZXNwYWNlcyA9PT0gJ3N0cmluZycpIG5hbWVzcGFjZXMgPSBbbmFtZXNwYWNlc107XG5cbiAgICB2YXIgdG9Mb2FkID0gdGhpcy5xdWV1ZUxvYWQobGFuZ3VhZ2VzLCBuYW1lc3BhY2VzLCBvcHRpb25zLCBjYWxsYmFjayk7XG4gICAgaWYgKCF0b0xvYWQudG9Mb2FkLmxlbmd0aCkge1xuICAgICAgaWYgKCF0b0xvYWQucGVuZGluZy5sZW5ndGgpIGNhbGxiYWNrKCk7IC8vIG5vdGhpbmcgdG8gbG9hZCBhbmQgbm8gcGVuZGluZ3MuLi5jYWxsYmFjayBub3dcbiAgICAgIHJldHVybiBudWxsOyAvLyBwZW5kaW5ncyB3aWxsIHRyaWdnZXIgY2FsbGJhY2tcbiAgICB9XG5cbiAgICB0b0xvYWQudG9Mb2FkLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIF90aGlzNC5sb2FkT25lKG5hbWUpO1xuICAgIH0pO1xuICB9O1xuXG4gIENvbm5lY3Rvci5wcm90b3R5cGUubG9hZCA9IGZ1bmN0aW9uIGxvYWQobGFuZ3VhZ2VzLCBuYW1lc3BhY2VzLCBjYWxsYmFjaykge1xuICAgIHRoaXMucHJlcGFyZUxvYWRpbmcobGFuZ3VhZ2VzLCBuYW1lc3BhY2VzLCB7fSwgY2FsbGJhY2spO1xuICB9O1xuXG4gIENvbm5lY3Rvci5wcm90b3R5cGUucmVsb2FkID0gZnVuY3Rpb24gcmVsb2FkKGxhbmd1YWdlcywgbmFtZXNwYWNlcywgY2FsbGJhY2spIHtcbiAgICB0aGlzLnByZXBhcmVMb2FkaW5nKGxhbmd1YWdlcywgbmFtZXNwYWNlcywgeyByZWxvYWQ6IHRydWUgfSwgY2FsbGJhY2spO1xuICB9O1xuXG4gIENvbm5lY3Rvci5wcm90b3R5cGUubG9hZE9uZSA9IGZ1bmN0aW9uIGxvYWRPbmUobmFtZSkge1xuICAgIHZhciBfdGhpczUgPSB0aGlzO1xuXG4gICAgdmFyIHByZWZpeCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJyc7XG5cbiAgICB2YXIgX25hbWUkc3BsaXQzID0gbmFtZS5zcGxpdCgnfCcpLFxuICAgICAgICBfbmFtZSRzcGxpdDQgPSBfc2xpY2VkVG9BcnJheShfbmFtZSRzcGxpdDMsIDIpLFxuICAgICAgICBsbmcgPSBfbmFtZSRzcGxpdDRbMF0sXG4gICAgICAgIG5zID0gX25hbWUkc3BsaXQ0WzFdO1xuXG4gICAgdGhpcy5yZWFkKGxuZywgbnMsICdyZWFkJywgbnVsbCwgbnVsbCwgZnVuY3Rpb24gKGVyciwgZGF0YSkge1xuICAgICAgaWYgKGVycikgX3RoaXM1LmxvZ2dlci53YXJuKHByZWZpeCArICdsb2FkaW5nIG5hbWVzcGFjZSAnICsgbnMgKyAnIGZvciBsYW5ndWFnZSAnICsgbG5nICsgJyBmYWlsZWQnLCBlcnIpO1xuICAgICAgaWYgKCFlcnIgJiYgZGF0YSkgX3RoaXM1LmxvZ2dlci5sb2cocHJlZml4ICsgJ2xvYWRlZCBuYW1lc3BhY2UgJyArIG5zICsgJyBmb3IgbGFuZ3VhZ2UgJyArIGxuZywgZGF0YSk7XG5cbiAgICAgIF90aGlzNS5sb2FkZWQobmFtZSwgZXJyLCBkYXRhKTtcbiAgICB9KTtcbiAgfTtcblxuICBDb25uZWN0b3IucHJvdG90eXBlLnNhdmVNaXNzaW5nID0gZnVuY3Rpb24gc2F2ZU1pc3NpbmcobGFuZ3VhZ2VzLCBuYW1lc3BhY2UsIGtleSwgZmFsbGJhY2tWYWx1ZSwgaXNVcGRhdGUpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiA1ICYmIGFyZ3VtZW50c1s1XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzVdIDoge307XG5cbiAgICBpZiAodGhpcy5iYWNrZW5kICYmIHRoaXMuYmFja2VuZC5jcmVhdGUpIHtcbiAgICAgIHRoaXMuYmFja2VuZC5jcmVhdGUobGFuZ3VhZ2VzLCBuYW1lc3BhY2UsIGtleSwgZmFsbGJhY2tWYWx1ZSwgbnVsbCAvKiB1bnVzZWQgY2FsbGJhY2sgKi8sIF9leHRlbmRzKHt9LCBvcHRpb25zLCB7IGlzVXBkYXRlOiBpc1VwZGF0ZSB9KSk7XG4gICAgfVxuXG4gICAgLy8gd3JpdGUgdG8gc3RvcmUgdG8gYXZvaWQgcmVzZW5kaW5nXG4gICAgaWYgKCFsYW5ndWFnZXMgfHwgIWxhbmd1YWdlc1swXSkgcmV0dXJuO1xuICAgIHRoaXMuc3RvcmUuYWRkUmVzb3VyY2UobGFuZ3VhZ2VzWzBdLCBuYW1lc3BhY2UsIGtleSwgZmFsbGJhY2tWYWx1ZSk7XG4gIH07XG5cbiAgcmV0dXJuIENvbm5lY3Rvcjtcbn0oRXZlbnRFbWl0dGVyKTtcblxuZXhwb3J0IGRlZmF1bHQgQ29ubmVjdG9yOyIsImV4cG9ydCB7IGdldCB9O1xuZnVuY3Rpb24gZ2V0KCkge1xuICByZXR1cm4ge1xuICAgIGRlYnVnOiBmYWxzZSxcbiAgICBpbml0SW1tZWRpYXRlOiB0cnVlLFxuXG4gICAgbnM6IFsndHJhbnNsYXRpb24nXSxcbiAgICBkZWZhdWx0TlM6IFsndHJhbnNsYXRpb24nXSxcbiAgICBmYWxsYmFja0xuZzogWydkZXYnXSxcbiAgICBmYWxsYmFja05TOiBmYWxzZSwgLy8gc3RyaW5nIG9yIGFycmF5IG9mIG5hbWVzcGFjZXNcblxuICAgIHdoaXRlbGlzdDogZmFsc2UsIC8vIGFycmF5IHdpdGggd2hpdGVsaXN0ZWQgbGFuZ3VhZ2VzXG4gICAgbm9uRXhwbGljaXRXaGl0ZWxpc3Q6IGZhbHNlLFxuICAgIGxvYWQ6ICdhbGwnLCAvLyB8IGN1cnJlbnRPbmx5IHwgbGFuZ3VhZ2VPbmx5XG4gICAgcHJlbG9hZDogZmFsc2UsIC8vIGFycmF5IHdpdGggcHJlbG9hZCBsYW5ndWFnZXNcblxuICAgIHNpbXBsaWZ5UGx1cmFsU3VmZml4OiB0cnVlLFxuICAgIGtleVNlcGFyYXRvcjogJy4nLFxuICAgIG5zU2VwYXJhdG9yOiAnOicsXG4gICAgcGx1cmFsU2VwYXJhdG9yOiAnXycsXG4gICAgY29udGV4dFNlcGFyYXRvcjogJ18nLFxuXG4gICAgc2F2ZU1pc3Npbmc6IGZhbHNlLCAvLyBlbmFibGUgdG8gc2VuZCBtaXNzaW5nIHZhbHVlc1xuICAgIHVwZGF0ZU1pc3Npbmc6IGZhbHNlLCAvLyBlbmFibGUgdG8gdXBkYXRlIGRlZmF1bHQgdmFsdWVzIGlmIGRpZmZlcmVudCBmcm9tIHRyYW5zbGF0ZWQgdmFsdWUgKG9ubHkgdXNlZnVsIG9uIGluaXRpYWwgZGV2ZWxvcG1lbnQsIG9yIHdoZW4ga2VlcGluZyBjb2RlIGFzIHNvdXJjZSBvZiB0cnV0aClcbiAgICBzYXZlTWlzc2luZ1RvOiAnZmFsbGJhY2snLCAvLyAnY3VycmVudCcgfHwgJ2FsbCdcbiAgICBzYXZlTWlzc2luZ1BsdXJhbHM6IHRydWUsIC8vIHdpbGwgc2F2ZSBhbGwgZm9ybXMgbm90IG9ubHkgc2luZ3VsYXIga2V5XG4gICAgbWlzc2luZ0tleUhhbmRsZXI6IGZhbHNlLCAvLyBmdW5jdGlvbihsbmcsIG5zLCBrZXksIGZhbGxiYWNrVmFsdWUpIC0+IG92ZXJyaWRlIGlmIHByZWZlciBvbiBoYW5kbGluZ1xuICAgIG1pc3NpbmdJbnRlcnBvbGF0aW9uSGFuZGxlcjogZmFsc2UsIC8vIGZ1bmN0aW9uKHN0ciwgbWF0Y2gpXG5cbiAgICBwb3N0UHJvY2VzczogZmFsc2UsIC8vIHN0cmluZyBvciBhcnJheSBvZiBwb3N0UHJvY2Vzc29yIG5hbWVzXG4gICAgcmV0dXJuTnVsbDogdHJ1ZSwgLy8gYWxsb3dzIG51bGwgdmFsdWUgYXMgdmFsaWQgdHJhbnNsYXRpb25cbiAgICByZXR1cm5FbXB0eVN0cmluZzogdHJ1ZSwgLy8gYWxsb3dzIGVtcHR5IHN0cmluZyB2YWx1ZSBhcyB2YWxpZCB0cmFuc2xhdGlvblxuICAgIHJldHVybk9iamVjdHM6IGZhbHNlLFxuICAgIGpvaW5BcnJheXM6IGZhbHNlLCAvLyBvciBzdHJpbmcgdG8gam9pbiBhcnJheVxuICAgIHJldHVybmVkT2JqZWN0SGFuZGxlcjogZnVuY3Rpb24gcmV0dXJuZWRPYmplY3RIYW5kbGVyKCkge30sIC8vIGZ1bmN0aW9uKGtleSwgdmFsdWUsIG9wdGlvbnMpIHRyaWdnZXJlZCBpZiBrZXkgcmV0dXJucyBvYmplY3QgYnV0IHJldHVybk9iamVjdHMgaXMgc2V0IHRvIGZhbHNlXG4gICAgcGFyc2VNaXNzaW5nS2V5SGFuZGxlcjogZmFsc2UsIC8vIGZ1bmN0aW9uKGtleSkgcGFyc2VkIGEga2V5IHRoYXQgd2FzIG5vdCBmb3VuZCBpbiB0KCkgYmVmb3JlIHJldHVybmluZ1xuICAgIGFwcGVuZE5hbWVzcGFjZVRvTWlzc2luZ0tleTogZmFsc2UsXG4gICAgYXBwZW5kTmFtZXNwYWNlVG9DSU1vZGU6IGZhbHNlLFxuICAgIG92ZXJsb2FkVHJhbnNsYXRpb25PcHRpb25IYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGUoYXJncykge1xuICAgICAgdmFyIHJldCA9IHt9O1xuICAgICAgaWYgKGFyZ3NbMV0pIHJldC5kZWZhdWx0VmFsdWUgPSBhcmdzWzFdO1xuICAgICAgaWYgKGFyZ3NbMl0pIHJldC50RGVzY3JpcHRpb24gPSBhcmdzWzJdO1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9LFxuICAgIGludGVycG9sYXRpb246IHtcbiAgICAgIGVzY2FwZVZhbHVlOiB0cnVlLFxuICAgICAgZm9ybWF0OiBmdW5jdGlvbiBmb3JtYXQodmFsdWUsIF9mb3JtYXQsIGxuZykge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9LFxuICAgICAgcHJlZml4OiAne3snLFxuICAgICAgc3VmZml4OiAnfX0nLFxuICAgICAgZm9ybWF0U2VwYXJhdG9yOiAnLCcsXG4gICAgICAvLyBwcmVmaXhFc2NhcGVkOiAne3snLFxuICAgICAgLy8gc3VmZml4RXNjYXBlZDogJ319JyxcbiAgICAgIC8vIHVuZXNjYXBlU3VmZml4OiAnJyxcbiAgICAgIHVuZXNjYXBlUHJlZml4OiAnLScsXG5cbiAgICAgIG5lc3RpbmdQcmVmaXg6ICckdCgnLFxuICAgICAgbmVzdGluZ1N1ZmZpeDogJyknLFxuICAgICAgLy8gbmVzdGluZ1ByZWZpeEVzY2FwZWQ6ICckdCgnLFxuICAgICAgLy8gbmVzdGluZ1N1ZmZpeEVzY2FwZWQ6ICcpJyxcbiAgICAgIC8vIGRlZmF1bHRWYXJpYWJsZXM6IHVuZGVmaW5lZCAvLyBvYmplY3QgdGhhdCBjYW4gaGF2ZSB2YWx1ZXMgdG8gaW50ZXJwb2xhdGUgb24gLSBleHRlbmRzIHBhc3NlZCBpbiBpbnRlcnBvbGF0aW9uIGRhdGFcbiAgICAgIG1heFJlcGxhY2VzOiAxMDAwIC8vIG1heCByZXBsYWNlcyB0byBwcmV2ZW50IGVuZGxlc3MgbG9vcFxuICAgIH1cbiAgfTtcbn1cblxuLyogZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOiAwICovXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtT3B0aW9ucyhvcHRpb25zKSB7XG4gIC8vIGNyZWF0ZSBuYW1lc3BhY2Ugb2JqZWN0IGlmIG5hbWVzcGFjZSBpcyBwYXNzZWQgaW4gYXMgc3RyaW5nXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5ucyA9PT0gJ3N0cmluZycpIG9wdGlvbnMubnMgPSBbb3B0aW9ucy5uc107XG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5mYWxsYmFja0xuZyA9PT0gJ3N0cmluZycpIG9wdGlvbnMuZmFsbGJhY2tMbmcgPSBbb3B0aW9ucy5mYWxsYmFja0xuZ107XG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5mYWxsYmFja05TID09PSAnc3RyaW5nJykgb3B0aW9ucy5mYWxsYmFja05TID0gW29wdGlvbnMuZmFsbGJhY2tOU107XG5cbiAgLy8gZXh0ZW5kIHdoaXRlbGlzdCB3aXRoIGNpbW9kZVxuICBpZiAob3B0aW9ucy53aGl0ZWxpc3QgJiYgb3B0aW9ucy53aGl0ZWxpc3QuaW5kZXhPZignY2ltb2RlJykgPCAwKSB7XG4gICAgb3B0aW9ucy53aGl0ZWxpc3QgPSBvcHRpb25zLndoaXRlbGlzdC5jb25jYXQoWydjaW1vZGUnXSk7XG4gIH1cblxuICByZXR1cm4gb3B0aW9ucztcbn0iLCJ2YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbmZ1bmN0aW9uIF9kZWZhdWx0cyhvYmosIGRlZmF1bHRzKSB7IHZhciBrZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZGVmYXVsdHMpOyBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsgdmFyIGtleSA9IGtleXNbaV07IHZhciB2YWx1ZSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZGVmYXVsdHMsIGtleSk7IGlmICh2YWx1ZSAmJiB2YWx1ZS5jb25maWd1cmFibGUgJiYgb2JqW2tleV0gPT09IHVuZGVmaW5lZCkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKTsgfSB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogX2RlZmF1bHRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5pbXBvcnQgYmFzZUxvZ2dlciBmcm9tICcuL2xvZ2dlci5qcyc7XG5pbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gJy4vRXZlbnRFbWl0dGVyLmpzJztcbmltcG9ydCBSZXNvdXJjZVN0b3JlIGZyb20gJy4vUmVzb3VyY2VTdG9yZS5qcyc7XG5pbXBvcnQgVHJhbnNsYXRvciBmcm9tICcuL1RyYW5zbGF0b3IuanMnO1xuaW1wb3J0IExhbmd1YWdlVXRpbHMgZnJvbSAnLi9MYW5ndWFnZVV0aWxzLmpzJztcbmltcG9ydCBQbHVyYWxSZXNvbHZlciBmcm9tICcuL1BsdXJhbFJlc29sdmVyLmpzJztcbmltcG9ydCBJbnRlcnBvbGF0b3IgZnJvbSAnLi9JbnRlcnBvbGF0b3IuanMnO1xuaW1wb3J0IEJhY2tlbmRDb25uZWN0b3IgZnJvbSAnLi9CYWNrZW5kQ29ubmVjdG9yLmpzJztcbmltcG9ydCB7IGdldCBhcyBnZXREZWZhdWx0cywgdHJhbnNmb3JtT3B0aW9ucyB9IGZyb20gJy4vZGVmYXVsdHMuanMnO1xuaW1wb3J0IHBvc3RQcm9jZXNzb3IgZnJvbSAnLi9wb3N0UHJvY2Vzc29yLmpzJztcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnZhciBJMThuID0gZnVuY3Rpb24gKF9FdmVudEVtaXR0ZXIpIHtcbiAgX2luaGVyaXRzKEkxOG4sIF9FdmVudEVtaXR0ZXIpO1xuXG4gIGZ1bmN0aW9uIEkxOG4oKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAgIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50c1sxXTtcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBJMThuKTtcblxuICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9FdmVudEVtaXR0ZXIuY2FsbCh0aGlzKSk7XG5cbiAgICBfdGhpcy5vcHRpb25zID0gdHJhbnNmb3JtT3B0aW9ucyhvcHRpb25zKTtcbiAgICBfdGhpcy5zZXJ2aWNlcyA9IHt9O1xuICAgIF90aGlzLmxvZ2dlciA9IGJhc2VMb2dnZXI7XG4gICAgX3RoaXMubW9kdWxlcyA9IHsgZXh0ZXJuYWw6IFtdIH07XG5cbiAgICBpZiAoY2FsbGJhY2sgJiYgIV90aGlzLmlzSW5pdGlhbGl6ZWQgJiYgIW9wdGlvbnMuaXNDbG9uZSkge1xuICAgICAgdmFyIF9yZXQ7XG5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9pMThuZXh0L2kxOG5leHQvaXNzdWVzLzg3OVxuICAgICAgaWYgKCFfdGhpcy5vcHRpb25zLmluaXRJbW1lZGlhdGUpIHJldHVybiBfcmV0ID0gX3RoaXMuaW5pdChvcHRpb25zLCBjYWxsYmFjayksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKF90aGlzLCBfcmV0KTtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5pbml0KG9wdGlvbnMsIGNhbGxiYWNrKTtcbiAgICAgIH0sIDApO1xuICAgIH1cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBJMThuLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gaW5pdCgpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICB2YXIgY2FsbGJhY2sgPSBhcmd1bWVudHNbMV07XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNhbGxiYWNrID0gb3B0aW9ucztcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG4gICAgdGhpcy5vcHRpb25zID0gX2V4dGVuZHMoe30sIGdldERlZmF1bHRzKCksIHRoaXMub3B0aW9ucywgdHJhbnNmb3JtT3B0aW9ucyhvcHRpb25zKSk7XG5cbiAgICB0aGlzLmZvcm1hdCA9IHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmZvcm1hdDtcbiAgICBpZiAoIWNhbGxiYWNrKSBjYWxsYmFjayA9IG5vb3A7XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVDbGFzc09uRGVtYW5kKENsYXNzT3JPYmplY3QpIHtcbiAgICAgIGlmICghQ2xhc3NPck9iamVjdCkgcmV0dXJuIG51bGw7XG4gICAgICBpZiAodHlwZW9mIENsYXNzT3JPYmplY3QgPT09ICdmdW5jdGlvbicpIHJldHVybiBuZXcgQ2xhc3NPck9iamVjdCgpO1xuICAgICAgcmV0dXJuIENsYXNzT3JPYmplY3Q7XG4gICAgfVxuXG4gICAgLy8gaW5pdCBzZXJ2aWNlc1xuICAgIGlmICghdGhpcy5vcHRpb25zLmlzQ2xvbmUpIHtcbiAgICAgIGlmICh0aGlzLm1vZHVsZXMubG9nZ2VyKSB7XG4gICAgICAgIGJhc2VMb2dnZXIuaW5pdChjcmVhdGVDbGFzc09uRGVtYW5kKHRoaXMubW9kdWxlcy5sb2dnZXIpLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmFzZUxvZ2dlci5pbml0KG51bGwsIHRoaXMub3B0aW9ucyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBsdSA9IG5ldyBMYW5ndWFnZVV0aWxzKHRoaXMub3B0aW9ucyk7XG4gICAgICB0aGlzLnN0b3JlID0gbmV3IFJlc291cmNlU3RvcmUodGhpcy5vcHRpb25zLnJlc291cmNlcywgdGhpcy5vcHRpb25zKTtcblxuICAgICAgdmFyIHMgPSB0aGlzLnNlcnZpY2VzO1xuICAgICAgcy5sb2dnZXIgPSBiYXNlTG9nZ2VyO1xuICAgICAgcy5yZXNvdXJjZVN0b3JlID0gdGhpcy5zdG9yZTtcbiAgICAgIHMubGFuZ3VhZ2VVdGlscyA9IGx1O1xuICAgICAgcy5wbHVyYWxSZXNvbHZlciA9IG5ldyBQbHVyYWxSZXNvbHZlcihsdSwgeyBwcmVwZW5kOiB0aGlzLm9wdGlvbnMucGx1cmFsU2VwYXJhdG9yLCBjb21wYXRpYmlsaXR5SlNPTjogdGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlKU09OLCBzaW1wbGlmeVBsdXJhbFN1ZmZpeDogdGhpcy5vcHRpb25zLnNpbXBsaWZ5UGx1cmFsU3VmZml4IH0pO1xuICAgICAgcy5pbnRlcnBvbGF0b3IgPSBuZXcgSW50ZXJwb2xhdG9yKHRoaXMub3B0aW9ucyk7XG5cbiAgICAgIHMuYmFja2VuZENvbm5lY3RvciA9IG5ldyBCYWNrZW5kQ29ubmVjdG9yKGNyZWF0ZUNsYXNzT25EZW1hbmQodGhpcy5tb2R1bGVzLmJhY2tlbmQpLCBzLnJlc291cmNlU3RvcmUsIHMsIHRoaXMub3B0aW9ucyk7XG4gICAgICAvLyBwaXBlIGV2ZW50cyBmcm9tIGJhY2tlbmRDb25uZWN0b3JcbiAgICAgIHMuYmFja2VuZENvbm5lY3Rvci5vbignKicsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIF90aGlzMi5lbWl0LmFwcGx5KF90aGlzMiwgW2V2ZW50XS5jb25jYXQoYXJncykpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLm1vZHVsZXMubGFuZ3VhZ2VEZXRlY3Rvcikge1xuICAgICAgICBzLmxhbmd1YWdlRGV0ZWN0b3IgPSBjcmVhdGVDbGFzc09uRGVtYW5kKHRoaXMubW9kdWxlcy5sYW5ndWFnZURldGVjdG9yKTtcbiAgICAgICAgcy5sYW5ndWFnZURldGVjdG9yLmluaXQocywgdGhpcy5vcHRpb25zLmRldGVjdGlvbiwgdGhpcy5vcHRpb25zKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMubW9kdWxlcy5pMThuRm9ybWF0KSB7XG4gICAgICAgIHMuaTE4bkZvcm1hdCA9IGNyZWF0ZUNsYXNzT25EZW1hbmQodGhpcy5tb2R1bGVzLmkxOG5Gb3JtYXQpO1xuICAgICAgICBpZiAocy5pMThuRm9ybWF0LmluaXQpIHMuaTE4bkZvcm1hdC5pbml0KHRoaXMpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnRyYW5zbGF0b3IgPSBuZXcgVHJhbnNsYXRvcih0aGlzLnNlcnZpY2VzLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgLy8gcGlwZSBldmVudHMgZnJvbSB0cmFuc2xhdG9yXG4gICAgICB0aGlzLnRyYW5zbGF0b3Iub24oJyonLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICAgIGFyZ3NbX2tleTIgLSAxXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpczIuZW1pdC5hcHBseShfdGhpczIsIFtldmVudF0uY29uY2F0KGFyZ3MpKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLm1vZHVsZXMuZXh0ZXJuYWwuZm9yRWFjaChmdW5jdGlvbiAobSkge1xuICAgICAgICBpZiAobS5pbml0KSBtLmluaXQoX3RoaXMyKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIGFwcGVuZCBhcGlcbiAgICB2YXIgc3RvcmVBcGkgPSBbJ2dldFJlc291cmNlJywgJ2FkZFJlc291cmNlJywgJ2FkZFJlc291cmNlcycsICdhZGRSZXNvdXJjZUJ1bmRsZScsICdyZW1vdmVSZXNvdXJjZUJ1bmRsZScsICdoYXNSZXNvdXJjZUJ1bmRsZScsICdnZXRSZXNvdXJjZUJ1bmRsZScsICdnZXREYXRhQnlMYW5ndWFnZSddO1xuICAgIHN0b3JlQXBpLmZvckVhY2goZnVuY3Rpb24gKGZjTmFtZSkge1xuICAgICAgX3RoaXMyW2ZjTmFtZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfc3RvcmU7XG5cbiAgICAgICAgcmV0dXJuIChfc3RvcmUgPSBfdGhpczIuc3RvcmUpW2ZjTmFtZV0uYXBwbHkoX3N0b3JlLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHZhciBsb2FkID0gZnVuY3Rpb24gbG9hZCgpIHtcbiAgICAgIF90aGlzMi5jaGFuZ2VMYW5ndWFnZShfdGhpczIub3B0aW9ucy5sbmcsIGZ1bmN0aW9uIChlcnIsIHQpIHtcbiAgICAgICAgX3RoaXMyLmlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgICBfdGhpczIubG9nZ2VyLmxvZygnaW5pdGlhbGl6ZWQnLCBfdGhpczIub3B0aW9ucyk7XG4gICAgICAgIF90aGlzMi5lbWl0KCdpbml0aWFsaXplZCcsIF90aGlzMi5vcHRpb25zKTtcblxuICAgICAgICBjYWxsYmFjayhlcnIsIHQpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMucmVzb3VyY2VzIHx8ICF0aGlzLm9wdGlvbnMuaW5pdEltbWVkaWF0ZSkge1xuICAgICAgbG9hZCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRUaW1lb3V0KGxvYWQsIDApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8qIGVzbGludCBjb25zaXN0ZW50LXJldHVybjogMCAqL1xuXG5cbiAgSTE4bi5wcm90b3R5cGUubG9hZFJlc291cmNlcyA9IGZ1bmN0aW9uIGxvYWRSZXNvdXJjZXMoKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB2YXIgY2FsbGJhY2sgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IG5vb3A7XG5cbiAgICBpZiAoIXRoaXMub3B0aW9ucy5yZXNvdXJjZXMpIHtcbiAgICAgIGlmICh0aGlzLmxhbmd1YWdlICYmIHRoaXMubGFuZ3VhZ2UudG9Mb3dlckNhc2UoKSA9PT0gJ2NpbW9kZScpIHJldHVybiBjYWxsYmFjaygpOyAvLyBhdm9pZCBsb2FkaW5nIHJlc291cmNlcyBmb3IgY2ltb2RlXG5cbiAgICAgIHZhciB0b0xvYWQgPSBbXTtcblxuICAgICAgdmFyIGFwcGVuZCA9IGZ1bmN0aW9uIGFwcGVuZChsbmcpIHtcbiAgICAgICAgaWYgKCFsbmcpIHJldHVybjtcbiAgICAgICAgdmFyIGxuZ3MgPSBfdGhpczMuc2VydmljZXMubGFuZ3VhZ2VVdGlscy50b1Jlc29sdmVIaWVyYXJjaHkobG5nKTtcbiAgICAgICAgbG5ncy5mb3JFYWNoKGZ1bmN0aW9uIChsKSB7XG4gICAgICAgICAgaWYgKHRvTG9hZC5pbmRleE9mKGwpIDwgMCkgdG9Mb2FkLnB1c2gobCk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgaWYgKCF0aGlzLmxhbmd1YWdlKSB7XG4gICAgICAgIC8vIGF0IGxlYXN0IGxvYWQgZmFsbGJhY2tzIGluIHRoaXMgY2FzZVxuICAgICAgICB2YXIgZmFsbGJhY2tzID0gdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZVV0aWxzLmdldEZhbGxiYWNrQ29kZXModGhpcy5vcHRpb25zLmZhbGxiYWNrTG5nKTtcbiAgICAgICAgZmFsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24gKGwpIHtcbiAgICAgICAgICByZXR1cm4gYXBwZW5kKGwpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFwcGVuZCh0aGlzLmxhbmd1YWdlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5wcmVsb2FkKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5wcmVsb2FkLmZvckVhY2goZnVuY3Rpb24gKGwpIHtcbiAgICAgICAgICByZXR1cm4gYXBwZW5kKGwpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zZXJ2aWNlcy5iYWNrZW5kQ29ubmVjdG9yLmxvYWQodG9Mb2FkLCB0aGlzLm9wdGlvbnMubnMsIGNhbGxiYWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgfVxuICB9O1xuXG4gIEkxOG4ucHJvdG90eXBlLnJlbG9hZFJlc291cmNlcyA9IGZ1bmN0aW9uIHJlbG9hZFJlc291cmNlcyhsbmdzLCBucywgY2FsbGJhY2spIHtcbiAgICBpZiAoIWxuZ3MpIGxuZ3MgPSB0aGlzLmxhbmd1YWdlcztcbiAgICBpZiAoIW5zKSBucyA9IHRoaXMub3B0aW9ucy5ucztcbiAgICBpZiAoIWNhbGxiYWNrKSBjYWxsYmFjayA9IGZ1bmN0aW9uIGNhbGxiYWNrKCkge307XG4gICAgdGhpcy5zZXJ2aWNlcy5iYWNrZW5kQ29ubmVjdG9yLnJlbG9hZChsbmdzLCBucywgY2FsbGJhY2spO1xuICB9O1xuXG4gIEkxOG4ucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIHVzZShtb2R1bGUpIHtcbiAgICBpZiAobW9kdWxlLnR5cGUgPT09ICdiYWNrZW5kJykge1xuICAgICAgdGhpcy5tb2R1bGVzLmJhY2tlbmQgPSBtb2R1bGU7XG4gICAgfVxuXG4gICAgaWYgKG1vZHVsZS50eXBlID09PSAnbG9nZ2VyJyB8fCBtb2R1bGUubG9nICYmIG1vZHVsZS53YXJuICYmIG1vZHVsZS5lcnJvcikge1xuICAgICAgdGhpcy5tb2R1bGVzLmxvZ2dlciA9IG1vZHVsZTtcbiAgICB9XG5cbiAgICBpZiAobW9kdWxlLnR5cGUgPT09ICdsYW5ndWFnZURldGVjdG9yJykge1xuICAgICAgdGhpcy5tb2R1bGVzLmxhbmd1YWdlRGV0ZWN0b3IgPSBtb2R1bGU7XG4gICAgfVxuXG4gICAgaWYgKG1vZHVsZS50eXBlID09PSAnaTE4bkZvcm1hdCcpIHtcbiAgICAgIHRoaXMubW9kdWxlcy5pMThuRm9ybWF0ID0gbW9kdWxlO1xuICAgIH1cblxuICAgIGlmIChtb2R1bGUudHlwZSA9PT0gJ3Bvc3RQcm9jZXNzb3InKSB7XG4gICAgICBwb3N0UHJvY2Vzc29yLmFkZFBvc3RQcm9jZXNzb3IobW9kdWxlKTtcbiAgICB9XG5cbiAgICBpZiAobW9kdWxlLnR5cGUgPT09ICczcmRQYXJ0eScpIHtcbiAgICAgIHRoaXMubW9kdWxlcy5leHRlcm5hbC5wdXNoKG1vZHVsZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgSTE4bi5wcm90b3R5cGUuY2hhbmdlTGFuZ3VhZ2UgPSBmdW5jdGlvbiBjaGFuZ2VMYW5ndWFnZShsbmcsIGNhbGxiYWNrKSB7XG4gICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICB2YXIgZG9uZSA9IGZ1bmN0aW9uIGRvbmUoZXJyLCBsKSB7XG4gICAgICBfdGhpczQudHJhbnNsYXRvci5jaGFuZ2VMYW5ndWFnZShsKTtcblxuICAgICAgaWYgKGwpIHtcbiAgICAgICAgX3RoaXM0LmVtaXQoJ2xhbmd1YWdlQ2hhbmdlZCcsIGwpO1xuICAgICAgICBfdGhpczQubG9nZ2VyLmxvZygnbGFuZ3VhZ2VDaGFuZ2VkJywgbCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soZXJyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpczQudC5hcHBseShfdGhpczQsIGFyZ3VtZW50cyk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdmFyIHNldExuZyA9IGZ1bmN0aW9uIHNldExuZyhsKSB7XG4gICAgICBpZiAobCkge1xuICAgICAgICBfdGhpczQubGFuZ3VhZ2UgPSBsO1xuICAgICAgICBfdGhpczQubGFuZ3VhZ2VzID0gX3RoaXM0LnNlcnZpY2VzLmxhbmd1YWdlVXRpbHMudG9SZXNvbHZlSGllcmFyY2h5KGwpO1xuICAgICAgICBpZiAoIV90aGlzNC50cmFuc2xhdG9yLmxhbmd1YWdlKSBfdGhpczQudHJhbnNsYXRvci5jaGFuZ2VMYW5ndWFnZShsKTtcblxuICAgICAgICBpZiAoX3RoaXM0LnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IpIF90aGlzNC5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmNhY2hlVXNlckxhbmd1YWdlKGwpO1xuICAgICAgfVxuXG4gICAgICBfdGhpczQubG9hZFJlc291cmNlcyhmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGRvbmUoZXJyLCBsKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBpZiAoIWxuZyAmJiB0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IgJiYgIXRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3Rvci5hc3luYykge1xuICAgICAgc2V0TG5nKHRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3Rvci5kZXRlY3QoKSk7XG4gICAgfSBlbHNlIGlmICghbG5nICYmIHRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3RvciAmJiB0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IuYXN5bmMpIHtcbiAgICAgIHRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3Rvci5kZXRlY3Qoc2V0TG5nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0TG5nKGxuZyk7XG4gICAgfVxuICB9O1xuXG4gIEkxOG4ucHJvdG90eXBlLmdldEZpeGVkVCA9IGZ1bmN0aW9uIGdldEZpeGVkVChsbmcsIG5zKSB7XG4gICAgdmFyIF90aGlzNSA9IHRoaXM7XG5cbiAgICB2YXIgZml4ZWRUID0gZnVuY3Rpb24gZml4ZWRUKGtleSwgb3B0cykge1xuICAgICAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gQXJyYXkoX2xlbjMgPiAyID8gX2xlbjMgLSAyIDogMCksIF9rZXkzID0gMjsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykge1xuICAgICAgICByZXN0W19rZXkzIC0gMl0gPSBhcmd1bWVudHNbX2tleTNdO1xuICAgICAgfVxuXG4gICAgICB2YXIgb3B0aW9ucyA9IF9leHRlbmRzKHt9LCBvcHRzKTtcbiAgICAgIGlmICgodHlwZW9mIG9wdHMgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKG9wdHMpKSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgb3B0aW9ucyA9IF90aGlzNS5vcHRpb25zLm92ZXJsb2FkVHJhbnNsYXRpb25PcHRpb25IYW5kbGVyKFtrZXksIG9wdHNdLmNvbmNhdChyZXN0KSk7XG4gICAgICB9XG5cbiAgICAgIG9wdGlvbnMubG5nID0gb3B0aW9ucy5sbmcgfHwgZml4ZWRULmxuZztcbiAgICAgIG9wdGlvbnMubG5ncyA9IG9wdGlvbnMubG5ncyB8fCBmaXhlZFQubG5ncztcbiAgICAgIG9wdGlvbnMubnMgPSBvcHRpb25zLm5zIHx8IGZpeGVkVC5ucztcbiAgICAgIHJldHVybiBfdGhpczUudChrZXksIG9wdGlvbnMpO1xuICAgIH07XG4gICAgaWYgKHR5cGVvZiBsbmcgPT09ICdzdHJpbmcnKSB7XG4gICAgICBmaXhlZFQubG5nID0gbG5nO1xuICAgIH0gZWxzZSB7XG4gICAgICBmaXhlZFQubG5ncyA9IGxuZztcbiAgICB9XG4gICAgZml4ZWRULm5zID0gbnM7XG4gICAgcmV0dXJuIGZpeGVkVDtcbiAgfTtcblxuICBJMThuLnByb3RvdHlwZS50ID0gZnVuY3Rpb24gdCgpIHtcbiAgICB2YXIgX3RyYW5zbGF0b3I7XG5cbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdG9yICYmIChfdHJhbnNsYXRvciA9IHRoaXMudHJhbnNsYXRvcikudHJhbnNsYXRlLmFwcGx5KF90cmFuc2xhdG9yLCBhcmd1bWVudHMpO1xuICB9O1xuXG4gIEkxOG4ucHJvdG90eXBlLmV4aXN0cyA9IGZ1bmN0aW9uIGV4aXN0cygpIHtcbiAgICB2YXIgX3RyYW5zbGF0b3IyO1xuXG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRvciAmJiAoX3RyYW5zbGF0b3IyID0gdGhpcy50cmFuc2xhdG9yKS5leGlzdHMuYXBwbHkoX3RyYW5zbGF0b3IyLCBhcmd1bWVudHMpO1xuICB9O1xuXG4gIEkxOG4ucHJvdG90eXBlLnNldERlZmF1bHROYW1lc3BhY2UgPSBmdW5jdGlvbiBzZXREZWZhdWx0TmFtZXNwYWNlKG5zKSB7XG4gICAgdGhpcy5vcHRpb25zLmRlZmF1bHROUyA9IG5zO1xuICB9O1xuXG4gIEkxOG4ucHJvdG90eXBlLmxvYWROYW1lc3BhY2VzID0gZnVuY3Rpb24gbG9hZE5hbWVzcGFjZXMobnMsIGNhbGxiYWNrKSB7XG4gICAgdmFyIF90aGlzNiA9IHRoaXM7XG5cbiAgICBpZiAoIXRoaXMub3B0aW9ucy5ucykgcmV0dXJuIGNhbGxiYWNrICYmIGNhbGxiYWNrKCk7XG4gICAgaWYgKHR5cGVvZiBucyA9PT0gJ3N0cmluZycpIG5zID0gW25zXTtcblxuICAgIG5zLmZvckVhY2goZnVuY3Rpb24gKG4pIHtcbiAgICAgIGlmIChfdGhpczYub3B0aW9ucy5ucy5pbmRleE9mKG4pIDwgMCkgX3RoaXM2Lm9wdGlvbnMubnMucHVzaChuKTtcbiAgICB9KTtcblxuICAgIHRoaXMubG9hZFJlc291cmNlcyhjYWxsYmFjayk7XG4gIH07XG5cbiAgSTE4bi5wcm90b3R5cGUubG9hZExhbmd1YWdlcyA9IGZ1bmN0aW9uIGxvYWRMYW5ndWFnZXMobG5ncywgY2FsbGJhY2spIHtcbiAgICBpZiAodHlwZW9mIGxuZ3MgPT09ICdzdHJpbmcnKSBsbmdzID0gW2xuZ3NdO1xuICAgIHZhciBwcmVsb2FkZWQgPSB0aGlzLm9wdGlvbnMucHJlbG9hZCB8fCBbXTtcblxuICAgIHZhciBuZXdMbmdzID0gbG5ncy5maWx0ZXIoZnVuY3Rpb24gKGxuZykge1xuICAgICAgcmV0dXJuIHByZWxvYWRlZC5pbmRleE9mKGxuZykgPCAwO1xuICAgIH0pO1xuICAgIC8vIEV4aXQgZWFybHkgaWYgYWxsIGdpdmVuIGxhbmd1YWdlcyBhcmUgYWxyZWFkeSBwcmVsb2FkZWRcbiAgICBpZiAoIW5ld0xuZ3MubGVuZ3RoKSByZXR1cm4gY2FsbGJhY2soKTtcblxuICAgIHRoaXMub3B0aW9ucy5wcmVsb2FkID0gcHJlbG9hZGVkLmNvbmNhdChuZXdMbmdzKTtcbiAgICB0aGlzLmxvYWRSZXNvdXJjZXMoY2FsbGJhY2spO1xuICB9O1xuXG4gIEkxOG4ucHJvdG90eXBlLmRpciA9IGZ1bmN0aW9uIGRpcihsbmcpIHtcbiAgICBpZiAoIWxuZykgbG5nID0gdGhpcy5sYW5ndWFnZXMgJiYgdGhpcy5sYW5ndWFnZXMubGVuZ3RoID4gMCA/IHRoaXMubGFuZ3VhZ2VzWzBdIDogdGhpcy5sYW5ndWFnZTtcbiAgICBpZiAoIWxuZykgcmV0dXJuICdydGwnO1xuXG4gICAgdmFyIHJ0bExuZ3MgPSBbJ2FyJywgJ3NodScsICdzcXInLCAnc3NoJywgJ3hhYScsICd5aGQnLCAneXVkJywgJ2FhbycsICdhYmgnLCAnYWJ2JywgJ2FjbScsICdhY3EnLCAnYWN3JywgJ2FjeCcsICdhY3knLCAnYWRmJywgJ2FkcycsICdhZWInLCAnYWVjJywgJ2FmYicsICdhanAnLCAnYXBjJywgJ2FwZCcsICdhcmInLCAnYXJxJywgJ2FycycsICdhcnknLCAnYXJ6JywgJ2F1eicsICdhdmwnLCAnYXloJywgJ2F5bCcsICdheW4nLCAnYXlwJywgJ2JieicsICdwZ2EnLCAnaGUnLCAnaXcnLCAncHMnLCAncGJ0JywgJ3BidScsICdwc3QnLCAncHJwJywgJ3ByZCcsICd1cicsICd5ZGQnLCAneWRzJywgJ3lpaCcsICdqaScsICd5aScsICdoYm8nLCAnbWVuJywgJ3htbicsICdmYScsICdqcHInLCAncGVvJywgJ3BlcycsICdwcnMnLCAnZHYnLCAnc2FtJ107XG5cbiAgICByZXR1cm4gcnRsTG5ncy5pbmRleE9mKHRoaXMuc2VydmljZXMubGFuZ3VhZ2VVdGlscy5nZXRMYW5ndWFnZVBhcnRGcm9tQ29kZShsbmcpKSA+PSAwID8gJ3J0bCcgOiAnbHRyJztcbiAgfTtcblxuICAvKiBlc2xpbnQgY2xhc3MtbWV0aG9kcy11c2UtdGhpczogMCAqL1xuXG5cbiAgSTE4bi5wcm90b3R5cGUuY3JlYXRlSW5zdGFuY2UgPSBmdW5jdGlvbiBjcmVhdGVJbnN0YW5jZSgpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzWzFdO1xuXG4gICAgcmV0dXJuIG5ldyBJMThuKG9wdGlvbnMsIGNhbGxiYWNrKTtcbiAgfTtcblxuICBJMThuLnByb3RvdHlwZS5jbG9uZUluc3RhbmNlID0gZnVuY3Rpb24gY2xvbmVJbnN0YW5jZSgpIHtcbiAgICB2YXIgX3RoaXM3ID0gdGhpcztcblxuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICB2YXIgY2FsbGJhY2sgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IG5vb3A7XG5cbiAgICB2YXIgbWVyZ2VkT3B0aW9ucyA9IF9leHRlbmRzKHt9LCB0aGlzLm9wdGlvbnMsIG9wdGlvbnMsIHsgaXNDbG9uZTogdHJ1ZSB9KTtcbiAgICB2YXIgY2xvbmUgPSBuZXcgSTE4bihtZXJnZWRPcHRpb25zKTtcbiAgICB2YXIgbWVtYmVyc1RvQ29weSA9IFsnc3RvcmUnLCAnc2VydmljZXMnLCAnbGFuZ3VhZ2UnXTtcbiAgICBtZW1iZXJzVG9Db3B5LmZvckVhY2goZnVuY3Rpb24gKG0pIHtcbiAgICAgIGNsb25lW21dID0gX3RoaXM3W21dO1xuICAgIH0pO1xuICAgIGNsb25lLnRyYW5zbGF0b3IgPSBuZXcgVHJhbnNsYXRvcihjbG9uZS5zZXJ2aWNlcywgY2xvbmUub3B0aW9ucyk7XG4gICAgY2xvbmUudHJhbnNsYXRvci5vbignKicsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgZm9yICh2YXIgX2xlbjQgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbjQgPiAxID8gX2xlbjQgLSAxIDogMCksIF9rZXk0ID0gMTsgX2tleTQgPCBfbGVuNDsgX2tleTQrKykge1xuICAgICAgICBhcmdzW19rZXk0IC0gMV0gPSBhcmd1bWVudHNbX2tleTRdO1xuICAgICAgfVxuXG4gICAgICBjbG9uZS5lbWl0LmFwcGx5KGNsb25lLCBbZXZlbnRdLmNvbmNhdChhcmdzKSk7XG4gICAgfSk7XG4gICAgY2xvbmUuaW5pdChtZXJnZWRPcHRpb25zLCBjYWxsYmFjayk7XG4gICAgY2xvbmUudHJhbnNsYXRvci5vcHRpb25zID0gY2xvbmUub3B0aW9uczsgLy8gc3luYyBvcHRpb25zXG5cbiAgICByZXR1cm4gY2xvbmU7XG4gIH07XG5cbiAgcmV0dXJuIEkxOG47XG59KEV2ZW50RW1pdHRlcik7XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBJMThuKCk7IiwiaW1wb3J0IGkxOG5leHQgZnJvbSAnLi9pMThuZXh0LmpzJztcblxuZXhwb3J0IGRlZmF1bHQgaTE4bmV4dDtcblxuZXhwb3J0IHZhciBjaGFuZ2VMYW5ndWFnZSA9IGkxOG5leHQuY2hhbmdlTGFuZ3VhZ2UuYmluZChpMThuZXh0KTtcbmV4cG9ydCB2YXIgY2xvbmVJbnN0YW5jZSA9IGkxOG5leHQuY2xvbmVJbnN0YW5jZS5iaW5kKGkxOG5leHQpO1xuZXhwb3J0IHZhciBjcmVhdGVJbnN0YW5jZSA9IGkxOG5leHQuY3JlYXRlSW5zdGFuY2UuYmluZChpMThuZXh0KTtcbmV4cG9ydCB2YXIgZGlyID0gaTE4bmV4dC5kaXIuYmluZChpMThuZXh0KTtcbmV4cG9ydCB2YXIgZXhpc3RzID0gaTE4bmV4dC5leGlzdHMuYmluZChpMThuZXh0KTtcbmV4cG9ydCB2YXIgZ2V0Rml4ZWRUID0gaTE4bmV4dC5nZXRGaXhlZFQuYmluZChpMThuZXh0KTtcbmV4cG9ydCB2YXIgaW5pdCA9IGkxOG5leHQuaW5pdC5iaW5kKGkxOG5leHQpO1xuZXhwb3J0IHZhciBsb2FkTGFuZ3VhZ2VzID0gaTE4bmV4dC5sb2FkTGFuZ3VhZ2VzLmJpbmQoaTE4bmV4dCk7XG5leHBvcnQgdmFyIGxvYWROYW1lc3BhY2VzID0gaTE4bmV4dC5sb2FkTmFtZXNwYWNlcy5iaW5kKGkxOG5leHQpO1xuZXhwb3J0IHZhciBsb2FkUmVzb3VyY2VzID0gaTE4bmV4dC5sb2FkUmVzb3VyY2VzLmJpbmQoaTE4bmV4dCk7XG5leHBvcnQgdmFyIG9mZiA9IGkxOG5leHQub2ZmLmJpbmQoaTE4bmV4dCk7XG5leHBvcnQgdmFyIG9uID0gaTE4bmV4dC5vbi5iaW5kKGkxOG5leHQpO1xuZXhwb3J0IHZhciBzZXREZWZhdWx0TmFtZXNwYWNlID0gaTE4bmV4dC5zZXREZWZhdWx0TmFtZXNwYWNlLmJpbmQoaTE4bmV4dCk7XG5leHBvcnQgdmFyIHQgPSBpMThuZXh0LnQuYmluZChpMThuZXh0KTtcbmV4cG9ydCB2YXIgdXNlID0gaTE4bmV4dC51c2UuYmluZChpMThuZXh0KTsiLCJ2YXIgX2NsYXNzLCBfdGVtcDtcblxuXG5cbmltcG9ydCAqIGFzIExvZ01hbmFnZXIgZnJvbSAnYXVyZWxpYS1sb2dnaW5nJztcbmltcG9ydCBpMThuZXh0IGZyb20gJ2kxOG5leHQnO1xuaW1wb3J0IHsgRE9NLCBQTEFURk9STSB9IGZyb20gJ2F1cmVsaWEtcGFsJztcbmltcG9ydCB7IEV2ZW50QWdncmVnYXRvciB9IGZyb20gJ2F1cmVsaWEtZXZlbnQtYWdncmVnYXRvcic7XG5pbXBvcnQgeyBCaW5kaW5nU2lnbmFsZXIgfSBmcm9tICdhdXJlbGlhLXRlbXBsYXRpbmctcmVzb3VyY2VzJztcblxuZXhwb3J0IHZhciBJMThOID0gKF90ZW1wID0gX2NsYXNzID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBJMThOKGVhLCBzaWduYWxlcikge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBcblxuICAgIHRoaXMuZ2xvYmFsVmFycyA9IHt9O1xuICAgIHRoaXMucGFyYW1zID0ge307XG4gICAgdGhpcy5pMThuZXh0RGVmZXJlZCA9IHtcbiAgICAgIHJlc29sdmU6IG51bGwsXG4gICAgICBwcm9taXNlOiBudWxsXG4gICAgfTtcblxuICAgIHRoaXMuaTE4bmV4dCA9IGkxOG5leHQ7XG4gICAgdGhpcy5lYSA9IGVhO1xuICAgIHRoaXMuSW50bCA9IFBMQVRGT1JNLmdsb2JhbC5JbnRsO1xuICAgIHRoaXMuc2lnbmFsZXIgPSBzaWduYWxlcjtcbiAgICB0aGlzLmkxOG5leHREZWZlcmVkLnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgcmV0dXJuIF90aGlzLmkxOG5leHREZWZlcmVkLnJlc29sdmUgPSByZXNvbHZlO1xuICAgIH0pO1xuICB9XG5cbiAgSTE4Ti5wcm90b3R5cGUuc2V0dXAgPSBmdW5jdGlvbiBzZXR1cChvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICB2YXIgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICBza2lwVHJhbnNsYXRpb25Pbk1pc3NpbmdLZXk6IGZhbHNlLFxuICAgICAgY29tcGF0aWJpbGl0eUFQSTogJ3YxJyxcbiAgICAgIGNvbXBhdGliaWxpdHlKU09OOiAndjEnLFxuICAgICAgbG5nOiAnZW4nLFxuICAgICAgYXR0cmlidXRlczogWyd0JywgJ2kxOG4nXSxcbiAgICAgIGZhbGxiYWNrTG5nOiAnZW4nLFxuICAgICAgZGVidWc6IGZhbHNlXG4gICAgfTtcblxuICAgIGkxOG5leHQuaW5pdChvcHRpb25zIHx8IGRlZmF1bHRPcHRpb25zLCBmdW5jdGlvbiAoZXJyLCB0KSB7XG4gICAgICBpZiAoaTE4bmV4dC5vcHRpb25zLmF0dHJpYnV0ZXMgaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICAgICAgaTE4bmV4dC5vcHRpb25zLmF0dHJpYnV0ZXMgPSBbaTE4bmV4dC5vcHRpb25zLmF0dHJpYnV0ZXNdO1xuICAgICAgfVxuXG4gICAgICBfdGhpczIuaTE4bmV4dERlZmVyZWQucmVzb2x2ZShfdGhpczIuaTE4bmV4dCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5pMThuZXh0RGVmZXJlZC5wcm9taXNlO1xuICB9O1xuXG4gIEkxOE4ucHJvdG90eXBlLmkxOG5leHRSZWFkeSA9IGZ1bmN0aW9uIGkxOG5leHRSZWFkeSgpIHtcbiAgICByZXR1cm4gdGhpcy5pMThuZXh0RGVmZXJlZC5wcm9taXNlO1xuICB9O1xuXG4gIEkxOE4ucHJvdG90eXBlLnNldExvY2FsZSA9IGZ1bmN0aW9uIHNldExvY2FsZShsb2NhbGUpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgdmFyIG9sZExvY2FsZSA9IF90aGlzMy5nZXRMb2NhbGUoKTtcbiAgICAgIF90aGlzMy5pMThuZXh0LmNoYW5nZUxhbmd1YWdlKGxvY2FsZSwgZnVuY3Rpb24gKGVyciwgdHIpIHtcbiAgICAgICAgX3RoaXMzLmVhLnB1Ymxpc2goJ2kxOG46bG9jYWxlOmNoYW5nZWQnLCB7IG9sZFZhbHVlOiBvbGRMb2NhbGUsIG5ld1ZhbHVlOiBsb2NhbGUgfSk7XG4gICAgICAgIF90aGlzMy5zaWduYWxlci5zaWduYWwoJ2F1cmVsaWEtdHJhbnNsYXRpb24tc2lnbmFsJyk7XG4gICAgICAgIHJlc29sdmUodHIpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgSTE4Ti5wcm90b3R5cGUuZ2V0TG9jYWxlID0gZnVuY3Rpb24gZ2V0TG9jYWxlKCkge1xuICAgIHJldHVybiB0aGlzLmkxOG5leHQubGFuZ3VhZ2U7XG4gIH07XG5cbiAgSTE4Ti5wcm90b3R5cGUubmYgPSBmdW5jdGlvbiBuZihvcHRpb25zLCBsb2NhbGVzKSB7XG4gICAgcmV0dXJuIG5ldyB0aGlzLkludGwuTnVtYmVyRm9ybWF0KGxvY2FsZXMgfHwgdGhpcy5nZXRMb2NhbGUoKSwgb3B0aW9ucyB8fCB7fSk7XG4gIH07XG5cbiAgSTE4Ti5wcm90b3R5cGUudWYgPSBmdW5jdGlvbiB1ZihudW1iZXIsIGxvY2FsZSkge1xuICAgIHZhciBuZiA9IHRoaXMubmYoe30sIGxvY2FsZSB8fCB0aGlzLmdldExvY2FsZSgpKTtcbiAgICB2YXIgY29tcGFyZXIgPSBuZi5mb3JtYXQoMTAwMDAgLyAzKTtcblxuICAgIHZhciB0aG91c2FuZFNlcGFyYXRvciA9IGNvbXBhcmVyWzFdO1xuICAgIHZhciBkZWNpbWFsU2VwYXJhdG9yID0gY29tcGFyZXJbNV07XG5cbiAgICBpZiAodGhvdXNhbmRTZXBhcmF0b3IgPT09ICcuJykge1xuICAgICAgdGhvdXNhbmRTZXBhcmF0b3IgPSAnXFxcXC4nO1xuICAgIH1cblxuICAgIHZhciByZXN1bHQgPSBudW1iZXIucmVwbGFjZShuZXcgUmVnRXhwKHRob3VzYW5kU2VwYXJhdG9yLCAnZycpLCAnJykucmVwbGFjZSgvW15cXGQuLC1dL2csICcnKS5yZXBsYWNlKGRlY2ltYWxTZXBhcmF0b3IsICcuJyk7XG5cbiAgICByZXR1cm4gTnVtYmVyKHJlc3VsdCk7XG4gIH07XG5cbiAgSTE4Ti5wcm90b3R5cGUuZGYgPSBmdW5jdGlvbiBkZihvcHRpb25zLCBsb2NhbGVzKSB7XG4gICAgcmV0dXJuIG5ldyB0aGlzLkludGwuRGF0ZVRpbWVGb3JtYXQobG9jYWxlcyB8fCB0aGlzLmdldExvY2FsZSgpLCBvcHRpb25zKTtcbiAgfTtcblxuICBJMThOLnByb3RvdHlwZS50ciA9IGZ1bmN0aW9uIHRyKGtleSwgb3B0aW9ucykge1xuICAgIHZhciBmdWxsT3B0aW9ucyA9IHRoaXMuZ2xvYmFsVmFycztcblxuICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGZ1bGxPcHRpb25zID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB0aGlzLmdsb2JhbFZhcnMpLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5pMThuZXh0LnQoa2V5LCBmdWxsT3B0aW9ucyk7XG4gIH07XG5cbiAgSTE4Ti5wcm90b3R5cGUucmVnaXN0ZXJHbG9iYWxWYXJpYWJsZSA9IGZ1bmN0aW9uIHJlZ2lzdGVyR2xvYmFsVmFyaWFibGUoa2V5LCB2YWx1ZSkge1xuICAgIHRoaXMuZ2xvYmFsVmFyc1trZXldID0gdmFsdWU7XG4gIH07XG5cbiAgSTE4Ti5wcm90b3R5cGUudW5yZWdpc3Rlckdsb2JhbFZhcmlhYmxlID0gZnVuY3Rpb24gdW5yZWdpc3Rlckdsb2JhbFZhcmlhYmxlKGtleSkge1xuICAgIGRlbGV0ZSB0aGlzLmdsb2JhbFZhcnNba2V5XTtcbiAgfTtcblxuICBJMThOLnByb3RvdHlwZS51cGRhdGVUcmFuc2xhdGlvbnMgPSBmdW5jdGlvbiB1cGRhdGVUcmFuc2xhdGlvbnMoZWwpIHtcbiAgICBpZiAoIWVsIHx8ICFlbC5xdWVyeVNlbGVjdG9yQWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGkgPSB2b2lkIDA7XG4gICAgdmFyIGwgPSB2b2lkIDA7XG5cbiAgICB2YXIgc2VsZWN0b3IgPSBbXS5jb25jYXQodGhpcy5pMThuZXh0Lm9wdGlvbnMuYXR0cmlidXRlcyk7XG4gICAgZm9yIChpID0gMCwgbCA9IHNlbGVjdG9yLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgc2VsZWN0b3JbaV0gPSAnWycgKyBzZWxlY3RvcltpXSArICddJztcbiAgICB9c2VsZWN0b3IgPSBzZWxlY3Rvci5qb2luKCcsJyk7XG5cbiAgICB2YXIgbm9kZXMgPSBlbC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcbiAgICBmb3IgKGkgPSAwLCBsID0gbm9kZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgdmFyIGtleXMgPSB2b2lkIDA7XG4gICAgICB2YXIgcGFyYW1zID0gdm9pZCAwO1xuXG4gICAgICBmb3IgKHZhciBpMiA9IDAsIGwyID0gdGhpcy5pMThuZXh0Lm9wdGlvbnMuYXR0cmlidXRlcy5sZW5ndGg7IGkyIDwgbDI7IGkyKyspIHtcbiAgICAgICAga2V5cyA9IG5vZGUuZ2V0QXR0cmlidXRlKHRoaXMuaTE4bmV4dC5vcHRpb25zLmF0dHJpYnV0ZXNbaTJdKTtcbiAgICAgICAgdmFyIHBuYW1lID0gdGhpcy5pMThuZXh0Lm9wdGlvbnMuYXR0cmlidXRlc1tpMl0gKyAnLXBhcmFtcyc7XG5cbiAgICAgICAgaWYgKHBuYW1lICYmIG5vZGUuYXUgJiYgbm9kZS5hdVtwbmFtZV0pIHtcbiAgICAgICAgICBwYXJhbXMgPSBub2RlLmF1W3BuYW1lXS52aWV3TW9kZWwudmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2V5cykgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmICgha2V5cykgY29udGludWU7XG5cbiAgICAgIHRoaXMudXBkYXRlVmFsdWUobm9kZSwga2V5cywgcGFyYW1zKTtcbiAgICB9XG4gIH07XG5cbiAgSTE4Ti5wcm90b3R5cGUudXBkYXRlVmFsdWUgPSBmdW5jdGlvbiB1cGRhdGVWYWx1ZShub2RlLCB2YWx1ZSwgcGFyYW1zKSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIga2V5cyA9IHZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoJzsnKTtcbiAgICB2YXIgaSA9IGtleXMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG5cbiAgICAgIHZhciByZSA9IC9cXFsoW2EtelxcLSwgXSopXFxdL2lnO1xuXG4gICAgICB2YXIgbSA9IHZvaWQgMDtcbiAgICAgIHZhciBhdHRyID0gJ3RleHQnO1xuXG4gICAgICBpZiAobm9kZS5ub2RlTmFtZSA9PT0gJ0lNRycpIGF0dHIgPSAnc3JjJztcblxuICAgICAgd2hpbGUgKChtID0gcmUuZXhlYyhrZXkpKSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAobS5pbmRleCA9PT0gcmUubGFzdEluZGV4KSB7XG4gICAgICAgICAgcmUubGFzdEluZGV4Kys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG0pIHtcbiAgICAgICAgICBrZXkgPSBrZXkucmVwbGFjZShtWzBdLCAnJyk7XG4gICAgICAgICAgYXR0ciA9IG1bMV07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGF0dHJzID0gYXR0ci5zcGxpdCgnLCcpO1xuICAgICAgdmFyIGogPSBhdHRycy5sZW5ndGg7XG5cbiAgICAgIHdoaWxlIChqLS0pIHtcbiAgICAgICAgYXR0ciA9IGF0dHJzW2pdLnRyaW0oKTtcblxuICAgICAgICBpZiAoIW5vZGUuX3RleHRDb250ZW50KSBub2RlLl90ZXh0Q29udGVudCA9IG5vZGUudGV4dENvbnRlbnQ7XG4gICAgICAgIGlmICghbm9kZS5faW5uZXJIVE1MKSBub2RlLl9pbm5lckhUTUwgPSBub2RlLmlubmVySFRNTDtcblxuICAgICAgICB2YXIgYXR0ckNDID0gYXR0ci5yZXBsYWNlKC8tKFthLXpdKS9nLCBmdW5jdGlvbiAoZykge1xuICAgICAgICAgIHJldHVybiBnWzFdLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgcmVzZXJ2ZWROYW1lcyA9IFsncHJlcGVuZCcsICdhcHBlbmQnLCAndGV4dCcsICdodG1sJ107XG4gICAgICAgIHZhciBpMThuTG9nZ2VyID0gTG9nTWFuYWdlci5nZXRMb2dnZXIoJ2kxOG4nKTtcblxuICAgICAgICBpZiAocmVzZXJ2ZWROYW1lcy5pbmRleE9mKGF0dHIpID4gLTEgJiYgbm9kZS5hdSAmJiBub2RlLmF1LmNvbnRyb2xsZXIgJiYgbm9kZS5hdS5jb250cm9sbGVyLnZpZXdNb2RlbCAmJiBhdHRyQ0MgaW4gbm9kZS5hdS5jb250cm9sbGVyLnZpZXdNb2RlbCkge1xuICAgICAgICAgIGkxOG5Mb2dnZXIud2FybignQXVyZWxpYSBJMThOIHJlc2VydmVkIGF0dHJpYnV0ZSBuYW1lXFxuXFxuICBbJyArIHJlc2VydmVkTmFtZXMuam9pbignLCAnKSArICddXFxuXFxuICBZb3VyIGN1c3RvbSBlbGVtZW50IGhhcyBhIGJpbmRhYmxlIG5hbWVkICcgKyBhdHRyICsgJyB3aGljaCBpcyBhIHJlc2VydmVkIHdvcmQuXFxuXFxuICBJZiB5b3VcXCdkIGxpa2UgQXVyZWxpYSBJMThOIHRvIHRyYW5zbGF0ZSB5b3VyIGJpbmRhYmxlIGluc3RlYWQsIHBsZWFzZSBjb25zaWRlciBnaXZpbmcgaXQgYW5vdGhlciBuYW1lLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaTE4bmV4dC5vcHRpb25zLnNraXBUcmFuc2xhdGlvbk9uTWlzc2luZ0tleSAmJiB0aGlzLnRyKGtleSwgcGFyYW1zKSA9PT0ga2V5KSB7XG4gICAgICAgICAgaTE4bkxvZ2dlci53YXJuKCdDb3VsZG5cXCd0IGZpbmQgdHJhbnNsYXRpb24gZm9yIGtleTogJyArIGtleSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoIChhdHRyKSB7XG4gICAgICAgICAgY2FzZSAndGV4dCc6XG4gICAgICAgICAgICB2YXIgbmV3Q2hpbGQgPSBET00uY3JlYXRlVGV4dE5vZGUodGhpcy50cihrZXksIHBhcmFtcykpO1xuICAgICAgICAgICAgaWYgKG5vZGUuX25ld0NoaWxkICYmIG5vZGUuX25ld0NoaWxkLnBhcmVudE5vZGUgPT09IG5vZGUpIHtcbiAgICAgICAgICAgICAgbm9kZS5yZW1vdmVDaGlsZChub2RlLl9uZXdDaGlsZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5vZGUuX25ld0NoaWxkID0gbmV3Q2hpbGQ7XG4gICAgICAgICAgICB3aGlsZSAobm9kZS5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICAgIG5vZGUucmVtb3ZlQ2hpbGQobm9kZS5maXJzdENoaWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5vZGUuYXBwZW5kQ2hpbGQobm9kZS5fbmV3Q2hpbGQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAncHJlcGVuZCc6XG4gICAgICAgICAgICB2YXIgcHJlcGVuZFBhcnNlciA9IERPTS5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHByZXBlbmRQYXJzZXIuaW5uZXJIVE1MID0gdGhpcy50cihrZXksIHBhcmFtcyk7XG4gICAgICAgICAgICBmb3IgKHZhciBuaSA9IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGggLSAxOyBuaSA+PSAwOyBuaS0tKSB7XG4gICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkTm9kZXNbbmldLl9wcmVwZW5kZWQpIHtcbiAgICAgICAgICAgICAgICBub2RlLnJlbW92ZUNoaWxkKG5vZGUuY2hpbGROb2Rlc1tuaV0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAodmFyIHBpID0gcHJlcGVuZFBhcnNlci5jaGlsZE5vZGVzLmxlbmd0aCAtIDE7IHBpID49IDA7IHBpLS0pIHtcbiAgICAgICAgICAgICAgcHJlcGVuZFBhcnNlci5jaGlsZE5vZGVzW3BpXS5fcHJlcGVuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgaWYgKG5vZGUuZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgICAgIG5vZGUuaW5zZXJ0QmVmb3JlKHByZXBlbmRQYXJzZXIuY2hpbGROb2Rlc1twaV0sIG5vZGUuZmlyc3RDaGlsZCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbm9kZS5hcHBlbmRDaGlsZChwcmVwZW5kUGFyc2VyLmNoaWxkTm9kZXNbcGldKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnYXBwZW5kJzpcbiAgICAgICAgICAgIHZhciBhcHBlbmRQYXJzZXIgPSBET00uY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBhcHBlbmRQYXJzZXIuaW5uZXJIVE1MID0gdGhpcy50cihrZXksIHBhcmFtcyk7XG4gICAgICAgICAgICBmb3IgKHZhciBfbmkgPSBub2RlLmNoaWxkTm9kZXMubGVuZ3RoIC0gMTsgX25pID49IDA7IF9uaS0tKSB7XG4gICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkTm9kZXNbX25pXS5fYXBwZW5kZWQpIHtcbiAgICAgICAgICAgICAgICBub2RlLnJlbW92ZUNoaWxkKG5vZGUuY2hpbGROb2Rlc1tfbmldKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3aGlsZSAoYXBwZW5kUGFyc2VyLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICAgICAgYXBwZW5kUGFyc2VyLmZpcnN0Q2hpbGQuX2FwcGVuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgbm9kZS5hcHBlbmRDaGlsZChhcHBlbmRQYXJzZXIuZmlyc3RDaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdodG1sJzpcbiAgICAgICAgICAgIG5vZGUuaW5uZXJIVE1MID0gdGhpcy50cihrZXksIHBhcmFtcyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgaWYgKG5vZGUuYXUgJiYgbm9kZS5hdS5jb250cm9sbGVyICYmIG5vZGUuYXUuY29udHJvbGxlci52aWV3TW9kZWwgJiYgYXR0ckNDIGluIG5vZGUuYXUuY29udHJvbGxlci52aWV3TW9kZWwpIHtcbiAgICAgICAgICAgICAgbm9kZS5hdS5jb250cm9sbGVyLnZpZXdNb2RlbFthdHRyQ0NdID0gdGhpcy50cihrZXksIHBhcmFtcyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShhdHRyLCB0aGlzLnRyKGtleSwgcGFyYW1zKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBJMThOO1xufSgpLCBfY2xhc3MuaW5qZWN0ID0gW0V2ZW50QWdncmVnYXRvciwgQmluZGluZ1NpZ25hbGVyXSwgX3RlbXApOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9\n")},90:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var suffixes = {\n        0: '-ші',\n        1: '-ші',\n        2: '-ші',\n        3: '-ші',\n        4: '-ші',\n        5: '-ші',\n        6: '-шы',\n        7: '-ші',\n        8: '-ші',\n        9: '-шы',\n        10: '-шы',\n        20: '-шы',\n        30: '-шы',\n        40: '-шы',\n        50: '-ші',\n        60: '-шы',\n        70: '-ші',\n        80: '-ші',\n        90: '-шы',\n        100: '-ші'\n    };\n\n    var kk = moment.defineLocale('kk', {\n        months : 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split('_'),\n        monthsShort : 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'),\n        weekdays : 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split('_'),\n        weekdaysShort : 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'),\n        weekdaysMin : 'жк_дй_сй_ср_бй_жм_сн'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Бүгін сағат] LT',\n            nextDay : '[Ертең сағат] LT',\n            nextWeek : 'dddd [сағат] LT',\n            lastDay : '[Кеше сағат] LT',\n            lastWeek : '[Өткен аптаның] dddd [сағат] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s ішінде',\n            past : '%s бұрын',\n            s : 'бірнеше секунд',\n            ss : '%d секунд',\n            m : 'бір минут',\n            mm : '%d минут',\n            h : 'бір сағат',\n            hh : '%d сағат',\n            d : 'бір күн',\n            dd : '%d күн',\n            M : 'бір ай',\n            MM : '%d ай',\n            y : 'бір жыл',\n            yy : '%d жыл'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ші|шы)/,\n        ordinal : function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return kk;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ray5qcz82ZDc5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiOTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBzdWZmaXhlcyA9IHtcbiAgICAgICAgMDogJy3RiNGWJyxcbiAgICAgICAgMTogJy3RiNGWJyxcbiAgICAgICAgMjogJy3RiNGWJyxcbiAgICAgICAgMzogJy3RiNGWJyxcbiAgICAgICAgNDogJy3RiNGWJyxcbiAgICAgICAgNTogJy3RiNGWJyxcbiAgICAgICAgNjogJy3RiNGLJyxcbiAgICAgICAgNzogJy3RiNGWJyxcbiAgICAgICAgODogJy3RiNGWJyxcbiAgICAgICAgOTogJy3RiNGLJyxcbiAgICAgICAgMTA6ICct0YjRiycsXG4gICAgICAgIDIwOiAnLdGI0YsnLFxuICAgICAgICAzMDogJy3RiNGLJyxcbiAgICAgICAgNDA6ICct0YjRiycsXG4gICAgICAgIDUwOiAnLdGI0ZYnLFxuICAgICAgICA2MDogJy3RiNGLJyxcbiAgICAgICAgNzA6ICct0YjRlicsXG4gICAgICAgIDgwOiAnLdGI0ZYnLFxuICAgICAgICA5MDogJy3RiNGLJyxcbiAgICAgICAgMTAwOiAnLdGI0ZYnXG4gICAgfTtcblxuICAgIHZhciBrayA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2trJywge1xuICAgICAgICBtb250aHMgOiAn0pvQsNKj0YLQsNGAX9Cw0pvQv9Cw0L1f0L3QsNGD0YDRi9C3X9GB05nRg9GW0YBf0LzQsNC80YvRgF/QvNCw0YPRgdGL0Lxf0YjRltC70LTQtV/RgtCw0LzRi9C3X9Kb0YvRgNC60q/QudC10Lpf0pvQsNC30LDQvV/Sm9Cw0YDQsNGI0LBf0LbQtdC70YLQvtKb0YHQsNC9Jy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICfSm9Cw0qNf0LDSm9C/X9C90LDRg1/RgdOZ0YNf0LzQsNC8X9C80LDRg1/RiNGW0Ltf0YLQsNC8X9Kb0YvRgF/Sm9Cw0Ldf0pvQsNGAX9C20LXQuycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXMgOiAn0LbQtdC60YHQtdC90LHRll/QtNKv0LnRgdC10L3QsdGWX9GB0LXQudGB0LXQvdCx0ZZf0YHTmdGA0YHQtdC90LHRll/QsdC10LnRgdC10L3QsdGWX9C20rHQvNCwX9GB0LXQvdCx0ZYnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAn0LbQtdC6X9C00q/QuV/RgdC10Llf0YHTmdGAX9Cx0LXQuV/QttKx0Lxf0YHQtdC9Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICfQttC6X9C00Llf0YHQuV/RgdGAX9Cx0Llf0LbQvF/RgdC9Jy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICdb0JHSr9Cz0ZbQvSDRgdCw0pPQsNGCXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5IDogJ1vQldGA0YLQtdKjINGB0LDSk9Cw0YJdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrIDogJ2RkZGQgW9GB0LDSk9Cw0YJdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXkgOiAnW9Ca0LXRiNC1INGB0LDSk9Cw0YJdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogJ1vTqNGC0LrQtdC9INCw0L/RgtCw0L3Ri9KjXSBkZGRkIFvRgdCw0pPQsNGCXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnJXMg0ZbRiNGW0L3QtNC1JyxcbiAgICAgICAgICAgIHBhc3QgOiAnJXMg0LHSsdGA0YvQvScsXG4gICAgICAgICAgICBzIDogJ9Cx0ZbRgNC90LXRiNC1INGB0LXQutGD0L3QtCcsXG4gICAgICAgICAgICBzcyA6ICclZCDRgdC10LrRg9C90LQnLFxuICAgICAgICAgICAgbSA6ICfQsdGW0YAg0LzQuNC90YPRgicsXG4gICAgICAgICAgICBtbSA6ICclZCDQvNC40L3Rg9GCJyxcbiAgICAgICAgICAgIGggOiAn0LHRltGAINGB0LDSk9Cw0YInLFxuICAgICAgICAgICAgaGggOiAnJWQg0YHQsNKT0LDRgicsXG4gICAgICAgICAgICBkIDogJ9Cx0ZbRgCDQutKv0L0nLFxuICAgICAgICAgICAgZGQgOiAnJWQg0LrSr9C9JyxcbiAgICAgICAgICAgIE0gOiAn0LHRltGAINCw0LknLFxuICAgICAgICAgICAgTU0gOiAnJWQg0LDQuScsXG4gICAgICAgICAgICB5IDogJ9Cx0ZbRgCDQttGL0LsnLFxuICAgICAgICAgICAgeXkgOiAnJWQg0LbRi9C7J1xuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0tKNGI0ZZ80YjRiykvLFxuICAgICAgICBvcmRpbmFsIDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGEgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBiID0gbnVtYmVyID49IDEwMCA/IDEwMCA6IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKHN1ZmZpeGVzW251bWJlcl0gfHwgc3VmZml4ZXNbYV0gfHwgc3VmZml4ZXNbYl0pO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA3ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxc3QgaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBraztcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///90\n")},91:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var ka = moment.defineLocale('ka', {\n        months : {\n            standalone: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'),\n            format: 'იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს'.split('_')\n        },\n        monthsShort : 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),\n        weekdays : {\n            standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'),\n            format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_'),\n            isFormat: /(წინა|შემდეგ)/\n        },\n        weekdaysShort : 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),\n        weekdaysMin : 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY h:mm A',\n            LLLL : 'dddd, D MMMM YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : '[დღეს] LT[-ზე]',\n            nextDay : '[ხვალ] LT[-ზე]',\n            lastDay : '[გუშინ] LT[-ზე]',\n            nextWeek : '[შემდეგ] dddd LT[-ზე]',\n            lastWeek : '[წინა] dddd LT-ზე',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : function (s) {\n                return (/(წამი|წუთი|საათი|წელი)/).test(s) ?\n                    s.replace(/ი$/, 'ში') :\n                    s + 'ში';\n            },\n            past : function (s) {\n                if ((/(წამი|წუთი|საათი|დღე|თვე)/).test(s)) {\n                    return s.replace(/(ი|ე)$/, 'ის წინ');\n                }\n                if ((/წელი/).test(s)) {\n                    return s.replace(/წელი$/, 'წლის წინ');\n                }\n            },\n            s : 'რამდენიმე წამი',\n            ss : '%d წამი',\n            m : 'წუთი',\n            mm : '%d წუთი',\n            h : 'საათი',\n            hh : '%d საათი',\n            d : 'დღე',\n            dd : '%d დღე',\n            M : 'თვე',\n            MM : '%d თვე',\n            y : 'წელი',\n            yy : '%d წელი'\n        },\n        dayOfMonthOrdinalParse: /0|1-ლი|მე-\\d{1,2}|\\d{1,2}-ე/,\n        ordinal : function (number) {\n            if (number === 0) {\n                return number;\n            }\n            if (number === 1) {\n                return number + '-ლი';\n            }\n            if ((number < 20) || (number <= 100 && (number % 20 === 0)) || (number % 100 === 0)) {\n                return 'მე-' + number;\n            }\n            return number + '-ე';\n        },\n        week : {\n            dow : 1,\n            doy : 7\n        }\n    });\n\n    return ka;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9rYS5qcz8yMDFiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCw4Q0FBOEMsSUFBSSxJQUFJLElBQUk7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiI5MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIGthID0gbW9tZW50LmRlZmluZUxvY2FsZSgna2EnLCB7XG4gICAgICAgIG1vbnRocyA6IHtcbiAgICAgICAgICAgIHN0YW5kYWxvbmU6ICfhg5jhg5Dhg5zhg5Xhg5Dhg6Dhg5hf4YOX4YOU4YOR4YOU4YOg4YOV4YOQ4YOa4YOYX+GDm+GDkOGDoOGDouGDmF/hg5Dhg57hg6Dhg5jhg5rhg5hf4YOb4YOQ4YOY4YOh4YOYX+GDmOGDleGDnOGDmOGDoeGDmF/hg5jhg5Xhg5rhg5jhg6Hhg5hf4YOQ4YOS4YOV4YOY4YOh4YOi4YOdX+GDoeGDlOGDpeGDouGDlOGDm+GDkeGDlOGDoOGDmF/hg53hg6Xhg6Lhg53hg5vhg5Hhg5Thg6Dhg5hf4YOc4YOd4YOU4YOb4YOR4YOU4YOg4YOYX+GDk+GDlOGDmeGDlOGDm+GDkeGDlOGDoOGDmCcuc3BsaXQoJ18nKSxcbiAgICAgICAgICAgIGZvcm1hdDogJ+GDmOGDkOGDnOGDleGDkOGDoOGDoV/hg5fhg5Thg5Hhg5Thg6Dhg5Xhg5Dhg5rhg6Ff4YOb4YOQ4YOg4YOi4YOhX+GDkOGDnuGDoOGDmOGDmuGDmOGDoV/hg5vhg5Dhg5jhg6Hhg6Ff4YOY4YOV4YOc4YOY4YOh4YOhX+GDmOGDleGDmuGDmOGDoeGDoV/hg5Dhg5Lhg5Xhg5jhg6Hhg6Lhg6Ff4YOh4YOU4YOl4YOi4YOU4YOb4YOR4YOU4YOg4YOhX+GDneGDpeGDouGDneGDm+GDkeGDlOGDoOGDoV/hg5zhg53hg5Thg5vhg5Hhg5Thg6Dhg6Ff4YOT4YOU4YOZ4YOU4YOb4YOR4YOU4YOg4YOhJy5zcGxpdCgnXycpXG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ+GDmOGDkOGDnF/hg5fhg5Thg5Ff4YOb4YOQ4YOgX+GDkOGDnuGDoF/hg5vhg5Dhg5hf4YOY4YOV4YOcX+GDmOGDleGDml/hg5Dhg5Lhg5Vf4YOh4YOU4YOlX+GDneGDpeGDol/hg5zhg53hg5Rf4YOT4YOU4YOZJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6IHtcbiAgICAgICAgICAgIHN0YW5kYWxvbmU6ICfhg5nhg5Xhg5jhg6Dhg5Bf4YOd4YOg4YOo4YOQ4YOR4YOQ4YOX4YOYX+GDoeGDkOGDm+GDqOGDkOGDkeGDkOGDl+GDmF/hg53hg5fhg67hg6jhg5Dhg5Hhg5Dhg5fhg5hf4YOu4YOj4YOX4YOo4YOQ4YOR4YOQ4YOX4YOYX+GDnuGDkOGDoOGDkOGDoeGDmeGDlOGDleGDmF/hg6jhg5Dhg5Hhg5Dhg5fhg5gnLnNwbGl0KCdfJyksXG4gICAgICAgICAgICBmb3JtYXQ6ICfhg5nhg5Xhg5jhg6Dhg5Dhg6Ff4YOd4YOg4YOo4YOQ4YOR4YOQ4YOX4YOhX+GDoeGDkOGDm+GDqOGDkOGDkeGDkOGDl+GDoV/hg53hg5fhg67hg6jhg5Dhg5Hhg5Dhg5fhg6Ff4YOu4YOj4YOX4YOo4YOQ4YOR4YOQ4YOX4YOhX+GDnuGDkOGDoOGDkOGDoeGDmeGDlOGDleGDoV/hg6jhg5Dhg5Hhg5Dhg5fhg6EnLnNwbGl0KCdfJyksXG4gICAgICAgICAgICBpc0Zvcm1hdDogLyjhg6zhg5jhg5zhg5B84YOo4YOU4YOb4YOT4YOU4YOSKS9cbiAgICAgICAgfSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICfhg5nhg5Xhg5hf4YOd4YOg4YOoX+GDoeGDkOGDm1/hg53hg5fhg65f4YOu4YOj4YOXX+GDnuGDkOGDoF/hg6jhg5Dhg5EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ+GDmeGDlV/hg53hg6Bf4YOh4YOQX+GDneGDl1/hg67hg6Nf4YOe4YOQX+GDqOGDkCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdoOm1tIEEnLFxuICAgICAgICAgICAgTFRTIDogJ2g6bW06c3MgQScsXG4gICAgICAgICAgICBMIDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIGg6bW0gQScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1vhg5Phg6bhg5Thg6FdIExUWy3hg5bhg5RdJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW+GDruGDleGDkOGDml0gTFRbLeGDluGDlF0nLFxuICAgICAgICAgICAgbGFzdERheSA6ICdb4YOS4YOj4YOo4YOY4YOcXSBMVFst4YOW4YOUXScsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdb4YOo4YOU4YOb4YOT4YOU4YOSXSBkZGRkIExUWy3hg5bhg5RdJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogJ1vhg6zhg5jhg5zhg5BdIGRkZGQgTFQt4YOW4YOUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6IGZ1bmN0aW9uIChzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICgvKOGDrOGDkOGDm+GDmHzhg6zhg6Phg5fhg5h84YOh4YOQ4YOQ4YOX4YOYfOGDrOGDlOGDmuGDmCkvKS50ZXN0KHMpID9cbiAgICAgICAgICAgICAgICAgICAgcy5yZXBsYWNlKC/hg5gkLywgJ+GDqOGDmCcpIDpcbiAgICAgICAgICAgICAgICAgICAgcyArICfhg6jhg5gnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhc3QgOiBmdW5jdGlvbiAocykge1xuICAgICAgICAgICAgICAgIGlmICgoLyjhg6zhg5Dhg5vhg5h84YOs4YOj4YOX4YOYfOGDoeGDkOGDkOGDl+GDmHzhg5Phg6bhg5R84YOX4YOV4YOUKS8pLnRlc3QocykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgvKOGDmHzhg5QpJC8sICfhg5jhg6Eg4YOs4YOY4YOcJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgoL+GDrOGDlOGDmuGDmC8pLnRlc3QocykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgv4YOs4YOU4YOa4YOYJC8sICfhg6zhg5rhg5jhg6Eg4YOs4YOY4YOcJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHMgOiAn4YOg4YOQ4YOb4YOT4YOU4YOc4YOY4YOb4YOUIOGDrOGDkOGDm+GDmCcsXG4gICAgICAgICAgICBzcyA6ICclZCDhg6zhg5Dhg5vhg5gnLFxuICAgICAgICAgICAgbSA6ICfhg6zhg6Phg5fhg5gnLFxuICAgICAgICAgICAgbW0gOiAnJWQg4YOs4YOj4YOX4YOYJyxcbiAgICAgICAgICAgIGggOiAn4YOh4YOQ4YOQ4YOX4YOYJyxcbiAgICAgICAgICAgIGhoIDogJyVkIOGDoeGDkOGDkOGDl+GDmCcsXG4gICAgICAgICAgICBkIDogJ+GDk+GDpuGDlCcsXG4gICAgICAgICAgICBkZCA6ICclZCDhg5Phg6bhg5QnLFxuICAgICAgICAgICAgTSA6ICfhg5fhg5Xhg5QnLFxuICAgICAgICAgICAgTU0gOiAnJWQg4YOX4YOV4YOUJyxcbiAgICAgICAgICAgIHkgOiAn4YOs4YOU4YOa4YOYJyxcbiAgICAgICAgICAgIHl5IDogJyVkIOGDrOGDlOGDmuGDmCdcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogLzB8MS3hg5rhg5h84YOb4YOULVxcZHsxLDJ9fFxcZHsxLDJ9LeGDlC8sXG4gICAgICAgIG9yZGluYWwgOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICBpZiAobnVtYmVyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3hg5rhg5gnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChudW1iZXIgPCAyMCkgfHwgKG51bWJlciA8PSAxMDAgJiYgKG51bWJlciAlIDIwID09PSAwKSkgfHwgKG51bWJlciAlIDEwMCA9PT0gMCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+GDm+GDlC0nICsgbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct4YOUJztcbiAgICAgICAgfSxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsXG4gICAgICAgICAgICBkb3kgOiA3XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBrYTtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///91\n")},92:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var jv = moment.defineLocale('jv', {\n        months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),\n        weekdays : 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),\n        weekdaysShort : 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),\n        weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),\n        longDateFormat : {\n            LT : 'HH.mm',\n            LTS : 'HH.mm.ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY [pukul] HH.mm',\n            LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n        },\n        meridiemParse: /enjing|siyang|sonten|ndalu/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'enjing') {\n                return hour;\n            } else if (meridiem === 'siyang') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'sonten' || meridiem === 'ndalu') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'enjing';\n            } else if (hours < 15) {\n                return 'siyang';\n            } else if (hours < 19) {\n                return 'sonten';\n            } else {\n                return 'ndalu';\n            }\n        },\n        calendar : {\n            sameDay : '[Dinten puniko pukul] LT',\n            nextDay : '[Mbenjang pukul] LT',\n            nextWeek : 'dddd [pukul] LT',\n            lastDay : '[Kala wingi pukul] LT',\n            lastWeek : 'dddd [kepengker pukul] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'wonten ing %s',\n            past : '%s ingkang kepengker',\n            s : 'sawetawis detik',\n            ss : '%d detik',\n            m : 'setunggal menit',\n            mm : '%d menit',\n            h : 'setunggal jam',\n            hh : '%d jam',\n            d : 'sedinten',\n            dd : '%d dinten',\n            M : 'sewulan',\n            MM : '%d wulan',\n            y : 'setaun',\n            yy : '%d taun'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return jv;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9qdi5qcz9iNTQwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiI5Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIGp2ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnanYnLCB7XG4gICAgICAgIG1vbnRocyA6ICdKYW51YXJpX0ZlYnJ1YXJpX01hcmV0X0FwcmlsX01laV9KdW5pX0p1bGlfQWd1c3R1c19TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3BlbWJlcl9EZXNlbWJlcicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAnSmFuX0ZlYl9NYXJfQXByX01laV9KdW5fSnVsX0Fnc19TZXBfT2t0X05vcF9EZXMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzIDogJ01pbmdndV9TZW5lbl9TZWxvc29fUmVidV9LZW1pc19KZW11d2FoX1NlcHR1Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ01pbl9TZW5fU2VsX1JlYl9LZW1fSmVtX1NlcCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAnTWdfU25fU2xfUmJfS21fSm1fU3AnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEgubW0nLFxuICAgICAgICAgICAgTFRTIDogJ0hILm1tLnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQsIEQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0nXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC9lbmppbmd8c2l5YW5nfHNvbnRlbnxuZGFsdS8sXG4gICAgICAgIG1lcmlkaWVtSG91ciA6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICdlbmppbmcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAnc2l5YW5nJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDExID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICdzb250ZW4nIHx8IG1lcmlkaWVtID09PSAnbmRhbHUnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW0gOiBmdW5jdGlvbiAoaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VycyA8IDExKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdlbmppbmcnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VycyA8IDE1KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdzaXlhbmcnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VycyA8IDE5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdzb250ZW4nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ25kYWx1JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1tEaW50ZW4gcHVuaWtvIHB1a3VsXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5IDogJ1tNYmVuamFuZyBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnZGRkZCBbcHVrdWxdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXkgOiAnW0thbGEgd2luZ2kgcHVrdWxdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogJ2RkZGQgW2tlcGVuZ2tlciBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ3dvbnRlbiBpbmcgJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICclcyBpbmdrYW5nIGtlcGVuZ2tlcicsXG4gICAgICAgICAgICBzIDogJ3Nhd2V0YXdpcyBkZXRpaycsXG4gICAgICAgICAgICBzcyA6ICclZCBkZXRpaycsXG4gICAgICAgICAgICBtIDogJ3NldHVuZ2dhbCBtZW5pdCcsXG4gICAgICAgICAgICBtbSA6ICclZCBtZW5pdCcsXG4gICAgICAgICAgICBoIDogJ3NldHVuZ2dhbCBqYW0nLFxuICAgICAgICAgICAgaGggOiAnJWQgamFtJyxcbiAgICAgICAgICAgIGQgOiAnc2VkaW50ZW4nLFxuICAgICAgICAgICAgZGQgOiAnJWQgZGludGVuJyxcbiAgICAgICAgICAgIE0gOiAnc2V3dWxhbicsXG4gICAgICAgICAgICBNTSA6ICclZCB3dWxhbicsXG4gICAgICAgICAgICB5IDogJ3NldGF1bicsXG4gICAgICAgICAgICB5eSA6ICclZCB0YXVuJ1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA3ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxc3QgaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBqdjtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///92\n")},93:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var ja = moment.defineLocale('ja', {\n        months : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n        monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n        weekdays : '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),\n        weekdaysShort : '日_月_火_水_木_金_土'.split('_'),\n        weekdaysMin : '日_月_火_水_木_金_土'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY/MM/DD',\n            LL : 'YYYY年M月D日',\n            LLL : 'YYYY年M月D日 HH:mm',\n            LLLL : 'YYYY年M月D日 dddd HH:mm',\n            l : 'YYYY/MM/DD',\n            ll : 'YYYY年M月D日',\n            lll : 'YYYY年M月D日 HH:mm',\n            llll : 'YYYY年M月D日(ddd) HH:mm'\n        },\n        meridiemParse: /午前|午後/i,\n        isPM : function (input) {\n            return input === '午後';\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return '午前';\n            } else {\n                return '午後';\n            }\n        },\n        calendar : {\n            sameDay : '[今日] LT',\n            nextDay : '[明日] LT',\n            nextWeek : function (now) {\n                if (now.week() < this.week()) {\n                    return '[来週]dddd LT';\n                } else {\n                    return 'dddd LT';\n                }\n            },\n            lastDay : '[昨日] LT',\n            lastWeek : function (now) {\n                if (this.week() < now.week()) {\n                    return '[先週]dddd LT';\n                } else {\n                    return 'dddd LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}日/,\n        ordinal : function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                default:\n                    return number;\n            }\n        },\n        relativeTime : {\n            future : '%s後',\n            past : '%s前',\n            s : '数秒',\n            ss : '%d秒',\n            m : '1分',\n            mm : '%d分',\n            h : '1時間',\n            hh : '%d時間',\n            d : '1日',\n            dd : '%d日',\n            M : '1ヶ月',\n            MM : '%dヶ月',\n            y : '1年',\n            yy : '%d年'\n        }\n    });\n\n    return ja;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9qYS5qcz8wNzllIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNULHFDQUFxQyxJQUFJO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiI5My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIGphID0gbW9tZW50LmRlZmluZUxvY2FsZSgnamEnLCB7XG4gICAgICAgIG1vbnRocyA6ICcx5pyIXzLmnIhfM+aciF805pyIXzXmnIhfNuaciF835pyIXzjmnIhfOeaciF8xMOaciF8xMeaciF8xMuaciCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAnMeaciF8y5pyIXzPmnIhfNOaciF815pyIXzbmnIhfN+aciF845pyIXznmnIhfMTDmnIhfMTHmnIhfMTLmnIgnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzIDogJ+aXpeabnOaXpV/mnIjmm5zml6Vf54Gr5puc5pelX+awtOabnOaXpV/mnKjmm5zml6Vf6YeR5puc5pelX+Wcn+abnOaXpScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICfml6Vf5pyIX+eBq1/msLRf5pyoX+mHkV/lnJ8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ+aXpV/mnIhf54GrX+awtF/mnKhf6YeRX+Wcnycuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdISDptbScsXG4gICAgICAgICAgICBMVFMgOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdZWVlZL01NL0REJyxcbiAgICAgICAgICAgIExMIDogJ1lZWVnlubRN5pyIROaXpScsXG4gICAgICAgICAgICBMTEwgOiAnWVlZWeW5tE3mnIhE5pelIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnWVlZWeW5tE3mnIhE5pelIGRkZGQgSEg6bW0nLFxuICAgICAgICAgICAgbCA6ICdZWVlZL01NL0REJyxcbiAgICAgICAgICAgIGxsIDogJ1lZWVnlubRN5pyIROaXpScsXG4gICAgICAgICAgICBsbGwgOiAnWVlZWeW5tE3mnIhE5pelIEhIOm1tJyxcbiAgICAgICAgICAgIGxsbGwgOiAnWVlZWeW5tE3mnIhE5pelKGRkZCkgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/ljYjliY185Y2I5b6ML2ksXG4gICAgICAgIGlzUE0gOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCA9PT0gJ+WNiOW+jCc7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtIDogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5Y2I5YmNJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfljYjlvownO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgOiAnW+S7iuaXpV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICdb5piO5pelXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6IGZ1bmN0aW9uIChub3cpIHtcbiAgICAgICAgICAgICAgICBpZiAobm93LndlZWsoKSA8IHRoaXMud2VlaygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW+adpemAsV1kZGRkIExUJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2RkZGQgTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5IDogJ1vmmKjml6VdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogZnVuY3Rpb24gKG5vdykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLndlZWsoKSA8IG5vdy53ZWVrKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb5YWI6YCxXWRkZGQgTFQnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnZGRkZCBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2UgOiAvXFxkezEsMn3ml6UvLFxuICAgICAgICBvcmRpbmFsIDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn5pelJztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnJXPlvownLFxuICAgICAgICAgICAgcGFzdCA6ICclc+WJjScsXG4gICAgICAgICAgICBzIDogJ+aVsOenkicsXG4gICAgICAgICAgICBzcyA6ICclZOenkicsXG4gICAgICAgICAgICBtIDogJzHliIYnLFxuICAgICAgICAgICAgbW0gOiAnJWTliIYnLFxuICAgICAgICAgICAgaCA6ICcx5pmC6ZaTJyxcbiAgICAgICAgICAgIGhoIDogJyVk5pmC6ZaTJyxcbiAgICAgICAgICAgIGQgOiAnMeaXpScsXG4gICAgICAgICAgICBkZCA6ICclZOaXpScsXG4gICAgICAgICAgICBNIDogJzHjg7bmnIgnLFxuICAgICAgICAgICAgTU0gOiAnJWTjg7bmnIgnLFxuICAgICAgICAgICAgeSA6ICcx5bm0JyxcbiAgICAgICAgICAgIHl5IDogJyVk5bm0J1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gamE7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///93\n")},94:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var it = moment.defineLocale('it', {\n        months : 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'),\n        monthsShort : 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n        weekdays : 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split('_'),\n        weekdaysShort : 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n        weekdaysMin : 'do_lu_ma_me_gi_ve_sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Oggi alle] LT',\n            nextDay: '[Domani alle] LT',\n            nextWeek: 'dddd [alle] LT',\n            lastDay: '[Ieri alle] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[la scorsa] dddd [alle] LT';\n                    default:\n                        return '[lo scorso] dddd [alle] LT';\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : function (s) {\n                return ((/^[0-9].+$/).test(s) ? 'tra' : 'in') + ' ' + s;\n            },\n            past : '%s fa',\n            s : 'alcuni secondi',\n            ss : '%d secondi',\n            m : 'un minuto',\n            mm : '%d minuti',\n            h : 'un\\'ora',\n            hh : '%d ore',\n            d : 'un giorno',\n            dd : '%d giorni',\n            M : 'un mese',\n            MM : '%d mesi',\n            y : 'un anno',\n            yy : '%d anni'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal: '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return it;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9pdC5qcz82ZTk4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULHFDQUFxQyxJQUFJO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiOTQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBpdCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2l0Jywge1xuICAgICAgICBtb250aHMgOiAnZ2VubmFpb19mZWJicmFpb19tYXJ6b19hcHJpbGVfbWFnZ2lvX2dpdWdub19sdWdsaW9fYWdvc3RvX3NldHRlbWJyZV9vdHRvYnJlX25vdmVtYnJlX2RpY2VtYnJlJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICdnZW5fZmViX21hcl9hcHJfbWFnX2dpdV9sdWdfYWdvX3NldF9vdHRfbm92X2RpYycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXMgOiAnZG9tZW5pY2FfbHVuZWTDrF9tYXJ0ZWTDrF9tZXJjb2xlZMOsX2dpb3ZlZMOsX3ZlbmVyZMOsX3NhYmF0bycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICdkb21fbHVuX21hcl9tZXJfZ2lvX3Zlbl9zYWInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ2RvX2x1X21hX21lX2dpX3ZlX3NhJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW09nZ2kgYWxsZV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tEb21hbmkgYWxsZV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthbGxlXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0llcmkgYWxsZV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbbGEgc2NvcnNhXSBkZGRkIFthbGxlXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1tsbyBzY29yc29dIGRkZGQgW2FsbGVdIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiBmdW5jdGlvbiAocykge1xuICAgICAgICAgICAgICAgIHJldHVybiAoKC9eWzAtOV0uKyQvKS50ZXN0KHMpID8gJ3RyYScgOiAnaW4nKSArICcgJyArIHM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGFzdCA6ICclcyBmYScsXG4gICAgICAgICAgICBzIDogJ2FsY3VuaSBzZWNvbmRpJyxcbiAgICAgICAgICAgIHNzIDogJyVkIHNlY29uZGknLFxuICAgICAgICAgICAgbSA6ICd1biBtaW51dG8nLFxuICAgICAgICAgICAgbW0gOiAnJWQgbWludXRpJyxcbiAgICAgICAgICAgIGggOiAndW5cXCdvcmEnLFxuICAgICAgICAgICAgaGggOiAnJWQgb3JlJyxcbiAgICAgICAgICAgIGQgOiAndW4gZ2lvcm5vJyxcbiAgICAgICAgICAgIGRkIDogJyVkIGdpb3JuaScsXG4gICAgICAgICAgICBNIDogJ3VuIG1lc2UnLFxuICAgICAgICAgICAgTU0gOiAnJWQgbWVzaScsXG4gICAgICAgICAgICB5IDogJ3VuIGFubm8nLFxuICAgICAgICAgICAgeXkgOiAnJWQgYW5uaSdcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZSA6IC9cXGR7MSwyfcK6LyxcbiAgICAgICAgb3JkaW5hbDogJyVkwronLFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA0ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBpdDtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///94\n")},95:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    function plural(n) {\n        if (n % 100 === 11) {\n            return true;\n        } else if (n % 10 === 1) {\n            return false;\n        }\n        return true;\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':\n                return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum';\n            case 'ss':\n                if (plural(number)) {\n                    return result + (withoutSuffix || isFuture ? 'sekúndur' : 'sekúndum');\n                }\n                return result + 'sekúnda';\n            case 'm':\n                return withoutSuffix ? 'mínúta' : 'mínútu';\n            case 'mm':\n                if (plural(number)) {\n                    return result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum');\n                } else if (withoutSuffix) {\n                    return result + 'mínúta';\n                }\n                return result + 'mínútu';\n            case 'hh':\n                if (plural(number)) {\n                    return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum');\n                }\n                return result + 'klukkustund';\n            case 'd':\n                if (withoutSuffix) {\n                    return 'dagur';\n                }\n                return isFuture ? 'dag' : 'degi';\n            case 'dd':\n                if (plural(number)) {\n                    if (withoutSuffix) {\n                        return result + 'dagar';\n                    }\n                    return result + (isFuture ? 'daga' : 'dögum');\n                } else if (withoutSuffix) {\n                    return result + 'dagur';\n                }\n                return result + (isFuture ? 'dag' : 'degi');\n            case 'M':\n                if (withoutSuffix) {\n                    return 'mánuður';\n                }\n                return isFuture ? 'mánuð' : 'mánuði';\n            case 'MM':\n                if (plural(number)) {\n                    if (withoutSuffix) {\n                        return result + 'mánuðir';\n                    }\n                    return result + (isFuture ? 'mánuði' : 'mánuðum');\n                } else if (withoutSuffix) {\n                    return result + 'mánuður';\n                }\n                return result + (isFuture ? 'mánuð' : 'mánuði');\n            case 'y':\n                return withoutSuffix || isFuture ? 'ár' : 'ári';\n            case 'yy':\n                if (plural(number)) {\n                    return result + (withoutSuffix || isFuture ? 'ár' : 'árum');\n                }\n                return result + (withoutSuffix || isFuture ? 'ár' : 'ári');\n        }\n    }\n\n    var is = moment.defineLocale('is', {\n        months : 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),\n        weekdays : 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split('_'),\n        weekdaysShort : 'sun_mán_þri_mið_fim_fös_lau'.split('_'),\n        weekdaysMin : 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY [kl.] H:mm',\n            LLLL : 'dddd, D. MMMM YYYY [kl.] H:mm'\n        },\n        calendar : {\n            sameDay : '[í dag kl.] LT',\n            nextDay : '[á morgun kl.] LT',\n            nextWeek : 'dddd [kl.] LT',\n            lastDay : '[í gær kl.] LT',\n            lastWeek : '[síðasta] dddd [kl.] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'eftir %s',\n            past : 'fyrir %s síðan',\n            s : translate,\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : 'klukkustund',\n            hh : translate,\n            d : translate,\n            dd : translate,\n            M : translate,\n            MM : translate,\n            y : translate,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return is;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9pcy5qcz8wNTU4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiOTUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIGZ1bmN0aW9uIHBsdXJhbChuKSB7XG4gICAgICAgIGlmIChuICUgMTAwID09PSAxMSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAobiAlIDEwID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IG51bWJlciArICcgJztcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ3MnOlxuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ25va2tyYXIgc2Vrw7puZHVyJyA6ICdub2trcnVtIHNla8O6bmR1bSc7XG4gICAgICAgICAgICBjYXNlICdzcyc6XG4gICAgICAgICAgICAgICAgaWYgKHBsdXJhbChudW1iZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdzZWvDum5kdXInIDogJ3Nla8O6bmR1bScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ3Nla8O6bmRhJztcbiAgICAgICAgICAgIGNhc2UgJ20nOlxuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ23DrW7DunRhJyA6ICdtw61uw7p0dSc7XG4gICAgICAgICAgICBjYXNlICdtbSc6XG4gICAgICAgICAgICAgICAgaWYgKHBsdXJhbChudW1iZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdtw61uw7p0dXInIDogJ23DrW7DunR1bScpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ23DrW7DunRhJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdtw61uw7p0dSc7XG4gICAgICAgICAgICBjYXNlICdoaCc6XG4gICAgICAgICAgICAgICAgaWYgKHBsdXJhbChudW1iZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdrbHVra3VzdHVuZGlyJyA6ICdrbHVra3VzdHVuZHVtJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAna2x1a2t1c3R1bmQnO1xuICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdkYWd1cic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBpc0Z1dHVyZSA/ICdkYWcnIDogJ2RlZ2knO1xuICAgICAgICAgICAgY2FzZSAnZGQnOlxuICAgICAgICAgICAgICAgIGlmIChwbHVyYWwobnVtYmVyKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdkYWdhcic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChpc0Z1dHVyZSA/ICdkYWdhJyA6ICdkw7ZndW0nKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdkYWd1cic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAoaXNGdXR1cmUgPyAnZGFnJyA6ICdkZWdpJyk7XG4gICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ23DoW51w7B1cic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBpc0Z1dHVyZSA/ICdtw6FudcOwJyA6ICdtw6FudcOwaSc7XG4gICAgICAgICAgICBjYXNlICdNTSc6XG4gICAgICAgICAgICAgICAgaWYgKHBsdXJhbChudW1iZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ23DoW51w7Bpcic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChpc0Z1dHVyZSA/ICdtw6FudcOwaScgOiAnbcOhbnXDsHVtJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnbcOhbnXDsHVyJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChpc0Z1dHVyZSA/ICdtw6FudcOwJyA6ICdtw6FudcOwaScpO1xuICAgICAgICAgICAgY2FzZSAneSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnw6FyJyA6ICfDoXJpJztcbiAgICAgICAgICAgIGNhc2UgJ3l5JzpcbiAgICAgICAgICAgICAgICBpZiAocGx1cmFsKG51bWJlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ8OhcicgOiAnw6FydW0nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ8OhcicgOiAnw6FyaScpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGlzID0gbW9tZW50LmRlZmluZUxvY2FsZSgnaXMnLCB7XG4gICAgICAgIG1vbnRocyA6ICdqYW7DumFyX2ZlYnLDumFyX21hcnNfYXByw61sX21hw61fasO6bsOtX2rDumzDrV/DoWfDunN0X3NlcHRlbWJlcl9va3TDs2Jlcl9uw7N2ZW1iZXJfZGVzZW1iZXInLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ2phbl9mZWJfbWFyX2Fwcl9tYcOtX2rDum5fasO6bF/DoWfDul9zZXBfb2t0X27Ds3ZfZGVzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6ICdzdW5udWRhZ3VyX23DoW51ZGFndXJfw75yacOwanVkYWd1cl9tacOwdmlrdWRhZ3VyX2ZpbW10dWRhZ3VyX2bDtnN0dWRhZ3VyX2xhdWdhcmRhZ3VyJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ3N1bl9tw6FuX8O+cmlfbWnDsF9maW1fZsO2c19sYXUnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ1N1X03DoV/DnnJfTWlfRmlfRsO2X0xhJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRC4gTU1NTSBZWVlZIFtrbC5dIEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBELiBNTU1NIFlZWVkgW2tsLl0gSDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1vDrSBkYWcga2wuXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5IDogJ1vDoSBtb3JndW4ga2wuXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdkZGRkIFtrbC5dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXkgOiAnW8OtIGfDpnIga2wuXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlayA6ICdbc8Otw7Bhc3RhXSBkZGRkIFtrbC5dIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICdlZnRpciAlcycsXG4gICAgICAgICAgICBwYXN0IDogJ2Z5cmlyICVzIHPDrcOwYW4nLFxuICAgICAgICAgICAgcyA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHNzIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbSA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1tIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaCA6ICdrbHVra3VzdHVuZCcsXG4gICAgICAgICAgICBoaCA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGQgOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkZCA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE0gOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNTSA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHkgOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5eSA6IHRyYW5zbGF0ZVxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsIDogJyVkLicsXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGlzO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///95\n")},96:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var id = moment.defineLocale('id', {\n        months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'),\n        weekdays : 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),\n        weekdaysShort : 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),\n        weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat : {\n            LT : 'HH.mm',\n            LTS : 'HH.mm.ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY [pukul] HH.mm',\n            LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n        },\n        meridiemParse: /pagi|siang|sore|malam/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'siang') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'sore' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'siang';\n            } else if (hours < 19) {\n                return 'sore';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar : {\n            sameDay : '[Hari ini pukul] LT',\n            nextDay : '[Besok pukul] LT',\n            nextWeek : 'dddd [pukul] LT',\n            lastDay : '[Kemarin pukul] LT',\n            lastWeek : 'dddd [lalu pukul] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'dalam %s',\n            past : '%s yang lalu',\n            s : 'beberapa detik',\n            ss : '%d detik',\n            m : 'semenit',\n            mm : '%d menit',\n            h : 'sejam',\n            hh : '%d jam',\n            d : 'sehari',\n            dd : '%d hari',\n            M : 'sebulan',\n            MM : '%d bulan',\n            y : 'setahun',\n            yy : '%d tahun'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return id;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9pZC5qcz81MDM4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiI5Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIGlkID0gbW9tZW50LmRlZmluZUxvY2FsZSgnaWQnLCB7XG4gICAgICAgIG1vbnRocyA6ICdKYW51YXJpX0ZlYnJ1YXJpX01hcmV0X0FwcmlsX01laV9KdW5pX0p1bGlfQWd1c3R1c19TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXNlbWJlcicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAnSmFuX0ZlYl9NYXJfQXByX01laV9KdW5fSnVsX0FndF9TZXBfT2t0X05vdl9EZXMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzIDogJ01pbmdndV9TZW5pbl9TZWxhc2FfUmFidV9LYW1pc19KdW1hdF9TYWJ0dScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICdNaW5fU2VuX1NlbF9SYWJfS2FtX0p1bV9TYWInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ01nX1NuX1NsX1JiX0ttX0ptX1NiJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hILm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISC5tbS5zcycsXG4gICAgICAgICAgICBMIDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tJ1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAvcGFnaXxzaWFuZ3xzb3JlfG1hbGFtLyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyIDogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ3BhZ2knKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAnc2lhbmcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTEgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ3NvcmUnIHx8IG1lcmlkaWVtID09PSAnbWFsYW0nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW0gOiBmdW5jdGlvbiAoaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VycyA8IDExKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdwYWdpJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91cnMgPCAxNSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnc2lhbmcnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VycyA8IDE5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdzb3JlJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdtYWxhbSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICdbSGFyaSBpbmkgcHVrdWxdIExUJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW0Jlc29rIHB1a3VsXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdkZGRkIFtwdWt1bF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdbS2VtYXJpbiBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiAnZGRkZCBbbGFsdSBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ2RhbGFtICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAnJXMgeWFuZyBsYWx1JyxcbiAgICAgICAgICAgIHMgOiAnYmViZXJhcGEgZGV0aWsnLFxuICAgICAgICAgICAgc3MgOiAnJWQgZGV0aWsnLFxuICAgICAgICAgICAgbSA6ICdzZW1lbml0JyxcbiAgICAgICAgICAgIG1tIDogJyVkIG1lbml0JyxcbiAgICAgICAgICAgIGggOiAnc2VqYW0nLFxuICAgICAgICAgICAgaGggOiAnJWQgamFtJyxcbiAgICAgICAgICAgIGQgOiAnc2VoYXJpJyxcbiAgICAgICAgICAgIGRkIDogJyVkIGhhcmknLFxuICAgICAgICAgICAgTSA6ICdzZWJ1bGFuJyxcbiAgICAgICAgICAgIE1NIDogJyVkIGJ1bGFuJyxcbiAgICAgICAgICAgIHkgOiAnc2V0YWh1bicsXG4gICAgICAgICAgICB5eSA6ICclZCB0YWh1bidcbiAgICAgICAgfSxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNyAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMXN0IGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaWQ7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///96\n")},97:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var hyAm = moment.defineLocale('hy-am', {\n        months : {\n            format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_'),\n            standalone: 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_')\n        },\n        monthsShort : 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),\n        weekdays : 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split('_'),\n        weekdaysShort : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n        weekdaysMin : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY թ.',\n            LLL : 'D MMMM YYYY թ., HH:mm',\n            LLLL : 'dddd, D MMMM YYYY թ., HH:mm'\n        },\n        calendar : {\n            sameDay: '[այսօր] LT',\n            nextDay: '[վաղը] LT',\n            lastDay: '[երեկ] LT',\n            nextWeek: function () {\n                return 'dddd [օրը ժամը] LT';\n            },\n            lastWeek: function () {\n                return '[անցած] dddd [օրը ժամը] LT';\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : '%s հետո',\n            past : '%s առաջ',\n            s : 'մի քանի վայրկյան',\n            ss : '%d վայրկյան',\n            m : 'րոպե',\n            mm : '%d րոպե',\n            h : 'ժամ',\n            hh : '%d ժամ',\n            d : 'օր',\n            dd : '%d օր',\n            M : 'ամիս',\n            MM : '%d ամիս',\n            y : 'տարի',\n            yy : '%d տարի'\n        },\n        meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,\n        isPM: function (input) {\n            return /^(ցերեկվա|երեկոյան)$/.test(input);\n        },\n        meridiem : function (hour) {\n            if (hour < 4) {\n                return 'գիշերվա';\n            } else if (hour < 12) {\n                return 'առավոտվա';\n            } else if (hour < 17) {\n                return 'ցերեկվա';\n            } else {\n                return 'երեկոյան';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}|\\d{1,2}-(ին|րդ)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'DDD':\n                case 'w':\n                case 'W':\n                case 'DDDo':\n                    if (number === 1) {\n                        return number + '-ին';\n                    }\n                    return number + '-րդ';\n                default:\n                    return number;\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return hyAm;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9oeS1hbS5qcz9kNmI2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUksSUFBSSxJQUFJO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwiZmlsZSI6Ijk3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgaHlBbSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2h5LWFtJywge1xuICAgICAgICBtb250aHMgOiB7XG4gICAgICAgICAgICBmb3JtYXQ6ICfVsNW41oLVttW+1aHWgNWrX9aD1aXVv9aA1b7VodaA1atf1bTVodaA1b/Vq1/VodW61oDVq9Ws1atf1bTVodW11avVvdWrX9Ww1bjWgtW21avVvdWrX9Ww1bjWgtWs1avVvdWrX9aF1aPVuNW91b/VuNW91atf1b3VpdW61b/VpdW01aLVpdaA1atf1bDVuNWv1b/VpdW01aLVpdaA1atf1bbVuNW11aXVtNWi1aXWgNWrX9Wk1aXVr9W/1aXVtNWi1aXWgNWrJy5zcGxpdCgnXycpLFxuICAgICAgICAgICAgc3RhbmRhbG9uZTogJ9Ww1bjWgtW21b7VodaAX9aD1aXVv9aA1b7VodaAX9W01aHWgNW/X9Wh1brWgNWr1axf1bTVodW11avVvV/VsNW41oLVttWr1b1f1bDVuNaC1azVq9W9X9aF1aPVuNW91b/VuNW9X9W91aXVutW/1aXVtNWi1aXWgF/VsNW41a/Vv9Wl1bTVotWl1oBf1bbVuNW11aXVtNWi1aXWgF/VpNWl1a/Vv9Wl1bTVotWl1oAnLnNwbGl0KCdfJylcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAn1bDVttW+X9aD1b/WgF/VtNaA1b9f1aHVutaAX9W01bXVvV/VsNW21b1f1bDVrNW9X9aF1aPVvV/VvdW61b9f1bDVr9W/X9W21bTVol/VpNWv1b8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzIDogJ9Wv1avWgNWh1a/Vq1/VpdaA1a/VuNaC1bfVodWi1anVq1/VpdaA1aXWhNW31aHVotWp1atf1bnVuNaA1aXWhNW31aHVotWp1atf1bDVq9W21aPVt9Wh1aLVqdWrX9W41oLWgNWi1aHVqV/Vt9Wh1aLVodWpJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ9Wv1oDVr1/VpdaA1a9f1aXWgNaEX9W51oDWhF/VsNW21aNf1bjWgtaA1aJf1bfVotWpJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICfVr9aA1a9f1aXWgNWvX9Wl1oDWhF/VudaA1oRf1bDVttWjX9W41oLWgNWiX9W31aLVqScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdISDptbScsXG4gICAgICAgICAgICBMVFMgOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QgTU1NTSBZWVlZINWpLicsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVkg1akuLCBISDptbScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQsIEQgTU1NTSBZWVlZINWpLiwgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vVodW11b3WhdaAXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9W+1aHVstWoXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9Wl1oDVpdWvXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnZGRkZCBb1oXWgNWoINWq1aHVtNWoXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1vVodW21oHVodWuXSBkZGRkIFvWhdaA1agg1arVodW01ahdIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICclcyDVsNWl1b/VuCcsXG4gICAgICAgICAgICBwYXN0IDogJyVzINWh1bzVodW7JyxcbiAgICAgICAgICAgIHMgOiAn1bTVqyDWhNWh1bbVqyDVvtWh1bXWgNWv1bXVodW2JyxcbiAgICAgICAgICAgIHNzIDogJyVkINW+1aHVtdaA1a/VtdWh1bYnLFxuICAgICAgICAgICAgbSA6ICfWgNW41brVpScsXG4gICAgICAgICAgICBtbSA6ICclZCDWgNW41brVpScsXG4gICAgICAgICAgICBoIDogJ9Wq1aHVtCcsXG4gICAgICAgICAgICBoaCA6ICclZCDVqtWh1bQnLFxuICAgICAgICAgICAgZCA6ICfWhdaAJyxcbiAgICAgICAgICAgIGRkIDogJyVkINaF1oAnLFxuICAgICAgICAgICAgTSA6ICfVodW01avVvScsXG4gICAgICAgICAgICBNTSA6ICclZCDVodW01avVvScsXG4gICAgICAgICAgICB5IDogJ9W/1aHWgNWrJyxcbiAgICAgICAgICAgIHl5IDogJyVkINW/1aHWgNWrJ1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv1aPVq9W31aXWgNW+1aF81aHVvNWh1b7VuNW/1b7VoXzWgdWl1oDVpdWv1b7VoXzVpdaA1aXVr9W41bXVodW2LyxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gL14o1oHVpdaA1aXVr9W+1aF81aXWgNWl1a/VuNW11aHVtikkLy50ZXN0KGlucHV0KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW0gOiBmdW5jdGlvbiAoaG91cikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfVo9Wr1bfVpdaA1b7VoSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn1aHVvNWh1b7VuNW/1b7VoSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAn1oHVpdaA1aXVr9W+1aEnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9Wl1oDVpdWv1bjVtdWh1bYnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn18XFxkezEsMn0tKNWr1bZ81oDVpCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICBjYXNlICdERERvJzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct1avVtic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct1oDVpCc7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNyAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMXN0IGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaHlBbTtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///97\n")},98:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' ');\n    function translate(number, withoutSuffix, key, isFuture) {\n        var num = number;\n        switch (key) {\n            case 's':\n                return (isFuture || withoutSuffix) ? 'néhány másodperc' : 'néhány másodperce';\n            case 'ss':\n                return num + (isFuture || withoutSuffix) ? ' másodperc' : ' másodperce';\n            case 'm':\n                return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');\n            case 'mm':\n                return num + (isFuture || withoutSuffix ? ' perc' : ' perce');\n            case 'h':\n                return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');\n            case 'hh':\n                return num + (isFuture || withoutSuffix ? ' óra' : ' órája');\n            case 'd':\n                return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');\n            case 'dd':\n                return num + (isFuture || withoutSuffix ? ' nap' : ' napja');\n            case 'M':\n                return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n            case 'MM':\n                return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n            case 'y':\n                return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');\n            case 'yy':\n                return num + (isFuture || withoutSuffix ? ' év' : ' éve');\n        }\n        return '';\n    }\n    function week(isFuture) {\n        return (isFuture ? '' : '[múlt] ') + '[' + weekEndings[this.day()] + '] LT[-kor]';\n    }\n\n    var hu = moment.defineLocale('hu', {\n        months : 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split('_'),\n        monthsShort : 'jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec'.split('_'),\n        weekdays : 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),\n        weekdaysShort : 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'),\n        weekdaysMin : 'v_h_k_sze_cs_p_szo'.split('_'),\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'YYYY.MM.DD.',\n            LL : 'YYYY. MMMM D.',\n            LLL : 'YYYY. MMMM D. H:mm',\n            LLLL : 'YYYY. MMMM D., dddd H:mm'\n        },\n        meridiemParse: /de|du/i,\n        isPM: function (input) {\n            return input.charAt(1).toLowerCase() === 'u';\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower === true ? 'de' : 'DE';\n            } else {\n                return isLower === true ? 'du' : 'DU';\n            }\n        },\n        calendar : {\n            sameDay : '[ma] LT[-kor]',\n            nextDay : '[holnap] LT[-kor]',\n            nextWeek : function () {\n                return week.call(this, true);\n            },\n            lastDay : '[tegnap] LT[-kor]',\n            lastWeek : function () {\n                return week.call(this, false);\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s múlva',\n            past : '%s',\n            s : translate,\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : translate,\n            hh : translate,\n            d : translate,\n            dd : translate,\n            M : translate,\n            MM : translate,\n            y : translate,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return hu;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9odS5qcz81YjE0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiOTguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciB3ZWVrRW5kaW5ncyA9ICd2YXPDoXJuYXAgaMOpdGbFkW4ga2VkZGVuIHN6ZXJkw6FuIGNzw7x0w7ZydMO2a8O2biBww6ludGVrZW4gc3pvbWJhdG9uJy5zcGxpdCgnICcpO1xuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIG51bSA9IG51bWJlcjtcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ3MnOlxuICAgICAgICAgICAgICAgIHJldHVybiAoaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeCkgPyAnbsOpaMOhbnkgbcOhc29kcGVyYycgOiAnbsOpaMOhbnkgbcOhc29kcGVyY2UnO1xuICAgICAgICAgICAgY2FzZSAnc3MnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW0gKyAoaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeCkgPyAnIG3DoXNvZHBlcmMnIDogJyBtw6Fzb2RwZXJjZSc7XG4gICAgICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2VneScgKyAoaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeCA/ICcgcGVyYycgOiAnIHBlcmNlJyk7XG4gICAgICAgICAgICBjYXNlICdtbSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bSArIChpc0Z1dHVyZSB8fCB3aXRob3V0U3VmZml4ID8gJyBwZXJjJyA6ICcgcGVyY2UnKTtcbiAgICAgICAgICAgIGNhc2UgJ2gnOlxuICAgICAgICAgICAgICAgIHJldHVybiAnZWd5JyArIChpc0Z1dHVyZSB8fCB3aXRob3V0U3VmZml4ID8gJyDDs3JhJyA6ICcgw7Nyw6FqYScpO1xuICAgICAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW0gKyAoaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeCA/ICcgw7NyYScgOiAnIMOzcsOhamEnKTtcbiAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIHJldHVybiAnZWd5JyArIChpc0Z1dHVyZSB8fCB3aXRob3V0U3VmZml4ID8gJyBuYXAnIDogJyBuYXBqYScpO1xuICAgICAgICAgICAgY2FzZSAnZGQnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW0gKyAoaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeCA/ICcgbmFwJyA6ICcgbmFwamEnKTtcbiAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgIHJldHVybiAnZWd5JyArIChpc0Z1dHVyZSB8fCB3aXRob3V0U3VmZml4ID8gJyBow7NuYXAnIDogJyBow7NuYXBqYScpO1xuICAgICAgICAgICAgY2FzZSAnTU0nOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW0gKyAoaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeCA/ICcgaMOzbmFwJyA6ICcgaMOzbmFwamEnKTtcbiAgICAgICAgICAgIGNhc2UgJ3knOlxuICAgICAgICAgICAgICAgIHJldHVybiAnZWd5JyArIChpc0Z1dHVyZSB8fCB3aXRob3V0U3VmZml4ID8gJyDDqXYnIDogJyDDqXZlJyk7XG4gICAgICAgICAgICBjYXNlICd5eSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bSArIChpc0Z1dHVyZSB8fCB3aXRob3V0U3VmZml4ID8gJyDDqXYnIDogJyDDqXZlJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3ZWVrKGlzRnV0dXJlKSB7XG4gICAgICAgIHJldHVybiAoaXNGdXR1cmUgPyAnJyA6ICdbbcO6bHRdICcpICsgJ1snICsgd2Vla0VuZGluZ3NbdGhpcy5kYXkoKV0gKyAnXSBMVFsta29yXSc7XG4gICAgfVxuXG4gICAgdmFyIGh1ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnaHUnLCB7XG4gICAgICAgIG1vbnRocyA6ICdqYW51w6FyX2ZlYnJ1w6FyX23DoXJjaXVzX8OhcHJpbGlzX23DoWp1c19qw7puaXVzX2rDumxpdXNfYXVndXN6dHVzX3N6ZXB0ZW1iZXJfb2t0w7NiZXJfbm92ZW1iZXJfZGVjZW1iZXInLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ2phbl9mZWJfbcOhcmNfw6Fwcl9tw6FqX2rDum5fasO6bF9hdWdfc3plcHRfb2t0X25vdl9kZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzIDogJ3Zhc8Ohcm5hcF9ow6l0ZsWRX2tlZGRfc3plcmRhX2Nzw7x0w7ZydMO2a19ww6ludGVrX3N6b21iYXQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAndmFzX2jDqXRfa2VkZF9zemVfY3PDvHRfcMOpbl9zem8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ3ZfaF9rX3N6ZV9jc19wX3N6bycuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnWVlZWS5NTS5ERC4nLFxuICAgICAgICAgICAgTEwgOiAnWVlZWS4gTU1NTSBELicsXG4gICAgICAgICAgICBMTEwgOiAnWVlZWS4gTU1NTSBELiBIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnWVlZWS4gTU1NTSBELiwgZGRkZCBIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAvZGV8ZHUvaSxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQuY2hhckF0KDEpLnRvTG93ZXJDYXNlKCkgPT09ICd1JztcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW0gOiBmdW5jdGlvbiAoaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VycyA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPT09IHRydWUgPyAnZGUnIDogJ0RFJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPT09IHRydWUgPyAnZHUnIDogJ0RVJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1ttYV0gTFRbLWtvcl0nLFxuICAgICAgICAgICAgbmV4dERheSA6ICdbaG9sbmFwXSBMVFsta29yXScsXG4gICAgICAgICAgICBuZXh0V2VlayA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd2Vlay5jYWxsKHRoaXMsIHRydWUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXkgOiAnW3RlZ25hcF0gTFRbLWtvcl0nLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdlZWsuY2FsbCh0aGlzLCBmYWxzZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJyVzIG3Dumx2YScsXG4gICAgICAgICAgICBwYXN0IDogJyVzJyxcbiAgICAgICAgICAgIHMgOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBzcyA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG0gOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtbSA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGggOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoaCA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGQgOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkZCA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE0gOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNTSA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHkgOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5eSA6IHRyYW5zbGF0ZVxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsIDogJyVkLicsXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGh1O1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///98\n")},99:function(module,exports,__webpack_require__){eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(2)) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                if (number === 1) {\n                    result += 'sekunda';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sekunde';\n                } else {\n                    result += 'sekundi';\n                }\n                return result;\n            case 'm':\n                return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n            case 'mm':\n                if (number === 1) {\n                    result += 'minuta';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'minute';\n                } else {\n                    result += 'minuta';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'jedan sat' : 'jednog sata';\n            case 'hh':\n                if (number === 1) {\n                    result += 'sat';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sata';\n                } else {\n                    result += 'sati';\n                }\n                return result;\n            case 'dd':\n                if (number === 1) {\n                    result += 'dan';\n                } else {\n                    result += 'dana';\n                }\n                return result;\n            case 'MM':\n                if (number === 1) {\n                    result += 'mjesec';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'mjeseca';\n                } else {\n                    result += 'mjeseci';\n                }\n                return result;\n            case 'yy':\n                if (number === 1) {\n                    result += 'godina';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'godine';\n                } else {\n                    result += 'godina';\n                }\n                return result;\n        }\n    }\n\n    var hr = moment.defineLocale('hr', {\n        months : {\n            format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split('_'),\n            standalone: 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split('_')\n        },\n        monthsShort : 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n        weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY H:mm',\n            LLLL : 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay  : '[danas u] LT',\n            nextDay  : '[sutra u] LT',\n            nextWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay  : '[jučer u] LT',\n            lastWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                        return '[prošlu] dddd [u] LT';\n                    case 6:\n                        return '[prošle] [subote] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prošli] dddd [u] LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past   : 'prije %s',\n            s      : 'par sekundi',\n            ss     : translate,\n            m      : translate,\n            mm     : translate,\n            h      : translate,\n            hh     : translate,\n            d      : 'dan',\n            dd     : translate,\n            M      : 'mjesec',\n            MM     : translate,\n            y      : 'godinu',\n            yy     : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return hr;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9oci5qcz80YmE5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JFLEdBQUcsU0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7OztBQUc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwiZmlsZSI6Ijk5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICBmdW5jdGlvbiB0cmFuc2xhdGUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXkpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IG51bWJlciArICcgJztcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ3NzJzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnc2VrdW5kYSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIgfHwgbnVtYmVyID09PSAzIHx8IG51bWJlciA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3Nla3VuZGUnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnc2VrdW5kaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdqZWRuYSBtaW51dGEnIDogJ2plZG5lIG1pbnV0ZSc7XG4gICAgICAgICAgICBjYXNlICdtbSc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ21pbnV0YSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIgfHwgbnVtYmVyID09PSAzIHx8IG51bWJlciA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ21pbnV0ZSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdtaW51dGEnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAnaCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAnamVkYW4gc2F0JyA6ICdqZWRub2cgc2F0YSc7XG4gICAgICAgICAgICBjYXNlICdoaCc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3NhdCc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIgfHwgbnVtYmVyID09PSAzIHx8IG51bWJlciA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3NhdGEnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnc2F0aSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICBjYXNlICdkZCc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ2Rhbic7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdkYW5hJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnbWplc2VjJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMiB8fCBudW1iZXIgPT09IDMgfHwgbnVtYmVyID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnbWplc2VjYSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdtamVzZWNpJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIGNhc2UgJ3l5JzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnZ29kaW5hJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMiB8fCBudW1iZXIgPT09IDMgfHwgbnVtYmVyID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnZ29kaW5lJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ2dvZGluYSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgaHIgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdocicsIHtcbiAgICAgICAgbW9udGhzIDoge1xuICAgICAgICAgICAgZm9ybWF0OiAnc2lqZcSNbmphX3ZlbGphxI1lX2/FvnVqa2FfdHJhdm5qYV9zdmlibmphX2xpcG5qYV9zcnBuamFfa29sb3ZvemFfcnVqbmFfbGlzdG9wYWRhX3N0dWRlbm9nYV9wcm9zaW5jYScuc3BsaXQoJ18nKSxcbiAgICAgICAgICAgIHN0YW5kYWxvbmU6ICdzaWplxI1hbmpfdmVsamHEjWFfb8W+dWpha190cmF2YW5qX3N2aWJhbmpfbGlwYW5qX3NycGFual9rb2xvdm96X3J1amFuX2xpc3RvcGFkX3N0dWRlbmlfcHJvc2luYWMnLnNwbGl0KCdfJylcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAnc2lqLl92ZWxqLl9vxb51Ll90cmEuX3N2aS5fbGlwLl9zcnAuX2tvbC5fcnVqLl9saXMuX3N0dS5fcHJvLicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXMgOiAnbmVkamVsamFfcG9uZWRqZWxqYWtfdXRvcmFrX3NyaWplZGFfxI1ldHZydGFrX3BldGFrX3N1Ym90YScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICduZWQuX3Bvbi5fdXRvLl9zcmkuX8SNZXQuX3BldC5fc3ViLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAnbmVfcG9fdXRfc3JfxI1lX3BlX3N1Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRC4gTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBELiBNTU1NIFlZWVkgSDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5ICA6ICdbZGFuYXMgdV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheSAgOiAnW3N1dHJhIHVdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBbbmVkamVsanVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIFtzcmlqZWR1XSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBbc3Vib3R1XSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBkZGRkIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXkgIDogJ1tqdcSNZXIgdV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbcHJvxaFsdV0gZGRkZCBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1twcm/FoWxlXSBbc3Vib3RlXSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1twcm/FoWxpXSBkZGRkIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICd6YSAlcycsXG4gICAgICAgICAgICBwYXN0ICAgOiAncHJpamUgJXMnLFxuICAgICAgICAgICAgcyAgICAgIDogJ3BhciBzZWt1bmRpJyxcbiAgICAgICAgICAgIHNzICAgICA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG0gICAgICA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1tICAgICA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGggICAgICA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGhoICAgICA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGQgICAgICA6ICdkYW4nLFxuICAgICAgICAgICAgZGQgICAgIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTSAgICAgIDogJ21qZXNlYycsXG4gICAgICAgICAgICBNTSAgICAgOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5ICAgICAgOiAnZ29kaW51JyxcbiAgICAgICAgICAgIHl5ICAgICA6IHRyYW5zbGF0ZVxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsIDogJyVkLicsXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDcgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDFzdCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGhyO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///99\n")},"@insp/dropdown":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "configure", function() { return configure; });\n/* harmony import */ var aurelia_framework__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("aurelia-framework");\n/* harmony import */ var _dropdown__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("@insp/dropdown/dropdown");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Dropdown", function() { return _dropdown__WEBPACK_IMPORTED_MODULE_1__["Dropdown"]; });\n\n\r\nfunction configure(config) {\r\n    config.globalResources([\r\n        \'./dropdown\'\r\n    ]);\r\n}\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGluc3AvZHJvcGRvd24vZGlzdC9uYXRpdmUtbW9kdWxlcy9pbmRleC5qcz83NGU2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUE2QztBQUN0QztBQUNQO0FBQ0EsUUFBUSxZQUFpQztBQUN6QztBQUNBO0FBQ3NDIiwiZmlsZSI6IkBpbnNwL2Ryb3Bkb3duLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUExBVEZPUk0gfSBmcm9tICdhdXJlbGlhLWZyYW1ld29yayc7XHJcbmV4cG9ydCBmdW5jdGlvbiBjb25maWd1cmUoY29uZmlnKSB7XHJcbiAgICBjb25maWcuZ2xvYmFsUmVzb3VyY2VzKFtcclxuICAgICAgICBQTEFURk9STS5tb2R1bGVOYW1lKCcuL2Ryb3Bkb3duJylcclxuICAgIF0pO1xyXG59XHJcbmV4cG9ydCB7IERyb3Bkb3duIH0gZnJvbSAnLi9kcm9wZG93bic7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///@insp/dropdown\n')},"@insp/dropdown/dropdown":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Dropdown\", function() { return Dropdown; });\n/* harmony import */ var _dropdown_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(206);\n/* harmony import */ var _dropdown_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_dropdown_css__WEBPACK_IMPORTED_MODULE_0__);\n\r\nvar Dropdown = /** @class */ (function () {\r\n    function Dropdown() {\r\n        this.isExpanded = false;\r\n        this.handleClickWhileOpenBound = this.handleClickWhileOpen.bind(this);\r\n    }\r\n    Dropdown.prototype.toggle = function () {\r\n        this.isExpanded = !this.isExpanded;\r\n        if (this.isExpanded) {\r\n            var body = document.querySelector('body');\r\n            body.addEventListener('click', this.handleClickWhileOpenBound);\r\n            body.addEventListener('touch', this.handleClickWhileOpenBound);\r\n        }\r\n    };\r\n    Dropdown.prototype.handleClickWhileOpen = function (e) {\r\n        // srcElement is undefined in Firefox so we need to use target. The contains method expects a Node\r\n        // but target doesn't derive from Node, so source must be defined as any.\r\n        var source = e.srcElement || e.target;\r\n        var isClickInElement = this.toggleButton.contains(source) || this.content.contains(source);\r\n        if (!isClickInElement) {\r\n            var body = document.querySelector('body');\r\n            body.removeEventListener('click', this.handleClickWhileOpenBound);\r\n            body.removeEventListener('touch', this.handleClickWhileOpenBound);\r\n            this.isExpanded = false;\r\n        }\r\n    };\r\n    return Dropdown;\r\n}());\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGluc3AvZHJvcGRvd24vZGlzdC9uYXRpdmUtbW9kdWxlcy9kcm9wZG93bi5qcz84MWU1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ21CIiwiZmlsZSI6IkBpbnNwL2Ryb3Bkb3duL2Ryb3Bkb3duLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICcuL2Ryb3Bkb3duLmNzcyc7XHJcbnZhciBEcm9wZG93biA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIERyb3Bkb3duKCkge1xyXG4gICAgICAgIHRoaXMuaXNFeHBhbmRlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaGFuZGxlQ2xpY2tXaGlsZU9wZW5Cb3VuZCA9IHRoaXMuaGFuZGxlQ2xpY2tXaGlsZU9wZW4uYmluZCh0aGlzKTtcclxuICAgIH1cclxuICAgIERyb3Bkb3duLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5pc0V4cGFuZGVkID0gIXRoaXMuaXNFeHBhbmRlZDtcclxuICAgICAgICBpZiAodGhpcy5pc0V4cGFuZGVkKSB7XHJcbiAgICAgICAgICAgIHZhciBib2R5ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYm9keScpO1xyXG4gICAgICAgICAgICBib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5oYW5kbGVDbGlja1doaWxlT3BlbkJvdW5kKTtcclxuICAgICAgICAgICAgYm9keS5hZGRFdmVudExpc3RlbmVyKCd0b3VjaCcsIHRoaXMuaGFuZGxlQ2xpY2tXaGlsZU9wZW5Cb3VuZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIERyb3Bkb3duLnByb3RvdHlwZS5oYW5kbGVDbGlja1doaWxlT3BlbiA9IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgLy8gc3JjRWxlbWVudCBpcyB1bmRlZmluZWQgaW4gRmlyZWZveCBzbyB3ZSBuZWVkIHRvIHVzZSB0YXJnZXQuIFRoZSBjb250YWlucyBtZXRob2QgZXhwZWN0cyBhIE5vZGVcclxuICAgICAgICAvLyBidXQgdGFyZ2V0IGRvZXNuJ3QgZGVyaXZlIGZyb20gTm9kZSwgc28gc291cmNlIG11c3QgYmUgZGVmaW5lZCBhcyBhbnkuXHJcbiAgICAgICAgdmFyIHNvdXJjZSA9IGUuc3JjRWxlbWVudCB8fCBlLnRhcmdldDtcclxuICAgICAgICB2YXIgaXNDbGlja0luRWxlbWVudCA9IHRoaXMudG9nZ2xlQnV0dG9uLmNvbnRhaW5zKHNvdXJjZSkgfHwgdGhpcy5jb250ZW50LmNvbnRhaW5zKHNvdXJjZSk7XHJcbiAgICAgICAgaWYgKCFpc0NsaWNrSW5FbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHZhciBib2R5ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYm9keScpO1xyXG4gICAgICAgICAgICBib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5oYW5kbGVDbGlja1doaWxlT3BlbkJvdW5kKTtcclxuICAgICAgICAgICAgYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaCcsIHRoaXMuaGFuZGxlQ2xpY2tXaGlsZU9wZW5Cb3VuZCk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNFeHBhbmRlZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICByZXR1cm4gRHJvcGRvd247XHJcbn0oKSk7XHJcbmV4cG9ydCB7IERyb3Bkb3duIH07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///@insp/dropdown/dropdown\n")},"@insp/dropdown/dropdown.html":function(module,exports){eval('module.exports = "<template>\\n\\n\\t<div element.ref=\\"toggleButton\\" \\n\\t\\tclass=\\"dropdown__button ${isExpanded?\'dropdown__button--expanded\' : \'\' \\"\\n\\t\\tclick.delegate=\\"toggle()\\">\\n\\t\\t<slot name=\\"button\\"><\/slot>\\n\\t<\/div>\\n\\t\\n\\t<div show.bind=\\"isExpanded\\" \\n\\t\\telement.ref=\\"content\\" \\n\\t\\tclass=\\"dropdown__content\\"\\n\\t\\tclick.delegate=\\"toggle()\\">\\n\\t\\t<slot name=\\"content\\"><\/slot>\\n\\t<\/div>\\n\\n<\/template>\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGluc3AvZHJvcGRvd24vZGlzdC9uYXRpdmUtbW9kdWxlcy9kcm9wZG93bi5odG1sP2NmMDYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscUdBQXFHIiwiZmlsZSI6IkBpbnNwL2Ryb3Bkb3duL2Ryb3Bkb3duLmh0bWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IFwiPHRlbXBsYXRlPlxcblxcblxcdDxkaXYgZWxlbWVudC5yZWY9XFxcInRvZ2dsZUJ1dHRvblxcXCIgXFxuXFx0XFx0Y2xhc3M9XFxcImRyb3Bkb3duX19idXR0b24gJHtpc0V4cGFuZGVkPydkcm9wZG93bl9fYnV0dG9uLS1leHBhbmRlZCcgOiAnJyBcXFwiXFxuXFx0XFx0Y2xpY2suZGVsZWdhdGU9XFxcInRvZ2dsZSgpXFxcIj5cXG5cXHRcXHQ8c2xvdCBuYW1lPVxcXCJidXR0b25cXFwiPjwvc2xvdD5cXG5cXHQ8L2Rpdj5cXG5cXHRcXG5cXHQ8ZGl2IHNob3cuYmluZD1cXFwiaXNFeHBhbmRlZFxcXCIgXFxuXFx0XFx0ZWxlbWVudC5yZWY9XFxcImNvbnRlbnRcXFwiIFxcblxcdFxcdGNsYXNzPVxcXCJkcm9wZG93bl9fY29udGVudFxcXCJcXG5cXHRcXHRjbGljay5kZWxlZ2F0ZT1cXFwidG9nZ2xlKClcXFwiPlxcblxcdFxcdDxzbG90IG5hbWU9XFxcImNvbnRlbnRcXFwiPjwvc2xvdD5cXG5cXHQ8L2Rpdj5cXG5cXG48L3RlbXBsYXRlPlxcblwiOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///@insp/dropdown/dropdown.html\n')},app:function(module,exports,__webpack_require__){"use strict";eval("\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__(\"aurelia-framework\");\r\nvar App = /** @class */ (function () {\r\n    function App() {\r\n    }\r\n    App.prototype.configureRouter = function (config, router) {\r\n        this.router = router;\r\n        config.options.pushState = true;\r\n        config.options.root = '/';\r\n        var handleUnknownRoutes = function (instruction) {\r\n            window.location.pathname = instruction.fragment;\r\n        };\r\n        config.mapUnknownRoutes(handleUnknownRoutes);\r\n        var routes = [];\r\n        if (window.location.pathname.includes('press-room')) {\r\n            routes.push({ route: 'company/press-room/', name: 'press-page', moduleId: './content-page' }, { route: 'company/press-room/:article/', name: 'article-page', moduleId: './components/press-release-listing/article-page' });\r\n        }\r\n        else {\r\n            routes.push({ route: [window.location.pathname], name: 'content-page', moduleId: './content-page' });\r\n        }\r\n        config.map(routes);\r\n    };\r\n    App.prototype.attached = function () {\r\n        var _this = this;\r\n        var contentContainer = document.querySelector('.responsive-page__content');\r\n        if (contentContainer) {\r\n            contentContainer.classList.add('responsive-page__content--is-loaded');\r\n            contentContainer.classList.remove('responsive-page__content--is-loading');\r\n        }\r\n        // this supports scrolling to the form from other components\r\n        window['jQuery'](document).on('click', 'a.js-scroll-to-top', function (event) {\r\n            event.preventDefault();\r\n            _this.scrollToTop();\r\n        });\r\n    };\r\n    App.prototype.scrollToTop = function () {\r\n        var spacebase = 16;\r\n        window.scrollTo({\r\n            behavior: 'smooth',\r\n            left: 0,\r\n            top: spacebase\r\n        });\r\n    };\r\n    return App;\r\n}());\r\nexports.App = App;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwLnRzPzIyOGMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBOEMsY0FBYztBQUM1RCwwQkFBMEIsbUJBQU8sQ0FBQyxtQkFBbUI7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsNkRBQTZELGdCQUF5RCxFQUFFLEdBQUcsd0VBQXdFLGlEQUEwRixFQUFFO0FBQ3hUO0FBQ0E7QUFDQSx5QkFBeUIsb0VBQW9FLGdCQUF5RCxFQUFFO0FBQ3hKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLENBQUM7QUFDRCIsImZpbGUiOiJhcHAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgYXVyZWxpYV9mcmFtZXdvcmtfMSA9IHJlcXVpcmUoXCJhdXJlbGlhLWZyYW1ld29ya1wiKTtcclxudmFyIEFwcCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEFwcCgpIHtcclxuICAgIH1cclxuICAgIEFwcC5wcm90b3R5cGUuY29uZmlndXJlUm91dGVyID0gZnVuY3Rpb24gKGNvbmZpZywgcm91dGVyKSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIgPSByb3V0ZXI7XHJcbiAgICAgICAgY29uZmlnLm9wdGlvbnMucHVzaFN0YXRlID0gdHJ1ZTtcclxuICAgICAgICBjb25maWcub3B0aW9ucy5yb290ID0gJy8nO1xyXG4gICAgICAgIHZhciBoYW5kbGVVbmtub3duUm91dGVzID0gZnVuY3Rpb24gKGluc3RydWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSA9IGluc3RydWN0aW9uLmZyYWdtZW50O1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uZmlnLm1hcFVua25vd25Sb3V0ZXMoaGFuZGxlVW5rbm93blJvdXRlcyk7XHJcbiAgICAgICAgdmFyIHJvdXRlcyA9IFtdO1xyXG4gICAgICAgIGlmICh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuaW5jbHVkZXMoJ3ByZXNzLXJvb20nKSkge1xyXG4gICAgICAgICAgICByb3V0ZXMucHVzaCh7IHJvdXRlOiAnY29tcGFueS9wcmVzcy1yb29tLycsIG5hbWU6ICdwcmVzcy1wYWdlJywgbW9kdWxlSWQ6IGF1cmVsaWFfZnJhbWV3b3JrXzEuUExBVEZPUk0ubW9kdWxlTmFtZSgnLi9jb250ZW50LXBhZ2UnKSB9LCB7IHJvdXRlOiAnY29tcGFueS9wcmVzcy1yb29tLzphcnRpY2xlLycsIG5hbWU6ICdhcnRpY2xlLXBhZ2UnLCBtb2R1bGVJZDogYXVyZWxpYV9mcmFtZXdvcmtfMS5QTEFURk9STS5tb2R1bGVOYW1lKCcuL2NvbXBvbmVudHMvcHJlc3MtcmVsZWFzZS1saXN0aW5nL2FydGljbGUtcGFnZScpIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcm91dGVzLnB1c2goeyByb3V0ZTogW3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZV0sIG5hbWU6ICdjb250ZW50LXBhZ2UnLCBtb2R1bGVJZDogYXVyZWxpYV9mcmFtZXdvcmtfMS5QTEFURk9STS5tb2R1bGVOYW1lKCcuL2NvbnRlbnQtcGFnZScpIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25maWcubWFwKHJvdXRlcyk7XHJcbiAgICB9O1xyXG4gICAgQXBwLnByb3RvdHlwZS5hdHRhY2hlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHZhciBjb250ZW50Q29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnJlc3BvbnNpdmUtcGFnZV9fY29udGVudCcpO1xyXG4gICAgICAgIGlmIChjb250ZW50Q29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgIGNvbnRlbnRDb250YWluZXIuY2xhc3NMaXN0LmFkZCgncmVzcG9uc2l2ZS1wYWdlX19jb250ZW50LS1pcy1sb2FkZWQnKTtcclxuICAgICAgICAgICAgY29udGVudENvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCdyZXNwb25zaXZlLXBhZ2VfX2NvbnRlbnQtLWlzLWxvYWRpbmcnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gdGhpcyBzdXBwb3J0cyBzY3JvbGxpbmcgdG8gdGhlIGZvcm0gZnJvbSBvdGhlciBjb21wb25lbnRzXHJcbiAgICAgICAgd2luZG93WydqUXVlcnknXShkb2N1bWVudCkub24oJ2NsaWNrJywgJ2EuanMtc2Nyb2xsLXRvLXRvcCcsIGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBfdGhpcy5zY3JvbGxUb1RvcCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIEFwcC5wcm90b3R5cGUuc2Nyb2xsVG9Ub3AgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHNwYWNlYmFzZSA9IDE2O1xyXG4gICAgICAgIHdpbmRvdy5zY3JvbGxUbyh7XHJcbiAgICAgICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcclxuICAgICAgICAgICAgbGVmdDogMCxcclxuICAgICAgICAgICAgdG9wOiBzcGFjZWJhc2VcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gQXBwO1xyXG59KCkpO1xyXG5leHBvcnRzLkFwcCA9IEFwcDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///app\n")},"app.html":function(module,exports){eval("module.exports = \"<template>\\r\\n\\t<script>\\r\\n\\t\\tconst removeLinkGA = document.querySelectorAll('[data-remove-ga]')\\r\\n\\r\\n\\t\\tremoveLinkGA.forEach((link) => {\\r\\n\\t\\t\\tlink.addEventListener('click', function (event) {\\r\\n\\t\\t\\t\\tevent.stopImmediatePropagation()\\r\\n\\t\\t\\t\\tevent.preventDefault()\\r\\n\\t\\t\\t\\tconst baseURL = link.href.split('?')[0] + '?'\\r\\n\\t\\t\\t\\tconst params = new URLSearchParams(link.search)\\r\\n\\t\\t\\t\\tparams.delete('_ga')\\r\\n\\t\\t\\t\\tconst replacementURL = params.toString()\\r\\n\\t\\t\\t\\tconst SECURL = baseURL.concat(replacementURL)\\r\\n\\t\\t\\t\\twindow.open(SECURL, '_blank')\\r\\n\\t\\t\\t})\\r\\n\\t\\t})\\r\\n\\t<\/script>\\r\\n\\t<router-view swap-order=\\\"after\\\"><\/router-view>\\r\\n<\/template>\\r\\n\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwLmh0bWw/NDVhYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnS0FBZ0ssMkRBQTJELG1ZQUFtWSxVQUFVIiwiZmlsZSI6ImFwcC5odG1sLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBcIjx0ZW1wbGF0ZT5cXHJcXG5cXHQ8c2NyaXB0PlxcclxcblxcdFxcdGNvbnN0IHJlbW92ZUxpbmtHQSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLXJlbW92ZS1nYV0nKVxcclxcblxcclxcblxcdFxcdHJlbW92ZUxpbmtHQS5mb3JFYWNoKChsaW5rKSA9PiB7XFxyXFxuXFx0XFx0XFx0bGluay5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChldmVudCkge1xcclxcblxcdFxcdFxcdFxcdGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpXFxyXFxuXFx0XFx0XFx0XFx0ZXZlbnQucHJldmVudERlZmF1bHQoKVxcclxcblxcdFxcdFxcdFxcdGNvbnN0IGJhc2VVUkwgPSBsaW5rLmhyZWYuc3BsaXQoJz8nKVswXSArICc/J1xcclxcblxcdFxcdFxcdFxcdGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMobGluay5zZWFyY2gpXFxyXFxuXFx0XFx0XFx0XFx0cGFyYW1zLmRlbGV0ZSgnX2dhJylcXHJcXG5cXHRcXHRcXHRcXHRjb25zdCByZXBsYWNlbWVudFVSTCA9IHBhcmFtcy50b1N0cmluZygpXFxyXFxuXFx0XFx0XFx0XFx0Y29uc3QgU0VDVVJMID0gYmFzZVVSTC5jb25jYXQocmVwbGFjZW1lbnRVUkwpXFxyXFxuXFx0XFx0XFx0XFx0d2luZG93Lm9wZW4oU0VDVVJMLCAnX2JsYW5rJylcXHJcXG5cXHRcXHRcXHR9KVxcclxcblxcdFxcdH0pXFxyXFxuXFx0PC9zY3JpcHQ+XFxyXFxuXFx0PHJvdXRlci12aWV3IHN3YXAtb3JkZXI9XFxcImFmdGVyXFxcIj48L3JvdXRlci12aWV3PlxcclxcbjwvdGVtcGxhdGU+XFxyXFxuXCI7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///app.html\n")},"aurelia-animator-css":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CssAnimator\", function() { return CssAnimator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"configure\", function() { return configure; });\n/* harmony import */ var aurelia_templating__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3);\n/* harmony import */ var aurelia_pal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(0);\n\n\n\n\n\nvar CssAnimator = function () {\n  function CssAnimator() {\n    \n\n    this.useAnimationDoneClasses = false;\n    this.animationEnteredClass = 'au-entered';\n    this.animationLeftClass = 'au-left';\n    this.isAnimating = false;\n\n    this.verifyKeyframesExist = true;\n  }\n\n  CssAnimator.prototype._addMultipleEventListener = function _addMultipleEventListener(el, s, fn) {\n    var evts = s.split(' ');\n    for (var i = 0, ii = evts.length; i < ii; ++i) {\n      el.addEventListener(evts[i], fn, false);\n    }\n  };\n\n  CssAnimator.prototype._removeMultipleEventListener = function _removeMultipleEventListener(el, s, fn) {\n    var evts = s.split(' ');\n    for (var i = 0, ii = evts.length; i < ii; ++i) {\n      el.removeEventListener(evts[i], fn, false);\n    }\n  };\n\n  CssAnimator.prototype._getElementAnimationDelay = function _getElementAnimationDelay(element) {\n    var styl = aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* DOM */ \"b\"].getComputedStyle(element);\n    var prop = void 0;\n    var delay = void 0;\n\n    if (styl.getPropertyValue('animation-delay')) {\n      prop = 'animation-delay';\n    } else if (styl.getPropertyValue('-webkit-animation-delay')) {\n      prop = '-webkit-animation-delay';\n    } else if (styl.getPropertyValue('-moz-animation-delay')) {\n      prop = '-moz-animation-delay';\n    } else {\n      return 0;\n    }\n\n    delay = styl.getPropertyValue(prop);\n    delay = Number(delay.replace(/[^\\d\\.]/g, ''));\n\n    return delay * 1000;\n  };\n\n  CssAnimator.prototype._getElementAnimationNames = function _getElementAnimationNames(element) {\n    var styl = aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* DOM */ \"b\"].getComputedStyle(element);\n    var prefix = void 0;\n\n    if (styl.getPropertyValue('animation-name')) {\n      prefix = '';\n    } else if (styl.getPropertyValue('-webkit-animation-name')) {\n      prefix = '-webkit-';\n    } else if (styl.getPropertyValue('-moz-animation-name')) {\n      prefix = '-moz-';\n    } else {\n      return [];\n    }\n\n    var animationNames = styl.getPropertyValue(prefix + 'animation-name');\n    return animationNames ? animationNames.split(' ') : [];\n  };\n\n  CssAnimator.prototype._performSingleAnimate = function _performSingleAnimate(element, className) {\n    var _this = this;\n\n    this._triggerDOMEvent(aurelia_templating__WEBPACK_IMPORTED_MODULE_0__[/* animationEvent */ \"Q\"].animateBegin, element);\n\n    return this.addClass(element, className, true).then(function (result) {\n      _this._triggerDOMEvent(aurelia_templating__WEBPACK_IMPORTED_MODULE_0__[/* animationEvent */ \"Q\"].animateActive, element);\n\n      if (result !== false) {\n        return _this.removeClass(element, className, true).then(function () {\n          _this._triggerDOMEvent(aurelia_templating__WEBPACK_IMPORTED_MODULE_0__[/* animationEvent */ \"Q\"].animateDone, element);\n        });\n      }\n\n      return false;\n    }).catch(function () {\n      _this._triggerDOMEvent(aurelia_templating__WEBPACK_IMPORTED_MODULE_0__[/* animationEvent */ \"Q\"].animateTimeout, element);\n    });\n  };\n\n  CssAnimator.prototype._triggerDOMEvent = function _triggerDOMEvent(eventType, element) {\n    var evt = aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* DOM */ \"b\"].createCustomEvent(eventType, { bubbles: true, cancelable: true, detail: element });\n    aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* DOM */ \"b\"].dispatchEvent(evt);\n  };\n\n  CssAnimator.prototype._animationChangeWithValidKeyframe = function _animationChangeWithValidKeyframe(animationNames, prevAnimationNames) {\n    var newAnimationNames = animationNames.filter(function (name) {\n      return prevAnimationNames.indexOf(name) === -1;\n    });\n\n    if (newAnimationNames.length === 0) {\n      return false;\n    }\n\n    if (!this.verifyKeyframesExist) {\n      return true;\n    }\n\n    var keyframesRuleType = window.CSSRule.KEYFRAMES_RULE || window.CSSRule.MOZ_KEYFRAMES_RULE || window.CSSRule.WEBKIT_KEYFRAMES_RULE;\n\n    var styleSheets = document.styleSheets;\n\n    try {\n      for (var i = 0; i < styleSheets.length; ++i) {\n        var cssRules = null;\n\n        try {\n          cssRules = styleSheets[i].cssRules;\n        } catch (e) {}\n\n        if (!cssRules) {\n          continue;\n        }\n\n        for (var j = 0; j < cssRules.length; ++j) {\n          var cssRule = cssRules[j];\n\n          if (cssRule.type === keyframesRuleType) {\n            if (newAnimationNames.indexOf(cssRule.name) !== -1) {\n              return true;\n            }\n          }\n        }\n      }\n    } catch (e) {}\n\n    return false;\n  };\n\n  CssAnimator.prototype.animate = function animate(element, className) {\n    var _this2 = this;\n\n    if (Array.isArray(element)) {\n      return Promise.all(element.map(function (el) {\n        return _this2._performSingleAnimate(el, className);\n      }));\n    }\n\n    return this._performSingleAnimate(element, className);\n  };\n\n  CssAnimator.prototype.runSequence = function runSequence(animations) {\n    var _this3 = this;\n\n    this._triggerDOMEvent(aurelia_templating__WEBPACK_IMPORTED_MODULE_0__[/* animationEvent */ \"Q\"].sequenceBegin, null);\n\n    return animations.reduce(function (p, anim) {\n      return p.then(function () {\n        return _this3.animate(anim.element, anim.className);\n      });\n    }, Promise.resolve(true)).then(function () {\n      _this3._triggerDOMEvent(aurelia_templating__WEBPACK_IMPORTED_MODULE_0__[/* animationEvent */ \"Q\"].sequenceDone, null);\n    });\n  };\n\n  CssAnimator.prototype._stateAnim = function _stateAnim(element, direction, doneClass) {\n    var _this4 = this;\n\n    var auClass = 'au-' + direction;\n    var auClassActive = auClass + '-active';\n    return new Promise(function (resolve, reject) {\n      var classList = element.classList;\n\n      _this4._triggerDOMEvent(aurelia_templating__WEBPACK_IMPORTED_MODULE_0__[/* animationEvent */ \"Q\"][direction + 'Begin'], element);\n\n      if (_this4.useAnimationDoneClasses) {\n        classList.remove(_this4.animationEnteredClass);\n        classList.remove(_this4.animationLeftClass);\n      }\n\n      classList.add(auClass);\n      var prevAnimationNames = _this4._getElementAnimationNames(element);\n\n      var _animStart = void 0;\n      var animHasStarted = false;\n      _this4._addMultipleEventListener(element, 'webkitAnimationStart animationstart', _animStart = function animStart(evAnimStart) {\n        if (evAnimStart.target !== element) {\n          return;\n        }\n        animHasStarted = true;\n        _this4.isAnimating = true;\n\n        _this4._triggerDOMEvent(aurelia_templating__WEBPACK_IMPORTED_MODULE_0__[/* animationEvent */ \"Q\"][direction + 'Active'], element);\n\n        evAnimStart.stopPropagation();\n\n        evAnimStart.target.removeEventListener(evAnimStart.type, _animStart);\n      }, false);\n\n      var _animEnd = void 0;\n      _this4._addMultipleEventListener(element, 'webkitAnimationEnd animationend', _animEnd = function animEnd(evAnimEnd) {\n        if (!animHasStarted) {\n          return;\n        }\n        if (evAnimEnd.target !== element) {\n          return;\n        }\n\n        evAnimEnd.stopPropagation();\n\n        classList.remove(auClassActive);\n        classList.remove(auClass);\n\n        evAnimEnd.target.removeEventListener(evAnimEnd.type, _animEnd);\n\n        if (_this4.useAnimationDoneClasses && doneClass !== undefined && doneClass !== null) {\n          classList.add(doneClass);\n        }\n\n        _this4.isAnimating = false;\n        _this4._triggerDOMEvent(aurelia_templating__WEBPACK_IMPORTED_MODULE_0__[/* animationEvent */ \"Q\"][direction + 'Done'], element);\n\n        resolve(true);\n      }, false);\n\n      var parent = element.parentElement;\n      var attrib = 'data-animator-pending' + direction;\n\n      var cleanupAnimation = function cleanupAnimation() {\n        var animationNames = _this4._getElementAnimationNames(element);\n        if (!_this4._animationChangeWithValidKeyframe(animationNames, prevAnimationNames)) {\n          classList.remove(auClassActive);\n          classList.remove(auClass);\n\n          _this4._removeMultipleEventListener(element, 'webkitAnimationEnd animationend', _animEnd);\n          _this4._removeMultipleEventListener(element, 'webkitAnimationStart animationstart', _animStart);\n\n          _this4._triggerDOMEvent(aurelia_templating__WEBPACK_IMPORTED_MODULE_0__[/* animationEvent */ \"Q\"][direction + 'Timeout'], element);\n          resolve(false);\n        }\n        parent && parent.setAttribute(attrib, +(parent.getAttribute(attrib) || 1) - 1);\n      };\n\n      if (parent !== null && parent !== undefined && (parent.classList.contains('au-stagger') || parent.classList.contains('au-stagger-' + direction))) {\n        var offset = +(parent.getAttribute(attrib) || 0);\n        parent.setAttribute(attrib, offset + 1);\n        var delay = _this4._getElementAnimationDelay(parent) * offset;\n        _this4._triggerDOMEvent(aurelia_templating__WEBPACK_IMPORTED_MODULE_0__[/* animationEvent */ \"Q\"].staggerNext, element);\n\n        setTimeout(function () {\n          classList.add(auClassActive);\n          cleanupAnimation();\n        }, delay);\n      } else {\n        classList.add(auClassActive);\n        cleanupAnimation();\n      }\n    });\n  };\n\n  CssAnimator.prototype.enter = function enter(element) {\n    return this._stateAnim(element, 'enter', this.animationEnteredClass);\n  };\n\n  CssAnimator.prototype.leave = function leave(element) {\n    return this._stateAnim(element, 'leave', this.animationLeftClass);\n  };\n\n  CssAnimator.prototype.removeClass = function removeClass(element, className) {\n    var _this5 = this;\n\n    var suppressEvents = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2];\n\n    return new Promise(function (resolve, reject) {\n      var classList = element.classList;\n\n      if (!classList.contains(className) && !classList.contains(className + '-add')) {\n        resolve(false);\n        return;\n      }\n\n      if (suppressEvents !== true) {\n        _this5._triggerDOMEvent(aurelia_templating__WEBPACK_IMPORTED_MODULE_0__[/* animationEvent */ \"Q\"].removeClassBegin, element);\n      }\n\n      if (classList.contains(className + '-add')) {\n        classList.remove(className + '-add');\n        classList.add(className);\n      }\n\n      classList.remove(className);\n      var prevAnimationNames = _this5._getElementAnimationNames(element);\n\n      var _animStart2 = void 0;\n      var animHasStarted = false;\n      _this5._addMultipleEventListener(element, 'webkitAnimationStart animationstart', _animStart2 = function animStart(evAnimStart) {\n        if (evAnimStart.target !== element) {\n          return;\n        }\n        animHasStarted = true;\n        _this5.isAnimating = true;\n\n        if (suppressEvents !== true) {\n          _this5._triggerDOMEvent(aurelia_templating__WEBPACK_IMPORTED_MODULE_0__[/* animationEvent */ \"Q\"].removeClassActive, element);\n        }\n\n        evAnimStart.stopPropagation();\n\n        evAnimStart.target.removeEventListener(evAnimStart.type, _animStart2);\n      }, false);\n\n      var _animEnd2 = void 0;\n      _this5._addMultipleEventListener(element, 'webkitAnimationEnd animationend', _animEnd2 = function animEnd(evAnimEnd) {\n        if (!animHasStarted) {\n          return;\n        }\n        if (evAnimEnd.target !== element) {\n          return;\n        }\n\n        if (!element.classList.contains(className + '-remove')) {\n          resolve(true);\n        }\n\n        evAnimEnd.stopPropagation();\n\n        classList.remove(className);\n\n        classList.remove(className + '-remove');\n\n        evAnimEnd.target.removeEventListener(evAnimEnd.type, _animEnd2);\n\n        _this5.isAnimating = false;\n\n        if (suppressEvents !== true) {\n          _this5._triggerDOMEvent(aurelia_templating__WEBPACK_IMPORTED_MODULE_0__[/* animationEvent */ \"Q\"].removeClassDone, element);\n        }\n\n        resolve(true);\n      }, false);\n\n      classList.add(className + '-remove');\n\n      var animationNames = _this5._getElementAnimationNames(element);\n      if (!_this5._animationChangeWithValidKeyframe(animationNames, prevAnimationNames)) {\n        classList.remove(className + '-remove');\n        classList.remove(className);\n\n        _this5._removeMultipleEventListener(element, 'webkitAnimationEnd animationend', _animEnd2);\n        _this5._removeMultipleEventListener(element, 'webkitAnimationStart animationstart', _animStart2);\n\n        if (suppressEvents !== true) {\n          _this5._triggerDOMEvent(aurelia_templating__WEBPACK_IMPORTED_MODULE_0__[/* animationEvent */ \"Q\"].removeClassTimeout, element);\n        }\n\n        resolve(false);\n      }\n    });\n  };\n\n  CssAnimator.prototype.addClass = function addClass(element, className) {\n    var _this6 = this;\n\n    var suppressEvents = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2];\n\n    return new Promise(function (resolve, reject) {\n      var classList = element.classList;\n\n      if (suppressEvents !== true) {\n        _this6._triggerDOMEvent(aurelia_templating__WEBPACK_IMPORTED_MODULE_0__[/* animationEvent */ \"Q\"].addClassBegin, element);\n      }\n\n      if (classList.contains(className + '-remove')) {\n        classList.remove(className + '-remove');\n        classList.remove(className);\n      }\n\n      var _animStart3 = void 0;\n      var animHasStarted = false;\n      _this6._addMultipleEventListener(element, 'webkitAnimationStart animationstart', _animStart3 = function animStart(evAnimStart) {\n        if (evAnimStart.target !== element) {\n          return;\n        }\n        animHasStarted = true;\n        _this6.isAnimating = true;\n\n        if (suppressEvents !== true) {\n          _this6._triggerDOMEvent(aurelia_templating__WEBPACK_IMPORTED_MODULE_0__[/* animationEvent */ \"Q\"].addClassActive, element);\n        }\n\n        evAnimStart.stopPropagation();\n\n        evAnimStart.target.removeEventListener(evAnimStart.type, _animStart3);\n      }, false);\n\n      var _animEnd3 = void 0;\n      _this6._addMultipleEventListener(element, 'webkitAnimationEnd animationend', _animEnd3 = function animEnd(evAnimEnd) {\n        if (!animHasStarted) {\n          return;\n        }\n        if (evAnimEnd.target !== element) {\n          return;\n        }\n\n        if (!element.classList.contains(className + '-add')) {\n          resolve(true);\n        }\n\n        evAnimEnd.stopPropagation();\n\n        classList.add(className);\n\n        classList.remove(className + '-add');\n\n        evAnimEnd.target.removeEventListener(evAnimEnd.type, _animEnd3);\n\n        _this6.isAnimating = false;\n\n        if (suppressEvents !== true) {\n          _this6._triggerDOMEvent(aurelia_templating__WEBPACK_IMPORTED_MODULE_0__[/* animationEvent */ \"Q\"].addClassDone, element);\n        }\n\n        resolve(true);\n      }, false);\n\n      var prevAnimationNames = _this6._getElementAnimationNames(element);\n\n      classList.add(className + '-add');\n\n      var animationNames = _this6._getElementAnimationNames(element);\n      if (!_this6._animationChangeWithValidKeyframe(animationNames, prevAnimationNames)) {\n        classList.remove(className + '-add');\n        classList.add(className);\n\n        _this6._removeMultipleEventListener(element, 'webkitAnimationEnd animationend', _animEnd3);\n        _this6._removeMultipleEventListener(element, 'webkitAnimationStart animationstart', _animStart3);\n\n        if (suppressEvents !== true) {\n          _this6._triggerDOMEvent(aurelia_templating__WEBPACK_IMPORTED_MODULE_0__[/* animationEvent */ \"Q\"].addClassTimeout, element);\n        }\n\n        resolve(false);\n      }\n    });\n  };\n\n  return CssAnimator;\n}();\n\nfunction configure(config, callback) {\n  var animator = config.container.get(CssAnimator);\n  config.container.get(aurelia_templating__WEBPACK_IMPORTED_MODULE_0__[/* TemplatingEngine */ \"E\"]).configureAnimator(animator);\n  if (typeof callback === 'function') {\n    callback(animator);\n  }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXVyZWxpYS1hbmltYXRvci1jc3MvZGlzdC9uYXRpdmUtbW9kdWxlcy9hdXJlbGlhLWFuaW1hdG9yLWNzcy5qcz9iYzczIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFFc0U7QUFDcEM7O0FBRTNCO0FBQ1A7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHFDQUFxQyxRQUFRO0FBQzdDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUNBQXFDLFFBQVE7QUFDN0M7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZSx1REFBRztBQUNsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxlQUFlLHVEQUFHO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSwwQkFBMEIseUVBQWM7O0FBRXhDO0FBQ0EsNkJBQTZCLHlFQUFjOztBQUUzQztBQUNBO0FBQ0EsaUNBQWlDLHlFQUFjO0FBQy9DLFNBQVM7QUFDVDs7QUFFQTtBQUNBLEtBQUs7QUFDTCw2QkFBNkIseUVBQWM7QUFDM0MsS0FBSztBQUNMOztBQUVBO0FBQ0EsY0FBYyx1REFBRywrQkFBK0IsbURBQW1EO0FBQ25HLElBQUksdURBQUc7QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxxQkFBcUIsd0JBQXdCO0FBQzdDOztBQUVBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIscUJBQXFCO0FBQzVDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSwwQkFBMEIseUVBQWM7O0FBRXhDO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0wsOEJBQThCLHlFQUFjO0FBQzVDLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDhCQUE4Qix5RUFBYzs7QUFFNUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGdDQUFnQyx5RUFBYzs7QUFFOUM7O0FBRUE7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQ0FBZ0MseUVBQWM7O0FBRTlDO0FBQ0EsT0FBTzs7QUFFUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxrQ0FBa0MseUVBQWM7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MseUVBQWM7O0FBRTlDO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0NBQWdDLHlFQUFjO0FBQzlDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtDQUFrQyx5RUFBYztBQUNoRDs7QUFFQTs7QUFFQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxrQ0FBa0MseUVBQWM7QUFDaEQ7O0FBRUE7QUFDQSxPQUFPOztBQUVQOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxrQ0FBa0MseUVBQWM7QUFDaEQ7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxnQ0FBZ0MseUVBQWM7QUFDOUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtDQUFrQyx5RUFBYztBQUNoRDs7QUFFQTs7QUFFQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxrQ0FBa0MseUVBQWM7QUFDaEQ7O0FBRUE7QUFDQSxPQUFPOztBQUVQOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxrQ0FBa0MseUVBQWM7QUFDaEQ7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBLENBQUM7O0FBRU07QUFDUDtBQUNBLHVCQUF1QiwyRUFBZ0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiYXVyZWxpYS1hbmltYXRvci1jc3MuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcblxuaW1wb3J0IHsgYW5pbWF0aW9uRXZlbnQsIFRlbXBsYXRpbmdFbmdpbmUgfSBmcm9tICdhdXJlbGlhLXRlbXBsYXRpbmcnO1xuaW1wb3J0IHsgRE9NIH0gZnJvbSAnYXVyZWxpYS1wYWwnO1xuXG5leHBvcnQgdmFyIENzc0FuaW1hdG9yID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBDc3NBbmltYXRvcigpIHtcbiAgICBcblxuICAgIHRoaXMudXNlQW5pbWF0aW9uRG9uZUNsYXNzZXMgPSBmYWxzZTtcbiAgICB0aGlzLmFuaW1hdGlvbkVudGVyZWRDbGFzcyA9ICdhdS1lbnRlcmVkJztcbiAgICB0aGlzLmFuaW1hdGlvbkxlZnRDbGFzcyA9ICdhdS1sZWZ0JztcbiAgICB0aGlzLmlzQW5pbWF0aW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLnZlcmlmeUtleWZyYW1lc0V4aXN0ID0gdHJ1ZTtcbiAgfVxuXG4gIENzc0FuaW1hdG9yLnByb3RvdHlwZS5fYWRkTXVsdGlwbGVFdmVudExpc3RlbmVyID0gZnVuY3Rpb24gX2FkZE11bHRpcGxlRXZlbnRMaXN0ZW5lcihlbCwgcywgZm4pIHtcbiAgICB2YXIgZXZ0cyA9IHMuc3BsaXQoJyAnKTtcbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBldnRzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoZXZ0c1tpXSwgZm4sIGZhbHNlKTtcbiAgICB9XG4gIH07XG5cbiAgQ3NzQW5pbWF0b3IucHJvdG90eXBlLl9yZW1vdmVNdWx0aXBsZUV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiBfcmVtb3ZlTXVsdGlwbGVFdmVudExpc3RlbmVyKGVsLCBzLCBmbikge1xuICAgIHZhciBldnRzID0gcy5zcGxpdCgnICcpO1xuICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGV2dHMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihldnRzW2ldLCBmbiwgZmFsc2UpO1xuICAgIH1cbiAgfTtcblxuICBDc3NBbmltYXRvci5wcm90b3R5cGUuX2dldEVsZW1lbnRBbmltYXRpb25EZWxheSA9IGZ1bmN0aW9uIF9nZXRFbGVtZW50QW5pbWF0aW9uRGVsYXkoZWxlbWVudCkge1xuICAgIHZhciBzdHlsID0gRE9NLmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gICAgdmFyIHByb3AgPSB2b2lkIDA7XG4gICAgdmFyIGRlbGF5ID0gdm9pZCAwO1xuXG4gICAgaWYgKHN0eWwuZ2V0UHJvcGVydHlWYWx1ZSgnYW5pbWF0aW9uLWRlbGF5JykpIHtcbiAgICAgIHByb3AgPSAnYW5pbWF0aW9uLWRlbGF5JztcbiAgICB9IGVsc2UgaWYgKHN0eWwuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1hbmltYXRpb24tZGVsYXknKSkge1xuICAgICAgcHJvcCA9ICctd2Via2l0LWFuaW1hdGlvbi1kZWxheSc7XG4gICAgfSBlbHNlIGlmIChzdHlsLmdldFByb3BlcnR5VmFsdWUoJy1tb3otYW5pbWF0aW9uLWRlbGF5JykpIHtcbiAgICAgIHByb3AgPSAnLW1vei1hbmltYXRpb24tZGVsYXknO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBkZWxheSA9IHN0eWwuZ2V0UHJvcGVydHlWYWx1ZShwcm9wKTtcbiAgICBkZWxheSA9IE51bWJlcihkZWxheS5yZXBsYWNlKC9bXlxcZFxcLl0vZywgJycpKTtcblxuICAgIHJldHVybiBkZWxheSAqIDEwMDA7XG4gIH07XG5cbiAgQ3NzQW5pbWF0b3IucHJvdG90eXBlLl9nZXRFbGVtZW50QW5pbWF0aW9uTmFtZXMgPSBmdW5jdGlvbiBfZ2V0RWxlbWVudEFuaW1hdGlvbk5hbWVzKGVsZW1lbnQpIHtcbiAgICB2YXIgc3R5bCA9IERPTS5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICAgIHZhciBwcmVmaXggPSB2b2lkIDA7XG5cbiAgICBpZiAoc3R5bC5nZXRQcm9wZXJ0eVZhbHVlKCdhbmltYXRpb24tbmFtZScpKSB7XG4gICAgICBwcmVmaXggPSAnJztcbiAgICB9IGVsc2UgaWYgKHN0eWwuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1hbmltYXRpb24tbmFtZScpKSB7XG4gICAgICBwcmVmaXggPSAnLXdlYmtpdC0nO1xuICAgIH0gZWxzZSBpZiAoc3R5bC5nZXRQcm9wZXJ0eVZhbHVlKCctbW96LWFuaW1hdGlvbi1uYW1lJykpIHtcbiAgICAgIHByZWZpeCA9ICctbW96LSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICB2YXIgYW5pbWF0aW9uTmFtZXMgPSBzdHlsLmdldFByb3BlcnR5VmFsdWUocHJlZml4ICsgJ2FuaW1hdGlvbi1uYW1lJyk7XG4gICAgcmV0dXJuIGFuaW1hdGlvbk5hbWVzID8gYW5pbWF0aW9uTmFtZXMuc3BsaXQoJyAnKSA6IFtdO1xuICB9O1xuXG4gIENzc0FuaW1hdG9yLnByb3RvdHlwZS5fcGVyZm9ybVNpbmdsZUFuaW1hdGUgPSBmdW5jdGlvbiBfcGVyZm9ybVNpbmdsZUFuaW1hdGUoZWxlbWVudCwgY2xhc3NOYW1lKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuX3RyaWdnZXJET01FdmVudChhbmltYXRpb25FdmVudC5hbmltYXRlQmVnaW4sIGVsZW1lbnQpO1xuXG4gICAgcmV0dXJuIHRoaXMuYWRkQ2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lLCB0cnVlKS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgIF90aGlzLl90cmlnZ2VyRE9NRXZlbnQoYW5pbWF0aW9uRXZlbnQuYW5pbWF0ZUFjdGl2ZSwgZWxlbWVudCk7XG5cbiAgICAgIGlmIChyZXN1bHQgIT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5yZW1vdmVDbGFzcyhlbGVtZW50LCBjbGFzc05hbWUsIHRydWUpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzLl90cmlnZ2VyRE9NRXZlbnQoYW5pbWF0aW9uRXZlbnQuYW5pbWF0ZURvbmUsIGVsZW1lbnQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pLmNhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLl90cmlnZ2VyRE9NRXZlbnQoYW5pbWF0aW9uRXZlbnQuYW5pbWF0ZVRpbWVvdXQsIGVsZW1lbnQpO1xuICAgIH0pO1xuICB9O1xuXG4gIENzc0FuaW1hdG9yLnByb3RvdHlwZS5fdHJpZ2dlckRPTUV2ZW50ID0gZnVuY3Rpb24gX3RyaWdnZXJET01FdmVudChldmVudFR5cGUsIGVsZW1lbnQpIHtcbiAgICB2YXIgZXZ0ID0gRE9NLmNyZWF0ZUN1c3RvbUV2ZW50KGV2ZW50VHlwZSwgeyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlLCBkZXRhaWw6IGVsZW1lbnQgfSk7XG4gICAgRE9NLmRpc3BhdGNoRXZlbnQoZXZ0KTtcbiAgfTtcblxuICBDc3NBbmltYXRvci5wcm90b3R5cGUuX2FuaW1hdGlvbkNoYW5nZVdpdGhWYWxpZEtleWZyYW1lID0gZnVuY3Rpb24gX2FuaW1hdGlvbkNoYW5nZVdpdGhWYWxpZEtleWZyYW1lKGFuaW1hdGlvbk5hbWVzLCBwcmV2QW5pbWF0aW9uTmFtZXMpIHtcbiAgICB2YXIgbmV3QW5pbWF0aW9uTmFtZXMgPSBhbmltYXRpb25OYW1lcy5maWx0ZXIoZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHJldHVybiBwcmV2QW5pbWF0aW9uTmFtZXMuaW5kZXhPZihuYW1lKSA9PT0gLTE7XG4gICAgfSk7XG5cbiAgICBpZiAobmV3QW5pbWF0aW9uTmFtZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnZlcmlmeUtleWZyYW1lc0V4aXN0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIga2V5ZnJhbWVzUnVsZVR5cGUgPSB3aW5kb3cuQ1NTUnVsZS5LRVlGUkFNRVNfUlVMRSB8fCB3aW5kb3cuQ1NTUnVsZS5NT1pfS0VZRlJBTUVTX1JVTEUgfHwgd2luZG93LkNTU1J1bGUuV0VCS0lUX0tFWUZSQU1FU19SVUxFO1xuXG4gICAgdmFyIHN0eWxlU2hlZXRzID0gZG9jdW1lbnQuc3R5bGVTaGVldHM7XG5cbiAgICB0cnkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZVNoZWV0cy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgY3NzUnVsZXMgPSBudWxsO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY3NzUnVsZXMgPSBzdHlsZVNoZWV0c1tpXS5jc3NSdWxlcztcbiAgICAgICAgfSBjYXRjaCAoZSkge31cblxuICAgICAgICBpZiAoIWNzc1J1bGVzKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNzc1J1bGVzLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgdmFyIGNzc1J1bGUgPSBjc3NSdWxlc1tqXTtcblxuICAgICAgICAgIGlmIChjc3NSdWxlLnR5cGUgPT09IGtleWZyYW1lc1J1bGVUeXBlKSB7XG4gICAgICAgICAgICBpZiAobmV3QW5pbWF0aW9uTmFtZXMuaW5kZXhPZihjc3NSdWxlLm5hbWUpICE9PSAtMSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7fVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIENzc0FuaW1hdG9yLnByb3RvdHlwZS5hbmltYXRlID0gZnVuY3Rpb24gYW5pbWF0ZShlbGVtZW50LCBjbGFzc05hbWUpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwoZWxlbWVudC5tYXAoZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgIHJldHVybiBfdGhpczIuX3BlcmZvcm1TaW5nbGVBbmltYXRlKGVsLCBjbGFzc05hbWUpO1xuICAgICAgfSkpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZXJmb3JtU2luZ2xlQW5pbWF0ZShlbGVtZW50LCBjbGFzc05hbWUpO1xuICB9O1xuXG4gIENzc0FuaW1hdG9yLnByb3RvdHlwZS5ydW5TZXF1ZW5jZSA9IGZ1bmN0aW9uIHJ1blNlcXVlbmNlKGFuaW1hdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHRoaXMuX3RyaWdnZXJET01FdmVudChhbmltYXRpb25FdmVudC5zZXF1ZW5jZUJlZ2luLCBudWxsKTtcblxuICAgIHJldHVybiBhbmltYXRpb25zLnJlZHVjZShmdW5jdGlvbiAocCwgYW5pbSkge1xuICAgICAgcmV0dXJuIHAudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpczMuYW5pbWF0ZShhbmltLmVsZW1lbnQsIGFuaW0uY2xhc3NOYW1lKTtcbiAgICAgIH0pO1xuICAgIH0sIFByb21pc2UucmVzb2x2ZSh0cnVlKSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczMuX3RyaWdnZXJET01FdmVudChhbmltYXRpb25FdmVudC5zZXF1ZW5jZURvbmUsIG51bGwpO1xuICAgIH0pO1xuICB9O1xuXG4gIENzc0FuaW1hdG9yLnByb3RvdHlwZS5fc3RhdGVBbmltID0gZnVuY3Rpb24gX3N0YXRlQW5pbShlbGVtZW50LCBkaXJlY3Rpb24sIGRvbmVDbGFzcykge1xuICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgdmFyIGF1Q2xhc3MgPSAnYXUtJyArIGRpcmVjdGlvbjtcbiAgICB2YXIgYXVDbGFzc0FjdGl2ZSA9IGF1Q2xhc3MgKyAnLWFjdGl2ZSc7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciBjbGFzc0xpc3QgPSBlbGVtZW50LmNsYXNzTGlzdDtcblxuICAgICAgX3RoaXM0Ll90cmlnZ2VyRE9NRXZlbnQoYW5pbWF0aW9uRXZlbnRbZGlyZWN0aW9uICsgJ0JlZ2luJ10sIGVsZW1lbnQpO1xuXG4gICAgICBpZiAoX3RoaXM0LnVzZUFuaW1hdGlvbkRvbmVDbGFzc2VzKSB7XG4gICAgICAgIGNsYXNzTGlzdC5yZW1vdmUoX3RoaXM0LmFuaW1hdGlvbkVudGVyZWRDbGFzcyk7XG4gICAgICAgIGNsYXNzTGlzdC5yZW1vdmUoX3RoaXM0LmFuaW1hdGlvbkxlZnRDbGFzcyk7XG4gICAgICB9XG5cbiAgICAgIGNsYXNzTGlzdC5hZGQoYXVDbGFzcyk7XG4gICAgICB2YXIgcHJldkFuaW1hdGlvbk5hbWVzID0gX3RoaXM0Ll9nZXRFbGVtZW50QW5pbWF0aW9uTmFtZXMoZWxlbWVudCk7XG5cbiAgICAgIHZhciBfYW5pbVN0YXJ0ID0gdm9pZCAwO1xuICAgICAgdmFyIGFuaW1IYXNTdGFydGVkID0gZmFsc2U7XG4gICAgICBfdGhpczQuX2FkZE11bHRpcGxlRXZlbnRMaXN0ZW5lcihlbGVtZW50LCAnd2Via2l0QW5pbWF0aW9uU3RhcnQgYW5pbWF0aW9uc3RhcnQnLCBfYW5pbVN0YXJ0ID0gZnVuY3Rpb24gYW5pbVN0YXJ0KGV2QW5pbVN0YXJ0KSB7XG4gICAgICAgIGlmIChldkFuaW1TdGFydC50YXJnZXQgIT09IGVsZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYW5pbUhhc1N0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICBfdGhpczQuaXNBbmltYXRpbmcgPSB0cnVlO1xuXG4gICAgICAgIF90aGlzNC5fdHJpZ2dlckRPTUV2ZW50KGFuaW1hdGlvbkV2ZW50W2RpcmVjdGlvbiArICdBY3RpdmUnXSwgZWxlbWVudCk7XG5cbiAgICAgICAgZXZBbmltU3RhcnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgZXZBbmltU3RhcnQudGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZBbmltU3RhcnQudHlwZSwgX2FuaW1TdGFydCk7XG4gICAgICB9LCBmYWxzZSk7XG5cbiAgICAgIHZhciBfYW5pbUVuZCA9IHZvaWQgMDtcbiAgICAgIF90aGlzNC5fYWRkTXVsdGlwbGVFdmVudExpc3RlbmVyKGVsZW1lbnQsICd3ZWJraXRBbmltYXRpb25FbmQgYW5pbWF0aW9uZW5kJywgX2FuaW1FbmQgPSBmdW5jdGlvbiBhbmltRW5kKGV2QW5pbUVuZCkge1xuICAgICAgICBpZiAoIWFuaW1IYXNTdGFydGVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldkFuaW1FbmQudGFyZ2V0ICE9PSBlbGVtZW50KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZXZBbmltRW5kLnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGNsYXNzTGlzdC5yZW1vdmUoYXVDbGFzc0FjdGl2ZSk7XG4gICAgICAgIGNsYXNzTGlzdC5yZW1vdmUoYXVDbGFzcyk7XG5cbiAgICAgICAgZXZBbmltRW5kLnRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKGV2QW5pbUVuZC50eXBlLCBfYW5pbUVuZCk7XG5cbiAgICAgICAgaWYgKF90aGlzNC51c2VBbmltYXRpb25Eb25lQ2xhc3NlcyAmJiBkb25lQ2xhc3MgIT09IHVuZGVmaW5lZCAmJiBkb25lQ2xhc3MgIT09IG51bGwpIHtcbiAgICAgICAgICBjbGFzc0xpc3QuYWRkKGRvbmVDbGFzcyk7XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpczQuaXNBbmltYXRpbmcgPSBmYWxzZTtcbiAgICAgICAgX3RoaXM0Ll90cmlnZ2VyRE9NRXZlbnQoYW5pbWF0aW9uRXZlbnRbZGlyZWN0aW9uICsgJ0RvbmUnXSwgZWxlbWVudCk7XG5cbiAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgIH0sIGZhbHNlKTtcblxuICAgICAgdmFyIHBhcmVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICAgIHZhciBhdHRyaWIgPSAnZGF0YS1hbmltYXRvci1wZW5kaW5nJyArIGRpcmVjdGlvbjtcblxuICAgICAgdmFyIGNsZWFudXBBbmltYXRpb24gPSBmdW5jdGlvbiBjbGVhbnVwQW5pbWF0aW9uKCkge1xuICAgICAgICB2YXIgYW5pbWF0aW9uTmFtZXMgPSBfdGhpczQuX2dldEVsZW1lbnRBbmltYXRpb25OYW1lcyhlbGVtZW50KTtcbiAgICAgICAgaWYgKCFfdGhpczQuX2FuaW1hdGlvbkNoYW5nZVdpdGhWYWxpZEtleWZyYW1lKGFuaW1hdGlvbk5hbWVzLCBwcmV2QW5pbWF0aW9uTmFtZXMpKSB7XG4gICAgICAgICAgY2xhc3NMaXN0LnJlbW92ZShhdUNsYXNzQWN0aXZlKTtcbiAgICAgICAgICBjbGFzc0xpc3QucmVtb3ZlKGF1Q2xhc3MpO1xuXG4gICAgICAgICAgX3RoaXM0Ll9yZW1vdmVNdWx0aXBsZUV2ZW50TGlzdGVuZXIoZWxlbWVudCwgJ3dlYmtpdEFuaW1hdGlvbkVuZCBhbmltYXRpb25lbmQnLCBfYW5pbUVuZCk7XG4gICAgICAgICAgX3RoaXM0Ll9yZW1vdmVNdWx0aXBsZUV2ZW50TGlzdGVuZXIoZWxlbWVudCwgJ3dlYmtpdEFuaW1hdGlvblN0YXJ0IGFuaW1hdGlvbnN0YXJ0JywgX2FuaW1TdGFydCk7XG5cbiAgICAgICAgICBfdGhpczQuX3RyaWdnZXJET01FdmVudChhbmltYXRpb25FdmVudFtkaXJlY3Rpb24gKyAnVGltZW91dCddLCBlbGVtZW50KTtcbiAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBwYXJlbnQgJiYgcGFyZW50LnNldEF0dHJpYnV0ZShhdHRyaWIsICsocGFyZW50LmdldEF0dHJpYnV0ZShhdHRyaWIpIHx8IDEpIC0gMSk7XG4gICAgICB9O1xuXG4gICAgICBpZiAocGFyZW50ICE9PSBudWxsICYmIHBhcmVudCAhPT0gdW5kZWZpbmVkICYmIChwYXJlbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdhdS1zdGFnZ2VyJykgfHwgcGFyZW50LmNsYXNzTGlzdC5jb250YWlucygnYXUtc3RhZ2dlci0nICsgZGlyZWN0aW9uKSkpIHtcbiAgICAgICAgdmFyIG9mZnNldCA9ICsocGFyZW50LmdldEF0dHJpYnV0ZShhdHRyaWIpIHx8IDApO1xuICAgICAgICBwYXJlbnQuc2V0QXR0cmlidXRlKGF0dHJpYiwgb2Zmc2V0ICsgMSk7XG4gICAgICAgIHZhciBkZWxheSA9IF90aGlzNC5fZ2V0RWxlbWVudEFuaW1hdGlvbkRlbGF5KHBhcmVudCkgKiBvZmZzZXQ7XG4gICAgICAgIF90aGlzNC5fdHJpZ2dlckRPTUV2ZW50KGFuaW1hdGlvbkV2ZW50LnN0YWdnZXJOZXh0LCBlbGVtZW50KTtcblxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjbGFzc0xpc3QuYWRkKGF1Q2xhc3NBY3RpdmUpO1xuICAgICAgICAgIGNsZWFudXBBbmltYXRpb24oKTtcbiAgICAgICAgfSwgZGVsYXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2xhc3NMaXN0LmFkZChhdUNsYXNzQWN0aXZlKTtcbiAgICAgICAgY2xlYW51cEFuaW1hdGlvbigpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIENzc0FuaW1hdG9yLnByb3RvdHlwZS5lbnRlciA9IGZ1bmN0aW9uIGVudGVyKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGVBbmltKGVsZW1lbnQsICdlbnRlcicsIHRoaXMuYW5pbWF0aW9uRW50ZXJlZENsYXNzKTtcbiAgfTtcblxuICBDc3NBbmltYXRvci5wcm90b3R5cGUubGVhdmUgPSBmdW5jdGlvbiBsZWF2ZShlbGVtZW50KSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlQW5pbShlbGVtZW50LCAnbGVhdmUnLCB0aGlzLmFuaW1hdGlvbkxlZnRDbGFzcyk7XG4gIH07XG5cbiAgQ3NzQW5pbWF0b3IucHJvdG90eXBlLnJlbW92ZUNsYXNzID0gZnVuY3Rpb24gcmVtb3ZlQ2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lKSB7XG4gICAgdmFyIF90aGlzNSA9IHRoaXM7XG5cbiAgICB2YXIgc3VwcHJlc3NFdmVudHMgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDIgfHwgYXJndW1lbnRzWzJdID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IGFyZ3VtZW50c1syXTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgY2xhc3NMaXN0ID0gZWxlbWVudC5jbGFzc0xpc3Q7XG5cbiAgICAgIGlmICghY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSkgJiYgIWNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUgKyAnLWFkZCcpKSB7XG4gICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChzdXBwcmVzc0V2ZW50cyAhPT0gdHJ1ZSkge1xuICAgICAgICBfdGhpczUuX3RyaWdnZXJET01FdmVudChhbmltYXRpb25FdmVudC5yZW1vdmVDbGFzc0JlZ2luLCBlbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUgKyAnLWFkZCcpKSB7XG4gICAgICAgIGNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lICsgJy1hZGQnKTtcbiAgICAgICAgY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpO1xuICAgICAgfVxuXG4gICAgICBjbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSk7XG4gICAgICB2YXIgcHJldkFuaW1hdGlvbk5hbWVzID0gX3RoaXM1Ll9nZXRFbGVtZW50QW5pbWF0aW9uTmFtZXMoZWxlbWVudCk7XG5cbiAgICAgIHZhciBfYW5pbVN0YXJ0MiA9IHZvaWQgMDtcbiAgICAgIHZhciBhbmltSGFzU3RhcnRlZCA9IGZhbHNlO1xuICAgICAgX3RoaXM1Ll9hZGRNdWx0aXBsZUV2ZW50TGlzdGVuZXIoZWxlbWVudCwgJ3dlYmtpdEFuaW1hdGlvblN0YXJ0IGFuaW1hdGlvbnN0YXJ0JywgX2FuaW1TdGFydDIgPSBmdW5jdGlvbiBhbmltU3RhcnQoZXZBbmltU3RhcnQpIHtcbiAgICAgICAgaWYgKGV2QW5pbVN0YXJ0LnRhcmdldCAhPT0gZWxlbWVudCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBhbmltSGFzU3RhcnRlZCA9IHRydWU7XG4gICAgICAgIF90aGlzNS5pc0FuaW1hdGluZyA9IHRydWU7XG5cbiAgICAgICAgaWYgKHN1cHByZXNzRXZlbnRzICE9PSB0cnVlKSB7XG4gICAgICAgICAgX3RoaXM1Ll90cmlnZ2VyRE9NRXZlbnQoYW5pbWF0aW9uRXZlbnQucmVtb3ZlQ2xhc3NBY3RpdmUsIGVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXZBbmltU3RhcnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgZXZBbmltU3RhcnQudGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZBbmltU3RhcnQudHlwZSwgX2FuaW1TdGFydDIpO1xuICAgICAgfSwgZmFsc2UpO1xuXG4gICAgICB2YXIgX2FuaW1FbmQyID0gdm9pZCAwO1xuICAgICAgX3RoaXM1Ll9hZGRNdWx0aXBsZUV2ZW50TGlzdGVuZXIoZWxlbWVudCwgJ3dlYmtpdEFuaW1hdGlvbkVuZCBhbmltYXRpb25lbmQnLCBfYW5pbUVuZDIgPSBmdW5jdGlvbiBhbmltRW5kKGV2QW5pbUVuZCkge1xuICAgICAgICBpZiAoIWFuaW1IYXNTdGFydGVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldkFuaW1FbmQudGFyZ2V0ICE9PSBlbGVtZW50KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUgKyAnLXJlbW92ZScpKSB7XG4gICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2QW5pbUVuZC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBjbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSk7XG5cbiAgICAgICAgY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUgKyAnLXJlbW92ZScpO1xuXG4gICAgICAgIGV2QW5pbUVuZC50YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldkFuaW1FbmQudHlwZSwgX2FuaW1FbmQyKTtcblxuICAgICAgICBfdGhpczUuaXNBbmltYXRpbmcgPSBmYWxzZTtcblxuICAgICAgICBpZiAoc3VwcHJlc3NFdmVudHMgIT09IHRydWUpIHtcbiAgICAgICAgICBfdGhpczUuX3RyaWdnZXJET01FdmVudChhbmltYXRpb25FdmVudC5yZW1vdmVDbGFzc0RvbmUsIGVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgIH0sIGZhbHNlKTtcblxuICAgICAgY2xhc3NMaXN0LmFkZChjbGFzc05hbWUgKyAnLXJlbW92ZScpO1xuXG4gICAgICB2YXIgYW5pbWF0aW9uTmFtZXMgPSBfdGhpczUuX2dldEVsZW1lbnRBbmltYXRpb25OYW1lcyhlbGVtZW50KTtcbiAgICAgIGlmICghX3RoaXM1Ll9hbmltYXRpb25DaGFuZ2VXaXRoVmFsaWRLZXlmcmFtZShhbmltYXRpb25OYW1lcywgcHJldkFuaW1hdGlvbk5hbWVzKSkge1xuICAgICAgICBjbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSArICctcmVtb3ZlJyk7XG4gICAgICAgIGNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lKTtcblxuICAgICAgICBfdGhpczUuX3JlbW92ZU11bHRpcGxlRXZlbnRMaXN0ZW5lcihlbGVtZW50LCAnd2Via2l0QW5pbWF0aW9uRW5kIGFuaW1hdGlvbmVuZCcsIF9hbmltRW5kMik7XG4gICAgICAgIF90aGlzNS5fcmVtb3ZlTXVsdGlwbGVFdmVudExpc3RlbmVyKGVsZW1lbnQsICd3ZWJraXRBbmltYXRpb25TdGFydCBhbmltYXRpb25zdGFydCcsIF9hbmltU3RhcnQyKTtcblxuICAgICAgICBpZiAoc3VwcHJlc3NFdmVudHMgIT09IHRydWUpIHtcbiAgICAgICAgICBfdGhpczUuX3RyaWdnZXJET01FdmVudChhbmltYXRpb25FdmVudC5yZW1vdmVDbGFzc1RpbWVvdXQsIGVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgQ3NzQW5pbWF0b3IucHJvdG90eXBlLmFkZENsYXNzID0gZnVuY3Rpb24gYWRkQ2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lKSB7XG4gICAgdmFyIF90aGlzNiA9IHRoaXM7XG5cbiAgICB2YXIgc3VwcHJlc3NFdmVudHMgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDIgfHwgYXJndW1lbnRzWzJdID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IGFyZ3VtZW50c1syXTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgY2xhc3NMaXN0ID0gZWxlbWVudC5jbGFzc0xpc3Q7XG5cbiAgICAgIGlmIChzdXBwcmVzc0V2ZW50cyAhPT0gdHJ1ZSkge1xuICAgICAgICBfdGhpczYuX3RyaWdnZXJET01FdmVudChhbmltYXRpb25FdmVudC5hZGRDbGFzc0JlZ2luLCBlbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUgKyAnLXJlbW92ZScpKSB7XG4gICAgICAgIGNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lICsgJy1yZW1vdmUnKTtcbiAgICAgICAgY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUpO1xuICAgICAgfVxuXG4gICAgICB2YXIgX2FuaW1TdGFydDMgPSB2b2lkIDA7XG4gICAgICB2YXIgYW5pbUhhc1N0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgIF90aGlzNi5fYWRkTXVsdGlwbGVFdmVudExpc3RlbmVyKGVsZW1lbnQsICd3ZWJraXRBbmltYXRpb25TdGFydCBhbmltYXRpb25zdGFydCcsIF9hbmltU3RhcnQzID0gZnVuY3Rpb24gYW5pbVN0YXJ0KGV2QW5pbVN0YXJ0KSB7XG4gICAgICAgIGlmIChldkFuaW1TdGFydC50YXJnZXQgIT09IGVsZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYW5pbUhhc1N0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICBfdGhpczYuaXNBbmltYXRpbmcgPSB0cnVlO1xuXG4gICAgICAgIGlmIChzdXBwcmVzc0V2ZW50cyAhPT0gdHJ1ZSkge1xuICAgICAgICAgIF90aGlzNi5fdHJpZ2dlckRPTUV2ZW50KGFuaW1hdGlvbkV2ZW50LmFkZENsYXNzQWN0aXZlLCBlbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2QW5pbVN0YXJ0LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGV2QW5pbVN0YXJ0LnRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKGV2QW5pbVN0YXJ0LnR5cGUsIF9hbmltU3RhcnQzKTtcbiAgICAgIH0sIGZhbHNlKTtcblxuICAgICAgdmFyIF9hbmltRW5kMyA9IHZvaWQgMDtcbiAgICAgIF90aGlzNi5fYWRkTXVsdGlwbGVFdmVudExpc3RlbmVyKGVsZW1lbnQsICd3ZWJraXRBbmltYXRpb25FbmQgYW5pbWF0aW9uZW5kJywgX2FuaW1FbmQzID0gZnVuY3Rpb24gYW5pbUVuZChldkFuaW1FbmQpIHtcbiAgICAgICAgaWYgKCFhbmltSGFzU3RhcnRlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZBbmltRW5kLnRhcmdldCAhPT0gZWxlbWVudCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lICsgJy1hZGQnKSkge1xuICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBldkFuaW1FbmQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpO1xuXG4gICAgICAgIGNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lICsgJy1hZGQnKTtcblxuICAgICAgICBldkFuaW1FbmQudGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZBbmltRW5kLnR5cGUsIF9hbmltRW5kMyk7XG5cbiAgICAgICAgX3RoaXM2LmlzQW5pbWF0aW5nID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHN1cHByZXNzRXZlbnRzICE9PSB0cnVlKSB7XG4gICAgICAgICAgX3RoaXM2Ll90cmlnZ2VyRE9NRXZlbnQoYW5pbWF0aW9uRXZlbnQuYWRkQ2xhc3NEb25lLCBlbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICB9LCBmYWxzZSk7XG5cbiAgICAgIHZhciBwcmV2QW5pbWF0aW9uTmFtZXMgPSBfdGhpczYuX2dldEVsZW1lbnRBbmltYXRpb25OYW1lcyhlbGVtZW50KTtcblxuICAgICAgY2xhc3NMaXN0LmFkZChjbGFzc05hbWUgKyAnLWFkZCcpO1xuXG4gICAgICB2YXIgYW5pbWF0aW9uTmFtZXMgPSBfdGhpczYuX2dldEVsZW1lbnRBbmltYXRpb25OYW1lcyhlbGVtZW50KTtcbiAgICAgIGlmICghX3RoaXM2Ll9hbmltYXRpb25DaGFuZ2VXaXRoVmFsaWRLZXlmcmFtZShhbmltYXRpb25OYW1lcywgcHJldkFuaW1hdGlvbk5hbWVzKSkge1xuICAgICAgICBjbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSArICctYWRkJyk7XG4gICAgICAgIGNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTtcblxuICAgICAgICBfdGhpczYuX3JlbW92ZU11bHRpcGxlRXZlbnRMaXN0ZW5lcihlbGVtZW50LCAnd2Via2l0QW5pbWF0aW9uRW5kIGFuaW1hdGlvbmVuZCcsIF9hbmltRW5kMyk7XG4gICAgICAgIF90aGlzNi5fcmVtb3ZlTXVsdGlwbGVFdmVudExpc3RlbmVyKGVsZW1lbnQsICd3ZWJraXRBbmltYXRpb25TdGFydCBhbmltYXRpb25zdGFydCcsIF9hbmltU3RhcnQzKTtcblxuICAgICAgICBpZiAoc3VwcHJlc3NFdmVudHMgIT09IHRydWUpIHtcbiAgICAgICAgICBfdGhpczYuX3RyaWdnZXJET01FdmVudChhbmltYXRpb25FdmVudC5hZGRDbGFzc1RpbWVvdXQsIGVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIENzc0FuaW1hdG9yO1xufSgpO1xuXG5leHBvcnQgZnVuY3Rpb24gY29uZmlndXJlKGNvbmZpZywgY2FsbGJhY2spIHtcbiAgdmFyIGFuaW1hdG9yID0gY29uZmlnLmNvbnRhaW5lci5nZXQoQ3NzQW5pbWF0b3IpO1xuICBjb25maWcuY29udGFpbmVyLmdldChUZW1wbGF0aW5nRW5naW5lKS5jb25maWd1cmVBbmltYXRvcihhbmltYXRvcik7XG4gIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYWxsYmFjayhhbmltYXRvcik7XG4gIH1cbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///aurelia-animator-css\n")},"aurelia-event-aggregator":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"EventAggregator\", function() { return EventAggregator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"includeEventsIn\", function() { return includeEventsIn; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"configure\", function() { return configure; });\n/* harmony import */ var aurelia_logging__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5);\n\n\n\n\nvar logger = aurelia_logging__WEBPACK_IMPORTED_MODULE_0__[\"getLogger\"]('event-aggregator');\n\nvar Handler = function () {\n  function Handler(messageType, callback) {\n    \n\n    this.messageType = messageType;\n    this.callback = callback;\n  }\n\n  Handler.prototype.handle = function handle(message) {\n    if (message instanceof this.messageType) {\n      this.callback.call(null, message);\n    }\n  };\n\n  return Handler;\n}();\n\nfunction invokeCallback(callback, data, event) {\n  try {\n    callback(data, event);\n  } catch (e) {\n    logger.error(e);\n  }\n}\n\nfunction invokeHandler(handler, data) {\n  try {\n    handler.handle(data);\n  } catch (e) {\n    logger.error(e);\n  }\n}\n\nvar EventAggregator = function () {\n  function EventAggregator() {\n    \n\n    this.eventLookup = {};\n    this.messageHandlers = [];\n  }\n\n  EventAggregator.prototype.publish = function publish(event, data) {\n    var subscribers = void 0;\n    var i = void 0;\n\n    if (!event) {\n      throw new Error('Event was invalid.');\n    }\n\n    if (typeof event === 'string') {\n      subscribers = this.eventLookup[event];\n      if (subscribers) {\n        subscribers = subscribers.slice();\n        i = subscribers.length;\n\n        while (i--) {\n          invokeCallback(subscribers[i], data, event);\n        }\n      }\n    } else {\n      subscribers = this.messageHandlers.slice();\n      i = subscribers.length;\n\n      while (i--) {\n        invokeHandler(subscribers[i], event);\n      }\n    }\n  };\n\n  EventAggregator.prototype.subscribe = function subscribe(event, callback) {\n    var handler = void 0;\n    var subscribers = void 0;\n\n    if (!event) {\n      throw new Error('Event channel/type was invalid.');\n    }\n\n    if (typeof event === 'string') {\n      handler = callback;\n      subscribers = this.eventLookup[event] || (this.eventLookup[event] = []);\n    } else {\n      handler = new Handler(event, callback);\n      subscribers = this.messageHandlers;\n    }\n\n    subscribers.push(handler);\n\n    return {\n      dispose: function dispose() {\n        var idx = subscribers.indexOf(handler);\n        if (idx !== -1) {\n          subscribers.splice(idx, 1);\n        }\n      }\n    };\n  };\n\n  EventAggregator.prototype.subscribeOnce = function subscribeOnce(event, callback) {\n    var sub = this.subscribe(event, function (a, b) {\n      sub.dispose();\n      return callback(a, b);\n    });\n\n    return sub;\n  };\n\n  return EventAggregator;\n}();\n\nfunction includeEventsIn(obj) {\n  var ea = new EventAggregator();\n\n  obj.subscribeOnce = function (event, callback) {\n    return ea.subscribeOnce(event, callback);\n  };\n\n  obj.subscribe = function (event, callback) {\n    return ea.subscribe(event, callback);\n  };\n\n  obj.publish = function (event, data) {\n    ea.publish(event, data);\n  };\n\n  return ea;\n}\n\nfunction configure(config) {\n  config.instance(EventAggregator, includeEventsIn(config.aurelia));\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXVyZWxpYS1ldmVudC1hZ2dyZWdhdG9yL2Rpc3QvbmF0aXZlLW1vZHVsZXMvYXVyZWxpYS1ldmVudC1hZ2dyZWdhdG9yLmpzP2NhOTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUU4Qzs7QUFFOUMsYUFBYSx5REFBb0I7O0FBRWpDO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRU87QUFDUDs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRU07QUFDUDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVPO0FBQ1A7QUFDQSIsImZpbGUiOiJhdXJlbGlhLWV2ZW50LWFnZ3JlZ2F0b3IuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcblxuaW1wb3J0ICogYXMgTG9nTWFuYWdlciBmcm9tICdhdXJlbGlhLWxvZ2dpbmcnO1xuXG52YXIgbG9nZ2VyID0gTG9nTWFuYWdlci5nZXRMb2dnZXIoJ2V2ZW50LWFnZ3JlZ2F0b3InKTtcblxudmFyIEhhbmRsZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEhhbmRsZXIobWVzc2FnZVR5cGUsIGNhbGxiYWNrKSB7XG4gICAgXG5cbiAgICB0aGlzLm1lc3NhZ2VUeXBlID0gbWVzc2FnZVR5cGU7XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICB9XG5cbiAgSGFuZGxlci5wcm90b3R5cGUuaGFuZGxlID0gZnVuY3Rpb24gaGFuZGxlKG1lc3NhZ2UpIHtcbiAgICBpZiAobWVzc2FnZSBpbnN0YW5jZW9mIHRoaXMubWVzc2FnZVR5cGUpIHtcbiAgICAgIHRoaXMuY2FsbGJhY2suY2FsbChudWxsLCBtZXNzYWdlKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIEhhbmRsZXI7XG59KCk7XG5cbmZ1bmN0aW9uIGludm9rZUNhbGxiYWNrKGNhbGxiYWNrLCBkYXRhLCBldmVudCkge1xuICB0cnkge1xuICAgIGNhbGxiYWNrKGRhdGEsIGV2ZW50KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ2dlci5lcnJvcihlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnZva2VIYW5kbGVyKGhhbmRsZXIsIGRhdGEpIHtcbiAgdHJ5IHtcbiAgICBoYW5kbGVyLmhhbmRsZShkYXRhKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ2dlci5lcnJvcihlKTtcbiAgfVxufVxuXG5leHBvcnQgdmFyIEV2ZW50QWdncmVnYXRvciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRXZlbnRBZ2dyZWdhdG9yKCkge1xuICAgIFxuXG4gICAgdGhpcy5ldmVudExvb2t1cCA9IHt9O1xuICAgIHRoaXMubWVzc2FnZUhhbmRsZXJzID0gW107XG4gIH1cblxuICBFdmVudEFnZ3JlZ2F0b3IucHJvdG90eXBlLnB1Ymxpc2ggPSBmdW5jdGlvbiBwdWJsaXNoKGV2ZW50LCBkYXRhKSB7XG4gICAgdmFyIHN1YnNjcmliZXJzID0gdm9pZCAwO1xuICAgIHZhciBpID0gdm9pZCAwO1xuXG4gICAgaWYgKCFldmVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFdmVudCB3YXMgaW52YWxpZC4nKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGV2ZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgc3Vic2NyaWJlcnMgPSB0aGlzLmV2ZW50TG9va3VwW2V2ZW50XTtcbiAgICAgIGlmIChzdWJzY3JpYmVycykge1xuICAgICAgICBzdWJzY3JpYmVycyA9IHN1YnNjcmliZXJzLnNsaWNlKCk7XG4gICAgICAgIGkgPSBzdWJzY3JpYmVycy5sZW5ndGg7XG5cbiAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgIGludm9rZUNhbGxiYWNrKHN1YnNjcmliZXJzW2ldLCBkYXRhLCBldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3Vic2NyaWJlcnMgPSB0aGlzLm1lc3NhZ2VIYW5kbGVycy5zbGljZSgpO1xuICAgICAgaSA9IHN1YnNjcmliZXJzLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICBpbnZva2VIYW5kbGVyKHN1YnNjcmliZXJzW2ldLCBldmVudCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIEV2ZW50QWdncmVnYXRvci5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24gc3Vic2NyaWJlKGV2ZW50LCBjYWxsYmFjaykge1xuICAgIHZhciBoYW5kbGVyID0gdm9pZCAwO1xuICAgIHZhciBzdWJzY3JpYmVycyA9IHZvaWQgMDtcblxuICAgIGlmICghZXZlbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXZlbnQgY2hhbm5lbC90eXBlIHdhcyBpbnZhbGlkLicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZXZlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBoYW5kbGVyID0gY2FsbGJhY2s7XG4gICAgICBzdWJzY3JpYmVycyA9IHRoaXMuZXZlbnRMb29rdXBbZXZlbnRdIHx8ICh0aGlzLmV2ZW50TG9va3VwW2V2ZW50XSA9IFtdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGFuZGxlciA9IG5ldyBIYW5kbGVyKGV2ZW50LCBjYWxsYmFjayk7XG4gICAgICBzdWJzY3JpYmVycyA9IHRoaXMubWVzc2FnZUhhbmRsZXJzO1xuICAgIH1cblxuICAgIHN1YnNjcmliZXJzLnB1c2goaGFuZGxlcik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGlzcG9zZTogZnVuY3Rpb24gZGlzcG9zZSgpIHtcbiAgICAgICAgdmFyIGlkeCA9IHN1YnNjcmliZXJzLmluZGV4T2YoaGFuZGxlcik7XG4gICAgICAgIGlmIChpZHggIT09IC0xKSB7XG4gICAgICAgICAgc3Vic2NyaWJlcnMuc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9O1xuXG4gIEV2ZW50QWdncmVnYXRvci5wcm90b3R5cGUuc3Vic2NyaWJlT25jZSA9IGZ1bmN0aW9uIHN1YnNjcmliZU9uY2UoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHN1YiA9IHRoaXMuc3Vic2NyaWJlKGV2ZW50LCBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgc3ViLmRpc3Bvc2UoKTtcbiAgICAgIHJldHVybiBjYWxsYmFjayhhLCBiKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBzdWI7XG4gIH07XG5cbiAgcmV0dXJuIEV2ZW50QWdncmVnYXRvcjtcbn0oKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGluY2x1ZGVFdmVudHNJbihvYmopIHtcbiAgdmFyIGVhID0gbmV3IEV2ZW50QWdncmVnYXRvcigpO1xuXG4gIG9iai5zdWJzY3JpYmVPbmNlID0gZnVuY3Rpb24gKGV2ZW50LCBjYWxsYmFjaykge1xuICAgIHJldHVybiBlYS5zdWJzY3JpYmVPbmNlKGV2ZW50LCBjYWxsYmFjayk7XG4gIH07XG5cbiAgb2JqLnN1YnNjcmliZSA9IGZ1bmN0aW9uIChldmVudCwgY2FsbGJhY2spIHtcbiAgICByZXR1cm4gZWEuc3Vic2NyaWJlKGV2ZW50LCBjYWxsYmFjayk7XG4gIH07XG5cbiAgb2JqLnB1Ymxpc2ggPSBmdW5jdGlvbiAoZXZlbnQsIGRhdGEpIHtcbiAgICBlYS5wdWJsaXNoKGV2ZW50LCBkYXRhKTtcbiAgfTtcblxuICByZXR1cm4gZWE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25maWd1cmUoY29uZmlnKSB7XG4gIGNvbmZpZy5pbnN0YW5jZShFdmVudEFnZ3JlZ2F0b3IsIGluY2x1ZGVFdmVudHNJbihjb25maWcuYXVyZWxpYSkpO1xufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///aurelia-event-aggregator\n")},"aurelia-framework":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Aurelia", function() { return Aurelia; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FrameworkConfiguration", function() { return FrameworkConfiguration; });\n/* harmony import */ var aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6);\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "_emptyParameters", function() { return aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_0__["n"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "InvocationHandler", function() { return aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_0__["e"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Container", function() { return aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_0__["b"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "autoinject", function() { return aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_0__["p"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "inject", function() { return aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_0__["s"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "invoker", function() { return aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_0__["u"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "invokeAsFactory", function() { return aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_0__["t"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "FactoryInvoker", function() { return aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_0__["d"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "registration", function() { return aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_0__["z"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "transient", function() { return aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_0__["C"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "singleton", function() { return aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_0__["B"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "TransientRegistration", function() { return aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_0__["m"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SingletonRegistration", function() { return aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_0__["j"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resolver", function() { return aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_0__["A"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Strategy", function() { return aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_0__["k"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "StrategyResolver", function() { return aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_0__["l"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Lazy", function() { return aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_0__["f"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "All", function() { return aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_0__["a"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Optional", function() { return aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_0__["h"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Parent", function() { return aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_0__["i"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Factory", function() { return aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_0__["c"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "NewInstance", function() { return aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_0__["g"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getDecoratorDependencies", function() { return aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_0__["r"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "lazy", function() { return aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_0__["v"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "all", function() { return aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_0__["o"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "optional", function() { return aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_0__["x"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "parent", function() { return aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_0__["y"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "factory", function() { return aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_0__["q"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "newInstance", function() { return aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_0__["w"]; });\n\n/* harmony import */ var aurelia_binding__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1);\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getArrayObserver", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["getArrayObserver"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getMapObserver", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["getMapObserver"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getSetObserver", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["getSetObserver"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "targetContext", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["targetContext"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "sourceContext", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["sourceContext"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "camelCase", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["camelCase"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createOverrideContext", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["createOverrideContext"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getContextFor", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["getContextFor"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createScopeForTest", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["createScopeForTest"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "connectable", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["connectable"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "enqueueBindingConnect", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["enqueueBindingConnect"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setConnectQueueThreshold", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["setConnectQueueThreshold"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "enableConnectQueue", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["enableConnectQueue"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "disableConnectQueue", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["disableConnectQueue"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getConnectQueueSize", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["getConnectQueueSize"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "subscriberCollection", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["subscriberCollection"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ExpressionObserver", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["ExpressionObserver"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "calcSplices", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["calcSplices"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mergeSplice", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["mergeSplice"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "projectArraySplices", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["projectArraySplices"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getChangeRecords", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["getChangeRecords"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ModifyCollectionObserver", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["ModifyCollectionObserver"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "CollectionLengthObserver", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["CollectionLengthObserver"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Expression", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["Expression"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "BindingBehavior", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["BindingBehavior"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ValueConverter", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["ValueConverter"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Assign", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["Assign"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Conditional", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["Conditional"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "AccessThis", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["AccessThis"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "AccessScope", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["AccessScope"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "AccessMember", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["AccessMember"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "AccessKeyed", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["AccessKeyed"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "CallScope", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["CallScope"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "CallMember", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["CallMember"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "CallFunction", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["CallFunction"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Binary", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["Binary"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Unary", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["Unary"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "LiteralPrimitive", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["LiteralPrimitive"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "LiteralString", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["LiteralString"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "LiteralTemplate", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["LiteralTemplate"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "LiteralArray", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["LiteralArray"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "LiteralObject", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["LiteralObject"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Unparser", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["Unparser"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ExpressionCloner", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["ExpressionCloner"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "cloneExpression", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["cloneExpression"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bindingMode", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["bindingMode"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Parser", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["Parser"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ParserImplementation", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["ParserImplementation"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "delegationStrategy", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["delegationStrategy"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "EventManager", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["EventManager"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "EventSubscriber", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["EventSubscriber"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DirtyChecker", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["DirtyChecker"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DirtyCheckProperty", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["DirtyCheckProperty"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "propertyAccessor", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["propertyAccessor"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "PrimitiveObserver", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["PrimitiveObserver"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SetterObserver", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["SetterObserver"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "XLinkAttributeObserver", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["XLinkAttributeObserver"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "dataAttributeAccessor", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["dataAttributeAccessor"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DataAttributeObserver", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["DataAttributeObserver"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "StyleObserver", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["StyleObserver"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ValueAttributeObserver", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["ValueAttributeObserver"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "CheckedObserver", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["CheckedObserver"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SelectValueObserver", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["SelectValueObserver"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ClassObserver", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["ClassObserver"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "hasDeclaredDependencies", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["hasDeclaredDependencies"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "declarePropertyDependencies", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["declarePropertyDependencies"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "computedFrom", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["computedFrom"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ComputedExpression", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["ComputedExpression"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createComputedObserver", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["createComputedObserver"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "elements", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["elements"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "presentationElements", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["presentationElements"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "presentationAttributes", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["presentationAttributes"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SVGAnalyzer", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["SVGAnalyzer"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ObserverLocator", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["ObserverLocator"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ObjectObservationAdapter", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["ObjectObservationAdapter"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "BindingExpression", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["BindingExpression"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Binding", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["Binding"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "CallExpression", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["CallExpression"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Call", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["Call"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ValueConverterResource", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["ValueConverterResource"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "valueConverter", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["valueConverter"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "BindingBehaviorResource", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["BindingBehaviorResource"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bindingBehavior", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["bindingBehavior"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ListenerExpression", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["ListenerExpression"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Listener", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["Listener"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "NameExpression", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["NameExpression"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "BindingEngine", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["BindingEngine"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "observable", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["observable"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "connectBindingToSignal", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["connectBindingToSignal"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "signalBindings", function() { return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["signalBindings"]; });\n\n/* harmony import */ var aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4);\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "metadata", function() { return aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__["d"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Origin", function() { return aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__["a"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "decorators", function() { return aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__["b"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "deprecated", function() { return aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__["c"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mixin", function() { return aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__["e"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "protocol", function() { return aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__["f"]; });\n\n/* harmony import */ var aurelia_templating__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(3);\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Animator", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["a"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "BehaviorInstruction", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["b"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "BehaviorPropertyObserver", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["c"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "BindableProperty", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["d"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "BindingLanguage", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["e"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "BoundViewFactory", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["f"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "CompositionEngine", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["g"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "CompositionTransaction", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["h"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "CompositionTransactionNotifier", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["i"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "CompositionTransactionOwnershipToken", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["j"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Controller", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["k"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ConventionalViewStrategy", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["l"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ElementConfigResource", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["m"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ElementEvents", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["n"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "HtmlBehaviorResource", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["o"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "InlineViewStrategy", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["p"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ModuleAnalyzer", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["q"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "NoViewStrategy", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["r"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "PassThroughSlot", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["s"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "RelativeViewStrategy", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["t"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ResourceDescription", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["u"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ResourceLoadContext", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["v"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ResourceModule", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["w"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ShadowDOM", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["x"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ShadowSlot", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["y"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SlotCustomAttribute", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["z"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "StaticViewStrategy", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["A"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SwapStrategies", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["B"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "TargetInstruction", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["C"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "TemplateRegistryViewStrategy", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["D"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "TemplatingEngine", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["E"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "View", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["F"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ViewCompileInstruction", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["G"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ViewCompiler", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["H"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ViewEngine", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["I"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ViewEngineHooksResource", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["J"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ViewFactory", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["K"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ViewLocator", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["L"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ViewResources", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["M"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ViewSlot", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["N"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "_hyphenate", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["O"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "_isAllWhitespace", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["P"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "animationEvent", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["Q"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "behavior", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["R"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bindable", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["S"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "child", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["T"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "children", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["U"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "containerless", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["V"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "customAttribute", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["W"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "customElement", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["X"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "dynamicOptions", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["Y"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "elementConfig", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["Z"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "inlineView", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["Aa"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "noView", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["Ba"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "processAttributes", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["Ca"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "processContent", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["Da"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resource", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["Ea"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "templateController", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["Fa"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "useShadowDOM", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["Ga"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "useView", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["Ha"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "useViewStrategy", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["Ia"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "validateBehaviorName", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["Ja"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "view", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["Ka"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "viewEngineHooks", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["La"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "viewResources", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["Ma"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "viewStrategy", function() { return aurelia_templating__WEBPACK_IMPORTED_MODULE_3__["Na"]; });\n\n/* harmony import */ var aurelia_loader__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(8);\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "TemplateDependency", function() { return aurelia_loader__WEBPACK_IMPORTED_MODULE_4__["b"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "TemplateRegistryEntry", function() { return aurelia_loader__WEBPACK_IMPORTED_MODULE_4__["c"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Loader", function() { return aurelia_loader__WEBPACK_IMPORTED_MODULE_4__["a"]; });\n\n/* harmony import */ var aurelia_task_queue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(10);\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "TaskQueue", function() { return aurelia_task_queue__WEBPACK_IMPORTED_MODULE_5__["a"]; });\n\n/* harmony import */ var aurelia_path__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(7);\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "buildQueryString", function() { return aurelia_path__WEBPACK_IMPORTED_MODULE_6__["buildQueryString"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "join", function() { return aurelia_path__WEBPACK_IMPORTED_MODULE_6__["join"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "parseQueryString", function() { return aurelia_path__WEBPACK_IMPORTED_MODULE_6__["parseQueryString"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "relativeToFile", function() { return aurelia_path__WEBPACK_IMPORTED_MODULE_6__["relativeToFile"]; });\n\n/* harmony import */ var aurelia_pal__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(0);\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "AggregateError", function() { return aurelia_pal__WEBPACK_IMPORTED_MODULE_7__["a"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "FEATURE", function() { return aurelia_pal__WEBPACK_IMPORTED_MODULE_7__["c"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "PLATFORM", function() { return aurelia_pal__WEBPACK_IMPORTED_MODULE_7__["d"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DOM", function() { return aurelia_pal__WEBPACK_IMPORTED_MODULE_7__["b"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isInitialized", function() { return aurelia_pal__WEBPACK_IMPORTED_MODULE_7__["f"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "initializePAL", function() { return aurelia_pal__WEBPACK_IMPORTED_MODULE_7__["e"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "reset", function() { return aurelia_pal__WEBPACK_IMPORTED_MODULE_7__["g"]; });\n\n/* harmony import */ var aurelia_logging__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(5);\n/* harmony reexport (module object) */ __webpack_require__.d(__webpack_exports__, "LogManager", function() { return aurelia_logging__WEBPACK_IMPORTED_MODULE_8__; });\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar logger = aurelia_logging__WEBPACK_IMPORTED_MODULE_8__["getLogger"](\'aurelia\');\r\nvar extPattern = /\\.[^/.]+$/;\r\nfunction runTasks(config, tasks) {\r\n    var current;\r\n    var next = function () {\r\n        current = tasks.shift();\r\n        if (current) {\r\n            return Promise.resolve(current(config)).then(next);\r\n        }\r\n        return Promise.resolve();\r\n    };\r\n    return next();\r\n}\r\nfunction loadPlugin(fwConfig, loader, info) {\r\n    logger.debug("Loading plugin ".concat(info.moduleId, "."));\r\n    if (typeof info.moduleId === \'string\') {\r\n        fwConfig.resourcesRelativeTo = info.resourcesRelativeTo;\r\n        var id = info.moduleId;\r\n        if (info.resourcesRelativeTo.length > 1) {\r\n            return loader.normalize(info.moduleId, info.resourcesRelativeTo[1])\r\n                .then(function (normalizedId) { return _loadPlugin(normalizedId); });\r\n        }\r\n        return _loadPlugin(id);\r\n    }\r\n    else if (typeof info.configure === \'function\') {\r\n        if (fwConfig.configuredPlugins.indexOf(info.configure) !== -1) {\r\n            return Promise.resolve();\r\n        }\r\n        fwConfig.configuredPlugins.push(info.configure);\r\n        return Promise.resolve(info.configure.call(null, fwConfig, info.config || {}));\r\n    }\r\n    throw new Error(invalidConfigMsg(info.moduleId || info.configure, \'plugin\'));\r\n    function _loadPlugin(moduleId) {\r\n        return loader.loadModule(moduleId).then(function (m) {\r\n            if (\'configure\' in m) {\r\n                if (fwConfig.configuredPlugins.indexOf(m.configure) !== -1) {\r\n                    return Promise.resolve();\r\n                }\r\n                return Promise.resolve(m.configure(fwConfig, info.config || {})).then(function () {\r\n                    fwConfig.configuredPlugins.push(m.configure);\r\n                    fwConfig.resourcesRelativeTo = null;\r\n                    logger.debug("Configured plugin ".concat(info.moduleId, "."));\r\n                });\r\n            }\r\n            fwConfig.resourcesRelativeTo = null;\r\n            logger.debug("Loaded plugin ".concat(info.moduleId, "."));\r\n        });\r\n    }\r\n}\r\nfunction loadResources(aurelia, resourcesToLoad, appResources) {\r\n    if (Object.keys(resourcesToLoad).length === 0) {\r\n        return Promise.resolve();\r\n    }\r\n    var viewEngine = aurelia.container.get(aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* ViewEngine */ "I"]);\r\n    return Promise.all(Object.keys(resourcesToLoad).map(function (n) { return _normalize(resourcesToLoad[n]); }))\r\n        .then(function (loads) {\r\n        var names = [];\r\n        var importIds = [];\r\n        loads.forEach(function (l) {\r\n            names.push(undefined);\r\n            importIds.push(l.importId);\r\n        });\r\n        return viewEngine.importViewResources(importIds, names, appResources);\r\n    });\r\n    function _normalize(load) {\r\n        var moduleId = load.moduleId;\r\n        var ext = getExt(moduleId);\r\n        if (isOtherResource(moduleId)) {\r\n            moduleId = removeExt(moduleId);\r\n        }\r\n        return aurelia.loader.normalize(moduleId, load.relativeTo)\r\n            .then(function (normalized) {\r\n            return {\r\n                name: load.moduleId,\r\n                importId: isOtherResource(load.moduleId) ? addOriginalExt(normalized, ext) : normalized\r\n            };\r\n        });\r\n    }\r\n    function isOtherResource(name) {\r\n        var ext = getExt(name);\r\n        if (!ext)\r\n            return false;\r\n        if (ext === \'\')\r\n            return false;\r\n        if (ext === \'.js\' || ext === \'.ts\')\r\n            return false;\r\n        return true;\r\n    }\r\n    function removeExt(name) {\r\n        return name.replace(extPattern, \'\');\r\n    }\r\n    function addOriginalExt(normalized, ext) {\r\n        return removeExt(normalized) + \'.\' + ext;\r\n    }\r\n}\r\nfunction getExt(name) {\r\n    var match = name.match(extPattern);\r\n    if (match && match.length > 0) {\r\n        return (match[0].split(\'.\'))[1];\r\n    }\r\n}\r\nfunction loadBehaviors(config) {\r\n    return Promise.all(config.behaviorsToLoad.map(function (m) { return m.load(config.container, m.target); })).then(function () {\r\n        config.behaviorsToLoad = null;\r\n    });\r\n}\r\nfunction assertProcessed(plugins) {\r\n    if (plugins.processed) {\r\n        throw new Error(\'This config instance has already been applied. To load more plugins or global resources, create a new FrameworkConfiguration instance.\');\r\n    }\r\n}\r\nfunction invalidConfigMsg(cfg, type) {\r\n    return "Invalid ".concat(type, " [").concat(cfg, "], ").concat(type, " must be specified as functions or relative module IDs.");\r\n}\r\nvar FrameworkConfiguration = (function () {\r\n    function FrameworkConfiguration(aurelia) {\r\n        var _this = this;\r\n        this.aurelia = aurelia;\r\n        this.container = aurelia.container;\r\n        this.info = [];\r\n        this.processed = false;\r\n        this.preTasks = [];\r\n        this.postTasks = [];\r\n        this.behaviorsToLoad = [];\r\n        this.configuredPlugins = [];\r\n        this.resourcesToLoad = {};\r\n        this.preTask(function () { return aurelia.loader.normalize(\'aurelia-bootstrapper\', undefined)\r\n            .then(function (name) { return _this.bootstrapperName = name; }); });\r\n        this.postTask(function () { return loadResources(aurelia, _this.resourcesToLoad, aurelia.resources); });\r\n    }\r\n    FrameworkConfiguration.prototype.instance = function (type, instance) {\r\n        this.container.registerInstance(type, instance);\r\n        return this;\r\n    };\r\n    FrameworkConfiguration.prototype.singleton = function (type, implementation) {\r\n        this.container.registerSingleton(type, implementation);\r\n        return this;\r\n    };\r\n    FrameworkConfiguration.prototype.transient = function (type, implementation) {\r\n        this.container.registerTransient(type, implementation);\r\n        return this;\r\n    };\r\n    FrameworkConfiguration.prototype.preTask = function (task) {\r\n        assertProcessed(this);\r\n        this.preTasks.push(task);\r\n        return this;\r\n    };\r\n    FrameworkConfiguration.prototype.postTask = function (task) {\r\n        assertProcessed(this);\r\n        this.postTasks.push(task);\r\n        return this;\r\n    };\r\n    FrameworkConfiguration.prototype.feature = function (plugin, config) {\r\n        if (config === void 0) { config = {}; }\r\n        switch (typeof plugin) {\r\n            case \'string\':\r\n                var hasIndex = /\\/index$/i.test(plugin);\r\n                var moduleId = hasIndex || getExt(plugin) ? plugin : plugin + \'/index\';\r\n                var root = hasIndex ? plugin.slice(0, -6) : plugin;\r\n                this.info.push({ moduleId: moduleId, resourcesRelativeTo: [root, \'\'], config: config });\r\n                break;\r\n            case \'function\':\r\n                this.info.push({ configure: plugin, config: config || {} });\r\n                break;\r\n            default:\r\n                throw new Error(invalidConfigMsg(plugin, \'feature\'));\r\n        }\r\n        return this;\r\n    };\r\n    FrameworkConfiguration.prototype.globalResources = function (resources) {\r\n        var _this = this;\r\n        assertProcessed(this);\r\n        var toAdd = Array.isArray(resources) ? resources : arguments;\r\n        var resource;\r\n        var resourcesRelativeTo = this.resourcesRelativeTo || [\'\', \'\'];\r\n        for (var i = 0, ii = toAdd.length; i < ii; ++i) {\r\n            resource = toAdd[i];\r\n            switch (typeof resource) {\r\n                case \'string\':\r\n                    var parent_1 = resourcesRelativeTo[0];\r\n                    var grandParent = resourcesRelativeTo[1];\r\n                    var name_1 = resource;\r\n                    if ((resource.startsWith(\'./\') || resource.startsWith(\'../\')) && parent_1 !== \'\') {\r\n                        name_1 = Object(aurelia_path__WEBPACK_IMPORTED_MODULE_6__["join"])(parent_1, resource);\r\n                    }\r\n                    this.resourcesToLoad[name_1] = { moduleId: name_1, relativeTo: grandParent };\r\n                    break;\r\n                case \'function\':\r\n                    var meta = this.aurelia.resources.autoRegister(this.container, resource);\r\n                    if (meta instanceof aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* HtmlBehaviorResource */ "o"] && meta.elementName !== null) {\r\n                        if (this.behaviorsToLoad.push(meta) === 1) {\r\n                            this.postTask(function () { return loadBehaviors(_this); });\r\n                        }\r\n                    }\r\n                    break;\r\n                default:\r\n                    throw new Error(invalidConfigMsg(resource, \'resource\'));\r\n            }\r\n        }\r\n        return this;\r\n    };\r\n    FrameworkConfiguration.prototype.globalName = function (resourcePath, newName) {\r\n        assertProcessed(this);\r\n        this.resourcesToLoad[resourcePath] = { moduleId: newName, relativeTo: \'\' };\r\n        return this;\r\n    };\r\n    FrameworkConfiguration.prototype.plugin = function (plugin, pluginConfig) {\r\n        assertProcessed(this);\r\n        var info;\r\n        switch (typeof plugin) {\r\n            case \'string\':\r\n                info = { moduleId: plugin, resourcesRelativeTo: [plugin, \'\'], config: pluginConfig || {} };\r\n                break;\r\n            case \'function\':\r\n                info = { configure: plugin, config: pluginConfig || {} };\r\n                break;\r\n            default:\r\n                throw new Error(invalidConfigMsg(plugin, \'plugin\'));\r\n        }\r\n        this.info.push(info);\r\n        return this;\r\n    };\r\n    FrameworkConfiguration.prototype._addNormalizedPlugin = function (name, config) {\r\n        var _this = this;\r\n        var plugin = { moduleId: name, resourcesRelativeTo: [name, \'\'], config: config || {} };\r\n        this.info.push(plugin);\r\n        this.preTask(function () {\r\n            var relativeTo = [name, _this.bootstrapperName];\r\n            plugin.moduleId = name;\r\n            plugin.resourcesRelativeTo = relativeTo;\r\n            return Promise.resolve();\r\n        });\r\n        return this;\r\n    };\r\n    FrameworkConfiguration.prototype.defaultBindingLanguage = function () {\r\n        return this._addNormalizedPlugin(\'aurelia-templating-binding\');\r\n    };\r\n    FrameworkConfiguration.prototype.router = function () {\r\n        return this._addNormalizedPlugin(\'aurelia-templating-router\');\r\n    };\r\n    FrameworkConfiguration.prototype.history = function () {\r\n        return this._addNormalizedPlugin(\'aurelia-history-browser\');\r\n    };\r\n    FrameworkConfiguration.prototype.defaultResources = function () {\r\n        return this._addNormalizedPlugin(\'aurelia-templating-resources\');\r\n    };\r\n    FrameworkConfiguration.prototype.eventAggregator = function () {\r\n        return this._addNormalizedPlugin(\'aurelia-event-aggregator\');\r\n    };\r\n    FrameworkConfiguration.prototype.basicConfiguration = function () {\r\n        return this.defaultBindingLanguage().defaultResources().eventAggregator();\r\n    };\r\n    FrameworkConfiguration.prototype.standardConfiguration = function () {\r\n        return this.basicConfiguration().history().router();\r\n    };\r\n    FrameworkConfiguration.prototype.developmentLogging = function (level) {\r\n        var _this = this;\r\n        var logLevel = level ? aurelia_logging__WEBPACK_IMPORTED_MODULE_8__["logLevel"][level] : undefined;\r\n        if (logLevel === undefined) {\r\n            logLevel = aurelia_logging__WEBPACK_IMPORTED_MODULE_8__["logLevel"].debug;\r\n        }\r\n        this.preTask(function () {\r\n            return _this.aurelia.loader.normalize(\'aurelia-logging-console\', _this.bootstrapperName).then(function (name) {\r\n                return _this.aurelia.loader.loadModule(name).then(function (m) {\r\n                    aurelia_logging__WEBPACK_IMPORTED_MODULE_8__["addAppender"](new m.ConsoleAppender());\r\n                    aurelia_logging__WEBPACK_IMPORTED_MODULE_8__["setLevel"](logLevel);\r\n                });\r\n            });\r\n        });\r\n        return this;\r\n    };\r\n    FrameworkConfiguration.prototype.apply = function () {\r\n        var _this = this;\r\n        if (this.processed) {\r\n            return Promise.resolve();\r\n        }\r\n        return runTasks(this, this.preTasks).then(function () {\r\n            var loader = _this.aurelia.loader;\r\n            var info = _this.info;\r\n            var current;\r\n            var next = function () {\r\n                current = info.shift();\r\n                if (current) {\r\n                    return loadPlugin(_this, loader, current).then(next);\r\n                }\r\n                _this.processed = true;\r\n                _this.configuredPlugins = null;\r\n                return Promise.resolve();\r\n            };\r\n            return next().then(function () { return runTasks(_this, _this.postTasks); });\r\n        });\r\n    };\r\n    return FrameworkConfiguration;\r\n}());\n\nfunction preventActionlessFormSubmit() {\r\n    aurelia_pal__WEBPACK_IMPORTED_MODULE_7__[/* DOM */ "b"].addEventListener(\'submit\', function (evt) {\r\n        var target = evt.target;\r\n        var action = target.action;\r\n        if (target.tagName.toLowerCase() === \'form\' && !action) {\r\n            evt.preventDefault();\r\n        }\r\n    }, false);\r\n}\r\nvar Aurelia = (function () {\r\n    function Aurelia(loader, container, resources) {\r\n        this.loader = loader || new aurelia_pal__WEBPACK_IMPORTED_MODULE_7__[/* PLATFORM */ "d"].Loader();\r\n        this.container = container || (new aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_0__[/* Container */ "b"]()).makeGlobal();\r\n        this.resources = resources || new aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* ViewResources */ "M"]();\r\n        this.use = new FrameworkConfiguration(this);\r\n        this.logger = aurelia_logging__WEBPACK_IMPORTED_MODULE_8__["getLogger"](\'aurelia\');\r\n        this.hostConfigured = false;\r\n        this.host = null;\r\n        this.use.instance(Aurelia, this);\r\n        this.use.instance(aurelia_loader__WEBPACK_IMPORTED_MODULE_4__[/* Loader */ "a"], this.loader);\r\n        this.use.instance(aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* ViewResources */ "M"], this.resources);\r\n    }\r\n    Aurelia.prototype.start = function () {\r\n        var _this = this;\r\n        if (this._started) {\r\n            return this._started;\r\n        }\r\n        this.logger.info(\'Aurelia Starting\');\r\n        return this._started = this.use.apply().then(function () {\r\n            preventActionlessFormSubmit();\r\n            if (!_this.container.hasResolver(aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* BindingLanguage */ "e"])) {\r\n                var message = \'You must configure Aurelia with a BindingLanguage implementation.\';\r\n                _this.logger.error(message);\r\n                throw new Error(message);\r\n            }\r\n            _this.logger.info(\'Aurelia Started\');\r\n            var evt = aurelia_pal__WEBPACK_IMPORTED_MODULE_7__[/* DOM */ "b"].createCustomEvent(\'aurelia-started\', { bubbles: true, cancelable: true });\r\n            aurelia_pal__WEBPACK_IMPORTED_MODULE_7__[/* DOM */ "b"].dispatchEvent(evt);\r\n            return _this;\r\n        });\r\n    };\r\n    Aurelia.prototype.enhance = function (bindingContext, applicationHost) {\r\n        var _this = this;\r\n        if (bindingContext === void 0) { bindingContext = {}; }\r\n        if (applicationHost === void 0) { applicationHost = null; }\r\n        this._configureHost(applicationHost || aurelia_pal__WEBPACK_IMPORTED_MODULE_7__[/* DOM */ "b"].querySelectorAll(\'body\')[0]);\r\n        return new Promise(function (resolve) {\r\n            var engine = _this.container.get(aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* TemplatingEngine */ "E"]);\r\n            _this.root = engine.enhance({ container: _this.container, element: _this.host, resources: _this.resources, bindingContext: bindingContext });\r\n            _this.root.attached();\r\n            _this._onAureliaComposed();\r\n            resolve(_this);\r\n        });\r\n    };\r\n    Aurelia.prototype.setRoot = function (root, applicationHost) {\r\n        var _this = this;\r\n        if (root === void 0) { root = null; }\r\n        if (applicationHost === void 0) { applicationHost = null; }\r\n        var instruction = {};\r\n        if (this.root && this.root.viewModel && this.root.viewModel.router) {\r\n            this.root.viewModel.router.deactivate();\r\n            this.root.viewModel.router.reset();\r\n        }\r\n        this._configureHost(applicationHost);\r\n        var engine = this.container.get(aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* TemplatingEngine */ "E"]);\r\n        var transaction = this.container.get(aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* CompositionTransaction */ "h"]);\r\n        delete transaction.initialComposition;\r\n        if (!root) {\r\n            if (this.configModuleId) {\r\n                root = Object(aurelia_path__WEBPACK_IMPORTED_MODULE_6__["relativeToFile"])(\'./app\', this.configModuleId);\r\n            }\r\n            else {\r\n                root = \'app\';\r\n            }\r\n        }\r\n        instruction.viewModel = root;\r\n        instruction.container = instruction.childContainer = this.container;\r\n        instruction.viewSlot = this.hostSlot;\r\n        instruction.host = this.host;\r\n        return engine.compose(instruction).then(function (r) {\r\n            _this.root = r;\r\n            instruction.viewSlot.attached();\r\n            _this._onAureliaComposed();\r\n            return _this;\r\n        });\r\n    };\r\n    Aurelia.prototype._configureHost = function (applicationHost) {\r\n        if (this.hostConfigured) {\r\n            return;\r\n        }\r\n        applicationHost = applicationHost || this.host;\r\n        if (!applicationHost || typeof applicationHost === \'string\') {\r\n            this.host = aurelia_pal__WEBPACK_IMPORTED_MODULE_7__[/* DOM */ "b"].getElementById(applicationHost || \'applicationHost\');\r\n        }\r\n        else {\r\n            this.host = applicationHost;\r\n        }\r\n        if (!this.host) {\r\n            throw new Error(\'No applicationHost was specified.\');\r\n        }\r\n        this.hostConfigured = true;\r\n        this.host.aurelia = this;\r\n        this.hostSlot = new aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* ViewSlot */ "N"](this.host, true);\r\n        this.hostSlot.transformChildNodesIntoView();\r\n        this.container.registerInstance(aurelia_pal__WEBPACK_IMPORTED_MODULE_7__[/* DOM */ "b"].boundary, this.host);\r\n    };\r\n    Aurelia.prototype._onAureliaComposed = function () {\r\n        var evt = aurelia_pal__WEBPACK_IMPORTED_MODULE_7__[/* DOM */ "b"].createCustomEvent(\'aurelia-composed\', { bubbles: true, cancelable: true });\r\n        setTimeout(function () { return aurelia_pal__WEBPACK_IMPORTED_MODULE_7__[/* DOM */ "b"].dispatchEvent(evt); }, 1);\r\n    };\r\n    return Aurelia;\r\n}());\n\n\n//# sourceMappingURL=aurelia-framework.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXVyZWxpYS1mcmFtZXdvcmsvZGlzdC9uYXRpdmUtbW9kdWxlcy9hdXJlbGlhLWZyYW1ld29yay5qcz8wNjgyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBeUQ7QUFDWjtBQUNiO0FBQ0M7QUFDeUg7QUFDdkg7QUFDSztBQUNUO0FBQ0k7QUFDaUI7QUFDdkI7QUFDZTtBQUNoQjtBQUNxQjtBQUNWOztBQUV2QyxhQUFhLHlEQUF1QjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyxrQ0FBa0MsRUFBRTtBQUNuRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0ZBQW9GO0FBQ3BGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4RUFBOEU7QUFDOUU7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkMscUVBQVU7QUFDckQsc0VBQXNFLHVDQUF1QyxFQUFFO0FBQy9HO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnRUFBZ0UsMkNBQTJDLEVBQUU7QUFDN0c7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLG1DQUFtQyxzQ0FBc0MsRUFBRSxFQUFFLEVBQUU7QUFDL0UsbUNBQW1DLHlFQUF5RSxFQUFFO0FBQzlHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxhQUFhO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0Msc0VBQXNFO0FBQ3RHO0FBQ0E7QUFDQSxnQ0FBZ0Msd0NBQXdDLEVBQUU7QUFDMUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLFFBQVE7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMseURBQUk7QUFDckM7QUFDQSxvREFBb0Q7QUFDcEQ7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLCtFQUFvQjtBQUM1RDtBQUNBLHVEQUF1RCw2QkFBNkIsRUFBRTtBQUN0RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGdGQUFnRjtBQUN4RztBQUNBO0FBQ0Esd0JBQXdCLDhDQUE4QztBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0Isc0VBQXNFO0FBQzVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQix3REFBc0I7QUFDckQ7QUFDQSx1QkFBdUIsd0RBQXNCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLDJEQUF5QjtBQUM3QyxvQkFBb0Isd0RBQXNCO0FBQzFDLGlCQUFpQjtBQUNqQixhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMseUNBQXlDLEVBQUU7QUFDdkYsU0FBUztBQUNUO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0EsSUFBSSx1REFBRztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLDREQUFRO0FBQzVDLDJDQUEyQyw4RUFBUztBQUNwRCwwQ0FBMEMsd0VBQWE7QUFDdkQ7QUFDQSxzQkFBc0IseURBQXVCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQiw2REFBTTtBQUNoQywwQkFBMEIsd0VBQWE7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDLDBFQUFlO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsdURBQUcsdUNBQXVDLGtDQUFrQztBQUNsRyxZQUFZLHVEQUFHO0FBQ2Y7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLHFCQUFxQjtBQUM3RCx5Q0FBeUMsd0JBQXdCO0FBQ2pFLCtDQUErQyx1REFBRztBQUNsRDtBQUNBLDZDQUE2QywyRUFBZ0I7QUFDN0QseUNBQXlDLDhHQUE4RztBQUN2SjtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLGFBQWE7QUFDM0MseUNBQXlDLHdCQUF3QjtBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsMkVBQWdCO0FBQ3hELDZDQUE2QyxpRkFBc0I7QUFDbkU7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLG1FQUFjO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsdURBQUc7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLG1FQUFRO0FBQ3BDO0FBQ0Esd0NBQXdDLHVEQUFHO0FBQzNDO0FBQ0E7QUFDQSxrQkFBa0IsdURBQUcsd0NBQXdDLGtDQUFrQztBQUMvRixnQ0FBZ0MsUUFBUSx1REFBRyxvQkFBb0IsRUFBRTtBQUNqRTtBQUNBO0FBQ0EsQ0FBQzs7QUFFMEM7QUFDM0MiLCJmaWxlIjoiYXVyZWxpYS1mcmFtZXdvcmsuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb250YWluZXIgfSBmcm9tICdhdXJlbGlhLWRlcGVuZGVuY3ktaW5qZWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJ2F1cmVsaWEtZGVwZW5kZW5jeS1pbmplY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnYXVyZWxpYS1iaW5kaW5nJztcbmV4cG9ydCAqIGZyb20gJ2F1cmVsaWEtbWV0YWRhdGEnO1xuaW1wb3J0IHsgSHRtbEJlaGF2aW9yUmVzb3VyY2UsIFZpZXdFbmdpbmUsIEJpbmRpbmdMYW5ndWFnZSwgVGVtcGxhdGluZ0VuZ2luZSwgQ29tcG9zaXRpb25UcmFuc2FjdGlvbiwgVmlld1Nsb3QsIFZpZXdSZXNvdXJjZXMgfSBmcm9tICdhdXJlbGlhLXRlbXBsYXRpbmcnO1xuZXhwb3J0ICogZnJvbSAnYXVyZWxpYS10ZW1wbGF0aW5nJztcbmltcG9ydCB7IExvYWRlciB9IGZyb20gJ2F1cmVsaWEtbG9hZGVyJztcbmV4cG9ydCAqIGZyb20gJ2F1cmVsaWEtbG9hZGVyJztcbmV4cG9ydCAqIGZyb20gJ2F1cmVsaWEtdGFzay1xdWV1ZSc7XG5pbXBvcnQgeyBqb2luLCByZWxhdGl2ZVRvRmlsZSB9IGZyb20gJ2F1cmVsaWEtcGF0aCc7XG5leHBvcnQgKiBmcm9tICdhdXJlbGlhLXBhdGgnO1xuaW1wb3J0IHsgRE9NLCBQTEFURk9STSB9IGZyb20gJ2F1cmVsaWEtcGFsJztcbmV4cG9ydCAqIGZyb20gJ2F1cmVsaWEtcGFsJztcbmltcG9ydCAqIGFzIFRoZUxvZ01hbmFnZXIgZnJvbSAnYXVyZWxpYS1sb2dnaW5nJztcbmV4cG9ydCB7IFRoZUxvZ01hbmFnZXIgYXMgTG9nTWFuYWdlciB9O1xuXG52YXIgbG9nZ2VyID0gVGhlTG9nTWFuYWdlci5nZXRMb2dnZXIoJ2F1cmVsaWEnKTtcclxudmFyIGV4dFBhdHRlcm4gPSAvXFwuW14vLl0rJC87XHJcbmZ1bmN0aW9uIHJ1blRhc2tzKGNvbmZpZywgdGFza3MpIHtcclxuICAgIHZhciBjdXJyZW50O1xyXG4gICAgdmFyIG5leHQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY3VycmVudCA9IHRhc2tzLnNoaWZ0KCk7XHJcbiAgICAgICAgaWYgKGN1cnJlbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjdXJyZW50KGNvbmZpZykpLnRoZW4obmV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gbmV4dCgpO1xyXG59XHJcbmZ1bmN0aW9uIGxvYWRQbHVnaW4oZndDb25maWcsIGxvYWRlciwgaW5mbykge1xyXG4gICAgbG9nZ2VyLmRlYnVnKFwiTG9hZGluZyBwbHVnaW4gXCIuY29uY2F0KGluZm8ubW9kdWxlSWQsIFwiLlwiKSk7XHJcbiAgICBpZiAodHlwZW9mIGluZm8ubW9kdWxlSWQgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgZndDb25maWcucmVzb3VyY2VzUmVsYXRpdmVUbyA9IGluZm8ucmVzb3VyY2VzUmVsYXRpdmVUbztcclxuICAgICAgICB2YXIgaWQgPSBpbmZvLm1vZHVsZUlkO1xyXG4gICAgICAgIGlmIChpbmZvLnJlc291cmNlc1JlbGF0aXZlVG8ubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbG9hZGVyLm5vcm1hbGl6ZShpbmZvLm1vZHVsZUlkLCBpbmZvLnJlc291cmNlc1JlbGF0aXZlVG9bMV0pXHJcbiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAobm9ybWFsaXplZElkKSB7IHJldHVybiBfbG9hZFBsdWdpbihub3JtYWxpemVkSWQpOyB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIF9sb2FkUGx1Z2luKGlkKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiBpbmZvLmNvbmZpZ3VyZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIGlmIChmd0NvbmZpZy5jb25maWd1cmVkUGx1Z2lucy5pbmRleE9mKGluZm8uY29uZmlndXJlKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmd0NvbmZpZy5jb25maWd1cmVkUGx1Z2lucy5wdXNoKGluZm8uY29uZmlndXJlKTtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGluZm8uY29uZmlndXJlLmNhbGwobnVsbCwgZndDb25maWcsIGluZm8uY29uZmlnIHx8IHt9KSk7XHJcbiAgICB9XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoaW52YWxpZENvbmZpZ01zZyhpbmZvLm1vZHVsZUlkIHx8IGluZm8uY29uZmlndXJlLCAncGx1Z2luJykpO1xyXG4gICAgZnVuY3Rpb24gX2xvYWRQbHVnaW4obW9kdWxlSWQpIHtcclxuICAgICAgICByZXR1cm4gbG9hZGVyLmxvYWRNb2R1bGUobW9kdWxlSWQpLnRoZW4oZnVuY3Rpb24gKG0pIHtcclxuICAgICAgICAgICAgaWYgKCdjb25maWd1cmUnIGluIG0pIHtcclxuICAgICAgICAgICAgICAgIGlmIChmd0NvbmZpZy5jb25maWd1cmVkUGx1Z2lucy5pbmRleE9mKG0uY29uZmlndXJlKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG0uY29uZmlndXJlKGZ3Q29uZmlnLCBpbmZvLmNvbmZpZyB8fCB7fSkpLnRoZW4oZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZ3Q29uZmlnLmNvbmZpZ3VyZWRQbHVnaW5zLnB1c2gobS5jb25maWd1cmUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZ3Q29uZmlnLnJlc291cmNlc1JlbGF0aXZlVG8gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhcIkNvbmZpZ3VyZWQgcGx1Z2luIFwiLmNvbmNhdChpbmZvLm1vZHVsZUlkLCBcIi5cIikpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZndDb25maWcucmVzb3VyY2VzUmVsYXRpdmVUbyA9IG51bGw7XHJcbiAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhcIkxvYWRlZCBwbHVnaW4gXCIuY29uY2F0KGluZm8ubW9kdWxlSWQsIFwiLlwiKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gbG9hZFJlc291cmNlcyhhdXJlbGlhLCByZXNvdXJjZXNUb0xvYWQsIGFwcFJlc291cmNlcykge1xyXG4gICAgaWYgKE9iamVjdC5rZXlzKHJlc291cmNlc1RvTG9hZCkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgfVxyXG4gICAgdmFyIHZpZXdFbmdpbmUgPSBhdXJlbGlhLmNvbnRhaW5lci5nZXQoVmlld0VuZ2luZSk7XHJcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoT2JqZWN0LmtleXMocmVzb3VyY2VzVG9Mb2FkKS5tYXAoZnVuY3Rpb24gKG4pIHsgcmV0dXJuIF9ub3JtYWxpemUocmVzb3VyY2VzVG9Mb2FkW25dKTsgfSkpXHJcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGxvYWRzKSB7XHJcbiAgICAgICAgdmFyIG5hbWVzID0gW107XHJcbiAgICAgICAgdmFyIGltcG9ydElkcyA9IFtdO1xyXG4gICAgICAgIGxvYWRzLmZvckVhY2goZnVuY3Rpb24gKGwpIHtcclxuICAgICAgICAgICAgbmFtZXMucHVzaCh1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICBpbXBvcnRJZHMucHVzaChsLmltcG9ydElkKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdmlld0VuZ2luZS5pbXBvcnRWaWV3UmVzb3VyY2VzKGltcG9ydElkcywgbmFtZXMsIGFwcFJlc291cmNlcyk7XHJcbiAgICB9KTtcclxuICAgIGZ1bmN0aW9uIF9ub3JtYWxpemUobG9hZCkge1xyXG4gICAgICAgIHZhciBtb2R1bGVJZCA9IGxvYWQubW9kdWxlSWQ7XHJcbiAgICAgICAgdmFyIGV4dCA9IGdldEV4dChtb2R1bGVJZCk7XHJcbiAgICAgICAgaWYgKGlzT3RoZXJSZXNvdXJjZShtb2R1bGVJZCkpIHtcclxuICAgICAgICAgICAgbW9kdWxlSWQgPSByZW1vdmVFeHQobW9kdWxlSWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYXVyZWxpYS5sb2FkZXIubm9ybWFsaXplKG1vZHVsZUlkLCBsb2FkLnJlbGF0aXZlVG8pXHJcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChub3JtYWxpemVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBsb2FkLm1vZHVsZUlkLFxyXG4gICAgICAgICAgICAgICAgaW1wb3J0SWQ6IGlzT3RoZXJSZXNvdXJjZShsb2FkLm1vZHVsZUlkKSA/IGFkZE9yaWdpbmFsRXh0KG5vcm1hbGl6ZWQsIGV4dCkgOiBub3JtYWxpemVkXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBpc090aGVyUmVzb3VyY2UobmFtZSkge1xyXG4gICAgICAgIHZhciBleHQgPSBnZXRFeHQobmFtZSk7XHJcbiAgICAgICAgaWYgKCFleHQpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZiAoZXh0ID09PSAnJylcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmIChleHQgPT09ICcuanMnIHx8IGV4dCA9PT0gJy50cycpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHJlbW92ZUV4dChuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIG5hbWUucmVwbGFjZShleHRQYXR0ZXJuLCAnJyk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRPcmlnaW5hbEV4dChub3JtYWxpemVkLCBleHQpIHtcclxuICAgICAgICByZXR1cm4gcmVtb3ZlRXh0KG5vcm1hbGl6ZWQpICsgJy4nICsgZXh0O1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGdldEV4dChuYW1lKSB7XHJcbiAgICB2YXIgbWF0Y2ggPSBuYW1lLm1hdGNoKGV4dFBhdHRlcm4pO1xyXG4gICAgaWYgKG1hdGNoICYmIG1hdGNoLmxlbmd0aCA+IDApIHtcclxuICAgICAgICByZXR1cm4gKG1hdGNoWzBdLnNwbGl0KCcuJykpWzFdO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGxvYWRCZWhhdmlvcnMoY29uZmlnKSB7XHJcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoY29uZmlnLmJlaGF2aW9yc1RvTG9hZC5tYXAoZnVuY3Rpb24gKG0pIHsgcmV0dXJuIG0ubG9hZChjb25maWcuY29udGFpbmVyLCBtLnRhcmdldCk7IH0pKS50aGVuKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25maWcuYmVoYXZpb3JzVG9Mb2FkID0gbnVsbDtcclxuICAgIH0pO1xyXG59XHJcbmZ1bmN0aW9uIGFzc2VydFByb2Nlc3NlZChwbHVnaW5zKSB7XHJcbiAgICBpZiAocGx1Z2lucy5wcm9jZXNzZWQpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgY29uZmlnIGluc3RhbmNlIGhhcyBhbHJlYWR5IGJlZW4gYXBwbGllZC4gVG8gbG9hZCBtb3JlIHBsdWdpbnMgb3IgZ2xvYmFsIHJlc291cmNlcywgY3JlYXRlIGEgbmV3IEZyYW1ld29ya0NvbmZpZ3VyYXRpb24gaW5zdGFuY2UuJyk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gaW52YWxpZENvbmZpZ01zZyhjZmcsIHR5cGUpIHtcclxuICAgIHJldHVybiBcIkludmFsaWQgXCIuY29uY2F0KHR5cGUsIFwiIFtcIikuY29uY2F0KGNmZywgXCJdLCBcIikuY29uY2F0KHR5cGUsIFwiIG11c3QgYmUgc3BlY2lmaWVkIGFzIGZ1bmN0aW9ucyBvciByZWxhdGl2ZSBtb2R1bGUgSURzLlwiKTtcclxufVxyXG52YXIgRnJhbWV3b3JrQ29uZmlndXJhdGlvbiA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBGcmFtZXdvcmtDb25maWd1cmF0aW9uKGF1cmVsaWEpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuYXVyZWxpYSA9IGF1cmVsaWE7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXIgPSBhdXJlbGlhLmNvbnRhaW5lcjtcclxuICAgICAgICB0aGlzLmluZm8gPSBbXTtcclxuICAgICAgICB0aGlzLnByb2Nlc3NlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucHJlVGFza3MgPSBbXTtcclxuICAgICAgICB0aGlzLnBvc3RUYXNrcyA9IFtdO1xyXG4gICAgICAgIHRoaXMuYmVoYXZpb3JzVG9Mb2FkID0gW107XHJcbiAgICAgICAgdGhpcy5jb25maWd1cmVkUGx1Z2lucyA9IFtdO1xyXG4gICAgICAgIHRoaXMucmVzb3VyY2VzVG9Mb2FkID0ge307XHJcbiAgICAgICAgdGhpcy5wcmVUYXNrKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGF1cmVsaWEubG9hZGVyLm5vcm1hbGl6ZSgnYXVyZWxpYS1ib290c3RyYXBwZXInLCB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBfdGhpcy5ib290c3RyYXBwZXJOYW1lID0gbmFtZTsgfSk7IH0pO1xyXG4gICAgICAgIHRoaXMucG9zdFRhc2soZnVuY3Rpb24gKCkgeyByZXR1cm4gbG9hZFJlc291cmNlcyhhdXJlbGlhLCBfdGhpcy5yZXNvdXJjZXNUb0xvYWQsIGF1cmVsaWEucmVzb3VyY2VzKTsgfSk7XHJcbiAgICB9XHJcbiAgICBGcmFtZXdvcmtDb25maWd1cmF0aW9uLnByb3RvdHlwZS5pbnN0YW5jZSA9IGZ1bmN0aW9uICh0eXBlLCBpbnN0YW5jZSkge1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyLnJlZ2lzdGVySW5zdGFuY2UodHlwZSwgaW5zdGFuY2UpO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfTtcclxuICAgIEZyYW1ld29ya0NvbmZpZ3VyYXRpb24ucHJvdG90eXBlLnNpbmdsZXRvbiA9IGZ1bmN0aW9uICh0eXBlLCBpbXBsZW1lbnRhdGlvbikge1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyLnJlZ2lzdGVyU2luZ2xldG9uKHR5cGUsIGltcGxlbWVudGF0aW9uKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH07XHJcbiAgICBGcmFtZXdvcmtDb25maWd1cmF0aW9uLnByb3RvdHlwZS50cmFuc2llbnQgPSBmdW5jdGlvbiAodHlwZSwgaW1wbGVtZW50YXRpb24pIHtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lci5yZWdpc3RlclRyYW5zaWVudCh0eXBlLCBpbXBsZW1lbnRhdGlvbik7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9O1xyXG4gICAgRnJhbWV3b3JrQ29uZmlndXJhdGlvbi5wcm90b3R5cGUucHJlVGFzayA9IGZ1bmN0aW9uICh0YXNrKSB7XHJcbiAgICAgICAgYXNzZXJ0UHJvY2Vzc2VkKHRoaXMpO1xyXG4gICAgICAgIHRoaXMucHJlVGFza3MucHVzaCh0YXNrKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH07XHJcbiAgICBGcmFtZXdvcmtDb25maWd1cmF0aW9uLnByb3RvdHlwZS5wb3N0VGFzayA9IGZ1bmN0aW9uICh0YXNrKSB7XHJcbiAgICAgICAgYXNzZXJ0UHJvY2Vzc2VkKHRoaXMpO1xyXG4gICAgICAgIHRoaXMucG9zdFRhc2tzLnB1c2godGFzayk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9O1xyXG4gICAgRnJhbWV3b3JrQ29uZmlndXJhdGlvbi5wcm90b3R5cGUuZmVhdHVyZSA9IGZ1bmN0aW9uIChwbHVnaW4sIGNvbmZpZykge1xyXG4gICAgICAgIGlmIChjb25maWcgPT09IHZvaWQgMCkgeyBjb25maWcgPSB7fTsgfVxyXG4gICAgICAgIHN3aXRjaCAodHlwZW9mIHBsdWdpbikge1xyXG4gICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxyXG4gICAgICAgICAgICAgICAgdmFyIGhhc0luZGV4ID0gL1xcL2luZGV4JC9pLnRlc3QocGx1Z2luKTtcclxuICAgICAgICAgICAgICAgIHZhciBtb2R1bGVJZCA9IGhhc0luZGV4IHx8IGdldEV4dChwbHVnaW4pID8gcGx1Z2luIDogcGx1Z2luICsgJy9pbmRleCc7XHJcbiAgICAgICAgICAgICAgICB2YXIgcm9vdCA9IGhhc0luZGV4ID8gcGx1Z2luLnNsaWNlKDAsIC02KSA6IHBsdWdpbjtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5mby5wdXNoKHsgbW9kdWxlSWQ6IG1vZHVsZUlkLCByZXNvdXJjZXNSZWxhdGl2ZVRvOiBbcm9vdCwgJyddLCBjb25maWc6IGNvbmZpZyB9KTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdmdW5jdGlvbic6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluZm8ucHVzaCh7IGNvbmZpZ3VyZTogcGx1Z2luLCBjb25maWc6IGNvbmZpZyB8fCB7fSB9KTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGludmFsaWRDb25maWdNc2cocGx1Z2luLCAnZmVhdHVyZScpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9O1xyXG4gICAgRnJhbWV3b3JrQ29uZmlndXJhdGlvbi5wcm90b3R5cGUuZ2xvYmFsUmVzb3VyY2VzID0gZnVuY3Rpb24gKHJlc291cmNlcykge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgYXNzZXJ0UHJvY2Vzc2VkKHRoaXMpO1xyXG4gICAgICAgIHZhciB0b0FkZCA9IEFycmF5LmlzQXJyYXkocmVzb3VyY2VzKSA/IHJlc291cmNlcyA6IGFyZ3VtZW50cztcclxuICAgICAgICB2YXIgcmVzb3VyY2U7XHJcbiAgICAgICAgdmFyIHJlc291cmNlc1JlbGF0aXZlVG8gPSB0aGlzLnJlc291cmNlc1JlbGF0aXZlVG8gfHwgWycnLCAnJ107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdG9BZGQubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xyXG4gICAgICAgICAgICByZXNvdXJjZSA9IHRvQWRkW2ldO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiByZXNvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcGFyZW50XzEgPSByZXNvdXJjZXNSZWxhdGl2ZVRvWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBncmFuZFBhcmVudCA9IHJlc291cmNlc1JlbGF0aXZlVG9bMV07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWVfMSA9IHJlc291cmNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgocmVzb3VyY2Uuc3RhcnRzV2l0aCgnLi8nKSB8fCByZXNvdXJjZS5zdGFydHNXaXRoKCcuLi8nKSkgJiYgcGFyZW50XzEgIT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVfMSA9IGpvaW4ocGFyZW50XzEsIHJlc291cmNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNvdXJjZXNUb0xvYWRbbmFtZV8xXSA9IHsgbW9kdWxlSWQ6IG5hbWVfMSwgcmVsYXRpdmVUbzogZ3JhbmRQYXJlbnQgfTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbWV0YSA9IHRoaXMuYXVyZWxpYS5yZXNvdXJjZXMuYXV0b1JlZ2lzdGVyKHRoaXMuY29udGFpbmVyLCByZXNvdXJjZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1ldGEgaW5zdGFuY2VvZiBIdG1sQmVoYXZpb3JSZXNvdXJjZSAmJiBtZXRhLmVsZW1lbnROYW1lICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmJlaGF2aW9yc1RvTG9hZC5wdXNoKG1ldGEpID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvc3RUYXNrKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGxvYWRCZWhhdmlvcnMoX3RoaXMpOyB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGludmFsaWRDb25maWdNc2cocmVzb3VyY2UsICdyZXNvdXJjZScpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH07XHJcbiAgICBGcmFtZXdvcmtDb25maWd1cmF0aW9uLnByb3RvdHlwZS5nbG9iYWxOYW1lID0gZnVuY3Rpb24gKHJlc291cmNlUGF0aCwgbmV3TmFtZSkge1xyXG4gICAgICAgIGFzc2VydFByb2Nlc3NlZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnJlc291cmNlc1RvTG9hZFtyZXNvdXJjZVBhdGhdID0geyBtb2R1bGVJZDogbmV3TmFtZSwgcmVsYXRpdmVUbzogJycgfTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH07XHJcbiAgICBGcmFtZXdvcmtDb25maWd1cmF0aW9uLnByb3RvdHlwZS5wbHVnaW4gPSBmdW5jdGlvbiAocGx1Z2luLCBwbHVnaW5Db25maWcpIHtcclxuICAgICAgICBhc3NlcnRQcm9jZXNzZWQodGhpcyk7XHJcbiAgICAgICAgdmFyIGluZm87XHJcbiAgICAgICAgc3dpdGNoICh0eXBlb2YgcGx1Z2luKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XHJcbiAgICAgICAgICAgICAgICBpbmZvID0geyBtb2R1bGVJZDogcGx1Z2luLCByZXNvdXJjZXNSZWxhdGl2ZVRvOiBbcGx1Z2luLCAnJ10sIGNvbmZpZzogcGx1Z2luQ29uZmlnIHx8IHt9IH07XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZnVuY3Rpb24nOlxyXG4gICAgICAgICAgICAgICAgaW5mbyA9IHsgY29uZmlndXJlOiBwbHVnaW4sIGNvbmZpZzogcGx1Z2luQ29uZmlnIHx8IHt9IH07XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihpbnZhbGlkQ29uZmlnTXNnKHBsdWdpbiwgJ3BsdWdpbicpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pbmZvLnB1c2goaW5mbyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9O1xyXG4gICAgRnJhbWV3b3JrQ29uZmlndXJhdGlvbi5wcm90b3R5cGUuX2FkZE5vcm1hbGl6ZWRQbHVnaW4gPSBmdW5jdGlvbiAobmFtZSwgY29uZmlnKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB2YXIgcGx1Z2luID0geyBtb2R1bGVJZDogbmFtZSwgcmVzb3VyY2VzUmVsYXRpdmVUbzogW25hbWUsICcnXSwgY29uZmlnOiBjb25maWcgfHwge30gfTtcclxuICAgICAgICB0aGlzLmluZm8ucHVzaChwbHVnaW4pO1xyXG4gICAgICAgIHRoaXMucHJlVGFzayhmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciByZWxhdGl2ZVRvID0gW25hbWUsIF90aGlzLmJvb3RzdHJhcHBlck5hbWVdO1xyXG4gICAgICAgICAgICBwbHVnaW4ubW9kdWxlSWQgPSBuYW1lO1xyXG4gICAgICAgICAgICBwbHVnaW4ucmVzb3VyY2VzUmVsYXRpdmVUbyA9IHJlbGF0aXZlVG87XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH07XHJcbiAgICBGcmFtZXdvcmtDb25maWd1cmF0aW9uLnByb3RvdHlwZS5kZWZhdWx0QmluZGluZ0xhbmd1YWdlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hZGROb3JtYWxpemVkUGx1Z2luKCdhdXJlbGlhLXRlbXBsYXRpbmctYmluZGluZycpO1xyXG4gICAgfTtcclxuICAgIEZyYW1ld29ya0NvbmZpZ3VyYXRpb24ucHJvdG90eXBlLnJvdXRlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYWRkTm9ybWFsaXplZFBsdWdpbignYXVyZWxpYS10ZW1wbGF0aW5nLXJvdXRlcicpO1xyXG4gICAgfTtcclxuICAgIEZyYW1ld29ya0NvbmZpZ3VyYXRpb24ucHJvdG90eXBlLmhpc3RvcnkgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZE5vcm1hbGl6ZWRQbHVnaW4oJ2F1cmVsaWEtaGlzdG9yeS1icm93c2VyJyk7XHJcbiAgICB9O1xyXG4gICAgRnJhbWV3b3JrQ29uZmlndXJhdGlvbi5wcm90b3R5cGUuZGVmYXVsdFJlc291cmNlcyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYWRkTm9ybWFsaXplZFBsdWdpbignYXVyZWxpYS10ZW1wbGF0aW5nLXJlc291cmNlcycpO1xyXG4gICAgfTtcclxuICAgIEZyYW1ld29ya0NvbmZpZ3VyYXRpb24ucHJvdG90eXBlLmV2ZW50QWdncmVnYXRvciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYWRkTm9ybWFsaXplZFBsdWdpbignYXVyZWxpYS1ldmVudC1hZ2dyZWdhdG9yJyk7XHJcbiAgICB9O1xyXG4gICAgRnJhbWV3b3JrQ29uZmlndXJhdGlvbi5wcm90b3R5cGUuYmFzaWNDb25maWd1cmF0aW9uID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRCaW5kaW5nTGFuZ3VhZ2UoKS5kZWZhdWx0UmVzb3VyY2VzKCkuZXZlbnRBZ2dyZWdhdG9yKCk7XHJcbiAgICB9O1xyXG4gICAgRnJhbWV3b3JrQ29uZmlndXJhdGlvbi5wcm90b3R5cGUuc3RhbmRhcmRDb25maWd1cmF0aW9uID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2ljQ29uZmlndXJhdGlvbigpLmhpc3RvcnkoKS5yb3V0ZXIoKTtcclxuICAgIH07XHJcbiAgICBGcmFtZXdvcmtDb25maWd1cmF0aW9uLnByb3RvdHlwZS5kZXZlbG9wbWVudExvZ2dpbmcgPSBmdW5jdGlvbiAobGV2ZWwpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHZhciBsb2dMZXZlbCA9IGxldmVsID8gVGhlTG9nTWFuYWdlci5sb2dMZXZlbFtsZXZlbF0gOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgaWYgKGxvZ0xldmVsID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgbG9nTGV2ZWwgPSBUaGVMb2dNYW5hZ2VyLmxvZ0xldmVsLmRlYnVnO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByZVRhc2soZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gX3RoaXMuYXVyZWxpYS5sb2FkZXIubm9ybWFsaXplKCdhdXJlbGlhLWxvZ2dpbmctY29uc29sZScsIF90aGlzLmJvb3RzdHJhcHBlck5hbWUpLnRoZW4oZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5hdXJlbGlhLmxvYWRlci5sb2FkTW9kdWxlKG5hbWUpLnRoZW4oZnVuY3Rpb24gKG0pIHtcclxuICAgICAgICAgICAgICAgICAgICBUaGVMb2dNYW5hZ2VyLmFkZEFwcGVuZGVyKG5ldyBtLkNvbnNvbGVBcHBlbmRlcigpKTtcclxuICAgICAgICAgICAgICAgICAgICBUaGVMb2dNYW5hZ2VyLnNldExldmVsKGxvZ0xldmVsKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH07XHJcbiAgICBGcmFtZXdvcmtDb25maWd1cmF0aW9uLnByb3RvdHlwZS5hcHBseSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIGlmICh0aGlzLnByb2Nlc3NlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBydW5UYXNrcyh0aGlzLCB0aGlzLnByZVRhc2tzKS50aGVuKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIGxvYWRlciA9IF90aGlzLmF1cmVsaWEubG9hZGVyO1xyXG4gICAgICAgICAgICB2YXIgaW5mbyA9IF90aGlzLmluZm87XHJcbiAgICAgICAgICAgIHZhciBjdXJyZW50O1xyXG4gICAgICAgICAgICB2YXIgbmV4dCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBpbmZvLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2FkUGx1Z2luKF90aGlzLCBsb2FkZXIsIGN1cnJlbnQpLnRoZW4obmV4dCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5wcm9jZXNzZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuY29uZmlndXJlZFBsdWdpbnMgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4gcnVuVGFza3MoX3RoaXMsIF90aGlzLnBvc3RUYXNrcyk7IH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBGcmFtZXdvcmtDb25maWd1cmF0aW9uO1xyXG59KCkpO1xuXG5mdW5jdGlvbiBwcmV2ZW50QWN0aW9ubGVzc0Zvcm1TdWJtaXQoKSB7XHJcbiAgICBET00uYWRkRXZlbnRMaXN0ZW5lcignc3VibWl0JywgZnVuY3Rpb24gKGV2dCkge1xyXG4gICAgICAgIHZhciB0YXJnZXQgPSBldnQudGFyZ2V0O1xyXG4gICAgICAgIHZhciBhY3Rpb24gPSB0YXJnZXQuYWN0aW9uO1xyXG4gICAgICAgIGlmICh0YXJnZXQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnZm9ybScgJiYgIWFjdGlvbikge1xyXG4gICAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBmYWxzZSk7XHJcbn1cclxudmFyIEF1cmVsaWEgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gQXVyZWxpYShsb2FkZXIsIGNvbnRhaW5lciwgcmVzb3VyY2VzKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBsb2FkZXIgfHwgbmV3IFBMQVRGT1JNLkxvYWRlcigpO1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyID0gY29udGFpbmVyIHx8IChuZXcgQ29udGFpbmVyKCkpLm1ha2VHbG9iYWwoKTtcclxuICAgICAgICB0aGlzLnJlc291cmNlcyA9IHJlc291cmNlcyB8fCBuZXcgVmlld1Jlc291cmNlcygpO1xyXG4gICAgICAgIHRoaXMudXNlID0gbmV3IEZyYW1ld29ya0NvbmZpZ3VyYXRpb24odGhpcyk7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIgPSBUaGVMb2dNYW5hZ2VyLmdldExvZ2dlcignYXVyZWxpYScpO1xyXG4gICAgICAgIHRoaXMuaG9zdENvbmZpZ3VyZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmhvc3QgPSBudWxsO1xyXG4gICAgICAgIHRoaXMudXNlLmluc3RhbmNlKEF1cmVsaWEsIHRoaXMpO1xyXG4gICAgICAgIHRoaXMudXNlLmluc3RhbmNlKExvYWRlciwgdGhpcy5sb2FkZXIpO1xyXG4gICAgICAgIHRoaXMudXNlLmluc3RhbmNlKFZpZXdSZXNvdXJjZXMsIHRoaXMucmVzb3VyY2VzKTtcclxuICAgIH1cclxuICAgIEF1cmVsaWEucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgaWYgKHRoaXMuX3N0YXJ0ZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0ZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubG9nZ2VyLmluZm8oJ0F1cmVsaWEgU3RhcnRpbmcnKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRlZCA9IHRoaXMudXNlLmFwcGx5KCkudGhlbihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHByZXZlbnRBY3Rpb25sZXNzRm9ybVN1Ym1pdCgpO1xyXG4gICAgICAgICAgICBpZiAoIV90aGlzLmNvbnRhaW5lci5oYXNSZXNvbHZlcihCaW5kaW5nTGFuZ3VhZ2UpKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9ICdZb3UgbXVzdCBjb25maWd1cmUgQXVyZWxpYSB3aXRoIGEgQmluZGluZ0xhbmd1YWdlIGltcGxlbWVudGF0aW9uLic7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5sb2dnZXIuZXJyb3IobWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgX3RoaXMubG9nZ2VyLmluZm8oJ0F1cmVsaWEgU3RhcnRlZCcpO1xyXG4gICAgICAgICAgICB2YXIgZXZ0ID0gRE9NLmNyZWF0ZUN1c3RvbUV2ZW50KCdhdXJlbGlhLXN0YXJ0ZWQnLCB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUgfSk7XHJcbiAgICAgICAgICAgIERPTS5kaXNwYXRjaEV2ZW50KGV2dCk7XHJcbiAgICAgICAgICAgIHJldHVybiBfdGhpcztcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICBBdXJlbGlhLnByb3RvdHlwZS5lbmhhbmNlID0gZnVuY3Rpb24gKGJpbmRpbmdDb250ZXh0LCBhcHBsaWNhdGlvbkhvc3QpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIGlmIChiaW5kaW5nQ29udGV4dCA9PT0gdm9pZCAwKSB7IGJpbmRpbmdDb250ZXh0ID0ge307IH1cclxuICAgICAgICBpZiAoYXBwbGljYXRpb25Ib3N0ID09PSB2b2lkIDApIHsgYXBwbGljYXRpb25Ib3N0ID0gbnVsbDsgfVxyXG4gICAgICAgIHRoaXMuX2NvbmZpZ3VyZUhvc3QoYXBwbGljYXRpb25Ib3N0IHx8IERPTS5xdWVyeVNlbGVjdG9yQWxsKCdib2R5JylbMF0pO1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xyXG4gICAgICAgICAgICB2YXIgZW5naW5lID0gX3RoaXMuY29udGFpbmVyLmdldChUZW1wbGF0aW5nRW5naW5lKTtcclxuICAgICAgICAgICAgX3RoaXMucm9vdCA9IGVuZ2luZS5lbmhhbmNlKHsgY29udGFpbmVyOiBfdGhpcy5jb250YWluZXIsIGVsZW1lbnQ6IF90aGlzLmhvc3QsIHJlc291cmNlczogX3RoaXMucmVzb3VyY2VzLCBiaW5kaW5nQ29udGV4dDogYmluZGluZ0NvbnRleHQgfSk7XHJcbiAgICAgICAgICAgIF90aGlzLnJvb3QuYXR0YWNoZWQoKTtcclxuICAgICAgICAgICAgX3RoaXMuX29uQXVyZWxpYUNvbXBvc2VkKCk7XHJcbiAgICAgICAgICAgIHJlc29sdmUoX3RoaXMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIEF1cmVsaWEucHJvdG90eXBlLnNldFJvb3QgPSBmdW5jdGlvbiAocm9vdCwgYXBwbGljYXRpb25Ib3N0KSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICBpZiAocm9vdCA9PT0gdm9pZCAwKSB7IHJvb3QgPSBudWxsOyB9XHJcbiAgICAgICAgaWYgKGFwcGxpY2F0aW9uSG9zdCA9PT0gdm9pZCAwKSB7IGFwcGxpY2F0aW9uSG9zdCA9IG51bGw7IH1cclxuICAgICAgICB2YXIgaW5zdHJ1Y3Rpb24gPSB7fTtcclxuICAgICAgICBpZiAodGhpcy5yb290ICYmIHRoaXMucm9vdC52aWV3TW9kZWwgJiYgdGhpcy5yb290LnZpZXdNb2RlbC5yb3V0ZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5yb290LnZpZXdNb2RlbC5yb3V0ZXIuZGVhY3RpdmF0ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLnJvb3Qudmlld01vZGVsLnJvdXRlci5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9jb25maWd1cmVIb3N0KGFwcGxpY2F0aW9uSG9zdCk7XHJcbiAgICAgICAgdmFyIGVuZ2luZSA9IHRoaXMuY29udGFpbmVyLmdldChUZW1wbGF0aW5nRW5naW5lKTtcclxuICAgICAgICB2YXIgdHJhbnNhY3Rpb24gPSB0aGlzLmNvbnRhaW5lci5nZXQoQ29tcG9zaXRpb25UcmFuc2FjdGlvbik7XHJcbiAgICAgICAgZGVsZXRlIHRyYW5zYWN0aW9uLmluaXRpYWxDb21wb3NpdGlvbjtcclxuICAgICAgICBpZiAoIXJvb3QpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnTW9kdWxlSWQpIHtcclxuICAgICAgICAgICAgICAgIHJvb3QgPSByZWxhdGl2ZVRvRmlsZSgnLi9hcHAnLCB0aGlzLmNvbmZpZ01vZHVsZUlkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJvb3QgPSAnYXBwJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpbnN0cnVjdGlvbi52aWV3TW9kZWwgPSByb290O1xyXG4gICAgICAgIGluc3RydWN0aW9uLmNvbnRhaW5lciA9IGluc3RydWN0aW9uLmNoaWxkQ29udGFpbmVyID0gdGhpcy5jb250YWluZXI7XHJcbiAgICAgICAgaW5zdHJ1Y3Rpb24udmlld1Nsb3QgPSB0aGlzLmhvc3RTbG90O1xyXG4gICAgICAgIGluc3RydWN0aW9uLmhvc3QgPSB0aGlzLmhvc3Q7XHJcbiAgICAgICAgcmV0dXJuIGVuZ2luZS5jb21wb3NlKGluc3RydWN0aW9uKS50aGVuKGZ1bmN0aW9uIChyKSB7XHJcbiAgICAgICAgICAgIF90aGlzLnJvb3QgPSByO1xyXG4gICAgICAgICAgICBpbnN0cnVjdGlvbi52aWV3U2xvdC5hdHRhY2hlZCgpO1xyXG4gICAgICAgICAgICBfdGhpcy5fb25BdXJlbGlhQ29tcG9zZWQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIF90aGlzO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIEF1cmVsaWEucHJvdG90eXBlLl9jb25maWd1cmVIb3N0ID0gZnVuY3Rpb24gKGFwcGxpY2F0aW9uSG9zdCkge1xyXG4gICAgICAgIGlmICh0aGlzLmhvc3RDb25maWd1cmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXBwbGljYXRpb25Ib3N0ID0gYXBwbGljYXRpb25Ib3N0IHx8IHRoaXMuaG9zdDtcclxuICAgICAgICBpZiAoIWFwcGxpY2F0aW9uSG9zdCB8fCB0eXBlb2YgYXBwbGljYXRpb25Ib3N0ID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICB0aGlzLmhvc3QgPSBET00uZ2V0RWxlbWVudEJ5SWQoYXBwbGljYXRpb25Ib3N0IHx8ICdhcHBsaWNhdGlvbkhvc3QnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaG9zdCA9IGFwcGxpY2F0aW9uSG9zdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLmhvc3QpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBhcHBsaWNhdGlvbkhvc3Qgd2FzIHNwZWNpZmllZC4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5ob3N0Q29uZmlndXJlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5ob3N0LmF1cmVsaWEgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuaG9zdFNsb3QgPSBuZXcgVmlld1Nsb3QodGhpcy5ob3N0LCB0cnVlKTtcclxuICAgICAgICB0aGlzLmhvc3RTbG90LnRyYW5zZm9ybUNoaWxkTm9kZXNJbnRvVmlldygpO1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyLnJlZ2lzdGVySW5zdGFuY2UoRE9NLmJvdW5kYXJ5LCB0aGlzLmhvc3QpO1xyXG4gICAgfTtcclxuICAgIEF1cmVsaWEucHJvdG90eXBlLl9vbkF1cmVsaWFDb21wb3NlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgZXZ0ID0gRE9NLmNyZWF0ZUN1c3RvbUV2ZW50KCdhdXJlbGlhLWNvbXBvc2VkJywgeyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlIH0pO1xyXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gRE9NLmRpc3BhdGNoRXZlbnQoZXZ0KTsgfSwgMSk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIEF1cmVsaWE7XHJcbn0oKSk7XG5cbmV4cG9ydCB7IEF1cmVsaWEsIEZyYW1ld29ya0NvbmZpZ3VyYXRpb24gfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWF1cmVsaWEtZnJhbWV3b3JrLmpzLm1hcFxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///aurelia-framework\n')},"aurelia-history-browser":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("/* unused harmony export BrowserHistory */\n/* unused harmony export DefaultLinkHandler */\n/* unused harmony export LinkHandler */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"configure\", function() { return configure; });\n/* harmony import */ var aurelia_history__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(14);\n/* harmony import */ var aurelia_pal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(0);\n\n\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\n\nvar LinkHandler = (function () {\r\n    function LinkHandler() {\r\n    }\r\n    LinkHandler.prototype.activate = function (history) { };\r\n    LinkHandler.prototype.deactivate = function () { };\r\n    return LinkHandler;\r\n}());\r\nvar DefaultLinkHandler = (function (_super) {\r\n    __extends(DefaultLinkHandler, _super);\r\n    function DefaultLinkHandler() {\r\n        var _this = _super.call(this) || this;\r\n        _this.handler = function (e) {\r\n            var _a = DefaultLinkHandler.getEventInfo(e), shouldHandleEvent = _a.shouldHandleEvent, href = _a.href;\r\n            if (shouldHandleEvent) {\r\n                e.preventDefault();\r\n                _this.history.navigate(href);\r\n            }\r\n        };\r\n        return _this;\r\n    }\r\n    DefaultLinkHandler.prototype.activate = function (history) {\r\n        if (history._hasPushState) {\r\n            this.history = history;\r\n            aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* DOM */ \"b\"].addEventListener('click', this.handler, true);\r\n        }\r\n    };\r\n    DefaultLinkHandler.prototype.deactivate = function () {\r\n        aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* DOM */ \"b\"].removeEventListener('click', this.handler, true);\r\n    };\r\n    DefaultLinkHandler.getEventInfo = function (event) {\r\n        var $event = event;\r\n        var info = {\r\n            shouldHandleEvent: false,\r\n            href: null,\r\n            anchor: null\r\n        };\r\n        var target = DefaultLinkHandler.findClosestAnchor($event.target);\r\n        if (!target || !DefaultLinkHandler.targetIsThisWindow(target)) {\r\n            return info;\r\n        }\r\n        if (hasAttribute(target, 'download')\r\n            || hasAttribute(target, 'router-ignore')\r\n            || hasAttribute(target, 'data-router-ignore')) {\r\n            return info;\r\n        }\r\n        if ($event.altKey || $event.ctrlKey || $event.metaKey || $event.shiftKey) {\r\n            return info;\r\n        }\r\n        var href = target.getAttribute('href');\r\n        info.anchor = target;\r\n        info.href = href;\r\n        var leftButtonClicked = $event.which === 1;\r\n        var isRelative = href && !(href.charAt(0) === '#' || (/^[a-z]+:/i).test(href));\r\n        info.shouldHandleEvent = leftButtonClicked && isRelative;\r\n        return info;\r\n    };\r\n    DefaultLinkHandler.findClosestAnchor = function (el) {\r\n        while (el) {\r\n            if (el.tagName === 'A') {\r\n                return el;\r\n            }\r\n            el = el.parentNode;\r\n        }\r\n    };\r\n    DefaultLinkHandler.targetIsThisWindow = function (target) {\r\n        var targetWindow = target.getAttribute('target');\r\n        var win = aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* PLATFORM */ \"d\"].global;\r\n        return !targetWindow ||\r\n            targetWindow === win.name ||\r\n            targetWindow === '_self';\r\n    };\r\n    return DefaultLinkHandler;\r\n}(LinkHandler));\r\nvar hasAttribute = function (el, attr) { return el.hasAttribute(attr); };\n\nvar BrowserHistory = (function (_super) {\r\n    __extends(BrowserHistory, _super);\r\n    function BrowserHistory(linkHandler) {\r\n        var _this = _super.call(this) || this;\r\n        _this._isActive = false;\r\n        _this._checkUrlCallback = _this._checkUrl.bind(_this);\r\n        _this.location = aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* PLATFORM */ \"d\"].location;\r\n        _this.history = aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* PLATFORM */ \"d\"].history;\r\n        _this.linkHandler = linkHandler;\r\n        return _this;\r\n    }\r\n    BrowserHistory.prototype.activate = function (options) {\r\n        if (this._isActive) {\r\n            throw new Error('History has already been activated.');\r\n        }\r\n        var $history = this.history;\r\n        var wantsPushState = !!options.pushState;\r\n        this._isActive = true;\r\n        var normalizedOptions = this.options = Object.assign({}, { root: '/' }, this.options, options);\r\n        var rootUrl = this.root = ('/' + normalizedOptions.root + '/').replace(rootStripper, '/');\r\n        var wantsHashChange = this._wantsHashChange = normalizedOptions.hashChange !== false;\r\n        var hasPushState = this._hasPushState = !!(normalizedOptions.pushState && $history && $history.pushState);\r\n        var eventName;\r\n        if (hasPushState) {\r\n            eventName = 'popstate';\r\n        }\r\n        else if (wantsHashChange) {\r\n            eventName = 'hashchange';\r\n        }\r\n        aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* PLATFORM */ \"d\"].addEventListener(eventName, this._checkUrlCallback);\r\n        if (wantsHashChange && wantsPushState) {\r\n            var $location = this.location;\r\n            var atRoot = $location.pathname.replace(/[^\\/]$/, '$&/') === rootUrl;\r\n            if (!hasPushState && !atRoot) {\r\n                var fragment = this.fragment = this._getFragment(null, true);\r\n                $location.replace(rootUrl + $location.search + '#' + fragment);\r\n                return true;\r\n            }\r\n            else if (hasPushState && atRoot && $location.hash) {\r\n                var fragment = this.fragment = this._getHash().replace(routeStripper, '');\r\n                $history.replaceState({}, aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* DOM */ \"b\"].title, rootUrl + fragment + $location.search);\r\n            }\r\n        }\r\n        if (!this.fragment) {\r\n            this.fragment = this._getFragment('');\r\n        }\r\n        this.linkHandler.activate(this);\r\n        if (!normalizedOptions.silent) {\r\n            return this._loadUrl('');\r\n        }\r\n    };\r\n    BrowserHistory.prototype.deactivate = function () {\r\n        var handler = this._checkUrlCallback;\r\n        aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* PLATFORM */ \"d\"].removeEventListener('popstate', handler);\r\n        aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* PLATFORM */ \"d\"].removeEventListener('hashchange', handler);\r\n        this._isActive = false;\r\n        this.linkHandler.deactivate();\r\n    };\r\n    BrowserHistory.prototype.getAbsoluteRoot = function () {\r\n        var $location = this.location;\r\n        var origin = createOrigin($location.protocol, $location.hostname, $location.port);\r\n        return \"\" + origin + this.root;\r\n    };\r\n    BrowserHistory.prototype.navigate = function (fragment, _a) {\r\n        var _b = _a === void 0 ? {} : _a, _c = _b.trigger, trigger = _c === void 0 ? true : _c, _d = _b.replace, replace = _d === void 0 ? false : _d;\r\n        var location = this.location;\r\n        if (fragment && absoluteUrl.test(fragment)) {\r\n            location.href = fragment;\r\n            return true;\r\n        }\r\n        if (!this._isActive) {\r\n            return false;\r\n        }\r\n        fragment = this._getFragment(fragment || '');\r\n        if (this.fragment === fragment && !replace) {\r\n            return false;\r\n        }\r\n        this.fragment = fragment;\r\n        var url = this.root + fragment;\r\n        if (fragment === '' && url !== '/') {\r\n            url = url.slice(0, -1);\r\n        }\r\n        if (this._hasPushState) {\r\n            url = url.replace('//', '/');\r\n            this.history[replace ? 'replaceState' : 'pushState']({}, aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* DOM */ \"b\"].title, url);\r\n        }\r\n        else if (this._wantsHashChange) {\r\n            updateHash(location, fragment, replace);\r\n        }\r\n        else {\r\n            location.assign(url);\r\n        }\r\n        if (trigger) {\r\n            return this._loadUrl(fragment);\r\n        }\r\n        return true;\r\n    };\r\n    BrowserHistory.prototype.navigateBack = function () {\r\n        this.history.back();\r\n    };\r\n    BrowserHistory.prototype.setTitle = function (title) {\r\n        aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* DOM */ \"b\"].title = title;\r\n    };\r\n    BrowserHistory.prototype.setState = function (key, value) {\r\n        var $history = this.history;\r\n        var state = Object.assign({}, $history.state);\r\n        var _a = this.location, pathname = _a.pathname, search = _a.search, hash = _a.hash;\r\n        state[key] = value;\r\n        $history.replaceState(state, null, \"\" + pathname + search + hash);\r\n    };\r\n    BrowserHistory.prototype.getState = function (key) {\r\n        var state = Object.assign({}, this.history.state);\r\n        return state[key];\r\n    };\r\n    BrowserHistory.prototype.getHistoryIndex = function () {\r\n        var historyIndex = this.getState('HistoryIndex');\r\n        if (historyIndex === undefined) {\r\n            historyIndex = this.history.length - 1;\r\n            this.setState('HistoryIndex', historyIndex);\r\n        }\r\n        return historyIndex;\r\n    };\r\n    BrowserHistory.prototype.go = function (movement) {\r\n        this.history.go(movement);\r\n    };\r\n    BrowserHistory.prototype._getHash = function () {\r\n        return this.location.hash.substr(1);\r\n    };\r\n    BrowserHistory.prototype._getFragment = function (fragment, forcePushState) {\r\n        var rootUrl;\r\n        if (!fragment) {\r\n            if (this._hasPushState || !this._wantsHashChange || forcePushState) {\r\n                var location_1 = this.location;\r\n                fragment = location_1.pathname + location_1.search;\r\n                rootUrl = this.root.replace(trailingSlash, '');\r\n                if (!fragment.indexOf(rootUrl)) {\r\n                    fragment = fragment.substr(rootUrl.length);\r\n                }\r\n            }\r\n            else {\r\n                fragment = this._getHash();\r\n            }\r\n        }\r\n        return '/' + fragment.replace(routeStripper, '');\r\n    };\r\n    BrowserHistory.prototype._checkUrl = function () {\r\n        var current = this._getFragment('');\r\n        if (current !== this.fragment) {\r\n            this._loadUrl('');\r\n        }\r\n    };\r\n    BrowserHistory.prototype._loadUrl = function (fragmentOverride) {\r\n        var fragment = this.fragment = this._getFragment(fragmentOverride);\r\n        return this.options.routeHandler ?\r\n            this.options.routeHandler(fragment) :\r\n            false;\r\n    };\r\n    BrowserHistory.inject = [LinkHandler];\r\n    return BrowserHistory;\r\n}(aurelia_history__WEBPACK_IMPORTED_MODULE_0__[/* History */ \"a\"]));\r\nvar routeStripper = /^#?\\/*|\\s+$/g;\r\nvar rootStripper = /^\\/+|\\/+$/g;\r\nvar trailingSlash = /\\/$/;\r\nvar absoluteUrl = /^([a-z][a-z0-9+\\-.]*:)?\\/\\//i;\r\nfunction updateHash($location, fragment, replace) {\r\n    if (replace) {\r\n        var href = $location.href.replace(/(javascript:|#).*$/, '');\r\n        $location.replace(href + '#' + fragment);\r\n    }\r\n    else {\r\n        $location.hash = '#' + fragment;\r\n    }\r\n}\r\nfunction createOrigin(protocol, hostname, port) {\r\n    return protocol + \"//\" + hostname + (port ? ':' + port : '');\r\n}\n\nfunction configure(config) {\r\n    var $config = config;\r\n    $config.singleton(aurelia_history__WEBPACK_IMPORTED_MODULE_0__[/* History */ \"a\"], BrowserHistory);\r\n    $config.transient(LinkHandler, DefaultLinkHandler);\r\n}\n\n\n//# sourceMappingURL=aurelia-history-browser.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXVyZWxpYS1oaXN0b3J5LWJyb3dzZXIvZGlzdC9uYXRpdmUtbW9kdWxlcy9hdXJlbGlhLWhpc3RvcnktYnJvd3Nlci5qcz9kNjI3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUEwQztBQUNFOztBQUU1QztBQUNBO0FBQ0EsK0RBQStEO0FBQy9EO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVUsZ0JBQWdCLHNDQUFzQyxpQkFBaUIsRUFBRTtBQUNuRix5QkFBeUIsdURBQXVEO0FBQ2hGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1CQUFtQixzQkFBc0I7QUFDekM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQ7QUFDekQsb0RBQW9EO0FBQ3BEO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSx1REFBRztBQUNmO0FBQ0E7QUFDQTtBQUNBLFFBQVEsdURBQUc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLDREQUFRO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Qsd0NBQXdDLDhCQUE4Qjs7QUFFdEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLDREQUFRO0FBQ2pDLHdCQUF3Qiw0REFBUTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtEQUErRCxHQUFHLFlBQVk7QUFDOUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLDREQUFRO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLEVBQUUsdURBQUc7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSw0REFBUTtBQUNoQixRQUFRLDREQUFRO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1FQUFtRSxFQUFFLHVEQUFHO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSx1REFBRztBQUNYO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLENBQUMsK0RBQU87QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0JBQXNCLCtEQUFPO0FBQzdCO0FBQ0E7O0FBRXNFO0FBQ3RFIiwiZmlsZSI6ImF1cmVsaWEtaGlzdG9yeS1icm93c2VyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSGlzdG9yeSB9IGZyb20gJ2F1cmVsaWEtaGlzdG9yeSc7XG5pbXBvcnQgeyBET00sIFBMQVRGT1JNIH0gZnJvbSAnYXVyZWxpYS1wYWwnO1xuXG4vKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZVxyXG50aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZVxyXG5MaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG5cclxuVEhJUyBDT0RFIElTIFBST1ZJREVEIE9OIEFOICpBUyBJUyogQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxyXG5LSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIEFOWSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsXHJcbk1FUkNIQU5UQUJMSVRZIE9SIE5PTi1JTkZSSU5HRU1FTlQuXHJcblxyXG5TZWUgdGhlIEFwYWNoZSBWZXJzaW9uIDIuMCBMaWNlbnNlIGZvciBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcclxuYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSAqL1xyXG5cclxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XG5cbnZhciBMaW5rSGFuZGxlciA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBMaW5rSGFuZGxlcigpIHtcclxuICAgIH1cclxuICAgIExpbmtIYW5kbGVyLnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uIChoaXN0b3J5KSB7IH07XHJcbiAgICBMaW5rSGFuZGxlci5wcm90b3R5cGUuZGVhY3RpdmF0ZSA9IGZ1bmN0aW9uICgpIHsgfTtcclxuICAgIHJldHVybiBMaW5rSGFuZGxlcjtcclxufSgpKTtcclxudmFyIERlZmF1bHRMaW5rSGFuZGxlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XHJcbiAgICBfX2V4dGVuZHMoRGVmYXVsdExpbmtIYW5kbGVyLCBfc3VwZXIpO1xyXG4gICAgZnVuY3Rpb24gRGVmYXVsdExpbmtIYW5kbGVyKCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XHJcbiAgICAgICAgX3RoaXMuaGFuZGxlciA9IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIHZhciBfYSA9IERlZmF1bHRMaW5rSGFuZGxlci5nZXRFdmVudEluZm8oZSksIHNob3VsZEhhbmRsZUV2ZW50ID0gX2Euc2hvdWxkSGFuZGxlRXZlbnQsIGhyZWYgPSBfYS5ocmVmO1xyXG4gICAgICAgICAgICBpZiAoc2hvdWxkSGFuZGxlRXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIF90aGlzLmhpc3RvcnkubmF2aWdhdGUoaHJlZik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBfdGhpcztcclxuICAgIH1cclxuICAgIERlZmF1bHRMaW5rSGFuZGxlci5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbiAoaGlzdG9yeSkge1xyXG4gICAgICAgIGlmIChoaXN0b3J5Ll9oYXNQdXNoU3RhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5oaXN0b3J5ID0gaGlzdG9yeTtcclxuICAgICAgICAgICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5oYW5kbGVyLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgRGVmYXVsdExpbmtIYW5kbGVyLnByb3RvdHlwZS5kZWFjdGl2YXRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIERPTS5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuaGFuZGxlciwgdHJ1ZSk7XHJcbiAgICB9O1xyXG4gICAgRGVmYXVsdExpbmtIYW5kbGVyLmdldEV2ZW50SW5mbyA9IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgIHZhciAkZXZlbnQgPSBldmVudDtcclxuICAgICAgICB2YXIgaW5mbyA9IHtcclxuICAgICAgICAgICAgc2hvdWxkSGFuZGxlRXZlbnQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBocmVmOiBudWxsLFxyXG4gICAgICAgICAgICBhbmNob3I6IG51bGxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHZhciB0YXJnZXQgPSBEZWZhdWx0TGlua0hhbmRsZXIuZmluZENsb3Nlc3RBbmNob3IoJGV2ZW50LnRhcmdldCk7XHJcbiAgICAgICAgaWYgKCF0YXJnZXQgfHwgIURlZmF1bHRMaW5rSGFuZGxlci50YXJnZXRJc1RoaXNXaW5kb3codGFyZ2V0KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gaW5mbztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGhhc0F0dHJpYnV0ZSh0YXJnZXQsICdkb3dubG9hZCcpXHJcbiAgICAgICAgICAgIHx8IGhhc0F0dHJpYnV0ZSh0YXJnZXQsICdyb3V0ZXItaWdub3JlJylcclxuICAgICAgICAgICAgfHwgaGFzQXR0cmlidXRlKHRhcmdldCwgJ2RhdGEtcm91dGVyLWlnbm9yZScpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpbmZvO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoJGV2ZW50LmFsdEtleSB8fCAkZXZlbnQuY3RybEtleSB8fCAkZXZlbnQubWV0YUtleSB8fCAkZXZlbnQuc2hpZnRLZXkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGluZm87XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBocmVmID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgnaHJlZicpO1xyXG4gICAgICAgIGluZm8uYW5jaG9yID0gdGFyZ2V0O1xyXG4gICAgICAgIGluZm8uaHJlZiA9IGhyZWY7XHJcbiAgICAgICAgdmFyIGxlZnRCdXR0b25DbGlja2VkID0gJGV2ZW50LndoaWNoID09PSAxO1xyXG4gICAgICAgIHZhciBpc1JlbGF0aXZlID0gaHJlZiAmJiAhKGhyZWYuY2hhckF0KDApID09PSAnIycgfHwgKC9eW2Etel0rOi9pKS50ZXN0KGhyZWYpKTtcclxuICAgICAgICBpbmZvLnNob3VsZEhhbmRsZUV2ZW50ID0gbGVmdEJ1dHRvbkNsaWNrZWQgJiYgaXNSZWxhdGl2ZTtcclxuICAgICAgICByZXR1cm4gaW5mbztcclxuICAgIH07XHJcbiAgICBEZWZhdWx0TGlua0hhbmRsZXIuZmluZENsb3Nlc3RBbmNob3IgPSBmdW5jdGlvbiAoZWwpIHtcclxuICAgICAgICB3aGlsZSAoZWwpIHtcclxuICAgICAgICAgICAgaWYgKGVsLnRhZ05hbWUgPT09ICdBJykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsID0gZWwucGFyZW50Tm9kZTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgRGVmYXVsdExpbmtIYW5kbGVyLnRhcmdldElzVGhpc1dpbmRvdyA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcclxuICAgICAgICB2YXIgdGFyZ2V0V2luZG93ID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgndGFyZ2V0Jyk7XHJcbiAgICAgICAgdmFyIHdpbiA9IFBMQVRGT1JNLmdsb2JhbDtcclxuICAgICAgICByZXR1cm4gIXRhcmdldFdpbmRvdyB8fFxyXG4gICAgICAgICAgICB0YXJnZXRXaW5kb3cgPT09IHdpbi5uYW1lIHx8XHJcbiAgICAgICAgICAgIHRhcmdldFdpbmRvdyA9PT0gJ19zZWxmJztcclxuICAgIH07XHJcbiAgICByZXR1cm4gRGVmYXVsdExpbmtIYW5kbGVyO1xyXG59KExpbmtIYW5kbGVyKSk7XHJcbnZhciBoYXNBdHRyaWJ1dGUgPSBmdW5jdGlvbiAoZWwsIGF0dHIpIHsgcmV0dXJuIGVsLmhhc0F0dHJpYnV0ZShhdHRyKTsgfTtcblxudmFyIEJyb3dzZXJIaXN0b3J5ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcclxuICAgIF9fZXh0ZW5kcyhCcm93c2VySGlzdG9yeSwgX3N1cGVyKTtcclxuICAgIGZ1bmN0aW9uIEJyb3dzZXJIaXN0b3J5KGxpbmtIYW5kbGVyKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcclxuICAgICAgICBfdGhpcy5faXNBY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICBfdGhpcy5fY2hlY2tVcmxDYWxsYmFjayA9IF90aGlzLl9jaGVja1VybC5iaW5kKF90aGlzKTtcclxuICAgICAgICBfdGhpcy5sb2NhdGlvbiA9IFBMQVRGT1JNLmxvY2F0aW9uO1xyXG4gICAgICAgIF90aGlzLmhpc3RvcnkgPSBQTEFURk9STS5oaXN0b3J5O1xyXG4gICAgICAgIF90aGlzLmxpbmtIYW5kbGVyID0gbGlua0hhbmRsZXI7XHJcbiAgICAgICAgcmV0dXJuIF90aGlzO1xyXG4gICAgfVxyXG4gICAgQnJvd3Nlckhpc3RvcnkucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICAgICAgICBpZiAodGhpcy5faXNBY3RpdmUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIaXN0b3J5IGhhcyBhbHJlYWR5IGJlZW4gYWN0aXZhdGVkLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgJGhpc3RvcnkgPSB0aGlzLmhpc3Rvcnk7XHJcbiAgICAgICAgdmFyIHdhbnRzUHVzaFN0YXRlID0gISFvcHRpb25zLnB1c2hTdGF0ZTtcclxuICAgICAgICB0aGlzLl9pc0FjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgdmFyIG5vcm1hbGl6ZWRPcHRpb25zID0gdGhpcy5vcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgeyByb290OiAnLycgfSwgdGhpcy5vcHRpb25zLCBvcHRpb25zKTtcclxuICAgICAgICB2YXIgcm9vdFVybCA9IHRoaXMucm9vdCA9ICgnLycgKyBub3JtYWxpemVkT3B0aW9ucy5yb290ICsgJy8nKS5yZXBsYWNlKHJvb3RTdHJpcHBlciwgJy8nKTtcclxuICAgICAgICB2YXIgd2FudHNIYXNoQ2hhbmdlID0gdGhpcy5fd2FudHNIYXNoQ2hhbmdlID0gbm9ybWFsaXplZE9wdGlvbnMuaGFzaENoYW5nZSAhPT0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGhhc1B1c2hTdGF0ZSA9IHRoaXMuX2hhc1B1c2hTdGF0ZSA9ICEhKG5vcm1hbGl6ZWRPcHRpb25zLnB1c2hTdGF0ZSAmJiAkaGlzdG9yeSAmJiAkaGlzdG9yeS5wdXNoU3RhdGUpO1xyXG4gICAgICAgIHZhciBldmVudE5hbWU7XHJcbiAgICAgICAgaWYgKGhhc1B1c2hTdGF0ZSkge1xyXG4gICAgICAgICAgICBldmVudE5hbWUgPSAncG9wc3RhdGUnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh3YW50c0hhc2hDaGFuZ2UpIHtcclxuICAgICAgICAgICAgZXZlbnROYW1lID0gJ2hhc2hjaGFuZ2UnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBQTEFURk9STS5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgdGhpcy5fY2hlY2tVcmxDYWxsYmFjayk7XHJcbiAgICAgICAgaWYgKHdhbnRzSGFzaENoYW5nZSAmJiB3YW50c1B1c2hTdGF0ZSkge1xyXG4gICAgICAgICAgICB2YXIgJGxvY2F0aW9uID0gdGhpcy5sb2NhdGlvbjtcclxuICAgICAgICAgICAgdmFyIGF0Um9vdCA9ICRsb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKC9bXlxcL10kLywgJyQmLycpID09PSByb290VXJsO1xyXG4gICAgICAgICAgICBpZiAoIWhhc1B1c2hTdGF0ZSAmJiAhYXRSb290KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZnJhZ21lbnQgPSB0aGlzLmZyYWdtZW50ID0gdGhpcy5fZ2V0RnJhZ21lbnQobnVsbCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAkbG9jYXRpb24ucmVwbGFjZShyb290VXJsICsgJGxvY2F0aW9uLnNlYXJjaCArICcjJyArIGZyYWdtZW50KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGhhc1B1c2hTdGF0ZSAmJiBhdFJvb3QgJiYgJGxvY2F0aW9uLmhhc2gpIHtcclxuICAgICAgICAgICAgICAgIHZhciBmcmFnbWVudCA9IHRoaXMuZnJhZ21lbnQgPSB0aGlzLl9nZXRIYXNoKCkucmVwbGFjZShyb3V0ZVN0cmlwcGVyLCAnJyk7XHJcbiAgICAgICAgICAgICAgICAkaGlzdG9yeS5yZXBsYWNlU3RhdGUoe30sIERPTS50aXRsZSwgcm9vdFVybCArIGZyYWdtZW50ICsgJGxvY2F0aW9uLnNlYXJjaCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLmZyYWdtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhZ21lbnQgPSB0aGlzLl9nZXRGcmFnbWVudCgnJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubGlua0hhbmRsZXIuYWN0aXZhdGUodGhpcyk7XHJcbiAgICAgICAgaWYgKCFub3JtYWxpemVkT3B0aW9ucy5zaWxlbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRVcmwoJycpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBCcm93c2VySGlzdG9yeS5wcm90b3R5cGUuZGVhY3RpdmF0ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgaGFuZGxlciA9IHRoaXMuX2NoZWNrVXJsQ2FsbGJhY2s7XHJcbiAgICAgICAgUExBVEZPUk0ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9wc3RhdGUnLCBoYW5kbGVyKTtcclxuICAgICAgICBQTEFURk9STS5yZW1vdmVFdmVudExpc3RlbmVyKCdoYXNoY2hhbmdlJywgaGFuZGxlcik7XHJcbiAgICAgICAgdGhpcy5faXNBY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmxpbmtIYW5kbGVyLmRlYWN0aXZhdGUoKTtcclxuICAgIH07XHJcbiAgICBCcm93c2VySGlzdG9yeS5wcm90b3R5cGUuZ2V0QWJzb2x1dGVSb290ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciAkbG9jYXRpb24gPSB0aGlzLmxvY2F0aW9uO1xyXG4gICAgICAgIHZhciBvcmlnaW4gPSBjcmVhdGVPcmlnaW4oJGxvY2F0aW9uLnByb3RvY29sLCAkbG9jYXRpb24uaG9zdG5hbWUsICRsb2NhdGlvbi5wb3J0KTtcclxuICAgICAgICByZXR1cm4gXCJcIiArIG9yaWdpbiArIHRoaXMucm9vdDtcclxuICAgIH07XHJcbiAgICBCcm93c2VySGlzdG9yeS5wcm90b3R5cGUubmF2aWdhdGUgPSBmdW5jdGlvbiAoZnJhZ21lbnQsIF9hKSB7XHJcbiAgICAgICAgdmFyIF9iID0gX2EgPT09IHZvaWQgMCA/IHt9IDogX2EsIF9jID0gX2IudHJpZ2dlciwgdHJpZ2dlciA9IF9jID09PSB2b2lkIDAgPyB0cnVlIDogX2MsIF9kID0gX2IucmVwbGFjZSwgcmVwbGFjZSA9IF9kID09PSB2b2lkIDAgPyBmYWxzZSA6IF9kO1xyXG4gICAgICAgIHZhciBsb2NhdGlvbiA9IHRoaXMubG9jYXRpb247XHJcbiAgICAgICAgaWYgKGZyYWdtZW50ICYmIGFic29sdXRlVXJsLnRlc3QoZnJhZ21lbnQpKSB7XHJcbiAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSBmcmFnbWVudDtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5faXNBY3RpdmUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmcmFnbWVudCA9IHRoaXMuX2dldEZyYWdtZW50KGZyYWdtZW50IHx8ICcnKTtcclxuICAgICAgICBpZiAodGhpcy5mcmFnbWVudCA9PT0gZnJhZ21lbnQgJiYgIXJlcGxhY2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZyYWdtZW50ID0gZnJhZ21lbnQ7XHJcbiAgICAgICAgdmFyIHVybCA9IHRoaXMucm9vdCArIGZyYWdtZW50O1xyXG4gICAgICAgIGlmIChmcmFnbWVudCA9PT0gJycgJiYgdXJsICE9PSAnLycpIHtcclxuICAgICAgICAgICAgdXJsID0gdXJsLnNsaWNlKDAsIC0xKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuX2hhc1B1c2hTdGF0ZSkge1xyXG4gICAgICAgICAgICB1cmwgPSB1cmwucmVwbGFjZSgnLy8nLCAnLycpO1xyXG4gICAgICAgICAgICB0aGlzLmhpc3RvcnlbcmVwbGFjZSA/ICdyZXBsYWNlU3RhdGUnIDogJ3B1c2hTdGF0ZSddKHt9LCBET00udGl0bGUsIHVybCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX3dhbnRzSGFzaENoYW5nZSkge1xyXG4gICAgICAgICAgICB1cGRhdGVIYXNoKGxvY2F0aW9uLCBmcmFnbWVudCwgcmVwbGFjZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsb2NhdGlvbi5hc3NpZ24odXJsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRyaWdnZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRVcmwoZnJhZ21lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH07XHJcbiAgICBCcm93c2VySGlzdG9yeS5wcm90b3R5cGUubmF2aWdhdGVCYWNrID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuaGlzdG9yeS5iYWNrKCk7XHJcbiAgICB9O1xyXG4gICAgQnJvd3Nlckhpc3RvcnkucHJvdG90eXBlLnNldFRpdGxlID0gZnVuY3Rpb24gKHRpdGxlKSB7XHJcbiAgICAgICAgRE9NLnRpdGxlID0gdGl0bGU7XHJcbiAgICB9O1xyXG4gICAgQnJvd3Nlckhpc3RvcnkucHJvdG90eXBlLnNldFN0YXRlID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcclxuICAgICAgICB2YXIgJGhpc3RvcnkgPSB0aGlzLmhpc3Rvcnk7XHJcbiAgICAgICAgdmFyIHN0YXRlID0gT2JqZWN0LmFzc2lnbih7fSwgJGhpc3Rvcnkuc3RhdGUpO1xyXG4gICAgICAgIHZhciBfYSA9IHRoaXMubG9jYXRpb24sIHBhdGhuYW1lID0gX2EucGF0aG5hbWUsIHNlYXJjaCA9IF9hLnNlYXJjaCwgaGFzaCA9IF9hLmhhc2g7XHJcbiAgICAgICAgc3RhdGVba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICRoaXN0b3J5LnJlcGxhY2VTdGF0ZShzdGF0ZSwgbnVsbCwgXCJcIiArIHBhdGhuYW1lICsgc2VhcmNoICsgaGFzaCk7XHJcbiAgICB9O1xyXG4gICAgQnJvd3Nlckhpc3RvcnkucHJvdG90eXBlLmdldFN0YXRlID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIHZhciBzdGF0ZSA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuaGlzdG9yeS5zdGF0ZSk7XHJcbiAgICAgICAgcmV0dXJuIHN0YXRlW2tleV07XHJcbiAgICB9O1xyXG4gICAgQnJvd3Nlckhpc3RvcnkucHJvdG90eXBlLmdldEhpc3RvcnlJbmRleCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgaGlzdG9yeUluZGV4ID0gdGhpcy5nZXRTdGF0ZSgnSGlzdG9yeUluZGV4Jyk7XHJcbiAgICAgICAgaWYgKGhpc3RvcnlJbmRleCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGhpc3RvcnlJbmRleCA9IHRoaXMuaGlzdG9yeS5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKCdIaXN0b3J5SW5kZXgnLCBoaXN0b3J5SW5kZXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaGlzdG9yeUluZGV4O1xyXG4gICAgfTtcclxuICAgIEJyb3dzZXJIaXN0b3J5LnByb3RvdHlwZS5nbyA9IGZ1bmN0aW9uIChtb3ZlbWVudCkge1xyXG4gICAgICAgIHRoaXMuaGlzdG9yeS5nbyhtb3ZlbWVudCk7XHJcbiAgICB9O1xyXG4gICAgQnJvd3Nlckhpc3RvcnkucHJvdG90eXBlLl9nZXRIYXNoID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxvY2F0aW9uLmhhc2guc3Vic3RyKDEpO1xyXG4gICAgfTtcclxuICAgIEJyb3dzZXJIaXN0b3J5LnByb3RvdHlwZS5fZ2V0RnJhZ21lbnQgPSBmdW5jdGlvbiAoZnJhZ21lbnQsIGZvcmNlUHVzaFN0YXRlKSB7XHJcbiAgICAgICAgdmFyIHJvb3RVcmw7XHJcbiAgICAgICAgaWYgKCFmcmFnbWVudCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5faGFzUHVzaFN0YXRlIHx8ICF0aGlzLl93YW50c0hhc2hDaGFuZ2UgfHwgZm9yY2VQdXNoU3RhdGUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvbl8xID0gdGhpcy5sb2NhdGlvbjtcclxuICAgICAgICAgICAgICAgIGZyYWdtZW50ID0gbG9jYXRpb25fMS5wYXRobmFtZSArIGxvY2F0aW9uXzEuc2VhcmNoO1xyXG4gICAgICAgICAgICAgICAgcm9vdFVybCA9IHRoaXMucm9vdC5yZXBsYWNlKHRyYWlsaW5nU2xhc2gsICcnKTtcclxuICAgICAgICAgICAgICAgIGlmICghZnJhZ21lbnQuaW5kZXhPZihyb290VXJsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZyYWdtZW50ID0gZnJhZ21lbnQuc3Vic3RyKHJvb3RVcmwubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGZyYWdtZW50ID0gdGhpcy5fZ2V0SGFzaCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAnLycgKyBmcmFnbWVudC5yZXBsYWNlKHJvdXRlU3RyaXBwZXIsICcnKTtcclxuICAgIH07XHJcbiAgICBCcm93c2VySGlzdG9yeS5wcm90b3R5cGUuX2NoZWNrVXJsID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBjdXJyZW50ID0gdGhpcy5fZ2V0RnJhZ21lbnQoJycpO1xyXG4gICAgICAgIGlmIChjdXJyZW50ICE9PSB0aGlzLmZyYWdtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xvYWRVcmwoJycpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBCcm93c2VySGlzdG9yeS5wcm90b3R5cGUuX2xvYWRVcmwgPSBmdW5jdGlvbiAoZnJhZ21lbnRPdmVycmlkZSkge1xyXG4gICAgICAgIHZhciBmcmFnbWVudCA9IHRoaXMuZnJhZ21lbnQgPSB0aGlzLl9nZXRGcmFnbWVudChmcmFnbWVudE92ZXJyaWRlKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnJvdXRlSGFuZGxlciA/XHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5yb3V0ZUhhbmRsZXIoZnJhZ21lbnQpIDpcclxuICAgICAgICAgICAgZmFsc2U7XHJcbiAgICB9O1xyXG4gICAgQnJvd3Nlckhpc3RvcnkuaW5qZWN0ID0gW0xpbmtIYW5kbGVyXTtcclxuICAgIHJldHVybiBCcm93c2VySGlzdG9yeTtcclxufShIaXN0b3J5KSk7XHJcbnZhciByb3V0ZVN0cmlwcGVyID0gL14jP1xcLyp8XFxzKyQvZztcclxudmFyIHJvb3RTdHJpcHBlciA9IC9eXFwvK3xcXC8rJC9nO1xyXG52YXIgdHJhaWxpbmdTbGFzaCA9IC9cXC8kLztcclxudmFyIGFic29sdXRlVXJsID0gL14oW2Etel1bYS16MC05K1xcLS5dKjopP1xcL1xcLy9pO1xyXG5mdW5jdGlvbiB1cGRhdGVIYXNoKCRsb2NhdGlvbiwgZnJhZ21lbnQsIHJlcGxhY2UpIHtcclxuICAgIGlmIChyZXBsYWNlKSB7XHJcbiAgICAgICAgdmFyIGhyZWYgPSAkbG9jYXRpb24uaHJlZi5yZXBsYWNlKC8oamF2YXNjcmlwdDp8IykuKiQvLCAnJyk7XHJcbiAgICAgICAgJGxvY2F0aW9uLnJlcGxhY2UoaHJlZiArICcjJyArIGZyYWdtZW50KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgICRsb2NhdGlvbi5oYXNoID0gJyMnICsgZnJhZ21lbnQ7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlT3JpZ2luKHByb3RvY29sLCBob3N0bmFtZSwgcG9ydCkge1xyXG4gICAgcmV0dXJuIHByb3RvY29sICsgXCIvL1wiICsgaG9zdG5hbWUgKyAocG9ydCA/ICc6JyArIHBvcnQgOiAnJyk7XHJcbn1cblxuZnVuY3Rpb24gY29uZmlndXJlKGNvbmZpZykge1xyXG4gICAgdmFyICRjb25maWcgPSBjb25maWc7XHJcbiAgICAkY29uZmlnLnNpbmdsZXRvbihIaXN0b3J5LCBCcm93c2VySGlzdG9yeSk7XHJcbiAgICAkY29uZmlnLnRyYW5zaWVudChMaW5rSGFuZGxlciwgRGVmYXVsdExpbmtIYW5kbGVyKTtcclxufVxuXG5leHBvcnQgeyBCcm93c2VySGlzdG9yeSwgRGVmYXVsdExpbmtIYW5kbGVyLCBMaW5rSGFuZGxlciwgY29uZmlndXJlIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hdXJlbGlhLWhpc3RvcnktYnJvd3Nlci5qcy5tYXBcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///aurelia-history-browser\n")},"aurelia-i18n":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n\n// EXTERNAL MODULE: ./node_modules/aurelia-logging/dist/native-modules/aurelia-logging.js\nvar aurelia_logging = __webpack_require__(5);\n\n// EXTERNAL MODULE: ./node_modules/aurelia-event-aggregator/dist/native-modules/aurelia-event-aggregator.js\nvar aurelia_event_aggregator = __webpack_require__("aurelia-event-aggregator");\n\n// EXTERNAL MODULE: ./node_modules/aurelia-templating/dist/native-modules/aurelia-templating.js\nvar aurelia_templating = __webpack_require__(3);\n\n// EXTERNAL MODULE: ./node_modules/aurelia-loader/dist/native-modules/aurelia-loader.js\nvar aurelia_loader = __webpack_require__(8);\n\n// EXTERNAL MODULE: ./node_modules/aurelia-templating-resources/dist/native-modules/aurelia-templating-resources.js\nvar aurelia_templating_resources = __webpack_require__("aurelia-templating-resources");\n\n// EXTERNAL MODULE: ./node_modules/aurelia-pal/dist/native-modules/aurelia-pal.js\nvar aurelia_pal = __webpack_require__(0);\n\n// EXTERNAL MODULE: ./node_modules/aurelia-i18n/dist/native-modules/i18n.js + 13 modules\nvar i18n = __webpack_require__(9);\n\n// EXTERNAL MODULE: ./node_modules/aurelia-i18n/dist/native-modules/relativeTime.js + 1 modules\nvar relativeTime = __webpack_require__(16);\n\n// EXTERNAL MODULE: ./node_modules/aurelia-i18n/dist/native-modules/df.js\nvar df = __webpack_require__("aurelia-i18n/df");\n\n// EXTERNAL MODULE: ./node_modules/aurelia-i18n/dist/native-modules/nf.js\nvar nf = __webpack_require__("aurelia-i18n/nf");\n\n// EXTERNAL MODULE: ./node_modules/aurelia-i18n/dist/native-modules/rt.js\nvar rt = __webpack_require__("aurelia-i18n/rt");\n\n// EXTERNAL MODULE: ./node_modules/aurelia-i18n/dist/native-modules/t.js\nvar t = __webpack_require__("aurelia-i18n/t");\n\n// CONCATENATED MODULE: ./node_modules/aurelia-i18n/dist/native-modules/base-i18n.js\n\n\n\n\n\n\nvar base_i18n_BaseI18N = function () {\n  BaseI18N.inject = function inject() {\n    return [i18n["a" /* I18N */], aurelia_pal["b" /* DOM */].Element, aurelia_event_aggregator["EventAggregator"]];\n  };\n\n  function BaseI18N(i18n, element, ea) {\n    var _this = this;\n\n    \n\n    this.i18n = i18n;\n    this.element = element;\n\n    this.__i18nDisposer = ea.subscribe(\'i18n:locale:changed\', function () {\n      _this.i18n.updateTranslations(_this.element);\n    });\n  }\n\n  BaseI18N.prototype.attached = function attached() {\n    this.i18n.updateTranslations(this.element);\n  };\n\n  BaseI18N.prototype.detached = function detached() {\n    this.__i18nDisposer.dispose();\n  };\n\n  return BaseI18N;\n}();\n// CONCATENATED MODULE: ./node_modules/aurelia-i18n/dist/native-modules/aurelia-i18n-loader.js\nvar _class, _temp;\n\n\n\nvar Backend = (_temp = _class = function () {\n  Backend.with = function _with(loader) {\n    this.loader = loader;\n    return this;\n  };\n\n  function Backend(services) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    \n\n    this.init(services, options);\n    this.type = \'backend\';\n  }\n\n  Backend.prototype.init = function init(services) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    this.services = services;\n    this.options = defaults(options, this.options || {}, getDefaults());\n  };\n\n  Backend.prototype.readMulti = function readMulti(languages, namespaces, callback) {\n    var loadPath = this.options.loadPath;\n\n    if (typeof this.options.loadPath === \'function\') {\n      loadPath = this.options.loadPath(languages, namespaces);\n    }\n\n    var url = this.services.interpolator.interpolate(loadPath, { lng: languages.join(\'+\'), ns: namespaces.join(\'+\') });\n\n    this.loadUrl(url, callback);\n  };\n\n  Backend.prototype.read = function read(language, namespace, callback) {\n    var loadPath = this.options.loadPath;\n\n    if (typeof this.options.loadPath === \'function\') {\n      loadPath = this.options.loadPath([language], [namespace]);\n    }\n\n    var url = this.services.interpolator.interpolate(loadPath, { lng: language, ns: namespace });\n\n    this.loadUrl(url, callback);\n  };\n\n  Backend.prototype.loadUrl = function loadUrl(url, callback) {\n    var _this = this;\n\n    this.constructor.loader.loadText(url).then(function (response) {\n      var ret = void 0;\n      var err = void 0;\n      try {\n        ret = response instanceof Object ? response : _this.options.parse(response, url);\n      } catch (e) {\n        err = \'failed parsing \' + url + \' to json\';\n      }\n      if (err) return callback(err, false);\n      callback(null, ret);\n    }, function (response) {\n      return callback(\'failed loading \' + url, false);\n    });\n  };\n\n  Backend.prototype.create = function create(languages, namespace, key, fallbackValue) {};\n\n  return Backend;\n}(), _class.loader = null, _temp);\n\nBackend.type = \'backend\';\n/* harmony default export */ var aurelia_i18n_loader = (Backend);\n\nvar arr = [];\nvar each = arr.forEach;\nvar slice = arr.slice;\n\nfunction getDefaults() {\n  return {\n    loadPath: \'/locales/{{lng}}/{{ns}}.json\',\n    addPath: \'locales/add/{{lng}}/{{ns}}\',\n    allowMultiLoading: false,\n    parse: JSON.parse\n  };\n}\n\nfunction defaults(obj) {\n  each.call(slice.call(arguments, 1), function (source) {\n    if (source) {\n      for (var prop in source) {\n        if (obj[prop] === undefined) obj[prop] = source[prop];\n      }\n    }\n  });\n  return obj;\n}\n// CONCATENATED MODULE: ./node_modules/aurelia-i18n/dist/native-modules/aurelia-i18n.js\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "configure", function() { return configure; });\n/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "I18N", function() { return i18n["a" /* I18N */]; });\n/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "RelativeTime", function() { return relativeTime["a" /* RelativeTime */]; });\n/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "DfValueConverter", function() { return df["DfValueConverter"]; });\n/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "DfBindingBehavior", function() { return df["DfBindingBehavior"]; });\n/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "NfValueConverter", function() { return nf["NfValueConverter"]; });\n/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "NfBindingBehavior", function() { return nf["NfBindingBehavior"]; });\n/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "RtValueConverter", function() { return rt["RtValueConverter"]; });\n/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "RtBindingBehavior", function() { return rt["RtBindingBehavior"]; });\n/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "TValueConverter", function() { return t["TValueConverter"]; });\n/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "TBindingBehavior", function() { return t["TBindingBehavior"]; });\n/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "TCustomAttribute", function() { return t["TCustomAttribute"]; });\n/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "TParamsCustomAttribute", function() { return t["TParamsCustomAttribute"]; });\n/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "BaseI18N", function() { return base_i18n_BaseI18N; });\n/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "EventAggregator", function() { return aurelia_event_aggregator["EventAggregator"]; });\n/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "Backend", function() { return Backend; });\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction registerI18N(frameworkConfig, cb) {\n  var instance = new i18n["a" /* I18N */](frameworkConfig.container.get(aurelia_event_aggregator["EventAggregator"]), frameworkConfig.container.get(aurelia_templating_resources["a" /* BindingSignaler */]));\n  frameworkConfig.container.registerInstance(i18n["a" /* I18N */], instance);\n\n  var ret = cb(instance);\n\n  frameworkConfig.postTask(function () {\n    var resources = frameworkConfig.container.get(aurelia_templating["M" /* ViewResources */]);\n    var htmlBehaviorResource = resources.getAttribute(\'t\');\n    var htmlParamsResource = resources.getAttribute(\'t-params\');\n    var attributes = instance.i18next.options.attributes;\n\n    if (!attributes) {\n      attributes = [\'t\', \'i18n\'];\n    }\n\n    attributes.forEach(function (alias) {\n      return resources.registerAttribute(alias, htmlBehaviorResource, \'t\');\n    });\n    attributes.forEach(function (alias) {\n      return resources.registerAttribute(alias + \'-params\', htmlParamsResource, \'t-params\');\n    });\n  });\n\n  return ret;\n}\n\nfunction configure(frameworkConfig, cb) {\n  if (cb === undefined || typeof cb !== \'function\') {\n    var errorMsg = \'You need to provide a callback method to properly configure the library\';\n    throw errorMsg;\n  }\n\n  frameworkConfig.globalResources(\'./t\');\n  frameworkConfig.globalResources(\'./nf\');\n  frameworkConfig.globalResources(\'./df\');\n  frameworkConfig.globalResources(\'./rt\');\n\n  if (aurelia_pal["d" /* PLATFORM */].global.Intl === undefined) {\n    var i18nLogger = aurelia_logging["getLogger"](\'i18n\');\n    i18nLogger.warn(\'Intl API is not available. Trying to load the polyfill.\');\n    var loader = frameworkConfig.container.get(aurelia_loader["a" /* Loader */]);\n    var normalizeErrorMessage = \'Failed to normalize {module} while loading the Intl polyfill.\';\n\n    return loader.normalize(\'aurelia-i18n\').then(function (i18nName) {\n      return loader.normalize(\'intl\', i18nName).then(function (intlName) {\n        return loader.loadModule(intlName).then(function (poly) {\n          aurelia_pal["d" /* PLATFORM */].global.Intl = poly;\n          return registerI18N(frameworkConfig, cb);\n        }, function () {\n          return i18nLogger.warn(\'Failed to load the Intl polyfill.\');\n        });\n      }, function () {\n        return i18nLogger.warn(normalizeErrorMessage.replace(\'{module}\', \'intl\'));\n      });\n    }, function () {\n      return i18nLogger.warn(normalizeErrorMessage.replace(\'{module}\', \'aurelia-i18n\'));\n    });\n  }\n\n  return Promise.resolve(registerI18N(frameworkConfig, cb));\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXVyZWxpYS1pMThuL2Rpc3QvbmF0aXZlLW1vZHVsZXMvYmFzZS1pMThuLmpzPzI2MmQiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F1cmVsaWEtaTE4bi9kaXN0L25hdGl2ZS1tb2R1bGVzL2F1cmVsaWEtaTE4bi1sb2FkZXIuanM/ZmUyZCIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXVyZWxpYS1pMThuL2Rpc3QvbmF0aXZlLW1vZHVsZXMvYXVyZWxpYS1pMThuLmpzPzI5NmIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFOEI7QUFDSTtBQUN5Qjs7QUFFcEQsSUFBSSxrQkFBUTtBQUNuQjtBQUNBLFlBQVksb0JBQUksRUFBRSwwQkFBRyxVQUFVLDJDQUFlO0FBQzlDOztBQUVBO0FBQ0E7Ozs7QUFJQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUMsRzs7QUNqQ0Q7Ozs7QUFJTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHVEQUF1RDtBQUN2RDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxnRUFBZ0UscURBQXFEOztBQUVySDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGdFQUFnRSwrQkFBK0I7O0FBRS9GO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMOztBQUVBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNlLCtEQUFPLEVBQUM7O0FBRXZCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMEJBQTBCLEtBQUssR0FBRyxJQUFJO0FBQ3RDLDRCQUE0QixLQUFLLEdBQUcsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEM7O0FDbEdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQThDO0FBQ2E7QUFDUjtBQUNYO0FBQ3VCO0FBQ3hCOztBQUVUO0FBQ2dCO0FBQ2E7QUFDQTtBQUNBO0FBQ3VDO0FBQzNEO0FBQ1M7O0FBRWhEO0FBQ0EscUJBQXFCLG9CQUFJLCtCQUErQiwyQ0FBZSxpQ0FBaUMsdURBQWU7QUFDdkgsNkNBQTZDLG9CQUFJOztBQUVqRDs7QUFFQTtBQUNBLGtEQUFrRCwyQ0FBYTtBQUMvRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQ0FBa0MsS0FBMEI7QUFDNUQsa0NBQWtDLE1BQTJCO0FBQzdELGtDQUFrQyxNQUEyQjtBQUM3RCxrQ0FBa0MsTUFBMkI7O0FBRTdELE1BQU0sK0JBQVE7QUFDZCxxQkFBcUIsNEJBQW9CO0FBQ3pDO0FBQ0EsK0NBQStDLGdDQUFNO0FBQ3JELHNEQUFzRCxPQUFPOztBQUU3RDtBQUNBO0FBQ0E7QUFDQSxVQUFVLCtCQUFRO0FBQ2xCO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUCwrREFBK0QsT0FBTztBQUN0RSxPQUFPO0FBQ1AsS0FBSztBQUNMLDZEQUE2RCxPQUFPO0FBQ3BFLEtBQUs7QUFDTDs7QUFFQTtBQUNBIiwiZmlsZSI6ImF1cmVsaWEtaTE4bi5qcyIsInNvdXJjZXNDb250ZW50IjpbIlxuXG5pbXBvcnQgeyBJMThOIH0gZnJvbSAnLi9pMThuJztcbmltcG9ydCB7IERPTSB9IGZyb20gJ2F1cmVsaWEtcGFsJztcbmltcG9ydCB7IEV2ZW50QWdncmVnYXRvciB9IGZyb20gJ2F1cmVsaWEtZXZlbnQtYWdncmVnYXRvcic7XG5cbmV4cG9ydCB2YXIgQmFzZUkxOE4gPSBmdW5jdGlvbiAoKSB7XG4gIEJhc2VJMThOLmluamVjdCA9IGZ1bmN0aW9uIGluamVjdCgpIHtcbiAgICByZXR1cm4gW0kxOE4sIERPTS5FbGVtZW50LCBFdmVudEFnZ3JlZ2F0b3JdO1xuICB9O1xuXG4gIGZ1bmN0aW9uIEJhc2VJMThOKGkxOG4sIGVsZW1lbnQsIGVhKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIFxuXG4gICAgdGhpcy5pMThuID0gaTE4bjtcbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuXG4gICAgdGhpcy5fX2kxOG5EaXNwb3NlciA9IGVhLnN1YnNjcmliZSgnaTE4bjpsb2NhbGU6Y2hhbmdlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLmkxOG4udXBkYXRlVHJhbnNsYXRpb25zKF90aGlzLmVsZW1lbnQpO1xuICAgIH0pO1xuICB9XG5cbiAgQmFzZUkxOE4ucHJvdG90eXBlLmF0dGFjaGVkID0gZnVuY3Rpb24gYXR0YWNoZWQoKSB7XG4gICAgdGhpcy5pMThuLnVwZGF0ZVRyYW5zbGF0aW9ucyh0aGlzLmVsZW1lbnQpO1xuICB9O1xuXG4gIEJhc2VJMThOLnByb3RvdHlwZS5kZXRhY2hlZCA9IGZ1bmN0aW9uIGRldGFjaGVkKCkge1xuICAgIHRoaXMuX19pMThuRGlzcG9zZXIuZGlzcG9zZSgpO1xuICB9O1xuXG4gIHJldHVybiBCYXNlSTE4Tjtcbn0oKTsiLCJ2YXIgX2NsYXNzLCBfdGVtcDtcblxuXG5cbmV4cG9ydCB2YXIgQmFja2VuZCA9IChfdGVtcCA9IF9jbGFzcyA9IGZ1bmN0aW9uICgpIHtcbiAgQmFja2VuZC53aXRoID0gZnVuY3Rpb24gX3dpdGgobG9hZGVyKSB7XG4gICAgdGhpcy5sb2FkZXIgPSBsb2FkZXI7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgZnVuY3Rpb24gQmFja2VuZChzZXJ2aWNlcykge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICAgIFxuXG4gICAgdGhpcy5pbml0KHNlcnZpY2VzLCBvcHRpb25zKTtcbiAgICB0aGlzLnR5cGUgPSAnYmFja2VuZCc7XG4gIH1cblxuICBCYWNrZW5kLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gaW5pdChzZXJ2aWNlcykge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICAgIHRoaXMuc2VydmljZXMgPSBzZXJ2aWNlcztcbiAgICB0aGlzLm9wdGlvbnMgPSBkZWZhdWx0cyhvcHRpb25zLCB0aGlzLm9wdGlvbnMgfHwge30sIGdldERlZmF1bHRzKCkpO1xuICB9O1xuXG4gIEJhY2tlbmQucHJvdG90eXBlLnJlYWRNdWx0aSA9IGZ1bmN0aW9uIHJlYWRNdWx0aShsYW5ndWFnZXMsIG5hbWVzcGFjZXMsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGxvYWRQYXRoID0gdGhpcy5vcHRpb25zLmxvYWRQYXRoO1xuXG4gICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMubG9hZFBhdGggPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGxvYWRQYXRoID0gdGhpcy5vcHRpb25zLmxvYWRQYXRoKGxhbmd1YWdlcywgbmFtZXNwYWNlcyk7XG4gICAgfVxuXG4gICAgdmFyIHVybCA9IHRoaXMuc2VydmljZXMuaW50ZXJwb2xhdG9yLmludGVycG9sYXRlKGxvYWRQYXRoLCB7IGxuZzogbGFuZ3VhZ2VzLmpvaW4oJysnKSwgbnM6IG5hbWVzcGFjZXMuam9pbignKycpIH0pO1xuXG4gICAgdGhpcy5sb2FkVXJsKHVybCwgY2FsbGJhY2spO1xuICB9O1xuXG4gIEJhY2tlbmQucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbiByZWFkKGxhbmd1YWdlLCBuYW1lc3BhY2UsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGxvYWRQYXRoID0gdGhpcy5vcHRpb25zLmxvYWRQYXRoO1xuXG4gICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMubG9hZFBhdGggPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGxvYWRQYXRoID0gdGhpcy5vcHRpb25zLmxvYWRQYXRoKFtsYW5ndWFnZV0sIFtuYW1lc3BhY2VdKTtcbiAgICB9XG5cbiAgICB2YXIgdXJsID0gdGhpcy5zZXJ2aWNlcy5pbnRlcnBvbGF0b3IuaW50ZXJwb2xhdGUobG9hZFBhdGgsIHsgbG5nOiBsYW5ndWFnZSwgbnM6IG5hbWVzcGFjZSB9KTtcblxuICAgIHRoaXMubG9hZFVybCh1cmwsIGNhbGxiYWNrKTtcbiAgfTtcblxuICBCYWNrZW5kLnByb3RvdHlwZS5sb2FkVXJsID0gZnVuY3Rpb24gbG9hZFVybCh1cmwsIGNhbGxiYWNrKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuY29uc3RydWN0b3IubG9hZGVyLmxvYWRUZXh0KHVybCkudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIHZhciByZXQgPSB2b2lkIDA7XG4gICAgICB2YXIgZXJyID0gdm9pZCAwO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0ID0gcmVzcG9uc2UgaW5zdGFuY2VvZiBPYmplY3QgPyByZXNwb25zZSA6IF90aGlzLm9wdGlvbnMucGFyc2UocmVzcG9uc2UsIHVybCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGVyciA9ICdmYWlsZWQgcGFyc2luZyAnICsgdXJsICsgJyB0byBqc29uJztcbiAgICAgIH1cbiAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIsIGZhbHNlKTtcbiAgICAgIGNhbGxiYWNrKG51bGwsIHJldCk7XG4gICAgfSwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2soJ2ZhaWxlZCBsb2FkaW5nICcgKyB1cmwsIGZhbHNlKTtcbiAgICB9KTtcbiAgfTtcblxuICBCYWNrZW5kLnByb3RvdHlwZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUobGFuZ3VhZ2VzLCBuYW1lc3BhY2UsIGtleSwgZmFsbGJhY2tWYWx1ZSkge307XG5cbiAgcmV0dXJuIEJhY2tlbmQ7XG59KCksIF9jbGFzcy5sb2FkZXIgPSBudWxsLCBfdGVtcCk7XG5cbkJhY2tlbmQudHlwZSA9ICdiYWNrZW5kJztcbmV4cG9ydCBkZWZhdWx0IEJhY2tlbmQ7XG5cbnZhciBhcnIgPSBbXTtcbnZhciBlYWNoID0gYXJyLmZvckVhY2g7XG52YXIgc2xpY2UgPSBhcnIuc2xpY2U7XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRzKCkge1xuICByZXR1cm4ge1xuICAgIGxvYWRQYXRoOiAnL2xvY2FsZXMve3tsbmd9fS97e25zfX0uanNvbicsXG4gICAgYWRkUGF0aDogJ2xvY2FsZXMvYWRkL3t7bG5nfX0ve3tuc319JyxcbiAgICBhbGxvd011bHRpTG9hZGluZzogZmFsc2UsXG4gICAgcGFyc2U6IEpTT04ucGFyc2VcbiAgfTtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdHMob2JqKSB7XG4gIGVhY2guY2FsbChzbGljZS5jYWxsKGFyZ3VtZW50cywgMSksIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICBpZiAoc291cmNlKSB7XG4gICAgICBmb3IgKHZhciBwcm9wIGluIHNvdXJjZSkge1xuICAgICAgICBpZiAob2JqW3Byb3BdID09PSB1bmRlZmluZWQpIG9ialtwcm9wXSA9IHNvdXJjZVtwcm9wXTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4gb2JqO1xufSIsImltcG9ydCAqIGFzIExvZ01hbmFnZXIgZnJvbSAnYXVyZWxpYS1sb2dnaW5nJztcbmltcG9ydCB7IEV2ZW50QWdncmVnYXRvciB9IGZyb20gJ2F1cmVsaWEtZXZlbnQtYWdncmVnYXRvcic7XG5pbXBvcnQgeyBWaWV3UmVzb3VyY2VzIH0gZnJvbSAnYXVyZWxpYS10ZW1wbGF0aW5nJztcbmltcG9ydCB7IExvYWRlciB9IGZyb20gJ2F1cmVsaWEtbG9hZGVyJztcbmltcG9ydCB7IEJpbmRpbmdTaWduYWxlciB9IGZyb20gJ2F1cmVsaWEtdGVtcGxhdGluZy1yZXNvdXJjZXMnO1xuaW1wb3J0IHsgUExBVEZPUk0gfSBmcm9tICdhdXJlbGlhLXBhbCc7XG5cbmltcG9ydCB7IEkxOE4gfSBmcm9tICcuL2kxOG4nO1xuaW1wb3J0IHsgUmVsYXRpdmVUaW1lIH0gZnJvbSAnLi9yZWxhdGl2ZVRpbWUnO1xuaW1wb3J0IHsgRGZWYWx1ZUNvbnZlcnRlciwgRGZCaW5kaW5nQmVoYXZpb3IgfSBmcm9tICcuL2RmJztcbmltcG9ydCB7IE5mVmFsdWVDb252ZXJ0ZXIsIE5mQmluZGluZ0JlaGF2aW9yIH0gZnJvbSAnLi9uZic7XG5pbXBvcnQgeyBSdFZhbHVlQ29udmVydGVyLCBSdEJpbmRpbmdCZWhhdmlvciB9IGZyb20gJy4vcnQnO1xuaW1wb3J0IHsgVFZhbHVlQ29udmVydGVyLCBUQmluZGluZ0JlaGF2aW9yLCBUQ3VzdG9tQXR0cmlidXRlLCBUUGFyYW1zQ3VzdG9tQXR0cmlidXRlIH0gZnJvbSAnLi90JztcbmltcG9ydCB7IEJhc2VJMThOIH0gZnJvbSAnLi9iYXNlLWkxOG4nO1xuaW1wb3J0IHsgQmFja2VuZCB9IGZyb20gJy4vYXVyZWxpYS1pMThuLWxvYWRlcic7XG5cbmZ1bmN0aW9uIHJlZ2lzdGVySTE4TihmcmFtZXdvcmtDb25maWcsIGNiKSB7XG4gIHZhciBpbnN0YW5jZSA9IG5ldyBJMThOKGZyYW1ld29ya0NvbmZpZy5jb250YWluZXIuZ2V0KEV2ZW50QWdncmVnYXRvciksIGZyYW1ld29ya0NvbmZpZy5jb250YWluZXIuZ2V0KEJpbmRpbmdTaWduYWxlcikpO1xuICBmcmFtZXdvcmtDb25maWcuY29udGFpbmVyLnJlZ2lzdGVySW5zdGFuY2UoSTE4TiwgaW5zdGFuY2UpO1xuXG4gIHZhciByZXQgPSBjYihpbnN0YW5jZSk7XG5cbiAgZnJhbWV3b3JrQ29uZmlnLnBvc3RUYXNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVzb3VyY2VzID0gZnJhbWV3b3JrQ29uZmlnLmNvbnRhaW5lci5nZXQoVmlld1Jlc291cmNlcyk7XG4gICAgdmFyIGh0bWxCZWhhdmlvclJlc291cmNlID0gcmVzb3VyY2VzLmdldEF0dHJpYnV0ZSgndCcpO1xuICAgIHZhciBodG1sUGFyYW1zUmVzb3VyY2UgPSByZXNvdXJjZXMuZ2V0QXR0cmlidXRlKCd0LXBhcmFtcycpO1xuICAgIHZhciBhdHRyaWJ1dGVzID0gaW5zdGFuY2UuaTE4bmV4dC5vcHRpb25zLmF0dHJpYnV0ZXM7XG5cbiAgICBpZiAoIWF0dHJpYnV0ZXMpIHtcbiAgICAgIGF0dHJpYnV0ZXMgPSBbJ3QnLCAnaTE4biddO1xuICAgIH1cblxuICAgIGF0dHJpYnV0ZXMuZm9yRWFjaChmdW5jdGlvbiAoYWxpYXMpIHtcbiAgICAgIHJldHVybiByZXNvdXJjZXMucmVnaXN0ZXJBdHRyaWJ1dGUoYWxpYXMsIGh0bWxCZWhhdmlvclJlc291cmNlLCAndCcpO1xuICAgIH0pO1xuICAgIGF0dHJpYnV0ZXMuZm9yRWFjaChmdW5jdGlvbiAoYWxpYXMpIHtcbiAgICAgIHJldHVybiByZXNvdXJjZXMucmVnaXN0ZXJBdHRyaWJ1dGUoYWxpYXMgKyAnLXBhcmFtcycsIGh0bWxQYXJhbXNSZXNvdXJjZSwgJ3QtcGFyYW1zJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGNvbmZpZ3VyZShmcmFtZXdvcmtDb25maWcsIGNiKSB7XG4gIGlmIChjYiA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBjYiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBlcnJvck1zZyA9ICdZb3UgbmVlZCB0byBwcm92aWRlIGEgY2FsbGJhY2sgbWV0aG9kIHRvIHByb3Blcmx5IGNvbmZpZ3VyZSB0aGUgbGlicmFyeSc7XG4gICAgdGhyb3cgZXJyb3JNc2c7XG4gIH1cblxuICBmcmFtZXdvcmtDb25maWcuZ2xvYmFsUmVzb3VyY2VzKFBMQVRGT1JNLm1vZHVsZU5hbWUoJy4vdCcpKTtcbiAgZnJhbWV3b3JrQ29uZmlnLmdsb2JhbFJlc291cmNlcyhQTEFURk9STS5tb2R1bGVOYW1lKCcuL25mJykpO1xuICBmcmFtZXdvcmtDb25maWcuZ2xvYmFsUmVzb3VyY2VzKFBMQVRGT1JNLm1vZHVsZU5hbWUoJy4vZGYnKSk7XG4gIGZyYW1ld29ya0NvbmZpZy5nbG9iYWxSZXNvdXJjZXMoUExBVEZPUk0ubW9kdWxlTmFtZSgnLi9ydCcpKTtcblxuICBpZiAoUExBVEZPUk0uZ2xvYmFsLkludGwgPT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBpMThuTG9nZ2VyID0gTG9nTWFuYWdlci5nZXRMb2dnZXIoJ2kxOG4nKTtcbiAgICBpMThuTG9nZ2VyLndhcm4oJ0ludGwgQVBJIGlzIG5vdCBhdmFpbGFibGUuIFRyeWluZyB0byBsb2FkIHRoZSBwb2x5ZmlsbC4nKTtcbiAgICB2YXIgbG9hZGVyID0gZnJhbWV3b3JrQ29uZmlnLmNvbnRhaW5lci5nZXQoTG9hZGVyKTtcbiAgICB2YXIgbm9ybWFsaXplRXJyb3JNZXNzYWdlID0gJ0ZhaWxlZCB0byBub3JtYWxpemUge21vZHVsZX0gd2hpbGUgbG9hZGluZyB0aGUgSW50bCBwb2x5ZmlsbC4nO1xuXG4gICAgcmV0dXJuIGxvYWRlci5ub3JtYWxpemUoJ2F1cmVsaWEtaTE4bicpLnRoZW4oZnVuY3Rpb24gKGkxOG5OYW1lKSB7XG4gICAgICByZXR1cm4gbG9hZGVyLm5vcm1hbGl6ZSgnaW50bCcsIGkxOG5OYW1lKS50aGVuKGZ1bmN0aW9uIChpbnRsTmFtZSkge1xuICAgICAgICByZXR1cm4gbG9hZGVyLmxvYWRNb2R1bGUoaW50bE5hbWUpLnRoZW4oZnVuY3Rpb24gKHBvbHkpIHtcbiAgICAgICAgICBQTEFURk9STS5nbG9iYWwuSW50bCA9IHBvbHk7XG4gICAgICAgICAgcmV0dXJuIHJlZ2lzdGVySTE4TihmcmFtZXdvcmtDb25maWcsIGNiKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBpMThuTG9nZ2VyLndhcm4oJ0ZhaWxlZCB0byBsb2FkIHRoZSBJbnRsIHBvbHlmaWxsLicpO1xuICAgICAgICB9KTtcbiAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGkxOG5Mb2dnZXIud2Fybihub3JtYWxpemVFcnJvck1lc3NhZ2UucmVwbGFjZSgne21vZHVsZX0nLCAnaW50bCcpKTtcbiAgICAgIH0pO1xuICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBpMThuTG9nZ2VyLndhcm4obm9ybWFsaXplRXJyb3JNZXNzYWdlLnJlcGxhY2UoJ3ttb2R1bGV9JywgJ2F1cmVsaWEtaTE4bicpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVnaXN0ZXJJMThOKGZyYW1ld29ya0NvbmZpZywgY2IpKTtcbn1cblxuZXhwb3J0IHsgY29uZmlndXJlLCBJMThOLCBSZWxhdGl2ZVRpbWUsIERmVmFsdWVDb252ZXJ0ZXIsIERmQmluZGluZ0JlaGF2aW9yLCBOZlZhbHVlQ29udmVydGVyLCBOZkJpbmRpbmdCZWhhdmlvciwgUnRWYWx1ZUNvbnZlcnRlciwgUnRCaW5kaW5nQmVoYXZpb3IsIFRWYWx1ZUNvbnZlcnRlciwgVEJpbmRpbmdCZWhhdmlvciwgVEN1c3RvbUF0dHJpYnV0ZSwgVFBhcmFtc0N1c3RvbUF0dHJpYnV0ZSwgQmFzZUkxOE4sIEV2ZW50QWdncmVnYXRvciwgQmFja2VuZCB9OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///aurelia-i18n\n')},"aurelia-i18n/df":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DfValueConverter\", function() { return DfValueConverter; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DfBindingBehavior\", function() { return DfBindingBehavior; });\n/* harmony import */ var aurelia_logging__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5);\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9);\n/* harmony import */ var aurelia_templating_resources__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\"aurelia-templating-resources\");\n/* harmony import */ var aurelia_binding__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1);\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(17);\n\n\n\n\n\n\n\n\nvar DfValueConverter = function () {\n  DfValueConverter.inject = function inject() {\n    return [_i18n__WEBPACK_IMPORTED_MODULE_1__[/* I18N */ \"a\"]];\n  };\n\n  function DfValueConverter(i18n) {\n    \n\n    this.service = i18n;\n  }\n\n  DfValueConverter.prototype.toView = function toView(value, dfOrOptions, locale, df) {\n    if (value === null || typeof value === 'undefined' || typeof value === 'string' && value.trim() === '') {\n      return value;\n    }\n\n    if (dfOrOptions && typeof dfOrOptions.format === 'function') {\n      return dfOrOptions.format(value);\n    } else if (df) {\n      var i18nLogger = aurelia_logging__WEBPACK_IMPORTED_MODULE_0__[\"getLogger\"]('i18n');\n      i18nLogger.warn('This ValueConverter signature is depcrecated and will be removed in future releases. Please use the signature [dfOrOptions, locale]');\n    } else {\n      df = this.service.df(dfOrOptions, locale || this.service.getLocale());\n    }\n\n    if (typeof value === 'string' && isNaN(value) && !Object(_utils__WEBPACK_IMPORTED_MODULE_4__[/* isInteger */ \"b\"])(value)) {\n      value = new Date(value);\n    }\n\n    return df.format(value);\n  };\n\n  return DfValueConverter;\n}();\n\nvar DfBindingBehavior = function () {\n  DfBindingBehavior.inject = function inject() {\n    return [aurelia_templating_resources__WEBPACK_IMPORTED_MODULE_2__[/* SignalBindingBehavior */ \"b\"]];\n  };\n\n  function DfBindingBehavior(signalBindingBehavior) {\n    \n\n    this.signalBindingBehavior = signalBindingBehavior;\n  }\n\n  DfBindingBehavior.prototype.bind = function bind(binding, source) {\n    this.signalBindingBehavior.bind(binding, source, 'aurelia-translation-signal');\n\n    var sourceExpression = binding.sourceExpression;\n\n    if (sourceExpression.rewritten) {\n      return;\n    }\n    sourceExpression.rewritten = true;\n\n    var expression = sourceExpression.expression;\n    sourceExpression.expression = new aurelia_binding__WEBPACK_IMPORTED_MODULE_3__[\"ValueConverter\"](expression, 'df', sourceExpression.args, [expression].concat(sourceExpression.args));\n  };\n\n  DfBindingBehavior.prototype.unbind = function unbind(binding, source) {\n    this.signalBindingBehavior.unbind(binding, source);\n  };\n\n  return DfBindingBehavior;\n}();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXVyZWxpYS1pMThuL2Rpc3QvbmF0aXZlLW1vZHVsZXMvZGYuanM/ODkzYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBRThDO0FBQ2hCO0FBQ3VDO0FBQ3BCO0FBQ2I7O0FBRTdCO0FBQ1A7QUFDQSxZQUFZLGtEQUFJO0FBQ2hCOztBQUVBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsdUJBQXVCLHlEQUFvQjtBQUMzQztBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBLHNEQUFzRCxnRUFBUztBQUMvRDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVNO0FBQ1A7QUFDQSxZQUFZLDBGQUFxQjtBQUNqQzs7QUFFQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esc0NBQXNDLDhEQUFjO0FBQ3BEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUMiLCJmaWxlIjoiYXVyZWxpYS1pMThuL2RmLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXG5cbmltcG9ydCAqIGFzIExvZ01hbmFnZXIgZnJvbSAnYXVyZWxpYS1sb2dnaW5nJztcbmltcG9ydCB7IEkxOE4gfSBmcm9tICcuL2kxOG4nO1xuaW1wb3J0IHsgU2lnbmFsQmluZGluZ0JlaGF2aW9yIH0gZnJvbSAnYXVyZWxpYS10ZW1wbGF0aW5nLXJlc291cmNlcyc7XG5pbXBvcnQgeyBWYWx1ZUNvbnZlcnRlciB9IGZyb20gJ2F1cmVsaWEtYmluZGluZyc7XG5pbXBvcnQgeyBpc0ludGVnZXIgfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IHZhciBEZlZhbHVlQ29udmVydGVyID0gZnVuY3Rpb24gKCkge1xuICBEZlZhbHVlQ29udmVydGVyLmluamVjdCA9IGZ1bmN0aW9uIGluamVjdCgpIHtcbiAgICByZXR1cm4gW0kxOE5dO1xuICB9O1xuXG4gIGZ1bmN0aW9uIERmVmFsdWVDb252ZXJ0ZXIoaTE4bikge1xuICAgIFxuXG4gICAgdGhpcy5zZXJ2aWNlID0gaTE4bjtcbiAgfVxuXG4gIERmVmFsdWVDb252ZXJ0ZXIucHJvdG90eXBlLnRvVmlldyA9IGZ1bmN0aW9uIHRvVmlldyh2YWx1ZSwgZGZPck9wdGlvbnMsIGxvY2FsZSwgZGYpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAoZGZPck9wdGlvbnMgJiYgdHlwZW9mIGRmT3JPcHRpb25zLmZvcm1hdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIGRmT3JPcHRpb25zLmZvcm1hdCh2YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChkZikge1xuICAgICAgdmFyIGkxOG5Mb2dnZXIgPSBMb2dNYW5hZ2VyLmdldExvZ2dlcignaTE4bicpO1xuICAgICAgaTE4bkxvZ2dlci53YXJuKCdUaGlzIFZhbHVlQ29udmVydGVyIHNpZ25hdHVyZSBpcyBkZXBjcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGZ1dHVyZSByZWxlYXNlcy4gUGxlYXNlIHVzZSB0aGUgc2lnbmF0dXJlIFtkZk9yT3B0aW9ucywgbG9jYWxlXScpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZiA9IHRoaXMuc2VydmljZS5kZihkZk9yT3B0aW9ucywgbG9jYWxlIHx8IHRoaXMuc2VydmljZS5nZXRMb2NhbGUoKSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgaXNOYU4odmFsdWUpICYmICFpc0ludGVnZXIodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGYuZm9ybWF0KHZhbHVlKTtcbiAgfTtcblxuICByZXR1cm4gRGZWYWx1ZUNvbnZlcnRlcjtcbn0oKTtcblxuZXhwb3J0IHZhciBEZkJpbmRpbmdCZWhhdmlvciA9IGZ1bmN0aW9uICgpIHtcbiAgRGZCaW5kaW5nQmVoYXZpb3IuaW5qZWN0ID0gZnVuY3Rpb24gaW5qZWN0KCkge1xuICAgIHJldHVybiBbU2lnbmFsQmluZGluZ0JlaGF2aW9yXTtcbiAgfTtcblxuICBmdW5jdGlvbiBEZkJpbmRpbmdCZWhhdmlvcihzaWduYWxCaW5kaW5nQmVoYXZpb3IpIHtcbiAgICBcblxuICAgIHRoaXMuc2lnbmFsQmluZGluZ0JlaGF2aW9yID0gc2lnbmFsQmluZGluZ0JlaGF2aW9yO1xuICB9XG5cbiAgRGZCaW5kaW5nQmVoYXZpb3IucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiBiaW5kKGJpbmRpbmcsIHNvdXJjZSkge1xuICAgIHRoaXMuc2lnbmFsQmluZGluZ0JlaGF2aW9yLmJpbmQoYmluZGluZywgc291cmNlLCAnYXVyZWxpYS10cmFuc2xhdGlvbi1zaWduYWwnKTtcblxuICAgIHZhciBzb3VyY2VFeHByZXNzaW9uID0gYmluZGluZy5zb3VyY2VFeHByZXNzaW9uO1xuXG4gICAgaWYgKHNvdXJjZUV4cHJlc3Npb24ucmV3cml0dGVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNvdXJjZUV4cHJlc3Npb24ucmV3cml0dGVuID0gdHJ1ZTtcblxuICAgIHZhciBleHByZXNzaW9uID0gc291cmNlRXhwcmVzc2lvbi5leHByZXNzaW9uO1xuICAgIHNvdXJjZUV4cHJlc3Npb24uZXhwcmVzc2lvbiA9IG5ldyBWYWx1ZUNvbnZlcnRlcihleHByZXNzaW9uLCAnZGYnLCBzb3VyY2VFeHByZXNzaW9uLmFyZ3MsIFtleHByZXNzaW9uXS5jb25jYXQoc291cmNlRXhwcmVzc2lvbi5hcmdzKSk7XG4gIH07XG5cbiAgRGZCaW5kaW5nQmVoYXZpb3IucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uIHVuYmluZChiaW5kaW5nLCBzb3VyY2UpIHtcbiAgICB0aGlzLnNpZ25hbEJpbmRpbmdCZWhhdmlvci51bmJpbmQoYmluZGluZywgc291cmNlKTtcbiAgfTtcblxuICByZXR1cm4gRGZCaW5kaW5nQmVoYXZpb3I7XG59KCk7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///aurelia-i18n/df\n")},"aurelia-i18n/nf":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NfValueConverter\", function() { return NfValueConverter; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NfBindingBehavior\", function() { return NfBindingBehavior; });\n/* harmony import */ var aurelia_logging__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5);\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9);\n/* harmony import */ var aurelia_templating_resources__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\"aurelia-templating-resources\");\n/* harmony import */ var aurelia_binding__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1);\n\n\n\n\n\n\n\nvar NfValueConverter = function () {\n  NfValueConverter.inject = function inject() {\n    return [_i18n__WEBPACK_IMPORTED_MODULE_1__[/* I18N */ \"a\"]];\n  };\n\n  function NfValueConverter(i18n) {\n    \n\n    this.service = i18n;\n  }\n\n  NfValueConverter.prototype.toView = function toView(value, nfOrOptions, locale, nf) {\n    if (value === null || typeof value === 'undefined' || typeof value === 'string' && value.trim() === '') {\n      return value;\n    }\n\n    if (nfOrOptions && typeof nfOrOptions.format === 'function') {\n      return nfOrOptions.format(value);\n    } else if (nf) {\n      var i18nLogger = aurelia_logging__WEBPACK_IMPORTED_MODULE_0__[\"getLogger\"]('i18n');\n      i18nLogger.warn('This ValueConverter signature is depcrecated and will be removed in future releases. Please use the signature [nfOrOptions, locale]');\n    } else {\n      nf = this.service.nf(nfOrOptions, locale || this.service.getLocale());\n    }\n\n    return nf.format(value);\n  };\n\n  return NfValueConverter;\n}();\n\nvar NfBindingBehavior = function () {\n  NfBindingBehavior.inject = function inject() {\n    return [aurelia_templating_resources__WEBPACK_IMPORTED_MODULE_2__[/* SignalBindingBehavior */ \"b\"]];\n  };\n\n  function NfBindingBehavior(signalBindingBehavior) {\n    \n\n    this.signalBindingBehavior = signalBindingBehavior;\n  }\n\n  NfBindingBehavior.prototype.bind = function bind(binding, source) {\n    this.signalBindingBehavior.bind(binding, source, 'aurelia-translation-signal');\n\n    var sourceExpression = binding.sourceExpression;\n\n    if (sourceExpression.rewritten) {\n      return;\n    }\n    sourceExpression.rewritten = true;\n\n    var expression = sourceExpression.expression;\n    sourceExpression.expression = new aurelia_binding__WEBPACK_IMPORTED_MODULE_3__[\"ValueConverter\"](expression, 'nf', sourceExpression.args, [expression].concat(sourceExpression.args));\n  };\n\n  NfBindingBehavior.prototype.unbind = function unbind(binding, source) {\n    this.signalBindingBehavior.unbind(binding, source);\n  };\n\n  return NfBindingBehavior;\n}();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXVyZWxpYS1pMThuL2Rpc3QvbmF0aXZlLW1vZHVsZXMvbmYuanM/YmI5ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFFOEM7QUFDaEI7QUFDdUM7QUFDcEI7O0FBRTFDO0FBQ1A7QUFDQSxZQUFZLGtEQUFJO0FBQ2hCOztBQUVBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsdUJBQXVCLHlEQUFvQjtBQUMzQztBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVNO0FBQ1A7QUFDQSxZQUFZLDBGQUFxQjtBQUNqQzs7QUFFQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esc0NBQXNDLDhEQUFjO0FBQ3BEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUMiLCJmaWxlIjoiYXVyZWxpYS1pMThuL25mLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXG5cbmltcG9ydCAqIGFzIExvZ01hbmFnZXIgZnJvbSAnYXVyZWxpYS1sb2dnaW5nJztcbmltcG9ydCB7IEkxOE4gfSBmcm9tICcuL2kxOG4nO1xuaW1wb3J0IHsgU2lnbmFsQmluZGluZ0JlaGF2aW9yIH0gZnJvbSAnYXVyZWxpYS10ZW1wbGF0aW5nLXJlc291cmNlcyc7XG5pbXBvcnQgeyBWYWx1ZUNvbnZlcnRlciB9IGZyb20gJ2F1cmVsaWEtYmluZGluZyc7XG5cbmV4cG9ydCB2YXIgTmZWYWx1ZUNvbnZlcnRlciA9IGZ1bmN0aW9uICgpIHtcbiAgTmZWYWx1ZUNvbnZlcnRlci5pbmplY3QgPSBmdW5jdGlvbiBpbmplY3QoKSB7XG4gICAgcmV0dXJuIFtJMThOXTtcbiAgfTtcblxuICBmdW5jdGlvbiBOZlZhbHVlQ29udmVydGVyKGkxOG4pIHtcbiAgICBcblxuICAgIHRoaXMuc2VydmljZSA9IGkxOG47XG4gIH1cblxuICBOZlZhbHVlQ29udmVydGVyLnByb3RvdHlwZS50b1ZpZXcgPSBmdW5jdGlvbiB0b1ZpZXcodmFsdWUsIG5mT3JPcHRpb25zLCBsb2NhbGUsIG5mKSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS50cmltKCkgPT09ICcnKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKG5mT3JPcHRpb25zICYmIHR5cGVvZiBuZk9yT3B0aW9ucy5mb3JtYXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBuZk9yT3B0aW9ucy5mb3JtYXQodmFsdWUpO1xuICAgIH0gZWxzZSBpZiAobmYpIHtcbiAgICAgIHZhciBpMThuTG9nZ2VyID0gTG9nTWFuYWdlci5nZXRMb2dnZXIoJ2kxOG4nKTtcbiAgICAgIGkxOG5Mb2dnZXIud2FybignVGhpcyBWYWx1ZUNvbnZlcnRlciBzaWduYXR1cmUgaXMgZGVwY3JlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgcmVsZWFzZXMuIFBsZWFzZSB1c2UgdGhlIHNpZ25hdHVyZSBbbmZPck9wdGlvbnMsIGxvY2FsZV0nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmYgPSB0aGlzLnNlcnZpY2UubmYobmZPck9wdGlvbnMsIGxvY2FsZSB8fCB0aGlzLnNlcnZpY2UuZ2V0TG9jYWxlKCkpO1xuICAgIH1cblxuICAgIHJldHVybiBuZi5mb3JtYXQodmFsdWUpO1xuICB9O1xuXG4gIHJldHVybiBOZlZhbHVlQ29udmVydGVyO1xufSgpO1xuXG5leHBvcnQgdmFyIE5mQmluZGluZ0JlaGF2aW9yID0gZnVuY3Rpb24gKCkge1xuICBOZkJpbmRpbmdCZWhhdmlvci5pbmplY3QgPSBmdW5jdGlvbiBpbmplY3QoKSB7XG4gICAgcmV0dXJuIFtTaWduYWxCaW5kaW5nQmVoYXZpb3JdO1xuICB9O1xuXG4gIGZ1bmN0aW9uIE5mQmluZGluZ0JlaGF2aW9yKHNpZ25hbEJpbmRpbmdCZWhhdmlvcikge1xuICAgIFxuXG4gICAgdGhpcy5zaWduYWxCaW5kaW5nQmVoYXZpb3IgPSBzaWduYWxCaW5kaW5nQmVoYXZpb3I7XG4gIH1cblxuICBOZkJpbmRpbmdCZWhhdmlvci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIGJpbmQoYmluZGluZywgc291cmNlKSB7XG4gICAgdGhpcy5zaWduYWxCaW5kaW5nQmVoYXZpb3IuYmluZChiaW5kaW5nLCBzb3VyY2UsICdhdXJlbGlhLXRyYW5zbGF0aW9uLXNpZ25hbCcpO1xuXG4gICAgdmFyIHNvdXJjZUV4cHJlc3Npb24gPSBiaW5kaW5nLnNvdXJjZUV4cHJlc3Npb247XG5cbiAgICBpZiAoc291cmNlRXhwcmVzc2lvbi5yZXdyaXR0ZW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc291cmNlRXhwcmVzc2lvbi5yZXdyaXR0ZW4gPSB0cnVlO1xuXG4gICAgdmFyIGV4cHJlc3Npb24gPSBzb3VyY2VFeHByZXNzaW9uLmV4cHJlc3Npb247XG4gICAgc291cmNlRXhwcmVzc2lvbi5leHByZXNzaW9uID0gbmV3IFZhbHVlQ29udmVydGVyKGV4cHJlc3Npb24sICduZicsIHNvdXJjZUV4cHJlc3Npb24uYXJncywgW2V4cHJlc3Npb25dLmNvbmNhdChzb3VyY2VFeHByZXNzaW9uLmFyZ3MpKTtcbiAgfTtcblxuICBOZkJpbmRpbmdCZWhhdmlvci5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24gdW5iaW5kKGJpbmRpbmcsIHNvdXJjZSkge1xuICAgIHRoaXMuc2lnbmFsQmluZGluZ0JlaGF2aW9yLnVuYmluZChiaW5kaW5nLCBzb3VyY2UpO1xuICB9O1xuXG4gIHJldHVybiBOZkJpbmRpbmdCZWhhdmlvcjtcbn0oKTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///aurelia-i18n/nf\n")},"aurelia-i18n/rt":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RtValueConverter\", function() { return RtValueConverter; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RtBindingBehavior\", function() { return RtBindingBehavior; });\n/* harmony import */ var _relativeTime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(16);\n/* harmony import */ var aurelia_templating_resources__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\"aurelia-templating-resources\");\n/* harmony import */ var aurelia_binding__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1);\n\n\n\n\n\n\nvar RtValueConverter = function () {\n  RtValueConverter.inject = function inject() {\n    return [_relativeTime__WEBPACK_IMPORTED_MODULE_0__[/* RelativeTime */ \"a\"]];\n  };\n\n  function RtValueConverter(relativeTime) {\n    \n\n    this.service = relativeTime;\n  }\n\n  RtValueConverter.prototype.toView = function toView(value) {\n    if (value === null || typeof value === 'undefined' || typeof value === 'string' && value.trim() === '') {\n      return value;\n    }\n\n    if (typeof value === 'string' && isNaN(value) && !Number.isInteger(value)) {\n      value = new Date(value);\n    }\n\n    return this.service.getRelativeTime(value);\n  };\n\n  return RtValueConverter;\n}();\n\nvar RtBindingBehavior = function () {\n  RtBindingBehavior.inject = function inject() {\n    return [aurelia_templating_resources__WEBPACK_IMPORTED_MODULE_1__[/* SignalBindingBehavior */ \"b\"]];\n  };\n\n  function RtBindingBehavior(signalBindingBehavior) {\n    \n\n    this.signalBindingBehavior = signalBindingBehavior;\n  }\n\n  RtBindingBehavior.prototype.bind = function bind(binding, source) {\n    this.signalBindingBehavior.bind(binding, source, 'aurelia-translation-signal', 'aurelia-relativetime-signal');\n\n    var sourceExpression = binding.sourceExpression;\n\n    if (sourceExpression.rewritten) {\n      return;\n    }\n    sourceExpression.rewritten = true;\n\n    var expression = sourceExpression.expression;\n    sourceExpression.expression = new aurelia_binding__WEBPACK_IMPORTED_MODULE_2__[\"ValueConverter\"](expression, 'rt', sourceExpression.args, [expression].concat(sourceExpression.args));\n  };\n\n  RtBindingBehavior.prototype.unbind = function unbind(binding, source) {\n    this.signalBindingBehavior.unbind(binding, source);\n  };\n\n  return RtBindingBehavior;\n}();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXVyZWxpYS1pMThuL2Rpc3QvbmF0aXZlLW1vZHVsZXMvcnQuanM/YjYyNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUU4QztBQUN1QjtBQUNwQjs7QUFFMUM7QUFDUDtBQUNBLFlBQVksa0VBQVk7QUFDeEI7O0FBRUE7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVNO0FBQ1A7QUFDQSxZQUFZLDBGQUFxQjtBQUNqQzs7QUFFQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esc0NBQXNDLDhEQUFjO0FBQ3BEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUMiLCJmaWxlIjoiYXVyZWxpYS1pMThuL3J0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiXG5cbmltcG9ydCB7IFJlbGF0aXZlVGltZSB9IGZyb20gJy4vcmVsYXRpdmVUaW1lJztcbmltcG9ydCB7IFNpZ25hbEJpbmRpbmdCZWhhdmlvciB9IGZyb20gJ2F1cmVsaWEtdGVtcGxhdGluZy1yZXNvdXJjZXMnO1xuaW1wb3J0IHsgVmFsdWVDb252ZXJ0ZXIgfSBmcm9tICdhdXJlbGlhLWJpbmRpbmcnO1xuXG5leHBvcnQgdmFyIFJ0VmFsdWVDb252ZXJ0ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIFJ0VmFsdWVDb252ZXJ0ZXIuaW5qZWN0ID0gZnVuY3Rpb24gaW5qZWN0KCkge1xuICAgIHJldHVybiBbUmVsYXRpdmVUaW1lXTtcbiAgfTtcblxuICBmdW5jdGlvbiBSdFZhbHVlQ29udmVydGVyKHJlbGF0aXZlVGltZSkge1xuICAgIFxuXG4gICAgdGhpcy5zZXJ2aWNlID0gcmVsYXRpdmVUaW1lO1xuICB9XG5cbiAgUnRWYWx1ZUNvbnZlcnRlci5wcm90b3R5cGUudG9WaWV3ID0gZnVuY3Rpb24gdG9WaWV3KHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS50cmltKCkgPT09ICcnKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgaXNOYU4odmFsdWUpICYmICFOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSkge1xuICAgICAgdmFsdWUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc2VydmljZS5nZXRSZWxhdGl2ZVRpbWUodmFsdWUpO1xuICB9O1xuXG4gIHJldHVybiBSdFZhbHVlQ29udmVydGVyO1xufSgpO1xuXG5leHBvcnQgdmFyIFJ0QmluZGluZ0JlaGF2aW9yID0gZnVuY3Rpb24gKCkge1xuICBSdEJpbmRpbmdCZWhhdmlvci5pbmplY3QgPSBmdW5jdGlvbiBpbmplY3QoKSB7XG4gICAgcmV0dXJuIFtTaWduYWxCaW5kaW5nQmVoYXZpb3JdO1xuICB9O1xuXG4gIGZ1bmN0aW9uIFJ0QmluZGluZ0JlaGF2aW9yKHNpZ25hbEJpbmRpbmdCZWhhdmlvcikge1xuICAgIFxuXG4gICAgdGhpcy5zaWduYWxCaW5kaW5nQmVoYXZpb3IgPSBzaWduYWxCaW5kaW5nQmVoYXZpb3I7XG4gIH1cblxuICBSdEJpbmRpbmdCZWhhdmlvci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIGJpbmQoYmluZGluZywgc291cmNlKSB7XG4gICAgdGhpcy5zaWduYWxCaW5kaW5nQmVoYXZpb3IuYmluZChiaW5kaW5nLCBzb3VyY2UsICdhdXJlbGlhLXRyYW5zbGF0aW9uLXNpZ25hbCcsICdhdXJlbGlhLXJlbGF0aXZldGltZS1zaWduYWwnKTtcblxuICAgIHZhciBzb3VyY2VFeHByZXNzaW9uID0gYmluZGluZy5zb3VyY2VFeHByZXNzaW9uO1xuXG4gICAgaWYgKHNvdXJjZUV4cHJlc3Npb24ucmV3cml0dGVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNvdXJjZUV4cHJlc3Npb24ucmV3cml0dGVuID0gdHJ1ZTtcblxuICAgIHZhciBleHByZXNzaW9uID0gc291cmNlRXhwcmVzc2lvbi5leHByZXNzaW9uO1xuICAgIHNvdXJjZUV4cHJlc3Npb24uZXhwcmVzc2lvbiA9IG5ldyBWYWx1ZUNvbnZlcnRlcihleHByZXNzaW9uLCAncnQnLCBzb3VyY2VFeHByZXNzaW9uLmFyZ3MsIFtleHByZXNzaW9uXS5jb25jYXQoc291cmNlRXhwcmVzc2lvbi5hcmdzKSk7XG4gIH07XG5cbiAgUnRCaW5kaW5nQmVoYXZpb3IucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uIHVuYmluZChiaW5kaW5nLCBzb3VyY2UpIHtcbiAgICB0aGlzLnNpZ25hbEJpbmRpbmdCZWhhdmlvci51bmJpbmQoYmluZGluZywgc291cmNlKTtcbiAgfTtcblxuICByZXR1cm4gUnRCaW5kaW5nQmVoYXZpb3I7XG59KCk7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///aurelia-i18n/rt\n")},"aurelia-i18n/t":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TValueConverter", function() { return TValueConverter; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TParamsCustomAttribute", function() { return TParamsCustomAttribute; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TCustomAttribute", function() { return TCustomAttribute; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TBindingBehavior", function() { return TBindingBehavior; });\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(9);\n/* harmony import */ var aurelia_event_aggregator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("aurelia-event-aggregator");\n/* harmony import */ var aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4);\n/* harmony import */ var aurelia_templating__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(3);\n/* harmony import */ var aurelia_templating_resources__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("aurelia-templating-resources");\n/* harmony import */ var aurelia_binding__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(1);\n/* harmony import */ var aurelia_pal__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(0);\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(17);\nvar _dec, _class, _dec2, _class2, _class3, _temp;\n\n\n\n\n\n\n\n\n\n\n\n\nvar TValueConverter = function () {\n  TValueConverter.inject = function inject() {\n    return [_i18n__WEBPACK_IMPORTED_MODULE_0__[/* I18N */ "a"]];\n  };\n\n  function TValueConverter(i18n) {\n    \n\n    this.service = i18n;\n  }\n\n  TValueConverter.prototype.toView = function toView(value, options) {\n    return this.service.tr(value, options);\n  };\n\n  return TValueConverter;\n}();\n\nvar TParamsCustomAttribute = (_dec = Object(aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* customAttribute */ "W"])(\'t-params\'), _dec(_class = function () {\n  TParamsCustomAttribute.inject = function inject() {\n    return [aurelia_pal__WEBPACK_IMPORTED_MODULE_6__[/* DOM */ "b"].Element];\n  };\n\n  TParamsCustomAttribute.configureAliases = function configureAliases(aliases) {\n    var r = aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ "d"].getOrCreateOwn(aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ "d"].resource, aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* HtmlBehaviorResource */ "o"], TParamsCustomAttribute);\n    r.aliases = aliases;\n  };\n\n  function TParamsCustomAttribute(element) {\n    \n\n    this.element = element;\n  }\n\n  TParamsCustomAttribute.prototype.valueChanged = function valueChanged() {};\n\n  return TParamsCustomAttribute;\n}()) || _class);\n\nvar TCustomAttribute = (_dec2 = Object(aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* customAttribute */ "W"])(\'t\'), _dec2(_class2 = function () {\n  TCustomAttribute.inject = function inject() {\n    return [aurelia_pal__WEBPACK_IMPORTED_MODULE_6__[/* DOM */ "b"].Element, _i18n__WEBPACK_IMPORTED_MODULE_0__[/* I18N */ "a"], aurelia_event_aggregator__WEBPACK_IMPORTED_MODULE_1__["EventAggregator"], _utils__WEBPACK_IMPORTED_MODULE_7__[/* LazyOptional */ "a"].of(TParamsCustomAttribute)];\n  };\n\n  TCustomAttribute.configureAliases = function configureAliases(aliases) {\n    var r = aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ "d"].getOrCreateOwn(aurelia_metadata__WEBPACK_IMPORTED_MODULE_2__[/* metadata */ "d"].resource, aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* HtmlBehaviorResource */ "o"], TCustomAttribute);\n    r.aliases = aliases;\n  };\n\n  function TCustomAttribute(element, i18n, ea, tparams) {\n    \n\n    this.element = element;\n    this.service = i18n;\n    this.ea = ea;\n    this.lazyParams = tparams;\n  }\n\n  TCustomAttribute.prototype.bind = function bind() {\n    var _this = this;\n\n    this.params = this.lazyParams();\n\n    if (this.params) {\n      this.params.valueChanged = function (newParams, oldParams) {\n        _this.paramsChanged(_this.value, newParams, oldParams);\n      };\n    }\n\n    var p = this.params !== null ? this.params.value : undefined;\n    this.subscription = this.ea.subscribe(\'i18n:locale:changed\', function () {\n      _this.service.updateValue(_this.element, _this.value, _this.params !== null ? _this.params.value : undefined);\n    });\n\n    this.service.updateValue(this.element, this.value, p);\n  };\n\n  TCustomAttribute.prototype.paramsChanged = function paramsChanged(newValue, newParams) {\n    this.service.updateValue(this.element, newValue, newParams);\n  };\n\n  TCustomAttribute.prototype.valueChanged = function valueChanged(newValue) {\n    var p = this.params !== null ? this.params.value : undefined;\n    this.service.updateValue(this.element, newValue, p);\n  };\n\n  TCustomAttribute.prototype.unbind = function unbind() {\n    if (this.subscription) {\n      this.subscription.dispose();\n    }\n  };\n\n  return TCustomAttribute;\n}()) || _class2);\n\nvar TBindingBehavior = (_temp = _class3 = function () {\n  function TBindingBehavior(signalBindingBehavior) {\n    \n\n    this.signalBindingBehavior = signalBindingBehavior;\n  }\n\n  TBindingBehavior.prototype.bind = function bind(binding, source) {\n    this.signalBindingBehavior.bind(binding, source, \'aurelia-translation-signal\');\n\n    var sourceExpression = binding.sourceExpression;\n\n    if (sourceExpression.rewritten) {\n      return;\n    }\n    sourceExpression.rewritten = true;\n\n    var expression = sourceExpression.expression;\n    sourceExpression.expression = new aurelia_binding__WEBPACK_IMPORTED_MODULE_5__["ValueConverter"](expression, \'t\', sourceExpression.args, [expression].concat(sourceExpression.args));\n  };\n\n  TBindingBehavior.prototype.unbind = function unbind(binding, source) {\n    this.signalBindingBehavior.unbind(binding, source);\n  };\n\n  return TBindingBehavior;\n}(), _class3.inject = [aurelia_templating_resources__WEBPACK_IMPORTED_MODULE_4__[/* SignalBindingBehavior */ "b"]], _temp);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXVyZWxpYS1pMThuL2Rpc3QvbmF0aXZlLW1vZHVsZXMvdC5qcz80ODIxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7QUFJOEI7QUFDNkI7QUFDZjtBQUMrQjtBQUNOO0FBQ3BCO0FBQ2Y7QUFDSzs7QUFFaEM7QUFDUDtBQUNBLFlBQVksa0RBQUk7QUFDaEI7O0FBRUE7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFTSxxQ0FBcUMsa0ZBQWU7QUFDM0Q7QUFDQSxZQUFZLHVEQUFHO0FBQ2Y7O0FBRUE7QUFDQSxZQUFZLGlFQUFRLGdCQUFnQixpRUFBUSxXQUFXLCtFQUFvQjtBQUMzRTtBQUNBOztBQUVBOzs7QUFHQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFTSxnQ0FBZ0Msa0ZBQWU7QUFDdEQ7QUFDQSxZQUFZLHVEQUFHLFVBQVUsa0RBQUksRUFBRSx3RUFBZSxFQUFFLDJEQUFZO0FBQzVEOztBQUVBO0FBQ0EsWUFBWSxpRUFBUSxnQkFBZ0IsaUVBQVEsV0FBVywrRUFBb0I7QUFDM0U7QUFDQTs7QUFFQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFTTtBQUNQOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxzQ0FBc0MsOERBQWM7QUFDcEQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQyxzQkFBc0IsMEZBQXFCIiwiZmlsZSI6ImF1cmVsaWEtaTE4bi90LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF9kZWMsIF9jbGFzcywgX2RlYzIsIF9jbGFzczIsIF9jbGFzczMsIF90ZW1wO1xuXG5cblxuaW1wb3J0IHsgSTE4TiB9IGZyb20gJy4vaTE4bic7XG5pbXBvcnQgeyBFdmVudEFnZ3JlZ2F0b3IgfSBmcm9tICdhdXJlbGlhLWV2ZW50LWFnZ3JlZ2F0b3InO1xuaW1wb3J0IHsgbWV0YWRhdGEgfSBmcm9tICdhdXJlbGlhLW1ldGFkYXRhJztcbmltcG9ydCB7IGN1c3RvbUF0dHJpYnV0ZSwgSHRtbEJlaGF2aW9yUmVzb3VyY2UgfSBmcm9tICdhdXJlbGlhLXRlbXBsYXRpbmcnO1xuaW1wb3J0IHsgU2lnbmFsQmluZGluZ0JlaGF2aW9yIH0gZnJvbSAnYXVyZWxpYS10ZW1wbGF0aW5nLXJlc291cmNlcyc7XG5pbXBvcnQgeyBWYWx1ZUNvbnZlcnRlciB9IGZyb20gJ2F1cmVsaWEtYmluZGluZyc7XG5pbXBvcnQgeyBET00gfSBmcm9tICdhdXJlbGlhLXBhbCc7XG5pbXBvcnQgeyBMYXp5T3B0aW9uYWwgfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IHZhciBUVmFsdWVDb252ZXJ0ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIFRWYWx1ZUNvbnZlcnRlci5pbmplY3QgPSBmdW5jdGlvbiBpbmplY3QoKSB7XG4gICAgcmV0dXJuIFtJMThOXTtcbiAgfTtcblxuICBmdW5jdGlvbiBUVmFsdWVDb252ZXJ0ZXIoaTE4bikge1xuICAgIFxuXG4gICAgdGhpcy5zZXJ2aWNlID0gaTE4bjtcbiAgfVxuXG4gIFRWYWx1ZUNvbnZlcnRlci5wcm90b3R5cGUudG9WaWV3ID0gZnVuY3Rpb24gdG9WaWV3KHZhbHVlLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VydmljZS50cih2YWx1ZSwgb3B0aW9ucyk7XG4gIH07XG5cbiAgcmV0dXJuIFRWYWx1ZUNvbnZlcnRlcjtcbn0oKTtcblxuZXhwb3J0IHZhciBUUGFyYW1zQ3VzdG9tQXR0cmlidXRlID0gKF9kZWMgPSBjdXN0b21BdHRyaWJ1dGUoJ3QtcGFyYW1zJyksIF9kZWMoX2NsYXNzID0gZnVuY3Rpb24gKCkge1xuICBUUGFyYW1zQ3VzdG9tQXR0cmlidXRlLmluamVjdCA9IGZ1bmN0aW9uIGluamVjdCgpIHtcbiAgICByZXR1cm4gW0RPTS5FbGVtZW50XTtcbiAgfTtcblxuICBUUGFyYW1zQ3VzdG9tQXR0cmlidXRlLmNvbmZpZ3VyZUFsaWFzZXMgPSBmdW5jdGlvbiBjb25maWd1cmVBbGlhc2VzKGFsaWFzZXMpIHtcbiAgICB2YXIgciA9IG1ldGFkYXRhLmdldE9yQ3JlYXRlT3duKG1ldGFkYXRhLnJlc291cmNlLCBIdG1sQmVoYXZpb3JSZXNvdXJjZSwgVFBhcmFtc0N1c3RvbUF0dHJpYnV0ZSk7XG4gICAgci5hbGlhc2VzID0gYWxpYXNlcztcbiAgfTtcblxuICBmdW5jdGlvbiBUUGFyYW1zQ3VzdG9tQXR0cmlidXRlKGVsZW1lbnQpIHtcbiAgICBcblxuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gIH1cblxuICBUUGFyYW1zQ3VzdG9tQXR0cmlidXRlLnByb3RvdHlwZS52YWx1ZUNoYW5nZWQgPSBmdW5jdGlvbiB2YWx1ZUNoYW5nZWQoKSB7fTtcblxuICByZXR1cm4gVFBhcmFtc0N1c3RvbUF0dHJpYnV0ZTtcbn0oKSkgfHwgX2NsYXNzKTtcblxuZXhwb3J0IHZhciBUQ3VzdG9tQXR0cmlidXRlID0gKF9kZWMyID0gY3VzdG9tQXR0cmlidXRlKCd0JyksIF9kZWMyKF9jbGFzczIgPSBmdW5jdGlvbiAoKSB7XG4gIFRDdXN0b21BdHRyaWJ1dGUuaW5qZWN0ID0gZnVuY3Rpb24gaW5qZWN0KCkge1xuICAgIHJldHVybiBbRE9NLkVsZW1lbnQsIEkxOE4sIEV2ZW50QWdncmVnYXRvciwgTGF6eU9wdGlvbmFsLm9mKFRQYXJhbXNDdXN0b21BdHRyaWJ1dGUpXTtcbiAgfTtcblxuICBUQ3VzdG9tQXR0cmlidXRlLmNvbmZpZ3VyZUFsaWFzZXMgPSBmdW5jdGlvbiBjb25maWd1cmVBbGlhc2VzKGFsaWFzZXMpIHtcbiAgICB2YXIgciA9IG1ldGFkYXRhLmdldE9yQ3JlYXRlT3duKG1ldGFkYXRhLnJlc291cmNlLCBIdG1sQmVoYXZpb3JSZXNvdXJjZSwgVEN1c3RvbUF0dHJpYnV0ZSk7XG4gICAgci5hbGlhc2VzID0gYWxpYXNlcztcbiAgfTtcblxuICBmdW5jdGlvbiBUQ3VzdG9tQXR0cmlidXRlKGVsZW1lbnQsIGkxOG4sIGVhLCB0cGFyYW1zKSB7XG4gICAgXG5cbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMuc2VydmljZSA9IGkxOG47XG4gICAgdGhpcy5lYSA9IGVhO1xuICAgIHRoaXMubGF6eVBhcmFtcyA9IHRwYXJhbXM7XG4gIH1cblxuICBUQ3VzdG9tQXR0cmlidXRlLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gYmluZCgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy5wYXJhbXMgPSB0aGlzLmxhenlQYXJhbXMoKTtcblxuICAgIGlmICh0aGlzLnBhcmFtcykge1xuICAgICAgdGhpcy5wYXJhbXMudmFsdWVDaGFuZ2VkID0gZnVuY3Rpb24gKG5ld1BhcmFtcywgb2xkUGFyYW1zKSB7XG4gICAgICAgIF90aGlzLnBhcmFtc0NoYW5nZWQoX3RoaXMudmFsdWUsIG5ld1BhcmFtcywgb2xkUGFyYW1zKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIHAgPSB0aGlzLnBhcmFtcyAhPT0gbnVsbCA/IHRoaXMucGFyYW1zLnZhbHVlIDogdW5kZWZpbmVkO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5lYS5zdWJzY3JpYmUoJ2kxOG46bG9jYWxlOmNoYW5nZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5zZXJ2aWNlLnVwZGF0ZVZhbHVlKF90aGlzLmVsZW1lbnQsIF90aGlzLnZhbHVlLCBfdGhpcy5wYXJhbXMgIT09IG51bGwgPyBfdGhpcy5wYXJhbXMudmFsdWUgOiB1bmRlZmluZWQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5zZXJ2aWNlLnVwZGF0ZVZhbHVlKHRoaXMuZWxlbWVudCwgdGhpcy52YWx1ZSwgcCk7XG4gIH07XG5cbiAgVEN1c3RvbUF0dHJpYnV0ZS5wcm90b3R5cGUucGFyYW1zQ2hhbmdlZCA9IGZ1bmN0aW9uIHBhcmFtc0NoYW5nZWQobmV3VmFsdWUsIG5ld1BhcmFtcykge1xuICAgIHRoaXMuc2VydmljZS51cGRhdGVWYWx1ZSh0aGlzLmVsZW1lbnQsIG5ld1ZhbHVlLCBuZXdQYXJhbXMpO1xuICB9O1xuXG4gIFRDdXN0b21BdHRyaWJ1dGUucHJvdG90eXBlLnZhbHVlQ2hhbmdlZCA9IGZ1bmN0aW9uIHZhbHVlQ2hhbmdlZChuZXdWYWx1ZSkge1xuICAgIHZhciBwID0gdGhpcy5wYXJhbXMgIT09IG51bGwgPyB0aGlzLnBhcmFtcy52YWx1ZSA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLnNlcnZpY2UudXBkYXRlVmFsdWUodGhpcy5lbGVtZW50LCBuZXdWYWx1ZSwgcCk7XG4gIH07XG5cbiAgVEN1c3RvbUF0dHJpYnV0ZS5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24gdW5iaW5kKCkge1xuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24uZGlzcG9zZSgpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gVEN1c3RvbUF0dHJpYnV0ZTtcbn0oKSkgfHwgX2NsYXNzMik7XG5cbmV4cG9ydCB2YXIgVEJpbmRpbmdCZWhhdmlvciA9IChfdGVtcCA9IF9jbGFzczMgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFRCaW5kaW5nQmVoYXZpb3Ioc2lnbmFsQmluZGluZ0JlaGF2aW9yKSB7XG4gICAgXG5cbiAgICB0aGlzLnNpZ25hbEJpbmRpbmdCZWhhdmlvciA9IHNpZ25hbEJpbmRpbmdCZWhhdmlvcjtcbiAgfVxuXG4gIFRCaW5kaW5nQmVoYXZpb3IucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiBiaW5kKGJpbmRpbmcsIHNvdXJjZSkge1xuICAgIHRoaXMuc2lnbmFsQmluZGluZ0JlaGF2aW9yLmJpbmQoYmluZGluZywgc291cmNlLCAnYXVyZWxpYS10cmFuc2xhdGlvbi1zaWduYWwnKTtcblxuICAgIHZhciBzb3VyY2VFeHByZXNzaW9uID0gYmluZGluZy5zb3VyY2VFeHByZXNzaW9uO1xuXG4gICAgaWYgKHNvdXJjZUV4cHJlc3Npb24ucmV3cml0dGVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNvdXJjZUV4cHJlc3Npb24ucmV3cml0dGVuID0gdHJ1ZTtcblxuICAgIHZhciBleHByZXNzaW9uID0gc291cmNlRXhwcmVzc2lvbi5leHByZXNzaW9uO1xuICAgIHNvdXJjZUV4cHJlc3Npb24uZXhwcmVzc2lvbiA9IG5ldyBWYWx1ZUNvbnZlcnRlcihleHByZXNzaW9uLCAndCcsIHNvdXJjZUV4cHJlc3Npb24uYXJncywgW2V4cHJlc3Npb25dLmNvbmNhdChzb3VyY2VFeHByZXNzaW9uLmFyZ3MpKTtcbiAgfTtcblxuICBUQmluZGluZ0JlaGF2aW9yLnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbiB1bmJpbmQoYmluZGluZywgc291cmNlKSB7XG4gICAgdGhpcy5zaWduYWxCaW5kaW5nQmVoYXZpb3IudW5iaW5kKGJpbmRpbmcsIHNvdXJjZSk7XG4gIH07XG5cbiAgcmV0dXJuIFRCaW5kaW5nQmVoYXZpb3I7XG59KCksIF9jbGFzczMuaW5qZWN0ID0gW1NpZ25hbEJpbmRpbmdCZWhhdmlvcl0sIF90ZW1wKTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///aurelia-i18n/t\n')},"aurelia-logging-console":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ConsoleAppender\", function() { return ConsoleAppender; });\n/* harmony import */ var aurelia_logging__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5);\n\n\n\n\nvar ConsoleAppender = function () {\n  function ConsoleAppender() {\n    \n  }\n\n  ConsoleAppender.prototype.debug = function debug(logger) {\n    var _console;\n\n    for (var _len = arguments.length, rest = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      rest[_key - 1] = arguments[_key];\n    }\n\n    (_console = console).debug.apply(_console, ['DEBUG [' + logger.id + ']'].concat(rest));\n  };\n\n  ConsoleAppender.prototype.info = function info(logger) {\n    var _console2;\n\n    for (var _len2 = arguments.length, rest = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n      rest[_key2 - 1] = arguments[_key2];\n    }\n\n    (_console2 = console).info.apply(_console2, ['INFO [' + logger.id + ']'].concat(rest));\n  };\n\n  ConsoleAppender.prototype.warn = function warn(logger) {\n    var _console3;\n\n    for (var _len3 = arguments.length, rest = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n      rest[_key3 - 1] = arguments[_key3];\n    }\n\n    (_console3 = console).warn.apply(_console3, ['WARN [' + logger.id + ']'].concat(rest));\n  };\n\n  ConsoleAppender.prototype.error = function error(logger) {\n    var _console4;\n\n    for (var _len4 = arguments.length, rest = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n      rest[_key4 - 1] = arguments[_key4];\n    }\n\n    (_console4 = console).error.apply(_console4, ['ERROR [' + logger.id + ']'].concat(rest));\n  };\n\n  return ConsoleAppender;\n}();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXVyZWxpYS1sb2dnaW5nLWNvbnNvbGUvZGlzdC9uYXRpdmUtbW9kdWxlcy9hdXJlbGlhLWxvZ2dpbmctY29uc29sZS5qcz9kYzg5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBRXlDOztBQUVsQztBQUNQOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsc0ZBQXNGLGFBQWE7QUFDbkc7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsMEZBQTBGLGVBQWU7QUFDekc7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsMEZBQTBGLGVBQWU7QUFDekc7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsMEZBQTBGLGVBQWU7QUFDekc7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQyIsImZpbGUiOiJhdXJlbGlhLWxvZ2dpbmctY29uc29sZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIlxuXG5pbXBvcnQgeyBMb2dnZXIgfSBmcm9tICdhdXJlbGlhLWxvZ2dpbmcnO1xuXG5leHBvcnQgdmFyIENvbnNvbGVBcHBlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQ29uc29sZUFwcGVuZGVyKCkge1xuICAgIFxuICB9XG5cbiAgQ29uc29sZUFwcGVuZGVyLnByb3RvdHlwZS5kZWJ1ZyA9IGZ1bmN0aW9uIGRlYnVnKGxvZ2dlcikge1xuICAgIHZhciBfY29uc29sZTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgcmVzdFtfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgKF9jb25zb2xlID0gY29uc29sZSkuZGVidWcuYXBwbHkoX2NvbnNvbGUsIFsnREVCVUcgWycgKyBsb2dnZXIuaWQgKyAnXSddLmNvbmNhdChyZXN0KSk7XG4gIH07XG5cbiAgQ29uc29sZUFwcGVuZGVyLnByb3RvdHlwZS5pbmZvID0gZnVuY3Rpb24gaW5mbyhsb2dnZXIpIHtcbiAgICB2YXIgX2NvbnNvbGUyO1xuXG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgcmVzdFtfa2V5MiAtIDFdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICAoX2NvbnNvbGUyID0gY29uc29sZSkuaW5mby5hcHBseShfY29uc29sZTIsIFsnSU5GTyBbJyArIGxvZ2dlci5pZCArICddJ10uY29uY2F0KHJlc3QpKTtcbiAgfTtcblxuICBDb25zb2xlQXBwZW5kZXIucHJvdG90eXBlLndhcm4gPSBmdW5jdGlvbiB3YXJuKGxvZ2dlcikge1xuICAgIHZhciBfY29uc29sZTM7XG5cbiAgICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBBcnJheShfbGVuMyA+IDEgPyBfbGVuMyAtIDEgOiAwKSwgX2tleTMgPSAxOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7XG4gICAgICByZXN0W19rZXkzIC0gMV0gPSBhcmd1bWVudHNbX2tleTNdO1xuICAgIH1cblxuICAgIChfY29uc29sZTMgPSBjb25zb2xlKS53YXJuLmFwcGx5KF9jb25zb2xlMywgWydXQVJOIFsnICsgbG9nZ2VyLmlkICsgJ10nXS5jb25jYXQocmVzdCkpO1xuICB9O1xuXG4gIENvbnNvbGVBcHBlbmRlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiBlcnJvcihsb2dnZXIpIHtcbiAgICB2YXIgX2NvbnNvbGU0O1xuXG4gICAgZm9yICh2YXIgX2xlbjQgPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gQXJyYXkoX2xlbjQgPiAxID8gX2xlbjQgLSAxIDogMCksIF9rZXk0ID0gMTsgX2tleTQgPCBfbGVuNDsgX2tleTQrKykge1xuICAgICAgcmVzdFtfa2V5NCAtIDFdID0gYXJndW1lbnRzW19rZXk0XTtcbiAgICB9XG5cbiAgICAoX2NvbnNvbGU0ID0gY29uc29sZSkuZXJyb3IuYXBwbHkoX2NvbnNvbGU0LCBbJ0VSUk9SIFsnICsgbG9nZ2VyLmlkICsgJ10nXS5jb25jYXQocmVzdCkpO1xuICB9O1xuXG4gIHJldHVybiBDb25zb2xlQXBwZW5kZXI7XG59KCk7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///aurelia-logging-console\n")},"aurelia-pal-browser":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"_PLATFORM\", function() { return _PLATFORM; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"_FEATURE\", function() { return _FEATURE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"_DOM\", function() { return _DOM; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"initialize\", function() { return initialize; });\n/* harmony import */ var aurelia_pal__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0);\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n\n\nvar _PLATFORM = {\n  location: window.location,\n  history: window.history,\n  addEventListener: function addEventListener(eventName, callback, capture) {\n    this.global.addEventListener(eventName, callback, capture);\n  },\n  removeEventListener: function removeEventListener(eventName, callback, capture) {\n    this.global.removeEventListener(eventName, callback, capture);\n  },\n\n  performance: window.performance,\n  requestAnimationFrame: function requestAnimationFrame(callback) {\n    return this.global.requestAnimationFrame(callback);\n  }\n};\n\nif (typeof FEATURE_NO_IE === 'undefined') {\n  var test = function test() {};\n\n  if (test.name === undefined) {\n    Object.defineProperty(Function.prototype, 'name', {\n      get: function get() {\n        var name = this.toString().match(/^\\s*function\\s*(\\S*)\\s*\\(/)[1];\n\n        Object.defineProperty(this, 'name', { value: name });\n        return name;\n      }\n    });\n  }\n}\n\nif (typeof FEATURE_NO_IE === 'undefined') {\n  if (!('classList' in document.createElement('_')) || document.createElementNS && !('classList' in document.createElementNS('http://www.w3.org/2000/svg', 'g'))) {\n    var protoProp = 'prototype';\n    var strTrim = String.prototype.trim;\n    var arrIndexOf = Array.prototype.indexOf;\n    var emptyArray = [];\n\n    var DOMEx = function DOMEx(type, message) {\n      this.name = type;\n      this.code = DOMException[type];\n      this.message = message;\n    };\n\n    var checkTokenAndGetIndex = function checkTokenAndGetIndex(classList, token) {\n      if (token === '') {\n        throw new DOMEx('SYNTAX_ERR', 'An invalid or illegal string was specified');\n      }\n\n      if (/\\s/.test(token)) {\n        throw new DOMEx('INVALID_CHARACTER_ERR', 'String contains an invalid character');\n      }\n\n      return arrIndexOf.call(classList, token);\n    };\n\n    var ClassList = function ClassList(elem) {\n      var trimmedClasses = strTrim.call(elem.getAttribute('class') || '');\n      var classes = trimmedClasses ? trimmedClasses.split(/\\s+/) : emptyArray;\n\n      for (var i = 0, ii = classes.length; i < ii; ++i) {\n        this.push(classes[i]);\n      }\n\n      this._updateClassName = function () {\n        elem.setAttribute('class', this.toString());\n      };\n    };\n\n    var classListProto = ClassList[protoProp] = [];\n\n    DOMEx[protoProp] = Error[protoProp];\n\n    classListProto.item = function (i) {\n      return this[i] || null;\n    };\n\n    classListProto.contains = function (token) {\n      token += '';\n      return checkTokenAndGetIndex(this, token) !== -1;\n    };\n\n    classListProto.add = function () {\n      var tokens = arguments;\n      var i = 0;\n      var ii = tokens.length;\n      var token = void 0;\n      var updated = false;\n\n      do {\n        token = tokens[i] + '';\n        if (checkTokenAndGetIndex(this, token) === -1) {\n          this.push(token);\n          updated = true;\n        }\n      } while (++i < ii);\n\n      if (updated) {\n        this._updateClassName();\n      }\n    };\n\n    classListProto.remove = function () {\n      var tokens = arguments;\n      var i = 0;\n      var ii = tokens.length;\n      var token = void 0;\n      var updated = false;\n      var index = void 0;\n\n      do {\n        token = tokens[i] + '';\n        index = checkTokenAndGetIndex(this, token);\n        while (index !== -1) {\n          this.splice(index, 1);\n          updated = true;\n          index = checkTokenAndGetIndex(this, token);\n        }\n      } while (++i < ii);\n\n      if (updated) {\n        this._updateClassName();\n      }\n    };\n\n    classListProto.toggle = function (token, force) {\n      token += '';\n\n      var result = this.contains(token);\n      var method = result ? force !== true && 'remove' : force !== false && 'add';\n\n      if (method) {\n        this[method](token);\n      }\n\n      if (force === true || force === false) {\n        return force;\n      }\n\n      return !result;\n    };\n\n    classListProto.toString = function () {\n      return this.join(' ');\n    };\n\n    Object.defineProperty(Element.prototype, 'classList', {\n      get: function get() {\n        return new ClassList(this);\n      },\n      enumerable: true,\n      configurable: true\n    });\n  } else {\n    var testElement = document.createElement('_');\n    testElement.classList.add('c1', 'c2');\n\n    if (!testElement.classList.contains('c2')) {\n      var createMethod = function createMethod(method) {\n        var original = DOMTokenList.prototype[method];\n\n        DOMTokenList.prototype[method] = function (token) {\n          for (var i = 0, ii = arguments.length; i < ii; ++i) {\n            token = arguments[i];\n            original.call(this, token);\n          }\n        };\n      };\n\n      createMethod('add');\n      createMethod('remove');\n    }\n\n    testElement.classList.toggle('c3', false);\n\n    if (testElement.classList.contains('c3')) {\n      var _toggle = DOMTokenList.prototype.toggle;\n\n      DOMTokenList.prototype.toggle = function (token, force) {\n        if (1 in arguments && !this.contains(token) === !force) {\n          return force;\n        }\n\n        return _toggle.call(this, token);\n      };\n    }\n\n    testElement = null;\n  }\n}\n\nif (typeof FEATURE_NO_IE === 'undefined') {\n  var _filterEntries = function _filterEntries(key, value) {\n    var i = 0,\n        n = _entries.length,\n        result = [];\n    for (; i < n; i++) {\n      if (_entries[i][key] == value) {\n        result.push(_entries[i]);\n      }\n    }\n    return result;\n  };\n\n  var _clearEntries = function _clearEntries(type, name) {\n    var i = _entries.length,\n        entry;\n    while (i--) {\n      entry = _entries[i];\n      if (entry.entryType == type && (name === void 0 || entry.name == name)) {\n        _entries.splice(i, 1);\n      }\n    }\n  };\n\n  // @license http://opensource.org/licenses/MIT\n  if ('performance' in window === false) {\n    window.performance = {};\n  }\n\n  if ('now' in window.performance === false) {\n    var nowOffset = Date.now();\n\n    if (performance.timing && performance.timing.navigationStart) {\n      nowOffset = performance.timing.navigationStart;\n    }\n\n    window.performance.now = function now() {\n      return Date.now() - nowOffset;\n    };\n  }\n\n  var startOffset = Date.now ? Date.now() : +new Date();\n  var _entries = [];\n  var _marksIndex = {};\n\n  ;\n\n  if (!window.performance.mark) {\n    window.performance.mark = window.performance.webkitMark || function (name) {\n      var mark = {\n        name: name,\n        entryType: \"mark\",\n        startTime: window.performance.now(),\n        duration: 0\n      };\n\n      _entries.push(mark);\n      _marksIndex[name] = mark;\n    };\n  }\n\n  if (!window.performance.measure) {\n    window.performance.measure = window.performance.webkitMeasure || function (name, startMark, endMark) {\n      startMark = _marksIndex[startMark].startTime;\n      endMark = _marksIndex[endMark].startTime;\n\n      _entries.push({\n        name: name,\n        entryType: \"measure\",\n        startTime: startMark,\n        duration: endMark - startMark\n      });\n    };\n  }\n\n  if (!window.performance.getEntriesByType) {\n    window.performance.getEntriesByType = window.performance.webkitGetEntriesByType || function (type) {\n      return _filterEntries(\"entryType\", type);\n    };\n  }\n\n  if (!window.performance.getEntriesByName) {\n    window.performance.getEntriesByName = window.performance.webkitGetEntriesByName || function (name) {\n      return _filterEntries(\"name\", name);\n    };\n  }\n\n  if (!window.performance.clearMarks) {\n    window.performance.clearMarks = window.performance.webkitClearMarks || function (name) {\n      _clearEntries(\"mark\", name);\n    };\n  }\n\n  if (!window.performance.clearMeasures) {\n    window.performance.clearMeasures = window.performance.webkitClearMeasures || function (name) {\n      _clearEntries(\"measure\", name);\n    };\n  }\n\n  _PLATFORM.performance = window.performance;\n}\n\nif (typeof FEATURE_NO_IE === 'undefined') {\n  var con = window.console = window.console || {};\n  var nop = function nop() {};\n\n  if (!con.memory) con.memory = {};\n  ('assert,clear,count,debug,dir,dirxml,error,exception,group,' + 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' + 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',').forEach(function (m) {\n    if (!con[m]) con[m] = nop;\n  });\n\n  if (_typeof(con.log) === 'object') {\n    'log,info,warn,error,assert,dir,clear,profile,profileEnd'.split(',').forEach(function (method) {\n      console[method] = this.bind(console[method], console);\n    }, Function.prototype.call);\n  }\n}\n\nif (typeof FEATURE_NO_IE === 'undefined') {\n  if (!window.CustomEvent || typeof window.CustomEvent !== 'function') {\n    var _CustomEvent = function _CustomEvent(event, params) {\n      params = params || {\n        bubbles: false,\n        cancelable: false,\n        detail: undefined\n      };\n\n      var evt = document.createEvent('CustomEvent');\n      evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n      return evt;\n    };\n\n    _CustomEvent.prototype = window.Event.prototype;\n    window.CustomEvent = _CustomEvent;\n  }\n}\n\nif (Element && !Element.prototype.matches) {\n  var proto = Element.prototype;\n  proto.matches = proto.matchesSelector || proto.mozMatchesSelector || proto.msMatchesSelector || proto.oMatchesSelector || proto.webkitMatchesSelector;\n}\n\nvar _FEATURE = {\n  shadowDOM: !!HTMLElement.prototype.attachShadow,\n  scopedCSS: 'scoped' in document.createElement('style'),\n  htmlTemplateElement: function () {\n    var d = document.createElement('div');\n    d.innerHTML = '<template><\/template>';\n    return 'content' in d.children[0];\n  }(),\n  mutationObserver: !!(window.MutationObserver || window.WebKitMutationObserver),\n  ensureHTMLTemplateElement: function ensureHTMLTemplateElement(t) {\n    return t;\n  }\n};\n\nif (typeof FEATURE_NO_IE === 'undefined') {\n  var isSVGTemplate = function isSVGTemplate(el) {\n    return el.tagName === 'template' && el.namespaceURI === 'http://www.w3.org/2000/svg';\n  };\n\n  var fixSVGTemplateElement = function fixSVGTemplateElement(el) {\n    var template = el.ownerDocument.createElement('template');\n    var attrs = el.attributes;\n    var length = attrs.length;\n    var attr = void 0;\n\n    el.parentNode.insertBefore(template, el);\n\n    while (length-- > 0) {\n      attr = attrs[length];\n      template.setAttribute(attr.name, attr.value);\n      el.removeAttribute(attr.name);\n    }\n\n    el.parentNode.removeChild(el);\n\n    return fixHTMLTemplateElement(template);\n  };\n\n  var fixHTMLTemplateElement = function fixHTMLTemplateElement(template) {\n    var content = template.content = document.createDocumentFragment();\n    var child = void 0;\n\n    while (child = template.firstChild) {\n      content.appendChild(child);\n    }\n\n    return template;\n  };\n\n  var fixHTMLTemplateElementRoot = function fixHTMLTemplateElementRoot(template) {\n    var content = fixHTMLTemplateElement(template).content;\n    var childTemplates = content.querySelectorAll('template');\n\n    for (var i = 0, ii = childTemplates.length; i < ii; ++i) {\n      var child = childTemplates[i];\n\n      if (isSVGTemplate(child)) {\n        fixSVGTemplateElement(child);\n      } else {\n        fixHTMLTemplateElement(child);\n      }\n    }\n\n    return template;\n  };\n\n  if (!_FEATURE.htmlTemplateElement) {\n    _FEATURE.ensureHTMLTemplateElement = fixHTMLTemplateElementRoot;\n  }\n}\n\nvar shadowPoly = window.ShadowDOMPolyfill || null;\n\nvar _DOM = {\n  Element: Element,\n  NodeList: NodeList,\n  SVGElement: SVGElement,\n  boundary: 'aurelia-dom-boundary',\n  addEventListener: function addEventListener(eventName, callback, capture) {\n    document.addEventListener(eventName, callback, capture);\n  },\n  removeEventListener: function removeEventListener(eventName, callback, capture) {\n    document.removeEventListener(eventName, callback, capture);\n  },\n  adoptNode: function adoptNode(node) {\n    return document.adoptNode(node);\n  },\n  createAttribute: function createAttribute(name) {\n    return document.createAttribute(name);\n  },\n  createElement: function createElement(tagName) {\n    return document.createElement(tagName);\n  },\n  createTextNode: function createTextNode(text) {\n    return document.createTextNode(text);\n  },\n  createComment: function createComment(text) {\n    return document.createComment(text);\n  },\n  createDocumentFragment: function createDocumentFragment() {\n    return document.createDocumentFragment();\n  },\n  createTemplateElement: function createTemplateElement() {\n    var template = document.createElement('template');\n    return _FEATURE.ensureHTMLTemplateElement(template);\n  },\n  createMutationObserver: function createMutationObserver(callback) {\n    return new (window.MutationObserver || window.WebKitMutationObserver)(callback);\n  },\n  createCustomEvent: function createCustomEvent(eventType, options) {\n    return new window.CustomEvent(eventType, options);\n  },\n  dispatchEvent: function dispatchEvent(evt) {\n    document.dispatchEvent(evt);\n  },\n  getComputedStyle: function getComputedStyle(element) {\n    return window.getComputedStyle(element);\n  },\n  getElementById: function getElementById(id) {\n    return document.getElementById(id);\n  },\n  querySelector: function querySelector(query) {\n    return document.querySelector(query);\n  },\n  querySelectorAll: function querySelectorAll(query) {\n    return document.querySelectorAll(query);\n  },\n  nextElementSibling: function nextElementSibling(element) {\n    if (element.nextElementSibling) {\n      return element.nextElementSibling;\n    }\n    do {\n      element = element.nextSibling;\n    } while (element && element.nodeType !== 1);\n    return element;\n  },\n  createTemplateFromMarkup: function createTemplateFromMarkup(markup) {\n    var parser = document.createElement('div');\n    parser.innerHTML = markup;\n\n    var temp = parser.firstElementChild;\n    if (!temp || temp.nodeName !== 'TEMPLATE') {\n      throw new Error('Template markup must be wrapped in a <template> element e.g. <template> <!-- markup here --> <\/template>');\n    }\n\n    return _FEATURE.ensureHTMLTemplateElement(temp);\n  },\n  appendNode: function appendNode(newNode, parentNode) {\n    (parentNode || document.body).appendChild(newNode);\n  },\n  replaceNode: function replaceNode(newNode, node, parentNode) {\n    if (node.parentNode) {\n      node.parentNode.replaceChild(newNode, node);\n    } else if (shadowPoly !== null) {\n      shadowPoly.unwrap(parentNode).replaceChild(shadowPoly.unwrap(newNode), shadowPoly.unwrap(node));\n    } else {\n      parentNode.replaceChild(newNode, node);\n    }\n  },\n  removeNode: function removeNode(node, parentNode) {\n    if (node.parentNode) {\n      node.parentNode.removeChild(node);\n    } else if (parentNode) {\n      if (shadowPoly !== null) {\n        shadowPoly.unwrap(parentNode).removeChild(shadowPoly.unwrap(node));\n      } else {\n        parentNode.removeChild(node);\n      }\n    }\n  },\n  injectStyles: function injectStyles(styles, destination, prepend, id) {\n    if (id) {\n      var oldStyle = document.getElementById(id);\n      if (oldStyle) {\n        var isStyleTag = oldStyle.tagName.toLowerCase() === 'style';\n\n        if (isStyleTag) {\n          oldStyle.innerHTML = styles;\n          return;\n        }\n\n        throw new Error('The provided id does not indicate a style tag.');\n      }\n    }\n\n    var node = document.createElement('style');\n    node.innerHTML = styles;\n    node.type = 'text/css';\n\n    if (id) {\n      node.id = id;\n    }\n\n    destination = destination || document.head;\n\n    if (prepend && destination.childNodes.length > 0) {\n      destination.insertBefore(node, destination.childNodes[0]);\n    } else {\n      destination.appendChild(node);\n    }\n\n    return node;\n  }\n};\n\nfunction initialize() {\n  if (aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* isInitialized */ \"f\"]) {\n    return;\n  }\n\n  Object(aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* initializePAL */ \"e\"])(function (platform, feature, dom) {\n    Object.assign(platform, _PLATFORM);\n    Object.assign(feature, _FEATURE);\n    Object.assign(dom, _DOM);\n\n    Object.defineProperty(dom, 'title', {\n      get: function get() {\n        return document.title;\n      },\n      set: function set(value) {\n        document.title = value;\n      }\n    });\n\n    Object.defineProperty(dom, 'activeElement', {\n      get: function get() {\n        return document.activeElement;\n      }\n    });\n\n    Object.defineProperty(platform, 'XMLHttpRequest', {\n      get: function get() {\n        return platform.global.XMLHttpRequest;\n      }\n    });\n  });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXVyZWxpYS1wYWwtYnJvd3Nlci9kaXN0L25hdGl2ZS1tb2R1bGVzL2F1cmVsaWEtcGFsLWJyb3dzZXIuanM/MDYyNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxvR0FBb0csbUJBQW1CLEVBQUUsbUJBQW1CLDhIQUE4SDs7QUFFL007O0FBRXBEO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZDQUE2QyxjQUFjO0FBQzNEO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsMENBQTBDLFFBQVE7QUFDbEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0RBQWdELFFBQVE7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLE9BQU87QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsK0NBQStDLFFBQVE7QUFDdkQ7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVPO0FBQ1AsTUFBTSxpRUFBYTtBQUNuQjtBQUNBOztBQUVBLEVBQUUseUVBQWE7QUFDZjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSCIsImZpbGUiOiJhdXJlbGlhLXBhbC1icm93c2VyLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG5pbXBvcnQgeyBpbml0aWFsaXplUEFMLCBpc0luaXRpYWxpemVkIH0gZnJvbSAnYXVyZWxpYS1wYWwnO1xuXG5leHBvcnQgdmFyIF9QTEFURk9STSA9IHtcbiAgbG9jYXRpb246IHdpbmRvdy5sb2NhdGlvbixcbiAgaGlzdG9yeTogd2luZG93Lmhpc3RvcnksXG4gIGFkZEV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBjYWxsYmFjaywgY2FwdHVyZSkge1xuICAgIHRoaXMuZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBjYWxsYmFjaywgY2FwdHVyZSk7XG4gIH0sXG4gIHJlbW92ZUV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBjYWxsYmFjaywgY2FwdHVyZSkge1xuICAgIHRoaXMuZ2xvYmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBjYWxsYmFjaywgY2FwdHVyZSk7XG4gIH0sXG5cbiAgcGVyZm9ybWFuY2U6IHdpbmRvdy5wZXJmb3JtYW5jZSxcbiAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lOiBmdW5jdGlvbiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2FsbGJhY2spIHtcbiAgICByZXR1cm4gdGhpcy5nbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGNhbGxiYWNrKTtcbiAgfVxufTtcblxuaWYgKHR5cGVvZiBGRUFUVVJFX05PX0lFID09PSAndW5kZWZpbmVkJykge1xuICB2YXIgdGVzdCA9IGZ1bmN0aW9uIHRlc3QoKSB7fTtcblxuICBpZiAodGVzdC5uYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRnVuY3Rpb24ucHJvdG90eXBlLCAnbmFtZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICB2YXIgbmFtZSA9IHRoaXMudG9TdHJpbmcoKS5tYXRjaCgvXlxccypmdW5jdGlvblxccyooXFxTKilcXHMqXFwoLylbMV07XG5cbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICduYW1lJywgeyB2YWx1ZTogbmFtZSB9KTtcbiAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuaWYgKHR5cGVvZiBGRUFUVVJFX05PX0lFID09PSAndW5kZWZpbmVkJykge1xuICBpZiAoISgnY2xhc3NMaXN0JyBpbiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdfJykpIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyAmJiAhKCdjbGFzc0xpc3QnIGluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnZycpKSkge1xuICAgIHZhciBwcm90b1Byb3AgPSAncHJvdG90eXBlJztcbiAgICB2YXIgc3RyVHJpbSA9IFN0cmluZy5wcm90b3R5cGUudHJpbTtcbiAgICB2YXIgYXJySW5kZXhPZiA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mO1xuICAgIHZhciBlbXB0eUFycmF5ID0gW107XG5cbiAgICB2YXIgRE9NRXggPSBmdW5jdGlvbiBET01FeCh0eXBlLCBtZXNzYWdlKSB7XG4gICAgICB0aGlzLm5hbWUgPSB0eXBlO1xuICAgICAgdGhpcy5jb2RlID0gRE9NRXhjZXB0aW9uW3R5cGVdO1xuICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICB9O1xuXG4gICAgdmFyIGNoZWNrVG9rZW5BbmRHZXRJbmRleCA9IGZ1bmN0aW9uIGNoZWNrVG9rZW5BbmRHZXRJbmRleChjbGFzc0xpc3QsIHRva2VuKSB7XG4gICAgICBpZiAodG9rZW4gPT09ICcnKSB7XG4gICAgICAgIHRocm93IG5ldyBET01FeCgnU1lOVEFYX0VSUicsICdBbiBpbnZhbGlkIG9yIGlsbGVnYWwgc3RyaW5nIHdhcyBzcGVjaWZpZWQnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKC9cXHMvLnRlc3QodG9rZW4pKSB7XG4gICAgICAgIHRocm93IG5ldyBET01FeCgnSU5WQUxJRF9DSEFSQUNURVJfRVJSJywgJ1N0cmluZyBjb250YWlucyBhbiBpbnZhbGlkIGNoYXJhY3RlcicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXJySW5kZXhPZi5jYWxsKGNsYXNzTGlzdCwgdG9rZW4pO1xuICAgIH07XG5cbiAgICB2YXIgQ2xhc3NMaXN0ID0gZnVuY3Rpb24gQ2xhc3NMaXN0KGVsZW0pIHtcbiAgICAgIHZhciB0cmltbWVkQ2xhc3NlcyA9IHN0clRyaW0uY2FsbChlbGVtLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSB8fCAnJyk7XG4gICAgICB2YXIgY2xhc3NlcyA9IHRyaW1tZWRDbGFzc2VzID8gdHJpbW1lZENsYXNzZXMuc3BsaXQoL1xccysvKSA6IGVtcHR5QXJyYXk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGNsYXNzZXMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgICB0aGlzLnB1c2goY2xhc3Nlc1tpXSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3VwZGF0ZUNsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgdGhpcy50b1N0cmluZygpKTtcbiAgICAgIH07XG4gICAgfTtcblxuICAgIHZhciBjbGFzc0xpc3RQcm90byA9IENsYXNzTGlzdFtwcm90b1Byb3BdID0gW107XG5cbiAgICBET01FeFtwcm90b1Byb3BdID0gRXJyb3JbcHJvdG9Qcm9wXTtcblxuICAgIGNsYXNzTGlzdFByb3RvLml0ZW0gPSBmdW5jdGlvbiAoaSkge1xuICAgICAgcmV0dXJuIHRoaXNbaV0gfHwgbnVsbDtcbiAgICB9O1xuXG4gICAgY2xhc3NMaXN0UHJvdG8uY29udGFpbnMgPSBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICAgIHRva2VuICs9ICcnO1xuICAgICAgcmV0dXJuIGNoZWNrVG9rZW5BbmRHZXRJbmRleCh0aGlzLCB0b2tlbikgIT09IC0xO1xuICAgIH07XG5cbiAgICBjbGFzc0xpc3RQcm90by5hZGQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdG9rZW5zID0gYXJndW1lbnRzO1xuICAgICAgdmFyIGkgPSAwO1xuICAgICAgdmFyIGlpID0gdG9rZW5zLmxlbmd0aDtcbiAgICAgIHZhciB0b2tlbiA9IHZvaWQgMDtcbiAgICAgIHZhciB1cGRhdGVkID0gZmFsc2U7XG5cbiAgICAgIGRvIHtcbiAgICAgICAgdG9rZW4gPSB0b2tlbnNbaV0gKyAnJztcbiAgICAgICAgaWYgKGNoZWNrVG9rZW5BbmRHZXRJbmRleCh0aGlzLCB0b2tlbikgPT09IC0xKSB7XG4gICAgICAgICAgdGhpcy5wdXNoKHRva2VuKTtcbiAgICAgICAgICB1cGRhdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSB3aGlsZSAoKytpIDwgaWkpO1xuXG4gICAgICBpZiAodXBkYXRlZCkge1xuICAgICAgICB0aGlzLl91cGRhdGVDbGFzc05hbWUoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY2xhc3NMaXN0UHJvdG8ucmVtb3ZlID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRva2VucyA9IGFyZ3VtZW50cztcbiAgICAgIHZhciBpID0gMDtcbiAgICAgIHZhciBpaSA9IHRva2Vucy5sZW5ndGg7XG4gICAgICB2YXIgdG9rZW4gPSB2b2lkIDA7XG4gICAgICB2YXIgdXBkYXRlZCA9IGZhbHNlO1xuICAgICAgdmFyIGluZGV4ID0gdm9pZCAwO1xuXG4gICAgICBkbyB7XG4gICAgICAgIHRva2VuID0gdG9rZW5zW2ldICsgJyc7XG4gICAgICAgIGluZGV4ID0gY2hlY2tUb2tlbkFuZEdldEluZGV4KHRoaXMsIHRva2VuKTtcbiAgICAgICAgd2hpbGUgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIHRoaXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICB1cGRhdGVkID0gdHJ1ZTtcbiAgICAgICAgICBpbmRleCA9IGNoZWNrVG9rZW5BbmRHZXRJbmRleCh0aGlzLCB0b2tlbik7XG4gICAgICAgIH1cbiAgICAgIH0gd2hpbGUgKCsraSA8IGlpKTtcblxuICAgICAgaWYgKHVwZGF0ZWQpIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlQ2xhc3NOYW1lKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNsYXNzTGlzdFByb3RvLnRvZ2dsZSA9IGZ1bmN0aW9uICh0b2tlbiwgZm9yY2UpIHtcbiAgICAgIHRva2VuICs9ICcnO1xuXG4gICAgICB2YXIgcmVzdWx0ID0gdGhpcy5jb250YWlucyh0b2tlbik7XG4gICAgICB2YXIgbWV0aG9kID0gcmVzdWx0ID8gZm9yY2UgIT09IHRydWUgJiYgJ3JlbW92ZScgOiBmb3JjZSAhPT0gZmFsc2UgJiYgJ2FkZCc7XG5cbiAgICAgIGlmIChtZXRob2QpIHtcbiAgICAgICAgdGhpc1ttZXRob2RdKHRva2VuKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZvcmNlID09PSB0cnVlIHx8IGZvcmNlID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gZm9yY2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAhcmVzdWx0O1xuICAgIH07XG5cbiAgICBjbGFzc0xpc3RQcm90by50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzLmpvaW4oJyAnKTtcbiAgICB9O1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEVsZW1lbnQucHJvdG90eXBlLCAnY2xhc3NMaXN0Jywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ2xhc3NMaXN0KHRoaXMpO1xuICAgICAgfSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgdGVzdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdfJyk7XG4gICAgdGVzdEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnYzEnLCAnYzInKTtcblxuICAgIGlmICghdGVzdEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdjMicpKSB7XG4gICAgICB2YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gY3JlYXRlTWV0aG9kKG1ldGhvZCkge1xuICAgICAgICB2YXIgb3JpZ2luYWwgPSBET01Ub2tlbkxpc3QucHJvdG90eXBlW21ldGhvZF07XG5cbiAgICAgICAgRE9NVG9rZW5MaXN0LnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgICAgIHRva2VuID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgb3JpZ2luYWwuY2FsbCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfTtcblxuICAgICAgY3JlYXRlTWV0aG9kKCdhZGQnKTtcbiAgICAgIGNyZWF0ZU1ldGhvZCgncmVtb3ZlJyk7XG4gICAgfVxuXG4gICAgdGVzdEVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZSgnYzMnLCBmYWxzZSk7XG5cbiAgICBpZiAodGVzdEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdjMycpKSB7XG4gICAgICB2YXIgX3RvZ2dsZSA9IERPTVRva2VuTGlzdC5wcm90b3R5cGUudG9nZ2xlO1xuXG4gICAgICBET01Ub2tlbkxpc3QucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uICh0b2tlbiwgZm9yY2UpIHtcbiAgICAgICAgaWYgKDEgaW4gYXJndW1lbnRzICYmICF0aGlzLmNvbnRhaW5zKHRva2VuKSA9PT0gIWZvcmNlKSB7XG4gICAgICAgICAgcmV0dXJuIGZvcmNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF90b2dnbGUuY2FsbCh0aGlzLCB0b2tlbik7XG4gICAgICB9O1xuICAgIH1cblxuICAgIHRlc3RFbGVtZW50ID0gbnVsbDtcbiAgfVxufVxuXG5pZiAodHlwZW9mIEZFQVRVUkVfTk9fSUUgPT09ICd1bmRlZmluZWQnKSB7XG4gIHZhciBfZmlsdGVyRW50cmllcyA9IGZ1bmN0aW9uIF9maWx0ZXJFbnRyaWVzKGtleSwgdmFsdWUpIHtcbiAgICB2YXIgaSA9IDAsXG4gICAgICAgIG4gPSBfZW50cmllcy5sZW5ndGgsXG4gICAgICAgIHJlc3VsdCA9IFtdO1xuICAgIGZvciAoOyBpIDwgbjsgaSsrKSB7XG4gICAgICBpZiAoX2VudHJpZXNbaV1ba2V5XSA9PSB2YWx1ZSkge1xuICAgICAgICByZXN1bHQucHVzaChfZW50cmllc1tpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFyIF9jbGVhckVudHJpZXMgPSBmdW5jdGlvbiBfY2xlYXJFbnRyaWVzKHR5cGUsIG5hbWUpIHtcbiAgICB2YXIgaSA9IF9lbnRyaWVzLmxlbmd0aCxcbiAgICAgICAgZW50cnk7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgZW50cnkgPSBfZW50cmllc1tpXTtcbiAgICAgIGlmIChlbnRyeS5lbnRyeVR5cGUgPT0gdHlwZSAmJiAobmFtZSA9PT0gdm9pZCAwIHx8IGVudHJ5Lm5hbWUgPT0gbmFtZSkpIHtcbiAgICAgICAgX2VudHJpZXMuc3BsaWNlKGksIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvLyBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4gIGlmICgncGVyZm9ybWFuY2UnIGluIHdpbmRvdyA9PT0gZmFsc2UpIHtcbiAgICB3aW5kb3cucGVyZm9ybWFuY2UgPSB7fTtcbiAgfVxuXG4gIGlmICgnbm93JyBpbiB3aW5kb3cucGVyZm9ybWFuY2UgPT09IGZhbHNlKSB7XG4gICAgdmFyIG5vd09mZnNldCA9IERhdGUubm93KCk7XG5cbiAgICBpZiAocGVyZm9ybWFuY2UudGltaW5nICYmIHBlcmZvcm1hbmNlLnRpbWluZy5uYXZpZ2F0aW9uU3RhcnQpIHtcbiAgICAgIG5vd09mZnNldCA9IHBlcmZvcm1hbmNlLnRpbWluZy5uYXZpZ2F0aW9uU3RhcnQ7XG4gICAgfVxuXG4gICAgd2luZG93LnBlcmZvcm1hbmNlLm5vdyA9IGZ1bmN0aW9uIG5vdygpIHtcbiAgICAgIHJldHVybiBEYXRlLm5vdygpIC0gbm93T2Zmc2V0O1xuICAgIH07XG4gIH1cblxuICB2YXIgc3RhcnRPZmZzZXQgPSBEYXRlLm5vdyA/IERhdGUubm93KCkgOiArbmV3IERhdGUoKTtcbiAgdmFyIF9lbnRyaWVzID0gW107XG4gIHZhciBfbWFya3NJbmRleCA9IHt9O1xuXG4gIDtcblxuICBpZiAoIXdpbmRvdy5wZXJmb3JtYW5jZS5tYXJrKSB7XG4gICAgd2luZG93LnBlcmZvcm1hbmNlLm1hcmsgPSB3aW5kb3cucGVyZm9ybWFuY2Uud2Via2l0TWFyayB8fCBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgdmFyIG1hcmsgPSB7XG4gICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgIGVudHJ5VHlwZTogXCJtYXJrXCIsXG4gICAgICAgIHN0YXJ0VGltZTogd2luZG93LnBlcmZvcm1hbmNlLm5vdygpLFxuICAgICAgICBkdXJhdGlvbjogMFxuICAgICAgfTtcblxuICAgICAgX2VudHJpZXMucHVzaChtYXJrKTtcbiAgICAgIF9tYXJrc0luZGV4W25hbWVdID0gbWFyaztcbiAgICB9O1xuICB9XG5cbiAgaWYgKCF3aW5kb3cucGVyZm9ybWFuY2UubWVhc3VyZSkge1xuICAgIHdpbmRvdy5wZXJmb3JtYW5jZS5tZWFzdXJlID0gd2luZG93LnBlcmZvcm1hbmNlLndlYmtpdE1lYXN1cmUgfHwgZnVuY3Rpb24gKG5hbWUsIHN0YXJ0TWFyaywgZW5kTWFyaykge1xuICAgICAgc3RhcnRNYXJrID0gX21hcmtzSW5kZXhbc3RhcnRNYXJrXS5zdGFydFRpbWU7XG4gICAgICBlbmRNYXJrID0gX21hcmtzSW5kZXhbZW5kTWFya10uc3RhcnRUaW1lO1xuXG4gICAgICBfZW50cmllcy5wdXNoKHtcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgZW50cnlUeXBlOiBcIm1lYXN1cmVcIixcbiAgICAgICAgc3RhcnRUaW1lOiBzdGFydE1hcmssXG4gICAgICAgIGR1cmF0aW9uOiBlbmRNYXJrIC0gc3RhcnRNYXJrXG4gICAgICB9KTtcbiAgICB9O1xuICB9XG5cbiAgaWYgKCF3aW5kb3cucGVyZm9ybWFuY2UuZ2V0RW50cmllc0J5VHlwZSkge1xuICAgIHdpbmRvdy5wZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlUeXBlID0gd2luZG93LnBlcmZvcm1hbmNlLndlYmtpdEdldEVudHJpZXNCeVR5cGUgfHwgZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgIHJldHVybiBfZmlsdGVyRW50cmllcyhcImVudHJ5VHlwZVwiLCB0eXBlKTtcbiAgICB9O1xuICB9XG5cbiAgaWYgKCF3aW5kb3cucGVyZm9ybWFuY2UuZ2V0RW50cmllc0J5TmFtZSkge1xuICAgIHdpbmRvdy5wZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlOYW1lID0gd2luZG93LnBlcmZvcm1hbmNlLndlYmtpdEdldEVudHJpZXNCeU5hbWUgfHwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHJldHVybiBfZmlsdGVyRW50cmllcyhcIm5hbWVcIiwgbmFtZSk7XG4gICAgfTtcbiAgfVxuXG4gIGlmICghd2luZG93LnBlcmZvcm1hbmNlLmNsZWFyTWFya3MpIHtcbiAgICB3aW5kb3cucGVyZm9ybWFuY2UuY2xlYXJNYXJrcyA9IHdpbmRvdy5wZXJmb3JtYW5jZS53ZWJraXRDbGVhck1hcmtzIHx8IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICBfY2xlYXJFbnRyaWVzKFwibWFya1wiLCBuYW1lKTtcbiAgICB9O1xuICB9XG5cbiAgaWYgKCF3aW5kb3cucGVyZm9ybWFuY2UuY2xlYXJNZWFzdXJlcykge1xuICAgIHdpbmRvdy5wZXJmb3JtYW5jZS5jbGVhck1lYXN1cmVzID0gd2luZG93LnBlcmZvcm1hbmNlLndlYmtpdENsZWFyTWVhc3VyZXMgfHwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIF9jbGVhckVudHJpZXMoXCJtZWFzdXJlXCIsIG5hbWUpO1xuICAgIH07XG4gIH1cblxuICBfUExBVEZPUk0ucGVyZm9ybWFuY2UgPSB3aW5kb3cucGVyZm9ybWFuY2U7XG59XG5cbmlmICh0eXBlb2YgRkVBVFVSRV9OT19JRSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgdmFyIGNvbiA9IHdpbmRvdy5jb25zb2xlID0gd2luZG93LmNvbnNvbGUgfHwge307XG4gIHZhciBub3AgPSBmdW5jdGlvbiBub3AoKSB7fTtcblxuICBpZiAoIWNvbi5tZW1vcnkpIGNvbi5tZW1vcnkgPSB7fTtcbiAgKCdhc3NlcnQsY2xlYXIsY291bnQsZGVidWcsZGlyLGRpcnhtbCxlcnJvcixleGNlcHRpb24sZ3JvdXAsJyArICdncm91cENvbGxhcHNlZCxncm91cEVuZCxpbmZvLGxvZyxtYXJrVGltZWxpbmUscHJvZmlsZSxwcm9maWxlcyxwcm9maWxlRW5kLCcgKyAnc2hvdyx0YWJsZSx0aW1lLHRpbWVFbmQsdGltZWxpbmUsdGltZWxpbmVFbmQsdGltZVN0YW1wLHRyYWNlLHdhcm4nKS5zcGxpdCgnLCcpLmZvckVhY2goZnVuY3Rpb24gKG0pIHtcbiAgICBpZiAoIWNvblttXSkgY29uW21dID0gbm9wO1xuICB9KTtcblxuICBpZiAoX3R5cGVvZihjb24ubG9nKSA9PT0gJ29iamVjdCcpIHtcbiAgICAnbG9nLGluZm8sd2FybixlcnJvcixhc3NlcnQsZGlyLGNsZWFyLHByb2ZpbGUscHJvZmlsZUVuZCcuc3BsaXQoJywnKS5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgICAgIGNvbnNvbGVbbWV0aG9kXSA9IHRoaXMuYmluZChjb25zb2xlW21ldGhvZF0sIGNvbnNvbGUpO1xuICAgIH0sIEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsKTtcbiAgfVxufVxuXG5pZiAodHlwZW9mIEZFQVRVUkVfTk9fSUUgPT09ICd1bmRlZmluZWQnKSB7XG4gIGlmICghd2luZG93LkN1c3RvbUV2ZW50IHx8IHR5cGVvZiB3aW5kb3cuQ3VzdG9tRXZlbnQgIT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgX0N1c3RvbUV2ZW50ID0gZnVuY3Rpb24gX0N1c3RvbUV2ZW50KGV2ZW50LCBwYXJhbXMpIHtcbiAgICAgIHBhcmFtcyA9IHBhcmFtcyB8fCB7XG4gICAgICAgIGJ1YmJsZXM6IGZhbHNlLFxuICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgZGV0YWlsOiB1bmRlZmluZWRcbiAgICAgIH07XG5cbiAgICAgIHZhciBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnQ3VzdG9tRXZlbnQnKTtcbiAgICAgIGV2dC5pbml0Q3VzdG9tRXZlbnQoZXZlbnQsIHBhcmFtcy5idWJibGVzLCBwYXJhbXMuY2FuY2VsYWJsZSwgcGFyYW1zLmRldGFpbCk7XG4gICAgICByZXR1cm4gZXZ0O1xuICAgIH07XG5cbiAgICBfQ3VzdG9tRXZlbnQucHJvdG90eXBlID0gd2luZG93LkV2ZW50LnByb3RvdHlwZTtcbiAgICB3aW5kb3cuQ3VzdG9tRXZlbnQgPSBfQ3VzdG9tRXZlbnQ7XG4gIH1cbn1cblxuaWYgKEVsZW1lbnQgJiYgIUVsZW1lbnQucHJvdG90eXBlLm1hdGNoZXMpIHtcbiAgdmFyIHByb3RvID0gRWxlbWVudC5wcm90b3R5cGU7XG4gIHByb3RvLm1hdGNoZXMgPSBwcm90by5tYXRjaGVzU2VsZWN0b3IgfHwgcHJvdG8ubW96TWF0Y2hlc1NlbGVjdG9yIHx8IHByb3RvLm1zTWF0Y2hlc1NlbGVjdG9yIHx8IHByb3RvLm9NYXRjaGVzU2VsZWN0b3IgfHwgcHJvdG8ud2Via2l0TWF0Y2hlc1NlbGVjdG9yO1xufVxuXG5leHBvcnQgdmFyIF9GRUFUVVJFID0ge1xuICBzaGFkb3dET006ICEhSFRNTEVsZW1lbnQucHJvdG90eXBlLmF0dGFjaFNoYWRvdyxcbiAgc2NvcGVkQ1NTOiAnc2NvcGVkJyBpbiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpLFxuICBodG1sVGVtcGxhdGVFbGVtZW50OiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBkLmlubmVySFRNTCA9ICc8dGVtcGxhdGU+PC90ZW1wbGF0ZT4nO1xuICAgIHJldHVybiAnY29udGVudCcgaW4gZC5jaGlsZHJlblswXTtcbiAgfSgpLFxuICBtdXRhdGlvbk9ic2VydmVyOiAhISh3aW5kb3cuTXV0YXRpb25PYnNlcnZlciB8fCB3aW5kb3cuV2ViS2l0TXV0YXRpb25PYnNlcnZlciksXG4gIGVuc3VyZUhUTUxUZW1wbGF0ZUVsZW1lbnQ6IGZ1bmN0aW9uIGVuc3VyZUhUTUxUZW1wbGF0ZUVsZW1lbnQodCkge1xuICAgIHJldHVybiB0O1xuICB9XG59O1xuXG5pZiAodHlwZW9mIEZFQVRVUkVfTk9fSUUgPT09ICd1bmRlZmluZWQnKSB7XG4gIHZhciBpc1NWR1RlbXBsYXRlID0gZnVuY3Rpb24gaXNTVkdUZW1wbGF0ZShlbCkge1xuICAgIHJldHVybiBlbC50YWdOYW1lID09PSAndGVtcGxhdGUnICYmIGVsLm5hbWVzcGFjZVVSSSA9PT0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJztcbiAgfTtcblxuICB2YXIgZml4U1ZHVGVtcGxhdGVFbGVtZW50ID0gZnVuY3Rpb24gZml4U1ZHVGVtcGxhdGVFbGVtZW50KGVsKSB7XG4gICAgdmFyIHRlbXBsYXRlID0gZWwub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZW1wbGF0ZScpO1xuICAgIHZhciBhdHRycyA9IGVsLmF0dHJpYnV0ZXM7XG4gICAgdmFyIGxlbmd0aCA9IGF0dHJzLmxlbmd0aDtcbiAgICB2YXIgYXR0ciA9IHZvaWQgMDtcblxuICAgIGVsLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRlbXBsYXRlLCBlbCk7XG5cbiAgICB3aGlsZSAobGVuZ3RoLS0gPiAwKSB7XG4gICAgICBhdHRyID0gYXR0cnNbbGVuZ3RoXTtcbiAgICAgIHRlbXBsYXRlLnNldEF0dHJpYnV0ZShhdHRyLm5hbWUsIGF0dHIudmFsdWUpO1xuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKGF0dHIubmFtZSk7XG4gICAgfVxuXG4gICAgZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbCk7XG5cbiAgICByZXR1cm4gZml4SFRNTFRlbXBsYXRlRWxlbWVudCh0ZW1wbGF0ZSk7XG4gIH07XG5cbiAgdmFyIGZpeEhUTUxUZW1wbGF0ZUVsZW1lbnQgPSBmdW5jdGlvbiBmaXhIVE1MVGVtcGxhdGVFbGVtZW50KHRlbXBsYXRlKSB7XG4gICAgdmFyIGNvbnRlbnQgPSB0ZW1wbGF0ZS5jb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgIHZhciBjaGlsZCA9IHZvaWQgMDtcblxuICAgIHdoaWxlIChjaGlsZCA9IHRlbXBsYXRlLmZpcnN0Q2hpbGQpIHtcbiAgICAgIGNvbnRlbnQuYXBwZW5kQ2hpbGQoY2hpbGQpO1xuICAgIH1cblxuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfTtcblxuICB2YXIgZml4SFRNTFRlbXBsYXRlRWxlbWVudFJvb3QgPSBmdW5jdGlvbiBmaXhIVE1MVGVtcGxhdGVFbGVtZW50Um9vdCh0ZW1wbGF0ZSkge1xuICAgIHZhciBjb250ZW50ID0gZml4SFRNTFRlbXBsYXRlRWxlbWVudCh0ZW1wbGF0ZSkuY29udGVudDtcbiAgICB2YXIgY2hpbGRUZW1wbGF0ZXMgPSBjb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RlbXBsYXRlJyk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBjaGlsZFRlbXBsYXRlcy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICB2YXIgY2hpbGQgPSBjaGlsZFRlbXBsYXRlc1tpXTtcblxuICAgICAgaWYgKGlzU1ZHVGVtcGxhdGUoY2hpbGQpKSB7XG4gICAgICAgIGZpeFNWR1RlbXBsYXRlRWxlbWVudChjaGlsZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaXhIVE1MVGVtcGxhdGVFbGVtZW50KGNoaWxkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGVtcGxhdGU7XG4gIH07XG5cbiAgaWYgKCFfRkVBVFVSRS5odG1sVGVtcGxhdGVFbGVtZW50KSB7XG4gICAgX0ZFQVRVUkUuZW5zdXJlSFRNTFRlbXBsYXRlRWxlbWVudCA9IGZpeEhUTUxUZW1wbGF0ZUVsZW1lbnRSb290O1xuICB9XG59XG5cbnZhciBzaGFkb3dQb2x5ID0gd2luZG93LlNoYWRvd0RPTVBvbHlmaWxsIHx8IG51bGw7XG5cbmV4cG9ydCB2YXIgX0RPTSA9IHtcbiAgRWxlbWVudDogRWxlbWVudCxcbiAgTm9kZUxpc3Q6IE5vZGVMaXN0LFxuICBTVkdFbGVtZW50OiBTVkdFbGVtZW50LFxuICBib3VuZGFyeTogJ2F1cmVsaWEtZG9tLWJvdW5kYXJ5JyxcbiAgYWRkRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGNhbGxiYWNrLCBjYXB0dXJlKSB7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGNhbGxiYWNrLCBjYXB0dXJlKTtcbiAgfSxcbiAgcmVtb3ZlRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGNhbGxiYWNrLCBjYXB0dXJlKSB7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGNhbGxiYWNrLCBjYXB0dXJlKTtcbiAgfSxcbiAgYWRvcHROb2RlOiBmdW5jdGlvbiBhZG9wdE5vZGUobm9kZSkge1xuICAgIHJldHVybiBkb2N1bWVudC5hZG9wdE5vZGUobm9kZSk7XG4gIH0sXG4gIGNyZWF0ZUF0dHJpYnV0ZTogZnVuY3Rpb24gY3JlYXRlQXR0cmlidXRlKG5hbWUpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlQXR0cmlidXRlKG5hbWUpO1xuICB9LFxuICBjcmVhdGVFbGVtZW50OiBmdW5jdGlvbiBjcmVhdGVFbGVtZW50KHRhZ05hbWUpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgfSxcbiAgY3JlYXRlVGV4dE5vZGU6IGZ1bmN0aW9uIGNyZWF0ZVRleHROb2RlKHRleHQpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCk7XG4gIH0sXG4gIGNyZWF0ZUNvbW1lbnQ6IGZ1bmN0aW9uIGNyZWF0ZUNvbW1lbnQodGV4dCkge1xuICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVDb21tZW50KHRleHQpO1xuICB9LFxuICBjcmVhdGVEb2N1bWVudEZyYWdtZW50OiBmdW5jdGlvbiBjcmVhdGVEb2N1bWVudEZyYWdtZW50KCkge1xuICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gIH0sXG4gIGNyZWF0ZVRlbXBsYXRlRWxlbWVudDogZnVuY3Rpb24gY3JlYXRlVGVtcGxhdGVFbGVtZW50KCkge1xuICAgIHZhciB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJyk7XG4gICAgcmV0dXJuIF9GRUFUVVJFLmVuc3VyZUhUTUxUZW1wbGF0ZUVsZW1lbnQodGVtcGxhdGUpO1xuICB9LFxuICBjcmVhdGVNdXRhdGlvbk9ic2VydmVyOiBmdW5jdGlvbiBjcmVhdGVNdXRhdGlvbk9ic2VydmVyKGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIG5ldyAod2luZG93Lk11dGF0aW9uT2JzZXJ2ZXIgfHwgd2luZG93LldlYktpdE11dGF0aW9uT2JzZXJ2ZXIpKGNhbGxiYWNrKTtcbiAgfSxcbiAgY3JlYXRlQ3VzdG9tRXZlbnQ6IGZ1bmN0aW9uIGNyZWF0ZUN1c3RvbUV2ZW50KGV2ZW50VHlwZSwgb3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgd2luZG93LkN1c3RvbUV2ZW50KGV2ZW50VHlwZSwgb3B0aW9ucyk7XG4gIH0sXG4gIGRpc3BhdGNoRXZlbnQ6IGZ1bmN0aW9uIGRpc3BhdGNoRXZlbnQoZXZ0KSB7XG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChldnQpO1xuICB9LFxuICBnZXRDb21wdXRlZFN0eWxlOiBmdW5jdGlvbiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIH0sXG4gIGdldEVsZW1lbnRCeUlkOiBmdW5jdGlvbiBnZXRFbGVtZW50QnlJZChpZCkge1xuICAgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gIH0sXG4gIHF1ZXJ5U2VsZWN0b3I6IGZ1bmN0aW9uIHF1ZXJ5U2VsZWN0b3IocXVlcnkpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihxdWVyeSk7XG4gIH0sXG4gIHF1ZXJ5U2VsZWN0b3JBbGw6IGZ1bmN0aW9uIHF1ZXJ5U2VsZWN0b3JBbGwocXVlcnkpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChxdWVyeSk7XG4gIH0sXG4gIG5leHRFbGVtZW50U2libGluZzogZnVuY3Rpb24gbmV4dEVsZW1lbnRTaWJsaW5nKGVsZW1lbnQpIHtcbiAgICBpZiAoZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmcpIHtcbiAgICAgIHJldHVybiBlbGVtZW50Lm5leHRFbGVtZW50U2libGluZztcbiAgICB9XG4gICAgZG8ge1xuICAgICAgZWxlbWVudCA9IGVsZW1lbnQubmV4dFNpYmxpbmc7XG4gICAgfSB3aGlsZSAoZWxlbWVudCAmJiBlbGVtZW50Lm5vZGVUeXBlICE9PSAxKTtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfSxcbiAgY3JlYXRlVGVtcGxhdGVGcm9tTWFya3VwOiBmdW5jdGlvbiBjcmVhdGVUZW1wbGF0ZUZyb21NYXJrdXAobWFya3VwKSB7XG4gICAgdmFyIHBhcnNlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHBhcnNlci5pbm5lckhUTUwgPSBtYXJrdXA7XG5cbiAgICB2YXIgdGVtcCA9IHBhcnNlci5maXJzdEVsZW1lbnRDaGlsZDtcbiAgICBpZiAoIXRlbXAgfHwgdGVtcC5ub2RlTmFtZSAhPT0gJ1RFTVBMQVRFJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUZW1wbGF0ZSBtYXJrdXAgbXVzdCBiZSB3cmFwcGVkIGluIGEgPHRlbXBsYXRlPiBlbGVtZW50IGUuZy4gPHRlbXBsYXRlPiA8IS0tIG1hcmt1cCBoZXJlIC0tPiA8L3RlbXBsYXRlPicpO1xuICAgIH1cblxuICAgIHJldHVybiBfRkVBVFVSRS5lbnN1cmVIVE1MVGVtcGxhdGVFbGVtZW50KHRlbXApO1xuICB9LFxuICBhcHBlbmROb2RlOiBmdW5jdGlvbiBhcHBlbmROb2RlKG5ld05vZGUsIHBhcmVudE5vZGUpIHtcbiAgICAocGFyZW50Tm9kZSB8fCBkb2N1bWVudC5ib2R5KS5hcHBlbmRDaGlsZChuZXdOb2RlKTtcbiAgfSxcbiAgcmVwbGFjZU5vZGU6IGZ1bmN0aW9uIHJlcGxhY2VOb2RlKG5ld05vZGUsIG5vZGUsIHBhcmVudE5vZGUpIHtcbiAgICBpZiAobm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICBub2RlLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKG5ld05vZGUsIG5vZGUpO1xuICAgIH0gZWxzZSBpZiAoc2hhZG93UG9seSAhPT0gbnVsbCkge1xuICAgICAgc2hhZG93UG9seS51bndyYXAocGFyZW50Tm9kZSkucmVwbGFjZUNoaWxkKHNoYWRvd1BvbHkudW53cmFwKG5ld05vZGUpLCBzaGFkb3dQb2x5LnVud3JhcChub2RlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcmVudE5vZGUucmVwbGFjZUNoaWxkKG5ld05vZGUsIG5vZGUpO1xuICAgIH1cbiAgfSxcbiAgcmVtb3ZlTm9kZTogZnVuY3Rpb24gcmVtb3ZlTm9kZShub2RlLCBwYXJlbnROb2RlKSB7XG4gICAgaWYgKG5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgbm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpO1xuICAgIH0gZWxzZSBpZiAocGFyZW50Tm9kZSkge1xuICAgICAgaWYgKHNoYWRvd1BvbHkgIT09IG51bGwpIHtcbiAgICAgICAgc2hhZG93UG9seS51bndyYXAocGFyZW50Tm9kZSkucmVtb3ZlQ2hpbGQoc2hhZG93UG9seS51bndyYXAobm9kZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyZW50Tm9kZS5yZW1vdmVDaGlsZChub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGluamVjdFN0eWxlczogZnVuY3Rpb24gaW5qZWN0U3R5bGVzKHN0eWxlcywgZGVzdGluYXRpb24sIHByZXBlbmQsIGlkKSB7XG4gICAgaWYgKGlkKSB7XG4gICAgICB2YXIgb2xkU3R5bGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gICAgICBpZiAob2xkU3R5bGUpIHtcbiAgICAgICAgdmFyIGlzU3R5bGVUYWcgPSBvbGRTdHlsZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdzdHlsZSc7XG5cbiAgICAgICAgaWYgKGlzU3R5bGVUYWcpIHtcbiAgICAgICAgICBvbGRTdHlsZS5pbm5lckhUTUwgPSBzdHlsZXM7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgcHJvdmlkZWQgaWQgZG9lcyBub3QgaW5kaWNhdGUgYSBzdHlsZSB0YWcuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgIG5vZGUuaW5uZXJIVE1MID0gc3R5bGVzO1xuICAgIG5vZGUudHlwZSA9ICd0ZXh0L2Nzcyc7XG5cbiAgICBpZiAoaWQpIHtcbiAgICAgIG5vZGUuaWQgPSBpZDtcbiAgICB9XG5cbiAgICBkZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uIHx8IGRvY3VtZW50LmhlYWQ7XG5cbiAgICBpZiAocHJlcGVuZCAmJiBkZXN0aW5hdGlvbi5jaGlsZE5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGRlc3RpbmF0aW9uLmluc2VydEJlZm9yZShub2RlLCBkZXN0aW5hdGlvbi5jaGlsZE5vZGVzWzBdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVzdGluYXRpb24uYXBwZW5kQ2hpbGQobm9kZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplKCkge1xuICBpZiAoaXNJbml0aWFsaXplZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGluaXRpYWxpemVQQUwoZnVuY3Rpb24gKHBsYXRmb3JtLCBmZWF0dXJlLCBkb20pIHtcbiAgICBPYmplY3QuYXNzaWduKHBsYXRmb3JtLCBfUExBVEZPUk0pO1xuICAgIE9iamVjdC5hc3NpZ24oZmVhdHVyZSwgX0ZFQVRVUkUpO1xuICAgIE9iamVjdC5hc3NpZ24oZG9tLCBfRE9NKTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkb20sICd0aXRsZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gZG9jdW1lbnQudGl0bGU7XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbiBzZXQodmFsdWUpIHtcbiAgICAgICAgZG9jdW1lbnQudGl0bGUgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkb20sICdhY3RpdmVFbGVtZW50Jywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHBsYXRmb3JtLCAnWE1MSHR0cFJlcXVlc3QnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHBsYXRmb3JtLmdsb2JhbC5YTUxIdHRwUmVxdWVzdDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///aurelia-pal-browser\n")},"aurelia-templating-binding":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("/* unused harmony export AttributeMap */\n/* unused harmony export ChildInterpolationBinding */\n/* unused harmony export InterpolationBinding */\n/* unused harmony export InterpolationBindingExpression */\n/* unused harmony export LetBinding */\n/* unused harmony export LetExpression */\n/* unused harmony export LetInterpolationBinding */\n/* unused harmony export LetInterpolationBindingExpression */\n/* unused harmony export SyntaxInterpreter */\n/* unused harmony export TemplatingBindingLanguage */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"configure\", function() { return configure; });\n/* harmony import */ var aurelia_templating__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3);\n/* harmony import */ var aurelia_binding__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1);\n/* harmony import */ var aurelia_logging__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5);\n\n\n\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nfunction __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\n\nvar AttributeMap = (function () {\r\n    function AttributeMap(svg) {\r\n        this.elements = Object.create(null);\r\n        this.allElements = Object.create(null);\r\n        this.svg = svg;\r\n        this.registerUniversal('accesskey', 'accessKey');\r\n        this.registerUniversal('contenteditable', 'contentEditable');\r\n        this.registerUniversal('tabindex', 'tabIndex');\r\n        this.registerUniversal('textcontent', 'textContent');\r\n        this.registerUniversal('innerhtml', 'innerHTML');\r\n        this.registerUniversal('scrolltop', 'scrollTop');\r\n        this.registerUniversal('scrollleft', 'scrollLeft');\r\n        this.registerUniversal('readonly', 'readOnly');\r\n        this.register('label', 'for', 'htmlFor');\r\n        this.register('img', 'usemap', 'useMap');\r\n        this.register('input', 'maxlength', 'maxLength');\r\n        this.register('input', 'minlength', 'minLength');\r\n        this.register('input', 'formaction', 'formAction');\r\n        this.register('input', 'formenctype', 'formEncType');\r\n        this.register('input', 'formmethod', 'formMethod');\r\n        this.register('input', 'formnovalidate', 'formNoValidate');\r\n        this.register('input', 'formtarget', 'formTarget');\r\n        this.register('textarea', 'maxlength', 'maxLength');\r\n        this.register('td', 'rowspan', 'rowSpan');\r\n        this.register('td', 'colspan', 'colSpan');\r\n        this.register('th', 'rowspan', 'rowSpan');\r\n        this.register('th', 'colspan', 'colSpan');\r\n    }\r\n    AttributeMap.prototype.register = function (elementName, attributeName, propertyName) {\r\n        elementName = elementName.toLowerCase();\r\n        attributeName = attributeName.toLowerCase();\r\n        var element = this.elements[elementName] = (this.elements[elementName] || Object.create(null));\r\n        element[attributeName] = propertyName;\r\n    };\r\n    AttributeMap.prototype.registerUniversal = function (attributeName, propertyName) {\r\n        attributeName = attributeName.toLowerCase();\r\n        this.allElements[attributeName] = propertyName;\r\n    };\r\n    AttributeMap.prototype.map = function (elementName, attributeName) {\r\n        if (this.svg.isStandardSvgAttribute(elementName, attributeName)) {\r\n            return attributeName;\r\n        }\r\n        elementName = elementName.toLowerCase();\r\n        attributeName = attributeName.toLowerCase();\r\n        var element = this.elements[elementName];\r\n        if (element !== undefined && attributeName in element) {\r\n            return element[attributeName];\r\n        }\r\n        if (attributeName in this.allElements) {\r\n            return this.allElements[attributeName];\r\n        }\r\n        if (/(?:^data-)|(?:^aria-)|:/.test(attributeName)) {\r\n            return attributeName;\r\n        }\r\n        return Object(aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"camelCase\"])(attributeName);\r\n    };\r\n    AttributeMap.inject = [aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"SVGAnalyzer\"]];\r\n    return AttributeMap;\r\n}());\n\nvar InterpolationBindingExpression = (function () {\r\n    function InterpolationBindingExpression(observerLocator, targetProperty, parts, mode, lookupFunctions, attribute) {\r\n        this.observerLocator = observerLocator;\r\n        this.targetProperty = targetProperty;\r\n        this.parts = parts;\r\n        this.mode = mode;\r\n        this.lookupFunctions = lookupFunctions;\r\n        this.attribute = this.attrToRemove = attribute;\r\n        this.discrete = false;\r\n    }\r\n    InterpolationBindingExpression.prototype.createBinding = function (target) {\r\n        if (this.parts.length === 3) {\r\n            return new ChildInterpolationBinding(target, this.observerLocator, this.parts[1], this.mode, this.lookupFunctions, this.targetProperty, this.parts[0], this.parts[2]);\r\n        }\r\n        return new InterpolationBinding(this.observerLocator, this.parts, target, this.targetProperty, this.mode, this.lookupFunctions);\r\n    };\r\n    return InterpolationBindingExpression;\r\n}());\r\nfunction validateTarget(target, propertyName) {\r\n    if (propertyName === 'style') {\r\n        aurelia_logging__WEBPACK_IMPORTED_MODULE_2__[\"getLogger\"]('templating-binding')\r\n            .info('Internet Explorer does not support interpolation in \"style\" attributes.  Use the style attribute\\'s alias, \"css\" instead.');\r\n    }\r\n    else if (target.parentElement && target.parentElement.nodeName === 'TEXTAREA' && propertyName === 'textContent') {\r\n        throw new Error('Interpolation binding cannot be used in the content of a textarea element.  Use <textarea value.bind=\"expression\"><\/textarea> instead.');\r\n    }\r\n}\r\nvar InterpolationBinding = (function () {\r\n    function InterpolationBinding(observerLocator, parts, target, targetProperty, mode, lookupFunctions) {\r\n        validateTarget(target, targetProperty);\r\n        this.observerLocator = observerLocator;\r\n        this.parts = parts;\r\n        this.target = target;\r\n        this.targetProperty = targetProperty;\r\n        this.targetAccessor = observerLocator.getAccessor(target, targetProperty);\r\n        this.mode = mode;\r\n        this.lookupFunctions = lookupFunctions;\r\n    }\r\n    InterpolationBinding.prototype.interpolate = function () {\r\n        if (this.isBound) {\r\n            var value = '';\r\n            var parts = this.parts;\r\n            for (var i = 0, ii = parts.length; i < ii; i++) {\r\n                value += (i % 2 === 0 ? parts[i] : this[\"childBinding\".concat(i)].value);\r\n            }\r\n            this.targetAccessor.setValue(value, this.target, this.targetProperty);\r\n        }\r\n    };\r\n    InterpolationBinding.prototype.updateOneTimeBindings = function () {\r\n        for (var i = 1, ii = this.parts.length; i < ii; i += 2) {\r\n            var child = this[\"childBinding\".concat(i)];\r\n            if (child.mode === aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"bindingMode\"].oneTime) {\r\n                child.call();\r\n            }\r\n        }\r\n    };\r\n    InterpolationBinding.prototype.bind = function (source) {\r\n        if (this.isBound) {\r\n            if (this.source === source) {\r\n                return;\r\n            }\r\n            this.unbind();\r\n        }\r\n        this.source = source;\r\n        var parts = this.parts;\r\n        for (var i = 1, ii = parts.length; i < ii; i += 2) {\r\n            var binding = new ChildInterpolationBinding(this, this.observerLocator, parts[i], this.mode, this.lookupFunctions);\r\n            binding.bind(source);\r\n            this[\"childBinding\".concat(i)] = binding;\r\n        }\r\n        this.isBound = true;\r\n        this.interpolate();\r\n    };\r\n    InterpolationBinding.prototype.unbind = function () {\r\n        if (!this.isBound) {\r\n            return;\r\n        }\r\n        this.isBound = false;\r\n        this.source = null;\r\n        var parts = this.parts;\r\n        for (var i = 1, ii = parts.length; i < ii; i += 2) {\r\n            var name_1 = \"childBinding\".concat(i);\r\n            this[name_1].unbind();\r\n        }\r\n    };\r\n    return InterpolationBinding;\r\n}());\r\nvar ChildInterpolationBinding = (function () {\r\n    function ChildInterpolationBinding(target, observerLocator, sourceExpression, mode, lookupFunctions, targetProperty, left, right) {\r\n        if (target instanceof InterpolationBinding) {\r\n            this.parent = target;\r\n        }\r\n        else {\r\n            validateTarget(target, targetProperty);\r\n            this.target = target;\r\n            this.targetProperty = targetProperty;\r\n            this.targetAccessor = observerLocator.getAccessor(target, targetProperty);\r\n        }\r\n        this.observerLocator = observerLocator;\r\n        this.sourceExpression = sourceExpression;\r\n        this.mode = mode;\r\n        this.lookupFunctions = lookupFunctions;\r\n        this.left = left;\r\n        this.right = right;\r\n    }\r\n    ChildInterpolationBinding.prototype.updateTarget = function (value) {\r\n        value = value === null || value === undefined ? '' : value.toString();\r\n        if (value !== this.value) {\r\n            this.value = value;\r\n            if (this.parent) {\r\n                this.parent.interpolate();\r\n            }\r\n            else {\r\n                this.targetAccessor.setValue(this.left + value + this.right, this.target, this.targetProperty);\r\n            }\r\n        }\r\n    };\r\n    ChildInterpolationBinding.prototype.call = function () {\r\n        if (!this.isBound) {\r\n            return;\r\n        }\r\n        this.rawValue = this.sourceExpression.evaluate(this.source, this.lookupFunctions);\r\n        this.updateTarget(this.rawValue);\r\n        if (this.mode !== aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"bindingMode\"].oneTime) {\r\n            this._version++;\r\n            this.sourceExpression.connect(this, this.source);\r\n            if (this.rawValue instanceof Array) {\r\n                this.observeArray(this.rawValue);\r\n            }\r\n            this.unobserve(false);\r\n        }\r\n    };\r\n    ChildInterpolationBinding.prototype.bind = function (source) {\r\n        if (this.isBound) {\r\n            if (this.source === source) {\r\n                return;\r\n            }\r\n            this.unbind();\r\n        }\r\n        this.isBound = true;\r\n        this.source = source;\r\n        var sourceExpression = this.sourceExpression;\r\n        if (sourceExpression.bind) {\r\n            sourceExpression.bind(this, source, this.lookupFunctions);\r\n        }\r\n        this.rawValue = sourceExpression.evaluate(source, this.lookupFunctions);\r\n        this.updateTarget(this.rawValue);\r\n        if (this.mode === aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"bindingMode\"].oneWay) {\r\n            Object(aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"enqueueBindingConnect\"])(this);\r\n        }\r\n    };\r\n    ChildInterpolationBinding.prototype.unbind = function () {\r\n        if (!this.isBound) {\r\n            return;\r\n        }\r\n        this.isBound = false;\r\n        var sourceExpression = this.sourceExpression;\r\n        if (sourceExpression.unbind) {\r\n            sourceExpression.unbind(this, this.source);\r\n        }\r\n        this.source = null;\r\n        this.value = null;\r\n        this.rawValue = null;\r\n        this.unobserve(true);\r\n    };\r\n    ChildInterpolationBinding.prototype.connect = function (evaluate) {\r\n        if (!this.isBound) {\r\n            return;\r\n        }\r\n        if (evaluate) {\r\n            this.rawValue = this.sourceExpression.evaluate(this.source, this.lookupFunctions);\r\n            this.updateTarget(this.rawValue);\r\n        }\r\n        this.sourceExpression.connect(this, this.source);\r\n        if (this.rawValue instanceof Array) {\r\n            this.observeArray(this.rawValue);\r\n        }\r\n    };\r\n    ChildInterpolationBinding = __decorate([\r\n        Object(aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"connectable\"])()\r\n    ], ChildInterpolationBinding);\r\n    return ChildInterpolationBinding;\r\n}());\n\nvar LetExpression = (function () {\r\n    function LetExpression(observerLocator, targetProperty, sourceExpression, lookupFunctions, toBindingContext) {\r\n        this.observerLocator = observerLocator;\r\n        this.sourceExpression = sourceExpression;\r\n        this.targetProperty = targetProperty;\r\n        this.lookupFunctions = lookupFunctions;\r\n        this.toBindingContext = toBindingContext;\r\n    }\r\n    LetExpression.prototype.createBinding = function () {\r\n        return new LetBinding(this.observerLocator, this.sourceExpression, this.targetProperty, this.lookupFunctions, this.toBindingContext);\r\n    };\r\n    return LetExpression;\r\n}());\r\nvar LetBinding = (function () {\r\n    function LetBinding(observerLocator, sourceExpression, targetProperty, lookupFunctions, toBindingContext) {\r\n        this.observerLocator = observerLocator;\r\n        this.sourceExpression = sourceExpression;\r\n        this.targetProperty = targetProperty;\r\n        this.lookupFunctions = lookupFunctions;\r\n        this.source = null;\r\n        this.target = null;\r\n        this.toBindingContext = toBindingContext;\r\n    }\r\n    LetBinding.prototype.updateTarget = function () {\r\n        var value = this.sourceExpression.evaluate(this.source, this.lookupFunctions);\r\n        this.target[this.targetProperty] = value;\r\n    };\r\n    LetBinding.prototype.call = function (context) {\r\n        if (!this.isBound) {\r\n            return;\r\n        }\r\n        if (context === aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"sourceContext\"]) {\r\n            this.updateTarget();\r\n            return;\r\n        }\r\n        throw new Error(\"Unexpected call context \".concat(context));\r\n    };\r\n    LetBinding.prototype.bind = function (source) {\r\n        if (this.isBound) {\r\n            if (this.source === source) {\r\n                return;\r\n            }\r\n            this.unbind();\r\n        }\r\n        this.isBound = true;\r\n        this.source = source;\r\n        this.target = this.toBindingContext ? source.bindingContext : source.overrideContext;\r\n        if (this.sourceExpression.bind) {\r\n            this.sourceExpression.bind(this, source, this.lookupFunctions);\r\n        }\r\n        Object(aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"enqueueBindingConnect\"])(this);\r\n    };\r\n    LetBinding.prototype.unbind = function () {\r\n        if (!this.isBound) {\r\n            return;\r\n        }\r\n        this.isBound = false;\r\n        if (this.sourceExpression.unbind) {\r\n            this.sourceExpression.unbind(this, this.source);\r\n        }\r\n        this.source = null;\r\n        this.target = null;\r\n        this.unobserve(true);\r\n    };\r\n    LetBinding.prototype.unobserve = function (arg0) {\r\n        throw new Error('Method not implemented.');\r\n    };\r\n    LetBinding.prototype.connect = function () {\r\n        if (!this.isBound) {\r\n            return;\r\n        }\r\n        this.updateTarget();\r\n        this.sourceExpression.connect(this, this.source);\r\n    };\r\n    LetBinding = __decorate([\r\n        Object(aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"connectable\"])()\r\n    ], LetBinding);\r\n    return LetBinding;\r\n}());\n\nvar LetInterpolationBindingExpression = (function () {\r\n    function LetInterpolationBindingExpression(observerLocator, targetProperty, parts, lookupFunctions, toBindingContext) {\r\n        this.observerLocator = observerLocator;\r\n        this.targetProperty = targetProperty;\r\n        this.parts = parts;\r\n        this.lookupFunctions = lookupFunctions;\r\n        this.toBindingContext = toBindingContext;\r\n    }\r\n    LetInterpolationBindingExpression.prototype.createBinding = function () {\r\n        return new LetInterpolationBinding(this.observerLocator, this.targetProperty, this.parts, this.lookupFunctions, this.toBindingContext);\r\n    };\r\n    return LetInterpolationBindingExpression;\r\n}());\r\nvar LetInterpolationBinding = (function () {\r\n    function LetInterpolationBinding(observerLocator, targetProperty, parts, lookupFunctions, toBindingContext) {\r\n        this.observerLocator = observerLocator;\r\n        this.parts = parts;\r\n        this.targetProperty = targetProperty;\r\n        this.lookupFunctions = lookupFunctions;\r\n        this.toBindingContext = toBindingContext;\r\n        this.target = null;\r\n    }\r\n    LetInterpolationBinding.prototype.bind = function (source) {\r\n        if (this.isBound) {\r\n            if (this.source === source) {\r\n                return;\r\n            }\r\n            this.unbind();\r\n        }\r\n        this.isBound = true;\r\n        this.source = source;\r\n        this.target = this.toBindingContext ? source.bindingContext : source.overrideContext;\r\n        this.interpolationBinding = this.createInterpolationBinding();\r\n        this.interpolationBinding.bind(source);\r\n    };\r\n    LetInterpolationBinding.prototype.unbind = function () {\r\n        if (!this.isBound) {\r\n            return;\r\n        }\r\n        this.isBound = false;\r\n        this.source = null;\r\n        this.target = null;\r\n        this.interpolationBinding.unbind();\r\n        this.interpolationBinding = null;\r\n    };\r\n    LetInterpolationBinding.prototype.createInterpolationBinding = function () {\r\n        if (this.parts.length === 3) {\r\n            return new ChildInterpolationBinding(this.target, this.observerLocator, this.parts[1], aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"bindingMode\"].toView, this.lookupFunctions, this.targetProperty, this.parts[0], this.parts[2]);\r\n        }\r\n        return new InterpolationBinding(this.observerLocator, this.parts, this.target, this.targetProperty, aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"bindingMode\"].toView, this.lookupFunctions);\r\n    };\r\n    return LetInterpolationBinding;\r\n}());\n\nvar SyntaxInterpreter = (function () {\r\n    function SyntaxInterpreter(parser, observerLocator, eventManager, attributeMap) {\r\n        this.parser = parser;\r\n        this.observerLocator = observerLocator;\r\n        this.eventManager = eventManager;\r\n        this.attributeMap = attributeMap;\r\n    }\r\n    SyntaxInterpreter.prototype.interpret = function (resources, element, info, existingInstruction, context) {\r\n        if (info.command in this) {\r\n            return this[info.command](resources, element, info, existingInstruction, context);\r\n        }\r\n        return this.handleUnknownCommand(resources, element, info, existingInstruction, context);\r\n    };\r\n    SyntaxInterpreter.prototype.handleUnknownCommand = function (resources, element, info, existingInstruction, context) {\r\n        aurelia_logging__WEBPACK_IMPORTED_MODULE_2__[\"getLogger\"]('templating-binding').warn('Unknown binding command.', info);\r\n        return existingInstruction;\r\n    };\r\n    SyntaxInterpreter.prototype.determineDefaultBindingMode = function (element, attrName, context) {\r\n        var tagName = element.tagName.toLowerCase();\r\n        if (tagName === 'input' && (attrName === 'value' || attrName === 'files') && element.type !== 'checkbox' && element.type !== 'radio'\r\n            || tagName === 'input' && attrName === 'checked' && (element.type === 'checkbox' || element.type === 'radio')\r\n            || (tagName === 'textarea' || tagName === 'select') && attrName === 'value'\r\n            || (attrName === 'textcontent' || attrName === 'innerhtml') && element.contentEditable === 'true'\r\n            || attrName === 'scrolltop'\r\n            || attrName === 'scrollleft') {\r\n            return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"bindingMode\"].twoWay;\r\n        }\r\n        if (context\r\n            && attrName in context.attributes\r\n            && context.attributes[attrName]\r\n            && context.attributes[attrName].defaultBindingMode >= aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"bindingMode\"].oneTime) {\r\n            return context.attributes[attrName].defaultBindingMode;\r\n        }\r\n        return aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"bindingMode\"].toView;\r\n    };\r\n    SyntaxInterpreter.prototype.bind = function (resources, element, info, existingInstruction, context) {\r\n        var instruction = existingInstruction || aurelia_templating__WEBPACK_IMPORTED_MODULE_0__[/* BehaviorInstruction */ \"b\"].attribute(info.attrName);\r\n        instruction.attributes[info.attrName] = new aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"BindingExpression\"](this.observerLocator, this.attributeMap.map(element.tagName, info.attrName), this.parser.parse(info.attrValue), info.defaultBindingMode === undefined || info.defaultBindingMode === null\r\n            ? this.determineDefaultBindingMode(element, info.attrName, context)\r\n            : info.defaultBindingMode, resources.lookupFunctions);\r\n        return instruction;\r\n    };\r\n    SyntaxInterpreter.prototype.trigger = function (resources, element, info) {\r\n        return new aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"ListenerExpression\"](this.eventManager, info.attrName, this.parser.parse(info.attrValue), aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"delegationStrategy\"].none, true, resources.lookupFunctions);\r\n    };\r\n    SyntaxInterpreter.prototype.capture = function (resources, element, info) {\r\n        return new aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"ListenerExpression\"](this.eventManager, info.attrName, this.parser.parse(info.attrValue), aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"delegationStrategy\"].capturing, true, resources.lookupFunctions);\r\n    };\r\n    SyntaxInterpreter.prototype.delegate = function (resources, element, info) {\r\n        return new aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"ListenerExpression\"](this.eventManager, info.attrName, this.parser.parse(info.attrValue), aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"delegationStrategy\"].bubbling, true, resources.lookupFunctions);\r\n    };\r\n    SyntaxInterpreter.prototype.call = function (resources, element, info, existingInstruction) {\r\n        var instruction = existingInstruction || aurelia_templating__WEBPACK_IMPORTED_MODULE_0__[/* BehaviorInstruction */ \"b\"].attribute(info.attrName);\r\n        instruction.attributes[info.attrName] = new aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"CallExpression\"](this.observerLocator, info.attrName, this.parser.parse(info.attrValue), resources.lookupFunctions);\r\n        return instruction;\r\n    };\r\n    SyntaxInterpreter.prototype.options = function (resources, element, info, existingInstruction, context) {\r\n        var instruction = existingInstruction || aurelia_templating__WEBPACK_IMPORTED_MODULE_0__[/* BehaviorInstruction */ \"b\"].attribute(info.attrName);\r\n        var attrValue = info.attrValue;\r\n        var language = this.language;\r\n        var name = null;\r\n        var target = '';\r\n        var current;\r\n        var i;\r\n        var ii;\r\n        var inString = false;\r\n        var inEscape = false;\r\n        var foundName = false;\r\n        for (i = 0, ii = attrValue.length; i < ii; ++i) {\r\n            current = attrValue[i];\r\n            if (current === ';' && !inString) {\r\n                if (!foundName) {\r\n                    name = this._getPrimaryPropertyName(resources, context);\r\n                }\r\n                info = language.inspectAttribute(resources, '?', name, target.trim());\r\n                language.createAttributeInstruction(resources, element, info, instruction, context);\r\n                if (!instruction.attributes[info.attrName]) {\r\n                    instruction.attributes[info.attrName] = info.attrValue;\r\n                }\r\n                target = '';\r\n                name = null;\r\n            }\r\n            else if (current === ':' && name === null) {\r\n                foundName = true;\r\n                name = target.trim();\r\n                target = '';\r\n            }\r\n            else if (current === '\\\\') {\r\n                target += current;\r\n                inEscape = true;\r\n                continue;\r\n            }\r\n            else {\r\n                target += current;\r\n                if (name !== null && inEscape === false && current === '\\'') {\r\n                    inString = !inString;\r\n                }\r\n            }\r\n            inEscape = false;\r\n        }\r\n        if (!foundName) {\r\n            name = this._getPrimaryPropertyName(resources, context);\r\n        }\r\n        if (name !== null) {\r\n            info = language.inspectAttribute(resources, '?', name, target.trim());\r\n            language.createAttributeInstruction(resources, element, info, instruction, context);\r\n            if (!instruction.attributes[info.attrName]) {\r\n                instruction.attributes[info.attrName] = info.attrValue;\r\n            }\r\n        }\r\n        return instruction;\r\n    };\r\n    SyntaxInterpreter.prototype._getPrimaryPropertyName = function (resources, context) {\r\n        var type = resources.getAttribute(context.attributeName);\r\n        if (type && type.primaryProperty) {\r\n            return type.primaryProperty.attribute;\r\n        }\r\n        return null;\r\n    };\r\n    SyntaxInterpreter.prototype['for'] = function (resources, element, info, existingInstruction) {\r\n        var parts;\r\n        var keyValue;\r\n        var instruction;\r\n        var attrValue;\r\n        var isDestructuring;\r\n        attrValue = info.attrValue;\r\n        isDestructuring = attrValue.match(/^ *[[].+[\\]]/);\r\n        parts = isDestructuring ? attrValue.split('of ') : attrValue.split(' of ');\r\n        if (parts.length !== 2) {\r\n            throw new Error('Incorrect syntax for \"for\". The form is: \"$local of $items\" or \"[$key, $value] of $items\".');\r\n        }\r\n        instruction = existingInstruction || aurelia_templating__WEBPACK_IMPORTED_MODULE_0__[/* BehaviorInstruction */ \"b\"].attribute(info.attrName);\r\n        if (isDestructuring) {\r\n            keyValue = parts[0].replace(/[[\\]]/g, '').replace(/,/g, ' ').replace(/\\s+/g, ' ').trim().split(' ');\r\n            instruction.attributes.key = keyValue[0];\r\n            instruction.attributes.value = keyValue[1];\r\n        }\r\n        else {\r\n            instruction.attributes.local = parts[0];\r\n        }\r\n        instruction.attributes.items = new aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"BindingExpression\"](this.observerLocator, 'items', this.parser.parse(parts[1]), aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"bindingMode\"].toView, resources.lookupFunctions);\r\n        return instruction;\r\n    };\r\n    SyntaxInterpreter.prototype['two-way'] = function (resources, element, info, existingInstruction) {\r\n        var instruction = existingInstruction || aurelia_templating__WEBPACK_IMPORTED_MODULE_0__[/* BehaviorInstruction */ \"b\"].attribute(info.attrName);\r\n        instruction.attributes[info.attrName] = new aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"BindingExpression\"](this.observerLocator, this.attributeMap.map(element.tagName, info.attrName), this.parser.parse(info.attrValue), aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"bindingMode\"].twoWay, resources.lookupFunctions);\r\n        return instruction;\r\n    };\r\n    SyntaxInterpreter.prototype['to-view'] = function (resources, element, info, existingInstruction) {\r\n        var instruction = existingInstruction || aurelia_templating__WEBPACK_IMPORTED_MODULE_0__[/* BehaviorInstruction */ \"b\"].attribute(info.attrName);\r\n        instruction.attributes[info.attrName] = new aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"BindingExpression\"](this.observerLocator, this.attributeMap.map(element.tagName, info.attrName), this.parser.parse(info.attrValue), aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"bindingMode\"].toView, resources.lookupFunctions);\r\n        return instruction;\r\n    };\r\n    SyntaxInterpreter.prototype['from-view'] = function (resources, element, info, existingInstruction) {\r\n        var instruction = existingInstruction || aurelia_templating__WEBPACK_IMPORTED_MODULE_0__[/* BehaviorInstruction */ \"b\"].attribute(info.attrName);\r\n        instruction.attributes[info.attrName] = new aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"BindingExpression\"](this.observerLocator, this.attributeMap.map(element.tagName, info.attrName), this.parser.parse(info.attrValue), aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"bindingMode\"].fromView, resources.lookupFunctions);\r\n        return instruction;\r\n    };\r\n    SyntaxInterpreter.prototype['one-time'] = function (resources, element, info, existingInstruction) {\r\n        var instruction = existingInstruction || aurelia_templating__WEBPACK_IMPORTED_MODULE_0__[/* BehaviorInstruction */ \"b\"].attribute(info.attrName);\r\n        instruction.attributes[info.attrName] = new aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"BindingExpression\"](this.observerLocator, this.attributeMap.map(element.tagName, info.attrName), this.parser.parse(info.attrValue), aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"bindingMode\"].oneTime, resources.lookupFunctions);\r\n        return instruction;\r\n    };\r\n    SyntaxInterpreter.inject = [aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"Parser\"], aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"ObserverLocator\"], aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"EventManager\"], AttributeMap];\r\n    return SyntaxInterpreter;\r\n}());\r\nObject.defineProperty(SyntaxInterpreter.prototype, 'one-way', Object.getOwnPropertyDescriptor(SyntaxInterpreter.prototype, 'to-view'));\n\nvar info = {};\r\nvar TemplatingBindingLanguage = (function (_super) {\r\n    __extends(TemplatingBindingLanguage, _super);\r\n    function TemplatingBindingLanguage(parser, observerLocator, syntaxInterpreter, attributeMap) {\r\n        var _this = _super.call(this) || this;\r\n        _this.parser = parser;\r\n        _this.observerLocator = observerLocator;\r\n        _this.syntaxInterpreter = syntaxInterpreter;\r\n        _this.emptyStringExpression = _this.parser.parse('\\'\\'');\r\n        syntaxInterpreter.language = _this;\r\n        _this.attributeMap = attributeMap;\r\n        _this.toBindingContextAttr = 'to-binding-context';\r\n        return _this;\r\n    }\r\n    TemplatingBindingLanguage.prototype.inspectAttribute = function (resources, elementName, attrName, attrValue) {\r\n        var parts = attrName.split('.');\r\n        info.defaultBindingMode = null;\r\n        if (parts.length === 2) {\r\n            info.attrName = parts[0].trim();\r\n            info.attrValue = attrValue;\r\n            info.command = parts[1].trim();\r\n            if (info.command === 'ref') {\r\n                info.expression = new aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"NameExpression\"](this.parser.parse(attrValue), info.attrName, resources.lookupFunctions);\r\n                info.command = null;\r\n                info.attrName = 'ref';\r\n            }\r\n            else {\r\n                info.expression = null;\r\n            }\r\n        }\r\n        else if (attrName === 'ref') {\r\n            info.attrName = attrName;\r\n            info.attrValue = attrValue;\r\n            info.command = null;\r\n            info.expression = new aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"NameExpression\"](this.parser.parse(attrValue), 'element', resources.lookupFunctions);\r\n        }\r\n        else {\r\n            info.attrName = attrName;\r\n            info.attrValue = attrValue;\r\n            info.command = null;\r\n            var interpolationParts = this.parseInterpolation(resources, attrValue);\r\n            if (interpolationParts === null) {\r\n                info.expression = null;\r\n            }\r\n            else {\r\n                info.expression = new InterpolationBindingExpression(this.observerLocator, this.attributeMap.map(elementName, attrName), interpolationParts, aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"bindingMode\"].toView, resources.lookupFunctions, attrName);\r\n            }\r\n        }\r\n        return info;\r\n    };\r\n    TemplatingBindingLanguage.prototype.createAttributeInstruction = function (resources, element, theInfo, existingInstruction, context) {\r\n        var instruction;\r\n        if (theInfo.expression) {\r\n            if (theInfo.attrName === 'ref') {\r\n                return theInfo.expression;\r\n            }\r\n            instruction = existingInstruction || aurelia_templating__WEBPACK_IMPORTED_MODULE_0__[/* BehaviorInstruction */ \"b\"].attribute(theInfo.attrName);\r\n            instruction.attributes[theInfo.attrName] = theInfo.expression;\r\n        }\r\n        else if (theInfo.command) {\r\n            instruction = this.syntaxInterpreter.interpret(resources, element, theInfo, existingInstruction, context);\r\n        }\r\n        return instruction;\r\n    };\r\n    TemplatingBindingLanguage.prototype.createLetExpressions = function (resources, letElement) {\r\n        var expressions = [];\r\n        var attributes = letElement.attributes;\r\n        var attr;\r\n        var parts;\r\n        var attrName;\r\n        var attrValue;\r\n        var command;\r\n        var toBindingContextAttr = this.toBindingContextAttr;\r\n        var toBindingContext = letElement.hasAttribute(toBindingContextAttr);\r\n        for (var i = 0, ii = attributes.length; ii > i; ++i) {\r\n            attr = attributes[i];\r\n            attrName = attr.name;\r\n            attrValue = attr.nodeValue;\r\n            parts = attrName.split('.');\r\n            if (attrName === toBindingContextAttr) {\r\n                continue;\r\n            }\r\n            if (parts.length === 2) {\r\n                command = parts[1];\r\n                if (command !== 'bind') {\r\n                    aurelia_logging__WEBPACK_IMPORTED_MODULE_2__[\"getLogger\"]('templating-binding-language')\r\n                        .warn(\"Detected invalid let command. Expected \\\"\".concat(parts[0], \".bind\\\", given \\\"\").concat(attrName, \"\\\"\"));\r\n                    continue;\r\n                }\r\n                expressions.push(new LetExpression(this.observerLocator, Object(aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"camelCase\"])(parts[0]), this.parser.parse(attrValue), resources.lookupFunctions, toBindingContext));\r\n            }\r\n            else {\r\n                attrName = Object(aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"camelCase\"])(attrName);\r\n                parts = this.parseInterpolation(resources, attrValue);\r\n                if (parts === null) {\r\n                    aurelia_logging__WEBPACK_IMPORTED_MODULE_2__[\"getLogger\"]('templating-binding-language')\r\n                        .warn(\"Detected string literal in let bindings. Did you mean \\\"\".concat(attrName, \".bind=\").concat(attrValue, \"\\\" or \\\"\").concat(attrName, \"=${\").concat(attrValue, \"}\\\" ?\"));\r\n                }\r\n                if (parts) {\r\n                    expressions.push(new LetInterpolationBindingExpression(this.observerLocator, attrName, parts, resources.lookupFunctions, toBindingContext));\r\n                }\r\n                else {\r\n                    expressions.push(new LetExpression(this.observerLocator, attrName, new aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"LiteralString\"](attrValue), resources.lookupFunctions, toBindingContext));\r\n                }\r\n            }\r\n        }\r\n        return expressions;\r\n    };\r\n    TemplatingBindingLanguage.prototype.inspectTextContent = function (resources, value) {\r\n        var parts = this.parseInterpolation(resources, value);\r\n        if (parts === null) {\r\n            return null;\r\n        }\r\n        return new InterpolationBindingExpression(this.observerLocator, 'textContent', parts, aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"bindingMode\"].toView, resources.lookupFunctions, 'textContent');\r\n    };\r\n    TemplatingBindingLanguage.prototype.parseInterpolation = function (resources, value) {\r\n        var i = value.indexOf('${', 0);\r\n        var ii = value.length;\r\n        var char;\r\n        var pos = 0;\r\n        var open = 0;\r\n        var quote = null;\r\n        var interpolationStart;\r\n        var parts;\r\n        var partIndex = 0;\r\n        while (i >= 0 && i < ii - 2) {\r\n            open = 1;\r\n            interpolationStart = i;\r\n            i += 2;\r\n            do {\r\n                char = value[i];\r\n                i++;\r\n                if (char === \"'\" || char === '\"') {\r\n                    if (quote === null) {\r\n                        quote = char;\r\n                    }\r\n                    else if (quote === char) {\r\n                        quote = null;\r\n                    }\r\n                    continue;\r\n                }\r\n                if (char === '\\\\') {\r\n                    i++;\r\n                    continue;\r\n                }\r\n                if (quote !== null) {\r\n                    continue;\r\n                }\r\n                if (char === '{') {\r\n                    open++;\r\n                }\r\n                else if (char === '}') {\r\n                    open--;\r\n                }\r\n            } while (open > 0 && i < ii);\r\n            if (open === 0) {\r\n                parts = parts || [];\r\n                if (value[interpolationStart - 1] === '\\\\' && value[interpolationStart - 2] !== '\\\\') {\r\n                    parts[partIndex] = value.substring(pos, interpolationStart - 1) + value.substring(interpolationStart, i);\r\n                    partIndex++;\r\n                    parts[partIndex] = this.emptyStringExpression;\r\n                    partIndex++;\r\n                }\r\n                else {\r\n                    parts[partIndex] = value.substring(pos, interpolationStart);\r\n                    partIndex++;\r\n                    parts[partIndex] = this.parser.parse(value.substring(interpolationStart + 2, i - 1));\r\n                    partIndex++;\r\n                }\r\n                pos = i;\r\n                i = value.indexOf('${', i);\r\n            }\r\n            else {\r\n                break;\r\n            }\r\n        }\r\n        if (partIndex === 0) {\r\n            return null;\r\n        }\r\n        parts[partIndex] = value.substr(pos);\r\n        return parts;\r\n    };\r\n    TemplatingBindingLanguage.inject = [aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"Parser\"], aurelia_binding__WEBPACK_IMPORTED_MODULE_1__[\"ObserverLocator\"], SyntaxInterpreter, AttributeMap];\r\n    return TemplatingBindingLanguage;\r\n}(aurelia_templating__WEBPACK_IMPORTED_MODULE_0__[/* BindingLanguage */ \"e\"]));\n\nfunction configure(config) {\r\n    config.container.registerSingleton(aurelia_templating__WEBPACK_IMPORTED_MODULE_0__[/* BindingLanguage */ \"e\"], TemplatingBindingLanguage);\r\n    config.container.registerAlias(aurelia_templating__WEBPACK_IMPORTED_MODULE_0__[/* BindingLanguage */ \"e\"], TemplatingBindingLanguage);\r\n}\n\n\n//# sourceMappingURL=aurelia-templating-binding.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXVyZWxpYS10ZW1wbGF0aW5nLWJpbmRpbmcvZGlzdC9uYXRpdmUtbW9kdWxlcy9hdXJlbGlhLXRlbXBsYXRpbmctYmluZGluZy5qcz81NzBkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBMEU7QUFDZ007QUFDNU47O0FBRTlDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVUsZ0JBQWdCLHNDQUFzQyxpQkFBaUIsRUFBRTtBQUNuRix5QkFBeUIsdURBQXVEO0FBQ2hGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1CQUFtQixzQkFBc0I7QUFDekM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsUUFBUTtBQUNwRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaUVBQVM7QUFDeEI7QUFDQSwyQkFBMkIsMkRBQVc7QUFDdEM7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLFFBQVEseURBQW9CO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyxRQUFRO0FBQ3ZEO0FBQ0EsK0JBQStCLDJEQUFXO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLFFBQVE7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyxRQUFRO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLDJEQUFXO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsMkRBQVc7QUFDckMsWUFBWSw2RUFBcUI7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxtRUFBVztBQUNuQjtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDZEQUFhO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsNkVBQXFCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsbUVBQVc7QUFDbkI7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUdBQW1HLDJEQUFXO0FBQzlHO0FBQ0EsNEdBQTRHLDJEQUFXO0FBQ3ZIO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLHlEQUFvQjtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQiwyREFBVztBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtFQUFrRSwyREFBVztBQUM3RTtBQUNBO0FBQ0EsZUFBZSwyREFBVztBQUMxQjtBQUNBO0FBQ0EsaURBQWlELDhFQUFtQjtBQUNwRSxvREFBb0QsaUVBQWlCO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsa0VBQWtCLHNFQUFzRSxrRUFBa0I7QUFDN0g7QUFDQTtBQUNBLG1CQUFtQixrRUFBa0Isc0VBQXNFLGtFQUFrQjtBQUM3SDtBQUNBO0FBQ0EsbUJBQW1CLGtFQUFrQixzRUFBc0Usa0VBQWtCO0FBQzdIO0FBQ0E7QUFDQSxpREFBaUQsOEVBQW1CO0FBQ3BFLG9EQUFvRCw4REFBYztBQUNsRTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQsOEVBQW1CO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLFFBQVE7QUFDbEQ7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDLDhFQUFtQjtBQUNoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLGlFQUFpQiw2REFBNkQsMkRBQVc7QUFDcEk7QUFDQTtBQUNBO0FBQ0EsaURBQWlELDhFQUFtQjtBQUNwRSxvREFBb0QsaUVBQWlCLGlIQUFpSCwyREFBVztBQUNqTTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQsOEVBQW1CO0FBQ3BFLG9EQUFvRCxpRUFBaUIsaUhBQWlILDJEQUFXO0FBQ2pNO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCw4RUFBbUI7QUFDcEUsb0RBQW9ELGlFQUFpQixpSEFBaUgsMkRBQVc7QUFDak07QUFDQTtBQUNBO0FBQ0EsaURBQWlELDhFQUFtQjtBQUNwRSxvREFBb0QsaUVBQWlCLGlIQUFpSCwyREFBVztBQUNqTTtBQUNBO0FBQ0EsZ0NBQWdDLHNEQUFNLEVBQUUsK0RBQWUsRUFBRSw0REFBWTtBQUNyRTtBQUNBLENBQUM7QUFDRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyw4REFBYztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLDhEQUFjO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkpBQTZKLDJEQUFXO0FBQ3hLO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQWlELDhFQUFtQjtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0NBQStDLFFBQVE7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IseURBQW9CO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBLHlFQUF5RSxpRUFBUztBQUNsRjtBQUNBO0FBQ0EsMkJBQTJCLGlFQUFTO0FBQ3BDO0FBQ0E7QUFDQSxvQkFBb0IseURBQW9CO0FBQ3hDLHVLQUF1Syx1QkFBdUI7QUFDOUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJGQUEyRiw2REFBYTtBQUN4RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhGQUE4RiwyREFBVztBQUN6RztBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QyxzREFBTSxFQUFFLCtEQUFlO0FBQy9EO0FBQ0EsQ0FBQyxDQUFDLDBFQUFlOztBQUVqQjtBQUNBLHVDQUF1QywwRUFBZTtBQUN0RCxtQ0FBbUMsMEVBQWU7QUFDbEQ7O0FBRXlQO0FBQ3pQIiwiZmlsZSI6ImF1cmVsaWEtdGVtcGxhdGluZy1iaW5kaW5nLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmVoYXZpb3JJbnN0cnVjdGlvbiwgQmluZGluZ0xhbmd1YWdlIH0gZnJvbSAnYXVyZWxpYS10ZW1wbGF0aW5nJztcbmltcG9ydCB7IGNhbWVsQ2FzZSwgU1ZHQW5hbHl6ZXIsIGJpbmRpbmdNb2RlLCBlbnF1ZXVlQmluZGluZ0Nvbm5lY3QsIGNvbm5lY3RhYmxlLCBzb3VyY2VDb250ZXh0LCBCaW5kaW5nRXhwcmVzc2lvbiwgTGlzdGVuZXJFeHByZXNzaW9uLCBkZWxlZ2F0aW9uU3RyYXRlZ3ksIENhbGxFeHByZXNzaW9uLCBQYXJzZXIsIE9ic2VydmVyTG9jYXRvciwgRXZlbnRNYW5hZ2VyLCBOYW1lRXhwcmVzc2lvbiwgTGl0ZXJhbFN0cmluZyB9IGZyb20gJ2F1cmVsaWEtYmluZGluZyc7XG5pbXBvcnQgKiBhcyBMb2dNYW5hZ2VyIGZyb20gJ2F1cmVsaWEtbG9nZ2luZyc7XG5cbi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XHJcbiAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxufTtcclxuXHJcbmZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cblxudmFyIEF0dHJpYnV0ZU1hcCA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBBdHRyaWJ1dGVNYXAoc3ZnKSB7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XHJcbiAgICAgICAgdGhpcy5hbGxFbGVtZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XHJcbiAgICAgICAgdGhpcy5zdmcgPSBzdmc7XHJcbiAgICAgICAgdGhpcy5yZWdpc3RlclVuaXZlcnNhbCgnYWNjZXNza2V5JywgJ2FjY2Vzc0tleScpO1xyXG4gICAgICAgIHRoaXMucmVnaXN0ZXJVbml2ZXJzYWwoJ2NvbnRlbnRlZGl0YWJsZScsICdjb250ZW50RWRpdGFibGUnKTtcclxuICAgICAgICB0aGlzLnJlZ2lzdGVyVW5pdmVyc2FsKCd0YWJpbmRleCcsICd0YWJJbmRleCcpO1xyXG4gICAgICAgIHRoaXMucmVnaXN0ZXJVbml2ZXJzYWwoJ3RleHRjb250ZW50JywgJ3RleHRDb250ZW50Jyk7XHJcbiAgICAgICAgdGhpcy5yZWdpc3RlclVuaXZlcnNhbCgnaW5uZXJodG1sJywgJ2lubmVySFRNTCcpO1xyXG4gICAgICAgIHRoaXMucmVnaXN0ZXJVbml2ZXJzYWwoJ3Njcm9sbHRvcCcsICdzY3JvbGxUb3AnKTtcclxuICAgICAgICB0aGlzLnJlZ2lzdGVyVW5pdmVyc2FsKCdzY3JvbGxsZWZ0JywgJ3Njcm9sbExlZnQnKTtcclxuICAgICAgICB0aGlzLnJlZ2lzdGVyVW5pdmVyc2FsKCdyZWFkb25seScsICdyZWFkT25seScpO1xyXG4gICAgICAgIHRoaXMucmVnaXN0ZXIoJ2xhYmVsJywgJ2ZvcicsICdodG1sRm9yJyk7XHJcbiAgICAgICAgdGhpcy5yZWdpc3RlcignaW1nJywgJ3VzZW1hcCcsICd1c2VNYXAnKTtcclxuICAgICAgICB0aGlzLnJlZ2lzdGVyKCdpbnB1dCcsICdtYXhsZW5ndGgnLCAnbWF4TGVuZ3RoJyk7XHJcbiAgICAgICAgdGhpcy5yZWdpc3RlcignaW5wdXQnLCAnbWlubGVuZ3RoJywgJ21pbkxlbmd0aCcpO1xyXG4gICAgICAgIHRoaXMucmVnaXN0ZXIoJ2lucHV0JywgJ2Zvcm1hY3Rpb24nLCAnZm9ybUFjdGlvbicpO1xyXG4gICAgICAgIHRoaXMucmVnaXN0ZXIoJ2lucHV0JywgJ2Zvcm1lbmN0eXBlJywgJ2Zvcm1FbmNUeXBlJyk7XHJcbiAgICAgICAgdGhpcy5yZWdpc3RlcignaW5wdXQnLCAnZm9ybW1ldGhvZCcsICdmb3JtTWV0aG9kJyk7XHJcbiAgICAgICAgdGhpcy5yZWdpc3RlcignaW5wdXQnLCAnZm9ybW5vdmFsaWRhdGUnLCAnZm9ybU5vVmFsaWRhdGUnKTtcclxuICAgICAgICB0aGlzLnJlZ2lzdGVyKCdpbnB1dCcsICdmb3JtdGFyZ2V0JywgJ2Zvcm1UYXJnZXQnKTtcclxuICAgICAgICB0aGlzLnJlZ2lzdGVyKCd0ZXh0YXJlYScsICdtYXhsZW5ndGgnLCAnbWF4TGVuZ3RoJyk7XHJcbiAgICAgICAgdGhpcy5yZWdpc3RlcigndGQnLCAncm93c3BhbicsICdyb3dTcGFuJyk7XHJcbiAgICAgICAgdGhpcy5yZWdpc3RlcigndGQnLCAnY29sc3BhbicsICdjb2xTcGFuJyk7XHJcbiAgICAgICAgdGhpcy5yZWdpc3RlcigndGgnLCAncm93c3BhbicsICdyb3dTcGFuJyk7XHJcbiAgICAgICAgdGhpcy5yZWdpc3RlcigndGgnLCAnY29sc3BhbicsICdjb2xTcGFuJyk7XHJcbiAgICB9XHJcbiAgICBBdHRyaWJ1dGVNYXAucHJvdG90eXBlLnJlZ2lzdGVyID0gZnVuY3Rpb24gKGVsZW1lbnROYW1lLCBhdHRyaWJ1dGVOYW1lLCBwcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgICBlbGVtZW50TmFtZSA9IGVsZW1lbnROYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZU5hbWUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMuZWxlbWVudHNbZWxlbWVudE5hbWVdID0gKHRoaXMuZWxlbWVudHNbZWxlbWVudE5hbWVdIHx8IE9iamVjdC5jcmVhdGUobnVsbCkpO1xyXG4gICAgICAgIGVsZW1lbnRbYXR0cmlidXRlTmFtZV0gPSBwcm9wZXJ0eU5hbWU7XHJcbiAgICB9O1xyXG4gICAgQXR0cmlidXRlTWFwLnByb3RvdHlwZS5yZWdpc3RlclVuaXZlcnNhbCA9IGZ1bmN0aW9uIChhdHRyaWJ1dGVOYW1lLCBwcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgICBhdHRyaWJ1dGVOYW1lID0gYXR0cmlidXRlTmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIHRoaXMuYWxsRWxlbWVudHNbYXR0cmlidXRlTmFtZV0gPSBwcm9wZXJ0eU5hbWU7XHJcbiAgICB9O1xyXG4gICAgQXR0cmlidXRlTWFwLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoZWxlbWVudE5hbWUsIGF0dHJpYnV0ZU5hbWUpIHtcclxuICAgICAgICBpZiAodGhpcy5zdmcuaXNTdGFuZGFyZFN2Z0F0dHJpYnV0ZShlbGVtZW50TmFtZSwgYXR0cmlidXRlTmFtZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZU5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsZW1lbnROYW1lID0gZWxlbWVudE5hbWUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBhdHRyaWJ1dGVOYW1lID0gYXR0cmlidXRlTmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIHZhciBlbGVtZW50ID0gdGhpcy5lbGVtZW50c1tlbGVtZW50TmFtZV07XHJcbiAgICAgICAgaWYgKGVsZW1lbnQgIT09IHVuZGVmaW5lZCAmJiBhdHRyaWJ1dGVOYW1lIGluIGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRbYXR0cmlidXRlTmFtZV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhdHRyaWJ1dGVOYW1lIGluIHRoaXMuYWxsRWxlbWVudHMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWxsRWxlbWVudHNbYXR0cmlidXRlTmFtZV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgvKD86XmRhdGEtKXwoPzpeYXJpYS0pfDovLnRlc3QoYXR0cmlidXRlTmFtZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZU5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjYW1lbENhc2UoYXR0cmlidXRlTmFtZSk7XHJcbiAgICB9O1xyXG4gICAgQXR0cmlidXRlTWFwLmluamVjdCA9IFtTVkdBbmFseXplcl07XHJcbiAgICByZXR1cm4gQXR0cmlidXRlTWFwO1xyXG59KCkpO1xuXG52YXIgSW50ZXJwb2xhdGlvbkJpbmRpbmdFeHByZXNzaW9uID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEludGVycG9sYXRpb25CaW5kaW5nRXhwcmVzc2lvbihvYnNlcnZlckxvY2F0b3IsIHRhcmdldFByb3BlcnR5LCBwYXJ0cywgbW9kZSwgbG9va3VwRnVuY3Rpb25zLCBhdHRyaWJ1dGUpIHtcclxuICAgICAgICB0aGlzLm9ic2VydmVyTG9jYXRvciA9IG9ic2VydmVyTG9jYXRvcjtcclxuICAgICAgICB0aGlzLnRhcmdldFByb3BlcnR5ID0gdGFyZ2V0UHJvcGVydHk7XHJcbiAgICAgICAgdGhpcy5wYXJ0cyA9IHBhcnRzO1xyXG4gICAgICAgIHRoaXMubW9kZSA9IG1vZGU7XHJcbiAgICAgICAgdGhpcy5sb29rdXBGdW5jdGlvbnMgPSBsb29rdXBGdW5jdGlvbnM7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGUgPSB0aGlzLmF0dHJUb1JlbW92ZSA9IGF0dHJpYnV0ZTtcclxuICAgICAgICB0aGlzLmRpc2NyZXRlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBJbnRlcnBvbGF0aW9uQmluZGluZ0V4cHJlc3Npb24ucHJvdG90eXBlLmNyZWF0ZUJpbmRpbmcgPSBmdW5jdGlvbiAodGFyZ2V0KSB7XHJcbiAgICAgICAgaWYgKHRoaXMucGFydHMubGVuZ3RoID09PSAzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ2hpbGRJbnRlcnBvbGF0aW9uQmluZGluZyh0YXJnZXQsIHRoaXMub2JzZXJ2ZXJMb2NhdG9yLCB0aGlzLnBhcnRzWzFdLCB0aGlzLm1vZGUsIHRoaXMubG9va3VwRnVuY3Rpb25zLCB0aGlzLnRhcmdldFByb3BlcnR5LCB0aGlzLnBhcnRzWzBdLCB0aGlzLnBhcnRzWzJdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ldyBJbnRlcnBvbGF0aW9uQmluZGluZyh0aGlzLm9ic2VydmVyTG9jYXRvciwgdGhpcy5wYXJ0cywgdGFyZ2V0LCB0aGlzLnRhcmdldFByb3BlcnR5LCB0aGlzLm1vZGUsIHRoaXMubG9va3VwRnVuY3Rpb25zKTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gSW50ZXJwb2xhdGlvbkJpbmRpbmdFeHByZXNzaW9uO1xyXG59KCkpO1xyXG5mdW5jdGlvbiB2YWxpZGF0ZVRhcmdldCh0YXJnZXQsIHByb3BlcnR5TmFtZSkge1xyXG4gICAgaWYgKHByb3BlcnR5TmFtZSA9PT0gJ3N0eWxlJykge1xyXG4gICAgICAgIExvZ01hbmFnZXIuZ2V0TG9nZ2VyKCd0ZW1wbGF0aW5nLWJpbmRpbmcnKVxyXG4gICAgICAgICAgICAuaW5mbygnSW50ZXJuZXQgRXhwbG9yZXIgZG9lcyBub3Qgc3VwcG9ydCBpbnRlcnBvbGF0aW9uIGluIFwic3R5bGVcIiBhdHRyaWJ1dGVzLiAgVXNlIHRoZSBzdHlsZSBhdHRyaWJ1dGVcXCdzIGFsaWFzLCBcImNzc1wiIGluc3RlYWQuJyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0YXJnZXQucGFyZW50RWxlbWVudCAmJiB0YXJnZXQucGFyZW50RWxlbWVudC5ub2RlTmFtZSA9PT0gJ1RFWFRBUkVBJyAmJiBwcm9wZXJ0eU5hbWUgPT09ICd0ZXh0Q29udGVudCcpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludGVycG9sYXRpb24gYmluZGluZyBjYW5ub3QgYmUgdXNlZCBpbiB0aGUgY29udGVudCBvZiBhIHRleHRhcmVhIGVsZW1lbnQuICBVc2UgPHRleHRhcmVhIHZhbHVlLmJpbmQ9XCJleHByZXNzaW9uXCI+PC90ZXh0YXJlYT4gaW5zdGVhZC4nKTtcclxuICAgIH1cclxufVxyXG52YXIgSW50ZXJwb2xhdGlvbkJpbmRpbmcgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gSW50ZXJwb2xhdGlvbkJpbmRpbmcob2JzZXJ2ZXJMb2NhdG9yLCBwYXJ0cywgdGFyZ2V0LCB0YXJnZXRQcm9wZXJ0eSwgbW9kZSwgbG9va3VwRnVuY3Rpb25zKSB7XHJcbiAgICAgICAgdmFsaWRhdGVUYXJnZXQodGFyZ2V0LCB0YXJnZXRQcm9wZXJ0eSk7XHJcbiAgICAgICAgdGhpcy5vYnNlcnZlckxvY2F0b3IgPSBvYnNlcnZlckxvY2F0b3I7XHJcbiAgICAgICAgdGhpcy5wYXJ0cyA9IHBhcnRzO1xyXG4gICAgICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xyXG4gICAgICAgIHRoaXMudGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRQcm9wZXJ0eTtcclxuICAgICAgICB0aGlzLnRhcmdldEFjY2Vzc29yID0gb2JzZXJ2ZXJMb2NhdG9yLmdldEFjY2Vzc29yKHRhcmdldCwgdGFyZ2V0UHJvcGVydHkpO1xyXG4gICAgICAgIHRoaXMubW9kZSA9IG1vZGU7XHJcbiAgICAgICAgdGhpcy5sb29rdXBGdW5jdGlvbnMgPSBsb29rdXBGdW5jdGlvbnM7XHJcbiAgICB9XHJcbiAgICBJbnRlcnBvbGF0aW9uQmluZGluZy5wcm90b3R5cGUuaW50ZXJwb2xhdGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNCb3VuZCkge1xyXG4gICAgICAgICAgICB2YXIgdmFsdWUgPSAnJztcclxuICAgICAgICAgICAgdmFyIHBhcnRzID0gdGhpcy5wYXJ0cztcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gcGFydHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgKz0gKGkgJSAyID09PSAwID8gcGFydHNbaV0gOiB0aGlzW1wiY2hpbGRCaW5kaW5nXCIuY29uY2F0KGkpXS52YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy50YXJnZXRBY2Nlc3Nvci5zZXRWYWx1ZSh2YWx1ZSwgdGhpcy50YXJnZXQsIHRoaXMudGFyZ2V0UHJvcGVydHkpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBJbnRlcnBvbGF0aW9uQmluZGluZy5wcm90b3R5cGUudXBkYXRlT25lVGltZUJpbmRpbmdzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAxLCBpaSA9IHRoaXMucGFydHMubGVuZ3RoOyBpIDwgaWk7IGkgKz0gMikge1xyXG4gICAgICAgICAgICB2YXIgY2hpbGQgPSB0aGlzW1wiY2hpbGRCaW5kaW5nXCIuY29uY2F0KGkpXTtcclxuICAgICAgICAgICAgaWYgKGNoaWxkLm1vZGUgPT09IGJpbmRpbmdNb2RlLm9uZVRpbWUpIHtcclxuICAgICAgICAgICAgICAgIGNoaWxkLmNhbGwoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBJbnRlcnBvbGF0aW9uQmluZGluZy5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChzb3VyY2UpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0JvdW5kKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZSA9PT0gc291cmNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy51bmJpbmQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XHJcbiAgICAgICAgdmFyIHBhcnRzID0gdGhpcy5wYXJ0cztcclxuICAgICAgICBmb3IgKHZhciBpID0gMSwgaWkgPSBwYXJ0cy5sZW5ndGg7IGkgPCBpaTsgaSArPSAyKSB7XHJcbiAgICAgICAgICAgIHZhciBiaW5kaW5nID0gbmV3IENoaWxkSW50ZXJwb2xhdGlvbkJpbmRpbmcodGhpcywgdGhpcy5vYnNlcnZlckxvY2F0b3IsIHBhcnRzW2ldLCB0aGlzLm1vZGUsIHRoaXMubG9va3VwRnVuY3Rpb25zKTtcclxuICAgICAgICAgICAgYmluZGluZy5iaW5kKHNvdXJjZSk7XHJcbiAgICAgICAgICAgIHRoaXNbXCJjaGlsZEJpbmRpbmdcIi5jb25jYXQoaSldID0gYmluZGluZztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc0JvdW5kID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmludGVycG9sYXRlKCk7XHJcbiAgICB9O1xyXG4gICAgSW50ZXJwb2xhdGlvbkJpbmRpbmcucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNCb3VuZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNCb3VuZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc291cmNlID0gbnVsbDtcclxuICAgICAgICB2YXIgcGFydHMgPSB0aGlzLnBhcnRzO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAxLCBpaSA9IHBhcnRzLmxlbmd0aDsgaSA8IGlpOyBpICs9IDIpIHtcclxuICAgICAgICAgICAgdmFyIG5hbWVfMSA9IFwiY2hpbGRCaW5kaW5nXCIuY29uY2F0KGkpO1xyXG4gICAgICAgICAgICB0aGlzW25hbWVfMV0udW5iaW5kKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiBJbnRlcnBvbGF0aW9uQmluZGluZztcclxufSgpKTtcclxudmFyIENoaWxkSW50ZXJwb2xhdGlvbkJpbmRpbmcgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gQ2hpbGRJbnRlcnBvbGF0aW9uQmluZGluZyh0YXJnZXQsIG9ic2VydmVyTG9jYXRvciwgc291cmNlRXhwcmVzc2lvbiwgbW9kZSwgbG9va3VwRnVuY3Rpb25zLCB0YXJnZXRQcm9wZXJ0eSwgbGVmdCwgcmlnaHQpIHtcclxuICAgICAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgSW50ZXJwb2xhdGlvbkJpbmRpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5wYXJlbnQgPSB0YXJnZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2YWxpZGF0ZVRhcmdldCh0YXJnZXQsIHRhcmdldFByb3BlcnR5KTtcclxuICAgICAgICAgICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7XHJcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRQcm9wZXJ0eTtcclxuICAgICAgICAgICAgdGhpcy50YXJnZXRBY2Nlc3NvciA9IG9ic2VydmVyTG9jYXRvci5nZXRBY2Nlc3Nvcih0YXJnZXQsIHRhcmdldFByb3BlcnR5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5vYnNlcnZlckxvY2F0b3IgPSBvYnNlcnZlckxvY2F0b3I7XHJcbiAgICAgICAgdGhpcy5zb3VyY2VFeHByZXNzaW9uID0gc291cmNlRXhwcmVzc2lvbjtcclxuICAgICAgICB0aGlzLm1vZGUgPSBtb2RlO1xyXG4gICAgICAgIHRoaXMubG9va3VwRnVuY3Rpb25zID0gbG9va3VwRnVuY3Rpb25zO1xyXG4gICAgICAgIHRoaXMubGVmdCA9IGxlZnQ7XHJcbiAgICAgICAgdGhpcy5yaWdodCA9IHJpZ2h0O1xyXG4gICAgfVxyXG4gICAgQ2hpbGRJbnRlcnBvbGF0aW9uQmluZGluZy5wcm90b3R5cGUudXBkYXRlVGFyZ2V0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgdmFsdWUgPSB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gJycgOiB2YWx1ZS50b1N0cmluZygpO1xyXG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy52YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuaW50ZXJwb2xhdGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0QWNjZXNzb3Iuc2V0VmFsdWUodGhpcy5sZWZ0ICsgdmFsdWUgKyB0aGlzLnJpZ2h0LCB0aGlzLnRhcmdldCwgdGhpcy50YXJnZXRQcm9wZXJ0eSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgQ2hpbGRJbnRlcnBvbGF0aW9uQmluZGluZy5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNCb3VuZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmF3VmFsdWUgPSB0aGlzLnNvdXJjZUV4cHJlc3Npb24uZXZhbHVhdGUodGhpcy5zb3VyY2UsIHRoaXMubG9va3VwRnVuY3Rpb25zKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVRhcmdldCh0aGlzLnJhd1ZhbHVlKTtcclxuICAgICAgICBpZiAodGhpcy5tb2RlICE9PSBiaW5kaW5nTW9kZS5vbmVUaW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZlcnNpb24rKztcclxuICAgICAgICAgICAgdGhpcy5zb3VyY2VFeHByZXNzaW9uLmNvbm5lY3QodGhpcywgdGhpcy5zb3VyY2UpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yYXdWYWx1ZSBpbnN0YW5jZW9mIEFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9ic2VydmVBcnJheSh0aGlzLnJhd1ZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnVub2JzZXJ2ZShmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIENoaWxkSW50ZXJwb2xhdGlvbkJpbmRpbmcucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoc291cmNlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNCb3VuZCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zb3VyY2UgPT09IHNvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMudW5iaW5kKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNCb3VuZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XHJcbiAgICAgICAgdmFyIHNvdXJjZUV4cHJlc3Npb24gPSB0aGlzLnNvdXJjZUV4cHJlc3Npb247XHJcbiAgICAgICAgaWYgKHNvdXJjZUV4cHJlc3Npb24uYmluZCkge1xyXG4gICAgICAgICAgICBzb3VyY2VFeHByZXNzaW9uLmJpbmQodGhpcywgc291cmNlLCB0aGlzLmxvb2t1cEZ1bmN0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmF3VmFsdWUgPSBzb3VyY2VFeHByZXNzaW9uLmV2YWx1YXRlKHNvdXJjZSwgdGhpcy5sb29rdXBGdW5jdGlvbnMpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlVGFyZ2V0KHRoaXMucmF3VmFsdWUpO1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGUgPT09IGJpbmRpbmdNb2RlLm9uZVdheSkge1xyXG4gICAgICAgICAgICBlbnF1ZXVlQmluZGluZ0Nvbm5lY3QodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIENoaWxkSW50ZXJwb2xhdGlvbkJpbmRpbmcucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNCb3VuZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNCb3VuZCA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBzb3VyY2VFeHByZXNzaW9uID0gdGhpcy5zb3VyY2VFeHByZXNzaW9uO1xyXG4gICAgICAgIGlmIChzb3VyY2VFeHByZXNzaW9uLnVuYmluZCkge1xyXG4gICAgICAgICAgICBzb3VyY2VFeHByZXNzaW9uLnVuYmluZCh0aGlzLCB0aGlzLnNvdXJjZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc291cmNlID0gbnVsbDtcclxuICAgICAgICB0aGlzLnZhbHVlID0gbnVsbDtcclxuICAgICAgICB0aGlzLnJhd1ZhbHVlID0gbnVsbDtcclxuICAgICAgICB0aGlzLnVub2JzZXJ2ZSh0cnVlKTtcclxuICAgIH07XHJcbiAgICBDaGlsZEludGVycG9sYXRpb25CaW5kaW5nLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24gKGV2YWx1YXRlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzQm91bmQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXZhbHVhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5yYXdWYWx1ZSA9IHRoaXMuc291cmNlRXhwcmVzc2lvbi5ldmFsdWF0ZSh0aGlzLnNvdXJjZSwgdGhpcy5sb29rdXBGdW5jdGlvbnMpO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVRhcmdldCh0aGlzLnJhd1ZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zb3VyY2VFeHByZXNzaW9uLmNvbm5lY3QodGhpcywgdGhpcy5zb3VyY2UpO1xyXG4gICAgICAgIGlmICh0aGlzLnJhd1ZhbHVlIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICAgICAgdGhpcy5vYnNlcnZlQXJyYXkodGhpcy5yYXdWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIENoaWxkSW50ZXJwb2xhdGlvbkJpbmRpbmcgPSBfX2RlY29yYXRlKFtcclxuICAgICAgICBjb25uZWN0YWJsZSgpXHJcbiAgICBdLCBDaGlsZEludGVycG9sYXRpb25CaW5kaW5nKTtcclxuICAgIHJldHVybiBDaGlsZEludGVycG9sYXRpb25CaW5kaW5nO1xyXG59KCkpO1xuXG52YXIgTGV0RXhwcmVzc2lvbiA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBMZXRFeHByZXNzaW9uKG9ic2VydmVyTG9jYXRvciwgdGFyZ2V0UHJvcGVydHksIHNvdXJjZUV4cHJlc3Npb24sIGxvb2t1cEZ1bmN0aW9ucywgdG9CaW5kaW5nQ29udGV4dCkge1xyXG4gICAgICAgIHRoaXMub2JzZXJ2ZXJMb2NhdG9yID0gb2JzZXJ2ZXJMb2NhdG9yO1xyXG4gICAgICAgIHRoaXMuc291cmNlRXhwcmVzc2lvbiA9IHNvdXJjZUV4cHJlc3Npb247XHJcbiAgICAgICAgdGhpcy50YXJnZXRQcm9wZXJ0eSA9IHRhcmdldFByb3BlcnR5O1xyXG4gICAgICAgIHRoaXMubG9va3VwRnVuY3Rpb25zID0gbG9va3VwRnVuY3Rpb25zO1xyXG4gICAgICAgIHRoaXMudG9CaW5kaW5nQ29udGV4dCA9IHRvQmluZGluZ0NvbnRleHQ7XHJcbiAgICB9XHJcbiAgICBMZXRFeHByZXNzaW9uLnByb3RvdHlwZS5jcmVhdGVCaW5kaW5nID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgTGV0QmluZGluZyh0aGlzLm9ic2VydmVyTG9jYXRvciwgdGhpcy5zb3VyY2VFeHByZXNzaW9uLCB0aGlzLnRhcmdldFByb3BlcnR5LCB0aGlzLmxvb2t1cEZ1bmN0aW9ucywgdGhpcy50b0JpbmRpbmdDb250ZXh0KTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gTGV0RXhwcmVzc2lvbjtcclxufSgpKTtcclxudmFyIExldEJpbmRpbmcgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gTGV0QmluZGluZyhvYnNlcnZlckxvY2F0b3IsIHNvdXJjZUV4cHJlc3Npb24sIHRhcmdldFByb3BlcnR5LCBsb29rdXBGdW5jdGlvbnMsIHRvQmluZGluZ0NvbnRleHQpIHtcclxuICAgICAgICB0aGlzLm9ic2VydmVyTG9jYXRvciA9IG9ic2VydmVyTG9jYXRvcjtcclxuICAgICAgICB0aGlzLnNvdXJjZUV4cHJlc3Npb24gPSBzb3VyY2VFeHByZXNzaW9uO1xyXG4gICAgICAgIHRoaXMudGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRQcm9wZXJ0eTtcclxuICAgICAgICB0aGlzLmxvb2t1cEZ1bmN0aW9ucyA9IGxvb2t1cEZ1bmN0aW9ucztcclxuICAgICAgICB0aGlzLnNvdXJjZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy50YXJnZXQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMudG9CaW5kaW5nQ29udGV4dCA9IHRvQmluZGluZ0NvbnRleHQ7XHJcbiAgICB9XHJcbiAgICBMZXRCaW5kaW5nLnByb3RvdHlwZS51cGRhdGVUYXJnZXQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5zb3VyY2VFeHByZXNzaW9uLmV2YWx1YXRlKHRoaXMuc291cmNlLCB0aGlzLmxvb2t1cEZ1bmN0aW9ucyk7XHJcbiAgICAgICAgdGhpcy50YXJnZXRbdGhpcy50YXJnZXRQcm9wZXJ0eV0gPSB2YWx1ZTtcclxuICAgIH07XHJcbiAgICBMZXRCaW5kaW5nLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNCb3VuZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb250ZXh0ID09PSBzb3VyY2VDb250ZXh0KSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVGFyZ2V0KCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBjYWxsIGNvbnRleHQgXCIuY29uY2F0KGNvbnRleHQpKTtcclxuICAgIH07XHJcbiAgICBMZXRCaW5kaW5nLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKHNvdXJjZSkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzQm91bmQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlID09PSBzb3VyY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnVuYmluZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzQm91bmQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc291cmNlID0gc291cmNlO1xyXG4gICAgICAgIHRoaXMudGFyZ2V0ID0gdGhpcy50b0JpbmRpbmdDb250ZXh0ID8gc291cmNlLmJpbmRpbmdDb250ZXh0IDogc291cmNlLm92ZXJyaWRlQ29udGV4dDtcclxuICAgICAgICBpZiAodGhpcy5zb3VyY2VFeHByZXNzaW9uLmJpbmQpIHtcclxuICAgICAgICAgICAgdGhpcy5zb3VyY2VFeHByZXNzaW9uLmJpbmQodGhpcywgc291cmNlLCB0aGlzLmxvb2t1cEZ1bmN0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVucXVldWVCaW5kaW5nQ29ubmVjdCh0aGlzKTtcclxuICAgIH07XHJcbiAgICBMZXRCaW5kaW5nLnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzQm91bmQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzQm91bmQgPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5zb3VyY2VFeHByZXNzaW9uLnVuYmluZCkge1xyXG4gICAgICAgICAgICB0aGlzLnNvdXJjZUV4cHJlc3Npb24udW5iaW5kKHRoaXMsIHRoaXMuc291cmNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zb3VyY2UgPSBudWxsO1xyXG4gICAgICAgIHRoaXMudGFyZ2V0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLnVub2JzZXJ2ZSh0cnVlKTtcclxuICAgIH07XHJcbiAgICBMZXRCaW5kaW5nLnByb3RvdHlwZS51bm9ic2VydmUgPSBmdW5jdGlvbiAoYXJnMCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcclxuICAgIH07XHJcbiAgICBMZXRCaW5kaW5nLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5pc0JvdW5kKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGRhdGVUYXJnZXQoKTtcclxuICAgICAgICB0aGlzLnNvdXJjZUV4cHJlc3Npb24uY29ubmVjdCh0aGlzLCB0aGlzLnNvdXJjZSk7XHJcbiAgICB9O1xyXG4gICAgTGV0QmluZGluZyA9IF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGNvbm5lY3RhYmxlKClcclxuICAgIF0sIExldEJpbmRpbmcpO1xyXG4gICAgcmV0dXJuIExldEJpbmRpbmc7XHJcbn0oKSk7XG5cbnZhciBMZXRJbnRlcnBvbGF0aW9uQmluZGluZ0V4cHJlc3Npb24gPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gTGV0SW50ZXJwb2xhdGlvbkJpbmRpbmdFeHByZXNzaW9uKG9ic2VydmVyTG9jYXRvciwgdGFyZ2V0UHJvcGVydHksIHBhcnRzLCBsb29rdXBGdW5jdGlvbnMsIHRvQmluZGluZ0NvbnRleHQpIHtcclxuICAgICAgICB0aGlzLm9ic2VydmVyTG9jYXRvciA9IG9ic2VydmVyTG9jYXRvcjtcclxuICAgICAgICB0aGlzLnRhcmdldFByb3BlcnR5ID0gdGFyZ2V0UHJvcGVydHk7XHJcbiAgICAgICAgdGhpcy5wYXJ0cyA9IHBhcnRzO1xyXG4gICAgICAgIHRoaXMubG9va3VwRnVuY3Rpb25zID0gbG9va3VwRnVuY3Rpb25zO1xyXG4gICAgICAgIHRoaXMudG9CaW5kaW5nQ29udGV4dCA9IHRvQmluZGluZ0NvbnRleHQ7XHJcbiAgICB9XHJcbiAgICBMZXRJbnRlcnBvbGF0aW9uQmluZGluZ0V4cHJlc3Npb24ucHJvdG90eXBlLmNyZWF0ZUJpbmRpbmcgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBMZXRJbnRlcnBvbGF0aW9uQmluZGluZyh0aGlzLm9ic2VydmVyTG9jYXRvciwgdGhpcy50YXJnZXRQcm9wZXJ0eSwgdGhpcy5wYXJ0cywgdGhpcy5sb29rdXBGdW5jdGlvbnMsIHRoaXMudG9CaW5kaW5nQ29udGV4dCk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIExldEludGVycG9sYXRpb25CaW5kaW5nRXhwcmVzc2lvbjtcclxufSgpKTtcclxudmFyIExldEludGVycG9sYXRpb25CaW5kaW5nID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIExldEludGVycG9sYXRpb25CaW5kaW5nKG9ic2VydmVyTG9jYXRvciwgdGFyZ2V0UHJvcGVydHksIHBhcnRzLCBsb29rdXBGdW5jdGlvbnMsIHRvQmluZGluZ0NvbnRleHQpIHtcclxuICAgICAgICB0aGlzLm9ic2VydmVyTG9jYXRvciA9IG9ic2VydmVyTG9jYXRvcjtcclxuICAgICAgICB0aGlzLnBhcnRzID0gcGFydHM7XHJcbiAgICAgICAgdGhpcy50YXJnZXRQcm9wZXJ0eSA9IHRhcmdldFByb3BlcnR5O1xyXG4gICAgICAgIHRoaXMubG9va3VwRnVuY3Rpb25zID0gbG9va3VwRnVuY3Rpb25zO1xyXG4gICAgICAgIHRoaXMudG9CaW5kaW5nQ29udGV4dCA9IHRvQmluZGluZ0NvbnRleHQ7XHJcbiAgICAgICAgdGhpcy50YXJnZXQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgTGV0SW50ZXJwb2xhdGlvbkJpbmRpbmcucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoc291cmNlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNCb3VuZCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zb3VyY2UgPT09IHNvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMudW5iaW5kKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNCb3VuZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XHJcbiAgICAgICAgdGhpcy50YXJnZXQgPSB0aGlzLnRvQmluZGluZ0NvbnRleHQgPyBzb3VyY2UuYmluZGluZ0NvbnRleHQgOiBzb3VyY2Uub3ZlcnJpZGVDb250ZXh0O1xyXG4gICAgICAgIHRoaXMuaW50ZXJwb2xhdGlvbkJpbmRpbmcgPSB0aGlzLmNyZWF0ZUludGVycG9sYXRpb25CaW5kaW5nKCk7XHJcbiAgICAgICAgdGhpcy5pbnRlcnBvbGF0aW9uQmluZGluZy5iaW5kKHNvdXJjZSk7XHJcbiAgICB9O1xyXG4gICAgTGV0SW50ZXJwb2xhdGlvbkJpbmRpbmcucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNCb3VuZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNCb3VuZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc291cmNlID0gbnVsbDtcclxuICAgICAgICB0aGlzLnRhcmdldCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5pbnRlcnBvbGF0aW9uQmluZGluZy51bmJpbmQoKTtcclxuICAgICAgICB0aGlzLmludGVycG9sYXRpb25CaW5kaW5nID0gbnVsbDtcclxuICAgIH07XHJcbiAgICBMZXRJbnRlcnBvbGF0aW9uQmluZGluZy5wcm90b3R5cGUuY3JlYXRlSW50ZXJwb2xhdGlvbkJpbmRpbmcgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucGFydHMubGVuZ3RoID09PSAzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ2hpbGRJbnRlcnBvbGF0aW9uQmluZGluZyh0aGlzLnRhcmdldCwgdGhpcy5vYnNlcnZlckxvY2F0b3IsIHRoaXMucGFydHNbMV0sIGJpbmRpbmdNb2RlLnRvVmlldywgdGhpcy5sb29rdXBGdW5jdGlvbnMsIHRoaXMudGFyZ2V0UHJvcGVydHksIHRoaXMucGFydHNbMF0sIHRoaXMucGFydHNbMl0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3IEludGVycG9sYXRpb25CaW5kaW5nKHRoaXMub2JzZXJ2ZXJMb2NhdG9yLCB0aGlzLnBhcnRzLCB0aGlzLnRhcmdldCwgdGhpcy50YXJnZXRQcm9wZXJ0eSwgYmluZGluZ01vZGUudG9WaWV3LCB0aGlzLmxvb2t1cEZ1bmN0aW9ucyk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIExldEludGVycG9sYXRpb25CaW5kaW5nO1xyXG59KCkpO1xuXG52YXIgU3ludGF4SW50ZXJwcmV0ZXIgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gU3ludGF4SW50ZXJwcmV0ZXIocGFyc2VyLCBvYnNlcnZlckxvY2F0b3IsIGV2ZW50TWFuYWdlciwgYXR0cmlidXRlTWFwKSB7XHJcbiAgICAgICAgdGhpcy5wYXJzZXIgPSBwYXJzZXI7XHJcbiAgICAgICAgdGhpcy5vYnNlcnZlckxvY2F0b3IgPSBvYnNlcnZlckxvY2F0b3I7XHJcbiAgICAgICAgdGhpcy5ldmVudE1hbmFnZXIgPSBldmVudE1hbmFnZXI7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVNYXAgPSBhdHRyaWJ1dGVNYXA7XHJcbiAgICB9XHJcbiAgICBTeW50YXhJbnRlcnByZXRlci5wcm90b3R5cGUuaW50ZXJwcmV0ID0gZnVuY3Rpb24gKHJlc291cmNlcywgZWxlbWVudCwgaW5mbywgZXhpc3RpbmdJbnN0cnVjdGlvbiwgY29udGV4dCkge1xyXG4gICAgICAgIGlmIChpbmZvLmNvbW1hbmQgaW4gdGhpcykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpc1tpbmZvLmNvbW1hbmRdKHJlc291cmNlcywgZWxlbWVudCwgaW5mbywgZXhpc3RpbmdJbnN0cnVjdGlvbiwgY29udGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmhhbmRsZVVua25vd25Db21tYW5kKHJlc291cmNlcywgZWxlbWVudCwgaW5mbywgZXhpc3RpbmdJbnN0cnVjdGlvbiwgY29udGV4dCk7XHJcbiAgICB9O1xyXG4gICAgU3ludGF4SW50ZXJwcmV0ZXIucHJvdG90eXBlLmhhbmRsZVVua25vd25Db21tYW5kID0gZnVuY3Rpb24gKHJlc291cmNlcywgZWxlbWVudCwgaW5mbywgZXhpc3RpbmdJbnN0cnVjdGlvbiwgY29udGV4dCkge1xyXG4gICAgICAgIExvZ01hbmFnZXIuZ2V0TG9nZ2VyKCd0ZW1wbGF0aW5nLWJpbmRpbmcnKS53YXJuKCdVbmtub3duIGJpbmRpbmcgY29tbWFuZC4nLCBpbmZvKTtcclxuICAgICAgICByZXR1cm4gZXhpc3RpbmdJbnN0cnVjdGlvbjtcclxuICAgIH07XHJcbiAgICBTeW50YXhJbnRlcnByZXRlci5wcm90b3R5cGUuZGV0ZXJtaW5lRGVmYXVsdEJpbmRpbmdNb2RlID0gZnVuY3Rpb24gKGVsZW1lbnQsIGF0dHJOYW1lLCBjb250ZXh0KSB7XHJcbiAgICAgICAgdmFyIHRhZ05hbWUgPSBlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBpZiAodGFnTmFtZSA9PT0gJ2lucHV0JyAmJiAoYXR0ck5hbWUgPT09ICd2YWx1ZScgfHwgYXR0ck5hbWUgPT09ICdmaWxlcycpICYmIGVsZW1lbnQudHlwZSAhPT0gJ2NoZWNrYm94JyAmJiBlbGVtZW50LnR5cGUgIT09ICdyYWRpbydcclxuICAgICAgICAgICAgfHwgdGFnTmFtZSA9PT0gJ2lucHV0JyAmJiBhdHRyTmFtZSA9PT0gJ2NoZWNrZWQnICYmIChlbGVtZW50LnR5cGUgPT09ICdjaGVja2JveCcgfHwgZWxlbWVudC50eXBlID09PSAncmFkaW8nKVxyXG4gICAgICAgICAgICB8fCAodGFnTmFtZSA9PT0gJ3RleHRhcmVhJyB8fCB0YWdOYW1lID09PSAnc2VsZWN0JykgJiYgYXR0ck5hbWUgPT09ICd2YWx1ZSdcclxuICAgICAgICAgICAgfHwgKGF0dHJOYW1lID09PSAndGV4dGNvbnRlbnQnIHx8IGF0dHJOYW1lID09PSAnaW5uZXJodG1sJykgJiYgZWxlbWVudC5jb250ZW50RWRpdGFibGUgPT09ICd0cnVlJ1xyXG4gICAgICAgICAgICB8fCBhdHRyTmFtZSA9PT0gJ3Njcm9sbHRvcCdcclxuICAgICAgICAgICAgfHwgYXR0ck5hbWUgPT09ICdzY3JvbGxsZWZ0Jykge1xyXG4gICAgICAgICAgICByZXR1cm4gYmluZGluZ01vZGUudHdvV2F5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29udGV4dFxyXG4gICAgICAgICAgICAmJiBhdHRyTmFtZSBpbiBjb250ZXh0LmF0dHJpYnV0ZXNcclxuICAgICAgICAgICAgJiYgY29udGV4dC5hdHRyaWJ1dGVzW2F0dHJOYW1lXVxyXG4gICAgICAgICAgICAmJiBjb250ZXh0LmF0dHJpYnV0ZXNbYXR0ck5hbWVdLmRlZmF1bHRCaW5kaW5nTW9kZSA+PSBiaW5kaW5nTW9kZS5vbmVUaW1lKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmF0dHJpYnV0ZXNbYXR0ck5hbWVdLmRlZmF1bHRCaW5kaW5nTW9kZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGJpbmRpbmdNb2RlLnRvVmlldztcclxuICAgIH07XHJcbiAgICBTeW50YXhJbnRlcnByZXRlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChyZXNvdXJjZXMsIGVsZW1lbnQsIGluZm8sIGV4aXN0aW5nSW5zdHJ1Y3Rpb24sIGNvbnRleHQpIHtcclxuICAgICAgICB2YXIgaW5zdHJ1Y3Rpb24gPSBleGlzdGluZ0luc3RydWN0aW9uIHx8IEJlaGF2aW9ySW5zdHJ1Y3Rpb24uYXR0cmlidXRlKGluZm8uYXR0ck5hbWUpO1xyXG4gICAgICAgIGluc3RydWN0aW9uLmF0dHJpYnV0ZXNbaW5mby5hdHRyTmFtZV0gPSBuZXcgQmluZGluZ0V4cHJlc3Npb24odGhpcy5vYnNlcnZlckxvY2F0b3IsIHRoaXMuYXR0cmlidXRlTWFwLm1hcChlbGVtZW50LnRhZ05hbWUsIGluZm8uYXR0ck5hbWUpLCB0aGlzLnBhcnNlci5wYXJzZShpbmZvLmF0dHJWYWx1ZSksIGluZm8uZGVmYXVsdEJpbmRpbmdNb2RlID09PSB1bmRlZmluZWQgfHwgaW5mby5kZWZhdWx0QmluZGluZ01vZGUgPT09IG51bGxcclxuICAgICAgICAgICAgPyB0aGlzLmRldGVybWluZURlZmF1bHRCaW5kaW5nTW9kZShlbGVtZW50LCBpbmZvLmF0dHJOYW1lLCBjb250ZXh0KVxyXG4gICAgICAgICAgICA6IGluZm8uZGVmYXVsdEJpbmRpbmdNb2RlLCByZXNvdXJjZXMubG9va3VwRnVuY3Rpb25zKTtcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb247XHJcbiAgICB9O1xyXG4gICAgU3ludGF4SW50ZXJwcmV0ZXIucHJvdG90eXBlLnRyaWdnZXIgPSBmdW5jdGlvbiAocmVzb3VyY2VzLCBlbGVtZW50LCBpbmZvKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBMaXN0ZW5lckV4cHJlc3Npb24odGhpcy5ldmVudE1hbmFnZXIsIGluZm8uYXR0ck5hbWUsIHRoaXMucGFyc2VyLnBhcnNlKGluZm8uYXR0clZhbHVlKSwgZGVsZWdhdGlvblN0cmF0ZWd5Lm5vbmUsIHRydWUsIHJlc291cmNlcy5sb29rdXBGdW5jdGlvbnMpO1xyXG4gICAgfTtcclxuICAgIFN5bnRheEludGVycHJldGVyLnByb3RvdHlwZS5jYXB0dXJlID0gZnVuY3Rpb24gKHJlc291cmNlcywgZWxlbWVudCwgaW5mbykge1xyXG4gICAgICAgIHJldHVybiBuZXcgTGlzdGVuZXJFeHByZXNzaW9uKHRoaXMuZXZlbnRNYW5hZ2VyLCBpbmZvLmF0dHJOYW1lLCB0aGlzLnBhcnNlci5wYXJzZShpbmZvLmF0dHJWYWx1ZSksIGRlbGVnYXRpb25TdHJhdGVneS5jYXB0dXJpbmcsIHRydWUsIHJlc291cmNlcy5sb29rdXBGdW5jdGlvbnMpO1xyXG4gICAgfTtcclxuICAgIFN5bnRheEludGVycHJldGVyLnByb3RvdHlwZS5kZWxlZ2F0ZSA9IGZ1bmN0aW9uIChyZXNvdXJjZXMsIGVsZW1lbnQsIGluZm8pIHtcclxuICAgICAgICByZXR1cm4gbmV3IExpc3RlbmVyRXhwcmVzc2lvbih0aGlzLmV2ZW50TWFuYWdlciwgaW5mby5hdHRyTmFtZSwgdGhpcy5wYXJzZXIucGFyc2UoaW5mby5hdHRyVmFsdWUpLCBkZWxlZ2F0aW9uU3RyYXRlZ3kuYnViYmxpbmcsIHRydWUsIHJlc291cmNlcy5sb29rdXBGdW5jdGlvbnMpO1xyXG4gICAgfTtcclxuICAgIFN5bnRheEludGVycHJldGVyLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKHJlc291cmNlcywgZWxlbWVudCwgaW5mbywgZXhpc3RpbmdJbnN0cnVjdGlvbikge1xyXG4gICAgICAgIHZhciBpbnN0cnVjdGlvbiA9IGV4aXN0aW5nSW5zdHJ1Y3Rpb24gfHwgQmVoYXZpb3JJbnN0cnVjdGlvbi5hdHRyaWJ1dGUoaW5mby5hdHRyTmFtZSk7XHJcbiAgICAgICAgaW5zdHJ1Y3Rpb24uYXR0cmlidXRlc1tpbmZvLmF0dHJOYW1lXSA9IG5ldyBDYWxsRXhwcmVzc2lvbih0aGlzLm9ic2VydmVyTG9jYXRvciwgaW5mby5hdHRyTmFtZSwgdGhpcy5wYXJzZXIucGFyc2UoaW5mby5hdHRyVmFsdWUpLCByZXNvdXJjZXMubG9va3VwRnVuY3Rpb25zKTtcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb247XHJcbiAgICB9O1xyXG4gICAgU3ludGF4SW50ZXJwcmV0ZXIucHJvdG90eXBlLm9wdGlvbnMgPSBmdW5jdGlvbiAocmVzb3VyY2VzLCBlbGVtZW50LCBpbmZvLCBleGlzdGluZ0luc3RydWN0aW9uLCBjb250ZXh0KSB7XHJcbiAgICAgICAgdmFyIGluc3RydWN0aW9uID0gZXhpc3RpbmdJbnN0cnVjdGlvbiB8fCBCZWhhdmlvckluc3RydWN0aW9uLmF0dHJpYnV0ZShpbmZvLmF0dHJOYW1lKTtcclxuICAgICAgICB2YXIgYXR0clZhbHVlID0gaW5mby5hdHRyVmFsdWU7XHJcbiAgICAgICAgdmFyIGxhbmd1YWdlID0gdGhpcy5sYW5ndWFnZTtcclxuICAgICAgICB2YXIgbmFtZSA9IG51bGw7XHJcbiAgICAgICAgdmFyIHRhcmdldCA9ICcnO1xyXG4gICAgICAgIHZhciBjdXJyZW50O1xyXG4gICAgICAgIHZhciBpO1xyXG4gICAgICAgIHZhciBpaTtcclxuICAgICAgICB2YXIgaW5TdHJpbmcgPSBmYWxzZTtcclxuICAgICAgICB2YXIgaW5Fc2NhcGUgPSBmYWxzZTtcclxuICAgICAgICB2YXIgZm91bmROYW1lID0gZmFsc2U7XHJcbiAgICAgICAgZm9yIChpID0gMCwgaWkgPSBhdHRyVmFsdWUubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xyXG4gICAgICAgICAgICBjdXJyZW50ID0gYXR0clZhbHVlW2ldO1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudCA9PT0gJzsnICYmICFpblN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFmb3VuZE5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lID0gdGhpcy5fZ2V0UHJpbWFyeVByb3BlcnR5TmFtZShyZXNvdXJjZXMsIGNvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaW5mbyA9IGxhbmd1YWdlLmluc3BlY3RBdHRyaWJ1dGUocmVzb3VyY2VzLCAnPycsIG5hbWUsIHRhcmdldC50cmltKCkpO1xyXG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2UuY3JlYXRlQXR0cmlidXRlSW5zdHJ1Y3Rpb24ocmVzb3VyY2VzLCBlbGVtZW50LCBpbmZvLCBpbnN0cnVjdGlvbiwgY29udGV4dCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWluc3RydWN0aW9uLmF0dHJpYnV0ZXNbaW5mby5hdHRyTmFtZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbi5hdHRyaWJ1dGVzW2luZm8uYXR0ck5hbWVdID0gaW5mby5hdHRyVmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSAnJztcclxuICAgICAgICAgICAgICAgIG5hbWUgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnQgPT09ICc6JyAmJiBuYW1lID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBmb3VuZE5hbWUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgbmFtZSA9IHRhcmdldC50cmltKCk7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSAnJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50ID09PSAnXFxcXCcpIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldCArPSBjdXJyZW50O1xyXG4gICAgICAgICAgICAgICAgaW5Fc2NhcGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQgKz0gY3VycmVudDtcclxuICAgICAgICAgICAgICAgIGlmIChuYW1lICE9PSBudWxsICYmIGluRXNjYXBlID09PSBmYWxzZSAmJiBjdXJyZW50ID09PSAnXFwnJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGluU3RyaW5nID0gIWluU3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGluRXNjYXBlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZm91bmROYW1lKSB7XHJcbiAgICAgICAgICAgIG5hbWUgPSB0aGlzLl9nZXRQcmltYXJ5UHJvcGVydHlOYW1lKHJlc291cmNlcywgY29udGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChuYW1lICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGluZm8gPSBsYW5ndWFnZS5pbnNwZWN0QXR0cmlidXRlKHJlc291cmNlcywgJz8nLCBuYW1lLCB0YXJnZXQudHJpbSgpKTtcclxuICAgICAgICAgICAgbGFuZ3VhZ2UuY3JlYXRlQXR0cmlidXRlSW5zdHJ1Y3Rpb24ocmVzb3VyY2VzLCBlbGVtZW50LCBpbmZvLCBpbnN0cnVjdGlvbiwgY29udGV4dCk7XHJcbiAgICAgICAgICAgIGlmICghaW5zdHJ1Y3Rpb24uYXR0cmlidXRlc1tpbmZvLmF0dHJOYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb24uYXR0cmlidXRlc1tpbmZvLmF0dHJOYW1lXSA9IGluZm8uYXR0clZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvbjtcclxuICAgIH07XHJcbiAgICBTeW50YXhJbnRlcnByZXRlci5wcm90b3R5cGUuX2dldFByaW1hcnlQcm9wZXJ0eU5hbWUgPSBmdW5jdGlvbiAocmVzb3VyY2VzLCBjb250ZXh0KSB7XHJcbiAgICAgICAgdmFyIHR5cGUgPSByZXNvdXJjZXMuZ2V0QXR0cmlidXRlKGNvbnRleHQuYXR0cmlidXRlTmFtZSk7XHJcbiAgICAgICAgaWYgKHR5cGUgJiYgdHlwZS5wcmltYXJ5UHJvcGVydHkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHR5cGUucHJpbWFyeVByb3BlcnR5LmF0dHJpYnV0ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9O1xyXG4gICAgU3ludGF4SW50ZXJwcmV0ZXIucHJvdG90eXBlWydmb3InXSA9IGZ1bmN0aW9uIChyZXNvdXJjZXMsIGVsZW1lbnQsIGluZm8sIGV4aXN0aW5nSW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICB2YXIgcGFydHM7XHJcbiAgICAgICAgdmFyIGtleVZhbHVlO1xyXG4gICAgICAgIHZhciBpbnN0cnVjdGlvbjtcclxuICAgICAgICB2YXIgYXR0clZhbHVlO1xyXG4gICAgICAgIHZhciBpc0Rlc3RydWN0dXJpbmc7XHJcbiAgICAgICAgYXR0clZhbHVlID0gaW5mby5hdHRyVmFsdWU7XHJcbiAgICAgICAgaXNEZXN0cnVjdHVyaW5nID0gYXR0clZhbHVlLm1hdGNoKC9eICpbW10uK1tcXF1dLyk7XHJcbiAgICAgICAgcGFydHMgPSBpc0Rlc3RydWN0dXJpbmcgPyBhdHRyVmFsdWUuc3BsaXQoJ29mICcpIDogYXR0clZhbHVlLnNwbGl0KCcgb2YgJyk7XHJcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0luY29ycmVjdCBzeW50YXggZm9yIFwiZm9yXCIuIFRoZSBmb3JtIGlzOiBcIiRsb2NhbCBvZiAkaXRlbXNcIiBvciBcIlska2V5LCAkdmFsdWVdIG9mICRpdGVtc1wiLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpbnN0cnVjdGlvbiA9IGV4aXN0aW5nSW5zdHJ1Y3Rpb24gfHwgQmVoYXZpb3JJbnN0cnVjdGlvbi5hdHRyaWJ1dGUoaW5mby5hdHRyTmFtZSk7XHJcbiAgICAgICAgaWYgKGlzRGVzdHJ1Y3R1cmluZykge1xyXG4gICAgICAgICAgICBrZXlWYWx1ZSA9IHBhcnRzWzBdLnJlcGxhY2UoL1tbXFxdXS9nLCAnJykucmVwbGFjZSgvLC9nLCAnICcpLnJlcGxhY2UoL1xccysvZywgJyAnKS50cmltKCkuc3BsaXQoJyAnKTtcclxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb24uYXR0cmlidXRlcy5rZXkgPSBrZXlWYWx1ZVswXTtcclxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb24uYXR0cmlidXRlcy52YWx1ZSA9IGtleVZhbHVlWzFdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb24uYXR0cmlidXRlcy5sb2NhbCA9IHBhcnRzWzBdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpbnN0cnVjdGlvbi5hdHRyaWJ1dGVzLml0ZW1zID0gbmV3IEJpbmRpbmdFeHByZXNzaW9uKHRoaXMub2JzZXJ2ZXJMb2NhdG9yLCAnaXRlbXMnLCB0aGlzLnBhcnNlci5wYXJzZShwYXJ0c1sxXSksIGJpbmRpbmdNb2RlLnRvVmlldywgcmVzb3VyY2VzLmxvb2t1cEZ1bmN0aW9ucyk7XHJcbiAgICAgICAgcmV0dXJuIGluc3RydWN0aW9uO1xyXG4gICAgfTtcclxuICAgIFN5bnRheEludGVycHJldGVyLnByb3RvdHlwZVsndHdvLXdheSddID0gZnVuY3Rpb24gKHJlc291cmNlcywgZWxlbWVudCwgaW5mbywgZXhpc3RpbmdJbnN0cnVjdGlvbikge1xyXG4gICAgICAgIHZhciBpbnN0cnVjdGlvbiA9IGV4aXN0aW5nSW5zdHJ1Y3Rpb24gfHwgQmVoYXZpb3JJbnN0cnVjdGlvbi5hdHRyaWJ1dGUoaW5mby5hdHRyTmFtZSk7XHJcbiAgICAgICAgaW5zdHJ1Y3Rpb24uYXR0cmlidXRlc1tpbmZvLmF0dHJOYW1lXSA9IG5ldyBCaW5kaW5nRXhwcmVzc2lvbih0aGlzLm9ic2VydmVyTG9jYXRvciwgdGhpcy5hdHRyaWJ1dGVNYXAubWFwKGVsZW1lbnQudGFnTmFtZSwgaW5mby5hdHRyTmFtZSksIHRoaXMucGFyc2VyLnBhcnNlKGluZm8uYXR0clZhbHVlKSwgYmluZGluZ01vZGUudHdvV2F5LCByZXNvdXJjZXMubG9va3VwRnVuY3Rpb25zKTtcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb247XHJcbiAgICB9O1xyXG4gICAgU3ludGF4SW50ZXJwcmV0ZXIucHJvdG90eXBlWyd0by12aWV3J10gPSBmdW5jdGlvbiAocmVzb3VyY2VzLCBlbGVtZW50LCBpbmZvLCBleGlzdGluZ0luc3RydWN0aW9uKSB7XHJcbiAgICAgICAgdmFyIGluc3RydWN0aW9uID0gZXhpc3RpbmdJbnN0cnVjdGlvbiB8fCBCZWhhdmlvckluc3RydWN0aW9uLmF0dHJpYnV0ZShpbmZvLmF0dHJOYW1lKTtcclxuICAgICAgICBpbnN0cnVjdGlvbi5hdHRyaWJ1dGVzW2luZm8uYXR0ck5hbWVdID0gbmV3IEJpbmRpbmdFeHByZXNzaW9uKHRoaXMub2JzZXJ2ZXJMb2NhdG9yLCB0aGlzLmF0dHJpYnV0ZU1hcC5tYXAoZWxlbWVudC50YWdOYW1lLCBpbmZvLmF0dHJOYW1lKSwgdGhpcy5wYXJzZXIucGFyc2UoaW5mby5hdHRyVmFsdWUpLCBiaW5kaW5nTW9kZS50b1ZpZXcsIHJlc291cmNlcy5sb29rdXBGdW5jdGlvbnMpO1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvbjtcclxuICAgIH07XHJcbiAgICBTeW50YXhJbnRlcnByZXRlci5wcm90b3R5cGVbJ2Zyb20tdmlldyddID0gZnVuY3Rpb24gKHJlc291cmNlcywgZWxlbWVudCwgaW5mbywgZXhpc3RpbmdJbnN0cnVjdGlvbikge1xyXG4gICAgICAgIHZhciBpbnN0cnVjdGlvbiA9IGV4aXN0aW5nSW5zdHJ1Y3Rpb24gfHwgQmVoYXZpb3JJbnN0cnVjdGlvbi5hdHRyaWJ1dGUoaW5mby5hdHRyTmFtZSk7XHJcbiAgICAgICAgaW5zdHJ1Y3Rpb24uYXR0cmlidXRlc1tpbmZvLmF0dHJOYW1lXSA9IG5ldyBCaW5kaW5nRXhwcmVzc2lvbih0aGlzLm9ic2VydmVyTG9jYXRvciwgdGhpcy5hdHRyaWJ1dGVNYXAubWFwKGVsZW1lbnQudGFnTmFtZSwgaW5mby5hdHRyTmFtZSksIHRoaXMucGFyc2VyLnBhcnNlKGluZm8uYXR0clZhbHVlKSwgYmluZGluZ01vZGUuZnJvbVZpZXcsIHJlc291cmNlcy5sb29rdXBGdW5jdGlvbnMpO1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvbjtcclxuICAgIH07XHJcbiAgICBTeW50YXhJbnRlcnByZXRlci5wcm90b3R5cGVbJ29uZS10aW1lJ10gPSBmdW5jdGlvbiAocmVzb3VyY2VzLCBlbGVtZW50LCBpbmZvLCBleGlzdGluZ0luc3RydWN0aW9uKSB7XHJcbiAgICAgICAgdmFyIGluc3RydWN0aW9uID0gZXhpc3RpbmdJbnN0cnVjdGlvbiB8fCBCZWhhdmlvckluc3RydWN0aW9uLmF0dHJpYnV0ZShpbmZvLmF0dHJOYW1lKTtcclxuICAgICAgICBpbnN0cnVjdGlvbi5hdHRyaWJ1dGVzW2luZm8uYXR0ck5hbWVdID0gbmV3IEJpbmRpbmdFeHByZXNzaW9uKHRoaXMub2JzZXJ2ZXJMb2NhdG9yLCB0aGlzLmF0dHJpYnV0ZU1hcC5tYXAoZWxlbWVudC50YWdOYW1lLCBpbmZvLmF0dHJOYW1lKSwgdGhpcy5wYXJzZXIucGFyc2UoaW5mby5hdHRyVmFsdWUpLCBiaW5kaW5nTW9kZS5vbmVUaW1lLCByZXNvdXJjZXMubG9va3VwRnVuY3Rpb25zKTtcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb247XHJcbiAgICB9O1xyXG4gICAgU3ludGF4SW50ZXJwcmV0ZXIuaW5qZWN0ID0gW1BhcnNlciwgT2JzZXJ2ZXJMb2NhdG9yLCBFdmVudE1hbmFnZXIsIEF0dHJpYnV0ZU1hcF07XHJcbiAgICByZXR1cm4gU3ludGF4SW50ZXJwcmV0ZXI7XHJcbn0oKSk7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShTeW50YXhJbnRlcnByZXRlci5wcm90b3R5cGUsICdvbmUtd2F5JywgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihTeW50YXhJbnRlcnByZXRlci5wcm90b3R5cGUsICd0by12aWV3JykpO1xuXG52YXIgaW5mbyA9IHt9O1xyXG52YXIgVGVtcGxhdGluZ0JpbmRpbmdMYW5ndWFnZSA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XHJcbiAgICBfX2V4dGVuZHMoVGVtcGxhdGluZ0JpbmRpbmdMYW5ndWFnZSwgX3N1cGVyKTtcclxuICAgIGZ1bmN0aW9uIFRlbXBsYXRpbmdCaW5kaW5nTGFuZ3VhZ2UocGFyc2VyLCBvYnNlcnZlckxvY2F0b3IsIHN5bnRheEludGVycHJldGVyLCBhdHRyaWJ1dGVNYXApIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xyXG4gICAgICAgIF90aGlzLnBhcnNlciA9IHBhcnNlcjtcclxuICAgICAgICBfdGhpcy5vYnNlcnZlckxvY2F0b3IgPSBvYnNlcnZlckxvY2F0b3I7XHJcbiAgICAgICAgX3RoaXMuc3ludGF4SW50ZXJwcmV0ZXIgPSBzeW50YXhJbnRlcnByZXRlcjtcclxuICAgICAgICBfdGhpcy5lbXB0eVN0cmluZ0V4cHJlc3Npb24gPSBfdGhpcy5wYXJzZXIucGFyc2UoJ1xcJ1xcJycpO1xyXG4gICAgICAgIHN5bnRheEludGVycHJldGVyLmxhbmd1YWdlID0gX3RoaXM7XHJcbiAgICAgICAgX3RoaXMuYXR0cmlidXRlTWFwID0gYXR0cmlidXRlTWFwO1xyXG4gICAgICAgIF90aGlzLnRvQmluZGluZ0NvbnRleHRBdHRyID0gJ3RvLWJpbmRpbmctY29udGV4dCc7XHJcbiAgICAgICAgcmV0dXJuIF90aGlzO1xyXG4gICAgfVxyXG4gICAgVGVtcGxhdGluZ0JpbmRpbmdMYW5ndWFnZS5wcm90b3R5cGUuaW5zcGVjdEF0dHJpYnV0ZSA9IGZ1bmN0aW9uIChyZXNvdXJjZXMsIGVsZW1lbnROYW1lLCBhdHRyTmFtZSwgYXR0clZhbHVlKSB7XHJcbiAgICAgICAgdmFyIHBhcnRzID0gYXR0ck5hbWUuc3BsaXQoJy4nKTtcclxuICAgICAgICBpbmZvLmRlZmF1bHRCaW5kaW5nTW9kZSA9IG51bGw7XHJcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMikge1xyXG4gICAgICAgICAgICBpbmZvLmF0dHJOYW1lID0gcGFydHNbMF0udHJpbSgpO1xyXG4gICAgICAgICAgICBpbmZvLmF0dHJWYWx1ZSA9IGF0dHJWYWx1ZTtcclxuICAgICAgICAgICAgaW5mby5jb21tYW5kID0gcGFydHNbMV0udHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoaW5mby5jb21tYW5kID09PSAncmVmJykge1xyXG4gICAgICAgICAgICAgICAgaW5mby5leHByZXNzaW9uID0gbmV3IE5hbWVFeHByZXNzaW9uKHRoaXMucGFyc2VyLnBhcnNlKGF0dHJWYWx1ZSksIGluZm8uYXR0ck5hbWUsIHJlc291cmNlcy5sb29rdXBGdW5jdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgaW5mby5jb21tYW5kID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGluZm8uYXR0ck5hbWUgPSAncmVmJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGluZm8uZXhwcmVzc2lvbiA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT09ICdyZWYnKSB7XHJcbiAgICAgICAgICAgIGluZm8uYXR0ck5hbWUgPSBhdHRyTmFtZTtcclxuICAgICAgICAgICAgaW5mby5hdHRyVmFsdWUgPSBhdHRyVmFsdWU7XHJcbiAgICAgICAgICAgIGluZm8uY29tbWFuZCA9IG51bGw7XHJcbiAgICAgICAgICAgIGluZm8uZXhwcmVzc2lvbiA9IG5ldyBOYW1lRXhwcmVzc2lvbih0aGlzLnBhcnNlci5wYXJzZShhdHRyVmFsdWUpLCAnZWxlbWVudCcsIHJlc291cmNlcy5sb29rdXBGdW5jdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaW5mby5hdHRyTmFtZSA9IGF0dHJOYW1lO1xyXG4gICAgICAgICAgICBpbmZvLmF0dHJWYWx1ZSA9IGF0dHJWYWx1ZTtcclxuICAgICAgICAgICAgaW5mby5jb21tYW5kID0gbnVsbDtcclxuICAgICAgICAgICAgdmFyIGludGVycG9sYXRpb25QYXJ0cyA9IHRoaXMucGFyc2VJbnRlcnBvbGF0aW9uKHJlc291cmNlcywgYXR0clZhbHVlKTtcclxuICAgICAgICAgICAgaWYgKGludGVycG9sYXRpb25QYXJ0cyA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgaW5mby5leHByZXNzaW9uID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGluZm8uZXhwcmVzc2lvbiA9IG5ldyBJbnRlcnBvbGF0aW9uQmluZGluZ0V4cHJlc3Npb24odGhpcy5vYnNlcnZlckxvY2F0b3IsIHRoaXMuYXR0cmlidXRlTWFwLm1hcChlbGVtZW50TmFtZSwgYXR0ck5hbWUpLCBpbnRlcnBvbGF0aW9uUGFydHMsIGJpbmRpbmdNb2RlLnRvVmlldywgcmVzb3VyY2VzLmxvb2t1cEZ1bmN0aW9ucywgYXR0ck5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpbmZvO1xyXG4gICAgfTtcclxuICAgIFRlbXBsYXRpbmdCaW5kaW5nTGFuZ3VhZ2UucHJvdG90eXBlLmNyZWF0ZUF0dHJpYnV0ZUluc3RydWN0aW9uID0gZnVuY3Rpb24gKHJlc291cmNlcywgZWxlbWVudCwgdGhlSW5mbywgZXhpc3RpbmdJbnN0cnVjdGlvbiwgY29udGV4dCkge1xyXG4gICAgICAgIHZhciBpbnN0cnVjdGlvbjtcclxuICAgICAgICBpZiAodGhlSW5mby5leHByZXNzaW9uKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGVJbmZvLmF0dHJOYW1lID09PSAncmVmJykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoZUluZm8uZXhwcmVzc2lvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpbnN0cnVjdGlvbiA9IGV4aXN0aW5nSW5zdHJ1Y3Rpb24gfHwgQmVoYXZpb3JJbnN0cnVjdGlvbi5hdHRyaWJ1dGUodGhlSW5mby5hdHRyTmFtZSk7XHJcbiAgICAgICAgICAgIGluc3RydWN0aW9uLmF0dHJpYnV0ZXNbdGhlSW5mby5hdHRyTmFtZV0gPSB0aGVJbmZvLmV4cHJlc3Npb247XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoZUluZm8uY29tbWFuZCkge1xyXG4gICAgICAgICAgICBpbnN0cnVjdGlvbiA9IHRoaXMuc3ludGF4SW50ZXJwcmV0ZXIuaW50ZXJwcmV0KHJlc291cmNlcywgZWxlbWVudCwgdGhlSW5mbywgZXhpc3RpbmdJbnN0cnVjdGlvbiwgY29udGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvbjtcclxuICAgIH07XHJcbiAgICBUZW1wbGF0aW5nQmluZGluZ0xhbmd1YWdlLnByb3RvdHlwZS5jcmVhdGVMZXRFeHByZXNzaW9ucyA9IGZ1bmN0aW9uIChyZXNvdXJjZXMsIGxldEVsZW1lbnQpIHtcclxuICAgICAgICB2YXIgZXhwcmVzc2lvbnMgPSBbXTtcclxuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IGxldEVsZW1lbnQuYXR0cmlidXRlcztcclxuICAgICAgICB2YXIgYXR0cjtcclxuICAgICAgICB2YXIgcGFydHM7XHJcbiAgICAgICAgdmFyIGF0dHJOYW1lO1xyXG4gICAgICAgIHZhciBhdHRyVmFsdWU7XHJcbiAgICAgICAgdmFyIGNvbW1hbmQ7XHJcbiAgICAgICAgdmFyIHRvQmluZGluZ0NvbnRleHRBdHRyID0gdGhpcy50b0JpbmRpbmdDb250ZXh0QXR0cjtcclxuICAgICAgICB2YXIgdG9CaW5kaW5nQ29udGV4dCA9IGxldEVsZW1lbnQuaGFzQXR0cmlidXRlKHRvQmluZGluZ0NvbnRleHRBdHRyKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBhdHRyaWJ1dGVzLmxlbmd0aDsgaWkgPiBpOyArK2kpIHtcclxuICAgICAgICAgICAgYXR0ciA9IGF0dHJpYnV0ZXNbaV07XHJcbiAgICAgICAgICAgIGF0dHJOYW1lID0gYXR0ci5uYW1lO1xyXG4gICAgICAgICAgICBhdHRyVmFsdWUgPSBhdHRyLm5vZGVWYWx1ZTtcclxuICAgICAgICAgICAgcGFydHMgPSBhdHRyTmFtZS5zcGxpdCgnLicpO1xyXG4gICAgICAgICAgICBpZiAoYXR0ck5hbWUgPT09IHRvQmluZGluZ0NvbnRleHRBdHRyKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocGFydHMubGVuZ3RoID09PSAyKSB7XHJcbiAgICAgICAgICAgICAgICBjb21tYW5kID0gcGFydHNbMV07XHJcbiAgICAgICAgICAgICAgICBpZiAoY29tbWFuZCAhPT0gJ2JpbmQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nTWFuYWdlci5nZXRMb2dnZXIoJ3RlbXBsYXRpbmctYmluZGluZy1sYW5ndWFnZScpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC53YXJuKFwiRGV0ZWN0ZWQgaW52YWxpZCBsZXQgY29tbWFuZC4gRXhwZWN0ZWQgXFxcIlwiLmNvbmNhdChwYXJ0c1swXSwgXCIuYmluZFxcXCIsIGdpdmVuIFxcXCJcIikuY29uY2F0KGF0dHJOYW1lLCBcIlxcXCJcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbnMucHVzaChuZXcgTGV0RXhwcmVzc2lvbih0aGlzLm9ic2VydmVyTG9jYXRvciwgY2FtZWxDYXNlKHBhcnRzWzBdKSwgdGhpcy5wYXJzZXIucGFyc2UoYXR0clZhbHVlKSwgcmVzb3VyY2VzLmxvb2t1cEZ1bmN0aW9ucywgdG9CaW5kaW5nQ29udGV4dCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYXR0ck5hbWUgPSBjYW1lbENhc2UoYXR0ck5hbWUpO1xyXG4gICAgICAgICAgICAgICAgcGFydHMgPSB0aGlzLnBhcnNlSW50ZXJwb2xhdGlvbihyZXNvdXJjZXMsIGF0dHJWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAocGFydHMgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2dNYW5hZ2VyLmdldExvZ2dlcigndGVtcGxhdGluZy1iaW5kaW5nLWxhbmd1YWdlJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLndhcm4oXCJEZXRlY3RlZCBzdHJpbmcgbGl0ZXJhbCBpbiBsZXQgYmluZGluZ3MuIERpZCB5b3UgbWVhbiBcXFwiXCIuY29uY2F0KGF0dHJOYW1lLCBcIi5iaW5kPVwiKS5jb25jYXQoYXR0clZhbHVlLCBcIlxcXCIgb3IgXFxcIlwiKS5jb25jYXQoYXR0ck5hbWUsIFwiPSR7XCIpLmNvbmNhdChhdHRyVmFsdWUsIFwifVxcXCIgP1wiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocGFydHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9ucy5wdXNoKG5ldyBMZXRJbnRlcnBvbGF0aW9uQmluZGluZ0V4cHJlc3Npb24odGhpcy5vYnNlcnZlckxvY2F0b3IsIGF0dHJOYW1lLCBwYXJ0cywgcmVzb3VyY2VzLmxvb2t1cEZ1bmN0aW9ucywgdG9CaW5kaW5nQ29udGV4dCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnMucHVzaChuZXcgTGV0RXhwcmVzc2lvbih0aGlzLm9ic2VydmVyTG9jYXRvciwgYXR0ck5hbWUsIG5ldyBMaXRlcmFsU3RyaW5nKGF0dHJWYWx1ZSksIHJlc291cmNlcy5sb29rdXBGdW5jdGlvbnMsIHRvQmluZGluZ0NvbnRleHQpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZXhwcmVzc2lvbnM7XHJcbiAgICB9O1xyXG4gICAgVGVtcGxhdGluZ0JpbmRpbmdMYW5ndWFnZS5wcm90b3R5cGUuaW5zcGVjdFRleHRDb250ZW50ID0gZnVuY3Rpb24gKHJlc291cmNlcywgdmFsdWUpIHtcclxuICAgICAgICB2YXIgcGFydHMgPSB0aGlzLnBhcnNlSW50ZXJwb2xhdGlvbihyZXNvdXJjZXMsIHZhbHVlKTtcclxuICAgICAgICBpZiAocGFydHMgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgSW50ZXJwb2xhdGlvbkJpbmRpbmdFeHByZXNzaW9uKHRoaXMub2JzZXJ2ZXJMb2NhdG9yLCAndGV4dENvbnRlbnQnLCBwYXJ0cywgYmluZGluZ01vZGUudG9WaWV3LCByZXNvdXJjZXMubG9va3VwRnVuY3Rpb25zLCAndGV4dENvbnRlbnQnKTtcclxuICAgIH07XHJcbiAgICBUZW1wbGF0aW5nQmluZGluZ0xhbmd1YWdlLnByb3RvdHlwZS5wYXJzZUludGVycG9sYXRpb24gPSBmdW5jdGlvbiAocmVzb3VyY2VzLCB2YWx1ZSkge1xyXG4gICAgICAgIHZhciBpID0gdmFsdWUuaW5kZXhPZignJHsnLCAwKTtcclxuICAgICAgICB2YXIgaWkgPSB2YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgdmFyIGNoYXI7XHJcbiAgICAgICAgdmFyIHBvcyA9IDA7XHJcbiAgICAgICAgdmFyIG9wZW4gPSAwO1xyXG4gICAgICAgIHZhciBxdW90ZSA9IG51bGw7XHJcbiAgICAgICAgdmFyIGludGVycG9sYXRpb25TdGFydDtcclxuICAgICAgICB2YXIgcGFydHM7XHJcbiAgICAgICAgdmFyIHBhcnRJbmRleCA9IDA7XHJcbiAgICAgICAgd2hpbGUgKGkgPj0gMCAmJiBpIDwgaWkgLSAyKSB7XHJcbiAgICAgICAgICAgIG9wZW4gPSAxO1xyXG4gICAgICAgICAgICBpbnRlcnBvbGF0aW9uU3RhcnQgPSBpO1xyXG4gICAgICAgICAgICBpICs9IDI7XHJcbiAgICAgICAgICAgIGRvIHtcclxuICAgICAgICAgICAgICAgIGNoYXIgPSB2YWx1ZVtpXTtcclxuICAgICAgICAgICAgICAgIGkrKztcclxuICAgICAgICAgICAgICAgIGlmIChjaGFyID09PSBcIidcIiB8fCBjaGFyID09PSAnXCInKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHF1b3RlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1b3RlID0gY2hhcjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocXVvdGUgPT09IGNoYXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcXVvdGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChjaGFyID09PSAnXFxcXCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBpKys7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocXVvdGUgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChjaGFyID09PSAneycpIHtcclxuICAgICAgICAgICAgICAgICAgICBvcGVuKys7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGFyID09PSAnfScpIHtcclxuICAgICAgICAgICAgICAgICAgICBvcGVuLS07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gd2hpbGUgKG9wZW4gPiAwICYmIGkgPCBpaSk7XHJcbiAgICAgICAgICAgIGlmIChvcGVuID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJ0cyA9IHBhcnRzIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlW2ludGVycG9sYXRpb25TdGFydCAtIDFdID09PSAnXFxcXCcgJiYgdmFsdWVbaW50ZXJwb2xhdGlvblN0YXJ0IC0gMl0gIT09ICdcXFxcJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcnRzW3BhcnRJbmRleF0gPSB2YWx1ZS5zdWJzdHJpbmcocG9zLCBpbnRlcnBvbGF0aW9uU3RhcnQgLSAxKSArIHZhbHVlLnN1YnN0cmluZyhpbnRlcnBvbGF0aW9uU3RhcnQsIGkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcnRJbmRleCsrO1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcnRzW3BhcnRJbmRleF0gPSB0aGlzLmVtcHR5U3RyaW5nRXhwcmVzc2lvbjtcclxuICAgICAgICAgICAgICAgICAgICBwYXJ0SW5kZXgrKztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcnRzW3BhcnRJbmRleF0gPSB2YWx1ZS5zdWJzdHJpbmcocG9zLCBpbnRlcnBvbGF0aW9uU3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcnRJbmRleCsrO1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcnRzW3BhcnRJbmRleF0gPSB0aGlzLnBhcnNlci5wYXJzZSh2YWx1ZS5zdWJzdHJpbmcoaW50ZXJwb2xhdGlvblN0YXJ0ICsgMiwgaSAtIDEpKTtcclxuICAgICAgICAgICAgICAgICAgICBwYXJ0SW5kZXgrKztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHBvcyA9IGk7XHJcbiAgICAgICAgICAgICAgICBpID0gdmFsdWUuaW5kZXhPZignJHsnLCBpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJ0SW5kZXggPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBhcnRzW3BhcnRJbmRleF0gPSB2YWx1ZS5zdWJzdHIocG9zKTtcclxuICAgICAgICByZXR1cm4gcGFydHM7XHJcbiAgICB9O1xyXG4gICAgVGVtcGxhdGluZ0JpbmRpbmdMYW5ndWFnZS5pbmplY3QgPSBbUGFyc2VyLCBPYnNlcnZlckxvY2F0b3IsIFN5bnRheEludGVycHJldGVyLCBBdHRyaWJ1dGVNYXBdO1xyXG4gICAgcmV0dXJuIFRlbXBsYXRpbmdCaW5kaW5nTGFuZ3VhZ2U7XHJcbn0oQmluZGluZ0xhbmd1YWdlKSk7XG5cbmZ1bmN0aW9uIGNvbmZpZ3VyZShjb25maWcpIHtcclxuICAgIGNvbmZpZy5jb250YWluZXIucmVnaXN0ZXJTaW5nbGV0b24oQmluZGluZ0xhbmd1YWdlLCBUZW1wbGF0aW5nQmluZGluZ0xhbmd1YWdlKTtcclxuICAgIGNvbmZpZy5jb250YWluZXIucmVnaXN0ZXJBbGlhcyhCaW5kaW5nTGFuZ3VhZ2UsIFRlbXBsYXRpbmdCaW5kaW5nTGFuZ3VhZ2UpO1xyXG59XG5cbmV4cG9ydCB7IEF0dHJpYnV0ZU1hcCwgQ2hpbGRJbnRlcnBvbGF0aW9uQmluZGluZywgSW50ZXJwb2xhdGlvbkJpbmRpbmcsIEludGVycG9sYXRpb25CaW5kaW5nRXhwcmVzc2lvbiwgTGV0QmluZGluZywgTGV0RXhwcmVzc2lvbiwgTGV0SW50ZXJwb2xhdGlvbkJpbmRpbmcsIExldEludGVycG9sYXRpb25CaW5kaW5nRXhwcmVzc2lvbiwgU3ludGF4SW50ZXJwcmV0ZXIsIFRlbXBsYXRpbmdCaW5kaW5nTGFuZ3VhZ2UsIGNvbmZpZ3VyZSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXVyZWxpYS10ZW1wbGF0aW5nLWJpbmRpbmcuanMubWFwXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///aurelia-templating-binding\n")},"aurelia-templating-resources":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('/* unused harmony export AbstractRepeater */\n/* unused harmony export ArrayRepeatStrategy */\n/* unused harmony export AttrBindingBehavior */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return BindingSignaler; });\n/* unused harmony export Compose */\n/* unused harmony export DebounceBindingBehavior */\n/* unused harmony export Else */\n/* unused harmony export Focus */\n/* unused harmony export FromViewBindingBehavior */\n/* unused harmony export HTMLSanitizer */\n/* unused harmony export Hide */\n/* unused harmony export If */\n/* unused harmony export MapRepeatStrategy */\n/* unused harmony export NullRepeatStrategy */\n/* unused harmony export NumberRepeatStrategy */\n/* unused harmony export OneTimeBindingBehavior */\n/* unused harmony export OneWayBindingBehavior */\n/* unused harmony export Repeat */\n/* unused harmony export RepeatStrategyLocator */\n/* unused harmony export Replaceable */\n/* unused harmony export SanitizeHTMLValueConverter */\n/* unused harmony export SelfBindingBehavior */\n/* unused harmony export SetRepeatStrategy */\n/* unused harmony export Show */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SignalBindingBehavior; });\n/* unused harmony export ThrottleBindingBehavior */\n/* unused harmony export ToViewBindingBehavior */\n/* unused harmony export TwoWayBindingBehavior */\n/* unused harmony export UpdateTriggerBindingBehavior */\n/* unused harmony export With */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "configure", function() { return configure; });\n/* unused harmony export createFullOverrideContext */\n/* unused harmony export getItemsSourceExpression */\n/* unused harmony export isOneTime */\n/* unused harmony export unwrapExpression */\n/* unused harmony export updateOneTimeBinding */\n/* unused harmony export updateOverrideContext */\n/* unused harmony export viewsRequireLifecycle */\n/* harmony import */ var aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6);\n/* harmony import */ var aurelia_pal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(0);\n/* harmony import */ var aurelia_task_queue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(10);\n/* harmony import */ var aurelia_templating__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(3);\n/* harmony import */ var aurelia_binding__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1);\n/* harmony import */ var aurelia_loader__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(8);\n/* harmony import */ var aurelia_path__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(7);\n/* harmony import */ var aurelia_metadata__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(4);\n/* harmony import */ var aurelia_logging__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(5);\n\n\n\n\n\n\n\n\n\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n    if (typeof b !== "function" && b !== null)\r\n        throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nfunction __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\n\nvar ActivationStrategy;\r\n(function (ActivationStrategy) {\r\n    ActivationStrategy["InvokeLifecycle"] = "invoke-lifecycle";\r\n    ActivationStrategy["Replace"] = "replace";\r\n})(ActivationStrategy || (ActivationStrategy = {}));\r\nvar Compose = (function () {\r\n    function Compose(element, container, compositionEngine, viewSlot, viewResources, taskQueue) {\r\n        this.activationStrategy = ActivationStrategy.InvokeLifecycle;\r\n        this.element = element;\r\n        this.container = container;\r\n        this.compositionEngine = compositionEngine;\r\n        this.viewSlot = viewSlot;\r\n        this.viewResources = viewResources;\r\n        this.taskQueue = taskQueue;\r\n        this.currentController = null;\r\n        this.currentViewModel = null;\r\n        this.changes = Object.create(null);\r\n    }\r\n    Compose.inject = function () {\r\n        return [aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* DOM */ "b"].Element, aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_0__[/* Container */ "b"], aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* CompositionEngine */ "g"], aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* ViewSlot */ "N"], aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* ViewResources */ "M"], aurelia_task_queue__WEBPACK_IMPORTED_MODULE_2__[/* TaskQueue */ "a"]];\r\n    };\r\n    Compose.prototype.created = function (owningView) {\r\n        this.owningView = owningView;\r\n    };\r\n    Compose.prototype.bind = function (bindingContext, overrideContext) {\r\n        this.bindingContext = bindingContext;\r\n        this.overrideContext = overrideContext;\r\n        var changes = this.changes;\r\n        changes.view = this.view;\r\n        changes.viewModel = this.viewModel;\r\n        changes.model = this.model;\r\n        if (!this.pendingTask) {\r\n            processChanges(this);\r\n        }\r\n    };\r\n    Compose.prototype.unbind = function () {\r\n        this.changes = Object.create(null);\r\n        this.bindingContext = null;\r\n        this.overrideContext = null;\r\n        var returnToCache = true;\r\n        var skipAnimation = true;\r\n        this.viewSlot.removeAll(returnToCache, skipAnimation);\r\n    };\r\n    Compose.prototype.modelChanged = function (newValue, oldValue) {\r\n        this.changes.model = newValue;\r\n        requestUpdate(this);\r\n    };\r\n    Compose.prototype.viewChanged = function (newValue, oldValue) {\r\n        this.changes.view = newValue;\r\n        requestUpdate(this);\r\n    };\r\n    Compose.prototype.viewModelChanged = function (newValue, oldValue) {\r\n        this.changes.viewModel = newValue;\r\n        requestUpdate(this);\r\n    };\r\n    __decorate([\r\n        aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* bindable */ "S"]\r\n    ], Compose.prototype, "model", void 0);\r\n    __decorate([\r\n        aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* bindable */ "S"]\r\n    ], Compose.prototype, "view", void 0);\r\n    __decorate([\r\n        aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* bindable */ "S"]\r\n    ], Compose.prototype, "viewModel", void 0);\r\n    __decorate([\r\n        aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* bindable */ "S"]\r\n    ], Compose.prototype, "activationStrategy", void 0);\r\n    __decorate([\r\n        aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* bindable */ "S"]\r\n    ], Compose.prototype, "swapOrder", void 0);\r\n    Compose = __decorate([\r\n        aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* noView */ "Ba"],\r\n        Object(aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* customElement */ "X"])(\'compose\')\r\n    ], Compose);\r\n    return Compose;\r\n}());\r\nfunction isEmpty(obj) {\r\n    for (var _ in obj) {\r\n        return false;\r\n    }\r\n    return true;\r\n}\r\nfunction tryActivateViewModel(vm, model) {\r\n    if (vm && typeof vm.activate === \'function\') {\r\n        return Promise.resolve(vm.activate(model));\r\n    }\r\n}\r\nfunction createInstruction(composer, instruction) {\r\n    return Object.assign(instruction, {\r\n        bindingContext: composer.bindingContext,\r\n        overrideContext: composer.overrideContext,\r\n        owningView: composer.owningView,\r\n        container: composer.container,\r\n        viewSlot: composer.viewSlot,\r\n        viewResources: composer.viewResources,\r\n        currentController: composer.currentController,\r\n        host: composer.element,\r\n        swapOrder: composer.swapOrder\r\n    });\r\n}\r\nfunction processChanges(composer) {\r\n    var changes = composer.changes;\r\n    composer.changes = Object.create(null);\r\n    if (needsReInitialization(composer, changes)) {\r\n        var instruction = {\r\n            view: composer.view,\r\n            viewModel: composer.currentViewModel || composer.viewModel,\r\n            model: composer.model\r\n        };\r\n        instruction = Object.assign(instruction, changes);\r\n        instruction = createInstruction(composer, instruction);\r\n        composer.pendingTask = composer.compositionEngine.compose(instruction).then(function (controller) {\r\n            composer.currentController = controller;\r\n            composer.currentViewModel = controller ? controller.viewModel : null;\r\n        });\r\n    }\r\n    else {\r\n        composer.pendingTask = tryActivateViewModel(composer.currentViewModel, changes.model);\r\n        if (!composer.pendingTask) {\r\n            return;\r\n        }\r\n    }\r\n    composer.pendingTask = composer.pendingTask\r\n        .then(function () {\r\n        completeCompositionTask(composer);\r\n    }, function (reason) {\r\n        completeCompositionTask(composer);\r\n        throw reason;\r\n    });\r\n}\r\nfunction completeCompositionTask(composer) {\r\n    composer.pendingTask = null;\r\n    if (!isEmpty(composer.changes)) {\r\n        processChanges(composer);\r\n    }\r\n}\r\nfunction requestUpdate(composer) {\r\n    if (composer.pendingTask || composer.updateRequested) {\r\n        return;\r\n    }\r\n    composer.updateRequested = true;\r\n    composer.taskQueue.queueMicroTask(function () {\r\n        composer.updateRequested = false;\r\n        processChanges(composer);\r\n    });\r\n}\r\nfunction needsReInitialization(composer, changes) {\r\n    var activationStrategy = composer.activationStrategy;\r\n    var vm = composer.currentViewModel;\r\n    if (vm && typeof vm.determineActivationStrategy === \'function\') {\r\n        activationStrategy = vm.determineActivationStrategy();\r\n    }\r\n    return \'view\' in changes\r\n        || \'viewModel\' in changes\r\n        || activationStrategy === ActivationStrategy.Replace;\r\n}\n\nvar IfCore = (function () {\r\n    function IfCore(viewFactory, viewSlot) {\r\n        this.viewFactory = viewFactory;\r\n        this.viewSlot = viewSlot;\r\n        this.view = null;\r\n        this.bindingContext = null;\r\n        this.overrideContext = null;\r\n        this.showing = false;\r\n        this.cache = true;\r\n    }\r\n    IfCore.prototype.bind = function (bindingContext, overrideContext) {\r\n        this.bindingContext = bindingContext;\r\n        this.overrideContext = overrideContext;\r\n    };\r\n    IfCore.prototype.unbind = function () {\r\n        if (this.view === null) {\r\n            return;\r\n        }\r\n        this.view.unbind();\r\n        if (!this.viewFactory.isCaching) {\r\n            return;\r\n        }\r\n        if (this.showing) {\r\n            this.showing = false;\r\n            this.viewSlot.remove(this.view, true, true);\r\n        }\r\n        else {\r\n            this.view.returnToCache();\r\n        }\r\n        this.view = null;\r\n    };\r\n    IfCore.prototype._show = function () {\r\n        if (this.showing) {\r\n            if (!this.view.isBound) {\r\n                this.view.bind(this.bindingContext, this.overrideContext);\r\n            }\r\n            return;\r\n        }\r\n        if (this.view === null) {\r\n            this.view = this.viewFactory.create();\r\n        }\r\n        if (!this.view.isBound) {\r\n            this.view.bind(this.bindingContext, this.overrideContext);\r\n        }\r\n        this.showing = true;\r\n        return this.viewSlot.add(this.view);\r\n    };\r\n    IfCore.prototype._hide = function () {\r\n        var _this = this;\r\n        if (!this.showing) {\r\n            return;\r\n        }\r\n        this.showing = false;\r\n        var removed = this.viewSlot.remove(this.view);\r\n        if (removed instanceof Promise) {\r\n            return removed.then(function () {\r\n                _this._unbindView();\r\n            });\r\n        }\r\n        this._unbindView();\r\n    };\r\n    IfCore.prototype._unbindView = function () {\r\n        var cache = this.cache === \'false\' ? false : !!this.cache;\r\n        this.view.unbind();\r\n        if (!cache) {\r\n            this.view = null;\r\n        }\r\n    };\r\n    return IfCore;\r\n}());\n\nvar If = (function (_super) {\r\n    __extends(If, _super);\r\n    function If() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        _this.cache = true;\r\n        return _this;\r\n    }\r\n    If.prototype.bind = function (bindingContext, overrideContext) {\r\n        _super.prototype.bind.call(this, bindingContext, overrideContext);\r\n        if (this.condition) {\r\n            this._show();\r\n        }\r\n        else {\r\n            this._hide();\r\n        }\r\n    };\r\n    If.prototype.conditionChanged = function (newValue) {\r\n        this._update(newValue);\r\n    };\r\n    If.prototype._update = function (show) {\r\n        var _this = this;\r\n        if (this.animating) {\r\n            return;\r\n        }\r\n        var promise;\r\n        if (this.elseVm) {\r\n            promise = show ? this._swap(this.elseVm, this) : this._swap(this, this.elseVm);\r\n        }\r\n        else {\r\n            promise = show ? this._show() : this._hide();\r\n        }\r\n        if (promise) {\r\n            this.animating = true;\r\n            promise.then(function () {\r\n                _this.animating = false;\r\n                if (_this.condition !== _this.showing) {\r\n                    _this._update(_this.condition);\r\n                }\r\n            });\r\n        }\r\n    };\r\n    If.prototype._swap = function (remove, add) {\r\n        switch (this.swapOrder) {\r\n            case \'before\':\r\n                return Promise.resolve(add._show()).then(function () { return remove._hide(); });\r\n            case \'with\':\r\n                return Promise.all([remove._hide(), add._show()]);\r\n            default:\r\n                var promise = remove._hide();\r\n                return promise ? promise.then(function () { return add._show(); }) : add._show();\r\n        }\r\n    };\r\n    __decorate([\r\n        Object(aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* bindable */ "S"])({ primaryProperty: true })\r\n    ], If.prototype, "condition", void 0);\r\n    __decorate([\r\n        aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* bindable */ "S"]\r\n    ], If.prototype, "swapOrder", void 0);\r\n    __decorate([\r\n        aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* bindable */ "S"]\r\n    ], If.prototype, "cache", void 0);\r\n    If = __decorate([\r\n        Object(aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* customAttribute */ "W"])(\'if\'),\r\n        aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* templateController */ "Fa"],\r\n        Object(aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_0__[/* inject */ "s"])(aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* BoundViewFactory */ "f"], aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* ViewSlot */ "N"])\r\n    ], If);\r\n    return If;\r\n}(IfCore));\n\nvar Else = (function (_super) {\r\n    __extends(Else, _super);\r\n    function Else(viewFactory, viewSlot) {\r\n        var _this = _super.call(this, viewFactory, viewSlot) || this;\r\n        _this._registerInIf();\r\n        return _this;\r\n    }\r\n    Else.prototype.bind = function (bindingContext, overrideContext) {\r\n        _super.prototype.bind.call(this, bindingContext, overrideContext);\r\n        if (this.ifVm.condition) {\r\n            this._hide();\r\n        }\r\n        else {\r\n            this._show();\r\n        }\r\n    };\r\n    Else.prototype._registerInIf = function () {\r\n        var previous = this.viewSlot.anchor.previousSibling;\r\n        while (previous && !previous.au) {\r\n            previous = previous.previousSibling;\r\n        }\r\n        if (!previous || !previous.au.if) {\r\n            throw new Error("Can\'t find matching If for Else custom attribute.");\r\n        }\r\n        this.ifVm = previous.au.if.viewModel;\r\n        this.ifVm.elseVm = this;\r\n    };\r\n    Else = __decorate([\r\n        Object(aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* customAttribute */ "W"])(\'else\'),\r\n        aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* templateController */ "Fa"],\r\n        Object(aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_0__[/* inject */ "s"])(aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* BoundViewFactory */ "f"], aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* ViewSlot */ "N"])\r\n    ], Else);\r\n    return Else;\r\n}(IfCore));\n\nvar With = (function () {\r\n    function With(viewFactory, viewSlot) {\r\n        this.viewFactory = viewFactory;\r\n        this.viewSlot = viewSlot;\r\n        this.parentOverrideContext = null;\r\n        this.view = null;\r\n    }\r\n    With.prototype.bind = function (bindingContext, overrideContext) {\r\n        this.parentOverrideContext = overrideContext;\r\n        this.valueChanged(this.value);\r\n    };\r\n    With.prototype.valueChanged = function (newValue) {\r\n        var overrideContext = Object(aurelia_binding__WEBPACK_IMPORTED_MODULE_4__["createOverrideContext"])(newValue, this.parentOverrideContext);\r\n        var view = this.view;\r\n        if (!view) {\r\n            view = this.view = this.viewFactory.create();\r\n            view.bind(newValue, overrideContext);\r\n            this.viewSlot.add(view);\r\n        }\r\n        else {\r\n            view.bind(newValue, overrideContext);\r\n        }\r\n    };\r\n    With.prototype.unbind = function () {\r\n        var view = this.view;\r\n        this.parentOverrideContext = null;\r\n        if (view) {\r\n            view.unbind();\r\n        }\r\n    };\r\n    With = __decorate([\r\n        Object(aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* customAttribute */ "W"])(\'with\'),\r\n        aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* templateController */ "Fa"],\r\n        Object(aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_0__[/* inject */ "s"])(aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* BoundViewFactory */ "f"], aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* ViewSlot */ "N"])\r\n    ], With);\r\n    return With;\r\n}());\n\nvar oneTime = aurelia_binding__WEBPACK_IMPORTED_MODULE_4__["bindingMode"].oneTime;\r\nfunction updateOverrideContexts(views, startIndex) {\r\n    var length = views.length;\r\n    if (startIndex > 0) {\r\n        startIndex = startIndex - 1;\r\n    }\r\n    for (; startIndex < length; ++startIndex) {\r\n        updateOverrideContext(views[startIndex].overrideContext, startIndex, length);\r\n    }\r\n}\r\nfunction createFullOverrideContext(repeat, data, index, length, key) {\r\n    var bindingContext = {};\r\n    var overrideContext = Object(aurelia_binding__WEBPACK_IMPORTED_MODULE_4__["createOverrideContext"])(bindingContext, repeat.scope.overrideContext);\r\n    if (typeof key !== \'undefined\') {\r\n        bindingContext[repeat.key] = key;\r\n        bindingContext[repeat.value] = data;\r\n    }\r\n    else {\r\n        bindingContext[repeat.local] = data;\r\n    }\r\n    updateOverrideContext(overrideContext, index, length);\r\n    return overrideContext;\r\n}\r\nfunction updateOverrideContext(overrideContext, index, length) {\r\n    var first = (index === 0);\r\n    var last = (index === length - 1);\r\n    var even = index % 2 === 0;\r\n    overrideContext.$index = index;\r\n    overrideContext.$first = first;\r\n    overrideContext.$last = last;\r\n    overrideContext.$middle = !(first || last);\r\n    overrideContext.$odd = !even;\r\n    overrideContext.$even = even;\r\n}\r\nfunction getItemsSourceExpression(instruction, attrName) {\r\n    return instruction.behaviorInstructions\r\n        .filter(function (bi) { return bi.originalAttrName === attrName; })[0]\r\n        .attributes\r\n        .items\r\n        .sourceExpression;\r\n}\r\nfunction unwrapExpression(expression) {\r\n    var unwrapped = false;\r\n    while (expression instanceof aurelia_binding__WEBPACK_IMPORTED_MODULE_4__["BindingBehavior"]) {\r\n        expression = expression.expression;\r\n    }\r\n    while (expression instanceof aurelia_binding__WEBPACK_IMPORTED_MODULE_4__["ValueConverter"]) {\r\n        expression = expression.expression;\r\n        unwrapped = true;\r\n    }\r\n    return unwrapped ? expression : null;\r\n}\r\nfunction isOneTime(expression) {\r\n    while (expression instanceof aurelia_binding__WEBPACK_IMPORTED_MODULE_4__["BindingBehavior"]) {\r\n        if (expression.name === \'oneTime\') {\r\n            return true;\r\n        }\r\n        expression = expression.expression;\r\n    }\r\n    return false;\r\n}\r\nfunction updateOneTimeBinding(binding) {\r\n    if (binding.call && binding.mode === oneTime) {\r\n        binding.call(aurelia_binding__WEBPACK_IMPORTED_MODULE_4__["sourceContext"]);\r\n    }\r\n    else if (binding.updateOneTimeBindings) {\r\n        binding.updateOneTimeBindings();\r\n    }\r\n}\r\nfunction indexOf(array, item, matcher, startIndex) {\r\n    if (!matcher) {\r\n        return array.indexOf(item);\r\n    }\r\n    var length = array.length;\r\n    for (var index = startIndex || 0; index < length; index++) {\r\n        if (matcher(array[index], item)) {\r\n            return index;\r\n        }\r\n    }\r\n    return -1;\r\n}\n\nvar ArrayRepeatStrategy = (function () {\r\n    function ArrayRepeatStrategy() {\r\n    }\r\n    ArrayRepeatStrategy.prototype.getCollectionObserver = function (observerLocator, items) {\r\n        return observerLocator.getArrayObserver(items);\r\n    };\r\n    ArrayRepeatStrategy.prototype.instanceChanged = function (repeat, items) {\r\n        var _this = this;\r\n        var $repeat = repeat;\r\n        var itemsLength = items.length;\r\n        if (!items || itemsLength === 0) {\r\n            $repeat.removeAllViews(true, !$repeat.viewsRequireLifecycle);\r\n            return;\r\n        }\r\n        var children = $repeat.views();\r\n        var viewsLength = children.length;\r\n        if (viewsLength === 0) {\r\n            this._standardProcessInstanceChanged($repeat, items);\r\n            return;\r\n        }\r\n        if ($repeat.viewsRequireLifecycle) {\r\n            var childrenSnapshot = children.slice(0);\r\n            var itemNameInBindingContext = $repeat.local;\r\n            var matcher_1 = $repeat.matcher();\r\n            var itemsPreviouslyInViews_1 = [];\r\n            var viewsToRemove = [];\r\n            for (var index = 0; index < viewsLength; index++) {\r\n                var view = childrenSnapshot[index];\r\n                var oldItem = view.bindingContext[itemNameInBindingContext];\r\n                if (indexOf(items, oldItem, matcher_1) === -1) {\r\n                    viewsToRemove.push(view);\r\n                }\r\n                else {\r\n                    itemsPreviouslyInViews_1.push(oldItem);\r\n                }\r\n            }\r\n            var updateViews = void 0;\r\n            var removePromise = void 0;\r\n            if (itemsPreviouslyInViews_1.length > 0) {\r\n                removePromise = $repeat.removeViews(viewsToRemove, true, !$repeat.viewsRequireLifecycle);\r\n                updateViews = function () {\r\n                    for (var index = 0; index < itemsLength; index++) {\r\n                        var item = items[index];\r\n                        var indexOfView = indexOf(itemsPreviouslyInViews_1, item, matcher_1, index);\r\n                        var view = void 0;\r\n                        if (indexOfView === -1) {\r\n                            var overrideContext = createFullOverrideContext($repeat, items[index], index, itemsLength);\r\n                            $repeat.insertView(index, overrideContext.bindingContext, overrideContext);\r\n                            itemsPreviouslyInViews_1.splice(index, 0, undefined);\r\n                        }\r\n                        else if (indexOfView === index) {\r\n                            view = children[indexOfView];\r\n                            itemsPreviouslyInViews_1[indexOfView] = undefined;\r\n                        }\r\n                        else {\r\n                            view = children[indexOfView];\r\n                            $repeat.moveView(indexOfView, index);\r\n                            itemsPreviouslyInViews_1.splice(indexOfView, 1);\r\n                            itemsPreviouslyInViews_1.splice(index, 0, undefined);\r\n                        }\r\n                        if (view) {\r\n                            updateOverrideContext(view.overrideContext, index, itemsLength);\r\n                        }\r\n                    }\r\n                    _this._inPlaceProcessItems($repeat, items);\r\n                };\r\n            }\r\n            else {\r\n                removePromise = $repeat.removeAllViews(true, !$repeat.viewsRequireLifecycle);\r\n                updateViews = function () { return _this._standardProcessInstanceChanged($repeat, items); };\r\n            }\r\n            if (removePromise instanceof Promise) {\r\n                removePromise.then(updateViews);\r\n            }\r\n            else {\r\n                updateViews();\r\n            }\r\n        }\r\n        else {\r\n            this._inPlaceProcessItems($repeat, items);\r\n        }\r\n    };\r\n    ArrayRepeatStrategy.prototype._standardProcessInstanceChanged = function (repeat, items) {\r\n        for (var i = 0, ii = items.length; i < ii; i++) {\r\n            var overrideContext = createFullOverrideContext(repeat, items[i], i, ii);\r\n            repeat.addView(overrideContext.bindingContext, overrideContext);\r\n        }\r\n    };\r\n    ArrayRepeatStrategy.prototype._inPlaceProcessItems = function (repeat, items) {\r\n        var itemsLength = items.length;\r\n        var viewsLength = repeat.viewCount();\r\n        while (viewsLength > itemsLength) {\r\n            viewsLength--;\r\n            repeat.removeView(viewsLength, true, !repeat.viewsRequireLifecycle);\r\n        }\r\n        var local = repeat.local;\r\n        for (var i = 0; i < viewsLength; i++) {\r\n            var view = repeat.view(i);\r\n            var last = i === itemsLength - 1;\r\n            var middle = i !== 0 && !last;\r\n            var bindingContext = view.bindingContext;\r\n            var overrideContext = view.overrideContext;\r\n            if (bindingContext[local] === items[i]\r\n                && overrideContext.$middle === middle\r\n                && overrideContext.$last === last) {\r\n                continue;\r\n            }\r\n            bindingContext[local] = items[i];\r\n            overrideContext.$middle = middle;\r\n            overrideContext.$last = last;\r\n            repeat.updateBindings(view);\r\n        }\r\n        for (var i = viewsLength; i < itemsLength; i++) {\r\n            var overrideContext = createFullOverrideContext(repeat, items[i], i, itemsLength);\r\n            repeat.addView(overrideContext.bindingContext, overrideContext);\r\n        }\r\n    };\r\n    ArrayRepeatStrategy.prototype.instanceMutated = function (repeat, array, splices) {\r\n        var _this = this;\r\n        if (repeat.__queuedSplices) {\r\n            for (var i = 0, ii = splices.length; i < ii; ++i) {\r\n                var _a = splices[i], index = _a.index, removed = _a.removed, addedCount = _a.addedCount;\r\n                Object(aurelia_binding__WEBPACK_IMPORTED_MODULE_4__["mergeSplice"])(repeat.__queuedSplices, index, removed, addedCount);\r\n            }\r\n            repeat.__array = array.slice(0);\r\n            return;\r\n        }\r\n        var maybePromise = this._runSplices(repeat, array.slice(0), splices);\r\n        if (maybePromise instanceof Promise) {\r\n            var queuedSplices_1 = repeat.__queuedSplices = [];\r\n            var runQueuedSplices_1 = function () {\r\n                if (!queuedSplices_1.length) {\r\n                    repeat.__queuedSplices = undefined;\r\n                    repeat.__array = undefined;\r\n                    return;\r\n                }\r\n                var nextPromise = _this._runSplices(repeat, repeat.__array, queuedSplices_1) || Promise.resolve();\r\n                queuedSplices_1 = repeat.__queuedSplices = [];\r\n                nextPromise.then(runQueuedSplices_1);\r\n            };\r\n            maybePromise.then(runQueuedSplices_1);\r\n        }\r\n    };\r\n    ArrayRepeatStrategy.prototype._runSplices = function (repeat, array, splices) {\r\n        var _this = this;\r\n        var removeDelta = 0;\r\n        var rmPromises = [];\r\n        for (var i = 0, ii = splices.length; i < ii; ++i) {\r\n            var splice = splices[i];\r\n            var removed = splice.removed;\r\n            for (var j = 0, jj = removed.length; j < jj; ++j) {\r\n                var viewOrPromise = repeat.removeView(splice.index + removeDelta + rmPromises.length, true);\r\n                if (viewOrPromise instanceof Promise) {\r\n                    rmPromises.push(viewOrPromise);\r\n                }\r\n            }\r\n            removeDelta -= splice.addedCount;\r\n        }\r\n        if (rmPromises.length > 0) {\r\n            return Promise.all(rmPromises).then(function () {\r\n                var spliceIndexLow = _this._handleAddedSplices(repeat, array, splices);\r\n                updateOverrideContexts(repeat.views(), spliceIndexLow);\r\n            });\r\n        }\r\n        var spliceIndexLow = this._handleAddedSplices(repeat, array, splices);\r\n        updateOverrideContexts(repeat.views(), spliceIndexLow);\r\n        return undefined;\r\n    };\r\n    ArrayRepeatStrategy.prototype._handleAddedSplices = function (repeat, array, splices) {\r\n        var spliceIndex;\r\n        var spliceIndexLow;\r\n        var arrayLength = array.length;\r\n        for (var i = 0, ii = splices.length; i < ii; ++i) {\r\n            var splice = splices[i];\r\n            var addIndex = spliceIndex = splice.index;\r\n            var end = splice.index + splice.addedCount;\r\n            if (typeof spliceIndexLow === \'undefined\' || spliceIndexLow === null || spliceIndexLow > splice.index) {\r\n                spliceIndexLow = spliceIndex;\r\n            }\r\n            for (; addIndex < end; ++addIndex) {\r\n                var overrideContext = createFullOverrideContext(repeat, array[addIndex], addIndex, arrayLength);\r\n                repeat.insertView(addIndex, overrideContext.bindingContext, overrideContext);\r\n            }\r\n        }\r\n        return spliceIndexLow;\r\n    };\r\n    return ArrayRepeatStrategy;\r\n}());\n\nvar MapRepeatStrategy = (function () {\r\n    function MapRepeatStrategy() {\r\n    }\r\n    MapRepeatStrategy.prototype.getCollectionObserver = function (observerLocator, items) {\r\n        return observerLocator.getMapObserver(items);\r\n    };\r\n    MapRepeatStrategy.prototype.instanceChanged = function (repeat, items) {\r\n        var _this = this;\r\n        var removePromise = repeat.removeAllViews(true, !repeat.viewsRequireLifecycle);\r\n        if (removePromise instanceof Promise) {\r\n            removePromise.then(function () { return _this._standardProcessItems(repeat, items); });\r\n            return;\r\n        }\r\n        this._standardProcessItems(repeat, items);\r\n    };\r\n    MapRepeatStrategy.prototype._standardProcessItems = function (repeat, items) {\r\n        var index = 0;\r\n        var overrideContext;\r\n        items.forEach(function (value, key) {\r\n            overrideContext = createFullOverrideContext(repeat, value, index, items.size, key);\r\n            repeat.addView(overrideContext.bindingContext, overrideContext);\r\n            ++index;\r\n        });\r\n    };\r\n    MapRepeatStrategy.prototype.instanceMutated = function (repeat, map, records) {\r\n        var key;\r\n        var i;\r\n        var ii;\r\n        var overrideContext;\r\n        var removeIndex;\r\n        var addIndex;\r\n        var record;\r\n        var rmPromises = [];\r\n        var viewOrPromise;\r\n        for (i = 0, ii = records.length; i < ii; ++i) {\r\n            record = records[i];\r\n            key = record.key;\r\n            switch (record.type) {\r\n                case \'update\':\r\n                    removeIndex = this._getViewIndexByKey(repeat, key);\r\n                    viewOrPromise = repeat.removeView(removeIndex, true, !repeat.viewsRequireLifecycle);\r\n                    if (viewOrPromise instanceof Promise) {\r\n                        rmPromises.push(viewOrPromise);\r\n                    }\r\n                    overrideContext = createFullOverrideContext(repeat, map.get(key), removeIndex, map.size, key);\r\n                    repeat.insertView(removeIndex, overrideContext.bindingContext, overrideContext);\r\n                    break;\r\n                case \'add\':\r\n                    addIndex = repeat.viewCount() <= map.size - 1 ? repeat.viewCount() : map.size - 1;\r\n                    overrideContext = createFullOverrideContext(repeat, map.get(key), addIndex, map.size, key);\r\n                    repeat.insertView(map.size - 1, overrideContext.bindingContext, overrideContext);\r\n                    break;\r\n                case \'delete\':\r\n                    if (record.oldValue === undefined) {\r\n                        return;\r\n                    }\r\n                    removeIndex = this._getViewIndexByKey(repeat, key);\r\n                    viewOrPromise = repeat.removeView(removeIndex, true, !repeat.viewsRequireLifecycle);\r\n                    if (viewOrPromise instanceof Promise) {\r\n                        rmPromises.push(viewOrPromise);\r\n                    }\r\n                    break;\r\n                case \'clear\':\r\n                    repeat.removeAllViews(true, !repeat.viewsRequireLifecycle);\r\n                    break;\r\n                default:\r\n                    continue;\r\n            }\r\n        }\r\n        if (rmPromises.length > 0) {\r\n            Promise.all(rmPromises).then(function () {\r\n                updateOverrideContexts(repeat.views(), 0);\r\n            });\r\n        }\r\n        else {\r\n            updateOverrideContexts(repeat.views(), 0);\r\n        }\r\n    };\r\n    MapRepeatStrategy.prototype._getViewIndexByKey = function (repeat, key) {\r\n        var i;\r\n        var ii;\r\n        var child;\r\n        for (i = 0, ii = repeat.viewCount(); i < ii; ++i) {\r\n            child = repeat.view(i);\r\n            if (child.bindingContext[repeat.key] === key) {\r\n                return i;\r\n            }\r\n        }\r\n        return undefined;\r\n    };\r\n    return MapRepeatStrategy;\r\n}());\n\nvar NullRepeatStrategy = (function () {\r\n    function NullRepeatStrategy() {\r\n    }\r\n    NullRepeatStrategy.prototype.instanceChanged = function (repeat, items) {\r\n        repeat.removeAllViews(true);\r\n    };\r\n    NullRepeatStrategy.prototype.getCollectionObserver = function (observerLocator, items) {\r\n    };\r\n    return NullRepeatStrategy;\r\n}());\n\nvar NumberRepeatStrategy = (function () {\r\n    function NumberRepeatStrategy() {\r\n    }\r\n    NumberRepeatStrategy.prototype.getCollectionObserver = function () {\r\n        return null;\r\n    };\r\n    NumberRepeatStrategy.prototype.instanceChanged = function (repeat, value) {\r\n        var _this = this;\r\n        var removePromise = repeat.removeAllViews(true, !repeat.viewsRequireLifecycle);\r\n        if (removePromise instanceof Promise) {\r\n            removePromise.then(function () { return _this._standardProcessItems(repeat, value); });\r\n            return;\r\n        }\r\n        this._standardProcessItems(repeat, value);\r\n    };\r\n    NumberRepeatStrategy.prototype._standardProcessItems = function (repeat, value) {\r\n        var childrenLength = repeat.viewCount();\r\n        var i;\r\n        var ii;\r\n        var overrideContext;\r\n        var viewsToRemove;\r\n        value = Math.floor(value);\r\n        viewsToRemove = childrenLength - value;\r\n        if (viewsToRemove > 0) {\r\n            if (viewsToRemove > childrenLength) {\r\n                viewsToRemove = childrenLength;\r\n            }\r\n            for (i = 0, ii = viewsToRemove; i < ii; ++i) {\r\n                repeat.removeView(childrenLength - (i + 1), true, !repeat.viewsRequireLifecycle);\r\n            }\r\n            return;\r\n        }\r\n        for (i = childrenLength, ii = value; i < ii; ++i) {\r\n            overrideContext = createFullOverrideContext(repeat, i, i, ii);\r\n            repeat.addView(overrideContext.bindingContext, overrideContext);\r\n        }\r\n        updateOverrideContexts(repeat.views(), 0);\r\n    };\r\n    return NumberRepeatStrategy;\r\n}());\n\nvar SetRepeatStrategy = (function () {\r\n    function SetRepeatStrategy() {\r\n    }\r\n    SetRepeatStrategy.prototype.getCollectionObserver = function (observerLocator, items) {\r\n        return observerLocator.getSetObserver(items);\r\n    };\r\n    SetRepeatStrategy.prototype.instanceChanged = function (repeat, items) {\r\n        var _this = this;\r\n        var removePromise = repeat.removeAllViews(true, !repeat.viewsRequireLifecycle);\r\n        if (removePromise instanceof Promise) {\r\n            removePromise.then(function () { return _this._standardProcessItems(repeat, items); });\r\n            return;\r\n        }\r\n        this._standardProcessItems(repeat, items);\r\n    };\r\n    SetRepeatStrategy.prototype._standardProcessItems = function (repeat, items) {\r\n        var index = 0;\r\n        var overrideContext;\r\n        items.forEach(function (value) {\r\n            overrideContext = createFullOverrideContext(repeat, value, index, items.size);\r\n            repeat.addView(overrideContext.bindingContext, overrideContext);\r\n            ++index;\r\n        });\r\n    };\r\n    SetRepeatStrategy.prototype.instanceMutated = function (repeat, set, records) {\r\n        var value;\r\n        var i;\r\n        var ii;\r\n        var overrideContext;\r\n        var removeIndex;\r\n        var record;\r\n        var rmPromises = [];\r\n        var viewOrPromise;\r\n        for (i = 0, ii = records.length; i < ii; ++i) {\r\n            record = records[i];\r\n            value = record.value;\r\n            switch (record.type) {\r\n                case \'add\':\r\n                    var size = Math.max(set.size - 1, 0);\r\n                    overrideContext = createFullOverrideContext(repeat, value, size, set.size);\r\n                    repeat.insertView(size, overrideContext.bindingContext, overrideContext);\r\n                    break;\r\n                case \'delete\':\r\n                    removeIndex = this._getViewIndexByValue(repeat, value);\r\n                    viewOrPromise = repeat.removeView(removeIndex, true, !repeat.viewsRequireLifecycle);\r\n                    if (viewOrPromise instanceof Promise) {\r\n                        rmPromises.push(viewOrPromise);\r\n                    }\r\n                    break;\r\n                case \'clear\':\r\n                    repeat.removeAllViews(true, !repeat.viewsRequireLifecycle);\r\n                    break;\r\n                default:\r\n                    continue;\r\n            }\r\n        }\r\n        if (rmPromises.length > 0) {\r\n            Promise.all(rmPromises).then(function () {\r\n                updateOverrideContexts(repeat.views(), 0);\r\n            });\r\n        }\r\n        else {\r\n            updateOverrideContexts(repeat.views(), 0);\r\n        }\r\n    };\r\n    SetRepeatStrategy.prototype._getViewIndexByValue = function (repeat, value) {\r\n        var i;\r\n        var ii;\r\n        var child;\r\n        for (i = 0, ii = repeat.viewCount(); i < ii; ++i) {\r\n            child = repeat.view(i);\r\n            if (child.bindingContext[repeat.local] === value) {\r\n                return i;\r\n            }\r\n        }\r\n        return undefined;\r\n    };\r\n    return SetRepeatStrategy;\r\n}());\n\nvar RepeatStrategyLocator = (function () {\r\n    function RepeatStrategyLocator() {\r\n        this.matchers = [];\r\n        this.strategies = [];\r\n        this.addStrategy(function (items) { return items === null || items === undefined; }, new NullRepeatStrategy());\r\n        this.addStrategy(function (items) { return items instanceof Array; }, new ArrayRepeatStrategy());\r\n        this.addStrategy(function (items) { return items instanceof Map; }, new MapRepeatStrategy());\r\n        this.addStrategy(function (items) { return items instanceof Set; }, new SetRepeatStrategy());\r\n        this.addStrategy(function (items) { return typeof items === \'number\'; }, new NumberRepeatStrategy());\r\n    }\r\n    RepeatStrategyLocator.prototype.addStrategy = function (matcher, strategy) {\r\n        this.matchers.push(matcher);\r\n        this.strategies.push(strategy);\r\n    };\r\n    RepeatStrategyLocator.prototype.getStrategy = function (items) {\r\n        var matchers = this.matchers;\r\n        for (var i = 0, ii = matchers.length; i < ii; ++i) {\r\n            if (matchers[i](items)) {\r\n                return this.strategies[i];\r\n            }\r\n        }\r\n        return null;\r\n    };\r\n    return RepeatStrategyLocator;\r\n}());\n\nvar lifecycleOptionalBehaviors = [\'focus\', \'if\', \'else\', \'repeat\', \'show\', \'hide\', \'with\'];\r\nfunction behaviorRequiresLifecycle(instruction) {\r\n    var t = instruction.type;\r\n    var name = t.elementName !== null ? t.elementName : t.attributeName;\r\n    return lifecycleOptionalBehaviors.indexOf(name) === -1 && (t.handlesAttached || t.handlesBind || t.handlesCreated || t.handlesDetached || t.handlesUnbind)\r\n        || t.viewFactory && viewsRequireLifecycle(t.viewFactory)\r\n        || instruction.viewFactory && viewsRequireLifecycle(instruction.viewFactory);\r\n}\r\nfunction targetRequiresLifecycle(instruction) {\r\n    var behaviors = instruction.behaviorInstructions;\r\n    if (behaviors) {\r\n        var i = behaviors.length;\r\n        while (i--) {\r\n            if (behaviorRequiresLifecycle(behaviors[i])) {\r\n                return true;\r\n            }\r\n        }\r\n    }\r\n    return instruction.viewFactory && viewsRequireLifecycle(instruction.viewFactory);\r\n}\r\nfunction viewsRequireLifecycle(viewFactory) {\r\n    if (\'_viewsRequireLifecycle\' in viewFactory) {\r\n        return viewFactory._viewsRequireLifecycle;\r\n    }\r\n    viewFactory._viewsRequireLifecycle = false;\r\n    if (viewFactory.viewFactory) {\r\n        viewFactory._viewsRequireLifecycle = viewsRequireLifecycle(viewFactory.viewFactory);\r\n        return viewFactory._viewsRequireLifecycle;\r\n    }\r\n    if (viewFactory.template.querySelector(\'.au-animate\')) {\r\n        viewFactory._viewsRequireLifecycle = true;\r\n        return true;\r\n    }\r\n    for (var id in viewFactory.instructions) {\r\n        if (targetRequiresLifecycle(viewFactory.instructions[id])) {\r\n            viewFactory._viewsRequireLifecycle = true;\r\n            return true;\r\n        }\r\n    }\r\n    viewFactory._viewsRequireLifecycle = false;\r\n    return false;\r\n}\n\nvar AbstractRepeater = (function () {\r\n    function AbstractRepeater(options) {\r\n        Object.assign(this, {\r\n            local: \'items\',\r\n            viewsRequireLifecycle: true\r\n        }, options);\r\n    }\r\n    AbstractRepeater.prototype.viewCount = function () {\r\n        throw new Error(\'subclass must implement `viewCount`\');\r\n    };\r\n    AbstractRepeater.prototype.views = function () {\r\n        throw new Error(\'subclass must implement `views`\');\r\n    };\r\n    AbstractRepeater.prototype.view = function (index) {\r\n        throw new Error(\'subclass must implement `view`\');\r\n    };\r\n    AbstractRepeater.prototype.matcher = function () {\r\n        throw new Error(\'subclass must implement `matcher`\');\r\n    };\r\n    AbstractRepeater.prototype.addView = function (bindingContext, overrideContext) {\r\n        throw new Error(\'subclass must implement `addView`\');\r\n    };\r\n    AbstractRepeater.prototype.insertView = function (index, bindingContext, overrideContext) {\r\n        throw new Error(\'subclass must implement `insertView`\');\r\n    };\r\n    AbstractRepeater.prototype.moveView = function (sourceIndex, targetIndex) {\r\n        throw new Error(\'subclass must implement `moveView`\');\r\n    };\r\n    AbstractRepeater.prototype.removeAllViews = function (returnToCache, skipAnimation) {\r\n        throw new Error(\'subclass must implement `removeAllViews`\');\r\n    };\r\n    AbstractRepeater.prototype.removeViews = function (viewsToRemove, returnToCache, skipAnimation) {\r\n        throw new Error(\'subclass must implement `removeView`\');\r\n    };\r\n    AbstractRepeater.prototype.removeView = function (index, returnToCache, skipAnimation) {\r\n        throw new Error(\'subclass must implement `removeView`\');\r\n    };\r\n    AbstractRepeater.prototype.updateBindings = function (view) {\r\n        throw new Error(\'subclass must implement `updateBindings`\');\r\n    };\r\n    return AbstractRepeater;\r\n}());\n\nvar matcherExtractionMarker = \'__marker_extracted__\';\r\nvar Repeat = (function (_super) {\r\n    __extends(Repeat, _super);\r\n    function Repeat(viewFactory, instruction, viewSlot, viewResources, observerLocator, strategyLocator) {\r\n        var _this = _super.call(this, {\r\n            local: \'item\',\r\n            viewsRequireLifecycle: viewsRequireLifecycle(viewFactory)\r\n        }) || this;\r\n        _this.viewFactory = viewFactory;\r\n        _this.instruction = instruction;\r\n        _this.viewSlot = viewSlot;\r\n        _this.lookupFunctions = viewResources.lookupFunctions;\r\n        _this.observerLocator = observerLocator;\r\n        _this.key = \'key\';\r\n        _this.value = \'value\';\r\n        _this.strategyLocator = strategyLocator;\r\n        _this.ignoreMutation = false;\r\n        _this.sourceExpression = getItemsSourceExpression(_this.instruction, \'repeat.for\');\r\n        _this.isOneTime = isOneTime(_this.sourceExpression);\r\n        _this.viewsRequireLifecycle = viewsRequireLifecycle(viewFactory);\r\n        return _this;\r\n    }\r\n    Repeat_1 = Repeat;\r\n    Repeat.prototype.call = function (context, changes) {\r\n        this[context](this.items, changes);\r\n    };\r\n    Repeat.prototype.bind = function (bindingContext, overrideContext) {\r\n        this.scope = { bindingContext: bindingContext, overrideContext: overrideContext };\r\n        var instruction = this.instruction;\r\n        if (!(matcherExtractionMarker in instruction)) {\r\n            instruction[matcherExtractionMarker] = this._captureAndRemoveMatcherBinding();\r\n        }\r\n        this.matcherBinding = instruction[matcherExtractionMarker];\r\n        this.itemsChanged();\r\n    };\r\n    Repeat.prototype.unbind = function () {\r\n        this.scope = null;\r\n        this.items = null;\r\n        this.matcherBinding = null;\r\n        this.viewSlot.removeAll(true, true);\r\n        this._unsubscribeCollection();\r\n    };\r\n    Repeat.prototype._unsubscribeCollection = function () {\r\n        if (this.collectionObserver) {\r\n            this.collectionObserver.unsubscribe(this.callContext, this);\r\n            this.collectionObserver = null;\r\n            this.callContext = null;\r\n        }\r\n    };\r\n    Repeat.prototype.itemsChanged = function () {\r\n        var _this = this;\r\n        this._unsubscribeCollection();\r\n        if (!this.scope) {\r\n            return;\r\n        }\r\n        var items = this.items;\r\n        this.strategy = this.strategyLocator.getStrategy(items);\r\n        if (!this.strategy) {\r\n            throw new Error("Value for \'".concat(this.sourceExpression, "\' is non-repeatable"));\r\n        }\r\n        if (!this.isOneTime && !this._observeInnerCollection()) {\r\n            this._observeCollection();\r\n        }\r\n        this.ignoreMutation = true;\r\n        this.strategy.instanceChanged(this, items);\r\n        this.observerLocator.taskQueue.queueMicroTask(function () {\r\n            _this.ignoreMutation = false;\r\n        });\r\n    };\r\n    Repeat.prototype._getInnerCollection = function () {\r\n        var expression = unwrapExpression(this.sourceExpression);\r\n        if (!expression) {\r\n            return null;\r\n        }\r\n        return expression.evaluate(this.scope, null);\r\n    };\r\n    Repeat.prototype.handleCollectionMutated = function (collection, changes) {\r\n        if (!this.collectionObserver) {\r\n            return;\r\n        }\r\n        if (this.ignoreMutation) {\r\n            return;\r\n        }\r\n        this.strategy.instanceMutated(this, collection, changes);\r\n    };\r\n    Repeat.prototype.handleInnerCollectionMutated = function (collection, changes) {\r\n        var _this = this;\r\n        if (!this.collectionObserver) {\r\n            return;\r\n        }\r\n        if (this.ignoreMutation) {\r\n            return;\r\n        }\r\n        this.ignoreMutation = true;\r\n        var newItems = this.sourceExpression.evaluate(this.scope, this.lookupFunctions);\r\n        this.observerLocator.taskQueue.queueMicroTask(function () { return _this.ignoreMutation = false; });\r\n        if (newItems === this.items) {\r\n            this.itemsChanged();\r\n        }\r\n        else {\r\n            this.items = newItems;\r\n        }\r\n    };\r\n    Repeat.prototype._observeInnerCollection = function () {\r\n        var items = this._getInnerCollection();\r\n        var strategy = this.strategyLocator.getStrategy(items);\r\n        if (!strategy) {\r\n            return false;\r\n        }\r\n        this.collectionObserver = strategy.getCollectionObserver(this.observerLocator, items);\r\n        if (!this.collectionObserver) {\r\n            return false;\r\n        }\r\n        this.callContext = \'handleInnerCollectionMutated\';\r\n        this.collectionObserver.subscribe(this.callContext, this);\r\n        return true;\r\n    };\r\n    Repeat.prototype._observeCollection = function () {\r\n        var items = this.items;\r\n        this.collectionObserver = this.strategy.getCollectionObserver(this.observerLocator, items);\r\n        if (this.collectionObserver) {\r\n            this.callContext = \'handleCollectionMutated\';\r\n            this.collectionObserver.subscribe(this.callContext, this);\r\n        }\r\n    };\r\n    Repeat.prototype._captureAndRemoveMatcherBinding = function () {\r\n        var viewFactory = this.viewFactory.viewFactory;\r\n        if (viewFactory) {\r\n            var template = viewFactory.template;\r\n            var instructions = viewFactory.instructions;\r\n            if (Repeat_1.useInnerMatcher) {\r\n                return extractMatcherBindingExpression(instructions);\r\n            }\r\n            if (getChildrenCount(template) > 1) {\r\n                return undefined;\r\n            }\r\n            var repeatedElement = getFirstElementChild(template);\r\n            if (!repeatedElement.hasAttribute(\'au-target-id\')) {\r\n                return undefined;\r\n            }\r\n            var repeatedElementTargetId = repeatedElement.getAttribute(\'au-target-id\');\r\n            return extractMatcherBindingExpression(instructions, repeatedElementTargetId);\r\n        }\r\n        return undefined;\r\n    };\r\n    Repeat.prototype.viewCount = function () { return this.viewSlot.children.length; };\r\n    Repeat.prototype.views = function () { return this.viewSlot.children; };\r\n    Repeat.prototype.view = function (index) { return this.viewSlot.children[index]; };\r\n    Repeat.prototype.matcher = function () {\r\n        var matcherBinding = this.matcherBinding;\r\n        return matcherBinding\r\n            ? matcherBinding.sourceExpression.evaluate(this.scope, matcherBinding.lookupFunctions)\r\n            : null;\r\n    };\r\n    Repeat.prototype.addView = function (bindingContext, overrideContext) {\r\n        var view = this.viewFactory.create();\r\n        view.bind(bindingContext, overrideContext);\r\n        this.viewSlot.add(view);\r\n    };\r\n    Repeat.prototype.insertView = function (index, bindingContext, overrideContext) {\r\n        var view = this.viewFactory.create();\r\n        view.bind(bindingContext, overrideContext);\r\n        this.viewSlot.insert(index, view);\r\n    };\r\n    Repeat.prototype.moveView = function (sourceIndex, targetIndex) {\r\n        this.viewSlot.move(sourceIndex, targetIndex);\r\n    };\r\n    Repeat.prototype.removeAllViews = function (returnToCache, skipAnimation) {\r\n        return this.viewSlot.removeAll(returnToCache, skipAnimation);\r\n    };\r\n    Repeat.prototype.removeViews = function (viewsToRemove, returnToCache, skipAnimation) {\r\n        return this.viewSlot.removeMany(viewsToRemove, returnToCache, skipAnimation);\r\n    };\r\n    Repeat.prototype.removeView = function (index, returnToCache, skipAnimation) {\r\n        return this.viewSlot.removeAt(index, returnToCache, skipAnimation);\r\n    };\r\n    Repeat.prototype.updateBindings = function (view) {\r\n        var $view = view;\r\n        var j = $view.bindings.length;\r\n        while (j--) {\r\n            updateOneTimeBinding($view.bindings[j]);\r\n        }\r\n        j = $view.controllers.length;\r\n        while (j--) {\r\n            var k = $view.controllers[j].boundProperties.length;\r\n            while (k--) {\r\n                var binding = $view.controllers[j].boundProperties[k].binding;\r\n                updateOneTimeBinding(binding);\r\n            }\r\n        }\r\n    };\r\n    var Repeat_1;\r\n    Repeat.useInnerMatcher = true;\r\n    __decorate([\r\n        aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* bindable */ "S"]\r\n    ], Repeat.prototype, "items", void 0);\r\n    __decorate([\r\n        aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* bindable */ "S"]\r\n    ], Repeat.prototype, "local", void 0);\r\n    __decorate([\r\n        aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* bindable */ "S"]\r\n    ], Repeat.prototype, "key", void 0);\r\n    __decorate([\r\n        aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* bindable */ "S"]\r\n    ], Repeat.prototype, "value", void 0);\r\n    Repeat = Repeat_1 = __decorate([\r\n        Object(aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* customAttribute */ "W"])(\'repeat\'),\r\n        aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* templateController */ "Fa"],\r\n        Object(aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_0__[/* inject */ "s"])(aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* BoundViewFactory */ "f"], aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* TargetInstruction */ "C"], aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* ViewSlot */ "N"], aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* ViewResources */ "M"], aurelia_binding__WEBPACK_IMPORTED_MODULE_4__["ObserverLocator"], RepeatStrategyLocator)\r\n    ], Repeat);\r\n    return Repeat;\r\n}(AbstractRepeater));\r\nvar extractMatcherBindingExpression = function (instructions, targetedElementId) {\r\n    var instructionIds = Object.keys(instructions);\r\n    for (var i = 0; i < instructionIds.length; i++) {\r\n        var instructionId = instructionIds[i];\r\n        if (targetedElementId !== undefined && instructionId !== targetedElementId) {\r\n            continue;\r\n        }\r\n        var expressions = instructions[instructionId].expressions;\r\n        if (expressions) {\r\n            for (var ii = 0; ii < expressions.length; ii++) {\r\n                if (expressions[ii].targetProperty === \'matcher\') {\r\n                    var matcherBindingExpression = expressions[ii];\r\n                    expressions.splice(ii, 1);\r\n                    return matcherBindingExpression;\r\n                }\r\n            }\r\n        }\r\n    }\r\n};\r\nvar getChildrenCount = function (el) {\r\n    var childNodes = el.childNodes;\r\n    var count = 0;\r\n    for (var i = 0, ii = childNodes.length; ii > i; ++i) {\r\n        if (childNodes[i].nodeType === 1) {\r\n            ++count;\r\n        }\r\n    }\r\n    return count;\r\n};\r\nvar getFirstElementChild = function (el) {\r\n    var firstChild = el.firstChild;\r\n    while (firstChild !== null) {\r\n        if (firstChild.nodeType === 1) {\r\n            return firstChild;\r\n        }\r\n        firstChild = firstChild.nextSibling;\r\n    }\r\n    return null;\r\n};\n\nvar aureliaHideClassName = \'aurelia-hide\';\r\nvar aureliaHideClass = ".".concat(aureliaHideClassName, " { display:none !important; }");\r\nfunction injectAureliaHideStyleAtHead() {\r\n    aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* DOM */ "b"].injectStyles(aureliaHideClass);\r\n}\r\nfunction injectAureliaHideStyleAtBoundary(domBoundary) {\r\n    if (aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* FEATURE */ "c"].shadowDOM && domBoundary && !domBoundary.hasAureliaHideStyle) {\r\n        domBoundary.hasAureliaHideStyle = true;\r\n        aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* DOM */ "b"].injectStyles(aureliaHideClass, domBoundary);\r\n    }\r\n}\n\nvar Show = (function () {\r\n    function Show(element, animator, domBoundary) {\r\n        this.element = element;\r\n        this.animator = animator;\r\n        this.domBoundary = domBoundary;\r\n    }\r\n    Show.inject = function () {\r\n        return [aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* DOM */ "b"].Element, aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* Animator */ "a"], aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_0__[/* Optional */ "h"].of(aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* DOM */ "b"].boundary, true)];\r\n    };\r\n    Show.prototype.created = function () {\r\n        injectAureliaHideStyleAtBoundary(this.domBoundary);\r\n    };\r\n    Show.prototype.valueChanged = function (newValue) {\r\n        var element = this.element;\r\n        var animator = this.animator;\r\n        if (newValue) {\r\n            animator.removeClass(element, aureliaHideClassName);\r\n        }\r\n        else {\r\n            animator.addClass(element, aureliaHideClassName);\r\n        }\r\n    };\r\n    Show.prototype.bind = function (bindingContext) {\r\n        this.valueChanged(this.value);\r\n    };\r\n    Show = __decorate([\r\n        Object(aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* customAttribute */ "W"])(\'show\')\r\n    ], Show);\r\n    return Show;\r\n}());\n\nvar Hide = (function () {\r\n    function Hide(element, animator, domBoundary) {\r\n        this.element = element;\r\n        this.animator = animator;\r\n        this.domBoundary = domBoundary;\r\n    }\r\n    Hide.inject = function () {\r\n        return [aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* DOM */ "b"].Element, aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* Animator */ "a"], aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_0__[/* Optional */ "h"].of(aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* DOM */ "b"].boundary, true)];\r\n    };\r\n    Hide.prototype.created = function () {\r\n        injectAureliaHideStyleAtBoundary(this.domBoundary);\r\n    };\r\n    Hide.prototype.valueChanged = function (newValue) {\r\n        if (newValue) {\r\n            this.animator.addClass(this.element, aureliaHideClassName);\r\n        }\r\n        else {\r\n            this.animator.removeClass(this.element, aureliaHideClassName);\r\n        }\r\n    };\r\n    Hide.prototype.bind = function (bindingContext) {\r\n        this.valueChanged(this.value);\r\n    };\r\n    Hide.prototype.value = function (value) {\r\n        throw new Error(\'Method not implemented.\');\r\n    };\r\n    Hide = __decorate([\r\n        Object(aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* customAttribute */ "W"])(\'hide\')\r\n    ], Hide);\r\n    return Hide;\r\n}());\n\nvar HTMLSanitizer = (function () {\r\n    function HTMLSanitizer() {\r\n    }\r\n    HTMLSanitizer.prototype.sanitize = function (input) {\r\n        throw new Error("To protect the application against a wide variety of sophisticated XSS attacks.\\nPlease see https://aurelia.io/docs/binding/basics#element-content for instructions on how to use a secure solution like DOMPurify or sanitize-html.");\r\n    };\r\n    return HTMLSanitizer;\r\n}());\n\nvar SanitizeHTMLValueConverter = (function () {\r\n    function SanitizeHTMLValueConverter(sanitizer) {\r\n        this.sanitizer = sanitizer;\r\n    }\r\n    SanitizeHTMLValueConverter.prototype.toView = function (untrustedMarkup) {\r\n        if (untrustedMarkup === null || untrustedMarkup === undefined) {\r\n            return null;\r\n        }\r\n        return this.sanitizer.sanitize(untrustedMarkup);\r\n    };\r\n    SanitizeHTMLValueConverter = __decorate([\r\n        Object(aurelia_binding__WEBPACK_IMPORTED_MODULE_4__["valueConverter"])(\'sanitizeHTML\'),\r\n        Object(aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_0__[/* inject */ "s"])(HTMLSanitizer)\r\n    ], SanitizeHTMLValueConverter);\r\n    return SanitizeHTMLValueConverter;\r\n}());\n\nvar Replaceable = (function () {\r\n    function Replaceable(viewFactory, viewSlot) {\r\n        this.viewFactory = viewFactory;\r\n        this.viewSlot = viewSlot;\r\n        this.view = null;\r\n    }\r\n    Replaceable.prototype.bind = function (bindingContext, overrideContext) {\r\n        if (this.view === null) {\r\n            this.view = this.viewFactory.create();\r\n            this.viewSlot.add(this.view);\r\n        }\r\n        this.view.bind(bindingContext, overrideContext);\r\n    };\r\n    Replaceable.prototype.unbind = function () {\r\n        this.view.unbind();\r\n    };\r\n    Replaceable = __decorate([\r\n        Object(aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* customAttribute */ "W"])(\'replaceable\'),\r\n        aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* templateController */ "Fa"],\r\n        Object(aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_0__[/* inject */ "s"])(aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* BoundViewFactory */ "f"], aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* ViewSlot */ "N"])\r\n    ], Replaceable);\r\n    return Replaceable;\r\n}());\n\nvar Focus = (function () {\r\n    function Focus(element, taskQueue) {\r\n        this.element = element;\r\n        this.taskQueue = taskQueue;\r\n        this.isAttached = false;\r\n        this.needsApply = false;\r\n    }\r\n    Focus.inject = function () {\r\n        return [aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* DOM */ "b"].Element, aurelia_task_queue__WEBPACK_IMPORTED_MODULE_2__[/* TaskQueue */ "a"]];\r\n    };\r\n    Focus.prototype.valueChanged = function () {\r\n        if (this.isAttached) {\r\n            this._apply();\r\n        }\r\n        else {\r\n            this.needsApply = true;\r\n        }\r\n    };\r\n    Focus.prototype._apply = function () {\r\n        var _this = this;\r\n        if (this.value) {\r\n            this.taskQueue.queueMicroTask(function () {\r\n                if (_this.value) {\r\n                    _this.element.focus();\r\n                }\r\n            });\r\n        }\r\n        else {\r\n            this.element.blur();\r\n        }\r\n    };\r\n    Focus.prototype.attached = function () {\r\n        this.isAttached = true;\r\n        if (this.needsApply) {\r\n            this.needsApply = false;\r\n            this._apply();\r\n        }\r\n        this.element.addEventListener(\'focus\', this);\r\n        this.element.addEventListener(\'blur\', this);\r\n    };\r\n    Focus.prototype.detached = function () {\r\n        this.isAttached = false;\r\n        this.element.removeEventListener(\'focus\', this);\r\n        this.element.removeEventListener(\'blur\', this);\r\n    };\r\n    Focus.prototype.handleEvent = function (e) {\r\n        if (e.type === \'focus\') {\r\n            this.value = true;\r\n        }\r\n        else if (aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* DOM */ "b"].activeElement !== this.element) {\r\n            this.value = false;\r\n        }\r\n    };\r\n    Focus = __decorate([\r\n        Object(aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* customAttribute */ "W"])(\'focus\', aurelia_binding__WEBPACK_IMPORTED_MODULE_4__["bindingMode"].twoWay)\r\n    ], Focus);\r\n    return Focus;\r\n}());\n\nvar cssUrlMatcher = /url\\((?![\'"]data)([^)]+)\\)/gi;\r\nfunction fixupCSSUrls(address, css) {\r\n    if (typeof css !== \'string\') {\r\n        throw new Error("Failed loading required CSS file: ".concat(address));\r\n    }\r\n    return css.replace(cssUrlMatcher, function (match, p1) {\r\n        var quote = p1.charAt(0);\r\n        if (quote === \'\\\'\' || quote === \'"\') {\r\n            p1 = p1.substr(1, p1.length - 2);\r\n        }\r\n        return \'url(\\\'\' + Object(aurelia_path__WEBPACK_IMPORTED_MODULE_6__["relativeToFile"])(p1, address) + \'\\\')\';\r\n    });\r\n}\r\nvar CSSResource = (function () {\r\n    function CSSResource(address) {\r\n        this.address = address;\r\n        this._scoped = null;\r\n        this._global = false;\r\n        this._alreadyGloballyInjected = false;\r\n    }\r\n    CSSResource.prototype.initialize = function (container, Target) {\r\n        this._scoped = new Target(this);\r\n    };\r\n    CSSResource.prototype.register = function (registry, name) {\r\n        if (name === \'scoped\') {\r\n            registry.registerViewEngineHooks(this._scoped);\r\n        }\r\n        else {\r\n            this._global = true;\r\n        }\r\n    };\r\n    CSSResource.prototype.load = function (container) {\r\n        var _this = this;\r\n        return container.get(aurelia_loader__WEBPACK_IMPORTED_MODULE_5__[/* Loader */ "a"])\r\n            .loadText(this.address)\r\n            .catch(function () { return null; })\r\n            .then(function (text) {\r\n            text = fixupCSSUrls(_this.address, text);\r\n            _this._scoped.css = text;\r\n            if (_this._global) {\r\n                _this._alreadyGloballyInjected = true;\r\n                aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* DOM */ "b"].injectStyles(text);\r\n            }\r\n            return _this;\r\n        });\r\n    };\r\n    return CSSResource;\r\n}());\r\nvar CSSViewEngineHooks = (function () {\r\n    function CSSViewEngineHooks(owner) {\r\n        this.owner = owner;\r\n        this.css = null;\r\n    }\r\n    CSSViewEngineHooks.prototype.beforeCompile = function (content, resources, instruction) {\r\n        if (instruction.targetShadowDOM) {\r\n            aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* DOM */ "b"].injectStyles(this.css, content, true);\r\n        }\r\n        else if (aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* FEATURE */ "c"].scopedCSS) {\r\n            var styleNode = aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* DOM */ "b"].injectStyles(this.css, content, true);\r\n            styleNode.setAttribute(\'scoped\', \'scoped\');\r\n        }\r\n        else if (this._global && !this.owner._alreadyGloballyInjected) {\r\n            aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[/* DOM */ "b"].injectStyles(this.css);\r\n            this.owner._alreadyGloballyInjected = true;\r\n        }\r\n    };\r\n    return CSSViewEngineHooks;\r\n}());\r\nfunction _createCSSResource(address) {\r\n    var ViewCSS = (function (_super) {\r\n        __extends(ViewCSS, _super);\r\n        function ViewCSS() {\r\n            return _super !== null && _super.apply(this, arguments) || this;\r\n        }\r\n        ViewCSS = __decorate([\r\n            Object(aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* resource */ "Ea"])(new CSSResource(address))\r\n        ], ViewCSS);\r\n        return ViewCSS;\r\n    }(CSSViewEngineHooks));\r\n    return ViewCSS;\r\n}\n\nvar AttrBindingBehavior = (function () {\r\n    function AttrBindingBehavior() {\r\n    }\r\n    AttrBindingBehavior.prototype.bind = function (binding, source) {\r\n        binding.targetObserver = new aurelia_binding__WEBPACK_IMPORTED_MODULE_4__["DataAttributeObserver"](binding.target, binding.targetProperty);\r\n    };\r\n    AttrBindingBehavior.prototype.unbind = function (binding, source) {\r\n    };\r\n    AttrBindingBehavior = __decorate([\r\n        Object(aurelia_binding__WEBPACK_IMPORTED_MODULE_4__["bindingBehavior"])(\'attr\')\r\n    ], AttrBindingBehavior);\r\n    return AttrBindingBehavior;\r\n}());\n\nvar modeBindingBehavior = {\r\n    bind: function (binding, source, lookupFunctions) {\r\n        binding.originalMode = binding.mode;\r\n        binding.mode = this.mode;\r\n    },\r\n    unbind: function (binding, source) {\r\n        binding.mode = binding.originalMode;\r\n        binding.originalMode = null;\r\n    }\r\n};\r\nvar OneTimeBindingBehavior = (function () {\r\n    function OneTimeBindingBehavior() {\r\n        this.mode = aurelia_binding__WEBPACK_IMPORTED_MODULE_4__["bindingMode"].oneTime;\r\n    }\r\n    OneTimeBindingBehavior = __decorate([\r\n        Object(aurelia_metadata__WEBPACK_IMPORTED_MODULE_7__[/* mixin */ "e"])(modeBindingBehavior),\r\n        Object(aurelia_binding__WEBPACK_IMPORTED_MODULE_4__["bindingBehavior"])(\'oneTime\')\r\n    ], OneTimeBindingBehavior);\r\n    return OneTimeBindingBehavior;\r\n}());\r\nvar OneWayBindingBehavior = (function () {\r\n    function OneWayBindingBehavior() {\r\n        this.mode = aurelia_binding__WEBPACK_IMPORTED_MODULE_4__["bindingMode"].toView;\r\n    }\r\n    OneWayBindingBehavior = __decorate([\r\n        Object(aurelia_metadata__WEBPACK_IMPORTED_MODULE_7__[/* mixin */ "e"])(modeBindingBehavior),\r\n        Object(aurelia_binding__WEBPACK_IMPORTED_MODULE_4__["bindingBehavior"])(\'oneWay\')\r\n    ], OneWayBindingBehavior);\r\n    return OneWayBindingBehavior;\r\n}());\r\nvar ToViewBindingBehavior = (function () {\r\n    function ToViewBindingBehavior() {\r\n        this.mode = aurelia_binding__WEBPACK_IMPORTED_MODULE_4__["bindingMode"].toView;\r\n    }\r\n    ToViewBindingBehavior = __decorate([\r\n        Object(aurelia_metadata__WEBPACK_IMPORTED_MODULE_7__[/* mixin */ "e"])(modeBindingBehavior),\r\n        Object(aurelia_binding__WEBPACK_IMPORTED_MODULE_4__["bindingBehavior"])(\'toView\')\r\n    ], ToViewBindingBehavior);\r\n    return ToViewBindingBehavior;\r\n}());\r\nvar FromViewBindingBehavior = (function () {\r\n    function FromViewBindingBehavior() {\r\n        this.mode = aurelia_binding__WEBPACK_IMPORTED_MODULE_4__["bindingMode"].fromView;\r\n    }\r\n    FromViewBindingBehavior = __decorate([\r\n        Object(aurelia_metadata__WEBPACK_IMPORTED_MODULE_7__[/* mixin */ "e"])(modeBindingBehavior),\r\n        Object(aurelia_binding__WEBPACK_IMPORTED_MODULE_4__["bindingBehavior"])(\'fromView\')\r\n    ], FromViewBindingBehavior);\r\n    return FromViewBindingBehavior;\r\n}());\r\nvar TwoWayBindingBehavior = (function () {\r\n    function TwoWayBindingBehavior() {\r\n        this.mode = aurelia_binding__WEBPACK_IMPORTED_MODULE_4__["bindingMode"].twoWay;\r\n    }\r\n    TwoWayBindingBehavior = __decorate([\r\n        Object(aurelia_metadata__WEBPACK_IMPORTED_MODULE_7__[/* mixin */ "e"])(modeBindingBehavior),\r\n        Object(aurelia_binding__WEBPACK_IMPORTED_MODULE_4__["bindingBehavior"])(\'twoWay\')\r\n    ], TwoWayBindingBehavior);\r\n    return TwoWayBindingBehavior;\r\n}());\n\nfunction throttle(newValue) {\r\n    var _this = this;\r\n    var state = this.throttleState;\r\n    var elapsed = +new Date() - state.last;\r\n    if (elapsed >= state.delay) {\r\n        clearTimeout(state.timeoutId);\r\n        state.timeoutId = null;\r\n        state.last = +new Date();\r\n        this.throttledMethod(newValue);\r\n        return;\r\n    }\r\n    state.newValue = newValue;\r\n    if (state.timeoutId === null) {\r\n        state.timeoutId = setTimeout(function () {\r\n            state.timeoutId = null;\r\n            state.last = +new Date();\r\n            _this.throttledMethod(state.newValue);\r\n        }, state.delay - elapsed);\r\n    }\r\n}\r\nvar ThrottleBindingBehavior = (function () {\r\n    function ThrottleBindingBehavior() {\r\n    }\r\n    ThrottleBindingBehavior.prototype.bind = function (binding, source, delay) {\r\n        if (delay === void 0) { delay = 200; }\r\n        var methodToThrottle = \'updateTarget\';\r\n        if (binding.callSource) {\r\n            methodToThrottle = \'callSource\';\r\n        }\r\n        else if (binding.updateSource && binding.mode === aurelia_binding__WEBPACK_IMPORTED_MODULE_4__["bindingMode"].twoWay) {\r\n            methodToThrottle = \'updateSource\';\r\n        }\r\n        binding.throttledMethod = binding[methodToThrottle];\r\n        binding.throttledMethod.originalName = methodToThrottle;\r\n        binding[methodToThrottle] = throttle;\r\n        binding.throttleState = {\r\n            delay: delay,\r\n            last: 0,\r\n            timeoutId: null\r\n        };\r\n    };\r\n    ThrottleBindingBehavior.prototype.unbind = function (binding, source) {\r\n        var methodToRestore = binding.throttledMethod.originalName;\r\n        binding[methodToRestore] = binding.throttledMethod;\r\n        binding.throttledMethod = null;\r\n        clearTimeout(binding.throttleState.timeoutId);\r\n        binding.throttleState = null;\r\n    };\r\n    ThrottleBindingBehavior = __decorate([\r\n        Object(aurelia_binding__WEBPACK_IMPORTED_MODULE_4__["bindingBehavior"])(\'throttle\')\r\n    ], ThrottleBindingBehavior);\r\n    return ThrottleBindingBehavior;\r\n}());\n\nvar unset = {};\r\nfunction debounceCallSource(event) {\r\n    var _this = this;\r\n    var state = this.debounceState;\r\n    clearTimeout(state.timeoutId);\r\n    state.timeoutId = setTimeout(function () { return _this.debouncedMethod(event); }, state.delay);\r\n}\r\nfunction debounceCall(context, newValue, oldValue) {\r\n    var _this = this;\r\n    var state = this.debounceState;\r\n    clearTimeout(state.timeoutId);\r\n    if (context !== state.callContextToDebounce) {\r\n        state.oldValue = unset;\r\n        this.debouncedMethod(context, newValue, oldValue);\r\n        return;\r\n    }\r\n    if (state.oldValue === unset) {\r\n        state.oldValue = oldValue;\r\n    }\r\n    state.timeoutId = setTimeout(function () {\r\n        var _oldValue = state.oldValue;\r\n        state.oldValue = unset;\r\n        _this.debouncedMethod(context, newValue, _oldValue);\r\n    }, state.delay);\r\n}\r\nvar DebounceBindingBehavior = (function () {\r\n    function DebounceBindingBehavior() {\r\n    }\r\n    DebounceBindingBehavior.prototype.bind = function (binding, source, delay) {\r\n        if (delay === void 0) { delay = 200; }\r\n        var isCallSource = binding.callSource !== undefined;\r\n        var methodToDebounce = isCallSource ? \'callSource\' : \'call\';\r\n        var debouncer = isCallSource ? debounceCallSource : debounceCall;\r\n        var mode = binding.mode;\r\n        var callContextToDebounce = mode === aurelia_binding__WEBPACK_IMPORTED_MODULE_4__["bindingMode"].twoWay || mode === aurelia_binding__WEBPACK_IMPORTED_MODULE_4__["bindingMode"].fromView ? aurelia_binding__WEBPACK_IMPORTED_MODULE_4__["targetContext"] : aurelia_binding__WEBPACK_IMPORTED_MODULE_4__["sourceContext"];\r\n        binding.debouncedMethod = binding[methodToDebounce];\r\n        binding.debouncedMethod.originalName = methodToDebounce;\r\n        binding[methodToDebounce] = debouncer;\r\n        binding.debounceState = {\r\n            callContextToDebounce: callContextToDebounce,\r\n            delay: delay,\r\n            timeoutId: 0,\r\n            oldValue: unset\r\n        };\r\n    };\r\n    DebounceBindingBehavior.prototype.unbind = function (binding, source) {\r\n        var methodToRestore = binding.debouncedMethod.originalName;\r\n        binding[methodToRestore] = binding.debouncedMethod;\r\n        binding.debouncedMethod = null;\r\n        clearTimeout(binding.debounceState.timeoutId);\r\n        binding.debounceState = null;\r\n    };\r\n    DebounceBindingBehavior = __decorate([\r\n        Object(aurelia_binding__WEBPACK_IMPORTED_MODULE_4__["bindingBehavior"])(\'debounce\')\r\n    ], DebounceBindingBehavior);\r\n    return DebounceBindingBehavior;\r\n}());\n\nfunction findOriginalEventTarget(event) {\r\n    return (event.path && event.path[0]) || (event.deepPath && event.deepPath[0]) || event.target;\r\n}\r\nfunction handleSelfEvent(event) {\r\n    var target = findOriginalEventTarget(event);\r\n    if (this.target !== target) {\r\n        return;\r\n    }\r\n    this.selfEventCallSource(event);\r\n}\r\nvar SelfBindingBehavior = (function () {\r\n    function SelfBindingBehavior() {\r\n    }\r\n    SelfBindingBehavior.prototype.bind = function (binding, source) {\r\n        if (!binding.callSource || !binding.targetEvent) {\r\n            throw new Error(\'Self binding behavior only supports event.\');\r\n        }\r\n        binding.selfEventCallSource = binding.callSource;\r\n        binding.callSource = handleSelfEvent;\r\n    };\r\n    SelfBindingBehavior.prototype.unbind = function (binding, source) {\r\n        binding.callSource = binding.selfEventCallSource;\r\n        binding.selfEventCallSource = null;\r\n    };\r\n    SelfBindingBehavior = __decorate([\r\n        Object(aurelia_binding__WEBPACK_IMPORTED_MODULE_4__["bindingBehavior"])(\'self\')\r\n    ], SelfBindingBehavior);\r\n    return SelfBindingBehavior;\r\n}());\n\nvar BindingSignaler = (function () {\r\n    function BindingSignaler() {\r\n        this.signals = {};\r\n    }\r\n    BindingSignaler.prototype.signal = function (name) {\r\n        var bindings = this.signals[name];\r\n        if (!bindings) {\r\n            return;\r\n        }\r\n        var i = bindings.length;\r\n        while (i--) {\r\n            bindings[i].call(aurelia_binding__WEBPACK_IMPORTED_MODULE_4__["sourceContext"]);\r\n        }\r\n    };\r\n    return BindingSignaler;\r\n}());\n\nvar SignalBindingBehavior = (function () {\r\n    function SignalBindingBehavior(bindingSignaler) {\r\n        this.signals = bindingSignaler.signals;\r\n    }\r\n    SignalBindingBehavior.inject = function () { return [BindingSignaler]; };\r\n    SignalBindingBehavior.prototype.bind = function (binding, source) {\r\n        var names = [];\r\n        for (var _i = 2; _i < arguments.length; _i++) {\r\n            names[_i - 2] = arguments[_i];\r\n        }\r\n        if (!binding.updateTarget) {\r\n            throw new Error(\'Only property bindings and string interpolation bindings can be signaled.  Trigger, delegate and call bindings cannot be signaled.\');\r\n        }\r\n        var signals = this.signals;\r\n        if (names.length === 1) {\r\n            var name_1 = names[0];\r\n            var bindings = signals[name_1] || (signals[name_1] = []);\r\n            bindings.push(binding);\r\n            binding.signalName = name_1;\r\n        }\r\n        else if (names.length > 1) {\r\n            var i = names.length;\r\n            while (i--) {\r\n                var name_2 = names[i];\r\n                var bindings = signals[name_2] || (signals[name_2] = []);\r\n                bindings.push(binding);\r\n            }\r\n            binding.signalName = names;\r\n        }\r\n        else {\r\n            throw new Error(\'Signal name is required.\');\r\n        }\r\n    };\r\n    SignalBindingBehavior.prototype.unbind = function (binding, source) {\r\n        var signals = this.signals;\r\n        var name = binding.signalName;\r\n        binding.signalName = null;\r\n        if (Array.isArray(name)) {\r\n            var names = name;\r\n            var i = names.length;\r\n            while (i--) {\r\n                var n = names[i];\r\n                var bindings = signals[n];\r\n                bindings.splice(bindings.indexOf(binding), 1);\r\n            }\r\n        }\r\n        else {\r\n            var bindings = signals[name];\r\n            bindings.splice(bindings.indexOf(binding), 1);\r\n        }\r\n    };\r\n    SignalBindingBehavior = __decorate([\r\n        Object(aurelia_binding__WEBPACK_IMPORTED_MODULE_4__["bindingBehavior"])(\'signal\')\r\n    ], SignalBindingBehavior);\r\n    return SignalBindingBehavior;\r\n}());\n\nvar eventNamesRequired = \'The updateTrigger binding behavior requires at least one event name argument: eg <input value.bind="firstName & updateTrigger:\\\'blur\\\'">\';\r\nvar notApplicableMessage = \'The updateTrigger binding behavior can only be applied to two-way/ from-view bindings on input/select elements.\';\r\nvar UpdateTriggerBindingBehavior = (function () {\r\n    function UpdateTriggerBindingBehavior() {\r\n    }\r\n    UpdateTriggerBindingBehavior.prototype.bind = function (binding, source) {\r\n        var events = [];\r\n        for (var _i = 2; _i < arguments.length; _i++) {\r\n            events[_i - 2] = arguments[_i];\r\n        }\r\n        if (events.length === 0) {\r\n            throw new Error(eventNamesRequired);\r\n        }\r\n        if (binding.mode !== aurelia_binding__WEBPACK_IMPORTED_MODULE_4__["bindingMode"].twoWay && binding.mode !== aurelia_binding__WEBPACK_IMPORTED_MODULE_4__["bindingMode"].fromView) {\r\n            throw new Error(notApplicableMessage);\r\n        }\r\n        var targetObserver = binding.observerLocator.getObserver(binding.target, binding.targetProperty);\r\n        if (!targetObserver.handler) {\r\n            throw new Error(notApplicableMessage);\r\n        }\r\n        binding.targetObserver = targetObserver;\r\n        targetObserver.originalHandler = binding.targetObserver.handler;\r\n        var handler = new aurelia_binding__WEBPACK_IMPORTED_MODULE_4__["EventSubscriber"](events);\r\n        targetObserver.handler = handler;\r\n    };\r\n    UpdateTriggerBindingBehavior.prototype.unbind = function (binding, source) {\r\n        var targetObserver = binding.targetObserver;\r\n        targetObserver.handler.dispose();\r\n        targetObserver.handler = targetObserver.originalHandler;\r\n        targetObserver.originalHandler = null;\r\n    };\r\n    UpdateTriggerBindingBehavior = __decorate([\r\n        Object(aurelia_binding__WEBPACK_IMPORTED_MODULE_4__["bindingBehavior"])(\'updateTrigger\')\r\n    ], UpdateTriggerBindingBehavior);\r\n    return UpdateTriggerBindingBehavior;\r\n}());\n\nfunction _createDynamicElement(_a) {\r\n    var name = _a.name, viewUrl = _a.viewUrl, bindableNames = _a.bindableNames, useShadowDOMmode = _a.useShadowDOMmode;\r\n    var DynamicElement = (function () {\r\n        function DynamicElement() {\r\n        }\r\n        DynamicElement.prototype.bind = function (bindingContext) {\r\n            this.$parent = bindingContext;\r\n        };\r\n        DynamicElement = __decorate([\r\n            Object(aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* customElement */ "X"])(name),\r\n            Object(aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* useView */ "Ha"])(viewUrl)\r\n        ], DynamicElement);\r\n        return DynamicElement;\r\n    }());\r\n    for (var i = 0, ii = bindableNames.length; i < ii; ++i) {\r\n        Object(aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* bindable */ "S"])(bindableNames[i])(DynamicElement);\r\n    }\r\n    switch (useShadowDOMmode) {\r\n        case \'open\':\r\n            Object(aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* useShadowDOM */ "Ga"])({ mode: \'open\' })(DynamicElement);\r\n            break;\r\n        case \'closed\':\r\n            Object(aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* useShadowDOM */ "Ga"])({ mode: \'closed\' })(DynamicElement);\r\n            break;\r\n        case \'\':\r\n            Object(aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* useShadowDOM */ "Ga"])(DynamicElement);\r\n            break;\r\n        case null:\r\n            break;\r\n        default:\r\n            Object(aurelia_logging__WEBPACK_IMPORTED_MODULE_8__["getLogger"])(\'aurelia-html-only-element\')\r\n                .warn("Expected \'use-shadow-dom\' value to be \\"close\\", \\"open\\" or \\"\\", received ".concat(useShadowDOMmode));\r\n            break;\r\n    }\r\n    return DynamicElement;\r\n}\n\nfunction getElementName(address) {\r\n    return /([^\\/^\\?]+)\\.html/i.exec(address)[1].toLowerCase();\r\n}\r\nfunction configure$1(config) {\r\n    var viewEngine = config.container.get(aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* ViewEngine */ "I"]);\r\n    var loader = config.aurelia.loader;\r\n    viewEngine.addResourcePlugin(\'.html\', {\r\n        \'fetch\': function (viewUrl) {\r\n            return loader.loadTemplate(viewUrl).then(function (registryEntry) {\r\n                var _a;\r\n                var bindableNames = registryEntry.template.getAttribute(\'bindable\');\r\n                var useShadowDOMmode = registryEntry.template.getAttribute(\'use-shadow-dom\');\r\n                var name = getElementName(viewUrl);\r\n                if (bindableNames) {\r\n                    bindableNames = bindableNames.split(\',\').map(function (x) { return x.trim(); });\r\n                    registryEntry.template.removeAttribute(\'bindable\');\r\n                }\r\n                else {\r\n                    bindableNames = [];\r\n                }\r\n                return _a = {}, _a[name] = _createDynamicElement({ name: name, viewUrl: viewUrl, bindableNames: bindableNames, useShadowDOMmode: useShadowDOMmode }), _a;\r\n            });\r\n        }\r\n    });\r\n}\n\nfunction configure(config) {\r\n    injectAureliaHideStyleAtHead();\r\n    config.globalResources(Compose, If, Else, With, Repeat, Show, Hide, Replaceable, Focus, SanitizeHTMLValueConverter, OneTimeBindingBehavior, OneWayBindingBehavior, ToViewBindingBehavior, FromViewBindingBehavior, TwoWayBindingBehavior, ThrottleBindingBehavior, DebounceBindingBehavior, SelfBindingBehavior, SignalBindingBehavior, UpdateTriggerBindingBehavior, AttrBindingBehavior);\r\n    configure$1(config);\r\n    var viewEngine = config.container.get(aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* ViewEngine */ "I"]);\r\n    var styleResourcePlugin = {\r\n        fetch: function (address) {\r\n            var _a;\r\n            return _a = {}, _a[address] = _createCSSResource(address), _a;\r\n        }\r\n    };\r\n    [\'.css\', \'.less\', \'.sass\', \'.scss\', \'.styl\'].forEach(function (ext) { return viewEngine.addResourcePlugin(ext, styleResourcePlugin); });\r\n}\n\n\n//# sourceMappingURL=aurelia-templating-resources.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXVyZWxpYS10ZW1wbGF0aW5nLXJlc291cmNlcy9kaXN0L25hdGl2ZS1tb2R1bGVzL2F1cmVsaWEtdGVtcGxhdGluZy1yZXNvdXJjZXMuanM/ZmNmMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQTJFO0FBQ2hDO0FBQ0k7QUFDbU07QUFDUDtBQUNuTTtBQUNNO0FBQ0w7QUFDRzs7QUFFNUM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVSxnQkFBZ0Isc0NBQXNDLGlCQUFpQixFQUFFO0FBQ25GLHlCQUF5Qiw4RUFBOEU7QUFDdkc7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixzQkFBc0I7QUFDekM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsUUFBUTtBQUNwRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxnREFBZ0Q7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQix1REFBRyxVQUFVLDhFQUFTLEVBQUUsNEVBQWlCLEVBQUUsbUVBQVEsRUFBRSx3RUFBYSxFQUFFLG9FQUFTO0FBQzdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsbUVBQVE7QUFDaEI7QUFDQTtBQUNBLFFBQVEsbUVBQVE7QUFDaEI7QUFDQTtBQUNBLFFBQVEsbUVBQVE7QUFDaEI7QUFDQTtBQUNBLFFBQVEsbUVBQVE7QUFDaEI7QUFDQTtBQUNBLFFBQVEsbUVBQVE7QUFDaEI7QUFDQTtBQUNBLFFBQVEsa0VBQU07QUFDZCxRQUFRLGdGQUFhO0FBQ3JCO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNFQUFzRSx1QkFBdUIsRUFBRTtBQUMvRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJEQUEyRCxvQkFBb0IsRUFBRTtBQUNqRjtBQUNBO0FBQ0E7QUFDQSxRQUFRLDJFQUFRLEVBQUUsd0JBQXdCO0FBQzFDO0FBQ0E7QUFDQSxRQUFRLG1FQUFRO0FBQ2hCO0FBQ0E7QUFDQSxRQUFRLG1FQUFRO0FBQ2hCO0FBQ0E7QUFDQSxRQUFRLGtGQUFlO0FBQ3ZCLFFBQVEsOEVBQWtCO0FBQzFCLFFBQVEsbUZBQU0sQ0FBQywyRUFBZ0IsRUFBRSxtRUFBUTtBQUN6QztBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsa0ZBQWU7QUFDdkIsUUFBUSw4RUFBa0I7QUFDMUIsUUFBUSxtRkFBTSxDQUFDLDJFQUFnQixFQUFFLG1FQUFRO0FBQ3pDO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4Qiw2RUFBcUI7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxrRkFBZTtBQUN2QixRQUFRLDhFQUFrQjtBQUMxQixRQUFRLG1GQUFNLENBQUMsMkVBQWdCLEVBQUUsbUVBQVE7QUFDekM7QUFDQTtBQUNBLENBQUM7O0FBRUQsY0FBYywyREFBVztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxxQkFBcUI7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQiw2RUFBcUI7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQix5Q0FBeUMsRUFBRTtBQUMxRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsK0RBQWU7QUFDaEQ7QUFDQTtBQUNBLGlDQUFpQyw4REFBYztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsK0RBQWU7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLDZEQUFhO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLGdCQUFnQjtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixxQkFBcUI7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QyxxQkFBcUI7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLDhEQUE4RDtBQUN6RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyxRQUFRO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixpQkFBaUI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLGlCQUFpQjtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCxRQUFRO0FBQ3hEO0FBQ0EsZ0JBQWdCLG1FQUFXO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxRQUFRO0FBQ3BEO0FBQ0E7QUFDQSxnREFBZ0QsUUFBUTtBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxRQUFRO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixnQkFBZ0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLG1EQUFtRCxFQUFFO0FBQ2pHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QyxRQUFRO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxRQUFRO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsbURBQW1ELEVBQUU7QUFDakc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkMsUUFBUTtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxRQUFRO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsbURBQW1ELEVBQUU7QUFDakc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QyxRQUFRO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxRQUFRO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLDhDQUE4QyxFQUFFO0FBQzNGLDJDQUEyQywrQkFBK0IsRUFBRTtBQUM1RSwyQ0FBMkMsNkJBQTZCLEVBQUU7QUFDMUUsMkNBQTJDLDZCQUE2QixFQUFFO0FBQzFFLDJDQUEyQyxrQ0FBa0MsRUFBRTtBQUMvRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QyxRQUFRO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUVBQW1FLHFDQUFxQyxFQUFFO0FBQzFHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLHNDQUFzQztBQUNwRiwwQ0FBMEMsK0JBQStCO0FBQ3pFLDhDQUE4QyxzQ0FBc0M7QUFDcEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLG1FQUFRO0FBQ2hCO0FBQ0E7QUFDQSxRQUFRLG1FQUFRO0FBQ2hCO0FBQ0E7QUFDQSxRQUFRLG1FQUFRO0FBQ2hCO0FBQ0E7QUFDQSxRQUFRLG1FQUFRO0FBQ2hCO0FBQ0E7QUFDQSxRQUFRLGtGQUFlO0FBQ3ZCLFFBQVEsOEVBQWtCO0FBQzFCLFFBQVEsbUZBQU0sQ0FBQywyRUFBZ0IsRUFBRSw0RUFBaUIsRUFBRSxtRUFBUSxFQUFFLHdFQUFhLEVBQUUsK0RBQWU7QUFDNUY7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsbUJBQW1CLDJCQUEyQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIseUJBQXlCO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyxRQUFRO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkRBQTJELHlCQUF5QixFQUFFO0FBQ3RGO0FBQ0EsSUFBSSx1REFBRztBQUNQO0FBQ0E7QUFDQSxRQUFRLDJEQUFPO0FBQ2Y7QUFDQSxRQUFRLHVEQUFHO0FBQ1g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQix1REFBRyxVQUFVLG1FQUFRLEVBQUUsNkVBQVEsSUFBSSx1REFBRztBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLGtGQUFlO0FBQ3ZCO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHVEQUFHLFVBQVUsbUVBQVEsRUFBRSw2RUFBUSxJQUFJLHVEQUFHO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxrRkFBZTtBQUN2QjtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsc0VBQWM7QUFDdEIsUUFBUSxtRkFBTTtBQUNkO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLGtGQUFlO0FBQ3ZCLFFBQVEsOEVBQWtCO0FBQzFCLFFBQVEsbUZBQU0sQ0FBQywyRUFBZ0IsRUFBRSxtRUFBUTtBQUN6QztBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHVEQUFHLFVBQVUsb0VBQVM7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQix1REFBRztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsa0ZBQWUsVUFBVSwyREFBVztBQUM1QztBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixtRUFBYztBQUN4QyxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLDZEQUFNO0FBQ25DO0FBQ0EsZ0NBQWdDLGFBQWEsRUFBRTtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHVEQUFHO0FBQ25CO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksdURBQUc7QUFDZjtBQUNBLGlCQUFpQiwyREFBTztBQUN4Qiw0QkFBNEIsdURBQUc7QUFDL0I7QUFDQTtBQUNBO0FBQ0EsWUFBWSx1REFBRztBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSw0RUFBUTtBQUNwQjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMscUVBQXFCO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSx1RUFBZTtBQUN2QjtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQiwyREFBVztBQUMvQjtBQUNBO0FBQ0EsUUFBUSxzRUFBSztBQUNiLFFBQVEsdUVBQWU7QUFDdkI7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0Esb0JBQW9CLDJEQUFXO0FBQy9CO0FBQ0E7QUFDQSxRQUFRLHNFQUFLO0FBQ2IsUUFBUSx1RUFBZTtBQUN2QjtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxvQkFBb0IsMkRBQVc7QUFDL0I7QUFDQTtBQUNBLFFBQVEsc0VBQUs7QUFDYixRQUFRLHVFQUFlO0FBQ3ZCO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLG9CQUFvQiwyREFBVztBQUMvQjtBQUNBO0FBQ0EsUUFBUSxzRUFBSztBQUNiLFFBQVEsdUVBQWU7QUFDdkI7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0Esb0JBQW9CLDJEQUFXO0FBQy9CO0FBQ0E7QUFDQSxRQUFRLHNFQUFLO0FBQ2IsUUFBUSx1RUFBZTtBQUN2QjtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixhQUFhO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMERBQTBELDJEQUFXO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSx1RUFBZTtBQUN2QjtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLHFDQUFxQyxFQUFFO0FBQ3JGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixhQUFhO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDLDJEQUFXLG9CQUFvQiwyREFBVyxZQUFZLDZEQUFhLEdBQUcsNkRBQWE7QUFDaEk7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSx1RUFBZTtBQUN2QjtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsdUVBQWU7QUFDdkI7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2Qiw2REFBYTtBQUMxQztBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELDBCQUEwQjtBQUMxRTtBQUNBO0FBQ0Esd0JBQXdCLHVCQUF1QjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSx1RUFBZTtBQUN2QjtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qix1QkFBdUI7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QiwyREFBVyw0QkFBNEIsMkRBQVc7QUFDL0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQiwrREFBZTtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLHVFQUFlO0FBQ3ZCO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksZ0ZBQWE7QUFDekIsWUFBWSwyRUFBTztBQUNuQjtBQUNBO0FBQ0EsS0FBSztBQUNMLDhDQUE4QyxRQUFRO0FBQ3RELFFBQVEsMkVBQVE7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsWUFBWSxnRkFBWSxFQUFFLGVBQWU7QUFDekM7QUFDQTtBQUNBLFlBQVksZ0ZBQVksRUFBRSxpQkFBaUI7QUFDM0M7QUFDQTtBQUNBLFlBQVksZ0ZBQVk7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLGlFQUFTO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEMscUVBQVU7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0VBQStFLGlCQUFpQixFQUFFO0FBQ2xHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsb0NBQW9DLGlHQUFpRztBQUNuSyxhQUFhO0FBQ2I7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEMscUVBQVU7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQSx5RUFBeUUsK0RBQStELEVBQUU7QUFDMUk7O0FBRTZyQjtBQUM3ckIiLCJmaWxlIjoiYXVyZWxpYS10ZW1wbGF0aW5nLXJlc291cmNlcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnRhaW5lciwgaW5qZWN0LCBPcHRpb25hbCB9IGZyb20gJ2F1cmVsaWEtZGVwZW5kZW5jeS1pbmplY3Rpb24nO1xuaW1wb3J0IHsgRE9NLCBGRUFUVVJFIH0gZnJvbSAnYXVyZWxpYS1wYWwnO1xuaW1wb3J0IHsgVGFza1F1ZXVlIH0gZnJvbSAnYXVyZWxpYS10YXNrLXF1ZXVlJztcbmltcG9ydCB7IGJpbmRhYmxlLCBub1ZpZXcsIGN1c3RvbUVsZW1lbnQsIENvbXBvc2l0aW9uRW5naW5lLCBWaWV3U2xvdCwgVmlld1Jlc291cmNlcywgY3VzdG9tQXR0cmlidXRlLCB0ZW1wbGF0ZUNvbnRyb2xsZXIsIEJvdW5kVmlld0ZhY3RvcnksIFRhcmdldEluc3RydWN0aW9uLCBBbmltYXRvciwgcmVzb3VyY2UsIHVzZVZpZXcsIHVzZVNoYWRvd0RPTSwgVmlld0VuZ2luZSB9IGZyb20gJ2F1cmVsaWEtdGVtcGxhdGluZyc7XG5pbXBvcnQgeyBjcmVhdGVPdmVycmlkZUNvbnRleHQsIGJpbmRpbmdNb2RlLCBCaW5kaW5nQmVoYXZpb3IsIFZhbHVlQ29udmVydGVyLCBzb3VyY2VDb250ZXh0LCBtZXJnZVNwbGljZSwgT2JzZXJ2ZXJMb2NhdG9yLCB2YWx1ZUNvbnZlcnRlciwgRGF0YUF0dHJpYnV0ZU9ic2VydmVyLCBiaW5kaW5nQmVoYXZpb3IsIHRhcmdldENvbnRleHQsIEV2ZW50U3Vic2NyaWJlciB9IGZyb20gJ2F1cmVsaWEtYmluZGluZyc7XG5pbXBvcnQgeyBMb2FkZXIgfSBmcm9tICdhdXJlbGlhLWxvYWRlcic7XG5pbXBvcnQgeyByZWxhdGl2ZVRvRmlsZSB9IGZyb20gJ2F1cmVsaWEtcGF0aCc7XG5pbXBvcnQgeyBtaXhpbiB9IGZyb20gJ2F1cmVsaWEtbWV0YWRhdGEnO1xuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSAnYXVyZWxpYS1sb2dnaW5nJztcblxuLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xyXG4gICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XHJcbiAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cblxudmFyIEFjdGl2YXRpb25TdHJhdGVneTtcclxuKGZ1bmN0aW9uIChBY3RpdmF0aW9uU3RyYXRlZ3kpIHtcclxuICAgIEFjdGl2YXRpb25TdHJhdGVneVtcIkludm9rZUxpZmVjeWNsZVwiXSA9IFwiaW52b2tlLWxpZmVjeWNsZVwiO1xyXG4gICAgQWN0aXZhdGlvblN0cmF0ZWd5W1wiUmVwbGFjZVwiXSA9IFwicmVwbGFjZVwiO1xyXG59KShBY3RpdmF0aW9uU3RyYXRlZ3kgfHwgKEFjdGl2YXRpb25TdHJhdGVneSA9IHt9KSk7XHJcbnZhciBDb21wb3NlID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIENvbXBvc2UoZWxlbWVudCwgY29udGFpbmVyLCBjb21wb3NpdGlvbkVuZ2luZSwgdmlld1Nsb3QsIHZpZXdSZXNvdXJjZXMsIHRhc2tRdWV1ZSkge1xyXG4gICAgICAgIHRoaXMuYWN0aXZhdGlvblN0cmF0ZWd5ID0gQWN0aXZhdGlvblN0cmF0ZWd5Lkludm9rZUxpZmVjeWNsZTtcclxuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyID0gY29udGFpbmVyO1xyXG4gICAgICAgIHRoaXMuY29tcG9zaXRpb25FbmdpbmUgPSBjb21wb3NpdGlvbkVuZ2luZTtcclxuICAgICAgICB0aGlzLnZpZXdTbG90ID0gdmlld1Nsb3Q7XHJcbiAgICAgICAgdGhpcy52aWV3UmVzb3VyY2VzID0gdmlld1Jlc291cmNlcztcclxuICAgICAgICB0aGlzLnRhc2tRdWV1ZSA9IHRhc2tRdWV1ZTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRDb250cm9sbGVyID0gbnVsbDtcclxuICAgICAgICB0aGlzLmN1cnJlbnRWaWV3TW9kZWwgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XHJcbiAgICB9XHJcbiAgICBDb21wb3NlLmluamVjdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gW0RPTS5FbGVtZW50LCBDb250YWluZXIsIENvbXBvc2l0aW9uRW5naW5lLCBWaWV3U2xvdCwgVmlld1Jlc291cmNlcywgVGFza1F1ZXVlXTtcclxuICAgIH07XHJcbiAgICBDb21wb3NlLnByb3RvdHlwZS5jcmVhdGVkID0gZnVuY3Rpb24gKG93bmluZ1ZpZXcpIHtcclxuICAgICAgICB0aGlzLm93bmluZ1ZpZXcgPSBvd25pbmdWaWV3O1xyXG4gICAgfTtcclxuICAgIENvbXBvc2UucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoYmluZGluZ0NvbnRleHQsIG92ZXJyaWRlQ29udGV4dCkge1xyXG4gICAgICAgIHRoaXMuYmluZGluZ0NvbnRleHQgPSBiaW5kaW5nQ29udGV4dDtcclxuICAgICAgICB0aGlzLm92ZXJyaWRlQ29udGV4dCA9IG92ZXJyaWRlQ29udGV4dDtcclxuICAgICAgICB2YXIgY2hhbmdlcyA9IHRoaXMuY2hhbmdlcztcclxuICAgICAgICBjaGFuZ2VzLnZpZXcgPSB0aGlzLnZpZXc7XHJcbiAgICAgICAgY2hhbmdlcy52aWV3TW9kZWwgPSB0aGlzLnZpZXdNb2RlbDtcclxuICAgICAgICBjaGFuZ2VzLm1vZGVsID0gdGhpcy5tb2RlbDtcclxuICAgICAgICBpZiAoIXRoaXMucGVuZGluZ1Rhc2spIHtcclxuICAgICAgICAgICAgcHJvY2Vzc0NoYW5nZXModGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIENvbXBvc2UucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmNoYW5nZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xyXG4gICAgICAgIHRoaXMuYmluZGluZ0NvbnRleHQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMub3ZlcnJpZGVDb250ZXh0ID0gbnVsbDtcclxuICAgICAgICB2YXIgcmV0dXJuVG9DYWNoZSA9IHRydWU7XHJcbiAgICAgICAgdmFyIHNraXBBbmltYXRpb24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudmlld1Nsb3QucmVtb3ZlQWxsKHJldHVyblRvQ2FjaGUsIHNraXBBbmltYXRpb24pO1xyXG4gICAgfTtcclxuICAgIENvbXBvc2UucHJvdG90eXBlLm1vZGVsQ2hhbmdlZCA9IGZ1bmN0aW9uIChuZXdWYWx1ZSwgb2xkVmFsdWUpIHtcclxuICAgICAgICB0aGlzLmNoYW5nZXMubW9kZWwgPSBuZXdWYWx1ZTtcclxuICAgICAgICByZXF1ZXN0VXBkYXRlKHRoaXMpO1xyXG4gICAgfTtcclxuICAgIENvbXBvc2UucHJvdG90eXBlLnZpZXdDaGFuZ2VkID0gZnVuY3Rpb24gKG5ld1ZhbHVlLCBvbGRWYWx1ZSkge1xyXG4gICAgICAgIHRoaXMuY2hhbmdlcy52aWV3ID0gbmV3VmFsdWU7XHJcbiAgICAgICAgcmVxdWVzdFVwZGF0ZSh0aGlzKTtcclxuICAgIH07XHJcbiAgICBDb21wb3NlLnByb3RvdHlwZS52aWV3TW9kZWxDaGFuZ2VkID0gZnVuY3Rpb24gKG5ld1ZhbHVlLCBvbGRWYWx1ZSkge1xyXG4gICAgICAgIHRoaXMuY2hhbmdlcy52aWV3TW9kZWwgPSBuZXdWYWx1ZTtcclxuICAgICAgICByZXF1ZXN0VXBkYXRlKHRoaXMpO1xyXG4gICAgfTtcclxuICAgIF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGJpbmRhYmxlXHJcbiAgICBdLCBDb21wb3NlLnByb3RvdHlwZSwgXCJtb2RlbFwiLCB2b2lkIDApO1xyXG4gICAgX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYmluZGFibGVcclxuICAgIF0sIENvbXBvc2UucHJvdG90eXBlLCBcInZpZXdcIiwgdm9pZCAwKTtcclxuICAgIF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGJpbmRhYmxlXHJcbiAgICBdLCBDb21wb3NlLnByb3RvdHlwZSwgXCJ2aWV3TW9kZWxcIiwgdm9pZCAwKTtcclxuICAgIF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGJpbmRhYmxlXHJcbiAgICBdLCBDb21wb3NlLnByb3RvdHlwZSwgXCJhY3RpdmF0aW9uU3RyYXRlZ3lcIiwgdm9pZCAwKTtcclxuICAgIF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGJpbmRhYmxlXHJcbiAgICBdLCBDb21wb3NlLnByb3RvdHlwZSwgXCJzd2FwT3JkZXJcIiwgdm9pZCAwKTtcclxuICAgIENvbXBvc2UgPSBfX2RlY29yYXRlKFtcclxuICAgICAgICBub1ZpZXcsXHJcbiAgICAgICAgY3VzdG9tRWxlbWVudCgnY29tcG9zZScpXHJcbiAgICBdLCBDb21wb3NlKTtcclxuICAgIHJldHVybiBDb21wb3NlO1xyXG59KCkpO1xyXG5mdW5jdGlvbiBpc0VtcHR5KG9iaikge1xyXG4gICAgZm9yICh2YXIgXyBpbiBvYmopIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5mdW5jdGlvbiB0cnlBY3RpdmF0ZVZpZXdNb2RlbCh2bSwgbW9kZWwpIHtcclxuICAgIGlmICh2bSAmJiB0eXBlb2Ygdm0uYWN0aXZhdGUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZtLmFjdGl2YXRlKG1vZGVsKSk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlSW5zdHJ1Y3Rpb24oY29tcG9zZXIsIGluc3RydWN0aW9uKSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihpbnN0cnVjdGlvbiwge1xyXG4gICAgICAgIGJpbmRpbmdDb250ZXh0OiBjb21wb3Nlci5iaW5kaW5nQ29udGV4dCxcclxuICAgICAgICBvdmVycmlkZUNvbnRleHQ6IGNvbXBvc2VyLm92ZXJyaWRlQ29udGV4dCxcclxuICAgICAgICBvd25pbmdWaWV3OiBjb21wb3Nlci5vd25pbmdWaWV3LFxyXG4gICAgICAgIGNvbnRhaW5lcjogY29tcG9zZXIuY29udGFpbmVyLFxyXG4gICAgICAgIHZpZXdTbG90OiBjb21wb3Nlci52aWV3U2xvdCxcclxuICAgICAgICB2aWV3UmVzb3VyY2VzOiBjb21wb3Nlci52aWV3UmVzb3VyY2VzLFxyXG4gICAgICAgIGN1cnJlbnRDb250cm9sbGVyOiBjb21wb3Nlci5jdXJyZW50Q29udHJvbGxlcixcclxuICAgICAgICBob3N0OiBjb21wb3Nlci5lbGVtZW50LFxyXG4gICAgICAgIHN3YXBPcmRlcjogY29tcG9zZXIuc3dhcE9yZGVyXHJcbiAgICB9KTtcclxufVxyXG5mdW5jdGlvbiBwcm9jZXNzQ2hhbmdlcyhjb21wb3Nlcikge1xyXG4gICAgdmFyIGNoYW5nZXMgPSBjb21wb3Nlci5jaGFuZ2VzO1xyXG4gICAgY29tcG9zZXIuY2hhbmdlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XHJcbiAgICBpZiAobmVlZHNSZUluaXRpYWxpemF0aW9uKGNvbXBvc2VyLCBjaGFuZ2VzKSkge1xyXG4gICAgICAgIHZhciBpbnN0cnVjdGlvbiA9IHtcclxuICAgICAgICAgICAgdmlldzogY29tcG9zZXIudmlldyxcclxuICAgICAgICAgICAgdmlld01vZGVsOiBjb21wb3Nlci5jdXJyZW50Vmlld01vZGVsIHx8IGNvbXBvc2VyLnZpZXdNb2RlbCxcclxuICAgICAgICAgICAgbW9kZWw6IGNvbXBvc2VyLm1vZGVsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpbnN0cnVjdGlvbiA9IE9iamVjdC5hc3NpZ24oaW5zdHJ1Y3Rpb24sIGNoYW5nZXMpO1xyXG4gICAgICAgIGluc3RydWN0aW9uID0gY3JlYXRlSW5zdHJ1Y3Rpb24oY29tcG9zZXIsIGluc3RydWN0aW9uKTtcclxuICAgICAgICBjb21wb3Nlci5wZW5kaW5nVGFzayA9IGNvbXBvc2VyLmNvbXBvc2l0aW9uRW5naW5lLmNvbXBvc2UoaW5zdHJ1Y3Rpb24pLnRoZW4oZnVuY3Rpb24gKGNvbnRyb2xsZXIpIHtcclxuICAgICAgICAgICAgY29tcG9zZXIuY3VycmVudENvbnRyb2xsZXIgPSBjb250cm9sbGVyO1xyXG4gICAgICAgICAgICBjb21wb3Nlci5jdXJyZW50Vmlld01vZGVsID0gY29udHJvbGxlciA/IGNvbnRyb2xsZXIudmlld01vZGVsIDogbnVsbDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbXBvc2VyLnBlbmRpbmdUYXNrID0gdHJ5QWN0aXZhdGVWaWV3TW9kZWwoY29tcG9zZXIuY3VycmVudFZpZXdNb2RlbCwgY2hhbmdlcy5tb2RlbCk7XHJcbiAgICAgICAgaWYgKCFjb21wb3Nlci5wZW5kaW5nVGFzaykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29tcG9zZXIucGVuZGluZ1Rhc2sgPSBjb21wb3Nlci5wZW5kaW5nVGFza1xyXG4gICAgICAgIC50aGVuKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb21wbGV0ZUNvbXBvc2l0aW9uVGFzayhjb21wb3Nlcik7XHJcbiAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XHJcbiAgICAgICAgY29tcGxldGVDb21wb3NpdGlvblRhc2soY29tcG9zZXIpO1xyXG4gICAgICAgIHRocm93IHJlYXNvbjtcclxuICAgIH0pO1xyXG59XHJcbmZ1bmN0aW9uIGNvbXBsZXRlQ29tcG9zaXRpb25UYXNrKGNvbXBvc2VyKSB7XHJcbiAgICBjb21wb3Nlci5wZW5kaW5nVGFzayA9IG51bGw7XHJcbiAgICBpZiAoIWlzRW1wdHkoY29tcG9zZXIuY2hhbmdlcykpIHtcclxuICAgICAgICBwcm9jZXNzQ2hhbmdlcyhjb21wb3Nlcik7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gcmVxdWVzdFVwZGF0ZShjb21wb3Nlcikge1xyXG4gICAgaWYgKGNvbXBvc2VyLnBlbmRpbmdUYXNrIHx8IGNvbXBvc2VyLnVwZGF0ZVJlcXVlc3RlZCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbXBvc2VyLnVwZGF0ZVJlcXVlc3RlZCA9IHRydWU7XHJcbiAgICBjb21wb3Nlci50YXNrUXVldWUucXVldWVNaWNyb1Rhc2soZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbXBvc2VyLnVwZGF0ZVJlcXVlc3RlZCA9IGZhbHNlO1xyXG4gICAgICAgIHByb2Nlc3NDaGFuZ2VzKGNvbXBvc2VyKTtcclxuICAgIH0pO1xyXG59XHJcbmZ1bmN0aW9uIG5lZWRzUmVJbml0aWFsaXphdGlvbihjb21wb3NlciwgY2hhbmdlcykge1xyXG4gICAgdmFyIGFjdGl2YXRpb25TdHJhdGVneSA9IGNvbXBvc2VyLmFjdGl2YXRpb25TdHJhdGVneTtcclxuICAgIHZhciB2bSA9IGNvbXBvc2VyLmN1cnJlbnRWaWV3TW9kZWw7XHJcbiAgICBpZiAodm0gJiYgdHlwZW9mIHZtLmRldGVybWluZUFjdGl2YXRpb25TdHJhdGVneSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIGFjdGl2YXRpb25TdHJhdGVneSA9IHZtLmRldGVybWluZUFjdGl2YXRpb25TdHJhdGVneSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICd2aWV3JyBpbiBjaGFuZ2VzXHJcbiAgICAgICAgfHwgJ3ZpZXdNb2RlbCcgaW4gY2hhbmdlc1xyXG4gICAgICAgIHx8IGFjdGl2YXRpb25TdHJhdGVneSA9PT0gQWN0aXZhdGlvblN0cmF0ZWd5LlJlcGxhY2U7XHJcbn1cblxudmFyIElmQ29yZSA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBJZkNvcmUodmlld0ZhY3RvcnksIHZpZXdTbG90KSB7XHJcbiAgICAgICAgdGhpcy52aWV3RmFjdG9yeSA9IHZpZXdGYWN0b3J5O1xyXG4gICAgICAgIHRoaXMudmlld1Nsb3QgPSB2aWV3U2xvdDtcclxuICAgICAgICB0aGlzLnZpZXcgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuYmluZGluZ0NvbnRleHQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMub3ZlcnJpZGVDb250ZXh0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNob3dpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNhY2hlID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIElmQ29yZS5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChiaW5kaW5nQ29udGV4dCwgb3ZlcnJpZGVDb250ZXh0KSB7XHJcbiAgICAgICAgdGhpcy5iaW5kaW5nQ29udGV4dCA9IGJpbmRpbmdDb250ZXh0O1xyXG4gICAgICAgIHRoaXMub3ZlcnJpZGVDb250ZXh0ID0gb3ZlcnJpZGVDb250ZXh0O1xyXG4gICAgfTtcclxuICAgIElmQ29yZS5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnZpZXcgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnZpZXcudW5iaW5kKCk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZpZXdGYWN0b3J5LmlzQ2FjaGluZykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnNob3dpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMudmlld1Nsb3QucmVtb3ZlKHRoaXMudmlldywgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZpZXcucmV0dXJuVG9DYWNoZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnZpZXcgPSBudWxsO1xyXG4gICAgfTtcclxuICAgIElmQ29yZS5wcm90b3R5cGUuX3Nob3cgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2hvd2luZykge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMudmlldy5pc0JvdW5kKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXcuYmluZCh0aGlzLmJpbmRpbmdDb250ZXh0LCB0aGlzLm92ZXJyaWRlQ29udGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy52aWV3ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlldyA9IHRoaXMudmlld0ZhY3RvcnkuY3JlYXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy52aWV3LmlzQm91bmQpIHtcclxuICAgICAgICAgICAgdGhpcy52aWV3LmJpbmQodGhpcy5iaW5kaW5nQ29udGV4dCwgdGhpcy5vdmVycmlkZUNvbnRleHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNob3dpbmcgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdTbG90LmFkZCh0aGlzLnZpZXcpO1xyXG4gICAgfTtcclxuICAgIElmQ29yZS5wcm90b3R5cGUuX2hpZGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICBpZiAoIXRoaXMuc2hvd2luZykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2hvd2luZyA9IGZhbHNlO1xyXG4gICAgICAgIHZhciByZW1vdmVkID0gdGhpcy52aWV3U2xvdC5yZW1vdmUodGhpcy52aWV3KTtcclxuICAgICAgICBpZiAocmVtb3ZlZCBpbnN0YW5jZW9mIFByb21pc2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlbW92ZWQudGhlbihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5fdW5iaW5kVmlldygpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fdW5iaW5kVmlldygpO1xyXG4gICAgfTtcclxuICAgIElmQ29yZS5wcm90b3R5cGUuX3VuYmluZFZpZXcgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5jYWNoZSA9PT0gJ2ZhbHNlJyA/IGZhbHNlIDogISF0aGlzLmNhY2hlO1xyXG4gICAgICAgIHRoaXMudmlldy51bmJpbmQoKTtcclxuICAgICAgICBpZiAoIWNhY2hlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiBJZkNvcmU7XHJcbn0oKSk7XG5cbnZhciBJZiA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XHJcbiAgICBfX2V4dGVuZHMoSWYsIF9zdXBlcik7XHJcbiAgICBmdW5jdGlvbiBJZigpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcclxuICAgICAgICBfdGhpcy5jYWNoZSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIF90aGlzO1xyXG4gICAgfVxyXG4gICAgSWYucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoYmluZGluZ0NvbnRleHQsIG92ZXJyaWRlQ29udGV4dCkge1xyXG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuYmluZC5jYWxsKHRoaXMsIGJpbmRpbmdDb250ZXh0LCBvdmVycmlkZUNvbnRleHQpO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbmRpdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLl9zaG93KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9oaWRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIElmLnByb3RvdHlwZS5jb25kaXRpb25DaGFuZ2VkID0gZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5fdXBkYXRlKG5ld1ZhbHVlKTtcclxuICAgIH07XHJcbiAgICBJZi5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIChzaG93KSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICBpZiAodGhpcy5hbmltYXRpbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcHJvbWlzZTtcclxuICAgICAgICBpZiAodGhpcy5lbHNlVm0pIHtcclxuICAgICAgICAgICAgcHJvbWlzZSA9IHNob3cgPyB0aGlzLl9zd2FwKHRoaXMuZWxzZVZtLCB0aGlzKSA6IHRoaXMuX3N3YXAodGhpcywgdGhpcy5lbHNlVm0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcHJvbWlzZSA9IHNob3cgPyB0aGlzLl9zaG93KCkgOiB0aGlzLl9oaWRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwcm9taXNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYW5pbWF0aW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLmFuaW1hdGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLmNvbmRpdGlvbiAhPT0gX3RoaXMuc2hvd2luZykge1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLl91cGRhdGUoX3RoaXMuY29uZGl0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIElmLnByb3RvdHlwZS5fc3dhcCA9IGZ1bmN0aW9uIChyZW1vdmUsIGFkZCkge1xyXG4gICAgICAgIHN3aXRjaCAodGhpcy5zd2FwT3JkZXIpIHtcclxuICAgICAgICAgICAgY2FzZSAnYmVmb3JlJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoYWRkLl9zaG93KCkpLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVtb3ZlLl9oaWRlKCk7IH0pO1xyXG4gICAgICAgICAgICBjYXNlICd3aXRoJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbcmVtb3ZlLl9oaWRlKCksIGFkZC5fc2hvdygpXSk7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IHJlbW92ZS5faGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2UgPyBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4gYWRkLl9zaG93KCk7IH0pIDogYWRkLl9zaG93KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGJpbmRhYmxlKHsgcHJpbWFyeVByb3BlcnR5OiB0cnVlIH0pXHJcbiAgICBdLCBJZi5wcm90b3R5cGUsIFwiY29uZGl0aW9uXCIsIHZvaWQgMCk7XHJcbiAgICBfX2RlY29yYXRlKFtcclxuICAgICAgICBiaW5kYWJsZVxyXG4gICAgXSwgSWYucHJvdG90eXBlLCBcInN3YXBPcmRlclwiLCB2b2lkIDApO1xyXG4gICAgX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYmluZGFibGVcclxuICAgIF0sIElmLnByb3RvdHlwZSwgXCJjYWNoZVwiLCB2b2lkIDApO1xyXG4gICAgSWYgPSBfX2RlY29yYXRlKFtcclxuICAgICAgICBjdXN0b21BdHRyaWJ1dGUoJ2lmJyksXHJcbiAgICAgICAgdGVtcGxhdGVDb250cm9sbGVyLFxyXG4gICAgICAgIGluamVjdChCb3VuZFZpZXdGYWN0b3J5LCBWaWV3U2xvdClcclxuICAgIF0sIElmKTtcclxuICAgIHJldHVybiBJZjtcclxufShJZkNvcmUpKTtcblxudmFyIEVsc2UgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xyXG4gICAgX19leHRlbmRzKEVsc2UsIF9zdXBlcik7XHJcbiAgICBmdW5jdGlvbiBFbHNlKHZpZXdGYWN0b3J5LCB2aWV3U2xvdCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHZpZXdGYWN0b3J5LCB2aWV3U2xvdCkgfHwgdGhpcztcclxuICAgICAgICBfdGhpcy5fcmVnaXN0ZXJJbklmKCk7XHJcbiAgICAgICAgcmV0dXJuIF90aGlzO1xyXG4gICAgfVxyXG4gICAgRWxzZS5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChiaW5kaW5nQ29udGV4dCwgb3ZlcnJpZGVDb250ZXh0KSB7XHJcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5iaW5kLmNhbGwodGhpcywgYmluZGluZ0NvbnRleHQsIG92ZXJyaWRlQ29udGV4dCk7XHJcbiAgICAgICAgaWYgKHRoaXMuaWZWbS5jb25kaXRpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5faGlkZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fc2hvdygpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBFbHNlLnByb3RvdHlwZS5fcmVnaXN0ZXJJbklmID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBwcmV2aW91cyA9IHRoaXMudmlld1Nsb3QuYW5jaG9yLnByZXZpb3VzU2libGluZztcclxuICAgICAgICB3aGlsZSAocHJldmlvdXMgJiYgIXByZXZpb3VzLmF1KSB7XHJcbiAgICAgICAgICAgIHByZXZpb3VzID0gcHJldmlvdXMucHJldmlvdXNTaWJsaW5nO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXByZXZpb3VzIHx8ICFwcmV2aW91cy5hdS5pZikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBmaW5kIG1hdGNoaW5nIElmIGZvciBFbHNlIGN1c3RvbSBhdHRyaWJ1dGUuXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlmVm0gPSBwcmV2aW91cy5hdS5pZi52aWV3TW9kZWw7XHJcbiAgICAgICAgdGhpcy5pZlZtLmVsc2VWbSA9IHRoaXM7XHJcbiAgICB9O1xyXG4gICAgRWxzZSA9IF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGN1c3RvbUF0dHJpYnV0ZSgnZWxzZScpLFxyXG4gICAgICAgIHRlbXBsYXRlQ29udHJvbGxlcixcclxuICAgICAgICBpbmplY3QoQm91bmRWaWV3RmFjdG9yeSwgVmlld1Nsb3QpXHJcbiAgICBdLCBFbHNlKTtcclxuICAgIHJldHVybiBFbHNlO1xyXG59KElmQ29yZSkpO1xuXG52YXIgV2l0aCA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBXaXRoKHZpZXdGYWN0b3J5LCB2aWV3U2xvdCkge1xyXG4gICAgICAgIHRoaXMudmlld0ZhY3RvcnkgPSB2aWV3RmFjdG9yeTtcclxuICAgICAgICB0aGlzLnZpZXdTbG90ID0gdmlld1Nsb3Q7XHJcbiAgICAgICAgdGhpcy5wYXJlbnRPdmVycmlkZUNvbnRleHQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMudmlldyA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBXaXRoLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGJpbmRpbmdDb250ZXh0LCBvdmVycmlkZUNvbnRleHQpIHtcclxuICAgICAgICB0aGlzLnBhcmVudE92ZXJyaWRlQ29udGV4dCA9IG92ZXJyaWRlQ29udGV4dDtcclxuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlZCh0aGlzLnZhbHVlKTtcclxuICAgIH07XHJcbiAgICBXaXRoLnByb3RvdHlwZS52YWx1ZUNoYW5nZWQgPSBmdW5jdGlvbiAobmV3VmFsdWUpIHtcclxuICAgICAgICB2YXIgb3ZlcnJpZGVDb250ZXh0ID0gY3JlYXRlT3ZlcnJpZGVDb250ZXh0KG5ld1ZhbHVlLCB0aGlzLnBhcmVudE92ZXJyaWRlQ29udGV4dCk7XHJcbiAgICAgICAgdmFyIHZpZXcgPSB0aGlzLnZpZXc7XHJcbiAgICAgICAgaWYgKCF2aWV3KSB7XHJcbiAgICAgICAgICAgIHZpZXcgPSB0aGlzLnZpZXcgPSB0aGlzLnZpZXdGYWN0b3J5LmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICB2aWV3LmJpbmQobmV3VmFsdWUsIG92ZXJyaWRlQ29udGV4dCk7XHJcbiAgICAgICAgICAgIHRoaXMudmlld1Nsb3QuYWRkKHZpZXcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdmlldy5iaW5kKG5ld1ZhbHVlLCBvdmVycmlkZUNvbnRleHQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBXaXRoLnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHZpZXcgPSB0aGlzLnZpZXc7XHJcbiAgICAgICAgdGhpcy5wYXJlbnRPdmVycmlkZUNvbnRleHQgPSBudWxsO1xyXG4gICAgICAgIGlmICh2aWV3KSB7XHJcbiAgICAgICAgICAgIHZpZXcudW5iaW5kKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIFdpdGggPSBfX2RlY29yYXRlKFtcclxuICAgICAgICBjdXN0b21BdHRyaWJ1dGUoJ3dpdGgnKSxcclxuICAgICAgICB0ZW1wbGF0ZUNvbnRyb2xsZXIsXHJcbiAgICAgICAgaW5qZWN0KEJvdW5kVmlld0ZhY3RvcnksIFZpZXdTbG90KVxyXG4gICAgXSwgV2l0aCk7XHJcbiAgICByZXR1cm4gV2l0aDtcclxufSgpKTtcblxudmFyIG9uZVRpbWUgPSBiaW5kaW5nTW9kZS5vbmVUaW1lO1xyXG5mdW5jdGlvbiB1cGRhdGVPdmVycmlkZUNvbnRleHRzKHZpZXdzLCBzdGFydEluZGV4KSB7XHJcbiAgICB2YXIgbGVuZ3RoID0gdmlld3MubGVuZ3RoO1xyXG4gICAgaWYgKHN0YXJ0SW5kZXggPiAwKSB7XHJcbiAgICAgICAgc3RhcnRJbmRleCA9IHN0YXJ0SW5kZXggLSAxO1xyXG4gICAgfVxyXG4gICAgZm9yICg7IHN0YXJ0SW5kZXggPCBsZW5ndGg7ICsrc3RhcnRJbmRleCkge1xyXG4gICAgICAgIHVwZGF0ZU92ZXJyaWRlQ29udGV4dCh2aWV3c1tzdGFydEluZGV4XS5vdmVycmlkZUNvbnRleHQsIHN0YXJ0SW5kZXgsIGxlbmd0aCk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlRnVsbE92ZXJyaWRlQ29udGV4dChyZXBlYXQsIGRhdGEsIGluZGV4LCBsZW5ndGgsIGtleSkge1xyXG4gICAgdmFyIGJpbmRpbmdDb250ZXh0ID0ge307XHJcbiAgICB2YXIgb3ZlcnJpZGVDb250ZXh0ID0gY3JlYXRlT3ZlcnJpZGVDb250ZXh0KGJpbmRpbmdDb250ZXh0LCByZXBlYXQuc2NvcGUub3ZlcnJpZGVDb250ZXh0KTtcclxuICAgIGlmICh0eXBlb2Yga2V5ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIGJpbmRpbmdDb250ZXh0W3JlcGVhdC5rZXldID0ga2V5O1xyXG4gICAgICAgIGJpbmRpbmdDb250ZXh0W3JlcGVhdC52YWx1ZV0gPSBkYXRhO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgYmluZGluZ0NvbnRleHRbcmVwZWF0LmxvY2FsXSA9IGRhdGE7XHJcbiAgICB9XHJcbiAgICB1cGRhdGVPdmVycmlkZUNvbnRleHQob3ZlcnJpZGVDb250ZXh0LCBpbmRleCwgbGVuZ3RoKTtcclxuICAgIHJldHVybiBvdmVycmlkZUNvbnRleHQ7XHJcbn1cclxuZnVuY3Rpb24gdXBkYXRlT3ZlcnJpZGVDb250ZXh0KG92ZXJyaWRlQ29udGV4dCwgaW5kZXgsIGxlbmd0aCkge1xyXG4gICAgdmFyIGZpcnN0ID0gKGluZGV4ID09PSAwKTtcclxuICAgIHZhciBsYXN0ID0gKGluZGV4ID09PSBsZW5ndGggLSAxKTtcclxuICAgIHZhciBldmVuID0gaW5kZXggJSAyID09PSAwO1xyXG4gICAgb3ZlcnJpZGVDb250ZXh0LiRpbmRleCA9IGluZGV4O1xyXG4gICAgb3ZlcnJpZGVDb250ZXh0LiRmaXJzdCA9IGZpcnN0O1xyXG4gICAgb3ZlcnJpZGVDb250ZXh0LiRsYXN0ID0gbGFzdDtcclxuICAgIG92ZXJyaWRlQ29udGV4dC4kbWlkZGxlID0gIShmaXJzdCB8fCBsYXN0KTtcclxuICAgIG92ZXJyaWRlQ29udGV4dC4kb2RkID0gIWV2ZW47XHJcbiAgICBvdmVycmlkZUNvbnRleHQuJGV2ZW4gPSBldmVuO1xyXG59XHJcbmZ1bmN0aW9uIGdldEl0ZW1zU291cmNlRXhwcmVzc2lvbihpbnN0cnVjdGlvbiwgYXR0ck5hbWUpIHtcclxuICAgIHJldHVybiBpbnN0cnVjdGlvbi5iZWhhdmlvckluc3RydWN0aW9uc1xyXG4gICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKGJpKSB7IHJldHVybiBiaS5vcmlnaW5hbEF0dHJOYW1lID09PSBhdHRyTmFtZTsgfSlbMF1cclxuICAgICAgICAuYXR0cmlidXRlc1xyXG4gICAgICAgIC5pdGVtc1xyXG4gICAgICAgIC5zb3VyY2VFeHByZXNzaW9uO1xyXG59XHJcbmZ1bmN0aW9uIHVud3JhcEV4cHJlc3Npb24oZXhwcmVzc2lvbikge1xyXG4gICAgdmFyIHVud3JhcHBlZCA9IGZhbHNlO1xyXG4gICAgd2hpbGUgKGV4cHJlc3Npb24gaW5zdGFuY2VvZiBCaW5kaW5nQmVoYXZpb3IpIHtcclxuICAgICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbi5leHByZXNzaW9uO1xyXG4gICAgfVxyXG4gICAgd2hpbGUgKGV4cHJlc3Npb24gaW5zdGFuY2VvZiBWYWx1ZUNvbnZlcnRlcikge1xyXG4gICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uLmV4cHJlc3Npb247XHJcbiAgICAgICAgdW53cmFwcGVkID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiB1bndyYXBwZWQgPyBleHByZXNzaW9uIDogbnVsbDtcclxufVxyXG5mdW5jdGlvbiBpc09uZVRpbWUoZXhwcmVzc2lvbikge1xyXG4gICAgd2hpbGUgKGV4cHJlc3Npb24gaW5zdGFuY2VvZiBCaW5kaW5nQmVoYXZpb3IpIHtcclxuICAgICAgICBpZiAoZXhwcmVzc2lvbi5uYW1lID09PSAnb25lVGltZScpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uLmV4cHJlc3Npb247XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuZnVuY3Rpb24gdXBkYXRlT25lVGltZUJpbmRpbmcoYmluZGluZykge1xyXG4gICAgaWYgKGJpbmRpbmcuY2FsbCAmJiBiaW5kaW5nLm1vZGUgPT09IG9uZVRpbWUpIHtcclxuICAgICAgICBiaW5kaW5nLmNhbGwoc291cmNlQ29udGV4dCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChiaW5kaW5nLnVwZGF0ZU9uZVRpbWVCaW5kaW5ncykge1xyXG4gICAgICAgIGJpbmRpbmcudXBkYXRlT25lVGltZUJpbmRpbmdzKCk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gaW5kZXhPZihhcnJheSwgaXRlbSwgbWF0Y2hlciwgc3RhcnRJbmRleCkge1xyXG4gICAgaWYgKCFtYXRjaGVyKSB7XHJcbiAgICAgICAgcmV0dXJuIGFycmF5LmluZGV4T2YoaXRlbSk7XHJcbiAgICB9XHJcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xyXG4gICAgZm9yICh2YXIgaW5kZXggPSBzdGFydEluZGV4IHx8IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgaWYgKG1hdGNoZXIoYXJyYXlbaW5kZXhdLCBpdGVtKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gaW5kZXg7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIC0xO1xyXG59XG5cbnZhciBBcnJheVJlcGVhdFN0cmF0ZWd5ID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEFycmF5UmVwZWF0U3RyYXRlZ3koKSB7XHJcbiAgICB9XHJcbiAgICBBcnJheVJlcGVhdFN0cmF0ZWd5LnByb3RvdHlwZS5nZXRDb2xsZWN0aW9uT2JzZXJ2ZXIgPSBmdW5jdGlvbiAob2JzZXJ2ZXJMb2NhdG9yLCBpdGVtcykge1xyXG4gICAgICAgIHJldHVybiBvYnNlcnZlckxvY2F0b3IuZ2V0QXJyYXlPYnNlcnZlcihpdGVtcyk7XHJcbiAgICB9O1xyXG4gICAgQXJyYXlSZXBlYXRTdHJhdGVneS5wcm90b3R5cGUuaW5zdGFuY2VDaGFuZ2VkID0gZnVuY3Rpb24gKHJlcGVhdCwgaXRlbXMpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHZhciAkcmVwZWF0ID0gcmVwZWF0O1xyXG4gICAgICAgIHZhciBpdGVtc0xlbmd0aCA9IGl0ZW1zLmxlbmd0aDtcclxuICAgICAgICBpZiAoIWl0ZW1zIHx8IGl0ZW1zTGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICRyZXBlYXQucmVtb3ZlQWxsVmlld3ModHJ1ZSwgISRyZXBlYXQudmlld3NSZXF1aXJlTGlmZWN5Y2xlKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgY2hpbGRyZW4gPSAkcmVwZWF0LnZpZXdzKCk7XHJcbiAgICAgICAgdmFyIHZpZXdzTGVuZ3RoID0gY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICAgIGlmICh2aWV3c0xlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9zdGFuZGFyZFByb2Nlc3NJbnN0YW5jZUNoYW5nZWQoJHJlcGVhdCwgaXRlbXMpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgkcmVwZWF0LnZpZXdzUmVxdWlyZUxpZmVjeWNsZSkge1xyXG4gICAgICAgICAgICB2YXIgY2hpbGRyZW5TbmFwc2hvdCA9IGNoaWxkcmVuLnNsaWNlKDApO1xyXG4gICAgICAgICAgICB2YXIgaXRlbU5hbWVJbkJpbmRpbmdDb250ZXh0ID0gJHJlcGVhdC5sb2NhbDtcclxuICAgICAgICAgICAgdmFyIG1hdGNoZXJfMSA9ICRyZXBlYXQubWF0Y2hlcigpO1xyXG4gICAgICAgICAgICB2YXIgaXRlbXNQcmV2aW91c2x5SW5WaWV3c18xID0gW107XHJcbiAgICAgICAgICAgIHZhciB2aWV3c1RvUmVtb3ZlID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB2aWV3c0xlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHZpZXcgPSBjaGlsZHJlblNuYXBzaG90W2luZGV4XTtcclxuICAgICAgICAgICAgICAgIHZhciBvbGRJdGVtID0gdmlldy5iaW5kaW5nQ29udGV4dFtpdGVtTmFtZUluQmluZGluZ0NvbnRleHRdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4T2YoaXRlbXMsIG9sZEl0ZW0sIG1hdGNoZXJfMSkgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmlld3NUb1JlbW92ZS5wdXNoKHZpZXcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXNQcmV2aW91c2x5SW5WaWV3c18xLnB1c2gob2xkSXRlbSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHVwZGF0ZVZpZXdzID0gdm9pZCAwO1xyXG4gICAgICAgICAgICB2YXIgcmVtb3ZlUHJvbWlzZSA9IHZvaWQgMDtcclxuICAgICAgICAgICAgaWYgKGl0ZW1zUHJldmlvdXNseUluVmlld3NfMS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICByZW1vdmVQcm9taXNlID0gJHJlcGVhdC5yZW1vdmVWaWV3cyh2aWV3c1RvUmVtb3ZlLCB0cnVlLCAhJHJlcGVhdC52aWV3c1JlcXVpcmVMaWZlY3ljbGUpO1xyXG4gICAgICAgICAgICAgICAgdXBkYXRlVmlld3MgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGl0ZW1zTGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtID0gaXRlbXNbaW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXhPZlZpZXcgPSBpbmRleE9mKGl0ZW1zUHJldmlvdXNseUluVmlld3NfMSwgaXRlbSwgbWF0Y2hlcl8xLCBpbmRleCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2aWV3ID0gdm9pZCAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXhPZlZpZXcgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3ZlcnJpZGVDb250ZXh0ID0gY3JlYXRlRnVsbE92ZXJyaWRlQ29udGV4dCgkcmVwZWF0LCBpdGVtc1tpbmRleF0sIGluZGV4LCBpdGVtc0xlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmVwZWF0Lmluc2VydFZpZXcoaW5kZXgsIG92ZXJyaWRlQ29udGV4dC5iaW5kaW5nQ29udGV4dCwgb3ZlcnJpZGVDb250ZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zUHJldmlvdXNseUluVmlld3NfMS5zcGxpY2UoaW5kZXgsIDAsIHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5kZXhPZlZpZXcgPT09IGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3ID0gY2hpbGRyZW5baW5kZXhPZlZpZXddO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNQcmV2aW91c2x5SW5WaWV3c18xW2luZGV4T2ZWaWV3XSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcgPSBjaGlsZHJlbltpbmRleE9mVmlld107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmVwZWF0Lm1vdmVWaWV3KGluZGV4T2ZWaWV3LCBpbmRleCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtc1ByZXZpb3VzbHlJblZpZXdzXzEuc3BsaWNlKGluZGV4T2ZWaWV3LCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zUHJldmlvdXNseUluVmlld3NfMS5zcGxpY2UoaW5kZXgsIDAsIHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZpZXcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZU92ZXJyaWRlQ29udGV4dCh2aWV3Lm92ZXJyaWRlQ29udGV4dCwgaW5kZXgsIGl0ZW1zTGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5faW5QbGFjZVByb2Nlc3NJdGVtcygkcmVwZWF0LCBpdGVtcyk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVtb3ZlUHJvbWlzZSA9ICRyZXBlYXQucmVtb3ZlQWxsVmlld3ModHJ1ZSwgISRyZXBlYXQudmlld3NSZXF1aXJlTGlmZWN5Y2xlKTtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZVZpZXdzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMuX3N0YW5kYXJkUHJvY2Vzc0luc3RhbmNlQ2hhbmdlZCgkcmVwZWF0LCBpdGVtcyk7IH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHJlbW92ZVByb21pc2UgaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgICAgICAgICAgICByZW1vdmVQcm9taXNlLnRoZW4odXBkYXRlVmlld3MpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdXBkYXRlVmlld3MoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5faW5QbGFjZVByb2Nlc3NJdGVtcygkcmVwZWF0LCBpdGVtcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIEFycmF5UmVwZWF0U3RyYXRlZ3kucHJvdG90eXBlLl9zdGFuZGFyZFByb2Nlc3NJbnN0YW5jZUNoYW5nZWQgPSBmdW5jdGlvbiAocmVwZWF0LCBpdGVtcykge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGl0ZW1zLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG92ZXJyaWRlQ29udGV4dCA9IGNyZWF0ZUZ1bGxPdmVycmlkZUNvbnRleHQocmVwZWF0LCBpdGVtc1tpXSwgaSwgaWkpO1xyXG4gICAgICAgICAgICByZXBlYXQuYWRkVmlldyhvdmVycmlkZUNvbnRleHQuYmluZGluZ0NvbnRleHQsIG92ZXJyaWRlQ29udGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIEFycmF5UmVwZWF0U3RyYXRlZ3kucHJvdG90eXBlLl9pblBsYWNlUHJvY2Vzc0l0ZW1zID0gZnVuY3Rpb24gKHJlcGVhdCwgaXRlbXMpIHtcclxuICAgICAgICB2YXIgaXRlbXNMZW5ndGggPSBpdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgdmFyIHZpZXdzTGVuZ3RoID0gcmVwZWF0LnZpZXdDb3VudCgpO1xyXG4gICAgICAgIHdoaWxlICh2aWV3c0xlbmd0aCA+IGl0ZW1zTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHZpZXdzTGVuZ3RoLS07XHJcbiAgICAgICAgICAgIHJlcGVhdC5yZW1vdmVWaWV3KHZpZXdzTGVuZ3RoLCB0cnVlLCAhcmVwZWF0LnZpZXdzUmVxdWlyZUxpZmVjeWNsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBsb2NhbCA9IHJlcGVhdC5sb2NhbDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZXdzTGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHZpZXcgPSByZXBlYXQudmlldyhpKTtcclxuICAgICAgICAgICAgdmFyIGxhc3QgPSBpID09PSBpdGVtc0xlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgIHZhciBtaWRkbGUgPSBpICE9PSAwICYmICFsYXN0O1xyXG4gICAgICAgICAgICB2YXIgYmluZGluZ0NvbnRleHQgPSB2aWV3LmJpbmRpbmdDb250ZXh0O1xyXG4gICAgICAgICAgICB2YXIgb3ZlcnJpZGVDb250ZXh0ID0gdmlldy5vdmVycmlkZUNvbnRleHQ7XHJcbiAgICAgICAgICAgIGlmIChiaW5kaW5nQ29udGV4dFtsb2NhbF0gPT09IGl0ZW1zW2ldXHJcbiAgICAgICAgICAgICAgICAmJiBvdmVycmlkZUNvbnRleHQuJG1pZGRsZSA9PT0gbWlkZGxlXHJcbiAgICAgICAgICAgICAgICAmJiBvdmVycmlkZUNvbnRleHQuJGxhc3QgPT09IGxhc3QpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJpbmRpbmdDb250ZXh0W2xvY2FsXSA9IGl0ZW1zW2ldO1xyXG4gICAgICAgICAgICBvdmVycmlkZUNvbnRleHQuJG1pZGRsZSA9IG1pZGRsZTtcclxuICAgICAgICAgICAgb3ZlcnJpZGVDb250ZXh0LiRsYXN0ID0gbGFzdDtcclxuICAgICAgICAgICAgcmVwZWF0LnVwZGF0ZUJpbmRpbmdzKHZpZXcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKHZhciBpID0gdmlld3NMZW5ndGg7IGkgPCBpdGVtc0xlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBvdmVycmlkZUNvbnRleHQgPSBjcmVhdGVGdWxsT3ZlcnJpZGVDb250ZXh0KHJlcGVhdCwgaXRlbXNbaV0sIGksIGl0ZW1zTGVuZ3RoKTtcclxuICAgICAgICAgICAgcmVwZWF0LmFkZFZpZXcob3ZlcnJpZGVDb250ZXh0LmJpbmRpbmdDb250ZXh0LCBvdmVycmlkZUNvbnRleHQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBBcnJheVJlcGVhdFN0cmF0ZWd5LnByb3RvdHlwZS5pbnN0YW5jZU11dGF0ZWQgPSBmdW5jdGlvbiAocmVwZWF0LCBhcnJheSwgc3BsaWNlcykge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgaWYgKHJlcGVhdC5fX3F1ZXVlZFNwbGljZXMpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gc3BsaWNlcy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2EgPSBzcGxpY2VzW2ldLCBpbmRleCA9IF9hLmluZGV4LCByZW1vdmVkID0gX2EucmVtb3ZlZCwgYWRkZWRDb3VudCA9IF9hLmFkZGVkQ291bnQ7XHJcbiAgICAgICAgICAgICAgICBtZXJnZVNwbGljZShyZXBlYXQuX19xdWV1ZWRTcGxpY2VzLCBpbmRleCwgcmVtb3ZlZCwgYWRkZWRDb3VudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVwZWF0Ll9fYXJyYXkgPSBhcnJheS5zbGljZSgwKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbWF5YmVQcm9taXNlID0gdGhpcy5fcnVuU3BsaWNlcyhyZXBlYXQsIGFycmF5LnNsaWNlKDApLCBzcGxpY2VzKTtcclxuICAgICAgICBpZiAobWF5YmVQcm9taXNlIGluc3RhbmNlb2YgUHJvbWlzZSkge1xyXG4gICAgICAgICAgICB2YXIgcXVldWVkU3BsaWNlc18xID0gcmVwZWF0Ll9fcXVldWVkU3BsaWNlcyA9IFtdO1xyXG4gICAgICAgICAgICB2YXIgcnVuUXVldWVkU3BsaWNlc18xID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFxdWV1ZWRTcGxpY2VzXzEubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVwZWF0Ll9fcXVldWVkU3BsaWNlcyA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICByZXBlYXQuX19hcnJheSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXIgbmV4dFByb21pc2UgPSBfdGhpcy5fcnVuU3BsaWNlcyhyZXBlYXQsIHJlcGVhdC5fX2FycmF5LCBxdWV1ZWRTcGxpY2VzXzEpIHx8IFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgcXVldWVkU3BsaWNlc18xID0gcmVwZWF0Ll9fcXVldWVkU3BsaWNlcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgbmV4dFByb21pc2UudGhlbihydW5RdWV1ZWRTcGxpY2VzXzEpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBtYXliZVByb21pc2UudGhlbihydW5RdWV1ZWRTcGxpY2VzXzEpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBBcnJheVJlcGVhdFN0cmF0ZWd5LnByb3RvdHlwZS5fcnVuU3BsaWNlcyA9IGZ1bmN0aW9uIChyZXBlYXQsIGFycmF5LCBzcGxpY2VzKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB2YXIgcmVtb3ZlRGVsdGEgPSAwO1xyXG4gICAgICAgIHZhciBybVByb21pc2VzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gc3BsaWNlcy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XHJcbiAgICAgICAgICAgIHZhciBzcGxpY2UgPSBzcGxpY2VzW2ldO1xyXG4gICAgICAgICAgICB2YXIgcmVtb3ZlZCA9IHNwbGljZS5yZW1vdmVkO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMCwgamogPSByZW1vdmVkLmxlbmd0aDsgaiA8IGpqOyArK2opIHtcclxuICAgICAgICAgICAgICAgIHZhciB2aWV3T3JQcm9taXNlID0gcmVwZWF0LnJlbW92ZVZpZXcoc3BsaWNlLmluZGV4ICsgcmVtb3ZlRGVsdGEgKyBybVByb21pc2VzLmxlbmd0aCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodmlld09yUHJvbWlzZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBybVByb21pc2VzLnB1c2godmlld09yUHJvbWlzZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVtb3ZlRGVsdGEgLT0gc3BsaWNlLmFkZGVkQ291bnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChybVByb21pc2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHJtUHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNwbGljZUluZGV4TG93ID0gX3RoaXMuX2hhbmRsZUFkZGVkU3BsaWNlcyhyZXBlYXQsIGFycmF5LCBzcGxpY2VzKTtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZU92ZXJyaWRlQ29udGV4dHMocmVwZWF0LnZpZXdzKCksIHNwbGljZUluZGV4TG93KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBzcGxpY2VJbmRleExvdyA9IHRoaXMuX2hhbmRsZUFkZGVkU3BsaWNlcyhyZXBlYXQsIGFycmF5LCBzcGxpY2VzKTtcclxuICAgICAgICB1cGRhdGVPdmVycmlkZUNvbnRleHRzKHJlcGVhdC52aWV3cygpLCBzcGxpY2VJbmRleExvdyk7XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH07XHJcbiAgICBBcnJheVJlcGVhdFN0cmF0ZWd5LnByb3RvdHlwZS5faGFuZGxlQWRkZWRTcGxpY2VzID0gZnVuY3Rpb24gKHJlcGVhdCwgYXJyYXksIHNwbGljZXMpIHtcclxuICAgICAgICB2YXIgc3BsaWNlSW5kZXg7XHJcbiAgICAgICAgdmFyIHNwbGljZUluZGV4TG93O1xyXG4gICAgICAgIHZhciBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBzcGxpY2VzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcclxuICAgICAgICAgICAgdmFyIHNwbGljZSA9IHNwbGljZXNbaV07XHJcbiAgICAgICAgICAgIHZhciBhZGRJbmRleCA9IHNwbGljZUluZGV4ID0gc3BsaWNlLmluZGV4O1xyXG4gICAgICAgICAgICB2YXIgZW5kID0gc3BsaWNlLmluZGV4ICsgc3BsaWNlLmFkZGVkQ291bnQ7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3BsaWNlSW5kZXhMb3cgPT09ICd1bmRlZmluZWQnIHx8IHNwbGljZUluZGV4TG93ID09PSBudWxsIHx8IHNwbGljZUluZGV4TG93ID4gc3BsaWNlLmluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICBzcGxpY2VJbmRleExvdyA9IHNwbGljZUluZGV4O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAoOyBhZGRJbmRleCA8IGVuZDsgKythZGRJbmRleCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG92ZXJyaWRlQ29udGV4dCA9IGNyZWF0ZUZ1bGxPdmVycmlkZUNvbnRleHQocmVwZWF0LCBhcnJheVthZGRJbmRleF0sIGFkZEluZGV4LCBhcnJheUxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICByZXBlYXQuaW5zZXJ0VmlldyhhZGRJbmRleCwgb3ZlcnJpZGVDb250ZXh0LmJpbmRpbmdDb250ZXh0LCBvdmVycmlkZUNvbnRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzcGxpY2VJbmRleExvdztcclxuICAgIH07XHJcbiAgICByZXR1cm4gQXJyYXlSZXBlYXRTdHJhdGVneTtcclxufSgpKTtcblxudmFyIE1hcFJlcGVhdFN0cmF0ZWd5ID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIE1hcFJlcGVhdFN0cmF0ZWd5KCkge1xyXG4gICAgfVxyXG4gICAgTWFwUmVwZWF0U3RyYXRlZ3kucHJvdG90eXBlLmdldENvbGxlY3Rpb25PYnNlcnZlciA9IGZ1bmN0aW9uIChvYnNlcnZlckxvY2F0b3IsIGl0ZW1zKSB7XHJcbiAgICAgICAgcmV0dXJuIG9ic2VydmVyTG9jYXRvci5nZXRNYXBPYnNlcnZlcihpdGVtcyk7XHJcbiAgICB9O1xyXG4gICAgTWFwUmVwZWF0U3RyYXRlZ3kucHJvdG90eXBlLmluc3RhbmNlQ2hhbmdlZCA9IGZ1bmN0aW9uIChyZXBlYXQsIGl0ZW1zKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB2YXIgcmVtb3ZlUHJvbWlzZSA9IHJlcGVhdC5yZW1vdmVBbGxWaWV3cyh0cnVlLCAhcmVwZWF0LnZpZXdzUmVxdWlyZUxpZmVjeWNsZSk7XHJcbiAgICAgICAgaWYgKHJlbW92ZVByb21pc2UgaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgICAgICAgIHJlbW92ZVByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5fc3RhbmRhcmRQcm9jZXNzSXRlbXMocmVwZWF0LCBpdGVtcyk7IH0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3N0YW5kYXJkUHJvY2Vzc0l0ZW1zKHJlcGVhdCwgaXRlbXMpO1xyXG4gICAgfTtcclxuICAgIE1hcFJlcGVhdFN0cmF0ZWd5LnByb3RvdHlwZS5fc3RhbmRhcmRQcm9jZXNzSXRlbXMgPSBmdW5jdGlvbiAocmVwZWF0LCBpdGVtcykge1xyXG4gICAgICAgIHZhciBpbmRleCA9IDA7XHJcbiAgICAgICAgdmFyIG92ZXJyaWRlQ29udGV4dDtcclxuICAgICAgICBpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XHJcbiAgICAgICAgICAgIG92ZXJyaWRlQ29udGV4dCA9IGNyZWF0ZUZ1bGxPdmVycmlkZUNvbnRleHQocmVwZWF0LCB2YWx1ZSwgaW5kZXgsIGl0ZW1zLnNpemUsIGtleSk7XHJcbiAgICAgICAgICAgIHJlcGVhdC5hZGRWaWV3KG92ZXJyaWRlQ29udGV4dC5iaW5kaW5nQ29udGV4dCwgb3ZlcnJpZGVDb250ZXh0KTtcclxuICAgICAgICAgICAgKytpbmRleDtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICBNYXBSZXBlYXRTdHJhdGVneS5wcm90b3R5cGUuaW5zdGFuY2VNdXRhdGVkID0gZnVuY3Rpb24gKHJlcGVhdCwgbWFwLCByZWNvcmRzKSB7XHJcbiAgICAgICAgdmFyIGtleTtcclxuICAgICAgICB2YXIgaTtcclxuICAgICAgICB2YXIgaWk7XHJcbiAgICAgICAgdmFyIG92ZXJyaWRlQ29udGV4dDtcclxuICAgICAgICB2YXIgcmVtb3ZlSW5kZXg7XHJcbiAgICAgICAgdmFyIGFkZEluZGV4O1xyXG4gICAgICAgIHZhciByZWNvcmQ7XHJcbiAgICAgICAgdmFyIHJtUHJvbWlzZXMgPSBbXTtcclxuICAgICAgICB2YXIgdmlld09yUHJvbWlzZTtcclxuICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IHJlY29yZHMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xyXG4gICAgICAgICAgICByZWNvcmQgPSByZWNvcmRzW2ldO1xyXG4gICAgICAgICAgICBrZXkgPSByZWNvcmQua2V5O1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHJlY29yZC50eXBlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlICd1cGRhdGUnOlxyXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUluZGV4ID0gdGhpcy5fZ2V0Vmlld0luZGV4QnlLZXkocmVwZWF0LCBrZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZpZXdPclByb21pc2UgPSByZXBlYXQucmVtb3ZlVmlldyhyZW1vdmVJbmRleCwgdHJ1ZSwgIXJlcGVhdC52aWV3c1JlcXVpcmVMaWZlY3ljbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2aWV3T3JQcm9taXNlIGluc3RhbmNlb2YgUHJvbWlzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBybVByb21pc2VzLnB1c2godmlld09yUHJvbWlzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlQ29udGV4dCA9IGNyZWF0ZUZ1bGxPdmVycmlkZUNvbnRleHQocmVwZWF0LCBtYXAuZ2V0KGtleSksIHJlbW92ZUluZGV4LCBtYXAuc2l6ZSwga2V5KTtcclxuICAgICAgICAgICAgICAgICAgICByZXBlYXQuaW5zZXJ0VmlldyhyZW1vdmVJbmRleCwgb3ZlcnJpZGVDb250ZXh0LmJpbmRpbmdDb250ZXh0LCBvdmVycmlkZUNvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnYWRkJzpcclxuICAgICAgICAgICAgICAgICAgICBhZGRJbmRleCA9IHJlcGVhdC52aWV3Q291bnQoKSA8PSBtYXAuc2l6ZSAtIDEgPyByZXBlYXQudmlld0NvdW50KCkgOiBtYXAuc2l6ZSAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGVDb250ZXh0ID0gY3JlYXRlRnVsbE92ZXJyaWRlQ29udGV4dChyZXBlYXQsIG1hcC5nZXQoa2V5KSwgYWRkSW5kZXgsIG1hcC5zaXplLCBrZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlcGVhdC5pbnNlcnRWaWV3KG1hcC5zaXplIC0gMSwgb3ZlcnJpZGVDb250ZXh0LmJpbmRpbmdDb250ZXh0LCBvdmVycmlkZUNvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnZGVsZXRlJzpcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVjb3JkLm9sZFZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZW1vdmVJbmRleCA9IHRoaXMuX2dldFZpZXdJbmRleEJ5S2V5KHJlcGVhdCwga2V5KTtcclxuICAgICAgICAgICAgICAgICAgICB2aWV3T3JQcm9taXNlID0gcmVwZWF0LnJlbW92ZVZpZXcocmVtb3ZlSW5kZXgsIHRydWUsICFyZXBlYXQudmlld3NSZXF1aXJlTGlmZWN5Y2xlKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodmlld09yUHJvbWlzZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm1Qcm9taXNlcy5wdXNoKHZpZXdPclByb21pc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ2NsZWFyJzpcclxuICAgICAgICAgICAgICAgICAgICByZXBlYXQucmVtb3ZlQWxsVmlld3ModHJ1ZSwgIXJlcGVhdC52aWV3c1JlcXVpcmVMaWZlY3ljbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocm1Qcm9taXNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIFByb21pc2UuYWxsKHJtUHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdXBkYXRlT3ZlcnJpZGVDb250ZXh0cyhyZXBlYXQudmlld3MoKSwgMCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdXBkYXRlT3ZlcnJpZGVDb250ZXh0cyhyZXBlYXQudmlld3MoKSwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIE1hcFJlcGVhdFN0cmF0ZWd5LnByb3RvdHlwZS5fZ2V0Vmlld0luZGV4QnlLZXkgPSBmdW5jdGlvbiAocmVwZWF0LCBrZXkpIHtcclxuICAgICAgICB2YXIgaTtcclxuICAgICAgICB2YXIgaWk7XHJcbiAgICAgICAgdmFyIGNoaWxkO1xyXG4gICAgICAgIGZvciAoaSA9IDAsIGlpID0gcmVwZWF0LnZpZXdDb3VudCgpOyBpIDwgaWk7ICsraSkge1xyXG4gICAgICAgICAgICBjaGlsZCA9IHJlcGVhdC52aWV3KGkpO1xyXG4gICAgICAgICAgICBpZiAoY2hpbGQuYmluZGluZ0NvbnRleHRbcmVwZWF0LmtleV0gPT09IGtleSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH07XHJcbiAgICByZXR1cm4gTWFwUmVwZWF0U3RyYXRlZ3k7XHJcbn0oKSk7XG5cbnZhciBOdWxsUmVwZWF0U3RyYXRlZ3kgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gTnVsbFJlcGVhdFN0cmF0ZWd5KCkge1xyXG4gICAgfVxyXG4gICAgTnVsbFJlcGVhdFN0cmF0ZWd5LnByb3RvdHlwZS5pbnN0YW5jZUNoYW5nZWQgPSBmdW5jdGlvbiAocmVwZWF0LCBpdGVtcykge1xyXG4gICAgICAgIHJlcGVhdC5yZW1vdmVBbGxWaWV3cyh0cnVlKTtcclxuICAgIH07XHJcbiAgICBOdWxsUmVwZWF0U3RyYXRlZ3kucHJvdG90eXBlLmdldENvbGxlY3Rpb25PYnNlcnZlciA9IGZ1bmN0aW9uIChvYnNlcnZlckxvY2F0b3IsIGl0ZW1zKSB7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIE51bGxSZXBlYXRTdHJhdGVneTtcclxufSgpKTtcblxudmFyIE51bWJlclJlcGVhdFN0cmF0ZWd5ID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIE51bWJlclJlcGVhdFN0cmF0ZWd5KCkge1xyXG4gICAgfVxyXG4gICAgTnVtYmVyUmVwZWF0U3RyYXRlZ3kucHJvdG90eXBlLmdldENvbGxlY3Rpb25PYnNlcnZlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH07XHJcbiAgICBOdW1iZXJSZXBlYXRTdHJhdGVneS5wcm90b3R5cGUuaW5zdGFuY2VDaGFuZ2VkID0gZnVuY3Rpb24gKHJlcGVhdCwgdmFsdWUpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHZhciByZW1vdmVQcm9taXNlID0gcmVwZWF0LnJlbW92ZUFsbFZpZXdzKHRydWUsICFyZXBlYXQudmlld3NSZXF1aXJlTGlmZWN5Y2xlKTtcclxuICAgICAgICBpZiAocmVtb3ZlUHJvbWlzZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcclxuICAgICAgICAgICAgcmVtb3ZlUHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLl9zdGFuZGFyZFByb2Nlc3NJdGVtcyhyZXBlYXQsIHZhbHVlKTsgfSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fc3RhbmRhcmRQcm9jZXNzSXRlbXMocmVwZWF0LCB2YWx1ZSk7XHJcbiAgICB9O1xyXG4gICAgTnVtYmVyUmVwZWF0U3RyYXRlZ3kucHJvdG90eXBlLl9zdGFuZGFyZFByb2Nlc3NJdGVtcyA9IGZ1bmN0aW9uIChyZXBlYXQsIHZhbHVlKSB7XHJcbiAgICAgICAgdmFyIGNoaWxkcmVuTGVuZ3RoID0gcmVwZWF0LnZpZXdDb3VudCgpO1xyXG4gICAgICAgIHZhciBpO1xyXG4gICAgICAgIHZhciBpaTtcclxuICAgICAgICB2YXIgb3ZlcnJpZGVDb250ZXh0O1xyXG4gICAgICAgIHZhciB2aWV3c1RvUmVtb3ZlO1xyXG4gICAgICAgIHZhbHVlID0gTWF0aC5mbG9vcih2YWx1ZSk7XHJcbiAgICAgICAgdmlld3NUb1JlbW92ZSA9IGNoaWxkcmVuTGVuZ3RoIC0gdmFsdWU7XHJcbiAgICAgICAgaWYgKHZpZXdzVG9SZW1vdmUgPiAwKSB7XHJcbiAgICAgICAgICAgIGlmICh2aWV3c1RvUmVtb3ZlID4gY2hpbGRyZW5MZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHZpZXdzVG9SZW1vdmUgPSBjaGlsZHJlbkxlbmd0aDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IHZpZXdzVG9SZW1vdmU7IGkgPCBpaTsgKytpKSB7XHJcbiAgICAgICAgICAgICAgICByZXBlYXQucmVtb3ZlVmlldyhjaGlsZHJlbkxlbmd0aCAtIChpICsgMSksIHRydWUsICFyZXBlYXQudmlld3NSZXF1aXJlTGlmZWN5Y2xlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAoaSA9IGNoaWxkcmVuTGVuZ3RoLCBpaSA9IHZhbHVlOyBpIDwgaWk7ICsraSkge1xyXG4gICAgICAgICAgICBvdmVycmlkZUNvbnRleHQgPSBjcmVhdGVGdWxsT3ZlcnJpZGVDb250ZXh0KHJlcGVhdCwgaSwgaSwgaWkpO1xyXG4gICAgICAgICAgICByZXBlYXQuYWRkVmlldyhvdmVycmlkZUNvbnRleHQuYmluZGluZ0NvbnRleHQsIG92ZXJyaWRlQ29udGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHVwZGF0ZU92ZXJyaWRlQ29udGV4dHMocmVwZWF0LnZpZXdzKCksIDApO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBOdW1iZXJSZXBlYXRTdHJhdGVneTtcclxufSgpKTtcblxudmFyIFNldFJlcGVhdFN0cmF0ZWd5ID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIFNldFJlcGVhdFN0cmF0ZWd5KCkge1xyXG4gICAgfVxyXG4gICAgU2V0UmVwZWF0U3RyYXRlZ3kucHJvdG90eXBlLmdldENvbGxlY3Rpb25PYnNlcnZlciA9IGZ1bmN0aW9uIChvYnNlcnZlckxvY2F0b3IsIGl0ZW1zKSB7XHJcbiAgICAgICAgcmV0dXJuIG9ic2VydmVyTG9jYXRvci5nZXRTZXRPYnNlcnZlcihpdGVtcyk7XHJcbiAgICB9O1xyXG4gICAgU2V0UmVwZWF0U3RyYXRlZ3kucHJvdG90eXBlLmluc3RhbmNlQ2hhbmdlZCA9IGZ1bmN0aW9uIChyZXBlYXQsIGl0ZW1zKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB2YXIgcmVtb3ZlUHJvbWlzZSA9IHJlcGVhdC5yZW1vdmVBbGxWaWV3cyh0cnVlLCAhcmVwZWF0LnZpZXdzUmVxdWlyZUxpZmVjeWNsZSk7XHJcbiAgICAgICAgaWYgKHJlbW92ZVByb21pc2UgaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgICAgICAgIHJlbW92ZVByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5fc3RhbmRhcmRQcm9jZXNzSXRlbXMocmVwZWF0LCBpdGVtcyk7IH0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3N0YW5kYXJkUHJvY2Vzc0l0ZW1zKHJlcGVhdCwgaXRlbXMpO1xyXG4gICAgfTtcclxuICAgIFNldFJlcGVhdFN0cmF0ZWd5LnByb3RvdHlwZS5fc3RhbmRhcmRQcm9jZXNzSXRlbXMgPSBmdW5jdGlvbiAocmVwZWF0LCBpdGVtcykge1xyXG4gICAgICAgIHZhciBpbmRleCA9IDA7XHJcbiAgICAgICAgdmFyIG92ZXJyaWRlQ29udGV4dDtcclxuICAgICAgICBpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICBvdmVycmlkZUNvbnRleHQgPSBjcmVhdGVGdWxsT3ZlcnJpZGVDb250ZXh0KHJlcGVhdCwgdmFsdWUsIGluZGV4LCBpdGVtcy5zaXplKTtcclxuICAgICAgICAgICAgcmVwZWF0LmFkZFZpZXcob3ZlcnJpZGVDb250ZXh0LmJpbmRpbmdDb250ZXh0LCBvdmVycmlkZUNvbnRleHQpO1xyXG4gICAgICAgICAgICArK2luZGV4O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIFNldFJlcGVhdFN0cmF0ZWd5LnByb3RvdHlwZS5pbnN0YW5jZU11dGF0ZWQgPSBmdW5jdGlvbiAocmVwZWF0LCBzZXQsIHJlY29yZHMpIHtcclxuICAgICAgICB2YXIgdmFsdWU7XHJcbiAgICAgICAgdmFyIGk7XHJcbiAgICAgICAgdmFyIGlpO1xyXG4gICAgICAgIHZhciBvdmVycmlkZUNvbnRleHQ7XHJcbiAgICAgICAgdmFyIHJlbW92ZUluZGV4O1xyXG4gICAgICAgIHZhciByZWNvcmQ7XHJcbiAgICAgICAgdmFyIHJtUHJvbWlzZXMgPSBbXTtcclxuICAgICAgICB2YXIgdmlld09yUHJvbWlzZTtcclxuICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IHJlY29yZHMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xyXG4gICAgICAgICAgICByZWNvcmQgPSByZWNvcmRzW2ldO1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHJlY29yZC52YWx1ZTtcclxuICAgICAgICAgICAgc3dpdGNoIChyZWNvcmQudHlwZSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnYWRkJzpcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IE1hdGgubWF4KHNldC5zaXplIC0gMSwgMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGVDb250ZXh0ID0gY3JlYXRlRnVsbE92ZXJyaWRlQ29udGV4dChyZXBlYXQsIHZhbHVlLCBzaXplLCBzZXQuc2l6ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVwZWF0Lmluc2VydFZpZXcoc2l6ZSwgb3ZlcnJpZGVDb250ZXh0LmJpbmRpbmdDb250ZXh0LCBvdmVycmlkZUNvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnZGVsZXRlJzpcclxuICAgICAgICAgICAgICAgICAgICByZW1vdmVJbmRleCA9IHRoaXMuX2dldFZpZXdJbmRleEJ5VmFsdWUocmVwZWF0LCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmlld09yUHJvbWlzZSA9IHJlcGVhdC5yZW1vdmVWaWV3KHJlbW92ZUluZGV4LCB0cnVlLCAhcmVwZWF0LnZpZXdzUmVxdWlyZUxpZmVjeWNsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZpZXdPclByb21pc2UgaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJtUHJvbWlzZXMucHVzaCh2aWV3T3JQcm9taXNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdjbGVhcic6XHJcbiAgICAgICAgICAgICAgICAgICAgcmVwZWF0LnJlbW92ZUFsbFZpZXdzKHRydWUsICFyZXBlYXQudmlld3NSZXF1aXJlTGlmZWN5Y2xlKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJtUHJvbWlzZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBQcm9taXNlLmFsbChybVByb21pc2VzKS50aGVuKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZU92ZXJyaWRlQ29udGV4dHMocmVwZWF0LnZpZXdzKCksIDApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHVwZGF0ZU92ZXJyaWRlQ29udGV4dHMocmVwZWF0LnZpZXdzKCksIDApO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBTZXRSZXBlYXRTdHJhdGVneS5wcm90b3R5cGUuX2dldFZpZXdJbmRleEJ5VmFsdWUgPSBmdW5jdGlvbiAocmVwZWF0LCB2YWx1ZSkge1xyXG4gICAgICAgIHZhciBpO1xyXG4gICAgICAgIHZhciBpaTtcclxuICAgICAgICB2YXIgY2hpbGQ7XHJcbiAgICAgICAgZm9yIChpID0gMCwgaWkgPSByZXBlYXQudmlld0NvdW50KCk7IGkgPCBpaTsgKytpKSB7XHJcbiAgICAgICAgICAgIGNoaWxkID0gcmVwZWF0LnZpZXcoaSk7XHJcbiAgICAgICAgICAgIGlmIChjaGlsZC5iaW5kaW5nQ29udGV4dFtyZXBlYXQubG9jYWxdID09PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH07XHJcbiAgICByZXR1cm4gU2V0UmVwZWF0U3RyYXRlZ3k7XHJcbn0oKSk7XG5cbnZhciBSZXBlYXRTdHJhdGVneUxvY2F0b3IgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gUmVwZWF0U3RyYXRlZ3lMb2NhdG9yKCkge1xyXG4gICAgICAgIHRoaXMubWF0Y2hlcnMgPSBbXTtcclxuICAgICAgICB0aGlzLnN0cmF0ZWdpZXMgPSBbXTtcclxuICAgICAgICB0aGlzLmFkZFN0cmF0ZWd5KGZ1bmN0aW9uIChpdGVtcykgeyByZXR1cm4gaXRlbXMgPT09IG51bGwgfHwgaXRlbXMgPT09IHVuZGVmaW5lZDsgfSwgbmV3IE51bGxSZXBlYXRTdHJhdGVneSgpKTtcclxuICAgICAgICB0aGlzLmFkZFN0cmF0ZWd5KGZ1bmN0aW9uIChpdGVtcykgeyByZXR1cm4gaXRlbXMgaW5zdGFuY2VvZiBBcnJheTsgfSwgbmV3IEFycmF5UmVwZWF0U3RyYXRlZ3koKSk7XHJcbiAgICAgICAgdGhpcy5hZGRTdHJhdGVneShmdW5jdGlvbiAoaXRlbXMpIHsgcmV0dXJuIGl0ZW1zIGluc3RhbmNlb2YgTWFwOyB9LCBuZXcgTWFwUmVwZWF0U3RyYXRlZ3koKSk7XHJcbiAgICAgICAgdGhpcy5hZGRTdHJhdGVneShmdW5jdGlvbiAoaXRlbXMpIHsgcmV0dXJuIGl0ZW1zIGluc3RhbmNlb2YgU2V0OyB9LCBuZXcgU2V0UmVwZWF0U3RyYXRlZ3koKSk7XHJcbiAgICAgICAgdGhpcy5hZGRTdHJhdGVneShmdW5jdGlvbiAoaXRlbXMpIHsgcmV0dXJuIHR5cGVvZiBpdGVtcyA9PT0gJ251bWJlcic7IH0sIG5ldyBOdW1iZXJSZXBlYXRTdHJhdGVneSgpKTtcclxuICAgIH1cclxuICAgIFJlcGVhdFN0cmF0ZWd5TG9jYXRvci5wcm90b3R5cGUuYWRkU3RyYXRlZ3kgPSBmdW5jdGlvbiAobWF0Y2hlciwgc3RyYXRlZ3kpIHtcclxuICAgICAgICB0aGlzLm1hdGNoZXJzLnB1c2gobWF0Y2hlcik7XHJcbiAgICAgICAgdGhpcy5zdHJhdGVnaWVzLnB1c2goc3RyYXRlZ3kpO1xyXG4gICAgfTtcclxuICAgIFJlcGVhdFN0cmF0ZWd5TG9jYXRvci5wcm90b3R5cGUuZ2V0U3RyYXRlZ3kgPSBmdW5jdGlvbiAoaXRlbXMpIHtcclxuICAgICAgICB2YXIgbWF0Y2hlcnMgPSB0aGlzLm1hdGNoZXJzO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IG1hdGNoZXJzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcclxuICAgICAgICAgICAgaWYgKG1hdGNoZXJzW2ldKGl0ZW1zKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RyYXRlZ2llc1tpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH07XHJcbiAgICByZXR1cm4gUmVwZWF0U3RyYXRlZ3lMb2NhdG9yO1xyXG59KCkpO1xuXG52YXIgbGlmZWN5Y2xlT3B0aW9uYWxCZWhhdmlvcnMgPSBbJ2ZvY3VzJywgJ2lmJywgJ2Vsc2UnLCAncmVwZWF0JywgJ3Nob3cnLCAnaGlkZScsICd3aXRoJ107XHJcbmZ1bmN0aW9uIGJlaGF2aW9yUmVxdWlyZXNMaWZlY3ljbGUoaW5zdHJ1Y3Rpb24pIHtcclxuICAgIHZhciB0ID0gaW5zdHJ1Y3Rpb24udHlwZTtcclxuICAgIHZhciBuYW1lID0gdC5lbGVtZW50TmFtZSAhPT0gbnVsbCA/IHQuZWxlbWVudE5hbWUgOiB0LmF0dHJpYnV0ZU5hbWU7XHJcbiAgICByZXR1cm4gbGlmZWN5Y2xlT3B0aW9uYWxCZWhhdmlvcnMuaW5kZXhPZihuYW1lKSA9PT0gLTEgJiYgKHQuaGFuZGxlc0F0dGFjaGVkIHx8IHQuaGFuZGxlc0JpbmQgfHwgdC5oYW5kbGVzQ3JlYXRlZCB8fCB0LmhhbmRsZXNEZXRhY2hlZCB8fCB0LmhhbmRsZXNVbmJpbmQpXHJcbiAgICAgICAgfHwgdC52aWV3RmFjdG9yeSAmJiB2aWV3c1JlcXVpcmVMaWZlY3ljbGUodC52aWV3RmFjdG9yeSlcclxuICAgICAgICB8fCBpbnN0cnVjdGlvbi52aWV3RmFjdG9yeSAmJiB2aWV3c1JlcXVpcmVMaWZlY3ljbGUoaW5zdHJ1Y3Rpb24udmlld0ZhY3RvcnkpO1xyXG59XHJcbmZ1bmN0aW9uIHRhcmdldFJlcXVpcmVzTGlmZWN5Y2xlKGluc3RydWN0aW9uKSB7XHJcbiAgICB2YXIgYmVoYXZpb3JzID0gaW5zdHJ1Y3Rpb24uYmVoYXZpb3JJbnN0cnVjdGlvbnM7XHJcbiAgICBpZiAoYmVoYXZpb3JzKSB7XHJcbiAgICAgICAgdmFyIGkgPSBiZWhhdmlvcnMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgICAgICAgaWYgKGJlaGF2aW9yUmVxdWlyZXNMaWZlY3ljbGUoYmVoYXZpb3JzW2ldKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaW5zdHJ1Y3Rpb24udmlld0ZhY3RvcnkgJiYgdmlld3NSZXF1aXJlTGlmZWN5Y2xlKGluc3RydWN0aW9uLnZpZXdGYWN0b3J5KTtcclxufVxyXG5mdW5jdGlvbiB2aWV3c1JlcXVpcmVMaWZlY3ljbGUodmlld0ZhY3RvcnkpIHtcclxuICAgIGlmICgnX3ZpZXdzUmVxdWlyZUxpZmVjeWNsZScgaW4gdmlld0ZhY3RvcnkpIHtcclxuICAgICAgICByZXR1cm4gdmlld0ZhY3RvcnkuX3ZpZXdzUmVxdWlyZUxpZmVjeWNsZTtcclxuICAgIH1cclxuICAgIHZpZXdGYWN0b3J5Ll92aWV3c1JlcXVpcmVMaWZlY3ljbGUgPSBmYWxzZTtcclxuICAgIGlmICh2aWV3RmFjdG9yeS52aWV3RmFjdG9yeSkge1xyXG4gICAgICAgIHZpZXdGYWN0b3J5Ll92aWV3c1JlcXVpcmVMaWZlY3ljbGUgPSB2aWV3c1JlcXVpcmVMaWZlY3ljbGUodmlld0ZhY3Rvcnkudmlld0ZhY3RvcnkpO1xyXG4gICAgICAgIHJldHVybiB2aWV3RmFjdG9yeS5fdmlld3NSZXF1aXJlTGlmZWN5Y2xlO1xyXG4gICAgfVxyXG4gICAgaWYgKHZpZXdGYWN0b3J5LnRlbXBsYXRlLnF1ZXJ5U2VsZWN0b3IoJy5hdS1hbmltYXRlJykpIHtcclxuICAgICAgICB2aWV3RmFjdG9yeS5fdmlld3NSZXF1aXJlTGlmZWN5Y2xlID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGZvciAodmFyIGlkIGluIHZpZXdGYWN0b3J5Lmluc3RydWN0aW9ucykge1xyXG4gICAgICAgIGlmICh0YXJnZXRSZXF1aXJlc0xpZmVjeWNsZSh2aWV3RmFjdG9yeS5pbnN0cnVjdGlvbnNbaWRdKSkge1xyXG4gICAgICAgICAgICB2aWV3RmFjdG9yeS5fdmlld3NSZXF1aXJlTGlmZWN5Y2xlID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdmlld0ZhY3RvcnkuX3ZpZXdzUmVxdWlyZUxpZmVjeWNsZSA9IGZhbHNlO1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XG5cbnZhciBBYnN0cmFjdFJlcGVhdGVyID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEFic3RyYWN0UmVwZWF0ZXIob3B0aW9ucykge1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywge1xyXG4gICAgICAgICAgICBsb2NhbDogJ2l0ZW1zJyxcclxuICAgICAgICAgICAgdmlld3NSZXF1aXJlTGlmZWN5Y2xlOiB0cnVlXHJcbiAgICAgICAgfSwgb3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICBBYnN0cmFjdFJlcGVhdGVyLnByb3RvdHlwZS52aWV3Q291bnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdWJjbGFzcyBtdXN0IGltcGxlbWVudCBgdmlld0NvdW50YCcpO1xyXG4gICAgfTtcclxuICAgIEFic3RyYWN0UmVwZWF0ZXIucHJvdG90eXBlLnZpZXdzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc3ViY2xhc3MgbXVzdCBpbXBsZW1lbnQgYHZpZXdzYCcpO1xyXG4gICAgfTtcclxuICAgIEFic3RyYWN0UmVwZWF0ZXIucHJvdG90eXBlLnZpZXcgPSBmdW5jdGlvbiAoaW5kZXgpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N1YmNsYXNzIG11c3QgaW1wbGVtZW50IGB2aWV3YCcpO1xyXG4gICAgfTtcclxuICAgIEFic3RyYWN0UmVwZWF0ZXIucHJvdG90eXBlLm1hdGNoZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdWJjbGFzcyBtdXN0IGltcGxlbWVudCBgbWF0Y2hlcmAnKTtcclxuICAgIH07XHJcbiAgICBBYnN0cmFjdFJlcGVhdGVyLnByb3RvdHlwZS5hZGRWaWV3ID0gZnVuY3Rpb24gKGJpbmRpbmdDb250ZXh0LCBvdmVycmlkZUNvbnRleHQpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N1YmNsYXNzIG11c3QgaW1wbGVtZW50IGBhZGRWaWV3YCcpO1xyXG4gICAgfTtcclxuICAgIEFic3RyYWN0UmVwZWF0ZXIucHJvdG90eXBlLmluc2VydFZpZXcgPSBmdW5jdGlvbiAoaW5kZXgsIGJpbmRpbmdDb250ZXh0LCBvdmVycmlkZUNvbnRleHQpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N1YmNsYXNzIG11c3QgaW1wbGVtZW50IGBpbnNlcnRWaWV3YCcpO1xyXG4gICAgfTtcclxuICAgIEFic3RyYWN0UmVwZWF0ZXIucHJvdG90eXBlLm1vdmVWaWV3ID0gZnVuY3Rpb24gKHNvdXJjZUluZGV4LCB0YXJnZXRJbmRleCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc3ViY2xhc3MgbXVzdCBpbXBsZW1lbnQgYG1vdmVWaWV3YCcpO1xyXG4gICAgfTtcclxuICAgIEFic3RyYWN0UmVwZWF0ZXIucHJvdG90eXBlLnJlbW92ZUFsbFZpZXdzID0gZnVuY3Rpb24gKHJldHVyblRvQ2FjaGUsIHNraXBBbmltYXRpb24pIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N1YmNsYXNzIG11c3QgaW1wbGVtZW50IGByZW1vdmVBbGxWaWV3c2AnKTtcclxuICAgIH07XHJcbiAgICBBYnN0cmFjdFJlcGVhdGVyLnByb3RvdHlwZS5yZW1vdmVWaWV3cyA9IGZ1bmN0aW9uICh2aWV3c1RvUmVtb3ZlLCByZXR1cm5Ub0NhY2hlLCBza2lwQW5pbWF0aW9uKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdWJjbGFzcyBtdXN0IGltcGxlbWVudCBgcmVtb3ZlVmlld2AnKTtcclxuICAgIH07XHJcbiAgICBBYnN0cmFjdFJlcGVhdGVyLnByb3RvdHlwZS5yZW1vdmVWaWV3ID0gZnVuY3Rpb24gKGluZGV4LCByZXR1cm5Ub0NhY2hlLCBza2lwQW5pbWF0aW9uKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdWJjbGFzcyBtdXN0IGltcGxlbWVudCBgcmVtb3ZlVmlld2AnKTtcclxuICAgIH07XHJcbiAgICBBYnN0cmFjdFJlcGVhdGVyLnByb3RvdHlwZS51cGRhdGVCaW5kaW5ncyA9IGZ1bmN0aW9uICh2aWV3KSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdWJjbGFzcyBtdXN0IGltcGxlbWVudCBgdXBkYXRlQmluZGluZ3NgJyk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIEFic3RyYWN0UmVwZWF0ZXI7XHJcbn0oKSk7XG5cbnZhciBtYXRjaGVyRXh0cmFjdGlvbk1hcmtlciA9ICdfX21hcmtlcl9leHRyYWN0ZWRfXyc7XHJcbnZhciBSZXBlYXQgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xyXG4gICAgX19leHRlbmRzKFJlcGVhdCwgX3N1cGVyKTtcclxuICAgIGZ1bmN0aW9uIFJlcGVhdCh2aWV3RmFjdG9yeSwgaW5zdHJ1Y3Rpb24sIHZpZXdTbG90LCB2aWV3UmVzb3VyY2VzLCBvYnNlcnZlckxvY2F0b3IsIHN0cmF0ZWd5TG9jYXRvcikge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHtcclxuICAgICAgICAgICAgbG9jYWw6ICdpdGVtJyxcclxuICAgICAgICAgICAgdmlld3NSZXF1aXJlTGlmZWN5Y2xlOiB2aWV3c1JlcXVpcmVMaWZlY3ljbGUodmlld0ZhY3RvcnkpXHJcbiAgICAgICAgfSkgfHwgdGhpcztcclxuICAgICAgICBfdGhpcy52aWV3RmFjdG9yeSA9IHZpZXdGYWN0b3J5O1xyXG4gICAgICAgIF90aGlzLmluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb247XHJcbiAgICAgICAgX3RoaXMudmlld1Nsb3QgPSB2aWV3U2xvdDtcclxuICAgICAgICBfdGhpcy5sb29rdXBGdW5jdGlvbnMgPSB2aWV3UmVzb3VyY2VzLmxvb2t1cEZ1bmN0aW9ucztcclxuICAgICAgICBfdGhpcy5vYnNlcnZlckxvY2F0b3IgPSBvYnNlcnZlckxvY2F0b3I7XHJcbiAgICAgICAgX3RoaXMua2V5ID0gJ2tleSc7XHJcbiAgICAgICAgX3RoaXMudmFsdWUgPSAndmFsdWUnO1xyXG4gICAgICAgIF90aGlzLnN0cmF0ZWd5TG9jYXRvciA9IHN0cmF0ZWd5TG9jYXRvcjtcclxuICAgICAgICBfdGhpcy5pZ25vcmVNdXRhdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgIF90aGlzLnNvdXJjZUV4cHJlc3Npb24gPSBnZXRJdGVtc1NvdXJjZUV4cHJlc3Npb24oX3RoaXMuaW5zdHJ1Y3Rpb24sICdyZXBlYXQuZm9yJyk7XHJcbiAgICAgICAgX3RoaXMuaXNPbmVUaW1lID0gaXNPbmVUaW1lKF90aGlzLnNvdXJjZUV4cHJlc3Npb24pO1xyXG4gICAgICAgIF90aGlzLnZpZXdzUmVxdWlyZUxpZmVjeWNsZSA9IHZpZXdzUmVxdWlyZUxpZmVjeWNsZSh2aWV3RmFjdG9yeSk7XHJcbiAgICAgICAgcmV0dXJuIF90aGlzO1xyXG4gICAgfVxyXG4gICAgUmVwZWF0XzEgPSBSZXBlYXQ7XHJcbiAgICBSZXBlYXQucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoY29udGV4dCwgY2hhbmdlcykge1xyXG4gICAgICAgIHRoaXNbY29udGV4dF0odGhpcy5pdGVtcywgY2hhbmdlcyk7XHJcbiAgICB9O1xyXG4gICAgUmVwZWF0LnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGJpbmRpbmdDb250ZXh0LCBvdmVycmlkZUNvbnRleHQpIHtcclxuICAgICAgICB0aGlzLnNjb3BlID0geyBiaW5kaW5nQ29udGV4dDogYmluZGluZ0NvbnRleHQsIG92ZXJyaWRlQ29udGV4dDogb3ZlcnJpZGVDb250ZXh0IH07XHJcbiAgICAgICAgdmFyIGluc3RydWN0aW9uID0gdGhpcy5pbnN0cnVjdGlvbjtcclxuICAgICAgICBpZiAoIShtYXRjaGVyRXh0cmFjdGlvbk1hcmtlciBpbiBpbnN0cnVjdGlvbikpIHtcclxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25bbWF0Y2hlckV4dHJhY3Rpb25NYXJrZXJdID0gdGhpcy5fY2FwdHVyZUFuZFJlbW92ZU1hdGNoZXJCaW5kaW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubWF0Y2hlckJpbmRpbmcgPSBpbnN0cnVjdGlvblttYXRjaGVyRXh0cmFjdGlvbk1hcmtlcl07XHJcbiAgICAgICAgdGhpcy5pdGVtc0NoYW5nZWQoKTtcclxuICAgIH07XHJcbiAgICBSZXBlYXQucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLnNjb3BlID0gbnVsbDtcclxuICAgICAgICB0aGlzLml0ZW1zID0gbnVsbDtcclxuICAgICAgICB0aGlzLm1hdGNoZXJCaW5kaW5nID0gbnVsbDtcclxuICAgICAgICB0aGlzLnZpZXdTbG90LnJlbW92ZUFsbCh0cnVlLCB0cnVlKTtcclxuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUNvbGxlY3Rpb24oKTtcclxuICAgIH07XHJcbiAgICBSZXBlYXQucHJvdG90eXBlLl91bnN1YnNjcmliZUNvbGxlY3Rpb24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29sbGVjdGlvbk9ic2VydmVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29sbGVjdGlvbk9ic2VydmVyLnVuc3Vic2NyaWJlKHRoaXMuY2FsbENvbnRleHQsIHRoaXMpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbGxlY3Rpb25PYnNlcnZlciA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsbENvbnRleHQgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBSZXBlYXQucHJvdG90eXBlLml0ZW1zQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlQ29sbGVjdGlvbigpO1xyXG4gICAgICAgIGlmICghdGhpcy5zY29wZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBpdGVtcyA9IHRoaXMuaXRlbXM7XHJcbiAgICAgICAgdGhpcy5zdHJhdGVneSA9IHRoaXMuc3RyYXRlZ3lMb2NhdG9yLmdldFN0cmF0ZWd5KGl0ZW1zKTtcclxuICAgICAgICBpZiAoIXRoaXMuc3RyYXRlZ3kpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVmFsdWUgZm9yICdcIi5jb25jYXQodGhpcy5zb3VyY2VFeHByZXNzaW9uLCBcIicgaXMgbm9uLXJlcGVhdGFibGVcIikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuaXNPbmVUaW1lICYmICF0aGlzLl9vYnNlcnZlSW5uZXJDb2xsZWN0aW9uKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5fb2JzZXJ2ZUNvbGxlY3Rpb24oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pZ25vcmVNdXRhdGlvbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zdHJhdGVneS5pbnN0YW5jZUNoYW5nZWQodGhpcywgaXRlbXMpO1xyXG4gICAgICAgIHRoaXMub2JzZXJ2ZXJMb2NhdG9yLnRhc2tRdWV1ZS5xdWV1ZU1pY3JvVGFzayhmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIF90aGlzLmlnbm9yZU11dGF0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgUmVwZWF0LnByb3RvdHlwZS5fZ2V0SW5uZXJDb2xsZWN0aW9uID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBleHByZXNzaW9uID0gdW53cmFwRXhwcmVzc2lvbih0aGlzLnNvdXJjZUV4cHJlc3Npb24pO1xyXG4gICAgICAgIGlmICghZXhwcmVzc2lvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGV4cHJlc3Npb24uZXZhbHVhdGUodGhpcy5zY29wZSwgbnVsbCk7XHJcbiAgICB9O1xyXG4gICAgUmVwZWF0LnByb3RvdHlwZS5oYW5kbGVDb2xsZWN0aW9uTXV0YXRlZCA9IGZ1bmN0aW9uIChjb2xsZWN0aW9uLCBjaGFuZ2VzKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbGxlY3Rpb25PYnNlcnZlcikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmlnbm9yZU11dGF0aW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zdHJhdGVneS5pbnN0YW5jZU11dGF0ZWQodGhpcywgY29sbGVjdGlvbiwgY2hhbmdlcyk7XHJcbiAgICB9O1xyXG4gICAgUmVwZWF0LnByb3RvdHlwZS5oYW5kbGVJbm5lckNvbGxlY3Rpb25NdXRhdGVkID0gZnVuY3Rpb24gKGNvbGxlY3Rpb24sIGNoYW5nZXMpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIGlmICghdGhpcy5jb2xsZWN0aW9uT2JzZXJ2ZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5pZ25vcmVNdXRhdGlvbikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaWdub3JlTXV0YXRpb24gPSB0cnVlO1xyXG4gICAgICAgIHZhciBuZXdJdGVtcyA9IHRoaXMuc291cmNlRXhwcmVzc2lvbi5ldmFsdWF0ZSh0aGlzLnNjb3BlLCB0aGlzLmxvb2t1cEZ1bmN0aW9ucyk7XHJcbiAgICAgICAgdGhpcy5vYnNlcnZlckxvY2F0b3IudGFza1F1ZXVlLnF1ZXVlTWljcm9UYXNrKGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLmlnbm9yZU11dGF0aW9uID0gZmFsc2U7IH0pO1xyXG4gICAgICAgIGlmIChuZXdJdGVtcyA9PT0gdGhpcy5pdGVtcykge1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zQ2hhbmdlZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pdGVtcyA9IG5ld0l0ZW1zO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBSZXBlYXQucHJvdG90eXBlLl9vYnNlcnZlSW5uZXJDb2xsZWN0aW9uID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBpdGVtcyA9IHRoaXMuX2dldElubmVyQ29sbGVjdGlvbigpO1xyXG4gICAgICAgIHZhciBzdHJhdGVneSA9IHRoaXMuc3RyYXRlZ3lMb2NhdG9yLmdldFN0cmF0ZWd5KGl0ZW1zKTtcclxuICAgICAgICBpZiAoIXN0cmF0ZWd5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb2xsZWN0aW9uT2JzZXJ2ZXIgPSBzdHJhdGVneS5nZXRDb2xsZWN0aW9uT2JzZXJ2ZXIodGhpcy5vYnNlcnZlckxvY2F0b3IsIGl0ZW1zKTtcclxuICAgICAgICBpZiAoIXRoaXMuY29sbGVjdGlvbk9ic2VydmVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jYWxsQ29udGV4dCA9ICdoYW5kbGVJbm5lckNvbGxlY3Rpb25NdXRhdGVkJztcclxuICAgICAgICB0aGlzLmNvbGxlY3Rpb25PYnNlcnZlci5zdWJzY3JpYmUodGhpcy5jYWxsQ29udGV4dCwgdGhpcyk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9O1xyXG4gICAgUmVwZWF0LnByb3RvdHlwZS5fb2JzZXJ2ZUNvbGxlY3Rpb24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGl0ZW1zID0gdGhpcy5pdGVtcztcclxuICAgICAgICB0aGlzLmNvbGxlY3Rpb25PYnNlcnZlciA9IHRoaXMuc3RyYXRlZ3kuZ2V0Q29sbGVjdGlvbk9ic2VydmVyKHRoaXMub2JzZXJ2ZXJMb2NhdG9yLCBpdGVtcyk7XHJcbiAgICAgICAgaWYgKHRoaXMuY29sbGVjdGlvbk9ic2VydmVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsbENvbnRleHQgPSAnaGFuZGxlQ29sbGVjdGlvbk11dGF0ZWQnO1xyXG4gICAgICAgICAgICB0aGlzLmNvbGxlY3Rpb25PYnNlcnZlci5zdWJzY3JpYmUodGhpcy5jYWxsQ29udGV4dCwgdGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIFJlcGVhdC5wcm90b3R5cGUuX2NhcHR1cmVBbmRSZW1vdmVNYXRjaGVyQmluZGluZyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdmlld0ZhY3RvcnkgPSB0aGlzLnZpZXdGYWN0b3J5LnZpZXdGYWN0b3J5O1xyXG4gICAgICAgIGlmICh2aWV3RmFjdG9yeSkge1xyXG4gICAgICAgICAgICB2YXIgdGVtcGxhdGUgPSB2aWV3RmFjdG9yeS50ZW1wbGF0ZTtcclxuICAgICAgICAgICAgdmFyIGluc3RydWN0aW9ucyA9IHZpZXdGYWN0b3J5Lmluc3RydWN0aW9ucztcclxuICAgICAgICAgICAgaWYgKFJlcGVhdF8xLnVzZUlubmVyTWF0Y2hlcikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4dHJhY3RNYXRjaGVyQmluZGluZ0V4cHJlc3Npb24oaW5zdHJ1Y3Rpb25zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZ2V0Q2hpbGRyZW5Db3VudCh0ZW1wbGF0ZSkgPiAxKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciByZXBlYXRlZEVsZW1lbnQgPSBnZXRGaXJzdEVsZW1lbnRDaGlsZCh0ZW1wbGF0ZSk7XHJcbiAgICAgICAgICAgIGlmICghcmVwZWF0ZWRFbGVtZW50Lmhhc0F0dHJpYnV0ZSgnYXUtdGFyZ2V0LWlkJykpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHJlcGVhdGVkRWxlbWVudFRhcmdldElkID0gcmVwZWF0ZWRFbGVtZW50LmdldEF0dHJpYnV0ZSgnYXUtdGFyZ2V0LWlkJyk7XHJcbiAgICAgICAgICAgIHJldHVybiBleHRyYWN0TWF0Y2hlckJpbmRpbmdFeHByZXNzaW9uKGluc3RydWN0aW9ucywgcmVwZWF0ZWRFbGVtZW50VGFyZ2V0SWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfTtcclxuICAgIFJlcGVhdC5wcm90b3R5cGUudmlld0NvdW50ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy52aWV3U2xvdC5jaGlsZHJlbi5sZW5ndGg7IH07XHJcbiAgICBSZXBlYXQucHJvdG90eXBlLnZpZXdzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy52aWV3U2xvdC5jaGlsZHJlbjsgfTtcclxuICAgIFJlcGVhdC5wcm90b3R5cGUudmlldyA9IGZ1bmN0aW9uIChpbmRleCkgeyByZXR1cm4gdGhpcy52aWV3U2xvdC5jaGlsZHJlbltpbmRleF07IH07XHJcbiAgICBSZXBlYXQucHJvdG90eXBlLm1hdGNoZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIG1hdGNoZXJCaW5kaW5nID0gdGhpcy5tYXRjaGVyQmluZGluZztcclxuICAgICAgICByZXR1cm4gbWF0Y2hlckJpbmRpbmdcclxuICAgICAgICAgICAgPyBtYXRjaGVyQmluZGluZy5zb3VyY2VFeHByZXNzaW9uLmV2YWx1YXRlKHRoaXMuc2NvcGUsIG1hdGNoZXJCaW5kaW5nLmxvb2t1cEZ1bmN0aW9ucylcclxuICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgfTtcclxuICAgIFJlcGVhdC5wcm90b3R5cGUuYWRkVmlldyA9IGZ1bmN0aW9uIChiaW5kaW5nQ29udGV4dCwgb3ZlcnJpZGVDb250ZXh0KSB7XHJcbiAgICAgICAgdmFyIHZpZXcgPSB0aGlzLnZpZXdGYWN0b3J5LmNyZWF0ZSgpO1xyXG4gICAgICAgIHZpZXcuYmluZChiaW5kaW5nQ29udGV4dCwgb3ZlcnJpZGVDb250ZXh0KTtcclxuICAgICAgICB0aGlzLnZpZXdTbG90LmFkZCh2aWV3KTtcclxuICAgIH07XHJcbiAgICBSZXBlYXQucHJvdG90eXBlLmluc2VydFZpZXcgPSBmdW5jdGlvbiAoaW5kZXgsIGJpbmRpbmdDb250ZXh0LCBvdmVycmlkZUNvbnRleHQpIHtcclxuICAgICAgICB2YXIgdmlldyA9IHRoaXMudmlld0ZhY3RvcnkuY3JlYXRlKCk7XHJcbiAgICAgICAgdmlldy5iaW5kKGJpbmRpbmdDb250ZXh0LCBvdmVycmlkZUNvbnRleHQpO1xyXG4gICAgICAgIHRoaXMudmlld1Nsb3QuaW5zZXJ0KGluZGV4LCB2aWV3KTtcclxuICAgIH07XHJcbiAgICBSZXBlYXQucHJvdG90eXBlLm1vdmVWaWV3ID0gZnVuY3Rpb24gKHNvdXJjZUluZGV4LCB0YXJnZXRJbmRleCkge1xyXG4gICAgICAgIHRoaXMudmlld1Nsb3QubW92ZShzb3VyY2VJbmRleCwgdGFyZ2V0SW5kZXgpO1xyXG4gICAgfTtcclxuICAgIFJlcGVhdC5wcm90b3R5cGUucmVtb3ZlQWxsVmlld3MgPSBmdW5jdGlvbiAocmV0dXJuVG9DYWNoZSwgc2tpcEFuaW1hdGlvbikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdTbG90LnJlbW92ZUFsbChyZXR1cm5Ub0NhY2hlLCBza2lwQW5pbWF0aW9uKTtcclxuICAgIH07XHJcbiAgICBSZXBlYXQucHJvdG90eXBlLnJlbW92ZVZpZXdzID0gZnVuY3Rpb24gKHZpZXdzVG9SZW1vdmUsIHJldHVyblRvQ2FjaGUsIHNraXBBbmltYXRpb24pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52aWV3U2xvdC5yZW1vdmVNYW55KHZpZXdzVG9SZW1vdmUsIHJldHVyblRvQ2FjaGUsIHNraXBBbmltYXRpb24pO1xyXG4gICAgfTtcclxuICAgIFJlcGVhdC5wcm90b3R5cGUucmVtb3ZlVmlldyA9IGZ1bmN0aW9uIChpbmRleCwgcmV0dXJuVG9DYWNoZSwgc2tpcEFuaW1hdGlvbikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdTbG90LnJlbW92ZUF0KGluZGV4LCByZXR1cm5Ub0NhY2hlLCBza2lwQW5pbWF0aW9uKTtcclxuICAgIH07XHJcbiAgICBSZXBlYXQucHJvdG90eXBlLnVwZGF0ZUJpbmRpbmdzID0gZnVuY3Rpb24gKHZpZXcpIHtcclxuICAgICAgICB2YXIgJHZpZXcgPSB2aWV3O1xyXG4gICAgICAgIHZhciBqID0gJHZpZXcuYmluZGluZ3MubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlIChqLS0pIHtcclxuICAgICAgICAgICAgdXBkYXRlT25lVGltZUJpbmRpbmcoJHZpZXcuYmluZGluZ3Nbal0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBqID0gJHZpZXcuY29udHJvbGxlcnMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlIChqLS0pIHtcclxuICAgICAgICAgICAgdmFyIGsgPSAkdmlldy5jb250cm9sbGVyc1tqXS5ib3VuZFByb3BlcnRpZXMubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZSAoay0tKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYmluZGluZyA9ICR2aWV3LmNvbnRyb2xsZXJzW2pdLmJvdW5kUHJvcGVydGllc1trXS5iaW5kaW5nO1xyXG4gICAgICAgICAgICAgICAgdXBkYXRlT25lVGltZUJpbmRpbmcoYmluZGluZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdmFyIFJlcGVhdF8xO1xyXG4gICAgUmVwZWF0LnVzZUlubmVyTWF0Y2hlciA9IHRydWU7XHJcbiAgICBfX2RlY29yYXRlKFtcclxuICAgICAgICBiaW5kYWJsZVxyXG4gICAgXSwgUmVwZWF0LnByb3RvdHlwZSwgXCJpdGVtc1wiLCB2b2lkIDApO1xyXG4gICAgX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYmluZGFibGVcclxuICAgIF0sIFJlcGVhdC5wcm90b3R5cGUsIFwibG9jYWxcIiwgdm9pZCAwKTtcclxuICAgIF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGJpbmRhYmxlXHJcbiAgICBdLCBSZXBlYXQucHJvdG90eXBlLCBcImtleVwiLCB2b2lkIDApO1xyXG4gICAgX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYmluZGFibGVcclxuICAgIF0sIFJlcGVhdC5wcm90b3R5cGUsIFwidmFsdWVcIiwgdm9pZCAwKTtcclxuICAgIFJlcGVhdCA9IFJlcGVhdF8xID0gX19kZWNvcmF0ZShbXHJcbiAgICAgICAgY3VzdG9tQXR0cmlidXRlKCdyZXBlYXQnKSxcclxuICAgICAgICB0ZW1wbGF0ZUNvbnRyb2xsZXIsXHJcbiAgICAgICAgaW5qZWN0KEJvdW5kVmlld0ZhY3RvcnksIFRhcmdldEluc3RydWN0aW9uLCBWaWV3U2xvdCwgVmlld1Jlc291cmNlcywgT2JzZXJ2ZXJMb2NhdG9yLCBSZXBlYXRTdHJhdGVneUxvY2F0b3IpXHJcbiAgICBdLCBSZXBlYXQpO1xyXG4gICAgcmV0dXJuIFJlcGVhdDtcclxufShBYnN0cmFjdFJlcGVhdGVyKSk7XHJcbnZhciBleHRyYWN0TWF0Y2hlckJpbmRpbmdFeHByZXNzaW9uID0gZnVuY3Rpb24gKGluc3RydWN0aW9ucywgdGFyZ2V0ZWRFbGVtZW50SWQpIHtcclxuICAgIHZhciBpbnN0cnVjdGlvbklkcyA9IE9iamVjdC5rZXlzKGluc3RydWN0aW9ucyk7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluc3RydWN0aW9uSWRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGluc3RydWN0aW9uSWQgPSBpbnN0cnVjdGlvbklkc1tpXTtcclxuICAgICAgICBpZiAodGFyZ2V0ZWRFbGVtZW50SWQgIT09IHVuZGVmaW5lZCAmJiBpbnN0cnVjdGlvbklkICE9PSB0YXJnZXRlZEVsZW1lbnRJZCkge1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGV4cHJlc3Npb25zID0gaW5zdHJ1Y3Rpb25zW2luc3RydWN0aW9uSWRdLmV4cHJlc3Npb25zO1xyXG4gICAgICAgIGlmIChleHByZXNzaW9ucykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgZXhwcmVzc2lvbnMubGVuZ3RoOyBpaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXhwcmVzc2lvbnNbaWldLnRhcmdldFByb3BlcnR5ID09PSAnbWF0Y2hlcicpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2hlckJpbmRpbmdFeHByZXNzaW9uID0gZXhwcmVzc2lvbnNbaWldO1xyXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25zLnNwbGljZShpaSwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXJCaW5kaW5nRXhwcmVzc2lvbjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxudmFyIGdldENoaWxkcmVuQ291bnQgPSBmdW5jdGlvbiAoZWwpIHtcclxuICAgIHZhciBjaGlsZE5vZGVzID0gZWwuY2hpbGROb2RlcztcclxuICAgIHZhciBjb3VudCA9IDA7XHJcbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBjaGlsZE5vZGVzLmxlbmd0aDsgaWkgPiBpOyArK2kpIHtcclxuICAgICAgICBpZiAoY2hpbGROb2Rlc1tpXS5ub2RlVHlwZSA9PT0gMSkge1xyXG4gICAgICAgICAgICArK2NvdW50O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjb3VudDtcclxufTtcclxudmFyIGdldEZpcnN0RWxlbWVudENoaWxkID0gZnVuY3Rpb24gKGVsKSB7XHJcbiAgICB2YXIgZmlyc3RDaGlsZCA9IGVsLmZpcnN0Q2hpbGQ7XHJcbiAgICB3aGlsZSAoZmlyc3RDaGlsZCAhPT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChmaXJzdENoaWxkLm5vZGVUeXBlID09PSAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmaXJzdENoaWxkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaXJzdENoaWxkID0gZmlyc3RDaGlsZC5uZXh0U2libGluZztcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG59O1xuXG52YXIgYXVyZWxpYUhpZGVDbGFzc05hbWUgPSAnYXVyZWxpYS1oaWRlJztcclxudmFyIGF1cmVsaWFIaWRlQ2xhc3MgPSBcIi5cIi5jb25jYXQoYXVyZWxpYUhpZGVDbGFzc05hbWUsIFwiIHsgZGlzcGxheTpub25lICFpbXBvcnRhbnQ7IH1cIik7XHJcbmZ1bmN0aW9uIGluamVjdEF1cmVsaWFIaWRlU3R5bGVBdEhlYWQoKSB7XHJcbiAgICBET00uaW5qZWN0U3R5bGVzKGF1cmVsaWFIaWRlQ2xhc3MpO1xyXG59XHJcbmZ1bmN0aW9uIGluamVjdEF1cmVsaWFIaWRlU3R5bGVBdEJvdW5kYXJ5KGRvbUJvdW5kYXJ5KSB7XHJcbiAgICBpZiAoRkVBVFVSRS5zaGFkb3dET00gJiYgZG9tQm91bmRhcnkgJiYgIWRvbUJvdW5kYXJ5Lmhhc0F1cmVsaWFIaWRlU3R5bGUpIHtcclxuICAgICAgICBkb21Cb3VuZGFyeS5oYXNBdXJlbGlhSGlkZVN0eWxlID0gdHJ1ZTtcclxuICAgICAgICBET00uaW5qZWN0U3R5bGVzKGF1cmVsaWFIaWRlQ2xhc3MsIGRvbUJvdW5kYXJ5KTtcclxuICAgIH1cclxufVxuXG52YXIgU2hvdyA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBTaG93KGVsZW1lbnQsIGFuaW1hdG9yLCBkb21Cb3VuZGFyeSkge1xyXG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5hbmltYXRvciA9IGFuaW1hdG9yO1xyXG4gICAgICAgIHRoaXMuZG9tQm91bmRhcnkgPSBkb21Cb3VuZGFyeTtcclxuICAgIH1cclxuICAgIFNob3cuaW5qZWN0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBbRE9NLkVsZW1lbnQsIEFuaW1hdG9yLCBPcHRpb25hbC5vZihET00uYm91bmRhcnksIHRydWUpXTtcclxuICAgIH07XHJcbiAgICBTaG93LnByb3RvdHlwZS5jcmVhdGVkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGluamVjdEF1cmVsaWFIaWRlU3R5bGVBdEJvdW5kYXJ5KHRoaXMuZG9tQm91bmRhcnkpO1xyXG4gICAgfTtcclxuICAgIFNob3cucHJvdG90eXBlLnZhbHVlQ2hhbmdlZCA9IGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xyXG4gICAgICAgIHZhciBlbGVtZW50ID0gdGhpcy5lbGVtZW50O1xyXG4gICAgICAgIHZhciBhbmltYXRvciA9IHRoaXMuYW5pbWF0b3I7XHJcbiAgICAgICAgaWYgKG5ld1ZhbHVlKSB7XHJcbiAgICAgICAgICAgIGFuaW1hdG9yLnJlbW92ZUNsYXNzKGVsZW1lbnQsIGF1cmVsaWFIaWRlQ2xhc3NOYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGFuaW1hdG9yLmFkZENsYXNzKGVsZW1lbnQsIGF1cmVsaWFIaWRlQ2xhc3NOYW1lKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgU2hvdy5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChiaW5kaW5nQ29udGV4dCkge1xyXG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2VkKHRoaXMudmFsdWUpO1xyXG4gICAgfTtcclxuICAgIFNob3cgPSBfX2RlY29yYXRlKFtcclxuICAgICAgICBjdXN0b21BdHRyaWJ1dGUoJ3Nob3cnKVxyXG4gICAgXSwgU2hvdyk7XHJcbiAgICByZXR1cm4gU2hvdztcclxufSgpKTtcblxudmFyIEhpZGUgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gSGlkZShlbGVtZW50LCBhbmltYXRvciwgZG9tQm91bmRhcnkpIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xyXG4gICAgICAgIHRoaXMuYW5pbWF0b3IgPSBhbmltYXRvcjtcclxuICAgICAgICB0aGlzLmRvbUJvdW5kYXJ5ID0gZG9tQm91bmRhcnk7XHJcbiAgICB9XHJcbiAgICBIaWRlLmluamVjdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gW0RPTS5FbGVtZW50LCBBbmltYXRvciwgT3B0aW9uYWwub2YoRE9NLmJvdW5kYXJ5LCB0cnVlKV07XHJcbiAgICB9O1xyXG4gICAgSGlkZS5wcm90b3R5cGUuY3JlYXRlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpbmplY3RBdXJlbGlhSGlkZVN0eWxlQXRCb3VuZGFyeSh0aGlzLmRvbUJvdW5kYXJ5KTtcclxuICAgIH07XHJcbiAgICBIaWRlLnByb3RvdHlwZS52YWx1ZUNoYW5nZWQgPSBmdW5jdGlvbiAobmV3VmFsdWUpIHtcclxuICAgICAgICBpZiAobmV3VmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hbmltYXRvci5hZGRDbGFzcyh0aGlzLmVsZW1lbnQsIGF1cmVsaWFIaWRlQ2xhc3NOYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYW5pbWF0b3IucmVtb3ZlQ2xhc3ModGhpcy5lbGVtZW50LCBhdXJlbGlhSGlkZUNsYXNzTmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIEhpZGUucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoYmluZGluZ0NvbnRleHQpIHtcclxuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlZCh0aGlzLnZhbHVlKTtcclxuICAgIH07XHJcbiAgICBIaWRlLnByb3RvdHlwZS52YWx1ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcclxuICAgIH07XHJcbiAgICBIaWRlID0gX19kZWNvcmF0ZShbXHJcbiAgICAgICAgY3VzdG9tQXR0cmlidXRlKCdoaWRlJylcclxuICAgIF0sIEhpZGUpO1xyXG4gICAgcmV0dXJuIEhpZGU7XHJcbn0oKSk7XG5cbnZhciBIVE1MU2FuaXRpemVyID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEhUTUxTYW5pdGl6ZXIoKSB7XHJcbiAgICB9XHJcbiAgICBIVE1MU2FuaXRpemVyLnByb3RvdHlwZS5zYW5pdGl6ZSA9IGZ1bmN0aW9uIChpbnB1dCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRvIHByb3RlY3QgdGhlIGFwcGxpY2F0aW9uIGFnYWluc3QgYSB3aWRlIHZhcmlldHkgb2Ygc29waGlzdGljYXRlZCBYU1MgYXR0YWNrcy5cXG5QbGVhc2Ugc2VlIGh0dHBzOi8vYXVyZWxpYS5pby9kb2NzL2JpbmRpbmcvYmFzaWNzI2VsZW1lbnQtY29udGVudCBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byB1c2UgYSBzZWN1cmUgc29sdXRpb24gbGlrZSBET01QdXJpZnkgb3Igc2FuaXRpemUtaHRtbC5cIik7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIEhUTUxTYW5pdGl6ZXI7XHJcbn0oKSk7XG5cbnZhciBTYW5pdGl6ZUhUTUxWYWx1ZUNvbnZlcnRlciA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBTYW5pdGl6ZUhUTUxWYWx1ZUNvbnZlcnRlcihzYW5pdGl6ZXIpIHtcclxuICAgICAgICB0aGlzLnNhbml0aXplciA9IHNhbml0aXplcjtcclxuICAgIH1cclxuICAgIFNhbml0aXplSFRNTFZhbHVlQ29udmVydGVyLnByb3RvdHlwZS50b1ZpZXcgPSBmdW5jdGlvbiAodW50cnVzdGVkTWFya3VwKSB7XHJcbiAgICAgICAgaWYgKHVudHJ1c3RlZE1hcmt1cCA9PT0gbnVsbCB8fCB1bnRydXN0ZWRNYXJrdXAgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLnNhbml0aXplKHVudHJ1c3RlZE1hcmt1cCk7XHJcbiAgICB9O1xyXG4gICAgU2FuaXRpemVIVE1MVmFsdWVDb252ZXJ0ZXIgPSBfX2RlY29yYXRlKFtcclxuICAgICAgICB2YWx1ZUNvbnZlcnRlcignc2FuaXRpemVIVE1MJyksXHJcbiAgICAgICAgaW5qZWN0KEhUTUxTYW5pdGl6ZXIpXHJcbiAgICBdLCBTYW5pdGl6ZUhUTUxWYWx1ZUNvbnZlcnRlcik7XHJcbiAgICByZXR1cm4gU2FuaXRpemVIVE1MVmFsdWVDb252ZXJ0ZXI7XHJcbn0oKSk7XG5cbnZhciBSZXBsYWNlYWJsZSA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBSZXBsYWNlYWJsZSh2aWV3RmFjdG9yeSwgdmlld1Nsb3QpIHtcclxuICAgICAgICB0aGlzLnZpZXdGYWN0b3J5ID0gdmlld0ZhY3Rvcnk7XHJcbiAgICAgICAgdGhpcy52aWV3U2xvdCA9IHZpZXdTbG90O1xyXG4gICAgICAgIHRoaXMudmlldyA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBSZXBsYWNlYWJsZS5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChiaW5kaW5nQ29udGV4dCwgb3ZlcnJpZGVDb250ZXh0KSB7XHJcbiAgICAgICAgaWYgKHRoaXMudmlldyA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLnZpZXcgPSB0aGlzLnZpZXdGYWN0b3J5LmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdTbG90LmFkZCh0aGlzLnZpZXcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnZpZXcuYmluZChiaW5kaW5nQ29udGV4dCwgb3ZlcnJpZGVDb250ZXh0KTtcclxuICAgIH07XHJcbiAgICBSZXBsYWNlYWJsZS5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMudmlldy51bmJpbmQoKTtcclxuICAgIH07XHJcbiAgICBSZXBsYWNlYWJsZSA9IF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGN1c3RvbUF0dHJpYnV0ZSgncmVwbGFjZWFibGUnKSxcclxuICAgICAgICB0ZW1wbGF0ZUNvbnRyb2xsZXIsXHJcbiAgICAgICAgaW5qZWN0KEJvdW5kVmlld0ZhY3RvcnksIFZpZXdTbG90KVxyXG4gICAgXSwgUmVwbGFjZWFibGUpO1xyXG4gICAgcmV0dXJuIFJlcGxhY2VhYmxlO1xyXG59KCkpO1xuXG52YXIgRm9jdXMgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gRm9jdXMoZWxlbWVudCwgdGFza1F1ZXVlKSB7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcclxuICAgICAgICB0aGlzLnRhc2tRdWV1ZSA9IHRhc2tRdWV1ZTtcclxuICAgICAgICB0aGlzLmlzQXR0YWNoZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm5lZWRzQXBwbHkgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIEZvY3VzLmluamVjdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gW0RPTS5FbGVtZW50LCBUYXNrUXVldWVdO1xyXG4gICAgfTtcclxuICAgIEZvY3VzLnByb3RvdHlwZS52YWx1ZUNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNBdHRhY2hlZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9hcHBseSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5uZWVkc0FwcGx5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgRm9jdXMucHJvdG90eXBlLl9hcHBseSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFza1F1ZXVlLnF1ZXVlTWljcm9UYXNrKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChfdGhpcy52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYmx1cigpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBGb2N1cy5wcm90b3R5cGUuYXR0YWNoZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5pc0F0dGFjaGVkID0gdHJ1ZTtcclxuICAgICAgICBpZiAodGhpcy5uZWVkc0FwcGx5KSB7XHJcbiAgICAgICAgICAgIHRoaXMubmVlZHNBcHBseSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLl9hcHBseSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0aGlzKTtcclxuICAgICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIHRoaXMpO1xyXG4gICAgfTtcclxuICAgIEZvY3VzLnByb3RvdHlwZS5kZXRhY2hlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmlzQXR0YWNoZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0aGlzKTtcclxuICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignYmx1cicsIHRoaXMpO1xyXG4gICAgfTtcclxuICAgIEZvY3VzLnByb3RvdHlwZS5oYW5kbGVFdmVudCA9IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgaWYgKGUudHlwZSA9PT0gJ2ZvY3VzJykge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoRE9NLmFjdGl2ZUVsZW1lbnQgIT09IHRoaXMuZWxlbWVudCkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIEZvY3VzID0gX19kZWNvcmF0ZShbXHJcbiAgICAgICAgY3VzdG9tQXR0cmlidXRlKCdmb2N1cycsIGJpbmRpbmdNb2RlLnR3b1dheSlcclxuICAgIF0sIEZvY3VzKTtcclxuICAgIHJldHVybiBGb2N1cztcclxufSgpKTtcblxudmFyIGNzc1VybE1hdGNoZXIgPSAvdXJsXFwoKD8hWydcIl1kYXRhKShbXildKylcXCkvZ2k7XHJcbmZ1bmN0aW9uIGZpeHVwQ1NTVXJscyhhZGRyZXNzLCBjc3MpIHtcclxuICAgIGlmICh0eXBlb2YgY3NzICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCBsb2FkaW5nIHJlcXVpcmVkIENTUyBmaWxlOiBcIi5jb25jYXQoYWRkcmVzcykpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNzcy5yZXBsYWNlKGNzc1VybE1hdGNoZXIsIGZ1bmN0aW9uIChtYXRjaCwgcDEpIHtcclxuICAgICAgICB2YXIgcXVvdGUgPSBwMS5jaGFyQXQoMCk7XHJcbiAgICAgICAgaWYgKHF1b3RlID09PSAnXFwnJyB8fCBxdW90ZSA9PT0gJ1wiJykge1xyXG4gICAgICAgICAgICBwMSA9IHAxLnN1YnN0cigxLCBwMS5sZW5ndGggLSAyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICd1cmwoXFwnJyArIHJlbGF0aXZlVG9GaWxlKHAxLCBhZGRyZXNzKSArICdcXCcpJztcclxuICAgIH0pO1xyXG59XHJcbnZhciBDU1NSZXNvdXJjZSA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBDU1NSZXNvdXJjZShhZGRyZXNzKSB7XHJcbiAgICAgICAgdGhpcy5hZGRyZXNzID0gYWRkcmVzcztcclxuICAgICAgICB0aGlzLl9zY29wZWQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX2dsb2JhbCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX2FscmVhZHlHbG9iYWxseUluamVjdGVkID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBDU1NSZXNvdXJjZS5wcm90b3R5cGUuaW5pdGlhbGl6ZSA9IGZ1bmN0aW9uIChjb250YWluZXIsIFRhcmdldCkge1xyXG4gICAgICAgIHRoaXMuX3Njb3BlZCA9IG5ldyBUYXJnZXQodGhpcyk7XHJcbiAgICB9O1xyXG4gICAgQ1NTUmVzb3VyY2UucHJvdG90eXBlLnJlZ2lzdGVyID0gZnVuY3Rpb24gKHJlZ2lzdHJ5LCBuYW1lKSB7XHJcbiAgICAgICAgaWYgKG5hbWUgPT09ICdzY29wZWQnKSB7XHJcbiAgICAgICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyVmlld0VuZ2luZUhvb2tzKHRoaXMuX3Njb3BlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9nbG9iYWwgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBDU1NSZXNvdXJjZS5wcm90b3R5cGUubG9hZCA9IGZ1bmN0aW9uIChjb250YWluZXIpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHJldHVybiBjb250YWluZXIuZ2V0KExvYWRlcilcclxuICAgICAgICAgICAgLmxvYWRUZXh0KHRoaXMuYWRkcmVzcylcclxuICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uICgpIHsgcmV0dXJuIG51bGw7IH0pXHJcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICh0ZXh0KSB7XHJcbiAgICAgICAgICAgIHRleHQgPSBmaXh1cENTU1VybHMoX3RoaXMuYWRkcmVzcywgdGV4dCk7XHJcbiAgICAgICAgICAgIF90aGlzLl9zY29wZWQuY3NzID0gdGV4dDtcclxuICAgICAgICAgICAgaWYgKF90aGlzLl9nbG9iYWwpIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLl9hbHJlYWR5R2xvYmFsbHlJbmplY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBET00uaW5qZWN0U3R5bGVzKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBfdGhpcztcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gQ1NTUmVzb3VyY2U7XHJcbn0oKSk7XHJcbnZhciBDU1NWaWV3RW5naW5lSG9va3MgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gQ1NTVmlld0VuZ2luZUhvb2tzKG93bmVyKSB7XHJcbiAgICAgICAgdGhpcy5vd25lciA9IG93bmVyO1xyXG4gICAgICAgIHRoaXMuY3NzID0gbnVsbDtcclxuICAgIH1cclxuICAgIENTU1ZpZXdFbmdpbmVIb29rcy5wcm90b3R5cGUuYmVmb3JlQ29tcGlsZSA9IGZ1bmN0aW9uIChjb250ZW50LCByZXNvdXJjZXMsIGluc3RydWN0aW9uKSB7XHJcbiAgICAgICAgaWYgKGluc3RydWN0aW9uLnRhcmdldFNoYWRvd0RPTSkge1xyXG4gICAgICAgICAgICBET00uaW5qZWN0U3R5bGVzKHRoaXMuY3NzLCBjb250ZW50LCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoRkVBVFVSRS5zY29wZWRDU1MpIHtcclxuICAgICAgICAgICAgdmFyIHN0eWxlTm9kZSA9IERPTS5pbmplY3RTdHlsZXModGhpcy5jc3MsIGNvbnRlbnQsIHRydWUpO1xyXG4gICAgICAgICAgICBzdHlsZU5vZGUuc2V0QXR0cmlidXRlKCdzY29wZWQnLCAnc2NvcGVkJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX2dsb2JhbCAmJiAhdGhpcy5vd25lci5fYWxyZWFkeUdsb2JhbGx5SW5qZWN0ZWQpIHtcclxuICAgICAgICAgICAgRE9NLmluamVjdFN0eWxlcyh0aGlzLmNzcyk7XHJcbiAgICAgICAgICAgIHRoaXMub3duZXIuX2FscmVhZHlHbG9iYWxseUluamVjdGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIENTU1ZpZXdFbmdpbmVIb29rcztcclxufSgpKTtcclxuZnVuY3Rpb24gX2NyZWF0ZUNTU1Jlc291cmNlKGFkZHJlc3MpIHtcclxuICAgIHZhciBWaWV3Q1NTID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcclxuICAgICAgICBfX2V4dGVuZHMoVmlld0NTUywgX3N1cGVyKTtcclxuICAgICAgICBmdW5jdGlvbiBWaWV3Q1NTKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFZpZXdDU1MgPSBfX2RlY29yYXRlKFtcclxuICAgICAgICAgICAgcmVzb3VyY2UobmV3IENTU1Jlc291cmNlKGFkZHJlc3MpKVxyXG4gICAgICAgIF0sIFZpZXdDU1MpO1xyXG4gICAgICAgIHJldHVybiBWaWV3Q1NTO1xyXG4gICAgfShDU1NWaWV3RW5naW5lSG9va3MpKTtcclxuICAgIHJldHVybiBWaWV3Q1NTO1xyXG59XG5cbnZhciBBdHRyQmluZGluZ0JlaGF2aW9yID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEF0dHJCaW5kaW5nQmVoYXZpb3IoKSB7XHJcbiAgICB9XHJcbiAgICBBdHRyQmluZGluZ0JlaGF2aW9yLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGJpbmRpbmcsIHNvdXJjZSkge1xyXG4gICAgICAgIGJpbmRpbmcudGFyZ2V0T2JzZXJ2ZXIgPSBuZXcgRGF0YUF0dHJpYnV0ZU9ic2VydmVyKGJpbmRpbmcudGFyZ2V0LCBiaW5kaW5nLnRhcmdldFByb3BlcnR5KTtcclxuICAgIH07XHJcbiAgICBBdHRyQmluZGluZ0JlaGF2aW9yLnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbiAoYmluZGluZywgc291cmNlKSB7XHJcbiAgICB9O1xyXG4gICAgQXR0ckJpbmRpbmdCZWhhdmlvciA9IF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGJpbmRpbmdCZWhhdmlvcignYXR0cicpXHJcbiAgICBdLCBBdHRyQmluZGluZ0JlaGF2aW9yKTtcclxuICAgIHJldHVybiBBdHRyQmluZGluZ0JlaGF2aW9yO1xyXG59KCkpO1xuXG52YXIgbW9kZUJpbmRpbmdCZWhhdmlvciA9IHtcclxuICAgIGJpbmQ6IGZ1bmN0aW9uIChiaW5kaW5nLCBzb3VyY2UsIGxvb2t1cEZ1bmN0aW9ucykge1xyXG4gICAgICAgIGJpbmRpbmcub3JpZ2luYWxNb2RlID0gYmluZGluZy5tb2RlO1xyXG4gICAgICAgIGJpbmRpbmcubW9kZSA9IHRoaXMubW9kZTtcclxuICAgIH0sXHJcbiAgICB1bmJpbmQ6IGZ1bmN0aW9uIChiaW5kaW5nLCBzb3VyY2UpIHtcclxuICAgICAgICBiaW5kaW5nLm1vZGUgPSBiaW5kaW5nLm9yaWdpbmFsTW9kZTtcclxuICAgICAgICBiaW5kaW5nLm9yaWdpbmFsTW9kZSA9IG51bGw7XHJcbiAgICB9XHJcbn07XHJcbnZhciBPbmVUaW1lQmluZGluZ0JlaGF2aW9yID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIE9uZVRpbWVCaW5kaW5nQmVoYXZpb3IoKSB7XHJcbiAgICAgICAgdGhpcy5tb2RlID0gYmluZGluZ01vZGUub25lVGltZTtcclxuICAgIH1cclxuICAgIE9uZVRpbWVCaW5kaW5nQmVoYXZpb3IgPSBfX2RlY29yYXRlKFtcclxuICAgICAgICBtaXhpbihtb2RlQmluZGluZ0JlaGF2aW9yKSxcclxuICAgICAgICBiaW5kaW5nQmVoYXZpb3IoJ29uZVRpbWUnKVxyXG4gICAgXSwgT25lVGltZUJpbmRpbmdCZWhhdmlvcik7XHJcbiAgICByZXR1cm4gT25lVGltZUJpbmRpbmdCZWhhdmlvcjtcclxufSgpKTtcclxudmFyIE9uZVdheUJpbmRpbmdCZWhhdmlvciA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBPbmVXYXlCaW5kaW5nQmVoYXZpb3IoKSB7XHJcbiAgICAgICAgdGhpcy5tb2RlID0gYmluZGluZ01vZGUudG9WaWV3O1xyXG4gICAgfVxyXG4gICAgT25lV2F5QmluZGluZ0JlaGF2aW9yID0gX19kZWNvcmF0ZShbXHJcbiAgICAgICAgbWl4aW4obW9kZUJpbmRpbmdCZWhhdmlvciksXHJcbiAgICAgICAgYmluZGluZ0JlaGF2aW9yKCdvbmVXYXknKVxyXG4gICAgXSwgT25lV2F5QmluZGluZ0JlaGF2aW9yKTtcclxuICAgIHJldHVybiBPbmVXYXlCaW5kaW5nQmVoYXZpb3I7XHJcbn0oKSk7XHJcbnZhciBUb1ZpZXdCaW5kaW5nQmVoYXZpb3IgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gVG9WaWV3QmluZGluZ0JlaGF2aW9yKCkge1xyXG4gICAgICAgIHRoaXMubW9kZSA9IGJpbmRpbmdNb2RlLnRvVmlldztcclxuICAgIH1cclxuICAgIFRvVmlld0JpbmRpbmdCZWhhdmlvciA9IF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIG1peGluKG1vZGVCaW5kaW5nQmVoYXZpb3IpLFxyXG4gICAgICAgIGJpbmRpbmdCZWhhdmlvcigndG9WaWV3JylcclxuICAgIF0sIFRvVmlld0JpbmRpbmdCZWhhdmlvcik7XHJcbiAgICByZXR1cm4gVG9WaWV3QmluZGluZ0JlaGF2aW9yO1xyXG59KCkpO1xyXG52YXIgRnJvbVZpZXdCaW5kaW5nQmVoYXZpb3IgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gRnJvbVZpZXdCaW5kaW5nQmVoYXZpb3IoKSB7XHJcbiAgICAgICAgdGhpcy5tb2RlID0gYmluZGluZ01vZGUuZnJvbVZpZXc7XHJcbiAgICB9XHJcbiAgICBGcm9tVmlld0JpbmRpbmdCZWhhdmlvciA9IF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIG1peGluKG1vZGVCaW5kaW5nQmVoYXZpb3IpLFxyXG4gICAgICAgIGJpbmRpbmdCZWhhdmlvcignZnJvbVZpZXcnKVxyXG4gICAgXSwgRnJvbVZpZXdCaW5kaW5nQmVoYXZpb3IpO1xyXG4gICAgcmV0dXJuIEZyb21WaWV3QmluZGluZ0JlaGF2aW9yO1xyXG59KCkpO1xyXG52YXIgVHdvV2F5QmluZGluZ0JlaGF2aW9yID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIFR3b1dheUJpbmRpbmdCZWhhdmlvcigpIHtcclxuICAgICAgICB0aGlzLm1vZGUgPSBiaW5kaW5nTW9kZS50d29XYXk7XHJcbiAgICB9XHJcbiAgICBUd29XYXlCaW5kaW5nQmVoYXZpb3IgPSBfX2RlY29yYXRlKFtcclxuICAgICAgICBtaXhpbihtb2RlQmluZGluZ0JlaGF2aW9yKSxcclxuICAgICAgICBiaW5kaW5nQmVoYXZpb3IoJ3R3b1dheScpXHJcbiAgICBdLCBUd29XYXlCaW5kaW5nQmVoYXZpb3IpO1xyXG4gICAgcmV0dXJuIFR3b1dheUJpbmRpbmdCZWhhdmlvcjtcclxufSgpKTtcblxuZnVuY3Rpb24gdGhyb3R0bGUobmV3VmFsdWUpIHtcclxuICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICB2YXIgc3RhdGUgPSB0aGlzLnRocm90dGxlU3RhdGU7XHJcbiAgICB2YXIgZWxhcHNlZCA9ICtuZXcgRGF0ZSgpIC0gc3RhdGUubGFzdDtcclxuICAgIGlmIChlbGFwc2VkID49IHN0YXRlLmRlbGF5KSB7XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHN0YXRlLnRpbWVvdXRJZCk7XHJcbiAgICAgICAgc3RhdGUudGltZW91dElkID0gbnVsbDtcclxuICAgICAgICBzdGF0ZS5sYXN0ID0gK25ldyBEYXRlKCk7XHJcbiAgICAgICAgdGhpcy50aHJvdHRsZWRNZXRob2QobmV3VmFsdWUpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHN0YXRlLm5ld1ZhbHVlID0gbmV3VmFsdWU7XHJcbiAgICBpZiAoc3RhdGUudGltZW91dElkID09PSBudWxsKSB7XHJcbiAgICAgICAgc3RhdGUudGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHN0YXRlLnRpbWVvdXRJZCA9IG51bGw7XHJcbiAgICAgICAgICAgIHN0YXRlLmxhc3QgPSArbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgX3RoaXMudGhyb3R0bGVkTWV0aG9kKHN0YXRlLm5ld1ZhbHVlKTtcclxuICAgICAgICB9LCBzdGF0ZS5kZWxheSAtIGVsYXBzZWQpO1xyXG4gICAgfVxyXG59XHJcbnZhciBUaHJvdHRsZUJpbmRpbmdCZWhhdmlvciA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBUaHJvdHRsZUJpbmRpbmdCZWhhdmlvcigpIHtcclxuICAgIH1cclxuICAgIFRocm90dGxlQmluZGluZ0JlaGF2aW9yLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGJpbmRpbmcsIHNvdXJjZSwgZGVsYXkpIHtcclxuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDIwMDsgfVxyXG4gICAgICAgIHZhciBtZXRob2RUb1Rocm90dGxlID0gJ3VwZGF0ZVRhcmdldCc7XHJcbiAgICAgICAgaWYgKGJpbmRpbmcuY2FsbFNvdXJjZSkge1xyXG4gICAgICAgICAgICBtZXRob2RUb1Rocm90dGxlID0gJ2NhbGxTb3VyY2UnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChiaW5kaW5nLnVwZGF0ZVNvdXJjZSAmJiBiaW5kaW5nLm1vZGUgPT09IGJpbmRpbmdNb2RlLnR3b1dheSkge1xyXG4gICAgICAgICAgICBtZXRob2RUb1Rocm90dGxlID0gJ3VwZGF0ZVNvdXJjZSc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJpbmRpbmcudGhyb3R0bGVkTWV0aG9kID0gYmluZGluZ1ttZXRob2RUb1Rocm90dGxlXTtcclxuICAgICAgICBiaW5kaW5nLnRocm90dGxlZE1ldGhvZC5vcmlnaW5hbE5hbWUgPSBtZXRob2RUb1Rocm90dGxlO1xyXG4gICAgICAgIGJpbmRpbmdbbWV0aG9kVG9UaHJvdHRsZV0gPSB0aHJvdHRsZTtcclxuICAgICAgICBiaW5kaW5nLnRocm90dGxlU3RhdGUgPSB7XHJcbiAgICAgICAgICAgIGRlbGF5OiBkZWxheSxcclxuICAgICAgICAgICAgbGFzdDogMCxcclxuICAgICAgICAgICAgdGltZW91dElkOiBudWxsXHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcbiAgICBUaHJvdHRsZUJpbmRpbmdCZWhhdmlvci5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24gKGJpbmRpbmcsIHNvdXJjZSkge1xyXG4gICAgICAgIHZhciBtZXRob2RUb1Jlc3RvcmUgPSBiaW5kaW5nLnRocm90dGxlZE1ldGhvZC5vcmlnaW5hbE5hbWU7XHJcbiAgICAgICAgYmluZGluZ1ttZXRob2RUb1Jlc3RvcmVdID0gYmluZGluZy50aHJvdHRsZWRNZXRob2Q7XHJcbiAgICAgICAgYmluZGluZy50aHJvdHRsZWRNZXRob2QgPSBudWxsO1xyXG4gICAgICAgIGNsZWFyVGltZW91dChiaW5kaW5nLnRocm90dGxlU3RhdGUudGltZW91dElkKTtcclxuICAgICAgICBiaW5kaW5nLnRocm90dGxlU3RhdGUgPSBudWxsO1xyXG4gICAgfTtcclxuICAgIFRocm90dGxlQmluZGluZ0JlaGF2aW9yID0gX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYmluZGluZ0JlaGF2aW9yKCd0aHJvdHRsZScpXHJcbiAgICBdLCBUaHJvdHRsZUJpbmRpbmdCZWhhdmlvcik7XHJcbiAgICByZXR1cm4gVGhyb3R0bGVCaW5kaW5nQmVoYXZpb3I7XHJcbn0oKSk7XG5cbnZhciB1bnNldCA9IHt9O1xyXG5mdW5jdGlvbiBkZWJvdW5jZUNhbGxTb3VyY2UoZXZlbnQpIHtcclxuICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICB2YXIgc3RhdGUgPSB0aGlzLmRlYm91bmNlU3RhdGU7XHJcbiAgICBjbGVhclRpbWVvdXQoc3RhdGUudGltZW91dElkKTtcclxuICAgIHN0YXRlLnRpbWVvdXRJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMuZGVib3VuY2VkTWV0aG9kKGV2ZW50KTsgfSwgc3RhdGUuZGVsYXkpO1xyXG59XHJcbmZ1bmN0aW9uIGRlYm91bmNlQ2FsbChjb250ZXh0LCBuZXdWYWx1ZSwgb2xkVmFsdWUpIHtcclxuICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICB2YXIgc3RhdGUgPSB0aGlzLmRlYm91bmNlU3RhdGU7XHJcbiAgICBjbGVhclRpbWVvdXQoc3RhdGUudGltZW91dElkKTtcclxuICAgIGlmIChjb250ZXh0ICE9PSBzdGF0ZS5jYWxsQ29udGV4dFRvRGVib3VuY2UpIHtcclxuICAgICAgICBzdGF0ZS5vbGRWYWx1ZSA9IHVuc2V0O1xyXG4gICAgICAgIHRoaXMuZGVib3VuY2VkTWV0aG9kKGNvbnRleHQsIG5ld1ZhbHVlLCBvbGRWYWx1ZSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHN0YXRlLm9sZFZhbHVlID09PSB1bnNldCkge1xyXG4gICAgICAgIHN0YXRlLm9sZFZhbHVlID0gb2xkVmFsdWU7XHJcbiAgICB9XHJcbiAgICBzdGF0ZS50aW1lb3V0SWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgX29sZFZhbHVlID0gc3RhdGUub2xkVmFsdWU7XHJcbiAgICAgICAgc3RhdGUub2xkVmFsdWUgPSB1bnNldDtcclxuICAgICAgICBfdGhpcy5kZWJvdW5jZWRNZXRob2QoY29udGV4dCwgbmV3VmFsdWUsIF9vbGRWYWx1ZSk7XHJcbiAgICB9LCBzdGF0ZS5kZWxheSk7XHJcbn1cclxudmFyIERlYm91bmNlQmluZGluZ0JlaGF2aW9yID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIERlYm91bmNlQmluZGluZ0JlaGF2aW9yKCkge1xyXG4gICAgfVxyXG4gICAgRGVib3VuY2VCaW5kaW5nQmVoYXZpb3IucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoYmluZGluZywgc291cmNlLCBkZWxheSkge1xyXG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMjAwOyB9XHJcbiAgICAgICAgdmFyIGlzQ2FsbFNvdXJjZSA9IGJpbmRpbmcuY2FsbFNvdXJjZSAhPT0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHZhciBtZXRob2RUb0RlYm91bmNlID0gaXNDYWxsU291cmNlID8gJ2NhbGxTb3VyY2UnIDogJ2NhbGwnO1xyXG4gICAgICAgIHZhciBkZWJvdW5jZXIgPSBpc0NhbGxTb3VyY2UgPyBkZWJvdW5jZUNhbGxTb3VyY2UgOiBkZWJvdW5jZUNhbGw7XHJcbiAgICAgICAgdmFyIG1vZGUgPSBiaW5kaW5nLm1vZGU7XHJcbiAgICAgICAgdmFyIGNhbGxDb250ZXh0VG9EZWJvdW5jZSA9IG1vZGUgPT09IGJpbmRpbmdNb2RlLnR3b1dheSB8fCBtb2RlID09PSBiaW5kaW5nTW9kZS5mcm9tVmlldyA/IHRhcmdldENvbnRleHQgOiBzb3VyY2VDb250ZXh0O1xyXG4gICAgICAgIGJpbmRpbmcuZGVib3VuY2VkTWV0aG9kID0gYmluZGluZ1ttZXRob2RUb0RlYm91bmNlXTtcclxuICAgICAgICBiaW5kaW5nLmRlYm91bmNlZE1ldGhvZC5vcmlnaW5hbE5hbWUgPSBtZXRob2RUb0RlYm91bmNlO1xyXG4gICAgICAgIGJpbmRpbmdbbWV0aG9kVG9EZWJvdW5jZV0gPSBkZWJvdW5jZXI7XHJcbiAgICAgICAgYmluZGluZy5kZWJvdW5jZVN0YXRlID0ge1xyXG4gICAgICAgICAgICBjYWxsQ29udGV4dFRvRGVib3VuY2U6IGNhbGxDb250ZXh0VG9EZWJvdW5jZSxcclxuICAgICAgICAgICAgZGVsYXk6IGRlbGF5LFxyXG4gICAgICAgICAgICB0aW1lb3V0SWQ6IDAsXHJcbiAgICAgICAgICAgIG9sZFZhbHVlOiB1bnNldFxyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG4gICAgRGVib3VuY2VCaW5kaW5nQmVoYXZpb3IucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uIChiaW5kaW5nLCBzb3VyY2UpIHtcclxuICAgICAgICB2YXIgbWV0aG9kVG9SZXN0b3JlID0gYmluZGluZy5kZWJvdW5jZWRNZXRob2Qub3JpZ2luYWxOYW1lO1xyXG4gICAgICAgIGJpbmRpbmdbbWV0aG9kVG9SZXN0b3JlXSA9IGJpbmRpbmcuZGVib3VuY2VkTWV0aG9kO1xyXG4gICAgICAgIGJpbmRpbmcuZGVib3VuY2VkTWV0aG9kID0gbnVsbDtcclxuICAgICAgICBjbGVhclRpbWVvdXQoYmluZGluZy5kZWJvdW5jZVN0YXRlLnRpbWVvdXRJZCk7XHJcbiAgICAgICAgYmluZGluZy5kZWJvdW5jZVN0YXRlID0gbnVsbDtcclxuICAgIH07XHJcbiAgICBEZWJvdW5jZUJpbmRpbmdCZWhhdmlvciA9IF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGJpbmRpbmdCZWhhdmlvcignZGVib3VuY2UnKVxyXG4gICAgXSwgRGVib3VuY2VCaW5kaW5nQmVoYXZpb3IpO1xyXG4gICAgcmV0dXJuIERlYm91bmNlQmluZGluZ0JlaGF2aW9yO1xyXG59KCkpO1xuXG5mdW5jdGlvbiBmaW5kT3JpZ2luYWxFdmVudFRhcmdldChldmVudCkge1xyXG4gICAgcmV0dXJuIChldmVudC5wYXRoICYmIGV2ZW50LnBhdGhbMF0pIHx8IChldmVudC5kZWVwUGF0aCAmJiBldmVudC5kZWVwUGF0aFswXSkgfHwgZXZlbnQudGFyZ2V0O1xyXG59XHJcbmZ1bmN0aW9uIGhhbmRsZVNlbGZFdmVudChldmVudCkge1xyXG4gICAgdmFyIHRhcmdldCA9IGZpbmRPcmlnaW5hbEV2ZW50VGFyZ2V0KGV2ZW50KTtcclxuICAgIGlmICh0aGlzLnRhcmdldCAhPT0gdGFyZ2V0KSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZWxmRXZlbnRDYWxsU291cmNlKGV2ZW50KTtcclxufVxyXG52YXIgU2VsZkJpbmRpbmdCZWhhdmlvciA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBTZWxmQmluZGluZ0JlaGF2aW9yKCkge1xyXG4gICAgfVxyXG4gICAgU2VsZkJpbmRpbmdCZWhhdmlvci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChiaW5kaW5nLCBzb3VyY2UpIHtcclxuICAgICAgICBpZiAoIWJpbmRpbmcuY2FsbFNvdXJjZSB8fCAhYmluZGluZy50YXJnZXRFdmVudCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlbGYgYmluZGluZyBiZWhhdmlvciBvbmx5IHN1cHBvcnRzIGV2ZW50LicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBiaW5kaW5nLnNlbGZFdmVudENhbGxTb3VyY2UgPSBiaW5kaW5nLmNhbGxTb3VyY2U7XHJcbiAgICAgICAgYmluZGluZy5jYWxsU291cmNlID0gaGFuZGxlU2VsZkV2ZW50O1xyXG4gICAgfTtcclxuICAgIFNlbGZCaW5kaW5nQmVoYXZpb3IucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uIChiaW5kaW5nLCBzb3VyY2UpIHtcclxuICAgICAgICBiaW5kaW5nLmNhbGxTb3VyY2UgPSBiaW5kaW5nLnNlbGZFdmVudENhbGxTb3VyY2U7XHJcbiAgICAgICAgYmluZGluZy5zZWxmRXZlbnRDYWxsU291cmNlID0gbnVsbDtcclxuICAgIH07XHJcbiAgICBTZWxmQmluZGluZ0JlaGF2aW9yID0gX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYmluZGluZ0JlaGF2aW9yKCdzZWxmJylcclxuICAgIF0sIFNlbGZCaW5kaW5nQmVoYXZpb3IpO1xyXG4gICAgcmV0dXJuIFNlbGZCaW5kaW5nQmVoYXZpb3I7XHJcbn0oKSk7XG5cbnZhciBCaW5kaW5nU2lnbmFsZXIgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gQmluZGluZ1NpZ25hbGVyKCkge1xyXG4gICAgICAgIHRoaXMuc2lnbmFscyA9IHt9O1xyXG4gICAgfVxyXG4gICAgQmluZGluZ1NpZ25hbGVyLnByb3RvdHlwZS5zaWduYWwgPSBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIHZhciBiaW5kaW5ncyA9IHRoaXMuc2lnbmFsc1tuYW1lXTtcclxuICAgICAgICBpZiAoIWJpbmRpbmdzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGkgPSBiaW5kaW5ncy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUgKGktLSkge1xyXG4gICAgICAgICAgICBiaW5kaW5nc1tpXS5jYWxsKHNvdXJjZUNvbnRleHQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICByZXR1cm4gQmluZGluZ1NpZ25hbGVyO1xyXG59KCkpO1xuXG52YXIgU2lnbmFsQmluZGluZ0JlaGF2aW9yID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIFNpZ25hbEJpbmRpbmdCZWhhdmlvcihiaW5kaW5nU2lnbmFsZXIpIHtcclxuICAgICAgICB0aGlzLnNpZ25hbHMgPSBiaW5kaW5nU2lnbmFsZXIuc2lnbmFscztcclxuICAgIH1cclxuICAgIFNpZ25hbEJpbmRpbmdCZWhhdmlvci5pbmplY3QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBbQmluZGluZ1NpZ25hbGVyXTsgfTtcclxuICAgIFNpZ25hbEJpbmRpbmdCZWhhdmlvci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChiaW5kaW5nLCBzb3VyY2UpIHtcclxuICAgICAgICB2YXIgbmFtZXMgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICBuYW1lc1tfaSAtIDJdID0gYXJndW1lbnRzW19pXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFiaW5kaW5nLnVwZGF0ZVRhcmdldCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ09ubHkgcHJvcGVydHkgYmluZGluZ3MgYW5kIHN0cmluZyBpbnRlcnBvbGF0aW9uIGJpbmRpbmdzIGNhbiBiZSBzaWduYWxlZC4gIFRyaWdnZXIsIGRlbGVnYXRlIGFuZCBjYWxsIGJpbmRpbmdzIGNhbm5vdCBiZSBzaWduYWxlZC4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHNpZ25hbHMgPSB0aGlzLnNpZ25hbHM7XHJcbiAgICAgICAgaWYgKG5hbWVzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICB2YXIgbmFtZV8xID0gbmFtZXNbMF07XHJcbiAgICAgICAgICAgIHZhciBiaW5kaW5ncyA9IHNpZ25hbHNbbmFtZV8xXSB8fCAoc2lnbmFsc1tuYW1lXzFdID0gW10pO1xyXG4gICAgICAgICAgICBiaW5kaW5ncy5wdXNoKGJpbmRpbmcpO1xyXG4gICAgICAgICAgICBiaW5kaW5nLnNpZ25hbE5hbWUgPSBuYW1lXzE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKG5hbWVzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgdmFyIGkgPSBuYW1lcy5sZW5ndGg7XHJcbiAgICAgICAgICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgICAgICAgICAgIHZhciBuYW1lXzIgPSBuYW1lc1tpXTtcclxuICAgICAgICAgICAgICAgIHZhciBiaW5kaW5ncyA9IHNpZ25hbHNbbmFtZV8yXSB8fCAoc2lnbmFsc1tuYW1lXzJdID0gW10pO1xyXG4gICAgICAgICAgICAgICAgYmluZGluZ3MucHVzaChiaW5kaW5nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBiaW5kaW5nLnNpZ25hbE5hbWUgPSBuYW1lcztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2lnbmFsIG5hbWUgaXMgcmVxdWlyZWQuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIFNpZ25hbEJpbmRpbmdCZWhhdmlvci5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24gKGJpbmRpbmcsIHNvdXJjZSkge1xyXG4gICAgICAgIHZhciBzaWduYWxzID0gdGhpcy5zaWduYWxzO1xyXG4gICAgICAgIHZhciBuYW1lID0gYmluZGluZy5zaWduYWxOYW1lO1xyXG4gICAgICAgIGJpbmRpbmcuc2lnbmFsTmFtZSA9IG51bGw7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpIHtcclxuICAgICAgICAgICAgdmFyIG5hbWVzID0gbmFtZTtcclxuICAgICAgICAgICAgdmFyIGkgPSBuYW1lcy5sZW5ndGg7XHJcbiAgICAgICAgICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgICAgICAgICAgIHZhciBuID0gbmFtZXNbaV07XHJcbiAgICAgICAgICAgICAgICB2YXIgYmluZGluZ3MgPSBzaWduYWxzW25dO1xyXG4gICAgICAgICAgICAgICAgYmluZGluZ3Muc3BsaWNlKGJpbmRpbmdzLmluZGV4T2YoYmluZGluZyksIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgYmluZGluZ3MgPSBzaWduYWxzW25hbWVdO1xyXG4gICAgICAgICAgICBiaW5kaW5ncy5zcGxpY2UoYmluZGluZ3MuaW5kZXhPZihiaW5kaW5nKSwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIFNpZ25hbEJpbmRpbmdCZWhhdmlvciA9IF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGJpbmRpbmdCZWhhdmlvcignc2lnbmFsJylcclxuICAgIF0sIFNpZ25hbEJpbmRpbmdCZWhhdmlvcik7XHJcbiAgICByZXR1cm4gU2lnbmFsQmluZGluZ0JlaGF2aW9yO1xyXG59KCkpO1xuXG52YXIgZXZlbnROYW1lc1JlcXVpcmVkID0gJ1RoZSB1cGRhdGVUcmlnZ2VyIGJpbmRpbmcgYmVoYXZpb3IgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIGV2ZW50IG5hbWUgYXJndW1lbnQ6IGVnIDxpbnB1dCB2YWx1ZS5iaW5kPVwiZmlyc3ROYW1lICYgdXBkYXRlVHJpZ2dlcjpcXCdibHVyXFwnXCI+JztcclxudmFyIG5vdEFwcGxpY2FibGVNZXNzYWdlID0gJ1RoZSB1cGRhdGVUcmlnZ2VyIGJpbmRpbmcgYmVoYXZpb3IgY2FuIG9ubHkgYmUgYXBwbGllZCB0byB0d28td2F5LyBmcm9tLXZpZXcgYmluZGluZ3Mgb24gaW5wdXQvc2VsZWN0IGVsZW1lbnRzLic7XHJcbnZhciBVcGRhdGVUcmlnZ2VyQmluZGluZ0JlaGF2aW9yID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIFVwZGF0ZVRyaWdnZXJCaW5kaW5nQmVoYXZpb3IoKSB7XHJcbiAgICB9XHJcbiAgICBVcGRhdGVUcmlnZ2VyQmluZGluZ0JlaGF2aW9yLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGJpbmRpbmcsIHNvdXJjZSkge1xyXG4gICAgICAgIHZhciBldmVudHMgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICBldmVudHNbX2kgLSAyXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChldmVudHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihldmVudE5hbWVzUmVxdWlyZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYmluZGluZy5tb2RlICE9PSBiaW5kaW5nTW9kZS50d29XYXkgJiYgYmluZGluZy5tb2RlICE9PSBiaW5kaW5nTW9kZS5mcm9tVmlldykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Iobm90QXBwbGljYWJsZU1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdGFyZ2V0T2JzZXJ2ZXIgPSBiaW5kaW5nLm9ic2VydmVyTG9jYXRvci5nZXRPYnNlcnZlcihiaW5kaW5nLnRhcmdldCwgYmluZGluZy50YXJnZXRQcm9wZXJ0eSk7XHJcbiAgICAgICAgaWYgKCF0YXJnZXRPYnNlcnZlci5oYW5kbGVyKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihub3RBcHBsaWNhYmxlTWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJpbmRpbmcudGFyZ2V0T2JzZXJ2ZXIgPSB0YXJnZXRPYnNlcnZlcjtcclxuICAgICAgICB0YXJnZXRPYnNlcnZlci5vcmlnaW5hbEhhbmRsZXIgPSBiaW5kaW5nLnRhcmdldE9ic2VydmVyLmhhbmRsZXI7XHJcbiAgICAgICAgdmFyIGhhbmRsZXIgPSBuZXcgRXZlbnRTdWJzY3JpYmVyKGV2ZW50cyk7XHJcbiAgICAgICAgdGFyZ2V0T2JzZXJ2ZXIuaGFuZGxlciA9IGhhbmRsZXI7XHJcbiAgICB9O1xyXG4gICAgVXBkYXRlVHJpZ2dlckJpbmRpbmdCZWhhdmlvci5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24gKGJpbmRpbmcsIHNvdXJjZSkge1xyXG4gICAgICAgIHZhciB0YXJnZXRPYnNlcnZlciA9IGJpbmRpbmcudGFyZ2V0T2JzZXJ2ZXI7XHJcbiAgICAgICAgdGFyZ2V0T2JzZXJ2ZXIuaGFuZGxlci5kaXNwb3NlKCk7XHJcbiAgICAgICAgdGFyZ2V0T2JzZXJ2ZXIuaGFuZGxlciA9IHRhcmdldE9ic2VydmVyLm9yaWdpbmFsSGFuZGxlcjtcclxuICAgICAgICB0YXJnZXRPYnNlcnZlci5vcmlnaW5hbEhhbmRsZXIgPSBudWxsO1xyXG4gICAgfTtcclxuICAgIFVwZGF0ZVRyaWdnZXJCaW5kaW5nQmVoYXZpb3IgPSBfX2RlY29yYXRlKFtcclxuICAgICAgICBiaW5kaW5nQmVoYXZpb3IoJ3VwZGF0ZVRyaWdnZXInKVxyXG4gICAgXSwgVXBkYXRlVHJpZ2dlckJpbmRpbmdCZWhhdmlvcik7XHJcbiAgICByZXR1cm4gVXBkYXRlVHJpZ2dlckJpbmRpbmdCZWhhdmlvcjtcclxufSgpKTtcblxuZnVuY3Rpb24gX2NyZWF0ZUR5bmFtaWNFbGVtZW50KF9hKSB7XHJcbiAgICB2YXIgbmFtZSA9IF9hLm5hbWUsIHZpZXdVcmwgPSBfYS52aWV3VXJsLCBiaW5kYWJsZU5hbWVzID0gX2EuYmluZGFibGVOYW1lcywgdXNlU2hhZG93RE9NbW9kZSA9IF9hLnVzZVNoYWRvd0RPTW1vZGU7XHJcbiAgICB2YXIgRHluYW1pY0VsZW1lbnQgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIER5bmFtaWNFbGVtZW50KCkge1xyXG4gICAgICAgIH1cclxuICAgICAgICBEeW5hbWljRWxlbWVudC5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChiaW5kaW5nQ29udGV4dCkge1xyXG4gICAgICAgICAgICB0aGlzLiRwYXJlbnQgPSBiaW5kaW5nQ29udGV4dDtcclxuICAgICAgICB9O1xyXG4gICAgICAgIER5bmFtaWNFbGVtZW50ID0gX19kZWNvcmF0ZShbXHJcbiAgICAgICAgICAgIGN1c3RvbUVsZW1lbnQobmFtZSksXHJcbiAgICAgICAgICAgIHVzZVZpZXcodmlld1VybClcclxuICAgICAgICBdLCBEeW5hbWljRWxlbWVudCk7XHJcbiAgICAgICAgcmV0dXJuIER5bmFtaWNFbGVtZW50O1xyXG4gICAgfSgpKTtcclxuICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGJpbmRhYmxlTmFtZXMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xyXG4gICAgICAgIGJpbmRhYmxlKGJpbmRhYmxlTmFtZXNbaV0pKER5bmFtaWNFbGVtZW50KTtcclxuICAgIH1cclxuICAgIHN3aXRjaCAodXNlU2hhZG93RE9NbW9kZSkge1xyXG4gICAgICAgIGNhc2UgJ29wZW4nOlxyXG4gICAgICAgICAgICB1c2VTaGFkb3dET00oeyBtb2RlOiAnb3BlbicgfSkoRHluYW1pY0VsZW1lbnQpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdjbG9zZWQnOlxyXG4gICAgICAgICAgICB1c2VTaGFkb3dET00oeyBtb2RlOiAnY2xvc2VkJyB9KShEeW5hbWljRWxlbWVudCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJyc6XHJcbiAgICAgICAgICAgIHVzZVNoYWRvd0RPTShEeW5hbWljRWxlbWVudCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgbnVsbDpcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgZ2V0TG9nZ2VyKCdhdXJlbGlhLWh0bWwtb25seS1lbGVtZW50JylcclxuICAgICAgICAgICAgICAgIC53YXJuKFwiRXhwZWN0ZWQgJ3VzZS1zaGFkb3ctZG9tJyB2YWx1ZSB0byBiZSBcXFwiY2xvc2VcXFwiLCBcXFwib3BlblxcXCIgb3IgXFxcIlxcXCIsIHJlY2VpdmVkIFwiLmNvbmNhdCh1c2VTaGFkb3dET01tb2RlKSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIER5bmFtaWNFbGVtZW50O1xyXG59XG5cbmZ1bmN0aW9uIGdldEVsZW1lbnROYW1lKGFkZHJlc3MpIHtcclxuICAgIHJldHVybiAvKFteXFwvXlxcP10rKVxcLmh0bWwvaS5leGVjKGFkZHJlc3MpWzFdLnRvTG93ZXJDYXNlKCk7XHJcbn1cclxuZnVuY3Rpb24gY29uZmlndXJlJDEoY29uZmlnKSB7XHJcbiAgICB2YXIgdmlld0VuZ2luZSA9IGNvbmZpZy5jb250YWluZXIuZ2V0KFZpZXdFbmdpbmUpO1xyXG4gICAgdmFyIGxvYWRlciA9IGNvbmZpZy5hdXJlbGlhLmxvYWRlcjtcclxuICAgIHZpZXdFbmdpbmUuYWRkUmVzb3VyY2VQbHVnaW4oJy5odG1sJywge1xyXG4gICAgICAgICdmZXRjaCc6IGZ1bmN0aW9uICh2aWV3VXJsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBsb2FkZXIubG9hZFRlbXBsYXRlKHZpZXdVcmwpLnRoZW4oZnVuY3Rpb24gKHJlZ2lzdHJ5RW50cnkpIHtcclxuICAgICAgICAgICAgICAgIHZhciBfYTtcclxuICAgICAgICAgICAgICAgIHZhciBiaW5kYWJsZU5hbWVzID0gcmVnaXN0cnlFbnRyeS50ZW1wbGF0ZS5nZXRBdHRyaWJ1dGUoJ2JpbmRhYmxlJyk7XHJcbiAgICAgICAgICAgICAgICB2YXIgdXNlU2hhZG93RE9NbW9kZSA9IHJlZ2lzdHJ5RW50cnkudGVtcGxhdGUuZ2V0QXR0cmlidXRlKCd1c2Utc2hhZG93LWRvbScpO1xyXG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBnZXRFbGVtZW50TmFtZSh2aWV3VXJsKTtcclxuICAgICAgICAgICAgICAgIGlmIChiaW5kYWJsZU5hbWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmluZGFibGVOYW1lcyA9IGJpbmRhYmxlTmFtZXMuc3BsaXQoJywnKS5tYXAoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHgudHJpbSgpOyB9KTtcclxuICAgICAgICAgICAgICAgICAgICByZWdpc3RyeUVudHJ5LnRlbXBsYXRlLnJlbW92ZUF0dHJpYnV0ZSgnYmluZGFibGUnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGJpbmRhYmxlTmFtZXMgPSBbXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBfYSA9IHt9LCBfYVtuYW1lXSA9IF9jcmVhdGVEeW5hbWljRWxlbWVudCh7IG5hbWU6IG5hbWUsIHZpZXdVcmw6IHZpZXdVcmwsIGJpbmRhYmxlTmFtZXM6IGJpbmRhYmxlTmFtZXMsIHVzZVNoYWRvd0RPTW1vZGU6IHVzZVNoYWRvd0RPTW1vZGUgfSksIF9hO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxuXG5mdW5jdGlvbiBjb25maWd1cmUoY29uZmlnKSB7XHJcbiAgICBpbmplY3RBdXJlbGlhSGlkZVN0eWxlQXRIZWFkKCk7XHJcbiAgICBjb25maWcuZ2xvYmFsUmVzb3VyY2VzKENvbXBvc2UsIElmLCBFbHNlLCBXaXRoLCBSZXBlYXQsIFNob3csIEhpZGUsIFJlcGxhY2VhYmxlLCBGb2N1cywgU2FuaXRpemVIVE1MVmFsdWVDb252ZXJ0ZXIsIE9uZVRpbWVCaW5kaW5nQmVoYXZpb3IsIE9uZVdheUJpbmRpbmdCZWhhdmlvciwgVG9WaWV3QmluZGluZ0JlaGF2aW9yLCBGcm9tVmlld0JpbmRpbmdCZWhhdmlvciwgVHdvV2F5QmluZGluZ0JlaGF2aW9yLCBUaHJvdHRsZUJpbmRpbmdCZWhhdmlvciwgRGVib3VuY2VCaW5kaW5nQmVoYXZpb3IsIFNlbGZCaW5kaW5nQmVoYXZpb3IsIFNpZ25hbEJpbmRpbmdCZWhhdmlvciwgVXBkYXRlVHJpZ2dlckJpbmRpbmdCZWhhdmlvciwgQXR0ckJpbmRpbmdCZWhhdmlvcik7XHJcbiAgICBjb25maWd1cmUkMShjb25maWcpO1xyXG4gICAgdmFyIHZpZXdFbmdpbmUgPSBjb25maWcuY29udGFpbmVyLmdldChWaWV3RW5naW5lKTtcclxuICAgIHZhciBzdHlsZVJlc291cmNlUGx1Z2luID0ge1xyXG4gICAgICAgIGZldGNoOiBmdW5jdGlvbiAoYWRkcmVzcykge1xyXG4gICAgICAgICAgICB2YXIgX2E7XHJcbiAgICAgICAgICAgIHJldHVybiBfYSA9IHt9LCBfYVthZGRyZXNzXSA9IF9jcmVhdGVDU1NSZXNvdXJjZShhZGRyZXNzKSwgX2E7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIFsnLmNzcycsICcubGVzcycsICcuc2FzcycsICcuc2NzcycsICcuc3R5bCddLmZvckVhY2goZnVuY3Rpb24gKGV4dCkgeyByZXR1cm4gdmlld0VuZ2luZS5hZGRSZXNvdXJjZVBsdWdpbihleHQsIHN0eWxlUmVzb3VyY2VQbHVnaW4pOyB9KTtcclxufVxuXG5leHBvcnQgeyBBYnN0cmFjdFJlcGVhdGVyLCBBcnJheVJlcGVhdFN0cmF0ZWd5LCBBdHRyQmluZGluZ0JlaGF2aW9yLCBCaW5kaW5nU2lnbmFsZXIsIENvbXBvc2UsIERlYm91bmNlQmluZGluZ0JlaGF2aW9yLCBFbHNlLCBGb2N1cywgRnJvbVZpZXdCaW5kaW5nQmVoYXZpb3IsIEhUTUxTYW5pdGl6ZXIsIEhpZGUsIElmLCBNYXBSZXBlYXRTdHJhdGVneSwgTnVsbFJlcGVhdFN0cmF0ZWd5LCBOdW1iZXJSZXBlYXRTdHJhdGVneSwgT25lVGltZUJpbmRpbmdCZWhhdmlvciwgT25lV2F5QmluZGluZ0JlaGF2aW9yLCBSZXBlYXQsIFJlcGVhdFN0cmF0ZWd5TG9jYXRvciwgUmVwbGFjZWFibGUsIFNhbml0aXplSFRNTFZhbHVlQ29udmVydGVyLCBTZWxmQmluZGluZ0JlaGF2aW9yLCBTZXRSZXBlYXRTdHJhdGVneSwgU2hvdywgU2lnbmFsQmluZGluZ0JlaGF2aW9yLCBUaHJvdHRsZUJpbmRpbmdCZWhhdmlvciwgVG9WaWV3QmluZGluZ0JlaGF2aW9yLCBUd29XYXlCaW5kaW5nQmVoYXZpb3IsIFVwZGF0ZVRyaWdnZXJCaW5kaW5nQmVoYXZpb3IsIFdpdGgsIGNvbmZpZ3VyZSwgY3JlYXRlRnVsbE92ZXJyaWRlQ29udGV4dCwgZ2V0SXRlbXNTb3VyY2VFeHByZXNzaW9uLCBpc09uZVRpbWUsIHVud3JhcEV4cHJlc3Npb24sIHVwZGF0ZU9uZVRpbWVCaW5kaW5nLCB1cGRhdGVPdmVycmlkZUNvbnRleHQsIHZpZXdzUmVxdWlyZUxpZmVjeWNsZSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXVyZWxpYS10ZW1wbGF0aW5nLXJlc291cmNlcy5qcy5tYXBcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///aurelia-templating-resources\n')},"aurelia-templating-router":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('/* unused harmony export RouteHref */\n/* unused harmony export RouterView */\n/* unused harmony export RouterViewLocator */\n/* unused harmony export TemplatingRouteLoader */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "configure", function() { return configure; });\n/* harmony import */ var aurelia_router__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(11);\n/* harmony import */ var aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4);\n/* harmony import */ var aurelia_path__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7);\n/* harmony import */ var aurelia_templating__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(3);\n/* harmony import */ var aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(6);\n/* harmony import */ var aurelia_binding__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(1);\n/* harmony import */ var aurelia_pal__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(0);\n/* harmony import */ var aurelia_logging__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(5);\n\n\n\n\n\n\n\n\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n    if (typeof b !== "function" && b !== null)\r\n        throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\n\nvar EmptyLayoutViewModel = (function () {\r\n    function EmptyLayoutViewModel() {\r\n    }\r\n    return EmptyLayoutViewModel;\r\n}());\r\nvar RouterView = (function () {\r\n    function RouterView(element, container, viewSlot, router, viewLocator, compositionTransaction, compositionEngine) {\r\n        this.element = element;\r\n        this.container = container;\r\n        this.viewSlot = viewSlot;\r\n        this.router = router;\r\n        this.viewLocator = viewLocator;\r\n        this.compositionTransaction = compositionTransaction;\r\n        this.compositionEngine = compositionEngine;\r\n        this.router.registerViewPort(this, this.element.getAttribute(\'name\'));\r\n        if (!(\'initialComposition\' in compositionTransaction)) {\r\n            compositionTransaction.initialComposition = true;\r\n            this.compositionTransactionNotifier = compositionTransaction.enlist();\r\n        }\r\n    }\r\n    RouterView.inject = function () {\r\n        return [aurelia_pal__WEBPACK_IMPORTED_MODULE_6__[/* DOM */ "b"].Element, aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_4__[/* Container */ "b"], aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* ViewSlot */ "N"], aurelia_router__WEBPACK_IMPORTED_MODULE_0__["Router"], aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* ViewLocator */ "L"], aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* CompositionTransaction */ "h"], aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* CompositionEngine */ "g"]];\r\n    };\r\n    RouterView.prototype.created = function (owningView) {\r\n        this.owningView = owningView;\r\n    };\r\n    RouterView.prototype.bind = function (bindingContext, overrideContext) {\r\n        this.container.viewModel = bindingContext;\r\n        this.overrideContext = overrideContext;\r\n    };\r\n    RouterView.prototype.process = function ($viewPortInstruction, waitToSwap) {\r\n        var _this = this;\r\n        var viewPortInstruction = $viewPortInstruction;\r\n        var component = viewPortInstruction.component;\r\n        var childContainer = component.childContainer;\r\n        var viewModel = component.viewModel;\r\n        var viewModelResource = component.viewModelResource;\r\n        var metadata = viewModelResource.metadata;\r\n        var config = component.router.currentInstruction.config;\r\n        var viewPortConfig = config.viewPorts ? (config.viewPorts[viewPortInstruction.name] || {}) : {};\r\n        childContainer.get(RouterViewLocator)._notify(this);\r\n        var layoutInstruction = {\r\n            viewModel: viewPortConfig.layoutViewModel || config.layoutViewModel || this.layoutViewModel,\r\n            view: viewPortConfig.layoutView || config.layoutView || this.layoutView,\r\n            model: viewPortConfig.layoutModel || config.layoutModel || this.layoutModel,\r\n            router: viewPortInstruction.component.router,\r\n            childContainer: childContainer,\r\n            viewSlot: this.viewSlot\r\n        };\r\n        var viewStrategy = this.viewLocator.getViewStrategy(component.view || viewModel);\r\n        if (viewStrategy && component.view) {\r\n            viewStrategy.makeRelativeTo(aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[/* Origin */ "a"].get(component.router.container.viewModel.constructor).moduleId);\r\n        }\r\n        return metadata\r\n            .load(childContainer, viewModelResource.value, null, viewStrategy, true)\r\n            .then(function (viewFactory) {\r\n            if (!_this.compositionTransactionNotifier) {\r\n                _this.compositionTransactionOwnershipToken = _this.compositionTransaction.tryCapture();\r\n            }\r\n            if (layoutInstruction.viewModel || layoutInstruction.view) {\r\n                viewPortInstruction.layoutInstruction = layoutInstruction;\r\n            }\r\n            var viewPortComponentBehaviorInstruction = aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* BehaviorInstruction */ "b"].dynamic(_this.element, viewModel, viewFactory);\r\n            viewPortInstruction.controller = metadata.create(childContainer, viewPortComponentBehaviorInstruction);\r\n            if (waitToSwap) {\r\n                return null;\r\n            }\r\n            _this.swap(viewPortInstruction);\r\n        });\r\n    };\r\n    RouterView.prototype.swap = function ($viewPortInstruction) {\r\n        var _this = this;\r\n        var viewPortInstruction = $viewPortInstruction;\r\n        var viewPortController = viewPortInstruction.controller;\r\n        var layoutInstruction = viewPortInstruction.layoutInstruction;\r\n        var previousView = this.view;\r\n        var work = function () {\r\n            var swapStrategy = aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* SwapStrategies */ "B"][_this.swapOrder] || aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* SwapStrategies */ "B"].after;\r\n            var viewSlot = _this.viewSlot;\r\n            swapStrategy(viewSlot, previousView, function () { return Promise.resolve(viewSlot.add(_this.view)); }).then(function () {\r\n                _this._notify();\r\n            });\r\n        };\r\n        var ready = function (owningView_or_layoutView) {\r\n            viewPortController.automate(_this.overrideContext, owningView_or_layoutView);\r\n            var transactionOwnerShipToken = _this.compositionTransactionOwnershipToken;\r\n            if (transactionOwnerShipToken) {\r\n                return transactionOwnerShipToken\r\n                    .waitForCompositionComplete()\r\n                    .then(function () {\r\n                    _this.compositionTransactionOwnershipToken = null;\r\n                    return work();\r\n                });\r\n            }\r\n            return work();\r\n        };\r\n        if (layoutInstruction) {\r\n            if (!layoutInstruction.viewModel) {\r\n                layoutInstruction.viewModel = new EmptyLayoutViewModel();\r\n            }\r\n            return this.compositionEngine\r\n                .createController(layoutInstruction)\r\n                .then(function (layoutController) {\r\n                var layoutView = layoutController.view;\r\n                aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* ShadowDOM */ "x"].distributeView(viewPortController.view, layoutController.slots || layoutView.slots);\r\n                layoutController.automate(Object(aurelia_binding__WEBPACK_IMPORTED_MODULE_5__["createOverrideContext"])(layoutInstruction.viewModel), _this.owningView);\r\n                layoutView.children.push(viewPortController.view);\r\n                return layoutView || layoutController;\r\n            })\r\n                .then(function (newView) {\r\n                _this.view = newView;\r\n                return ready(newView);\r\n            });\r\n        }\r\n        this.view = viewPortController.view;\r\n        return ready(this.owningView);\r\n    };\r\n    RouterView.prototype._notify = function () {\r\n        var notifier = this.compositionTransactionNotifier;\r\n        if (notifier) {\r\n            notifier.done();\r\n            this.compositionTransactionNotifier = null;\r\n        }\r\n    };\r\n    RouterView.$view = null;\r\n    RouterView.$resource = {\r\n        name: \'router-view\',\r\n        bindables: [\'swapOrder\', \'layoutView\', \'layoutViewModel\', \'layoutModel\', \'inherit-binding-context\']\r\n    };\r\n    return RouterView;\r\n}());\r\nvar RouterViewLocator = (function () {\r\n    function RouterViewLocator() {\r\n        var _this = this;\r\n        this.promise = new Promise(function (resolve) { return _this.resolve = resolve; });\r\n    }\r\n    RouterViewLocator.prototype.findNearest = function () {\r\n        return this.promise;\r\n    };\r\n    RouterViewLocator.prototype._notify = function (routerView) {\r\n        this.resolve(routerView);\r\n    };\r\n    return RouterViewLocator;\r\n}());\n\nvar EmptyClass = (function () {\r\n    function EmptyClass() {\r\n    }\r\n    return EmptyClass;\r\n}());\r\naurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* inlineView */ "Aa"](\'<template><\/template>\')(EmptyClass);\r\nvar TemplatingRouteLoader = (function (_super) {\r\n    __extends(TemplatingRouteLoader, _super);\r\n    function TemplatingRouteLoader(compositionEngine) {\r\n        var _this = _super.call(this) || this;\r\n        _this.compositionEngine = compositionEngine;\r\n        return _this;\r\n    }\r\n    TemplatingRouteLoader.prototype.resolveViewModel = function (router, config) {\r\n        return new Promise(function (resolve, reject) {\r\n            var viewModel;\r\n            if (\'moduleId\' in config) {\r\n                var moduleId = config.moduleId;\r\n                if (moduleId === null) {\r\n                    viewModel = EmptyClass;\r\n                }\r\n                else {\r\n                    moduleId = Object(aurelia_path__WEBPACK_IMPORTED_MODULE_2__["relativeToFile"])(moduleId, aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[/* Origin */ "a"].get(router.container.viewModel.constructor).moduleId);\r\n                    if (/\\.html/i.test(moduleId)) {\r\n                        viewModel = createDynamicClass(moduleId);\r\n                    }\r\n                    else {\r\n                        viewModel = moduleId;\r\n                    }\r\n                }\r\n                return resolve(viewModel);\r\n            }\r\n            reject(new Error(\'Invalid route config. No "moduleId" found.\'));\r\n        });\r\n    };\r\n    TemplatingRouteLoader.prototype.createChildContainer = function (router) {\r\n        var childContainer = router.container.createChild();\r\n        childContainer.registerSingleton(RouterViewLocator);\r\n        childContainer.getChildRouter = function () {\r\n            var childRouter;\r\n            childContainer.registerHandler(aurelia_router__WEBPACK_IMPORTED_MODULE_0__["Router"], function () { return childRouter || (childRouter = router.createChild(childContainer)); });\r\n            return childContainer.get(aurelia_router__WEBPACK_IMPORTED_MODULE_0__["Router"]);\r\n        };\r\n        return childContainer;\r\n    };\r\n    TemplatingRouteLoader.prototype.loadRoute = function (router, config, navInstruction) {\r\n        var _this = this;\r\n        return this\r\n            .resolveViewModel(router, config)\r\n            .then(function (viewModel) { return _this.compositionEngine.ensureViewModel({\r\n            viewModel: viewModel,\r\n            childContainer: _this.createChildContainer(router),\r\n            view: config.view || config.viewStrategy,\r\n            router: router\r\n        }); });\r\n    };\r\n    TemplatingRouteLoader.inject = [aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* CompositionEngine */ "g"]];\r\n    return TemplatingRouteLoader;\r\n}(aurelia_router__WEBPACK_IMPORTED_MODULE_0__["RouteLoader"]));\r\nfunction createDynamicClass(moduleId) {\r\n    var name = /([^\\/^\\?]+)\\.html/i.exec(moduleId)[1];\r\n    var DynamicClass = (function () {\r\n        function DynamicClass() {\r\n        }\r\n        DynamicClass.prototype.bind = function (bindingContext) {\r\n            this.$parent = bindingContext;\r\n        };\r\n        return DynamicClass;\r\n    }());\r\n    Object(aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* customElement */ "X"])(name)(DynamicClass);\r\n    Object(aurelia_templating__WEBPACK_IMPORTED_MODULE_3__[/* useView */ "Ha"])(moduleId)(DynamicClass);\r\n    return DynamicClass;\r\n}\n\nvar logger = aurelia_logging__WEBPACK_IMPORTED_MODULE_7__["getLogger"](\'route-href\');\r\nvar RouteHref = (function () {\r\n    function RouteHref(router, element) {\r\n        this.router = router;\r\n        this.element = element;\r\n        this.attribute = \'href\';\r\n    }\r\n    RouteHref.inject = function () {\r\n        return [aurelia_router__WEBPACK_IMPORTED_MODULE_0__["Router"], aurelia_pal__WEBPACK_IMPORTED_MODULE_6__[/* DOM */ "b"].Element];\r\n    };\r\n    RouteHref.prototype.bind = function () {\r\n        this.isActive = true;\r\n        this.processChange();\r\n    };\r\n    RouteHref.prototype.unbind = function () {\r\n        this.isActive = false;\r\n    };\r\n    RouteHref.prototype.attributeChanged = function (value, previous) {\r\n        if (previous) {\r\n            this.element.removeAttribute(previous);\r\n        }\r\n        return this.processChange();\r\n    };\r\n    RouteHref.prototype.processChange = function () {\r\n        var _this = this;\r\n        return this.router\r\n            .ensureConfigured()\r\n            .then(function () {\r\n            if (!_this.isActive) {\r\n                return null;\r\n            }\r\n            var element = _this.element;\r\n            var href = _this.router.generate(_this.route, _this.params);\r\n            if (element.au.controller) {\r\n                element.au.controller.viewModel[_this.attribute] = href;\r\n            }\r\n            else {\r\n                element.setAttribute(_this.attribute, href);\r\n            }\r\n            return null;\r\n        })\r\n            .catch(function (reason) {\r\n            logger.error(reason);\r\n        });\r\n    };\r\n    RouteHref.$resource = {\r\n        type: \'attribute\',\r\n        name: \'route-href\',\r\n        bindables: [\r\n            { name: \'route\', changeHandler: \'processChange\', primaryProperty: true },\r\n            { name: \'params\', changeHandler: \'processChange\' },\r\n            \'attribute\'\r\n        ]\r\n    };\r\n    return RouteHref;\r\n}());\n\nfunction configure(config) {\r\n    config\r\n        .singleton(aurelia_router__WEBPACK_IMPORTED_MODULE_0__["RouteLoader"], TemplatingRouteLoader)\r\n        .singleton(aurelia_router__WEBPACK_IMPORTED_MODULE_0__["Router"], aurelia_router__WEBPACK_IMPORTED_MODULE_0__["AppRouter"])\r\n        .globalResources(RouterView, RouteHref);\r\n    config.container.registerAlias(aurelia_router__WEBPACK_IMPORTED_MODULE_0__["Router"], aurelia_router__WEBPACK_IMPORTED_MODULE_0__["AppRouter"]);\r\n}\n\n\n//# sourceMappingURL=aurelia-templating-router.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXVyZWxpYS10ZW1wbGF0aW5nLXJvdXRlci9kaXN0L25hdGl2ZS1tb2R1bGVzL2F1cmVsaWEtdGVtcGxhdGluZy1yb3V0ZXIuanM/YWIzMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFnRTtBQUN0QjtBQUNJO0FBQzRJO0FBQ2pJO0FBQ0Q7QUFDdEI7QUFDWTs7QUFFOUM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVSxnQkFBZ0Isc0NBQXNDLGlCQUFpQixFQUFFO0FBQ25GLHlCQUF5Qiw4RUFBOEU7QUFDdkc7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixzQkFBc0I7QUFDekM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQix1REFBRyxVQUFVLDhFQUFTLEVBQUUsbUVBQVEsRUFBRSxxREFBTSxFQUFFLHNFQUFXLEVBQUUsaUZBQXNCLEVBQUUsNEVBQWlCO0FBQ2hIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpR0FBaUc7QUFDakc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QywrREFBTTtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RCw4RUFBbUI7QUFDMUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLHlFQUFjLHFCQUFxQix5RUFBYztBQUNoRjtBQUNBLDhEQUE4RCxrREFBa0QsRUFBRTtBQUNsSDtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG9FQUFTO0FBQ3pCLDBDQUEwQyw2RUFBcUI7QUFDL0Q7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSx1REFBdUQsZ0NBQWdDLEVBQUU7QUFDekY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Qsc0VBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixtRUFBYyxXQUFXLCtEQUFNO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyxxREFBTSxlQUFlLDBFQUEwRSxFQUFFO0FBQzVJLHNDQUFzQyxxREFBTTtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QztBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsRUFBRSxFQUFFO0FBQ2I7QUFDQSxvQ0FBb0MsNEVBQWlCO0FBQ3JEO0FBQ0EsQ0FBQyxDQUFDLDBEQUFXO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLElBQUksZ0ZBQWE7QUFDakIsSUFBSSwyRUFBTztBQUNYO0FBQ0E7O0FBRUEsYUFBYSx5REFBb0I7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IscURBQU0sRUFBRSx1REFBRztBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHVFQUF1RTtBQUNwRixhQUFhLGlEQUFpRDtBQUM5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBLG1CQUFtQiwwREFBVztBQUM5QixtQkFBbUIscURBQU0sRUFBRSx3REFBUztBQUNwQztBQUNBLG1DQUFtQyxxREFBTSxFQUFFLHdEQUFTO0FBQ3BEOztBQUVzRjtBQUN0RiIsImZpbGUiOiJhdXJlbGlhLXRlbXBsYXRpbmctcm91dGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUm91dGVyLCBSb3V0ZUxvYWRlciwgQXBwUm91dGVyIH0gZnJvbSAnYXVyZWxpYS1yb3V0ZXInO1xuaW1wb3J0IHsgT3JpZ2luIH0gZnJvbSAnYXVyZWxpYS1tZXRhZGF0YSc7XG5pbXBvcnQgeyByZWxhdGl2ZVRvRmlsZSB9IGZyb20gJ2F1cmVsaWEtcGF0aCc7XG5pbXBvcnQgeyBCZWhhdmlvckluc3RydWN0aW9uLCBTaGFkb3dET00sIFZpZXdTbG90LCBWaWV3TG9jYXRvciwgQ29tcG9zaXRpb25UcmFuc2FjdGlvbiwgQ29tcG9zaXRpb25FbmdpbmUsIFN3YXBTdHJhdGVnaWVzLCBpbmxpbmVWaWV3LCBjdXN0b21FbGVtZW50LCB1c2VWaWV3IH0gZnJvbSAnYXVyZWxpYS10ZW1wbGF0aW5nJztcbmltcG9ydCB7IENvbnRhaW5lciB9IGZyb20gJ2F1cmVsaWEtZGVwZW5kZW5jeS1pbmplY3Rpb24nO1xuaW1wb3J0IHsgY3JlYXRlT3ZlcnJpZGVDb250ZXh0IH0gZnJvbSAnYXVyZWxpYS1iaW5kaW5nJztcbmltcG9ydCB7IERPTSB9IGZyb20gJ2F1cmVsaWEtcGFsJztcbmltcG9ydCAqIGFzIExvZ01hbmFnZXIgZnJvbSAnYXVyZWxpYS1sb2dnaW5nJztcblxuLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xyXG4gICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XHJcbiAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbn1cblxudmFyIEVtcHR5TGF5b3V0Vmlld01vZGVsID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEVtcHR5TGF5b3V0Vmlld01vZGVsKCkge1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIEVtcHR5TGF5b3V0Vmlld01vZGVsO1xyXG59KCkpO1xyXG52YXIgUm91dGVyVmlldyA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBSb3V0ZXJWaWV3KGVsZW1lbnQsIGNvbnRhaW5lciwgdmlld1Nsb3QsIHJvdXRlciwgdmlld0xvY2F0b3IsIGNvbXBvc2l0aW9uVHJhbnNhY3Rpb24sIGNvbXBvc2l0aW9uRW5naW5lKSB7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lciA9IGNvbnRhaW5lcjtcclxuICAgICAgICB0aGlzLnZpZXdTbG90ID0gdmlld1Nsb3Q7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIgPSByb3V0ZXI7XHJcbiAgICAgICAgdGhpcy52aWV3TG9jYXRvciA9IHZpZXdMb2NhdG9yO1xyXG4gICAgICAgIHRoaXMuY29tcG9zaXRpb25UcmFuc2FjdGlvbiA9IGNvbXBvc2l0aW9uVHJhbnNhY3Rpb247XHJcbiAgICAgICAgdGhpcy5jb21wb3NpdGlvbkVuZ2luZSA9IGNvbXBvc2l0aW9uRW5naW5lO1xyXG4gICAgICAgIHRoaXMucm91dGVyLnJlZ2lzdGVyVmlld1BvcnQodGhpcywgdGhpcy5lbGVtZW50LmdldEF0dHJpYnV0ZSgnbmFtZScpKTtcclxuICAgICAgICBpZiAoISgnaW5pdGlhbENvbXBvc2l0aW9uJyBpbiBjb21wb3NpdGlvblRyYW5zYWN0aW9uKSkge1xyXG4gICAgICAgICAgICBjb21wb3NpdGlvblRyYW5zYWN0aW9uLmluaXRpYWxDb21wb3NpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuY29tcG9zaXRpb25UcmFuc2FjdGlvbk5vdGlmaWVyID0gY29tcG9zaXRpb25UcmFuc2FjdGlvbi5lbmxpc3QoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBSb3V0ZXJWaWV3LmluamVjdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gW0RPTS5FbGVtZW50LCBDb250YWluZXIsIFZpZXdTbG90LCBSb3V0ZXIsIFZpZXdMb2NhdG9yLCBDb21wb3NpdGlvblRyYW5zYWN0aW9uLCBDb21wb3NpdGlvbkVuZ2luZV07XHJcbiAgICB9O1xyXG4gICAgUm91dGVyVmlldy5wcm90b3R5cGUuY3JlYXRlZCA9IGZ1bmN0aW9uIChvd25pbmdWaWV3KSB7XHJcbiAgICAgICAgdGhpcy5vd25pbmdWaWV3ID0gb3duaW5nVmlldztcclxuICAgIH07XHJcbiAgICBSb3V0ZXJWaWV3LnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGJpbmRpbmdDb250ZXh0LCBvdmVycmlkZUNvbnRleHQpIHtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lci52aWV3TW9kZWwgPSBiaW5kaW5nQ29udGV4dDtcclxuICAgICAgICB0aGlzLm92ZXJyaWRlQ29udGV4dCA9IG92ZXJyaWRlQ29udGV4dDtcclxuICAgIH07XHJcbiAgICBSb3V0ZXJWaWV3LnByb3RvdHlwZS5wcm9jZXNzID0gZnVuY3Rpb24gKCR2aWV3UG9ydEluc3RydWN0aW9uLCB3YWl0VG9Td2FwKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB2YXIgdmlld1BvcnRJbnN0cnVjdGlvbiA9ICR2aWV3UG9ydEluc3RydWN0aW9uO1xyXG4gICAgICAgIHZhciBjb21wb25lbnQgPSB2aWV3UG9ydEluc3RydWN0aW9uLmNvbXBvbmVudDtcclxuICAgICAgICB2YXIgY2hpbGRDb250YWluZXIgPSBjb21wb25lbnQuY2hpbGRDb250YWluZXI7XHJcbiAgICAgICAgdmFyIHZpZXdNb2RlbCA9IGNvbXBvbmVudC52aWV3TW9kZWw7XHJcbiAgICAgICAgdmFyIHZpZXdNb2RlbFJlc291cmNlID0gY29tcG9uZW50LnZpZXdNb2RlbFJlc291cmNlO1xyXG4gICAgICAgIHZhciBtZXRhZGF0YSA9IHZpZXdNb2RlbFJlc291cmNlLm1ldGFkYXRhO1xyXG4gICAgICAgIHZhciBjb25maWcgPSBjb21wb25lbnQucm91dGVyLmN1cnJlbnRJbnN0cnVjdGlvbi5jb25maWc7XHJcbiAgICAgICAgdmFyIHZpZXdQb3J0Q29uZmlnID0gY29uZmlnLnZpZXdQb3J0cyA/IChjb25maWcudmlld1BvcnRzW3ZpZXdQb3J0SW5zdHJ1Y3Rpb24ubmFtZV0gfHwge30pIDoge307XHJcbiAgICAgICAgY2hpbGRDb250YWluZXIuZ2V0KFJvdXRlclZpZXdMb2NhdG9yKS5fbm90aWZ5KHRoaXMpO1xyXG4gICAgICAgIHZhciBsYXlvdXRJbnN0cnVjdGlvbiA9IHtcclxuICAgICAgICAgICAgdmlld01vZGVsOiB2aWV3UG9ydENvbmZpZy5sYXlvdXRWaWV3TW9kZWwgfHwgY29uZmlnLmxheW91dFZpZXdNb2RlbCB8fCB0aGlzLmxheW91dFZpZXdNb2RlbCxcclxuICAgICAgICAgICAgdmlldzogdmlld1BvcnRDb25maWcubGF5b3V0VmlldyB8fCBjb25maWcubGF5b3V0VmlldyB8fCB0aGlzLmxheW91dFZpZXcsXHJcbiAgICAgICAgICAgIG1vZGVsOiB2aWV3UG9ydENvbmZpZy5sYXlvdXRNb2RlbCB8fCBjb25maWcubGF5b3V0TW9kZWwgfHwgdGhpcy5sYXlvdXRNb2RlbCxcclxuICAgICAgICAgICAgcm91dGVyOiB2aWV3UG9ydEluc3RydWN0aW9uLmNvbXBvbmVudC5yb3V0ZXIsXHJcbiAgICAgICAgICAgIGNoaWxkQ29udGFpbmVyOiBjaGlsZENvbnRhaW5lcixcclxuICAgICAgICAgICAgdmlld1Nsb3Q6IHRoaXMudmlld1Nsb3RcclxuICAgICAgICB9O1xyXG4gICAgICAgIHZhciB2aWV3U3RyYXRlZ3kgPSB0aGlzLnZpZXdMb2NhdG9yLmdldFZpZXdTdHJhdGVneShjb21wb25lbnQudmlldyB8fCB2aWV3TW9kZWwpO1xyXG4gICAgICAgIGlmICh2aWV3U3RyYXRlZ3kgJiYgY29tcG9uZW50LnZpZXcpIHtcclxuICAgICAgICAgICAgdmlld1N0cmF0ZWd5Lm1ha2VSZWxhdGl2ZVRvKE9yaWdpbi5nZXQoY29tcG9uZW50LnJvdXRlci5jb250YWluZXIudmlld01vZGVsLmNvbnN0cnVjdG9yKS5tb2R1bGVJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtZXRhZGF0YVxyXG4gICAgICAgICAgICAubG9hZChjaGlsZENvbnRhaW5lciwgdmlld01vZGVsUmVzb3VyY2UudmFsdWUsIG51bGwsIHZpZXdTdHJhdGVneSwgdHJ1ZSlcclxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHZpZXdGYWN0b3J5KSB7XHJcbiAgICAgICAgICAgIGlmICghX3RoaXMuY29tcG9zaXRpb25UcmFuc2FjdGlvbk5vdGlmaWVyKSB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5jb21wb3NpdGlvblRyYW5zYWN0aW9uT3duZXJzaGlwVG9rZW4gPSBfdGhpcy5jb21wb3NpdGlvblRyYW5zYWN0aW9uLnRyeUNhcHR1cmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobGF5b3V0SW5zdHJ1Y3Rpb24udmlld01vZGVsIHx8IGxheW91dEluc3RydWN0aW9uLnZpZXcpIHtcclxuICAgICAgICAgICAgICAgIHZpZXdQb3J0SW5zdHJ1Y3Rpb24ubGF5b3V0SW5zdHJ1Y3Rpb24gPSBsYXlvdXRJbnN0cnVjdGlvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgdmlld1BvcnRDb21wb25lbnRCZWhhdmlvckluc3RydWN0aW9uID0gQmVoYXZpb3JJbnN0cnVjdGlvbi5keW5hbWljKF90aGlzLmVsZW1lbnQsIHZpZXdNb2RlbCwgdmlld0ZhY3RvcnkpO1xyXG4gICAgICAgICAgICB2aWV3UG9ydEluc3RydWN0aW9uLmNvbnRyb2xsZXIgPSBtZXRhZGF0YS5jcmVhdGUoY2hpbGRDb250YWluZXIsIHZpZXdQb3J0Q29tcG9uZW50QmVoYXZpb3JJbnN0cnVjdGlvbik7XHJcbiAgICAgICAgICAgIGlmICh3YWl0VG9Td2FwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBfdGhpcy5zd2FwKHZpZXdQb3J0SW5zdHJ1Y3Rpb24pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIFJvdXRlclZpZXcucHJvdG90eXBlLnN3YXAgPSBmdW5jdGlvbiAoJHZpZXdQb3J0SW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHZhciB2aWV3UG9ydEluc3RydWN0aW9uID0gJHZpZXdQb3J0SW5zdHJ1Y3Rpb247XHJcbiAgICAgICAgdmFyIHZpZXdQb3J0Q29udHJvbGxlciA9IHZpZXdQb3J0SW5zdHJ1Y3Rpb24uY29udHJvbGxlcjtcclxuICAgICAgICB2YXIgbGF5b3V0SW5zdHJ1Y3Rpb24gPSB2aWV3UG9ydEluc3RydWN0aW9uLmxheW91dEluc3RydWN0aW9uO1xyXG4gICAgICAgIHZhciBwcmV2aW91c1ZpZXcgPSB0aGlzLnZpZXc7XHJcbiAgICAgICAgdmFyIHdvcmsgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBzd2FwU3RyYXRlZ3kgPSBTd2FwU3RyYXRlZ2llc1tfdGhpcy5zd2FwT3JkZXJdIHx8IFN3YXBTdHJhdGVnaWVzLmFmdGVyO1xyXG4gICAgICAgICAgICB2YXIgdmlld1Nsb3QgPSBfdGhpcy52aWV3U2xvdDtcclxuICAgICAgICAgICAgc3dhcFN0cmF0ZWd5KHZpZXdTbG90LCBwcmV2aW91c1ZpZXcsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2aWV3U2xvdC5hZGQoX3RoaXMudmlldykpOyB9KS50aGVuKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLl9ub3RpZnkoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB2YXIgcmVhZHkgPSBmdW5jdGlvbiAob3duaW5nVmlld19vcl9sYXlvdXRWaWV3KSB7XHJcbiAgICAgICAgICAgIHZpZXdQb3J0Q29udHJvbGxlci5hdXRvbWF0ZShfdGhpcy5vdmVycmlkZUNvbnRleHQsIG93bmluZ1ZpZXdfb3JfbGF5b3V0Vmlldyk7XHJcbiAgICAgICAgICAgIHZhciB0cmFuc2FjdGlvbk93bmVyU2hpcFRva2VuID0gX3RoaXMuY29tcG9zaXRpb25UcmFuc2FjdGlvbk93bmVyc2hpcFRva2VuO1xyXG4gICAgICAgICAgICBpZiAodHJhbnNhY3Rpb25Pd25lclNoaXBUb2tlbikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zYWN0aW9uT3duZXJTaGlwVG9rZW5cclxuICAgICAgICAgICAgICAgICAgICAud2FpdEZvckNvbXBvc2l0aW9uQ29tcGxldGUoKVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5jb21wb3NpdGlvblRyYW5zYWN0aW9uT3duZXJzaGlwVG9rZW4gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB3b3JrKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gd29yaygpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKGxheW91dEluc3RydWN0aW9uKSB7XHJcbiAgICAgICAgICAgIGlmICghbGF5b3V0SW5zdHJ1Y3Rpb24udmlld01vZGVsKSB7XHJcbiAgICAgICAgICAgICAgICBsYXlvdXRJbnN0cnVjdGlvbi52aWV3TW9kZWwgPSBuZXcgRW1wdHlMYXlvdXRWaWV3TW9kZWwoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb21wb3NpdGlvbkVuZ2luZVxyXG4gICAgICAgICAgICAgICAgLmNyZWF0ZUNvbnRyb2xsZXIobGF5b3V0SW5zdHJ1Y3Rpb24pXHJcbiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAobGF5b3V0Q29udHJvbGxlcikge1xyXG4gICAgICAgICAgICAgICAgdmFyIGxheW91dFZpZXcgPSBsYXlvdXRDb250cm9sbGVyLnZpZXc7XHJcbiAgICAgICAgICAgICAgICBTaGFkb3dET00uZGlzdHJpYnV0ZVZpZXcodmlld1BvcnRDb250cm9sbGVyLnZpZXcsIGxheW91dENvbnRyb2xsZXIuc2xvdHMgfHwgbGF5b3V0Vmlldy5zbG90cyk7XHJcbiAgICAgICAgICAgICAgICBsYXlvdXRDb250cm9sbGVyLmF1dG9tYXRlKGNyZWF0ZU92ZXJyaWRlQ29udGV4dChsYXlvdXRJbnN0cnVjdGlvbi52aWV3TW9kZWwpLCBfdGhpcy5vd25pbmdWaWV3KTtcclxuICAgICAgICAgICAgICAgIGxheW91dFZpZXcuY2hpbGRyZW4ucHVzaCh2aWV3UG9ydENvbnRyb2xsZXIudmlldyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbGF5b3V0VmlldyB8fCBsYXlvdXRDb250cm9sbGVyO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKG5ld1ZpZXcpIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLnZpZXcgPSBuZXdWaWV3O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlYWR5KG5ld1ZpZXcpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52aWV3ID0gdmlld1BvcnRDb250cm9sbGVyLnZpZXc7XHJcbiAgICAgICAgcmV0dXJuIHJlYWR5KHRoaXMub3duaW5nVmlldyk7XHJcbiAgICB9O1xyXG4gICAgUm91dGVyVmlldy5wcm90b3R5cGUuX25vdGlmeSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgbm90aWZpZXIgPSB0aGlzLmNvbXBvc2l0aW9uVHJhbnNhY3Rpb25Ob3RpZmllcjtcclxuICAgICAgICBpZiAobm90aWZpZXIpIHtcclxuICAgICAgICAgICAgbm90aWZpZXIuZG9uZSgpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbXBvc2l0aW9uVHJhbnNhY3Rpb25Ob3RpZmllciA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIFJvdXRlclZpZXcuJHZpZXcgPSBudWxsO1xyXG4gICAgUm91dGVyVmlldy4kcmVzb3VyY2UgPSB7XHJcbiAgICAgICAgbmFtZTogJ3JvdXRlci12aWV3JyxcclxuICAgICAgICBiaW5kYWJsZXM6IFsnc3dhcE9yZGVyJywgJ2xheW91dFZpZXcnLCAnbGF5b3V0Vmlld01vZGVsJywgJ2xheW91dE1vZGVsJywgJ2luaGVyaXQtYmluZGluZy1jb250ZXh0J11cclxuICAgIH07XHJcbiAgICByZXR1cm4gUm91dGVyVmlldztcclxufSgpKTtcclxudmFyIFJvdXRlclZpZXdMb2NhdG9yID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIFJvdXRlclZpZXdMb2NhdG9yKCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmV0dXJuIF90aGlzLnJlc29sdmUgPSByZXNvbHZlOyB9KTtcclxuICAgIH1cclxuICAgIFJvdXRlclZpZXdMb2NhdG9yLnByb3RvdHlwZS5maW5kTmVhcmVzdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlO1xyXG4gICAgfTtcclxuICAgIFJvdXRlclZpZXdMb2NhdG9yLnByb3RvdHlwZS5fbm90aWZ5ID0gZnVuY3Rpb24gKHJvdXRlclZpZXcpIHtcclxuICAgICAgICB0aGlzLnJlc29sdmUocm91dGVyVmlldyk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIFJvdXRlclZpZXdMb2NhdG9yO1xyXG59KCkpO1xuXG52YXIgRW1wdHlDbGFzcyA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBFbXB0eUNsYXNzKCkge1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIEVtcHR5Q2xhc3M7XHJcbn0oKSk7XHJcbmlubGluZVZpZXcoJzx0ZW1wbGF0ZT48L3RlbXBsYXRlPicpKEVtcHR5Q2xhc3MpO1xyXG52YXIgVGVtcGxhdGluZ1JvdXRlTG9hZGVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcclxuICAgIF9fZXh0ZW5kcyhUZW1wbGF0aW5nUm91dGVMb2FkZXIsIF9zdXBlcik7XHJcbiAgICBmdW5jdGlvbiBUZW1wbGF0aW5nUm91dGVMb2FkZXIoY29tcG9zaXRpb25FbmdpbmUpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xyXG4gICAgICAgIF90aGlzLmNvbXBvc2l0aW9uRW5naW5lID0gY29tcG9zaXRpb25FbmdpbmU7XHJcbiAgICAgICAgcmV0dXJuIF90aGlzO1xyXG4gICAgfVxyXG4gICAgVGVtcGxhdGluZ1JvdXRlTG9hZGVyLnByb3RvdHlwZS5yZXNvbHZlVmlld01vZGVsID0gZnVuY3Rpb24gKHJvdXRlciwgY29uZmlnKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICAgICAgdmFyIHZpZXdNb2RlbDtcclxuICAgICAgICAgICAgaWYgKCdtb2R1bGVJZCcgaW4gY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbW9kdWxlSWQgPSBjb25maWcubW9kdWxlSWQ7XHJcbiAgICAgICAgICAgICAgICBpZiAobW9kdWxlSWQgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICB2aWV3TW9kZWwgPSBFbXB0eUNsYXNzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbW9kdWxlSWQgPSByZWxhdGl2ZVRvRmlsZShtb2R1bGVJZCwgT3JpZ2luLmdldChyb3V0ZXIuY29udGFpbmVyLnZpZXdNb2RlbC5jb25zdHJ1Y3RvcikubW9kdWxlSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgvXFwuaHRtbC9pLnRlc3QobW9kdWxlSWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlbCA9IGNyZWF0ZUR5bmFtaWNDbGFzcyhtb2R1bGVJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3TW9kZWwgPSBtb2R1bGVJZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh2aWV3TW9kZWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0ludmFsaWQgcm91dGUgY29uZmlnLiBObyBcIm1vZHVsZUlkXCIgZm91bmQuJykpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIFRlbXBsYXRpbmdSb3V0ZUxvYWRlci5wcm90b3R5cGUuY3JlYXRlQ2hpbGRDb250YWluZXIgPSBmdW5jdGlvbiAocm91dGVyKSB7XHJcbiAgICAgICAgdmFyIGNoaWxkQ29udGFpbmVyID0gcm91dGVyLmNvbnRhaW5lci5jcmVhdGVDaGlsZCgpO1xyXG4gICAgICAgIGNoaWxkQ29udGFpbmVyLnJlZ2lzdGVyU2luZ2xldG9uKFJvdXRlclZpZXdMb2NhdG9yKTtcclxuICAgICAgICBjaGlsZENvbnRhaW5lci5nZXRDaGlsZFJvdXRlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIGNoaWxkUm91dGVyO1xyXG4gICAgICAgICAgICBjaGlsZENvbnRhaW5lci5yZWdpc3RlckhhbmRsZXIoUm91dGVyLCBmdW5jdGlvbiAoKSB7IHJldHVybiBjaGlsZFJvdXRlciB8fCAoY2hpbGRSb3V0ZXIgPSByb3V0ZXIuY3JlYXRlQ2hpbGQoY2hpbGRDb250YWluZXIpKTsgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiBjaGlsZENvbnRhaW5lci5nZXQoUm91dGVyKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBjaGlsZENvbnRhaW5lcjtcclxuICAgIH07XHJcbiAgICBUZW1wbGF0aW5nUm91dGVMb2FkZXIucHJvdG90eXBlLmxvYWRSb3V0ZSA9IGZ1bmN0aW9uIChyb3V0ZXIsIGNvbmZpZywgbmF2SW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICAgICAgICAgIC5yZXNvbHZlVmlld01vZGVsKHJvdXRlciwgY29uZmlnKVxyXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAodmlld01vZGVsKSB7IHJldHVybiBfdGhpcy5jb21wb3NpdGlvbkVuZ2luZS5lbnN1cmVWaWV3TW9kZWwoe1xyXG4gICAgICAgICAgICB2aWV3TW9kZWw6IHZpZXdNb2RlbCxcclxuICAgICAgICAgICAgY2hpbGRDb250YWluZXI6IF90aGlzLmNyZWF0ZUNoaWxkQ29udGFpbmVyKHJvdXRlciksXHJcbiAgICAgICAgICAgIHZpZXc6IGNvbmZpZy52aWV3IHx8IGNvbmZpZy52aWV3U3RyYXRlZ3ksXHJcbiAgICAgICAgICAgIHJvdXRlcjogcm91dGVyXHJcbiAgICAgICAgfSk7IH0pO1xyXG4gICAgfTtcclxuICAgIFRlbXBsYXRpbmdSb3V0ZUxvYWRlci5pbmplY3QgPSBbQ29tcG9zaXRpb25FbmdpbmVdO1xyXG4gICAgcmV0dXJuIFRlbXBsYXRpbmdSb3V0ZUxvYWRlcjtcclxufShSb3V0ZUxvYWRlcikpO1xyXG5mdW5jdGlvbiBjcmVhdGVEeW5hbWljQ2xhc3MobW9kdWxlSWQpIHtcclxuICAgIHZhciBuYW1lID0gLyhbXlxcL15cXD9dKylcXC5odG1sL2kuZXhlYyhtb2R1bGVJZClbMV07XHJcbiAgICB2YXIgRHluYW1pY0NsYXNzID0gKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBmdW5jdGlvbiBEeW5hbWljQ2xhc3MoKSB7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIER5bmFtaWNDbGFzcy5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChiaW5kaW5nQ29udGV4dCkge1xyXG4gICAgICAgICAgICB0aGlzLiRwYXJlbnQgPSBiaW5kaW5nQ29udGV4dDtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBEeW5hbWljQ2xhc3M7XHJcbiAgICB9KCkpO1xyXG4gICAgY3VzdG9tRWxlbWVudChuYW1lKShEeW5hbWljQ2xhc3MpO1xyXG4gICAgdXNlVmlldyhtb2R1bGVJZCkoRHluYW1pY0NsYXNzKTtcclxuICAgIHJldHVybiBEeW5hbWljQ2xhc3M7XHJcbn1cblxudmFyIGxvZ2dlciA9IExvZ01hbmFnZXIuZ2V0TG9nZ2VyKCdyb3V0ZS1ocmVmJyk7XHJcbnZhciBSb3V0ZUhyZWYgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gUm91dGVIcmVmKHJvdXRlciwgZWxlbWVudCkge1xyXG4gICAgICAgIHRoaXMucm91dGVyID0gcm91dGVyO1xyXG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGUgPSAnaHJlZic7XHJcbiAgICB9XHJcbiAgICBSb3V0ZUhyZWYuaW5qZWN0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBbUm91dGVyLCBET00uRWxlbWVudF07XHJcbiAgICB9O1xyXG4gICAgUm91dGVIcmVmLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuaXNBY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucHJvY2Vzc0NoYW5nZSgpO1xyXG4gICAgfTtcclxuICAgIFJvdXRlSHJlZi5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcclxuICAgIH07XHJcbiAgICBSb3V0ZUhyZWYucHJvdG90eXBlLmF0dHJpYnV0ZUNoYW5nZWQgPSBmdW5jdGlvbiAodmFsdWUsIHByZXZpb3VzKSB7XHJcbiAgICAgICAgaWYgKHByZXZpb3VzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUocHJldmlvdXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzQ2hhbmdlKCk7XHJcbiAgICB9O1xyXG4gICAgUm91dGVIcmVmLnByb3RvdHlwZS5wcm9jZXNzQ2hhbmdlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucm91dGVyXHJcbiAgICAgICAgICAgIC5lbnN1cmVDb25maWd1cmVkKClcclxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzQWN0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgZWxlbWVudCA9IF90aGlzLmVsZW1lbnQ7XHJcbiAgICAgICAgICAgIHZhciBocmVmID0gX3RoaXMucm91dGVyLmdlbmVyYXRlKF90aGlzLnJvdXRlLCBfdGhpcy5wYXJhbXMpO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5hdS5jb250cm9sbGVyKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50LmF1LmNvbnRyb2xsZXIudmlld01vZGVsW190aGlzLmF0dHJpYnV0ZV0gPSBocmVmO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoX3RoaXMuYXR0cmlidXRlLCBocmVmKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKHJlYXNvbikge1xyXG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IocmVhc29uKTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICBSb3V0ZUhyZWYuJHJlc291cmNlID0ge1xyXG4gICAgICAgIHR5cGU6ICdhdHRyaWJ1dGUnLFxyXG4gICAgICAgIG5hbWU6ICdyb3V0ZS1ocmVmJyxcclxuICAgICAgICBiaW5kYWJsZXM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAncm91dGUnLCBjaGFuZ2VIYW5kbGVyOiAncHJvY2Vzc0NoYW5nZScsIHByaW1hcnlQcm9wZXJ0eTogdHJ1ZSB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdwYXJhbXMnLCBjaGFuZ2VIYW5kbGVyOiAncHJvY2Vzc0NoYW5nZScgfSxcclxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSdcclxuICAgICAgICBdXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIFJvdXRlSHJlZjtcclxufSgpKTtcblxuZnVuY3Rpb24gY29uZmlndXJlKGNvbmZpZykge1xyXG4gICAgY29uZmlnXHJcbiAgICAgICAgLnNpbmdsZXRvbihSb3V0ZUxvYWRlciwgVGVtcGxhdGluZ1JvdXRlTG9hZGVyKVxyXG4gICAgICAgIC5zaW5nbGV0b24oUm91dGVyLCBBcHBSb3V0ZXIpXHJcbiAgICAgICAgLmdsb2JhbFJlc291cmNlcyhSb3V0ZXJWaWV3LCBSb3V0ZUhyZWYpO1xyXG4gICAgY29uZmlnLmNvbnRhaW5lci5yZWdpc3RlckFsaWFzKFJvdXRlciwgQXBwUm91dGVyKTtcclxufVxuXG5leHBvcnQgeyBSb3V0ZUhyZWYsIFJvdXRlclZpZXcsIFJvdXRlclZpZXdMb2NhdG9yLCBUZW1wbGF0aW5nUm91dGVMb2FkZXIsIGNvbmZpZ3VyZSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXVyZWxpYS10ZW1wbGF0aW5nLXJvdXRlci5qcy5tYXBcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///aurelia-templating-router\n')},"aurelia-validation":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AureliaValidationConfiguration", function() { return AureliaValidationConfiguration; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "configure", function() { return configure; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getTargetDOMElement", function() { return getTargetDOMElement; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getPropertyInfo", function() { return getPropertyInfo; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PropertyAccessorParser", function() { return PropertyAccessorParser; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getAccessorExpression", function() { return getAccessorExpression; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ValidateBindingBehavior", function() { return ValidateBindingBehavior; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ValidateManuallyBindingBehavior", function() { return ValidateManuallyBindingBehavior; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ValidateOnBlurBindingBehavior", function() { return ValidateOnBlurBindingBehavior; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ValidateOnChangeBindingBehavior", function() { return ValidateOnChangeBindingBehavior; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ValidateOnChangeOrBlurBindingBehavior", function() { return ValidateOnChangeOrBlurBindingBehavior; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ValidateEvent", function() { return ValidateEvent; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ValidateResult", function() { return ValidateResult; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "validateTrigger", function() { return validateTrigger; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ValidationController", function() { return ValidationController; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ValidationControllerFactory", function() { return ValidationControllerFactory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ValidationErrorsCustomAttribute", function() { return ValidationErrorsCustomAttribute; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ValidationRendererCustomAttribute", function() { return ValidationRendererCustomAttribute; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Validator", function() { return Validator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Rules", function() { return Rules; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "StandardValidator", function() { return StandardValidator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "validationMessages", function() { return validationMessages; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ValidationMessageProvider", function() { return ValidationMessageProvider; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ValidationMessageParser", function() { return ValidationMessageParser; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MessageExpressionValidator", function() { return MessageExpressionValidator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FluentRuleCustomizer", function() { return FluentRuleCustomizer; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FluentRules", function() { return FluentRules; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FluentEnsure", function() { return FluentEnsure; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ValidationRules", function() { return ValidationRules; });\n/* harmony import */ var aurelia_pal__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0);\n/* harmony import */ var aurelia_binding__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1);\n/* harmony import */ var aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6);\n/* harmony import */ var aurelia_task_queue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(10);\n/* harmony import */ var aurelia_templating__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(3);\n/* harmony import */ var aurelia_framework__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("aurelia-framework");\n/* harmony import */ var aurelia_logging__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(5);\n\n\n\n\n\n\n\n\n/**\r\n * Gets the DOM element associated with the data-binding. Most of the time it\'s\r\n * the binding.target but sometimes binding.target is an aurelia custom element,\r\n * or custom attribute which is a javascript "class" instance, so we need to use\r\n * the controller\'s container to retrieve the actual DOM element.\r\n */\r\nfunction getTargetDOMElement(binding, view) {\r\n    var target = binding.target;\r\n    // DOM element\r\n    if (target instanceof Element) {\r\n        return target;\r\n    }\r\n    // custom element or custom attribute\r\n    // tslint:disable-next-line:prefer-const\r\n    for (var i = 0, ii = view.controllers.length; i < ii; i++) {\r\n        var controller = view.controllers[i];\r\n        if (controller.viewModel === target) {\r\n            var element = controller.container.get(aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* DOM */ "b"].Element);\r\n            if (element) {\r\n                return element;\r\n            }\r\n            throw new Error("Unable to locate target element for \\"" + binding.sourceExpression + "\\".");\r\n        }\r\n    }\r\n    throw new Error("Unable to locate target element for \\"" + binding.sourceExpression + "\\".");\r\n}\n\nfunction getObject(expression, objectExpression, source) {\r\n    var value = objectExpression.evaluate(source, null);\r\n    if (value === null || value === undefined || value instanceof Object) {\r\n        return value;\r\n    }\r\n    // tslint:disable-next-line:max-line-length\r\n    throw new Error("The \'" + objectExpression + "\' part of \'" + expression + "\' evaluates to " + value + " instead of an object, null or undefined.");\r\n}\r\n/**\r\n * Retrieves the object and property name for the specified expression.\r\n * @param expression The expression\r\n * @param source The scope\r\n */\r\nfunction getPropertyInfo(expression, source) {\r\n    var originalExpression = expression;\r\n    while (expression instanceof aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["BindingBehavior"] || expression instanceof aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["ValueConverter"]) {\r\n        expression = expression.expression;\r\n    }\r\n    var object;\r\n    var propertyName;\r\n    if (expression instanceof aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["AccessScope"]) {\r\n        object = Object(aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["getContextFor"])(expression.name, source, expression.ancestor);\r\n        propertyName = expression.name;\r\n    }\r\n    else if (expression instanceof aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["AccessMember"]) {\r\n        object = getObject(originalExpression, expression.object, source);\r\n        propertyName = expression.name;\r\n    }\r\n    else if (expression instanceof aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["AccessKeyed"]) {\r\n        object = getObject(originalExpression, expression.object, source);\r\n        propertyName = expression.key.evaluate(source);\r\n    }\r\n    else {\r\n        throw new Error("Expression \'" + originalExpression + "\' is not compatible with the validate binding-behavior.");\r\n    }\r\n    if (object === null || object === undefined) {\r\n        return null;\r\n    }\r\n    return { object: object, propertyName: propertyName };\r\n}\n\nfunction isString(value) {\r\n    return Object.prototype.toString.call(value) === \'[object String]\';\r\n}\r\nfunction isNumber(value) {\r\n    return Object.prototype.toString.call(value) === \'[object Number]\';\r\n}\n\nvar PropertyAccessorParser = /** @class */ (function () {\r\n    function PropertyAccessorParser(parser) {\r\n        this.parser = parser;\r\n    }\r\n    PropertyAccessorParser.prototype.parse = function (property) {\r\n        if (isString(property) || isNumber(property)) {\r\n            return property;\r\n        }\r\n        var accessorText = getAccessorExpression(property.toString());\r\n        var accessor = this.parser.parse(accessorText);\r\n        if (accessor instanceof aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["AccessScope"]\r\n            || accessor instanceof aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["AccessMember"] && accessor.object instanceof aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["AccessScope"]) {\r\n            return accessor.name;\r\n        }\r\n        throw new Error("Invalid property expression: \\"" + accessor + "\\"");\r\n    };\r\n    PropertyAccessorParser.inject = [aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["Parser"]];\r\n    return PropertyAccessorParser;\r\n}());\r\nfunction getAccessorExpression(fn) {\r\n    /* tslint:disable:max-line-length */\r\n    var classic = /^function\\s*\\([$_\\w\\d]+\\)\\s*\\{(?:\\s*"use strict";)?\\s*(?:[$_\\w\\d.[\'"\\]+;]+)?\\s*return\\s+[$_\\w\\d]+\\.([$_\\w\\d]+)\\s*;?\\s*\\}$/;\r\n    /* tslint:enable:max-line-length */\r\n    var arrow = /^\\(?[$_\\w\\d]+\\)?\\s*=>\\s*[$_\\w\\d]+\\.([$_\\w\\d]+)$/;\r\n    var match = classic.exec(fn) || arrow.exec(fn);\r\n    if (match === null) {\r\n        throw new Error("Unable to parse accessor function:\\n" + fn);\r\n    }\r\n    return match[1];\r\n}\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the "License"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nfunction __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\n\n/**\r\n * Validation triggers.\r\n */\r\nvar validateTrigger;\r\n(function (validateTrigger) {\r\n    /**\r\n     * Manual validation.  Use the controller\'s `validate()` and  `reset()` methods\r\n     * to validate all bindings.\r\n     */\r\n    validateTrigger[validateTrigger["manual"] = 0] = "manual";\r\n    /**\r\n     * Validate the binding when the binding\'s target element fires a DOM "blur" event.\r\n     */\r\n    validateTrigger[validateTrigger["blur"] = 1] = "blur";\r\n    /**\r\n     * Validate the binding when it updates the model due to a change in the view.\r\n     */\r\n    validateTrigger[validateTrigger["change"] = 2] = "change";\r\n    /**\r\n     * Validate the binding when the binding\'s target element fires a DOM "blur" event and\r\n     * when it updates the model due to a change in the view.\r\n     */\r\n    validateTrigger[validateTrigger["changeOrBlur"] = 3] = "changeOrBlur";\r\n})(validateTrigger || (validateTrigger = {}));\n\n/**\r\n * Validates objects and properties.\r\n */\r\nvar Validator = /** @class */ (function () {\r\n    function Validator() {\r\n    }\r\n    return Validator;\r\n}());\n\n/**\r\n * The result of validating an individual validation rule.\r\n */\r\nvar ValidateResult = /** @class */ (function () {\r\n    /**\r\n     * @param rule The rule associated with the result. Validator implementation specific.\r\n     * @param object The object that was validated.\r\n     * @param propertyName The name of the property that was validated.\r\n     * @param error The error, if the result is a validation error.\r\n     */\r\n    function ValidateResult(rule, object, propertyName, valid, message) {\r\n        if (message === void 0) { message = null; }\r\n        this.rule = rule;\r\n        this.object = object;\r\n        this.propertyName = propertyName;\r\n        this.valid = valid;\r\n        this.message = message;\r\n        this.id = ValidateResult.nextId++;\r\n    }\r\n    ValidateResult.prototype.toString = function () {\r\n        return this.valid ? \'Valid.\' : this.message;\r\n    };\r\n    ValidateResult.nextId = 0;\r\n    return ValidateResult;\r\n}());\n\nvar ValidateEvent = /** @class */ (function () {\r\n    function ValidateEvent(\r\n    /**\r\n     * The type of validate event. Either "validate" or "reset".\r\n     */\r\n    type, \r\n    /**\r\n     * The controller\'s current array of errors. For an array containing both\r\n     * failed rules and passed rules, use the "results" property.\r\n     */\r\n    errors, \r\n    /**\r\n     * The controller\'s current array of validate results. This\r\n     * includes both passed rules and failed rules. For an array of only failed rules,\r\n     * use the "errors" property.\r\n     */\r\n    results, \r\n    /**\r\n     * The instruction passed to the "validate" or "reset" event. Will be null when\r\n     * the controller\'s validate/reset method was called with no instruction argument.\r\n     */\r\n    instruction, \r\n    /**\r\n     * In events with type === "validate", this property will contain the result\r\n     * of validating the instruction (see "instruction" property). Use the controllerValidateResult\r\n     * to access the validate results specific to the call to "validate"\r\n     * (as opposed to using the "results" and "errors" properties to access the controller\'s entire\r\n     * set of results/errors).\r\n     */\r\n    controllerValidateResult) {\r\n        this.type = type;\r\n        this.errors = errors;\r\n        this.results = results;\r\n        this.instruction = instruction;\r\n        this.controllerValidateResult = controllerValidateResult;\r\n    }\r\n    return ValidateEvent;\r\n}());\n\n/**\r\n * Orchestrates validation.\r\n * Manages a set of bindings, renderers and objects.\r\n * Exposes the current list of validation results for binding purposes.\r\n */\r\nvar ValidationController = /** @class */ (function () {\r\n    function ValidationController(validator, propertyParser) {\r\n        this.validator = validator;\r\n        this.propertyParser = propertyParser;\r\n        // Registered bindings (via the validate binding behavior)\r\n        this.bindings = new Map();\r\n        // Renderers that have been added to the controller instance.\r\n        this.renderers = [];\r\n        /**\r\n         * Validation results that have been rendered by the controller.\r\n         */\r\n        this.results = [];\r\n        /**\r\n         * Validation errors that have been rendered by the controller.\r\n         */\r\n        this.errors = [];\r\n        /**\r\n         *  Whether the controller is currently validating.\r\n         */\r\n        this.validating = false;\r\n        // Elements related to validation results that have been rendered.\r\n        this.elements = new Map();\r\n        // Objects that have been added to the controller instance (entity-style validation).\r\n        this.objects = new Map();\r\n        /**\r\n         * The trigger that will invoke automatic validation of a property used in a binding.\r\n         */\r\n        this.validateTrigger = validateTrigger.blur;\r\n        // Promise that resolves when validation has completed.\r\n        this.finishValidating = Promise.resolve();\r\n        this.eventCallbacks = [];\r\n    }\r\n    /**\r\n     * Subscribe to controller validate and reset events. These events occur when the\r\n     * controller\'s "validate"" and "reset" methods are called.\r\n     * @param callback The callback to be invoked when the controller validates or resets.\r\n     */\r\n    ValidationController.prototype.subscribe = function (callback) {\r\n        var _this = this;\r\n        this.eventCallbacks.push(callback);\r\n        return {\r\n            dispose: function () {\r\n                var index = _this.eventCallbacks.indexOf(callback);\r\n                if (index === -1) {\r\n                    return;\r\n                }\r\n                _this.eventCallbacks.splice(index, 1);\r\n            }\r\n        };\r\n    };\r\n    /**\r\n     * Adds an object to the set of objects that should be validated when validate is called.\r\n     * @param object The object.\r\n     * @param rules Optional. The rules. If rules aren\'t supplied the Validator implementation will lookup the rules.\r\n     */\r\n    ValidationController.prototype.addObject = function (object, rules) {\r\n        this.objects.set(object, rules);\r\n    };\r\n    /**\r\n     * Removes an object from the set of objects that should be validated when validate is called.\r\n     * @param object The object.\r\n     */\r\n    ValidationController.prototype.removeObject = function (object) {\r\n        this.objects.delete(object);\r\n        this.processResultDelta(\'reset\', this.results.filter(function (result) { return result.object === object; }), []);\r\n    };\r\n    /**\r\n     * Adds and renders an error.\r\n     */\r\n    ValidationController.prototype.addError = function (message, object, propertyName) {\r\n        if (propertyName === void 0) { propertyName = null; }\r\n        var resolvedPropertyName;\r\n        if (propertyName === null) {\r\n            resolvedPropertyName = propertyName;\r\n        }\r\n        else {\r\n            resolvedPropertyName = this.propertyParser.parse(propertyName);\r\n        }\r\n        var result = new ValidateResult({ __manuallyAdded__: true }, object, resolvedPropertyName, false, message);\r\n        this.processResultDelta(\'validate\', [], [result]);\r\n        return result;\r\n    };\r\n    /**\r\n     * Removes and unrenders an error.\r\n     */\r\n    ValidationController.prototype.removeError = function (result) {\r\n        if (this.results.indexOf(result) !== -1) {\r\n            this.processResultDelta(\'reset\', [result], []);\r\n        }\r\n    };\r\n    /**\r\n     * Adds a renderer.\r\n     * @param renderer The renderer.\r\n     */\r\n    ValidationController.prototype.addRenderer = function (renderer) {\r\n        var _this = this;\r\n        this.renderers.push(renderer);\r\n        renderer.render({\r\n            kind: \'validate\',\r\n            render: this.results.map(function (result) { return ({ result: result, elements: _this.elements.get(result) }); }),\r\n            unrender: []\r\n        });\r\n    };\r\n    /**\r\n     * Removes a renderer.\r\n     * @param renderer The renderer.\r\n     */\r\n    ValidationController.prototype.removeRenderer = function (renderer) {\r\n        var _this = this;\r\n        this.renderers.splice(this.renderers.indexOf(renderer), 1);\r\n        renderer.render({\r\n            kind: \'reset\',\r\n            render: [],\r\n            unrender: this.results.map(function (result) { return ({ result: result, elements: _this.elements.get(result) }); })\r\n        });\r\n    };\r\n    /**\r\n     * Registers a binding with the controller.\r\n     * @param binding The binding instance.\r\n     * @param target The DOM element.\r\n     * @param rules (optional) rules associated with the binding. Validator implementation specific.\r\n     */\r\n    ValidationController.prototype.registerBinding = function (binding, target, rules) {\r\n        this.bindings.set(binding, { target: target, rules: rules, propertyInfo: null });\r\n    };\r\n    /**\r\n     * Unregisters a binding with the controller.\r\n     * @param binding The binding instance.\r\n     */\r\n    ValidationController.prototype.unregisterBinding = function (binding) {\r\n        this.resetBinding(binding);\r\n        this.bindings.delete(binding);\r\n    };\r\n    /**\r\n     * Interprets the instruction and returns a predicate that will identify\r\n     * relevant results in the list of rendered validation results.\r\n     */\r\n    ValidationController.prototype.getInstructionPredicate = function (instruction) {\r\n        var _this = this;\r\n        if (instruction) {\r\n            var object_1 = instruction.object, propertyName_1 = instruction.propertyName, rules_1 = instruction.rules;\r\n            var predicate_1;\r\n            if (instruction.propertyName) {\r\n                predicate_1 = function (x) { return x.object === object_1 && x.propertyName === propertyName_1; };\r\n            }\r\n            else {\r\n                predicate_1 = function (x) { return x.object === object_1; };\r\n            }\r\n            if (rules_1) {\r\n                return function (x) { return predicate_1(x) && _this.validator.ruleExists(rules_1, x.rule); };\r\n            }\r\n            return predicate_1;\r\n        }\r\n        else {\r\n            return function () { return true; };\r\n        }\r\n    };\r\n    /**\r\n     * Validates and renders results.\r\n     * @param instruction Optional. Instructions on what to validate. If undefined, all\r\n     * objects and bindings will be validated.\r\n     */\r\n    ValidationController.prototype.validate = function (instruction) {\r\n        var _this = this;\r\n        // Get a function that will process the validation instruction.\r\n        var execute;\r\n        if (instruction) {\r\n            // tslint:disable-next-line:prefer-const\r\n            var object_2 = instruction.object, propertyName_2 = instruction.propertyName, rules_2 = instruction.rules;\r\n            // if rules were not specified, check the object map.\r\n            rules_2 = rules_2 || this.objects.get(object_2);\r\n            // property specified?\r\n            if (instruction.propertyName === undefined) {\r\n                // validate the specified object.\r\n                execute = function () { return _this.validator.validateObject(object_2, rules_2); };\r\n            }\r\n            else {\r\n                // validate the specified property.\r\n                execute = function () { return _this.validator.validateProperty(object_2, propertyName_2, rules_2); };\r\n            }\r\n        }\r\n        else {\r\n            // validate all objects and bindings.\r\n            execute = function () {\r\n                var promises = [];\r\n                for (var _i = 0, _a = Array.from(_this.objects); _i < _a.length; _i++) {\r\n                    var _b = _a[_i], object = _b[0], rules = _b[1];\r\n                    promises.push(_this.validator.validateObject(object, rules));\r\n                }\r\n                for (var _c = 0, _d = Array.from(_this.bindings); _c < _d.length; _c++) {\r\n                    var _e = _d[_c], binding = _e[0], rules = _e[1].rules;\r\n                    var propertyInfo = getPropertyInfo(binding.sourceExpression, binding.source);\r\n                    if (!propertyInfo || _this.objects.has(propertyInfo.object)) {\r\n                        continue;\r\n                    }\r\n                    promises.push(_this.validator.validateProperty(propertyInfo.object, propertyInfo.propertyName, rules));\r\n                }\r\n                return Promise.all(promises).then(function (resultSets) { return resultSets.reduce(function (a, b) { return a.concat(b); }, []); });\r\n            };\r\n        }\r\n        // Wait for any existing validation to finish, execute the instruction, render the results.\r\n        this.validating = true;\r\n        var returnPromise = this.finishValidating\r\n            .then(execute)\r\n            .then(function (newResults) {\r\n            var predicate = _this.getInstructionPredicate(instruction);\r\n            var oldResults = _this.results.filter(predicate);\r\n            _this.processResultDelta(\'validate\', oldResults, newResults);\r\n            if (returnPromise === _this.finishValidating) {\r\n                _this.validating = false;\r\n            }\r\n            var result = {\r\n                instruction: instruction,\r\n                valid: newResults.find(function (x) { return !x.valid; }) === undefined,\r\n                results: newResults\r\n            };\r\n            _this.invokeCallbacks(instruction, result);\r\n            return result;\r\n        })\r\n            .catch(function (exception) {\r\n            // recover, to enable subsequent calls to validate()\r\n            _this.validating = false;\r\n            _this.finishValidating = Promise.resolve();\r\n            return Promise.reject(exception);\r\n        });\r\n        this.finishValidating = returnPromise;\r\n        return returnPromise;\r\n    };\r\n    /**\r\n     * Resets any rendered validation results (unrenders).\r\n     * @param instruction Optional. Instructions on what to reset. If unspecified all rendered results\r\n     * will be unrendered.\r\n     */\r\n    ValidationController.prototype.reset = function (instruction) {\r\n        var predicate = this.getInstructionPredicate(instruction);\r\n        var oldResults = this.results.filter(predicate);\r\n        this.processResultDelta(\'reset\', oldResults, []);\r\n        this.invokeCallbacks(instruction, null);\r\n    };\r\n    /**\r\n     * Gets the elements associated with an object and propertyName (if any).\r\n     */\r\n    ValidationController.prototype.getAssociatedElements = function (_a) {\r\n        var object = _a.object, propertyName = _a.propertyName;\r\n        var elements = [];\r\n        for (var _i = 0, _b = Array.from(this.bindings); _i < _b.length; _i++) {\r\n            var _c = _b[_i], binding = _c[0], target = _c[1].target;\r\n            var propertyInfo = getPropertyInfo(binding.sourceExpression, binding.source);\r\n            if (propertyInfo && propertyInfo.object === object && propertyInfo.propertyName === propertyName) {\r\n                elements.push(target);\r\n            }\r\n        }\r\n        return elements;\r\n    };\r\n    ValidationController.prototype.processResultDelta = function (kind, oldResults, newResults) {\r\n        // prepare the instruction.\r\n        var instruction = {\r\n            kind: kind,\r\n            render: [],\r\n            unrender: []\r\n        };\r\n        // create a shallow copy of newResults so we can mutate it without causing side-effects.\r\n        newResults = newResults.slice(0);\r\n        var _loop_1 = function (oldResult) {\r\n            // get the elements associated with the old result.\r\n            var elements = this_1.elements.get(oldResult);\r\n            // remove the old result from the element map.\r\n            this_1.elements.delete(oldResult);\r\n            // create the unrender instruction.\r\n            instruction.unrender.push({ result: oldResult, elements: elements });\r\n            // determine if there\'s a corresponding new result for the old result we are unrendering.\r\n            var newResultIndex = newResults.findIndex(function (x) { return x.rule === oldResult.rule && x.object === oldResult.object && x.propertyName === oldResult.propertyName; });\r\n            if (newResultIndex === -1) {\r\n                // no corresponding new result... simple remove.\r\n                this_1.results.splice(this_1.results.indexOf(oldResult), 1);\r\n                if (!oldResult.valid) {\r\n                    this_1.errors.splice(this_1.errors.indexOf(oldResult), 1);\r\n                }\r\n            }\r\n            else {\r\n                // there is a corresponding new result...\r\n                var newResult = newResults.splice(newResultIndex, 1)[0];\r\n                // get the elements that are associated with the new result.\r\n                var elements_1 = this_1.getAssociatedElements(newResult);\r\n                this_1.elements.set(newResult, elements_1);\r\n                // create a render instruction for the new result.\r\n                instruction.render.push({ result: newResult, elements: elements_1 });\r\n                // do an in-place replacement of the old result with the new result.\r\n                // this ensures any repeats bound to this.results will not thrash.\r\n                this_1.results.splice(this_1.results.indexOf(oldResult), 1, newResult);\r\n                if (!oldResult.valid && newResult.valid) {\r\n                    this_1.errors.splice(this_1.errors.indexOf(oldResult), 1);\r\n                }\r\n                else if (!oldResult.valid && !newResult.valid) {\r\n                    this_1.errors.splice(this_1.errors.indexOf(oldResult), 1, newResult);\r\n                }\r\n                else if (!newResult.valid) {\r\n                    this_1.errors.push(newResult);\r\n                }\r\n            }\r\n        };\r\n        var this_1 = this;\r\n        // create unrender instructions from the old results.\r\n        for (var _i = 0, oldResults_1 = oldResults; _i < oldResults_1.length; _i++) {\r\n            var oldResult = oldResults_1[_i];\r\n            _loop_1(oldResult);\r\n        }\r\n        // create render instructions from the remaining new results.\r\n        for (var _a = 0, newResults_1 = newResults; _a < newResults_1.length; _a++) {\r\n            var result = newResults_1[_a];\r\n            var elements = this.getAssociatedElements(result);\r\n            instruction.render.push({ result: result, elements: elements });\r\n            this.elements.set(result, elements);\r\n            this.results.push(result);\r\n            if (!result.valid) {\r\n                this.errors.push(result);\r\n            }\r\n        }\r\n        // render.\r\n        for (var _b = 0, _c = this.renderers; _b < _c.length; _b++) {\r\n            var renderer = _c[_b];\r\n            renderer.render(instruction);\r\n        }\r\n    };\r\n    /**\r\n     * Validates the property associated with a binding.\r\n     */\r\n    ValidationController.prototype.validateBinding = function (binding) {\r\n        if (!binding.isBound) {\r\n            return;\r\n        }\r\n        var propertyInfo = getPropertyInfo(binding.sourceExpression, binding.source);\r\n        var rules;\r\n        var registeredBinding = this.bindings.get(binding);\r\n        if (registeredBinding) {\r\n            rules = registeredBinding.rules;\r\n            registeredBinding.propertyInfo = propertyInfo;\r\n        }\r\n        if (!propertyInfo) {\r\n            return;\r\n        }\r\n        var object = propertyInfo.object, propertyName = propertyInfo.propertyName;\r\n        this.validate({ object: object, propertyName: propertyName, rules: rules });\r\n    };\r\n    /**\r\n     * Resets the results for a property associated with a binding.\r\n     */\r\n    ValidationController.prototype.resetBinding = function (binding) {\r\n        var registeredBinding = this.bindings.get(binding);\r\n        var propertyInfo = getPropertyInfo(binding.sourceExpression, binding.source);\r\n        if (!propertyInfo && registeredBinding) {\r\n            propertyInfo = registeredBinding.propertyInfo;\r\n        }\r\n        if (registeredBinding) {\r\n            registeredBinding.propertyInfo = null;\r\n        }\r\n        if (!propertyInfo) {\r\n            return;\r\n        }\r\n        var object = propertyInfo.object, propertyName = propertyInfo.propertyName;\r\n        this.reset({ object: object, propertyName: propertyName });\r\n    };\r\n    /**\r\n     * Changes the controller\'s validateTrigger.\r\n     * @param newTrigger The new validateTrigger\r\n     */\r\n    ValidationController.prototype.changeTrigger = function (newTrigger) {\r\n        this.validateTrigger = newTrigger;\r\n        var bindings = Array.from(this.bindings.keys());\r\n        for (var _i = 0, bindings_1 = bindings; _i < bindings_1.length; _i++) {\r\n            var binding = bindings_1[_i];\r\n            var source = binding.source;\r\n            binding.unbind();\r\n            binding.bind(source);\r\n        }\r\n    };\r\n    /**\r\n     * Revalidates the controller\'s current set of errors.\r\n     */\r\n    ValidationController.prototype.revalidateErrors = function () {\r\n        for (var _i = 0, _a = this.errors; _i < _a.length; _i++) {\r\n            var _b = _a[_i], object = _b.object, propertyName = _b.propertyName, rule = _b.rule;\r\n            if (rule.__manuallyAdded__) {\r\n                continue;\r\n            }\r\n            var rules = [[rule]];\r\n            this.validate({ object: object, propertyName: propertyName, rules: rules });\r\n        }\r\n    };\r\n    ValidationController.prototype.invokeCallbacks = function (instruction, result) {\r\n        if (this.eventCallbacks.length === 0) {\r\n            return;\r\n        }\r\n        var event = new ValidateEvent(result ? \'validate\' : \'reset\', this.errors, this.results, instruction || null, result);\r\n        for (var i = 0; i < this.eventCallbacks.length; i++) {\r\n            this.eventCallbacks[i](event);\r\n        }\r\n    };\r\n    ValidationController.inject = [Validator, PropertyAccessorParser];\r\n    return ValidationController;\r\n}());\n\n/**\r\n * Binding behavior. Indicates the bound property should be validated.\r\n */\r\nvar ValidateBindingBehaviorBase = /** @class */ (function () {\r\n    function ValidateBindingBehaviorBase(taskQueue) {\r\n        this.taskQueue = taskQueue;\r\n    }\r\n    ValidateBindingBehaviorBase.prototype.bind = function (binding, source, rulesOrController, rules) {\r\n        var _this = this;\r\n        // identify the target element.\r\n        var target = getTargetDOMElement(binding, source);\r\n        // locate the controller.\r\n        var controller;\r\n        if (rulesOrController instanceof ValidationController) {\r\n            controller = rulesOrController;\r\n        }\r\n        else {\r\n            controller = source.container.get(aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_2__[/* Optional */ "h"].of(ValidationController));\r\n            rules = rulesOrController;\r\n        }\r\n        if (controller === null) {\r\n            throw new Error("A ValidationController has not been registered.");\r\n        }\r\n        controller.registerBinding(binding, target, rules);\r\n        binding.validationController = controller;\r\n        var trigger = this.getValidateTrigger(controller);\r\n        // tslint:disable-next-line:no-bitwise\r\n        if (trigger & validateTrigger.change) {\r\n            binding.vbbUpdateSource = binding.updateSource;\r\n            // tslint:disable-next-line:only-arrow-functions\r\n            // tslint:disable-next-line:space-before-function-paren\r\n            binding.updateSource = function (value) {\r\n                this.vbbUpdateSource(value);\r\n                this.validationController.validateBinding(this);\r\n            };\r\n        }\r\n        // tslint:disable-next-line:no-bitwise\r\n        if (trigger & validateTrigger.blur) {\r\n            binding.validateBlurHandler = function () {\r\n                _this.taskQueue.queueMicroTask(function () { return controller.validateBinding(binding); });\r\n            };\r\n            binding.validateTarget = target;\r\n            target.addEventListener(\'blur\', binding.validateBlurHandler);\r\n        }\r\n        if (trigger !== validateTrigger.manual) {\r\n            binding.standardUpdateTarget = binding.updateTarget;\r\n            // tslint:disable-next-line:only-arrow-functions\r\n            // tslint:disable-next-line:space-before-function-paren\r\n            binding.updateTarget = function (value) {\r\n                this.standardUpdateTarget(value);\r\n                this.validationController.resetBinding(this);\r\n            };\r\n        }\r\n    };\r\n    ValidateBindingBehaviorBase.prototype.unbind = function (binding) {\r\n        // reset the binding to it\'s original state.\r\n        if (binding.vbbUpdateSource) {\r\n            binding.updateSource = binding.vbbUpdateSource;\r\n            binding.vbbUpdateSource = null;\r\n        }\r\n        if (binding.standardUpdateTarget) {\r\n            binding.updateTarget = binding.standardUpdateTarget;\r\n            binding.standardUpdateTarget = null;\r\n        }\r\n        if (binding.validateBlurHandler) {\r\n            binding.validateTarget.removeEventListener(\'blur\', binding.validateBlurHandler);\r\n            binding.validateBlurHandler = null;\r\n            binding.validateTarget = null;\r\n        }\r\n        binding.validationController.unregisterBinding(binding);\r\n        binding.validationController = null;\r\n    };\r\n    return ValidateBindingBehaviorBase;\r\n}());\n\n/**\r\n * Binding behavior. Indicates the bound property should be validated\r\n * when the validate trigger specified by the associated controller\'s\r\n * validateTrigger property occurs.\r\n */\r\nvar ValidateBindingBehavior = /** @class */ (function (_super) {\r\n    __extends(ValidateBindingBehavior, _super);\r\n    function ValidateBindingBehavior() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    ValidateBindingBehavior.prototype.getValidateTrigger = function (controller) {\r\n        return controller.validateTrigger;\r\n    };\r\n    ValidateBindingBehavior.inject = [aurelia_task_queue__WEBPACK_IMPORTED_MODULE_3__[/* TaskQueue */ "a"]];\r\n    ValidateBindingBehavior = __decorate([\r\n        Object(aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["bindingBehavior"])(\'validate\')\r\n    ], ValidateBindingBehavior);\r\n    return ValidateBindingBehavior;\r\n}(ValidateBindingBehaviorBase));\r\n/**\r\n * Binding behavior. Indicates the bound property will be validated\r\n * manually, by calling controller.validate(). No automatic validation\r\n * triggered by data-entry or blur will occur.\r\n */\r\nvar ValidateManuallyBindingBehavior = /** @class */ (function (_super) {\r\n    __extends(ValidateManuallyBindingBehavior, _super);\r\n    function ValidateManuallyBindingBehavior() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    ValidateManuallyBindingBehavior.prototype.getValidateTrigger = function () {\r\n        return validateTrigger.manual;\r\n    };\r\n    ValidateManuallyBindingBehavior.inject = [aurelia_task_queue__WEBPACK_IMPORTED_MODULE_3__[/* TaskQueue */ "a"]];\r\n    ValidateManuallyBindingBehavior = __decorate([\r\n        Object(aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["bindingBehavior"])(\'validateManually\')\r\n    ], ValidateManuallyBindingBehavior);\r\n    return ValidateManuallyBindingBehavior;\r\n}(ValidateBindingBehaviorBase));\r\n/**\r\n * Binding behavior. Indicates the bound property should be validated\r\n * when the associated element blurs.\r\n */\r\nvar ValidateOnBlurBindingBehavior = /** @class */ (function (_super) {\r\n    __extends(ValidateOnBlurBindingBehavior, _super);\r\n    function ValidateOnBlurBindingBehavior() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    ValidateOnBlurBindingBehavior.prototype.getValidateTrigger = function () {\r\n        return validateTrigger.blur;\r\n    };\r\n    ValidateOnBlurBindingBehavior.inject = [aurelia_task_queue__WEBPACK_IMPORTED_MODULE_3__[/* TaskQueue */ "a"]];\r\n    ValidateOnBlurBindingBehavior = __decorate([\r\n        Object(aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["bindingBehavior"])(\'validateOnBlur\')\r\n    ], ValidateOnBlurBindingBehavior);\r\n    return ValidateOnBlurBindingBehavior;\r\n}(ValidateBindingBehaviorBase));\r\n/**\r\n * Binding behavior. Indicates the bound property should be validated\r\n * when the associated element is changed by the user, causing a change\r\n * to the model.\r\n */\r\nvar ValidateOnChangeBindingBehavior = /** @class */ (function (_super) {\r\n    __extends(ValidateOnChangeBindingBehavior, _super);\r\n    function ValidateOnChangeBindingBehavior() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    ValidateOnChangeBindingBehavior.prototype.getValidateTrigger = function () {\r\n        return validateTrigger.change;\r\n    };\r\n    ValidateOnChangeBindingBehavior.inject = [aurelia_task_queue__WEBPACK_IMPORTED_MODULE_3__[/* TaskQueue */ "a"]];\r\n    ValidateOnChangeBindingBehavior = __decorate([\r\n        Object(aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["bindingBehavior"])(\'validateOnChange\')\r\n    ], ValidateOnChangeBindingBehavior);\r\n    return ValidateOnChangeBindingBehavior;\r\n}(ValidateBindingBehaviorBase));\r\n/**\r\n * Binding behavior. Indicates the bound property should be validated\r\n * when the associated element blurs or is changed by the user, causing\r\n * a change to the model.\r\n */\r\nvar ValidateOnChangeOrBlurBindingBehavior = /** @class */ (function (_super) {\r\n    __extends(ValidateOnChangeOrBlurBindingBehavior, _super);\r\n    function ValidateOnChangeOrBlurBindingBehavior() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    ValidateOnChangeOrBlurBindingBehavior.prototype.getValidateTrigger = function () {\r\n        return validateTrigger.changeOrBlur;\r\n    };\r\n    ValidateOnChangeOrBlurBindingBehavior.inject = [aurelia_task_queue__WEBPACK_IMPORTED_MODULE_3__[/* TaskQueue */ "a"]];\r\n    ValidateOnChangeOrBlurBindingBehavior = __decorate([\r\n        Object(aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["bindingBehavior"])(\'validateOnChangeOrBlur\')\r\n    ], ValidateOnChangeOrBlurBindingBehavior);\r\n    return ValidateOnChangeOrBlurBindingBehavior;\r\n}(ValidateBindingBehaviorBase));\n\n/**\r\n * Creates ValidationController instances.\r\n */\r\nvar ValidationControllerFactory = /** @class */ (function () {\r\n    function ValidationControllerFactory(container) {\r\n        this.container = container;\r\n    }\r\n    ValidationControllerFactory.get = function (container) {\r\n        return new ValidationControllerFactory(container);\r\n    };\r\n    /**\r\n     * Creates a new controller instance.\r\n     */\r\n    ValidationControllerFactory.prototype.create = function (validator) {\r\n        if (!validator) {\r\n            validator = this.container.get(Validator);\r\n        }\r\n        var propertyParser = this.container.get(PropertyAccessorParser);\r\n        return new ValidationController(validator, propertyParser);\r\n    };\r\n    /**\r\n     * Creates a new controller and registers it in the current element\'s container so that it\'s\r\n     * available to the validate binding behavior and renderers.\r\n     */\r\n    ValidationControllerFactory.prototype.createForCurrentScope = function (validator) {\r\n        var controller = this.create(validator);\r\n        this.container.registerInstance(ValidationController, controller);\r\n        return controller;\r\n    };\r\n    return ValidationControllerFactory;\r\n}());\r\nValidationControllerFactory[\'protocol:aurelia:resolver\'] = true;\n\nvar ValidationErrorsCustomAttribute = /** @class */ (function () {\r\n    function ValidationErrorsCustomAttribute(boundaryElement, controllerAccessor) {\r\n        this.boundaryElement = boundaryElement;\r\n        this.controllerAccessor = controllerAccessor;\r\n        this.controller = null;\r\n        this.errors = [];\r\n        this.errorsInternal = [];\r\n    }\r\n    ValidationErrorsCustomAttribute.inject = function () {\r\n        return [aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[/* DOM */ "b"].Element, aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_2__[/* Lazy */ "f"].of(ValidationController)];\r\n    };\r\n    ValidationErrorsCustomAttribute.prototype.sort = function () {\r\n        this.errorsInternal.sort(function (a, b) {\r\n            if (a.targets[0] === b.targets[0]) {\r\n                return 0;\r\n            }\r\n            // tslint:disable-next-line:no-bitwise\r\n            return a.targets[0].compareDocumentPosition(b.targets[0]) & 2 ? 1 : -1;\r\n        });\r\n    };\r\n    ValidationErrorsCustomAttribute.prototype.interestingElements = function (elements) {\r\n        var _this = this;\r\n        return elements.filter(function (e) { return _this.boundaryElement.contains(e); });\r\n    };\r\n    ValidationErrorsCustomAttribute.prototype.render = function (instruction) {\r\n        var _loop_1 = function (result) {\r\n            var index = this_1.errorsInternal.findIndex(function (x) { return x.error === result; });\r\n            if (index !== -1) {\r\n                this_1.errorsInternal.splice(index, 1);\r\n            }\r\n        };\r\n        var this_1 = this;\r\n        for (var _i = 0, _a = instruction.unrender; _i < _a.length; _i++) {\r\n            var result = _a[_i].result;\r\n            _loop_1(result);\r\n        }\r\n        for (var _b = 0, _c = instruction.render; _b < _c.length; _b++) {\r\n            var _d = _c[_b], result = _d.result, elements = _d.elements;\r\n            if (result.valid) {\r\n                continue;\r\n            }\r\n            var targets = this.interestingElements(elements);\r\n            if (targets.length) {\r\n                this.errorsInternal.push({ error: result, targets: targets });\r\n            }\r\n        }\r\n        this.sort();\r\n        this.errors = this.errorsInternal;\r\n    };\r\n    ValidationErrorsCustomAttribute.prototype.bind = function () {\r\n        if (!this.controller) {\r\n            this.controller = this.controllerAccessor();\r\n        }\r\n        // this will call render() with the side-effect of updating this.errors\r\n        this.controller.addRenderer(this);\r\n    };\r\n    ValidationErrorsCustomAttribute.prototype.unbind = function () {\r\n        if (this.controller) {\r\n            this.controller.removeRenderer(this);\r\n        }\r\n    };\r\n    __decorate([\r\n        Object(aurelia_templating__WEBPACK_IMPORTED_MODULE_4__[/* bindable */ "S"])({ defaultBindingMode: aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["bindingMode"].oneWay })\r\n    ], ValidationErrorsCustomAttribute.prototype, "controller", void 0);\r\n    __decorate([\r\n        Object(aurelia_templating__WEBPACK_IMPORTED_MODULE_4__[/* bindable */ "S"])({ primaryProperty: true, defaultBindingMode: aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["bindingMode"].twoWay })\r\n    ], ValidationErrorsCustomAttribute.prototype, "errors", void 0);\r\n    ValidationErrorsCustomAttribute = __decorate([\r\n        Object(aurelia_templating__WEBPACK_IMPORTED_MODULE_4__[/* customAttribute */ "W"])(\'validation-errors\')\r\n    ], ValidationErrorsCustomAttribute);\r\n    return ValidationErrorsCustomAttribute;\r\n}());\n\nvar ValidationRendererCustomAttribute = /** @class */ (function () {\r\n    function ValidationRendererCustomAttribute() {\r\n    }\r\n    ValidationRendererCustomAttribute.prototype.created = function (view) {\r\n        this.container = view.container;\r\n    };\r\n    ValidationRendererCustomAttribute.prototype.bind = function () {\r\n        this.controller = this.container.get(ValidationController);\r\n        this.renderer = this.container.get(this.value);\r\n        this.controller.addRenderer(this.renderer);\r\n    };\r\n    ValidationRendererCustomAttribute.prototype.unbind = function () {\r\n        this.controller.removeRenderer(this.renderer);\r\n        this.controller = null;\r\n        this.renderer = null;\r\n    };\r\n    ValidationRendererCustomAttribute = __decorate([\r\n        Object(aurelia_framework__WEBPACK_IMPORTED_MODULE_5__["customAttribute"])(\'validation-renderer\')\r\n    ], ValidationRendererCustomAttribute);\r\n    return ValidationRendererCustomAttribute;\r\n}());\n\n/**\r\n * Sets, unsets and retrieves rules on an object or constructor function.\r\n */\r\nvar Rules = /** @class */ (function () {\r\n    function Rules() {\r\n    }\r\n    /**\r\n     * Applies the rules to a target.\r\n     */\r\n    Rules.set = function (target, rules) {\r\n        if (target instanceof Function) {\r\n            target = target.prototype;\r\n        }\r\n        Object.defineProperty(target, Rules.key, { enumerable: false, configurable: false, writable: true, value: rules });\r\n    };\r\n    /**\r\n     * Removes rules from a target.\r\n     */\r\n    Rules.unset = function (target) {\r\n        if (target instanceof Function) {\r\n            target = target.prototype;\r\n        }\r\n        target[Rules.key] = null;\r\n    };\r\n    /**\r\n     * Retrieves the target\'s rules.\r\n     */\r\n    Rules.get = function (target) {\r\n        return target[Rules.key] || null;\r\n    };\r\n    /**\r\n     * The name of the property that stores the rules.\r\n     */\r\n    Rules.key = \'__rules__\';\r\n    return Rules;\r\n}());\n\n// tslint:disable:no-empty\r\nvar ExpressionVisitor = /** @class */ (function () {\r\n    function ExpressionVisitor() {\r\n    }\r\n    ExpressionVisitor.prototype.visitChain = function (chain) {\r\n        this.visitArgs(chain.expressions);\r\n    };\r\n    ExpressionVisitor.prototype.visitBindingBehavior = function (behavior) {\r\n        behavior.expression.accept(this);\r\n        this.visitArgs(behavior.args);\r\n    };\r\n    ExpressionVisitor.prototype.visitValueConverter = function (converter) {\r\n        converter.expression.accept(this);\r\n        this.visitArgs(converter.args);\r\n    };\r\n    ExpressionVisitor.prototype.visitAssign = function (assign) {\r\n        assign.target.accept(this);\r\n        assign.value.accept(this);\r\n    };\r\n    ExpressionVisitor.prototype.visitConditional = function (conditional) {\r\n        conditional.condition.accept(this);\r\n        conditional.yes.accept(this);\r\n        conditional.no.accept(this);\r\n    };\r\n    ExpressionVisitor.prototype.visitAccessThis = function (access) {\r\n        access.ancestor = access.ancestor;\r\n    };\r\n    ExpressionVisitor.prototype.visitAccessScope = function (access) {\r\n        access.name = access.name;\r\n    };\r\n    ExpressionVisitor.prototype.visitAccessMember = function (access) {\r\n        access.object.accept(this);\r\n    };\r\n    ExpressionVisitor.prototype.visitAccessKeyed = function (access) {\r\n        access.object.accept(this);\r\n        access.key.accept(this);\r\n    };\r\n    ExpressionVisitor.prototype.visitCallScope = function (call) {\r\n        this.visitArgs(call.args);\r\n    };\r\n    ExpressionVisitor.prototype.visitCallFunction = function (call) {\r\n        call.func.accept(this);\r\n        this.visitArgs(call.args);\r\n    };\r\n    ExpressionVisitor.prototype.visitCallMember = function (call) {\r\n        call.object.accept(this);\r\n        this.visitArgs(call.args);\r\n    };\r\n    ExpressionVisitor.prototype.visitPrefix = function (prefix) {\r\n        prefix.expression.accept(this);\r\n    };\r\n    ExpressionVisitor.prototype.visitBinary = function (binary) {\r\n        binary.left.accept(this);\r\n        binary.right.accept(this);\r\n    };\r\n    ExpressionVisitor.prototype.visitLiteralPrimitive = function (literal) {\r\n        literal.value = literal.value;\r\n    };\r\n    ExpressionVisitor.prototype.visitLiteralArray = function (literal) {\r\n        this.visitArgs(literal.elements);\r\n    };\r\n    ExpressionVisitor.prototype.visitLiteralObject = function (literal) {\r\n        this.visitArgs(literal.values);\r\n    };\r\n    ExpressionVisitor.prototype.visitLiteralString = function (literal) {\r\n        literal.value = literal.value;\r\n    };\r\n    ExpressionVisitor.prototype.visitArgs = function (args) {\r\n        for (var i = 0; i < args.length; i++) {\r\n            args[i].accept(this);\r\n        }\r\n    };\r\n    return ExpressionVisitor;\r\n}());\n\nvar ValidationMessageParser = /** @class */ (function () {\r\n    function ValidationMessageParser(bindinqLanguage) {\r\n        this.bindinqLanguage = bindinqLanguage;\r\n        this.emptyStringExpression = new aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["LiteralString"](\'\');\r\n        this.nullExpression = new aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["LiteralPrimitive"](null);\r\n        this.undefinedExpression = new aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["LiteralPrimitive"](undefined);\r\n        this.cache = {};\r\n    }\r\n    ValidationMessageParser.prototype.parse = function (message) {\r\n        if (this.cache[message] !== undefined) {\r\n            return this.cache[message];\r\n        }\r\n        var parts = this.bindinqLanguage.parseInterpolation(null, message);\r\n        if (parts === null) {\r\n            return new aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["LiteralString"](message);\r\n        }\r\n        var expression = new aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["LiteralString"](parts[0]);\r\n        for (var i = 1; i < parts.length; i += 2) {\r\n            expression = new aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["Binary"](\'+\', expression, new aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["Binary"](\'+\', this.coalesce(parts[i]), new aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["LiteralString"](parts[i + 1])));\r\n        }\r\n        MessageExpressionValidator.validate(expression, message);\r\n        this.cache[message] = expression;\r\n        return expression;\r\n    };\r\n    ValidationMessageParser.prototype.coalesce = function (part) {\r\n        // part === null || part === undefined ? \'\' : part\r\n        return new aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["Conditional"](new aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["Binary"](\'||\', new aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["Binary"](\'===\', part, this.nullExpression), new aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["Binary"](\'===\', part, this.undefinedExpression)), this.emptyStringExpression, new aurelia_binding__WEBPACK_IMPORTED_MODULE_1__["CallMember"](part, \'toString\', []));\r\n    };\r\n    ValidationMessageParser.inject = [aurelia_templating__WEBPACK_IMPORTED_MODULE_4__[/* BindingLanguage */ "e"]];\r\n    return ValidationMessageParser;\r\n}());\r\nvar MessageExpressionValidator = /** @class */ (function (_super) {\r\n    __extends(MessageExpressionValidator, _super);\r\n    function MessageExpressionValidator(originalMessage) {\r\n        var _this = _super.call(this) || this;\r\n        _this.originalMessage = originalMessage;\r\n        return _this;\r\n    }\r\n    MessageExpressionValidator.validate = function (expression, originalMessage) {\r\n        var visitor = new MessageExpressionValidator(originalMessage);\r\n        expression.accept(visitor);\r\n    };\r\n    MessageExpressionValidator.prototype.visitAccessScope = function (access) {\r\n        if (access.ancestor !== 0) {\r\n            throw new Error(\'$parent is not permitted in validation message expressions.\');\r\n        }\r\n        if ([\'displayName\', \'propertyName\', \'value\', \'object\', \'config\', \'getDisplayName\'].indexOf(access.name) !== -1) {\r\n            Object(aurelia_logging__WEBPACK_IMPORTED_MODULE_6__["getLogger"])(\'aurelia-validation\')\r\n                // tslint:disable-next-line:max-line-length\r\n                .warn("Did you mean to use \\"$" + access.name + "\\" instead of \\"" + access.name + "\\" in this validation message template: \\"" + this.originalMessage + "\\"?");\r\n        }\r\n    };\r\n    return MessageExpressionValidator;\r\n}(ExpressionVisitor));\n\n/**\r\n * Dictionary of validation messages. [messageKey]: messageExpression\r\n */\r\nvar validationMessages = {\r\n    /**\r\n     * The default validation message. Used with rules that have no standard message.\r\n     */\r\n    default: "${$displayName} is invalid.",\r\n    required: "${$displayName} is required.",\r\n    matches: "${$displayName} is not correctly formatted.",\r\n    email: "${$displayName} is not a valid email.",\r\n    minLength: "${$displayName} must be at least ${$config.length} character${$config.length === 1 ? \'\' : \'s\'}.",\r\n    maxLength: "${$displayName} cannot be longer than ${$config.length} character${$config.length === 1 ? \'\' : \'s\'}.",\r\n    minItems: "${$displayName} must contain at least ${$config.count} item${$config.count === 1 ? \'\' : \'s\'}.",\r\n    maxItems: "${$displayName} cannot contain more than ${$config.count} item${$config.count === 1 ? \'\' : \'s\'}.",\r\n    equals: "${$displayName} must be ${$config.expectedValue}.",\r\n};\r\n/**\r\n * Retrieves validation messages and property display names.\r\n */\r\nvar ValidationMessageProvider = /** @class */ (function () {\r\n    function ValidationMessageProvider(parser) {\r\n        this.parser = parser;\r\n    }\r\n    /**\r\n     * Returns a message binding expression that corresponds to the key.\r\n     * @param key The message key.\r\n     */\r\n    ValidationMessageProvider.prototype.getMessage = function (key) {\r\n        var message;\r\n        if (key in validationMessages) {\r\n            message = validationMessages[key];\r\n        }\r\n        else {\r\n            message = validationMessages[\'default\'];\r\n        }\r\n        return this.parser.parse(message);\r\n    };\r\n    /**\r\n     * Formulates a property display name using the property name and the configured\r\n     * displayName (if provided).\r\n     * Override this with your own custom logic.\r\n     * @param propertyName The property name.\r\n     */\r\n    ValidationMessageProvider.prototype.getDisplayName = function (propertyName, displayName) {\r\n        if (displayName !== null && displayName !== undefined) {\r\n            return (displayName instanceof Function) ? displayName() : displayName;\r\n        }\r\n        // split on upper-case letters.\r\n        var words = propertyName.toString().split(/(?=[A-Z])/).join(\' \');\r\n        // capitalize first letter.\r\n        return words.charAt(0).toUpperCase() + words.slice(1);\r\n    };\r\n    ValidationMessageProvider.inject = [ValidationMessageParser];\r\n    return ValidationMessageProvider;\r\n}());\n\n/**\r\n * Validates.\r\n * Responsible for validating objects and properties.\r\n */\r\nvar StandardValidator = /** @class */ (function (_super) {\r\n    __extends(StandardValidator, _super);\r\n    function StandardValidator(messageProvider, resources) {\r\n        var _this = _super.call(this) || this;\r\n        _this.messageProvider = messageProvider;\r\n        _this.lookupFunctions = resources.lookupFunctions;\r\n        _this.getDisplayName = messageProvider.getDisplayName.bind(messageProvider);\r\n        return _this;\r\n    }\r\n    /**\r\n     * Validates the specified property.\r\n     * @param object The object to validate.\r\n     * @param propertyName The name of the property to validate.\r\n     * @param rules Optional. If unspecified, the rules will be looked up using the metadata\r\n     * for the object created by ValidationRules....on(class/object)\r\n     */\r\n    StandardValidator.prototype.validateProperty = function (object, propertyName, rules) {\r\n        return this.validate(object, propertyName, rules || null);\r\n    };\r\n    /**\r\n     * Validates all rules for specified object and it\'s properties.\r\n     * @param object The object to validate.\r\n     * @param rules Optional. If unspecified, the rules will be looked up using the metadata\r\n     * for the object created by ValidationRules....on(class/object)\r\n     */\r\n    StandardValidator.prototype.validateObject = function (object, rules) {\r\n        return this.validate(object, null, rules || null);\r\n    };\r\n    /**\r\n     * Determines whether a rule exists in a set of rules.\r\n     * @param rules The rules to search.\r\n     * @parem rule The rule to find.\r\n     */\r\n    StandardValidator.prototype.ruleExists = function (rules, rule) {\r\n        var i = rules.length;\r\n        while (i--) {\r\n            if (rules[i].indexOf(rule) !== -1) {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    };\r\n    StandardValidator.prototype.getMessage = function (rule, object, value) {\r\n        var expression = rule.message || this.messageProvider.getMessage(rule.messageKey);\r\n        // tslint:disable-next-line:prefer-const\r\n        var _a = rule.property, propertyName = _a.name, displayName = _a.displayName;\r\n        if (propertyName !== null) {\r\n            displayName = this.messageProvider.getDisplayName(propertyName, displayName);\r\n        }\r\n        var overrideContext = {\r\n            $displayName: displayName,\r\n            $propertyName: propertyName,\r\n            $value: value,\r\n            $object: object,\r\n            $config: rule.config,\r\n            // returns the name of a given property, given just the property name (irrespective of the property\'s displayName)\r\n            // split on capital letters, first letter ensured to be capitalized\r\n            $getDisplayName: this.getDisplayName\r\n        };\r\n        return expression.evaluate({ bindingContext: object, overrideContext: overrideContext }, this.lookupFunctions);\r\n    };\r\n    StandardValidator.prototype.validateRuleSequence = function (object, propertyName, ruleSequence, sequence, results) {\r\n        var _this = this;\r\n        // are we validating all properties or a single property?\r\n        var validateAllProperties = propertyName === null || propertyName === undefined;\r\n        var rules = ruleSequence[sequence];\r\n        var allValid = true;\r\n        // validate each rule.\r\n        var promises = [];\r\n        var _loop_1 = function (i) {\r\n            var rule = rules[i];\r\n            // is the rule related to the property we\'re validating.\r\n            // tslint:disable-next-line:triple-equals | Use loose equality for property keys\r\n            if (!validateAllProperties && rule.property.name != propertyName) {\r\n                return "continue";\r\n            }\r\n            // is this a conditional rule? is the condition met?\r\n            if (rule.when && !rule.when(object)) {\r\n                return "continue";\r\n            }\r\n            // validate.\r\n            var value = rule.property.name === null ? object : object[rule.property.name];\r\n            var promiseOrBoolean = rule.condition(value, object);\r\n            if (!(promiseOrBoolean instanceof Promise)) {\r\n                promiseOrBoolean = Promise.resolve(promiseOrBoolean);\r\n            }\r\n            promises.push(promiseOrBoolean.then(function (valid) {\r\n                var message = valid ? null : _this.getMessage(rule, object, value);\r\n                results.push(new ValidateResult(rule, object, rule.property.name, valid, message));\r\n                allValid = allValid && valid;\r\n                return valid;\r\n            }));\r\n        };\r\n        for (var i = 0; i < rules.length; i++) {\r\n            _loop_1(i);\r\n        }\r\n        return Promise.all(promises)\r\n            .then(function () {\r\n            sequence++;\r\n            if (allValid && sequence < ruleSequence.length) {\r\n                return _this.validateRuleSequence(object, propertyName, ruleSequence, sequence, results);\r\n            }\r\n            return results;\r\n        });\r\n    };\r\n    StandardValidator.prototype.validate = function (object, propertyName, rules) {\r\n        // rules specified?\r\n        if (!rules) {\r\n            // no. attempt to locate the rules.\r\n            rules = Rules.get(object);\r\n        }\r\n        // any rules?\r\n        if (!rules || rules.length === 0) {\r\n            return Promise.resolve([]);\r\n        }\r\n        return this.validateRuleSequence(object, propertyName, rules, 0, []);\r\n    };\r\n    StandardValidator.inject = [ValidationMessageProvider, aurelia_templating__WEBPACK_IMPORTED_MODULE_4__[/* ViewResources */ "M"]];\r\n    return StandardValidator;\r\n}(Validator));\n\n/**\r\n * Part of the fluent rule API. Enables customizing property rules.\r\n */\r\nvar FluentRuleCustomizer = /** @class */ (function () {\r\n    function FluentRuleCustomizer(property, condition, config, fluentEnsure, fluentRules, parsers) {\r\n        if (config === void 0) { config = {}; }\r\n        this.fluentEnsure = fluentEnsure;\r\n        this.fluentRules = fluentRules;\r\n        this.parsers = parsers;\r\n        this.rule = {\r\n            property: property,\r\n            condition: condition,\r\n            config: config,\r\n            when: null,\r\n            messageKey: \'default\',\r\n            message: null,\r\n            sequence: fluentRules.sequence\r\n        };\r\n        this.fluentEnsure._addRule(this.rule);\r\n    }\r\n    /**\r\n     * Validate subsequent rules after previously declared rules have\r\n     * been validated successfully. Use to postpone validation of costly\r\n     * rules until less expensive rules pass validation.\r\n     */\r\n    FluentRuleCustomizer.prototype.then = function () {\r\n        this.fluentRules.sequence++;\r\n        return this;\r\n    };\r\n    /**\r\n     * Specifies the key to use when looking up the rule\'s validation message.\r\n     */\r\n    FluentRuleCustomizer.prototype.withMessageKey = function (key) {\r\n        this.rule.messageKey = key;\r\n        this.rule.message = null;\r\n        return this;\r\n    };\r\n    /**\r\n     * Specifies rule\'s validation message.\r\n     */\r\n    FluentRuleCustomizer.prototype.withMessage = function (message) {\r\n        this.rule.messageKey = \'custom\';\r\n        this.rule.message = this.parsers.message.parse(message);\r\n        return this;\r\n    };\r\n    /**\r\n     * Specifies a condition that must be met before attempting to validate the rule.\r\n     * @param condition A function that accepts the object as a parameter and returns true\r\n     * or false whether the rule should be evaluated.\r\n     */\r\n    FluentRuleCustomizer.prototype.when = function (condition) {\r\n        this.rule.when = condition;\r\n        return this;\r\n    };\r\n    /**\r\n     * Tags the rule instance, enabling the rule to be found easily\r\n     * using ValidationRules.taggedRules(rules, tag)\r\n     */\r\n    FluentRuleCustomizer.prototype.tag = function (tag) {\r\n        this.rule.tag = tag;\r\n        return this;\r\n    };\r\n    ///// FluentEnsure APIs /////\r\n    /**\r\n     * Target a property with validation rules.\r\n     * @param property The property to target. Can be the property name or a property accessor function.\r\n     */\r\n    FluentRuleCustomizer.prototype.ensure = function (subject) {\r\n        return this.fluentEnsure.ensure(subject);\r\n    };\r\n    /**\r\n     * Targets an object with validation rules.\r\n     */\r\n    FluentRuleCustomizer.prototype.ensureObject = function () {\r\n        return this.fluentEnsure.ensureObject();\r\n    };\r\n    Object.defineProperty(FluentRuleCustomizer.prototype, "rules", {\r\n        /**\r\n         * Rules that have been defined using the fluent API.\r\n         */\r\n        get: function () {\r\n            return this.fluentEnsure.rules;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Applies the rules to a class or object, making them discoverable by the StandardValidator.\r\n     * @param target A class or object.\r\n     */\r\n    FluentRuleCustomizer.prototype.on = function (target) {\r\n        return this.fluentEnsure.on(target);\r\n    };\r\n    ///////// FluentRules APIs /////////\r\n    /**\r\n     * Applies an ad-hoc rule function to the ensured property or object.\r\n     * @param condition The function to validate the rule.\r\n     * Will be called with two arguments, the property value and the object.\r\n     * Should return a boolean or a Promise that resolves to a boolean.\r\n     */\r\n    FluentRuleCustomizer.prototype.satisfies = function (condition, config) {\r\n        return this.fluentRules.satisfies(condition, config);\r\n    };\r\n    /**\r\n     * Applies a rule by name.\r\n     * @param name The name of the custom or standard rule.\r\n     * @param args The rule\'s arguments.\r\n     */\r\n    FluentRuleCustomizer.prototype.satisfiesRule = function (name) {\r\n        var args = [];\r\n        for (var _i = 1; _i < arguments.length; _i++) {\r\n            args[_i - 1] = arguments[_i];\r\n        }\r\n        var _a;\r\n        return (_a = this.fluentRules).satisfiesRule.apply(_a, [name].concat(args));\r\n    };\r\n    /**\r\n     * Applies the "required" rule to the property.\r\n     * The value cannot be null, undefined or whitespace.\r\n     */\r\n    FluentRuleCustomizer.prototype.required = function () {\r\n        return this.fluentRules.required();\r\n    };\r\n    /**\r\n     * Applies the "matches" rule to the property.\r\n     * Value must match the specified regular expression.\r\n     * null, undefined and empty-string values are considered valid.\r\n     */\r\n    FluentRuleCustomizer.prototype.matches = function (regex) {\r\n        return this.fluentRules.matches(regex);\r\n    };\r\n    /**\r\n     * Applies the "email" rule to the property.\r\n     * null, undefined and empty-string values are considered valid.\r\n     */\r\n    FluentRuleCustomizer.prototype.email = function () {\r\n        return this.fluentRules.email();\r\n    };\r\n    /**\r\n     * Applies the "minLength" STRING validation rule to the property.\r\n     * null, undefined and empty-string values are considered valid.\r\n     */\r\n    FluentRuleCustomizer.prototype.minLength = function (length) {\r\n        return this.fluentRules.minLength(length);\r\n    };\r\n    /**\r\n     * Applies the "maxLength" STRING validation rule to the property.\r\n     * null, undefined and empty-string values are considered valid.\r\n     */\r\n    FluentRuleCustomizer.prototype.maxLength = function (length) {\r\n        return this.fluentRules.maxLength(length);\r\n    };\r\n    /**\r\n     * Applies the "minItems" ARRAY validation rule to the property.\r\n     * null and undefined values are considered valid.\r\n     */\r\n    FluentRuleCustomizer.prototype.minItems = function (count) {\r\n        return this.fluentRules.minItems(count);\r\n    };\r\n    /**\r\n     * Applies the "maxItems" ARRAY validation rule to the property.\r\n     * null and undefined values are considered valid.\r\n     */\r\n    FluentRuleCustomizer.prototype.maxItems = function (count) {\r\n        return this.fluentRules.maxItems(count);\r\n    };\r\n    /**\r\n     * Applies the "equals" validation rule to the property.\r\n     * null, undefined and empty-string values are considered valid.\r\n     */\r\n    FluentRuleCustomizer.prototype.equals = function (expectedValue) {\r\n        return this.fluentRules.equals(expectedValue);\r\n    };\r\n    return FluentRuleCustomizer;\r\n}());\r\n/**\r\n * Part of the fluent rule API. Enables applying rules to properties and objects.\r\n */\r\nvar FluentRules = /** @class */ (function () {\r\n    function FluentRules(fluentEnsure, parsers, property) {\r\n        this.fluentEnsure = fluentEnsure;\r\n        this.parsers = parsers;\r\n        this.property = property;\r\n        /**\r\n         * Current rule sequence number. Used to postpone evaluation of rules until rules\r\n         * with lower sequence number have successfully validated. The "then" fluent API method\r\n         * manages this property, there\'s usually no need to set it directly.\r\n         */\r\n        this.sequence = 0;\r\n    }\r\n    /**\r\n     * Sets the display name of the ensured property.\r\n     */\r\n    FluentRules.prototype.displayName = function (name) {\r\n        this.property.displayName = name;\r\n        return this;\r\n    };\r\n    /**\r\n     * Applies an ad-hoc rule function to the ensured property or object.\r\n     * @param condition The function to validate the rule.\r\n     * Will be called with two arguments, the property value and the object.\r\n     * Should return a boolean or a Promise that resolves to a boolean.\r\n     */\r\n    FluentRules.prototype.satisfies = function (condition, config) {\r\n        return new FluentRuleCustomizer(this.property, condition, config, this.fluentEnsure, this, this.parsers);\r\n    };\r\n    /**\r\n     * Applies a rule by name.\r\n     * @param name The name of the custom or standard rule.\r\n     * @param args The rule\'s arguments.\r\n     */\r\n    FluentRules.prototype.satisfiesRule = function (name) {\r\n        var _this = this;\r\n        var args = [];\r\n        for (var _i = 1; _i < arguments.length; _i++) {\r\n            args[_i - 1] = arguments[_i];\r\n        }\r\n        var rule = FluentRules.customRules[name];\r\n        if (!rule) {\r\n            // standard rule?\r\n            rule = this[name];\r\n            if (rule instanceof Function) {\r\n                return rule.call.apply(rule, [this].concat(args));\r\n            }\r\n            throw new Error("Rule with name \\"" + name + "\\" does not exist.");\r\n        }\r\n        var config = rule.argsToConfig ? rule.argsToConfig.apply(rule, args) : undefined;\r\n        return this.satisfies(function (value, obj) {\r\n            var _a;\r\n            return (_a = rule.condition).call.apply(_a, [_this, value, obj].concat(args));\r\n        }, config)\r\n            .withMessageKey(name);\r\n    };\r\n    /**\r\n     * Applies the "required" rule to the property.\r\n     * The value cannot be null, undefined or whitespace.\r\n     */\r\n    FluentRules.prototype.required = function () {\r\n        return this.satisfies(function (value) {\r\n            return value !== null\r\n                && value !== undefined\r\n                && !(isString(value) && !/\\S/.test(value));\r\n        }).withMessageKey(\'required\');\r\n    };\r\n    /**\r\n     * Applies the "matches" rule to the property.\r\n     * Value must match the specified regular expression.\r\n     * null, undefined and empty-string values are considered valid.\r\n     */\r\n    FluentRules.prototype.matches = function (regex) {\r\n        return this.satisfies(function (value) { return value === null || value === undefined || value.length === 0 || regex.test(value); })\r\n            .withMessageKey(\'matches\');\r\n    };\r\n    /**\r\n     * Applies the "email" rule to the property.\r\n     * null, undefined and empty-string values are considered valid.\r\n     */\r\n    FluentRules.prototype.email = function () {\r\n        // regex from https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address\r\n        /* tslint:disable:max-line-length */\r\n        return this.matches(/^[a-zA-Z0-9.!#$%&\'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/)\r\n            /* tslint:enable:max-line-length */\r\n            .withMessageKey(\'email\');\r\n    };\r\n    /**\r\n     * Applies the "minLength" STRING validation rule to the property.\r\n     * null, undefined and empty-string values are considered valid.\r\n     */\r\n    FluentRules.prototype.minLength = function (length) {\r\n        return this.satisfies(function (value) { return value === null || value === undefined || value.length === 0 || value.length >= length; }, { length: length })\r\n            .withMessageKey(\'minLength\');\r\n    };\r\n    /**\r\n     * Applies the "maxLength" STRING validation rule to the property.\r\n     * null, undefined and empty-string values are considered valid.\r\n     */\r\n    FluentRules.prototype.maxLength = function (length) {\r\n        return this.satisfies(function (value) { return value === null || value === undefined || value.length === 0 || value.length <= length; }, { length: length })\r\n            .withMessageKey(\'maxLength\');\r\n    };\r\n    /**\r\n     * Applies the "minItems" ARRAY validation rule to the property.\r\n     * null and undefined values are considered valid.\r\n     */\r\n    FluentRules.prototype.minItems = function (count) {\r\n        return this.satisfies(function (value) { return value === null || value === undefined || value.length >= count; }, { count: count })\r\n            .withMessageKey(\'minItems\');\r\n    };\r\n    /**\r\n     * Applies the "maxItems" ARRAY validation rule to the property.\r\n     * null and undefined values are considered valid.\r\n     */\r\n    FluentRules.prototype.maxItems = function (count) {\r\n        return this.satisfies(function (value) { return value === null || value === undefined || value.length <= count; }, { count: count })\r\n            .withMessageKey(\'maxItems\');\r\n    };\r\n    /**\r\n     * Applies the "equals" validation rule to the property.\r\n     * null and undefined values are considered valid.\r\n     */\r\n    FluentRules.prototype.equals = function (expectedValue) {\r\n        return this.satisfies(function (value) { return value === null || value === undefined || value === \'\' || value === expectedValue; }, { expectedValue: expectedValue })\r\n            .withMessageKey(\'equals\');\r\n    };\r\n    FluentRules.customRules = {};\r\n    return FluentRules;\r\n}());\r\n/**\r\n * Part of the fluent rule API. Enables targeting properties and objects with rules.\r\n */\r\nvar FluentEnsure = /** @class */ (function () {\r\n    function FluentEnsure(parsers) {\r\n        this.parsers = parsers;\r\n        /**\r\n         * Rules that have been defined using the fluent API.\r\n         */\r\n        this.rules = [];\r\n    }\r\n    /**\r\n     * Target a property with validation rules.\r\n     * @param property The property to target. Can be the property name or a property accessor\r\n     * function.\r\n     */\r\n    FluentEnsure.prototype.ensure = function (property) {\r\n        this.assertInitialized();\r\n        var name = this.parsers.property.parse(property);\r\n        var fluentRules = new FluentRules(this, this.parsers, { name: name, displayName: null });\r\n        return this.mergeRules(fluentRules, name);\r\n    };\r\n    /**\r\n     * Targets an object with validation rules.\r\n     */\r\n    FluentEnsure.prototype.ensureObject = function () {\r\n        this.assertInitialized();\r\n        var fluentRules = new FluentRules(this, this.parsers, { name: null, displayName: null });\r\n        return this.mergeRules(fluentRules, null);\r\n    };\r\n    /**\r\n     * Applies the rules to a class or object, making them discoverable by the StandardValidator.\r\n     * @param target A class or object.\r\n     */\r\n    FluentEnsure.prototype.on = function (target) {\r\n        Rules.set(target, this.rules);\r\n        return this;\r\n    };\r\n    /**\r\n     * Adds a rule definition to the sequenced ruleset.\r\n     * @internal\r\n     */\r\n    FluentEnsure.prototype._addRule = function (rule) {\r\n        while (this.rules.length < rule.sequence + 1) {\r\n            this.rules.push([]);\r\n        }\r\n        this.rules[rule.sequence].push(rule);\r\n    };\r\n    FluentEnsure.prototype.assertInitialized = function () {\r\n        if (this.parsers) {\r\n            return;\r\n        }\r\n        throw new Error("Did you forget to add \\".plugin(\'aurelia-validation\')\\" to your main.js?");\r\n    };\r\n    FluentEnsure.prototype.mergeRules = function (fluentRules, propertyName) {\r\n        // tslint:disable-next-line:triple-equals | Use loose equality for property keys\r\n        var existingRules = this.rules.find(function (r) { return r.length > 0 && r[0].property.name == propertyName; });\r\n        if (existingRules) {\r\n            var rule = existingRules[existingRules.length - 1];\r\n            fluentRules.sequence = rule.sequence;\r\n            if (rule.property.displayName !== null) {\r\n                fluentRules = fluentRules.displayName(rule.property.displayName);\r\n            }\r\n        }\r\n        return fluentRules;\r\n    };\r\n    return FluentEnsure;\r\n}());\r\n/**\r\n * Fluent rule definition API.\r\n */\r\nvar ValidationRules = /** @class */ (function () {\r\n    function ValidationRules() {\r\n    }\r\n    ValidationRules.initialize = function (messageParser, propertyParser) {\r\n        this.parsers = {\r\n            message: messageParser,\r\n            property: propertyParser\r\n        };\r\n    };\r\n    /**\r\n     * Target a property with validation rules.\r\n     * @param property The property to target. Can be the property name or a property accessor function.\r\n     */\r\n    ValidationRules.ensure = function (property) {\r\n        return new FluentEnsure(ValidationRules.parsers).ensure(property);\r\n    };\r\n    /**\r\n     * Targets an object with validation rules.\r\n     */\r\n    ValidationRules.ensureObject = function () {\r\n        return new FluentEnsure(ValidationRules.parsers).ensureObject();\r\n    };\r\n    /**\r\n     * Defines a custom rule.\r\n     * @param name The name of the custom rule. Also serves as the message key.\r\n     * @param condition The rule function.\r\n     * @param message The message expression\r\n     * @param argsToConfig A function that maps the rule\'s arguments to a "config"\r\n     * object that can be used when evaluating the message expression.\r\n     */\r\n    ValidationRules.customRule = function (name, condition, message, argsToConfig) {\r\n        validationMessages[name] = message;\r\n        FluentRules.customRules[name] = { condition: condition, argsToConfig: argsToConfig };\r\n    };\r\n    /**\r\n     * Returns rules with the matching tag.\r\n     * @param rules The rules to search.\r\n     * @param tag The tag to search for.\r\n     */\r\n    ValidationRules.taggedRules = function (rules, tag) {\r\n        return rules.map(function (x) { return x.filter(function (r) { return r.tag === tag; }); });\r\n    };\r\n    /**\r\n     * Returns rules that have no tag.\r\n     * @param rules The rules to search.\r\n     */\r\n    ValidationRules.untaggedRules = function (rules) {\r\n        return rules.map(function (x) { return x.filter(function (r) { return r.tag === undefined; }); });\r\n    };\r\n    /**\r\n     * Removes the rules from a class or object.\r\n     * @param target A class or object.\r\n     */\r\n    ValidationRules.off = function (target) {\r\n        Rules.unset(target);\r\n    };\r\n    return ValidationRules;\r\n}());\n\n// Exports\r\n/**\r\n * Aurelia Validation Configuration API\r\n */\r\nvar AureliaValidationConfiguration = /** @class */ (function () {\r\n    function AureliaValidationConfiguration() {\r\n        this.validatorType = StandardValidator;\r\n    }\r\n    /**\r\n     * Use a custom Validator implementation.\r\n     */\r\n    AureliaValidationConfiguration.prototype.customValidator = function (type) {\r\n        this.validatorType = type;\r\n    };\r\n    /**\r\n     * Applies the configuration.\r\n     */\r\n    AureliaValidationConfiguration.prototype.apply = function (container) {\r\n        var validator = container.get(this.validatorType);\r\n        container.registerInstance(Validator, validator);\r\n    };\r\n    return AureliaValidationConfiguration;\r\n}());\r\n/**\r\n * Configures the plugin.\r\n */\r\nfunction configure(\r\n// tslint:disable-next-line:ban-types\r\nframeworkConfig, callback) {\r\n    // the fluent rule definition API needs the parser to translate messages\r\n    // to interpolation expressions.\r\n    var messageParser = frameworkConfig.container.get(ValidationMessageParser);\r\n    var propertyParser = frameworkConfig.container.get(PropertyAccessorParser);\r\n    ValidationRules.initialize(messageParser, propertyParser);\r\n    // configure...\r\n    var config = new AureliaValidationConfiguration();\r\n    if (callback instanceof Function) {\r\n        callback(config);\r\n    }\r\n    config.apply(frameworkConfig.container);\r\n    // globalize the behaviors.\r\n    if (frameworkConfig.globalResources) {\r\n        frameworkConfig.globalResources(ValidateBindingBehavior, ValidateManuallyBindingBehavior, ValidateOnBlurBindingBehavior, ValidateOnChangeBindingBehavior, ValidateOnChangeOrBlurBindingBehavior, ValidationErrorsCustomAttribute, ValidationRendererCustomAttribute);\r\n    }\r\n}\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXVyZWxpYS12YWxpZGF0aW9uL2Rpc3QvbmF0aXZlLW1vZHVsZXMvYXVyZWxpYS12YWxpZGF0aW9uLmpzP2YwZDciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBa0M7QUFDK0w7QUFDbks7QUFDZjtBQUNnRDtBQUN0QjtBQUM3Qjs7QUFFNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCxRQUFRO0FBQ3pEO0FBQ0E7QUFDQSxtREFBbUQsdURBQUc7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsK0RBQWUsMEJBQTBCLDhEQUFjO0FBQ3hGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLDJEQUFXO0FBQ3pDLGlCQUFpQixxRUFBYTtBQUM5QjtBQUNBO0FBQ0EsbUNBQW1DLDREQUFZO0FBQy9DO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQywyREFBVztBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLDJEQUFXO0FBQzNDLG1DQUFtQyw0REFBWSwrQkFBK0IsMkRBQVc7QUFDekY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsc0RBQU07QUFDM0M7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLGlEQUFpRCxtQkFBbUIsdUJBQXVCLDBDQUEwQyxNQUFNO0FBQzNJO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLCtEQUErRDtBQUMvRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVLGdCQUFnQixzQ0FBc0MsaUJBQWlCLEVBQUU7QUFDbkYseUJBQXlCLHVEQUF1RDtBQUNoRjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLFFBQVE7QUFDcEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQywwQ0FBMEM7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLGdCQUFnQjtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnRkFBZ0YsaUNBQWlDLEVBQUU7QUFDbkg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxxQkFBcUI7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsMEJBQTBCO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3REFBd0QsVUFBVSx1REFBdUQsRUFBRSxFQUFFO0FBQzdIO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwREFBMEQsVUFBVSx1REFBdUQsRUFBRSxFQUFFO0FBQy9ILFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLG1EQUFtRDtBQUN2RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxtRUFBbUU7QUFDL0c7QUFDQTtBQUNBLDRDQUE0Qyw4QkFBOEI7QUFDMUU7QUFDQTtBQUNBLHFDQUFxQyxzRUFBc0U7QUFDM0c7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsYUFBYTtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QywwREFBMEQ7QUFDakc7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLDRFQUE0RTtBQUNuSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnRUFBZ0UsZ0JBQWdCO0FBQ2hGO0FBQ0E7QUFDQTtBQUNBLGlFQUFpRSxnQkFBZ0I7QUFDakY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5RUFBeUUsMkNBQTJDLG9CQUFvQixFQUFFLE1BQU0sRUFBRTtBQUNsSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQsaUJBQWlCLEVBQUU7QUFDeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0RBQXdELGdCQUFnQjtBQUN4RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLHdDQUF3QztBQUMvRTtBQUNBLG9FQUFvRSxnSEFBZ0gsRUFBRTtBQUN0TDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLDBDQUEwQztBQUNuRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRCwwQkFBMEI7QUFDN0U7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQsMEJBQTBCO0FBQzdFO0FBQ0E7QUFDQSxxQ0FBcUMscUNBQXFDO0FBQzFFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDLGdCQUFnQjtBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QiwyREFBMkQ7QUFDbEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQiw2Q0FBNkM7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyx3QkFBd0I7QUFDdkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEMsZ0JBQWdCO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsMkRBQTJEO0FBQ3RGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLGdDQUFnQztBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLDZFQUFRO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDREQUE0RCw0Q0FBNEMsRUFBRTtBQUMxRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLG9FQUFTO0FBQy9DO0FBQ0EsUUFBUSx1RUFBZTtBQUN2QjtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLG9FQUFTO0FBQ3ZEO0FBQ0EsUUFBUSx1RUFBZTtBQUN2QjtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxvRUFBUztBQUNyRDtBQUNBLFFBQVEsdUVBQWU7QUFDdkI7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxvRUFBUztBQUN2RDtBQUNBLFFBQVEsdUVBQWU7QUFDdkI7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRCxvRUFBUztBQUM3RDtBQUNBLFFBQVEsdUVBQWU7QUFDdkI7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQix1REFBRyxVQUFVLHlFQUFJO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDLDBDQUEwQyxFQUFFO0FBQ3pGO0FBQ0E7QUFDQTtBQUNBLHNFQUFzRSwyQkFBMkIsRUFBRTtBQUNuRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1ELGdCQUFnQjtBQUNuRTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQsZ0JBQWdCO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyxrQ0FBa0M7QUFDNUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSwyRUFBUSxFQUFFLHFCQUFxQiwyREFBVyxTQUFTO0FBQzNEO0FBQ0E7QUFDQSxRQUFRLDJFQUFRLEVBQUUsNENBQTRDLDJEQUFXLFNBQVM7QUFDbEY7QUFDQTtBQUNBLFFBQVEsa0ZBQWU7QUFDdkI7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEseUVBQWlCO0FBQ3pCO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0RBQWtELHVFQUF1RTtBQUN6SDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsaUJBQWlCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsNkRBQWE7QUFDdEQsa0NBQWtDLGdFQUFnQjtBQUNsRCx1Q0FBdUMsZ0VBQWdCO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsNkRBQWE7QUFDcEM7QUFDQSw2QkFBNkIsNkRBQWE7QUFDMUMsdUJBQXVCLGtCQUFrQjtBQUN6Qyw2QkFBNkIsc0RBQU0sc0JBQXNCLHNEQUFNLG1DQUFtQyw2REFBYTtBQUMvRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQiwyREFBVyxLQUFLLHNEQUFNLFdBQVcsc0RBQU0sd0NBQXdDLHNEQUFNLDBFQUEwRSwwREFBVTtBQUM1TDtBQUNBLHNDQUFzQywwRUFBZTtBQUNyRDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksaUVBQVM7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsYUFBYTtBQUM3QixpQkFBaUIsYUFBYTtBQUM5QixnQkFBZ0IsYUFBYTtBQUM3QixjQUFjLGFBQWE7QUFDM0Isa0JBQWtCLGFBQWEsb0JBQW9CLGVBQWUsWUFBWSxnQ0FBZ0M7QUFDOUcsa0JBQWtCLGFBQWEseUJBQXlCLGVBQWUsWUFBWSxnQ0FBZ0M7QUFDbkgsaUJBQWlCLGFBQWEseUJBQXlCLGNBQWMsT0FBTywrQkFBK0I7QUFDM0csaUJBQWlCLGFBQWEsNEJBQTRCLGNBQWMsT0FBTywrQkFBK0I7QUFDOUcsZUFBZSxhQUFhLFdBQVcsc0JBQXNCO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLDJEQUEyRDtBQUMvRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLHVCQUF1QixrQkFBa0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkRBQTJELHdFQUFhO0FBQ3hFO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLGFBQWE7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsdUJBQXVCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsdUJBQXVCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELHlGQUF5RixFQUFFO0FBQzNJO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlEQUF5RCxFQUFFLGdDQUFnQyxLQUFLLDZDQUE2QyxLQUFLO0FBQ2xKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0QsOEZBQThGLEVBQUUsR0FBRyxpQkFBaUI7QUFDcEs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0QsOEZBQThGLEVBQUUsR0FBRyxpQkFBaUI7QUFDcEs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0QsdUVBQXVFLEVBQUUsR0FBRyxlQUFlO0FBQzNJO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELHVFQUF1RSxFQUFFLEdBQUcsZUFBZTtBQUMzSTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCx5RkFBeUYsRUFBRSxHQUFHLCtCQUErQjtBQUM3SztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtEQUErRCxnQ0FBZ0M7QUFDL0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrREFBK0QsZ0NBQWdDO0FBQy9GO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMERBQTBELDJEQUEyRCxFQUFFO0FBQ3ZIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsK0JBQStCLHNCQUFzQixFQUFFLEVBQUUsRUFBRTtBQUNsRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsK0JBQStCLDRCQUE0QixFQUFFLEVBQUUsRUFBRTtBQUN4RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUU2cEIiLCJmaWxlIjoiYXVyZWxpYS12YWxpZGF0aW9uLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9NIH0gZnJvbSAnYXVyZWxpYS1wYWwnO1xuaW1wb3J0IHsgQWNjZXNzTWVtYmVyLCBBY2Nlc3NTY29wZSwgQWNjZXNzS2V5ZWQsIEJpbmRpbmdCZWhhdmlvciwgVmFsdWVDb252ZXJ0ZXIsIGdldENvbnRleHRGb3IsIFBhcnNlciwgYmluZGluZ0JlaGF2aW9yLCBiaW5kaW5nTW9kZSwgTGl0ZXJhbFN0cmluZywgQmluYXJ5LCBDb25kaXRpb25hbCwgTGl0ZXJhbFByaW1pdGl2ZSwgQ2FsbE1lbWJlciB9IGZyb20gJ2F1cmVsaWEtYmluZGluZyc7XG5pbXBvcnQgeyBPcHRpb25hbCwgTGF6eSB9IGZyb20gJ2F1cmVsaWEtZGVwZW5kZW5jeS1pbmplY3Rpb24nO1xuaW1wb3J0IHsgVGFza1F1ZXVlIH0gZnJvbSAnYXVyZWxpYS10YXNrLXF1ZXVlJztcbmltcG9ydCB7IGN1c3RvbUF0dHJpYnV0ZSwgYmluZGFibGUsIEJpbmRpbmdMYW5ndWFnZSwgVmlld1Jlc291cmNlcyB9IGZyb20gJ2F1cmVsaWEtdGVtcGxhdGluZyc7XG5pbXBvcnQgeyBjdXN0b21BdHRyaWJ1dGUgYXMgY3VzdG9tQXR0cmlidXRlJDEgfSBmcm9tICdhdXJlbGlhLWZyYW1ld29yayc7XG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tICdhdXJlbGlhLWxvZ2dpbmcnO1xuXG4vKipcclxuICogR2V0cyB0aGUgRE9NIGVsZW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRhLWJpbmRpbmcuIE1vc3Qgb2YgdGhlIHRpbWUgaXQnc1xyXG4gKiB0aGUgYmluZGluZy50YXJnZXQgYnV0IHNvbWV0aW1lcyBiaW5kaW5nLnRhcmdldCBpcyBhbiBhdXJlbGlhIGN1c3RvbSBlbGVtZW50LFxyXG4gKiBvciBjdXN0b20gYXR0cmlidXRlIHdoaWNoIGlzIGEgamF2YXNjcmlwdCBcImNsYXNzXCIgaW5zdGFuY2UsIHNvIHdlIG5lZWQgdG8gdXNlXHJcbiAqIHRoZSBjb250cm9sbGVyJ3MgY29udGFpbmVyIHRvIHJldHJpZXZlIHRoZSBhY3R1YWwgRE9NIGVsZW1lbnQuXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRUYXJnZXRET01FbGVtZW50KGJpbmRpbmcsIHZpZXcpIHtcclxuICAgIHZhciB0YXJnZXQgPSBiaW5kaW5nLnRhcmdldDtcclxuICAgIC8vIERPTSBlbGVtZW50XHJcbiAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XHJcbiAgICB9XHJcbiAgICAvLyBjdXN0b20gZWxlbWVudCBvciBjdXN0b20gYXR0cmlidXRlXHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6cHJlZmVyLWNvbnN0XHJcbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSB2aWV3LmNvbnRyb2xsZXJzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcclxuICAgICAgICB2YXIgY29udHJvbGxlciA9IHZpZXcuY29udHJvbGxlcnNbaV07XHJcbiAgICAgICAgaWYgKGNvbnRyb2xsZXIudmlld01vZGVsID09PSB0YXJnZXQpIHtcclxuICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBjb250cm9sbGVyLmNvbnRhaW5lci5nZXQoRE9NLkVsZW1lbnQpO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIGxvY2F0ZSB0YXJnZXQgZWxlbWVudCBmb3IgXFxcIlwiICsgYmluZGluZy5zb3VyY2VFeHByZXNzaW9uICsgXCJcXFwiLlwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gbG9jYXRlIHRhcmdldCBlbGVtZW50IGZvciBcXFwiXCIgKyBiaW5kaW5nLnNvdXJjZUV4cHJlc3Npb24gKyBcIlxcXCIuXCIpO1xyXG59XG5cbmZ1bmN0aW9uIGdldE9iamVjdChleHByZXNzaW9uLCBvYmplY3RFeHByZXNzaW9uLCBzb3VyY2UpIHtcclxuICAgIHZhciB2YWx1ZSA9IG9iamVjdEV4cHJlc3Npb24uZXZhbHVhdGUoc291cmNlLCBudWxsKTtcclxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0KSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxyXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlICdcIiArIG9iamVjdEV4cHJlc3Npb24gKyBcIicgcGFydCBvZiAnXCIgKyBleHByZXNzaW9uICsgXCInIGV2YWx1YXRlcyB0byBcIiArIHZhbHVlICsgXCIgaW5zdGVhZCBvZiBhbiBvYmplY3QsIG51bGwgb3IgdW5kZWZpbmVkLlwiKTtcclxufVxyXG4vKipcclxuICogUmV0cmlldmVzIHRoZSBvYmplY3QgYW5kIHByb3BlcnR5IG5hbWUgZm9yIHRoZSBzcGVjaWZpZWQgZXhwcmVzc2lvbi5cclxuICogQHBhcmFtIGV4cHJlc3Npb24gVGhlIGV4cHJlc3Npb25cclxuICogQHBhcmFtIHNvdXJjZSBUaGUgc2NvcGVcclxuICovXHJcbmZ1bmN0aW9uIGdldFByb3BlcnR5SW5mbyhleHByZXNzaW9uLCBzb3VyY2UpIHtcclxuICAgIHZhciBvcmlnaW5hbEV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xyXG4gICAgd2hpbGUgKGV4cHJlc3Npb24gaW5zdGFuY2VvZiBCaW5kaW5nQmVoYXZpb3IgfHwgZXhwcmVzc2lvbiBpbnN0YW5jZW9mIFZhbHVlQ29udmVydGVyKSB7XHJcbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24uZXhwcmVzc2lvbjtcclxuICAgIH1cclxuICAgIHZhciBvYmplY3Q7XHJcbiAgICB2YXIgcHJvcGVydHlOYW1lO1xyXG4gICAgaWYgKGV4cHJlc3Npb24gaW5zdGFuY2VvZiBBY2Nlc3NTY29wZSkge1xyXG4gICAgICAgIG9iamVjdCA9IGdldENvbnRleHRGb3IoZXhwcmVzc2lvbi5uYW1lLCBzb3VyY2UsIGV4cHJlc3Npb24uYW5jZXN0b3IpO1xyXG4gICAgICAgIHByb3BlcnR5TmFtZSA9IGV4cHJlc3Npb24ubmFtZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGV4cHJlc3Npb24gaW5zdGFuY2VvZiBBY2Nlc3NNZW1iZXIpIHtcclxuICAgICAgICBvYmplY3QgPSBnZXRPYmplY3Qob3JpZ2luYWxFeHByZXNzaW9uLCBleHByZXNzaW9uLm9iamVjdCwgc291cmNlKTtcclxuICAgICAgICBwcm9wZXJ0eU5hbWUgPSBleHByZXNzaW9uLm5hbWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChleHByZXNzaW9uIGluc3RhbmNlb2YgQWNjZXNzS2V5ZWQpIHtcclxuICAgICAgICBvYmplY3QgPSBnZXRPYmplY3Qob3JpZ2luYWxFeHByZXNzaW9uLCBleHByZXNzaW9uLm9iamVjdCwgc291cmNlKTtcclxuICAgICAgICBwcm9wZXJ0eU5hbWUgPSBleHByZXNzaW9uLmtleS5ldmFsdWF0ZShzb3VyY2UpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwcmVzc2lvbiAnXCIgKyBvcmlnaW5hbEV4cHJlc3Npb24gKyBcIicgaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgdmFsaWRhdGUgYmluZGluZy1iZWhhdmlvci5cIik7XHJcbiAgICB9XHJcbiAgICBpZiAob2JqZWN0ID09PSBudWxsIHx8IG9iamVjdCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBvYmplY3Q6IG9iamVjdCwgcHJvcGVydHlOYW1lOiBwcm9wZXJ0eU5hbWUgfTtcclxufVxuXG5mdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IFN0cmluZ10nO1xyXG59XHJcbmZ1bmN0aW9uIGlzTnVtYmVyKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgTnVtYmVyXSc7XHJcbn1cblxudmFyIFByb3BlcnR5QWNjZXNzb3JQYXJzZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBQcm9wZXJ0eUFjY2Vzc29yUGFyc2VyKHBhcnNlcikge1xyXG4gICAgICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xyXG4gICAgfVxyXG4gICAgUHJvcGVydHlBY2Nlc3NvclBhcnNlci5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbiAocHJvcGVydHkpIHtcclxuICAgICAgICBpZiAoaXNTdHJpbmcocHJvcGVydHkpIHx8IGlzTnVtYmVyKHByb3BlcnR5KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcHJvcGVydHk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBhY2Nlc3NvclRleHQgPSBnZXRBY2Nlc3NvckV4cHJlc3Npb24ocHJvcGVydHkudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgdmFyIGFjY2Vzc29yID0gdGhpcy5wYXJzZXIucGFyc2UoYWNjZXNzb3JUZXh0KTtcclxuICAgICAgICBpZiAoYWNjZXNzb3IgaW5zdGFuY2VvZiBBY2Nlc3NTY29wZVxyXG4gICAgICAgICAgICB8fCBhY2Nlc3NvciBpbnN0YW5jZW9mIEFjY2Vzc01lbWJlciAmJiBhY2Nlc3Nvci5vYmplY3QgaW5zdGFuY2VvZiBBY2Nlc3NTY29wZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gYWNjZXNzb3IubmFtZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBwcm9wZXJ0eSBleHByZXNzaW9uOiBcXFwiXCIgKyBhY2Nlc3NvciArIFwiXFxcIlwiKTtcclxuICAgIH07XHJcbiAgICBQcm9wZXJ0eUFjY2Vzc29yUGFyc2VyLmluamVjdCA9IFtQYXJzZXJdO1xyXG4gICAgcmV0dXJuIFByb3BlcnR5QWNjZXNzb3JQYXJzZXI7XHJcbn0oKSk7XHJcbmZ1bmN0aW9uIGdldEFjY2Vzc29yRXhwcmVzc2lvbihmbikge1xyXG4gICAgLyogdHNsaW50OmRpc2FibGU6bWF4LWxpbmUtbGVuZ3RoICovXHJcbiAgICB2YXIgY2xhc3NpYyA9IC9eZnVuY3Rpb25cXHMqXFwoWyRfXFx3XFxkXStcXClcXHMqXFx7KD86XFxzKlwidXNlIHN0cmljdFwiOyk/XFxzKig/OlskX1xcd1xcZC5bJ1wiXFxdKztdKyk/XFxzKnJldHVyblxccytbJF9cXHdcXGRdK1xcLihbJF9cXHdcXGRdKylcXHMqOz9cXHMqXFx9JC87XHJcbiAgICAvKiB0c2xpbnQ6ZW5hYmxlOm1heC1saW5lLWxlbmd0aCAqL1xyXG4gICAgdmFyIGFycm93ID0gL15cXCg/WyRfXFx3XFxkXStcXCk/XFxzKj0+XFxzKlskX1xcd1xcZF0rXFwuKFskX1xcd1xcZF0rKSQvO1xyXG4gICAgdmFyIG1hdGNoID0gY2xhc3NpYy5leGVjKGZuKSB8fCBhcnJvdy5leGVjKGZuKTtcclxuICAgIGlmIChtYXRjaCA9PT0gbnVsbCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBwYXJzZSBhY2Nlc3NvciBmdW5jdGlvbjpcXG5cIiArIGZuKTtcclxuICAgIH1cclxuICAgIHJldHVybiBtYXRjaFsxXTtcclxufVxuXG4vKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZVxyXG50aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZVxyXG5MaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG5cclxuVEhJUyBDT0RFIElTIFBST1ZJREVEIE9OIEFOICpBUyBJUyogQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxyXG5LSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIEFOWSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsXHJcbk1FUkNIQU5UQUJMSVRZIE9SIE5PTi1JTkZSSU5HRU1FTlQuXHJcblxyXG5TZWUgdGhlIEFwYWNoZSBWZXJzaW9uIDIuMCBMaWNlbnNlIGZvciBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcclxuYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSAqL1xyXG5cclxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59XG5cbi8qKlxyXG4gKiBWYWxpZGF0aW9uIHRyaWdnZXJzLlxyXG4gKi9cclxudmFyIHZhbGlkYXRlVHJpZ2dlcjtcclxuKGZ1bmN0aW9uICh2YWxpZGF0ZVRyaWdnZXIpIHtcclxuICAgIC8qKlxyXG4gICAgICogTWFudWFsIHZhbGlkYXRpb24uICBVc2UgdGhlIGNvbnRyb2xsZXIncyBgdmFsaWRhdGUoKWAgYW5kICBgcmVzZXQoKWAgbWV0aG9kc1xyXG4gICAgICogdG8gdmFsaWRhdGUgYWxsIGJpbmRpbmdzLlxyXG4gICAgICovXHJcbiAgICB2YWxpZGF0ZVRyaWdnZXJbdmFsaWRhdGVUcmlnZ2VyW1wibWFudWFsXCJdID0gMF0gPSBcIm1hbnVhbFwiO1xyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGF0ZSB0aGUgYmluZGluZyB3aGVuIHRoZSBiaW5kaW5nJ3MgdGFyZ2V0IGVsZW1lbnQgZmlyZXMgYSBET00gXCJibHVyXCIgZXZlbnQuXHJcbiAgICAgKi9cclxuICAgIHZhbGlkYXRlVHJpZ2dlclt2YWxpZGF0ZVRyaWdnZXJbXCJibHVyXCJdID0gMV0gPSBcImJsdXJcIjtcclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhdGUgdGhlIGJpbmRpbmcgd2hlbiBpdCB1cGRhdGVzIHRoZSBtb2RlbCBkdWUgdG8gYSBjaGFuZ2UgaW4gdGhlIHZpZXcuXHJcbiAgICAgKi9cclxuICAgIHZhbGlkYXRlVHJpZ2dlclt2YWxpZGF0ZVRyaWdnZXJbXCJjaGFuZ2VcIl0gPSAyXSA9IFwiY2hhbmdlXCI7XHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYXRlIHRoZSBiaW5kaW5nIHdoZW4gdGhlIGJpbmRpbmcncyB0YXJnZXQgZWxlbWVudCBmaXJlcyBhIERPTSBcImJsdXJcIiBldmVudCBhbmRcclxuICAgICAqIHdoZW4gaXQgdXBkYXRlcyB0aGUgbW9kZWwgZHVlIHRvIGEgY2hhbmdlIGluIHRoZSB2aWV3LlxyXG4gICAgICovXHJcbiAgICB2YWxpZGF0ZVRyaWdnZXJbdmFsaWRhdGVUcmlnZ2VyW1wiY2hhbmdlT3JCbHVyXCJdID0gM10gPSBcImNoYW5nZU9yQmx1clwiO1xyXG59KSh2YWxpZGF0ZVRyaWdnZXIgfHwgKHZhbGlkYXRlVHJpZ2dlciA9IHt9KSk7XG5cbi8qKlxyXG4gKiBWYWxpZGF0ZXMgb2JqZWN0cyBhbmQgcHJvcGVydGllcy5cclxuICovXHJcbnZhciBWYWxpZGF0b3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBWYWxpZGF0b3IoKSB7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gVmFsaWRhdG9yO1xyXG59KCkpO1xuXG4vKipcclxuICogVGhlIHJlc3VsdCBvZiB2YWxpZGF0aW5nIGFuIGluZGl2aWR1YWwgdmFsaWRhdGlvbiBydWxlLlxyXG4gKi9cclxudmFyIFZhbGlkYXRlUmVzdWx0ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gcnVsZSBUaGUgcnVsZSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlc3VsdC4gVmFsaWRhdG9yIGltcGxlbWVudGF0aW9uIHNwZWNpZmljLlxyXG4gICAgICogQHBhcmFtIG9iamVjdCBUaGUgb2JqZWN0IHRoYXQgd2FzIHZhbGlkYXRlZC5cclxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgd2FzIHZhbGlkYXRlZC5cclxuICAgICAqIEBwYXJhbSBlcnJvciBUaGUgZXJyb3IsIGlmIHRoZSByZXN1bHQgaXMgYSB2YWxpZGF0aW9uIGVycm9yLlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBWYWxpZGF0ZVJlc3VsdChydWxlLCBvYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsaWQsIG1lc3NhZ2UpIHtcclxuICAgICAgICBpZiAobWVzc2FnZSA9PT0gdm9pZCAwKSB7IG1lc3NhZ2UgPSBudWxsOyB9XHJcbiAgICAgICAgdGhpcy5ydWxlID0gcnVsZTtcclxuICAgICAgICB0aGlzLm9iamVjdCA9IG9iamVjdDtcclxuICAgICAgICB0aGlzLnByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTtcclxuICAgICAgICB0aGlzLnZhbGlkID0gdmFsaWQ7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcclxuICAgICAgICB0aGlzLmlkID0gVmFsaWRhdGVSZXN1bHQubmV4dElkKys7XHJcbiAgICB9XHJcbiAgICBWYWxpZGF0ZVJlc3VsdC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWQgPyAnVmFsaWQuJyA6IHRoaXMubWVzc2FnZTtcclxuICAgIH07XHJcbiAgICBWYWxpZGF0ZVJlc3VsdC5uZXh0SWQgPSAwO1xyXG4gICAgcmV0dXJuIFZhbGlkYXRlUmVzdWx0O1xyXG59KCkpO1xuXG52YXIgVmFsaWRhdGVFdmVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIFZhbGlkYXRlRXZlbnQoXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0eXBlIG9mIHZhbGlkYXRlIGV2ZW50LiBFaXRoZXIgXCJ2YWxpZGF0ZVwiIG9yIFwicmVzZXRcIi5cclxuICAgICAqL1xyXG4gICAgdHlwZSwgXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBjb250cm9sbGVyJ3MgY3VycmVudCBhcnJheSBvZiBlcnJvcnMuIEZvciBhbiBhcnJheSBjb250YWluaW5nIGJvdGhcclxuICAgICAqIGZhaWxlZCBydWxlcyBhbmQgcGFzc2VkIHJ1bGVzLCB1c2UgdGhlIFwicmVzdWx0c1wiIHByb3BlcnR5LlxyXG4gICAgICovXHJcbiAgICBlcnJvcnMsIFxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgY29udHJvbGxlcidzIGN1cnJlbnQgYXJyYXkgb2YgdmFsaWRhdGUgcmVzdWx0cy4gVGhpc1xyXG4gICAgICogaW5jbHVkZXMgYm90aCBwYXNzZWQgcnVsZXMgYW5kIGZhaWxlZCBydWxlcy4gRm9yIGFuIGFycmF5IG9mIG9ubHkgZmFpbGVkIHJ1bGVzLFxyXG4gICAgICogdXNlIHRoZSBcImVycm9yc1wiIHByb3BlcnR5LlxyXG4gICAgICovXHJcbiAgICByZXN1bHRzLCBcclxuICAgIC8qKlxyXG4gICAgICogVGhlIGluc3RydWN0aW9uIHBhc3NlZCB0byB0aGUgXCJ2YWxpZGF0ZVwiIG9yIFwicmVzZXRcIiBldmVudC4gV2lsbCBiZSBudWxsIHdoZW5cclxuICAgICAqIHRoZSBjb250cm9sbGVyJ3MgdmFsaWRhdGUvcmVzZXQgbWV0aG9kIHdhcyBjYWxsZWQgd2l0aCBubyBpbnN0cnVjdGlvbiBhcmd1bWVudC5cclxuICAgICAqL1xyXG4gICAgaW5zdHJ1Y3Rpb24sIFxyXG4gICAgLyoqXHJcbiAgICAgKiBJbiBldmVudHMgd2l0aCB0eXBlID09PSBcInZhbGlkYXRlXCIsIHRoaXMgcHJvcGVydHkgd2lsbCBjb250YWluIHRoZSByZXN1bHRcclxuICAgICAqIG9mIHZhbGlkYXRpbmcgdGhlIGluc3RydWN0aW9uIChzZWUgXCJpbnN0cnVjdGlvblwiIHByb3BlcnR5KS4gVXNlIHRoZSBjb250cm9sbGVyVmFsaWRhdGVSZXN1bHRcclxuICAgICAqIHRvIGFjY2VzcyB0aGUgdmFsaWRhdGUgcmVzdWx0cyBzcGVjaWZpYyB0byB0aGUgY2FsbCB0byBcInZhbGlkYXRlXCJcclxuICAgICAqIChhcyBvcHBvc2VkIHRvIHVzaW5nIHRoZSBcInJlc3VsdHNcIiBhbmQgXCJlcnJvcnNcIiBwcm9wZXJ0aWVzIHRvIGFjY2VzcyB0aGUgY29udHJvbGxlcidzIGVudGlyZVxyXG4gICAgICogc2V0IG9mIHJlc3VsdHMvZXJyb3JzKS5cclxuICAgICAqL1xyXG4gICAgY29udHJvbGxlclZhbGlkYXRlUmVzdWx0KSB7XHJcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcclxuICAgICAgICB0aGlzLmVycm9ycyA9IGVycm9ycztcclxuICAgICAgICB0aGlzLnJlc3VsdHMgPSByZXN1bHRzO1xyXG4gICAgICAgIHRoaXMuaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbjtcclxuICAgICAgICB0aGlzLmNvbnRyb2xsZXJWYWxpZGF0ZVJlc3VsdCA9IGNvbnRyb2xsZXJWYWxpZGF0ZVJlc3VsdDtcclxuICAgIH1cclxuICAgIHJldHVybiBWYWxpZGF0ZUV2ZW50O1xyXG59KCkpO1xuXG4vKipcclxuICogT3JjaGVzdHJhdGVzIHZhbGlkYXRpb24uXHJcbiAqIE1hbmFnZXMgYSBzZXQgb2YgYmluZGluZ3MsIHJlbmRlcmVycyBhbmQgb2JqZWN0cy5cclxuICogRXhwb3NlcyB0aGUgY3VycmVudCBsaXN0IG9mIHZhbGlkYXRpb24gcmVzdWx0cyBmb3IgYmluZGluZyBwdXJwb3Nlcy5cclxuICovXHJcbnZhciBWYWxpZGF0aW9uQ29udHJvbGxlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIFZhbGlkYXRpb25Db250cm9sbGVyKHZhbGlkYXRvciwgcHJvcGVydHlQYXJzZXIpIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXRvciA9IHZhbGlkYXRvcjtcclxuICAgICAgICB0aGlzLnByb3BlcnR5UGFyc2VyID0gcHJvcGVydHlQYXJzZXI7XHJcbiAgICAgICAgLy8gUmVnaXN0ZXJlZCBiaW5kaW5ncyAodmlhIHRoZSB2YWxpZGF0ZSBiaW5kaW5nIGJlaGF2aW9yKVxyXG4gICAgICAgIHRoaXMuYmluZGluZ3MgPSBuZXcgTWFwKCk7XHJcbiAgICAgICAgLy8gUmVuZGVyZXJzIHRoYXQgaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZSBjb250cm9sbGVyIGluc3RhbmNlLlxyXG4gICAgICAgIHRoaXMucmVuZGVyZXJzID0gW107XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVmFsaWRhdGlvbiByZXN1bHRzIHRoYXQgaGF2ZSBiZWVuIHJlbmRlcmVkIGJ5IHRoZSBjb250cm9sbGVyLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucmVzdWx0cyA9IFtdO1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFZhbGlkYXRpb24gZXJyb3JzIHRoYXQgaGF2ZSBiZWVuIHJlbmRlcmVkIGJ5IHRoZSBjb250cm9sbGVyLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZXJyb3JzID0gW107XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogIFdoZXRoZXIgdGhlIGNvbnRyb2xsZXIgaXMgY3VycmVudGx5IHZhbGlkYXRpbmcuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgLy8gRWxlbWVudHMgcmVsYXRlZCB0byB2YWxpZGF0aW9uIHJlc3VsdHMgdGhhdCBoYXZlIGJlZW4gcmVuZGVyZWQuXHJcbiAgICAgICAgdGhpcy5lbGVtZW50cyA9IG5ldyBNYXAoKTtcclxuICAgICAgICAvLyBPYmplY3RzIHRoYXQgaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZSBjb250cm9sbGVyIGluc3RhbmNlIChlbnRpdHktc3R5bGUgdmFsaWRhdGlvbikuXHJcbiAgICAgICAgdGhpcy5vYmplY3RzID0gbmV3IE1hcCgpO1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB0cmlnZ2VyIHRoYXQgd2lsbCBpbnZva2UgYXV0b21hdGljIHZhbGlkYXRpb24gb2YgYSBwcm9wZXJ0eSB1c2VkIGluIGEgYmluZGluZy5cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnZhbGlkYXRlVHJpZ2dlciA9IHZhbGlkYXRlVHJpZ2dlci5ibHVyO1xyXG4gICAgICAgIC8vIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHZhbGlkYXRpb24gaGFzIGNvbXBsZXRlZC5cclxuICAgICAgICB0aGlzLmZpbmlzaFZhbGlkYXRpbmcgPSBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgICB0aGlzLmV2ZW50Q2FsbGJhY2tzID0gW107XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFN1YnNjcmliZSB0byBjb250cm9sbGVyIHZhbGlkYXRlIGFuZCByZXNldCBldmVudHMuIFRoZXNlIGV2ZW50cyBvY2N1ciB3aGVuIHRoZVxyXG4gICAgICogY29udHJvbGxlcidzIFwidmFsaWRhdGVcIlwiIGFuZCBcInJlc2V0XCIgbWV0aG9kcyBhcmUgY2FsbGVkLlxyXG4gICAgICogQHBhcmFtIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBiZSBpbnZva2VkIHdoZW4gdGhlIGNvbnRyb2xsZXIgdmFsaWRhdGVzIG9yIHJlc2V0cy5cclxuICAgICAqL1xyXG4gICAgVmFsaWRhdGlvbkNvbnRyb2xsZXIucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5ldmVudENhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBkaXNwb3NlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBfdGhpcy5ldmVudENhbGxiYWNrcy5pbmRleE9mKGNhbGxiYWNrKTtcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5ldmVudENhbGxiYWNrcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYW4gb2JqZWN0IHRvIHRoZSBzZXQgb2Ygb2JqZWN0cyB0aGF0IHNob3VsZCBiZSB2YWxpZGF0ZWQgd2hlbiB2YWxpZGF0ZSBpcyBjYWxsZWQuXHJcbiAgICAgKiBAcGFyYW0gb2JqZWN0IFRoZSBvYmplY3QuXHJcbiAgICAgKiBAcGFyYW0gcnVsZXMgT3B0aW9uYWwuIFRoZSBydWxlcy4gSWYgcnVsZXMgYXJlbid0IHN1cHBsaWVkIHRoZSBWYWxpZGF0b3IgaW1wbGVtZW50YXRpb24gd2lsbCBsb29rdXAgdGhlIHJ1bGVzLlxyXG4gICAgICovXHJcbiAgICBWYWxpZGF0aW9uQ29udHJvbGxlci5wcm90b3R5cGUuYWRkT2JqZWN0ID0gZnVuY3Rpb24gKG9iamVjdCwgcnVsZXMpIHtcclxuICAgICAgICB0aGlzLm9iamVjdHMuc2V0KG9iamVjdCwgcnVsZXMpO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhbiBvYmplY3QgZnJvbSB0aGUgc2V0IG9mIG9iamVjdHMgdGhhdCBzaG91bGQgYmUgdmFsaWRhdGVkIHdoZW4gdmFsaWRhdGUgaXMgY2FsbGVkLlxyXG4gICAgICogQHBhcmFtIG9iamVjdCBUaGUgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBWYWxpZGF0aW9uQ29udHJvbGxlci5wcm90b3R5cGUucmVtb3ZlT2JqZWN0ID0gZnVuY3Rpb24gKG9iamVjdCkge1xyXG4gICAgICAgIHRoaXMub2JqZWN0cy5kZWxldGUob2JqZWN0KTtcclxuICAgICAgICB0aGlzLnByb2Nlc3NSZXN1bHREZWx0YSgncmVzZXQnLCB0aGlzLnJlc3VsdHMuZmlsdGVyKGZ1bmN0aW9uIChyZXN1bHQpIHsgcmV0dXJuIHJlc3VsdC5vYmplY3QgPT09IG9iamVjdDsgfSksIFtdKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYW5kIHJlbmRlcnMgYW4gZXJyb3IuXHJcbiAgICAgKi9cclxuICAgIFZhbGlkYXRpb25Db250cm9sbGVyLnByb3RvdHlwZS5hZGRFcnJvciA9IGZ1bmN0aW9uIChtZXNzYWdlLCBvYmplY3QsIHByb3BlcnR5TmFtZSkge1xyXG4gICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT09IHZvaWQgMCkgeyBwcm9wZXJ0eU5hbWUgPSBudWxsOyB9XHJcbiAgICAgICAgdmFyIHJlc29sdmVkUHJvcGVydHlOYW1lO1xyXG4gICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgcmVzb2x2ZWRQcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXNvbHZlZFByb3BlcnR5TmFtZSA9IHRoaXMucHJvcGVydHlQYXJzZXIucGFyc2UocHJvcGVydHlOYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBWYWxpZGF0ZVJlc3VsdCh7IF9fbWFudWFsbHlBZGRlZF9fOiB0cnVlIH0sIG9iamVjdCwgcmVzb2x2ZWRQcm9wZXJ0eU5hbWUsIGZhbHNlLCBtZXNzYWdlKTtcclxuICAgICAgICB0aGlzLnByb2Nlc3NSZXN1bHREZWx0YSgndmFsaWRhdGUnLCBbXSwgW3Jlc3VsdF0pO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIGFuZCB1bnJlbmRlcnMgYW4gZXJyb3IuXHJcbiAgICAgKi9cclxuICAgIFZhbGlkYXRpb25Db250cm9sbGVyLnByb3RvdHlwZS5yZW1vdmVFcnJvciA9IGZ1bmN0aW9uIChyZXN1bHQpIHtcclxuICAgICAgICBpZiAodGhpcy5yZXN1bHRzLmluZGV4T2YocmVzdWx0KSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzUmVzdWx0RGVsdGEoJ3Jlc2V0JywgW3Jlc3VsdF0sIFtdKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGEgcmVuZGVyZXIuXHJcbiAgICAgKiBAcGFyYW0gcmVuZGVyZXIgVGhlIHJlbmRlcmVyLlxyXG4gICAgICovXHJcbiAgICBWYWxpZGF0aW9uQ29udHJvbGxlci5wcm90b3R5cGUuYWRkUmVuZGVyZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXJzLnB1c2gocmVuZGVyZXIpO1xyXG4gICAgICAgIHJlbmRlcmVyLnJlbmRlcih7XHJcbiAgICAgICAgICAgIGtpbmQ6ICd2YWxpZGF0ZScsXHJcbiAgICAgICAgICAgIHJlbmRlcjogdGhpcy5yZXN1bHRzLm1hcChmdW5jdGlvbiAocmVzdWx0KSB7IHJldHVybiAoeyByZXN1bHQ6IHJlc3VsdCwgZWxlbWVudHM6IF90aGlzLmVsZW1lbnRzLmdldChyZXN1bHQpIH0pOyB9KSxcclxuICAgICAgICAgICAgdW5yZW5kZXI6IFtdXHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIGEgcmVuZGVyZXIuXHJcbiAgICAgKiBAcGFyYW0gcmVuZGVyZXIgVGhlIHJlbmRlcmVyLlxyXG4gICAgICovXHJcbiAgICBWYWxpZGF0aW9uQ29udHJvbGxlci5wcm90b3R5cGUucmVtb3ZlUmVuZGVyZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXJzLnNwbGljZSh0aGlzLnJlbmRlcmVycy5pbmRleE9mKHJlbmRlcmVyKSwgMSk7XHJcbiAgICAgICAgcmVuZGVyZXIucmVuZGVyKHtcclxuICAgICAgICAgICAga2luZDogJ3Jlc2V0JyxcclxuICAgICAgICAgICAgcmVuZGVyOiBbXSxcclxuICAgICAgICAgICAgdW5yZW5kZXI6IHRoaXMucmVzdWx0cy5tYXAoZnVuY3Rpb24gKHJlc3VsdCkgeyByZXR1cm4gKHsgcmVzdWx0OiByZXN1bHQsIGVsZW1lbnRzOiBfdGhpcy5lbGVtZW50cy5nZXQocmVzdWx0KSB9KTsgfSlcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFJlZ2lzdGVycyBhIGJpbmRpbmcgd2l0aCB0aGUgY29udHJvbGxlci5cclxuICAgICAqIEBwYXJhbSBiaW5kaW5nIFRoZSBiaW5kaW5nIGluc3RhbmNlLlxyXG4gICAgICogQHBhcmFtIHRhcmdldCBUaGUgRE9NIGVsZW1lbnQuXHJcbiAgICAgKiBAcGFyYW0gcnVsZXMgKG9wdGlvbmFsKSBydWxlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGJpbmRpbmcuIFZhbGlkYXRvciBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYy5cclxuICAgICAqL1xyXG4gICAgVmFsaWRhdGlvbkNvbnRyb2xsZXIucHJvdG90eXBlLnJlZ2lzdGVyQmluZGluZyA9IGZ1bmN0aW9uIChiaW5kaW5nLCB0YXJnZXQsIHJ1bGVzKSB7XHJcbiAgICAgICAgdGhpcy5iaW5kaW5ncy5zZXQoYmluZGluZywgeyB0YXJnZXQ6IHRhcmdldCwgcnVsZXM6IHJ1bGVzLCBwcm9wZXJ0eUluZm86IG51bGwgfSk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBVbnJlZ2lzdGVycyBhIGJpbmRpbmcgd2l0aCB0aGUgY29udHJvbGxlci5cclxuICAgICAqIEBwYXJhbSBiaW5kaW5nIFRoZSBiaW5kaW5nIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBWYWxpZGF0aW9uQ29udHJvbGxlci5wcm90b3R5cGUudW5yZWdpc3RlckJpbmRpbmcgPSBmdW5jdGlvbiAoYmluZGluZykge1xyXG4gICAgICAgIHRoaXMucmVzZXRCaW5kaW5nKGJpbmRpbmcpO1xyXG4gICAgICAgIHRoaXMuYmluZGluZ3MuZGVsZXRlKGJpbmRpbmcpO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJwcmV0cyB0aGUgaW5zdHJ1Y3Rpb24gYW5kIHJldHVybnMgYSBwcmVkaWNhdGUgdGhhdCB3aWxsIGlkZW50aWZ5XHJcbiAgICAgKiByZWxldmFudCByZXN1bHRzIGluIHRoZSBsaXN0IG9mIHJlbmRlcmVkIHZhbGlkYXRpb24gcmVzdWx0cy5cclxuICAgICAqL1xyXG4gICAgVmFsaWRhdGlvbkNvbnRyb2xsZXIucHJvdG90eXBlLmdldEluc3RydWN0aW9uUHJlZGljYXRlID0gZnVuY3Rpb24gKGluc3RydWN0aW9uKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICAgICAgdmFyIG9iamVjdF8xID0gaW5zdHJ1Y3Rpb24ub2JqZWN0LCBwcm9wZXJ0eU5hbWVfMSA9IGluc3RydWN0aW9uLnByb3BlcnR5TmFtZSwgcnVsZXNfMSA9IGluc3RydWN0aW9uLnJ1bGVzO1xyXG4gICAgICAgICAgICB2YXIgcHJlZGljYXRlXzE7XHJcbiAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi5wcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHByZWRpY2F0ZV8xID0gZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHgub2JqZWN0ID09PSBvYmplY3RfMSAmJiB4LnByb3BlcnR5TmFtZSA9PT0gcHJvcGVydHlOYW1lXzE7IH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBwcmVkaWNhdGVfMSA9IGZ1bmN0aW9uICh4KSB7IHJldHVybiB4Lm9iamVjdCA9PT0gb2JqZWN0XzE7IH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHJ1bGVzXzEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoeCkgeyByZXR1cm4gcHJlZGljYXRlXzEoeCkgJiYgX3RoaXMudmFsaWRhdG9yLnJ1bGVFeGlzdHMocnVsZXNfMSwgeC5ydWxlKTsgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcHJlZGljYXRlXzE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJ1ZTsgfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGF0ZXMgYW5kIHJlbmRlcnMgcmVzdWx0cy5cclxuICAgICAqIEBwYXJhbSBpbnN0cnVjdGlvbiBPcHRpb25hbC4gSW5zdHJ1Y3Rpb25zIG9uIHdoYXQgdG8gdmFsaWRhdGUuIElmIHVuZGVmaW5lZCwgYWxsXHJcbiAgICAgKiBvYmplY3RzIGFuZCBiaW5kaW5ncyB3aWxsIGJlIHZhbGlkYXRlZC5cclxuICAgICAqL1xyXG4gICAgVmFsaWRhdGlvbkNvbnRyb2xsZXIucHJvdG90eXBlLnZhbGlkYXRlID0gZnVuY3Rpb24gKGluc3RydWN0aW9uKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICAvLyBHZXQgYSBmdW5jdGlvbiB0aGF0IHdpbGwgcHJvY2VzcyB0aGUgdmFsaWRhdGlvbiBpbnN0cnVjdGlvbi5cclxuICAgICAgICB2YXIgZXhlY3V0ZTtcclxuICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnByZWZlci1jb25zdFxyXG4gICAgICAgICAgICB2YXIgb2JqZWN0XzIgPSBpbnN0cnVjdGlvbi5vYmplY3QsIHByb3BlcnR5TmFtZV8yID0gaW5zdHJ1Y3Rpb24ucHJvcGVydHlOYW1lLCBydWxlc18yID0gaW5zdHJ1Y3Rpb24ucnVsZXM7XHJcbiAgICAgICAgICAgIC8vIGlmIHJ1bGVzIHdlcmUgbm90IHNwZWNpZmllZCwgY2hlY2sgdGhlIG9iamVjdCBtYXAuXHJcbiAgICAgICAgICAgIHJ1bGVzXzIgPSBydWxlc18yIHx8IHRoaXMub2JqZWN0cy5nZXQob2JqZWN0XzIpO1xyXG4gICAgICAgICAgICAvLyBwcm9wZXJ0eSBzcGVjaWZpZWQ/XHJcbiAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi5wcm9wZXJ0eU5hbWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgLy8gdmFsaWRhdGUgdGhlIHNwZWNpZmllZCBvYmplY3QuXHJcbiAgICAgICAgICAgICAgICBleGVjdXRlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMudmFsaWRhdG9yLnZhbGlkYXRlT2JqZWN0KG9iamVjdF8yLCBydWxlc18yKTsgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIHZhbGlkYXRlIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkuXHJcbiAgICAgICAgICAgICAgICBleGVjdXRlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMudmFsaWRhdG9yLnZhbGlkYXRlUHJvcGVydHkob2JqZWN0XzIsIHByb3BlcnR5TmFtZV8yLCBydWxlc18yKTsgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gdmFsaWRhdGUgYWxsIG9iamVjdHMgYW5kIGJpbmRpbmdzLlxyXG4gICAgICAgICAgICBleGVjdXRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHByb21pc2VzID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gQXJyYXkuZnJvbShfdGhpcy5vYmplY3RzKTsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgX2IgPSBfYVtfaV0sIG9iamVjdCA9IF9iWzBdLCBydWxlcyA9IF9iWzFdO1xyXG4gICAgICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2goX3RoaXMudmFsaWRhdG9yLnZhbGlkYXRlT2JqZWN0KG9iamVjdCwgcnVsZXMpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZvciAodmFyIF9jID0gMCwgX2QgPSBBcnJheS5mcm9tKF90aGlzLmJpbmRpbmdzKTsgX2MgPCBfZC5sZW5ndGg7IF9jKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgX2UgPSBfZFtfY10sIGJpbmRpbmcgPSBfZVswXSwgcnVsZXMgPSBfZVsxXS5ydWxlcztcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcHJvcGVydHlJbmZvID0gZ2V0UHJvcGVydHlJbmZvKGJpbmRpbmcuc291cmNlRXhwcmVzc2lvbiwgYmluZGluZy5zb3VyY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcHJvcGVydHlJbmZvIHx8IF90aGlzLm9iamVjdHMuaGFzKHByb3BlcnR5SW5mby5vYmplY3QpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKF90aGlzLnZhbGlkYXRvci52YWxpZGF0ZVByb3BlcnR5KHByb3BlcnR5SW5mby5vYmplY3QsIHByb3BlcnR5SW5mby5wcm9wZXJ0eU5hbWUsIHJ1bGVzKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdFNldHMpIHsgcmV0dXJuIHJlc3VsdFNldHMucmVkdWNlKGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhLmNvbmNhdChiKTsgfSwgW10pOyB9KTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gV2FpdCBmb3IgYW55IGV4aXN0aW5nIHZhbGlkYXRpb24gdG8gZmluaXNoLCBleGVjdXRlIHRoZSBpbnN0cnVjdGlvbiwgcmVuZGVyIHRoZSByZXN1bHRzLlxyXG4gICAgICAgIHRoaXMudmFsaWRhdGluZyA9IHRydWU7XHJcbiAgICAgICAgdmFyIHJldHVyblByb21pc2UgPSB0aGlzLmZpbmlzaFZhbGlkYXRpbmdcclxuICAgICAgICAgICAgLnRoZW4oZXhlY3V0ZSlcclxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKG5ld1Jlc3VsdHMpIHtcclxuICAgICAgICAgICAgdmFyIHByZWRpY2F0ZSA9IF90aGlzLmdldEluc3RydWN0aW9uUHJlZGljYXRlKGluc3RydWN0aW9uKTtcclxuICAgICAgICAgICAgdmFyIG9sZFJlc3VsdHMgPSBfdGhpcy5yZXN1bHRzLmZpbHRlcihwcmVkaWNhdGUpO1xyXG4gICAgICAgICAgICBfdGhpcy5wcm9jZXNzUmVzdWx0RGVsdGEoJ3ZhbGlkYXRlJywgb2xkUmVzdWx0cywgbmV3UmVzdWx0cyk7XHJcbiAgICAgICAgICAgIGlmIChyZXR1cm5Qcm9taXNlID09PSBfdGhpcy5maW5pc2hWYWxpZGF0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy52YWxpZGF0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHtcclxuICAgICAgICAgICAgICAgIGluc3RydWN0aW9uOiBpbnN0cnVjdGlvbixcclxuICAgICAgICAgICAgICAgIHZhbGlkOiBuZXdSZXN1bHRzLmZpbmQoZnVuY3Rpb24gKHgpIHsgcmV0dXJuICF4LnZhbGlkOyB9KSA9PT0gdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0czogbmV3UmVzdWx0c1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBfdGhpcy5pbnZva2VDYWxsYmFja3MoaW5zdHJ1Y3Rpb24sIHJlc3VsdCk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChleGNlcHRpb24pIHtcclxuICAgICAgICAgICAgLy8gcmVjb3ZlciwgdG8gZW5hYmxlIHN1YnNlcXVlbnQgY2FsbHMgdG8gdmFsaWRhdGUoKVxyXG4gICAgICAgICAgICBfdGhpcy52YWxpZGF0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIF90aGlzLmZpbmlzaFZhbGlkYXRpbmcgPSBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGV4Y2VwdGlvbik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5maW5pc2hWYWxpZGF0aW5nID0gcmV0dXJuUHJvbWlzZTtcclxuICAgICAgICByZXR1cm4gcmV0dXJuUHJvbWlzZTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0cyBhbnkgcmVuZGVyZWQgdmFsaWRhdGlvbiByZXN1bHRzICh1bnJlbmRlcnMpLlxyXG4gICAgICogQHBhcmFtIGluc3RydWN0aW9uIE9wdGlvbmFsLiBJbnN0cnVjdGlvbnMgb24gd2hhdCB0byByZXNldC4gSWYgdW5zcGVjaWZpZWQgYWxsIHJlbmRlcmVkIHJlc3VsdHNcclxuICAgICAqIHdpbGwgYmUgdW5yZW5kZXJlZC5cclxuICAgICAqL1xyXG4gICAgVmFsaWRhdGlvbkNvbnRyb2xsZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKGluc3RydWN0aW9uKSB7XHJcbiAgICAgICAgdmFyIHByZWRpY2F0ZSA9IHRoaXMuZ2V0SW5zdHJ1Y3Rpb25QcmVkaWNhdGUoaW5zdHJ1Y3Rpb24pO1xyXG4gICAgICAgIHZhciBvbGRSZXN1bHRzID0gdGhpcy5yZXN1bHRzLmZpbHRlcihwcmVkaWNhdGUpO1xyXG4gICAgICAgIHRoaXMucHJvY2Vzc1Jlc3VsdERlbHRhKCdyZXNldCcsIG9sZFJlc3VsdHMsIFtdKTtcclxuICAgICAgICB0aGlzLmludm9rZUNhbGxiYWNrcyhpbnN0cnVjdGlvbiwgbnVsbCk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBlbGVtZW50cyBhc3NvY2lhdGVkIHdpdGggYW4gb2JqZWN0IGFuZCBwcm9wZXJ0eU5hbWUgKGlmIGFueSkuXHJcbiAgICAgKi9cclxuICAgIFZhbGlkYXRpb25Db250cm9sbGVyLnByb3RvdHlwZS5nZXRBc3NvY2lhdGVkRWxlbWVudHMgPSBmdW5jdGlvbiAoX2EpIHtcclxuICAgICAgICB2YXIgb2JqZWN0ID0gX2Eub2JqZWN0LCBwcm9wZXJ0eU5hbWUgPSBfYS5wcm9wZXJ0eU5hbWU7XHJcbiAgICAgICAgdmFyIGVsZW1lbnRzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYiA9IEFycmF5LmZyb20odGhpcy5iaW5kaW5ncyk7IF9pIDwgX2IubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBfYyA9IF9iW19pXSwgYmluZGluZyA9IF9jWzBdLCB0YXJnZXQgPSBfY1sxXS50YXJnZXQ7XHJcbiAgICAgICAgICAgIHZhciBwcm9wZXJ0eUluZm8gPSBnZXRQcm9wZXJ0eUluZm8oYmluZGluZy5zb3VyY2VFeHByZXNzaW9uLCBiaW5kaW5nLnNvdXJjZSk7XHJcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eUluZm8gJiYgcHJvcGVydHlJbmZvLm9iamVjdCA9PT0gb2JqZWN0ICYmIHByb3BlcnR5SW5mby5wcm9wZXJ0eU5hbWUgPT09IHByb3BlcnR5TmFtZSkge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaCh0YXJnZXQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBlbGVtZW50cztcclxuICAgIH07XHJcbiAgICBWYWxpZGF0aW9uQ29udHJvbGxlci5wcm90b3R5cGUucHJvY2Vzc1Jlc3VsdERlbHRhID0gZnVuY3Rpb24gKGtpbmQsIG9sZFJlc3VsdHMsIG5ld1Jlc3VsdHMpIHtcclxuICAgICAgICAvLyBwcmVwYXJlIHRoZSBpbnN0cnVjdGlvbi5cclxuICAgICAgICB2YXIgaW5zdHJ1Y3Rpb24gPSB7XHJcbiAgICAgICAgICAgIGtpbmQ6IGtpbmQsXHJcbiAgICAgICAgICAgIHJlbmRlcjogW10sXHJcbiAgICAgICAgICAgIHVucmVuZGVyOiBbXVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgLy8gY3JlYXRlIGEgc2hhbGxvdyBjb3B5IG9mIG5ld1Jlc3VsdHMgc28gd2UgY2FuIG11dGF0ZSBpdCB3aXRob3V0IGNhdXNpbmcgc2lkZS1lZmZlY3RzLlxyXG4gICAgICAgIG5ld1Jlc3VsdHMgPSBuZXdSZXN1bHRzLnNsaWNlKDApO1xyXG4gICAgICAgIHZhciBfbG9vcF8xID0gZnVuY3Rpb24gKG9sZFJlc3VsdCkge1xyXG4gICAgICAgICAgICAvLyBnZXQgdGhlIGVsZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgb2xkIHJlc3VsdC5cclxuICAgICAgICAgICAgdmFyIGVsZW1lbnRzID0gdGhpc18xLmVsZW1lbnRzLmdldChvbGRSZXN1bHQpO1xyXG4gICAgICAgICAgICAvLyByZW1vdmUgdGhlIG9sZCByZXN1bHQgZnJvbSB0aGUgZWxlbWVudCBtYXAuXHJcbiAgICAgICAgICAgIHRoaXNfMS5lbGVtZW50cy5kZWxldGUob2xkUmVzdWx0KTtcclxuICAgICAgICAgICAgLy8gY3JlYXRlIHRoZSB1bnJlbmRlciBpbnN0cnVjdGlvbi5cclxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb24udW5yZW5kZXIucHVzaCh7IHJlc3VsdDogb2xkUmVzdWx0LCBlbGVtZW50czogZWxlbWVudHMgfSk7XHJcbiAgICAgICAgICAgIC8vIGRldGVybWluZSBpZiB0aGVyZSdzIGEgY29ycmVzcG9uZGluZyBuZXcgcmVzdWx0IGZvciB0aGUgb2xkIHJlc3VsdCB3ZSBhcmUgdW5yZW5kZXJpbmcuXHJcbiAgICAgICAgICAgIHZhciBuZXdSZXN1bHRJbmRleCA9IG5ld1Jlc3VsdHMuZmluZEluZGV4KGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LnJ1bGUgPT09IG9sZFJlc3VsdC5ydWxlICYmIHgub2JqZWN0ID09PSBvbGRSZXN1bHQub2JqZWN0ICYmIHgucHJvcGVydHlOYW1lID09PSBvbGRSZXN1bHQucHJvcGVydHlOYW1lOyB9KTtcclxuICAgICAgICAgICAgaWYgKG5ld1Jlc3VsdEluZGV4ID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgLy8gbm8gY29ycmVzcG9uZGluZyBuZXcgcmVzdWx0Li4uIHNpbXBsZSByZW1vdmUuXHJcbiAgICAgICAgICAgICAgICB0aGlzXzEucmVzdWx0cy5zcGxpY2UodGhpc18xLnJlc3VsdHMuaW5kZXhPZihvbGRSZXN1bHQpLCAxKTtcclxuICAgICAgICAgICAgICAgIGlmICghb2xkUmVzdWx0LnZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpc18xLmVycm9ycy5zcGxpY2UodGhpc18xLmVycm9ycy5pbmRleE9mKG9sZFJlc3VsdCksIDEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gdGhlcmUgaXMgYSBjb3JyZXNwb25kaW5nIG5ldyByZXN1bHQuLi5cclxuICAgICAgICAgICAgICAgIHZhciBuZXdSZXN1bHQgPSBuZXdSZXN1bHRzLnNwbGljZShuZXdSZXN1bHRJbmRleCwgMSlbMF07XHJcbiAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIGVsZW1lbnRzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbmV3IHJlc3VsdC5cclxuICAgICAgICAgICAgICAgIHZhciBlbGVtZW50c18xID0gdGhpc18xLmdldEFzc29jaWF0ZWRFbGVtZW50cyhuZXdSZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgdGhpc18xLmVsZW1lbnRzLnNldChuZXdSZXN1bHQsIGVsZW1lbnRzXzEpO1xyXG4gICAgICAgICAgICAgICAgLy8gY3JlYXRlIGEgcmVuZGVyIGluc3RydWN0aW9uIGZvciB0aGUgbmV3IHJlc3VsdC5cclxuICAgICAgICAgICAgICAgIGluc3RydWN0aW9uLnJlbmRlci5wdXNoKHsgcmVzdWx0OiBuZXdSZXN1bHQsIGVsZW1lbnRzOiBlbGVtZW50c18xIH0pO1xyXG4gICAgICAgICAgICAgICAgLy8gZG8gYW4gaW4tcGxhY2UgcmVwbGFjZW1lbnQgb2YgdGhlIG9sZCByZXN1bHQgd2l0aCB0aGUgbmV3IHJlc3VsdC5cclxuICAgICAgICAgICAgICAgIC8vIHRoaXMgZW5zdXJlcyBhbnkgcmVwZWF0cyBib3VuZCB0byB0aGlzLnJlc3VsdHMgd2lsbCBub3QgdGhyYXNoLlxyXG4gICAgICAgICAgICAgICAgdGhpc18xLnJlc3VsdHMuc3BsaWNlKHRoaXNfMS5yZXN1bHRzLmluZGV4T2Yob2xkUmVzdWx0KSwgMSwgbmV3UmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIGlmICghb2xkUmVzdWx0LnZhbGlkICYmIG5ld1Jlc3VsdC52YWxpZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXNfMS5lcnJvcnMuc3BsaWNlKHRoaXNfMS5lcnJvcnMuaW5kZXhPZihvbGRSZXN1bHQpLCAxKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFvbGRSZXN1bHQudmFsaWQgJiYgIW5ld1Jlc3VsdC52YWxpZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXNfMS5lcnJvcnMuc3BsaWNlKHRoaXNfMS5lcnJvcnMuaW5kZXhPZihvbGRSZXN1bHQpLCAxLCBuZXdSZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIW5ld1Jlc3VsdC52YWxpZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXNfMS5lcnJvcnMucHVzaChuZXdSZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICB2YXIgdGhpc18xID0gdGhpcztcclxuICAgICAgICAvLyBjcmVhdGUgdW5yZW5kZXIgaW5zdHJ1Y3Rpb25zIGZyb20gdGhlIG9sZCByZXN1bHRzLlxyXG4gICAgICAgIGZvciAodmFyIF9pID0gMCwgb2xkUmVzdWx0c18xID0gb2xkUmVzdWx0czsgX2kgPCBvbGRSZXN1bHRzXzEubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBvbGRSZXN1bHQgPSBvbGRSZXN1bHRzXzFbX2ldO1xyXG4gICAgICAgICAgICBfbG9vcF8xKG9sZFJlc3VsdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNyZWF0ZSByZW5kZXIgaW5zdHJ1Y3Rpb25zIGZyb20gdGhlIHJlbWFpbmluZyBuZXcgcmVzdWx0cy5cclxuICAgICAgICBmb3IgKHZhciBfYSA9IDAsIG5ld1Jlc3VsdHNfMSA9IG5ld1Jlc3VsdHM7IF9hIDwgbmV3UmVzdWx0c18xLmxlbmd0aDsgX2ErKykge1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gbmV3UmVzdWx0c18xW19hXTtcclxuICAgICAgICAgICAgdmFyIGVsZW1lbnRzID0gdGhpcy5nZXRBc3NvY2lhdGVkRWxlbWVudHMocmVzdWx0KTtcclxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb24ucmVuZGVyLnB1c2goeyByZXN1bHQ6IHJlc3VsdCwgZWxlbWVudHM6IGVsZW1lbnRzIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRzLnNldChyZXN1bHQsIGVsZW1lbnRzKTtcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHRzLnB1c2gocmVzdWx0KTtcclxuICAgICAgICAgICAgaWYgKCFyZXN1bHQudmFsaWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JzLnB1c2gocmVzdWx0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyByZW5kZXIuXHJcbiAgICAgICAgZm9yICh2YXIgX2IgPSAwLCBfYyA9IHRoaXMucmVuZGVyZXJzOyBfYiA8IF9jLmxlbmd0aDsgX2IrKykge1xyXG4gICAgICAgICAgICB2YXIgcmVuZGVyZXIgPSBfY1tfYl07XHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnJlbmRlcihpbnN0cnVjdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhdGVzIHRoZSBwcm9wZXJ0eSBhc3NvY2lhdGVkIHdpdGggYSBiaW5kaW5nLlxyXG4gICAgICovXHJcbiAgICBWYWxpZGF0aW9uQ29udHJvbGxlci5wcm90b3R5cGUudmFsaWRhdGVCaW5kaW5nID0gZnVuY3Rpb24gKGJpbmRpbmcpIHtcclxuICAgICAgICBpZiAoIWJpbmRpbmcuaXNCb3VuZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBwcm9wZXJ0eUluZm8gPSBnZXRQcm9wZXJ0eUluZm8oYmluZGluZy5zb3VyY2VFeHByZXNzaW9uLCBiaW5kaW5nLnNvdXJjZSk7XHJcbiAgICAgICAgdmFyIHJ1bGVzO1xyXG4gICAgICAgIHZhciByZWdpc3RlcmVkQmluZGluZyA9IHRoaXMuYmluZGluZ3MuZ2V0KGJpbmRpbmcpO1xyXG4gICAgICAgIGlmIChyZWdpc3RlcmVkQmluZGluZykge1xyXG4gICAgICAgICAgICBydWxlcyA9IHJlZ2lzdGVyZWRCaW5kaW5nLnJ1bGVzO1xyXG4gICAgICAgICAgICByZWdpc3RlcmVkQmluZGluZy5wcm9wZXJ0eUluZm8gPSBwcm9wZXJ0eUluZm87XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghcHJvcGVydHlJbmZvKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG9iamVjdCA9IHByb3BlcnR5SW5mby5vYmplY3QsIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5SW5mby5wcm9wZXJ0eU5hbWU7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0ZSh7IG9iamVjdDogb2JqZWN0LCBwcm9wZXJ0eU5hbWU6IHByb3BlcnR5TmFtZSwgcnVsZXM6IHJ1bGVzIH0pO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogUmVzZXRzIHRoZSByZXN1bHRzIGZvciBhIHByb3BlcnR5IGFzc29jaWF0ZWQgd2l0aCBhIGJpbmRpbmcuXHJcbiAgICAgKi9cclxuICAgIFZhbGlkYXRpb25Db250cm9sbGVyLnByb3RvdHlwZS5yZXNldEJpbmRpbmcgPSBmdW5jdGlvbiAoYmluZGluZykge1xyXG4gICAgICAgIHZhciByZWdpc3RlcmVkQmluZGluZyA9IHRoaXMuYmluZGluZ3MuZ2V0KGJpbmRpbmcpO1xyXG4gICAgICAgIHZhciBwcm9wZXJ0eUluZm8gPSBnZXRQcm9wZXJ0eUluZm8oYmluZGluZy5zb3VyY2VFeHByZXNzaW9uLCBiaW5kaW5nLnNvdXJjZSk7XHJcbiAgICAgICAgaWYgKCFwcm9wZXJ0eUluZm8gJiYgcmVnaXN0ZXJlZEJpbmRpbmcpIHtcclxuICAgICAgICAgICAgcHJvcGVydHlJbmZvID0gcmVnaXN0ZXJlZEJpbmRpbmcucHJvcGVydHlJbmZvO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVnaXN0ZXJlZEJpbmRpbmcpIHtcclxuICAgICAgICAgICAgcmVnaXN0ZXJlZEJpbmRpbmcucHJvcGVydHlJbmZvID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFwcm9wZXJ0eUluZm8pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgb2JqZWN0ID0gcHJvcGVydHlJbmZvLm9iamVjdCwgcHJvcGVydHlOYW1lID0gcHJvcGVydHlJbmZvLnByb3BlcnR5TmFtZTtcclxuICAgICAgICB0aGlzLnJlc2V0KHsgb2JqZWN0OiBvYmplY3QsIHByb3BlcnR5TmFtZTogcHJvcGVydHlOYW1lIH0pO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogQ2hhbmdlcyB0aGUgY29udHJvbGxlcidzIHZhbGlkYXRlVHJpZ2dlci5cclxuICAgICAqIEBwYXJhbSBuZXdUcmlnZ2VyIFRoZSBuZXcgdmFsaWRhdGVUcmlnZ2VyXHJcbiAgICAgKi9cclxuICAgIFZhbGlkYXRpb25Db250cm9sbGVyLnByb3RvdHlwZS5jaGFuZ2VUcmlnZ2VyID0gZnVuY3Rpb24gKG5ld1RyaWdnZXIpIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXRlVHJpZ2dlciA9IG5ld1RyaWdnZXI7XHJcbiAgICAgICAgdmFyIGJpbmRpbmdzID0gQXJyYXkuZnJvbSh0aGlzLmJpbmRpbmdzLmtleXMoKSk7XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBiaW5kaW5nc18xID0gYmluZGluZ3M7IF9pIDwgYmluZGluZ3NfMS5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgdmFyIGJpbmRpbmcgPSBiaW5kaW5nc18xW19pXTtcclxuICAgICAgICAgICAgdmFyIHNvdXJjZSA9IGJpbmRpbmcuc291cmNlO1xyXG4gICAgICAgICAgICBiaW5kaW5nLnVuYmluZCgpO1xyXG4gICAgICAgICAgICBiaW5kaW5nLmJpbmQoc291cmNlKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZXZhbGlkYXRlcyB0aGUgY29udHJvbGxlcidzIGN1cnJlbnQgc2V0IG9mIGVycm9ycy5cclxuICAgICAqL1xyXG4gICAgVmFsaWRhdGlvbkNvbnRyb2xsZXIucHJvdG90eXBlLnJldmFsaWRhdGVFcnJvcnMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMuZXJyb3JzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICB2YXIgX2IgPSBfYVtfaV0sIG9iamVjdCA9IF9iLm9iamVjdCwgcHJvcGVydHlOYW1lID0gX2IucHJvcGVydHlOYW1lLCBydWxlID0gX2IucnVsZTtcclxuICAgICAgICAgICAgaWYgKHJ1bGUuX19tYW51YWxseUFkZGVkX18pIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBydWxlcyA9IFtbcnVsZV1dO1xyXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlKHsgb2JqZWN0OiBvYmplY3QsIHByb3BlcnR5TmFtZTogcHJvcGVydHlOYW1lLCBydWxlczogcnVsZXMgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIFZhbGlkYXRpb25Db250cm9sbGVyLnByb3RvdHlwZS5pbnZva2VDYWxsYmFja3MgPSBmdW5jdGlvbiAoaW5zdHJ1Y3Rpb24sIHJlc3VsdCkge1xyXG4gICAgICAgIGlmICh0aGlzLmV2ZW50Q2FsbGJhY2tzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBldmVudCA9IG5ldyBWYWxpZGF0ZUV2ZW50KHJlc3VsdCA/ICd2YWxpZGF0ZScgOiAncmVzZXQnLCB0aGlzLmVycm9ycywgdGhpcy5yZXN1bHRzLCBpbnN0cnVjdGlvbiB8fCBudWxsLCByZXN1bHQpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ldmVudENhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLmV2ZW50Q2FsbGJhY2tzW2ldKGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgVmFsaWRhdGlvbkNvbnRyb2xsZXIuaW5qZWN0ID0gW1ZhbGlkYXRvciwgUHJvcGVydHlBY2Nlc3NvclBhcnNlcl07XHJcbiAgICByZXR1cm4gVmFsaWRhdGlvbkNvbnRyb2xsZXI7XHJcbn0oKSk7XG5cbi8qKlxyXG4gKiBCaW5kaW5nIGJlaGF2aW9yLiBJbmRpY2F0ZXMgdGhlIGJvdW5kIHByb3BlcnR5IHNob3VsZCBiZSB2YWxpZGF0ZWQuXHJcbiAqL1xyXG52YXIgVmFsaWRhdGVCaW5kaW5nQmVoYXZpb3JCYXNlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gVmFsaWRhdGVCaW5kaW5nQmVoYXZpb3JCYXNlKHRhc2tRdWV1ZSkge1xyXG4gICAgICAgIHRoaXMudGFza1F1ZXVlID0gdGFza1F1ZXVlO1xyXG4gICAgfVxyXG4gICAgVmFsaWRhdGVCaW5kaW5nQmVoYXZpb3JCYXNlLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGJpbmRpbmcsIHNvdXJjZSwgcnVsZXNPckNvbnRyb2xsZXIsIHJ1bGVzKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICAvLyBpZGVudGlmeSB0aGUgdGFyZ2V0IGVsZW1lbnQuXHJcbiAgICAgICAgdmFyIHRhcmdldCA9IGdldFRhcmdldERPTUVsZW1lbnQoYmluZGluZywgc291cmNlKTtcclxuICAgICAgICAvLyBsb2NhdGUgdGhlIGNvbnRyb2xsZXIuXHJcbiAgICAgICAgdmFyIGNvbnRyb2xsZXI7XHJcbiAgICAgICAgaWYgKHJ1bGVzT3JDb250cm9sbGVyIGluc3RhbmNlb2YgVmFsaWRhdGlvbkNvbnRyb2xsZXIpIHtcclxuICAgICAgICAgICAgY29udHJvbGxlciA9IHJ1bGVzT3JDb250cm9sbGVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29udHJvbGxlciA9IHNvdXJjZS5jb250YWluZXIuZ2V0KE9wdGlvbmFsLm9mKFZhbGlkYXRpb25Db250cm9sbGVyKSk7XHJcbiAgICAgICAgICAgIHJ1bGVzID0gcnVsZXNPckNvbnRyb2xsZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb250cm9sbGVyID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkEgVmFsaWRhdGlvbkNvbnRyb2xsZXIgaGFzIG5vdCBiZWVuIHJlZ2lzdGVyZWQuXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb250cm9sbGVyLnJlZ2lzdGVyQmluZGluZyhiaW5kaW5nLCB0YXJnZXQsIHJ1bGVzKTtcclxuICAgICAgICBiaW5kaW5nLnZhbGlkYXRpb25Db250cm9sbGVyID0gY29udHJvbGxlcjtcclxuICAgICAgICB2YXIgdHJpZ2dlciA9IHRoaXMuZ2V0VmFsaWRhdGVUcmlnZ2VyKGNvbnRyb2xsZXIpO1xyXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1iaXR3aXNlXHJcbiAgICAgICAgaWYgKHRyaWdnZXIgJiB2YWxpZGF0ZVRyaWdnZXIuY2hhbmdlKSB7XHJcbiAgICAgICAgICAgIGJpbmRpbmcudmJiVXBkYXRlU291cmNlID0gYmluZGluZy51cGRhdGVTb3VyY2U7XHJcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpvbmx5LWFycm93LWZ1bmN0aW9uc1xyXG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6c3BhY2UtYmVmb3JlLWZ1bmN0aW9uLXBhcmVuXHJcbiAgICAgICAgICAgIGJpbmRpbmcudXBkYXRlU291cmNlID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZiYlVwZGF0ZVNvdXJjZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25Db250cm9sbGVyLnZhbGlkYXRlQmluZGluZyh0aGlzKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcclxuICAgICAgICBpZiAodHJpZ2dlciAmIHZhbGlkYXRlVHJpZ2dlci5ibHVyKSB7XHJcbiAgICAgICAgICAgIGJpbmRpbmcudmFsaWRhdGVCbHVySGFuZGxlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLnRhc2tRdWV1ZS5xdWV1ZU1pY3JvVGFzayhmdW5jdGlvbiAoKSB7IHJldHVybiBjb250cm9sbGVyLnZhbGlkYXRlQmluZGluZyhiaW5kaW5nKTsgfSk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGJpbmRpbmcudmFsaWRhdGVUYXJnZXQgPSB0YXJnZXQ7XHJcbiAgICAgICAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgYmluZGluZy52YWxpZGF0ZUJsdXJIYW5kbGVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRyaWdnZXIgIT09IHZhbGlkYXRlVHJpZ2dlci5tYW51YWwpIHtcclxuICAgICAgICAgICAgYmluZGluZy5zdGFuZGFyZFVwZGF0ZVRhcmdldCA9IGJpbmRpbmcudXBkYXRlVGFyZ2V0O1xyXG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6b25seS1hcnJvdy1mdW5jdGlvbnNcclxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnNwYWNlLWJlZm9yZS1mdW5jdGlvbi1wYXJlblxyXG4gICAgICAgICAgICBiaW5kaW5nLnVwZGF0ZVRhcmdldCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFuZGFyZFVwZGF0ZVRhcmdldCh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25Db250cm9sbGVyLnJlc2V0QmluZGluZyh0aGlzKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgVmFsaWRhdGVCaW5kaW5nQmVoYXZpb3JCYXNlLnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbiAoYmluZGluZykge1xyXG4gICAgICAgIC8vIHJlc2V0IHRoZSBiaW5kaW5nIHRvIGl0J3Mgb3JpZ2luYWwgc3RhdGUuXHJcbiAgICAgICAgaWYgKGJpbmRpbmcudmJiVXBkYXRlU291cmNlKSB7XHJcbiAgICAgICAgICAgIGJpbmRpbmcudXBkYXRlU291cmNlID0gYmluZGluZy52YmJVcGRhdGVTb3VyY2U7XHJcbiAgICAgICAgICAgIGJpbmRpbmcudmJiVXBkYXRlU291cmNlID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGJpbmRpbmcuc3RhbmRhcmRVcGRhdGVUYXJnZXQpIHtcclxuICAgICAgICAgICAgYmluZGluZy51cGRhdGVUYXJnZXQgPSBiaW5kaW5nLnN0YW5kYXJkVXBkYXRlVGFyZ2V0O1xyXG4gICAgICAgICAgICBiaW5kaW5nLnN0YW5kYXJkVXBkYXRlVGFyZ2V0ID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGJpbmRpbmcudmFsaWRhdGVCbHVySGFuZGxlcikge1xyXG4gICAgICAgICAgICBiaW5kaW5nLnZhbGlkYXRlVGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JsdXInLCBiaW5kaW5nLnZhbGlkYXRlQmx1ckhhbmRsZXIpO1xyXG4gICAgICAgICAgICBiaW5kaW5nLnZhbGlkYXRlQmx1ckhhbmRsZXIgPSBudWxsO1xyXG4gICAgICAgICAgICBiaW5kaW5nLnZhbGlkYXRlVGFyZ2V0ID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgYmluZGluZy52YWxpZGF0aW9uQ29udHJvbGxlci51bnJlZ2lzdGVyQmluZGluZyhiaW5kaW5nKTtcclxuICAgICAgICBiaW5kaW5nLnZhbGlkYXRpb25Db250cm9sbGVyID0gbnVsbDtcclxuICAgIH07XHJcbiAgICByZXR1cm4gVmFsaWRhdGVCaW5kaW5nQmVoYXZpb3JCYXNlO1xyXG59KCkpO1xuXG4vKipcclxuICogQmluZGluZyBiZWhhdmlvci4gSW5kaWNhdGVzIHRoZSBib3VuZCBwcm9wZXJ0eSBzaG91bGQgYmUgdmFsaWRhdGVkXHJcbiAqIHdoZW4gdGhlIHZhbGlkYXRlIHRyaWdnZXIgc3BlY2lmaWVkIGJ5IHRoZSBhc3NvY2lhdGVkIGNvbnRyb2xsZXInc1xyXG4gKiB2YWxpZGF0ZVRyaWdnZXIgcHJvcGVydHkgb2NjdXJzLlxyXG4gKi9cclxudmFyIFZhbGlkYXRlQmluZGluZ0JlaGF2aW9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xyXG4gICAgX19leHRlbmRzKFZhbGlkYXRlQmluZGluZ0JlaGF2aW9yLCBfc3VwZXIpO1xyXG4gICAgZnVuY3Rpb24gVmFsaWRhdGVCaW5kaW5nQmVoYXZpb3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xyXG4gICAgfVxyXG4gICAgVmFsaWRhdGVCaW5kaW5nQmVoYXZpb3IucHJvdG90eXBlLmdldFZhbGlkYXRlVHJpZ2dlciA9IGZ1bmN0aW9uIChjb250cm9sbGVyKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIudmFsaWRhdGVUcmlnZ2VyO1xyXG4gICAgfTtcclxuICAgIFZhbGlkYXRlQmluZGluZ0JlaGF2aW9yLmluamVjdCA9IFtUYXNrUXVldWVdO1xyXG4gICAgVmFsaWRhdGVCaW5kaW5nQmVoYXZpb3IgPSBfX2RlY29yYXRlKFtcclxuICAgICAgICBiaW5kaW5nQmVoYXZpb3IoJ3ZhbGlkYXRlJylcclxuICAgIF0sIFZhbGlkYXRlQmluZGluZ0JlaGF2aW9yKTtcclxuICAgIHJldHVybiBWYWxpZGF0ZUJpbmRpbmdCZWhhdmlvcjtcclxufShWYWxpZGF0ZUJpbmRpbmdCZWhhdmlvckJhc2UpKTtcclxuLyoqXHJcbiAqIEJpbmRpbmcgYmVoYXZpb3IuIEluZGljYXRlcyB0aGUgYm91bmQgcHJvcGVydHkgd2lsbCBiZSB2YWxpZGF0ZWRcclxuICogbWFudWFsbHksIGJ5IGNhbGxpbmcgY29udHJvbGxlci52YWxpZGF0ZSgpLiBObyBhdXRvbWF0aWMgdmFsaWRhdGlvblxyXG4gKiB0cmlnZ2VyZWQgYnkgZGF0YS1lbnRyeSBvciBibHVyIHdpbGwgb2NjdXIuXHJcbiAqL1xyXG52YXIgVmFsaWRhdGVNYW51YWxseUJpbmRpbmdCZWhhdmlvciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcclxuICAgIF9fZXh0ZW5kcyhWYWxpZGF0ZU1hbnVhbGx5QmluZGluZ0JlaGF2aW9yLCBfc3VwZXIpO1xyXG4gICAgZnVuY3Rpb24gVmFsaWRhdGVNYW51YWxseUJpbmRpbmdCZWhhdmlvcigpIHtcclxuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XHJcbiAgICB9XHJcbiAgICBWYWxpZGF0ZU1hbnVhbGx5QmluZGluZ0JlaGF2aW9yLnByb3RvdHlwZS5nZXRWYWxpZGF0ZVRyaWdnZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlVHJpZ2dlci5tYW51YWw7XHJcbiAgICB9O1xyXG4gICAgVmFsaWRhdGVNYW51YWxseUJpbmRpbmdCZWhhdmlvci5pbmplY3QgPSBbVGFza1F1ZXVlXTtcclxuICAgIFZhbGlkYXRlTWFudWFsbHlCaW5kaW5nQmVoYXZpb3IgPSBfX2RlY29yYXRlKFtcclxuICAgICAgICBiaW5kaW5nQmVoYXZpb3IoJ3ZhbGlkYXRlTWFudWFsbHknKVxyXG4gICAgXSwgVmFsaWRhdGVNYW51YWxseUJpbmRpbmdCZWhhdmlvcik7XHJcbiAgICByZXR1cm4gVmFsaWRhdGVNYW51YWxseUJpbmRpbmdCZWhhdmlvcjtcclxufShWYWxpZGF0ZUJpbmRpbmdCZWhhdmlvckJhc2UpKTtcclxuLyoqXHJcbiAqIEJpbmRpbmcgYmVoYXZpb3IuIEluZGljYXRlcyB0aGUgYm91bmQgcHJvcGVydHkgc2hvdWxkIGJlIHZhbGlkYXRlZFxyXG4gKiB3aGVuIHRoZSBhc3NvY2lhdGVkIGVsZW1lbnQgYmx1cnMuXHJcbiAqL1xyXG52YXIgVmFsaWRhdGVPbkJsdXJCaW5kaW5nQmVoYXZpb3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XHJcbiAgICBfX2V4dGVuZHMoVmFsaWRhdGVPbkJsdXJCaW5kaW5nQmVoYXZpb3IsIF9zdXBlcik7XHJcbiAgICBmdW5jdGlvbiBWYWxpZGF0ZU9uQmx1ckJpbmRpbmdCZWhhdmlvcigpIHtcclxuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XHJcbiAgICB9XHJcbiAgICBWYWxpZGF0ZU9uQmx1ckJpbmRpbmdCZWhhdmlvci5wcm90b3R5cGUuZ2V0VmFsaWRhdGVUcmlnZ2VyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB2YWxpZGF0ZVRyaWdnZXIuYmx1cjtcclxuICAgIH07XHJcbiAgICBWYWxpZGF0ZU9uQmx1ckJpbmRpbmdCZWhhdmlvci5pbmplY3QgPSBbVGFza1F1ZXVlXTtcclxuICAgIFZhbGlkYXRlT25CbHVyQmluZGluZ0JlaGF2aW9yID0gX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYmluZGluZ0JlaGF2aW9yKCd2YWxpZGF0ZU9uQmx1cicpXHJcbiAgICBdLCBWYWxpZGF0ZU9uQmx1ckJpbmRpbmdCZWhhdmlvcik7XHJcbiAgICByZXR1cm4gVmFsaWRhdGVPbkJsdXJCaW5kaW5nQmVoYXZpb3I7XHJcbn0oVmFsaWRhdGVCaW5kaW5nQmVoYXZpb3JCYXNlKSk7XHJcbi8qKlxyXG4gKiBCaW5kaW5nIGJlaGF2aW9yLiBJbmRpY2F0ZXMgdGhlIGJvdW5kIHByb3BlcnR5IHNob3VsZCBiZSB2YWxpZGF0ZWRcclxuICogd2hlbiB0aGUgYXNzb2NpYXRlZCBlbGVtZW50IGlzIGNoYW5nZWQgYnkgdGhlIHVzZXIsIGNhdXNpbmcgYSBjaGFuZ2VcclxuICogdG8gdGhlIG1vZGVsLlxyXG4gKi9cclxudmFyIFZhbGlkYXRlT25DaGFuZ2VCaW5kaW5nQmVoYXZpb3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XHJcbiAgICBfX2V4dGVuZHMoVmFsaWRhdGVPbkNoYW5nZUJpbmRpbmdCZWhhdmlvciwgX3N1cGVyKTtcclxuICAgIGZ1bmN0aW9uIFZhbGlkYXRlT25DaGFuZ2VCaW5kaW5nQmVoYXZpb3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xyXG4gICAgfVxyXG4gICAgVmFsaWRhdGVPbkNoYW5nZUJpbmRpbmdCZWhhdmlvci5wcm90b3R5cGUuZ2V0VmFsaWRhdGVUcmlnZ2VyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB2YWxpZGF0ZVRyaWdnZXIuY2hhbmdlO1xyXG4gICAgfTtcclxuICAgIFZhbGlkYXRlT25DaGFuZ2VCaW5kaW5nQmVoYXZpb3IuaW5qZWN0ID0gW1Rhc2tRdWV1ZV07XHJcbiAgICBWYWxpZGF0ZU9uQ2hhbmdlQmluZGluZ0JlaGF2aW9yID0gX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYmluZGluZ0JlaGF2aW9yKCd2YWxpZGF0ZU9uQ2hhbmdlJylcclxuICAgIF0sIFZhbGlkYXRlT25DaGFuZ2VCaW5kaW5nQmVoYXZpb3IpO1xyXG4gICAgcmV0dXJuIFZhbGlkYXRlT25DaGFuZ2VCaW5kaW5nQmVoYXZpb3I7XHJcbn0oVmFsaWRhdGVCaW5kaW5nQmVoYXZpb3JCYXNlKSk7XHJcbi8qKlxyXG4gKiBCaW5kaW5nIGJlaGF2aW9yLiBJbmRpY2F0ZXMgdGhlIGJvdW5kIHByb3BlcnR5IHNob3VsZCBiZSB2YWxpZGF0ZWRcclxuICogd2hlbiB0aGUgYXNzb2NpYXRlZCBlbGVtZW50IGJsdXJzIG9yIGlzIGNoYW5nZWQgYnkgdGhlIHVzZXIsIGNhdXNpbmdcclxuICogYSBjaGFuZ2UgdG8gdGhlIG1vZGVsLlxyXG4gKi9cclxudmFyIFZhbGlkYXRlT25DaGFuZ2VPckJsdXJCaW5kaW5nQmVoYXZpb3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XHJcbiAgICBfX2V4dGVuZHMoVmFsaWRhdGVPbkNoYW5nZU9yQmx1ckJpbmRpbmdCZWhhdmlvciwgX3N1cGVyKTtcclxuICAgIGZ1bmN0aW9uIFZhbGlkYXRlT25DaGFuZ2VPckJsdXJCaW5kaW5nQmVoYXZpb3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xyXG4gICAgfVxyXG4gICAgVmFsaWRhdGVPbkNoYW5nZU9yQmx1ckJpbmRpbmdCZWhhdmlvci5wcm90b3R5cGUuZ2V0VmFsaWRhdGVUcmlnZ2VyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB2YWxpZGF0ZVRyaWdnZXIuY2hhbmdlT3JCbHVyO1xyXG4gICAgfTtcclxuICAgIFZhbGlkYXRlT25DaGFuZ2VPckJsdXJCaW5kaW5nQmVoYXZpb3IuaW5qZWN0ID0gW1Rhc2tRdWV1ZV07XHJcbiAgICBWYWxpZGF0ZU9uQ2hhbmdlT3JCbHVyQmluZGluZ0JlaGF2aW9yID0gX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYmluZGluZ0JlaGF2aW9yKCd2YWxpZGF0ZU9uQ2hhbmdlT3JCbHVyJylcclxuICAgIF0sIFZhbGlkYXRlT25DaGFuZ2VPckJsdXJCaW5kaW5nQmVoYXZpb3IpO1xyXG4gICAgcmV0dXJuIFZhbGlkYXRlT25DaGFuZ2VPckJsdXJCaW5kaW5nQmVoYXZpb3I7XHJcbn0oVmFsaWRhdGVCaW5kaW5nQmVoYXZpb3JCYXNlKSk7XG5cbi8qKlxyXG4gKiBDcmVhdGVzIFZhbGlkYXRpb25Db250cm9sbGVyIGluc3RhbmNlcy5cclxuICovXHJcbnZhciBWYWxpZGF0aW9uQ29udHJvbGxlckZhY3RvcnkgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBWYWxpZGF0aW9uQ29udHJvbGxlckZhY3RvcnkoY29udGFpbmVyKSB7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XHJcbiAgICB9XHJcbiAgICBWYWxpZGF0aW9uQ29udHJvbGxlckZhY3RvcnkuZ2V0ID0gZnVuY3Rpb24gKGNvbnRhaW5lcikge1xyXG4gICAgICAgIHJldHVybiBuZXcgVmFsaWRhdGlvbkNvbnRyb2xsZXJGYWN0b3J5KGNvbnRhaW5lcik7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGNvbnRyb2xsZXIgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIFZhbGlkYXRpb25Db250cm9sbGVyRmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlID0gZnVuY3Rpb24gKHZhbGlkYXRvcikge1xyXG4gICAgICAgIGlmICghdmFsaWRhdG9yKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRvciA9IHRoaXMuY29udGFpbmVyLmdldChWYWxpZGF0b3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcHJvcGVydHlQYXJzZXIgPSB0aGlzLmNvbnRhaW5lci5nZXQoUHJvcGVydHlBY2Nlc3NvclBhcnNlcik7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBWYWxpZGF0aW9uQ29udHJvbGxlcih2YWxpZGF0b3IsIHByb3BlcnR5UGFyc2VyKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgY29udHJvbGxlciBhbmQgcmVnaXN0ZXJzIGl0IGluIHRoZSBjdXJyZW50IGVsZW1lbnQncyBjb250YWluZXIgc28gdGhhdCBpdCdzXHJcbiAgICAgKiBhdmFpbGFibGUgdG8gdGhlIHZhbGlkYXRlIGJpbmRpbmcgYmVoYXZpb3IgYW5kIHJlbmRlcmVycy5cclxuICAgICAqL1xyXG4gICAgVmFsaWRhdGlvbkNvbnRyb2xsZXJGYWN0b3J5LnByb3RvdHlwZS5jcmVhdGVGb3JDdXJyZW50U2NvcGUgPSBmdW5jdGlvbiAodmFsaWRhdG9yKSB7XHJcbiAgICAgICAgdmFyIGNvbnRyb2xsZXIgPSB0aGlzLmNyZWF0ZSh2YWxpZGF0b3IpO1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyLnJlZ2lzdGVySW5zdGFuY2UoVmFsaWRhdGlvbkNvbnRyb2xsZXIsIGNvbnRyb2xsZXIpO1xyXG4gICAgICAgIHJldHVybiBjb250cm9sbGVyO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBWYWxpZGF0aW9uQ29udHJvbGxlckZhY3Rvcnk7XHJcbn0oKSk7XHJcblZhbGlkYXRpb25Db250cm9sbGVyRmFjdG9yeVsncHJvdG9jb2w6YXVyZWxpYTpyZXNvbHZlciddID0gdHJ1ZTtcblxudmFyIFZhbGlkYXRpb25FcnJvcnNDdXN0b21BdHRyaWJ1dGUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBWYWxpZGF0aW9uRXJyb3JzQ3VzdG9tQXR0cmlidXRlKGJvdW5kYXJ5RWxlbWVudCwgY29udHJvbGxlckFjY2Vzc29yKSB7XHJcbiAgICAgICAgdGhpcy5ib3VuZGFyeUVsZW1lbnQgPSBib3VuZGFyeUVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5jb250cm9sbGVyQWNjZXNzb3IgPSBjb250cm9sbGVyQWNjZXNzb3I7XHJcbiAgICAgICAgdGhpcy5jb250cm9sbGVyID0gbnVsbDtcclxuICAgICAgICB0aGlzLmVycm9ycyA9IFtdO1xyXG4gICAgICAgIHRoaXMuZXJyb3JzSW50ZXJuYWwgPSBbXTtcclxuICAgIH1cclxuICAgIFZhbGlkYXRpb25FcnJvcnNDdXN0b21BdHRyaWJ1dGUuaW5qZWN0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBbRE9NLkVsZW1lbnQsIExhenkub2YoVmFsaWRhdGlvbkNvbnRyb2xsZXIpXTtcclxuICAgIH07XHJcbiAgICBWYWxpZGF0aW9uRXJyb3JzQ3VzdG9tQXR0cmlidXRlLnByb3RvdHlwZS5zb3J0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuZXJyb3JzSW50ZXJuYWwuc29ydChmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICBpZiAoYS50YXJnZXRzWzBdID09PSBiLnRhcmdldHNbMF0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1iaXR3aXNlXHJcbiAgICAgICAgICAgIHJldHVybiBhLnRhcmdldHNbMF0uY29tcGFyZURvY3VtZW50UG9zaXRpb24oYi50YXJnZXRzWzBdKSAmIDIgPyAxIDogLTE7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgVmFsaWRhdGlvbkVycm9yc0N1c3RvbUF0dHJpYnV0ZS5wcm90b3R5cGUuaW50ZXJlc3RpbmdFbGVtZW50cyA9IGZ1bmN0aW9uIChlbGVtZW50cykge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnRzLmZpbHRlcihmdW5jdGlvbiAoZSkgeyByZXR1cm4gX3RoaXMuYm91bmRhcnlFbGVtZW50LmNvbnRhaW5zKGUpOyB9KTtcclxuICAgIH07XHJcbiAgICBWYWxpZGF0aW9uRXJyb3JzQ3VzdG9tQXR0cmlidXRlLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoaW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICB2YXIgX2xvb3BfMSA9IGZ1bmN0aW9uIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpc18xLmVycm9yc0ludGVybmFsLmZpbmRJbmRleChmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5lcnJvciA9PT0gcmVzdWx0OyB9KTtcclxuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpc18xLmVycm9yc0ludGVybmFsLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHZhciB0aGlzXzEgPSB0aGlzO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSBpbnN0cnVjdGlvbi51bnJlbmRlcjsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IF9hW19pXS5yZXN1bHQ7XHJcbiAgICAgICAgICAgIF9sb29wXzEocmVzdWx0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yICh2YXIgX2IgPSAwLCBfYyA9IGluc3RydWN0aW9uLnJlbmRlcjsgX2IgPCBfYy5sZW5ndGg7IF9iKyspIHtcclxuICAgICAgICAgICAgdmFyIF9kID0gX2NbX2JdLCByZXN1bHQgPSBfZC5yZXN1bHQsIGVsZW1lbnRzID0gX2QuZWxlbWVudHM7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQudmFsaWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciB0YXJnZXRzID0gdGhpcy5pbnRlcmVzdGluZ0VsZW1lbnRzKGVsZW1lbnRzKTtcclxuICAgICAgICAgICAgaWYgKHRhcmdldHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yc0ludGVybmFsLnB1c2goeyBlcnJvcjogcmVzdWx0LCB0YXJnZXRzOiB0YXJnZXRzIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc29ydCgpO1xyXG4gICAgICAgIHRoaXMuZXJyb3JzID0gdGhpcy5lcnJvcnNJbnRlcm5hbDtcclxuICAgIH07XHJcbiAgICBWYWxpZGF0aW9uRXJyb3JzQ3VzdG9tQXR0cmlidXRlLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5jb250cm9sbGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlciA9IHRoaXMuY29udHJvbGxlckFjY2Vzc29yKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHRoaXMgd2lsbCBjYWxsIHJlbmRlcigpIHdpdGggdGhlIHNpZGUtZWZmZWN0IG9mIHVwZGF0aW5nIHRoaXMuZXJyb3JzXHJcbiAgICAgICAgdGhpcy5jb250cm9sbGVyLmFkZFJlbmRlcmVyKHRoaXMpO1xyXG4gICAgfTtcclxuICAgIFZhbGlkYXRpb25FcnJvcnNDdXN0b21BdHRyaWJ1dGUucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sbGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlci5yZW1vdmVSZW5kZXJlcih0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYmluZGFibGUoeyBkZWZhdWx0QmluZGluZ01vZGU6IGJpbmRpbmdNb2RlLm9uZVdheSB9KVxyXG4gICAgXSwgVmFsaWRhdGlvbkVycm9yc0N1c3RvbUF0dHJpYnV0ZS5wcm90b3R5cGUsIFwiY29udHJvbGxlclwiLCB2b2lkIDApO1xyXG4gICAgX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYmluZGFibGUoeyBwcmltYXJ5UHJvcGVydHk6IHRydWUsIGRlZmF1bHRCaW5kaW5nTW9kZTogYmluZGluZ01vZGUudHdvV2F5IH0pXHJcbiAgICBdLCBWYWxpZGF0aW9uRXJyb3JzQ3VzdG9tQXR0cmlidXRlLnByb3RvdHlwZSwgXCJlcnJvcnNcIiwgdm9pZCAwKTtcclxuICAgIFZhbGlkYXRpb25FcnJvcnNDdXN0b21BdHRyaWJ1dGUgPSBfX2RlY29yYXRlKFtcclxuICAgICAgICBjdXN0b21BdHRyaWJ1dGUoJ3ZhbGlkYXRpb24tZXJyb3JzJylcclxuICAgIF0sIFZhbGlkYXRpb25FcnJvcnNDdXN0b21BdHRyaWJ1dGUpO1xyXG4gICAgcmV0dXJuIFZhbGlkYXRpb25FcnJvcnNDdXN0b21BdHRyaWJ1dGU7XHJcbn0oKSk7XG5cbnZhciBWYWxpZGF0aW9uUmVuZGVyZXJDdXN0b21BdHRyaWJ1dGUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBWYWxpZGF0aW9uUmVuZGVyZXJDdXN0b21BdHRyaWJ1dGUoKSB7XHJcbiAgICB9XHJcbiAgICBWYWxpZGF0aW9uUmVuZGVyZXJDdXN0b21BdHRyaWJ1dGUucHJvdG90eXBlLmNyZWF0ZWQgPSBmdW5jdGlvbiAodmlldykge1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyID0gdmlldy5jb250YWluZXI7XHJcbiAgICB9O1xyXG4gICAgVmFsaWRhdGlvblJlbmRlcmVyQ3VzdG9tQXR0cmlidXRlLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuY29udHJvbGxlciA9IHRoaXMuY29udGFpbmVyLmdldChWYWxpZGF0aW9uQ29udHJvbGxlcik7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IHRoaXMuY29udGFpbmVyLmdldCh0aGlzLnZhbHVlKTtcclxuICAgICAgICB0aGlzLmNvbnRyb2xsZXIuYWRkUmVuZGVyZXIodGhpcy5yZW5kZXJlcik7XHJcbiAgICB9O1xyXG4gICAgVmFsaWRhdGlvblJlbmRlcmVyQ3VzdG9tQXR0cmlidXRlLnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5jb250cm9sbGVyLnJlbW92ZVJlbmRlcmVyKHRoaXMucmVuZGVyZXIpO1xyXG4gICAgICAgIHRoaXMuY29udHJvbGxlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XHJcbiAgICB9O1xyXG4gICAgVmFsaWRhdGlvblJlbmRlcmVyQ3VzdG9tQXR0cmlidXRlID0gX19kZWNvcmF0ZShbXHJcbiAgICAgICAgY3VzdG9tQXR0cmlidXRlJDEoJ3ZhbGlkYXRpb24tcmVuZGVyZXInKVxyXG4gICAgXSwgVmFsaWRhdGlvblJlbmRlcmVyQ3VzdG9tQXR0cmlidXRlKTtcclxuICAgIHJldHVybiBWYWxpZGF0aW9uUmVuZGVyZXJDdXN0b21BdHRyaWJ1dGU7XHJcbn0oKSk7XG5cbi8qKlxyXG4gKiBTZXRzLCB1bnNldHMgYW5kIHJldHJpZXZlcyBydWxlcyBvbiBhbiBvYmplY3Qgb3IgY29uc3RydWN0b3IgZnVuY3Rpb24uXHJcbiAqL1xyXG52YXIgUnVsZXMgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBSdWxlcygpIHtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQXBwbGllcyB0aGUgcnVsZXMgdG8gYSB0YXJnZXQuXHJcbiAgICAgKi9cclxuICAgIFJ1bGVzLnNldCA9IGZ1bmN0aW9uICh0YXJnZXQsIHJ1bGVzKSB7XHJcbiAgICAgICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC5wcm90b3R5cGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIFJ1bGVzLmtleSwgeyBlbnVtZXJhYmxlOiBmYWxzZSwgY29uZmlndXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBydWxlcyB9KTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgcnVsZXMgZnJvbSBhIHRhcmdldC5cclxuICAgICAqL1xyXG4gICAgUnVsZXMudW5zZXQgPSBmdW5jdGlvbiAodGFyZ2V0KSB7XHJcbiAgICAgICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC5wcm90b3R5cGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRhcmdldFtSdWxlcy5rZXldID0gbnVsbDtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFJldHJpZXZlcyB0aGUgdGFyZ2V0J3MgcnVsZXMuXHJcbiAgICAgKi9cclxuICAgIFJ1bGVzLmdldCA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcclxuICAgICAgICByZXR1cm4gdGFyZ2V0W1J1bGVzLmtleV0gfHwgbnVsbDtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IHN0b3JlcyB0aGUgcnVsZXMuXHJcbiAgICAgKi9cclxuICAgIFJ1bGVzLmtleSA9ICdfX3J1bGVzX18nO1xyXG4gICAgcmV0dXJuIFJ1bGVzO1xyXG59KCkpO1xuXG4vLyB0c2xpbnQ6ZGlzYWJsZTpuby1lbXB0eVxyXG52YXIgRXhwcmVzc2lvblZpc2l0b3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBFeHByZXNzaW9uVmlzaXRvcigpIHtcclxuICAgIH1cclxuICAgIEV4cHJlc3Npb25WaXNpdG9yLnByb3RvdHlwZS52aXNpdENoYWluID0gZnVuY3Rpb24gKGNoYWluKSB7XHJcbiAgICAgICAgdGhpcy52aXNpdEFyZ3MoY2hhaW4uZXhwcmVzc2lvbnMpO1xyXG4gICAgfTtcclxuICAgIEV4cHJlc3Npb25WaXNpdG9yLnByb3RvdHlwZS52aXNpdEJpbmRpbmdCZWhhdmlvciA9IGZ1bmN0aW9uIChiZWhhdmlvcikge1xyXG4gICAgICAgIGJlaGF2aW9yLmV4cHJlc3Npb24uYWNjZXB0KHRoaXMpO1xyXG4gICAgICAgIHRoaXMudmlzaXRBcmdzKGJlaGF2aW9yLmFyZ3MpO1xyXG4gICAgfTtcclxuICAgIEV4cHJlc3Npb25WaXNpdG9yLnByb3RvdHlwZS52aXNpdFZhbHVlQ29udmVydGVyID0gZnVuY3Rpb24gKGNvbnZlcnRlcikge1xyXG4gICAgICAgIGNvbnZlcnRlci5leHByZXNzaW9uLmFjY2VwdCh0aGlzKTtcclxuICAgICAgICB0aGlzLnZpc2l0QXJncyhjb252ZXJ0ZXIuYXJncyk7XHJcbiAgICB9O1xyXG4gICAgRXhwcmVzc2lvblZpc2l0b3IucHJvdG90eXBlLnZpc2l0QXNzaWduID0gZnVuY3Rpb24gKGFzc2lnbikge1xyXG4gICAgICAgIGFzc2lnbi50YXJnZXQuYWNjZXB0KHRoaXMpO1xyXG4gICAgICAgIGFzc2lnbi52YWx1ZS5hY2NlcHQodGhpcyk7XHJcbiAgICB9O1xyXG4gICAgRXhwcmVzc2lvblZpc2l0b3IucHJvdG90eXBlLnZpc2l0Q29uZGl0aW9uYWwgPSBmdW5jdGlvbiAoY29uZGl0aW9uYWwpIHtcclxuICAgICAgICBjb25kaXRpb25hbC5jb25kaXRpb24uYWNjZXB0KHRoaXMpO1xyXG4gICAgICAgIGNvbmRpdGlvbmFsLnllcy5hY2NlcHQodGhpcyk7XHJcbiAgICAgICAgY29uZGl0aW9uYWwubm8uYWNjZXB0KHRoaXMpO1xyXG4gICAgfTtcclxuICAgIEV4cHJlc3Npb25WaXNpdG9yLnByb3RvdHlwZS52aXNpdEFjY2Vzc1RoaXMgPSBmdW5jdGlvbiAoYWNjZXNzKSB7XHJcbiAgICAgICAgYWNjZXNzLmFuY2VzdG9yID0gYWNjZXNzLmFuY2VzdG9yO1xyXG4gICAgfTtcclxuICAgIEV4cHJlc3Npb25WaXNpdG9yLnByb3RvdHlwZS52aXNpdEFjY2Vzc1Njb3BlID0gZnVuY3Rpb24gKGFjY2Vzcykge1xyXG4gICAgICAgIGFjY2Vzcy5uYW1lID0gYWNjZXNzLm5hbWU7XHJcbiAgICB9O1xyXG4gICAgRXhwcmVzc2lvblZpc2l0b3IucHJvdG90eXBlLnZpc2l0QWNjZXNzTWVtYmVyID0gZnVuY3Rpb24gKGFjY2Vzcykge1xyXG4gICAgICAgIGFjY2Vzcy5vYmplY3QuYWNjZXB0KHRoaXMpO1xyXG4gICAgfTtcclxuICAgIEV4cHJlc3Npb25WaXNpdG9yLnByb3RvdHlwZS52aXNpdEFjY2Vzc0tleWVkID0gZnVuY3Rpb24gKGFjY2Vzcykge1xyXG4gICAgICAgIGFjY2Vzcy5vYmplY3QuYWNjZXB0KHRoaXMpO1xyXG4gICAgICAgIGFjY2Vzcy5rZXkuYWNjZXB0KHRoaXMpO1xyXG4gICAgfTtcclxuICAgIEV4cHJlc3Npb25WaXNpdG9yLnByb3RvdHlwZS52aXNpdENhbGxTY29wZSA9IGZ1bmN0aW9uIChjYWxsKSB7XHJcbiAgICAgICAgdGhpcy52aXNpdEFyZ3MoY2FsbC5hcmdzKTtcclxuICAgIH07XHJcbiAgICBFeHByZXNzaW9uVmlzaXRvci5wcm90b3R5cGUudmlzaXRDYWxsRnVuY3Rpb24gPSBmdW5jdGlvbiAoY2FsbCkge1xyXG4gICAgICAgIGNhbGwuZnVuYy5hY2NlcHQodGhpcyk7XHJcbiAgICAgICAgdGhpcy52aXNpdEFyZ3MoY2FsbC5hcmdzKTtcclxuICAgIH07XHJcbiAgICBFeHByZXNzaW9uVmlzaXRvci5wcm90b3R5cGUudmlzaXRDYWxsTWVtYmVyID0gZnVuY3Rpb24gKGNhbGwpIHtcclxuICAgICAgICBjYWxsLm9iamVjdC5hY2NlcHQodGhpcyk7XHJcbiAgICAgICAgdGhpcy52aXNpdEFyZ3MoY2FsbC5hcmdzKTtcclxuICAgIH07XHJcbiAgICBFeHByZXNzaW9uVmlzaXRvci5wcm90b3R5cGUudmlzaXRQcmVmaXggPSBmdW5jdGlvbiAocHJlZml4KSB7XHJcbiAgICAgICAgcHJlZml4LmV4cHJlc3Npb24uYWNjZXB0KHRoaXMpO1xyXG4gICAgfTtcclxuICAgIEV4cHJlc3Npb25WaXNpdG9yLnByb3RvdHlwZS52aXNpdEJpbmFyeSA9IGZ1bmN0aW9uIChiaW5hcnkpIHtcclxuICAgICAgICBiaW5hcnkubGVmdC5hY2NlcHQodGhpcyk7XHJcbiAgICAgICAgYmluYXJ5LnJpZ2h0LmFjY2VwdCh0aGlzKTtcclxuICAgIH07XHJcbiAgICBFeHByZXNzaW9uVmlzaXRvci5wcm90b3R5cGUudmlzaXRMaXRlcmFsUHJpbWl0aXZlID0gZnVuY3Rpb24gKGxpdGVyYWwpIHtcclxuICAgICAgICBsaXRlcmFsLnZhbHVlID0gbGl0ZXJhbC52YWx1ZTtcclxuICAgIH07XHJcbiAgICBFeHByZXNzaW9uVmlzaXRvci5wcm90b3R5cGUudmlzaXRMaXRlcmFsQXJyYXkgPSBmdW5jdGlvbiAobGl0ZXJhbCkge1xyXG4gICAgICAgIHRoaXMudmlzaXRBcmdzKGxpdGVyYWwuZWxlbWVudHMpO1xyXG4gICAgfTtcclxuICAgIEV4cHJlc3Npb25WaXNpdG9yLnByb3RvdHlwZS52aXNpdExpdGVyYWxPYmplY3QgPSBmdW5jdGlvbiAobGl0ZXJhbCkge1xyXG4gICAgICAgIHRoaXMudmlzaXRBcmdzKGxpdGVyYWwudmFsdWVzKTtcclxuICAgIH07XHJcbiAgICBFeHByZXNzaW9uVmlzaXRvci5wcm90b3R5cGUudmlzaXRMaXRlcmFsU3RyaW5nID0gZnVuY3Rpb24gKGxpdGVyYWwpIHtcclxuICAgICAgICBsaXRlcmFsLnZhbHVlID0gbGl0ZXJhbC52YWx1ZTtcclxuICAgIH07XHJcbiAgICBFeHByZXNzaW9uVmlzaXRvci5wcm90b3R5cGUudmlzaXRBcmdzID0gZnVuY3Rpb24gKGFyZ3MpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgYXJnc1tpXS5hY2NlcHQodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiBFeHByZXNzaW9uVmlzaXRvcjtcclxufSgpKTtcblxudmFyIFZhbGlkYXRpb25NZXNzYWdlUGFyc2VyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gVmFsaWRhdGlvbk1lc3NhZ2VQYXJzZXIoYmluZGlucUxhbmd1YWdlKSB7XHJcbiAgICAgICAgdGhpcy5iaW5kaW5xTGFuZ3VhZ2UgPSBiaW5kaW5xTGFuZ3VhZ2U7XHJcbiAgICAgICAgdGhpcy5lbXB0eVN0cmluZ0V4cHJlc3Npb24gPSBuZXcgTGl0ZXJhbFN0cmluZygnJyk7XHJcbiAgICAgICAgdGhpcy5udWxsRXhwcmVzc2lvbiA9IG5ldyBMaXRlcmFsUHJpbWl0aXZlKG51bGwpO1xyXG4gICAgICAgIHRoaXMudW5kZWZpbmVkRXhwcmVzc2lvbiA9IG5ldyBMaXRlcmFsUHJpbWl0aXZlKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgdGhpcy5jYWNoZSA9IHt9O1xyXG4gICAgfVxyXG4gICAgVmFsaWRhdGlvbk1lc3NhZ2VQYXJzZXIucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rpb24gKG1lc3NhZ2UpIHtcclxuICAgICAgICBpZiAodGhpcy5jYWNoZVttZXNzYWdlXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhY2hlW21lc3NhZ2VdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcGFydHMgPSB0aGlzLmJpbmRpbnFMYW5ndWFnZS5wYXJzZUludGVycG9sYXRpb24obnVsbCwgbWVzc2FnZSk7XHJcbiAgICAgICAgaWYgKHBhcnRzID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgTGl0ZXJhbFN0cmluZyhtZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGV4cHJlc3Npb24gPSBuZXcgTGl0ZXJhbFN0cmluZyhwYXJ0c1swXSk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBwYXJ0cy5sZW5ndGg7IGkgKz0gMikge1xyXG4gICAgICAgICAgICBleHByZXNzaW9uID0gbmV3IEJpbmFyeSgnKycsIGV4cHJlc3Npb24sIG5ldyBCaW5hcnkoJysnLCB0aGlzLmNvYWxlc2NlKHBhcnRzW2ldKSwgbmV3IExpdGVyYWxTdHJpbmcocGFydHNbaSArIDFdKSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBNZXNzYWdlRXhwcmVzc2lvblZhbGlkYXRvci52YWxpZGF0ZShleHByZXNzaW9uLCBtZXNzYWdlKTtcclxuICAgICAgICB0aGlzLmNhY2hlW21lc3NhZ2VdID0gZXhwcmVzc2lvbjtcclxuICAgICAgICByZXR1cm4gZXhwcmVzc2lvbjtcclxuICAgIH07XHJcbiAgICBWYWxpZGF0aW9uTWVzc2FnZVBhcnNlci5wcm90b3R5cGUuY29hbGVzY2UgPSBmdW5jdGlvbiAocGFydCkge1xyXG4gICAgICAgIC8vIHBhcnQgPT09IG51bGwgfHwgcGFydCA9PT0gdW5kZWZpbmVkID8gJycgOiBwYXJ0XHJcbiAgICAgICAgcmV0dXJuIG5ldyBDb25kaXRpb25hbChuZXcgQmluYXJ5KCd8fCcsIG5ldyBCaW5hcnkoJz09PScsIHBhcnQsIHRoaXMubnVsbEV4cHJlc3Npb24pLCBuZXcgQmluYXJ5KCc9PT0nLCBwYXJ0LCB0aGlzLnVuZGVmaW5lZEV4cHJlc3Npb24pKSwgdGhpcy5lbXB0eVN0cmluZ0V4cHJlc3Npb24sIG5ldyBDYWxsTWVtYmVyKHBhcnQsICd0b1N0cmluZycsIFtdKSk7XHJcbiAgICB9O1xyXG4gICAgVmFsaWRhdGlvbk1lc3NhZ2VQYXJzZXIuaW5qZWN0ID0gW0JpbmRpbmdMYW5ndWFnZV07XHJcbiAgICByZXR1cm4gVmFsaWRhdGlvbk1lc3NhZ2VQYXJzZXI7XHJcbn0oKSk7XHJcbnZhciBNZXNzYWdlRXhwcmVzc2lvblZhbGlkYXRvciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcclxuICAgIF9fZXh0ZW5kcyhNZXNzYWdlRXhwcmVzc2lvblZhbGlkYXRvciwgX3N1cGVyKTtcclxuICAgIGZ1bmN0aW9uIE1lc3NhZ2VFeHByZXNzaW9uVmFsaWRhdG9yKG9yaWdpbmFsTWVzc2FnZSkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XHJcbiAgICAgICAgX3RoaXMub3JpZ2luYWxNZXNzYWdlID0gb3JpZ2luYWxNZXNzYWdlO1xyXG4gICAgICAgIHJldHVybiBfdGhpcztcclxuICAgIH1cclxuICAgIE1lc3NhZ2VFeHByZXNzaW9uVmFsaWRhdG9yLnZhbGlkYXRlID0gZnVuY3Rpb24gKGV4cHJlc3Npb24sIG9yaWdpbmFsTWVzc2FnZSkge1xyXG4gICAgICAgIHZhciB2aXNpdG9yID0gbmV3IE1lc3NhZ2VFeHByZXNzaW9uVmFsaWRhdG9yKG9yaWdpbmFsTWVzc2FnZSk7XHJcbiAgICAgICAgZXhwcmVzc2lvbi5hY2NlcHQodmlzaXRvcik7XHJcbiAgICB9O1xyXG4gICAgTWVzc2FnZUV4cHJlc3Npb25WYWxpZGF0b3IucHJvdG90eXBlLnZpc2l0QWNjZXNzU2NvcGUgPSBmdW5jdGlvbiAoYWNjZXNzKSB7XHJcbiAgICAgICAgaWYgKGFjY2Vzcy5hbmNlc3RvciAhPT0gMCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJyRwYXJlbnQgaXMgbm90IHBlcm1pdHRlZCBpbiB2YWxpZGF0aW9uIG1lc3NhZ2UgZXhwcmVzc2lvbnMuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChbJ2Rpc3BsYXlOYW1lJywgJ3Byb3BlcnR5TmFtZScsICd2YWx1ZScsICdvYmplY3QnLCAnY29uZmlnJywgJ2dldERpc3BsYXlOYW1lJ10uaW5kZXhPZihhY2Nlc3MubmFtZSkgIT09IC0xKSB7XHJcbiAgICAgICAgICAgIGdldExvZ2dlcignYXVyZWxpYS12YWxpZGF0aW9uJylcclxuICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcclxuICAgICAgICAgICAgICAgIC53YXJuKFwiRGlkIHlvdSBtZWFuIHRvIHVzZSBcXFwiJFwiICsgYWNjZXNzLm5hbWUgKyBcIlxcXCIgaW5zdGVhZCBvZiBcXFwiXCIgKyBhY2Nlc3MubmFtZSArIFwiXFxcIiBpbiB0aGlzIHZhbGlkYXRpb24gbWVzc2FnZSB0ZW1wbGF0ZTogXFxcIlwiICsgdGhpcy5vcmlnaW5hbE1lc3NhZ2UgKyBcIlxcXCI/XCIpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICByZXR1cm4gTWVzc2FnZUV4cHJlc3Npb25WYWxpZGF0b3I7XHJcbn0oRXhwcmVzc2lvblZpc2l0b3IpKTtcblxuLyoqXHJcbiAqIERpY3Rpb25hcnkgb2YgdmFsaWRhdGlvbiBtZXNzYWdlcy4gW21lc3NhZ2VLZXldOiBtZXNzYWdlRXhwcmVzc2lvblxyXG4gKi9cclxudmFyIHZhbGlkYXRpb25NZXNzYWdlcyA9IHtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIGRlZmF1bHQgdmFsaWRhdGlvbiBtZXNzYWdlLiBVc2VkIHdpdGggcnVsZXMgdGhhdCBoYXZlIG5vIHN0YW5kYXJkIG1lc3NhZ2UuXHJcbiAgICAgKi9cclxuICAgIGRlZmF1bHQ6IFwiJHskZGlzcGxheU5hbWV9IGlzIGludmFsaWQuXCIsXHJcbiAgICByZXF1aXJlZDogXCIkeyRkaXNwbGF5TmFtZX0gaXMgcmVxdWlyZWQuXCIsXHJcbiAgICBtYXRjaGVzOiBcIiR7JGRpc3BsYXlOYW1lfSBpcyBub3QgY29ycmVjdGx5IGZvcm1hdHRlZC5cIixcclxuICAgIGVtYWlsOiBcIiR7JGRpc3BsYXlOYW1lfSBpcyBub3QgYSB2YWxpZCBlbWFpbC5cIixcclxuICAgIG1pbkxlbmd0aDogXCIkeyRkaXNwbGF5TmFtZX0gbXVzdCBiZSBhdCBsZWFzdCAkeyRjb25maWcubGVuZ3RofSBjaGFyYWN0ZXIkeyRjb25maWcubGVuZ3RoID09PSAxID8gJycgOiAncyd9LlwiLFxyXG4gICAgbWF4TGVuZ3RoOiBcIiR7JGRpc3BsYXlOYW1lfSBjYW5ub3QgYmUgbG9uZ2VyIHRoYW4gJHskY29uZmlnLmxlbmd0aH0gY2hhcmFjdGVyJHskY29uZmlnLmxlbmd0aCA9PT0gMSA/ICcnIDogJ3MnfS5cIixcclxuICAgIG1pbkl0ZW1zOiBcIiR7JGRpc3BsYXlOYW1lfSBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgJHskY29uZmlnLmNvdW50fSBpdGVtJHskY29uZmlnLmNvdW50ID09PSAxID8gJycgOiAncyd9LlwiLFxyXG4gICAgbWF4SXRlbXM6IFwiJHskZGlzcGxheU5hbWV9IGNhbm5vdCBjb250YWluIG1vcmUgdGhhbiAkeyRjb25maWcuY291bnR9IGl0ZW0keyRjb25maWcuY291bnQgPT09IDEgPyAnJyA6ICdzJ30uXCIsXHJcbiAgICBlcXVhbHM6IFwiJHskZGlzcGxheU5hbWV9IG11c3QgYmUgJHskY29uZmlnLmV4cGVjdGVkVmFsdWV9LlwiLFxyXG59O1xyXG4vKipcclxuICogUmV0cmlldmVzIHZhbGlkYXRpb24gbWVzc2FnZXMgYW5kIHByb3BlcnR5IGRpc3BsYXkgbmFtZXMuXHJcbiAqL1xyXG52YXIgVmFsaWRhdGlvbk1lc3NhZ2VQcm92aWRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIFZhbGlkYXRpb25NZXNzYWdlUHJvdmlkZXIocGFyc2VyKSB7XHJcbiAgICAgICAgdGhpcy5wYXJzZXIgPSBwYXJzZXI7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYSBtZXNzYWdlIGJpbmRpbmcgZXhwcmVzc2lvbiB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBrZXkuXHJcbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBtZXNzYWdlIGtleS5cclxuICAgICAqL1xyXG4gICAgVmFsaWRhdGlvbk1lc3NhZ2VQcm92aWRlci5wcm90b3R5cGUuZ2V0TWVzc2FnZSA9IGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICB2YXIgbWVzc2FnZTtcclxuICAgICAgICBpZiAoa2V5IGluIHZhbGlkYXRpb25NZXNzYWdlcykge1xyXG4gICAgICAgICAgICBtZXNzYWdlID0gdmFsaWRhdGlvbk1lc3NhZ2VzW2tleV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBtZXNzYWdlID0gdmFsaWRhdGlvbk1lc3NhZ2VzWydkZWZhdWx0J107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlci5wYXJzZShtZXNzYWdlKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEZvcm11bGF0ZXMgYSBwcm9wZXJ0eSBkaXNwbGF5IG5hbWUgdXNpbmcgdGhlIHByb3BlcnR5IG5hbWUgYW5kIHRoZSBjb25maWd1cmVkXHJcbiAgICAgKiBkaXNwbGF5TmFtZSAoaWYgcHJvdmlkZWQpLlxyXG4gICAgICogT3ZlcnJpZGUgdGhpcyB3aXRoIHlvdXIgb3duIGN1c3RvbSBsb2dpYy5cclxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgVGhlIHByb3BlcnR5IG5hbWUuXHJcbiAgICAgKi9cclxuICAgIFZhbGlkYXRpb25NZXNzYWdlUHJvdmlkZXIucHJvdG90eXBlLmdldERpc3BsYXlOYW1lID0gZnVuY3Rpb24gKHByb3BlcnR5TmFtZSwgZGlzcGxheU5hbWUpIHtcclxuICAgICAgICBpZiAoZGlzcGxheU5hbWUgIT09IG51bGwgJiYgZGlzcGxheU5hbWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gKGRpc3BsYXlOYW1lIGluc3RhbmNlb2YgRnVuY3Rpb24pID8gZGlzcGxheU5hbWUoKSA6IGRpc3BsYXlOYW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBzcGxpdCBvbiB1cHBlci1jYXNlIGxldHRlcnMuXHJcbiAgICAgICAgdmFyIHdvcmRzID0gcHJvcGVydHlOYW1lLnRvU3RyaW5nKCkuc3BsaXQoLyg/PVtBLVpdKS8pLmpvaW4oJyAnKTtcclxuICAgICAgICAvLyBjYXBpdGFsaXplIGZpcnN0IGxldHRlci5cclxuICAgICAgICByZXR1cm4gd29yZHMuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB3b3Jkcy5zbGljZSgxKTtcclxuICAgIH07XHJcbiAgICBWYWxpZGF0aW9uTWVzc2FnZVByb3ZpZGVyLmluamVjdCA9IFtWYWxpZGF0aW9uTWVzc2FnZVBhcnNlcl07XHJcbiAgICByZXR1cm4gVmFsaWRhdGlvbk1lc3NhZ2VQcm92aWRlcjtcclxufSgpKTtcblxuLyoqXHJcbiAqIFZhbGlkYXRlcy5cclxuICogUmVzcG9uc2libGUgZm9yIHZhbGlkYXRpbmcgb2JqZWN0cyBhbmQgcHJvcGVydGllcy5cclxuICovXHJcbnZhciBTdGFuZGFyZFZhbGlkYXRvciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcclxuICAgIF9fZXh0ZW5kcyhTdGFuZGFyZFZhbGlkYXRvciwgX3N1cGVyKTtcclxuICAgIGZ1bmN0aW9uIFN0YW5kYXJkVmFsaWRhdG9yKG1lc3NhZ2VQcm92aWRlciwgcmVzb3VyY2VzKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcclxuICAgICAgICBfdGhpcy5tZXNzYWdlUHJvdmlkZXIgPSBtZXNzYWdlUHJvdmlkZXI7XHJcbiAgICAgICAgX3RoaXMubG9va3VwRnVuY3Rpb25zID0gcmVzb3VyY2VzLmxvb2t1cEZ1bmN0aW9ucztcclxuICAgICAgICBfdGhpcy5nZXREaXNwbGF5TmFtZSA9IG1lc3NhZ2VQcm92aWRlci5nZXREaXNwbGF5TmFtZS5iaW5kKG1lc3NhZ2VQcm92aWRlcik7XHJcbiAgICAgICAgcmV0dXJuIF90aGlzO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGF0ZXMgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eS5cclxuICAgICAqIEBwYXJhbSBvYmplY3QgVGhlIG9iamVjdCB0byB2YWxpZGF0ZS5cclxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIHZhbGlkYXRlLlxyXG4gICAgICogQHBhcmFtIHJ1bGVzIE9wdGlvbmFsLiBJZiB1bnNwZWNpZmllZCwgdGhlIHJ1bGVzIHdpbGwgYmUgbG9va2VkIHVwIHVzaW5nIHRoZSBtZXRhZGF0YVxyXG4gICAgICogZm9yIHRoZSBvYmplY3QgY3JlYXRlZCBieSBWYWxpZGF0aW9uUnVsZXMuLi4ub24oY2xhc3Mvb2JqZWN0KVxyXG4gICAgICovXHJcbiAgICBTdGFuZGFyZFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVQcm9wZXJ0eSA9IGZ1bmN0aW9uIChvYmplY3QsIHByb3BlcnR5TmFtZSwgcnVsZXMpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZShvYmplY3QsIHByb3BlcnR5TmFtZSwgcnVsZXMgfHwgbnVsbCk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGF0ZXMgYWxsIHJ1bGVzIGZvciBzcGVjaWZpZWQgb2JqZWN0IGFuZCBpdCdzIHByb3BlcnRpZXMuXHJcbiAgICAgKiBAcGFyYW0gb2JqZWN0IFRoZSBvYmplY3QgdG8gdmFsaWRhdGUuXHJcbiAgICAgKiBAcGFyYW0gcnVsZXMgT3B0aW9uYWwuIElmIHVuc3BlY2lmaWVkLCB0aGUgcnVsZXMgd2lsbCBiZSBsb29rZWQgdXAgdXNpbmcgdGhlIG1ldGFkYXRhXHJcbiAgICAgKiBmb3IgdGhlIG9iamVjdCBjcmVhdGVkIGJ5IFZhbGlkYXRpb25SdWxlcy4uLi5vbihjbGFzcy9vYmplY3QpXHJcbiAgICAgKi9cclxuICAgIFN0YW5kYXJkVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZU9iamVjdCA9IGZ1bmN0aW9uIChvYmplY3QsIHJ1bGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGUob2JqZWN0LCBudWxsLCBydWxlcyB8fCBudWxsKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIERldGVybWluZXMgd2hldGhlciBhIHJ1bGUgZXhpc3RzIGluIGEgc2V0IG9mIHJ1bGVzLlxyXG4gICAgICogQHBhcmFtIHJ1bGVzIFRoZSBydWxlcyB0byBzZWFyY2guXHJcbiAgICAgKiBAcGFyZW0gcnVsZSBUaGUgcnVsZSB0byBmaW5kLlxyXG4gICAgICovXHJcbiAgICBTdGFuZGFyZFZhbGlkYXRvci5wcm90b3R5cGUucnVsZUV4aXN0cyA9IGZ1bmN0aW9uIChydWxlcywgcnVsZSkge1xyXG4gICAgICAgIHZhciBpID0gcnVsZXMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgICAgICAgaWYgKHJ1bGVzW2ldLmluZGV4T2YocnVsZSkgIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9O1xyXG4gICAgU3RhbmRhcmRWYWxpZGF0b3IucHJvdG90eXBlLmdldE1lc3NhZ2UgPSBmdW5jdGlvbiAocnVsZSwgb2JqZWN0LCB2YWx1ZSkge1xyXG4gICAgICAgIHZhciBleHByZXNzaW9uID0gcnVsZS5tZXNzYWdlIHx8IHRoaXMubWVzc2FnZVByb3ZpZGVyLmdldE1lc3NhZ2UocnVsZS5tZXNzYWdlS2V5KTtcclxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6cHJlZmVyLWNvbnN0XHJcbiAgICAgICAgdmFyIF9hID0gcnVsZS5wcm9wZXJ0eSwgcHJvcGVydHlOYW1lID0gX2EubmFtZSwgZGlzcGxheU5hbWUgPSBfYS5kaXNwbGF5TmFtZTtcclxuICAgICAgICBpZiAocHJvcGVydHlOYW1lICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lID0gdGhpcy5tZXNzYWdlUHJvdmlkZXIuZ2V0RGlzcGxheU5hbWUocHJvcGVydHlOYW1lLCBkaXNwbGF5TmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBvdmVycmlkZUNvbnRleHQgPSB7XHJcbiAgICAgICAgICAgICRkaXNwbGF5TmFtZTogZGlzcGxheU5hbWUsXHJcbiAgICAgICAgICAgICRwcm9wZXJ0eU5hbWU6IHByb3BlcnR5TmFtZSxcclxuICAgICAgICAgICAgJHZhbHVlOiB2YWx1ZSxcclxuICAgICAgICAgICAgJG9iamVjdDogb2JqZWN0LFxyXG4gICAgICAgICAgICAkY29uZmlnOiBydWxlLmNvbmZpZyxcclxuICAgICAgICAgICAgLy8gcmV0dXJucyB0aGUgbmFtZSBvZiBhIGdpdmVuIHByb3BlcnR5LCBnaXZlbiBqdXN0IHRoZSBwcm9wZXJ0eSBuYW1lIChpcnJlc3BlY3RpdmUgb2YgdGhlIHByb3BlcnR5J3MgZGlzcGxheU5hbWUpXHJcbiAgICAgICAgICAgIC8vIHNwbGl0IG9uIGNhcGl0YWwgbGV0dGVycywgZmlyc3QgbGV0dGVyIGVuc3VyZWQgdG8gYmUgY2FwaXRhbGl6ZWRcclxuICAgICAgICAgICAgJGdldERpc3BsYXlOYW1lOiB0aGlzLmdldERpc3BsYXlOYW1lXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gZXhwcmVzc2lvbi5ldmFsdWF0ZSh7IGJpbmRpbmdDb250ZXh0OiBvYmplY3QsIG92ZXJyaWRlQ29udGV4dDogb3ZlcnJpZGVDb250ZXh0IH0sIHRoaXMubG9va3VwRnVuY3Rpb25zKTtcclxuICAgIH07XHJcbiAgICBTdGFuZGFyZFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVSdWxlU2VxdWVuY2UgPSBmdW5jdGlvbiAob2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHJ1bGVTZXF1ZW5jZSwgc2VxdWVuY2UsIHJlc3VsdHMpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIC8vIGFyZSB3ZSB2YWxpZGF0aW5nIGFsbCBwcm9wZXJ0aWVzIG9yIGEgc2luZ2xlIHByb3BlcnR5P1xyXG4gICAgICAgIHZhciB2YWxpZGF0ZUFsbFByb3BlcnRpZXMgPSBwcm9wZXJ0eU5hbWUgPT09IG51bGwgfHwgcHJvcGVydHlOYW1lID09PSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdmFyIHJ1bGVzID0gcnVsZVNlcXVlbmNlW3NlcXVlbmNlXTtcclxuICAgICAgICB2YXIgYWxsVmFsaWQgPSB0cnVlO1xyXG4gICAgICAgIC8vIHZhbGlkYXRlIGVhY2ggcnVsZS5cclxuICAgICAgICB2YXIgcHJvbWlzZXMgPSBbXTtcclxuICAgICAgICB2YXIgX2xvb3BfMSA9IGZ1bmN0aW9uIChpKSB7XHJcbiAgICAgICAgICAgIHZhciBydWxlID0gcnVsZXNbaV07XHJcbiAgICAgICAgICAgIC8vIGlzIHRoZSBydWxlIHJlbGF0ZWQgdG8gdGhlIHByb3BlcnR5IHdlJ3JlIHZhbGlkYXRpbmcuXHJcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzIHwgVXNlIGxvb3NlIGVxdWFsaXR5IGZvciBwcm9wZXJ0eSBrZXlzXHJcbiAgICAgICAgICAgIGlmICghdmFsaWRhdGVBbGxQcm9wZXJ0aWVzICYmIHJ1bGUucHJvcGVydHkubmFtZSAhPSBwcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBcImNvbnRpbnVlXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gaXMgdGhpcyBhIGNvbmRpdGlvbmFsIHJ1bGU/IGlzIHRoZSBjb25kaXRpb24gbWV0P1xyXG4gICAgICAgICAgICBpZiAocnVsZS53aGVuICYmICFydWxlLndoZW4ob2JqZWN0KSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiY29udGludWVcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyB2YWxpZGF0ZS5cclxuICAgICAgICAgICAgdmFyIHZhbHVlID0gcnVsZS5wcm9wZXJ0eS5uYW1lID09PSBudWxsID8gb2JqZWN0IDogb2JqZWN0W3J1bGUucHJvcGVydHkubmFtZV07XHJcbiAgICAgICAgICAgIHZhciBwcm9taXNlT3JCb29sZWFuID0gcnVsZS5jb25kaXRpb24odmFsdWUsIG9iamVjdCk7XHJcbiAgICAgICAgICAgIGlmICghKHByb21pc2VPckJvb2xlYW4gaW5zdGFuY2VvZiBQcm9taXNlKSkge1xyXG4gICAgICAgICAgICAgICAgcHJvbWlzZU9yQm9vbGVhbiA9IFByb21pc2UucmVzb2x2ZShwcm9taXNlT3JCb29sZWFuKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKHByb21pc2VPckJvb2xlYW4udGhlbihmdW5jdGlvbiAodmFsaWQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0gdmFsaWQgPyBudWxsIDogX3RoaXMuZ2V0TWVzc2FnZShydWxlLCBvYmplY3QsIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChuZXcgVmFsaWRhdGVSZXN1bHQocnVsZSwgb2JqZWN0LCBydWxlLnByb3BlcnR5Lm5hbWUsIHZhbGlkLCBtZXNzYWdlKSk7XHJcbiAgICAgICAgICAgICAgICBhbGxWYWxpZCA9IGFsbFZhbGlkICYmIHZhbGlkO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbGlkO1xyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIF9sb29wXzEoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcylcclxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBzZXF1ZW5jZSsrO1xyXG4gICAgICAgICAgICBpZiAoYWxsVmFsaWQgJiYgc2VxdWVuY2UgPCBydWxlU2VxdWVuY2UubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMudmFsaWRhdGVSdWxlU2VxdWVuY2Uob2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHJ1bGVTZXF1ZW5jZSwgc2VxdWVuY2UsIHJlc3VsdHMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIFN0YW5kYXJkVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZSA9IGZ1bmN0aW9uIChvYmplY3QsIHByb3BlcnR5TmFtZSwgcnVsZXMpIHtcclxuICAgICAgICAvLyBydWxlcyBzcGVjaWZpZWQ/XHJcbiAgICAgICAgaWYgKCFydWxlcykge1xyXG4gICAgICAgICAgICAvLyBuby4gYXR0ZW1wdCB0byBsb2NhdGUgdGhlIHJ1bGVzLlxyXG4gICAgICAgICAgICBydWxlcyA9IFJ1bGVzLmdldChvYmplY3QpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBhbnkgcnVsZXM/XHJcbiAgICAgICAgaWYgKCFydWxlcyB8fCBydWxlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlUnVsZVNlcXVlbmNlKG9iamVjdCwgcHJvcGVydHlOYW1lLCBydWxlcywgMCwgW10pO1xyXG4gICAgfTtcclxuICAgIFN0YW5kYXJkVmFsaWRhdG9yLmluamVjdCA9IFtWYWxpZGF0aW9uTWVzc2FnZVByb3ZpZGVyLCBWaWV3UmVzb3VyY2VzXTtcclxuICAgIHJldHVybiBTdGFuZGFyZFZhbGlkYXRvcjtcclxufShWYWxpZGF0b3IpKTtcblxuLyoqXHJcbiAqIFBhcnQgb2YgdGhlIGZsdWVudCBydWxlIEFQSS4gRW5hYmxlcyBjdXN0b21pemluZyBwcm9wZXJ0eSBydWxlcy5cclxuICovXHJcbnZhciBGbHVlbnRSdWxlQ3VzdG9taXplciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEZsdWVudFJ1bGVDdXN0b21pemVyKHByb3BlcnR5LCBjb25kaXRpb24sIGNvbmZpZywgZmx1ZW50RW5zdXJlLCBmbHVlbnRSdWxlcywgcGFyc2Vycykge1xyXG4gICAgICAgIGlmIChjb25maWcgPT09IHZvaWQgMCkgeyBjb25maWcgPSB7fTsgfVxyXG4gICAgICAgIHRoaXMuZmx1ZW50RW5zdXJlID0gZmx1ZW50RW5zdXJlO1xyXG4gICAgICAgIHRoaXMuZmx1ZW50UnVsZXMgPSBmbHVlbnRSdWxlcztcclxuICAgICAgICB0aGlzLnBhcnNlcnMgPSBwYXJzZXJzO1xyXG4gICAgICAgIHRoaXMucnVsZSA9IHtcclxuICAgICAgICAgICAgcHJvcGVydHk6IHByb3BlcnR5LFxyXG4gICAgICAgICAgICBjb25kaXRpb246IGNvbmRpdGlvbixcclxuICAgICAgICAgICAgY29uZmlnOiBjb25maWcsXHJcbiAgICAgICAgICAgIHdoZW46IG51bGwsXHJcbiAgICAgICAgICAgIG1lc3NhZ2VLZXk6ICdkZWZhdWx0JyxcclxuICAgICAgICAgICAgbWVzc2FnZTogbnVsbCxcclxuICAgICAgICAgICAgc2VxdWVuY2U6IGZsdWVudFJ1bGVzLnNlcXVlbmNlXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmZsdWVudEVuc3VyZS5fYWRkUnVsZSh0aGlzLnJ1bGUpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGF0ZSBzdWJzZXF1ZW50IHJ1bGVzIGFmdGVyIHByZXZpb3VzbHkgZGVjbGFyZWQgcnVsZXMgaGF2ZVxyXG4gICAgICogYmVlbiB2YWxpZGF0ZWQgc3VjY2Vzc2Z1bGx5LiBVc2UgdG8gcG9zdHBvbmUgdmFsaWRhdGlvbiBvZiBjb3N0bHlcclxuICAgICAqIHJ1bGVzIHVudGlsIGxlc3MgZXhwZW5zaXZlIHJ1bGVzIHBhc3MgdmFsaWRhdGlvbi5cclxuICAgICAqL1xyXG4gICAgRmx1ZW50UnVsZUN1c3RvbWl6ZXIucHJvdG90eXBlLnRoZW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5mbHVlbnRSdWxlcy5zZXF1ZW5jZSsrO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogU3BlY2lmaWVzIHRoZSBrZXkgdG8gdXNlIHdoZW4gbG9va2luZyB1cCB0aGUgcnVsZSdzIHZhbGlkYXRpb24gbWVzc2FnZS5cclxuICAgICAqL1xyXG4gICAgRmx1ZW50UnVsZUN1c3RvbWl6ZXIucHJvdG90eXBlLndpdGhNZXNzYWdlS2V5ID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIHRoaXMucnVsZS5tZXNzYWdlS2V5ID0ga2V5O1xyXG4gICAgICAgIHRoaXMucnVsZS5tZXNzYWdlID0gbnVsbDtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFNwZWNpZmllcyBydWxlJ3MgdmFsaWRhdGlvbiBtZXNzYWdlLlxyXG4gICAgICovXHJcbiAgICBGbHVlbnRSdWxlQ3VzdG9taXplci5wcm90b3R5cGUud2l0aE1lc3NhZ2UgPSBmdW5jdGlvbiAobWVzc2FnZSkge1xyXG4gICAgICAgIHRoaXMucnVsZS5tZXNzYWdlS2V5ID0gJ2N1c3RvbSc7XHJcbiAgICAgICAgdGhpcy5ydWxlLm1lc3NhZ2UgPSB0aGlzLnBhcnNlcnMubWVzc2FnZS5wYXJzZShtZXNzYWdlKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFNwZWNpZmllcyBhIGNvbmRpdGlvbiB0aGF0IG11c3QgYmUgbWV0IGJlZm9yZSBhdHRlbXB0aW5nIHRvIHZhbGlkYXRlIHRoZSBydWxlLlxyXG4gICAgICogQHBhcmFtIGNvbmRpdGlvbiBBIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyB0aGUgb2JqZWN0IGFzIGEgcGFyYW1ldGVyIGFuZCByZXR1cm5zIHRydWVcclxuICAgICAqIG9yIGZhbHNlIHdoZXRoZXIgdGhlIHJ1bGUgc2hvdWxkIGJlIGV2YWx1YXRlZC5cclxuICAgICAqL1xyXG4gICAgRmx1ZW50UnVsZUN1c3RvbWl6ZXIucHJvdG90eXBlLndoZW4gPSBmdW5jdGlvbiAoY29uZGl0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5ydWxlLndoZW4gPSBjb25kaXRpb247XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBUYWdzIHRoZSBydWxlIGluc3RhbmNlLCBlbmFibGluZyB0aGUgcnVsZSB0byBiZSBmb3VuZCBlYXNpbHlcclxuICAgICAqIHVzaW5nIFZhbGlkYXRpb25SdWxlcy50YWdnZWRSdWxlcyhydWxlcywgdGFnKVxyXG4gICAgICovXHJcbiAgICBGbHVlbnRSdWxlQ3VzdG9taXplci5wcm90b3R5cGUudGFnID0gZnVuY3Rpb24gKHRhZykge1xyXG4gICAgICAgIHRoaXMucnVsZS50YWcgPSB0YWc7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9O1xyXG4gICAgLy8vLy8gRmx1ZW50RW5zdXJlIEFQSXMgLy8vLy9cclxuICAgIC8qKlxyXG4gICAgICogVGFyZ2V0IGEgcHJvcGVydHkgd2l0aCB2YWxpZGF0aW9uIHJ1bGVzLlxyXG4gICAgICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eSB0byB0YXJnZXQuIENhbiBiZSB0aGUgcHJvcGVydHkgbmFtZSBvciBhIHByb3BlcnR5IGFjY2Vzc29yIGZ1bmN0aW9uLlxyXG4gICAgICovXHJcbiAgICBGbHVlbnRSdWxlQ3VzdG9taXplci5wcm90b3R5cGUuZW5zdXJlID0gZnVuY3Rpb24gKHN1YmplY3QpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mbHVlbnRFbnN1cmUuZW5zdXJlKHN1YmplY3QpO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogVGFyZ2V0cyBhbiBvYmplY3Qgd2l0aCB2YWxpZGF0aW9uIHJ1bGVzLlxyXG4gICAgICovXHJcbiAgICBGbHVlbnRSdWxlQ3VzdG9taXplci5wcm90b3R5cGUuZW5zdXJlT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZsdWVudEVuc3VyZS5lbnN1cmVPYmplY3QoKTtcclxuICAgIH07XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRmx1ZW50UnVsZUN1c3RvbWl6ZXIucHJvdG90eXBlLCBcInJ1bGVzXCIsIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBSdWxlcyB0aGF0IGhhdmUgYmVlbiBkZWZpbmVkIHVzaW5nIHRoZSBmbHVlbnQgQVBJLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mbHVlbnRFbnN1cmUucnVsZXM7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICAvKipcclxuICAgICAqIEFwcGxpZXMgdGhlIHJ1bGVzIHRvIGEgY2xhc3Mgb3Igb2JqZWN0LCBtYWtpbmcgdGhlbSBkaXNjb3ZlcmFibGUgYnkgdGhlIFN0YW5kYXJkVmFsaWRhdG9yLlxyXG4gICAgICogQHBhcmFtIHRhcmdldCBBIGNsYXNzIG9yIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgRmx1ZW50UnVsZUN1c3RvbWl6ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gKHRhcmdldCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZsdWVudEVuc3VyZS5vbih0YXJnZXQpO1xyXG4gICAgfTtcclxuICAgIC8vLy8vLy8vLyBGbHVlbnRSdWxlcyBBUElzIC8vLy8vLy8vL1xyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBsaWVzIGFuIGFkLWhvYyBydWxlIGZ1bmN0aW9uIHRvIHRoZSBlbnN1cmVkIHByb3BlcnR5IG9yIG9iamVjdC5cclxuICAgICAqIEBwYXJhbSBjb25kaXRpb24gVGhlIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoZSBydWxlLlxyXG4gICAgICogV2lsbCBiZSBjYWxsZWQgd2l0aCB0d28gYXJndW1lbnRzLCB0aGUgcHJvcGVydHkgdmFsdWUgYW5kIHRoZSBvYmplY3QuXHJcbiAgICAgKiBTaG91bGQgcmV0dXJuIGEgYm9vbGVhbiBvciBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIGJvb2xlYW4uXHJcbiAgICAgKi9cclxuICAgIEZsdWVudFJ1bGVDdXN0b21pemVyLnByb3RvdHlwZS5zYXRpc2ZpZXMgPSBmdW5jdGlvbiAoY29uZGl0aW9uLCBjb25maWcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mbHVlbnRSdWxlcy5zYXRpc2ZpZXMoY29uZGl0aW9uLCBjb25maWcpO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogQXBwbGllcyBhIHJ1bGUgYnkgbmFtZS5cclxuICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBjdXN0b20gb3Igc3RhbmRhcmQgcnVsZS5cclxuICAgICAqIEBwYXJhbSBhcmdzIFRoZSBydWxlJ3MgYXJndW1lbnRzLlxyXG4gICAgICovXHJcbiAgICBGbHVlbnRSdWxlQ3VzdG9taXplci5wcm90b3R5cGUuc2F0aXNmaWVzUnVsZSA9IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICBhcmdzW19pIC0gMV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgX2E7XHJcbiAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMuZmx1ZW50UnVsZXMpLnNhdGlzZmllc1J1bGUuYXBwbHkoX2EsIFtuYW1lXS5jb25jYXQoYXJncykpO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogQXBwbGllcyB0aGUgXCJyZXF1aXJlZFwiIHJ1bGUgdG8gdGhlIHByb3BlcnR5LlxyXG4gICAgICogVGhlIHZhbHVlIGNhbm5vdCBiZSBudWxsLCB1bmRlZmluZWQgb3Igd2hpdGVzcGFjZS5cclxuICAgICAqL1xyXG4gICAgRmx1ZW50UnVsZUN1c3RvbWl6ZXIucHJvdG90eXBlLnJlcXVpcmVkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZsdWVudFJ1bGVzLnJlcXVpcmVkKCk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBsaWVzIHRoZSBcIm1hdGNoZXNcIiBydWxlIHRvIHRoZSBwcm9wZXJ0eS5cclxuICAgICAqIFZhbHVlIG11c3QgbWF0Y2ggdGhlIHNwZWNpZmllZCByZWd1bGFyIGV4cHJlc3Npb24uXHJcbiAgICAgKiBudWxsLCB1bmRlZmluZWQgYW5kIGVtcHR5LXN0cmluZyB2YWx1ZXMgYXJlIGNvbnNpZGVyZWQgdmFsaWQuXHJcbiAgICAgKi9cclxuICAgIEZsdWVudFJ1bGVDdXN0b21pemVyLnByb3RvdHlwZS5tYXRjaGVzID0gZnVuY3Rpb24gKHJlZ2V4KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmx1ZW50UnVsZXMubWF0Y2hlcyhyZWdleCk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBsaWVzIHRoZSBcImVtYWlsXCIgcnVsZSB0byB0aGUgcHJvcGVydHkuXHJcbiAgICAgKiBudWxsLCB1bmRlZmluZWQgYW5kIGVtcHR5LXN0cmluZyB2YWx1ZXMgYXJlIGNvbnNpZGVyZWQgdmFsaWQuXHJcbiAgICAgKi9cclxuICAgIEZsdWVudFJ1bGVDdXN0b21pemVyLnByb3RvdHlwZS5lbWFpbCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mbHVlbnRSdWxlcy5lbWFpbCgpO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogQXBwbGllcyB0aGUgXCJtaW5MZW5ndGhcIiBTVFJJTkcgdmFsaWRhdGlvbiBydWxlIHRvIHRoZSBwcm9wZXJ0eS5cclxuICAgICAqIG51bGwsIHVuZGVmaW5lZCBhbmQgZW1wdHktc3RyaW5nIHZhbHVlcyBhcmUgY29uc2lkZXJlZCB2YWxpZC5cclxuICAgICAqL1xyXG4gICAgRmx1ZW50UnVsZUN1c3RvbWl6ZXIucHJvdG90eXBlLm1pbkxlbmd0aCA9IGZ1bmN0aW9uIChsZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mbHVlbnRSdWxlcy5taW5MZW5ndGgobGVuZ3RoKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEFwcGxpZXMgdGhlIFwibWF4TGVuZ3RoXCIgU1RSSU5HIHZhbGlkYXRpb24gcnVsZSB0byB0aGUgcHJvcGVydHkuXHJcbiAgICAgKiBudWxsLCB1bmRlZmluZWQgYW5kIGVtcHR5LXN0cmluZyB2YWx1ZXMgYXJlIGNvbnNpZGVyZWQgdmFsaWQuXHJcbiAgICAgKi9cclxuICAgIEZsdWVudFJ1bGVDdXN0b21pemVyLnByb3RvdHlwZS5tYXhMZW5ndGggPSBmdW5jdGlvbiAobGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmx1ZW50UnVsZXMubWF4TGVuZ3RoKGxlbmd0aCk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBsaWVzIHRoZSBcIm1pbkl0ZW1zXCIgQVJSQVkgdmFsaWRhdGlvbiBydWxlIHRvIHRoZSBwcm9wZXJ0eS5cclxuICAgICAqIG51bGwgYW5kIHVuZGVmaW5lZCB2YWx1ZXMgYXJlIGNvbnNpZGVyZWQgdmFsaWQuXHJcbiAgICAgKi9cclxuICAgIEZsdWVudFJ1bGVDdXN0b21pemVyLnByb3RvdHlwZS5taW5JdGVtcyA9IGZ1bmN0aW9uIChjb3VudCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZsdWVudFJ1bGVzLm1pbkl0ZW1zKGNvdW50KTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEFwcGxpZXMgdGhlIFwibWF4SXRlbXNcIiBBUlJBWSB2YWxpZGF0aW9uIHJ1bGUgdG8gdGhlIHByb3BlcnR5LlxyXG4gICAgICogbnVsbCBhbmQgdW5kZWZpbmVkIHZhbHVlcyBhcmUgY29uc2lkZXJlZCB2YWxpZC5cclxuICAgICAqL1xyXG4gICAgRmx1ZW50UnVsZUN1c3RvbWl6ZXIucHJvdG90eXBlLm1heEl0ZW1zID0gZnVuY3Rpb24gKGNvdW50KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmx1ZW50UnVsZXMubWF4SXRlbXMoY291bnQpO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogQXBwbGllcyB0aGUgXCJlcXVhbHNcIiB2YWxpZGF0aW9uIHJ1bGUgdG8gdGhlIHByb3BlcnR5LlxyXG4gICAgICogbnVsbCwgdW5kZWZpbmVkIGFuZCBlbXB0eS1zdHJpbmcgdmFsdWVzIGFyZSBjb25zaWRlcmVkIHZhbGlkLlxyXG4gICAgICovXHJcbiAgICBGbHVlbnRSdWxlQ3VzdG9taXplci5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKGV4cGVjdGVkVmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mbHVlbnRSdWxlcy5lcXVhbHMoZXhwZWN0ZWRWYWx1ZSk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIEZsdWVudFJ1bGVDdXN0b21pemVyO1xyXG59KCkpO1xyXG4vKipcclxuICogUGFydCBvZiB0aGUgZmx1ZW50IHJ1bGUgQVBJLiBFbmFibGVzIGFwcGx5aW5nIHJ1bGVzIHRvIHByb3BlcnRpZXMgYW5kIG9iamVjdHMuXHJcbiAqL1xyXG52YXIgRmx1ZW50UnVsZXMgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBGbHVlbnRSdWxlcyhmbHVlbnRFbnN1cmUsIHBhcnNlcnMsIHByb3BlcnR5KSB7XHJcbiAgICAgICAgdGhpcy5mbHVlbnRFbnN1cmUgPSBmbHVlbnRFbnN1cmU7XHJcbiAgICAgICAgdGhpcy5wYXJzZXJzID0gcGFyc2VycztcclxuICAgICAgICB0aGlzLnByb3BlcnR5ID0gcHJvcGVydHk7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ3VycmVudCBydWxlIHNlcXVlbmNlIG51bWJlci4gVXNlZCB0byBwb3N0cG9uZSBldmFsdWF0aW9uIG9mIHJ1bGVzIHVudGlsIHJ1bGVzXHJcbiAgICAgICAgICogd2l0aCBsb3dlciBzZXF1ZW5jZSBudW1iZXIgaGF2ZSBzdWNjZXNzZnVsbHkgdmFsaWRhdGVkLiBUaGUgXCJ0aGVuXCIgZmx1ZW50IEFQSSBtZXRob2RcclxuICAgICAgICAgKiBtYW5hZ2VzIHRoaXMgcHJvcGVydHksIHRoZXJlJ3MgdXN1YWxseSBubyBuZWVkIHRvIHNldCBpdCBkaXJlY3RseS5cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNlcXVlbmNlID0gMDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBlbnN1cmVkIHByb3BlcnR5LlxyXG4gICAgICovXHJcbiAgICBGbHVlbnRSdWxlcy5wcm90b3R5cGUuZGlzcGxheU5hbWUgPSBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIHRoaXMucHJvcGVydHkuZGlzcGxheU5hbWUgPSBuYW1lO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogQXBwbGllcyBhbiBhZC1ob2MgcnVsZSBmdW5jdGlvbiB0byB0aGUgZW5zdXJlZCBwcm9wZXJ0eSBvciBvYmplY3QuXHJcbiAgICAgKiBAcGFyYW0gY29uZGl0aW9uIFRoZSBmdW5jdGlvbiB0byB2YWxpZGF0ZSB0aGUgcnVsZS5cclxuICAgICAqIFdpbGwgYmUgY2FsbGVkIHdpdGggdHdvIGFyZ3VtZW50cywgdGhlIHByb3BlcnR5IHZhbHVlIGFuZCB0aGUgb2JqZWN0LlxyXG4gICAgICogU2hvdWxkIHJldHVybiBhIGJvb2xlYW4gb3IgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBib29sZWFuLlxyXG4gICAgICovXHJcbiAgICBGbHVlbnRSdWxlcy5wcm90b3R5cGUuc2F0aXNmaWVzID0gZnVuY3Rpb24gKGNvbmRpdGlvbiwgY29uZmlnKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBGbHVlbnRSdWxlQ3VzdG9taXplcih0aGlzLnByb3BlcnR5LCBjb25kaXRpb24sIGNvbmZpZywgdGhpcy5mbHVlbnRFbnN1cmUsIHRoaXMsIHRoaXMucGFyc2Vycyk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBsaWVzIGEgcnVsZSBieSBuYW1lLlxyXG4gICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGN1c3RvbSBvciBzdGFuZGFyZCBydWxlLlxyXG4gICAgICogQHBhcmFtIGFyZ3MgVGhlIHJ1bGUncyBhcmd1bWVudHMuXHJcbiAgICAgKi9cclxuICAgIEZsdWVudFJ1bGVzLnByb3RvdHlwZS5zYXRpc2ZpZXNSdWxlID0gZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHZhciBhcmdzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgYXJnc1tfaSAtIDFdID0gYXJndW1lbnRzW19pXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHJ1bGUgPSBGbHVlbnRSdWxlcy5jdXN0b21SdWxlc1tuYW1lXTtcclxuICAgICAgICBpZiAoIXJ1bGUpIHtcclxuICAgICAgICAgICAgLy8gc3RhbmRhcmQgcnVsZT9cclxuICAgICAgICAgICAgcnVsZSA9IHRoaXNbbmFtZV07XHJcbiAgICAgICAgICAgIGlmIChydWxlIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBydWxlLmNhbGwuYXBwbHkocnVsZSwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUnVsZSB3aXRoIG5hbWUgXFxcIlwiICsgbmFtZSArIFwiXFxcIiBkb2VzIG5vdCBleGlzdC5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjb25maWcgPSBydWxlLmFyZ3NUb0NvbmZpZyA/IHJ1bGUuYXJnc1RvQ29uZmlnLmFwcGx5KHJ1bGUsIGFyZ3MpIDogdW5kZWZpbmVkO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNhdGlzZmllcyhmdW5jdGlvbiAodmFsdWUsIG9iaikge1xyXG4gICAgICAgICAgICB2YXIgX2E7XHJcbiAgICAgICAgICAgIHJldHVybiAoX2EgPSBydWxlLmNvbmRpdGlvbikuY2FsbC5hcHBseShfYSwgW190aGlzLCB2YWx1ZSwgb2JqXS5jb25jYXQoYXJncykpO1xyXG4gICAgICAgIH0sIGNvbmZpZylcclxuICAgICAgICAgICAgLndpdGhNZXNzYWdlS2V5KG5hbWUpO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogQXBwbGllcyB0aGUgXCJyZXF1aXJlZFwiIHJ1bGUgdG8gdGhlIHByb3BlcnR5LlxyXG4gICAgICogVGhlIHZhbHVlIGNhbm5vdCBiZSBudWxsLCB1bmRlZmluZWQgb3Igd2hpdGVzcGFjZS5cclxuICAgICAqL1xyXG4gICAgRmx1ZW50UnVsZXMucHJvdG90eXBlLnJlcXVpcmVkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNhdGlzZmllcyhmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlICE9PSBudWxsXHJcbiAgICAgICAgICAgICAgICAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICAmJiAhKGlzU3RyaW5nKHZhbHVlKSAmJiAhL1xcUy8udGVzdCh2YWx1ZSkpO1xyXG4gICAgICAgIH0pLndpdGhNZXNzYWdlS2V5KCdyZXF1aXJlZCcpO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogQXBwbGllcyB0aGUgXCJtYXRjaGVzXCIgcnVsZSB0byB0aGUgcHJvcGVydHkuXHJcbiAgICAgKiBWYWx1ZSBtdXN0IG1hdGNoIHRoZSBzcGVjaWZpZWQgcmVndWxhciBleHByZXNzaW9uLlxyXG4gICAgICogbnVsbCwgdW5kZWZpbmVkIGFuZCBlbXB0eS1zdHJpbmcgdmFsdWVzIGFyZSBjb25zaWRlcmVkIHZhbGlkLlxyXG4gICAgICovXHJcbiAgICBGbHVlbnRSdWxlcy5wcm90b3R5cGUubWF0Y2hlcyA9IGZ1bmN0aW9uIChyZWdleCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNhdGlzZmllcyhmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUubGVuZ3RoID09PSAwIHx8IHJlZ2V4LnRlc3QodmFsdWUpOyB9KVxyXG4gICAgICAgICAgICAud2l0aE1lc3NhZ2VLZXkoJ21hdGNoZXMnKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEFwcGxpZXMgdGhlIFwiZW1haWxcIiBydWxlIHRvIHRoZSBwcm9wZXJ0eS5cclxuICAgICAqIG51bGwsIHVuZGVmaW5lZCBhbmQgZW1wdHktc3RyaW5nIHZhbHVlcyBhcmUgY29uc2lkZXJlZCB2YWxpZC5cclxuICAgICAqL1xyXG4gICAgRmx1ZW50UnVsZXMucHJvdG90eXBlLmVtYWlsID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vIHJlZ2V4IGZyb20gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCN2YWxpZC1lLW1haWwtYWRkcmVzc1xyXG4gICAgICAgIC8qIHRzbGludDpkaXNhYmxlOm1heC1saW5lLWxlbmd0aCAqL1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1hdGNoZXMoL15bYS16QS1aMC05LiEjJCUmJyorXFwvPT9eX2B7fH1+LV0rQFthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlxcLlthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPykqJC8pXHJcbiAgICAgICAgICAgIC8qIHRzbGludDplbmFibGU6bWF4LWxpbmUtbGVuZ3RoICovXHJcbiAgICAgICAgICAgIC53aXRoTWVzc2FnZUtleSgnZW1haWwnKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEFwcGxpZXMgdGhlIFwibWluTGVuZ3RoXCIgU1RSSU5HIHZhbGlkYXRpb24gcnVsZSB0byB0aGUgcHJvcGVydHkuXHJcbiAgICAgKiBudWxsLCB1bmRlZmluZWQgYW5kIGVtcHR5LXN0cmluZyB2YWx1ZXMgYXJlIGNvbnNpZGVyZWQgdmFsaWQuXHJcbiAgICAgKi9cclxuICAgIEZsdWVudFJ1bGVzLnByb3RvdHlwZS5taW5MZW5ndGggPSBmdW5jdGlvbiAobGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2F0aXNmaWVzKGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZS5sZW5ndGggPT09IDAgfHwgdmFsdWUubGVuZ3RoID49IGxlbmd0aDsgfSwgeyBsZW5ndGg6IGxlbmd0aCB9KVxyXG4gICAgICAgICAgICAud2l0aE1lc3NhZ2VLZXkoJ21pbkxlbmd0aCcpO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogQXBwbGllcyB0aGUgXCJtYXhMZW5ndGhcIiBTVFJJTkcgdmFsaWRhdGlvbiBydWxlIHRvIHRoZSBwcm9wZXJ0eS5cclxuICAgICAqIG51bGwsIHVuZGVmaW5lZCBhbmQgZW1wdHktc3RyaW5nIHZhbHVlcyBhcmUgY29uc2lkZXJlZCB2YWxpZC5cclxuICAgICAqL1xyXG4gICAgRmx1ZW50UnVsZXMucHJvdG90eXBlLm1heExlbmd0aCA9IGZ1bmN0aW9uIChsZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zYXRpc2ZpZXMoZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlLmxlbmd0aCA9PT0gMCB8fCB2YWx1ZS5sZW5ndGggPD0gbGVuZ3RoOyB9LCB7IGxlbmd0aDogbGVuZ3RoIH0pXHJcbiAgICAgICAgICAgIC53aXRoTWVzc2FnZUtleSgnbWF4TGVuZ3RoJyk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBsaWVzIHRoZSBcIm1pbkl0ZW1zXCIgQVJSQVkgdmFsaWRhdGlvbiBydWxlIHRvIHRoZSBwcm9wZXJ0eS5cclxuICAgICAqIG51bGwgYW5kIHVuZGVmaW5lZCB2YWx1ZXMgYXJlIGNvbnNpZGVyZWQgdmFsaWQuXHJcbiAgICAgKi9cclxuICAgIEZsdWVudFJ1bGVzLnByb3RvdHlwZS5taW5JdGVtcyA9IGZ1bmN0aW9uIChjb3VudCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNhdGlzZmllcyhmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUubGVuZ3RoID49IGNvdW50OyB9LCB7IGNvdW50OiBjb3VudCB9KVxyXG4gICAgICAgICAgICAud2l0aE1lc3NhZ2VLZXkoJ21pbkl0ZW1zJyk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBsaWVzIHRoZSBcIm1heEl0ZW1zXCIgQVJSQVkgdmFsaWRhdGlvbiBydWxlIHRvIHRoZSBwcm9wZXJ0eS5cclxuICAgICAqIG51bGwgYW5kIHVuZGVmaW5lZCB2YWx1ZXMgYXJlIGNvbnNpZGVyZWQgdmFsaWQuXHJcbiAgICAgKi9cclxuICAgIEZsdWVudFJ1bGVzLnByb3RvdHlwZS5tYXhJdGVtcyA9IGZ1bmN0aW9uIChjb3VudCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNhdGlzZmllcyhmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUubGVuZ3RoIDw9IGNvdW50OyB9LCB7IGNvdW50OiBjb3VudCB9KVxyXG4gICAgICAgICAgICAud2l0aE1lc3NhZ2VLZXkoJ21heEl0ZW1zJyk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBsaWVzIHRoZSBcImVxdWFsc1wiIHZhbGlkYXRpb24gcnVsZSB0byB0aGUgcHJvcGVydHkuXHJcbiAgICAgKiBudWxsIGFuZCB1bmRlZmluZWQgdmFsdWVzIGFyZSBjb25zaWRlcmVkIHZhbGlkLlxyXG4gICAgICovXHJcbiAgICBGbHVlbnRSdWxlcy5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKGV4cGVjdGVkVmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zYXRpc2ZpZXMoZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSAnJyB8fCB2YWx1ZSA9PT0gZXhwZWN0ZWRWYWx1ZTsgfSwgeyBleHBlY3RlZFZhbHVlOiBleHBlY3RlZFZhbHVlIH0pXHJcbiAgICAgICAgICAgIC53aXRoTWVzc2FnZUtleSgnZXF1YWxzJyk7XHJcbiAgICB9O1xyXG4gICAgRmx1ZW50UnVsZXMuY3VzdG9tUnVsZXMgPSB7fTtcclxuICAgIHJldHVybiBGbHVlbnRSdWxlcztcclxufSgpKTtcclxuLyoqXHJcbiAqIFBhcnQgb2YgdGhlIGZsdWVudCBydWxlIEFQSS4gRW5hYmxlcyB0YXJnZXRpbmcgcHJvcGVydGllcyBhbmQgb2JqZWN0cyB3aXRoIHJ1bGVzLlxyXG4gKi9cclxudmFyIEZsdWVudEVuc3VyZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEZsdWVudEVuc3VyZShwYXJzZXJzKSB7XHJcbiAgICAgICAgdGhpcy5wYXJzZXJzID0gcGFyc2VycztcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBSdWxlcyB0aGF0IGhhdmUgYmVlbiBkZWZpbmVkIHVzaW5nIHRoZSBmbHVlbnQgQVBJLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucnVsZXMgPSBbXTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogVGFyZ2V0IGEgcHJvcGVydHkgd2l0aCB2YWxpZGF0aW9uIHJ1bGVzLlxyXG4gICAgICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eSB0byB0YXJnZXQuIENhbiBiZSB0aGUgcHJvcGVydHkgbmFtZSBvciBhIHByb3BlcnR5IGFjY2Vzc29yXHJcbiAgICAgKiBmdW5jdGlvbi5cclxuICAgICAqL1xyXG4gICAgRmx1ZW50RW5zdXJlLnByb3RvdHlwZS5lbnN1cmUgPSBmdW5jdGlvbiAocHJvcGVydHkpIHtcclxuICAgICAgICB0aGlzLmFzc2VydEluaXRpYWxpemVkKCk7XHJcbiAgICAgICAgdmFyIG5hbWUgPSB0aGlzLnBhcnNlcnMucHJvcGVydHkucGFyc2UocHJvcGVydHkpO1xyXG4gICAgICAgIHZhciBmbHVlbnRSdWxlcyA9IG5ldyBGbHVlbnRSdWxlcyh0aGlzLCB0aGlzLnBhcnNlcnMsIHsgbmFtZTogbmFtZSwgZGlzcGxheU5hbWU6IG51bGwgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWVyZ2VSdWxlcyhmbHVlbnRSdWxlcywgbmFtZSk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBUYXJnZXRzIGFuIG9iamVjdCB3aXRoIHZhbGlkYXRpb24gcnVsZXMuXHJcbiAgICAgKi9cclxuICAgIEZsdWVudEVuc3VyZS5wcm90b3R5cGUuZW5zdXJlT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuYXNzZXJ0SW5pdGlhbGl6ZWQoKTtcclxuICAgICAgICB2YXIgZmx1ZW50UnVsZXMgPSBuZXcgRmx1ZW50UnVsZXModGhpcywgdGhpcy5wYXJzZXJzLCB7IG5hbWU6IG51bGwsIGRpc3BsYXlOYW1lOiBudWxsIH0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1lcmdlUnVsZXMoZmx1ZW50UnVsZXMsIG51bGwpO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogQXBwbGllcyB0aGUgcnVsZXMgdG8gYSBjbGFzcyBvciBvYmplY3QsIG1ha2luZyB0aGVtIGRpc2NvdmVyYWJsZSBieSB0aGUgU3RhbmRhcmRWYWxpZGF0b3IuXHJcbiAgICAgKiBAcGFyYW0gdGFyZ2V0IEEgY2xhc3Mgb3Igb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBGbHVlbnRFbnN1cmUucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gKHRhcmdldCkge1xyXG4gICAgICAgIFJ1bGVzLnNldCh0YXJnZXQsIHRoaXMucnVsZXMpO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBhIHJ1bGUgZGVmaW5pdGlvbiB0byB0aGUgc2VxdWVuY2VkIHJ1bGVzZXQuXHJcbiAgICAgKiBAaW50ZXJuYWxcclxuICAgICAqL1xyXG4gICAgRmx1ZW50RW5zdXJlLnByb3RvdHlwZS5fYWRkUnVsZSA9IGZ1bmN0aW9uIChydWxlKSB7XHJcbiAgICAgICAgd2hpbGUgKHRoaXMucnVsZXMubGVuZ3RoIDwgcnVsZS5zZXF1ZW5jZSArIDEpIHtcclxuICAgICAgICAgICAgdGhpcy5ydWxlcy5wdXNoKFtdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5ydWxlc1tydWxlLnNlcXVlbmNlXS5wdXNoKHJ1bGUpO1xyXG4gICAgfTtcclxuICAgIEZsdWVudEVuc3VyZS5wcm90b3R5cGUuYXNzZXJ0SW5pdGlhbGl6ZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucGFyc2Vycykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkRpZCB5b3UgZm9yZ2V0IHRvIGFkZCBcXFwiLnBsdWdpbignYXVyZWxpYS12YWxpZGF0aW9uJylcXFwiIHRvIHlvdXIgbWFpbi5qcz9cIik7XHJcbiAgICB9O1xyXG4gICAgRmx1ZW50RW5zdXJlLnByb3RvdHlwZS5tZXJnZVJ1bGVzID0gZnVuY3Rpb24gKGZsdWVudFJ1bGVzLCBwcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFscyB8IFVzZSBsb29zZSBlcXVhbGl0eSBmb3IgcHJvcGVydHkga2V5c1xyXG4gICAgICAgIHZhciBleGlzdGluZ1J1bGVzID0gdGhpcy5ydWxlcy5maW5kKGZ1bmN0aW9uIChyKSB7IHJldHVybiByLmxlbmd0aCA+IDAgJiYgclswXS5wcm9wZXJ0eS5uYW1lID09IHByb3BlcnR5TmFtZTsgfSk7XHJcbiAgICAgICAgaWYgKGV4aXN0aW5nUnVsZXMpIHtcclxuICAgICAgICAgICAgdmFyIHJ1bGUgPSBleGlzdGluZ1J1bGVzW2V4aXN0aW5nUnVsZXMubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgIGZsdWVudFJ1bGVzLnNlcXVlbmNlID0gcnVsZS5zZXF1ZW5jZTtcclxuICAgICAgICAgICAgaWYgKHJ1bGUucHJvcGVydHkuZGlzcGxheU5hbWUgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGZsdWVudFJ1bGVzID0gZmx1ZW50UnVsZXMuZGlzcGxheU5hbWUocnVsZS5wcm9wZXJ0eS5kaXNwbGF5TmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZsdWVudFJ1bGVzO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBGbHVlbnRFbnN1cmU7XHJcbn0oKSk7XHJcbi8qKlxyXG4gKiBGbHVlbnQgcnVsZSBkZWZpbml0aW9uIEFQSS5cclxuICovXHJcbnZhciBWYWxpZGF0aW9uUnVsZXMgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBWYWxpZGF0aW9uUnVsZXMoKSB7XHJcbiAgICB9XHJcbiAgICBWYWxpZGF0aW9uUnVsZXMuaW5pdGlhbGl6ZSA9IGZ1bmN0aW9uIChtZXNzYWdlUGFyc2VyLCBwcm9wZXJ0eVBhcnNlcikge1xyXG4gICAgICAgIHRoaXMucGFyc2VycyA9IHtcclxuICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZVBhcnNlcixcclxuICAgICAgICAgICAgcHJvcGVydHk6IHByb3BlcnR5UGFyc2VyXHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFRhcmdldCBhIHByb3BlcnR5IHdpdGggdmFsaWRhdGlvbiBydWxlcy5cclxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgdG8gdGFyZ2V0LiBDYW4gYmUgdGhlIHByb3BlcnR5IG5hbWUgb3IgYSBwcm9wZXJ0eSBhY2Nlc3NvciBmdW5jdGlvbi5cclxuICAgICAqL1xyXG4gICAgVmFsaWRhdGlvblJ1bGVzLmVuc3VyZSA9IGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgRmx1ZW50RW5zdXJlKFZhbGlkYXRpb25SdWxlcy5wYXJzZXJzKS5lbnN1cmUocHJvcGVydHkpO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogVGFyZ2V0cyBhbiBvYmplY3Qgd2l0aCB2YWxpZGF0aW9uIHJ1bGVzLlxyXG4gICAgICovXHJcbiAgICBWYWxpZGF0aW9uUnVsZXMuZW5zdXJlT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgRmx1ZW50RW5zdXJlKFZhbGlkYXRpb25SdWxlcy5wYXJzZXJzKS5lbnN1cmVPYmplY3QoKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIERlZmluZXMgYSBjdXN0b20gcnVsZS5cclxuICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBjdXN0b20gcnVsZS4gQWxzbyBzZXJ2ZXMgYXMgdGhlIG1lc3NhZ2Uga2V5LlxyXG4gICAgICogQHBhcmFtIGNvbmRpdGlvbiBUaGUgcnVsZSBmdW5jdGlvbi5cclxuICAgICAqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlIGV4cHJlc3Npb25cclxuICAgICAqIEBwYXJhbSBhcmdzVG9Db25maWcgQSBmdW5jdGlvbiB0aGF0IG1hcHMgdGhlIHJ1bGUncyBhcmd1bWVudHMgdG8gYSBcImNvbmZpZ1wiXHJcbiAgICAgKiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB3aGVuIGV2YWx1YXRpbmcgdGhlIG1lc3NhZ2UgZXhwcmVzc2lvbi5cclxuICAgICAqL1xyXG4gICAgVmFsaWRhdGlvblJ1bGVzLmN1c3RvbVJ1bGUgPSBmdW5jdGlvbiAobmFtZSwgY29uZGl0aW9uLCBtZXNzYWdlLCBhcmdzVG9Db25maWcpIHtcclxuICAgICAgICB2YWxpZGF0aW9uTWVzc2FnZXNbbmFtZV0gPSBtZXNzYWdlO1xyXG4gICAgICAgIEZsdWVudFJ1bGVzLmN1c3RvbVJ1bGVzW25hbWVdID0geyBjb25kaXRpb246IGNvbmRpdGlvbiwgYXJnc1RvQ29uZmlnOiBhcmdzVG9Db25maWcgfTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgcnVsZXMgd2l0aCB0aGUgbWF0Y2hpbmcgdGFnLlxyXG4gICAgICogQHBhcmFtIHJ1bGVzIFRoZSBydWxlcyB0byBzZWFyY2guXHJcbiAgICAgKiBAcGFyYW0gdGFnIFRoZSB0YWcgdG8gc2VhcmNoIGZvci5cclxuICAgICAqL1xyXG4gICAgVmFsaWRhdGlvblJ1bGVzLnRhZ2dlZFJ1bGVzID0gZnVuY3Rpb24gKHJ1bGVzLCB0YWcpIHtcclxuICAgICAgICByZXR1cm4gcnVsZXMubWFwKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gci50YWcgPT09IHRhZzsgfSk7IH0pO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBydWxlcyB0aGF0IGhhdmUgbm8gdGFnLlxyXG4gICAgICogQHBhcmFtIHJ1bGVzIFRoZSBydWxlcyB0byBzZWFyY2guXHJcbiAgICAgKi9cclxuICAgIFZhbGlkYXRpb25SdWxlcy51bnRhZ2dlZFJ1bGVzID0gZnVuY3Rpb24gKHJ1bGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIHJ1bGVzLm1hcChmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIHIudGFnID09PSB1bmRlZmluZWQ7IH0pOyB9KTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgdGhlIHJ1bGVzIGZyb20gYSBjbGFzcyBvciBvYmplY3QuXHJcbiAgICAgKiBAcGFyYW0gdGFyZ2V0IEEgY2xhc3Mgb3Igb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBWYWxpZGF0aW9uUnVsZXMub2ZmID0gZnVuY3Rpb24gKHRhcmdldCkge1xyXG4gICAgICAgIFJ1bGVzLnVuc2V0KHRhcmdldCk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIFZhbGlkYXRpb25SdWxlcztcclxufSgpKTtcblxuLy8gRXhwb3J0c1xyXG4vKipcclxuICogQXVyZWxpYSBWYWxpZGF0aW9uIENvbmZpZ3VyYXRpb24gQVBJXHJcbiAqL1xyXG52YXIgQXVyZWxpYVZhbGlkYXRpb25Db25maWd1cmF0aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gQXVyZWxpYVZhbGlkYXRpb25Db25maWd1cmF0aW9uKCkge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdG9yVHlwZSA9IFN0YW5kYXJkVmFsaWRhdG9yO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBVc2UgYSBjdXN0b20gVmFsaWRhdG9yIGltcGxlbWVudGF0aW9uLlxyXG4gICAgICovXHJcbiAgICBBdXJlbGlhVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24ucHJvdG90eXBlLmN1c3RvbVZhbGlkYXRvciA9IGZ1bmN0aW9uICh0eXBlKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0b3JUeXBlID0gdHlwZTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEFwcGxpZXMgdGhlIGNvbmZpZ3VyYXRpb24uXHJcbiAgICAgKi9cclxuICAgIEF1cmVsaWFWYWxpZGF0aW9uQ29uZmlndXJhdGlvbi5wcm90b3R5cGUuYXBwbHkgPSBmdW5jdGlvbiAoY29udGFpbmVyKSB7XHJcbiAgICAgICAgdmFyIHZhbGlkYXRvciA9IGNvbnRhaW5lci5nZXQodGhpcy52YWxpZGF0b3JUeXBlKTtcclxuICAgICAgICBjb250YWluZXIucmVnaXN0ZXJJbnN0YW5jZShWYWxpZGF0b3IsIHZhbGlkYXRvcik7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIEF1cmVsaWFWYWxpZGF0aW9uQ29uZmlndXJhdGlvbjtcclxufSgpKTtcclxuLyoqXHJcbiAqIENvbmZpZ3VyZXMgdGhlIHBsdWdpbi5cclxuICovXHJcbmZ1bmN0aW9uIGNvbmZpZ3VyZShcclxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmJhbi10eXBlc1xyXG5mcmFtZXdvcmtDb25maWcsIGNhbGxiYWNrKSB7XHJcbiAgICAvLyB0aGUgZmx1ZW50IHJ1bGUgZGVmaW5pdGlvbiBBUEkgbmVlZHMgdGhlIHBhcnNlciB0byB0cmFuc2xhdGUgbWVzc2FnZXNcclxuICAgIC8vIHRvIGludGVycG9sYXRpb24gZXhwcmVzc2lvbnMuXHJcbiAgICB2YXIgbWVzc2FnZVBhcnNlciA9IGZyYW1ld29ya0NvbmZpZy5jb250YWluZXIuZ2V0KFZhbGlkYXRpb25NZXNzYWdlUGFyc2VyKTtcclxuICAgIHZhciBwcm9wZXJ0eVBhcnNlciA9IGZyYW1ld29ya0NvbmZpZy5jb250YWluZXIuZ2V0KFByb3BlcnR5QWNjZXNzb3JQYXJzZXIpO1xyXG4gICAgVmFsaWRhdGlvblJ1bGVzLmluaXRpYWxpemUobWVzc2FnZVBhcnNlciwgcHJvcGVydHlQYXJzZXIpO1xyXG4gICAgLy8gY29uZmlndXJlLi4uXHJcbiAgICB2YXIgY29uZmlnID0gbmV3IEF1cmVsaWFWYWxpZGF0aW9uQ29uZmlndXJhdGlvbigpO1xyXG4gICAgaWYgKGNhbGxiYWNrIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcclxuICAgICAgICBjYWxsYmFjayhjb25maWcpO1xyXG4gICAgfVxyXG4gICAgY29uZmlnLmFwcGx5KGZyYW1ld29ya0NvbmZpZy5jb250YWluZXIpO1xyXG4gICAgLy8gZ2xvYmFsaXplIHRoZSBiZWhhdmlvcnMuXHJcbiAgICBpZiAoZnJhbWV3b3JrQ29uZmlnLmdsb2JhbFJlc291cmNlcykge1xyXG4gICAgICAgIGZyYW1ld29ya0NvbmZpZy5nbG9iYWxSZXNvdXJjZXMoVmFsaWRhdGVCaW5kaW5nQmVoYXZpb3IsIFZhbGlkYXRlTWFudWFsbHlCaW5kaW5nQmVoYXZpb3IsIFZhbGlkYXRlT25CbHVyQmluZGluZ0JlaGF2aW9yLCBWYWxpZGF0ZU9uQ2hhbmdlQmluZGluZ0JlaGF2aW9yLCBWYWxpZGF0ZU9uQ2hhbmdlT3JCbHVyQmluZGluZ0JlaGF2aW9yLCBWYWxpZGF0aW9uRXJyb3JzQ3VzdG9tQXR0cmlidXRlLCBWYWxpZGF0aW9uUmVuZGVyZXJDdXN0b21BdHRyaWJ1dGUpO1xyXG4gICAgfVxyXG59XG5cbmV4cG9ydCB7IEF1cmVsaWFWYWxpZGF0aW9uQ29uZmlndXJhdGlvbiwgY29uZmlndXJlLCBnZXRUYXJnZXRET01FbGVtZW50LCBnZXRQcm9wZXJ0eUluZm8sIFByb3BlcnR5QWNjZXNzb3JQYXJzZXIsIGdldEFjY2Vzc29yRXhwcmVzc2lvbiwgVmFsaWRhdGVCaW5kaW5nQmVoYXZpb3IsIFZhbGlkYXRlTWFudWFsbHlCaW5kaW5nQmVoYXZpb3IsIFZhbGlkYXRlT25CbHVyQmluZGluZ0JlaGF2aW9yLCBWYWxpZGF0ZU9uQ2hhbmdlQmluZGluZ0JlaGF2aW9yLCBWYWxpZGF0ZU9uQ2hhbmdlT3JCbHVyQmluZGluZ0JlaGF2aW9yLCBWYWxpZGF0ZUV2ZW50LCBWYWxpZGF0ZVJlc3VsdCwgdmFsaWRhdGVUcmlnZ2VyLCBWYWxpZGF0aW9uQ29udHJvbGxlciwgVmFsaWRhdGlvbkNvbnRyb2xsZXJGYWN0b3J5LCBWYWxpZGF0aW9uRXJyb3JzQ3VzdG9tQXR0cmlidXRlLCBWYWxpZGF0aW9uUmVuZGVyZXJDdXN0b21BdHRyaWJ1dGUsIFZhbGlkYXRvciwgUnVsZXMsIFN0YW5kYXJkVmFsaWRhdG9yLCB2YWxpZGF0aW9uTWVzc2FnZXMsIFZhbGlkYXRpb25NZXNzYWdlUHJvdmlkZXIsIFZhbGlkYXRpb25NZXNzYWdlUGFyc2VyLCBNZXNzYWdlRXhwcmVzc2lvblZhbGlkYXRvciwgRmx1ZW50UnVsZUN1c3RvbWl6ZXIsIEZsdWVudFJ1bGVzLCBGbHVlbnRFbnN1cmUsIFZhbGlkYXRpb25SdWxlcyB9O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///aurelia-validation\n')},"components/avis-car-rental/avis-car-rental":function(module,exports,__webpack_require__){"use strict";eval("\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__(\"aurelia-framework\");\r\nvar moment = __webpack_require__(2);\r\nvar CarRentalRewardRepository_1 = __webpack_require__(191);\r\nvar AvisCarRental = /** @class */ (function () {\r\n    function AvisCarRental(carRentalRewardRepository) {\r\n        this.carRentalRewardRepository = carRentalRewardRepository;\r\n        this.avisIataNumber = '0129651N';\r\n        this.avisWizardNumber = '';\r\n        this.emailAddress = '';\r\n        this.firstName = '';\r\n        this.lastName = '';\r\n    }\r\n    AvisCarRental.prototype.activate = function (model) {\r\n        this.model = model;\r\n        var today = moment.now();\r\n        this.pickupDate = moment(today).format('MMddyyyy');\r\n        this.dropoffDate = moment(today).add(1, 'days').format('MMddyyyy');\r\n    };\r\n    AvisCarRental.prototype.attached = function () {\r\n        var _this = this;\r\n        var avisWizardNumberFetched = this.carRentalRewardRepository\r\n            .fetchAvisWizardNumber()\r\n            .then(function (response) {\r\n            if (response) {\r\n                _this.avisWizardNumber = response.rewardNumber;\r\n                _this.firstName = _this.convertToValidName(response.firstName);\r\n                _this.lastName = _this.convertToValidName(response.lastName);\r\n                _this.emailAddress = response.emailAddress;\r\n            }\r\n            _this.setDefaultValues();\r\n            _this.injectAvisScripts();\r\n        });\r\n        var avisFormIsOnPage = this.waitForFormOnPage().then(function () {\r\n            _this.modifyFormLabels();\r\n        });\r\n        Promise.all([\r\n            avisWizardNumberFetched,\r\n            avisFormIsOnPage\r\n        ]).then(function (values) {\r\n            _this.$avisWizardNumber.val(_this.avisWizardNumber);\r\n        });\r\n    };\r\n    AvisCarRental.prototype.injectAvisScripts = function () {\r\n        // avis script can be found her: https://qabook1.carrental.com/dcweb/dw_/builds/1.0/docs/\r\n        var avisScriptId = 'dcwdw-sdk';\r\n        if (document.getElementById(avisScriptId)) {\r\n            return;\r\n        }\r\n        var script = document.createElement('script');\r\n        script.id = avisScriptId;\r\n        script.src = \"https://book1.carrental.com/dcweb/dw_/dcwdw_.min.js#version=1.0&appId=inspsl&e=P\";\r\n        this.avisElement.parentNode.insertBefore(script, this.avisElement);\r\n    };\r\n    AvisCarRental.prototype.setDefaultValues = function () {\r\n        window['dcwdw_data'] = {\r\n            awdNumber: 'D338600',\r\n            cci: this.emailAddress,\r\n            countryResidence: 'US',\r\n            dropoffDate: this.dropoffDate,\r\n            dropoffTime: '0900',\r\n            emailAddress: this.emailAddress,\r\n            firstName: this.firstName,\r\n            lastName: this.lastName,\r\n            pickupDate: this.pickupDate,\r\n            pickupTime: '0900'\r\n        };\r\n    };\r\n    AvisCarRental.prototype.checkIfFormHasBeenIntialized = function () {\r\n        this.$submitButton = window['jQuery']('#dcwdw-cont').find('button');\r\n        return this.$submitButton.length > 0;\r\n    };\r\n    AvisCarRental.prototype.waitForFormOnPage = function () {\r\n        var _this = this;\r\n        return new Promise(function (resolve, reject) {\r\n            _this.formIsInitedInterval = setInterval(function () {\r\n                var isFormInitialized = _this.checkIfFormHasBeenIntialized();\r\n                if (isFormInitialized) {\r\n                    window.clearInterval(_this.formIsInitedInterval);\r\n                    resolve();\r\n                }\r\n            }, 70);\r\n        });\r\n    };\r\n    AvisCarRental.prototype.modifyFormLabels = function () {\r\n        // update any form field values or labels here\r\n        this.$submitButton.html(\"<span>\" + this.model.callToAction.linkTitle + \"<\/span>\");\r\n        this.$avisWizardNumber = window['jQuery']('#dcwdw-cont').find('.dcwdw_field_wizardNumber input');\r\n        this.$avisWizardNumber.prop('placeholder', 'Your Avis President\\'s Club Wizard Number...');\r\n    };\r\n    AvisCarRental.prototype.convertToValidName = function (name) {\r\n        if (!name) {\r\n            return '';\r\n        }\r\n        var sanitizedName = name.replace(/[$#@%^*]/gi, '');\r\n        return encodeURIComponent(sanitizedName);\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata(\"design:type\", Object)\r\n    ], AvisCarRental.prototype, \"model\", void 0);\r\n    AvisCarRental = __decorate([\r\n        aurelia_framework_1.autoinject(),\r\n        __metadata(\"design:paramtypes\", [CarRentalRewardRepository_1.CarRentalRewardRepository])\r\n    ], AvisCarRental);\r\n    return AvisCarRental;\r\n}());\r\nexports.AvisCarRental = AvisCarRental;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9hdmlzLWNhci1yZW50YWwvYXZpcy1jYXItcmVudGFsLnRzPzg2ZjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsUUFBUTtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLGNBQWM7QUFDNUQsMEJBQTBCLG1CQUFPLENBQUMsbUJBQW1CO0FBQ3JELGFBQWEsbUJBQU8sQ0FBQyxDQUFRO0FBQzdCLGtDQUFrQyxtQkFBTyxDQUFDLEdBQTZCO0FBQ3ZFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QiLCJmaWxlIjoiY29tcG9uZW50cy9hdmlzLWNhci1yZW50YWwvYXZpcy1jYXItcmVudGFsLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2RlY29yYXRlID0gKHRoaXMgJiYgdGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn07XHJcbnZhciBfX21ldGFkYXRhID0gKHRoaXMgJiYgdGhpcy5fX21ldGFkYXRhKSB8fCBmdW5jdGlvbiAoaywgdikge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xyXG59O1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBhdXJlbGlhX2ZyYW1ld29ya18xID0gcmVxdWlyZShcImF1cmVsaWEtZnJhbWV3b3JrXCIpO1xyXG52YXIgbW9tZW50ID0gcmVxdWlyZShcIm1vbWVudFwiKTtcclxudmFyIENhclJlbnRhbFJld2FyZFJlcG9zaXRvcnlfMSA9IHJlcXVpcmUoXCIuL0NhclJlbnRhbFJld2FyZFJlcG9zaXRvcnlcIik7XHJcbnZhciBBdmlzQ2FyUmVudGFsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gQXZpc0NhclJlbnRhbChjYXJSZW50YWxSZXdhcmRSZXBvc2l0b3J5KSB7XHJcbiAgICAgICAgdGhpcy5jYXJSZW50YWxSZXdhcmRSZXBvc2l0b3J5ID0gY2FyUmVudGFsUmV3YXJkUmVwb3NpdG9yeTtcclxuICAgICAgICB0aGlzLmF2aXNJYXRhTnVtYmVyID0gJzAxMjk2NTFOJztcclxuICAgICAgICB0aGlzLmF2aXNXaXphcmROdW1iZXIgPSAnJztcclxuICAgICAgICB0aGlzLmVtYWlsQWRkcmVzcyA9ICcnO1xyXG4gICAgICAgIHRoaXMuZmlyc3ROYW1lID0gJyc7XHJcbiAgICAgICAgdGhpcy5sYXN0TmFtZSA9ICcnO1xyXG4gICAgfVxyXG4gICAgQXZpc0NhclJlbnRhbC5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbiAobW9kZWwpIHtcclxuICAgICAgICB0aGlzLm1vZGVsID0gbW9kZWw7XHJcbiAgICAgICAgdmFyIHRvZGF5ID0gbW9tZW50Lm5vdygpO1xyXG4gICAgICAgIHRoaXMucGlja3VwRGF0ZSA9IG1vbWVudCh0b2RheSkuZm9ybWF0KCdNTWRkeXl5eScpO1xyXG4gICAgICAgIHRoaXMuZHJvcG9mZkRhdGUgPSBtb21lbnQodG9kYXkpLmFkZCgxLCAnZGF5cycpLmZvcm1hdCgnTU1kZHl5eXknKTtcclxuICAgIH07XHJcbiAgICBBdmlzQ2FyUmVudGFsLnByb3RvdHlwZS5hdHRhY2hlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHZhciBhdmlzV2l6YXJkTnVtYmVyRmV0Y2hlZCA9IHRoaXMuY2FyUmVudGFsUmV3YXJkUmVwb3NpdG9yeVxyXG4gICAgICAgICAgICAuZmV0Y2hBdmlzV2l6YXJkTnVtYmVyKClcclxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuYXZpc1dpemFyZE51bWJlciA9IHJlc3BvbnNlLnJld2FyZE51bWJlcjtcclxuICAgICAgICAgICAgICAgIF90aGlzLmZpcnN0TmFtZSA9IF90aGlzLmNvbnZlcnRUb1ZhbGlkTmFtZShyZXNwb25zZS5maXJzdE5hbWUpO1xyXG4gICAgICAgICAgICAgICAgX3RoaXMubGFzdE5hbWUgPSBfdGhpcy5jb252ZXJ0VG9WYWxpZE5hbWUocmVzcG9uc2UubGFzdE5hbWUpO1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuZW1haWxBZGRyZXNzID0gcmVzcG9uc2UuZW1haWxBZGRyZXNzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF90aGlzLnNldERlZmF1bHRWYWx1ZXMoKTtcclxuICAgICAgICAgICAgX3RoaXMuaW5qZWN0QXZpc1NjcmlwdHMoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB2YXIgYXZpc0Zvcm1Jc09uUGFnZSA9IHRoaXMud2FpdEZvckZvcm1PblBhZ2UoKS50aGVuKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgX3RoaXMubW9kaWZ5Rm9ybUxhYmVscygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIFByb21pc2UuYWxsKFtcclxuICAgICAgICAgICAgYXZpc1dpemFyZE51bWJlckZldGNoZWQsXHJcbiAgICAgICAgICAgIGF2aXNGb3JtSXNPblBhZ2VcclxuICAgICAgICBdKS50aGVuKGZ1bmN0aW9uICh2YWx1ZXMpIHtcclxuICAgICAgICAgICAgX3RoaXMuJGF2aXNXaXphcmROdW1iZXIudmFsKF90aGlzLmF2aXNXaXphcmROdW1iZXIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIEF2aXNDYXJSZW50YWwucHJvdG90eXBlLmluamVjdEF2aXNTY3JpcHRzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vIGF2aXMgc2NyaXB0IGNhbiBiZSBmb3VuZCBoZXI6IGh0dHBzOi8vcWFib29rMS5jYXJyZW50YWwuY29tL2Rjd2ViL2R3Xy9idWlsZHMvMS4wL2RvY3MvXHJcbiAgICAgICAgdmFyIGF2aXNTY3JpcHRJZCA9ICdkY3dkdy1zZGsnO1xyXG4gICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhdmlzU2NyaXB0SWQpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xyXG4gICAgICAgIHNjcmlwdC5pZCA9IGF2aXNTY3JpcHRJZDtcclxuICAgICAgICBzY3JpcHQuc3JjID0gXCJodHRwczovL2Jvb2sxLmNhcnJlbnRhbC5jb20vZGN3ZWIvZHdfL2Rjd2R3Xy5taW4uanMjdmVyc2lvbj0xLjAmYXBwSWQ9aW5zcHNsJmU9UFwiO1xyXG4gICAgICAgIHRoaXMuYXZpc0VsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoc2NyaXB0LCB0aGlzLmF2aXNFbGVtZW50KTtcclxuICAgIH07XHJcbiAgICBBdmlzQ2FyUmVudGFsLnByb3RvdHlwZS5zZXREZWZhdWx0VmFsdWVzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHdpbmRvd1snZGN3ZHdfZGF0YSddID0ge1xyXG4gICAgICAgICAgICBhd2ROdW1iZXI6ICdEMzM4NjAwJyxcclxuICAgICAgICAgICAgY2NpOiB0aGlzLmVtYWlsQWRkcmVzcyxcclxuICAgICAgICAgICAgY291bnRyeVJlc2lkZW5jZTogJ1VTJyxcclxuICAgICAgICAgICAgZHJvcG9mZkRhdGU6IHRoaXMuZHJvcG9mZkRhdGUsXHJcbiAgICAgICAgICAgIGRyb3BvZmZUaW1lOiAnMDkwMCcsXHJcbiAgICAgICAgICAgIGVtYWlsQWRkcmVzczogdGhpcy5lbWFpbEFkZHJlc3MsXHJcbiAgICAgICAgICAgIGZpcnN0TmFtZTogdGhpcy5maXJzdE5hbWUsXHJcbiAgICAgICAgICAgIGxhc3ROYW1lOiB0aGlzLmxhc3ROYW1lLFxyXG4gICAgICAgICAgICBwaWNrdXBEYXRlOiB0aGlzLnBpY2t1cERhdGUsXHJcbiAgICAgICAgICAgIHBpY2t1cFRpbWU6ICcwOTAwJ1xyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG4gICAgQXZpc0NhclJlbnRhbC5wcm90b3R5cGUuY2hlY2tJZkZvcm1IYXNCZWVuSW50aWFsaXplZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLiRzdWJtaXRCdXR0b24gPSB3aW5kb3dbJ2pRdWVyeSddKCcjZGN3ZHctY29udCcpLmZpbmQoJ2J1dHRvbicpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRzdWJtaXRCdXR0b24ubGVuZ3RoID4gMDtcclxuICAgIH07XHJcbiAgICBBdmlzQ2FyUmVudGFsLnByb3RvdHlwZS53YWl0Rm9yRm9ybU9uUGFnZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgICAgIF90aGlzLmZvcm1Jc0luaXRlZEludGVydmFsID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGlzRm9ybUluaXRpYWxpemVkID0gX3RoaXMuY2hlY2tJZkZvcm1IYXNCZWVuSW50aWFsaXplZCgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzRm9ybUluaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwoX3RoaXMuZm9ybUlzSW5pdGVkSW50ZXJ2YWwpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgNzApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIEF2aXNDYXJSZW50YWwucHJvdG90eXBlLm1vZGlmeUZvcm1MYWJlbHMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy8gdXBkYXRlIGFueSBmb3JtIGZpZWxkIHZhbHVlcyBvciBsYWJlbHMgaGVyZVxyXG4gICAgICAgIHRoaXMuJHN1Ym1pdEJ1dHRvbi5odG1sKFwiPHNwYW4+XCIgKyB0aGlzLm1vZGVsLmNhbGxUb0FjdGlvbi5saW5rVGl0bGUgKyBcIjwvc3Bhbj5cIik7XHJcbiAgICAgICAgdGhpcy4kYXZpc1dpemFyZE51bWJlciA9IHdpbmRvd1snalF1ZXJ5J10oJyNkY3dkdy1jb250JykuZmluZCgnLmRjd2R3X2ZpZWxkX3dpemFyZE51bWJlciBpbnB1dCcpO1xyXG4gICAgICAgIHRoaXMuJGF2aXNXaXphcmROdW1iZXIucHJvcCgncGxhY2Vob2xkZXInLCAnWW91ciBBdmlzIFByZXNpZGVudFxcJ3MgQ2x1YiBXaXphcmQgTnVtYmVyLi4uJyk7XHJcbiAgICB9O1xyXG4gICAgQXZpc0NhclJlbnRhbC5wcm90b3R5cGUuY29udmVydFRvVmFsaWROYW1lID0gZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgc2FuaXRpemVkTmFtZSA9IG5hbWUucmVwbGFjZSgvWyQjQCVeKl0vZ2ksICcnKTtcclxuICAgICAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHNhbml0aXplZE5hbWUpO1xyXG4gICAgfTtcclxuICAgIF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuYmluZGFibGUsXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcclxuICAgIF0sIEF2aXNDYXJSZW50YWwucHJvdG90eXBlLCBcIm1vZGVsXCIsIHZvaWQgMCk7XHJcbiAgICBBdmlzQ2FyUmVudGFsID0gX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5hdXRvaW5qZWN0KCksXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtDYXJSZW50YWxSZXdhcmRSZXBvc2l0b3J5XzEuQ2FyUmVudGFsUmV3YXJkUmVwb3NpdG9yeV0pXHJcbiAgICBdLCBBdmlzQ2FyUmVudGFsKTtcclxuICAgIHJldHVybiBBdmlzQ2FyUmVudGFsO1xyXG59KCkpO1xyXG5leHBvcnRzLkF2aXNDYXJSZW50YWwgPSBBdmlzQ2FyUmVudGFsO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///components/avis-car-rental/avis-car-rental\n")},"components/avis-car-rental/avis-car-rental.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<div ref=\\"avisElement\\" class=\\"avis-car-rental\\">\\r\\n\\t\\t<h3 class=\\"avis-car-rental__headline ds-title-medium\\">${model.headline}<\/h3>\\r\\n\\t\\t<div id=\\"dcwdw-cont\\"><\/div>\\r\\n\\t<\/div>\\r\\n<\/template>";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9hdmlzLWNhci1yZW50YWwvYXZpcy1jYXItcmVudGFsLmh0bWw/MTNiZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1SkFBdUosZUFBZSIsImZpbGUiOiJjb21wb25lbnRzL2F2aXMtY2FyLXJlbnRhbC9hdmlzLWNhci1yZW50YWwuaHRtbC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gXCI8dGVtcGxhdGU+XFxyXFxuXFx0PGRpdiByZWY9XFxcImF2aXNFbGVtZW50XFxcIiBjbGFzcz1cXFwiYXZpcy1jYXItcmVudGFsXFxcIj5cXHJcXG5cXHRcXHQ8aDMgY2xhc3M9XFxcImF2aXMtY2FyLXJlbnRhbF9faGVhZGxpbmUgZHMtdGl0bGUtbWVkaXVtXFxcIj4ke21vZGVsLmhlYWRsaW5lfTwvaDM+XFxyXFxuXFx0XFx0PGRpdiBpZD1cXFwiZGN3ZHctY29udFxcXCI+PC9kaXY+XFxyXFxuXFx0PC9kaXY+XFxyXFxuPC90ZW1wbGF0ZT5cIjsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///components/avis-car-rental/avis-car-rental.html\n')},"components/campaign-registration-form/campaign-registration-form":function(module,exports,__webpack_require__){"use strict";eval("\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__(\"aurelia-framework\");\r\nvar aurelia_i18n_1 = __webpack_require__(\"aurelia-i18n\");\r\nvar aurelia_validation_1 = __webpack_require__(\"aurelia-validation\");\r\nvar lodash_1 = __webpack_require__(20);\r\nvar queryString = __webpack_require__(27);\r\nvar GoogleTagManager_1 = __webpack_require__(186);\r\nvar Countries_1 = __webpack_require__(185);\r\nvar RegistrationRepository_1 = __webpack_require__(184);\r\nvar locales = {\r\n    CanadianEnglish: 'en-CA',\r\n    English: 'en',\r\n    Spanish: 'es'\r\n};\r\nvar campaignVistorType = 5;\r\nexports.ResponsivePageViewModel = window['PageViewModel'];\r\nvar CampaignRegistrationForm = /** @class */ (function () {\r\n    function CampaignRegistrationForm(validationControllerFactory, i18n, registrationRepository) {\r\n        this.validationControllerFactory = validationControllerFactory;\r\n        this.i18n = i18n;\r\n        this.registrationRepository = registrationRepository;\r\n        this.countryID = Countries_1.UnitedStates;\r\n        this.email = '';\r\n        this.firstName = '';\r\n        this.leadSourceOriginal = '';\r\n        this.lastName = '';\r\n        this.pardotFormUrl = '';\r\n        this.password = '';\r\n        this.hidePassword = false;\r\n        this.phone = '';\r\n        this.postalCode = '';\r\n        this.salesforceId = '';\r\n        this.telephone = '';\r\n        this.targetUrl = '';\r\n        this.visitorType = campaignVistorType;\r\n        this.isInternalRegistration = false;\r\n        this.googleCaptchaToken = '';\r\n        this.enableReCaptcha = false;\r\n        this.reCaptchaV3SiteKey = '';\r\n        this.oktaDomain = '';\r\n        this.countries = Countries_1.Countries;\r\n        this.selectedCountry = this.countries.find(function (c) { return c.value === Countries_1.UnitedStates; });\r\n        this.isSubmitting = false;\r\n        this.serverErrors = [];\r\n        this.validationController = validationControllerFactory.createForCurrentScope();\r\n    }\r\n    CampaignRegistrationForm.prototype.activate = function (model) {\r\n        this.model = model;\r\n        if (this.model.salesforceId) {\r\n            this.setCampaignId();\r\n            GoogleTagManager_1.sendPageview();\r\n        }\r\n    };\r\n    CampaignRegistrationForm.prototype.attached = function () {\r\n        var _this = this;\r\n        this.i18n\r\n            .setLocale(locales[this.model.language])\r\n            .then(function () { return _this.setupValidationRules(); })\r\n            .then(function () {\r\n            // when spanish, set default country to Mexico\r\n            if (_this.model.language === 'Spanish') {\r\n                _this.countryID = Countries_1.Mexico;\r\n                _this.selectedCountry = _this.countries.find(function (c) { return c.value === Countries_1.Mexico; });\r\n            }\r\n        });\r\n        this.enableReCaptcha = window['PageViewModel'].configuration.enableReCaptcha;\r\n        this.reCaptchaV3SiteKey = window['PageViewModel'].configuration.reCaptchaV3SiteKey;\r\n        this.oktaDomain = window['PageViewModel'].configuration.oktaDomain;\r\n    };\r\n    CampaignRegistrationForm.prototype.createAnchor = function () {\r\n        return this.model.headline ? lodash_1.kebabCase(this.model.headline) : '';\r\n    };\r\n    CampaignRegistrationForm.prototype.detached = function () {\r\n        this.validationController.removeObject(this);\r\n    };\r\n    CampaignRegistrationForm.prototype.formData = function () {\r\n        return {\r\n            countryID: this.countryID,\r\n            email: this.email,\r\n            firstName: this.firstName,\r\n            googleCaptchaToken: this.googleCaptchaToken,\r\n            hidePassword: this.model.hidePassword,\r\n            isInternalRegistration: this.model.isInternalRegistration,\r\n            lastName: this.lastName,\r\n            leadSourceOriginal: this.model.originalLeadSource,\r\n            pardotFormUrl: this.model.pardotFormHandlerTracking,\r\n            password: this.password,\r\n            phone: this.phone,\r\n            postalCode: this.postalCode,\r\n            salesforceId: this.salesforceId,\r\n            targetUrl: this.model.hidePassword ? '/Public/RegisterUserWithOutPassword/' : '/Public/RegisterUser/',\r\n            visitorType: this.visitorType,\r\n        };\r\n    };\r\n    CampaignRegistrationForm.prototype.resetValidations = function () {\r\n        this.validationController.reset();\r\n    };\r\n    CampaignRegistrationForm.prototype.selectCountry = function () {\r\n        var _this = this;\r\n        this.countryID = this.selectedCountry.value;\r\n        var locale = (this.countryID === Countries_1.Canada && this.model.language === 'English')\r\n            ? locales.CanadianEnglish\r\n            : locales[this.model.language];\r\n        this.i18n\r\n            .setLocale(locale)\r\n            .then(function () { return _this.setupValidationRules(); });\r\n    };\r\n    CampaignRegistrationForm.prototype.setCampaignId = function () {\r\n        this.salesforceId = this.model.salesforceId;\r\n        var qs = queryString.parse(location.search);\r\n        qs.cmpid = this.salesforceId;\r\n        var urlPath = queryString.stringify(qs);\r\n        window.history.replaceState(null, '', \"?\" + urlPath);\r\n    };\r\n    CampaignRegistrationForm.prototype.setupValidationRules = function () {\r\n        this.validationController.validateTrigger = aurelia_validation_1.validateTrigger.blur;\r\n        var rules = aurelia_validation_1.ValidationRules\r\n            .ensure(function (r) { return r.firstName; })\r\n            .displayName(this.i18n.tr('firstName'))\r\n            .required().withMessage(this.i18n.tr('errorMessages.required'))\r\n            .minLength(2).withMessage(this.i18n.tr('errorMessages.minLength'))\r\n            .ensure(function (r) { return r.lastName; })\r\n            .displayName(this.i18n.tr('lastName'))\r\n            .required().withMessage(this.i18n.tr('errorMessages.required'))\r\n            .minLength(2).withMessage(this.i18n.tr('errorMessages.minLength'))\r\n            .ensure(function (r) { return r.email; })\r\n            .displayName(this.i18n.tr('email'))\r\n            .required().withMessage(this.i18n.tr('errorMessages.requiredEmail'))\r\n            .matches(/^([a-zA-Z0-9_\\.\\-])+\\@(([a-zA-Z0-9\\-])+\\.)+([a-zA-Z0-9]{2,4})+$/).withMessage(this.i18n.tr('errorMessages.email'))\r\n            .ensure(function (r) { return r.password; })\r\n            .displayName(this.i18n.tr('password'))\r\n            .required().when(function (r) { return r.hidePassword; }).withMessage(this.i18n.tr('errorMessages.requiredPassword'))\r\n            .matches(/^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[^:\\'\\\"]{8,}$/).withMessage(this.i18n.tr('errorMessages.password'))\r\n            .ensure(function (r) { return r.phone; })\r\n            .displayName(this.i18n.tr('phone'))\r\n            .required().withMessage(this.i18n.tr('errorMessages.required'))\r\n            .matches(/^[0-9- ]{10,}/).withMessage(this.i18n.tr('errorMessages.phone'))\r\n            .ensure(function (r) { return r.postalCode; })\r\n            .displayName(this.i18n.tr('zip'))\r\n            .required().when(function (r) { return r.countryID === Countries_1.Canada || r.countryID === Countries_1.UnitedStates; }).withMessage(this.i18n.tr('errorMessages.requiredZip'))\r\n            .matches(/(^\\d{5}$)|(^\\d{5}-\\d{4}$)/).when(function (r) { return r.countryID === Countries_1.UnitedStates; }).withMessage(this.i18n.tr('errorMessages.validZip'))\r\n            .matches(/^[A-Za-z]\\d[A-Za-z][ -]?\\d[A-Za-z]\\d$/).when(function (r) { return r.countryID === Countries_1.Canada; }).withMessage(this.i18n.tr('errorMessages.validZip'))\r\n            .rules;\r\n        this.validationController.addObject(this, rules);\r\n    };\r\n    Object.defineProperty(CampaignRegistrationForm.prototype, \"showServerErrors\", {\r\n        get: function () {\r\n            return this.serverErrors.length > 0;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(CampaignRegistrationForm.prototype, \"showZip\", {\r\n        get: function () {\r\n            return this.countryID === Countries_1.UnitedStates || this.countryID === Countries_1.Canada;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    CampaignRegistrationForm.prototype.signup = function () {\r\n        if (this.isSubmitting) {\r\n            return;\r\n        }\r\n        this.validateAndSubmit();\r\n    };\r\n    CampaignRegistrationForm.prototype.validateAndSubmit = function () {\r\n        var _this = this;\r\n        this.serverErrors = [];\r\n        this.validationController.validate().then(function (validation) {\r\n            if (validation.valid) {\r\n                _this.isSubmitting = true;\r\n                try {\r\n                    if (_this.enableReCaptcha) {\r\n                        window['grecaptcha'].ready(function () {\r\n                            window['grecaptcha'].execute(_this.reCaptchaV3SiteKey).then(function (token) {\r\n                                // console.info(token);\r\n                                _this.googleCaptchaToken = token;\r\n                                _this.sendRegistration();\r\n                            });\r\n                        });\r\n                    }\r\n                    else {\r\n                        _this.sendRegistration();\r\n                    }\r\n                }\r\n                catch (e) {\r\n                    // console.info(e);\r\n                }\r\n            }\r\n        });\r\n        return;\r\n    };\r\n    CampaignRegistrationForm.prototype.sendRegistration = function () {\r\n        this.registrationRepository.submit(this.formData())\r\n            .then(this.handleRegistration())\r\n            .catch(function (errors) {\r\n            // console.info(errors);\r\n        });\r\n    };\r\n    CampaignRegistrationForm.prototype.handleRegistration = function () {\r\n        var _this = this;\r\n        return function (response) {\r\n            _this.isSubmitting = false;\r\n            if (response.Success) {\r\n                window.location.href = _this.model.submissionCallToAction.url;\r\n            }\r\n            else {\r\n                Object.keys(response.Errors).forEach(function (key) {\r\n                    _this.serverErrors.push(response.Errors[key]);\r\n                });\r\n            }\r\n        };\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata(\"design:type\", Object)\r\n    ], CampaignRegistrationForm.prototype, \"model\", void 0);\r\n    __decorate([\r\n        aurelia_framework_1.computedFrom('serverErrors.length'),\r\n        __metadata(\"design:type\", Object),\r\n        __metadata(\"design:paramtypes\", [])\r\n    ], CampaignRegistrationForm.prototype, \"showServerErrors\", null);\r\n    __decorate([\r\n        aurelia_framework_1.computedFrom('countryID'),\r\n        __metadata(\"design:type\", Boolean),\r\n        __metadata(\"design:paramtypes\", [])\r\n    ], CampaignRegistrationForm.prototype, \"showZip\", null);\r\n    CampaignRegistrationForm = __decorate([\r\n        aurelia_framework_1.autoinject(),\r\n        __metadata(\"design:paramtypes\", [aurelia_validation_1.ValidationControllerFactory,\r\n            aurelia_i18n_1.I18N,\r\n            RegistrationRepository_1.RegistrationRepository])\r\n    ], CampaignRegistrationForm);\r\n    return CampaignRegistrationForm;\r\n}());\r\nexports.CampaignRegistrationForm = CampaignRegistrationForm;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9jYW1wYWlnbi1yZWdpc3RyYXRpb24tZm9ybS9jYW1wYWlnbi1yZWdpc3RyYXRpb24tZm9ybS50cz9hMjg4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLFFBQVE7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxjQUFjO0FBQzVELDBCQUEwQixtQkFBTyxDQUFDLG1CQUFtQjtBQUNyRCxxQkFBcUIsbUJBQU8sQ0FBQyxjQUFjO0FBQzNDLDJCQUEyQixtQkFBTyxDQUFDLG9CQUFvQjtBQUN2RCxlQUFlLG1CQUFPLENBQUMsRUFBUTtBQUMvQixrQkFBa0IsbUJBQU8sQ0FBQyxFQUFjO0FBQ3hDLHlCQUF5QixtQkFBTyxDQUFDLEdBQWtDO0FBQ25FLGtCQUFrQixtQkFBTyxDQUFDLEdBQWE7QUFDdkMsK0JBQStCLG1CQUFPLENBQUMsR0FBMEI7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlFQUFpRSw2Q0FBNkMsRUFBRTtBQUNoSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IscUNBQXFDLEVBQUU7QUFDdEU7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRUFBMkUsdUNBQXVDLEVBQUU7QUFDcEg7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IscUNBQXFDLEVBQUU7QUFDdEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxvQkFBb0IsRUFBRTtBQUN4RDtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsbUJBQW1CLEVBQUU7QUFDdkQ7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLGdCQUFnQixFQUFFO0FBQ3BEO0FBQ0E7QUFDQSw4RUFBOEUsSUFBSTtBQUNsRixrQ0FBa0MsbUJBQW1CLEVBQUU7QUFDdkQ7QUFDQSwyQ0FBMkMsdUJBQXVCLEVBQUU7QUFDcEUsaUVBQWlFLEdBQUc7QUFDcEUsa0NBQWtDLGdCQUFnQixFQUFFO0FBQ3BEO0FBQ0E7QUFDQSwrQkFBK0IsSUFBSTtBQUNuQyxrQ0FBa0MscUJBQXFCLEVBQUU7QUFDekQ7QUFDQSwyQ0FBMkMsdUZBQXVGLEVBQUU7QUFDcEksMkJBQTJCLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSx3QkFBd0IsaURBQWlELEVBQUU7QUFDeEgsaUZBQWlGLDJDQUEyQyxFQUFFO0FBQzlIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QiLCJmaWxlIjoiY29tcG9uZW50cy9jYW1wYWlnbi1yZWdpc3RyYXRpb24tZm9ybS9jYW1wYWlnbi1yZWdpc3RyYXRpb24tZm9ybS5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG52YXIgX19kZWNvcmF0ZSA9ICh0aGlzICYmIHRoaXMuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59O1xyXG52YXIgX19tZXRhZGF0YSA9ICh0aGlzICYmIHRoaXMuX19tZXRhZGF0YSkgfHwgZnVuY3Rpb24gKGssIHYpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShrLCB2KTtcclxufTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgYXVyZWxpYV9mcmFtZXdvcmtfMSA9IHJlcXVpcmUoXCJhdXJlbGlhLWZyYW1ld29ya1wiKTtcclxudmFyIGF1cmVsaWFfaTE4bl8xID0gcmVxdWlyZShcImF1cmVsaWEtaTE4blwiKTtcclxudmFyIGF1cmVsaWFfdmFsaWRhdGlvbl8xID0gcmVxdWlyZShcImF1cmVsaWEtdmFsaWRhdGlvblwiKTtcclxudmFyIGxvZGFzaF8xID0gcmVxdWlyZShcImxvZGFzaFwiKTtcclxudmFyIHF1ZXJ5U3RyaW5nID0gcmVxdWlyZShcInF1ZXJ5LXN0cmluZ1wiKTtcclxudmFyIEdvb2dsZVRhZ01hbmFnZXJfMSA9IHJlcXVpcmUoXCIuLi8uLi91dGlsaXRpZXMvR29vZ2xlVGFnTWFuYWdlclwiKTtcclxudmFyIENvdW50cmllc18xID0gcmVxdWlyZShcIi4vQ291bnRyaWVzXCIpO1xyXG52YXIgUmVnaXN0cmF0aW9uUmVwb3NpdG9yeV8xID0gcmVxdWlyZShcIi4vUmVnaXN0cmF0aW9uUmVwb3NpdG9yeVwiKTtcclxudmFyIGxvY2FsZXMgPSB7XHJcbiAgICBDYW5hZGlhbkVuZ2xpc2g6ICdlbi1DQScsXHJcbiAgICBFbmdsaXNoOiAnZW4nLFxyXG4gICAgU3BhbmlzaDogJ2VzJ1xyXG59O1xyXG52YXIgY2FtcGFpZ25WaXN0b3JUeXBlID0gNTtcclxuZXhwb3J0cy5SZXNwb25zaXZlUGFnZVZpZXdNb2RlbCA9IHdpbmRvd1snUGFnZVZpZXdNb2RlbCddO1xyXG52YXIgQ2FtcGFpZ25SZWdpc3RyYXRpb25Gb3JtID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gQ2FtcGFpZ25SZWdpc3RyYXRpb25Gb3JtKHZhbGlkYXRpb25Db250cm9sbGVyRmFjdG9yeSwgaTE4biwgcmVnaXN0cmF0aW9uUmVwb3NpdG9yeSkge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvbkNvbnRyb2xsZXJGYWN0b3J5ID0gdmFsaWRhdGlvbkNvbnRyb2xsZXJGYWN0b3J5O1xyXG4gICAgICAgIHRoaXMuaTE4biA9IGkxOG47XHJcbiAgICAgICAgdGhpcy5yZWdpc3RyYXRpb25SZXBvc2l0b3J5ID0gcmVnaXN0cmF0aW9uUmVwb3NpdG9yeTtcclxuICAgICAgICB0aGlzLmNvdW50cnlJRCA9IENvdW50cmllc18xLlVuaXRlZFN0YXRlcztcclxuICAgICAgICB0aGlzLmVtYWlsID0gJyc7XHJcbiAgICAgICAgdGhpcy5maXJzdE5hbWUgPSAnJztcclxuICAgICAgICB0aGlzLmxlYWRTb3VyY2VPcmlnaW5hbCA9ICcnO1xyXG4gICAgICAgIHRoaXMubGFzdE5hbWUgPSAnJztcclxuICAgICAgICB0aGlzLnBhcmRvdEZvcm1VcmwgPSAnJztcclxuICAgICAgICB0aGlzLnBhc3N3b3JkID0gJyc7XHJcbiAgICAgICAgdGhpcy5oaWRlUGFzc3dvcmQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnBob25lID0gJyc7XHJcbiAgICAgICAgdGhpcy5wb3N0YWxDb2RlID0gJyc7XHJcbiAgICAgICAgdGhpcy5zYWxlc2ZvcmNlSWQgPSAnJztcclxuICAgICAgICB0aGlzLnRlbGVwaG9uZSA9ICcnO1xyXG4gICAgICAgIHRoaXMudGFyZ2V0VXJsID0gJyc7XHJcbiAgICAgICAgdGhpcy52aXNpdG9yVHlwZSA9IGNhbXBhaWduVmlzdG9yVHlwZTtcclxuICAgICAgICB0aGlzLmlzSW50ZXJuYWxSZWdpc3RyYXRpb24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmdvb2dsZUNhcHRjaGFUb2tlbiA9ICcnO1xyXG4gICAgICAgIHRoaXMuZW5hYmxlUmVDYXB0Y2hhID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZUNhcHRjaGFWM1NpdGVLZXkgPSAnJztcclxuICAgICAgICB0aGlzLm9rdGFEb21haW4gPSAnJztcclxuICAgICAgICB0aGlzLmNvdW50cmllcyA9IENvdW50cmllc18xLkNvdW50cmllcztcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQ291bnRyeSA9IHRoaXMuY291bnRyaWVzLmZpbmQoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGMudmFsdWUgPT09IENvdW50cmllc18xLlVuaXRlZFN0YXRlczsgfSk7XHJcbiAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlcnZlckVycm9ycyA9IFtdO1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvbkNvbnRyb2xsZXIgPSB2YWxpZGF0aW9uQ29udHJvbGxlckZhY3RvcnkuY3JlYXRlRm9yQ3VycmVudFNjb3BlKCk7XHJcbiAgICB9XHJcbiAgICBDYW1wYWlnblJlZ2lzdHJhdGlvbkZvcm0ucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24gKG1vZGVsKSB7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG1vZGVsO1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLnNhbGVzZm9yY2VJZCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldENhbXBhaWduSWQoKTtcclxuICAgICAgICAgICAgR29vZ2xlVGFnTWFuYWdlcl8xLnNlbmRQYWdldmlldygpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBDYW1wYWlnblJlZ2lzdHJhdGlvbkZvcm0ucHJvdG90eXBlLmF0dGFjaGVkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5pMThuXHJcbiAgICAgICAgICAgIC5zZXRMb2NhbGUobG9jYWxlc1t0aGlzLm1vZGVsLmxhbmd1YWdlXSlcclxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMuc2V0dXBWYWxpZGF0aW9uUnVsZXMoKTsgfSlcclxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAvLyB3aGVuIHNwYW5pc2gsIHNldCBkZWZhdWx0IGNvdW50cnkgdG8gTWV4aWNvXHJcbiAgICAgICAgICAgIGlmIChfdGhpcy5tb2RlbC5sYW5ndWFnZSA9PT0gJ1NwYW5pc2gnKSB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5jb3VudHJ5SUQgPSBDb3VudHJpZXNfMS5NZXhpY287XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5zZWxlY3RlZENvdW50cnkgPSBfdGhpcy5jb3VudHJpZXMuZmluZChmdW5jdGlvbiAoYykgeyByZXR1cm4gYy52YWx1ZSA9PT0gQ291bnRyaWVzXzEuTWV4aWNvOyB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuZW5hYmxlUmVDYXB0Y2hhID0gd2luZG93WydQYWdlVmlld01vZGVsJ10uY29uZmlndXJhdGlvbi5lbmFibGVSZUNhcHRjaGE7XHJcbiAgICAgICAgdGhpcy5yZUNhcHRjaGFWM1NpdGVLZXkgPSB3aW5kb3dbJ1BhZ2VWaWV3TW9kZWwnXS5jb25maWd1cmF0aW9uLnJlQ2FwdGNoYVYzU2l0ZUtleTtcclxuICAgICAgICB0aGlzLm9rdGFEb21haW4gPSB3aW5kb3dbJ1BhZ2VWaWV3TW9kZWwnXS5jb25maWd1cmF0aW9uLm9rdGFEb21haW47XHJcbiAgICB9O1xyXG4gICAgQ2FtcGFpZ25SZWdpc3RyYXRpb25Gb3JtLnByb3RvdHlwZS5jcmVhdGVBbmNob3IgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwuaGVhZGxpbmUgPyBsb2Rhc2hfMS5rZWJhYkNhc2UodGhpcy5tb2RlbC5oZWFkbGluZSkgOiAnJztcclxuICAgIH07XHJcbiAgICBDYW1wYWlnblJlZ2lzdHJhdGlvbkZvcm0ucHJvdG90eXBlLmRldGFjaGVkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvbkNvbnRyb2xsZXIucmVtb3ZlT2JqZWN0KHRoaXMpO1xyXG4gICAgfTtcclxuICAgIENhbXBhaWduUmVnaXN0cmF0aW9uRm9ybS5wcm90b3R5cGUuZm9ybURhdGEgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgY291bnRyeUlEOiB0aGlzLmNvdW50cnlJRCxcclxuICAgICAgICAgICAgZW1haWw6IHRoaXMuZW1haWwsXHJcbiAgICAgICAgICAgIGZpcnN0TmFtZTogdGhpcy5maXJzdE5hbWUsXHJcbiAgICAgICAgICAgIGdvb2dsZUNhcHRjaGFUb2tlbjogdGhpcy5nb29nbGVDYXB0Y2hhVG9rZW4sXHJcbiAgICAgICAgICAgIGhpZGVQYXNzd29yZDogdGhpcy5tb2RlbC5oaWRlUGFzc3dvcmQsXHJcbiAgICAgICAgICAgIGlzSW50ZXJuYWxSZWdpc3RyYXRpb246IHRoaXMubW9kZWwuaXNJbnRlcm5hbFJlZ2lzdHJhdGlvbixcclxuICAgICAgICAgICAgbGFzdE5hbWU6IHRoaXMubGFzdE5hbWUsXHJcbiAgICAgICAgICAgIGxlYWRTb3VyY2VPcmlnaW5hbDogdGhpcy5tb2RlbC5vcmlnaW5hbExlYWRTb3VyY2UsXHJcbiAgICAgICAgICAgIHBhcmRvdEZvcm1Vcmw6IHRoaXMubW9kZWwucGFyZG90Rm9ybUhhbmRsZXJUcmFja2luZyxcclxuICAgICAgICAgICAgcGFzc3dvcmQ6IHRoaXMucGFzc3dvcmQsXHJcbiAgICAgICAgICAgIHBob25lOiB0aGlzLnBob25lLFxyXG4gICAgICAgICAgICBwb3N0YWxDb2RlOiB0aGlzLnBvc3RhbENvZGUsXHJcbiAgICAgICAgICAgIHNhbGVzZm9yY2VJZDogdGhpcy5zYWxlc2ZvcmNlSWQsXHJcbiAgICAgICAgICAgIHRhcmdldFVybDogdGhpcy5tb2RlbC5oaWRlUGFzc3dvcmQgPyAnL1B1YmxpYy9SZWdpc3RlclVzZXJXaXRoT3V0UGFzc3dvcmQvJyA6ICcvUHVibGljL1JlZ2lzdGVyVXNlci8nLFxyXG4gICAgICAgICAgICB2aXNpdG9yVHlwZTogdGhpcy52aXNpdG9yVHlwZSxcclxuICAgICAgICB9O1xyXG4gICAgfTtcclxuICAgIENhbXBhaWduUmVnaXN0cmF0aW9uRm9ybS5wcm90b3R5cGUucmVzZXRWYWxpZGF0aW9ucyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25Db250cm9sbGVyLnJlc2V0KCk7XHJcbiAgICB9O1xyXG4gICAgQ2FtcGFpZ25SZWdpc3RyYXRpb25Gb3JtLnByb3RvdHlwZS5zZWxlY3RDb3VudHJ5ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5jb3VudHJ5SUQgPSB0aGlzLnNlbGVjdGVkQ291bnRyeS52YWx1ZTtcclxuICAgICAgICB2YXIgbG9jYWxlID0gKHRoaXMuY291bnRyeUlEID09PSBDb3VudHJpZXNfMS5DYW5hZGEgJiYgdGhpcy5tb2RlbC5sYW5ndWFnZSA9PT0gJ0VuZ2xpc2gnKVxyXG4gICAgICAgICAgICA/IGxvY2FsZXMuQ2FuYWRpYW5FbmdsaXNoXHJcbiAgICAgICAgICAgIDogbG9jYWxlc1t0aGlzLm1vZGVsLmxhbmd1YWdlXTtcclxuICAgICAgICB0aGlzLmkxOG5cclxuICAgICAgICAgICAgLnNldExvY2FsZShsb2NhbGUpXHJcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLnNldHVwVmFsaWRhdGlvblJ1bGVzKCk7IH0pO1xyXG4gICAgfTtcclxuICAgIENhbXBhaWduUmVnaXN0cmF0aW9uRm9ybS5wcm90b3R5cGUuc2V0Q2FtcGFpZ25JZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLnNhbGVzZm9yY2VJZCA9IHRoaXMubW9kZWwuc2FsZXNmb3JjZUlkO1xyXG4gICAgICAgIHZhciBxcyA9IHF1ZXJ5U3RyaW5nLnBhcnNlKGxvY2F0aW9uLnNlYXJjaCk7XHJcbiAgICAgICAgcXMuY21waWQgPSB0aGlzLnNhbGVzZm9yY2VJZDtcclxuICAgICAgICB2YXIgdXJsUGF0aCA9IHF1ZXJ5U3RyaW5nLnN0cmluZ2lmeShxcyk7XHJcbiAgICAgICAgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsICcnLCBcIj9cIiArIHVybFBhdGgpO1xyXG4gICAgfTtcclxuICAgIENhbXBhaWduUmVnaXN0cmF0aW9uRm9ybS5wcm90b3R5cGUuc2V0dXBWYWxpZGF0aW9uUnVsZXMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uQ29udHJvbGxlci52YWxpZGF0ZVRyaWdnZXIgPSBhdXJlbGlhX3ZhbGlkYXRpb25fMS52YWxpZGF0ZVRyaWdnZXIuYmx1cjtcclxuICAgICAgICB2YXIgcnVsZXMgPSBhdXJlbGlhX3ZhbGlkYXRpb25fMS5WYWxpZGF0aW9uUnVsZXNcclxuICAgICAgICAgICAgLmVuc3VyZShmdW5jdGlvbiAocikgeyByZXR1cm4gci5maXJzdE5hbWU7IH0pXHJcbiAgICAgICAgICAgIC5kaXNwbGF5TmFtZSh0aGlzLmkxOG4udHIoJ2ZpcnN0TmFtZScpKVxyXG4gICAgICAgICAgICAucmVxdWlyZWQoKS53aXRoTWVzc2FnZSh0aGlzLmkxOG4udHIoJ2Vycm9yTWVzc2FnZXMucmVxdWlyZWQnKSlcclxuICAgICAgICAgICAgLm1pbkxlbmd0aCgyKS53aXRoTWVzc2FnZSh0aGlzLmkxOG4udHIoJ2Vycm9yTWVzc2FnZXMubWluTGVuZ3RoJykpXHJcbiAgICAgICAgICAgIC5lbnN1cmUoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIHIubGFzdE5hbWU7IH0pXHJcbiAgICAgICAgICAgIC5kaXNwbGF5TmFtZSh0aGlzLmkxOG4udHIoJ2xhc3ROYW1lJykpXHJcbiAgICAgICAgICAgIC5yZXF1aXJlZCgpLndpdGhNZXNzYWdlKHRoaXMuaTE4bi50cignZXJyb3JNZXNzYWdlcy5yZXF1aXJlZCcpKVxyXG4gICAgICAgICAgICAubWluTGVuZ3RoKDIpLndpdGhNZXNzYWdlKHRoaXMuaTE4bi50cignZXJyb3JNZXNzYWdlcy5taW5MZW5ndGgnKSlcclxuICAgICAgICAgICAgLmVuc3VyZShmdW5jdGlvbiAocikgeyByZXR1cm4gci5lbWFpbDsgfSlcclxuICAgICAgICAgICAgLmRpc3BsYXlOYW1lKHRoaXMuaTE4bi50cignZW1haWwnKSlcclxuICAgICAgICAgICAgLnJlcXVpcmVkKCkud2l0aE1lc3NhZ2UodGhpcy5pMThuLnRyKCdlcnJvck1lc3NhZ2VzLnJlcXVpcmVkRW1haWwnKSlcclxuICAgICAgICAgICAgLm1hdGNoZXMoL14oW2EtekEtWjAtOV9cXC5cXC1dKStcXEAoKFthLXpBLVowLTlcXC1dKStcXC4pKyhbYS16QS1aMC05XXsyLDR9KSskLykud2l0aE1lc3NhZ2UodGhpcy5pMThuLnRyKCdlcnJvck1lc3NhZ2VzLmVtYWlsJykpXHJcbiAgICAgICAgICAgIC5lbnN1cmUoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIHIucGFzc3dvcmQ7IH0pXHJcbiAgICAgICAgICAgIC5kaXNwbGF5TmFtZSh0aGlzLmkxOG4udHIoJ3Bhc3N3b3JkJykpXHJcbiAgICAgICAgICAgIC5yZXF1aXJlZCgpLndoZW4oZnVuY3Rpb24gKHIpIHsgcmV0dXJuIHIuaGlkZVBhc3N3b3JkOyB9KS53aXRoTWVzc2FnZSh0aGlzLmkxOG4udHIoJ2Vycm9yTWVzc2FnZXMucmVxdWlyZWRQYXNzd29yZCcpKVxyXG4gICAgICAgICAgICAubWF0Y2hlcygvXig/PS4qW2Etel0pKD89LipbQS1aXSkoPz0uKlswLTldKVteOlxcJ1xcXCJdezgsfSQvKS53aXRoTWVzc2FnZSh0aGlzLmkxOG4udHIoJ2Vycm9yTWVzc2FnZXMucGFzc3dvcmQnKSlcclxuICAgICAgICAgICAgLmVuc3VyZShmdW5jdGlvbiAocikgeyByZXR1cm4gci5waG9uZTsgfSlcclxuICAgICAgICAgICAgLmRpc3BsYXlOYW1lKHRoaXMuaTE4bi50cigncGhvbmUnKSlcclxuICAgICAgICAgICAgLnJlcXVpcmVkKCkud2l0aE1lc3NhZ2UodGhpcy5pMThuLnRyKCdlcnJvck1lc3NhZ2VzLnJlcXVpcmVkJykpXHJcbiAgICAgICAgICAgIC5tYXRjaGVzKC9eWzAtOS0gXXsxMCx9Lykud2l0aE1lc3NhZ2UodGhpcy5pMThuLnRyKCdlcnJvck1lc3NhZ2VzLnBob25lJykpXHJcbiAgICAgICAgICAgIC5lbnN1cmUoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIHIucG9zdGFsQ29kZTsgfSlcclxuICAgICAgICAgICAgLmRpc3BsYXlOYW1lKHRoaXMuaTE4bi50cignemlwJykpXHJcbiAgICAgICAgICAgIC5yZXF1aXJlZCgpLndoZW4oZnVuY3Rpb24gKHIpIHsgcmV0dXJuIHIuY291bnRyeUlEID09PSBDb3VudHJpZXNfMS5DYW5hZGEgfHwgci5jb3VudHJ5SUQgPT09IENvdW50cmllc18xLlVuaXRlZFN0YXRlczsgfSkud2l0aE1lc3NhZ2UodGhpcy5pMThuLnRyKCdlcnJvck1lc3NhZ2VzLnJlcXVpcmVkWmlwJykpXHJcbiAgICAgICAgICAgIC5tYXRjaGVzKC8oXlxcZHs1fSQpfCheXFxkezV9LVxcZHs0fSQpLykud2hlbihmdW5jdGlvbiAocikgeyByZXR1cm4gci5jb3VudHJ5SUQgPT09IENvdW50cmllc18xLlVuaXRlZFN0YXRlczsgfSkud2l0aE1lc3NhZ2UodGhpcy5pMThuLnRyKCdlcnJvck1lc3NhZ2VzLnZhbGlkWmlwJykpXHJcbiAgICAgICAgICAgIC5tYXRjaGVzKC9eW0EtWmEtel1cXGRbQS1aYS16XVsgLV0/XFxkW0EtWmEtel1cXGQkLykud2hlbihmdW5jdGlvbiAocikgeyByZXR1cm4gci5jb3VudHJ5SUQgPT09IENvdW50cmllc18xLkNhbmFkYTsgfSkud2l0aE1lc3NhZ2UodGhpcy5pMThuLnRyKCdlcnJvck1lc3NhZ2VzLnZhbGlkWmlwJykpXHJcbiAgICAgICAgICAgIC5ydWxlcztcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25Db250cm9sbGVyLmFkZE9iamVjdCh0aGlzLCBydWxlcyk7XHJcbiAgICB9O1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENhbXBhaWduUmVnaXN0cmF0aW9uRm9ybS5wcm90b3R5cGUsIFwic2hvd1NlcnZlckVycm9yc1wiLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlcnZlckVycm9ycy5sZW5ndGggPiAwO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgIH0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENhbXBhaWduUmVnaXN0cmF0aW9uRm9ybS5wcm90b3R5cGUsIFwic2hvd1ppcFwiLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvdW50cnlJRCA9PT0gQ291bnRyaWVzXzEuVW5pdGVkU3RhdGVzIHx8IHRoaXMuY291bnRyeUlEID09PSBDb3VudHJpZXNfMS5DYW5hZGE7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICBDYW1wYWlnblJlZ2lzdHJhdGlvbkZvcm0ucHJvdG90eXBlLnNpZ251cCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5pc1N1Ym1pdHRpbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnZhbGlkYXRlQW5kU3VibWl0KCk7XHJcbiAgICB9O1xyXG4gICAgQ2FtcGFpZ25SZWdpc3RyYXRpb25Gb3JtLnByb3RvdHlwZS52YWxpZGF0ZUFuZFN1Ym1pdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuc2VydmVyRXJyb3JzID0gW107XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uQ29udHJvbGxlci52YWxpZGF0ZSgpLnRoZW4oZnVuY3Rpb24gKHZhbGlkYXRpb24pIHtcclxuICAgICAgICAgICAgaWYgKHZhbGlkYXRpb24udmFsaWQpIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLmlzU3VibWl0dGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5lbmFibGVSZUNhcHRjaGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93WydncmVjYXB0Y2hhJ10ucmVhZHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93WydncmVjYXB0Y2hhJ10uZXhlY3V0ZShfdGhpcy5yZUNhcHRjaGFWM1NpdGVLZXkpLnRoZW4oZnVuY3Rpb24gKHRva2VuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5pbmZvKHRva2VuKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5nb29nbGVDYXB0Y2hhVG9rZW4gPSB0b2tlbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5zZW5kUmVnaXN0cmF0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5zZW5kUmVnaXN0cmF0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmluZm8oZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9O1xyXG4gICAgQ2FtcGFpZ25SZWdpc3RyYXRpb25Gb3JtLnByb3RvdHlwZS5zZW5kUmVnaXN0cmF0aW9uID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMucmVnaXN0cmF0aW9uUmVwb3NpdG9yeS5zdWJtaXQodGhpcy5mb3JtRGF0YSgpKVxyXG4gICAgICAgICAgICAudGhlbih0aGlzLmhhbmRsZVJlZ2lzdHJhdGlvbigpKVxyXG4gICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycm9ycykge1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmluZm8oZXJyb3JzKTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICBDYW1wYWlnblJlZ2lzdHJhdGlvbkZvcm0ucHJvdG90eXBlLmhhbmRsZVJlZ2lzdHJhdGlvbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgX3RoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5TdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IF90aGlzLm1vZGVsLnN1Ym1pc3Npb25DYWxsVG9BY3Rpb24udXJsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMocmVzcG9uc2UuRXJyb3JzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5zZXJ2ZXJFcnJvcnMucHVzaChyZXNwb25zZS5FcnJvcnNba2V5XSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG4gICAgX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5iaW5kYWJsZSxcclxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxyXG4gICAgXSwgQ2FtcGFpZ25SZWdpc3RyYXRpb25Gb3JtLnByb3RvdHlwZSwgXCJtb2RlbFwiLCB2b2lkIDApO1xyXG4gICAgX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5jb21wdXRlZEZyb20oJ3NlcnZlckVycm9ycy5sZW5ndGgnKSxcclxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KSxcclxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW10pXHJcbiAgICBdLCBDYW1wYWlnblJlZ2lzdHJhdGlvbkZvcm0ucHJvdG90eXBlLCBcInNob3dTZXJ2ZXJFcnJvcnNcIiwgbnVsbCk7XHJcbiAgICBfX2RlY29yYXRlKFtcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLmNvbXB1dGVkRnJvbSgnY291bnRyeUlEJyksXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEJvb2xlYW4pLFxyXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbXSlcclxuICAgIF0sIENhbXBhaWduUmVnaXN0cmF0aW9uRm9ybS5wcm90b3R5cGUsIFwic2hvd1ppcFwiLCBudWxsKTtcclxuICAgIENhbXBhaWduUmVnaXN0cmF0aW9uRm9ybSA9IF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuYXV0b2luamVjdCgpLFxyXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbYXVyZWxpYV92YWxpZGF0aW9uXzEuVmFsaWRhdGlvbkNvbnRyb2xsZXJGYWN0b3J5LFxyXG4gICAgICAgICAgICBhdXJlbGlhX2kxOG5fMS5JMThOLFxyXG4gICAgICAgICAgICBSZWdpc3RyYXRpb25SZXBvc2l0b3J5XzEuUmVnaXN0cmF0aW9uUmVwb3NpdG9yeV0pXHJcbiAgICBdLCBDYW1wYWlnblJlZ2lzdHJhdGlvbkZvcm0pO1xyXG4gICAgcmV0dXJuIENhbXBhaWduUmVnaXN0cmF0aW9uRm9ybTtcclxufSgpKTtcclxuZXhwb3J0cy5DYW1wYWlnblJlZ2lzdHJhdGlvbkZvcm0gPSBDYW1wYWlnblJlZ2lzdHJhdGlvbkZvcm07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///components/campaign-registration-form/campaign-registration-form\n")},"components/campaign-registration-form/campaign-registration-form.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<form role=\\"form\\" submit.delegate=\\"signup()\\" class=\\"campaign-registration-form\\" validate.bind=\\"validation\\" ref=\\"campaignRegistrationFormElement\\">\\r\\n\\t\\t<div class=\\"ds-form__container\\">\\r\\n\\t\\t\\t<div class=\\"row center-xs\\">\\r\\n\\t\\t\\t\\t<h3 class=\\"ds-form__headline ds-title-medium\\" >${model.headline}<\/h3>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<div class=\\"row\\">\\r\\n\\t\\t\\t\\t<div class=\\"col-xs-12 col-sm ds-form__field--half-space\\" validation-errors.bind=\\"firstNameErrors\\">\\r\\n\\t\\t\\t\\t\\t<input\\r\\n\\t\\t\\t\\t\\t\\tclass=\\"ds-field ${firstNameErrors.length ? \'ds-field--has-error\' : \'\'}\\"\\r\\n\\t\\t\\t\\t\\t\\tname=\\"first_name\\"\\r\\n\\t\\t\\t\\t\\t\\tid=\\"first_name\\"\\r\\n\\t\\t\\t\\t\\t\\tt=\\"[placeholder]firstName\\"\\r\\n\\t\\t\\t\\t\\t\\ttype=\\"text\\"\\r\\n\\t\\t\\t\\t\\t\\tvalue.bind=\\"firstName & validate\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\"ds-field-message\\" repeat.for=\\"errorInfo of firstNameErrors\\" innerhtml.bind=\\"errorInfo.error.message\\"><\/div>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t<div class=\\"col-xs-12 col-sm ds-form__field--half-space\\" validation-errors.bind=\\"lastNameErrors\\">\\r\\n\\t\\t\\t\\t\\t<input\\r\\n\\t\\t\\t\\t\\t\\tclass=\\"ds-field ${lastNameErrors.length ? \'ds-field--has-error\' : \'\'}\\"\\r\\n\\t\\t\\t\\t\\t\\tid=\\"last_name\\"\\r\\n\\t\\t\\t\\t\\t\\tname=\\"last_name\\"\\r\\n\\t\\t\\t\\t\\t\\tt=\\"[placeholder]lastName\\"\\r\\n\\t\\t\\t\\t\\t\\ttype=\\"text\\"\\r\\n\\t\\t\\t\\t\\t\\tvalue.bind=\\"lastName & validate\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\"ds-field-message\\" repeat.for=\\"errorInfo of lastNameErrors\\" innerhtml.bind=\\"errorInfo.error.message\\"><\/div>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<div class=\\"row\\">\\r\\n\\t\\t\\t\\t<div class=\\"col-xs-12\\" validation-errors.bind=\\"emailErrors\\">\\r\\n\\t\\t\\t\\t\\t<input\\r\\n\\t\\t\\t\\t\\t\\tclass=\\"ds-field ${emailErrors.length ? \'ds-field--has-error\' : \'\'}\\"\\r\\n\\t\\t\\t\\t\\t\\tid=\\"email\\"\\r\\n\\t\\t\\t\\t\\t\\tname=\\"email\\"\\r\\n\\t\\t\\t\\t\\t\\tt=\\"[placeholder]email\\"\\r\\n\\t\\t\\t\\t\\t\\ttype=\\"text\\"\\r\\n\\t\\t\\t\\t\\t\\tvalue.bind=\\"email & validate\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\"ds-field-message\\" repeat.for=\\"errorInfo of emailErrors\\" innerhtml.bind=\\"errorInfo.error.message\\"><\/div>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t<div class=\\"col-xs-12\\" validation-errors.bind=\\"passwordErrors\\" if.bind=\\"!model.hidePassword\\">\\r\\n\\t\\t\\t\\t\\t<input\\r\\n\\t\\t\\t\\t\\t\\tclass=\\"ds-field ${passwordErrors.length ? \'ds-field--has-error\' : \'\'}\\"\\r\\n\\t\\t\\t\\t\\t\\tid=\\"password\\"\\r\\n\\t\\t\\t\\t\\t\\tname=\\"password\\"\\r\\n\\t\\t\\t\\t\\t\\tt=\\"[placeholder]password\\"\\r\\n\\t\\t\\t\\t\\t\\ttype=\\"password\\"\\r\\n\\t\\t\\t\\t\\t\\tvalue.bind=\\"password & validate\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\"ds-field-message\\" repeat.for=\\"errorInfo of passwordErrors\\" innerhtml.bind=\\"errorInfo.error.message\\"><\/div>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t<div class=\\"col-xs-12 campaign-registration-form__countries\\">\\r\\n\\t\\t\\t\\t\\t<select-menu\\r\\n\\t\\t\\t\\t\\t\\titems.bind=\\"countries\\"\\r\\n\\t\\t\\t\\t\\t\\tselected-item.two-way=\\"selectedCountry\\"\\r\\n\\t\\t\\t\\t\\t\\ton-change.call=\\"selectCountry()\\">\\r\\n\\t\\t\\t\\t\\t<\/select-menu>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<div class=\\"row\\">\\r\\n\\t\\t\\t\\t<div if.bind=\\"showZip\\" class=\\"col-xs-12 col-sm ds-form__field--half-space\\" validation-errors.bind=\\"postalCodeErrors\\">\\r\\n\\t\\t\\t\\t\\t<input\\r\\n\\t\\t\\t\\t\\t\\tclass=\\"ds-field ${postalCodeErrors.length ? \'ds-field--has-error\' : \'\'}\\"\\r\\n\\t\\t\\t\\t\\t\\tid=\\"postal_code\\"\\r\\n\\t\\t\\t\\t\\t\\tname=\\"postal_code\\"\\r\\n\\t\\t\\t\\t\\t\\tt=\\"[placeholder]zip\\"\\r\\n\\t\\t\\t\\t\\t\\ttype=\\"text\\"\\r\\n\\t\\t\\t\\t\\t\\tvalue.bind=\\"postalCode & validate\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\"ds-field-message\\" repeat.for=\\"errorInfo of postalCodeErrors\\" innerhtml.bind=\\"errorInfo.error.message\\"><\/div>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t<div class=\\"col-xs-12 col-sm 4 ${showZip ? \'ds-form__field--half-space\' : \'\'}\\" validation-errors.bind=\\"phoneErrors\\">\\r\\n\\t\\t\\t\\t\\t<input\\r\\n\\t\\t\\t\\t\\t\\tclass=\\"ds-field ${phoneErrors.length ? \'ds-field--has-error\' : \'\'}\\"\\r\\n\\t\\t\\t\\t\\t\\tt=\\"[placeholder]phone\\"\\r\\n\\t\\t\\t\\t\\t\\ttype=\\"tel\\"\\r\\n\\t\\t\\t\\t\\t\\tvalue.bind=\\"phone & validate\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\"ds-field-message\\" repeat.for=\\"errorInfo of phoneErrors\\" innerhtml.bind=\\"errorInfo.error.message\\"><\/div>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<div class=\\"row\\" if.bind=\\"showServerErrors\\">\\r\\n\\t\\t\\t\\t<div class=\\"col-xs-12\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\"ds-field-message ds-field-message--has-error\\" repeat.for=\\"error of serverErrors\\">${error}<\/div>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<div class=\\"row\\">\\r\\n\\t\\t\\t\\t<div class=\\"col-xs-12\\">\\r\\n\\t\\t\\t\\t\\t<button class=\\"ds-form__cta ds-btn-primary ${isSubmitting ? \'ds-form__cta--is-loading\' : \'\' }\\" type=\\"submit\\"\\r\\n\\t\\t\\t\\t\\t\\tdisabled.bind=\\"isSubmitting\\">\\r\\n\\t\\t\\t\\t\\t\\t${model.submissionCallToAction.linkTitle}\\r\\n\\t\\t\\t\\t\\t<\/button>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<div class=\\"ds-form__sign-in-text center-xs\\"><span t=\\"[html]signInText\\"><\/span> <a href=\'${oktaDomain}\' class=\'ds-link-primary\' t=\\"[html]signInUrlText\\"><\/a>.<\/div>\\r\\n\\t\\t\\t<div if.bind=\\"model.privacyPolicy.length\\" class=\\"ds-form__legalese center-xs\\" innerhtml.bind=\\"model.privacyPolicy\\"><\/div>\\r\\n\\t\\t\\t<div class=\\"ds-form__legalese ds-form__recaptcha center-xs\\">\\r\\n\\t\\t\\t\\tThis site is protected by&nbsp;reCAPTCHA<br />and the&nbsp;Google <a href=\\"https://policies.google.com/privacy\\" target=\\"_blank\\">Privacy&nbsp;Policy<\/a> and <a href=\\"https://policies.google.com/terms\\" target=\\"_blank\\">Terms&nbsp;of&nbsp;Service<\/a>&nbsp;apply.\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t<\/div>\\r\\n\\t<\/form>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9jYW1wYWlnbi1yZWdpc3RyYXRpb24tZm9ybS9jYW1wYWlnbi1yZWdpc3RyYXRpb24tZm9ybS5odG1sP2NlZGUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNlVBQTZVLGVBQWUsMk5BQTJOLG9EQUFvRCx3Z0JBQXdnQixtREFBbUQsMmdCQUEyZ0IsZ0RBQWdELGdmQUFnZixtREFBbUQsKzJCQUErMkIscURBQXFELDRZQUE0WSw0Q0FBNEMsaUdBQWlHLGdEQUFnRCwrZUFBK2UsTUFBTSxzS0FBc0ssZ0RBQWdELG1GQUFtRix1Q0FBdUMsa0tBQWtLLFdBQVcsMlRBQTJULDRCQUE0QixzRkFBc0YsMEZBQTBGLFFBQVEsaUJBQWlCIiwiZmlsZSI6ImNvbXBvbmVudHMvY2FtcGFpZ24tcmVnaXN0cmF0aW9uLWZvcm0vY2FtcGFpZ24tcmVnaXN0cmF0aW9uLWZvcm0uaHRtbC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gXCI8dGVtcGxhdGU+XFxyXFxuXFx0PGZvcm0gcm9sZT1cXFwiZm9ybVxcXCIgc3VibWl0LmRlbGVnYXRlPVxcXCJzaWdudXAoKVxcXCIgY2xhc3M9XFxcImNhbXBhaWduLXJlZ2lzdHJhdGlvbi1mb3JtXFxcIiB2YWxpZGF0ZS5iaW5kPVxcXCJ2YWxpZGF0aW9uXFxcIiByZWY9XFxcImNhbXBhaWduUmVnaXN0cmF0aW9uRm9ybUVsZW1lbnRcXFwiPlxcclxcblxcdFxcdDxkaXYgY2xhc3M9XFxcImRzLWZvcm1fX2NvbnRhaW5lclxcXCI+XFxyXFxuXFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwicm93IGNlbnRlci14c1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0PGgzIGNsYXNzPVxcXCJkcy1mb3JtX19oZWFkbGluZSBkcy10aXRsZS1tZWRpdW1cXFwiID4ke21vZGVsLmhlYWRsaW5lfTwvaDM+XFxyXFxuXFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXHJcXG5cXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgY29sLXNtIGRzLWZvcm1fX2ZpZWxkLS1oYWxmLXNwYWNlXFxcIiB2YWxpZGF0aW9uLWVycm9ycy5iaW5kPVxcXCJmaXJzdE5hbWVFcnJvcnNcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdDxpbnB1dFxcclxcblxcdFxcdFxcdFxcdFxcdFxcdGNsYXNzPVxcXCJkcy1maWVsZCAke2ZpcnN0TmFtZUVycm9ycy5sZW5ndGggPyAnZHMtZmllbGQtLWhhcy1lcnJvcicgOiAnJ31cXFwiXFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0bmFtZT1cXFwiZmlyc3RfbmFtZVxcXCJcXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRpZD1cXFwiZmlyc3RfbmFtZVxcXCJcXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHR0PVxcXCJbcGxhY2Vob2xkZXJdZmlyc3ROYW1lXFxcIlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdHR5cGU9XFxcInRleHRcXFwiXFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0dmFsdWUuYmluZD1cXFwiZmlyc3ROYW1lICYgdmFsaWRhdGVcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImRzLWZpZWxkLW1lc3NhZ2VcXFwiIHJlcGVhdC5mb3I9XFxcImVycm9ySW5mbyBvZiBmaXJzdE5hbWVFcnJvcnNcXFwiIGlubmVyaHRtbC5iaW5kPVxcXCJlcnJvckluZm8uZXJyb3IubWVzc2FnZVxcXCI+PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1zbSBkcy1mb3JtX19maWVsZC0taGFsZi1zcGFjZVxcXCIgdmFsaWRhdGlvbi1lcnJvcnMuYmluZD1cXFwibGFzdE5hbWVFcnJvcnNcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdDxpbnB1dFxcclxcblxcdFxcdFxcdFxcdFxcdFxcdGNsYXNzPVxcXCJkcy1maWVsZCAke2xhc3ROYW1lRXJyb3JzLmxlbmd0aCA/ICdkcy1maWVsZC0taGFzLWVycm9yJyA6ICcnfVxcXCJcXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRpZD1cXFwibGFzdF9uYW1lXFxcIlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdG5hbWU9XFxcImxhc3RfbmFtZVxcXCJcXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHR0PVxcXCJbcGxhY2Vob2xkZXJdbGFzdE5hbWVcXFwiXFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0dHlwZT1cXFwidGV4dFxcXCJcXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHR2YWx1ZS5iaW5kPVxcXCJsYXN0TmFtZSAmIHZhbGlkYXRlXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJkcy1maWVsZC1tZXNzYWdlXFxcIiByZXBlYXQuZm9yPVxcXCJlcnJvckluZm8gb2YgbGFzdE5hbWVFcnJvcnNcXFwiIGlubmVyaHRtbC5iaW5kPVxcXCJlcnJvckluZm8uZXJyb3IubWVzc2FnZVxcXCI+PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXHJcXG5cXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTJcXFwiIHZhbGlkYXRpb24tZXJyb3JzLmJpbmQ9XFxcImVtYWlsRXJyb3JzXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8aW5wdXRcXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRjbGFzcz1cXFwiZHMtZmllbGQgJHtlbWFpbEVycm9ycy5sZW5ndGggPyAnZHMtZmllbGQtLWhhcy1lcnJvcicgOiAnJ31cXFwiXFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0aWQ9XFxcImVtYWlsXFxcIlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdG5hbWU9XFxcImVtYWlsXFxcIlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdHQ9XFxcIltwbGFjZWhvbGRlcl1lbWFpbFxcXCJcXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHR0eXBlPVxcXCJ0ZXh0XFxcIlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdHZhbHVlLmJpbmQ9XFxcImVtYWlsICYgdmFsaWRhdGVcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImRzLWZpZWxkLW1lc3NhZ2VcXFwiIHJlcGVhdC5mb3I9XFxcImVycm9ySW5mbyBvZiBlbWFpbEVycm9yc1xcXCIgaW5uZXJodG1sLmJpbmQ9XFxcImVycm9ySW5mby5lcnJvci5tZXNzYWdlXFxcIj48L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTJcXFwiIHZhbGlkYXRpb24tZXJyb3JzLmJpbmQ9XFxcInBhc3N3b3JkRXJyb3JzXFxcIiBpZi5iaW5kPVxcXCIhbW9kZWwuaGlkZVBhc3N3b3JkXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8aW5wdXRcXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRjbGFzcz1cXFwiZHMtZmllbGQgJHtwYXNzd29yZEVycm9ycy5sZW5ndGggPyAnZHMtZmllbGQtLWhhcy1lcnJvcicgOiAnJ31cXFwiXFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0aWQ9XFxcInBhc3N3b3JkXFxcIlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdG5hbWU9XFxcInBhc3N3b3JkXFxcIlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdHQ9XFxcIltwbGFjZWhvbGRlcl1wYXNzd29yZFxcXCJcXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHR0eXBlPVxcXCJwYXNzd29yZFxcXCJcXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHR2YWx1ZS5iaW5kPVxcXCJwYXNzd29yZCAmIHZhbGlkYXRlXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJkcy1maWVsZC1tZXNzYWdlXFxcIiByZXBlYXQuZm9yPVxcXCJlcnJvckluZm8gb2YgcGFzc3dvcmRFcnJvcnNcXFwiIGlubmVyaHRtbC5iaW5kPVxcXCJlcnJvckluZm8uZXJyb3IubWVzc2FnZVxcXCI+PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNhbXBhaWduLXJlZ2lzdHJhdGlvbi1mb3JtX19jb3VudHJpZXNcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdDxzZWxlY3QtbWVudVxcclxcblxcdFxcdFxcdFxcdFxcdFxcdGl0ZW1zLmJpbmQ9XFxcImNvdW50cmllc1xcXCJcXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRzZWxlY3RlZC1pdGVtLnR3by13YXk9XFxcInNlbGVjdGVkQ291bnRyeVxcXCJcXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRvbi1jaGFuZ2UuY2FsbD1cXFwic2VsZWN0Q291bnRyeSgpXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8L3NlbGVjdC1tZW51PlxcclxcblxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0PGRpdiBpZi5iaW5kPVxcXCJzaG93WmlwXFxcIiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1zbSBkcy1mb3JtX19maWVsZC0taGFsZi1zcGFjZVxcXCIgdmFsaWRhdGlvbi1lcnJvcnMuYmluZD1cXFwicG9zdGFsQ29kZUVycm9yc1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGlucHV0XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0Y2xhc3M9XFxcImRzLWZpZWxkICR7cG9zdGFsQ29kZUVycm9ycy5sZW5ndGggPyAnZHMtZmllbGQtLWhhcy1lcnJvcicgOiAnJ31cXFwiXFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0aWQ9XFxcInBvc3RhbF9jb2RlXFxcIlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdG5hbWU9XFxcInBvc3RhbF9jb2RlXFxcIlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdHQ9XFxcIltwbGFjZWhvbGRlcl16aXBcXFwiXFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0dHlwZT1cXFwidGV4dFxcXCJcXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHR2YWx1ZS5iaW5kPVxcXCJwb3N0YWxDb2RlICYgdmFsaWRhdGVcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImRzLWZpZWxkLW1lc3NhZ2VcXFwiIHJlcGVhdC5mb3I9XFxcImVycm9ySW5mbyBvZiBwb3N0YWxDb2RlRXJyb3JzXFxcIiBpbm5lcmh0bWwuYmluZD1cXFwiZXJyb3JJbmZvLmVycm9yLm1lc3NhZ2VcXFwiPjwvZGl2PlxcclxcblxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtc20gNCAke3Nob3daaXAgPyAnZHMtZm9ybV9fZmllbGQtLWhhbGYtc3BhY2UnIDogJyd9XFxcIiB2YWxpZGF0aW9uLWVycm9ycy5iaW5kPVxcXCJwaG9uZUVycm9yc1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGlucHV0XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0Y2xhc3M9XFxcImRzLWZpZWxkICR7cGhvbmVFcnJvcnMubGVuZ3RoID8gJ2RzLWZpZWxkLS1oYXMtZXJyb3InIDogJyd9XFxcIlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdHQ9XFxcIltwbGFjZWhvbGRlcl1waG9uZVxcXCJcXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHR0eXBlPVxcXCJ0ZWxcXFwiXFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0dmFsdWUuYmluZD1cXFwicGhvbmUgJiB2YWxpZGF0ZVxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiZHMtZmllbGQtbWVzc2FnZVxcXCIgcmVwZWF0LmZvcj1cXFwiZXJyb3JJbmZvIG9mIHBob25lRXJyb3JzXFxcIiBpbm5lcmh0bWwuYmluZD1cXFwiZXJyb3JJbmZvLmVycm9yLm1lc3NhZ2VcXFwiPjwvZGl2PlxcclxcblxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcInJvd1xcXCIgaWYuYmluZD1cXFwic2hvd1NlcnZlckVycm9yc1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJkcy1maWVsZC1tZXNzYWdlIGRzLWZpZWxkLW1lc3NhZ2UtLWhhcy1lcnJvclxcXCIgcmVwZWF0LmZvcj1cXFwiZXJyb3Igb2Ygc2VydmVyRXJyb3JzXFxcIj4ke2Vycm9yfTwvZGl2PlxcclxcblxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJkcy1mb3JtX19jdGEgZHMtYnRuLXByaW1hcnkgJHtpc1N1Ym1pdHRpbmcgPyAnZHMtZm9ybV9fY3RhLS1pcy1sb2FkaW5nJyA6ICcnIH1cXFwiIHR5cGU9XFxcInN1Ym1pdFxcXCJcXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRkaXNhYmxlZC5iaW5kPVxcXCJpc1N1Ym1pdHRpbmdcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdCR7bW9kZWwuc3VibWlzc2lvbkNhbGxUb0FjdGlvbi5saW5rVGl0bGV9XFxyXFxuXFx0XFx0XFx0XFx0XFx0PC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiZHMtZm9ybV9fc2lnbi1pbi10ZXh0IGNlbnRlci14c1xcXCI+PHNwYW4gdD1cXFwiW2h0bWxdc2lnbkluVGV4dFxcXCI+PC9zcGFuPiA8YSBocmVmPScke29rdGFEb21haW59JyBjbGFzcz0nZHMtbGluay1wcmltYXJ5JyB0PVxcXCJbaHRtbF1zaWduSW5VcmxUZXh0XFxcIj48L2E+LjwvZGl2PlxcclxcblxcdFxcdFxcdDxkaXYgaWYuYmluZD1cXFwibW9kZWwucHJpdmFjeVBvbGljeS5sZW5ndGhcXFwiIGNsYXNzPVxcXCJkcy1mb3JtX19sZWdhbGVzZSBjZW50ZXIteHNcXFwiIGlubmVyaHRtbC5iaW5kPVxcXCJtb2RlbC5wcml2YWN5UG9saWN5XFxcIj48L2Rpdj5cXHJcXG5cXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJkcy1mb3JtX19sZWdhbGVzZSBkcy1mb3JtX19yZWNhcHRjaGEgY2VudGVyLXhzXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRUaGlzIHNpdGUgaXMgcHJvdGVjdGVkIGJ5Jm5ic3A7cmVDQVBUQ0hBPGJyIC8+YW5kIHRoZSZuYnNwO0dvb2dsZSA8YSBocmVmPVxcXCJodHRwczovL3BvbGljaWVzLmdvb2dsZS5jb20vcHJpdmFjeVxcXCIgdGFyZ2V0PVxcXCJfYmxhbmtcXFwiPlByaXZhY3kmbmJzcDtQb2xpY3k8L2E+IGFuZCA8YSBocmVmPVxcXCJodHRwczovL3BvbGljaWVzLmdvb2dsZS5jb20vdGVybXNcXFwiIHRhcmdldD1cXFwiX2JsYW5rXFxcIj5UZXJtcyZuYnNwO29mJm5ic3A7U2VydmljZTwvYT4mbmJzcDthcHBseS5cXHJcXG5cXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHQ8L2Rpdj5cXHJcXG5cXHQ8L2Zvcm0+XFxyXFxuPC90ZW1wbGF0ZT5cXHJcXG5cIjsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///components/campaign-registration-form/campaign-registration-form.html\n')},"components/careers-listing/careers-listing":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar CareersListing = /** @class */ (function () {\r\n    function CareersListing() {\r\n    }\r\n    CareersListing = __decorate([\r\n        aurelia_framework_1.autoinject(),\r\n        aurelia_framework_1.containerless\r\n    ], CareersListing);\r\n    return CareersListing;\r\n}());\r\nexports.CareersListing = CareersListing;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9jYXJlZXJzLWxpc3RpbmcvY2FyZWVycy1saXN0aW5nLnRzPzY3NzgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsUUFBUTtBQUNwRDtBQUNBO0FBQ0EsOENBQThDLGNBQWM7QUFDNUQsMEJBQTBCLG1CQUFPLENBQUMsbUJBQW1CO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QiLCJmaWxlIjoiY29tcG9uZW50cy9jYXJlZXJzLWxpc3RpbmcvY2FyZWVycy1saXN0aW5nLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2RlY29yYXRlID0gKHRoaXMgJiYgdGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn07XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIGF1cmVsaWFfZnJhbWV3b3JrXzEgPSByZXF1aXJlKFwiYXVyZWxpYS1mcmFtZXdvcmtcIik7XHJcbnZhciBDYXJlZXJzTGlzdGluZyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIENhcmVlcnNMaXN0aW5nKCkge1xyXG4gICAgfVxyXG4gICAgQ2FyZWVyc0xpc3RpbmcgPSBfX2RlY29yYXRlKFtcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLmF1dG9pbmplY3QoKSxcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLmNvbnRhaW5lcmxlc3NcclxuICAgIF0sIENhcmVlcnNMaXN0aW5nKTtcclxuICAgIHJldHVybiBDYXJlZXJzTGlzdGluZztcclxufSgpKTtcclxuZXhwb3J0cy5DYXJlZXJzTGlzdGluZyA9IENhcmVlcnNMaXN0aW5nO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///components/careers-listing/careers-listing\n')},"components/careers-listing/careers-listing.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<div ref=\\"careersListingElement\\" class=\\"careers-listing\\">\\r\\n\\t\\t\\t<a href=\\"/external-jobs\\" rel=\\"noopener noreferrer\\" target=\\"_blank\\">\\r\\n\\t\\t\\t\\t<button class=\\"ds-btn-primary careers-link-button\\">Check out our available jobs<\/button>\\r\\n\\t\\t\\t<\/a>\\r\\n\\t\\t<\/button>\\r\\n\\t<\/div>\\r\\n<\/template> \\r\\n\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9jYXJlZXJzLWxpc3RpbmcvY2FyZWVycy1saXN0aW5nLmh0bWw/ZTA0NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSIsImZpbGUiOiJjb21wb25lbnRzL2NhcmVlcnMtbGlzdGluZy9jYXJlZXJzLWxpc3RpbmcuaHRtbC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gXCI8dGVtcGxhdGU+XFxyXFxuXFx0PGRpdiByZWY9XFxcImNhcmVlcnNMaXN0aW5nRWxlbWVudFxcXCIgY2xhc3M9XFxcImNhcmVlcnMtbGlzdGluZ1xcXCI+XFxyXFxuXFx0XFx0XFx0PGEgaHJlZj1cXFwiL2V4dGVybmFsLWpvYnNcXFwiIHJlbD1cXFwibm9vcGVuZXIgbm9yZWZlcnJlclxcXCIgdGFyZ2V0PVxcXCJfYmxhbmtcXFwiPlxcclxcblxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcImRzLWJ0bi1wcmltYXJ5IGNhcmVlcnMtbGluay1idXR0b25cXFwiPkNoZWNrIG91dCBvdXIgYXZhaWxhYmxlIGpvYnM8L2J1dHRvbj5cXHJcXG5cXHRcXHRcXHQ8L2E+XFxyXFxuXFx0XFx0PC9idXR0b24+XFxyXFxuXFx0PC9kaXY+XFxyXFxuPC90ZW1wbGF0ZT4gXFxyXFxuXFxyXFxuXCI7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/careers-listing/careers-listing.html\n')},"components/contact-us-phone-email/contact-us-phone-email":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar ContactUsPhoneEmail = /** @class */ (function () {\r\n    function ContactUsPhoneEmail() {\r\n    }\r\n    ContactUsPhoneEmail.prototype.activate = function (model) {\r\n        this.model = model;\r\n        if (this.model.phoneIcon) {\r\n            this.phoneIcon = "background-image: url(" + this.model.phoneIcon\r\n                .fullPath + ");";\r\n        }\r\n        if (this.model.emailIcon) {\r\n            this.emailIcon = "background-image: url(" + this.model.emailIcon\r\n                .fullPath + ");";\r\n        }\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Object)\r\n    ], ContactUsPhoneEmail.prototype, "model", void 0);\r\n    ContactUsPhoneEmail = __decorate([\r\n        aurelia_framework_1.autoinject()\r\n    ], ContactUsPhoneEmail);\r\n    return ContactUsPhoneEmail;\r\n}());\r\nexports.ContactUsPhoneEmail = ContactUsPhoneEmail;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9jb250YWN0LXVzLXBob25lLWVtYWlsL2NvbnRhY3QtdXMtcGhvbmUtZW1haWwudHM/YWZiYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxRQUFRO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RCwwQkFBMEIsbUJBQU8sQ0FBQyxtQkFBbUI7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEIiwiZmlsZSI6ImNvbXBvbmVudHMvY29udGFjdC11cy1waG9uZS1lbWFpbC9jb250YWN0LXVzLXBob25lLWVtYWlsLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2RlY29yYXRlID0gKHRoaXMgJiYgdGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn07XHJcbnZhciBfX21ldGFkYXRhID0gKHRoaXMgJiYgdGhpcy5fX21ldGFkYXRhKSB8fCBmdW5jdGlvbiAoaywgdikge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xyXG59O1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBhdXJlbGlhX2ZyYW1ld29ya18xID0gcmVxdWlyZShcImF1cmVsaWEtZnJhbWV3b3JrXCIpO1xyXG52YXIgQ29udGFjdFVzUGhvbmVFbWFpbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIENvbnRhY3RVc1Bob25lRW1haWwoKSB7XHJcbiAgICB9XHJcbiAgICBDb250YWN0VXNQaG9uZUVtYWlsLnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uIChtb2RlbCkge1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSBtb2RlbDtcclxuICAgICAgICBpZiAodGhpcy5tb2RlbC5waG9uZUljb24pIHtcclxuICAgICAgICAgICAgdGhpcy5waG9uZUljb24gPSBcImJhY2tncm91bmQtaW1hZ2U6IHVybChcIiArIHRoaXMubW9kZWwucGhvbmVJY29uXHJcbiAgICAgICAgICAgICAgICAuZnVsbFBhdGggKyBcIik7XCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmVtYWlsSWNvbikge1xyXG4gICAgICAgICAgICB0aGlzLmVtYWlsSWNvbiA9IFwiYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiICsgdGhpcy5tb2RlbC5lbWFpbEljb25cclxuICAgICAgICAgICAgICAgIC5mdWxsUGF0aCArIFwiKTtcIjtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5iaW5kYWJsZSxcclxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxyXG4gICAgXSwgQ29udGFjdFVzUGhvbmVFbWFpbC5wcm90b3R5cGUsIFwibW9kZWxcIiwgdm9pZCAwKTtcclxuICAgIENvbnRhY3RVc1Bob25lRW1haWwgPSBfX2RlY29yYXRlKFtcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLmF1dG9pbmplY3QoKVxyXG4gICAgXSwgQ29udGFjdFVzUGhvbmVFbWFpbCk7XHJcbiAgICByZXR1cm4gQ29udGFjdFVzUGhvbmVFbWFpbDtcclxufSgpKTtcclxuZXhwb3J0cy5Db250YWN0VXNQaG9uZUVtYWlsID0gQ29udGFjdFVzUGhvbmVFbWFpbDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/contact-us-phone-email/contact-us-phone-email\n')},"components/contact-us-phone-email/contact-us-phone-email.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<div class=\\"contact-us-phone-email\\">\\r\\n\\t\\t<div class=\\"contact-us-phone-email__wrapper\\">\\r\\n\\t\\t\\t<div class=\\"contact-us-phone-email__icon-holder\\">\\r\\n\\t\\t\\t\\t<div css.bind=\\"phoneIcon\\" class=\\"contact-us-phone-email__icon\\" alt=\\"${model.phoneHeader}\\"><\/div>\\r\\n\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t<div class=\\"contact-us-phone-email__info\\">\\r\\n\\t\\t\\t\\t<div class=\\"contact-us-phone-email__header\\">${model.phoneHeader}<\/div>\\r\\n\\r\\n\\t\\t\\t\\t<a href=\\"tel:${model.phoneNumber}\\">\\r\\n\\t\\t\\t\\t\\t<span class=\\"contact-us-phone-email__link\\">\\r\\n\\t\\t\\t\\t\\t\\t${model.phoneNumber}\\r\\n\\t\\t\\t\\t\\t<\/span>\\r\\n\\t\\t\\t\\t<\/a>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t<\/div>\\r\\n\\t\\t<div class=\\"contact-us-phone-email__wrapper\\">\\r\\n\\t\\t\\t<div class=\\"contact-us-phone-email__icon-holder\\">\\r\\n\\t\\t\\t\\t<div css.bind=\\"emailIcon\\" class=\\"contact-us-phone-email__icon\\" alt=\\"${model.emailHeader}\\"><\/div>\\r\\n\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t<div class=\\"contact-us-phone-email__info\\">\\r\\n\\t\\t\\t\\t<div class=\\"contact-us-phone-email__header\\">${model.emailHeader}<\/div>\\r\\n\\r\\n\\t\\t\\t\\t<a href=\\"mailto:${model.emailAddress}\\">\\r\\n\\t\\t\\t\\t\\t<span class=\\"contact-us-phone-email__link\\">\\r\\n\\t\\t\\t\\t\\t\\t${model.emailAddress}\\r\\n\\t\\t\\t\\t\\t<\/span>\\r\\n\\t\\t\\t\\t<\/a>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t<\/div>\\r\\n\\t<\/div>\\r\\n\\r\\n<\/template>";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9jb250YWN0LXVzLXBob25lLWVtYWlsL2NvbnRhY3QtdXMtcGhvbmUtZW1haWwuaHRtbD8xMDAxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1SQUFtUixrQkFBa0IsK0lBQStJLGtCQUFrQixzQ0FBc0Msa0JBQWtCLGdGQUFnRixrQkFBa0IsOFFBQThRLGtCQUFrQiwrSUFBK0ksa0JBQWtCLHlDQUF5QyxtQkFBbUIsZ0ZBQWdGLG1CQUFtQiIsImZpbGUiOiJjb21wb25lbnRzL2NvbnRhY3QtdXMtcGhvbmUtZW1haWwvY29udGFjdC11cy1waG9uZS1lbWFpbC5odG1sLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBcIjx0ZW1wbGF0ZT5cXHJcXG5cXHQ8ZGl2IGNsYXNzPVxcXCJjb250YWN0LXVzLXBob25lLWVtYWlsXFxcIj5cXHJcXG5cXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb250YWN0LXVzLXBob25lLWVtYWlsX193cmFwcGVyXFxcIj5cXHJcXG5cXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb250YWN0LXVzLXBob25lLWVtYWlsX19pY29uLWhvbGRlclxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0PGRpdiBjc3MuYmluZD1cXFwicGhvbmVJY29uXFxcIiBjbGFzcz1cXFwiY29udGFjdC11cy1waG9uZS1lbWFpbF9faWNvblxcXCIgYWx0PVxcXCIke21vZGVsLnBob25lSGVhZGVyfVxcXCI+PC9kaXY+XFxyXFxuXFx0XFx0XFx0PC9kaXY+XFxyXFxuXFxyXFxuXFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiY29udGFjdC11cy1waG9uZS1lbWFpbF9faW5mb1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiY29udGFjdC11cy1waG9uZS1lbWFpbF9faGVhZGVyXFxcIj4ke21vZGVsLnBob25lSGVhZGVyfTwvZGl2PlxcclxcblxcclxcblxcdFxcdFxcdFxcdDxhIGhyZWY9XFxcInRlbDoke21vZGVsLnBob25lTnVtYmVyfVxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PHNwYW4gY2xhc3M9XFxcImNvbnRhY3QtdXMtcGhvbmUtZW1haWxfX2xpbmtcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdCR7bW9kZWwucGhvbmVOdW1iZXJ9XFxyXFxuXFx0XFx0XFx0XFx0XFx0PC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdDwvYT5cXHJcXG5cXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb250YWN0LXVzLXBob25lLWVtYWlsX193cmFwcGVyXFxcIj5cXHJcXG5cXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb250YWN0LXVzLXBob25lLWVtYWlsX19pY29uLWhvbGRlclxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0PGRpdiBjc3MuYmluZD1cXFwiZW1haWxJY29uXFxcIiBjbGFzcz1cXFwiY29udGFjdC11cy1waG9uZS1lbWFpbF9faWNvblxcXCIgYWx0PVxcXCIke21vZGVsLmVtYWlsSGVhZGVyfVxcXCI+PC9kaXY+XFxyXFxuXFx0XFx0XFx0PC9kaXY+XFxyXFxuXFxyXFxuXFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiY29udGFjdC11cy1waG9uZS1lbWFpbF9faW5mb1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiY29udGFjdC11cy1waG9uZS1lbWFpbF9faGVhZGVyXFxcIj4ke21vZGVsLmVtYWlsSGVhZGVyfTwvZGl2PlxcclxcblxcclxcblxcdFxcdFxcdFxcdDxhIGhyZWY9XFxcIm1haWx0bzoke21vZGVsLmVtYWlsQWRkcmVzc31cXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdDxzcGFuIGNsYXNzPVxcXCJjb250YWN0LXVzLXBob25lLWVtYWlsX19saW5rXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQke21vZGVsLmVtYWlsQWRkcmVzc31cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8L3NwYW4+XFxyXFxuXFx0XFx0XFx0XFx0PC9hPlxcclxcblxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdDwvZGl2PlxcclxcblxcdDwvZGl2PlxcclxcblxcclxcbjwvdGVtcGxhdGU+XCI7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/contact-us-phone-email/contact-us-phone-email.html\n')},"components/contact-us/contact-us":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_fetch_client_1 = __webpack_require__(12);\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar ContactUs = /** @class */ (function () {\r\n    function ContactUs(httpClient) {\r\n        this.httpClient = httpClient;\r\n        this.modifier = \'\';\r\n        this.image = \'\';\r\n        this.httpClient.configure(this.httpConfiguration);\r\n    }\r\n    ContactUs.prototype.attached = function () {\r\n        var _this = this;\r\n        this.httpClient\r\n            .fetch(\'/member-services-contact\')\r\n            .then(function (response) { return response.json(); })\r\n            .then(function (data) {\r\n            _this.contact = JSON.parse(data);\r\n            if (_this.contact.image) {\r\n                _this.image = "background-image: url(" + _this.contact\r\n                    .image + "?width=313);";\r\n            }\r\n            _this.modifier = \'contact-us--is-loaded\';\r\n        });\r\n    };\r\n    ContactUs.prototype.httpConfiguration = function (config) {\r\n        return config\r\n            .withDefaults({\r\n            credentials: \'same-origin\',\r\n            headers: {\r\n                Accept: \'application/json\',\r\n                Cookie: document.cookie\r\n            }\r\n        })\r\n            .rejectErrorResponses();\r\n    };\r\n    ContactUs = __decorate([\r\n        aurelia_framework_1.autoinject(),\r\n        __metadata("design:paramtypes", [aurelia_fetch_client_1.HttpClient])\r\n    ], ContactUs);\r\n    return ContactUs;\r\n}());\r\nexports.ContactUs = ContactUs;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9jb250YWN0LXVzL2NvbnRhY3QtdXMudHM/ZjJiYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxRQUFRO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RCw2QkFBNkIsbUJBQU8sQ0FBQyxFQUFzQjtBQUMzRCwwQkFBMEIsbUJBQU8sQ0FBQyxtQkFBbUI7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1Qyx3QkFBd0IsRUFBRTtBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQztBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCIsImZpbGUiOiJjb21wb25lbnRzL2NvbnRhY3QtdXMvY29udGFjdC11cy5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG52YXIgX19kZWNvcmF0ZSA9ICh0aGlzICYmIHRoaXMuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59O1xyXG52YXIgX19tZXRhZGF0YSA9ICh0aGlzICYmIHRoaXMuX19tZXRhZGF0YSkgfHwgZnVuY3Rpb24gKGssIHYpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShrLCB2KTtcclxufTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgYXVyZWxpYV9mZXRjaF9jbGllbnRfMSA9IHJlcXVpcmUoXCJhdXJlbGlhLWZldGNoLWNsaWVudFwiKTtcclxudmFyIGF1cmVsaWFfZnJhbWV3b3JrXzEgPSByZXF1aXJlKFwiYXVyZWxpYS1mcmFtZXdvcmtcIik7XHJcbnZhciBDb250YWN0VXMgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBDb250YWN0VXMoaHR0cENsaWVudCkge1xyXG4gICAgICAgIHRoaXMuaHR0cENsaWVudCA9IGh0dHBDbGllbnQ7XHJcbiAgICAgICAgdGhpcy5tb2RpZmllciA9ICcnO1xyXG4gICAgICAgIHRoaXMuaW1hZ2UgPSAnJztcclxuICAgICAgICB0aGlzLmh0dHBDbGllbnQuY29uZmlndXJlKHRoaXMuaHR0cENvbmZpZ3VyYXRpb24pO1xyXG4gICAgfVxyXG4gICAgQ29udGFjdFVzLnByb3RvdHlwZS5hdHRhY2hlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAgICAgICAuZmV0Y2goJy9tZW1iZXItc2VydmljZXMtY29udGFjdCcpXHJcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkgeyByZXR1cm4gcmVzcG9uc2UuanNvbigpOyB9KVxyXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICBfdGhpcy5jb250YWN0ID0gSlNPTi5wYXJzZShkYXRhKTtcclxuICAgICAgICAgICAgaWYgKF90aGlzLmNvbnRhY3QuaW1hZ2UpIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLmltYWdlID0gXCJiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIgKyBfdGhpcy5jb250YWN0XHJcbiAgICAgICAgICAgICAgICAgICAgLmltYWdlICsgXCI/d2lkdGg9MzEzKTtcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBfdGhpcy5tb2RpZmllciA9ICdjb250YWN0LXVzLS1pcy1sb2FkZWQnO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIENvbnRhY3RVcy5wcm90b3R5cGUuaHR0cENvbmZpZ3VyYXRpb24gPSBmdW5jdGlvbiAoY29uZmlnKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbmZpZ1xyXG4gICAgICAgICAgICAud2l0aERlZmF1bHRzKHtcclxuICAgICAgICAgICAgY3JlZGVudGlhbHM6ICdzYW1lLW9yaWdpbicsXHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAgICAgICAgICAgQ29va2llOiBkb2N1bWVudC5jb29raWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5yZWplY3RFcnJvclJlc3BvbnNlcygpO1xyXG4gICAgfTtcclxuICAgIENvbnRhY3RVcyA9IF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuYXV0b2luamVjdCgpLFxyXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbYXVyZWxpYV9mZXRjaF9jbGllbnRfMS5IdHRwQ2xpZW50XSlcclxuICAgIF0sIENvbnRhY3RVcyk7XHJcbiAgICByZXR1cm4gQ29udGFjdFVzO1xyXG59KCkpO1xyXG5leHBvcnRzLkNvbnRhY3RVcyA9IENvbnRhY3RVcztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/contact-us/contact-us\n')},"components/contact-us/contact-us.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<div class=\\"contact-us ${modifier}\\">\\r\\n\\t\\t<div class=\\"contact-us__wrapper\\">\\r\\n\\t\\t\\t<div class=\\"contact-us__image\\" css.bind=\\"image\\"><\/div>\\r\\n\\t\\t\\t<div class=\\"contact-us__info\\">\\r\\n\\t\\t\\t\\t<div class=\\"contact-us__name ds-title-medium\\">${contact.name}<\/div>\\r\\n\\t\\t\\t\\t<div class=\\"contact-us__title\\">${contact.title}<\/div>\\r\\n\\r\\n\\t\\t\\t\\t<div class=\\"contact-us__separator\\"><\/div>\\r\\n\\r\\n\\t\\t\\t\\t<div class=\\"contact-us__links\\">\\r\\n\\t\\t\\t\\t\\t<a href=\\"tel:${contact.phone}\\">\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\"contact-us__icon contact-us__phone-icon\\"><\/span>\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\"contact-us__phone truncate-text\\" title=\\"${contact.phone}\\">${contact.phone}<\/span>\\r\\n\\t\\t\\t\\t\\t<\/a>\\r\\n\\r\\n\\t\\t\\t\\t\\t<div class=\\"contact-us__separator\\"><\/div>\\r\\n\\r\\n\\t\\t\\t\\t\\t<a href=\\"mailto:${contact.email}\\">\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\"contact-us__icon contact-us__mail-icon\\"><\/span>\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\"contact-us__email truncate-text\\" title=\\"${contact.email}\\">${contact.email}<\/span>\\r\\n\\t\\t\\t\\t\\t<\/a>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t<\/div>\\r\\n\\t<\/div>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9jb250YWN0LXVzL2NvbnRhY3QtdXMuaHRtbD81NzU4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDREQUE0RCxTQUFTLDBOQUEwTixhQUFhLHFEQUFxRCxjQUFjLGdKQUFnSixjQUFjLDRKQUE0SixjQUFjLEtBQUssY0FBYywySEFBMkgsY0FBYywySkFBMkosY0FBYyxLQUFLLGNBQWMiLCJmaWxlIjoiY29tcG9uZW50cy9jb250YWN0LXVzL2NvbnRhY3QtdXMuaHRtbC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gXCI8dGVtcGxhdGU+XFxyXFxuXFx0PGRpdiBjbGFzcz1cXFwiY29udGFjdC11cyAke21vZGlmaWVyfVxcXCI+XFxyXFxuXFx0XFx0PGRpdiBjbGFzcz1cXFwiY29udGFjdC11c19fd3JhcHBlclxcXCI+XFxyXFxuXFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiY29udGFjdC11c19faW1hZ2VcXFwiIGNzcy5iaW5kPVxcXCJpbWFnZVxcXCI+PC9kaXY+XFxyXFxuXFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiY29udGFjdC11c19faW5mb1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiY29udGFjdC11c19fbmFtZSBkcy10aXRsZS1tZWRpdW1cXFwiPiR7Y29udGFjdC5uYW1lfTwvZGl2PlxcclxcblxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImNvbnRhY3QtdXNfX3RpdGxlXFxcIj4ke2NvbnRhY3QudGl0bGV9PC9kaXY+XFxyXFxuXFxyXFxuXFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiY29udGFjdC11c19fc2VwYXJhdG9yXFxcIj48L2Rpdj5cXHJcXG5cXHJcXG5cXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb250YWN0LXVzX19saW5rc1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGEgaHJlZj1cXFwidGVsOiR7Y29udGFjdC5waG9uZX1cXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxzcGFuIGNsYXNzPVxcXCJjb250YWN0LXVzX19pY29uIGNvbnRhY3QtdXNfX3Bob25lLWljb25cXFwiPjwvc3Bhbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8c3BhbiBjbGFzcz1cXFwiY29udGFjdC11c19fcGhvbmUgdHJ1bmNhdGUtdGV4dFxcXCIgdGl0bGU9XFxcIiR7Y29udGFjdC5waG9uZX1cXFwiPiR7Y29udGFjdC5waG9uZX08L3NwYW4+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PC9hPlxcclxcblxcclxcblxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImNvbnRhY3QtdXNfX3NlcGFyYXRvclxcXCI+PC9kaXY+XFxyXFxuXFxyXFxuXFx0XFx0XFx0XFx0XFx0PGEgaHJlZj1cXFwibWFpbHRvOiR7Y29udGFjdC5lbWFpbH1cXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxzcGFuIGNsYXNzPVxcXCJjb250YWN0LXVzX19pY29uIGNvbnRhY3QtdXNfX21haWwtaWNvblxcXCI+PC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxzcGFuIGNsYXNzPVxcXCJjb250YWN0LXVzX19lbWFpbCB0cnVuY2F0ZS10ZXh0XFxcIiB0aXRsZT1cXFwiJHtjb250YWN0LmVtYWlsfVxcXCI+JHtjb250YWN0LmVtYWlsfTwvc3Bhbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8L2E+XFxyXFxuXFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0PC9kaXY+XFxyXFxuXFx0PC9kaXY+XFxyXFxuPC90ZW1wbGF0ZT5cXHJcXG5cIjsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///components/contact-us/contact-us.html\n')},"components/content-divider/content-divider":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar HorizontalAlignment_1 = __webpack_require__(19);\r\nvar ContentDivider = /** @class */ (function () {\r\n    function ContentDivider() {\r\n        this.color = \'\';\r\n        this.modifier = \'\';\r\n    }\r\n    ContentDivider.prototype.attached = function () {\r\n        if (this.model && this.model.color) {\r\n            this.color = "border-bottom-color: " + this.model.color + ";";\r\n        }\r\n        this.modifier = this.getAlignment();\r\n    };\r\n    ContentDivider.prototype.getAlignment = function () {\r\n        switch (this.alignment) {\r\n            case HorizontalAlignment_1.HorizontalAlignment.Start:\r\n                return \'content-divider--start\';\r\n            case HorizontalAlignment_1.HorizontalAlignment.End:\r\n                return \'content-divider--end\';\r\n            default:\r\n                return \'content-divider--center\';\r\n        }\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Object)\r\n    ], ContentDivider.prototype, "model", void 0);\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", String)\r\n    ], ContentDivider.prototype, "alignment", void 0);\r\n    return ContentDivider;\r\n}());\r\nexports.ContentDivider = ContentDivider;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9jb250ZW50LWRpdmlkZXIvY29udGVudC1kaXZpZGVyLnRzP2E5NGYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsUUFBUTtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLGNBQWM7QUFDNUQsMEJBQTBCLG1CQUFPLENBQUMsbUJBQW1CO0FBQ3JELDRCQUE0QixtQkFBTyxDQUFDLEVBQWlDO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0VBQXdFO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEIiwiZmlsZSI6ImNvbXBvbmVudHMvY29udGVudC1kaXZpZGVyL2NvbnRlbnQtZGl2aWRlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG52YXIgX19kZWNvcmF0ZSA9ICh0aGlzICYmIHRoaXMuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59O1xyXG52YXIgX19tZXRhZGF0YSA9ICh0aGlzICYmIHRoaXMuX19tZXRhZGF0YSkgfHwgZnVuY3Rpb24gKGssIHYpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShrLCB2KTtcclxufTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgYXVyZWxpYV9mcmFtZXdvcmtfMSA9IHJlcXVpcmUoXCJhdXJlbGlhLWZyYW1ld29ya1wiKTtcclxudmFyIEhvcml6b250YWxBbGlnbm1lbnRfMSA9IHJlcXVpcmUoXCIuLi8uLi9lbnVtcy9Ib3Jpem9udGFsQWxpZ25tZW50XCIpO1xyXG52YXIgQ29udGVudERpdmlkZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBDb250ZW50RGl2aWRlcigpIHtcclxuICAgICAgICB0aGlzLmNvbG9yID0gJyc7XHJcbiAgICAgICAgdGhpcy5tb2RpZmllciA9ICcnO1xyXG4gICAgfVxyXG4gICAgQ29udGVudERpdmlkZXIucHJvdG90eXBlLmF0dGFjaGVkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsICYmIHRoaXMubW9kZWwuY29sb3IpIHtcclxuICAgICAgICAgICAgdGhpcy5jb2xvciA9IFwiYm9yZGVyLWJvdHRvbS1jb2xvcjogXCIgKyB0aGlzLm1vZGVsLmNvbG9yICsgXCI7XCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubW9kaWZpZXIgPSB0aGlzLmdldEFsaWdubWVudCgpO1xyXG4gICAgfTtcclxuICAgIENvbnRlbnREaXZpZGVyLnByb3RvdHlwZS5nZXRBbGlnbm1lbnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLmFsaWdubWVudCkge1xyXG4gICAgICAgICAgICBjYXNlIEhvcml6b250YWxBbGlnbm1lbnRfMS5Ib3Jpem9udGFsQWxpZ25tZW50LlN0YXJ0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdjb250ZW50LWRpdmlkZXItLXN0YXJ0JztcclxuICAgICAgICAgICAgY2FzZSBIb3Jpem9udGFsQWxpZ25tZW50XzEuSG9yaXpvbnRhbEFsaWdubWVudC5FbmQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnRlbnQtZGl2aWRlci0tZW5kJztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiAnY29udGVudC1kaXZpZGVyLS1jZW50ZXInO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBfX2RlY29yYXRlKFtcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLmJpbmRhYmxlLFxyXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXHJcbiAgICBdLCBDb250ZW50RGl2aWRlci5wcm90b3R5cGUsIFwibW9kZWxcIiwgdm9pZCAwKTtcclxuICAgIF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuYmluZGFibGUsXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIFN0cmluZylcclxuICAgIF0sIENvbnRlbnREaXZpZGVyLnByb3RvdHlwZSwgXCJhbGlnbm1lbnRcIiwgdm9pZCAwKTtcclxuICAgIHJldHVybiBDb250ZW50RGl2aWRlcjtcclxufSgpKTtcclxuZXhwb3J0cy5Db250ZW50RGl2aWRlciA9IENvbnRlbnREaXZpZGVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///components/content-divider/content-divider\n')},"components/content-divider/content-divider.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<hr if.bind=\\"model.isVisible\\" css.bind=\\"color\\" class=\\"content-divider ${modifier}\\" />\\r\\n<\/template>";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9jb250ZW50LWRpdmlkZXIvY29udGVudC1kaXZpZGVyLmh0bWw/NmYxMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrR0FBK0csU0FBUyIsImZpbGUiOiJjb21wb25lbnRzL2NvbnRlbnQtZGl2aWRlci9jb250ZW50LWRpdmlkZXIuaHRtbC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gXCI8dGVtcGxhdGU+XFxyXFxuXFx0PGhyIGlmLmJpbmQ9XFxcIm1vZGVsLmlzVmlzaWJsZVxcXCIgY3NzLmJpbmQ9XFxcImNvbG9yXFxcIiBjbGFzcz1cXFwiY29udGVudC1kaXZpZGVyICR7bW9kaWZpZXJ9XFxcIiAvPlxcclxcbjwvdGVtcGxhdGU+XCI7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/content-divider/content-divider.html\n')},"components/copy-block/copy-block":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar HorizontalAlignment_1 = __webpack_require__(19);\r\nvar CopyBlockDisplayType_1 = __webpack_require__(183);\r\nvar CopyBlock = /** @class */ (function () {\r\n    function CopyBlock() {\r\n        this.modifier = \'\';\r\n        this.bodyModifier = \'\';\r\n        this.background = \'\';\r\n        this.bodyColor = \'\';\r\n        this.headingColor = \'\';\r\n    }\r\n    CopyBlock.prototype.activate = function (model) {\r\n        this.model = model;\r\n    };\r\n    CopyBlock.prototype.attached = function () {\r\n        this.modifier = this.getModifierClass(this.model.displayType) + " " + this.getAlignmentClass(this.model.horizontalAlignment);\r\n        if (this.model.backgroundImage && this.model.backgroundImage.hasImage) {\r\n            this.background = "background-image: url(\'" + this.model.backgroundImage.fullPath + "\');";\r\n        }\r\n        if (this.model.headingColor) {\r\n            this.headingColor = "color: " + this.model.headingColor + ";";\r\n        }\r\n        if (this.model.bodyColor) {\r\n            this.bodyColor = "color: " + this.model.bodyColor + ";";\r\n        }\r\n    };\r\n    CopyBlock.prototype.getModifierClass = function (displayType) {\r\n        switch (displayType) {\r\n            case CopyBlockDisplayType_1.CopyBlockDisplayType.TravelSection:\r\n                return \'copy-block--has-background\';\r\n            default:\r\n                return \'\';\r\n        }\r\n    };\r\n    CopyBlock.prototype.getAlignmentClass = function (copyAlignmentClass) {\r\n        switch (copyAlignmentClass) {\r\n            case HorizontalAlignment_1.HorizontalAlignment.Start:\r\n                return \'copy-block--start start-xs\';\r\n            case HorizontalAlignment_1.HorizontalAlignment.End:\r\n                return \'copy-block--end end-xs\';\r\n            default:\r\n                return \'copy-block--center center-xs\';\r\n        }\r\n    };\r\n    CopyBlock.prototype.getContentDividerAlignment = function () {\r\n        return this.model.horizontalAlignment;\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Object)\r\n    ], CopyBlock.prototype, "model", void 0);\r\n    return CopyBlock;\r\n}());\r\nexports.CopyBlock = CopyBlock;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9jb3B5LWJsb2NrL2NvcHktYmxvY2sudHM/NTVmNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxRQUFRO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RCwwQkFBMEIsbUJBQU8sQ0FBQyxtQkFBbUI7QUFDckQsNEJBQTRCLG1CQUFPLENBQUMsRUFBaUM7QUFDckUsNkJBQTZCLG1CQUFPLENBQUMsR0FBd0I7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9HQUFvRztBQUNwRztBQUNBO0FBQ0Esd0VBQXdFO0FBQ3hFO0FBQ0E7QUFDQSxrRUFBa0U7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QiLCJmaWxlIjoiY29tcG9uZW50cy9jb3B5LWJsb2NrL2NvcHktYmxvY2suanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxudmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufTtcclxudmFyIF9fbWV0YWRhdGEgPSAodGhpcyAmJiB0aGlzLl9fbWV0YWRhdGEpIHx8IGZ1bmN0aW9uIChrLCB2KSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEoaywgdik7XHJcbn07XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIGF1cmVsaWFfZnJhbWV3b3JrXzEgPSByZXF1aXJlKFwiYXVyZWxpYS1mcmFtZXdvcmtcIik7XHJcbnZhciBIb3Jpem9udGFsQWxpZ25tZW50XzEgPSByZXF1aXJlKFwiLi4vLi4vZW51bXMvSG9yaXpvbnRhbEFsaWdubWVudFwiKTtcclxudmFyIENvcHlCbG9ja0Rpc3BsYXlUeXBlXzEgPSByZXF1aXJlKFwiLi9Db3B5QmxvY2tEaXNwbGF5VHlwZVwiKTtcclxudmFyIENvcHlCbG9jayA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIENvcHlCbG9jaygpIHtcclxuICAgICAgICB0aGlzLm1vZGlmaWVyID0gJyc7XHJcbiAgICAgICAgdGhpcy5ib2R5TW9kaWZpZXIgPSAnJztcclxuICAgICAgICB0aGlzLmJhY2tncm91bmQgPSAnJztcclxuICAgICAgICB0aGlzLmJvZHlDb2xvciA9ICcnO1xyXG4gICAgICAgIHRoaXMuaGVhZGluZ0NvbG9yID0gJyc7XHJcbiAgICB9XHJcbiAgICBDb3B5QmxvY2sucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24gKG1vZGVsKSB7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG1vZGVsO1xyXG4gICAgfTtcclxuICAgIENvcHlCbG9jay5wcm90b3R5cGUuYXR0YWNoZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5tb2RpZmllciA9IHRoaXMuZ2V0TW9kaWZpZXJDbGFzcyh0aGlzLm1vZGVsLmRpc3BsYXlUeXBlKSArIFwiIFwiICsgdGhpcy5nZXRBbGlnbm1lbnRDbGFzcyh0aGlzLm1vZGVsLmhvcml6b250YWxBbGlnbm1lbnQpO1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmJhY2tncm91bmRJbWFnZSAmJiB0aGlzLm1vZGVsLmJhY2tncm91bmRJbWFnZS5oYXNJbWFnZSkge1xyXG4gICAgICAgICAgICB0aGlzLmJhY2tncm91bmQgPSBcImJhY2tncm91bmQtaW1hZ2U6IHVybCgnXCIgKyB0aGlzLm1vZGVsLmJhY2tncm91bmRJbWFnZS5mdWxsUGF0aCArIFwiJyk7XCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmhlYWRpbmdDb2xvcikge1xyXG4gICAgICAgICAgICB0aGlzLmhlYWRpbmdDb2xvciA9IFwiY29sb3I6IFwiICsgdGhpcy5tb2RlbC5oZWFkaW5nQ29sb3IgKyBcIjtcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwuYm9keUNvbG9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYm9keUNvbG9yID0gXCJjb2xvcjogXCIgKyB0aGlzLm1vZGVsLmJvZHlDb2xvciArIFwiO1wiO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBDb3B5QmxvY2sucHJvdG90eXBlLmdldE1vZGlmaWVyQ2xhc3MgPSBmdW5jdGlvbiAoZGlzcGxheVR5cGUpIHtcclxuICAgICAgICBzd2l0Y2ggKGRpc3BsYXlUeXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgQ29weUJsb2NrRGlzcGxheVR5cGVfMS5Db3B5QmxvY2tEaXNwbGF5VHlwZS5UcmF2ZWxTZWN0aW9uOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdjb3B5LWJsb2NrLS1oYXMtYmFja2dyb3VuZCc7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIENvcHlCbG9jay5wcm90b3R5cGUuZ2V0QWxpZ25tZW50Q2xhc3MgPSBmdW5jdGlvbiAoY29weUFsaWdubWVudENsYXNzKSB7XHJcbiAgICAgICAgc3dpdGNoIChjb3B5QWxpZ25tZW50Q2xhc3MpIHtcclxuICAgICAgICAgICAgY2FzZSBIb3Jpem9udGFsQWxpZ25tZW50XzEuSG9yaXpvbnRhbEFsaWdubWVudC5TdGFydDpcclxuICAgICAgICAgICAgICAgIHJldHVybiAnY29weS1ibG9jay0tc3RhcnQgc3RhcnQteHMnO1xyXG4gICAgICAgICAgICBjYXNlIEhvcml6b250YWxBbGlnbm1lbnRfMS5Ib3Jpem9udGFsQWxpZ25tZW50LkVuZDpcclxuICAgICAgICAgICAgICAgIHJldHVybiAnY29weS1ibG9jay0tZW5kIGVuZC14cyc7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2NvcHktYmxvY2stLWNlbnRlciBjZW50ZXIteHMnO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBDb3B5QmxvY2sucHJvdG90eXBlLmdldENvbnRlbnREaXZpZGVyQWxpZ25tZW50ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsLmhvcml6b250YWxBbGlnbm1lbnQ7XHJcbiAgICB9O1xyXG4gICAgX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5iaW5kYWJsZSxcclxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxyXG4gICAgXSwgQ29weUJsb2NrLnByb3RvdHlwZSwgXCJtb2RlbFwiLCB2b2lkIDApO1xyXG4gICAgcmV0dXJuIENvcHlCbG9jaztcclxufSgpKTtcclxuZXhwb3J0cy5Db3B5QmxvY2sgPSBDb3B5QmxvY2s7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///components/copy-block/copy-block\n')},"components/copy-block/copy-block.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<div css.bind=\\"background\\" class=\\"copy-block ${modifier}\\">\\r\\n\\t\\t<h3 if.bind=\\"model.heading.length\\" innerhtml.bind=\\"model.heading\\" css.bind=\\"headingColor\\" class=\\"copy-block__heading\\"><\/h3>\\r\\n\\t\\t<content-divider model.bind=\\"model.contentDivider\\" alignment.bind=\\"getContentDividerAlignment()\\" containerless><\/content-divider>\\r\\n\\t\\t<div if.bind=\\"model.subhead.length\\" innerhtml.bind=\\"model.subhead\\" class=\\"ds-subhead\\"><\/div>\\r\\n\\t\\t<div css.bind=\\"bodyColor\\" if.bind=\\"model.body.length\\" innerhtml.bind=\\"model.body\\" class=\\"copy-block__body ${bodyModifier}\\"><\/div>\\r\\n\\t<\/div>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9jb3B5LWJsb2NrL2NvcHktYmxvY2suaHRtbD8yOTVjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG9GQUFvRixTQUFTLGdnQkFBZ2dCLGFBQWEiLCJmaWxlIjoiY29tcG9uZW50cy9jb3B5LWJsb2NrL2NvcHktYmxvY2suaHRtbC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gXCI8dGVtcGxhdGU+XFxyXFxuXFx0PGRpdiBjc3MuYmluZD1cXFwiYmFja2dyb3VuZFxcXCIgY2xhc3M9XFxcImNvcHktYmxvY2sgJHttb2RpZmllcn1cXFwiPlxcclxcblxcdFxcdDxoMyBpZi5iaW5kPVxcXCJtb2RlbC5oZWFkaW5nLmxlbmd0aFxcXCIgaW5uZXJodG1sLmJpbmQ9XFxcIm1vZGVsLmhlYWRpbmdcXFwiIGNzcy5iaW5kPVxcXCJoZWFkaW5nQ29sb3JcXFwiIGNsYXNzPVxcXCJjb3B5LWJsb2NrX19oZWFkaW5nXFxcIj48L2gzPlxcclxcblxcdFxcdDxjb250ZW50LWRpdmlkZXIgbW9kZWwuYmluZD1cXFwibW9kZWwuY29udGVudERpdmlkZXJcXFwiIGFsaWdubWVudC5iaW5kPVxcXCJnZXRDb250ZW50RGl2aWRlckFsaWdubWVudCgpXFxcIiBjb250YWluZXJsZXNzPjwvY29udGVudC1kaXZpZGVyPlxcclxcblxcdFxcdDxkaXYgaWYuYmluZD1cXFwibW9kZWwuc3ViaGVhZC5sZW5ndGhcXFwiIGlubmVyaHRtbC5iaW5kPVxcXCJtb2RlbC5zdWJoZWFkXFxcIiBjbGFzcz1cXFwiZHMtc3ViaGVhZFxcXCI+PC9kaXY+XFxyXFxuXFx0XFx0PGRpdiBjc3MuYmluZD1cXFwiYm9keUNvbG9yXFxcIiBpZi5iaW5kPVxcXCJtb2RlbC5ib2R5Lmxlbmd0aFxcXCIgaW5uZXJodG1sLmJpbmQ9XFxcIm1vZGVsLmJvZHlcXFwiIGNsYXNzPVxcXCJjb3B5LWJsb2NrX19ib2R5ICR7Ym9keU1vZGlmaWVyfVxcXCI+PC9kaXY+XFxyXFxuXFx0PC9kaXY+XFxyXFxuPC90ZW1wbGF0ZT5cXHJcXG5cIjsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///components/copy-block/copy-block.html\n')},"components/curated-trip/curated-trip":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError("Generator is already executing.");\r\n        while (_) try {\r\n            if (f = 1, y && (t = y[op[0] & 2 ? "return" : op[0] ? "throw" : "next"]) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [0, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar lodash_1 = __webpack_require__(20);\r\nvar SortUtilities_1 = __webpack_require__(25);\r\nvar SelectMenuItem_1 = __webpack_require__(13);\r\nvar SortOrder_1 = __webpack_require__(18);\r\nvar CuratedTripRepository_1 = __webpack_require__(182);\r\nvar CuratedTrip = /** @class */ (function () {\r\n    function CuratedTrip(curatedTripRepository) {\r\n        this.curatedTripRepository = curatedTripRepository;\r\n        this.arrivalMonths = [];\r\n        this.vacationStyle = [];\r\n        this.destination = [];\r\n        this.trips = [];\r\n        this.holidayList = [];\r\n        this.hasData = false;\r\n        this.hasErrors = false;\r\n        this.sortProperty = null;\r\n        this.sortOrder = null;\r\n        this.isHolidayWishList = false;\r\n        this.isHolidayWishListEligible = false;\r\n        this.isSelectionPeriodOpen = false;\r\n    }\r\n    Object.defineProperty(CuratedTrip.prototype, "isSorted", {\r\n        get: function () {\r\n            return this.sortProperty != null && this.sortOrder != null;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(CuratedTrip.prototype, "searchResultsCount", {\r\n        get: function () {\r\n            return this.trips.length;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(CuratedTrip.prototype, "sortOrderModifier", {\r\n        get: function () {\r\n            switch (this.sortOrder) {\r\n                case SortOrder_1.SortOrder.Ascending: {\r\n                    return \'--is-sorted-ascending\';\r\n                }\r\n                case SortOrder_1.SortOrder.Descending: {\r\n                    return \'--is-sorted-descending\';\r\n                }\r\n                default: {\r\n                    return \'\';\r\n                }\r\n            }\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    CuratedTrip.prototype.activate = function (model) {\r\n        var _this = this;\r\n        this.model = model;\r\n        try {\r\n            this.curatedTripRepository\r\n                .get(this.model.dryFlyId)\r\n                .then(function (curatedTripsModel) { return _this.init(curatedTripsModel); });\r\n        }\r\n        catch (exception) {\r\n            this.hasErrors = true;\r\n        }\r\n    };\r\n    CuratedTrip.prototype.applyFilter = function () {\r\n        var _this = this;\r\n        // filter vacation styles\r\n        var filteredTipsWithStyles = lodash_1.uniqBy(this.curatedTripsModel.tripSet\r\n            .filter(function (t) { return _this.selectedArrivalMonths.value === \'0\' || t.dataMonthId.toString() === (_this.selectedArrivalMonths.value); }), \'unitStyleID\');\r\n        var allVacationOptions = this.vacationStyle[0];\r\n        this.vacationStyle = filteredTipsWithStyles\r\n            .map(function (trip) { return new SelectMenuItem_1.SelectMenuItem(_this.curatedTripsModel.styles[trip.unitStyleID.toString()], trip.unitStyleID.toString()); });\r\n        this.vacationStyle.unshift(allVacationOptions);\r\n        var hasSelectedStyleInFilteredOptions = filteredTipsWithStyles.some(function (style) {\r\n            return style.unitStyleID.toString() === _this.selectedVacationStyle.value;\r\n        });\r\n        if (!hasSelectedStyleInFilteredOptions) {\r\n            this.selectedVacationStyle = this.vacationStyle[0];\r\n        }\r\n        // filter destinations\r\n        var filteredTipsForDestinations = lodash_1.uniqBy(this.curatedTripsModel.tripSet\r\n            .filter(function (t) { return _this.selectedArrivalMonths.value === \'0\' || t.dataMonthId.toString() === (_this.selectedArrivalMonths.value); })\r\n            .filter(function (t) { return _this.selectedHoliday.value === \'0\' || t.curatedTripSetId.toString() === (_this.selectedHoliday.value); })\r\n            .filter(function (t) { return _this.selectedVacationStyle.value === \'0\' || t.unitStyleID.toString() === (_this.selectedVacationStyle.value); }), \'locationID\');\r\n        var allDestinationOptions = this.destination[0];\r\n        this.destination = filteredTipsForDestinations\r\n            .map(function (trip) { return new SelectMenuItem_1.SelectMenuItem(_this.curatedTripsModel.destinations[trip.locationID], trip.locationID.toString()); });\r\n        this.destination.unshift(allDestinationOptions);\r\n        var hasSelectedDestinationInFilteredOptions = filteredTipsForDestinations.some(function (style) {\r\n            return style.locationID.toString() === _this.selectedDestination.value;\r\n        });\r\n        if (!hasSelectedDestinationInFilteredOptions) {\r\n            this.selectedDestination = this.destination[0];\r\n        }\r\n        var result = this.curatedTripsModel.tripSet\r\n            .filter(function (t) { return _this.selectedArrivalMonths.value === \'0\' || t.dataMonthId.toString() === _this.selectedArrivalMonths.value; })\r\n            .filter(function (t) { return _this.selectedVacationStyle.value === \'0\' || t.unitStyleID.toString() === _this.selectedVacationStyle.value; })\r\n            .filter(function (t) { return _this.selectedDestination.value === \'0\' || t.locationID.toString() === _this.selectedDestination.value; })\r\n            .filter(function (t) { return _this.selectedHoliday.value === \'0\' || t.curatedTripSetId.toString() === _this.selectedHoliday.value; });\r\n        return result;\r\n    };\r\n    CuratedTrip.prototype.filterTrips = function () {\r\n        var filteredTrips = this.applyFilter();\r\n        this.trips = this.isSorted\r\n            ? this.applySort(this.sortProperty, filteredTrips)\r\n            : filteredTrips;\r\n    };\r\n    CuratedTrip.prototype.reset = function () {\r\n        this.selectedArrivalMonths = this.arrivalMonths[0];\r\n        this.selectedVacationStyle = this.vacationStyle[0];\r\n        this.selectedDestination = this.destination[0];\r\n        this.selectedHoliday = this.holidayList[0];\r\n        this.sortProperty = null;\r\n        this.sortOrder = null;\r\n        var defaultSortProperty = this.curatedTripsModel.showTripValue ? \'value\' : \'checkInDate\';\r\n        this.sortByColumn(defaultSortProperty);\r\n    };\r\n    CuratedTrip.prototype.sortByColumn = function (sortProperty, isAscendingOnly) {\r\n        if (isAscendingOnly === void 0) { isAscendingOnly = true; }\r\n        var filteredTrips = this.applyFilter();\r\n        this.toggleSort(sortProperty, isAscendingOnly);\r\n        this.trips = this.applySort(sortProperty, filteredTrips);\r\n    };\r\n    CuratedTrip.prototype.toggleSort = function (sortProperty, isAscendingOnly) {\r\n        if (isAscendingOnly || !this.isSorted || sortProperty !== this.sortProperty) {\r\n            this.applyDefaultSort(sortProperty);\r\n        }\r\n        else {\r\n            this.sortOrder = (this.sortOrder === SortOrder_1.SortOrder.Ascending)\r\n                ? SortOrder_1.SortOrder.Descending\r\n                : SortOrder_1.SortOrder.Ascending;\r\n        }\r\n    };\r\n    CuratedTrip.prototype.addHolidayWishListUnitSelection = function (trip) {\r\n        var _this = this;\r\n        if (!trip.isSelected) {\r\n            this.curatedTripRepository.saveHolidayWishListUnitSelection(trip.curatedTripSetId, trip.unitID)\r\n                .then(function (peakBookingUnitId) {\r\n                var tripQueryFunctor = function (t) { return t.unitID === trip.unitID && t.curatedTripSetId === trip.curatedTripSetId; };\r\n                var trips = _this.trips.find(tripQueryFunctor);\r\n                var curatedTrips = _this.curatedTripsModel.tripSet.find(tripQueryFunctor);\r\n                trips.isSelected = true;\r\n                curatedTrips.isSelected = true;\r\n            });\r\n        }\r\n    };\r\n    CuratedTrip.prototype.applyDefaultSort = function (sortProperty) {\r\n        this.sortOrder = (sortProperty === \'value\') ? SortOrder_1.SortOrder.Descending : SortOrder_1.SortOrder.Ascending;\r\n        this.sortProperty = sortProperty;\r\n    };\r\n    CuratedTrip.prototype.applySort = function (sortProperty, trips) {\r\n        var shouldNotApplySort = !trips || trips.length < 2;\r\n        if (shouldNotApplySort) {\r\n            return trips;\r\n        }\r\n        var propertyType = typeof trips[0][sortProperty];\r\n        switch (propertyType) {\r\n            case \'string\': {\r\n                return SortUtilities_1.sortObjectArrayByString(sortProperty, trips, this.sortOrder);\r\n            }\r\n            case \'number\': {\r\n                return SortUtilities_1.sortObjectArrayByNumber(sortProperty, trips, this.sortOrder);\r\n            }\r\n            default: {\r\n                return trips;\r\n            }\r\n        }\r\n    };\r\n    CuratedTrip.prototype.getHolidayWishListOverview = function (holidayWishListIds) {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var holidayWishListOverview;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.curatedTripRepository.getHolidayWishListOverview(holidayWishListIds)\r\n                            .then(function (holidayWishListOverview) { return holidayWishListOverview; })];\r\n                    case 1:\r\n                        holidayWishListOverview = _a.sent();\r\n                        return [2 /*return*/, holidayWishListOverview];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    CuratedTrip.prototype.init = function (curatedTripsModel) {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var _this = this;\r\n            var jauntPassList, holidayWishList, holidayWishListOverview_1;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        this.curatedTripsModel = curatedTripsModel;\r\n                        this.hasData = true;\r\n                        jauntPassList = 11;\r\n                        holidayWishList = 0;\r\n                        if (!(this.model.dryFlyId === holidayWishList)) return [3 /*break*/, 2];\r\n                        this.isHolidayWishList = true;\r\n                        return [4 /*yield*/, this.getHolidayWishListOverview(Array.from(new Set(this.curatedTripsModel.tripSet.map(function (item) { return item.curatedTripSetId; }))))];\r\n                    case 1:\r\n                        holidayWishListOverview_1 = _a.sent();\r\n                        if (holidayWishListOverview_1.accountWishListUnitSummary && holidayWishListOverview_1.accountWishListUnitSummary.length > 0) {\r\n                            curatedTripsModel.tripSet.forEach(function (trip) { return trip.isSelected = holidayWishListOverview_1.accountWishListUnitSummary\r\n                                .some(function (u) { return u.holidayWishListId == trip.curatedTripSetId && u.unitId == trip.unitID; }); });\r\n                        }\r\n                        this.isSelectionPeriodOpen = holidayWishListOverview_1.isSelectionPeriodOpen;\r\n                        this.isHolidayWishListEligible = holidayWishListOverview_1.isPeakBookingEligible;\r\n                        this.holidayList = holidayWishListOverview_1.holidayWishListPrograms\r\n                            .map(function (program) { return new SelectMenuItem_1.SelectMenuItem(program.name, program.id.toString()); });\r\n                        _a.label = 2;\r\n                    case 2:\r\n                        this.holidayList.unshift(new SelectMenuItem_1.SelectMenuItem(\'All Holidays\', \'0\'));\r\n                        this.arrivalMonths =\r\n                            Object\r\n                                .keys(this.curatedTripsModel.dates)\r\n                                .map(function (dateString) { return new SelectMenuItem_1.SelectMenuItem(_this.curatedTripsModel.dates[dateString], dateString); })\r\n                                .filter(function (date) { return _this.model.dryFlyId === jauntPassList ? date.value !== \'0\' : date; });\r\n                        this.vacationStyle = Object\r\n                            .keys(this.curatedTripsModel.styles)\r\n                            .sort(function (a, b) { return SortUtilities_1.filterListSortComparer(a, b, _this.curatedTripsModel.styles); })\r\n                            .map(function (styleId) { return new SelectMenuItem_1.SelectMenuItem(_this.curatedTripsModel.styles[styleId.toString()], styleId.toString()); });\r\n                        this.destination = Object\r\n                            .keys(this.curatedTripsModel.destinations)\r\n                            .sort(function (a, b) { return SortUtilities_1.filterListSortComparer(a, b, _this.curatedTripsModel.destinations); })\r\n                            .map(function (destinationId) { return new SelectMenuItem_1.SelectMenuItem(_this.curatedTripsModel.destinations[destinationId], destinationId); });\r\n                        this.reset();\r\n                        return [2 /*return*/];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Object)\r\n    ], CuratedTrip.prototype, "model", void 0);\r\n    __decorate([\r\n        aurelia_framework_1.computedFrom(\'sortOrder\', \'sortProperty\'),\r\n        __metadata("design:type", Boolean),\r\n        __metadata("design:paramtypes", [])\r\n    ], CuratedTrip.prototype, "isSorted", null);\r\n    __decorate([\r\n        aurelia_framework_1.computedFrom(\'trips.length\'),\r\n        __metadata("design:type", Object),\r\n        __metadata("design:paramtypes", [])\r\n    ], CuratedTrip.prototype, "searchResultsCount", null);\r\n    CuratedTrip = __decorate([\r\n        aurelia_framework_1.autoinject,\r\n        __metadata("design:paramtypes", [CuratedTripRepository_1.CuratedTripRepository])\r\n    ], CuratedTrip);\r\n    return CuratedTrip;\r\n}());\r\nexports.CuratedTrip = CuratedTrip;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9jdXJhdGVkLXRyaXAvY3VyYXRlZC10cmlwLnRzPzdmNjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsUUFBUTtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxNQUFNLDZCQUE2QixFQUFFLFlBQVksV0FBVyxFQUFFO0FBQ2pHLGtDQUFrQyxNQUFNLGlDQUFpQyxFQUFFLFlBQVksV0FBVyxFQUFFO0FBQ3BHLCtCQUErQixpRUFBaUUsdUJBQXVCLEVBQUUsNEJBQTRCO0FBQ3JKO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxhQUFhLDZCQUE2QiwwQkFBMEIsYUFBYSxFQUFFLHFCQUFxQjtBQUN4RyxnQkFBZ0IscURBQXFELG9FQUFvRSxhQUFhLEVBQUU7QUFDeEosc0JBQXNCLHNCQUFzQixxQkFBcUIsR0FBRztBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkMsa0NBQWtDLFNBQVM7QUFDM0Msa0NBQWtDLFdBQVcsVUFBVTtBQUN2RCx5Q0FBeUMsY0FBYztBQUN2RDtBQUNBLDZHQUE2RyxPQUFPLFVBQVU7QUFDOUgsZ0ZBQWdGLGlCQUFpQixPQUFPO0FBQ3hHLHdEQUF3RCxnQkFBZ0IsUUFBUSxPQUFPO0FBQ3ZGLDhDQUE4QyxnQkFBZ0IsZ0JBQWdCLE9BQU87QUFDckY7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBLFNBQVMsWUFBWSxhQUFhLE9BQU8sRUFBRSxVQUFVLFdBQVc7QUFDaEUsbUNBQW1DLFNBQVM7QUFDNUM7QUFDQTtBQUNBLDhDQUE4QyxjQUFjO0FBQzVELDBCQUEwQixtQkFBTyxDQUFDLG1CQUFtQjtBQUNyRCxlQUFlLG1CQUFPLENBQUMsRUFBUTtBQUMvQixzQkFBc0IsbUJBQU8sQ0FBQyxFQUErQjtBQUM3RCx1QkFBdUIsbUJBQU8sQ0FBQyxFQUErQjtBQUM5RCxrQkFBa0IsbUJBQU8sQ0FBQyxFQUE2QjtBQUN2RCw4QkFBOEIsbUJBQU8sQ0FBQyxHQUF5QjtBQUMvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9ELHNDQUFzQyxFQUFFO0FBQzVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxzSEFBc0gsRUFBRTtBQUMxSjtBQUNBO0FBQ0Esa0NBQWtDLHNJQUFzSSxFQUFFO0FBQzFLO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLHNIQUFzSCxFQUFFO0FBQzFKLGtDQUFrQywrR0FBK0csRUFBRTtBQUNuSixrQ0FBa0Msc0hBQXNILEVBQUU7QUFDMUo7QUFDQTtBQUNBLGtDQUFrQywrSEFBK0gsRUFBRTtBQUNuSztBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0Msb0hBQW9ILEVBQUU7QUFDeEosa0NBQWtDLG9IQUFvSCxFQUFFO0FBQ3hKLGtDQUFrQywrR0FBK0csRUFBRTtBQUNuSixrQ0FBa0MsNkdBQTZHLEVBQUU7QUFDako7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsd0JBQXdCO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFELGlGQUFpRjtBQUN0STtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzRUFBc0UsZ0NBQWdDLEVBQUU7QUFDeEc7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvSkFBb0osOEJBQThCLEVBQUU7QUFDcEw7QUFDQTtBQUNBO0FBQ0EsK0VBQStFO0FBQy9FLG9EQUFvRCxnRkFBZ0YsRUFBRSxFQUFFLEVBQUU7QUFDMUk7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQsaUZBQWlGLEVBQUU7QUFDeEk7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNERBQTRELG1HQUFtRyxFQUFFO0FBQ2pLLHlEQUF5RCwyRUFBMkUsRUFBRTtBQUN0STtBQUNBO0FBQ0EsbURBQW1ELHFGQUFxRixFQUFFO0FBQzFJLHFEQUFxRCxvSEFBb0gsRUFBRTtBQUMzSztBQUNBO0FBQ0EsbURBQW1ELDJGQUEyRixFQUFFO0FBQ2hKLDJEQUEyRCxnSEFBZ0gsRUFBRTtBQUM3SztBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QiLCJmaWxlIjoiY29tcG9uZW50cy9jdXJhdGVkLXRyaXAvY3VyYXRlZC10cmlwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2RlY29yYXRlID0gKHRoaXMgJiYgdGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn07XHJcbnZhciBfX21ldGFkYXRhID0gKHRoaXMgJiYgdGhpcy5fX21ldGFkYXRhKSB8fCBmdW5jdGlvbiAoaywgdikge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xyXG59O1xyXG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUocmVzdWx0LnZhbHVlKTsgfSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59O1xyXG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xyXG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcclxuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XHJcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xyXG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSB5W29wWzBdICYgMiA/IFwicmV0dXJuXCIgOiBvcFswXSA/IFwidGhyb3dcIiA6IFwibmV4dFwiXSkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbMCwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59O1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBhdXJlbGlhX2ZyYW1ld29ya18xID0gcmVxdWlyZShcImF1cmVsaWEtZnJhbWV3b3JrXCIpO1xyXG52YXIgbG9kYXNoXzEgPSByZXF1aXJlKFwibG9kYXNoXCIpO1xyXG52YXIgU29ydFV0aWxpdGllc18xID0gcmVxdWlyZShcIi4uLy4uL3V0aWxpdGllcy9Tb3J0VXRpbGl0aWVzXCIpO1xyXG52YXIgU2VsZWN0TWVudUl0ZW1fMSA9IHJlcXVpcmUoXCIuLi9zZWxlY3QtbWVudS9TZWxlY3RNZW51SXRlbVwiKTtcclxudmFyIFNvcnRPcmRlcl8xID0gcmVxdWlyZShcIi4vLi4vLi4vdXRpbGl0aWVzL1NvcnRPcmRlclwiKTtcclxudmFyIEN1cmF0ZWRUcmlwUmVwb3NpdG9yeV8xID0gcmVxdWlyZShcIi4vQ3VyYXRlZFRyaXBSZXBvc2l0b3J5XCIpO1xyXG52YXIgQ3VyYXRlZFRyaXAgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBDdXJhdGVkVHJpcChjdXJhdGVkVHJpcFJlcG9zaXRvcnkpIHtcclxuICAgICAgICB0aGlzLmN1cmF0ZWRUcmlwUmVwb3NpdG9yeSA9IGN1cmF0ZWRUcmlwUmVwb3NpdG9yeTtcclxuICAgICAgICB0aGlzLmFycml2YWxNb250aHMgPSBbXTtcclxuICAgICAgICB0aGlzLnZhY2F0aW9uU3R5bGUgPSBbXTtcclxuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uID0gW107XHJcbiAgICAgICAgdGhpcy50cmlwcyA9IFtdO1xyXG4gICAgICAgIHRoaXMuaG9saWRheUxpc3QgPSBbXTtcclxuICAgICAgICB0aGlzLmhhc0RhdGEgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmhhc0Vycm9ycyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc29ydFByb3BlcnR5ID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNvcnRPcmRlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5pc0hvbGlkYXlXaXNoTGlzdCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNIb2xpZGF5V2lzaExpc3RFbGlnaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNTZWxlY3Rpb25QZXJpb2RPcGVuID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ3VyYXRlZFRyaXAucHJvdG90eXBlLCBcImlzU29ydGVkXCIsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc29ydFByb3BlcnR5ICE9IG51bGwgJiYgdGhpcy5zb3J0T3JkZXIgIT0gbnVsbDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXHJcbiAgICB9KTtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDdXJhdGVkVHJpcC5wcm90b3R5cGUsIFwic2VhcmNoUmVzdWx0c0NvdW50XCIsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJpcHMubGVuZ3RoO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgIH0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEN1cmF0ZWRUcmlwLnByb3RvdHlwZSwgXCJzb3J0T3JkZXJNb2RpZmllclwiLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5zb3J0T3JkZXIpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgU29ydE9yZGVyXzEuU29ydE9yZGVyLkFzY2VuZGluZzoge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnLS1pcy1zb3J0ZWQtYXNjZW5kaW5nJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhc2UgU29ydE9yZGVyXzEuU29ydE9yZGVyLkRlc2NlbmRpbmc6IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJy0taXMtc29ydGVkLWRlc2NlbmRpbmcnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgIH0pO1xyXG4gICAgQ3VyYXRlZFRyaXAucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24gKG1vZGVsKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB0aGlzLm1vZGVsID0gbW9kZWw7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy5jdXJhdGVkVHJpcFJlcG9zaXRvcnlcclxuICAgICAgICAgICAgICAgIC5nZXQodGhpcy5tb2RlbC5kcnlGbHlJZClcclxuICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChjdXJhdGVkVHJpcHNNb2RlbCkgeyByZXR1cm4gX3RoaXMuaW5pdChjdXJhdGVkVHJpcHNNb2RlbCk7IH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXhjZXB0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFzRXJyb3JzID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgQ3VyYXRlZFRyaXAucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgLy8gZmlsdGVyIHZhY2F0aW9uIHN0eWxlc1xyXG4gICAgICAgIHZhciBmaWx0ZXJlZFRpcHNXaXRoU3R5bGVzID0gbG9kYXNoXzEudW5pcUJ5KHRoaXMuY3VyYXRlZFRyaXBzTW9kZWwudHJpcFNldFxyXG4gICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uICh0KSB7IHJldHVybiBfdGhpcy5zZWxlY3RlZEFycml2YWxNb250aHMudmFsdWUgPT09ICcwJyB8fCB0LmRhdGFNb250aElkLnRvU3RyaW5nKCkgPT09IChfdGhpcy5zZWxlY3RlZEFycml2YWxNb250aHMudmFsdWUpOyB9KSwgJ3VuaXRTdHlsZUlEJyk7XHJcbiAgICAgICAgdmFyIGFsbFZhY2F0aW9uT3B0aW9ucyA9IHRoaXMudmFjYXRpb25TdHlsZVswXTtcclxuICAgICAgICB0aGlzLnZhY2F0aW9uU3R5bGUgPSBmaWx0ZXJlZFRpcHNXaXRoU3R5bGVzXHJcbiAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHRyaXApIHsgcmV0dXJuIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKF90aGlzLmN1cmF0ZWRUcmlwc01vZGVsLnN0eWxlc1t0cmlwLnVuaXRTdHlsZUlELnRvU3RyaW5nKCldLCB0cmlwLnVuaXRTdHlsZUlELnRvU3RyaW5nKCkpOyB9KTtcclxuICAgICAgICB0aGlzLnZhY2F0aW9uU3R5bGUudW5zaGlmdChhbGxWYWNhdGlvbk9wdGlvbnMpO1xyXG4gICAgICAgIHZhciBoYXNTZWxlY3RlZFN0eWxlSW5GaWx0ZXJlZE9wdGlvbnMgPSBmaWx0ZXJlZFRpcHNXaXRoU3R5bGVzLnNvbWUoZnVuY3Rpb24gKHN0eWxlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzdHlsZS51bml0U3R5bGVJRC50b1N0cmluZygpID09PSBfdGhpcy5zZWxlY3RlZFZhY2F0aW9uU3R5bGUudmFsdWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKCFoYXNTZWxlY3RlZFN0eWxlSW5GaWx0ZXJlZE9wdGlvbnMpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhY2F0aW9uU3R5bGUgPSB0aGlzLnZhY2F0aW9uU3R5bGVbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGZpbHRlciBkZXN0aW5hdGlvbnNcclxuICAgICAgICB2YXIgZmlsdGVyZWRUaXBzRm9yRGVzdGluYXRpb25zID0gbG9kYXNoXzEudW5pcUJ5KHRoaXMuY3VyYXRlZFRyaXBzTW9kZWwudHJpcFNldFxyXG4gICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uICh0KSB7IHJldHVybiBfdGhpcy5zZWxlY3RlZEFycml2YWxNb250aHMudmFsdWUgPT09ICcwJyB8fCB0LmRhdGFNb250aElkLnRvU3RyaW5nKCkgPT09IChfdGhpcy5zZWxlY3RlZEFycml2YWxNb250aHMudmFsdWUpOyB9KVxyXG4gICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uICh0KSB7IHJldHVybiBfdGhpcy5zZWxlY3RlZEhvbGlkYXkudmFsdWUgPT09ICcwJyB8fCB0LmN1cmF0ZWRUcmlwU2V0SWQudG9TdHJpbmcoKSA9PT0gKF90aGlzLnNlbGVjdGVkSG9saWRheS52YWx1ZSk7IH0pXHJcbiAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHQpIHsgcmV0dXJuIF90aGlzLnNlbGVjdGVkVmFjYXRpb25TdHlsZS52YWx1ZSA9PT0gJzAnIHx8IHQudW5pdFN0eWxlSUQudG9TdHJpbmcoKSA9PT0gKF90aGlzLnNlbGVjdGVkVmFjYXRpb25TdHlsZS52YWx1ZSk7IH0pLCAnbG9jYXRpb25JRCcpO1xyXG4gICAgICAgIHZhciBhbGxEZXN0aW5hdGlvbk9wdGlvbnMgPSB0aGlzLmRlc3RpbmF0aW9uWzBdO1xyXG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24gPSBmaWx0ZXJlZFRpcHNGb3JEZXN0aW5hdGlvbnNcclxuICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAodHJpcCkgeyByZXR1cm4gbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oX3RoaXMuY3VyYXRlZFRyaXBzTW9kZWwuZGVzdGluYXRpb25zW3RyaXAubG9jYXRpb25JRF0sIHRyaXAubG9jYXRpb25JRC50b1N0cmluZygpKTsgfSk7XHJcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi51bnNoaWZ0KGFsbERlc3RpbmF0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgdmFyIGhhc1NlbGVjdGVkRGVzdGluYXRpb25JbkZpbHRlcmVkT3B0aW9ucyA9IGZpbHRlcmVkVGlwc0ZvckRlc3RpbmF0aW9ucy5zb21lKGZ1bmN0aW9uIChzdHlsZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gc3R5bGUubG9jYXRpb25JRC50b1N0cmluZygpID09PSBfdGhpcy5zZWxlY3RlZERlc3RpbmF0aW9uLnZhbHVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICghaGFzU2VsZWN0ZWREZXN0aW5hdGlvbkluRmlsdGVyZWRPcHRpb25zKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREZXN0aW5hdGlvbiA9IHRoaXMuZGVzdGluYXRpb25bMF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLmN1cmF0ZWRUcmlwc01vZGVsLnRyaXBTZXRcclxuICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAodCkgeyByZXR1cm4gX3RoaXMuc2VsZWN0ZWRBcnJpdmFsTW9udGhzLnZhbHVlID09PSAnMCcgfHwgdC5kYXRhTW9udGhJZC50b1N0cmluZygpID09PSBfdGhpcy5zZWxlY3RlZEFycml2YWxNb250aHMudmFsdWU7IH0pXHJcbiAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHQpIHsgcmV0dXJuIF90aGlzLnNlbGVjdGVkVmFjYXRpb25TdHlsZS52YWx1ZSA9PT0gJzAnIHx8IHQudW5pdFN0eWxlSUQudG9TdHJpbmcoKSA9PT0gX3RoaXMuc2VsZWN0ZWRWYWNhdGlvblN0eWxlLnZhbHVlOyB9KVxyXG4gICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uICh0KSB7IHJldHVybiBfdGhpcy5zZWxlY3RlZERlc3RpbmF0aW9uLnZhbHVlID09PSAnMCcgfHwgdC5sb2NhdGlvbklELnRvU3RyaW5nKCkgPT09IF90aGlzLnNlbGVjdGVkRGVzdGluYXRpb24udmFsdWU7IH0pXHJcbiAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHQpIHsgcmV0dXJuIF90aGlzLnNlbGVjdGVkSG9saWRheS52YWx1ZSA9PT0gJzAnIHx8IHQuY3VyYXRlZFRyaXBTZXRJZC50b1N0cmluZygpID09PSBfdGhpcy5zZWxlY3RlZEhvbGlkYXkudmFsdWU7IH0pO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9O1xyXG4gICAgQ3VyYXRlZFRyaXAucHJvdG90eXBlLmZpbHRlclRyaXBzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBmaWx0ZXJlZFRyaXBzID0gdGhpcy5hcHBseUZpbHRlcigpO1xyXG4gICAgICAgIHRoaXMudHJpcHMgPSB0aGlzLmlzU29ydGVkXHJcbiAgICAgICAgICAgID8gdGhpcy5hcHBseVNvcnQodGhpcy5zb3J0UHJvcGVydHksIGZpbHRlcmVkVHJpcHMpXHJcbiAgICAgICAgICAgIDogZmlsdGVyZWRUcmlwcztcclxuICAgIH07XHJcbiAgICBDdXJhdGVkVHJpcC5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEFycml2YWxNb250aHMgPSB0aGlzLmFycml2YWxNb250aHNbMF07XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhY2F0aW9uU3R5bGUgPSB0aGlzLnZhY2F0aW9uU3R5bGVbMF07XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZERlc3RpbmF0aW9uID0gdGhpcy5kZXN0aW5hdGlvblswXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSG9saWRheSA9IHRoaXMuaG9saWRheUxpc3RbMF07XHJcbiAgICAgICAgdGhpcy5zb3J0UHJvcGVydHkgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc29ydE9yZGVyID0gbnVsbDtcclxuICAgICAgICB2YXIgZGVmYXVsdFNvcnRQcm9wZXJ0eSA9IHRoaXMuY3VyYXRlZFRyaXBzTW9kZWwuc2hvd1RyaXBWYWx1ZSA/ICd2YWx1ZScgOiAnY2hlY2tJbkRhdGUnO1xyXG4gICAgICAgIHRoaXMuc29ydEJ5Q29sdW1uKGRlZmF1bHRTb3J0UHJvcGVydHkpO1xyXG4gICAgfTtcclxuICAgIEN1cmF0ZWRUcmlwLnByb3RvdHlwZS5zb3J0QnlDb2x1bW4gPSBmdW5jdGlvbiAoc29ydFByb3BlcnR5LCBpc0FzY2VuZGluZ09ubHkpIHtcclxuICAgICAgICBpZiAoaXNBc2NlbmRpbmdPbmx5ID09PSB2b2lkIDApIHsgaXNBc2NlbmRpbmdPbmx5ID0gdHJ1ZTsgfVxyXG4gICAgICAgIHZhciBmaWx0ZXJlZFRyaXBzID0gdGhpcy5hcHBseUZpbHRlcigpO1xyXG4gICAgICAgIHRoaXMudG9nZ2xlU29ydChzb3J0UHJvcGVydHksIGlzQXNjZW5kaW5nT25seSk7XHJcbiAgICAgICAgdGhpcy50cmlwcyA9IHRoaXMuYXBwbHlTb3J0KHNvcnRQcm9wZXJ0eSwgZmlsdGVyZWRUcmlwcyk7XHJcbiAgICB9O1xyXG4gICAgQ3VyYXRlZFRyaXAucHJvdG90eXBlLnRvZ2dsZVNvcnQgPSBmdW5jdGlvbiAoc29ydFByb3BlcnR5LCBpc0FzY2VuZGluZ09ubHkpIHtcclxuICAgICAgICBpZiAoaXNBc2NlbmRpbmdPbmx5IHx8ICF0aGlzLmlzU29ydGVkIHx8IHNvcnRQcm9wZXJ0eSAhPT0gdGhpcy5zb3J0UHJvcGVydHkpIHtcclxuICAgICAgICAgICAgdGhpcy5hcHBseURlZmF1bHRTb3J0KHNvcnRQcm9wZXJ0eSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNvcnRPcmRlciA9ICh0aGlzLnNvcnRPcmRlciA9PT0gU29ydE9yZGVyXzEuU29ydE9yZGVyLkFzY2VuZGluZylcclxuICAgICAgICAgICAgICAgID8gU29ydE9yZGVyXzEuU29ydE9yZGVyLkRlc2NlbmRpbmdcclxuICAgICAgICAgICAgICAgIDogU29ydE9yZGVyXzEuU29ydE9yZGVyLkFzY2VuZGluZztcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgQ3VyYXRlZFRyaXAucHJvdG90eXBlLmFkZEhvbGlkYXlXaXNoTGlzdFVuaXRTZWxlY3Rpb24gPSBmdW5jdGlvbiAodHJpcCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgaWYgKCF0cmlwLmlzU2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJhdGVkVHJpcFJlcG9zaXRvcnkuc2F2ZUhvbGlkYXlXaXNoTGlzdFVuaXRTZWxlY3Rpb24odHJpcC5jdXJhdGVkVHJpcFNldElkLCB0cmlwLnVuaXRJRClcclxuICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChwZWFrQm9va2luZ1VuaXRJZCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHRyaXBRdWVyeUZ1bmN0b3IgPSBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC51bml0SUQgPT09IHRyaXAudW5pdElEICYmIHQuY3VyYXRlZFRyaXBTZXRJZCA9PT0gdHJpcC5jdXJhdGVkVHJpcFNldElkOyB9O1xyXG4gICAgICAgICAgICAgICAgdmFyIHRyaXBzID0gX3RoaXMudHJpcHMuZmluZCh0cmlwUXVlcnlGdW5jdG9yKTtcclxuICAgICAgICAgICAgICAgIHZhciBjdXJhdGVkVHJpcHMgPSBfdGhpcy5jdXJhdGVkVHJpcHNNb2RlbC50cmlwU2V0LmZpbmQodHJpcFF1ZXJ5RnVuY3Rvcik7XHJcbiAgICAgICAgICAgICAgICB0cmlwcy5pc1NlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGN1cmF0ZWRUcmlwcy5pc1NlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIEN1cmF0ZWRUcmlwLnByb3RvdHlwZS5hcHBseURlZmF1bHRTb3J0ID0gZnVuY3Rpb24gKHNvcnRQcm9wZXJ0eSkge1xyXG4gICAgICAgIHRoaXMuc29ydE9yZGVyID0gKHNvcnRQcm9wZXJ0eSA9PT0gJ3ZhbHVlJykgPyBTb3J0T3JkZXJfMS5Tb3J0T3JkZXIuRGVzY2VuZGluZyA6IFNvcnRPcmRlcl8xLlNvcnRPcmRlci5Bc2NlbmRpbmc7XHJcbiAgICAgICAgdGhpcy5zb3J0UHJvcGVydHkgPSBzb3J0UHJvcGVydHk7XHJcbiAgICB9O1xyXG4gICAgQ3VyYXRlZFRyaXAucHJvdG90eXBlLmFwcGx5U29ydCA9IGZ1bmN0aW9uIChzb3J0UHJvcGVydHksIHRyaXBzKSB7XHJcbiAgICAgICAgdmFyIHNob3VsZE5vdEFwcGx5U29ydCA9ICF0cmlwcyB8fCB0cmlwcy5sZW5ndGggPCAyO1xyXG4gICAgICAgIGlmIChzaG91bGROb3RBcHBseVNvcnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRyaXBzO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcHJvcGVydHlUeXBlID0gdHlwZW9mIHRyaXBzWzBdW3NvcnRQcm9wZXJ0eV07XHJcbiAgICAgICAgc3dpdGNoIChwcm9wZXJ0eVR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzoge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFNvcnRVdGlsaXRpZXNfMS5zb3J0T2JqZWN0QXJyYXlCeVN0cmluZyhzb3J0UHJvcGVydHksIHRyaXBzLCB0aGlzLnNvcnRPcmRlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSAnbnVtYmVyJzoge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFNvcnRVdGlsaXRpZXNfMS5zb3J0T2JqZWN0QXJyYXlCeU51bWJlcihzb3J0UHJvcGVydHksIHRyaXBzLCB0aGlzLnNvcnRPcmRlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRyaXBzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIEN1cmF0ZWRUcmlwLnByb3RvdHlwZS5nZXRIb2xpZGF5V2lzaExpc3RPdmVydmlldyA9IGZ1bmN0aW9uIChob2xpZGF5V2lzaExpc3RJZHMpIHtcclxuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBob2xpZGF5V2lzaExpc3RPdmVydmlldztcclxuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5jdXJhdGVkVHJpcFJlcG9zaXRvcnkuZ2V0SG9saWRheVdpc2hMaXN0T3ZlcnZpZXcoaG9saWRheVdpc2hMaXN0SWRzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGhvbGlkYXlXaXNoTGlzdE92ZXJ2aWV3KSB7IHJldHVybiBob2xpZGF5V2lzaExpc3RPdmVydmlldzsgfSldO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaG9saWRheVdpc2hMaXN0T3ZlcnZpZXcgPSBfYS5zZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBob2xpZGF5V2lzaExpc3RPdmVydmlld107XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIEN1cmF0ZWRUcmlwLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKGN1cmF0ZWRUcmlwc01vZGVsKSB7XHJcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgICAgICB2YXIgamF1bnRQYXNzTGlzdCwgaG9saWRheVdpc2hMaXN0LCBob2xpZGF5V2lzaExpc3RPdmVydmlld18xO1xyXG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cmF0ZWRUcmlwc01vZGVsID0gY3VyYXRlZFRyaXBzTW9kZWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFzRGF0YSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGphdW50UGFzc0xpc3QgPSAxMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaG9saWRheVdpc2hMaXN0ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEodGhpcy5tb2RlbC5kcnlGbHlJZCA9PT0gaG9saWRheVdpc2hMaXN0KSkgcmV0dXJuIFszIC8qYnJlYWsqLywgMl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNIb2xpZGF5V2lzaExpc3QgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLmdldEhvbGlkYXlXaXNoTGlzdE92ZXJ2aWV3KEFycmF5LmZyb20obmV3IFNldCh0aGlzLmN1cmF0ZWRUcmlwc01vZGVsLnRyaXBTZXQubWFwKGZ1bmN0aW9uIChpdGVtKSB7IHJldHVybiBpdGVtLmN1cmF0ZWRUcmlwU2V0SWQ7IH0pKSkpXTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvbGlkYXlXaXNoTGlzdE92ZXJ2aWV3XzEgPSBfYS5zZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChob2xpZGF5V2lzaExpc3RPdmVydmlld18xLmFjY291bnRXaXNoTGlzdFVuaXRTdW1tYXJ5ICYmIGhvbGlkYXlXaXNoTGlzdE92ZXJ2aWV3XzEuYWNjb3VudFdpc2hMaXN0VW5pdFN1bW1hcnkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyYXRlZFRyaXBzTW9kZWwudHJpcFNldC5mb3JFYWNoKGZ1bmN0aW9uICh0cmlwKSB7IHJldHVybiB0cmlwLmlzU2VsZWN0ZWQgPSBob2xpZGF5V2lzaExpc3RPdmVydmlld18xLmFjY291bnRXaXNoTGlzdFVuaXRTdW1tYXJ5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNvbWUoZnVuY3Rpb24gKHUpIHsgcmV0dXJuIHUuaG9saWRheVdpc2hMaXN0SWQgPT0gdHJpcC5jdXJhdGVkVHJpcFNldElkICYmIHUudW5pdElkID09IHRyaXAudW5pdElEOyB9KTsgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1NlbGVjdGlvblBlcmlvZE9wZW4gPSBob2xpZGF5V2lzaExpc3RPdmVydmlld18xLmlzU2VsZWN0aW9uUGVyaW9kT3BlbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0hvbGlkYXlXaXNoTGlzdEVsaWdpYmxlID0gaG9saWRheVdpc2hMaXN0T3ZlcnZpZXdfMS5pc1BlYWtCb29raW5nRWxpZ2libGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaG9saWRheUxpc3QgPSBob2xpZGF5V2lzaExpc3RPdmVydmlld18xLmhvbGlkYXlXaXNoTGlzdFByb2dyYW1zXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChwcm9ncmFtKSB7IHJldHVybiBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbShwcm9ncmFtLm5hbWUsIHByb2dyYW0uaWQudG9TdHJpbmcoKSk7IH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfYS5sYWJlbCA9IDI7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhvbGlkYXlMaXN0LnVuc2hpZnQobmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0FsbCBIb2xpZGF5cycsICcwJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFycml2YWxNb250aHMgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmtleXModGhpcy5jdXJhdGVkVHJpcHNNb2RlbC5kYXRlcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChkYXRlU3RyaW5nKSB7IHJldHVybiBuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbShfdGhpcy5jdXJhdGVkVHJpcHNNb2RlbC5kYXRlc1tkYXRlU3RyaW5nXSwgZGF0ZVN0cmluZyk7IH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gX3RoaXMubW9kZWwuZHJ5Rmx5SWQgPT09IGphdW50UGFzc0xpc3QgPyBkYXRlLnZhbHVlICE9PSAnMCcgOiBkYXRlOyB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWNhdGlvblN0eWxlID0gT2JqZWN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAua2V5cyh0aGlzLmN1cmF0ZWRUcmlwc01vZGVsLnN0eWxlcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBTb3J0VXRpbGl0aWVzXzEuZmlsdGVyTGlzdFNvcnRDb21wYXJlcihhLCBiLCBfdGhpcy5jdXJhdGVkVHJpcHNNb2RlbC5zdHlsZXMpOyB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoc3R5bGVJZCkgeyByZXR1cm4gbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oX3RoaXMuY3VyYXRlZFRyaXBzTW9kZWwuc3R5bGVzW3N0eWxlSWQudG9TdHJpbmcoKV0sIHN0eWxlSWQudG9TdHJpbmcoKSk7IH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uID0gT2JqZWN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAua2V5cyh0aGlzLmN1cmF0ZWRUcmlwc01vZGVsLmRlc3RpbmF0aW9ucylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBTb3J0VXRpbGl0aWVzXzEuZmlsdGVyTGlzdFNvcnRDb21wYXJlcihhLCBiLCBfdGhpcy5jdXJhdGVkVHJpcHNNb2RlbC5kZXN0aW5hdGlvbnMpOyB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoZGVzdGluYXRpb25JZCkgeyByZXR1cm4gbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oX3RoaXMuY3VyYXRlZFRyaXBzTW9kZWwuZGVzdGluYXRpb25zW2Rlc3RpbmF0aW9uSWRdLCBkZXN0aW5hdGlvbklkKTsgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICBfX2RlY29yYXRlKFtcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLmJpbmRhYmxlLFxyXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXHJcbiAgICBdLCBDdXJhdGVkVHJpcC5wcm90b3R5cGUsIFwibW9kZWxcIiwgdm9pZCAwKTtcclxuICAgIF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuY29tcHV0ZWRGcm9tKCdzb3J0T3JkZXInLCAnc29ydFByb3BlcnR5JyksXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEJvb2xlYW4pLFxyXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbXSlcclxuICAgIF0sIEN1cmF0ZWRUcmlwLnByb3RvdHlwZSwgXCJpc1NvcnRlZFwiLCBudWxsKTtcclxuICAgIF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuY29tcHV0ZWRGcm9tKCd0cmlwcy5sZW5ndGgnKSxcclxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KSxcclxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW10pXHJcbiAgICBdLCBDdXJhdGVkVHJpcC5wcm90b3R5cGUsIFwic2VhcmNoUmVzdWx0c0NvdW50XCIsIG51bGwpO1xyXG4gICAgQ3VyYXRlZFRyaXAgPSBfX2RlY29yYXRlKFtcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLmF1dG9pbmplY3QsXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtDdXJhdGVkVHJpcFJlcG9zaXRvcnlfMS5DdXJhdGVkVHJpcFJlcG9zaXRvcnldKVxyXG4gICAgXSwgQ3VyYXRlZFRyaXApO1xyXG4gICAgcmV0dXJuIEN1cmF0ZWRUcmlwO1xyXG59KCkpO1xyXG5leHBvcnRzLkN1cmF0ZWRUcmlwID0gQ3VyYXRlZFRyaXA7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///components/curated-trip/curated-trip\n')},"components/curated-trip/curated-trip.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<loading if.bind=\\"!hasData && !hasErrors\\" class=\\"loader\\"><\/loading>\\r\\n\\r\\n\\t<div if.bind=\\"hasData && !hasErrors\\" class=\\"curated-trip\\">\\r\\n\\r\\n\\t\\t<!-- filters -->\\r\\n\\t\\t<div class=\\"curated-trip__filters row bottom-xs around-xs\\">\\r\\n\\t\\t\\t<div if.bind=\\"!isHolidayWishList\\" class=\\"curated-trip__filter col-xs-12 col-sm-6 col-md-3\\">\\r\\n\\t\\t\\t\\t<label class=\\"curated-trip__filter-label ds-label-medium\\">Arrival Month<\/label>\\r\\n\\t\\t\\t\\t<select-menu\\r\\n\\t\\t\\t\\t\\titems.bind=\\"arrivalMonths\\"\\r\\n\\t\\t\\t\\t\\tselected-item.two-way=\\"selectedArrivalMonths\\"\\r\\n\\t\\t\\t\\t\\ton-change.call=\\"filterTrips()\\">\\r\\n\\t\\t\\t\\t<\/select-menu>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<div if.bind=\\"isHolidayWishList\\" class=\\"curated-trip__filter col-xs-12 col-sm-6 col-md-3\\">\\r\\n\\t\\t\\t\\t<label class=\\"curated-trip__filter-label ds-label-medium\\">Holiday<\/label>\\r\\n\\t\\t\\t\\t<select-menu\\r\\n\\t\\t\\t\\t\\titems.bind=\\"holidayList\\"\\r\\n\\t\\t\\t\\t\\tselected-item.two-way=\\"selectedHoliday\\"\\r\\n\\t\\t\\t\\t\\ton-change.call=\\"filterTrips()\\">\\r\\n\\t\\t\\t\\t<\/select-menu>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<div class=\\"curated-trip__filter col-xs-12 col-sm-6 col-md-3\\">\\r\\n\\t\\t\\t\\t<label class=\\"curated-trip__filter-label ds-label-medium\\">Vacation Style<\/label>\\r\\n\\t\\t\\t\\t<select-menu\\r\\n\\t\\t\\t\\t\\titems.bind=\\"vacationStyle\\"\\r\\n\\t\\t\\t\\t\\tselected-item.two-way=\\"selectedVacationStyle\\"\\r\\n\\t\\t\\t\\t\\ton-change.call=\\"filterTrips()\\">\\r\\n\\t\\t\\t\\t<\/select-menu>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<div class=\\"curated-trip__filter curated-trip__filter--is-destination col-xs-12 col-md-6\\">\\r\\n\\t\\t\\t\\t<label class=\\"curated-trip__filter-label ds-label-medium\\">Destination<\/label>\\r\\n\\t\\t\\t\\t<select-menu\\r\\n\\t\\t\\t\\t\\titems.bind=\\"destination\\"\\r\\n\\t\\t\\t\\t\\tselected-item.two-way=\\"selectedDestination\\"\\r\\n\\t\\t\\t\\t\\ton-change.call=\\"filterTrips()\\">\\r\\n\\t\\t\\t\\t<\/select-menu>\\r\\n\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t<\/div>\\r\\n\\r\\n\\t\\t<div class=\\"curated-trip__results-bar row middle-xs\\">\\r\\n\\t\\t\\t<!-- results -->\\r\\n\\t\\t\\t<div class=\\"curated-trip__search-results col-xs col-md-12\\">\\r\\n\\t\\t\\t\\tShowing <span class=\\"curated-trip__search-results-count\\">${searchResultsCount}<\/span> results\\r\\n\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t<!-- xs & sm sort -->\\r\\n\\t\\t\\t<dropdown class=\\"curated-trip__mobile-sort col-xs end-xs show-xs-sm-only\\">\\r\\n\\t\\t\\t\\t<div class=\\"ds-btn-secondary\\" slot=\\"button\\">\\r\\n\\t\\t\\t\\t\\tSort\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t<div slot=\\"content\\" aria-label=\\"submenu\\" class=\\"dropdown-content start-xs\\">\\r\\n\\t\\t\\t\\t\\t<ul>\\r\\n\\t\\t\\t\\t\\t\\t<li click.trigger=\\"sortByColumn(\'checkInDate\')\\" class=\\"${sortProperty === \'checkInDate\' ? \'curated-trip__thead\' + sortOrderModifier : \'\'} curated-trip__mobile-sort-option\\">Dates<\/li>\\r\\n\\t\\t\\t\\t\\t\\t<li click.trigger=\\"sortByColumn(\'locationName\')\\" class=\\"${sortProperty === \'locationName\' ? \'curated-trip__thead\' + sortOrderModifier : \'\'} curated-trip__mobile-sort-option\\">Destination<\/li>\\r\\n\\t\\t\\t\\t\\t\\t<li click.trigger=\\"sortByColumn(\'bedrooms\')\\" class=\\"${sortProperty === \'bedrooms\' ? \'curated-trip__thead\' + sortOrderModifier : \'\'} curated-trip__mobile-sort-option\\">Bedrooms<\/li>\\r\\n\\t\\t\\t\\t\\t\\t<li click.trigger=\\"sortByColumn(\'occupancy\')\\" class=\\"${sortProperty === \'occupancy\' ? \'curated-trip__thead\' + sortOrderModifier : \'\'} curated-trip__mobile-sort-option\\">Occupancy<\/li>\\r\\n\\t\\t\\t\\t\\t\\t<li if.bind=\\"curatedTripsModel.showTripValue\\" click.trigger=\\"sortByColumn(\'value\')\\" class=\\"${sortProperty === \'value\' ? \'curated-trip__thead\' + sortOrderModifier : \'\'} curated-trip__mobile-sort-option\\">Est. Value<\/li>\\r\\n\\t\\t\\t\\t\\t<\/ul>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<\/dropdown>\\r\\n\\t\\t<\/div>\\r\\n\\r\\n\\t\\t<div class=\\"curated-trip__results row\\">\\r\\n\\r\\n\\t\\t\\t<!-- table headers -->\\r\\n\\t\\t\\t<div class=\\"curated-trip__table-headers\\">\\r\\n\\t\\t\\t\\t<div class=\\"curated-trip__content-container\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\"curated-trip__column curated-trip__width--is-destination\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\"curated-trip__table-row\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\"${sortProperty === \'locationName\' ? \'curated-trip__thead\' + sortOrderModifier : \'\'} sort-location curated-trip__thead curated-trip__thead--is-destination\\" click.delegate=\\"sortByColumn(\'locationName\', false)\\">Destination<\/div>\\r\\n\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<div class=\\"curated-trip__column curated-trip__width--is-property-specs\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\"curated-trip__table-row\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\"${sortProperty === \'bedrooms\' ? \'curated-trip__thead\' + sortOrderModifier : \'\'} curated-trip__thead curated-trip__property-spec\\" click.delegate=\\"sortByColumn(\'bedrooms\', false)\\">BR<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\"${sortProperty === \'bathrooms\' ? \'curated-trip__thead\' + sortOrderModifier : \'\'} curated-trip__thead curated-trip__property-spec\\" click.delegate=\\"sortByColumn(\'bathrooms\', false)\\">BA<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\"${sortProperty === \'occupancy\' ? \'curated-trip__thead\' + sortOrderModifier : \'\'} curated-trip__thead curated-trip__property-spec\\" click.delegate=\\"sortByColumn(\'occupancy\', false)\\">OCC<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\"${sortProperty === \'squareFootage\' ? \'curated-trip__thead\' + sortOrderModifier : \'\'} curated-trip__thead curated-trip__property-spec\\" click.delegate=\\"sortByColumn(\'squareFootage\', false)\\">FT&nbsp;<sup>2<\/sup><\/div>\\r\\n\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<div class=\\"curated-trip__column curated-trip__width--is-dates\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\"curated-trip__table-row\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\"${sortProperty === \'checkInDate\' ? \'curated-trip__thead\' + sortOrderModifier : \'\'} curated-trip__thead curated-trip__thead--is-date curated-trip__width--is-half\\" click.delegate=\\"sortByColumn(\'checkInDate\', false)\\">Check In<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\"${sortProperty === \'checkOutDate\' ? \'curated-trip__thead\' + sortOrderModifier : \'\'} curated-trip__thead curated-trip__thead--is-date curated-trip__width--is-half\\" click.delegate=\\"sortByColumn(\'checkOutDate\', false)\\">Check Out<\/div>\\r\\n\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<div class=\\"${curatedTripsModel.showTripValue ? \'curated-trip__column curated-trip__width--is-value-cta\' : \'\'}\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\"curated-trip__table-row\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div if.bind=\\"curatedTripsModel.showTripValue && !isHolidayWishList\\" class=\\"${sortProperty === \'value\' ? \'curated-trip__thead\' + sortOrderModifier : \'\'} curated-trip__thead curated-trip__thead--is-value  curated-trip__width--is-half\\" click.delegate=\\"sortByColumn(\'value\', false)\\">Value&#42;<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div if.bind=\\"curatedTripsModel.showTripValue && isHolidayWishList\\" class=\\"${sortProperty === \'value\' ? \'curated-trip__thead\' + sortOrderModifier : \'\'} curated-trip__thead curated-trip__thead--is-value  curated-trip__width--is-half\\" click.delegate=\\"sortByColumn(\'value\', false)\\">Nightly Rate<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div if.bind=\\"curatedTripsModel.showTripValue && isHolidayWishList\\" class=\\"${sortProperty === \'value\' ? \'curated-trip__thead\' + sortOrderModifier : \'\'} curated-trip__thead curated-trip__thead--is-value  curated-trip__width--is-half\\" click.delegate=\\"sortByColumn(\'value\', false)\\">Grand Total<\/div>\\r\\n\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<div class=\\"${isSelectionPeriodOpen || curatedTripsModel.showTripValue ? \'curated-trip__cell curated-trip__value-cta-details\' : \'\'}\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\"curated-trip__table-row \\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t${isSelectionPeriodOpen ? \'curated-trip__table-row--expanded-holiday-wish-list\' : \'\'} \\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t${curatedTripsModel.showTripValue && !isHolidayWishListEligible ? \'curated-trip__table-row--expanded\' : \'\'}\\"><\/div>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t<!-- table cards -->\\r\\n\\t\\t\\t<div class=\\"curated-trip__table-card col-xs-12 col-sm-6 col-md-12\\" repeat.for=\\"trip of trips\\">\\r\\n\\t\\t\\t\\t<div class=\\"curated-trip__content-container\\">\\r\\n\\r\\n\\t\\t\\t\\t\\t<!-- destination -->\\r\\n\\t\\t\\t\\t\\t<div class=\\"curated-trip__cell curated-trip__destination-container curated-trip__width--is-destination\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\"curated-trip__popup-container\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\"curated-trip__svg-container\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<svg class=\\"icon-gallery\\" xmlns=\\"http://www.w3.org/2000/svg\\" xmlns:xlink=\\"http://www.w3.org/1999/xlink\\" width=\\"24\\" height=\\"24\\" viewBox=\\"0 0 24 24\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<defs>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<path id=\\"a\\" class=\\"svg-icon-fill\\" d=\\"M20,4 L7.68019876,4 L7.68019876,7.71967708 L4,7.71967708 L4,20 L16.3198012,20 L16.3198012,16.2795305 L20,16.2795305 L20,4 L20,4 Z M15.0930683,18.777277 L5.22673292,18.777277 L5.22673292,8.94240008 L7.68019876,8.94240008 L7.68019876,16.2795305 L15.0930683,16.2795305 L15.0930683,18.777277 L15.0930683,18.777277 Z M18.7732671,15.0568075 L16.3198012,15.0568075 L15.7068323,15.0568075 L8.90693168,15.0568075 L8.90693168,8.3314348 L8.90693168,7.71967708 L8.90693168,5.22351543 L18.7732671,5.22351543 L18.7732671,15.0568075 L18.7732671,15.0568075 Z\\"/>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<\/defs>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<g fill=\\"none\\" fill-rule=\\"evenodd\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<rect width=\\"24\\" height=\\"24\\"/>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<use fill=\\"#000000\\" xlink:href=\\"#a\\"/>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<\/g>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<\/svg>\\r\\n\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\"curated-trip__image-container\\" style=\\"background-image: url(//cms.inspirato.com/ImageGen.ashx?image=${trip.coverImage}&width=555);\\"><\/div>\\r\\n\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\"curated-trip__title-container\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\"curated-trip__accommodation-name truncate-text\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<a if.bind=\\"trip.overrideUrl.length\\" href=\\"${trip.overrideUrl} \\" target=\\"_blank\\">${trip.unitName}<\/a>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<a if.bind=\\"!trip.overrideUrl.length\\" href=\\"${trip.unitURL}?checkIn=${trip.checkInDate | dateFormat: \'MM/DD/YYYY\' }&checkOut=${trip.checkOutDate | dateFormat: \'MM/DD/YYYY\' }\\" target=\\"_blank\\">${trip.unitName}<\/a>\\r\\n\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\"ds-subtitle curated-trip__destination-name truncate-text\\">${trip.propertyName}<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\"ds-subtitle curated-trip__destination-name truncate-text\\">${trip.locationName}<\/div>\\r\\n\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t\\t\\t<!-- property specs -->\\r\\n\\t\\t\\t\\t\\t<div class=\\"curated-trip__property-specs-container curated-trip__column curated-trip__width--is-property-specs\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\"curated-trip__table-row\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\"curated-trip__cell curated-trip__property-spec\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\"curated-trip__property-spec-value\\">${trip.bedrooms}<\/span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\"curated-trip__property-spec--unit-of-measurement\\">BR<\/span>\\r\\n\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\"curated-trip__cell curated-trip__property-spec\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\"curated-trip__property-spec-value\\">${trip.bathrooms}<\/span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\"curated-trip__property-spec--unit-of-measurement\\">BA<\/span>\\r\\n\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\"curated-trip__cell curated-trip__property-spec\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\"curated-trip__property-spec-value\\">${trip.occupancy}<\/span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\"curated-trip__property-spec--unit-of-measurement\\">OCC<\/span>\\r\\n\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\"curated-trip__cell curated-trip__property-spec\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\"curated-trip__property-spec-value\\">${trip.squareFootage}<\/span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\"curated-trip__property-spec--unit-of-measurement\\">FT <sup>2<\/sup><\/span>\\r\\n\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t\\t\\t<!-- dates -->\\r\\n\\t\\t\\t\\t\\t<div class=\\"curated-trip__dates-container curated-trip__column curated-trip__width--is-dates\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\"curated-trip__table-row\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\"curated-trip__cell curated-trip__dates curated-trip__width--is-half\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\"curated-trip__label ds-label-small show-xs-sm-only\\">Check In<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\"curated-trip__date-details\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\"curated-trip__date-details-is--day\\">${trip.checkInDate | dateFormat: \'ddd\' }<\/span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\"curated-trip__date-details-is--date\\">${trip.checkInDate | dateFormat: \'MMM DD, YYYY\' }<\/span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\"curated-trip__cell curated-trip__dates curated-trip__width--is-half\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\"curated-trip__label ds-label-small show-xs-sm-only\\">Check Out<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\"curated-trip__date-details\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\"curated-trip__date-details-is--day\\">${trip.checkOutDate | dateFormat: \'ddd\' }<\/span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\"curated-trip__date-details-is--date\\">${trip.checkOutDate | dateFormat: \'MMM DD, YYYY\' }<\/span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t\\t\\t<!-- value & cta -->\\r\\n\\t\\t\\t\\t\\t<div class=\\"${curatedTripsModel.showTripValue ? \'curated-trip__value-cta-container curated-trip__column curated-trip__width--is-value-cta\' : \'\'}\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\"curated-trip__table-row\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div if.bind=\\"curatedTripsModel.showTripValue && !isHolidayWishList\\" class=\\"curated-trip__cell curated-trip__value-cta-details curated-trip__width--is-half\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\"curated-trip__label ds-label-small show-xs-sm-only\\">Est. Value<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\"curated-trip__value-cta-details--is-value\\">${trip.value | nullableNumber: \'$0,0\'}<\/span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div if.bind=\\"curatedTripsModel.showTripValue && isHolidayWishList\\" class=\\"curated-trip__cell curated-trip__value-cta-details curated-trip__width--is-half\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\"curated-trip__label ds-label-small show-xs-sm-only\\">Est. Nightly<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\"curated-trip__value-cta-details--is-value\\">${trip.value / trip.numberOfDays | nullableNumber: \'$0,0\'}<\/span>\\r\\n\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div if.bind=\\"curatedTripsModel.showTripValue && isHolidayWishList\\" class=\\"curated-trip__cell curated-trip__value-cta-details curated-trip__width--is-half\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\"curated-trip__label ds-label-small show-xs-sm-only\\">Est. Total<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\"curated-trip__value-cta-details--is-value\\">${(trip.value + (trip.value * 0.18)) | nullableNumber: \'$0,0\'}<\/span>\\r\\n\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<div class=\\"curated-trip__value-cta-container curated-trip__column curated-trip__width--is-value-cta\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\"curated-trip__table-row\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\"curated-trip__cell curated-trip__value-cta-details ${isHolidayWishList && !isHolidayWishListEligible ? \'\' : curated-trip__cell--is-cta}\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<a if.bind=\\"trip.overrideUrl.length && !isHolidayWishList\\" href=\\"${trip.overrideUrl }\\" class=\\"curated-trip__value-cta-details--is-cta\\" target=\\"_blank\\">View<\/a>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<a if.bind=\\"!trip.overrideUrl.length && !isHolidayWishList\\" href=\\"${trip.unitURL}?checkIn=${trip.checkInDate | dateFormat: \'MM/DD/YYYY\' }&checkOut=${trip.checkOutDate | dateFormat: \'MM/DD/YYYY\' }\\" class=\\"curated-trip__value-cta-details--is-cta\\" target=\\"_blank\\">View<\/a>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<a if.bind=\\"isHolidayWishList && isHolidayWishListEligible && isSelectionPeriodOpen\\" \\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tclick.trigger=\\"addHolidayWishListUnitSelection(trip)\\" \\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tclass.bind=\\"trip.isSelected ? \'curated-trip__value-cta-details--is-disabled\' : \'curated-trip__value-cta-details--is-cta\'\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t${trip.isSelected ? \'Added\' : \'Select\'}\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<\/a>\\r\\n\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t<\/div>\\r\\n\\t<\/div>\\r\\n\\r\\n\\t<div if.bind=\\"hasErrors\\" class=\\"row\\">\\r\\n\\t\\t<div class=\\"col-xs curated-trip__error-message\\">\\r\\n\\t\\t\\t<h4>Oops! We\'re sorry.<\/h4>\\r\\n\\t\\t\\t<div>\\r\\n\\t\\t\\t\\tAn error occured and were unable to load the page.\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t<\/div>\\r\\n\\t<\/div>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9jdXJhdGVkLXRyaXAvY3VyYXRlZC10cmlwLmh0bWw/NDk5YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtbEVBQW1sRSxtQkFBbUIsbWJBQW1iLGdGQUFnRiwySEFBMkgsaUZBQWlGLDZIQUE2SCw2RUFBNkUsMkhBQTJILDhFQUE4RSxvS0FBb0ssMEVBQTBFLGtmQUFrZixpRkFBaUYsNFdBQTRXLDZFQUE2RSwrSUFBK0ksOEVBQThFLGdKQUFnSiw4RUFBOEUsaUpBQWlKLGtGQUFrRixtSEFBbUgsb09BQW9PLGdGQUFnRixzTEFBc0wsaUZBQWlGLDhOQUE4TixnR0FBZ0csNkpBQTZKLDBFQUEwRSw2SUFBNkksd0dBQXdHLDBFQUEwRSx1UEFBdVAsMEVBQTBFLDJOQUEyTixxSEFBcUgsZ0ZBQWdGLG1GQUFtRix5QkFBeUIseUdBQXlHLDR2REFBNHZELGdCQUFnQixZQUFZLGdQQUFnUCxpQkFBaUIsd0JBQXdCLGNBQWMseUVBQXlFLGFBQWEsV0FBVyw2Q0FBNkMsWUFBWSw4Q0FBOEMsdUJBQXVCLGNBQWMsd0hBQXdILGtCQUFrQixrR0FBa0csa0JBQWtCLHdhQUF3YSxjQUFjLHFSQUFxUixlQUFlLHFSQUFxUixlQUFlLHNSQUFzUixtQkFBbUIsMnNCQUEyc0Isc0NBQXNDLG1GQUFtRiwrQ0FBK0MsNFlBQTRZLHVDQUF1QyxtRkFBbUYsZ0RBQWdELHNLQUFzSyxrSUFBa0ksNmFBQTZhLG9DQUFvQyw2WUFBNlksd0RBQXdELHVZQUF1WSw0REFBNEQsMFVBQTBVLGtGQUFrRiw2RkFBNkYsa0JBQWtCLDBLQUEwSyxhQUFhLFdBQVcsNkNBQTZDLFlBQVksOENBQThDLHdjQUF3YyxxQ0FBcUMiLCJmaWxlIjoiY29tcG9uZW50cy9jdXJhdGVkLXRyaXAvY3VyYXRlZC10cmlwLmh0bWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IFwiPHRlbXBsYXRlPlxcclxcblxcdDxsb2FkaW5nIGlmLmJpbmQ9XFxcIiFoYXNEYXRhICYmICFoYXNFcnJvcnNcXFwiIGNsYXNzPVxcXCJsb2FkZXJcXFwiPjwvbG9hZGluZz5cXHJcXG5cXHJcXG5cXHQ8ZGl2IGlmLmJpbmQ9XFxcImhhc0RhdGEgJiYgIWhhc0Vycm9yc1xcXCIgY2xhc3M9XFxcImN1cmF0ZWQtdHJpcFxcXCI+XFxyXFxuXFxyXFxuXFx0XFx0PCEtLSBmaWx0ZXJzIC0tPlxcclxcblxcdFxcdDxkaXYgY2xhc3M9XFxcImN1cmF0ZWQtdHJpcF9fZmlsdGVycyByb3cgYm90dG9tLXhzIGFyb3VuZC14c1xcXCI+XFxyXFxuXFx0XFx0XFx0PGRpdiBpZi5iaW5kPVxcXCIhaXNIb2xpZGF5V2lzaExpc3RcXFwiIGNsYXNzPVxcXCJjdXJhdGVkLXRyaXBfX2ZpbHRlciBjb2wteHMtMTIgY29sLXNtLTYgY29sLW1kLTNcXFwiPlxcclxcblxcdFxcdFxcdFxcdDxsYWJlbCBjbGFzcz1cXFwiY3VyYXRlZC10cmlwX19maWx0ZXItbGFiZWwgZHMtbGFiZWwtbWVkaXVtXFxcIj5BcnJpdmFsIE1vbnRoPC9sYWJlbD5cXHJcXG5cXHRcXHRcXHRcXHQ8c2VsZWN0LW1lbnVcXHJcXG5cXHRcXHRcXHRcXHRcXHRpdGVtcy5iaW5kPVxcXCJhcnJpdmFsTW9udGhzXFxcIlxcclxcblxcdFxcdFxcdFxcdFxcdHNlbGVjdGVkLWl0ZW0udHdvLXdheT1cXFwic2VsZWN0ZWRBcnJpdmFsTW9udGhzXFxcIlxcclxcblxcdFxcdFxcdFxcdFxcdG9uLWNoYW5nZS5jYWxsPVxcXCJmaWx0ZXJUcmlwcygpXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHQ8L3NlbGVjdC1tZW51PlxcclxcblxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdDxkaXYgaWYuYmluZD1cXFwiaXNIb2xpZGF5V2lzaExpc3RcXFwiIGNsYXNzPVxcXCJjdXJhdGVkLXRyaXBfX2ZpbHRlciBjb2wteHMtMTIgY29sLXNtLTYgY29sLW1kLTNcXFwiPlxcclxcblxcdFxcdFxcdFxcdDxsYWJlbCBjbGFzcz1cXFwiY3VyYXRlZC10cmlwX19maWx0ZXItbGFiZWwgZHMtbGFiZWwtbWVkaXVtXFxcIj5Ib2xpZGF5PC9sYWJlbD5cXHJcXG5cXHRcXHRcXHRcXHQ8c2VsZWN0LW1lbnVcXHJcXG5cXHRcXHRcXHRcXHRcXHRpdGVtcy5iaW5kPVxcXCJob2xpZGF5TGlzdFxcXCJcXHJcXG5cXHRcXHRcXHRcXHRcXHRzZWxlY3RlZC1pdGVtLnR3by13YXk9XFxcInNlbGVjdGVkSG9saWRheVxcXCJcXHJcXG5cXHRcXHRcXHRcXHRcXHRvbi1jaGFuZ2UuY2FsbD1cXFwiZmlsdGVyVHJpcHMoKVxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0PC9zZWxlY3QtbWVudT5cXHJcXG5cXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjdXJhdGVkLXRyaXBfX2ZpbHRlciBjb2wteHMtMTIgY29sLXNtLTYgY29sLW1kLTNcXFwiPlxcclxcblxcdFxcdFxcdFxcdDxsYWJlbCBjbGFzcz1cXFwiY3VyYXRlZC10cmlwX19maWx0ZXItbGFiZWwgZHMtbGFiZWwtbWVkaXVtXFxcIj5WYWNhdGlvbiBTdHlsZTwvbGFiZWw+XFxyXFxuXFx0XFx0XFx0XFx0PHNlbGVjdC1tZW51XFxyXFxuXFx0XFx0XFx0XFx0XFx0aXRlbXMuYmluZD1cXFwidmFjYXRpb25TdHlsZVxcXCJcXHJcXG5cXHRcXHRcXHRcXHRcXHRzZWxlY3RlZC1pdGVtLnR3by13YXk9XFxcInNlbGVjdGVkVmFjYXRpb25TdHlsZVxcXCJcXHJcXG5cXHRcXHRcXHRcXHRcXHRvbi1jaGFuZ2UuY2FsbD1cXFwiZmlsdGVyVHJpcHMoKVxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0PC9zZWxlY3QtbWVudT5cXHJcXG5cXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjdXJhdGVkLXRyaXBfX2ZpbHRlciBjdXJhdGVkLXRyaXBfX2ZpbHRlci0taXMtZGVzdGluYXRpb24gY29sLXhzLTEyIGNvbC1tZC02XFxcIj5cXHJcXG5cXHRcXHRcXHRcXHQ8bGFiZWwgY2xhc3M9XFxcImN1cmF0ZWQtdHJpcF9fZmlsdGVyLWxhYmVsIGRzLWxhYmVsLW1lZGl1bVxcXCI+RGVzdGluYXRpb248L2xhYmVsPlxcclxcblxcdFxcdFxcdFxcdDxzZWxlY3QtbWVudVxcclxcblxcdFxcdFxcdFxcdFxcdGl0ZW1zLmJpbmQ9XFxcImRlc3RpbmF0aW9uXFxcIlxcclxcblxcdFxcdFxcdFxcdFxcdHNlbGVjdGVkLWl0ZW0udHdvLXdheT1cXFwic2VsZWN0ZWREZXN0aW5hdGlvblxcXCJcXHJcXG5cXHRcXHRcXHRcXHRcXHRvbi1jaGFuZ2UuY2FsbD1cXFwiZmlsdGVyVHJpcHMoKVxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0PC9zZWxlY3QtbWVudT5cXHJcXG5cXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHJcXG5cXHRcXHQ8L2Rpdj5cXHJcXG5cXHJcXG5cXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjdXJhdGVkLXRyaXBfX3Jlc3VsdHMtYmFyIHJvdyBtaWRkbGUteHNcXFwiPlxcclxcblxcdFxcdFxcdDwhLS0gcmVzdWx0cyAtLT5cXHJcXG5cXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjdXJhdGVkLXRyaXBfX3NlYXJjaC1yZXN1bHRzIGNvbC14cyBjb2wtbWQtMTJcXFwiPlxcclxcblxcdFxcdFxcdFxcdFNob3dpbmcgPHNwYW4gY2xhc3M9XFxcImN1cmF0ZWQtdHJpcF9fc2VhcmNoLXJlc3VsdHMtY291bnRcXFwiPiR7c2VhcmNoUmVzdWx0c0NvdW50fTwvc3Bhbj4gcmVzdWx0c1xcclxcblxcdFxcdFxcdDwvZGl2PlxcclxcblxcclxcblxcdFxcdFxcdDwhLS0geHMgJiBzbSBzb3J0IC0tPlxcclxcblxcdFxcdFxcdDxkcm9wZG93biBjbGFzcz1cXFwiY3VyYXRlZC10cmlwX19tb2JpbGUtc29ydCBjb2wteHMgZW5kLXhzIHNob3cteHMtc20tb25seVxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiZHMtYnRuLXNlY29uZGFyeVxcXCIgc2xvdD1cXFwiYnV0dG9uXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRTb3J0XFxyXFxuXFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0PGRpdiBzbG90PVxcXCJjb250ZW50XFxcIiBhcmlhLWxhYmVsPVxcXCJzdWJtZW51XFxcIiBjbGFzcz1cXFwiZHJvcGRvd24tY29udGVudCBzdGFydC14c1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PHVsPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxsaSBjbGljay50cmlnZ2VyPVxcXCJzb3J0QnlDb2x1bW4oJ2NoZWNrSW5EYXRlJylcXFwiIGNsYXNzPVxcXCIke3NvcnRQcm9wZXJ0eSA9PT0gJ2NoZWNrSW5EYXRlJyA/ICdjdXJhdGVkLXRyaXBfX3RoZWFkJyArIHNvcnRPcmRlck1vZGlmaWVyIDogJyd9IGN1cmF0ZWQtdHJpcF9fbW9iaWxlLXNvcnQtb3B0aW9uXFxcIj5EYXRlczwvbGk+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGxpIGNsaWNrLnRyaWdnZXI9XFxcInNvcnRCeUNvbHVtbignbG9jYXRpb25OYW1lJylcXFwiIGNsYXNzPVxcXCIke3NvcnRQcm9wZXJ0eSA9PT0gJ2xvY2F0aW9uTmFtZScgPyAnY3VyYXRlZC10cmlwX190aGVhZCcgKyBzb3J0T3JkZXJNb2RpZmllciA6ICcnfSBjdXJhdGVkLXRyaXBfX21vYmlsZS1zb3J0LW9wdGlvblxcXCI+RGVzdGluYXRpb248L2xpPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxsaSBjbGljay50cmlnZ2VyPVxcXCJzb3J0QnlDb2x1bW4oJ2JlZHJvb21zJylcXFwiIGNsYXNzPVxcXCIke3NvcnRQcm9wZXJ0eSA9PT0gJ2JlZHJvb21zJyA/ICdjdXJhdGVkLXRyaXBfX3RoZWFkJyArIHNvcnRPcmRlck1vZGlmaWVyIDogJyd9IGN1cmF0ZWQtdHJpcF9fbW9iaWxlLXNvcnQtb3B0aW9uXFxcIj5CZWRyb29tczwvbGk+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGxpIGNsaWNrLnRyaWdnZXI9XFxcInNvcnRCeUNvbHVtbignb2NjdXBhbmN5JylcXFwiIGNsYXNzPVxcXCIke3NvcnRQcm9wZXJ0eSA9PT0gJ29jY3VwYW5jeScgPyAnY3VyYXRlZC10cmlwX190aGVhZCcgKyBzb3J0T3JkZXJNb2RpZmllciA6ICcnfSBjdXJhdGVkLXRyaXBfX21vYmlsZS1zb3J0LW9wdGlvblxcXCI+T2NjdXBhbmN5PC9saT5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8bGkgaWYuYmluZD1cXFwiY3VyYXRlZFRyaXBzTW9kZWwuc2hvd1RyaXBWYWx1ZVxcXCIgY2xpY2sudHJpZ2dlcj1cXFwic29ydEJ5Q29sdW1uKCd2YWx1ZScpXFxcIiBjbGFzcz1cXFwiJHtzb3J0UHJvcGVydHkgPT09ICd2YWx1ZScgPyAnY3VyYXRlZC10cmlwX190aGVhZCcgKyBzb3J0T3JkZXJNb2RpZmllciA6ICcnfSBjdXJhdGVkLXRyaXBfX21vYmlsZS1zb3J0LW9wdGlvblxcXCI+RXN0LiBWYWx1ZTwvbGk+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PC91bD5cXHJcXG5cXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHQ8L2Ryb3Bkb3duPlxcclxcblxcdFxcdDwvZGl2PlxcclxcblxcclxcblxcdFxcdDxkaXYgY2xhc3M9XFxcImN1cmF0ZWQtdHJpcF9fcmVzdWx0cyByb3dcXFwiPlxcclxcblxcclxcblxcdFxcdFxcdDwhLS0gdGFibGUgaGVhZGVycyAtLT5cXHJcXG5cXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjdXJhdGVkLXRyaXBfX3RhYmxlLWhlYWRlcnNcXFwiPlxcclxcblxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImN1cmF0ZWQtdHJpcF9fY29udGVudC1jb250YWluZXJcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImN1cmF0ZWQtdHJpcF9fY29sdW1uIGN1cmF0ZWQtdHJpcF9fd2lkdGgtLWlzLWRlc3RpbmF0aW9uXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjdXJhdGVkLXRyaXBfX3RhYmxlLXJvd1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiJHtzb3J0UHJvcGVydHkgPT09ICdsb2NhdGlvbk5hbWUnID8gJ2N1cmF0ZWQtdHJpcF9fdGhlYWQnICsgc29ydE9yZGVyTW9kaWZpZXIgOiAnJ30gc29ydC1sb2NhdGlvbiBjdXJhdGVkLXRyaXBfX3RoZWFkIGN1cmF0ZWQtdHJpcF9fdGhlYWQtLWlzLWRlc3RpbmF0aW9uXFxcIiBjbGljay5kZWxlZ2F0ZT1cXFwic29ydEJ5Q29sdW1uKCdsb2NhdGlvbk5hbWUnLCBmYWxzZSlcXFwiPkRlc3RpbmF0aW9uPC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiY3VyYXRlZC10cmlwX19jb2x1bW4gY3VyYXRlZC10cmlwX193aWR0aC0taXMtcHJvcGVydHktc3BlY3NcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImN1cmF0ZWQtdHJpcF9fdGFibGUtcm93XFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCIke3NvcnRQcm9wZXJ0eSA9PT0gJ2JlZHJvb21zJyA/ICdjdXJhdGVkLXRyaXBfX3RoZWFkJyArIHNvcnRPcmRlck1vZGlmaWVyIDogJyd9IGN1cmF0ZWQtdHJpcF9fdGhlYWQgY3VyYXRlZC10cmlwX19wcm9wZXJ0eS1zcGVjXFxcIiBjbGljay5kZWxlZ2F0ZT1cXFwic29ydEJ5Q29sdW1uKCdiZWRyb29tcycsIGZhbHNlKVxcXCI+QlI8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCIke3NvcnRQcm9wZXJ0eSA9PT0gJ2JhdGhyb29tcycgPyAnY3VyYXRlZC10cmlwX190aGVhZCcgKyBzb3J0T3JkZXJNb2RpZmllciA6ICcnfSBjdXJhdGVkLXRyaXBfX3RoZWFkIGN1cmF0ZWQtdHJpcF9fcHJvcGVydHktc3BlY1xcXCIgY2xpY2suZGVsZWdhdGU9XFxcInNvcnRCeUNvbHVtbignYmF0aHJvb21zJywgZmFsc2UpXFxcIj5CQTwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcIiR7c29ydFByb3BlcnR5ID09PSAnb2NjdXBhbmN5JyA/ICdjdXJhdGVkLXRyaXBfX3RoZWFkJyArIHNvcnRPcmRlck1vZGlmaWVyIDogJyd9IGN1cmF0ZWQtdHJpcF9fdGhlYWQgY3VyYXRlZC10cmlwX19wcm9wZXJ0eS1zcGVjXFxcIiBjbGljay5kZWxlZ2F0ZT1cXFwic29ydEJ5Q29sdW1uKCdvY2N1cGFuY3knLCBmYWxzZSlcXFwiPk9DQzwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcIiR7c29ydFByb3BlcnR5ID09PSAnc3F1YXJlRm9vdGFnZScgPyAnY3VyYXRlZC10cmlwX190aGVhZCcgKyBzb3J0T3JkZXJNb2RpZmllciA6ICcnfSBjdXJhdGVkLXRyaXBfX3RoZWFkIGN1cmF0ZWQtdHJpcF9fcHJvcGVydHktc3BlY1xcXCIgY2xpY2suZGVsZWdhdGU9XFxcInNvcnRCeUNvbHVtbignc3F1YXJlRm9vdGFnZScsIGZhbHNlKVxcXCI+RlQmbmJzcDs8c3VwPjI8L3N1cD48L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjdXJhdGVkLXRyaXBfX2NvbHVtbiBjdXJhdGVkLXRyaXBfX3dpZHRoLS1pcy1kYXRlc1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiY3VyYXRlZC10cmlwX190YWJsZS1yb3dcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcIiR7c29ydFByb3BlcnR5ID09PSAnY2hlY2tJbkRhdGUnID8gJ2N1cmF0ZWQtdHJpcF9fdGhlYWQnICsgc29ydE9yZGVyTW9kaWZpZXIgOiAnJ30gY3VyYXRlZC10cmlwX190aGVhZCBjdXJhdGVkLXRyaXBfX3RoZWFkLS1pcy1kYXRlIGN1cmF0ZWQtdHJpcF9fd2lkdGgtLWlzLWhhbGZcXFwiIGNsaWNrLmRlbGVnYXRlPVxcXCJzb3J0QnlDb2x1bW4oJ2NoZWNrSW5EYXRlJywgZmFsc2UpXFxcIj5DaGVjayBJbjwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcIiR7c29ydFByb3BlcnR5ID09PSAnY2hlY2tPdXREYXRlJyA/ICdjdXJhdGVkLXRyaXBfX3RoZWFkJyArIHNvcnRPcmRlck1vZGlmaWVyIDogJyd9IGN1cmF0ZWQtdHJpcF9fdGhlYWQgY3VyYXRlZC10cmlwX190aGVhZC0taXMtZGF0ZSBjdXJhdGVkLXRyaXBfX3dpZHRoLS1pcy1oYWxmXFxcIiBjbGljay5kZWxlZ2F0ZT1cXFwic29ydEJ5Q29sdW1uKCdjaGVja091dERhdGUnLCBmYWxzZSlcXFwiPkNoZWNrIE91dDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcIiR7Y3VyYXRlZFRyaXBzTW9kZWwuc2hvd1RyaXBWYWx1ZSA/ICdjdXJhdGVkLXRyaXBfX2NvbHVtbiBjdXJhdGVkLXRyaXBfX3dpZHRoLS1pcy12YWx1ZS1jdGEnIDogJyd9XFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjdXJhdGVkLXRyaXBfX3RhYmxlLXJvd1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0PGRpdiBpZi5iaW5kPVxcXCJjdXJhdGVkVHJpcHNNb2RlbC5zaG93VHJpcFZhbHVlICYmICFpc0hvbGlkYXlXaXNoTGlzdFxcXCIgY2xhc3M9XFxcIiR7c29ydFByb3BlcnR5ID09PSAndmFsdWUnID8gJ2N1cmF0ZWQtdHJpcF9fdGhlYWQnICsgc29ydE9yZGVyTW9kaWZpZXIgOiAnJ30gY3VyYXRlZC10cmlwX190aGVhZCBjdXJhdGVkLXRyaXBfX3RoZWFkLS1pcy12YWx1ZSAgY3VyYXRlZC10cmlwX193aWR0aC0taXMtaGFsZlxcXCIgY2xpY2suZGVsZWdhdGU9XFxcInNvcnRCeUNvbHVtbigndmFsdWUnLCBmYWxzZSlcXFwiPlZhbHVlJiM0Mjs8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGlmLmJpbmQ9XFxcImN1cmF0ZWRUcmlwc01vZGVsLnNob3dUcmlwVmFsdWUgJiYgaXNIb2xpZGF5V2lzaExpc3RcXFwiIGNsYXNzPVxcXCIke3NvcnRQcm9wZXJ0eSA9PT0gJ3ZhbHVlJyA/ICdjdXJhdGVkLXRyaXBfX3RoZWFkJyArIHNvcnRPcmRlck1vZGlmaWVyIDogJyd9IGN1cmF0ZWQtdHJpcF9fdGhlYWQgY3VyYXRlZC10cmlwX190aGVhZC0taXMtdmFsdWUgIGN1cmF0ZWQtdHJpcF9fd2lkdGgtLWlzLWhhbGZcXFwiIGNsaWNrLmRlbGVnYXRlPVxcXCJzb3J0QnlDb2x1bW4oJ3ZhbHVlJywgZmFsc2UpXFxcIj5OaWdodGx5IFJhdGU8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGlmLmJpbmQ9XFxcImN1cmF0ZWRUcmlwc01vZGVsLnNob3dUcmlwVmFsdWUgJiYgaXNIb2xpZGF5V2lzaExpc3RcXFwiIGNsYXNzPVxcXCIke3NvcnRQcm9wZXJ0eSA9PT0gJ3ZhbHVlJyA/ICdjdXJhdGVkLXRyaXBfX3RoZWFkJyArIHNvcnRPcmRlck1vZGlmaWVyIDogJyd9IGN1cmF0ZWQtdHJpcF9fdGhlYWQgY3VyYXRlZC10cmlwX190aGVhZC0taXMtdmFsdWUgIGN1cmF0ZWQtdHJpcF9fd2lkdGgtLWlzLWhhbGZcXFwiIGNsaWNrLmRlbGVnYXRlPVxcXCJzb3J0QnlDb2x1bW4oJ3ZhbHVlJywgZmFsc2UpXFxcIj5HcmFuZCBUb3RhbDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcIiR7aXNTZWxlY3Rpb25QZXJpb2RPcGVuIHx8IGN1cmF0ZWRUcmlwc01vZGVsLnNob3dUcmlwVmFsdWUgPyAnY3VyYXRlZC10cmlwX19jZWxsIGN1cmF0ZWQtdHJpcF9fdmFsdWUtY3RhLWRldGFpbHMnIDogJyd9XFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjdXJhdGVkLXRyaXBfX3RhYmxlLXJvdyBcXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQke2lzU2VsZWN0aW9uUGVyaW9kT3BlbiA/ICdjdXJhdGVkLXRyaXBfX3RhYmxlLXJvdy0tZXhwYW5kZWQtaG9saWRheS13aXNoLWxpc3QnIDogJyd9IFxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCR7Y3VyYXRlZFRyaXBzTW9kZWwuc2hvd1RyaXBWYWx1ZSAmJiAhaXNIb2xpZGF5V2lzaExpc3RFbGlnaWJsZSA/ICdjdXJhdGVkLXRyaXBfX3RhYmxlLXJvdy0tZXhwYW5kZWQnIDogJyd9XFxcIj48L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHJcXG5cXHRcXHRcXHQ8IS0tIHRhYmxlIGNhcmRzIC0tPlxcclxcblxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImN1cmF0ZWQtdHJpcF9fdGFibGUtY2FyZCBjb2wteHMtMTIgY29sLXNtLTYgY29sLW1kLTEyXFxcIiByZXBlYXQuZm9yPVxcXCJ0cmlwIG9mIHRyaXBzXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjdXJhdGVkLXRyaXBfX2NvbnRlbnQtY29udGFpbmVyXFxcIj5cXHJcXG5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8IS0tIGRlc3RpbmF0aW9uIC0tPlxcclxcblxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImN1cmF0ZWQtdHJpcF9fY2VsbCBjdXJhdGVkLXRyaXBfX2Rlc3RpbmF0aW9uLWNvbnRhaW5lciBjdXJhdGVkLXRyaXBfX3dpZHRoLS1pcy1kZXN0aW5hdGlvblxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiY3VyYXRlZC10cmlwX19wb3B1cC1jb250YWluZXJcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImN1cmF0ZWQtdHJpcF9fc3ZnLWNvbnRhaW5lclxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PHN2ZyBjbGFzcz1cXFwiaWNvbi1nYWxsZXJ5XFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHhtbG5zOnhsaW5rPVxcXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXFxcIiB3aWR0aD1cXFwiMjRcXFwiIGhlaWdodD1cXFwiMjRcXFwiIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PGRlZnM+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PHBhdGggaWQ9XFxcImFcXFwiIGNsYXNzPVxcXCJzdmctaWNvbi1maWxsXFxcIiBkPVxcXCJNMjAsNCBMNy42ODAxOTg3Niw0IEw3LjY4MDE5ODc2LDcuNzE5Njc3MDggTDQsNy43MTk2NzcwOCBMNCwyMCBMMTYuMzE5ODAxMiwyMCBMMTYuMzE5ODAxMiwxNi4yNzk1MzA1IEwyMCwxNi4yNzk1MzA1IEwyMCw0IEwyMCw0IFogTTE1LjA5MzA2ODMsMTguNzc3Mjc3IEw1LjIyNjczMjkyLDE4Ljc3NzI3NyBMNS4yMjY3MzI5Miw4Ljk0MjQwMDA4IEw3LjY4MDE5ODc2LDguOTQyNDAwMDggTDcuNjgwMTk4NzYsMTYuMjc5NTMwNSBMMTUuMDkzMDY4MywxNi4yNzk1MzA1IEwxNS4wOTMwNjgzLDE4Ljc3NzI3NyBMMTUuMDkzMDY4MywxOC43NzcyNzcgWiBNMTguNzczMjY3MSwxNS4wNTY4MDc1IEwxNi4zMTk4MDEyLDE1LjA1NjgwNzUgTDE1LjcwNjgzMjMsMTUuMDU2ODA3NSBMOC45MDY5MzE2OCwxNS4wNTY4MDc1IEw4LjkwNjkzMTY4LDguMzMxNDM0OCBMOC45MDY5MzE2OCw3LjcxOTY3NzA4IEw4LjkwNjkzMTY4LDUuMjIzNTE1NDMgTDE4Ljc3MzI2NzEsNS4yMjM1MTU0MyBMMTguNzczMjY3MSwxNS4wNTY4MDc1IEwxOC43NzMyNjcxLDE1LjA1NjgwNzUgWlxcXCIvPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDwvZGVmcz5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZyBmaWxsPVxcXCJub25lXFxcIiBmaWxsLXJ1bGU9XFxcImV2ZW5vZGRcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDxyZWN0IHdpZHRoPVxcXCIyNFxcXCIgaGVpZ2h0PVxcXCIyNFxcXCIvPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDx1c2UgZmlsbD1cXFwiIzAwMDAwMFxcXCIgeGxpbms6aHJlZj1cXFwiI2FcXFwiLz5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2c+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9zdmc+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiY3VyYXRlZC10cmlwX19pbWFnZS1jb250YWluZXJcXFwiIHN0eWxlPVxcXCJiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLy9jbXMuaW5zcGlyYXRvLmNvbS9JbWFnZUdlbi5hc2h4P2ltYWdlPSR7dHJpcC5jb3ZlckltYWdlfSZ3aWR0aD01NTUpO1xcXCI+PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiY3VyYXRlZC10cmlwX190aXRsZS1jb250YWluZXJcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImN1cmF0ZWQtdHJpcF9fYWNjb21tb2RhdGlvbi1uYW1lIHRydW5jYXRlLXRleHRcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDxhIGlmLmJpbmQ9XFxcInRyaXAub3ZlcnJpZGVVcmwubGVuZ3RoXFxcIiBocmVmPVxcXCIke3RyaXAub3ZlcnJpZGVVcmx9IFxcXCIgdGFyZ2V0PVxcXCJfYmxhbmtcXFwiPiR7dHJpcC51bml0TmFtZX08L2E+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PGEgaWYuYmluZD1cXFwiIXRyaXAub3ZlcnJpZGVVcmwubGVuZ3RoXFxcIiBocmVmPVxcXCIke3RyaXAudW5pdFVSTH0/Y2hlY2tJbj0ke3RyaXAuY2hlY2tJbkRhdGUgfCBkYXRlRm9ybWF0OiAnTU0vREQvWVlZWScgfSZjaGVja091dD0ke3RyaXAuY2hlY2tPdXREYXRlIHwgZGF0ZUZvcm1hdDogJ01NL0REL1lZWVknIH1cXFwiIHRhcmdldD1cXFwiX2JsYW5rXFxcIj4ke3RyaXAudW5pdE5hbWV9PC9hPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImRzLXN1YnRpdGxlIGN1cmF0ZWQtdHJpcF9fZGVzdGluYXRpb24tbmFtZSB0cnVuY2F0ZS10ZXh0XFxcIj4ke3RyaXAucHJvcGVydHlOYW1lfTwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImRzLXN1YnRpdGxlIGN1cmF0ZWQtdHJpcF9fZGVzdGluYXRpb24tbmFtZSB0cnVuY2F0ZS10ZXh0XFxcIj4ke3RyaXAubG9jYXRpb25OYW1lfTwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcclxcblxcdFxcdFxcdFxcdFxcdDwhLS0gcHJvcGVydHkgc3BlY3MgLS0+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiY3VyYXRlZC10cmlwX19wcm9wZXJ0eS1zcGVjcy1jb250YWluZXIgY3VyYXRlZC10cmlwX19jb2x1bW4gY3VyYXRlZC10cmlwX193aWR0aC0taXMtcHJvcGVydHktc3BlY3NcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImN1cmF0ZWQtdHJpcF9fdGFibGUtcm93XFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjdXJhdGVkLXRyaXBfX2NlbGwgY3VyYXRlZC10cmlwX19wcm9wZXJ0eS1zcGVjXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8c3BhbiBjbGFzcz1cXFwiY3VyYXRlZC10cmlwX19wcm9wZXJ0eS1zcGVjLXZhbHVlXFxcIj4ke3RyaXAuYmVkcm9vbXN9PC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDxzcGFuIGNsYXNzPVxcXCJjdXJhdGVkLXRyaXBfX3Byb3BlcnR5LXNwZWMtLXVuaXQtb2YtbWVhc3VyZW1lbnRcXFwiPkJSPC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImN1cmF0ZWQtdHJpcF9fY2VsbCBjdXJhdGVkLXRyaXBfX3Byb3BlcnR5LXNwZWNcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDxzcGFuIGNsYXNzPVxcXCJjdXJhdGVkLXRyaXBfX3Byb3BlcnR5LXNwZWMtdmFsdWVcXFwiPiR7dHJpcC5iYXRocm9vbXN9PC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDxzcGFuIGNsYXNzPVxcXCJjdXJhdGVkLXRyaXBfX3Byb3BlcnR5LXNwZWMtLXVuaXQtb2YtbWVhc3VyZW1lbnRcXFwiPkJBPC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImN1cmF0ZWQtdHJpcF9fY2VsbCBjdXJhdGVkLXRyaXBfX3Byb3BlcnR5LXNwZWNcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDxzcGFuIGNsYXNzPVxcXCJjdXJhdGVkLXRyaXBfX3Byb3BlcnR5LXNwZWMtdmFsdWVcXFwiPiR7dHJpcC5vY2N1cGFuY3l9PC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDxzcGFuIGNsYXNzPVxcXCJjdXJhdGVkLXRyaXBfX3Byb3BlcnR5LXNwZWMtLXVuaXQtb2YtbWVhc3VyZW1lbnRcXFwiPk9DQzwvc3Bhbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjdXJhdGVkLXRyaXBfX2NlbGwgY3VyYXRlZC10cmlwX19wcm9wZXJ0eS1zcGVjXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8c3BhbiBjbGFzcz1cXFwiY3VyYXRlZC10cmlwX19wcm9wZXJ0eS1zcGVjLXZhbHVlXFxcIj4ke3RyaXAuc3F1YXJlRm9vdGFnZX08L3NwYW4+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PHNwYW4gY2xhc3M9XFxcImN1cmF0ZWQtdHJpcF9fcHJvcGVydHktc3BlYy0tdW5pdC1vZi1tZWFzdXJlbWVudFxcXCI+RlQgPHN1cD4yPC9zdXA+PC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcclxcblxcdFxcdFxcdFxcdFxcdDwhLS0gZGF0ZXMgLS0+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiY3VyYXRlZC10cmlwX19kYXRlcy1jb250YWluZXIgY3VyYXRlZC10cmlwX19jb2x1bW4gY3VyYXRlZC10cmlwX193aWR0aC0taXMtZGF0ZXNcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImN1cmF0ZWQtdHJpcF9fdGFibGUtcm93XFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjdXJhdGVkLXRyaXBfX2NlbGwgY3VyYXRlZC10cmlwX19kYXRlcyBjdXJhdGVkLXRyaXBfX3dpZHRoLS1pcy1oYWxmXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjdXJhdGVkLXRyaXBfX2xhYmVsIGRzLWxhYmVsLXNtYWxsIHNob3cteHMtc20tb25seVxcXCI+Q2hlY2sgSW48L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjdXJhdGVkLXRyaXBfX2RhdGUtZGV0YWlsc1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PHNwYW4gY2xhc3M9XFxcImN1cmF0ZWQtdHJpcF9fZGF0ZS1kZXRhaWxzLWlzLS1kYXlcXFwiPiR7dHJpcC5jaGVja0luRGF0ZSB8IGRhdGVGb3JtYXQ6ICdkZGQnIH08L3NwYW4+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PHNwYW4gY2xhc3M9XFxcImN1cmF0ZWQtdHJpcF9fZGF0ZS1kZXRhaWxzLWlzLS1kYXRlXFxcIj4ke3RyaXAuY2hlY2tJbkRhdGUgfCBkYXRlRm9ybWF0OiAnTU1NIERELCBZWVlZJyB9PC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImN1cmF0ZWQtdHJpcF9fY2VsbCBjdXJhdGVkLXRyaXBfX2RhdGVzIGN1cmF0ZWQtdHJpcF9fd2lkdGgtLWlzLWhhbGZcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImN1cmF0ZWQtdHJpcF9fbGFiZWwgZHMtbGFiZWwtc21hbGwgc2hvdy14cy1zbS1vbmx5XFxcIj5DaGVjayBPdXQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjdXJhdGVkLXRyaXBfX2RhdGUtZGV0YWlsc1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PHNwYW4gY2xhc3M9XFxcImN1cmF0ZWQtdHJpcF9fZGF0ZS1kZXRhaWxzLWlzLS1kYXlcXFwiPiR7dHJpcC5jaGVja091dERhdGUgfCBkYXRlRm9ybWF0OiAnZGRkJyB9PC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDxzcGFuIGNsYXNzPVxcXCJjdXJhdGVkLXRyaXBfX2RhdGUtZGV0YWlscy1pcy0tZGF0ZVxcXCI+JHt0cmlwLmNoZWNrT3V0RGF0ZSB8IGRhdGVGb3JtYXQ6ICdNTU0gREQsIFlZWVknIH08L3NwYW4+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFxyXFxuXFx0XFx0XFx0XFx0XFx0PCEtLSB2YWx1ZSAmIGN0YSAtLT5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCIke2N1cmF0ZWRUcmlwc01vZGVsLnNob3dUcmlwVmFsdWUgPyAnY3VyYXRlZC10cmlwX192YWx1ZS1jdGEtY29udGFpbmVyIGN1cmF0ZWQtdHJpcF9fY29sdW1uIGN1cmF0ZWQtdHJpcF9fd2lkdGgtLWlzLXZhbHVlLWN0YScgOiAnJ31cXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImN1cmF0ZWQtdHJpcF9fdGFibGUtcm93XFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGlmLmJpbmQ9XFxcImN1cmF0ZWRUcmlwc01vZGVsLnNob3dUcmlwVmFsdWUgJiYgIWlzSG9saWRheVdpc2hMaXN0XFxcIiBjbGFzcz1cXFwiY3VyYXRlZC10cmlwX19jZWxsIGN1cmF0ZWQtdHJpcF9fdmFsdWUtY3RhLWRldGFpbHMgY3VyYXRlZC10cmlwX193aWR0aC0taXMtaGFsZlxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiY3VyYXRlZC10cmlwX19sYWJlbCBkcy1sYWJlbC1zbWFsbCBzaG93LXhzLXNtLW9ubHlcXFwiPkVzdC4gVmFsdWU8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8c3BhbiBjbGFzcz1cXFwiY3VyYXRlZC10cmlwX192YWx1ZS1jdGEtZGV0YWlscy0taXMtdmFsdWVcXFwiPiR7dHJpcC52YWx1ZSB8IG51bGxhYmxlTnVtYmVyOiAnJDAsMCd9PC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgaWYuYmluZD1cXFwiY3VyYXRlZFRyaXBzTW9kZWwuc2hvd1RyaXBWYWx1ZSAmJiBpc0hvbGlkYXlXaXNoTGlzdFxcXCIgY2xhc3M9XFxcImN1cmF0ZWQtdHJpcF9fY2VsbCBjdXJhdGVkLXRyaXBfX3ZhbHVlLWN0YS1kZXRhaWxzIGN1cmF0ZWQtdHJpcF9fd2lkdGgtLWlzLWhhbGZcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImN1cmF0ZWQtdHJpcF9fbGFiZWwgZHMtbGFiZWwtc21hbGwgc2hvdy14cy1zbS1vbmx5XFxcIj5Fc3QuIE5pZ2h0bHk8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8c3BhbiBjbGFzcz1cXFwiY3VyYXRlZC10cmlwX192YWx1ZS1jdGEtZGV0YWlscy0taXMtdmFsdWVcXFwiPiR7dHJpcC52YWx1ZSAvIHRyaXAubnVtYmVyT2ZEYXlzIHwgbnVsbGFibGVOdW1iZXI6ICckMCwwJ308L3NwYW4+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0PGRpdiBpZi5iaW5kPVxcXCJjdXJhdGVkVHJpcHNNb2RlbC5zaG93VHJpcFZhbHVlICYmIGlzSG9saWRheVdpc2hMaXN0XFxcIiBjbGFzcz1cXFwiY3VyYXRlZC10cmlwX19jZWxsIGN1cmF0ZWQtdHJpcF9fdmFsdWUtY3RhLWRldGFpbHMgY3VyYXRlZC10cmlwX193aWR0aC0taXMtaGFsZlxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiY3VyYXRlZC10cmlwX19sYWJlbCBkcy1sYWJlbC1zbWFsbCBzaG93LXhzLXNtLW9ubHlcXFwiPkVzdC4gVG90YWw8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8c3BhbiBjbGFzcz1cXFwiY3VyYXRlZC10cmlwX192YWx1ZS1jdGEtZGV0YWlscy0taXMtdmFsdWVcXFwiPiR7KHRyaXAudmFsdWUgKyAodHJpcC52YWx1ZSAqIDAuMTgpKSB8IG51bGxhYmxlTnVtYmVyOiAnJDAsMCd9PC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImN1cmF0ZWQtdHJpcF9fdmFsdWUtY3RhLWNvbnRhaW5lciBjdXJhdGVkLXRyaXBfX2NvbHVtbiBjdXJhdGVkLXRyaXBfX3dpZHRoLS1pcy12YWx1ZS1jdGFcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImN1cmF0ZWQtdHJpcF9fdGFibGUtcm93XFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjdXJhdGVkLXRyaXBfX2NlbGwgY3VyYXRlZC10cmlwX192YWx1ZS1jdGEtZGV0YWlscyAke2lzSG9saWRheVdpc2hMaXN0ICYmICFpc0hvbGlkYXlXaXNoTGlzdEVsaWdpYmxlID8gJycgOiBjdXJhdGVkLXRyaXBfX2NlbGwtLWlzLWN0YX1cXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDxhIGlmLmJpbmQ9XFxcInRyaXAub3ZlcnJpZGVVcmwubGVuZ3RoICYmICFpc0hvbGlkYXlXaXNoTGlzdFxcXCIgaHJlZj1cXFwiJHt0cmlwLm92ZXJyaWRlVXJsIH1cXFwiIGNsYXNzPVxcXCJjdXJhdGVkLXRyaXBfX3ZhbHVlLWN0YS1kZXRhaWxzLS1pcy1jdGFcXFwiIHRhcmdldD1cXFwiX2JsYW5rXFxcIj5WaWV3PC9hPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDxhIGlmLmJpbmQ9XFxcIiF0cmlwLm92ZXJyaWRlVXJsLmxlbmd0aCAmJiAhaXNIb2xpZGF5V2lzaExpc3RcXFwiIGhyZWY9XFxcIiR7dHJpcC51bml0VVJMfT9jaGVja0luPSR7dHJpcC5jaGVja0luRGF0ZSB8IGRhdGVGb3JtYXQ6ICdNTS9ERC9ZWVlZJyB9JmNoZWNrT3V0PSR7dHJpcC5jaGVja091dERhdGUgfCBkYXRlRm9ybWF0OiAnTU0vREQvWVlZWScgfVxcXCIgY2xhc3M9XFxcImN1cmF0ZWQtdHJpcF9fdmFsdWUtY3RhLWRldGFpbHMtLWlzLWN0YVxcXCIgdGFyZ2V0PVxcXCJfYmxhbmtcXFwiPlZpZXc8L2E+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PGEgaWYuYmluZD1cXFwiaXNIb2xpZGF5V2lzaExpc3QgJiYgaXNIb2xpZGF5V2lzaExpc3RFbGlnaWJsZSAmJiBpc1NlbGVjdGlvblBlcmlvZE9wZW5cXFwiIFxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGNsaWNrLnRyaWdnZXI9XFxcImFkZEhvbGlkYXlXaXNoTGlzdFVuaXRTZWxlY3Rpb24odHJpcClcXFwiIFxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGNsYXNzLmJpbmQ9XFxcInRyaXAuaXNTZWxlY3RlZCA/ICdjdXJhdGVkLXRyaXBfX3ZhbHVlLWN0YS1kZXRhaWxzLS1pcy1kaXNhYmxlZCcgOiAnY3VyYXRlZC10cmlwX192YWx1ZS1jdGEtZGV0YWlscy0taXMtY3RhJ1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0JHt0cmlwLmlzU2VsZWN0ZWQgPyAnQWRkZWQnIDogJ1NlbGVjdCd9XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9hPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdDwvZGl2PlxcclxcblxcdDwvZGl2PlxcclxcblxcclxcblxcdDxkaXYgaWYuYmluZD1cXFwiaGFzRXJyb3JzXFxcIiBjbGFzcz1cXFwicm93XFxcIj5cXHJcXG5cXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb2wteHMgY3VyYXRlZC10cmlwX19lcnJvci1tZXNzYWdlXFxcIj5cXHJcXG5cXHRcXHRcXHQ8aDQ+T29wcyEgV2UncmUgc29ycnkuPC9oND5cXHJcXG5cXHRcXHRcXHQ8ZGl2PlxcclxcblxcdFxcdFxcdFxcdEFuIGVycm9yIG9jY3VyZWQgYW5kIHdlcmUgdW5hYmxlIHRvIGxvYWQgdGhlIHBhZ2UuXFxyXFxuXFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0PC9kaXY+XFxyXFxuXFx0PC9kaXY+XFxyXFxuPC90ZW1wbGF0ZT5cXHJcXG5cIjsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///components/curated-trip/curated-trip.html\n')},"components/destination-application/destination-application":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError("Generator is already executing.");\r\n        while (_) try {\r\n            if (f = 1, y && (t = y[op[0] & 2 ? "return" : op[0] ? "throw" : "next"]) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [0, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar aurelia_router_1 = __webpack_require__(11);\r\nvar DestinationApplicationRepository_1 = __webpack_require__(169);\r\nvar FilterState_1 = __webpack_require__(168);\r\nvar DestinationApplication = /** @class */ (function () {\r\n    function DestinationApplication(destinationApplicationRepository, router) {\r\n        this.destinationApplicationRepository = destinationApplicationRepository;\r\n        this.router = router;\r\n        this.categoryFilters = [];\r\n        this.destinations = [];\r\n        this.showList = true;\r\n        this.styleFilters = [];\r\n    }\r\n    DestinationApplication.prototype.activate = function (model) {\r\n        this.model = model;\r\n    };\r\n    DestinationApplication.prototype.applyFilter = function () {\r\n        var _this = this;\r\n        this.destinations = this.applicationData.destinations.filter(function (d) { return _this.matchesOnCategory(d) && _this.matchesOnStyle(d); });\r\n        // disabling updating filter counts until UX review\r\n        // this.styleFilters.forEach(filter => filter.countOfMatches = this.calculateCountForStyle(filter.id));\r\n        // this.categoryFilters.forEach(filter => filter.countOfMatches = this.calculateCountForParentCategories(filter.id));\r\n    };\r\n    DestinationApplication.prototype.attached = function () {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var _a;\r\n            return __generator(this, function (_b) {\r\n                switch (_b.label) {\r\n                    case 0:\r\n                        _a = this;\r\n                        return [4 /*yield*/, this.destinationApplicationRepository.fetch()];\r\n                    case 1:\r\n                        _a.applicationData = _b.sent();\r\n                        this.destinations = this.applicationData.destinations;\r\n                        this.categoryFilters = this.createParentCategoryFilters();\r\n                        this.styleFilters = this.createStyleFilters();\r\n                        this.filterQueryParams();\r\n                        this.hero.activate(this.model.heroComponent);\r\n                        return [2 /*return*/];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    DestinationApplication.prototype.toggleToView = function (view) {\r\n        this.showList = view !== \'map\';\r\n        if (view === \'map\') {\r\n            window.scrollTo(0, 0);\r\n        }\r\n    };\r\n    DestinationApplication.prototype.createParentCategoryFilters = function () {\r\n        var _this = this;\r\n        return Object.keys(this.applicationData.parentCategories)\r\n            .map(function (parentCategoryId) {\r\n            var filterState = new FilterState_1.FilterState();\r\n            filterState.id = parseInt(parentCategoryId, 10);\r\n            filterState.name = _this.applicationData.parentCategories[parentCategoryId];\r\n            filterState.countOfMatches = _this.calculateCountForParentCategories(filterState.id);\r\n            filterState.isSelected = true;\r\n            return filterState;\r\n        })\r\n            .filter(function (cf) { return cf.countOfMatches > 0; });\r\n    };\r\n    DestinationApplication.prototype.calculateCountForStyle = function (id) {\r\n        return this.destinations\r\n            .filter(function (destination) { return destination.classification.styles.includes(id); })\r\n            .reduce(function (accumulatedNumberOfAccomodations, destination) { return destination.numberOfUnits + accumulatedNumberOfAccomodations; }, 0);\r\n    };\r\n    DestinationApplication.prototype.calculateCountForParentCategories = function (id) {\r\n        return this.destinations\r\n            .filter(function (destination) { return destination.classification.parentCategories.includes(id); })\r\n            .reduce(function (accumulatedNumberOfAccomodations, destination) { return destination.numberOfUnits + accumulatedNumberOfAccomodations; }, 0);\r\n    };\r\n    DestinationApplication.prototype.createStyleFilters = function () {\r\n        var _this = this;\r\n        return Object.keys(this.applicationData.styles)\r\n            .map(function (styleId) {\r\n            var filterState = new FilterState_1.FilterState();\r\n            filterState.id = parseInt(styleId, 10);\r\n            filterState.name = _this.applicationData.styles[styleId];\r\n            filterState.countOfMatches = _this.calculateCountForStyle(filterState.id);\r\n            return filterState;\r\n        })\r\n            .filter(function (sf) { return sf.countOfMatches > 0; });\r\n    };\r\n    DestinationApplication.prototype.filterQueryParams = function () {\r\n        var params = this.router.currentInstruction.queryParams;\r\n        if (params.hasOwnProperty(\'propertyTypes\')) {\r\n            var filter_1 = params.propertyTypes.split(\',\');\r\n            // Category Filters are selected true by default\r\n            this.categoryFilters.forEach(function (cf) {\r\n                if (filter_1.includes(cf.id.toString())) {\r\n                    cf.isSelected = false;\r\n                }\r\n            });\r\n        }\r\n        if (params.hasOwnProperty(\'types\')) {\r\n            var filter_2 = params.types.split(\',\');\r\n            this.styleFilters.forEach(function (sf) {\r\n                if (filter_2.includes(sf.id.toString())) {\r\n                    sf.isSelected = true;\r\n                }\r\n            });\r\n        }\r\n        this.applyFilter();\r\n    };\r\n    DestinationApplication.prototype.matchesOnCategory = function (destination) {\r\n        var selectedCategoryFilters = this.categoryFilters.filter(function (cf) { return cf.isSelected; });\r\n        // if all are "not selected" or "selected" then show all destinations\r\n        if (selectedCategoryFilters.length > 0 && this.categoryFilters.length !== selectedCategoryFilters.length) {\r\n            // checks if destination has one of the active categoryFilter\r\n            var isNotAMatchOnCategory = selectedCategoryFilters.filter(function (f) { return destination.classification.parentCategories.includes(f.id); }).length === 0;\r\n            if (isNotAMatchOnCategory) {\r\n                return false;\r\n            }\r\n        }\r\n        return true;\r\n    };\r\n    DestinationApplication.prototype.matchesOnStyle = function (destination) {\r\n        var selectedStyleFilters = this.styleFilters.filter(function (sf) { return sf.isSelected; });\r\n        // if all are "not selected" or "selected" then show all destinations\r\n        if (selectedStyleFilters.length > 0 && this.styleFilters.length !== selectedStyleFilters.length) {\r\n            // checks if destination has one of the active styleFilter\r\n            var isNotAMatchOnStyle = selectedStyleFilters.filter(function (filter) {\r\n                return destination.classification.styles.includes(filter.id);\r\n            }).length === 0;\r\n            if (isNotAMatchOnStyle) {\r\n                return false;\r\n            }\r\n        }\r\n        return true;\r\n    };\r\n    DestinationApplication = __decorate([\r\n        aurelia_framework_1.autoinject(),\r\n        __metadata("design:paramtypes", [DestinationApplicationRepository_1.DestinationApplicationRepository, aurelia_router_1.Router])\r\n    ], DestinationApplication);\r\n    return DestinationApplication;\r\n}());\r\nexports.DestinationApplication = DestinationApplication;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9kZXN0aW5hdGlvbi1hcHBsaWNhdGlvbi9kZXN0aW5hdGlvbi1hcHBsaWNhdGlvbi50cz85MTM2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLFFBQVE7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsTUFBTSw2QkFBNkIsRUFBRSxZQUFZLFdBQVcsRUFBRTtBQUNqRyxrQ0FBa0MsTUFBTSxpQ0FBaUMsRUFBRSxZQUFZLFdBQVcsRUFBRTtBQUNwRywrQkFBK0IsaUVBQWlFLHVCQUF1QixFQUFFLDRCQUE0QjtBQUNySjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsYUFBYSw2QkFBNkIsMEJBQTBCLGFBQWEsRUFBRSxxQkFBcUI7QUFDeEcsZ0JBQWdCLHFEQUFxRCxvRUFBb0UsYUFBYSxFQUFFO0FBQ3hKLHNCQUFzQixzQkFBc0IscUJBQXFCLEdBQUc7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDLGtDQUFrQyxTQUFTO0FBQzNDLGtDQUFrQyxXQUFXLFVBQVU7QUFDdkQseUNBQXlDLGNBQWM7QUFDdkQ7QUFDQSw2R0FBNkcsT0FBTyxVQUFVO0FBQzlILGdGQUFnRixpQkFBaUIsT0FBTztBQUN4Ryx3REFBd0QsZ0JBQWdCLFFBQVEsT0FBTztBQUN2Riw4Q0FBOEMsZ0JBQWdCLGdCQUFnQixPQUFPO0FBQ3JGO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQSxTQUFTLFlBQVksYUFBYSxPQUFPLEVBQUUsVUFBVSxXQUFXO0FBQ2hFLG1DQUFtQyxTQUFTO0FBQzVDO0FBQ0E7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RCwwQkFBMEIsbUJBQU8sQ0FBQyxtQkFBbUI7QUFDckQsdUJBQXVCLG1CQUFPLENBQUMsRUFBZ0I7QUFDL0MseUNBQXlDLG1CQUFPLENBQUMsR0FBb0M7QUFDckYsb0JBQW9CLG1CQUFPLENBQUMsR0FBZTtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUZBQW1GLDhEQUE4RCxFQUFFO0FBQ25KO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxtQ0FBbUMsOEJBQThCLEVBQUU7QUFDbkU7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLHVEQUF1RCxFQUFFO0FBQ3JHLDhFQUE4RSxxRUFBcUUsRUFBRTtBQUNySjtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsaUVBQWlFLEVBQUU7QUFDL0csOEVBQThFLHFFQUFxRSxFQUFFO0FBQ3JKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG1DQUFtQyw4QkFBOEIsRUFBRTtBQUNuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlGQUFpRixzQkFBc0IsRUFBRTtBQUN6RztBQUNBO0FBQ0E7QUFDQSxxRkFBcUYsbUVBQW1FLEVBQUU7QUFDMUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRUFBMkUsc0JBQXNCLEVBQUU7QUFDbkc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEIiwiZmlsZSI6ImNvbXBvbmVudHMvZGVzdGluYXRpb24tYXBwbGljYXRpb24vZGVzdGluYXRpb24tYXBwbGljYXRpb24uanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxudmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufTtcclxudmFyIF9fbWV0YWRhdGEgPSAodGhpcyAmJiB0aGlzLl9fbWV0YWRhdGEpIHx8IGZ1bmN0aW9uIChrLCB2KSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEoaywgdik7XHJcbn07XHJcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZShyZXN1bHQudmFsdWUpOyB9KS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn07XHJcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IHlbb3BbMF0gJiAyID8gXCJyZXR1cm5cIiA6IG9wWzBdID8gXCJ0aHJvd1wiIDogXCJuZXh0XCJdKSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFswLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn07XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIGF1cmVsaWFfZnJhbWV3b3JrXzEgPSByZXF1aXJlKFwiYXVyZWxpYS1mcmFtZXdvcmtcIik7XHJcbnZhciBhdXJlbGlhX3JvdXRlcl8xID0gcmVxdWlyZShcImF1cmVsaWEtcm91dGVyXCIpO1xyXG52YXIgRGVzdGluYXRpb25BcHBsaWNhdGlvblJlcG9zaXRvcnlfMSA9IHJlcXVpcmUoXCIuL0Rlc3RpbmF0aW9uQXBwbGljYXRpb25SZXBvc2l0b3J5XCIpO1xyXG52YXIgRmlsdGVyU3RhdGVfMSA9IHJlcXVpcmUoXCIuL0ZpbHRlclN0YXRlXCIpO1xyXG52YXIgRGVzdGluYXRpb25BcHBsaWNhdGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIERlc3RpbmF0aW9uQXBwbGljYXRpb24oZGVzdGluYXRpb25BcHBsaWNhdGlvblJlcG9zaXRvcnksIHJvdXRlcikge1xyXG4gICAgICAgIHRoaXMuZGVzdGluYXRpb25BcHBsaWNhdGlvblJlcG9zaXRvcnkgPSBkZXN0aW5hdGlvbkFwcGxpY2F0aW9uUmVwb3NpdG9yeTtcclxuICAgICAgICB0aGlzLnJvdXRlciA9IHJvdXRlcjtcclxuICAgICAgICB0aGlzLmNhdGVnb3J5RmlsdGVycyA9IFtdO1xyXG4gICAgICAgIHRoaXMuZGVzdGluYXRpb25zID0gW107XHJcbiAgICAgICAgdGhpcy5zaG93TGlzdCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zdHlsZUZpbHRlcnMgPSBbXTtcclxuICAgIH1cclxuICAgIERlc3RpbmF0aW9uQXBwbGljYXRpb24ucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24gKG1vZGVsKSB7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG1vZGVsO1xyXG4gICAgfTtcclxuICAgIERlc3RpbmF0aW9uQXBwbGljYXRpb24ucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbnMgPSB0aGlzLmFwcGxpY2F0aW9uRGF0YS5kZXN0aW5hdGlvbnMuZmlsdGVyKGZ1bmN0aW9uIChkKSB7IHJldHVybiBfdGhpcy5tYXRjaGVzT25DYXRlZ29yeShkKSAmJiBfdGhpcy5tYXRjaGVzT25TdHlsZShkKTsgfSk7XHJcbiAgICAgICAgLy8gZGlzYWJsaW5nIHVwZGF0aW5nIGZpbHRlciBjb3VudHMgdW50aWwgVVggcmV2aWV3XHJcbiAgICAgICAgLy8gdGhpcy5zdHlsZUZpbHRlcnMuZm9yRWFjaChmaWx0ZXIgPT4gZmlsdGVyLmNvdW50T2ZNYXRjaGVzID0gdGhpcy5jYWxjdWxhdGVDb3VudEZvclN0eWxlKGZpbHRlci5pZCkpO1xyXG4gICAgICAgIC8vIHRoaXMuY2F0ZWdvcnlGaWx0ZXJzLmZvckVhY2goZmlsdGVyID0+IGZpbHRlci5jb3VudE9mTWF0Y2hlcyA9IHRoaXMuY2FsY3VsYXRlQ291bnRGb3JQYXJlbnRDYXRlZ29yaWVzKGZpbHRlci5pZCkpO1xyXG4gICAgfTtcclxuICAgIERlc3RpbmF0aW9uQXBwbGljYXRpb24ucHJvdG90eXBlLmF0dGFjaGVkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIF9hO1xyXG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBfYSA9IHRoaXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMuZGVzdGluYXRpb25BcHBsaWNhdGlvblJlcG9zaXRvcnkuZmV0Y2goKV07XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBfYS5hcHBsaWNhdGlvbkRhdGEgPSBfYi5zZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb25zID0gdGhpcy5hcHBsaWNhdGlvbkRhdGEuZGVzdGluYXRpb25zO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhdGVnb3J5RmlsdGVycyA9IHRoaXMuY3JlYXRlUGFyZW50Q2F0ZWdvcnlGaWx0ZXJzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3R5bGVGaWx0ZXJzID0gdGhpcy5jcmVhdGVTdHlsZUZpbHRlcnMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJRdWVyeVBhcmFtcygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhlcm8uYWN0aXZhdGUodGhpcy5tb2RlbC5oZXJvQ29tcG9uZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICBEZXN0aW5hdGlvbkFwcGxpY2F0aW9uLnByb3RvdHlwZS50b2dnbGVUb1ZpZXcgPSBmdW5jdGlvbiAodmlldykge1xyXG4gICAgICAgIHRoaXMuc2hvd0xpc3QgPSB2aWV3ICE9PSAnbWFwJztcclxuICAgICAgICBpZiAodmlldyA9PT0gJ21hcCcpIHtcclxuICAgICAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsIDApO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBEZXN0aW5hdGlvbkFwcGxpY2F0aW9uLnByb3RvdHlwZS5jcmVhdGVQYXJlbnRDYXRlZ29yeUZpbHRlcnMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5hcHBsaWNhdGlvbkRhdGEucGFyZW50Q2F0ZWdvcmllcylcclxuICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAocGFyZW50Q2F0ZWdvcnlJZCkge1xyXG4gICAgICAgICAgICB2YXIgZmlsdGVyU3RhdGUgPSBuZXcgRmlsdGVyU3RhdGVfMS5GaWx0ZXJTdGF0ZSgpO1xyXG4gICAgICAgICAgICBmaWx0ZXJTdGF0ZS5pZCA9IHBhcnNlSW50KHBhcmVudENhdGVnb3J5SWQsIDEwKTtcclxuICAgICAgICAgICAgZmlsdGVyU3RhdGUubmFtZSA9IF90aGlzLmFwcGxpY2F0aW9uRGF0YS5wYXJlbnRDYXRlZ29yaWVzW3BhcmVudENhdGVnb3J5SWRdO1xyXG4gICAgICAgICAgICBmaWx0ZXJTdGF0ZS5jb3VudE9mTWF0Y2hlcyA9IF90aGlzLmNhbGN1bGF0ZUNvdW50Rm9yUGFyZW50Q2F0ZWdvcmllcyhmaWx0ZXJTdGF0ZS5pZCk7XHJcbiAgICAgICAgICAgIGZpbHRlclN0YXRlLmlzU2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyU3RhdGU7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoY2YpIHsgcmV0dXJuIGNmLmNvdW50T2ZNYXRjaGVzID4gMDsgfSk7XHJcbiAgICB9O1xyXG4gICAgRGVzdGluYXRpb25BcHBsaWNhdGlvbi5wcm90b3R5cGUuY2FsY3VsYXRlQ291bnRGb3JTdHlsZSA9IGZ1bmN0aW9uIChpZCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlc3RpbmF0aW9uc1xyXG4gICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChkZXN0aW5hdGlvbikgeyByZXR1cm4gZGVzdGluYXRpb24uY2xhc3NpZmljYXRpb24uc3R5bGVzLmluY2x1ZGVzKGlkKTsgfSlcclxuICAgICAgICAgICAgLnJlZHVjZShmdW5jdGlvbiAoYWNjdW11bGF0ZWROdW1iZXJPZkFjY29tb2RhdGlvbnMsIGRlc3RpbmF0aW9uKSB7IHJldHVybiBkZXN0aW5hdGlvbi5udW1iZXJPZlVuaXRzICsgYWNjdW11bGF0ZWROdW1iZXJPZkFjY29tb2RhdGlvbnM7IH0sIDApO1xyXG4gICAgfTtcclxuICAgIERlc3RpbmF0aW9uQXBwbGljYXRpb24ucHJvdG90eXBlLmNhbGN1bGF0ZUNvdW50Rm9yUGFyZW50Q2F0ZWdvcmllcyA9IGZ1bmN0aW9uIChpZCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlc3RpbmF0aW9uc1xyXG4gICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChkZXN0aW5hdGlvbikgeyByZXR1cm4gZGVzdGluYXRpb24uY2xhc3NpZmljYXRpb24ucGFyZW50Q2F0ZWdvcmllcy5pbmNsdWRlcyhpZCk7IH0pXHJcbiAgICAgICAgICAgIC5yZWR1Y2UoZnVuY3Rpb24gKGFjY3VtdWxhdGVkTnVtYmVyT2ZBY2NvbW9kYXRpb25zLCBkZXN0aW5hdGlvbikgeyByZXR1cm4gZGVzdGluYXRpb24ubnVtYmVyT2ZVbml0cyArIGFjY3VtdWxhdGVkTnVtYmVyT2ZBY2NvbW9kYXRpb25zOyB9LCAwKTtcclxuICAgIH07XHJcbiAgICBEZXN0aW5hdGlvbkFwcGxpY2F0aW9uLnByb3RvdHlwZS5jcmVhdGVTdHlsZUZpbHRlcnMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5hcHBsaWNhdGlvbkRhdGEuc3R5bGVzKVxyXG4gICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChzdHlsZUlkKSB7XHJcbiAgICAgICAgICAgIHZhciBmaWx0ZXJTdGF0ZSA9IG5ldyBGaWx0ZXJTdGF0ZV8xLkZpbHRlclN0YXRlKCk7XHJcbiAgICAgICAgICAgIGZpbHRlclN0YXRlLmlkID0gcGFyc2VJbnQoc3R5bGVJZCwgMTApO1xyXG4gICAgICAgICAgICBmaWx0ZXJTdGF0ZS5uYW1lID0gX3RoaXMuYXBwbGljYXRpb25EYXRhLnN0eWxlc1tzdHlsZUlkXTtcclxuICAgICAgICAgICAgZmlsdGVyU3RhdGUuY291bnRPZk1hdGNoZXMgPSBfdGhpcy5jYWxjdWxhdGVDb3VudEZvclN0eWxlKGZpbHRlclN0YXRlLmlkKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZpbHRlclN0YXRlO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHNmKSB7IHJldHVybiBzZi5jb3VudE9mTWF0Y2hlcyA+IDA7IH0pO1xyXG4gICAgfTtcclxuICAgIERlc3RpbmF0aW9uQXBwbGljYXRpb24ucHJvdG90eXBlLmZpbHRlclF1ZXJ5UGFyYW1zID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBwYXJhbXMgPSB0aGlzLnJvdXRlci5jdXJyZW50SW5zdHJ1Y3Rpb24ucXVlcnlQYXJhbXM7XHJcbiAgICAgICAgaWYgKHBhcmFtcy5oYXNPd25Qcm9wZXJ0eSgncHJvcGVydHlUeXBlcycpKSB7XHJcbiAgICAgICAgICAgIHZhciBmaWx0ZXJfMSA9IHBhcmFtcy5wcm9wZXJ0eVR5cGVzLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgICAgIC8vIENhdGVnb3J5IEZpbHRlcnMgYXJlIHNlbGVjdGVkIHRydWUgYnkgZGVmYXVsdFxyXG4gICAgICAgICAgICB0aGlzLmNhdGVnb3J5RmlsdGVycy5mb3JFYWNoKGZ1bmN0aW9uIChjZikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlcl8xLmluY2x1ZGVzKGNmLmlkLnRvU3RyaW5nKCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2YuaXNTZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhcmFtcy5oYXNPd25Qcm9wZXJ0eSgndHlwZXMnKSkge1xyXG4gICAgICAgICAgICB2YXIgZmlsdGVyXzIgPSBwYXJhbXMudHlwZXMuc3BsaXQoJywnKTtcclxuICAgICAgICAgICAgdGhpcy5zdHlsZUZpbHRlcnMuZm9yRWFjaChmdW5jdGlvbiAoc2YpIHtcclxuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJfMi5pbmNsdWRlcyhzZi5pZC50b1N0cmluZygpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNmLmlzU2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcigpO1xyXG4gICAgfTtcclxuICAgIERlc3RpbmF0aW9uQXBwbGljYXRpb24ucHJvdG90eXBlLm1hdGNoZXNPbkNhdGVnb3J5ID0gZnVuY3Rpb24gKGRlc3RpbmF0aW9uKSB7XHJcbiAgICAgICAgdmFyIHNlbGVjdGVkQ2F0ZWdvcnlGaWx0ZXJzID0gdGhpcy5jYXRlZ29yeUZpbHRlcnMuZmlsdGVyKGZ1bmN0aW9uIChjZikgeyByZXR1cm4gY2YuaXNTZWxlY3RlZDsgfSk7XHJcbiAgICAgICAgLy8gaWYgYWxsIGFyZSBcIm5vdCBzZWxlY3RlZFwiIG9yIFwic2VsZWN0ZWRcIiB0aGVuIHNob3cgYWxsIGRlc3RpbmF0aW9uc1xyXG4gICAgICAgIGlmIChzZWxlY3RlZENhdGVnb3J5RmlsdGVycy5sZW5ndGggPiAwICYmIHRoaXMuY2F0ZWdvcnlGaWx0ZXJzLmxlbmd0aCAhPT0gc2VsZWN0ZWRDYXRlZ29yeUZpbHRlcnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIC8vIGNoZWNrcyBpZiBkZXN0aW5hdGlvbiBoYXMgb25lIG9mIHRoZSBhY3RpdmUgY2F0ZWdvcnlGaWx0ZXJcclxuICAgICAgICAgICAgdmFyIGlzTm90QU1hdGNoT25DYXRlZ29yeSA9IHNlbGVjdGVkQ2F0ZWdvcnlGaWx0ZXJzLmZpbHRlcihmdW5jdGlvbiAoZikgeyByZXR1cm4gZGVzdGluYXRpb24uY2xhc3NpZmljYXRpb24ucGFyZW50Q2F0ZWdvcmllcy5pbmNsdWRlcyhmLmlkKTsgfSkubGVuZ3RoID09PSAwO1xyXG4gICAgICAgICAgICBpZiAoaXNOb3RBTWF0Y2hPbkNhdGVnb3J5KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9O1xyXG4gICAgRGVzdGluYXRpb25BcHBsaWNhdGlvbi5wcm90b3R5cGUubWF0Y2hlc09uU3R5bGUgPSBmdW5jdGlvbiAoZGVzdGluYXRpb24pIHtcclxuICAgICAgICB2YXIgc2VsZWN0ZWRTdHlsZUZpbHRlcnMgPSB0aGlzLnN0eWxlRmlsdGVycy5maWx0ZXIoZnVuY3Rpb24gKHNmKSB7IHJldHVybiBzZi5pc1NlbGVjdGVkOyB9KTtcclxuICAgICAgICAvLyBpZiBhbGwgYXJlIFwibm90IHNlbGVjdGVkXCIgb3IgXCJzZWxlY3RlZFwiIHRoZW4gc2hvdyBhbGwgZGVzdGluYXRpb25zXHJcbiAgICAgICAgaWYgKHNlbGVjdGVkU3R5bGVGaWx0ZXJzLmxlbmd0aCA+IDAgJiYgdGhpcy5zdHlsZUZpbHRlcnMubGVuZ3RoICE9PSBzZWxlY3RlZFN0eWxlRmlsdGVycy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgLy8gY2hlY2tzIGlmIGRlc3RpbmF0aW9uIGhhcyBvbmUgb2YgdGhlIGFjdGl2ZSBzdHlsZUZpbHRlclxyXG4gICAgICAgICAgICB2YXIgaXNOb3RBTWF0Y2hPblN0eWxlID0gc2VsZWN0ZWRTdHlsZUZpbHRlcnMuZmlsdGVyKGZ1bmN0aW9uIChmaWx0ZXIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkZXN0aW5hdGlvbi5jbGFzc2lmaWNhdGlvbi5zdHlsZXMuaW5jbHVkZXMoZmlsdGVyLmlkKTtcclxuICAgICAgICAgICAgfSkubGVuZ3RoID09PSAwO1xyXG4gICAgICAgICAgICBpZiAoaXNOb3RBTWF0Y2hPblN0eWxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9O1xyXG4gICAgRGVzdGluYXRpb25BcHBsaWNhdGlvbiA9IF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuYXV0b2luamVjdCgpLFxyXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbRGVzdGluYXRpb25BcHBsaWNhdGlvblJlcG9zaXRvcnlfMS5EZXN0aW5hdGlvbkFwcGxpY2F0aW9uUmVwb3NpdG9yeSwgYXVyZWxpYV9yb3V0ZXJfMS5Sb3V0ZXJdKVxyXG4gICAgXSwgRGVzdGluYXRpb25BcHBsaWNhdGlvbik7XHJcbiAgICByZXR1cm4gRGVzdGluYXRpb25BcHBsaWNhdGlvbjtcclxufSgpKTtcclxuZXhwb3J0cy5EZXN0aW5hdGlvbkFwcGxpY2F0aW9uID0gRGVzdGluYXRpb25BcHBsaWNhdGlvbjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/destination-application/destination-application\n')},"components/destination-application/destination-application.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<div class=\\"destination-application destination-application--${showList? \'list\': \'map\'}\\">\\r\\n\\r\\n\\t\\t<hero view-model.ref=\\"hero\\" containerless model.bind=\\"model.heroComponent\\" if.bind=\\"showList && model.heroComponent\\"><\/hero>\\r\\n\\r\\n\\t\\t<div class=\\"destination_content\\">\\r\\n\\t\\t\\t<div class=\\"destination__grey-bar row\\">\\r\\n\\r\\n\\t\\t\\t\\t<div class=\\"destination__tools col-xs-12\\">\\r\\n\\t\\t\\t\\t\\t<destination-filter\\r\\n\\t\\t\\t\\t\\t\\tcategories.bind=\\"categoryFilters\\"\\r\\n\\t\\t\\t\\t\\t\\tstyles.bind=\\"styleFilters\\"\\r\\n\\t\\t\\t\\t\\t\\tapply-filter-function.call=\\"applyFilter()\\">\\r\\n\\t\\t\\t\\t\\t<\/destination-filter>\\r\\n\\r\\n\\t\\t\\t\\t\\t<div class=\\"destination-list-map-toggle\\">\\r\\n\\t\\t\\t\\t\\t\\t<div click.delegate=\\"toggleToView(\'list\')\\" class=\\"destination-list-map-toggle__option ${showList ? \'active\': \'\'}\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<span class=\\"destination-list-map-toggle__icon destination-list-map-toggle__list-icon\\"><\/span>\\r\\n\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t<div click.delegate=\\"toggleToView(\'map\')\\" class=\\"destination-list-map-toggle__option ${!showList ? \'active\': \'\'}\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<span class=\\"destination-list-map-toggle__icon destination-list-map-toggle__map-icon\\"><\/span>\\r\\n\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t<destination-map if.bind=\\"!showList\\" google-maps-api-url.bind=\\"model.googleMapsApiUrl\\" destinations.bind=\\"destinations\\"\\r\\n\\t\\t\\t containerless>\\r\\n\\t\\t\\t<\/destination-map>\\r\\n\\r\\n\\t\\t\\t<destination-list if.bind=\\"showList\\"\\r\\n\\t\\t\\t\\tmodel.bind=\\"applicationData\\"\\r\\n\\t\\t\\t\\tdestinations.bind=\\"destinations\\"\\r\\n\\t\\t\\t\\tcontainerless>\\r\\n\\t\\t\\t<\/destination-list>\\r\\n\\r\\n\\t\\t<\/div>\\r\\n\\t<\/div>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9kZXN0aW5hdGlvbi1hcHBsaWNhdGlvbi9kZXN0aW5hdGlvbi1hcHBsaWNhdGlvbi5odG1sPzMwMGIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0dBQWtHLHdCQUF3Qix1ckJBQXVyQix3QkFBd0IscVBBQXFQLHlCQUF5QiIsImZpbGUiOiJjb21wb25lbnRzL2Rlc3RpbmF0aW9uLWFwcGxpY2F0aW9uL2Rlc3RpbmF0aW9uLWFwcGxpY2F0aW9uLmh0bWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IFwiPHRlbXBsYXRlPlxcclxcblxcdDxkaXYgY2xhc3M9XFxcImRlc3RpbmF0aW9uLWFwcGxpY2F0aW9uIGRlc3RpbmF0aW9uLWFwcGxpY2F0aW9uLS0ke3Nob3dMaXN0PyAnbGlzdCc6ICdtYXAnfVxcXCI+XFxyXFxuXFxyXFxuXFx0XFx0PGhlcm8gdmlldy1tb2RlbC5yZWY9XFxcImhlcm9cXFwiIGNvbnRhaW5lcmxlc3MgbW9kZWwuYmluZD1cXFwibW9kZWwuaGVyb0NvbXBvbmVudFxcXCIgaWYuYmluZD1cXFwic2hvd0xpc3QgJiYgbW9kZWwuaGVyb0NvbXBvbmVudFxcXCI+PC9oZXJvPlxcclxcblxcclxcblxcdFxcdDxkaXYgY2xhc3M9XFxcImRlc3RpbmF0aW9uX2NvbnRlbnRcXFwiPlxcclxcblxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImRlc3RpbmF0aW9uX19ncmV5LWJhciByb3dcXFwiPlxcclxcblxcclxcblxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImRlc3RpbmF0aW9uX190b29scyBjb2wteHMtMTJcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdDxkZXN0aW5hdGlvbi1maWx0ZXJcXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRjYXRlZ29yaWVzLmJpbmQ9XFxcImNhdGVnb3J5RmlsdGVyc1xcXCJcXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRzdHlsZXMuYmluZD1cXFwic3R5bGVGaWx0ZXJzXFxcIlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdGFwcGx5LWZpbHRlci1mdW5jdGlvbi5jYWxsPVxcXCJhcHBseUZpbHRlcigpXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8L2Rlc3RpbmF0aW9uLWZpbHRlcj5cXHJcXG5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJkZXN0aW5hdGlvbi1saXN0LW1hcC10b2dnbGVcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgY2xpY2suZGVsZWdhdGU9XFxcInRvZ2dsZVRvVmlldygnbGlzdCcpXFxcIiBjbGFzcz1cXFwiZGVzdGluYXRpb24tbGlzdC1tYXAtdG9nZ2xlX19vcHRpb24gJHtzaG93TGlzdCA/ICdhY3RpdmUnOiAnJ31cXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdDxzcGFuIGNsYXNzPVxcXCJkZXN0aW5hdGlvbi1saXN0LW1hcC10b2dnbGVfX2ljb24gZGVzdGluYXRpb24tbGlzdC1tYXAtdG9nZ2xlX19saXN0LWljb25cXFwiPjwvc3Bhbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsaWNrLmRlbGVnYXRlPVxcXCJ0b2dnbGVUb1ZpZXcoJ21hcCcpXFxcIiBjbGFzcz1cXFwiZGVzdGluYXRpb24tbGlzdC1tYXAtdG9nZ2xlX19vcHRpb24gJHshc2hvd0xpc3QgPyAnYWN0aXZlJzogJyd9XFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHQ8c3BhbiBjbGFzcz1cXFwiZGVzdGluYXRpb24tbGlzdC1tYXAtdG9nZ2xlX19pY29uIGRlc3RpbmF0aW9uLWxpc3QtbWFwLXRvZ2dsZV9fbWFwLWljb25cXFwiPjwvc3Bhbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHJcXG5cXHRcXHRcXHQ8ZGVzdGluYXRpb24tbWFwIGlmLmJpbmQ9XFxcIiFzaG93TGlzdFxcXCIgZ29vZ2xlLW1hcHMtYXBpLXVybC5iaW5kPVxcXCJtb2RlbC5nb29nbGVNYXBzQXBpVXJsXFxcIiBkZXN0aW5hdGlvbnMuYmluZD1cXFwiZGVzdGluYXRpb25zXFxcIlxcclxcblxcdFxcdFxcdCBjb250YWluZXJsZXNzPlxcclxcblxcdFxcdFxcdDwvZGVzdGluYXRpb24tbWFwPlxcclxcblxcclxcblxcdFxcdFxcdDxkZXN0aW5hdGlvbi1saXN0IGlmLmJpbmQ9XFxcInNob3dMaXN0XFxcIlxcclxcblxcdFxcdFxcdFxcdG1vZGVsLmJpbmQ9XFxcImFwcGxpY2F0aW9uRGF0YVxcXCJcXHJcXG5cXHRcXHRcXHRcXHRkZXN0aW5hdGlvbnMuYmluZD1cXFwiZGVzdGluYXRpb25zXFxcIlxcclxcblxcdFxcdFxcdFxcdGNvbnRhaW5lcmxlc3M+XFxyXFxuXFx0XFx0XFx0PC9kZXN0aW5hdGlvbi1saXN0PlxcclxcblxcclxcblxcdFxcdDwvZGl2PlxcclxcblxcdDwvZGl2PlxcclxcbjwvdGVtcGxhdGU+XFxyXFxuXCI7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/destination-application/destination-application.html\n')},"components/destination-application/destination-filter":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar DestinationFilter = /** @class */ (function () {\r\n    function DestinationFilter() {\r\n        this.mobileFiltersAreExpanded = false;\r\n    }\r\n    DestinationFilter.prototype.toggleMobileFilters = function () {\r\n        this.mobileFiltersAreExpanded = !this.mobileFiltersAreExpanded;\r\n    };\r\n    DestinationFilter.prototype.changeFilter = function () {\r\n        this.applyFilterFunction();\r\n        var categoryFilters = this.categories.filter(function (c) { return !c.isSelected; }).map(function (x) { return x.id; });\r\n        var styleFilters = this.styles.filter(function (d) { return d.isSelected; }).map(function (x) { return x.id; });\r\n        history.replaceState(\'travel/destinations/\', \'\', "?propertyTypes=" + categoryFilters.join(\'%2C\') + "&types=" + styleFilters.join(\'%2C\'));\r\n    };\r\n    DestinationFilter.prototype.closeMobileFilters = function () {\r\n        this.mobileFiltersAreExpanded = false;\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Array)\r\n    ], DestinationFilter.prototype, "categories", void 0);\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Array)\r\n    ], DestinationFilter.prototype, "styles", void 0);\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Object)\r\n    ], DestinationFilter.prototype, "applyFilterFunction", void 0);\r\n    DestinationFilter = __decorate([\r\n        aurelia_framework_1.autoinject()\r\n    ], DestinationFilter);\r\n    return DestinationFilter;\r\n}());\r\nexports.DestinationFilter = DestinationFilter;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9kZXN0aW5hdGlvbi1hcHBsaWNhdGlvbi9kZXN0aW5hdGlvbi1maWx0ZXIudHM/Zjc0MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxRQUFRO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RCwwQkFBMEIsbUJBQU8sQ0FBQyxtQkFBbUI7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUVBQW1FLHNCQUFzQixFQUFFLG9CQUFvQixhQUFhLEVBQUU7QUFDOUgsNERBQTRELHFCQUFxQixFQUFFLG9CQUFvQixhQUFhLEVBQUU7QUFDdEg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEIiwiZmlsZSI6ImNvbXBvbmVudHMvZGVzdGluYXRpb24tYXBwbGljYXRpb24vZGVzdGluYXRpb24tZmlsdGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2RlY29yYXRlID0gKHRoaXMgJiYgdGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn07XHJcbnZhciBfX21ldGFkYXRhID0gKHRoaXMgJiYgdGhpcy5fX21ldGFkYXRhKSB8fCBmdW5jdGlvbiAoaywgdikge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xyXG59O1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBhdXJlbGlhX2ZyYW1ld29ya18xID0gcmVxdWlyZShcImF1cmVsaWEtZnJhbWV3b3JrXCIpO1xyXG52YXIgRGVzdGluYXRpb25GaWx0ZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBEZXN0aW5hdGlvbkZpbHRlcigpIHtcclxuICAgICAgICB0aGlzLm1vYmlsZUZpbHRlcnNBcmVFeHBhbmRlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgRGVzdGluYXRpb25GaWx0ZXIucHJvdG90eXBlLnRvZ2dsZU1vYmlsZUZpbHRlcnMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5tb2JpbGVGaWx0ZXJzQXJlRXhwYW5kZWQgPSAhdGhpcy5tb2JpbGVGaWx0ZXJzQXJlRXhwYW5kZWQ7XHJcbiAgICB9O1xyXG4gICAgRGVzdGluYXRpb25GaWx0ZXIucHJvdG90eXBlLmNoYW5nZUZpbHRlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmFwcGx5RmlsdGVyRnVuY3Rpb24oKTtcclxuICAgICAgICB2YXIgY2F0ZWdvcnlGaWx0ZXJzID0gdGhpcy5jYXRlZ29yaWVzLmZpbHRlcihmdW5jdGlvbiAoYykgeyByZXR1cm4gIWMuaXNTZWxlY3RlZDsgfSkubWFwKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LmlkOyB9KTtcclxuICAgICAgICB2YXIgc3R5bGVGaWx0ZXJzID0gdGhpcy5zdHlsZXMuZmlsdGVyKGZ1bmN0aW9uIChkKSB7IHJldHVybiBkLmlzU2VsZWN0ZWQ7IH0pLm1hcChmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5pZDsgfSk7XHJcbiAgICAgICAgaGlzdG9yeS5yZXBsYWNlU3RhdGUoJ3RyYXZlbC9kZXN0aW5hdGlvbnMvJywgJycsIFwiP3Byb3BlcnR5VHlwZXM9XCIgKyBjYXRlZ29yeUZpbHRlcnMuam9pbignJTJDJykgKyBcIiZ0eXBlcz1cIiArIHN0eWxlRmlsdGVycy5qb2luKCclMkMnKSk7XHJcbiAgICB9O1xyXG4gICAgRGVzdGluYXRpb25GaWx0ZXIucHJvdG90eXBlLmNsb3NlTW9iaWxlRmlsdGVycyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLm1vYmlsZUZpbHRlcnNBcmVFeHBhbmRlZCA9IGZhbHNlO1xyXG4gICAgfTtcclxuICAgIF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuYmluZGFibGUsXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEFycmF5KVxyXG4gICAgXSwgRGVzdGluYXRpb25GaWx0ZXIucHJvdG90eXBlLCBcImNhdGVnb3JpZXNcIiwgdm9pZCAwKTtcclxuICAgIF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuYmluZGFibGUsXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEFycmF5KVxyXG4gICAgXSwgRGVzdGluYXRpb25GaWx0ZXIucHJvdG90eXBlLCBcInN0eWxlc1wiLCB2b2lkIDApO1xyXG4gICAgX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5iaW5kYWJsZSxcclxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxyXG4gICAgXSwgRGVzdGluYXRpb25GaWx0ZXIucHJvdG90eXBlLCBcImFwcGx5RmlsdGVyRnVuY3Rpb25cIiwgdm9pZCAwKTtcclxuICAgIERlc3RpbmF0aW9uRmlsdGVyID0gX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5hdXRvaW5qZWN0KClcclxuICAgIF0sIERlc3RpbmF0aW9uRmlsdGVyKTtcclxuICAgIHJldHVybiBEZXN0aW5hdGlvbkZpbHRlcjtcclxufSgpKTtcclxuZXhwb3J0cy5EZXN0aW5hdGlvbkZpbHRlciA9IERlc3RpbmF0aW9uRmlsdGVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///components/destination-application/destination-filter\n')},"components/destination-application/destination-filter.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<div class=\\"destination-filter__mobile-filters\\">\\r\\n\\t\\t<div class=\\"destination-filter\\">\\r\\n\\r\\n\\t\\t\\t<div class=\\"destination-filter__menu\\" click.delegate=\\"toggleMobileFilters()\\">\\r\\n\\t\\t\\t\\tFilters\\r\\n\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t<div show.bind=\\"mobileFiltersAreExpanded\\" class=\\"destination-filter__content\\">\\r\\n\\t\\t\\t\\t<div class=\\"destination-filter__close-btn\\">\\r\\n\\t\\t\\t\\t\\t<span click.delegate=\\"closeMobileFilters()\\" class=\\"destination-filter__close-btn-icon\\"><\/span>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t\\t<div class=\\"destination-filter__container\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\"destination-filter__group\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\"destination-filter__header\\">Accommodation type<\/div>\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\"destination-filter__category-filter destination-filter__category-filter--mobile\\"\\r\\n\\t\\t\\t\\t\\t\\t\\trepeat.for=\\"category of categories\\"\\r\\n\\t\\t\\t\\t\\t\\t\\tshow.bind=\\"category.countOfMatches > 0\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<span>${category.name}&nbsp;(${category.countOfMatches})<\/span>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\"destination-filter__toggle-switch ${category.isSelected? \'destination-filter__toggle-switch--enabled\' :\'\'}\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<label for=\\"toggle-switch-${$index}\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<input id=\\"toggle-switch-${$index}\\"\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\ttype=\\"checkbox\\"\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tchecked.bind=\\"category.isSelected\\"\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tchange.delegate=\\"changeFilter()\\"\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tname=\\"toggle-switch-${$index}\\"\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t/>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\"destination-filter__toggle-circle\\"><\/span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<\/label>\\r\\n\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t\\t\\t<div class=\\"destination-filter__group\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\"destination-filter__header\\">Destination style<\/div>\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\"row\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div repeat.for=\\"style of styles\\" class=\\"destination-filter__filter-holder col-xs-6\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<label>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<input class=\\"destination-filter__category-filter-checkbox\\"\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tchecked.bind=\\"style.isSelected\\"\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tchange.delegate=\\"changeFilter()\\"\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\ttype=\\"checkbox\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<span>${style.name}&nbsp;(${style.countOfMatches})<\/span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<\/label>\\r\\n\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t\\t\\t<div class=\\"destination-filter__apply-filters\\" click.delegate=\\"closeMobileFilters(event)\\">\\r\\n\\t\\t\\t\\t\\t\\t<a href=\\"javascript:void(0)\\" class=\\"ds-btn-primary page-header-register\\">Apply<\/a>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t<\/div>\\r\\n\\t<\/div>\\r\\n\\r\\n\\t<div class=\\"destination-filter__desktop-filters\\">\\r\\n\\t\\t<filter-dropdown class=\\"destination-filter\\">\\r\\n\\t\\t\\t<div slot=\\"button\\">\\r\\n\\t\\t\\t\\tAccommodation Type\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<div slot=\\"content\\">\\r\\n\\t\\t\\t\\t<div class=\\"destination-filter__category-filter\\" repeat.for=\\"category of categories\\" show.bind=\\"category.countOfMatches > 0\\">\\r\\n\\t\\t\\t\\t<span>${category.name}&nbsp;(${category.countOfMatches})<\/span>\\r\\n\\t\\t\\t\\t<div class=\\"destination-filter__toggle-switch ${category.isSelected? \'destination-filter__toggle-switch--enabled\' :\'\'}\\">\\r\\n\\t\\t\\t\\t\\t<label for=\\"toggle-switch-${$index}\\">\\r\\n\\t\\t\\t\\t\\t\\t<input id=\\"toggle-switch-${$index}\\"\\r\\n\\t\\t\\t\\t\\t\\t\\ttype=\\"checkbox\\"\\r\\n\\t\\t\\t\\t\\t\\t\\tchecked.bind=\\"category.isSelected\\"\\r\\n\\t\\t\\t\\t\\t\\t\\tchange.delegate=\\"changeFilter()\\"\\r\\n\\t\\t\\t\\t\\t\\t\\tname=\\"toggle-switch-${$index}\\"\\r\\n\\t\\t\\t\\t\\t\\t/>\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\"destination-filter__toggle-circle\\"><\/span>\\r\\n\\t\\t\\t\\t\\t<\/label>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t<\/filter-dropdown>\\r\\n\\r\\n\\t\\t<filter-dropdown class=\\"destination-filter\\">\\r\\n\\t\\t\\t<div slot=\\"button\\">\\r\\n\\t\\t\\t\\tDestination Style\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<div slot=\\"content\\">\\r\\n\\t\\t\\t\\t<div repeat.for=\\"style of styles\\" class=\\"destination-filter__filter-item\\">\\r\\n\\t\\t\\t\\t\\t<label>\\r\\n\\t\\t\\t\\t\\t\\t<input class=\\"destination-filter__category-filter-checkbox\\"\\r\\n\\t\\t\\t\\t\\t\\t\\tchecked.bind=\\"style.isSelected\\"\\r\\n\\t\\t\\t\\t\\t\\t\\tchange.delegate=\\"changeFilter()\\"\\r\\n\\t\\t\\t\\t\\t\\t\\ttype=\\"checkbox\\"\\r\\n\\t\\t\\t\\t\\t\\t/>\\r\\n\\t\\t\\t\\t\\t\\t<span>${style.name}&nbsp;(${style.countOfMatches})<\/span>\\r\\n\\t\\t\\t\\t\\t\\t<\/span>\\r\\n\\t\\t\\t\\t\\t<\/label>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t<\/filter-dropdown>\\r\\n\\t<\/div>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9kZXN0aW5hdGlvbi1hcHBsaWNhdGlvbi9kZXN0aW5hdGlvbi1maWx0ZXIuaHRtbD9lMmU5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDQ5QkFBNDlCLGNBQWMsTUFBTSxHQUFHLHdCQUF3QiwyRUFBMkUsc0VBQXNFLG9EQUFvRCxPQUFPLHFEQUFxRCxPQUFPLGdOQUFnTixPQUFPLDB3QkFBMHdCLFdBQVcsTUFBTSxHQUFHLHFCQUFxQixteEJBQW14QixjQUFjLE1BQU0sR0FBRyx3QkFBd0IscUVBQXFFLHNFQUFzRSw4Q0FBOEMsT0FBTywrQ0FBK0MsT0FBTyx3TEFBd0wsT0FBTyx1dEJBQXV0QixXQUFXLE1BQU0sR0FBRyxxQkFBcUIiLCJmaWxlIjoiY29tcG9uZW50cy9kZXN0aW5hdGlvbi1hcHBsaWNhdGlvbi9kZXN0aW5hdGlvbi1maWx0ZXIuaHRtbC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gXCI8dGVtcGxhdGU+XFxyXFxuXFx0PGRpdiBjbGFzcz1cXFwiZGVzdGluYXRpb24tZmlsdGVyX19tb2JpbGUtZmlsdGVyc1xcXCI+XFxyXFxuXFx0XFx0PGRpdiBjbGFzcz1cXFwiZGVzdGluYXRpb24tZmlsdGVyXFxcIj5cXHJcXG5cXHJcXG5cXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJkZXN0aW5hdGlvbi1maWx0ZXJfX21lbnVcXFwiIGNsaWNrLmRlbGVnYXRlPVxcXCJ0b2dnbGVNb2JpbGVGaWx0ZXJzKClcXFwiPlxcclxcblxcdFxcdFxcdFxcdEZpbHRlcnNcXHJcXG5cXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHJcXG5cXHRcXHRcXHQ8ZGl2IHNob3cuYmluZD1cXFwibW9iaWxlRmlsdGVyc0FyZUV4cGFuZGVkXFxcIiBjbGFzcz1cXFwiZGVzdGluYXRpb24tZmlsdGVyX19jb250ZW50XFxcIj5cXHJcXG5cXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJkZXN0aW5hdGlvbi1maWx0ZXJfX2Nsb3NlLWJ0blxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PHNwYW4gY2xpY2suZGVsZWdhdGU9XFxcImNsb3NlTW9iaWxlRmlsdGVycygpXFxcIiBjbGFzcz1cXFwiZGVzdGluYXRpb24tZmlsdGVyX19jbG9zZS1idG4taWNvblxcXCI+PC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcclxcblxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImRlc3RpbmF0aW9uLWZpbHRlcl9fY29udGFpbmVyXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJkZXN0aW5hdGlvbi1maWx0ZXJfX2dyb3VwXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJkZXN0aW5hdGlvbi1maWx0ZXJfX2hlYWRlclxcXCI+QWNjb21tb2RhdGlvbiB0eXBlPC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiZGVzdGluYXRpb24tZmlsdGVyX19jYXRlZ29yeS1maWx0ZXIgZGVzdGluYXRpb24tZmlsdGVyX19jYXRlZ29yeS1maWx0ZXItLW1vYmlsZVxcXCJcXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRyZXBlYXQuZm9yPVxcXCJjYXRlZ29yeSBvZiBjYXRlZ29yaWVzXFxcIlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdHNob3cuYmluZD1cXFwiY2F0ZWdvcnkuY291bnRPZk1hdGNoZXMgPiAwXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHQ8c3Bhbj4ke2NhdGVnb3J5Lm5hbWV9Jm5ic3A7KCR7Y2F0ZWdvcnkuY291bnRPZk1hdGNoZXN9KTwvc3Bhbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJkZXN0aW5hdGlvbi1maWx0ZXJfX3RvZ2dsZS1zd2l0Y2ggJHtjYXRlZ29yeS5pc1NlbGVjdGVkPyAnZGVzdGluYXRpb24tZmlsdGVyX190b2dnbGUtc3dpdGNoLS1lbmFibGVkJyA6Jyd9XFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8bGFiZWwgZm9yPVxcXCJ0b2dnbGUtc3dpdGNoLSR7JGluZGV4fVxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PGlucHV0IGlkPVxcXCJ0b2dnbGUtc3dpdGNoLSR7JGluZGV4fVxcXCJcXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHR0eXBlPVxcXCJjaGVja2JveFxcXCJcXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRjaGVja2VkLmJpbmQ9XFxcImNhdGVnb3J5LmlzU2VsZWN0ZWRcXFwiXFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0Y2hhbmdlLmRlbGVnYXRlPVxcXCJjaGFuZ2VGaWx0ZXIoKVxcXCJcXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRuYW1lPVxcXCJ0b2dnbGUtc3dpdGNoLSR7JGluZGV4fVxcXCJcXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQvPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDxzcGFuIGNsYXNzPVxcXCJkZXN0aW5hdGlvbi1maWx0ZXJfX3RvZ2dsZS1jaXJjbGVcXFwiPjwvc3Bhbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2xhYmVsPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcclxcblxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImRlc3RpbmF0aW9uLWZpbHRlcl9fZ3JvdXBcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImRlc3RpbmF0aW9uLWZpbHRlcl9faGVhZGVyXFxcIj5EZXN0aW5hdGlvbiBzdHlsZTwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0PGRpdiByZXBlYXQuZm9yPVxcXCJzdHlsZSBvZiBzdHlsZXNcXFwiIGNsYXNzPVxcXCJkZXN0aW5hdGlvbi1maWx0ZXJfX2ZpbHRlci1ob2xkZXIgY29sLXhzLTZcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDxsYWJlbD5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8aW5wdXQgY2xhc3M9XFxcImRlc3RpbmF0aW9uLWZpbHRlcl9fY2F0ZWdvcnktZmlsdGVyLWNoZWNrYm94XFxcIlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGNoZWNrZWQuYmluZD1cXFwic3R5bGUuaXNTZWxlY3RlZFxcXCJcXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRjaGFuZ2UuZGVsZWdhdGU9XFxcImNoYW5nZUZpbHRlcigpXFxcIlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHR5cGU9XFxcImNoZWNrYm94XFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8c3Bhbj4ke3N0eWxlLm5hbWV9Jm5ic3A7KCR7c3R5bGUuY291bnRPZk1hdGNoZXN9KTwvc3Bhbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2xhYmVsPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcclxcblxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImRlc3RpbmF0aW9uLWZpbHRlcl9fYXBwbHktZmlsdGVyc1xcXCIgY2xpY2suZGVsZWdhdGU9XFxcImNsb3NlTW9iaWxlRmlsdGVycyhldmVudClcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxhIGhyZWY9XFxcImphdmFzY3JpcHQ6dm9pZCgwKVxcXCIgY2xhc3M9XFxcImRzLWJ0bi1wcmltYXJ5IHBhZ2UtaGVhZGVyLXJlZ2lzdGVyXFxcIj5BcHBseTwvYT5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHJcXG5cXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHQ8L2Rpdj5cXHJcXG5cXHQ8L2Rpdj5cXHJcXG5cXHJcXG5cXHQ8ZGl2IGNsYXNzPVxcXCJkZXN0aW5hdGlvbi1maWx0ZXJfX2Rlc2t0b3AtZmlsdGVyc1xcXCI+XFxyXFxuXFx0XFx0PGZpbHRlci1kcm9wZG93biBjbGFzcz1cXFwiZGVzdGluYXRpb24tZmlsdGVyXFxcIj5cXHJcXG5cXHRcXHRcXHQ8ZGl2IHNsb3Q9XFxcImJ1dHRvblxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0QWNjb21tb2RhdGlvbiBUeXBlXFxyXFxuXFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0PGRpdiBzbG90PVxcXCJjb250ZW50XFxcIj5cXHJcXG5cXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJkZXN0aW5hdGlvbi1maWx0ZXJfX2NhdGVnb3J5LWZpbHRlclxcXCIgcmVwZWF0LmZvcj1cXFwiY2F0ZWdvcnkgb2YgY2F0ZWdvcmllc1xcXCIgc2hvdy5iaW5kPVxcXCJjYXRlZ29yeS5jb3VudE9mTWF0Y2hlcyA+IDBcXFwiPlxcclxcblxcdFxcdFxcdFxcdDxzcGFuPiR7Y2F0ZWdvcnkubmFtZX0mbmJzcDsoJHtjYXRlZ29yeS5jb3VudE9mTWF0Y2hlc30pPC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImRlc3RpbmF0aW9uLWZpbHRlcl9fdG9nZ2xlLXN3aXRjaCAke2NhdGVnb3J5LmlzU2VsZWN0ZWQ/ICdkZXN0aW5hdGlvbi1maWx0ZXJfX3RvZ2dsZS1zd2l0Y2gtLWVuYWJsZWQnIDonJ31cXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdDxsYWJlbCBmb3I9XFxcInRvZ2dsZS1zd2l0Y2gtJHskaW5kZXh9XFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8aW5wdXQgaWQ9XFxcInRvZ2dsZS1zd2l0Y2gtJHskaW5kZXh9XFxcIlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdHR5cGU9XFxcImNoZWNrYm94XFxcIlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdGNoZWNrZWQuYmluZD1cXFwiY2F0ZWdvcnkuaXNTZWxlY3RlZFxcXCJcXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRjaGFuZ2UuZGVsZWdhdGU9XFxcImNoYW5nZUZpbHRlcigpXFxcIlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdG5hbWU9XFxcInRvZ2dsZS1zd2l0Y2gtJHskaW5kZXh9XFxcIlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdC8+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PHNwYW4gY2xhc3M9XFxcImRlc3RpbmF0aW9uLWZpbHRlcl9fdG9nZ2xlLWNpcmNsZVxcXCI+PC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdFxcdDwvbGFiZWw+XFxyXFxuXFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0PC9maWx0ZXItZHJvcGRvd24+XFxyXFxuXFxyXFxuXFx0XFx0PGZpbHRlci1kcm9wZG93biBjbGFzcz1cXFwiZGVzdGluYXRpb24tZmlsdGVyXFxcIj5cXHJcXG5cXHRcXHRcXHQ8ZGl2IHNsb3Q9XFxcImJ1dHRvblxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0RGVzdGluYXRpb24gU3R5bGVcXHJcXG5cXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHQ8ZGl2IHNsb3Q9XFxcImNvbnRlbnRcXFwiPlxcclxcblxcdFxcdFxcdFxcdDxkaXYgcmVwZWF0LmZvcj1cXFwic3R5bGUgb2Ygc3R5bGVzXFxcIiBjbGFzcz1cXFwiZGVzdGluYXRpb24tZmlsdGVyX19maWx0ZXItaXRlbVxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGxhYmVsPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxpbnB1dCBjbGFzcz1cXFwiZGVzdGluYXRpb24tZmlsdGVyX19jYXRlZ29yeS1maWx0ZXItY2hlY2tib3hcXFwiXFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0Y2hlY2tlZC5iaW5kPVxcXCJzdHlsZS5pc1NlbGVjdGVkXFxcIlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdGNoYW5nZS5kZWxlZ2F0ZT1cXFwiY2hhbmdlRmlsdGVyKClcXFwiXFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0dHlwZT1cXFwiY2hlY2tib3hcXFwiXFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0Lz5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8c3Bhbj4ke3N0eWxlLm5hbWV9Jm5ic3A7KCR7c3R5bGUuY291bnRPZk1hdGNoZXN9KTwvc3Bhbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8L3NwYW4+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PC9sYWJlbD5cXHJcXG5cXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHQ8L2ZpbHRlci1kcm9wZG93bj5cXHJcXG5cXHQ8L2Rpdj5cXHJcXG48L3RlbXBsYXRlPlxcclxcblwiOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///components/destination-application/destination-filter.html\n')},"components/destination-application/destination-list":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar groupBy_1 = __webpack_require__(167);\r\nvar Region_1 = __webpack_require__(165);\r\nvar DestinationList = /** @class */ (function () {\r\n    function DestinationList() {\r\n        this.destinations = [];\r\n        this.regions = [];\r\n        this.showNavigation = true;\r\n    }\r\n    DestinationList.prototype.destinationsChanged = function (newVal, oldVal) {\r\n        var _this = this;\r\n        this.regions =\r\n            groupBy_1.groupBy(this.destinations, function (destination) { return destination.classification.regions[0]; })\r\n                .map(function (group) { return _this.createRegion(group); })\r\n                .sort(function (regionA, regionB) { return regionB.countOfAccommodations - regionA.countOfAccommodations; });\r\n        if (this.regions.length) {\r\n            this.regions[0].selected = true;\r\n        }\r\n    };\r\n    DestinationList.prototype.createRegion = function (group) {\r\n        var _this = this;\r\n        var region = new Region_1.Region(group.key, this.model.regions[group.key]);\r\n        // Arbitrarily grouping by the first state or country, don\'t have a better rule for handling multiple states/countries\r\n        region.groupedDestinations = groupBy_1.groupBy(group.members, function (destination) {\r\n            var hasState = _this.model.destinationStates[destination.id].length > 0\r\n                && _this.model.destinationStates[destination.id][0];\r\n            if (hasState) {\r\n                return _this.model.destinationStates[destination.id][0];\r\n            }\r\n            return _this.model.destinationCountries[destination.id][0];\r\n        })\r\n            .sort(function (groupA, groupB) {\r\n            return groupA.key > groupB.key ? 1 : -1;\r\n        });\r\n        region.countOfAccommodations = this.calculateCountOfAccommodations(region);\r\n        return region;\r\n    };\r\n    DestinationList.prototype.selectRegion = function (region) {\r\n        this.regions.forEach(function (x) { return x.selected = false; });\r\n        region.selected = true;\r\n        this.showNavigation = false;\r\n        this.scrollToFirstElement();\r\n    };\r\n    DestinationList.prototype.showFilters = function () {\r\n        this.showNavigation = true;\r\n    };\r\n    DestinationList.prototype.calculateCountOfAccommodations = function (region) {\r\n        return region.groupedDestinations\r\n            .reduce(function (allDestinations, group) { return allDestinations.concat(group.members); }, new Array())\r\n            .reduce(function (accumulatedNumberOfAccommodations, destination) { return destination.numberOfUnits + accumulatedNumberOfAccommodations; }, 0);\r\n    };\r\n    DestinationList.prototype.scrollToFirstElement = function () {\r\n        var _this = this;\r\n        this.destinationListElement.scrollIntoView();\r\n        // 100 ms needs to wait while aurelia finishes dynamic DOM updating\r\n        setTimeout(function () { return _this.updateRegionNavPanelPosition(); }, 100);\r\n    };\r\n    DestinationList.prototype.updateRegionNavPanelPosition = function () {\r\n        var isSmallerThanDestinationList = this.navigationContainer.clientHeight < this.contentContainer.clientHeight;\r\n        if (isSmallerThanDestinationList) {\r\n            var hasScrolledToDestinationList = this.contentContainer.getBoundingClientRect().top < 0;\r\n            var enoughSpaceToShowRegionNavPanel = this.contentContainer.getBoundingClientRect().bottom >= this.navigationContainer.clientHeight;\r\n            if (hasScrolledToDestinationList && enoughSpaceToShowRegionNavPanel) {\r\n                this.navigationContainer.classList.add(\'destination-list__nav--fixed\');\r\n                this.tempNavigationContainer.classList.add(\'destination-list__nav--fixed\');\r\n                return;\r\n            }\r\n            else {\r\n                this.navigationContainer.classList.remove(\'destination-list__nav--fixed\');\r\n                this.tempNavigationContainer.classList.remove(\'destination-list__nav--fixed\');\r\n            }\r\n            if (hasScrolledToDestinationList) {\r\n                this.navigationContainer.classList.add(\'destination-list__nav--to-bottom\');\r\n            }\r\n            else {\r\n                this.navigationContainer.classList.remove(\'destination-list__nav--to-bottom\');\r\n            }\r\n        }\r\n        else {\r\n            this.navigationContainer.classList.remove(\'destination-list__nav--fixed\');\r\n            this.tempNavigationContainer.classList.remove(\'destination-list__nav--fixed\');\r\n        }\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Object)\r\n    ], DestinationList.prototype, "model", void 0);\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Array)\r\n    ], DestinationList.prototype, "destinations", void 0);\r\n    DestinationList = __decorate([\r\n        aurelia_framework_1.autoinject()\r\n    ], DestinationList);\r\n    return DestinationList;\r\n}());\r\nexports.DestinationList = DestinationList;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9kZXN0aW5hdGlvbi1hcHBsaWNhdGlvbi9kZXN0aW5hdGlvbi1saXN0LnRzPzNiYzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsUUFBUTtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLGNBQWM7QUFDNUQsMEJBQTBCLG1CQUFPLENBQUMsbUJBQW1CO0FBQ3JELGdCQUFnQixtQkFBTyxDQUFDLEdBQVc7QUFDbkMsZUFBZSxtQkFBTyxDQUFDLEdBQVU7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUVBQXlFLDhDQUE4QyxFQUFFO0FBQ3pILHVDQUF1QyxrQ0FBa0MsRUFBRTtBQUMzRSxtREFBbUQsc0VBQXNFLEVBQUU7QUFDM0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkMsMkJBQTJCLEVBQUU7QUFDeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXVELDhDQUE4QyxFQUFFO0FBQ3ZHLCtFQUErRSxzRUFBc0UsRUFBRTtBQUN2SjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLDZDQUE2QyxFQUFFO0FBQy9FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCIsImZpbGUiOiJjb21wb25lbnRzL2Rlc3RpbmF0aW9uLWFwcGxpY2F0aW9uL2Rlc3RpbmF0aW9uLWxpc3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxudmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufTtcclxudmFyIF9fbWV0YWRhdGEgPSAodGhpcyAmJiB0aGlzLl9fbWV0YWRhdGEpIHx8IGZ1bmN0aW9uIChrLCB2KSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEoaywgdik7XHJcbn07XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIGF1cmVsaWFfZnJhbWV3b3JrXzEgPSByZXF1aXJlKFwiYXVyZWxpYS1mcmFtZXdvcmtcIik7XHJcbnZhciBncm91cEJ5XzEgPSByZXF1aXJlKFwiLi9ncm91cEJ5XCIpO1xyXG52YXIgUmVnaW9uXzEgPSByZXF1aXJlKFwiLi9SZWdpb25cIik7XHJcbnZhciBEZXN0aW5hdGlvbkxpc3QgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBEZXN0aW5hdGlvbkxpc3QoKSB7XHJcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbnMgPSBbXTtcclxuICAgICAgICB0aGlzLnJlZ2lvbnMgPSBbXTtcclxuICAgICAgICB0aGlzLnNob3dOYXZpZ2F0aW9uID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIERlc3RpbmF0aW9uTGlzdC5wcm90b3R5cGUuZGVzdGluYXRpb25zQ2hhbmdlZCA9IGZ1bmN0aW9uIChuZXdWYWwsIG9sZFZhbCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5yZWdpb25zID1cclxuICAgICAgICAgICAgZ3JvdXBCeV8xLmdyb3VwQnkodGhpcy5kZXN0aW5hdGlvbnMsIGZ1bmN0aW9uIChkZXN0aW5hdGlvbikgeyByZXR1cm4gZGVzdGluYXRpb24uY2xhc3NpZmljYXRpb24ucmVnaW9uc1swXTsgfSlcclxuICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKGdyb3VwKSB7IHJldHVybiBfdGhpcy5jcmVhdGVSZWdpb24oZ3JvdXApOyB9KVxyXG4gICAgICAgICAgICAgICAgLnNvcnQoZnVuY3Rpb24gKHJlZ2lvbkEsIHJlZ2lvbkIpIHsgcmV0dXJuIHJlZ2lvbkIuY291bnRPZkFjY29tbW9kYXRpb25zIC0gcmVnaW9uQS5jb3VudE9mQWNjb21tb2RhdGlvbnM7IH0pO1xyXG4gICAgICAgIGlmICh0aGlzLnJlZ2lvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVnaW9uc1swXS5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIERlc3RpbmF0aW9uTGlzdC5wcm90b3R5cGUuY3JlYXRlUmVnaW9uID0gZnVuY3Rpb24gKGdyb3VwKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB2YXIgcmVnaW9uID0gbmV3IFJlZ2lvbl8xLlJlZ2lvbihncm91cC5rZXksIHRoaXMubW9kZWwucmVnaW9uc1tncm91cC5rZXldKTtcclxuICAgICAgICAvLyBBcmJpdHJhcmlseSBncm91cGluZyBieSB0aGUgZmlyc3Qgc3RhdGUgb3IgY291bnRyeSwgZG9uJ3QgaGF2ZSBhIGJldHRlciBydWxlIGZvciBoYW5kbGluZyBtdWx0aXBsZSBzdGF0ZXMvY291bnRyaWVzXHJcbiAgICAgICAgcmVnaW9uLmdyb3VwZWREZXN0aW5hdGlvbnMgPSBncm91cEJ5XzEuZ3JvdXBCeShncm91cC5tZW1iZXJzLCBmdW5jdGlvbiAoZGVzdGluYXRpb24pIHtcclxuICAgICAgICAgICAgdmFyIGhhc1N0YXRlID0gX3RoaXMubW9kZWwuZGVzdGluYXRpb25TdGF0ZXNbZGVzdGluYXRpb24uaWRdLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgICYmIF90aGlzLm1vZGVsLmRlc3RpbmF0aW9uU3RhdGVzW2Rlc3RpbmF0aW9uLmlkXVswXTtcclxuICAgICAgICAgICAgaWYgKGhhc1N0YXRlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMubW9kZWwuZGVzdGluYXRpb25TdGF0ZXNbZGVzdGluYXRpb24uaWRdWzBdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBfdGhpcy5tb2RlbC5kZXN0aW5hdGlvbkNvdW50cmllc1tkZXN0aW5hdGlvbi5pZF1bMF07XHJcbiAgICAgICAgfSlcclxuICAgICAgICAgICAgLnNvcnQoZnVuY3Rpb24gKGdyb3VwQSwgZ3JvdXBCKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBncm91cEEua2V5ID4gZ3JvdXBCLmtleSA/IDEgOiAtMTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZWdpb24uY291bnRPZkFjY29tbW9kYXRpb25zID0gdGhpcy5jYWxjdWxhdGVDb3VudE9mQWNjb21tb2RhdGlvbnMocmVnaW9uKTtcclxuICAgICAgICByZXR1cm4gcmVnaW9uO1xyXG4gICAgfTtcclxuICAgIERlc3RpbmF0aW9uTGlzdC5wcm90b3R5cGUuc2VsZWN0UmVnaW9uID0gZnVuY3Rpb24gKHJlZ2lvbikge1xyXG4gICAgICAgIHRoaXMucmVnaW9ucy5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LnNlbGVjdGVkID0gZmFsc2U7IH0pO1xyXG4gICAgICAgIHJlZ2lvbi5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zaG93TmF2aWdhdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsVG9GaXJzdEVsZW1lbnQoKTtcclxuICAgIH07XHJcbiAgICBEZXN0aW5hdGlvbkxpc3QucHJvdG90eXBlLnNob3dGaWx0ZXJzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuc2hvd05hdmlnYXRpb24gPSB0cnVlO1xyXG4gICAgfTtcclxuICAgIERlc3RpbmF0aW9uTGlzdC5wcm90b3R5cGUuY2FsY3VsYXRlQ291bnRPZkFjY29tbW9kYXRpb25zID0gZnVuY3Rpb24gKHJlZ2lvbikge1xyXG4gICAgICAgIHJldHVybiByZWdpb24uZ3JvdXBlZERlc3RpbmF0aW9uc1xyXG4gICAgICAgICAgICAucmVkdWNlKGZ1bmN0aW9uIChhbGxEZXN0aW5hdGlvbnMsIGdyb3VwKSB7IHJldHVybiBhbGxEZXN0aW5hdGlvbnMuY29uY2F0KGdyb3VwLm1lbWJlcnMpOyB9LCBuZXcgQXJyYXkoKSlcclxuICAgICAgICAgICAgLnJlZHVjZShmdW5jdGlvbiAoYWNjdW11bGF0ZWROdW1iZXJPZkFjY29tbW9kYXRpb25zLCBkZXN0aW5hdGlvbikgeyByZXR1cm4gZGVzdGluYXRpb24ubnVtYmVyT2ZVbml0cyArIGFjY3VtdWxhdGVkTnVtYmVyT2ZBY2NvbW1vZGF0aW9uczsgfSwgMCk7XHJcbiAgICB9O1xyXG4gICAgRGVzdGluYXRpb25MaXN0LnByb3RvdHlwZS5zY3JvbGxUb0ZpcnN0RWxlbWVudCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuZGVzdGluYXRpb25MaXN0RWxlbWVudC5zY3JvbGxJbnRvVmlldygpO1xyXG4gICAgICAgIC8vIDEwMCBtcyBuZWVkcyB0byB3YWl0IHdoaWxlIGF1cmVsaWEgZmluaXNoZXMgZHluYW1pYyBET00gdXBkYXRpbmdcclxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLnVwZGF0ZVJlZ2lvbk5hdlBhbmVsUG9zaXRpb24oKTsgfSwgMTAwKTtcclxuICAgIH07XHJcbiAgICBEZXN0aW5hdGlvbkxpc3QucHJvdG90eXBlLnVwZGF0ZVJlZ2lvbk5hdlBhbmVsUG9zaXRpb24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGlzU21hbGxlclRoYW5EZXN0aW5hdGlvbkxpc3QgPSB0aGlzLm5hdmlnYXRpb25Db250YWluZXIuY2xpZW50SGVpZ2h0IDwgdGhpcy5jb250ZW50Q29udGFpbmVyLmNsaWVudEhlaWdodDtcclxuICAgICAgICBpZiAoaXNTbWFsbGVyVGhhbkRlc3RpbmF0aW9uTGlzdCkge1xyXG4gICAgICAgICAgICB2YXIgaGFzU2Nyb2xsZWRUb0Rlc3RpbmF0aW9uTGlzdCA9IHRoaXMuY29udGVudENvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgPCAwO1xyXG4gICAgICAgICAgICB2YXIgZW5vdWdoU3BhY2VUb1Nob3dSZWdpb25OYXZQYW5lbCA9IHRoaXMuY29udGVudENvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b20gPj0gdGhpcy5uYXZpZ2F0aW9uQ29udGFpbmVyLmNsaWVudEhlaWdodDtcclxuICAgICAgICAgICAgaWYgKGhhc1Njcm9sbGVkVG9EZXN0aW5hdGlvbkxpc3QgJiYgZW5vdWdoU3BhY2VUb1Nob3dSZWdpb25OYXZQYW5lbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ2Rlc3RpbmF0aW9uLWxpc3RfX25hdi0tZml4ZWQnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcE5hdmlnYXRpb25Db250YWluZXIuY2xhc3NMaXN0LmFkZCgnZGVzdGluYXRpb24tbGlzdF9fbmF2LS1maXhlZCcpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uQ29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ2Rlc3RpbmF0aW9uLWxpc3RfX25hdi0tZml4ZWQnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcE5hdmlnYXRpb25Db250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgnZGVzdGluYXRpb24tbGlzdF9fbmF2LS1maXhlZCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChoYXNTY3JvbGxlZFRvRGVzdGluYXRpb25MaXN0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25Db250YWluZXIuY2xhc3NMaXN0LmFkZCgnZGVzdGluYXRpb24tbGlzdF9fbmF2LS10by1ib3R0b20nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvbkNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCdkZXN0aW5hdGlvbi1saXN0X19uYXYtLXRvLWJvdHRvbScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25Db250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgnZGVzdGluYXRpb24tbGlzdF9fbmF2LS1maXhlZCcpO1xyXG4gICAgICAgICAgICB0aGlzLnRlbXBOYXZpZ2F0aW9uQ29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ2Rlc3RpbmF0aW9uLWxpc3RfX25hdi0tZml4ZWQnKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5iaW5kYWJsZSxcclxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxyXG4gICAgXSwgRGVzdGluYXRpb25MaXN0LnByb3RvdHlwZSwgXCJtb2RlbFwiLCB2b2lkIDApO1xyXG4gICAgX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5iaW5kYWJsZSxcclxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgQXJyYXkpXHJcbiAgICBdLCBEZXN0aW5hdGlvbkxpc3QucHJvdG90eXBlLCBcImRlc3RpbmF0aW9uc1wiLCB2b2lkIDApO1xyXG4gICAgRGVzdGluYXRpb25MaXN0ID0gX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5hdXRvaW5qZWN0KClcclxuICAgIF0sIERlc3RpbmF0aW9uTGlzdCk7XHJcbiAgICByZXR1cm4gRGVzdGluYXRpb25MaXN0O1xyXG59KCkpO1xyXG5leHBvcnRzLkRlc3RpbmF0aW9uTGlzdCA9IERlc3RpbmF0aW9uTGlzdDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/destination-application/destination-list\n')},"components/destination-application/destination-list.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<div class=\\"destination-list row\\" ref=\\"destinationListElement\\" class.bind=\\"showNavigation ? \'destination-list--show-nav-only\' : \'destination-list--show-content-only\'\\">\\r\\n\\t\\t<div ref=\\"tempNavigationContainer\\" class=\\"destination-list__nav-temp col-xs-12 col-sm-4 col-md-3\\"><\/div>\\r\\n\\t\\t<nav class=\\"destination-list__nav col-xs-12 col-sm-4 col-md-3\\" ref=\\"navigationContainer\\">\\r\\n\\t\\t\\t<header class=\\"destination-list__nav-header ds-label-large show-xs-only\\">Choose a Region<\/header>\\r\\n\\t\\t\\t<ul class=\\"destination-list__nav-list\\">\\r\\n\\t\\t\\t\\t<li class=\\"destination-list__nav-item\\" repeat.for=\\"region of regions\\" click.delegate=\\"selectRegion(region)\\" class.bind=\\"region.selected ? \'destination-list__nav-item--is-selected\' : \'\'\\"\\r\\n\\t\\t\\t\\t show.bind=\\"region.countOfAccommodations > 0\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\"destination-list__nav-item-name\\">${region.name}&nbsp;(${region.countOfAccommodations})<\/div>\\r\\n\\t\\t\\t\\t\\t<span class=\\"destination-list__nav-arrow\\"><\/span>\\r\\n\\t\\t\\t\\t<\/li>\\r\\n\\t\\t\\t<\/ul>\\r\\n\\t\\t<\/nav>\\r\\n\\r\\n\\t\\t<div class=\\"destination-list__content col-xs-12 col-sm-8 col-md-9\\" ref=\\"contentContainer\\">\\r\\n\\t\\t\\t<div class=\\"destination-list__content-region\\" repeat.for=\\"region of regions\\" show.bind=\\"region.selected\\">\\r\\n\\t\\t\\t\\t<div class=\\"destination-list__content-header ds-label-large start-xs between-sm bottom-xs\\" click.delegate=\\"showFilters()\\">\\r\\n\\t\\t\\t\\t\\t<span class=\\"destination-list__content-back\\">❮<\/span>${region.name}\\r\\n\\t\\t\\t\\t\\t<div class=\\"destination-list__content-item-subtitle\\">\\r\\n\\t\\t\\t\\t\\t\\t${region.countOfAccommodations} ${region.countOfAccommodations === 1 ? \'accommodation\' : \'accommodations\'}\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t\\t<div class=\\"destination-list__group\\" repeat.for=\\"group of region.groupedDestinations\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\"destination-list__content-label ds-label-medium\\">${group.key}<\/div>\\r\\n\\t\\t\\t\\t\\t<div class=\\"row\\">\\r\\n\\t\\t\\t\\t\\t\\t<div repeat.for=\\"item of group.members\\" class=\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<a class=\\"destination-list__group-item\\" href=\\"${item.url}accommodations/\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\"destination-list__image-holder\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<img src=\\"${model.imageGenPath + item.heroImage}&width=530&height=300&crop=resize&align=center\\" class=\\"destination-list__image\\"\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t alt=\\"${item.name}\\" />\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\"destination-list__item-info\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\"destination-list__item-name-holder\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\"destination-list__item-name ds-title-small truncate-text\\">${item.name}<\/span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span if.bind=\\"item.attributes.isNew\\" class=\\"destination-application__new-icon\\"><\/span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\"destination-list__item-title truncate-text\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t${item.numberOfUnits} ${item.numberOfUnits === 1 ? \'Accommodation\' : \'Accommodations\'}\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<\/a>\\r\\n\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t<\/div>\\r\\n\\t<\/div>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9kZXN0aW5hdGlvbi1hcHBsaWNhdGlvbi9kZXN0aW5hdGlvbi1saXN0Lmh0bWw/NDAwNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnNUJBQWc1QixZQUFZLE1BQU0sR0FBRyw2QkFBNkIsMGlCQUEwaUIsWUFBWSx1RkFBdUYsNkJBQTZCLEdBQUcsd0VBQXdFLCtOQUErTixVQUFVLHFOQUFxTixTQUFTLHVIQUF1SCxvQ0FBb0MsaUhBQWlILFVBQVUsNlFBQTZRLFVBQVUsb1FBQW9RLG1CQUFtQixHQUFHLDhEQUE4RCIsImZpbGUiOiJjb21wb25lbnRzL2Rlc3RpbmF0aW9uLWFwcGxpY2F0aW9uL2Rlc3RpbmF0aW9uLWxpc3QuaHRtbC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gXCI8dGVtcGxhdGU+XFxyXFxuXFx0PGRpdiBjbGFzcz1cXFwiZGVzdGluYXRpb24tbGlzdCByb3dcXFwiIHJlZj1cXFwiZGVzdGluYXRpb25MaXN0RWxlbWVudFxcXCIgY2xhc3MuYmluZD1cXFwic2hvd05hdmlnYXRpb24gPyAnZGVzdGluYXRpb24tbGlzdC0tc2hvdy1uYXYtb25seScgOiAnZGVzdGluYXRpb24tbGlzdC0tc2hvdy1jb250ZW50LW9ubHknXFxcIj5cXHJcXG5cXHRcXHQ8ZGl2IHJlZj1cXFwidGVtcE5hdmlnYXRpb25Db250YWluZXJcXFwiIGNsYXNzPVxcXCJkZXN0aW5hdGlvbi1saXN0X19uYXYtdGVtcCBjb2wteHMtMTIgY29sLXNtLTQgY29sLW1kLTNcXFwiPjwvZGl2PlxcclxcblxcdFxcdDxuYXYgY2xhc3M9XFxcImRlc3RpbmF0aW9uLWxpc3RfX25hdiBjb2wteHMtMTIgY29sLXNtLTQgY29sLW1kLTNcXFwiIHJlZj1cXFwibmF2aWdhdGlvbkNvbnRhaW5lclxcXCI+XFxyXFxuXFx0XFx0XFx0PGhlYWRlciBjbGFzcz1cXFwiZGVzdGluYXRpb24tbGlzdF9fbmF2LWhlYWRlciBkcy1sYWJlbC1sYXJnZSBzaG93LXhzLW9ubHlcXFwiPkNob29zZSBhIFJlZ2lvbjwvaGVhZGVyPlxcclxcblxcdFxcdFxcdDx1bCBjbGFzcz1cXFwiZGVzdGluYXRpb24tbGlzdF9fbmF2LWxpc3RcXFwiPlxcclxcblxcdFxcdFxcdFxcdDxsaSBjbGFzcz1cXFwiZGVzdGluYXRpb24tbGlzdF9fbmF2LWl0ZW1cXFwiIHJlcGVhdC5mb3I9XFxcInJlZ2lvbiBvZiByZWdpb25zXFxcIiBjbGljay5kZWxlZ2F0ZT1cXFwic2VsZWN0UmVnaW9uKHJlZ2lvbilcXFwiIGNsYXNzLmJpbmQ9XFxcInJlZ2lvbi5zZWxlY3RlZCA/ICdkZXN0aW5hdGlvbi1saXN0X19uYXYtaXRlbS0taXMtc2VsZWN0ZWQnIDogJydcXFwiXFxyXFxuXFx0XFx0XFx0XFx0IHNob3cuYmluZD1cXFwicmVnaW9uLmNvdW50T2ZBY2NvbW1vZGF0aW9ucyA+IDBcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImRlc3RpbmF0aW9uLWxpc3RfX25hdi1pdGVtLW5hbWVcXFwiPiR7cmVnaW9uLm5hbWV9Jm5ic3A7KCR7cmVnaW9uLmNvdW50T2ZBY2NvbW1vZGF0aW9uc30pPC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PHNwYW4gY2xhc3M9XFxcImRlc3RpbmF0aW9uLWxpc3RfX25hdi1hcnJvd1xcXCI+PC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdDwvbGk+XFxyXFxuXFx0XFx0XFx0PC91bD5cXHJcXG5cXHRcXHQ8L25hdj5cXHJcXG5cXHJcXG5cXHRcXHQ8ZGl2IGNsYXNzPVxcXCJkZXN0aW5hdGlvbi1saXN0X19jb250ZW50IGNvbC14cy0xMiBjb2wtc20tOCBjb2wtbWQtOVxcXCIgcmVmPVxcXCJjb250ZW50Q29udGFpbmVyXFxcIj5cXHJcXG5cXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJkZXN0aW5hdGlvbi1saXN0X19jb250ZW50LXJlZ2lvblxcXCIgcmVwZWF0LmZvcj1cXFwicmVnaW9uIG9mIHJlZ2lvbnNcXFwiIHNob3cuYmluZD1cXFwicmVnaW9uLnNlbGVjdGVkXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJkZXN0aW5hdGlvbi1saXN0X19jb250ZW50LWhlYWRlciBkcy1sYWJlbC1sYXJnZSBzdGFydC14cyBiZXR3ZWVuLXNtIGJvdHRvbS14c1xcXCIgY2xpY2suZGVsZWdhdGU9XFxcInNob3dGaWx0ZXJzKClcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdDxzcGFuIGNsYXNzPVxcXCJkZXN0aW5hdGlvbi1saXN0X19jb250ZW50LWJhY2tcXFwiPuKdrjwvc3Bhbj4ke3JlZ2lvbi5uYW1lfVxcclxcblxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImRlc3RpbmF0aW9uLWxpc3RfX2NvbnRlbnQtaXRlbS1zdWJ0aXRsZVxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0JHtyZWdpb24uY291bnRPZkFjY29tbW9kYXRpb25zfSAke3JlZ2lvbi5jb3VudE9mQWNjb21tb2RhdGlvbnMgPT09IDEgPyAnYWNjb21tb2RhdGlvbicgOiAnYWNjb21tb2RhdGlvbnMnfVxcclxcblxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcclxcblxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImRlc3RpbmF0aW9uLWxpc3RfX2dyb3VwXFxcIiByZXBlYXQuZm9yPVxcXCJncm91cCBvZiByZWdpb24uZ3JvdXBlZERlc3RpbmF0aW9uc1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiZGVzdGluYXRpb24tbGlzdF9fY29udGVudC1sYWJlbCBkcy1sYWJlbC1tZWRpdW1cXFwiPiR7Z3JvdXAua2V5fTwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGRpdiByZXBlYXQuZm9yPVxcXCJpdGVtIG9mIGdyb3VwLm1lbWJlcnNcXFwiIGNsYXNzPVxcXCJjb2wteHMtMTIgY29sLXNtLTYgY29sLW1kLTYgY29sLWxnLTRcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdDxhIGNsYXNzPVxcXCJkZXN0aW5hdGlvbi1saXN0X19ncm91cC1pdGVtXFxcIiBocmVmPVxcXCIke2l0ZW0udXJsfWFjY29tbW9kYXRpb25zL1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiZGVzdGluYXRpb24tbGlzdF9faW1hZ2UtaG9sZGVyXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8aW1nIHNyYz1cXFwiJHttb2RlbC5pbWFnZUdlblBhdGggKyBpdGVtLmhlcm9JbWFnZX0md2lkdGg9NTMwJmhlaWdodD0zMDAmY3JvcD1yZXNpemUmYWxpZ249Y2VudGVyXFxcIiBjbGFzcz1cXFwiZGVzdGluYXRpb24tbGlzdF9faW1hZ2VcXFwiXFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGFsdD1cXFwiJHtpdGVtLm5hbWV9XFxcIiAvPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImRlc3RpbmF0aW9uLWxpc3RfX2l0ZW0taW5mb1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiZGVzdGluYXRpb24tbGlzdF9faXRlbS1uYW1lLWhvbGRlclxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PHNwYW4gY2xhc3M9XFxcImRlc3RpbmF0aW9uLWxpc3RfX2l0ZW0tbmFtZSBkcy10aXRsZS1zbWFsbCB0cnVuY2F0ZS10ZXh0XFxcIj4ke2l0ZW0ubmFtZX08L3NwYW4+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PHNwYW4gaWYuYmluZD1cXFwiaXRlbS5hdHRyaWJ1dGVzLmlzTmV3XFxcIiBjbGFzcz1cXFwiZGVzdGluYXRpb24tYXBwbGljYXRpb25fX25ldy1pY29uXFxcIj48L3NwYW4+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiZGVzdGluYXRpb24tbGlzdF9faXRlbS10aXRsZSB0cnVuY2F0ZS10ZXh0XFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQke2l0ZW0ubnVtYmVyT2ZVbml0c30gJHtpdGVtLm51bWJlck9mVW5pdHMgPT09IDEgPyAnQWNjb21tb2RhdGlvbicgOiAnQWNjb21tb2RhdGlvbnMnfVxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdDwvYT5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHQ8L2Rpdj5cXHJcXG5cXHQ8L2Rpdj5cXHJcXG48L3RlbXBsYXRlPlxcclxcblwiOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///components/destination-application/destination-list.html\n')},"components/destination-application/destination-map":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError("Generator is already executing.");\r\n        while (_) try {\r\n            if (f = 1, y && (t = y[op[0] & 2 ? "return" : op[0] ? "throw" : "next"]) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [0, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar injectScript_1 = __webpack_require__(15);\r\nvar DestinationMap = /** @class */ (function () {\r\n    function DestinationMap() {\r\n        this.googleMapsApiUrl = \'\';\r\n        this.mapScriptsLoaded = false;\r\n    }\r\n    DestinationMap.prototype.attached = function () {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        if (!!this.mapScriptsLoaded) return [3 /*break*/, 2];\r\n                        return [4 /*yield*/, this.fetchScriptsAndInit()];\r\n                    case 1:\r\n                        _a.sent();\r\n                        this.mapScriptsLoaded = true;\r\n                        _a.label = 2;\r\n                    case 2:\r\n                        if (this.destinations) {\r\n                            this.createMarkerClusters(this.createMarkers());\r\n                        }\r\n                        return [2 /*return*/];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    DestinationMap.prototype.destinationsChanged = function () {\r\n        if (this.mapScriptsLoaded && this.markerClusterer) {\r\n            this.markerClusterer.clearMarkers();\r\n            this.infoBox.close();\r\n            this.createMarkerClusters(this.createMarkers());\r\n        }\r\n    };\r\n    DestinationMap.prototype.fetchScriptsAndInit = function () {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var _this = this;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, injectScript_1.injectScript(this.googleMapsApiUrl, \'google-maps-script\')];\r\n                    case 1:\r\n                        _a.sent();\r\n                        this.map = this.createGoogleMap();\r\n                        return [4 /*yield*/, injectScript_1.injectScript(\'/js/vendor/google-maps-utility-library-v3.infobox.js\', \'google-maps-infobox-script\', this.googleMapsElement)];\r\n                    case 2:\r\n                        _a.sent();\r\n                        this.infoBox = this.createInfoBox();\r\n                        google.maps.event.addListener(this.map, \'click\', function () {\r\n                            _this.infoBox.close();\r\n                        });\r\n                        return [4 /*yield*/, injectScript_1.injectScript(\'/js/vendor/google-maps-markerclusterer.js\', \'google-maps-clusterer-script\', this.googleMapsElement)];\r\n                    case 3:\r\n                        _a.sent();\r\n                        return [2 /*return*/];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    DestinationMap.prototype.createGoogleMap = function () {\r\n        var mapOptions = {\r\n            center: new google.maps.LatLng(0, -50),\r\n            clickableIcons: false,\r\n            draggable: true,\r\n            fullscreenControl: false,\r\n            gestureHandling: \'greedy\',\r\n            minZoom: 3,\r\n            // maxZoom: 15,\r\n            overviewMapControl: false,\r\n            panControl: false,\r\n            rotateControl: false,\r\n            streetViewControl: true,\r\n            zoom: 3,\r\n            zoomControl: true\r\n        };\r\n        return new google.maps.Map(this.googleMapsElement, mapOptions);\r\n    };\r\n    DestinationMap.prototype.createInfoBox = function () {\r\n        var infoBoxOptions = {\r\n            closeBoxURL: \'\',\r\n            disableAutoPan: true,\r\n            enableEventPropagation: false,\r\n            isHidden: false,\r\n            maxWidth: 0,\r\n            pane: \'floatPane\',\r\n            pixelOffset: new google.maps.Size(-137, -245),\r\n            zIndex: null\r\n        };\r\n        return new window.InfoBox(infoBoxOptions);\r\n    };\r\n    DestinationMap.prototype.createMarkers = function () {\r\n        var _this = this;\r\n        var markers = this.destinations.map(function (destination) {\r\n            var marker = new google.maps.Marker({\r\n                icon: \'/images/mapbox-map/marker-icon.png\',\r\n                map: _this.map,\r\n                position: new google.maps.LatLng(destination.attributes.latitude, destination.attributes.longitude),\r\n                title: destination.name\r\n            });\r\n            marker[\'destinationId\'] = destination.id;\r\n            return marker;\r\n        });\r\n        return markers;\r\n    };\r\n    DestinationMap.prototype.createMarkerClusters = function (markers) {\r\n        var _this = this;\r\n        markers.forEach(function (marker) {\r\n            google.maps.event.addListener(marker, \'click\', function () {\r\n                _this.openDestinationInfoBox(marker);\r\n                _this.map.panTo(marker.getPosition());\r\n                _this.map.panBy(0, -112);\r\n            });\r\n        });\r\n        this.markerClusterer = new MarkerClusterer(this.map, markers, {\r\n            cssClass: \'google-map__cluster\',\r\n            maxZoom: 10,\r\n        });\r\n    };\r\n    DestinationMap.prototype.openDestinationInfoBox = function (marker) {\r\n        // tslint:disable-next-line:no-shadowed-variable\r\n        var destination = this.destinations.find(function (destination) { return destination.id === marker.destinationId; });\r\n        var content = this.createDestinationInfoBoxContent(destination);\r\n        this.infoBox.setContent(content);\r\n        this.infoBox.open(this.map, marker);\r\n    };\r\n    DestinationMap.prototype.createDestinationInfoBoxContent = function (destination) {\r\n        // Full image path should be passed down from the server, no need to set it here\r\n        // If we do set it here it should be stored in a config that changes based on environment\r\n        var imagePath = \'//cms.inspirato.com/ImageGen.ashx?image=\';\r\n        var html = "\\n\\t\\t\\t<div class=\\"destination-infobox\\">\\n\\t\\t\\t\\t<a href=\\"" + destination.url + "accommodations/\\">\\n\\t\\t\\t\\t\\t<div class=\\"destination-infobox__cover-image\\"\\n\\t\\t\\t\\t\\t\\tstyle=\\"background-image: url(\'" + imagePath + destination.coverImage + "&width=552\')\\">\\n\\t\\t\\t\\t\\t<\/div>\\n\\n\\t\\t\\t\\t\\t<div class=\\"destination-infobox__content\\">\\n\\t\\t\\t\\t\\t\\t<div class=\\"destination-infobox__heading\\">\\n\\t\\t\\t\\t\\t\\t\\t<span class=\\"truncate-text\\">" + destination.name + "<\/span>\\n\\t\\t\\t\\t\\t\\t\\t" + (destination.attributes.isNew ? \'<span class="destination-application__new-icon"><\/span>\' : \'\') + "\\n\\t\\t\\t\\t\\t\\t<\/div>\\n\\t\\t\\t\\t\\t\\t<div class=\\"destination-infobox__subtitle\\">\\n\\t\\t\\t\\t\\t\\t\\t" + destination.numberOfUnits + " Accommodation" + (destination.numberOfUnits === 1 ? \'\' : \'s\') + "\\n\\t\\t\\t\\t\\t\\t<\/div>\\n\\t\\t\\t\\t\\t<\/div>\\n\\t\\t\\t\\t<\/a>\\n\\t\\t\\t<\/div>\\n\\t\\t";\r\n        return html;\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Array)\r\n    ], DestinationMap.prototype, "destinations", void 0);\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", String)\r\n    ], DestinationMap.prototype, "googleMapsApiUrl", void 0);\r\n    return DestinationMap;\r\n}());\r\nexports.DestinationMap = DestinationMap;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9kZXN0aW5hdGlvbi1hcHBsaWNhdGlvbi9kZXN0aW5hdGlvbi1tYXAudHM/ZThhNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxRQUFRO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLE1BQU0sNkJBQTZCLEVBQUUsWUFBWSxXQUFXLEVBQUU7QUFDakcsa0NBQWtDLE1BQU0saUNBQWlDLEVBQUUsWUFBWSxXQUFXLEVBQUU7QUFDcEcsK0JBQStCLGlFQUFpRSx1QkFBdUIsRUFBRSw0QkFBNEI7QUFDcko7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLGFBQWEsNkJBQTZCLDBCQUEwQixhQUFhLEVBQUUscUJBQXFCO0FBQ3hHLGdCQUFnQixxREFBcUQsb0VBQW9FLGFBQWEsRUFBRTtBQUN4SixzQkFBc0Isc0JBQXNCLHFCQUFxQixHQUFHO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QztBQUN2QyxrQ0FBa0MsU0FBUztBQUMzQyxrQ0FBa0MsV0FBVyxVQUFVO0FBQ3ZELHlDQUF5QyxjQUFjO0FBQ3ZEO0FBQ0EsNkdBQTZHLE9BQU8sVUFBVTtBQUM5SCxnRkFBZ0YsaUJBQWlCLE9BQU87QUFDeEcsd0RBQXdELGdCQUFnQixRQUFRLE9BQU87QUFDdkYsOENBQThDLGdCQUFnQixnQkFBZ0IsT0FBTztBQUNyRjtBQUNBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0EsU0FBUyxZQUFZLGFBQWEsT0FBTyxFQUFFLFVBQVUsV0FBVztBQUNoRSxtQ0FBbUMsU0FBUztBQUM1QztBQUNBO0FBQ0EsOENBQThDLGNBQWM7QUFDNUQsMEJBQTBCLG1CQUFPLENBQUMsbUJBQW1CO0FBQ3JELHFCQUFxQixtQkFBTyxDQUFDLEVBQW9CO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EseUVBQXlFLGdEQUFnRCxFQUFFO0FBQzNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QiLCJmaWxlIjoiY29tcG9uZW50cy9kZXN0aW5hdGlvbi1hcHBsaWNhdGlvbi9kZXN0aW5hdGlvbi1tYXAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxudmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufTtcclxudmFyIF9fbWV0YWRhdGEgPSAodGhpcyAmJiB0aGlzLl9fbWV0YWRhdGEpIHx8IGZ1bmN0aW9uIChrLCB2KSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEoaywgdik7XHJcbn07XHJcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZShyZXN1bHQudmFsdWUpOyB9KS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn07XHJcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IHlbb3BbMF0gJiAyID8gXCJyZXR1cm5cIiA6IG9wWzBdID8gXCJ0aHJvd1wiIDogXCJuZXh0XCJdKSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFswLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn07XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIGF1cmVsaWFfZnJhbWV3b3JrXzEgPSByZXF1aXJlKFwiYXVyZWxpYS1mcmFtZXdvcmtcIik7XHJcbnZhciBpbmplY3RTY3JpcHRfMSA9IHJlcXVpcmUoXCIuLi8uLi9pbmplY3RTY3JpcHRcIik7XHJcbnZhciBEZXN0aW5hdGlvbk1hcCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIERlc3RpbmF0aW9uTWFwKCkge1xyXG4gICAgICAgIHRoaXMuZ29vZ2xlTWFwc0FwaVVybCA9ICcnO1xyXG4gICAgICAgIHRoaXMubWFwU2NyaXB0c0xvYWRlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgRGVzdGluYXRpb25NYXAucHJvdG90eXBlLmF0dGFjaGVkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhdGhpcy5tYXBTY3JpcHRzTG9hZGVkKSByZXR1cm4gWzMgLypicmVhayovLCAyXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5mZXRjaFNjcmlwdHNBbmRJbml0KCldO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgX2Euc2VudCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcFNjcmlwdHNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfYS5sYWJlbCA9IDI7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kZXN0aW5hdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlTWFya2VyQ2x1c3RlcnModGhpcy5jcmVhdGVNYXJrZXJzKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgRGVzdGluYXRpb25NYXAucHJvdG90eXBlLmRlc3RpbmF0aW9uc0NoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubWFwU2NyaXB0c0xvYWRlZCAmJiB0aGlzLm1hcmtlckNsdXN0ZXJlcikge1xyXG4gICAgICAgICAgICB0aGlzLm1hcmtlckNsdXN0ZXJlci5jbGVhck1hcmtlcnMoKTtcclxuICAgICAgICAgICAgdGhpcy5pbmZvQm94LmNsb3NlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlTWFya2VyQ2x1c3RlcnModGhpcy5jcmVhdGVNYXJrZXJzKCkpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBEZXN0aW5hdGlvbk1hcC5wcm90b3R5cGUuZmV0Y2hTY3JpcHRzQW5kSW5pdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IHJldHVybiBbNCAvKnlpZWxkKi8sIGluamVjdFNjcmlwdF8xLmluamVjdFNjcmlwdCh0aGlzLmdvb2dsZU1hcHNBcGlVcmwsICdnb29nbGUtbWFwcy1zY3JpcHQnKV07XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBfYS5zZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFwID0gdGhpcy5jcmVhdGVHb29nbGVNYXAoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgaW5qZWN0U2NyaXB0XzEuaW5qZWN0U2NyaXB0KCcvanMvdmVuZG9yL2dvb2dsZS1tYXBzLXV0aWxpdHktbGlicmFyeS12My5pbmZvYm94LmpzJywgJ2dvb2dsZS1tYXBzLWluZm9ib3gtc2NyaXB0JywgdGhpcy5nb29nbGVNYXBzRWxlbWVudCldO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgX2Euc2VudCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluZm9Cb3ggPSB0aGlzLmNyZWF0ZUluZm9Cb3goKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ29vZ2xlLm1hcHMuZXZlbnQuYWRkTGlzdGVuZXIodGhpcy5tYXAsICdjbGljaycsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmluZm9Cb3guY2xvc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIGluamVjdFNjcmlwdF8xLmluamVjdFNjcmlwdCgnL2pzL3ZlbmRvci9nb29nbGUtbWFwcy1tYXJrZXJjbHVzdGVyZXIuanMnLCAnZ29vZ2xlLW1hcHMtY2x1c3RlcmVyLXNjcmlwdCcsIHRoaXMuZ29vZ2xlTWFwc0VsZW1lbnQpXTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICBEZXN0aW5hdGlvbk1hcC5wcm90b3R5cGUuY3JlYXRlR29vZ2xlTWFwID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBtYXBPcHRpb25zID0ge1xyXG4gICAgICAgICAgICBjZW50ZXI6IG5ldyBnb29nbGUubWFwcy5MYXRMbmcoMCwgLTUwKSxcclxuICAgICAgICAgICAgY2xpY2thYmxlSWNvbnM6IGZhbHNlLFxyXG4gICAgICAgICAgICBkcmFnZ2FibGU6IHRydWUsXHJcbiAgICAgICAgICAgIGZ1bGxzY3JlZW5Db250cm9sOiBmYWxzZSxcclxuICAgICAgICAgICAgZ2VzdHVyZUhhbmRsaW5nOiAnZ3JlZWR5JyxcclxuICAgICAgICAgICAgbWluWm9vbTogMyxcclxuICAgICAgICAgICAgLy8gbWF4Wm9vbTogMTUsXHJcbiAgICAgICAgICAgIG92ZXJ2aWV3TWFwQ29udHJvbDogZmFsc2UsXHJcbiAgICAgICAgICAgIHBhbkNvbnRyb2w6IGZhbHNlLFxyXG4gICAgICAgICAgICByb3RhdGVDb250cm9sOiBmYWxzZSxcclxuICAgICAgICAgICAgc3RyZWV0Vmlld0NvbnRyb2w6IHRydWUsXHJcbiAgICAgICAgICAgIHpvb206IDMsXHJcbiAgICAgICAgICAgIHpvb21Db250cm9sOiB0cnVlXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gbmV3IGdvb2dsZS5tYXBzLk1hcCh0aGlzLmdvb2dsZU1hcHNFbGVtZW50LCBtYXBPcHRpb25zKTtcclxuICAgIH07XHJcbiAgICBEZXN0aW5hdGlvbk1hcC5wcm90b3R5cGUuY3JlYXRlSW5mb0JveCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgaW5mb0JveE9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgIGNsb3NlQm94VVJMOiAnJyxcclxuICAgICAgICAgICAgZGlzYWJsZUF1dG9QYW46IHRydWUsXHJcbiAgICAgICAgICAgIGVuYWJsZUV2ZW50UHJvcGFnYXRpb246IGZhbHNlLFxyXG4gICAgICAgICAgICBpc0hpZGRlbjogZmFsc2UsXHJcbiAgICAgICAgICAgIG1heFdpZHRoOiAwLFxyXG4gICAgICAgICAgICBwYW5lOiAnZmxvYXRQYW5lJyxcclxuICAgICAgICAgICAgcGl4ZWxPZmZzZXQ6IG5ldyBnb29nbGUubWFwcy5TaXplKC0xMzcsIC0yNDUpLFxyXG4gICAgICAgICAgICB6SW5kZXg6IG51bGxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBuZXcgd2luZG93LkluZm9Cb3goaW5mb0JveE9wdGlvbnMpO1xyXG4gICAgfTtcclxuICAgIERlc3RpbmF0aW9uTWFwLnByb3RvdHlwZS5jcmVhdGVNYXJrZXJzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdmFyIG1hcmtlcnMgPSB0aGlzLmRlc3RpbmF0aW9ucy5tYXAoZnVuY3Rpb24gKGRlc3RpbmF0aW9uKSB7XHJcbiAgICAgICAgICAgIHZhciBtYXJrZXIgPSBuZXcgZ29vZ2xlLm1hcHMuTWFya2VyKHtcclxuICAgICAgICAgICAgICAgIGljb246ICcvaW1hZ2VzL21hcGJveC1tYXAvbWFya2VyLWljb24ucG5nJyxcclxuICAgICAgICAgICAgICAgIG1hcDogX3RoaXMubWFwLFxyXG4gICAgICAgICAgICAgICAgcG9zaXRpb246IG5ldyBnb29nbGUubWFwcy5MYXRMbmcoZGVzdGluYXRpb24uYXR0cmlidXRlcy5sYXRpdHVkZSwgZGVzdGluYXRpb24uYXR0cmlidXRlcy5sb25naXR1ZGUpLFxyXG4gICAgICAgICAgICAgICAgdGl0bGU6IGRlc3RpbmF0aW9uLm5hbWVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG1hcmtlclsnZGVzdGluYXRpb25JZCddID0gZGVzdGluYXRpb24uaWQ7XHJcbiAgICAgICAgICAgIHJldHVybiBtYXJrZXI7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG1hcmtlcnM7XHJcbiAgICB9O1xyXG4gICAgRGVzdGluYXRpb25NYXAucHJvdG90eXBlLmNyZWF0ZU1hcmtlckNsdXN0ZXJzID0gZnVuY3Rpb24gKG1hcmtlcnMpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIG1hcmtlcnMuZm9yRWFjaChmdW5jdGlvbiAobWFya2VyKSB7XHJcbiAgICAgICAgICAgIGdvb2dsZS5tYXBzLmV2ZW50LmFkZExpc3RlbmVyKG1hcmtlciwgJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMub3BlbkRlc3RpbmF0aW9uSW5mb0JveChtYXJrZXIpO1xyXG4gICAgICAgICAgICAgICAgX3RoaXMubWFwLnBhblRvKG1hcmtlci5nZXRQb3NpdGlvbigpKTtcclxuICAgICAgICAgICAgICAgIF90aGlzLm1hcC5wYW5CeSgwLCAtMTEyKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5tYXJrZXJDbHVzdGVyZXIgPSBuZXcgTWFya2VyQ2x1c3RlcmVyKHRoaXMubWFwLCBtYXJrZXJzLCB7XHJcbiAgICAgICAgICAgIGNzc0NsYXNzOiAnZ29vZ2xlLW1hcF9fY2x1c3RlcicsXHJcbiAgICAgICAgICAgIG1heFpvb206IDEwLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIERlc3RpbmF0aW9uTWFwLnByb3RvdHlwZS5vcGVuRGVzdGluYXRpb25JbmZvQm94ID0gZnVuY3Rpb24gKG1hcmtlcikge1xyXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1zaGFkb3dlZC12YXJpYWJsZVxyXG4gICAgICAgIHZhciBkZXN0aW5hdGlvbiA9IHRoaXMuZGVzdGluYXRpb25zLmZpbmQoZnVuY3Rpb24gKGRlc3RpbmF0aW9uKSB7IHJldHVybiBkZXN0aW5hdGlvbi5pZCA9PT0gbWFya2VyLmRlc3RpbmF0aW9uSWQ7IH0pO1xyXG4gICAgICAgIHZhciBjb250ZW50ID0gdGhpcy5jcmVhdGVEZXN0aW5hdGlvbkluZm9Cb3hDb250ZW50KGRlc3RpbmF0aW9uKTtcclxuICAgICAgICB0aGlzLmluZm9Cb3guc2V0Q29udGVudChjb250ZW50KTtcclxuICAgICAgICB0aGlzLmluZm9Cb3gub3Blbih0aGlzLm1hcCwgbWFya2VyKTtcclxuICAgIH07XHJcbiAgICBEZXN0aW5hdGlvbk1hcC5wcm90b3R5cGUuY3JlYXRlRGVzdGluYXRpb25JbmZvQm94Q29udGVudCA9IGZ1bmN0aW9uIChkZXN0aW5hdGlvbikge1xyXG4gICAgICAgIC8vIEZ1bGwgaW1hZ2UgcGF0aCBzaG91bGQgYmUgcGFzc2VkIGRvd24gZnJvbSB0aGUgc2VydmVyLCBubyBuZWVkIHRvIHNldCBpdCBoZXJlXHJcbiAgICAgICAgLy8gSWYgd2UgZG8gc2V0IGl0IGhlcmUgaXQgc2hvdWxkIGJlIHN0b3JlZCBpbiBhIGNvbmZpZyB0aGF0IGNoYW5nZXMgYmFzZWQgb24gZW52aXJvbm1lbnRcclxuICAgICAgICB2YXIgaW1hZ2VQYXRoID0gJy8vY21zLmluc3BpcmF0by5jb20vSW1hZ2VHZW4uYXNoeD9pbWFnZT0nO1xyXG4gICAgICAgIHZhciBodG1sID0gXCJcXG5cXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJkZXN0aW5hdGlvbi1pbmZvYm94XFxcIj5cXG5cXHRcXHRcXHRcXHQ8YSBocmVmPVxcXCJcIiArIGRlc3RpbmF0aW9uLnVybCArIFwiYWNjb21tb2RhdGlvbnMvXFxcIj5cXG5cXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJkZXN0aW5hdGlvbi1pbmZvYm94X19jb3Zlci1pbWFnZVxcXCJcXG5cXHRcXHRcXHRcXHRcXHRcXHRzdHlsZT1cXFwiYmFja2dyb3VuZC1pbWFnZTogdXJsKCdcIiArIGltYWdlUGF0aCArIGRlc3RpbmF0aW9uLmNvdmVySW1hZ2UgKyBcIiZ3aWR0aD01NTInKVxcXCI+XFxuXFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxuXFxuXFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiZGVzdGluYXRpb24taW5mb2JveF9fY29udGVudFxcXCI+XFxuXFx0XFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiZGVzdGluYXRpb24taW5mb2JveF9faGVhZGluZ1xcXCI+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0PHNwYW4gY2xhc3M9XFxcInRydW5jYXRlLXRleHRcXFwiPlwiICsgZGVzdGluYXRpb24ubmFtZSArIFwiPC9zcGFuPlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFwiICsgKGRlc3RpbmF0aW9uLmF0dHJpYnV0ZXMuaXNOZXcgPyAnPHNwYW4gY2xhc3M9XCJkZXN0aW5hdGlvbi1hcHBsaWNhdGlvbl9fbmV3LWljb25cIj48L3NwYW4+JyA6ICcnKSArIFwiXFxuXFx0XFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxuXFx0XFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiZGVzdGluYXRpb24taW5mb2JveF9fc3VidGl0bGVcXFwiPlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFwiICsgZGVzdGluYXRpb24ubnVtYmVyT2ZVbml0cyArIFwiIEFjY29tbW9kYXRpb25cIiArIChkZXN0aW5hdGlvbi5udW1iZXJPZlVuaXRzID09PSAxID8gJycgOiAncycpICsgXCJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXG5cXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXG5cXHRcXHRcXHRcXHQ8L2E+XFxuXFx0XFx0XFx0PC9kaXY+XFxuXFx0XFx0XCI7XHJcbiAgICAgICAgcmV0dXJuIGh0bWw7XHJcbiAgICB9O1xyXG4gICAgX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5iaW5kYWJsZSxcclxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgQXJyYXkpXHJcbiAgICBdLCBEZXN0aW5hdGlvbk1hcC5wcm90b3R5cGUsIFwiZGVzdGluYXRpb25zXCIsIHZvaWQgMCk7XHJcbiAgICBfX2RlY29yYXRlKFtcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLmJpbmRhYmxlLFxyXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBTdHJpbmcpXHJcbiAgICBdLCBEZXN0aW5hdGlvbk1hcC5wcm90b3R5cGUsIFwiZ29vZ2xlTWFwc0FwaVVybFwiLCB2b2lkIDApO1xyXG4gICAgcmV0dXJuIERlc3RpbmF0aW9uTWFwO1xyXG59KCkpO1xyXG5leHBvcnRzLkRlc3RpbmF0aW9uTWFwID0gRGVzdGluYXRpb25NYXA7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///components/destination-application/destination-map\n')},"components/destination-application/destination-map.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<div class=\\"destination-map\\" ref=\\"googleMapsElement\\"><\/div>\\r\\n<\/template>";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9kZXN0aW5hdGlvbi1hcHBsaWNhdGlvbi9kZXN0aW5hdGlvbi1tYXAuaHRtbD81NDMyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBIiwiZmlsZSI6ImNvbXBvbmVudHMvZGVzdGluYXRpb24tYXBwbGljYXRpb24vZGVzdGluYXRpb24tbWFwLmh0bWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IFwiPHRlbXBsYXRlPlxcclxcblxcdDxkaXYgY2xhc3M9XFxcImRlc3RpbmF0aW9uLW1hcFxcXCIgcmVmPVxcXCJnb29nbGVNYXBzRWxlbWVudFxcXCI+PC9kaXY+XFxyXFxuPC90ZW1wbGF0ZT5cIjsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///components/destination-application/destination-map.html\n')},"components/destination-application/filter-dropdown":function(module,exports,__webpack_require__){"use strict";eval("\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar FilterDropdown = /** @class */ (function () {\r\n    function FilterDropdown() {\r\n        this.isExpanded = false;\r\n        this.handleClickWhileOpenBound = this.handleClickWhileOpen.bind(this);\r\n    }\r\n    FilterDropdown.prototype.toggle = function () {\r\n        this.isExpanded = !this.isExpanded;\r\n        if (this.isExpanded) {\r\n            var body = document.querySelector('body');\r\n            body.addEventListener('click', this.handleClickWhileOpenBound);\r\n            body.addEventListener('touch', this.handleClickWhileOpenBound);\r\n        }\r\n    };\r\n    FilterDropdown.prototype.handleClickWhileOpen = function (e) {\r\n        if (!this.toggleButton.contains(e.srcElement)\r\n            && !this.content.contains(e.srcElement)) {\r\n            var body = document.querySelector('body');\r\n            body.removeEventListener('click', this.handleClickWhileOpenBound);\r\n            body.removeEventListener('touch', this.handleClickWhileOpenBound);\r\n            this.isExpanded = false;\r\n        }\r\n    };\r\n    return FilterDropdown;\r\n}());\r\nexports.FilterDropdown = FilterDropdown;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9kZXN0aW5hdGlvbi1hcHBsaWNhdGlvbi9maWx0ZXItZHJvcGRvd24udHM/MDI1MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE4QyxjQUFjO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QiLCJmaWxlIjoiY29tcG9uZW50cy9kZXN0aW5hdGlvbi1hcHBsaWNhdGlvbi9maWx0ZXItZHJvcGRvd24uanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgRmlsdGVyRHJvcGRvd24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBGaWx0ZXJEcm9wZG93bigpIHtcclxuICAgICAgICB0aGlzLmlzRXhwYW5kZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmhhbmRsZUNsaWNrV2hpbGVPcGVuQm91bmQgPSB0aGlzLmhhbmRsZUNsaWNrV2hpbGVPcGVuLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcbiAgICBGaWx0ZXJEcm9wZG93bi5wcm90b3R5cGUudG9nZ2xlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuaXNFeHBhbmRlZCA9ICF0aGlzLmlzRXhwYW5kZWQ7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNFeHBhbmRlZCkge1xyXG4gICAgICAgICAgICB2YXIgYm9keSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2JvZHknKTtcclxuICAgICAgICAgICAgYm9keS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuaGFuZGxlQ2xpY2tXaGlsZU9wZW5Cb3VuZCk7XHJcbiAgICAgICAgICAgIGJvZHkuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2gnLCB0aGlzLmhhbmRsZUNsaWNrV2hpbGVPcGVuQm91bmQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBGaWx0ZXJEcm9wZG93bi5wcm90b3R5cGUuaGFuZGxlQ2xpY2tXaGlsZU9wZW4gPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIGlmICghdGhpcy50b2dnbGVCdXR0b24uY29udGFpbnMoZS5zcmNFbGVtZW50KVxyXG4gICAgICAgICAgICAmJiAhdGhpcy5jb250ZW50LmNvbnRhaW5zKGUuc3JjRWxlbWVudCkpIHtcclxuICAgICAgICAgICAgdmFyIGJvZHkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdib2R5Jyk7XHJcbiAgICAgICAgICAgIGJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmhhbmRsZUNsaWNrV2hpbGVPcGVuQm91bmQpO1xyXG4gICAgICAgICAgICBib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoJywgdGhpcy5oYW5kbGVDbGlja1doaWxlT3BlbkJvdW5kKTtcclxuICAgICAgICAgICAgdGhpcy5pc0V4cGFuZGVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiBGaWx0ZXJEcm9wZG93bjtcclxufSgpKTtcclxuZXhwb3J0cy5GaWx0ZXJEcm9wZG93biA9IEZpbHRlckRyb3Bkb3duO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///components/destination-application/filter-dropdown\n")},"components/destination-application/filter-dropdown.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\r\\n\\t<div element.ref=\\"toggleButton\\" class=\\"destination-filter__menu\\" click.delegate=\\"toggle()\\">\\r\\n\\t\\t<slot name=\\"button\\"><\/slot>\\r\\n\\t<\/div>\\r\\n\\r\\n\\t<div show.bind=\\"isExpanded\\" element.ref=\\"content\\" class=\\"destination-filter__content\\">\\r\\n\\t\\t<slot name=\\"content\\"><\/slot>\\r\\n\\t<\/div>\\r\\n\\t\\r\\n<\/template>\\t";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9kZXN0aW5hdGlvbi1hcHBsaWNhdGlvbi9maWx0ZXItZHJvcGRvd24uaHRtbD9mNjA1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBIiwiZmlsZSI6ImNvbXBvbmVudHMvZGVzdGluYXRpb24tYXBwbGljYXRpb24vZmlsdGVyLWRyb3Bkb3duLmh0bWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IFwiPHRlbXBsYXRlPlxcclxcblxcclxcblxcdDxkaXYgZWxlbWVudC5yZWY9XFxcInRvZ2dsZUJ1dHRvblxcXCIgY2xhc3M9XFxcImRlc3RpbmF0aW9uLWZpbHRlcl9fbWVudVxcXCIgY2xpY2suZGVsZWdhdGU9XFxcInRvZ2dsZSgpXFxcIj5cXHJcXG5cXHRcXHQ8c2xvdCBuYW1lPVxcXCJidXR0b25cXFwiPjwvc2xvdD5cXHJcXG5cXHQ8L2Rpdj5cXHJcXG5cXHJcXG5cXHQ8ZGl2IHNob3cuYmluZD1cXFwiaXNFeHBhbmRlZFxcXCIgZWxlbWVudC5yZWY9XFxcImNvbnRlbnRcXFwiIGNsYXNzPVxcXCJkZXN0aW5hdGlvbi1maWx0ZXJfX2NvbnRlbnRcXFwiPlxcclxcblxcdFxcdDxzbG90IG5hbWU9XFxcImNvbnRlbnRcXFwiPjwvc2xvdD5cXHJcXG5cXHQ8L2Rpdj5cXHJcXG5cXHRcXHJcXG48L3RlbXBsYXRlPlxcdFwiOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///components/destination-application/filter-dropdown.html\n')},"components/destination-application/index":function(module,exports,__webpack_require__){"use strict";eval("\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__(\"aurelia-framework\");\r\nfunction configure(config) {\r\n    config.globalResources([\r\n        './destination-application',\r\n        './destination-map',\r\n        './destination-list',\r\n        './destination-filter',\r\n        './filter-dropdown'\r\n    ]);\r\n}\r\nexports.configure = configure;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9kZXN0aW5hdGlvbi1hcHBsaWNhdGlvbi9pbmRleC50cz9hMjM3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQThDLGNBQWM7QUFDNUQsMEJBQTBCLG1CQUFPLENBQUMsbUJBQW1CO0FBQ3JEO0FBQ0E7QUFDQSxRQUFRLDJCQUFvRTtBQUM1RSxRQUFRLG1CQUE0RDtBQUNwRSxRQUFRLG9CQUE2RDtBQUNyRSxRQUFRLHNCQUErRDtBQUN2RSxRQUFRLG1CQUE0RDtBQUNwRTtBQUNBO0FBQ0EiLCJmaWxlIjoiY29tcG9uZW50cy9kZXN0aW5hdGlvbi1hcHBsaWNhdGlvbi9pbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBhdXJlbGlhX2ZyYW1ld29ya18xID0gcmVxdWlyZShcImF1cmVsaWEtZnJhbWV3b3JrXCIpO1xyXG5mdW5jdGlvbiBjb25maWd1cmUoY29uZmlnKSB7XHJcbiAgICBjb25maWcuZ2xvYmFsUmVzb3VyY2VzKFtcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLlBMQVRGT1JNLm1vZHVsZU5hbWUoJy4vZGVzdGluYXRpb24tYXBwbGljYXRpb24nKSxcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLlBMQVRGT1JNLm1vZHVsZU5hbWUoJy4vZGVzdGluYXRpb24tbWFwJyksXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5QTEFURk9STS5tb2R1bGVOYW1lKCcuL2Rlc3RpbmF0aW9uLWxpc3QnKSxcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLlBMQVRGT1JNLm1vZHVsZU5hbWUoJy4vZGVzdGluYXRpb24tZmlsdGVyJyksXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5QTEFURk9STS5tb2R1bGVOYW1lKCcuL2ZpbHRlci1kcm9wZG93bicpXHJcbiAgICBdKTtcclxufVxyXG5leHBvcnRzLmNvbmZpZ3VyZSA9IGNvbmZpZ3VyZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/destination-application/index\n")},"components/expandable-card/expandable-card":function(module,exports,__webpack_require__){"use strict";eval("\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar aurelia_event_aggregator_1 = __webpack_require__(\"aurelia-event-aggregator\");\r\nvar aurelia_framework_1 = __webpack_require__(\"aurelia-framework\");\r\nexports.ResponsivePageViewModel = window['PageViewModel'];\r\nvar ExpandableCard = /** @class */ (function () {\r\n    function ExpandableCard(eventAggregator) {\r\n        this.backgroundColor = '';\r\n        this.borderColor = '';\r\n        this.cardImage = '';\r\n        this.modifier = '';\r\n        this.isExpanded = false;\r\n        this.expandableCardAnchor = '';\r\n        this.eventAggregator = eventAggregator;\r\n    }\r\n    ExpandableCard.prototype.attached = function () {\r\n        var _this = this;\r\n        this.closeSubscription = this.eventAggregator.subscribe('closeDrawers', function (response) {\r\n            if (response.drawerToClose !== _this.expandableCardIdentifier) {\r\n                _this.modifier = '';\r\n                _this.isExpanded = false;\r\n            }\r\n        });\r\n        this.openSubscription = this.eventAggregator.subscribe('openDrawer', function (response) {\r\n            if (response.drawerToOpen === _this.expandableCardIdentifier) {\r\n                _this.modifier = 'expandable-card--is-open';\r\n                _this.isExpanded = true;\r\n            }\r\n        });\r\n        if (this.locationHashFound()) {\r\n            var anchor = location.hash.replace(/#/g, '') + '-anchor';\r\n            this.scrollToAnchor(anchor);\r\n        }\r\n    };\r\n    ExpandableCard.prototype.detached = function () {\r\n        this.closeSubscription.dispose();\r\n        this.openSubscription.dispose();\r\n    };\r\n    ExpandableCard.prototype.activate = function (model) {\r\n        this.model = model;\r\n        this.backgroundColor = \"background: \" + model.backgroundColor + \";\";\r\n        this.borderColor = \"border-bottom-color: \" + model.backgroundColor + \";\";\r\n        this.cardImage = \"background-image: url(\\\"\" + exports.ResponsivePageViewModel.configuration.imageServer + model.icon.filePath + \"&width=700\\\");\";\r\n        this.expandableCardAnchor = model.heading.toLowerCase().trim().replace(/\\s/g, '-') + '-anchor';\r\n    };\r\n    ExpandableCard.prototype.expandCard = function () {\r\n        if (this.isExpanded) {\r\n            document.documentElement.classList.remove('disable-scroll');\r\n            document.body.classList.remove('disable-scroll');\r\n            this.modifier = '';\r\n            this.isExpanded = false;\r\n        }\r\n        else {\r\n            document.documentElement.className += ' disable-scroll';\r\n            document.body.className += ' disable-scroll';\r\n            this.modifier = 'expandable-card--is-open';\r\n            this.isExpanded = true;\r\n            this.scrollToCard();\r\n        }\r\n        this.eventAggregator.publish('closeDrawers', {\r\n            drawerToClose: this.expandableCardIdentifier\r\n        });\r\n    };\r\n    ExpandableCard.prototype.scrollToCard = function () {\r\n        var _this = this;\r\n        setTimeout(function () {\r\n            var rec = _this.expandableCardIdentifier.getBoundingClientRect();\r\n            var elementLocation = rec.top + window.pageYOffset - 20;\r\n            window.scrollTo({\r\n                behavior: 'smooth',\r\n                left: 0,\r\n                top: elementLocation\r\n            });\r\n            _this.updateLocationHash();\r\n        }, 100);\r\n    };\r\n    ExpandableCard.prototype.updateLocationHash = function () {\r\n        var locationHash = this.expandableCardIdentifier.id.replace('-anchor', '');\r\n        location.hash = locationHash;\r\n    };\r\n    ExpandableCard.prototype.locationHashFound = function () {\r\n        var anchor = location.hash.replace(/#/g, '') + '-anchor';\r\n        return location.hash && !!document.getElementById(anchor);\r\n    };\r\n    ExpandableCard.prototype.scrollToAnchor = function (anchorLocation) {\r\n        var anchor = document.getElementById(anchorLocation).getBoundingClientRect();\r\n        var elementLocation = anchor.top + window.pageYOffset - 20;\r\n        window.scrollTo({\r\n            left: 0,\r\n            top: elementLocation\r\n        });\r\n        var hash = location.hash.replace(/#/g, '');\r\n        var cardToOpen = this.expandableCardIdentifier.id.replace('-anchor', '');\r\n        if (hash === cardToOpen) {\r\n            this.eventAggregator.publish('openDrawer', {\r\n                drawerToOpen: this.expandableCardIdentifier\r\n            });\r\n        }\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata(\"design:type\", Object)\r\n    ], ExpandableCard.prototype, \"model\", void 0);\r\n    ExpandableCard = __decorate([\r\n        aurelia_framework_1.autoinject(),\r\n        __metadata(\"design:paramtypes\", [aurelia_event_aggregator_1.EventAggregator])\r\n    ], ExpandableCard);\r\n    return ExpandableCard;\r\n}());\r\nexports.ExpandableCard = ExpandableCard;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9leHBhbmRhYmxlLWNhcmQvZXhwYW5kYWJsZS1jYXJkLnRzPzc0MzEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsUUFBUTtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLGNBQWM7QUFDNUQsaUNBQWlDLG1CQUFPLENBQUMsMEJBQTBCO0FBQ25FLDBCQUEwQixtQkFBTyxDQUFDLG1CQUFtQjtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEVBQTBFO0FBQzFFLCtFQUErRTtBQUMvRSx1SkFBdUo7QUFDdko7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QiLCJmaWxlIjoiY29tcG9uZW50cy9leHBhbmRhYmxlLWNhcmQvZXhwYW5kYWJsZS1jYXJkLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2RlY29yYXRlID0gKHRoaXMgJiYgdGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn07XHJcbnZhciBfX21ldGFkYXRhID0gKHRoaXMgJiYgdGhpcy5fX21ldGFkYXRhKSB8fCBmdW5jdGlvbiAoaywgdikge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xyXG59O1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBhdXJlbGlhX2V2ZW50X2FnZ3JlZ2F0b3JfMSA9IHJlcXVpcmUoXCJhdXJlbGlhLWV2ZW50LWFnZ3JlZ2F0b3JcIik7XHJcbnZhciBhdXJlbGlhX2ZyYW1ld29ya18xID0gcmVxdWlyZShcImF1cmVsaWEtZnJhbWV3b3JrXCIpO1xyXG5leHBvcnRzLlJlc3BvbnNpdmVQYWdlVmlld01vZGVsID0gd2luZG93WydQYWdlVmlld01vZGVsJ107XHJcbnZhciBFeHBhbmRhYmxlQ2FyZCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEV4cGFuZGFibGVDYXJkKGV2ZW50QWdncmVnYXRvcikge1xyXG4gICAgICAgIHRoaXMuYmFja2dyb3VuZENvbG9yID0gJyc7XHJcbiAgICAgICAgdGhpcy5ib3JkZXJDb2xvciA9ICcnO1xyXG4gICAgICAgIHRoaXMuY2FyZEltYWdlID0gJyc7XHJcbiAgICAgICAgdGhpcy5tb2RpZmllciA9ICcnO1xyXG4gICAgICAgIHRoaXMuaXNFeHBhbmRlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZXhwYW5kYWJsZUNhcmRBbmNob3IgPSAnJztcclxuICAgICAgICB0aGlzLmV2ZW50QWdncmVnYXRvciA9IGV2ZW50QWdncmVnYXRvcjtcclxuICAgIH1cclxuICAgIEV4cGFuZGFibGVDYXJkLnByb3RvdHlwZS5hdHRhY2hlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuY2xvc2VTdWJzY3JpcHRpb24gPSB0aGlzLmV2ZW50QWdncmVnYXRvci5zdWJzY3JpYmUoJ2Nsb3NlRHJhd2VycycsIGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuZHJhd2VyVG9DbG9zZSAhPT0gX3RoaXMuZXhwYW5kYWJsZUNhcmRJZGVudGlmaWVyKSB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5tb2RpZmllciA9ICcnO1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuaXNFeHBhbmRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5vcGVuU3Vic2NyaXB0aW9uID0gdGhpcy5ldmVudEFnZ3JlZ2F0b3Iuc3Vic2NyaWJlKCdvcGVuRHJhd2VyJywgZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5kcmF3ZXJUb09wZW4gPT09IF90aGlzLmV4cGFuZGFibGVDYXJkSWRlbnRpZmllcikge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMubW9kaWZpZXIgPSAnZXhwYW5kYWJsZS1jYXJkLS1pcy1vcGVuJztcclxuICAgICAgICAgICAgICAgIF90aGlzLmlzRXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKHRoaXMubG9jYXRpb25IYXNoRm91bmQoKSkge1xyXG4gICAgICAgICAgICB2YXIgYW5jaG9yID0gbG9jYXRpb24uaGFzaC5yZXBsYWNlKC8jL2csICcnKSArICctYW5jaG9yJztcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FuY2hvcihhbmNob3IpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBFeHBhbmRhYmxlQ2FyZC5wcm90b3R5cGUuZGV0YWNoZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5jbG9zZVN1YnNjcmlwdGlvbi5kaXNwb3NlKCk7XHJcbiAgICAgICAgdGhpcy5vcGVuU3Vic2NyaXB0aW9uLmRpc3Bvc2UoKTtcclxuICAgIH07XHJcbiAgICBFeHBhbmRhYmxlQ2FyZC5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbiAobW9kZWwpIHtcclxuICAgICAgICB0aGlzLm1vZGVsID0gbW9kZWw7XHJcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kQ29sb3IgPSBcImJhY2tncm91bmQ6IFwiICsgbW9kZWwuYmFja2dyb3VuZENvbG9yICsgXCI7XCI7XHJcbiAgICAgICAgdGhpcy5ib3JkZXJDb2xvciA9IFwiYm9yZGVyLWJvdHRvbS1jb2xvcjogXCIgKyBtb2RlbC5iYWNrZ3JvdW5kQ29sb3IgKyBcIjtcIjtcclxuICAgICAgICB0aGlzLmNhcmRJbWFnZSA9IFwiYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJcIiArIGV4cG9ydHMuUmVzcG9uc2l2ZVBhZ2VWaWV3TW9kZWwuY29uZmlndXJhdGlvbi5pbWFnZVNlcnZlciArIG1vZGVsLmljb24uZmlsZVBhdGggKyBcIiZ3aWR0aD03MDBcXFwiKTtcIjtcclxuICAgICAgICB0aGlzLmV4cGFuZGFibGVDYXJkQW5jaG9yID0gbW9kZWwuaGVhZGluZy50b0xvd2VyQ2FzZSgpLnRyaW0oKS5yZXBsYWNlKC9cXHMvZywgJy0nKSArICctYW5jaG9yJztcclxuICAgIH07XHJcbiAgICBFeHBhbmRhYmxlQ2FyZC5wcm90b3R5cGUuZXhwYW5kQ2FyZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0V4cGFuZGVkKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdkaXNhYmxlLXNjcm9sbCcpO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ2Rpc2FibGUtc2Nyb2xsJyk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kaWZpZXIgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5pc0V4cGFuZGVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NOYW1lICs9ICcgZGlzYWJsZS1zY3JvbGwnO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTmFtZSArPSAnIGRpc2FibGUtc2Nyb2xsJztcclxuICAgICAgICAgICAgdGhpcy5tb2RpZmllciA9ICdleHBhbmRhYmxlLWNhcmQtLWlzLW9wZW4nO1xyXG4gICAgICAgICAgICB0aGlzLmlzRXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbFRvQ2FyZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmV2ZW50QWdncmVnYXRvci5wdWJsaXNoKCdjbG9zZURyYXdlcnMnLCB7XHJcbiAgICAgICAgICAgIGRyYXdlclRvQ2xvc2U6IHRoaXMuZXhwYW5kYWJsZUNhcmRJZGVudGlmaWVyXHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgRXhwYW5kYWJsZUNhcmQucHJvdG90eXBlLnNjcm9sbFRvQ2FyZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgcmVjID0gX3RoaXMuZXhwYW5kYWJsZUNhcmRJZGVudGlmaWVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgICAgICB2YXIgZWxlbWVudExvY2F0aW9uID0gcmVjLnRvcCArIHdpbmRvdy5wYWdlWU9mZnNldCAtIDIwO1xyXG4gICAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oe1xyXG4gICAgICAgICAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxyXG4gICAgICAgICAgICAgICAgbGVmdDogMCxcclxuICAgICAgICAgICAgICAgIHRvcDogZWxlbWVudExvY2F0aW9uXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBfdGhpcy51cGRhdGVMb2NhdGlvbkhhc2goKTtcclxuICAgICAgICB9LCAxMDApO1xyXG4gICAgfTtcclxuICAgIEV4cGFuZGFibGVDYXJkLnByb3RvdHlwZS51cGRhdGVMb2NhdGlvbkhhc2ggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGxvY2F0aW9uSGFzaCA9IHRoaXMuZXhwYW5kYWJsZUNhcmRJZGVudGlmaWVyLmlkLnJlcGxhY2UoJy1hbmNob3InLCAnJyk7XHJcbiAgICAgICAgbG9jYXRpb24uaGFzaCA9IGxvY2F0aW9uSGFzaDtcclxuICAgIH07XHJcbiAgICBFeHBhbmRhYmxlQ2FyZC5wcm90b3R5cGUubG9jYXRpb25IYXNoRm91bmQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGFuY2hvciA9IGxvY2F0aW9uLmhhc2gucmVwbGFjZSgvIy9nLCAnJykgKyAnLWFuY2hvcic7XHJcbiAgICAgICAgcmV0dXJuIGxvY2F0aW9uLmhhc2ggJiYgISFkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhbmNob3IpO1xyXG4gICAgfTtcclxuICAgIEV4cGFuZGFibGVDYXJkLnByb3RvdHlwZS5zY3JvbGxUb0FuY2hvciA9IGZ1bmN0aW9uIChhbmNob3JMb2NhdGlvbikge1xyXG4gICAgICAgIHZhciBhbmNob3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhbmNob3JMb2NhdGlvbikuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgdmFyIGVsZW1lbnRMb2NhdGlvbiA9IGFuY2hvci50b3AgKyB3aW5kb3cucGFnZVlPZmZzZXQgLSAyMDtcclxuICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oe1xyXG4gICAgICAgICAgICBsZWZ0OiAwLFxyXG4gICAgICAgICAgICB0b3A6IGVsZW1lbnRMb2NhdGlvblxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHZhciBoYXNoID0gbG9jYXRpb24uaGFzaC5yZXBsYWNlKC8jL2csICcnKTtcclxuICAgICAgICB2YXIgY2FyZFRvT3BlbiA9IHRoaXMuZXhwYW5kYWJsZUNhcmRJZGVudGlmaWVyLmlkLnJlcGxhY2UoJy1hbmNob3InLCAnJyk7XHJcbiAgICAgICAgaWYgKGhhc2ggPT09IGNhcmRUb09wZW4pIHtcclxuICAgICAgICAgICAgdGhpcy5ldmVudEFnZ3JlZ2F0b3IucHVibGlzaCgnb3BlbkRyYXdlcicsIHtcclxuICAgICAgICAgICAgICAgIGRyYXdlclRvT3BlbjogdGhpcy5leHBhbmRhYmxlQ2FyZElkZW50aWZpZXJcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuYmluZGFibGUsXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcclxuICAgIF0sIEV4cGFuZGFibGVDYXJkLnByb3RvdHlwZSwgXCJtb2RlbFwiLCB2b2lkIDApO1xyXG4gICAgRXhwYW5kYWJsZUNhcmQgPSBfX2RlY29yYXRlKFtcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLmF1dG9pbmplY3QoKSxcclxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW2F1cmVsaWFfZXZlbnRfYWdncmVnYXRvcl8xLkV2ZW50QWdncmVnYXRvcl0pXHJcbiAgICBdLCBFeHBhbmRhYmxlQ2FyZCk7XHJcbiAgICByZXR1cm4gRXhwYW5kYWJsZUNhcmQ7XHJcbn0oKSk7XHJcbmV4cG9ydHMuRXhwYW5kYWJsZUNhcmQgPSBFeHBhbmRhYmxlQ2FyZDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/expandable-card/expandable-card\n")},"components/expandable-card/expandable-card.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<div class=\\"expandable-card ${modifier}\\">\\r\\n\\r\\n\\t\\t<div class=\\"expandable-card__scrollable-content\\">\\r\\n\\t\\t\\t<div click.delegate=\\"expandCard()\\" css.bind=\\"borderColor\\" class=\\"expandable-card__content\\">\\r\\n\\r\\n\\t\\t\\t\\t<div>\\r\\n\\t\\t\\t\\t\\t<a href=\\"javascript:void(0)\\" class=\\"expandable-card--close-button\\">&times;<\/a>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t\\t<div class=\\"expandable-card__icon-holder\\">\\r\\n\\t\\t\\t\\t\\t<div css.bind=\\"cardImage\\"\\r\\n\\t\\t\\t\\t\\t\\tif.bind=\\"model.icon\\"\\r\\n\\t\\t\\t\\t\\t\\tref=\\"expandableCardIdentifier\\"\\r\\n\\t\\t\\t\\t\\t\\tid=\\"${expandableCardAnchor}\\"\\r\\n\\t\\t\\t\\t\\t\\tclass=\\"expandable-card__icon\\"><\/div>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t\\t<h3 class=\\"expandable-card__heading ds-title-medium\\">\\r\\n\\t\\t\\t\\t\\t${model.heading}\\r\\n\\t\\t\\t\\t\\t<div role=\\"doc-subtitle\\" class=\\"expandable-card__subheading ds-subtitle\\" if.bind=\\"model.subhead.length\\" innerhtml.bind=\\"model.subhead\\"><\/h4>\\r\\n\\t\\t\\t\\t<\/h3>\\r\\n\\r\\n\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t<div class=\\"expandable-card__drawer\\" css.bind=\\"backgroundColor\\">\\r\\n\\t\\t\\t\\t<div class=\\"expandable-card__drawer-wrapper\\">\\r\\n\\t\\t\\t\\t\\t<div repeat.for=\\"component of model.nestedComponents\\" class=\\"expandable-card__item\\">\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t<compose containerless\\r\\n\\t\\t\\t\\t\\t\\t\\tmodel.bind=\\"component\\"\\r\\n\\t\\t\\t\\t\\t\\t\\tview-model=\\"../${component.componentName}/${component.componentName}\\">\\r\\n\\t\\t\\t\\t\\t\\t<\/compose>\\r\\n\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t<\/div>\\r\\n\\t<\/div>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9leHBhbmRhYmxlLWNhcmQvZXhwYW5kYWJsZS1jYXJkLmh0bWw/YmIwOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpRUFBaUUsU0FBUyw4UkFBOFIsd09BQXdPLHFCQUFxQixpS0FBaUssY0FBYyxrakJBQWtqQix3QkFBd0IsR0FBRyx3QkFBd0IiLCJmaWxlIjoiY29tcG9uZW50cy9leHBhbmRhYmxlLWNhcmQvZXhwYW5kYWJsZS1jYXJkLmh0bWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IFwiPHRlbXBsYXRlPlxcclxcblxcdDxkaXYgY2xhc3M9XFxcImV4cGFuZGFibGUtY2FyZCAke21vZGlmaWVyfVxcXCI+XFxyXFxuXFxyXFxuXFx0XFx0PGRpdiBjbGFzcz1cXFwiZXhwYW5kYWJsZS1jYXJkX19zY3JvbGxhYmxlLWNvbnRlbnRcXFwiPlxcclxcblxcdFxcdFxcdDxkaXYgY2xpY2suZGVsZWdhdGU9XFxcImV4cGFuZENhcmQoKVxcXCIgY3NzLmJpbmQ9XFxcImJvcmRlckNvbG9yXFxcIiBjbGFzcz1cXFwiZXhwYW5kYWJsZS1jYXJkX19jb250ZW50XFxcIj5cXHJcXG5cXHJcXG5cXHRcXHRcXHRcXHQ8ZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdDxhIGhyZWY9XFxcImphdmFzY3JpcHQ6dm9pZCgwKVxcXCIgY2xhc3M9XFxcImV4cGFuZGFibGUtY2FyZC0tY2xvc2UtYnV0dG9uXFxcIj4mdGltZXM7PC9hPlxcclxcblxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcclxcblxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImV4cGFuZGFibGUtY2FyZF9faWNvbi1ob2xkZXJcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdDxkaXYgY3NzLmJpbmQ9XFxcImNhcmRJbWFnZVxcXCJcXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRpZi5iaW5kPVxcXCJtb2RlbC5pY29uXFxcIlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdHJlZj1cXFwiZXhwYW5kYWJsZUNhcmRJZGVudGlmaWVyXFxcIlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdGlkPVxcXCIke2V4cGFuZGFibGVDYXJkQW5jaG9yfVxcXCJcXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRjbGFzcz1cXFwiZXhwYW5kYWJsZS1jYXJkX19pY29uXFxcIj48L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHJcXG5cXHRcXHRcXHRcXHQ8aDMgY2xhc3M9XFxcImV4cGFuZGFibGUtY2FyZF9faGVhZGluZyBkcy10aXRsZS1tZWRpdW1cXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdCR7bW9kZWwuaGVhZGluZ31cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8ZGl2IHJvbGU9XFxcImRvYy1zdWJ0aXRsZVxcXCIgY2xhc3M9XFxcImV4cGFuZGFibGUtY2FyZF9fc3ViaGVhZGluZyBkcy1zdWJ0aXRsZVxcXCIgaWYuYmluZD1cXFwibW9kZWwuc3ViaGVhZC5sZW5ndGhcXFwiIGlubmVyaHRtbC5iaW5kPVxcXCJtb2RlbC5zdWJoZWFkXFxcIj48L2g0PlxcclxcblxcdFxcdFxcdFxcdDwvaDM+XFxyXFxuXFxyXFxuXFx0XFx0XFx0PC9kaXY+XFxyXFxuXFxyXFxuXFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiZXhwYW5kYWJsZS1jYXJkX19kcmF3ZXJcXFwiIGNzcy5iaW5kPVxcXCJiYWNrZ3JvdW5kQ29sb3JcXFwiPlxcclxcblxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImV4cGFuZGFibGUtY2FyZF9fZHJhd2VyLXdyYXBwZXJcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdDxkaXYgcmVwZWF0LmZvcj1cXFwiY29tcG9uZW50IG9mIG1vZGVsLm5lc3RlZENvbXBvbmVudHNcXFwiIGNsYXNzPVxcXCJleHBhbmRhYmxlLWNhcmRfX2l0ZW1cXFwiPlxcclxcblxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxjb21wb3NlIGNvbnRhaW5lcmxlc3NcXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRtb2RlbC5iaW5kPVxcXCJjb21wb25lbnRcXFwiXFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0dmlldy1tb2RlbD1cXFwiLi4vJHtjb21wb25lbnQuY29tcG9uZW50TmFtZX0vJHtjb21wb25lbnQuY29tcG9uZW50TmFtZX1cXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDwvY29tcG9zZT5cXHJcXG5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHQ8L2Rpdj5cXHJcXG5cXHQ8L2Rpdj5cXHJcXG48L3RlbXBsYXRlPlxcclxcblwiOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///components/expandable-card/expandable-card.html\n')},"components/experiences-card/experiences-card":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar ExperiencesCard = /** @class */ (function () {\r\n    function ExperiencesCard() {\r\n    }\r\n    ExperiencesCard.prototype.activate = function (model) {\r\n        this.model = model;\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Object)\r\n    ], ExperiencesCard.prototype, "model", void 0);\r\n    return ExperiencesCard;\r\n}());\r\nexports.ExperiencesCard = ExperiencesCard;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9leHBlcmllbmNlcy1jYXJkL2V4cGVyaWVuY2VzLWNhcmQudHM/MzFlMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxRQUFRO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RCwwQkFBMEIsbUJBQU8sQ0FBQyxtQkFBbUI7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCIsImZpbGUiOiJjb21wb25lbnRzL2V4cGVyaWVuY2VzLWNhcmQvZXhwZXJpZW5jZXMtY2FyZC5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG52YXIgX19kZWNvcmF0ZSA9ICh0aGlzICYmIHRoaXMuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59O1xyXG52YXIgX19tZXRhZGF0YSA9ICh0aGlzICYmIHRoaXMuX19tZXRhZGF0YSkgfHwgZnVuY3Rpb24gKGssIHYpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShrLCB2KTtcclxufTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgYXVyZWxpYV9mcmFtZXdvcmtfMSA9IHJlcXVpcmUoXCJhdXJlbGlhLWZyYW1ld29ya1wiKTtcclxudmFyIEV4cGVyaWVuY2VzQ2FyZCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEV4cGVyaWVuY2VzQ2FyZCgpIHtcclxuICAgIH1cclxuICAgIEV4cGVyaWVuY2VzQ2FyZC5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbiAobW9kZWwpIHtcclxuICAgICAgICB0aGlzLm1vZGVsID0gbW9kZWw7XHJcbiAgICB9O1xyXG4gICAgX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5iaW5kYWJsZSxcclxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxyXG4gICAgXSwgRXhwZXJpZW5jZXNDYXJkLnByb3RvdHlwZSwgXCJtb2RlbFwiLCB2b2lkIDApO1xyXG4gICAgcmV0dXJuIEV4cGVyaWVuY2VzQ2FyZDtcclxufSgpKTtcclxuZXhwb3J0cy5FeHBlcmllbmNlc0NhcmQgPSBFeHBlcmllbmNlc0NhcmQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///components/experiences-card/experiences-card\n')},"components/experiences-card/experiences-card-content":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar ExperiencesCardContent = /** @class */ (function () {\r\n    function ExperiencesCardContent() {\r\n    }\r\n    ExperiencesCardContent.prototype.activate = function (model) {\r\n        this.model = model;\r\n    };\r\n    ExperiencesCardContent.prototype.attached = function () {\r\n        this.backgroundImage = "background-image: url(" + this.model\r\n            .imageUrl + "&height=275);";\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Object)\r\n    ], ExperiencesCardContent.prototype, "model", void 0);\r\n    ExperiencesCardContent = __decorate([\r\n        aurelia_framework_1.containerless()\r\n    ], ExperiencesCardContent);\r\n    return ExperiencesCardContent;\r\n}());\r\nexports.ExperiencesCardContent = ExperiencesCardContent;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9leHBlcmllbmNlcy1jYXJkL2V4cGVyaWVuY2VzLWNhcmQtY29udGVudC50cz9mMmZkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLFFBQVE7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxjQUFjO0FBQzVELDBCQUEwQixtQkFBTyxDQUFDLG1CQUFtQjtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCIsImZpbGUiOiJjb21wb25lbnRzL2V4cGVyaWVuY2VzLWNhcmQvZXhwZXJpZW5jZXMtY2FyZC1jb250ZW50LmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2RlY29yYXRlID0gKHRoaXMgJiYgdGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn07XHJcbnZhciBfX21ldGFkYXRhID0gKHRoaXMgJiYgdGhpcy5fX21ldGFkYXRhKSB8fCBmdW5jdGlvbiAoaywgdikge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xyXG59O1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBhdXJlbGlhX2ZyYW1ld29ya18xID0gcmVxdWlyZShcImF1cmVsaWEtZnJhbWV3b3JrXCIpO1xyXG52YXIgRXhwZXJpZW5jZXNDYXJkQ29udGVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEV4cGVyaWVuY2VzQ2FyZENvbnRlbnQoKSB7XHJcbiAgICB9XHJcbiAgICBFeHBlcmllbmNlc0NhcmRDb250ZW50LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uIChtb2RlbCkge1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSBtb2RlbDtcclxuICAgIH07XHJcbiAgICBFeHBlcmllbmNlc0NhcmRDb250ZW50LnByb3RvdHlwZS5hdHRhY2hlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmJhY2tncm91bmRJbWFnZSA9IFwiYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiICsgdGhpcy5tb2RlbFxyXG4gICAgICAgICAgICAuaW1hZ2VVcmwgKyBcIiZoZWlnaHQ9Mjc1KTtcIjtcclxuICAgIH07XHJcbiAgICBfX2RlY29yYXRlKFtcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLmJpbmRhYmxlLFxyXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXHJcbiAgICBdLCBFeHBlcmllbmNlc0NhcmRDb250ZW50LnByb3RvdHlwZSwgXCJtb2RlbFwiLCB2b2lkIDApO1xyXG4gICAgRXhwZXJpZW5jZXNDYXJkQ29udGVudCA9IF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuY29udGFpbmVybGVzcygpXHJcbiAgICBdLCBFeHBlcmllbmNlc0NhcmRDb250ZW50KTtcclxuICAgIHJldHVybiBFeHBlcmllbmNlc0NhcmRDb250ZW50O1xyXG59KCkpO1xyXG5leHBvcnRzLkV4cGVyaWVuY2VzQ2FyZENvbnRlbnQgPSBFeHBlcmllbmNlc0NhcmRDb250ZW50O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///components/experiences-card/experiences-card-content\n')},"components/experiences-card/experiences-card-content.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<div class=\\"experiences-card__image\\" css.bind=\\"backgroundImage\\"><\/div>\\r\\n\\t<div class=\\"experiences-card__content\\">\\r\\n\\t\\t<div class=\\"experiences-card-box\\">\\r\\n\\t\\t\\t<div class=\\"experiences-card__title ds-title-small truncate-text\\">\\r\\n\\t\\t\\t\\t${model.title}\\r\\n\\t\\t\\t\\t<span if.bind=\\"model.isNew\\" class=\\"icon-new\\"><\/span>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<div class=\\"experiences-card__length\\">${model.lengthOfItinerary}<\/div>\\r\\n\\t\\t<\/div>\\r\\n\\t\\t<div class=\\"experiences-card-box\\">\\r\\n\\t\\t\\t<div class=\\"experiences-card__sub-title truncate-text\\">${model.subTitle}<\/div>\\r\\n\\t\\t\\t<div class=\\"experiences-card__date\\">${model.startDate}<\/div>\\r\\n\\t\\t<\/div>\\r\\n\\t<\/div>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9leHBlcmllbmNlcy1jYXJkL2V4cGVyaWVuY2VzLWNhcmQtY29udGVudC5odG1sPzU2M2YiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbVNBQW1TLFlBQVksd0lBQXdJLHdCQUF3QixxSUFBcUksZUFBZSx3REFBd0QsZ0JBQWdCIiwiZmlsZSI6ImNvbXBvbmVudHMvZXhwZXJpZW5jZXMtY2FyZC9leHBlcmllbmNlcy1jYXJkLWNvbnRlbnQuaHRtbC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gXCI8dGVtcGxhdGU+XFxyXFxuXFx0PGRpdiBjbGFzcz1cXFwiZXhwZXJpZW5jZXMtY2FyZF9faW1hZ2VcXFwiIGNzcy5iaW5kPVxcXCJiYWNrZ3JvdW5kSW1hZ2VcXFwiPjwvZGl2PlxcclxcblxcdDxkaXYgY2xhc3M9XFxcImV4cGVyaWVuY2VzLWNhcmRfX2NvbnRlbnRcXFwiPlxcclxcblxcdFxcdDxkaXYgY2xhc3M9XFxcImV4cGVyaWVuY2VzLWNhcmQtYm94XFxcIj5cXHJcXG5cXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJleHBlcmllbmNlcy1jYXJkX190aXRsZSBkcy10aXRsZS1zbWFsbCB0cnVuY2F0ZS10ZXh0XFxcIj5cXHJcXG5cXHRcXHRcXHRcXHQke21vZGVsLnRpdGxlfVxcclxcblxcdFxcdFxcdFxcdDxzcGFuIGlmLmJpbmQ9XFxcIm1vZGVsLmlzTmV3XFxcIiBjbGFzcz1cXFwiaWNvbi1uZXdcXFwiPjwvc3Bhbj5cXHJcXG5cXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJleHBlcmllbmNlcy1jYXJkX19sZW5ndGhcXFwiPiR7bW9kZWwubGVuZ3RoT2ZJdGluZXJhcnl9PC9kaXY+XFxyXFxuXFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0PGRpdiBjbGFzcz1cXFwiZXhwZXJpZW5jZXMtY2FyZC1ib3hcXFwiPlxcclxcblxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImV4cGVyaWVuY2VzLWNhcmRfX3N1Yi10aXRsZSB0cnVuY2F0ZS10ZXh0XFxcIj4ke21vZGVsLnN1YlRpdGxlfTwvZGl2PlxcclxcblxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImV4cGVyaWVuY2VzLWNhcmRfX2RhdGVcXFwiPiR7bW9kZWwuc3RhcnREYXRlfTwvZGl2PlxcclxcblxcdFxcdDwvZGl2PlxcclxcblxcdDwvZGl2PlxcclxcbjwvdGVtcGxhdGU+XFxyXFxuXCI7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/experiences-card/experiences-card-content.html\n')},"components/experiences-card/experiences-card.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<a\\r\\n\\t\\tif.bind=\\"model.redirectionUrl\\"\\r\\n\\t\\tclass=\\"experiences-card experiences-card--has-url\\"\\r\\n\\t\\thref=\\"${model.redirectionUrl}\\"\\r\\n\\t\\ttarget=\\"${model.redirectToNewWindow ? \'_blank\' : \'_self\'}\\"\\r\\n\\t>\\r\\n\\t\\t<experiences-card-content model.bind=\\"model\\"><\/experiences-card-content>\\r\\n\\t<\/a>\\r\\n\\t<div class=\\"experiences-card\\" else>\\r\\n\\t\\t<experiences-card-content model.bind=\\"model\\"><\/experiences-card-content>\\r\\n\\t<\/div>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9leHBlcmllbmNlcy1jYXJkL2V4cGVyaWVuY2VzLWNhcmQuaHRtbD9hMmUxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlKQUF5SixxQkFBcUIscUJBQXFCLCtDQUErQyIsImZpbGUiOiJjb21wb25lbnRzL2V4cGVyaWVuY2VzLWNhcmQvZXhwZXJpZW5jZXMtY2FyZC5odG1sLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBcIjx0ZW1wbGF0ZT5cXHJcXG5cXHQ8YVxcclxcblxcdFxcdGlmLmJpbmQ9XFxcIm1vZGVsLnJlZGlyZWN0aW9uVXJsXFxcIlxcclxcblxcdFxcdGNsYXNzPVxcXCJleHBlcmllbmNlcy1jYXJkIGV4cGVyaWVuY2VzLWNhcmQtLWhhcy11cmxcXFwiXFxyXFxuXFx0XFx0aHJlZj1cXFwiJHttb2RlbC5yZWRpcmVjdGlvblVybH1cXFwiXFxyXFxuXFx0XFx0dGFyZ2V0PVxcXCIke21vZGVsLnJlZGlyZWN0VG9OZXdXaW5kb3cgPyAnX2JsYW5rJyA6ICdfc2VsZid9XFxcIlxcclxcblxcdD5cXHJcXG5cXHRcXHQ8ZXhwZXJpZW5jZXMtY2FyZC1jb250ZW50IG1vZGVsLmJpbmQ9XFxcIm1vZGVsXFxcIj48L2V4cGVyaWVuY2VzLWNhcmQtY29udGVudD5cXHJcXG5cXHQ8L2E+XFxyXFxuXFx0PGRpdiBjbGFzcz1cXFwiZXhwZXJpZW5jZXMtY2FyZFxcXCIgZWxzZT5cXHJcXG5cXHRcXHQ8ZXhwZXJpZW5jZXMtY2FyZC1jb250ZW50IG1vZGVsLmJpbmQ9XFxcIm1vZGVsXFxcIj48L2V4cGVyaWVuY2VzLWNhcmQtY29udGVudD5cXHJcXG5cXHQ8L2Rpdj5cXHJcXG48L3RlbXBsYXRlPlxcclxcblwiOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///components/experiences-card/experiences-card.html\n')},"components/faq/faq":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar FAQ = /** @class */ (function () {\r\n    function FAQ() {\r\n    }\r\n    FAQ.prototype.activate = function (model) {\r\n        this.model = model;\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Object)\r\n    ], FAQ.prototype, "model", void 0);\r\n    return FAQ;\r\n}());\r\nexports.FAQ = FAQ;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9mYXEvZmFxLnRzPzg0NzEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsUUFBUTtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLGNBQWM7QUFDNUQsMEJBQTBCLG1CQUFPLENBQUMsbUJBQW1CO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QiLCJmaWxlIjoiY29tcG9uZW50cy9mYXEvZmFxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2RlY29yYXRlID0gKHRoaXMgJiYgdGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn07XHJcbnZhciBfX21ldGFkYXRhID0gKHRoaXMgJiYgdGhpcy5fX21ldGFkYXRhKSB8fCBmdW5jdGlvbiAoaywgdikge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xyXG59O1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBhdXJlbGlhX2ZyYW1ld29ya18xID0gcmVxdWlyZShcImF1cmVsaWEtZnJhbWV3b3JrXCIpO1xyXG52YXIgRkFRID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gRkFRKCkge1xyXG4gICAgfVxyXG4gICAgRkFRLnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uIChtb2RlbCkge1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSBtb2RlbDtcclxuICAgIH07XHJcbiAgICBfX2RlY29yYXRlKFtcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLmJpbmRhYmxlLFxyXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXHJcbiAgICBdLCBGQVEucHJvdG90eXBlLCBcIm1vZGVsXCIsIHZvaWQgMCk7XHJcbiAgICByZXR1cm4gRkFRO1xyXG59KCkpO1xyXG5leHBvcnRzLkZBUSA9IEZBUTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/faq/faq\n')},"components/faq/faq.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<div class=\\"faq col-md-offset-1 col-md-10\\">\\r\\n\\t\\t<h4 class=\\"faq__question\\" innerhtml.bind=\\"model.question\\"><\/h4>\\r\\n\\t\\t<div class=\\"faq__answer\\" innerhtml.bind=\\"model.answer\\"><\/div>\\r\\n\\t<\/div>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9mYXEvZmFxLmh0bWw/ZmRlNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSIsImZpbGUiOiJjb21wb25lbnRzL2ZhcS9mYXEuaHRtbC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gXCI8dGVtcGxhdGU+XFxyXFxuXFx0PGRpdiBjbGFzcz1cXFwiZmFxIGNvbC1tZC1vZmZzZXQtMSBjb2wtbWQtMTBcXFwiPlxcclxcblxcdFxcdDxoNCBjbGFzcz1cXFwiZmFxX19xdWVzdGlvblxcXCIgaW5uZXJodG1sLmJpbmQ9XFxcIm1vZGVsLnF1ZXN0aW9uXFxcIj48L2g0PlxcclxcblxcdFxcdDxkaXYgY2xhc3M9XFxcImZhcV9fYW5zd2VyXFxcIiBpbm5lcmh0bWwuYmluZD1cXFwibW9kZWwuYW5zd2VyXFxcIj48L2Rpdj5cXHJcXG5cXHQ8L2Rpdj5cXHJcXG48L3RlbXBsYXRlPlxcclxcblwiOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///components/faq/faq.html\n')},"components/feature-list/feature-list":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar FeatureList = /** @class */ (function () {\r\n    function FeatureList() {\r\n        this.icon = \'\';\r\n    }\r\n    FeatureList.prototype.activate = function (model) {\r\n        this.model = model;\r\n    };\r\n    FeatureList.prototype.attached = function () {\r\n        if (this.model.icon) {\r\n            this.icon = "background-image: url(\\"" + this.model.icon.fullPath + "\\");";\r\n        }\r\n    };\r\n    FeatureList.prototype.calculateDelay = function (index) {\r\n        var isOddColumn = (index + 2) % 2 === 0;\r\n        if (isOddColumn) {\r\n            return index + this.numberOfItems / 2 * 300;\r\n        }\r\n        else {\r\n            return index * 300;\r\n        }\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Object)\r\n    ], FeatureList.prototype, "model", void 0);\r\n    return FeatureList;\r\n}());\r\nexports.FeatureList = FeatureList;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9mZWF0dXJlLWxpc3QvZmVhdHVyZS1saXN0LnRzP2I4YmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsUUFBUTtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLGNBQWM7QUFDNUQsMEJBQTBCLG1CQUFPLENBQUMsbUJBQW1CO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFGQUFxRjtBQUNyRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCIsImZpbGUiOiJjb21wb25lbnRzL2ZlYXR1cmUtbGlzdC9mZWF0dXJlLWxpc3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxudmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufTtcclxudmFyIF9fbWV0YWRhdGEgPSAodGhpcyAmJiB0aGlzLl9fbWV0YWRhdGEpIHx8IGZ1bmN0aW9uIChrLCB2KSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEoaywgdik7XHJcbn07XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIGF1cmVsaWFfZnJhbWV3b3JrXzEgPSByZXF1aXJlKFwiYXVyZWxpYS1mcmFtZXdvcmtcIik7XHJcbnZhciBGZWF0dXJlTGlzdCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEZlYXR1cmVMaXN0KCkge1xyXG4gICAgICAgIHRoaXMuaWNvbiA9ICcnO1xyXG4gICAgfVxyXG4gICAgRmVhdHVyZUxpc3QucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24gKG1vZGVsKSB7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG1vZGVsO1xyXG4gICAgfTtcclxuICAgIEZlYXR1cmVMaXN0LnByb3RvdHlwZS5hdHRhY2hlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5tb2RlbC5pY29uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaWNvbiA9IFwiYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJcIiArIHRoaXMubW9kZWwuaWNvbi5mdWxsUGF0aCArIFwiXFxcIik7XCI7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIEZlYXR1cmVMaXN0LnByb3RvdHlwZS5jYWxjdWxhdGVEZWxheSA9IGZ1bmN0aW9uIChpbmRleCkge1xyXG4gICAgICAgIHZhciBpc09kZENvbHVtbiA9IChpbmRleCArIDIpICUgMiA9PT0gMDtcclxuICAgICAgICBpZiAoaXNPZGRDb2x1bW4pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGluZGV4ICsgdGhpcy5udW1iZXJPZkl0ZW1zIC8gMiAqIDMwMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpbmRleCAqIDMwMDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5iaW5kYWJsZSxcclxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxyXG4gICAgXSwgRmVhdHVyZUxpc3QucHJvdG90eXBlLCBcIm1vZGVsXCIsIHZvaWQgMCk7XHJcbiAgICByZXR1cm4gRmVhdHVyZUxpc3Q7XHJcbn0oKSk7XHJcbmV4cG9ydHMuRmVhdHVyZUxpc3QgPSBGZWF0dXJlTGlzdDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/feature-list/feature-list\n')},"components/feature-list/feature-list.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<div class=\\"feature-list\\">\\r\\n\\t\\t<div css.bind=\\"icon\\" class=\\"feature-list__wrapper ds-p-base\\">\\r\\n\\t\\t\\t<!--data-aos=\\"fade-up\\"\\r\\n\\t\\t\\tdata-aos-once=\\"true\\"\\r\\n\\t\\t\\tdata-aos-delay=\\"calculateDelay($index)\\"-->\\r\\n\\t\\t\\t${model.listItemText}\\r\\n\\t\\t<\/div>\\r\\n\\t<\/div>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9mZWF0dXJlLWxpc3QvZmVhdHVyZS1saXN0Lmh0bWw/NzIyMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyUUFBMlEsbUJBQW1CIiwiZmlsZSI6ImNvbXBvbmVudHMvZmVhdHVyZS1saXN0L2ZlYXR1cmUtbGlzdC5odG1sLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBcIjx0ZW1wbGF0ZT5cXHJcXG5cXHQ8ZGl2IGNsYXNzPVxcXCJmZWF0dXJlLWxpc3RcXFwiPlxcclxcblxcdFxcdDxkaXYgY3NzLmJpbmQ9XFxcImljb25cXFwiIGNsYXNzPVxcXCJmZWF0dXJlLWxpc3RfX3dyYXBwZXIgZHMtcC1iYXNlXFxcIj5cXHJcXG5cXHRcXHRcXHQ8IS0tZGF0YS1hb3M9XFxcImZhZGUtdXBcXFwiXFxyXFxuXFx0XFx0XFx0ZGF0YS1hb3Mtb25jZT1cXFwidHJ1ZVxcXCJcXHJcXG5cXHRcXHRcXHRkYXRhLWFvcy1kZWxheT1cXFwiY2FsY3VsYXRlRGVsYXkoJGluZGV4KVxcXCItLT5cXHJcXG5cXHRcXHRcXHQke21vZGVsLmxpc3RJdGVtVGV4dH1cXHJcXG5cXHRcXHQ8L2Rpdj5cXHJcXG5cXHQ8L2Rpdj5cXHJcXG48L3RlbXBsYXRlPlxcclxcblwiOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///components/feature-list/feature-list.html\n')},"components/flexible-card/flexible-card":function(module,exports,__webpack_require__){"use strict";eval("\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__(\"aurelia-framework\");\r\nvar ButtonVariants;\r\n(function (ButtonVariants) {\r\n    ButtonVariants[\"Primary\"] = \"primary\";\r\n    ButtonVariants[\"Secondary\"] = \"secondary\";\r\n    ButtonVariants[\"Ghost\"] = \"ghost\";\r\n    ButtonVariants[\"ActionText\"] = \"actionText\";\r\n    ButtonVariants[\"Success\"] = \"success\";\r\n    ButtonVariants[\"Error\"] = \"error\";\r\n})(ButtonVariants = exports.ButtonVariants || (exports.ButtonVariants = {}));\r\nvar headerTypeMap = {\r\n    Large: 'headerLg',\r\n    Small: 'headerSm',\r\n};\r\nvar subHeaderTypeMap = {\r\n    'Medium': 'subHeaderMd',\r\n    'Serif': 'subHeaderSerif',\r\n    'Serif - Italic': 'subHeaderItalic',\r\n};\r\nvar convertAspectRatio = function (ratio) {\r\n    var values = ratio.split('/');\r\n    return Number(values[0]) / Number(values[1]);\r\n};\r\nexports.ResponsivePageViewModel = window['PageViewModel'];\r\nvar FlexibleCard = /** @class */ (function () {\r\n    function FlexibleCard() {\r\n        this.headerStyle = '';\r\n        this.subHeaderStyle = '';\r\n        this.isContainerlessType = false;\r\n        this.isSideBySide = false;\r\n        this.isTransparent = false;\r\n        this.alignCenter = false;\r\n        this.alignLeft = false;\r\n        this.alignGhostButton = '';\r\n        this.alignActionTextButton = '';\r\n        this.alignButtonsNoPadding = '';\r\n        this.cardClasses = [];\r\n        this.alignmentClasses = ['bodyWrapper'];\r\n        this.modifier = '';\r\n        this.alignmentModifier = '';\r\n        this.buttonModifier = '';\r\n        this.cardInlineStyles = '';\r\n        this.ratioStyles = '';\r\n        this.svgWidth = '';\r\n        this.imageServer = exports.ResponsivePageViewModel.configuration.imageServer;\r\n        this.svgServer = this.imageServer.replace('ImageGen.ashx?image=', '');\r\n    }\r\n    FlexibleCard.prototype.activate = function (model) {\r\n        this.model = model;\r\n        if (this.hasVideo()) {\r\n            this.videoPlayerModel = {\r\n                autoplay: false,\r\n                playerType: 'inline',\r\n                vidyardEmbedCode: this.model.videoURL,\r\n            };\r\n        }\r\n        this.setInlineStyles();\r\n        this.headerStyle = headerTypeMap[this.model.headerType];\r\n        this.subHeaderStyle = subHeaderTypeMap[this.model.subHeaderType];\r\n        this.isContainerlessType = this.model.cardStyle === 'Containerless' || Number(this.model.backgroundOpacity) < 100;\r\n        this.isSideBySide = this.model.layout === 'Side by Side Media Left' || this.model.layout === 'Side by Side Media Right';\r\n        this.isTransparent = Number(this.model.backgroundOpacity) === 0;\r\n        this.alignLeft = this.model.contentAlignment !== 'Center';\r\n        this.alignGhostButton = this.alignLeft && this.model.callToActionStyle === 'ghost' ? 'buttonLeftGhost' : '';\r\n        this.alignActionTextButton = this.alignLeft && this.model.callToActionStyle === 'actionText' ? 'buttonLeftActionText' : '';\r\n        this.alignButtonsNoPadding =\r\n            this.alignLeft &&\r\n                this.isTransparent &&\r\n                (this.model.callToActionStyle === 'ghost' || this.model.callToActionStyle === 'actionText') ?\r\n                'noButtonPadding' : '';\r\n        if (this.isContainerlessType) {\r\n            this.cardClasses.push('containerless');\r\n        }\r\n        if (!this.model.callToAction.url) {\r\n            this.cardClasses.push('removeShadowAnimation');\r\n        }\r\n        if (this.isTransparent && this.model.layout === 'Side by Side Media Left') {\r\n            this.cardClasses.push('transparentMediaLeft');\r\n        }\r\n        if (this.isTransparent && this.model.layout === 'Side by Side Media Right') {\r\n            this.cardClasses.push('transparentMediaRight');\r\n        }\r\n        if (this.isTransparent && this.model.layout === 'Stacked') {\r\n            this.cardClasses.push('transparentStacked');\r\n        }\r\n        if (this.model.layout === 'Side by Side Media Right') {\r\n            this.cardClasses.push('reverse');\r\n        }\r\n        if (this.isSideBySide) {\r\n            this.cardClasses.push(this.model.imageRatio === '1/1' ? 'half' : 'thirds');\r\n        }\r\n        this.modifier = this.cardClasses.join(' ');\r\n        if (this.alignGhostButton) {\r\n            this.alignmentClasses.push('buttonLeftGhost');\r\n        }\r\n        if (this.alignActionTextButton) {\r\n            this.alignmentClasses.push('buttonLeftActionText');\r\n        }\r\n        if (this.alignButtonsNoPadding) {\r\n            this.alignmentClasses.push('noButtonPadding');\r\n        }\r\n        this.alignmentModifier = this.alignmentClasses.join(' ');\r\n        if (this.model.callToActionStyle) {\r\n            this.buttonModifier = this.getCallToActionStyles(this.model.callToActionStyle);\r\n        }\r\n    };\r\n    FlexibleCard.prototype.getCallToActionStyles = function (callToActionStyle) {\r\n        switch (callToActionStyle) {\r\n            case 'secondary':\r\n                return 'ds-btn-secondary';\r\n            case 'ghost':\r\n                return 'btn-custom-ghost';\r\n            case 'actionText':\r\n                return 'ds-link-primary';\r\n            default:\r\n                return 'ds-btn-primary';\r\n        }\r\n    };\r\n    FlexibleCard.prototype.hasVideo = function () {\r\n        return !!this.model.videoURL;\r\n    };\r\n    FlexibleCard.prototype.setInlineStyles = function () {\r\n        if (this.model.backgroundOpacity) {\r\n            this.cardInlineStyles += \"\\n\\t\\t\\t\\t--card-background-opacity: calc( \" + this.model.backgroundOpacity + \" / 100 );\\n\\t\\t\\t\";\r\n        }\r\n        if (this.model.sVG) {\r\n            this.cardInlineStyles += \"\\n\\t\\t\\t\\t--svg-max-width: \" + this.model.sVGMaxWidth + \";\\n\\t\\t\\t\";\r\n        }\r\n        if (this.model.imageRatio) {\r\n            this.ratioStyles = \"\\n\\t\\t\\t\\t--ratio: \" + convertAspectRatio(this.model.imageRatio) + \";\\n\\t\\t\\t\";\r\n        }\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata(\"design:type\", Object)\r\n    ], FlexibleCard.prototype, \"model\", void 0);\r\n    return FlexibleCard;\r\n}());\r\nexports.FlexibleCard = FlexibleCard;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9mbGV4aWJsZS1jYXJkL2ZsZXhpYmxlLWNhcmQudHM/OGU5YyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxRQUFRO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RCwwQkFBMEIsbUJBQU8sQ0FBQyxtQkFBbUI7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMseUVBQXlFO0FBQzFFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4SEFBOEg7QUFDOUg7QUFDQTtBQUNBLGdHQUFnRztBQUNoRztBQUNBO0FBQ0EscUdBQXFHO0FBQ3JHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEIiwiZmlsZSI6ImNvbXBvbmVudHMvZmxleGlibGUtY2FyZC9mbGV4aWJsZS1jYXJkLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2RlY29yYXRlID0gKHRoaXMgJiYgdGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn07XHJcbnZhciBfX21ldGFkYXRhID0gKHRoaXMgJiYgdGhpcy5fX21ldGFkYXRhKSB8fCBmdW5jdGlvbiAoaywgdikge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xyXG59O1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBhdXJlbGlhX2ZyYW1ld29ya18xID0gcmVxdWlyZShcImF1cmVsaWEtZnJhbWV3b3JrXCIpO1xyXG52YXIgQnV0dG9uVmFyaWFudHM7XHJcbihmdW5jdGlvbiAoQnV0dG9uVmFyaWFudHMpIHtcclxuICAgIEJ1dHRvblZhcmlhbnRzW1wiUHJpbWFyeVwiXSA9IFwicHJpbWFyeVwiO1xyXG4gICAgQnV0dG9uVmFyaWFudHNbXCJTZWNvbmRhcnlcIl0gPSBcInNlY29uZGFyeVwiO1xyXG4gICAgQnV0dG9uVmFyaWFudHNbXCJHaG9zdFwiXSA9IFwiZ2hvc3RcIjtcclxuICAgIEJ1dHRvblZhcmlhbnRzW1wiQWN0aW9uVGV4dFwiXSA9IFwiYWN0aW9uVGV4dFwiO1xyXG4gICAgQnV0dG9uVmFyaWFudHNbXCJTdWNjZXNzXCJdID0gXCJzdWNjZXNzXCI7XHJcbiAgICBCdXR0b25WYXJpYW50c1tcIkVycm9yXCJdID0gXCJlcnJvclwiO1xyXG59KShCdXR0b25WYXJpYW50cyA9IGV4cG9ydHMuQnV0dG9uVmFyaWFudHMgfHwgKGV4cG9ydHMuQnV0dG9uVmFyaWFudHMgPSB7fSkpO1xyXG52YXIgaGVhZGVyVHlwZU1hcCA9IHtcclxuICAgIExhcmdlOiAnaGVhZGVyTGcnLFxyXG4gICAgU21hbGw6ICdoZWFkZXJTbScsXHJcbn07XHJcbnZhciBzdWJIZWFkZXJUeXBlTWFwID0ge1xyXG4gICAgJ01lZGl1bSc6ICdzdWJIZWFkZXJNZCcsXHJcbiAgICAnU2VyaWYnOiAnc3ViSGVhZGVyU2VyaWYnLFxyXG4gICAgJ1NlcmlmIC0gSXRhbGljJzogJ3N1YkhlYWRlckl0YWxpYycsXHJcbn07XHJcbnZhciBjb252ZXJ0QXNwZWN0UmF0aW8gPSBmdW5jdGlvbiAocmF0aW8pIHtcclxuICAgIHZhciB2YWx1ZXMgPSByYXRpby5zcGxpdCgnLycpO1xyXG4gICAgcmV0dXJuIE51bWJlcih2YWx1ZXNbMF0pIC8gTnVtYmVyKHZhbHVlc1sxXSk7XHJcbn07XHJcbmV4cG9ydHMuUmVzcG9uc2l2ZVBhZ2VWaWV3TW9kZWwgPSB3aW5kb3dbJ1BhZ2VWaWV3TW9kZWwnXTtcclxudmFyIEZsZXhpYmxlQ2FyZCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEZsZXhpYmxlQ2FyZCgpIHtcclxuICAgICAgICB0aGlzLmhlYWRlclN0eWxlID0gJyc7XHJcbiAgICAgICAgdGhpcy5zdWJIZWFkZXJTdHlsZSA9ICcnO1xyXG4gICAgICAgIHRoaXMuaXNDb250YWluZXJsZXNzVHlwZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNTaWRlQnlTaWRlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc1RyYW5zcGFyZW50ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5hbGlnbkNlbnRlciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuYWxpZ25MZWZ0ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5hbGlnbkdob3N0QnV0dG9uID0gJyc7XHJcbiAgICAgICAgdGhpcy5hbGlnbkFjdGlvblRleHRCdXR0b24gPSAnJztcclxuICAgICAgICB0aGlzLmFsaWduQnV0dG9uc05vUGFkZGluZyA9ICcnO1xyXG4gICAgICAgIHRoaXMuY2FyZENsYXNzZXMgPSBbXTtcclxuICAgICAgICB0aGlzLmFsaWdubWVudENsYXNzZXMgPSBbJ2JvZHlXcmFwcGVyJ107XHJcbiAgICAgICAgdGhpcy5tb2RpZmllciA9ICcnO1xyXG4gICAgICAgIHRoaXMuYWxpZ25tZW50TW9kaWZpZXIgPSAnJztcclxuICAgICAgICB0aGlzLmJ1dHRvbk1vZGlmaWVyID0gJyc7XHJcbiAgICAgICAgdGhpcy5jYXJkSW5saW5lU3R5bGVzID0gJyc7XHJcbiAgICAgICAgdGhpcy5yYXRpb1N0eWxlcyA9ICcnO1xyXG4gICAgICAgIHRoaXMuc3ZnV2lkdGggPSAnJztcclxuICAgICAgICB0aGlzLmltYWdlU2VydmVyID0gZXhwb3J0cy5SZXNwb25zaXZlUGFnZVZpZXdNb2RlbC5jb25maWd1cmF0aW9uLmltYWdlU2VydmVyO1xyXG4gICAgICAgIHRoaXMuc3ZnU2VydmVyID0gdGhpcy5pbWFnZVNlcnZlci5yZXBsYWNlKCdJbWFnZUdlbi5hc2h4P2ltYWdlPScsICcnKTtcclxuICAgIH1cclxuICAgIEZsZXhpYmxlQ2FyZC5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbiAobW9kZWwpIHtcclxuICAgICAgICB0aGlzLm1vZGVsID0gbW9kZWw7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzVmlkZW8oKSkge1xyXG4gICAgICAgICAgICB0aGlzLnZpZGVvUGxheWVyTW9kZWwgPSB7XHJcbiAgICAgICAgICAgICAgICBhdXRvcGxheTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBwbGF5ZXJUeXBlOiAnaW5saW5lJyxcclxuICAgICAgICAgICAgICAgIHZpZHlhcmRFbWJlZENvZGU6IHRoaXMubW9kZWwudmlkZW9VUkwsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0SW5saW5lU3R5bGVzKCk7XHJcbiAgICAgICAgdGhpcy5oZWFkZXJTdHlsZSA9IGhlYWRlclR5cGVNYXBbdGhpcy5tb2RlbC5oZWFkZXJUeXBlXTtcclxuICAgICAgICB0aGlzLnN1YkhlYWRlclN0eWxlID0gc3ViSGVhZGVyVHlwZU1hcFt0aGlzLm1vZGVsLnN1YkhlYWRlclR5cGVdO1xyXG4gICAgICAgIHRoaXMuaXNDb250YWluZXJsZXNzVHlwZSA9IHRoaXMubW9kZWwuY2FyZFN0eWxlID09PSAnQ29udGFpbmVybGVzcycgfHwgTnVtYmVyKHRoaXMubW9kZWwuYmFja2dyb3VuZE9wYWNpdHkpIDwgMTAwO1xyXG4gICAgICAgIHRoaXMuaXNTaWRlQnlTaWRlID0gdGhpcy5tb2RlbC5sYXlvdXQgPT09ICdTaWRlIGJ5IFNpZGUgTWVkaWEgTGVmdCcgfHwgdGhpcy5tb2RlbC5sYXlvdXQgPT09ICdTaWRlIGJ5IFNpZGUgTWVkaWEgUmlnaHQnO1xyXG4gICAgICAgIHRoaXMuaXNUcmFuc3BhcmVudCA9IE51bWJlcih0aGlzLm1vZGVsLmJhY2tncm91bmRPcGFjaXR5KSA9PT0gMDtcclxuICAgICAgICB0aGlzLmFsaWduTGVmdCA9IHRoaXMubW9kZWwuY29udGVudEFsaWdubWVudCAhPT0gJ0NlbnRlcic7XHJcbiAgICAgICAgdGhpcy5hbGlnbkdob3N0QnV0dG9uID0gdGhpcy5hbGlnbkxlZnQgJiYgdGhpcy5tb2RlbC5jYWxsVG9BY3Rpb25TdHlsZSA9PT0gJ2dob3N0JyA/ICdidXR0b25MZWZ0R2hvc3QnIDogJyc7XHJcbiAgICAgICAgdGhpcy5hbGlnbkFjdGlvblRleHRCdXR0b24gPSB0aGlzLmFsaWduTGVmdCAmJiB0aGlzLm1vZGVsLmNhbGxUb0FjdGlvblN0eWxlID09PSAnYWN0aW9uVGV4dCcgPyAnYnV0dG9uTGVmdEFjdGlvblRleHQnIDogJyc7XHJcbiAgICAgICAgdGhpcy5hbGlnbkJ1dHRvbnNOb1BhZGRpbmcgPVxyXG4gICAgICAgICAgICB0aGlzLmFsaWduTGVmdCAmJlxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1RyYW5zcGFyZW50ICYmXHJcbiAgICAgICAgICAgICAgICAodGhpcy5tb2RlbC5jYWxsVG9BY3Rpb25TdHlsZSA9PT0gJ2dob3N0JyB8fCB0aGlzLm1vZGVsLmNhbGxUb0FjdGlvblN0eWxlID09PSAnYWN0aW9uVGV4dCcpID9cclxuICAgICAgICAgICAgICAgICdub0J1dHRvblBhZGRpbmcnIDogJyc7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNDb250YWluZXJsZXNzVHlwZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNhcmRDbGFzc2VzLnB1c2goJ2NvbnRhaW5lcmxlc3MnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLm1vZGVsLmNhbGxUb0FjdGlvbi51cmwpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXJkQ2xhc3Nlcy5wdXNoKCdyZW1vdmVTaGFkb3dBbmltYXRpb24nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuaXNUcmFuc3BhcmVudCAmJiB0aGlzLm1vZGVsLmxheW91dCA9PT0gJ1NpZGUgYnkgU2lkZSBNZWRpYSBMZWZ0Jykge1xyXG4gICAgICAgICAgICB0aGlzLmNhcmRDbGFzc2VzLnB1c2goJ3RyYW5zcGFyZW50TWVkaWFMZWZ0Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmlzVHJhbnNwYXJlbnQgJiYgdGhpcy5tb2RlbC5sYXlvdXQgPT09ICdTaWRlIGJ5IFNpZGUgTWVkaWEgUmlnaHQnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FyZENsYXNzZXMucHVzaCgndHJhbnNwYXJlbnRNZWRpYVJpZ2h0Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmlzVHJhbnNwYXJlbnQgJiYgdGhpcy5tb2RlbC5sYXlvdXQgPT09ICdTdGFja2VkJykge1xyXG4gICAgICAgICAgICB0aGlzLmNhcmRDbGFzc2VzLnB1c2goJ3RyYW5zcGFyZW50U3RhY2tlZCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5tb2RlbC5sYXlvdXQgPT09ICdTaWRlIGJ5IFNpZGUgTWVkaWEgUmlnaHQnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FyZENsYXNzZXMucHVzaCgncmV2ZXJzZScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5pc1NpZGVCeVNpZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXJkQ2xhc3Nlcy5wdXNoKHRoaXMubW9kZWwuaW1hZ2VSYXRpbyA9PT0gJzEvMScgPyAnaGFsZicgOiAndGhpcmRzJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubW9kaWZpZXIgPSB0aGlzLmNhcmRDbGFzc2VzLmpvaW4oJyAnKTtcclxuICAgICAgICBpZiAodGhpcy5hbGlnbkdob3N0QnV0dG9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxpZ25tZW50Q2xhc3Nlcy5wdXNoKCdidXR0b25MZWZ0R2hvc3QnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuYWxpZ25BY3Rpb25UZXh0QnV0dG9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxpZ25tZW50Q2xhc3Nlcy5wdXNoKCdidXR0b25MZWZ0QWN0aW9uVGV4dCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5hbGlnbkJ1dHRvbnNOb1BhZGRpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5hbGlnbm1lbnRDbGFzc2VzLnB1c2goJ25vQnV0dG9uUGFkZGluZycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFsaWdubWVudE1vZGlmaWVyID0gdGhpcy5hbGlnbm1lbnRDbGFzc2VzLmpvaW4oJyAnKTtcclxuICAgICAgICBpZiAodGhpcy5tb2RlbC5jYWxsVG9BY3Rpb25TdHlsZSkge1xyXG4gICAgICAgICAgICB0aGlzLmJ1dHRvbk1vZGlmaWVyID0gdGhpcy5nZXRDYWxsVG9BY3Rpb25TdHlsZXModGhpcy5tb2RlbC5jYWxsVG9BY3Rpb25TdHlsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIEZsZXhpYmxlQ2FyZC5wcm90b3R5cGUuZ2V0Q2FsbFRvQWN0aW9uU3R5bGVzID0gZnVuY3Rpb24gKGNhbGxUb0FjdGlvblN0eWxlKSB7XHJcbiAgICAgICAgc3dpdGNoIChjYWxsVG9BY3Rpb25TdHlsZSkge1xyXG4gICAgICAgICAgICBjYXNlICdzZWNvbmRhcnknOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdkcy1idG4tc2Vjb25kYXJ5JztcclxuICAgICAgICAgICAgY2FzZSAnZ2hvc3QnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdidG4tY3VzdG9tLWdob3N0JztcclxuICAgICAgICAgICAgY2FzZSAnYWN0aW9uVGV4dCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2RzLWxpbmstcHJpbWFyeSc7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2RzLWJ0bi1wcmltYXJ5JztcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgRmxleGlibGVDYXJkLnByb3RvdHlwZS5oYXNWaWRlbyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gISF0aGlzLm1vZGVsLnZpZGVvVVJMO1xyXG4gICAgfTtcclxuICAgIEZsZXhpYmxlQ2FyZC5wcm90b3R5cGUuc2V0SW5saW5lU3R5bGVzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmJhY2tncm91bmRPcGFjaXR5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FyZElubGluZVN0eWxlcyArPSBcIlxcblxcdFxcdFxcdFxcdC0tY2FyZC1iYWNrZ3JvdW5kLW9wYWNpdHk6IGNhbGMoIFwiICsgdGhpcy5tb2RlbC5iYWNrZ3JvdW5kT3BhY2l0eSArIFwiIC8gMTAwICk7XFxuXFx0XFx0XFx0XCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLnNWRykge1xyXG4gICAgICAgICAgICB0aGlzLmNhcmRJbmxpbmVTdHlsZXMgKz0gXCJcXG5cXHRcXHRcXHRcXHQtLXN2Zy1tYXgtd2lkdGg6IFwiICsgdGhpcy5tb2RlbC5zVkdNYXhXaWR0aCArIFwiO1xcblxcdFxcdFxcdFwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5tb2RlbC5pbWFnZVJhdGlvKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmF0aW9TdHlsZXMgPSBcIlxcblxcdFxcdFxcdFxcdC0tcmF0aW86IFwiICsgY29udmVydEFzcGVjdFJhdGlvKHRoaXMubW9kZWwuaW1hZ2VSYXRpbykgKyBcIjtcXG5cXHRcXHRcXHRcIjtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5iaW5kYWJsZSxcclxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxyXG4gICAgXSwgRmxleGlibGVDYXJkLnByb3RvdHlwZSwgXCJtb2RlbFwiLCB2b2lkIDApO1xyXG4gICAgcmV0dXJuIEZsZXhpYmxlQ2FyZDtcclxufSgpKTtcclxuZXhwb3J0cy5GbGV4aWJsZUNhcmQgPSBGbGV4aWJsZUNhcmQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///components/flexible-card/flexible-card\n")},"components/flexible-card/flexible-card.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<div class=\\"flexCardComponent ${modifier}\\" css.bind=\\"cardInlineStyles\\">\\r\\n\\t\\t<div>\\r\\n\\t\\t\\t<div class=\\"mediaContainer\\">\\r\\n\\t\\t\\t\\t<div if.bind=\\"model.image\\" class=\\"headerImage ${model.imageRatio && \'hasRatio\'}\\" css.bind=\\"ratioStyles\\">\\r\\n\\t\\t\\t\\t\\t<img src=\\"${imageServer}${model.image.filePath}\\" alt=\\"${model.image.caption}\\" />\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t<div if.bind=\\"hasVideo()\\" class=\\"headerVideo\\">\\r\\n\\t\\t\\t\\t\\t<video-player model.bind=\\"videoPlayerModel\\"><\/video-player>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<div class=\\"content\\">\\r\\n\\t\\t\\t\\t<div>\\r\\n\\t\\t\\t\\t\\t<div if.bind=\\"model.sVG && model.sVG.length\\" class=\\"svgStyles\\">\\r\\n\\t\\t\\t\\t\\t\\t<img src=\\"${svgServer}${model.sVG[0].url}\\" />\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<div class=\\"bodyWrapper ${model.contentAlignment === \'Center\' && \'alignCenter\'}\\">\\r\\n\\t\\t\\t\\t\\t\\t<div if.bind=\\"model.capsHeader\\" class=\\"capsHeader\\">${model.capsHeader}<\/div>\\r\\n\\t\\t\\t\\t\\t\\t<h3 if.bind=\\"model.header\\" class=\\"header ${headerStyle}\\" innerhtml.bind=\\"model.header\\"><\/h3>\\r\\n\\t\\t\\t\\t\\t\\t<div if.bind=\\"model.subHeader\\" class=\\"subHeader ${subHeaderStyle}\\" innerhtml.bind=\\"model.subHeader\\"><\/div>\\r\\n\\t\\t\\t\\t\\t\\t<div if.bind=\\"model.copy\\" class=\\"copy\\" innerhtml.bind=\\"model.copy\\"><\/div>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t<div class=\\"buttonWrapper ${alignmentModifier} ${model.contentAlignment === \'Center\' && \'alignCenter\'}\\" if.bind=\\"model.callToAction.url\\">\\r\\n\\t\\t\\t\\t\\t<a class=\\"${buttonModifier}\\" type=\\"button\\" href=\\"${model.callToAction.url}\\" target=\\"${model.callToAction.newWindow ? \'_blank\' : \'_self\'}\\">${model.callToAction.linkTitle}<\/a>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t<\/div>\\r\\n\\t<\/div>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9mbGV4aWJsZS1jYXJkL2ZsZXhpYmxlLWNhcmQuaHRtbD81NjkzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1FQUFtRSxTQUFTLHFKQUFxSiwrQkFBK0IsdURBQXVELFlBQVksRUFBRSxxQkFBcUIsV0FBVyxvQkFBb0Isa1dBQWtXLFVBQVUsRUFBRSxpQkFBaUIsa0VBQWtFLHFEQUFxRCw0RUFBNEUsaUJBQWlCLG9FQUFvRSxZQUFZLDZHQUE2RyxlQUFlLDBOQUEwTixrQkFBa0IsR0FBRyxxREFBcUQsaUVBQWlFLGVBQWUsNEJBQTRCLHVCQUF1QixjQUFjLGtEQUFrRCxLQUFLLDZCQUE2QiIsImZpbGUiOiJjb21wb25lbnRzL2ZsZXhpYmxlLWNhcmQvZmxleGlibGUtY2FyZC5odG1sLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBcIjx0ZW1wbGF0ZT5cXHJcXG5cXHQ8ZGl2IGNsYXNzPVxcXCJmbGV4Q2FyZENvbXBvbmVudCAke21vZGlmaWVyfVxcXCIgY3NzLmJpbmQ9XFxcImNhcmRJbmxpbmVTdHlsZXNcXFwiPlxcclxcblxcdFxcdDxkaXY+XFxyXFxuXFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwibWVkaWFDb250YWluZXJcXFwiPlxcclxcblxcdFxcdFxcdFxcdDxkaXYgaWYuYmluZD1cXFwibW9kZWwuaW1hZ2VcXFwiIGNsYXNzPVxcXCJoZWFkZXJJbWFnZSAke21vZGVsLmltYWdlUmF0aW8gJiYgJ2hhc1JhdGlvJ31cXFwiIGNzcy5iaW5kPVxcXCJyYXRpb1N0eWxlc1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGltZyBzcmM9XFxcIiR7aW1hZ2VTZXJ2ZXJ9JHttb2RlbC5pbWFnZS5maWxlUGF0aH1cXFwiIGFsdD1cXFwiJHttb2RlbC5pbWFnZS5jYXB0aW9ufVxcXCIgLz5cXHJcXG5cXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHQ8ZGl2IGlmLmJpbmQ9XFxcImhhc1ZpZGVvKClcXFwiIGNsYXNzPVxcXCJoZWFkZXJWaWRlb1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PHZpZGVvLXBsYXllciBtb2RlbC5iaW5kPVxcXCJ2aWRlb1BsYXllck1vZGVsXFxcIj48L3ZpZGVvLXBsYXllcj5cXHJcXG5cXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb250ZW50XFxcIj5cXHJcXG5cXHRcXHRcXHRcXHQ8ZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdDxkaXYgaWYuYmluZD1cXFwibW9kZWwuc1ZHICYmIG1vZGVsLnNWRy5sZW5ndGhcXFwiIGNsYXNzPVxcXCJzdmdTdHlsZXNcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxpbWcgc3JjPVxcXCIke3N2Z1NlcnZlcn0ke21vZGVsLnNWR1swXS51cmx9XFxcIiAvPlxcclxcblxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImJvZHlXcmFwcGVyICR7bW9kZWwuY29udGVudEFsaWdubWVudCA9PT0gJ0NlbnRlcicgJiYgJ2FsaWduQ2VudGVyJ31cXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgaWYuYmluZD1cXFwibW9kZWwuY2Fwc0hlYWRlclxcXCIgY2xhc3M9XFxcImNhcHNIZWFkZXJcXFwiPiR7bW9kZWwuY2Fwc0hlYWRlcn08L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8aDMgaWYuYmluZD1cXFwibW9kZWwuaGVhZGVyXFxcIiBjbGFzcz1cXFwiaGVhZGVyICR7aGVhZGVyU3R5bGV9XFxcIiBpbm5lcmh0bWwuYmluZD1cXFwibW9kZWwuaGVhZGVyXFxcIj48L2gzPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgaWYuYmluZD1cXFwibW9kZWwuc3ViSGVhZGVyXFxcIiBjbGFzcz1cXFwic3ViSGVhZGVyICR7c3ViSGVhZGVyU3R5bGV9XFxcIiBpbm5lcmh0bWwuYmluZD1cXFwibW9kZWwuc3ViSGVhZGVyXFxcIj48L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGlmLmJpbmQ9XFxcIm1vZGVsLmNvcHlcXFwiIGNsYXNzPVxcXCJjb3B5XFxcIiBpbm5lcmh0bWwuYmluZD1cXFwibW9kZWwuY29weVxcXCI+PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiYnV0dG9uV3JhcHBlciAke2FsaWdubWVudE1vZGlmaWVyfSAke21vZGVsLmNvbnRlbnRBbGlnbm1lbnQgPT09ICdDZW50ZXInICYmICdhbGlnbkNlbnRlcid9XFxcIiBpZi5iaW5kPVxcXCJtb2RlbC5jYWxsVG9BY3Rpb24udXJsXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8YSBjbGFzcz1cXFwiJHtidXR0b25Nb2RpZmllcn1cXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgaHJlZj1cXFwiJHttb2RlbC5jYWxsVG9BY3Rpb24udXJsfVxcXCIgdGFyZ2V0PVxcXCIke21vZGVsLmNhbGxUb0FjdGlvbi5uZXdXaW5kb3cgPyAnX2JsYW5rJyA6ICdfc2VsZid9XFxcIj4ke21vZGVsLmNhbGxUb0FjdGlvbi5saW5rVGl0bGV9PC9hPlxcclxcblxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdDwvZGl2PlxcclxcblxcdDwvZGl2PlxcclxcbjwvdGVtcGxhdGU+XFxyXFxuXCI7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/flexible-card/flexible-card.html\n')},"components/hero/hero":function(module,exports,__webpack_require__){"use strict";eval("\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__(\"aurelia-framework\");\r\nvar HorizontalAlignment_1 = __webpack_require__(19);\r\nvar injectScript_1 = __webpack_require__(15);\r\nvar IHero_1 = __webpack_require__(181);\r\nvar storage = {\r\n    get: function (key) {\r\n        return window.localStorage.getItem(key);\r\n    },\r\n    set: function (key, value) {\r\n        return window.localStorage.setItem(key, value);\r\n    },\r\n    clear: function () {\r\n        window.localStorage.clear();\r\n    },\r\n};\r\nvar Hero = /** @class */ (function () {\r\n    function Hero() {\r\n        this.alignment = 'hero__header--start center-xs center-sm start-md';\r\n        this.modifier = 'hero--is-loading';\r\n        this.overlayStyles = '';\r\n        this.iconMaxWidth = '';\r\n    }\r\n    Hero.prototype.activate = function (model) {\r\n        this.model = model;\r\n        this.setOverlayStyles();\r\n        if (model.title) {\r\n            model.title = model.title.replace(/(<p[^>]+?>|<p>|<\\/p>)/gim, '');\r\n            model.title = model.title.replace(/<br ?\\/?>/g, '<div class=\"hero__conditional-title-break\"><\/div>');\r\n        }\r\n        this.alignment = this.getAlignment(model.horizontalAlignment);\r\n        this.showVideo = model.backgroundVideo.sources !== undefined && model.backgroundVideo.sources.length > 0;\r\n        if (Array.isArray(model.backgroundHeroImages) && model.backgroundHeroImages.length) {\r\n            var lastHeroImage_1 = storage.get('hero-image-path');\r\n            var nextHeroImage = model.backgroundHeroImages[0];\r\n            if (lastHeroImage_1) {\r\n                var lastIndex = model.backgroundHeroImages.findIndex(function (img) { return img.fullPath === lastHeroImage_1; });\r\n                var nextIndex = model.backgroundHeroImages.length - 1 === lastIndex ? 0 : lastIndex + 1;\r\n                nextHeroImage = model.backgroundHeroImages[nextIndex];\r\n            }\r\n            storage.set('hero-image-path', nextHeroImage.fullPath);\r\n            this.backgroundImage = nextHeroImage;\r\n        }\r\n        else if (model.backgroundHeroImage) {\r\n            this.backgroundImage = model.backgroundHeroImage;\r\n        }\r\n        this.mobileBackgroundImage = this.model.mobileBackgroundHeroImage ? this.model.mobileBackgroundHeroImage : this.backgroundImage;\r\n    };\r\n    Hero.prototype.attached = function () {\r\n        var _this = this;\r\n        if (this.showVideo) {\r\n            this.optionalAttribute('controls', this.model.backgroundVideo.controls);\r\n            this.optionalAttribute('loop', this.model.backgroundVideo.loop);\r\n            this.optionalAttribute('autoplay', this.model.backgroundVideo.autoplay);\r\n        }\r\n        if (this.model.iconMaxWidth && /^\\d+$/.test(this.model.iconMaxWidth)) {\r\n            this.iconMaxWidth = \"max-width: \" + this.model.iconMaxWidth + \"px;\";\r\n        }\r\n        setTimeout(function () {\r\n            _this.modifier = 'hero--is-loaded';\r\n            if (_this.model.heroHeight === IHero_1.HeroHeight.AutomaticHeight) {\r\n                _this.modifier += ' hero--is-auto-height';\r\n            }\r\n            if (_this.model.heroHeight === IHero_1.HeroHeight.UhOh) {\r\n                _this.modifier += ' hero--is-404';\r\n            }\r\n        }, this.showVideo ? 100 : 0);\r\n        if (this.model.vidyardEmbedCode) {\r\n            var id = \"vidyard_embed_code_\" + this.model.vidyardEmbedCode;\r\n            var src = \"//play.vidyard.com/\" + this.model\r\n                .vidyardEmbedCode + \".js?v=3.1&type=lightbox&width=960&height=540\";\r\n            injectScript_1.injectScript(src, id);\r\n        }\r\n    };\r\n    Hero.prototype.setOverlayStyles = function () {\r\n        if (this.model.overlayColorOverride) {\r\n            this.overlayStyles = \"\\n\\t\\t\\t\\t--image-overlay-color: \" + this.model.overlayColorOverride + \";\\n\\t\\t\\t\\t--image-overlay-opacity: calc( \" + this.model.overlayPercentageOverride + \" / 100 );\\n\\t\\t\\t\";\r\n        }\r\n    };\r\n    Hero.prototype.openLightboxPlayer = function () {\r\n        window['fn_vidyard_' + this.model.vidyardEmbedCode]();\r\n        return false;\r\n    };\r\n    Hero.prototype.getAlignment = function (horizonalAlignment) {\r\n        switch (horizonalAlignment) {\r\n            case HorizontalAlignment_1.HorizontalAlignment.Start:\r\n                return 'hero__header--start start-xs';\r\n            case HorizontalAlignment_1.HorizontalAlignment.End:\r\n                return 'hero__header--end end-xs';\r\n            default:\r\n                return 'hero__header--center center-xs';\r\n        }\r\n    };\r\n    Hero.prototype.scrollDown = function ($event) {\r\n        var nextElement = this.heroElement.nextElementSibling;\r\n        if (nextElement) {\r\n            nextElement.scrollIntoView({ behavior: 'smooth', block: 'start', inline: 'nearest' });\r\n        }\r\n    };\r\n    Hero.prototype.optionalAttribute = function (attribute, value) {\r\n        if (this.backgroundVideoElement && value) {\r\n            this.backgroundVideoElement.setAttribute(attribute, value);\r\n        }\r\n    };\r\n    Hero.prototype.getContentDividerAlignment = function () {\r\n        return this.model.horizontalAlignment;\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata(\"design:type\", Object)\r\n    ], Hero.prototype, \"model\", void 0);\r\n    return Hero;\r\n}());\r\nexports.Hero = Hero;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9oZXJvL2hlcm8udHM/OGUyZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxRQUFRO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RCwwQkFBMEIsbUJBQU8sQ0FBQyxtQkFBbUI7QUFDckQsNEJBQTRCLG1CQUFPLENBQUMsRUFBaUM7QUFDckUscUJBQXFCLG1CQUFPLENBQUMsRUFBb0I7QUFDakQsY0FBYyxtQkFBTyxDQUFDLEdBQVM7QUFDL0I7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxRkFBcUYseUNBQXlDLEVBQUU7QUFDaEk7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4RUFBOEU7QUFDOUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJHQUEyRyw4RkFBOEY7QUFDek07QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0Msd0RBQXdEO0FBQ2hHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCIsImZpbGUiOiJjb21wb25lbnRzL2hlcm8vaGVyby5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG52YXIgX19kZWNvcmF0ZSA9ICh0aGlzICYmIHRoaXMuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59O1xyXG52YXIgX19tZXRhZGF0YSA9ICh0aGlzICYmIHRoaXMuX19tZXRhZGF0YSkgfHwgZnVuY3Rpb24gKGssIHYpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShrLCB2KTtcclxufTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgYXVyZWxpYV9mcmFtZXdvcmtfMSA9IHJlcXVpcmUoXCJhdXJlbGlhLWZyYW1ld29ya1wiKTtcclxudmFyIEhvcml6b250YWxBbGlnbm1lbnRfMSA9IHJlcXVpcmUoXCIuLi8uLi9lbnVtcy9Ib3Jpem9udGFsQWxpZ25tZW50XCIpO1xyXG52YXIgaW5qZWN0U2NyaXB0XzEgPSByZXF1aXJlKFwiLi4vLi4vaW5qZWN0U2NyaXB0XCIpO1xyXG52YXIgSUhlcm9fMSA9IHJlcXVpcmUoXCIuL0lIZXJvXCIpO1xyXG52YXIgc3RvcmFnZSA9IHtcclxuICAgIGdldDogZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIHJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTtcclxuICAgIH0sXHJcbiAgICBzZXQ6IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIHZhbHVlKTtcclxuICAgIH0sXHJcbiAgICBjbGVhcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UuY2xlYXIoKTtcclxuICAgIH0sXHJcbn07XHJcbnZhciBIZXJvID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gSGVybygpIHtcclxuICAgICAgICB0aGlzLmFsaWdubWVudCA9ICdoZXJvX19oZWFkZXItLXN0YXJ0IGNlbnRlci14cyBjZW50ZXItc20gc3RhcnQtbWQnO1xyXG4gICAgICAgIHRoaXMubW9kaWZpZXIgPSAnaGVyby0taXMtbG9hZGluZyc7XHJcbiAgICAgICAgdGhpcy5vdmVybGF5U3R5bGVzID0gJyc7XHJcbiAgICAgICAgdGhpcy5pY29uTWF4V2lkdGggPSAnJztcclxuICAgIH1cclxuICAgIEhlcm8ucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24gKG1vZGVsKSB7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG1vZGVsO1xyXG4gICAgICAgIHRoaXMuc2V0T3ZlcmxheVN0eWxlcygpO1xyXG4gICAgICAgIGlmIChtb2RlbC50aXRsZSkge1xyXG4gICAgICAgICAgICBtb2RlbC50aXRsZSA9IG1vZGVsLnRpdGxlLnJlcGxhY2UoLyg8cFtePl0rPz58PHA+fDxcXC9wPikvZ2ltLCAnJyk7XHJcbiAgICAgICAgICAgIG1vZGVsLnRpdGxlID0gbW9kZWwudGl0bGUucmVwbGFjZSgvPGJyID9cXC8/Pi9nLCAnPGRpdiBjbGFzcz1cImhlcm9fX2NvbmRpdGlvbmFsLXRpdGxlLWJyZWFrXCI+PC9kaXY+Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYWxpZ25tZW50ID0gdGhpcy5nZXRBbGlnbm1lbnQobW9kZWwuaG9yaXpvbnRhbEFsaWdubWVudCk7XHJcbiAgICAgICAgdGhpcy5zaG93VmlkZW8gPSBtb2RlbC5iYWNrZ3JvdW5kVmlkZW8uc291cmNlcyAhPT0gdW5kZWZpbmVkICYmIG1vZGVsLmJhY2tncm91bmRWaWRlby5zb3VyY2VzLmxlbmd0aCA+IDA7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobW9kZWwuYmFja2dyb3VuZEhlcm9JbWFnZXMpICYmIG1vZGVsLmJhY2tncm91bmRIZXJvSW1hZ2VzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB2YXIgbGFzdEhlcm9JbWFnZV8xID0gc3RvcmFnZS5nZXQoJ2hlcm8taW1hZ2UtcGF0aCcpO1xyXG4gICAgICAgICAgICB2YXIgbmV4dEhlcm9JbWFnZSA9IG1vZGVsLmJhY2tncm91bmRIZXJvSW1hZ2VzWzBdO1xyXG4gICAgICAgICAgICBpZiAobGFzdEhlcm9JbWFnZV8xKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbGFzdEluZGV4ID0gbW9kZWwuYmFja2dyb3VuZEhlcm9JbWFnZXMuZmluZEluZGV4KGZ1bmN0aW9uIChpbWcpIHsgcmV0dXJuIGltZy5mdWxsUGF0aCA9PT0gbGFzdEhlcm9JbWFnZV8xOyB9KTtcclxuICAgICAgICAgICAgICAgIHZhciBuZXh0SW5kZXggPSBtb2RlbC5iYWNrZ3JvdW5kSGVyb0ltYWdlcy5sZW5ndGggLSAxID09PSBsYXN0SW5kZXggPyAwIDogbGFzdEluZGV4ICsgMTtcclxuICAgICAgICAgICAgICAgIG5leHRIZXJvSW1hZ2UgPSBtb2RlbC5iYWNrZ3JvdW5kSGVyb0ltYWdlc1tuZXh0SW5kZXhdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHN0b3JhZ2Uuc2V0KCdoZXJvLWltYWdlLXBhdGgnLCBuZXh0SGVyb0ltYWdlLmZ1bGxQYXRoKTtcclxuICAgICAgICAgICAgdGhpcy5iYWNrZ3JvdW5kSW1hZ2UgPSBuZXh0SGVyb0ltYWdlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChtb2RlbC5iYWNrZ3JvdW5kSGVyb0ltYWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmFja2dyb3VuZEltYWdlID0gbW9kZWwuYmFja2dyb3VuZEhlcm9JbWFnZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5tb2JpbGVCYWNrZ3JvdW5kSW1hZ2UgPSB0aGlzLm1vZGVsLm1vYmlsZUJhY2tncm91bmRIZXJvSW1hZ2UgPyB0aGlzLm1vZGVsLm1vYmlsZUJhY2tncm91bmRIZXJvSW1hZ2UgOiB0aGlzLmJhY2tncm91bmRJbWFnZTtcclxuICAgIH07XHJcbiAgICBIZXJvLnByb3RvdHlwZS5hdHRhY2hlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIGlmICh0aGlzLnNob3dWaWRlbykge1xyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbmFsQXR0cmlidXRlKCdjb250cm9scycsIHRoaXMubW9kZWwuYmFja2dyb3VuZFZpZGVvLmNvbnRyb2xzKTtcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25hbEF0dHJpYnV0ZSgnbG9vcCcsIHRoaXMubW9kZWwuYmFja2dyb3VuZFZpZGVvLmxvb3ApO1xyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbmFsQXR0cmlidXRlKCdhdXRvcGxheScsIHRoaXMubW9kZWwuYmFja2dyb3VuZFZpZGVvLmF1dG9wbGF5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwuaWNvbk1heFdpZHRoICYmIC9eXFxkKyQvLnRlc3QodGhpcy5tb2RlbC5pY29uTWF4V2lkdGgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaWNvbk1heFdpZHRoID0gXCJtYXgtd2lkdGg6IFwiICsgdGhpcy5tb2RlbC5pY29uTWF4V2lkdGggKyBcInB4O1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgX3RoaXMubW9kaWZpZXIgPSAnaGVyby0taXMtbG9hZGVkJztcclxuICAgICAgICAgICAgaWYgKF90aGlzLm1vZGVsLmhlcm9IZWlnaHQgPT09IElIZXJvXzEuSGVyb0hlaWdodC5BdXRvbWF0aWNIZWlnaHQpIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLm1vZGlmaWVyICs9ICcgaGVyby0taXMtYXV0by1oZWlnaHQnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChfdGhpcy5tb2RlbC5oZXJvSGVpZ2h0ID09PSBJSGVyb18xLkhlcm9IZWlnaHQuVWhPaCkge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMubW9kaWZpZXIgKz0gJyBoZXJvLS1pcy00MDQnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgdGhpcy5zaG93VmlkZW8gPyAxMDAgOiAwKTtcclxuICAgICAgICBpZiAodGhpcy5tb2RlbC52aWR5YXJkRW1iZWRDb2RlKSB7XHJcbiAgICAgICAgICAgIHZhciBpZCA9IFwidmlkeWFyZF9lbWJlZF9jb2RlX1wiICsgdGhpcy5tb2RlbC52aWR5YXJkRW1iZWRDb2RlO1xyXG4gICAgICAgICAgICB2YXIgc3JjID0gXCIvL3BsYXkudmlkeWFyZC5jb20vXCIgKyB0aGlzLm1vZGVsXHJcbiAgICAgICAgICAgICAgICAudmlkeWFyZEVtYmVkQ29kZSArIFwiLmpzP3Y9My4xJnR5cGU9bGlnaHRib3gmd2lkdGg9OTYwJmhlaWdodD01NDBcIjtcclxuICAgICAgICAgICAgaW5qZWN0U2NyaXB0XzEuaW5qZWN0U2NyaXB0KHNyYywgaWQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBIZXJvLnByb3RvdHlwZS5zZXRPdmVybGF5U3R5bGVzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLm92ZXJsYXlDb2xvck92ZXJyaWRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVN0eWxlcyA9IFwiXFxuXFx0XFx0XFx0XFx0LS1pbWFnZS1vdmVybGF5LWNvbG9yOiBcIiArIHRoaXMubW9kZWwub3ZlcmxheUNvbG9yT3ZlcnJpZGUgKyBcIjtcXG5cXHRcXHRcXHRcXHQtLWltYWdlLW92ZXJsYXktb3BhY2l0eTogY2FsYyggXCIgKyB0aGlzLm1vZGVsLm92ZXJsYXlQZXJjZW50YWdlT3ZlcnJpZGUgKyBcIiAvIDEwMCApO1xcblxcdFxcdFxcdFwiO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBIZXJvLnByb3RvdHlwZS5vcGVuTGlnaHRib3hQbGF5ZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgd2luZG93Wydmbl92aWR5YXJkXycgKyB0aGlzLm1vZGVsLnZpZHlhcmRFbWJlZENvZGVdKCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfTtcclxuICAgIEhlcm8ucHJvdG90eXBlLmdldEFsaWdubWVudCA9IGZ1bmN0aW9uIChob3Jpem9uYWxBbGlnbm1lbnQpIHtcclxuICAgICAgICBzd2l0Y2ggKGhvcml6b25hbEFsaWdubWVudCkge1xyXG4gICAgICAgICAgICBjYXNlIEhvcml6b250YWxBbGlnbm1lbnRfMS5Ib3Jpem9udGFsQWxpZ25tZW50LlN0YXJ0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoZXJvX19oZWFkZXItLXN0YXJ0IHN0YXJ0LXhzJztcclxuICAgICAgICAgICAgY2FzZSBIb3Jpem9udGFsQWxpZ25tZW50XzEuSG9yaXpvbnRhbEFsaWdubWVudC5FbmQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hlcm9fX2hlYWRlci0tZW5kIGVuZC14cyc7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hlcm9fX2hlYWRlci0tY2VudGVyIGNlbnRlci14cyc7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIEhlcm8ucHJvdG90eXBlLnNjcm9sbERvd24gPSBmdW5jdGlvbiAoJGV2ZW50KSB7XHJcbiAgICAgICAgdmFyIG5leHRFbGVtZW50ID0gdGhpcy5oZXJvRWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmc7XHJcbiAgICAgICAgaWYgKG5leHRFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIG5leHRFbGVtZW50LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ3N0YXJ0JywgaW5saW5lOiAnbmVhcmVzdCcgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIEhlcm8ucHJvdG90eXBlLm9wdGlvbmFsQXR0cmlidXRlID0gZnVuY3Rpb24gKGF0dHJpYnV0ZSwgdmFsdWUpIHtcclxuICAgICAgICBpZiAodGhpcy5iYWNrZ3JvdW5kVmlkZW9FbGVtZW50ICYmIHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmFja2dyb3VuZFZpZGVvRWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCB2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIEhlcm8ucHJvdG90eXBlLmdldENvbnRlbnREaXZpZGVyQWxpZ25tZW50ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsLmhvcml6b250YWxBbGlnbm1lbnQ7XHJcbiAgICB9O1xyXG4gICAgX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5iaW5kYWJsZSxcclxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxyXG4gICAgXSwgSGVyby5wcm90b3R5cGUsIFwibW9kZWxcIiwgdm9pZCAwKTtcclxuICAgIHJldHVybiBIZXJvO1xyXG59KCkpO1xyXG5leHBvcnRzLkhlcm8gPSBIZXJvO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///components/hero/hero\n")},"components/hero/hero.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<section ref=\\"heroElement\\" class=\\"hero ${modifier}\\">\\r\\n\\t\\t<div class=\\"hero__container\\" css.bind=\\"overlayStyles\\">\\r\\n\\t\\t\\t<responsive-image if.bind=\\"backgroundImage && backgroundImage.hasImage\\"\\r\\n\\t\\t\\t\\turl.bind=\\"backgroundImage.fullPath\\"\\r\\n\\t\\t\\t\\tmobile-url.bind=\\"mobileBackgroundImage.fullPath\\"\\r\\n\\t\\t\\t\\tadjust-height-for-mobile.bind=\\"true\\" containerless><\/responsive-image>\\r\\n\\r\\n\\t\\t\\t<video ref=\\"backgroundVideoElement\\" if.bind=\\"showVideo\\" class=\\"hero__background-video\\" preload=\\"auto\\" playsinline muted>\\r\\n\\t\\t\\t\\t<source repeat.for=\\"source of model.backgroundVideo.sources\\" src=\\"${source.uri}\\" type=\\"video/${source.encoding}\\" />\\r\\n\\t\\t\\t<\/video>\\r\\n\\r\\n\\t\\t\\t<header ref=\\"contentElement\\" class=\\"hero__content\\">\\r\\n\\t\\t\\t\\t<div class=\\"hero__header row ${alignment}\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\"col-xs-12 col-sm-10 col-md-8\\">\\r\\n\\t\\t\\t\\t\\t\\t<img if.bind=\\"model.logo && model.logo.hasImage\\" src=\\"${model.logo.fullPath}\\" class=\\"hero__logo\\" css.bind=\\"iconMaxWidth\\"/>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t<h1 if.bind=\\"model.title\\" innerhtml.bind=\\"model.title\\" class=\\"hero__title ${model.logo && model.logo.hasImage ? \'visually-hidden\' : \'\'}\\"><\/h1>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t<content-divider model.bind=\\"model.contentDivider\\" alignment.bind=\\"getContentDividerAlignment()\\" containerless><\/content-divider>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t<div if.bind=\\"model.subtitle\\" class=\\"hero__subtitle ds-subhead\\" innerhtml.bind=\\"model.subtitle\\"><\/div>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t<a if.bind=\\"model.actionLink.canDisplayAsTextLink\\" href.bind=\\"model.actionLink.url\\" data-router-ignore target=\\"${model.actionLink.newWindow ? \'_blank\' : \'_self\'}\\"\\r\\n\\t\\t\\t\\t\\t\\t class=\\"hero__action-link ds-btn-primary ds-btn--jumbo\\">${model.actionLink.linkTitle}<\/a>\\r\\n\\t\\t\\t\\t\\t\\t<a if.bind=\\"model.vidyardEmbedCode\\" click.delegate=\\"openLightboxPlayer($event)\\" class=\\"hero__video-play ds-caps-small\\">Watch Video<\/a>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<\/header>\\r\\n\\r\\n\\t\\t\\t<footer if.bind=\\"model.enableScrollDown\\" class=\\"hero__scroll center-xs\\">\\r\\n\\t\\t\\t\\t<div class=\\"col-xs-12\\">\\r\\n\\t\\t\\t\\t\\t<button click.delegate=\\"scrollDown($event)\\" class=\\"hero__scroll-down-button\\"><\/button>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<\/footer>\\r\\n\\r\\n\\t\\t\\t<a if.bind=\\"model.termsAndConditionsLink.canDisplayAsTextLink\\"\\r\\n\\t\\t\\t\\thref.bind=\\"model.termsAndConditionsLink.url\\"\\r\\n\\t\\t\\t\\ttarget=\\"${model.termsAndConditionsLink.newWindow ? \'_blank\' : \'_self\'}\\"\\r\\n\\t\\t\\t\\tclass=\\"hero__terms-and-conditions-link ds-btn--small\\">${model.termsAndConditionsLink.linkTitle}<\/a>\\r\\n\\r\\n\\t\\t\\t<div class=\\"hero-caption\\" if.bind=\'backgroundImage.url || backgroundImage.caption\'>\\r\\n\\t\\t\\t\\t<div class=\\"hero-caption__wrapper\\">\\r\\n\\t\\t\\t\\t\\t<span class=\\"hero-caption__caption\\">${backgroundImage.caption}<\/span>\\r\\n\\t\\t\\t\\t\\t<div class=\\"hero-caption__action-container\\" if.bind=\'backgroundImage.url && backgroundImage.url.url && backgroundImage.url.linkTitle\'>\\r\\n\\t\\t\\t\\t\\t\\t<a class=\\"hero-caption__action-container--link\\" color=\'white\' href.bind=\'backgroundImage.url.url\' target=\\"${backgroundImage.url.newWindow ? \'_blank\' : \'_self\'}\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t${backgroundImage.url.linkTitle}\\r\\n\\t\\t\\t\\t\\t\\t<\/a>\\r\\n\\t\\t\\t\\t\\t\\t<svg class=\\"hero-caption__action-container--icon ds-icon-arrow-long ds-icon-sm\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<use xlink:href=\\"#ds-icon-arrow-long\\"/>\\r\\n\\t\\t\\t\\t\\t\\t<\/svg>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t<\/div>\\r\\n\\t<\/section>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9oZXJvL2hlcm8uaHRtbD84NjU0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDhFQUE4RSxTQUFTLDRqQkFBNGpCLFdBQVcsa0JBQWtCLGdCQUFnQix3SUFBd0ksVUFBVSx3SUFBd0ksb0JBQW9CLHdKQUF3SiwyREFBMkQsMmFBQTJhLGdEQUFnRCw4RUFBOEUsMkJBQTJCLG9vQkFBb29CLDREQUE0RCx3RUFBd0UsdUNBQXVDLDhNQUE4TSx3QkFBd0IsNFJBQTRSLG1EQUFtRCx1QkFBdUIsOEJBQThCIiwiZmlsZSI6ImNvbXBvbmVudHMvaGVyby9oZXJvLmh0bWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IFwiPHRlbXBsYXRlPlxcclxcblxcdDxzZWN0aW9uIHJlZj1cXFwiaGVyb0VsZW1lbnRcXFwiIGNsYXNzPVxcXCJoZXJvICR7bW9kaWZpZXJ9XFxcIj5cXHJcXG5cXHRcXHQ8ZGl2IGNsYXNzPVxcXCJoZXJvX19jb250YWluZXJcXFwiIGNzcy5iaW5kPVxcXCJvdmVybGF5U3R5bGVzXFxcIj5cXHJcXG5cXHRcXHRcXHQ8cmVzcG9uc2l2ZS1pbWFnZSBpZi5iaW5kPVxcXCJiYWNrZ3JvdW5kSW1hZ2UgJiYgYmFja2dyb3VuZEltYWdlLmhhc0ltYWdlXFxcIlxcclxcblxcdFxcdFxcdFxcdHVybC5iaW5kPVxcXCJiYWNrZ3JvdW5kSW1hZ2UuZnVsbFBhdGhcXFwiXFxyXFxuXFx0XFx0XFx0XFx0bW9iaWxlLXVybC5iaW5kPVxcXCJtb2JpbGVCYWNrZ3JvdW5kSW1hZ2UuZnVsbFBhdGhcXFwiXFxyXFxuXFx0XFx0XFx0XFx0YWRqdXN0LWhlaWdodC1mb3ItbW9iaWxlLmJpbmQ9XFxcInRydWVcXFwiIGNvbnRhaW5lcmxlc3M+PC9yZXNwb25zaXZlLWltYWdlPlxcclxcblxcclxcblxcdFxcdFxcdDx2aWRlbyByZWY9XFxcImJhY2tncm91bmRWaWRlb0VsZW1lbnRcXFwiIGlmLmJpbmQ9XFxcInNob3dWaWRlb1xcXCIgY2xhc3M9XFxcImhlcm9fX2JhY2tncm91bmQtdmlkZW9cXFwiIHByZWxvYWQ9XFxcImF1dG9cXFwiIHBsYXlzaW5saW5lIG11dGVkPlxcclxcblxcdFxcdFxcdFxcdDxzb3VyY2UgcmVwZWF0LmZvcj1cXFwic291cmNlIG9mIG1vZGVsLmJhY2tncm91bmRWaWRlby5zb3VyY2VzXFxcIiBzcmM9XFxcIiR7c291cmNlLnVyaX1cXFwiIHR5cGU9XFxcInZpZGVvLyR7c291cmNlLmVuY29kaW5nfVxcXCIgLz5cXHJcXG5cXHRcXHRcXHQ8L3ZpZGVvPlxcclxcblxcclxcblxcdFxcdFxcdDxoZWFkZXIgcmVmPVxcXCJjb250ZW50RWxlbWVudFxcXCIgY2xhc3M9XFxcImhlcm9fX2NvbnRlbnRcXFwiPlxcclxcblxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImhlcm9fX2hlYWRlciByb3cgJHthbGlnbm1lbnR9XFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgY29sLXNtLTEwIGNvbC1tZC04XFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8aW1nIGlmLmJpbmQ9XFxcIm1vZGVsLmxvZ28gJiYgbW9kZWwubG9nby5oYXNJbWFnZVxcXCIgc3JjPVxcXCIke21vZGVsLmxvZ28uZnVsbFBhdGh9XFxcIiBjbGFzcz1cXFwiaGVyb19fbG9nb1xcXCIgY3NzLmJpbmQ9XFxcImljb25NYXhXaWR0aFxcXCIvPlxcclxcblxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxoMSBpZi5iaW5kPVxcXCJtb2RlbC50aXRsZVxcXCIgaW5uZXJodG1sLmJpbmQ9XFxcIm1vZGVsLnRpdGxlXFxcIiBjbGFzcz1cXFwiaGVyb19fdGl0bGUgJHttb2RlbC5sb2dvICYmIG1vZGVsLmxvZ28uaGFzSW1hZ2UgPyAndmlzdWFsbHktaGlkZGVuJyA6ICcnfVxcXCI+PC9oMT5cXHJcXG5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8Y29udGVudC1kaXZpZGVyIG1vZGVsLmJpbmQ9XFxcIm1vZGVsLmNvbnRlbnREaXZpZGVyXFxcIiBhbGlnbm1lbnQuYmluZD1cXFwiZ2V0Q29udGVudERpdmlkZXJBbGlnbm1lbnQoKVxcXCIgY29udGFpbmVybGVzcz48L2NvbnRlbnQtZGl2aWRlcj5cXHJcXG5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGlmLmJpbmQ9XFxcIm1vZGVsLnN1YnRpdGxlXFxcIiBjbGFzcz1cXFwiaGVyb19fc3VidGl0bGUgZHMtc3ViaGVhZFxcXCIgaW5uZXJodG1sLmJpbmQ9XFxcIm1vZGVsLnN1YnRpdGxlXFxcIj48L2Rpdj5cXHJcXG5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YSBpZi5iaW5kPVxcXCJtb2RlbC5hY3Rpb25MaW5rLmNhbkRpc3BsYXlBc1RleHRMaW5rXFxcIiBocmVmLmJpbmQ9XFxcIm1vZGVsLmFjdGlvbkxpbmsudXJsXFxcIiBkYXRhLXJvdXRlci1pZ25vcmUgdGFyZ2V0PVxcXCIke21vZGVsLmFjdGlvbkxpbmsubmV3V2luZG93ID8gJ19ibGFuaycgOiAnX3NlbGYnfVxcXCJcXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQgY2xhc3M9XFxcImhlcm9fX2FjdGlvbi1saW5rIGRzLWJ0bi1wcmltYXJ5IGRzLWJ0bi0tanVtYm9cXFwiPiR7bW9kZWwuYWN0aW9uTGluay5saW5rVGl0bGV9PC9hPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxhIGlmLmJpbmQ9XFxcIm1vZGVsLnZpZHlhcmRFbWJlZENvZGVcXFwiIGNsaWNrLmRlbGVnYXRlPVxcXCJvcGVuTGlnaHRib3hQbGF5ZXIoJGV2ZW50KVxcXCIgY2xhc3M9XFxcImhlcm9fX3ZpZGVvLXBsYXkgZHMtY2Fwcy1zbWFsbFxcXCI+V2F0Y2ggVmlkZW88L2E+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0PC9oZWFkZXI+XFxyXFxuXFxyXFxuXFx0XFx0XFx0PGZvb3RlciBpZi5iaW5kPVxcXCJtb2RlbC5lbmFibGVTY3JvbGxEb3duXFxcIiBjbGFzcz1cXFwiaGVyb19fc2Nyb2xsIGNlbnRlci14c1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsaWNrLmRlbGVnYXRlPVxcXCJzY3JvbGxEb3duKCRldmVudClcXFwiIGNsYXNzPVxcXCJoZXJvX19zY3JvbGwtZG93bi1idXR0b25cXFwiPjwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdDwvZm9vdGVyPlxcclxcblxcclxcblxcdFxcdFxcdDxhIGlmLmJpbmQ9XFxcIm1vZGVsLnRlcm1zQW5kQ29uZGl0aW9uc0xpbmsuY2FuRGlzcGxheUFzVGV4dExpbmtcXFwiXFxyXFxuXFx0XFx0XFx0XFx0aHJlZi5iaW5kPVxcXCJtb2RlbC50ZXJtc0FuZENvbmRpdGlvbnNMaW5rLnVybFxcXCJcXHJcXG5cXHRcXHRcXHRcXHR0YXJnZXQ9XFxcIiR7bW9kZWwudGVybXNBbmRDb25kaXRpb25zTGluay5uZXdXaW5kb3cgPyAnX2JsYW5rJyA6ICdfc2VsZid9XFxcIlxcclxcblxcdFxcdFxcdFxcdGNsYXNzPVxcXCJoZXJvX190ZXJtcy1hbmQtY29uZGl0aW9ucy1saW5rIGRzLWJ0bi0tc21hbGxcXFwiPiR7bW9kZWwudGVybXNBbmRDb25kaXRpb25zTGluay5saW5rVGl0bGV9PC9hPlxcclxcblxcclxcblxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImhlcm8tY2FwdGlvblxcXCIgaWYuYmluZD0nYmFja2dyb3VuZEltYWdlLnVybCB8fCBiYWNrZ3JvdW5kSW1hZ2UuY2FwdGlvbic+XFxyXFxuXFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiaGVyby1jYXB0aW9uX193cmFwcGVyXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8c3BhbiBjbGFzcz1cXFwiaGVyby1jYXB0aW9uX19jYXB0aW9uXFxcIj4ke2JhY2tncm91bmRJbWFnZS5jYXB0aW9ufTwvc3Bhbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJoZXJvLWNhcHRpb25fX2FjdGlvbi1jb250YWluZXJcXFwiIGlmLmJpbmQ9J2JhY2tncm91bmRJbWFnZS51cmwgJiYgYmFja2dyb3VuZEltYWdlLnVybC51cmwgJiYgYmFja2dyb3VuZEltYWdlLnVybC5saW5rVGl0bGUnPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxhIGNsYXNzPVxcXCJoZXJvLWNhcHRpb25fX2FjdGlvbi1jb250YWluZXItLWxpbmtcXFwiIGNvbG9yPSd3aGl0ZScgaHJlZi5iaW5kPSdiYWNrZ3JvdW5kSW1hZ2UudXJsLnVybCcgdGFyZ2V0PVxcXCIke2JhY2tncm91bmRJbWFnZS51cmwubmV3V2luZG93ID8gJ19ibGFuaycgOiAnX3NlbGYnfVxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0JHtiYWNrZ3JvdW5kSW1hZ2UudXJsLmxpbmtUaXRsZX1cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8L2E+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PHN2ZyBjbGFzcz1cXFwiaGVyby1jYXB0aW9uX19hY3Rpb24tY29udGFpbmVyLS1pY29uIGRzLWljb24tYXJyb3ctbG9uZyBkcy1pY29uLXNtXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHQ8dXNlIHhsaW5rOmhyZWY9XFxcIiNkcy1pY29uLWFycm93LWxvbmdcXFwiLz5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8L3N2Zz5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHQ8L2Rpdj5cXHJcXG5cXHQ8L3NlY3Rpb24+XFxyXFxuPC90ZW1wbGF0ZT5cXHJcXG5cIjsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///components/hero/hero.html\n')},"components/icon-card/icon-card":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar IconCard = /** @class */ (function () {\r\n    function IconCard() {\r\n        this.icon = \'\';\r\n        this.backgroundColor = \'\';\r\n        this.textColor = \'\';\r\n    }\r\n    IconCard.prototype.activate = function (model) {\r\n        this.model = model;\r\n    };\r\n    IconCard.prototype.attached = function () {\r\n        if (this.model.backgroundColor) {\r\n            this.setParentBackgroundColor();\r\n        }\r\n        if (this.model.textColor) {\r\n            this.textColor = "color: " + this.model.textColor + ";";\r\n        }\r\n    };\r\n    IconCard.prototype.getBackgroundColor = function () {\r\n        return this.model.backgroundColor\r\n            ? "background-color: " + this.model.backgroundColor + ";"\r\n            : \'\';\r\n    };\r\n    IconCard.prototype.setParentBackgroundColor = function () {\r\n        this.iconCardElement.parentNode.style.backgroundColor = this.model.backgroundColor;\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Object)\r\n    ], IconCard.prototype, "model", void 0);\r\n    return IconCard;\r\n}());\r\nexports.IconCard = IconCard;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9pY29uLWNhcmQvaWNvbi1jYXJkLnRzPzFmNzYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsUUFBUTtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLGNBQWM7QUFDNUQsMEJBQTBCLG1CQUFPLENBQUMsbUJBQW1CO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrRUFBa0U7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvRUFBb0U7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QiLCJmaWxlIjoiY29tcG9uZW50cy9pY29uLWNhcmQvaWNvbi1jYXJkLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2RlY29yYXRlID0gKHRoaXMgJiYgdGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn07XHJcbnZhciBfX21ldGFkYXRhID0gKHRoaXMgJiYgdGhpcy5fX21ldGFkYXRhKSB8fCBmdW5jdGlvbiAoaywgdikge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xyXG59O1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBhdXJlbGlhX2ZyYW1ld29ya18xID0gcmVxdWlyZShcImF1cmVsaWEtZnJhbWV3b3JrXCIpO1xyXG52YXIgSWNvbkNhcmQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBJY29uQ2FyZCgpIHtcclxuICAgICAgICB0aGlzLmljb24gPSAnJztcclxuICAgICAgICB0aGlzLmJhY2tncm91bmRDb2xvciA9ICcnO1xyXG4gICAgICAgIHRoaXMudGV4dENvbG9yID0gJyc7XHJcbiAgICB9XHJcbiAgICBJY29uQ2FyZC5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbiAobW9kZWwpIHtcclxuICAgICAgICB0aGlzLm1vZGVsID0gbW9kZWw7XHJcbiAgICB9O1xyXG4gICAgSWNvbkNhcmQucHJvdG90eXBlLmF0dGFjaGVkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmJhY2tncm91bmRDb2xvcikge1xyXG4gICAgICAgICAgICB0aGlzLnNldFBhcmVudEJhY2tncm91bmRDb2xvcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5tb2RlbC50ZXh0Q29sb3IpIHtcclxuICAgICAgICAgICAgdGhpcy50ZXh0Q29sb3IgPSBcImNvbG9yOiBcIiArIHRoaXMubW9kZWwudGV4dENvbG9yICsgXCI7XCI7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIEljb25DYXJkLnByb3RvdHlwZS5nZXRCYWNrZ3JvdW5kQ29sb3IgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwuYmFja2dyb3VuZENvbG9yXHJcbiAgICAgICAgICAgID8gXCJiYWNrZ3JvdW5kLWNvbG9yOiBcIiArIHRoaXMubW9kZWwuYmFja2dyb3VuZENvbG9yICsgXCI7XCJcclxuICAgICAgICAgICAgOiAnJztcclxuICAgIH07XHJcbiAgICBJY29uQ2FyZC5wcm90b3R5cGUuc2V0UGFyZW50QmFja2dyb3VuZENvbG9yID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuaWNvbkNhcmRFbGVtZW50LnBhcmVudE5vZGUuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5tb2RlbC5iYWNrZ3JvdW5kQ29sb3I7XHJcbiAgICB9O1xyXG4gICAgX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5iaW5kYWJsZSxcclxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxyXG4gICAgXSwgSWNvbkNhcmQucHJvdG90eXBlLCBcIm1vZGVsXCIsIHZvaWQgMCk7XHJcbiAgICByZXR1cm4gSWNvbkNhcmQ7XHJcbn0oKSk7XHJcbmV4cG9ydHMuSWNvbkNhcmQgPSBJY29uQ2FyZDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/icon-card/icon-card\n')},"components/icon-card/icon-card.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<div css.bind=\\"getBackgroundColor()\\" class=\\"icon-card\\" ref=\\"iconCardElement\\">\\r\\n\\t\\t<div class=\\"icon-card__content\\">\\r\\n\\t\\t\\t<div class=\\"icon-card__icon-holder\\">\\r\\n\\t\\t\\t\\t<img if.bind=\\"model.icon\\" src=\\"${model.icon.fullPath}\\" class=\\"icon-card__icon\\" />\\r\\n\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t<h3 class=\\"icon-card__heading ds-title-medium\\" css.bind=\\"textColor\\">${model.heading}<\/h3>\\r\\n\\r\\n\\t\\t\\t<content-divider model.bind=\\"model.contentDivider\\" containerless><\/content-divider>\\r\\n\\r\\n\\t\\t\\t<div class=\\"icon-card__body-copy col-xs-11\\" innerhtml.bind=\\"model.bodyCopy\\" css.bind=\\"textColor\\"><\/div>\\r\\n\\t\\t<\/div>\\r\\n\\t<\/div>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9pY29uLWNhcmQvaWNvbi1jYXJkLmh0bWw/NWUyMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrUEFBK1Asb0JBQW9CLHVJQUF1SSxjQUFjIiwiZmlsZSI6ImNvbXBvbmVudHMvaWNvbi1jYXJkL2ljb24tY2FyZC5odG1sLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBcIjx0ZW1wbGF0ZT5cXHJcXG5cXHQ8ZGl2IGNzcy5iaW5kPVxcXCJnZXRCYWNrZ3JvdW5kQ29sb3IoKVxcXCIgY2xhc3M9XFxcImljb24tY2FyZFxcXCIgcmVmPVxcXCJpY29uQ2FyZEVsZW1lbnRcXFwiPlxcclxcblxcdFxcdDxkaXYgY2xhc3M9XFxcImljb24tY2FyZF9fY29udGVudFxcXCI+XFxyXFxuXFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiaWNvbi1jYXJkX19pY29uLWhvbGRlclxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0PGltZyBpZi5iaW5kPVxcXCJtb2RlbC5pY29uXFxcIiBzcmM9XFxcIiR7bW9kZWwuaWNvbi5mdWxsUGF0aH1cXFwiIGNsYXNzPVxcXCJpY29uLWNhcmRfX2ljb25cXFwiIC8+XFxyXFxuXFx0XFx0XFx0PC9kaXY+XFxyXFxuXFxyXFxuXFx0XFx0XFx0PGgzIGNsYXNzPVxcXCJpY29uLWNhcmRfX2hlYWRpbmcgZHMtdGl0bGUtbWVkaXVtXFxcIiBjc3MuYmluZD1cXFwidGV4dENvbG9yXFxcIj4ke21vZGVsLmhlYWRpbmd9PC9oMz5cXHJcXG5cXHJcXG5cXHRcXHRcXHQ8Y29udGVudC1kaXZpZGVyIG1vZGVsLmJpbmQ9XFxcIm1vZGVsLmNvbnRlbnREaXZpZGVyXFxcIiBjb250YWluZXJsZXNzPjwvY29udGVudC1kaXZpZGVyPlxcclxcblxcclxcblxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImljb24tY2FyZF9fYm9keS1jb3B5IGNvbC14cy0xMVxcXCIgaW5uZXJodG1sLmJpbmQ9XFxcIm1vZGVsLmJvZHlDb3B5XFxcIiBjc3MuYmluZD1cXFwidGV4dENvbG9yXFxcIj48L2Rpdj5cXHJcXG5cXHRcXHQ8L2Rpdj5cXHJcXG5cXHQ8L2Rpdj5cXHJcXG48L3RlbXBsYXRlPlxcclxcblwiOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///components/icon-card/icon-card.html\n')},"components/icon-list-item/icon-list-item":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar IconListItem = /** @class */ (function () {\r\n    function IconListItem() {\r\n        this.icon = \'\';\r\n        this.modifier = \'\';\r\n    }\r\n    IconListItem.prototype.activate = function (model) {\r\n        this.model = model;\r\n    };\r\n    IconListItem.prototype.attached = function () {\r\n        if (this.model.icon) {\r\n            this.icon = "background-image: url(\\"" + this.model.icon.fullPath + "\\");";\r\n            var str = this.model.icon.fullPath;\r\n            if (str.indexOf(\'new\') >= 0) {\r\n                this.modifier = \'icon-list-item--is-new\';\r\n            }\r\n        }\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Object)\r\n    ], IconListItem.prototype, "model", void 0);\r\n    return IconListItem;\r\n}());\r\nexports.IconListItem = IconListItem;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9pY29uLWxpc3QtaXRlbS9pY29uLWxpc3QtaXRlbS50cz9jZWFkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLFFBQVE7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxjQUFjO0FBQzVELDBCQUEwQixtQkFBTyxDQUFDLG1CQUFtQjtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFGQUFxRjtBQUNyRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEIiwiZmlsZSI6ImNvbXBvbmVudHMvaWNvbi1saXN0LWl0ZW0vaWNvbi1saXN0LWl0ZW0uanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxudmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufTtcclxudmFyIF9fbWV0YWRhdGEgPSAodGhpcyAmJiB0aGlzLl9fbWV0YWRhdGEpIHx8IGZ1bmN0aW9uIChrLCB2KSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEoaywgdik7XHJcbn07XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIGF1cmVsaWFfZnJhbWV3b3JrXzEgPSByZXF1aXJlKFwiYXVyZWxpYS1mcmFtZXdvcmtcIik7XHJcbnZhciBJY29uTGlzdEl0ZW0gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBJY29uTGlzdEl0ZW0oKSB7XHJcbiAgICAgICAgdGhpcy5pY29uID0gJyc7XHJcbiAgICAgICAgdGhpcy5tb2RpZmllciA9ICcnO1xyXG4gICAgfVxyXG4gICAgSWNvbkxpc3RJdGVtLnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uIChtb2RlbCkge1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSBtb2RlbDtcclxuICAgIH07XHJcbiAgICBJY29uTGlzdEl0ZW0ucHJvdG90eXBlLmF0dGFjaGVkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmljb24pIHtcclxuICAgICAgICAgICAgdGhpcy5pY29uID0gXCJiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcIlwiICsgdGhpcy5tb2RlbC5pY29uLmZ1bGxQYXRoICsgXCJcXFwiKTtcIjtcclxuICAgICAgICAgICAgdmFyIHN0ciA9IHRoaXMubW9kZWwuaWNvbi5mdWxsUGF0aDtcclxuICAgICAgICAgICAgaWYgKHN0ci5pbmRleE9mKCduZXcnKSA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGlmaWVyID0gJ2ljb24tbGlzdC1pdGVtLS1pcy1uZXcnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuYmluZGFibGUsXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcclxuICAgIF0sIEljb25MaXN0SXRlbS5wcm90b3R5cGUsIFwibW9kZWxcIiwgdm9pZCAwKTtcclxuICAgIHJldHVybiBJY29uTGlzdEl0ZW07XHJcbn0oKSk7XHJcbmV4cG9ydHMuSWNvbkxpc3RJdGVtID0gSWNvbkxpc3RJdGVtO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///components/icon-list-item/icon-list-item\n')},"components/icon-list-item/icon-list-item.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<div css.bind=\\"icon\\" innerhtml.bind=\\"model.listItem\\" class=\\"icon-list-item ds-p-base ${modifier}\\"><\/div>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9pY29uLWxpc3QtaXRlbS9pY29uLWxpc3QtaXRlbS5odG1sP2I5ZTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsOEhBQThILFNBQVMiLCJmaWxlIjoiY29tcG9uZW50cy9pY29uLWxpc3QtaXRlbS9pY29uLWxpc3QtaXRlbS5odG1sLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBcIjx0ZW1wbGF0ZT5cXHJcXG5cXHQ8ZGl2IGNzcy5iaW5kPVxcXCJpY29uXFxcIiBpbm5lcmh0bWwuYmluZD1cXFwibW9kZWwubGlzdEl0ZW1cXFwiIGNsYXNzPVxcXCJpY29uLWxpc3QtaXRlbSBkcy1wLWJhc2UgJHttb2RpZmllcn1cXFwiPjwvZGl2PlxcclxcbjwvdGVtcGxhdGU+XFxyXFxuXCI7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/icon-list-item/icon-list-item.html\n')},"components/image-card/image-card":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar ImageOrientation_1 = __webpack_require__(180);\r\nvar ImageUtilities_1 = __webpack_require__(24);\r\nvar ImageCard = /** @class */ (function () {\r\n    function ImageCard() {\r\n        this.image = \'\';\r\n    }\r\n    ImageCard.prototype.activate = function (model) {\r\n        this.model = model;\r\n    };\r\n    ImageCard.prototype.getOrientation = function () {\r\n        switch (this.model.imageOrientation) {\r\n            case ImageOrientation_1.ImageOrientation.Landscape:\r\n                return \'landscape\';\r\n            case ImageOrientation_1.ImageOrientation.Portrait:\r\n                return \'portrait\';\r\n            default:\r\n                return \'landscape\';\r\n        }\r\n    };\r\n    ImageCard.prototype.attached = function () {\r\n        if (this.model.callToActionType === \'button\') {\r\n            this.model.callToActionType = \'ds-btn-primary\';\r\n        }\r\n        if (this.model.image && this.model.image.hasImage) {\r\n            var containerWidth = this.imageElement.clientWidth;\r\n            var containerHeight = this.imageElement.clientHeight;\r\n            this.image = ImageUtilities_1.getNormalizedImageUrl(this.model.image.fullPath, containerWidth, containerHeight);\r\n        }\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Object)\r\n    ], ImageCard.prototype, "model", void 0);\r\n    return ImageCard;\r\n}());\r\nexports.ImageCard = ImageCard;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9pbWFnZS1jYXJkL2ltYWdlLWNhcmQudHM/ZDUxYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxRQUFRO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RCwwQkFBMEIsbUJBQU8sQ0FBQyxtQkFBbUI7QUFDckQseUJBQXlCLG1CQUFPLENBQUMsR0FBOEI7QUFDL0QsdUJBQXVCLG1CQUFPLENBQUMsRUFBZ0M7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCIsImZpbGUiOiJjb21wb25lbnRzL2ltYWdlLWNhcmQvaW1hZ2UtY2FyZC5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG52YXIgX19kZWNvcmF0ZSA9ICh0aGlzICYmIHRoaXMuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59O1xyXG52YXIgX19tZXRhZGF0YSA9ICh0aGlzICYmIHRoaXMuX19tZXRhZGF0YSkgfHwgZnVuY3Rpb24gKGssIHYpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShrLCB2KTtcclxufTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgYXVyZWxpYV9mcmFtZXdvcmtfMSA9IHJlcXVpcmUoXCJhdXJlbGlhLWZyYW1ld29ya1wiKTtcclxudmFyIEltYWdlT3JpZW50YXRpb25fMSA9IHJlcXVpcmUoXCIuLi8uLi9lbnVtcy9JbWFnZU9yaWVudGF0aW9uXCIpO1xyXG52YXIgSW1hZ2VVdGlsaXRpZXNfMSA9IHJlcXVpcmUoXCIuLi8uLi91dGlsaXRpZXMvSW1hZ2VVdGlsaXRpZXNcIik7XHJcbnZhciBJbWFnZUNhcmQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBJbWFnZUNhcmQoKSB7XHJcbiAgICAgICAgdGhpcy5pbWFnZSA9ICcnO1xyXG4gICAgfVxyXG4gICAgSW1hZ2VDYXJkLnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uIChtb2RlbCkge1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSBtb2RlbDtcclxuICAgIH07XHJcbiAgICBJbWFnZUNhcmQucHJvdG90eXBlLmdldE9yaWVudGF0aW9uID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHN3aXRjaCAodGhpcy5tb2RlbC5pbWFnZU9yaWVudGF0aW9uKSB7XHJcbiAgICAgICAgICAgIGNhc2UgSW1hZ2VPcmllbnRhdGlvbl8xLkltYWdlT3JpZW50YXRpb24uTGFuZHNjYXBlOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdsYW5kc2NhcGUnO1xyXG4gICAgICAgICAgICBjYXNlIEltYWdlT3JpZW50YXRpb25fMS5JbWFnZU9yaWVudGF0aW9uLlBvcnRyYWl0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdwb3J0cmFpdCc7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2xhbmRzY2FwZSc7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIEltYWdlQ2FyZC5wcm90b3R5cGUuYXR0YWNoZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwuY2FsbFRvQWN0aW9uVHlwZSA9PT0gJ2J1dHRvbicpIHtcclxuICAgICAgICAgICAgdGhpcy5tb2RlbC5jYWxsVG9BY3Rpb25UeXBlID0gJ2RzLWJ0bi1wcmltYXJ5JztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwuaW1hZ2UgJiYgdGhpcy5tb2RlbC5pbWFnZS5oYXNJbWFnZSkge1xyXG4gICAgICAgICAgICB2YXIgY29udGFpbmVyV2lkdGggPSB0aGlzLmltYWdlRWxlbWVudC5jbGllbnRXaWR0aDtcclxuICAgICAgICAgICAgdmFyIGNvbnRhaW5lckhlaWdodCA9IHRoaXMuaW1hZ2VFbGVtZW50LmNsaWVudEhlaWdodDtcclxuICAgICAgICAgICAgdGhpcy5pbWFnZSA9IEltYWdlVXRpbGl0aWVzXzEuZ2V0Tm9ybWFsaXplZEltYWdlVXJsKHRoaXMubW9kZWwuaW1hZ2UuZnVsbFBhdGgsIGNvbnRhaW5lcldpZHRoLCBjb250YWluZXJIZWlnaHQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBfX2RlY29yYXRlKFtcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLmJpbmRhYmxlLFxyXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXHJcbiAgICBdLCBJbWFnZUNhcmQucHJvdG90eXBlLCBcIm1vZGVsXCIsIHZvaWQgMCk7XHJcbiAgICByZXR1cm4gSW1hZ2VDYXJkO1xyXG59KCkpO1xyXG5leHBvcnRzLkltYWdlQ2FyZCA9IEltYWdlQ2FyZDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/image-card/image-card\n')},"components/image-card/image-card.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<section class=\\"image-card\\" >\\r\\n\\t\\t<div class=\\"image-card__wrapper ${model.isContainerless ? \'image-card__wrapper--is-containerless\' : \'\'}\\">\\r\\n\\t\\t\\t<div class=\\"image-card__image-wrapper\\" if.bind=\\"model.image\\">\\r\\n\\t\\t\\t\\t<div class=\\"image-card__image-bottom-padding-${getOrientation()} image-card__image\\" css.bind=\\"image\\" element.ref=\\"imageElement\\"><\/div>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<div class=\\"image-card__icon-holder\\" if.bind=\\"model.icon && !model.image\\">\\r\\n\\t\\t\\t\\t<img src=\\"${model.icon.fullPath}\\" class=\\"image-card__icon\\" />\\r\\n\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t<div class=\\"image-card__copy-area\\">\\r\\n\\t\\t\\t\\t<div class=\\"image-card__headline ds-title-medium\\">${model.headline}<\/div>\\r\\n\\t\\t\\t\\t<content-divider if.bind=\\"model.bodyText || model.callToAction.canDisplayAsTextLink\\" model.bind=\\"model.contentDivider\\" containerless><\/content-divider>\\r\\n\\r\\n\\t\\t\\t\\t<div if.bind=\\"model.bodyText\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\"image-card__body-text\\" innerhtml.bind=\\"model.bodyText\\"><\/div>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t\\t<div if.bind=\\"model.callToAction.canDisplayAsTextLink\\" class=\\"image-card__call-to-action center-xs\\">\\r\\n\\t\\t\\t\\t\\t<a class=\\"${model.callToActionType} truncate-text image-card__call-to-action-button\\" href.bind=\\"model.callToAction.url\\" target=\\"${model.callToAction.newWindow ? \'_blank\' : \'_self\'}\\"\\r\\n\\t\\t\\t\\t\\t\\ttitle=\\"${model.callToAction.linkTitle}\\">\\r\\n\\t\\t\\t\\t\\t\\t${model.callToAction.linkTitle}\\r\\n\\t\\t\\t\\t\\t<\/a>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t<\/div>\\r\\n\\t<\/section>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9pbWFnZS1jYXJkL2ltYWdlLWNhcmQuaHRtbD9jMDVmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDRHQUE0RyxxRUFBcUUsMElBQTBJLGlCQUFpQiw0TUFBNE0sb0JBQW9CLHFLQUFxSyxlQUFlLDZkQUE2ZCx1QkFBdUIsbUdBQW1HLGtEQUFrRCw0QkFBNEIsNkJBQTZCLHFCQUFxQiw2QkFBNkIiLCJmaWxlIjoiY29tcG9uZW50cy9pbWFnZS1jYXJkL2ltYWdlLWNhcmQuaHRtbC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gXCI8dGVtcGxhdGU+XFxyXFxuXFx0PHNlY3Rpb24gY2xhc3M9XFxcImltYWdlLWNhcmRcXFwiID5cXHJcXG5cXHRcXHQ8ZGl2IGNsYXNzPVxcXCJpbWFnZS1jYXJkX193cmFwcGVyICR7bW9kZWwuaXNDb250YWluZXJsZXNzID8gJ2ltYWdlLWNhcmRfX3dyYXBwZXItLWlzLWNvbnRhaW5lcmxlc3MnIDogJyd9XFxcIj5cXHJcXG5cXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJpbWFnZS1jYXJkX19pbWFnZS13cmFwcGVyXFxcIiBpZi5iaW5kPVxcXCJtb2RlbC5pbWFnZVxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiaW1hZ2UtY2FyZF9faW1hZ2UtYm90dG9tLXBhZGRpbmctJHtnZXRPcmllbnRhdGlvbigpfSBpbWFnZS1jYXJkX19pbWFnZVxcXCIgY3NzLmJpbmQ9XFxcImltYWdlXFxcIiBlbGVtZW50LnJlZj1cXFwiaW1hZ2VFbGVtZW50XFxcIj48L2Rpdj5cXHJcXG5cXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJpbWFnZS1jYXJkX19pY29uLWhvbGRlclxcXCIgaWYuYmluZD1cXFwibW9kZWwuaWNvbiAmJiAhbW9kZWwuaW1hZ2VcXFwiPlxcclxcblxcdFxcdFxcdFxcdDxpbWcgc3JjPVxcXCIke21vZGVsLmljb24uZnVsbFBhdGh9XFxcIiBjbGFzcz1cXFwiaW1hZ2UtY2FyZF9faWNvblxcXCIgLz5cXHJcXG5cXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHJcXG5cXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJpbWFnZS1jYXJkX19jb3B5LWFyZWFcXFwiPlxcclxcblxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImltYWdlLWNhcmRfX2hlYWRsaW5lIGRzLXRpdGxlLW1lZGl1bVxcXCI+JHttb2RlbC5oZWFkbGluZX08L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHQ8Y29udGVudC1kaXZpZGVyIGlmLmJpbmQ9XFxcIm1vZGVsLmJvZHlUZXh0IHx8IG1vZGVsLmNhbGxUb0FjdGlvbi5jYW5EaXNwbGF5QXNUZXh0TGlua1xcXCIgbW9kZWwuYmluZD1cXFwibW9kZWwuY29udGVudERpdmlkZXJcXFwiIGNvbnRhaW5lcmxlc3M+PC9jb250ZW50LWRpdmlkZXI+XFxyXFxuXFxyXFxuXFx0XFx0XFx0XFx0PGRpdiBpZi5iaW5kPVxcXCJtb2RlbC5ib2R5VGV4dFxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiaW1hZ2UtY2FyZF9fYm9keS10ZXh0XFxcIiBpbm5lcmh0bWwuYmluZD1cXFwibW9kZWwuYm9keVRleHRcXFwiPjwvZGl2PlxcclxcblxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcclxcblxcdFxcdFxcdFxcdDxkaXYgaWYuYmluZD1cXFwibW9kZWwuY2FsbFRvQWN0aW9uLmNhbkRpc3BsYXlBc1RleHRMaW5rXFxcIiBjbGFzcz1cXFwiaW1hZ2UtY2FyZF9fY2FsbC10by1hY3Rpb24gY2VudGVyLXhzXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8YSBjbGFzcz1cXFwiJHttb2RlbC5jYWxsVG9BY3Rpb25UeXBlfSB0cnVuY2F0ZS10ZXh0IGltYWdlLWNhcmRfX2NhbGwtdG8tYWN0aW9uLWJ1dHRvblxcXCIgaHJlZi5iaW5kPVxcXCJtb2RlbC5jYWxsVG9BY3Rpb24udXJsXFxcIiB0YXJnZXQ9XFxcIiR7bW9kZWwuY2FsbFRvQWN0aW9uLm5ld1dpbmRvdyA/ICdfYmxhbmsnIDogJ19zZWxmJ31cXFwiXFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0dGl0bGU9XFxcIiR7bW9kZWwuY2FsbFRvQWN0aW9uLmxpbmtUaXRsZX1cXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdCR7bW9kZWwuY2FsbFRvQWN0aW9uLmxpbmtUaXRsZX1cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8L2E+XFxyXFxuXFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0PC9kaXY+XFxyXFxuXFx0PC9zZWN0aW9uPlxcclxcbjwvdGVtcGxhdGU+XFxyXFxuXCI7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/image-card/image-card.html\n')},"components/image-gallery/image-gallery":function(module,exports,__webpack_require__){"use strict";eval("\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar AspectRatio_1 = __webpack_require__(179);\r\nvar ImageUtilities_1 = __webpack_require__(24);\r\nvar photoswipeUtils_1 = __webpack_require__(178);\r\nvar ImageGallery = /** @class */ (function () {\r\n    function ImageGallery() {\r\n    }\r\n    ImageGallery.prototype.activate = function (model) {\r\n        this.model = model;\r\n        this.aspectRatioStyle = this.getAspectRatioStyle();\r\n    };\r\n    ImageGallery.prototype.attached = function () {\r\n        var _this = this;\r\n        var srcSets = this.model.images.map(function (imageViewModel) {\r\n            return photoswipeUtils_1.createPhotoSwipeSrcSet(imageViewModel, ImageUtilities_1.landscapeImageWidths);\r\n        });\r\n        var showAsInline = {\r\n            closeOnScroll: false,\r\n            closeOnVerticalDrag: false,\r\n            escKey: false,\r\n            focus: false,\r\n            getThumbBoundsFn: function (index) {\r\n                var templateBounds = _this.photoswipeElement.parentElement.getBoundingClientRect();\r\n                return {\r\n                    w: templateBounds.width,\r\n                    x: templateBounds.left,\r\n                    y: templateBounds.top + window.pageYOffset\r\n                };\r\n            },\r\n            history: false,\r\n            modal: false\r\n        };\r\n        var toggles = {\r\n            captionEl: this.model.showCaptions === '1',\r\n            fullscreenEl: this.model.showFullScreenButton === '1',\r\n        };\r\n        var disableClose = {\r\n            closeEl: false,\r\n            closeElClasses: []\r\n        };\r\n        // Groups of related options needed to create an inline gallery\r\n        // tslint:disable-next-line:prefer-object-spread\r\n        var options = Object.assign({}, showAsInline, toggles, disableClose, { zoomEl: false });\r\n        var photoSwipeInstance = new PhotoSwipe(this.photoswipeElement, PhotoSwipeUI_Default, srcSets, // Casting to any because the constructor for this is strongly typed when it should instead accept a generic\r\n        options);\r\n        // Inline gallery overrides\r\n        // Basically needed so the zoom goes to the right area\r\n        photoSwipeInstance.listen('updateScrollOffset', function (offset) {\r\n            var bounds = _this.photoswipeElement.getBoundingClientRect();\r\n            offset.x += bounds.left;\r\n            offset.y += bounds.top;\r\n        });\r\n        // Responsive image overrides\r\n        var imageGalleryContainerWidth = 0;\r\n        photoSwipeInstance.listen('beforeResize', function () {\r\n            imageGalleryContainerWidth =\r\n                _this.photoswipeElement.offsetWidth * window.devicePixelRatio;\r\n        });\r\n        // photoswipe expects you to mutate the item passed into the gettingData callback\r\n        // rather than just return a value from the callback... which isn't great\r\n        // .... so that is why it's named eventualItem,\r\n        // it starts out as our srcSet, which is just a collection of Photoswipe items representing different resolutions\r\n        // of the same image. We find the correct PhotoSwipe.Item and assign it to the eventualItem\r\n        // based off what image width is closest to the viewport width\r\n        photoSwipeInstance.listen('gettingData', function (index, eventualItem) {\r\n            // tslint:disable-next-line:prefer-object-spread\r\n            eventualItem = Object.assign(eventualItem, eventualItem[ImageUtilities_1.getNormalizedImageDimension(ImageUtilities_1.landscapeImageWidths, imageGalleryContainerWidth)]);\r\n        });\r\n        photoSwipeInstance.init();\r\n    };\r\n    // TODO Move this out to an attribute\r\n    ImageGallery.prototype.getAspectRatioStyle = function () {\r\n        switch (this.model.aspectRatio) {\r\n            case AspectRatio_1.AspectRatio.SixteenByNine:\r\n                return 'aspect-ratio--16x9';\r\n            case AspectRatio_1.AspectRatio.FourByThree:\r\n                return 'aspect-ratio--4x3';\r\n            case AspectRatio_1.AspectRatio.OneByOne:\r\n                return 'aspect-ratio--1x1';\r\n            default:\r\n                return 'aspect-ratio--16x9';\r\n        }\r\n    };\r\n    return ImageGallery;\r\n}());\r\nexports.ImageGallery = ImageGallery;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9pbWFnZS1nYWxsZXJ5L2ltYWdlLWdhbGxlcnkudHM/MDVjOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE4QyxjQUFjO0FBQzVELG9CQUFvQixtQkFBTyxDQUFDLEdBQXlCO0FBQ3JELHVCQUF1QixtQkFBTyxDQUFDLEVBQWdDO0FBQy9ELHdCQUF3QixtQkFBTyxDQUFDLEdBQW1CO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLHdDQUF3QyxnQkFBZ0I7QUFDOUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCIsImZpbGUiOiJjb21wb25lbnRzL2ltYWdlLWdhbGxlcnkvaW1hZ2UtZ2FsbGVyeS5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBBc3BlY3RSYXRpb18xID0gcmVxdWlyZShcIi4uLy4uL2VudW1zL0FzcGVjdFJhdGlvXCIpO1xyXG52YXIgSW1hZ2VVdGlsaXRpZXNfMSA9IHJlcXVpcmUoXCIuLi8uLi91dGlsaXRpZXMvSW1hZ2VVdGlsaXRpZXNcIik7XHJcbnZhciBwaG90b3N3aXBlVXRpbHNfMSA9IHJlcXVpcmUoXCIuL3Bob3Rvc3dpcGVVdGlsc1wiKTtcclxudmFyIEltYWdlR2FsbGVyeSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEltYWdlR2FsbGVyeSgpIHtcclxuICAgIH1cclxuICAgIEltYWdlR2FsbGVyeS5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbiAobW9kZWwpIHtcclxuICAgICAgICB0aGlzLm1vZGVsID0gbW9kZWw7XHJcbiAgICAgICAgdGhpcy5hc3BlY3RSYXRpb1N0eWxlID0gdGhpcy5nZXRBc3BlY3RSYXRpb1N0eWxlKCk7XHJcbiAgICB9O1xyXG4gICAgSW1hZ2VHYWxsZXJ5LnByb3RvdHlwZS5hdHRhY2hlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHZhciBzcmNTZXRzID0gdGhpcy5tb2RlbC5pbWFnZXMubWFwKGZ1bmN0aW9uIChpbWFnZVZpZXdNb2RlbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gcGhvdG9zd2lwZVV0aWxzXzEuY3JlYXRlUGhvdG9Td2lwZVNyY1NldChpbWFnZVZpZXdNb2RlbCwgSW1hZ2VVdGlsaXRpZXNfMS5sYW5kc2NhcGVJbWFnZVdpZHRocyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdmFyIHNob3dBc0lubGluZSA9IHtcclxuICAgICAgICAgICAgY2xvc2VPblNjcm9sbDogZmFsc2UsXHJcbiAgICAgICAgICAgIGNsb3NlT25WZXJ0aWNhbERyYWc6IGZhbHNlLFxyXG4gICAgICAgICAgICBlc2NLZXk6IGZhbHNlLFxyXG4gICAgICAgICAgICBmb2N1czogZmFsc2UsXHJcbiAgICAgICAgICAgIGdldFRodW1iQm91bmRzRm46IGZ1bmN0aW9uIChpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHRlbXBsYXRlQm91bmRzID0gX3RoaXMucGhvdG9zd2lwZUVsZW1lbnQucGFyZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdzogdGVtcGxhdGVCb3VuZHMud2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgeDogdGVtcGxhdGVCb3VuZHMubGVmdCxcclxuICAgICAgICAgICAgICAgICAgICB5OiB0ZW1wbGF0ZUJvdW5kcy50b3AgKyB3aW5kb3cucGFnZVlPZmZzZXRcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGhpc3Rvcnk6IGZhbHNlLFxyXG4gICAgICAgICAgICBtb2RhbDogZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgICAgIHZhciB0b2dnbGVzID0ge1xyXG4gICAgICAgICAgICBjYXB0aW9uRWw6IHRoaXMubW9kZWwuc2hvd0NhcHRpb25zID09PSAnMScsXHJcbiAgICAgICAgICAgIGZ1bGxzY3JlZW5FbDogdGhpcy5tb2RlbC5zaG93RnVsbFNjcmVlbkJ1dHRvbiA9PT0gJzEnLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdmFyIGRpc2FibGVDbG9zZSA9IHtcclxuICAgICAgICAgICAgY2xvc2VFbDogZmFsc2UsXHJcbiAgICAgICAgICAgIGNsb3NlRWxDbGFzc2VzOiBbXVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgLy8gR3JvdXBzIG9mIHJlbGF0ZWQgb3B0aW9ucyBuZWVkZWQgdG8gY3JlYXRlIGFuIGlubGluZSBnYWxsZXJ5XHJcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnByZWZlci1vYmplY3Qtc3ByZWFkXHJcbiAgICAgICAgdmFyIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBzaG93QXNJbmxpbmUsIHRvZ2dsZXMsIGRpc2FibGVDbG9zZSwgeyB6b29tRWw6IGZhbHNlIH0pO1xyXG4gICAgICAgIHZhciBwaG90b1N3aXBlSW5zdGFuY2UgPSBuZXcgUGhvdG9Td2lwZSh0aGlzLnBob3Rvc3dpcGVFbGVtZW50LCBQaG90b1N3aXBlVUlfRGVmYXVsdCwgc3JjU2V0cywgLy8gQ2FzdGluZyB0byBhbnkgYmVjYXVzZSB0aGUgY29uc3RydWN0b3IgZm9yIHRoaXMgaXMgc3Ryb25nbHkgdHlwZWQgd2hlbiBpdCBzaG91bGQgaW5zdGVhZCBhY2NlcHQgYSBnZW5lcmljXHJcbiAgICAgICAgb3B0aW9ucyk7XHJcbiAgICAgICAgLy8gSW5saW5lIGdhbGxlcnkgb3ZlcnJpZGVzXHJcbiAgICAgICAgLy8gQmFzaWNhbGx5IG5lZWRlZCBzbyB0aGUgem9vbSBnb2VzIHRvIHRoZSByaWdodCBhcmVhXHJcbiAgICAgICAgcGhvdG9Td2lwZUluc3RhbmNlLmxpc3RlbigndXBkYXRlU2Nyb2xsT2Zmc2V0JywgZnVuY3Rpb24gKG9mZnNldCkge1xyXG4gICAgICAgICAgICB2YXIgYm91bmRzID0gX3RoaXMucGhvdG9zd2lwZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgICAgIG9mZnNldC54ICs9IGJvdW5kcy5sZWZ0O1xyXG4gICAgICAgICAgICBvZmZzZXQueSArPSBib3VuZHMudG9wO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vIFJlc3BvbnNpdmUgaW1hZ2Ugb3ZlcnJpZGVzXHJcbiAgICAgICAgdmFyIGltYWdlR2FsbGVyeUNvbnRhaW5lcldpZHRoID0gMDtcclxuICAgICAgICBwaG90b1N3aXBlSW5zdGFuY2UubGlzdGVuKCdiZWZvcmVSZXNpemUnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGltYWdlR2FsbGVyeUNvbnRhaW5lcldpZHRoID1cclxuICAgICAgICAgICAgICAgIF90aGlzLnBob3Rvc3dpcGVFbGVtZW50Lm9mZnNldFdpZHRoICogd2luZG93LmRldmljZVBpeGVsUmF0aW87XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gcGhvdG9zd2lwZSBleHBlY3RzIHlvdSB0byBtdXRhdGUgdGhlIGl0ZW0gcGFzc2VkIGludG8gdGhlIGdldHRpbmdEYXRhIGNhbGxiYWNrXHJcbiAgICAgICAgLy8gcmF0aGVyIHRoYW4ganVzdCByZXR1cm4gYSB2YWx1ZSBmcm9tIHRoZSBjYWxsYmFjay4uLiB3aGljaCBpc24ndCBncmVhdFxyXG4gICAgICAgIC8vIC4uLi4gc28gdGhhdCBpcyB3aHkgaXQncyBuYW1lZCBldmVudHVhbEl0ZW0sXHJcbiAgICAgICAgLy8gaXQgc3RhcnRzIG91dCBhcyBvdXIgc3JjU2V0LCB3aGljaCBpcyBqdXN0IGEgY29sbGVjdGlvbiBvZiBQaG90b3N3aXBlIGl0ZW1zIHJlcHJlc2VudGluZyBkaWZmZXJlbnQgcmVzb2x1dGlvbnNcclxuICAgICAgICAvLyBvZiB0aGUgc2FtZSBpbWFnZS4gV2UgZmluZCB0aGUgY29ycmVjdCBQaG90b1N3aXBlLkl0ZW0gYW5kIGFzc2lnbiBpdCB0byB0aGUgZXZlbnR1YWxJdGVtXHJcbiAgICAgICAgLy8gYmFzZWQgb2ZmIHdoYXQgaW1hZ2Ugd2lkdGggaXMgY2xvc2VzdCB0byB0aGUgdmlld3BvcnQgd2lkdGhcclxuICAgICAgICBwaG90b1N3aXBlSW5zdGFuY2UubGlzdGVuKCdnZXR0aW5nRGF0YScsIGZ1bmN0aW9uIChpbmRleCwgZXZlbnR1YWxJdGVtKSB7XHJcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpwcmVmZXItb2JqZWN0LXNwcmVhZFxyXG4gICAgICAgICAgICBldmVudHVhbEl0ZW0gPSBPYmplY3QuYXNzaWduKGV2ZW50dWFsSXRlbSwgZXZlbnR1YWxJdGVtW0ltYWdlVXRpbGl0aWVzXzEuZ2V0Tm9ybWFsaXplZEltYWdlRGltZW5zaW9uKEltYWdlVXRpbGl0aWVzXzEubGFuZHNjYXBlSW1hZ2VXaWR0aHMsIGltYWdlR2FsbGVyeUNvbnRhaW5lcldpZHRoKV0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHBob3RvU3dpcGVJbnN0YW5jZS5pbml0KCk7XHJcbiAgICB9O1xyXG4gICAgLy8gVE9ETyBNb3ZlIHRoaXMgb3V0IHRvIGFuIGF0dHJpYnV0ZVxyXG4gICAgSW1hZ2VHYWxsZXJ5LnByb3RvdHlwZS5nZXRBc3BlY3RSYXRpb1N0eWxlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHN3aXRjaCAodGhpcy5tb2RlbC5hc3BlY3RSYXRpbykge1xyXG4gICAgICAgICAgICBjYXNlIEFzcGVjdFJhdGlvXzEuQXNwZWN0UmF0aW8uU2l4dGVlbkJ5TmluZTpcclxuICAgICAgICAgICAgICAgIHJldHVybiAnYXNwZWN0LXJhdGlvLS0xNng5JztcclxuICAgICAgICAgICAgY2FzZSBBc3BlY3RSYXRpb18xLkFzcGVjdFJhdGlvLkZvdXJCeVRocmVlOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdhc3BlY3QtcmF0aW8tLTR4Myc7XHJcbiAgICAgICAgICAgIGNhc2UgQXNwZWN0UmF0aW9fMS5Bc3BlY3RSYXRpby5PbmVCeU9uZTpcclxuICAgICAgICAgICAgICAgIHJldHVybiAnYXNwZWN0LXJhdGlvLS0xeDEnO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdhc3BlY3QtcmF0aW8tLTE2eDknO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICByZXR1cm4gSW1hZ2VHYWxsZXJ5O1xyXG59KCkpO1xyXG5leHBvcnRzLkltYWdlR2FsbGVyeSA9IEltYWdlR2FsbGVyeTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/image-gallery/image-gallery\n")},"components/image-gallery/image-gallery.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<section class=\\"image-gallery ${aspectRatioStyle}\\">\\r\\n\\t\\t<div element.ref=\\"photoswipeElement\\" class=\\"pswp\\" tabindex=\\"-1\\" role=\\"dialog\\" aria-hidden=\\"true\\">\\r\\n\\r\\n\\t\\t\\t<!-- Background of PhotoSwipe. \\r\\n\\t\\t\\t\\tIt\'s a separate element as animating opacity is faster than rgba(). -->\\r\\n\\t\\t\\t<div class=\\"pswp__bg\\"><\/div>\\r\\n\\r\\n\\t\\t\\t<!-- Slides wrapper with overflow:hidden. -->\\r\\n\\t\\t\\t<div class=\\"pswp__scroll-wrap\\">\\r\\n\\r\\n\\t\\t\\t\\t<!-- Container that holds slides. \\r\\n\\t\\t\\t\\t\\tPhotoSwipe keeps only 3 of them in the DOM to save memory.\\r\\n\\t\\t\\t\\t\\tDon\'t modify these 3 pswp__item elements, data is added later on. -->\\r\\n\\t\\t\\t\\t<div class=\\"pswp__container\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\"pswp__item\\"><\/div>\\r\\n\\t\\t\\t\\t\\t<div class=\\"pswp__item\\"><\/div>\\r\\n\\t\\t\\t\\t\\t<div class=\\"pswp__item\\"><\/div>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t\\t<!-- Default (PhotoSwipeUI_Default) interface on top of sliding area. Can be changed. -->\\r\\n\\t\\t\\t\\t<div class=\\"pswp__ui pswp__ui--hidden\\">\\r\\n\\r\\n\\t\\t\\t\\t\\t<div class=\\"pswp__top-bar\\">\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t<!--  Controls are self-explanatory. Order can be changed. -->\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\"pswp__counter\\"><\/div>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t<button class=\\"pswp__button pswp__button--close\\" title=\\"Close (Esc)\\"><\/button>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t<button class=\\"pswp__button pswp__button--fs\\" title=\\"Toggle fullscreen\\"><\/button>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t<button class=\\"pswp__button pswp__button--zoom\\" title=\\"Zoom in/out\\"><\/button> \\r\\n\\r\\n\\t\\t\\t\\t\\t\\t<!-- Preloader demo http://codepen.io/dimsemenov/pen/yyBWoR -->\\r\\n\\t\\t\\t\\t\\t\\t<!-- element will get class pswp__preloader--active when preloader is running -->\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\"pswp__preloader\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\"pswp__preloader__icn\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\"pswp__preloader__cut\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\"pswp__preloader__donut\\"><\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t\\t\\t<!-- <div class=\\"pswp__share-modal pswp__share-modal--hidden pswp__single-tap\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\"pswp__share-tooltip\\"><\/div> \\r\\n\\t\\t\\t\\t\\t<\/div> -->\\r\\n\\r\\n\\t\\t\\t\\t\\t<button class=\\"pswp__button pswp__button--arrow--left\\" title=\\"Previous (arrow left)\\">\\r\\n\\t\\t\\t\\t\\t<\/button>\\r\\n\\r\\n\\t\\t\\t\\t\\t<button class=\\"pswp__button pswp__button--arrow--right\\" title=\\"Next (arrow right)\\">\\r\\n\\t\\t\\t\\t\\t<\/button>\\r\\n\\r\\n\\t\\t\\t\\t\\t<div class=\\"pswp__caption\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\"pswp__caption__left\\"><\/div>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t<\/div>\\r\\n\\t<\/section>\\r\\n<\/template>";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9pbWFnZS1nYWxsZXJ5L2ltYWdlLWdhbGxlcnkuaHRtbD84NDk1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1FQUFtRSxpQkFBaUIiLCJmaWxlIjoiY29tcG9uZW50cy9pbWFnZS1nYWxsZXJ5L2ltYWdlLWdhbGxlcnkuaHRtbC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gXCI8dGVtcGxhdGU+XFxyXFxuXFx0PHNlY3Rpb24gY2xhc3M9XFxcImltYWdlLWdhbGxlcnkgJHthc3BlY3RSYXRpb1N0eWxlfVxcXCI+XFxyXFxuXFx0XFx0PGRpdiBlbGVtZW50LnJlZj1cXFwicGhvdG9zd2lwZUVsZW1lbnRcXFwiIGNsYXNzPVxcXCJwc3dwXFxcIiB0YWJpbmRleD1cXFwiLTFcXFwiIHJvbGU9XFxcImRpYWxvZ1xcXCIgYXJpYS1oaWRkZW49XFxcInRydWVcXFwiPlxcclxcblxcclxcblxcdFxcdFxcdDwhLS0gQmFja2dyb3VuZCBvZiBQaG90b1N3aXBlLiBcXHJcXG5cXHRcXHRcXHRcXHRJdCdzIGEgc2VwYXJhdGUgZWxlbWVudCBhcyBhbmltYXRpbmcgb3BhY2l0eSBpcyBmYXN0ZXIgdGhhbiByZ2JhKCkuIC0tPlxcclxcblxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcInBzd3BfX2JnXFxcIj48L2Rpdj5cXHJcXG5cXHJcXG5cXHRcXHRcXHQ8IS0tIFNsaWRlcyB3cmFwcGVyIHdpdGggb3ZlcmZsb3c6aGlkZGVuLiAtLT5cXHJcXG5cXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJwc3dwX19zY3JvbGwtd3JhcFxcXCI+XFxyXFxuXFxyXFxuXFx0XFx0XFx0XFx0PCEtLSBDb250YWluZXIgdGhhdCBob2xkcyBzbGlkZXMuIFxcclxcblxcdFxcdFxcdFxcdFxcdFBob3RvU3dpcGUga2VlcHMgb25seSAzIG9mIHRoZW0gaW4gdGhlIERPTSB0byBzYXZlIG1lbW9yeS5cXHJcXG5cXHRcXHRcXHRcXHRcXHREb24ndCBtb2RpZnkgdGhlc2UgMyBwc3dwX19pdGVtIGVsZW1lbnRzLCBkYXRhIGlzIGFkZGVkIGxhdGVyIG9uLiAtLT5cXHJcXG5cXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJwc3dwX19jb250YWluZXJcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcInBzd3BfX2l0ZW1cXFwiPjwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcInBzd3BfX2l0ZW1cXFwiPjwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcInBzd3BfX2l0ZW1cXFwiPjwvZGl2PlxcclxcblxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcclxcblxcdFxcdFxcdFxcdDwhLS0gRGVmYXVsdCAoUGhvdG9Td2lwZVVJX0RlZmF1bHQpIGludGVyZmFjZSBvbiB0b3Agb2Ygc2xpZGluZyBhcmVhLiBDYW4gYmUgY2hhbmdlZC4gLS0+XFxyXFxuXFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwicHN3cF9fdWkgcHN3cF9fdWktLWhpZGRlblxcXCI+XFxyXFxuXFxyXFxuXFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwicHN3cF9fdG9wLWJhclxcXCI+XFxyXFxuXFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PCEtLSAgQ29udHJvbHMgYXJlIHNlbGYtZXhwbGFuYXRvcnkuIE9yZGVyIGNhbiBiZSBjaGFuZ2VkLiAtLT5cXHJcXG5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJwc3dwX19jb3VudGVyXFxcIj48L2Rpdj5cXHJcXG5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJwc3dwX19idXR0b24gcHN3cF9fYnV0dG9uLS1jbG9zZVxcXCIgdGl0bGU9XFxcIkNsb3NlIChFc2MpXFxcIj48L2J1dHRvbj5cXHJcXG5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJwc3dwX19idXR0b24gcHN3cF9fYnV0dG9uLS1mc1xcXCIgdGl0bGU9XFxcIlRvZ2dsZSBmdWxsc2NyZWVuXFxcIj48L2J1dHRvbj5cXHJcXG5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJwc3dwX19idXR0b24gcHN3cF9fYnV0dG9uLS16b29tXFxcIiB0aXRsZT1cXFwiWm9vbSBpbi9vdXRcXFwiPjwvYnV0dG9uPiBcXHJcXG5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8IS0tIFByZWxvYWRlciBkZW1vIGh0dHA6Ly9jb2RlcGVuLmlvL2RpbXNlbWVub3YvcGVuL3l5QldvUiAtLT5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8IS0tIGVsZW1lbnQgd2lsbCBnZXQgY2xhc3MgcHN3cF9fcHJlbG9hZGVyLS1hY3RpdmUgd2hlbiBwcmVsb2FkZXIgaXMgcnVubmluZyAtLT5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJwc3dwX19wcmVsb2FkZXJcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcInBzd3BfX3ByZWxvYWRlcl9faWNuXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJwc3dwX19wcmVsb2FkZXJfX2N1dFxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwicHN3cF9fcHJlbG9hZGVyX19kb251dFxcXCI+PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFxyXFxuXFx0XFx0XFx0XFx0XFx0PCEtLSA8ZGl2IGNsYXNzPVxcXCJwc3dwX19zaGFyZS1tb2RhbCBwc3dwX19zaGFyZS1tb2RhbC0taGlkZGVuIHBzd3BfX3NpbmdsZS10YXBcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcInBzd3BfX3NoYXJlLXRvb2x0aXBcXFwiPjwvZGl2PiBcXHJcXG5cXHRcXHRcXHRcXHRcXHQ8L2Rpdj4gLS0+XFxyXFxuXFxyXFxuXFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwicHN3cF9fYnV0dG9uIHBzd3BfX2J1dHRvbi0tYXJyb3ctLWxlZnRcXFwiIHRpdGxlPVxcXCJQcmV2aW91cyAoYXJyb3cgbGVmdClcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdDwvYnV0dG9uPlxcclxcblxcclxcblxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInBzd3BfX2J1dHRvbiBwc3dwX19idXR0b24tLWFycm93LS1yaWdodFxcXCIgdGl0bGU9XFxcIk5leHQgKGFycm93IHJpZ2h0KVxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PC9idXR0b24+XFxyXFxuXFxyXFxuXFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwicHN3cF9fY2FwdGlvblxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwicHN3cF9fY2FwdGlvbl9fbGVmdFxcXCI+PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFxyXFxuXFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFxyXFxuXFx0XFx0XFx0PC9kaXY+XFxyXFxuXFxyXFxuXFx0XFx0PC9kaXY+XFxyXFxuXFx0PC9zZWN0aW9uPlxcclxcbjwvdGVtcGxhdGU+XCI7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/image-gallery/image-gallery.html\n')},"components/index":function(module,exports,__webpack_require__){"use strict";eval("\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__(\"aurelia-framework\");\r\nfunction configure(config) {\r\n    config.globalResources([\r\n        './avis-car-rental/avis-car-rental',\r\n        './campaign-registration-form/campaign-registration-form',\r\n        './careers-listing/careers-listing',\r\n        './copy-block/copy-block',\r\n        './contact-us/contact-us',\r\n        './contact-us-phone-email/contact-us-phone-email',\r\n        './content-divider/content-divider',\r\n        './curated-trip/curated-trip',\r\n        './select-menu/select-menu',\r\n        './expandable-card/expandable-card',\r\n        './experiences-card/experiences-card',\r\n        './experiences-card/experiences-card-content',\r\n        './faq/faq',\r\n        './feature-list/feature-list',\r\n        './flexible-card/flexible-card',\r\n        './hero/hero',\r\n        './icon-card/icon-card',\r\n        './icon-list-item/icon-list-item',\r\n        './image-card/image-card',\r\n        './image-gallery/image-gallery',\r\n        './inquiry-card/inquiry-card',\r\n        './jaunt52/jaunt52',\r\n        './jaunt52/jaunt52-row',\r\n        './loading/loading',\r\n        './loading/loader-horizontal',\r\n        './member-activity/member-activity',\r\n        './member-testimonials/member-testimonial',\r\n        './member-testimonials/member-testimonials',\r\n        './membership-card/membership-card',\r\n        './member-news/member-news',\r\n        './news-card/news-card',\r\n        './press/press',\r\n        './press-release-listing/article-page',\r\n        './press-release-listing/press-release-listing',\r\n        './recommended-for-you/recommended-for-you',\r\n        './recommended-for-you/recommended-for-you-card',\r\n        './responsive-image/responsive-image',\r\n        './scrolling-image-gallery/scrolling-image-gallery',\r\n        './section-component/section-component',\r\n        './static-content-page/static-content-page',\r\n        './story/story',\r\n        './tab-listing/tab',\r\n        './tab-listing/tab-listing',\r\n        './testimonial-card/testimonial-card',\r\n        './travel-card/travel-card',\r\n        './video-gallery/video-gallery',\r\n        './video-player/video-player'\r\n    ]);\r\n}\r\nexports.configure = configure;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9pbmRleC50cz9mOTU1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQThDLGNBQWM7QUFDNUQsMEJBQTBCLG1CQUFPLENBQUMsbUJBQW1CO0FBQ3JEO0FBQ0E7QUFDQSxRQUFRLG1DQUE0RTtBQUNwRixRQUFRLHlEQUFrRztBQUMxRyxRQUFRLG1DQUE0RTtBQUNwRixRQUFRLHlCQUFrRTtBQUMxRSxRQUFRLHlCQUFrRTtBQUMxRSxRQUFRLGlEQUEwRjtBQUNsRyxRQUFRLG1DQUE0RTtBQUNwRixRQUFRLDZCQUFzRTtBQUM5RSxRQUFRLDJCQUFvRTtBQUM1RSxRQUFRLG1DQUE0RTtBQUNwRixRQUFRLHFDQUE4RTtBQUN0RixRQUFRLDZDQUFzRjtBQUM5RixRQUFRLFdBQW9EO0FBQzVELFFBQVEsNkJBQXNFO0FBQzlFLFFBQVEsK0JBQXdFO0FBQ2hGLFFBQVEsYUFBc0Q7QUFDOUQsUUFBUSx1QkFBZ0U7QUFDeEUsUUFBUSxpQ0FBMEU7QUFDbEYsUUFBUSx5QkFBa0U7QUFDMUUsUUFBUSwrQkFBd0U7QUFDaEYsUUFBUSw2QkFBc0U7QUFDOUUsUUFBUSxtQkFBNEQ7QUFDcEUsUUFBUSx1QkFBZ0U7QUFDeEUsUUFBUSxtQkFBNEQ7QUFDcEUsUUFBUSw2QkFBc0U7QUFDOUUsUUFBUSxtQ0FBNEU7QUFDcEYsUUFBUSwwQ0FBbUY7QUFDM0YsUUFBUSwyQ0FBb0Y7QUFDNUYsUUFBUSxtQ0FBNEU7QUFDcEYsUUFBUSwyQkFBb0U7QUFDNUUsUUFBUSx1QkFBZ0U7QUFDeEUsUUFBUSxlQUF3RDtBQUNoRSxRQUFRLHNDQUErRTtBQUN2RixRQUFRLCtDQUF3RjtBQUNoRyxRQUFRLDJDQUFvRjtBQUM1RixRQUFRLGdEQUF5RjtBQUNqRyxRQUFRLHFDQUE4RTtBQUN0RixRQUFRLG1EQUE0RjtBQUNwRyxRQUFRLHVDQUFnRjtBQUN4RixRQUFRLDJDQUFvRjtBQUM1RixRQUFRLGVBQXdEO0FBQ2hFLFFBQVEsbUJBQTREO0FBQ3BFLFFBQVEsMkJBQW9FO0FBQzVFLFFBQVEscUNBQThFO0FBQ3RGLFFBQVEsMkJBQW9FO0FBQzVFLFFBQVEsK0JBQXdFO0FBQ2hGLFFBQVEsNkJBQXNFO0FBQzlFO0FBQ0E7QUFDQSIsImZpbGUiOiJjb21wb25lbnRzL2luZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIGF1cmVsaWFfZnJhbWV3b3JrXzEgPSByZXF1aXJlKFwiYXVyZWxpYS1mcmFtZXdvcmtcIik7XHJcbmZ1bmN0aW9uIGNvbmZpZ3VyZShjb25maWcpIHtcclxuICAgIGNvbmZpZy5nbG9iYWxSZXNvdXJjZXMoW1xyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuUExBVEZPUk0ubW9kdWxlTmFtZSgnLi9hdmlzLWNhci1yZW50YWwvYXZpcy1jYXItcmVudGFsJyksXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5QTEFURk9STS5tb2R1bGVOYW1lKCcuL2NhbXBhaWduLXJlZ2lzdHJhdGlvbi1mb3JtL2NhbXBhaWduLXJlZ2lzdHJhdGlvbi1mb3JtJyksXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5QTEFURk9STS5tb2R1bGVOYW1lKCcuL2NhcmVlcnMtbGlzdGluZy9jYXJlZXJzLWxpc3RpbmcnKSxcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLlBMQVRGT1JNLm1vZHVsZU5hbWUoJy4vY29weS1ibG9jay9jb3B5LWJsb2NrJyksXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5QTEFURk9STS5tb2R1bGVOYW1lKCcuL2NvbnRhY3QtdXMvY29udGFjdC11cycpLFxyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuUExBVEZPUk0ubW9kdWxlTmFtZSgnLi9jb250YWN0LXVzLXBob25lLWVtYWlsL2NvbnRhY3QtdXMtcGhvbmUtZW1haWwnKSxcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLlBMQVRGT1JNLm1vZHVsZU5hbWUoJy4vY29udGVudC1kaXZpZGVyL2NvbnRlbnQtZGl2aWRlcicpLFxyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuUExBVEZPUk0ubW9kdWxlTmFtZSgnLi9jdXJhdGVkLXRyaXAvY3VyYXRlZC10cmlwJyksXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5QTEFURk9STS5tb2R1bGVOYW1lKCcuL3NlbGVjdC1tZW51L3NlbGVjdC1tZW51JyksXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5QTEFURk9STS5tb2R1bGVOYW1lKCcuL2V4cGFuZGFibGUtY2FyZC9leHBhbmRhYmxlLWNhcmQnKSxcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLlBMQVRGT1JNLm1vZHVsZU5hbWUoJy4vZXhwZXJpZW5jZXMtY2FyZC9leHBlcmllbmNlcy1jYXJkJyksXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5QTEFURk9STS5tb2R1bGVOYW1lKCcuL2V4cGVyaWVuY2VzLWNhcmQvZXhwZXJpZW5jZXMtY2FyZC1jb250ZW50JyksXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5QTEFURk9STS5tb2R1bGVOYW1lKCcuL2ZhcS9mYXEnKSxcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLlBMQVRGT1JNLm1vZHVsZU5hbWUoJy4vZmVhdHVyZS1saXN0L2ZlYXR1cmUtbGlzdCcpLFxyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuUExBVEZPUk0ubW9kdWxlTmFtZSgnLi9mbGV4aWJsZS1jYXJkL2ZsZXhpYmxlLWNhcmQnKSxcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLlBMQVRGT1JNLm1vZHVsZU5hbWUoJy4vaGVyby9oZXJvJyksXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5QTEFURk9STS5tb2R1bGVOYW1lKCcuL2ljb24tY2FyZC9pY29uLWNhcmQnKSxcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLlBMQVRGT1JNLm1vZHVsZU5hbWUoJy4vaWNvbi1saXN0LWl0ZW0vaWNvbi1saXN0LWl0ZW0nKSxcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLlBMQVRGT1JNLm1vZHVsZU5hbWUoJy4vaW1hZ2UtY2FyZC9pbWFnZS1jYXJkJyksXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5QTEFURk9STS5tb2R1bGVOYW1lKCcuL2ltYWdlLWdhbGxlcnkvaW1hZ2UtZ2FsbGVyeScpLFxyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuUExBVEZPUk0ubW9kdWxlTmFtZSgnLi9pbnF1aXJ5LWNhcmQvaW5xdWlyeS1jYXJkJyksXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5QTEFURk9STS5tb2R1bGVOYW1lKCcuL2phdW50NTIvamF1bnQ1MicpLFxyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuUExBVEZPUk0ubW9kdWxlTmFtZSgnLi9qYXVudDUyL2phdW50NTItcm93JyksXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5QTEFURk9STS5tb2R1bGVOYW1lKCcuL2xvYWRpbmcvbG9hZGluZycpLFxyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuUExBVEZPUk0ubW9kdWxlTmFtZSgnLi9sb2FkaW5nL2xvYWRlci1ob3Jpem9udGFsJyksXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5QTEFURk9STS5tb2R1bGVOYW1lKCcuL21lbWJlci1hY3Rpdml0eS9tZW1iZXItYWN0aXZpdHknKSxcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLlBMQVRGT1JNLm1vZHVsZU5hbWUoJy4vbWVtYmVyLXRlc3RpbW9uaWFscy9tZW1iZXItdGVzdGltb25pYWwnKSxcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLlBMQVRGT1JNLm1vZHVsZU5hbWUoJy4vbWVtYmVyLXRlc3RpbW9uaWFscy9tZW1iZXItdGVzdGltb25pYWxzJyksXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5QTEFURk9STS5tb2R1bGVOYW1lKCcuL21lbWJlcnNoaXAtY2FyZC9tZW1iZXJzaGlwLWNhcmQnKSxcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLlBMQVRGT1JNLm1vZHVsZU5hbWUoJy4vbWVtYmVyLW5ld3MvbWVtYmVyLW5ld3MnKSxcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLlBMQVRGT1JNLm1vZHVsZU5hbWUoJy4vbmV3cy1jYXJkL25ld3MtY2FyZCcpLFxyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuUExBVEZPUk0ubW9kdWxlTmFtZSgnLi9wcmVzcy9wcmVzcycpLFxyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuUExBVEZPUk0ubW9kdWxlTmFtZSgnLi9wcmVzcy1yZWxlYXNlLWxpc3RpbmcvYXJ0aWNsZS1wYWdlJyksXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5QTEFURk9STS5tb2R1bGVOYW1lKCcuL3ByZXNzLXJlbGVhc2UtbGlzdGluZy9wcmVzcy1yZWxlYXNlLWxpc3RpbmcnKSxcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLlBMQVRGT1JNLm1vZHVsZU5hbWUoJy4vcmVjb21tZW5kZWQtZm9yLXlvdS9yZWNvbW1lbmRlZC1mb3IteW91JyksXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5QTEFURk9STS5tb2R1bGVOYW1lKCcuL3JlY29tbWVuZGVkLWZvci15b3UvcmVjb21tZW5kZWQtZm9yLXlvdS1jYXJkJyksXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5QTEFURk9STS5tb2R1bGVOYW1lKCcuL3Jlc3BvbnNpdmUtaW1hZ2UvcmVzcG9uc2l2ZS1pbWFnZScpLFxyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuUExBVEZPUk0ubW9kdWxlTmFtZSgnLi9zY3JvbGxpbmctaW1hZ2UtZ2FsbGVyeS9zY3JvbGxpbmctaW1hZ2UtZ2FsbGVyeScpLFxyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuUExBVEZPUk0ubW9kdWxlTmFtZSgnLi9zZWN0aW9uLWNvbXBvbmVudC9zZWN0aW9uLWNvbXBvbmVudCcpLFxyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuUExBVEZPUk0ubW9kdWxlTmFtZSgnLi9zdGF0aWMtY29udGVudC1wYWdlL3N0YXRpYy1jb250ZW50LXBhZ2UnKSxcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLlBMQVRGT1JNLm1vZHVsZU5hbWUoJy4vc3Rvcnkvc3RvcnknKSxcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLlBMQVRGT1JNLm1vZHVsZU5hbWUoJy4vdGFiLWxpc3RpbmcvdGFiJyksXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5QTEFURk9STS5tb2R1bGVOYW1lKCcuL3RhYi1saXN0aW5nL3RhYi1saXN0aW5nJyksXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5QTEFURk9STS5tb2R1bGVOYW1lKCcuL3Rlc3RpbW9uaWFsLWNhcmQvdGVzdGltb25pYWwtY2FyZCcpLFxyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuUExBVEZPUk0ubW9kdWxlTmFtZSgnLi90cmF2ZWwtY2FyZC90cmF2ZWwtY2FyZCcpLFxyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuUExBVEZPUk0ubW9kdWxlTmFtZSgnLi92aWRlby1nYWxsZXJ5L3ZpZGVvLWdhbGxlcnknKSxcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLlBMQVRGT1JNLm1vZHVsZU5hbWUoJy4vdmlkZW8tcGxheWVyL3ZpZGVvLXBsYXllcicpXHJcbiAgICBdKTtcclxufVxyXG5leHBvcnRzLmNvbmZpZ3VyZSA9IGNvbmZpZ3VyZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/index\n")},"components/inquiry-card/inquiry-card":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar InquiryCard = /** @class */ (function () {\r\n    function InquiryCard() {\r\n    }\r\n    InquiryCard.prototype.activate = function (model) {\r\n        this.model = model;\r\n    };\r\n    InquiryCard.prototype.getContentDividerModel = function () {\r\n        return {\r\n            color: \'\',\r\n            isVisible: true\r\n        };\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Object)\r\n    ], InquiryCard.prototype, "model", void 0);\r\n    return InquiryCard;\r\n}());\r\nexports.InquiryCard = InquiryCard;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9pbnF1aXJ5LWNhcmQvaW5xdWlyeS1jYXJkLnRzP2FjMTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsUUFBUTtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLGNBQWM7QUFDNUQsMEJBQTBCLG1CQUFPLENBQUMsbUJBQW1CO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QiLCJmaWxlIjoiY29tcG9uZW50cy9pbnF1aXJ5LWNhcmQvaW5xdWlyeS1jYXJkLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2RlY29yYXRlID0gKHRoaXMgJiYgdGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn07XHJcbnZhciBfX21ldGFkYXRhID0gKHRoaXMgJiYgdGhpcy5fX21ldGFkYXRhKSB8fCBmdW5jdGlvbiAoaywgdikge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xyXG59O1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBhdXJlbGlhX2ZyYW1ld29ya18xID0gcmVxdWlyZShcImF1cmVsaWEtZnJhbWV3b3JrXCIpO1xyXG52YXIgSW5xdWlyeUNhcmQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBJbnF1aXJ5Q2FyZCgpIHtcclxuICAgIH1cclxuICAgIElucXVpcnlDYXJkLnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uIChtb2RlbCkge1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSBtb2RlbDtcclxuICAgIH07XHJcbiAgICBJbnF1aXJ5Q2FyZC5wcm90b3R5cGUuZ2V0Q29udGVudERpdmlkZXJNb2RlbCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBjb2xvcjogJycsXHJcbiAgICAgICAgICAgIGlzVmlzaWJsZTogdHJ1ZVxyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG4gICAgX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5iaW5kYWJsZSxcclxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxyXG4gICAgXSwgSW5xdWlyeUNhcmQucHJvdG90eXBlLCBcIm1vZGVsXCIsIHZvaWQgMCk7XHJcbiAgICByZXR1cm4gSW5xdWlyeUNhcmQ7XHJcbn0oKSk7XHJcbmV4cG9ydHMuSW5xdWlyeUNhcmQgPSBJbnF1aXJ5Q2FyZDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/inquiry-card/inquiry-card\n')},"components/inquiry-card/inquiry-card.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<div class=\\"inquiry-card center-xs\\">\\r\\n\\t\\t<div class=\\"inquiry-card__content\\">\\r\\n\\t\\t\\t<div class=\\"inquiry-card__icon-holder\\">\\r\\n\\t\\t\\t\\t<img if.bind=\\"model.icon\\" src=\\"${model.icon.fullPath}\\" class=\\"inquiry-card__icon\\" />\\r\\n\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t<h3 class=\\"inquiry-card__heading ds-title-medium\\">${model.heading}<\/h3>\\r\\n\\r\\n\\t\\t\\t<content-divider model.bind=\\"getContentDividerModel()\\" containerless><\/content-divider>\\r\\n\\r\\n\\t\\t\\t<div class=\\"inquiry-card__body-copy ds-p-base\\" innerhtml.bind=\\"model.bodyCopy\\"><\/div>\\r\\n\\r\\n\\t\\t\\t<span if.bind=\\"model.phoneLabel\\" class=\\"inquiry-card__contact-label ds-label-medium\\">\\r\\n\\t\\t\\t\\t${model.phoneLabel}\\r\\n\\t\\t\\t<\/span>\\r\\n\\r\\n\\t\\t\\t<a if.bind=\\"model.phoneNumber\\" href=\\"tel:${model.phoneNumber}\\">${model.phoneNumber}<\/a>\\r\\n\\r\\n\\t\\t\\t<span if.bind=\\"model.emailLabel\\" class=\\"inquiry-card__contact-label ds-label-medium\\">\\r\\n\\t\\t\\t\\t${model.emailLabel}\\r\\n\\t\\t\\t<\/span>\\r\\n\\r\\n\\t\\t\\t<a if.bind=\\"model.emailAddress\\" href=\\"mailto:${model.emailAddress}\\">${model.emailAddress}<\/a>\\r\\n\\r\\n\\t\\t\\t<a if.bind=\\"model.callToAction.canDisplayAsTextLink\\" class=\\"inquiry-card__call-to-action ds-btn-primary\\" href.bind=\\"model.callToAction.url\\" target=\\"${model.callToAction.newWindow ? \'_blank\' : \'_self\'}\\">\\r\\n\\t\\t\\t\\t${model.callToAction.linkTitle}\\r\\n\\t\\t\\t<\/a>\\r\\n\\t\\t<\/div>\\r\\n\\t<\/div>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9pbnF1aXJ5LWNhcmQvaW5xdWlyeS1jYXJkLmh0bWw/NTBhNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3TkFBd04sb0JBQW9CLHNIQUFzSCxjQUFjLHdVQUF3VSxpQkFBaUIsNkVBQTZFLGtCQUFrQixLQUFLLGtCQUFrQix5SEFBeUgsaUJBQWlCLGlGQUFpRixtQkFBbUIsS0FBSyxtQkFBbUIsK0tBQStLLGtEQUFrRCxpQkFBaUIsNkJBQTZCIiwiZmlsZSI6ImNvbXBvbmVudHMvaW5xdWlyeS1jYXJkL2lucXVpcnktY2FyZC5odG1sLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBcIjx0ZW1wbGF0ZT5cXHJcXG5cXHQ8ZGl2IGNsYXNzPVxcXCJpbnF1aXJ5LWNhcmQgY2VudGVyLXhzXFxcIj5cXHJcXG5cXHRcXHQ8ZGl2IGNsYXNzPVxcXCJpbnF1aXJ5LWNhcmRfX2NvbnRlbnRcXFwiPlxcclxcblxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImlucXVpcnktY2FyZF9faWNvbi1ob2xkZXJcXFwiPlxcclxcblxcdFxcdFxcdFxcdDxpbWcgaWYuYmluZD1cXFwibW9kZWwuaWNvblxcXCIgc3JjPVxcXCIke21vZGVsLmljb24uZnVsbFBhdGh9XFxcIiBjbGFzcz1cXFwiaW5xdWlyeS1jYXJkX19pY29uXFxcIiAvPlxcclxcblxcdFxcdFxcdDwvZGl2PlxcclxcblxcclxcblxcdFxcdFxcdDxoMyBjbGFzcz1cXFwiaW5xdWlyeS1jYXJkX19oZWFkaW5nIGRzLXRpdGxlLW1lZGl1bVxcXCI+JHttb2RlbC5oZWFkaW5nfTwvaDM+XFxyXFxuXFxyXFxuXFx0XFx0XFx0PGNvbnRlbnQtZGl2aWRlciBtb2RlbC5iaW5kPVxcXCJnZXRDb250ZW50RGl2aWRlck1vZGVsKClcXFwiIGNvbnRhaW5lcmxlc3M+PC9jb250ZW50LWRpdmlkZXI+XFxyXFxuXFxyXFxuXFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiaW5xdWlyeS1jYXJkX19ib2R5LWNvcHkgZHMtcC1iYXNlXFxcIiBpbm5lcmh0bWwuYmluZD1cXFwibW9kZWwuYm9keUNvcHlcXFwiPjwvZGl2PlxcclxcblxcclxcblxcdFxcdFxcdDxzcGFuIGlmLmJpbmQ9XFxcIm1vZGVsLnBob25lTGFiZWxcXFwiIGNsYXNzPVxcXCJpbnF1aXJ5LWNhcmRfX2NvbnRhY3QtbGFiZWwgZHMtbGFiZWwtbWVkaXVtXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHQke21vZGVsLnBob25lTGFiZWx9XFxyXFxuXFx0XFx0XFx0PC9zcGFuPlxcclxcblxcclxcblxcdFxcdFxcdDxhIGlmLmJpbmQ9XFxcIm1vZGVsLnBob25lTnVtYmVyXFxcIiBocmVmPVxcXCJ0ZWw6JHttb2RlbC5waG9uZU51bWJlcn1cXFwiPiR7bW9kZWwucGhvbmVOdW1iZXJ9PC9hPlxcclxcblxcclxcblxcdFxcdFxcdDxzcGFuIGlmLmJpbmQ9XFxcIm1vZGVsLmVtYWlsTGFiZWxcXFwiIGNsYXNzPVxcXCJpbnF1aXJ5LWNhcmRfX2NvbnRhY3QtbGFiZWwgZHMtbGFiZWwtbWVkaXVtXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHQke21vZGVsLmVtYWlsTGFiZWx9XFxyXFxuXFx0XFx0XFx0PC9zcGFuPlxcclxcblxcclxcblxcdFxcdFxcdDxhIGlmLmJpbmQ9XFxcIm1vZGVsLmVtYWlsQWRkcmVzc1xcXCIgaHJlZj1cXFwibWFpbHRvOiR7bW9kZWwuZW1haWxBZGRyZXNzfVxcXCI+JHttb2RlbC5lbWFpbEFkZHJlc3N9PC9hPlxcclxcblxcclxcblxcdFxcdFxcdDxhIGlmLmJpbmQ9XFxcIm1vZGVsLmNhbGxUb0FjdGlvbi5jYW5EaXNwbGF5QXNUZXh0TGlua1xcXCIgY2xhc3M9XFxcImlucXVpcnktY2FyZF9fY2FsbC10by1hY3Rpb24gZHMtYnRuLXByaW1hcnlcXFwiIGhyZWYuYmluZD1cXFwibW9kZWwuY2FsbFRvQWN0aW9uLnVybFxcXCIgdGFyZ2V0PVxcXCIke21vZGVsLmNhbGxUb0FjdGlvbi5uZXdXaW5kb3cgPyAnX2JsYW5rJyA6ICdfc2VsZid9XFxcIj5cXHJcXG5cXHRcXHRcXHRcXHQke21vZGVsLmNhbGxUb0FjdGlvbi5saW5rVGl0bGV9XFxyXFxuXFx0XFx0XFx0PC9hPlxcclxcblxcdFxcdDwvZGl2PlxcclxcblxcdDwvZGl2PlxcclxcbjwvdGVtcGxhdGU+XFxyXFxuXCI7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/inquiry-card/inquiry-card.html\n')},"components/jaunt52/jaunt52":function(module,exports,__webpack_require__){"use strict";eval("\r\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\r\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n        s = arguments[i];\r\n        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n            t[p] = s[p];\r\n    }\r\n    return t;\r\n};\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n};\r\nvar __read = (this && this.__read) || function (o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n};\r\nvar __spread = (this && this.__spread) || function () {\r\n    for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__(\"aurelia-framework\");\r\nvar moment = __webpack_require__(2);\r\nvar SortOrder_1 = __webpack_require__(18);\r\nvar SortUtilities_1 = __webpack_require__(25);\r\nvar SelectMenuItem_1 = __webpack_require__(13);\r\nvar AccessLevels_1 = __webpack_require__(177);\r\nvar Jaunt52Repository_1 = __webpack_require__(176);\r\nvar Jaunt52 = /** @class */ (function () {\r\n    function Jaunt52(jaunt52Repository) {\r\n        this.jaunt52Repository = jaunt52Repository;\r\n        this.arrivalMonths = [];\r\n        this.vacationStyle = [];\r\n        this.destination = [];\r\n        this.trips = [];\r\n        this.hasData = false;\r\n        this.hasErrors = false;\r\n        this.sortProperty = null;\r\n        this.sortOrder = null;\r\n        this.isInPreview = false;\r\n    }\r\n    Object.defineProperty(Jaunt52.prototype, \"isSorted\", {\r\n        get: function () {\r\n            return this.sortProperty != null && this.sortOrder != null;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Jaunt52.prototype, \"searchResultsCount\", {\r\n        get: function () {\r\n            return this.trips.length;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Jaunt52.prototype, \"sortOrderModifier\", {\r\n        get: function () {\r\n            switch (this.sortOrder) {\r\n                case SortOrder_1.SortOrder.Ascending: {\r\n                    return '--is-sorted-ascending';\r\n                }\r\n                case SortOrder_1.SortOrder.Descending: {\r\n                    return '--is-sorted-descending';\r\n                }\r\n                default: {\r\n                    return '';\r\n                }\r\n            }\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Jaunt52.prototype.applyFilter = function () {\r\n        var _this = this;\r\n        var result = this.jaunt52Model.featuredVacationData\r\n            .filter(function (trip) {\r\n            var thisArrivalMonth = _this.formatDateValue(moment(trip.startDate));\r\n            return _this.selectedArrivalMonths.value === '0' || thisArrivalMonth === _this.selectedArrivalMonths.value;\r\n        })\r\n            .filter(function (trip) {\r\n            var thisStyle = trip.unit.classification.style.unitStyleID;\r\n            return _this.selectedVacationStyle.value === '0' || thisStyle === _this.selectedVacationStyle.value;\r\n        })\r\n            .filter(function (trip) {\r\n            var thisLocation = trip.unit.destination.id.toString();\r\n            return _this.selectedDestination.value === '0' || thisLocation === _this.selectedDestination.value;\r\n        }).map(function (trip) { return (__assign({}, trip, trip.unit, {\r\n            destination: trip.unit.destination.name,\r\n            hasPercentageOff: trip.nightlyMsrp > 0,\r\n            percentageOff: _this.calculatePercentageOff(trip)\r\n        }, { isRegisteredUser: _this.jaunt52Model.accessLevels.some(function (accessLevel) { return accessLevel === AccessLevels_1.AccessLevel.RegisteredUser; }) })); });\r\n        return result;\r\n    };\r\n    Jaunt52.prototype.calculatePercentageOff = function (trip) {\r\n        var hasPercentageOff = trip.nightlyMsrp > 0;\r\n        if (hasPercentageOff) {\r\n            var percentageOff = parseInt((((trip.nightlyMsrp - trip.nightlyAvgRate) / trip.nightlyMsrp) * 100).toString(), 10);\r\n            return percentageOff + \"% Off\";\r\n        }\r\n        return '';\r\n    };\r\n    Jaunt52.prototype.filterTrips = function () {\r\n        var filteredTrips = this.applyFilter();\r\n        this.trips = this.isSorted\r\n            ? this.applySort(this.sortProperty, filteredTrips)\r\n            : filteredTrips;\r\n    };\r\n    Jaunt52.prototype.attached = function () {\r\n        var _this = this;\r\n        try {\r\n            this.jaunt52Repository\r\n                .get()\r\n                .then(function (model) { return _this.init(model); });\r\n        }\r\n        catch (exception) {\r\n            this.hasErrors = true;\r\n        }\r\n    };\r\n    Jaunt52.prototype.reset = function () {\r\n        this.selectedArrivalMonths = this.arrivalMonths[0];\r\n        this.selectedVacationStyle = this.vacationStyle[0];\r\n        this.selectedDestination = this.destination[0];\r\n        this.sortProperty = null;\r\n        this.sortOrder = null;\r\n        var defaultSortProperty = 'startDate';\r\n        this.sortByColumn(defaultSortProperty);\r\n    };\r\n    Jaunt52.prototype.sortByColumn = function (sortProperty, isAscendingOnly) {\r\n        if (isAscendingOnly === void 0) { isAscendingOnly = true; }\r\n        var filteredTrips = this.applyFilter();\r\n        this.toggleSort(sortProperty, isAscendingOnly);\r\n        this.trips = this.applySort(sortProperty, filteredTrips);\r\n    };\r\n    Jaunt52.prototype.toggleSort = function (sortProperty, isAscendingOnly) {\r\n        if (isAscendingOnly || !this.isSorted || sortProperty !== this.sortProperty) {\r\n            this.applyDefaultSort(sortProperty);\r\n        }\r\n        else {\r\n            this.sortOrder = (this.sortOrder === SortOrder_1.SortOrder.Ascending)\r\n                ? SortOrder_1.SortOrder.Descending\r\n                : SortOrder_1.SortOrder.Ascending;\r\n        }\r\n    };\r\n    Jaunt52.prototype.applyDefaultSort = function (sortProperty) {\r\n        this.sortOrder = (sortProperty === 'value' || sortProperty === 'percentageOff') ? SortOrder_1.SortOrder.Descending : SortOrder_1.SortOrder.Ascending;\r\n        this.sortProperty = sortProperty;\r\n    };\r\n    Jaunt52.prototype.applySort = function (sortProperty, trips) {\r\n        var shouldNotApplySort = !trips || trips.length < 2;\r\n        if (shouldNotApplySort) {\r\n            return trips;\r\n        }\r\n        var propertyType = typeof trips[0][sortProperty];\r\n        switch (propertyType) {\r\n            case 'string': {\r\n                return SortUtilities_1.sortObjectArrayByString(sortProperty, trips, this.sortOrder);\r\n            }\r\n            case 'number': {\r\n                return SortUtilities_1.sortObjectArrayByNumber(sortProperty, trips, this.sortOrder);\r\n            }\r\n            case 'boolean': {\r\n                return SortUtilities_1.sortObjectArrayByBoolean(sortProperty, trips, this.sortOrder);\r\n            }\r\n            default: {\r\n                return trips;\r\n            }\r\n        }\r\n    };\r\n    Jaunt52.prototype.formatDateValue = function (date) {\r\n        return date.format('M') + \"-\" + date.format('YYYY');\r\n    };\r\n    Jaunt52.prototype.cannotPreview = function () {\r\n        return !this.jaunt52Model.accessLevels.some(function (accessLevel) { return accessLevel === AccessLevels_1.AccessLevel.SystemAdmin || accessLevel === AccessLevels_1.AccessLevel.JauntPreviewAdmin; });\r\n    };\r\n    Jaunt52.prototype.init = function (jaunt52Model) {\r\n        var _this = this;\r\n        this.jaunt52Model = jaunt52Model;\r\n        this.hasData = true;\r\n        this.isInPreview = jaunt52Model.preview && this.cannotPreview();\r\n        this.arrivalMonths.push(new SelectMenuItem_1.SelectMenuItem('All Months', '0'));\r\n        (_a = this.arrivalMonths).push.apply(_a, __spread(Object.keys(this.jaunt52Model.dates).map(function (dateString) {\r\n            var date = moment(_this.jaunt52Model.dates[dateString]);\r\n            var displayText = date.format('MMMM') + \", \" + date.format('YYYY');\r\n            var value = _this.formatDateValue(date);\r\n            var selectMenu = new SelectMenuItem_1.SelectMenuItem(displayText, value);\r\n            return selectMenu;\r\n        })));\r\n        this.vacationStyle.push(new SelectMenuItem_1.SelectMenuItem('All Vacations', '0'));\r\n        (_b = this.vacationStyle).push.apply(_b, __spread(Object\r\n            .keys(this.jaunt52Model.styles)\r\n            .sort(function (a, b) { return SortUtilities_1.filterListSortComparer(a, b, _this.jaunt52Model.styles[a]); })\r\n            .map(function (styleId) { return new SelectMenuItem_1.SelectMenuItem(_this.jaunt52Model.styles[styleId].name, _this.jaunt52Model.styles[styleId].unitStyleID); })));\r\n        this.destination.push(new SelectMenuItem_1.SelectMenuItem('All Destinations', '0'));\r\n        (_c = this.destination).push.apply(_c, __spread(Object\r\n            .keys(this.jaunt52Model.locations)\r\n            .sort(function (a, b) { return SortUtilities_1.filterListSortComparer(a, b, _this.jaunt52Model.locations); })\r\n            .map(function (destinationId) { return new SelectMenuItem_1.SelectMenuItem(_this.jaunt52Model.locations[destinationId], destinationId); })));\r\n        this.reset();\r\n        var _a, _b, _c;\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.computedFrom('sortOrder', 'sortProperty'),\r\n        __metadata(\"design:type\", Boolean),\r\n        __metadata(\"design:paramtypes\", [])\r\n    ], Jaunt52.prototype, \"isSorted\", null);\r\n    __decorate([\r\n        aurelia_framework_1.computedFrom('trips.length'),\r\n        __metadata(\"design:type\", Object),\r\n        __metadata(\"design:paramtypes\", [])\r\n    ], Jaunt52.prototype, \"searchResultsCount\", null);\r\n    Jaunt52 = __decorate([\r\n        aurelia_framework_1.autoinject(),\r\n        __metadata(\"design:paramtypes\", [Jaunt52Repository_1.Jaunt52Repository])\r\n    ], Jaunt52);\r\n    return Jaunt52;\r\n}());\r\nexports.Jaunt52 = Jaunt52;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9qYXVudDUyL2phdW50NTIudHM/MTNkOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsNENBQTRDLE9BQU87QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLFFBQVE7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLE1BQU0sZ0JBQWdCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLHNCQUFzQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixzQkFBc0I7QUFDbEQ7QUFDQTtBQUNBLDhDQUE4QyxjQUFjO0FBQzVELDBCQUEwQixtQkFBTyxDQUFDLG1CQUFtQjtBQUNyRCxhQUFhLG1CQUFPLENBQUMsQ0FBUTtBQUM3QixrQkFBa0IsbUJBQU8sQ0FBQyxFQUEyQjtBQUNyRCxzQkFBc0IsbUJBQU8sQ0FBQyxFQUErQjtBQUM3RCx1QkFBdUIsbUJBQU8sQ0FBQyxFQUErQjtBQUM5RCxxQkFBcUIsbUJBQU8sQ0FBQyxHQUE0QjtBQUN6RCwwQkFBMEIsbUJBQU8sQ0FBQyxHQUFxQjtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTLHVCQUF1QixvQkFBb0I7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsU0FBUyxHQUFHLGdGQUFnRixrRUFBa0UsRUFBRSxHQUFHLEdBQUcsRUFBRTtBQUN4SztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsMEJBQTBCLEVBQUU7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLHdCQUF3QjtBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRFQUE0RSwrSEFBK0gsRUFBRTtBQUM3TTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsbUZBQW1GLEVBQUU7QUFDeEgscUNBQXFDLHFJQUFxSSxFQUFFO0FBQzVLO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxtRkFBbUYsRUFBRTtBQUN4SCwyQ0FBMkMsd0dBQXdHLEVBQUU7QUFDcko7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEIiwiZmlsZSI6ImNvbXBvbmVudHMvamF1bnQ1Mi9qYXVudDUyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xyXG4gICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXHJcbiAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHQ7XHJcbn07XHJcbnZhciBfX2RlY29yYXRlID0gKHRoaXMgJiYgdGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn07XHJcbnZhciBfX21ldGFkYXRhID0gKHRoaXMgJiYgdGhpcy5fX21ldGFkYXRhKSB8fCBmdW5jdGlvbiAoaywgdikge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xyXG59O1xyXG52YXIgX19yZWFkID0gKHRoaXMgJiYgdGhpcy5fX3JlYWQpIHx8IGZ1bmN0aW9uIChvLCBuKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICBpZiAoIW0pIHJldHVybiBvO1xyXG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXI7XHJcbn07XHJcbnZhciBfX3NwcmVhZCA9ICh0aGlzICYmIHRoaXMuX19zcHJlYWQpIHx8IGZ1bmN0aW9uICgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XHJcbiAgICByZXR1cm4gYXI7XHJcbn07XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIGF1cmVsaWFfZnJhbWV3b3JrXzEgPSByZXF1aXJlKFwiYXVyZWxpYS1mcmFtZXdvcmtcIik7XHJcbnZhciBtb21lbnQgPSByZXF1aXJlKFwibW9tZW50XCIpO1xyXG52YXIgU29ydE9yZGVyXzEgPSByZXF1aXJlKFwiLi4vLi4vdXRpbGl0aWVzL1NvcnRPcmRlclwiKTtcclxudmFyIFNvcnRVdGlsaXRpZXNfMSA9IHJlcXVpcmUoXCIuLi8uLi91dGlsaXRpZXMvU29ydFV0aWxpdGllc1wiKTtcclxudmFyIFNlbGVjdE1lbnVJdGVtXzEgPSByZXF1aXJlKFwiLi4vc2VsZWN0LW1lbnUvU2VsZWN0TWVudUl0ZW1cIik7XHJcbnZhciBBY2Nlc3NMZXZlbHNfMSA9IHJlcXVpcmUoXCIuLy4uLy4uL2VudW1zL0FjY2Vzc0xldmVsc1wiKTtcclxudmFyIEphdW50NTJSZXBvc2l0b3J5XzEgPSByZXF1aXJlKFwiLi9KYXVudDUyUmVwb3NpdG9yeVwiKTtcclxudmFyIEphdW50NTIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBKYXVudDUyKGphdW50NTJSZXBvc2l0b3J5KSB7XHJcbiAgICAgICAgdGhpcy5qYXVudDUyUmVwb3NpdG9yeSA9IGphdW50NTJSZXBvc2l0b3J5O1xyXG4gICAgICAgIHRoaXMuYXJyaXZhbE1vbnRocyA9IFtdO1xyXG4gICAgICAgIHRoaXMudmFjYXRpb25TdHlsZSA9IFtdO1xyXG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24gPSBbXTtcclxuICAgICAgICB0aGlzLnRyaXBzID0gW107XHJcbiAgICAgICAgdGhpcy5oYXNEYXRhID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5oYXNFcnJvcnMgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNvcnRQcm9wZXJ0eSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zb3J0T3JkZXIgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuaXNJblByZXZpZXcgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShKYXVudDUyLnByb3RvdHlwZSwgXCJpc1NvcnRlZFwiLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNvcnRQcm9wZXJ0eSAhPSBudWxsICYmIHRoaXMuc29ydE9yZGVyICE9IG51bGw7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSmF1bnQ1Mi5wcm90b3R5cGUsIFwic2VhcmNoUmVzdWx0c0NvdW50XCIsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJpcHMubGVuZ3RoO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgIH0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEphdW50NTIucHJvdG90eXBlLCBcInNvcnRPcmRlck1vZGlmaWVyXCIsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgc3dpdGNoICh0aGlzLnNvcnRPcmRlcikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSBTb3J0T3JkZXJfMS5Tb3J0T3JkZXIuQXNjZW5kaW5nOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICctLWlzLXNvcnRlZC1hc2NlbmRpbmcnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2FzZSBTb3J0T3JkZXJfMS5Tb3J0T3JkZXIuRGVzY2VuZGluZzoge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnLS1pcy1zb3J0ZWQtZGVzY2VuZGluZyc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICBKYXVudDUyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLmphdW50NTJNb2RlbC5mZWF0dXJlZFZhY2F0aW9uRGF0YVxyXG4gICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uICh0cmlwKSB7XHJcbiAgICAgICAgICAgIHZhciB0aGlzQXJyaXZhbE1vbnRoID0gX3RoaXMuZm9ybWF0RGF0ZVZhbHVlKG1vbWVudCh0cmlwLnN0YXJ0RGF0ZSkpO1xyXG4gICAgICAgICAgICByZXR1cm4gX3RoaXMuc2VsZWN0ZWRBcnJpdmFsTW9udGhzLnZhbHVlID09PSAnMCcgfHwgdGhpc0Fycml2YWxNb250aCA9PT0gX3RoaXMuc2VsZWN0ZWRBcnJpdmFsTW9udGhzLnZhbHVlO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHRyaXApIHtcclxuICAgICAgICAgICAgdmFyIHRoaXNTdHlsZSA9IHRyaXAudW5pdC5jbGFzc2lmaWNhdGlvbi5zdHlsZS51bml0U3R5bGVJRDtcclxuICAgICAgICAgICAgcmV0dXJuIF90aGlzLnNlbGVjdGVkVmFjYXRpb25TdHlsZS52YWx1ZSA9PT0gJzAnIHx8IHRoaXNTdHlsZSA9PT0gX3RoaXMuc2VsZWN0ZWRWYWNhdGlvblN0eWxlLnZhbHVlO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHRyaXApIHtcclxuICAgICAgICAgICAgdmFyIHRoaXNMb2NhdGlvbiA9IHRyaXAudW5pdC5kZXN0aW5hdGlvbi5pZC50b1N0cmluZygpO1xyXG4gICAgICAgICAgICByZXR1cm4gX3RoaXMuc2VsZWN0ZWREZXN0aW5hdGlvbi52YWx1ZSA9PT0gJzAnIHx8IHRoaXNMb2NhdGlvbiA9PT0gX3RoaXMuc2VsZWN0ZWREZXN0aW5hdGlvbi52YWx1ZTtcclxuICAgICAgICB9KS5tYXAoZnVuY3Rpb24gKHRyaXApIHsgcmV0dXJuIChfX2Fzc2lnbih7fSwgdHJpcCwgdHJpcC51bml0LCB7XHJcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uOiB0cmlwLnVuaXQuZGVzdGluYXRpb24ubmFtZSxcclxuICAgICAgICAgICAgaGFzUGVyY2VudGFnZU9mZjogdHJpcC5uaWdodGx5TXNycCA+IDAsXHJcbiAgICAgICAgICAgIHBlcmNlbnRhZ2VPZmY6IF90aGlzLmNhbGN1bGF0ZVBlcmNlbnRhZ2VPZmYodHJpcClcclxuICAgICAgICB9LCB7IGlzUmVnaXN0ZXJlZFVzZXI6IF90aGlzLmphdW50NTJNb2RlbC5hY2Nlc3NMZXZlbHMuc29tZShmdW5jdGlvbiAoYWNjZXNzTGV2ZWwpIHsgcmV0dXJuIGFjY2Vzc0xldmVsID09PSBBY2Nlc3NMZXZlbHNfMS5BY2Nlc3NMZXZlbC5SZWdpc3RlcmVkVXNlcjsgfSkgfSkpOyB9KTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfTtcclxuICAgIEphdW50NTIucHJvdG90eXBlLmNhbGN1bGF0ZVBlcmNlbnRhZ2VPZmYgPSBmdW5jdGlvbiAodHJpcCkge1xyXG4gICAgICAgIHZhciBoYXNQZXJjZW50YWdlT2ZmID0gdHJpcC5uaWdodGx5TXNycCA+IDA7XHJcbiAgICAgICAgaWYgKGhhc1BlcmNlbnRhZ2VPZmYpIHtcclxuICAgICAgICAgICAgdmFyIHBlcmNlbnRhZ2VPZmYgPSBwYXJzZUludCgoKCh0cmlwLm5pZ2h0bHlNc3JwIC0gdHJpcC5uaWdodGx5QXZnUmF0ZSkgLyB0cmlwLm5pZ2h0bHlNc3JwKSAqIDEwMCkudG9TdHJpbmcoKSwgMTApO1xyXG4gICAgICAgICAgICByZXR1cm4gcGVyY2VudGFnZU9mZiArIFwiJSBPZmZcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgfTtcclxuICAgIEphdW50NTIucHJvdG90eXBlLmZpbHRlclRyaXBzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBmaWx0ZXJlZFRyaXBzID0gdGhpcy5hcHBseUZpbHRlcigpO1xyXG4gICAgICAgIHRoaXMudHJpcHMgPSB0aGlzLmlzU29ydGVkXHJcbiAgICAgICAgICAgID8gdGhpcy5hcHBseVNvcnQodGhpcy5zb3J0UHJvcGVydHksIGZpbHRlcmVkVHJpcHMpXHJcbiAgICAgICAgICAgIDogZmlsdGVyZWRUcmlwcztcclxuICAgIH07XHJcbiAgICBKYXVudDUyLnByb3RvdHlwZS5hdHRhY2hlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMuamF1bnQ1MlJlcG9zaXRvcnlcclxuICAgICAgICAgICAgICAgIC5nZXQoKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKG1vZGVsKSB7IHJldHVybiBfdGhpcy5pbml0KG1vZGVsKTsgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChleGNlcHRpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5oYXNFcnJvcnMgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBKYXVudDUyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQXJyaXZhbE1vbnRocyA9IHRoaXMuYXJyaXZhbE1vbnRoc1swXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFjYXRpb25TdHlsZSA9IHRoaXMudmFjYXRpb25TdHlsZVswXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRGVzdGluYXRpb24gPSB0aGlzLmRlc3RpbmF0aW9uWzBdO1xyXG4gICAgICAgIHRoaXMuc29ydFByb3BlcnR5ID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNvcnRPcmRlciA9IG51bGw7XHJcbiAgICAgICAgdmFyIGRlZmF1bHRTb3J0UHJvcGVydHkgPSAnc3RhcnREYXRlJztcclxuICAgICAgICB0aGlzLnNvcnRCeUNvbHVtbihkZWZhdWx0U29ydFByb3BlcnR5KTtcclxuICAgIH07XHJcbiAgICBKYXVudDUyLnByb3RvdHlwZS5zb3J0QnlDb2x1bW4gPSBmdW5jdGlvbiAoc29ydFByb3BlcnR5LCBpc0FzY2VuZGluZ09ubHkpIHtcclxuICAgICAgICBpZiAoaXNBc2NlbmRpbmdPbmx5ID09PSB2b2lkIDApIHsgaXNBc2NlbmRpbmdPbmx5ID0gdHJ1ZTsgfVxyXG4gICAgICAgIHZhciBmaWx0ZXJlZFRyaXBzID0gdGhpcy5hcHBseUZpbHRlcigpO1xyXG4gICAgICAgIHRoaXMudG9nZ2xlU29ydChzb3J0UHJvcGVydHksIGlzQXNjZW5kaW5nT25seSk7XHJcbiAgICAgICAgdGhpcy50cmlwcyA9IHRoaXMuYXBwbHlTb3J0KHNvcnRQcm9wZXJ0eSwgZmlsdGVyZWRUcmlwcyk7XHJcbiAgICB9O1xyXG4gICAgSmF1bnQ1Mi5wcm90b3R5cGUudG9nZ2xlU29ydCA9IGZ1bmN0aW9uIChzb3J0UHJvcGVydHksIGlzQXNjZW5kaW5nT25seSkge1xyXG4gICAgICAgIGlmIChpc0FzY2VuZGluZ09ubHkgfHwgIXRoaXMuaXNTb3J0ZWQgfHwgc29ydFByb3BlcnR5ICE9PSB0aGlzLnNvcnRQcm9wZXJ0eSkge1xyXG4gICAgICAgICAgICB0aGlzLmFwcGx5RGVmYXVsdFNvcnQoc29ydFByb3BlcnR5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc29ydE9yZGVyID0gKHRoaXMuc29ydE9yZGVyID09PSBTb3J0T3JkZXJfMS5Tb3J0T3JkZXIuQXNjZW5kaW5nKVxyXG4gICAgICAgICAgICAgICAgPyBTb3J0T3JkZXJfMS5Tb3J0T3JkZXIuRGVzY2VuZGluZ1xyXG4gICAgICAgICAgICAgICAgOiBTb3J0T3JkZXJfMS5Tb3J0T3JkZXIuQXNjZW5kaW5nO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBKYXVudDUyLnByb3RvdHlwZS5hcHBseURlZmF1bHRTb3J0ID0gZnVuY3Rpb24gKHNvcnRQcm9wZXJ0eSkge1xyXG4gICAgICAgIHRoaXMuc29ydE9yZGVyID0gKHNvcnRQcm9wZXJ0eSA9PT0gJ3ZhbHVlJyB8fCBzb3J0UHJvcGVydHkgPT09ICdwZXJjZW50YWdlT2ZmJykgPyBTb3J0T3JkZXJfMS5Tb3J0T3JkZXIuRGVzY2VuZGluZyA6IFNvcnRPcmRlcl8xLlNvcnRPcmRlci5Bc2NlbmRpbmc7XHJcbiAgICAgICAgdGhpcy5zb3J0UHJvcGVydHkgPSBzb3J0UHJvcGVydHk7XHJcbiAgICB9O1xyXG4gICAgSmF1bnQ1Mi5wcm90b3R5cGUuYXBwbHlTb3J0ID0gZnVuY3Rpb24gKHNvcnRQcm9wZXJ0eSwgdHJpcHMpIHtcclxuICAgICAgICB2YXIgc2hvdWxkTm90QXBwbHlTb3J0ID0gIXRyaXBzIHx8IHRyaXBzLmxlbmd0aCA8IDI7XHJcbiAgICAgICAgaWYgKHNob3VsZE5vdEFwcGx5U29ydCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJpcHM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBwcm9wZXJ0eVR5cGUgPSB0eXBlb2YgdHJpcHNbMF1bc29ydFByb3BlcnR5XTtcclxuICAgICAgICBzd2l0Y2ggKHByb3BlcnR5VHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlICdzdHJpbmcnOiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gU29ydFV0aWxpdGllc18xLnNvcnRPYmplY3RBcnJheUJ5U3RyaW5nKHNvcnRQcm9wZXJ0eSwgdHJpcHMsIHRoaXMuc29ydE9yZGVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlICdudW1iZXInOiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gU29ydFV0aWxpdGllc18xLnNvcnRPYmplY3RBcnJheUJ5TnVtYmVyKHNvcnRQcm9wZXJ0eSwgdHJpcHMsIHRoaXMuc29ydE9yZGVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlICdib29sZWFuJzoge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFNvcnRVdGlsaXRpZXNfMS5zb3J0T2JqZWN0QXJyYXlCeUJvb2xlYW4oc29ydFByb3BlcnR5LCB0cmlwcywgdGhpcy5zb3J0T3JkZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cmlwcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBKYXVudDUyLnByb3RvdHlwZS5mb3JtYXREYXRlVmFsdWUgPSBmdW5jdGlvbiAoZGF0ZSkge1xyXG4gICAgICAgIHJldHVybiBkYXRlLmZvcm1hdCgnTScpICsgXCItXCIgKyBkYXRlLmZvcm1hdCgnWVlZWScpO1xyXG4gICAgfTtcclxuICAgIEphdW50NTIucHJvdG90eXBlLmNhbm5vdFByZXZpZXcgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLmphdW50NTJNb2RlbC5hY2Nlc3NMZXZlbHMuc29tZShmdW5jdGlvbiAoYWNjZXNzTGV2ZWwpIHsgcmV0dXJuIGFjY2Vzc0xldmVsID09PSBBY2Nlc3NMZXZlbHNfMS5BY2Nlc3NMZXZlbC5TeXN0ZW1BZG1pbiB8fCBhY2Nlc3NMZXZlbCA9PT0gQWNjZXNzTGV2ZWxzXzEuQWNjZXNzTGV2ZWwuSmF1bnRQcmV2aWV3QWRtaW47IH0pO1xyXG4gICAgfTtcclxuICAgIEphdW50NTIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoamF1bnQ1Mk1vZGVsKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB0aGlzLmphdW50NTJNb2RlbCA9IGphdW50NTJNb2RlbDtcclxuICAgICAgICB0aGlzLmhhc0RhdGEgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNJblByZXZpZXcgPSBqYXVudDUyTW9kZWwucHJldmlldyAmJiB0aGlzLmNhbm5vdFByZXZpZXcoKTtcclxuICAgICAgICB0aGlzLmFycml2YWxNb250aHMucHVzaChuZXcgU2VsZWN0TWVudUl0ZW1fMS5TZWxlY3RNZW51SXRlbSgnQWxsIE1vbnRocycsICcwJykpO1xyXG4gICAgICAgIChfYSA9IHRoaXMuYXJyaXZhbE1vbnRocykucHVzaC5hcHBseShfYSwgX19zcHJlYWQoT2JqZWN0LmtleXModGhpcy5qYXVudDUyTW9kZWwuZGF0ZXMpLm1hcChmdW5jdGlvbiAoZGF0ZVN0cmluZykge1xyXG4gICAgICAgICAgICB2YXIgZGF0ZSA9IG1vbWVudChfdGhpcy5qYXVudDUyTW9kZWwuZGF0ZXNbZGF0ZVN0cmluZ10pO1xyXG4gICAgICAgICAgICB2YXIgZGlzcGxheVRleHQgPSBkYXRlLmZvcm1hdCgnTU1NTScpICsgXCIsIFwiICsgZGF0ZS5mb3JtYXQoJ1lZWVknKTtcclxuICAgICAgICAgICAgdmFyIHZhbHVlID0gX3RoaXMuZm9ybWF0RGF0ZVZhbHVlKGRhdGUpO1xyXG4gICAgICAgICAgICB2YXIgc2VsZWN0TWVudSA9IG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKGRpc3BsYXlUZXh0LCB2YWx1ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBzZWxlY3RNZW51O1xyXG4gICAgICAgIH0pKSk7XHJcbiAgICAgICAgdGhpcy52YWNhdGlvblN0eWxlLnB1c2gobmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0FsbCBWYWNhdGlvbnMnLCAnMCcpKTtcclxuICAgICAgICAoX2IgPSB0aGlzLnZhY2F0aW9uU3R5bGUpLnB1c2guYXBwbHkoX2IsIF9fc3ByZWFkKE9iamVjdFxyXG4gICAgICAgICAgICAua2V5cyh0aGlzLmphdW50NTJNb2RlbC5zdHlsZXMpXHJcbiAgICAgICAgICAgIC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBTb3J0VXRpbGl0aWVzXzEuZmlsdGVyTGlzdFNvcnRDb21wYXJlcihhLCBiLCBfdGhpcy5qYXVudDUyTW9kZWwuc3R5bGVzW2FdKTsgfSlcclxuICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoc3R5bGVJZCkgeyByZXR1cm4gbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oX3RoaXMuamF1bnQ1Mk1vZGVsLnN0eWxlc1tzdHlsZUlkXS5uYW1lLCBfdGhpcy5qYXVudDUyTW9kZWwuc3R5bGVzW3N0eWxlSWRdLnVuaXRTdHlsZUlEKTsgfSkpKTtcclxuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLnB1c2gobmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0oJ0FsbCBEZXN0aW5hdGlvbnMnLCAnMCcpKTtcclxuICAgICAgICAoX2MgPSB0aGlzLmRlc3RpbmF0aW9uKS5wdXNoLmFwcGx5KF9jLCBfX3NwcmVhZChPYmplY3RcclxuICAgICAgICAgICAgLmtleXModGhpcy5qYXVudDUyTW9kZWwubG9jYXRpb25zKVxyXG4gICAgICAgICAgICAuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gU29ydFV0aWxpdGllc18xLmZpbHRlckxpc3RTb3J0Q29tcGFyZXIoYSwgYiwgX3RoaXMuamF1bnQ1Mk1vZGVsLmxvY2F0aW9ucyk7IH0pXHJcbiAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKGRlc3RpbmF0aW9uSWQpIHsgcmV0dXJuIG5ldyBTZWxlY3RNZW51SXRlbV8xLlNlbGVjdE1lbnVJdGVtKF90aGlzLmphdW50NTJNb2RlbC5sb2NhdGlvbnNbZGVzdGluYXRpb25JZF0sIGRlc3RpbmF0aW9uSWQpOyB9KSkpO1xyXG4gICAgICAgIHRoaXMucmVzZXQoKTtcclxuICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgIH07XHJcbiAgICBfX2RlY29yYXRlKFtcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLmNvbXB1dGVkRnJvbSgnc29ydE9yZGVyJywgJ3NvcnRQcm9wZXJ0eScpLFxyXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBCb29sZWFuKSxcclxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW10pXHJcbiAgICBdLCBKYXVudDUyLnByb3RvdHlwZSwgXCJpc1NvcnRlZFwiLCBudWxsKTtcclxuICAgIF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuY29tcHV0ZWRGcm9tKCd0cmlwcy5sZW5ndGgnKSxcclxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KSxcclxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW10pXHJcbiAgICBdLCBKYXVudDUyLnByb3RvdHlwZSwgXCJzZWFyY2hSZXN1bHRzQ291bnRcIiwgbnVsbCk7XHJcbiAgICBKYXVudDUyID0gX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5hdXRvaW5qZWN0KCksXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtKYXVudDUyUmVwb3NpdG9yeV8xLkphdW50NTJSZXBvc2l0b3J5XSlcclxuICAgIF0sIEphdW50NTIpO1xyXG4gICAgcmV0dXJuIEphdW50NTI7XHJcbn0oKSk7XHJcbmV4cG9ydHMuSmF1bnQ1MiA9IEphdW50NTI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///components/jaunt52/jaunt52\n")},"components/jaunt52/jaunt52-row":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar Jaunt52Row = /** @class */ (function () {\r\n    function Jaunt52Row() {\r\n    }\r\n    Jaunt52Row.prototype.activate = function (model) {\r\n        this.model = model;\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Object)\r\n    ], Jaunt52Row.prototype, "model", void 0);\r\n    Jaunt52Row = __decorate([\r\n        aurelia_framework_1.containerless()\r\n    ], Jaunt52Row);\r\n    return Jaunt52Row;\r\n}());\r\nexports.Jaunt52Row = Jaunt52Row;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9qYXVudDUyL2phdW50NTItcm93LnRzP2M3MDciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsUUFBUTtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLGNBQWM7QUFDNUQsMEJBQTBCLG1CQUFPLENBQUMsbUJBQW1CO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QiLCJmaWxlIjoiY29tcG9uZW50cy9qYXVudDUyL2phdW50NTItcm93LmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2RlY29yYXRlID0gKHRoaXMgJiYgdGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn07XHJcbnZhciBfX21ldGFkYXRhID0gKHRoaXMgJiYgdGhpcy5fX21ldGFkYXRhKSB8fCBmdW5jdGlvbiAoaywgdikge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xyXG59O1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBhdXJlbGlhX2ZyYW1ld29ya18xID0gcmVxdWlyZShcImF1cmVsaWEtZnJhbWV3b3JrXCIpO1xyXG52YXIgSmF1bnQ1MlJvdyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEphdW50NTJSb3coKSB7XHJcbiAgICB9XHJcbiAgICBKYXVudDUyUm93LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uIChtb2RlbCkge1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSBtb2RlbDtcclxuICAgIH07XHJcbiAgICBfX2RlY29yYXRlKFtcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLmJpbmRhYmxlLFxyXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXHJcbiAgICBdLCBKYXVudDUyUm93LnByb3RvdHlwZSwgXCJtb2RlbFwiLCB2b2lkIDApO1xyXG4gICAgSmF1bnQ1MlJvdyA9IF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuY29udGFpbmVybGVzcygpXHJcbiAgICBdLCBKYXVudDUyUm93KTtcclxuICAgIHJldHVybiBKYXVudDUyUm93O1xyXG59KCkpO1xyXG5leHBvcnRzLkphdW50NTJSb3cgPSBKYXVudDUyUm93O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///components/jaunt52/jaunt52-row\n')},"components/jaunt52/jaunt52-row.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<!-- table cards -->\\r\\n\\t<div class=\\"jaunt52__table-card col-xs-12 col-sm-6 col-md-12\\">\\r\\n\\t\\t<div class=\\"jaunt52__content-container\\">\\r\\n\\r\\n\\t\\t\\t<!-- destination -->\\r\\n\\t\\t\\t<div class=\\"jaunt52__cell jaunt52__destination-container jaunt52__width--is-destination\\">\\r\\n\\t\\t\\t\\t<div class=\\"jaunt52__gallery-popup-container\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\"jaunt52__gallery-svg-container\\">\\r\\n\\t\\t\\t\\t\\t\\t<svg class=\\"ds-icon-gallery ds-icon-md\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<use xlink:href=\\"#ds-icon-gallery\\"/>\\r\\n\\t\\t\\t\\t\\t\\t<\/svg>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<div class=\\"jaunt52__image-container\\">\\r\\n\\t\\t\\t\\t\\t\\t<img class=\\"jaunt52__image\\" src=\\"//cms.inspirato.com/ImageGen.ashx?image=${model.unit.coverImage}&width=555\\" />\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t<div class=\\"jaunt52__title-container\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\"jaunt52__accommodation-name truncate-text\\">\\r\\n\\t\\t\\t\\t\\t\\t<a href=\\"${model.unit.url}?checkIn=${model.startDate | dateFormat: \'MM/DD/YYYY\' }&checkOut=${model.endDate | dateFormat: \'MM/DD/YYYY\' }\\" target=\\"_blank\\">${model.unit.name}<\/a>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<div class=\\"ds-subtitle jaunt52__destination-name truncate-text\\">${model.unit.destination.name}<\/div>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t<!-- property specs -->\\r\\n\\t\\t\\t<div class=\\"jaunt52__property-specs-container jaunt52__column jaunt52__width--is-property-specs\\">\\r\\n\\t\\t\\t\\t<div class=\\"jaunt52__table-row start-xs center-md middle-xs\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\"jaunt52__cell jaunt52__property-spec\\">\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\"jaunt52__property-spec-value\\">${model.unit.bedrooms}<\/span>\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\"jaunt52__property-spec--unit-of-measurement\\">br<\/span>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<div class=\\"jaunt52__cell jaunt52__property-spec\\">\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\"jaunt52__property-spec-value\\">${model.unit.bathrooms}<\/span>\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\"jaunt52__property-spec--unit-of-measurement\\">ba<\/span>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<div class=\\"jaunt52__cell jaunt52__property-spec\\">\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\"jaunt52__property-spec-value\\">${model.unit.suggestedOccupancy}<\/span>\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\"jaunt52__property-spec--unit-of-measurement\\">occ<\/span>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<div class=\\"jaunt52__cell jaunt52__property-spec\\">\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\"jaunt52__property-spec-value\\">${model.unit.squareFootage | nullableNumber: \'0,0\'}<\/span>\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\"jaunt52__property-spec--unit-of-measurement\\">sqft<\/span>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t<!-- dates -->\\r\\n\\t\\t\\t<div class=\\"jaunt52__dates-container jaunt52__column jaunt52__width--is-dates\\">\\r\\n\\t\\t\\t\\t<div class=\\"jaunt52__table-row\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\"jaunt52__cell jaunt52__dates jaunt52__width--is-half\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\"jaunt52__date-details\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<span class=\\"jaunt52__date-details-is--day\\">${model.startDate | dateFormat: \'ddd\' }<\/span>\\r\\n\\t\\t\\t\\t\\t\\t\\t<span class=\\"jaunt52__date-details-is--date\\">${model.startDate | dateFormat: \'MMM DD, YYYY\' }<\/span>\\r\\n\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<div class=\\"jaunt52__cell jaunt52__dates jaunt52__mobile-arrow\\">\\r\\n\\t\\t\\t\\t\\t\\t<svg class=\\"ds-icon-arrow-long ds-icon-sm\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<use xlink:href=\\"#ds-icon-arrow-long\\"/>\\r\\n\\t\\t\\t\\t\\t\\t<\/svg>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<div class=\\"jaunt52__cell jaunt52__dates jaunt52__width--is-half\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\"jaunt52__date-details\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<span class=\\"jaunt52__date-details-is--day\\">${model.endDate | dateFormat: \'ddd\' }<\/span>\\r\\n\\t\\t\\t\\t\\t\\t\\t<span class=\\"jaunt52__date-details-is--date\\">${model.endDate | dateFormat: \'MMM DD, YYYY\' }<\/span>\\r\\n\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t<!-- value -->\\r\\n\\t\\t\\t<div class=\\"jaunt52__value-container jaunt52__column jaunt52__width--is-value\\">\\r\\n\\t\\t\\t\\t<div class=\\"jaunt52__table-row\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\"jaunt52__cell jaunt52__value-details jaunt52__mobile-banner\\">\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\"jaunt52__strikethrough-container\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<span class=\\"jaunt52__banner-logo\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<svg class=\\"ds-icon-bolt ds-icon-md jaunt52__banner-logo\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<use xlink:href=\\"#ds-icon-bolt\\"/>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<\/svg>\\r\\n\\t\\t\\t\\t\\t\\t\\t<\/span>\\r\\n\\t\\t\\t\\t\\t\\t\\t<span class=\\"jaunt52__label ds-label-small\\">Nightly<\/span>\\r\\n\\t\\t\\t\\t\\t\\t\\t<span class=\\"jaunt52__value-details--is-strikethrough\\">${model.nightlyMsrp | nullableNumber: \'$0,0\'}<\/span>\\r\\n\\t\\t\\t\\t\\t\\t\\t<span class=\\"jaunt52__value-details--is-value\\">${model.nightlyAvgRate | nullableNumber: \'$0,0\'}<\/span>\\r\\n\\t\\t\\t\\t\\t\\t<\/span>\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\"jaunt52__subtotal-popup-container\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\"jaunt52__calculator-svg-container\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<svg class=\\"ds-icon-calculator ds-icon-sm\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<use xlink:href=\\"#ds-icon-calculator\\"/>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<\/svg>\\r\\n\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\"jaunt52__text-container\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\"jaunt52__label--subtotal\\">Subtotal<\/span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\"jaunt52__value-details--is-value\\">${model.subtotal | nullableNumber: \'$0,0\'}<\/span>\\r\\n\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t<!-- percent -->\\r\\n\\t\\t\\t<div class=\\"jaunt52__percent-container jaunt52__column jaunt52__width--is-percent\\">\\r\\n\\t\\t\\t\\t<div class=\\"jaunt52__table-row\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\"jaunt52__cell jaunt52__percent-details\\">\\r\\n\\t\\t\\t\\t\\t\\t<span class=\\"jaunt52__percent\\">${model.percentageOff}<\/span>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t<!-- status/cta -->\\r\\n\\t\\t\\t<div class=\\"jaunt52__status-container jaunt52__column jaunt52__width--is-status\\">\\r\\n\\t\\t\\t\\t<div class=\\"jaunt52__table-row\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\"jaunt52__cell jaunt52__cta-container ${model.showTripValue ? jaunt52__width--is-half : \'\'}\\">\\r\\n\\t\\t\\t\\t\\t\\t<button if.bind=\\"model.isBooked\\" class=\\"jaunt52__cta ds-btn-primary ds-btn--disabled\\" disabled>Booked<\/button>\\r\\n\\t\\t\\t\\t\\t\\t<a if.bind=\\"!model.isAccessRestricted && !model.isBooked && !model.isRegisteredUser\\" href=\\"/Checkout/Residence?code=${model.unit.id}&arrivalDate=${model.startDate | dateFormat: \'MM/DD/YYYY\' }&departureDate=${model.endDate | dateFormat: \'MM/DD/YYYY\' }\\" class=\\"jaunt52__cta ds-btn-primary\\" target=\\"_blank\\">Book<\/a>\\r\\n\\t\\t\\t\\t\\t\\t<span if.bind=\\"!model.isAccessRestricted && !model.isBooked && model.isRegisteredUser\\">Join to Book<\/span>\\r\\n\\t\\t\\t\\t\\t\\t<div if.bind=\\"model.isAccessRestricted && !model.isBooked\\" class=\\"jaunt52__restricted-message ds-p-small\\">Available Thu,&nbsp;1&nbsp;p.m.&nbsp;MT<\/div>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t<\/div>\\r\\n\\t<\/div>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9qYXVudDUyL2phdW50NTItcm93Lmh0bWw/ZGVhYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw2dEJBQTZ0QixzQkFBc0IsNE1BQTRNLGVBQWUsV0FBVyw0Q0FBNEMsWUFBWSwwQ0FBMEMsdUJBQXVCLGdCQUFnQiwyR0FBMkcsNEJBQTRCLHNZQUFzWSxvQkFBb0IsaVBBQWlQLHFCQUFxQixpUEFBaVAsOEJBQThCLGtQQUFrUCxpREFBaUQsa2dCQUFrZ0IscUNBQXFDLDBFQUEwRSw4Q0FBOEMsNGVBQTRlLG1DQUFtQywwRUFBMEUsNENBQTRDLGd5QkFBZ3lCLDJDQUEyQyw0RUFBNEUsOENBQThDLGdpQkFBZ2lCLHdDQUF3Qyw2WUFBNlksb0JBQW9CLDJTQUEyUyxtREFBbUQsOFFBQThRLGNBQWMsZUFBZSw0Q0FBNEMsaUJBQWlCLDBDQUEwQyxpVkFBaVYsT0FBTyxVQUFVIiwiZmlsZSI6ImNvbXBvbmVudHMvamF1bnQ1Mi9qYXVudDUyLXJvdy5odG1sLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBcIjx0ZW1wbGF0ZT5cXHJcXG5cXHQ8IS0tIHRhYmxlIGNhcmRzIC0tPlxcclxcblxcdDxkaXYgY2xhc3M9XFxcImphdW50NTJfX3RhYmxlLWNhcmQgY29sLXhzLTEyIGNvbC1zbS02IGNvbC1tZC0xMlxcXCI+XFxyXFxuXFx0XFx0PGRpdiBjbGFzcz1cXFwiamF1bnQ1Ml9fY29udGVudC1jb250YWluZXJcXFwiPlxcclxcblxcclxcblxcdFxcdFxcdDwhLS0gZGVzdGluYXRpb24gLS0+XFxyXFxuXFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiamF1bnQ1Ml9fY2VsbCBqYXVudDUyX19kZXN0aW5hdGlvbi1jb250YWluZXIgamF1bnQ1Ml9fd2lkdGgtLWlzLWRlc3RpbmF0aW9uXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJqYXVudDUyX19nYWxsZXJ5LXBvcHVwLWNvbnRhaW5lclxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiamF1bnQ1Ml9fZ2FsbGVyeS1zdmctY29udGFpbmVyXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8c3ZnIGNsYXNzPVxcXCJkcy1pY29uLWdhbGxlcnkgZHMtaWNvbi1tZFxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0PHVzZSB4bGluazpocmVmPVxcXCIjZHMtaWNvbi1nYWxsZXJ5XFxcIi8+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PC9zdmc+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiamF1bnQ1Ml9faW1hZ2UtY29udGFpbmVyXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8aW1nIGNsYXNzPVxcXCJqYXVudDUyX19pbWFnZVxcXCIgc3JjPVxcXCIvL2Ntcy5pbnNwaXJhdG8uY29tL0ltYWdlR2VuLmFzaHg/aW1hZ2U9JHttb2RlbC51bml0LmNvdmVySW1hZ2V9JndpZHRoPTU1NVxcXCIgLz5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJqYXVudDUyX190aXRsZS1jb250YWluZXJcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImphdW50NTJfX2FjY29tbW9kYXRpb24tbmFtZSB0cnVuY2F0ZS10ZXh0XFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YSBocmVmPVxcXCIke21vZGVsLnVuaXQudXJsfT9jaGVja0luPSR7bW9kZWwuc3RhcnREYXRlIHwgZGF0ZUZvcm1hdDogJ01NL0REL1lZWVknIH0mY2hlY2tPdXQ9JHttb2RlbC5lbmREYXRlIHwgZGF0ZUZvcm1hdDogJ01NL0REL1lZWVknIH1cXFwiIHRhcmdldD1cXFwiX2JsYW5rXFxcIj4ke21vZGVsLnVuaXQubmFtZX08L2E+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiZHMtc3VidGl0bGUgamF1bnQ1Ml9fZGVzdGluYXRpb24tbmFtZSB0cnVuY2F0ZS10ZXh0XFxcIj4ke21vZGVsLnVuaXQuZGVzdGluYXRpb24ubmFtZX08L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHJcXG5cXHRcXHRcXHQ8IS0tIHByb3BlcnR5IHNwZWNzIC0tPlxcclxcblxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImphdW50NTJfX3Byb3BlcnR5LXNwZWNzLWNvbnRhaW5lciBqYXVudDUyX19jb2x1bW4gamF1bnQ1Ml9fd2lkdGgtLWlzLXByb3BlcnR5LXNwZWNzXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJqYXVudDUyX190YWJsZS1yb3cgc3RhcnQteHMgY2VudGVyLW1kIG1pZGRsZS14c1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiamF1bnQ1Ml9fY2VsbCBqYXVudDUyX19wcm9wZXJ0eS1zcGVjXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8c3BhbiBjbGFzcz1cXFwiamF1bnQ1Ml9fcHJvcGVydHktc3BlYy12YWx1ZVxcXCI+JHttb2RlbC51bml0LmJlZHJvb21zfTwvc3Bhbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8c3BhbiBjbGFzcz1cXFwiamF1bnQ1Ml9fcHJvcGVydHktc3BlYy0tdW5pdC1vZi1tZWFzdXJlbWVudFxcXCI+YnI8L3NwYW4+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiamF1bnQ1Ml9fY2VsbCBqYXVudDUyX19wcm9wZXJ0eS1zcGVjXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8c3BhbiBjbGFzcz1cXFwiamF1bnQ1Ml9fcHJvcGVydHktc3BlYy12YWx1ZVxcXCI+JHttb2RlbC51bml0LmJhdGhyb29tc308L3NwYW4+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PHNwYW4gY2xhc3M9XFxcImphdW50NTJfX3Byb3BlcnR5LXNwZWMtLXVuaXQtb2YtbWVhc3VyZW1lbnRcXFwiPmJhPC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImphdW50NTJfX2NlbGwgamF1bnQ1Ml9fcHJvcGVydHktc3BlY1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PHNwYW4gY2xhc3M9XFxcImphdW50NTJfX3Byb3BlcnR5LXNwZWMtdmFsdWVcXFwiPiR7bW9kZWwudW5pdC5zdWdnZXN0ZWRPY2N1cGFuY3l9PC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxzcGFuIGNsYXNzPVxcXCJqYXVudDUyX19wcm9wZXJ0eS1zcGVjLS11bml0LW9mLW1lYXN1cmVtZW50XFxcIj5vY2M8L3NwYW4+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiamF1bnQ1Ml9fY2VsbCBqYXVudDUyX19wcm9wZXJ0eS1zcGVjXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8c3BhbiBjbGFzcz1cXFwiamF1bnQ1Ml9fcHJvcGVydHktc3BlYy12YWx1ZVxcXCI+JHttb2RlbC51bml0LnNxdWFyZUZvb3RhZ2UgfCBudWxsYWJsZU51bWJlcjogJzAsMCd9PC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxzcGFuIGNsYXNzPVxcXCJqYXVudDUyX19wcm9wZXJ0eS1zcGVjLS11bml0LW9mLW1lYXN1cmVtZW50XFxcIj5zcWZ0PC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdDwvZGl2PlxcclxcblxcclxcblxcdFxcdFxcdDwhLS0gZGF0ZXMgLS0+XFxyXFxuXFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiamF1bnQ1Ml9fZGF0ZXMtY29udGFpbmVyIGphdW50NTJfX2NvbHVtbiBqYXVudDUyX193aWR0aC0taXMtZGF0ZXNcXFwiPlxcclxcblxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImphdW50NTJfX3RhYmxlLXJvd1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiamF1bnQ1Ml9fY2VsbCBqYXVudDUyX19kYXRlcyBqYXVudDUyX193aWR0aC0taXMtaGFsZlxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiamF1bnQ1Ml9fZGF0ZS1kZXRhaWxzXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHQ8c3BhbiBjbGFzcz1cXFwiamF1bnQ1Ml9fZGF0ZS1kZXRhaWxzLWlzLS1kYXlcXFwiPiR7bW9kZWwuc3RhcnREYXRlIHwgZGF0ZUZvcm1hdDogJ2RkZCcgfTwvc3Bhbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHQ8c3BhbiBjbGFzcz1cXFwiamF1bnQ1Ml9fZGF0ZS1kZXRhaWxzLWlzLS1kYXRlXFxcIj4ke21vZGVsLnN0YXJ0RGF0ZSB8IGRhdGVGb3JtYXQ6ICdNTU0gREQsIFlZWVknIH08L3NwYW4+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiamF1bnQ1Ml9fY2VsbCBqYXVudDUyX19kYXRlcyBqYXVudDUyX19tb2JpbGUtYXJyb3dcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxzdmcgY2xhc3M9XFxcImRzLWljb24tYXJyb3ctbG9uZyBkcy1pY29uLXNtXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHQ8dXNlIHhsaW5rOmhyZWY9XFxcIiNkcy1pY29uLWFycm93LWxvbmdcXFwiLz5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8L3N2Zz5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJqYXVudDUyX19jZWxsIGphdW50NTJfX2RhdGVzIGphdW50NTJfX3dpZHRoLS1pcy1oYWxmXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJqYXVudDUyX19kYXRlLWRldGFpbHNcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdDxzcGFuIGNsYXNzPVxcXCJqYXVudDUyX19kYXRlLWRldGFpbHMtaXMtLWRheVxcXCI+JHttb2RlbC5lbmREYXRlIHwgZGF0ZUZvcm1hdDogJ2RkZCcgfTwvc3Bhbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHQ8c3BhbiBjbGFzcz1cXFwiamF1bnQ1Ml9fZGF0ZS1kZXRhaWxzLWlzLS1kYXRlXFxcIj4ke21vZGVsLmVuZERhdGUgfCBkYXRlRm9ybWF0OiAnTU1NIERELCBZWVlZJyB9PC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdDwvZGl2PlxcclxcblxcclxcblxcdFxcdFxcdDwhLS0gdmFsdWUgLS0+XFxyXFxuXFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiamF1bnQ1Ml9fdmFsdWUtY29udGFpbmVyIGphdW50NTJfX2NvbHVtbiBqYXVudDUyX193aWR0aC0taXMtdmFsdWVcXFwiPlxcclxcblxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImphdW50NTJfX3RhYmxlLXJvd1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiamF1bnQ1Ml9fY2VsbCBqYXVudDUyX192YWx1ZS1kZXRhaWxzIGphdW50NTJfX21vYmlsZS1iYW5uZXJcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxzcGFuIGNsYXNzPVxcXCJqYXVudDUyX19zdHJpa2V0aHJvdWdoLWNvbnRhaW5lclxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0PHNwYW4gY2xhc3M9XFxcImphdW50NTJfX2Jhbm5lci1sb2dvXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8c3ZnIGNsYXNzPVxcXCJkcy1pY29uLWJvbHQgZHMtaWNvbi1tZCBqYXVudDUyX19iYW5uZXItbG9nb1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PHVzZSB4bGluazpocmVmPVxcXCIjZHMtaWNvbi1ib2x0XFxcIi8+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9zdmc+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdDxzcGFuIGNsYXNzPVxcXCJqYXVudDUyX19sYWJlbCBkcy1sYWJlbC1zbWFsbFxcXCI+TmlnaHRseTwvc3Bhbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHQ8c3BhbiBjbGFzcz1cXFwiamF1bnQ1Ml9fdmFsdWUtZGV0YWlscy0taXMtc3RyaWtldGhyb3VnaFxcXCI+JHttb2RlbC5uaWdodGx5TXNycCB8IG51bGxhYmxlTnVtYmVyOiAnJDAsMCd9PC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdDxzcGFuIGNsYXNzPVxcXCJqYXVudDUyX192YWx1ZS1kZXRhaWxzLS1pcy12YWx1ZVxcXCI+JHttb2RlbC5uaWdodGx5QXZnUmF0ZSB8IG51bGxhYmxlTnVtYmVyOiAnJDAsMCd9PC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDwvc3Bhbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJqYXVudDUyX19zdWJ0b3RhbC1wb3B1cC1jb250YWluZXJcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImphdW50NTJfX2NhbGN1bGF0b3Itc3ZnLWNvbnRhaW5lclxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PHN2ZyBjbGFzcz1cXFwiZHMtaWNvbi1jYWxjdWxhdG9yIGRzLWljb24tc21cXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDx1c2UgeGxpbms6aHJlZj1cXFwiI2RzLWljb24tY2FsY3VsYXRvclxcXCIvPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDwvc3ZnPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImphdW50NTJfX3RleHQtY29udGFpbmVyXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8c3BhbiBjbGFzcz1cXFwiamF1bnQ1Ml9fbGFiZWwtLXN1YnRvdGFsXFxcIj5TdWJ0b3RhbDwvc3Bhbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8c3BhbiBjbGFzcz1cXFwiamF1bnQ1Ml9fdmFsdWUtZGV0YWlscy0taXMtdmFsdWVcXFwiPiR7bW9kZWwuc3VidG90YWwgfCBudWxsYWJsZU51bWJlcjogJyQwLDAnfTwvc3Bhbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHJcXG5cXHRcXHRcXHQ8IS0tIHBlcmNlbnQgLS0+XFxyXFxuXFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiamF1bnQ1Ml9fcGVyY2VudC1jb250YWluZXIgamF1bnQ1Ml9fY29sdW1uIGphdW50NTJfX3dpZHRoLS1pcy1wZXJjZW50XFxcIj5cXHJcXG5cXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJqYXVudDUyX190YWJsZS1yb3dcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImphdW50NTJfX2NlbGwgamF1bnQ1Ml9fcGVyY2VudC1kZXRhaWxzXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8c3BhbiBjbGFzcz1cXFwiamF1bnQ1Ml9fcGVyY2VudFxcXCI+JHttb2RlbC5wZXJjZW50YWdlT2ZmfTwvc3Bhbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHJcXG5cXHRcXHRcXHQ8IS0tIHN0YXR1cy9jdGEgLS0+XFxyXFxuXFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiamF1bnQ1Ml9fc3RhdHVzLWNvbnRhaW5lciBqYXVudDUyX19jb2x1bW4gamF1bnQ1Ml9fd2lkdGgtLWlzLXN0YXR1c1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiamF1bnQ1Ml9fdGFibGUtcm93XFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJqYXVudDUyX19jZWxsIGphdW50NTJfX2N0YS1jb250YWluZXIgJHttb2RlbC5zaG93VHJpcFZhbHVlID8gamF1bnQ1Ml9fd2lkdGgtLWlzLWhhbGYgOiAnJ31cXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxidXR0b24gaWYuYmluZD1cXFwibW9kZWwuaXNCb29rZWRcXFwiIGNsYXNzPVxcXCJqYXVudDUyX19jdGEgZHMtYnRuLXByaW1hcnkgZHMtYnRuLS1kaXNhYmxlZFxcXCIgZGlzYWJsZWQ+Qm9va2VkPC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGEgaWYuYmluZD1cXFwiIW1vZGVsLmlzQWNjZXNzUmVzdHJpY3RlZCAmJiAhbW9kZWwuaXNCb29rZWQgJiYgIW1vZGVsLmlzUmVnaXN0ZXJlZFVzZXJcXFwiIGhyZWY9XFxcIi9DaGVja291dC9SZXNpZGVuY2U/Y29kZT0ke21vZGVsLnVuaXQuaWR9JmFycml2YWxEYXRlPSR7bW9kZWwuc3RhcnREYXRlIHwgZGF0ZUZvcm1hdDogJ01NL0REL1lZWVknIH0mZGVwYXJ0dXJlRGF0ZT0ke21vZGVsLmVuZERhdGUgfCBkYXRlRm9ybWF0OiAnTU0vREQvWVlZWScgfVxcXCIgY2xhc3M9XFxcImphdW50NTJfX2N0YSBkcy1idG4tcHJpbWFyeVxcXCIgdGFyZ2V0PVxcXCJfYmxhbmtcXFwiPkJvb2s8L2E+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PHNwYW4gaWYuYmluZD1cXFwiIW1vZGVsLmlzQWNjZXNzUmVzdHJpY3RlZCAmJiAhbW9kZWwuaXNCb29rZWQgJiYgbW9kZWwuaXNSZWdpc3RlcmVkVXNlclxcXCI+Sm9pbiB0byBCb29rPC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgaWYuYmluZD1cXFwibW9kZWwuaXNBY2Nlc3NSZXN0cmljdGVkICYmICFtb2RlbC5pc0Jvb2tlZFxcXCIgY2xhc3M9XFxcImphdW50NTJfX3Jlc3RyaWN0ZWQtbWVzc2FnZSBkcy1wLXNtYWxsXFxcIj5BdmFpbGFibGUgVGh1LCZuYnNwOzEmbmJzcDtwLm0uJm5ic3A7TVQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHJcXG5cXHRcXHQ8L2Rpdj5cXHJcXG5cXHQ8L2Rpdj5cXHJcXG48L3RlbXBsYXRlPlxcclxcblwiOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///components/jaunt52/jaunt52-row.html\n')},"components/jaunt52/jaunt52.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<loading if.bind=\\"!hasData && !hasErrors\\" class=\\"loader\\"><\/loading>\\r\\n\\r\\n\\t<div if.bind=\\"hasData && !hasErrors && !isInPreview\\" class=\\"jaunt52\\">\\r\\n\\r\\n\\t\\t<div class=\\"jaunt52__filters row bottom-xs around-xs\\">\\r\\n\\t\\t\\t<div class=\\"jaunt52__filter col-xs-12 col-sm-6 col-md-3\\">\\r\\n\\t\\t\\t\\t<label class=\\"jaunt52__filter-label ds-label-medium\\">Arrival Month<\/label>\\r\\n\\t\\t\\t\\t<select-menu\\r\\n\\t\\t\\t\\t\\titems.bind=\\"arrivalMonths\\"\\r\\n\\t\\t\\t\\t\\tselected-item.two-way=\\"selectedArrivalMonths\\"\\r\\n\\t\\t\\t\\t\\ton-change.call=\\"filterTrips()\\">\\r\\n\\t\\t\\t\\t<\/select-menu>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<div class=\\"jaunt52__filter col-xs-12 col-sm-6 col-md-3\\">\\r\\n\\t\\t\\t\\t<label class=\\"jaunt52__filter-label ds-label-medium\\">Vacation Style<\/label>\\r\\n\\t\\t\\t\\t<select-menu\\r\\n\\t\\t\\t\\t\\titems.bind=\\"vacationStyle\\"\\r\\n\\t\\t\\t\\t\\tselected-item.two-way=\\"selectedVacationStyle\\"\\r\\n\\t\\t\\t\\t\\ton-change.call=\\"filterTrips()\\">\\r\\n\\t\\t\\t\\t<\/select-menu>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<div class=\\"jaunt52__filter jaunt52__filter--is-destination col-xs-12 col-md-4 col-lg-5\\">\\r\\n\\t\\t\\t\\t<label class=\\"jaunt52__filter-label ds-label-medium\\">Destination<\/label>\\r\\n\\t\\t\\t\\t<select-menu\\r\\n\\t\\t\\t\\t\\titems.bind=\\"destination\\"\\r\\n\\t\\t\\t\\t\\tselected-item.two-way=\\"selectedDestination\\"\\r\\n\\t\\t\\t\\t\\ton-change.call=\\"filterTrips()\\">\\r\\n\\t\\t\\t\\t<\/select-menu>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<div class=\\"jaunt52__filter col-xs-12 col-md-2 col-lg-1\\">\\r\\n\\t\\t\\t\\t<button\\r\\n\\t\\t\\t\\t\\tclick.delegate=\\"reset()\\"\\r\\n\\t\\t\\t\\t\\tclass=\\"ds-btn-primary jaunt52__reset\\">\\r\\n\\t\\t\\t\\t\\tReset\\r\\n\\t\\t\\t\\t<\/button>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t<\/div>\\r\\n\\r\\n\\t\\t<div class=\\"jaunt52__results-bar row middle-xs\\">\\r\\n\\t\\t\\t<div class=\\"jaunt52__search-results col-xs col-md-12\\">\\r\\n\\t\\t\\t\\tShowing <span class=\\"jaunt52__search-results-count\\">${searchResultsCount}<\/span> results\\r\\n\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t<!-- xs & sm sort -->\\r\\n\\t\\t\\t<dropdown class=\\"jaunt52__mobile-sort col-xs end-xs show-xs-sm-only\\">\\r\\n\\t\\t\\t\\t<div class=\\"ds-btn-secondary\\" slot=\\"button\\">\\r\\n\\t\\t\\t\\t\\tSort\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t<div slot=\\"content\\" aria-label=\\"submenu\\" class=\\"dropdown-content start-xs\\">\\r\\n\\t\\t\\t\\t\\t<ul>\\r\\n\\t\\t\\t\\t\\t\\t<li click.trigger=\\"sortByColumn(\'isBooked\')\\" class=\\"${sortProperty === \'isBooked\' ? \'jaunt52__thead\' + sortOrderModifier : \'\'} jaunt52__mobile-sort-option\\">Availability<\/li>\\r\\n\\t\\t\\t\\t\\t\\t<li click.trigger=\\"sortByColumn(\'nightlyAvgRate\')\\" class=\\"${sortProperty === \'nightlyAvgRate\' ? \'jaunt52__thead\' + sortOrderModifier : \'\'} jaunt52__mobile-sort-option\\">Nightly<\/li>\\r\\n\\t\\t\\t\\t\\t\\t<li click.trigger=\\"sortByColumn(\'percentageOff\')\\" class=\\"${sortProperty === \'percentageOff\' ? \'jaunt52__thead\' + sortOrderModifier : \'\'} jaunt52__mobile-sort-option\\">% Off<\/li>\\r\\n\\t\\t\\t\\t\\t\\t<li click.trigger=\\"sortByColumn(\'startDate\')\\" class=\\"${sortProperty === \'startDate\' ? \'jaunt52__thead\' + sortOrderModifier : \'\'} jaunt52__mobile-sort-option\\">Dates<\/li>\\r\\n\\t\\t\\t\\t\\t\\t<li click.trigger=\\"sortByColumn(\'destination\')\\" class=\\"${sortProperty === \'destination\' ? \'jaunt52__thead\' + sortOrderModifier : \'\'} jaunt52__mobile-sort-option\\">Destination<\/li>\\r\\n\\t\\t\\t\\t\\t\\t<li click.trigger=\\"sortByColumn(\'bedrooms\')\\" class=\\"${sortProperty === \'bedrooms\' ? \'jaunt52__thead\' + sortOrderModifier : \'\'} jaunt52__mobile-sort-option\\">Bedrooms<\/li>\\r\\n\\t\\t\\t\\t\\t\\t<li click.trigger=\\"sortByColumn(\'suggestedOccupancy\')\\" class=\\"${sortProperty === \'suggestedOccupancy\' ? \'jaunt52__thead\' + sortOrderModifier : \'\'} jaunt52__mobile-sort-option\\">Occupancy<\/li>\\r\\n\\t\\t\\t\\t\\t\\t<li if.bind=\\"displayPricing\\" click.trigger=\\"sortByColumn(\'nightlyAvgRate\')\\" class=\\"${sortProperty === \'nightlyAvgRate\' ? \'jaunt52__thead\' + sortOrderModifier : \'\'} jaunt52__mobile-sort-option\\">Est. Value<\/li>\\r\\n\\t\\t\\t\\t\\t<\/ul>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<\/dropdown>\\r\\n\\t\\t<\/div>\\r\\n\\r\\n\\t\\t<div class=\\"jaunt52__results row\\">\\r\\n\\t\\t\\t<div class=\\"jaunt52__table-headers\\">\\r\\n\\t\\t\\t\\t<div class=\\"jaunt52__content-container\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\"jaunt52__column jaunt52__width--is-destination\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\"jaunt52__table-row\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\"${sortProperty === \'destination\' ? \'jaunt52__thead\' + sortOrderModifier : \'\'} sort-location jaunt52__thead jaunt52__thead--is-destination\\" click.delegate=\\"sortByColumn(\'destination\', false)\\">Destination\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<svg class=\\"ds-icon-arrow ds-icon-sm\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<use xlink:href=\\"#ds-icon-arrow\\"/>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<\/svg>\\r\\n\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<div class=\\"jaunt52__column jaunt52__width--is-property-specs\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\"jaunt52__table-row\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\"${sortProperty === \'bedrooms\' ? \'jaunt52__thead\' + sortOrderModifier : \'\'} jaunt52__thead jaunt52__property-spec\\" click.delegate=\\"sortByColumn(\'bedrooms\', false)\\">BR\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<svg class=\\"ds-icon-arrow ds-icon-sm\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<use xlink:href=\\"#ds-icon-arrow\\"/>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<\/svg>\\r\\n\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\"${sortProperty === \'bathrooms\' ? \'jaunt52__thead\' + sortOrderModifier : \'\'} jaunt52__thead jaunt52__property-spec\\" click.delegate=\\"sortByColumn(\'bathrooms\', false)\\">BA\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<svg class=\\"ds-icon-arrow ds-icon-sm\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<use xlink:href=\\"#ds-icon-arrow\\"/>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<\/svg>\\r\\n\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\"${sortProperty === \'suggestedOccupancy\' ? \'jaunt52__thead\' + sortOrderModifier : \'\'} jaunt52__thead jaunt52__property-spec\\" click.delegate=\\"sortByColumn(\'suggestedOccupancy\', false)\\">OCC\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<svg class=\\"ds-icon-arrow ds-icon-sm\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<use xlink:href=\\"#ds-icon-arrow\\"/>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<\/svg>\\r\\n\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\"${sortProperty === \'squareFootage\' ? \'jaunt52__thead\' + sortOrderModifier : \'\'} jaunt52__thead jaunt52__property-spec\\" click.delegate=\\"sortByColumn(\'squareFootage\', false)\\">SQFT\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<svg class=\\"ds-icon-arrow ds-icon-sm\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<use xlink:href=\\"#ds-icon-arrow\\"/>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<\/svg>\\r\\n\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<div class=\\"jaunt52__column jaunt52__width--is-dates\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\"jaunt52__table-row\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\"${sortProperty === \'startDate\' ? \'jaunt52__thead\' + sortOrderModifier : \'\'} jaunt52__thead jaunt52__thead--is-date jaunt52__width--is-half\\" click.delegate=\\"sortByColumn(\'startDate\', false)\\">Check In\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<svg class=\\"ds-icon-arrow ds-icon-sm\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<use xlink:href=\\"#ds-icon-arrow\\"/>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<\/svg>\\r\\n\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\"${sortProperty === \'endDate\' ? \'jaunt52__thead\' + sortOrderModifier : \'\'} jaunt52__thead jaunt52__thead--is-date jaunt52__width--is-half\\" click.delegate=\\"sortByColumn(\'endDate\', false)\\">Check Out\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<svg class=\\"ds-icon-arrow ds-icon-sm\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<use xlink:href=\\"#ds-icon-arrow\\"/>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<\/svg>\\r\\n\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<div class=\\"jaunt52__column jaunt52__width--is-value\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\"jaunt52__table-row\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\"${sortProperty === \'nightlyAvgRate\' ? \'jaunt52__thead\' + sortOrderModifier : \'\'} jaunt52__thead jaunt52__thead--is-value\\" click.delegate=\\"sortByColumn(\'nightlyAvgRate\', false)\\">Nightly\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<svg class=\\"ds-icon-arrow ds-icon-sm\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<use xlink:href=\\"#ds-icon-arrow\\"/>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<\/svg>\\r\\n\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<div class=\\"jaunt52__column jaunt52__width--is-percent\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\"jaunt52__table-row\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\"jaunt52__thead jaunt52__thead--is-percent ${sortProperty === \'percentageOff\' ? \'jaunt52__thead\' + sortOrderModifier : \'\'}\\" click.delegate=\\"sortByColumn(\'percentageOff\', false)\\">%&nbsp;Off\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<svg class=\\"ds-icon-arrow ds-icon-sm\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<use xlink:href=\\"#ds-icon-arrow\\"/>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<\/svg>\\r\\n\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<div class=\\"jaunt52__column jaunt52__width--is-status\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\"jaunt52__table-row\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\"jaunt52__thead jaunt52__thead--is-status jaunt52__width--is-half ${sortProperty === \'isBooked\' ? \'jaunt52__thead\' + sortOrderModifier : \'\'}\\" click.delegate=\\"sortByColumn(\'isBooked\', false)\\">Status\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<svg class=\\"ds-icon-arrow ds-icon-sm\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<use xlink:href=\\"#ds-icon-arrow\\"/>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<\/svg>\\r\\n\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t<jaunt52-row repeat.for=\\"vacation of trips\\" model.bind=\\"vacation\\"><\/jaunt52-row>\\r\\n\\t\\t<\/div>\\r\\n\\r\\n\\t<\/div>\\r\\n\\r\\n\\t<div if.bind=\\"hasData && !hasErrors && isInPreview\\" class=\\"jaunt52__preview\\">\\r\\n\\t\\t<h2>Updates in progress<\/h2>\\r\\n\\t\\t<p>We are currently updating our new Jaunt selections, please check back when you receive your weekly Jaunt release email.<\/p>\\r\\n\\t\\t<p>In the meantime, <a class=\\"ds-link-primary\\" href=\\"/destination-results\\">browse the Inspirato Collection<\/a> to view our entire portfolio of vacation options.<\/p>\\r\\n\\t<\/div>\\r\\n\\r\\n\\t<div if.bind=\\"hasErrors\\" class=\\"row\\">\\r\\n\\t\\t<div class=\\"col-xs jaunt52__error-message\\">\\r\\n\\t\\t\\t<h4>Oops! We\'re sorry.<\/h4>\\r\\n\\t\\t\\t<div>\\r\\n\\t\\t\\t\\tAn error occured and were unable to load the page.\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t<\/div>\\r\\n\\t<\/div>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9qYXVudDUyL2phdW50NTIuaHRtbD81ZDIzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDB6REFBMHpELG1CQUFtQiwyYUFBMmEsd0VBQXdFLCtIQUErSCw4RUFBOEUseUhBQXlILDZFQUE2RSxtSEFBbUgseUVBQXlFLHFIQUFxSCwyRUFBMkUsd0hBQXdILHdFQUF3RSwrSEFBK0gsa0ZBQWtGLHVKQUF1Siw4RUFBOEUsMmFBQTJhLDJFQUEyRSxvZkFBb2Ysd0VBQXdFLHVTQUF1Uyx5RUFBeUUsd1NBQXdTLGtGQUFrRixrVEFBa1QsNkVBQTZFLGdkQUFnZCx5RUFBeUUsdVVBQXVVLHVFQUF1RSx3ZUFBd2UsOEVBQThFLGtnQkFBa2dCLDZFQUE2RSxrRUFBa0UsZ2JBQWdiLHdFQUF3RSIsImZpbGUiOiJjb21wb25lbnRzL2phdW50NTIvamF1bnQ1Mi5odG1sLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBcIjx0ZW1wbGF0ZT5cXHJcXG5cXHQ8bG9hZGluZyBpZi5iaW5kPVxcXCIhaGFzRGF0YSAmJiAhaGFzRXJyb3JzXFxcIiBjbGFzcz1cXFwibG9hZGVyXFxcIj48L2xvYWRpbmc+XFxyXFxuXFxyXFxuXFx0PGRpdiBpZi5iaW5kPVxcXCJoYXNEYXRhICYmICFoYXNFcnJvcnMgJiYgIWlzSW5QcmV2aWV3XFxcIiBjbGFzcz1cXFwiamF1bnQ1MlxcXCI+XFxyXFxuXFxyXFxuXFx0XFx0PGRpdiBjbGFzcz1cXFwiamF1bnQ1Ml9fZmlsdGVycyByb3cgYm90dG9tLXhzIGFyb3VuZC14c1xcXCI+XFxyXFxuXFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiamF1bnQ1Ml9fZmlsdGVyIGNvbC14cy0xMiBjb2wtc20tNiBjb2wtbWQtM1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0PGxhYmVsIGNsYXNzPVxcXCJqYXVudDUyX19maWx0ZXItbGFiZWwgZHMtbGFiZWwtbWVkaXVtXFxcIj5BcnJpdmFsIE1vbnRoPC9sYWJlbD5cXHJcXG5cXHRcXHRcXHRcXHQ8c2VsZWN0LW1lbnVcXHJcXG5cXHRcXHRcXHRcXHRcXHRpdGVtcy5iaW5kPVxcXCJhcnJpdmFsTW9udGhzXFxcIlxcclxcblxcdFxcdFxcdFxcdFxcdHNlbGVjdGVkLWl0ZW0udHdvLXdheT1cXFwic2VsZWN0ZWRBcnJpdmFsTW9udGhzXFxcIlxcclxcblxcdFxcdFxcdFxcdFxcdG9uLWNoYW5nZS5jYWxsPVxcXCJmaWx0ZXJUcmlwcygpXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHQ8L3NlbGVjdC1tZW51PlxcclxcblxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImphdW50NTJfX2ZpbHRlciBjb2wteHMtMTIgY29sLXNtLTYgY29sLW1kLTNcXFwiPlxcclxcblxcdFxcdFxcdFxcdDxsYWJlbCBjbGFzcz1cXFwiamF1bnQ1Ml9fZmlsdGVyLWxhYmVsIGRzLWxhYmVsLW1lZGl1bVxcXCI+VmFjYXRpb24gU3R5bGU8L2xhYmVsPlxcclxcblxcdFxcdFxcdFxcdDxzZWxlY3QtbWVudVxcclxcblxcdFxcdFxcdFxcdFxcdGl0ZW1zLmJpbmQ9XFxcInZhY2F0aW9uU3R5bGVcXFwiXFxyXFxuXFx0XFx0XFx0XFx0XFx0c2VsZWN0ZWQtaXRlbS50d28td2F5PVxcXCJzZWxlY3RlZFZhY2F0aW9uU3R5bGVcXFwiXFxyXFxuXFx0XFx0XFx0XFx0XFx0b24tY2hhbmdlLmNhbGw9XFxcImZpbHRlclRyaXBzKClcXFwiPlxcclxcblxcdFxcdFxcdFxcdDwvc2VsZWN0LW1lbnU+XFxyXFxuXFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiamF1bnQ1Ml9fZmlsdGVyIGphdW50NTJfX2ZpbHRlci0taXMtZGVzdGluYXRpb24gY29sLXhzLTEyIGNvbC1tZC00IGNvbC1sZy01XFxcIj5cXHJcXG5cXHRcXHRcXHRcXHQ8bGFiZWwgY2xhc3M9XFxcImphdW50NTJfX2ZpbHRlci1sYWJlbCBkcy1sYWJlbC1tZWRpdW1cXFwiPkRlc3RpbmF0aW9uPC9sYWJlbD5cXHJcXG5cXHRcXHRcXHRcXHQ8c2VsZWN0LW1lbnVcXHJcXG5cXHRcXHRcXHRcXHRcXHRpdGVtcy5iaW5kPVxcXCJkZXN0aW5hdGlvblxcXCJcXHJcXG5cXHRcXHRcXHRcXHRcXHRzZWxlY3RlZC1pdGVtLnR3by13YXk9XFxcInNlbGVjdGVkRGVzdGluYXRpb25cXFwiXFxyXFxuXFx0XFx0XFx0XFx0XFx0b24tY2hhbmdlLmNhbGw9XFxcImZpbHRlclRyaXBzKClcXFwiPlxcclxcblxcdFxcdFxcdFxcdDwvc2VsZWN0LW1lbnU+XFxyXFxuXFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiamF1bnQ1Ml9fZmlsdGVyIGNvbC14cy0xMiBjb2wtbWQtMiBjb2wtbGctMVxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0PGJ1dHRvblxcclxcblxcdFxcdFxcdFxcdFxcdGNsaWNrLmRlbGVnYXRlPVxcXCJyZXNldCgpXFxcIlxcclxcblxcdFxcdFxcdFxcdFxcdGNsYXNzPVxcXCJkcy1idG4tcHJpbWFyeSBqYXVudDUyX19yZXNldFxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0UmVzZXRcXHJcXG5cXHRcXHRcXHRcXHQ8L2J1dHRvbj5cXHJcXG5cXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHQ8L2Rpdj5cXHJcXG5cXHJcXG5cXHRcXHQ8ZGl2IGNsYXNzPVxcXCJqYXVudDUyX19yZXN1bHRzLWJhciByb3cgbWlkZGxlLXhzXFxcIj5cXHJcXG5cXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJqYXVudDUyX19zZWFyY2gtcmVzdWx0cyBjb2wteHMgY29sLW1kLTEyXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRTaG93aW5nIDxzcGFuIGNsYXNzPVxcXCJqYXVudDUyX19zZWFyY2gtcmVzdWx0cy1jb3VudFxcXCI+JHtzZWFyY2hSZXN1bHRzQ291bnR9PC9zcGFuPiByZXN1bHRzXFxyXFxuXFx0XFx0XFx0PC9kaXY+XFxyXFxuXFxyXFxuXFx0XFx0XFx0PCEtLSB4cyAmIHNtIHNvcnQgLS0+XFxyXFxuXFx0XFx0XFx0PGRyb3Bkb3duIGNsYXNzPVxcXCJqYXVudDUyX19tb2JpbGUtc29ydCBjb2wteHMgZW5kLXhzIHNob3cteHMtc20tb25seVxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiZHMtYnRuLXNlY29uZGFyeVxcXCIgc2xvdD1cXFwiYnV0dG9uXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRTb3J0XFxyXFxuXFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0PGRpdiBzbG90PVxcXCJjb250ZW50XFxcIiBhcmlhLWxhYmVsPVxcXCJzdWJtZW51XFxcIiBjbGFzcz1cXFwiZHJvcGRvd24tY29udGVudCBzdGFydC14c1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PHVsPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxsaSBjbGljay50cmlnZ2VyPVxcXCJzb3J0QnlDb2x1bW4oJ2lzQm9va2VkJylcXFwiIGNsYXNzPVxcXCIke3NvcnRQcm9wZXJ0eSA9PT0gJ2lzQm9va2VkJyA/ICdqYXVudDUyX190aGVhZCcgKyBzb3J0T3JkZXJNb2RpZmllciA6ICcnfSBqYXVudDUyX19tb2JpbGUtc29ydC1vcHRpb25cXFwiPkF2YWlsYWJpbGl0eTwvbGk+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGxpIGNsaWNrLnRyaWdnZXI9XFxcInNvcnRCeUNvbHVtbignbmlnaHRseUF2Z1JhdGUnKVxcXCIgY2xhc3M9XFxcIiR7c29ydFByb3BlcnR5ID09PSAnbmlnaHRseUF2Z1JhdGUnID8gJ2phdW50NTJfX3RoZWFkJyArIHNvcnRPcmRlck1vZGlmaWVyIDogJyd9IGphdW50NTJfX21vYmlsZS1zb3J0LW9wdGlvblxcXCI+TmlnaHRseTwvbGk+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGxpIGNsaWNrLnRyaWdnZXI9XFxcInNvcnRCeUNvbHVtbigncGVyY2VudGFnZU9mZicpXFxcIiBjbGFzcz1cXFwiJHtzb3J0UHJvcGVydHkgPT09ICdwZXJjZW50YWdlT2ZmJyA/ICdqYXVudDUyX190aGVhZCcgKyBzb3J0T3JkZXJNb2RpZmllciA6ICcnfSBqYXVudDUyX19tb2JpbGUtc29ydC1vcHRpb25cXFwiPiUgT2ZmPC9saT5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8bGkgY2xpY2sudHJpZ2dlcj1cXFwic29ydEJ5Q29sdW1uKCdzdGFydERhdGUnKVxcXCIgY2xhc3M9XFxcIiR7c29ydFByb3BlcnR5ID09PSAnc3RhcnREYXRlJyA/ICdqYXVudDUyX190aGVhZCcgKyBzb3J0T3JkZXJNb2RpZmllciA6ICcnfSBqYXVudDUyX19tb2JpbGUtc29ydC1vcHRpb25cXFwiPkRhdGVzPC9saT5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8bGkgY2xpY2sudHJpZ2dlcj1cXFwic29ydEJ5Q29sdW1uKCdkZXN0aW5hdGlvbicpXFxcIiBjbGFzcz1cXFwiJHtzb3J0UHJvcGVydHkgPT09ICdkZXN0aW5hdGlvbicgPyAnamF1bnQ1Ml9fdGhlYWQnICsgc29ydE9yZGVyTW9kaWZpZXIgOiAnJ30gamF1bnQ1Ml9fbW9iaWxlLXNvcnQtb3B0aW9uXFxcIj5EZXN0aW5hdGlvbjwvbGk+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGxpIGNsaWNrLnRyaWdnZXI9XFxcInNvcnRCeUNvbHVtbignYmVkcm9vbXMnKVxcXCIgY2xhc3M9XFxcIiR7c29ydFByb3BlcnR5ID09PSAnYmVkcm9vbXMnID8gJ2phdW50NTJfX3RoZWFkJyArIHNvcnRPcmRlck1vZGlmaWVyIDogJyd9IGphdW50NTJfX21vYmlsZS1zb3J0LW9wdGlvblxcXCI+QmVkcm9vbXM8L2xpPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxsaSBjbGljay50cmlnZ2VyPVxcXCJzb3J0QnlDb2x1bW4oJ3N1Z2dlc3RlZE9jY3VwYW5jeScpXFxcIiBjbGFzcz1cXFwiJHtzb3J0UHJvcGVydHkgPT09ICdzdWdnZXN0ZWRPY2N1cGFuY3knID8gJ2phdW50NTJfX3RoZWFkJyArIHNvcnRPcmRlck1vZGlmaWVyIDogJyd9IGphdW50NTJfX21vYmlsZS1zb3J0LW9wdGlvblxcXCI+T2NjdXBhbmN5PC9saT5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8bGkgaWYuYmluZD1cXFwiZGlzcGxheVByaWNpbmdcXFwiIGNsaWNrLnRyaWdnZXI9XFxcInNvcnRCeUNvbHVtbignbmlnaHRseUF2Z1JhdGUnKVxcXCIgY2xhc3M9XFxcIiR7c29ydFByb3BlcnR5ID09PSAnbmlnaHRseUF2Z1JhdGUnID8gJ2phdW50NTJfX3RoZWFkJyArIHNvcnRPcmRlck1vZGlmaWVyIDogJyd9IGphdW50NTJfX21vYmlsZS1zb3J0LW9wdGlvblxcXCI+RXN0LiBWYWx1ZTwvbGk+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PC91bD5cXHJcXG5cXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHQ8L2Ryb3Bkb3duPlxcclxcblxcdFxcdDwvZGl2PlxcclxcblxcclxcblxcdFxcdDxkaXYgY2xhc3M9XFxcImphdW50NTJfX3Jlc3VsdHMgcm93XFxcIj5cXHJcXG5cXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJqYXVudDUyX190YWJsZS1oZWFkZXJzXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJqYXVudDUyX19jb250ZW50LWNvbnRhaW5lclxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiamF1bnQ1Ml9fY29sdW1uIGphdW50NTJfX3dpZHRoLS1pcy1kZXN0aW5hdGlvblxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiamF1bnQ1Ml9fdGFibGUtcm93XFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCIke3NvcnRQcm9wZXJ0eSA9PT0gJ2Rlc3RpbmF0aW9uJyA/ICdqYXVudDUyX190aGVhZCcgKyBzb3J0T3JkZXJNb2RpZmllciA6ICcnfSBzb3J0LWxvY2F0aW9uIGphdW50NTJfX3RoZWFkIGphdW50NTJfX3RoZWFkLS1pcy1kZXN0aW5hdGlvblxcXCIgY2xpY2suZGVsZWdhdGU9XFxcInNvcnRCeUNvbHVtbignZGVzdGluYXRpb24nLCBmYWxzZSlcXFwiPkRlc3RpbmF0aW9uXFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PHN2ZyBjbGFzcz1cXFwiZHMtaWNvbi1hcnJvdyBkcy1pY29uLXNtXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8dXNlIHhsaW5rOmhyZWY9XFxcIiNkcy1pY29uLWFycm93XFxcIi8+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9zdmc+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiamF1bnQ1Ml9fY29sdW1uIGphdW50NTJfX3dpZHRoLS1pcy1wcm9wZXJ0eS1zcGVjc1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiamF1bnQ1Ml9fdGFibGUtcm93XFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCIke3NvcnRQcm9wZXJ0eSA9PT0gJ2JlZHJvb21zJyA/ICdqYXVudDUyX190aGVhZCcgKyBzb3J0T3JkZXJNb2RpZmllciA6ICcnfSBqYXVudDUyX190aGVhZCBqYXVudDUyX19wcm9wZXJ0eS1zcGVjXFxcIiBjbGljay5kZWxlZ2F0ZT1cXFwic29ydEJ5Q29sdW1uKCdiZWRyb29tcycsIGZhbHNlKVxcXCI+QlJcXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8c3ZnIGNsYXNzPVxcXCJkcy1pY29uLWFycm93IGRzLWljb24tc21cXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDx1c2UgeGxpbms6aHJlZj1cXFwiI2RzLWljb24tYXJyb3dcXFwiLz5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L3N2Zz5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCIke3NvcnRQcm9wZXJ0eSA9PT0gJ2JhdGhyb29tcycgPyAnamF1bnQ1Ml9fdGhlYWQnICsgc29ydE9yZGVyTW9kaWZpZXIgOiAnJ30gamF1bnQ1Ml9fdGhlYWQgamF1bnQ1Ml9fcHJvcGVydHktc3BlY1xcXCIgY2xpY2suZGVsZWdhdGU9XFxcInNvcnRCeUNvbHVtbignYmF0aHJvb21zJywgZmFsc2UpXFxcIj5CQVxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDxzdmcgY2xhc3M9XFxcImRzLWljb24tYXJyb3cgZHMtaWNvbi1zbVxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PHVzZSB4bGluazpocmVmPVxcXCIjZHMtaWNvbi1hcnJvd1xcXCIvPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDwvc3ZnPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcIiR7c29ydFByb3BlcnR5ID09PSAnc3VnZ2VzdGVkT2NjdXBhbmN5JyA/ICdqYXVudDUyX190aGVhZCcgKyBzb3J0T3JkZXJNb2RpZmllciA6ICcnfSBqYXVudDUyX190aGVhZCBqYXVudDUyX19wcm9wZXJ0eS1zcGVjXFxcIiBjbGljay5kZWxlZ2F0ZT1cXFwic29ydEJ5Q29sdW1uKCdzdWdnZXN0ZWRPY2N1cGFuY3knLCBmYWxzZSlcXFwiPk9DQ1xcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDxzdmcgY2xhc3M9XFxcImRzLWljb24tYXJyb3cgZHMtaWNvbi1zbVxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PHVzZSB4bGluazpocmVmPVxcXCIjZHMtaWNvbi1hcnJvd1xcXCIvPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDwvc3ZnPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcIiR7c29ydFByb3BlcnR5ID09PSAnc3F1YXJlRm9vdGFnZScgPyAnamF1bnQ1Ml9fdGhlYWQnICsgc29ydE9yZGVyTW9kaWZpZXIgOiAnJ30gamF1bnQ1Ml9fdGhlYWQgamF1bnQ1Ml9fcHJvcGVydHktc3BlY1xcXCIgY2xpY2suZGVsZWdhdGU9XFxcInNvcnRCeUNvbHVtbignc3F1YXJlRm9vdGFnZScsIGZhbHNlKVxcXCI+U1FGVFxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDxzdmcgY2xhc3M9XFxcImRzLWljb24tYXJyb3cgZHMtaWNvbi1zbVxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PHVzZSB4bGluazpocmVmPVxcXCIjZHMtaWNvbi1hcnJvd1xcXCIvPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDwvc3ZnPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImphdW50NTJfX2NvbHVtbiBqYXVudDUyX193aWR0aC0taXMtZGF0ZXNcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImphdW50NTJfX3RhYmxlLXJvd1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiJHtzb3J0UHJvcGVydHkgPT09ICdzdGFydERhdGUnID8gJ2phdW50NTJfX3RoZWFkJyArIHNvcnRPcmRlck1vZGlmaWVyIDogJyd9IGphdW50NTJfX3RoZWFkIGphdW50NTJfX3RoZWFkLS1pcy1kYXRlIGphdW50NTJfX3dpZHRoLS1pcy1oYWxmXFxcIiBjbGljay5kZWxlZ2F0ZT1cXFwic29ydEJ5Q29sdW1uKCdzdGFydERhdGUnLCBmYWxzZSlcXFwiPkNoZWNrIEluXFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PHN2ZyBjbGFzcz1cXFwiZHMtaWNvbi1hcnJvdyBkcy1pY29uLXNtXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8dXNlIHhsaW5rOmhyZWY9XFxcIiNkcy1pY29uLWFycm93XFxcIi8+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9zdmc+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiJHtzb3J0UHJvcGVydHkgPT09ICdlbmREYXRlJyA/ICdqYXVudDUyX190aGVhZCcgKyBzb3J0T3JkZXJNb2RpZmllciA6ICcnfSBqYXVudDUyX190aGVhZCBqYXVudDUyX190aGVhZC0taXMtZGF0ZSBqYXVudDUyX193aWR0aC0taXMtaGFsZlxcXCIgY2xpY2suZGVsZWdhdGU9XFxcInNvcnRCeUNvbHVtbignZW5kRGF0ZScsIGZhbHNlKVxcXCI+Q2hlY2sgT3V0XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PHN2ZyBjbGFzcz1cXFwiZHMtaWNvbi1hcnJvdyBkcy1pY29uLXNtXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8dXNlIHhsaW5rOmhyZWY9XFxcIiNkcy1pY29uLWFycm93XFxcIi8+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9zdmc+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiamF1bnQ1Ml9fY29sdW1uIGphdW50NTJfX3dpZHRoLS1pcy12YWx1ZVxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiamF1bnQ1Ml9fdGFibGUtcm93XFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCIke3NvcnRQcm9wZXJ0eSA9PT0gJ25pZ2h0bHlBdmdSYXRlJyA/ICdqYXVudDUyX190aGVhZCcgKyBzb3J0T3JkZXJNb2RpZmllciA6ICcnfSBqYXVudDUyX190aGVhZCBqYXVudDUyX190aGVhZC0taXMtdmFsdWVcXFwiIGNsaWNrLmRlbGVnYXRlPVxcXCJzb3J0QnlDb2x1bW4oJ25pZ2h0bHlBdmdSYXRlJywgZmFsc2UpXFxcIj5OaWdodGx5XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PHN2ZyBjbGFzcz1cXFwiZHMtaWNvbi1hcnJvdyBkcy1pY29uLXNtXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8dXNlIHhsaW5rOmhyZWY9XFxcIiNkcy1pY29uLWFycm93XFxcIi8+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9zdmc+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiamF1bnQ1Ml9fY29sdW1uIGphdW50NTJfX3dpZHRoLS1pcy1wZXJjZW50XFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJqYXVudDUyX190YWJsZS1yb3dcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImphdW50NTJfX3RoZWFkIGphdW50NTJfX3RoZWFkLS1pcy1wZXJjZW50ICR7c29ydFByb3BlcnR5ID09PSAncGVyY2VudGFnZU9mZicgPyAnamF1bnQ1Ml9fdGhlYWQnICsgc29ydE9yZGVyTW9kaWZpZXIgOiAnJ31cXFwiIGNsaWNrLmRlbGVnYXRlPVxcXCJzb3J0QnlDb2x1bW4oJ3BlcmNlbnRhZ2VPZmYnLCBmYWxzZSlcXFwiPiUmbmJzcDtPZmZcXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8c3ZnIGNsYXNzPVxcXCJkcy1pY29uLWFycm93IGRzLWljb24tc21cXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDx1c2UgeGxpbms6aHJlZj1cXFwiI2RzLWljb24tYXJyb3dcXFwiLz5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L3N2Zz5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJqYXVudDUyX19jb2x1bW4gamF1bnQ1Ml9fd2lkdGgtLWlzLXN0YXR1c1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiamF1bnQ1Ml9fdGFibGUtcm93XFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJqYXVudDUyX190aGVhZCBqYXVudDUyX190aGVhZC0taXMtc3RhdHVzIGphdW50NTJfX3dpZHRoLS1pcy1oYWxmICR7c29ydFByb3BlcnR5ID09PSAnaXNCb29rZWQnID8gJ2phdW50NTJfX3RoZWFkJyArIHNvcnRPcmRlck1vZGlmaWVyIDogJyd9XFxcIiBjbGljay5kZWxlZ2F0ZT1cXFwic29ydEJ5Q29sdW1uKCdpc0Jvb2tlZCcsIGZhbHNlKVxcXCI+U3RhdHVzXFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PHN2ZyBjbGFzcz1cXFwiZHMtaWNvbi1hcnJvdyBkcy1pY29uLXNtXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8dXNlIHhsaW5rOmhyZWY9XFxcIiNkcy1pY29uLWFycm93XFxcIi8+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9zdmc+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0PC9kaXY+XFxyXFxuXFxyXFxuXFx0XFx0XFx0PGphdW50NTItcm93IHJlcGVhdC5mb3I9XFxcInZhY2F0aW9uIG9mIHRyaXBzXFxcIiBtb2RlbC5iaW5kPVxcXCJ2YWNhdGlvblxcXCI+PC9qYXVudDUyLXJvdz5cXHJcXG5cXHRcXHQ8L2Rpdj5cXHJcXG5cXHJcXG5cXHQ8L2Rpdj5cXHJcXG5cXHJcXG5cXHQ8ZGl2IGlmLmJpbmQ9XFxcImhhc0RhdGEgJiYgIWhhc0Vycm9ycyAmJiBpc0luUHJldmlld1xcXCIgY2xhc3M9XFxcImphdW50NTJfX3ByZXZpZXdcXFwiPlxcclxcblxcdFxcdDxoMj5VcGRhdGVzIGluIHByb2dyZXNzPC9oMj5cXHJcXG5cXHRcXHQ8cD5XZSBhcmUgY3VycmVudGx5IHVwZGF0aW5nIG91ciBuZXcgSmF1bnQgc2VsZWN0aW9ucywgcGxlYXNlIGNoZWNrIGJhY2sgd2hlbiB5b3UgcmVjZWl2ZSB5b3VyIHdlZWtseSBKYXVudCByZWxlYXNlIGVtYWlsLjwvcD5cXHJcXG5cXHRcXHQ8cD5JbiB0aGUgbWVhbnRpbWUsIDxhIGNsYXNzPVxcXCJkcy1saW5rLXByaW1hcnlcXFwiIGhyZWY9XFxcIi9kZXN0aW5hdGlvbi1yZXN1bHRzXFxcIj5icm93c2UgdGhlIEluc3BpcmF0byBDb2xsZWN0aW9uPC9hPiB0byB2aWV3IG91ciBlbnRpcmUgcG9ydGZvbGlvIG9mIHZhY2F0aW9uIG9wdGlvbnMuPC9wPlxcclxcblxcdDwvZGl2PlxcclxcblxcclxcblxcdDxkaXYgaWYuYmluZD1cXFwiaGFzRXJyb3JzXFxcIiBjbGFzcz1cXFwicm93XFxcIj5cXHJcXG5cXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb2wteHMgamF1bnQ1Ml9fZXJyb3ItbWVzc2FnZVxcXCI+XFxyXFxuXFx0XFx0XFx0PGg0Pk9vcHMhIFdlJ3JlIHNvcnJ5LjwvaDQ+XFxyXFxuXFx0XFx0XFx0PGRpdj5cXHJcXG5cXHRcXHRcXHRcXHRBbiBlcnJvciBvY2N1cmVkIGFuZCB3ZXJlIHVuYWJsZSB0byBsb2FkIHRoZSBwYWdlLlxcclxcblxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdDwvZGl2PlxcclxcblxcdDwvZGl2PlxcclxcbjwvdGVtcGxhdGU+XFxyXFxuXCI7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/jaunt52/jaunt52.html\n')},"components/loading/loader-horizontal":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar LoaderHorizontal = /** @class */ (function () {\r\n    function LoaderHorizontal() {\r\n    }\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", String)\r\n    ], LoaderHorizontal.prototype, "loadingText", void 0);\r\n    LoaderHorizontal = __decorate([\r\n        aurelia_framework_1.containerless(),\r\n        aurelia_framework_1.autoinject()\r\n    ], LoaderHorizontal);\r\n    return LoaderHorizontal;\r\n}());\r\nexports.LoaderHorizontal = LoaderHorizontal;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9sb2FkaW5nL2xvYWRlci1ob3Jpem9udGFsLnRzPzE2OWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsUUFBUTtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLGNBQWM7QUFDNUQsMEJBQTBCLG1CQUFPLENBQUMsbUJBQW1CO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCIsImZpbGUiOiJjb21wb25lbnRzL2xvYWRpbmcvbG9hZGVyLWhvcml6b250YWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxudmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufTtcclxudmFyIF9fbWV0YWRhdGEgPSAodGhpcyAmJiB0aGlzLl9fbWV0YWRhdGEpIHx8IGZ1bmN0aW9uIChrLCB2KSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEoaywgdik7XHJcbn07XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIGF1cmVsaWFfZnJhbWV3b3JrXzEgPSByZXF1aXJlKFwiYXVyZWxpYS1mcmFtZXdvcmtcIik7XHJcbnZhciBMb2FkZXJIb3Jpem9udGFsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gTG9hZGVySG9yaXpvbnRhbCgpIHtcclxuICAgIH1cclxuICAgIF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuYmluZGFibGUsXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIFN0cmluZylcclxuICAgIF0sIExvYWRlckhvcml6b250YWwucHJvdG90eXBlLCBcImxvYWRpbmdUZXh0XCIsIHZvaWQgMCk7XHJcbiAgICBMb2FkZXJIb3Jpem9udGFsID0gX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5jb250YWluZXJsZXNzKCksXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5hdXRvaW5qZWN0KClcclxuICAgIF0sIExvYWRlckhvcml6b250YWwpO1xyXG4gICAgcmV0dXJuIExvYWRlckhvcml6b250YWw7XHJcbn0oKSk7XHJcbmV4cG9ydHMuTG9hZGVySG9yaXpvbnRhbCA9IExvYWRlckhvcml6b250YWw7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///components/loading/loader-horizontal\n')},"components/loading/loader-horizontal.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<div class=\\"loader-horizontal\\">\\r\\n\\t\\t<div class=\\"loader-horizontal__dot\\"><\/div>\\r\\n\\t\\t<div class=\\"loader-horizontal__dot\\"><\/div>\\r\\n\\t\\t<div class=\\"loader-horizontal__dot\\"><\/div>\\r\\n\\t<\/div>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9sb2FkaW5nL2xvYWRlci1ob3Jpem9udGFsLmh0bWw/Mjk2NyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSIsImZpbGUiOiJjb21wb25lbnRzL2xvYWRpbmcvbG9hZGVyLWhvcml6b250YWwuaHRtbC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gXCI8dGVtcGxhdGU+XFxyXFxuXFx0PGRpdiBjbGFzcz1cXFwibG9hZGVyLWhvcml6b250YWxcXFwiPlxcclxcblxcdFxcdDxkaXYgY2xhc3M9XFxcImxvYWRlci1ob3Jpem9udGFsX19kb3RcXFwiPjwvZGl2PlxcclxcblxcdFxcdDxkaXYgY2xhc3M9XFxcImxvYWRlci1ob3Jpem9udGFsX19kb3RcXFwiPjwvZGl2PlxcclxcblxcdFxcdDxkaXYgY2xhc3M9XFxcImxvYWRlci1ob3Jpem9udGFsX19kb3RcXFwiPjwvZGl2PlxcclxcblxcdDwvZGl2PlxcclxcbjwvdGVtcGxhdGU+XFxyXFxuXCI7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/loading/loader-horizontal.html\n')},"components/loading/loading":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar LoadingCustomElement = /** @class */ (function () {\r\n    function LoadingCustomElement() {\r\n    }\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", String)\r\n    ], LoadingCustomElement.prototype, "loadingText", void 0);\r\n    LoadingCustomElement = __decorate([\r\n        aurelia_framework_1.autoinject()\r\n    ], LoadingCustomElement);\r\n    return LoadingCustomElement;\r\n}());\r\nexports.LoadingCustomElement = LoadingCustomElement;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9sb2FkaW5nL2xvYWRpbmcudHM/ZGVjNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxRQUFRO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RCwwQkFBMEIsbUJBQU8sQ0FBQyxtQkFBbUI7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCIsImZpbGUiOiJjb21wb25lbnRzL2xvYWRpbmcvbG9hZGluZy5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG52YXIgX19kZWNvcmF0ZSA9ICh0aGlzICYmIHRoaXMuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59O1xyXG52YXIgX19tZXRhZGF0YSA9ICh0aGlzICYmIHRoaXMuX19tZXRhZGF0YSkgfHwgZnVuY3Rpb24gKGssIHYpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShrLCB2KTtcclxufTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgYXVyZWxpYV9mcmFtZXdvcmtfMSA9IHJlcXVpcmUoXCJhdXJlbGlhLWZyYW1ld29ya1wiKTtcclxudmFyIExvYWRpbmdDdXN0b21FbGVtZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gTG9hZGluZ0N1c3RvbUVsZW1lbnQoKSB7XHJcbiAgICB9XHJcbiAgICBfX2RlY29yYXRlKFtcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLmJpbmRhYmxlLFxyXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBTdHJpbmcpXHJcbiAgICBdLCBMb2FkaW5nQ3VzdG9tRWxlbWVudC5wcm90b3R5cGUsIFwibG9hZGluZ1RleHRcIiwgdm9pZCAwKTtcclxuICAgIExvYWRpbmdDdXN0b21FbGVtZW50ID0gX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5hdXRvaW5qZWN0KClcclxuICAgIF0sIExvYWRpbmdDdXN0b21FbGVtZW50KTtcclxuICAgIHJldHVybiBMb2FkaW5nQ3VzdG9tRWxlbWVudDtcclxufSgpKTtcclxuZXhwb3J0cy5Mb2FkaW5nQ3VzdG9tRWxlbWVudCA9IExvYWRpbmdDdXN0b21FbGVtZW50O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///components/loading/loading\n')},"components/loading/loading.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<div class=\\"search-loader\\">\\r\\n\\t\\t<svg class=\\"search-loader__circular-loader\\" viewBox=\\"25 25 50 50\\">\\r\\n\\t\\t\\t<circle class=\\"search-loader__circular-path\\" cx=\\"50\\" cy=\\"50\\" r=\\"20\\" fill=\\"none\\" stroke-width=\\"7\\" stroke-miterlimit=\\"10\\" />\\r\\n\\t\\t<\/svg>\\r\\n\\t\\t<span class=\\"search-loader__loading-text\\">${loadingText}<\/span>\\r\\n\\t<\/div>\\r\\n<\/template>";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9sb2FkaW5nL2xvYWRpbmcuaHRtbD85ZjYyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1XQUFtVyxZQUFZIiwiZmlsZSI6ImNvbXBvbmVudHMvbG9hZGluZy9sb2FkaW5nLmh0bWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IFwiPHRlbXBsYXRlPlxcclxcblxcdDxkaXYgY2xhc3M9XFxcInNlYXJjaC1sb2FkZXJcXFwiPlxcclxcblxcdFxcdDxzdmcgY2xhc3M9XFxcInNlYXJjaC1sb2FkZXJfX2NpcmN1bGFyLWxvYWRlclxcXCIgdmlld0JveD1cXFwiMjUgMjUgNTAgNTBcXFwiPlxcclxcblxcdFxcdFxcdDxjaXJjbGUgY2xhc3M9XFxcInNlYXJjaC1sb2FkZXJfX2NpcmN1bGFyLXBhdGhcXFwiIGN4PVxcXCI1MFxcXCIgY3k9XFxcIjUwXFxcIiByPVxcXCIyMFxcXCIgZmlsbD1cXFwibm9uZVxcXCIgc3Ryb2tlLXdpZHRoPVxcXCI3XFxcIiBzdHJva2UtbWl0ZXJsaW1pdD1cXFwiMTBcXFwiIC8+XFxyXFxuXFx0XFx0PC9zdmc+XFxyXFxuXFx0XFx0PHNwYW4gY2xhc3M9XFxcInNlYXJjaC1sb2FkZXJfX2xvYWRpbmctdGV4dFxcXCI+JHtsb2FkaW5nVGV4dH08L3NwYW4+XFxyXFxuXFx0PC9kaXY+XFxyXFxuPC90ZW1wbGF0ZT5cIjsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///components/loading/loading.html\n')},"components/member-activity/member-activity":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar MemberActivityRepository_1 = __webpack_require__(175);\r\nvar MemberActivity = /** @class */ (function () {\r\n    function MemberActivity(memberActivityRepository) {\r\n        this.memberActivityRepository = memberActivityRepository;\r\n    }\r\n    MemberActivity.prototype.activate = function (model) {\r\n        var _this = this;\r\n        this.model = model;\r\n        this.memberActivityRepository\r\n            .get()\r\n            .then(function (data) {\r\n            _this.memberActivityModel = data;\r\n            _this.profilePhoto = "background-image: url(\'" + data.profilePhotoUrl + "\')";\r\n            _this.hasData = true;\r\n        })\r\n            .catch(function () {\r\n            _this.hasErrors = true;\r\n        });\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Object)\r\n    ], MemberActivity.prototype, "model", void 0);\r\n    MemberActivity = __decorate([\r\n        aurelia_framework_1.autoinject(),\r\n        __metadata("design:paramtypes", [MemberActivityRepository_1.MemberActivityRepository])\r\n    ], MemberActivity);\r\n    return MemberActivity;\r\n}());\r\nexports.MemberActivity = MemberActivity;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9tZW1iZXItYWN0aXZpdHkvbWVtYmVyLWFjdGl2aXR5LnRzP2FkZTMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsUUFBUTtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLGNBQWM7QUFDNUQsMEJBQTBCLG1CQUFPLENBQUMsbUJBQW1CO0FBQ3JELGlDQUFpQyxtQkFBTyxDQUFDLEdBQTRCO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QiLCJmaWxlIjoiY29tcG9uZW50cy9tZW1iZXItYWN0aXZpdHkvbWVtYmVyLWFjdGl2aXR5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2RlY29yYXRlID0gKHRoaXMgJiYgdGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn07XHJcbnZhciBfX21ldGFkYXRhID0gKHRoaXMgJiYgdGhpcy5fX21ldGFkYXRhKSB8fCBmdW5jdGlvbiAoaywgdikge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xyXG59O1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBhdXJlbGlhX2ZyYW1ld29ya18xID0gcmVxdWlyZShcImF1cmVsaWEtZnJhbWV3b3JrXCIpO1xyXG52YXIgTWVtYmVyQWN0aXZpdHlSZXBvc2l0b3J5XzEgPSByZXF1aXJlKFwiLi9NZW1iZXJBY3Rpdml0eVJlcG9zaXRvcnlcIik7XHJcbnZhciBNZW1iZXJBY3Rpdml0eSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIE1lbWJlckFjdGl2aXR5KG1lbWJlckFjdGl2aXR5UmVwb3NpdG9yeSkge1xyXG4gICAgICAgIHRoaXMubWVtYmVyQWN0aXZpdHlSZXBvc2l0b3J5ID0gbWVtYmVyQWN0aXZpdHlSZXBvc2l0b3J5O1xyXG4gICAgfVxyXG4gICAgTWVtYmVyQWN0aXZpdHkucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24gKG1vZGVsKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB0aGlzLm1vZGVsID0gbW9kZWw7XHJcbiAgICAgICAgdGhpcy5tZW1iZXJBY3Rpdml0eVJlcG9zaXRvcnlcclxuICAgICAgICAgICAgLmdldCgpXHJcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgIF90aGlzLm1lbWJlckFjdGl2aXR5TW9kZWwgPSBkYXRhO1xyXG4gICAgICAgICAgICBfdGhpcy5wcm9maWxlUGhvdG8gPSBcImJhY2tncm91bmQtaW1hZ2U6IHVybCgnXCIgKyBkYXRhLnByb2ZpbGVQaG90b1VybCArIFwiJylcIjtcclxuICAgICAgICAgICAgX3RoaXMuaGFzRGF0YSA9IHRydWU7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgX3RoaXMuaGFzRXJyb3JzID0gdHJ1ZTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICBfX2RlY29yYXRlKFtcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLmJpbmRhYmxlLFxyXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXHJcbiAgICBdLCBNZW1iZXJBY3Rpdml0eS5wcm90b3R5cGUsIFwibW9kZWxcIiwgdm9pZCAwKTtcclxuICAgIE1lbWJlckFjdGl2aXR5ID0gX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5hdXRvaW5qZWN0KCksXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtNZW1iZXJBY3Rpdml0eVJlcG9zaXRvcnlfMS5NZW1iZXJBY3Rpdml0eVJlcG9zaXRvcnldKVxyXG4gICAgXSwgTWVtYmVyQWN0aXZpdHkpO1xyXG4gICAgcmV0dXJuIE1lbWJlckFjdGl2aXR5O1xyXG59KCkpO1xyXG5leHBvcnRzLk1lbWJlckFjdGl2aXR5ID0gTWVtYmVyQWN0aXZpdHk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///components/member-activity/member-activity\n')},"components/member-activity/member-activity.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<section class=\\"member-activity\\">\\r\\n\\r\\n\\t\\t<loading if.bind=\\"!hasData && !hasErrors\\" class=\\"loader\\"><\/loading>\\r\\n\\r\\n\\t\\t<div if.bind=\\"hasData\\" class=\\"member-activity__innerRectangle\\">\\r\\n\\t\\t\\t<div class=\\"member-activity__section-welcome\\">\\r\\n\\t\\t\\t\\t<div class=\\"member-activity__member-miniphoto\\" css.bind=\\"profilePhoto\\"><\/div>\\r\\n\\t\\t\\t\\t<div class=\\"member-activity__section-member-data\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\"member-activity__section-welcome-text ds-label-medium\\"> Hi ${memberActivityModel.firstName},<\/div>\\r\\n\\t\\t\\t\\t\\t<div class=\\"member-activity__section-membersince-text\\">Member Since: ${memberActivityModel.memberSinceYear} <\/div>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<div class=\\"member-activity__section-tripdetails member-activity__section-member-data\\">\\r\\n\\t\\t\\t\\t<div class=\\"member-activity__section-member-data-text ds-label-medium\\">${memberActivityModel.tripHeaderText}<\/div>\\r\\n\\t\\t\\t\\t<a class=\\"member-activity__section-member-data-linktext ds-link-primary\\" href=\\"${memberActivityModel.tripUrl}\\">${memberActivityModel.tripUrlText}<\/a>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<div if.bind=\\"memberActivityModel.hasTravelCreditAndPerks\\" class=\\"member-activity__section-member-data\\">\\r\\n\\t\\t\\t\\t<div class=\\"member-activity__section-member-data-text ds-label-medium\\">Credit Balance:<\/div>\\r\\n\\t\\t\\t\\t<div class=\\"member-activity__section-creditbalance-linktext member-activity__section-member-data-linktext\\">\\r\\n\\t\\t\\t\\t\\t<a class=\\"ds-link-primary\\" href=\\"${memberActivityModel.travelCreditAndPerksUrl}\\">${memberActivityModel.travelCreditAndPerksAmountFormatted}<\/a>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<div class=\\"member-activity__section-favorites member-activity__section-member-data\\">\\r\\n\\t\\t\\t\\t<div class=\\"member-activity__section-favorites-text member-activity__section-member-data-text ds-label-medium\\">Favorites:<\/div>\\r\\n\\t\\t\\t\\t<div class=\\"member-activity__section-member-data-linktext\\">\\r\\n\\t\\t\\t\\t\\t<a class=\\"ds-link-primary\\" href=\\"${memberActivityModel.favoritesUrl}\\">${memberActivityModel.favoritesCount}<\/a>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<a class=\\"ds-link-primary\\" href=\\"${model.callToAction.url}\\">${model.callToAction.linkTitle}<\/a>\\r\\n\\t\\t<\/div>\\r\\n\\t\\t<div if.bind=\\"hasErrors\\">\\r\\n\\t\\t\\t<p>\\r\\n\\t\\t\\t\\tThere was an error loading your account information. Try again later.\\r\\n\\t\\t\\t\\t<a class=\\"ds-link-primary\\" href=\\"${model.callToAction.url}\\">${model.callToAction.linkTitle}<\/a>\\r\\n\\t\\t\\t<\/p>\\r\\n\\t\\t<\/div>\\r\\n\\t<\/section>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9tZW1iZXItYWN0aXZpdHkvbWVtYmVyLWFjdGl2aXR5Lmh0bWw/M2Q2MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1aEJBQXVoQiw4QkFBOEIsOEZBQThGLG9DQUFvQyxtT0FBbU8sbUNBQW1DLHNHQUFzRyw0QkFBNEIsS0FBSyxnQ0FBZ0MsaWFBQWlhLDRDQUE0QyxLQUFLLHdEQUF3RCxpWkFBaVosaUNBQWlDLEtBQUssbUNBQW1DLHNGQUFzRix1QkFBdUIsS0FBSyw2QkFBNkIscU1BQXFNLHVCQUF1QixLQUFLLDZCQUE2QiIsImZpbGUiOiJjb21wb25lbnRzL21lbWJlci1hY3Rpdml0eS9tZW1iZXItYWN0aXZpdHkuaHRtbC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gXCI8dGVtcGxhdGU+XFxyXFxuXFx0PHNlY3Rpb24gY2xhc3M9XFxcIm1lbWJlci1hY3Rpdml0eVxcXCI+XFxyXFxuXFxyXFxuXFx0XFx0PGxvYWRpbmcgaWYuYmluZD1cXFwiIWhhc0RhdGEgJiYgIWhhc0Vycm9yc1xcXCIgY2xhc3M9XFxcImxvYWRlclxcXCI+PC9sb2FkaW5nPlxcclxcblxcclxcblxcdFxcdDxkaXYgaWYuYmluZD1cXFwiaGFzRGF0YVxcXCIgY2xhc3M9XFxcIm1lbWJlci1hY3Rpdml0eV9faW5uZXJSZWN0YW5nbGVcXFwiPlxcclxcblxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcIm1lbWJlci1hY3Rpdml0eV9fc2VjdGlvbi13ZWxjb21lXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJtZW1iZXItYWN0aXZpdHlfX21lbWJlci1taW5pcGhvdG9cXFwiIGNzcy5iaW5kPVxcXCJwcm9maWxlUGhvdG9cXFwiPjwvZGl2PlxcclxcblxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcIm1lbWJlci1hY3Rpdml0eV9fc2VjdGlvbi1tZW1iZXItZGF0YVxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwibWVtYmVyLWFjdGl2aXR5X19zZWN0aW9uLXdlbGNvbWUtdGV4dCBkcy1sYWJlbC1tZWRpdW1cXFwiPiBIaSAke21lbWJlckFjdGl2aXR5TW9kZWwuZmlyc3ROYW1lfSw8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJtZW1iZXItYWN0aXZpdHlfX3NlY3Rpb24tbWVtYmVyc2luY2UtdGV4dFxcXCI+TWVtYmVyIFNpbmNlOiAke21lbWJlckFjdGl2aXR5TW9kZWwubWVtYmVyU2luY2VZZWFyfSA8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJtZW1iZXItYWN0aXZpdHlfX3NlY3Rpb24tdHJpcGRldGFpbHMgbWVtYmVyLWFjdGl2aXR5X19zZWN0aW9uLW1lbWJlci1kYXRhXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJtZW1iZXItYWN0aXZpdHlfX3NlY3Rpb24tbWVtYmVyLWRhdGEtdGV4dCBkcy1sYWJlbC1tZWRpdW1cXFwiPiR7bWVtYmVyQWN0aXZpdHlNb2RlbC50cmlwSGVhZGVyVGV4dH08L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHQ8YSBjbGFzcz1cXFwibWVtYmVyLWFjdGl2aXR5X19zZWN0aW9uLW1lbWJlci1kYXRhLWxpbmt0ZXh0IGRzLWxpbmstcHJpbWFyeVxcXCIgaHJlZj1cXFwiJHttZW1iZXJBY3Rpdml0eU1vZGVsLnRyaXBVcmx9XFxcIj4ke21lbWJlckFjdGl2aXR5TW9kZWwudHJpcFVybFRleHR9PC9hPlxcclxcblxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdDxkaXYgaWYuYmluZD1cXFwibWVtYmVyQWN0aXZpdHlNb2RlbC5oYXNUcmF2ZWxDcmVkaXRBbmRQZXJrc1xcXCIgY2xhc3M9XFxcIm1lbWJlci1hY3Rpdml0eV9fc2VjdGlvbi1tZW1iZXItZGF0YVxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwibWVtYmVyLWFjdGl2aXR5X19zZWN0aW9uLW1lbWJlci1kYXRhLXRleHQgZHMtbGFiZWwtbWVkaXVtXFxcIj5DcmVkaXQgQmFsYW5jZTo8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJtZW1iZXItYWN0aXZpdHlfX3NlY3Rpb24tY3JlZGl0YmFsYW5jZS1saW5rdGV4dCBtZW1iZXItYWN0aXZpdHlfX3NlY3Rpb24tbWVtYmVyLWRhdGEtbGlua3RleHRcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdDxhIGNsYXNzPVxcXCJkcy1saW5rLXByaW1hcnlcXFwiIGhyZWY9XFxcIiR7bWVtYmVyQWN0aXZpdHlNb2RlbC50cmF2ZWxDcmVkaXRBbmRQZXJrc1VybH1cXFwiPiR7bWVtYmVyQWN0aXZpdHlNb2RlbC50cmF2ZWxDcmVkaXRBbmRQZXJrc0Ftb3VudEZvcm1hdHRlZH08L2E+XFxyXFxuXFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwibWVtYmVyLWFjdGl2aXR5X19zZWN0aW9uLWZhdm9yaXRlcyBtZW1iZXItYWN0aXZpdHlfX3NlY3Rpb24tbWVtYmVyLWRhdGFcXFwiPlxcclxcblxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcIm1lbWJlci1hY3Rpdml0eV9fc2VjdGlvbi1mYXZvcml0ZXMtdGV4dCBtZW1iZXItYWN0aXZpdHlfX3NlY3Rpb24tbWVtYmVyLWRhdGEtdGV4dCBkcy1sYWJlbC1tZWRpdW1cXFwiPkZhdm9yaXRlczo8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJtZW1iZXItYWN0aXZpdHlfX3NlY3Rpb24tbWVtYmVyLWRhdGEtbGlua3RleHRcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdDxhIGNsYXNzPVxcXCJkcy1saW5rLXByaW1hcnlcXFwiIGhyZWY9XFxcIiR7bWVtYmVyQWN0aXZpdHlNb2RlbC5mYXZvcml0ZXNVcmx9XFxcIj4ke21lbWJlckFjdGl2aXR5TW9kZWwuZmF2b3JpdGVzQ291bnR9PC9hPlxcclxcblxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdDxhIGNsYXNzPVxcXCJkcy1saW5rLXByaW1hcnlcXFwiIGhyZWY9XFxcIiR7bW9kZWwuY2FsbFRvQWN0aW9uLnVybH1cXFwiPiR7bW9kZWwuY2FsbFRvQWN0aW9uLmxpbmtUaXRsZX08L2E+XFxyXFxuXFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0PGRpdiBpZi5iaW5kPVxcXCJoYXNFcnJvcnNcXFwiPlxcclxcblxcdFxcdFxcdDxwPlxcclxcblxcdFxcdFxcdFxcdFRoZXJlIHdhcyBhbiBlcnJvciBsb2FkaW5nIHlvdXIgYWNjb3VudCBpbmZvcm1hdGlvbi4gVHJ5IGFnYWluIGxhdGVyLlxcclxcblxcdFxcdFxcdFxcdDxhIGNsYXNzPVxcXCJkcy1saW5rLXByaW1hcnlcXFwiIGhyZWY9XFxcIiR7bW9kZWwuY2FsbFRvQWN0aW9uLnVybH1cXFwiPiR7bW9kZWwuY2FsbFRvQWN0aW9uLmxpbmtUaXRsZX08L2E+XFxyXFxuXFx0XFx0XFx0PC9wPlxcclxcblxcdFxcdDwvZGl2PlxcclxcblxcdDwvc2VjdGlvbj5cXHJcXG48L3RlbXBsYXRlPlxcclxcblwiOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///components/member-activity/member-activity.html\n')},"components/member-news/member-news":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar MemberNews = /** @class */ (function () {\r\n    function MemberNews() {\r\n    }\r\n    MemberNews.prototype.activate = function (model) {\r\n        this.model = model;\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Object)\r\n    ], MemberNews.prototype, "model", void 0);\r\n    return MemberNews;\r\n}());\r\nexports.MemberNews = MemberNews;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9tZW1iZXItbmV3cy9tZW1iZXItbmV3cy50cz9kNDcyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLFFBQVE7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxjQUFjO0FBQzVELDBCQUEwQixtQkFBTyxDQUFDLG1CQUFtQjtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEIiwiZmlsZSI6ImNvbXBvbmVudHMvbWVtYmVyLW5ld3MvbWVtYmVyLW5ld3MuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxudmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufTtcclxudmFyIF9fbWV0YWRhdGEgPSAodGhpcyAmJiB0aGlzLl9fbWV0YWRhdGEpIHx8IGZ1bmN0aW9uIChrLCB2KSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEoaywgdik7XHJcbn07XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIGF1cmVsaWFfZnJhbWV3b3JrXzEgPSByZXF1aXJlKFwiYXVyZWxpYS1mcmFtZXdvcmtcIik7XHJcbnZhciBNZW1iZXJOZXdzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gTWVtYmVyTmV3cygpIHtcclxuICAgIH1cclxuICAgIE1lbWJlck5ld3MucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24gKG1vZGVsKSB7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG1vZGVsO1xyXG4gICAgfTtcclxuICAgIF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuYmluZGFibGUsXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcclxuICAgIF0sIE1lbWJlck5ld3MucHJvdG90eXBlLCBcIm1vZGVsXCIsIHZvaWQgMCk7XHJcbiAgICByZXR1cm4gTWVtYmVyTmV3cztcclxufSgpKTtcclxuZXhwb3J0cy5NZW1iZXJOZXdzID0gTWVtYmVyTmV3cztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/member-news/member-news\n')},"components/member-news/member-news.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<div class=\\"member-news\\">\\r\\n\\t\\t<div if.bind=\\"model.featuredNewsCard\\" class=\\"member-news__featured\\">\\r\\n\\t\\t\\t<news-card model.bind=\\"model.featuredNewsCard\\" containerless><\/news-card>\\r\\n\\t\\t<\/div>\\r\\n\\t\\t<div if.bind=\\"model.newsCards\\" class=\\"member-news__cards\\">\\r\\n\\t\\t\\t<news-card repeat.for=\\"newsCard of model.newsCards\\" model.bind=\\"newsCard\\" containerless><\/news-card>\\r\\n\\t\\t<\/div>\\r\\n\\t<\/div>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9tZW1iZXItbmV3cy9tZW1iZXItbmV3cy5odG1sP2VjMjEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEiLCJmaWxlIjoiY29tcG9uZW50cy9tZW1iZXItbmV3cy9tZW1iZXItbmV3cy5odG1sLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBcIjx0ZW1wbGF0ZT5cXHJcXG5cXHQ8ZGl2IGNsYXNzPVxcXCJtZW1iZXItbmV3c1xcXCI+XFxyXFxuXFx0XFx0PGRpdiBpZi5iaW5kPVxcXCJtb2RlbC5mZWF0dXJlZE5ld3NDYXJkXFxcIiBjbGFzcz1cXFwibWVtYmVyLW5ld3NfX2ZlYXR1cmVkXFxcIj5cXHJcXG5cXHRcXHRcXHQ8bmV3cy1jYXJkIG1vZGVsLmJpbmQ9XFxcIm1vZGVsLmZlYXR1cmVkTmV3c0NhcmRcXFwiIGNvbnRhaW5lcmxlc3M+PC9uZXdzLWNhcmQ+XFxyXFxuXFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0PGRpdiBpZi5iaW5kPVxcXCJtb2RlbC5uZXdzQ2FyZHNcXFwiIGNsYXNzPVxcXCJtZW1iZXItbmV3c19fY2FyZHNcXFwiPlxcclxcblxcdFxcdFxcdDxuZXdzLWNhcmQgcmVwZWF0LmZvcj1cXFwibmV3c0NhcmQgb2YgbW9kZWwubmV3c0NhcmRzXFxcIiBtb2RlbC5iaW5kPVxcXCJuZXdzQ2FyZFxcXCIgY29udGFpbmVybGVzcz48L25ld3MtY2FyZD5cXHJcXG5cXHRcXHQ8L2Rpdj5cXHJcXG5cXHQ8L2Rpdj5cXHJcXG48L3RlbXBsYXRlPlxcclxcblwiOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///components/member-news/member-news.html\n')},"components/member-testimonials/member-testimonial":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar injectScript_1 = __webpack_require__(15);\r\nvar MemberTestimonial = /** @class */ (function () {\r\n    function MemberTestimonial() {\r\n        this.headline = \'\';\r\n        this.modifier = \'\';\r\n    }\r\n    MemberTestimonial.prototype.activate = function (model, headline) {\r\n        this.model = model;\r\n        this.headline = headline;\r\n    };\r\n    MemberTestimonial.prototype.attached = function () {\r\n        if (this.model.vidyardEmbedCode) {\r\n            var id = "vidyard_embed_code_" + this.model.vidyardEmbedCode;\r\n            var src = "//play.vidyard.com/" + this.model\r\n                .vidyardEmbedCode + ".js?v=3.1&type=lightbox&width=960&height=540";\r\n            injectScript_1.injectScript(src, id);\r\n        }\r\n        if (this.model.isSelected) {\r\n            this.modifier = \'member-testimonial--selected\';\r\n        }\r\n    };\r\n    MemberTestimonial.prototype.openLightboxPlayer = function () {\r\n        window[\'fn_vidyard_\' + this.model.vidyardEmbedCode]();\r\n        return false;\r\n    };\r\n    MemberTestimonial.prototype.getContentDividerModel = function () {\r\n        return {\r\n            color: \'\',\r\n            isVisible: true\r\n        };\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Object)\r\n    ], MemberTestimonial.prototype, "model", void 0);\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", String)\r\n    ], MemberTestimonial.prototype, "headline", void 0);\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", String)\r\n    ], MemberTestimonial.prototype, "modifier", void 0);\r\n    return MemberTestimonial;\r\n}());\r\nexports.MemberTestimonial = MemberTestimonial;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9tZW1iZXItdGVzdGltb25pYWxzL21lbWJlci10ZXN0aW1vbmlhbC50cz8yNGZjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLFFBQVE7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxjQUFjO0FBQzVELDBCQUEwQixtQkFBTyxDQUFDLG1CQUFtQjtBQUNyRCxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFvQjtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCIsImZpbGUiOiJjb21wb25lbnRzL21lbWJlci10ZXN0aW1vbmlhbHMvbWVtYmVyLXRlc3RpbW9uaWFsLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2RlY29yYXRlID0gKHRoaXMgJiYgdGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn07XHJcbnZhciBfX21ldGFkYXRhID0gKHRoaXMgJiYgdGhpcy5fX21ldGFkYXRhKSB8fCBmdW5jdGlvbiAoaywgdikge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xyXG59O1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBhdXJlbGlhX2ZyYW1ld29ya18xID0gcmVxdWlyZShcImF1cmVsaWEtZnJhbWV3b3JrXCIpO1xyXG52YXIgaW5qZWN0U2NyaXB0XzEgPSByZXF1aXJlKFwiLi4vLi4vaW5qZWN0U2NyaXB0XCIpO1xyXG52YXIgTWVtYmVyVGVzdGltb25pYWwgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBNZW1iZXJUZXN0aW1vbmlhbCgpIHtcclxuICAgICAgICB0aGlzLmhlYWRsaW5lID0gJyc7XHJcbiAgICAgICAgdGhpcy5tb2RpZmllciA9ICcnO1xyXG4gICAgfVxyXG4gICAgTWVtYmVyVGVzdGltb25pYWwucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24gKG1vZGVsLCBoZWFkbGluZSkge1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSBtb2RlbDtcclxuICAgICAgICB0aGlzLmhlYWRsaW5lID0gaGVhZGxpbmU7XHJcbiAgICB9O1xyXG4gICAgTWVtYmVyVGVzdGltb25pYWwucHJvdG90eXBlLmF0dGFjaGVkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLnZpZHlhcmRFbWJlZENvZGUpIHtcclxuICAgICAgICAgICAgdmFyIGlkID0gXCJ2aWR5YXJkX2VtYmVkX2NvZGVfXCIgKyB0aGlzLm1vZGVsLnZpZHlhcmRFbWJlZENvZGU7XHJcbiAgICAgICAgICAgIHZhciBzcmMgPSBcIi8vcGxheS52aWR5YXJkLmNvbS9cIiArIHRoaXMubW9kZWxcclxuICAgICAgICAgICAgICAgIC52aWR5YXJkRW1iZWRDb2RlICsgXCIuanM/dj0zLjEmdHlwZT1saWdodGJveCZ3aWR0aD05NjAmaGVpZ2h0PTU0MFwiO1xyXG4gICAgICAgICAgICBpbmplY3RTY3JpcHRfMS5pbmplY3RTY3JpcHQoc3JjLCBpZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmlzU2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5tb2RpZmllciA9ICdtZW1iZXItdGVzdGltb25pYWwtLXNlbGVjdGVkJztcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgTWVtYmVyVGVzdGltb25pYWwucHJvdG90eXBlLm9wZW5MaWdodGJveFBsYXllciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB3aW5kb3dbJ2ZuX3ZpZHlhcmRfJyArIHRoaXMubW9kZWwudmlkeWFyZEVtYmVkQ29kZV0oKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9O1xyXG4gICAgTWVtYmVyVGVzdGltb25pYWwucHJvdG90eXBlLmdldENvbnRlbnREaXZpZGVyTW9kZWwgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgY29sb3I6ICcnLFxyXG4gICAgICAgICAgICBpc1Zpc2libGU6IHRydWVcclxuICAgICAgICB9O1xyXG4gICAgfTtcclxuICAgIF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuYmluZGFibGUsXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcclxuICAgIF0sIE1lbWJlclRlc3RpbW9uaWFsLnByb3RvdHlwZSwgXCJtb2RlbFwiLCB2b2lkIDApO1xyXG4gICAgX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5iaW5kYWJsZSxcclxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgU3RyaW5nKVxyXG4gICAgXSwgTWVtYmVyVGVzdGltb25pYWwucHJvdG90eXBlLCBcImhlYWRsaW5lXCIsIHZvaWQgMCk7XHJcbiAgICBfX2RlY29yYXRlKFtcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLmJpbmRhYmxlLFxyXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBTdHJpbmcpXHJcbiAgICBdLCBNZW1iZXJUZXN0aW1vbmlhbC5wcm90b3R5cGUsIFwibW9kaWZpZXJcIiwgdm9pZCAwKTtcclxuICAgIHJldHVybiBNZW1iZXJUZXN0aW1vbmlhbDtcclxufSgpKTtcclxuZXhwb3J0cy5NZW1iZXJUZXN0aW1vbmlhbCA9IE1lbWJlclRlc3RpbW9uaWFsO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///components/member-testimonials/member-testimonial\n')},"components/member-testimonials/member-testimonial.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<div class=\\"member-testimonial ${modifier}\\">\\r\\n\\r\\n\\t\\t<responsive-image url.bind=\\"model.backgroundImageUrl\\" adjust-height-for-mobile.bind=\\"true\\" containerless><\/responsive-image>\\r\\n\\r\\n\\t\\t<header class=\\"member-testimonial__header\\">\\r\\n\\t\\t\\t<div class=\\"row center-xs\\">\\r\\n\\t\\t\\t\\t<div class=\\"col-xs-12 col-md-10\\">\\r\\n\\t\\t\\t\\t\\t<h2 class=\\"member-testimonial__headline\\">${headline}<\/h2>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t<\/header>\\r\\n\\r\\n\\t\\t<div class=\\"member-testimonial__testimonial row center-xs\\">\\r\\n\\t\\t\\t<div class=\\"col-xs-12 col-md-10\\">\\r\\n\\t\\t\\t\\t<div class=\\"member-testimonial__member-quote ds-blockquote-large \\" innerhtml.bind=\\"model.quote\\"><\/div>\\r\\n\\t\\t\\t\\t<div class=\\"member-testimonial__member-attribution ds-caps-small\\">${model.attribution}<\/div>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t<\/div>\\r\\n\\r\\n\\t\\t<button if.bind=\\"model.vidyardEmbedCode\\" click.delegate=\\"openLightboxPlayer($event)\\" class=\\"member-testimonial__video-play-button\\"\\r\\n\\t\\t type=\\"button\\" title=\\"Play Video\\" aria-label=\\"Play Video\\">\\r\\n\\t\\t\\t<div class=\\"video-play-button__size\\"><\/div>\\r\\n\\t\\t\\t<div class=\\"video-play-button__arrow-size\\">\\r\\n\\t\\t\\t\\t<div class=\\"video-play-button__arrow-size-ratio\\"><\/div>\\r\\n\\t\\t\\t\\t<div class=\\"video-play-button__arrow\\"><\/div>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t<\/button>\\r\\n\\r\\n\\t<\/div>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9tZW1iZXItdGVzdGltb25pYWxzL21lbWJlci10ZXN0aW1vbmlhbC5odG1sPzVhNjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0VBQW9FLFNBQVMseVZBQXlWLFNBQVMsc1hBQXNYLGtCQUFrQiIsImZpbGUiOiJjb21wb25lbnRzL21lbWJlci10ZXN0aW1vbmlhbHMvbWVtYmVyLXRlc3RpbW9uaWFsLmh0bWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IFwiPHRlbXBsYXRlPlxcclxcblxcdDxkaXYgY2xhc3M9XFxcIm1lbWJlci10ZXN0aW1vbmlhbCAke21vZGlmaWVyfVxcXCI+XFxyXFxuXFxyXFxuXFx0XFx0PHJlc3BvbnNpdmUtaW1hZ2UgdXJsLmJpbmQ9XFxcIm1vZGVsLmJhY2tncm91bmRJbWFnZVVybFxcXCIgYWRqdXN0LWhlaWdodC1mb3ItbW9iaWxlLmJpbmQ9XFxcInRydWVcXFwiIGNvbnRhaW5lcmxlc3M+PC9yZXNwb25zaXZlLWltYWdlPlxcclxcblxcclxcblxcdFxcdDxoZWFkZXIgY2xhc3M9XFxcIm1lbWJlci10ZXN0aW1vbmlhbF9faGVhZGVyXFxcIj5cXHJcXG5cXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJyb3cgY2VudGVyLXhzXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgY29sLW1kLTEwXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8aDIgY2xhc3M9XFxcIm1lbWJlci10ZXN0aW1vbmlhbF9faGVhZGxpbmVcXFwiPiR7aGVhZGxpbmV9PC9oMj5cXHJcXG5cXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHQ8L2hlYWRlcj5cXHJcXG5cXHJcXG5cXHRcXHQ8ZGl2IGNsYXNzPVxcXCJtZW1iZXItdGVzdGltb25pYWxfX3Rlc3RpbW9uaWFsIHJvdyBjZW50ZXIteHNcXFwiPlxcclxcblxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtMTBcXFwiPlxcclxcblxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcIm1lbWJlci10ZXN0aW1vbmlhbF9fbWVtYmVyLXF1b3RlIGRzLWJsb2NrcXVvdGUtbGFyZ2UgXFxcIiBpbm5lcmh0bWwuYmluZD1cXFwibW9kZWwucXVvdGVcXFwiPjwvZGl2PlxcclxcblxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcIm1lbWJlci10ZXN0aW1vbmlhbF9fbWVtYmVyLWF0dHJpYnV0aW9uIGRzLWNhcHMtc21hbGxcXFwiPiR7bW9kZWwuYXR0cmlidXRpb259PC9kaXY+XFxyXFxuXFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0PC9kaXY+XFxyXFxuXFxyXFxuXFx0XFx0PGJ1dHRvbiBpZi5iaW5kPVxcXCJtb2RlbC52aWR5YXJkRW1iZWRDb2RlXFxcIiBjbGljay5kZWxlZ2F0ZT1cXFwib3BlbkxpZ2h0Ym94UGxheWVyKCRldmVudClcXFwiIGNsYXNzPVxcXCJtZW1iZXItdGVzdGltb25pYWxfX3ZpZGVvLXBsYXktYnV0dG9uXFxcIlxcclxcblxcdFxcdCB0eXBlPVxcXCJidXR0b25cXFwiIHRpdGxlPVxcXCJQbGF5IFZpZGVvXFxcIiBhcmlhLWxhYmVsPVxcXCJQbGF5IFZpZGVvXFxcIj5cXHJcXG5cXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJ2aWRlby1wbGF5LWJ1dHRvbl9fc2l6ZVxcXCI+PC9kaXY+XFxyXFxuXFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwidmlkZW8tcGxheS1idXR0b25fX2Fycm93LXNpemVcXFwiPlxcclxcblxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcInZpZGVvLXBsYXktYnV0dG9uX19hcnJvdy1zaXplLXJhdGlvXFxcIj48L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJ2aWRlby1wbGF5LWJ1dHRvbl9fYXJyb3dcXFwiPjwvZGl2PlxcclxcblxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdDwvYnV0dG9uPlxcclxcblxcclxcblxcdDwvZGl2PlxcclxcbjwvdGVtcGxhdGU+XFxyXFxuXCI7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/member-testimonials/member-testimonial.html\n')},"components/member-testimonials/member-testimonials":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar Testimonials = /** @class */ (function () {\r\n    function Testimonials() {\r\n        this.modifier = \'\';\r\n    }\r\n    Testimonials.prototype.activate = function (model) {\r\n        this.model = model;\r\n        this.setSelected();\r\n    };\r\n    Testimonials.prototype.setSelected = function () {\r\n        this.activeTestimonial = this.model.testimonials.find(function (p) { return p.isSelected; });\r\n        if (this.activeTestimonial) {\r\n            this.activeTestimonial.modifier = \'member-testimonial--selected\';\r\n        }\r\n    };\r\n    Testimonials.prototype.navigate = function (tabIndex) {\r\n        this.model.testimonials.forEach(function (item) {\r\n            item.isSelected = item.tabIndex === tabIndex;\r\n            item.modifier = item.isSelected\r\n                ? \'member-testimonial--selected\'\r\n                : \'\';\r\n        });\r\n        this.setSelected();\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Object)\r\n    ], Testimonials.prototype, "model", void 0);\r\n    return Testimonials;\r\n}());\r\nexports.Testimonials = Testimonials;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9tZW1iZXItdGVzdGltb25pYWxzL21lbWJlci10ZXN0aW1vbmlhbHMudHM/ZDE5NyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxRQUFRO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RCwwQkFBMEIsbUJBQU8sQ0FBQyxtQkFBbUI7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEVBQTRFLHFCQUFxQixFQUFFO0FBQ25HO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEIiwiZmlsZSI6ImNvbXBvbmVudHMvbWVtYmVyLXRlc3RpbW9uaWFscy9tZW1iZXItdGVzdGltb25pYWxzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2RlY29yYXRlID0gKHRoaXMgJiYgdGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn07XHJcbnZhciBfX21ldGFkYXRhID0gKHRoaXMgJiYgdGhpcy5fX21ldGFkYXRhKSB8fCBmdW5jdGlvbiAoaywgdikge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xyXG59O1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBhdXJlbGlhX2ZyYW1ld29ya18xID0gcmVxdWlyZShcImF1cmVsaWEtZnJhbWV3b3JrXCIpO1xyXG52YXIgVGVzdGltb25pYWxzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gVGVzdGltb25pYWxzKCkge1xyXG4gICAgICAgIHRoaXMubW9kaWZpZXIgPSAnJztcclxuICAgIH1cclxuICAgIFRlc3RpbW9uaWFscy5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbiAobW9kZWwpIHtcclxuICAgICAgICB0aGlzLm1vZGVsID0gbW9kZWw7XHJcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZCgpO1xyXG4gICAgfTtcclxuICAgIFRlc3RpbW9uaWFscy5wcm90b3R5cGUuc2V0U2VsZWN0ZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVUZXN0aW1vbmlhbCA9IHRoaXMubW9kZWwudGVzdGltb25pYWxzLmZpbmQoZnVuY3Rpb24gKHApIHsgcmV0dXJuIHAuaXNTZWxlY3RlZDsgfSk7XHJcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVGVzdGltb25pYWwpIHtcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmVUZXN0aW1vbmlhbC5tb2RpZmllciA9ICdtZW1iZXItdGVzdGltb25pYWwtLXNlbGVjdGVkJztcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgVGVzdGltb25pYWxzLnByb3RvdHlwZS5uYXZpZ2F0ZSA9IGZ1bmN0aW9uICh0YWJJbmRleCkge1xyXG4gICAgICAgIHRoaXMubW9kZWwudGVzdGltb25pYWxzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgaXRlbS5pc1NlbGVjdGVkID0gaXRlbS50YWJJbmRleCA9PT0gdGFiSW5kZXg7XHJcbiAgICAgICAgICAgIGl0ZW0ubW9kaWZpZXIgPSBpdGVtLmlzU2VsZWN0ZWRcclxuICAgICAgICAgICAgICAgID8gJ21lbWJlci10ZXN0aW1vbmlhbC0tc2VsZWN0ZWQnXHJcbiAgICAgICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWQoKTtcclxuICAgIH07XHJcbiAgICBfX2RlY29yYXRlKFtcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLmJpbmRhYmxlLFxyXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXHJcbiAgICBdLCBUZXN0aW1vbmlhbHMucHJvdG90eXBlLCBcIm1vZGVsXCIsIHZvaWQgMCk7XHJcbiAgICByZXR1cm4gVGVzdGltb25pYWxzO1xyXG59KCkpO1xyXG5leHBvcnRzLlRlc3RpbW9uaWFscyA9IFRlc3RpbW9uaWFscztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/member-testimonials/member-testimonials\n')},"components/member-testimonials/member-testimonials.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<section class=\\"member-testimonials\\">\\r\\n\\r\\n\\t\\t<member-testimonial repeat.for=\\"testimonial of model.testimonials\\" model.bind=\\"testimonial\\" headline.bind=\\"model.headline\\"\\r\\n\\t\\t modifier.bind=\\"testimonial.modifier\\" containerless><\/member-testimonial>\\r\\n\\r\\n\\t\\t<nav class=\\"member-testimonials__tabs\\">\\r\\n\\t\\t\\t<div repeat.for=\\"testimonial of model.testimonials\\" click.delegate=\\"navigate(testimonial.tabIndex)\\" class=\\"member-testimonials__tab ${testimonial.isSelected ? \'member-testimonials__tab--selected\' : \'\'}\\"\\r\\n\\t\\t\\t style=\\"background-image: url(\'${testimonial.memberImageURL}&width=180\');\\"><\/div>\\r\\n\\t\\t<\/nav>\\r\\n\\t<\/section>\\r\\n<\/template>";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9tZW1iZXItdGVzdGltb25pYWxzL21lbWJlci10ZXN0aW1vbmlhbHMuaHRtbD9lMDc5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGtmQUFrZixtRUFBbUUsOENBQThDLDJCQUEyQixhQUFhIiwiZmlsZSI6ImNvbXBvbmVudHMvbWVtYmVyLXRlc3RpbW9uaWFscy9tZW1iZXItdGVzdGltb25pYWxzLmh0bWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IFwiPHRlbXBsYXRlPlxcclxcblxcdDxzZWN0aW9uIGNsYXNzPVxcXCJtZW1iZXItdGVzdGltb25pYWxzXFxcIj5cXHJcXG5cXHJcXG5cXHRcXHQ8bWVtYmVyLXRlc3RpbW9uaWFsIHJlcGVhdC5mb3I9XFxcInRlc3RpbW9uaWFsIG9mIG1vZGVsLnRlc3RpbW9uaWFsc1xcXCIgbW9kZWwuYmluZD1cXFwidGVzdGltb25pYWxcXFwiIGhlYWRsaW5lLmJpbmQ9XFxcIm1vZGVsLmhlYWRsaW5lXFxcIlxcclxcblxcdFxcdCBtb2RpZmllci5iaW5kPVxcXCJ0ZXN0aW1vbmlhbC5tb2RpZmllclxcXCIgY29udGFpbmVybGVzcz48L21lbWJlci10ZXN0aW1vbmlhbD5cXHJcXG5cXHJcXG5cXHRcXHQ8bmF2IGNsYXNzPVxcXCJtZW1iZXItdGVzdGltb25pYWxzX190YWJzXFxcIj5cXHJcXG5cXHRcXHRcXHQ8ZGl2IHJlcGVhdC5mb3I9XFxcInRlc3RpbW9uaWFsIG9mIG1vZGVsLnRlc3RpbW9uaWFsc1xcXCIgY2xpY2suZGVsZWdhdGU9XFxcIm5hdmlnYXRlKHRlc3RpbW9uaWFsLnRhYkluZGV4KVxcXCIgY2xhc3M9XFxcIm1lbWJlci10ZXN0aW1vbmlhbHNfX3RhYiAke3Rlc3RpbW9uaWFsLmlzU2VsZWN0ZWQgPyAnbWVtYmVyLXRlc3RpbW9uaWFsc19fdGFiLS1zZWxlY3RlZCcgOiAnJ31cXFwiXFxyXFxuXFx0XFx0XFx0IHN0eWxlPVxcXCJiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJyR7dGVzdGltb25pYWwubWVtYmVySW1hZ2VVUkx9JndpZHRoPTE4MCcpO1xcXCI+PC9kaXY+XFxyXFxuXFx0XFx0PC9uYXY+XFxyXFxuXFx0PC9zZWN0aW9uPlxcclxcbjwvdGVtcGxhdGU+XCI7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/member-testimonials/member-testimonials.html\n')},"components/membership-card/membership-card":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar MembershipCard = /** @class */ (function () {\r\n    function MembershipCard() {\r\n        this.backgroundColor = \'\';\r\n        this.productIcon = \'\';\r\n    }\r\n    MembershipCard.prototype.activate = function (model) {\r\n        if (model.backgroundColor) {\r\n            this.backgroundColor = "background-color: " + model.backgroundColor + ";";\r\n        }\r\n        if (model.productIcon) {\r\n            this.productIcon = "background-image: url(\\"" + model.productIcon\r\n                .fullPath + "\\");";\r\n        }\r\n        this.model = model;\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Object)\r\n    ], MembershipCard.prototype, "model", void 0);\r\n    return MembershipCard;\r\n}());\r\nexports.MembershipCard = MembershipCard;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9tZW1iZXJzaGlwLWNhcmQvbWVtYmVyc2hpcC1jYXJkLnRzPzdmMmEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsUUFBUTtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLGNBQWM7QUFDNUQsMEJBQTBCLG1CQUFPLENBQUMsbUJBQW1CO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0ZBQW9GO0FBQ3BGO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEIiwiZmlsZSI6ImNvbXBvbmVudHMvbWVtYmVyc2hpcC1jYXJkL21lbWJlcnNoaXAtY2FyZC5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG52YXIgX19kZWNvcmF0ZSA9ICh0aGlzICYmIHRoaXMuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59O1xyXG52YXIgX19tZXRhZGF0YSA9ICh0aGlzICYmIHRoaXMuX19tZXRhZGF0YSkgfHwgZnVuY3Rpb24gKGssIHYpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShrLCB2KTtcclxufTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgYXVyZWxpYV9mcmFtZXdvcmtfMSA9IHJlcXVpcmUoXCJhdXJlbGlhLWZyYW1ld29ya1wiKTtcclxudmFyIE1lbWJlcnNoaXBDYXJkID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gTWVtYmVyc2hpcENhcmQoKSB7XHJcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kQ29sb3IgPSAnJztcclxuICAgICAgICB0aGlzLnByb2R1Y3RJY29uID0gJyc7XHJcbiAgICB9XHJcbiAgICBNZW1iZXJzaGlwQ2FyZC5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbiAobW9kZWwpIHtcclxuICAgICAgICBpZiAobW9kZWwuYmFja2dyb3VuZENvbG9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmFja2dyb3VuZENvbG9yID0gXCJiYWNrZ3JvdW5kLWNvbG9yOiBcIiArIG1vZGVsLmJhY2tncm91bmRDb2xvciArIFwiO1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobW9kZWwucHJvZHVjdEljb24pIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9kdWN0SWNvbiA9IFwiYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJcIiArIG1vZGVsLnByb2R1Y3RJY29uXHJcbiAgICAgICAgICAgICAgICAuZnVsbFBhdGggKyBcIlxcXCIpO1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm1vZGVsID0gbW9kZWw7XHJcbiAgICB9O1xyXG4gICAgX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5iaW5kYWJsZSxcclxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxyXG4gICAgXSwgTWVtYmVyc2hpcENhcmQucHJvdG90eXBlLCBcIm1vZGVsXCIsIHZvaWQgMCk7XHJcbiAgICByZXR1cm4gTWVtYmVyc2hpcENhcmQ7XHJcbn0oKSk7XHJcbmV4cG9ydHMuTWVtYmVyc2hpcENhcmQgPSBNZW1iZXJzaGlwQ2FyZDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/membership-card/membership-card\n')},"components/membership-card/membership-card.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<div css.bind=\\"backgroundColor\\" class=\\"membership-card center-xs\\">\\r\\n\\r\\n\\t\\t<div class=\\"membership-card__product-title\\" css.bind=\\"productIcon\\">${model.productTitle}<\/div>\\r\\n\\r\\n\\t\\t<div class=\\"membership-card__product-cost ds-title-medium\\">${model.productCost}<\/div>\\r\\n\\r\\n\\t\\t<icon-list-item repeat.for=\\"spec of model.productSpecs\\" model.bind=\\"spec\\" containerless><\/icon-list-item>\\r\\n\\r\\n\\t\\t<div if.bind=\\"model.callToAction.canDisplayAsTextLink\\" class=\\"row\\">\\r\\n\\t\\t\\t<div class=\\"col-xs-12\\">\\r\\n\\t\\t\\t\\t<a class=\\"membership-card__call-to-action ds-btn-primary\\" href=\\"${model.callToAction.url}\\">${model.callToAction.linkTitle}<\/a>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t<\/div>\\r\\n\\r\\n\\t<\/div>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9tZW1iZXJzaGlwLWNhcmQvbWVtYmVyc2hpcC1jYXJkLmh0bWw/ZjdjMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw2TEFBNkwsbUJBQW1CLGlGQUFpRixrQkFBa0Isc1VBQXNVLHVCQUF1QixLQUFLLDZCQUE2QiIsImZpbGUiOiJjb21wb25lbnRzL21lbWJlcnNoaXAtY2FyZC9tZW1iZXJzaGlwLWNhcmQuaHRtbC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gXCI8dGVtcGxhdGU+XFxyXFxuXFx0PGRpdiBjc3MuYmluZD1cXFwiYmFja2dyb3VuZENvbG9yXFxcIiBjbGFzcz1cXFwibWVtYmVyc2hpcC1jYXJkIGNlbnRlci14c1xcXCI+XFxyXFxuXFxyXFxuXFx0XFx0PGRpdiBjbGFzcz1cXFwibWVtYmVyc2hpcC1jYXJkX19wcm9kdWN0LXRpdGxlXFxcIiBjc3MuYmluZD1cXFwicHJvZHVjdEljb25cXFwiPiR7bW9kZWwucHJvZHVjdFRpdGxlfTwvZGl2PlxcclxcblxcclxcblxcdFxcdDxkaXYgY2xhc3M9XFxcIm1lbWJlcnNoaXAtY2FyZF9fcHJvZHVjdC1jb3N0IGRzLXRpdGxlLW1lZGl1bVxcXCI+JHttb2RlbC5wcm9kdWN0Q29zdH08L2Rpdj5cXHJcXG5cXHJcXG5cXHRcXHQ8aWNvbi1saXN0LWl0ZW0gcmVwZWF0LmZvcj1cXFwic3BlYyBvZiBtb2RlbC5wcm9kdWN0U3BlY3NcXFwiIG1vZGVsLmJpbmQ9XFxcInNwZWNcXFwiIGNvbnRhaW5lcmxlc3M+PC9pY29uLWxpc3QtaXRlbT5cXHJcXG5cXHJcXG5cXHRcXHQ8ZGl2IGlmLmJpbmQ9XFxcIm1vZGVsLmNhbGxUb0FjdGlvbi5jYW5EaXNwbGF5QXNUZXh0TGlua1xcXCIgY2xhc3M9XFxcInJvd1xcXCI+XFxyXFxuXFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHQ8YSBjbGFzcz1cXFwibWVtYmVyc2hpcC1jYXJkX19jYWxsLXRvLWFjdGlvbiBkcy1idG4tcHJpbWFyeVxcXCIgaHJlZj1cXFwiJHttb2RlbC5jYWxsVG9BY3Rpb24udXJsfVxcXCI+JHttb2RlbC5jYWxsVG9BY3Rpb24ubGlua1RpdGxlfTwvYT5cXHJcXG5cXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHQ8L2Rpdj5cXHJcXG5cXHJcXG5cXHQ8L2Rpdj5cXHJcXG48L3RlbXBsYXRlPlxcclxcblwiOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///components/membership-card/membership-card.html\n')},"components/news-card/news-card":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar NewsCard = /** @class */ (function () {\r\n    function NewsCard() {\r\n        this.image = \'\';\r\n    }\r\n    NewsCard.prototype.activate = function (model) {\r\n        this.model = model;\r\n    };\r\n    NewsCard.prototype.attached = function () {\r\n        this.modifier = this.model.isFeatured\r\n            ? \'news-card--is-featured col-xs-12\'\r\n            : \'col-xs-12 col-sm-4 col-md-4 col-lg-4\';\r\n        if (this.model.image && this.model.image.hasImage) {\r\n            var height = this.model.isFeatured ? 450 : 180;\r\n            this.image = "background-image: url(\'" + this.model.image\r\n                .fullPath + "&align=center&height=" + height + "\');";\r\n        }\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Object)\r\n    ], NewsCard.prototype, "model", void 0);\r\n    return NewsCard;\r\n}());\r\nexports.NewsCard = NewsCard;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9uZXdzLWNhcmQvbmV3cy1jYXJkLnRzP2E5MmQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsUUFBUTtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLGNBQWM7QUFDNUQsMEJBQTBCLG1CQUFPLENBQUMsbUJBQW1CO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtRUFBbUU7QUFDbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QiLCJmaWxlIjoiY29tcG9uZW50cy9uZXdzLWNhcmQvbmV3cy1jYXJkLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2RlY29yYXRlID0gKHRoaXMgJiYgdGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn07XHJcbnZhciBfX21ldGFkYXRhID0gKHRoaXMgJiYgdGhpcy5fX21ldGFkYXRhKSB8fCBmdW5jdGlvbiAoaywgdikge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xyXG59O1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBhdXJlbGlhX2ZyYW1ld29ya18xID0gcmVxdWlyZShcImF1cmVsaWEtZnJhbWV3b3JrXCIpO1xyXG52YXIgTmV3c0NhcmQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBOZXdzQ2FyZCgpIHtcclxuICAgICAgICB0aGlzLmltYWdlID0gJyc7XHJcbiAgICB9XHJcbiAgICBOZXdzQ2FyZC5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbiAobW9kZWwpIHtcclxuICAgICAgICB0aGlzLm1vZGVsID0gbW9kZWw7XHJcbiAgICB9O1xyXG4gICAgTmV3c0NhcmQucHJvdG90eXBlLmF0dGFjaGVkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMubW9kaWZpZXIgPSB0aGlzLm1vZGVsLmlzRmVhdHVyZWRcclxuICAgICAgICAgICAgPyAnbmV3cy1jYXJkLS1pcy1mZWF0dXJlZCBjb2wteHMtMTInXHJcbiAgICAgICAgICAgIDogJ2NvbC14cy0xMiBjb2wtc20tNCBjb2wtbWQtNCBjb2wtbGctNCc7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwuaW1hZ2UgJiYgdGhpcy5tb2RlbC5pbWFnZS5oYXNJbWFnZSkge1xyXG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5tb2RlbC5pc0ZlYXR1cmVkID8gNDUwIDogMTgwO1xyXG4gICAgICAgICAgICB0aGlzLmltYWdlID0gXCJiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ1wiICsgdGhpcy5tb2RlbC5pbWFnZVxyXG4gICAgICAgICAgICAgICAgLmZ1bGxQYXRoICsgXCImYWxpZ249Y2VudGVyJmhlaWdodD1cIiArIGhlaWdodCArIFwiJyk7XCI7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuYmluZGFibGUsXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcclxuICAgIF0sIE5ld3NDYXJkLnByb3RvdHlwZSwgXCJtb2RlbFwiLCB2b2lkIDApO1xyXG4gICAgcmV0dXJuIE5ld3NDYXJkO1xyXG59KCkpO1xyXG5leHBvcnRzLk5ld3NDYXJkID0gTmV3c0NhcmQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///components/news-card/news-card\n')},"components/news-card/news-card.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<section class=\\"news-card ${modifier}\\">\\r\\n\\t\\t<div class=\\"news-card__wrapper\\">\\r\\n\\t\\t\\t<div class=\\"news-card__image-wrapper\\">\\r\\n\\t\\t\\t\\t<a if.bind=\\"model.callToAction.canDisplayAsImageLink\\" class=\\"news-card__image\\" css.bind=\\"image\\" href.bind=\\"model.callToAction.url\\"\\r\\n\\t\\t\\t\\t target=\\"${model.callToAction.newWindow ? \'_blank\' : \'_self\'}\\">\\r\\n\\t\\t\\t\\t<\/a>\\r\\n\\r\\n\\t\\t\\t\\t<div if.bind=\\"!model.callToAction.canDisplayAsImageLink\\" class=\\"news-card__image\\" css.bind=\\"image\\">\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t<div class=\\"news-card__copy-area\\">\\r\\n\\t\\t\\t\\t<div class=\\"news-card__headline ds-title-medium\\">${model.headline}<\/div>\\r\\n\\r\\n\\t\\t\\t\\t<content-divider model.bind=\\"model.contentDivider\\" containerless><\/content-divider>\\r\\n\\r\\n\\t\\t\\t\\t<div class=\\"news-card__body-text ds-p-base\\" innerhtml.bind=\\"model.bodyText\\"><\/div>\\r\\n\\r\\n\\t\\t\\t\\t<div if.bind=\\"model.callToAction.canDisplayAsTextLink\\" class=\\"news-card__call-to-action\\">\\r\\n\\t\\t\\t\\t\\t<a class=\\"ds-btn-secondary truncate-text\\" href.bind=\\"model.callToAction.url\\" target=\\"${model.callToAction.newWindow ? \'_blank\' : \'_self\'}\\"\\r\\n\\t\\t\\t\\t\\t title=\\"${model.callToAction.linkTitle}\\">\\r\\n\\t\\t\\t\\t\\t\\t${model.callToAction.linkTitle}\\r\\n\\t\\t\\t\\t\\t<\/a>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t<\/div>\\r\\n\\t<\/section>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9uZXdzLWNhcmQvbmV3cy1jYXJkLmh0bWw/NzM0OSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrREFBK0QsU0FBUyw2UUFBNlEsa0RBQWtELGlTQUFpUyxlQUFlLHdhQUF3YSxrREFBa0QsMkJBQTJCLDZCQUE2QixxQkFBcUIsNkJBQTZCIiwiZmlsZSI6ImNvbXBvbmVudHMvbmV3cy1jYXJkL25ld3MtY2FyZC5odG1sLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBcIjx0ZW1wbGF0ZT5cXHJcXG5cXHQ8c2VjdGlvbiBjbGFzcz1cXFwibmV3cy1jYXJkICR7bW9kaWZpZXJ9XFxcIj5cXHJcXG5cXHRcXHQ8ZGl2IGNsYXNzPVxcXCJuZXdzLWNhcmRfX3dyYXBwZXJcXFwiPlxcclxcblxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcIm5ld3MtY2FyZF9faW1hZ2Utd3JhcHBlclxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0PGEgaWYuYmluZD1cXFwibW9kZWwuY2FsbFRvQWN0aW9uLmNhbkRpc3BsYXlBc0ltYWdlTGlua1xcXCIgY2xhc3M9XFxcIm5ld3MtY2FyZF9faW1hZ2VcXFwiIGNzcy5iaW5kPVxcXCJpbWFnZVxcXCIgaHJlZi5iaW5kPVxcXCJtb2RlbC5jYWxsVG9BY3Rpb24udXJsXFxcIlxcclxcblxcdFxcdFxcdFxcdCB0YXJnZXQ9XFxcIiR7bW9kZWwuY2FsbFRvQWN0aW9uLm5ld1dpbmRvdyA/ICdfYmxhbmsnIDogJ19zZWxmJ31cXFwiPlxcclxcblxcdFxcdFxcdFxcdDwvYT5cXHJcXG5cXHJcXG5cXHRcXHRcXHRcXHQ8ZGl2IGlmLmJpbmQ9XFxcIiFtb2RlbC5jYWxsVG9BY3Rpb24uY2FuRGlzcGxheUFzSW1hZ2VMaW5rXFxcIiBjbGFzcz1cXFwibmV3cy1jYXJkX19pbWFnZVxcXCIgY3NzLmJpbmQ9XFxcImltYWdlXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHJcXG5cXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJuZXdzLWNhcmRfX2NvcHktYXJlYVxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwibmV3cy1jYXJkX19oZWFkbGluZSBkcy10aXRsZS1tZWRpdW1cXFwiPiR7bW9kZWwuaGVhZGxpbmV9PC9kaXY+XFxyXFxuXFxyXFxuXFx0XFx0XFx0XFx0PGNvbnRlbnQtZGl2aWRlciBtb2RlbC5iaW5kPVxcXCJtb2RlbC5jb250ZW50RGl2aWRlclxcXCIgY29udGFpbmVybGVzcz48L2NvbnRlbnQtZGl2aWRlcj5cXHJcXG5cXHJcXG5cXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJuZXdzLWNhcmRfX2JvZHktdGV4dCBkcy1wLWJhc2VcXFwiIGlubmVyaHRtbC5iaW5kPVxcXCJtb2RlbC5ib2R5VGV4dFxcXCI+PC9kaXY+XFxyXFxuXFxyXFxuXFx0XFx0XFx0XFx0PGRpdiBpZi5iaW5kPVxcXCJtb2RlbC5jYWxsVG9BY3Rpb24uY2FuRGlzcGxheUFzVGV4dExpbmtcXFwiIGNsYXNzPVxcXCJuZXdzLWNhcmRfX2NhbGwtdG8tYWN0aW9uXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8YSBjbGFzcz1cXFwiZHMtYnRuLXNlY29uZGFyeSB0cnVuY2F0ZS10ZXh0XFxcIiBocmVmLmJpbmQ9XFxcIm1vZGVsLmNhbGxUb0FjdGlvbi51cmxcXFwiIHRhcmdldD1cXFwiJHttb2RlbC5jYWxsVG9BY3Rpb24ubmV3V2luZG93ID8gJ19ibGFuaycgOiAnX3NlbGYnfVxcXCJcXHJcXG5cXHRcXHRcXHRcXHRcXHQgdGl0bGU9XFxcIiR7bW9kZWwuY2FsbFRvQWN0aW9uLmxpbmtUaXRsZX1cXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdCR7bW9kZWwuY2FsbFRvQWN0aW9uLmxpbmtUaXRsZX1cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8L2E+XFxyXFxuXFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0PC9kaXY+XFxyXFxuXFx0PC9zZWN0aW9uPlxcclxcbjwvdGVtcGxhdGU+XFxyXFxuXCI7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/news-card/news-card.html\n')},"components/press-release-listing/article-page":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nvar __values = (this && this.__values) || function (o) {\r\n    var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0;\r\n    if (m) return m.call(o);\r\n    return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nexports.ResponsivePageViewModel = window[\'PageViewModel\'];\r\nvar ArticlePage = /** @class */ (function () {\r\n    function ArticlePage() {\r\n    }\r\n    ArticlePage.prototype.activate = function (params) {\r\n        // look up article by title\r\n        if (params) {\r\n            var article = null;\r\n            var sections = exports.ResponsivePageViewModel.components.filter(function (p) { return p.componentName === \'section-component\'; });\r\n            try {\r\n                for (var sections_1 = __values(sections), sections_1_1 = sections_1.next(); !sections_1_1.done; sections_1_1 = sections_1.next()) {\r\n                    var section = sections_1_1.value;\r\n                    var pressReleaseListing = section.nestedComponents.find(function (p) { return p.componentName === \'press-release-listing\'; });\r\n                    if (pressReleaseListing) {\r\n                        article = pressReleaseListing.pressReleases.find(function (p) { return params.article === p.externalSiteUrl.url; });\r\n                        if (article) {\r\n                            break;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            catch (e_1_1) { e_1 = { error: e_1_1 }; }\r\n            finally {\r\n                try {\r\n                    if (sections_1_1 && !sections_1_1.done && (_a = sections_1.return)) _a.call(sections_1);\r\n                }\r\n                finally { if (e_1) throw e_1.error; }\r\n            }\r\n            if (article) {\r\n                this.model = article;\r\n                window.scrollTo({\r\n                    behavior: \'auto\',\r\n                    left: 0,\r\n                    top: 0\r\n                });\r\n            }\r\n        }\r\n        var e_1, _a;\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Object)\r\n    ], ArticlePage.prototype, "model", void 0);\r\n    ArticlePage = __decorate([\r\n        aurelia_framework_1.containerless()\r\n    ], ArticlePage);\r\n    return ArticlePage;\r\n}());\r\nexports.ArticlePage = ArticlePage;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9wcmVzcy1yZWxlYXNlLWxpc3RpbmcvYXJ0aWNsZS1wYWdlLnRzPzBiZTYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsUUFBUTtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxjQUFjO0FBQzVELDBCQUEwQixtQkFBTyxDQUFDLG1CQUFtQjtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkZBQTJGLGdEQUFnRCxFQUFFO0FBQzdJO0FBQ0EsMkZBQTJGLG9CQUFvQjtBQUMvRztBQUNBLDBGQUEwRixvREFBb0QsRUFBRTtBQUNoSjtBQUNBLHVGQUF1RixpREFBaUQsRUFBRTtBQUMxSTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsUUFBUSxnQkFBZ0I7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsMEJBQTBCO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCIsImZpbGUiOiJjb21wb25lbnRzL3ByZXNzLXJlbGVhc2UtbGlzdGluZy9hcnRpY2xlLXBhZ2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxudmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufTtcclxudmFyIF9fbWV0YWRhdGEgPSAodGhpcyAmJiB0aGlzLl9fbWV0YWRhdGEpIHx8IGZ1bmN0aW9uIChrLCB2KSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEoaywgdik7XHJcbn07XHJcbnZhciBfX3ZhbHVlcyA9ICh0aGlzICYmIHRoaXMuX192YWx1ZXMpIHx8IGZ1bmN0aW9uIChvKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl0sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn07XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIGF1cmVsaWFfZnJhbWV3b3JrXzEgPSByZXF1aXJlKFwiYXVyZWxpYS1mcmFtZXdvcmtcIik7XHJcbmV4cG9ydHMuUmVzcG9uc2l2ZVBhZ2VWaWV3TW9kZWwgPSB3aW5kb3dbJ1BhZ2VWaWV3TW9kZWwnXTtcclxudmFyIEFydGljbGVQYWdlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gQXJ0aWNsZVBhZ2UoKSB7XHJcbiAgICB9XHJcbiAgICBBcnRpY2xlUGFnZS5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbiAocGFyYW1zKSB7XHJcbiAgICAgICAgLy8gbG9vayB1cCBhcnRpY2xlIGJ5IHRpdGxlXHJcbiAgICAgICAgaWYgKHBhcmFtcykge1xyXG4gICAgICAgICAgICB2YXIgYXJ0aWNsZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHZhciBzZWN0aW9ucyA9IGV4cG9ydHMuUmVzcG9uc2l2ZVBhZ2VWaWV3TW9kZWwuY29tcG9uZW50cy5maWx0ZXIoZnVuY3Rpb24gKHApIHsgcmV0dXJuIHAuY29tcG9uZW50TmFtZSA9PT0gJ3NlY3Rpb24tY29tcG9uZW50JzsgfSk7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBzZWN0aW9uc18xID0gX192YWx1ZXMoc2VjdGlvbnMpLCBzZWN0aW9uc18xXzEgPSBzZWN0aW9uc18xLm5leHQoKTsgIXNlY3Rpb25zXzFfMS5kb25lOyBzZWN0aW9uc18xXzEgPSBzZWN0aW9uc18xLm5leHQoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWN0aW9uID0gc2VjdGlvbnNfMV8xLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwcmVzc1JlbGVhc2VMaXN0aW5nID0gc2VjdGlvbi5uZXN0ZWRDb21wb25lbnRzLmZpbmQoZnVuY3Rpb24gKHApIHsgcmV0dXJuIHAuY29tcG9uZW50TmFtZSA9PT0gJ3ByZXNzLXJlbGVhc2UtbGlzdGluZyc7IH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmVzc1JlbGVhc2VMaXN0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFydGljbGUgPSBwcmVzc1JlbGVhc2VMaXN0aW5nLnByZXNzUmVsZWFzZXMuZmluZChmdW5jdGlvbiAocCkgeyByZXR1cm4gcGFyYW1zLmFydGljbGUgPT09IHAuZXh0ZXJuYWxTaXRlVXJsLnVybDsgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcnRpY2xlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxyXG4gICAgICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlY3Rpb25zXzFfMSAmJiAhc2VjdGlvbnNfMV8xLmRvbmUgJiYgKF9hID0gc2VjdGlvbnNfMS5yZXR1cm4pKSBfYS5jYWxsKHNlY3Rpb25zXzEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChhcnRpY2xlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsID0gYXJ0aWNsZTtcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbyh7XHJcbiAgICAgICAgICAgICAgICAgICAgYmVoYXZpb3I6ICdhdXRvJyxcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvcDogMFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGVfMSwgX2E7XHJcbiAgICB9O1xyXG4gICAgX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5iaW5kYWJsZSxcclxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxyXG4gICAgXSwgQXJ0aWNsZVBhZ2UucHJvdG90eXBlLCBcIm1vZGVsXCIsIHZvaWQgMCk7XHJcbiAgICBBcnRpY2xlUGFnZSA9IF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuY29udGFpbmVybGVzcygpXHJcbiAgICBdLCBBcnRpY2xlUGFnZSk7XHJcbiAgICByZXR1cm4gQXJ0aWNsZVBhZ2U7XHJcbn0oKSk7XHJcbmV4cG9ydHMuQXJ0aWNsZVBhZ2UgPSBBcnRpY2xlUGFnZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/press-release-listing/article-page\n')},"components/press-release-listing/article-page.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<div class=\\"article-page\\">\\r\\n\\t\\t<div class=\\"article-page__wrap\\">\\r\\n\\t\\t\\t<div class=\\"row around-md middle-xs\\">\\r\\n\\t\\t\\t\\t<div class=\\"col-xs-6 col-md-3 start-xs\\">\\r\\n\\t\\t\\t\\t\\t<a class=\\"ds-link-primary article-page__back-link\\" href=\\"/company/press-room/\\"><svg class=\\"ds-icon-arrow ds-icon-sm\\">\\r\\n\\t\\t\\t\\t\\t\\t<use xlink:href=\\"#ds-icon-arrow\\"/>\\r\\n\\t\\t\\t\\t\\t<\/svg>\\r\\n\\t\\t\\t\\t\\t<span>Back to press<\/span><\/a>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t<div class=\\"col-xs-6 col-md-3 end-xs article-page__date-container\\">\\r\\n\\t\\t\\t\\t\\t<span class=\\"article-page__date\\">${model.date | dateFormat: \'MMMM DD, YYYY\' }<\/span>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<div class=\\"row center-xs\\">\\r\\n\\t\\t\\t\\t<div class=\\"col-xs-12 col-sm-9 col-md-7 start-xs\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\"article-page__content\\">\\r\\n\\t\\t\\t\\t\\t\\t<h2 class=\\"ds-headline-large article-page__header\\">${model.title}<\/h2>\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\"ds-subhead article-page__subhead\\">${model.subtitle}<\/div>\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\"ds-p-base article-page__body\\" innerHtml.bind=\\"model.releaseCopy\\"><\/div>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<div class=\\"row center-xs\\">\\r\\n\\t\\t\\t\\t<div class=\\"col-xs-12\\">\\r\\n\\t\\t\\t\\t\\t<a class=\\"ds-btn-primary ds-btn--jumbo article-page__cta\\" href=\\"/company/press-room/\\">Back to press<\/a>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t<\/div>\\r\\n\\t<\/div>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9wcmVzcy1yZWxlYXNlLWxpc3RpbmcvYXJ0aWNsZS1wYWdlLmh0bWw/NTczZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrbUJBQWttQiwwQ0FBMEMsMFFBQTBRLFlBQVksdUVBQXVFLGVBQWUiLCJmaWxlIjoiY29tcG9uZW50cy9wcmVzcy1yZWxlYXNlLWxpc3RpbmcvYXJ0aWNsZS1wYWdlLmh0bWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IFwiPHRlbXBsYXRlPlxcclxcblxcdDxkaXYgY2xhc3M9XFxcImFydGljbGUtcGFnZVxcXCI+XFxyXFxuXFx0XFx0PGRpdiBjbGFzcz1cXFwiYXJ0aWNsZS1wYWdlX193cmFwXFxcIj5cXHJcXG5cXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJyb3cgYXJvdW5kLW1kIG1pZGRsZS14c1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiY29sLXhzLTYgY29sLW1kLTMgc3RhcnQteHNcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdDxhIGNsYXNzPVxcXCJkcy1saW5rLXByaW1hcnkgYXJ0aWNsZS1wYWdlX19iYWNrLWxpbmtcXFwiIGhyZWY9XFxcIi9jb21wYW55L3ByZXNzLXJvb20vXFxcIj48c3ZnIGNsYXNzPVxcXCJkcy1pY29uLWFycm93IGRzLWljb24tc21cXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDx1c2UgeGxpbms6aHJlZj1cXFwiI2RzLWljb24tYXJyb3dcXFwiLz5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8L3N2Zz5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8c3Bhbj5CYWNrIHRvIHByZXNzPC9zcGFuPjwvYT5cXHJcXG5cXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb2wteHMtNiBjb2wtbWQtMyBlbmQteHMgYXJ0aWNsZS1wYWdlX19kYXRlLWNvbnRhaW5lclxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PHNwYW4gY2xhc3M9XFxcImFydGljbGUtcGFnZV9fZGF0ZVxcXCI+JHttb2RlbC5kYXRlIHwgZGF0ZUZvcm1hdDogJ01NTU0gREQsIFlZWVknIH08L3NwYW4+XFxyXFxuXFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwicm93IGNlbnRlci14c1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1zbS05IGNvbC1tZC03IHN0YXJ0LXhzXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJhcnRpY2xlLXBhZ2VfX2NvbnRlbnRcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxoMiBjbGFzcz1cXFwiZHMtaGVhZGxpbmUtbGFyZ2UgYXJ0aWNsZS1wYWdlX19oZWFkZXJcXFwiPiR7bW9kZWwudGl0bGV9PC9oMj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJkcy1zdWJoZWFkIGFydGljbGUtcGFnZV9fc3ViaGVhZFxcXCI+JHttb2RlbC5zdWJ0aXRsZX08L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJkcy1wLWJhc2UgYXJ0aWNsZS1wYWdlX19ib2R5XFxcIiBpbm5lckh0bWwuYmluZD1cXFwibW9kZWwucmVsZWFzZUNvcHlcXFwiPjwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcInJvdyBjZW50ZXIteHNcXFwiPlxcclxcblxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMlxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGEgY2xhc3M9XFxcImRzLWJ0bi1wcmltYXJ5IGRzLWJ0bi0tanVtYm8gYXJ0aWNsZS1wYWdlX19jdGFcXFwiIGhyZWY9XFxcIi9jb21wYW55L3ByZXNzLXJvb20vXFxcIj5CYWNrIHRvIHByZXNzPC9hPlxcclxcblxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdDwvZGl2PlxcclxcblxcdDwvZGl2PlxcclxcbjwvdGVtcGxhdGU+XFxyXFxuXCI7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/press-release-listing/article-page.html\n')},"components/press-release-listing/press-release-listing":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar aurelia_router_1 = __webpack_require__(11);\r\nexports.ResponsivePageViewModel = window[\'PageViewModel\'];\r\nvar PressReleaseListing = /** @class */ (function () {\r\n    function PressReleaseListing(router) {\r\n        this.router = router;\r\n        this.paginationIncrement = 5;\r\n        this.paginationCount = this.paginationIncrement;\r\n    }\r\n    PressReleaseListing.prototype.activate = function (model) {\r\n        this.model = model;\r\n        this.pressReleases = this.model.pressReleases.slice(0, this.paginationIncrement);\r\n        if (this.pressReleases.length < this.paginationCount) {\r\n            this.paginationCount = this.pressReleases.length;\r\n        }\r\n    };\r\n    PressReleaseListing.prototype.handleViewArticle = function (cta) {\r\n        if (cta.newWindow) {\r\n            var win = window.open(cta.url, \'_blank\');\r\n            win.focus();\r\n        }\r\n        else {\r\n            this.router.navigateToRoute(\'article-page\', { article: cta.url });\r\n        }\r\n    };\r\n    PressReleaseListing.prototype.handleViewMore = function () {\r\n        var numberOfPressReleases = this.paginationCount + this.paginationIncrement;\r\n        this.paginationCount = (numberOfPressReleases >= this.model.pressReleases.length)\r\n            ? this.model.pressReleases.length\r\n            : numberOfPressReleases;\r\n        this.pressReleases = this.model.pressReleases.slice(0, this.paginationCount);\r\n    };\r\n    Object.defineProperty(PressReleaseListing.prototype, "showViewMore", {\r\n        get: function () {\r\n            return this.pressReleases.length < this.model.pressReleases.length;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Object)\r\n    ], PressReleaseListing.prototype, "model", void 0);\r\n    __decorate([\r\n        aurelia_framework_1.computedFrom(\'paginationCount\'),\r\n        __metadata("design:type", Object),\r\n        __metadata("design:paramtypes", [])\r\n    ], PressReleaseListing.prototype, "showViewMore", null);\r\n    PressReleaseListing = __decorate([\r\n        aurelia_framework_1.containerless(),\r\n        __metadata("design:paramtypes", [aurelia_router_1.Router])\r\n    ], PressReleaseListing);\r\n    return PressReleaseListing;\r\n}());\r\nexports.PressReleaseListing = PressReleaseListing;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9wcmVzcy1yZWxlYXNlLWxpc3RpbmcvcHJlc3MtcmVsZWFzZS1saXN0aW5nLnRzP2RkYmUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsUUFBUTtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLGNBQWM7QUFDNUQsMEJBQTBCLG1CQUFPLENBQUMsbUJBQW1CO0FBQ3JELHVCQUF1QixtQkFBTyxDQUFDLEVBQWdCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQsbUJBQW1CO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QiLCJmaWxlIjoiY29tcG9uZW50cy9wcmVzcy1yZWxlYXNlLWxpc3RpbmcvcHJlc3MtcmVsZWFzZS1saXN0aW5nLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2RlY29yYXRlID0gKHRoaXMgJiYgdGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn07XHJcbnZhciBfX21ldGFkYXRhID0gKHRoaXMgJiYgdGhpcy5fX21ldGFkYXRhKSB8fCBmdW5jdGlvbiAoaywgdikge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xyXG59O1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBhdXJlbGlhX2ZyYW1ld29ya18xID0gcmVxdWlyZShcImF1cmVsaWEtZnJhbWV3b3JrXCIpO1xyXG52YXIgYXVyZWxpYV9yb3V0ZXJfMSA9IHJlcXVpcmUoXCJhdXJlbGlhLXJvdXRlclwiKTtcclxuZXhwb3J0cy5SZXNwb25zaXZlUGFnZVZpZXdNb2RlbCA9IHdpbmRvd1snUGFnZVZpZXdNb2RlbCddO1xyXG52YXIgUHJlc3NSZWxlYXNlTGlzdGluZyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIFByZXNzUmVsZWFzZUxpc3Rpbmcocm91dGVyKSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIgPSByb3V0ZXI7XHJcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uSW5jcmVtZW50ID0gNTtcclxuICAgICAgICB0aGlzLnBhZ2luYXRpb25Db3VudCA9IHRoaXMucGFnaW5hdGlvbkluY3JlbWVudDtcclxuICAgIH1cclxuICAgIFByZXNzUmVsZWFzZUxpc3RpbmcucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24gKG1vZGVsKSB7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG1vZGVsO1xyXG4gICAgICAgIHRoaXMucHJlc3NSZWxlYXNlcyA9IHRoaXMubW9kZWwucHJlc3NSZWxlYXNlcy5zbGljZSgwLCB0aGlzLnBhZ2luYXRpb25JbmNyZW1lbnQpO1xyXG4gICAgICAgIGlmICh0aGlzLnByZXNzUmVsZWFzZXMubGVuZ3RoIDwgdGhpcy5wYWdpbmF0aW9uQ291bnQpIHtcclxuICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uQ291bnQgPSB0aGlzLnByZXNzUmVsZWFzZXMubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBQcmVzc1JlbGVhc2VMaXN0aW5nLnByb3RvdHlwZS5oYW5kbGVWaWV3QXJ0aWNsZSA9IGZ1bmN0aW9uIChjdGEpIHtcclxuICAgICAgICBpZiAoY3RhLm5ld1dpbmRvdykge1xyXG4gICAgICAgICAgICB2YXIgd2luID0gd2luZG93Lm9wZW4oY3RhLnVybCwgJ19ibGFuaycpO1xyXG4gICAgICAgICAgICB3aW4uZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlVG9Sb3V0ZSgnYXJ0aWNsZS1wYWdlJywgeyBhcnRpY2xlOiBjdGEudXJsIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBQcmVzc1JlbGVhc2VMaXN0aW5nLnByb3RvdHlwZS5oYW5kbGVWaWV3TW9yZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgbnVtYmVyT2ZQcmVzc1JlbGVhc2VzID0gdGhpcy5wYWdpbmF0aW9uQ291bnQgKyB0aGlzLnBhZ2luYXRpb25JbmNyZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uQ291bnQgPSAobnVtYmVyT2ZQcmVzc1JlbGVhc2VzID49IHRoaXMubW9kZWwucHJlc3NSZWxlYXNlcy5sZW5ndGgpXHJcbiAgICAgICAgICAgID8gdGhpcy5tb2RlbC5wcmVzc1JlbGVhc2VzLmxlbmd0aFxyXG4gICAgICAgICAgICA6IG51bWJlck9mUHJlc3NSZWxlYXNlcztcclxuICAgICAgICB0aGlzLnByZXNzUmVsZWFzZXMgPSB0aGlzLm1vZGVsLnByZXNzUmVsZWFzZXMuc2xpY2UoMCwgdGhpcy5wYWdpbmF0aW9uQ291bnQpO1xyXG4gICAgfTtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQcmVzc1JlbGVhc2VMaXN0aW5nLnByb3RvdHlwZSwgXCJzaG93Vmlld01vcmVcIiwge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcmVzc1JlbGVhc2VzLmxlbmd0aCA8IHRoaXMubW9kZWwucHJlc3NSZWxlYXNlcy5sZW5ndGg7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICBfX2RlY29yYXRlKFtcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLmJpbmRhYmxlLFxyXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXHJcbiAgICBdLCBQcmVzc1JlbGVhc2VMaXN0aW5nLnByb3RvdHlwZSwgXCJtb2RlbFwiLCB2b2lkIDApO1xyXG4gICAgX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5jb21wdXRlZEZyb20oJ3BhZ2luYXRpb25Db3VudCcpLFxyXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpLFxyXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbXSlcclxuICAgIF0sIFByZXNzUmVsZWFzZUxpc3RpbmcucHJvdG90eXBlLCBcInNob3dWaWV3TW9yZVwiLCBudWxsKTtcclxuICAgIFByZXNzUmVsZWFzZUxpc3RpbmcgPSBfX2RlY29yYXRlKFtcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLmNvbnRhaW5lcmxlc3MoKSxcclxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW2F1cmVsaWFfcm91dGVyXzEuUm91dGVyXSlcclxuICAgIF0sIFByZXNzUmVsZWFzZUxpc3RpbmcpO1xyXG4gICAgcmV0dXJuIFByZXNzUmVsZWFzZUxpc3Rpbmc7XHJcbn0oKSk7XHJcbmV4cG9ydHMuUHJlc3NSZWxlYXNlTGlzdGluZyA9IFByZXNzUmVsZWFzZUxpc3Rpbmc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///components/press-release-listing/press-release-listing\n')},"components/press-release-listing/press-release-listing.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<div class=\\"press-release-listing\\" if.bind=\\"!activeArticle\\">\\r\\n\\t\\t<table class=\\"ds-table ds-table--is-stackable ds-table--is-selectable article-list__table\\">\\r\\n\\t\\t\\t<tbody>\\r\\n\\t\\t\\t\\t<tr class=\\"article-list__row\\" repeat.for=\\"article of pressReleases\\" click.trigger=\\"handleViewArticle(article.externalSiteUrl)\\">\\r\\n\\t\\t\\t\\t\\t<td class=\\"ds-label-small article-list__date\\">${article.date | dateFormat: \'MMMM DD, YYYY\' }<\/td>\\r\\n\\t\\t\\t\\t\\t<td class=\\"article-list__text-container\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\"ds-headline-small\\">${article.title}<\/div>\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\"article-list__article-detail\\" if.bind=\\"article.subtitle\\">${article.subtitle}<\/div>\\r\\n\\t\\t\\t\\t\\t<\/td>\\r\\n\\t\\t\\t\\t\\t<td class=\\"article-list__cta-container\\">\\r\\n\\t\\t\\t\\t\\t\\t<button class=\\"ds-btn-secondary ds-btn--small article-list__cta ${article.externalSiteUrl.newWindow ? \'ds-btn--has-icon-right\' : \'\'}\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<svg class=\\"ds-icon-link-external ds-icon-sm\\" if.bind=\\"article.externalSiteUrl.newWindow\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<use xlink:href=\\"#ds-icon-link-external\\"/>\\r\\n\\t\\t\\t\\t\\t\\t\\t<\/svg>\\r\\n\\t\\t\\t\\t\\t\\t\\t${article.externalSiteUrl.newWindow ? \'View\' : \'Read\'}\\r\\n\\t\\t\\t\\t\\t\\t<\/button>\\r\\n\\t\\t\\t\\t\\t\\t<svg class=\\"ds-icon-link-external ds-icon-sm  article-list__cta-mobile\\" if.bind=\\"article.externalSiteUrl.newWindow\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<use xlink:href=\\"#ds-icon-link-external\\"/>\\r\\n\\t\\t\\t\\t\\t\\t<\/svg>\\r\\n\\t\\t\\t\\t\\t<\/td>\\r\\n\\t\\t\\t\\t<\/tr>\\r\\n\\t\\t\\t<\/tbody>\\r\\n\\t\\t<\/table>\\r\\n\\t\\t<a class=\\"ds-link-primary\\" click.delegate=\\"handleViewMore()\\" if.bind=\\"showViewMore\\">View more<\/a>\\r\\n\\t<\/div>\\r\\n\\r\\n\\t<article-page model.bind=\\"activeArticle\\" if.bind=\\"activeArticle\\"><\/article-page>\\r\\n<\/template>\\r\\n\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9wcmVzcy1yZWxlYXNlLWxpc3RpbmcvcHJlc3MtcmVsZWFzZS1saXN0aW5nLmh0bWw/OTA1NyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5YUFBeWEsNENBQTRDLGlIQUFpSCxjQUFjLGlHQUFpRyxpQkFBaUIsb0tBQW9LLGtFQUFrRSwrTkFBK04sb0RBQW9EIiwiZmlsZSI6ImNvbXBvbmVudHMvcHJlc3MtcmVsZWFzZS1saXN0aW5nL3ByZXNzLXJlbGVhc2UtbGlzdGluZy5odG1sLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBcIjx0ZW1wbGF0ZT5cXHJcXG5cXHQ8ZGl2IGNsYXNzPVxcXCJwcmVzcy1yZWxlYXNlLWxpc3RpbmdcXFwiIGlmLmJpbmQ9XFxcIiFhY3RpdmVBcnRpY2xlXFxcIj5cXHJcXG5cXHRcXHQ8dGFibGUgY2xhc3M9XFxcImRzLXRhYmxlIGRzLXRhYmxlLS1pcy1zdGFja2FibGUgZHMtdGFibGUtLWlzLXNlbGVjdGFibGUgYXJ0aWNsZS1saXN0X190YWJsZVxcXCI+XFxyXFxuXFx0XFx0XFx0PHRib2R5PlxcclxcblxcdFxcdFxcdFxcdDx0ciBjbGFzcz1cXFwiYXJ0aWNsZS1saXN0X19yb3dcXFwiIHJlcGVhdC5mb3I9XFxcImFydGljbGUgb2YgcHJlc3NSZWxlYXNlc1xcXCIgY2xpY2sudHJpZ2dlcj1cXFwiaGFuZGxlVmlld0FydGljbGUoYXJ0aWNsZS5leHRlcm5hbFNpdGVVcmwpXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8dGQgY2xhc3M9XFxcImRzLWxhYmVsLXNtYWxsIGFydGljbGUtbGlzdF9fZGF0ZVxcXCI+JHthcnRpY2xlLmRhdGUgfCBkYXRlRm9ybWF0OiAnTU1NTSBERCwgWVlZWScgfTwvdGQ+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PHRkIGNsYXNzPVxcXCJhcnRpY2xlLWxpc3RfX3RleHQtY29udGFpbmVyXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJkcy1oZWFkbGluZS1zbWFsbFxcXCI+JHthcnRpY2xlLnRpdGxlfTwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImFydGljbGUtbGlzdF9fYXJ0aWNsZS1kZXRhaWxcXFwiIGlmLmJpbmQ9XFxcImFydGljbGUuc3VidGl0bGVcXFwiPiR7YXJ0aWNsZS5zdWJ0aXRsZX08L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8L3RkPlxcclxcblxcdFxcdFxcdFxcdFxcdDx0ZCBjbGFzcz1cXFwiYXJ0aWNsZS1saXN0X19jdGEtY29udGFpbmVyXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJkcy1idG4tc2Vjb25kYXJ5IGRzLWJ0bi0tc21hbGwgYXJ0aWNsZS1saXN0X19jdGEgJHthcnRpY2xlLmV4dGVybmFsU2l0ZVVybC5uZXdXaW5kb3cgPyAnZHMtYnRuLS1oYXMtaWNvbi1yaWdodCcgOiAnJ31cXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdDxzdmcgY2xhc3M9XFxcImRzLWljb24tbGluay1leHRlcm5hbCBkcy1pY29uLXNtXFxcIiBpZi5iaW5kPVxcXCJhcnRpY2xlLmV4dGVybmFsU2l0ZVVybC5uZXdXaW5kb3dcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDx1c2UgeGxpbms6aHJlZj1cXFwiI2RzLWljb24tbGluay1leHRlcm5hbFxcXCIvPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdDwvc3ZnPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdCR7YXJ0aWNsZS5leHRlcm5hbFNpdGVVcmwubmV3V2luZG93ID8gJ1ZpZXcnIDogJ1JlYWQnfVxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxzdmcgY2xhc3M9XFxcImRzLWljb24tbGluay1leHRlcm5hbCBkcy1pY29uLXNtICBhcnRpY2xlLWxpc3RfX2N0YS1tb2JpbGVcXFwiIGlmLmJpbmQ9XFxcImFydGljbGUuZXh0ZXJuYWxTaXRlVXJsLm5ld1dpbmRvd1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0PHVzZSB4bGluazpocmVmPVxcXCIjZHMtaWNvbi1saW5rLWV4dGVybmFsXFxcIi8+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PC9zdmc+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PC90ZD5cXHJcXG5cXHRcXHRcXHRcXHQ8L3RyPlxcclxcblxcdFxcdFxcdDwvdGJvZHk+XFxyXFxuXFx0XFx0PC90YWJsZT5cXHJcXG5cXHRcXHQ8YSBjbGFzcz1cXFwiZHMtbGluay1wcmltYXJ5XFxcIiBjbGljay5kZWxlZ2F0ZT1cXFwiaGFuZGxlVmlld01vcmUoKVxcXCIgaWYuYmluZD1cXFwic2hvd1ZpZXdNb3JlXFxcIj5WaWV3IG1vcmU8L2E+XFxyXFxuXFx0PC9kaXY+XFxyXFxuXFxyXFxuXFx0PGFydGljbGUtcGFnZSBtb2RlbC5iaW5kPVxcXCJhY3RpdmVBcnRpY2xlXFxcIiBpZi5iaW5kPVxcXCJhY3RpdmVBcnRpY2xlXFxcIj48L2FydGljbGUtcGFnZT5cXHJcXG48L3RlbXBsYXRlPlxcclxcblxcclxcblwiOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///components/press-release-listing/press-release-listing.html\n')},"components/press/press":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar Press = /** @class */ (function () {\r\n    function Press() {\r\n    }\r\n    Press.prototype.activate = function (model) {\r\n        this.model = model;\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Object)\r\n    ], Press.prototype, "model", void 0);\r\n    return Press;\r\n}());\r\nexports.Press = Press;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9wcmVzcy9wcmVzcy50cz9hM2UyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLFFBQVE7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxjQUFjO0FBQzVELDBCQUEwQixtQkFBTyxDQUFDLG1CQUFtQjtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEIiwiZmlsZSI6ImNvbXBvbmVudHMvcHJlc3MvcHJlc3MuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxudmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufTtcclxudmFyIF9fbWV0YWRhdGEgPSAodGhpcyAmJiB0aGlzLl9fbWV0YWRhdGEpIHx8IGZ1bmN0aW9uIChrLCB2KSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEoaywgdik7XHJcbn07XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIGF1cmVsaWFfZnJhbWV3b3JrXzEgPSByZXF1aXJlKFwiYXVyZWxpYS1mcmFtZXdvcmtcIik7XHJcbnZhciBQcmVzcyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIFByZXNzKCkge1xyXG4gICAgfVxyXG4gICAgUHJlc3MucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24gKG1vZGVsKSB7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG1vZGVsO1xyXG4gICAgfTtcclxuICAgIF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuYmluZGFibGUsXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcclxuICAgIF0sIFByZXNzLnByb3RvdHlwZSwgXCJtb2RlbFwiLCB2b2lkIDApO1xyXG4gICAgcmV0dXJuIFByZXNzO1xyXG59KCkpO1xyXG5leHBvcnRzLlByZXNzID0gUHJlc3M7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///components/press/press\n')},"components/press/press.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<section class=\\"press\\">\\r\\n\\r\\n\\t\\t<div class=\\"press__container\\">\\r\\n\\t\\t\\t<div class=\\"press__element press__as-featured-in ds-subhead\\">\\r\\n\\t\\t\\t\\t${model.introductionLabel}\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<div class=\\"press__elements\\">\\r\\n\\t\\t\\t\\t<div class=\\"press__element\\" repeat.for=\\"outletImage of model.outletImages\\">\\r\\n\\t\\t\\t\\t\\t<img src=\\"${outletImage.fullPath}\\" class=\\"press__outlet-image\\" />\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t<\/div>\\r\\n\\r\\n\\t<\/section>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9wcmVzcy9wcmVzcy5odG1sPzU2YzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsOExBQThMLHdCQUF3QiwrS0FBK0sscUJBQXFCIiwiZmlsZSI6ImNvbXBvbmVudHMvcHJlc3MvcHJlc3MuaHRtbC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gXCI8dGVtcGxhdGU+XFxyXFxuXFx0PHNlY3Rpb24gY2xhc3M9XFxcInByZXNzXFxcIj5cXHJcXG5cXHJcXG5cXHRcXHQ8ZGl2IGNsYXNzPVxcXCJwcmVzc19fY29udGFpbmVyXFxcIj5cXHJcXG5cXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJwcmVzc19fZWxlbWVudCBwcmVzc19fYXMtZmVhdHVyZWQtaW4gZHMtc3ViaGVhZFxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0JHttb2RlbC5pbnRyb2R1Y3Rpb25MYWJlbH1cXHJcXG5cXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJwcmVzc19fZWxlbWVudHNcXFwiPlxcclxcblxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcInByZXNzX19lbGVtZW50XFxcIiByZXBlYXQuZm9yPVxcXCJvdXRsZXRJbWFnZSBvZiBtb2RlbC5vdXRsZXRJbWFnZXNcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdDxpbWcgc3JjPVxcXCIke291dGxldEltYWdlLmZ1bGxQYXRofVxcXCIgY2xhc3M9XFxcInByZXNzX19vdXRsZXQtaW1hZ2VcXFwiIC8+XFxyXFxuXFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0PC9kaXY+XFxyXFxuXFxyXFxuXFx0PC9zZWN0aW9uPlxcclxcbjwvdGVtcGxhdGU+XFxyXFxuXCI7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/press/press.html\n')},"components/recommended-for-you/recommended-for-you":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar RecommendationResidenceRepository_1 = __webpack_require__(174);\r\nvar RecommendedForYou = /** @class */ (function () {\r\n    function RecommendedForYou(client) {\r\n        this.client = client;\r\n        this.residenceCards = new Array();\r\n        this.recommendationResidenceApiClient = client;\r\n    }\r\n    RecommendedForYou.prototype.attached = function () {\r\n        var _this = this;\r\n        this.recommendationResidenceApiClient.get().then(function (response) {\r\n            _this.residenceCards = response;\r\n            setTimeout(function () {\r\n                _this.carouselBind();\r\n            }, 0);\r\n        });\r\n    };\r\n    RecommendedForYou.prototype.carouselBind = function () {\r\n        window[\'$\'](this.recommendedForYouListElement).owlCarousel({\r\n            autoWidth: true,\r\n            dotsEach: 1,\r\n            items: 1,\r\n            loop: false,\r\n            nav: false\r\n        });\r\n    };\r\n    RecommendedForYou = __decorate([\r\n        aurelia_framework_1.autoinject(),\r\n        __metadata("design:paramtypes", [RecommendationResidenceRepository_1.RecommendationResidenceRepository])\r\n    ], RecommendedForYou);\r\n    return RecommendedForYou;\r\n}());\r\nexports.RecommendedForYou = RecommendedForYou;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9yZWNvbW1lbmRlZC1mb3IteW91L3JlY29tbWVuZGVkLWZvci15b3UudHM/MzE0MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxRQUFRO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RCwwQkFBMEIsbUJBQU8sQ0FBQyxtQkFBbUI7QUFDckQsMENBQTBDLG1CQUFPLENBQUMsR0FBcUM7QUFDdkY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCIsImZpbGUiOiJjb21wb25lbnRzL3JlY29tbWVuZGVkLWZvci15b3UvcmVjb21tZW5kZWQtZm9yLXlvdS5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG52YXIgX19kZWNvcmF0ZSA9ICh0aGlzICYmIHRoaXMuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59O1xyXG52YXIgX19tZXRhZGF0YSA9ICh0aGlzICYmIHRoaXMuX19tZXRhZGF0YSkgfHwgZnVuY3Rpb24gKGssIHYpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShrLCB2KTtcclxufTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgYXVyZWxpYV9mcmFtZXdvcmtfMSA9IHJlcXVpcmUoXCJhdXJlbGlhLWZyYW1ld29ya1wiKTtcclxudmFyIFJlY29tbWVuZGF0aW9uUmVzaWRlbmNlUmVwb3NpdG9yeV8xID0gcmVxdWlyZShcIi4vUmVjb21tZW5kYXRpb25SZXNpZGVuY2VSZXBvc2l0b3J5XCIpO1xyXG52YXIgUmVjb21tZW5kZWRGb3JZb3UgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBSZWNvbW1lbmRlZEZvcllvdShjbGllbnQpIHtcclxuICAgICAgICB0aGlzLmNsaWVudCA9IGNsaWVudDtcclxuICAgICAgICB0aGlzLnJlc2lkZW5jZUNhcmRzID0gbmV3IEFycmF5KCk7XHJcbiAgICAgICAgdGhpcy5yZWNvbW1lbmRhdGlvblJlc2lkZW5jZUFwaUNsaWVudCA9IGNsaWVudDtcclxuICAgIH1cclxuICAgIFJlY29tbWVuZGVkRm9yWW91LnByb3RvdHlwZS5hdHRhY2hlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMucmVjb21tZW5kYXRpb25SZXNpZGVuY2VBcGlDbGllbnQuZ2V0KCkudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgX3RoaXMucmVzaWRlbmNlQ2FyZHMgPSByZXNwb25zZTtcclxuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5jYXJvdXNlbEJpbmQoKTtcclxuICAgICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgUmVjb21tZW5kZWRGb3JZb3UucHJvdG90eXBlLmNhcm91c2VsQmluZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB3aW5kb3dbJyQnXSh0aGlzLnJlY29tbWVuZGVkRm9yWW91TGlzdEVsZW1lbnQpLm93bENhcm91c2VsKHtcclxuICAgICAgICAgICAgYXV0b1dpZHRoOiB0cnVlLFxyXG4gICAgICAgICAgICBkb3RzRWFjaDogMSxcclxuICAgICAgICAgICAgaXRlbXM6IDEsXHJcbiAgICAgICAgICAgIGxvb3A6IGZhbHNlLFxyXG4gICAgICAgICAgICBuYXY6IGZhbHNlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgUmVjb21tZW5kZWRGb3JZb3UgPSBfX2RlY29yYXRlKFtcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLmF1dG9pbmplY3QoKSxcclxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW1JlY29tbWVuZGF0aW9uUmVzaWRlbmNlUmVwb3NpdG9yeV8xLlJlY29tbWVuZGF0aW9uUmVzaWRlbmNlUmVwb3NpdG9yeV0pXHJcbiAgICBdLCBSZWNvbW1lbmRlZEZvcllvdSk7XHJcbiAgICByZXR1cm4gUmVjb21tZW5kZWRGb3JZb3U7XHJcbn0oKSk7XHJcbmV4cG9ydHMuUmVjb21tZW5kZWRGb3JZb3UgPSBSZWNvbW1lbmRlZEZvcllvdTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/recommended-for-you/recommended-for-you\n')},"components/recommended-for-you/recommended-for-you-card":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar RecommendedForYouCard = /** @class */ (function () {\r\n    function RecommendedForYouCard() {\r\n    }\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Object)\r\n    ], RecommendedForYouCard.prototype, "model", void 0);\r\n    return RecommendedForYouCard;\r\n}());\r\nexports.RecommendedForYouCard = RecommendedForYouCard;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9yZWNvbW1lbmRlZC1mb3IteW91L3JlY29tbWVuZGVkLWZvci15b3UtY2FyZC50cz83MDc5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLFFBQVE7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxjQUFjO0FBQzVELDBCQUEwQixtQkFBTyxDQUFDLG1CQUFtQjtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEIiwiZmlsZSI6ImNvbXBvbmVudHMvcmVjb21tZW5kZWQtZm9yLXlvdS9yZWNvbW1lbmRlZC1mb3IteW91LWNhcmQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxudmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufTtcclxudmFyIF9fbWV0YWRhdGEgPSAodGhpcyAmJiB0aGlzLl9fbWV0YWRhdGEpIHx8IGZ1bmN0aW9uIChrLCB2KSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEoaywgdik7XHJcbn07XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIGF1cmVsaWFfZnJhbWV3b3JrXzEgPSByZXF1aXJlKFwiYXVyZWxpYS1mcmFtZXdvcmtcIik7XHJcbnZhciBSZWNvbW1lbmRlZEZvcllvdUNhcmQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBSZWNvbW1lbmRlZEZvcllvdUNhcmQoKSB7XHJcbiAgICB9XHJcbiAgICBfX2RlY29yYXRlKFtcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLmJpbmRhYmxlLFxyXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXHJcbiAgICBdLCBSZWNvbW1lbmRlZEZvcllvdUNhcmQucHJvdG90eXBlLCBcIm1vZGVsXCIsIHZvaWQgMCk7XHJcbiAgICByZXR1cm4gUmVjb21tZW5kZWRGb3JZb3VDYXJkO1xyXG59KCkpO1xyXG5leHBvcnRzLlJlY29tbWVuZGVkRm9yWW91Q2FyZCA9IFJlY29tbWVuZGVkRm9yWW91Q2FyZDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/recommended-for-you/recommended-for-you-card\n')},"components/recommended-for-you/recommended-for-you-card.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<section class=\\"recommended-for-you-card\\">\\r\\n\\t\\t<div class=\\"recommended-for-you-card__hero\\" style=\\"background-image:url(${model.ImageUrl})\\">\\r\\n\\t\\t\\t<div class=\\"icon icon-md icon-secondary icon-favorite \\"><\/div>\\r\\n\\t\\t<\/div>\\r\\n\\t\\t<div class=\\"recommended-for-you-card__content-container\\">\\r\\n\\t\\t\\t<div class=\\"recommended-for-you-card__content\\">\\r\\n\\t\\t\\t\\t<div>\\r\\n\\t\\t\\t\\t\\t<div class=\\"recommended-for-you-card__destination-info\\">\\r\\n\\t\\t\\t\\t\\t\\t<a class=\\"recommended-for-you-card__residence-name ds-title-medium truncate-text\\" href=\\"${model.ResidenceUrl}\\">${model.ResidenceName}<\/a>\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\"recommended-for-you-card__destination-name truncate-text\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t${model.DestinationName}\\r\\n\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t<a class=\\"recommended-for-you-card__btn ds-btn-secondary\\" href=\\"${model.ResidenceUrl}\\">View<\/a>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t<\/div>\\r\\n\\t<\/section>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9yZWNvbW1lbmRlZC1mb3IteW91L3JlY29tbWVuZGVkLWZvci15b3UtY2FyZC5odG1sP2FiMDQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUtBQW1LLGVBQWUsZ2FBQWdhLG1CQUFtQixLQUFLLG9CQUFvQixnSEFBZ0gsc0JBQXNCLDZJQUE2SSxtQkFBbUIiLCJmaWxlIjoiY29tcG9uZW50cy9yZWNvbW1lbmRlZC1mb3IteW91L3JlY29tbWVuZGVkLWZvci15b3UtY2FyZC5odG1sLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBcIjx0ZW1wbGF0ZT5cXHJcXG5cXHQ8c2VjdGlvbiBjbGFzcz1cXFwicmVjb21tZW5kZWQtZm9yLXlvdS1jYXJkXFxcIj5cXHJcXG5cXHRcXHQ8ZGl2IGNsYXNzPVxcXCJyZWNvbW1lbmRlZC1mb3IteW91LWNhcmRfX2hlcm9cXFwiIHN0eWxlPVxcXCJiYWNrZ3JvdW5kLWltYWdlOnVybCgke21vZGVsLkltYWdlVXJsfSlcXFwiPlxcclxcblxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImljb24gaWNvbi1tZCBpY29uLXNlY29uZGFyeSBpY29uLWZhdm9yaXRlIFxcXCI+PC9kaXY+XFxyXFxuXFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0PGRpdiBjbGFzcz1cXFwicmVjb21tZW5kZWQtZm9yLXlvdS1jYXJkX19jb250ZW50LWNvbnRhaW5lclxcXCI+XFxyXFxuXFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwicmVjb21tZW5kZWQtZm9yLXlvdS1jYXJkX19jb250ZW50XFxcIj5cXHJcXG5cXHRcXHRcXHRcXHQ8ZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcInJlY29tbWVuZGVkLWZvci15b3UtY2FyZF9fZGVzdGluYXRpb24taW5mb1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGEgY2xhc3M9XFxcInJlY29tbWVuZGVkLWZvci15b3UtY2FyZF9fcmVzaWRlbmNlLW5hbWUgZHMtdGl0bGUtbWVkaXVtIHRydW5jYXRlLXRleHRcXFwiIGhyZWY9XFxcIiR7bW9kZWwuUmVzaWRlbmNlVXJsfVxcXCI+JHttb2RlbC5SZXNpZGVuY2VOYW1lfTwvYT5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJyZWNvbW1lbmRlZC1mb3IteW91LWNhcmRfX2Rlc3RpbmF0aW9uLW5hbWUgdHJ1bmNhdGUtdGV4dFxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0JHttb2RlbC5EZXN0aW5hdGlvbk5hbWV9XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0PGEgY2xhc3M9XFxcInJlY29tbWVuZGVkLWZvci15b3UtY2FyZF9fYnRuIGRzLWJ0bi1zZWNvbmRhcnlcXFwiIGhyZWY9XFxcIiR7bW9kZWwuUmVzaWRlbmNlVXJsfVxcXCI+VmlldzwvYT5cXHJcXG5cXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHQ8L2Rpdj5cXHJcXG5cXHQ8L3NlY3Rpb24+XFxyXFxuPC90ZW1wbGF0ZT5cXHJcXG5cIjsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///components/recommended-for-you/recommended-for-you-card.html\n')},"components/recommended-for-you/recommended-for-you.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<div class=\\"recommended-for-you-list owl-carousel owl-theme\\"  ref=\\"recommendedForYouListElement\\" >\\r\\n\\t\\t<recommended-for-you-card\\r\\n\\t\\t\\trepeat.for=\\"card of residenceCards\\"\\r\\n\\t\\t\\tmodel.bind=\\"card\\"\\t\\t\\t\\r\\n\\t\\t\\tclass=\\"col-xs-12 col-sm-6\\"\\r\\n\\t\\t\\tcontainerless>\\r\\n\\t\\t<\/recommended-for-you-card>\\r\\n\\t<\/div>\\r\\n<\/template>";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9yZWNvbW1lbmRlZC1mb3IteW91L3JlY29tbWVuZGVkLWZvci15b3UuaHRtbD80OWEyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBIiwiZmlsZSI6ImNvbXBvbmVudHMvcmVjb21tZW5kZWQtZm9yLXlvdS9yZWNvbW1lbmRlZC1mb3IteW91Lmh0bWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IFwiPHRlbXBsYXRlPlxcclxcblxcdDxkaXYgY2xhc3M9XFxcInJlY29tbWVuZGVkLWZvci15b3UtbGlzdCBvd2wtY2Fyb3VzZWwgb3dsLXRoZW1lXFxcIiAgcmVmPVxcXCJyZWNvbW1lbmRlZEZvcllvdUxpc3RFbGVtZW50XFxcIiA+XFxyXFxuXFx0XFx0PHJlY29tbWVuZGVkLWZvci15b3UtY2FyZFxcclxcblxcdFxcdFxcdHJlcGVhdC5mb3I9XFxcImNhcmQgb2YgcmVzaWRlbmNlQ2FyZHNcXFwiXFxyXFxuXFx0XFx0XFx0bW9kZWwuYmluZD1cXFwiY2FyZFxcXCJcXHRcXHRcXHRcXHJcXG5cXHRcXHRcXHRjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1zbS02XFxcIlxcclxcblxcdFxcdFxcdGNvbnRhaW5lcmxlc3M+XFxyXFxuXFx0XFx0PC9yZWNvbW1lbmRlZC1mb3IteW91LWNhcmQ+XFxyXFxuXFx0PC9kaXY+XFxyXFxuPC90ZW1wbGF0ZT5cIjsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///components/recommended-for-you/recommended-for-you.html\n')},"components/responsive-image/responsive-image":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar widths = [2560, 1920, 1600, 1280, 1024, 768];\r\nvar ResponsiveImage = /** @class */ (function () {\r\n    function ResponsiveImage() {\r\n        this.url = \'\';\r\n        this.mobileUrl = \'\';\r\n        this.modifier = \'responsive-image--is-background-image\';\r\n        this.adjustHeightForMobile = false;\r\n        this.sources = [];\r\n        this.fallbackSrcSet = [];\r\n    }\r\n    ResponsiveImage.prototype.attached = function () {\r\n        var _this = this;\r\n        widths.forEach(function (width) {\r\n            var imgUrl = _this.url + "&width=" + width + "&align=center " + width + "w";\r\n            var pictureSource = { width: width, url: imgUrl };\r\n            _this.fallbackSrcSet.push(imgUrl);\r\n            _this.sources.push(pictureSource);\r\n        });\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", String)\r\n    ], ResponsiveImage.prototype, "url", void 0);\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", String)\r\n    ], ResponsiveImage.prototype, "mobileUrl", void 0);\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", String)\r\n    ], ResponsiveImage.prototype, "modifier", void 0);\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Boolean)\r\n    ], ResponsiveImage.prototype, "adjustHeightForMobile", void 0);\r\n    return ResponsiveImage;\r\n}());\r\nexports.ResponsiveImage = ResponsiveImage;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9yZXNwb25zaXZlLWltYWdlL3Jlc3BvbnNpdmUtaW1hZ2UudHM/OTg1ZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxRQUFRO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RCwwQkFBMEIsbUJBQU8sQ0FBQyxtQkFBbUI7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCIsImZpbGUiOiJjb21wb25lbnRzL3Jlc3BvbnNpdmUtaW1hZ2UvcmVzcG9uc2l2ZS1pbWFnZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG52YXIgX19kZWNvcmF0ZSA9ICh0aGlzICYmIHRoaXMuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59O1xyXG52YXIgX19tZXRhZGF0YSA9ICh0aGlzICYmIHRoaXMuX19tZXRhZGF0YSkgfHwgZnVuY3Rpb24gKGssIHYpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShrLCB2KTtcclxufTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgYXVyZWxpYV9mcmFtZXdvcmtfMSA9IHJlcXVpcmUoXCJhdXJlbGlhLWZyYW1ld29ya1wiKTtcclxudmFyIHdpZHRocyA9IFsyNTYwLCAxOTIwLCAxNjAwLCAxMjgwLCAxMDI0LCA3NjhdO1xyXG52YXIgUmVzcG9uc2l2ZUltYWdlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gUmVzcG9uc2l2ZUltYWdlKCkge1xyXG4gICAgICAgIHRoaXMudXJsID0gJyc7XHJcbiAgICAgICAgdGhpcy5tb2JpbGVVcmwgPSAnJztcclxuICAgICAgICB0aGlzLm1vZGlmaWVyID0gJ3Jlc3BvbnNpdmUtaW1hZ2UtLWlzLWJhY2tncm91bmQtaW1hZ2UnO1xyXG4gICAgICAgIHRoaXMuYWRqdXN0SGVpZ2h0Rm9yTW9iaWxlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zb3VyY2VzID0gW107XHJcbiAgICAgICAgdGhpcy5mYWxsYmFja1NyY1NldCA9IFtdO1xyXG4gICAgfVxyXG4gICAgUmVzcG9uc2l2ZUltYWdlLnByb3RvdHlwZS5hdHRhY2hlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHdpZHRocy5mb3JFYWNoKGZ1bmN0aW9uICh3aWR0aCkge1xyXG4gICAgICAgICAgICB2YXIgaW1nVXJsID0gX3RoaXMudXJsICsgXCImd2lkdGg9XCIgKyB3aWR0aCArIFwiJmFsaWduPWNlbnRlciBcIiArIHdpZHRoICsgXCJ3XCI7XHJcbiAgICAgICAgICAgIHZhciBwaWN0dXJlU291cmNlID0geyB3aWR0aDogd2lkdGgsIHVybDogaW1nVXJsIH07XHJcbiAgICAgICAgICAgIF90aGlzLmZhbGxiYWNrU3JjU2V0LnB1c2goaW1nVXJsKTtcclxuICAgICAgICAgICAgX3RoaXMuc291cmNlcy5wdXNoKHBpY3R1cmVTb3VyY2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuYmluZGFibGUsXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIFN0cmluZylcclxuICAgIF0sIFJlc3BvbnNpdmVJbWFnZS5wcm90b3R5cGUsIFwidXJsXCIsIHZvaWQgMCk7XHJcbiAgICBfX2RlY29yYXRlKFtcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLmJpbmRhYmxlLFxyXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBTdHJpbmcpXHJcbiAgICBdLCBSZXNwb25zaXZlSW1hZ2UucHJvdG90eXBlLCBcIm1vYmlsZVVybFwiLCB2b2lkIDApO1xyXG4gICAgX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5iaW5kYWJsZSxcclxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgU3RyaW5nKVxyXG4gICAgXSwgUmVzcG9uc2l2ZUltYWdlLnByb3RvdHlwZSwgXCJtb2RpZmllclwiLCB2b2lkIDApO1xyXG4gICAgX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5iaW5kYWJsZSxcclxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgQm9vbGVhbilcclxuICAgIF0sIFJlc3BvbnNpdmVJbWFnZS5wcm90b3R5cGUsIFwiYWRqdXN0SGVpZ2h0Rm9yTW9iaWxlXCIsIHZvaWQgMCk7XHJcbiAgICByZXR1cm4gUmVzcG9uc2l2ZUltYWdlO1xyXG59KCkpO1xyXG5leHBvcnRzLlJlc3BvbnNpdmVJbWFnZSA9IFJlc3BvbnNpdmVJbWFnZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/responsive-image/responsive-image\n')},"components/responsive-image/responsive-image.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<picture class=\\"responsive-image ${modifier}\\">\\r\\n\\t\\t<source repeat.for=\\"source of sources\\" media=\\"(min-width: ${source.width}px)\\" srcset=\\"${source.url}\\" />\\r\\n\\t\\t<source if.bind=\\"!adjustHeightForMobile\\" media=\\"(max-width:767px)\\" srcset=\\"${mobileUrl || url}&width=768&align=center\\" />\\r\\n\\t\\t<source if.bind=\\"adjustHeightForMobile\\" media=\\"(max-width:767px)\\" srcset=\\"${mobileUrl || url}&width=768&height=1400&crop=resize&align=center\\" />\\r\\n\\t\\t<img class=\\"responsive-image__img\\" srcset=\\"${fallbackSrcSet}\\" sizes=\\"(min-width: 40em) 100vw\\" />\\r\\n\\t<\/picture>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9yZXNwb25zaXZlLWltYWdlL3Jlc3BvbnNpdmUtaW1hZ2UuaHRtbD9lOWRmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNFQUFzRSxTQUFTLDBFQUEwRSxhQUFhLGlCQUFpQixXQUFXLCtGQUErRixpQkFBaUIscUhBQXFILGlCQUFpQiw0R0FBNEcsZUFBZSIsImZpbGUiOiJjb21wb25lbnRzL3Jlc3BvbnNpdmUtaW1hZ2UvcmVzcG9uc2l2ZS1pbWFnZS5odG1sLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBcIjx0ZW1wbGF0ZT5cXHJcXG5cXHQ8cGljdHVyZSBjbGFzcz1cXFwicmVzcG9uc2l2ZS1pbWFnZSAke21vZGlmaWVyfVxcXCI+XFxyXFxuXFx0XFx0PHNvdXJjZSByZXBlYXQuZm9yPVxcXCJzb3VyY2Ugb2Ygc291cmNlc1xcXCIgbWVkaWE9XFxcIihtaW4td2lkdGg6ICR7c291cmNlLndpZHRofXB4KVxcXCIgc3Jjc2V0PVxcXCIke3NvdXJjZS51cmx9XFxcIiAvPlxcclxcblxcdFxcdDxzb3VyY2UgaWYuYmluZD1cXFwiIWFkanVzdEhlaWdodEZvck1vYmlsZVxcXCIgbWVkaWE9XFxcIihtYXgtd2lkdGg6NzY3cHgpXFxcIiBzcmNzZXQ9XFxcIiR7bW9iaWxlVXJsIHx8IHVybH0md2lkdGg9NzY4JmFsaWduPWNlbnRlclxcXCIgLz5cXHJcXG5cXHRcXHQ8c291cmNlIGlmLmJpbmQ9XFxcImFkanVzdEhlaWdodEZvck1vYmlsZVxcXCIgbWVkaWE9XFxcIihtYXgtd2lkdGg6NzY3cHgpXFxcIiBzcmNzZXQ9XFxcIiR7bW9iaWxlVXJsIHx8IHVybH0md2lkdGg9NzY4JmhlaWdodD0xNDAwJmNyb3A9cmVzaXplJmFsaWduPWNlbnRlclxcXCIgLz5cXHJcXG5cXHRcXHQ8aW1nIGNsYXNzPVxcXCJyZXNwb25zaXZlLWltYWdlX19pbWdcXFwiIHNyY3NldD1cXFwiJHtmYWxsYmFja1NyY1NldH1cXFwiIHNpemVzPVxcXCIobWluLXdpZHRoOiA0MGVtKSAxMDB2d1xcXCIgLz5cXHJcXG5cXHQ8L3BpY3R1cmU+XFxyXFxuPC90ZW1wbGF0ZT5cXHJcXG5cIjsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///components/responsive-image/responsive-image.html\n')},"components/scrolling-image-gallery/scrolling-image-gallery":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar ScrollingImageGallery = /** @class */ (function () {\r\n    function ScrollingImageGallery() {\r\n    }\r\n    ScrollingImageGallery.prototype.activate = function (model) {\r\n        this.model = model;\r\n    };\r\n    ScrollingImageGallery.prototype.attached = function () {\r\n        window[\'$\'](this.scrollImageGalleryElement).owlCarousel({\r\n            autoplay: true,\r\n            autoplayHoverPause: false,\r\n            autoplayTimeout: 7000,\r\n            dots: false,\r\n            lazyLoad: true,\r\n            loop: true,\r\n            margin: 10,\r\n            nav: false,\r\n            responsive: {\r\n                0: {\r\n                    items: 1,\r\n                    stagePadding: 50\r\n                },\r\n                768: {\r\n                    items: 3,\r\n                    stagePadding: 50\r\n                },\r\n                1024: {\r\n                    items: 4,\r\n                    stagePadding: 50\r\n                }\r\n            },\r\n            rewindNav: false,\r\n            smartSpeed: 1400\r\n        });\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Object)\r\n    ], ScrollingImageGallery.prototype, "model", void 0);\r\n    return ScrollingImageGallery;\r\n}());\r\nexports.ScrollingImageGallery = ScrollingImageGallery;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9zY3JvbGxpbmctaW1hZ2UtZ2FsbGVyeS9zY3JvbGxpbmctaW1hZ2UtZ2FsbGVyeS50cz81NjNkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLFFBQVE7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxjQUFjO0FBQzVELDBCQUEwQixtQkFBTyxDQUFDLG1CQUFtQjtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCIsImZpbGUiOiJjb21wb25lbnRzL3Njcm9sbGluZy1pbWFnZS1nYWxsZXJ5L3Njcm9sbGluZy1pbWFnZS1nYWxsZXJ5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2RlY29yYXRlID0gKHRoaXMgJiYgdGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn07XHJcbnZhciBfX21ldGFkYXRhID0gKHRoaXMgJiYgdGhpcy5fX21ldGFkYXRhKSB8fCBmdW5jdGlvbiAoaywgdikge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xyXG59O1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBhdXJlbGlhX2ZyYW1ld29ya18xID0gcmVxdWlyZShcImF1cmVsaWEtZnJhbWV3b3JrXCIpO1xyXG52YXIgU2Nyb2xsaW5nSW1hZ2VHYWxsZXJ5ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gU2Nyb2xsaW5nSW1hZ2VHYWxsZXJ5KCkge1xyXG4gICAgfVxyXG4gICAgU2Nyb2xsaW5nSW1hZ2VHYWxsZXJ5LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uIChtb2RlbCkge1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSBtb2RlbDtcclxuICAgIH07XHJcbiAgICBTY3JvbGxpbmdJbWFnZUdhbGxlcnkucHJvdG90eXBlLmF0dGFjaGVkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHdpbmRvd1snJCddKHRoaXMuc2Nyb2xsSW1hZ2VHYWxsZXJ5RWxlbWVudCkub3dsQ2Fyb3VzZWwoe1xyXG4gICAgICAgICAgICBhdXRvcGxheTogdHJ1ZSxcclxuICAgICAgICAgICAgYXV0b3BsYXlIb3ZlclBhdXNlOiBmYWxzZSxcclxuICAgICAgICAgICAgYXV0b3BsYXlUaW1lb3V0OiA3MDAwLFxyXG4gICAgICAgICAgICBkb3RzOiBmYWxzZSxcclxuICAgICAgICAgICAgbGF6eUxvYWQ6IHRydWUsXHJcbiAgICAgICAgICAgIGxvb3A6IHRydWUsXHJcbiAgICAgICAgICAgIG1hcmdpbjogMTAsXHJcbiAgICAgICAgICAgIG5hdjogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3BvbnNpdmU6IHtcclxuICAgICAgICAgICAgICAgIDA6IHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtczogMSxcclxuICAgICAgICAgICAgICAgICAgICBzdGFnZVBhZGRpbmc6IDUwXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgNzY4OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IDMsXHJcbiAgICAgICAgICAgICAgICAgICAgc3RhZ2VQYWRkaW5nOiA1MFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIDEwMjQ6IHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtczogNCxcclxuICAgICAgICAgICAgICAgICAgICBzdGFnZVBhZGRpbmc6IDUwXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHJld2luZE5hdjogZmFsc2UsXHJcbiAgICAgICAgICAgIHNtYXJ0U3BlZWQ6IDE0MDBcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICBfX2RlY29yYXRlKFtcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLmJpbmRhYmxlLFxyXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXHJcbiAgICBdLCBTY3JvbGxpbmdJbWFnZUdhbGxlcnkucHJvdG90eXBlLCBcIm1vZGVsXCIsIHZvaWQgMCk7XHJcbiAgICByZXR1cm4gU2Nyb2xsaW5nSW1hZ2VHYWxsZXJ5O1xyXG59KCkpO1xyXG5leHBvcnRzLlNjcm9sbGluZ0ltYWdlR2FsbGVyeSA9IFNjcm9sbGluZ0ltYWdlR2FsbGVyeTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/scrolling-image-gallery/scrolling-image-gallery\n')},"components/scrolling-image-gallery/scrolling-image-gallery.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<div class=\\"scrolling-image-gallery owl-carousel owl-theme\\" ref=\\"scrollImageGalleryElement\\">\\r\\n\\t\\t\\r\\n\\t\\t<div if.bind=\\"model.images\\"\\r\\n\\t\\t\\t repeat.for=\\"image of model.images\\"\\r\\n\\t\\t\\t class=\\"scrolling-image-gallery__image item\\"\\r\\n\\t\\t\\t style=\\"background-image: url(\'${image.fullPath}&width=666&align=center\');\\">\\r\\n\\t\\t<\/div>\\r\\n\\r\\n\\t<\/div>\\r\\n<\/template>";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9zY3JvbGxpbmctaW1hZ2UtZ2FsbGVyeS9zY3JvbGxpbmctaW1hZ2UtZ2FsbGVyeS5odG1sPzVhMzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa1VBQWtVLGVBQWUsMEJBQTBCIiwiZmlsZSI6ImNvbXBvbmVudHMvc2Nyb2xsaW5nLWltYWdlLWdhbGxlcnkvc2Nyb2xsaW5nLWltYWdlLWdhbGxlcnkuaHRtbC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gXCI8dGVtcGxhdGU+XFxyXFxuXFx0PGRpdiBjbGFzcz1cXFwic2Nyb2xsaW5nLWltYWdlLWdhbGxlcnkgb3dsLWNhcm91c2VsIG93bC10aGVtZVxcXCIgcmVmPVxcXCJzY3JvbGxJbWFnZUdhbGxlcnlFbGVtZW50XFxcIj5cXHJcXG5cXHRcXHRcXHJcXG5cXHRcXHQ8ZGl2IGlmLmJpbmQ9XFxcIm1vZGVsLmltYWdlc1xcXCJcXHJcXG5cXHRcXHRcXHQgcmVwZWF0LmZvcj1cXFwiaW1hZ2Ugb2YgbW9kZWwuaW1hZ2VzXFxcIlxcclxcblxcdFxcdFxcdCBjbGFzcz1cXFwic2Nyb2xsaW5nLWltYWdlLWdhbGxlcnlfX2ltYWdlIGl0ZW1cXFwiXFxyXFxuXFx0XFx0XFx0IHN0eWxlPVxcXCJiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJyR7aW1hZ2UuZnVsbFBhdGh9JndpZHRoPTY2NiZhbGlnbj1jZW50ZXInKTtcXFwiPlxcclxcblxcdFxcdDwvZGl2PlxcclxcblxcclxcblxcdDwvZGl2PlxcclxcbjwvdGVtcGxhdGU+XCI7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/scrolling-image-gallery/scrolling-image-gallery.html\n')},"components/section-component/section-component":function(module,exports,__webpack_require__){"use strict";eval("\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__(\"aurelia-framework\");\r\nvar ISectionComponent_1 = __webpack_require__(172);\r\nvar SectionComponent = /** @class */ (function () {\r\n    function SectionComponent() {\r\n        this.columns = 'col-xs';\r\n        this.hasBackgroundImage = false;\r\n        this.inlineStyles = '';\r\n        this.overlayStyles = '';\r\n    }\r\n    SectionComponent.prototype.activate = function (model) {\r\n        this.model = model;\r\n        this.setInlineStyles();\r\n        this.columns = this.getColumns(model.componentsPerRow);\r\n        this.componentsPerRow = model.componentsPerRow;\r\n        if (this.model.callToAction) {\r\n            this.isRegistrationCTA = model.callToAction.url.toLowerCase() === '/public/getstarted/';\r\n        }\r\n    };\r\n    SectionComponent.prototype.setInlineStyles = function () {\r\n        this.inlineStyles = '';\r\n        if (this.model.backgroundColor) {\r\n            this.inlineStyles += \"background-color: \" + this.model.backgroundColor + \";\";\r\n        }\r\n        if (this.model.overlayColorOverride || this.model.overlayPercentageOverride) {\r\n            this.overlayStyles = \"--image-overlay-color: \" + this.model.overlayColorOverride + \"; --image-overlay-opacity: calc( \" + this.model.overlayPercentageOverride + \" / 100 );\";\r\n        }\r\n        if (this.model.textColor) {\r\n            this.textColor = \"color: \" + this.model.textColor + \";\";\r\n        }\r\n        if (this.model.topPadding) {\r\n            if (this.model.topPadding === ISectionComponent_1.SectionComponentTopPadding.ExtraPadding) {\r\n                this.sectionPadding = 'section-component--padtop';\r\n            }\r\n            else if (this.model.topPadding === ISectionComponent_1.SectionComponentTopPadding.Collapsed) {\r\n                this.sectionPadding = 'section-component--collapsetop';\r\n            }\r\n        }\r\n        if (this.model.bottomPadding) {\r\n            if (this.model.bottomPadding === ISectionComponent_1.SectionComponentBottomPadding.ExtraPadding) {\r\n                this.sectionPadding += ' section-component--padbottom';\r\n            }\r\n            else if (this.model.bottomPadding === ISectionComponent_1.SectionComponentBottomPadding.Collapsed) {\r\n                this.sectionPadding += ' section-component--collapsebottom';\r\n            }\r\n        }\r\n    };\r\n    SectionComponent.prototype.getComponentsPerRow = function ($index) {\r\n        if (!this.componentsPerRow) {\r\n            return '';\r\n        }\r\n        var lastCharIndex = this.componentsPerRow.length - 1;\r\n        var componentsPerRowAsInt = parseInt(this.componentsPerRow.charAt(lastCharIndex), 10);\r\n        var currentColumn = ($index + 1) % componentsPerRowAsInt === 0\r\n            ? componentsPerRowAsInt\r\n            : ($index + 1) % componentsPerRowAsInt;\r\n        return \"section-component__components-per-row--\" + currentColumn + \"-of-\" + componentsPerRowAsInt;\r\n    };\r\n    SectionComponent.prototype.getColumns = function (componentsPerRow) {\r\n        switch (componentsPerRow) {\r\n            case ISectionComponent_1.SectionComponentsPerRow.mobile1Tablet2Desktop2:\r\n                return 'col-xs-12 col-sm-6';\r\n            case ISectionComponent_1.SectionComponentsPerRow.mobile1Tablet1Desktop3:\r\n                return 'col-xs-12 col-md-4';\r\n            case ISectionComponent_1.SectionComponentsPerRow.mobile1Tablet3Desktop3:\r\n                return 'col-xs-12 col-sm-4 col-md-4';\r\n            case ISectionComponent_1.SectionComponentsPerRow.mobile1Tablet2Desktop4:\r\n                return 'col-xs-12 col-sm-6 col-md-3 col-lg-3';\r\n            case ISectionComponent_1.SectionComponentsPerRow.fullScreen:\r\n                return 'section-component__fullscreen';\r\n            default:\r\n                return 'col-xs-12';\r\n        }\r\n    };\r\n    SectionComponent.prototype.determineLayoutStyle = function () {\r\n        var classNames = '';\r\n        if (this.model.callToAction && this.model.callToAction.canDisplayAsTextLink) {\r\n            classNames += 'section-component__components--has-cta-button';\r\n        }\r\n        var doesNotHaveExperienceOrExpandableCards = this.model.nestedComponents.filter(function (x) { return x.componentName === 'experiences-card' || x.componentName === 'expandable-card'; }).length === 0;\r\n        if (doesNotHaveExperienceOrExpandableCards) {\r\n            classNames += ' center-xs';\r\n        }\r\n        if (this.model.rowReverse) {\r\n            classNames += ' section-component--row-reverse';\r\n        }\r\n        if (this.model.verticalAlignment) {\r\n            switch (this.model.verticalAlignment) {\r\n                case ISectionComponent_1.VerticalAlignment.middle:\r\n                    classNames += ' middle-xs';\r\n                    break;\r\n                case ISectionComponent_1.VerticalAlignment.bottom:\r\n                    classNames += ' bottom-xs';\r\n                    break;\r\n                default:\r\n                    classNames += ' top-xs';\r\n                    break;\r\n            }\r\n        }\r\n        return classNames;\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata(\"design:type\", Object)\r\n    ], SectionComponent.prototype, \"model\", void 0);\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata(\"design:type\", String)\r\n    ], SectionComponent.prototype, \"modifier\", void 0);\r\n    return SectionComponent;\r\n}());\r\nexports.SectionComponent = SectionComponent;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9zZWN0aW9uLWNvbXBvbmVudC9zZWN0aW9uLWNvbXBvbmVudC50cz9jYjk2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLFFBQVE7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxjQUFjO0FBQzVELDBCQUEwQixtQkFBTyxDQUFDLG1CQUFtQjtBQUNyRCwwQkFBMEIsbUJBQU8sQ0FBQyxHQUFxQjtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVGQUF1RjtBQUN2RjtBQUNBO0FBQ0EsaUdBQWlHLHFGQUFxRjtBQUN0TDtBQUNBO0FBQ0Esa0VBQWtFO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzR0FBc0csd0ZBQXdGLEVBQUU7QUFDaE07QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEIiwiZmlsZSI6ImNvbXBvbmVudHMvc2VjdGlvbi1jb21wb25lbnQvc2VjdGlvbi1jb21wb25lbnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxudmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufTtcclxudmFyIF9fbWV0YWRhdGEgPSAodGhpcyAmJiB0aGlzLl9fbWV0YWRhdGEpIHx8IGZ1bmN0aW9uIChrLCB2KSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEoaywgdik7XHJcbn07XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIGF1cmVsaWFfZnJhbWV3b3JrXzEgPSByZXF1aXJlKFwiYXVyZWxpYS1mcmFtZXdvcmtcIik7XHJcbnZhciBJU2VjdGlvbkNvbXBvbmVudF8xID0gcmVxdWlyZShcIi4vSVNlY3Rpb25Db21wb25lbnRcIik7XHJcbnZhciBTZWN0aW9uQ29tcG9uZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gU2VjdGlvbkNvbXBvbmVudCgpIHtcclxuICAgICAgICB0aGlzLmNvbHVtbnMgPSAnY29sLXhzJztcclxuICAgICAgICB0aGlzLmhhc0JhY2tncm91bmRJbWFnZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaW5saW5lU3R5bGVzID0gJyc7XHJcbiAgICAgICAgdGhpcy5vdmVybGF5U3R5bGVzID0gJyc7XHJcbiAgICB9XHJcbiAgICBTZWN0aW9uQ29tcG9uZW50LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uIChtb2RlbCkge1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSBtb2RlbDtcclxuICAgICAgICB0aGlzLnNldElubGluZVN0eWxlcygpO1xyXG4gICAgICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuZ2V0Q29sdW1ucyhtb2RlbC5jb21wb25lbnRzUGVyUm93KTtcclxuICAgICAgICB0aGlzLmNvbXBvbmVudHNQZXJSb3cgPSBtb2RlbC5jb21wb25lbnRzUGVyUm93O1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmNhbGxUb0FjdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLmlzUmVnaXN0cmF0aW9uQ1RBID0gbW9kZWwuY2FsbFRvQWN0aW9uLnVybC50b0xvd2VyQ2FzZSgpID09PSAnL3B1YmxpYy9nZXRzdGFydGVkLyc7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIFNlY3Rpb25Db21wb25lbnQucHJvdG90eXBlLnNldElubGluZVN0eWxlcyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmlubGluZVN0eWxlcyA9ICcnO1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmJhY2tncm91bmRDb2xvcikge1xyXG4gICAgICAgICAgICB0aGlzLmlubGluZVN0eWxlcyArPSBcImJhY2tncm91bmQtY29sb3I6IFwiICsgdGhpcy5tb2RlbC5iYWNrZ3JvdW5kQ29sb3IgKyBcIjtcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwub3ZlcmxheUNvbG9yT3ZlcnJpZGUgfHwgdGhpcy5tb2RlbC5vdmVybGF5UGVyY2VudGFnZU92ZXJyaWRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVN0eWxlcyA9IFwiLS1pbWFnZS1vdmVybGF5LWNvbG9yOiBcIiArIHRoaXMubW9kZWwub3ZlcmxheUNvbG9yT3ZlcnJpZGUgKyBcIjsgLS1pbWFnZS1vdmVybGF5LW9wYWNpdHk6IGNhbGMoIFwiICsgdGhpcy5tb2RlbC5vdmVybGF5UGVyY2VudGFnZU92ZXJyaWRlICsgXCIgLyAxMDAgKTtcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwudGV4dENvbG9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGV4dENvbG9yID0gXCJjb2xvcjogXCIgKyB0aGlzLm1vZGVsLnRleHRDb2xvciArIFwiO1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5tb2RlbC50b3BQYWRkaW5nKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGVsLnRvcFBhZGRpbmcgPT09IElTZWN0aW9uQ29tcG9uZW50XzEuU2VjdGlvbkNvbXBvbmVudFRvcFBhZGRpbmcuRXh0cmFQYWRkaW5nKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlY3Rpb25QYWRkaW5nID0gJ3NlY3Rpb24tY29tcG9uZW50LS1wYWR0b3AnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMubW9kZWwudG9wUGFkZGluZyA9PT0gSVNlY3Rpb25Db21wb25lbnRfMS5TZWN0aW9uQ29tcG9uZW50VG9wUGFkZGluZy5Db2xsYXBzZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VjdGlvblBhZGRpbmcgPSAnc2VjdGlvbi1jb21wb25lbnQtLWNvbGxhcHNldG9wJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5tb2RlbC5ib3R0b21QYWRkaW5nKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGVsLmJvdHRvbVBhZGRpbmcgPT09IElTZWN0aW9uQ29tcG9uZW50XzEuU2VjdGlvbkNvbXBvbmVudEJvdHRvbVBhZGRpbmcuRXh0cmFQYWRkaW5nKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlY3Rpb25QYWRkaW5nICs9ICcgc2VjdGlvbi1jb21wb25lbnQtLXBhZGJvdHRvbSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5tb2RlbC5ib3R0b21QYWRkaW5nID09PSBJU2VjdGlvbkNvbXBvbmVudF8xLlNlY3Rpb25Db21wb25lbnRCb3R0b21QYWRkaW5nLkNvbGxhcHNlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWN0aW9uUGFkZGluZyArPSAnIHNlY3Rpb24tY29tcG9uZW50LS1jb2xsYXBzZWJvdHRvbSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgU2VjdGlvbkNvbXBvbmVudC5wcm90b3R5cGUuZ2V0Q29tcG9uZW50c1BlclJvdyA9IGZ1bmN0aW9uICgkaW5kZXgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY29tcG9uZW50c1BlclJvdykge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBsYXN0Q2hhckluZGV4ID0gdGhpcy5jb21wb25lbnRzUGVyUm93Lmxlbmd0aCAtIDE7XHJcbiAgICAgICAgdmFyIGNvbXBvbmVudHNQZXJSb3dBc0ludCA9IHBhcnNlSW50KHRoaXMuY29tcG9uZW50c1BlclJvdy5jaGFyQXQobGFzdENoYXJJbmRleCksIDEwKTtcclxuICAgICAgICB2YXIgY3VycmVudENvbHVtbiA9ICgkaW5kZXggKyAxKSAlIGNvbXBvbmVudHNQZXJSb3dBc0ludCA9PT0gMFxyXG4gICAgICAgICAgICA/IGNvbXBvbmVudHNQZXJSb3dBc0ludFxyXG4gICAgICAgICAgICA6ICgkaW5kZXggKyAxKSAlIGNvbXBvbmVudHNQZXJSb3dBc0ludDtcclxuICAgICAgICByZXR1cm4gXCJzZWN0aW9uLWNvbXBvbmVudF9fY29tcG9uZW50cy1wZXItcm93LS1cIiArIGN1cnJlbnRDb2x1bW4gKyBcIi1vZi1cIiArIGNvbXBvbmVudHNQZXJSb3dBc0ludDtcclxuICAgIH07XHJcbiAgICBTZWN0aW9uQ29tcG9uZW50LnByb3RvdHlwZS5nZXRDb2x1bW5zID0gZnVuY3Rpb24gKGNvbXBvbmVudHNQZXJSb3cpIHtcclxuICAgICAgICBzd2l0Y2ggKGNvbXBvbmVudHNQZXJSb3cpIHtcclxuICAgICAgICAgICAgY2FzZSBJU2VjdGlvbkNvbXBvbmVudF8xLlNlY3Rpb25Db21wb25lbnRzUGVyUm93Lm1vYmlsZTFUYWJsZXQyRGVza3RvcDI6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbC14cy0xMiBjb2wtc20tNic7XHJcbiAgICAgICAgICAgIGNhc2UgSVNlY3Rpb25Db21wb25lbnRfMS5TZWN0aW9uQ29tcG9uZW50c1BlclJvdy5tb2JpbGUxVGFibGV0MURlc2t0b3AzOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdjb2wteHMtMTIgY29sLW1kLTQnO1xyXG4gICAgICAgICAgICBjYXNlIElTZWN0aW9uQ29tcG9uZW50XzEuU2VjdGlvbkNvbXBvbmVudHNQZXJSb3cubW9iaWxlMVRhYmxldDNEZXNrdG9wMzpcclxuICAgICAgICAgICAgICAgIHJldHVybiAnY29sLXhzLTEyIGNvbC1zbS00IGNvbC1tZC00JztcclxuICAgICAgICAgICAgY2FzZSBJU2VjdGlvbkNvbXBvbmVudF8xLlNlY3Rpb25Db21wb25lbnRzUGVyUm93Lm1vYmlsZTFUYWJsZXQyRGVza3RvcDQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbC14cy0xMiBjb2wtc20tNiBjb2wtbWQtMyBjb2wtbGctMyc7XHJcbiAgICAgICAgICAgIGNhc2UgSVNlY3Rpb25Db21wb25lbnRfMS5TZWN0aW9uQ29tcG9uZW50c1BlclJvdy5mdWxsU2NyZWVuOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdzZWN0aW9uLWNvbXBvbmVudF9fZnVsbHNjcmVlbic7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbC14cy0xMic7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIFNlY3Rpb25Db21wb25lbnQucHJvdG90eXBlLmRldGVybWluZUxheW91dFN0eWxlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBjbGFzc05hbWVzID0gJyc7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwuY2FsbFRvQWN0aW9uICYmIHRoaXMubW9kZWwuY2FsbFRvQWN0aW9uLmNhbkRpc3BsYXlBc1RleHRMaW5rKSB7XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZXMgKz0gJ3NlY3Rpb24tY29tcG9uZW50X19jb21wb25lbnRzLS1oYXMtY3RhLWJ1dHRvbic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBkb2VzTm90SGF2ZUV4cGVyaWVuY2VPckV4cGFuZGFibGVDYXJkcyA9IHRoaXMubW9kZWwubmVzdGVkQ29tcG9uZW50cy5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHguY29tcG9uZW50TmFtZSA9PT0gJ2V4cGVyaWVuY2VzLWNhcmQnIHx8IHguY29tcG9uZW50TmFtZSA9PT0gJ2V4cGFuZGFibGUtY2FyZCc7IH0pLmxlbmd0aCA9PT0gMDtcclxuICAgICAgICBpZiAoZG9lc05vdEhhdmVFeHBlcmllbmNlT3JFeHBhbmRhYmxlQ2FyZHMpIHtcclxuICAgICAgICAgICAgY2xhc3NOYW1lcyArPSAnIGNlbnRlci14cyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLnJvd1JldmVyc2UpIHtcclxuICAgICAgICAgICAgY2xhc3NOYW1lcyArPSAnIHNlY3Rpb24tY29tcG9uZW50LS1yb3ctcmV2ZXJzZSc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLnZlcnRpY2FsQWxpZ25tZW50KSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5tb2RlbC52ZXJ0aWNhbEFsaWdubWVudCkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSBJU2VjdGlvbkNvbXBvbmVudF8xLlZlcnRpY2FsQWxpZ25tZW50Lm1pZGRsZTpcclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWVzICs9ICcgbWlkZGxlLXhzJztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgSVNlY3Rpb25Db21wb25lbnRfMS5WZXJ0aWNhbEFsaWdubWVudC5ib3R0b206XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lcyArPSAnIGJvdHRvbS14cyc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZXMgKz0gJyB0b3AteHMnO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjbGFzc05hbWVzO1xyXG4gICAgfTtcclxuICAgIF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuYmluZGFibGUsXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcclxuICAgIF0sIFNlY3Rpb25Db21wb25lbnQucHJvdG90eXBlLCBcIm1vZGVsXCIsIHZvaWQgMCk7XHJcbiAgICBfX2RlY29yYXRlKFtcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLmJpbmRhYmxlLFxyXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBTdHJpbmcpXHJcbiAgICBdLCBTZWN0aW9uQ29tcG9uZW50LnByb3RvdHlwZSwgXCJtb2RpZmllclwiLCB2b2lkIDApO1xyXG4gICAgcmV0dXJuIFNlY3Rpb25Db21wb25lbnQ7XHJcbn0oKSk7XHJcbmV4cG9ydHMuU2VjdGlvbkNvbXBvbmVudCA9IFNlY3Rpb25Db21wb25lbnQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///components/section-component/section-component\n")},"components/section-component/section-component.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<section css.bind=\\"inlineStyles\\" class=\\"section-component ${model.modifier} ${sectionPadding}\\">\\r\\n\\r\\n\\t\\t<div if.bind=\\"model.backgroundImage && model.backgroundImage.hasImage\\" css.bind=\\"overlayStyles\\" class=\\"section-component__background-image-container\\">\\r\\n\\t\\t\\t<responsive-image url.bind=\\"model.backgroundImage.fullPath\\" adjust-height-for-mobile.bind=\\"true\\" containerless>\\r\\n\\t\\t\\t<\/responsive-image>\\r\\n\\t\\t<\/div>\\r\\n\\r\\n\\t\\t<header if.bind=\\"model.headline.length || model.subhead.length || model.body.length\\" class=\\"section-component__container\\" data-aos=\\"${model.animationSettings.animation}\\"\\r\\n\\t\\t data-aos-once=\\"${model.animationSettings.once}\\" data-aos-delay=\\"${model.animationSettings.delay}\\">\\r\\n\\t\\t\\t<h2 if.bind=\\"model.headline.length\\" css.bind=\\"textColor\\" class=\\"section-component__headline row center-xs col-xs-12 col-lg-10\\"\\r\\n\\t\\t\\t innerhtml.bind=\\"model.headline\\"><\/h2>\\r\\n\\t\\t\\t<content-divider model.bind=\\"model.contentDivider\\" containerless><\/content-divider>\\r\\n\\t\\t\\t<div if.bind=\\"model.subhead.length\\" css.bind=\\"textColor\\" class=\\"section-component__subhead ds-subhead col-xs-12 col-sm-8\\"\\r\\n\\t\\t\\t innerhtml.bind=\\"model.subhead\\"><\/div>\\r\\n\\t\\t\\t <div if.bind=\\"model.body.length\\" css.bind=\\"textColor\\" class=\\"section-component__body ds-p-base col-xs-12 col-sm-8\\"\\r\\n\\t\\t\\t innerhtml.bind=\\"model.body\\"><\/div>\\r\\n\\t\\t<\/header>\\r\\n\\r\\n\\t\\t<div if.bind=\\"model && model.nestedComponents.length\\" class=\\"row section-component__components ${determineLayoutStyle()}\\">\\r\\n\\t\\t\\t<div repeat.for=\\"component of model.nestedComponents\\" class=\\"${getComponentsPerRow($index)} ${columns}\\">\\r\\n\\t\\t\\t\\t<compose containerless model.bind=\\"component\\" view-model=\\"../${component.componentName}/${component.componentName}\\">\\r\\n\\t\\t\\t\\t<\/compose>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t<\/div>\\r\\n\\t\\t<div if.bind=\\"model.callToAction.canDisplayAsTextLink\\" class=\\"row center-xs\\">\\r\\n\\t\\t\\t<div class=\\"col-xs-12\\">\\r\\n\\t\\t\\t\\t<a if.bind=\\"isRegistrationCTA\\" class=\\"section-component__call-to-action ds-btn-primary btn-register\\">${model.callToAction.linkTitle}<\/a>\\r\\n\\t\\t\\t\\t<a if.bind=\\"!isRegistrationCTA\\" class=\\"section-component__call-to-action ds-btn-primary\\" href=\\"${model.callToAction.url}\\" target=\\"${model.callToAction.newWindow ? \'_blank\' : \'_self\'}\\">${model.callToAction.linkTitle}<\/a>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t<\/div>\\r\\n\\r\\n\\t<\/section>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9zZWN0aW9uLWNvbXBvbmVudC9zZWN0aW9uLWNvbXBvbmVudC5odG1sPzhkMWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUdBQWlHLGVBQWUsR0FBRyxlQUFlLDBlQUEwZSxrQ0FBa0MsNkJBQTZCLDZCQUE2QixzQkFBc0IsOEJBQThCLGd4QkFBZ3hCLHVCQUF1QiwrRUFBK0UsNEJBQTRCLEdBQUcsUUFBUSxpRkFBaUYsd0JBQXdCLEdBQUcsd0JBQXdCLDBTQUEwUyw2QkFBNkIsc0hBQXNILHVCQUF1QixjQUFjLGtEQUFrRCxLQUFLLDZCQUE2QiIsImZpbGUiOiJjb21wb25lbnRzL3NlY3Rpb24tY29tcG9uZW50L3NlY3Rpb24tY29tcG9uZW50Lmh0bWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IFwiPHRlbXBsYXRlPlxcclxcblxcdDxzZWN0aW9uIGNzcy5iaW5kPVxcXCJpbmxpbmVTdHlsZXNcXFwiIGNsYXNzPVxcXCJzZWN0aW9uLWNvbXBvbmVudCAke21vZGVsLm1vZGlmaWVyfSAke3NlY3Rpb25QYWRkaW5nfVxcXCI+XFxyXFxuXFxyXFxuXFx0XFx0PGRpdiBpZi5iaW5kPVxcXCJtb2RlbC5iYWNrZ3JvdW5kSW1hZ2UgJiYgbW9kZWwuYmFja2dyb3VuZEltYWdlLmhhc0ltYWdlXFxcIiBjc3MuYmluZD1cXFwib3ZlcmxheVN0eWxlc1xcXCIgY2xhc3M9XFxcInNlY3Rpb24tY29tcG9uZW50X19iYWNrZ3JvdW5kLWltYWdlLWNvbnRhaW5lclxcXCI+XFxyXFxuXFx0XFx0XFx0PHJlc3BvbnNpdmUtaW1hZ2UgdXJsLmJpbmQ9XFxcIm1vZGVsLmJhY2tncm91bmRJbWFnZS5mdWxsUGF0aFxcXCIgYWRqdXN0LWhlaWdodC1mb3ItbW9iaWxlLmJpbmQ9XFxcInRydWVcXFwiIGNvbnRhaW5lcmxlc3M+XFxyXFxuXFx0XFx0XFx0PC9yZXNwb25zaXZlLWltYWdlPlxcclxcblxcdFxcdDwvZGl2PlxcclxcblxcclxcblxcdFxcdDxoZWFkZXIgaWYuYmluZD1cXFwibW9kZWwuaGVhZGxpbmUubGVuZ3RoIHx8IG1vZGVsLnN1YmhlYWQubGVuZ3RoIHx8IG1vZGVsLmJvZHkubGVuZ3RoXFxcIiBjbGFzcz1cXFwic2VjdGlvbi1jb21wb25lbnRfX2NvbnRhaW5lclxcXCIgZGF0YS1hb3M9XFxcIiR7bW9kZWwuYW5pbWF0aW9uU2V0dGluZ3MuYW5pbWF0aW9ufVxcXCJcXHJcXG5cXHRcXHQgZGF0YS1hb3Mtb25jZT1cXFwiJHttb2RlbC5hbmltYXRpb25TZXR0aW5ncy5vbmNlfVxcXCIgZGF0YS1hb3MtZGVsYXk9XFxcIiR7bW9kZWwuYW5pbWF0aW9uU2V0dGluZ3MuZGVsYXl9XFxcIj5cXHJcXG5cXHRcXHRcXHQ8aDIgaWYuYmluZD1cXFwibW9kZWwuaGVhZGxpbmUubGVuZ3RoXFxcIiBjc3MuYmluZD1cXFwidGV4dENvbG9yXFxcIiBjbGFzcz1cXFwic2VjdGlvbi1jb21wb25lbnRfX2hlYWRsaW5lIHJvdyBjZW50ZXIteHMgY29sLXhzLTEyIGNvbC1sZy0xMFxcXCJcXHJcXG5cXHRcXHRcXHQgaW5uZXJodG1sLmJpbmQ9XFxcIm1vZGVsLmhlYWRsaW5lXFxcIj48L2gyPlxcclxcblxcdFxcdFxcdDxjb250ZW50LWRpdmlkZXIgbW9kZWwuYmluZD1cXFwibW9kZWwuY29udGVudERpdmlkZXJcXFwiIGNvbnRhaW5lcmxlc3M+PC9jb250ZW50LWRpdmlkZXI+XFxyXFxuXFx0XFx0XFx0PGRpdiBpZi5iaW5kPVxcXCJtb2RlbC5zdWJoZWFkLmxlbmd0aFxcXCIgY3NzLmJpbmQ9XFxcInRleHRDb2xvclxcXCIgY2xhc3M9XFxcInNlY3Rpb24tY29tcG9uZW50X19zdWJoZWFkIGRzLXN1YmhlYWQgY29sLXhzLTEyIGNvbC1zbS04XFxcIlxcclxcblxcdFxcdFxcdCBpbm5lcmh0bWwuYmluZD1cXFwibW9kZWwuc3ViaGVhZFxcXCI+PC9kaXY+XFxyXFxuXFx0XFx0XFx0IDxkaXYgaWYuYmluZD1cXFwibW9kZWwuYm9keS5sZW5ndGhcXFwiIGNzcy5iaW5kPVxcXCJ0ZXh0Q29sb3JcXFwiIGNsYXNzPVxcXCJzZWN0aW9uLWNvbXBvbmVudF9fYm9keSBkcy1wLWJhc2UgY29sLXhzLTEyIGNvbC1zbS04XFxcIlxcclxcblxcdFxcdFxcdCBpbm5lcmh0bWwuYmluZD1cXFwibW9kZWwuYm9keVxcXCI+PC9kaXY+XFxyXFxuXFx0XFx0PC9oZWFkZXI+XFxyXFxuXFxyXFxuXFx0XFx0PGRpdiBpZi5iaW5kPVxcXCJtb2RlbCAmJiBtb2RlbC5uZXN0ZWRDb21wb25lbnRzLmxlbmd0aFxcXCIgY2xhc3M9XFxcInJvdyBzZWN0aW9uLWNvbXBvbmVudF9fY29tcG9uZW50cyAke2RldGVybWluZUxheW91dFN0eWxlKCl9XFxcIj5cXHJcXG5cXHRcXHRcXHQ8ZGl2IHJlcGVhdC5mb3I9XFxcImNvbXBvbmVudCBvZiBtb2RlbC5uZXN0ZWRDb21wb25lbnRzXFxcIiBjbGFzcz1cXFwiJHtnZXRDb21wb25lbnRzUGVyUm93KCRpbmRleCl9ICR7Y29sdW1uc31cXFwiPlxcclxcblxcdFxcdFxcdFxcdDxjb21wb3NlIGNvbnRhaW5lcmxlc3MgbW9kZWwuYmluZD1cXFwiY29tcG9uZW50XFxcIiB2aWV3LW1vZGVsPVxcXCIuLi8ke2NvbXBvbmVudC5jb21wb25lbnROYW1lfS8ke2NvbXBvbmVudC5jb21wb25lbnROYW1lfVxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0PC9jb21wb3NlPlxcclxcblxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdDwvZGl2PlxcclxcblxcdFxcdDxkaXYgaWYuYmluZD1cXFwibW9kZWwuY2FsbFRvQWN0aW9uLmNhbkRpc3BsYXlBc1RleHRMaW5rXFxcIiBjbGFzcz1cXFwicm93IGNlbnRlci14c1xcXCI+XFxyXFxuXFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHQ8YSBpZi5iaW5kPVxcXCJpc1JlZ2lzdHJhdGlvbkNUQVxcXCIgY2xhc3M9XFxcInNlY3Rpb24tY29tcG9uZW50X19jYWxsLXRvLWFjdGlvbiBkcy1idG4tcHJpbWFyeSBidG4tcmVnaXN0ZXJcXFwiPiR7bW9kZWwuY2FsbFRvQWN0aW9uLmxpbmtUaXRsZX08L2E+XFxyXFxuXFx0XFx0XFx0XFx0PGEgaWYuYmluZD1cXFwiIWlzUmVnaXN0cmF0aW9uQ1RBXFxcIiBjbGFzcz1cXFwic2VjdGlvbi1jb21wb25lbnRfX2NhbGwtdG8tYWN0aW9uIGRzLWJ0bi1wcmltYXJ5XFxcIiBocmVmPVxcXCIke21vZGVsLmNhbGxUb0FjdGlvbi51cmx9XFxcIiB0YXJnZXQ9XFxcIiR7bW9kZWwuY2FsbFRvQWN0aW9uLm5ld1dpbmRvdyA/ICdfYmxhbmsnIDogJ19zZWxmJ31cXFwiPiR7bW9kZWwuY2FsbFRvQWN0aW9uLmxpbmtUaXRsZX08L2E+XFxyXFxuXFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0PC9kaXY+XFxyXFxuXFxyXFxuXFx0PC9zZWN0aW9uPlxcclxcbjwvdGVtcGxhdGU+XFxyXFxuXCI7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/section-component/section-component.html\n')},"components/select-menu/select-menu":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar SelectMenuItem_1 = __webpack_require__(13);\r\nvar SelectMenu = /** @class */ (function () {\r\n    function SelectMenu() {\r\n        this.description = \'\';\r\n        this.iconClass = \'\';\r\n    }\r\n    SelectMenu.prototype.select = function (selectedItem) {\r\n        var _this = this;\r\n        if (selectedItem.isDisabled) {\r\n            return false;\r\n        }\r\n        this.selectedItem = selectedItem;\r\n        this.isOpen = false;\r\n        if (this.onChange) {\r\n            setTimeout(function () {\r\n                _this.onChange(_this.selectedItem);\r\n            }, 10);\r\n        }\r\n    };\r\n    SelectMenu.prototype.toggleOpen = function () {\r\n        if (this.onOpen) {\r\n            this.onOpen();\r\n        }\r\n        this.isOpen ? this.close() : this.open();\r\n    };\r\n    SelectMenu.prototype.open = function () {\r\n        var _this = this;\r\n        if (!this.isDisabled) {\r\n            this.isOpen = true;\r\n            $(this.selectMenuElement).on(\'clickoutside touchstartoutside\', function (event) { return _this.close(); });\r\n        }\r\n    };\r\n    SelectMenu.prototype.close = function () {\r\n        this.isOpen = false;\r\n        $(this.selectMenuElement).off(\'clickoutside touchstartoutside\');\r\n    };\r\n    SelectMenu.prototype.reset = function () {\r\n        this.selectedItem = null;\r\n    };\r\n    Object.defineProperty(SelectMenu.prototype, "modifier", {\r\n        get: function () {\r\n            var modifiers = [];\r\n            if (this.isOpen) {\r\n                modifiers.push(\'select-menu--is-open\');\r\n            }\r\n            if (this.isDisabled) {\r\n                modifiers.push(\'select-menu--is-disabled\');\r\n            }\r\n            return modifiers.join(\' \');\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    SelectMenu.prototype.getItemModifier = function (item) {\r\n        return item.isDisabled ? \'select-menu__item--is-disabled\' : \'\';\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", String)\r\n    ], SelectMenu.prototype, "description", void 0);\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Boolean)\r\n    ], SelectMenu.prototype, "isDisabled", void 0);\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Array)\r\n    ], SelectMenu.prototype, "items", void 0);\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Function)\r\n    ], SelectMenu.prototype, "onChange", void 0);\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", SelectMenuItem_1.SelectMenuItem)\r\n    ], SelectMenu.prototype, "selectedItem", void 0);\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", String)\r\n    ], SelectMenu.prototype, "selectMenuId", void 0);\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", String)\r\n    ], SelectMenu.prototype, "iconClass", void 0);\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Function)\r\n    ], SelectMenu.prototype, "onOpen", void 0);\r\n    __decorate([\r\n        aurelia_framework_1.computedFrom(\'isOpen\', \'isDisabled\'),\r\n        __metadata("design:type", Object),\r\n        __metadata("design:paramtypes", [])\r\n    ], SelectMenu.prototype, "modifier", null);\r\n    SelectMenu = __decorate([\r\n        aurelia_framework_1.containerless\r\n    ], SelectMenu);\r\n    return SelectMenu;\r\n}());\r\nexports.SelectMenu = SelectMenu;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9zZWxlY3QtbWVudS9zZWxlY3QtbWVudS50cz8yOGIyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLFFBQVE7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxjQUFjO0FBQzVELDBCQUEwQixtQkFBTyxDQUFDLG1CQUFtQjtBQUNyRCx1QkFBdUIsbUJBQU8sQ0FBQyxFQUFrQjtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkZBQTZGLHNCQUFzQixFQUFFO0FBQ3JIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCIsImZpbGUiOiJjb21wb25lbnRzL3NlbGVjdC1tZW51L3NlbGVjdC1tZW51LmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2RlY29yYXRlID0gKHRoaXMgJiYgdGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn07XHJcbnZhciBfX21ldGFkYXRhID0gKHRoaXMgJiYgdGhpcy5fX21ldGFkYXRhKSB8fCBmdW5jdGlvbiAoaywgdikge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xyXG59O1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBhdXJlbGlhX2ZyYW1ld29ya18xID0gcmVxdWlyZShcImF1cmVsaWEtZnJhbWV3b3JrXCIpO1xyXG52YXIgU2VsZWN0TWVudUl0ZW1fMSA9IHJlcXVpcmUoXCIuL1NlbGVjdE1lbnVJdGVtXCIpO1xyXG52YXIgU2VsZWN0TWVudSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIFNlbGVjdE1lbnUoKSB7XHJcbiAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9ICcnO1xyXG4gICAgICAgIHRoaXMuaWNvbkNsYXNzID0gJyc7XHJcbiAgICB9XHJcbiAgICBTZWxlY3RNZW51LnByb3RvdHlwZS5zZWxlY3QgPSBmdW5jdGlvbiAoc2VsZWN0ZWRJdGVtKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtLmlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IHNlbGVjdGVkSXRlbTtcclxuICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLm9uQ2hhbmdlKSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMub25DaGFuZ2UoX3RoaXMuc2VsZWN0ZWRJdGVtKTtcclxuICAgICAgICAgICAgfSwgMTApO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBTZWxlY3RNZW51LnByb3RvdHlwZS50b2dnbGVPcGVuID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLm9uT3Blbikge1xyXG4gICAgICAgICAgICB0aGlzLm9uT3BlbigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzT3BlbiA/IHRoaXMuY2xvc2UoKSA6IHRoaXMub3BlbigpO1xyXG4gICAgfTtcclxuICAgIFNlbGVjdE1lbnUucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICBpZiAoIXRoaXMuaXNEaXNhYmxlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmlzT3BlbiA9IHRydWU7XHJcbiAgICAgICAgICAgICQodGhpcy5zZWxlY3RNZW51RWxlbWVudCkub24oJ2NsaWNrb3V0c2lkZSB0b3VjaHN0YXJ0b3V0c2lkZScsIGZ1bmN0aW9uIChldmVudCkgeyByZXR1cm4gX3RoaXMuY2xvc2UoKTsgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIFNlbGVjdE1lbnUucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XHJcbiAgICAgICAgJCh0aGlzLnNlbGVjdE1lbnVFbGVtZW50KS5vZmYoJ2NsaWNrb3V0c2lkZSB0b3VjaHN0YXJ0b3V0c2lkZScpO1xyXG4gICAgfTtcclxuICAgIFNlbGVjdE1lbnUucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gbnVsbDtcclxuICAgIH07XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2VsZWN0TWVudS5wcm90b3R5cGUsIFwibW9kaWZpZXJcIiwge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgbW9kaWZpZXJzID0gW107XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xyXG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goJ3NlbGVjdC1tZW51LS1pcy1vcGVuJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNEaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goJ3NlbGVjdC1tZW51LS1pcy1kaXNhYmxlZCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBtb2RpZmllcnMuam9pbignICcpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgIH0pO1xyXG4gICAgU2VsZWN0TWVudS5wcm90b3R5cGUuZ2V0SXRlbU1vZGlmaWVyID0gZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICByZXR1cm4gaXRlbS5pc0Rpc2FibGVkID8gJ3NlbGVjdC1tZW51X19pdGVtLS1pcy1kaXNhYmxlZCcgOiAnJztcclxuICAgIH07XHJcbiAgICBfX2RlY29yYXRlKFtcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLmJpbmRhYmxlLFxyXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBTdHJpbmcpXHJcbiAgICBdLCBTZWxlY3RNZW51LnByb3RvdHlwZSwgXCJkZXNjcmlwdGlvblwiLCB2b2lkIDApO1xyXG4gICAgX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5iaW5kYWJsZSxcclxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgQm9vbGVhbilcclxuICAgIF0sIFNlbGVjdE1lbnUucHJvdG90eXBlLCBcImlzRGlzYWJsZWRcIiwgdm9pZCAwKTtcclxuICAgIF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuYmluZGFibGUsXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEFycmF5KVxyXG4gICAgXSwgU2VsZWN0TWVudS5wcm90b3R5cGUsIFwiaXRlbXNcIiwgdm9pZCAwKTtcclxuICAgIF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuYmluZGFibGUsXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEZ1bmN0aW9uKVxyXG4gICAgXSwgU2VsZWN0TWVudS5wcm90b3R5cGUsIFwib25DaGFuZ2VcIiwgdm9pZCAwKTtcclxuICAgIF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuYmluZGFibGUsXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0pXHJcbiAgICBdLCBTZWxlY3RNZW51LnByb3RvdHlwZSwgXCJzZWxlY3RlZEl0ZW1cIiwgdm9pZCAwKTtcclxuICAgIF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuYmluZGFibGUsXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIFN0cmluZylcclxuICAgIF0sIFNlbGVjdE1lbnUucHJvdG90eXBlLCBcInNlbGVjdE1lbnVJZFwiLCB2b2lkIDApO1xyXG4gICAgX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5iaW5kYWJsZSxcclxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgU3RyaW5nKVxyXG4gICAgXSwgU2VsZWN0TWVudS5wcm90b3R5cGUsIFwiaWNvbkNsYXNzXCIsIHZvaWQgMCk7XHJcbiAgICBfX2RlY29yYXRlKFtcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLmJpbmRhYmxlLFxyXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBGdW5jdGlvbilcclxuICAgIF0sIFNlbGVjdE1lbnUucHJvdG90eXBlLCBcIm9uT3BlblwiLCB2b2lkIDApO1xyXG4gICAgX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5jb21wdXRlZEZyb20oJ2lzT3BlbicsICdpc0Rpc2FibGVkJyksXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdCksXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtdKVxyXG4gICAgXSwgU2VsZWN0TWVudS5wcm90b3R5cGUsIFwibW9kaWZpZXJcIiwgbnVsbCk7XHJcbiAgICBTZWxlY3RNZW51ID0gX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5jb250YWluZXJsZXNzXHJcbiAgICBdLCBTZWxlY3RNZW51KTtcclxuICAgIHJldHVybiBTZWxlY3RNZW51O1xyXG59KCkpO1xyXG5leHBvcnRzLlNlbGVjdE1lbnUgPSBTZWxlY3RNZW51O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///components/select-menu/select-menu\n')},"components/select-menu/select-menu.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<div class=\\"select-menu ${modifier} ${iconClass ? \'select-menu--has-icon \' : \'\'}\\" ref=\\"selectMenuElement\\">\\r\\n\\r\\n\\t\\t<button class=\\"select-menu__button\\" click.delegate=\\"toggleOpen()\\">\\r\\n\\t\\t\\t<span if.bind=\\"iconClass.length\\" class=\\"select-menu__icon ${iconClass}\\"><\/span>\\r\\n\\t\\t\\t<span class=\\"select-menu__description\\">${selectedItem && selectedItem.name ? selectedItem.name : description}<\/span>\\r\\n\\t\\t<\/button>\\r\\n\\r\\n\\t\\t<ul show.bind=\\"isOpen\\" class=\\"select-menu__items\\">\\r\\n\\t\\t\\t<li repeat.for=\\"item of items\\" click.delegate=\\"$parent.select(item)\\" class=\\"select-menu__item ${getItemModifier(item)} ${item.name === selectedItem.name ? \'select-menu__item--is-selected\' : \'\'}\\">\\r\\n\\t\\t\\t\\t${item.name}\\r\\n\\t\\t\\t<\/li>\\r\\n\\t\\t<\/ul>\\r\\n\\t<\/div>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9zZWxlY3QtbWVudS9zZWxlY3QtbWVudS5odG1sPzVlOGYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNkRBQTZELFNBQVMsR0FBRywwQ0FBMEMsd0xBQXdMLFVBQVUsK0RBQStELG9FQUFvRSx5TUFBeU0sc0JBQXNCLEdBQUcsd0VBQXdFLGlCQUFpQixVQUFVIiwiZmlsZSI6ImNvbXBvbmVudHMvc2VsZWN0LW1lbnUvc2VsZWN0LW1lbnUuaHRtbC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gXCI8dGVtcGxhdGU+XFxyXFxuXFx0PGRpdiBjbGFzcz1cXFwic2VsZWN0LW1lbnUgJHttb2RpZmllcn0gJHtpY29uQ2xhc3MgPyAnc2VsZWN0LW1lbnUtLWhhcy1pY29uICcgOiAnJ31cXFwiIHJlZj1cXFwic2VsZWN0TWVudUVsZW1lbnRcXFwiPlxcclxcblxcclxcblxcdFxcdDxidXR0b24gY2xhc3M9XFxcInNlbGVjdC1tZW51X19idXR0b25cXFwiIGNsaWNrLmRlbGVnYXRlPVxcXCJ0b2dnbGVPcGVuKClcXFwiPlxcclxcblxcdFxcdFxcdDxzcGFuIGlmLmJpbmQ9XFxcImljb25DbGFzcy5sZW5ndGhcXFwiIGNsYXNzPVxcXCJzZWxlY3QtbWVudV9faWNvbiAke2ljb25DbGFzc31cXFwiPjwvc3Bhbj5cXHJcXG5cXHRcXHRcXHQ8c3BhbiBjbGFzcz1cXFwic2VsZWN0LW1lbnVfX2Rlc2NyaXB0aW9uXFxcIj4ke3NlbGVjdGVkSXRlbSAmJiBzZWxlY3RlZEl0ZW0ubmFtZSA/IHNlbGVjdGVkSXRlbS5uYW1lIDogZGVzY3JpcHRpb259PC9zcGFuPlxcclxcblxcdFxcdDwvYnV0dG9uPlxcclxcblxcclxcblxcdFxcdDx1bCBzaG93LmJpbmQ9XFxcImlzT3BlblxcXCIgY2xhc3M9XFxcInNlbGVjdC1tZW51X19pdGVtc1xcXCI+XFxyXFxuXFx0XFx0XFx0PGxpIHJlcGVhdC5mb3I9XFxcIml0ZW0gb2YgaXRlbXNcXFwiIGNsaWNrLmRlbGVnYXRlPVxcXCIkcGFyZW50LnNlbGVjdChpdGVtKVxcXCIgY2xhc3M9XFxcInNlbGVjdC1tZW51X19pdGVtICR7Z2V0SXRlbU1vZGlmaWVyKGl0ZW0pfSAke2l0ZW0ubmFtZSA9PT0gc2VsZWN0ZWRJdGVtLm5hbWUgPyAnc2VsZWN0LW1lbnVfX2l0ZW0tLWlzLXNlbGVjdGVkJyA6ICcnfVxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0JHtpdGVtLm5hbWV9XFxyXFxuXFx0XFx0XFx0PC9saT5cXHJcXG5cXHRcXHQ8L3VsPlxcclxcblxcdDwvZGl2PlxcclxcbjwvdGVtcGxhdGU+XFxyXFxuXCI7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/select-menu/select-menu.html\n')},"components/static-content-page/static-content-page":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar ImageViewModel_1 = __webpack_require__(171);\r\nvar StaticContentPage = /** @class */ (function () {\r\n    function StaticContentPage() {\r\n        this.backgroundImg = [\r\n            ImageViewModel_1.createImageViewModel("media/9437299/subinsp-launch_webhero-1.jpg"),\r\n        ];\r\n        this.imageWidths = [2560, 1920, 1600, 1280];\r\n    }\r\n    StaticContentPage.prototype.calculateSrcSet = function (width, imageUrl) {\r\n        var imgUrl = "//cms.inspirato.com/ImageGen.ashx?image=" + imageUrl + "&compression=100&width=" + width + "&align=center " + width + "w";\r\n        return imgUrl;\r\n    };\r\n    StaticContentPage.prototype.activate = function (model) {\r\n        this.model = model;\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Object)\r\n    ], StaticContentPage.prototype, "model", void 0);\r\n    return StaticContentPage;\r\n}());\r\nexports.StaticContentPage = StaticContentPage;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9zdGF0aWMtY29udGVudC1wYWdlL3N0YXRpYy1jb250ZW50LXBhZ2UudHM/M2YyZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxRQUFRO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RCwwQkFBMEIsbUJBQU8sQ0FBQyxtQkFBbUI7QUFDckQsdUJBQXVCLG1CQUFPLENBQUMsR0FBbUM7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QiLCJmaWxlIjoiY29tcG9uZW50cy9zdGF0aWMtY29udGVudC1wYWdlL3N0YXRpYy1jb250ZW50LXBhZ2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxudmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufTtcclxudmFyIF9fbWV0YWRhdGEgPSAodGhpcyAmJiB0aGlzLl9fbWV0YWRhdGEpIHx8IGZ1bmN0aW9uIChrLCB2KSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEoaywgdik7XHJcbn07XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIGF1cmVsaWFfZnJhbWV3b3JrXzEgPSByZXF1aXJlKFwiYXVyZWxpYS1mcmFtZXdvcmtcIik7XHJcbnZhciBJbWFnZVZpZXdNb2RlbF8xID0gcmVxdWlyZShcIi4vLi4vLi4vaW50ZXJmYWNlcy9JbWFnZVZpZXdNb2RlbFwiKTtcclxudmFyIFN0YXRpY0NvbnRlbnRQYWdlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gU3RhdGljQ29udGVudFBhZ2UoKSB7XHJcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kSW1nID0gW1xyXG4gICAgICAgICAgICBJbWFnZVZpZXdNb2RlbF8xLmNyZWF0ZUltYWdlVmlld01vZGVsKFwibWVkaWEvOTQzNzI5OS9zdWJpbnNwLWxhdW5jaF93ZWJoZXJvLTEuanBnXCIpLFxyXG4gICAgICAgIF07XHJcbiAgICAgICAgdGhpcy5pbWFnZVdpZHRocyA9IFsyNTYwLCAxOTIwLCAxNjAwLCAxMjgwXTtcclxuICAgIH1cclxuICAgIFN0YXRpY0NvbnRlbnRQYWdlLnByb3RvdHlwZS5jYWxjdWxhdGVTcmNTZXQgPSBmdW5jdGlvbiAod2lkdGgsIGltYWdlVXJsKSB7XHJcbiAgICAgICAgdmFyIGltZ1VybCA9IFwiLy9jbXMuaW5zcGlyYXRvLmNvbS9JbWFnZUdlbi5hc2h4P2ltYWdlPVwiICsgaW1hZ2VVcmwgKyBcIiZjb21wcmVzc2lvbj0xMDAmd2lkdGg9XCIgKyB3aWR0aCArIFwiJmFsaWduPWNlbnRlciBcIiArIHdpZHRoICsgXCJ3XCI7XHJcbiAgICAgICAgcmV0dXJuIGltZ1VybDtcclxuICAgIH07XHJcbiAgICBTdGF0aWNDb250ZW50UGFnZS5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbiAobW9kZWwpIHtcclxuICAgICAgICB0aGlzLm1vZGVsID0gbW9kZWw7XHJcbiAgICB9O1xyXG4gICAgX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5iaW5kYWJsZSxcclxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxyXG4gICAgXSwgU3RhdGljQ29udGVudFBhZ2UucHJvdG90eXBlLCBcIm1vZGVsXCIsIHZvaWQgMCk7XHJcbiAgICByZXR1cm4gU3RhdGljQ29udGVudFBhZ2U7XHJcbn0oKSk7XHJcbmV4cG9ydHMuU3RhdGljQ29udGVudFBhZ2UgPSBTdGF0aWNDb250ZW50UGFnZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/static-content-page/static-content-page\n')},"components/static-content-page/static-content-page.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<div class=\\"static-content-page\\">\\r\\n\\t\\t<div class=\\"static-content-page__section static-content-page__section--is-comparison\\">\\r\\n\\t\\t\\t<div class=\\"static-content-page__image-container\\">\\r\\n\\t\\t\\t\\t<picture class=\\"static-content-page__background-image-picture\\">\\r\\n\\t\\t\\t\\t\\t<source repeat.for=\\"width of imageWidths\\" media=\\"(min-width: ${width}px)\\" srcset=\\"${calculateSrcSet(width, backgroundImg[0].basePath)}\\" />\\r\\n\\t\\t\\t\\t\\t<img class=\\"static-content-page__background-image\\" src=\\"${backgroundImg[0].fullPath}&compression=100&width=768\\" />\\r\\n\\t\\t\\t\\t<\/picture>\\r\\n\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t<div class=\\"static-content-page__wrap static-content-page__container-fluid\\">\\r\\n\\t\\t\\t\\t<div class=\\"row center-xs\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\"col-xs-12 col-sm-10 col-md-7\\">\\r\\n\\t\\t\\t\\t\\t\\t<h2 class=\\"static-content-page__section-header ds-headline-large\\">Choose the&nbsp;subscription<br />that is&nbsp;right for&nbsp;you<\/h2>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t<div class=\\"row center-xs\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\"col-xs-12 col-sm-6 comparison-card__container\\" data-aos=\\"fade-up\\" data-aos-easing=\\"ease-out-sine\\" data-aos-once=\\"true\\" data-aos-delay=\\"200\\" data-aos-duration=\\"600\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\"comparison-card comparison-card--is-left\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<h3 class=\\"comparison-card__header\\">Inspirato Club<\/h3>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\"comparison-card__price\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\"comparison-card__currency\\">$<\/span><span class=\\"comparison-card__value\\">600<\/span><span class=\\"comparison-card__time\\"><span class=\\"comparison-card__dash\\">/<\/span><span class=\\"comparison-card__month\\">month<\/span><\/span>\\r\\n\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\"comparison-card__content-container\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\"row comparison-card__list\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\"col-xs-12\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<ul>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<li>Pay nightly rates as you&nbsp;travel<\/li>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<li>Choose your specific destinations, accommodations, and&nbsp;dates from the full Inspirato Collection of&nbsp;homes, hotels, and&nbsp;experiences<\/li>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<li>Access to incredible value with Jaunt, featuring weekly&nbsp;discounts<\/li>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<li>No long-term commitment; cancel&nbsp;at&nbsp;any&nbsp;time<\/li>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<\/ul>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<a class=\\"comparison-card__call-to-action ds-btn-secondary\\" href=\\"/the-club/\\">Learn more<\/a>\\r\\n\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t\\t\\t<div class=\\"col-xs-12 col-sm-6 comparison-card__container\\" data-aos=\\"fade-up\\" data-aos-easing=\\"ease-out-sine\\" data-aos-once=\\"true\\" data-aos-delay=\\"200\\" data-aos-duration=\\"600\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\"comparison-card comparison-card--is-right\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<h3 class=\\"comparison-card__header\\">Inspirato Pass<\/h3>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\"comparison-card__price\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\"comparison-card__currency\\">$<\/span><span class=\\"comparison-card__value\\">2<span class=\\"comparison-card__value--comma\\">,<\/span>500<\/span><span class=\\"comparison-card__time\\"><span class=\\"comparison-card__dash\\">/<\/span><span class=\\"comparison-card__month\\">month<\/span><\/span>\\r\\n\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\"comparison-card__content-container\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\"row comparison-card__list\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\"col-xs-12\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<ul>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<li>No nightly rates, taxes, or&nbsp;fees<\/li>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<li>Choose your vacations from a list of thousands of trips&mdash;updated daily&mdash;in&nbsp;our&nbsp;homes, hotels, and&nbsp;experiences<\/li>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<li>Includes membership in the Inspirato&nbsp;Club&nbsp;too<\/li>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<li>No long-term commitment; cancel&nbsp;at&nbsp;any&nbsp;time<\/li>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<\/ul>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<a class=\\"comparison-card__call-to-action ds-btn-secondary\\" href=\\"/pass/overview/\\">Learn more<\/a>\\r\\n\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t<\/div>\\r\\n\\t<\/div>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9zdGF0aWMtY29udGVudC1wYWdlL3N0YXRpYy1jb250ZW50LXBhZ2UuaHRtbD80OTdmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGdZQUFnWSxNQUFNLGlCQUFpQixrREFBa0QsZ0ZBQWdGLDBCQUEwQix3V0FBd1csK0JBQStCLGVBQWUsaWhDQUFpaEMscUdBQXFHLGlEQUFpRCx3QkFBd0IsMkdBQTJHLG9FQUFvRSxhQUFhLFFBQVEsU0FBUyx5d0NBQXl3QyxxR0FBcUcsb0JBQW9CLFFBQVEsU0FBUyx3QkFBd0Isd0ZBQXdGLFVBQVUsOERBQThELGFBQWEsUUFBUSxTQUFTIiwiZmlsZSI6ImNvbXBvbmVudHMvc3RhdGljLWNvbnRlbnQtcGFnZS9zdGF0aWMtY29udGVudC1wYWdlLmh0bWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IFwiPHRlbXBsYXRlPlxcclxcblxcdDxkaXYgY2xhc3M9XFxcInN0YXRpYy1jb250ZW50LXBhZ2VcXFwiPlxcclxcblxcdFxcdDxkaXYgY2xhc3M9XFxcInN0YXRpYy1jb250ZW50LXBhZ2VfX3NlY3Rpb24gc3RhdGljLWNvbnRlbnQtcGFnZV9fc2VjdGlvbi0taXMtY29tcGFyaXNvblxcXCI+XFxyXFxuXFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwic3RhdGljLWNvbnRlbnQtcGFnZV9faW1hZ2UtY29udGFpbmVyXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHQ8cGljdHVyZSBjbGFzcz1cXFwic3RhdGljLWNvbnRlbnQtcGFnZV9fYmFja2dyb3VuZC1pbWFnZS1waWN0dXJlXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8c291cmNlIHJlcGVhdC5mb3I9XFxcIndpZHRoIG9mIGltYWdlV2lkdGhzXFxcIiBtZWRpYT1cXFwiKG1pbi13aWR0aDogJHt3aWR0aH1weClcXFwiIHNyY3NldD1cXFwiJHtjYWxjdWxhdGVTcmNTZXQod2lkdGgsIGJhY2tncm91bmRJbWdbMF0uYmFzZVBhdGgpfVxcXCIgLz5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8aW1nIGNsYXNzPVxcXCJzdGF0aWMtY29udGVudC1wYWdlX19iYWNrZ3JvdW5kLWltYWdlXFxcIiBzcmM9XFxcIiR7YmFja2dyb3VuZEltZ1swXS5mdWxsUGF0aH0mY29tcHJlc3Npb249MTAwJndpZHRoPTc2OFxcXCIgLz5cXHJcXG5cXHRcXHRcXHRcXHQ8L3BpY3R1cmU+XFxyXFxuXFx0XFx0XFx0PC9kaXY+XFxyXFxuXFxyXFxuXFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwic3RhdGljLWNvbnRlbnQtcGFnZV9fd3JhcCBzdGF0aWMtY29udGVudC1wYWdlX19jb250YWluZXItZmx1aWRcXFwiPlxcclxcblxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcInJvdyBjZW50ZXIteHNcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtc20tMTAgY29sLW1kLTdcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxoMiBjbGFzcz1cXFwic3RhdGljLWNvbnRlbnQtcGFnZV9fc2VjdGlvbi1oZWFkZXIgZHMtaGVhZGxpbmUtbGFyZ2VcXFwiPkNob29zZSB0aGUmbmJzcDtzdWJzY3JpcHRpb248YnIgLz50aGF0IGlzJm5ic3A7cmlnaHQgZm9yJm5ic3A7eW91PC9oMj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJyb3cgY2VudGVyLXhzXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgY29sLXNtLTYgY29tcGFyaXNvbi1jYXJkX19jb250YWluZXJcXFwiIGRhdGEtYW9zPVxcXCJmYWRlLXVwXFxcIiBkYXRhLWFvcy1lYXNpbmc9XFxcImVhc2Utb3V0LXNpbmVcXFwiIGRhdGEtYW9zLW9uY2U9XFxcInRydWVcXFwiIGRhdGEtYW9zLWRlbGF5PVxcXCIyMDBcXFwiIGRhdGEtYW9zLWR1cmF0aW9uPVxcXCI2MDBcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImNvbXBhcmlzb24tY2FyZCBjb21wYXJpc29uLWNhcmQtLWlzLWxlZnRcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdDxoMyBjbGFzcz1cXFwiY29tcGFyaXNvbi1jYXJkX19oZWFkZXJcXFwiPkluc3BpcmF0byBDbHViPC9oMz5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb21wYXJpc29uLWNhcmRfX3ByaWNlXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8c3BhbiBjbGFzcz1cXFwiY29tcGFyaXNvbi1jYXJkX19jdXJyZW5jeVxcXCI+JDwvc3Bhbj48c3BhbiBjbGFzcz1cXFwiY29tcGFyaXNvbi1jYXJkX192YWx1ZVxcXCI+NjAwPC9zcGFuPjxzcGFuIGNsYXNzPVxcXCJjb21wYXJpc29uLWNhcmRfX3RpbWVcXFwiPjxzcGFuIGNsYXNzPVxcXCJjb21wYXJpc29uLWNhcmRfX2Rhc2hcXFwiPi88L3NwYW4+PHNwYW4gY2xhc3M9XFxcImNvbXBhcmlzb24tY2FyZF9fbW9udGhcXFwiPm1vbnRoPC9zcGFuPjwvc3Bhbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb21wYXJpc29uLWNhcmRfX2NvbnRlbnQtY29udGFpbmVyXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJyb3cgY29tcGFyaXNvbi1jYXJkX19saXN0XFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTJcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDx1bD5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8bGk+UGF5IG5pZ2h0bHkgcmF0ZXMgYXMgeW91Jm5ic3A7dHJhdmVsPC9saT5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8bGk+Q2hvb3NlIHlvdXIgc3BlY2lmaWMgZGVzdGluYXRpb25zLCBhY2NvbW1vZGF0aW9ucywgYW5kJm5ic3A7ZGF0ZXMgZnJvbSB0aGUgZnVsbCBJbnNwaXJhdG8gQ29sbGVjdGlvbiBvZiZuYnNwO2hvbWVzLCBob3RlbHMsIGFuZCZuYnNwO2V4cGVyaWVuY2VzPC9saT5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8bGk+QWNjZXNzIHRvIGluY3JlZGlibGUgdmFsdWUgd2l0aCBKYXVudCwgZmVhdHVyaW5nIHdlZWtseSZuYnNwO2Rpc2NvdW50czwvbGk+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PGxpPk5vIGxvbmctdGVybSBjb21taXRtZW50OyBjYW5jZWwmbmJzcDthdCZuYnNwO2FueSZuYnNwO3RpbWU8L2xpPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDwvdWw+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0PGEgY2xhc3M9XFxcImNvbXBhcmlzb24tY2FyZF9fY2FsbC10by1hY3Rpb24gZHMtYnRuLXNlY29uZGFyeVxcXCIgaHJlZj1cXFwiL3RoZS1jbHViL1xcXCI+TGVhcm4gbW9yZTwvYT5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgY29sLXNtLTYgY29tcGFyaXNvbi1jYXJkX19jb250YWluZXJcXFwiIGRhdGEtYW9zPVxcXCJmYWRlLXVwXFxcIiBkYXRhLWFvcy1lYXNpbmc9XFxcImVhc2Utb3V0LXNpbmVcXFwiIGRhdGEtYW9zLW9uY2U9XFxcInRydWVcXFwiIGRhdGEtYW9zLWRlbGF5PVxcXCIyMDBcXFwiIGRhdGEtYW9zLWR1cmF0aW9uPVxcXCI2MDBcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImNvbXBhcmlzb24tY2FyZCBjb21wYXJpc29uLWNhcmQtLWlzLXJpZ2h0XFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHQ8aDMgY2xhc3M9XFxcImNvbXBhcmlzb24tY2FyZF9faGVhZGVyXFxcIj5JbnNwaXJhdG8gUGFzczwvaDM+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiY29tcGFyaXNvbi1jYXJkX19wcmljZVxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PHNwYW4gY2xhc3M9XFxcImNvbXBhcmlzb24tY2FyZF9fY3VycmVuY3lcXFwiPiQ8L3NwYW4+PHNwYW4gY2xhc3M9XFxcImNvbXBhcmlzb24tY2FyZF9fdmFsdWVcXFwiPjI8c3BhbiBjbGFzcz1cXFwiY29tcGFyaXNvbi1jYXJkX192YWx1ZS0tY29tbWFcXFwiPiw8L3NwYW4+NTAwPC9zcGFuPjxzcGFuIGNsYXNzPVxcXCJjb21wYXJpc29uLWNhcmRfX3RpbWVcXFwiPjxzcGFuIGNsYXNzPVxcXCJjb21wYXJpc29uLWNhcmRfX2Rhc2hcXFwiPi88L3NwYW4+PHNwYW4gY2xhc3M9XFxcImNvbXBhcmlzb24tY2FyZF9fbW9udGhcXFwiPm1vbnRoPC9zcGFuPjwvc3Bhbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb21wYXJpc29uLWNhcmRfX2NvbnRlbnQtY29udGFpbmVyXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJyb3cgY29tcGFyaXNvbi1jYXJkX19saXN0XFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTJcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDx1bD5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8bGk+Tm8gbmlnaHRseSByYXRlcywgdGF4ZXMsIG9yJm5ic3A7ZmVlczwvbGk+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PGxpPkNob29zZSB5b3VyIHZhY2F0aW9ucyBmcm9tIGEgbGlzdCBvZiB0aG91c2FuZHMgb2YgdHJpcHMmbWRhc2g7dXBkYXRlZCBkYWlseSZtZGFzaDtpbiZuYnNwO291ciZuYnNwO2hvbWVzLCBob3RlbHMsIGFuZCZuYnNwO2V4cGVyaWVuY2VzPC9saT5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8bGk+SW5jbHVkZXMgbWVtYmVyc2hpcCBpbiB0aGUgSW5zcGlyYXRvJm5ic3A7Q2x1YiZuYnNwO3RvbzwvbGk+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PGxpPk5vIGxvbmctdGVybSBjb21taXRtZW50OyBjYW5jZWwmbmJzcDthdCZuYnNwO2FueSZuYnNwO3RpbWU8L2xpPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDwvdWw+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0PGEgY2xhc3M9XFxcImNvbXBhcmlzb24tY2FyZF9fY2FsbC10by1hY3Rpb24gZHMtYnRuLXNlY29uZGFyeVxcXCIgaHJlZj1cXFwiL3Bhc3Mvb3ZlcnZpZXcvXFxcIj5MZWFybiBtb3JlPC9hPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdDwvZGl2PlxcclxcblxcdDwvZGl2PlxcclxcbjwvdGVtcGxhdGU+XFxyXFxuXCI7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/static-content-page/static-content-page.html\n')},"components/story/story":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar Story = /** @class */ (function () {\r\n    function Story() {\r\n    }\r\n    Story.prototype.activate = function (model) {\r\n        this.model = model;\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Object)\r\n    ], Story.prototype, "model", void 0);\r\n    return Story;\r\n}());\r\nexports.Story = Story;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9zdG9yeS9zdG9yeS50cz9hNDc5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLFFBQVE7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxjQUFjO0FBQzVELDBCQUEwQixtQkFBTyxDQUFDLG1CQUFtQjtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEIiwiZmlsZSI6ImNvbXBvbmVudHMvc3Rvcnkvc3RvcnkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxudmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufTtcclxudmFyIF9fbWV0YWRhdGEgPSAodGhpcyAmJiB0aGlzLl9fbWV0YWRhdGEpIHx8IGZ1bmN0aW9uIChrLCB2KSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEoaywgdik7XHJcbn07XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIGF1cmVsaWFfZnJhbWV3b3JrXzEgPSByZXF1aXJlKFwiYXVyZWxpYS1mcmFtZXdvcmtcIik7XHJcbnZhciBTdG9yeSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIFN0b3J5KCkge1xyXG4gICAgfVxyXG4gICAgU3RvcnkucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24gKG1vZGVsKSB7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG1vZGVsO1xyXG4gICAgfTtcclxuICAgIF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuYmluZGFibGUsXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcclxuICAgIF0sIFN0b3J5LnByb3RvdHlwZSwgXCJtb2RlbFwiLCB2b2lkIDApO1xyXG4gICAgcmV0dXJuIFN0b3J5O1xyXG59KCkpO1xyXG5leHBvcnRzLlN0b3J5ID0gU3Rvcnk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///components/story/story\n')},"components/story/story.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<div if.bind=\\"model && model.nestedComponents.length\\" class=\\"story\\">\\r\\n\\r\\n\\t\\t<div repeat.for=\\"component of model.nestedComponents\\" class=\\"story__item col-xs-12 col-sm-6 col-md-5 col-lg-5\\">\\r\\n\\t\\t\\t<compose containerless\\r\\n\\t\\t\\t\\t\\tmodel.bind=\\"component\\"\\r\\n\\t\\t\\t\\t\\tview-model=\\"../${component.componentName}/${component.componentName}\\">\\r\\n\\t\\t\\t<\/compose>\\r\\n\\t\\t<\/div>\\r\\n\\r\\n\\t<\/div>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9zdG9yeS9zdG9yeS5odG1sPzc3MWMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK1VBQStVLHdCQUF3QixHQUFHLHdCQUF3QiIsImZpbGUiOiJjb21wb25lbnRzL3N0b3J5L3N0b3J5Lmh0bWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IFwiPHRlbXBsYXRlPlxcclxcblxcdDxkaXYgaWYuYmluZD1cXFwibW9kZWwgJiYgbW9kZWwubmVzdGVkQ29tcG9uZW50cy5sZW5ndGhcXFwiIGNsYXNzPVxcXCJzdG9yeVxcXCI+XFxyXFxuXFxyXFxuXFx0XFx0PGRpdiByZXBlYXQuZm9yPVxcXCJjb21wb25lbnQgb2YgbW9kZWwubmVzdGVkQ29tcG9uZW50c1xcXCIgY2xhc3M9XFxcInN0b3J5X19pdGVtIGNvbC14cy0xMiBjb2wtc20tNiBjb2wtbWQtNSBjb2wtbGctNVxcXCI+XFxyXFxuXFx0XFx0XFx0PGNvbXBvc2UgY29udGFpbmVybGVzc1xcclxcblxcdFxcdFxcdFxcdFxcdG1vZGVsLmJpbmQ9XFxcImNvbXBvbmVudFxcXCJcXHJcXG5cXHRcXHRcXHRcXHRcXHR2aWV3LW1vZGVsPVxcXCIuLi8ke2NvbXBvbmVudC5jb21wb25lbnROYW1lfS8ke2NvbXBvbmVudC5jb21wb25lbnROYW1lfVxcXCI+XFxyXFxuXFx0XFx0XFx0PC9jb21wb3NlPlxcclxcblxcdFxcdDwvZGl2PlxcclxcblxcclxcblxcdDwvZGl2PlxcclxcbjwvdGVtcGxhdGU+XFxyXFxuXCI7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/story/story.html\n')},"components/tab-listing/tab":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar lodash_1 = __webpack_require__(20);\r\nvar Tab = /** @class */ (function () {\r\n    function Tab() {\r\n        this.modifier = \'\';\r\n    }\r\n    Tab.prototype.activate = function (model) {\r\n        this.model = model;\r\n    };\r\n    Tab.prototype.attached = function () {\r\n        var isActive = lodash_1.includes(window.location.href, this.model.url);\r\n        if (isActive) {\r\n            this.modifier += \' tab--is-active\';\r\n        }\r\n        if (this.model.isExternalUrl) {\r\n            this.modifier += \' tab--has-icon\';\r\n        }\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Object)\r\n    ], Tab.prototype, "model", void 0);\r\n    Tab = __decorate([\r\n        aurelia_framework_1.containerless()\r\n    ], Tab);\r\n    return Tab;\r\n}());\r\nexports.Tab = Tab;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy90YWItbGlzdGluZy90YWIudHM/ZDNmNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxRQUFRO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RCwwQkFBMEIsbUJBQU8sQ0FBQyxtQkFBbUI7QUFDckQsZUFBZSxtQkFBTyxDQUFDLEVBQVE7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEIiwiZmlsZSI6ImNvbXBvbmVudHMvdGFiLWxpc3RpbmcvdGFiLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2RlY29yYXRlID0gKHRoaXMgJiYgdGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn07XHJcbnZhciBfX21ldGFkYXRhID0gKHRoaXMgJiYgdGhpcy5fX21ldGFkYXRhKSB8fCBmdW5jdGlvbiAoaywgdikge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xyXG59O1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBhdXJlbGlhX2ZyYW1ld29ya18xID0gcmVxdWlyZShcImF1cmVsaWEtZnJhbWV3b3JrXCIpO1xyXG52YXIgbG9kYXNoXzEgPSByZXF1aXJlKFwibG9kYXNoXCIpO1xyXG52YXIgVGFiID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gVGFiKCkge1xyXG4gICAgICAgIHRoaXMubW9kaWZpZXIgPSAnJztcclxuICAgIH1cclxuICAgIFRhYi5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbiAobW9kZWwpIHtcclxuICAgICAgICB0aGlzLm1vZGVsID0gbW9kZWw7XHJcbiAgICB9O1xyXG4gICAgVGFiLnByb3RvdHlwZS5hdHRhY2hlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgaXNBY3RpdmUgPSBsb2Rhc2hfMS5pbmNsdWRlcyh3aW5kb3cubG9jYXRpb24uaHJlZiwgdGhpcy5tb2RlbC51cmwpO1xyXG4gICAgICAgIGlmIChpc0FjdGl2ZSkge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGlmaWVyICs9ICcgdGFiLS1pcy1hY3RpdmUnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5tb2RlbC5pc0V4dGVybmFsVXJsKSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kaWZpZXIgKz0gJyB0YWItLWhhcy1pY29uJztcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5iaW5kYWJsZSxcclxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxyXG4gICAgXSwgVGFiLnByb3RvdHlwZSwgXCJtb2RlbFwiLCB2b2lkIDApO1xyXG4gICAgVGFiID0gX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5jb250YWluZXJsZXNzKClcclxuICAgIF0sIFRhYik7XHJcbiAgICByZXR1cm4gVGFiO1xyXG59KCkpO1xyXG5leHBvcnRzLlRhYiA9IFRhYjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/tab-listing/tab\n')},"components/tab-listing/tab-listing":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar TabListing = /** @class */ (function () {\r\n    function TabListing() {\r\n    }\r\n    TabListing.prototype.activate = function (model) {\r\n        this.model = model;\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Object)\r\n    ], TabListing.prototype, "model", void 0);\r\n    return TabListing;\r\n}());\r\nexports.TabListing = TabListing;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy90YWItbGlzdGluZy90YWItbGlzdGluZy50cz8xNTIxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLFFBQVE7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxjQUFjO0FBQzVELDBCQUEwQixtQkFBTyxDQUFDLG1CQUFtQjtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEIiwiZmlsZSI6ImNvbXBvbmVudHMvdGFiLWxpc3RpbmcvdGFiLWxpc3RpbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxudmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufTtcclxudmFyIF9fbWV0YWRhdGEgPSAodGhpcyAmJiB0aGlzLl9fbWV0YWRhdGEpIHx8IGZ1bmN0aW9uIChrLCB2KSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEoaywgdik7XHJcbn07XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIGF1cmVsaWFfZnJhbWV3b3JrXzEgPSByZXF1aXJlKFwiYXVyZWxpYS1mcmFtZXdvcmtcIik7XHJcbnZhciBUYWJMaXN0aW5nID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gVGFiTGlzdGluZygpIHtcclxuICAgIH1cclxuICAgIFRhYkxpc3RpbmcucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24gKG1vZGVsKSB7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG1vZGVsO1xyXG4gICAgfTtcclxuICAgIF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuYmluZGFibGUsXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcclxuICAgIF0sIFRhYkxpc3RpbmcucHJvdG90eXBlLCBcIm1vZGVsXCIsIHZvaWQgMCk7XHJcbiAgICByZXR1cm4gVGFiTGlzdGluZztcclxufSgpKTtcclxuZXhwb3J0cy5UYWJMaXN0aW5nID0gVGFiTGlzdGluZztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/tab-listing/tab-listing\n')},"components/tab-listing/tab-listing.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<div class=\\"tab-listing row center-xs\\">\\r\\n\\t\\t<tab repeat.for=\\"tab of model.tabs\\" model.bind=\\"tab\\"><\/tab>\\r\\n\\t<\/div>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy90YWItbGlzdGluZy90YWItbGlzdGluZy5odG1sP2RlY2QiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEiLCJmaWxlIjoiY29tcG9uZW50cy90YWItbGlzdGluZy90YWItbGlzdGluZy5odG1sLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBcIjx0ZW1wbGF0ZT5cXHJcXG5cXHQ8ZGl2IGNsYXNzPVxcXCJ0YWItbGlzdGluZyByb3cgY2VudGVyLXhzXFxcIj5cXHJcXG5cXHRcXHQ8dGFiIHJlcGVhdC5mb3I9XFxcInRhYiBvZiBtb2RlbC50YWJzXFxcIiBtb2RlbC5iaW5kPVxcXCJ0YWJcXFwiPjwvdGFiPlxcclxcblxcdDwvZGl2PlxcclxcbjwvdGVtcGxhdGU+XFxyXFxuXCI7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/tab-listing/tab-listing.html\n')},"components/tab-listing/tab.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<div class=\\"tab ${modifier} col-xs col-sm-3 col-md-2\\">\\r\\n\\t\\t<a class=\\"tab__anchor\\" href=\\"${model.url}\\" target=\\"${model.isExternalUrl ? \'_blank\' : \'_self\'}\\">\\r\\n\\t\\t\\t${model.title}\\r\\n\\t\\t\\t<svg if.bind=\\"model.isExternalUrl\\" class=\\"ds-icon-link-external ds-icon-sm\\">\\r\\n\\t\\t\\t\\t<use xlink:href=\\"#ds-icon-link-external\\"/>\\r\\n\\t\\t\\t<\/svg>\\r\\n\\t\\t<\/a>\\r\\n\\t<\/div>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy90YWItbGlzdGluZy90YWIuaHRtbD81ZWIyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRCxTQUFTLHNFQUFzRSxVQUFVLGNBQWMseUNBQXlDLGVBQWUsWUFBWSIsImZpbGUiOiJjb21wb25lbnRzL3RhYi1saXN0aW5nL3RhYi5odG1sLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBcIjx0ZW1wbGF0ZT5cXHJcXG5cXHQ8ZGl2IGNsYXNzPVxcXCJ0YWIgJHttb2RpZmllcn0gY29sLXhzIGNvbC1zbS0zIGNvbC1tZC0yXFxcIj5cXHJcXG5cXHRcXHQ8YSBjbGFzcz1cXFwidGFiX19hbmNob3JcXFwiIGhyZWY9XFxcIiR7bW9kZWwudXJsfVxcXCIgdGFyZ2V0PVxcXCIke21vZGVsLmlzRXh0ZXJuYWxVcmwgPyAnX2JsYW5rJyA6ICdfc2VsZid9XFxcIj5cXHJcXG5cXHRcXHRcXHQke21vZGVsLnRpdGxlfVxcclxcblxcdFxcdFxcdDxzdmcgaWYuYmluZD1cXFwibW9kZWwuaXNFeHRlcm5hbFVybFxcXCIgY2xhc3M9XFxcImRzLWljb24tbGluay1leHRlcm5hbCBkcy1pY29uLXNtXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHQ8dXNlIHhsaW5rOmhyZWY9XFxcIiNkcy1pY29uLWxpbmstZXh0ZXJuYWxcXFwiLz5cXHJcXG5cXHRcXHRcXHQ8L3N2Zz5cXHJcXG5cXHRcXHQ8L2E+XFxyXFxuXFx0PC9kaXY+XFxyXFxuPC90ZW1wbGF0ZT5cXHJcXG5cIjsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///components/tab-listing/tab.html\n')},"components/testimonial-card/testimonial-card":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar TestimonialCard = /** @class */ (function () {\r\n    function TestimonialCard() {\r\n        this.vidyardEmbedCode = \'\';\r\n    }\r\n    TestimonialCard.prototype.activate = function (model) {\r\n        this.model = model;\r\n        if (this.hasVideo()) {\r\n            this.model[\'playerType\'] = \'lightbox\';\r\n        }\r\n    };\r\n    TestimonialCard.prototype.hasVideo = function () {\r\n        return !!this.model.vidyardEmbedCode;\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Object)\r\n    ], TestimonialCard.prototype, "model", void 0);\r\n    return TestimonialCard;\r\n}());\r\nexports.TestimonialCard = TestimonialCard;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy90ZXN0aW1vbmlhbC1jYXJkL3Rlc3RpbW9uaWFsLWNhcmQudHM/ZjUzYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxRQUFRO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RCwwQkFBMEIsbUJBQU8sQ0FBQyxtQkFBbUI7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEIiwiZmlsZSI6ImNvbXBvbmVudHMvdGVzdGltb25pYWwtY2FyZC90ZXN0aW1vbmlhbC1jYXJkLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2RlY29yYXRlID0gKHRoaXMgJiYgdGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn07XHJcbnZhciBfX21ldGFkYXRhID0gKHRoaXMgJiYgdGhpcy5fX21ldGFkYXRhKSB8fCBmdW5jdGlvbiAoaywgdikge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xyXG59O1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBhdXJlbGlhX2ZyYW1ld29ya18xID0gcmVxdWlyZShcImF1cmVsaWEtZnJhbWV3b3JrXCIpO1xyXG52YXIgVGVzdGltb25pYWxDYXJkID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gVGVzdGltb25pYWxDYXJkKCkge1xyXG4gICAgICAgIHRoaXMudmlkeWFyZEVtYmVkQ29kZSA9ICcnO1xyXG4gICAgfVxyXG4gICAgVGVzdGltb25pYWxDYXJkLnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uIChtb2RlbCkge1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSBtb2RlbDtcclxuICAgICAgICBpZiAodGhpcy5oYXNWaWRlbygpKSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWxbJ3BsYXllclR5cGUnXSA9ICdsaWdodGJveCc7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIFRlc3RpbW9uaWFsQ2FyZC5wcm90b3R5cGUuaGFzVmlkZW8gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuICEhdGhpcy5tb2RlbC52aWR5YXJkRW1iZWRDb2RlO1xyXG4gICAgfTtcclxuICAgIF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuYmluZGFibGUsXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcclxuICAgIF0sIFRlc3RpbW9uaWFsQ2FyZC5wcm90b3R5cGUsIFwibW9kZWxcIiwgdm9pZCAwKTtcclxuICAgIHJldHVybiBUZXN0aW1vbmlhbENhcmQ7XHJcbn0oKSk7XHJcbmV4cG9ydHMuVGVzdGltb25pYWxDYXJkID0gVGVzdGltb25pYWxDYXJkO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///components/testimonial-card/testimonial-card\n')},"components/testimonial-card/testimonial-card.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<div class=\\"testimonial-card center-xs\\">\\r\\n\\r\\n\\t\\t<video-player if.bind=\\"hasVideo()\\" model.bind=\\"model\\"><\/video-player>\\r\\n\\t\\t\\r\\n\\t\\t<div class=\\"testimonial-card__quote ds-blockquote\\" innerhtml.bind=\\"model.quote\\"><\/div>\\r\\n\\t\\t<span class=\\"testimonial-card__attribution ds-caps-small\\">${model.attribution}<\/span>\\r\\n\\t\\t<span class=\\"testimonial-card__location ds-caps-small\\">${model.location}<\/span>\\r\\n\\r\\n\\t<\/div>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy90ZXN0aW1vbmlhbC1jYXJkL3Rlc3RpbW9uaWFsLWNhcmQuaHRtbD9kNTNjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlWQUFpVixrQkFBa0IsMEVBQTBFLGVBQWUiLCJmaWxlIjoiY29tcG9uZW50cy90ZXN0aW1vbmlhbC1jYXJkL3Rlc3RpbW9uaWFsLWNhcmQuaHRtbC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gXCI8dGVtcGxhdGU+XFxyXFxuXFx0PGRpdiBjbGFzcz1cXFwidGVzdGltb25pYWwtY2FyZCBjZW50ZXIteHNcXFwiPlxcclxcblxcclxcblxcdFxcdDx2aWRlby1wbGF5ZXIgaWYuYmluZD1cXFwiaGFzVmlkZW8oKVxcXCIgbW9kZWwuYmluZD1cXFwibW9kZWxcXFwiPjwvdmlkZW8tcGxheWVyPlxcclxcblxcdFxcdFxcclxcblxcdFxcdDxkaXYgY2xhc3M9XFxcInRlc3RpbW9uaWFsLWNhcmRfX3F1b3RlIGRzLWJsb2NrcXVvdGVcXFwiIGlubmVyaHRtbC5iaW5kPVxcXCJtb2RlbC5xdW90ZVxcXCI+PC9kaXY+XFxyXFxuXFx0XFx0PHNwYW4gY2xhc3M9XFxcInRlc3RpbW9uaWFsLWNhcmRfX2F0dHJpYnV0aW9uIGRzLWNhcHMtc21hbGxcXFwiPiR7bW9kZWwuYXR0cmlidXRpb259PC9zcGFuPlxcclxcblxcdFxcdDxzcGFuIGNsYXNzPVxcXCJ0ZXN0aW1vbmlhbC1jYXJkX19sb2NhdGlvbiBkcy1jYXBzLXNtYWxsXFxcIj4ke21vZGVsLmxvY2F0aW9ufTwvc3Bhbj5cXHJcXG5cXHJcXG5cXHQ8L2Rpdj5cXHJcXG48L3RlbXBsYXRlPlxcclxcblwiOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///components/testimonial-card/testimonial-card.html\n')},"components/travel-card/travel-card":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar TravelCard = /** @class */ (function () {\r\n    function TravelCard() {\r\n        this.backgroundImage = \'\';\r\n    }\r\n    TravelCard.prototype.activate = function (model) {\r\n        this.model = model;\r\n        if (model.backgroundImage && model.backgroundImage.hasImage) {\r\n            this.backgroundImage = "background-image: url(\\"" + model\r\n                .backgroundImage.fullPath + "&width=530\\");";\r\n        }\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Object)\r\n    ], TravelCard.prototype, "model", void 0);\r\n    return TravelCard;\r\n}());\r\nexports.TravelCard = TravelCard;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy90cmF2ZWwtY2FyZC90cmF2ZWwtY2FyZC50cz80YTc0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLFFBQVE7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxjQUFjO0FBQzVELDBCQUEwQixtQkFBTyxDQUFDLG1CQUFtQjtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkRBQTJEO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEIiwiZmlsZSI6ImNvbXBvbmVudHMvdHJhdmVsLWNhcmQvdHJhdmVsLWNhcmQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxudmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufTtcclxudmFyIF9fbWV0YWRhdGEgPSAodGhpcyAmJiB0aGlzLl9fbWV0YWRhdGEpIHx8IGZ1bmN0aW9uIChrLCB2KSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEoaywgdik7XHJcbn07XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIGF1cmVsaWFfZnJhbWV3b3JrXzEgPSByZXF1aXJlKFwiYXVyZWxpYS1mcmFtZXdvcmtcIik7XHJcbnZhciBUcmF2ZWxDYXJkID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gVHJhdmVsQ2FyZCgpIHtcclxuICAgICAgICB0aGlzLmJhY2tncm91bmRJbWFnZSA9ICcnO1xyXG4gICAgfVxyXG4gICAgVHJhdmVsQ2FyZC5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbiAobW9kZWwpIHtcclxuICAgICAgICB0aGlzLm1vZGVsID0gbW9kZWw7XHJcbiAgICAgICAgaWYgKG1vZGVsLmJhY2tncm91bmRJbWFnZSAmJiBtb2RlbC5iYWNrZ3JvdW5kSW1hZ2UuaGFzSW1hZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5iYWNrZ3JvdW5kSW1hZ2UgPSBcImJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiXCIgKyBtb2RlbFxyXG4gICAgICAgICAgICAgICAgLmJhY2tncm91bmRJbWFnZS5mdWxsUGF0aCArIFwiJndpZHRoPTUzMFxcXCIpO1wiO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBfX2RlY29yYXRlKFtcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLmJpbmRhYmxlLFxyXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXHJcbiAgICBdLCBUcmF2ZWxDYXJkLnByb3RvdHlwZSwgXCJtb2RlbFwiLCB2b2lkIDApO1xyXG4gICAgcmV0dXJuIFRyYXZlbENhcmQ7XHJcbn0oKSk7XHJcbmV4cG9ydHMuVHJhdmVsQ2FyZCA9IFRyYXZlbENhcmQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///components/travel-card/travel-card\n')},"components/travel-card/travel-card.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<div class=\\"travel-card ${$even ? \'travel-card--is-odd\' : \'travel-card--is-even\'}\\">\\r\\n\\r\\n\\t\\t<div class=\\"travel-card__child\\">\\r\\n\\t\\t\\t<div css.bind=\\"backgroundImage\\" class=\\"travel-card__container\\">\\r\\n\\t\\t\\t\\t<div class=\\"travel-card__content center-xs\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\"travel-card__icon-holder\\">\\r\\n\\t\\t\\t\\t\\t\\t<img if.bind=\\"model.icon\\" src=\\"${model.icon.fullPath}\\" class=\\"travel-card__icon\\" />\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t\\t\\t<h3 class=\\"travel-card__heading ds-title-small\\">${model.heading}<\/h3>\\r\\n\\t\\t\\t\\t\\t<div class=\\"travel-card__body-copy ds-p-base col-xs-12\\" innerhtml.bind=\\"model.bodyCopy\\"><\/div>\\r\\n\\t\\t\\t\\t\\t<a if.bind=\\"model.callToAction.canDisplayAsTextLink\\" class=\\"travel-card__action ds-btn-primary\\" href=\\"${model.callToAction.url}\\">${model.callToAction.linkTitle}<\/a>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t<\/div>\\r\\n\\r\\n\\t<\/div>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy90cmF2ZWwtY2FyZC90cmF2ZWwtY2FyZC5odG1sPzljYmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNkRBQTZELHVEQUF1RCxrU0FBa1Msb0JBQW9CLDJIQUEySCxjQUFjLGdQQUFnUCx1QkFBdUIsS0FBSyw2QkFBNkIiLCJmaWxlIjoiY29tcG9uZW50cy90cmF2ZWwtY2FyZC90cmF2ZWwtY2FyZC5odG1sLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBcIjx0ZW1wbGF0ZT5cXHJcXG5cXHQ8ZGl2IGNsYXNzPVxcXCJ0cmF2ZWwtY2FyZCAkeyRldmVuID8gJ3RyYXZlbC1jYXJkLS1pcy1vZGQnIDogJ3RyYXZlbC1jYXJkLS1pcy1ldmVuJ31cXFwiPlxcclxcblxcclxcblxcdFxcdDxkaXYgY2xhc3M9XFxcInRyYXZlbC1jYXJkX19jaGlsZFxcXCI+XFxyXFxuXFx0XFx0XFx0PGRpdiBjc3MuYmluZD1cXFwiYmFja2dyb3VuZEltYWdlXFxcIiBjbGFzcz1cXFwidHJhdmVsLWNhcmRfX2NvbnRhaW5lclxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwidHJhdmVsLWNhcmRfX2NvbnRlbnQgY2VudGVyLXhzXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJ0cmF2ZWwtY2FyZF9faWNvbi1ob2xkZXJcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxpbWcgaWYuYmluZD1cXFwibW9kZWwuaWNvblxcXCIgc3JjPVxcXCIke21vZGVsLmljb24uZnVsbFBhdGh9XFxcIiBjbGFzcz1cXFwidHJhdmVsLWNhcmRfX2ljb25cXFwiIC8+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFxyXFxuXFx0XFx0XFx0XFx0XFx0PGgzIGNsYXNzPVxcXCJ0cmF2ZWwtY2FyZF9faGVhZGluZyBkcy10aXRsZS1zbWFsbFxcXCI+JHttb2RlbC5oZWFkaW5nfTwvaDM+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwidHJhdmVsLWNhcmRfX2JvZHktY29weSBkcy1wLWJhc2UgY29sLXhzLTEyXFxcIiBpbm5lcmh0bWwuYmluZD1cXFwibW9kZWwuYm9keUNvcHlcXFwiPjwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdDxhIGlmLmJpbmQ9XFxcIm1vZGVsLmNhbGxUb0FjdGlvbi5jYW5EaXNwbGF5QXNUZXh0TGlua1xcXCIgY2xhc3M9XFxcInRyYXZlbC1jYXJkX19hY3Rpb24gZHMtYnRuLXByaW1hcnlcXFwiIGhyZWY9XFxcIiR7bW9kZWwuY2FsbFRvQWN0aW9uLnVybH1cXFwiPiR7bW9kZWwuY2FsbFRvQWN0aW9uLmxpbmtUaXRsZX08L2E+XFxyXFxuXFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0PC9kaXY+XFxyXFxuXFxyXFxuXFx0PC9kaXY+XFxyXFxuPC90ZW1wbGF0ZT5cXHJcXG5cIjsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///components/travel-card/travel-card.html\n')},"components/trip-finder/autocomplete/autocomplete":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nvar __values = (this && this.__values) || function (o) {\r\n    var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0;\r\n    if (m) return m.call(o);\r\n    return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar accentMap_1 = __webpack_require__(164);\r\nvar KeyCode_1 = __webpack_require__(163);\r\nvar TripFinderRepository_1 = __webpack_require__(162);\r\nvar Autocomplete = /** @class */ (function () {\r\n    function Autocomplete(repository) {\r\n        this.repository = repository;\r\n        this.fetchUrl = \'\';\r\n        this.allSearchCriteria = [];\r\n        this.selectedSearchCriteria = null;\r\n        this.modifier = \'\';\r\n        this.isOpen = false;\r\n        this.highlightIndex = -1;\r\n        this.searchQuery = \'\';\r\n        this.categoriesMatchingSearch = [];\r\n        this.sortedCategories = [\r\n            { type: 3, header: \'Vacation Styles\', sortOrder: 1, searchCriteria: [] },\r\n            { type: 1, header: \'Destinations\', sortOrder: 5, searchCriteria: [] },\r\n            { type: 2, header: \'Regions\', sortOrder: 2, searchCriteria: [] },\r\n            { type: 4, header: \'Countries\', sortOrder: 3, searchCriteria: [] },\r\n            { type: 5, header: \'States & Provinces\', sortOrder: 4, searchCriteria: [] },\r\n            { type: 6, header: \'Hotels &amp; Resorts\', sortOrder: 6, searchCriteria: [] },\r\n            { type: 7, header: \'Accommodations\', sortOrder: 7, searchCriteria: [] },\r\n            { type: 8, header: \'Experiences\', sortOrder: 8, searchCriteria: [] }\r\n        ];\r\n    }\r\n    Autocomplete.prototype.attached = function () {\r\n        var _this = this;\r\n        if (this.fetchUrl) {\r\n            this.repository\r\n                .fetchSearchCriteria(this.fetchUrl)\r\n                .then(function (searchCriteria) { return _this.init(searchCriteria); });\r\n        }\r\n    };\r\n    Autocomplete.prototype.clearFilters = function () {\r\n        this.isOpen = false;\r\n        this.modifier = \'\';\r\n        this.categoriesMatchingSearch = this.getOptionsMatchingSearch();\r\n        this.searchInputField.focus();\r\n        $(this.autocompleteElement).off(\'clickoutside touchstartoutside\');\r\n    };\r\n    Autocomplete.prototype.clearSearch = function () {\r\n        this.selectedSearchCriteria = null;\r\n        this.searchQuery = \'\';\r\n        this.clearFilters();\r\n    };\r\n    Autocomplete.prototype.handleKeyPress = function (event) {\r\n        switch (event.keyCode) {\r\n            case KeyCode_1.KeyCode.Down:\r\n                if (this.isOpen) {\r\n                    this.highlightIndex++;\r\n                    this.highlightItem();\r\n                }\r\n                else {\r\n                    this.showOptions();\r\n                }\r\n                break;\r\n            case KeyCode_1.KeyCode.Up:\r\n                if (this.isOpen) {\r\n                    this.highlightIndex--;\r\n                    this.highlightItem();\r\n                }\r\n                break;\r\n            case KeyCode_1.KeyCode.Enter:\r\n                this.selectSearchItem(this.highlightIndex);\r\n                this.highlightIndex = -1;\r\n                break;\r\n            default:\r\n                this.highlightIndex = -1;\r\n                this.showOptions();\r\n                break;\r\n        }\r\n    };\r\n    Autocomplete.prototype.filter = function () {\r\n        this.categoriesMatchingSearch = this.getOptionsMatchingSearch();\r\n        if (!this.isOpen) {\r\n            this.open();\r\n        }\r\n    };\r\n    Autocomplete.prototype.getOptionsMatchingSearch = function () {\r\n        var _this = this;\r\n        return this.sortedCategories\r\n            .map(function (sort) {\r\n            sort.searchCriteria = _this.allSearchCriteria.filter(function (i) {\r\n                var sanitizedOption = _this.sanitizeString(i.text);\r\n                var sanitizedSearch = _this.sanitizeString(_this.searchQuery);\r\n                return (i.type === sort.type &&\r\n                    sanitizedOption.indexOf(sanitizedSearch) >= 0);\r\n            });\r\n            return sort;\r\n        })\r\n            .filter(function (category) { return category.searchCriteria.length > 0; })\r\n            .sort(function (l, r) { return l.sortOrder - r.sortOrder; });\r\n    };\r\n    Autocomplete.prototype.focus = function () {\r\n        this.filter();\r\n        this.searchInputField.focus();\r\n    };\r\n    Object.defineProperty(Autocomplete.prototype, "hasMatches", {\r\n        get: function () {\r\n            return !this.isSearchCriteriaLoaded || this.categoriesMatchingSearch.length > 0;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Autocomplete.prototype, "isSearchCriteriaLoaded", {\r\n        get: function () {\r\n            return this.allSearchCriteria.length > 0;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Autocomplete.prototype.highlightItem = function () {\r\n        var _this = this;\r\n        var searchCriteriaList = this.categoriesMatchingSearch\r\n            .map(function (category) { return category.searchCriteria; })\r\n            .reduce(function (a, b) { return a.concat(b); }, []);\r\n        var maxHighlightIndex = searchCriteriaList.length - 1;\r\n        this.highlightIndex = Math.max(-1, Math.min(maxHighlightIndex, this.highlightIndex));\r\n        this.removeHighlighting();\r\n        if (this.highlightIndex >= 0) {\r\n            searchCriteriaList[this.highlightIndex].isHighlighted = true;\r\n            setTimeout(function () { return _this.scrollToHighlightedItem(); }, 0);\r\n        }\r\n    };\r\n    Autocomplete.prototype.init = function (searchCriteria) {\r\n        this.allSearchCriteria = searchCriteria;\r\n        this.categoriesMatchingSearch = this.getOptionsMatchingSearch();\r\n    };\r\n    Object.defineProperty(Autocomplete.prototype, "isSearching", {\r\n        get: function () {\r\n            return this.searchQuery.length > 0;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Autocomplete.prototype.open = function () {\r\n        var _this = this;\r\n        this.isOpen = true;\r\n        this.modifier = \'autocomplete--is-open\';\r\n        $(this.autocompleteElement).on(\'clickoutside touchstartoutside\', function (event) { return _this.clearFilters(); });\r\n    };\r\n    Autocomplete.prototype.removeHighlighting = function () {\r\n        this.categoriesMatchingSearch.map(function (category) { return category.searchCriteria.forEach(function (criteria) { return criteria.isHighlighted = false; }); });\r\n    };\r\n    Autocomplete.prototype.sanitizeString = function (inputString) {\r\n        var str = inputString.toLocaleLowerCase()\r\n            // replace multiple spaces with single space:\r\n            .replace(/ +(?= )/g, \'\')\r\n            .trim()\r\n            // remove commas, periods, and apostrophes:\r\n            .replace(/,/g, \'\')\r\n            .replace(/\\./g, \'\')\r\n            .replace(/\\\'/g, \'\')\r\n            .replace(/\\’/g, \'\');\r\n        var normalizedString = \'\';\r\n        try {\r\n            for (var str_1 = __values(str), str_1_1 = str_1.next(); !str_1_1.done; str_1_1 = str_1.next()) {\r\n                var character = str_1_1.value;\r\n                normalizedString += accentMap_1.accentMap[character] || character;\r\n            }\r\n        }\r\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\r\n        finally {\r\n            try {\r\n                if (str_1_1 && !str_1_1.done && (_a = str_1.return)) _a.call(str_1);\r\n            }\r\n            finally { if (e_1) throw e_1.error; }\r\n        }\r\n        str = normalizedString;\r\n        return str;\r\n        var e_1, _a;\r\n    };\r\n    Autocomplete.prototype.scrollToHighlightedItem = function () {\r\n        var $results = $(this.searchResultsElement);\r\n        var $selectedItem = $results.find(\'.matched-results__item--is-selected\');\r\n        if ($selectedItem.length) {\r\n            var selectedIndex = this.highlightIndex - this.categoriesMatchingSearch.length - 1;\r\n            // check if there is a scroll bar, if there is scroll through list as it moves selection\r\n            if (selectedIndex === 0) {\r\n                // if the first element is highlighted scroll all the way to the top\r\n                $results.scrollTop(0);\r\n                return;\r\n            }\r\n            var hb = $selectedItem.offset().top +\r\n                $selectedItem.outerHeight(true);\r\n            var rb = $results.offset().top + $results.outerHeight(true);\r\n            if (hb > rb) {\r\n                $results.scrollTop($results.scrollTop() + (hb - rb));\r\n            }\r\n            var y = $selectedItem.offset().top - $results.offset().top;\r\n            // make sure the top of the element is visible\r\n            if (y < 0) {\r\n                $results.scrollTop($results.scrollTop() + y); // y is negative\r\n            }\r\n        }\r\n    };\r\n    Autocomplete.prototype.selectSearchItem = function (index) {\r\n        var selectedSearchOption;\r\n        selectedSearchOption = this.categoriesMatchingSearch\r\n            .map(function (category) { return category.searchCriteria; })\r\n            .reduce(function (a, b) { return a.concat(b); }, [])[index];\r\n        this.selectItem(selectedSearchOption);\r\n    };\r\n    Autocomplete.prototype.selectItem = function (item) {\r\n        var _this = this;\r\n        if (item) {\r\n            this.selectedSearchCriteria = item;\r\n            this.searchQuery = item.text;\r\n            this.clearFilters();\r\n            setTimeout(function () { return _this.searchFunction(); }, 0);\r\n        }\r\n    };\r\n    Autocomplete.prototype.showOptions = function () {\r\n        this.filter();\r\n        if (this.hasMatches) {\r\n            this.highlightItem();\r\n        }\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", String)\r\n    ], Autocomplete.prototype, "fetchUrl", void 0);\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", String)\r\n    ], Autocomplete.prototype, "placeholder", void 0);\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Array)\r\n    ], Autocomplete.prototype, "allSearchCriteria", void 0);\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Object)\r\n    ], Autocomplete.prototype, "selectedSearchCriteria", void 0);\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Function)\r\n    ], Autocomplete.prototype, "searchFunction", void 0);\r\n    __decorate([\r\n        aurelia_framework_1.bindable({ defaultBindingMode: aurelia_framework_1.bindingMode.twoWay }),\r\n        __metadata("design:type", String)\r\n    ], Autocomplete.prototype, "modifier", void 0);\r\n    __decorate([\r\n        aurelia_framework_1.computedFrom(\'categoriesMatchingSearch\', \'isSearchCriteriaLoaded\'),\r\n        __metadata("design:type", Boolean),\r\n        __metadata("design:paramtypes", [])\r\n    ], Autocomplete.prototype, "hasMatches", null);\r\n    __decorate([\r\n        aurelia_framework_1.computedFrom(\'allSearchCriteria\'),\r\n        __metadata("design:type", Boolean),\r\n        __metadata("design:paramtypes", [])\r\n    ], Autocomplete.prototype, "isSearchCriteriaLoaded", null);\r\n    __decorate([\r\n        aurelia_framework_1.computedFrom(\'searchQuery\'),\r\n        __metadata("design:type", Object),\r\n        __metadata("design:paramtypes", [])\r\n    ], Autocomplete.prototype, "isSearching", null);\r\n    Autocomplete = __decorate([\r\n        aurelia_framework_1.autoinject(),\r\n        aurelia_framework_1.containerless,\r\n        __metadata("design:paramtypes", [TripFinderRepository_1.TripFinderRepository])\r\n    ], Autocomplete);\r\n    return Autocomplete;\r\n}());\r\nexports.Autocomplete = Autocomplete;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy90cmlwLWZpbmRlci9hdXRvY29tcGxldGUvYXV0b2NvbXBsZXRlLnRzPzFhNTQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsUUFBUTtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxjQUFjO0FBQzVELDBCQUEwQixtQkFBTyxDQUFDLG1CQUFtQjtBQUNyRCxrQkFBa0IsbUJBQU8sQ0FBQyxHQUFhO0FBQ3ZDLGdCQUFnQixtQkFBTyxDQUFDLEdBQVc7QUFDbkMsNkJBQTZCLG1CQUFPLENBQUMsR0FBd0I7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSx1RUFBdUU7QUFDcEYsYUFBYSxvRUFBb0U7QUFDakYsYUFBYSwrREFBK0Q7QUFDNUUsYUFBYSxpRUFBaUU7QUFDOUUsYUFBYSwwRUFBMEU7QUFDdkYsYUFBYSwrQkFBK0IsNkNBQTZDO0FBQ3pGLGFBQWEsc0VBQXNFO0FBQ25GLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCxtQ0FBbUMsRUFBRTtBQUN0RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNULHlDQUF5QywyQ0FBMkMsRUFBRTtBQUN0RixtQ0FBbUMsa0NBQWtDLEVBQUU7QUFDdkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxnQ0FBZ0MsRUFBRTtBQUN4RSxxQ0FBcUMsb0JBQW9CLEVBQUU7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyx3Q0FBd0MsRUFBRTtBQUM5RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJGQUEyRiw2QkFBNkIsRUFBRTtBQUMxSDtBQUNBO0FBQ0EsK0RBQStELDZEQUE2RCx1Q0FBdUMsRUFBRSxFQUFFLEVBQUU7QUFDeks7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtRUFBbUUsZUFBZTtBQUNsRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixRQUFRLGdCQUFnQjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQiwwQkFBMEI7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQ7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLGdDQUFnQyxFQUFFO0FBQ3hFLHFDQUFxQyxvQkFBb0IsRUFBRTtBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLCtCQUErQixFQUFFO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsNkRBQTZEO0FBQ25HO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QiLCJmaWxlIjoiY29tcG9uZW50cy90cmlwLWZpbmRlci9hdXRvY29tcGxldGUvYXV0b2NvbXBsZXRlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2RlY29yYXRlID0gKHRoaXMgJiYgdGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn07XHJcbnZhciBfX21ldGFkYXRhID0gKHRoaXMgJiYgdGhpcy5fX21ldGFkYXRhKSB8fCBmdW5jdGlvbiAoaywgdikge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xyXG59O1xyXG52YXIgX192YWx1ZXMgPSAodGhpcyAmJiB0aGlzLl9fdmFsdWVzKSB8fCBmdW5jdGlvbiAobykge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59O1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBhdXJlbGlhX2ZyYW1ld29ya18xID0gcmVxdWlyZShcImF1cmVsaWEtZnJhbWV3b3JrXCIpO1xyXG52YXIgYWNjZW50TWFwXzEgPSByZXF1aXJlKFwiLi9hY2NlbnRNYXBcIik7XHJcbnZhciBLZXlDb2RlXzEgPSByZXF1aXJlKFwiLi9LZXlDb2RlXCIpO1xyXG52YXIgVHJpcEZpbmRlclJlcG9zaXRvcnlfMSA9IHJlcXVpcmUoXCIuL1RyaXBGaW5kZXJSZXBvc2l0b3J5XCIpO1xyXG52YXIgQXV0b2NvbXBsZXRlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gQXV0b2NvbXBsZXRlKHJlcG9zaXRvcnkpIHtcclxuICAgICAgICB0aGlzLnJlcG9zaXRvcnkgPSByZXBvc2l0b3J5O1xyXG4gICAgICAgIHRoaXMuZmV0Y2hVcmwgPSAnJztcclxuICAgICAgICB0aGlzLmFsbFNlYXJjaENyaXRlcmlhID0gW107XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFNlYXJjaENyaXRlcmlhID0gbnVsbDtcclxuICAgICAgICB0aGlzLm1vZGlmaWVyID0gJyc7XHJcbiAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmhpZ2hsaWdodEluZGV4ID0gLTE7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hRdWVyeSA9ICcnO1xyXG4gICAgICAgIHRoaXMuY2F0ZWdvcmllc01hdGNoaW5nU2VhcmNoID0gW107XHJcbiAgICAgICAgdGhpcy5zb3J0ZWRDYXRlZ29yaWVzID0gW1xyXG4gICAgICAgICAgICB7IHR5cGU6IDMsIGhlYWRlcjogJ1ZhY2F0aW9uIFN0eWxlcycsIHNvcnRPcmRlcjogMSwgc2VhcmNoQ3JpdGVyaWE6IFtdIH0sXHJcbiAgICAgICAgICAgIHsgdHlwZTogMSwgaGVhZGVyOiAnRGVzdGluYXRpb25zJywgc29ydE9yZGVyOiA1LCBzZWFyY2hDcml0ZXJpYTogW10gfSxcclxuICAgICAgICAgICAgeyB0eXBlOiAyLCBoZWFkZXI6ICdSZWdpb25zJywgc29ydE9yZGVyOiAyLCBzZWFyY2hDcml0ZXJpYTogW10gfSxcclxuICAgICAgICAgICAgeyB0eXBlOiA0LCBoZWFkZXI6ICdDb3VudHJpZXMnLCBzb3J0T3JkZXI6IDMsIHNlYXJjaENyaXRlcmlhOiBbXSB9LFxyXG4gICAgICAgICAgICB7IHR5cGU6IDUsIGhlYWRlcjogJ1N0YXRlcyAmIFByb3ZpbmNlcycsIHNvcnRPcmRlcjogNCwgc2VhcmNoQ3JpdGVyaWE6IFtdIH0sXHJcbiAgICAgICAgICAgIHsgdHlwZTogNiwgaGVhZGVyOiAnSG90ZWxzICZhbXA7IFJlc29ydHMnLCBzb3J0T3JkZXI6IDYsIHNlYXJjaENyaXRlcmlhOiBbXSB9LFxyXG4gICAgICAgICAgICB7IHR5cGU6IDcsIGhlYWRlcjogJ0FjY29tbW9kYXRpb25zJywgc29ydE9yZGVyOiA3LCBzZWFyY2hDcml0ZXJpYTogW10gfSxcclxuICAgICAgICAgICAgeyB0eXBlOiA4LCBoZWFkZXI6ICdFeHBlcmllbmNlcycsIHNvcnRPcmRlcjogOCwgc2VhcmNoQ3JpdGVyaWE6IFtdIH1cclxuICAgICAgICBdO1xyXG4gICAgfVxyXG4gICAgQXV0b2NvbXBsZXRlLnByb3RvdHlwZS5hdHRhY2hlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIGlmICh0aGlzLmZldGNoVXJsKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVwb3NpdG9yeVxyXG4gICAgICAgICAgICAgICAgLmZldGNoU2VhcmNoQ3JpdGVyaWEodGhpcy5mZXRjaFVybClcclxuICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChzZWFyY2hDcml0ZXJpYSkgeyByZXR1cm4gX3RoaXMuaW5pdChzZWFyY2hDcml0ZXJpYSk7IH0pO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBBdXRvY29tcGxldGUucHJvdG90eXBlLmNsZWFyRmlsdGVycyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubW9kaWZpZXIgPSAnJztcclxuICAgICAgICB0aGlzLmNhdGVnb3JpZXNNYXRjaGluZ1NlYXJjaCA9IHRoaXMuZ2V0T3B0aW9uc01hdGNoaW5nU2VhcmNoKCk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hJbnB1dEZpZWxkLmZvY3VzKCk7XHJcbiAgICAgICAgJCh0aGlzLmF1dG9jb21wbGV0ZUVsZW1lbnQpLm9mZignY2xpY2tvdXRzaWRlIHRvdWNoc3RhcnRvdXRzaWRlJyk7XHJcbiAgICB9O1xyXG4gICAgQXV0b2NvbXBsZXRlLnByb3RvdHlwZS5jbGVhclNlYXJjaCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkU2VhcmNoQ3JpdGVyaWEgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoUXVlcnkgPSAnJztcclxuICAgICAgICB0aGlzLmNsZWFyRmlsdGVycygpO1xyXG4gICAgfTtcclxuICAgIEF1dG9jb21wbGV0ZS5wcm90b3R5cGUuaGFuZGxlS2V5UHJlc3MgPSBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleUNvZGUpIHtcclxuICAgICAgICAgICAgY2FzZSBLZXlDb2RlXzEuS2V5Q29kZS5Eb3duOlxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRJbmRleCsrO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0SXRlbSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93T3B0aW9ucygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZV8xLktleUNvZGUuVXA6XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZ2hsaWdodEluZGV4LS07XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRJdGVtKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBLZXlDb2RlXzEuS2V5Q29kZS5FbnRlcjpcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U2VhcmNoSXRlbSh0aGlzLmhpZ2hsaWdodEluZGV4KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0SW5kZXggPSAtMTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRJbmRleCA9IC0xO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93T3B0aW9ucygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIEF1dG9jb21wbGV0ZS5wcm90b3R5cGUuZmlsdGVyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuY2F0ZWdvcmllc01hdGNoaW5nU2VhcmNoID0gdGhpcy5nZXRPcHRpb25zTWF0Y2hpbmdTZWFyY2goKTtcclxuICAgICAgICBpZiAoIXRoaXMuaXNPcGVuKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3BlbigpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBBdXRvY29tcGxldGUucHJvdG90eXBlLmdldE9wdGlvbnNNYXRjaGluZ1NlYXJjaCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNvcnRlZENhdGVnb3JpZXNcclxuICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoc29ydCkge1xyXG4gICAgICAgICAgICBzb3J0LnNlYXJjaENyaXRlcmlhID0gX3RoaXMuYWxsU2VhcmNoQ3JpdGVyaWEuZmlsdGVyKGZ1bmN0aW9uIChpKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2FuaXRpemVkT3B0aW9uID0gX3RoaXMuc2FuaXRpemVTdHJpbmcoaS50ZXh0KTtcclxuICAgICAgICAgICAgICAgIHZhciBzYW5pdGl6ZWRTZWFyY2ggPSBfdGhpcy5zYW5pdGl6ZVN0cmluZyhfdGhpcy5zZWFyY2hRdWVyeSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKGkudHlwZSA9PT0gc29ydC50eXBlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgc2FuaXRpemVkT3B0aW9uLmluZGV4T2Yoc2FuaXRpemVkU2VhcmNoKSA+PSAwKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiBzb3J0O1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKGNhdGVnb3J5KSB7IHJldHVybiBjYXRlZ29yeS5zZWFyY2hDcml0ZXJpYS5sZW5ndGggPiAwOyB9KVxyXG4gICAgICAgICAgICAuc29ydChmdW5jdGlvbiAobCwgcikgeyByZXR1cm4gbC5zb3J0T3JkZXIgLSByLnNvcnRPcmRlcjsgfSk7XHJcbiAgICB9O1xyXG4gICAgQXV0b2NvbXBsZXRlLnByb3RvdHlwZS5mb2N1cyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmZpbHRlcigpO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoSW5wdXRGaWVsZC5mb2N1cygpO1xyXG4gICAgfTtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBdXRvY29tcGxldGUucHJvdG90eXBlLCBcImhhc01hdGNoZXNcIiwge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gIXRoaXMuaXNTZWFyY2hDcml0ZXJpYUxvYWRlZCB8fCB0aGlzLmNhdGVnb3JpZXNNYXRjaGluZ1NlYXJjaC5sZW5ndGggPiAwO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgIH0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEF1dG9jb21wbGV0ZS5wcm90b3R5cGUsIFwiaXNTZWFyY2hDcml0ZXJpYUxvYWRlZFwiLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFsbFNlYXJjaENyaXRlcmlhLmxlbmd0aCA+IDA7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICBBdXRvY29tcGxldGUucHJvdG90eXBlLmhpZ2hsaWdodEl0ZW0gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB2YXIgc2VhcmNoQ3JpdGVyaWFMaXN0ID0gdGhpcy5jYXRlZ29yaWVzTWF0Y2hpbmdTZWFyY2hcclxuICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoY2F0ZWdvcnkpIHsgcmV0dXJuIGNhdGVnb3J5LnNlYXJjaENyaXRlcmlhOyB9KVxyXG4gICAgICAgICAgICAucmVkdWNlKGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhLmNvbmNhdChiKTsgfSwgW10pO1xyXG4gICAgICAgIHZhciBtYXhIaWdobGlnaHRJbmRleCA9IHNlYXJjaENyaXRlcmlhTGlzdC5sZW5ndGggLSAxO1xyXG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0SW5kZXggPSBNYXRoLm1heCgtMSwgTWF0aC5taW4obWF4SGlnaGxpZ2h0SW5kZXgsIHRoaXMuaGlnaGxpZ2h0SW5kZXgpKTtcclxuICAgICAgICB0aGlzLnJlbW92ZUhpZ2hsaWdodGluZygpO1xyXG4gICAgICAgIGlmICh0aGlzLmhpZ2hsaWdodEluZGV4ID49IDApIHtcclxuICAgICAgICAgICAgc2VhcmNoQ3JpdGVyaWFMaXN0W3RoaXMuaGlnaGxpZ2h0SW5kZXhdLmlzSGlnaGxpZ2h0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLnNjcm9sbFRvSGlnaGxpZ2h0ZWRJdGVtKCk7IH0sIDApO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBBdXRvY29tcGxldGUucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoc2VhcmNoQ3JpdGVyaWEpIHtcclxuICAgICAgICB0aGlzLmFsbFNlYXJjaENyaXRlcmlhID0gc2VhcmNoQ3JpdGVyaWE7XHJcbiAgICAgICAgdGhpcy5jYXRlZ29yaWVzTWF0Y2hpbmdTZWFyY2ggPSB0aGlzLmdldE9wdGlvbnNNYXRjaGluZ1NlYXJjaCgpO1xyXG4gICAgfTtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBdXRvY29tcGxldGUucHJvdG90eXBlLCBcImlzU2VhcmNoaW5nXCIsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoUXVlcnkubGVuZ3RoID4gMDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXHJcbiAgICB9KTtcclxuICAgIEF1dG9jb21wbGV0ZS5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm1vZGlmaWVyID0gJ2F1dG9jb21wbGV0ZS0taXMtb3Blbic7XHJcbiAgICAgICAgJCh0aGlzLmF1dG9jb21wbGV0ZUVsZW1lbnQpLm9uKCdjbGlja291dHNpZGUgdG91Y2hzdGFydG91dHNpZGUnLCBmdW5jdGlvbiAoZXZlbnQpIHsgcmV0dXJuIF90aGlzLmNsZWFyRmlsdGVycygpOyB9KTtcclxuICAgIH07XHJcbiAgICBBdXRvY29tcGxldGUucHJvdG90eXBlLnJlbW92ZUhpZ2hsaWdodGluZyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmNhdGVnb3JpZXNNYXRjaGluZ1NlYXJjaC5tYXAoZnVuY3Rpb24gKGNhdGVnb3J5KSB7IHJldHVybiBjYXRlZ29yeS5zZWFyY2hDcml0ZXJpYS5mb3JFYWNoKGZ1bmN0aW9uIChjcml0ZXJpYSkgeyByZXR1cm4gY3JpdGVyaWEuaXNIaWdobGlnaHRlZCA9IGZhbHNlOyB9KTsgfSk7XHJcbiAgICB9O1xyXG4gICAgQXV0b2NvbXBsZXRlLnByb3RvdHlwZS5zYW5pdGl6ZVN0cmluZyA9IGZ1bmN0aW9uIChpbnB1dFN0cmluZykge1xyXG4gICAgICAgIHZhciBzdHIgPSBpbnB1dFN0cmluZy50b0xvY2FsZUxvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgIC8vIHJlcGxhY2UgbXVsdGlwbGUgc3BhY2VzIHdpdGggc2luZ2xlIHNwYWNlOlxyXG4gICAgICAgICAgICAucmVwbGFjZSgvICsoPz0gKS9nLCAnJylcclxuICAgICAgICAgICAgLnRyaW0oKVxyXG4gICAgICAgICAgICAvLyByZW1vdmUgY29tbWFzLCBwZXJpb2RzLCBhbmQgYXBvc3Ryb3BoZXM6XHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC8sL2csICcnKVxyXG4gICAgICAgICAgICAucmVwbGFjZSgvXFwuL2csICcnKVxyXG4gICAgICAgICAgICAucmVwbGFjZSgvXFwnL2csICcnKVxyXG4gICAgICAgICAgICAucmVwbGFjZSgvXFzigJkvZywgJycpO1xyXG4gICAgICAgIHZhciBub3JtYWxpemVkU3RyaW5nID0gJyc7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgZm9yICh2YXIgc3RyXzEgPSBfX3ZhbHVlcyhzdHIpLCBzdHJfMV8xID0gc3RyXzEubmV4dCgpOyAhc3RyXzFfMS5kb25lOyBzdHJfMV8xID0gc3RyXzEubmV4dCgpKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2hhcmFjdGVyID0gc3RyXzFfMS52YWx1ZTtcclxuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRTdHJpbmcgKz0gYWNjZW50TWFwXzEuYWNjZW50TWFwW2NoYXJhY3Rlcl0gfHwgY2hhcmFjdGVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3RyXzFfMSAmJiAhc3RyXzFfMS5kb25lICYmIChfYSA9IHN0cl8xLnJldHVybikpIF9hLmNhbGwoc3RyXzEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cclxuICAgICAgICB9XHJcbiAgICAgICAgc3RyID0gbm9ybWFsaXplZFN0cmluZztcclxuICAgICAgICByZXR1cm4gc3RyO1xyXG4gICAgICAgIHZhciBlXzEsIF9hO1xyXG4gICAgfTtcclxuICAgIEF1dG9jb21wbGV0ZS5wcm90b3R5cGUuc2Nyb2xsVG9IaWdobGlnaHRlZEl0ZW0gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyICRyZXN1bHRzID0gJCh0aGlzLnNlYXJjaFJlc3VsdHNFbGVtZW50KTtcclxuICAgICAgICB2YXIgJHNlbGVjdGVkSXRlbSA9ICRyZXN1bHRzLmZpbmQoJy5tYXRjaGVkLXJlc3VsdHNfX2l0ZW0tLWlzLXNlbGVjdGVkJyk7XHJcbiAgICAgICAgaWYgKCRzZWxlY3RlZEl0ZW0ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHZhciBzZWxlY3RlZEluZGV4ID0gdGhpcy5oaWdobGlnaHRJbmRleCAtIHRoaXMuY2F0ZWdvcmllc01hdGNoaW5nU2VhcmNoLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIHRoZXJlIGlzIGEgc2Nyb2xsIGJhciwgaWYgdGhlcmUgaXMgc2Nyb2xsIHRocm91Z2ggbGlzdCBhcyBpdCBtb3ZlcyBzZWxlY3Rpb25cclxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkSW5kZXggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBmaXJzdCBlbGVtZW50IGlzIGhpZ2hsaWdodGVkIHNjcm9sbCBhbGwgdGhlIHdheSB0byB0aGUgdG9wXHJcbiAgICAgICAgICAgICAgICAkcmVzdWx0cy5zY3JvbGxUb3AoMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGhiID0gJHNlbGVjdGVkSXRlbS5vZmZzZXQoKS50b3AgK1xyXG4gICAgICAgICAgICAgICAgJHNlbGVjdGVkSXRlbS5vdXRlckhlaWdodCh0cnVlKTtcclxuICAgICAgICAgICAgdmFyIHJiID0gJHJlc3VsdHMub2Zmc2V0KCkudG9wICsgJHJlc3VsdHMub3V0ZXJIZWlnaHQodHJ1ZSk7XHJcbiAgICAgICAgICAgIGlmIChoYiA+IHJiKSB7XHJcbiAgICAgICAgICAgICAgICAkcmVzdWx0cy5zY3JvbGxUb3AoJHJlc3VsdHMuc2Nyb2xsVG9wKCkgKyAoaGIgLSByYikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciB5ID0gJHNlbGVjdGVkSXRlbS5vZmZzZXQoKS50b3AgLSAkcmVzdWx0cy5vZmZzZXQoKS50b3A7XHJcbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgdG9wIG9mIHRoZSBlbGVtZW50IGlzIHZpc2libGVcclxuICAgICAgICAgICAgaWYgKHkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAkcmVzdWx0cy5zY3JvbGxUb3AoJHJlc3VsdHMuc2Nyb2xsVG9wKCkgKyB5KTsgLy8geSBpcyBuZWdhdGl2ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIEF1dG9jb21wbGV0ZS5wcm90b3R5cGUuc2VsZWN0U2VhcmNoSXRlbSA9IGZ1bmN0aW9uIChpbmRleCkge1xyXG4gICAgICAgIHZhciBzZWxlY3RlZFNlYXJjaE9wdGlvbjtcclxuICAgICAgICBzZWxlY3RlZFNlYXJjaE9wdGlvbiA9IHRoaXMuY2F0ZWdvcmllc01hdGNoaW5nU2VhcmNoXHJcbiAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKGNhdGVnb3J5KSB7IHJldHVybiBjYXRlZ29yeS5zZWFyY2hDcml0ZXJpYTsgfSlcclxuICAgICAgICAgICAgLnJlZHVjZShmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYS5jb25jYXQoYik7IH0sIFtdKVtpbmRleF07XHJcbiAgICAgICAgdGhpcy5zZWxlY3RJdGVtKHNlbGVjdGVkU2VhcmNoT3B0aW9uKTtcclxuICAgIH07XHJcbiAgICBBdXRvY29tcGxldGUucHJvdG90eXBlLnNlbGVjdEl0ZW0gPSBmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNlYXJjaENyaXRlcmlhID0gaXRlbTtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hRdWVyeSA9IGl0ZW0udGV4dDtcclxuICAgICAgICAgICAgdGhpcy5jbGVhckZpbHRlcnMoKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5zZWFyY2hGdW5jdGlvbigpOyB9LCAwKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgQXV0b2NvbXBsZXRlLnByb3RvdHlwZS5zaG93T3B0aW9ucyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmZpbHRlcigpO1xyXG4gICAgICAgIGlmICh0aGlzLmhhc01hdGNoZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRJdGVtKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuYmluZGFibGUsXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIFN0cmluZylcclxuICAgIF0sIEF1dG9jb21wbGV0ZS5wcm90b3R5cGUsIFwiZmV0Y2hVcmxcIiwgdm9pZCAwKTtcclxuICAgIF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuYmluZGFibGUsXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIFN0cmluZylcclxuICAgIF0sIEF1dG9jb21wbGV0ZS5wcm90b3R5cGUsIFwicGxhY2Vob2xkZXJcIiwgdm9pZCAwKTtcclxuICAgIF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuYmluZGFibGUsXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEFycmF5KVxyXG4gICAgXSwgQXV0b2NvbXBsZXRlLnByb3RvdHlwZSwgXCJhbGxTZWFyY2hDcml0ZXJpYVwiLCB2b2lkIDApO1xyXG4gICAgX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5iaW5kYWJsZSxcclxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxyXG4gICAgXSwgQXV0b2NvbXBsZXRlLnByb3RvdHlwZSwgXCJzZWxlY3RlZFNlYXJjaENyaXRlcmlhXCIsIHZvaWQgMCk7XHJcbiAgICBfX2RlY29yYXRlKFtcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLmJpbmRhYmxlLFxyXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBGdW5jdGlvbilcclxuICAgIF0sIEF1dG9jb21wbGV0ZS5wcm90b3R5cGUsIFwic2VhcmNoRnVuY3Rpb25cIiwgdm9pZCAwKTtcclxuICAgIF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuYmluZGFibGUoeyBkZWZhdWx0QmluZGluZ01vZGU6IGF1cmVsaWFfZnJhbWV3b3JrXzEuYmluZGluZ01vZGUudHdvV2F5IH0pLFxyXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBTdHJpbmcpXHJcbiAgICBdLCBBdXRvY29tcGxldGUucHJvdG90eXBlLCBcIm1vZGlmaWVyXCIsIHZvaWQgMCk7XHJcbiAgICBfX2RlY29yYXRlKFtcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLmNvbXB1dGVkRnJvbSgnY2F0ZWdvcmllc01hdGNoaW5nU2VhcmNoJywgJ2lzU2VhcmNoQ3JpdGVyaWFMb2FkZWQnKSxcclxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgQm9vbGVhbiksXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtdKVxyXG4gICAgXSwgQXV0b2NvbXBsZXRlLnByb3RvdHlwZSwgXCJoYXNNYXRjaGVzXCIsIG51bGwpO1xyXG4gICAgX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5jb21wdXRlZEZyb20oJ2FsbFNlYXJjaENyaXRlcmlhJyksXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEJvb2xlYW4pLFxyXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbXSlcclxuICAgIF0sIEF1dG9jb21wbGV0ZS5wcm90b3R5cGUsIFwiaXNTZWFyY2hDcml0ZXJpYUxvYWRlZFwiLCBudWxsKTtcclxuICAgIF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuY29tcHV0ZWRGcm9tKCdzZWFyY2hRdWVyeScpLFxyXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpLFxyXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbXSlcclxuICAgIF0sIEF1dG9jb21wbGV0ZS5wcm90b3R5cGUsIFwiaXNTZWFyY2hpbmdcIiwgbnVsbCk7XHJcbiAgICBBdXRvY29tcGxldGUgPSBfX2RlY29yYXRlKFtcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLmF1dG9pbmplY3QoKSxcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLmNvbnRhaW5lcmxlc3MsXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtUcmlwRmluZGVyUmVwb3NpdG9yeV8xLlRyaXBGaW5kZXJSZXBvc2l0b3J5XSlcclxuICAgIF0sIEF1dG9jb21wbGV0ZSk7XHJcbiAgICByZXR1cm4gQXV0b2NvbXBsZXRlO1xyXG59KCkpO1xyXG5leHBvcnRzLkF1dG9jb21wbGV0ZSA9IEF1dG9jb21wbGV0ZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/trip-finder/autocomplete/autocomplete\n')},"components/trip-finder/autocomplete/autocomplete.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<div class=\\"autocomplete ${modifier}\\" ref=\\"autocompleteElement\\">\\r\\n\\r\\n\\t\\t<div class=\\"autocomplete__search-input middle-xs ${isSearching || isOpen ? \'autocomplete__search-input--is-active\' : \'\'}\\">\\r\\n\\t\\t\\t<svg class=\\"ds-icon-search ds-icon-md autocomplete__search-icon\\">\\r\\n\\t\\t\\t\\t<use xlink:href=\\"#ds-icon-search\\"/>\\r\\n\\t\\t\\t<\/svg>\\r\\n\\t\\t\\t<input click.delegate=\\"showOptions()\\" keyup.delegate=\\"handleKeyPress($event)\\" class=\\"autocomplete__search-input-field\\"\\r\\n\\t\\t\\t placeholder=\\"Where would&nbsp;you like&nbsp;to&nbsp;go?\\" ref=\\"searchInputField\\" tabindex=\\"0\\" type=\\"text\\" value.bind=\\"searchQuery\\">\\r\\n\\r\\n\\t\\t\\t<div class=\\"autocomplete__search-clear ${isOpen || isSearching ? \'autocomplete__search-clear--is-active\' : \'\'}\\" click.delegate=\\"clearSearch()\\">\\r\\n\\t\\t\\t\\t<svg class=\\"ds-icon-close ds-icon-md autocomplete__close-icon\\">\\r\\n\\t\\t\\t\\t\\t<use xlink:href=\\"#ds-icon-close\\"/>\\r\\n\\t\\t\\t\\t<\/svg>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t<\/div>\\r\\n\\r\\n\\t\\t<div class=\\"autocomplete__search-results-container\\">\\r\\n\\t\\t\\t<div class=\\"autocomplete__search-results\\" if.bind=\\"isOpen\\" ref=\\"searchResultsElement\\">\\r\\n\\r\\n\\t\\t\\t\\t<div if.bind=\\"!isSearchCriteriaLoaded\\" class=\\"autocomplete__loading middle-xs\\">\\r\\n\\t\\t\\t\\t\\t<loader-horizontal><\/loader-horizontal>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t\\t<div class=\\"autocomplete__no-results\\" if.bind=\\"!hasMatches\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\"autocomplete__no-results-header ds-healine-small\\">Sorry, no results were found.<\/div>\\r\\n\\t\\t\\t\\t\\t<div class=\\"ds-p-base\\">Try a less specific search.<\/div>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t\\t<ul class=\\"autocomplete__matched-results\\" if.bind=\\"hasMatches\\">\\r\\n\\t\\t\\t\\t\\t<matched-results\\r\\n\\t\\t\\t\\t\\t\\trepeat.for=\\"category of categoriesMatchingSearch\\"\\r\\n\\t\\t\\t\\t\\t\\theading.bind=\\"category.header\\"\\r\\n\\t\\t\\t\\t\\t\\tresults.bind=\\"category.searchCriteria\\"\\r\\n\\t\\t\\t\\t\\t\\ton-select.call=\\"selectItem(item)\\"\\r\\n\\t\\t\\t\\t\\t\\tsearch-query.bind=\\"searchQuery\\">\\r\\n\\t\\t\\t\\t\\t<\/matched-results>\\r\\n\\t\\t\\t\\t<\/ul>\\r\\n\\r\\n\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t<div class=\\"autocomplete__fadeout\\"><\/div>\\r\\n\\t\\t<\/div>\\r\\n\\r\\n\\t<\/div>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy90cmlwLWZpbmRlci9hdXRvY29tcGxldGUvYXV0b2NvbXBsZXRlLmh0bWw/MTU1YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw4REFBOEQsU0FBUywrRkFBK0YscUVBQXFFLGlVQUFpVSxjQUFjLFFBQVEsK0lBQStJLHFFQUFxRSIsImZpbGUiOiJjb21wb25lbnRzL3RyaXAtZmluZGVyL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUuaHRtbC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gXCI8dGVtcGxhdGU+XFxyXFxuXFx0PGRpdiBjbGFzcz1cXFwiYXV0b2NvbXBsZXRlICR7bW9kaWZpZXJ9XFxcIiByZWY9XFxcImF1dG9jb21wbGV0ZUVsZW1lbnRcXFwiPlxcclxcblxcclxcblxcdFxcdDxkaXYgY2xhc3M9XFxcImF1dG9jb21wbGV0ZV9fc2VhcmNoLWlucHV0IG1pZGRsZS14cyAke2lzU2VhcmNoaW5nIHx8IGlzT3BlbiA/ICdhdXRvY29tcGxldGVfX3NlYXJjaC1pbnB1dC0taXMtYWN0aXZlJyA6ICcnfVxcXCI+XFxyXFxuXFx0XFx0XFx0PHN2ZyBjbGFzcz1cXFwiZHMtaWNvbi1zZWFyY2ggZHMtaWNvbi1tZCBhdXRvY29tcGxldGVfX3NlYXJjaC1pY29uXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHQ8dXNlIHhsaW5rOmhyZWY9XFxcIiNkcy1pY29uLXNlYXJjaFxcXCIvPlxcclxcblxcdFxcdFxcdDwvc3ZnPlxcclxcblxcdFxcdFxcdDxpbnB1dCBjbGljay5kZWxlZ2F0ZT1cXFwic2hvd09wdGlvbnMoKVxcXCIga2V5dXAuZGVsZWdhdGU9XFxcImhhbmRsZUtleVByZXNzKCRldmVudClcXFwiIGNsYXNzPVxcXCJhdXRvY29tcGxldGVfX3NlYXJjaC1pbnB1dC1maWVsZFxcXCJcXHJcXG5cXHRcXHRcXHQgcGxhY2Vob2xkZXI9XFxcIldoZXJlIHdvdWxkJm5ic3A7eW91IGxpa2UmbmJzcDt0byZuYnNwO2dvP1xcXCIgcmVmPVxcXCJzZWFyY2hJbnB1dEZpZWxkXFxcIiB0YWJpbmRleD1cXFwiMFxcXCIgdHlwZT1cXFwidGV4dFxcXCIgdmFsdWUuYmluZD1cXFwic2VhcmNoUXVlcnlcXFwiPlxcclxcblxcclxcblxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImF1dG9jb21wbGV0ZV9fc2VhcmNoLWNsZWFyICR7aXNPcGVuIHx8IGlzU2VhcmNoaW5nID8gJ2F1dG9jb21wbGV0ZV9fc2VhcmNoLWNsZWFyLS1pcy1hY3RpdmUnIDogJyd9XFxcIiBjbGljay5kZWxlZ2F0ZT1cXFwiY2xlYXJTZWFyY2goKVxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0PHN2ZyBjbGFzcz1cXFwiZHMtaWNvbi1jbG9zZSBkcy1pY29uLW1kIGF1dG9jb21wbGV0ZV9fY2xvc2UtaWNvblxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PHVzZSB4bGluazpocmVmPVxcXCIjZHMtaWNvbi1jbG9zZVxcXCIvPlxcclxcblxcdFxcdFxcdFxcdDwvc3ZnPlxcclxcblxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdDwvZGl2PlxcclxcblxcclxcblxcdFxcdDxkaXYgY2xhc3M9XFxcImF1dG9jb21wbGV0ZV9fc2VhcmNoLXJlc3VsdHMtY29udGFpbmVyXFxcIj5cXHJcXG5cXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJhdXRvY29tcGxldGVfX3NlYXJjaC1yZXN1bHRzXFxcIiBpZi5iaW5kPVxcXCJpc09wZW5cXFwiIHJlZj1cXFwic2VhcmNoUmVzdWx0c0VsZW1lbnRcXFwiPlxcclxcblxcclxcblxcdFxcdFxcdFxcdDxkaXYgaWYuYmluZD1cXFwiIWlzU2VhcmNoQ3JpdGVyaWFMb2FkZWRcXFwiIGNsYXNzPVxcXCJhdXRvY29tcGxldGVfX2xvYWRpbmcgbWlkZGxlLXhzXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8bG9hZGVyLWhvcml6b250YWw+PC9sb2FkZXItaG9yaXpvbnRhbD5cXHJcXG5cXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHJcXG5cXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJhdXRvY29tcGxldGVfX25vLXJlc3VsdHNcXFwiIGlmLmJpbmQ9XFxcIiFoYXNNYXRjaGVzXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJhdXRvY29tcGxldGVfX25vLXJlc3VsdHMtaGVhZGVyIGRzLWhlYWxpbmUtc21hbGxcXFwiPlNvcnJ5LCBubyByZXN1bHRzIHdlcmUgZm91bmQuPC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiZHMtcC1iYXNlXFxcIj5UcnkgYSBsZXNzIHNwZWNpZmljIHNlYXJjaC48L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHJcXG5cXHRcXHRcXHRcXHQ8dWwgY2xhc3M9XFxcImF1dG9jb21wbGV0ZV9fbWF0Y2hlZC1yZXN1bHRzXFxcIiBpZi5iaW5kPVxcXCJoYXNNYXRjaGVzXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8bWF0Y2hlZC1yZXN1bHRzXFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0cmVwZWF0LmZvcj1cXFwiY2F0ZWdvcnkgb2YgY2F0ZWdvcmllc01hdGNoaW5nU2VhcmNoXFxcIlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdGhlYWRpbmcuYmluZD1cXFwiY2F0ZWdvcnkuaGVhZGVyXFxcIlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdHJlc3VsdHMuYmluZD1cXFwiY2F0ZWdvcnkuc2VhcmNoQ3JpdGVyaWFcXFwiXFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0b24tc2VsZWN0LmNhbGw9XFxcInNlbGVjdEl0ZW0oaXRlbSlcXFwiXFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0c2VhcmNoLXF1ZXJ5LmJpbmQ9XFxcInNlYXJjaFF1ZXJ5XFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8L21hdGNoZWQtcmVzdWx0cz5cXHJcXG5cXHRcXHRcXHRcXHQ8L3VsPlxcclxcblxcclxcblxcdFxcdFxcdDwvZGl2PlxcclxcblxcclxcblxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImF1dG9jb21wbGV0ZV9fZmFkZW91dFxcXCI+PC9kaXY+XFxyXFxuXFx0XFx0PC9kaXY+XFxyXFxuXFxyXFxuXFx0PC9kaXY+XFxyXFxuPC90ZW1wbGF0ZT5cXHJcXG5cIjsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///components/trip-finder/autocomplete/autocomplete.html\n')},"components/trip-finder/autocomplete/matched-results/matched-item":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar MatchedItem = /** @class */ (function () {\r\n    function MatchedItem() {\r\n    }\r\n    MatchedItem.prototype.bind = function () {\r\n        this.text = this.searchCriteria.text;\r\n    };\r\n    MatchedItem.prototype.searchQueryChanged = function () {\r\n        var regex = new RegExp(this.searchQuery, \'gi\');\r\n        var matchedText = this.searchCriteria.text.replace(regex, function (str) { return "<span class=\\"matched-results__item--partial-matched-text\\">" + str + "<\/span>"; });\r\n        this.text = matchedText;\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Object)\r\n    ], MatchedItem.prototype, "searchCriteria", void 0);\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", String)\r\n    ], MatchedItem.prototype, "searchQuery", void 0);\r\n    return MatchedItem;\r\n}());\r\nexports.MatchedItem = MatchedItem;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy90cmlwLWZpbmRlci9hdXRvY29tcGxldGUvbWF0Y2hlZC1yZXN1bHRzL21hdGNoZWQtaXRlbS50cz9lOGYyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLFFBQVE7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxjQUFjO0FBQzVELDBCQUEwQixtQkFBTyxDQUFDLG1CQUFtQjtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0ZBQWtGLHlGQUF5RixFQUFFO0FBQzdLO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QiLCJmaWxlIjoiY29tcG9uZW50cy90cmlwLWZpbmRlci9hdXRvY29tcGxldGUvbWF0Y2hlZC1yZXN1bHRzL21hdGNoZWQtaXRlbS5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG52YXIgX19kZWNvcmF0ZSA9ICh0aGlzICYmIHRoaXMuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59O1xyXG52YXIgX19tZXRhZGF0YSA9ICh0aGlzICYmIHRoaXMuX19tZXRhZGF0YSkgfHwgZnVuY3Rpb24gKGssIHYpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShrLCB2KTtcclxufTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgYXVyZWxpYV9mcmFtZXdvcmtfMSA9IHJlcXVpcmUoXCJhdXJlbGlhLWZyYW1ld29ya1wiKTtcclxudmFyIE1hdGNoZWRJdGVtID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gTWF0Y2hlZEl0ZW0oKSB7XHJcbiAgICB9XHJcbiAgICBNYXRjaGVkSXRlbS5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLnRleHQgPSB0aGlzLnNlYXJjaENyaXRlcmlhLnRleHQ7XHJcbiAgICB9O1xyXG4gICAgTWF0Y2hlZEl0ZW0ucHJvdG90eXBlLnNlYXJjaFF1ZXJ5Q2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgcmVnZXggPSBuZXcgUmVnRXhwKHRoaXMuc2VhcmNoUXVlcnksICdnaScpO1xyXG4gICAgICAgIHZhciBtYXRjaGVkVGV4dCA9IHRoaXMuc2VhcmNoQ3JpdGVyaWEudGV4dC5yZXBsYWNlKHJlZ2V4LCBmdW5jdGlvbiAoc3RyKSB7IHJldHVybiBcIjxzcGFuIGNsYXNzPVxcXCJtYXRjaGVkLXJlc3VsdHNfX2l0ZW0tLXBhcnRpYWwtbWF0Y2hlZC10ZXh0XFxcIj5cIiArIHN0ciArIFwiPC9zcGFuPlwiOyB9KTtcclxuICAgICAgICB0aGlzLnRleHQgPSBtYXRjaGVkVGV4dDtcclxuICAgIH07XHJcbiAgICBfX2RlY29yYXRlKFtcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLmJpbmRhYmxlLFxyXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXHJcbiAgICBdLCBNYXRjaGVkSXRlbS5wcm90b3R5cGUsIFwic2VhcmNoQ3JpdGVyaWFcIiwgdm9pZCAwKTtcclxuICAgIF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuYmluZGFibGUsXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIFN0cmluZylcclxuICAgIF0sIE1hdGNoZWRJdGVtLnByb3RvdHlwZSwgXCJzZWFyY2hRdWVyeVwiLCB2b2lkIDApO1xyXG4gICAgcmV0dXJuIE1hdGNoZWRJdGVtO1xyXG59KCkpO1xyXG5leHBvcnRzLk1hdGNoZWRJdGVtID0gTWF0Y2hlZEl0ZW07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///components/trip-finder/autocomplete/matched-results/matched-item\n')},"components/trip-finder/autocomplete/matched-results/matched-item.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<li class=\\"matched-results__item ${searchCriteria.isHighlighted ? \'matched-results__item--is-selected\' : \'\'}\\">\\r\\n\\t\\t<span innerhtml.bind=\\"text\\">\\r\\n\\t<\/li>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy90cmlwLWZpbmRlci9hdXRvY29tcGxldGUvbWF0Y2hlZC1yZXN1bHRzL21hdGNoZWQtaXRlbS5odG1sP2Y2OWQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsc0VBQXNFLHlFQUF5RSIsImZpbGUiOiJjb21wb25lbnRzL3RyaXAtZmluZGVyL2F1dG9jb21wbGV0ZS9tYXRjaGVkLXJlc3VsdHMvbWF0Y2hlZC1pdGVtLmh0bWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IFwiPHRlbXBsYXRlPlxcclxcblxcdDxsaSBjbGFzcz1cXFwibWF0Y2hlZC1yZXN1bHRzX19pdGVtICR7c2VhcmNoQ3JpdGVyaWEuaXNIaWdobGlnaHRlZCA/ICdtYXRjaGVkLXJlc3VsdHNfX2l0ZW0tLWlzLXNlbGVjdGVkJyA6ICcnfVxcXCI+XFxyXFxuXFx0XFx0PHNwYW4gaW5uZXJodG1sLmJpbmQ9XFxcInRleHRcXFwiPlxcclxcblxcdDwvbGk+XFxyXFxuPC90ZW1wbGF0ZT5cXHJcXG5cIjsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///components/trip-finder/autocomplete/matched-results/matched-item.html\n')},"components/trip-finder/autocomplete/matched-results/matched-results":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar MatchedResults = /** @class */ (function () {\r\n    function MatchedResults() {\r\n        this.heading = \'\';\r\n        this.results = [];\r\n    }\r\n    Object.defineProperty(MatchedResults.prototype, "hasMatches", {\r\n        get: function () {\r\n            return this.results.length;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    MatchedResults.prototype.select = function (selectedItem) {\r\n        this.onSelect({ item: selectedItem });\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", String)\r\n    ], MatchedResults.prototype, "heading", void 0);\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Array)\r\n    ], MatchedResults.prototype, "results", void 0);\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Function)\r\n    ], MatchedResults.prototype, "onSelect", void 0);\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", String)\r\n    ], MatchedResults.prototype, "searchQuery", void 0);\r\n    MatchedResults = __decorate([\r\n        aurelia_framework_1.containerless\r\n    ], MatchedResults);\r\n    return MatchedResults;\r\n}());\r\nexports.MatchedResults = MatchedResults;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy90cmlwLWZpbmRlci9hdXRvY29tcGxldGUvbWF0Y2hlZC1yZXN1bHRzL21hdGNoZWQtcmVzdWx0cy50cz81MTJjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLFFBQVE7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxjQUFjO0FBQzVELDBCQUEwQixtQkFBTyxDQUFDLG1CQUFtQjtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSx1QkFBdUIscUJBQXFCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCIsImZpbGUiOiJjb21wb25lbnRzL3RyaXAtZmluZGVyL2F1dG9jb21wbGV0ZS9tYXRjaGVkLXJlc3VsdHMvbWF0Y2hlZC1yZXN1bHRzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2RlY29yYXRlID0gKHRoaXMgJiYgdGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn07XHJcbnZhciBfX21ldGFkYXRhID0gKHRoaXMgJiYgdGhpcy5fX21ldGFkYXRhKSB8fCBmdW5jdGlvbiAoaywgdikge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xyXG59O1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBhdXJlbGlhX2ZyYW1ld29ya18xID0gcmVxdWlyZShcImF1cmVsaWEtZnJhbWV3b3JrXCIpO1xyXG52YXIgTWF0Y2hlZFJlc3VsdHMgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBNYXRjaGVkUmVzdWx0cygpIHtcclxuICAgICAgICB0aGlzLmhlYWRpbmcgPSAnJztcclxuICAgICAgICB0aGlzLnJlc3VsdHMgPSBbXTtcclxuICAgIH1cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXRjaGVkUmVzdWx0cy5wcm90b3R5cGUsIFwiaGFzTWF0Y2hlc1wiLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlc3VsdHMubGVuZ3RoO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgIH0pO1xyXG4gICAgTWF0Y2hlZFJlc3VsdHMucHJvdG90eXBlLnNlbGVjdCA9IGZ1bmN0aW9uIChzZWxlY3RlZEl0ZW0pIHtcclxuICAgICAgICB0aGlzLm9uU2VsZWN0KHsgaXRlbTogc2VsZWN0ZWRJdGVtIH0pO1xyXG4gICAgfTtcclxuICAgIF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuYmluZGFibGUsXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIFN0cmluZylcclxuICAgIF0sIE1hdGNoZWRSZXN1bHRzLnByb3RvdHlwZSwgXCJoZWFkaW5nXCIsIHZvaWQgMCk7XHJcbiAgICBfX2RlY29yYXRlKFtcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLmJpbmRhYmxlLFxyXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBBcnJheSlcclxuICAgIF0sIE1hdGNoZWRSZXN1bHRzLnByb3RvdHlwZSwgXCJyZXN1bHRzXCIsIHZvaWQgMCk7XHJcbiAgICBfX2RlY29yYXRlKFtcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLmJpbmRhYmxlLFxyXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBGdW5jdGlvbilcclxuICAgIF0sIE1hdGNoZWRSZXN1bHRzLnByb3RvdHlwZSwgXCJvblNlbGVjdFwiLCB2b2lkIDApO1xyXG4gICAgX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5iaW5kYWJsZSxcclxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgU3RyaW5nKVxyXG4gICAgXSwgTWF0Y2hlZFJlc3VsdHMucHJvdG90eXBlLCBcInNlYXJjaFF1ZXJ5XCIsIHZvaWQgMCk7XHJcbiAgICBNYXRjaGVkUmVzdWx0cyA9IF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuY29udGFpbmVybGVzc1xyXG4gICAgXSwgTWF0Y2hlZFJlc3VsdHMpO1xyXG4gICAgcmV0dXJuIE1hdGNoZWRSZXN1bHRzO1xyXG59KCkpO1xyXG5leHBvcnRzLk1hdGNoZWRSZXN1bHRzID0gTWF0Y2hlZFJlc3VsdHM7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///components/trip-finder/autocomplete/matched-results/matched-results\n')},"components/trip-finder/autocomplete/matched-results/matched-results.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<li if.bind=\\"hasMatches\\">\\r\\n\\t\\t<ul class=\\"matched-results__list\\">\\r\\n\\t\\t\\t<li if.bind=\\"heading.length\\" class=\\"matched-results__heading ds-label-medium\\">${heading}<\/li>\\r\\n\\t\\t\\t<matched-item\\r\\n\\t\\t\\t\\trepeat.for=\\"result of results\\"\\r\\n\\t\\t\\t\\tsearch-criteria.bind=\\"result\\"\\r\\n\\t\\t\\t\\tclick.delegate=\\"select(result)\\"\\r\\n\\t\\t\\t\\tsearch-query.bind=\\"searchQuery\\">\\r\\n\\t\\t\\t<\/matched-item>\\r\\n\\t\\t<\/ul>\\r\\n\\t<\/li>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy90cmlwLWZpbmRlci9hdXRvY29tcGxldGUvbWF0Y2hlZC1yZXN1bHRzL21hdGNoZWQtcmVzdWx0cy5odG1sPzBiZmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdU1BQXVNLFFBQVEiLCJmaWxlIjoiY29tcG9uZW50cy90cmlwLWZpbmRlci9hdXRvY29tcGxldGUvbWF0Y2hlZC1yZXN1bHRzL21hdGNoZWQtcmVzdWx0cy5odG1sLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBcIjx0ZW1wbGF0ZT5cXHJcXG5cXHQ8bGkgaWYuYmluZD1cXFwiaGFzTWF0Y2hlc1xcXCI+XFxyXFxuXFx0XFx0PHVsIGNsYXNzPVxcXCJtYXRjaGVkLXJlc3VsdHNfX2xpc3RcXFwiPlxcclxcblxcdFxcdFxcdDxsaSBpZi5iaW5kPVxcXCJoZWFkaW5nLmxlbmd0aFxcXCIgY2xhc3M9XFxcIm1hdGNoZWQtcmVzdWx0c19faGVhZGluZyBkcy1sYWJlbC1tZWRpdW1cXFwiPiR7aGVhZGluZ308L2xpPlxcclxcblxcdFxcdFxcdDxtYXRjaGVkLWl0ZW1cXHJcXG5cXHRcXHRcXHRcXHRyZXBlYXQuZm9yPVxcXCJyZXN1bHQgb2YgcmVzdWx0c1xcXCJcXHJcXG5cXHRcXHRcXHRcXHRzZWFyY2gtY3JpdGVyaWEuYmluZD1cXFwicmVzdWx0XFxcIlxcclxcblxcdFxcdFxcdFxcdGNsaWNrLmRlbGVnYXRlPVxcXCJzZWxlY3QocmVzdWx0KVxcXCJcXHJcXG5cXHRcXHRcXHRcXHRzZWFyY2gtcXVlcnkuYmluZD1cXFwic2VhcmNoUXVlcnlcXFwiPlxcclxcblxcdFxcdFxcdDwvbWF0Y2hlZC1pdGVtPlxcclxcblxcdFxcdDwvdWw+XFxyXFxuXFx0PC9saT5cXHJcXG48L3RlbXBsYXRlPlxcclxcblwiOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///components/trip-finder/autocomplete/matched-results/matched-results.html\n')},"components/trip-finder/index":function(module,exports,__webpack_require__){"use strict";eval("\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__(\"aurelia-framework\");\r\nfunction configure(config) {\r\n    config.globalResources([\r\n        './autocomplete/autocomplete',\r\n        './autocomplete/matched-results/matched-results',\r\n        './autocomplete/matched-results/matched-item',\r\n        './trip-finder'\r\n    ]);\r\n}\r\nexports.configure = configure;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy90cmlwLWZpbmRlci9pbmRleC50cz85OTM2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQThDLGNBQWM7QUFDNUQsMEJBQTBCLG1CQUFPLENBQUMsbUJBQW1CO0FBQ3JEO0FBQ0E7QUFDQSxRQUFRLDZCQUFzRTtBQUM5RSxRQUFRLGdEQUF5RjtBQUNqRyxRQUFRLDZDQUFzRjtBQUM5RixRQUFRLGVBQXdEO0FBQ2hFO0FBQ0E7QUFDQSIsImZpbGUiOiJjb21wb25lbnRzL3RyaXAtZmluZGVyL2luZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIGF1cmVsaWFfZnJhbWV3b3JrXzEgPSByZXF1aXJlKFwiYXVyZWxpYS1mcmFtZXdvcmtcIik7XHJcbmZ1bmN0aW9uIGNvbmZpZ3VyZShjb25maWcpIHtcclxuICAgIGNvbmZpZy5nbG9iYWxSZXNvdXJjZXMoW1xyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuUExBVEZPUk0ubW9kdWxlTmFtZSgnLi9hdXRvY29tcGxldGUvYXV0b2NvbXBsZXRlJyksXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5QTEFURk9STS5tb2R1bGVOYW1lKCcuL2F1dG9jb21wbGV0ZS9tYXRjaGVkLXJlc3VsdHMvbWF0Y2hlZC1yZXN1bHRzJyksXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5QTEFURk9STS5tb2R1bGVOYW1lKCcuL2F1dG9jb21wbGV0ZS9tYXRjaGVkLXJlc3VsdHMvbWF0Y2hlZC1pdGVtJyksXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5QTEFURk9STS5tb2R1bGVOYW1lKCcuL3RyaXAtZmluZGVyJylcclxuICAgIF0pO1xyXG59XHJcbmV4cG9ydHMuY29uZmlndXJlID0gY29uZmlndXJlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///components/trip-finder/index\n")},"components/trip-finder/trip-finder":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar ResponsivePageViewModel_1 = __webpack_require__(23);\r\nvar TripFinder = /** @class */ (function () {\r\n    function TripFinder() {\r\n        this.vacationSearchOptionsUrl = \'\';\r\n    }\r\n    TripFinder.prototype.activate = function (model) {\r\n        this.model = model;\r\n        this.vacationSearchOptionsUrl = ResponsivePageViewModel_1.ResponsivePageViewModel.configuration.baseApiUrl + "\\n\\t\\t\\tvacations/SearchOptions?\\n\\t\\t\\taccountuserid=" + window[\'AccountUserId\'] + "\\n\\t\\t\\t&usageid=" + window[\'AccountProductUsageId\'];\r\n    };\r\n    TripFinder.prototype.getSearchCriteria = function (searchType) {\r\n        return this.selectedSearchCriteria.type === searchType ? this.selectedSearchCriteria.id : -1;\r\n    };\r\n    TripFinder.prototype.search = function (event) {\r\n        var criteriaAsQueryParams = this.selectedSearchCriteria.persistenceKey + "=" + this.selectedSearchCriteria.persistenceValue;\r\n        var tripFinderResultsUrl = "/destination-results#/?\\n\\t\\t\\tcheckIn=\\n\\t\\t\\t&checkOut=\\n\\t\\t\\t&" + criteriaAsQueryParams + "\\n\\t\\t\\t&travelers=1";\r\n        var trgt = (this.model.callToAction && this.model.callToAction.newWindow) || (this.model.callToActionLink && this.model.callToActionLink.newWindow) ? \'_blank\' : \'_self\';\r\n        window.open(tripFinderResultsUrl, trgt);\r\n    };\r\n    TripFinder.prototype.scrollIntoView = function ($event) {\r\n        var topPos = $(this.tripFinderElement).offset().top - ($(window).height() - 486) / 2;\r\n        window.scrollTo({\r\n            behavior: \'smooth\',\r\n            left: 0,\r\n            top: topPos\r\n        });\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Object)\r\n    ], TripFinder.prototype, "model", void 0);\r\n    TripFinder = __decorate([\r\n        aurelia_framework_1.autoinject()\r\n    ], TripFinder);\r\n    return TripFinder;\r\n}());\r\nexports.TripFinder = TripFinder;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy90cmlwLWZpbmRlci90cmlwLWZpbmRlci50cz9hNmY0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLFFBQVE7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxjQUFjO0FBQzVELDBCQUEwQixtQkFBTyxDQUFDLG1CQUFtQjtBQUNyRCxnQ0FBZ0MsbUJBQU8sQ0FBQyxFQUErQjtBQUN2RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCIsImZpbGUiOiJjb21wb25lbnRzL3RyaXAtZmluZGVyL3RyaXAtZmluZGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2RlY29yYXRlID0gKHRoaXMgJiYgdGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn07XHJcbnZhciBfX21ldGFkYXRhID0gKHRoaXMgJiYgdGhpcy5fX21ldGFkYXRhKSB8fCBmdW5jdGlvbiAoaywgdikge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xyXG59O1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBhdXJlbGlhX2ZyYW1ld29ya18xID0gcmVxdWlyZShcImF1cmVsaWEtZnJhbWV3b3JrXCIpO1xyXG52YXIgUmVzcG9uc2l2ZVBhZ2VWaWV3TW9kZWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9SZXNwb25zaXZlUGFnZVZpZXdNb2RlbFwiKTtcclxudmFyIFRyaXBGaW5kZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBUcmlwRmluZGVyKCkge1xyXG4gICAgICAgIHRoaXMudmFjYXRpb25TZWFyY2hPcHRpb25zVXJsID0gJyc7XHJcbiAgICB9XHJcbiAgICBUcmlwRmluZGVyLnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uIChtb2RlbCkge1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSBtb2RlbDtcclxuICAgICAgICB0aGlzLnZhY2F0aW9uU2VhcmNoT3B0aW9uc1VybCA9IFJlc3BvbnNpdmVQYWdlVmlld01vZGVsXzEuUmVzcG9uc2l2ZVBhZ2VWaWV3TW9kZWwuY29uZmlndXJhdGlvbi5iYXNlQXBpVXJsICsgXCJcXG5cXHRcXHRcXHR2YWNhdGlvbnMvU2VhcmNoT3B0aW9ucz9cXG5cXHRcXHRcXHRhY2NvdW50dXNlcmlkPVwiICsgd2luZG93WydBY2NvdW50VXNlcklkJ10gKyBcIlxcblxcdFxcdFxcdCZ1c2FnZWlkPVwiICsgd2luZG93WydBY2NvdW50UHJvZHVjdFVzYWdlSWQnXTtcclxuICAgIH07XHJcbiAgICBUcmlwRmluZGVyLnByb3RvdHlwZS5nZXRTZWFyY2hDcml0ZXJpYSA9IGZ1bmN0aW9uIChzZWFyY2hUeXBlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRTZWFyY2hDcml0ZXJpYS50eXBlID09PSBzZWFyY2hUeXBlID8gdGhpcy5zZWxlY3RlZFNlYXJjaENyaXRlcmlhLmlkIDogLTE7XHJcbiAgICB9O1xyXG4gICAgVHJpcEZpbmRlci5wcm90b3R5cGUuc2VhcmNoID0gZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgdmFyIGNyaXRlcmlhQXNRdWVyeVBhcmFtcyA9IHRoaXMuc2VsZWN0ZWRTZWFyY2hDcml0ZXJpYS5wZXJzaXN0ZW5jZUtleSArIFwiPVwiICsgdGhpcy5zZWxlY3RlZFNlYXJjaENyaXRlcmlhLnBlcnNpc3RlbmNlVmFsdWU7XHJcbiAgICAgICAgdmFyIHRyaXBGaW5kZXJSZXN1bHRzVXJsID0gXCIvZGVzdGluYXRpb24tcmVzdWx0cyMvP1xcblxcdFxcdFxcdGNoZWNrSW49XFxuXFx0XFx0XFx0JmNoZWNrT3V0PVxcblxcdFxcdFxcdCZcIiArIGNyaXRlcmlhQXNRdWVyeVBhcmFtcyArIFwiXFxuXFx0XFx0XFx0JnRyYXZlbGVycz0xXCI7XHJcbiAgICAgICAgdmFyIHRyZ3QgPSAodGhpcy5tb2RlbC5jYWxsVG9BY3Rpb24gJiYgdGhpcy5tb2RlbC5jYWxsVG9BY3Rpb24ubmV3V2luZG93KSB8fCAodGhpcy5tb2RlbC5jYWxsVG9BY3Rpb25MaW5rICYmIHRoaXMubW9kZWwuY2FsbFRvQWN0aW9uTGluay5uZXdXaW5kb3cpID8gJ19ibGFuaycgOiAnX3NlbGYnO1xyXG4gICAgICAgIHdpbmRvdy5vcGVuKHRyaXBGaW5kZXJSZXN1bHRzVXJsLCB0cmd0KTtcclxuICAgIH07XHJcbiAgICBUcmlwRmluZGVyLnByb3RvdHlwZS5zY3JvbGxJbnRvVmlldyA9IGZ1bmN0aW9uICgkZXZlbnQpIHtcclxuICAgICAgICB2YXIgdG9wUG9zID0gJCh0aGlzLnRyaXBGaW5kZXJFbGVtZW50KS5vZmZzZXQoKS50b3AgLSAoJCh3aW5kb3cpLmhlaWdodCgpIC0gNDg2KSAvIDI7XHJcbiAgICAgICAgd2luZG93LnNjcm9sbFRvKHtcclxuICAgICAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxyXG4gICAgICAgICAgICBsZWZ0OiAwLFxyXG4gICAgICAgICAgICB0b3A6IHRvcFBvc1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuYmluZGFibGUsXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcclxuICAgIF0sIFRyaXBGaW5kZXIucHJvdG90eXBlLCBcIm1vZGVsXCIsIHZvaWQgMCk7XHJcbiAgICBUcmlwRmluZGVyID0gX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5hdXRvaW5qZWN0KClcclxuICAgIF0sIFRyaXBGaW5kZXIpO1xyXG4gICAgcmV0dXJuIFRyaXBGaW5kZXI7XHJcbn0oKSk7XHJcbmV4cG9ydHMuVHJpcEZpbmRlciA9IFRyaXBGaW5kZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///components/trip-finder/trip-finder\n')},"components/trip-finder/trip-finder.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<div class=\\"trip-finder no-mobile-zoom ${modifier}\\" ref=\\"tripFinderElement\\">\\r\\n\\t\\t<div click.delegate=\'scrollIntoView($event)\' class=\\"trip-finder__container\\">\\r\\n\\t\\t\\t<div class=\\"trip-finder__autocomplete\\">\\r\\n\\t\\t\\t\\t<autocomplete fetch-url=\\"${vacationSearchOptionsUrl}\\"\\r\\n\\t\\t\\t\\t\\tselected-search-criteria.two-way=\\"selectedSearchCriteria\\"\\r\\n\\t\\t\\t\\t\\tsearch-function.call=\\"search()\\">\\r\\n\\t\\t\\t\\t<\/autocomplete>\\r\\n\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t<\/div>\\r\\n\\t<\/div>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy90cmlwLWZpbmRlci90cmlwLWZpbmRlci5odG1sP2VjZGMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNEVBQTRFLFNBQVMsOE1BQThNLHlCQUF5QiIsImZpbGUiOiJjb21wb25lbnRzL3RyaXAtZmluZGVyL3RyaXAtZmluZGVyLmh0bWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IFwiPHRlbXBsYXRlPlxcclxcblxcdDxkaXYgY2xhc3M9XFxcInRyaXAtZmluZGVyIG5vLW1vYmlsZS16b29tICR7bW9kaWZpZXJ9XFxcIiByZWY9XFxcInRyaXBGaW5kZXJFbGVtZW50XFxcIj5cXHJcXG5cXHRcXHQ8ZGl2IGNsaWNrLmRlbGVnYXRlPSdzY3JvbGxJbnRvVmlldygkZXZlbnQpJyBjbGFzcz1cXFwidHJpcC1maW5kZXJfX2NvbnRhaW5lclxcXCI+XFxyXFxuXFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwidHJpcC1maW5kZXJfX2F1dG9jb21wbGV0ZVxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0PGF1dG9jb21wbGV0ZSBmZXRjaC11cmw9XFxcIiR7dmFjYXRpb25TZWFyY2hPcHRpb25zVXJsfVxcXCJcXHJcXG5cXHRcXHRcXHRcXHRcXHRzZWxlY3RlZC1zZWFyY2gtY3JpdGVyaWEudHdvLXdheT1cXFwic2VsZWN0ZWRTZWFyY2hDcml0ZXJpYVxcXCJcXHJcXG5cXHRcXHRcXHRcXHRcXHRzZWFyY2gtZnVuY3Rpb24uY2FsbD1cXFwic2VhcmNoKClcXFwiPlxcclxcblxcdFxcdFxcdFxcdDwvYXV0b2NvbXBsZXRlPlxcclxcblxcdFxcdFxcdDwvZGl2PlxcclxcblxcclxcblxcdFxcdDwvZGl2PlxcclxcblxcdDwvZGl2PlxcclxcbjwvdGVtcGxhdGU+XFxyXFxuXCI7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///components/trip-finder/trip-finder.html\n')},"components/video-gallery/video-gallery":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nvar __read = (this && this.__read) || function (o, n) {\r\n    var m = typeof Symbol === "function" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i["return"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n};\r\nvar __spread = (this && this.__spread) || function () {\r\n    for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_binding_1 = __webpack_require__(1);\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar queryString = __webpack_require__(27);\r\nvar SelectMenuItem_1 = __webpack_require__(13);\r\nvar IPromotionalVideo_1 = __webpack_require__(170);\r\nvar xs = 768;\r\nvar spaceBase = 16;\r\nvar spaceLarge = 32;\r\nvar paginationIncrement = 12;\r\nvar viewAllCategoriesText = \'All Video Categories\';\r\nvar viewAllCategoriesValue = \'-1\';\r\nvar VideoGallery = /** @class */ (function () {\r\n    function VideoGallery() {\r\n        this.displayedVideos = [];\r\n        this.videosMatchingFilter = [];\r\n        this.allVideos = [];\r\n        this.paginationIncrement = paginationIncrement;\r\n        this.paginationCount = paginationIncrement;\r\n        this.totalMatches = 0;\r\n        this.videoCategories = [];\r\n        this.autoplay = false;\r\n    }\r\n    VideoGallery.prototype.activate = function (model) {\r\n        this.model = model;\r\n        this.model.videos = model.videos\r\n            .filter(function (v) { return v.videoProvider === IPromotionalVideo_1.VideoProvider.vidyard && (!!v.videoURL && !v.videoURL.includes(\'.js\')); })\r\n            .filter(function (v, pos, arr) { return arr.map(function (mapObj) { return mapObj[\'videoURL\']; }).indexOf(v[\'videoURL\']) === pos; })\r\n            .sort(function (a, b) { return new Date(b.datePublished).getTime() - new Date(a.datePublished).getTime(); });\r\n        var defaultVideo = this.model.videos[0];\r\n        var videoURL = defaultVideo.videoURL;\r\n        var urlParams = queryString.parse(location.search);\r\n        var id = urlParams[\'id\'];\r\n        if (id) {\r\n            videoURL = id;\r\n        }\r\n        if (videoURL) {\r\n            this.loadVideo(videoURL);\r\n        }\r\n        this.videoCategories = this.model.videos.reduce(function (acc, video) {\r\n            return (video.videoCategory && !acc.find(function (item) { return item.value === video.videoCategory; })) ? __spread(acc, [new SelectMenuItem_1.SelectMenuItem(video.videoCategory, video.videoCategory)]) : acc;\r\n        }, [new SelectMenuItem_1.SelectMenuItem(viewAllCategoriesText, viewAllCategoriesValue)]);\r\n        this.selectedVideoCategory = this.videoCategories[0];\r\n        this.videosMatchingFilter = this.model.videos;\r\n        this.displayedVideos = this.videosMatchingFilter.slice(0, this.paginationIncrement);\r\n        this.totalMatches = this.videosMatchingFilter.length;\r\n        this.paginationCount = Math.min(this.totalMatches, this.paginationCount);\r\n    };\r\n    Object.defineProperty(VideoGallery.prototype, "activeVideoPlayer", {\r\n        get: function () {\r\n            return {\r\n                autoplay: this.autoplay,\r\n                playerType: \'inline\',\r\n                vidyardEmbedCode: this.activeVideo.videoURL,\r\n            };\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(VideoGallery.prototype, "showViewMore", {\r\n        get: function () {\r\n            return this.displayedVideos.length < this.totalMatches;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    VideoGallery.prototype.scrollToActiveVideo = function () {\r\n        var offset = window.innerWidth < xs ? spaceBase : spaceLarge;\r\n        var elementPosition = this.videoGalleryActiveElement.getBoundingClientRect().top;\r\n        var offsetPosition = elementPosition + window.pageYOffset - offset;\r\n        window.scrollTo({\r\n            behavior: \'auto\',\r\n            left: 0,\r\n            top: offsetPosition\r\n        });\r\n    };\r\n    VideoGallery.prototype.scrollToSelectMenu = function () {\r\n        this.videoGalleryElement.scrollIntoView({\r\n            behavior: \'smooth\'\r\n        });\r\n    };\r\n    VideoGallery.prototype.handleVideoGalleryCardClick = function (videoURL) {\r\n        if (this.activeVideo.videoURL !== videoURL) {\r\n            this.autoplay = true;\r\n            this.loadVideo(videoURL);\r\n            this.scrollToActiveVideo();\r\n        }\r\n    };\r\n    VideoGallery.prototype.handleViewMore = function () {\r\n        var numberOfVideos = this.paginationCount + this.paginationIncrement;\r\n        this.paginationCount = (numberOfVideos >= this.videosMatchingFilter.length)\r\n            ? this.videosMatchingFilter.length\r\n            : numberOfVideos;\r\n        this.displayedVideos = this.videosMatchingFilter.slice(0, this.paginationCount);\r\n    };\r\n    VideoGallery.prototype.filterVideos = function () {\r\n        var _this = this;\r\n        this.videosMatchingFilter = (this.selectedVideoCategory.value === viewAllCategoriesValue)\r\n            ? this.model.videos\r\n            : this.model.videos.filter(function (video) { return video.videoCategory === _this.selectedVideoCategory.value; });\r\n        this.totalMatches = this.videosMatchingFilter.length;\r\n        var numberOfVideosToDisplay = paginationIncrement;\r\n        this.paginationCount = (numberOfVideosToDisplay >= this.totalMatches)\r\n            ? this.totalMatches\r\n            : numberOfVideosToDisplay;\r\n        this.displayedVideos = this.videosMatchingFilter.slice(0, this.paginationCount);\r\n    };\r\n    VideoGallery.prototype.loadVideo = function (videoURL) {\r\n        this.activeVideo = this.model.videos.find(function (v) { return v.videoURL === videoURL; });\r\n        var qs = queryString.parse(location.search);\r\n        qs.id = videoURL;\r\n        var urlPath = queryString.stringify(qs);\r\n        window.history.replaceState(null, \'\', "?" + urlPath);\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Object)\r\n    ], VideoGallery.prototype, "model", void 0);\r\n    __decorate([\r\n        aurelia_binding_1.computedFrom(\'activeVideo\'),\r\n        __metadata("design:type", Object),\r\n        __metadata("design:paramtypes", [])\r\n    ], VideoGallery.prototype, "activeVideoPlayer", null);\r\n    __decorate([\r\n        aurelia_binding_1.computedFrom(\'paginationCount\'),\r\n        __metadata("design:type", Object),\r\n        __metadata("design:paramtypes", [])\r\n    ], VideoGallery.prototype, "showViewMore", null);\r\n    return VideoGallery;\r\n}());\r\nexports.VideoGallery = VideoGallery;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy92aWRlby1nYWxsZXJ5L3ZpZGVvLWdhbGxlcnkudHM/M2Q1MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxRQUFRO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixNQUFNLGdCQUFnQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixzQkFBc0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsc0JBQXNCO0FBQ2xEO0FBQ0E7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RCx3QkFBd0IsbUJBQU8sQ0FBQyxDQUFpQjtBQUNqRCwwQkFBMEIsbUJBQU8sQ0FBQyxtQkFBbUI7QUFDckQsa0JBQWtCLG1CQUFPLENBQUMsRUFBYztBQUN4Qyx1QkFBdUIsbUJBQU8sQ0FBQyxFQUErQjtBQUM5RCwwQkFBMEIsbUJBQU8sQ0FBQyxHQUFxQjtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLHVIQUF1SCxFQUFFO0FBQzNKLDRDQUE0QyxtQ0FBbUMsMkJBQTJCLEVBQUUsaUNBQWlDLEVBQUU7QUFDL0ksbUNBQW1DLGtGQUFrRixFQUFFO0FBQ3ZIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzRUFBc0UsMkNBQTJDLEVBQUU7QUFDbkgsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlEQUF5RCxrRUFBa0UsRUFBRTtBQUM3SDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0VBQWdFLGdDQUFnQyxFQUFFO0FBQ2xHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QiLCJmaWxlIjoiY29tcG9uZW50cy92aWRlby1nYWxsZXJ5L3ZpZGVvLWdhbGxlcnkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxudmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufTtcclxudmFyIF9fbWV0YWRhdGEgPSAodGhpcyAmJiB0aGlzLl9fbWV0YWRhdGEpIHx8IGZ1bmN0aW9uIChrLCB2KSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEoaywgdik7XHJcbn07XHJcbnZhciBfX3JlYWQgPSAodGhpcyAmJiB0aGlzLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcclxuICAgIGlmICghbSkgcmV0dXJuIG87XHJcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cclxuICAgIGZpbmFsbHkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cclxuICAgIH1cclxuICAgIHJldHVybiBhcjtcclxufTtcclxudmFyIF9fc3ByZWFkID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZCkgfHwgZnVuY3Rpb24gKCkge1xyXG4gICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgYXVyZWxpYV9iaW5kaW5nXzEgPSByZXF1aXJlKFwiYXVyZWxpYS1iaW5kaW5nXCIpO1xyXG52YXIgYXVyZWxpYV9mcmFtZXdvcmtfMSA9IHJlcXVpcmUoXCJhdXJlbGlhLWZyYW1ld29ya1wiKTtcclxudmFyIHF1ZXJ5U3RyaW5nID0gcmVxdWlyZShcInF1ZXJ5LXN0cmluZ1wiKTtcclxudmFyIFNlbGVjdE1lbnVJdGVtXzEgPSByZXF1aXJlKFwiLi4vc2VsZWN0LW1lbnUvU2VsZWN0TWVudUl0ZW1cIik7XHJcbnZhciBJUHJvbW90aW9uYWxWaWRlb18xID0gcmVxdWlyZShcIi4vSVByb21vdGlvbmFsVmlkZW9cIik7XHJcbnZhciB4cyA9IDc2ODtcclxudmFyIHNwYWNlQmFzZSA9IDE2O1xyXG52YXIgc3BhY2VMYXJnZSA9IDMyO1xyXG52YXIgcGFnaW5hdGlvbkluY3JlbWVudCA9IDEyO1xyXG52YXIgdmlld0FsbENhdGVnb3JpZXNUZXh0ID0gJ0FsbCBWaWRlbyBDYXRlZ29yaWVzJztcclxudmFyIHZpZXdBbGxDYXRlZ29yaWVzVmFsdWUgPSAnLTEnO1xyXG52YXIgVmlkZW9HYWxsZXJ5ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gVmlkZW9HYWxsZXJ5KCkge1xyXG4gICAgICAgIHRoaXMuZGlzcGxheWVkVmlkZW9zID0gW107XHJcbiAgICAgICAgdGhpcy52aWRlb3NNYXRjaGluZ0ZpbHRlciA9IFtdO1xyXG4gICAgICAgIHRoaXMuYWxsVmlkZW9zID0gW107XHJcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uSW5jcmVtZW50ID0gcGFnaW5hdGlvbkluY3JlbWVudDtcclxuICAgICAgICB0aGlzLnBhZ2luYXRpb25Db3VudCA9IHBhZ2luYXRpb25JbmNyZW1lbnQ7XHJcbiAgICAgICAgdGhpcy50b3RhbE1hdGNoZXMgPSAwO1xyXG4gICAgICAgIHRoaXMudmlkZW9DYXRlZ29yaWVzID0gW107XHJcbiAgICAgICAgdGhpcy5hdXRvcGxheSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgVmlkZW9HYWxsZXJ5LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uIChtb2RlbCkge1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSBtb2RlbDtcclxuICAgICAgICB0aGlzLm1vZGVsLnZpZGVvcyA9IG1vZGVsLnZpZGVvc1xyXG4gICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uICh2KSB7IHJldHVybiB2LnZpZGVvUHJvdmlkZXIgPT09IElQcm9tb3Rpb25hbFZpZGVvXzEuVmlkZW9Qcm92aWRlci52aWR5YXJkICYmICghIXYudmlkZW9VUkwgJiYgIXYudmlkZW9VUkwuaW5jbHVkZXMoJy5qcycpKTsgfSlcclxuICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAodiwgcG9zLCBhcnIpIHsgcmV0dXJuIGFyci5tYXAoZnVuY3Rpb24gKG1hcE9iaikgeyByZXR1cm4gbWFwT2JqWyd2aWRlb1VSTCddOyB9KS5pbmRleE9mKHZbJ3ZpZGVvVVJMJ10pID09PSBwb3M7IH0pXHJcbiAgICAgICAgICAgIC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBuZXcgRGF0ZShiLmRhdGVQdWJsaXNoZWQpLmdldFRpbWUoKSAtIG5ldyBEYXRlKGEuZGF0ZVB1Ymxpc2hlZCkuZ2V0VGltZSgpOyB9KTtcclxuICAgICAgICB2YXIgZGVmYXVsdFZpZGVvID0gdGhpcy5tb2RlbC52aWRlb3NbMF07XHJcbiAgICAgICAgdmFyIHZpZGVvVVJMID0gZGVmYXVsdFZpZGVvLnZpZGVvVVJMO1xyXG4gICAgICAgIHZhciB1cmxQYXJhbXMgPSBxdWVyeVN0cmluZy5wYXJzZShsb2NhdGlvbi5zZWFyY2gpO1xyXG4gICAgICAgIHZhciBpZCA9IHVybFBhcmFtc1snaWQnXTtcclxuICAgICAgICBpZiAoaWQpIHtcclxuICAgICAgICAgICAgdmlkZW9VUkwgPSBpZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZpZGVvVVJMKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZFZpZGVvKHZpZGVvVVJMKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52aWRlb0NhdGVnb3JpZXMgPSB0aGlzLm1vZGVsLnZpZGVvcy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgdmlkZW8pIHtcclxuICAgICAgICAgICAgcmV0dXJuICh2aWRlby52aWRlb0NhdGVnb3J5ICYmICFhY2MuZmluZChmdW5jdGlvbiAoaXRlbSkgeyByZXR1cm4gaXRlbS52YWx1ZSA9PT0gdmlkZW8udmlkZW9DYXRlZ29yeTsgfSkpID8gX19zcHJlYWQoYWNjLCBbbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0odmlkZW8udmlkZW9DYXRlZ29yeSwgdmlkZW8udmlkZW9DYXRlZ29yeSldKSA6IGFjYztcclxuICAgICAgICB9LCBbbmV3IFNlbGVjdE1lbnVJdGVtXzEuU2VsZWN0TWVudUl0ZW0odmlld0FsbENhdGVnb3JpZXNUZXh0LCB2aWV3QWxsQ2F0ZWdvcmllc1ZhbHVlKV0pO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWaWRlb0NhdGVnb3J5ID0gdGhpcy52aWRlb0NhdGVnb3JpZXNbMF07XHJcbiAgICAgICAgdGhpcy52aWRlb3NNYXRjaGluZ0ZpbHRlciA9IHRoaXMubW9kZWwudmlkZW9zO1xyXG4gICAgICAgIHRoaXMuZGlzcGxheWVkVmlkZW9zID0gdGhpcy52aWRlb3NNYXRjaGluZ0ZpbHRlci5zbGljZSgwLCB0aGlzLnBhZ2luYXRpb25JbmNyZW1lbnQpO1xyXG4gICAgICAgIHRoaXMudG90YWxNYXRjaGVzID0gdGhpcy52aWRlb3NNYXRjaGluZ0ZpbHRlci5sZW5ndGg7XHJcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uQ291bnQgPSBNYXRoLm1pbih0aGlzLnRvdGFsTWF0Y2hlcywgdGhpcy5wYWdpbmF0aW9uQ291bnQpO1xyXG4gICAgfTtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWaWRlb0dhbGxlcnkucHJvdG90eXBlLCBcImFjdGl2ZVZpZGVvUGxheWVyXCIsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGF1dG9wbGF5OiB0aGlzLmF1dG9wbGF5LFxyXG4gICAgICAgICAgICAgICAgcGxheWVyVHlwZTogJ2lubGluZScsXHJcbiAgICAgICAgICAgICAgICB2aWR5YXJkRW1iZWRDb2RlOiB0aGlzLmFjdGl2ZVZpZGVvLnZpZGVvVVJMLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgIH0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZpZGVvR2FsbGVyeS5wcm90b3R5cGUsIFwic2hvd1ZpZXdNb3JlXCIsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGlzcGxheWVkVmlkZW9zLmxlbmd0aCA8IHRoaXMudG90YWxNYXRjaGVzO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgIH0pO1xyXG4gICAgVmlkZW9HYWxsZXJ5LnByb3RvdHlwZS5zY3JvbGxUb0FjdGl2ZVZpZGVvID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBvZmZzZXQgPSB3aW5kb3cuaW5uZXJXaWR0aCA8IHhzID8gc3BhY2VCYXNlIDogc3BhY2VMYXJnZTtcclxuICAgICAgICB2YXIgZWxlbWVudFBvc2l0aW9uID0gdGhpcy52aWRlb0dhbGxlcnlBY3RpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcclxuICAgICAgICB2YXIgb2Zmc2V0UG9zaXRpb24gPSBlbGVtZW50UG9zaXRpb24gKyB3aW5kb3cucGFnZVlPZmZzZXQgLSBvZmZzZXQ7XHJcbiAgICAgICAgd2luZG93LnNjcm9sbFRvKHtcclxuICAgICAgICAgICAgYmVoYXZpb3I6ICdhdXRvJyxcclxuICAgICAgICAgICAgbGVmdDogMCxcclxuICAgICAgICAgICAgdG9wOiBvZmZzZXRQb3NpdGlvblxyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIFZpZGVvR2FsbGVyeS5wcm90b3R5cGUuc2Nyb2xsVG9TZWxlY3RNZW51ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMudmlkZW9HYWxsZXJ5RWxlbWVudC5zY3JvbGxJbnRvVmlldyh7XHJcbiAgICAgICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIFZpZGVvR2FsbGVyeS5wcm90b3R5cGUuaGFuZGxlVmlkZW9HYWxsZXJ5Q2FyZENsaWNrID0gZnVuY3Rpb24gKHZpZGVvVVJMKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlkZW8udmlkZW9VUkwgIT09IHZpZGVvVVJMKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0b3BsYXkgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRWaWRlbyh2aWRlb1VSTCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVWaWRlbygpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBWaWRlb0dhbGxlcnkucHJvdG90eXBlLmhhbmRsZVZpZXdNb3JlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBudW1iZXJPZlZpZGVvcyA9IHRoaXMucGFnaW5hdGlvbkNvdW50ICsgdGhpcy5wYWdpbmF0aW9uSW5jcmVtZW50O1xyXG4gICAgICAgIHRoaXMucGFnaW5hdGlvbkNvdW50ID0gKG51bWJlck9mVmlkZW9zID49IHRoaXMudmlkZW9zTWF0Y2hpbmdGaWx0ZXIubGVuZ3RoKVxyXG4gICAgICAgICAgICA/IHRoaXMudmlkZW9zTWF0Y2hpbmdGaWx0ZXIubGVuZ3RoXHJcbiAgICAgICAgICAgIDogbnVtYmVyT2ZWaWRlb3M7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5ZWRWaWRlb3MgPSB0aGlzLnZpZGVvc01hdGNoaW5nRmlsdGVyLnNsaWNlKDAsIHRoaXMucGFnaW5hdGlvbkNvdW50KTtcclxuICAgIH07XHJcbiAgICBWaWRlb0dhbGxlcnkucHJvdG90eXBlLmZpbHRlclZpZGVvcyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMudmlkZW9zTWF0Y2hpbmdGaWx0ZXIgPSAodGhpcy5zZWxlY3RlZFZpZGVvQ2F0ZWdvcnkudmFsdWUgPT09IHZpZXdBbGxDYXRlZ29yaWVzVmFsdWUpXHJcbiAgICAgICAgICAgID8gdGhpcy5tb2RlbC52aWRlb3NcclxuICAgICAgICAgICAgOiB0aGlzLm1vZGVsLnZpZGVvcy5maWx0ZXIoZnVuY3Rpb24gKHZpZGVvKSB7IHJldHVybiB2aWRlby52aWRlb0NhdGVnb3J5ID09PSBfdGhpcy5zZWxlY3RlZFZpZGVvQ2F0ZWdvcnkudmFsdWU7IH0pO1xyXG4gICAgICAgIHRoaXMudG90YWxNYXRjaGVzID0gdGhpcy52aWRlb3NNYXRjaGluZ0ZpbHRlci5sZW5ndGg7XHJcbiAgICAgICAgdmFyIG51bWJlck9mVmlkZW9zVG9EaXNwbGF5ID0gcGFnaW5hdGlvbkluY3JlbWVudDtcclxuICAgICAgICB0aGlzLnBhZ2luYXRpb25Db3VudCA9IChudW1iZXJPZlZpZGVvc1RvRGlzcGxheSA+PSB0aGlzLnRvdGFsTWF0Y2hlcylcclxuICAgICAgICAgICAgPyB0aGlzLnRvdGFsTWF0Y2hlc1xyXG4gICAgICAgICAgICA6IG51bWJlck9mVmlkZW9zVG9EaXNwbGF5O1xyXG4gICAgICAgIHRoaXMuZGlzcGxheWVkVmlkZW9zID0gdGhpcy52aWRlb3NNYXRjaGluZ0ZpbHRlci5zbGljZSgwLCB0aGlzLnBhZ2luYXRpb25Db3VudCk7XHJcbiAgICB9O1xyXG4gICAgVmlkZW9HYWxsZXJ5LnByb3RvdHlwZS5sb2FkVmlkZW8gPSBmdW5jdGlvbiAodmlkZW9VUkwpIHtcclxuICAgICAgICB0aGlzLmFjdGl2ZVZpZGVvID0gdGhpcy5tb2RlbC52aWRlb3MuZmluZChmdW5jdGlvbiAodikgeyByZXR1cm4gdi52aWRlb1VSTCA9PT0gdmlkZW9VUkw7IH0pO1xyXG4gICAgICAgIHZhciBxcyA9IHF1ZXJ5U3RyaW5nLnBhcnNlKGxvY2F0aW9uLnNlYXJjaCk7XHJcbiAgICAgICAgcXMuaWQgPSB2aWRlb1VSTDtcclxuICAgICAgICB2YXIgdXJsUGF0aCA9IHF1ZXJ5U3RyaW5nLnN0cmluZ2lmeShxcyk7XHJcbiAgICAgICAgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsICcnLCBcIj9cIiArIHVybFBhdGgpO1xyXG4gICAgfTtcclxuICAgIF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuYmluZGFibGUsXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcclxuICAgIF0sIFZpZGVvR2FsbGVyeS5wcm90b3R5cGUsIFwibW9kZWxcIiwgdm9pZCAwKTtcclxuICAgIF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGF1cmVsaWFfYmluZGluZ18xLmNvbXB1dGVkRnJvbSgnYWN0aXZlVmlkZW8nKSxcclxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KSxcclxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW10pXHJcbiAgICBdLCBWaWRlb0dhbGxlcnkucHJvdG90eXBlLCBcImFjdGl2ZVZpZGVvUGxheWVyXCIsIG51bGwpO1xyXG4gICAgX19kZWNvcmF0ZShbXHJcbiAgICAgICAgYXVyZWxpYV9iaW5kaW5nXzEuY29tcHV0ZWRGcm9tKCdwYWdpbmF0aW9uQ291bnQnKSxcclxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KSxcclxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW10pXHJcbiAgICBdLCBWaWRlb0dhbGxlcnkucHJvdG90eXBlLCBcInNob3dWaWV3TW9yZVwiLCBudWxsKTtcclxuICAgIHJldHVybiBWaWRlb0dhbGxlcnk7XHJcbn0oKSk7XHJcbmV4cG9ydHMuVmlkZW9HYWxsZXJ5ID0gVmlkZW9HYWxsZXJ5O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///components/video-gallery/video-gallery\n')},"components/video-gallery/video-gallery.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<div class=\\"video-gallery\\" ref=\\"videoGalleryActiveElement\\">\\r\\n\\t\\t<div class=\\"row\\" if.bind=\\"activeVideo\\">\\r\\n\\t\\t\\t<div class=\\"col-xs\\">\\r\\n\\t\\t\\t\\t<div class=\\"row\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\"col-xs\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\"video-gallery__video-container\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<video-player class=\\"video-gallery__video-player\\" model.bind=\\"activeVideoPlayer\\"><\/video-player>\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\"video-gallery__fallback\\"><\/div>\\r\\n\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t\\t<div class=\\"row\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\"col-xs-9 col-sm-10 start-xs\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\"ds-subtitle\\">${activeVideo.videoCategory}<\/div>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t<div class=\\"col-xs end-xs\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\"ds-subtitle\\" if.bind=\\"activeVideo.duration.length\\">${activeVideo.duration}<\/div>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t<div class=\\"row\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\"col-xs-12\\">\\r\\n\\t\\t\\t\\t\\t\\t<h2 class=\\"video-gallery__active-video-title\\">${activeVideo.title}<\/h2>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t\\t<div class=\\"row between-xs video-gallery__date-duration\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\"col-xs start-xs\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\"ds-subtitle\\" if.bind=\\"activeVideo.datePublished.length\\">${activeVideo.datePublished | dateFormat: \'MMMM Do, YYYY\' }<\/div>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t\\t<div class=\\"row video-gallery__details\\" if.bind=\\"activeVideo.content.length\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\"col-xs-12 col-sm-8 col-md-7 start-xs\\">\\r\\n\\t\\t\\t\\t\\t\\t<input id=\\"video-gallery__details-accordion--trigger\\"\\r\\n\\t\\t\\t\\t\\t\\tclass=\\"video-gallery__details-accordion--trigger ${(activeVideo.content.length < 248) ? \'video-gallery__details-accordion--trigger-view-all\' : \'\'}\\" type=\\"checkbox\\" checked.bind=\\"activeVideo.content.length < 248\\">\\r\\n\\t\\t\\t\\t\\t\\t<label class=\\"video-gallery__more-link\\" for=\\"video-gallery__details-accordion--trigger\\"><\/label>\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\"ds-p-base video-gallery__details-accordion\\" innerhtml.bind=\\"activeVideo.content\\"><\/div>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t<\/div>\\r\\n\\r\\n\\t\\t<div class=\\"row video-gallery__gallery\\" ref=\\"videoGalleryElement\\">\\r\\n\\t\\t\\t<div class=\\"col-xs-12\\">\\r\\n\\t\\t\\t\\t<div class=\\"row start-xs end-sm\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\"col-xs-12 col-sm-5 col-md-3\\">\\r\\n\\t\\t\\t\\t\\t\\t<select-menu\\r\\n\\t\\t\\t\\t\\t\\t\\titems.bind=\\"videoCategories\\"\\r\\n\\t\\t\\t\\t\\t\\t\\tselected-item.two-way=\\"selectedVideoCategory\\"\\r\\n\\t\\t\\t\\t\\t\\t\\ton-change.call=\\"filterVideos()\\"\\r\\n\\t\\t\\t\\t\\t\\t\\ton-open.call=\\"scrollToSelectMenu()\\">\\r\\n\\t\\t\\t\\t\\t\\t<\/select-menu>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t<div class=\\"row\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\"col-xs-12 col-sm-6 col-md-4\\" repeat.for=\\"video of displayedVideos\\">\\r\\n\\t\\t\\t\\t\\t\\t<a class=\\"video-gallery-card ${(activeVideo.videoURL === video.videoURL) ? \'video-gallery-card--is-playing\' : \'\'}\\" click.delegate=\\"handleVideoGalleryCardClick(video.videoURL)\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\"row\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\"col-xs-6 col-sm-12\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\"video-gallery-card__image-container\\" style=\\"background-image:url(http://play.vidyard.com/${video.videoURL}.jpg);\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<svg class=\\"ds-icon-play video-gallery-card__icon\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<use xlink:href=\\"#ds-icon-play\\"/>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<\/svg>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span if.bind=\\"video.isNew\\" class=\\"video-gallery-card__banner--is-new\\">New<\/span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<span class=\\"video-gallery-card__banner--is-playing\\">Now playing<\/span>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\"col-xs-6 col-sm-12 video-gallery-card__content-container\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\"video-gallery-card__content\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\"row\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\"col-xs-12 col-sm\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\"video-gallery-card__category\\">${video.videoCategory}<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\"col-xs col-sm-3 start-xs end-sm\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\"video-gallery-card__duration\\">${video.duration}<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\"row\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\"col-xs\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\"video-gallery-card__title\\">${video.title}<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t\\t\\t<\/a>\\r\\n\\t\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t<\/div>\\r\\n\\r\\n\\t\\t<div class=\\"row center-xs\\">\\r\\n\\t\\t\\t<div class=\\"col-xs-12\\">\\r\\n\\t\\t\\t\\t<div class=\\"video-gallery__results\\">Showing ${paginationCount} of ${totalMatches} videos<\/div>\\r\\n\\t\\t\\t\\t<button type=\\"button\\" class=\\"video-gallery__cta ds-btn-secondary\\" click.delegate=\\"handleViewMore()\\" if.bind=\\"showViewMore\\">View More<\/button>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t<\/div>\\r\\n\\r\\n\\t<\/div>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy92aWRlby1nYWxsZXJ5L3ZpZGVvLWdhbGxlcnkuaHRtbD8yMzgyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtxQkFBK3FCLDBCQUEwQiwwSkFBMEoscUJBQXFCLG9MQUFvTCxrQkFBa0IsNlBBQTZQLHlEQUF5RCwwVkFBMFYsK0ZBQStGLG1rQ0FBbWtDLGtGQUFrRiw2UkFBNlIsZUFBZSxNQUFNLDJ2QkFBMnZCLG9CQUFvQix5TEFBeUwsZUFBZSxzT0FBc08sWUFBWSxrWEFBa1gsZ0JBQWdCLE1BQU0sYUFBYSIsImZpbGUiOiJjb21wb25lbnRzL3ZpZGVvLWdhbGxlcnkvdmlkZW8tZ2FsbGVyeS5odG1sLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBcIjx0ZW1wbGF0ZT5cXHJcXG5cXHQ8ZGl2IGNsYXNzPVxcXCJ2aWRlby1nYWxsZXJ5XFxcIiByZWY9XFxcInZpZGVvR2FsbGVyeUFjdGl2ZUVsZW1lbnRcXFwiPlxcclxcblxcdFxcdDxkaXYgY2xhc3M9XFxcInJvd1xcXCIgaWYuYmluZD1cXFwiYWN0aXZlVmlkZW9cXFwiPlxcclxcblxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImNvbC14c1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb2wteHNcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcInZpZGVvLWdhbGxlcnlfX3ZpZGVvLWNvbnRhaW5lclxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0PHZpZGVvLXBsYXllciBjbGFzcz1cXFwidmlkZW8tZ2FsbGVyeV9fdmlkZW8tcGxheWVyXFxcIiBtb2RlbC5iaW5kPVxcXCJhY3RpdmVWaWRlb1BsYXllclxcXCI+PC92aWRlby1wbGF5ZXI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwidmlkZW8tZ2FsbGVyeV9fZmFsbGJhY2tcXFwiPjwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcclxcblxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiY29sLXhzLTkgY29sLXNtLTEwIHN0YXJ0LXhzXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJkcy1zdWJ0aXRsZVxcXCI+JHthY3RpdmVWaWRlby52aWRlb0NhdGVnb3J5fTwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImNvbC14cyBlbmQteHNcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImRzLXN1YnRpdGxlXFxcIiBpZi5iaW5kPVxcXCJhY3RpdmVWaWRlby5kdXJhdGlvbi5sZW5ndGhcXFwiPiR7YWN0aXZlVmlkZW8uZHVyYXRpb259PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTJcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxoMiBjbGFzcz1cXFwidmlkZW8tZ2FsbGVyeV9fYWN0aXZlLXZpZGVvLXRpdGxlXFxcIj4ke2FjdGl2ZVZpZGVvLnRpdGxlfTwvaDI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFxyXFxuXFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwicm93IGJldHdlZW4teHMgdmlkZW8tZ2FsbGVyeV9fZGF0ZS1kdXJhdGlvblxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiY29sLXhzIHN0YXJ0LXhzXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJkcy1zdWJ0aXRsZVxcXCIgaWYuYmluZD1cXFwiYWN0aXZlVmlkZW8uZGF0ZVB1Ymxpc2hlZC5sZW5ndGhcXFwiPiR7YWN0aXZlVmlkZW8uZGF0ZVB1Ymxpc2hlZCB8IGRhdGVGb3JtYXQ6ICdNTU1NIERvLCBZWVlZJyB9PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFxyXFxuXFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwicm93IHZpZGVvLWdhbGxlcnlfX2RldGFpbHNcXFwiIGlmLmJpbmQ9XFxcImFjdGl2ZVZpZGVvLmNvbnRlbnQubGVuZ3RoXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgY29sLXNtLTggY29sLW1kLTcgc3RhcnQteHNcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxpbnB1dCBpZD1cXFwidmlkZW8tZ2FsbGVyeV9fZGV0YWlscy1hY2NvcmRpb24tLXRyaWdnZXJcXFwiXFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0Y2xhc3M9XFxcInZpZGVvLWdhbGxlcnlfX2RldGFpbHMtYWNjb3JkaW9uLS10cmlnZ2VyICR7KGFjdGl2ZVZpZGVvLmNvbnRlbnQubGVuZ3RoIDwgMjQ4KSA/ICd2aWRlby1nYWxsZXJ5X19kZXRhaWxzLWFjY29yZGlvbi0tdHJpZ2dlci12aWV3LWFsbCcgOiAnJ31cXFwiIHR5cGU9XFxcImNoZWNrYm94XFxcIiBjaGVja2VkLmJpbmQ9XFxcImFjdGl2ZVZpZGVvLmNvbnRlbnQubGVuZ3RoIDwgMjQ4XFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8bGFiZWwgY2xhc3M9XFxcInZpZGVvLWdhbGxlcnlfX21vcmUtbGlua1xcXCIgZm9yPVxcXCJ2aWRlby1nYWxsZXJ5X19kZXRhaWxzLWFjY29yZGlvbi0tdHJpZ2dlclxcXCI+PC9sYWJlbD5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJkcy1wLWJhc2UgdmlkZW8tZ2FsbGVyeV9fZGV0YWlscy1hY2NvcmRpb25cXFwiIGlubmVyaHRtbC5iaW5kPVxcXCJhY3RpdmVWaWRlby5jb250ZW50XFxcIj48L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHJcXG5cXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHQ8L2Rpdj5cXHJcXG5cXHJcXG5cXHRcXHQ8ZGl2IGNsYXNzPVxcXCJyb3cgdmlkZW8tZ2FsbGVyeV9fZ2FsbGVyeVxcXCIgcmVmPVxcXCJ2aWRlb0dhbGxlcnlFbGVtZW50XFxcIj5cXHJcXG5cXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTJcXFwiPlxcclxcblxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcInJvdyBzdGFydC14cyBlbmQtc21cXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtc20tNSBjb2wtbWQtM1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PHNlbGVjdC1tZW51XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0aXRlbXMuYmluZD1cXFwidmlkZW9DYXRlZ29yaWVzXFxcIlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdHNlbGVjdGVkLWl0ZW0udHdvLXdheT1cXFwic2VsZWN0ZWRWaWRlb0NhdGVnb3J5XFxcIlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdG9uLWNoYW5nZS5jYWxsPVxcXCJmaWx0ZXJWaWRlb3MoKVxcXCJcXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRvbi1vcGVuLmNhbGw9XFxcInNjcm9sbFRvU2VsZWN0TWVudSgpXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8L3NlbGVjdC1tZW51PlxcclxcblxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdDwvZGl2PlxcclxcblxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1zbS02IGNvbC1tZC00XFxcIiByZXBlYXQuZm9yPVxcXCJ2aWRlbyBvZiBkaXNwbGF5ZWRWaWRlb3NcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxhIGNsYXNzPVxcXCJ2aWRlby1nYWxsZXJ5LWNhcmQgJHsoYWN0aXZlVmlkZW8udmlkZW9VUkwgPT09IHZpZGVvLnZpZGVvVVJMKSA/ICd2aWRlby1nYWxsZXJ5LWNhcmQtLWlzLXBsYXlpbmcnIDogJyd9XFxcIiBjbGljay5kZWxlZ2F0ZT1cXFwiaGFuZGxlVmlkZW9HYWxsZXJ5Q2FyZENsaWNrKHZpZGVvLnZpZGVvVVJMKVxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb2wteHMtNiBjb2wtc20tMTJcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcInZpZGVvLWdhbGxlcnktY2FyZF9faW1hZ2UtY29udGFpbmVyXFxcIiBzdHlsZT1cXFwiYmFja2dyb3VuZC1pbWFnZTp1cmwoaHR0cDovL3BsYXkudmlkeWFyZC5jb20vJHt2aWRlby52aWRlb1VSTH0uanBnKTtcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDxzdmcgY2xhc3M9XFxcImRzLWljb24tcGxheSB2aWRlby1nYWxsZXJ5LWNhcmRfX2ljb25cXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDx1c2UgeGxpbms6aHJlZj1cXFwiI2RzLWljb24tcGxheVxcXCIvPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDwvc3ZnPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDxzcGFuIGlmLmJpbmQ9XFxcInZpZGVvLmlzTmV3XFxcIiBjbGFzcz1cXFwidmlkZW8tZ2FsbGVyeS1jYXJkX19iYW5uZXItLWlzLW5ld1xcXCI+TmV3PC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDxzcGFuIGNsYXNzPVxcXCJ2aWRlby1nYWxsZXJ5LWNhcmRfX2Jhbm5lci0taXMtcGxheWluZ1xcXCI+Tm93IHBsYXlpbmc8L3NwYW4+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiY29sLXhzLTYgY29sLXNtLTEyIHZpZGVvLWdhbGxlcnktY2FyZF9fY29udGVudC1jb250YWluZXJcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcInZpZGVvLWdhbGxlcnktY2FyZF9fY29udGVudFxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgY29sLXNtXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJ2aWRlby1nYWxsZXJ5LWNhcmRfX2NhdGVnb3J5XFxcIj4ke3ZpZGVvLnZpZGVvQ2F0ZWdvcnl9PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiY29sLXhzIGNvbC1zbS0zIHN0YXJ0LXhzIGVuZC1zbVxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwidmlkZW8tZ2FsbGVyeS1jYXJkX19kdXJhdGlvblxcXCI+JHt2aWRlby5kdXJhdGlvbn08L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImNvbC14c1xcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwidmlkZW8tZ2FsbGVyeS1jYXJkX190aXRsZVxcXCI+JHt2aWRlby50aXRsZX08L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8L2E+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0PC9kaXY+XFxyXFxuXFxyXFxuXFx0XFx0PGRpdiBjbGFzcz1cXFwicm93IGNlbnRlci14c1xcXCI+XFxyXFxuXFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJ2aWRlby1nYWxsZXJ5X19yZXN1bHRzXFxcIj5TaG93aW5nICR7cGFnaW5hdGlvbkNvdW50fSBvZiAke3RvdGFsTWF0Y2hlc30gdmlkZW9zPC9kaXY+XFxyXFxuXFx0XFx0XFx0XFx0PGJ1dHRvbiB0eXBlPVxcXCJidXR0b25cXFwiIGNsYXNzPVxcXCJ2aWRlby1nYWxsZXJ5X19jdGEgZHMtYnRuLXNlY29uZGFyeVxcXCIgY2xpY2suZGVsZWdhdGU9XFxcImhhbmRsZVZpZXdNb3JlKClcXFwiIGlmLmJpbmQ9XFxcInNob3dWaWV3TW9yZVxcXCI+VmlldyBNb3JlPC9idXR0b24+XFxyXFxuXFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0PC9kaXY+XFxyXFxuXFxyXFxuXFx0PC9kaXY+XFxyXFxuPC90ZW1wbGF0ZT5cXHJcXG5cIjsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///components/video-gallery/video-gallery.html\n')},"components/video-player/video-player":function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar injectScript_1 = __webpack_require__(15);\r\nexports.videoPlayerType = {\r\n    inline: \'inline\',\r\n    lightbox: \'lightbox\'\r\n};\r\nvar VideoPlayer = /** @class */ (function () {\r\n    function VideoPlayer() {\r\n    }\r\n    VideoPlayer.prototype.activate = function (model) {\r\n        this.model = model;\r\n    };\r\n    VideoPlayer.prototype.attached = function () {\r\n        if (this.model.vidyardEmbedCode) {\r\n            this.setVideo();\r\n        }\r\n    };\r\n    VideoPlayer.prototype.modelChanged = function (modelOldValue, modelNewValue) {\r\n        if (modelNewValue && this.model.vidyardEmbedCode !== modelNewValue.vidyardEmbedCode) {\r\n            this.videoPlayerElement.innerHTML = \'\';\r\n            this.setVideo();\r\n        }\r\n    };\r\n    VideoPlayer.prototype.openLightboxPlayer = function (event) {\r\n        window["fn_vidyard_" + this.model.vidyardEmbedCode]();\r\n        return false;\r\n    };\r\n    VideoPlayer.prototype.setVideo = function () {\r\n        var playerType = this.model.playerType || exports.videoPlayerType.inline;\r\n        var id = "vidyard_embed_code_" + this.model.vidyardEmbedCode;\r\n        var src = "https://play.vidyard.com/" + this.model\r\n            .vidyardEmbedCode + ".js?v=3.1&type=" + playerType + "&width=960&height=540" + (this.model.autoplay ? "&autoplay=1" : undefined);\r\n        injectScript_1.injectScript(src, id, playerType === exports.videoPlayerType.inline\r\n            ? this.videoPlayerElement\r\n            : undefined)\r\n            .then()\r\n            .catch();\r\n    };\r\n    __decorate([\r\n        aurelia_framework_1.bindable,\r\n        __metadata("design:type", Object)\r\n    ], VideoPlayer.prototype, "model", void 0);\r\n    return VideoPlayer;\r\n}());\r\nexports.VideoPlayer = VideoPlayer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy92aWRlby1wbGF5ZXIvdmlkZW8tcGxheWVyLnRzPzkxNjciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsUUFBUTtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLGNBQWM7QUFDNUQsMEJBQTBCLG1CQUFPLENBQUMsbUJBQW1CO0FBQ3JELHFCQUFxQixtQkFBTyxDQUFDLEVBQW9CO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QiLCJmaWxlIjoiY29tcG9uZW50cy92aWRlby1wbGF5ZXIvdmlkZW8tcGxheWVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2RlY29yYXRlID0gKHRoaXMgJiYgdGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn07XHJcbnZhciBfX21ldGFkYXRhID0gKHRoaXMgJiYgdGhpcy5fX21ldGFkYXRhKSB8fCBmdW5jdGlvbiAoaywgdikge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xyXG59O1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBhdXJlbGlhX2ZyYW1ld29ya18xID0gcmVxdWlyZShcImF1cmVsaWEtZnJhbWV3b3JrXCIpO1xyXG52YXIgaW5qZWN0U2NyaXB0XzEgPSByZXF1aXJlKFwiLi4vLi4vaW5qZWN0U2NyaXB0XCIpO1xyXG5leHBvcnRzLnZpZGVvUGxheWVyVHlwZSA9IHtcclxuICAgIGlubGluZTogJ2lubGluZScsXHJcbiAgICBsaWdodGJveDogJ2xpZ2h0Ym94J1xyXG59O1xyXG52YXIgVmlkZW9QbGF5ZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBWaWRlb1BsYXllcigpIHtcclxuICAgIH1cclxuICAgIFZpZGVvUGxheWVyLnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uIChtb2RlbCkge1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSBtb2RlbDtcclxuICAgIH07XHJcbiAgICBWaWRlb1BsYXllci5wcm90b3R5cGUuYXR0YWNoZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwudmlkeWFyZEVtYmVkQ29kZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNldFZpZGVvKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIFZpZGVvUGxheWVyLnByb3RvdHlwZS5tb2RlbENoYW5nZWQgPSBmdW5jdGlvbiAobW9kZWxPbGRWYWx1ZSwgbW9kZWxOZXdWYWx1ZSkge1xyXG4gICAgICAgIGlmIChtb2RlbE5ld1ZhbHVlICYmIHRoaXMubW9kZWwudmlkeWFyZEVtYmVkQ29kZSAhPT0gbW9kZWxOZXdWYWx1ZS52aWR5YXJkRW1iZWRDb2RlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlkZW9QbGF5ZXJFbGVtZW50LmlubmVySFRNTCA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLnNldFZpZGVvKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIFZpZGVvUGxheWVyLnByb3RvdHlwZS5vcGVuTGlnaHRib3hQbGF5ZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICB3aW5kb3dbXCJmbl92aWR5YXJkX1wiICsgdGhpcy5tb2RlbC52aWR5YXJkRW1iZWRDb2RlXSgpO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH07XHJcbiAgICBWaWRlb1BsYXllci5wcm90b3R5cGUuc2V0VmlkZW8gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHBsYXllclR5cGUgPSB0aGlzLm1vZGVsLnBsYXllclR5cGUgfHwgZXhwb3J0cy52aWRlb1BsYXllclR5cGUuaW5saW5lO1xyXG4gICAgICAgIHZhciBpZCA9IFwidmlkeWFyZF9lbWJlZF9jb2RlX1wiICsgdGhpcy5tb2RlbC52aWR5YXJkRW1iZWRDb2RlO1xyXG4gICAgICAgIHZhciBzcmMgPSBcImh0dHBzOi8vcGxheS52aWR5YXJkLmNvbS9cIiArIHRoaXMubW9kZWxcclxuICAgICAgICAgICAgLnZpZHlhcmRFbWJlZENvZGUgKyBcIi5qcz92PTMuMSZ0eXBlPVwiICsgcGxheWVyVHlwZSArIFwiJndpZHRoPTk2MCZoZWlnaHQ9NTQwXCIgKyAodGhpcy5tb2RlbC5hdXRvcGxheSA/IFwiJmF1dG9wbGF5PTFcIiA6IHVuZGVmaW5lZCk7XHJcbiAgICAgICAgaW5qZWN0U2NyaXB0XzEuaW5qZWN0U2NyaXB0KHNyYywgaWQsIHBsYXllclR5cGUgPT09IGV4cG9ydHMudmlkZW9QbGF5ZXJUeXBlLmlubGluZVxyXG4gICAgICAgICAgICA/IHRoaXMudmlkZW9QbGF5ZXJFbGVtZW50XHJcbiAgICAgICAgICAgIDogdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAudGhlbigpXHJcbiAgICAgICAgICAgIC5jYXRjaCgpO1xyXG4gICAgfTtcclxuICAgIF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIGF1cmVsaWFfZnJhbWV3b3JrXzEuYmluZGFibGUsXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcclxuICAgIF0sIFZpZGVvUGxheWVyLnByb3RvdHlwZSwgXCJtb2RlbFwiLCB2b2lkIDApO1xyXG4gICAgcmV0dXJuIFZpZGVvUGxheWVyO1xyXG59KCkpO1xyXG5leHBvcnRzLlZpZGVvUGxheWVyID0gVmlkZW9QbGF5ZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///components/video-player/video-player\n')},"components/video-player/video-player.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<div class=\\"video-player\\" ref=\\"videoPlayerElement\\">\\r\\n\\t\\t<div if.bind=\\"model.playerType === \'lightbox\'\\" class=\\"outer_vidyard_wrapper\\">\\r\\n\\t\\t\\t<div class=\\"vidyard_wrapper video-player__lightbox-container\\" click.delegate=\\"openLightboxPlayer($event)\\">\\r\\n\\t\\t\\t\\t<img width=\\"100%\\" src=\\"//play.vidyard.com/${model.vidyardEmbedCode}.jpg\\">\\r\\n\\t\\t\\t\\t<div class=\\"vidyard_play_button\\">\\r\\n\\t\\t\\t\\t\\t<a href=\\"javascript: void(0);\\"><\/a>\\r\\n\\t\\t\\t\\t<\/div>\\r\\n\\t\\t\\t<\/div>\\r\\n\\t\\t<\/div>\\r\\n\\t<\/div>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy92aWRlby1wbGF5ZXIvdmlkZW8tcGxheWVyLmh0bWw/NDc5MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxV0FBcVcsdUJBQXVCLGtHQUFrRyIsImZpbGUiOiJjb21wb25lbnRzL3ZpZGVvLXBsYXllci92aWRlby1wbGF5ZXIuaHRtbC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gXCI8dGVtcGxhdGU+XFxyXFxuXFx0PGRpdiBjbGFzcz1cXFwidmlkZW8tcGxheWVyXFxcIiByZWY9XFxcInZpZGVvUGxheWVyRWxlbWVudFxcXCI+XFxyXFxuXFx0XFx0PGRpdiBpZi5iaW5kPVxcXCJtb2RlbC5wbGF5ZXJUeXBlID09PSAnbGlnaHRib3gnXFxcIiBjbGFzcz1cXFwib3V0ZXJfdmlkeWFyZF93cmFwcGVyXFxcIj5cXHJcXG5cXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJ2aWR5YXJkX3dyYXBwZXIgdmlkZW8tcGxheWVyX19saWdodGJveC1jb250YWluZXJcXFwiIGNsaWNrLmRlbGVnYXRlPVxcXCJvcGVuTGlnaHRib3hQbGF5ZXIoJGV2ZW50KVxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0PGltZyB3aWR0aD1cXFwiMTAwJVxcXCIgc3JjPVxcXCIvL3BsYXkudmlkeWFyZC5jb20vJHttb2RlbC52aWR5YXJkRW1iZWRDb2RlfS5qcGdcXFwiPlxcclxcblxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcInZpZHlhcmRfcGxheV9idXR0b25cXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdDxhIGhyZWY9XFxcImphdmFzY3JpcHQ6IHZvaWQoMCk7XFxcIj48L2E+XFxyXFxuXFx0XFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0XFx0PC9kaXY+XFxyXFxuXFx0XFx0PC9kaXY+XFxyXFxuXFx0PC9kaXY+XFxyXFxuPC90ZW1wbGF0ZT5cXHJcXG5cIjsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///components/video-player/video-player.html\n')},"content-page":function(module,exports,__webpack_require__){"use strict";eval('\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar AOS = __webpack_require__(158);\r\nvar aurelia_router_1 = __webpack_require__(11);\r\n__webpack_require__(201);\r\nvar ResponsivePageViewModel_1 = __webpack_require__(23);\r\nvar ContentPage = /** @class */ (function () {\r\n    function ContentPage() {\r\n        this.components = ResponsivePageViewModel_1.ResponsivePageViewModel.components;\r\n    }\r\n    ContentPage.prototype.activate = function () {\r\n        AOS.init();\r\n    };\r\n    ContentPage.prototype.attached = function () {\r\n        window.scrollTo(0, 0);\r\n    };\r\n    ContentPage.prototype.determineActivationStrategy = function () {\r\n        return aurelia_router_1.activationStrategy.replace;\r\n    };\r\n    return ContentPage;\r\n}());\r\nexports.ContentPage = ContentPage;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29udGVudC1wYWdlLnRzPzA3YjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBOEMsY0FBYztBQUM1RCxVQUFVLG1CQUFPLENBQUMsR0FBSztBQUN2Qix1QkFBdUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUMvQyxtQkFBTyxDQUFDLEdBQW1CO0FBQzNCLGdDQUFnQyxtQkFBTyxDQUFDLEVBQTJCO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QiLCJmaWxlIjoiY29udGVudC1wYWdlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIEFPUyA9IHJlcXVpcmUoXCJhb3NcIik7XHJcbnZhciBhdXJlbGlhX3JvdXRlcl8xID0gcmVxdWlyZShcImF1cmVsaWEtcm91dGVyXCIpO1xyXG5yZXF1aXJlKFwiY29udGVudC1wYWdlLnNjc3NcIik7XHJcbnZhciBSZXNwb25zaXZlUGFnZVZpZXdNb2RlbF8xID0gcmVxdWlyZShcIi4vUmVzcG9uc2l2ZVBhZ2VWaWV3TW9kZWxcIik7XHJcbnZhciBDb250ZW50UGFnZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIENvbnRlbnRQYWdlKCkge1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50cyA9IFJlc3BvbnNpdmVQYWdlVmlld01vZGVsXzEuUmVzcG9uc2l2ZVBhZ2VWaWV3TW9kZWwuY29tcG9uZW50cztcclxuICAgIH1cclxuICAgIENvbnRlbnRQYWdlLnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBBT1MuaW5pdCgpO1xyXG4gICAgfTtcclxuICAgIENvbnRlbnRQYWdlLnByb3RvdHlwZS5hdHRhY2hlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XHJcbiAgICB9O1xyXG4gICAgQ29udGVudFBhZ2UucHJvdG90eXBlLmRldGVybWluZUFjdGl2YXRpb25TdHJhdGVneSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gYXVyZWxpYV9yb3V0ZXJfMS5hY3RpdmF0aW9uU3RyYXRlZ3kucmVwbGFjZTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gQ29udGVudFBhZ2U7XHJcbn0oKSk7XHJcbmV4cG9ydHMuQ29udGVudFBhZ2UgPSBDb250ZW50UGFnZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///content-page\n')},"content-page.html":function(module,exports){eval('module.exports = "<template>\\r\\n\\t<div class=\\"inspirato-logo\\">\\r\\n\\t\\t<div class=\\"inspirato-logo__wrapper\\">\\r\\n\\t\\t\\t<svg  class=\\"inspirato-logo__icon ds-icon-logo-inspirato\\">\\r\\n\\t\\t\\t\\t<use xlink:href=\\"#ds-icon-logo-inspirato\\"/>\\r\\n\\t\\t\\t<\/svg>\\r\\n\\t\\t<\/div>\\r\\n\\t<\/div>\\r\\n\\r\\n\\t<section class=\\"content-page au-animate\\">\\r\\n\\t\\t<compose containerless\\r\\n\\t\\t\\trepeat.for=\\"component of components\\"\\r\\n\\t\\t\\tmodel.bind=\\"component\\"\\r\\n\\t\\t\\tview-model=\\"./components/${component.componentName}/${component.componentName}\\">\\r\\n\\t\\t<\/compose>\\r\\n\\t<\/section>\\r\\n<\/template>\\r\\n";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29udGVudC1wYWdlLmh0bWw/ZmM0MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtZUFBbWUsd0JBQXdCLEdBQUcsd0JBQXdCIiwiZmlsZSI6ImNvbnRlbnQtcGFnZS5odG1sLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBcIjx0ZW1wbGF0ZT5cXHJcXG5cXHQ8ZGl2IGNsYXNzPVxcXCJpbnNwaXJhdG8tbG9nb1xcXCI+XFxyXFxuXFx0XFx0PGRpdiBjbGFzcz1cXFwiaW5zcGlyYXRvLWxvZ29fX3dyYXBwZXJcXFwiPlxcclxcblxcdFxcdFxcdDxzdmcgIGNsYXNzPVxcXCJpbnNwaXJhdG8tbG9nb19faWNvbiBkcy1pY29uLWxvZ28taW5zcGlyYXRvXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHQ8dXNlIHhsaW5rOmhyZWY9XFxcIiNkcy1pY29uLWxvZ28taW5zcGlyYXRvXFxcIi8+XFxyXFxuXFx0XFx0XFx0PC9zdmc+XFxyXFxuXFx0XFx0PC9kaXY+XFxyXFxuXFx0PC9kaXY+XFxyXFxuXFxyXFxuXFx0PHNlY3Rpb24gY2xhc3M9XFxcImNvbnRlbnQtcGFnZSBhdS1hbmltYXRlXFxcIj5cXHJcXG5cXHRcXHQ8Y29tcG9zZSBjb250YWluZXJsZXNzXFxyXFxuXFx0XFx0XFx0cmVwZWF0LmZvcj1cXFwiY29tcG9uZW50IG9mIGNvbXBvbmVudHNcXFwiXFxyXFxuXFx0XFx0XFx0bW9kZWwuYmluZD1cXFwiY29tcG9uZW50XFxcIlxcclxcblxcdFxcdFxcdHZpZXctbW9kZWw9XFxcIi4vY29tcG9uZW50cy8ke2NvbXBvbmVudC5jb21wb25lbnROYW1lfS8ke2NvbXBvbmVudC5jb21wb25lbnROYW1lfVxcXCI+XFxyXFxuXFx0XFx0PC9jb21wb3NlPlxcclxcblxcdDwvc2VjdGlvbj5cXHJcXG48L3RlbXBsYXRlPlxcclxcblwiOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///content-page.html\n')},main:function(module,exports,__webpack_require__){"use strict";eval('\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError("Generator is already executing.");\r\n        while (_) try {\r\n            if (f = 1, y && (t = y[op[0] & 2 ? "return" : op[0] ? "throw" : "next"]) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [0, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__("aurelia-framework");\r\nvar aurelia_i18n_1 = __webpack_require__("aurelia-i18n");\r\nvar aurelia_logging_console_1 = __webpack_require__("aurelia-logging-console");\r\nvar aurelia_validation_1 = __webpack_require__("aurelia-validation");\r\nvar Backend = __webpack_require__(197);\r\naurelia_framework_1.LogManager.addAppender(new aurelia_logging_console_1.ConsoleAppender());\r\naurelia_framework_1.LogManager.setLevel(aurelia_framework_1.LogManager.logLevel.error);\r\nfunction configure(aurelia) {\r\n    return __awaiter(this, void 0, void 0, function () {\r\n        var _this = this;\r\n        return __generator(this, function (_a) {\r\n            switch (_a.label) {\r\n                case 0:\r\n                    aurelia.use\r\n                        .standardConfiguration()\r\n                        .feature(\'value-converters/index\')\r\n                        .feature(\'components/index\')\r\n                        .feature(\'components/destination-application/index\')\r\n                        .feature(\'components/trip-finder/index\')\r\n                        .plugin(\'aurelia-animator-css\')\r\n                        .plugin(\'@insp/dropdown\')\r\n                        .plugin(\'aurelia-validation\')\r\n                        .plugin(\'aurelia-i18n\', function (instance) {\r\n                        instance.i18next.use(Backend);\r\n                        instance.setup({\r\n                            attributes: ["t", "i18n"],\r\n                            backend: {\r\n                                loadPath: "/marketing-content/locales/{{lng}}/{{ns}}.json",\r\n                            },\r\n                            debug: false,\r\n                            fallbackLng: "es",\r\n                            lng: "en",\r\n                        });\r\n                    });\r\n                    // this enables the validation provider to work with the internationalization plugin (I18N)\r\n                    // see the aurelia docs for more info on this here:   https://aurelia.io/docs/plugins/validation#integrating-with-aurelia-i18n\r\n                    aurelia_validation_1.ValidationMessageProvider.prototype.getMessage = function (key) {\r\n                        var i18n = aurelia.container.get(aurelia_i18n_1.I18N);\r\n                        var translation = i18n.tr("errorMessages." + key);\r\n                        return _this.parser.parse(translation);\r\n                    };\r\n                    aurelia_validation_1.ValidationMessageProvider.prototype.getDisplayName = function (propertyName, displayName) {\r\n                        if (displayName !== null && displayName !== undefined) {\r\n                            return displayName;\r\n                        }\r\n                        var i18n = aurelia.container.get(aurelia_i18n_1.I18N);\r\n                        var dn = i18n.tr(propertyName);\r\n                        return dn;\r\n                    };\r\n                    return [4 /*yield*/, aurelia.start()];\r\n                case 1:\r\n                    _a.sent();\r\n                    return [4 /*yield*/, aurelia.setRoot(\'app\')];\r\n                case 2:\r\n                    _a.sent();\r\n                    return [2 /*return*/];\r\n            }\r\n        });\r\n    });\r\n}\r\nexports.configure = configure;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvbWFpbi50cz81ZDQxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQTtBQUNBLG1DQUFtQyxNQUFNLDZCQUE2QixFQUFFLFlBQVksV0FBVyxFQUFFO0FBQ2pHLGtDQUFrQyxNQUFNLGlDQUFpQyxFQUFFLFlBQVksV0FBVyxFQUFFO0FBQ3BHLCtCQUErQixpRUFBaUUsdUJBQXVCLEVBQUUsNEJBQTRCO0FBQ3JKO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxhQUFhLDZCQUE2QiwwQkFBMEIsYUFBYSxFQUFFLHFCQUFxQjtBQUN4RyxnQkFBZ0IscURBQXFELG9FQUFvRSxhQUFhLEVBQUU7QUFDeEosc0JBQXNCLHNCQUFzQixxQkFBcUIsR0FBRztBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkMsa0NBQWtDLFNBQVM7QUFDM0Msa0NBQWtDLFdBQVcsVUFBVTtBQUN2RCx5Q0FBeUMsY0FBYztBQUN2RDtBQUNBLDZHQUE2RyxPQUFPLFVBQVU7QUFDOUgsZ0ZBQWdGLGlCQUFpQixPQUFPO0FBQ3hHLHdEQUF3RCxnQkFBZ0IsUUFBUSxPQUFPO0FBQ3ZGLDhDQUE4QyxnQkFBZ0IsZ0JBQWdCLE9BQU87QUFDckY7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBLFNBQVMsWUFBWSxhQUFhLE9BQU8sRUFBRSxVQUFVLFdBQVc7QUFDaEUsbUNBQW1DLFNBQVM7QUFDNUM7QUFDQTtBQUNBLDhDQUE4QyxjQUFjO0FBQzVELDBCQUEwQixtQkFBTyxDQUFDLG1CQUFtQjtBQUNyRCxxQkFBcUIsbUJBQU8sQ0FBQyxjQUFjO0FBQzNDLGdDQUFnQyxtQkFBTyxDQUFDLHlCQUF5QjtBQUNqRSwyQkFBMkIsbUJBQU8sQ0FBQyxvQkFBb0I7QUFDdkQsY0FBYyxtQkFBTyxDQUFDLEdBQXFCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLHdCQUFpRTtBQUNsRyxpQ0FBaUMsa0JBQTJEO0FBQzVGLGlDQUFpQywwQ0FBbUY7QUFDcEgsaUNBQWlDLDhCQUF1RTtBQUN4RyxnQ0FBZ0Msc0JBQStEO0FBQy9GLGdDQUFnQyxnQkFBeUQ7QUFDekYsZ0NBQWdDLG9CQUE2RDtBQUM3RixnQ0FBZ0MsY0FBdUQ7QUFDdkY7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3RUFBd0UsS0FBSyxHQUFHLElBQUk7QUFDcEYsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QixxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXlELEtBQThDO0FBQ3ZHO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBIiwiZmlsZSI6Im1haW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHJlc3VsdC52YWx1ZSk7IH0pLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufTtcclxudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0geVtvcFswXSAmIDIgPyBcInJldHVyblwiIDogb3BbMF0gPyBcInRocm93XCIgOiBcIm5leHRcIl0pICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gWzAsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgIH1cclxufTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgYXVyZWxpYV9mcmFtZXdvcmtfMSA9IHJlcXVpcmUoXCJhdXJlbGlhLWZyYW1ld29ya1wiKTtcclxudmFyIGF1cmVsaWFfaTE4bl8xID0gcmVxdWlyZShcImF1cmVsaWEtaTE4blwiKTtcclxudmFyIGF1cmVsaWFfbG9nZ2luZ19jb25zb2xlXzEgPSByZXF1aXJlKFwiYXVyZWxpYS1sb2dnaW5nLWNvbnNvbGVcIik7XHJcbnZhciBhdXJlbGlhX3ZhbGlkYXRpb25fMSA9IHJlcXVpcmUoXCJhdXJlbGlhLXZhbGlkYXRpb25cIik7XHJcbnZhciBCYWNrZW5kID0gcmVxdWlyZShcImkxOG5leHQteGhyLWJhY2tlbmRcIik7XHJcbmF1cmVsaWFfZnJhbWV3b3JrXzEuTG9nTWFuYWdlci5hZGRBcHBlbmRlcihuZXcgYXVyZWxpYV9sb2dnaW5nX2NvbnNvbGVfMS5Db25zb2xlQXBwZW5kZXIoKSk7XHJcbmF1cmVsaWFfZnJhbWV3b3JrXzEuTG9nTWFuYWdlci5zZXRMZXZlbChhdXJlbGlhX2ZyYW1ld29ya18xLkxvZ01hbmFnZXIubG9nTGV2ZWwuZXJyb3IpO1xyXG5mdW5jdGlvbiBjb25maWd1cmUoYXVyZWxpYSkge1xyXG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICAgICAgYXVyZWxpYS51c2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnN0YW5kYXJkQ29uZmlndXJhdGlvbigpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5mZWF0dXJlKGF1cmVsaWFfZnJhbWV3b3JrXzEuUExBVEZPUk0ubW9kdWxlTmFtZShcInZhbHVlLWNvbnZlcnRlcnMvaW5kZXhcIikpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5mZWF0dXJlKGF1cmVsaWFfZnJhbWV3b3JrXzEuUExBVEZPUk0ubW9kdWxlTmFtZShcImNvbXBvbmVudHMvaW5kZXhcIikpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5mZWF0dXJlKGF1cmVsaWFfZnJhbWV3b3JrXzEuUExBVEZPUk0ubW9kdWxlTmFtZShcImNvbXBvbmVudHMvZGVzdGluYXRpb24tYXBwbGljYXRpb24vaW5kZXhcIikpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5mZWF0dXJlKGF1cmVsaWFfZnJhbWV3b3JrXzEuUExBVEZPUk0ubW9kdWxlTmFtZShcImNvbXBvbmVudHMvdHJpcC1maW5kZXIvaW5kZXhcIikpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5wbHVnaW4oYXVyZWxpYV9mcmFtZXdvcmtfMS5QTEFURk9STS5tb2R1bGVOYW1lKFwiYXVyZWxpYS1hbmltYXRvci1jc3NcIikpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5wbHVnaW4oYXVyZWxpYV9mcmFtZXdvcmtfMS5QTEFURk9STS5tb2R1bGVOYW1lKFwiQGluc3AvZHJvcGRvd25cIikpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5wbHVnaW4oYXVyZWxpYV9mcmFtZXdvcmtfMS5QTEFURk9STS5tb2R1bGVOYW1lKFwiYXVyZWxpYS12YWxpZGF0aW9uXCIpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAucGx1Z2luKGF1cmVsaWFfZnJhbWV3b3JrXzEuUExBVEZPUk0ubW9kdWxlTmFtZShcImF1cmVsaWEtaTE4blwiKSwgZnVuY3Rpb24gKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLmkxOG5leHQudXNlKEJhY2tlbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5zZXR1cCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBbXCJ0XCIsIFwiaTE4blwiXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tlbmQ6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkUGF0aDogXCIvbWFya2V0aW5nLWNvbnRlbnQvbG9jYWxlcy97e2xuZ319L3t7bnN9fS5qc29uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsbGJhY2tMbmc6IFwiZXNcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxuZzogXCJlblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGVuYWJsZXMgdGhlIHZhbGlkYXRpb24gcHJvdmlkZXIgdG8gd29yayB3aXRoIHRoZSBpbnRlcm5hdGlvbmFsaXphdGlvbiBwbHVnaW4gKEkxOE4pXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc2VlIHRoZSBhdXJlbGlhIGRvY3MgZm9yIG1vcmUgaW5mbyBvbiB0aGlzIGhlcmU6ICAgaHR0cHM6Ly9hdXJlbGlhLmlvL2RvY3MvcGx1Z2lucy92YWxpZGF0aW9uI2ludGVncmF0aW5nLXdpdGgtYXVyZWxpYS1pMThuXHJcbiAgICAgICAgICAgICAgICAgICAgYXVyZWxpYV92YWxpZGF0aW9uXzEuVmFsaWRhdGlvbk1lc3NhZ2VQcm92aWRlci5wcm90b3R5cGUuZ2V0TWVzc2FnZSA9IGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkxOG4gPSBhdXJlbGlhLmNvbnRhaW5lci5nZXQoYXVyZWxpYV9pMThuXzEuSTE4Tik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0cmFuc2xhdGlvbiA9IGkxOG4udHIoXCJlcnJvck1lc3NhZ2VzLlwiICsga2V5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLnBhcnNlci5wYXJzZSh0cmFuc2xhdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBhdXJlbGlhX3ZhbGlkYXRpb25fMS5WYWxpZGF0aW9uTWVzc2FnZVByb3ZpZGVyLnByb3RvdHlwZS5nZXREaXNwbGF5TmFtZSA9IGZ1bmN0aW9uIChwcm9wZXJ0eU5hbWUsIGRpc3BsYXlOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaXNwbGF5TmFtZSAhPT0gbnVsbCAmJiBkaXNwbGF5TmFtZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGlzcGxheU5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkxOG4gPSBhdXJlbGlhLmNvbnRhaW5lci5nZXQoYXVyZWxpYV9pMThuXzEuSTE4Tik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkbiA9IGkxOG4udHIocHJvcGVydHlOYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRuO1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgYXVyZWxpYS5zdGFydCgpXTtcclxuICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICBfYS5zZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgYXVyZWxpYS5zZXRSb290KGF1cmVsaWFfZnJhbWV3b3JrXzEuUExBVEZPUk0ubW9kdWxlTmFtZShcImFwcFwiKSldO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgICAgIF9hLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qL107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG59XHJcbmV4cG9ydHMuY29uZmlndXJlID0gY29uZmlndXJlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///main\n')},"value-converters/DateFormatValueConverter":function(module,exports,__webpack_require__){"use strict";eval("\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar moment = __webpack_require__(2);\r\nvar DateFormatValueConverter = /** @class */ (function () {\r\n    function DateFormatValueConverter() {\r\n    }\r\n    DateFormatValueConverter.prototype.toView = function (value, format) {\r\n        if (!value) {\r\n            return '';\r\n        }\r\n        return moment.utc(value).format(format);\r\n    };\r\n    return DateFormatValueConverter;\r\n}());\r\nexports.DateFormatValueConverter = DateFormatValueConverter;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvdmFsdWUtY29udmVydGVycy9EYXRlRm9ybWF0VmFsdWVDb252ZXJ0ZXIudHM/OTY5OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE4QyxjQUFjO0FBQzVELGFBQWEsbUJBQU8sQ0FBQyxDQUFRO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEIiwiZmlsZSI6InZhbHVlLWNvbnZlcnRlcnMvRGF0ZUZvcm1hdFZhbHVlQ29udmVydGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIG1vbWVudCA9IHJlcXVpcmUoXCJtb21lbnRcIik7XHJcbnZhciBEYXRlRm9ybWF0VmFsdWVDb252ZXJ0ZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBEYXRlRm9ybWF0VmFsdWVDb252ZXJ0ZXIoKSB7XHJcbiAgICB9XHJcbiAgICBEYXRlRm9ybWF0VmFsdWVDb252ZXJ0ZXIucHJvdG90eXBlLnRvVmlldyA9IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0KSB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtb21lbnQudXRjKHZhbHVlKS5mb3JtYXQoZm9ybWF0KTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gRGF0ZUZvcm1hdFZhbHVlQ29udmVydGVyO1xyXG59KCkpO1xyXG5leHBvcnRzLkRhdGVGb3JtYXRWYWx1ZUNvbnZlcnRlciA9IERhdGVGb3JtYXRWYWx1ZUNvbnZlcnRlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///value-converters/DateFormatValueConverter\n")},"value-converters/NullableNumberValueConverter":function(module,exports,__webpack_require__){"use strict";eval("\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar numeral = __webpack_require__(192);\r\nvar NullableNumberValueConverter = /** @class */ (function () {\r\n    function NullableNumberValueConverter() {\r\n    }\r\n    NullableNumberValueConverter.prototype.toView = function (value, format) {\r\n        if (value) {\r\n            return numeral(value).format(format);\r\n        }\r\n        else {\r\n            return ' ';\r\n        }\r\n    };\r\n    return NullableNumberValueConverter;\r\n}());\r\nexports.NullableNumberValueConverter = NullableNumberValueConverter;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvdmFsdWUtY29udmVydGVycy9OdWxsYWJsZU51bWJlclZhbHVlQ29udmVydGVyLnRzPzBmMzciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBOEMsY0FBYztBQUM1RCxjQUFjLG1CQUFPLENBQUMsR0FBUztBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QiLCJmaWxlIjoidmFsdWUtY29udmVydGVycy9OdWxsYWJsZU51bWJlclZhbHVlQ29udmVydGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIG51bWVyYWwgPSByZXF1aXJlKFwibnVtZXJhbFwiKTtcclxudmFyIE51bGxhYmxlTnVtYmVyVmFsdWVDb252ZXJ0ZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBOdWxsYWJsZU51bWJlclZhbHVlQ29udmVydGVyKCkge1xyXG4gICAgfVxyXG4gICAgTnVsbGFibGVOdW1iZXJWYWx1ZUNvbnZlcnRlci5wcm90b3R5cGUudG9WaWV3ID0gZnVuY3Rpb24gKHZhbHVlLCBmb3JtYXQpIHtcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bWVyYWwodmFsdWUpLmZvcm1hdChmb3JtYXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuICcgJztcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIE51bGxhYmxlTnVtYmVyVmFsdWVDb252ZXJ0ZXI7XHJcbn0oKSk7XHJcbmV4cG9ydHMuTnVsbGFibGVOdW1iZXJWYWx1ZUNvbnZlcnRlciA9IE51bGxhYmxlTnVtYmVyVmFsdWVDb252ZXJ0ZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///value-converters/NullableNumberValueConverter\n")},"value-converters/index":function(module,exports,__webpack_require__){"use strict";eval("\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar aurelia_framework_1 = __webpack_require__(\"aurelia-framework\");\r\nfunction configure(config) {\r\n    config.globalResources([\r\n        './DateFormatValueConverter',\r\n        './NullableNumberValueConverter'\r\n    ]);\r\n}\r\nexports.configure = configure;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvdmFsdWUtY29udmVydGVycy9pbmRleC50cz9hY2RjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQThDLGNBQWM7QUFDNUQsMEJBQTBCLG1CQUFPLENBQUMsbUJBQW1CO0FBQ3JEO0FBQ0E7QUFDQSxRQUFRLDRCQUFxRTtBQUM3RSxRQUFRLGdDQUF5RTtBQUNqRjtBQUNBO0FBQ0EiLCJmaWxlIjoidmFsdWUtY29udmVydGVycy9pbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBhdXJlbGlhX2ZyYW1ld29ya18xID0gcmVxdWlyZShcImF1cmVsaWEtZnJhbWV3b3JrXCIpO1xyXG5mdW5jdGlvbiBjb25maWd1cmUoY29uZmlnKSB7XHJcbiAgICBjb25maWcuZ2xvYmFsUmVzb3VyY2VzKFtcclxuICAgICAgICBhdXJlbGlhX2ZyYW1ld29ya18xLlBMQVRGT1JNLm1vZHVsZU5hbWUoJy4vRGF0ZUZvcm1hdFZhbHVlQ29udmVydGVyJyksXHJcbiAgICAgICAgYXVyZWxpYV9mcmFtZXdvcmtfMS5QTEFURk9STS5tb2R1bGVOYW1lKCcuL051bGxhYmxlTnVtYmVyVmFsdWVDb252ZXJ0ZXInKVxyXG4gICAgXSk7XHJcbn1cclxuZXhwb3J0cy5jb25maWd1cmUgPSBjb25maWd1cmU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///value-converters/index\n")}});$(document).ready(function(){$(document).on("click",".modal-close",function(){$(".modal").removeClass("active");window.location.hash="#!";$(".select2-drop").hide()})})