@asgardeo/auth-spa 3.2.0 → 3.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function t(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function i(e){if(e.__esModule)return e;var t=Object.defineProperty({},"__esModule",{value:!0});return Object.keys(e).forEach((function(i){var n=Object.getOwnPropertyDescriptor(e,i);Object.defineProperty(t,i,n.get?n:{enumerable:!0,get:function(){return e[i]}})})),t}var n=function(e){return e&&e.Math==Math&&e},l=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof e&&e)||function(){return this}()||Function("return this")(),o=l,c=function(e){try{return!!e()}catch(e){return!0}},a=!c((function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")})),r=a,d=Function.prototype,s=d.bind,u=d.call,Z=r&&s.bind(u,u),h=r?function(e){return e&&Z(e)}:function(e){return e&&function(){return u.apply(e,arguments)}},b=TypeError,m=function(e){if(null==e)throw b("Can't call method on "+e);return e},I=m,p=Object,g=function(e){return p(I(e))},G=g,y=h({}.hasOwnProperty),X=Object.hasOwn||function(e,t){return y(G(e),t)},V={},W={exports:{}},C=l,R=Object.defineProperty,v=function(e,t){try{R(C,e,{value:t,configurable:!0,writable:!0})}catch(i){C[e]=t}return t},S=v,f=l["__core-js_shared__"]||S("__core-js_shared__",{}),Y=f;(W.exports=function(e,t){return Y[e]||(Y[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.24.0",mode:"global",copyright:"© 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.24.0/LICENSE",source:"https://github.com/zloirock/core-js"});var K,N,J=h,L=0,U=Math.random(),k=J(1..toString),H=function(e){return"Symbol("+(void 0===e?"":e)+")_"+k(++L+U,36)},A=function(e){return"function"==typeof e},T=l,F=A,B=function(e){return F(e)?e:void 0},w=function(e,t){return arguments.length<2?B(T[e]):T[e]&&T[e][t]},x=w("navigator","userAgent")||"",z=l,P=x,j=z.process,Q=z.Deno,M=j&&j.versions||Q&&Q.version,E=M&&M.v8;E&&(N=(K=E.split("."))[0]>0&&K[0]<4?1:+(K[0]+K[1])),!N&&P&&(!(K=P.match(/Edge\/(\d+)/))||K[1]>=74)&&(K=P.match(/Chrome\/(\d+)/))&&(N=+K[1]);var D=N,O=D,_=c,q=!!Object.getOwnPropertySymbols&&!_((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&O&&O<41})),$=q&&!Symbol.sham&&"symbol"==typeof Symbol.iterator,ee=l,te=W.exports,ie=X,ne=H,le=q,oe=$,ce=te("wks"),ae=ee.Symbol,re=ae&&ae.for,de=oe?ae:ae&&ae.withoutSetter||ne,se=function(e){if(!ie(ce,e)||!le&&"string"!=typeof ce[e]){var t="Symbol."+e;le&&ie(ae,e)?ce[e]=ae[e]:ce[e]=oe&&re?re(t):de(t)}return ce[e]},ue=se;V.f=ue;var Ze={},he=!c((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})),be=A,me=function(e){return"object"==typeof e?null!==e:be(e)},Ie=me,pe=l.document,ge=Ie(pe)&&Ie(pe.createElement),Ge=function(e){return ge?pe.createElement(e):{}},ye=Ge,Xe=!he&&!c((function(){return 7!=Object.defineProperty(ye("div"),"a",{get:function(){return 7}}).a})),Ve=he&&c((function(){return 42!=Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype})),We=me,Ce=String,Re=TypeError,ve=function(e){if(We(e))return e;throw Re(Ce(e)+" is not an object")},Se=a,fe=Function.prototype.call,Ye=Se?fe.bind(fe):function(){return fe.apply(fe,arguments)},Ke=h({}.isPrototypeOf),Ne=w,Je=A,Le=Ke,Ue=Object,ke=$?function(e){return"symbol"==typeof e}:function(e){var t=Ne("Symbol");return Je(t)&&Le(t.prototype,Ue(e))},He=String,Ae=function(e){try{return He(e)}catch(e){return"Object"}},Te=A,Fe=Ae,Be=TypeError,we=function(e){if(Te(e))return e;throw Be(Fe(e)+" is not a function")},xe=we,ze=function(e,t){var i=e[t];return null==i?void 0:xe(i)},Pe=Ye,je=A,Qe=me,Me=TypeError,Ee=Ye,De=me,Oe=ke,_e=ze,qe=function(e,t){var i,n;if("string"===t&&je(i=e.toString)&&!Qe(n=Pe(i,e)))return n;if(je(i=e.valueOf)&&!Qe(n=Pe(i,e)))return n;if("string"!==t&&je(i=e.toString)&&!Qe(n=Pe(i,e)))return n;throw Me("Can't convert object to primitive value")},$e=TypeError,et=se("toPrimitive"),tt=function(e,t){if(!De(e)||Oe(e))return e;var i,n=_e(e,et);if(n){if(void 0===t&&(t="default"),i=Ee(n,e,t),!De(i)||Oe(i))return i;throw $e("Can't convert object to primitive value")}return void 0===t&&(t="number"),qe(e,t)},it=tt,nt=ke,lt=function(e){var t=it(e,"string");return nt(t)?t:t+""},ot=he,ct=Xe,at=Ve,rt=ve,dt=lt,st=TypeError,ut=Object.defineProperty,Zt=Object.getOwnPropertyDescriptor;Ze.f=ot?at?function(e,t,i){if(rt(e),t=dt(t),rt(i),"function"==typeof e&&"prototype"===t&&"value"in i&&"writable"in i&&!i.writable){var n=Zt(e,t);n&&n.writable&&(e[t]=i.value,i={configurable:"configurable"in i?i.configurable:n.configurable,enumerable:"enumerable"in i?i.enumerable:n.enumerable,writable:!1})}return ut(e,t,i)}:ut:function(e,t,i){if(rt(e),t=dt(t),rt(i),ct)try{return ut(e,t,i)}catch(e){}if("get"in i||"set"in i)throw st("Accessors not supported");return"value"in i&&(e[t]=i.value),e};var ht=o,bt=X,mt=V,It=Ze.f,pt=function(e){var t=ht.Symbol||(ht.Symbol={});bt(t,e)||It(t,e,{value:mt.f(e)})};pt("matchAll");var gt={},Gt={},yt={}.propertyIsEnumerable,Xt=Object.getOwnPropertyDescriptor,Vt=Xt&&!yt.call({1:2},1);Gt.f=Vt?function(e){var t=Xt(this,e);return!!t&&t.enumerable}:yt;var Wt=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},Ct=h,Rt=Ct({}.toString),vt=Ct("".slice),St=function(e){return vt(Rt(e),8,-1)},ft=c,Yt=St,Kt=Object,Nt=h("".split),Jt=ft((function(){return!Kt("z").propertyIsEnumerable(0)}))?function(e){return"String"==Yt(e)?Nt(e,""):Kt(e)}:Kt,Lt=Jt,Ut=m,kt=function(e){return Lt(Ut(e))},Ht=he,At=Ye,Tt=Gt,Ft=Wt,Bt=kt,wt=lt,xt=X,zt=Xe,Pt=Object.getOwnPropertyDescriptor;gt.f=Ht?Pt:function(e,t){if(e=Bt(e),t=wt(t),zt)try{return Pt(e,t)}catch(e){}if(xt(e,t))return Ft(!At(Tt.f,e,t),e[t])};var jt=Ze,Qt=Wt,Mt=he?function(e,t,i){return jt.f(e,t,Qt(1,i))}:function(e,t,i){return e[t]=i,e},Et={exports:{}},Dt=he,Ot=X,_t=Function.prototype,qt=Dt&&Object.getOwnPropertyDescriptor,$t=Ot(_t,"name"),ei={EXISTS:$t,PROPER:$t&&"something"===function(){}.name,CONFIGURABLE:$t&&(!Dt||Dt&&qt(_t,"name").configurable)},ti=A,ii=f,ni=h(Function.toString);ti(ii.inspectSource)||(ii.inspectSource=function(e){return ni(e)});var li,oi,ci,ai=ii.inspectSource,ri=A,di=ai,si=l.WeakMap,ui=ri(si)&&/native code/.test(di(si)),Zi=W.exports,hi=H,bi=Zi("keys"),mi=function(e){return bi[e]||(bi[e]=hi(e))},Ii={},pi=ui,gi=l,Gi=h,yi=me,Xi=Mt,Vi=X,Wi=f,Ci=mi,Ri=Ii,vi=gi.TypeError,Si=gi.WeakMap;if(pi||Wi.state){var fi=Wi.state||(Wi.state=new Si),Yi=Gi(fi.get),Ki=Gi(fi.has),Ni=Gi(fi.set);li=function(e,t){if(Ki(fi,e))throw new vi("Object already initialized");return t.facade=e,Ni(fi,e,t),t},oi=function(e){return Yi(fi,e)||{}},ci=function(e){return Ki(fi,e)}}else{var Ji=Ci("state");Ri[Ji]=!0,li=function(e,t){if(Vi(e,Ji))throw new vi("Object already initialized");return t.facade=e,Xi(e,Ji,t),t},oi=function(e){return Vi(e,Ji)?e[Ji]:{}},ci=function(e){return Vi(e,Ji)}}var Li={set:li,get:oi,has:ci,enforce:function(e){return ci(e)?oi(e):li(e,{})},getterFor:function(e){return function(t){var i;if(!yi(t)||(i=oi(t)).type!==e)throw vi("Incompatible receiver, "+e+" required");return i}}},Ui=c,ki=A,Hi=X,Ai=he,Ti=ei.CONFIGURABLE,Fi=ai,Bi=Li.enforce,wi=Li.get,xi=Object.defineProperty,zi=Ai&&!Ui((function(){return 8!==xi((function(){}),"length",{value:8}).length})),Pi=String(String).split("String"),ji=Et.exports=function(e,t,i){"Symbol("===String(t).slice(0,7)&&(t="["+String(t).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),i&&i.getter&&(t="get "+t),i&&i.setter&&(t="set "+t),(!Hi(e,"name")||Ti&&e.name!==t)&&(Ai?xi(e,"name",{value:t,configurable:!0}):e.name=t),zi&&i&&Hi(i,"arity")&&e.length!==i.arity&&xi(e,"length",{value:i.arity});try{i&&Hi(i,"constructor")&&i.constructor?Ai&&xi(e,"prototype",{writable:!1}):e.prototype&&(e.prototype=void 0)}catch(e){}var n=Bi(e);return Hi(n,"source")||(n.source=Pi.join("string"==typeof t?t:"")),e};Function.prototype.toString=ji((function(){return ki(this)&&wi(this).source||Fi(this)}),"toString");var Qi=A,Mi=Ze,Ei=Et.exports,Di=v,Oi=function(e,t,i,n){n||(n={});var l=n.enumerable,o=void 0!==n.name?n.name:t;if(Qi(i)&&Ei(i,o,n),n.global)l?e[t]=i:Di(t,i);else{try{n.unsafe?e[t]&&(l=!0):delete e[t]}catch(e){}l?e[t]=i:Mi.f(e,t,{value:i,enumerable:!1,configurable:!n.nonConfigurable,writable:!n.nonWritable})}return e},_i={},qi=Math.ceil,$i=Math.floor,en=Math.trunc||function(e){var t=+e;return(t>0?$i:qi)(t)},tn=en,nn=function(e){var t=+e;return t!=t||0===t?0:tn(t)},ln=nn,on=Math.max,cn=Math.min,an=function(e,t){var i=ln(e);return i<0?on(i+t,0):cn(i,t)},rn=nn,dn=Math.min,sn=function(e){return e>0?dn(rn(e),9007199254740991):0},un=sn,Zn=function(e){return un(e.length)},hn=kt,bn=an,mn=Zn,In=function(e){return function(t,i,n){var l,o=hn(t),c=mn(o),a=bn(n,c);if(e&&i!=i){for(;c>a;)if((l=o[a++])!=l)return!0}else for(;c>a;a++)if((e||a in o)&&o[a]===i)return e||a||0;return!e&&-1}},pn={includes:In(!0),indexOf:In(!1)},gn=X,Gn=kt,yn=pn.indexOf,Xn=Ii,Vn=h([].push),Wn=function(e,t){var i,n=Gn(e),l=0,o=[];for(i in n)!gn(Xn,i)&&gn(n,i)&&Vn(o,i);for(;t.length>l;)gn(n,i=t[l++])&&(~yn(o,i)||Vn(o,i));return o},Cn=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],Rn=Wn,vn=Cn.concat("length","prototype");_i.f=Object.getOwnPropertyNames||function(e){return Rn(e,vn)};var Sn={};Sn.f=Object.getOwnPropertySymbols;var fn=w,Yn=_i,Kn=Sn,Nn=ve,Jn=h([].concat),Ln=fn("Reflect","ownKeys")||function(e){var t=Yn.f(Nn(e)),i=Kn.f;return i?Jn(t,i(e)):t},Un=X,kn=Ln,Hn=gt,An=Ze,Tn=c,Fn=A,Bn=/#|\.prototype\./,wn=function(e,t){var i=zn[xn(e)];return i==jn||i!=Pn&&(Fn(t)?Tn(t):!!t)},xn=wn.normalize=function(e){return String(e).replace(Bn,".").toLowerCase()},zn=wn.data={},Pn=wn.NATIVE="N",jn=wn.POLYFILL="P",Qn=wn,Mn=l,En=gt.f,Dn=Mt,On=Oi,_n=v,qn=function(e,t,i){for(var n=kn(t),l=An.f,o=Hn.f,c=0;c<n.length;c++){var a=n[c];Un(e,a)||i&&Un(i,a)||l(e,a,o(t,a))}},$n=Qn,el=function(e,t){var i,n,l,o,c,a=e.target,r=e.global,d=e.stat;if(i=r?Mn:d?Mn[a]||_n(a,{}):(Mn[a]||{}).prototype)for(n in t){if(o=t[n],l=e.dontCallGetSet?(c=En(i,n))&&c.value:i[n],!$n(r?n:a+(d?".":"#")+n,e.forced)&&void 0!==l){if(typeof o==typeof l)continue;qn(o,l)}(e.sham||l&&l.sham)&&Dn(o,"sham",!0),On(i,n,o,e)}},tl={},il=Wn,nl=Cn,ll=Object.keys||function(e){return il(e,nl)},ol=he,cl=Ve,al=Ze,rl=ve,dl=kt,sl=ll;tl.f=ol&&!cl?Object.defineProperties:function(e,t){rl(e);for(var i,n=dl(t),l=sl(t),o=l.length,c=0;o>c;)al.f(e,i=l[c++],n[i]);return e};var ul,Zl=w("document","documentElement"),hl=ve,bl=tl,ml=Cn,Il=Ii,pl=Zl,gl=Ge,Gl=mi("IE_PROTO"),yl=function(){},Xl=function(e){return"<script>"+e+"<\/script>"},Vl=function(e){e.write(Xl("")),e.close();var t=e.parentWindow.Object;return e=null,t},Wl=function(){try{ul=new ActiveXObject("htmlfile")}catch(e){}var e,t;Wl="undefined"!=typeof document?document.domain&&ul?Vl(ul):((t=gl("iframe")).style.display="none",pl.appendChild(t),t.src=String("javascript:"),(e=t.contentWindow.document).open(),e.write(Xl("document.F=Object")),e.close(),e.F):Vl(ul);for(var i=ml.length;i--;)delete Wl.prototype[ml[i]];return Wl()};Il[Gl]=!0;var Cl=Object.create||function(e,t){var i;return null!==e?(yl.prototype=hl(e),i=new yl,yl.prototype=null,i[Gl]=e):i=Wl(),void 0===t?i:bl.f(i,t)},Rl=se,vl=Cl,Sl=Ze.f,fl=Rl("unscopables"),Yl=Array.prototype;null==Yl[fl]&&Sl(Yl,fl,{configurable:!0,value:vl(null)});var Kl=function(e){Yl[fl][e]=!0},Nl=pn.includes,Jl=Kl;el({target:"Array",proto:!0,forced:c((function(){return!Array(1).includes()}))},{includes:function(e){return Nl(this,e,arguments.length>1?arguments[1]:void 0)}}),Jl("includes"),Kl("flat"),Kl("flatMap");var Ll={},Ul=we,kl=function(e){var t,i;this.promise=new e((function(e,n){if(void 0!==t||void 0!==i)throw TypeError("Bad Promise constructor");t=e,i=n})),this.resolve=Ul(t),this.reject=Ul(i)};Ll.f=function(e){return new kl(e)};var Hl=we,Al=a,Tl=h(h.bind),Fl=function(e,t){return Hl(e),void 0===t?e:Al?Tl(e,t):function(){return e.apply(t,arguments)}},Bl={},wl=Bl,xl=se("iterator"),zl=Array.prototype,Pl=function(e){return void 0!==e&&(wl.Array===e||zl[xl]===e)},jl={};jl[se("toStringTag")]="z";var Ql="[object z]"===String(jl),Ml=A,El=St,Dl=se("toStringTag"),Ol=Object,_l="Arguments"==El(function(){return arguments}()),ql=Ql?El:function(e){var t,i,n;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(i=function(e,t){try{return e[t]}catch(e){}}(t=Ol(e),Dl))?i:_l?El(t):"Object"==(n=El(t))&&Ml(t.callee)?"Arguments":n},$l=ql,eo=ze,to=Bl,io=se("iterator"),no=function(e){if(null!=e)return eo(e,io)||eo(e,"@@iterator")||to[$l(e)]},lo=Ye,oo=we,co=ve,ao=Ae,ro=no,so=TypeError,uo=function(e,t){var i=arguments.length<2?ro(e):t;if(oo(i))return co(lo(i,e));throw so(ao(e)+" is not iterable")},Zo=Ye,ho=ve,bo=ze,mo=function(e,t,i){var n,l;ho(e);try{if(!(n=bo(e,"return"))){if("throw"===t)throw i;return i}n=Zo(n,e)}catch(e){l=!0,n=e}if("throw"===t)throw i;if(l)throw n;return ho(n),i},Io=Fl,po=Ye,go=ve,Go=Ae,yo=Pl,Xo=Zn,Vo=Ke,Wo=uo,Co=no,Ro=mo,vo=TypeError,So=function(e,t){this.stopped=e,this.result=t},fo=So.prototype,Yo=Ye,Ko=we,No=Ll,Jo=function(e){try{return{error:!1,value:e()}}catch(e){return{error:!0,value:e}}},Lo=function(e,t,i){var n,l,o,c,a,r,d,s=i&&i.that,u=!(!i||!i.AS_ENTRIES),Z=!(!i||!i.IS_RECORD),h=!(!i||!i.IS_ITERATOR),b=!(!i||!i.INTERRUPTED),m=Io(t,s),I=function(e){return n&&Ro(n,"normal",e),new So(!0,e)},p=function(e){return u?(go(e),b?m(e[0],e[1],I):m(e[0],e[1])):b?m(e,I):m(e)};if(Z)n=e.iterator;else if(h)n=e;else{if(!(l=Co(e)))throw vo(Go(e)+" is not iterable");if(yo(l)){for(o=0,c=Xo(e);c>o;o++)if((a=p(e[o]))&&Vo(fo,a))return a;return new So(!1)}n=Wo(e,l)}for(r=Z?e.next:n.next;!(d=po(r,n)).done;){try{a=p(d.value)}catch(e){Ro(n,"throw",e)}if("object"==typeof a&&a&&Vo(fo,a))return a}return new So(!1)};el({target:"Promise",stat:!0},{allSettled:function(e){var t=this,i=No.f(t),n=i.resolve,l=i.reject,o=Jo((function(){var i=Ko(t.resolve),l=[],o=0,c=1;Lo(e,(function(e){var a=o++,r=!1;c++,Yo(i,t,e).then((function(e){r||(r=!0,l[a]={status:"fulfilled",value:e},--c||n(l))}),(function(e){r||(r=!0,l[a]={status:"rejected",reason:e},--c||n(l))}))})),--c||n(l)}));return o.error&&l(o.value),i.promise}});var Uo=l.Promise,ko=h,Ho=c,Ao=A,To=ql,Fo=ai,Bo=function(){},wo=[],xo=w("Reflect","construct"),zo=/^\s*(?:class|function)\b/,Po=ko(zo.exec),jo=!zo.exec(Bo),Qo=function(e){if(!Ao(e))return!1;try{return xo(Bo,wo,e),!0}catch(e){return!1}},Mo=function(e){if(!Ao(e))return!1;switch(To(e)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return jo||!!Po(zo,Fo(e))}catch(e){return!0}};Mo.sham=!0;var Eo=!xo||Ho((function(){var e;return Qo(Qo.call)||!Qo(Object)||!Qo((function(){e=!0}))||e}))?Mo:Qo,Do=Eo,Oo=Ae,_o=TypeError,qo=function(e){if(Do(e))return e;throw _o(Oo(e)+" is not a constructor")},$o=ve,ec=qo,tc=se("species"),ic=function(e,t){var i,n=$o(e).constructor;return void 0===n||null==(i=$o(n)[tc])?t:ec(i)},nc=ve,lc=me,oc=Ll,cc=el,ac=Uo,rc=c,dc=w,sc=A,uc=ic,Zc=function(e,t){if(nc(e),lc(t)&&t.constructor===e)return t;var i=oc.f(e);return(0,i.resolve)(t),i.promise},hc=Oi,bc=ac&&ac.prototype;if(cc({target:"Promise",proto:!0,real:!0,forced:!!ac&&rc((function(){bc.finally.call({then:function(){}},(function(){}))}))},{finally:function(e){var t=uc(this,dc("Promise")),i=sc(e);return this.then(i?function(i){return Zc(t,e()).then((function(){return i}))}:e,i?function(i){return Zc(t,e()).then((function(){throw i}))}:e)}}),sc(ac)){var mc=dc("Promise").prototype.finally;bc.finally!==mc&&hc(bc,"finally",mc,{unsafe:!0})}var Ic=Et.exports,pc=Ze,gc=function(e,t,i){return i.get&&Ic(i.get,t,{getter:!0}),i.set&&Ic(i.set,t,{setter:!0}),pc.f(e,t,i)},Gc=ve,yc=function(){var e=Gc(this),t="";return e.hasIndices&&(t+="d"),e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.dotAll&&(t+="s"),e.unicode&&(t+="u"),e.unicodeSets&&(t+="v"),e.sticky&&(t+="y"),t},Xc=he,Vc=gc,Wc=yc,Cc=c,Rc=l.RegExp,vc=Rc.prototype,Sc=Xc&&Cc((function(){var e=!0;try{Rc(".","d")}catch(t){e=!1}var t={},i="",n=e?"dgimsy":"gimsy",l=function(e,n){Object.defineProperty(t,e,{get:function(){return i+=n,!0}})},o={dotAll:"s",global:"g",ignoreCase:"i",multiline:"m",sticky:"y"};for(var c in e&&(o.hasIndices="d"),o)l(c,o[c]);return Object.getOwnPropertyDescriptor(vc,"flags").get.call(t)!==n||i!==n}));Sc&&Vc(vc,"flags",{configurable:!0,get:Wc});var fc,Yc,Kc,Nc=!c((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype})),Jc=X,Lc=A,Uc=g,kc=Nc,Hc=mi("IE_PROTO"),Ac=Object,Tc=Ac.prototype,Fc=kc?Ac.getPrototypeOf:function(e){var t=Uc(e);if(Jc(t,Hc))return t[Hc];var i=t.constructor;return Lc(i)&&t instanceof i?i.prototype:t instanceof Ac?Tc:null},Bc=c,wc=A,xc=Fc,zc=Oi,Pc=se("iterator"),jc=!1;[].keys&&("next"in(Kc=[].keys())?(Yc=xc(xc(Kc)))!==Object.prototype&&(fc=Yc):jc=!0);var Qc=null==fc||Bc((function(){var e={};return fc[Pc].call(e)!==e}));Qc&&(fc={}),wc(fc[Pc])||zc(fc,Pc,(function(){return this}));var Mc,Ec,Dc={IteratorPrototype:fc,BUGGY_SAFARI_ITERATORS:jc},Oc=Ze.f,_c=X,qc=se("toStringTag"),$c=function(e,t,i){e&&!i&&(e=e.prototype),e&&!_c(e,qc)&&Oc(e,qc,{configurable:!0,value:t})},ea=Dc.IteratorPrototype,ta=Cl,ia=Wt,na=$c,la=Bl,oa=function(){return this},ca=function(e,t,i,n){var l=t+" Iterator";return e.prototype=ta(ea,{next:ia(+!n,i)}),na(e,l,!1),la[l]=oa,e},aa=ql,ra=String,da=function(e){if("Symbol"===aa(e))throw TypeError("Cannot convert a Symbol value to a string");return ra(e)},sa=me,ua=St,Za=se("match"),ha=Ye,ba=X,ma=Ke,Ia=yc,pa=RegExp.prototype,ga=h,Ga=nn,ya=da,Xa=m,Va=ga("".charAt),Wa=ga("".charCodeAt),Ca=ga("".slice),Ra=function(e){return function(t,i){var n,l,o=ya(Xa(t)),c=Ga(i),a=o.length;return c<0||c>=a?e?"":void 0:(n=Wa(o,c))<55296||n>56319||c+1===a||(l=Wa(o,c+1))<56320||l>57343?e?Va(o,c):n:e?Ca(o,c,c+2):l-56320+(n-55296<<10)+65536}},va={codeAt:Ra(!1),charAt:Ra(!0)},Sa=va.charAt,fa=function(e,t,i){return t+(i?Sa(e,t).length:1)},Ya=c,Ka=l.RegExp,Na=Ya((function(){var e=Ka("a","y");return e.lastIndex=2,null!=e.exec("abcd")})),Ja=Na||Ya((function(){return!Ka("a","y").sticky})),La={BROKEN_CARET:Na||Ya((function(){var e=Ka("^r","gy");return e.lastIndex=2,null!=e.exec("str")})),MISSED_STICKY:Ja,UNSUPPORTED_Y:Na},Ua=c,ka=l.RegExp,Ha=Ua((function(){var e=ka(".","s");return!(e.dotAll&&e.exec("\n")&&"s"===e.flags)})),Aa=c,Ta=l.RegExp,Fa=Aa((function(){var e=Ta("(?<a>b)","g");return"b"!==e.exec("b").groups.a||"bc"!=="b".replace(e,"$<a>c")})),Ba=Ye,wa=h,xa=da,za=yc,Pa=La,ja=W.exports,Qa=Cl,Ma=Li.get,Ea=Ha,Da=Fa,Oa=ja("native-string-replace",String.prototype.replace),_a=RegExp.prototype.exec,qa=_a,$a=wa("".charAt),er=wa("".indexOf),tr=wa("".replace),ir=wa("".slice),nr=(Ec=/b*/g,Ba(_a,Mc=/a/,"a"),Ba(_a,Ec,"a"),0!==Mc.lastIndex||0!==Ec.lastIndex),lr=Pa.BROKEN_CARET,or=void 0!==/()??/.exec("")[1];(nr||or||lr||Ea||Da)&&(qa=function(e){var t,i,n,l,o,c,a,r=this,d=Ma(r),s=xa(e),u=d.raw;if(u)return u.lastIndex=r.lastIndex,t=Ba(qa,u,s),r.lastIndex=u.lastIndex,t;var Z=d.groups,h=lr&&r.sticky,b=Ba(za,r),m=r.source,I=0,p=s;if(h&&(b=tr(b,"y",""),-1===er(b,"g")&&(b+="g"),p=ir(s,r.lastIndex),r.lastIndex>0&&(!r.multiline||r.multiline&&"\n"!==$a(s,r.lastIndex-1))&&(m="(?: "+m+")",p=" "+p,I++),i=new RegExp("^(?:"+m+")",b)),or&&(i=new RegExp("^"+m+"$(?!\\s)",b)),nr&&(n=r.lastIndex),l=Ba(_a,h?i:r,p),h?l?(l.input=ir(l.input,I),l[0]=ir(l[0],I),l.index=r.lastIndex,r.lastIndex+=l[0].length):r.lastIndex=0:nr&&l&&(r.lastIndex=r.global?l.index+l[0].length:n),or&&l&&l.length>1&&Ba(Oa,l[0],i,(function(){for(o=1;o<arguments.length-2;o++)void 0===arguments[o]&&(l[o]=void 0)})),l&&Z)for(l.groups=c=Qa(null),o=0;o<Z.length;o++)c[(a=Z[o])[0]]=l[a[1]];return l});var cr=qa,ar=Ye,rr=ve,dr=A,sr=St,ur=cr,Zr=TypeError,hr=function(e,t){var i=e.exec;if(dr(i)){var n=ar(i,e,t);return null!==n&&rr(n),n}if("RegExp"===sr(e))return ar(ur,e,t);throw Zr("RegExp#exec called on incompatible receiver")},br=el,mr=Ye,Ir=h,pr=ca,gr=m,Gr=sn,yr=da,Xr=ve,Vr=function(e){var t;return sa(e)&&(void 0!==(t=e[Za])?!!t:"RegExp"==ua(e))},Wr=function(e){var t=e.flags;return void 0!==t||"flags"in pa||ba(e,"flags")||!ma(pa,e)?t:ha(Ia,e)},Cr=ze,Rr=Oi,vr=c,Sr=ic,fr=fa,Yr=hr,Kr=Li,Nr=se("matchAll"),Jr=Kr.set,Lr=Kr.getterFor("RegExp String Iterator"),Ur=RegExp.prototype,kr=TypeError,Hr=Ir("".indexOf),Ar=Ir("".matchAll),Tr=!!Ar&&!vr((function(){Ar("a",/./)})),Fr=pr((function(e,t,i,n){Jr(this,{type:"RegExp String Iterator",regexp:e,string:t,global:i,unicode:n,done:!1})}),"RegExp String",(function(){var e=Lr(this);if(e.done)return{value:void 0,done:!0};var t=e.regexp,i=e.string,n=Yr(t,i);return null===n?{value:void 0,done:e.done=!0}:e.global?(""===yr(n[0])&&(t.lastIndex=fr(i,Gr(t.lastIndex),e.unicode)),{value:n,done:!1}):(e.done=!0,{value:n,done:!1})})),Br=function(e){var t,i,n,l=Xr(this),o=yr(e),c=Sr(l,RegExp),a=yr(Wr(l));return t=new c(c===RegExp?l.source:l,a),i=!!~Hr(a,"g"),n=!!~Hr(a,"u"),t.lastIndex=Gr(l.lastIndex),new Fr(t,o,i,n)};br({target:"String",proto:!0,forced:Tr},{matchAll:function(e){var t,i,n,l=gr(this);if(null!=e){if(Vr(e)&&(t=yr(gr(Wr(e))),!~Hr(t,"g")))throw kr("`.matchAll` does not allow non-global regexes");if(Tr)return Ar(l,e);if(n=Cr(e,Nr))return mr(n,e,l)}else if(Tr)return Ar(l,e);return i=yr(l),new RegExp(e,"g")[Nr](i)}}),Nr in Ur||Rr(Ur,Nr,Br);var wr=a,xr=Function.prototype,zr=xr.apply,Pr=xr.call,jr="object"==typeof Reflect&&Reflect.apply||(wr?Pr.bind(zr):function(){return Pr.apply(zr,arguments)});el({target:"RegExp",proto:!0,forced:/./.exec!==cr},{exec:cr});var Qr=h,Mr=Oi,Er=cr,Dr=c,Or=se,_r=Mt,qr=Or("species"),$r=RegExp.prototype,ed=h,td=g,id=Math.floor,nd=ed("".charAt),ld=ed("".replace),od=ed("".slice),cd=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,ad=/\$([$&'`]|\d{1,2})/g,rd=jr,dd=Ye,sd=h,ud=function(e,t,i,n){var l=Or(e),o=!Dr((function(){var t={};return t[l]=function(){return 7},7!=""[e](t)})),c=o&&!Dr((function(){var t=!1,i=/a/;return"split"===e&&((i={}).constructor={},i.constructor[qr]=function(){return i},i.flags="",i[l]=/./[l]),i.exec=function(){return t=!0,null},i[l](""),!t}));if(!o||!c||i){var a=Qr(/./[l]),r=t(l,""[e],(function(e,t,i,n,l){var c=Qr(e),r=t.exec;return r===Er||r===$r.exec?o&&!l?{done:!0,value:a(t,i,n)}:{done:!0,value:c(i,t,n)}:{done:!1}}));Mr(String.prototype,e,r[0]),Mr($r,l,r[1])}n&&_r($r[l],"sham",!0)},Zd=c,hd=ve,bd=A,md=nn,Id=sn,pd=da,gd=m,Gd=fa,yd=ze,Xd=function(e,t,i,n,l,o){var c=i+e.length,a=n.length,r=ad;return void 0!==l&&(l=td(l),r=cd),ld(o,r,(function(o,r){var d;switch(nd(r,0)){case"$":return"$";case"&":return e;case"`":return od(t,0,i);case"'":return od(t,c);case"<":d=l[od(r,1,-1)];break;default:var s=+r;if(0===s)return o;if(s>a){var u=id(s/10);return 0===u?o:u<=a?void 0===n[u-1]?nd(r,1):n[u-1]+nd(r,1):o}d=n[s-1]}return void 0===d?"":d}))},Vd=hr,Wd=se("replace"),Cd=Math.max,Rd=Math.min,vd=sd([].concat),Sd=sd([].push),fd=sd("".indexOf),Yd=sd("".slice),Kd="$0"==="a".replace(/./,"$0"),Nd=!!/./[Wd]&&""===/./[Wd]("a","$0");ud("replace",(function(e,t,i){var n=Nd?"$":"$0";return[function(e,i){var n=gd(this),l=null==e?void 0:yd(e,Wd);return l?dd(l,e,n,i):dd(t,pd(n),e,i)},function(e,l){var o=hd(this),c=pd(e);if("string"==typeof l&&-1===fd(l,n)&&-1===fd(l,"$<")){var a=i(t,o,c,l);if(a.done)return a.value}var r=bd(l);r||(l=pd(l));var d=o.global;if(d){var s=o.unicode;o.lastIndex=0}for(var u=[];;){var Z=Vd(o,c);if(null===Z)break;if(Sd(u,Z),!d)break;""===pd(Z[0])&&(o.lastIndex=Gd(c,Id(o.lastIndex),s))}for(var h,b="",m=0,I=0;I<u.length;I++){for(var p=pd((Z=u[I])[0]),g=Cd(Rd(md(Z.index),c.length),0),G=[],y=1;y<Z.length;y++)Sd(G,void 0===(h=Z[y])?h:String(h));var X=Z.groups;if(r){var V=vd([p],G,g,c);void 0!==X&&Sd(V,X);var W=pd(rd(l,void 0,V))}else W=Xd(p,c,g,G,X,l);g>=m&&(b+=Yd(c,m,g)+W,m=g+p.length)}return b+Yd(c,m)}]}),!!Zd((function(){var e=/./;return e.exec=function(){var e=[];return e.groups={a:"7"},e},"7"!=="".replace(e,"$<a>")}))||!Kd||Nd);var Jd={exports:{}},Ld=se("iterator"),Ud=!1;try{var kd=0,Hd={next:function(){return{done:!!kd++}},return:function(){Ud=!0}};Hd[Ld]=function(){return this},Array.from(Hd,(function(){throw 2}))}catch(e){}var Ad,Td,Fd,Bd="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView,wd=A,xd=String,zd=TypeError,Pd=h,jd=ve,Qd=function(e){if("object"==typeof e||wd(e))return e;throw zd("Can't set "+xd(e)+" as a prototype")},Md=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,i={};try{(e=Pd(Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set))(i,[]),t=i instanceof Array}catch(e){}return function(i,n){return jd(i),Qd(n),t?e(i,n):i.__proto__=n,i}}():void 0),Ed=Bd,Dd=he,Od=l,_d=A,qd=me,$d=X,es=ql,ts=Ae,is=Mt,ns=Oi,ls=Ze.f,os=Ke,cs=Fc,as=Md,rs=se,ds=H,ss=Li.enforce,us=Li.get,Zs=Od.Int8Array,hs=Zs&&Zs.prototype,bs=Od.Uint8ClampedArray,ms=bs&&bs.prototype,Is=Zs&&cs(Zs),ps=hs&&cs(hs),gs=Object.prototype,Gs=Od.TypeError,ys=rs("toStringTag"),Xs=ds("TYPED_ARRAY_TAG"),Vs=Ed&&!!as&&"Opera"!==es(Od.opera),Ws=!1,Cs={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},Rs={BigInt64Array:8,BigUint64Array:8},vs=function(e){var t=cs(e);if(qd(t)){var i=us(t);return i&&$d(i,"TypedArrayConstructor")?i.TypedArrayConstructor:vs(t)}},Ss=function(e){if(!qd(e))return!1;var t=es(e);return $d(Cs,t)||$d(Rs,t)};for(Ad in Cs)(Fd=(Td=Od[Ad])&&Td.prototype)?ss(Fd).TypedArrayConstructor=Td:Vs=!1;for(Ad in Rs)(Fd=(Td=Od[Ad])&&Td.prototype)&&(ss(Fd).TypedArrayConstructor=Td);if((!Vs||!_d(Is)||Is===Function.prototype)&&(Is=function(){throw Gs("Incorrect invocation")},Vs))for(Ad in Cs)Od[Ad]&&as(Od[Ad],Is);if((!Vs||!ps||ps===gs)&&(ps=Is.prototype,Vs))for(Ad in Cs)Od[Ad]&&as(Od[Ad].prototype,ps);if(Vs&&cs(ms)!==ps&&as(ms,ps),Dd&&!$d(ps,ys))for(Ad in Ws=!0,ls(ps,ys,{get:function(){return qd(this)?this[Xs]:void 0}}),Cs)Od[Ad]&&is(Od[Ad],Xs,Ad);var fs={NATIVE_ARRAY_BUFFER_VIEWS:Vs,TYPED_ARRAY_TAG:Ws&&Xs,aTypedArray:function(e){if(Ss(e))return e;throw Gs("Target is not a typed array")},aTypedArrayConstructor:function(e){if(_d(e)&&(!as||os(Is,e)))return e;throw Gs(ts(e)+" is not a typed array constructor")},exportTypedArrayMethod:function(e,t,i,n){if(Dd){if(i)for(var l in Cs){var o=Od[l];if(o&&$d(o.prototype,e))try{delete o.prototype[e]}catch(i){try{o.prototype[e]=t}catch(e){}}}ps[e]&&!i||ns(ps,e,i?t:Vs&&hs[e]||t,n)}},exportTypedArrayStaticMethod:function(e,t,i){var n,l;if(Dd){if(as){if(i)for(n in Cs)if((l=Od[n])&&$d(l,e))try{delete l[e]}catch(e){}if(Is[e]&&!i)return;try{return ns(Is,e,i?t:Vs&&Is[e]||t)}catch(e){}}for(n in Cs)!(l=Od[n])||l[e]&&!i||ns(l,e,t)}},getTypedArrayConstructor:vs,isView:function(e){if(!qd(e))return!1;var t=es(e);return"DataView"===t||$d(Cs,t)||$d(Rs,t)},isTypedArray:Ss,TypedArray:Is,TypedArrayPrototype:ps},Ys=l,Ks=c,Ns=function(e,t){if(!t&&!Ud)return!1;var i=!1;try{var n={};n[Ld]=function(){return{next:function(){return{done:i=!0}}}},e(n)}catch(e){}return i},Js=fs.NATIVE_ARRAY_BUFFER_VIEWS,Ls=Ys.ArrayBuffer,Us=Ys.Int8Array,ks=!Js||!Ks((function(){Us(1)}))||!Ks((function(){new Us(-1)}))||!Ns((function(e){new Us,new Us(null),new Us(1.5),new Us(e)}),!0)||Ks((function(){return 1!==new Us(new Ls(2),1,void 0).length})),Hs=Oi,As=function(e,t,i){for(var n in t)Hs(e,n,t[n],i);return e},Ts=Ke,Fs=TypeError,Bs=function(e,t){if(Ts(t,e))return e;throw Fs("Incorrect invocation")},ws=nn,xs=sn,zs=RangeError,Ps=function(e){if(void 0===e)return 0;var t=ws(e),i=xs(t);if(t!==i)throw zs("Wrong length or index");return i},js=Array,Qs=Math.abs,Ms=Math.pow,Es=Math.floor,Ds=Math.log,Os=Math.LN2,_s={pack:function(e,t,i){var n,l,o,c=js(i),a=8*i-t-1,r=(1<<a)-1,d=r>>1,s=23===t?Ms(2,-24)-Ms(2,-77):0,u=e<0||0===e&&1/e<0?1:0,Z=0;for((e=Qs(e))!=e||e===1/0?(l=e!=e?1:0,n=r):(n=Es(Ds(e)/Os),e*(o=Ms(2,-n))<1&&(n--,o*=2),(e+=n+d>=1?s/o:s*Ms(2,1-d))*o>=2&&(n++,o/=2),n+d>=r?(l=0,n=r):n+d>=1?(l=(e*o-1)*Ms(2,t),n+=d):(l=e*Ms(2,d-1)*Ms(2,t),n=0));t>=8;)c[Z++]=255&l,l/=256,t-=8;for(n=n<<t|l,a+=t;a>0;)c[Z++]=255&n,n/=256,a-=8;return c[--Z]|=128*u,c},unpack:function(e,t){var i,n=e.length,l=8*n-t-1,o=(1<<l)-1,c=o>>1,a=l-7,r=n-1,d=e[r--],s=127&d;for(d>>=7;a>0;)s=256*s+e[r--],a-=8;for(i=s&(1<<-a)-1,s>>=-a,a+=t;a>0;)i=256*i+e[r--],a-=8;if(0===s)s=1-c;else{if(s===o)return i?NaN:d?-1/0:1/0;i+=Ms(2,t),s-=c}return(d?-1:1)*i*Ms(2,s-t)}},qs=g,$s=an,eu=Zn,tu=function(e){for(var t=qs(this),i=eu(t),n=arguments.length,l=$s(n>1?arguments[1]:void 0,i),o=n>2?arguments[2]:void 0,c=void 0===o?i:$s(o,i);c>l;)t[l++]=e;return t},iu=lt,nu=Ze,lu=Wt,ou=function(e,t,i){var n=iu(t);n in e?nu.f(e,n,lu(0,i)):e[n]=i},cu=an,au=Zn,ru=ou,du=Array,su=Math.max,uu=function(e,t,i){for(var n=au(e),l=cu(t,n),o=cu(void 0===i?n:i,n),c=du(su(o-l,0)),a=0;l<o;l++,a++)ru(c,a,e[l]);return c.length=a,c},Zu=l,hu=h,bu=he,mu=Bd,Iu=ei,pu=Mt,gu=As,Gu=c,yu=Bs,Xu=nn,Vu=sn,Wu=Ps,Cu=_s,Ru=Fc,vu=Md,Su=_i.f,fu=Ze.f,Yu=tu,Ku=uu,Nu=$c,Ju=Iu.PROPER,Lu=Iu.CONFIGURABLE,Uu=Li.get,ku=Li.set,Hu=Zu.ArrayBuffer,Au=Hu,Tu=Au&&Au.prototype,Fu=Zu.DataView,Bu=Fu&&Fu.prototype,wu=Object.prototype,xu=Zu.Array,zu=Zu.RangeError,Pu=hu(Yu),ju=hu([].reverse),Qu=Cu.pack,Mu=Cu.unpack,Eu=function(e){return[255&e]},Du=function(e){return[255&e,e>>8&255]},Ou=function(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]},_u=function(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]},qu=function(e){return Qu(e,23,4)},$u=function(e){return Qu(e,52,8)},eZ=function(e,t){fu(e.prototype,t,{get:function(){return Uu(this)[t]}})},tZ=function(e,t,i,n){var l=Wu(i),o=Uu(e);if(l+t>o.byteLength)throw zu("Wrong index");var c=Uu(o.buffer).bytes,a=l+o.byteOffset,r=Ku(c,a,a+t);return n?r:ju(r)},iZ=function(e,t,i,n,l,o){var c=Wu(i),a=Uu(e);if(c+t>a.byteLength)throw zu("Wrong index");for(var r=Uu(a.buffer).bytes,d=c+a.byteOffset,s=n(+l),u=0;u<t;u++)r[d+u]=s[o?u:t-u-1]};if(mu){var nZ=Ju&&"ArrayBuffer"!==Hu.name;if(Gu((function(){Hu(1)}))&&Gu((function(){new Hu(-1)}))&&!Gu((function(){return new Hu,new Hu(1.5),new Hu(NaN),nZ&&!Lu})))nZ&&Lu&&pu(Hu,"name","ArrayBuffer");else{(Au=function(e){return yu(this,Tu),new Hu(Wu(e))}).prototype=Tu;for(var lZ,oZ=Su(Hu),cZ=0;oZ.length>cZ;)(lZ=oZ[cZ++])in Au||pu(Au,lZ,Hu[lZ]);Tu.constructor=Au}vu&&Ru(Bu)!==wu&&vu(Bu,wu);var aZ=new Fu(new Au(2)),rZ=hu(Bu.setInt8);aZ.setInt8(0,2147483648),aZ.setInt8(1,2147483649),!aZ.getInt8(0)&&aZ.getInt8(1)||gu(Bu,{setInt8:function(e,t){rZ(this,e,t<<24>>24)},setUint8:function(e,t){rZ(this,e,t<<24>>24)}},{unsafe:!0})}else Au=function(e){yu(this,Tu);var t=Wu(e);ku(this,{bytes:Pu(xu(t),0),byteLength:t}),bu||(this.byteLength=t)},Tu=Au.prototype,Fu=function(e,t,i){yu(this,Bu),yu(e,Tu);var n=Uu(e).byteLength,l=Xu(t);if(l<0||l>n)throw zu("Wrong offset");if(l+(i=void 0===i?n-l:Vu(i))>n)throw zu("Wrong length");ku(this,{buffer:e,byteLength:i,byteOffset:l}),bu||(this.buffer=e,this.byteLength=i,this.byteOffset=l)},Bu=Fu.prototype,bu&&(eZ(Au,"byteLength"),eZ(Fu,"buffer"),eZ(Fu,"byteLength"),eZ(Fu,"byteOffset")),gu(Bu,{getInt8:function(e){return tZ(this,1,e)[0]<<24>>24},getUint8:function(e){return tZ(this,1,e)[0]},getInt16:function(e){var t=tZ(this,2,e,arguments.length>1?arguments[1]:void 0);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=tZ(this,2,e,arguments.length>1?arguments[1]:void 0);return t[1]<<8|t[0]},getInt32:function(e){return _u(tZ(this,4,e,arguments.length>1?arguments[1]:void 0))},getUint32:function(e){return _u(tZ(this,4,e,arguments.length>1?arguments[1]:void 0))>>>0},getFloat32:function(e){return Mu(tZ(this,4,e,arguments.length>1?arguments[1]:void 0),23)},getFloat64:function(e){return Mu(tZ(this,8,e,arguments.length>1?arguments[1]:void 0),52)},setInt8:function(e,t){iZ(this,1,e,Eu,t)},setUint8:function(e,t){iZ(this,1,e,Eu,t)},setInt16:function(e,t){iZ(this,2,e,Du,t,arguments.length>2?arguments[2]:void 0)},setUint16:function(e,t){iZ(this,2,e,Du,t,arguments.length>2?arguments[2]:void 0)},setInt32:function(e,t){iZ(this,4,e,Ou,t,arguments.length>2?arguments[2]:void 0)},setUint32:function(e,t){iZ(this,4,e,Ou,t,arguments.length>2?arguments[2]:void 0)},setFloat32:function(e,t){iZ(this,4,e,qu,t,arguments.length>2?arguments[2]:void 0)},setFloat64:function(e,t){iZ(this,8,e,$u,t,arguments.length>2?arguments[2]:void 0)}});Nu(Au,"ArrayBuffer"),Nu(Fu,"DataView");var dZ={ArrayBuffer:Au,DataView:Fu},sZ=me,uZ=Math.floor,ZZ=Number.isInteger||function(e){return!sZ(e)&&isFinite(e)&&uZ(e)===e},hZ=nn,bZ=RangeError,mZ=function(e){var t=hZ(e);if(t<0)throw bZ("The argument can't be less than 0");return t},IZ=RangeError,pZ=function(e,t){var i=mZ(e);if(i%t)throw IZ("Wrong offset");return i},gZ=Fl,GZ=Ye,yZ=qo,XZ=g,VZ=Zn,WZ=uo,CZ=no,RZ=Pl,vZ=fs.aTypedArrayConstructor,SZ=function(e){var t,i,n,l,o,c,a=yZ(this),r=XZ(e),d=arguments.length,s=d>1?arguments[1]:void 0,u=void 0!==s,Z=CZ(r);if(Z&&!RZ(Z))for(c=(o=WZ(r,Z)).next,r=[];!(l=GZ(c,o)).done;)r.push(l.value);for(u&&d>2&&(s=gZ(s,arguments[2])),i=VZ(r),n=new(vZ(a))(i),t=0;i>t;t++)n[t]=u?s(r[t],t):r[t];return n},fZ=St,YZ=Array.isArray||function(e){return"Array"==fZ(e)},KZ=Eo,NZ=me,JZ=se("species"),LZ=Array,UZ=function(e){var t;return YZ(e)&&(t=e.constructor,(KZ(t)&&(t===LZ||YZ(t.prototype))||NZ(t)&&null===(t=t[JZ]))&&(t=void 0)),void 0===t?LZ:t},kZ=Fl,HZ=Jt,AZ=g,TZ=Zn,FZ=function(e,t){return new(UZ(e))(0===t?0:t)},BZ=h([].push),wZ=function(e){var t=1==e,i=2==e,n=3==e,l=4==e,o=6==e,c=7==e,a=5==e||o;return function(r,d,s,u){for(var Z,h,b=AZ(r),m=HZ(b),I=kZ(d,s),p=TZ(m),g=0,G=u||FZ,y=t?G(r,p):i||c?G(r,0):void 0;p>g;g++)if((a||g in m)&&(h=I(Z=m[g],g,b),e))if(t)y[g]=h;else if(h)switch(e){case 3:return!0;case 5:return Z;case 6:return g;case 2:BZ(y,Z)}else switch(e){case 4:return!1;case 7:BZ(y,Z)}return o?-1:n||l?l:y}},xZ={forEach:wZ(0),map:wZ(1),filter:wZ(2),some:wZ(3),every:wZ(4),find:wZ(5),findIndex:wZ(6),filterReject:wZ(7)},zZ=w,PZ=Ze,jZ=he,QZ=se("species"),MZ=A,EZ=me,DZ=Md,OZ=el,_Z=l,qZ=Ye,$Z=he,eh=ks,th=fs,ih=dZ,nh=Bs,lh=Wt,oh=Mt,ch=ZZ,ah=sn,rh=Ps,dh=pZ,sh=lt,uh=X,Zh=ql,hh=me,bh=ke,mh=Cl,Ih=Ke,ph=Md,gh=_i.f,Gh=SZ,yh=xZ.forEach,Xh=function(e){var t=zZ(e),i=PZ.f;jZ&&t&&!t[QZ]&&i(t,QZ,{configurable:!0,get:function(){return this}})},Vh=Ze,Wh=gt,Ch=function(e,t,i){var n,l;return DZ&&MZ(n=t.constructor)&&n!==i&&EZ(l=n.prototype)&&l!==i.prototype&&DZ(e,l),e},Rh=Li.get,vh=Li.set,Sh=Li.enforce,fh=Vh.f,Yh=Wh.f,Kh=Math.round,Nh=_Z.RangeError,Jh=ih.ArrayBuffer,Lh=Jh.prototype,Uh=ih.DataView,kh=th.NATIVE_ARRAY_BUFFER_VIEWS,Hh=th.TYPED_ARRAY_TAG,Ah=th.TypedArray,Th=th.TypedArrayPrototype,Fh=th.aTypedArrayConstructor,Bh=th.isTypedArray,wh=function(e,t){Fh(e);for(var i=0,n=t.length,l=new e(n);n>i;)l[i]=t[i++];return l},xh=function(e,t){fh(e,t,{get:function(){return Rh(this)[t]}})},zh=function(e){var t;return Ih(Lh,e)||"ArrayBuffer"==(t=Zh(e))||"SharedArrayBuffer"==t},Ph=function(e,t){return Bh(e)&&!bh(t)&&t in e&&ch(+t)&&t>=0},jh=function(e,t){return t=sh(t),Ph(e,t)?lh(2,e[t]):Yh(e,t)},Qh=function(e,t,i){return t=sh(t),!(Ph(e,t)&&hh(i)&&uh(i,"value"))||uh(i,"get")||uh(i,"set")||i.configurable||uh(i,"writable")&&!i.writable||uh(i,"enumerable")&&!i.enumerable?fh(e,t,i):(e[t]=i.value,e)};$Z?(kh||(Wh.f=jh,Vh.f=Qh,xh(Th,"buffer"),xh(Th,"byteOffset"),xh(Th,"byteLength"),xh(Th,"length")),OZ({target:"Object",stat:!0,forced:!kh},{getOwnPropertyDescriptor:jh,defineProperty:Qh}),Jd.exports=function(e,t,i){var n=e.match(/\d+$/)[0]/8,l=e+(i?"Clamped":"")+"Array",o="get"+e,c="set"+e,a=_Z[l],r=a,d=r&&r.prototype,s={},u=function(e,t){fh(e,t,{get:function(){return function(e,t){var i=Rh(e);return i.view[o](t*n+i.byteOffset,!0)}(this,t)},set:function(e){return function(e,t,l){var o=Rh(e);i&&(l=(l=Kh(l))<0?0:l>255?255:255&l),o.view[c](t*n+o.byteOffset,l,!0)}(this,t,e)},enumerable:!0})};kh?eh&&(r=t((function(e,t,i,l){return nh(e,d),Ch(hh(t)?zh(t)?void 0!==l?new a(t,dh(i,n),l):void 0!==i?new a(t,dh(i,n)):new a(t):Bh(t)?wh(r,t):qZ(Gh,r,t):new a(rh(t)),e,r)})),ph&&ph(r,Ah),yh(gh(a),(function(e){e in r||oh(r,e,a[e])})),r.prototype=d):(r=t((function(e,t,i,l){nh(e,d);var o,c,a,s=0,Z=0;if(hh(t)){if(!zh(t))return Bh(t)?wh(r,t):qZ(Gh,r,t);o=t,Z=dh(i,n);var h=t.byteLength;if(void 0===l){if(h%n)throw Nh("Wrong length");if((c=h-Z)<0)throw Nh("Wrong length")}else if((c=ah(l)*n)+Z>h)throw Nh("Wrong length");a=c/n}else a=rh(t),o=new Jh(c=a*n);for(vh(e,{buffer:o,byteOffset:Z,byteLength:c,length:a,view:new Uh(o)});s<a;)u(e,s++)})),ph&&ph(r,Ah),d=r.prototype=mh(Th)),d.constructor!==r&&oh(d,"constructor",r),Sh(d).TypedArrayConstructor=r,Hh&&oh(d,Hh,l);var Z=r!=a;s[l]=r,OZ({global:!0,constructor:!0,forced:Z,sham:!kh},s),"BYTES_PER_ELEMENT"in r||oh(r,"BYTES_PER_ELEMENT",n),"BYTES_PER_ELEMENT"in d||oh(d,"BYTES_PER_ELEMENT",n),Xh(l)}):Jd.exports=function(){},(0,Jd.exports)("Float32",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Jd.exports)("Float64",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Jd.exports)("Int8",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Jd.exports)("Int16",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Jd.exports)("Int32",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Jd.exports)("Uint8",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Jd.exports)("Uint8",(function(e){return function(t,i,n){return e(this,t,i,n)}}),!0),(0,Jd.exports)("Uint16",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Jd.exports)("Uint32",(function(e){return function(t,i,n){return e(this,t,i,n)}}));var Mh=tt,Eh=TypeError,Dh=tu,Oh=function(e){var t=Mh(e,"number");if("number"==typeof t)throw Eh("Can't convert number to bigint");return BigInt(t)},_h=ql,qh=Ye,$h=c,eb=fs.aTypedArray,tb=fs.exportTypedArrayMethod,ib=h("".slice);tb("fill",(function(e){var t=arguments.length;eb(this);var i="Big"===ib(_h(this),0,3)?Oh(e):+e;return qh(Dh,this,i,t>1?arguments[1]:void 0,t>2?arguments[2]:void 0)}),$h((function(){var e=0;return new Int8Array(2).fill({valueOf:function(){return e++}}),1!==e}))),(0,fs.exportTypedArrayStaticMethod)("from",SZ,ks);var nb=fs.aTypedArrayConstructor;(0,fs.exportTypedArrayStaticMethod)("of",(function(){for(var e=0,t=arguments.length,i=new(nb(this))(t);t>e;)i[e]=arguments[e++];return i}),ks);var lb=l,ob=Ye,cb=fs,ab=Zn,rb=pZ,db=g,sb=c,ub=lb.RangeError,Zb=lb.Int8Array,hb=Zb&&Zb.prototype,bb=hb&&hb.set,mb=cb.aTypedArray,Ib=cb.exportTypedArrayMethod,pb=!sb((function(){var e=new Uint8ClampedArray(2);return ob(bb,e,{length:1,0:3},1),3!==e[1]})),gb=pb&&cb.NATIVE_ARRAY_BUFFER_VIEWS&&sb((function(){var e=new Zb(2);return e.set(1),e.set("2",1),0!==e[0]||2!==e[1]}));Ib("set",(function(e){mb(this);var t=rb(arguments.length>1?arguments[1]:void 0,1),i=db(e);if(pb)return ob(bb,this,i,t);var n=this.length,l=ab(i),o=0;if(l+t>n)throw ub("Wrong length");for(;o<l;)this[t+o]=i[o++]}),!pb||gb);var Gb=uu,yb=Math.floor,Xb=function(e,t){var i=e.length,n=yb(i/2);return i<8?Vb(e,t):Wb(e,Xb(Gb(e,0,n),t),Xb(Gb(e,n),t),t)},Vb=function(e,t){for(var i,n,l=e.length,o=1;o<l;){for(n=o,i=e[o];n&&t(e[n-1],i)>0;)e[n]=e[--n];n!==o++&&(e[n]=i)}return e},Wb=function(e,t,i,n){for(var l=t.length,o=i.length,c=0,a=0;c<l||a<o;)e[c+a]=c<l&&a<o?n(t[c],i[a])<=0?t[c++]:i[a++]:c<l?t[c++]:i[a++];return e},Cb=Xb,Rb=x.match(/firefox\/(\d+)/i),vb=!!Rb&&+Rb[1],Sb=/MSIE|Trident/.test(x),fb=x.match(/AppleWebKit\/(\d+)\./),Yb=!!fb&&+fb[1],Kb=h,Nb=c,Jb=we,Lb=Cb,Ub=vb,kb=Sb,Hb=D,Ab=Yb,Tb=fs.aTypedArray,Fb=fs.exportTypedArrayMethod,Bb=l.Uint16Array,wb=Bb&&Kb(Bb.prototype.sort),xb=!(!wb||Nb((function(){wb(new Bb(2),null)}))&&Nb((function(){wb(new Bb(2),{})}))),zb=!!wb&&!Nb((function(){if(Hb)return Hb<74;if(Ub)return Ub<67;if(kb)return!0;if(Ab)return Ab<602;var e,t,i=new Bb(516),n=Array(516);for(e=0;e<516;e++)t=e%4,i[e]=515-e,n[e]=e-2*t+3;for(wb(i,(function(e,t){return(e/4|0)-(t/4|0)})),e=0;e<516;e++)if(i[e]!==n[e])return!0}));Fb("sort",(function(e){return void 0!==e&&Jb(e),zb?wb(this,e):Lb(Tb(this),function(e){return function(t,i){return void 0!==e?+e(t,i)||0:i!=i?-1:t!=t?1:0===t&&0===i?1/t>0&&1/i<0?1:-1:t>i}}(e))}),!zb||xb);var Pb=Ge("span").classList,jb=Pb&&Pb.constructor&&Pb.constructor.prototype,Qb=jb===Object.prototype?void 0:jb,Mb=el,Eb=Ye,Db=A,Ob=ca,_b=Fc,qb=Md,$b=$c,em=Mt,tm=Oi,im=Bl,nm=ei.PROPER,lm=ei.CONFIGURABLE,om=Dc.IteratorPrototype,cm=Dc.BUGGY_SAFARI_ITERATORS,am=se("iterator"),rm=function(){return this},dm=function(e,t,i,n,l,o,c){Ob(i,t,n);var a,r,d,s=function(e){if(e===l&&m)return m;if(!cm&&e in h)return h[e];switch(e){case"keys":case"values":case"entries":return function(){return new i(this,e)}}return function(){return new i(this)}},u=t+" Iterator",Z=!1,h=e.prototype,b=h[am]||h["@@iterator"]||l&&h[l],m=!cm&&b||s(l),I="Array"==t&&h.entries||b;if(I&&(a=_b(I.call(new e)))!==Object.prototype&&a.next&&(_b(a)!==om&&(qb?qb(a,om):Db(a[am])||tm(a,am,rm)),$b(a,u,!0)),nm&&"values"==l&&b&&"values"!==b.name&&(lm?em(h,"name","values"):(Z=!0,m=function(){return Eb(b,this)})),l)if(r={values:s("values"),keys:o?m:s("keys"),entries:s("entries")},c)for(d in r)(cm||Z||!(d in h))&&tm(h,d,r[d]);else Mb({target:t,proto:!0,forced:cm||Z},r);return h[am]!==m&&tm(h,am,m,{name:l}),im[t]=m,r},sm=kt,um=Kl,Zm=Bl,hm=Li,bm=Ze.f,mm=dm,Im=he,pm=hm.set,gm=hm.getterFor("Array Iterator"),Gm=mm(Array,"Array",(function(e,t){pm(this,{type:"Array Iterator",target:sm(e),index:0,kind:t})}),(function(){var e=gm(this),t=e.target,i=e.kind,n=e.index++;return!t||n>=t.length?(e.target=void 0,{value:void 0,done:!0}):"keys"==i?{value:n,done:!1}:"values"==i?{value:t[n],done:!1}:{value:[n,t[n]],done:!1}}),"values"),ym=Zm.Arguments=Zm.Array;if(um("keys"),um("values"),um("entries"),Im&&"values"!==ym.name)try{bm(ym,"name",{value:"values"})}catch(e){}var Xm=l,Vm={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},Wm=Qb,Cm=Gm,Rm=Mt,vm=se,Sm=vm("iterator"),fm=vm("toStringTag"),Ym=Cm.values,Km=function(e,t){if(e){if(e[Sm]!==Ym)try{Rm(e,Sm,Ym)}catch(t){e[Sm]=Ym}if(e[fm]||Rm(e,fm,t),Vm[t])for(var i in Cm)if(e[i]!==Cm[i])try{Rm(e,i,Cm[i])}catch(t){e[i]=Cm[i]}}};for(var Nm in Vm)Km(Xm[Nm]&&Xm[Nm].prototype,Nm);Km(Wm,"DOMTokenList");var Jm,Lm,Um,km,Hm=h([].slice),Am=TypeError,Tm=function(e,t){if(e<t)throw Am("Not enough arguments");return e},Fm=/(?:ipad|iphone|ipod).*applewebkit/i.test(x),Bm="process"==St(l.process),wm=l,xm=jr,zm=Fl,Pm=A,jm=X,Qm=c,Mm=Zl,Em=Hm,Dm=Ge,Om=Tm,_m=Fm,qm=Bm,$m=wm.setImmediate,eI=wm.clearImmediate,tI=wm.process,iI=wm.Dispatch,nI=wm.Function,lI=wm.MessageChannel,oI=wm.String,cI=0,aI={};try{Jm=wm.location}catch(e){}var rI=function(e){if(jm(aI,e)){var t=aI[e];delete aI[e],t()}},dI=function(e){return function(){rI(e)}},sI=function(e){rI(e.data)},uI=function(e){wm.postMessage(oI(e),Jm.protocol+"//"+Jm.host)};$m&&eI||($m=function(e){Om(arguments.length,1);var t=Pm(e)?e:nI(e),i=Em(arguments,1);return aI[++cI]=function(){xm(t,void 0,i)},Lm(cI),cI},eI=function(e){delete aI[e]},qm?Lm=function(e){tI.nextTick(dI(e))}:iI&&iI.now?Lm=function(e){iI.now(dI(e))}:lI&&!_m?(km=(Um=new lI).port2,Um.port1.onmessage=sI,Lm=zm(km.postMessage,km)):wm.addEventListener&&Pm(wm.postMessage)&&!wm.importScripts&&Jm&&"file:"!==Jm.protocol&&!Qm(uI)?(Lm=uI,wm.addEventListener("message",sI,!1)):Lm="onreadystatechange"in Dm("script")?function(e){Mm.appendChild(Dm("script")).onreadystatechange=function(){Mm.removeChild(this),rI(e)}}:function(e){setTimeout(dI(e),0)});var ZI={set:$m,clear:eI},hI=ZI.clear;el({global:!0,bind:!0,enumerable:!0,forced:l.clearImmediate!==hI},{clearImmediate:hI});var bI=ZI.set;el({global:!0,bind:!0,enumerable:!0,forced:l.setImmediate!==bI},{setImmediate:bI});var mI=va.charAt,II=da,pI=Li,gI=dm,GI=pI.set,yI=pI.getterFor("String Iterator");gI(String,"String",(function(e){GI(this,{type:"String Iterator",string:II(e),index:0})}),(function(){var e,t=yI(this),i=t.string,n=t.index;return n>=i.length?{value:void 0,done:!0}:(e=mI(i,n),t.index+=e.length,{value:e,done:!1})}));var XI=c,VI=se("iterator"),WI=!XI((function(){var e=new URL("b?a=1&b=2&c=3","http://a"),t=e.searchParams,i="";return e.pathname="c%20d",t.forEach((function(e,n){t.delete("b"),i+=n+e})),!t.sort||"http://a/c%20d?a=1&c=3"!==e.href||"3"!==t.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!t[VI]||"a"!==new URL("https://a@b").username||"b"!==new URLSearchParams(new URLSearchParams("a=b")).get("a")||"xn--e1aybc"!==new URL("http://тест").host||"#%D0%B1"!==new URL("http://a#б").hash||"a1c3"!==i||"x"!==new URL("http://x",void 0).host})),CI=he,RI=h,vI=Ye,SI=c,fI=ll,YI=Sn,KI=Gt,NI=g,JI=Jt,LI=Object.assign,UI=Object.defineProperty,kI=RI([].concat),HI=!LI||SI((function(){if(CI&&1!==LI({b:1},LI(UI({},"a",{enumerable:!0,get:function(){UI(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},i=Symbol(),n="abcdefghijklmnopqrst";return e[i]=7,n.split("").forEach((function(e){t[e]=e})),7!=LI({},e)[i]||fI(LI({},t)).join("")!=n}))?function(e,t){for(var i=NI(e),n=arguments.length,l=1,o=YI.f,c=KI.f;n>l;)for(var a,r=JI(arguments[l++]),d=o?kI(fI(r),o(r)):fI(r),s=d.length,u=0;s>u;)a=d[u++],CI&&!vI(c,r,a)||(i[a]=r[a]);return i}:LI,AI=ve,TI=mo,FI=Fl,BI=Ye,wI=g,xI=function(e,t,i,n){try{return n?t(AI(i)[0],i[1]):t(i)}catch(t){TI(e,"throw",t)}},zI=Pl,PI=Eo,jI=Zn,QI=ou,MI=uo,EI=no,DI=Array,OI=h,_I=/[^\0-\u007E]/,qI=/[.\u3002\uFF0E\uFF61]/g,$I="Overflow: input needs wider integers to process",ep=RangeError,tp=OI(qI.exec),ip=Math.floor,np=String.fromCharCode,lp=OI("".charCodeAt),op=OI([].join),cp=OI([].push),ap=OI("".replace),rp=OI("".split),dp=OI("".toLowerCase),sp=function(e){return e+22+75*(e<26)},up=function(e,t,i){var n=0;for(e=i?ip(e/700):e>>1,e+=ip(e/t);e>455;)e=ip(e/35),n+=36;return ip(n+36*e/(e+38))},Zp=function(e){var t=[];e=function(e){for(var t=[],i=0,n=e.length;i<n;){var l=lp(e,i++);if(l>=55296&&l<=56319&&i<n){var o=lp(e,i++);56320==(64512&o)?cp(t,((1023&l)<<10)+(1023&o)+65536):(cp(t,l),i--)}else cp(t,l)}return t}(e);var i,n,l=e.length,o=128,c=0,a=72;for(i=0;i<e.length;i++)(n=e[i])<128&&cp(t,np(n));var r=t.length,d=r;for(r&&cp(t,"-");d<l;){var s=2147483647;for(i=0;i<e.length;i++)(n=e[i])>=o&&n<s&&(s=n);var u=d+1;if(s-o>ip((2147483647-c)/u))throw ep($I);for(c+=(s-o)*u,o=s,i=0;i<e.length;i++){if((n=e[i])<o&&++c>2147483647)throw ep($I);if(n==o){for(var Z=c,h=36;;){var b=h<=a?1:h>=a+26?26:h-a;if(Z<b)break;var m=Z-b,I=36-b;cp(t,np(sp(b+m%I))),Z=ip(m/I),h+=36}cp(t,np(sp(Z))),a=up(c,u,d==r),c=0,d++}}c++,o++}return op(t,"")},hp=el,bp=l,mp=Ye,Ip=h,pp=he,gp=WI,Gp=Oi,yp=As,Xp=$c,Vp=ca,Wp=Li,Cp=Bs,Rp=A,vp=X,Sp=Fl,fp=ql,Yp=ve,Kp=me,Np=da,Jp=Cl,Lp=Wt,Up=uo,kp=no,Hp=Tm,Ap=Cb,Tp=se("iterator"),Fp=Wp.set,Bp=Wp.getterFor("URLSearchParams"),wp=Wp.getterFor("URLSearchParamsIterator"),xp=Object.getOwnPropertyDescriptor,zp=function(e){if(!pp)return bp[e];var t=xp(bp,e);return t&&t.value},Pp=zp("fetch"),jp=zp("Request"),Qp=zp("Headers"),Mp=jp&&jp.prototype,Ep=Qp&&Qp.prototype,Dp=bp.RegExp,Op=bp.TypeError,_p=bp.decodeURIComponent,qp=bp.encodeURIComponent,$p=Ip("".charAt),eg=Ip([].join),tg=Ip([].push),ig=Ip("".replace),ng=Ip([].shift),lg=Ip([].splice),og=Ip("".split),cg=Ip("".slice),ag=/\+/g,rg=Array(4),dg=function(e){return rg[e-1]||(rg[e-1]=Dp("((?:%[\\da-f]{2}){"+e+"})","gi"))},sg=function(e){try{return _p(e)}catch(t){return e}},ug=function(e){var t=ig(e,ag," "),i=4;try{return _p(t)}catch(e){for(;i;)t=ig(t,dg(i--),sg);return t}},Zg=/[!'()~]|%20/g,hg={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},bg=function(e){return hg[e]},mg=function(e){return ig(qp(e),Zg,bg)},Ig=Vp((function(e,t){Fp(this,{type:"URLSearchParamsIterator",iterator:Up(Bp(e).entries),kind:t})}),"Iterator",(function(){var e=wp(this),t=e.kind,i=e.iterator.next(),n=i.value;return i.done||(i.value="keys"===t?n.key:"values"===t?n.value:[n.key,n.value]),i}),!0),pg=function(e){this.entries=[],this.url=null,void 0!==e&&(Kp(e)?this.parseObject(e):this.parseQuery("string"==typeof e?"?"===$p(e,0)?cg(e,1):e:Np(e)))};pg.prototype={type:"URLSearchParams",bindURL:function(e){this.url=e,this.update()},parseObject:function(e){var t,i,n,l,o,c,a,r=kp(e);if(r)for(i=(t=Up(e,r)).next;!(n=mp(i,t)).done;){if(o=(l=Up(Yp(n.value))).next,(c=mp(o,l)).done||(a=mp(o,l)).done||!mp(o,l).done)throw Op("Expected sequence with length 2");tg(this.entries,{key:Np(c.value),value:Np(a.value)})}else for(var d in e)vp(e,d)&&tg(this.entries,{key:d,value:Np(e[d])})},parseQuery:function(e){if(e)for(var t,i,n=og(e,"&"),l=0;l<n.length;)(t=n[l++]).length&&(i=og(t,"="),tg(this.entries,{key:ug(ng(i)),value:ug(eg(i,"="))}))},serialize:function(){for(var e,t=this.entries,i=[],n=0;n<t.length;)e=t[n++],tg(i,mg(e.key)+"="+mg(e.value));return eg(i,"&")},update:function(){this.entries.length=0,this.parseQuery(this.url.query)},updateURL:function(){this.url&&this.url.update()}};var gg=function(){Cp(this,Gg);var e=arguments.length>0?arguments[0]:void 0;Fp(this,new pg(e))},Gg=gg.prototype;if(yp(Gg,{append:function(e,t){Hp(arguments.length,2);var i=Bp(this);tg(i.entries,{key:Np(e),value:Np(t)}),i.updateURL()},delete:function(e){Hp(arguments.length,1);for(var t=Bp(this),i=t.entries,n=Np(e),l=0;l<i.length;)i[l].key===n?lg(i,l,1):l++;t.updateURL()},get:function(e){Hp(arguments.length,1);for(var t=Bp(this).entries,i=Np(e),n=0;n<t.length;n++)if(t[n].key===i)return t[n].value;return null},getAll:function(e){Hp(arguments.length,1);for(var t=Bp(this).entries,i=Np(e),n=[],l=0;l<t.length;l++)t[l].key===i&&tg(n,t[l].value);return n},has:function(e){Hp(arguments.length,1);for(var t=Bp(this).entries,i=Np(e),n=0;n<t.length;)if(t[n++].key===i)return!0;return!1},set:function(e,t){Hp(arguments.length,1);for(var i,n=Bp(this),l=n.entries,o=!1,c=Np(e),a=Np(t),r=0;r<l.length;r++)(i=l[r]).key===c&&(o?lg(l,r--,1):(o=!0,i.value=a));o||tg(l,{key:c,value:a}),n.updateURL()},sort:function(){var e=Bp(this);Ap(e.entries,(function(e,t){return e.key>t.key?1:-1})),e.updateURL()},forEach:function(e){for(var t,i=Bp(this).entries,n=Sp(e,arguments.length>1?arguments[1]:void 0),l=0;l<i.length;)n((t=i[l++]).value,t.key,this)},keys:function(){return new Ig(this,"keys")},values:function(){return new Ig(this,"values")},entries:function(){return new Ig(this,"entries")}},{enumerable:!0}),Gp(Gg,Tp,Gg.entries,{name:"entries"}),Gp(Gg,"toString",(function(){return Bp(this).serialize()}),{enumerable:!0}),Xp(gg,"URLSearchParams"),hp({global:!0,constructor:!0,forced:!gp},{URLSearchParams:gg}),!gp&&Rp(Qp)){var yg=Ip(Ep.has),Xg=Ip(Ep.set),Vg=function(e){if(Kp(e)){var t,i=e.body;if("URLSearchParams"===fp(i))return t=e.headers?new Qp(e.headers):new Qp,yg(t,"content-type")||Xg(t,"content-type","application/x-www-form-urlencoded;charset=UTF-8"),Jp(e,{body:Lp(0,Np(i)),headers:Lp(0,t)})}return e};if(Rp(Pp)&&hp({global:!0,enumerable:!0,dontCallGetSet:!0,forced:!0},{fetch:function(e){return Pp(e,arguments.length>1?Vg(arguments[1]):{})}}),Rp(jp)){var Wg=function(e){return Cp(this,Mp),new jp(e,arguments.length>1?Vg(arguments[1]):{})};Mp.constructor=Wg,Wg.prototype=Mp,hp({global:!0,constructor:!0,dontCallGetSet:!0,forced:!0},{Request:Wg})}}var Cg,Rg=el,vg=he,Sg=WI,fg=l,Yg=Fl,Kg=h,Ng=Oi,Jg=gc,Lg=Bs,Ug=X,kg=HI,Hg=function(e){var t=wI(e),i=PI(this),n=arguments.length,l=n>1?arguments[1]:void 0,o=void 0!==l;o&&(l=FI(l,n>2?arguments[2]:void 0));var c,a,r,d,s,u,Z=EI(t),h=0;if(!Z||this===DI&&zI(Z))for(c=jI(t),a=i?new this(c):DI(c);c>h;h++)u=o?l(t[h],h):t[h],QI(a,h,u);else for(s=(d=MI(t,Z)).next,a=i?new this:[];!(r=BI(s,d)).done;h++)u=o?xI(d,l,[r.value,h],!0):r.value,QI(a,h,u);return a.length=h,a},Ag=uu,Tg=va.codeAt,Fg=function(e){var t,i,n=[],l=rp(ap(dp(e),qI,"."),".");for(t=0;t<l.length;t++)i=l[t],cp(n,tp(_I,i)?"xn--"+Zp(i):i);return op(n,".")},Bg=da,wg=$c,xg=Tm,zg={URLSearchParams:gg,getState:Bp},Pg=Li,jg=Pg.set,Qg=Pg.getterFor("URL"),Mg=zg.URLSearchParams,Eg=zg.getState,Dg=fg.URL,Og=fg.TypeError,_g=fg.parseInt,qg=Math.floor,$g=Math.pow,eG=Kg("".charAt),tG=Kg(/./.exec),iG=Kg([].join),nG=Kg(1..toString),lG=Kg([].pop),oG=Kg([].push),cG=Kg("".replace),aG=Kg([].shift),rG=Kg("".split),dG=Kg("".slice),sG=Kg("".toLowerCase),uG=Kg([].unshift),ZG=/[a-z]/i,hG=/[\d+-.a-z]/i,bG=/\d/,mG=/^0x/i,IG=/^[0-7]+$/,pG=/^\d+$/,gG=/^[\da-f]+$/i,GG=/[\0\t\n\r #%/:<>?@[\\\]^|]/,yG=/[\0\t\n\r #/:<>?@[\\\]^|]/,XG=/^[\u0000-\u0020]+|[\u0000-\u0020]+$/g,VG=/[\t\n\r]/g,WG=function(e){var t,i,n,l;if("number"==typeof e){for(t=[],i=0;i<4;i++)uG(t,e%256),e=qg(e/256);return iG(t,".")}if("object"==typeof e){for(t="",n=function(e){for(var t=null,i=1,n=null,l=0,o=0;o<8;o++)0!==e[o]?(l>i&&(t=n,i=l),n=null,l=0):(null===n&&(n=o),++l);return l>i&&(t=n,i=l),t}(e),i=0;i<8;i++)l&&0===e[i]||(l&&(l=!1),n===i?(t+=i?":":"::",l=!0):(t+=nG(e[i],16),i<7&&(t+=":")));return"["+t+"]"}return e},CG={},RG=kg({},CG,{" ":1,'"':1,"<":1,">":1,"`":1}),vG=kg({},RG,{"#":1,"?":1,"{":1,"}":1}),SG=kg({},vG,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),fG=function(e,t){var i=Tg(e,0);return i>32&&i<127&&!Ug(t,e)?e:encodeURIComponent(e)},YG={ftp:21,file:null,http:80,https:443,ws:80,wss:443},KG=function(e,t){var i;return 2==e.length&&tG(ZG,eG(e,0))&&(":"==(i=eG(e,1))||!t&&"|"==i)},NG=function(e){var t;return e.length>1&&KG(dG(e,0,2))&&(2==e.length||"/"===(t=eG(e,2))||"\\"===t||"?"===t||"#"===t)},JG=function(e){return"."===e||"%2e"===sG(e)},LG={},UG={},kG={},HG={},AG={},TG={},FG={},BG={},wG={},xG={},zG={},PG={},jG={},QG={},MG={},EG={},DG={},OG={},_G={},qG={},$G={},ey=function(e,t,i){var n,l,o,c=Bg(e);if(t){if(l=this.parse(c))throw Og(l);this.searchParams=null}else{if(void 0!==i&&(n=new ey(i,!0)),l=this.parse(c,null,n))throw Og(l);(o=Eg(new Mg)).bindURL(this),this.searchParams=o}};ey.prototype={type:"URL",parse:function(e,t,i){var n,l,o,c,a,r=this,d=t||LG,s=0,u="",Z=!1,h=!1,b=!1;for(e=Bg(e),t||(r.scheme="",r.username="",r.password="",r.host=null,r.port=null,r.path=[],r.query=null,r.fragment=null,r.cannotBeABaseURL=!1,e=cG(e,XG,"")),e=cG(e,VG,""),n=Hg(e);s<=n.length;){switch(l=n[s],d){case LG:if(!l||!tG(ZG,l)){if(t)return"Invalid scheme";d=kG;continue}u+=sG(l),d=UG;break;case UG:if(l&&(tG(hG,l)||"+"==l||"-"==l||"."==l))u+=sG(l);else{if(":"!=l){if(t)return"Invalid scheme";u="",d=kG,s=0;continue}if(t&&(r.isSpecial()!=Ug(YG,u)||"file"==u&&(r.includesCredentials()||null!==r.port)||"file"==r.scheme&&!r.host))return;if(r.scheme=u,t)return void(r.isSpecial()&&YG[r.scheme]==r.port&&(r.port=null));u="","file"==r.scheme?d=QG:r.isSpecial()&&i&&i.scheme==r.scheme?d=HG:r.isSpecial()?d=BG:"/"==n[s+1]?(d=AG,s++):(r.cannotBeABaseURL=!0,oG(r.path,""),d=_G)}break;case kG:if(!i||i.cannotBeABaseURL&&"#"!=l)return"Invalid scheme";if(i.cannotBeABaseURL&&"#"==l){r.scheme=i.scheme,r.path=Ag(i.path),r.query=i.query,r.fragment="",r.cannotBeABaseURL=!0,d=$G;break}d="file"==i.scheme?QG:TG;continue;case HG:if("/"!=l||"/"!=n[s+1]){d=TG;continue}d=wG,s++;break;case AG:if("/"==l){d=xG;break}d=OG;continue;case TG:if(r.scheme=i.scheme,l==Cg)r.username=i.username,r.password=i.password,r.host=i.host,r.port=i.port,r.path=Ag(i.path),r.query=i.query;else if("/"==l||"\\"==l&&r.isSpecial())d=FG;else if("?"==l)r.username=i.username,r.password=i.password,r.host=i.host,r.port=i.port,r.path=Ag(i.path),r.query="",d=qG;else{if("#"!=l){r.username=i.username,r.password=i.password,r.host=i.host,r.port=i.port,r.path=Ag(i.path),r.path.length--,d=OG;continue}r.username=i.username,r.password=i.password,r.host=i.host,r.port=i.port,r.path=Ag(i.path),r.query=i.query,r.fragment="",d=$G}break;case FG:if(!r.isSpecial()||"/"!=l&&"\\"!=l){if("/"!=l){r.username=i.username,r.password=i.password,r.host=i.host,r.port=i.port,d=OG;continue}d=xG}else d=wG;break;case BG:if(d=wG,"/"!=l||"/"!=eG(u,s+1))continue;s++;break;case wG:if("/"!=l&&"\\"!=l){d=xG;continue}break;case xG:if("@"==l){Z&&(u="%40"+u),Z=!0,o=Hg(u);for(var m=0;m<o.length;m++){var I=o[m];if(":"!=I||b){var p=fG(I,SG);b?r.password+=p:r.username+=p}else b=!0}u=""}else if(l==Cg||"/"==l||"?"==l||"#"==l||"\\"==l&&r.isSpecial()){if(Z&&""==u)return"Invalid authority";s-=Hg(u).length+1,u="",d=zG}else u+=l;break;case zG:case PG:if(t&&"file"==r.scheme){d=EG;continue}if(":"!=l||h){if(l==Cg||"/"==l||"?"==l||"#"==l||"\\"==l&&r.isSpecial()){if(r.isSpecial()&&""==u)return"Invalid host";if(t&&""==u&&(r.includesCredentials()||null!==r.port))return;if(c=r.parseHost(u))return c;if(u="",d=DG,t)return;continue}"["==l?h=!0:"]"==l&&(h=!1),u+=l}else{if(""==u)return"Invalid host";if(c=r.parseHost(u))return c;if(u="",d=jG,t==PG)return}break;case jG:if(!tG(bG,l)){if(l==Cg||"/"==l||"?"==l||"#"==l||"\\"==l&&r.isSpecial()||t){if(""!=u){var g=_g(u,10);if(g>65535)return"Invalid port";r.port=r.isSpecial()&&g===YG[r.scheme]?null:g,u=""}if(t)return;d=DG;continue}return"Invalid port"}u+=l;break;case QG:if(r.scheme="file","/"==l||"\\"==l)d=MG;else{if(!i||"file"!=i.scheme){d=OG;continue}if(l==Cg)r.host=i.host,r.path=Ag(i.path),r.query=i.query;else if("?"==l)r.host=i.host,r.path=Ag(i.path),r.query="",d=qG;else{if("#"!=l){NG(iG(Ag(n,s),""))||(r.host=i.host,r.path=Ag(i.path),r.shortenPath()),d=OG;continue}r.host=i.host,r.path=Ag(i.path),r.query=i.query,r.fragment="",d=$G}}break;case MG:if("/"==l||"\\"==l){d=EG;break}i&&"file"==i.scheme&&!NG(iG(Ag(n,s),""))&&(KG(i.path[0],!0)?oG(r.path,i.path[0]):r.host=i.host),d=OG;continue;case EG:if(l==Cg||"/"==l||"\\"==l||"?"==l||"#"==l){if(!t&&KG(u))d=OG;else if(""==u){if(r.host="",t)return;d=DG}else{if(c=r.parseHost(u))return c;if("localhost"==r.host&&(r.host=""),t)return;u="",d=DG}continue}u+=l;break;case DG:if(r.isSpecial()){if(d=OG,"/"!=l&&"\\"!=l)continue}else if(t||"?"!=l)if(t||"#"!=l){if(l!=Cg&&(d=OG,"/"!=l))continue}else r.fragment="",d=$G;else r.query="",d=qG;break;case OG:if(l==Cg||"/"==l||"\\"==l&&r.isSpecial()||!t&&("?"==l||"#"==l)){if(".."===(a=sG(a=u))||"%2e."===a||".%2e"===a||"%2e%2e"===a?(r.shortenPath(),"/"==l||"\\"==l&&r.isSpecial()||oG(r.path,"")):JG(u)?"/"==l||"\\"==l&&r.isSpecial()||oG(r.path,""):("file"==r.scheme&&!r.path.length&&KG(u)&&(r.host&&(r.host=""),u=eG(u,0)+":"),oG(r.path,u)),u="","file"==r.scheme&&(l==Cg||"?"==l||"#"==l))for(;r.path.length>1&&""===r.path[0];)aG(r.path);"?"==l?(r.query="",d=qG):"#"==l&&(r.fragment="",d=$G)}else u+=fG(l,vG);break;case _G:"?"==l?(r.query="",d=qG):"#"==l?(r.fragment="",d=$G):l!=Cg&&(r.path[0]+=fG(l,CG));break;case qG:t||"#"!=l?l!=Cg&&("'"==l&&r.isSpecial()?r.query+="%27":r.query+="#"==l?"%23":fG(l,CG)):(r.fragment="",d=$G);break;case $G:l!=Cg&&(r.fragment+=fG(l,RG))}s++}},parseHost:function(e){var t,i,n;if("["==eG(e,0)){if("]"!=eG(e,e.length-1))return"Invalid host";if(t=function(e){var t,i,n,l,o,c,a,r=[0,0,0,0,0,0,0,0],d=0,s=null,u=0,Z=function(){return eG(e,u)};if(":"==Z()){if(":"!=eG(e,1))return;u+=2,s=++d}for(;Z();){if(8==d)return;if(":"!=Z()){for(t=i=0;i<4&&tG(gG,Z());)t=16*t+_g(Z(),16),u++,i++;if("."==Z()){if(0==i)return;if(u-=i,d>6)return;for(n=0;Z();){if(l=null,n>0){if(!("."==Z()&&n<4))return;u++}if(!tG(bG,Z()))return;for(;tG(bG,Z());){if(o=_g(Z(),10),null===l)l=o;else{if(0==l)return;l=10*l+o}if(l>255)return;u++}r[d]=256*r[d]+l,2!=++n&&4!=n||d++}if(4!=n)return;break}if(":"==Z()){if(u++,!Z())return}else if(Z())return;r[d++]=t}else{if(null!==s)return;u++,s=++d}}if(null!==s)for(c=d-s,d=7;0!=d&&c>0;)a=r[d],r[d--]=r[s+c-1],r[s+--c]=a;else if(8!=d)return;return r}(dG(e,1,-1)),!t)return"Invalid host";this.host=t}else if(this.isSpecial()){if(e=Fg(e),tG(GG,e))return"Invalid host";if(t=function(e){var t,i,n,l,o,c,a,r=rG(e,".");if(r.length&&""==r[r.length-1]&&r.length--,(t=r.length)>4)return e;for(i=[],n=0;n<t;n++){if(""==(l=r[n]))return e;if(o=10,l.length>1&&"0"==eG(l,0)&&(o=tG(mG,l)?16:8,l=dG(l,8==o?1:2)),""===l)c=0;else{if(!tG(10==o?pG:8==o?IG:gG,l))return e;c=_g(l,o)}oG(i,c)}for(n=0;n<t;n++)if(c=i[n],n==t-1){if(c>=$g(256,5-t))return null}else if(c>255)return null;for(a=lG(i),n=0;n<i.length;n++)a+=i[n]*$g(256,3-n);return a}(e),null===t)return"Invalid host";this.host=t}else{if(tG(yG,e))return"Invalid host";for(t="",i=Hg(e),n=0;n<i.length;n++)t+=fG(i[n],CG);this.host=t}},cannotHaveUsernamePasswordPort:function(){return!this.host||this.cannotBeABaseURL||"file"==this.scheme},includesCredentials:function(){return""!=this.username||""!=this.password},isSpecial:function(){return Ug(YG,this.scheme)},shortenPath:function(){var e=this.path,t=e.length;!t||"file"==this.scheme&&1==t&&KG(e[0],!0)||e.length--},serialize:function(){var e=this,t=e.scheme,i=e.username,n=e.password,l=e.host,o=e.port,c=e.path,a=e.query,r=e.fragment,d=t+":";return null!==l?(d+="//",e.includesCredentials()&&(d+=i+(n?":"+n:"")+"@"),d+=WG(l),null!==o&&(d+=":"+o)):"file"==t&&(d+="//"),d+=e.cannotBeABaseURL?c[0]:c.length?"/"+iG(c,"/"):"",null!==a&&(d+="?"+a),null!==r&&(d+="#"+r),d},setHref:function(e){var t=this.parse(e);if(t)throw Og(t);this.searchParams.update()},getOrigin:function(){var e=this.scheme,t=this.port;if("blob"==e)try{return new ty(e.path[0]).origin}catch(e){return"null"}return"file"!=e&&this.isSpecial()?e+"://"+WG(this.host)+(null!==t?":"+t:""):"null"},getProtocol:function(){return this.scheme+":"},setProtocol:function(e){this.parse(Bg(e)+":",LG)},getUsername:function(){return this.username},setUsername:function(e){var t=Hg(Bg(e));if(!this.cannotHaveUsernamePasswordPort()){this.username="";for(var i=0;i<t.length;i++)this.username+=fG(t[i],SG)}},getPassword:function(){return this.password},setPassword:function(e){var t=Hg(Bg(e));if(!this.cannotHaveUsernamePasswordPort()){this.password="";for(var i=0;i<t.length;i++)this.password+=fG(t[i],SG)}},getHost:function(){var e=this.host,t=this.port;return null===e?"":null===t?WG(e):WG(e)+":"+t},setHost:function(e){this.cannotBeABaseURL||this.parse(e,zG)},getHostname:function(){var e=this.host;return null===e?"":WG(e)},setHostname:function(e){this.cannotBeABaseURL||this.parse(e,PG)},getPort:function(){var e=this.port;return null===e?"":Bg(e)},setPort:function(e){this.cannotHaveUsernamePasswordPort()||(""==(e=Bg(e))?this.port=null:this.parse(e,jG))},getPathname:function(){var e=this.path;return this.cannotBeABaseURL?e[0]:e.length?"/"+iG(e,"/"):""},setPathname:function(e){this.cannotBeABaseURL||(this.path=[],this.parse(e,DG))},getSearch:function(){var e=this.query;return e?"?"+e:""},setSearch:function(e){""==(e=Bg(e))?this.query=null:("?"==eG(e,0)&&(e=dG(e,1)),this.query="",this.parse(e,qG)),this.searchParams.update()},getSearchParams:function(){return this.searchParams.facade},getHash:function(){var e=this.fragment;return e?"#"+e:""},setHash:function(e){""!=(e=Bg(e))?("#"==eG(e,0)&&(e=dG(e,1)),this.fragment="",this.parse(e,$G)):this.fragment=null},update:function(){this.query=this.searchParams.serialize()||null}};var ty=function(e){var t=Lg(this,iy),i=xg(arguments.length,1)>1?arguments[1]:void 0,n=jg(t,new ey(e,!1,i));vg||(t.href=n.serialize(),t.origin=n.getOrigin(),t.protocol=n.getProtocol(),t.username=n.getUsername(),t.password=n.getPassword(),t.host=n.getHost(),t.hostname=n.getHostname(),t.port=n.getPort(),t.pathname=n.getPathname(),t.search=n.getSearch(),t.searchParams=n.getSearchParams(),t.hash=n.getHash())},iy=ty.prototype,ny=function(e,t){return{get:function(){return Qg(this)[e]()},set:t&&function(e){return Qg(this)[t](e)},configurable:!0,enumerable:!0}};if(vg&&(Jg(iy,"href",ny("serialize","setHref")),Jg(iy,"origin",ny("getOrigin")),Jg(iy,"protocol",ny("getProtocol","setProtocol")),Jg(iy,"username",ny("getUsername","setUsername")),Jg(iy,"password",ny("getPassword","setPassword")),Jg(iy,"host",ny("getHost","setHost")),Jg(iy,"hostname",ny("getHostname","setHostname")),Jg(iy,"port",ny("getPort","setPort")),Jg(iy,"pathname",ny("getPathname","setPathname")),Jg(iy,"search",ny("getSearch","setSearch")),Jg(iy,"searchParams",ny("getSearchParams")),Jg(iy,"hash",ny("getHash","setHash"))),Ng(iy,"toJSON",(function(){return Qg(this).serialize()}),{enumerable:!0}),Ng(iy,"toString",(function(){return Qg(this).serialize()}),{enumerable:!0}),Dg){var ly=Dg.createObjectURL,oy=Dg.revokeObjectURL;ly&&Ng(ty,"createObjectURL",Yg(ly,Dg)),oy&&Ng(ty,"revokeObjectURL",Yg(oy,Dg))}wg(ty,"URL"),Rg({global:!0,constructor:!0,forced:!Sg,sham:!vg},{URL:ty});var cy,ay=Ye;function ry(e,t,i,n){return new(i||(i=Promise))((function(l,o){function c(e){try{r(n.next(e))}catch(e){o(e)}}function a(e){try{r(n.throw(e))}catch(e){o(e)}}function r(e){var t;e.done?l(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(c,a)}r((n=n.apply(e,t||[])).next())}))}function dy(e,t,i,n){return new(i||(i=Promise))((function(l,o){function c(e){try{r(n.next(e))}catch(e){o(e)}}function a(e){try{r(n.throw(e))}catch(e){o(e)}}function r(e){var t;e.done?l(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(c,a)}r((n=n.apply(e,t||[])).next())}))}el({target:"URL",proto:!0,enumerable:!0},{toJSON:function(){return ay(URL.prototype.toString,this)}}),function(e){e.formPost="form_post",e.query="query",e.direct="direct"}(cy||(cy={}));const sy="{{token}}",uy="{{username}}",Zy="{{scope}}",hy="{{clientID}}",by="{{clientSecret}}";var my;!function(e){e.ConfigData="config_data",e.OIDCProviderMetaData="oidc_provider_meta_data",e.SessionData="session_data",e.TemporaryData="temporary_data"}(my||(my={}));const Iy="refresh_token_timer",py="pkce_code_verifier",gy="#",Gy=["RS256","RS512","RS384","PS256"],yy="code",Xy="session_state",Vy="sign_out_url",Wy="sign_out_success",Cy="state",Ry="openid";var vy;!function(e){e.Include="include",e.SameOrigin="same-origin",e.Omit="omit"}(vy||(vy={}));class Sy{constructor(e,t,i){this.message=i,this.name=t,this.code=e,Object.setPrototypeOf(this,new.target.prototype)}}class fy{constructor(){}static filterClaimsFromIDTokenPayload(e){const t=Object.assign({},e);null==t||delete t.iss,null==t||delete t.aud,null==t||delete t.exp,null==t||delete t.iat,null==t||delete t.acr,null==t||delete t.amr,null==t||delete t.azp,null==t||delete t.auth_time,null==t||delete t.nonce,null==t||delete t.c_hash,null==t||delete t.at_hash,null==t||delete t.nbf,null==t||delete t.isk,null==t||delete t.sid;const i={};return Object.entries(t).forEach((e=>{let[t,n]=e;const l=t.split("_").map(((e,t)=>0===t?e:[e[0].toUpperCase(),...e.slice(1)].join(""))).join("");i[l]=n})),i}static getTokenRequestHeaders(){return{Accept:"application/json","Content-Type":"application/x-www-form-urlencoded"}}static generateStateParamForRequestCorrelation(e,t){const i=parseInt(e.split("#")[1]);return t?"".concat(t,"_request_").concat(i):"request_".concat(i)}static extractPKCEKeyFromStateParam(e){return"pkce_code_verifier#".concat(parseInt(e.split("request_")[1]))}}fy.getTenantDomainFromIdTokenPayload=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"@";const i=e.sub.split(t);return i.length>2?i[i.length-1]:""};class Yy{constructor(e,t){this._dataLayer=e,this._config=()=>dy(this,void 0,void 0,(function*(){return yield this._dataLayer.getConfigData()})),this._oidcProviderMetaData=()=>dy(this,void 0,void 0,(function*(){return yield this._dataLayer.getOIDCProviderMetaData()})),this._cryptoHelper=t}resolveEndpoints(e){return dy(this,void 0,void 0,(function*(){const t={},i=yield this._config();return i.endpoints&&Object.keys(i.endpoints).forEach((e=>{const n=e.replace(/[A-Z]/g,(e=>"_".concat(e.toLowerCase())));t[n]=(null==i?void 0:i.endpoints)?i.endpoints[e]:""})),Object.assign(Object.assign({},e),t)}))}resolveEndpointsExplicitly(){return dy(this,void 0,void 0,(function*(){const e={},t=yield this._config();if(!t.endpoints||!["authorization_endpoint","end_session_endpoint","jwks_uri","check_session_iframe","revocation_endpoint","token_endpoint","issuer","userinfo_endpoint"].every((e=>!!t.endpoints&&Object.keys(t.endpoints).some((t=>t.replace(/[A-Z]/g,(e=>"_".concat(e.toLowerCase())))===e)))))throw new Sy("JS-AUTH_HELPER-REE-NF01","Required endpoints missing","Some or all of the required endpoints are missing in the object passed to the `endpoints` attribute of the`AuthConfig` object.");return t.endpoints&&Object.keys(t.endpoints).forEach((i=>{const n=i.replace(/[A-Z]/g,(e=>"_".concat(e.toLowerCase())));e[n]=(null==t?void 0:t.endpoints)?t.endpoints[i]:""})),Object.assign({},e)}))}resolveEndpointsByBaseURL(){return dy(this,void 0,void 0,(function*(){const e={},t=yield this._config(),i=t.baseUrl;if(!i)throw new Sy("JS-AUTH_HELPER_REBO-NF01","Base URL not defined.","Base URL is not defined in AuthClient config.");t.endpoints&&Object.keys(t.endpoints).forEach((i=>{const n=i.replace(/[A-Z]/g,(e=>"_".concat(e.toLowerCase())));e[n]=(null==t?void 0:t.endpoints)?t.endpoints[i]:""}));const n={authorization_endpoint:"".concat(i).concat("/oauth2/authorize"),end_session_endpoint:"".concat(i).concat("/oidc/logout"),issuer:"".concat(i).concat("/oauth2/token"),jwks_uri:"".concat(i).concat("/oauth2/jwks"),check_session_iframe:"".concat(i).concat("/oidc/checksession"),revocation_endpoint:"".concat(i).concat("/oauth2/revoke"),token_endpoint:"".concat(i).concat("/oauth2/token"),userinfo_endpoint:"".concat(i).concat("/oauth2/userinfo")};return Object.assign(Object.assign({},n),e)}))}validateIdToken(e){var t;return dy(this,void 0,void 0,(function*(){const i=(yield this._dataLayer.getOIDCProviderMetaData()).jwks_uri,n=yield this._config();if(!i||0===i.trim().length)throw new Sy("JS_AUTH_HELPER-VIT-NF01","JWKS endpoint not found.","No JWKS endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the JWKS endpoint passed to the SDK is empty.");let l;try{l=yield fetch(i,{credentials:n.sendCookiesInRequests?vy.Include:vy.SameOrigin})}catch(i){throw new Sy("JS-AUTH_HELPER-VIT-NE02","Request to jwks endpoint failed.",null!=i?i:"The request sent to get the jwks from the server failed.")}if(200!==l.status||!l.ok)throw new Sy("JS-AUTH_HELPER-VIT-HE03","Invalid response status received for jwks request (".concat(l.statusText,")."),yield l.json());const o=(yield this._oidcProviderMetaData()).issuer,{keys:c}=yield l.json(),a=yield this._cryptoHelper.getJWKForTheIdToken(e.split(".")[0],c);return this._cryptoHelper.isValidIdToken(e,a,(yield this._config()).clientID,null!=o?o:"",this._cryptoHelper.decodeIDToken(e).sub,(yield this._config()).clockTolerance,null===(t=(yield this._config()).validateIDTokenIssuer)||void 0===t||t)}))}getAuthenticatedUserInfo(e){var t,i,n,l;const o=this._cryptoHelper.decodeIDToken(e),c=fy.getTenantDomainFromIdTokenPayload(o),a=null!==(t=null==o?void 0:o.username)&&void 0!==t?t:"",r=null!==(i=o.given_name)&&void 0!==i?i:"",d=null!==(n=o.family_name)&&void 0!==n?n:"",s=r&&d?"".concat(r," ").concat(d):r||d||"",u=null!==(l=o.preferred_username)&&void 0!==l?l:s;return Object.assign({displayName:u,tenantDomain:c,username:a},fy.filterClaimsFromIDTokenPayload(o))}replaceCustomGrantTemplateTags(e,t){var i;return dy(this,void 0,void 0,(function*(){let n="openid";const l=yield this._config(),o=yield this._dataLayer.getSessionData(t);return l.scope&&l.scope.length>0&&(l.scope.includes("openid")||l.scope.push("openid"),n=l.scope.join(" ")),e.replace("{{token}}",o.access_token).replace("{{username}}",this.getAuthenticatedUserInfo(o.id_token).username).replace("{{scope}}",n).replace("{{clientID}}",l.clientID).replace("{{clientSecret}}",null!==(i=l.clientSecret)&&void 0!==i?i:"")}))}clearUserSessionData(e){return dy(this,void 0,void 0,(function*(){yield this._dataLayer.removeTemporaryData(e),yield this._dataLayer.removeSessionData(e)}))}handleTokenResponse(e,t){return dy(this,void 0,void 0,(function*(){if(200!==e.status||!e.ok)throw new Sy("JS-AUTH_HELPER-HTR-NE01","Invalid response status received for token request (".concat(e.statusText,")."),yield e.json());const i=yield e.json();if(i.created_at=(new Date).getTime(),(yield this._config()).validateIDToken)return this.validateIdToken(i.id_token).then((()=>dy(this,void 0,void 0,(function*(){yield this._dataLayer.setSessionData(i,t);const e={accessToken:i.access_token,createdAt:i.created_at,expiresIn:i.expires_in,idToken:i.id_token,refreshToken:i.refresh_token,scope:i.scope,tokenType:i.token_type};return Promise.resolve(e)}))));{const e={accessToken:i.access_token,createdAt:i.created_at,expiresIn:i.expires_in,idToken:i.id_token,refreshToken:i.refresh_token,scope:i.scope,tokenType:i.token_type};return yield this._dataLayer.setSessionData(i,t),Promise.resolve(e)}}))}generatePKCEKey(e){var t;return dy(this,void 0,void 0,(function*(){const i=yield this._dataLayer.getTemporaryData(e),n=[];Object.keys(i).forEach((e=>{e.startsWith("pkce_code_verifier")&&n.push(e)}));const l=n.sort().pop();return"pkce_code_verifier#".concat(parseInt(null!==(t=null==l?void 0:l.split("#")[1])&&void 0!==t?t:"-1")+1)}))}}class Ky{constructor(e){this._cryptoUtils=e}getCodeVerifier(){return this._cryptoUtils.base64URLEncode(this._cryptoUtils.generateRandomBytes(32))}getCodeChallenge(e){return this._cryptoUtils.base64URLEncode(this._cryptoUtils.hashSha256(e))}getJWKForTheIdToken(e,t){const i=JSON.parse(this._cryptoUtils.base64URLDecode(e));for(const e of t)if(i.kid===e.kid)return e;throw new Sy("JS-CRYPTO_UTIL-GJFTIT-IV01","kid not found.","Failed to find the 'kid' specified in the id_token. 'kid' found in the header : "+i.kid+", Expected values: "+t.map((e=>e.kid)).join(", "))}isValidIdToken(e,t,i,n,l,o,c){return this._cryptoUtils.verifyJwt(e,t,Gy,i,n,l,o,c).then((e=>e?Promise.resolve(!0):Promise.reject(new Sy("JS-CRYPTO_HELPER-IVIT-IV01","Invalid ID token.","ID token validation returned false"))))}decodeIDToken(e){try{const t=this._cryptoUtils.base64URLDecode(e.split(".")[1]);return JSON.parse(t)}catch(e){throw new Sy("JS-CRYPTO_UTIL-DIT-IV01","Decoding ID token failed.",e)}}}class Ny{constructor(e,t){this._cryptoUtils=t,this._cryptoHelper=new Ky(t),this._authenticationHelper=new Yy(e,this._cryptoHelper),this._dataLayer=e,this._config=()=>dy(this,void 0,void 0,(function*(){return yield this._dataLayer.getConfigData()})),this._oidcProviderMetaData=()=>dy(this,void 0,void 0,(function*(){return yield this._dataLayer.getOIDCProviderMetaData()}))}getAuthorizationURLParams(e,t){var i,n,l;return dy(this,void 0,void 0,(function*(){const o=yield this._config(),c=new Map;c.set("response_type","code"),c.set("client_id",o.clientID),o.clientSecret&&o.clientSecret.trim().length>0&&c.set("client_secret",o.clientSecret);let a="openid";o.scope&&o.scope.length>0&&(o.scope.includes("openid")||o.scope.push("openid"),a=o.scope.join(" ")),c.set("scope",a),c.set("redirect_uri",o.signInRedirectURL),o.responseMode&&c.set("response_mode",o.responseMode);const r=yield this._authenticationHelper.generatePKCEKey(t);if(o.enablePKCE){const e=null===(i=this._cryptoHelper)||void 0===i?void 0:i.getCodeVerifier(),l=null===(n=this._cryptoHelper)||void 0===n?void 0:n.getCodeChallenge(e);yield this._dataLayer.setTemporaryDataParameter(r,e,t),c.set("code_challenge_method","S256"),c.set("code_challenge",l)}o.prompt&&c.set("prompt",o.prompt);const d=e;if(d)for(const[e,t]of Object.entries(d))""!=e&&""!=t&&"state"!==e&&c.set(e,t.toString());return c.set("state",fy.generateStateParamForRequestCorrelation(r,d?null===(l=d.state)||void 0===l?void 0:l.toString():"")),c}))}getAuthorizationURL(e,t){return dy(this,void 0,void 0,(function*(){const i=yield this._dataLayer.getOIDCProviderMetaDataParameter("authorization_endpoint");if(!i||0===i.trim().length)throw new Sy("JS-AUTH_CORE-GAU-NF01","No authorization endpoint found.","No authorization endpoint was found in the OIDC provider meta data from the well-known endpoint or the authorization endpoint passed to the SDK is empty.");const n=new URL(i),l=yield this.getAuthorizationURLParams(e,t);for(const[e,t]of l.entries())n.searchParams.append(e,t);return n.toString()}))}requestAccessToken(e,t,i,n,l){return dy(this,void 0,void 0,(function*(){const o=(yield this._oidcProviderMetaData()).token_endpoint,c=yield this._config();if(!o||0===o.trim().length)throw new Sy("JS-AUTH_CORE-RAT1-NF01","Token endpoint not found.","No token endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the token endpoint passed to the SDK is empty.");t&&(yield this._dataLayer.setSessionDataParameter("session_state",t,n));const a=new URLSearchParams;a.set("client_id",c.clientID),c.clientSecret&&c.clientSecret.trim().length>0&&a.set("client_secret",c.clientSecret);const r=e;let d;a.set("code",r),a.set("grant_type","authorization_code"),a.set("redirect_uri",c.signInRedirectURL),(null==l?void 0:l.params)&&Object.entries(l.params).forEach((e=>{let[t,i]=e;a.append(t,i)})),c.enablePKCE&&(a.set("code_verifier","".concat(yield this._dataLayer.getTemporaryDataParameter(fy.extractPKCEKeyFromStateParam(i),n))),yield this._dataLayer.removeTemporaryDataParameter(fy.extractPKCEKeyFromStateParam(i),n));try{d=yield fetch(o,{body:a,credentials:c.sendCookiesInRequests?vy.Include:vy.SameOrigin,headers:new Headers(fy.getTokenRequestHeaders()),method:"POST"})}catch(o){throw new Sy("JS-AUTH_CORE-RAT1-NE02","Requesting access token failed",null!=o?o:"The request to get the access token from the server failed.")}if(!d.ok)throw new Sy("JS-AUTH_CORE-RAT1-HE03","Requesting access token failed with ".concat(d.statusText),yield d.json());return yield this._authenticationHelper.handleTokenResponse(d,n)}))}refreshAccessToken(e){return dy(this,void 0,void 0,(function*(){const t=(yield this._oidcProviderMetaData()).token_endpoint,i=yield this._config(),n=yield this._dataLayer.getSessionData(e);if(!n.refresh_token)throw new Sy("JS-AUTH_CORE-RAT2-NF01","No refresh token found.","There was no refresh token found. Asgardeo doesn't return a refresh token if the refresh token grant is not enabled.");if(!t||0===t.trim().length)throw new Sy("JS-AUTH_CORE-RAT2-NF02","No refresh token endpoint found.","No refresh token endpoint was in the OIDC provider meta data returned by the well-known endpoint or the refresh token endpoint passed to the SDK is empty.");const l=[];let o;l.push("client_id=".concat(i.clientID)),l.push("refresh_token=".concat(n.refresh_token)),l.push("grant_type=refresh_token"),i.clientSecret&&i.clientSecret.trim().length>0&&l.push("client_secret=".concat(i.clientSecret));try{o=yield fetch(t,{body:l.join("&"),credentials:i.sendCookiesInRequests?vy.Include:vy.SameOrigin,headers:new Headers(fy.getTokenRequestHeaders()),method:"POST"})}catch(t){throw new Sy("JS-AUTH_CORE-RAT2-NR03","Refresh access token request failed.",null!=t?t:"The request to refresh the access token failed.")}if(!o.ok)throw new Sy("JS-AUTH_CORE-RAT2-HE04","Refreshing access token failed with ".concat(o.statusText),yield o.json());return this._authenticationHelper.handleTokenResponse(o,e)}))}revokeAccessToken(e){return dy(this,void 0,void 0,(function*(){const t=(yield this._oidcProviderMetaData()).revocation_endpoint,i=yield this._config();if(!t||0===t.trim().length)throw new Sy("JS-AUTH_CORE-RAT3-NF01","No revoke access token endpoint found.","No revoke access token endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the revoke access token endpoint passed to the SDK is empty.");const n=[];let l;n.push("client_id=".concat(i.clientID)),n.push("token=".concat((yield this._dataLayer.getSessionData(e)).access_token)),n.push("token_type_hint=access_token");try{l=yield fetch(t,{body:n.join("&"),credentials:i.sendCookiesInRequests?vy.Include:vy.SameOrigin,headers:new Headers(fy.getTokenRequestHeaders()),method:"POST"})}catch(t){throw new Sy("JS-AUTH_CORE-RAT3-NE02","The request to revoke access token failed.",null!=t?t:"The request sent to revoke the access token failed.")}if(200!==l.status||!l.ok)throw new Sy("JS-AUTH_CORE-RAT3-HE03","Invalid response status received for revoke access token request (".concat(l.statusText,")."),yield l.json());return this._authenticationHelper.clearUserSessionData(e),Promise.resolve(l)}))}requestCustomGrant(e,t){return dy(this,void 0,void 0,(function*(){const i=yield this._oidcProviderMetaData(),n=yield this._config();let l;if(l=e.tokenEndpoint&&0!==e.tokenEndpoint.trim().length?e.tokenEndpoint:i.token_endpoint,!l||0===l.trim().length)throw new Sy("JS-AUTH_CORE-RCG-NF01","Token endpoint not found.","No token endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the token endpoint passed to the SDK is empty.");const o=yield Promise.all(Object.entries(e.data).map((e=>{let[i,n]=e;return dy(this,void 0,void 0,(function*(){const e=yield this._authenticationHelper.replaceCustomGrantTemplateTags(n,t);return"".concat(i,"=").concat(e)}))})));let c=Object.assign({},fy.getTokenRequestHeaders());e.attachToken&&(c=Object.assign(Object.assign({},c),{Authorization:"Bearer ".concat((yield this._dataLayer.getSessionData(t)).access_token)}));const a={body:o.join("&"),credentials:n.sendCookiesInRequests?vy.Include:vy.SameOrigin,headers:new Headers(c),method:"POST"};let r;try{r=yield fetch(l,a)}catch(e){throw new Sy("JS-AUTH_CORE-RCG-NE02","The custom grant request failed.",null!=e?e:"The request sent to get the custom grant failed.")}if(200!==r.status||!r.ok)throw new Sy("JS-AUTH_CORE-RCG-HE03","Invalid response status received for the custom grant request. (".concat(r.statusText,")"),yield r.json());return e.returnsSession?this._authenticationHelper.handleTokenResponse(r,t):Promise.resolve(yield r.json())}))}getBasicUserInfo(e){return dy(this,void 0,void 0,(function*(){const t=yield this._dataLayer.getSessionData(e),i=this._authenticationHelper.getAuthenticatedUserInfo(null==t?void 0:t.id_token);let n={allowedScopes:t.scope,sessionState:t.session_state};return Object.keys(i).forEach((e=>{void 0!==i[e]&&""!==i[e]&&null!==i[e]||delete i[e]})),n=Object.assign(Object.assign({},n),i),n}))}getDecodedIDToken(e){return dy(this,void 0,void 0,(function*(){const t=(yield this._dataLayer.getSessionData(e)).id_token;return this._cryptoHelper.decodeIDToken(t)}))}getCryptoHelper(){return dy(this,void 0,void 0,(function*(){return this._cryptoHelper}))}getIDToken(e){return dy(this,void 0,void 0,(function*(){return(yield this._dataLayer.getSessionData(e)).id_token}))}getOIDCProviderMetaData(e){return dy(this,void 0,void 0,(function*(){const t=yield this._config();if(!e&&(yield this._dataLayer.getTemporaryDataParameter("op_config_initiated")))return Promise.resolve();const i=t.wellKnownEndpoint;if(i){let e;try{if(e=yield fetch(i),200!==e.status||!e.ok)throw new Error}catch(t){throw new Sy("JS-AUTH_CORE-GOPMD-HE01","Invalid well-known response","The well known endpoint response has been failed with an error.")}return yield this._dataLayer.setOIDCProviderMetaData(yield this._authenticationHelper.resolveEndpoints(yield e.json())),yield this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0),Promise.resolve()}if(t.baseUrl){try{yield this._dataLayer.setOIDCProviderMetaData(yield this._authenticationHelper.resolveEndpointsByBaseURL())}catch(t){throw new Sy("JS-AUTH_CORE-GOPMD-IV02","Resolving endpoints failed.",null!=t?t:"Resolving endpoints by base url failed.")}return yield this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0),Promise.resolve()}return yield this._dataLayer.setOIDCProviderMetaData(yield this._authenticationHelper.resolveEndpointsExplicitly()),yield this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0),Promise.resolve()}))}getOIDCServiceEndpoints(){var e,t,i,n,l,o,c,a,r,d;return dy(this,void 0,void 0,(function*(){const s=yield this._oidcProviderMetaData();return{authorizationEndpoint:null!==(e=s.authorization_endpoint)&&void 0!==e?e:"",checkSessionIframe:null!==(t=s.check_session_iframe)&&void 0!==t?t:"",endSessionEndpoint:null!==(i=s.end_session_endpoint)&&void 0!==i?i:"",introspectionEndpoint:null!==(n=s.introspection_endpoint)&&void 0!==n?n:"",issuer:null!==(l=s.issuer)&&void 0!==l?l:"",jwksUri:null!==(o=s.jwks_uri)&&void 0!==o?o:"",registrationEndpoint:null!==(c=s.registration_endpoint)&&void 0!==c?c:"",revocationEndpoint:null!==(a=s.revocation_endpoint)&&void 0!==a?a:"",tokenEndpoint:null!==(r=s.token_endpoint)&&void 0!==r?r:"",userinfoEndpoint:null!==(d=s.userinfo_endpoint)&&void 0!==d?d:""}}))}getSignOutURL(e){var t,i,n;return dy(this,void 0,void 0,(function*(){const l=null===(t=yield this._oidcProviderMetaData())||void 0===t?void 0:t.end_session_endpoint,o=yield this._config();if(!l||0===l.trim().length)throw new Sy("JS-AUTH_CORE-GSOU-NF01","Sign-out endpoint not found.","No sign-out endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the sign-out endpoint passed to the SDK is empty.");const c=null!==(i=null==o?void 0:o.signOutRedirectURL)&&void 0!==i?i:null==o?void 0:o.signInRedirectURL;if(!c||0===c.trim().length)throw new Sy("JS-AUTH_CORE-GSOU-NF03","No sign-out redirect URL found.","The sign-out redirect URL cannot be found or the URL passed to the SDK is empty. No sign-in redirect URL has been found either. ");const a=new URLSearchParams;if(a.set("post_logout_redirect_uri",c),o.sendIdTokenInLogoutRequest){const t=null===(n=yield this._dataLayer.getSessionData(e))||void 0===n?void 0:n.id_token;if(!t||0===t.trim().length)throw new Sy("JS-AUTH_CORE-GSOU-NF02","ID token not found.","No ID token could be found. Either the session information is lost or you have not signed in.");a.set("id_token_hint",t)}else a.set("client_id",o.clientID);return a.set("state","sign_out_success"),"".concat(l,"?").concat(a.toString())}))}clearUserSessionData(e){return dy(this,void 0,void 0,(function*(){yield this._authenticationHelper.clearUserSessionData(e)}))}getAccessToken(e){var t;return dy(this,void 0,void 0,(function*(){return null===(t=yield this._dataLayer.getSessionData(e))||void 0===t?void 0:t.access_token}))}getCreatedAt(e){var t;return dy(this,void 0,void 0,(function*(){return null===(t=yield this._dataLayer.getSessionData(e))||void 0===t?void 0:t.created_at}))}getExpiresIn(e){var t;return dy(this,void 0,void 0,(function*(){return null===(t=yield this._dataLayer.getSessionData(e))||void 0===t?void 0:t.expires_in}))}isAuthenticated(e){return dy(this,void 0,void 0,(function*(){const t=Boolean(yield this.getAccessToken(e)),i=yield this.getCreatedAt(e),n=yield this.getExpiresIn(e);if(!n)return!1;const l=1e3*parseInt(n),o=(new Date).getTime();return t&&i+l>o}))}getPKCECode(e,t){return dy(this,void 0,void 0,(function*(){return yield this._dataLayer.getTemporaryDataParameter(fy.extractPKCEKeyFromStateParam(e),t)}))}setPKCECode(e,t,i){return dy(this,void 0,void 0,(function*(){return yield this._dataLayer.setTemporaryDataParameter(fy.extractPKCEKeyFromStateParam(t),e,i)}))}updateConfig(e){return dy(this,void 0,void 0,(function*(){yield this._dataLayer.setConfigData(e),yield this.getOIDCProviderMetaData(!0)}))}}const Jy="asgardeo-session-active";class Ly{constructor(e,t){this._id=e,this._store=t}setDataInBulk(e,t){var i;return dy(this,void 0,void 0,(function*(){const n=null!==(i=yield this._store.getData(e))&&void 0!==i?i:null,l=n&&JSON.parse(n),o=Object.assign(Object.assign({},l),t),c=JSON.stringify(o);yield this._store.setData(e,c)}))}setValue(e,t,i){var n;return dy(this,void 0,void 0,(function*(){const l=null!==(n=yield this._store.getData(e))&&void 0!==n?n:null,o=l&&JSON.parse(l),c=Object.assign(Object.assign({},o),{[t]:i}),a=JSON.stringify(c);yield this._store.setData(e,a)}))}removeValue(e,t){var i;return dy(this,void 0,void 0,(function*(){const n=null!==(i=yield this._store.getData(e))&&void 0!==i?i:null,l=n&&JSON.parse(n),o=Object.assign({},l);delete o[t];const c=JSON.stringify(o);yield this._store.setData(e,c)}))}_resolveKey(e,t){return t?"".concat(e,"-").concat(this._id,"-").concat(t):"".concat(e,"-").concat(this._id)}isLocalStorageAvailable(){try{const e="__ASGARDEO_AUTH_CORE_LOCAL_STORAGE_TEST__";return localStorage.setItem(e,e),localStorage.removeItem(e),!0}catch(e){return!1}}setConfigData(e){return dy(this,void 0,void 0,(function*(){yield this.setDataInBulk(this._resolveKey(my.ConfigData),e)}))}setOIDCProviderMetaData(e){return dy(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(my.OIDCProviderMetaData),e)}))}setTemporaryData(e,t){return dy(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(my.TemporaryData,t),e)}))}setSessionData(e,t){return dy(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(my.SessionData,t),e)}))}setCustomData(e,t,i){return dy(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(e,i),t)}))}getConfigData(){var e;return dy(this,void 0,void 0,(function*(){return JSON.parse(null!==(e=yield this._store.getData(this._resolveKey(my.ConfigData)))&&void 0!==e?e:null)}))}getOIDCProviderMetaData(){var e;return dy(this,void 0,void 0,(function*(){return JSON.parse(null!==(e=yield this._store.getData(this._resolveKey(my.OIDCProviderMetaData)))&&void 0!==e?e:null)}))}getTemporaryData(e){var t;return dy(this,void 0,void 0,(function*(){return JSON.parse(null!==(t=yield this._store.getData(this._resolveKey(my.TemporaryData,e)))&&void 0!==t?t:null)}))}getSessionData(e){var t;return dy(this,void 0,void 0,(function*(){return JSON.parse(null!==(t=yield this._store.getData(this._resolveKey(my.SessionData,e)))&&void 0!==t?t:null)}))}getCustomData(e,t){var i;return dy(this,void 0,void 0,(function*(){return JSON.parse(null!==(i=yield this._store.getData(this._resolveKey(e,t)))&&void 0!==i?i:null)}))}setSessionStatus(e){this.isLocalStorageAvailable()&&localStorage.setItem("asgardeo-session-active",e)}getSessionStatus(){var e;return this.isLocalStorageAvailable()&&null!==(e=localStorage.getItem("asgardeo-session-active"))&&void 0!==e?e:""}removeSessionStatus(){this.isLocalStorageAvailable()&&localStorage.removeItem("asgardeo-session-active")}removeConfigData(){return dy(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(my.ConfigData))}))}removeOIDCProviderMetaData(){return dy(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(my.OIDCProviderMetaData))}))}removeTemporaryData(e){return dy(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(my.TemporaryData,e))}))}removeSessionData(e){return dy(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(my.SessionData,e))}))}getConfigDataParameter(e){return dy(this,void 0,void 0,(function*(){const t=yield this._store.getData(this._resolveKey(my.ConfigData));return t&&JSON.parse(t)[e]}))}getOIDCProviderMetaDataParameter(e){return dy(this,void 0,void 0,(function*(){const t=yield this._store.getData(this._resolveKey(my.OIDCProviderMetaData));return t&&JSON.parse(t)[e]}))}getTemporaryDataParameter(e,t){return dy(this,void 0,void 0,(function*(){const i=yield this._store.getData(this._resolveKey(my.TemporaryData,t));return i&&JSON.parse(i)[e]}))}getSessionDataParameter(e,t){return dy(this,void 0,void 0,(function*(){const i=yield this._store.getData(this._resolveKey(my.SessionData,t));return i&&JSON.parse(i)[e]}))}setConfigDataParameter(e,t){return dy(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(my.ConfigData),e,t)}))}setOIDCProviderMetaDataParameter(e,t){return dy(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(my.OIDCProviderMetaData),e,t)}))}setTemporaryDataParameter(e,t,i){return dy(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(my.TemporaryData,i),e,t)}))}setSessionDataParameter(e,t,i){return dy(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(my.SessionData,i),e,t)}))}removeConfigDataParameter(e){return dy(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(my.ConfigData),e)}))}removeOIDCProviderMetaDataParameter(e){return dy(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(my.OIDCProviderMetaData),e)}))}removeTemporaryDataParameter(e,t){return dy(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(my.TemporaryData,t),e)}))}removeSessionDataParameter(e,t){return dy(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(my.SessionData,t),e)}))}}const Uy={clockTolerance:300,enablePKCE:!0,responseMode:cy.query,scope:["openid"],sendCookiesInRequests:!0,validateIDToken:!0,validateIDTokenIssuer:!0};class ky{
1
+ var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function t(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function i(e){if(e.__esModule)return e;var t=Object.defineProperty({},"__esModule",{value:!0});return Object.keys(e).forEach((function(i){var n=Object.getOwnPropertyDescriptor(e,i);Object.defineProperty(t,i,n.get?n:{enumerable:!0,get:function(){return e[i]}})})),t}var n=function(e){return e&&e.Math==Math&&e},l=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof e&&e)||function(){return this}()||Function("return this")(),o=l,c=function(e){try{return!!e()}catch(e){return!0}},a=!c((function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")})),r=a,d=Function.prototype,s=d.bind,u=d.call,Z=r&&s.bind(u,u),h=r?function(e){return e&&Z(e)}:function(e){return e&&function(){return u.apply(e,arguments)}},b=TypeError,m=function(e){if(null==e)throw b("Can't call method on "+e);return e},p=m,I=Object,g=function(e){return I(p(e))},G=g,y=h({}.hasOwnProperty),X=Object.hasOwn||function(e,t){return y(G(e),t)},V={},W={exports:{}},C=l,R=Object.defineProperty,S=function(e,t){try{R(C,e,{value:t,configurable:!0,writable:!0})}catch(i){C[e]=t}return t},v=S,f=l["__core-js_shared__"]||v("__core-js_shared__",{}),Y=f;(W.exports=function(e,t){return Y[e]||(Y[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.24.0",mode:"global",copyright:"© 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.24.0/LICENSE",source:"https://github.com/zloirock/core-js"});var K,N,J=h,L=0,k=Math.random(),U=J(1..toString),H=function(e){return"Symbol("+(void 0===e?"":e)+")_"+U(++L+k,36)},A=function(e){return"function"==typeof e},T=l,B=A,F=function(e){return B(e)?e:void 0},w=function(e,t){return arguments.length<2?F(T[e]):T[e]&&T[e][t]},x=w("navigator","userAgent")||"",z=l,P=x,Q=z.process,j=z.Deno,M=Q&&Q.versions||j&&j.version,E=M&&M.v8;E&&(N=(K=E.split("."))[0]>0&&K[0]<4?1:+(K[0]+K[1])),!N&&P&&(!(K=P.match(/Edge\/(\d+)/))||K[1]>=74)&&(K=P.match(/Chrome\/(\d+)/))&&(N=+K[1]);var D=N,O=D,_=c,q=!!Object.getOwnPropertySymbols&&!_((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&O&&O<41})),$=q&&!Symbol.sham&&"symbol"==typeof Symbol.iterator,ee=l,te=W.exports,ie=X,ne=H,le=q,oe=$,ce=te("wks"),ae=ee.Symbol,re=ae&&ae.for,de=oe?ae:ae&&ae.withoutSetter||ne,se=function(e){if(!ie(ce,e)||!le&&"string"!=typeof ce[e]){var t="Symbol."+e;le&&ie(ae,e)?ce[e]=ae[e]:ce[e]=oe&&re?re(t):de(t)}return ce[e]},ue=se;V.f=ue;var Ze={},he=!c((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})),be=A,me=function(e){return"object"==typeof e?null!==e:be(e)},pe=me,Ie=l.document,ge=pe(Ie)&&pe(Ie.createElement),Ge=function(e){return ge?Ie.createElement(e):{}},ye=Ge,Xe=!he&&!c((function(){return 7!=Object.defineProperty(ye("div"),"a",{get:function(){return 7}}).a})),Ve=he&&c((function(){return 42!=Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype})),We=me,Ce=String,Re=TypeError,Se=function(e){if(We(e))return e;throw Re(Ce(e)+" is not an object")},ve=a,fe=Function.prototype.call,Ye=ve?fe.bind(fe):function(){return fe.apply(fe,arguments)},Ke=h({}.isPrototypeOf),Ne=w,Je=A,Le=Ke,ke=Object,Ue=$?function(e){return"symbol"==typeof e}:function(e){var t=Ne("Symbol");return Je(t)&&Le(t.prototype,ke(e))},He=String,Ae=function(e){try{return He(e)}catch(e){return"Object"}},Te=A,Be=Ae,Fe=TypeError,we=function(e){if(Te(e))return e;throw Fe(Be(e)+" is not a function")},xe=we,ze=function(e,t){var i=e[t];return null==i?void 0:xe(i)},Pe=Ye,Qe=A,je=me,Me=TypeError,Ee=Ye,De=me,Oe=Ue,_e=ze,qe=function(e,t){var i,n;if("string"===t&&Qe(i=e.toString)&&!je(n=Pe(i,e)))return n;if(Qe(i=e.valueOf)&&!je(n=Pe(i,e)))return n;if("string"!==t&&Qe(i=e.toString)&&!je(n=Pe(i,e)))return n;throw Me("Can't convert object to primitive value")},$e=TypeError,et=se("toPrimitive"),tt=function(e,t){if(!De(e)||Oe(e))return e;var i,n=_e(e,et);if(n){if(void 0===t&&(t="default"),i=Ee(n,e,t),!De(i)||Oe(i))return i;throw $e("Can't convert object to primitive value")}return void 0===t&&(t="number"),qe(e,t)},it=tt,nt=Ue,lt=function(e){var t=it(e,"string");return nt(t)?t:t+""},ot=he,ct=Xe,at=Ve,rt=Se,dt=lt,st=TypeError,ut=Object.defineProperty,Zt=Object.getOwnPropertyDescriptor;Ze.f=ot?at?function(e,t,i){if(rt(e),t=dt(t),rt(i),"function"==typeof e&&"prototype"===t&&"value"in i&&"writable"in i&&!i.writable){var n=Zt(e,t);n&&n.writable&&(e[t]=i.value,i={configurable:"configurable"in i?i.configurable:n.configurable,enumerable:"enumerable"in i?i.enumerable:n.enumerable,writable:!1})}return ut(e,t,i)}:ut:function(e,t,i){if(rt(e),t=dt(t),rt(i),ct)try{return ut(e,t,i)}catch(e){}if("get"in i||"set"in i)throw st("Accessors not supported");return"value"in i&&(e[t]=i.value),e};var ht=o,bt=X,mt=V,pt=Ze.f,It=function(e){var t=ht.Symbol||(ht.Symbol={});bt(t,e)||pt(t,e,{value:mt.f(e)})};It("matchAll");var gt={},Gt={},yt={}.propertyIsEnumerable,Xt=Object.getOwnPropertyDescriptor,Vt=Xt&&!yt.call({1:2},1);Gt.f=Vt?function(e){var t=Xt(this,e);return!!t&&t.enumerable}:yt;var Wt=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},Ct=h,Rt=Ct({}.toString),St=Ct("".slice),vt=function(e){return St(Rt(e),8,-1)},ft=c,Yt=vt,Kt=Object,Nt=h("".split),Jt=ft((function(){return!Kt("z").propertyIsEnumerable(0)}))?function(e){return"String"==Yt(e)?Nt(e,""):Kt(e)}:Kt,Lt=Jt,kt=m,Ut=function(e){return Lt(kt(e))},Ht=he,At=Ye,Tt=Gt,Bt=Wt,Ft=Ut,wt=lt,xt=X,zt=Xe,Pt=Object.getOwnPropertyDescriptor;gt.f=Ht?Pt:function(e,t){if(e=Ft(e),t=wt(t),zt)try{return Pt(e,t)}catch(e){}if(xt(e,t))return Bt(!At(Tt.f,e,t),e[t])};var Qt=Ze,jt=Wt,Mt=he?function(e,t,i){return Qt.f(e,t,jt(1,i))}:function(e,t,i){return e[t]=i,e},Et={exports:{}},Dt=he,Ot=X,_t=Function.prototype,qt=Dt&&Object.getOwnPropertyDescriptor,$t=Ot(_t,"name"),ei={EXISTS:$t,PROPER:$t&&"something"===function(){}.name,CONFIGURABLE:$t&&(!Dt||Dt&&qt(_t,"name").configurable)},ti=A,ii=f,ni=h(Function.toString);ti(ii.inspectSource)||(ii.inspectSource=function(e){return ni(e)});var li,oi,ci,ai=ii.inspectSource,ri=A,di=ai,si=l.WeakMap,ui=ri(si)&&/native code/.test(di(si)),Zi=W.exports,hi=H,bi=Zi("keys"),mi=function(e){return bi[e]||(bi[e]=hi(e))},pi={},Ii=ui,gi=l,Gi=h,yi=me,Xi=Mt,Vi=X,Wi=f,Ci=mi,Ri=pi,Si=gi.TypeError,vi=gi.WeakMap;if(Ii||Wi.state){var fi=Wi.state||(Wi.state=new vi),Yi=Gi(fi.get),Ki=Gi(fi.has),Ni=Gi(fi.set);li=function(e,t){if(Ki(fi,e))throw new Si("Object already initialized");return t.facade=e,Ni(fi,e,t),t},oi=function(e){return Yi(fi,e)||{}},ci=function(e){return Ki(fi,e)}}else{var Ji=Ci("state");Ri[Ji]=!0,li=function(e,t){if(Vi(e,Ji))throw new Si("Object already initialized");return t.facade=e,Xi(e,Ji,t),t},oi=function(e){return Vi(e,Ji)?e[Ji]:{}},ci=function(e){return Vi(e,Ji)}}var Li={set:li,get:oi,has:ci,enforce:function(e){return ci(e)?oi(e):li(e,{})},getterFor:function(e){return function(t){var i;if(!yi(t)||(i=oi(t)).type!==e)throw Si("Incompatible receiver, "+e+" required");return i}}},ki=c,Ui=A,Hi=X,Ai=he,Ti=ei.CONFIGURABLE,Bi=ai,Fi=Li.enforce,wi=Li.get,xi=Object.defineProperty,zi=Ai&&!ki((function(){return 8!==xi((function(){}),"length",{value:8}).length})),Pi=String(String).split("String"),Qi=Et.exports=function(e,t,i){"Symbol("===String(t).slice(0,7)&&(t="["+String(t).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),i&&i.getter&&(t="get "+t),i&&i.setter&&(t="set "+t),(!Hi(e,"name")||Ti&&e.name!==t)&&(Ai?xi(e,"name",{value:t,configurable:!0}):e.name=t),zi&&i&&Hi(i,"arity")&&e.length!==i.arity&&xi(e,"length",{value:i.arity});try{i&&Hi(i,"constructor")&&i.constructor?Ai&&xi(e,"prototype",{writable:!1}):e.prototype&&(e.prototype=void 0)}catch(e){}var n=Fi(e);return Hi(n,"source")||(n.source=Pi.join("string"==typeof t?t:"")),e};Function.prototype.toString=Qi((function(){return Ui(this)&&wi(this).source||Bi(this)}),"toString");var ji=A,Mi=Ze,Ei=Et.exports,Di=S,Oi=function(e,t,i,n){n||(n={});var l=n.enumerable,o=void 0!==n.name?n.name:t;if(ji(i)&&Ei(i,o,n),n.global)l?e[t]=i:Di(t,i);else{try{n.unsafe?e[t]&&(l=!0):delete e[t]}catch(e){}l?e[t]=i:Mi.f(e,t,{value:i,enumerable:!1,configurable:!n.nonConfigurable,writable:!n.nonWritable})}return e},_i={},qi=Math.ceil,$i=Math.floor,en=Math.trunc||function(e){var t=+e;return(t>0?$i:qi)(t)},tn=en,nn=function(e){var t=+e;return t!=t||0===t?0:tn(t)},ln=nn,on=Math.max,cn=Math.min,an=function(e,t){var i=ln(e);return i<0?on(i+t,0):cn(i,t)},rn=nn,dn=Math.min,sn=function(e){return e>0?dn(rn(e),9007199254740991):0},un=sn,Zn=function(e){return un(e.length)},hn=Ut,bn=an,mn=Zn,pn=function(e){return function(t,i,n){var l,o=hn(t),c=mn(o),a=bn(n,c);if(e&&i!=i){for(;c>a;)if((l=o[a++])!=l)return!0}else for(;c>a;a++)if((e||a in o)&&o[a]===i)return e||a||0;return!e&&-1}},In={includes:pn(!0),indexOf:pn(!1)},gn=X,Gn=Ut,yn=In.indexOf,Xn=pi,Vn=h([].push),Wn=function(e,t){var i,n=Gn(e),l=0,o=[];for(i in n)!gn(Xn,i)&&gn(n,i)&&Vn(o,i);for(;t.length>l;)gn(n,i=t[l++])&&(~yn(o,i)||Vn(o,i));return o},Cn=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],Rn=Wn,Sn=Cn.concat("length","prototype");_i.f=Object.getOwnPropertyNames||function(e){return Rn(e,Sn)};var vn={};vn.f=Object.getOwnPropertySymbols;var fn=w,Yn=_i,Kn=vn,Nn=Se,Jn=h([].concat),Ln=fn("Reflect","ownKeys")||function(e){var t=Yn.f(Nn(e)),i=Kn.f;return i?Jn(t,i(e)):t},kn=X,Un=Ln,Hn=gt,An=Ze,Tn=c,Bn=A,Fn=/#|\.prototype\./,wn=function(e,t){var i=zn[xn(e)];return i==Qn||i!=Pn&&(Bn(t)?Tn(t):!!t)},xn=wn.normalize=function(e){return String(e).replace(Fn,".").toLowerCase()},zn=wn.data={},Pn=wn.NATIVE="N",Qn=wn.POLYFILL="P",jn=wn,Mn=l,En=gt.f,Dn=Mt,On=Oi,_n=S,qn=function(e,t,i){for(var n=Un(t),l=An.f,o=Hn.f,c=0;c<n.length;c++){var a=n[c];kn(e,a)||i&&kn(i,a)||l(e,a,o(t,a))}},$n=jn,el=function(e,t){var i,n,l,o,c,a=e.target,r=e.global,d=e.stat;if(i=r?Mn:d?Mn[a]||_n(a,{}):(Mn[a]||{}).prototype)for(n in t){if(o=t[n],l=e.dontCallGetSet?(c=En(i,n))&&c.value:i[n],!$n(r?n:a+(d?".":"#")+n,e.forced)&&void 0!==l){if(typeof o==typeof l)continue;qn(o,l)}(e.sham||l&&l.sham)&&Dn(o,"sham",!0),On(i,n,o,e)}},tl={},il=Wn,nl=Cn,ll=Object.keys||function(e){return il(e,nl)},ol=he,cl=Ve,al=Ze,rl=Se,dl=Ut,sl=ll;tl.f=ol&&!cl?Object.defineProperties:function(e,t){rl(e);for(var i,n=dl(t),l=sl(t),o=l.length,c=0;o>c;)al.f(e,i=l[c++],n[i]);return e};var ul,Zl=w("document","documentElement"),hl=Se,bl=tl,ml=Cn,pl=pi,Il=Zl,gl=Ge,Gl=mi("IE_PROTO"),yl=function(){},Xl=function(e){return"<script>"+e+"<\/script>"},Vl=function(e){e.write(Xl("")),e.close();var t=e.parentWindow.Object;return e=null,t},Wl=function(){try{ul=new ActiveXObject("htmlfile")}catch(e){}var e,t;Wl="undefined"!=typeof document?document.domain&&ul?Vl(ul):((t=gl("iframe")).style.display="none",Il.appendChild(t),t.src=String("javascript:"),(e=t.contentWindow.document).open(),e.write(Xl("document.F=Object")),e.close(),e.F):Vl(ul);for(var i=ml.length;i--;)delete Wl.prototype[ml[i]];return Wl()};pl[Gl]=!0;var Cl=Object.create||function(e,t){var i;return null!==e?(yl.prototype=hl(e),i=new yl,yl.prototype=null,i[Gl]=e):i=Wl(),void 0===t?i:bl.f(i,t)},Rl=se,Sl=Cl,vl=Ze.f,fl=Rl("unscopables"),Yl=Array.prototype;null==Yl[fl]&&vl(Yl,fl,{configurable:!0,value:Sl(null)});var Kl=function(e){Yl[fl][e]=!0},Nl=In.includes,Jl=Kl;el({target:"Array",proto:!0,forced:c((function(){return!Array(1).includes()}))},{includes:function(e){return Nl(this,e,arguments.length>1?arguments[1]:void 0)}}),Jl("includes"),Kl("flat"),Kl("flatMap");var Ll={},kl=we,Ul=function(e){var t,i;this.promise=new e((function(e,n){if(void 0!==t||void 0!==i)throw TypeError("Bad Promise constructor");t=e,i=n})),this.resolve=kl(t),this.reject=kl(i)};Ll.f=function(e){return new Ul(e)};var Hl=we,Al=a,Tl=h(h.bind),Bl=function(e,t){return Hl(e),void 0===t?e:Al?Tl(e,t):function(){return e.apply(t,arguments)}},Fl={},wl=Fl,xl=se("iterator"),zl=Array.prototype,Pl=function(e){return void 0!==e&&(wl.Array===e||zl[xl]===e)},Ql={};Ql[se("toStringTag")]="z";var jl="[object z]"===String(Ql),Ml=A,El=vt,Dl=se("toStringTag"),Ol=Object,_l="Arguments"==El(function(){return arguments}()),ql=jl?El:function(e){var t,i,n;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(i=function(e,t){try{return e[t]}catch(e){}}(t=Ol(e),Dl))?i:_l?El(t):"Object"==(n=El(t))&&Ml(t.callee)?"Arguments":n},$l=ql,eo=ze,to=Fl,io=se("iterator"),no=function(e){if(null!=e)return eo(e,io)||eo(e,"@@iterator")||to[$l(e)]},lo=Ye,oo=we,co=Se,ao=Ae,ro=no,so=TypeError,uo=function(e,t){var i=arguments.length<2?ro(e):t;if(oo(i))return co(lo(i,e));throw so(ao(e)+" is not iterable")},Zo=Ye,ho=Se,bo=ze,mo=function(e,t,i){var n,l;ho(e);try{if(!(n=bo(e,"return"))){if("throw"===t)throw i;return i}n=Zo(n,e)}catch(e){l=!0,n=e}if("throw"===t)throw i;if(l)throw n;return ho(n),i},po=Bl,Io=Ye,go=Se,Go=Ae,yo=Pl,Xo=Zn,Vo=Ke,Wo=uo,Co=no,Ro=mo,So=TypeError,vo=function(e,t){this.stopped=e,this.result=t},fo=vo.prototype,Yo=Ye,Ko=we,No=Ll,Jo=function(e){try{return{error:!1,value:e()}}catch(e){return{error:!0,value:e}}},Lo=function(e,t,i){var n,l,o,c,a,r,d,s=i&&i.that,u=!(!i||!i.AS_ENTRIES),Z=!(!i||!i.IS_RECORD),h=!(!i||!i.IS_ITERATOR),b=!(!i||!i.INTERRUPTED),m=po(t,s),p=function(e){return n&&Ro(n,"normal",e),new vo(!0,e)},I=function(e){return u?(go(e),b?m(e[0],e[1],p):m(e[0],e[1])):b?m(e,p):m(e)};if(Z)n=e.iterator;else if(h)n=e;else{if(!(l=Co(e)))throw So(Go(e)+" is not iterable");if(yo(l)){for(o=0,c=Xo(e);c>o;o++)if((a=I(e[o]))&&Vo(fo,a))return a;return new vo(!1)}n=Wo(e,l)}for(r=Z?e.next:n.next;!(d=Io(r,n)).done;){try{a=I(d.value)}catch(e){Ro(n,"throw",e)}if("object"==typeof a&&a&&Vo(fo,a))return a}return new vo(!1)};el({target:"Promise",stat:!0},{allSettled:function(e){var t=this,i=No.f(t),n=i.resolve,l=i.reject,o=Jo((function(){var i=Ko(t.resolve),l=[],o=0,c=1;Lo(e,(function(e){var a=o++,r=!1;c++,Yo(i,t,e).then((function(e){r||(r=!0,l[a]={status:"fulfilled",value:e},--c||n(l))}),(function(e){r||(r=!0,l[a]={status:"rejected",reason:e},--c||n(l))}))})),--c||n(l)}));return o.error&&l(o.value),i.promise}});var ko=l.Promise,Uo=h,Ho=c,Ao=A,To=ql,Bo=ai,Fo=function(){},wo=[],xo=w("Reflect","construct"),zo=/^\s*(?:class|function)\b/,Po=Uo(zo.exec),Qo=!zo.exec(Fo),jo=function(e){if(!Ao(e))return!1;try{return xo(Fo,wo,e),!0}catch(e){return!1}},Mo=function(e){if(!Ao(e))return!1;switch(To(e)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return Qo||!!Po(zo,Bo(e))}catch(e){return!0}};Mo.sham=!0;var Eo=!xo||Ho((function(){var e;return jo(jo.call)||!jo(Object)||!jo((function(){e=!0}))||e}))?Mo:jo,Do=Eo,Oo=Ae,_o=TypeError,qo=function(e){if(Do(e))return e;throw _o(Oo(e)+" is not a constructor")},$o=Se,ec=qo,tc=se("species"),ic=function(e,t){var i,n=$o(e).constructor;return void 0===n||null==(i=$o(n)[tc])?t:ec(i)},nc=Se,lc=me,oc=Ll,cc=el,ac=ko,rc=c,dc=w,sc=A,uc=ic,Zc=function(e,t){if(nc(e),lc(t)&&t.constructor===e)return t;var i=oc.f(e);return(0,i.resolve)(t),i.promise},hc=Oi,bc=ac&&ac.prototype;if(cc({target:"Promise",proto:!0,real:!0,forced:!!ac&&rc((function(){bc.finally.call({then:function(){}},(function(){}))}))},{finally:function(e){var t=uc(this,dc("Promise")),i=sc(e);return this.then(i?function(i){return Zc(t,e()).then((function(){return i}))}:e,i?function(i){return Zc(t,e()).then((function(){throw i}))}:e)}}),sc(ac)){var mc=dc("Promise").prototype.finally;bc.finally!==mc&&hc(bc,"finally",mc,{unsafe:!0})}var pc=Et.exports,Ic=Ze,gc=function(e,t,i){return i.get&&pc(i.get,t,{getter:!0}),i.set&&pc(i.set,t,{setter:!0}),Ic.f(e,t,i)},Gc=Se,yc=function(){var e=Gc(this),t="";return e.hasIndices&&(t+="d"),e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.dotAll&&(t+="s"),e.unicode&&(t+="u"),e.unicodeSets&&(t+="v"),e.sticky&&(t+="y"),t},Xc=he,Vc=gc,Wc=yc,Cc=c,Rc=l.RegExp,Sc=Rc.prototype,vc=Xc&&Cc((function(){var e=!0;try{Rc(".","d")}catch(t){e=!1}var t={},i="",n=e?"dgimsy":"gimsy",l=function(e,n){Object.defineProperty(t,e,{get:function(){return i+=n,!0}})},o={dotAll:"s",global:"g",ignoreCase:"i",multiline:"m",sticky:"y"};for(var c in e&&(o.hasIndices="d"),o)l(c,o[c]);return Object.getOwnPropertyDescriptor(Sc,"flags").get.call(t)!==n||i!==n}));vc&&Vc(Sc,"flags",{configurable:!0,get:Wc});var fc,Yc,Kc,Nc=!c((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype})),Jc=X,Lc=A,kc=g,Uc=Nc,Hc=mi("IE_PROTO"),Ac=Object,Tc=Ac.prototype,Bc=Uc?Ac.getPrototypeOf:function(e){var t=kc(e);if(Jc(t,Hc))return t[Hc];var i=t.constructor;return Lc(i)&&t instanceof i?i.prototype:t instanceof Ac?Tc:null},Fc=c,wc=A,xc=Bc,zc=Oi,Pc=se("iterator"),Qc=!1;[].keys&&("next"in(Kc=[].keys())?(Yc=xc(xc(Kc)))!==Object.prototype&&(fc=Yc):Qc=!0);var jc=null==fc||Fc((function(){var e={};return fc[Pc].call(e)!==e}));jc&&(fc={}),wc(fc[Pc])||zc(fc,Pc,(function(){return this}));var Mc,Ec,Dc={IteratorPrototype:fc,BUGGY_SAFARI_ITERATORS:Qc},Oc=Ze.f,_c=X,qc=se("toStringTag"),$c=function(e,t,i){e&&!i&&(e=e.prototype),e&&!_c(e,qc)&&Oc(e,qc,{configurable:!0,value:t})},ea=Dc.IteratorPrototype,ta=Cl,ia=Wt,na=$c,la=Fl,oa=function(){return this},ca=function(e,t,i,n){var l=t+" Iterator";return e.prototype=ta(ea,{next:ia(+!n,i)}),na(e,l,!1),la[l]=oa,e},aa=ql,ra=String,da=function(e){if("Symbol"===aa(e))throw TypeError("Cannot convert a Symbol value to a string");return ra(e)},sa=me,ua=vt,Za=se("match"),ha=Ye,ba=X,ma=Ke,pa=yc,Ia=RegExp.prototype,ga=h,Ga=nn,ya=da,Xa=m,Va=ga("".charAt),Wa=ga("".charCodeAt),Ca=ga("".slice),Ra=function(e){return function(t,i){var n,l,o=ya(Xa(t)),c=Ga(i),a=o.length;return c<0||c>=a?e?"":void 0:(n=Wa(o,c))<55296||n>56319||c+1===a||(l=Wa(o,c+1))<56320||l>57343?e?Va(o,c):n:e?Ca(o,c,c+2):l-56320+(n-55296<<10)+65536}},Sa={codeAt:Ra(!1),charAt:Ra(!0)},va=Sa.charAt,fa=function(e,t,i){return t+(i?va(e,t).length:1)},Ya=c,Ka=l.RegExp,Na=Ya((function(){var e=Ka("a","y");return e.lastIndex=2,null!=e.exec("abcd")})),Ja=Na||Ya((function(){return!Ka("a","y").sticky})),La={BROKEN_CARET:Na||Ya((function(){var e=Ka("^r","gy");return e.lastIndex=2,null!=e.exec("str")})),MISSED_STICKY:Ja,UNSUPPORTED_Y:Na},ka=c,Ua=l.RegExp,Ha=ka((function(){var e=Ua(".","s");return!(e.dotAll&&e.exec("\n")&&"s"===e.flags)})),Aa=c,Ta=l.RegExp,Ba=Aa((function(){var e=Ta("(?<a>b)","g");return"b"!==e.exec("b").groups.a||"bc"!=="b".replace(e,"$<a>c")})),Fa=Ye,wa=h,xa=da,za=yc,Pa=La,Qa=W.exports,ja=Cl,Ma=Li.get,Ea=Ha,Da=Ba,Oa=Qa("native-string-replace",String.prototype.replace),_a=RegExp.prototype.exec,qa=_a,$a=wa("".charAt),er=wa("".indexOf),tr=wa("".replace),ir=wa("".slice),nr=(Ec=/b*/g,Fa(_a,Mc=/a/,"a"),Fa(_a,Ec,"a"),0!==Mc.lastIndex||0!==Ec.lastIndex),lr=Pa.BROKEN_CARET,or=void 0!==/()??/.exec("")[1];(nr||or||lr||Ea||Da)&&(qa=function(e){var t,i,n,l,o,c,a,r=this,d=Ma(r),s=xa(e),u=d.raw;if(u)return u.lastIndex=r.lastIndex,t=Fa(qa,u,s),r.lastIndex=u.lastIndex,t;var Z=d.groups,h=lr&&r.sticky,b=Fa(za,r),m=r.source,p=0,I=s;if(h&&(b=tr(b,"y",""),-1===er(b,"g")&&(b+="g"),I=ir(s,r.lastIndex),r.lastIndex>0&&(!r.multiline||r.multiline&&"\n"!==$a(s,r.lastIndex-1))&&(m="(?: "+m+")",I=" "+I,p++),i=new RegExp("^(?:"+m+")",b)),or&&(i=new RegExp("^"+m+"$(?!\\s)",b)),nr&&(n=r.lastIndex),l=Fa(_a,h?i:r,I),h?l?(l.input=ir(l.input,p),l[0]=ir(l[0],p),l.index=r.lastIndex,r.lastIndex+=l[0].length):r.lastIndex=0:nr&&l&&(r.lastIndex=r.global?l.index+l[0].length:n),or&&l&&l.length>1&&Fa(Oa,l[0],i,(function(){for(o=1;o<arguments.length-2;o++)void 0===arguments[o]&&(l[o]=void 0)})),l&&Z)for(l.groups=c=ja(null),o=0;o<Z.length;o++)c[(a=Z[o])[0]]=l[a[1]];return l});var cr=qa,ar=Ye,rr=Se,dr=A,sr=vt,ur=cr,Zr=TypeError,hr=function(e,t){var i=e.exec;if(dr(i)){var n=ar(i,e,t);return null!==n&&rr(n),n}if("RegExp"===sr(e))return ar(ur,e,t);throw Zr("RegExp#exec called on incompatible receiver")},br=el,mr=Ye,pr=h,Ir=ca,gr=m,Gr=sn,yr=da,Xr=Se,Vr=function(e){var t;return sa(e)&&(void 0!==(t=e[Za])?!!t:"RegExp"==ua(e))},Wr=function(e){var t=e.flags;return void 0!==t||"flags"in Ia||ba(e,"flags")||!ma(Ia,e)?t:ha(pa,e)},Cr=ze,Rr=Oi,Sr=c,vr=ic,fr=fa,Yr=hr,Kr=Li,Nr=se("matchAll"),Jr=Kr.set,Lr=Kr.getterFor("RegExp String Iterator"),kr=RegExp.prototype,Ur=TypeError,Hr=pr("".indexOf),Ar=pr("".matchAll),Tr=!!Ar&&!Sr((function(){Ar("a",/./)})),Br=Ir((function(e,t,i,n){Jr(this,{type:"RegExp String Iterator",regexp:e,string:t,global:i,unicode:n,done:!1})}),"RegExp String",(function(){var e=Lr(this);if(e.done)return{value:void 0,done:!0};var t=e.regexp,i=e.string,n=Yr(t,i);return null===n?{value:void 0,done:e.done=!0}:e.global?(""===yr(n[0])&&(t.lastIndex=fr(i,Gr(t.lastIndex),e.unicode)),{value:n,done:!1}):(e.done=!0,{value:n,done:!1})})),Fr=function(e){var t,i,n,l=Xr(this),o=yr(e),c=vr(l,RegExp),a=yr(Wr(l));return t=new c(c===RegExp?l.source:l,a),i=!!~Hr(a,"g"),n=!!~Hr(a,"u"),t.lastIndex=Gr(l.lastIndex),new Br(t,o,i,n)};br({target:"String",proto:!0,forced:Tr},{matchAll:function(e){var t,i,n,l=gr(this);if(null!=e){if(Vr(e)&&(t=yr(gr(Wr(e))),!~Hr(t,"g")))throw Ur("`.matchAll` does not allow non-global regexes");if(Tr)return Ar(l,e);if(n=Cr(e,Nr))return mr(n,e,l)}else if(Tr)return Ar(l,e);return i=yr(l),new RegExp(e,"g")[Nr](i)}}),Nr in kr||Rr(kr,Nr,Fr);var wr=a,xr=Function.prototype,zr=xr.apply,Pr=xr.call,Qr="object"==typeof Reflect&&Reflect.apply||(wr?Pr.bind(zr):function(){return Pr.apply(zr,arguments)});el({target:"RegExp",proto:!0,forced:/./.exec!==cr},{exec:cr});var jr=h,Mr=Oi,Er=cr,Dr=c,Or=se,_r=Mt,qr=Or("species"),$r=RegExp.prototype,ed=h,td=g,id=Math.floor,nd=ed("".charAt),ld=ed("".replace),od=ed("".slice),cd=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,ad=/\$([$&'`]|\d{1,2})/g,rd=Qr,dd=Ye,sd=h,ud=function(e,t,i,n){var l=Or(e),o=!Dr((function(){var t={};return t[l]=function(){return 7},7!=""[e](t)})),c=o&&!Dr((function(){var t=!1,i=/a/;return"split"===e&&((i={}).constructor={},i.constructor[qr]=function(){return i},i.flags="",i[l]=/./[l]),i.exec=function(){return t=!0,null},i[l](""),!t}));if(!o||!c||i){var a=jr(/./[l]),r=t(l,""[e],(function(e,t,i,n,l){var c=jr(e),r=t.exec;return r===Er||r===$r.exec?o&&!l?{done:!0,value:a(t,i,n)}:{done:!0,value:c(i,t,n)}:{done:!1}}));Mr(String.prototype,e,r[0]),Mr($r,l,r[1])}n&&_r($r[l],"sham",!0)},Zd=c,hd=Se,bd=A,md=nn,pd=sn,Id=da,gd=m,Gd=fa,yd=ze,Xd=function(e,t,i,n,l,o){var c=i+e.length,a=n.length,r=ad;return void 0!==l&&(l=td(l),r=cd),ld(o,r,(function(o,r){var d;switch(nd(r,0)){case"$":return"$";case"&":return e;case"`":return od(t,0,i);case"'":return od(t,c);case"<":d=l[od(r,1,-1)];break;default:var s=+r;if(0===s)return o;if(s>a){var u=id(s/10);return 0===u?o:u<=a?void 0===n[u-1]?nd(r,1):n[u-1]+nd(r,1):o}d=n[s-1]}return void 0===d?"":d}))},Vd=hr,Wd=se("replace"),Cd=Math.max,Rd=Math.min,Sd=sd([].concat),vd=sd([].push),fd=sd("".indexOf),Yd=sd("".slice),Kd="$0"==="a".replace(/./,"$0"),Nd=!!/./[Wd]&&""===/./[Wd]("a","$0");ud("replace",(function(e,t,i){var n=Nd?"$":"$0";return[function(e,i){var n=gd(this),l=null==e?void 0:yd(e,Wd);return l?dd(l,e,n,i):dd(t,Id(n),e,i)},function(e,l){var o=hd(this),c=Id(e);if("string"==typeof l&&-1===fd(l,n)&&-1===fd(l,"$<")){var a=i(t,o,c,l);if(a.done)return a.value}var r=bd(l);r||(l=Id(l));var d=o.global;if(d){var s=o.unicode;o.lastIndex=0}for(var u=[];;){var Z=Vd(o,c);if(null===Z)break;if(vd(u,Z),!d)break;""===Id(Z[0])&&(o.lastIndex=Gd(c,pd(o.lastIndex),s))}for(var h,b="",m=0,p=0;p<u.length;p++){for(var I=Id((Z=u[p])[0]),g=Cd(Rd(md(Z.index),c.length),0),G=[],y=1;y<Z.length;y++)vd(G,void 0===(h=Z[y])?h:String(h));var X=Z.groups;if(r){var V=Sd([I],G,g,c);void 0!==X&&vd(V,X);var W=Id(rd(l,void 0,V))}else W=Xd(I,c,g,G,X,l);g>=m&&(b+=Yd(c,m,g)+W,m=g+I.length)}return b+Yd(c,m)}]}),!!Zd((function(){var e=/./;return e.exec=function(){var e=[];return e.groups={a:"7"},e},"7"!=="".replace(e,"$<a>")}))||!Kd||Nd);var Jd={exports:{}},Ld=se("iterator"),kd=!1;try{var Ud=0,Hd={next:function(){return{done:!!Ud++}},return:function(){kd=!0}};Hd[Ld]=function(){return this},Array.from(Hd,(function(){throw 2}))}catch(e){}var Ad,Td,Bd,Fd="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView,wd=A,xd=String,zd=TypeError,Pd=h,Qd=Se,jd=function(e){if("object"==typeof e||wd(e))return e;throw zd("Can't set "+xd(e)+" as a prototype")},Md=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,i={};try{(e=Pd(Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set))(i,[]),t=i instanceof Array}catch(e){}return function(i,n){return Qd(i),jd(n),t?e(i,n):i.__proto__=n,i}}():void 0),Ed=Fd,Dd=he,Od=l,_d=A,qd=me,$d=X,es=ql,ts=Ae,is=Mt,ns=Oi,ls=Ze.f,os=Ke,cs=Bc,as=Md,rs=se,ds=H,ss=Li.enforce,us=Li.get,Zs=Od.Int8Array,hs=Zs&&Zs.prototype,bs=Od.Uint8ClampedArray,ms=bs&&bs.prototype,ps=Zs&&cs(Zs),Is=hs&&cs(hs),gs=Object.prototype,Gs=Od.TypeError,ys=rs("toStringTag"),Xs=ds("TYPED_ARRAY_TAG"),Vs=Ed&&!!as&&"Opera"!==es(Od.opera),Ws=!1,Cs={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},Rs={BigInt64Array:8,BigUint64Array:8},Ss=function(e){var t=cs(e);if(qd(t)){var i=us(t);return i&&$d(i,"TypedArrayConstructor")?i.TypedArrayConstructor:Ss(t)}},vs=function(e){if(!qd(e))return!1;var t=es(e);return $d(Cs,t)||$d(Rs,t)};for(Ad in Cs)(Bd=(Td=Od[Ad])&&Td.prototype)?ss(Bd).TypedArrayConstructor=Td:Vs=!1;for(Ad in Rs)(Bd=(Td=Od[Ad])&&Td.prototype)&&(ss(Bd).TypedArrayConstructor=Td);if((!Vs||!_d(ps)||ps===Function.prototype)&&(ps=function(){throw Gs("Incorrect invocation")},Vs))for(Ad in Cs)Od[Ad]&&as(Od[Ad],ps);if((!Vs||!Is||Is===gs)&&(Is=ps.prototype,Vs))for(Ad in Cs)Od[Ad]&&as(Od[Ad].prototype,Is);if(Vs&&cs(ms)!==Is&&as(ms,Is),Dd&&!$d(Is,ys))for(Ad in Ws=!0,ls(Is,ys,{get:function(){return qd(this)?this[Xs]:void 0}}),Cs)Od[Ad]&&is(Od[Ad],Xs,Ad);var fs={NATIVE_ARRAY_BUFFER_VIEWS:Vs,TYPED_ARRAY_TAG:Ws&&Xs,aTypedArray:function(e){if(vs(e))return e;throw Gs("Target is not a typed array")},aTypedArrayConstructor:function(e){if(_d(e)&&(!as||os(ps,e)))return e;throw Gs(ts(e)+" is not a typed array constructor")},exportTypedArrayMethod:function(e,t,i,n){if(Dd){if(i)for(var l in Cs){var o=Od[l];if(o&&$d(o.prototype,e))try{delete o.prototype[e]}catch(i){try{o.prototype[e]=t}catch(e){}}}Is[e]&&!i||ns(Is,e,i?t:Vs&&hs[e]||t,n)}},exportTypedArrayStaticMethod:function(e,t,i){var n,l;if(Dd){if(as){if(i)for(n in Cs)if((l=Od[n])&&$d(l,e))try{delete l[e]}catch(e){}if(ps[e]&&!i)return;try{return ns(ps,e,i?t:Vs&&ps[e]||t)}catch(e){}}for(n in Cs)!(l=Od[n])||l[e]&&!i||ns(l,e,t)}},getTypedArrayConstructor:Ss,isView:function(e){if(!qd(e))return!1;var t=es(e);return"DataView"===t||$d(Cs,t)||$d(Rs,t)},isTypedArray:vs,TypedArray:ps,TypedArrayPrototype:Is},Ys=l,Ks=c,Ns=function(e,t){if(!t&&!kd)return!1;var i=!1;try{var n={};n[Ld]=function(){return{next:function(){return{done:i=!0}}}},e(n)}catch(e){}return i},Js=fs.NATIVE_ARRAY_BUFFER_VIEWS,Ls=Ys.ArrayBuffer,ks=Ys.Int8Array,Us=!Js||!Ks((function(){ks(1)}))||!Ks((function(){new ks(-1)}))||!Ns((function(e){new ks,new ks(null),new ks(1.5),new ks(e)}),!0)||Ks((function(){return 1!==new ks(new Ls(2),1,void 0).length})),Hs=Oi,As=function(e,t,i){for(var n in t)Hs(e,n,t[n],i);return e},Ts=Ke,Bs=TypeError,Fs=function(e,t){if(Ts(t,e))return e;throw Bs("Incorrect invocation")},ws=nn,xs=sn,zs=RangeError,Ps=function(e){if(void 0===e)return 0;var t=ws(e),i=xs(t);if(t!==i)throw zs("Wrong length or index");return i},Qs=Array,js=Math.abs,Ms=Math.pow,Es=Math.floor,Ds=Math.log,Os=Math.LN2,_s={pack:function(e,t,i){var n,l,o,c=Qs(i),a=8*i-t-1,r=(1<<a)-1,d=r>>1,s=23===t?Ms(2,-24)-Ms(2,-77):0,u=e<0||0===e&&1/e<0?1:0,Z=0;for((e=js(e))!=e||e===1/0?(l=e!=e?1:0,n=r):(n=Es(Ds(e)/Os),e*(o=Ms(2,-n))<1&&(n--,o*=2),(e+=n+d>=1?s/o:s*Ms(2,1-d))*o>=2&&(n++,o/=2),n+d>=r?(l=0,n=r):n+d>=1?(l=(e*o-1)*Ms(2,t),n+=d):(l=e*Ms(2,d-1)*Ms(2,t),n=0));t>=8;)c[Z++]=255&l,l/=256,t-=8;for(n=n<<t|l,a+=t;a>0;)c[Z++]=255&n,n/=256,a-=8;return c[--Z]|=128*u,c},unpack:function(e,t){var i,n=e.length,l=8*n-t-1,o=(1<<l)-1,c=o>>1,a=l-7,r=n-1,d=e[r--],s=127&d;for(d>>=7;a>0;)s=256*s+e[r--],a-=8;for(i=s&(1<<-a)-1,s>>=-a,a+=t;a>0;)i=256*i+e[r--],a-=8;if(0===s)s=1-c;else{if(s===o)return i?NaN:d?-1/0:1/0;i+=Ms(2,t),s-=c}return(d?-1:1)*i*Ms(2,s-t)}},qs=g,$s=an,eu=Zn,tu=function(e){for(var t=qs(this),i=eu(t),n=arguments.length,l=$s(n>1?arguments[1]:void 0,i),o=n>2?arguments[2]:void 0,c=void 0===o?i:$s(o,i);c>l;)t[l++]=e;return t},iu=lt,nu=Ze,lu=Wt,ou=function(e,t,i){var n=iu(t);n in e?nu.f(e,n,lu(0,i)):e[n]=i},cu=an,au=Zn,ru=ou,du=Array,su=Math.max,uu=function(e,t,i){for(var n=au(e),l=cu(t,n),o=cu(void 0===i?n:i,n),c=du(su(o-l,0)),a=0;l<o;l++,a++)ru(c,a,e[l]);return c.length=a,c},Zu=l,hu=h,bu=he,mu=Fd,pu=ei,Iu=Mt,gu=As,Gu=c,yu=Fs,Xu=nn,Vu=sn,Wu=Ps,Cu=_s,Ru=Bc,Su=Md,vu=_i.f,fu=Ze.f,Yu=tu,Ku=uu,Nu=$c,Ju=pu.PROPER,Lu=pu.CONFIGURABLE,ku=Li.get,Uu=Li.set,Hu=Zu.ArrayBuffer,Au=Hu,Tu=Au&&Au.prototype,Bu=Zu.DataView,Fu=Bu&&Bu.prototype,wu=Object.prototype,xu=Zu.Array,zu=Zu.RangeError,Pu=hu(Yu),Qu=hu([].reverse),ju=Cu.pack,Mu=Cu.unpack,Eu=function(e){return[255&e]},Du=function(e){return[255&e,e>>8&255]},Ou=function(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]},_u=function(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]},qu=function(e){return ju(e,23,4)},$u=function(e){return ju(e,52,8)},eZ=function(e,t){fu(e.prototype,t,{get:function(){return ku(this)[t]}})},tZ=function(e,t,i,n){var l=Wu(i),o=ku(e);if(l+t>o.byteLength)throw zu("Wrong index");var c=ku(o.buffer).bytes,a=l+o.byteOffset,r=Ku(c,a,a+t);return n?r:Qu(r)},iZ=function(e,t,i,n,l,o){var c=Wu(i),a=ku(e);if(c+t>a.byteLength)throw zu("Wrong index");for(var r=ku(a.buffer).bytes,d=c+a.byteOffset,s=n(+l),u=0;u<t;u++)r[d+u]=s[o?u:t-u-1]};if(mu){var nZ=Ju&&"ArrayBuffer"!==Hu.name;if(Gu((function(){Hu(1)}))&&Gu((function(){new Hu(-1)}))&&!Gu((function(){return new Hu,new Hu(1.5),new Hu(NaN),nZ&&!Lu})))nZ&&Lu&&Iu(Hu,"name","ArrayBuffer");else{(Au=function(e){return yu(this,Tu),new Hu(Wu(e))}).prototype=Tu;for(var lZ,oZ=vu(Hu),cZ=0;oZ.length>cZ;)(lZ=oZ[cZ++])in Au||Iu(Au,lZ,Hu[lZ]);Tu.constructor=Au}Su&&Ru(Fu)!==wu&&Su(Fu,wu);var aZ=new Bu(new Au(2)),rZ=hu(Fu.setInt8);aZ.setInt8(0,2147483648),aZ.setInt8(1,2147483649),!aZ.getInt8(0)&&aZ.getInt8(1)||gu(Fu,{setInt8:function(e,t){rZ(this,e,t<<24>>24)},setUint8:function(e,t){rZ(this,e,t<<24>>24)}},{unsafe:!0})}else Au=function(e){yu(this,Tu);var t=Wu(e);Uu(this,{bytes:Pu(xu(t),0),byteLength:t}),bu||(this.byteLength=t)},Tu=Au.prototype,Bu=function(e,t,i){yu(this,Fu),yu(e,Tu);var n=ku(e).byteLength,l=Xu(t);if(l<0||l>n)throw zu("Wrong offset");if(l+(i=void 0===i?n-l:Vu(i))>n)throw zu("Wrong length");Uu(this,{buffer:e,byteLength:i,byteOffset:l}),bu||(this.buffer=e,this.byteLength=i,this.byteOffset=l)},Fu=Bu.prototype,bu&&(eZ(Au,"byteLength"),eZ(Bu,"buffer"),eZ(Bu,"byteLength"),eZ(Bu,"byteOffset")),gu(Fu,{getInt8:function(e){return tZ(this,1,e)[0]<<24>>24},getUint8:function(e){return tZ(this,1,e)[0]},getInt16:function(e){var t=tZ(this,2,e,arguments.length>1?arguments[1]:void 0);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=tZ(this,2,e,arguments.length>1?arguments[1]:void 0);return t[1]<<8|t[0]},getInt32:function(e){return _u(tZ(this,4,e,arguments.length>1?arguments[1]:void 0))},getUint32:function(e){return _u(tZ(this,4,e,arguments.length>1?arguments[1]:void 0))>>>0},getFloat32:function(e){return Mu(tZ(this,4,e,arguments.length>1?arguments[1]:void 0),23)},getFloat64:function(e){return Mu(tZ(this,8,e,arguments.length>1?arguments[1]:void 0),52)},setInt8:function(e,t){iZ(this,1,e,Eu,t)},setUint8:function(e,t){iZ(this,1,e,Eu,t)},setInt16:function(e,t){iZ(this,2,e,Du,t,arguments.length>2?arguments[2]:void 0)},setUint16:function(e,t){iZ(this,2,e,Du,t,arguments.length>2?arguments[2]:void 0)},setInt32:function(e,t){iZ(this,4,e,Ou,t,arguments.length>2?arguments[2]:void 0)},setUint32:function(e,t){iZ(this,4,e,Ou,t,arguments.length>2?arguments[2]:void 0)},setFloat32:function(e,t){iZ(this,4,e,qu,t,arguments.length>2?arguments[2]:void 0)},setFloat64:function(e,t){iZ(this,8,e,$u,t,arguments.length>2?arguments[2]:void 0)}});Nu(Au,"ArrayBuffer"),Nu(Bu,"DataView");var dZ={ArrayBuffer:Au,DataView:Bu},sZ=me,uZ=Math.floor,ZZ=Number.isInteger||function(e){return!sZ(e)&&isFinite(e)&&uZ(e)===e},hZ=nn,bZ=RangeError,mZ=function(e){var t=hZ(e);if(t<0)throw bZ("The argument can't be less than 0");return t},pZ=RangeError,IZ=function(e,t){var i=mZ(e);if(i%t)throw pZ("Wrong offset");return i},gZ=Bl,GZ=Ye,yZ=qo,XZ=g,VZ=Zn,WZ=uo,CZ=no,RZ=Pl,SZ=fs.aTypedArrayConstructor,vZ=function(e){var t,i,n,l,o,c,a=yZ(this),r=XZ(e),d=arguments.length,s=d>1?arguments[1]:void 0,u=void 0!==s,Z=CZ(r);if(Z&&!RZ(Z))for(c=(o=WZ(r,Z)).next,r=[];!(l=GZ(c,o)).done;)r.push(l.value);for(u&&d>2&&(s=gZ(s,arguments[2])),i=VZ(r),n=new(SZ(a))(i),t=0;i>t;t++)n[t]=u?s(r[t],t):r[t];return n},fZ=vt,YZ=Array.isArray||function(e){return"Array"==fZ(e)},KZ=Eo,NZ=me,JZ=se("species"),LZ=Array,kZ=function(e){var t;return YZ(e)&&(t=e.constructor,(KZ(t)&&(t===LZ||YZ(t.prototype))||NZ(t)&&null===(t=t[JZ]))&&(t=void 0)),void 0===t?LZ:t},UZ=Bl,HZ=Jt,AZ=g,TZ=Zn,BZ=function(e,t){return new(kZ(e))(0===t?0:t)},FZ=h([].push),wZ=function(e){var t=1==e,i=2==e,n=3==e,l=4==e,o=6==e,c=7==e,a=5==e||o;return function(r,d,s,u){for(var Z,h,b=AZ(r),m=HZ(b),p=UZ(d,s),I=TZ(m),g=0,G=u||BZ,y=t?G(r,I):i||c?G(r,0):void 0;I>g;g++)if((a||g in m)&&(h=p(Z=m[g],g,b),e))if(t)y[g]=h;else if(h)switch(e){case 3:return!0;case 5:return Z;case 6:return g;case 2:FZ(y,Z)}else switch(e){case 4:return!1;case 7:FZ(y,Z)}return o?-1:n||l?l:y}},xZ={forEach:wZ(0),map:wZ(1),filter:wZ(2),some:wZ(3),every:wZ(4),find:wZ(5),findIndex:wZ(6),filterReject:wZ(7)},zZ=w,PZ=Ze,QZ=he,jZ=se("species"),MZ=A,EZ=me,DZ=Md,OZ=el,_Z=l,qZ=Ye,$Z=he,eh=Us,th=fs,ih=dZ,nh=Fs,lh=Wt,oh=Mt,ch=ZZ,ah=sn,rh=Ps,dh=IZ,sh=lt,uh=X,Zh=ql,hh=me,bh=Ue,mh=Cl,ph=Ke,Ih=Md,gh=_i.f,Gh=vZ,yh=xZ.forEach,Xh=function(e){var t=zZ(e),i=PZ.f;QZ&&t&&!t[jZ]&&i(t,jZ,{configurable:!0,get:function(){return this}})},Vh=Ze,Wh=gt,Ch=function(e,t,i){var n,l;return DZ&&MZ(n=t.constructor)&&n!==i&&EZ(l=n.prototype)&&l!==i.prototype&&DZ(e,l),e},Rh=Li.get,Sh=Li.set,vh=Li.enforce,fh=Vh.f,Yh=Wh.f,Kh=Math.round,Nh=_Z.RangeError,Jh=ih.ArrayBuffer,Lh=Jh.prototype,kh=ih.DataView,Uh=th.NATIVE_ARRAY_BUFFER_VIEWS,Hh=th.TYPED_ARRAY_TAG,Ah=th.TypedArray,Th=th.TypedArrayPrototype,Bh=th.aTypedArrayConstructor,Fh=th.isTypedArray,wh=function(e,t){Bh(e);for(var i=0,n=t.length,l=new e(n);n>i;)l[i]=t[i++];return l},xh=function(e,t){fh(e,t,{get:function(){return Rh(this)[t]}})},zh=function(e){var t;return ph(Lh,e)||"ArrayBuffer"==(t=Zh(e))||"SharedArrayBuffer"==t},Ph=function(e,t){return Fh(e)&&!bh(t)&&t in e&&ch(+t)&&t>=0},Qh=function(e,t){return t=sh(t),Ph(e,t)?lh(2,e[t]):Yh(e,t)},jh=function(e,t,i){return t=sh(t),!(Ph(e,t)&&hh(i)&&uh(i,"value"))||uh(i,"get")||uh(i,"set")||i.configurable||uh(i,"writable")&&!i.writable||uh(i,"enumerable")&&!i.enumerable?fh(e,t,i):(e[t]=i.value,e)};$Z?(Uh||(Wh.f=Qh,Vh.f=jh,xh(Th,"buffer"),xh(Th,"byteOffset"),xh(Th,"byteLength"),xh(Th,"length")),OZ({target:"Object",stat:!0,forced:!Uh},{getOwnPropertyDescriptor:Qh,defineProperty:jh}),Jd.exports=function(e,t,i){var n=e.match(/\d+$/)[0]/8,l=e+(i?"Clamped":"")+"Array",o="get"+e,c="set"+e,a=_Z[l],r=a,d=r&&r.prototype,s={},u=function(e,t){fh(e,t,{get:function(){return function(e,t){var i=Rh(e);return i.view[o](t*n+i.byteOffset,!0)}(this,t)},set:function(e){return function(e,t,l){var o=Rh(e);i&&(l=(l=Kh(l))<0?0:l>255?255:255&l),o.view[c](t*n+o.byteOffset,l,!0)}(this,t,e)},enumerable:!0})};Uh?eh&&(r=t((function(e,t,i,l){return nh(e,d),Ch(hh(t)?zh(t)?void 0!==l?new a(t,dh(i,n),l):void 0!==i?new a(t,dh(i,n)):new a(t):Fh(t)?wh(r,t):qZ(Gh,r,t):new a(rh(t)),e,r)})),Ih&&Ih(r,Ah),yh(gh(a),(function(e){e in r||oh(r,e,a[e])})),r.prototype=d):(r=t((function(e,t,i,l){nh(e,d);var o,c,a,s=0,Z=0;if(hh(t)){if(!zh(t))return Fh(t)?wh(r,t):qZ(Gh,r,t);o=t,Z=dh(i,n);var h=t.byteLength;if(void 0===l){if(h%n)throw Nh("Wrong length");if((c=h-Z)<0)throw Nh("Wrong length")}else if((c=ah(l)*n)+Z>h)throw Nh("Wrong length");a=c/n}else a=rh(t),o=new Jh(c=a*n);for(Sh(e,{buffer:o,byteOffset:Z,byteLength:c,length:a,view:new kh(o)});s<a;)u(e,s++)})),Ih&&Ih(r,Ah),d=r.prototype=mh(Th)),d.constructor!==r&&oh(d,"constructor",r),vh(d).TypedArrayConstructor=r,Hh&&oh(d,Hh,l);var Z=r!=a;s[l]=r,OZ({global:!0,constructor:!0,forced:Z,sham:!Uh},s),"BYTES_PER_ELEMENT"in r||oh(r,"BYTES_PER_ELEMENT",n),"BYTES_PER_ELEMENT"in d||oh(d,"BYTES_PER_ELEMENT",n),Xh(l)}):Jd.exports=function(){},(0,Jd.exports)("Float32",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Jd.exports)("Float64",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Jd.exports)("Int8",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Jd.exports)("Int16",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Jd.exports)("Int32",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Jd.exports)("Uint8",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Jd.exports)("Uint8",(function(e){return function(t,i,n){return e(this,t,i,n)}}),!0),(0,Jd.exports)("Uint16",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Jd.exports)("Uint32",(function(e){return function(t,i,n){return e(this,t,i,n)}}));var Mh=tt,Eh=TypeError,Dh=tu,Oh=function(e){var t=Mh(e,"number");if("number"==typeof t)throw Eh("Can't convert number to bigint");return BigInt(t)},_h=ql,qh=Ye,$h=c,eb=fs.aTypedArray,tb=fs.exportTypedArrayMethod,ib=h("".slice);tb("fill",(function(e){var t=arguments.length;eb(this);var i="Big"===ib(_h(this),0,3)?Oh(e):+e;return qh(Dh,this,i,t>1?arguments[1]:void 0,t>2?arguments[2]:void 0)}),$h((function(){var e=0;return new Int8Array(2).fill({valueOf:function(){return e++}}),1!==e}))),(0,fs.exportTypedArrayStaticMethod)("from",vZ,Us);var nb=fs.aTypedArrayConstructor;(0,fs.exportTypedArrayStaticMethod)("of",(function(){for(var e=0,t=arguments.length,i=new(nb(this))(t);t>e;)i[e]=arguments[e++];return i}),Us);var lb=l,ob=Ye,cb=fs,ab=Zn,rb=IZ,db=g,sb=c,ub=lb.RangeError,Zb=lb.Int8Array,hb=Zb&&Zb.prototype,bb=hb&&hb.set,mb=cb.aTypedArray,pb=cb.exportTypedArrayMethod,Ib=!sb((function(){var e=new Uint8ClampedArray(2);return ob(bb,e,{length:1,0:3},1),3!==e[1]})),gb=Ib&&cb.NATIVE_ARRAY_BUFFER_VIEWS&&sb((function(){var e=new Zb(2);return e.set(1),e.set("2",1),0!==e[0]||2!==e[1]}));pb("set",(function(e){mb(this);var t=rb(arguments.length>1?arguments[1]:void 0,1),i=db(e);if(Ib)return ob(bb,this,i,t);var n=this.length,l=ab(i),o=0;if(l+t>n)throw ub("Wrong length");for(;o<l;)this[t+o]=i[o++]}),!Ib||gb);var Gb=uu,yb=Math.floor,Xb=function(e,t){var i=e.length,n=yb(i/2);return i<8?Vb(e,t):Wb(e,Xb(Gb(e,0,n),t),Xb(Gb(e,n),t),t)},Vb=function(e,t){for(var i,n,l=e.length,o=1;o<l;){for(n=o,i=e[o];n&&t(e[n-1],i)>0;)e[n]=e[--n];n!==o++&&(e[n]=i)}return e},Wb=function(e,t,i,n){for(var l=t.length,o=i.length,c=0,a=0;c<l||a<o;)e[c+a]=c<l&&a<o?n(t[c],i[a])<=0?t[c++]:i[a++]:c<l?t[c++]:i[a++];return e},Cb=Xb,Rb=x.match(/firefox\/(\d+)/i),Sb=!!Rb&&+Rb[1],vb=/MSIE|Trident/.test(x),fb=x.match(/AppleWebKit\/(\d+)\./),Yb=!!fb&&+fb[1],Kb=h,Nb=c,Jb=we,Lb=Cb,kb=Sb,Ub=vb,Hb=D,Ab=Yb,Tb=fs.aTypedArray,Bb=fs.exportTypedArrayMethod,Fb=l.Uint16Array,wb=Fb&&Kb(Fb.prototype.sort),xb=!(!wb||Nb((function(){wb(new Fb(2),null)}))&&Nb((function(){wb(new Fb(2),{})}))),zb=!!wb&&!Nb((function(){if(Hb)return Hb<74;if(kb)return kb<67;if(Ub)return!0;if(Ab)return Ab<602;var e,t,i=new Fb(516),n=Array(516);for(e=0;e<516;e++)t=e%4,i[e]=515-e,n[e]=e-2*t+3;for(wb(i,(function(e,t){return(e/4|0)-(t/4|0)})),e=0;e<516;e++)if(i[e]!==n[e])return!0}));Bb("sort",(function(e){return void 0!==e&&Jb(e),zb?wb(this,e):Lb(Tb(this),function(e){return function(t,i){return void 0!==e?+e(t,i)||0:i!=i?-1:t!=t?1:0===t&&0===i?1/t>0&&1/i<0?1:-1:t>i}}(e))}),!zb||xb);var Pb=Ge("span").classList,Qb=Pb&&Pb.constructor&&Pb.constructor.prototype,jb=Qb===Object.prototype?void 0:Qb,Mb=el,Eb=Ye,Db=A,Ob=ca,_b=Bc,qb=Md,$b=$c,em=Mt,tm=Oi,im=Fl,nm=ei.PROPER,lm=ei.CONFIGURABLE,om=Dc.IteratorPrototype,cm=Dc.BUGGY_SAFARI_ITERATORS,am=se("iterator"),rm=function(){return this},dm=function(e,t,i,n,l,o,c){Ob(i,t,n);var a,r,d,s=function(e){if(e===l&&m)return m;if(!cm&&e in h)return h[e];switch(e){case"keys":case"values":case"entries":return function(){return new i(this,e)}}return function(){return new i(this)}},u=t+" Iterator",Z=!1,h=e.prototype,b=h[am]||h["@@iterator"]||l&&h[l],m=!cm&&b||s(l),p="Array"==t&&h.entries||b;if(p&&(a=_b(p.call(new e)))!==Object.prototype&&a.next&&(_b(a)!==om&&(qb?qb(a,om):Db(a[am])||tm(a,am,rm)),$b(a,u,!0)),nm&&"values"==l&&b&&"values"!==b.name&&(lm?em(h,"name","values"):(Z=!0,m=function(){return Eb(b,this)})),l)if(r={values:s("values"),keys:o?m:s("keys"),entries:s("entries")},c)for(d in r)(cm||Z||!(d in h))&&tm(h,d,r[d]);else Mb({target:t,proto:!0,forced:cm||Z},r);return h[am]!==m&&tm(h,am,m,{name:l}),im[t]=m,r},sm=Ut,um=Kl,Zm=Fl,hm=Li,bm=Ze.f,mm=dm,pm=he,Im=hm.set,gm=hm.getterFor("Array Iterator"),Gm=mm(Array,"Array",(function(e,t){Im(this,{type:"Array Iterator",target:sm(e),index:0,kind:t})}),(function(){var e=gm(this),t=e.target,i=e.kind,n=e.index++;return!t||n>=t.length?(e.target=void 0,{value:void 0,done:!0}):"keys"==i?{value:n,done:!1}:"values"==i?{value:t[n],done:!1}:{value:[n,t[n]],done:!1}}),"values"),ym=Zm.Arguments=Zm.Array;if(um("keys"),um("values"),um("entries"),pm&&"values"!==ym.name)try{bm(ym,"name",{value:"values"})}catch(e){}var Xm=l,Vm={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},Wm=jb,Cm=Gm,Rm=Mt,Sm=se,vm=Sm("iterator"),fm=Sm("toStringTag"),Ym=Cm.values,Km=function(e,t){if(e){if(e[vm]!==Ym)try{Rm(e,vm,Ym)}catch(t){e[vm]=Ym}if(e[fm]||Rm(e,fm,t),Vm[t])for(var i in Cm)if(e[i]!==Cm[i])try{Rm(e,i,Cm[i])}catch(t){e[i]=Cm[i]}}};for(var Nm in Vm)Km(Xm[Nm]&&Xm[Nm].prototype,Nm);Km(Wm,"DOMTokenList");var Jm,Lm,km,Um,Hm=h([].slice),Am=TypeError,Tm=function(e,t){if(e<t)throw Am("Not enough arguments");return e},Bm=/(?:ipad|iphone|ipod).*applewebkit/i.test(x),Fm="process"==vt(l.process),wm=l,xm=Qr,zm=Bl,Pm=A,Qm=X,jm=c,Mm=Zl,Em=Hm,Dm=Ge,Om=Tm,_m=Bm,qm=Fm,$m=wm.setImmediate,ep=wm.clearImmediate,tp=wm.process,ip=wm.Dispatch,np=wm.Function,lp=wm.MessageChannel,op=wm.String,cp=0,ap={};try{Jm=wm.location}catch(e){}var rp=function(e){if(Qm(ap,e)){var t=ap[e];delete ap[e],t()}},dp=function(e){return function(){rp(e)}},sp=function(e){rp(e.data)},up=function(e){wm.postMessage(op(e),Jm.protocol+"//"+Jm.host)};$m&&ep||($m=function(e){Om(arguments.length,1);var t=Pm(e)?e:np(e),i=Em(arguments,1);return ap[++cp]=function(){xm(t,void 0,i)},Lm(cp),cp},ep=function(e){delete ap[e]},qm?Lm=function(e){tp.nextTick(dp(e))}:ip&&ip.now?Lm=function(e){ip.now(dp(e))}:lp&&!_m?(Um=(km=new lp).port2,km.port1.onmessage=sp,Lm=zm(Um.postMessage,Um)):wm.addEventListener&&Pm(wm.postMessage)&&!wm.importScripts&&Jm&&"file:"!==Jm.protocol&&!jm(up)?(Lm=up,wm.addEventListener("message",sp,!1)):Lm="onreadystatechange"in Dm("script")?function(e){Mm.appendChild(Dm("script")).onreadystatechange=function(){Mm.removeChild(this),rp(e)}}:function(e){setTimeout(dp(e),0)});var Zp={set:$m,clear:ep},hp=Zp.clear;el({global:!0,bind:!0,enumerable:!0,forced:l.clearImmediate!==hp},{clearImmediate:hp});var bp=Zp.set;el({global:!0,bind:!0,enumerable:!0,forced:l.setImmediate!==bp},{setImmediate:bp});var mp=Sa.charAt,pp=da,Ip=Li,gp=dm,Gp=Ip.set,yp=Ip.getterFor("String Iterator");gp(String,"String",(function(e){Gp(this,{type:"String Iterator",string:pp(e),index:0})}),(function(){var e,t=yp(this),i=t.string,n=t.index;return n>=i.length?{value:void 0,done:!0}:(e=mp(i,n),t.index+=e.length,{value:e,done:!1})}));var Xp=c,Vp=se("iterator"),Wp=!Xp((function(){var e=new URL("b?a=1&b=2&c=3","http://a"),t=e.searchParams,i="";return e.pathname="c%20d",t.forEach((function(e,n){t.delete("b"),i+=n+e})),!t.sort||"http://a/c%20d?a=1&c=3"!==e.href||"3"!==t.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!t[Vp]||"a"!==new URL("https://a@b").username||"b"!==new URLSearchParams(new URLSearchParams("a=b")).get("a")||"xn--e1aybc"!==new URL("http://тест").host||"#%D0%B1"!==new URL("http://a#б").hash||"a1c3"!==i||"x"!==new URL("http://x",void 0).host})),Cp=he,Rp=h,Sp=Ye,vp=c,fp=ll,Yp=vn,Kp=Gt,Np=g,Jp=Jt,Lp=Object.assign,kp=Object.defineProperty,Up=Rp([].concat),Hp=!Lp||vp((function(){if(Cp&&1!==Lp({b:1},Lp(kp({},"a",{enumerable:!0,get:function(){kp(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},i=Symbol(),n="abcdefghijklmnopqrst";return e[i]=7,n.split("").forEach((function(e){t[e]=e})),7!=Lp({},e)[i]||fp(Lp({},t)).join("")!=n}))?function(e,t){for(var i=Np(e),n=arguments.length,l=1,o=Yp.f,c=Kp.f;n>l;)for(var a,r=Jp(arguments[l++]),d=o?Up(fp(r),o(r)):fp(r),s=d.length,u=0;s>u;)a=d[u++],Cp&&!Sp(c,r,a)||(i[a]=r[a]);return i}:Lp,Ap=Se,Tp=mo,Bp=Bl,Fp=Ye,wp=g,xp=function(e,t,i,n){try{return n?t(Ap(i)[0],i[1]):t(i)}catch(t){Tp(e,"throw",t)}},zp=Pl,Pp=Eo,Qp=Zn,jp=ou,Mp=uo,Ep=no,Dp=Array,Op=h,_p=/[^\0-\u007E]/,qp=/[.\u3002\uFF0E\uFF61]/g,$p="Overflow: input needs wider integers to process",eI=RangeError,tI=Op(qp.exec),iI=Math.floor,nI=String.fromCharCode,lI=Op("".charCodeAt),oI=Op([].join),cI=Op([].push),aI=Op("".replace),rI=Op("".split),dI=Op("".toLowerCase),sI=function(e){return e+22+75*(e<26)},uI=function(e,t,i){var n=0;for(e=i?iI(e/700):e>>1,e+=iI(e/t);e>455;)e=iI(e/35),n+=36;return iI(n+36*e/(e+38))},ZI=function(e){var t=[];e=function(e){for(var t=[],i=0,n=e.length;i<n;){var l=lI(e,i++);if(l>=55296&&l<=56319&&i<n){var o=lI(e,i++);56320==(64512&o)?cI(t,((1023&l)<<10)+(1023&o)+65536):(cI(t,l),i--)}else cI(t,l)}return t}(e);var i,n,l=e.length,o=128,c=0,a=72;for(i=0;i<e.length;i++)(n=e[i])<128&&cI(t,nI(n));var r=t.length,d=r;for(r&&cI(t,"-");d<l;){var s=2147483647;for(i=0;i<e.length;i++)(n=e[i])>=o&&n<s&&(s=n);var u=d+1;if(s-o>iI((2147483647-c)/u))throw eI($p);for(c+=(s-o)*u,o=s,i=0;i<e.length;i++){if((n=e[i])<o&&++c>2147483647)throw eI($p);if(n==o){for(var Z=c,h=36;;){var b=h<=a?1:h>=a+26?26:h-a;if(Z<b)break;var m=Z-b,p=36-b;cI(t,nI(sI(b+m%p))),Z=iI(m/p),h+=36}cI(t,nI(sI(Z))),a=uI(c,u,d==r),c=0,d++}}c++,o++}return oI(t,"")},hI=el,bI=l,mI=Ye,pI=h,II=he,gI=Wp,GI=Oi,yI=As,XI=$c,VI=ca,WI=Li,CI=Fs,RI=A,SI=X,vI=Bl,fI=ql,YI=Se,KI=me,NI=da,JI=Cl,LI=Wt,kI=uo,UI=no,HI=Tm,AI=Cb,TI=se("iterator"),BI=WI.set,FI=WI.getterFor("URLSearchParams"),wI=WI.getterFor("URLSearchParamsIterator"),xI=Object.getOwnPropertyDescriptor,zI=function(e){if(!II)return bI[e];var t=xI(bI,e);return t&&t.value},PI=zI("fetch"),QI=zI("Request"),jI=zI("Headers"),MI=QI&&QI.prototype,EI=jI&&jI.prototype,DI=bI.RegExp,OI=bI.TypeError,_I=bI.decodeURIComponent,qI=bI.encodeURIComponent,$I=pI("".charAt),eg=pI([].join),tg=pI([].push),ig=pI("".replace),ng=pI([].shift),lg=pI([].splice),og=pI("".split),cg=pI("".slice),ag=/\+/g,rg=Array(4),dg=function(e){return rg[e-1]||(rg[e-1]=DI("((?:%[\\da-f]{2}){"+e+"})","gi"))},sg=function(e){try{return _I(e)}catch(t){return e}},ug=function(e){var t=ig(e,ag," "),i=4;try{return _I(t)}catch(e){for(;i;)t=ig(t,dg(i--),sg);return t}},Zg=/[!'()~]|%20/g,hg={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},bg=function(e){return hg[e]},mg=function(e){return ig(qI(e),Zg,bg)},pg=VI((function(e,t){BI(this,{type:"URLSearchParamsIterator",iterator:kI(FI(e).entries),kind:t})}),"Iterator",(function(){var e=wI(this),t=e.kind,i=e.iterator.next(),n=i.value;return i.done||(i.value="keys"===t?n.key:"values"===t?n.value:[n.key,n.value]),i}),!0),Ig=function(e){this.entries=[],this.url=null,void 0!==e&&(KI(e)?this.parseObject(e):this.parseQuery("string"==typeof e?"?"===$I(e,0)?cg(e,1):e:NI(e)))};Ig.prototype={type:"URLSearchParams",bindURL:function(e){this.url=e,this.update()},parseObject:function(e){var t,i,n,l,o,c,a,r=UI(e);if(r)for(i=(t=kI(e,r)).next;!(n=mI(i,t)).done;){if(o=(l=kI(YI(n.value))).next,(c=mI(o,l)).done||(a=mI(o,l)).done||!mI(o,l).done)throw OI("Expected sequence with length 2");tg(this.entries,{key:NI(c.value),value:NI(a.value)})}else for(var d in e)SI(e,d)&&tg(this.entries,{key:d,value:NI(e[d])})},parseQuery:function(e){if(e)for(var t,i,n=og(e,"&"),l=0;l<n.length;)(t=n[l++]).length&&(i=og(t,"="),tg(this.entries,{key:ug(ng(i)),value:ug(eg(i,"="))}))},serialize:function(){for(var e,t=this.entries,i=[],n=0;n<t.length;)e=t[n++],tg(i,mg(e.key)+"="+mg(e.value));return eg(i,"&")},update:function(){this.entries.length=0,this.parseQuery(this.url.query)},updateURL:function(){this.url&&this.url.update()}};var gg=function(){CI(this,Gg);var e=arguments.length>0?arguments[0]:void 0;BI(this,new Ig(e))},Gg=gg.prototype;if(yI(Gg,{append:function(e,t){HI(arguments.length,2);var i=FI(this);tg(i.entries,{key:NI(e),value:NI(t)}),i.updateURL()},delete:function(e){HI(arguments.length,1);for(var t=FI(this),i=t.entries,n=NI(e),l=0;l<i.length;)i[l].key===n?lg(i,l,1):l++;t.updateURL()},get:function(e){HI(arguments.length,1);for(var t=FI(this).entries,i=NI(e),n=0;n<t.length;n++)if(t[n].key===i)return t[n].value;return null},getAll:function(e){HI(arguments.length,1);for(var t=FI(this).entries,i=NI(e),n=[],l=0;l<t.length;l++)t[l].key===i&&tg(n,t[l].value);return n},has:function(e){HI(arguments.length,1);for(var t=FI(this).entries,i=NI(e),n=0;n<t.length;)if(t[n++].key===i)return!0;return!1},set:function(e,t){HI(arguments.length,1);for(var i,n=FI(this),l=n.entries,o=!1,c=NI(e),a=NI(t),r=0;r<l.length;r++)(i=l[r]).key===c&&(o?lg(l,r--,1):(o=!0,i.value=a));o||tg(l,{key:c,value:a}),n.updateURL()},sort:function(){var e=FI(this);AI(e.entries,(function(e,t){return e.key>t.key?1:-1})),e.updateURL()},forEach:function(e){for(var t,i=FI(this).entries,n=vI(e,arguments.length>1?arguments[1]:void 0),l=0;l<i.length;)n((t=i[l++]).value,t.key,this)},keys:function(){return new pg(this,"keys")},values:function(){return new pg(this,"values")},entries:function(){return new pg(this,"entries")}},{enumerable:!0}),GI(Gg,TI,Gg.entries,{name:"entries"}),GI(Gg,"toString",(function(){return FI(this).serialize()}),{enumerable:!0}),XI(gg,"URLSearchParams"),hI({global:!0,constructor:!0,forced:!gI},{URLSearchParams:gg}),!gI&&RI(jI)){var yg=pI(EI.has),Xg=pI(EI.set),Vg=function(e){if(KI(e)){var t,i=e.body;if("URLSearchParams"===fI(i))return t=e.headers?new jI(e.headers):new jI,yg(t,"content-type")||Xg(t,"content-type","application/x-www-form-urlencoded;charset=UTF-8"),JI(e,{body:LI(0,NI(i)),headers:LI(0,t)})}return e};if(RI(PI)&&hI({global:!0,enumerable:!0,dontCallGetSet:!0,forced:!0},{fetch:function(e){return PI(e,arguments.length>1?Vg(arguments[1]):{})}}),RI(QI)){var Wg=function(e){return CI(this,MI),new QI(e,arguments.length>1?Vg(arguments[1]):{})};MI.constructor=Wg,Wg.prototype=MI,hI({global:!0,constructor:!0,dontCallGetSet:!0,forced:!0},{Request:Wg})}}var Cg,Rg=el,Sg=he,vg=Wp,fg=l,Yg=Bl,Kg=h,Ng=Oi,Jg=gc,Lg=Fs,kg=X,Ug=Hp,Hg=function(e){var t=wp(e),i=Pp(this),n=arguments.length,l=n>1?arguments[1]:void 0,o=void 0!==l;o&&(l=Bp(l,n>2?arguments[2]:void 0));var c,a,r,d,s,u,Z=Ep(t),h=0;if(!Z||this===Dp&&zp(Z))for(c=Qp(t),a=i?new this(c):Dp(c);c>h;h++)u=o?l(t[h],h):t[h],jp(a,h,u);else for(s=(d=Mp(t,Z)).next,a=i?new this:[];!(r=Fp(s,d)).done;h++)u=o?xp(d,l,[r.value,h],!0):r.value,jp(a,h,u);return a.length=h,a},Ag=uu,Tg=Sa.codeAt,Bg=function(e){var t,i,n=[],l=rI(aI(dI(e),qp,"."),".");for(t=0;t<l.length;t++)i=l[t],cI(n,tI(_p,i)?"xn--"+ZI(i):i);return oI(n,".")},Fg=da,wg=$c,xg=Tm,zg={URLSearchParams:gg,getState:FI},Pg=Li,Qg=Pg.set,jg=Pg.getterFor("URL"),Mg=zg.URLSearchParams,Eg=zg.getState,Dg=fg.URL,Og=fg.TypeError,_g=fg.parseInt,qg=Math.floor,$g=Math.pow,eG=Kg("".charAt),tG=Kg(/./.exec),iG=Kg([].join),nG=Kg(1..toString),lG=Kg([].pop),oG=Kg([].push),cG=Kg("".replace),aG=Kg([].shift),rG=Kg("".split),dG=Kg("".slice),sG=Kg("".toLowerCase),uG=Kg([].unshift),ZG=/[a-z]/i,hG=/[\d+-.a-z]/i,bG=/\d/,mG=/^0x/i,pG=/^[0-7]+$/,IG=/^\d+$/,gG=/^[\da-f]+$/i,GG=/[\0\t\n\r #%/:<>?@[\\\]^|]/,yG=/[\0\t\n\r #/:<>?@[\\\]^|]/,XG=/^[\u0000-\u0020]+|[\u0000-\u0020]+$/g,VG=/[\t\n\r]/g,WG=function(e){var t,i,n,l;if("number"==typeof e){for(t=[],i=0;i<4;i++)uG(t,e%256),e=qg(e/256);return iG(t,".")}if("object"==typeof e){for(t="",n=function(e){for(var t=null,i=1,n=null,l=0,o=0;o<8;o++)0!==e[o]?(l>i&&(t=n,i=l),n=null,l=0):(null===n&&(n=o),++l);return l>i&&(t=n,i=l),t}(e),i=0;i<8;i++)l&&0===e[i]||(l&&(l=!1),n===i?(t+=i?":":"::",l=!0):(t+=nG(e[i],16),i<7&&(t+=":")));return"["+t+"]"}return e},CG={},RG=Ug({},CG,{" ":1,'"':1,"<":1,">":1,"`":1}),SG=Ug({},RG,{"#":1,"?":1,"{":1,"}":1}),vG=Ug({},SG,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),fG=function(e,t){var i=Tg(e,0);return i>32&&i<127&&!kg(t,e)?e:encodeURIComponent(e)},YG={ftp:21,file:null,http:80,https:443,ws:80,wss:443},KG=function(e,t){var i;return 2==e.length&&tG(ZG,eG(e,0))&&(":"==(i=eG(e,1))||!t&&"|"==i)},NG=function(e){var t;return e.length>1&&KG(dG(e,0,2))&&(2==e.length||"/"===(t=eG(e,2))||"\\"===t||"?"===t||"#"===t)},JG=function(e){return"."===e||"%2e"===sG(e)},LG={},kG={},UG={},HG={},AG={},TG={},BG={},FG={},wG={},xG={},zG={},PG={},QG={},jG={},MG={},EG={},DG={},OG={},_G={},qG={},$G={},ey=function(e,t,i){var n,l,o,c=Fg(e);if(t){if(l=this.parse(c))throw Og(l);this.searchParams=null}else{if(void 0!==i&&(n=new ey(i,!0)),l=this.parse(c,null,n))throw Og(l);(o=Eg(new Mg)).bindURL(this),this.searchParams=o}};ey.prototype={type:"URL",parse:function(e,t,i){var n,l,o,c,a,r=this,d=t||LG,s=0,u="",Z=!1,h=!1,b=!1;for(e=Fg(e),t||(r.scheme="",r.username="",r.password="",r.host=null,r.port=null,r.path=[],r.query=null,r.fragment=null,r.cannotBeABaseURL=!1,e=cG(e,XG,"")),e=cG(e,VG,""),n=Hg(e);s<=n.length;){switch(l=n[s],d){case LG:if(!l||!tG(ZG,l)){if(t)return"Invalid scheme";d=UG;continue}u+=sG(l),d=kG;break;case kG:if(l&&(tG(hG,l)||"+"==l||"-"==l||"."==l))u+=sG(l);else{if(":"!=l){if(t)return"Invalid scheme";u="",d=UG,s=0;continue}if(t&&(r.isSpecial()!=kg(YG,u)||"file"==u&&(r.includesCredentials()||null!==r.port)||"file"==r.scheme&&!r.host))return;if(r.scheme=u,t)return void(r.isSpecial()&&YG[r.scheme]==r.port&&(r.port=null));u="","file"==r.scheme?d=jG:r.isSpecial()&&i&&i.scheme==r.scheme?d=HG:r.isSpecial()?d=FG:"/"==n[s+1]?(d=AG,s++):(r.cannotBeABaseURL=!0,oG(r.path,""),d=_G)}break;case UG:if(!i||i.cannotBeABaseURL&&"#"!=l)return"Invalid scheme";if(i.cannotBeABaseURL&&"#"==l){r.scheme=i.scheme,r.path=Ag(i.path),r.query=i.query,r.fragment="",r.cannotBeABaseURL=!0,d=$G;break}d="file"==i.scheme?jG:TG;continue;case HG:if("/"!=l||"/"!=n[s+1]){d=TG;continue}d=wG,s++;break;case AG:if("/"==l){d=xG;break}d=OG;continue;case TG:if(r.scheme=i.scheme,l==Cg)r.username=i.username,r.password=i.password,r.host=i.host,r.port=i.port,r.path=Ag(i.path),r.query=i.query;else if("/"==l||"\\"==l&&r.isSpecial())d=BG;else if("?"==l)r.username=i.username,r.password=i.password,r.host=i.host,r.port=i.port,r.path=Ag(i.path),r.query="",d=qG;else{if("#"!=l){r.username=i.username,r.password=i.password,r.host=i.host,r.port=i.port,r.path=Ag(i.path),r.path.length--,d=OG;continue}r.username=i.username,r.password=i.password,r.host=i.host,r.port=i.port,r.path=Ag(i.path),r.query=i.query,r.fragment="",d=$G}break;case BG:if(!r.isSpecial()||"/"!=l&&"\\"!=l){if("/"!=l){r.username=i.username,r.password=i.password,r.host=i.host,r.port=i.port,d=OG;continue}d=xG}else d=wG;break;case FG:if(d=wG,"/"!=l||"/"!=eG(u,s+1))continue;s++;break;case wG:if("/"!=l&&"\\"!=l){d=xG;continue}break;case xG:if("@"==l){Z&&(u="%40"+u),Z=!0,o=Hg(u);for(var m=0;m<o.length;m++){var p=o[m];if(":"!=p||b){var I=fG(p,vG);b?r.password+=I:r.username+=I}else b=!0}u=""}else if(l==Cg||"/"==l||"?"==l||"#"==l||"\\"==l&&r.isSpecial()){if(Z&&""==u)return"Invalid authority";s-=Hg(u).length+1,u="",d=zG}else u+=l;break;case zG:case PG:if(t&&"file"==r.scheme){d=EG;continue}if(":"!=l||h){if(l==Cg||"/"==l||"?"==l||"#"==l||"\\"==l&&r.isSpecial()){if(r.isSpecial()&&""==u)return"Invalid host";if(t&&""==u&&(r.includesCredentials()||null!==r.port))return;if(c=r.parseHost(u))return c;if(u="",d=DG,t)return;continue}"["==l?h=!0:"]"==l&&(h=!1),u+=l}else{if(""==u)return"Invalid host";if(c=r.parseHost(u))return c;if(u="",d=QG,t==PG)return}break;case QG:if(!tG(bG,l)){if(l==Cg||"/"==l||"?"==l||"#"==l||"\\"==l&&r.isSpecial()||t){if(""!=u){var g=_g(u,10);if(g>65535)return"Invalid port";r.port=r.isSpecial()&&g===YG[r.scheme]?null:g,u=""}if(t)return;d=DG;continue}return"Invalid port"}u+=l;break;case jG:if(r.scheme="file","/"==l||"\\"==l)d=MG;else{if(!i||"file"!=i.scheme){d=OG;continue}if(l==Cg)r.host=i.host,r.path=Ag(i.path),r.query=i.query;else if("?"==l)r.host=i.host,r.path=Ag(i.path),r.query="",d=qG;else{if("#"!=l){NG(iG(Ag(n,s),""))||(r.host=i.host,r.path=Ag(i.path),r.shortenPath()),d=OG;continue}r.host=i.host,r.path=Ag(i.path),r.query=i.query,r.fragment="",d=$G}}break;case MG:if("/"==l||"\\"==l){d=EG;break}i&&"file"==i.scheme&&!NG(iG(Ag(n,s),""))&&(KG(i.path[0],!0)?oG(r.path,i.path[0]):r.host=i.host),d=OG;continue;case EG:if(l==Cg||"/"==l||"\\"==l||"?"==l||"#"==l){if(!t&&KG(u))d=OG;else if(""==u){if(r.host="",t)return;d=DG}else{if(c=r.parseHost(u))return c;if("localhost"==r.host&&(r.host=""),t)return;u="",d=DG}continue}u+=l;break;case DG:if(r.isSpecial()){if(d=OG,"/"!=l&&"\\"!=l)continue}else if(t||"?"!=l)if(t||"#"!=l){if(l!=Cg&&(d=OG,"/"!=l))continue}else r.fragment="",d=$G;else r.query="",d=qG;break;case OG:if(l==Cg||"/"==l||"\\"==l&&r.isSpecial()||!t&&("?"==l||"#"==l)){if(".."===(a=sG(a=u))||"%2e."===a||".%2e"===a||"%2e%2e"===a?(r.shortenPath(),"/"==l||"\\"==l&&r.isSpecial()||oG(r.path,"")):JG(u)?"/"==l||"\\"==l&&r.isSpecial()||oG(r.path,""):("file"==r.scheme&&!r.path.length&&KG(u)&&(r.host&&(r.host=""),u=eG(u,0)+":"),oG(r.path,u)),u="","file"==r.scheme&&(l==Cg||"?"==l||"#"==l))for(;r.path.length>1&&""===r.path[0];)aG(r.path);"?"==l?(r.query="",d=qG):"#"==l&&(r.fragment="",d=$G)}else u+=fG(l,SG);break;case _G:"?"==l?(r.query="",d=qG):"#"==l?(r.fragment="",d=$G):l!=Cg&&(r.path[0]+=fG(l,CG));break;case qG:t||"#"!=l?l!=Cg&&("'"==l&&r.isSpecial()?r.query+="%27":r.query+="#"==l?"%23":fG(l,CG)):(r.fragment="",d=$G);break;case $G:l!=Cg&&(r.fragment+=fG(l,RG))}s++}},parseHost:function(e){var t,i,n;if("["==eG(e,0)){if("]"!=eG(e,e.length-1))return"Invalid host";if(t=function(e){var t,i,n,l,o,c,a,r=[0,0,0,0,0,0,0,0],d=0,s=null,u=0,Z=function(){return eG(e,u)};if(":"==Z()){if(":"!=eG(e,1))return;u+=2,s=++d}for(;Z();){if(8==d)return;if(":"!=Z()){for(t=i=0;i<4&&tG(gG,Z());)t=16*t+_g(Z(),16),u++,i++;if("."==Z()){if(0==i)return;if(u-=i,d>6)return;for(n=0;Z();){if(l=null,n>0){if(!("."==Z()&&n<4))return;u++}if(!tG(bG,Z()))return;for(;tG(bG,Z());){if(o=_g(Z(),10),null===l)l=o;else{if(0==l)return;l=10*l+o}if(l>255)return;u++}r[d]=256*r[d]+l,2!=++n&&4!=n||d++}if(4!=n)return;break}if(":"==Z()){if(u++,!Z())return}else if(Z())return;r[d++]=t}else{if(null!==s)return;u++,s=++d}}if(null!==s)for(c=d-s,d=7;0!=d&&c>0;)a=r[d],r[d--]=r[s+c-1],r[s+--c]=a;else if(8!=d)return;return r}(dG(e,1,-1)),!t)return"Invalid host";this.host=t}else if(this.isSpecial()){if(e=Bg(e),tG(GG,e))return"Invalid host";if(t=function(e){var t,i,n,l,o,c,a,r=rG(e,".");if(r.length&&""==r[r.length-1]&&r.length--,(t=r.length)>4)return e;for(i=[],n=0;n<t;n++){if(""==(l=r[n]))return e;if(o=10,l.length>1&&"0"==eG(l,0)&&(o=tG(mG,l)?16:8,l=dG(l,8==o?1:2)),""===l)c=0;else{if(!tG(10==o?IG:8==o?pG:gG,l))return e;c=_g(l,o)}oG(i,c)}for(n=0;n<t;n++)if(c=i[n],n==t-1){if(c>=$g(256,5-t))return null}else if(c>255)return null;for(a=lG(i),n=0;n<i.length;n++)a+=i[n]*$g(256,3-n);return a}(e),null===t)return"Invalid host";this.host=t}else{if(tG(yG,e))return"Invalid host";for(t="",i=Hg(e),n=0;n<i.length;n++)t+=fG(i[n],CG);this.host=t}},cannotHaveUsernamePasswordPort:function(){return!this.host||this.cannotBeABaseURL||"file"==this.scheme},includesCredentials:function(){return""!=this.username||""!=this.password},isSpecial:function(){return kg(YG,this.scheme)},shortenPath:function(){var e=this.path,t=e.length;!t||"file"==this.scheme&&1==t&&KG(e[0],!0)||e.length--},serialize:function(){var e=this,t=e.scheme,i=e.username,n=e.password,l=e.host,o=e.port,c=e.path,a=e.query,r=e.fragment,d=t+":";return null!==l?(d+="//",e.includesCredentials()&&(d+=i+(n?":"+n:"")+"@"),d+=WG(l),null!==o&&(d+=":"+o)):"file"==t&&(d+="//"),d+=e.cannotBeABaseURL?c[0]:c.length?"/"+iG(c,"/"):"",null!==a&&(d+="?"+a),null!==r&&(d+="#"+r),d},setHref:function(e){var t=this.parse(e);if(t)throw Og(t);this.searchParams.update()},getOrigin:function(){var e=this.scheme,t=this.port;if("blob"==e)try{return new ty(e.path[0]).origin}catch(e){return"null"}return"file"!=e&&this.isSpecial()?e+"://"+WG(this.host)+(null!==t?":"+t:""):"null"},getProtocol:function(){return this.scheme+":"},setProtocol:function(e){this.parse(Fg(e)+":",LG)},getUsername:function(){return this.username},setUsername:function(e){var t=Hg(Fg(e));if(!this.cannotHaveUsernamePasswordPort()){this.username="";for(var i=0;i<t.length;i++)this.username+=fG(t[i],vG)}},getPassword:function(){return this.password},setPassword:function(e){var t=Hg(Fg(e));if(!this.cannotHaveUsernamePasswordPort()){this.password="";for(var i=0;i<t.length;i++)this.password+=fG(t[i],vG)}},getHost:function(){var e=this.host,t=this.port;return null===e?"":null===t?WG(e):WG(e)+":"+t},setHost:function(e){this.cannotBeABaseURL||this.parse(e,zG)},getHostname:function(){var e=this.host;return null===e?"":WG(e)},setHostname:function(e){this.cannotBeABaseURL||this.parse(e,PG)},getPort:function(){var e=this.port;return null===e?"":Fg(e)},setPort:function(e){this.cannotHaveUsernamePasswordPort()||(""==(e=Fg(e))?this.port=null:this.parse(e,QG))},getPathname:function(){var e=this.path;return this.cannotBeABaseURL?e[0]:e.length?"/"+iG(e,"/"):""},setPathname:function(e){this.cannotBeABaseURL||(this.path=[],this.parse(e,DG))},getSearch:function(){var e=this.query;return e?"?"+e:""},setSearch:function(e){""==(e=Fg(e))?this.query=null:("?"==eG(e,0)&&(e=dG(e,1)),this.query="",this.parse(e,qG)),this.searchParams.update()},getSearchParams:function(){return this.searchParams.facade},getHash:function(){var e=this.fragment;return e?"#"+e:""},setHash:function(e){""!=(e=Fg(e))?("#"==eG(e,0)&&(e=dG(e,1)),this.fragment="",this.parse(e,$G)):this.fragment=null},update:function(){this.query=this.searchParams.serialize()||null}};var ty=function(e){var t=Lg(this,iy),i=xg(arguments.length,1)>1?arguments[1]:void 0,n=Qg(t,new ey(e,!1,i));Sg||(t.href=n.serialize(),t.origin=n.getOrigin(),t.protocol=n.getProtocol(),t.username=n.getUsername(),t.password=n.getPassword(),t.host=n.getHost(),t.hostname=n.getHostname(),t.port=n.getPort(),t.pathname=n.getPathname(),t.search=n.getSearch(),t.searchParams=n.getSearchParams(),t.hash=n.getHash())},iy=ty.prototype,ny=function(e,t){return{get:function(){return jg(this)[e]()},set:t&&function(e){return jg(this)[t](e)},configurable:!0,enumerable:!0}};if(Sg&&(Jg(iy,"href",ny("serialize","setHref")),Jg(iy,"origin",ny("getOrigin")),Jg(iy,"protocol",ny("getProtocol","setProtocol")),Jg(iy,"username",ny("getUsername","setUsername")),Jg(iy,"password",ny("getPassword","setPassword")),Jg(iy,"host",ny("getHost","setHost")),Jg(iy,"hostname",ny("getHostname","setHostname")),Jg(iy,"port",ny("getPort","setPort")),Jg(iy,"pathname",ny("getPathname","setPathname")),Jg(iy,"search",ny("getSearch","setSearch")),Jg(iy,"searchParams",ny("getSearchParams")),Jg(iy,"hash",ny("getHash","setHash"))),Ng(iy,"toJSON",(function(){return jg(this).serialize()}),{enumerable:!0}),Ng(iy,"toString",(function(){return jg(this).serialize()}),{enumerable:!0}),Dg){var ly=Dg.createObjectURL,oy=Dg.revokeObjectURL;ly&&Ng(ty,"createObjectURL",Yg(ly,Dg)),oy&&Ng(ty,"revokeObjectURL",Yg(oy,Dg))}wg(ty,"URL"),Rg({global:!0,constructor:!0,forced:!vg,sham:!Sg},{URL:ty});var cy,ay=Ye;function ry(e,t,i,n){return new(i||(i=Promise))((function(l,o){function c(e){try{r(n.next(e))}catch(e){o(e)}}function a(e){try{r(n.throw(e))}catch(e){o(e)}}function r(e){var t;e.done?l(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(c,a)}r((n=n.apply(e,t||[])).next())}))}function dy(e,t,i,n){return new(i||(i=Promise))((function(l,o){function c(e){try{r(n.next(e))}catch(e){o(e)}}function a(e){try{r(n.throw(e))}catch(e){o(e)}}function r(e){var t;e.done?l(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(c,a)}r((n=n.apply(e,t||[])).next())}))}el({target:"URL",proto:!0,enumerable:!0},{toJSON:function(){return ay(URL.prototype.toString,this)}}),function(e){e.formPost="form_post",e.query="query",e.direct="direct"}(cy||(cy={}));const sy="{{token}}",uy="{{username}}",Zy="{{scope}}",hy="{{clientID}}",by="{{clientSecret}}";var my;!function(e){e.ConfigData="config_data",e.OIDCProviderMetaData="oidc_provider_meta_data",e.SessionData="session_data",e.TemporaryData="temporary_data"}(my||(my={}));const py="refresh_token_timer",Iy="pkce_code_verifier",gy="#",Gy=["RS256","RS512","RS384","PS256"],yy="code",Xy="session_state",Vy="sign_out_url",Wy="sign_out_success",Cy="state",Ry="openid";var Sy;!function(e){e.Include="include",e.SameOrigin="same-origin",e.Omit="omit"}(Sy||(Sy={}));class vy{constructor(e,t,i){this.message=i,this.name=t,this.code=e,Object.setPrototypeOf(this,new.target.prototype)}}class fy{constructor(){}static filterClaimsFromIDTokenPayload(e){const t=Object.assign({},e);null==t||delete t.iss,null==t||delete t.aud,null==t||delete t.exp,null==t||delete t.iat,null==t||delete t.acr,null==t||delete t.amr,null==t||delete t.azp,null==t||delete t.auth_time,null==t||delete t.nonce,null==t||delete t.c_hash,null==t||delete t.at_hash,null==t||delete t.nbf,null==t||delete t.isk,null==t||delete t.sid;const i={};return Object.entries(t).forEach((e=>{let[t,n]=e;const l=t.split("_").map(((e,t)=>0===t?e:[e[0].toUpperCase(),...e.slice(1)].join(""))).join("");i[l]=n})),i}static getTokenRequestHeaders(){return{Accept:"application/json","Content-Type":"application/x-www-form-urlencoded"}}static generateStateParamForRequestCorrelation(e,t){const i=parseInt(e.split("#")[1]);return t?"".concat(t,"_request_").concat(i):"request_".concat(i)}static extractPKCEKeyFromStateParam(e){return"pkce_code_verifier#".concat(parseInt(e.split("request_")[1]))}}fy.getTenantDomainFromIdTokenPayload=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"@";const i=e.sub.split(t);return i.length>2?i[i.length-1]:""};class Yy{constructor(e,t){this._dataLayer=e,this._config=()=>dy(this,void 0,void 0,(function*(){return yield this._dataLayer.getConfigData()})),this._oidcProviderMetaData=()=>dy(this,void 0,void 0,(function*(){return yield this._dataLayer.getOIDCProviderMetaData()})),this._cryptoHelper=t}resolveEndpoints(e){return dy(this,void 0,void 0,(function*(){const t={},i=yield this._config();return i.endpoints&&Object.keys(i.endpoints).forEach((e=>{const n=e.replace(/[A-Z]/g,(e=>"_".concat(e.toLowerCase())));t[n]=(null==i?void 0:i.endpoints)?i.endpoints[e]:""})),Object.assign(Object.assign({},e),t)}))}resolveEndpointsExplicitly(){return dy(this,void 0,void 0,(function*(){const e={},t=yield this._config();if(!t.endpoints||!["authorization_endpoint","end_session_endpoint","jwks_uri","check_session_iframe","revocation_endpoint","token_endpoint","issuer","userinfo_endpoint"].every((e=>!!t.endpoints&&Object.keys(t.endpoints).some((t=>t.replace(/[A-Z]/g,(e=>"_".concat(e.toLowerCase())))===e)))))throw new vy("JS-AUTH_HELPER-REE-NF01","Required endpoints missing","Some or all of the required endpoints are missing in the object passed to the `endpoints` attribute of the`AuthConfig` object.");return t.endpoints&&Object.keys(t.endpoints).forEach((i=>{const n=i.replace(/[A-Z]/g,(e=>"_".concat(e.toLowerCase())));e[n]=(null==t?void 0:t.endpoints)?t.endpoints[i]:""})),Object.assign({},e)}))}resolveEndpointsByBaseURL(){return dy(this,void 0,void 0,(function*(){const e={},t=yield this._config(),i=t.baseUrl;if(!i)throw new vy("JS-AUTH_HELPER_REBO-NF01","Base URL not defined.","Base URL is not defined in AuthClient config.");t.endpoints&&Object.keys(t.endpoints).forEach((i=>{const n=i.replace(/[A-Z]/g,(e=>"_".concat(e.toLowerCase())));e[n]=(null==t?void 0:t.endpoints)?t.endpoints[i]:""}));const n={authorization_endpoint:"".concat(i).concat("/oauth2/authorize"),end_session_endpoint:"".concat(i).concat("/oidc/logout"),issuer:"".concat(i).concat("/oauth2/token"),jwks_uri:"".concat(i).concat("/oauth2/jwks"),check_session_iframe:"".concat(i).concat("/oidc/checksession"),revocation_endpoint:"".concat(i).concat("/oauth2/revoke"),token_endpoint:"".concat(i).concat("/oauth2/token"),userinfo_endpoint:"".concat(i).concat("/oauth2/userinfo")};return Object.assign(Object.assign({},n),e)}))}validateIdToken(e){var t;return dy(this,void 0,void 0,(function*(){const i=(yield this._dataLayer.getOIDCProviderMetaData()).jwks_uri,n=yield this._config();if(!i||0===i.trim().length)throw new vy("JS_AUTH_HELPER-VIT-NF01","JWKS endpoint not found.","No JWKS endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the JWKS endpoint passed to the SDK is empty.");let l;try{l=yield fetch(i,{credentials:n.sendCookiesInRequests?Sy.Include:Sy.SameOrigin})}catch(i){throw new vy("JS-AUTH_HELPER-VIT-NE02","Request to jwks endpoint failed.",null!=i?i:"The request sent to get the jwks from the server failed.")}if(200!==l.status||!l.ok)throw new vy("JS-AUTH_HELPER-VIT-HE03","Invalid response status received for jwks request (".concat(l.statusText,")."),yield l.json());const o=(yield this._oidcProviderMetaData()).issuer,{keys:c}=yield l.json(),a=yield this._cryptoHelper.getJWKForTheIdToken(e.split(".")[0],c);return this._cryptoHelper.isValidIdToken(e,a,(yield this._config()).clientID,null!=o?o:"",this._cryptoHelper.decodeIDToken(e).sub,(yield this._config()).clockTolerance,null===(t=(yield this._config()).validateIDTokenIssuer)||void 0===t||t)}))}getAuthenticatedUserInfo(e){var t,i,n,l;const o=this._cryptoHelper.decodeIDToken(e),c=fy.getTenantDomainFromIdTokenPayload(o),a=null!==(t=null==o?void 0:o.username)&&void 0!==t?t:"",r=null!==(i=o.given_name)&&void 0!==i?i:"",d=null!==(n=o.family_name)&&void 0!==n?n:"",s=r&&d?"".concat(r," ").concat(d):r||d||"",u=null!==(l=o.preferred_username)&&void 0!==l?l:s;return Object.assign({displayName:u,tenantDomain:c,username:a},fy.filterClaimsFromIDTokenPayload(o))}replaceCustomGrantTemplateTags(e,t){var i;return dy(this,void 0,void 0,(function*(){let n="openid";const l=yield this._config(),o=yield this._dataLayer.getSessionData(t);return l.scope&&l.scope.length>0&&(l.scope.includes("openid")||l.scope.push("openid"),n=l.scope.join(" ")),e.replace("{{token}}",o.access_token).replace("{{username}}",this.getAuthenticatedUserInfo(o.id_token).username).replace("{{scope}}",n).replace("{{clientID}}",l.clientID).replace("{{clientSecret}}",null!==(i=l.clientSecret)&&void 0!==i?i:"")}))}clearUserSessionData(e){return dy(this,void 0,void 0,(function*(){yield this._dataLayer.removeTemporaryData(e),yield this._dataLayer.removeSessionData(e)}))}handleTokenResponse(e,t){return dy(this,void 0,void 0,(function*(){if(200!==e.status||!e.ok)throw new vy("JS-AUTH_HELPER-HTR-NE01","Invalid response status received for token request (".concat(e.statusText,")."),yield e.json());const i=yield e.json();if(i.created_at=(new Date).getTime(),(yield this._config()).validateIDToken)return this.validateIdToken(i.id_token).then((()=>dy(this,void 0,void 0,(function*(){yield this._dataLayer.setSessionData(i,t);const e={accessToken:i.access_token,createdAt:i.created_at,expiresIn:i.expires_in,idToken:i.id_token,refreshToken:i.refresh_token,scope:i.scope,tokenType:i.token_type};return Promise.resolve(e)}))));{const e={accessToken:i.access_token,createdAt:i.created_at,expiresIn:i.expires_in,idToken:i.id_token,refreshToken:i.refresh_token,scope:i.scope,tokenType:i.token_type};return yield this._dataLayer.setSessionData(i,t),Promise.resolve(e)}}))}generatePKCEKey(e){var t;return dy(this,void 0,void 0,(function*(){const i=yield this._dataLayer.getTemporaryData(e),n=[];Object.keys(i).forEach((e=>{e.startsWith("pkce_code_verifier")&&n.push(e)}));const l=n.sort().pop();return"pkce_code_verifier#".concat(parseInt(null!==(t=null==l?void 0:l.split("#")[1])&&void 0!==t?t:"-1")+1)}))}}class Ky{constructor(e){this._cryptoUtils=e}getCodeVerifier(){return this._cryptoUtils.base64URLEncode(this._cryptoUtils.generateRandomBytes(32))}getCodeChallenge(e){return this._cryptoUtils.base64URLEncode(this._cryptoUtils.hashSha256(e))}getJWKForTheIdToken(e,t){const i=JSON.parse(this._cryptoUtils.base64URLDecode(e));for(const e of t)if(i.kid===e.kid)return e;throw new vy("JS-CRYPTO_UTIL-GJFTIT-IV01","kid not found.","Failed to find the 'kid' specified in the id_token. 'kid' found in the header : "+i.kid+", Expected values: "+t.map((e=>e.kid)).join(", "))}isValidIdToken(e,t,i,n,l,o,c){return this._cryptoUtils.verifyJwt(e,t,Gy,i,n,l,o,c).then((e=>e?Promise.resolve(!0):Promise.reject(new vy("JS-CRYPTO_HELPER-IVIT-IV01","Invalid ID token.","ID token validation returned false"))))}decodeIDToken(e){try{const t=this._cryptoUtils.base64URLDecode(e.split(".")[1]);return JSON.parse(t)}catch(e){throw new vy("JS-CRYPTO_UTIL-DIT-IV01","Decoding ID token failed.",e)}}}class Ny{constructor(e,t){this._cryptoUtils=t,this._cryptoHelper=new Ky(t),this._authenticationHelper=new Yy(e,this._cryptoHelper),this._dataLayer=e,this._config=()=>dy(this,void 0,void 0,(function*(){return yield this._dataLayer.getConfigData()})),this._oidcProviderMetaData=()=>dy(this,void 0,void 0,(function*(){return yield this._dataLayer.getOIDCProviderMetaData()}))}getAuthorizationURLParams(e,t){var i,n,l;return dy(this,void 0,void 0,(function*(){const o=yield this._config(),c=new Map;c.set("response_type","code"),c.set("client_id",o.clientID),o.clientSecret&&o.clientSecret.trim().length>0&&c.set("client_secret",o.clientSecret);let a="openid";o.scope&&o.scope.length>0&&(o.scope.includes("openid")||o.scope.push("openid"),a=o.scope.join(" ")),c.set("scope",a),c.set("redirect_uri",o.signInRedirectURL),o.responseMode&&c.set("response_mode",o.responseMode);const r=yield this._authenticationHelper.generatePKCEKey(t);if(o.enablePKCE){const e=null===(i=this._cryptoHelper)||void 0===i?void 0:i.getCodeVerifier(),l=null===(n=this._cryptoHelper)||void 0===n?void 0:n.getCodeChallenge(e);yield this._dataLayer.setTemporaryDataParameter(r,e,t),c.set("code_challenge_method","S256"),c.set("code_challenge",l)}o.prompt&&c.set("prompt",o.prompt);const d=e;if(d)for(const[e,t]of Object.entries(d))""!=e&&""!=t&&"state"!==e&&c.set(e,t.toString());return c.set("state",fy.generateStateParamForRequestCorrelation(r,d?null===(l=d.state)||void 0===l?void 0:l.toString():"")),c}))}getAuthorizationURL(e,t){return dy(this,void 0,void 0,(function*(){const i=yield this._dataLayer.getOIDCProviderMetaDataParameter("authorization_endpoint");if(!i||0===i.trim().length)throw new vy("JS-AUTH_CORE-GAU-NF01","No authorization endpoint found.","No authorization endpoint was found in the OIDC provider meta data from the well-known endpoint or the authorization endpoint passed to the SDK is empty.");const n=new URL(i),l=yield this.getAuthorizationURLParams(e,t);for(const[e,t]of l.entries())n.searchParams.append(e,t);return n.toString()}))}requestAccessToken(e,t,i,n,l){return dy(this,void 0,void 0,(function*(){const o=(yield this._oidcProviderMetaData()).token_endpoint,c=yield this._config();if(!o||0===o.trim().length)throw new vy("JS-AUTH_CORE-RAT1-NF01","Token endpoint not found.","No token endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the token endpoint passed to the SDK is empty.");t&&(yield this._dataLayer.setSessionDataParameter("session_state",t,n));const a=new URLSearchParams;a.set("client_id",c.clientID),c.clientSecret&&c.clientSecret.trim().length>0&&a.set("client_secret",c.clientSecret);const r=e;let d;a.set("code",r),a.set("grant_type","authorization_code"),a.set("redirect_uri",c.signInRedirectURL),(null==l?void 0:l.params)&&Object.entries(l.params).forEach((e=>{let[t,i]=e;a.append(t,i)})),c.enablePKCE&&(a.set("code_verifier","".concat(yield this._dataLayer.getTemporaryDataParameter(fy.extractPKCEKeyFromStateParam(i),n))),yield this._dataLayer.removeTemporaryDataParameter(fy.extractPKCEKeyFromStateParam(i),n));try{d=yield fetch(o,{body:a,credentials:c.sendCookiesInRequests?Sy.Include:Sy.SameOrigin,headers:new Headers(fy.getTokenRequestHeaders()),method:"POST"})}catch(o){throw new vy("JS-AUTH_CORE-RAT1-NE02","Requesting access token failed",null!=o?o:"The request to get the access token from the server failed.")}if(!d.ok)throw new vy("JS-AUTH_CORE-RAT1-HE03","Requesting access token failed with ".concat(d.statusText),yield d.json());return yield this._authenticationHelper.handleTokenResponse(d,n)}))}refreshAccessToken(e){return dy(this,void 0,void 0,(function*(){const t=(yield this._oidcProviderMetaData()).token_endpoint,i=yield this._config(),n=yield this._dataLayer.getSessionData(e);if(!n.refresh_token)throw new vy("JS-AUTH_CORE-RAT2-NF01","No refresh token found.","There was no refresh token found. Asgardeo doesn't return a refresh token if the refresh token grant is not enabled.");if(!t||0===t.trim().length)throw new vy("JS-AUTH_CORE-RAT2-NF02","No refresh token endpoint found.","No refresh token endpoint was in the OIDC provider meta data returned by the well-known endpoint or the refresh token endpoint passed to the SDK is empty.");const l=[];let o;l.push("client_id=".concat(i.clientID)),l.push("refresh_token=".concat(n.refresh_token)),l.push("grant_type=refresh_token"),i.clientSecret&&i.clientSecret.trim().length>0&&l.push("client_secret=".concat(i.clientSecret));try{o=yield fetch(t,{body:l.join("&"),credentials:i.sendCookiesInRequests?Sy.Include:Sy.SameOrigin,headers:new Headers(fy.getTokenRequestHeaders()),method:"POST"})}catch(t){throw new vy("JS-AUTH_CORE-RAT2-NR03","Refresh access token request failed.",null!=t?t:"The request to refresh the access token failed.")}if(!o.ok)throw new vy("JS-AUTH_CORE-RAT2-HE04","Refreshing access token failed with ".concat(o.statusText),yield o.json());return this._authenticationHelper.handleTokenResponse(o,e)}))}revokeAccessToken(e){return dy(this,void 0,void 0,(function*(){const t=(yield this._oidcProviderMetaData()).revocation_endpoint,i=yield this._config();if(!t||0===t.trim().length)throw new vy("JS-AUTH_CORE-RAT3-NF01","No revoke access token endpoint found.","No revoke access token endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the revoke access token endpoint passed to the SDK is empty.");const n=[];let l;n.push("client_id=".concat(i.clientID)),n.push("token=".concat((yield this._dataLayer.getSessionData(e)).access_token)),n.push("token_type_hint=access_token");try{l=yield fetch(t,{body:n.join("&"),credentials:i.sendCookiesInRequests?Sy.Include:Sy.SameOrigin,headers:new Headers(fy.getTokenRequestHeaders()),method:"POST"})}catch(t){throw new vy("JS-AUTH_CORE-RAT3-NE02","The request to revoke access token failed.",null!=t?t:"The request sent to revoke the access token failed.")}if(200!==l.status||!l.ok)throw new vy("JS-AUTH_CORE-RAT3-HE03","Invalid response status received for revoke access token request (".concat(l.statusText,")."),yield l.json());return this._authenticationHelper.clearUserSessionData(e),Promise.resolve(l)}))}requestCustomGrant(e,t){return dy(this,void 0,void 0,(function*(){const i=yield this._oidcProviderMetaData(),n=yield this._config();let l;if(l=e.tokenEndpoint&&0!==e.tokenEndpoint.trim().length?e.tokenEndpoint:i.token_endpoint,!l||0===l.trim().length)throw new vy("JS-AUTH_CORE-RCG-NF01","Token endpoint not found.","No token endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the token endpoint passed to the SDK is empty.");const o=yield Promise.all(Object.entries(e.data).map((e=>{let[i,n]=e;return dy(this,void 0,void 0,(function*(){const e=yield this._authenticationHelper.replaceCustomGrantTemplateTags(n,t);return"".concat(i,"=").concat(e)}))})));let c=Object.assign({},fy.getTokenRequestHeaders());e.attachToken&&(c=Object.assign(Object.assign({},c),{Authorization:"Bearer ".concat((yield this._dataLayer.getSessionData(t)).access_token)}));const a={body:o.join("&"),credentials:n.sendCookiesInRequests?Sy.Include:Sy.SameOrigin,headers:new Headers(c),method:"POST"};let r;try{r=yield fetch(l,a)}catch(e){throw new vy("JS-AUTH_CORE-RCG-NE02","The custom grant request failed.",null!=e?e:"The request sent to get the custom grant failed.")}if(200!==r.status||!r.ok)throw new vy("JS-AUTH_CORE-RCG-HE03","Invalid response status received for the custom grant request. (".concat(r.statusText,")"),yield r.json());return e.returnsSession?this._authenticationHelper.handleTokenResponse(r,t):Promise.resolve(yield r.json())}))}getBasicUserInfo(e){return dy(this,void 0,void 0,(function*(){const t=yield this._dataLayer.getSessionData(e),i=this._authenticationHelper.getAuthenticatedUserInfo(null==t?void 0:t.id_token);let n={allowedScopes:t.scope,sessionState:t.session_state};return Object.keys(i).forEach((e=>{void 0!==i[e]&&""!==i[e]&&null!==i[e]||delete i[e]})),n=Object.assign(Object.assign({},n),i),n}))}getDecodedIDToken(e){return dy(this,void 0,void 0,(function*(){const t=(yield this._dataLayer.getSessionData(e)).id_token;return this._cryptoHelper.decodeIDToken(t)}))}getCryptoHelper(){return dy(this,void 0,void 0,(function*(){return this._cryptoHelper}))}getIDToken(e){return dy(this,void 0,void 0,(function*(){return(yield this._dataLayer.getSessionData(e)).id_token}))}getOIDCProviderMetaData(e){return dy(this,void 0,void 0,(function*(){const t=yield this._config();if(!e&&(yield this._dataLayer.getTemporaryDataParameter("op_config_initiated")))return Promise.resolve();const i=t.wellKnownEndpoint;if(i){let e;try{if(e=yield fetch(i),200!==e.status||!e.ok)throw new Error}catch(t){throw new vy("JS-AUTH_CORE-GOPMD-HE01","Invalid well-known response","The well known endpoint response has been failed with an error.")}return yield this._dataLayer.setOIDCProviderMetaData(yield this._authenticationHelper.resolveEndpoints(yield e.json())),yield this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0),Promise.resolve()}if(t.baseUrl){try{yield this._dataLayer.setOIDCProviderMetaData(yield this._authenticationHelper.resolveEndpointsByBaseURL())}catch(t){throw new vy("JS-AUTH_CORE-GOPMD-IV02","Resolving endpoints failed.",null!=t?t:"Resolving endpoints by base url failed.")}return yield this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0),Promise.resolve()}return yield this._dataLayer.setOIDCProviderMetaData(yield this._authenticationHelper.resolveEndpointsExplicitly()),yield this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0),Promise.resolve()}))}getOIDCServiceEndpoints(){var e,t,i,n,l,o,c,a,r,d;return dy(this,void 0,void 0,(function*(){const s=yield this._oidcProviderMetaData();return{authorizationEndpoint:null!==(e=s.authorization_endpoint)&&void 0!==e?e:"",checkSessionIframe:null!==(t=s.check_session_iframe)&&void 0!==t?t:"",endSessionEndpoint:null!==(i=s.end_session_endpoint)&&void 0!==i?i:"",introspectionEndpoint:null!==(n=s.introspection_endpoint)&&void 0!==n?n:"",issuer:null!==(l=s.issuer)&&void 0!==l?l:"",jwksUri:null!==(o=s.jwks_uri)&&void 0!==o?o:"",registrationEndpoint:null!==(c=s.registration_endpoint)&&void 0!==c?c:"",revocationEndpoint:null!==(a=s.revocation_endpoint)&&void 0!==a?a:"",tokenEndpoint:null!==(r=s.token_endpoint)&&void 0!==r?r:"",userinfoEndpoint:null!==(d=s.userinfo_endpoint)&&void 0!==d?d:""}}))}getSignOutURL(e){var t,i,n;return dy(this,void 0,void 0,(function*(){const l=null===(t=yield this._oidcProviderMetaData())||void 0===t?void 0:t.end_session_endpoint,o=yield this._config();if(!l||0===l.trim().length)throw new vy("JS-AUTH_CORE-GSOU-NF01","Sign-out endpoint not found.","No sign-out endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the sign-out endpoint passed to the SDK is empty.");const c=null!==(i=null==o?void 0:o.signOutRedirectURL)&&void 0!==i?i:null==o?void 0:o.signInRedirectURL;if(!c||0===c.trim().length)throw new vy("JS-AUTH_CORE-GSOU-NF03","No sign-out redirect URL found.","The sign-out redirect URL cannot be found or the URL passed to the SDK is empty. No sign-in redirect URL has been found either. ");const a=new URLSearchParams;if(a.set("post_logout_redirect_uri",c),o.sendIdTokenInLogoutRequest){const t=null===(n=yield this._dataLayer.getSessionData(e))||void 0===n?void 0:n.id_token;if(!t||0===t.trim().length)throw new vy("JS-AUTH_CORE-GSOU-NF02","ID token not found.","No ID token could be found. Either the session information is lost or you have not signed in.");a.set("id_token_hint",t)}else a.set("client_id",o.clientID);return a.set("state","sign_out_success"),"".concat(l,"?").concat(a.toString())}))}clearUserSessionData(e){return dy(this,void 0,void 0,(function*(){yield this._authenticationHelper.clearUserSessionData(e)}))}getAccessToken(e){var t;return dy(this,void 0,void 0,(function*(){return null===(t=yield this._dataLayer.getSessionData(e))||void 0===t?void 0:t.access_token}))}getCreatedAt(e){var t;return dy(this,void 0,void 0,(function*(){return null===(t=yield this._dataLayer.getSessionData(e))||void 0===t?void 0:t.created_at}))}getExpiresIn(e){var t;return dy(this,void 0,void 0,(function*(){return null===(t=yield this._dataLayer.getSessionData(e))||void 0===t?void 0:t.expires_in}))}isAuthenticated(e){return dy(this,void 0,void 0,(function*(){const t=Boolean(yield this.getAccessToken(e)),i=yield this.getCreatedAt(e),n=yield this.getExpiresIn(e);if(!n)return!1;const l=1e3*parseInt(n),o=(new Date).getTime();return t&&i+l>o}))}getPKCECode(e,t){return dy(this,void 0,void 0,(function*(){return yield this._dataLayer.getTemporaryDataParameter(fy.extractPKCEKeyFromStateParam(e),t)}))}setPKCECode(e,t,i){return dy(this,void 0,void 0,(function*(){return yield this._dataLayer.setTemporaryDataParameter(fy.extractPKCEKeyFromStateParam(t),e,i)}))}updateConfig(e){return dy(this,void 0,void 0,(function*(){yield this._dataLayer.setConfigData(e),yield this.getOIDCProviderMetaData(!0)}))}}const Jy="asgardeo-session-active";class Ly{constructor(e,t){this._id=e,this._store=t}setDataInBulk(e,t){var i;return dy(this,void 0,void 0,(function*(){const n=null!==(i=yield this._store.getData(e))&&void 0!==i?i:null,l=n&&JSON.parse(n),o=Object.assign(Object.assign({},l),t),c=JSON.stringify(o);yield this._store.setData(e,c)}))}setValue(e,t,i){var n;return dy(this,void 0,void 0,(function*(){const l=null!==(n=yield this._store.getData(e))&&void 0!==n?n:null,o=l&&JSON.parse(l),c=Object.assign(Object.assign({},o),{[t]:i}),a=JSON.stringify(c);yield this._store.setData(e,a)}))}removeValue(e,t){var i;return dy(this,void 0,void 0,(function*(){const n=null!==(i=yield this._store.getData(e))&&void 0!==i?i:null,l=n&&JSON.parse(n),o=Object.assign({},l);delete o[t];const c=JSON.stringify(o);yield this._store.setData(e,c)}))}_resolveKey(e,t){return t?"".concat(e,"-").concat(this._id,"-").concat(t):"".concat(e,"-").concat(this._id)}isLocalStorageAvailable(){try{const e="__ASGARDEO_AUTH_CORE_LOCAL_STORAGE_TEST__";return localStorage.setItem(e,e),localStorage.removeItem(e),!0}catch(e){return!1}}setConfigData(e){return dy(this,void 0,void 0,(function*(){yield this.setDataInBulk(this._resolveKey(my.ConfigData),e)}))}setOIDCProviderMetaData(e){return dy(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(my.OIDCProviderMetaData),e)}))}setTemporaryData(e,t){return dy(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(my.TemporaryData,t),e)}))}setSessionData(e,t){return dy(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(my.SessionData,t),e)}))}setCustomData(e,t,i){return dy(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(e,i),t)}))}getConfigData(){var e;return dy(this,void 0,void 0,(function*(){return JSON.parse(null!==(e=yield this._store.getData(this._resolveKey(my.ConfigData)))&&void 0!==e?e:null)}))}getOIDCProviderMetaData(){var e;return dy(this,void 0,void 0,(function*(){return JSON.parse(null!==(e=yield this._store.getData(this._resolveKey(my.OIDCProviderMetaData)))&&void 0!==e?e:null)}))}getTemporaryData(e){var t;return dy(this,void 0,void 0,(function*(){return JSON.parse(null!==(t=yield this._store.getData(this._resolveKey(my.TemporaryData,e)))&&void 0!==t?t:null)}))}getSessionData(e){var t;return dy(this,void 0,void 0,(function*(){return JSON.parse(null!==(t=yield this._store.getData(this._resolveKey(my.SessionData,e)))&&void 0!==t?t:null)}))}getCustomData(e,t){var i;return dy(this,void 0,void 0,(function*(){return JSON.parse(null!==(i=yield this._store.getData(this._resolveKey(e,t)))&&void 0!==i?i:null)}))}setSessionStatus(e){this.isLocalStorageAvailable()&&localStorage.setItem("asgardeo-session-active",e)}getSessionStatus(){var e;return this.isLocalStorageAvailable()&&null!==(e=localStorage.getItem("asgardeo-session-active"))&&void 0!==e?e:""}removeSessionStatus(){this.isLocalStorageAvailable()&&localStorage.removeItem("asgardeo-session-active")}removeConfigData(){return dy(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(my.ConfigData))}))}removeOIDCProviderMetaData(){return dy(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(my.OIDCProviderMetaData))}))}removeTemporaryData(e){return dy(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(my.TemporaryData,e))}))}removeSessionData(e){return dy(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(my.SessionData,e))}))}getConfigDataParameter(e){return dy(this,void 0,void 0,(function*(){const t=yield this._store.getData(this._resolveKey(my.ConfigData));return t&&JSON.parse(t)[e]}))}getOIDCProviderMetaDataParameter(e){return dy(this,void 0,void 0,(function*(){const t=yield this._store.getData(this._resolveKey(my.OIDCProviderMetaData));return t&&JSON.parse(t)[e]}))}getTemporaryDataParameter(e,t){return dy(this,void 0,void 0,(function*(){const i=yield this._store.getData(this._resolveKey(my.TemporaryData,t));return i&&JSON.parse(i)[e]}))}getSessionDataParameter(e,t){return dy(this,void 0,void 0,(function*(){const i=yield this._store.getData(this._resolveKey(my.SessionData,t));return i&&JSON.parse(i)[e]}))}setConfigDataParameter(e,t){return dy(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(my.ConfigData),e,t)}))}setOIDCProviderMetaDataParameter(e,t){return dy(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(my.OIDCProviderMetaData),e,t)}))}setTemporaryDataParameter(e,t,i){return dy(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(my.TemporaryData,i),e,t)}))}setSessionDataParameter(e,t,i){return dy(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(my.SessionData,i),e,t)}))}removeConfigDataParameter(e){return dy(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(my.ConfigData),e)}))}removeOIDCProviderMetaDataParameter(e){return dy(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(my.OIDCProviderMetaData),e)}))}removeTemporaryDataParameter(e,t){return dy(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(my.TemporaryData,t),e)}))}removeSessionDataParameter(e,t){return dy(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(my.SessionData,t),e)}))}}const ky={clockTolerance:300,enablePKCE:!0,responseMode:cy.query,scope:["openid"],sendCookiesInRequests:!0,validateIDToken:!0,validateIDTokenIssuer:!0};class Uy{
2
2
  /**
3
3
  * This is the constructor method that returns an instance of the .
4
4
  *
@@ -33,7 +33,7 @@ constructor(){}
33
33
  * {@link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#initialize}
34
34
  *
35
35
  * @preserve
36
- */initialize(e,t,i,n){var l,o,c;return dy(this,void 0,void 0,(function*(){const a=e.clientID;ky._instanceID?ky._instanceID+=1:ky._instanceID=0,n&&(ky._instanceID=n),this._dataLayer=new Ly(a?"instance_".concat(ky._instanceID,"-").concat(a):"instance_".concat(ky._instanceID),t),this._authenticationCore=new Ny(this._dataLayer,i),ky._authenticationCore=new Ny(this._dataLayer,i),yield this._dataLayer.setConfigData(Object.assign(Object.assign(Object.assign({},Uy),e),{scope:[...null!==(l=Uy.scope)&&void 0!==l?l:[],...null!==(c=null===(o=e.scope)||void 0===o?void 0:o.filter((e=>{var t;return!(null===(t=null==Uy?void 0:Uy.scope)||void 0===t?void 0:t.includes(e))})))&&void 0!==c?c:[]]}))}))}
36
+ */initialize(e,t,i,n){var l,o,c;return dy(this,void 0,void 0,(function*(){const a=e.clientID;Uy._instanceID?Uy._instanceID+=1:Uy._instanceID=0,n&&(Uy._instanceID=n),this._dataLayer=new Ly(a?"instance_".concat(Uy._instanceID,"-").concat(a):"instance_".concat(Uy._instanceID),t),this._authenticationCore=new Ny(this._dataLayer,i),Uy._authenticationCore=new Ny(this._dataLayer,i),yield this._dataLayer.setConfigData(Object.assign(Object.assign(Object.assign({},ky),e),{scope:[...null!==(l=ky.scope)&&void 0!==l?l:[],...null!==(c=null===(o=e.scope)||void 0===o?void 0:o.filter((e=>{var t;return!(null===(t=null==ky?void 0:ky.scope)||void 0===t?void 0:t.includes(e))})))&&void 0!==c?c:[]]}))}))}
37
37
  /**
38
38
  * This method returns the `DataLayer` object that allows you to access authentication data.
39
39
  *
@@ -59,7 +59,7 @@ constructor(){}
59
59
  * ```
60
60
  *
61
61
  * @preserve
62
- */getInstanceID(){return ky._instanceID}
62
+ */getInstanceID(){return Uy._instanceID}
63
63
  /**
64
64
  * This is an async method that returns a Promise that resolves with the authorization URL parameters.
65
65
  *
@@ -427,9 +427,9 @@ constructor(){}
427
427
  * {@link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#updateConfig}
428
428
  *
429
429
  * @preserve
430
- */updateConfig(e){return dy(this,void 0,void 0,(function*(){yield this._authenticationCore.updateConfig(e)}))}static clearUserSessionData(e){return dy(this,void 0,void 0,(function*(){yield this._authenticationCore.clearUserSessionData(e)}))}}function Hy(e,t,i){var n=void 0===t?null:t,l=function(e,t){var i=atob(e);if(t){for(var n=new Uint8Array(i.length),l=0,o=i.length;l<o;++l)n[l]=i.charCodeAt(l);return String.fromCharCode.apply(null,new Uint16Array(n.buffer))}return i}(e,void 0!==i&&i),o=l.indexOf("\n",10)+1,c=l.substring(o)+(n?"//# sourceMappingURL="+n:""),a=new Blob([c],{type:"application/javascript"});return URL.createObjectURL(a)}var Ay,Ty,Fy,By,wy=(Ay="Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwp2YXIgd29ya2VyX2NvZGU9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZShlLHQsbixyKXtyZXR1cm4gbmV3KG58fChuPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBzKGUpe3RyeXtjKHIubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYShlKXt0cnl7YyhyLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBjKGUpe3ZhciB0O2UuZG9uZT9pKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIG4/dDpuZXcgbigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihzLGEpfWMoKHI9ci5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX1mdW5jdGlvbiB0KGUsdCxuLHIpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIHMoZSl7dHJ5e2Moci5uZXh0KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBhKGUpe3RyeXtjKHIudGhyb3coZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIGMoZSl7dmFyIHQ7ZS5kb25lP2koZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKHMsYSl9Yygocj1yLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfXZhciBuOyFmdW5jdGlvbihlKXtlLmZvcm1Qb3N0PSJmb3JtX3Bvc3QiLGUucXVlcnk9InF1ZXJ5IixlLmRpcmVjdD0iZGlyZWN0In0obnx8KG49e30pKTt2YXIgcjshZnVuY3Rpb24oZSl7ZS5Db25maWdEYXRhPSJjb25maWdfZGF0YSIsZS5PSURDUHJvdmlkZXJNZXRhRGF0YT0ib2lkY19wcm92aWRlcl9tZXRhX2RhdGEiLGUuU2Vzc2lvbkRhdGE9InNlc3Npb25fZGF0YSIsZS5UZW1wb3JhcnlEYXRhPSJ0ZW1wb3JhcnlfZGF0YSJ9KHJ8fChyPXt9KSk7Y29uc3QgaT0icmVmcmVzaF90b2tlbl90aW1lciIsbz1bIlJTMjU2IiwiUlM1MTIiLCJSUzM4NCIsIlBTMjU2Il0scz0ic2lnbl9vdXRfdXJsIjt2YXIgYTshZnVuY3Rpb24oZSl7ZS5JbmNsdWRlPSJpbmNsdWRlIixlLlNhbWVPcmlnaW49InNhbWUtb3JpZ2luIixlLk9taXQ9Im9taXQifShhfHwoYT17fSkpO2NsYXNzIGN7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMubWVzc2FnZT1uLHRoaXMubmFtZT10LHRoaXMuY29kZT1lLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLG5ldy50YXJnZXQucHJvdG90eXBlKX19Y2xhc3MgdXtjb25zdHJ1Y3Rvcigpe31zdGF0aWMgZmlsdGVyQ2xhaW1zRnJvbUlEVG9rZW5QYXlsb2FkKGUpe2NvbnN0IHQ9T2JqZWN0LmFzc2lnbih7fSxlKTtudWxsPT10fHxkZWxldGUgdC5pc3MsbnVsbD09dHx8ZGVsZXRlIHQuYXVkLG51bGw9PXR8fGRlbGV0ZSB0LmV4cCxudWxsPT10fHxkZWxldGUgdC5pYXQsbnVsbD09dHx8ZGVsZXRlIHQuYWNyLG51bGw9PXR8fGRlbGV0ZSB0LmFtcixudWxsPT10fHxkZWxldGUgdC5henAsbnVsbD09dHx8ZGVsZXRlIHQuYXV0aF90aW1lLG51bGw9PXR8fGRlbGV0ZSB0Lm5vbmNlLG51bGw9PXR8fGRlbGV0ZSB0LmNfaGFzaCxudWxsPT10fHxkZWxldGUgdC5hdF9oYXNoLG51bGw9PXR8fGRlbGV0ZSB0Lm5iZixudWxsPT10fHxkZWxldGUgdC5pc2ssbnVsbD09dHx8ZGVsZXRlIHQuc2lkO2NvbnN0IG49e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKGU9PntsZXRbdCxyXT1lO2NvbnN0IGk9dC5zcGxpdCgiXyIpLm1hcCgoKGUsdCk9PjA9PT10P2U6W2VbMF0udG9VcHBlckNhc2UoKSwuLi5lLnNsaWNlKDEpXS5qb2luKCIiKSkpLmpvaW4oIiIpO25baV09cn0pKSxufXN0YXRpYyBnZXRUb2tlblJlcXVlc3RIZWFkZXJzKCl7cmV0dXJue0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiIsIkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCJ9fXN0YXRpYyBnZW5lcmF0ZVN0YXRlUGFyYW1Gb3JSZXF1ZXN0Q29ycmVsYXRpb24oZSx0KXtjb25zdCBuPXBhcnNlSW50KGUuc3BsaXQoIiMiKVsxXSk7cmV0dXJuIHQ/IiIuY29uY2F0KHQsIl9yZXF1ZXN0XyIpLmNvbmNhdChuKToicmVxdWVzdF8iLmNvbmNhdChuKX1zdGF0aWMgZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShlKXtyZXR1cm4icGtjZV9jb2RlX3ZlcmlmaWVyIyIuY29uY2F0KHBhcnNlSW50KGUuc3BsaXQoInJlcXVlc3RfIilbMV0pKX19dS5nZXRUZW5hbnREb21haW5Gcm9tSWRUb2tlblBheWxvYWQ9ZnVuY3Rpb24oZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJAIjtjb25zdCBuPWUuc3ViLnNwbGl0KHQpO3JldHVybiBuLmxlbmd0aD4yP25bbi5sZW5ndGgtMV06IiJ9O2NsYXNzIGx7Y29uc3RydWN0b3IoZSxuKXt0aGlzLl9kYXRhTGF5ZXI9ZSx0aGlzLl9jb25maWc9KCk9PnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKX0pKSx0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YT0oKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKX0pKSx0aGlzLl9jcnlwdG9IZWxwZXI9bn1yZXNvbHZlRW5kcG9pbnRzKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD17fSxuPXlpZWxkIHRoaXMuX2NvbmZpZygpO3JldHVybiBuLmVuZHBvaW50cyYmT2JqZWN0LmtleXMobi5lbmRwb2ludHMpLmZvckVhY2goKGU9Pntjb25zdCByPWUucmVwbGFjZSgvW0EtWl0vZywoZT0+Il8iLmNvbmNhdChlLnRvTG93ZXJDYXNlKCkpKSk7dFtyXT0obnVsbD09bj92b2lkIDA6bi5lbmRwb2ludHMpP24uZW5kcG9pbnRzW2VdOiIifSkpLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx0KX0pKX1yZXNvbHZlRW5kcG9pbnRzRXhwbGljaXRseSgpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT17fSx0PXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCF0LmVuZHBvaW50c3x8IVsiYXV0aG9yaXphdGlvbl9lbmRwb2ludCIsImVuZF9zZXNzaW9uX2VuZHBvaW50Iiwiandrc191cmkiLCJjaGVja19zZXNzaW9uX2lmcmFtZSIsInJldm9jYXRpb25fZW5kcG9pbnQiLCJ0b2tlbl9lbmRwb2ludCIsImlzc3VlciIsInVzZXJpbmZvX2VuZHBvaW50Il0uZXZlcnkoKGU9PiEhdC5lbmRwb2ludHMmJk9iamVjdC5rZXlzKHQuZW5kcG9pbnRzKS5zb21lKCh0PT50LnJlcGxhY2UoL1tBLVpdL2csKGU9PiJfIi5jb25jYXQoZS50b0xvd2VyQ2FzZSgpKSkpPT09ZSkpKSkpdGhyb3cgbmV3IGMoIkpTLUFVVEhfSEVMUEVSLVJFRS1ORjAxIiwiUmVxdWlyZWQgZW5kcG9pbnRzIG1pc3NpbmciLCJTb21lIG9yIGFsbCBvZiB0aGUgcmVxdWlyZWQgZW5kcG9pbnRzIGFyZSBtaXNzaW5nIGluIHRoZSBvYmplY3QgcGFzc2VkIHRvIHRoZSBgZW5kcG9pbnRzYCBhdHRyaWJ1dGUgb2YgdGhlYEF1dGhDb25maWdgIG9iamVjdC4iKTtyZXR1cm4gdC5lbmRwb2ludHMmJk9iamVjdC5rZXlzKHQuZW5kcG9pbnRzKS5mb3JFYWNoKChuPT57Y29uc3Qgcj1uLnJlcGxhY2UoL1tBLVpdL2csKGU9PiJfIi5jb25jYXQoZS50b0xvd2VyQ2FzZSgpKSkpO2Vbcl09KG51bGw9PXQ/dm9pZCAwOnQuZW5kcG9pbnRzKT90LmVuZHBvaW50c1tuXToiIn0pKSxPYmplY3QuYXNzaWduKHt9LGUpfSkpfXJlc29sdmVFbmRwb2ludHNCeUJhc2VVUkwoKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9e30sdD15aWVsZCB0aGlzLl9jb25maWcoKSxuPXQuYmFzZVVybDtpZighbil0aHJvdyBuZXcgYygiSlMtQVVUSF9IRUxQRVJfUkVCTy1ORjAxIiwiQmFzZSBVUkwgbm90IGRlZmluZWQuIiwiQmFzZSBVUkwgaXMgbm90IGRlZmluZWQgaW4gQXV0aENsaWVudCBjb25maWcuIik7dC5lbmRwb2ludHMmJk9iamVjdC5rZXlzKHQuZW5kcG9pbnRzKS5mb3JFYWNoKChuPT57Y29uc3Qgcj1uLnJlcGxhY2UoL1tBLVpdL2csKGU9PiJfIi5jb25jYXQoZS50b0xvd2VyQ2FzZSgpKSkpO2Vbcl09KG51bGw9PXQ/dm9pZCAwOnQuZW5kcG9pbnRzKT90LmVuZHBvaW50c1tuXToiIn0pKTtjb25zdCByPXthdXRob3JpemF0aW9uX2VuZHBvaW50OiIiLmNvbmNhdChuKS5jb25jYXQoIi9vYXV0aDIvYXV0aG9yaXplIiksZW5kX3Nlc3Npb25fZW5kcG9pbnQ6IiIuY29uY2F0KG4pLmNvbmNhdCgiL29pZGMvbG9nb3V0IiksaXNzdWVyOiIiLmNvbmNhdChuKS5jb25jYXQoIi9vYXV0aDIvdG9rZW4iKSxqd2tzX3VyaToiIi5jb25jYXQobikuY29uY2F0KCIvb2F1dGgyL2p3a3MiKSxjaGVja19zZXNzaW9uX2lmcmFtZToiIi5jb25jYXQobikuY29uY2F0KCIvb2lkYy9jaGVja3Nlc3Npb24iKSxyZXZvY2F0aW9uX2VuZHBvaW50OiIiLmNvbmNhdChuKS5jb25jYXQoIi9vYXV0aDIvcmV2b2tlIiksdG9rZW5fZW5kcG9pbnQ6IiIuY29uY2F0KG4pLmNvbmNhdCgiL29hdXRoMi90b2tlbiIpLHVzZXJpbmZvX2VuZHBvaW50OiIiLmNvbmNhdChuKS5jb25jYXQoIi9vYXV0aDIvdXNlcmluZm8iKX07cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxyKSxlKX0pKX12YWxpZGF0ZUlkVG9rZW4oZSl7dmFyIG47cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PSh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKSkuandrc191cmkscj15aWVsZCB0aGlzLl9jb25maWcoKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlNfQVVUSF9IRUxQRVItVklULU5GMDEiLCJKV0tTIGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyBKV0tTIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIEpXS1MgZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7bGV0IGk7dHJ5e2k9eWllbGQgZmV0Y2godCx7Y3JlZGVudGlhbHM6ci5zZW5kQ29va2llc0luUmVxdWVzdHM/YS5JbmNsdWRlOmEuU2FtZU9yaWdpbn0pfWNhdGNoKHQpe3Rocm93IG5ldyBjKCJKUy1BVVRIX0hFTFBFUi1WSVQtTkUwMiIsIlJlcXVlc3QgdG8gandrcyBlbmRwb2ludCBmYWlsZWQuIixudWxsIT10P3Q6IlRoZSByZXF1ZXN0IHNlbnQgdG8gZ2V0IHRoZSBqd2tzIGZyb20gdGhlIHNlcnZlciBmYWlsZWQuIil9aWYoMjAwIT09aS5zdGF0dXN8fCFpLm9rKXRocm93IG5ldyBjKCJKUy1BVVRIX0hFTFBFUi1WSVQtSEUwMyIsIkludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciBqd2tzIHJlcXVlc3QgKCIuY29uY2F0KGkuc3RhdHVzVGV4dCwiKS4iKSx5aWVsZCBpLmpzb24oKSk7Y29uc3Qgbz0oeWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSkuaXNzdWVyLHtrZXlzOnN9PXlpZWxkIGkuanNvbigpLHU9eWllbGQgdGhpcy5fY3J5cHRvSGVscGVyLmdldEpXS0ZvclRoZUlkVG9rZW4oZS5zcGxpdCgiLiIpWzBdLHMpO3JldHVybiB0aGlzLl9jcnlwdG9IZWxwZXIuaXNWYWxpZElkVG9rZW4oZSx1LCh5aWVsZCB0aGlzLl9jb25maWcoKSkuY2xpZW50SUQsbnVsbCE9bz9vOiIiLHRoaXMuX2NyeXB0b0hlbHBlci5kZWNvZGVJRFRva2VuKGUpLnN1YiwoeWllbGQgdGhpcy5fY29uZmlnKCkpLmNsb2NrVG9sZXJhbmNlLG51bGw9PT0obj0oeWllbGQgdGhpcy5fY29uZmlnKCkpLnZhbGlkYXRlSURUb2tlbklzc3Vlcil8fHZvaWQgMD09PW58fG4pfSkpfWdldEF1dGhlbnRpY2F0ZWRVc2VySW5mbyhlKXt2YXIgdCxuLHIsaTtjb25zdCBvPXRoaXMuX2NyeXB0b0hlbHBlci5kZWNvZGVJRFRva2VuKGUpLHM9dS5nZXRUZW5hbnREb21haW5Gcm9tSWRUb2tlblBheWxvYWQobyksYT1udWxsIT09KHQ9bnVsbD09bz92b2lkIDA6by51c2VybmFtZSkmJnZvaWQgMCE9PXQ/dDoiIixjPW51bGwhPT0obj1vLmdpdmVuX25hbWUpJiZ2b2lkIDAhPT1uP246IiIsbD1udWxsIT09KHI9by5mYW1pbHlfbmFtZSkmJnZvaWQgMCE9PXI/cjoiIixkPWMmJmw/IiIuY29uY2F0KGMsIiAiKS5jb25jYXQobCk6Y3x8bHx8IiIsaD1udWxsIT09KGk9by5wcmVmZXJyZWRfdXNlcm5hbWUpJiZ2b2lkIDAhPT1pP2k6ZDtyZXR1cm4gT2JqZWN0LmFzc2lnbih7ZGlzcGxheU5hbWU6aCx0ZW5hbnREb21haW46cyx1c2VybmFtZTphfSx1LmZpbHRlckNsYWltc0Zyb21JRFRva2VuUGF5bG9hZChvKSl9cmVwbGFjZUN1c3RvbUdyYW50VGVtcGxhdGVUYWdzKGUsbil7dmFyIHI7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtsZXQgdD0ib3BlbmlkIjtjb25zdCBpPXlpZWxkIHRoaXMuX2NvbmZpZygpLG89eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKG4pO3JldHVybiBpLnNjb3BlJiZpLnNjb3BlLmxlbmd0aD4wJiYoaS5zY29wZS5pbmNsdWRlcygib3BlbmlkIil8fGkuc2NvcGUucHVzaCgib3BlbmlkIiksdD1pLnNjb3BlLmpvaW4oIiAiKSksZS5yZXBsYWNlKCJ7e3Rva2VufX0iLG8uYWNjZXNzX3Rva2VuKS5yZXBsYWNlKCJ7e3VzZXJuYW1lfX0iLHRoaXMuZ2V0QXV0aGVudGljYXRlZFVzZXJJbmZvKG8uaWRfdG9rZW4pLnVzZXJuYW1lKS5yZXBsYWNlKCJ7e3Njb3BlfX0iLHQpLnJlcGxhY2UoInt7Y2xpZW50SUR9fSIsaS5jbGllbnRJRCkucmVwbGFjZSgie3tjbGllbnRTZWNyZXR9fSIsbnVsbCE9PShyPWkuY2xpZW50U2VjcmV0KSYmdm9pZCAwIT09cj9yOiIiKX0pKX1jbGVhclVzZXJTZXNzaW9uRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5yZW1vdmVUZW1wb3JhcnlEYXRhKGUpLHlpZWxkIHRoaXMuX2RhdGFMYXllci5yZW1vdmVTZXNzaW9uRGF0YShlKX0pKX1oYW5kbGVUb2tlblJlc3BvbnNlKGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZigyMDAhPT1lLnN0YXR1c3x8IWUub2spdGhyb3cgbmV3IGMoIkpTLUFVVEhfSEVMUEVSLUhUUi1ORTAxIiwiSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIHRva2VuIHJlcXVlc3QgKCIuY29uY2F0KGUuc3RhdHVzVGV4dCwiKS4iKSx5aWVsZCBlLmpzb24oKSk7Y29uc3Qgcj15aWVsZCBlLmpzb24oKTtpZihyLmNyZWF0ZWRfYXQ9KG5ldyBEYXRlKS5nZXRUaW1lKCksKHlpZWxkIHRoaXMuX2NvbmZpZygpKS52YWxpZGF0ZUlEVG9rZW4pcmV0dXJuIHRoaXMudmFsaWRhdGVJZFRva2VuKHIuaWRfdG9rZW4pLnRoZW4oKCgpPT50KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFNlc3Npb25EYXRhKHIsbik7Y29uc3QgZT17YWNjZXNzVG9rZW46ci5hY2Nlc3NfdG9rZW4sY3JlYXRlZEF0OnIuY3JlYXRlZF9hdCxleHBpcmVzSW46ci5leHBpcmVzX2luLGlkVG9rZW46ci5pZF90b2tlbixyZWZyZXNoVG9rZW46ci5yZWZyZXNoX3Rva2VuLHNjb3BlOnIuc2NvcGUsdG9rZW5UeXBlOnIudG9rZW5fdHlwZX07cmV0dXJuIFByb21pc2UucmVzb2x2ZShlKX0pKSkpO3tjb25zdCBlPXthY2Nlc3NUb2tlbjpyLmFjY2Vzc190b2tlbixjcmVhdGVkQXQ6ci5jcmVhdGVkX2F0LGV4cGlyZXNJbjpyLmV4cGlyZXNfaW4saWRUb2tlbjpyLmlkX3Rva2VuLHJlZnJlc2hUb2tlbjpyLnJlZnJlc2hfdG9rZW4sc2NvcGU6ci5zY29wZSx0b2tlblR5cGU6ci50b2tlbl90eXBlfTtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFNlc3Npb25EYXRhKHIsbiksUHJvbWlzZS5yZXNvbHZlKGUpfX0pKX1nZW5lcmF0ZVBLQ0VLZXkoZSl7dmFyIG47cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhKGUpLHI9W107T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZT0+e2Uuc3RhcnRzV2l0aCgicGtjZV9jb2RlX3ZlcmlmaWVyIikmJnIucHVzaChlKX0pKTtjb25zdCBpPXIuc29ydCgpLnBvcCgpO3JldHVybiJwa2NlX2NvZGVfdmVyaWZpZXIjIi5jb25jYXQocGFyc2VJbnQobnVsbCE9PShuPW51bGw9PWk/dm9pZCAwOmkuc3BsaXQoIiMiKVsxXSkmJnZvaWQgMCE9PW4/bjoiLTEiKSsxKX0pKX19Y2xhc3MgZHtjb25zdHJ1Y3RvcihlKXt0aGlzLl9jcnlwdG9VdGlscz1lfWdldENvZGVWZXJpZmllcigpe3JldHVybiB0aGlzLl9jcnlwdG9VdGlscy5iYXNlNjRVUkxFbmNvZGUodGhpcy5fY3J5cHRvVXRpbHMuZ2VuZXJhdGVSYW5kb21CeXRlcygzMikpfWdldENvZGVDaGFsbGVuZ2UoZSl7cmV0dXJuIHRoaXMuX2NyeXB0b1V0aWxzLmJhc2U2NFVSTEVuY29kZSh0aGlzLl9jcnlwdG9VdGlscy5oYXNoU2hhMjU2KGUpKX1nZXRKV0tGb3JUaGVJZFRva2VuKGUsdCl7Y29uc3Qgbj1KU09OLnBhcnNlKHRoaXMuX2NyeXB0b1V0aWxzLmJhc2U2NFVSTERlY29kZShlKSk7Zm9yKGNvbnN0IGUgb2YgdClpZihuLmtpZD09PWUua2lkKXJldHVybiBlO3Rocm93IG5ldyBjKCJKUy1DUllQVE9fVVRJTC1HSkZUSVQtSVYwMSIsImtpZCBub3QgZm91bmQuIiwiRmFpbGVkIHRvIGZpbmQgdGhlICdraWQnIHNwZWNpZmllZCBpbiB0aGUgaWRfdG9rZW4uICdraWQnIGZvdW5kIGluIHRoZSBoZWFkZXIgOiAiK24ua2lkKyIsIEV4cGVjdGVkIHZhbHVlczogIit0Lm1hcCgoZT0+ZS5raWQpKS5qb2luKCIsICIpKX1pc1ZhbGlkSWRUb2tlbihlLHQsbixyLGkscyxhKXtyZXR1cm4gdGhpcy5fY3J5cHRvVXRpbHMudmVyaWZ5Snd0KGUsdCxvLG4scixpLHMsYSkudGhlbigoZT0+ZT9Qcm9taXNlLnJlc29sdmUoITApOlByb21pc2UucmVqZWN0KG5ldyBjKCJKUy1DUllQVE9fSEVMUEVSLUlWSVQtSVYwMSIsIkludmFsaWQgSUQgdG9rZW4uIiwiSUQgdG9rZW4gdmFsaWRhdGlvbiByZXR1cm5lZCBmYWxzZSIpKSkpfWRlY29kZUlEVG9rZW4oZSl7dHJ5e2NvbnN0IHQ9dGhpcy5fY3J5cHRvVXRpbHMuYmFzZTY0VVJMRGVjb2RlKGUuc3BsaXQoIi4iKVsxXSk7cmV0dXJuIEpTT04ucGFyc2UodCl9Y2F0Y2goZSl7dGhyb3cgbmV3IGMoIkpTLUNSWVBUT19VVElMLURJVC1JVjAxIiwiRGVjb2RpbmcgSUQgdG9rZW4gZmFpbGVkLiIsZSl9fX1jbGFzcyBoe2NvbnN0cnVjdG9yKGUsbil7dGhpcy5fY3J5cHRvVXRpbHM9bix0aGlzLl9jcnlwdG9IZWxwZXI9bmV3IGQobiksdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXI9bmV3IGwoZSx0aGlzLl9jcnlwdG9IZWxwZXIpLHRoaXMuX2RhdGFMYXllcj1lLHRoaXMuX2NvbmZpZz0oKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpfSkpLHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhPSgpPT50KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpfSkpfWdldEF1dGhvcml6YXRpb25VUkxQYXJhbXMoZSxuKXt2YXIgcixpLG87cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX2NvbmZpZygpLHM9bmV3IE1hcDtzLnNldCgicmVzcG9uc2VfdHlwZSIsImNvZGUiKSxzLnNldCgiY2xpZW50X2lkIix0LmNsaWVudElEKSx0LmNsaWVudFNlY3JldCYmdC5jbGllbnRTZWNyZXQudHJpbSgpLmxlbmd0aD4wJiZzLnNldCgiY2xpZW50X3NlY3JldCIsdC5jbGllbnRTZWNyZXQpO2xldCBhPSJvcGVuaWQiO3Quc2NvcGUmJnQuc2NvcGUubGVuZ3RoPjAmJih0LnNjb3BlLmluY2x1ZGVzKCJvcGVuaWQiKXx8dC5zY29wZS5wdXNoKCJvcGVuaWQiKSxhPXQuc2NvcGUuam9pbigiICIpKSxzLnNldCgic2NvcGUiLGEpLHMuc2V0KCJyZWRpcmVjdF91cmkiLHQuc2lnbkluUmVkaXJlY3RVUkwpLHQucmVzcG9uc2VNb2RlJiZzLnNldCgicmVzcG9uc2VfbW9kZSIsdC5yZXNwb25zZU1vZGUpO2NvbnN0IGM9eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuZ2VuZXJhdGVQS0NFS2V5KG4pO2lmKHQuZW5hYmxlUEtDRSl7Y29uc3QgZT1udWxsPT09KHI9dGhpcy5fY3J5cHRvSGVscGVyKXx8dm9pZCAwPT09cj92b2lkIDA6ci5nZXRDb2RlVmVyaWZpZXIoKSx0PW51bGw9PT0oaT10aGlzLl9jcnlwdG9IZWxwZXIpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLmdldENvZGVDaGFsbGVuZ2UoZSk7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoYyxlLG4pLHMuc2V0KCJjb2RlX2NoYWxsZW5nZV9tZXRob2QiLCJTMjU2Iikscy5zZXQoImNvZGVfY2hhbGxlbmdlIix0KX10LnByb21wdCYmcy5zZXQoInByb21wdCIsdC5wcm9tcHQpO2NvbnN0IGw9ZTtpZihsKWZvcihjb25zdFtlLHRdb2YgT2JqZWN0LmVudHJpZXMobCkpIiIhPWUmJiIiIT10JiYic3RhdGUiIT09ZSYmcy5zZXQoZSx0LnRvU3RyaW5nKCkpO3JldHVybiBzLnNldCgic3RhdGUiLHUuZ2VuZXJhdGVTdGF0ZVBhcmFtRm9yUmVxdWVzdENvcnJlbGF0aW9uKGMsbD9udWxsPT09KG89bC5zdGF0ZSl8fHZvaWQgMD09PW8/dm9pZCAwOm8udG9TdHJpbmcoKToiIikpLHN9KSl9Z2V0QXV0aG9yaXphdGlvblVSTChlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIoImF1dGhvcml6YXRpb25fZW5kcG9pbnQiKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLUdBVS1ORjAxIiwiTm8gYXV0aG9yaXphdGlvbiBlbmRwb2ludCBmb3VuZC4iLCJObyBhdXRob3JpemF0aW9uIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgZnJvbSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgYXV0aG9yaXphdGlvbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjb25zdCByPW5ldyBVUkwodCksaT15aWVsZCB0aGlzLmdldEF1dGhvcml6YXRpb25VUkxQYXJhbXMoZSxuKTtmb3IoY29uc3RbZSx0XW9mIGkuZW50cmllcygpKXIuc2VhcmNoUGFyYW1zLmFwcGVuZChlLHQpO3JldHVybiByLnRvU3RyaW5nKCl9KSl9cmVxdWVzdEFjY2Vzc1Rva2VuKGUsbixyLGksbyl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS50b2tlbl9lbmRwb2ludCxzPXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCF0fHwwPT09dC50cmltKCkubGVuZ3RoKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMS1ORjAxIiwiVG9rZW4gZW5kcG9pbnQgbm90IGZvdW5kLiIsIk5vIHRva2VuIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO24mJih5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0U2Vzc2lvbkRhdGFQYXJhbWV0ZXIoInNlc3Npb25fc3RhdGUiLG4saSkpO2NvbnN0IGw9bmV3IFVSTFNlYXJjaFBhcmFtcztsLnNldCgiY2xpZW50X2lkIixzLmNsaWVudElEKSxzLmNsaWVudFNlY3JldCYmcy5jbGllbnRTZWNyZXQudHJpbSgpLmxlbmd0aD4wJiZsLnNldCgiY2xpZW50X3NlY3JldCIscy5jbGllbnRTZWNyZXQpO2NvbnN0IGQ9ZTtsZXQgaDtsLnNldCgiY29kZSIsZCksbC5zZXQoImdyYW50X3R5cGUiLCJhdXRob3JpemF0aW9uX2NvZGUiKSxsLnNldCgicmVkaXJlY3RfdXJpIixzLnNpZ25JblJlZGlyZWN0VVJMKSwobnVsbD09bz92b2lkIDA6by5wYXJhbXMpJiZPYmplY3QuZW50cmllcyhvLnBhcmFtcykuZm9yRWFjaCgoZT0+e2xldFt0LG5dPWU7bC5hcHBlbmQodCxuKX0pKSxzLmVuYWJsZVBLQ0UmJihsLnNldCgiY29kZV92ZXJpZmllciIsIiIuY29uY2F0KHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKHUuZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShyKSxpKSkpLHlpZWxkIHRoaXMuX2RhdGFMYXllci5yZW1vdmVUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKHUuZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShyKSxpKSk7dHJ5e2g9eWllbGQgZmV0Y2godCx7Ym9keTpsLGNyZWRlbnRpYWxzOnMuc2VuZENvb2tpZXNJblJlcXVlc3RzP2EuSW5jbHVkZTphLlNhbWVPcmlnaW4saGVhZGVyczpuZXcgSGVhZGVycyh1LmdldFRva2VuUmVxdWVzdEhlYWRlcnMoKSksbWV0aG9kOiJQT1NUIn0pfWNhdGNoKHQpe3Rocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMS1ORTAyIiwiUmVxdWVzdGluZyBhY2Nlc3MgdG9rZW4gZmFpbGVkIixudWxsIT10P3Q6IlRoZSByZXF1ZXN0IHRvIGdldCB0aGUgYWNjZXNzIHRva2VuIGZyb20gdGhlIHNlcnZlciBmYWlsZWQuIil9aWYoIWgub2spdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQVQxLUhFMDMiLCJSZXF1ZXN0aW5nIGFjY2VzcyB0b2tlbiBmYWlsZWQgd2l0aCAiLmNvbmNhdChoLnN0YXR1c1RleHQpLHlpZWxkIGguanNvbigpKTtyZXR1cm4geWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZShoLGkpfSkpfXJlZnJlc2hBY2Nlc3NUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9KHlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCkpLnRva2VuX2VuZHBvaW50LG49eWllbGQgdGhpcy5fY29uZmlnKCkscj15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoZSk7aWYoIXIucmVmcmVzaF90b2tlbil0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDItTkYwMSIsIk5vIHJlZnJlc2ggdG9rZW4gZm91bmQuIiwiVGhlcmUgd2FzIG5vIHJlZnJlc2ggdG9rZW4gZm91bmQuIEFzZ2FyZGVvIGRvZXNuJ3QgcmV0dXJuIGEgcmVmcmVzaCB0b2tlbiBpZiB0aGUgcmVmcmVzaCB0b2tlbiBncmFudCBpcyBub3QgZW5hYmxlZC4iKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDItTkYwMiIsIk5vIHJlZnJlc2ggdG9rZW4gZW5kcG9pbnQgZm91bmQuIiwiTm8gcmVmcmVzaCB0b2tlbiBlbmRwb2ludCB3YXMgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSByZWZyZXNoIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2NvbnN0IGk9W107bGV0IG87aS5wdXNoKCJjbGllbnRfaWQ9Ii5jb25jYXQobi5jbGllbnRJRCkpLGkucHVzaCgicmVmcmVzaF90b2tlbj0iLmNvbmNhdChyLnJlZnJlc2hfdG9rZW4pKSxpLnB1c2goImdyYW50X3R5cGU9cmVmcmVzaF90b2tlbiIpLG4uY2xpZW50U2VjcmV0JiZuLmNsaWVudFNlY3JldC50cmltKCkubGVuZ3RoPjAmJmkucHVzaCgiY2xpZW50X3NlY3JldD0iLmNvbmNhdChuLmNsaWVudFNlY3JldCkpO3RyeXtvPXlpZWxkIGZldGNoKHQse2JvZHk6aS5qb2luKCImIiksY3JlZGVudGlhbHM6bi5zZW5kQ29va2llc0luUmVxdWVzdHM/YS5JbmNsdWRlOmEuU2FtZU9yaWdpbixoZWFkZXJzOm5ldyBIZWFkZXJzKHUuZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpKSxtZXRob2Q6IlBPU1QifSl9Y2F0Y2godCl7dGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQVQyLU5SMDMiLCJSZWZyZXNoIGFjY2VzcyB0b2tlbiByZXF1ZXN0IGZhaWxlZC4iLG51bGwhPXQ/dDoiVGhlIHJlcXVlc3QgdG8gcmVmcmVzaCB0aGUgYWNjZXNzIHRva2VuIGZhaWxlZC4iKX1pZighby5vayl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDItSEUwNCIsIlJlZnJlc2hpbmcgYWNjZXNzIHRva2VuIGZhaWxlZCB3aXRoICIuY29uY2F0KG8uc3RhdHVzVGV4dCkseWllbGQgby5qc29uKCkpO3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5oYW5kbGVUb2tlblJlc3BvbnNlKG8sZSl9KSl9cmV2b2tlQWNjZXNzVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS5yZXZvY2F0aW9uX2VuZHBvaW50LG49eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIXR8fDA9PT10LnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQVQzLU5GMDEiLCJObyByZXZva2UgYWNjZXNzIHRva2VuIGVuZHBvaW50IGZvdW5kLiIsIk5vIHJldm9rZSBhY2Nlc3MgdG9rZW4gZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgcmV2b2tlIGFjY2VzcyB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjb25zdCByPVtdO2xldCBpO3IucHVzaCgiY2xpZW50X2lkPSIuY29uY2F0KG4uY2xpZW50SUQpKSxyLnB1c2goInRva2VuPSIuY29uY2F0KCh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoZSkpLmFjY2Vzc190b2tlbikpLHIucHVzaCgidG9rZW5fdHlwZV9oaW50PWFjY2Vzc190b2tlbiIpO3RyeXtpPXlpZWxkIGZldGNoKHQse2JvZHk6ci5qb2luKCImIiksY3JlZGVudGlhbHM6bi5zZW5kQ29va2llc0luUmVxdWVzdHM/YS5JbmNsdWRlOmEuU2FtZU9yaWdpbixoZWFkZXJzOm5ldyBIZWFkZXJzKHUuZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpKSxtZXRob2Q6IlBPU1QifSl9Y2F0Y2godCl7dGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQVQzLU5FMDIiLCJUaGUgcmVxdWVzdCB0byByZXZva2UgYWNjZXNzIHRva2VuIGZhaWxlZC4iLG51bGwhPXQ/dDoiVGhlIHJlcXVlc3Qgc2VudCB0byByZXZva2UgdGhlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIil9aWYoMjAwIT09aS5zdGF0dXN8fCFpLm9rKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMy1IRTAzIiwiSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIHJldm9rZSBhY2Nlc3MgdG9rZW4gcmVxdWVzdCAoIi5jb25jYXQoaS5zdGF0dXNUZXh0LCIpLiIpLHlpZWxkIGkuanNvbigpKTtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuY2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSksUHJvbWlzZS5yZXNvbHZlKGkpfSkpfXJlcXVlc3RDdXN0b21HcmFudChlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgcj15aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpLGk9eWllbGQgdGhpcy5fY29uZmlnKCk7bGV0IG87aWYobz1lLnRva2VuRW5kcG9pbnQmJjAhPT1lLnRva2VuRW5kcG9pbnQudHJpbSgpLmxlbmd0aD9lLnRva2VuRW5kcG9pbnQ6ci50b2tlbl9lbmRwb2ludCwhb3x8MD09PW8udHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJDRy1ORjAxIiwiVG9rZW4gZW5kcG9pbnQgbm90IGZvdW5kLiIsIk5vIHRva2VuIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2NvbnN0IHM9eWllbGQgUHJvbWlzZS5hbGwoT2JqZWN0LmVudHJpZXMoZS5kYXRhKS5tYXAoKGU9PntsZXRbcixpXT1lO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT15aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXBsYWNlQ3VzdG9tR3JhbnRUZW1wbGF0ZVRhZ3MoaSxuKTtyZXR1cm4iIi5jb25jYXQociwiPSIpLmNvbmNhdChlKX0pKX0pKSk7bGV0IGw9T2JqZWN0LmFzc2lnbih7fSx1LmdldFRva2VuUmVxdWVzdEhlYWRlcnMoKSk7ZS5hdHRhY2hUb2tlbiYmKGw9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGwpLHtBdXRob3JpemF0aW9uOiJCZWFyZXIgIi5jb25jYXQoKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShuKSkuYWNjZXNzX3Rva2VuKX0pKTtjb25zdCBkPXtib2R5OnMuam9pbigiJiIpLGNyZWRlbnRpYWxzOmkuc2VuZENvb2tpZXNJblJlcXVlc3RzP2EuSW5jbHVkZTphLlNhbWVPcmlnaW4saGVhZGVyczpuZXcgSGVhZGVycyhsKSxtZXRob2Q6IlBPU1QifTtsZXQgaDt0cnl7aD15aWVsZCBmZXRjaChvLGQpfWNhdGNoKGUpe3Rocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkNHLU5FMDIiLCJUaGUgY3VzdG9tIGdyYW50IHJlcXVlc3QgZmFpbGVkLiIsbnVsbCE9ZT9lOiJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgY3VzdG9tIGdyYW50IGZhaWxlZC4iKX1pZigyMDAhPT1oLnN0YXR1c3x8IWgub2spdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQ0ctSEUwMyIsIkludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciB0aGUgY3VzdG9tIGdyYW50IHJlcXVlc3QuICgiLmNvbmNhdChoLnN0YXR1c1RleHQsIikiKSx5aWVsZCBoLmpzb24oKSk7cmV0dXJuIGUucmV0dXJuc1Nlc3Npb24/dGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZShoLG4pOlByb21pc2UucmVzb2x2ZSh5aWVsZCBoLmpzb24oKSl9KSl9Z2V0QmFzaWNVc2VySW5mbyhlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpLG49dGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuZ2V0QXV0aGVudGljYXRlZFVzZXJJbmZvKG51bGw9PXQ/dm9pZCAwOnQuaWRfdG9rZW4pO2xldCByPXthbGxvd2VkU2NvcGVzOnQuc2NvcGUsc2Vzc2lvblN0YXRlOnQuc2Vzc2lvbl9zdGF0ZX07cmV0dXJuIE9iamVjdC5rZXlzKG4pLmZvckVhY2goKGU9Pnt2b2lkIDAhPT1uW2VdJiYiIiE9PW5bZV0mJm51bGwhPT1uW2VdfHxkZWxldGUgbltlXX0pKSxyPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxyKSxuKSxyfSkpfWdldERlY29kZWRJRFRva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD0oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKS5pZF90b2tlbjtyZXR1cm4gdGhpcy5fY3J5cHRvSGVscGVyLmRlY29kZUlEVG9rZW4odCl9KSl9Z2V0Q3J5cHRvSGVscGVyKCl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fY3J5cHRvSGVscGVyfSkpfWdldElEVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKS5pZF90b2tlbn0pKX1nZXRPSURDUHJvdmlkZXJNZXRhRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIWUmJih5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIpKSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Y29uc3Qgbj10LndlbGxLbm93bkVuZHBvaW50O2lmKG4pe2xldCBlO3RyeXtpZihlPXlpZWxkIGZldGNoKG4pLDIwMCE9PWUuc3RhdHVzfHwhZS5vayl0aHJvdyBuZXcgRXJyb3J9Y2F0Y2godCl7dGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1HT1BNRC1IRTAxIiwiSW52YWxpZCB3ZWxsLWtub3duIHJlc3BvbnNlIiwiVGhlIHdlbGwga25vd24gZW5kcG9pbnQgcmVzcG9uc2UgaGFzIGJlZW4gZmFpbGVkIHdpdGggYW4gZXJyb3IuIil9cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlRW5kcG9pbnRzKHlpZWxkIGUuanNvbigpKSkseWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiLCEwKSxQcm9taXNlLnJlc29sdmUoKX1pZih0LmJhc2VVcmwpe3RyeXt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoeWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVzb2x2ZUVuZHBvaW50c0J5QmFzZVVSTCgpKX1jYXRjaCh0KXt0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLUdPUE1ELUlWMDIiLCJSZXNvbHZpbmcgZW5kcG9pbnRzIGZhaWxlZC4iLG51bGwhPXQ/dDoiUmVzb2x2aW5nIGVuZHBvaW50cyBieSBiYXNlIHVybCBmYWlsZWQuIil9cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIiwhMCksUHJvbWlzZS5yZXNvbHZlKCl9cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlRW5kcG9pbnRzRXhwbGljaXRseSgpKSx5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIsITApLFByb21pc2UucmVzb2x2ZSgpfSkpfWdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCl7dmFyIGUsbixyLGksbyxzLGEsYyx1LGw7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCk7cmV0dXJue2F1dGhvcml6YXRpb25FbmRwb2ludDpudWxsIT09KGU9dC5hdXRob3JpemF0aW9uX2VuZHBvaW50KSYmdm9pZCAwIT09ZT9lOiIiLGNoZWNrU2Vzc2lvbklmcmFtZTpudWxsIT09KG49dC5jaGVja19zZXNzaW9uX2lmcmFtZSkmJnZvaWQgMCE9PW4/bjoiIixlbmRTZXNzaW9uRW5kcG9pbnQ6bnVsbCE9PShyPXQuZW5kX3Nlc3Npb25fZW5kcG9pbnQpJiZ2b2lkIDAhPT1yP3I6IiIsaW50cm9zcGVjdGlvbkVuZHBvaW50Om51bGwhPT0oaT10LmludHJvc3BlY3Rpb25fZW5kcG9pbnQpJiZ2b2lkIDAhPT1pP2k6IiIsaXNzdWVyOm51bGwhPT0obz10Lmlzc3VlcikmJnZvaWQgMCE9PW8/bzoiIixqd2tzVXJpOm51bGwhPT0ocz10Lmp3a3NfdXJpKSYmdm9pZCAwIT09cz9zOiIiLHJlZ2lzdHJhdGlvbkVuZHBvaW50Om51bGwhPT0oYT10LnJlZ2lzdHJhdGlvbl9lbmRwb2ludCkmJnZvaWQgMCE9PWE/YToiIixyZXZvY2F0aW9uRW5kcG9pbnQ6bnVsbCE9PShjPXQucmV2b2NhdGlvbl9lbmRwb2ludCkmJnZvaWQgMCE9PWM/YzoiIix0b2tlbkVuZHBvaW50Om51bGwhPT0odT10LnRva2VuX2VuZHBvaW50KSYmdm9pZCAwIT09dT91OiIiLHVzZXJpbmZvRW5kcG9pbnQ6bnVsbCE9PShsPXQudXNlcmluZm9fZW5kcG9pbnQpJiZ2b2lkIDAhPT1sP2w6IiJ9fSkpfWdldFNpZ25PdXRVUkwoZSl7dmFyIG4scixpO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1udWxsPT09KG49eWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uZW5kX3Nlc3Npb25fZW5kcG9pbnQsbz15aWVsZCB0aGlzLl9jb25maWcoKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLUdTT1UtTkYwMSIsIlNpZ24tb3V0IGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyBzaWduLW91dCBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSBzaWduLW91dCBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjb25zdCBzPW51bGwhPT0ocj1udWxsPT1vP3ZvaWQgMDpvLnNpZ25PdXRSZWRpcmVjdFVSTCkmJnZvaWQgMCE9PXI/cjpudWxsPT1vP3ZvaWQgMDpvLnNpZ25JblJlZGlyZWN0VVJMO2lmKCFzfHwwPT09cy50cmltKCkubGVuZ3RoKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtR1NPVS1ORjAzIiwiTm8gc2lnbi1vdXQgcmVkaXJlY3QgVVJMIGZvdW5kLiIsIlRoZSBzaWduLW91dCByZWRpcmVjdCBVUkwgY2Fubm90IGJlIGZvdW5kIG9yIHRoZSBVUkwgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIE5vIHNpZ24taW4gcmVkaXJlY3QgVVJMIGhhcyBiZWVuIGZvdW5kIGVpdGhlci4gIik7Y29uc3QgYT1uZXcgVVJMU2VhcmNoUGFyYW1zO2lmKGEuc2V0KCJwb3N0X2xvZ291dF9yZWRpcmVjdF91cmkiLHMpLG8uc2VuZElkVG9rZW5JbkxvZ291dFJlcXVlc3Qpe2NvbnN0IHQ9bnVsbD09PShpPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKSl8fHZvaWQgMD09PWk/dm9pZCAwOmkuaWRfdG9rZW47aWYoIXR8fDA9PT10LnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1HU09VLU5GMDIiLCJJRCB0b2tlbiBub3QgZm91bmQuIiwiTm8gSUQgdG9rZW4gY291bGQgYmUgZm91bmQuIEVpdGhlciB0aGUgc2Vzc2lvbiBpbmZvcm1hdGlvbiBpcyBsb3N0IG9yIHlvdSBoYXZlIG5vdCBzaWduZWQgaW4uIik7YS5zZXQoImlkX3Rva2VuX2hpbnQiLHQpfWVsc2UgYS5zZXQoImNsaWVudF9pZCIsby5jbGllbnRJRCk7cmV0dXJuIGEuc2V0KCJzdGF0ZSIsInNpZ25fb3V0X3N1Y2Nlc3MiKSwiIi5jb25jYXQodCwiPyIpLmNvbmNhdChhLnRvU3RyaW5nKCkpfSkpfWNsZWFyVXNlclNlc3Npb25EYXRhKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuY2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSl9KSl9Z2V0QWNjZXNzVG9rZW4oZSl7dmFyIG47cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbnVsbD09PShuPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uYWNjZXNzX3Rva2VufSkpfWdldENyZWF0ZWRBdChlKXt2YXIgbjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBudWxsPT09KG49eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKXx8dm9pZCAwPT09bj92b2lkIDA6bi5jcmVhdGVkX2F0fSkpfWdldEV4cGlyZXNJbihlKXt2YXIgbjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBudWxsPT09KG49eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKXx8dm9pZCAwPT09bj92b2lkIDA6bi5leHBpcmVzX2lufSkpfWlzQXV0aGVudGljYXRlZChlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9Qm9vbGVhbih5aWVsZCB0aGlzLmdldEFjY2Vzc1Rva2VuKGUpKSxuPXlpZWxkIHRoaXMuZ2V0Q3JlYXRlZEF0KGUpLHI9eWllbGQgdGhpcy5nZXRFeHBpcmVzSW4oZSk7aWYoIXIpcmV0dXJuITE7Y29uc3QgaT0xZTMqcGFyc2VJbnQociksbz0obmV3IERhdGUpLmdldFRpbWUoKTtyZXR1cm4gdCYmbitpPm99KSl9Z2V0UEtDRUNvZGUoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcih1LmV4dHJhY3RQS0NFS2V5RnJvbVN0YXRlUGFyYW0oZSksbil9KSl9c2V0UEtDRUNvZGUoZSxuLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKHUuZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShuKSxlLHIpfSkpfXVwZGF0ZUNvbmZpZyhlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRDb25maWdEYXRhKGUpLHlpZWxkIHRoaXMuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoITApfSkpfX1jbGFzcyBme2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5faWQ9ZSx0aGlzLl9zdG9yZT10fXNldERhdGFJbkJ1bGsoZSxuKXt2YXIgcjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9bnVsbCE9PShyPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEoZSkpJiZ2b2lkIDAhPT1yP3I6bnVsbCxpPXQmJkpTT04ucGFyc2UodCksbz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30saSksbikscz1KU09OLnN0cmluZ2lmeShvKTt5aWVsZCB0aGlzLl9zdG9yZS5zZXREYXRhKGUscyl9KSl9c2V0VmFsdWUoZSxuLHIpe3ZhciBpO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1udWxsIT09KGk9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YShlKSkmJnZvaWQgMCE9PWk/aTpudWxsLG89dCYmSlNPTi5wYXJzZSh0KSxzPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxvKSx7W25dOnJ9KSxhPUpTT04uc3RyaW5naWZ5KHMpO3lpZWxkIHRoaXMuX3N0b3JlLnNldERhdGEoZSxhKX0pKX1yZW1vdmVWYWx1ZShlLG4pe3ZhciByO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1udWxsIT09KHI9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YShlKSkmJnZvaWQgMCE9PXI/cjpudWxsLGk9dCYmSlNPTi5wYXJzZSh0KSxvPU9iamVjdC5hc3NpZ24oe30saSk7ZGVsZXRlIG9bbl07Y29uc3Qgcz1KU09OLnN0cmluZ2lmeShvKTt5aWVsZCB0aGlzLl9zdG9yZS5zZXREYXRhKGUscyl9KSl9X3Jlc29sdmVLZXkoZSx0KXtyZXR1cm4gdD8iIi5jb25jYXQoZSwiLSIpLmNvbmNhdCh0aGlzLl9pZCwiLSIpLmNvbmNhdCh0KToiIi5jb25jYXQoZSwiLSIpLmNvbmNhdCh0aGlzLl9pZCl9aXNMb2NhbFN0b3JhZ2VBdmFpbGFibGUoKXt0cnl7Y29uc3QgZT0iX19BU0dBUkRFT19BVVRIX0NPUkVfTE9DQUxfU1RPUkFHRV9URVNUX18iO3JldHVybiBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShlLGUpLGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGUpLCEwfWNhdGNoKGUpe3JldHVybiExfX1zZXRDb25maWdEYXRhKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoci5Db25maWdEYXRhKSxlKX0pKX1zZXRPSURDUHJvdmlkZXJNZXRhRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KHIuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpLGUpfSkpfXNldFRlbXBvcmFyeURhdGEoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KHIuVGVtcG9yYXJ5RGF0YSxuKSxlKX0pKX1zZXRTZXNzaW9uRGF0YShlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoci5TZXNzaW9uRGF0YSxuKSxlKX0pKX1zZXRDdXN0b21EYXRhKGUsbixyKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KGUsciksbil9KSl9Z2V0Q29uZmlnRGF0YSgpe3ZhciBlO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShlPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShyLkNvbmZpZ0RhdGEpKSkmJnZvaWQgMCE9PWU/ZTpudWxsKX0pKX1nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpe3ZhciBlO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShlPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShyLk9JRENQcm92aWRlck1ldGFEYXRhKSkpJiZ2b2lkIDAhPT1lP2U6bnVsbCl9KSl9Z2V0VGVtcG9yYXJ5RGF0YShlKXt2YXIgbjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBKU09OLnBhcnNlKG51bGwhPT0obj15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5UZW1wb3JhcnlEYXRhLGUpKSkmJnZvaWQgMCE9PW4/bjpudWxsKX0pKX1nZXRTZXNzaW9uRGF0YShlKXt2YXIgbjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBKU09OLnBhcnNlKG51bGwhPT0obj15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5TZXNzaW9uRGF0YSxlKSkpJiZ2b2lkIDAhPT1uP246bnVsbCl9KSl9Z2V0Q3VzdG9tRGF0YShlLG4pe3ZhciByO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShyPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShlLG4pKSkmJnZvaWQgMCE9PXI/cjpudWxsKX0pKX1zZXRTZXNzaW9uU3RhdHVzKGUpe3RoaXMuaXNMb2NhbFN0b3JhZ2VBdmFpbGFibGUoKSYmbG9jYWxTdG9yYWdlLnNldEl0ZW0oImFzZ2FyZGVvLXNlc3Npb24tYWN0aXZlIixlKX1nZXRTZXNzaW9uU3RhdHVzKCl7dmFyIGU7cmV0dXJuIHRoaXMuaXNMb2NhbFN0b3JhZ2VBdmFpbGFibGUoKSYmbnVsbCE9PShlPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJhc2dhcmRlby1zZXNzaW9uLWFjdGl2ZSIpKSYmdm9pZCAwIT09ZT9lOiIifXJlbW92ZVNlc3Npb25TdGF0dXMoKXt0aGlzLmlzTG9jYWxTdG9yYWdlQXZhaWxhYmxlKCkmJmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCJhc2dhcmRlby1zZXNzaW9uLWFjdGl2ZSIpfXJlbW92ZUNvbmZpZ0RhdGEoKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleShyLkNvbmZpZ0RhdGEpKX0pKX1yZW1vdmVPSURDUHJvdmlkZXJNZXRhRGF0YSgpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fc3RvcmUucmVtb3ZlRGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpKX0pKX1yZW1vdmVUZW1wb3JhcnlEYXRhKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fc3RvcmUucmVtb3ZlRGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuVGVtcG9yYXJ5RGF0YSxlKSl9KSl9cmVtb3ZlU2Vzc2lvbkRhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5TZXNzaW9uRGF0YSxlKSl9KSl9Z2V0Q29uZmlnRGF0YVBhcmFtZXRlcihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuQ29uZmlnRGF0YSkpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfWdldE9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5PSURDUHJvdmlkZXJNZXRhRGF0YSkpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfWdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuVGVtcG9yYXJ5RGF0YSxuKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9Z2V0U2Vzc2lvbkRhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuU2Vzc2lvbkRhdGEsbikpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfXNldENvbmZpZ0RhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLkNvbmZpZ0RhdGEpLGUsbil9KSl9c2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLk9JRENQcm92aWRlck1ldGFEYXRhKSxlLG4pfSkpfXNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoZSxuLGkpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KHIuVGVtcG9yYXJ5RGF0YSxpKSxlLG4pfSkpfXNldFNlc3Npb25EYXRhUGFyYW1ldGVyKGUsbixpKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLlNlc3Npb25EYXRhLGkpLGUsbil9KSl9cmVtb3ZlQ29uZmlnRGF0YVBhcmFtZXRlcihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLkNvbmZpZ0RhdGEpLGUpfSkpfXJlbW92ZU9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KHIuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpLGUpfSkpfXJlbW92ZVRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLlRlbXBvcmFyeURhdGEsbiksZSl9KSl9cmVtb3ZlU2Vzc2lvbkRhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLlNlc3Npb25EYXRhLG4pLGUpfSkpfX1jb25zdCBwPXtjbG9ja1RvbGVyYW5jZTozMDAsZW5hYmxlUEtDRTohMCxyZXNwb25zZU1vZGU6bi5xdWVyeSxzY29wZTpbIm9wZW5pZCJdLHNlbmRDb29raWVzSW5SZXF1ZXN0czohMCx2YWxpZGF0ZUlEVG9rZW46ITAsdmFsaWRhdGVJRFRva2VuSXNzdWVyOiEwfTtjbGFzcyBnewovKioKICAgICAgICAgICAqIFRoaXMgaXMgdGhlIGNvbnN0cnVjdG9yIG1ldGhvZCB0aGF0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0gc3RvcmUgLSBUaGUgc3RvcmUgb2JqZWN0LgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGNvbnN0IF9zdG9yZTogU3RvcmUgPSBuZXcgRGF0YVN0b3JlKCk7CiAgICAgICAgICAgKiBjb25zdCBhdXRoID0gbmV3IEFzZ2FyZGVvQXV0aENsaWVudDxDdXN0b21DbGllbnRDb25maWc+KF9zdG9yZSk7CiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2NvbnN0cnVjdG9yfQogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovCmNvbnN0cnVjdG9yKCl7fQovKioKICAgICAgICAgICAqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgU0RLIHdpdGggdGhlIGNvbmZpZyBkYXRhLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBwYXJhbSBjb25maWcgLSBUaGUgY29uZmlnIG9iamVjdCB0byBpbml0aWFsaXplIHdpdGguCiAgICAgICAgICAgKgogICAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgICAqIGNvbnN0IGNvbmZpZyA9IFx7CiAgICAgICAgICAgKiAgICAgc2lnbkluUmVkaXJlY3RVUkw6ICJodHRwOi8vbG9jYWxob3N0OjMwMDAvc2lnbi1pbiIsCiAgICAgICAgICAgKiAgICAgY2xpZW50SUQ6ICJjbGllbnQgSUQiLAogICAgICAgICAgICogICAgIGJhc2VVcmw6ICJodHRwczovL2xvY2FsaG9zdDo5NDQzIgogICAgICAgICAgICogXH0KICAgICAgICAgICAqCiAgICAgICAgICAgKiBhd2FpdCBhdXRoLmluaXRpYWxpemUoY29uZmlnKTsKICAgICAgICAgICAqCiAgICAgICAgICAgKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2luaXRpYWxpemV9CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi9pbml0aWFsaXplKGUsbixyLGkpe3ZhciBvLHMsYTtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9ZS5jbGllbnRJRDtnLl9pbnN0YW5jZUlEP2cuX2luc3RhbmNlSUQrPTE6Zy5faW5zdGFuY2VJRD0wLGkmJihnLl9pbnN0YW5jZUlEPWkpLHRoaXMuX2RhdGFMYXllcj1uZXcgZih0PyJpbnN0YW5jZV8iLmNvbmNhdChnLl9pbnN0YW5jZUlELCItIikuY29uY2F0KHQpOiJpbnN0YW5jZV8iLmNvbmNhdChnLl9pbnN0YW5jZUlEKSxuKSx0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmU9bmV3IGgodGhpcy5fZGF0YUxheWVyLHIpLGcuX2F1dGhlbnRpY2F0aW9uQ29yZT1uZXcgaCh0aGlzLl9kYXRhTGF5ZXIscikseWllbGQgdGhpcy5fZGF0YUxheWVyLnNldENvbmZpZ0RhdGEoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30scCksZSkse3Njb3BlOlsuLi5udWxsIT09KG89cC5zY29wZSkmJnZvaWQgMCE9PW8/bzpbXSwuLi5udWxsIT09KGE9bnVsbD09PShzPWUuc2NvcGUpfHx2b2lkIDA9PT1zP3ZvaWQgMDpzLmZpbHRlcigoZT0+e3ZhciB0O3JldHVybiEobnVsbD09PSh0PW51bGw9PXA/dm9pZCAwOnAuc2NvcGUpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmluY2x1ZGVzKGUpKX0pKSkmJnZvaWQgMCE9PWE/YTpbXV19KSl9KSl9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgYERhdGFMYXllcmAgb2JqZWN0IHRoYXQgYWxsb3dzIHlvdSB0byBhY2Nlc3MgYXV0aGVudGljYXRpb24gZGF0YS4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJucyAtIFRoZSBgRGF0YUxheWVyYCBvYmplY3QuCiAgICAgICAgICAgKgogICAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICogY29uc3QgZGF0YSA9IGF1dGguZ2V0RGF0YUxheWVyKCk7CiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldERhdGFMYXllcn0KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL2dldERhdGFMYXllcigpe3JldHVybiB0aGlzLl9kYXRhTGF5ZXJ9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgYGluc3RhbmNlSURgIHZhcmlhYmxlIG9mIHRoZSBnaXZlbiBpbnN0YW5jZS4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJucyAtIFRoZSBgaW5zdGFuY2VJRGAgbnVtYmVyLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGNvbnN0IGluc3RhbmNlSWQgPSBhdXRoLmdldEluc3RhbmNlSUQoKTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovZ2V0SW5zdGFuY2VJRCgpe3JldHVybiBnLl9pbnN0YW5jZUlEfQovKioKICAgICAgICAgKiBUaGlzIGlzIGFuIGFzeW5jIG1ldGhvZCB0aGF0IHJldHVybnMgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYXV0aG9yaXphdGlvbiBVUkwgcGFyYW1ldGVycy4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSBjb25maWcgLSAoT3B0aW9uYWwpIEEgY29uZmlnIG9iamVjdCB0byBmb3JjZSBpbml0aWFsaXphdGlvbiBhbmQgcGFzcwogICAgICAgICAqIGN1c3RvbSBwYXRoIHBhcmFtZXRlcnMgc3VjaCBhcyB0aGUgYGZpZHBgIHBhcmFtZXRlci4KICAgICAgICAgKiBAcGFyYW0gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm5zIC0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYXV0aG9yaXphdGlvbiBVUkwgcGFyYW1ldGVycy4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXV0aC5nZXRBdXRob3JpemF0aW9uVVJMUGFyYW1zKCkudGhlbigocGFyYW1zKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmxvZyhwYXJhbXMpOwogICAgICAgICAqIH0pLmNhdGNoKChlcnJvcik9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICogfSk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldEF1dGhvcml6YXRpb25VUkxQYXJhbXN9CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXRBdXRob3JpemF0aW9uVVJMUGFyYW1zKGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PU9iamVjdC5hc3NpZ24oe30sZSk7cmV0dXJuIG51bGw9PXR8fGRlbGV0ZSB0LmZvcmNlSW5pdCwoeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiKSk/dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldEF1dGhvcml6YXRpb25VUkxQYXJhbXModCxuKTp0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEobnVsbD09ZT92b2lkIDA6ZS5mb3JjZUluaXQpLnRoZW4oKCgpPT50aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0QXV0aG9yaXphdGlvblVSTFBhcmFtcyh0LG4pKSl9KSl9Ci8qKgogICAgICAgICAgICogVGhpcyBpcyBhbiBhc3luYyBtZXRob2QgdGhhdCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGF1dGhvcml6YXRpb24gVVJMLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBwYXJhbSBjb25maWcgLSAoT3B0aW9uYWwpIEEgY29uZmlnIG9iamVjdCB0byBmb3JjZSBpbml0aWFsaXphdGlvbiBhbmQgcGFzcwogICAgICAgICAgICogY3VzdG9tIHBhdGggcGFyYW1ldGVycyBzdWNoIGFzIHRoZSBmaWRwIHBhcmFtZXRlci4KICAgICAgICAgICAqIEBwYXJhbSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHJldHVybnMgLSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBhdXRob3JpemF0aW9uIFVSTC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBhdXRoLmdldEF1dGhvcml6YXRpb25VUkwoKS50aGVuKCh1cmwpPT57CiAgICAgICAgICAgKiAgLy8gY29uc29sZS5sb2codXJsKTsKICAgICAgICAgICAqIH0pLmNhdGNoKChlcnJvcik9PnsKICAgICAgICAgICAqICAvLyBjb25zb2xlLmVycm9yKGVycm9yKTsKICAgICAgICAgICAqIH0pOwogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKgogICAgICAgICAgICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRBdXRob3JpemF0aW9uVVJMfQogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovZ2V0QXV0aG9yaXphdGlvblVSTChlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1PYmplY3QuYXNzaWduKHt9LGUpO3JldHVybiBudWxsPT10fHxkZWxldGUgdC5mb3JjZUluaXQsKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIikpP3RoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBdXRob3JpemF0aW9uVVJMKHQsbik6dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENQcm92aWRlck1ldGFEYXRhKG51bGw9PWU/dm9pZCAwOmUuZm9yY2VJbml0KS50aGVuKCgoKT0+dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldEF1dGhvcml6YXRpb25VUkwodCxuKSkpfSkpfQovKioKICAgICAgICAgICAqIFRoaXMgaXMgYW4gYXN5bmMgbWV0aG9kIHRoYXQgc2VuZHMgYSByZXF1ZXN0IHRvIG9idGFpbiB0aGUgYWNjZXNzIHRva2VuIGFuZCByZXR1cm5zIGEgUHJvbWlzZQogICAgICAgICAgICogdGhhdCByZXNvbHZlcyB3aXRoIHRoZSB0b2tlbiBhbmQgb3RoZXIgcmVsZXZhbnQgZGF0YS4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0gYXV0aG9yaXphdGlvbkNvZGUgLSBUaGUgYXV0aG9yaXphdGlvbiBjb2RlLgogICAgICAgICAgICogQHBhcmFtIHNlc3Npb25TdGF0ZSAtIFRoZSBzZXNzaW9uIHN0YXRlLgogICAgICAgICAgICogQHBhcmFtIHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJucyAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHRva2VuIHJlc3BvbnNlLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGF1dGgucmVxdWVzdEFjY2Vzc1Rva2VuKGF1dGhDb2RlLCBzZXNzaW9uU3RhdGUpLnRoZW4oKHRva2VuKT0+ewogICAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHRva2VuKTsKICAgICAgICAgICAqIH0pLmNhdGNoKChlcnJvcik9PnsKICAgICAgICAgICAqICAvLyBjb25zb2xlLmVycm9yKGVycm9yKTsKICAgICAgICAgICAqIH0pOwogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKgogICAgICAgICAgICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNyZXF1ZXN0QWNjZXNzVG9rZW59CiAgICAgICAgICAgKgogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovcmVxdWVzdEFjY2Vzc1Rva2VuKGUsbixyLGksbyl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiKSk/dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJlcXVlc3RBY2Nlc3NUb2tlbihlLG4scixpLG8pOnRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSghMSkudGhlbigoKCk9PnRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5yZXF1ZXN0QWNjZXNzVG9rZW4oZSxuLHIsaSxvKSkpfSkpfQovKioKICAgICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHNpZ24tb3V0IFVSTC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAgICoKICAgICAgICAgICAqICoqVGhpcyBkb2Vzbid0IGNsZWFyIHRoZSBhdXRoZW50aWNhdGlvbiBkYXRhLioqCiAgICAgICAgICAgKgogICAgICAgICAgICogQHJldHVybnMgLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBzaWduLW91dCBVUkwuCiAgICAgICAgICAgKgogICAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICogY29uc3Qgc2lnbk91dFVybCA9IGF3YWl0IGF1dGguZ2V0U2lnbk91dFVSTCgpOwogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKgogICAgICAgICAgICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRTaWduT3V0VVJMfQogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovZ2V0U2lnbk91dFVSTChlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0U2lnbk91dFVSTChlKX0pKX0KLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIE9JREMgc2VydmljZSBlbmRwb2ludHMgdGhhdCBhcmUgZmV0Y2hlZCBmcm9tIHRoZSBgLndlbGwta25vd25gIGVuZHBvaW50LgogICAgICAgICAgICoKICAgICAgICAgICAqIEByZXR1cm5zIC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgT0lEQyBzZXJ2aWNlIGVuZHBvaW50cy4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBjb25zdCBlbmRwb2ludHMgPSBhd2FpdCBhdXRoLmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCk7CiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldE9JRENTZXJ2aWNlRW5kcG9pbnRzfQogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKX0pKX0KLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCBkZWNvZGVzIHRoZSBwYXlsb2FkIG9mIHRoZSBJRCB0b2tlbiBhbmQgcmV0dXJucyBpdC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAgICoKICAgICAgICAgICAqIEByZXR1cm5zIC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgZGVjb2RlZCBJRCB0b2tlbiBwYXlsb2FkLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGNvbnN0IGRlY29kZWRJZFRva2VuID0gYXdhaXQgYXV0aC5nZXREZWNvZGVkSURUb2tlbigpOwogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKgogICAgICAgICAgICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXREZWNvZGVkSURUb2tlbn0KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL2dldERlY29kZWRJRFRva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXREZWNvZGVkSURUb2tlbihlKX0pKX0KLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBJRCB0b2tlbi4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAgICoKICAgICAgICAgICAqIEByZXR1cm5zIC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgSUQgdG9rZW4uCiAgICAgICAgICAgKgogICAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICogY29uc3QgaWRUb2tlbiA9IGF3YWl0IGF1dGguZ2V0SURUb2tlbigpOwogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKgogICAgICAgICAgICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRJRFRva2VufQogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovZ2V0SURUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0SURUb2tlbihlKX0pKX0KLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBiYXNpYyB1c2VyIGluZm9ybWF0aW9uIG9idGFpbmVkIGZyb20gdGhlIElEIHRva2VuLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBwYXJhbSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHJldHVybnMgLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBiYXNpYyB1c2VyIGluZm9ybWF0aW9uLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGNvbnN0IHVzZXJJbmZvID0gYXdhaXQgYXV0aC5nZXRCYXNpY1VzZXJJbmZvKCk7CiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldEJhc2ljVXNlckluZm99CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi9nZXRCYXNpY1VzZXJJbmZvKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRCYXNpY1VzZXJJbmZvKGUpfSkpfQovKioKICAgICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGNyeXB0byBoZWxwZXIgb2JqZWN0LgogICAgICAgICAgICoKICAgICAgICAgICAqIEByZXR1cm5zIC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhIENyeXB0b0hlbHBlciBvYmplY3QuCiAgICAgICAgICAgKgogICAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICogY29uc3QgY3J5cHRvSGVscGVyID0gYXdhaXQgYXV0aC5DcnlwdG9IZWxwZXIoKTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0Q3J5cHRvSGVscGVyfQogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovZ2V0Q3J5cHRvSGVscGVyKCl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldENyeXB0b0hlbHBlcigpfSkpfQovKioKICAgICAgICAgICAqIFRoaXMgbWV0aG9kIHJldm9rZXMgdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAgICoKICAgICAgICAgICAqICoqVGhpcyBtZXRob2QgYWxzbyBjbGVhcnMgdGhlIGF1dGhlbnRpY2F0aW9uIGRhdGEuKioKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJucyAtIEEgUHJvbWlzZSB0aGF0IHJldHVybnMgdGhlIHJlc3BvbnNlIG9mIHRoZSByZXZva2UtYWNjZXNzLXRva2VuIHJlcXVlc3QuCiAgICAgICAgICAgKgogICAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICogYXV0aC5yZXZva2VBY2Nlc3NUb2tlbigpLnRoZW4oKHJlc3BvbnNlKT0+ewogICAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHJlc3BvbnNlKTsKICAgICAgICAgICAqIH0pLmNhdGNoKChlcnJvcik9PnsKICAgICAgICAgICAqICAvLyBjb25zb2xlLmVycm9yKGVycm9yKTsKICAgICAgICAgICAqIH0pOwogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKgogICAgICAgICAgICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNyZXZva2VBY2Nlc3NUb2tlbn0KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL3Jldm9rZUFjY2Vzc1Rva2VuKGUpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmV2b2tlQWNjZXNzVG9rZW4oZSl9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2QgcmVmcmVzaGVzIHRoZSBhY2Nlc3MgdG9rZW4gYW5kIHJldHVybnMgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgbmV3IGFjY2VzcwogICAgICAgICAgICogdG9rZW4gYW5kIG90aGVyIHJlbGV2YW50IGRhdGEuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHBhcmFtIHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJucyAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHRva2VuIHJlc3BvbnNlLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGF1dGgucmVmcmVzaEFjY2Vzc1Rva2VuKCkudGhlbigocmVzcG9uc2UpPT57CiAgICAgICAgICAgKiAgLy8gY29uc29sZS5sb2cocmVzcG9uc2UpOwogICAgICAgICAgICogfSkuY2F0Y2goKGVycm9yKT0+ewogICAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAgICogfSk7CiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3JlZnJlc2hBY2Nlc3NUb2tlbn0KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL3JlZnJlc2hBY2Nlc3NUb2tlbihlKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJlZnJlc2hBY2Nlc3NUb2tlbihlKX0KLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBhY2Nlc3MgdG9rZW4uCiAgICAgICAgICAgKgogICAgICAgICAgICogQHBhcmFtIHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJucyAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IGF1dGguZ2V0QWNjZXNzVG9rZW4oKTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0QWNjZXNzVG9rZW59CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi9nZXRBY2Nlc3NUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0QWNjZXNzVG9rZW4oZSl9KSl9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2Qgc2VuZHMgYSBjdXN0b20tZ3JhbnQgcmVxdWVzdCBhbmQgcmV0dXJucyBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSByZXNwb25zZQogICAgICAgICAgICogZGVwZW5kaW5nIG9uIHRoZSBjb25maWcgcGFzc2VkLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBwYXJhbSBjb25maWcgLSBBIGNvbmZpZyBvYmplY3QgY29udGFpbmluZyB0aGUgY3VzdG9tIGdyYW50IGNvbmZpZ3VyYXRpb25zLgogICAgICAgICAgICogQHBhcmFtIHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJucyAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHJlc3BvbnNlIGRlcGVuZGluZwogICAgICAgICAgICogb24geW91ciBjb25maWd1cmF0aW9ucy4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBjb25zdCBjb25maWcgPSB7CiAgICAgICAgICAgKiAgIGF0dGFjaFRva2VuOiBmYWxzZSwKICAgICAgICAgICAqICAgZGF0YTogewogICAgICAgICAgICogICAgICAgY2xpZW50X2lkOiAie3tjbGllbnRJRH19IiwKICAgICAgICAgICAqICAgICAgIGdyYW50X3R5cGU6ICJhY2NvdW50X3N3aXRjaCIsCiAgICAgICAgICAgKiAgICAgICBzY29wZTogInt7c2NvcGV9fSIsCiAgICAgICAgICAgKiAgICAgICB0b2tlbjogInt7dG9rZW59fSIsCiAgICAgICAgICAgKiAgIH0sCiAgICAgICAgICAgKiAgIGlkOiAiYWNjb3VudC1zd2l0Y2giLAogICAgICAgICAgICogICByZXR1cm5SZXNwb25zZTogdHJ1ZSwKICAgICAgICAgICAqICAgcmV0dXJuc1Nlc3Npb246IHRydWUsCiAgICAgICAgICAgKiAgIHNpZ25JblJlcXVpcmVkOiB0cnVlCiAgICAgICAgICAgKiB9CiAgICAgICAgICAgKgogICAgICAgICAgICogYXV0aC5yZXF1ZXN0Q3VzdG9tR3JhbnQoY29uZmlnKS50aGVuKChyZXNwb25zZSk9PnsKICAgICAgICAgICAqICAvLyBjb25zb2xlLmxvZyhyZXNwb25zZSk7CiAgICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICAgKiB9KTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjcmVxdWVzdEN1c3RvbUdyYW50fQogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovcmVxdWVzdEN1c3RvbUdyYW50KGUsdCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5yZXF1ZXN0Q3VzdG9tR3JhbnQoZSx0KX0KLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGlmIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQgb3Igbm90LgogICAgICAgICAgICoKICAgICAgICAgICAqIEBwYXJhbSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHJldHVybnMgLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGB0cnVlYCBpZiB0aGUgdXNlciBpcyBhdXRoZW50aWNhdGVkLCBgZmFsc2VgIG90aGVyd2lzZS4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBhd2FpdCBhdXRoLmlzQXV0aGVudGljYXRlZCgpOwogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKgogICAgICAgICAgICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNpc0F1dGhlbnRpY2F0ZWR9CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi9pc0F1dGhlbnRpY2F0ZWQoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmlzQXV0aGVudGljYXRlZChlKX0pKX0KLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBQS0NFIGNvZGUgZ2VuZXJhdGVkIGR1cmluZyB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgYXV0aGVudGljYXRpb24gVVJMLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBwYXJhbSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICAgKiBAcGFyYW0gc3RhdGUgLSBUaGUgc3RhdGUgcGFyYW1ldGVyIHRoYXQgd2FzIHBhc3NlZCBpbiB0aGUgYXV0aGVudGljYXRpb24gVVJMLgogICAgICAgICAgICoKICAgICAgICAgICAqIEByZXR1cm5zIC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgUEtDRSBjb2RlLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGNvbnN0IHBrY2UgPSBhd2FpdCBnZXRQS0NFQ29kZSgpOwogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKgogICAgICAgICAgICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRQS0NFQ29kZX0KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL2dldFBLQ0VDb2RlKGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldFBLQ0VDb2RlKGUsbil9KSl9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgUEtDRSBjb2RlIHRvIHRoZSBkYXRhIHN0b3JlLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBwYXJhbSBwa2NlIC0gVGhlIFBLQ0UgY29kZS4KICAgICAgICAgICAqIEBwYXJhbSBzdGF0ZSAtIFRoZSBzdGF0ZSBwYXJhbWV0ZXIgdGhhdCB3YXMgcGFzc2VkIGluIHRoZSBhdXRoZW50aWNhdGlvbiBVUkwuCiAgICAgICAgICAgKiBAcGFyYW0gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGF3YWl0IGF1dGguc2V0UEtDRUNvZGUoInBrY2VfY29kZSIpCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3NldFBLQ0VDb2RlfQogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovc2V0UEtDRUNvZGUoZSxuLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnNldFBLQ0VDb2RlKGUsbixyKX0pKX0KLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGlmIHRoZSBzaWduLW91dCBpcyBzdWNjZXNzZnVsIG9yIG5vdC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0gc2lnbk91dFJlZGlyZWN0VXJsIC0gVGhlIFVSTCB0byB3aGljaCB0aGUgdXNlciBoYXMgYmVlbiByZWRpcmVjdGVkIHRvIGFmdGVyIHNpZ25pbmctb3V0LgogICAgICAgICAgICoKICAgICAgICAgICAqICoqVGhlIHNlcnZlciBhcHBlbmRzIHBhdGggcGFyYW1ldGVycyB0byB0aGUgYHNpZ25PdXRSZWRpcmVjdFVSTGAgYW5kIHRoZXNlIHBhdGggcGFyYW1ldGVycwogICAgICAgICAgICogIGFyZSByZXF1aXJlZCBmb3IgdGhpcyBtZXRob2QgdG8gZnVuY3Rpb24uKioKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJucyAtIGB0cnVlYCBpZiBzdWNjZXNzZnVsLCBgZmFsc2VgIG90aGVyd2lzZS4KICAgICAgICAgICAqCiAgICAgICAgICAgKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2lzU2lnbk91dFN1Y2Nlc3NmdWx9CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi9zdGF0aWMgaXNTaWduT3V0U3VjY2Vzc2Z1bChlKXtjb25zdCB0PW5ldyBVUkwoZSksbj10LnNlYXJjaFBhcmFtcy5nZXQoInN0YXRlIikscj1Cb29sZWFuKHQuc2VhcmNoUGFyYW1zLmdldCgiZXJyb3IiKSk7cmV0dXJuISFuJiYic2lnbl9vdXRfc3VjY2VzcyI9PT1uJiYhcn0KLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGlmIHRoZSBzaWduLW91dCBoYXMgZmFpbGVkIG9yIG5vdC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0gc2lnbk91dFJlZGlyZWN0VXJsIC0gVGhlIFVSTCB0byB3aGljaCB0aGUgdXNlciBoYXMgYmVlbiByZWRpcmVjdGVkIHRvIGFmdGVyIHNpZ25pbmctb3V0LgogICAgICAgICAgICoKICAgICAgICAgICAqICoqVGhlIHNlcnZlciBhcHBlbmRzIHBhdGggcGFyYW1ldGVycyB0byB0aGUgYHNpZ25PdXRSZWRpcmVjdFVSTGAgYW5kIHRoZXNlIHBhdGggcGFyYW1ldGVycwogICAgICAgICAgICogIGFyZSByZXF1aXJlZCBmb3IgdGhpcyBtZXRob2QgdG8gZnVuY3Rpb24uKioKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJucyAtIGB0cnVlYCBpZiBzdWNjZXNzZnVsLCBgZmFsc2VgIG90aGVyd2lzZS4KICAgICAgICAgICAqCiAgICAgICAgICAgKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2RpZFNpZ25PdXRGYWlsfQogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovc3RhdGljIGRpZFNpZ25PdXRGYWlsKGUpe2NvbnN0IHQ9bmV3IFVSTChlKSxuPXQuc2VhcmNoUGFyYW1zLmdldCgic3RhdGUiKSxyPUJvb2xlYW4odC5zZWFyY2hQYXJhbXMuZ2V0KCJlcnJvciIpKTtyZXR1cm4hIW4mJiJzaWduX291dF9zdWNjZXNzIj09PW4mJnJ9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2QgdXBkYXRlcyB0aGUgY29uZmlndXJhdGlvbiB0aGF0IHdhcyBwYXNzZWQgaW50byB0aGUgY29uc3RydWN0b3Igd2hlbiBpbnN0YW50aWF0aW5nIHRoaXMgY2xhc3MuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHBhcmFtIGNvbmZpZyAtIEEgY29uZmlnIG9iamVjdCB0byB1cGRhdGUgdGhlIFNESyBjb25maWd1cmF0aW9ucyB3aXRoLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGNvbnN0IGNvbmZpZyA9IHsKICAgICAgICAgICAqICAgICBzaWduSW5SZWRpcmVjdFVSTDogImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9zaWduLWluIiwKICAgICAgICAgICAqICAgICBjbGllbnRJRDogImNsaWVudCBJRCIsCiAgICAgICAgICAgKiAgICAgYmFzZVVybDogImh0dHBzOi8vbG9jYWxob3N0Ojk0NDMiCiAgICAgICAgICAgKiB9CiAgICAgICAgICAgKgogICAgICAgICAgICogYXdhaXQgYXV0aC51cGRhdGVDb25maWcoY29uZmlnKTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciN1cGRhdGVDb25maWd9CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi91cGRhdGVDb25maWcoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUudXBkYXRlQ29uZmlnKGUpfSkpfXN0YXRpYyBjbGVhclVzZXJTZXNzaW9uRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5jbGVhclVzZXJTZXNzaW9uRGF0YShlKX0pKX19Y29uc3Qgdj0iaW5pdCI7dmFyIHk7IWZ1bmN0aW9uKGUpe2UuU2lnbkluPSJzaWduLWluIixlLlNpZ25PdXQ9InNpZ24tb3V0IixlLkluaXRpYWxpemU9ImluaXRpYWxpemUiLGUuSHR0cFJlcXVlc3RTdGFydD0iaHR0cC1yZXF1ZXN0LXN0YXJ0IixlLkh0dHBSZXF1ZXN0RmluaXNoPSJodHRwLXJlcXVlc3QtZmluaXNoIixlLkh0dHBSZXF1ZXN0RXJyb3I9Imh0dHAtcmVxdWVzdC1lcnJvciIsZS5IdHRwUmVxdWVzdFN1Y2Nlc3M9Imh0dHAtcmVxdWVzdC1zdWNjZXNzIixlLlJldm9rZUFjY2Vzc1Rva2VuPSJyZXZva2UtYWNjZXNzLXRva2VuIixlLkN1c3RvbUdyYW50PSJjdXN0b20tZ3JhbnQiLGUuU2lnbk91dEZhaWxlZD0ic2lnbi1vdXQtZmFpbGVkIn0oeXx8KHk9e30pKTtjb25zdCBtPSJwcm9tcHROb25lUmVxdWVzdFNlbnQiLHc9ImVycm9yIixfPSJlcnJvcl9kZXNjcmlwdGlvbiIsUz0iY3VzdG9tX2dyYW50X2NvbmZpZyIsYj0iQWNjZXNzIHRva2VuIGlzIGludmFsaWQiO3ZhciBrOyFmdW5jdGlvbihlKXtlLkxvY2FsU3RvcmFnZT0ibG9jYWxTdG9yYWdlIixlLlNlc3Npb25TdG9yYWdlPSJzZXNzaW9uU3RvcmFnZSIsZS5XZWJXb3JrZXI9IndlYldvcmtlciIsZS5Ccm93c2VyTWVtb3J5PSJicm93c2VyTWVtb3J5In0oa3x8KGs9e30pKTtjbGFzcyBFe2NvbnN0cnVjdG9yKCl7fXN0YXRpYyBnZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpe3JldHVybntibG9iOihudWxsPT1lP3ZvaWQgMDplLmRhdGEpaW5zdGFuY2VvZiBCbG9iP251bGw9PWU/dm9pZCAwOmUuZGF0YTpudWxsLGRhdGE6SlNPTi5zdHJpbmdpZnkobnVsbCE9ZT9lOiIiKSxzdWNjZXNzOiEwfX1zdGF0aWMgZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKXtyZXR1cm4obnVsbD09ZT92b2lkIDA6ZS50b0pTT04pJiZkZWxldGUgZS50b0pTT04se2Vycm9yOkpTT04uc3RyaW5naWZ5KG51bGwhPWU/ZToiIiksc3VjY2VzczohMX19fWNsYXNzIFR7Y29uc3RydWN0b3IoKXt9c3RhdGljIHJlbW92ZUF1dGhvcml6YXRpb25Db2RlKCl7Y29uc3QgZT1sb2NhdGlvbi5ocmVmO2hpc3RvcnkucHVzaFN0YXRlKHt9LGRvY3VtZW50LnRpdGxlLGUucmVwbGFjZSgvXD9jb2RlPS4qJC8sIiIpKX1zdGF0aWMgZ2V0UEtDRShlKXt2YXIgdDtyZXR1cm4gbnVsbCE9PSh0PXNlc3Npb25TdG9yYWdlLmdldEl0ZW0oZSkpJiZ2b2lkIDAhPT10P3Q6IiJ9c3RhdGljIHNldFBLQ0UoZSx0KXtzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGUsdCl9c3RhdGljIHNldFNpZ25PdXRVUkwoZSx0LG4pe3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0oIiIuY29uY2F0KHMsIi1pbnN0YW5jZV8iKS5jb25jYXQobiwiLSIpLmNvbmNhdCh0KSxlKX1zdGF0aWMgZ2V0U2lnbk91dFVSTChlLHQpe3ZhciBuO3JldHVybiBudWxsIT09KG49c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgiIi5jb25jYXQocywiLWluc3RhbmNlXyIpLmNvbmNhdCh0LCItIikuY29uY2F0KGUpKSkmJnZvaWQgMCE9PW4/bjoiIn1zdGF0aWMgcmVtb3ZlUEtDRShlKXtzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKGUpfXN0YXRpYyBjYW5Db250aW51ZVNpZ25JbihlLHQpe3JldHVybiEoZSYmIVQuaGFzRXJyb3JJblVSTCgpJiYhVC5oYXNBdXRoU2VhcmNoUGFyYW1zSW5VUkwoKSYmIXQpfXN0YXRpYyBpc0luaXRpYWxpemVkU2lsZW50U2lnbkluKCl7cmV0dXJuIFQuaXNTaWxlbnRTdGF0ZVByZXNlbnRJblVSTCgpfXN0YXRpYyB3YXNTaWduSW5DYWxsZWQoKXtyZXR1cm4hKCFULmhhc0Vycm9ySW5VUkwoKSYmIVQuaGFzQXV0aFNlYXJjaFBhcmFtc0luVVJMKCl8fHRoaXMuaXNTaWxlbnRTdGF0ZVByZXNlbnRJblVSTCgpKX1zdGF0aWMgd2FzU2lsZW50U2lnbkluQ2FsbGVkKCl7Y29uc3QgZT1zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCJpbml0aWFsaXplZC1zaWxlbnQtc2lnbi1pbiIpLHQ9ZT9KU09OLnBhcnNlKGUpOm51bGw7cmV0dXJuIEJvb2xlYW4odCl9c3RhdGljIGlzU2lnbk91dFN1Y2Nlc3NmdWwoKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKGcuaXNTaWduT3V0U3VjY2Vzc2Z1bCh3aW5kb3cubG9jYXRpb24uaHJlZikpe2NvbnN0IGU9d2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoIj8iKVswXTtyZXR1cm4gaGlzdG9yeS5wdXNoU3RhdGUoe30sZG9jdW1lbnQudGl0bGUsZSkseWllbGQgZy5jbGVhclVzZXJTZXNzaW9uRGF0YSgpLCEwfXJldHVybiExfSkpfXN0YXRpYyBkaWRTaWduT3V0RmFpbCgpe2lmKGcuZGlkU2lnbk91dEZhaWwod2luZG93LmxvY2F0aW9uLmhyZWYpKXtjb25zdCBlPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpLHQ9ZS5zZWFyY2hQYXJhbXMuZ2V0KHcpLG49ZS5zZWFyY2hQYXJhbXMuZ2V0KF8pLHI9d2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoIj8iKVswXTtyZXR1cm4gaGlzdG9yeS5wdXNoU3RhdGUoe30sZG9jdW1lbnQudGl0bGUscikse2Rlc2NyaXB0aW9uOm51bGwhPW4/bjoiIixlcnJvcjpudWxsIT10P3Q6IiJ9fXJldHVybiExfXN0YXRpYyBpc1NpbGVudFN0YXRlUHJlc2VudEluVVJMKCl7dmFyIGU7Y29uc3QgdD1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKS5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpO3JldHVybiBudWxsIT09KGU9bnVsbD09dD92b2lkIDA6dC5pbmNsdWRlcygic2lnbi1pbi1zaWxlbnRseSIpKSYmdm9pZCAwIT09ZSYmZX1zdGF0aWMgaGFzQXV0aFNlYXJjaFBhcmFtc0luVVJMKCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOndpbmRvdy5sb2NhdGlvbi5zZWFyY2g7cmV0dXJuL1s/Jl1jb2RlPVteJl0rLy50ZXN0KGUpfXN0YXRpYyBoYXNFcnJvckluVVJMKCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOndpbmRvdy5sb2NhdGlvbi5ocmVmO2NvbnN0IHQ9bmV3IFVSTChlKTtyZXR1cm4hIXQuc2VhcmNoUGFyYW1zLmdldCh3KSYmInNpZ25fb3V0X3N1Y2Nlc3MiIT09dC5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpfXN0YXRpYyBjYW5TZW5kUHJvbXB0Tm9uZVJlcXVlc3QoKXtjb25zdCBlPXNlc3Npb25TdG9yYWdlLmdldEl0ZW0obSk7cmV0dXJuIShlP0pTT04ucGFyc2UoZSk6bnVsbCl9c3RhdGljIHNldFByb21wdE5vbmVSZXF1ZXN0U2VudChlKXtzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKG0sSlNPTi5zdHJpbmdpZnkoZSkpfXN0YXRpYyB3YWl0VGlsbFBhZ2VSZWRpcmVjdCh0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9bnVsbCE9dD90OjNlMzt5aWVsZCBuZXcgUHJvbWlzZSgodD0+c2V0VGltZW91dCh0LDFlMyplKSkpfSkpfX1ULnVudGlsPWZ1bmN0aW9uKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTo1MDA7Y29uc3Qgbj1yPT5lKCk/cigpOnNldFRpbWVvdXQoKCgpPT5uKHIpKSx0KTtyZXR1cm4gbmV3IFByb21pc2Uobil9O2NsYXNzIFJ7Y29uc3RydWN0b3IoZSx0KXt0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudD1lLHRoaXMuX2RhdGFMYXllcj10aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXREYXRhTGF5ZXIoKSx0aGlzLl9zcGFIZWxwZXI9dCx0aGlzLl9pbnN0YW5jZUlEPXRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldEluc3RhbmNlSUQoKSx0aGlzLl9pc1Rva2VuUmVmcmVzaGluZz0hMX1lbmFibGVIdHRwSGFuZGxlcihlKXsobnVsbD09ZT92b2lkIDA6ZS5lbmFibGVIYW5kbGVyKSYmZS5lbmFibGVIYW5kbGVyKCl9ZGlzYWJsZUh0dHBIYW5kbGVyKGUpeyhudWxsPT1lP3ZvaWQgMDplLmRpc2FibGVIYW5kbGVyKSYmZS5kaXNhYmxlSGFuZGxlcigpfWluaXRpYWxpemVTZXNzaW9uTWFuZ2VyKGUsdCxuLHIsaSl7dmFyIG8scyxhO2kuaW5pdGlhbGl6ZShlLmNsaWVudElELG51bGwhPT0obz10LmNoZWNrU2Vzc2lvbklmcmFtZSkmJnZvaWQgMCE9PW8/bzoiIixuLG51bGwhPT0ocz1lLmNoZWNrU2Vzc2lvbkludGVydmFsKSYmdm9pZCAwIT09cz9zOjMsbnVsbCE9PShhPWUuc2Vzc2lvblJlZnJlc2hJbnRlcnZhbCkmJnZvaWQgMCE9PWE/YTozMDAsZS5zaWduSW5SZWRpcmVjdFVSTCxyKX1yZXF1ZXN0Q3VzdG9tR3JhbnQodCxuKXt2YXIgcixpLG87cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtsZXQgcz0hMCxhPSExO2lmKG51bGw9PXQ/dm9pZCAwOnQudG9rZW5FbmRwb2ludCl7cz0hMTtmb3IoY29uc3QgZSBvZlsuLi5udWxsIT09KGk9bnVsbD09PShyPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCkpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLnJlc291cmNlU2VydmVyVVJMcykmJnZvaWQgMCE9PWk/aTpbXSx0LmJhc2VVcmxdKWlmKGUmJihudWxsPT09KG89dC50b2tlbkVuZHBvaW50KXx8dm9pZCAwPT09bz92b2lkIDA6by5zdGFydHNXaXRoKGUpKSl7YT0hMDticmVha319cmV0dXJuIHQuc2hvdWxkUmVwbGF5QWZ0ZXJSZWZyZXNoJiZ0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihTLEpTT04uc3RyaW5naWZ5KHQpKSxzfHxhP3RoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LnJlcXVlc3RDdXN0b21HcmFudCh0KS50aGVuKChyPT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG4mJiJmdW5jdGlvbiI9PXR5cGVvZiBuJiZuKHQpLHQucmV0dXJuc1Nlc3Npb24/KHRoaXMuX3NwYUhlbHBlci5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KHRoaXMpLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldEJhc2ljVXNlckluZm8oKSk6cn0pKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpOlByb21pc2UucmVqZWN0KG5ldyBjKCJTUEEtTUFJTl9USFJFQURfQ0xJRU5ULVJDRy1JVjAxIiwiUmVxdWVzdCB0byB0aGUgcHJvdmlkZWQgZW5kcG9pbnQgaXMgcHJvaGliaXRlZC4iLCJSZXF1ZXN0cyBjYW4gb25seSBiZSBzZW50IHRvIHJlc291cmNlIHNlcnZlcnMgc3BlY2lmaWVkIGJ5IHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCBhdHRyaWJ1dGUgd2hpbGUgaW5pdGlhbGl6aW5nIHRoZSBTREsuIFRoZSBzcGVjaWZpZWQgdG9rZW4gZW5kcG9pbnQgaW4gdGhpcyByZXF1ZXN0IGNhbm5vdCBiZSBmb3VuZCBhbW9uZyB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AiKSl9KSl9Z2V0Q3VzdG9tR3JhbnRDb25maWdEYXRhKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKFMpO3JldHVybiBlP0pTT04ucGFyc2UoZSk6bnVsbH0pKX1yZWZyZXNoQWNjZXNzVG9rZW4odCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0cnl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQucmVmcmVzaEFjY2Vzc1Rva2VuKCk7Y29uc3QgZT15aWVsZCB0aGlzLmdldEN1c3RvbUdyYW50Q29uZmlnRGF0YSgpO3JldHVybiBlJiYoeWllbGQgdGhpcy5yZXF1ZXN0Q3VzdG9tR3JhbnQoZSx0KSksdGhpcy5fc3BhSGVscGVyLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkodGhpcyksdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0QmFzaWNVc2VySW5mbygpfWNhdGNoKGUpe2NvbnN0IHQ9e3R5cGU6InJlZnJlc2gtYWNjZXNzLXRva2VuLWVycm9yIn07cmV0dXJuIHdpbmRvdy5wb3N0TWVzc2FnZSh0KSxQcm9taXNlLnJlamVjdChlKX19KSl9cmV0cnlGYWlsZWRSZXF1ZXN0cyh0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9dC5odHRwQ2xpZW50LG49dC5yZXF1ZXN0Q29uZmlnLHI9dC5pc0h0dHBIYW5kbGVyRW5hYmxlZCxpPXQuaHR0cEVycm9yQ2FsbGJhY2ssbz10Lmh0dHBGaW5pc2hDYWxsYmFjazt5aWVsZCBULnVudGlsKCgoKT0+IXRoaXMuX2lzVG9rZW5SZWZyZXNoaW5nKSk7dHJ5e2NvbnN0IHQ9eWllbGQgZS5yZXF1ZXN0KG4pO3JldHVybiBQcm9taXNlLnJlc29sdmUodCl9Y2F0Y2goZSl7cmV0dXJuIHImJigiZnVuY3Rpb24iPT10eXBlb2YgaSYmKHlpZWxkIGkoZSkpLCJmdW5jdGlvbiI9PXR5cGVvZiBvJiZvKCkpLFByb21pc2UucmVqZWN0KGUpfX0pKX1odHRwUmVxdWVzdCh0LG4scixpLG8scyl7dmFyIGEsdTtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2xldCBsPSExO2NvbnN0IGQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKTtmb3IoY29uc3QgZSBvZlsuLi5udWxsIT09KGE9eWllbGQgbnVsbD09ZD92b2lkIDA6ZC5yZXNvdXJjZVNlcnZlclVSTHMpJiZ2b2lkIDAhPT1hP2E6W10sZC5iYXNlVXJsXSlpZihlJiYobnVsbD09PSh1PW51bGw9PW4/dm9pZCAwOm4udXJsKXx8dm9pZCAwPT09dT92b2lkIDA6dS5zdGFydHNXaXRoKGUpKSl7bD0hMDticmVha31yZXR1cm4gbD90LnJlcXVlc3QobikudGhlbigoZT0+UHJvbWlzZS5yZXNvbHZlKGUpKSkuY2F0Y2goKGE9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgZSx1LGw7aWYoNDAxPT09KG51bGw9PT0oZT1udWxsPT1hP3ZvaWQgMDphLnJlc3BvbnNlKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5zdGF0dXMpfHwhKG51bGw9PWE/dm9pZCAwOmEucmVzcG9uc2UpKXtpZih0aGlzLl9pc1Rva2VuUmVmcmVzaGluZylyZXR1cm4gdGhpcy5yZXRyeUZhaWxlZFJlcXVlc3RzKHtlbmFibGVSZXRyaWV2aW5nU2lnbk91dFVSTEZyb21TZXNzaW9uOnMsaHR0cENsaWVudDp0LGh0dHBFcnJvckNhbGxiYWNrOmksaHR0cEZpbmlzaENhbGxiYWNrOm8saXNIdHRwSGFuZGxlckVuYWJsZWQ6cixyZXF1ZXN0Q29uZmlnOm59KTtsZXQgZTt0aGlzLl9pc1Rva2VuUmVmcmVzaGluZz0hMDt0cnl7ZT15aWVsZCB0aGlzLnJlZnJlc2hBY2Nlc3NUb2tlbihzKSx0aGlzLl9pc1Rva2VuUmVmcmVzaGluZz0hMX1jYXRjaChlKXt0aHJvdyB0aGlzLl9pc1Rva2VuUmVmcmVzaGluZz0hMSxyJiYoImZ1bmN0aW9uIj09dHlwZW9mIGkmJih5aWVsZCBpKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxhKSx7Y29kZTpifSkpKSwiZnVuY3Rpb24iPT10eXBlb2YgbyYmbygpKSxuZXcgYygiU1BBLUFVVEhfSEVMUEVSLUhSLVNFMDEiLG51bGwhPT0odT1udWxsPT1lP3ZvaWQgMDplLm5hbWUpJiZ2b2lkIDAhPT11P3U6IlJlZnJlc2ggdG9rZW4gcmVxdWVzdCBmYWlsZWQuIixudWxsIT09KGw9bnVsbD09ZT92b2lkIDA6ZS5tZXNzYWdlKSYmdm9pZCAwIT09bD9sOiJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gcmVmcmVzaCB0aGUgYWNjZXNzIHRva2VuIGZvbGxvd2luZyBhIDQwMSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIuIil9aWYoZSl0cnl7Y29uc3QgZT15aWVsZCB0LnJlcXVlc3Qobik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShlKX1jYXRjaChlKXtyZXR1cm4gciYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoeWllbGQgaShlKSksImZ1bmN0aW9uIj09dHlwZW9mIG8mJm8oKSksUHJvbWlzZS5yZWplY3QoZSl9fXJldHVybiByJiYoImZ1bmN0aW9uIj09dHlwZW9mIGkmJih5aWVsZCBpKGEpKSwiZnVuY3Rpb24iPT10eXBlb2YgbyYmbygpKSxQcm9taXNlLnJlamVjdChhKX0pKSkpOlByb21pc2UucmVqZWN0KG5ldyBjKCJTUEEtQVVUSF9IRUxQRVItSFItSVYwMiIsIlJlcXVlc3QgdG8gdGhlIHByb3ZpZGVkIGVuZHBvaW50IGlzIHByb2hpYml0ZWQuIiwiUmVxdWVzdHMgY2FuIG9ubHkgYmUgc2VudCB0byByZXNvdXJjZSBzZXJ2ZXJzIHNwZWNpZmllZCBieSB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AgYXR0cmlidXRlIHdoaWxlIGluaXRpYWxpemluZyB0aGUgU0RLLiBUaGUgc3BlY2lmaWVkIGVuZHBvaW50IGluIHRoaXMgcmVxdWVzdCBjYW5ub3QgYmUgZm91bmQgYW1vbmcgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIikpfSkpfWh0dHBSZXF1ZXN0QWxsKHQsbixyLGksbyl7dmFyIHMsYSx1O3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7bGV0IGw9ITA7Y29uc3QgZD15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpO2Zvcihjb25zdCBlIG9mIHQpe2xldCB0PSExO2Zvcihjb25zdCBuIG9mWy4uLm51bGwhPT0oYT1udWxsPT09KHM9eWllbGQgZCl8fHZvaWQgMD09PXM/dm9pZCAwOnMucmVzb3VyY2VTZXJ2ZXJVUkxzKSYmdm9pZCAwIT09YT9hOltdLGQuYmFzZVVybF0paWYobiYmKG51bGw9PT0odT1lLnVybCl8fHZvaWQgMD09PXU/dm9pZCAwOnUuc3RhcnRzV2l0aChuKSkpe3Q9ITA7YnJlYWt9aWYoIXQpe2w9ITE7YnJlYWt9fWNvbnN0IGg9W107aWYobClyZXR1cm4gdC5mb3JFYWNoKChlPT57aC5wdXNoKG4ucmVxdWVzdChlKSl9KSksKG51bGw9PW4/dm9pZCAwOm4uYWxsKSYmbi5hbGwoaCkudGhlbigoZT0+UHJvbWlzZS5yZXNvbHZlKGUpKSkuY2F0Y2goKHQ9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgcyxhLHU7aWYoNDAxPT09KG51bGw9PT0ocz1udWxsPT10P3ZvaWQgMDp0LnJlc3BvbnNlKXx8dm9pZCAwPT09cz92b2lkIDA6cy5zdGF0dXMpfHwhKG51bGw9PXQ/dm9pZCAwOnQucmVzcG9uc2UpKXtsZXQgczt0cnl7cz15aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5yZWZyZXNoQWNjZXNzVG9rZW4oKX1jYXRjaChlKXt0aHJvdyByJiYoImZ1bmN0aW9uIj09dHlwZW9mIGkmJih5aWVsZCBpKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7Y29kZTpifSkpKSwiZnVuY3Rpb24iPT10eXBlb2YgbyYmbygpKSxuZXcgYygiU1BBLUFVVEhfSEVMUEVSLUhSQS1TRTAxIixudWxsIT09KGE9bnVsbD09ZT92b2lkIDA6ZS5uYW1lKSYmdm9pZCAwIT09YT9hOiJSZWZyZXNoIHRva2VuIHJlcXVlc3QgZmFpbGVkLiIsbnVsbCE9PSh1PW51bGw9PWU/dm9pZCAwOmUubWVzc2FnZSkmJnZvaWQgMCE9PXU/dToiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIHJlZnJlc2ggdGhlIGFjY2VzcyB0b2tlbiBmb2xsb3dpbmcgYSA0MDEgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLiIpfWlmKHMpcmV0dXJuIG4uYWxsJiZuLmFsbChoKS50aGVuKChlPT5Qcm9taXNlLnJlc29sdmUoZSkpKS5jYXRjaCgodD0+ZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiByJiYoImZ1bmN0aW9uIj09dHlwZW9mIGkmJih5aWVsZCBpKHQpKSwiZnVuY3Rpb24iPT10eXBlb2YgbyYmbygpKSxQcm9taXNlLnJlamVjdCh0KX0pKSkpfXJldHVybiByJiYoImZ1bmN0aW9uIj09dHlwZW9mIGkmJih5aWVsZCBpKHQpKSwiZnVuY3Rpb24iPT10eXBlb2YgbyYmbygpKSxQcm9taXNlLnJlamVjdCh0KX0pKSkpO3Rocm93IG5ldyBjKCJTUEEtQVVUSF9IRUxQRVItSFJBLUlWMDIiLCJSZXF1ZXN0IHRvIHRoZSBwcm92aWRlZCBlbmRwb2ludCBpcyBwcm9oaWJpdGVkLiIsIlJlcXVlc3RzIGNhbiBvbmx5IGJlIHNlbnQgdG8gcmVzb3VyY2Ugc2VydmVycyBzcGVjaWZpZWQgYnkgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIGF0dHJpYnV0ZSB3aGlsZSBpbml0aWFsaXppbmcgdGhlIFNESy4gVGhlIHNwZWNpZmllZCBlbmRwb2ludCBpbiB0aGlzIHJlcXVlc3QgY2Fubm90IGJlIGZvdW5kIGFtb25nIHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCIpfSkpfXJlcXVlc3RBY2Nlc3NUb2tlbih0LG4scixpLG8scyl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBhPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCk7aWYoYS5zdG9yYWdlPT09ay5Ccm93c2VyTWVtb3J5JiZhLmVuYWJsZVBLQ0UmJm4pe2NvbnN0IGU9VC5nZXRQS0NFKHUuZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShuKSk7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuc2V0UEtDRUNvZGUodS5leHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtKG4pLGUpfWVsc2UgYS5zdG9yYWdlPT09ay5XZWJXb3JrZXImJmkmJih5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5zZXRQS0NFQ29kZShpLG51bGwhPW8/bzoiIikpO3JldHVybiB0P3RoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LnJlcXVlc3RBY2Nlc3NUb2tlbih0LG51bGwhPW4/bjoiIixudWxsIT1vP286IiIsdm9pZCAwLHMpLnRoZW4oKCgpPT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIGEuc3RvcmFnZSE9PWsuV2ViV29ya2VyPyhULnNldFNpZ25PdXRVUkwoeWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0U2lnbk91dFVSTCgpLGEuY2xpZW50SUQsdGhpcy5faW5zdGFuY2VJRCksdGhpcy5fc3BhSGVscGVyJiYodGhpcy5fc3BhSGVscGVyLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLHRoaXMuX3NwYUhlbHBlci5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KHRoaXMpKSxyJiYiZnVuY3Rpb24iPT10eXBlb2YgciYmYS5lbmFibGVPSURDU2Vzc2lvbk1hbmFnZW1lbnQmJnIoKSk6dGhpcy5fc3BhSGVscGVyJiZ0aGlzLl9zcGFIZWxwZXIucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSh0aGlzKSx0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRCYXNpY1VzZXJJbmZvKCl9KSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKTpQcm9taXNlLnJlamVjdChuZXcgYygiU1BBLUFVVEhfSEVMUEVSLVJBVDEtTkYwMSIsIk5vIGF1dGhvcml6YXRpb24gY29kZS4iLCJObyBhdXRob3JpemF0aW9uIGNvZGUgd2FzIGZvdW5kLiIpKX0pKX10cnlTaWduSW5TaWxlbnRseSh0LG4scixpLG8pe3ZhciBzO3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYoVC5pc0luaXRpYWxpemVkU2lsZW50U2lnbkluKCkpcmV0dXJuIHlpZWxkIHIucmVjZWl2ZVByb21wdE5vbmVSZXNwb25zZSgpLFByb21pc2UucmVzb2x2ZSh7YWxsb3dlZFNjb3BlczoiIixkaXNwbGF5TmFtZToiIixlbWFpbDoiIixzZXNzaW9uU3RhdGU6IiIsc3ViOiIiLHRlbmFudERvbWFpbjoiIix1c2VybmFtZToiIn0pO2NvbnN0IGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJwSUZyYW1lIiksYz1udWxsPT09KHM9bnVsbD09YT92b2lkIDA6YS5jb250ZW50RG9jdW1lbnQpfHx2b2lkIDA9PT1zP3ZvaWQgMDpzLmdldEVsZW1lbnRCeUlkKCJwcm9tcHROb25lSUZyYW1lIik7dHJ5e2NvbnN0IGU9eWllbGQgdChpKTtjLnNyYz1lfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX1yZXR1cm4gbmV3IFByb21pc2UoKCh0LHIpPT57Y29uc3QgaT1zZXRUaW1lb3V0KCgoKT0+e3QoITEpfSksMWU0KSxzPWE9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgZSxjLHUsbDtjb25zdCBkPWEuZGF0YTsiY2hlY2tfc2Vzc2lvbl9zaWduZWRfb3V0Ij09KG51bGw9PWQ/dm9pZCAwOmQudHlwZSkmJih3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIscyksY2xlYXJUaW1lb3V0KGkpLHQoITEpKSwiY2hlY2tfc2Vzc2lvbl9zaWduZWRfaW4iPT0obnVsbD09ZD92b2lkIDA6ZC50eXBlKSYmKG51bGw9PT0oZT1udWxsPT1kP3ZvaWQgMDpkLmRhdGEpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmNvZGUpJiZuKG51bGw9PT0oYz1udWxsPT1kP3ZvaWQgMDpkLmRhdGEpfHx2b2lkIDA9PT1jP3ZvaWQgMDpjLmNvZGUsbnVsbD09PSh1PW51bGw9PWQ/dm9pZCAwOmQuZGF0YSl8fHZvaWQgMD09PXU/dm9pZCAwOnUuc2Vzc2lvblN0YXRlLG51bGw9PT0obD1udWxsPT1kP3ZvaWQgMDpkLmRhdGEpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLnN0YXRlLG8pLnRoZW4oKGU9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIscyksdChlKX0pKS5jYXRjaCgoZT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixzKSxyKGUpfSkpLmZpbmFsbHkoKCgpPT57Y2xlYXJUaW1lb3V0KGkpfSkpfSkpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixzKX0pKX0pKX1oYW5kbGVTaWduSW4odCxuLHIpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpO2lmKHlpZWxkIHQoKSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHthbGxvd2VkU2NvcGVzOiIiLGRpc3BsYXlOYW1lOiIiLGVtYWlsOiIiLHNlc3Npb25TdGF0ZToiIixzdWI6IiIsdGVuYW50RG9tYWluOiIiLHVzZXJuYW1lOiIifSk7aWYoZS5zdG9yYWdlIT09ay5XZWJXb3JrZXImJih5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5pc0F1dGhlbnRpY2F0ZWQoKSkpcmV0dXJuIHRoaXMuX3NwYUhlbHBlci5jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoKSx0aGlzLl9zcGFIZWxwZXIucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSh0aGlzKSxlLmVuYWJsZU9JRENTZXNzaW9uTWFuYWdlbWVudCYmbigpLFByb21pc2UucmVzb2x2ZSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRCYXNpY1VzZXJJbmZvKCkpO2NvbnN0IGk9bmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZikuc2VhcmNoUGFyYW1zLmdldCh3KSxvPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpLnNlYXJjaFBhcmFtcy5nZXQoXyk7aWYoaSl7Y29uc3QgZT1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTt0aHJvdyBlLnNlYXJjaFBhcmFtcy5kZWxldGUodyksZS5zZWFyY2hQYXJhbXMuZGVsZXRlKF8pLGhpc3RvcnkucHVzaFN0YXRlKG51bGwsZG9jdW1lbnQudGl0bGUsZS50b1N0cmluZygpKSxuZXcgYygiU1BBLUFVVEhfSEVMUEVSLVNJLVNFMDEiLGksbnVsbCE9bz9vOiIiKX1pZihlLnN0b3JhZ2U9PT1rLldlYldvcmtlciYmcil7Y29uc3QgZT15aWVsZCByKCk7aWYoZSlyZXR1cm4gZX19KSl9YXR0YWNoVG9rZW5Ub1JlcXVlc3RDb25maWcodCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPU9iamVjdC5hc3NpZ24oe2F0dGFjaFRva2VuOiEwfSx0KTtlLmF0dGFjaFRva2VuJiYoZS5zaG91bGRBdHRhY2hJRFBBY2Nlc3NUb2tlbj90LmhlYWRlcnM9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuaGVhZGVycykse0F1dGhvcml6YXRpb246IkJlYXJlciAiLmNvbmNhdCh5aWVsZCB0aGlzLmdldElEUEFjY2Vzc1Rva2VuKCkpfSk6dC5oZWFkZXJzPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmhlYWRlcnMpLHtBdXRob3JpemF0aW9uOiJCZWFyZXIgIi5jb25jYXQoeWllbGQgdGhpcy5nZXRBY2Nlc3NUb2tlbigpKX0pKX0pKX1nZXRCYXNpY1VzZXJJbmZvKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0QmFzaWNVc2VySW5mbygpfSkpfWdldERlY29kZWRJRFRva2VuKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0RGVjb2RlZElEVG9rZW4oKX0pKX1nZXREZWNvZGVkSURQSURUb2tlbigpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldERlY29kZWRJRFRva2VuKCl9KSl9Z2V0Q3J5cHRvSGVscGVyKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0Q3J5cHRvSGVscGVyKCl9KSl9Z2V0SURUb2tlbigpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldElEVG9rZW4oKX0pKX1nZXRPSURDU2VydmljZUVuZHBvaW50cygpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCl9KSl9Z2V0QWNjZXNzVG9rZW4oKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRBY2Nlc3NUb2tlbigpfSkpfWdldElEUEFjY2Vzc1Rva2VuKCl7dmFyIHQ7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbnVsbD09PSh0PXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YSgpKXx8dm9pZCAwPT09dD92b2lkIDA6dC5hY2Nlc3NfdG9rZW59KSl9Z2V0RGF0YUxheWVyKCl7cmV0dXJuIHRoaXMuX2RhdGFMYXllcn1pc0F1dGhlbnRpY2F0ZWQoKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5pc0F1dGhlbnRpY2F0ZWQoKX0pKX19Y2xhc3MgQXtjb25zdHJ1Y3RvcihlKXt0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudD1lLHRoaXMuX2RhdGFMYXllcj10aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXREYXRhTGF5ZXIoKX1yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KHQpe3ZhciBuLHI7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZighKG51bGwhPT0ocj1udWxsPT09KG49eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKSl8fHZvaWQgMD09PW4/dm9pZCAwOm4ucGVyaW9kaWNUb2tlblJlZnJlc2gpJiZ2b2lkIDAhPT1yJiZyKSlyZXR1cm47Y29uc3Qgbz15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKTtpZihvLnJlZnJlc2hfdG9rZW4pe2NvbnN0IG49cGFyc2VJbnQoby5leHBpcmVzX2luKSxyPXNldFRpbWVvdXQoKCgpPT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdC5yZWZyZXNoQWNjZXNzVG9rZW4oKX0pKSksMWUzKihuPD0xMD9uOm4tMTApKTt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihpLEpTT04uc3RyaW5naWZ5KHIpKX19KSl9Z2V0UmVmcmVzaFRpbWVvdXRUaW1lcigpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGkpKT9KU09OLnBhcnNlKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGkpKTotMX0pKX1jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQodCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZih0KXJldHVybiB2b2lkIGNsZWFyVGltZW91dCh0KTtjb25zdCBlPXlpZWxkIHRoaXMuZ2V0UmVmcmVzaFRpbWVvdXRUaW1lcigpOy0xIT09ZSYmY2xlYXJUaW1lb3V0KGUpfSkpfX12YXIgQz0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOnt9O2Z1bmN0aW9uIEQoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsImRlZmF1bHQiKT9lLmRlZmF1bHQ6ZX1mdW5jdGlvbiBQKGUpe2lmKGUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsbik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbixyLmdldD9yOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlW25dfX0pfSkpLHR9dmFyIEk9e2V4cG9ydHM6e319LE89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIG49bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLHI9MDtyPG4ubGVuZ3RoO3IrKyluW3JdPWFyZ3VtZW50c1tyXTtyZXR1cm4gZS5hcHBseSh0LG4pfX0sVT1PLEw9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztmdW5jdGlvbiBIKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpfWZ1bmN0aW9uIE0oZSl7cmV0dXJuIHZvaWQgMD09PWV9ZnVuY3Rpb24gaihlKXtyZXR1cm4iW29iamVjdCBBcnJheUJ1ZmZlcl0iPT09TC5jYWxsKGUpfWZ1bmN0aW9uIHEoZSl7cmV0dXJuIG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGV9ZnVuY3Rpb24gTihlKXtpZigiW29iamVjdCBPYmplY3RdIiE9PUwuY2FsbChlKSlyZXR1cm4hMTt2YXIgdD1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk7cmV0dXJuIG51bGw9PT10fHx0PT09T2JqZWN0LnByb3RvdHlwZX1mdW5jdGlvbiB4KGUpe3JldHVybiJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1MLmNhbGwoZSl9ZnVuY3Rpb24gSyhlLHQpe2lmKG51bGwhPWUpaWYoIm9iamVjdCIhPXR5cGVvZiBlJiYoZT1bZV0pLEgoZSkpZm9yKHZhciBuPTAscj1lLmxlbmd0aDtuPHI7bisrKXQuY2FsbChudWxsLGVbbl0sbixlKTtlbHNlIGZvcih2YXIgaSBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLGkpJiZ0LmNhbGwobnVsbCxlW2ldLGksZSl9dmFyIEI9e2lzQXJyYXk6SCxpc0FycmF5QnVmZmVyOmosaXNCdWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPT1lJiYhTShlKSYmbnVsbCE9PWUuY29uc3RydWN0b3ImJiFNKGUuY29uc3RydWN0b3IpJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihlKX0saXNGb3JtRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBGb3JtRGF0YV0iPT09TC5jYWxsKGUpfSxpc0FycmF5QnVmZmVyVmlldzpmdW5jdGlvbihlKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZBcnJheUJ1ZmZlci5pc1ZpZXc/QXJyYXlCdWZmZXIuaXNWaWV3KGUpOmUmJmUuYnVmZmVyJiZqKGUuYnVmZmVyKX0saXNTdHJpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlfSxpc051bWJlcjpmdW5jdGlvbihlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGV9LGlzT2JqZWN0OnEsaXNQbGFpbk9iamVjdDpOLGlzVW5kZWZpbmVkOk0saXNEYXRlOmZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IERhdGVdIj09PUwuY2FsbChlKX0saXNGaWxlOmZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEZpbGVdIj09PUwuY2FsbChlKX0saXNCbG9iOmZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEJsb2JdIj09PUwuY2FsbChlKX0saXNGdW5jdGlvbjp4LGlzU3RyZWFtOmZ1bmN0aW9uKGUpe3JldHVybiBxKGUpJiZ4KGUucGlwZSl9LGlzVVJMU2VhcmNoUGFyYW1zOmZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IFVSTFNlYXJjaFBhcmFtc10iPT09TC5jYWxsKGUpfSxpc1N0YW5kYXJkQnJvd3NlckVudjpmdW5jdGlvbigpe3JldHVybigidW5kZWZpbmVkIj09dHlwZW9mIG5hdmlnYXRvcnx8IlJlYWN0TmF0aXZlIiE9PW5hdmlnYXRvci5wcm9kdWN0JiYiTmF0aXZlU2NyaXB0IiE9PW5hdmlnYXRvci5wcm9kdWN0JiYiTlMiIT09bmF2aWdhdG9yLnByb2R1Y3QpJiYoInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJiJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQpfSxmb3JFYWNoOkssbWVyZ2U6ZnVuY3Rpb24gZSgpe3ZhciB0PXt9O2Z1bmN0aW9uIG4obixyKXtOKHRbcl0pJiZOKG4pP3Rbcl09ZSh0W3JdLG4pOk4obik/dFtyXT1lKHt9LG4pOkgobik/dFtyXT1uLnNsaWNlKCk6dFtyXT1ufWZvcih2YXIgcj0wLGk9YXJndW1lbnRzLmxlbmd0aDtyPGk7cisrKUsoYXJndW1lbnRzW3JdLG4pO3JldHVybiB0fSxleHRlbmQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBLKHQsKGZ1bmN0aW9uKHQscil7ZVtyXT1uJiYiZnVuY3Rpb24iPT10eXBlb2YgdD9VKHQsbik6dH0pKSxlfSx0cmltOmZ1bmN0aW9uKGUpe3JldHVybiBlLnRyaW0/ZS50cmltKCk6ZS5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIil9LHN0cmlwQk9NOmZ1bmN0aW9uKGUpe3JldHVybiA2NTI3OT09PWUuY2hhckNvZGVBdCgwKSYmKGU9ZS5zbGljZSgxKSksZX19LEo9QjtmdW5jdGlvbiBGKGUpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoZSkucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjAvZywiKyIpLnJlcGxhY2UoLyU1Qi9naSwiWyIpLnJlcGxhY2UoLyU1RC9naSwiXSIpfXZhciBXPWZ1bmN0aW9uKGUsdCxuKXtpZighdClyZXR1cm4gZTt2YXIgcjtpZihuKXI9bih0KTtlbHNlIGlmKEouaXNVUkxTZWFyY2hQYXJhbXModCkpcj10LnRvU3RyaW5nKCk7ZWxzZXt2YXIgaT1bXTtKLmZvckVhY2godCwoZnVuY3Rpb24oZSx0KXtudWxsIT1lJiYoSi5pc0FycmF5KGUpP3QrPSJbXSI6ZT1bZV0sSi5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUpe0ouaXNEYXRlKGUpP2U9ZS50b0lTT1N0cmluZygpOkouaXNPYmplY3QoZSkmJihlPUpTT04uc3RyaW5naWZ5KGUpKSxpLnB1c2goRih0KSsiPSIrRihlKSl9KSkpfSkpLHI9aS5qb2luKCImIil9aWYocil7dmFyIG89ZS5pbmRleE9mKCIjIik7LTEhPT1vJiYoZT1lLnNsaWNlKDAsbykpLGUrPSgtMT09PWUuaW5kZXhPZigiPyIpPyI/IjoiJiIpK3J9cmV0dXJuIGV9LHo9QjtmdW5jdGlvbiBZKCl7dGhpcy5oYW5kbGVycz1bXX1ZLnByb3RvdHlwZS51c2U9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDplLHJlamVjdGVkOnQsc3luY2hyb25vdXM6ISFuJiZuLnN5bmNocm9ub3VzLHJ1bldoZW46bj9uLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9LFkucHJvdG90eXBlLmVqZWN0PWZ1bmN0aW9uKGUpe3RoaXMuaGFuZGxlcnNbZV0mJih0aGlzLmhhbmRsZXJzW2VdPW51bGwpfSxZLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGUpe3ouZm9yRWFjaCh0aGlzLmhhbmRsZXJzLChmdW5jdGlvbih0KXtudWxsIT09dCYmZSh0KX0pKX07dmFyIFY9WSxHPSJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e307ZnVuY3Rpb24gWCgpe3Rocm93IG5ldyBFcnJvcigic2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfWZ1bmN0aW9uICQoKXt0aHJvdyBuZXcgRXJyb3IoImNsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfXZhciBaPVgsUT0kO2Z1bmN0aW9uIGVlKGUpe2lmKFo9PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KGUsMCk7aWYoKFo9PT1YfHwhWikmJnNldFRpbWVvdXQpcmV0dXJuIFo9c2V0VGltZW91dCxzZXRUaW1lb3V0KGUsMCk7dHJ5e3JldHVybiBaKGUsMCl9Y2F0Y2godCl7dHJ5e3JldHVybiBaLmNhbGwobnVsbCxlLDApfWNhdGNoKHQpe3JldHVybiBaLmNhbGwodGhpcyxlLDApfX19ImZ1bmN0aW9uIj09dHlwZW9mIEcuc2V0VGltZW91dCYmKFo9c2V0VGltZW91dCksImZ1bmN0aW9uIj09dHlwZW9mIEcuY2xlYXJUaW1lb3V0JiYoUT1jbGVhclRpbWVvdXQpO3ZhciB0ZSxuZT1bXSxyZT0hMSxpZT0tMTtmdW5jdGlvbiBvZSgpe3JlJiZ0ZSYmKHJlPSExLHRlLmxlbmd0aD9uZT10ZS5jb25jYXQobmUpOmllPS0xLG5lLmxlbmd0aCYmc2UoKSl9ZnVuY3Rpb24gc2UoKXtpZighcmUpe3ZhciBlPWVlKG9lKTtyZT0hMDtmb3IodmFyIHQ9bmUubGVuZ3RoO3Q7KXtmb3IodGU9bmUsbmU9W107KytpZTx0Oyl0ZSYmdGVbaWVdLnJ1bigpO2llPS0xLHQ9bmUubGVuZ3RofXRlPW51bGwscmU9ITEsZnVuY3Rpb24oZSl7aWYoUT09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KGUpO2lmKChRPT09JHx8IVEpJiZjbGVhclRpbWVvdXQpcmV0dXJuIFE9Y2xlYXJUaW1lb3V0LGNsZWFyVGltZW91dChlKTt0cnl7UShlKX1jYXRjaCh0KXt0cnl7cmV0dXJuIFEuY2FsbChudWxsLGUpfWNhdGNoKHQpe3JldHVybiBRLmNhbGwodGhpcyxlKX19fShlKX19ZnVuY3Rpb24gYWUoZSx0KXt0aGlzLmZ1bj1lLHRoaXMuYXJyYXk9dH1hZS5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dGhpcy5mdW4uYXBwbHkobnVsbCx0aGlzLmFycmF5KX07ZnVuY3Rpb24gY2UoKXt9dmFyIHVlPWNlLGxlPWNlLGRlPWNlLGhlPWNlLGZlPWNlLHBlPWNlLGdlPWNlO3ZhciB2ZT1HLnBlcmZvcm1hbmNlfHx7fSx5ZT12ZS5ub3d8fHZlLm1vek5vd3x8dmUubXNOb3d8fHZlLm9Ob3d8fHZlLndlYmtpdE5vd3x8ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX07dmFyIG1lPW5ldyBEYXRlO3ZhciB3ZT17bmV4dFRpY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoYXJndW1lbnRzLmxlbmd0aD4xKWZvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspdFtuLTFdPWFyZ3VtZW50c1tuXTtuZS5wdXNoKG5ldyBhZShlLHQpKSwxIT09bmUubGVuZ3RofHxyZXx8ZWUoc2UpfSx0aXRsZToiYnJvd3NlciIsYnJvd3NlcjohMCxlbnY6e30sYXJndjpbXSx2ZXJzaW9uOiIiLHZlcnNpb25zOnt9LG9uOnVlLGFkZExpc3RlbmVyOmxlLG9uY2U6ZGUsb2ZmOmhlLHJlbW92ZUxpc3RlbmVyOmZlLHJlbW92ZUFsbExpc3RlbmVyczpwZSxlbWl0OmdlLGJpbmRpbmc6ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCIpfSxjd2Q6ZnVuY3Rpb24oKXtyZXR1cm4iLyJ9LGNoZGlyOmZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkIil9LHVtYXNrOmZ1bmN0aW9uKCl7cmV0dXJuIDB9LGhydGltZTpmdW5jdGlvbihlKXt2YXIgdD0uMDAxKnllLmNhbGwodmUpLG49TWF0aC5mbG9vcih0KSxyPU1hdGguZmxvb3IodCUxKjFlOSk7cmV0dXJuIGUmJihuLT1lWzBdLChyLT1lWzFdKTwwJiYobi0tLHIrPTFlOSkpLFtuLHJdfSxwbGF0Zm9ybToiYnJvd3NlciIscmVsZWFzZTp7fSxjb25maWc6e30sdXB0aW1lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlLW1lKS8xZTN9fSxfZT13ZSxTZT1CLGJlPWZ1bmN0aW9uKGUsdCxuLHIsaSl7cmV0dXJuIGUuY29uZmlnPXQsbiYmKGUuY29kZT1uKSxlLnJlcXVlc3Q9cixlLnJlc3BvbnNlPWksZS5pc0F4aW9zRXJyb3I9ITAsZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixudW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhpcy5maWxlTmFtZSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6dGhpcy5jb25maWcsY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMucmVzcG9uc2UmJnRoaXMucmVzcG9uc2Uuc3RhdHVzP3RoaXMucmVzcG9uc2Uuc3RhdHVzOm51bGx9fSxlfSxrZT17c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX0sRWU9YmUsVGU9ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbz1uZXcgRXJyb3IoZSk7cmV0dXJuIEVlKG8sdCxuLHIsaSl9LFJlPVRlLEFlPUIsQ2U9QWUuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKT97d3JpdGU6ZnVuY3Rpb24oZSx0LG4scixpLG8pe3ZhciBzPVtdO3MucHVzaChlKyI9IitlbmNvZGVVUklDb21wb25lbnQodCkpLEFlLmlzTnVtYmVyKG4pJiZzLnB1c2goImV4cGlyZXM9IituZXcgRGF0ZShuKS50b0dNVFN0cmluZygpKSxBZS5pc1N0cmluZyhyKSYmcy5wdXNoKCJwYXRoPSIrciksQWUuaXNTdHJpbmcoaSkmJnMucHVzaCgiZG9tYWluPSIraSksITA9PT1vJiZzLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1zLmpvaW4oIjsgIil9LHJlYWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXHMqKSgiK2UrIik9KFteO10qKSIpKTtyZXR1cm4gdD9kZWNvZGVVUklDb21wb25lbnQodFszXSk6bnVsbH0scmVtb3ZlOmZ1bmN0aW9uKGUpe3RoaXMud3JpdGUoZSwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZTpmdW5jdGlvbigpe30scmVhZDpmdW5jdGlvbigpe3JldHVybiBudWxsfSxyZW1vdmU6ZnVuY3Rpb24oKXt9fSxEZT1mdW5jdGlvbihlKXtyZXR1cm4vXihbYS16XVthLXpcZCtcLS5dKjopP1wvXC8vaS50ZXN0KGUpfSxQZT1mdW5jdGlvbihlLHQpe3JldHVybiB0P2UucmVwbGFjZSgvXC8rJC8sIiIpKyIvIit0LnJlcGxhY2UoL15cLysvLCIiKTplfSxJZT1CLE9lPVsiYWdlIiwiYXV0aG9yaXphdGlvbiIsImNvbnRlbnQtbGVuZ3RoIiwiY29udGVudC10eXBlIiwiZXRhZyIsImV4cGlyZXMiLCJmcm9tIiwiaG9zdCIsImlmLW1vZGlmaWVkLXNpbmNlIiwiaWYtdW5tb2RpZmllZC1zaW5jZSIsImxhc3QtbW9kaWZpZWQiLCJsb2NhdGlvbiIsIm1heC1mb3J3YXJkcyIsInByb3h5LWF1dGhvcml6YXRpb24iLCJyZWZlcmVyIiwicmV0cnktYWZ0ZXIiLCJ1c2VyLWFnZW50Il0sVWU9QixMZT1VZS5pc1N0YW5kYXJkQnJvd3NlckVudigpP2Z1bmN0aW9uKCl7dmFyIGUsdD0vKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO2Z1bmN0aW9uIHIoZSl7dmFyIHI9ZTtyZXR1cm4gdCYmKG4uc2V0QXR0cmlidXRlKCJocmVmIixyKSxyPW4uaHJlZiksbi5zZXRBdHRyaWJ1dGUoImhyZWYiLHIpLHtocmVmOm4uaHJlZixwcm90b2NvbDpuLnByb3RvY29sP24ucHJvdG9jb2wucmVwbGFjZSgvOiQvLCIiKToiIixob3N0Om4uaG9zdCxzZWFyY2g6bi5zZWFyY2g/bi5zZWFyY2gucmVwbGFjZSgvXlw/LywiIik6IiIsaGFzaDpuLmhhc2g/bi5oYXNoLnJlcGxhY2UoL14jLywiIik6IiIsaG9zdG5hbWU6bi5ob3N0bmFtZSxwb3J0Om4ucG9ydCxwYXRobmFtZToiLyI9PT1uLnBhdGhuYW1lLmNoYXJBdCgwKT9uLnBhdGhuYW1lOiIvIituLnBhdGhuYW1lfX1yZXR1cm4gZT1yKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxmdW5jdGlvbih0KXt2YXIgbj1VZS5pc1N0cmluZyh0KT9yKHQpOnQ7cmV0dXJuIG4ucHJvdG9jb2w9PT1lLnByb3RvY29sJiZuLmhvc3Q9PT1lLmhvc3R9fSgpOmZ1bmN0aW9uKCl7cmV0dXJuITB9O2Z1bmN0aW9uIEhlKGUpe3RoaXMubWVzc2FnZT1lfUhlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJDYW5jZWwiKyh0aGlzLm1lc3NhZ2U/IjogIit0aGlzLm1lc3NhZ2U6IiIpfSxIZS5wcm90b3R5cGUuX19DQU5DRUxfXz0hMDt2YXIgTWU9SGUsamU9QixxZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9bi5jb25maWcudmFsaWRhdGVTdGF0dXM7bi5zdGF0dXMmJnImJiFyKG4uc3RhdHVzKT90KFJlKCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrbi5zdGF0dXMsbi5jb25maWcsbnVsbCxuLnJlcXVlc3QsbikpOmUobil9LE5lPUNlLHhlPVcsS2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmIURlKHQpP1BlKGUsdCk6dH0sQmU9ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGk9e307cmV0dXJuIGU/KEllLmZvckVhY2goZS5zcGxpdCgiXG4iKSwoZnVuY3Rpb24oZSl7aWYocj1lLmluZGV4T2YoIjoiKSx0PUllLnRyaW0oZS5zdWJzdHIoMCxyKSkudG9Mb3dlckNhc2UoKSxuPUllLnRyaW0oZS5zdWJzdHIocisxKSksdCl7aWYoaVt0XSYmT2UuaW5kZXhPZih0KT49MClyZXR1cm47aVt0XT0ic2V0LWNvb2tpZSI9PT10PyhpW3RdP2lbdF06W10pLmNvbmNhdChbbl0pOmlbdF0/aVt0XSsiLCAiK246bn19KSksaSk6aX0sSmU9TGUsRmU9VGUsV2U9a2UsemU9TWUsWWU9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0LG4pe3ZhciByLGk9ZS5kYXRhLG89ZS5oZWFkZXJzLHM9ZS5yZXNwb25zZVR5cGU7ZnVuY3Rpb24gYSgpe2UuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUociksZS5zaWduYWwmJmUuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixyKX1qZS5pc0Zvcm1EYXRhKGkpJiZkZWxldGUgb1siQ29udGVudC1UeXBlIl07dmFyIGM9bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKGUuYXV0aCl7dmFyIHU9ZS5hdXRoLnVzZXJuYW1lfHwiIixsPWUuYXV0aC5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoZS5hdXRoLnBhc3N3b3JkKSk6IiI7by5BdXRob3JpemF0aW9uPSJCYXNpYyAiK2J0b2EodSsiOiIrbCl9dmFyIGQ9S2UoZS5iYXNlVVJMLGUudXJsKTtmdW5jdGlvbiBoKCl7aWYoYyl7dmFyIHI9ImdldEFsbFJlc3BvbnNlSGVhZGVycyJpbiBjP0JlKGMuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpOm51bGwsaT17ZGF0YTpzJiYidGV4dCIhPT1zJiYianNvbiIhPT1zP2MucmVzcG9uc2U6Yy5yZXNwb25zZVRleHQsc3RhdHVzOmMuc3RhdHVzLHN0YXR1c1RleHQ6Yy5zdGF0dXNUZXh0LGhlYWRlcnM6cixjb25maWc6ZSxyZXF1ZXN0OmN9O3FlKChmdW5jdGlvbihlKXt0KGUpLGEoKX0pLChmdW5jdGlvbihlKXtuKGUpLGEoKX0pLGkpLGM9bnVsbH19aWYoYy5vcGVuKGUubWV0aG9kLnRvVXBwZXJDYXNlKCkseGUoZCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxjLnRpbWVvdXQ9ZS50aW1lb3V0LCJvbmxvYWRlbmQiaW4gYz9jLm9ubG9hZGVuZD1oOmMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7YyYmND09PWMucmVhZHlTdGF0ZSYmKDAhPT1jLnN0YXR1c3x8Yy5yZXNwb25zZVVSTCYmMD09PWMucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKSkmJnNldFRpbWVvdXQoaCl9LGMub25hYm9ydD1mdW5jdGlvbigpe2MmJihuKEZlKCJSZXF1ZXN0IGFib3J0ZWQiLGUsIkVDT05OQUJPUlRFRCIsYykpLGM9bnVsbCl9LGMub25lcnJvcj1mdW5jdGlvbigpe24oRmUoIk5ldHdvcmsgRXJyb3IiLGUsbnVsbCxjKSksYz1udWxsfSxjLm9udGltZW91dD1mdW5jdGlvbigpe3ZhciB0PWUudGltZW91dD8idGltZW91dCBvZiAiK2UudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIixyPWUudHJhbnNpdGlvbmFsfHxXZTtlLnRpbWVvdXRFcnJvck1lc3NhZ2UmJih0PWUudGltZW91dEVycm9yTWVzc2FnZSksbihGZSh0LGUsci5jbGFyaWZ5VGltZW91dEVycm9yPyJFVElNRURPVVQiOiJFQ09OTkFCT1JURUQiLGMpKSxjPW51bGx9LGplLmlzU3RhbmRhcmRCcm93c2VyRW52KCkpe3ZhciBmPShlLndpdGhDcmVkZW50aWFsc3x8SmUoZCkpJiZlLnhzcmZDb29raWVOYW1lP05lLnJlYWQoZS54c3JmQ29va2llTmFtZSk6dm9pZCAwO2YmJihvW2UueHNyZkhlYWRlck5hbWVdPWYpfSJzZXRSZXF1ZXN0SGVhZGVyImluIGMmJmplLmZvckVhY2gobywoZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT1pJiYiY29udGVudC10eXBlIj09PXQudG9Mb3dlckNhc2UoKT9kZWxldGUgb1t0XTpjLnNldFJlcXVlc3RIZWFkZXIodCxlKX0pKSxqZS5pc1VuZGVmaW5lZChlLndpdGhDcmVkZW50aWFscyl8fChjLndpdGhDcmVkZW50aWFscz0hIWUud2l0aENyZWRlbnRpYWxzKSxzJiYianNvbiIhPT1zJiYoYy5yZXNwb25zZVR5cGU9ZS5yZXNwb25zZVR5cGUpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLm9uRG93bmxvYWRQcm9ncmVzcyYmYy5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZS5vbkRvd25sb2FkUHJvZ3Jlc3MpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLm9uVXBsb2FkUHJvZ3Jlc3MmJmMudXBsb2FkJiZjLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZS5vblVwbG9hZFByb2dyZXNzKSwoZS5jYW5jZWxUb2tlbnx8ZS5zaWduYWwpJiYocj1mdW5jdGlvbihlKXtjJiYobighZXx8ZSYmZS50eXBlP25ldyB6ZSgiY2FuY2VsZWQiKTplKSxjLmFib3J0KCksYz1udWxsKX0sZS5jYW5jZWxUb2tlbiYmZS5jYW5jZWxUb2tlbi5zdWJzY3JpYmUociksZS5zaWduYWwmJihlLnNpZ25hbC5hYm9ydGVkP3IoKTplLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIscikpKSxpfHwoaT1udWxsKSxjLnNlbmQoaSl9KSl9LFZlPUIsR2U9ZnVuY3Rpb24oZSx0KXtTZS5mb3JFYWNoKGUsKGZ1bmN0aW9uKG4scil7ciE9PXQmJnIudG9VcHBlckNhc2UoKT09PXQudG9VcHBlckNhc2UoKSYmKGVbdF09bixkZWxldGUgZVtyXSl9KSl9LFhlPWJlLCRlPXsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIn07ZnVuY3Rpb24gWmUoZSx0KXshVmUuaXNVbmRlZmluZWQoZSkmJlZlLmlzVW5kZWZpbmVkKGVbIkNvbnRlbnQtVHlwZSJdKSYmKGVbIkNvbnRlbnQtVHlwZSJdPXQpfXZhciBRZSxldD17dHJhbnNpdGlvbmFsOmtlLGFkYXB0ZXI6KCgidW5kZWZpbmVkIiE9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0fHx2b2lkIDAhPT1fZSYmIltvYmplY3QgcHJvY2Vzc10iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKF9lKSkmJihRZT1ZZSksUWUpLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKGUsdCl7cmV0dXJuIEdlKHQsIkFjY2VwdCIpLEdlKHQsIkNvbnRlbnQtVHlwZSIpLFZlLmlzRm9ybURhdGEoZSl8fFZlLmlzQXJyYXlCdWZmZXIoZSl8fFZlLmlzQnVmZmVyKGUpfHxWZS5pc1N0cmVhbShlKXx8VmUuaXNGaWxlKGUpfHxWZS5pc0Jsb2IoZSk/ZTpWZS5pc0FycmF5QnVmZmVyVmlldyhlKT9lLmJ1ZmZlcjpWZS5pc1VSTFNlYXJjaFBhcmFtcyhlKT8oWmUodCwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgiKSxlLnRvU3RyaW5nKCkpOlZlLmlzT2JqZWN0KGUpfHx0JiYiYXBwbGljYXRpb24vanNvbiI9PT10WyJDb250ZW50LVR5cGUiXT8oWmUodCwiYXBwbGljYXRpb24vanNvbiIpLGZ1bmN0aW9uKGUsdCxuKXtpZihWZS5pc1N0cmluZyhlKSl0cnl7cmV0dXJuKHR8fEpTT04ucGFyc2UpKGUpLFZlLnRyaW0oZSl9Y2F0Y2goZSl7aWYoIlN5bnRheEVycm9yIiE9PWUubmFtZSl0aHJvdyBlfXJldHVybihufHxKU09OLnN0cmluZ2lmeSkoZSl9KGUpKTplfV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKGUpe3ZhciB0PXRoaXMudHJhbnNpdGlvbmFsfHxldC50cmFuc2l0aW9uYWwsbj10JiZ0LnNpbGVudEpTT05QYXJzaW5nLHI9dCYmdC5mb3JjZWRKU09OUGFyc2luZyxpPSFuJiYianNvbiI9PT10aGlzLnJlc3BvbnNlVHlwZTtpZihpfHxyJiZWZS5pc1N0cmluZyhlKSYmZS5sZW5ndGgpdHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoKGUpe2lmKGkpe2lmKCJTeW50YXhFcnJvciI9PT1lLm5hbWUpdGhyb3cgWGUoZSx0aGlzLCJFX0pTT05fUEFSU0UiKTt0aHJvdyBlfX1yZXR1cm4gZX1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0yMDAmJmU8MzAwfSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIn19fTtWZS5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCJdLChmdW5jdGlvbihlKXtldC5oZWFkZXJzW2VdPXt9fSkpLFZlLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSwoZnVuY3Rpb24oZSl7ZXQuaGVhZGVyc1tlXT1WZS5tZXJnZSgkZSl9KSk7dmFyIHR0PWV0LG50PUIscnQ9dHQsaXQ9ZnVuY3Rpb24oZSl7cmV0dXJuISghZXx8IWUuX19DQU5DRUxfXyl9LG90PUIsc3Q9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXN8fHJ0O3JldHVybiBudC5mb3JFYWNoKG4sKGZ1bmN0aW9uKG4pe2U9bi5jYWxsKHIsZSx0KX0pKSxlfSxhdD1pdCxjdD10dCx1dD1NZTtmdW5jdGlvbiBsdChlKXtpZihlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKSxlLnNpZ25hbCYmZS5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgdXQoImNhbmNlbGVkIil9dmFyIGR0PUIsaHQ9ZnVuY3Rpb24oZSx0KXt0PXR8fHt9O3ZhciBuPXt9O2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gZHQuaXNQbGFpbk9iamVjdChlKSYmZHQuaXNQbGFpbk9iamVjdCh0KT9kdC5tZXJnZShlLHQpOmR0LmlzUGxhaW5PYmplY3QodCk/ZHQubWVyZ2Uoe30sdCk6ZHQuaXNBcnJheSh0KT90LnNsaWNlKCk6dH1mdW5jdGlvbiBpKG4pe3JldHVybiBkdC5pc1VuZGVmaW5lZCh0W25dKT9kdC5pc1VuZGVmaW5lZChlW25dKT92b2lkIDA6cih2b2lkIDAsZVtuXSk6cihlW25dLHRbbl0pfWZ1bmN0aW9uIG8oZSl7aWYoIWR0LmlzVW5kZWZpbmVkKHRbZV0pKXJldHVybiByKHZvaWQgMCx0W2VdKX1mdW5jdGlvbiBzKG4pe3JldHVybiBkdC5pc1VuZGVmaW5lZCh0W25dKT9kdC5pc1VuZGVmaW5lZChlW25dKT92b2lkIDA6cih2b2lkIDAsZVtuXSk6cih2b2lkIDAsdFtuXSl9ZnVuY3Rpb24gYShuKXtyZXR1cm4gbiBpbiB0P3IoZVtuXSx0W25dKTpuIGluIGU/cih2b2lkIDAsZVtuXSk6dm9pZCAwfXZhciBjPXt1cmw6byxtZXRob2Q6byxkYXRhOm8sYmFzZVVSTDpzLHRyYW5zZm9ybVJlcXVlc3Q6cyx0cmFuc2Zvcm1SZXNwb25zZTpzLHBhcmFtc1NlcmlhbGl6ZXI6cyx0aW1lb3V0OnMsdGltZW91dE1lc3NhZ2U6cyx3aXRoQ3JlZGVudGlhbHM6cyxhZGFwdGVyOnMscmVzcG9uc2VUeXBlOnMseHNyZkNvb2tpZU5hbWU6cyx4c3JmSGVhZGVyTmFtZTpzLG9uVXBsb2FkUHJvZ3Jlc3M6cyxvbkRvd25sb2FkUHJvZ3Jlc3M6cyxkZWNvbXByZXNzOnMsbWF4Q29udGVudExlbmd0aDpzLG1heEJvZHlMZW5ndGg6cyx0cmFuc3BvcnQ6cyxodHRwQWdlbnQ6cyxodHRwc0FnZW50OnMsY2FuY2VsVG9rZW46cyxzb2NrZXRQYXRoOnMscmVzcG9uc2VFbmNvZGluZzpzLHZhbGlkYXRlU3RhdHVzOmF9O3JldHVybiBkdC5mb3JFYWNoKE9iamVjdC5rZXlzKGUpLmNvbmNhdChPYmplY3Qua2V5cyh0KSksKGZ1bmN0aW9uKGUpe3ZhciB0PWNbZV18fGkscj10KGUpO2R0LmlzVW5kZWZpbmVkKHIpJiZ0IT09YXx8KG5bZV09cil9KSksbn0sZnQ9IjAuMjYuMSIscHQ9ZnQsZ3Q9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe2d0W2VdPWZ1bmN0aW9uKG4pe3JldHVybiB0eXBlb2Ygbj09PWV8fCJhIisodDwxPyJuICI6IiAiKStlfX0pKTt2YXIgdnQ9e307Z3QudHJhbnNpdGlvbmFsPWZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIltBeGlvcyB2IitwdCsiXSBUcmFuc2l0aW9uYWwgb3B0aW9uICciK2UrIiciK3QrKG4/Ii4gIituOiIiKX1yZXR1cm4gZnVuY3Rpb24obixpLG8pe2lmKCExPT09ZSl0aHJvdyBuZXcgRXJyb3IocihpLCIgaGFzIGJlZW4gcmVtb3ZlZCIrKHQ/IiBpbiAiK3Q6IiIpKSk7cmV0dXJuIHQmJiF2dFtpXSYmKHZ0W2ldPSEwLGNvbnNvbGUud2FybihyKGksIiBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYiK3QrIiBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSIpKSksIWV8fGUobixpLG8pfX07dmFyIHl0PXthc3NlcnRPcHRpb25zOmZ1bmN0aW9uKGUsdCxuKXtpZigib2JqZWN0IiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIpO2Zvcih2YXIgcj1PYmplY3Qua2V5cyhlKSxpPXIubGVuZ3RoO2ktLSA+MDspe3ZhciBvPXJbaV0scz10W29dO2lmKHMpe3ZhciBhPWVbb10sYz12b2lkIDA9PT1hfHxzKGEsbyxlKTtpZighMCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigib3B0aW9uICIrbysiIG11c3QgYmUgIitjKX1lbHNlIGlmKCEwIT09bil0aHJvdyBFcnJvcigiVW5rbm93biBvcHRpb24gIitvKX19LHZhbGlkYXRvcnM6Z3R9LG10PUIsd3Q9VyxfdD1WLFN0PWZ1bmN0aW9uKGUpe3JldHVybiBsdChlKSxlLmhlYWRlcnM9ZS5oZWFkZXJzfHx7fSxlLmRhdGE9c3QuY2FsbChlLGUuZGF0YSxlLmhlYWRlcnMsZS50cmFuc2Zvcm1SZXF1ZXN0KSxlLmhlYWRlcnM9b3QubWVyZ2UoZS5oZWFkZXJzLmNvbW1vbnx8e30sZS5oZWFkZXJzW2UubWV0aG9kXXx8e30sZS5oZWFkZXJzKSxvdC5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImNvbW1vbiJdLChmdW5jdGlvbih0KXtkZWxldGUgZS5oZWFkZXJzW3RdfSkpLChlLmFkYXB0ZXJ8fGN0LmFkYXB0ZXIpKGUpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiBsdChlKSx0LmRhdGE9c3QuY2FsbChlLHQuZGF0YSx0LmhlYWRlcnMsZS50cmFuc2Zvcm1SZXNwb25zZSksdH0pLChmdW5jdGlvbih0KXtyZXR1cm4gYXQodCl8fChsdChlKSx0JiZ0LnJlc3BvbnNlJiYodC5yZXNwb25zZS5kYXRhPXN0LmNhbGwoZSx0LnJlc3BvbnNlLmRhdGEsdC5yZXNwb25zZS5oZWFkZXJzLGUudHJhbnNmb3JtUmVzcG9uc2UpKSksUHJvbWlzZS5yZWplY3QodCl9KSl9LGJ0PWh0LGt0PXl0LEV0PWt0LnZhbGlkYXRvcnM7ZnVuY3Rpb24gVHQoZSl7dGhpcy5kZWZhdWx0cz1lLHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBfdCxyZXNwb25zZTpuZXcgX3R9fVR0LnByb3RvdHlwZS5yZXF1ZXN0PWZ1bmN0aW9uKGUsdCl7InN0cmluZyI9PXR5cGVvZiBlPyh0PXR8fHt9KS51cmw9ZTp0PWV8fHt9LCh0PWJ0KHRoaXMuZGVmYXVsdHMsdCkpLm1ldGhvZD90Lm1ldGhvZD10Lm1ldGhvZC50b0xvd2VyQ2FzZSgpOnRoaXMuZGVmYXVsdHMubWV0aG9kP3QubWV0aG9kPXRoaXMuZGVmYXVsdHMubWV0aG9kLnRvTG93ZXJDYXNlKCk6dC5tZXRob2Q9ImdldCI7dmFyIG49dC50cmFuc2l0aW9uYWw7dm9pZCAwIT09biYma3QuYXNzZXJ0T3B0aW9ucyhuLHtzaWxlbnRKU09OUGFyc2luZzpFdC50cmFuc2l0aW9uYWwoRXQuYm9vbGVhbiksZm9yY2VkSlNPTlBhcnNpbmc6RXQudHJhbnNpdGlvbmFsKEV0LmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6RXQudHJhbnNpdGlvbmFsKEV0LmJvb2xlYW4pfSwhMSk7dmFyIHI9W10saT0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goKGZ1bmN0aW9uKGUpeyJmdW5jdGlvbiI9PXR5cGVvZiBlLnJ1bldoZW4mJiExPT09ZS5ydW5XaGVuKHQpfHwoaT1pJiZlLnN5bmNocm9ub3VzLHIudW5zaGlmdChlLmZ1bGZpbGxlZCxlLnJlamVjdGVkKSl9KSk7dmFyIG8scz1bXTtpZih0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKChmdW5jdGlvbihlKXtzLnB1c2goZS5mdWxmaWxsZWQsZS5yZWplY3RlZCl9KSksIWkpe3ZhciBhPVtTdCx2b2lkIDBdO2ZvcihBcnJheS5wcm90b3R5cGUudW5zaGlmdC5hcHBseShhLHIpLGE9YS5jb25jYXQocyksbz1Qcm9taXNlLnJlc29sdmUodCk7YS5sZW5ndGg7KW89by50aGVuKGEuc2hpZnQoKSxhLnNoaWZ0KCkpO3JldHVybiBvfWZvcih2YXIgYz10O3IubGVuZ3RoOyl7dmFyIHU9ci5zaGlmdCgpLGw9ci5zaGlmdCgpO3RyeXtjPXUoYyl9Y2F0Y2goZSl7bChlKTticmVha319dHJ5e289U3QoYyl9Y2F0Y2goZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfWZvcig7cy5sZW5ndGg7KW89by50aGVuKHMuc2hpZnQoKSxzLnNoaWZ0KCkpO3JldHVybiBvfSxUdC5wcm90b3R5cGUuZ2V0VXJpPWZ1bmN0aW9uKGUpe3JldHVybiBlPWJ0KHRoaXMuZGVmYXVsdHMsZSksd3QoZS51cmwsZS5wYXJhbXMsZS5wYXJhbXNTZXJpYWxpemVyKS5yZXBsYWNlKC9eXD8vLCIiKX0sbXQuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJvcHRpb25zIl0sKGZ1bmN0aW9uKGUpe1R0LnByb3RvdHlwZVtlXT1mdW5jdGlvbih0LG4pe3JldHVybiB0aGlzLnJlcXVlc3QoYnQobnx8e30se21ldGhvZDplLHVybDp0LGRhdGE6KG58fHt9KS5kYXRhfSkpfX0pKSxtdC5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sKGZ1bmN0aW9uKGUpe1R0LnByb3RvdHlwZVtlXT1mdW5jdGlvbih0LG4scil7cmV0dXJuIHRoaXMucmVxdWVzdChidChyfHx7fSx7bWV0aG9kOmUsdXJsOnQsZGF0YTpufSkpfX0pKTt2YXIgUnQ9VHQsQXQ9TWU7ZnVuY3Rpb24gQ3QoZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO3ZhciB0O3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7dD1lfSkpO3ZhciBuPXRoaXM7dGhpcy5wcm9taXNlLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKG4uX2xpc3RlbmVycyl7dmFyIHQscj1uLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcih0PTA7dDxyO3QrKyluLl9saXN0ZW5lcnNbdF0oZSk7bi5fbGlzdGVuZXJzPW51bGx9fSkpLHRoaXMucHJvbWlzZS50aGVuPWZ1bmN0aW9uKGUpe3ZhciB0LHI9bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe24uc3Vic2NyaWJlKGUpLHQ9ZX0pKS50aGVuKGUpO3JldHVybiByLmNhbmNlbD1mdW5jdGlvbigpe24udW5zdWJzY3JpYmUodCl9LHJ9LGUoKGZ1bmN0aW9uKGUpe24ucmVhc29ufHwobi5yZWFzb249bmV3IEF0KGUpLHQobi5yZWFzb24pKX0pKX1DdC5wcm90b3R5cGUudGhyb3dJZlJlcXVlc3RlZD1mdW5jdGlvbigpe2lmKHRoaXMucmVhc29uKXRocm93IHRoaXMucmVhc29ufSxDdC5wcm90b3R5cGUuc3Vic2NyaWJlPWZ1bmN0aW9uKGUpe3RoaXMucmVhc29uP2UodGhpcy5yZWFzb24pOnRoaXMuX2xpc3RlbmVycz90aGlzLl9saXN0ZW5lcnMucHVzaChlKTp0aGlzLl9saXN0ZW5lcnM9W2VdfSxDdC5wcm90b3R5cGUudW5zdWJzY3JpYmU9ZnVuY3Rpb24oZSl7aWYodGhpcy5fbGlzdGVuZXJzKXt2YXIgdD10aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihlKTstMSE9PXQmJnRoaXMuX2xpc3RlbmVycy5zcGxpY2UodCwxKX19LEN0LnNvdXJjZT1mdW5jdGlvbigpe3ZhciBlLHQ9bmV3IEN0KChmdW5jdGlvbih0KXtlPXR9KSk7cmV0dXJue3Rva2VuOnQsY2FuY2VsOmV9fTt2YXIgRHQ9Q3QsUHQ9QixJdD1CLE90PU8sVXQ9UnQsTHQ9aHQ7dmFyIEh0PWZ1bmN0aW9uIGUodCl7dmFyIG49bmV3IFV0KHQpLHI9T3QoVXQucHJvdG90eXBlLnJlcXVlc3Qsbik7cmV0dXJuIEl0LmV4dGVuZChyLFV0LnByb3RvdHlwZSxuKSxJdC5leHRlbmQocixuKSxyLmNyZWF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gZShMdCh0LG4pKX0scn0odHQpO0h0LkF4aW9zPVV0LEh0LkNhbmNlbD1NZSxIdC5DYW5jZWxUb2tlbj1EdCxIdC5pc0NhbmNlbD1pdCxIdC5WRVJTSU9OPWZ0LEh0LmFsbD1mdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoZSl9LEh0LnNwcmVhZD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuYXBwbHkobnVsbCx0KX19LEh0LmlzQXhpb3NFcnJvcj1mdW5jdGlvbihlKXtyZXR1cm4gUHQuaXNPYmplY3QoZSkmJiEwPT09ZS5pc0F4aW9zRXJyb3J9LEkuZXhwb3J0cz1IdCxJLmV4cG9ydHMuZGVmYXVsdD1IdDt2YXIgTXQsanQ9SS5leHBvcnRzO2xldCBxdD1NdD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuYXR0YWNoVG9rZW49KCk9PlByb21pc2UucmVzb2x2ZSgpLHRoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2s9KCk9Pm51bGwsdGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPSgpPT5udWxsLHRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2s9KCk9Pm51bGwsdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2s9KCk9Pm51bGwsdGhpcy5pbml0PXRoaXMuaW5pdC5iaW5kKHRoaXMpLHRoaXMuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrLmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjay5iaW5kKHRoaXMpLHRoaXMuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrLmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaz10aGlzLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrLmJpbmQodGhpcyl9c3RhdGljIGdldEluc3RhbmNlKCl7cmV0dXJuIHRoaXMuYXhpb3NJbnN0YW5jZXx8KHRoaXMuYXhpb3NJbnN0YW5jZT1qdC5jcmVhdGUoe3dpdGhDcmVkZW50aWFsczohMH0pLHRoaXMuY2xpZW50SW5zdGFuY2V8fCh0aGlzLmNsaWVudEluc3RhbmNlPW5ldyBNdCksdGhpcy5heGlvc0luc3RhbmNlLmludGVyY2VwdG9ycy5yZXF1ZXN0LnVzZSgodD0+ZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmNsaWVudEluc3RhbmNlLnJlcXVlc3RIYW5kbGVyKHQpfSkpKSksdGhpcy5heGlvc0luc3RhbmNlLmludGVyY2VwdG9ycy5yZXNwb25zZS51c2UoKGU9PnRoaXMuY2xpZW50SW5zdGFuY2Uuc3VjY2Vzc0hhbmRsZXIoZSkpLChlPT50aGlzLmNsaWVudEluc3RhbmNlLmVycm9ySGFuZGxlcihlKSkpLHRoaXMuYXhpb3NJbnN0YW5jZS5hbGw9anQuYWxsLHRoaXMuYXhpb3NJbnN0YW5jZS5zcHJlYWQ9anQuc3ByZWFkLHRoaXMuYXhpb3NJbnN0YW5jZS5pbml0PXRoaXMuY2xpZW50SW5zdGFuY2UuaW5pdCx0aGlzLmF4aW9zSW5zdGFuY2UuZW5hYmxlSGFuZGxlcj10aGlzLmNsaWVudEluc3RhbmNlLmVuYWJsZUhhbmRsZXIsdGhpcy5heGlvc0luc3RhbmNlLmRpc2FibGVIYW5kbGVyPXRoaXMuY2xpZW50SW5zdGFuY2UuZGlzYWJsZUhhbmRsZXIsdGhpcy5heGlvc0luc3RhbmNlLmRpc2FibGVIYW5kbGVyV2l0aFRpbWVvdXQ9dGhpcy5jbGllbnRJbnN0YW5jZS5kaXNhYmxlSGFuZGxlcldpdGhUaW1lb3V0LHRoaXMuYXhpb3NJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2s9dGhpcy5jbGllbnRJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2ssdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2ssdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjayx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2spLHRoaXMuYXhpb3NJbnN0YW5jZX1yZXF1ZXN0SGFuZGxlcih0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKHlpZWxkIHRoaXMuYXR0YWNoVG9rZW4odCksbnVsbD09dD92b2lkIDA6dC5zaG91bGRFbmNvZGVUb0Zvcm1EYXRhKXtjb25zdCBlPW51bGw9PXQ/dm9pZCAwOnQuZGF0YSxuPW5ldyBGb3JtRGF0YTtPYmplY3Qua2V5cyhlKS5mb3JFYWNoKCh0PT57bi5hcHBlbmQodCxlW3RdKX0pKSx0LmRhdGE9bn1yZXR1cm4gdC5zdGFydFRpbWVJbk1zPShuZXcgRGF0ZSkuZ2V0VGltZSgpLE10LmlzSGFuZGxlckVuYWJsZWQmJnRoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrJiZ0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrKHQpLHR9KSl9ZXJyb3JIYW5kbGVyKGUpe3Rocm93IE10LmlzSGFuZGxlckVuYWJsZWQmJih0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjayYmdGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjayhlKSx0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiZ0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaygpKSxlfXN1Y2Nlc3NIYW5kbGVyKGUpe3JldHVybiBNdC5pc0hhbmRsZXJFbmFibGVkJiYodGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrJiZ0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2soZSksdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjayYmdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2soKSksZX1pbml0KCl7bGV0IHQ9IShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXSxuPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwO3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7TXQuaXNIYW5kbGVyRW5hYmxlZD10LHRoaXMuYXR0YWNoVG9rZW49bn0pKX1lbmFibGVIYW5kbGVyKCl7TXQuaXNIYW5kbGVyRW5hYmxlZD0hMH1kaXNhYmxlSGFuZGxlcigpe010LmlzSGFuZGxlckVuYWJsZWQ9ITF9ZGlzYWJsZUhhbmRsZXJXaXRoVGltZW91dCgpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpNdC5ERUZBVUxUX0hBTkRMRVJfRElTQUJMRV9USU1FT1VUO010LmlzSGFuZGxlckVuYWJsZWQ9ITEsc2V0VGltZW91dCgoKCk9PntNdC5pc0hhbmRsZXJFbmFibGVkPSEwfSksZSl9c2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrKGUpe3RoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2s9ZX1zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayhlKXt0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9ZX1zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2soZSl7dGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjaz1lfXNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2soZSl7dGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2s9ZX19O3F0LkRFRkFVTFRfSEFORExFUl9ESVNBQkxFX1RJTUVPVVQ9MWUzLHF0PU10PWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG89YXJndW1lbnRzLmxlbmd0aCxzPW88Mz90Om51bGw9PT1yP3I9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pOnI7aWYoIm9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiYiZnVuY3Rpb24iPT10eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSlzPVJlZmxlY3QuZGVjb3JhdGUoZSx0LG4scik7ZWxzZSBmb3IodmFyIGE9ZS5sZW5ndGgtMTthPj0wO2EtLSkoaT1lW2FdKSYmKHM9KG88Mz9pKHMpOm8+Mz9pKHQsbixzKTppKHQsbikpfHxzKTtyZXR1cm4gbz4zJiZzJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHMpLHN9KFtlPT57fV0scXQpO2NsYXNzIE50e2NvbnN0cnVjdG9yKCl7dGhpcy5fZGF0YT1uZXcgTWFwfXNldERhdGEodCxuKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuX2RhdGEuc2V0KHQsbil9KSl9Z2V0RGF0YSh0KXt2YXIgbixyO3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG51bGwhPT0ocj1udWxsPT09KG49dGhpcy5fZGF0YSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uZ2V0KHQpKSYmdm9pZCAwIT09cj9yOiJ7fSJ9KSl9cmVtb3ZlRGF0YSh0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuX2RhdGEuZGVsZXRlKHQpfSkpfX12YXIgeHQ9W10sS3Q9W10sQnQ9InVuZGVmaW5lZCIhPXR5cGVvZiBVaW50OEFycmF5P1VpbnQ4QXJyYXk6QXJyYXksSnQ9ITE7ZnVuY3Rpb24gRnQoKXtKdD0hMDtmb3IodmFyIGU9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLHQ9MCxuPWUubGVuZ3RoO3Q8bjsrK3QpeHRbdF09ZVt0XSxLdFtlLmNoYXJDb2RlQXQodCldPXQ7S3RbIi0iLmNoYXJDb2RlQXQoMCldPTYyLEt0WyJfIi5jaGFyQ29kZUF0KDApXT02M31mdW5jdGlvbiBXdChlLHQsbil7Zm9yKHZhciByLGksbz1bXSxzPXQ7czxuO3MrPTMpcj0oZVtzXTw8MTYpKyhlW3MrMV08PDgpK2VbcysyXSxvLnB1c2goeHRbKGk9cik+PjE4JjYzXSt4dFtpPj4xMiY2M10reHRbaT4+NiY2M10reHRbNjMmaV0pO3JldHVybiBvLmpvaW4oIiIpfWZ1bmN0aW9uIHp0KGUpe3ZhciB0O0p0fHxGdCgpO2Zvcih2YXIgbj1lLmxlbmd0aCxyPW4lMyxpPSIiLG89W10scz0xNjM4MyxhPTAsYz1uLXI7YTxjO2ErPXMpby5wdXNoKFd0KGUsYSxhK3M+Yz9jOmErcykpO3JldHVybiAxPT09cj8odD1lW24tMV0saSs9eHRbdD4+Ml0saSs9eHRbdDw8NCY2M10saSs9Ij09Iik6Mj09PXImJih0PShlW24tMl08PDgpK2Vbbi0xXSxpKz14dFt0Pj4xMF0saSs9eHRbdD4+NCY2M10saSs9eHRbdDw8MiY2M10saSs9Ij0iKSxvLnB1c2goaSksby5qb2luKCIiKX1mdW5jdGlvbiBZdChlLHQsbixyLGkpe3ZhciBvLHMsYT04Kmktci0xLGM9KDE8PGEpLTEsdT1jPj4xLGw9LTcsZD1uP2ktMTowLGg9bj8tMToxLGY9ZVt0K2RdO2ZvcihkKz1oLG89ZiYoMTw8LWwpLTEsZj4+PS1sLGwrPWE7bD4wO289MjU2Km8rZVt0K2RdLGQrPWgsbC09OCk7Zm9yKHM9byYoMTw8LWwpLTEsbz4+PS1sLGwrPXI7bD4wO3M9MjU2KnMrZVt0K2RdLGQrPWgsbC09OCk7aWYoMD09PW8pbz0xLXU7ZWxzZXtpZihvPT09YylyZXR1cm4gcz9OYU46MS8wKihmPy0xOjEpO3MrPU1hdGgucG93KDIsciksby09dX1yZXR1cm4oZj8tMToxKSpzKk1hdGgucG93KDIsby1yKX1mdW5jdGlvbiBWdChlLHQsbixyLGksbyl7dmFyIHMsYSxjLHU9OCpvLWktMSxsPSgxPDx1KS0xLGQ9bD4+MSxoPTIzPT09aT9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAsZj1yPzA6by0xLHA9cj8xOi0xLGc9dDwwfHwwPT09dCYmMS90PDA/MTowO2Zvcih0PU1hdGguYWJzKHQpLGlzTmFOKHQpfHx0PT09MS8wPyhhPWlzTmFOKHQpPzE6MCxzPWwpOihzPU1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjIpLHQqKGM9TWF0aC5wb3coMiwtcykpPDEmJihzLS0sYyo9MiksKHQrPXMrZD49MT9oL2M6aCpNYXRoLnBvdygyLDEtZCkpKmM+PTImJihzKyssYy89MikscytkPj1sPyhhPTAscz1sKTpzK2Q+PTE/KGE9KHQqYy0xKSpNYXRoLnBvdygyLGkpLHMrPWQpOihhPXQqTWF0aC5wb3coMixkLTEpKk1hdGgucG93KDIsaSkscz0wKSk7aT49ODtlW24rZl09MjU1JmEsZis9cCxhLz0yNTYsaS09OCk7Zm9yKHM9czw8aXxhLHUrPWk7dT4wO2VbbitmXT0yNTUmcyxmKz1wLHMvPTI1Nix1LT04KTtlW24rZi1wXXw9MTI4Kmd9dmFyIEd0PXt9LnRvU3RyaW5nLFh0PUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PUd0LmNhbGwoZSl9O2VuLlRZUEVEX0FSUkFZX1NVUFBPUlQ9dm9pZCAwPT09Ry5UWVBFRF9BUlJBWV9TVVBQT1JUfHxHLlRZUEVEX0FSUkFZX1NVUFBPUlQ7dmFyICR0PVp0KCk7ZnVuY3Rpb24gWnQoKXtyZXR1cm4gZW4uVFlQRURfQVJSQVlfU1VQUE9SVD8yMTQ3NDgzNjQ3OjEwNzM3NDE4MjN9ZnVuY3Rpb24gUXQoZSx0KXtpZihadCgpPHQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoIik7cmV0dXJuIGVuLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9bmV3IFVpbnQ4QXJyYXkodCkpLl9fcHJvdG9fXz1lbi5wcm90b3R5cGU6KG51bGw9PT1lJiYoZT1uZXcgZW4odCkpLGUubGVuZ3RoPXQpLGV9ZnVuY3Rpb24gZW4oZSx0LG4pe2lmKCEoZW4uVFlQRURfQVJSQVlfU1VQUE9SVHx8dGhpcyBpbnN0YW5jZW9mIGVuKSlyZXR1cm4gbmV3IGVuKGUsdCxuKTtpZigibnVtYmVyIj09dHlwZW9mIGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoIklmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIik7cmV0dXJuIHJuKHRoaXMsZSl9cmV0dXJuIHRuKHRoaXMsZSx0LG4pfWZ1bmN0aW9uIHRuKGUsdCxuLHIpe2lmKCJudW1iZXIiPT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJyk7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP2Z1bmN0aW9uKGUsdCxuLHIpe2lmKHQuYnl0ZUxlbmd0aCxuPDB8fHQuYnl0ZUxlbmd0aDxuKXRocm93IG5ldyBSYW5nZUVycm9yKCInb2Zmc2V0JyBpcyBvdXQgb2YgYm91bmRzIik7aWYodC5ieXRlTGVuZ3RoPG4rKHJ8fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCInbGVuZ3RoJyBpcyBvdXQgb2YgYm91bmRzIik7dD12b2lkIDA9PT1uJiZ2b2lkIDA9PT1yP25ldyBVaW50OEFycmF5KHQpOnZvaWQgMD09PXI/bmV3IFVpbnQ4QXJyYXkodCxuKTpuZXcgVWludDhBcnJheSh0LG4scik7ZW4uVFlQRURfQVJSQVlfU1VQUE9SVD8oZT10KS5fX3Byb3RvX189ZW4ucHJvdG90eXBlOmU9b24oZSx0KTtyZXR1cm4gZX0oZSx0LG4scik6InN0cmluZyI9PXR5cGVvZiB0P2Z1bmN0aW9uKGUsdCxuKXsic3RyaW5nIj09dHlwZW9mIG4mJiIiIT09bnx8KG49InV0ZjgiKTtpZighZW4uaXNFbmNvZGluZyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciZW5jb2RpbmciIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKTt2YXIgcj0wfGNuKHQsbiksaT0oZT1RdChlLHIpKS53cml0ZSh0LG4pO2khPT1yJiYoZT1lLnNsaWNlKDAsaSkpO3JldHVybiBlfShlLHQsbik6ZnVuY3Rpb24oZSx0KXtpZihhbih0KSl7dmFyIG49MHxzbih0Lmxlbmd0aCk7cmV0dXJuIDA9PT0oZT1RdChlLG4pKS5sZW5ndGh8fHQuY29weShlLDAsMCxuKSxlfWlmKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJnQuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fCJsZW5ndGgiaW4gdClyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHQubGVuZ3RofHwocj10Lmxlbmd0aCkhPXI/UXQoZSwwKTpvbihlLHQpO2lmKCJCdWZmZXIiPT09dC50eXBlJiZYdCh0LmRhdGEpKXJldHVybiBvbihlLHQuZGF0YSl9dmFyIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LiIpfShlLHQpfWZ1bmN0aW9uIG5uKGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpO2lmKGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJyl9ZnVuY3Rpb24gcm4oZSx0KXtpZihubih0KSxlPVF0KGUsdDwwPzA6MHxzbih0KSksIWVuLlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKHZhciBuPTA7bjx0OysrbillW25dPTA7cmV0dXJuIGV9ZnVuY3Rpb24gb24oZSx0KXt2YXIgbj10Lmxlbmd0aDwwPzA6MHxzbih0Lmxlbmd0aCk7ZT1RdChlLG4pO2Zvcih2YXIgcj0wO3I8bjtyKz0xKWVbcl09MjU1JnRbcl07cmV0dXJuIGV9ZnVuY3Rpb24gc24oZSl7aWYoZT49WnQoKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIrWnQoKS50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfGV9ZnVuY3Rpb24gYW4oZSl7cmV0dXJuIShudWxsPT1lfHwhZS5faXNCdWZmZXIpfWZ1bmN0aW9uIGNuKGUsdCl7aWYoYW4oZSkpcmV0dXJuIGUubGVuZ3RoO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcmJihBcnJheUJ1ZmZlci5pc1ZpZXcoZSl8fGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpcmV0dXJuIGUuYnl0ZUxlbmd0aDsic3RyaW5nIiE9dHlwZW9mIGUmJihlPSIiK2UpO3ZhciBuPWUubGVuZ3RoO2lmKDA9PT1uKXJldHVybiAwO2Zvcih2YXIgcj0hMTs7KXN3aXRjaCh0KXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBuO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSB2b2lkIDA6cmV0dXJuIEhuKGUpLmxlbmd0aDtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIDIqbjtjYXNlImhleCI6cmV0dXJuIG4+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1cm4gTW4oZSkubGVuZ3RoO2RlZmF1bHQ6aWYocilyZXR1cm4gSG4oZSkubGVuZ3RoO3Q9KCIiK3QpLnRvTG93ZXJDYXNlKCkscj0hMH19ZnVuY3Rpb24gdW4oZSx0LG4pe3ZhciByPSExO2lmKCh2b2lkIDA9PT10fHx0PDApJiYodD0wKSx0PnRoaXMubGVuZ3RoKXJldHVybiIiO2lmKCh2b2lkIDA9PT1ufHxuPnRoaXMubGVuZ3RoKSYmKG49dGhpcy5sZW5ndGgpLG48PTApcmV0dXJuIiI7aWYoKG4+Pj49MCk8PSh0Pj4+PTApKXJldHVybiIiO2ZvcihlfHwoZT0idXRmOCIpOzspc3dpdGNoKGUpe2Nhc2UiaGV4IjpyZXR1cm4gRW4odGhpcyx0LG4pO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIF9uKHRoaXMsdCxuKTtjYXNlImFzY2lpIjpyZXR1cm4gYm4odGhpcyx0LG4pO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIGtuKHRoaXMsdCxuKTtjYXNlImJhc2U2NCI6cmV0dXJuIHduKHRoaXMsdCxuKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIFRuKHRoaXMsdCxuKTtkZWZhdWx0OmlmKHIpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitlKTtlPShlKyIiKS50b0xvd2VyQ2FzZSgpLHI9ITB9fWZ1bmN0aW9uIGxuKGUsdCxuKXt2YXIgcj1lW3RdO2VbdF09ZVtuXSxlW25dPXJ9ZnVuY3Rpb24gZG4oZSx0LG4scixpKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiBuPyhyPW4sbj0wKTpuPjIxNDc0ODM2NDc/bj0yMTQ3NDgzNjQ3Om48LTIxNDc0ODM2NDgmJihuPS0yMTQ3NDgzNjQ4KSxuPStuLGlzTmFOKG4pJiYobj1pPzA6ZS5sZW5ndGgtMSksbjwwJiYobj1lLmxlbmd0aCtuKSxuPj1lLmxlbmd0aCl7aWYoaSlyZXR1cm4tMTtuPWUubGVuZ3RoLTF9ZWxzZSBpZihuPDApe2lmKCFpKXJldHVybi0xO249MH1pZigic3RyaW5nIj09dHlwZW9mIHQmJih0PWVuLmZyb20odCxyKSksYW4odCkpcmV0dXJuIDA9PT10Lmxlbmd0aD8tMTpobihlLHQsbixyLGkpO2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdCY9MjU1LGVuLlRZUEVEX0FSUkFZX1NVUFBPUlQmJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP2k/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGUsdCxuKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGUsdCxuKTpobihlLFt0XSxuLHIsaSk7dGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyIil9ZnVuY3Rpb24gaG4oZSx0LG4scixpKXt2YXIgbyxzPTEsYT1lLmxlbmd0aCxjPXQubGVuZ3RoO2lmKHZvaWQgMCE9PXImJigidWNzMiI9PT0ocj1TdHJpbmcocikudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT1yfHwidXRmMTZsZSI9PT1yfHwidXRmLTE2bGUiPT09cikpe2lmKGUubGVuZ3RoPDJ8fHQubGVuZ3RoPDIpcmV0dXJuLTE7cz0yLGEvPTIsYy89MixuLz0yfWZ1bmN0aW9uIHUoZSx0KXtyZXR1cm4gMT09PXM/ZVt0XTplLnJlYWRVSW50MTZCRSh0KnMpfWlmKGkpe3ZhciBsPS0xO2ZvcihvPW47bzxhO28rKylpZih1KGUsbyk9PT11KHQsLTE9PT1sPzA6by1sKSl7aWYoLTE9PT1sJiYobD1vKSxvLWwrMT09PWMpcmV0dXJuIGwqc31lbHNlLTEhPT1sJiYoby09by1sKSxsPS0xfWVsc2UgZm9yKG4rYz5hJiYobj1hLWMpLG89bjtvPj0wO28tLSl7Zm9yKHZhciBkPSEwLGg9MDtoPGM7aCsrKWlmKHUoZSxvK2gpIT09dSh0LGgpKXtkPSExO2JyZWFrfWlmKGQpcmV0dXJuIG99cmV0dXJuLTF9ZnVuY3Rpb24gZm4oZSx0LG4scil7bj1OdW1iZXIobil8fDA7dmFyIGk9ZS5sZW5ndGgtbjtyPyhyPU51bWJlcihyKSk+aSYmKHI9aSk6cj1pO3ZhciBvPXQubGVuZ3RoO2lmKG8lMiE9MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGhleCBzdHJpbmciKTtyPm8vMiYmKHI9by8yKTtmb3IodmFyIHM9MDtzPHI7KytzKXt2YXIgYT1wYXJzZUludCh0LnN1YnN0cigyKnMsMiksMTYpO2lmKGlzTmFOKGEpKXJldHVybiBzO2VbbitzXT1hfXJldHVybiBzfWZ1bmN0aW9uIHBuKGUsdCxuLHIpe3JldHVybiBqbihIbih0LGUubGVuZ3RoLW4pLGUsbixyKX1mdW5jdGlvbiBnbihlLHQsbixyKXtyZXR1cm4gam4oZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49MDtuPGUubGVuZ3RoOysrbil0LnB1c2goMjU1JmUuY2hhckNvZGVBdChuKSk7cmV0dXJuIHR9KHQpLGUsbixyKX1mdW5jdGlvbiB2bihlLHQsbixyKXtyZXR1cm4gZ24oZSx0LG4scil9ZnVuY3Rpb24geW4oZSx0LG4scil7cmV0dXJuIGpuKE1uKHQpLGUsbixyKX1mdW5jdGlvbiBtbihlLHQsbixyKXtyZXR1cm4gam4oZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4scixpLG89W10scz0wO3M8ZS5sZW5ndGgmJiEoKHQtPTIpPDApOysrcylyPShuPWUuY2hhckNvZGVBdChzKSk+PjgsaT1uJTI1NixvLnB1c2goaSksby5wdXNoKHIpO3JldHVybiBvfSh0LGUubGVuZ3RoLW4pLGUsbixyKX1mdW5jdGlvbiB3bihlLHQsbil7cmV0dXJuIDA9PT10JiZuPT09ZS5sZW5ndGg/enQoZSk6enQoZS5zbGljZSh0LG4pKX1mdW5jdGlvbiBfbihlLHQsbil7bj1NYXRoLm1pbihlLmxlbmd0aCxuKTtmb3IodmFyIHI9W10saT10O2k8bjspe3ZhciBvLHMsYSxjLHU9ZVtpXSxsPW51bGwsZD11PjIzOT80OnU+MjIzPzM6dT4xOTE/MjoxO2lmKGkrZDw9bilzd2l0Y2goZCl7Y2FzZSAxOnU8MTI4JiYobD11KTticmVhaztjYXNlIDI6MTI4PT0oMTkyJihvPWVbaSsxXSkpJiYoYz0oMzEmdSk8PDZ8NjMmbyk+MTI3JiYobD1jKTticmVhaztjYXNlIDM6bz1lW2krMV0scz1lW2krMl0sMTI4PT0oMTkyJm8pJiYxMjg9PSgxOTImcykmJihjPSgxNSZ1KTw8MTJ8KDYzJm8pPDw2fDYzJnMpPjIwNDcmJihjPDU1Mjk2fHxjPjU3MzQzKSYmKGw9Yyk7YnJlYWs7Y2FzZSA0Om89ZVtpKzFdLHM9ZVtpKzJdLGE9ZVtpKzNdLDEyOD09KDE5MiZvKSYmMTI4PT0oMTkyJnMpJiYxMjg9PSgxOTImYSkmJihjPSgxNSZ1KTw8MTh8KDYzJm8pPDwxMnwoNjMmcyk8PDZ8NjMmYSk+NjU1MzUmJmM8MTExNDExMiYmKGw9Yyl9bnVsbD09PWw/KGw9NjU1MzMsZD0xKTpsPjY1NTM1JiYobC09NjU1MzYsci5wdXNoKGw+Pj4xMCYxMDIzfDU1Mjk2KSxsPTU2MzIwfDEwMjMmbCksci5wdXNoKGwpLGkrPWR9cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoO2lmKHQ8PVNuKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlKTt2YXIgbj0iIixyPTA7Zm9yKDtyPHQ7KW4rPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUuc2xpY2UocixyKz1TbikpO3JldHVybiBufShyKX1lbi5wb29sU2l6ZT04MTkyLGVuLl9hdWdtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fXz1lbi5wcm90b3R5cGUsZX0sZW4uZnJvbT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHRuKG51bGwsZSx0LG4pfSxlbi5UWVBFRF9BUlJBWV9TVVBQT1JUJiYoZW4ucHJvdG90eXBlLl9fcHJvdG9fXz1VaW50OEFycmF5LnByb3RvdHlwZSxlbi5fX3Byb3RvX189VWludDhBcnJheSksZW4uYWxsb2M9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbm4odCksdDw9MD9RdChlLHQpOnZvaWQgMCE9PW4/InN0cmluZyI9PXR5cGVvZiByP1F0KGUsdCkuZmlsbChuLHIpOlF0KGUsdCkuZmlsbChuKTpRdChlLHQpfShudWxsLGUsdCxuKX0sZW4uYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7cmV0dXJuIHJuKG51bGwsZSl9LGVuLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihlKXtyZXR1cm4gcm4obnVsbCxlKX0sZW4uaXNCdWZmZXI9cW4sZW4uY29tcGFyZT1mdW5jdGlvbihlLHQpe2lmKCFhbihlKXx8IWFuKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyBtdXN0IGJlIEJ1ZmZlcnMiKTtpZihlPT09dClyZXR1cm4gMDtmb3IodmFyIG49ZS5sZW5ndGgscj10Lmxlbmd0aCxpPTAsbz1NYXRoLm1pbihuLHIpO2k8bzsrK2kpaWYoZVtpXSE9PXRbaV0pe249ZVtpXSxyPXRbaV07YnJlYWt9cmV0dXJuIG48cj8tMTpyPG4/MTowfSxlbi5pc0VuY29kaW5nPWZ1bmN0aW9uKGUpe3N3aXRjaChTdHJpbmcoZSkudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxlbi5jb25jYXQ9ZnVuY3Rpb24oZSx0KXtpZighWHQoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gZW4uYWxsb2MoMCk7dmFyIG47aWYodm9pZCAwPT09dClmb3IodD0wLG49MDtuPGUubGVuZ3RoOysrbil0Kz1lW25dLmxlbmd0aDt2YXIgcj1lbi5hbGxvY1Vuc2FmZSh0KSxpPTA7Zm9yKG49MDtuPGUubGVuZ3RoOysrbil7dmFyIG89ZVtuXTtpZighYW4obykpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO28uY29weShyLGkpLGkrPW8ubGVuZ3RofXJldHVybiByfSxlbi5ieXRlTGVuZ3RoPWNuLGVuLnByb3RvdHlwZS5faXNCdWZmZXI9ITAsZW4ucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlMiE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9Milsbih0aGlzLHQsdCsxKTtyZXR1cm4gdGhpc30sZW4ucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlNCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9NClsbih0aGlzLHQsdCszKSxsbih0aGlzLHQrMSx0KzIpO3JldHVybiB0aGlzfSxlbi5wcm90b3R5cGUuc3dhcDY0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSU4IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz04KWxuKHRoaXMsdCx0KzcpLGxuKHRoaXMsdCsxLHQrNiksbG4odGhpcyx0KzIsdCs1KSxsbih0aGlzLHQrMyx0KzQpO3JldHVybiB0aGlzfSxlbi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgZT0wfHRoaXMubGVuZ3RoO3JldHVybiAwPT09ZT8iIjowPT09YXJndW1lbnRzLmxlbmd0aD9fbih0aGlzLDAsZSk6dW4uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxlbi5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe2lmKCFhbihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7cmV0dXJuIHRoaXM9PT1lfHwwPT09ZW4uY29tcGFyZSh0aGlzLGUpfSxlbi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciBlPSIiO3JldHVybiB0aGlzLmxlbmd0aD4wJiYoZT10aGlzLnRvU3RyaW5nKCJoZXgiLDAsNTApLm1hdGNoKC8uezJ9L2cpLmpvaW4oIiAiKSx0aGlzLmxlbmd0aD41MCYmKGUrPSIgLi4uICIpKSwiPEJ1ZmZlciAiK2UrIj4ifSxlbi5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbihlLHQsbixyLGkpe2lmKCFhbihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7aWYodm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09biYmKG49ZT9lLmxlbmd0aDowKSx2b2lkIDA9PT1yJiYocj0wKSx2b2lkIDA9PT1pJiYoaT10aGlzLmxlbmd0aCksdDwwfHxuPmUubGVuZ3RofHxyPDB8fGk+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRleCIpO2lmKHI+PWkmJnQ+PW4pcmV0dXJuIDA7aWYocj49aSlyZXR1cm4tMTtpZih0Pj1uKXJldHVybiAxO2lmKHRoaXM9PT1lKXJldHVybiAwO2Zvcih2YXIgbz0oaT4+Pj0wKS0ocj4+Pj0wKSxzPShuPj4+PTApLSh0Pj4+PTApLGE9TWF0aC5taW4obyxzKSxjPXRoaXMuc2xpY2UocixpKSx1PWUuc2xpY2UodCxuKSxsPTA7bDxhOysrbClpZihjW2xdIT09dVtsXSl7bz1jW2xdLHM9dVtsXTticmVha31yZXR1cm4gbzxzPy0xOnM8bz8xOjB9LGVuLnByb3RvdHlwZS5pbmNsdWRlcz1mdW5jdGlvbihlLHQsbil7cmV0dXJuLTEhPT10aGlzLmluZGV4T2YoZSx0LG4pfSxlbi5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGRuKHRoaXMsZSx0LG4sITApfSxlbi5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBkbih0aGlzLGUsdCxuLCExKX0sZW4ucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKHZvaWQgMD09PXQpcj0idXRmOCIsbj10aGlzLmxlbmd0aCx0PTA7ZWxzZSBpZih2b2lkIDA9PT1uJiYic3RyaW5nIj09dHlwZW9mIHQpcj10LG49dGhpcy5sZW5ndGgsdD0wO2Vsc2V7aWYoIWlzRmluaXRlKHQpKXRocm93IG5ldyBFcnJvcigiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTt0fD0wLGlzRmluaXRlKG4pPyhufD0wLHZvaWQgMD09PXImJihyPSJ1dGY4IikpOihyPW4sbj12b2lkIDApfXZhciBpPXRoaXMubGVuZ3RoLXQ7aWYoKHZvaWQgMD09PW58fG4+aSkmJihuPWkpLGUubGVuZ3RoPjAmJihuPDB8fHQ8MCl8fHQ+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7cnx8KHI9InV0ZjgiKTtmb3IodmFyIG89ITE7Oylzd2l0Y2gocil7Y2FzZSJoZXgiOnJldHVybiBmbih0aGlzLGUsdCxuKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBwbih0aGlzLGUsdCxuKTtjYXNlImFzY2lpIjpyZXR1cm4gZ24odGhpcyxlLHQsbik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gdm4odGhpcyxlLHQsbik7Y2FzZSJiYXNlNjQiOnJldHVybiB5bih0aGlzLGUsdCxuKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIG1uKHRoaXMsZSx0LG4pO2RlZmF1bHQ6aWYobyl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3IpO3I9KCIiK3IpLnRvTG93ZXJDYXNlKCksbz0hMH19LGVuLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiQnVmZmVyIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O3ZhciBTbj00MDk2O2Z1bmN0aW9uIGJuKGUsdCxuKXt2YXIgcj0iIjtuPU1hdGgubWluKGUubGVuZ3RoLG4pO2Zvcih2YXIgaT10O2k8bjsrK2kpcis9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmZVtpXSk7cmV0dXJuIHJ9ZnVuY3Rpb24ga24oZSx0LG4pe3ZhciByPSIiO249TWF0aC5taW4oZS5sZW5ndGgsbik7Zm9yKHZhciBpPXQ7aTxuOysraSlyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGVbaV0pO3JldHVybiByfWZ1bmN0aW9uIEVuKGUsdCxuKXt2YXIgcj1lLmxlbmd0aDsoIXR8fHQ8MCkmJih0PTApLCghbnx8bjwwfHxuPnIpJiYobj1yKTtmb3IodmFyIGk9IiIsbz10O288bjsrK28paSs9TG4oZVtvXSk7cmV0dXJuIGl9ZnVuY3Rpb24gVG4oZSx0LG4pe2Zvcih2YXIgcj1lLnNsaWNlKHQsbiksaT0iIixvPTA7bzxyLmxlbmd0aDtvKz0yKWkrPVN0cmluZy5mcm9tQ2hhckNvZGUocltvXSsyNTYqcltvKzFdKTtyZXR1cm4gaX1mdW5jdGlvbiBSbihlLHQsbil7aWYoZSUxIT0wfHxlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpO2lmKGUrdD5uKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24gQW4oZSx0LG4scixpLG8pe2lmKCFhbihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmZmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYodD5pfHx0PG8pdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKG4rcj5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gQ24oZSx0LG4scil7dDwwJiYodD02NTUzNSt0KzEpO2Zvcih2YXIgaT0wLG89TWF0aC5taW4oZS5sZW5ndGgtbiwyKTtpPG87KytpKWVbbitpXT0odCYyNTU8PDgqKHI/aToxLWkpKT4+PjgqKHI/aToxLWkpfWZ1bmN0aW9uIERuKGUsdCxuLHIpe3Q8MCYmKHQ9NDI5NDk2NzI5NSt0KzEpO2Zvcih2YXIgaT0wLG89TWF0aC5taW4oZS5sZW5ndGgtbiw0KTtpPG87KytpKWVbbitpXT10Pj4+OCoocj9pOjMtaSkmMjU1fWZ1bmN0aW9uIFBuKGUsdCxuLHIsaSxvKXtpZihuK3I+ZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKG48MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gSW4oZSx0LG4scixpKXtyZXR1cm4gaXx8UG4oZSwwLG4sNCksVnQoZSx0LG4sciwyMyw0KSxuKzR9ZnVuY3Rpb24gT24oZSx0LG4scixpKXtyZXR1cm4gaXx8UG4oZSwwLG4sOCksVnQoZSx0LG4sciw1Miw4KSxuKzh9ZW4ucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj10aGlzLmxlbmd0aDtpZigoZT1+fmUpPDA/KGUrPXIpPDAmJihlPTApOmU+ciYmKGU9ciksKHQ9dm9pZCAwPT09dD9yOn5+dCk8MD8odCs9cik8MCYmKHQ9MCk6dD5yJiYodD1yKSx0PGUmJih0PWUpLGVuLlRZUEVEX0FSUkFZX1NVUFBPUlQpKG49dGhpcy5zdWJhcnJheShlLHQpKS5fX3Byb3RvX189ZW4ucHJvdG90eXBlO2Vsc2V7dmFyIGk9dC1lO249bmV3IGVuKGksdm9pZCAwKTtmb3IodmFyIG89MDtvPGk7KytvKW5bb109dGhpc1tvK2VdfXJldHVybiBufSxlbi5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbihlLHQsbil7ZXw9MCx0fD0wLG58fFJuKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciByPXRoaXNbZV0saT0xLG89MDsrK288dCYmKGkqPTI1Nik7KXIrPXRoaXNbZStvXSppO3JldHVybiByfSxlbi5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihlLHQsbil7ZXw9MCx0fD0wLG58fFJuKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciByPXRoaXNbZSstLXRdLGk9MTt0PjAmJihpKj0yNTYpOylyKz10aGlzW2UrLS10XSppO3JldHVybiByfSxlbi5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fFJuKGUsMSx0aGlzLmxlbmd0aCksdGhpc1tlXX0sZW4ucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxSbihlLDIsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fSxlbi5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fFJuKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXTw8OHx0aGlzW2UrMV19LGVuLnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8Um4oZSw0LHRoaXMubGVuZ3RoKSwodGhpc1tlXXx0aGlzW2UrMV08PDh8dGhpc1tlKzJdPDwxNikrMTY3NzcyMTYqdGhpc1tlKzNdfSxlbi5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fFJuKGUsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1tlXSsodGhpc1tlKzFdPDwxNnx0aGlzW2UrMl08PDh8dGhpc1tlKzNdKX0sZW4ucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbihlLHQsbil7ZXw9MCx0fD0wLG58fFJuKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciByPXRoaXNbZV0saT0xLG89MDsrK288dCYmKGkqPTI1Nik7KXIrPXRoaXNbZStvXSppO3JldHVybiByPj0oaSo9MTI4KSYmKHItPU1hdGgucG93KDIsOCp0KSkscn0sZW4ucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbihlLHQsbil7ZXw9MCx0fD0wLG58fFJuKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciByPXQsaT0xLG89dGhpc1tlKy0tcl07cj4wJiYoaSo9MjU2KTspbys9dGhpc1tlKy0tcl0qaTtyZXR1cm4gbz49KGkqPTEyOCkmJihvLT1NYXRoLnBvdygyLDgqdCkpLG99LGVuLnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxSbihlLDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW2VdPy0xKigyNTUtdGhpc1tlXSsxKTp0aGlzW2VdfSxlbi5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24oZSx0KXt0fHxSbihlLDIsdGhpcy5sZW5ndGgpO3ZhciBuPXRoaXNbZV18dGhpc1tlKzFdPDw4O3JldHVybiAzMjc2OCZuPzQyOTQ5MDE3NjB8bjpufSxlbi5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24oZSx0KXt0fHxSbihlLDIsdGhpcy5sZW5ndGgpO3ZhciBuPXRoaXNbZSsxXXx0aGlzW2VdPDw4O3JldHVybiAzMjc2OCZuPzQyOTQ5MDE3NjB8bjpufSxlbi5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8Um4oZSw0LHRoaXMubGVuZ3RoKSx0aGlzW2VdfHRoaXNbZSsxXTw8OHx0aGlzW2UrMl08PDE2fHRoaXNbZSszXTw8MjR9LGVuLnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxSbihlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV08PDI0fHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXX0sZW4ucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fFJuKGUsNCx0aGlzLmxlbmd0aCksWXQodGhpcyxlLCEwLDIzLDQpfSxlbi5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8Um4oZSw0LHRoaXMubGVuZ3RoKSxZdCh0aGlzLGUsITEsMjMsNCl9LGVuLnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8Um4oZSw4LHRoaXMubGVuZ3RoKSxZdCh0aGlzLGUsITAsNTIsOCl9LGVuLnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8Um4oZSw4LHRoaXMubGVuZ3RoKSxZdCh0aGlzLGUsITEsNTIsOCl9LGVuLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihlLHQsbixyKXsoZT0rZSx0fD0wLG58PTAscil8fEFuKHRoaXMsZSx0LG4sTWF0aC5wb3coMiw4Km4pLTEsMCk7dmFyIGk9MSxvPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytvPG4mJihpKj0yNTYpOyl0aGlzW3Qrb109ZS9pJjI1NTtyZXR1cm4gdCtufSxlbi5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24oZSx0LG4scil7KGU9K2UsdHw9MCxufD0wLHIpfHxBbih0aGlzLGUsdCxuLE1hdGgucG93KDIsOCpuKS0xLDApO3ZhciBpPW4tMSxvPTE7Zm9yKHRoaXNbdCtpXT0yNTUmZTstLWk+PTAmJihvKj0yNTYpOyl0aGlzW3QraV09ZS9vJjI1NTtyZXR1cm4gdCtufSxlbi5wcm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxBbih0aGlzLGUsdCwxLDI1NSwwKSxlbi5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoZT1NYXRoLmZsb29yKGUpKSx0aGlzW3RdPTI1NSZlLHQrMX0sZW4ucHJvdG90eXBlLndyaXRlVUludDE2TEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8QW4odGhpcyxlLHQsMiw2NTUzNSwwKSxlbi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCk6Q24odGhpcyxlLHQsITApLHQrMn0sZW4ucHJvdG90eXBlLndyaXRlVUludDE2QkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8QW4odGhpcyxlLHQsMiw2NTUzNSwwKSxlbi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj44LHRoaXNbdCsxXT0yNTUmZSk6Q24odGhpcyxlLHQsITEpLHQrMn0sZW4ucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8QW4odGhpcyxlLHQsNCw0Mjk0OTY3Mjk1LDApLGVuLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdCszXT1lPj4+MjQsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrMV09ZT4+PjgsdGhpc1t0XT0yNTUmZSk6RG4odGhpcyxlLHQsITApLHQrNH0sZW4ucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8QW4odGhpcyxlLHQsNCw0Mjk0OTY3Mjk1LDApLGVuLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjI0LHRoaXNbdCsxXT1lPj4+MTYsdGhpc1t0KzJdPWU+Pj44LHRoaXNbdCszXT0yNTUmZSk6RG4odGhpcyxlLHQsITEpLHQrNH0sZW4ucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24oZSx0LG4scil7aWYoZT0rZSx0fD0wLCFyKXt2YXIgaT1NYXRoLnBvdygyLDgqbi0xKTtBbih0aGlzLGUsdCxuLGktMSwtaSl9dmFyIG89MCxzPTEsYT0wO2Zvcih0aGlzW3RdPTI1NSZlOysrbzxuJiYocyo9MjU2KTspZTwwJiYwPT09YSYmMCE9PXRoaXNbdCtvLTFdJiYoYT0xKSx0aGlzW3Qrb109KGUvcz4+MCktYSYyNTU7cmV0dXJuIHQrbn0sZW4ucHJvdG90eXBlLndyaXRlSW50QkU9ZnVuY3Rpb24oZSx0LG4scil7aWYoZT0rZSx0fD0wLCFyKXt2YXIgaT1NYXRoLnBvdygyLDgqbi0xKTtBbih0aGlzLGUsdCxuLGktMSwtaSl9dmFyIG89bi0xLHM9MSxhPTA7Zm9yKHRoaXNbdCtvXT0yNTUmZTstLW8+PTAmJihzKj0yNTYpOyllPDAmJjA9PT1hJiYwIT09dGhpc1t0K28rMV0mJihhPTEpLHRoaXNbdCtvXT0oZS9zPj4wKS1hJjI1NTtyZXR1cm4gdCtufSxlbi5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fEFuKHRoaXMsZSx0LDEsMTI3LC0xMjgpLGVuLlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLGU8MCYmKGU9MjU1K2UrMSksdGhpc1t0XT0yNTUmZSx0KzF9LGVuLnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8QW4odGhpcyxlLHQsMiwzMjc2NywtMzI3NjgpLGVuLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTpDbih0aGlzLGUsdCwhMCksdCsyfSxlbi5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fEFuKHRoaXMsZSx0LDIsMzI3NjcsLTMyNzY4KSxlbi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj44LHRoaXNbdCsxXT0yNTUmZSk6Q24odGhpcyxlLHQsITEpLHQrMn0sZW4ucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxBbih0aGlzLGUsdCw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLGVuLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44LHRoaXNbdCsyXT1lPj4+MTYsdGhpc1t0KzNdPWU+Pj4yNCk6RG4odGhpcyxlLHQsITApLHQrNH0sZW4ucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxBbih0aGlzLGUsdCw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLGU8MCYmKGU9NDI5NDk2NzI5NStlKzEpLGVuLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjI0LHRoaXNbdCsxXT1lPj4+MTYsdGhpc1t0KzJdPWU+Pj44LHRoaXNbdCszXT0yNTUmZSk6RG4odGhpcyxlLHQsITEpLHQrNH0sZW4ucHJvdG90eXBlLndyaXRlRmxvYXRMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIEluKHRoaXMsZSx0LCEwLG4pfSxlbi5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gSW4odGhpcyxlLHQsITEsbil9LGVuLnByb3RvdHlwZS53cml0ZURvdWJsZUxFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gT24odGhpcyxlLHQsITAsbil9LGVuLnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gT24odGhpcyxlLHQsITEsbil9LGVuLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGUsdCxuLHIpe2lmKG58fChuPTApLHJ8fDA9PT1yfHwocj10aGlzLmxlbmd0aCksdD49ZS5sZW5ndGgmJih0PWUubGVuZ3RoKSx0fHwodD0wKSxyPjAmJnI8biYmKHI9bikscj09PW4pcmV0dXJuIDA7aWYoMD09PWUubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYodDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7aWYobjwwfHxuPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlU3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKHI8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtyPnRoaXMubGVuZ3RoJiYocj10aGlzLmxlbmd0aCksZS5sZW5ndGgtdDxyLW4mJihyPWUubGVuZ3RoLXQrbik7dmFyIGksbz1yLW47aWYodGhpcz09PWUmJm48dCYmdDxyKWZvcihpPW8tMTtpPj0wOy0taSllW2krdF09dGhpc1tpK25dO2Vsc2UgaWYobzwxZTN8fCFlbi5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcihpPTA7aTxvOysraSllW2krdF09dGhpc1tpK25dO2Vsc2UgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoZSx0aGlzLnN1YmFycmF5KG4sbitvKSx0KTtyZXR1cm4gb30sZW4ucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oZSx0LG4scil7aWYoInN0cmluZyI9PXR5cGVvZiBlKXtpZigic3RyaW5nIj09dHlwZW9mIHQ/KHI9dCx0PTAsbj10aGlzLmxlbmd0aCk6InN0cmluZyI9PXR5cGVvZiBuJiYocj1uLG49dGhpcy5sZW5ndGgpLDE9PT1lLmxlbmd0aCl7dmFyIGk9ZS5jaGFyQ29kZUF0KDApO2k8MjU2JiYoZT1pKX1pZih2b2lkIDAhPT1yJiYic3RyaW5nIiE9dHlwZW9mIHIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lmKCJzdHJpbmciPT10eXBlb2YgciYmIWVuLmlzRW5jb2RpbmcocikpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIityKX1lbHNlIm51bWJlciI9PXR5cGVvZiBlJiYoZSY9MjU1KTtpZih0PDB8fHRoaXMubGVuZ3RoPHR8fHRoaXMubGVuZ3RoPG4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk91dCBvZiByYW5nZSBpbmRleCIpO2lmKG48PXQpcmV0dXJuIHRoaXM7dmFyIG87aWYodD4+Pj0wLG49dm9pZCAwPT09bj90aGlzLmxlbmd0aDpuPj4+MCxlfHwoZT0wKSwibnVtYmVyIj09dHlwZW9mIGUpZm9yKG89dDtvPG47KytvKXRoaXNbb109ZTtlbHNle3ZhciBzPWFuKGUpP2U6SG4obmV3IGVuKGUscikudG9TdHJpbmcoKSksYT1zLmxlbmd0aDtmb3Iobz0wO288bi10Oysrbyl0aGlzW28rdF09c1tvJWFdfXJldHVybiB0aGlzfTt2YXIgVW49L1teK1wvMC05QS1aYS16LV9dL2c7ZnVuY3Rpb24gTG4oZSl7cmV0dXJuIGU8MTY/IjAiK2UudG9TdHJpbmcoMTYpOmUudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIEhuKGUsdCl7dmFyIG47dD10fHwxLzA7Zm9yKHZhciByPWUubGVuZ3RoLGk9bnVsbCxvPVtdLHM9MDtzPHI7KytzKXtpZigobj1lLmNoYXJDb2RlQXQocykpPjU1Mjk1JiZuPDU3MzQ0KXtpZighaSl7aWYobj41NjMxOSl7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWlmKHMrMT09PXIpeyh0LT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pPW47Y29udGludWV9aWYobjw1NjMyMCl7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpLGk9bjtjb250aW51ZX1uPTY1NTM2KyhpLTU1Mjk2PDwxMHxuLTU2MzIwKX1lbHNlIGkmJih0LT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KTtpZihpPW51bGwsbjwxMjgpe2lmKCh0LT0xKTwwKWJyZWFrO28ucHVzaChuKX1lbHNlIGlmKG48MjA0OCl7aWYoKHQtPTIpPDApYnJlYWs7by5wdXNoKG4+PjZ8MTkyLDYzJm58MTI4KX1lbHNlIGlmKG48NjU1MzYpe2lmKCh0LT0zKTwwKWJyZWFrO28ucHVzaChuPj4xMnwyMjQsbj4+NiY2M3wxMjgsNjMmbnwxMjgpfWVsc2V7aWYoIShuPDExMTQxMTIpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2RlIHBvaW50Iik7aWYoKHQtPTQpPDApYnJlYWs7by5wdXNoKG4+PjE4fDI0MCxuPj4xMiY2M3wxMjgsbj4+NiY2M3wxMjgsNjMmbnwxMjgpfX1yZXR1cm4gb31mdW5jdGlvbiBNbihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbyxzO0p0fHxGdCgpO3ZhciBhPWUubGVuZ3RoO2lmKGElND4wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCIpO289Ij0iPT09ZVthLTJdPzI6Ij0iPT09ZVthLTFdPzE6MCxzPW5ldyBCdCgzKmEvNC1vKSxyPW8+MD9hLTQ6YTt2YXIgYz0wO2Zvcih0PTAsbj0wO3Q8cjt0Kz00LG4rPTMpaT1LdFtlLmNoYXJDb2RlQXQodCldPDwxOHxLdFtlLmNoYXJDb2RlQXQodCsxKV08PDEyfEt0W2UuY2hhckNvZGVBdCh0KzIpXTw8NnxLdFtlLmNoYXJDb2RlQXQodCszKV0sc1tjKytdPWk+PjE2JjI1NSxzW2MrK109aT4+OCYyNTUsc1tjKytdPTI1NSZpO3JldHVybiAyPT09bz8oaT1LdFtlLmNoYXJDb2RlQXQodCldPDwyfEt0W2UuY2hhckNvZGVBdCh0KzEpXT4+NCxzW2MrK109MjU1JmkpOjE9PT1vJiYoaT1LdFtlLmNoYXJDb2RlQXQodCldPDwxMHxLdFtlLmNoYXJDb2RlQXQodCsxKV08PDR8S3RbZS5jaGFyQ29kZUF0KHQrMildPj4yLHNbYysrXT1pPj44JjI1NSxzW2MrK109MjU1JmkpLHN9KGZ1bmN0aW9uKGUpe2lmKChlPWZ1bmN0aW9uKGUpe3JldHVybiBlLnRyaW0/ZS50cmltKCk6ZS5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIil9KGUpLnJlcGxhY2UoVW4sIiIpKS5sZW5ndGg8MilyZXR1cm4iIjtmb3IoO2UubGVuZ3RoJTQhPTA7KWUrPSI9IjtyZXR1cm4gZX0oZSkpfWZ1bmN0aW9uIGpuKGUsdCxuLHIpe2Zvcih2YXIgaT0wO2k8ciYmIShpK24+PXQubGVuZ3RofHxpPj1lLmxlbmd0aCk7KytpKXRbaStuXT1lW2ldO3JldHVybiBpfWZ1bmN0aW9uIHFuKGUpe3JldHVybiBudWxsIT1lJiYoISFlLl9pc0J1ZmZlcnx8Tm4oZSl8fGZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlLnJlYWRGbG9hdExFJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5zbGljZSYmTm4oZS5zbGljZSgwLDApKX0oZSkpfWZ1bmN0aW9uIE5uKGUpe3JldHVybiEhZS5jb25zdHJ1Y3RvciYmImZ1bmN0aW9uIj09dHlwZW9mIGUuY29uc3RydWN0b3IuaXNCdWZmZXImJmUuY29uc3RydWN0b3IuaXNCdWZmZXIoZSl9dmFyIHhuPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLEJ1ZmZlcjplbixJTlNQRUNUX01BWF9CWVRFUzo1MCxTbG93QnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybitlIT1lJiYoZT0wKSxlbi5hbGxvYygrZSl9LGlzQnVmZmVyOnFuLGtNYXhMZW5ndGg6JHR9KSxLbj17ZXhwb3J0czp7fX0sQm49e30sSm49e307T2JqZWN0LmRlZmluZVByb3BlcnR5KEpuLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKbi5kZWZhdWx0PWZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoLG49dCU0O2lmKCFuKXJldHVybiBlO3ZhciByPXQsaT00LW4sbz10K2kscz1lbi5hbGxvYyhvKTtmb3Iocy53cml0ZShlKTtpLS07KXMud3JpdGUoIj0iLHIrKyk7cmV0dXJuIHMudG9TdHJpbmcoKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KEJuLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgRm49Sm47ZnVuY3Rpb24gV24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9InV0ZjgiKSxlbi5pc0J1ZmZlcihlKT9ZbihlLnRvU3RyaW5nKCJiYXNlNjQiKSk6WW4oZW4uZnJvbShlLHQpLnRvU3RyaW5nKCJiYXNlNjQiKSl9ZnVuY3Rpb24gem4oZSl7cmV0dXJuIGU9ZS50b1N0cmluZygpLEZuLmRlZmF1bHQoZSkucmVwbGFjZSgvXC0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpfWZ1bmN0aW9uIFluKGUpe3JldHVybiBlLnJlcGxhY2UoLz0vZywiIikucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKX12YXIgVm4sR249V247R24uZW5jb2RlPVduLEduLmRlY29kZT1mdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0idXRmOCIpLGVuLmZyb20oem4oZSksImJhc2U2NCIpLnRvU3RyaW5nKHQpfSxHbi50b0Jhc2U2ND16bixHbi5mcm9tQmFzZTY0PVluLEduLnRvQnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybiBlbi5mcm9tKHpuKGUpLCJiYXNlNjQiKX0sQm4uZGVmYXVsdD1HbiwoVm49S24pLmV4cG9ydHM9Qm4uZGVmYXVsdCxWbi5leHBvcnRzLmRlZmF1bHQ9Vm4uZXhwb3J0czt2YXIgWG49S24uZXhwb3J0cywkbj17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGUpeyFmdW5jdGlvbih0LG4pe3ZhciByPXt9OyFmdW5jdGlvbihlKXtlLl9fZXNNb2R1bGU9ITAsZS5kaWdlc3RMZW5ndGg9MzIsZS5ibG9ja1NpemU9NjQ7dmFyIHQ9bmV3IFVpbnQzMkFycmF5KFsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdKTtmdW5jdGlvbiBuKGUsbixyLGksbyl7Zm9yKHZhciBzLGEsYyx1LGwsZCxoLGYscCxnLHYseSxtO28+PTY0Oyl7Zm9yKHM9blswXSxhPW5bMV0sYz1uWzJdLHU9blszXSxsPW5bNF0sZD1uWzVdLGg9bls2XSxmPW5bN10sZz0wO2c8MTY7ZysrKXY9aSs0KmcsZVtnXT0oMjU1JnJbdl0pPDwyNHwoMjU1JnJbdisxXSk8PDE2fCgyNTUmclt2KzJdKTw8OHwyNTUmclt2KzNdO2ZvcihnPTE2O2c8NjQ7ZysrKXk9KChwPWVbZy0yXSk+Pj4xN3xwPDwxNSleKHA+Pj4xOXxwPDwxMylecD4+PjEwLG09KChwPWVbZy0xNV0pPj4+N3xwPDwyNSleKHA+Pj4xOHxwPDwxNClecD4+PjMsZVtnXT0oeStlW2ctN118MCkrKG0rZVtnLTE2XXwwKTtmb3IoZz0wO2c8NjQ7ZysrKXk9KCgobD4+PjZ8bDw8MjYpXihsPj4+MTF8bDw8MjEpXihsPj4+MjV8bDw8NykpKyhsJmRefmwmaCl8MCkrKGYrKHRbZ10rZVtnXXwwKXwwKXwwLG09KChzPj4+MnxzPDwzMCleKHM+Pj4xM3xzPDwxOSleKHM+Pj4yMnxzPDwxMCkpKyhzJmFecyZjXmEmYyl8MCxmPWgsaD1kLGQ9bCxsPXUreXwwLHU9YyxjPWEsYT1zLHM9eSttfDA7blswXSs9cyxuWzFdKz1hLG5bMl0rPWMsblszXSs9dSxuWzRdKz1sLG5bNV0rPWQsbls2XSs9aCxuWzddKz1mLGkrPTY0LG8tPTY0fXJldHVybiBpfXZhciByPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuZGlnZXN0TGVuZ3RoPWUuZGlnZXN0TGVuZ3RoLHRoaXMuYmxvY2tTaXplPWUuYmxvY2tTaXplLHRoaXMuc3RhdGU9bmV3IEludDMyQXJyYXkoOCksdGhpcy50ZW1wPW5ldyBJbnQzMkFycmF5KDY0KSx0aGlzLmJ1ZmZlcj1uZXcgVWludDhBcnJheSgxMjgpLHRoaXMuYnVmZmVyTGVuZ3RoPTAsdGhpcy5ieXRlc0hhc2hlZD0wLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5yZXNldCgpfXJldHVybiB0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRlWzBdPTE3NzkwMzM3MDMsdGhpcy5zdGF0ZVsxXT0zMTQ0MTM0Mjc3LHRoaXMuc3RhdGVbMl09MTAxMzkwNDI0Mix0aGlzLnN0YXRlWzNdPTI3NzM0ODA3NjIsdGhpcy5zdGF0ZVs0XT0xMzU5ODkzMTE5LHRoaXMuc3RhdGVbNV09MjYwMDgyMjkyNCx0aGlzLnN0YXRlWzZdPTUyODczNDYzNSx0aGlzLnN0YXRlWzddPTE1NDE0NTkyMjUsdGhpcy5idWZmZXJMZW5ndGg9MCx0aGlzLmJ5dGVzSGFzaGVkPTAsdGhpcy5maW5pc2hlZD0hMSx0aGlzfSx0LnByb3RvdHlwZS5jbGVhbj1mdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8dGhpcy5idWZmZXIubGVuZ3RoO2UrKyl0aGlzLmJ1ZmZlcltlXT0wO2ZvcihlPTA7ZTx0aGlzLnRlbXAubGVuZ3RoO2UrKyl0aGlzLnRlbXBbZV09MDt0aGlzLnJlc2V0KCl9LHQucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMD09PXQmJih0PWUubGVuZ3RoKSx0aGlzLmZpbmlzaGVkKXRocm93IG5ldyBFcnJvcigiU0hBMjU2OiBjYW4ndCB1cGRhdGUgYmVjYXVzZSBoYXNoIHdhcyBmaW5pc2hlZC4iKTt2YXIgcj0wO2lmKHRoaXMuYnl0ZXNIYXNoZWQrPXQsdGhpcy5idWZmZXJMZW5ndGg+MCl7Zm9yKDt0aGlzLmJ1ZmZlckxlbmd0aDw2NCYmdD4wOyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlckxlbmd0aCsrXT1lW3IrK10sdC0tOzY0PT09dGhpcy5idWZmZXJMZW5ndGgmJihuKHRoaXMudGVtcCx0aGlzLnN0YXRlLHRoaXMuYnVmZmVyLDAsNjQpLHRoaXMuYnVmZmVyTGVuZ3RoPTApfWZvcih0Pj02NCYmKHI9bih0aGlzLnRlbXAsdGhpcy5zdGF0ZSxlLHIsdCksdCU9NjQpO3Q+MDspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJMZW5ndGgrK109ZVtyKytdLHQtLTtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmZpbmlzaGVkKXt2YXIgdD10aGlzLmJ5dGVzSGFzaGVkLHI9dGhpcy5idWZmZXJMZW5ndGgsaT10LzUzNjg3MDkxMnwwLG89dDw8MyxzPXQlNjQ8NTY/NjQ6MTI4O3RoaXMuYnVmZmVyW3JdPTEyODtmb3IodmFyIGE9cisxO2E8cy04O2ErKyl0aGlzLmJ1ZmZlclthXT0wO3RoaXMuYnVmZmVyW3MtOF09aT4+PjI0JjI1NSx0aGlzLmJ1ZmZlcltzLTddPWk+Pj4xNiYyNTUsdGhpcy5idWZmZXJbcy02XT1pPj4+OCYyNTUsdGhpcy5idWZmZXJbcy01XT1pPj4+MCYyNTUsdGhpcy5idWZmZXJbcy00XT1vPj4+MjQmMjU1LHRoaXMuYnVmZmVyW3MtM109bz4+PjE2JjI1NSx0aGlzLmJ1ZmZlcltzLTJdPW8+Pj44JjI1NSx0aGlzLmJ1ZmZlcltzLTFdPW8+Pj4wJjI1NSxuKHRoaXMudGVtcCx0aGlzLnN0YXRlLHRoaXMuYnVmZmVyLDAscyksdGhpcy5maW5pc2hlZD0hMH1mb3IoYT0wO2E8ODthKyspZVs0KmErMF09dGhpcy5zdGF0ZVthXT4+PjI0JjI1NSxlWzQqYSsxXT10aGlzLnN0YXRlW2FdPj4+MTYmMjU1LGVbNCphKzJdPXRoaXMuc3RhdGVbYV0+Pj44JjI1NSxlWzQqYSszXT10aGlzLnN0YXRlW2FdPj4+MCYyNTU7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbigpe3ZhciBlPW5ldyBVaW50OEFycmF5KHRoaXMuZGlnZXN0TGVuZ3RoKTtyZXR1cm4gdGhpcy5maW5pc2goZSksZX0sdC5wcm90b3R5cGUuX3NhdmVTdGF0ZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PHRoaXMuc3RhdGUubGVuZ3RoO3QrKyllW3RdPXRoaXMuc3RhdGVbdF19LHQucHJvdG90eXBlLl9yZXN0b3JlU3RhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MDtuPHRoaXMuc3RhdGUubGVuZ3RoO24rKyl0aGlzLnN0YXRlW25dPWVbbl07dGhpcy5ieXRlc0hhc2hlZD10LHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5idWZmZXJMZW5ndGg9MH0sdH0oKTtlLkhhc2g9cjt2YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5pbm5lcj1uZXcgcix0aGlzLm91dGVyPW5ldyByLHRoaXMuYmxvY2tTaXplPXRoaXMuaW5uZXIuYmxvY2tTaXplLHRoaXMuZGlnZXN0TGVuZ3RoPXRoaXMuaW5uZXIuZGlnZXN0TGVuZ3RoO3ZhciB0PW5ldyBVaW50OEFycmF5KHRoaXMuYmxvY2tTaXplKTtpZihlLmxlbmd0aD50aGlzLmJsb2NrU2l6ZSkobmV3IHIpLnVwZGF0ZShlKS5maW5pc2godCkuY2xlYW4oKTtlbHNlIGZvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXRbbl09ZVtuXTtmb3Iobj0wO248dC5sZW5ndGg7bisrKXRbbl1ePTU0O3RoaXMuaW5uZXIudXBkYXRlKHQpO2ZvcihuPTA7bjx0Lmxlbmd0aDtuKyspdFtuXV49MTA2O3RoaXMub3V0ZXIudXBkYXRlKHQpLHRoaXMuaXN0YXRlPW5ldyBVaW50MzJBcnJheSg4KSx0aGlzLm9zdGF0ZT1uZXcgVWludDMyQXJyYXkoOCksdGhpcy5pbm5lci5fc2F2ZVN0YXRlKHRoaXMuaXN0YXRlKSx0aGlzLm91dGVyLl9zYXZlU3RhdGUodGhpcy5vc3RhdGUpO2ZvcihuPTA7bjx0Lmxlbmd0aDtuKyspdFtuXT0wfXJldHVybiBlLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlubmVyLl9yZXN0b3JlU3RhdGUodGhpcy5pc3RhdGUsdGhpcy5pbm5lci5ibG9ja1NpemUpLHRoaXMub3V0ZXIuX3Jlc3RvcmVTdGF0ZSh0aGlzLm9zdGF0ZSx0aGlzLm91dGVyLmJsb2NrU2l6ZSksdGhpc30sZS5wcm90b3R5cGUuY2xlYW49ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHRoaXMuaXN0YXRlLmxlbmd0aDtlKyspdGhpcy5vc3RhdGVbZV09dGhpcy5pc3RhdGVbZV09MDt0aGlzLmlubmVyLmNsZWFuKCksdGhpcy5vdXRlci5jbGVhbigpfSxlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaW5uZXIudXBkYXRlKGUpLHRoaXN9LGUucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vdXRlci5maW5pc2hlZD90aGlzLm91dGVyLmZpbmlzaChlKToodGhpcy5pbm5lci5maW5pc2goZSksdGhpcy5vdXRlci51cGRhdGUoZSx0aGlzLmRpZ2VzdExlbmd0aCkuZmluaXNoKGUpKSx0aGlzfSxlLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgVWludDhBcnJheSh0aGlzLmRpZ2VzdExlbmd0aCk7cmV0dXJuIHRoaXMuZmluaXNoKGUpLGV9LGV9KCk7ZnVuY3Rpb24gbyhlKXt2YXIgdD0obmV3IHIpLnVwZGF0ZShlKSxuPXQuZGlnZXN0KCk7cmV0dXJuIHQuY2xlYW4oKSxufWZ1bmN0aW9uIHMoZSx0KXt2YXIgbj1uZXcgaShlKS51cGRhdGUodCkscj1uLmRpZ2VzdCgpO3JldHVybiBuLmNsZWFuKCkscn1mdW5jdGlvbiBhKGUsdCxuLHIpe3ZhciBpPXJbMF07aWYoMD09PWkpdGhyb3cgbmV3IEVycm9yKCJoa2RmOiBjYW5ub3QgZXhwYW5kIG1vcmUiKTt0LnJlc2V0KCksaT4xJiZ0LnVwZGF0ZShlKSxuJiZ0LnVwZGF0ZShuKSx0LnVwZGF0ZShyKSx0LmZpbmlzaChlKSxyWzBdKyt9ZS5ITUFDPWksZS5oYXNoPW8sZS5kZWZhdWx0PW8sZS5obWFjPXM7dmFyIGM9bmV3IFVpbnQ4QXJyYXkoZS5kaWdlc3RMZW5ndGgpO2Z1bmN0aW9uIHUoZSx0LG4scil7dm9pZCAwPT09dCYmKHQ9Yyksdm9pZCAwPT09ciYmKHI9MzIpO2Zvcih2YXIgbz1uZXcgVWludDhBcnJheShbMV0pLHU9cyh0LGUpLGw9bmV3IGkodSksZD1uZXcgVWludDhBcnJheShsLmRpZ2VzdExlbmd0aCksaD1kLmxlbmd0aCxmPW5ldyBVaW50OEFycmF5KHIpLHA9MDtwPHI7cCsrKWg9PT1kLmxlbmd0aCYmKGEoZCxsLG4sbyksaD0wKSxmW3BdPWRbaCsrXTtyZXR1cm4gbC5jbGVhbigpLGQuZmlsbCgwKSxvLmZpbGwoMCksZn1mdW5jdGlvbiBsKGUsdCxuLHIpe2Zvcih2YXIgbz1uZXcgaShlKSxzPW8uZGlnZXN0TGVuZ3RoLGE9bmV3IFVpbnQ4QXJyYXkoNCksYz1uZXcgVWludDhBcnJheShzKSx1PW5ldyBVaW50OEFycmF5KHMpLGw9bmV3IFVpbnQ4QXJyYXkociksZD0wO2QqczxyO2QrKyl7dmFyIGg9ZCsxO2FbMF09aD4+PjI0JjI1NSxhWzFdPWg+Pj4xNiYyNTUsYVsyXT1oPj4+OCYyNTUsYVszXT1oPj4+MCYyNTUsby5yZXNldCgpLG8udXBkYXRlKHQpLG8udXBkYXRlKGEpLG8uZmluaXNoKHUpO2Zvcih2YXIgZj0wO2Y8cztmKyspY1tmXT11W2ZdO2ZvcihmPTI7Zjw9bjtmKyspe28ucmVzZXQoKSxvLnVwZGF0ZSh1KS5maW5pc2godSk7Zm9yKHZhciBwPTA7cDxzO3ArKyljW3BdXj11W3BdfWZvcihmPTA7ZjxzJiZkKnMrZjxyO2YrKylsW2QqcytmXT1jW2ZdfWZvcihkPTA7ZDxzO2QrKyljW2RdPXVbZF09MDtmb3IoZD0wO2Q8NDtkKyspYVtkXT0wO3JldHVybiBvLmNsZWFuKCksbH1lLmhrZGY9dSxlLnBia2RmMj1sfShyKTt2YXIgaT1yLmRlZmF1bHQ7Zm9yKHZhciBvIGluIHIpaVtvXT1yW29dO2UuZXhwb3J0cz1pfSgpfSgkbik7dmFyIFpuPUQoJG4uZXhwb3J0cyksUW49Y3J5cHRvO2NvbnN0IGVyPWU9PmUgaW5zdGFuY2VvZiBDcnlwdG9LZXksdHI9bmV3IFRleHRFbmNvZGVyLG5yPW5ldyBUZXh0RGVjb2Rlcjtjb25zdCBycj1lPT57bGV0IHQ9ZTt0IGluc3RhbmNlb2YgVWludDhBcnJheSYmKHQ9bnIuZGVjb2RlKHQpKSx0PXQucmVwbGFjZSgvLS9nLCIrIikucmVwbGFjZSgvXy9nLCIvIikucmVwbGFjZSgvXHMvZywiIik7dHJ5e3JldHVybihlPT57Y29uc3QgdD1hdG9iKGUpLG49bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKW5bZV09dC5jaGFyQ29kZUF0KGUpO3JldHVybiBufSkodCl9Y2F0Y2goZSl7dGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGlucHV0IHRvIGJlIGRlY29kZWQgaXMgbm90IGNvcnJlY3RseSBlbmNvZGVkLiIpfX07Y2xhc3MgaXIgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlKXt2YXIgdDtzdXBlcihlKSx0aGlzLmNvZGU9IkVSUl9KT1NFX0dFTkVSSUMiLHRoaXMubmFtZT10aGlzLmNvbnN0cnVjdG9yLm5hbWUsbnVsbD09PSh0PUVycm9yLmNhcHR1cmVTdGFja1RyYWNlKXx8dm9pZCAwPT09dHx8dC5jYWxsKEVycm9yLHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcil9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KT1NFX0dFTkVSSUMifX1jbGFzcyBvciBleHRlbmRzIGlye2NvbnN0cnVjdG9yKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToidW5zcGVjaWZpZWQiLG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOiJ1bnNwZWNpZmllZCI7c3VwZXIoZSksdGhpcy5jb2RlPSJFUlJfSldUX0NMQUlNX1ZBTElEQVRJT05fRkFJTEVEIix0aGlzLmNsYWltPXQsdGhpcy5yZWFzb249bn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXVF9DTEFJTV9WQUxJREFUSU9OX0ZBSUxFRCJ9fWNsYXNzIHNyIGV4dGVuZHMgaXJ7Y29uc3RydWN0b3IoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJ1bnNwZWNpZmllZCIsbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06InVuc3BlY2lmaWVkIjtzdXBlcihlKSx0aGlzLmNvZGU9IkVSUl9KV1RfRVhQSVJFRCIsdGhpcy5jbGFpbT10LHRoaXMucmVhc29uPW59c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV1RfRVhQSVJFRCJ9fWNsYXNzIGFyIGV4dGVuZHMgaXJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pPU0VfQUxHX05PVF9BTExPV0VEIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pPU0VfQUxHX05PVF9BTExPV0VEIn19Y2xhc3MgY3IgZXh0ZW5kcyBpcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSk9TRV9OT1RfU1VQUE9SVEVEIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pPU0VfTk9UX1NVUFBPUlRFRCJ9fWNsYXNzIHVyIGV4dGVuZHMgaXJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXU19JTlZBTElEIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXU19JTlZBTElEIn19Y2xhc3MgbHIgZXh0ZW5kcyBpcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldUX0lOVkFMSUQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldUX0lOVkFMSUQifX1jbGFzcyBkciBleHRlbmRzIGlye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV0tTX0lOVkFMSUQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldLU19JTlZBTElEIn19Y2xhc3MgaHIgZXh0ZW5kcyBpcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldLU19OT19NQVRDSElOR19LRVkiLHRoaXMubWVzc2FnZT0ibm8gYXBwbGljYWJsZSBrZXkgZm91bmQgaW4gdGhlIEpTT04gV2ViIEtleSBTZXQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldLU19OT19NQVRDSElOR19LRVkifX1jbGFzcyBmciBleHRlbmRzIGlye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV0tTX01VTFRJUExFX01BVENISU5HX0tFWVMiLHRoaXMubWVzc2FnZT0ibXVsdGlwbGUgbWF0Y2hpbmcga2V5cyBmb3VuZCBpbiB0aGUgSlNPTiBXZWIgS2V5IFNldCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV0tTX01VTFRJUExFX01BVENISU5HX0tFWVMifX1jbGFzcyBwciBleHRlbmRzIGlye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV1NfU0lHTkFUVVJFX1ZFUklGSUNBVElPTl9GQUlMRUQiLHRoaXMubWVzc2FnZT0ic2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBmYWlsZWQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldTX1NJR05BVFVSRV9WRVJJRklDQVRJT05fRkFJTEVEIn19ZnVuY3Rpb24gZ3IoKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgV2ViU29ja2V0UGFpcn1mdW5jdGlvbiB2cihlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06ImFsZ29yaXRobS5uYW1lIjtyZXR1cm4gbmV3IFR5cGVFcnJvcigiQ3J5cHRvS2V5IGRvZXMgbm90IHN1cHBvcnQgdGhpcyBvcGVyYXRpb24sIGl0cyAiLmNvbmNhdCh0LCIgbXVzdCBiZSAiKS5jb25jYXQoZSkpfWZ1bmN0aW9uIHlyKGUsdCl7cmV0dXJuIGUubmFtZT09PXR9ZnVuY3Rpb24gbXIoZSl7cmV0dXJuIHBhcnNlSW50KGUubmFtZS5zbGljZSg0KSwxMCl9ZnVuY3Rpb24gd3IoZSl7c3dpdGNoKGUpe2Nhc2UiRVMyNTYiOnJldHVybiJQLTI1NiI7Y2FzZSJFUzM4NCI6cmV0dXJuIlAtMzg0IjtjYXNlIkVTNTEyIjpyZXR1cm4iUC01MjEiO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bnJlYWNoYWJsZSIpfX1mdW5jdGlvbiBfcihlLHQpe2lmKHQubGVuZ3RoJiYhdC5zb21lKCh0PT5lLnVzYWdlcy5pbmNsdWRlcyh0KSkpKXtsZXQgZT0iQ3J5cHRvS2V5IGRvZXMgbm90IHN1cHBvcnQgdGhpcyBvcGVyYXRpb24sIGl0cyB1c2FnZXMgbXVzdCBpbmNsdWRlICI7aWYodC5sZW5ndGg+Mil7Y29uc3Qgbj10LnBvcCgpO2UrPSJvbmUgb2YgIi5jb25jYXQodC5qb2luKCIsICIpLCIsIG9yICIpLmNvbmNhdChuLCIuIil9ZWxzZSAyPT09dC5sZW5ndGg/ZSs9Im9uZSBvZiAiLmNvbmNhdCh0WzBdLCIgb3IgIikuY29uY2F0KHRbMV0sIi4iKTplKz0iIi5jb25jYXQodFswXSwiLiIpO3Rocm93IG5ldyBUeXBlRXJyb3IoZSl9fXZhciBTcj1mdW5jdGlvbihlKXtsZXQgdD0iS2V5IG11c3QgYmUgIjtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShuPjE/bi0xOjApLGk9MTtpPG47aSsrKXJbaS0xXT1hcmd1bWVudHNbaV07aWYoci5sZW5ndGg+Mil7Y29uc3QgZT1yLnBvcCgpO3QrPSJvbmUgb2YgdHlwZSAiLmNvbmNhdChyLmpvaW4oIiwgIiksIiwgb3IgIikuY29uY2F0KGUsIi4iKX1lbHNlIDI9PT1yLmxlbmd0aD90Kz0ib25lIG9mIHR5cGUgIi5jb25jYXQoclswXSwiIG9yICIpLmNvbmNhdChyWzFdLCIuIik6dCs9Im9mIHR5cGUgIi5jb25jYXQoclswXSwiLiIpO3JldHVybiBudWxsPT1lP3QrPSIgUmVjZWl2ZWQgIi5jb25jYXQoZSk6ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUubmFtZT90Kz0iIFJlY2VpdmVkIGZ1bmN0aW9uICIuY29uY2F0KGUubmFtZSk6Im9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT1lJiZlLmNvbnN0cnVjdG9yJiZlLmNvbnN0cnVjdG9yLm5hbWUmJih0Kz0iIFJlY2VpdmVkIGFuIGluc3RhbmNlIG9mICIuY29uY2F0KGUuY29uc3RydWN0b3IubmFtZSkpLHR9LGJyPWU9PmVyKGUpO2NvbnN0IGtyPVsiQ3J5cHRvS2V5Il07ZnVuY3Rpb24gRXIoZSl7aWYoIm9iamVjdCIhPXR5cGVvZih0PWUpfHxudWxsPT09dHx8IltvYmplY3QgT2JqZWN0XSIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkpcmV0dXJuITE7dmFyIHQ7aWYobnVsbD09PU9iamVjdC5nZXRQcm90b3R5cGVPZihlKSlyZXR1cm4hMDtsZXQgbj1lO2Zvcig7bnVsbCE9PU9iamVjdC5nZXRQcm90b3R5cGVPZihuKTspbj1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobik7cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PW59Y29uc3QgVHI9YXN5bmMgZT0+e3ZhciB0LG47Y29uc3R7YWxnb3JpdGhtOnIsa2V5VXNhZ2VzOml9PWZ1bmN0aW9uKGUpe2xldCB0LG47c3dpdGNoKGUua3R5KXtjYXNlIm9jdCI6c3dpdGNoKGUuYWxnKXtjYXNlIkhTMjU2IjpjYXNlIkhTMzg0IjpjYXNlIkhTNTEyIjp0PXtuYW1lOiJITUFDIixoYXNoOiJTSEEtIi5jb25jYXQoZS5hbGcuc2xpY2UoLTMpKX0sbj1bInNpZ24iLCJ2ZXJpZnkiXTticmVhaztjYXNlIkExMjhDQkMtSFMyNTYiOmNhc2UiQTE5MkNCQy1IUzM4NCI6Y2FzZSJBMjU2Q0JDLUhTNTEyIjp0aHJvdyBuZXcgY3IoIiIuY29uY2F0KGUuYWxnLCIga2V5cyBjYW5ub3QgYmUgaW1wb3J0ZWQgYXMgQ3J5cHRvS2V5IGluc3RhbmNlcyIpKTtjYXNlIkExMjhHQ00iOmNhc2UiQTE5MkdDTSI6Y2FzZSJBMjU2R0NNIjpjYXNlIkExMjhHQ01LVyI6Y2FzZSJBMTkyR0NNS1ciOmNhc2UiQTI1NkdDTUtXIjp0PXtuYW1lOiJBRVMtR0NNIn0sbj1bImVuY3J5cHQiLCJkZWNyeXB0Il07YnJlYWs7Y2FzZSJBMTI4S1ciOmNhc2UiQTE5MktXIjpjYXNlIkEyNTZLVyI6dD17bmFtZToiQUVTLUtXIn0sbj1bIndyYXBLZXkiLCJ1bndyYXBLZXkiXTticmVhaztjYXNlIlBCRVMyLUhTMjU2K0ExMjhLVyI6Y2FzZSJQQkVTMi1IUzM4NCtBMTkyS1ciOmNhc2UiUEJFUzItSFM1MTIrQTI1NktXIjp0PXtuYW1lOiJQQktERjIifSxuPVsiZGVyaXZlQml0cyJdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IGNyKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIEpXSyAiYWxnIiAoQWxnb3JpdGhtKSBQYXJhbWV0ZXIgdmFsdWUnKX1icmVhaztjYXNlIlJTQSI6c3dpdGNoKGUuYWxnKXtjYXNlIlBTMjU2IjpjYXNlIlBTMzg0IjpjYXNlIlBTNTEyIjp0PXtuYW1lOiJSU0EtUFNTIixoYXNoOiJTSEEtIi5jb25jYXQoZS5hbGcuc2xpY2UoLTMpKX0sbj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIlJTMjU2IjpjYXNlIlJTMzg0IjpjYXNlIlJTNTEyIjp0PXtuYW1lOiJSU0FTU0EtUEtDUzEtdjFfNSIsaGFzaDoiU0hBLSIuY29uY2F0KGUuYWxnLnNsaWNlKC0zKSl9LG49ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJSU0EtT0FFUCI6Y2FzZSJSU0EtT0FFUC0yNTYiOmNhc2UiUlNBLU9BRVAtMzg0IjpjYXNlIlJTQS1PQUVQLTUxMiI6dD17bmFtZToiUlNBLU9BRVAiLGhhc2g6IlNIQS0iLmNvbmNhdChwYXJzZUludChlLmFsZy5zbGljZSgtMyksMTApfHwxKX0sbj1lLmQ/WyJkZWNyeXB0IiwidW53cmFwS2V5Il06WyJlbmNyeXB0Iiwid3JhcEtleSJdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IGNyKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIEpXSyAiYWxnIiAoQWxnb3JpdGhtKSBQYXJhbWV0ZXIgdmFsdWUnKX1icmVhaztjYXNlIkVDIjpzd2l0Y2goZS5hbGcpe2Nhc2UiRVMyNTYiOnQ9e25hbWU6IkVDRFNBIixuYW1lZEN1cnZlOiJQLTI1NiJ9LG49ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJFUzM4NCI6dD17bmFtZToiRUNEU0EiLG5hbWVkQ3VydmU6IlAtMzg0In0sbj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIkVTNTEyIjp0PXtuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZToiUC01MjEifSxuPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiRUNESC1FUyI6Y2FzZSJFQ0RILUVTK0ExMjhLVyI6Y2FzZSJFQ0RILUVTK0ExOTJLVyI6Y2FzZSJFQ0RILUVTK0EyNTZLVyI6dD17bmFtZToiRUNESCIsbmFtZWRDdXJ2ZTplLmNydn0sbj1lLmQ/WyJkZXJpdmVCaXRzIl06W107YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgY3IoJ0ludmFsaWQgb3IgdW5zdXBwb3J0ZWQgSldLICJhbGciIChBbGdvcml0aG0pIFBhcmFtZXRlciB2YWx1ZScpfWJyZWFrO2Nhc2UgZ3IoKSYmIk9LUCI6aWYoIkVkRFNBIiE9PWUuYWxnKXRocm93IG5ldyBjcignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyk7aWYoIkVkMjU1MTkiIT09ZS5jcnYpdGhyb3cgbmV3IGNyKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIEpXSyAiY3J2IiAoU3VidHlwZSBvZiBLZXkgUGFpcikgUGFyYW1ldGVyIHZhbHVlJyk7dD17bmFtZToiTk9ERS1FRDI1NTE5IixuYW1lZEN1cnZlOiJOT0RFLUVEMjU1MTkifSxuPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IGNyKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIEpXSyAia3R5IiAoS2V5IFR5cGUpIFBhcmFtZXRlciB2YWx1ZScpfXJldHVybnthbGdvcml0aG06dCxrZXlVc2FnZXM6bn19KGUpLG89W3IsbnVsbCE9PSh0PWUuZXh0KSYmdm9pZCAwIT09dCYmdCxudWxsIT09KG49ZS5rZXlfb3BzKSYmdm9pZCAwIT09bj9uOmldO2lmKCJQQktERjIiPT09ci5uYW1lKXJldHVybiBRbi5zdWJ0bGUuaW1wb3J0S2V5KCJyYXciLHJyKGUuayksLi4ubyk7Y29uc3Qgcz17Li4uZX07cmV0dXJuIGRlbGV0ZSBzLmFsZyxRbi5zdWJ0bGUuaW1wb3J0S2V5KCJqd2siLHMsLi4ubyl9O2NvbnN0IFJyPShlLHQsbik9PntlLnN0YXJ0c1dpdGgoIkhTIil8fCJkaXIiPT09ZXx8ZS5zdGFydHNXaXRoKCJQQkVTMiIpfHwvXkFcZHszfSg/OkdDTSk/S1ckLy50ZXN0KGUpPyhlPT57aWYoIShlIGluc3RhbmNlb2YgVWludDhBcnJheSkpe2lmKCFicihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFNyKGUsLi4ua3IsIlVpbnQ4QXJyYXkiKSk7aWYoInNlY3JldCIhPT1lLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiIi5jb25jYXQoa3Iuam9pbigiIG9yICIpLCcgaW5zdGFuY2VzIGZvciBzeW1tZXRyaWMgYWxnb3JpdGhtcyBtdXN0IGJlIG9mIHR5cGUgInNlY3JldCInKSl9fSkodCk6KChlLHQpPT57aWYoIWJyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoU3IoZSwuLi5rcikpO2lmKCJzZWNyZXQiPT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoIiIuY29uY2F0KGtyLmpvaW4oIiBvciAiKSwnIGluc3RhbmNlcyBmb3IgYXN5bW1ldHJpYyBhbGdvcml0aG1zIG11c3Qgbm90IGJlIG9mIHR5cGUgInNlY3JldCInKSk7aWYoInNpZ24iPT09dCYmInB1YmxpYyI9PT1lLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiIi5jb25jYXQoa3Iuam9pbigiIG9yICIpLCcgaW5zdGFuY2VzIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobSBzaWduaW5nIG11c3QgYmUgb2YgdHlwZSAicHJpdmF0ZSInKSk7aWYoImRlY3J5cHQiPT09dCYmInB1YmxpYyI9PT1lLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiIi5jb25jYXQoa3Iuam9pbigiIG9yICIpLCcgaW5zdGFuY2VzIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobSBkZWNyeXB0aW9uIG11c3QgYmUgb2YgdHlwZSAicHJpdmF0ZSInKSk7aWYoZS5hbGdvcml0aG0mJiJ2ZXJpZnkiPT09dCYmInByaXZhdGUiPT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoIiIuY29uY2F0KGtyLmpvaW4oIiBvciAiKSwnIGluc3RhbmNlcyBmb3IgYXN5bW1ldHJpYyBhbGdvcml0aG0gdmVyaWZ5aW5nIG11c3QgYmUgb2YgdHlwZSAicHVibGljIicpKTtpZihlLmFsZ29yaXRobSYmImVuY3J5cHQiPT09dCYmInByaXZhdGUiPT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoIiIuY29uY2F0KGtyLmpvaW4oIiBvciAiKSwnIGluc3RhbmNlcyBmb3IgYXN5bW1ldHJpYyBhbGdvcml0aG0gZW5jcnlwdGlvbiBtdXN0IGJlIG9mIHR5cGUgInB1YmxpYyInKSl9KSh0LG4pfTtmdW5jdGlvbiBBcihlLHQsbil7aWYoZXIodCkpcmV0dXJuIGZ1bmN0aW9uKGUsdCl7c3dpdGNoKHQpe2Nhc2UiSFMyNTYiOmNhc2UiSFMzODQiOmNhc2UiSFM1MTIiOntpZigheXIoZS5hbGdvcml0aG0sIkhNQUMiKSl0aHJvdyB2cigiSE1BQyIpO2NvbnN0IG49cGFyc2VJbnQodC5zbGljZSgyKSwxMCk7aWYobXIoZS5hbGdvcml0aG0uaGFzaCkhPT1uKXRocm93IHZyKCJTSEEtIi5jb25jYXQobiksImFsZ29yaXRobS5oYXNoIik7YnJlYWt9Y2FzZSJSUzI1NiI6Y2FzZSJSUzM4NCI6Y2FzZSJSUzUxMiI6e2lmKCF5cihlLmFsZ29yaXRobSwiUlNBU1NBLVBLQ1MxLXYxXzUiKSl0aHJvdyB2cigiUlNBU1NBLVBLQ1MxLXYxXzUiKTtjb25zdCBuPXBhcnNlSW50KHQuc2xpY2UoMiksMTApO2lmKG1yKGUuYWxnb3JpdGhtLmhhc2gpIT09bil0aHJvdyB2cigiU0hBLSIuY29uY2F0KG4pLCJhbGdvcml0aG0uaGFzaCIpO2JyZWFrfWNhc2UiUFMyNTYiOmNhc2UiUFMzODQiOmNhc2UiUFM1MTIiOntpZigheXIoZS5hbGdvcml0aG0sIlJTQS1QU1MiKSl0aHJvdyB2cigiUlNBLVBTUyIpO2NvbnN0IG49cGFyc2VJbnQodC5zbGljZSgyKSwxMCk7aWYobXIoZS5hbGdvcml0aG0uaGFzaCkhPT1uKXRocm93IHZyKCJTSEEtIi5jb25jYXQobiksImFsZ29yaXRobS5oYXNoIik7YnJlYWt9Y2FzZSBncigpJiYiRWREU0EiOmlmKCF5cihlLmFsZ29yaXRobSwiTk9ERS1FRDI1NTE5IikpdGhyb3cgdnIoIk5PREUtRUQyNTUxOSIpO2JyZWFrO2Nhc2UiRVMyNTYiOmNhc2UiRVMzODQiOmNhc2UiRVM1MTIiOntpZigheXIoZS5hbGdvcml0aG0sIkVDRFNBIikpdGhyb3cgdnIoIkVDRFNBIik7Y29uc3Qgbj13cih0KTtpZihlLmFsZ29yaXRobS5uYW1lZEN1cnZlIT09bil0aHJvdyB2cihuLCJhbGdvcml0aG0ubmFtZWRDdXJ2ZSIpO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcigiQ3J5cHRvS2V5IGRvZXMgbm90IHN1cHBvcnQgdGhpcyBvcGVyYXRpb24iKX1mb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShuPjI/bi0yOjApLGk9MjtpPG47aSsrKXJbaS0yXT1hcmd1bWVudHNbaV07X3IoZSxyKX0odCxlLG4pLHQ7aWYodCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpe2lmKCFlLnN0YXJ0c1dpdGgoIkhTIikpdGhyb3cgbmV3IFR5cGVFcnJvcihTcih0LC4uLmtyKSk7cmV0dXJuIFFuLnN1YnRsZS5pbXBvcnRLZXkoInJhdyIsdCx7aGFzaDoiU0hBLSIuY29uY2F0KGUuc2xpY2UoLTMpKSxuYW1lOiJITUFDIn0sITEsW25dKX10aHJvdyBuZXcgVHlwZUVycm9yKFNyKHQsLi4ua3IsIlVpbnQ4QXJyYXkiKSl9Y29uc3QgQ3I9YXN5bmMoZSx0LG4scik9Pntjb25zdCBpPWF3YWl0IEFyKGUsdCwidmVyaWZ5Iik7KChlLHQpPT57aWYoZS5zdGFydHNXaXRoKCJSUyIpfHxlLnN0YXJ0c1dpdGgoIlBTIikpe2NvbnN0e21vZHVsdXNMZW5ndGg6bn09dC5hbGdvcml0aG07aWYoIm51bWJlciIhPXR5cGVvZiBufHxuPDIwNDgpdGhyb3cgbmV3IFR5cGVFcnJvcigiIi5jb25jYXQoZSwiIHJlcXVpcmVzIGtleSBtb2R1bHVzTGVuZ3RoIHRvIGJlIDIwNDggYml0cyBvciBsYXJnZXIiKSl9fSkoZSxpKTtjb25zdCBvPWZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj0iU0hBLSIuY29uY2F0KGUuc2xpY2UoLTMpKTtzd2l0Y2goZSl7Y2FzZSJIUzI1NiI6Y2FzZSJIUzM4NCI6Y2FzZSJIUzUxMiI6cmV0dXJue2hhc2g6bixuYW1lOiJITUFDIn07Y2FzZSJQUzI1NiI6Y2FzZSJQUzM4NCI6Y2FzZSJQUzUxMiI6cmV0dXJue2hhc2g6bixuYW1lOiJSU0EtUFNTIixzYWx0TGVuZ3RoOmUuc2xpY2UoLTMpPj4zfTtjYXNlIlJTMjU2IjpjYXNlIlJTMzg0IjpjYXNlIlJTNTEyIjpyZXR1cm57aGFzaDpuLG5hbWU6IlJTQVNTQS1QS0NTMS12MV81In07Y2FzZSJFUzI1NiI6Y2FzZSJFUzM4NCI6Y2FzZSJFUzUxMiI6cmV0dXJue2hhc2g6bixuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZTp0Lm5hbWVkQ3VydmV9O2Nhc2UgZ3IoKSYmIkVkRFNBIjpjb25zdHtuYW1lZEN1cnZlOnJ9PXQ7cmV0dXJue25hbWU6cixuYW1lZEN1cnZlOnJ9O2RlZmF1bHQ6dGhyb3cgbmV3IGNyKCJhbGcgIi5jb25jYXQoZSwiIGlzIG5vdCBzdXBwb3J0ZWQgZWl0aGVyIGJ5IEpPU0Ugb3IgeW91ciBqYXZhc2NyaXB0IHJ1bnRpbWUiKSl9fShlLGkuYWxnb3JpdGhtKTt0cnl7cmV0dXJuIGF3YWl0IFFuLnN1YnRsZS52ZXJpZnkobyxpLG4scil9Y2F0Y2goZSl7cmV0dXJuITF9fTthc3luYyBmdW5jdGlvbiBEcihlLHQsbil7dmFyIHI7aWYoIUVyKGUpKXRocm93IG5ldyB1cigiRmxhdHRlbmVkIEpXUyBtdXN0IGJlIGFuIG9iamVjdCIpO2lmKHZvaWQgMD09PWUucHJvdGVjdGVkJiZ2b2lkIDA9PT1lLmhlYWRlcil0aHJvdyBuZXcgdXIoJ0ZsYXR0ZW5lZCBKV1MgbXVzdCBoYXZlIGVpdGhlciBvZiB0aGUgInByb3RlY3RlZCIgb3IgImhlYWRlciIgbWVtYmVycycpO2lmKHZvaWQgMCE9PWUucHJvdGVjdGVkJiYic3RyaW5nIiE9dHlwZW9mIGUucHJvdGVjdGVkKXRocm93IG5ldyB1cigiSldTIFByb3RlY3RlZCBIZWFkZXIgaW5jb3JyZWN0IHR5cGUiKTtpZih2b2lkIDA9PT1lLnBheWxvYWQpdGhyb3cgbmV3IHVyKCJKV1MgUGF5bG9hZCBtaXNzaW5nIik7aWYoInN0cmluZyIhPXR5cGVvZiBlLnNpZ25hdHVyZSl0aHJvdyBuZXcgdXIoIkpXUyBTaWduYXR1cmUgbWlzc2luZyBvciBpbmNvcnJlY3QgdHlwZSIpO2lmKHZvaWQgMCE9PWUuaGVhZGVyJiYhRXIoZS5oZWFkZXIpKXRocm93IG5ldyB1cigiSldTIFVucHJvdGVjdGVkIEhlYWRlciBpbmNvcnJlY3QgdHlwZSIpO2xldCBpPXt9O2lmKGUucHJvdGVjdGVkKXtjb25zdCB0PXJyKGUucHJvdGVjdGVkKTt0cnl7aT1KU09OLnBhcnNlKG5yLmRlY29kZSh0KSl9Y2F0Y2goZSl7dGhyb3cgbmV3IHVyKCJKV1MgUHJvdGVjdGVkIEhlYWRlciBpcyBpbnZhbGlkIil9fWlmKCFmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXRbbl09YXJndW1lbnRzW25dO2NvbnN0IHI9dC5maWx0ZXIoQm9vbGVhbik7aWYoMD09PXIubGVuZ3RofHwxPT09ci5sZW5ndGgpcmV0dXJuITA7bGV0IGk7Zm9yKGNvbnN0IGUgb2Ygcil7Y29uc3QgdD1PYmplY3Qua2V5cyhlKTtpZihpJiYwIT09aS5zaXplKWZvcihjb25zdCBlIG9mIHQpe2lmKGkuaGFzKGUpKXJldHVybiExO2kuYWRkKGUpfWVsc2UgaT1uZXcgU2V0KHQpfXJldHVybiEwfShpLGUuaGVhZGVyKSl0aHJvdyBuZXcgdXIoIkpXUyBQcm90ZWN0ZWQgYW5kIEpXUyBVbnByb3RlY3RlZCBIZWFkZXIgUGFyYW1ldGVyIG5hbWVzIG11c3QgYmUgZGlzam9pbnQiKTtjb25zdCBvPXsuLi5pLC4uLmUuaGVhZGVyfSxzPWZ1bmN0aW9uKGUsdCxuLHIsaSl7aWYodm9pZCAwIT09aS5jcml0JiZ2b2lkIDA9PT1yLmNyaXQpdGhyb3cgbmV3IGUoJyJjcml0IiAoQ3JpdGljYWwpIEhlYWRlciBQYXJhbWV0ZXIgTVVTVCBiZSBpbnRlZ3JpdHkgcHJvdGVjdGVkJyk7aWYoIXJ8fHZvaWQgMD09PXIuY3JpdClyZXR1cm4gbmV3IFNldDtpZighQXJyYXkuaXNBcnJheShyLmNyaXQpfHwwPT09ci5jcml0Lmxlbmd0aHx8ci5jcml0LnNvbWUoKGU9PiJzdHJpbmciIT10eXBlb2YgZXx8MD09PWUubGVuZ3RoKSkpdGhyb3cgbmV3IGUoJyJjcml0IiAoQ3JpdGljYWwpIEhlYWRlciBQYXJhbWV0ZXIgTVVTVCBiZSBhbiBhcnJheSBvZiBub24tZW1wdHkgc3RyaW5ncyB3aGVuIHByZXNlbnQnKTtsZXQgbztvPXZvaWQgMCE9PW4/bmV3IE1hcChbLi4uT2JqZWN0LmVudHJpZXMobiksLi4udC5lbnRyaWVzKCldKTp0O2Zvcihjb25zdCB0IG9mIHIuY3JpdCl7aWYoIW8uaGFzKHQpKXRocm93IG5ldyBjcignRXh0ZW5zaW9uIEhlYWRlciBQYXJhbWV0ZXIgIicuY29uY2F0KHQsJyIgaXMgbm90IHJlY29nbml6ZWQnKSk7aWYodm9pZCAwPT09aVt0XSl0aHJvdyBuZXcgZSgnRXh0ZW5zaW9uIEhlYWRlciBQYXJhbWV0ZXIgIicuY29uY2F0KHQsJyIgaXMgbWlzc2luZycpKTtpZihvLmdldCh0KSYmdm9pZCAwPT09clt0XSl0aHJvdyBuZXcgZSgnRXh0ZW5zaW9uIEhlYWRlciBQYXJhbWV0ZXIgIicuY29uY2F0KHQsJyIgTVVTVCBiZSBpbnRlZ3JpdHkgcHJvdGVjdGVkJykpfXJldHVybiBuZXcgU2V0KHIuY3JpdCl9KHVyLG5ldyBNYXAoW1siYjY0IiwhMF1dKSxudWxsPT1uP3ZvaWQgMDpuLmNyaXQsaSxvKTtsZXQgYT0hMDtpZihzLmhhcygiYjY0IikmJihhPWkuYjY0LCJib29sZWFuIiE9dHlwZW9mIGEpKXRocm93IG5ldyB1cignVGhlICJiNjQiIChiYXNlNjR1cmwtZW5jb2RlIHBheWxvYWQpIEhlYWRlciBQYXJhbWV0ZXIgbXVzdCBiZSBhIGJvb2xlYW4nKTtjb25zdHthbGc6Y309bztpZigic3RyaW5nIiE9dHlwZW9mIGN8fCFjKXRocm93IG5ldyB1cignSldTICJhbGciIChBbGdvcml0aG0pIEhlYWRlciBQYXJhbWV0ZXIgbWlzc2luZyBvciBpbnZhbGlkJyk7Y29uc3QgdT1uJiYoKGUsdCk9PntpZih2b2lkIDAhPT10JiYoIUFycmF5LmlzQXJyYXkodCl8fHQuc29tZSgoZT0+InN0cmluZyIhPXR5cGVvZiBlKSkpKXRocm93IG5ldyBUeXBlRXJyb3IoJyInLmNvbmNhdChlLCciIG9wdGlvbiBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3MnKSk7aWYodClyZXR1cm4gbmV3IFNldCh0KX0pKCJhbGdvcml0aG1zIixuLmFsZ29yaXRobXMpO2lmKHUmJiF1LmhhcyhjKSl0aHJvdyBuZXcgYXIoJyJhbGciIChBbGdvcml0aG0pIEhlYWRlciBQYXJhbWV0ZXIgbm90IGFsbG93ZWQnKTtpZihhKXtpZigic3RyaW5nIiE9dHlwZW9mIGUucGF5bG9hZCl0aHJvdyBuZXcgdXIoIkpXUyBQYXlsb2FkIG11c3QgYmUgYSBzdHJpbmciKX1lbHNlIGlmKCJzdHJpbmciIT10eXBlb2YgZS5wYXlsb2FkJiYhKGUucGF5bG9hZCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKXRocm93IG5ldyB1cigiSldTIFBheWxvYWQgbXVzdCBiZSBhIHN0cmluZyBvciBhbiBVaW50OEFycmF5IGluc3RhbmNlIik7bGV0IGw9ITE7ImZ1bmN0aW9uIj09dHlwZW9mIHQmJih0PWF3YWl0IHQoaSxlKSxsPSEwKSxScihjLHQsInZlcmlmeSIpO2NvbnN0IGQ9ZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXTtjb25zdCByPXQucmVkdWNlKCgoZSx0KT0+e2xldHtsZW5ndGg6bn09dDtyZXR1cm4gZStufSksMCksaT1uZXcgVWludDhBcnJheShyKTtsZXQgbz0wO3JldHVybiB0LmZvckVhY2goKGU9PntpLnNldChlLG8pLG8rPWUubGVuZ3RofSkpLGl9KHRyLmVuY29kZShudWxsIT09KHI9ZS5wcm90ZWN0ZWQpJiZ2b2lkIDAhPT1yP3I6IiIpLHRyLmVuY29kZSgiLiIpLCJzdHJpbmciPT10eXBlb2YgZS5wYXlsb2FkP3RyLmVuY29kZShlLnBheWxvYWQpOmUucGF5bG9hZCksaD1ycihlLnNpZ25hdHVyZSk7aWYoIWF3YWl0IENyKGMsdCxoLGQpKXRocm93IG5ldyBwcjtsZXQgZjtmPWE/cnIoZS5wYXlsb2FkKToic3RyaW5nIj09dHlwZW9mIGUucGF5bG9hZD90ci5lbmNvZGUoZS5wYXlsb2FkKTplLnBheWxvYWQ7Y29uc3QgcD17cGF5bG9hZDpmfTtyZXR1cm4gdm9pZCAwIT09ZS5wcm90ZWN0ZWQmJihwLnByb3RlY3RlZEhlYWRlcj1pKSx2b2lkIDAhPT1lLmhlYWRlciYmKHAudW5wcm90ZWN0ZWRIZWFkZXI9ZS5oZWFkZXIpLGw/ey4uLnAsa2V5OnR9OnB9dmFyIFByPWU9Pk1hdGguZmxvb3IoZS5nZXRUaW1lKCkvMWUzKTtjb25zdCBJcj04NjQwMCxPcj0vXihcZCt8XGQrXC5cZCspID8oc2Vjb25kcz98c2Vjcz98c3xtaW51dGVzP3xtaW5zP3xtfGhvdXJzP3xocnM/fGh8ZGF5cz98ZHx3ZWVrcz98d3x5ZWFycz98eXJzP3x5KSQvaTt2YXIgVXI9ZT0+e2NvbnN0IHQ9T3IuZXhlYyhlKTtpZighdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIHRpbWUgcGVyaW9kIGZvcm1hdCIpO2NvbnN0IG49cGFyc2VGbG9hdCh0WzFdKTtzd2l0Y2godFsyXS50b0xvd2VyQ2FzZSgpKXtjYXNlInNlYyI6Y2FzZSJzZWNzIjpjYXNlInNlY29uZCI6Y2FzZSJzZWNvbmRzIjpjYXNlInMiOnJldHVybiBNYXRoLnJvdW5kKG4pO2Nhc2UibWludXRlIjpjYXNlIm1pbnV0ZXMiOmNhc2UibWluIjpjYXNlIm1pbnMiOmNhc2UibSI6cmV0dXJuIE1hdGgucm91bmQoNjAqbik7Y2FzZSJob3VyIjpjYXNlImhvdXJzIjpjYXNlImhyIjpjYXNlImhycyI6Y2FzZSJoIjpyZXR1cm4gTWF0aC5yb3VuZCgzNjAwKm4pO2Nhc2UiZGF5IjpjYXNlImRheXMiOmNhc2UiZCI6cmV0dXJuIE1hdGgucm91bmQobipJcik7Y2FzZSJ3ZWVrIjpjYXNlIndlZWtzIjpjYXNlInciOnJldHVybiBNYXRoLnJvdW5kKDYwNDgwMCpuKTtkZWZhdWx0OnJldHVybiBNYXRoLnJvdW5kKDMxNTU3NjAwKm4pfX07Y29uc3QgTHI9ZT0+ZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL15hcHBsaWNhdGlvblwvLywiIiksSHI9KGUsdCk9PiJzdHJpbmciPT10eXBlb2YgZT90LmluY2x1ZGVzKGUpOiEhQXJyYXkuaXNBcnJheShlKSYmdC5zb21lKFNldC5wcm90b3R5cGUuaGFzLmJpbmQobmV3IFNldChlKSkpO2FzeW5jIGZ1bmN0aW9uIE1yKGUsdCxuKXt2YXIgcjtjb25zdCBpPWF3YWl0IGFzeW5jIGZ1bmN0aW9uKGUsdCxuKXtpZihlIGluc3RhbmNlb2YgVWludDhBcnJheSYmKGU9bnIuZGVjb2RlKGUpKSwic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IHVyKCJDb21wYWN0IEpXUyBtdXN0IGJlIGEgc3RyaW5nIG9yIFVpbnQ4QXJyYXkiKTtjb25zdHswOnIsMTppLDI6byxsZW5ndGg6c309ZS5zcGxpdCgiLiIpO2lmKDMhPT1zKXRocm93IG5ldyB1cigiSW52YWxpZCBDb21wYWN0IEpXUyIpO2NvbnN0IGE9YXdhaXQgRHIoe3BheWxvYWQ6aSxwcm90ZWN0ZWQ6cixzaWduYXR1cmU6b30sdCxuKSxjPXtwYXlsb2FkOmEucGF5bG9hZCxwcm90ZWN0ZWRIZWFkZXI6YS5wcm90ZWN0ZWRIZWFkZXJ9O3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3suLi5jLGtleTphLmtleX06Y30oZSx0LG4pO2lmKChudWxsPT09KHI9aS5wcm90ZWN0ZWRIZWFkZXIuY3JpdCl8fHZvaWQgMD09PXI/dm9pZCAwOnIuaW5jbHVkZXMoImI2NCIpKSYmITE9PT1pLnByb3RlY3RlZEhlYWRlci5iNjQpdGhyb3cgbmV3IGxyKCJKV1RzIE1VU1QgTk9UIHVzZSB1bmVuY29kZWQgcGF5bG9hZCIpO2NvbnN0IG89ZnVuY3Rpb24oZSx0KXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307Y29uc3R7dHlwOnJ9PW47aWYociYmKCJzdHJpbmciIT10eXBlb2YgZS50eXB8fExyKGUudHlwKSE9PUxyKHIpKSl0aHJvdyBuZXcgb3IoJ3VuZXhwZWN0ZWQgInR5cCIgSldUIGhlYWRlciB2YWx1ZScsInR5cCIsImNoZWNrX2ZhaWxlZCIpO2xldCBpO3RyeXtpPUpTT04ucGFyc2UobnIuZGVjb2RlKHQpKX1jYXRjaChlKXt9aWYoIUVyKGkpKXRocm93IG5ldyBscigiSldUIENsYWltcyBTZXQgbXVzdCBiZSBhIHRvcC1sZXZlbCBKU09OIG9iamVjdCIpO2NvbnN0e2lzc3VlcjpvfT1uO2lmKG8mJiEoQXJyYXkuaXNBcnJheShvKT9vOltvXSkuaW5jbHVkZXMoaS5pc3MpKXRocm93IG5ldyBvcigndW5leHBlY3RlZCAiaXNzIiBjbGFpbSB2YWx1ZScsImlzcyIsImNoZWNrX2ZhaWxlZCIpO2NvbnN0e3N1YmplY3Q6c309bjtpZihzJiZpLnN1YiE9PXMpdGhyb3cgbmV3IG9yKCd1bmV4cGVjdGVkICJzdWIiIGNsYWltIHZhbHVlJywic3ViIiwiY2hlY2tfZmFpbGVkIik7Y29uc3R7YXVkaWVuY2U6YX09bjtpZihhJiYhSHIoaS5hdWQsInN0cmluZyI9PXR5cGVvZiBhP1thXTphKSl0aHJvdyBuZXcgb3IoJ3VuZXhwZWN0ZWQgImF1ZCIgY2xhaW0gdmFsdWUnLCJhdWQiLCJjaGVja19mYWlsZWQiKTtsZXQgYztzd2l0Y2godHlwZW9mIG4uY2xvY2tUb2xlcmFuY2Upe2Nhc2Uic3RyaW5nIjpjPVVyKG4uY2xvY2tUb2xlcmFuY2UpO2JyZWFrO2Nhc2UibnVtYmVyIjpjPW4uY2xvY2tUb2xlcmFuY2U7YnJlYWs7Y2FzZSJ1bmRlZmluZWQiOmM9MDticmVhaztkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgY2xvY2tUb2xlcmFuY2Ugb3B0aW9uIHR5cGUiKX1jb25zdHtjdXJyZW50RGF0ZTp1fT1uLGw9UHIodXx8bmV3IERhdGUpO2lmKCh2b2lkIDAhPT1pLmlhdHx8bi5tYXhUb2tlbkFnZSkmJiJudW1iZXIiIT10eXBlb2YgaS5pYXQpdGhyb3cgbmV3IG9yKCciaWF0IiBjbGFpbSBtdXN0IGJlIGEgbnVtYmVyJywiaWF0IiwiaW52YWxpZCIpO2lmKHZvaWQgMCE9PWkubmJmKXtpZigibnVtYmVyIiE9dHlwZW9mIGkubmJmKXRocm93IG5ldyBvcignIm5iZiIgY2xhaW0gbXVzdCBiZSBhIG51bWJlcicsIm5iZiIsImludmFsaWQiKTtpZihpLm5iZj5sK2MpdGhyb3cgbmV3IG9yKCcibmJmIiBjbGFpbSB0aW1lc3RhbXAgY2hlY2sgZmFpbGVkJywibmJmIiwiY2hlY2tfZmFpbGVkIil9aWYodm9pZCAwIT09aS5leHApe2lmKCJudW1iZXIiIT10eXBlb2YgaS5leHApdGhyb3cgbmV3IG9yKCciZXhwIiBjbGFpbSBtdXN0IGJlIGEgbnVtYmVyJywiZXhwIiwiaW52YWxpZCIpO2lmKGkuZXhwPD1sLWMpdGhyb3cgbmV3IHNyKCciZXhwIiBjbGFpbSB0aW1lc3RhbXAgY2hlY2sgZmFpbGVkJywiZXhwIiwiY2hlY2tfZmFpbGVkIil9aWYobi5tYXhUb2tlbkFnZSl7Y29uc3QgZT1sLWkuaWF0O2lmKGUtYz4oIm51bWJlciI9PXR5cGVvZiBuLm1heFRva2VuQWdlP24ubWF4VG9rZW5BZ2U6VXIobi5tYXhUb2tlbkFnZSkpKXRocm93IG5ldyBzcignImlhdCIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCAodG9vIGZhciBpbiB0aGUgcGFzdCknLCJpYXQiLCJjaGVja19mYWlsZWQiKTtpZihlPDAtYyl0aHJvdyBuZXcgb3IoJyJpYXQiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQgKGl0IHNob3VsZCBiZSBpbiB0aGUgcGFzdCknLCJpYXQiLCJjaGVja19mYWlsZWQiKX1yZXR1cm4gaX0oaS5wcm90ZWN0ZWRIZWFkZXIsaS5wYXlsb2FkLG4pLHM9e3BheWxvYWQ6byxwcm90ZWN0ZWRIZWFkZXI6aS5wcm90ZWN0ZWRIZWFkZXJ9O3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3suLi5zLGtleTppLmtleX06c31mdW5jdGlvbiBqcihlKXtyZXR1cm4gRXIoZSl9Y2xhc3MgcXJ7Y29uc3RydWN0b3IoZSl7aWYodGhpcy5fY2FjaGVkPW5ldyBXZWFrTWFwLCFmdW5jdGlvbihlKXtyZXR1cm4gZSYmIm9iamVjdCI9PXR5cGVvZiBlJiZBcnJheS5pc0FycmF5KGUua2V5cykmJmUua2V5cy5ldmVyeShqcil9KGUpKXRocm93IG5ldyBkcigiSlNPTiBXZWIgS2V5IFNldCBtYWxmb3JtZWQiKTt2YXIgdDt0aGlzLl9qd2tzPSh0PWUsImZ1bmN0aW9uIj09dHlwZW9mIHN0cnVjdHVyZWRDbG9uZT9zdHJ1Y3R1cmVkQ2xvbmUodCk6SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0KSkpfWFzeW5jIGdldEtleShlLHQpe2NvbnN0e2FsZzpuLGtpZDpyfT17Li4uZSwuLi50LmhlYWRlcn0saT1mdW5jdGlvbihlKXtzd2l0Y2goInN0cmluZyI9PXR5cGVvZiBlJiZlLnNsaWNlKDAsMikpe2Nhc2UiUlMiOmNhc2UiUFMiOnJldHVybiJSU0EiO2Nhc2UiRVMiOnJldHVybiJFQyI7Y2FzZSJFZCI6cmV0dXJuIk9LUCI7ZGVmYXVsdDp0aHJvdyBuZXcgY3IoJ1Vuc3VwcG9ydGVkICJhbGciIHZhbHVlIGZvciBhIEpTT04gV2ViIEtleSBTZXQnKX19KG4pLG89dGhpcy5fandrcy5rZXlzLmZpbHRlcigoZT0+e2xldCB0PWk9PT1lLmt0eTtpZih0JiYic3RyaW5nIj09dHlwZW9mIHImJih0PXI9PT1lLmtpZCksdCYmInN0cmluZyI9PXR5cGVvZiBlLmFsZyYmKHQ9bj09PWUuYWxnKSx0JiYic3RyaW5nIj09dHlwZW9mIGUudXNlJiYodD0ic2lnIj09PWUudXNlKSx0JiZBcnJheS5pc0FycmF5KGUua2V5X29wcykmJih0PWUua2V5X29wcy5pbmNsdWRlcygidmVyaWZ5IikpLHQmJiJFZERTQSI9PT1uJiYodD0iRWQyNTUxOSI9PT1lLmNydnx8IkVkNDQ4Ij09PWUuY3J2KSx0KXN3aXRjaChuKXtjYXNlIkVTMjU2Ijp0PSJQLTI1NiI9PT1lLmNydjticmVhaztjYXNlIkVTMjU2SyI6dD0ic2VjcDI1NmsxIj09PWUuY3J2O2JyZWFrO2Nhc2UiRVMzODQiOnQ9IlAtMzg0Ij09PWUuY3J2O2JyZWFrO2Nhc2UiRVM1MTIiOnQ9IlAtNTIxIj09PWUuY3J2fXJldHVybiB0fSkpLHswOnMsbGVuZ3RoOmF9PW87aWYoMD09PWEpdGhyb3cgbmV3IGhyO2lmKDEhPT1hKXRocm93IG5ldyBmcjtjb25zdCBjPXRoaXMuX2NhY2hlZC5nZXQocyl8fHRoaXMuX2NhY2hlZC5zZXQocyx7fSkuZ2V0KHMpO2lmKHZvaWQgMD09PWNbbl0pe2NvbnN0IGU9YXdhaXQgYXN5bmMgZnVuY3Rpb24oZSx0LG4pe2lmKCFFcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJKV0sgbXVzdCBiZSBhbiBvYmplY3QiKTtpZih0fHwodD1lLmFsZyksInN0cmluZyIhPXR5cGVvZiB0fHwhdCl0aHJvdyBuZXcgVHlwZUVycm9yKCciYWxnIiBhcmd1bWVudCBpcyByZXF1aXJlZCB3aGVuICJqd2suYWxnIiBpcyBub3QgcHJlc2VudCcpO3N3aXRjaChlLmt0eSl7Y2FzZSJvY3QiOmlmKCJzdHJpbmciIT10eXBlb2YgZS5rfHwhZS5rKXRocm93IG5ldyBUeXBlRXJyb3IoJ21pc3NpbmcgImsiIChLZXkgVmFsdWUpIFBhcmFtZXRlciB2YWx1ZScpO3JldHVybiBudWxsIT1ufHwobj0hMCE9PWUuZXh0KSxuP1RyKHsuLi5lLGFsZzp0LGV4dDohMX0pOnJyKGUuayk7Y2FzZSJSU0EiOmlmKHZvaWQgMCE9PWUub3RoKXRocm93IG5ldyBjcignUlNBIEpXSyAib3RoIiAoT3RoZXIgUHJpbWVzIEluZm8pIFBhcmFtZXRlciB2YWx1ZSBpcyBub3Qgc3VwcG9ydGVkJyk7Y2FzZSJFQyI6Y2FzZSJPS1AiOnJldHVybiBUcih7Li4uZSxhbGc6dH0pO2RlZmF1bHQ6dGhyb3cgbmV3IGNyKCdVbnN1cHBvcnRlZCAia3R5IiAoS2V5IFR5cGUpIFBhcmFtZXRlciB2YWx1ZScpfX0oey4uLnMsZXh0OiEwfSxuKTtpZihlIGluc3RhbmNlb2YgVWludDhBcnJheXx8InB1YmxpYyIhPT1lLnR5cGUpdGhyb3cgbmV3IGRyKCJKU09OIFdlYiBLZXkgU2V0IG1lbWJlcnMgbXVzdCBiZSBwdWJsaWMga2V5cyIpO2Nbbl09ZX1yZXR1cm4gY1tuXX19dmFyIE5yPXtleHBvcnRzOnt9fSx4cj17ZXhwb3J0czp7fX0sS3I9UCh4bik7Ci8qISBzYWZlLWJ1ZmZlci4gTUlUIExpY2Vuc2UuIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZy9vcGVuc291cmNlPiAqLwohZnVuY3Rpb24oZSx0KXt2YXIgbj1LcixyPW4uQnVmZmVyO2Z1bmN0aW9uIGkoZSx0KXtmb3IodmFyIG4gaW4gZSl0W25dPWVbbl19ZnVuY3Rpb24gbyhlLHQsbil7cmV0dXJuIHIoZSx0LG4pfXIuZnJvbSYmci5hbGxvYyYmci5hbGxvY1Vuc2FmZSYmci5hbGxvY1Vuc2FmZVNsb3c/ZS5leHBvcnRzPW46KGkobix0KSx0LkJ1ZmZlcj1vKSxvLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHIucHJvdG90eXBlKSxpKHIsbyksby5mcm9tPWZ1bmN0aW9uKGUsdCxuKXtpZigibnVtYmVyIj09dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gcihlLHQsbil9LG8uYWxsb2M9ZnVuY3Rpb24oZSx0LG4pe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7dmFyIGk9cihlKTtyZXR1cm4gdm9pZCAwIT09dD8ic3RyaW5nIj09dHlwZW9mIG4/aS5maWxsKHQsbik6aS5maWxsKHQpOmkuZmlsbCgwKSxpfSxvLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIHIoZSl9LG8uYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIG4uU2xvd0J1ZmZlcihlKX19KHhyLHhyLmV4cG9ydHMpO3ZhciBCcj02NTUzNixKcj00Mjk0OTY3Mjk1O3ZhciBGcj14ci5leHBvcnRzLkJ1ZmZlcixXcj1DLmNyeXB0b3x8Qy5tc0NyeXB0bztXciYmV3IuZ2V0UmFuZG9tVmFsdWVzP05yLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZihlPkpyKXRocm93IG5ldyBSYW5nZUVycm9yKCJyZXF1ZXN0ZWQgdG9vIG1hbnkgcmFuZG9tIGJ5dGVzIik7dmFyIG49RnIuYWxsb2NVbnNhZmUoZSk7aWYoZT4wKWlmKGU+QnIpZm9yKHZhciByPTA7cjxlO3IrPUJyKVdyLmdldFJhbmRvbVZhbHVlcyhuLnNsaWNlKHIscitCcikpO2Vsc2UgV3IuZ2V0UmFuZG9tVmFsdWVzKG4pO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0KXJldHVybiBfZS5uZXh0VGljaygoZnVuY3Rpb24oKXt0KG51bGwsbil9KSk7cmV0dXJuIG59Ok5yLmV4cG9ydHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXIuXG5Vc2UgQ2hyb21lLCBGaXJlZm94IG9yIEludGVybmV0IEV4cGxvcmVyIDExIil9O3ZhciB6cj1Oci5leHBvcnRzO2NsYXNzIFlye2Jhc2U2NFVSTEVuY29kZShlKXtyZXR1cm4gWG4uZW5jb2RlKGUpLnJlcGxhY2UoL1wrL2csIi0iKS5yZXBsYWNlKC9cLy9nLCJfIikucmVwbGFjZSgvPS9nLCIiKX1iYXNlNjRVUkxEZWNvZGUoZSl7cmV0dXJuIFhuLmRlY29kZShlKS50b1N0cmluZygpfWhhc2hTaGEyNTYoZSl7cmV0dXJuIGVuLmZyb20oWm4oKG5ldyBUZXh0RW5jb2RlcikuZW5jb2RlKGUpKSl9Z2VuZXJhdGVSYW5kb21CeXRlcyhlKXtyZXR1cm4genIoZSl9dmVyaWZ5Snd0KGUsdCxuLHIsaSxvLHMsYSl7Y29uc3QgdT17YWxnb3JpdGhtczpuLGF1ZGllbmNlOnIsY2xvY2tUb2xlcmFuY2U6cyxzdWJqZWN0Om99O3JldHVybihudWxsPT1hfHxhKSYmKHUuaXNzdWVyPWkpLE1yKGUsKGw9e2tleXM6W3RdfSxxci5wcm90b3R5cGUuZ2V0S2V5LmJpbmQobmV3IHFyKGwpKSksdSkudGhlbigoKCk9PlByb21pc2UucmVzb2x2ZSghMCkpKS5jYXRjaCgoZT0+e3ZhciB0O3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgYygiU1BBLUNSWVBUTy1VVElMUy1WSi1JVjAxIixudWxsIT09KHQ9bnVsbD09ZT92b2lkIDA6ZS5yZWFzb24pJiZ2b2lkIDAhPT10P3Q6SlNPTi5zdHJpbmdpZnkoZSksIiIuY29uY2F0KG51bGw9PWU/dm9pZCAwOmUuY29kZSwiICIpLmNvbmNhdChudWxsPT1lP3ZvaWQgMDplLmNsYWltKSkpfSkpO3ZhciBsfX0odD0+e2NvbnN0IG49c2VsZjtsZXQgcjtuLm9ubWVzc2FnZT1uPT57bGV0e2RhdGE6YSxwb3J0czp1fT1uO3JldHVybiBlKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgbixsLGQsaCxmLHA7Y29uc3QgeT11WzBdO2lmKGEudHlwZT09PXZ8fHIpc3dpdGNoKGEudHlwZSl7Y2FzZSB2OnRyeXtjb25zdCBuPU9iamVjdC5hc3NpZ24oe30sYS5kYXRhKTtyPXlpZWxkKCh0LG4pPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCByPW5ldyBOdCxpPW5ldyBZcixvPW5ldyBnO3lpZWxkIG8uaW5pdGlhbGl6ZSh0LHIsaSk7Y29uc3Qgcz1uZXcgQShvKSxhPW4obyxzKSxjPW8uZ2V0RGF0YUxheWVyKCksdT1xdC5nZXRJbnN0YW5jZSgpO3JldHVybihudWxsPT11P3ZvaWQgMDp1LmluaXQpJiYoeWllbGQgdS5pbml0KCEwLCh0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCBhLmF0dGFjaFRva2VuVG9SZXF1ZXN0Q29uZmlnKHQpfSkpKSkpLHtkaXNhYmxlSHR0cEhhbmRsZXI6KCk9PnthLmRpc2FibGVIdHRwSGFuZGxlcih1KX0sZW5hYmxlSHR0cEhhbmRsZXI6KCk9PnthLmVuYWJsZUh0dHBIYW5kbGVyKHUpfSxnZXRBY2Nlc3NUb2tlbjooKT0+YS5nZXRBY2Nlc3NUb2tlbigpLGdldEF1dGhvcml6YXRpb25VUkw6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG8uZ2V0QXV0aG9yaXphdGlvblVSTCh0KS50aGVuKCh0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgZTtjb25zdCBuPW51bGwhPT0oZT1uZXcgVVJMKHQpLnNlYXJjaFBhcmFtcy5nZXQoInN0YXRlIikpJiZ2b2lkIDAhPT1lP2U6IiIscj15aWVsZCBvLmdldFBLQ0VDb2RlKG4pO3JldHVybnthdXRob3JpemF0aW9uVVJMOnQscGtjZTpyfX0pKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpfSkpLGdldEJhc2ljVXNlckluZm86KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBhLmdldEJhc2ljVXNlckluZm8oKX0pKSxnZXRDb25maWdEYXRhOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gYy5nZXRDb25maWdEYXRhKCl9KSksZ2V0Q3J5cHRvSGVscGVyOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gYS5nZXRDcnlwdG9IZWxwZXIoKX0pKSxnZXREZWNvZGVkSURQSURUb2tlbjooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIGEuZ2V0RGVjb2RlZElEUElEVG9rZW4oKX0pKSxnZXREZWNvZGVkSURUb2tlbjooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIGEuZ2V0RGVjb2RlZElEVG9rZW4oKX0pKSxnZXRJRFRva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gYS5nZXRJRFRva2VuKCl9KSksZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHM6KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBhLmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCl9KSksZ2V0U2lnbk91dFVSTDooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIG8uZ2V0U2lnbk91dFVSTCgpfSkpLGh0dHBSZXF1ZXN0OnQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCBhLmh0dHBSZXF1ZXN0KHUsdCl9KSksaHR0cFJlcXVlc3RBbGw6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIGEuaHR0cFJlcXVlc3RBbGwodCx1KX0pKSxpc0F1dGhlbnRpY2F0ZWQ6KCk9PmEuaXNBdXRoZW50aWNhdGVkKCkscmVmcmVzaEFjY2Vzc1Rva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0cnl7cmV0dXJuIHlpZWxkIGEucmVmcmVzaEFjY2Vzc1Rva2VuKCl9Y2F0Y2goZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfX0pKSxyZXF1ZXN0QWNjZXNzVG9rZW46KHQsbixyLGkpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgYS5yZXF1ZXN0QWNjZXNzVG9rZW4odCxuLHZvaWQgMCxyLGkpfSkpLHJlcXVlc3RDdXN0b21HcmFudDp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgYS5yZXF1ZXN0Q3VzdG9tR3JhbnQodCl9KSkscmV2b2tlQWNjZXNzVG9rZW46KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9eWllbGQgcy5nZXRSZWZyZXNoVGltZW91dFRpbWVyKCk7cmV0dXJuIG8ucmV2b2tlQWNjZXNzVG9rZW4oKS50aGVuKCgoKT0+KHMuY2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KGUpLFByb21pc2UucmVzb2x2ZSghMCkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSl9KSksc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjazplPT57KG51bGw9PXU/dm9pZCAwOnUuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjaykmJnUuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayhlKX0sc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrOmU9PnsobnVsbD09dT92b2lkIDA6dS5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2spJiZ1LnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayhlKX0sc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s6ZT0+eyhudWxsPT11P3ZvaWQgMDp1LnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKSYmdS5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayhlKX0sc2V0U2Vzc2lvblN0YXRlOnQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIGMuc2V0U2Vzc2lvbkRhdGFQYXJhbWV0ZXIoInNlc3Npb25fc3RhdGUiLHQpfSkpLHNpZ25PdXQ6KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBzLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLHlpZWxkIG8uZ2V0U2lnbk91dFVSTCgpfSkpLHN0YXJ0QXV0b1JlZnJlc2hUb2tlbjooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cy5jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoKSxzLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkoYSl9KSksdXBkYXRlQ29uZmlnOnQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIG8udXBkYXRlQ29uZmlnKHQpfSkpfX0pKSkobix0KSxyLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2socyksci5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2soaSksci5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayhvKSx5LnBvc3RNZXNzYWdlKEUuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKX1jYXRjaChlKXt5LnBvc3RNZXNzYWdlKEUuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXRfYXV0aF91cmwiOnIuZ2V0QXV0aG9yaXphdGlvblVSTChudWxsPT1hP3ZvaWQgMDphLmRhdGEpLnRoZW4oKGU9Pnt5LnBvc3RNZXNzYWdlKEUuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9Pnt5LnBvc3RNZXNzYWdlKEUuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJyZXF1ZXN0X2dldF90b2tlbiI6ci5yZXF1ZXN0QWNjZXNzVG9rZW4obnVsbD09PShuPW51bGw9PWE/dm9pZCAwOmEuZGF0YSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uY29kZSxudWxsPT09KGw9bnVsbD09YT92b2lkIDA6YS5kYXRhKXx8dm9pZCAwPT09bD92b2lkIDA6bC5zZXNzaW9uU3RhdGUsbnVsbD09PShkPW51bGw9PWE/dm9pZCAwOmEuZGF0YSl8fHZvaWQgMD09PWQ/dm9pZCAwOmQucGtjZSxudWxsPT09KGg9bnVsbD09YT92b2lkIDA6YS5kYXRhKXx8dm9pZCAwPT09aD92b2lkIDA6aC5zdGF0ZSkudGhlbigoZT0+e3kucG9zdE1lc3NhZ2UoRS5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e3kucG9zdE1lc3NhZ2UoRS5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlImh0dHAtcmVxdWVzdCI6e2NvbnN0IGU9YS5kYXRhLHQ9bnVsbD09ZT92b2lkIDA6ZS5kYXRhO2lmKCEwPT09KG51bGw9PT0ocD1udWxsPT09KGY9YS5kYXRhKXx8dm9pZCAwPT09Zj92b2lkIDA6Zi5kYXRhKXx8dm9pZCAwPT09cD92b2lkIDA6cC5mb3JtRGF0YSkpe2NvbnN0IG49bmV3IEZvcm1EYXRhO2Zvcihjb25zdCBlIGluIHQpImZvcm1EYXRhIiE9PWUmJm4uYXBwZW5kKGUsdFtlXSk7ZS5kYXRhPW59ci5odHRwUmVxdWVzdChlKS50aGVuKChlPT57eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrfWNhc2UiaHR0cC1yZXF1ZXN0LWFsbCI6ci5odHRwUmVxdWVzdEFsbChhLmRhdGEpLnRoZW4oKGU9Pnt5LnBvc3RNZXNzYWdlKEUuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9Pnt5LnBvc3RNZXNzYWdlKEUuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJzaWduLW91dCI6dHJ5e3kucG9zdE1lc3NhZ2UoRS5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuc2lnbk91dCgpKSl9Y2F0Y2goZSl7eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UicmVxdWVzdC1jdXN0b20tZ3JhbnQiOnIucmVxdWVzdEN1c3RvbUdyYW50KGEuZGF0YSkudGhlbigoZT0+e3kucG9zdE1lc3NhZ2UoRS5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e3kucG9zdE1lc3NhZ2UoRS5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlInJldm9rZS1hY2Nlc3MtdG9rZW4iOnIucmV2b2tlQWNjZXNzVG9rZW4oKS50aGVuKChlPT57eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UiZ2V0LW9pZGMtc2VydmljZS1lbmRwb2ludHMiOnRyeXt5LnBvc3RNZXNzYWdlKEUuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCByLmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCkpKX1jYXRjaChlKXt5LnBvc3RNZXNzYWdlKEUuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXQtYmFzaWMtdXNlci1pbmZvIjp0cnl7eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5nZXRCYXNpY1VzZXJJbmZvKCkpKX1jYXRjaChlKXt5LnBvc3RNZXNzYWdlKEUuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXQtZGVjb2RlZC1pZC10b2tlbiI6dHJ5e3kucG9zdE1lc3NhZ2UoRS5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuZ2V0RGVjb2RlZElEVG9rZW4oKSkpfWNhdGNoKGUpe3kucG9zdE1lc3NhZ2UoRS5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldC1jcnlwdG8taGVscGVyIjp0cnl7eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5nZXRDcnlwdG9IZWxwZXIoKSkpfWNhdGNoKGUpe3kucG9zdE1lc3NhZ2UoRS5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldF9pZF90b2tlbiI6dHJ5e3kucG9zdE1lc3NhZ2UoRS5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuZ2V0SURUb2tlbigpKSl9Y2F0Y2goZSl7eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZW5hYmxlX2h0dHBfaGFuZGxlciI6ci5lbmFibGVIdHRwSGFuZGxlcigpLHkucG9zdE1lc3NhZ2UoRS5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKCkpO2JyZWFrO2Nhc2UiZGlzYWJsZV9odHRwX2hhbmRsZXIiOnIuZGlzYWJsZUh0dHBIYW5kbGVyKCkseS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoKSk7YnJlYWs7Y2FzZSJpc19hdXRoZW50aWNhdGVkIjp0cnl7eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5pc0F1dGhlbnRpY2F0ZWQoKSkpfWNhdGNoKGUpe3kucG9zdE1lc3NhZ2UoRS5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldF9zaWduX291dF91cmwiOnRyeXt5LnBvc3RNZXNzYWdlKEUuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCByLmdldFNpZ25PdXRVUkwoKSkpfWNhdGNoKGUpe3kucG9zdE1lc3NhZ2UoRS5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInJlZnJlc2hfYWNjZXNzLXRva2VuIjp0cnl7eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5yZWZyZXNoQWNjZXNzVG9rZW4oKSkpfWNhdGNoKGUpe3kucG9zdE1lc3NhZ2UoRS5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInN0YXJ0X2F1dG9fcmVmcmVzaF90b2tlbiI6dHJ5e3kucG9zdE1lc3NhZ2UoRS5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHIuc3RhcnRBdXRvUmVmcmVzaFRva2VuKCkpKX1jYXRjaChlKXt5LnBvc3RNZXNzYWdlKEUuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJzZXRfc2Vzc2lvbl9zdGF0ZSI6dHJ5e3kucG9zdE1lc3NhZ2UoRS5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuc2V0U2Vzc2lvblN0YXRlKG51bGw9PWE/dm9pZCAwOmEuZGF0YSkpKX1jYXRjaChlKXt5LnBvc3RNZXNzYWdlKEUuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJ1cGRhdGVfY29uZmlnIjp0cnl7eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci51cGRhdGVDb25maWcobnVsbD09YT92b2lkIDA6YS5kYXRhKSkpfWNhdGNoKGUpe3kucG9zdE1lc3NhZ2UoRS5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldF9jb25maWdfZGF0YSI6dHJ5e3kucG9zdE1lc3NhZ2UoRS5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuZ2V0Q29uZmlnRGF0YSgpKSl9Y2F0Y2goZSl7eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2RlZmF1bHQ6bnVsbD09eXx8eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UobmV3IGMoIlNQQS1DTElFTlRfV09SS0VSLU9OTVNHLUlWMDIiLCJUaGUgbWVzc2FnZSB0eXBlIGlzIGludmFsaWQuIiwiVGhlIG1lc3NhZ2UgdHlwZSBwcm92aWRlZCwgIi5jb25jYXQoYS50eXBlLCIsIGlzIGludmFsaWQuIikpKSl9ZWxzZSB5LnBvc3RNZXNzYWdlKEUuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShuZXcgYygiU1BBLUNMSUVOVF9XT1JLRVItT05NU0ctTkYwMSIsIlRoZSB3ZWIgd29ya2VyIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB5ZXQuIiwiVGhlIGluaXRpYWxpemUgbWV0aG9kIG5lZWRzIHRvIGJlIGNhbGxlZCBiZWZvcmUgdGhlIHNwZWNpZmllZCBvcGVyYXRpb24gY2FuIGJlIGNhcnJpZWQgb3V0LiIpKSl9KSl9O2NvbnN0IGk9KCk9PntuLnBvc3RNZXNzYWdlKHt0eXBlOiJyZXF1ZXN0LXN0YXJ0In0pfSxvPWU9PntuLnBvc3RNZXNzYWdlKHtkYXRhOkpTT04uc3RyaW5naWZ5KG51bGwhPWU/ZToiIiksdHlwZToicmVxdWVzdC1zdWNjZXNzIn0pfSxzPSgpPT57bi5wb3N0TWVzc2FnZSh7dHlwZToicmVxdWVzdC1maW5pc2gifSl9fSkoKChlLHQpPT5uZXcgUihlLHQpKSk7cmV0dXJue319KCk7Cgo=",Ty=null,Fy=!1,function(e){return By=By||Hy(Ay,Ty,Fy),new Worker(By,e)});const xy="token_request_config";var zy;!function(e){e.SignIn="sign-in",e.SignOut="sign-out",e.Initialize="initialize",e.HttpRequestStart="http-request-start",e.HttpRequestFinish="http-request-finish",e.HttpRequestError="http-request-error",e.HttpRequestSuccess="http-request-success",e.RevokeAccessToken="revoke-access-token",e.CustomGrant="custom-grant",e.SignOutFailed="sign-out-failed"}(zy||(zy={}));const Py="Y2hlY2tTZXNzaW9u";var jy;!function(e){e.LocalStorage="localStorage",e.SessionStorage="sessionStorage",e.WebWorker="webWorker",e.BrowserMemory="browserMemory"}(jy||(jy={}));class Qy{constructor(){}static generateSuccessMessage(e){return{blob:(null==e?void 0:e.data)instanceof Blob?null==e?void 0:e.data:null,data:JSON.stringify(null!=e?e:""),success:!0}}static generateFailureMessage(e){return(null==e?void 0:e.toJSON)&&delete e.toJSON,{error:JSON.stringify(null!=e?e:""),success:!1}}}class My{constructor(){}static removeAuthorizationCode(){const e=location.href;history.pushState({},document.title,e.replace(/\?code=.*$/,""))}static getPKCE(e){var t;return null!==(t=sessionStorage.getItem(e))&&void 0!==t?t:""}static setPKCE(e,t){sessionStorage.setItem(e,t)}static setSignOutURL(e,t,i){sessionStorage.setItem("".concat(Vy,"-instance_").concat(i,"-").concat(t),e)}static getSignOutURL(e,t){var i;return null!==(i=sessionStorage.getItem("".concat(Vy,"-instance_").concat(t,"-").concat(e)))&&void 0!==i?i:""}static removePKCE(e){sessionStorage.removeItem(e)}static canContinueSignIn(e,t){return!(e&&!My.hasErrorInURL()&&!My.hasAuthSearchParamsInURL()&&!t)}static isInitializedSilentSignIn(){return My.isSilentStatePresentInURL()}static wasSignInCalled(){return!(!My.hasErrorInURL()&&!My.hasAuthSearchParamsInURL()||this.isSilentStatePresentInURL())}static wasSilentSignInCalled(){const e=sessionStorage.getItem("initialized-silent-sign-in"),t=e?JSON.parse(e):null;return Boolean(t)}static isSignOutSuccessful(){return ry(this,void 0,void 0,(function*(){if(ky.isSignOutSuccessful(window.location.href)){const e=window.location.href.split("?")[0];return history.pushState({},document.title,e),yield ky.clearUserSessionData(),!0}return!1}))}static didSignOutFail(){if(ky.didSignOutFail(window.location.href)){const e=new URL(window.location.href),t=e.searchParams.get("error"),i=e.searchParams.get("error_description"),n=window.location.href.split("?")[0];return history.pushState({},document.title,n),{description:null!=i?i:"",error:null!=t?t:""}}return!1}static isSilentStatePresentInURL(){var e;const t=new URL(window.location.href).searchParams.get("state");return null!==(e=null==t?void 0:t.includes("sign-in-silently"))&&void 0!==e&&e}static hasAuthSearchParamsInURL(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.location.search;return/[?&]code=[^&]+/.test(e)}static hasErrorInURL(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.location.href;const t=new URL(e);return!!t.searchParams.get("error")&&t.searchParams.get("state")!==Wy}static canSendPromptNoneRequest(){const e=sessionStorage.getItem("promptNoneRequestSent");return!(e?JSON.parse(e):null)}static setPromptNoneRequestSent(e){sessionStorage.setItem("promptNoneRequestSent",JSON.stringify(e))}static waitTillPageRedirect(e){return ry(this,void 0,void 0,(function*(){const t=null!=e?e:3e3;yield new Promise((e=>setTimeout(e,1e3*t)))}))}}My.until=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:500;const i=n=>e()?n():setTimeout((()=>i(n)),t);return new Promise(i)};class Ey{constructor(e,t){this._authenticationClient=e,this._dataLayer=this._authenticationClient.getDataLayer(),this._spaHelper=t,this._instanceID=this._authenticationClient.getInstanceID(),this._isTokenRefreshing=!1}enableHttpHandler(e){(null==e?void 0:e.enableHandler)&&e.enableHandler()}disableHttpHandler(e){(null==e?void 0:e.disableHandler)&&e.disableHandler()}initializeSessionManger(e,t,i,n,l){var o,c,a;l.initialize(e.clientID,null!==(o=t.checkSessionIframe)&&void 0!==o?o:"",i,null!==(c=e.checkSessionInterval)&&void 0!==c?c:3,null!==(a=e.sessionRefreshInterval)&&void 0!==a?a:300,e.signInRedirectURL,n)}requestCustomGrant(e,t){var i,n,l;return ry(this,void 0,void 0,(function*(){let o=!0,c=!1;if(null==e?void 0:e.tokenEndpoint){o=!1;for(const t of[...null!==(n=null===(i=yield this._dataLayer.getConfigData())||void 0===i?void 0:i.resourceServerURLs)&&void 0!==n?n:[],e.baseUrl])if(t&&(null===(l=e.tokenEndpoint)||void 0===l?void 0:l.startsWith(t))){c=!0;break}}return e.shouldReplayAfterRefresh&&this._dataLayer.setTemporaryDataParameter("custom_grant_config",JSON.stringify(e)),o||c?this._authenticationClient.requestCustomGrant(e).then((i=>ry(this,void 0,void 0,(function*(){return t&&"function"==typeof t&&t(e),e.returnsSession?(this._spaHelper.refreshAccessTokenAutomatically(this),this._authenticationClient.getBasicUserInfo()):i})))).catch((e=>Promise.reject(e))):Promise.reject(new Sy("SPA-MAIN_THREAD_CLIENT-RCG-IV01","Request to the provided endpoint is prohibited.","Requests can only be sent to resource servers specified by the `resourceServerURLs` attribute while initializing the SDK. The specified token endpoint in this request cannot be found among the `resourceServerURLs`"))}))}getCustomGrantConfigData(){return ry(this,void 0,void 0,(function*(){const e=yield this._dataLayer.getTemporaryDataParameter("custom_grant_config");return e?JSON.parse(e):null}))}refreshAccessToken(e){return ry(this,void 0,void 0,(function*(){try{yield this._authenticationClient.refreshAccessToken();const t=yield this.getCustomGrantConfigData();return t&&(yield this.requestCustomGrant(t,e)),this._spaHelper.refreshAccessTokenAutomatically(this),this._authenticationClient.getBasicUserInfo()}catch(e){const t={type:"refresh-access-token-error"};return window.postMessage(t),Promise.reject(e)}}))}retryFailedRequests(e){return ry(this,void 0,void 0,(function*(){const t=e.httpClient,i=e.requestConfig,n=e.isHttpHandlerEnabled,l=e.httpErrorCallback,o=e.httpFinishCallback;yield My.until((()=>!this._isTokenRefreshing));try{const e=yield t.request(i);return Promise.resolve(e)}catch(e){return n&&("function"==typeof l&&(yield l(e)),"function"==typeof o&&o()),Promise.reject(e)}}))}httpRequest(e,t,i,n,l,o){var c,a;return ry(this,void 0,void 0,(function*(){let r=!1;const d=yield this._dataLayer.getConfigData();for(const e of[...null!==(c=yield null==d?void 0:d.resourceServerURLs)&&void 0!==c?c:[],d.baseUrl])if(e&&(null===(a=null==t?void 0:t.url)||void 0===a?void 0:a.startsWith(e))){r=!0;break}return r?e.request(t).then((e=>Promise.resolve(e))).catch((c=>ry(this,void 0,void 0,(function*(){var a,r,d;if(401===(null===(a=null==c?void 0:c.response)||void 0===a?void 0:a.status)||!(null==c?void 0:c.response)){if(this._isTokenRefreshing)return this.retryFailedRequests({enableRetrievingSignOutURLFromSession:o,httpClient:e,httpErrorCallback:n,httpFinishCallback:l,isHttpHandlerEnabled:i,requestConfig:t});let a;this._isTokenRefreshing=!0;try{a=yield this.refreshAccessToken(o),this._isTokenRefreshing=!1}catch(e){throw this._isTokenRefreshing=!1,i&&("function"==typeof n&&(yield n(Object.assign(Object.assign({},c),{code:"Access token is invalid"}))),"function"==typeof l&&l()),new Sy("SPA-AUTH_HELPER-HR-SE01",null!==(r=null==e?void 0:e.name)&&void 0!==r?r:"Refresh token request failed.",null!==(d=null==e?void 0:e.message)&&void 0!==d?d:"An error occurred while trying to refresh the access token following a 401 response from the server.")}if(a)try{const i=yield e.request(t);return Promise.resolve(i)}catch(e){return i&&("function"==typeof n&&(yield n(e)),"function"==typeof l&&l()),Promise.reject(e)}}return i&&("function"==typeof n&&(yield n(c)),"function"==typeof l&&l()),Promise.reject(c)})))):Promise.reject(new Sy("SPA-AUTH_HELPER-HR-IV02","Request to the provided endpoint is prohibited.","Requests can only be sent to resource servers specified by the `resourceServerURLs` attribute while initializing the SDK. The specified endpoint in this request cannot be found among the `resourceServerURLs`"))}))}httpRequestAll(e,t,i,n,l){var o,c,a;return ry(this,void 0,void 0,(function*(){let r=!0;const d=yield this._dataLayer.getConfigData();for(const t of e){let e=!1;for(const i of[...null!==(c=null===(o=yield d)||void 0===o?void 0:o.resourceServerURLs)&&void 0!==c?c:[],d.baseUrl])if(i&&(null===(a=t.url)||void 0===a?void 0:a.startsWith(i))){e=!0;break}if(!e){r=!1;break}}const s=[];if(r)return e.forEach((e=>{s.push(t.request(e))})),(null==t?void 0:t.all)&&t.all(s).then((e=>Promise.resolve(e))).catch((e=>ry(this,void 0,void 0,(function*(){var o,c,a;if(401===(null===(o=null==e?void 0:e.response)||void 0===o?void 0:o.status)||!(null==e?void 0:e.response)){let o;try{o=yield this._authenticationClient.refreshAccessToken()}catch(t){throw i&&("function"==typeof n&&(yield n(Object.assign(Object.assign({},e),{code:"Access token is invalid"}))),"function"==typeof l&&l()),new Sy("SPA-AUTH_HELPER-HRA-SE01",null!==(c=null==t?void 0:t.name)&&void 0!==c?c:"Refresh token request failed.",null!==(a=null==t?void 0:t.message)&&void 0!==a?a:"An error occurred while trying to refresh the access token following a 401 response from the server.")}if(o)return t.all&&t.all(s).then((e=>Promise.resolve(e))).catch((e=>ry(this,void 0,void 0,(function*(){return i&&("function"==typeof n&&(yield n(e)),"function"==typeof l&&l()),Promise.reject(e)}))))}return i&&("function"==typeof n&&(yield n(e)),"function"==typeof l&&l()),Promise.reject(e)}))));throw new Sy("SPA-AUTH_HELPER-HRA-IV02","Request to the provided endpoint is prohibited.","Requests can only be sent to resource servers specified by the `resourceServerURLs` attribute while initializing the SDK. The specified endpoint in this request cannot be found among the `resourceServerURLs`")}))}requestAccessToken(e,t,i,n,l,o){return ry(this,void 0,void 0,(function*(){const c=yield this._dataLayer.getConfigData();if(c.storage===jy.BrowserMemory&&c.enablePKCE&&t){const e=My.getPKCE(fy.extractPKCEKeyFromStateParam(t));yield this._authenticationClient.setPKCECode(fy.extractPKCEKeyFromStateParam(t),e)}else c.storage===jy.WebWorker&&n&&(yield this._authenticationClient.setPKCECode(n,null!=l?l:""));return e?this._authenticationClient.requestAccessToken(e,null!=t?t:"",null!=l?l:"",void 0,o).then((()=>ry(this,void 0,void 0,(function*(){return c.storage!==jy.WebWorker?(My.setSignOutURL(yield this._authenticationClient.getSignOutURL(),c.clientID,this._instanceID),this._spaHelper&&(this._spaHelper.clearRefreshTokenTimeout(),this._spaHelper.refreshAccessTokenAutomatically(this)),i&&"function"==typeof i&&c.enableOIDCSessionManagement&&i()):this._spaHelper&&this._spaHelper.refreshAccessTokenAutomatically(this),this._authenticationClient.getBasicUserInfo()})))).catch((e=>Promise.reject(e))):Promise.reject(new Sy("SPA-AUTH_HELPER-RAT1-NF01","No authorization code.","No authorization code was found."))}))}trySignInSilently(e,t,i,n,l){var o;return ry(this,void 0,void 0,(function*(){if(My.isInitializedSilentSignIn())return yield i.receivePromptNoneResponse(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""});const c=document.getElementById("rpIFrame"),a=null===(o=null==c?void 0:c.contentDocument)||void 0===o?void 0:o.getElementById("promptNoneIFrame");try{const t=yield e(n);a.src=t}catch(e){return Promise.reject(e)}return new Promise(((e,i)=>{const n=setTimeout((()=>{e(!1)}),1e4),o=c=>ry(this,void 0,void 0,(function*(){var a,r,d,s;const u=c.data;"check_session_signed_out"==(null==u?void 0:u.type)&&(window.removeEventListener("message",o),clearTimeout(n),e(!1)),"check_session_signed_in"==(null==u?void 0:u.type)&&(null===(a=null==u?void 0:u.data)||void 0===a?void 0:a.code)&&t(null===(r=null==u?void 0:u.data)||void 0===r?void 0:r.code,null===(d=null==u?void 0:u.data)||void 0===d?void 0:d.sessionState,null===(s=null==u?void 0:u.data)||void 0===s?void 0:s.state,l).then((t=>{window.removeEventListener("message",o),e(t)})).catch((e=>{window.removeEventListener("message",o),i(e)})).finally((()=>{clearTimeout(n)}))}));window.addEventListener("message",o)}))}))}handleSignIn(e,t,i){return ry(this,void 0,void 0,(function*(){const n=yield this._dataLayer.getConfigData();if(yield e())return Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""});if(n.storage!==jy.WebWorker&&(yield this._authenticationClient.isAuthenticated()))return this._spaHelper.clearRefreshTokenTimeout(),this._spaHelper.refreshAccessTokenAutomatically(this),n.enableOIDCSessionManagement&&t(),Promise.resolve(yield this._authenticationClient.getBasicUserInfo());const l=new URL(window.location.href).searchParams.get("error"),o=new URL(window.location.href).searchParams.get("error_description");if(l){const e=new URL(window.location.href);throw e.searchParams.delete("error"),e.searchParams.delete("error_description"),history.pushState(null,document.title,e.toString()),new Sy("SPA-AUTH_HELPER-SI-SE01",l,null!=o?o:"")}if(n.storage===jy.WebWorker&&i){const e=yield i();if(e)return e}}))}attachTokenToRequestConfig(e){return ry(this,void 0,void 0,(function*(){const t=Object.assign({attachToken:!0},e);t.attachToken&&(t.shouldAttachIDPAccessToken?e.headers=Object.assign(Object.assign({},e.headers),{Authorization:"Bearer ".concat(yield this.getIDPAccessToken())}):e.headers=Object.assign(Object.assign({},e.headers),{Authorization:"Bearer ".concat(yield this.getAccessToken())}))}))}getBasicUserInfo(){return ry(this,void 0,void 0,(function*(){return this._authenticationClient.getBasicUserInfo()}))}getDecodedIDToken(){return ry(this,void 0,void 0,(function*(){return this._authenticationClient.getDecodedIDToken()}))}getDecodedIDPIDToken(){return ry(this,void 0,void 0,(function*(){return this._authenticationClient.getDecodedIDToken()}))}getCryptoHelper(){return ry(this,void 0,void 0,(function*(){return this._authenticationClient.getCryptoHelper()}))}getIDToken(){return ry(this,void 0,void 0,(function*(){return this._authenticationClient.getIDToken()}))}getOIDCServiceEndpoints(){return ry(this,void 0,void 0,(function*(){return this._authenticationClient.getOIDCServiceEndpoints()}))}getAccessToken(){return ry(this,void 0,void 0,(function*(){return this._authenticationClient.getAccessToken()}))}getIDPAccessToken(){var e;return ry(this,void 0,void 0,(function*(){return null===(e=yield this._dataLayer.getSessionData())||void 0===e?void 0:e.access_token}))}getDataLayer(){return this._dataLayer}isAuthenticated(){return ry(this,void 0,void 0,(function*(){return this._authenticationClient.isAuthenticated()}))}}class Dy{constructor(e){this._authenticationClient=e,this._dataLayer=this._authenticationClient.getDataLayer()}refreshAccessTokenAutomatically(e){var t,i;return ry(this,void 0,void 0,(function*(){if(!(null!==(i=null===(t=yield this._dataLayer.getConfigData())||void 0===t?void 0:t.periodicTokenRefresh)&&void 0!==i&&i))return;const n=yield this._dataLayer.getSessionData();if(n.refresh_token){const t=parseInt(n.expires_in),i=setTimeout((()=>ry(this,void 0,void 0,(function*(){yield e.refreshAccessToken()}))),1e3*(t<=10?t:t-10));yield this._dataLayer.setTemporaryDataParameter(Iy,JSON.stringify(i))}}))}getRefreshTimeoutTimer(){return ry(this,void 0,void 0,(function*(){return(yield this._dataLayer.getTemporaryDataParameter(Iy))?JSON.parse(yield this._dataLayer.getTemporaryDataParameter(Iy)):-1}))}clearRefreshTokenTimeout(e){return ry(this,void 0,void 0,(function*(){if(e)return void clearTimeout(e);const t=yield this.getRefreshTimeoutTimer();-1!==t&&clearTimeout(t)}))}}const Oy=(()=>{let e,t,i,n,l,o,c,a,r,d,s;const u=(c,a,r,d,u,h,b)=>{e=c,t=a,i=r,n=d,l=h,o=u,s=b,n>-1&&Z(),o>-1&&(u=setInterval((()=>{m()}),1e3*o))},Z=()=>ry(void 0,void 0,void 0,(function*(){var o;if(!t||!e||!l)return;const c="opIFrame";const r=document.getElementById("rpIFrame");(null===(o=null==r?void 0:r.contentDocument)||void 0===o?void 0:o.getElementById(c)).src=t+"?client_id="+e+"&redirect_uri="+l,a=setInterval((function(){var n;return ry(this,void 0,void 0,(function*(){const l=yield i();if(Boolean(e)&&Boolean(l)){const i="".concat(e," ").concat(l),o=document.getElementById("rpIFrame"),a=(null===(n=null==o?void 0:o.contentDocument)||void 0===n?void 0:n.getElementById(c)).contentWindow;null==a||a.postMessage(i,t)}}))}),1e3*n),b()})),h=()=>{clearInterval(a),clearInterval(undefined)},b=()=>{null===window||void 0===window||window.addEventListener("message",(function(e){var i;return ry(this,void 0,void 0,(function*(){const n=t;!n||(null==n?void 0:n.indexOf(e.origin))<0||"set_session_state_from_iframe"===(null===(i=null==e?void 0:e.data)||void 0===i?void 0:i.type)||"unchanged"===e.data||("error"===e.data?window.location.href=yield c():"changed"===e.data&&m())}))}),!1)},m=()=>ry(void 0,void 0,void 0,(function*(){var e;const t=document.getElementById("rpIFrame"),i=null===(e=null==t?void 0:t.contentDocument)||void 0===e?void 0:e.getElementById("promptNoneIFrame");if(My.canSendPromptNoneRequest()){My.setPromptNoneRequestSent(!0);const e=t=>{var i,n,l;"set_session_state_from_iframe"===(null===(i=null==t?void 0:t.data)||void 0===i?void 0:i.type)&&(d(null!==(l=null===(n=null==t?void 0:t.data)||void 0===n?void 0:n.data)&&void 0!==l?l:""),null===window||void 0===window||window.removeEventListener("message",e))};r!==jy.BrowserMemory&&r!==jy.WebWorker||null===window||void 0===window||window.addEventListener("message",e);const t=yield s({prompt:"none",response_mode:"query",state:Py});i.src=t}})),I=e=>ry(void 0,void 0,void 0,(function*(){var t,i;const n=new URL(window.location.href).searchParams.get("state"),l=new URL(window.location.href).searchParams.get(Xy),o=window.parent.parent;if(null!==n&&(n.includes(Py)||n.includes("sign-in-silently"))){const a=new URL(window.location.href).searchParams.get("code");if(null!==a&&0!==a.length){if(n.includes("sign-in-silently")){const e={data:{code:a,sessionState:null!=l?l:"",state:n},type:"check_session_signed_in"};return sessionStorage.setItem("initialized-silent-sign-in","false"),o.postMessage(e,o.origin),My.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield My.waitTillPageRedirect(),!0}const c=new URL(window.location.href).searchParams.get("session_state");if(r===jy.LocalStorage||r===jy.SessionStorage)e&&(yield e(c));else{const e={data:null!=c?c:"",type:"set_session_state_from_iframe"};null===(i=null===(t=null===window||void 0===window?void 0:window.parent)||void 0===t?void 0:t.parent)||void 0===i||i.postMessage(e)}return My.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield My.waitTillPageRedirect(),!0}{if(n.includes("sign-in-silently")){const e={type:"check_session_signed_out"};return window.parent.parent.postMessage(e,o.origin),My.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield My.waitTillPageRedirect(),!0}My.setPromptNoneRequestSent(!1);const e=yield c();return yield ky.clearUserSessionData(),o.location.href=e,window.location.href="about:blank",yield My.waitTillPageRedirect(),!0}}return!1}));return(e,t,i)=>ry(void 0,void 0,void 0,(function*(){var n;let l=document.createElement("iframe");l.setAttribute("id","rpIFrame"),l.style.display="none";let o=!1;l.onload=()=>{var e,t,i,n;l=document.getElementById("rpIFrame");const c=null==l?void 0:l.contentDocument,a=null==c?void 0:c.createElement("iframe");a&&(a.setAttribute("id","opIFrame"),a.style.display="none");const r=null==c?void 0:c.createElement("iframe");r&&(r.setAttribute("id","promptNoneIFrame"),r.style.display="none"),a&&(null===(t=null===(e=null==l?void 0:l.contentDocument)||void 0===e?void 0:e.body)||void 0===t||t.appendChild(a)),r&&(null===(n=null===(i=null==l?void 0:l.contentDocument)||void 0===i?void 0:i.body)||void 0===n||n.appendChild(r)),o=!0},null===(n=null===document||void 0===document?void 0:document.body)||void 0===n||n.appendChild(l),c=e,r=t,d=i;for(;!1===o;)yield new Promise((e=>setTimeout(e,1)));return{initialize:u,receivePromptNoneResponse:I,reset:h}}))})();var _y={exports:{}},qy=function(e,t){return function(){for(var i=new Array(arguments.length),n=0;n<i.length;n++)i[n]=arguments[n];return e.apply(t,i)}},$y=qy,eX=Object.prototype.toString;function tX(e){return Array.isArray(e)}function iX(e){return void 0===e}function nX(e){return"[object ArrayBuffer]"===eX.call(e)}function lX(e){return null!==e&&"object"==typeof e}function oX(e){if("[object Object]"!==eX.call(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}function cX(e){return"[object Function]"===eX.call(e)}function aX(e,t){if(null!=e)if("object"!=typeof e&&(e=[e]),tX(e))for(var i=0,n=e.length;i<n;i++)t.call(null,e[i],i,e);else for(var l in e)Object.prototype.hasOwnProperty.call(e,l)&&t.call(null,e[l],l,e)}var rX={isArray:tX,isArrayBuffer:nX,isBuffer:function(e){return null!==e&&!iX(e)&&null!==e.constructor&&!iX(e.constructor)&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)},isFormData:function(e){return"[object FormData]"===eX.call(e)},isArrayBufferView:function(e){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&nX(e.buffer)},isString:function(e){return"string"==typeof e},isNumber:function(e){return"number"==typeof e},isObject:lX,isPlainObject:oX,isUndefined:iX,isDate:function(e){return"[object Date]"===eX.call(e)},isFile:function(e){return"[object File]"===eX.call(e)},isBlob:function(e){return"[object Blob]"===eX.call(e)},isFunction:cX,isStream:function(e){return lX(e)&&cX(e.pipe)},isURLSearchParams:function(e){return"[object URLSearchParams]"===eX.call(e)},isStandardBrowserEnv:function(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&("undefined"!=typeof window&&"undefined"!=typeof document)},forEach:aX,merge:function e(){var t={};function i(i,n){oX(t[n])&&oX(i)?t[n]=e(t[n],i):oX(i)?t[n]=e({},i):tX(i)?t[n]=i.slice():t[n]=i}for(var n=0,l=arguments.length;n<l;n++)aX(arguments[n],i);return t},extend:function(e,t,i){return aX(t,(function(t,n){e[n]=i&&"function"==typeof t?$y(t,i):t})),e},trim:function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")},stripBOM:function(e){return 65279===e.charCodeAt(0)&&(e=e.slice(1)),e}},dX=rX;function sX(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var uX=function(e,t,i){if(!t)return e;var n;if(i)n=i(t);else if(dX.isURLSearchParams(t))n=t.toString();else{var l=[];dX.forEach(t,(function(e,t){null!=e&&(dX.isArray(e)?t+="[]":e=[e],dX.forEach(e,(function(e){dX.isDate(e)?e=e.toISOString():dX.isObject(e)&&(e=JSON.stringify(e)),l.push(sX(t)+"="+sX(e))})))})),n=l.join("&")}if(n){var o=e.indexOf("#");-1!==o&&(e=e.slice(0,o)),e+=(-1===e.indexOf("?")?"?":"&")+n}return e},ZX=rX;function hX(){this.handlers=[]}hX.prototype.use=function(e,t,i){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!i&&i.synchronous,runWhen:i?i.runWhen:null}),this.handlers.length-1},hX.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},hX.prototype.forEach=function(e){ZX.forEach(this.handlers,(function(t){null!==t&&e(t)}))};var bX=hX,mX="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{};function IX(){throw new Error("setTimeout has not been defined")}function pX(){throw new Error("clearTimeout has not been defined")}var gX=IX,GX=pX;function yX(e){if(gX===setTimeout)return setTimeout(e,0);if((gX===IX||!gX)&&setTimeout)return gX=setTimeout,setTimeout(e,0);try{return gX(e,0)}catch(t){try{return gX.call(null,e,0)}catch(t){return gX.call(this,e,0)}}}"function"==typeof mX.setTimeout&&(gX=setTimeout),"function"==typeof mX.clearTimeout&&(GX=clearTimeout);var XX,VX=[],WX=!1,CX=-1;function RX(){WX&&XX&&(WX=!1,XX.length?VX=XX.concat(VX):CX=-1,VX.length&&vX())}function vX(){if(!WX){var e=yX(RX);WX=!0;for(var t=VX.length;t;){for(XX=VX,VX=[];++CX<t;)XX&&XX[CX].run();CX=-1,t=VX.length}XX=null,WX=!1,function(e){if(GX===clearTimeout)return clearTimeout(e);if((GX===pX||!GX)&&clearTimeout)return GX=clearTimeout,clearTimeout(e);try{GX(e)}catch(t){try{return GX.call(null,e)}catch(t){return GX.call(this,e)}}}(e)}}function SX(e,t){this.fun=e,this.array=t}SX.prototype.run=function(){this.fun.apply(null,this.array)};function fX(){}var YX=fX,KX=fX,NX=fX,JX=fX,LX=fX,UX=fX,kX=fX;var HX=mX.performance||{},AX=HX.now||HX.mozNow||HX.msNow||HX.oNow||HX.webkitNow||function(){return(new Date).getTime()};var TX=new Date;var FX={nextTick:function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var i=1;i<arguments.length;i++)t[i-1]=arguments[i];VX.push(new SX(e,t)),1!==VX.length||WX||yX(vX)},title:"browser",browser:!0,env:{},argv:[],version:"",versions:{},on:YX,addListener:KX,once:NX,off:JX,removeListener:LX,removeAllListeners:UX,emit:kX,binding:function(e){throw new Error("process.binding is not supported")},cwd:function(){return"/"},chdir:function(e){throw new Error("process.chdir is not supported")},umask:function(){return 0},hrtime:function(e){var t=.001*AX.call(HX),i=Math.floor(t),n=Math.floor(t%1*1e9);return e&&(i-=e[0],(n-=e[1])<0&&(i--,n+=1e9)),[i,n]},platform:"browser",release:{},config:{},uptime:function(){return(new Date-TX)/1e3}},BX=FX,wX=rX,xX=function(e,t,i,n,l){return e.config=t,i&&(e.code=i),e.request=n,e.response=l,e.isAxiosError=!0,e.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code,status:this.response&&this.response.status?this.response.status:null}},e},zX={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},PX=xX,jX=function(e,t,i,n,l){var o=new Error(e);return PX(o,t,i,n,l)},QX=jX,MX=rX,EX=MX.isStandardBrowserEnv()?{write:function(e,t,i,n,l,o){var c=[];c.push(e+"="+encodeURIComponent(t)),MX.isNumber(i)&&c.push("expires="+new Date(i).toGMTString()),MX.isString(n)&&c.push("path="+n),MX.isString(l)&&c.push("domain="+l),!0===o&&c.push("secure"),document.cookie=c.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}},DX=function(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)},OX=function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e},_X=rX,qX=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"],$X=rX,eV=$X.isStandardBrowserEnv()?function(){var e,t=/(msie|trident)/i.test(navigator.userAgent),i=document.createElement("a");function n(e){var n=e;return t&&(i.setAttribute("href",n),n=i.href),i.setAttribute("href",n),{href:i.href,protocol:i.protocol?i.protocol.replace(/:$/,""):"",host:i.host,search:i.search?i.search.replace(/^\?/,""):"",hash:i.hash?i.hash.replace(/^#/,""):"",hostname:i.hostname,port:i.port,pathname:"/"===i.pathname.charAt(0)?i.pathname:"/"+i.pathname}}return e=n(window.location.href),function(t){var i=$X.isString(t)?n(t):t;return i.protocol===e.protocol&&i.host===e.host}}():function(){return!0};function tV(e){this.message=e}tV.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},tV.prototype.__CANCEL__=!0;var iV=tV,nV=rX,lV=function(e,t,i){var n=i.config.validateStatus;i.status&&n&&!n(i.status)?t(QX("Request failed with status code "+i.status,i.config,null,i.request,i)):e(i)},oV=EX,cV=uX,aV=function(e,t){return e&&!DX(t)?OX(e,t):t},rV=function(e){var t,i,n,l={};return e?(_X.forEach(e.split("\n"),(function(e){if(n=e.indexOf(":"),t=_X.trim(e.substr(0,n)).toLowerCase(),i=_X.trim(e.substr(n+1)),t){if(l[t]&&qX.indexOf(t)>=0)return;l[t]="set-cookie"===t?(l[t]?l[t]:[]).concat([i]):l[t]?l[t]+", "+i:i}})),l):l},dV=eV,sV=jX,uV=zX,ZV=iV,hV=function(e){return new Promise((function(t,i){var n,l=e.data,o=e.headers,c=e.responseType;function a(){e.cancelToken&&e.cancelToken.unsubscribe(n),e.signal&&e.signal.removeEventListener("abort",n)}nV.isFormData(l)&&delete o["Content-Type"];var r=new XMLHttpRequest;if(e.auth){var d=e.auth.username||"",s=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";o.Authorization="Basic "+btoa(d+":"+s)}var u=aV(e.baseURL,e.url);function Z(){if(r){var n="getAllResponseHeaders"in r?rV(r.getAllResponseHeaders()):null,l={data:c&&"text"!==c&&"json"!==c?r.response:r.responseText,status:r.status,statusText:r.statusText,headers:n,config:e,request:r};lV((function(e){t(e),a()}),(function(e){i(e),a()}),l),r=null}}if(r.open(e.method.toUpperCase(),cV(u,e.params,e.paramsSerializer),!0),r.timeout=e.timeout,"onloadend"in r?r.onloadend=Z:r.onreadystatechange=function(){r&&4===r.readyState&&(0!==r.status||r.responseURL&&0===r.responseURL.indexOf("file:"))&&setTimeout(Z)},r.onabort=function(){r&&(i(sV("Request aborted",e,"ECONNABORTED",r)),r=null)},r.onerror=function(){i(sV("Network Error",e,null,r)),r=null},r.ontimeout=function(){var t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded",n=e.transitional||uV;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),i(sV(t,e,n.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",r)),r=null},nV.isStandardBrowserEnv()){var h=(e.withCredentials||dV(u))&&e.xsrfCookieName?oV.read(e.xsrfCookieName):void 0;h&&(o[e.xsrfHeaderName]=h)}"setRequestHeader"in r&&nV.forEach(o,(function(e,t){void 0===l&&"content-type"===t.toLowerCase()?delete o[t]:r.setRequestHeader(t,e)})),nV.isUndefined(e.withCredentials)||(r.withCredentials=!!e.withCredentials),c&&"json"!==c&&(r.responseType=e.responseType),"function"==typeof e.onDownloadProgress&&r.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&r.upload&&r.upload.addEventListener("progress",e.onUploadProgress),(e.cancelToken||e.signal)&&(n=function(e){r&&(i(!e||e&&e.type?new ZV("canceled"):e),r.abort(),r=null)},e.cancelToken&&e.cancelToken.subscribe(n),e.signal&&(e.signal.aborted?n():e.signal.addEventListener("abort",n))),l||(l=null),r.send(l)}))},bV=rX,mV=function(e,t){wX.forEach(e,(function(i,n){n!==t&&n.toUpperCase()===t.toUpperCase()&&(e[t]=i,delete e[n])}))},IV=xX,pV={"Content-Type":"application/x-www-form-urlencoded"};function gV(e,t){!bV.isUndefined(e)&&bV.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}var GV,yV={transitional:zX,adapter:(("undefined"!=typeof XMLHttpRequest||void 0!==BX&&"[object process]"===Object.prototype.toString.call(BX))&&(GV=hV),GV),transformRequest:[function(e,t){return mV(t,"Accept"),mV(t,"Content-Type"),bV.isFormData(e)||bV.isArrayBuffer(e)||bV.isBuffer(e)||bV.isStream(e)||bV.isFile(e)||bV.isBlob(e)?e:bV.isArrayBufferView(e)?e.buffer:bV.isURLSearchParams(e)?(gV(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString()):bV.isObject(e)||t&&"application/json"===t["Content-Type"]?(gV(t,"application/json"),function(e,t,i){if(bV.isString(e))try{return(t||JSON.parse)(e),bV.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(i||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){var t=this.transitional||yV.transitional,i=t&&t.silentJSONParsing,n=t&&t.forcedJSONParsing,l=!i&&"json"===this.responseType;if(l||n&&bV.isString(e)&&e.length)try{return JSON.parse(e)}catch(e){if(l){if("SyntaxError"===e.name)throw IV(e,this,"E_JSON_PARSE");throw e}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};bV.forEach(["delete","get","head"],(function(e){yV.headers[e]={}})),bV.forEach(["post","put","patch"],(function(e){yV.headers[e]=bV.merge(pV)}));var XV=yV,VV=rX,WV=XV,CV=function(e){return!(!e||!e.__CANCEL__)},RV=rX,vV=function(e,t,i){var n=this||WV;return VV.forEach(i,(function(i){e=i.call(n,e,t)})),e},SV=CV,fV=XV,YV=iV;function KV(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new YV("canceled")}var NV=rX,JV=function(e,t){t=t||{};var i={};function n(e,t){return NV.isPlainObject(e)&&NV.isPlainObject(t)?NV.merge(e,t):NV.isPlainObject(t)?NV.merge({},t):NV.isArray(t)?t.slice():t}function l(i){return NV.isUndefined(t[i])?NV.isUndefined(e[i])?void 0:n(void 0,e[i]):n(e[i],t[i])}function o(e){if(!NV.isUndefined(t[e]))return n(void 0,t[e])}function c(i){return NV.isUndefined(t[i])?NV.isUndefined(e[i])?void 0:n(void 0,e[i]):n(void 0,t[i])}function a(i){return i in t?n(e[i],t[i]):i in e?n(void 0,e[i]):void 0}var r={url:o,method:o,data:o,baseURL:c,transformRequest:c,transformResponse:c,paramsSerializer:c,timeout:c,timeoutMessage:c,withCredentials:c,adapter:c,responseType:c,xsrfCookieName:c,xsrfHeaderName:c,onUploadProgress:c,onDownloadProgress:c,decompress:c,maxContentLength:c,maxBodyLength:c,transport:c,httpAgent:c,httpsAgent:c,cancelToken:c,socketPath:c,responseEncoding:c,validateStatus:a};return NV.forEach(Object.keys(e).concat(Object.keys(t)),(function(e){var t=r[e]||l,n=t(e);NV.isUndefined(n)&&t!==a||(i[e]=n)})),i},LV="0.26.1",UV=LV,kV={};["object","boolean","number","function","string","symbol"].forEach((function(e,t){kV[e]=function(i){return typeof i===e||"a"+(t<1?"n ":" ")+e}}));var HV={};kV.transitional=function(e,t,i){function n(e,t){return"[Axios v"+UV+"] Transitional option '"+e+"'"+t+(i?". "+i:"")}return function(i,l,o){if(!1===e)throw new Error(n(l," has been removed"+(t?" in "+t:"")));return t&&!HV[l]&&(HV[l]=!0,console.warn(n(l," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(i,l,o)}};var AV={assertOptions:function(e,t,i){if("object"!=typeof e)throw new TypeError("options must be an object");for(var n=Object.keys(e),l=n.length;l-- >0;){var o=n[l],c=t[o];if(c){var a=e[o],r=void 0===a||c(a,o,e);if(!0!==r)throw new TypeError("option "+o+" must be "+r)}else if(!0!==i)throw Error("Unknown option "+o)}},validators:kV},TV=rX,FV=uX,BV=bX,wV=function(e){return KV(e),e.headers=e.headers||{},e.data=vV.call(e,e.data,e.headers,e.transformRequest),e.headers=RV.merge(e.headers.common||{},e.headers[e.method]||{},e.headers),RV.forEach(["delete","get","head","post","put","patch","common"],(function(t){delete e.headers[t]})),(e.adapter||fV.adapter)(e).then((function(t){return KV(e),t.data=vV.call(e,t.data,t.headers,e.transformResponse),t}),(function(t){return SV(t)||(KV(e),t&&t.response&&(t.response.data=vV.call(e,t.response.data,t.response.headers,e.transformResponse))),Promise.reject(t)}))},xV=JV,zV=AV,PV=zV.validators;function jV(e){this.defaults=e,this.interceptors={request:new BV,response:new BV}}jV.prototype.request=function(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},(t=xV(this.defaults,t)).method?t.method=t.method.toLowerCase():this.defaults.method?t.method=this.defaults.method.toLowerCase():t.method="get";var i=t.transitional;void 0!==i&&zV.assertOptions(i,{silentJSONParsing:PV.transitional(PV.boolean),forcedJSONParsing:PV.transitional(PV.boolean),clarifyTimeoutError:PV.transitional(PV.boolean)},!1);var n=[],l=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(l=l&&e.synchronous,n.unshift(e.fulfilled,e.rejected))}));var o,c=[];if(this.interceptors.response.forEach((function(e){c.push(e.fulfilled,e.rejected)})),!l){var a=[wV,void 0];for(Array.prototype.unshift.apply(a,n),a=a.concat(c),o=Promise.resolve(t);a.length;)o=o.then(a.shift(),a.shift());return o}for(var r=t;n.length;){var d=n.shift(),s=n.shift();try{r=d(r)}catch(e){s(e);break}}try{o=wV(r)}catch(e){return Promise.reject(e)}for(;c.length;)o=o.then(c.shift(),c.shift());return o},jV.prototype.getUri=function(e){return e=xV(this.defaults,e),FV(e.url,e.params,e.paramsSerializer).replace(/^\?/,"")},TV.forEach(["delete","get","head","options"],(function(e){jV.prototype[e]=function(t,i){return this.request(xV(i||{},{method:e,url:t,data:(i||{}).data}))}})),TV.forEach(["post","put","patch"],(function(e){jV.prototype[e]=function(t,i,n){return this.request(xV(n||{},{method:e,url:t,data:i}))}}));var QV=jV,MV=iV;function EV(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise((function(e){t=e}));var i=this;this.promise.then((function(e){if(i._listeners){var t,n=i._listeners.length;for(t=0;t<n;t++)i._listeners[t](e);i._listeners=null}})),this.promise.then=function(e){var t,n=new Promise((function(e){i.subscribe(e),t=e})).then(e);return n.cancel=function(){i.unsubscribe(t)},n},e((function(e){i.reason||(i.reason=new MV(e),t(i.reason))}))}EV.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},EV.prototype.subscribe=function(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]},EV.prototype.unsubscribe=function(e){if(this._listeners){var t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}},EV.source=function(){var e,t=new EV((function(t){e=t}));return{token:t,cancel:e}};var DV=EV,OV=rX,_V=rX,qV=qy,$V=QV,eW=JV;var tW=function e(t){var i=new $V(t),n=qV($V.prototype.request,i);return _V.extend(n,$V.prototype,i),_V.extend(n,i),n.create=function(i){return e(eW(t,i))},n}(XV);tW.Axios=$V,tW.Cancel=iV,tW.CancelToken=DV,tW.isCancel=CV,tW.VERSION=LV,tW.all=function(e){return Promise.all(e)},tW.spread=function(e){return function(t){return e.apply(null,t)}},tW.isAxiosError=function(e){return OV.isObject(e)&&!0===e.isAxiosError},_y.exports=tW,_y.exports.default=tW;var iW,nW=_y.exports;let lW=iW=class{constructor(){this.attachToken=()=>Promise.resolve(),this.requestStartCallback=()=>null,this.requestSuccessCallback=()=>null,this.requestErrorCallback=()=>null,this.requestFinishCallback=()=>null,this.init=this.init.bind(this),this.setHttpRequestErrorCallback=this.setHttpRequestErrorCallback.bind(this),this.setHttpRequestFinishCallback=this.setHttpRequestFinishCallback.bind(this),this.setHttpRequestStartCallback=this.setHttpRequestStartCallback.bind(this),this.setHttpRequestSuccessCallback=this.setHttpRequestSuccessCallback.bind(this)}static getInstance(){return this.axiosInstance||(this.axiosInstance=nW.create({withCredentials:!0}),this.clientInstance||(this.clientInstance=new iW),this.axiosInstance.interceptors.request.use((e=>ry(this,void 0,void 0,(function*(){return yield this.clientInstance.requestHandler(e)})))),this.axiosInstance.interceptors.response.use((e=>this.clientInstance.successHandler(e)),(e=>this.clientInstance.errorHandler(e))),this.axiosInstance.all=nW.all,this.axiosInstance.spread=nW.spread,this.axiosInstance.init=this.clientInstance.init,this.axiosInstance.enableHandler=this.clientInstance.enableHandler,this.axiosInstance.disableHandler=this.clientInstance.disableHandler,this.axiosInstance.disableHandlerWithTimeout=this.clientInstance.disableHandlerWithTimeout,this.axiosInstance.setHttpRequestStartCallback=this.clientInstance.setHttpRequestStartCallback,this.axiosInstance.setHttpRequestSuccessCallback=this.clientInstance.setHttpRequestSuccessCallback,this.axiosInstance.setHttpRequestErrorCallback=this.clientInstance.setHttpRequestErrorCallback,this.axiosInstance.setHttpRequestFinishCallback=this.clientInstance.setHttpRequestFinishCallback),this.axiosInstance}requestHandler(e){return ry(this,void 0,void 0,(function*(){if(yield this.attachToken(e),null==e?void 0:e.shouldEncodeToFormData){const t=null==e?void 0:e.data,i=new FormData;Object.keys(t).forEach((e=>{i.append(e,t[e])})),e.data=i}return e.startTimeInMs=(new Date).getTime(),iW.isHandlerEnabled&&this.requestStartCallback&&"function"==typeof this.requestStartCallback&&this.requestStartCallback(e),e}))}errorHandler(e){throw iW.isHandlerEnabled&&(this.requestErrorCallback&&"function"==typeof this.requestErrorCallback&&this.requestErrorCallback(e),this.requestFinishCallback&&"function"==typeof this.requestFinishCallback&&this.requestFinishCallback()),e}successHandler(e){return iW.isHandlerEnabled&&(this.requestSuccessCallback&&"function"==typeof this.requestSuccessCallback&&this.requestSuccessCallback(e),this.requestFinishCallback&&"function"==typeof this.requestFinishCallback&&this.requestFinishCallback()),e}init(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=arguments.length>1?arguments[1]:void 0;return ry(this,void 0,void 0,(function*(){iW.isHandlerEnabled=e,this.attachToken=t}))}enableHandler(){iW.isHandlerEnabled=!0}disableHandler(){iW.isHandlerEnabled=!1}disableHandlerWithTimeout(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:iW.DEFAULT_HANDLER_DISABLE_TIMEOUT;iW.isHandlerEnabled=!1,setTimeout((()=>{iW.isHandlerEnabled=!0}),e)}setHttpRequestStartCallback(e){this.requestStartCallback=e}setHttpRequestSuccessCallback(e){this.requestSuccessCallback=e}setHttpRequestErrorCallback(e){this.requestErrorCallback=e}setHttpRequestFinishCallback(e){this.requestFinishCallback=e}};lW.DEFAULT_HANDLER_DISABLE_TIMEOUT=1e3,lW=iW=function(e,t,i,n){var l,o=arguments.length,c=o<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)c=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(l=e[a])&&(c=(o<3?l(c):o>3?l(t,i,c):l(t,i))||c);return o>3&&c&&Object.defineProperty(t,i,c),c}([e=>{}],lW);class oW{setData(e,t){return ry(this,void 0,void 0,(function*(){localStorage.setItem(e,t)}))}getData(e){var t;return ry(this,void 0,void 0,(function*(){return null!==(t=localStorage.getItem(e))&&void 0!==t?t:"{}"}))}removeData(e){return ry(this,void 0,void 0,(function*(){localStorage.removeItem(e)}))}}class cW{constructor(){this._data=new Map}setData(e,t){return ry(this,void 0,void 0,(function*(){this._data.set(e,t)}))}getData(e){var t,i;return ry(this,void 0,void 0,(function*(){return null!==(i=null===(t=this._data)||void 0===t?void 0:t.get(e))&&void 0!==i?i:"{}"}))}removeData(e){return ry(this,void 0,void 0,(function*(){this._data.delete(e)}))}}class aW{setData(e,t){return ry(this,void 0,void 0,(function*(){sessionStorage.setItem(e,t)}))}getData(e){var t;return ry(this,void 0,void 0,(function*(){return null!==(t=sessionStorage.getItem(e))&&void 0!==t?t:"{}"}))}removeData(e){return ry(this,void 0,void 0,(function*(){sessionStorage.removeItem(e)}))}}var rW=[],dW=[],sW="undefined"!=typeof Uint8Array?Uint8Array:Array,uW=!1;function ZW(){uW=!0;for(var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",t=0,i=e.length;t<i;++t)rW[t]=e[t],dW[e.charCodeAt(t)]=t;dW["-".charCodeAt(0)]=62,dW["_".charCodeAt(0)]=63}function hW(e,t,i){for(var n,l,o=[],c=t;c<i;c+=3)n=(e[c]<<16)+(e[c+1]<<8)+e[c+2],o.push(rW[(l=n)>>18&63]+rW[l>>12&63]+rW[l>>6&63]+rW[63&l]);return o.join("")}function bW(e){var t;uW||ZW();for(var i=e.length,n=i%3,l="",o=[],c=16383,a=0,r=i-n;a<r;a+=c)o.push(hW(e,a,a+c>r?r:a+c));return 1===n?(t=e[i-1],l+=rW[t>>2],l+=rW[t<<4&63],l+="=="):2===n&&(t=(e[i-2]<<8)+e[i-1],l+=rW[t>>10],l+=rW[t>>4&63],l+=rW[t<<2&63],l+="="),o.push(l),o.join("")}function mW(e,t,i,n,l){var o,c,a=8*l-n-1,r=(1<<a)-1,d=r>>1,s=-7,u=i?l-1:0,Z=i?-1:1,h=e[t+u];for(u+=Z,o=h&(1<<-s)-1,h>>=-s,s+=a;s>0;o=256*o+e[t+u],u+=Z,s-=8);for(c=o&(1<<-s)-1,o>>=-s,s+=n;s>0;c=256*c+e[t+u],u+=Z,s-=8);if(0===o)o=1-d;else{if(o===r)return c?NaN:1/0*(h?-1:1);c+=Math.pow(2,n),o-=d}return(h?-1:1)*c*Math.pow(2,o-n)}function IW(e,t,i,n,l,o){var c,a,r,d=8*o-l-1,s=(1<<d)-1,u=s>>1,Z=23===l?Math.pow(2,-24)-Math.pow(2,-77):0,h=n?0:o-1,b=n?1:-1,m=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(a=isNaN(t)?1:0,c=s):(c=Math.floor(Math.log(t)/Math.LN2),t*(r=Math.pow(2,-c))<1&&(c--,r*=2),(t+=c+u>=1?Z/r:Z*Math.pow(2,1-u))*r>=2&&(c++,r/=2),c+u>=s?(a=0,c=s):c+u>=1?(a=(t*r-1)*Math.pow(2,l),c+=u):(a=t*Math.pow(2,u-1)*Math.pow(2,l),c=0));l>=8;e[i+h]=255&a,h+=b,a/=256,l-=8);for(c=c<<l|a,d+=l;d>0;e[i+h]=255&c,h+=b,c/=256,d-=8);e[i+h-b]|=128*m}var pW={}.toString,gW=Array.isArray||function(e){return"[object Array]"==pW.call(e)};VW.TYPED_ARRAY_SUPPORT=void 0===mX.TYPED_ARRAY_SUPPORT||mX.TYPED_ARRAY_SUPPORT;var GW=yW();function yW(){return VW.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function XW(e,t){if(yW()<t)throw new RangeError("Invalid typed array length");return VW.TYPED_ARRAY_SUPPORT?(e=new Uint8Array(t)).__proto__=VW.prototype:(null===e&&(e=new VW(t)),e.length=t),e}function VW(e,t,i){if(!(VW.TYPED_ARRAY_SUPPORT||this instanceof VW))return new VW(e,t,i);if("number"==typeof e){if("string"==typeof t)throw new Error("If encoding is specified then the first argument must be a string");return RW(this,e)}return WW(this,e,t,i)}function WW(e,t,i,n){if("number"==typeof t)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&t instanceof ArrayBuffer?function(e,t,i,n){if(t.byteLength,i<0||t.byteLength<i)throw new RangeError("'offset' is out of bounds");if(t.byteLength<i+(n||0))throw new RangeError("'length' is out of bounds");t=void 0===i&&void 0===n?new Uint8Array(t):void 0===n?new Uint8Array(t,i):new Uint8Array(t,i,n);VW.TYPED_ARRAY_SUPPORT?(e=t).__proto__=VW.prototype:e=vW(e,t);return e}(e,t,i,n):"string"==typeof t?function(e,t,i){"string"==typeof i&&""!==i||(i="utf8");if(!VW.isEncoding(i))throw new TypeError('"encoding" must be a valid string encoding');var n=0|YW(t,i),l=(e=XW(e,n)).write(t,i);l!==n&&(e=e.slice(0,l));return e}(e,t,i):function(e,t){if(fW(t)){var i=0|SW(t.length);return 0===(e=XW(e,i)).length||t.copy(e,0,0,i),e}if(t){if("undefined"!=typeof ArrayBuffer&&t.buffer instanceof ArrayBuffer||"length"in t)return"number"!=typeof t.length||(n=t.length)!=n?XW(e,0):vW(e,t);if("Buffer"===t.type&&gW(t.data))return vW(e,t.data)}var n;throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(e,t)}function CW(e){if("number"!=typeof e)throw new TypeError('"size" argument must be a number');if(e<0)throw new RangeError('"size" argument must not be negative')}function RW(e,t){if(CW(t),e=XW(e,t<0?0:0|SW(t)),!VW.TYPED_ARRAY_SUPPORT)for(var i=0;i<t;++i)e[i]=0;return e}function vW(e,t){var i=t.length<0?0:0|SW(t.length);e=XW(e,i);for(var n=0;n<i;n+=1)e[n]=255&t[n];return e}function SW(e){if(e>=yW())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+yW().toString(16)+" bytes");return 0|e}function fW(e){return!(null==e||!e._isBuffer)}function YW(e,t){if(fW(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var i=e.length;if(0===i)return 0;for(var n=!1;;)switch(t){case"ascii":case"latin1":case"binary":return i;case"utf8":case"utf-8":case void 0:return tC(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*i;case"hex":return i>>>1;case"base64":return iC(e).length;default:if(n)return tC(e).length;t=(""+t).toLowerCase(),n=!0}}function KW(e,t,i){var n=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===i||i>this.length)&&(i=this.length),i<=0)return"";if((i>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return PW(this,t,i);case"utf8":case"utf-8":return wW(this,t,i);case"ascii":return xW(this,t,i);case"latin1":case"binary":return zW(this,t,i);case"base64":return BW(this,t,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return jW(this,t,i);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function NW(e,t,i){var n=e[t];e[t]=e[i],e[i]=n}function JW(e,t,i,n,l){if(0===e.length)return-1;if("string"==typeof i?(n=i,i=0):i>2147483647?i=2147483647:i<-2147483648&&(i=-2147483648),i=+i,isNaN(i)&&(i=l?0:e.length-1),i<0&&(i=e.length+i),i>=e.length){if(l)return-1;i=e.length-1}else if(i<0){if(!l)return-1;i=0}if("string"==typeof t&&(t=VW.from(t,n)),fW(t))return 0===t.length?-1:LW(e,t,i,n,l);if("number"==typeof t)return t&=255,VW.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?l?Uint8Array.prototype.indexOf.call(e,t,i):Uint8Array.prototype.lastIndexOf.call(e,t,i):LW(e,[t],i,n,l);throw new TypeError("val must be string, number or Buffer")}function LW(e,t,i,n,l){var o,c=1,a=e.length,r=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;c=2,a/=2,r/=2,i/=2}function d(e,t){return 1===c?e[t]:e.readUInt16BE(t*c)}if(l){var s=-1;for(o=i;o<a;o++)if(d(e,o)===d(t,-1===s?0:o-s)){if(-1===s&&(s=o),o-s+1===r)return s*c}else-1!==s&&(o-=o-s),s=-1}else for(i+r>a&&(i=a-r),o=i;o>=0;o--){for(var u=!0,Z=0;Z<r;Z++)if(d(e,o+Z)!==d(t,Z)){u=!1;break}if(u)return o}return-1}function UW(e,t,i,n){i=Number(i)||0;var l=e.length-i;n?(n=Number(n))>l&&(n=l):n=l;var o=t.length;if(o%2!=0)throw new TypeError("Invalid hex string");n>o/2&&(n=o/2);for(var c=0;c<n;++c){var a=parseInt(t.substr(2*c,2),16);if(isNaN(a))return c;e[i+c]=a}return c}function kW(e,t,i,n){return nC(tC(t,e.length-i),e,i,n)}function HW(e,t,i,n){return nC(function(e){for(var t=[],i=0;i<e.length;++i)t.push(255&e.charCodeAt(i));return t}(t),e,i,n)}function AW(e,t,i,n){return HW(e,t,i,n)}function TW(e,t,i,n){return nC(iC(t),e,i,n)}function FW(e,t,i,n){return nC(function(e,t){for(var i,n,l,o=[],c=0;c<e.length&&!((t-=2)<0);++c)n=(i=e.charCodeAt(c))>>8,l=i%256,o.push(l),o.push(n);return o}(t,e.length-i),e,i,n)}function BW(e,t,i){return 0===t&&i===e.length?bW(e):bW(e.slice(t,i))}function wW(e,t,i){i=Math.min(e.length,i);for(var n=[],l=t;l<i;){var o,c,a,r,d=e[l],s=null,u=d>239?4:d>223?3:d>191?2:1;if(l+u<=i)switch(u){case 1:d<128&&(s=d);break;case 2:128==(192&(o=e[l+1]))&&(r=(31&d)<<6|63&o)>127&&(s=r);break;case 3:o=e[l+1],c=e[l+2],128==(192&o)&&128==(192&c)&&(r=(15&d)<<12|(63&o)<<6|63&c)>2047&&(r<55296||r>57343)&&(s=r);break;case 4:o=e[l+1],c=e[l+2],a=e[l+3],128==(192&o)&&128==(192&c)&&128==(192&a)&&(r=(15&d)<<18|(63&o)<<12|(63&c)<<6|63&a)>65535&&r<1114112&&(s=r)}null===s?(s=65533,u=1):s>65535&&(s-=65536,n.push(s>>>10&1023|55296),s=56320|1023&s),n.push(s),l+=u}return function(e){var t=e.length;if(t<=4096)return String.fromCharCode.apply(String,e);var i="",n=0;for(;n<t;)i+=String.fromCharCode.apply(String,e.slice(n,n+=4096));return i}(n)}VW.poolSize=8192,VW._augment=function(e){return e.__proto__=VW.prototype,e},VW.from=function(e,t,i){return WW(null,e,t,i)},VW.TYPED_ARRAY_SUPPORT&&(VW.prototype.__proto__=Uint8Array.prototype,VW.__proto__=Uint8Array),VW.alloc=function(e,t,i){return function(e,t,i,n){return CW(t),t<=0?XW(e,t):void 0!==i?"string"==typeof n?XW(e,t).fill(i,n):XW(e,t).fill(i):XW(e,t)}(null,e,t,i)},VW.allocUnsafe=function(e){return RW(null,e)},VW.allocUnsafeSlow=function(e){return RW(null,e)},VW.isBuffer=lC,VW.compare=function(e,t){if(!fW(e)||!fW(t))throw new TypeError("Arguments must be Buffers");if(e===t)return 0;for(var i=e.length,n=t.length,l=0,o=Math.min(i,n);l<o;++l)if(e[l]!==t[l]){i=e[l],n=t[l];break}return i<n?-1:n<i?1:0},VW.isEncoding=function(e){switch(String(e).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},VW.concat=function(e,t){if(!gW(e))throw new TypeError('"list" argument must be an Array of Buffers');if(0===e.length)return VW.alloc(0);var i;if(void 0===t)for(t=0,i=0;i<e.length;++i)t+=e[i].length;var n=VW.allocUnsafe(t),l=0;for(i=0;i<e.length;++i){var o=e[i];if(!fW(o))throw new TypeError('"list" argument must be an Array of Buffers');o.copy(n,l),l+=o.length}return n},VW.byteLength=YW,VW.prototype._isBuffer=!0,VW.prototype.swap16=function(){var e=this.length;if(e%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var t=0;t<e;t+=2)NW(this,t,t+1);return this},VW.prototype.swap32=function(){var e=this.length;if(e%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var t=0;t<e;t+=4)NW(this,t,t+3),NW(this,t+1,t+2);return this},VW.prototype.swap64=function(){var e=this.length;if(e%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var t=0;t<e;t+=8)NW(this,t,t+7),NW(this,t+1,t+6),NW(this,t+2,t+5),NW(this,t+3,t+4);return this},VW.prototype.toString=function(){var e=0|this.length;return 0===e?"":0===arguments.length?wW(this,0,e):KW.apply(this,arguments)},VW.prototype.equals=function(e){if(!fW(e))throw new TypeError("Argument must be a Buffer");return this===e||0===VW.compare(this,e)},VW.prototype.inspect=function(){var e="";return this.length>0&&(e=this.toString("hex",0,50).match(/.{2}/g).join(" "),this.length>50&&(e+=" ... ")),"<Buffer "+e+">"},VW.prototype.compare=function(e,t,i,n,l){if(!fW(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===i&&(i=e?e.length:0),void 0===n&&(n=0),void 0===l&&(l=this.length),t<0||i>e.length||n<0||l>this.length)throw new RangeError("out of range index");if(n>=l&&t>=i)return 0;if(n>=l)return-1;if(t>=i)return 1;if(this===e)return 0;for(var o=(l>>>=0)-(n>>>=0),c=(i>>>=0)-(t>>>=0),a=Math.min(o,c),r=this.slice(n,l),d=e.slice(t,i),s=0;s<a;++s)if(r[s]!==d[s]){o=r[s],c=d[s];break}return o<c?-1:c<o?1:0},VW.prototype.includes=function(e,t,i){return-1!==this.indexOf(e,t,i)},VW.prototype.indexOf=function(e,t,i){return JW(this,e,t,i,!0)},VW.prototype.lastIndexOf=function(e,t,i){return JW(this,e,t,i,!1)},VW.prototype.write=function(e,t,i,n){if(void 0===t)n="utf8",i=this.length,t=0;else if(void 0===i&&"string"==typeof t)n=t,i=this.length,t=0;else{if(!isFinite(t))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");t|=0,isFinite(i)?(i|=0,void 0===n&&(n="utf8")):(n=i,i=void 0)}var l=this.length-t;if((void 0===i||i>l)&&(i=l),e.length>0&&(i<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var o=!1;;)switch(n){case"hex":return UW(this,e,t,i);case"utf8":case"utf-8":return kW(this,e,t,i);case"ascii":return HW(this,e,t,i);case"latin1":case"binary":return AW(this,e,t,i);case"base64":return TW(this,e,t,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return FW(this,e,t,i);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},VW.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function xW(e,t,i){var n="";i=Math.min(e.length,i);for(var l=t;l<i;++l)n+=String.fromCharCode(127&e[l]);return n}function zW(e,t,i){var n="";i=Math.min(e.length,i);for(var l=t;l<i;++l)n+=String.fromCharCode(e[l]);return n}function PW(e,t,i){var n=e.length;(!t||t<0)&&(t=0),(!i||i<0||i>n)&&(i=n);for(var l="",o=t;o<i;++o)l+=eC(e[o]);return l}function jW(e,t,i){for(var n=e.slice(t,i),l="",o=0;o<n.length;o+=2)l+=String.fromCharCode(n[o]+256*n[o+1]);return l}function QW(e,t,i){if(e%1!=0||e<0)throw new RangeError("offset is not uint");if(e+t>i)throw new RangeError("Trying to access beyond buffer length")}function MW(e,t,i,n,l,o){if(!fW(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>l||t<o)throw new RangeError('"value" argument is out of bounds');if(i+n>e.length)throw new RangeError("Index out of range")}function EW(e,t,i,n){t<0&&(t=65535+t+1);for(var l=0,o=Math.min(e.length-i,2);l<o;++l)e[i+l]=(t&255<<8*(n?l:1-l))>>>8*(n?l:1-l)}function DW(e,t,i,n){t<0&&(t=4294967295+t+1);for(var l=0,o=Math.min(e.length-i,4);l<o;++l)e[i+l]=t>>>8*(n?l:3-l)&255}function OW(e,t,i,n,l,o){if(i+n>e.length)throw new RangeError("Index out of range");if(i<0)throw new RangeError("Index out of range")}function _W(e,t,i,n,l){return l||OW(e,0,i,4),IW(e,t,i,n,23,4),i+4}function qW(e,t,i,n,l){return l||OW(e,0,i,8),IW(e,t,i,n,52,8),i+8}VW.prototype.slice=function(e,t){var i,n=this.length;if((e=~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),(t=void 0===t?n:~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),t<e&&(t=e),VW.TYPED_ARRAY_SUPPORT)(i=this.subarray(e,t)).__proto__=VW.prototype;else{var l=t-e;i=new VW(l,void 0);for(var o=0;o<l;++o)i[o]=this[o+e]}return i},VW.prototype.readUIntLE=function(e,t,i){e|=0,t|=0,i||QW(e,t,this.length);for(var n=this[e],l=1,o=0;++o<t&&(l*=256);)n+=this[e+o]*l;return n},VW.prototype.readUIntBE=function(e,t,i){e|=0,t|=0,i||QW(e,t,this.length);for(var n=this[e+--t],l=1;t>0&&(l*=256);)n+=this[e+--t]*l;return n},VW.prototype.readUInt8=function(e,t){return t||QW(e,1,this.length),this[e]},VW.prototype.readUInt16LE=function(e,t){return t||QW(e,2,this.length),this[e]|this[e+1]<<8},VW.prototype.readUInt16BE=function(e,t){return t||QW(e,2,this.length),this[e]<<8|this[e+1]},VW.prototype.readUInt32LE=function(e,t){return t||QW(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},VW.prototype.readUInt32BE=function(e,t){return t||QW(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},VW.prototype.readIntLE=function(e,t,i){e|=0,t|=0,i||QW(e,t,this.length);for(var n=this[e],l=1,o=0;++o<t&&(l*=256);)n+=this[e+o]*l;return n>=(l*=128)&&(n-=Math.pow(2,8*t)),n},VW.prototype.readIntBE=function(e,t,i){e|=0,t|=0,i||QW(e,t,this.length);for(var n=t,l=1,o=this[e+--n];n>0&&(l*=256);)o+=this[e+--n]*l;return o>=(l*=128)&&(o-=Math.pow(2,8*t)),o},VW.prototype.readInt8=function(e,t){return t||QW(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},VW.prototype.readInt16LE=function(e,t){t||QW(e,2,this.length);var i=this[e]|this[e+1]<<8;return 32768&i?4294901760|i:i},VW.prototype.readInt16BE=function(e,t){t||QW(e,2,this.length);var i=this[e+1]|this[e]<<8;return 32768&i?4294901760|i:i},VW.prototype.readInt32LE=function(e,t){return t||QW(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},VW.prototype.readInt32BE=function(e,t){return t||QW(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},VW.prototype.readFloatLE=function(e,t){return t||QW(e,4,this.length),mW(this,e,!0,23,4)},VW.prototype.readFloatBE=function(e,t){return t||QW(e,4,this.length),mW(this,e,!1,23,4)},VW.prototype.readDoubleLE=function(e,t){return t||QW(e,8,this.length),mW(this,e,!0,52,8)},VW.prototype.readDoubleBE=function(e,t){return t||QW(e,8,this.length),mW(this,e,!1,52,8)},VW.prototype.writeUIntLE=function(e,t,i,n){(e=+e,t|=0,i|=0,n)||MW(this,e,t,i,Math.pow(2,8*i)-1,0);var l=1,o=0;for(this[t]=255&e;++o<i&&(l*=256);)this[t+o]=e/l&255;return t+i},VW.prototype.writeUIntBE=function(e,t,i,n){(e=+e,t|=0,i|=0,n)||MW(this,e,t,i,Math.pow(2,8*i)-1,0);var l=i-1,o=1;for(this[t+l]=255&e;--l>=0&&(o*=256);)this[t+l]=e/o&255;return t+i},VW.prototype.writeUInt8=function(e,t,i){return e=+e,t|=0,i||MW(this,e,t,1,255,0),VW.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},VW.prototype.writeUInt16LE=function(e,t,i){return e=+e,t|=0,i||MW(this,e,t,2,65535,0),VW.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):EW(this,e,t,!0),t+2},VW.prototype.writeUInt16BE=function(e,t,i){return e=+e,t|=0,i||MW(this,e,t,2,65535,0),VW.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):EW(this,e,t,!1),t+2},VW.prototype.writeUInt32LE=function(e,t,i){return e=+e,t|=0,i||MW(this,e,t,4,4294967295,0),VW.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):DW(this,e,t,!0),t+4},VW.prototype.writeUInt32BE=function(e,t,i){return e=+e,t|=0,i||MW(this,e,t,4,4294967295,0),VW.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):DW(this,e,t,!1),t+4},VW.prototype.writeIntLE=function(e,t,i,n){if(e=+e,t|=0,!n){var l=Math.pow(2,8*i-1);MW(this,e,t,i,l-1,-l)}var o=0,c=1,a=0;for(this[t]=255&e;++o<i&&(c*=256);)e<0&&0===a&&0!==this[t+o-1]&&(a=1),this[t+o]=(e/c>>0)-a&255;return t+i},VW.prototype.writeIntBE=function(e,t,i,n){if(e=+e,t|=0,!n){var l=Math.pow(2,8*i-1);MW(this,e,t,i,l-1,-l)}var o=i-1,c=1,a=0;for(this[t+o]=255&e;--o>=0&&(c*=256);)e<0&&0===a&&0!==this[t+o+1]&&(a=1),this[t+o]=(e/c>>0)-a&255;return t+i},VW.prototype.writeInt8=function(e,t,i){return e=+e,t|=0,i||MW(this,e,t,1,127,-128),VW.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},VW.prototype.writeInt16LE=function(e,t,i){return e=+e,t|=0,i||MW(this,e,t,2,32767,-32768),VW.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):EW(this,e,t,!0),t+2},VW.prototype.writeInt16BE=function(e,t,i){return e=+e,t|=0,i||MW(this,e,t,2,32767,-32768),VW.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):EW(this,e,t,!1),t+2},VW.prototype.writeInt32LE=function(e,t,i){return e=+e,t|=0,i||MW(this,e,t,4,2147483647,-2147483648),VW.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):DW(this,e,t,!0),t+4},VW.prototype.writeInt32BE=function(e,t,i){return e=+e,t|=0,i||MW(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),VW.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):DW(this,e,t,!1),t+4},VW.prototype.writeFloatLE=function(e,t,i){return _W(this,e,t,!0,i)},VW.prototype.writeFloatBE=function(e,t,i){return _W(this,e,t,!1,i)},VW.prototype.writeDoubleLE=function(e,t,i){return qW(this,e,t,!0,i)},VW.prototype.writeDoubleBE=function(e,t,i){return qW(this,e,t,!1,i)},VW.prototype.copy=function(e,t,i,n){if(i||(i=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n<i&&(n=i),n===i)return 0;if(0===e.length||0===this.length)return 0;if(t<0)throw new RangeError("targetStart out of bounds");if(i<0||i>=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t<n-i&&(n=e.length-t+i);var l,o=n-i;if(this===e&&i<t&&t<n)for(l=o-1;l>=0;--l)e[l+t]=this[l+i];else if(o<1e3||!VW.TYPED_ARRAY_SUPPORT)for(l=0;l<o;++l)e[l+t]=this[l+i];else Uint8Array.prototype.set.call(e,this.subarray(i,i+o),t);return o},VW.prototype.fill=function(e,t,i,n){if("string"==typeof e){if("string"==typeof t?(n=t,t=0,i=this.length):"string"==typeof i&&(n=i,i=this.length),1===e.length){var l=e.charCodeAt(0);l<256&&(e=l)}if(void 0!==n&&"string"!=typeof n)throw new TypeError("encoding must be a string");if("string"==typeof n&&!VW.isEncoding(n))throw new TypeError("Unknown encoding: "+n)}else"number"==typeof e&&(e&=255);if(t<0||this.length<t||this.length<i)throw new RangeError("Out of range index");if(i<=t)return this;var o;if(t>>>=0,i=void 0===i?this.length:i>>>0,e||(e=0),"number"==typeof e)for(o=t;o<i;++o)this[o]=e;else{var c=fW(e)?e:tC(new VW(e,n).toString()),a=c.length;for(o=0;o<i-t;++o)this[o+t]=c[o%a]}return this};var $W=/[^+\/0-9A-Za-z-_]/g;function eC(e){return e<16?"0"+e.toString(16):e.toString(16)}function tC(e,t){var i;t=t||1/0;for(var n=e.length,l=null,o=[],c=0;c<n;++c){if((i=e.charCodeAt(c))>55295&&i<57344){if(!l){if(i>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(c+1===n){(t-=3)>-1&&o.push(239,191,189);continue}l=i;continue}if(i<56320){(t-=3)>-1&&o.push(239,191,189),l=i;continue}i=65536+(l-55296<<10|i-56320)}else l&&(t-=3)>-1&&o.push(239,191,189);if(l=null,i<128){if((t-=1)<0)break;o.push(i)}else if(i<2048){if((t-=2)<0)break;o.push(i>>6|192,63&i|128)}else if(i<65536){if((t-=3)<0)break;o.push(i>>12|224,i>>6&63|128,63&i|128)}else{if(!(i<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(i>>18|240,i>>12&63|128,i>>6&63|128,63&i|128)}}return o}function iC(e){return function(e){var t,i,n,l,o,c;uW||ZW();var a=e.length;if(a%4>0)throw new Error("Invalid string. Length must be a multiple of 4");o="="===e[a-2]?2:"="===e[a-1]?1:0,c=new sW(3*a/4-o),n=o>0?a-4:a;var r=0;for(t=0,i=0;t<n;t+=4,i+=3)l=dW[e.charCodeAt(t)]<<18|dW[e.charCodeAt(t+1)]<<12|dW[e.charCodeAt(t+2)]<<6|dW[e.charCodeAt(t+3)],c[r++]=l>>16&255,c[r++]=l>>8&255,c[r++]=255&l;return 2===o?(l=dW[e.charCodeAt(t)]<<2|dW[e.charCodeAt(t+1)]>>4,c[r++]=255&l):1===o&&(l=dW[e.charCodeAt(t)]<<10|dW[e.charCodeAt(t+1)]<<4|dW[e.charCodeAt(t+2)]>>2,c[r++]=l>>8&255,c[r++]=255&l),c}(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace($W,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function nC(e,t,i,n){for(var l=0;l<n&&!(l+i>=t.length||l>=e.length);++l)t[l+i]=e[l];return l}function lC(e){return null!=e&&(!!e._isBuffer||oC(e)||function(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&oC(e.slice(0,0))}(e))}function oC(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}var cC=Object.freeze({__proto__:null,Buffer:VW,INSPECT_MAX_BYTES:50,SlowBuffer:function(e){return+e!=e&&(e=0),VW.alloc(+e)},isBuffer:lC,kMaxLength:GW}),aC={exports:{}},rC={},dC={};Object.defineProperty(dC,"__esModule",{value:!0}),dC.default=function(e){var t=e.length,i=t%4;if(!i)return e;var n=t,l=4-i,o=t+l,c=VW.alloc(o);for(c.write(e);l--;)c.write("=",n++);return c.toString()},Object.defineProperty(rC,"__esModule",{value:!0});var sC=dC;function uC(e,t){return void 0===t&&(t="utf8"),VW.isBuffer(e)?hC(e.toString("base64")):hC(VW.from(e,t).toString("base64"))}function ZC(e){return e=e.toString(),sC.default(e).replace(/\-/g,"+").replace(/_/g,"/")}function hC(e){return e.replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}var bC,mC=uC;mC.encode=uC,mC.decode=function(e,t){return void 0===t&&(t="utf8"),VW.from(ZC(e),"base64").toString(t)},mC.toBase64=ZC,mC.fromBase64=hC,mC.toBuffer=function(e){return VW.from(ZC(e),"base64")},rC.default=mC,(bC=aC).exports=rC.default,bC.exports.default=bC.exports;var IC=aC.exports,pC={exports:{}};!function(e){!function(t,i){var n={};!function(e){e.__esModule=!0,e.digestLength=32,e.blockSize=64;var t=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]);function i(e,i,n,l,o){for(var c,a,r,d,s,u,Z,h,b,m,I,p,g;o>=64;){for(c=i[0],a=i[1],r=i[2],d=i[3],s=i[4],u=i[5],Z=i[6],h=i[7],m=0;m<16;m++)I=l+4*m,e[m]=(255&n[I])<<24|(255&n[I+1])<<16|(255&n[I+2])<<8|255&n[I+3];for(m=16;m<64;m++)p=((b=e[m-2])>>>17|b<<15)^(b>>>19|b<<13)^b>>>10,g=((b=e[m-15])>>>7|b<<25)^(b>>>18|b<<14)^b>>>3,e[m]=(p+e[m-7]|0)+(g+e[m-16]|0);for(m=0;m<64;m++)p=(((s>>>6|s<<26)^(s>>>11|s<<21)^(s>>>25|s<<7))+(s&u^~s&Z)|0)+(h+(t[m]+e[m]|0)|0)|0,g=((c>>>2|c<<30)^(c>>>13|c<<19)^(c>>>22|c<<10))+(c&a^c&r^a&r)|0,h=Z,Z=u,u=s,s=d+p|0,d=r,r=a,a=c,c=p+g|0;i[0]+=c,i[1]+=a,i[2]+=r,i[3]+=d,i[4]+=s,i[5]+=u,i[6]+=Z,i[7]+=h,l+=64,o-=64}return l}var n=function(){function t(){this.digestLength=e.digestLength,this.blockSize=e.blockSize,this.state=new Int32Array(8),this.temp=new Int32Array(64),this.buffer=new Uint8Array(128),this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this.reset()}return t.prototype.reset=function(){return this.state[0]=1779033703,this.state[1]=3144134277,this.state[2]=1013904242,this.state[3]=2773480762,this.state[4]=1359893119,this.state[5]=2600822924,this.state[6]=528734635,this.state[7]=1541459225,this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this},t.prototype.clean=function(){for(var e=0;e<this.buffer.length;e++)this.buffer[e]=0;for(e=0;e<this.temp.length;e++)this.temp[e]=0;this.reset()},t.prototype.update=function(e,t){if(void 0===t&&(t=e.length),this.finished)throw new Error("SHA256: can't update because hash was finished.");var n=0;if(this.bytesHashed+=t,this.bufferLength>0){for(;this.bufferLength<64&&t>0;)this.buffer[this.bufferLength++]=e[n++],t--;64===this.bufferLength&&(i(this.temp,this.state,this.buffer,0,64),this.bufferLength=0)}for(t>=64&&(n=i(this.temp,this.state,e,n,t),t%=64);t>0;)this.buffer[this.bufferLength++]=e[n++],t--;return this},t.prototype.finish=function(e){if(!this.finished){var t=this.bytesHashed,n=this.bufferLength,l=t/536870912|0,o=t<<3,c=t%64<56?64:128;this.buffer[n]=128;for(var a=n+1;a<c-8;a++)this.buffer[a]=0;this.buffer[c-8]=l>>>24&255,this.buffer[c-7]=l>>>16&255,this.buffer[c-6]=l>>>8&255,this.buffer[c-5]=l>>>0&255,this.buffer[c-4]=o>>>24&255,this.buffer[c-3]=o>>>16&255,this.buffer[c-2]=o>>>8&255,this.buffer[c-1]=o>>>0&255,i(this.temp,this.state,this.buffer,0,c),this.finished=!0}for(a=0;a<8;a++)e[4*a+0]=this.state[a]>>>24&255,e[4*a+1]=this.state[a]>>>16&255,e[4*a+2]=this.state[a]>>>8&255,e[4*a+3]=this.state[a]>>>0&255;return this},t.prototype.digest=function(){var e=new Uint8Array(this.digestLength);return this.finish(e),e},t.prototype._saveState=function(e){for(var t=0;t<this.state.length;t++)e[t]=this.state[t]},t.prototype._restoreState=function(e,t){for(var i=0;i<this.state.length;i++)this.state[i]=e[i];this.bytesHashed=t,this.finished=!1,this.bufferLength=0},t}();e.Hash=n;var l=function(){function e(e){this.inner=new n,this.outer=new n,this.blockSize=this.inner.blockSize,this.digestLength=this.inner.digestLength;var t=new Uint8Array(this.blockSize);if(e.length>this.blockSize)(new n).update(e).finish(t).clean();else for(var i=0;i<e.length;i++)t[i]=e[i];for(i=0;i<t.length;i++)t[i]^=54;this.inner.update(t);for(i=0;i<t.length;i++)t[i]^=106;this.outer.update(t),this.istate=new Uint32Array(8),this.ostate=new Uint32Array(8),this.inner._saveState(this.istate),this.outer._saveState(this.ostate);for(i=0;i<t.length;i++)t[i]=0}return e.prototype.reset=function(){return this.inner._restoreState(this.istate,this.inner.blockSize),this.outer._restoreState(this.ostate,this.outer.blockSize),this},e.prototype.clean=function(){for(var e=0;e<this.istate.length;e++)this.ostate[e]=this.istate[e]=0;this.inner.clean(),this.outer.clean()},e.prototype.update=function(e){return this.inner.update(e),this},e.prototype.finish=function(e){return this.outer.finished?this.outer.finish(e):(this.inner.finish(e),this.outer.update(e,this.digestLength).finish(e)),this},e.prototype.digest=function(){var e=new Uint8Array(this.digestLength);return this.finish(e),e},e}();function o(e){var t=(new n).update(e),i=t.digest();return t.clean(),i}function c(e,t){var i=new l(e).update(t),n=i.digest();return i.clean(),n}function a(e,t,i,n){var l=n[0];if(0===l)throw new Error("hkdf: cannot expand more");t.reset(),l>1&&t.update(e),i&&t.update(i),t.update(n),t.finish(e),n[0]++}e.HMAC=l,e.hash=o,e.default=o,e.hmac=c;var r=new Uint8Array(e.digestLength);function d(e,t,i,n){void 0===t&&(t=r),void 0===n&&(n=32);for(var o=new Uint8Array([1]),d=c(t,e),s=new l(d),u=new Uint8Array(s.digestLength),Z=u.length,h=new Uint8Array(n),b=0;b<n;b++)Z===u.length&&(a(u,s,i,o),Z=0),h[b]=u[Z++];return s.clean(),u.fill(0),o.fill(0),h}function s(e,t,i,n){for(var o=new l(e),c=o.digestLength,a=new Uint8Array(4),r=new Uint8Array(c),d=new Uint8Array(c),s=new Uint8Array(n),u=0;u*c<n;u++){var Z=u+1;a[0]=Z>>>24&255,a[1]=Z>>>16&255,a[2]=Z>>>8&255,a[3]=Z>>>0&255,o.reset(),o.update(t),o.update(a),o.finish(d);for(var h=0;h<c;h++)r[h]=d[h];for(h=2;h<=i;h++){o.reset(),o.update(d).finish(d);for(var b=0;b<c;b++)r[b]^=d[b]}for(h=0;h<c&&u*c+h<n;h++)s[u*c+h]=r[h]}for(u=0;u<c;u++)r[u]=d[u]=0;for(u=0;u<4;u++)a[u]=0;return o.clean(),s}e.hkdf=d,e.pbkdf2=s}(n);var l=n.default;for(var o in n)l[o]=n[o];e.exports=l}()}(pC);var gC=t(pC.exports),GC=crypto;const yC=e=>e instanceof CryptoKey,XC=new TextEncoder,VC=new TextDecoder;const WC=e=>{let t=e;t instanceof Uint8Array&&(t=VC.decode(t)),t=t.replace(/-/g,"+").replace(/_/g,"/").replace(/\s/g,"");try{return(e=>{const t=atob(e),i=new Uint8Array(t.length);for(let e=0;e<t.length;e++)i[e]=t.charCodeAt(e);return i})(t)}catch(e){throw new TypeError("The input to be decoded is not correctly encoded.")}};class CC extends Error{constructor(e){var t;super(e),this.code="ERR_JOSE_GENERIC",this.name=this.constructor.name,null===(t=Error.captureStackTrace)||void 0===t||t.call(Error,this,this.constructor)}static get code(){return"ERR_JOSE_GENERIC"}}class RC extends CC{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"unspecified",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"unspecified";super(e),this.code="ERR_JWT_CLAIM_VALIDATION_FAILED",this.claim=t,this.reason=i}static get code(){return"ERR_JWT_CLAIM_VALIDATION_FAILED"}}class vC extends CC{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"unspecified",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"unspecified";super(e),this.code="ERR_JWT_EXPIRED",this.claim=t,this.reason=i}static get code(){return"ERR_JWT_EXPIRED"}}class SC extends CC{constructor(){super(...arguments),this.code="ERR_JOSE_ALG_NOT_ALLOWED"}static get code(){return"ERR_JOSE_ALG_NOT_ALLOWED"}}class fC extends CC{constructor(){super(...arguments),this.code="ERR_JOSE_NOT_SUPPORTED"}static get code(){return"ERR_JOSE_NOT_SUPPORTED"}}class YC extends CC{constructor(){super(...arguments),this.code="ERR_JWS_INVALID"}static get code(){return"ERR_JWS_INVALID"}}class KC extends CC{constructor(){super(...arguments),this.code="ERR_JWT_INVALID"}static get code(){return"ERR_JWT_INVALID"}}class NC extends CC{constructor(){super(...arguments),this.code="ERR_JWKS_INVALID"}static get code(){return"ERR_JWKS_INVALID"}}class JC extends CC{constructor(){super(...arguments),this.code="ERR_JWKS_NO_MATCHING_KEY",this.message="no applicable key found in the JSON Web Key Set"}static get code(){return"ERR_JWKS_NO_MATCHING_KEY"}}class LC extends CC{constructor(){super(...arguments),this.code="ERR_JWKS_MULTIPLE_MATCHING_KEYS",this.message="multiple matching keys found in the JSON Web Key Set"}static get code(){return"ERR_JWKS_MULTIPLE_MATCHING_KEYS"}}class UC extends CC{constructor(){super(...arguments),this.code="ERR_JWS_SIGNATURE_VERIFICATION_FAILED",this.message="signature verification failed"}static get code(){return"ERR_JWS_SIGNATURE_VERIFICATION_FAILED"}}function kC(){return"function"==typeof WebSocketPair}function HC(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"algorithm.name";return new TypeError("CryptoKey does not support this operation, its ".concat(t," must be ").concat(e))}function AC(e,t){return e.name===t}function TC(e){return parseInt(e.name.slice(4),10)}function FC(e){switch(e){case"ES256":return"P-256";case"ES384":return"P-384";case"ES512":return"P-521";default:throw new Error("unreachable")}}function BC(e,t){if(t.length&&!t.some((t=>e.usages.includes(t)))){let e="CryptoKey does not support this operation, its usages must include ";if(t.length>2){const i=t.pop();e+="one of ".concat(t.join(", "),", or ").concat(i,".")}else 2===t.length?e+="one of ".concat(t[0]," or ").concat(t[1],"."):e+="".concat(t[0],".");throw new TypeError(e)}}var wC=function(e){let t="Key must be ";for(var i=arguments.length,n=new Array(i>1?i-1:0),l=1;l<i;l++)n[l-1]=arguments[l];if(n.length>2){const e=n.pop();t+="one of type ".concat(n.join(", "),", or ").concat(e,".")}else 2===n.length?t+="one of type ".concat(n[0]," or ").concat(n[1],"."):t+="of type ".concat(n[0],".");return null==e?t+=" Received ".concat(e):"function"==typeof e&&e.name?t+=" Received function ".concat(e.name):"object"==typeof e&&null!=e&&e.constructor&&e.constructor.name&&(t+=" Received an instance of ".concat(e.constructor.name)),t},xC=e=>yC(e);const zC=["CryptoKey"];function PC(e){if("object"!=typeof(t=e)||null===t||"[object Object]"!==Object.prototype.toString.call(e))return!1;var t;if(null===Object.getPrototypeOf(e))return!0;let i=e;for(;null!==Object.getPrototypeOf(i);)i=Object.getPrototypeOf(i);return Object.getPrototypeOf(e)===i}const jC=async e=>{var t,i;const{algorithm:n,keyUsages:l}=function(e){let t,i;switch(e.kty){case"oct":switch(e.alg){case"HS256":case"HS384":case"HS512":t={name:"HMAC",hash:"SHA-".concat(e.alg.slice(-3))},i=["sign","verify"];break;case"A128CBC-HS256":case"A192CBC-HS384":case"A256CBC-HS512":throw new fC("".concat(e.alg," keys cannot be imported as CryptoKey instances"));case"A128GCM":case"A192GCM":case"A256GCM":case"A128GCMKW":case"A192GCMKW":case"A256GCMKW":t={name:"AES-GCM"},i=["encrypt","decrypt"];break;case"A128KW":case"A192KW":case"A256KW":t={name:"AES-KW"},i=["wrapKey","unwrapKey"];break;case"PBES2-HS256+A128KW":case"PBES2-HS384+A192KW":case"PBES2-HS512+A256KW":t={name:"PBKDF2"},i=["deriveBits"];break;default:throw new fC('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case"RSA":switch(e.alg){case"PS256":case"PS384":case"PS512":t={name:"RSA-PSS",hash:"SHA-".concat(e.alg.slice(-3))},i=e.d?["sign"]:["verify"];break;case"RS256":case"RS384":case"RS512":t={name:"RSASSA-PKCS1-v1_5",hash:"SHA-".concat(e.alg.slice(-3))},i=e.d?["sign"]:["verify"];break;case"RSA-OAEP":case"RSA-OAEP-256":case"RSA-OAEP-384":case"RSA-OAEP-512":t={name:"RSA-OAEP",hash:"SHA-".concat(parseInt(e.alg.slice(-3),10)||1)},i=e.d?["decrypt","unwrapKey"]:["encrypt","wrapKey"];break;default:throw new fC('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case"EC":switch(e.alg){case"ES256":t={name:"ECDSA",namedCurve:"P-256"},i=e.d?["sign"]:["verify"];break;case"ES384":t={name:"ECDSA",namedCurve:"P-384"},i=e.d?["sign"]:["verify"];break;case"ES512":t={name:"ECDSA",namedCurve:"P-521"},i=e.d?["sign"]:["verify"];break;case"ECDH-ES":case"ECDH-ES+A128KW":case"ECDH-ES+A192KW":case"ECDH-ES+A256KW":t={name:"ECDH",namedCurve:e.crv},i=e.d?["deriveBits"]:[];break;default:throw new fC('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case kC()&&"OKP":if("EdDSA"!==e.alg)throw new fC('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');if("Ed25519"!==e.crv)throw new fC('Invalid or unsupported JWK "crv" (Subtype of Key Pair) Parameter value');t={name:"NODE-ED25519",namedCurve:"NODE-ED25519"},i=e.d?["sign"]:["verify"];break;default:throw new fC('Invalid or unsupported JWK "kty" (Key Type) Parameter value')}return{algorithm:t,keyUsages:i}}(e),o=[n,null!==(t=e.ext)&&void 0!==t&&t,null!==(i=e.key_ops)&&void 0!==i?i:l];if("PBKDF2"===n.name)return GC.subtle.importKey("raw",WC(e.k),...o);const c={...e};return delete c.alg,GC.subtle.importKey("jwk",c,...o)};const QC=(e,t,i)=>{e.startsWith("HS")||"dir"===e||e.startsWith("PBES2")||/^A\d{3}(?:GCM)?KW$/.test(e)?(e=>{if(!(e instanceof Uint8Array)){if(!xC(e))throw new TypeError(wC(e,...zC,"Uint8Array"));if("secret"!==e.type)throw new TypeError("".concat(zC.join(" or "),' instances for symmetric algorithms must be of type "secret"'))}})(t):((e,t)=>{if(!xC(e))throw new TypeError(wC(e,...zC));if("secret"===e.type)throw new TypeError("".concat(zC.join(" or "),' instances for asymmetric algorithms must not be of type "secret"'));if("sign"===t&&"public"===e.type)throw new TypeError("".concat(zC.join(" or "),' instances for asymmetric algorithm signing must be of type "private"'));if("decrypt"===t&&"public"===e.type)throw new TypeError("".concat(zC.join(" or "),' instances for asymmetric algorithm decryption must be of type "private"'));if(e.algorithm&&"verify"===t&&"private"===e.type)throw new TypeError("".concat(zC.join(" or "),' instances for asymmetric algorithm verifying must be of type "public"'));if(e.algorithm&&"encrypt"===t&&"private"===e.type)throw new TypeError("".concat(zC.join(" or "),' instances for asymmetric algorithm encryption must be of type "public"'))})(t,i)};function MC(e,t,i){if(yC(t))return function(e,t){switch(t){case"HS256":case"HS384":case"HS512":{if(!AC(e.algorithm,"HMAC"))throw HC("HMAC");const i=parseInt(t.slice(2),10);if(TC(e.algorithm.hash)!==i)throw HC("SHA-".concat(i),"algorithm.hash");break}case"RS256":case"RS384":case"RS512":{if(!AC(e.algorithm,"RSASSA-PKCS1-v1_5"))throw HC("RSASSA-PKCS1-v1_5");const i=parseInt(t.slice(2),10);if(TC(e.algorithm.hash)!==i)throw HC("SHA-".concat(i),"algorithm.hash");break}case"PS256":case"PS384":case"PS512":{if(!AC(e.algorithm,"RSA-PSS"))throw HC("RSA-PSS");const i=parseInt(t.slice(2),10);if(TC(e.algorithm.hash)!==i)throw HC("SHA-".concat(i),"algorithm.hash");break}case kC()&&"EdDSA":if(!AC(e.algorithm,"NODE-ED25519"))throw HC("NODE-ED25519");break;case"ES256":case"ES384":case"ES512":{if(!AC(e.algorithm,"ECDSA"))throw HC("ECDSA");const i=FC(t);if(e.algorithm.namedCurve!==i)throw HC(i,"algorithm.namedCurve");break}default:throw new TypeError("CryptoKey does not support this operation")}for(var i=arguments.length,n=new Array(i>2?i-2:0),l=2;l<i;l++)n[l-2]=arguments[l];BC(e,n)}(t,e,i),t;if(t instanceof Uint8Array){if(!e.startsWith("HS"))throw new TypeError(wC(t,...zC));return GC.subtle.importKey("raw",t,{hash:"SHA-".concat(e.slice(-3)),name:"HMAC"},!1,[i])}throw new TypeError(wC(t,...zC,"Uint8Array"))}const EC=async(e,t,i,n)=>{const l=await MC(e,t,"verify");((e,t)=>{if(e.startsWith("RS")||e.startsWith("PS")){const{modulusLength:i}=t.algorithm;if("number"!=typeof i||i<2048)throw new TypeError("".concat(e," requires key modulusLength to be 2048 bits or larger"))}})(e,l);const o=function(e,t){const i="SHA-".concat(e.slice(-3));switch(e){case"HS256":case"HS384":case"HS512":return{hash:i,name:"HMAC"};case"PS256":case"PS384":case"PS512":return{hash:i,name:"RSA-PSS",saltLength:e.slice(-3)>>3};case"RS256":case"RS384":case"RS512":return{hash:i,name:"RSASSA-PKCS1-v1_5"};case"ES256":case"ES384":case"ES512":return{hash:i,name:"ECDSA",namedCurve:t.namedCurve};case kC()&&"EdDSA":const{namedCurve:n}=t;return{name:n,namedCurve:n};default:throw new fC("alg ".concat(e," is not supported either by JOSE or your javascript runtime"))}}(e,l.algorithm);try{return await GC.subtle.verify(o,l,i,n)}catch(e){return!1}};async function DC(e,t,i){var n;if(!PC(e))throw new YC("Flattened JWS must be an object");if(void 0===e.protected&&void 0===e.header)throw new YC('Flattened JWS must have either of the "protected" or "header" members');if(void 0!==e.protected&&"string"!=typeof e.protected)throw new YC("JWS Protected Header incorrect type");if(void 0===e.payload)throw new YC("JWS Payload missing");if("string"!=typeof e.signature)throw new YC("JWS Signature missing or incorrect type");if(void 0!==e.header&&!PC(e.header))throw new YC("JWS Unprotected Header incorrect type");let l={};if(e.protected){const t=WC(e.protected);try{l=JSON.parse(VC.decode(t))}catch(e){throw new YC("JWS Protected Header is invalid")}}if(!function(){for(var e=arguments.length,t=new Array(e),i=0;i<e;i++)t[i]=arguments[i];const n=t.filter(Boolean);if(0===n.length||1===n.length)return!0;let l;for(const e of n){const t=Object.keys(e);if(l&&0!==l.size)for(const e of t){if(l.has(e))return!1;l.add(e)}else l=new Set(t)}return!0}(l,e.header))throw new YC("JWS Protected and JWS Unprotected Header Parameter names must be disjoint");const o={...l,...e.header},c=function(e,t,i,n,l){if(void 0!==l.crit&&void 0===n.crit)throw new e('"crit" (Critical) Header Parameter MUST be integrity protected');if(!n||void 0===n.crit)return new Set;if(!Array.isArray(n.crit)||0===n.crit.length||n.crit.some((e=>"string"!=typeof e||0===e.length)))throw new e('"crit" (Critical) Header Parameter MUST be an array of non-empty strings when present');let o;o=void 0!==i?new Map([...Object.entries(i),...t.entries()]):t;for(const t of n.crit){if(!o.has(t))throw new fC('Extension Header Parameter "'.concat(t,'" is not recognized'));if(void 0===l[t])throw new e('Extension Header Parameter "'.concat(t,'" is missing'));if(o.get(t)&&void 0===n[t])throw new e('Extension Header Parameter "'.concat(t,'" MUST be integrity protected'))}return new Set(n.crit)}(YC,new Map([["b64",!0]]),null==i?void 0:i.crit,l,o);let a=!0;if(c.has("b64")&&(a=l.b64,"boolean"!=typeof a))throw new YC('The "b64" (base64url-encode payload) Header Parameter must be a boolean');const{alg:r}=o;if("string"!=typeof r||!r)throw new YC('JWS "alg" (Algorithm) Header Parameter missing or invalid');const d=i&&((e,t)=>{if(void 0!==t&&(!Array.isArray(t)||t.some((e=>"string"!=typeof e))))throw new TypeError('"'.concat(e,'" option must be an array of strings'));if(t)return new Set(t)})("algorithms",i.algorithms);if(d&&!d.has(r))throw new SC('"alg" (Algorithm) Header Parameter not allowed');if(a){if("string"!=typeof e.payload)throw new YC("JWS Payload must be a string")}else if("string"!=typeof e.payload&&!(e.payload instanceof Uint8Array))throw new YC("JWS Payload must be a string or an Uint8Array instance");let s=!1;"function"==typeof t&&(t=await t(l,e),s=!0),QC(r,t,"verify");const u=function(){for(var e=arguments.length,t=new Array(e),i=0;i<e;i++)t[i]=arguments[i];const n=t.reduce(((e,t)=>{let{length:i}=t;return e+i}),0),l=new Uint8Array(n);let o=0;return t.forEach((e=>{l.set(e,o),o+=e.length})),l}(XC.encode(null!==(n=e.protected)&&void 0!==n?n:""),XC.encode("."),"string"==typeof e.payload?XC.encode(e.payload):e.payload),Z=WC(e.signature);if(!await EC(r,t,Z,u))throw new UC;let h;h=a?WC(e.payload):"string"==typeof e.payload?XC.encode(e.payload):e.payload;const b={payload:h};return void 0!==e.protected&&(b.protectedHeader=l),void 0!==e.header&&(b.unprotectedHeader=e.header),s?{...b,key:t}:b}var OC=e=>Math.floor(e.getTime()/1e3);const _C=/^(\d+|\d+\.\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)$/i;var qC=e=>{const t=_C.exec(e);if(!t)throw new TypeError("Invalid time period format");const i=parseFloat(t[1]);switch(t[2].toLowerCase()){case"sec":case"secs":case"second":case"seconds":case"s":return Math.round(i);case"minute":case"minutes":case"min":case"mins":case"m":return Math.round(60*i);case"hour":case"hours":case"hr":case"hrs":case"h":return Math.round(3600*i);case"day":case"days":case"d":return Math.round(86400*i);case"week":case"weeks":case"w":return Math.round(604800*i);default:return Math.round(31557600*i)}};const $C=e=>e.toLowerCase().replace(/^application\//,""),eR=(e,t)=>"string"==typeof e?t.includes(e):!!Array.isArray(e)&&t.some(Set.prototype.has.bind(new Set(e)));async function tR(e,t,i){var n;const l=await async function(e,t,i){if(e instanceof Uint8Array&&(e=VC.decode(e)),"string"!=typeof e)throw new YC("Compact JWS must be a string or Uint8Array");const{0:n,1:l,2:o,length:c}=e.split(".");if(3!==c)throw new YC("Invalid Compact JWS");const a=await DC({payload:l,protected:n,signature:o},t,i),r={payload:a.payload,protectedHeader:a.protectedHeader};return"function"==typeof t?{...r,key:a.key}:r}(e,t,i);if((null===(n=l.protectedHeader.crit)||void 0===n?void 0:n.includes("b64"))&&!1===l.protectedHeader.b64)throw new KC("JWTs MUST NOT use unencoded payload");const o=function(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{typ:n}=i;if(n&&("string"!=typeof e.typ||$C(e.typ)!==$C(n)))throw new RC('unexpected "typ" JWT header value',"typ","check_failed");let l;try{l=JSON.parse(VC.decode(t))}catch(e){}if(!PC(l))throw new KC("JWT Claims Set must be a top-level JSON object");const{issuer:o}=i;if(o&&!(Array.isArray(o)?o:[o]).includes(l.iss))throw new RC('unexpected "iss" claim value',"iss","check_failed");const{subject:c}=i;if(c&&l.sub!==c)throw new RC('unexpected "sub" claim value',"sub","check_failed");const{audience:a}=i;if(a&&!eR(l.aud,"string"==typeof a?[a]:a))throw new RC('unexpected "aud" claim value',"aud","check_failed");let r;switch(typeof i.clockTolerance){case"string":r=qC(i.clockTolerance);break;case"number":r=i.clockTolerance;break;case"undefined":r=0;break;default:throw new TypeError("Invalid clockTolerance option type")}const{currentDate:d}=i,s=OC(d||new Date);if((void 0!==l.iat||i.maxTokenAge)&&"number"!=typeof l.iat)throw new RC('"iat" claim must be a number',"iat","invalid");if(void 0!==l.nbf){if("number"!=typeof l.nbf)throw new RC('"nbf" claim must be a number',"nbf","invalid");if(l.nbf>s+r)throw new RC('"nbf" claim timestamp check failed',"nbf","check_failed")}if(void 0!==l.exp){if("number"!=typeof l.exp)throw new RC('"exp" claim must be a number',"exp","invalid");if(l.exp<=s-r)throw new vC('"exp" claim timestamp check failed',"exp","check_failed")}if(i.maxTokenAge){const e=s-l.iat;if(e-r>("number"==typeof i.maxTokenAge?i.maxTokenAge:qC(i.maxTokenAge)))throw new vC('"iat" claim timestamp check failed (too far in the past)',"iat","check_failed");if(e<0-r)throw new RC('"iat" claim timestamp check failed (it should be in the past)',"iat","check_failed")}return l}(l.protectedHeader,l.payload,i),c={payload:o,protectedHeader:l.protectedHeader};return"function"==typeof t?{...c,key:l.key}:c}function iR(e){return PC(e)}class nR{constructor(e){if(this._cached=new WeakMap,!function(e){return e&&"object"==typeof e&&Array.isArray(e.keys)&&e.keys.every(iR)}(e))throw new NC("JSON Web Key Set malformed");var t;this._jwks=(t=e,"function"==typeof structuredClone?structuredClone(t):JSON.parse(JSON.stringify(t)))}async getKey(e,t){const{alg:i,kid:n}={...e,...t.header},l=function(e){switch("string"==typeof e&&e.slice(0,2)){case"RS":case"PS":return"RSA";case"ES":return"EC";case"Ed":return"OKP";default:throw new fC('Unsupported "alg" value for a JSON Web Key Set')}}(i),o=this._jwks.keys.filter((e=>{let t=l===e.kty;if(t&&"string"==typeof n&&(t=n===e.kid),t&&"string"==typeof e.alg&&(t=i===e.alg),t&&"string"==typeof e.use&&(t="sig"===e.use),t&&Array.isArray(e.key_ops)&&(t=e.key_ops.includes("verify")),t&&"EdDSA"===i&&(t="Ed25519"===e.crv||"Ed448"===e.crv),t)switch(i){case"ES256":t="P-256"===e.crv;break;case"ES256K":t="secp256k1"===e.crv;break;case"ES384":t="P-384"===e.crv;break;case"ES512":t="P-521"===e.crv}return t})),{0:c,length:a}=o;if(0===a)throw new JC;if(1!==a)throw new LC;const r=this._cached.get(c)||this._cached.set(c,{}).get(c);if(void 0===r[i]){const e=await async function(e,t,i){if(!PC(e))throw new TypeError("JWK must be an object");if(t||(t=e.alg),"string"!=typeof t||!t)throw new TypeError('"alg" argument is required when "jwk.alg" is not present');switch(e.kty){case"oct":if("string"!=typeof e.k||!e.k)throw new TypeError('missing "k" (Key Value) Parameter value');return null!=i||(i=!0!==e.ext),i?jC({...e,alg:t,ext:!1}):WC(e.k);case"RSA":if(void 0!==e.oth)throw new fC('RSA JWK "oth" (Other Primes Info) Parameter value is not supported');case"EC":case"OKP":return jC({...e,alg:t});default:throw new fC('Unsupported "kty" (Key Type) Parameter value')}}({...c,ext:!0},i);if(e instanceof Uint8Array||"public"!==e.type)throw new NC("JSON Web Key Set members must be public keys");r[i]=e}return r[i]}}var lR={exports:{}},oR={exports:{}},cR=i(cC);
430
+ */updateConfig(e){return dy(this,void 0,void 0,(function*(){yield this._authenticationCore.updateConfig(e)}))}static clearUserSessionData(e){return dy(this,void 0,void 0,(function*(){yield this._authenticationCore.clearUserSessionData(e)}))}}function Hy(e,t,i){var n=void 0===t?null:t,l=function(e,t){var i=atob(e);if(t){for(var n=new Uint8Array(i.length),l=0,o=i.length;l<o;++l)n[l]=i.charCodeAt(l);return String.fromCharCode.apply(null,new Uint16Array(n.buffer))}return i}(e,void 0!==i&&i),o=l.indexOf("\n",10)+1,c=l.substring(o)+(n?"//# sourceMappingURL="+n:""),a=new Blob([c],{type:"application/javascript"});return URL.createObjectURL(a)}var Ay,Ty,By,Fy,wy=(Ay="Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwp2YXIgd29ya2VyX2NvZGU9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZShlLHQsbixyKXtyZXR1cm4gbmV3KG58fChuPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBzKGUpe3RyeXtjKHIubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYShlKXt0cnl7YyhyLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBjKGUpe3ZhciB0O2UuZG9uZT9pKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIG4/dDpuZXcgbigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihzLGEpfWMoKHI9ci5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX1mdW5jdGlvbiB0KGUsdCxuLHIpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIHMoZSl7dHJ5e2Moci5uZXh0KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBhKGUpe3RyeXtjKHIudGhyb3coZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIGMoZSl7dmFyIHQ7ZS5kb25lP2koZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKHMsYSl9Yygocj1yLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfXZhciBuOyFmdW5jdGlvbihlKXtlLmZvcm1Qb3N0PSJmb3JtX3Bvc3QiLGUucXVlcnk9InF1ZXJ5IixlLmRpcmVjdD0iZGlyZWN0In0obnx8KG49e30pKTt2YXIgcjshZnVuY3Rpb24oZSl7ZS5Db25maWdEYXRhPSJjb25maWdfZGF0YSIsZS5PSURDUHJvdmlkZXJNZXRhRGF0YT0ib2lkY19wcm92aWRlcl9tZXRhX2RhdGEiLGUuU2Vzc2lvbkRhdGE9InNlc3Npb25fZGF0YSIsZS5UZW1wb3JhcnlEYXRhPSJ0ZW1wb3JhcnlfZGF0YSJ9KHJ8fChyPXt9KSk7Y29uc3QgaT0icmVmcmVzaF90b2tlbl90aW1lciIsbz1bIlJTMjU2IiwiUlM1MTIiLCJSUzM4NCIsIlBTMjU2Il0scz0ic2lnbl9vdXRfdXJsIjt2YXIgYTshZnVuY3Rpb24oZSl7ZS5JbmNsdWRlPSJpbmNsdWRlIixlLlNhbWVPcmlnaW49InNhbWUtb3JpZ2luIixlLk9taXQ9Im9taXQifShhfHwoYT17fSkpO2NsYXNzIGN7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMubWVzc2FnZT1uLHRoaXMubmFtZT10LHRoaXMuY29kZT1lLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLG5ldy50YXJnZXQucHJvdG90eXBlKX19Y2xhc3MgdXtjb25zdHJ1Y3Rvcigpe31zdGF0aWMgZmlsdGVyQ2xhaW1zRnJvbUlEVG9rZW5QYXlsb2FkKGUpe2NvbnN0IHQ9T2JqZWN0LmFzc2lnbih7fSxlKTtudWxsPT10fHxkZWxldGUgdC5pc3MsbnVsbD09dHx8ZGVsZXRlIHQuYXVkLG51bGw9PXR8fGRlbGV0ZSB0LmV4cCxudWxsPT10fHxkZWxldGUgdC5pYXQsbnVsbD09dHx8ZGVsZXRlIHQuYWNyLG51bGw9PXR8fGRlbGV0ZSB0LmFtcixudWxsPT10fHxkZWxldGUgdC5henAsbnVsbD09dHx8ZGVsZXRlIHQuYXV0aF90aW1lLG51bGw9PXR8fGRlbGV0ZSB0Lm5vbmNlLG51bGw9PXR8fGRlbGV0ZSB0LmNfaGFzaCxudWxsPT10fHxkZWxldGUgdC5hdF9oYXNoLG51bGw9PXR8fGRlbGV0ZSB0Lm5iZixudWxsPT10fHxkZWxldGUgdC5pc2ssbnVsbD09dHx8ZGVsZXRlIHQuc2lkO2NvbnN0IG49e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKGU9PntsZXRbdCxyXT1lO2NvbnN0IGk9dC5zcGxpdCgiXyIpLm1hcCgoKGUsdCk9PjA9PT10P2U6W2VbMF0udG9VcHBlckNhc2UoKSwuLi5lLnNsaWNlKDEpXS5qb2luKCIiKSkpLmpvaW4oIiIpO25baV09cn0pKSxufXN0YXRpYyBnZXRUb2tlblJlcXVlc3RIZWFkZXJzKCl7cmV0dXJue0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiIsIkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCJ9fXN0YXRpYyBnZW5lcmF0ZVN0YXRlUGFyYW1Gb3JSZXF1ZXN0Q29ycmVsYXRpb24oZSx0KXtjb25zdCBuPXBhcnNlSW50KGUuc3BsaXQoIiMiKVsxXSk7cmV0dXJuIHQ/IiIuY29uY2F0KHQsIl9yZXF1ZXN0XyIpLmNvbmNhdChuKToicmVxdWVzdF8iLmNvbmNhdChuKX1zdGF0aWMgZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShlKXtyZXR1cm4icGtjZV9jb2RlX3ZlcmlmaWVyIyIuY29uY2F0KHBhcnNlSW50KGUuc3BsaXQoInJlcXVlc3RfIilbMV0pKX19dS5nZXRUZW5hbnREb21haW5Gcm9tSWRUb2tlblBheWxvYWQ9ZnVuY3Rpb24oZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJAIjtjb25zdCBuPWUuc3ViLnNwbGl0KHQpO3JldHVybiBuLmxlbmd0aD4yP25bbi5sZW5ndGgtMV06IiJ9O2NsYXNzIGx7Y29uc3RydWN0b3IoZSxuKXt0aGlzLl9kYXRhTGF5ZXI9ZSx0aGlzLl9jb25maWc9KCk9PnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKX0pKSx0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YT0oKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKX0pKSx0aGlzLl9jcnlwdG9IZWxwZXI9bn1yZXNvbHZlRW5kcG9pbnRzKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD17fSxuPXlpZWxkIHRoaXMuX2NvbmZpZygpO3JldHVybiBuLmVuZHBvaW50cyYmT2JqZWN0LmtleXMobi5lbmRwb2ludHMpLmZvckVhY2goKGU9Pntjb25zdCByPWUucmVwbGFjZSgvW0EtWl0vZywoZT0+Il8iLmNvbmNhdChlLnRvTG93ZXJDYXNlKCkpKSk7dFtyXT0obnVsbD09bj92b2lkIDA6bi5lbmRwb2ludHMpP24uZW5kcG9pbnRzW2VdOiIifSkpLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx0KX0pKX1yZXNvbHZlRW5kcG9pbnRzRXhwbGljaXRseSgpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT17fSx0PXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCF0LmVuZHBvaW50c3x8IVsiYXV0aG9yaXphdGlvbl9lbmRwb2ludCIsImVuZF9zZXNzaW9uX2VuZHBvaW50Iiwiandrc191cmkiLCJjaGVja19zZXNzaW9uX2lmcmFtZSIsInJldm9jYXRpb25fZW5kcG9pbnQiLCJ0b2tlbl9lbmRwb2ludCIsImlzc3VlciIsInVzZXJpbmZvX2VuZHBvaW50Il0uZXZlcnkoKGU9PiEhdC5lbmRwb2ludHMmJk9iamVjdC5rZXlzKHQuZW5kcG9pbnRzKS5zb21lKCh0PT50LnJlcGxhY2UoL1tBLVpdL2csKGU9PiJfIi5jb25jYXQoZS50b0xvd2VyQ2FzZSgpKSkpPT09ZSkpKSkpdGhyb3cgbmV3IGMoIkpTLUFVVEhfSEVMUEVSLVJFRS1ORjAxIiwiUmVxdWlyZWQgZW5kcG9pbnRzIG1pc3NpbmciLCJTb21lIG9yIGFsbCBvZiB0aGUgcmVxdWlyZWQgZW5kcG9pbnRzIGFyZSBtaXNzaW5nIGluIHRoZSBvYmplY3QgcGFzc2VkIHRvIHRoZSBgZW5kcG9pbnRzYCBhdHRyaWJ1dGUgb2YgdGhlYEF1dGhDb25maWdgIG9iamVjdC4iKTtyZXR1cm4gdC5lbmRwb2ludHMmJk9iamVjdC5rZXlzKHQuZW5kcG9pbnRzKS5mb3JFYWNoKChuPT57Y29uc3Qgcj1uLnJlcGxhY2UoL1tBLVpdL2csKGU9PiJfIi5jb25jYXQoZS50b0xvd2VyQ2FzZSgpKSkpO2Vbcl09KG51bGw9PXQ/dm9pZCAwOnQuZW5kcG9pbnRzKT90LmVuZHBvaW50c1tuXToiIn0pKSxPYmplY3QuYXNzaWduKHt9LGUpfSkpfXJlc29sdmVFbmRwb2ludHNCeUJhc2VVUkwoKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9e30sdD15aWVsZCB0aGlzLl9jb25maWcoKSxuPXQuYmFzZVVybDtpZighbil0aHJvdyBuZXcgYygiSlMtQVVUSF9IRUxQRVJfUkVCTy1ORjAxIiwiQmFzZSBVUkwgbm90IGRlZmluZWQuIiwiQmFzZSBVUkwgaXMgbm90IGRlZmluZWQgaW4gQXV0aENsaWVudCBjb25maWcuIik7dC5lbmRwb2ludHMmJk9iamVjdC5rZXlzKHQuZW5kcG9pbnRzKS5mb3JFYWNoKChuPT57Y29uc3Qgcj1uLnJlcGxhY2UoL1tBLVpdL2csKGU9PiJfIi5jb25jYXQoZS50b0xvd2VyQ2FzZSgpKSkpO2Vbcl09KG51bGw9PXQ/dm9pZCAwOnQuZW5kcG9pbnRzKT90LmVuZHBvaW50c1tuXToiIn0pKTtjb25zdCByPXthdXRob3JpemF0aW9uX2VuZHBvaW50OiIiLmNvbmNhdChuKS5jb25jYXQoIi9vYXV0aDIvYXV0aG9yaXplIiksZW5kX3Nlc3Npb25fZW5kcG9pbnQ6IiIuY29uY2F0KG4pLmNvbmNhdCgiL29pZGMvbG9nb3V0IiksaXNzdWVyOiIiLmNvbmNhdChuKS5jb25jYXQoIi9vYXV0aDIvdG9rZW4iKSxqd2tzX3VyaToiIi5jb25jYXQobikuY29uY2F0KCIvb2F1dGgyL2p3a3MiKSxjaGVja19zZXNzaW9uX2lmcmFtZToiIi5jb25jYXQobikuY29uY2F0KCIvb2lkYy9jaGVja3Nlc3Npb24iKSxyZXZvY2F0aW9uX2VuZHBvaW50OiIiLmNvbmNhdChuKS5jb25jYXQoIi9vYXV0aDIvcmV2b2tlIiksdG9rZW5fZW5kcG9pbnQ6IiIuY29uY2F0KG4pLmNvbmNhdCgiL29hdXRoMi90b2tlbiIpLHVzZXJpbmZvX2VuZHBvaW50OiIiLmNvbmNhdChuKS5jb25jYXQoIi9vYXV0aDIvdXNlcmluZm8iKX07cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxyKSxlKX0pKX12YWxpZGF0ZUlkVG9rZW4oZSl7dmFyIG47cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PSh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKSkuandrc191cmkscj15aWVsZCB0aGlzLl9jb25maWcoKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlNfQVVUSF9IRUxQRVItVklULU5GMDEiLCJKV0tTIGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyBKV0tTIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIEpXS1MgZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7bGV0IGk7dHJ5e2k9eWllbGQgZmV0Y2godCx7Y3JlZGVudGlhbHM6ci5zZW5kQ29va2llc0luUmVxdWVzdHM/YS5JbmNsdWRlOmEuU2FtZU9yaWdpbn0pfWNhdGNoKHQpe3Rocm93IG5ldyBjKCJKUy1BVVRIX0hFTFBFUi1WSVQtTkUwMiIsIlJlcXVlc3QgdG8gandrcyBlbmRwb2ludCBmYWlsZWQuIixudWxsIT10P3Q6IlRoZSByZXF1ZXN0IHNlbnQgdG8gZ2V0IHRoZSBqd2tzIGZyb20gdGhlIHNlcnZlciBmYWlsZWQuIil9aWYoMjAwIT09aS5zdGF0dXN8fCFpLm9rKXRocm93IG5ldyBjKCJKUy1BVVRIX0hFTFBFUi1WSVQtSEUwMyIsIkludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciBqd2tzIHJlcXVlc3QgKCIuY29uY2F0KGkuc3RhdHVzVGV4dCwiKS4iKSx5aWVsZCBpLmpzb24oKSk7Y29uc3Qgbz0oeWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSkuaXNzdWVyLHtrZXlzOnN9PXlpZWxkIGkuanNvbigpLHU9eWllbGQgdGhpcy5fY3J5cHRvSGVscGVyLmdldEpXS0ZvclRoZUlkVG9rZW4oZS5zcGxpdCgiLiIpWzBdLHMpO3JldHVybiB0aGlzLl9jcnlwdG9IZWxwZXIuaXNWYWxpZElkVG9rZW4oZSx1LCh5aWVsZCB0aGlzLl9jb25maWcoKSkuY2xpZW50SUQsbnVsbCE9bz9vOiIiLHRoaXMuX2NyeXB0b0hlbHBlci5kZWNvZGVJRFRva2VuKGUpLnN1YiwoeWllbGQgdGhpcy5fY29uZmlnKCkpLmNsb2NrVG9sZXJhbmNlLG51bGw9PT0obj0oeWllbGQgdGhpcy5fY29uZmlnKCkpLnZhbGlkYXRlSURUb2tlbklzc3Vlcil8fHZvaWQgMD09PW58fG4pfSkpfWdldEF1dGhlbnRpY2F0ZWRVc2VySW5mbyhlKXt2YXIgdCxuLHIsaTtjb25zdCBvPXRoaXMuX2NyeXB0b0hlbHBlci5kZWNvZGVJRFRva2VuKGUpLHM9dS5nZXRUZW5hbnREb21haW5Gcm9tSWRUb2tlblBheWxvYWQobyksYT1udWxsIT09KHQ9bnVsbD09bz92b2lkIDA6by51c2VybmFtZSkmJnZvaWQgMCE9PXQ/dDoiIixjPW51bGwhPT0obj1vLmdpdmVuX25hbWUpJiZ2b2lkIDAhPT1uP246IiIsbD1udWxsIT09KHI9by5mYW1pbHlfbmFtZSkmJnZvaWQgMCE9PXI/cjoiIixkPWMmJmw/IiIuY29uY2F0KGMsIiAiKS5jb25jYXQobCk6Y3x8bHx8IiIsaD1udWxsIT09KGk9by5wcmVmZXJyZWRfdXNlcm5hbWUpJiZ2b2lkIDAhPT1pP2k6ZDtyZXR1cm4gT2JqZWN0LmFzc2lnbih7ZGlzcGxheU5hbWU6aCx0ZW5hbnREb21haW46cyx1c2VybmFtZTphfSx1LmZpbHRlckNsYWltc0Zyb21JRFRva2VuUGF5bG9hZChvKSl9cmVwbGFjZUN1c3RvbUdyYW50VGVtcGxhdGVUYWdzKGUsbil7dmFyIHI7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtsZXQgdD0ib3BlbmlkIjtjb25zdCBpPXlpZWxkIHRoaXMuX2NvbmZpZygpLG89eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKG4pO3JldHVybiBpLnNjb3BlJiZpLnNjb3BlLmxlbmd0aD4wJiYoaS5zY29wZS5pbmNsdWRlcygib3BlbmlkIil8fGkuc2NvcGUucHVzaCgib3BlbmlkIiksdD1pLnNjb3BlLmpvaW4oIiAiKSksZS5yZXBsYWNlKCJ7e3Rva2VufX0iLG8uYWNjZXNzX3Rva2VuKS5yZXBsYWNlKCJ7e3VzZXJuYW1lfX0iLHRoaXMuZ2V0QXV0aGVudGljYXRlZFVzZXJJbmZvKG8uaWRfdG9rZW4pLnVzZXJuYW1lKS5yZXBsYWNlKCJ7e3Njb3BlfX0iLHQpLnJlcGxhY2UoInt7Y2xpZW50SUR9fSIsaS5jbGllbnRJRCkucmVwbGFjZSgie3tjbGllbnRTZWNyZXR9fSIsbnVsbCE9PShyPWkuY2xpZW50U2VjcmV0KSYmdm9pZCAwIT09cj9yOiIiKX0pKX1jbGVhclVzZXJTZXNzaW9uRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5yZW1vdmVUZW1wb3JhcnlEYXRhKGUpLHlpZWxkIHRoaXMuX2RhdGFMYXllci5yZW1vdmVTZXNzaW9uRGF0YShlKX0pKX1oYW5kbGVUb2tlblJlc3BvbnNlKGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZigyMDAhPT1lLnN0YXR1c3x8IWUub2spdGhyb3cgbmV3IGMoIkpTLUFVVEhfSEVMUEVSLUhUUi1ORTAxIiwiSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIHRva2VuIHJlcXVlc3QgKCIuY29uY2F0KGUuc3RhdHVzVGV4dCwiKS4iKSx5aWVsZCBlLmpzb24oKSk7Y29uc3Qgcj15aWVsZCBlLmpzb24oKTtpZihyLmNyZWF0ZWRfYXQ9KG5ldyBEYXRlKS5nZXRUaW1lKCksKHlpZWxkIHRoaXMuX2NvbmZpZygpKS52YWxpZGF0ZUlEVG9rZW4pcmV0dXJuIHRoaXMudmFsaWRhdGVJZFRva2VuKHIuaWRfdG9rZW4pLnRoZW4oKCgpPT50KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFNlc3Npb25EYXRhKHIsbik7Y29uc3QgZT17YWNjZXNzVG9rZW46ci5hY2Nlc3NfdG9rZW4sY3JlYXRlZEF0OnIuY3JlYXRlZF9hdCxleHBpcmVzSW46ci5leHBpcmVzX2luLGlkVG9rZW46ci5pZF90b2tlbixyZWZyZXNoVG9rZW46ci5yZWZyZXNoX3Rva2VuLHNjb3BlOnIuc2NvcGUsdG9rZW5UeXBlOnIudG9rZW5fdHlwZX07cmV0dXJuIFByb21pc2UucmVzb2x2ZShlKX0pKSkpO3tjb25zdCBlPXthY2Nlc3NUb2tlbjpyLmFjY2Vzc190b2tlbixjcmVhdGVkQXQ6ci5jcmVhdGVkX2F0LGV4cGlyZXNJbjpyLmV4cGlyZXNfaW4saWRUb2tlbjpyLmlkX3Rva2VuLHJlZnJlc2hUb2tlbjpyLnJlZnJlc2hfdG9rZW4sc2NvcGU6ci5zY29wZSx0b2tlblR5cGU6ci50b2tlbl90eXBlfTtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFNlc3Npb25EYXRhKHIsbiksUHJvbWlzZS5yZXNvbHZlKGUpfX0pKX1nZW5lcmF0ZVBLQ0VLZXkoZSl7dmFyIG47cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhKGUpLHI9W107T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZT0+e2Uuc3RhcnRzV2l0aCgicGtjZV9jb2RlX3ZlcmlmaWVyIikmJnIucHVzaChlKX0pKTtjb25zdCBpPXIuc29ydCgpLnBvcCgpO3JldHVybiJwa2NlX2NvZGVfdmVyaWZpZXIjIi5jb25jYXQocGFyc2VJbnQobnVsbCE9PShuPW51bGw9PWk/dm9pZCAwOmkuc3BsaXQoIiMiKVsxXSkmJnZvaWQgMCE9PW4/bjoiLTEiKSsxKX0pKX19Y2xhc3MgZHtjb25zdHJ1Y3RvcihlKXt0aGlzLl9jcnlwdG9VdGlscz1lfWdldENvZGVWZXJpZmllcigpe3JldHVybiB0aGlzLl9jcnlwdG9VdGlscy5iYXNlNjRVUkxFbmNvZGUodGhpcy5fY3J5cHRvVXRpbHMuZ2VuZXJhdGVSYW5kb21CeXRlcygzMikpfWdldENvZGVDaGFsbGVuZ2UoZSl7cmV0dXJuIHRoaXMuX2NyeXB0b1V0aWxzLmJhc2U2NFVSTEVuY29kZSh0aGlzLl9jcnlwdG9VdGlscy5oYXNoU2hhMjU2KGUpKX1nZXRKV0tGb3JUaGVJZFRva2VuKGUsdCl7Y29uc3Qgbj1KU09OLnBhcnNlKHRoaXMuX2NyeXB0b1V0aWxzLmJhc2U2NFVSTERlY29kZShlKSk7Zm9yKGNvbnN0IGUgb2YgdClpZihuLmtpZD09PWUua2lkKXJldHVybiBlO3Rocm93IG5ldyBjKCJKUy1DUllQVE9fVVRJTC1HSkZUSVQtSVYwMSIsImtpZCBub3QgZm91bmQuIiwiRmFpbGVkIHRvIGZpbmQgdGhlICdraWQnIHNwZWNpZmllZCBpbiB0aGUgaWRfdG9rZW4uICdraWQnIGZvdW5kIGluIHRoZSBoZWFkZXIgOiAiK24ua2lkKyIsIEV4cGVjdGVkIHZhbHVlczogIit0Lm1hcCgoZT0+ZS5raWQpKS5qb2luKCIsICIpKX1pc1ZhbGlkSWRUb2tlbihlLHQsbixyLGkscyxhKXtyZXR1cm4gdGhpcy5fY3J5cHRvVXRpbHMudmVyaWZ5Snd0KGUsdCxvLG4scixpLHMsYSkudGhlbigoZT0+ZT9Qcm9taXNlLnJlc29sdmUoITApOlByb21pc2UucmVqZWN0KG5ldyBjKCJKUy1DUllQVE9fSEVMUEVSLUlWSVQtSVYwMSIsIkludmFsaWQgSUQgdG9rZW4uIiwiSUQgdG9rZW4gdmFsaWRhdGlvbiByZXR1cm5lZCBmYWxzZSIpKSkpfWRlY29kZUlEVG9rZW4oZSl7dHJ5e2NvbnN0IHQ9dGhpcy5fY3J5cHRvVXRpbHMuYmFzZTY0VVJMRGVjb2RlKGUuc3BsaXQoIi4iKVsxXSk7cmV0dXJuIEpTT04ucGFyc2UodCl9Y2F0Y2goZSl7dGhyb3cgbmV3IGMoIkpTLUNSWVBUT19VVElMLURJVC1JVjAxIiwiRGVjb2RpbmcgSUQgdG9rZW4gZmFpbGVkLiIsZSl9fX1jbGFzcyBoe2NvbnN0cnVjdG9yKGUsbil7dGhpcy5fY3J5cHRvVXRpbHM9bix0aGlzLl9jcnlwdG9IZWxwZXI9bmV3IGQobiksdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXI9bmV3IGwoZSx0aGlzLl9jcnlwdG9IZWxwZXIpLHRoaXMuX2RhdGFMYXllcj1lLHRoaXMuX2NvbmZpZz0oKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpfSkpLHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhPSgpPT50KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpfSkpfWdldEF1dGhvcml6YXRpb25VUkxQYXJhbXMoZSxuKXt2YXIgcixpLG87cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX2NvbmZpZygpLHM9bmV3IE1hcDtzLnNldCgicmVzcG9uc2VfdHlwZSIsImNvZGUiKSxzLnNldCgiY2xpZW50X2lkIix0LmNsaWVudElEKSx0LmNsaWVudFNlY3JldCYmdC5jbGllbnRTZWNyZXQudHJpbSgpLmxlbmd0aD4wJiZzLnNldCgiY2xpZW50X3NlY3JldCIsdC5jbGllbnRTZWNyZXQpO2xldCBhPSJvcGVuaWQiO3Quc2NvcGUmJnQuc2NvcGUubGVuZ3RoPjAmJih0LnNjb3BlLmluY2x1ZGVzKCJvcGVuaWQiKXx8dC5zY29wZS5wdXNoKCJvcGVuaWQiKSxhPXQuc2NvcGUuam9pbigiICIpKSxzLnNldCgic2NvcGUiLGEpLHMuc2V0KCJyZWRpcmVjdF91cmkiLHQuc2lnbkluUmVkaXJlY3RVUkwpLHQucmVzcG9uc2VNb2RlJiZzLnNldCgicmVzcG9uc2VfbW9kZSIsdC5yZXNwb25zZU1vZGUpO2NvbnN0IGM9eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuZ2VuZXJhdGVQS0NFS2V5KG4pO2lmKHQuZW5hYmxlUEtDRSl7Y29uc3QgZT1udWxsPT09KHI9dGhpcy5fY3J5cHRvSGVscGVyKXx8dm9pZCAwPT09cj92b2lkIDA6ci5nZXRDb2RlVmVyaWZpZXIoKSx0PW51bGw9PT0oaT10aGlzLl9jcnlwdG9IZWxwZXIpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLmdldENvZGVDaGFsbGVuZ2UoZSk7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoYyxlLG4pLHMuc2V0KCJjb2RlX2NoYWxsZW5nZV9tZXRob2QiLCJTMjU2Iikscy5zZXQoImNvZGVfY2hhbGxlbmdlIix0KX10LnByb21wdCYmcy5zZXQoInByb21wdCIsdC5wcm9tcHQpO2NvbnN0IGw9ZTtpZihsKWZvcihjb25zdFtlLHRdb2YgT2JqZWN0LmVudHJpZXMobCkpIiIhPWUmJiIiIT10JiYic3RhdGUiIT09ZSYmcy5zZXQoZSx0LnRvU3RyaW5nKCkpO3JldHVybiBzLnNldCgic3RhdGUiLHUuZ2VuZXJhdGVTdGF0ZVBhcmFtRm9yUmVxdWVzdENvcnJlbGF0aW9uKGMsbD9udWxsPT09KG89bC5zdGF0ZSl8fHZvaWQgMD09PW8/dm9pZCAwOm8udG9TdHJpbmcoKToiIikpLHN9KSl9Z2V0QXV0aG9yaXphdGlvblVSTChlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIoImF1dGhvcml6YXRpb25fZW5kcG9pbnQiKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLUdBVS1ORjAxIiwiTm8gYXV0aG9yaXphdGlvbiBlbmRwb2ludCBmb3VuZC4iLCJObyBhdXRob3JpemF0aW9uIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgZnJvbSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgYXV0aG9yaXphdGlvbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjb25zdCByPW5ldyBVUkwodCksaT15aWVsZCB0aGlzLmdldEF1dGhvcml6YXRpb25VUkxQYXJhbXMoZSxuKTtmb3IoY29uc3RbZSx0XW9mIGkuZW50cmllcygpKXIuc2VhcmNoUGFyYW1zLmFwcGVuZChlLHQpO3JldHVybiByLnRvU3RyaW5nKCl9KSl9cmVxdWVzdEFjY2Vzc1Rva2VuKGUsbixyLGksbyl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS50b2tlbl9lbmRwb2ludCxzPXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCF0fHwwPT09dC50cmltKCkubGVuZ3RoKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMS1ORjAxIiwiVG9rZW4gZW5kcG9pbnQgbm90IGZvdW5kLiIsIk5vIHRva2VuIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO24mJih5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0U2Vzc2lvbkRhdGFQYXJhbWV0ZXIoInNlc3Npb25fc3RhdGUiLG4saSkpO2NvbnN0IGw9bmV3IFVSTFNlYXJjaFBhcmFtcztsLnNldCgiY2xpZW50X2lkIixzLmNsaWVudElEKSxzLmNsaWVudFNlY3JldCYmcy5jbGllbnRTZWNyZXQudHJpbSgpLmxlbmd0aD4wJiZsLnNldCgiY2xpZW50X3NlY3JldCIscy5jbGllbnRTZWNyZXQpO2NvbnN0IGQ9ZTtsZXQgaDtsLnNldCgiY29kZSIsZCksbC5zZXQoImdyYW50X3R5cGUiLCJhdXRob3JpemF0aW9uX2NvZGUiKSxsLnNldCgicmVkaXJlY3RfdXJpIixzLnNpZ25JblJlZGlyZWN0VVJMKSwobnVsbD09bz92b2lkIDA6by5wYXJhbXMpJiZPYmplY3QuZW50cmllcyhvLnBhcmFtcykuZm9yRWFjaCgoZT0+e2xldFt0LG5dPWU7bC5hcHBlbmQodCxuKX0pKSxzLmVuYWJsZVBLQ0UmJihsLnNldCgiY29kZV92ZXJpZmllciIsIiIuY29uY2F0KHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKHUuZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShyKSxpKSkpLHlpZWxkIHRoaXMuX2RhdGFMYXllci5yZW1vdmVUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKHUuZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShyKSxpKSk7dHJ5e2g9eWllbGQgZmV0Y2godCx7Ym9keTpsLGNyZWRlbnRpYWxzOnMuc2VuZENvb2tpZXNJblJlcXVlc3RzP2EuSW5jbHVkZTphLlNhbWVPcmlnaW4saGVhZGVyczpuZXcgSGVhZGVycyh1LmdldFRva2VuUmVxdWVzdEhlYWRlcnMoKSksbWV0aG9kOiJQT1NUIn0pfWNhdGNoKHQpe3Rocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMS1ORTAyIiwiUmVxdWVzdGluZyBhY2Nlc3MgdG9rZW4gZmFpbGVkIixudWxsIT10P3Q6IlRoZSByZXF1ZXN0IHRvIGdldCB0aGUgYWNjZXNzIHRva2VuIGZyb20gdGhlIHNlcnZlciBmYWlsZWQuIil9aWYoIWgub2spdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQVQxLUhFMDMiLCJSZXF1ZXN0aW5nIGFjY2VzcyB0b2tlbiBmYWlsZWQgd2l0aCAiLmNvbmNhdChoLnN0YXR1c1RleHQpLHlpZWxkIGguanNvbigpKTtyZXR1cm4geWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZShoLGkpfSkpfXJlZnJlc2hBY2Nlc3NUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9KHlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCkpLnRva2VuX2VuZHBvaW50LG49eWllbGQgdGhpcy5fY29uZmlnKCkscj15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoZSk7aWYoIXIucmVmcmVzaF90b2tlbil0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDItTkYwMSIsIk5vIHJlZnJlc2ggdG9rZW4gZm91bmQuIiwiVGhlcmUgd2FzIG5vIHJlZnJlc2ggdG9rZW4gZm91bmQuIEFzZ2FyZGVvIGRvZXNuJ3QgcmV0dXJuIGEgcmVmcmVzaCB0b2tlbiBpZiB0aGUgcmVmcmVzaCB0b2tlbiBncmFudCBpcyBub3QgZW5hYmxlZC4iKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDItTkYwMiIsIk5vIHJlZnJlc2ggdG9rZW4gZW5kcG9pbnQgZm91bmQuIiwiTm8gcmVmcmVzaCB0b2tlbiBlbmRwb2ludCB3YXMgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSByZWZyZXNoIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2NvbnN0IGk9W107bGV0IG87aS5wdXNoKCJjbGllbnRfaWQ9Ii5jb25jYXQobi5jbGllbnRJRCkpLGkucHVzaCgicmVmcmVzaF90b2tlbj0iLmNvbmNhdChyLnJlZnJlc2hfdG9rZW4pKSxpLnB1c2goImdyYW50X3R5cGU9cmVmcmVzaF90b2tlbiIpLG4uY2xpZW50U2VjcmV0JiZuLmNsaWVudFNlY3JldC50cmltKCkubGVuZ3RoPjAmJmkucHVzaCgiY2xpZW50X3NlY3JldD0iLmNvbmNhdChuLmNsaWVudFNlY3JldCkpO3RyeXtvPXlpZWxkIGZldGNoKHQse2JvZHk6aS5qb2luKCImIiksY3JlZGVudGlhbHM6bi5zZW5kQ29va2llc0luUmVxdWVzdHM/YS5JbmNsdWRlOmEuU2FtZU9yaWdpbixoZWFkZXJzOm5ldyBIZWFkZXJzKHUuZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpKSxtZXRob2Q6IlBPU1QifSl9Y2F0Y2godCl7dGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQVQyLU5SMDMiLCJSZWZyZXNoIGFjY2VzcyB0b2tlbiByZXF1ZXN0IGZhaWxlZC4iLG51bGwhPXQ/dDoiVGhlIHJlcXVlc3QgdG8gcmVmcmVzaCB0aGUgYWNjZXNzIHRva2VuIGZhaWxlZC4iKX1pZighby5vayl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDItSEUwNCIsIlJlZnJlc2hpbmcgYWNjZXNzIHRva2VuIGZhaWxlZCB3aXRoICIuY29uY2F0KG8uc3RhdHVzVGV4dCkseWllbGQgby5qc29uKCkpO3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5oYW5kbGVUb2tlblJlc3BvbnNlKG8sZSl9KSl9cmV2b2tlQWNjZXNzVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS5yZXZvY2F0aW9uX2VuZHBvaW50LG49eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIXR8fDA9PT10LnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQVQzLU5GMDEiLCJObyByZXZva2UgYWNjZXNzIHRva2VuIGVuZHBvaW50IGZvdW5kLiIsIk5vIHJldm9rZSBhY2Nlc3MgdG9rZW4gZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgcmV2b2tlIGFjY2VzcyB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjb25zdCByPVtdO2xldCBpO3IucHVzaCgiY2xpZW50X2lkPSIuY29uY2F0KG4uY2xpZW50SUQpKSxyLnB1c2goInRva2VuPSIuY29uY2F0KCh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoZSkpLmFjY2Vzc190b2tlbikpLHIucHVzaCgidG9rZW5fdHlwZV9oaW50PWFjY2Vzc190b2tlbiIpO3RyeXtpPXlpZWxkIGZldGNoKHQse2JvZHk6ci5qb2luKCImIiksY3JlZGVudGlhbHM6bi5zZW5kQ29va2llc0luUmVxdWVzdHM/YS5JbmNsdWRlOmEuU2FtZU9yaWdpbixoZWFkZXJzOm5ldyBIZWFkZXJzKHUuZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpKSxtZXRob2Q6IlBPU1QifSl9Y2F0Y2godCl7dGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQVQzLU5FMDIiLCJUaGUgcmVxdWVzdCB0byByZXZva2UgYWNjZXNzIHRva2VuIGZhaWxlZC4iLG51bGwhPXQ/dDoiVGhlIHJlcXVlc3Qgc2VudCB0byByZXZva2UgdGhlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIil9aWYoMjAwIT09aS5zdGF0dXN8fCFpLm9rKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMy1IRTAzIiwiSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIHJldm9rZSBhY2Nlc3MgdG9rZW4gcmVxdWVzdCAoIi5jb25jYXQoaS5zdGF0dXNUZXh0LCIpLiIpLHlpZWxkIGkuanNvbigpKTtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuY2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSksUHJvbWlzZS5yZXNvbHZlKGkpfSkpfXJlcXVlc3RDdXN0b21HcmFudChlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgcj15aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpLGk9eWllbGQgdGhpcy5fY29uZmlnKCk7bGV0IG87aWYobz1lLnRva2VuRW5kcG9pbnQmJjAhPT1lLnRva2VuRW5kcG9pbnQudHJpbSgpLmxlbmd0aD9lLnRva2VuRW5kcG9pbnQ6ci50b2tlbl9lbmRwb2ludCwhb3x8MD09PW8udHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJDRy1ORjAxIiwiVG9rZW4gZW5kcG9pbnQgbm90IGZvdW5kLiIsIk5vIHRva2VuIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2NvbnN0IHM9eWllbGQgUHJvbWlzZS5hbGwoT2JqZWN0LmVudHJpZXMoZS5kYXRhKS5tYXAoKGU9PntsZXRbcixpXT1lO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT15aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXBsYWNlQ3VzdG9tR3JhbnRUZW1wbGF0ZVRhZ3MoaSxuKTtyZXR1cm4iIi5jb25jYXQociwiPSIpLmNvbmNhdChlKX0pKX0pKSk7bGV0IGw9T2JqZWN0LmFzc2lnbih7fSx1LmdldFRva2VuUmVxdWVzdEhlYWRlcnMoKSk7ZS5hdHRhY2hUb2tlbiYmKGw9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGwpLHtBdXRob3JpemF0aW9uOiJCZWFyZXIgIi5jb25jYXQoKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShuKSkuYWNjZXNzX3Rva2VuKX0pKTtjb25zdCBkPXtib2R5OnMuam9pbigiJiIpLGNyZWRlbnRpYWxzOmkuc2VuZENvb2tpZXNJblJlcXVlc3RzP2EuSW5jbHVkZTphLlNhbWVPcmlnaW4saGVhZGVyczpuZXcgSGVhZGVycyhsKSxtZXRob2Q6IlBPU1QifTtsZXQgaDt0cnl7aD15aWVsZCBmZXRjaChvLGQpfWNhdGNoKGUpe3Rocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkNHLU5FMDIiLCJUaGUgY3VzdG9tIGdyYW50IHJlcXVlc3QgZmFpbGVkLiIsbnVsbCE9ZT9lOiJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgY3VzdG9tIGdyYW50IGZhaWxlZC4iKX1pZigyMDAhPT1oLnN0YXR1c3x8IWgub2spdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQ0ctSEUwMyIsIkludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciB0aGUgY3VzdG9tIGdyYW50IHJlcXVlc3QuICgiLmNvbmNhdChoLnN0YXR1c1RleHQsIikiKSx5aWVsZCBoLmpzb24oKSk7cmV0dXJuIGUucmV0dXJuc1Nlc3Npb24/dGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZShoLG4pOlByb21pc2UucmVzb2x2ZSh5aWVsZCBoLmpzb24oKSl9KSl9Z2V0QmFzaWNVc2VySW5mbyhlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpLG49dGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuZ2V0QXV0aGVudGljYXRlZFVzZXJJbmZvKG51bGw9PXQ/dm9pZCAwOnQuaWRfdG9rZW4pO2xldCByPXthbGxvd2VkU2NvcGVzOnQuc2NvcGUsc2Vzc2lvblN0YXRlOnQuc2Vzc2lvbl9zdGF0ZX07cmV0dXJuIE9iamVjdC5rZXlzKG4pLmZvckVhY2goKGU9Pnt2b2lkIDAhPT1uW2VdJiYiIiE9PW5bZV0mJm51bGwhPT1uW2VdfHxkZWxldGUgbltlXX0pKSxyPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxyKSxuKSxyfSkpfWdldERlY29kZWRJRFRva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD0oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKS5pZF90b2tlbjtyZXR1cm4gdGhpcy5fY3J5cHRvSGVscGVyLmRlY29kZUlEVG9rZW4odCl9KSl9Z2V0Q3J5cHRvSGVscGVyKCl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fY3J5cHRvSGVscGVyfSkpfWdldElEVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKS5pZF90b2tlbn0pKX1nZXRPSURDUHJvdmlkZXJNZXRhRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIWUmJih5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIpKSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Y29uc3Qgbj10LndlbGxLbm93bkVuZHBvaW50O2lmKG4pe2xldCBlO3RyeXtpZihlPXlpZWxkIGZldGNoKG4pLDIwMCE9PWUuc3RhdHVzfHwhZS5vayl0aHJvdyBuZXcgRXJyb3J9Y2F0Y2godCl7dGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1HT1BNRC1IRTAxIiwiSW52YWxpZCB3ZWxsLWtub3duIHJlc3BvbnNlIiwiVGhlIHdlbGwga25vd24gZW5kcG9pbnQgcmVzcG9uc2UgaGFzIGJlZW4gZmFpbGVkIHdpdGggYW4gZXJyb3IuIil9cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlRW5kcG9pbnRzKHlpZWxkIGUuanNvbigpKSkseWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiLCEwKSxQcm9taXNlLnJlc29sdmUoKX1pZih0LmJhc2VVcmwpe3RyeXt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoeWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVzb2x2ZUVuZHBvaW50c0J5QmFzZVVSTCgpKX1jYXRjaCh0KXt0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLUdPUE1ELUlWMDIiLCJSZXNvbHZpbmcgZW5kcG9pbnRzIGZhaWxlZC4iLG51bGwhPXQ/dDoiUmVzb2x2aW5nIGVuZHBvaW50cyBieSBiYXNlIHVybCBmYWlsZWQuIil9cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIiwhMCksUHJvbWlzZS5yZXNvbHZlKCl9cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlRW5kcG9pbnRzRXhwbGljaXRseSgpKSx5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIsITApLFByb21pc2UucmVzb2x2ZSgpfSkpfWdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCl7dmFyIGUsbixyLGksbyxzLGEsYyx1LGw7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCk7cmV0dXJue2F1dGhvcml6YXRpb25FbmRwb2ludDpudWxsIT09KGU9dC5hdXRob3JpemF0aW9uX2VuZHBvaW50KSYmdm9pZCAwIT09ZT9lOiIiLGNoZWNrU2Vzc2lvbklmcmFtZTpudWxsIT09KG49dC5jaGVja19zZXNzaW9uX2lmcmFtZSkmJnZvaWQgMCE9PW4/bjoiIixlbmRTZXNzaW9uRW5kcG9pbnQ6bnVsbCE9PShyPXQuZW5kX3Nlc3Npb25fZW5kcG9pbnQpJiZ2b2lkIDAhPT1yP3I6IiIsaW50cm9zcGVjdGlvbkVuZHBvaW50Om51bGwhPT0oaT10LmludHJvc3BlY3Rpb25fZW5kcG9pbnQpJiZ2b2lkIDAhPT1pP2k6IiIsaXNzdWVyOm51bGwhPT0obz10Lmlzc3VlcikmJnZvaWQgMCE9PW8/bzoiIixqd2tzVXJpOm51bGwhPT0ocz10Lmp3a3NfdXJpKSYmdm9pZCAwIT09cz9zOiIiLHJlZ2lzdHJhdGlvbkVuZHBvaW50Om51bGwhPT0oYT10LnJlZ2lzdHJhdGlvbl9lbmRwb2ludCkmJnZvaWQgMCE9PWE/YToiIixyZXZvY2F0aW9uRW5kcG9pbnQ6bnVsbCE9PShjPXQucmV2b2NhdGlvbl9lbmRwb2ludCkmJnZvaWQgMCE9PWM/YzoiIix0b2tlbkVuZHBvaW50Om51bGwhPT0odT10LnRva2VuX2VuZHBvaW50KSYmdm9pZCAwIT09dT91OiIiLHVzZXJpbmZvRW5kcG9pbnQ6bnVsbCE9PShsPXQudXNlcmluZm9fZW5kcG9pbnQpJiZ2b2lkIDAhPT1sP2w6IiJ9fSkpfWdldFNpZ25PdXRVUkwoZSl7dmFyIG4scixpO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1udWxsPT09KG49eWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uZW5kX3Nlc3Npb25fZW5kcG9pbnQsbz15aWVsZCB0aGlzLl9jb25maWcoKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLUdTT1UtTkYwMSIsIlNpZ24tb3V0IGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyBzaWduLW91dCBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSBzaWduLW91dCBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjb25zdCBzPW51bGwhPT0ocj1udWxsPT1vP3ZvaWQgMDpvLnNpZ25PdXRSZWRpcmVjdFVSTCkmJnZvaWQgMCE9PXI/cjpudWxsPT1vP3ZvaWQgMDpvLnNpZ25JblJlZGlyZWN0VVJMO2lmKCFzfHwwPT09cy50cmltKCkubGVuZ3RoKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtR1NPVS1ORjAzIiwiTm8gc2lnbi1vdXQgcmVkaXJlY3QgVVJMIGZvdW5kLiIsIlRoZSBzaWduLW91dCByZWRpcmVjdCBVUkwgY2Fubm90IGJlIGZvdW5kIG9yIHRoZSBVUkwgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIE5vIHNpZ24taW4gcmVkaXJlY3QgVVJMIGhhcyBiZWVuIGZvdW5kIGVpdGhlci4gIik7Y29uc3QgYT1uZXcgVVJMU2VhcmNoUGFyYW1zO2lmKGEuc2V0KCJwb3N0X2xvZ291dF9yZWRpcmVjdF91cmkiLHMpLG8uc2VuZElkVG9rZW5JbkxvZ291dFJlcXVlc3Qpe2NvbnN0IHQ9bnVsbD09PShpPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKSl8fHZvaWQgMD09PWk/dm9pZCAwOmkuaWRfdG9rZW47aWYoIXR8fDA9PT10LnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1HU09VLU5GMDIiLCJJRCB0b2tlbiBub3QgZm91bmQuIiwiTm8gSUQgdG9rZW4gY291bGQgYmUgZm91bmQuIEVpdGhlciB0aGUgc2Vzc2lvbiBpbmZvcm1hdGlvbiBpcyBsb3N0IG9yIHlvdSBoYXZlIG5vdCBzaWduZWQgaW4uIik7YS5zZXQoImlkX3Rva2VuX2hpbnQiLHQpfWVsc2UgYS5zZXQoImNsaWVudF9pZCIsby5jbGllbnRJRCk7cmV0dXJuIGEuc2V0KCJzdGF0ZSIsInNpZ25fb3V0X3N1Y2Nlc3MiKSwiIi5jb25jYXQodCwiPyIpLmNvbmNhdChhLnRvU3RyaW5nKCkpfSkpfWNsZWFyVXNlclNlc3Npb25EYXRhKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuY2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSl9KSl9Z2V0QWNjZXNzVG9rZW4oZSl7dmFyIG47cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbnVsbD09PShuPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uYWNjZXNzX3Rva2VufSkpfWdldENyZWF0ZWRBdChlKXt2YXIgbjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBudWxsPT09KG49eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKXx8dm9pZCAwPT09bj92b2lkIDA6bi5jcmVhdGVkX2F0fSkpfWdldEV4cGlyZXNJbihlKXt2YXIgbjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBudWxsPT09KG49eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKXx8dm9pZCAwPT09bj92b2lkIDA6bi5leHBpcmVzX2lufSkpfWlzQXV0aGVudGljYXRlZChlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9Qm9vbGVhbih5aWVsZCB0aGlzLmdldEFjY2Vzc1Rva2VuKGUpKSxuPXlpZWxkIHRoaXMuZ2V0Q3JlYXRlZEF0KGUpLHI9eWllbGQgdGhpcy5nZXRFeHBpcmVzSW4oZSk7aWYoIXIpcmV0dXJuITE7Y29uc3QgaT0xZTMqcGFyc2VJbnQociksbz0obmV3IERhdGUpLmdldFRpbWUoKTtyZXR1cm4gdCYmbitpPm99KSl9Z2V0UEtDRUNvZGUoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcih1LmV4dHJhY3RQS0NFS2V5RnJvbVN0YXRlUGFyYW0oZSksbil9KSl9c2V0UEtDRUNvZGUoZSxuLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKHUuZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShuKSxlLHIpfSkpfXVwZGF0ZUNvbmZpZyhlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRDb25maWdEYXRhKGUpLHlpZWxkIHRoaXMuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoITApfSkpfX1jbGFzcyBme2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5faWQ9ZSx0aGlzLl9zdG9yZT10fXNldERhdGFJbkJ1bGsoZSxuKXt2YXIgcjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9bnVsbCE9PShyPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEoZSkpJiZ2b2lkIDAhPT1yP3I6bnVsbCxpPXQmJkpTT04ucGFyc2UodCksbz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30saSksbikscz1KU09OLnN0cmluZ2lmeShvKTt5aWVsZCB0aGlzLl9zdG9yZS5zZXREYXRhKGUscyl9KSl9c2V0VmFsdWUoZSxuLHIpe3ZhciBpO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1udWxsIT09KGk9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YShlKSkmJnZvaWQgMCE9PWk/aTpudWxsLG89dCYmSlNPTi5wYXJzZSh0KSxzPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxvKSx7W25dOnJ9KSxhPUpTT04uc3RyaW5naWZ5KHMpO3lpZWxkIHRoaXMuX3N0b3JlLnNldERhdGEoZSxhKX0pKX1yZW1vdmVWYWx1ZShlLG4pe3ZhciByO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1udWxsIT09KHI9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YShlKSkmJnZvaWQgMCE9PXI/cjpudWxsLGk9dCYmSlNPTi5wYXJzZSh0KSxvPU9iamVjdC5hc3NpZ24oe30saSk7ZGVsZXRlIG9bbl07Y29uc3Qgcz1KU09OLnN0cmluZ2lmeShvKTt5aWVsZCB0aGlzLl9zdG9yZS5zZXREYXRhKGUscyl9KSl9X3Jlc29sdmVLZXkoZSx0KXtyZXR1cm4gdD8iIi5jb25jYXQoZSwiLSIpLmNvbmNhdCh0aGlzLl9pZCwiLSIpLmNvbmNhdCh0KToiIi5jb25jYXQoZSwiLSIpLmNvbmNhdCh0aGlzLl9pZCl9aXNMb2NhbFN0b3JhZ2VBdmFpbGFibGUoKXt0cnl7Y29uc3QgZT0iX19BU0dBUkRFT19BVVRIX0NPUkVfTE9DQUxfU1RPUkFHRV9URVNUX18iO3JldHVybiBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShlLGUpLGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGUpLCEwfWNhdGNoKGUpe3JldHVybiExfX1zZXRDb25maWdEYXRhKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoci5Db25maWdEYXRhKSxlKX0pKX1zZXRPSURDUHJvdmlkZXJNZXRhRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KHIuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpLGUpfSkpfXNldFRlbXBvcmFyeURhdGEoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KHIuVGVtcG9yYXJ5RGF0YSxuKSxlKX0pKX1zZXRTZXNzaW9uRGF0YShlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoci5TZXNzaW9uRGF0YSxuKSxlKX0pKX1zZXRDdXN0b21EYXRhKGUsbixyKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KGUsciksbil9KSl9Z2V0Q29uZmlnRGF0YSgpe3ZhciBlO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShlPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShyLkNvbmZpZ0RhdGEpKSkmJnZvaWQgMCE9PWU/ZTpudWxsKX0pKX1nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpe3ZhciBlO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShlPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShyLk9JRENQcm92aWRlck1ldGFEYXRhKSkpJiZ2b2lkIDAhPT1lP2U6bnVsbCl9KSl9Z2V0VGVtcG9yYXJ5RGF0YShlKXt2YXIgbjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBKU09OLnBhcnNlKG51bGwhPT0obj15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5UZW1wb3JhcnlEYXRhLGUpKSkmJnZvaWQgMCE9PW4/bjpudWxsKX0pKX1nZXRTZXNzaW9uRGF0YShlKXt2YXIgbjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBKU09OLnBhcnNlKG51bGwhPT0obj15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5TZXNzaW9uRGF0YSxlKSkpJiZ2b2lkIDAhPT1uP246bnVsbCl9KSl9Z2V0Q3VzdG9tRGF0YShlLG4pe3ZhciByO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShyPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShlLG4pKSkmJnZvaWQgMCE9PXI/cjpudWxsKX0pKX1zZXRTZXNzaW9uU3RhdHVzKGUpe3RoaXMuaXNMb2NhbFN0b3JhZ2VBdmFpbGFibGUoKSYmbG9jYWxTdG9yYWdlLnNldEl0ZW0oImFzZ2FyZGVvLXNlc3Npb24tYWN0aXZlIixlKX1nZXRTZXNzaW9uU3RhdHVzKCl7dmFyIGU7cmV0dXJuIHRoaXMuaXNMb2NhbFN0b3JhZ2VBdmFpbGFibGUoKSYmbnVsbCE9PShlPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJhc2dhcmRlby1zZXNzaW9uLWFjdGl2ZSIpKSYmdm9pZCAwIT09ZT9lOiIifXJlbW92ZVNlc3Npb25TdGF0dXMoKXt0aGlzLmlzTG9jYWxTdG9yYWdlQXZhaWxhYmxlKCkmJmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCJhc2dhcmRlby1zZXNzaW9uLWFjdGl2ZSIpfXJlbW92ZUNvbmZpZ0RhdGEoKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleShyLkNvbmZpZ0RhdGEpKX0pKX1yZW1vdmVPSURDUHJvdmlkZXJNZXRhRGF0YSgpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fc3RvcmUucmVtb3ZlRGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpKX0pKX1yZW1vdmVUZW1wb3JhcnlEYXRhKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fc3RvcmUucmVtb3ZlRGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuVGVtcG9yYXJ5RGF0YSxlKSl9KSl9cmVtb3ZlU2Vzc2lvbkRhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5TZXNzaW9uRGF0YSxlKSl9KSl9Z2V0Q29uZmlnRGF0YVBhcmFtZXRlcihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuQ29uZmlnRGF0YSkpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfWdldE9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5PSURDUHJvdmlkZXJNZXRhRGF0YSkpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfWdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuVGVtcG9yYXJ5RGF0YSxuKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9Z2V0U2Vzc2lvbkRhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuU2Vzc2lvbkRhdGEsbikpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfXNldENvbmZpZ0RhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLkNvbmZpZ0RhdGEpLGUsbil9KSl9c2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLk9JRENQcm92aWRlck1ldGFEYXRhKSxlLG4pfSkpfXNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoZSxuLGkpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KHIuVGVtcG9yYXJ5RGF0YSxpKSxlLG4pfSkpfXNldFNlc3Npb25EYXRhUGFyYW1ldGVyKGUsbixpKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLlNlc3Npb25EYXRhLGkpLGUsbil9KSl9cmVtb3ZlQ29uZmlnRGF0YVBhcmFtZXRlcihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLkNvbmZpZ0RhdGEpLGUpfSkpfXJlbW92ZU9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KHIuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpLGUpfSkpfXJlbW92ZVRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLlRlbXBvcmFyeURhdGEsbiksZSl9KSl9cmVtb3ZlU2Vzc2lvbkRhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLlNlc3Npb25EYXRhLG4pLGUpfSkpfX1jb25zdCBwPXtjbG9ja1RvbGVyYW5jZTozMDAsZW5hYmxlUEtDRTohMCxyZXNwb25zZU1vZGU6bi5xdWVyeSxzY29wZTpbIm9wZW5pZCJdLHNlbmRDb29raWVzSW5SZXF1ZXN0czohMCx2YWxpZGF0ZUlEVG9rZW46ITAsdmFsaWRhdGVJRFRva2VuSXNzdWVyOiEwfTtjbGFzcyBnewovKioKICAgICAgICAgICAqIFRoaXMgaXMgdGhlIGNvbnN0cnVjdG9yIG1ldGhvZCB0aGF0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0gc3RvcmUgLSBUaGUgc3RvcmUgb2JqZWN0LgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGNvbnN0IF9zdG9yZTogU3RvcmUgPSBuZXcgRGF0YVN0b3JlKCk7CiAgICAgICAgICAgKiBjb25zdCBhdXRoID0gbmV3IEFzZ2FyZGVvQXV0aENsaWVudDxDdXN0b21DbGllbnRDb25maWc+KF9zdG9yZSk7CiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2NvbnN0cnVjdG9yfQogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovCmNvbnN0cnVjdG9yKCl7fQovKioKICAgICAgICAgICAqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgU0RLIHdpdGggdGhlIGNvbmZpZyBkYXRhLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBwYXJhbSBjb25maWcgLSBUaGUgY29uZmlnIG9iamVjdCB0byBpbml0aWFsaXplIHdpdGguCiAgICAgICAgICAgKgogICAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgICAqIGNvbnN0IGNvbmZpZyA9IFx7CiAgICAgICAgICAgKiAgICAgc2lnbkluUmVkaXJlY3RVUkw6ICJodHRwOi8vbG9jYWxob3N0OjMwMDAvc2lnbi1pbiIsCiAgICAgICAgICAgKiAgICAgY2xpZW50SUQ6ICJjbGllbnQgSUQiLAogICAgICAgICAgICogICAgIGJhc2VVcmw6ICJodHRwczovL2xvY2FsaG9zdDo5NDQzIgogICAgICAgICAgICogXH0KICAgICAgICAgICAqCiAgICAgICAgICAgKiBhd2FpdCBhdXRoLmluaXRpYWxpemUoY29uZmlnKTsKICAgICAgICAgICAqCiAgICAgICAgICAgKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2luaXRpYWxpemV9CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi9pbml0aWFsaXplKGUsbixyLGkpe3ZhciBvLHMsYTtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9ZS5jbGllbnRJRDtnLl9pbnN0YW5jZUlEP2cuX2luc3RhbmNlSUQrPTE6Zy5faW5zdGFuY2VJRD0wLGkmJihnLl9pbnN0YW5jZUlEPWkpLHRoaXMuX2RhdGFMYXllcj1uZXcgZih0PyJpbnN0YW5jZV8iLmNvbmNhdChnLl9pbnN0YW5jZUlELCItIikuY29uY2F0KHQpOiJpbnN0YW5jZV8iLmNvbmNhdChnLl9pbnN0YW5jZUlEKSxuKSx0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmU9bmV3IGgodGhpcy5fZGF0YUxheWVyLHIpLGcuX2F1dGhlbnRpY2F0aW9uQ29yZT1uZXcgaCh0aGlzLl9kYXRhTGF5ZXIscikseWllbGQgdGhpcy5fZGF0YUxheWVyLnNldENvbmZpZ0RhdGEoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30scCksZSkse3Njb3BlOlsuLi5udWxsIT09KG89cC5zY29wZSkmJnZvaWQgMCE9PW8/bzpbXSwuLi5udWxsIT09KGE9bnVsbD09PShzPWUuc2NvcGUpfHx2b2lkIDA9PT1zP3ZvaWQgMDpzLmZpbHRlcigoZT0+e3ZhciB0O3JldHVybiEobnVsbD09PSh0PW51bGw9PXA/dm9pZCAwOnAuc2NvcGUpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmluY2x1ZGVzKGUpKX0pKSkmJnZvaWQgMCE9PWE/YTpbXV19KSl9KSl9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgYERhdGFMYXllcmAgb2JqZWN0IHRoYXQgYWxsb3dzIHlvdSB0byBhY2Nlc3MgYXV0aGVudGljYXRpb24gZGF0YS4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJucyAtIFRoZSBgRGF0YUxheWVyYCBvYmplY3QuCiAgICAgICAgICAgKgogICAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICogY29uc3QgZGF0YSA9IGF1dGguZ2V0RGF0YUxheWVyKCk7CiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldERhdGFMYXllcn0KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL2dldERhdGFMYXllcigpe3JldHVybiB0aGlzLl9kYXRhTGF5ZXJ9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgYGluc3RhbmNlSURgIHZhcmlhYmxlIG9mIHRoZSBnaXZlbiBpbnN0YW5jZS4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJucyAtIFRoZSBgaW5zdGFuY2VJRGAgbnVtYmVyLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGNvbnN0IGluc3RhbmNlSWQgPSBhdXRoLmdldEluc3RhbmNlSUQoKTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovZ2V0SW5zdGFuY2VJRCgpe3JldHVybiBnLl9pbnN0YW5jZUlEfQovKioKICAgICAgICAgKiBUaGlzIGlzIGFuIGFzeW5jIG1ldGhvZCB0aGF0IHJldHVybnMgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYXV0aG9yaXphdGlvbiBVUkwgcGFyYW1ldGVycy4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSBjb25maWcgLSAoT3B0aW9uYWwpIEEgY29uZmlnIG9iamVjdCB0byBmb3JjZSBpbml0aWFsaXphdGlvbiBhbmQgcGFzcwogICAgICAgICAqIGN1c3RvbSBwYXRoIHBhcmFtZXRlcnMgc3VjaCBhcyB0aGUgYGZpZHBgIHBhcmFtZXRlci4KICAgICAgICAgKiBAcGFyYW0gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm5zIC0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYXV0aG9yaXphdGlvbiBVUkwgcGFyYW1ldGVycy4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXV0aC5nZXRBdXRob3JpemF0aW9uVVJMUGFyYW1zKCkudGhlbigocGFyYW1zKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmxvZyhwYXJhbXMpOwogICAgICAgICAqIH0pLmNhdGNoKChlcnJvcik9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICogfSk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldEF1dGhvcml6YXRpb25VUkxQYXJhbXN9CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXRBdXRob3JpemF0aW9uVVJMUGFyYW1zKGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PU9iamVjdC5hc3NpZ24oe30sZSk7cmV0dXJuIG51bGw9PXR8fGRlbGV0ZSB0LmZvcmNlSW5pdCwoeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiKSk/dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldEF1dGhvcml6YXRpb25VUkxQYXJhbXModCxuKTp0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEobnVsbD09ZT92b2lkIDA6ZS5mb3JjZUluaXQpLnRoZW4oKCgpPT50aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0QXV0aG9yaXphdGlvblVSTFBhcmFtcyh0LG4pKSl9KSl9Ci8qKgogICAgICAgICAgICogVGhpcyBpcyBhbiBhc3luYyBtZXRob2QgdGhhdCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGF1dGhvcml6YXRpb24gVVJMLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBwYXJhbSBjb25maWcgLSAoT3B0aW9uYWwpIEEgY29uZmlnIG9iamVjdCB0byBmb3JjZSBpbml0aWFsaXphdGlvbiBhbmQgcGFzcwogICAgICAgICAgICogY3VzdG9tIHBhdGggcGFyYW1ldGVycyBzdWNoIGFzIHRoZSBmaWRwIHBhcmFtZXRlci4KICAgICAgICAgICAqIEBwYXJhbSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHJldHVybnMgLSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBhdXRob3JpemF0aW9uIFVSTC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBhdXRoLmdldEF1dGhvcml6YXRpb25VUkwoKS50aGVuKCh1cmwpPT57CiAgICAgICAgICAgKiAgLy8gY29uc29sZS5sb2codXJsKTsKICAgICAgICAgICAqIH0pLmNhdGNoKChlcnJvcik9PnsKICAgICAgICAgICAqICAvLyBjb25zb2xlLmVycm9yKGVycm9yKTsKICAgICAgICAgICAqIH0pOwogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKgogICAgICAgICAgICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRBdXRob3JpemF0aW9uVVJMfQogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovZ2V0QXV0aG9yaXphdGlvblVSTChlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1PYmplY3QuYXNzaWduKHt9LGUpO3JldHVybiBudWxsPT10fHxkZWxldGUgdC5mb3JjZUluaXQsKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIikpP3RoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBdXRob3JpemF0aW9uVVJMKHQsbik6dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENQcm92aWRlck1ldGFEYXRhKG51bGw9PWU/dm9pZCAwOmUuZm9yY2VJbml0KS50aGVuKCgoKT0+dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldEF1dGhvcml6YXRpb25VUkwodCxuKSkpfSkpfQovKioKICAgICAgICAgICAqIFRoaXMgaXMgYW4gYXN5bmMgbWV0aG9kIHRoYXQgc2VuZHMgYSByZXF1ZXN0IHRvIG9idGFpbiB0aGUgYWNjZXNzIHRva2VuIGFuZCByZXR1cm5zIGEgUHJvbWlzZQogICAgICAgICAgICogdGhhdCByZXNvbHZlcyB3aXRoIHRoZSB0b2tlbiBhbmQgb3RoZXIgcmVsZXZhbnQgZGF0YS4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0gYXV0aG9yaXphdGlvbkNvZGUgLSBUaGUgYXV0aG9yaXphdGlvbiBjb2RlLgogICAgICAgICAgICogQHBhcmFtIHNlc3Npb25TdGF0ZSAtIFRoZSBzZXNzaW9uIHN0YXRlLgogICAgICAgICAgICogQHBhcmFtIHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJucyAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHRva2VuIHJlc3BvbnNlLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGF1dGgucmVxdWVzdEFjY2Vzc1Rva2VuKGF1dGhDb2RlLCBzZXNzaW9uU3RhdGUpLnRoZW4oKHRva2VuKT0+ewogICAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHRva2VuKTsKICAgICAgICAgICAqIH0pLmNhdGNoKChlcnJvcik9PnsKICAgICAgICAgICAqICAvLyBjb25zb2xlLmVycm9yKGVycm9yKTsKICAgICAgICAgICAqIH0pOwogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKgogICAgICAgICAgICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNyZXF1ZXN0QWNjZXNzVG9rZW59CiAgICAgICAgICAgKgogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovcmVxdWVzdEFjY2Vzc1Rva2VuKGUsbixyLGksbyl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiKSk/dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJlcXVlc3RBY2Nlc3NUb2tlbihlLG4scixpLG8pOnRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSghMSkudGhlbigoKCk9PnRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5yZXF1ZXN0QWNjZXNzVG9rZW4oZSxuLHIsaSxvKSkpfSkpfQovKioKICAgICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHNpZ24tb3V0IFVSTC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAgICoKICAgICAgICAgICAqICoqVGhpcyBkb2Vzbid0IGNsZWFyIHRoZSBhdXRoZW50aWNhdGlvbiBkYXRhLioqCiAgICAgICAgICAgKgogICAgICAgICAgICogQHJldHVybnMgLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBzaWduLW91dCBVUkwuCiAgICAgICAgICAgKgogICAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICogY29uc3Qgc2lnbk91dFVybCA9IGF3YWl0IGF1dGguZ2V0U2lnbk91dFVSTCgpOwogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKgogICAgICAgICAgICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRTaWduT3V0VVJMfQogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovZ2V0U2lnbk91dFVSTChlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0U2lnbk91dFVSTChlKX0pKX0KLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIE9JREMgc2VydmljZSBlbmRwb2ludHMgdGhhdCBhcmUgZmV0Y2hlZCBmcm9tIHRoZSBgLndlbGwta25vd25gIGVuZHBvaW50LgogICAgICAgICAgICoKICAgICAgICAgICAqIEByZXR1cm5zIC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgT0lEQyBzZXJ2aWNlIGVuZHBvaW50cy4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBjb25zdCBlbmRwb2ludHMgPSBhd2FpdCBhdXRoLmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCk7CiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldE9JRENTZXJ2aWNlRW5kcG9pbnRzfQogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKX0pKX0KLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCBkZWNvZGVzIHRoZSBwYXlsb2FkIG9mIHRoZSBJRCB0b2tlbiBhbmQgcmV0dXJucyBpdC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAgICoKICAgICAgICAgICAqIEByZXR1cm5zIC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgZGVjb2RlZCBJRCB0b2tlbiBwYXlsb2FkLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGNvbnN0IGRlY29kZWRJZFRva2VuID0gYXdhaXQgYXV0aC5nZXREZWNvZGVkSURUb2tlbigpOwogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKgogICAgICAgICAgICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXREZWNvZGVkSURUb2tlbn0KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL2dldERlY29kZWRJRFRva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXREZWNvZGVkSURUb2tlbihlKX0pKX0KLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBJRCB0b2tlbi4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAgICoKICAgICAgICAgICAqIEByZXR1cm5zIC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgSUQgdG9rZW4uCiAgICAgICAgICAgKgogICAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICogY29uc3QgaWRUb2tlbiA9IGF3YWl0IGF1dGguZ2V0SURUb2tlbigpOwogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKgogICAgICAgICAgICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRJRFRva2VufQogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovZ2V0SURUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0SURUb2tlbihlKX0pKX0KLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBiYXNpYyB1c2VyIGluZm9ybWF0aW9uIG9idGFpbmVkIGZyb20gdGhlIElEIHRva2VuLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBwYXJhbSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHJldHVybnMgLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBiYXNpYyB1c2VyIGluZm9ybWF0aW9uLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGNvbnN0IHVzZXJJbmZvID0gYXdhaXQgYXV0aC5nZXRCYXNpY1VzZXJJbmZvKCk7CiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldEJhc2ljVXNlckluZm99CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi9nZXRCYXNpY1VzZXJJbmZvKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRCYXNpY1VzZXJJbmZvKGUpfSkpfQovKioKICAgICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGNyeXB0byBoZWxwZXIgb2JqZWN0LgogICAgICAgICAgICoKICAgICAgICAgICAqIEByZXR1cm5zIC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhIENyeXB0b0hlbHBlciBvYmplY3QuCiAgICAgICAgICAgKgogICAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICogY29uc3QgY3J5cHRvSGVscGVyID0gYXdhaXQgYXV0aC5DcnlwdG9IZWxwZXIoKTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0Q3J5cHRvSGVscGVyfQogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovZ2V0Q3J5cHRvSGVscGVyKCl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldENyeXB0b0hlbHBlcigpfSkpfQovKioKICAgICAgICAgICAqIFRoaXMgbWV0aG9kIHJldm9rZXMgdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAgICoKICAgICAgICAgICAqICoqVGhpcyBtZXRob2QgYWxzbyBjbGVhcnMgdGhlIGF1dGhlbnRpY2F0aW9uIGRhdGEuKioKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJucyAtIEEgUHJvbWlzZSB0aGF0IHJldHVybnMgdGhlIHJlc3BvbnNlIG9mIHRoZSByZXZva2UtYWNjZXNzLXRva2VuIHJlcXVlc3QuCiAgICAgICAgICAgKgogICAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICogYXV0aC5yZXZva2VBY2Nlc3NUb2tlbigpLnRoZW4oKHJlc3BvbnNlKT0+ewogICAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHJlc3BvbnNlKTsKICAgICAgICAgICAqIH0pLmNhdGNoKChlcnJvcik9PnsKICAgICAgICAgICAqICAvLyBjb25zb2xlLmVycm9yKGVycm9yKTsKICAgICAgICAgICAqIH0pOwogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKgogICAgICAgICAgICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNyZXZva2VBY2Nlc3NUb2tlbn0KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL3Jldm9rZUFjY2Vzc1Rva2VuKGUpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmV2b2tlQWNjZXNzVG9rZW4oZSl9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2QgcmVmcmVzaGVzIHRoZSBhY2Nlc3MgdG9rZW4gYW5kIHJldHVybnMgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgbmV3IGFjY2VzcwogICAgICAgICAgICogdG9rZW4gYW5kIG90aGVyIHJlbGV2YW50IGRhdGEuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHBhcmFtIHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJucyAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHRva2VuIHJlc3BvbnNlLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGF1dGgucmVmcmVzaEFjY2Vzc1Rva2VuKCkudGhlbigocmVzcG9uc2UpPT57CiAgICAgICAgICAgKiAgLy8gY29uc29sZS5sb2cocmVzcG9uc2UpOwogICAgICAgICAgICogfSkuY2F0Y2goKGVycm9yKT0+ewogICAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAgICogfSk7CiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3JlZnJlc2hBY2Nlc3NUb2tlbn0KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL3JlZnJlc2hBY2Nlc3NUb2tlbihlKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJlZnJlc2hBY2Nlc3NUb2tlbihlKX0KLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBhY2Nlc3MgdG9rZW4uCiAgICAgICAgICAgKgogICAgICAgICAgICogQHBhcmFtIHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJucyAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IGF1dGguZ2V0QWNjZXNzVG9rZW4oKTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0QWNjZXNzVG9rZW59CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi9nZXRBY2Nlc3NUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0QWNjZXNzVG9rZW4oZSl9KSl9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2Qgc2VuZHMgYSBjdXN0b20tZ3JhbnQgcmVxdWVzdCBhbmQgcmV0dXJucyBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSByZXNwb25zZQogICAgICAgICAgICogZGVwZW5kaW5nIG9uIHRoZSBjb25maWcgcGFzc2VkLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBwYXJhbSBjb25maWcgLSBBIGNvbmZpZyBvYmplY3QgY29udGFpbmluZyB0aGUgY3VzdG9tIGdyYW50IGNvbmZpZ3VyYXRpb25zLgogICAgICAgICAgICogQHBhcmFtIHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJucyAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHJlc3BvbnNlIGRlcGVuZGluZwogICAgICAgICAgICogb24geW91ciBjb25maWd1cmF0aW9ucy4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBjb25zdCBjb25maWcgPSB7CiAgICAgICAgICAgKiAgIGF0dGFjaFRva2VuOiBmYWxzZSwKICAgICAgICAgICAqICAgZGF0YTogewogICAgICAgICAgICogICAgICAgY2xpZW50X2lkOiAie3tjbGllbnRJRH19IiwKICAgICAgICAgICAqICAgICAgIGdyYW50X3R5cGU6ICJhY2NvdW50X3N3aXRjaCIsCiAgICAgICAgICAgKiAgICAgICBzY29wZTogInt7c2NvcGV9fSIsCiAgICAgICAgICAgKiAgICAgICB0b2tlbjogInt7dG9rZW59fSIsCiAgICAgICAgICAgKiAgIH0sCiAgICAgICAgICAgKiAgIGlkOiAiYWNjb3VudC1zd2l0Y2giLAogICAgICAgICAgICogICByZXR1cm5SZXNwb25zZTogdHJ1ZSwKICAgICAgICAgICAqICAgcmV0dXJuc1Nlc3Npb246IHRydWUsCiAgICAgICAgICAgKiAgIHNpZ25JblJlcXVpcmVkOiB0cnVlCiAgICAgICAgICAgKiB9CiAgICAgICAgICAgKgogICAgICAgICAgICogYXV0aC5yZXF1ZXN0Q3VzdG9tR3JhbnQoY29uZmlnKS50aGVuKChyZXNwb25zZSk9PnsKICAgICAgICAgICAqICAvLyBjb25zb2xlLmxvZyhyZXNwb25zZSk7CiAgICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICAgKiB9KTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjcmVxdWVzdEN1c3RvbUdyYW50fQogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovcmVxdWVzdEN1c3RvbUdyYW50KGUsdCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5yZXF1ZXN0Q3VzdG9tR3JhbnQoZSx0KX0KLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGlmIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQgb3Igbm90LgogICAgICAgICAgICoKICAgICAgICAgICAqIEBwYXJhbSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHJldHVybnMgLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGB0cnVlYCBpZiB0aGUgdXNlciBpcyBhdXRoZW50aWNhdGVkLCBgZmFsc2VgIG90aGVyd2lzZS4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBhd2FpdCBhdXRoLmlzQXV0aGVudGljYXRlZCgpOwogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKgogICAgICAgICAgICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNpc0F1dGhlbnRpY2F0ZWR9CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi9pc0F1dGhlbnRpY2F0ZWQoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmlzQXV0aGVudGljYXRlZChlKX0pKX0KLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBQS0NFIGNvZGUgZ2VuZXJhdGVkIGR1cmluZyB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgYXV0aGVudGljYXRpb24gVVJMLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBwYXJhbSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICAgKiBAcGFyYW0gc3RhdGUgLSBUaGUgc3RhdGUgcGFyYW1ldGVyIHRoYXQgd2FzIHBhc3NlZCBpbiB0aGUgYXV0aGVudGljYXRpb24gVVJMLgogICAgICAgICAgICoKICAgICAgICAgICAqIEByZXR1cm5zIC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgUEtDRSBjb2RlLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGNvbnN0IHBrY2UgPSBhd2FpdCBnZXRQS0NFQ29kZSgpOwogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKgogICAgICAgICAgICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRQS0NFQ29kZX0KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL2dldFBLQ0VDb2RlKGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldFBLQ0VDb2RlKGUsbil9KSl9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgUEtDRSBjb2RlIHRvIHRoZSBkYXRhIHN0b3JlLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBwYXJhbSBwa2NlIC0gVGhlIFBLQ0UgY29kZS4KICAgICAgICAgICAqIEBwYXJhbSBzdGF0ZSAtIFRoZSBzdGF0ZSBwYXJhbWV0ZXIgdGhhdCB3YXMgcGFzc2VkIGluIHRoZSBhdXRoZW50aWNhdGlvbiBVUkwuCiAgICAgICAgICAgKiBAcGFyYW0gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGF3YWl0IGF1dGguc2V0UEtDRUNvZGUoInBrY2VfY29kZSIpCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3NldFBLQ0VDb2RlfQogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovc2V0UEtDRUNvZGUoZSxuLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnNldFBLQ0VDb2RlKGUsbixyKX0pKX0KLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGlmIHRoZSBzaWduLW91dCBpcyBzdWNjZXNzZnVsIG9yIG5vdC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0gc2lnbk91dFJlZGlyZWN0VXJsIC0gVGhlIFVSTCB0byB3aGljaCB0aGUgdXNlciBoYXMgYmVlbiByZWRpcmVjdGVkIHRvIGFmdGVyIHNpZ25pbmctb3V0LgogICAgICAgICAgICoKICAgICAgICAgICAqICoqVGhlIHNlcnZlciBhcHBlbmRzIHBhdGggcGFyYW1ldGVycyB0byB0aGUgYHNpZ25PdXRSZWRpcmVjdFVSTGAgYW5kIHRoZXNlIHBhdGggcGFyYW1ldGVycwogICAgICAgICAgICogIGFyZSByZXF1aXJlZCBmb3IgdGhpcyBtZXRob2QgdG8gZnVuY3Rpb24uKioKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJucyAtIGB0cnVlYCBpZiBzdWNjZXNzZnVsLCBgZmFsc2VgIG90aGVyd2lzZS4KICAgICAgICAgICAqCiAgICAgICAgICAgKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2lzU2lnbk91dFN1Y2Nlc3NmdWx9CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi9zdGF0aWMgaXNTaWduT3V0U3VjY2Vzc2Z1bChlKXtjb25zdCB0PW5ldyBVUkwoZSksbj10LnNlYXJjaFBhcmFtcy5nZXQoInN0YXRlIikscj1Cb29sZWFuKHQuc2VhcmNoUGFyYW1zLmdldCgiZXJyb3IiKSk7cmV0dXJuISFuJiYic2lnbl9vdXRfc3VjY2VzcyI9PT1uJiYhcn0KLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGlmIHRoZSBzaWduLW91dCBoYXMgZmFpbGVkIG9yIG5vdC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0gc2lnbk91dFJlZGlyZWN0VXJsIC0gVGhlIFVSTCB0byB3aGljaCB0aGUgdXNlciBoYXMgYmVlbiByZWRpcmVjdGVkIHRvIGFmdGVyIHNpZ25pbmctb3V0LgogICAgICAgICAgICoKICAgICAgICAgICAqICoqVGhlIHNlcnZlciBhcHBlbmRzIHBhdGggcGFyYW1ldGVycyB0byB0aGUgYHNpZ25PdXRSZWRpcmVjdFVSTGAgYW5kIHRoZXNlIHBhdGggcGFyYW1ldGVycwogICAgICAgICAgICogIGFyZSByZXF1aXJlZCBmb3IgdGhpcyBtZXRob2QgdG8gZnVuY3Rpb24uKioKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJucyAtIGB0cnVlYCBpZiBzdWNjZXNzZnVsLCBgZmFsc2VgIG90aGVyd2lzZS4KICAgICAgICAgICAqCiAgICAgICAgICAgKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2RpZFNpZ25PdXRGYWlsfQogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovc3RhdGljIGRpZFNpZ25PdXRGYWlsKGUpe2NvbnN0IHQ9bmV3IFVSTChlKSxuPXQuc2VhcmNoUGFyYW1zLmdldCgic3RhdGUiKSxyPUJvb2xlYW4odC5zZWFyY2hQYXJhbXMuZ2V0KCJlcnJvciIpKTtyZXR1cm4hIW4mJiJzaWduX291dF9zdWNjZXNzIj09PW4mJnJ9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2QgdXBkYXRlcyB0aGUgY29uZmlndXJhdGlvbiB0aGF0IHdhcyBwYXNzZWQgaW50byB0aGUgY29uc3RydWN0b3Igd2hlbiBpbnN0YW50aWF0aW5nIHRoaXMgY2xhc3MuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHBhcmFtIGNvbmZpZyAtIEEgY29uZmlnIG9iamVjdCB0byB1cGRhdGUgdGhlIFNESyBjb25maWd1cmF0aW9ucyB3aXRoLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGNvbnN0IGNvbmZpZyA9IHsKICAgICAgICAgICAqICAgICBzaWduSW5SZWRpcmVjdFVSTDogImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9zaWduLWluIiwKICAgICAgICAgICAqICAgICBjbGllbnRJRDogImNsaWVudCBJRCIsCiAgICAgICAgICAgKiAgICAgYmFzZVVybDogImh0dHBzOi8vbG9jYWxob3N0Ojk0NDMiCiAgICAgICAgICAgKiB9CiAgICAgICAgICAgKgogICAgICAgICAgICogYXdhaXQgYXV0aC51cGRhdGVDb25maWcoY29uZmlnKTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciN1cGRhdGVDb25maWd9CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi91cGRhdGVDb25maWcoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUudXBkYXRlQ29uZmlnKGUpfSkpfXN0YXRpYyBjbGVhclVzZXJTZXNzaW9uRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5jbGVhclVzZXJTZXNzaW9uRGF0YShlKX0pKX19Y29uc3Qgdj0iaW5pdCI7dmFyIHk7IWZ1bmN0aW9uKGUpe2UuU2lnbkluPSJzaWduLWluIixlLlNpZ25PdXQ9InNpZ24tb3V0IixlLkluaXRpYWxpemU9ImluaXRpYWxpemUiLGUuSHR0cFJlcXVlc3RTdGFydD0iaHR0cC1yZXF1ZXN0LXN0YXJ0IixlLkh0dHBSZXF1ZXN0RmluaXNoPSJodHRwLXJlcXVlc3QtZmluaXNoIixlLkh0dHBSZXF1ZXN0RXJyb3I9Imh0dHAtcmVxdWVzdC1lcnJvciIsZS5IdHRwUmVxdWVzdFN1Y2Nlc3M9Imh0dHAtcmVxdWVzdC1zdWNjZXNzIixlLlJldm9rZUFjY2Vzc1Rva2VuPSJyZXZva2UtYWNjZXNzLXRva2VuIixlLkN1c3RvbUdyYW50PSJjdXN0b20tZ3JhbnQiLGUuU2lnbk91dEZhaWxlZD0ic2lnbi1vdXQtZmFpbGVkIn0oeXx8KHk9e30pKTtjb25zdCBtPSJwcm9tcHROb25lUmVxdWVzdFNlbnQiLHc9ImVycm9yIixfPSJlcnJvcl9kZXNjcmlwdGlvbiIsUz0iY3VzdG9tX2dyYW50X2NvbmZpZyIsYj0iQWNjZXNzIHRva2VuIGlzIGludmFsaWQiO3ZhciBFOyFmdW5jdGlvbihlKXtlLkxvY2FsU3RvcmFnZT0ibG9jYWxTdG9yYWdlIixlLlNlc3Npb25TdG9yYWdlPSJzZXNzaW9uU3RvcmFnZSIsZS5XZWJXb3JrZXI9IndlYldvcmtlciIsZS5Ccm93c2VyTWVtb3J5PSJicm93c2VyTWVtb3J5In0oRXx8KEU9e30pKTtjbGFzcyBre2NvbnN0cnVjdG9yKCl7fXN0YXRpYyBnZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpe3JldHVybntibG9iOihudWxsPT1lP3ZvaWQgMDplLmRhdGEpaW5zdGFuY2VvZiBCbG9iP251bGw9PWU/dm9pZCAwOmUuZGF0YTpudWxsLGRhdGE6SlNPTi5zdHJpbmdpZnkobnVsbCE9ZT9lOiIiKSxzdWNjZXNzOiEwfX1zdGF0aWMgZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKXtyZXR1cm4obnVsbD09ZT92b2lkIDA6ZS50b0pTT04pJiZkZWxldGUgZS50b0pTT04se2Vycm9yOkpTT04uc3RyaW5naWZ5KG51bGwhPWU/ZToiIiksc3VjY2VzczohMX19fWNsYXNzIFJ7Y29uc3RydWN0b3IoKXt9c3RhdGljIHJlbW92ZUF1dGhvcml6YXRpb25Db2RlKCl7Y29uc3QgZT1sb2NhdGlvbi5ocmVmO2hpc3RvcnkucHVzaFN0YXRlKHt9LGRvY3VtZW50LnRpdGxlLGUucmVwbGFjZSgvXD9jb2RlPS4qJC8sIiIpKX1zdGF0aWMgZ2V0UEtDRShlKXt2YXIgdDtyZXR1cm4gbnVsbCE9PSh0PXNlc3Npb25TdG9yYWdlLmdldEl0ZW0oZSkpJiZ2b2lkIDAhPT10P3Q6IiJ9c3RhdGljIHNldFBLQ0UoZSx0KXtzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGUsdCl9c3RhdGljIHNldFNpZ25PdXRVUkwoZSx0LG4pe3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0oIiIuY29uY2F0KHMsIi1pbnN0YW5jZV8iKS5jb25jYXQobiwiLSIpLmNvbmNhdCh0KSxlKX1zdGF0aWMgZ2V0U2lnbk91dFVSTChlLHQpe3ZhciBuO3JldHVybiBudWxsIT09KG49c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgiIi5jb25jYXQocywiLWluc3RhbmNlXyIpLmNvbmNhdCh0LCItIikuY29uY2F0KGUpKSkmJnZvaWQgMCE9PW4/bjoiIn1zdGF0aWMgcmVtb3ZlUEtDRShlKXtzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKGUpfXN0YXRpYyBjYW5Db250aW51ZVNpZ25JbihlLHQpe3JldHVybiEoZSYmIVIuaGFzRXJyb3JJblVSTCgpJiYhUi5oYXNBdXRoU2VhcmNoUGFyYW1zSW5VUkwoKSYmIXQpfXN0YXRpYyBpc0luaXRpYWxpemVkU2lsZW50U2lnbkluKCl7cmV0dXJuIFIuaXNTaWxlbnRTdGF0ZVByZXNlbnRJblVSTCgpfXN0YXRpYyB3YXNTaWduSW5DYWxsZWQoKXtyZXR1cm4hKCFSLmhhc0Vycm9ySW5VUkwoKSYmIVIuaGFzQXV0aFNlYXJjaFBhcmFtc0luVVJMKCl8fHRoaXMuaXNTaWxlbnRTdGF0ZVByZXNlbnRJblVSTCgpKX1zdGF0aWMgd2FzU2lsZW50U2lnbkluQ2FsbGVkKCl7Y29uc3QgZT1zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCJpbml0aWFsaXplZC1zaWxlbnQtc2lnbi1pbiIpLHQ9ZT9KU09OLnBhcnNlKGUpOm51bGw7cmV0dXJuIEJvb2xlYW4odCl9c3RhdGljIGlzU2lnbk91dFN1Y2Nlc3NmdWwoKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKGcuaXNTaWduT3V0U3VjY2Vzc2Z1bCh3aW5kb3cubG9jYXRpb24uaHJlZikpe2NvbnN0IGU9d2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoIj8iKVswXTtyZXR1cm4gaGlzdG9yeS5wdXNoU3RhdGUoe30sZG9jdW1lbnQudGl0bGUsZSkseWllbGQgZy5jbGVhclVzZXJTZXNzaW9uRGF0YSgpLCEwfXJldHVybiExfSkpfXN0YXRpYyBkaWRTaWduT3V0RmFpbCgpe2lmKGcuZGlkU2lnbk91dEZhaWwod2luZG93LmxvY2F0aW9uLmhyZWYpKXtjb25zdCBlPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpLHQ9ZS5zZWFyY2hQYXJhbXMuZ2V0KHcpLG49ZS5zZWFyY2hQYXJhbXMuZ2V0KF8pLHI9d2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoIj8iKVswXTtyZXR1cm4gaGlzdG9yeS5wdXNoU3RhdGUoe30sZG9jdW1lbnQudGl0bGUscikse2Rlc2NyaXB0aW9uOm51bGwhPW4/bjoiIixlcnJvcjpudWxsIT10P3Q6IiJ9fXJldHVybiExfXN0YXRpYyBpc1NpbGVudFN0YXRlUHJlc2VudEluVVJMKCl7dmFyIGU7Y29uc3QgdD1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKS5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpO3JldHVybiBudWxsIT09KGU9bnVsbD09dD92b2lkIDA6dC5pbmNsdWRlcygic2lnbi1pbi1zaWxlbnRseSIpKSYmdm9pZCAwIT09ZSYmZX1zdGF0aWMgaGFzQXV0aFNlYXJjaFBhcmFtc0luVVJMKCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOndpbmRvdy5sb2NhdGlvbi5zZWFyY2g7cmV0dXJuL1s/Jl1jb2RlPVteJl0rLy50ZXN0KGUpfXN0YXRpYyBoYXNFcnJvckluVVJMKCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOndpbmRvdy5sb2NhdGlvbi5ocmVmO2NvbnN0IHQ9bmV3IFVSTChlKTtyZXR1cm4hIXQuc2VhcmNoUGFyYW1zLmdldCh3KSYmInNpZ25fb3V0X3N1Y2Nlc3MiIT09dC5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpfXN0YXRpYyBjYW5TZW5kUHJvbXB0Tm9uZVJlcXVlc3QoKXtjb25zdCBlPXNlc3Npb25TdG9yYWdlLmdldEl0ZW0obSk7cmV0dXJuIShlP0pTT04ucGFyc2UoZSk6bnVsbCl9c3RhdGljIHNldFByb21wdE5vbmVSZXF1ZXN0U2VudChlKXtzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKG0sSlNPTi5zdHJpbmdpZnkoZSkpfXN0YXRpYyB3YWl0VGlsbFBhZ2VSZWRpcmVjdCh0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9bnVsbCE9dD90OjNlMzt5aWVsZCBuZXcgUHJvbWlzZSgodD0+c2V0VGltZW91dCh0LDFlMyplKSkpfSkpfX1SLnVudGlsPWZ1bmN0aW9uKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTo1MDA7Y29uc3Qgbj1yPT5lKCk/cigpOnNldFRpbWVvdXQoKCgpPT5uKHIpKSx0KTtyZXR1cm4gbmV3IFByb21pc2Uobil9O2NsYXNzIFR7Y29uc3RydWN0b3IoZSx0KXt0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudD1lLHRoaXMuX2RhdGFMYXllcj10aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXREYXRhTGF5ZXIoKSx0aGlzLl9zcGFIZWxwZXI9dCx0aGlzLl9pbnN0YW5jZUlEPXRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldEluc3RhbmNlSUQoKSx0aGlzLl9pc1Rva2VuUmVmcmVzaGluZz0hMX1lbmFibGVIdHRwSGFuZGxlcihlKXsobnVsbD09ZT92b2lkIDA6ZS5lbmFibGVIYW5kbGVyKSYmZS5lbmFibGVIYW5kbGVyKCl9ZGlzYWJsZUh0dHBIYW5kbGVyKGUpeyhudWxsPT1lP3ZvaWQgMDplLmRpc2FibGVIYW5kbGVyKSYmZS5kaXNhYmxlSGFuZGxlcigpfWluaXRpYWxpemVTZXNzaW9uTWFuZ2VyKGUsdCxuLHIsaSl7dmFyIG8scyxhO2kuaW5pdGlhbGl6ZShlLmNsaWVudElELG51bGwhPT0obz10LmNoZWNrU2Vzc2lvbklmcmFtZSkmJnZvaWQgMCE9PW8/bzoiIixuLG51bGwhPT0ocz1lLmNoZWNrU2Vzc2lvbkludGVydmFsKSYmdm9pZCAwIT09cz9zOjMsbnVsbCE9PShhPWUuc2Vzc2lvblJlZnJlc2hJbnRlcnZhbCkmJnZvaWQgMCE9PWE/YTozMDAsZS5zaWduSW5SZWRpcmVjdFVSTCxyKX1yZXF1ZXN0Q3VzdG9tR3JhbnQodCxuKXt2YXIgcixpLG87cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtsZXQgcz0hMCxhPSExO2lmKG51bGw9PXQ/dm9pZCAwOnQudG9rZW5FbmRwb2ludCl7cz0hMTtmb3IoY29uc3QgZSBvZlsuLi5udWxsIT09KGk9bnVsbD09PShyPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCkpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLnJlc291cmNlU2VydmVyVVJMcykmJnZvaWQgMCE9PWk/aTpbXSx0LmJhc2VVcmxdKWlmKGUmJihudWxsPT09KG89dC50b2tlbkVuZHBvaW50KXx8dm9pZCAwPT09bz92b2lkIDA6by5zdGFydHNXaXRoKGUpKSl7YT0hMDticmVha319cmV0dXJuIHQuc2hvdWxkUmVwbGF5QWZ0ZXJSZWZyZXNoJiZ0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihTLEpTT04uc3RyaW5naWZ5KHQpKSxzfHxhP3RoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LnJlcXVlc3RDdXN0b21HcmFudCh0KS50aGVuKChyPT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG4mJiJmdW5jdGlvbiI9PXR5cGVvZiBuJiZuKHQpLHQucmV0dXJuc1Nlc3Npb24/KHRoaXMuX3NwYUhlbHBlci5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KHRoaXMpLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldEJhc2ljVXNlckluZm8oKSk6cn0pKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpOlByb21pc2UucmVqZWN0KG5ldyBjKCJTUEEtTUFJTl9USFJFQURfQ0xJRU5ULVJDRy1JVjAxIiwiUmVxdWVzdCB0byB0aGUgcHJvdmlkZWQgZW5kcG9pbnQgaXMgcHJvaGliaXRlZC4iLCJSZXF1ZXN0cyBjYW4gb25seSBiZSBzZW50IHRvIHJlc291cmNlIHNlcnZlcnMgc3BlY2lmaWVkIGJ5IHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCBhdHRyaWJ1dGUgd2hpbGUgaW5pdGlhbGl6aW5nIHRoZSBTREsuIFRoZSBzcGVjaWZpZWQgdG9rZW4gZW5kcG9pbnQgaW4gdGhpcyByZXF1ZXN0IGNhbm5vdCBiZSBmb3VuZCBhbW9uZyB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AiKSl9KSl9Z2V0Q3VzdG9tR3JhbnRDb25maWdEYXRhKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKFMpO3JldHVybiBlP0pTT04ucGFyc2UoZSk6bnVsbH0pKX1yZWZyZXNoQWNjZXNzVG9rZW4odCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0cnl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQucmVmcmVzaEFjY2Vzc1Rva2VuKCk7Y29uc3QgZT15aWVsZCB0aGlzLmdldEN1c3RvbUdyYW50Q29uZmlnRGF0YSgpO3JldHVybiBlJiYoeWllbGQgdGhpcy5yZXF1ZXN0Q3VzdG9tR3JhbnQoZSx0KSksdGhpcy5fc3BhSGVscGVyLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkodGhpcyksdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0QmFzaWNVc2VySW5mbygpfWNhdGNoKGUpe2NvbnN0IHQ9e3R5cGU6InJlZnJlc2gtYWNjZXNzLXRva2VuLWVycm9yIn07cmV0dXJuIHdpbmRvdy5wb3N0TWVzc2FnZSh0KSxQcm9taXNlLnJlamVjdChlKX19KSl9cmV0cnlGYWlsZWRSZXF1ZXN0cyh0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9dC5odHRwQ2xpZW50LG49dC5yZXF1ZXN0Q29uZmlnLHI9dC5pc0h0dHBIYW5kbGVyRW5hYmxlZCxpPXQuaHR0cEVycm9yQ2FsbGJhY2ssbz10Lmh0dHBGaW5pc2hDYWxsYmFjazt5aWVsZCBSLnVudGlsKCgoKT0+IXRoaXMuX2lzVG9rZW5SZWZyZXNoaW5nKSk7dHJ5e2NvbnN0IHQ9eWllbGQgZS5yZXF1ZXN0KG4pO3JldHVybiBQcm9taXNlLnJlc29sdmUodCl9Y2F0Y2goZSl7cmV0dXJuIHImJigiZnVuY3Rpb24iPT10eXBlb2YgaSYmKHlpZWxkIGkoZSkpLCJmdW5jdGlvbiI9PXR5cGVvZiBvJiZvKCkpLFByb21pc2UucmVqZWN0KGUpfX0pKX1odHRwUmVxdWVzdCh0LG4scixpLG8scyl7dmFyIGEsdTtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2xldCBsPSExO2NvbnN0IGQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKTtmb3IoY29uc3QgZSBvZlsuLi5udWxsIT09KGE9eWllbGQgbnVsbD09ZD92b2lkIDA6ZC5yZXNvdXJjZVNlcnZlclVSTHMpJiZ2b2lkIDAhPT1hP2E6W10sZC5iYXNlVXJsXSlpZihlJiYobnVsbD09PSh1PW51bGw9PW4/dm9pZCAwOm4udXJsKXx8dm9pZCAwPT09dT92b2lkIDA6dS5zdGFydHNXaXRoKGUpKSl7bD0hMDticmVha31yZXR1cm4gbD90LnJlcXVlc3QobikudGhlbigoZT0+UHJvbWlzZS5yZXNvbHZlKGUpKSkuY2F0Y2goKGE9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgZSx1LGw7aWYoNDAxPT09KG51bGw9PT0oZT1udWxsPT1hP3ZvaWQgMDphLnJlc3BvbnNlKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5zdGF0dXMpfHwhKG51bGw9PWE/dm9pZCAwOmEucmVzcG9uc2UpKXtpZih0aGlzLl9pc1Rva2VuUmVmcmVzaGluZylyZXR1cm4gdGhpcy5yZXRyeUZhaWxlZFJlcXVlc3RzKHtlbmFibGVSZXRyaWV2aW5nU2lnbk91dFVSTEZyb21TZXNzaW9uOnMsaHR0cENsaWVudDp0LGh0dHBFcnJvckNhbGxiYWNrOmksaHR0cEZpbmlzaENhbGxiYWNrOm8saXNIdHRwSGFuZGxlckVuYWJsZWQ6cixyZXF1ZXN0Q29uZmlnOm59KTtsZXQgZTt0aGlzLl9pc1Rva2VuUmVmcmVzaGluZz0hMDt0cnl7ZT15aWVsZCB0aGlzLnJlZnJlc2hBY2Nlc3NUb2tlbihzKSx0aGlzLl9pc1Rva2VuUmVmcmVzaGluZz0hMX1jYXRjaChlKXt0aHJvdyB0aGlzLl9pc1Rva2VuUmVmcmVzaGluZz0hMSxyJiYoImZ1bmN0aW9uIj09dHlwZW9mIGkmJih5aWVsZCBpKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxhKSx7Y29kZTpifSkpKSwiZnVuY3Rpb24iPT10eXBlb2YgbyYmbygpKSxuZXcgYygiU1BBLUFVVEhfSEVMUEVSLUhSLVNFMDEiLG51bGwhPT0odT1udWxsPT1lP3ZvaWQgMDplLm5hbWUpJiZ2b2lkIDAhPT11P3U6IlJlZnJlc2ggdG9rZW4gcmVxdWVzdCBmYWlsZWQuIixudWxsIT09KGw9bnVsbD09ZT92b2lkIDA6ZS5tZXNzYWdlKSYmdm9pZCAwIT09bD9sOiJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gcmVmcmVzaCB0aGUgYWNjZXNzIHRva2VuIGZvbGxvd2luZyBhIDQwMSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIuIil9aWYoZSl0cnl7Y29uc3QgZT15aWVsZCB0LnJlcXVlc3Qobik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShlKX1jYXRjaChlKXtyZXR1cm4gciYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoeWllbGQgaShlKSksImZ1bmN0aW9uIj09dHlwZW9mIG8mJm8oKSksUHJvbWlzZS5yZWplY3QoZSl9fXJldHVybiByJiYoImZ1bmN0aW9uIj09dHlwZW9mIGkmJih5aWVsZCBpKGEpKSwiZnVuY3Rpb24iPT10eXBlb2YgbyYmbygpKSxQcm9taXNlLnJlamVjdChhKX0pKSkpOlByb21pc2UucmVqZWN0KG5ldyBjKCJTUEEtQVVUSF9IRUxQRVItSFItSVYwMiIsIlJlcXVlc3QgdG8gdGhlIHByb3ZpZGVkIGVuZHBvaW50IGlzIHByb2hpYml0ZWQuIiwiUmVxdWVzdHMgY2FuIG9ubHkgYmUgc2VudCB0byByZXNvdXJjZSBzZXJ2ZXJzIHNwZWNpZmllZCBieSB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AgYXR0cmlidXRlIHdoaWxlIGluaXRpYWxpemluZyB0aGUgU0RLLiBUaGUgc3BlY2lmaWVkIGVuZHBvaW50IGluIHRoaXMgcmVxdWVzdCBjYW5ub3QgYmUgZm91bmQgYW1vbmcgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIikpfSkpfWh0dHBSZXF1ZXN0QWxsKHQsbixyLGksbyl7dmFyIHMsYSx1O3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7bGV0IGw9ITA7Y29uc3QgZD15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpO2Zvcihjb25zdCBlIG9mIHQpe2xldCB0PSExO2Zvcihjb25zdCBuIG9mWy4uLm51bGwhPT0oYT1udWxsPT09KHM9eWllbGQgZCl8fHZvaWQgMD09PXM/dm9pZCAwOnMucmVzb3VyY2VTZXJ2ZXJVUkxzKSYmdm9pZCAwIT09YT9hOltdLGQuYmFzZVVybF0paWYobiYmKG51bGw9PT0odT1lLnVybCl8fHZvaWQgMD09PXU/dm9pZCAwOnUuc3RhcnRzV2l0aChuKSkpe3Q9ITA7YnJlYWt9aWYoIXQpe2w9ITE7YnJlYWt9fWNvbnN0IGg9W107aWYobClyZXR1cm4gdC5mb3JFYWNoKChlPT57aC5wdXNoKG4ucmVxdWVzdChlKSl9KSksKG51bGw9PW4/dm9pZCAwOm4uYWxsKSYmbi5hbGwoaCkudGhlbigoZT0+UHJvbWlzZS5yZXNvbHZlKGUpKSkuY2F0Y2goKHQ9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgcyxhLHU7aWYoNDAxPT09KG51bGw9PT0ocz1udWxsPT10P3ZvaWQgMDp0LnJlc3BvbnNlKXx8dm9pZCAwPT09cz92b2lkIDA6cy5zdGF0dXMpfHwhKG51bGw9PXQ/dm9pZCAwOnQucmVzcG9uc2UpKXtsZXQgczt0cnl7cz15aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5yZWZyZXNoQWNjZXNzVG9rZW4oKX1jYXRjaChlKXt0aHJvdyByJiYoImZ1bmN0aW9uIj09dHlwZW9mIGkmJih5aWVsZCBpKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7Y29kZTpifSkpKSwiZnVuY3Rpb24iPT10eXBlb2YgbyYmbygpKSxuZXcgYygiU1BBLUFVVEhfSEVMUEVSLUhSQS1TRTAxIixudWxsIT09KGE9bnVsbD09ZT92b2lkIDA6ZS5uYW1lKSYmdm9pZCAwIT09YT9hOiJSZWZyZXNoIHRva2VuIHJlcXVlc3QgZmFpbGVkLiIsbnVsbCE9PSh1PW51bGw9PWU/dm9pZCAwOmUubWVzc2FnZSkmJnZvaWQgMCE9PXU/dToiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIHJlZnJlc2ggdGhlIGFjY2VzcyB0b2tlbiBmb2xsb3dpbmcgYSA0MDEgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLiIpfWlmKHMpcmV0dXJuIG4uYWxsJiZuLmFsbChoKS50aGVuKChlPT5Qcm9taXNlLnJlc29sdmUoZSkpKS5jYXRjaCgodD0+ZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiByJiYoImZ1bmN0aW9uIj09dHlwZW9mIGkmJih5aWVsZCBpKHQpKSwiZnVuY3Rpb24iPT10eXBlb2YgbyYmbygpKSxQcm9taXNlLnJlamVjdCh0KX0pKSkpfXJldHVybiByJiYoImZ1bmN0aW9uIj09dHlwZW9mIGkmJih5aWVsZCBpKHQpKSwiZnVuY3Rpb24iPT10eXBlb2YgbyYmbygpKSxQcm9taXNlLnJlamVjdCh0KX0pKSkpO3Rocm93IG5ldyBjKCJTUEEtQVVUSF9IRUxQRVItSFJBLUlWMDIiLCJSZXF1ZXN0IHRvIHRoZSBwcm92aWRlZCBlbmRwb2ludCBpcyBwcm9oaWJpdGVkLiIsIlJlcXVlc3RzIGNhbiBvbmx5IGJlIHNlbnQgdG8gcmVzb3VyY2Ugc2VydmVycyBzcGVjaWZpZWQgYnkgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIGF0dHJpYnV0ZSB3aGlsZSBpbml0aWFsaXppbmcgdGhlIFNESy4gVGhlIHNwZWNpZmllZCBlbmRwb2ludCBpbiB0aGlzIHJlcXVlc3QgY2Fubm90IGJlIGZvdW5kIGFtb25nIHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCIpfSkpfXJlcXVlc3RBY2Nlc3NUb2tlbih0LG4scixpLG8scyl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBhPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCk7aWYoYS5zdG9yYWdlPT09RS5Ccm93c2VyTWVtb3J5JiZhLmVuYWJsZVBLQ0UmJm4pe2NvbnN0IGU9Ui5nZXRQS0NFKHUuZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShuKSk7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuc2V0UEtDRUNvZGUodS5leHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtKG4pLGUpfWVsc2UgYS5zdG9yYWdlPT09RS5XZWJXb3JrZXImJmkmJih5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5zZXRQS0NFQ29kZShpLG51bGwhPW8/bzoiIikpO3JldHVybiB0P3RoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LnJlcXVlc3RBY2Nlc3NUb2tlbih0LG51bGwhPW4/bjoiIixudWxsIT1vP286IiIsdm9pZCAwLHMpLnRoZW4oKCgpPT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIGEuc3RvcmFnZSE9PUUuV2ViV29ya2VyPyhSLnNldFNpZ25PdXRVUkwoeWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0U2lnbk91dFVSTCgpLGEuY2xpZW50SUQsdGhpcy5faW5zdGFuY2VJRCksdGhpcy5fc3BhSGVscGVyJiYodGhpcy5fc3BhSGVscGVyLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLHRoaXMuX3NwYUhlbHBlci5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KHRoaXMpKSxyJiYiZnVuY3Rpb24iPT10eXBlb2YgciYmYS5lbmFibGVPSURDU2Vzc2lvbk1hbmFnZW1lbnQmJnIoKSk6dGhpcy5fc3BhSGVscGVyJiZ0aGlzLl9zcGFIZWxwZXIucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSh0aGlzKSx0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRCYXNpY1VzZXJJbmZvKCl9KSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKTpQcm9taXNlLnJlamVjdChuZXcgYygiU1BBLUFVVEhfSEVMUEVSLVJBVDEtTkYwMSIsIk5vIGF1dGhvcml6YXRpb24gY29kZS4iLCJObyBhdXRob3JpemF0aW9uIGNvZGUgd2FzIGZvdW5kLiIpKX0pKX10cnlTaWduSW5TaWxlbnRseSh0LG4scixpLG8pe3ZhciBzO3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYoUi5pc0luaXRpYWxpemVkU2lsZW50U2lnbkluKCkpcmV0dXJuIHlpZWxkIHIucmVjZWl2ZVByb21wdE5vbmVSZXNwb25zZSgpLFByb21pc2UucmVzb2x2ZSh7YWxsb3dlZFNjb3BlczoiIixkaXNwbGF5TmFtZToiIixlbWFpbDoiIixzZXNzaW9uU3RhdGU6IiIsc3ViOiIiLHRlbmFudERvbWFpbjoiIix1c2VybmFtZToiIn0pO2NvbnN0IGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJwSUZyYW1lIiksYz1udWxsPT09KHM9bnVsbD09YT92b2lkIDA6YS5jb250ZW50RG9jdW1lbnQpfHx2b2lkIDA9PT1zP3ZvaWQgMDpzLmdldEVsZW1lbnRCeUlkKCJwcm9tcHROb25lSUZyYW1lIik7dHJ5e2NvbnN0IGU9eWllbGQgdChpKTtjLnNyYz1lfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX1yZXR1cm4gbmV3IFByb21pc2UoKCh0LHIpPT57Y29uc3QgaT1zZXRUaW1lb3V0KCgoKT0+e3QoITEpfSksMWU0KSxzPWE9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgZSxjLHUsbDtjb25zdCBkPWEuZGF0YTsiY2hlY2tfc2Vzc2lvbl9zaWduZWRfb3V0Ij09KG51bGw9PWQ/dm9pZCAwOmQudHlwZSkmJih3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIscyksY2xlYXJUaW1lb3V0KGkpLHQoITEpKSwiY2hlY2tfc2Vzc2lvbl9zaWduZWRfaW4iPT0obnVsbD09ZD92b2lkIDA6ZC50eXBlKSYmKG51bGw9PT0oZT1udWxsPT1kP3ZvaWQgMDpkLmRhdGEpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmNvZGUpJiZuKG51bGw9PT0oYz1udWxsPT1kP3ZvaWQgMDpkLmRhdGEpfHx2b2lkIDA9PT1jP3ZvaWQgMDpjLmNvZGUsbnVsbD09PSh1PW51bGw9PWQ/dm9pZCAwOmQuZGF0YSl8fHZvaWQgMD09PXU/dm9pZCAwOnUuc2Vzc2lvblN0YXRlLG51bGw9PT0obD1udWxsPT1kP3ZvaWQgMDpkLmRhdGEpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLnN0YXRlLG8pLnRoZW4oKGU9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIscyksdChlKX0pKS5jYXRjaCgoZT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixzKSxyKGUpfSkpLmZpbmFsbHkoKCgpPT57Y2xlYXJUaW1lb3V0KGkpfSkpfSkpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixzKX0pKX0pKX1oYW5kbGVTaWduSW4odCxuLHIpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpO2lmKHlpZWxkIHQoKSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHthbGxvd2VkU2NvcGVzOiIiLGRpc3BsYXlOYW1lOiIiLGVtYWlsOiIiLHNlc3Npb25TdGF0ZToiIixzdWI6IiIsdGVuYW50RG9tYWluOiIiLHVzZXJuYW1lOiIifSk7aWYoZS5zdG9yYWdlIT09RS5XZWJXb3JrZXImJih5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5pc0F1dGhlbnRpY2F0ZWQoKSkpcmV0dXJuIHRoaXMuX3NwYUhlbHBlci5jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoKSx0aGlzLl9zcGFIZWxwZXIucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSh0aGlzKSxlLmVuYWJsZU9JRENTZXNzaW9uTWFuYWdlbWVudCYmbigpLFByb21pc2UucmVzb2x2ZSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRCYXNpY1VzZXJJbmZvKCkpO2NvbnN0IGk9bmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZikuc2VhcmNoUGFyYW1zLmdldCh3KSxvPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpLnNlYXJjaFBhcmFtcy5nZXQoXyk7aWYoaSl7Y29uc3QgZT1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTt0aHJvdyBlLnNlYXJjaFBhcmFtcy5kZWxldGUodyksZS5zZWFyY2hQYXJhbXMuZGVsZXRlKF8pLGhpc3RvcnkucHVzaFN0YXRlKG51bGwsZG9jdW1lbnQudGl0bGUsZS50b1N0cmluZygpKSxuZXcgYygiU1BBLUFVVEhfSEVMUEVSLVNJLVNFMDEiLGksbnVsbCE9bz9vOiIiKX1pZihlLnN0b3JhZ2U9PT1FLldlYldvcmtlciYmcil7Y29uc3QgZT15aWVsZCByKCk7aWYoZSlyZXR1cm4gZX19KSl9YXR0YWNoVG9rZW5Ub1JlcXVlc3RDb25maWcodCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPU9iamVjdC5hc3NpZ24oe2F0dGFjaFRva2VuOiEwfSx0KTtlLmF0dGFjaFRva2VuJiYoZS5zaG91bGRBdHRhY2hJRFBBY2Nlc3NUb2tlbj90LmhlYWRlcnM9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuaGVhZGVycykse0F1dGhvcml6YXRpb246IkJlYXJlciAiLmNvbmNhdCh5aWVsZCB0aGlzLmdldElEUEFjY2Vzc1Rva2VuKCkpfSk6dC5oZWFkZXJzPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmhlYWRlcnMpLHtBdXRob3JpemF0aW9uOiJCZWFyZXIgIi5jb25jYXQoeWllbGQgdGhpcy5nZXRBY2Nlc3NUb2tlbigpKX0pKX0pKX1nZXRCYXNpY1VzZXJJbmZvKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0QmFzaWNVc2VySW5mbygpfSkpfWdldERlY29kZWRJRFRva2VuKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0RGVjb2RlZElEVG9rZW4oKX0pKX1nZXREZWNvZGVkSURQSURUb2tlbigpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldERlY29kZWRJRFRva2VuKCl9KSl9Z2V0Q3J5cHRvSGVscGVyKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0Q3J5cHRvSGVscGVyKCl9KSl9Z2V0SURUb2tlbigpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldElEVG9rZW4oKX0pKX1nZXRPSURDU2VydmljZUVuZHBvaW50cygpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCl9KSl9Z2V0QWNjZXNzVG9rZW4oKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRBY2Nlc3NUb2tlbigpfSkpfWdldElEUEFjY2Vzc1Rva2VuKCl7dmFyIHQ7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbnVsbD09PSh0PXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YSgpKXx8dm9pZCAwPT09dD92b2lkIDA6dC5hY2Nlc3NfdG9rZW59KSl9Z2V0RGF0YUxheWVyKCl7cmV0dXJuIHRoaXMuX2RhdGFMYXllcn1pc0F1dGhlbnRpY2F0ZWQoKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5pc0F1dGhlbnRpY2F0ZWQoKX0pKX19Y2xhc3MgQXtjb25zdHJ1Y3RvcihlKXt0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudD1lLHRoaXMuX2RhdGFMYXllcj10aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXREYXRhTGF5ZXIoKX1yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KHQpe3ZhciBuLHI7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZighKG51bGwhPT0ocj1udWxsPT09KG49eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKSl8fHZvaWQgMD09PW4/dm9pZCAwOm4ucGVyaW9kaWNUb2tlblJlZnJlc2gpJiZ2b2lkIDAhPT1yJiZyKSlyZXR1cm47Y29uc3Qgbz15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKTtpZihvLnJlZnJlc2hfdG9rZW4pe2NvbnN0IG49cGFyc2VJbnQoby5leHBpcmVzX2luKSxyPXNldFRpbWVvdXQoKCgpPT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdC5yZWZyZXNoQWNjZXNzVG9rZW4oKX0pKSksMWUzKihuPD0xMD9uOm4tMTApKTt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihpLEpTT04uc3RyaW5naWZ5KHIpKX19KSl9Z2V0UmVmcmVzaFRpbWVvdXRUaW1lcigpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGkpKT9KU09OLnBhcnNlKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGkpKTotMX0pKX1jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQodCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZih0KXJldHVybiB2b2lkIGNsZWFyVGltZW91dCh0KTtjb25zdCBlPXlpZWxkIHRoaXMuZ2V0UmVmcmVzaFRpbWVvdXRUaW1lcigpOy0xIT09ZSYmY2xlYXJUaW1lb3V0KGUpfSkpfX12YXIgQz0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOnt9O2Z1bmN0aW9uIEQoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsImRlZmF1bHQiKT9lLmRlZmF1bHQ6ZX1mdW5jdGlvbiBQKGUpe2lmKGUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsbik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbixyLmdldD9yOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlW25dfX0pfSkpLHR9dmFyIE8sST17ZXhwb3J0czp7fX0sVT1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHQsYXJndW1lbnRzKX19LEw9VSxIPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsTT0oTz1PYmplY3QuY3JlYXRlKG51bGwpLGZ1bmN0aW9uKGUpe3ZhciB0PUguY2FsbChlKTtyZXR1cm4gT1t0XXx8KE9bdF09dC5zbGljZSg4LC0xKS50b0xvd2VyQ2FzZSgpKX0pO2Z1bmN0aW9uIGooZSl7cmV0dXJuIGU9ZS50b0xvd2VyQ2FzZSgpLGZ1bmN0aW9uKHQpe3JldHVybiBNKHQpPT09ZX19ZnVuY3Rpb24gTihlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKX1mdW5jdGlvbiB4KGUpe3JldHVybiB2b2lkIDA9PT1lfXZhciBxPWooIkFycmF5QnVmZmVyIik7ZnVuY3Rpb24gQihlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGV9ZnVuY3Rpb24gRihlKXtyZXR1cm4gbnVsbCE9PWUmJiJvYmplY3QiPT10eXBlb2YgZX1mdW5jdGlvbiBLKGUpe2lmKCJvYmplY3QiIT09TShlKSlyZXR1cm4hMTt2YXIgdD1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk7cmV0dXJuIG51bGw9PT10fHx0PT09T2JqZWN0LnByb3RvdHlwZX12YXIgSj1qKCJEYXRlIiksVz1qKCJGaWxlIiksej1qKCJCbG9iIiksVj1qKCJGaWxlTGlzdCIpO2Z1bmN0aW9uIFkoZSl7cmV0dXJuIltvYmplY3QgRnVuY3Rpb25dIj09PUguY2FsbChlKX12YXIgRz1qKCJVUkxTZWFyY2hQYXJhbXMiKTtmdW5jdGlvbiBYKGUsdCl7aWYobnVsbCE9ZSlpZigib2JqZWN0IiE9dHlwZW9mIGUmJihlPVtlXSksTihlKSlmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjtuKyspdC5jYWxsKG51bGwsZVtuXSxuLGUpO2Vsc2UgZm9yKHZhciBpIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsaSkmJnQuY2FsbChudWxsLGVbaV0saSxlKX12YXIgJCxaPSgkPSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheSYmT2JqZWN0LmdldFByb3RvdHlwZU9mKFVpbnQ4QXJyYXkpLGZ1bmN0aW9uKGUpe3JldHVybiAkJiZlIGluc3RhbmNlb2YgJH0pO3ZhciBRLGVlPWooIkhUTUxGb3JtRWxlbWVudCIpLHRlPShRPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksZnVuY3Rpb24oZSx0KXtyZXR1cm4gUS5jYWxsKGUsdCl9KSxuZT17aXNBcnJheTpOLGlzQXJyYXlCdWZmZXI6cSxpc0J1ZmZlcjpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9PWUmJiF4KGUpJiZudWxsIT09ZS5jb25zdHJ1Y3RvciYmIXgoZS5jb25zdHJ1Y3RvcikmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZlLmNvbnN0cnVjdG9yLmlzQnVmZmVyKGUpfSxpc0Zvcm1EYXRhOmZ1bmN0aW9uKGUpe3ZhciB0PSJbb2JqZWN0IEZvcm1EYXRhXSI7cmV0dXJuIGUmJigiZnVuY3Rpb24iPT10eXBlb2YgRm9ybURhdGEmJmUgaW5zdGFuY2VvZiBGb3JtRGF0YXx8SC5jYWxsKGUpPT09dHx8WShlLnRvU3RyaW5nKSYmZS50b1N0cmluZygpPT09dCl9LGlzQXJyYXlCdWZmZXJWaWV3OmZ1bmN0aW9uKGUpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJkFycmF5QnVmZmVyLmlzVmlldz9BcnJheUJ1ZmZlci5pc1ZpZXcoZSk6ZSYmZS5idWZmZXImJnEoZS5idWZmZXIpfSxpc1N0cmluZzpmdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGV9LGlzTnVtYmVyOkIsaXNPYmplY3Q6Rixpc1BsYWluT2JqZWN0OkssaXNFbXB0eU9iamVjdDpmdW5jdGlvbihlKXtyZXR1cm4gZSYmMD09PU9iamVjdC5rZXlzKGUpLmxlbmd0aCYmT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09T2JqZWN0LnByb3RvdHlwZX0saXNVbmRlZmluZWQ6eCxpc0RhdGU6Sixpc0ZpbGU6Vyxpc0Jsb2I6eixpc0Z1bmN0aW9uOlksaXNTdHJlYW06ZnVuY3Rpb24oZSl7cmV0dXJuIEYoZSkmJlkoZS5waXBlKX0saXNVUkxTZWFyY2hQYXJhbXM6Ryxpc1N0YW5kYXJkQnJvd3NlckVudjpmdW5jdGlvbigpe3ZhciBlO3JldHVybigidW5kZWZpbmVkIj09dHlwZW9mIG5hdmlnYXRvcnx8IlJlYWN0TmF0aXZlIiE9PShlPW5hdmlnYXRvci5wcm9kdWN0KSYmIk5hdGl2ZVNjcmlwdCIhPT1lJiYiTlMiIT09ZSkmJigidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCl9LGZvckVhY2g6WCxtZXJnZTpmdW5jdGlvbiBlKCl7dmFyIHQ9e307ZnVuY3Rpb24gbihuLHIpe0sodFtyXSkmJksobik/dFtyXT1lKHRbcl0sbik6SyhuKT90W3JdPWUoe30sbik6TihuKT90W3JdPW4uc2xpY2UoKTp0W3JdPW59Zm9yKHZhciByPTAsaT1hcmd1bWVudHMubGVuZ3RoO3I8aTtyKyspWChhcmd1bWVudHNbcl0sbik7cmV0dXJuIHR9LGV4dGVuZDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIFgodCwoZnVuY3Rpb24odCxyKXtlW3JdPW4mJiJmdW5jdGlvbiI9PXR5cGVvZiB0P0wodCxuKTp0fSkpLGV9LHRyaW06ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbT9lLnRyaW0oKTplLnJlcGxhY2UoL15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nLCIiKX0sc3RyaXBCT006ZnVuY3Rpb24oZSl7cmV0dXJuIDY1Mjc5PT09ZS5jaGFyQ29kZUF0KDApJiYoZT1lLnNsaWNlKDEpKSxlfSxpbmhlcml0czpmdW5jdGlvbihlLHQsbixyKXtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlLHIpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsbiYmT2JqZWN0LmFzc2lnbihlLnByb3RvdHlwZSxuKX0sdG9GbGF0T2JqZWN0OmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8scyxhPXt9O2lmKHQ9dHx8e30sbnVsbD09ZSlyZXR1cm4gdDtkb3tmb3Iobz0oaT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKSkubGVuZ3RoO28tLSA+MDspcz1pW29dLHImJiFyKHMsZSx0KXx8YVtzXXx8KHRbc109ZVtzXSxhW3NdPSEwKTtlPSExIT09biYmT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfXdoaWxlKGUmJighbnx8bihlLHQpKSYmZSE9PU9iamVjdC5wcm90b3R5cGUpO3JldHVybiB0fSxraW5kT2Y6TSxraW5kT2ZUZXN0OmosZW5kc1dpdGg6ZnVuY3Rpb24oZSx0LG4pe2U9U3RyaW5nKGUpLCh2b2lkIDA9PT1ufHxuPmUubGVuZ3RoKSYmKG49ZS5sZW5ndGgpLG4tPXQubGVuZ3RoO3ZhciByPWUuaW5kZXhPZih0LG4pO3JldHVybi0xIT09ciYmcj09PW59LHRvQXJyYXk6ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuIG51bGw7aWYoTihlKSlyZXR1cm4gZTt2YXIgdD1lLmxlbmd0aDtpZighQih0KSlyZXR1cm4gbnVsbDtmb3IodmFyIG49bmV3IEFycmF5KHQpO3QtLSA+MDspblt0XT1lW3RdO3JldHVybiBufSxpc1R5cGVkQXJyYXk6Wixpc0ZpbGVMaXN0OlYsZm9yRWFjaEVudHJ5OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuLHI9KGUmJmVbU3ltYm9sLml0ZXJhdG9yXSkuY2FsbChlKTsobj1yLm5leHQoKSkmJiFuLmRvbmU7KXt2YXIgaT1uLnZhbHVlO3QuY2FsbChlLGlbMF0saVsxXSl9fSxtYXRjaEFsbDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbixyPVtdO251bGwhPT0obj1lLmV4ZWModCkpOylyLnB1c2gobik7cmV0dXJuIHJ9LGlzSFRNTEZvcm06ZWUsaGFzT3duUHJvcGVydHk6dGV9LHJlPSJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30saWU9W10sb2U9W10sc2U9InVuZGVmaW5lZCIhPXR5cGVvZiBVaW50OEFycmF5P1VpbnQ4QXJyYXk6QXJyYXksYWU9ITE7ZnVuY3Rpb24gY2UoKXthZT0hMDtmb3IodmFyIGU9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLHQ9MCxuPWUubGVuZ3RoO3Q8bjsrK3QpaWVbdF09ZVt0XSxvZVtlLmNoYXJDb2RlQXQodCldPXQ7b2VbIi0iLmNoYXJDb2RlQXQoMCldPTYyLG9lWyJfIi5jaGFyQ29kZUF0KDApXT02M31mdW5jdGlvbiB1ZShlLHQsbil7Zm9yKHZhciByLGksbz1bXSxzPXQ7czxuO3MrPTMpcj0oZVtzXTw8MTYpKyhlW3MrMV08PDgpK2VbcysyXSxvLnB1c2goaWVbKGk9cik+PjE4JjYzXStpZVtpPj4xMiY2M10raWVbaT4+NiY2M10raWVbNjMmaV0pO3JldHVybiBvLmpvaW4oIiIpfWZ1bmN0aW9uIGxlKGUpe3ZhciB0O2FlfHxjZSgpO2Zvcih2YXIgbj1lLmxlbmd0aCxyPW4lMyxpPSIiLG89W10scz0xNjM4MyxhPTAsYz1uLXI7YTxjO2ErPXMpby5wdXNoKHVlKGUsYSxhK3M+Yz9jOmErcykpO3JldHVybiAxPT09cj8odD1lW24tMV0saSs9aWVbdD4+Ml0saSs9aWVbdDw8NCY2M10saSs9Ij09Iik6Mj09PXImJih0PShlW24tMl08PDgpK2Vbbi0xXSxpKz1pZVt0Pj4xMF0saSs9aWVbdD4+NCY2M10saSs9aWVbdDw8MiY2M10saSs9Ij0iKSxvLnB1c2goaSksby5qb2luKCIiKX1mdW5jdGlvbiBkZShlLHQsbixyLGkpe3ZhciBvLHMsYT04Kmktci0xLGM9KDE8PGEpLTEsdT1jPj4xLGw9LTcsZD1uP2ktMTowLGg9bj8tMToxLGY9ZVt0K2RdO2ZvcihkKz1oLG89ZiYoMTw8LWwpLTEsZj4+PS1sLGwrPWE7bD4wO289MjU2Km8rZVt0K2RdLGQrPWgsbC09OCk7Zm9yKHM9byYoMTw8LWwpLTEsbz4+PS1sLGwrPXI7bD4wO3M9MjU2KnMrZVt0K2RdLGQrPWgsbC09OCk7aWYoMD09PW8pbz0xLXU7ZWxzZXtpZihvPT09YylyZXR1cm4gcz9OYU46MS8wKihmPy0xOjEpO3MrPU1hdGgucG93KDIsciksby09dX1yZXR1cm4oZj8tMToxKSpzKk1hdGgucG93KDIsby1yKX1mdW5jdGlvbiBoZShlLHQsbixyLGksbyl7dmFyIHMsYSxjLHU9OCpvLWktMSxsPSgxPDx1KS0xLGQ9bD4+MSxoPTIzPT09aT9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAsZj1yPzA6by0xLHA9cj8xOi0xLGc9dDwwfHwwPT09dCYmMS90PDA/MTowO2Zvcih0PU1hdGguYWJzKHQpLGlzTmFOKHQpfHx0PT09MS8wPyhhPWlzTmFOKHQpPzE6MCxzPWwpOihzPU1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjIpLHQqKGM9TWF0aC5wb3coMiwtcykpPDEmJihzLS0sYyo9MiksKHQrPXMrZD49MT9oL2M6aCpNYXRoLnBvdygyLDEtZCkpKmM+PTImJihzKyssYy89MikscytkPj1sPyhhPTAscz1sKTpzK2Q+PTE/KGE9KHQqYy0xKSpNYXRoLnBvdygyLGkpLHMrPWQpOihhPXQqTWF0aC5wb3coMixkLTEpKk1hdGgucG93KDIsaSkscz0wKSk7aT49ODtlW24rZl09MjU1JmEsZis9cCxhLz0yNTYsaS09OCk7Zm9yKHM9czw8aXxhLHUrPWk7dT4wO2VbbitmXT0yNTUmcyxmKz1wLHMvPTI1Nix1LT04KTtlW24rZi1wXXw9MTI4Kmd9dmFyIGZlPXt9LnRvU3RyaW5nLHBlPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PWZlLmNhbGwoZSl9O21lLlRZUEVEX0FSUkFZX1NVUFBPUlQ9dm9pZCAwPT09cmUuVFlQRURfQVJSQVlfU1VQUE9SVHx8cmUuVFlQRURfQVJSQVlfU1VQUE9SVDt2YXIgZ2U9dmUoKTtmdW5jdGlvbiB2ZSgpe3JldHVybiBtZS5UWVBFRF9BUlJBWV9TVVBQT1JUPzIxNDc0ODM2NDc6MTA3Mzc0MTgyM31mdW5jdGlvbiB5ZShlLHQpe2lmKHZlKCk8dCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0eXBlZCBhcnJheSBsZW5ndGgiKTtyZXR1cm4gbWUuVFlQRURfQVJSQVlfU1VQUE9SVD8oZT1uZXcgVWludDhBcnJheSh0KSkuX19wcm90b19fPW1lLnByb3RvdHlwZToobnVsbD09PWUmJihlPW5ldyBtZSh0KSksZS5sZW5ndGg9dCksZX1mdW5jdGlvbiBtZShlLHQsbil7aWYoIShtZS5UWVBFRF9BUlJBWV9TVVBQT1JUfHx0aGlzIGluc3RhbmNlb2YgbWUpKXJldHVybiBuZXcgbWUoZSx0LG4pO2lmKCJudW1iZXIiPT10eXBlb2YgZSl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigiSWYgZW5jb2RpbmcgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmciKTtyZXR1cm4gU2UodGhpcyxlKX1yZXR1cm4gd2UodGhpcyxlLHQsbil9ZnVuY3Rpb24gd2UoZSx0LG4scil7aWYoIm51bWJlciI9PXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKTtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZ0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/ZnVuY3Rpb24oZSx0LG4scil7aWYodC5ieXRlTGVuZ3RoLG48MHx8dC5ieXRlTGVuZ3RoPG4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIidvZmZzZXQnIGlzIG91dCBvZiBib3VuZHMiKTtpZih0LmJ5dGVMZW5ndGg8bisocnx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIidsZW5ndGgnIGlzIG91dCBvZiBib3VuZHMiKTt0PXZvaWQgMD09PW4mJnZvaWQgMD09PXI/bmV3IFVpbnQ4QXJyYXkodCk6dm9pZCAwPT09cj9uZXcgVWludDhBcnJheSh0LG4pOm5ldyBVaW50OEFycmF5KHQsbixyKTttZS5UWVBFRF9BUlJBWV9TVVBQT1JUPyhlPXQpLl9fcHJvdG9fXz1tZS5wcm90b3R5cGU6ZT1iZShlLHQpO3JldHVybiBlfShlLHQsbixyKToic3RyaW5nIj09dHlwZW9mIHQ/ZnVuY3Rpb24oZSx0LG4peyJzdHJpbmciPT10eXBlb2YgbiYmIiIhPT1ufHwobj0idXRmOCIpO2lmKCFtZS5pc0VuY29kaW5nKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoJyJlbmNvZGluZyIgbXVzdCBiZSBhIHZhbGlkIHN0cmluZyBlbmNvZGluZycpO3ZhciByPTB8UmUodCxuKSxpPShlPXllKGUscikpLndyaXRlKHQsbik7aSE9PXImJihlPWUuc2xpY2UoMCxpKSk7cmV0dXJuIGV9KGUsdCxuKTpmdW5jdGlvbihlLHQpe2lmKGtlKHQpKXt2YXIgbj0wfEVlKHQubGVuZ3RoKTtyZXR1cm4gMD09PShlPXllKGUsbikpLmxlbmd0aHx8dC5jb3B5KGUsMCwwLG4pLGV9aWYodCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmdC5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcnx8Imxlbmd0aCJpbiB0KXJldHVybiJudW1iZXIiIT10eXBlb2YgdC5sZW5ndGh8fChyPXQubGVuZ3RoKSE9cj95ZShlLDApOmJlKGUsdCk7aWYoIkJ1ZmZlciI9PT10LnR5cGUmJnBlKHQuZGF0YSkpcmV0dXJuIGJlKGUsdC5kYXRhKX12YXIgcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgYXJyYXktbGlrZSBvYmplY3QuIil9KGUsdCl9ZnVuY3Rpb24gX2UoZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJyk7aWYoZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmUnKX1mdW5jdGlvbiBTZShlLHQpe2lmKF9lKHQpLGU9eWUoZSx0PDA/MDowfEVlKHQpKSwhbWUuVFlQRURfQVJSQVlfU1VQUE9SVClmb3IodmFyIG49MDtuPHQ7KytuKWVbbl09MDtyZXR1cm4gZX1mdW5jdGlvbiBiZShlLHQpe3ZhciBuPXQubGVuZ3RoPDA/MDowfEVlKHQubGVuZ3RoKTtlPXllKGUsbik7Zm9yKHZhciByPTA7cjxuO3IrPTEpZVtyXT0yNTUmdFtyXTtyZXR1cm4gZX1mdW5jdGlvbiBFZShlKXtpZihlPj12ZSgpKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4Iit2ZSgpLnRvU3RyaW5nKDE2KSsiIGJ5dGVzIik7cmV0dXJuIDB8ZX1mdW5jdGlvbiBrZShlKXtyZXR1cm4hKG51bGw9PWV8fCFlLl9pc0J1ZmZlcil9ZnVuY3Rpb24gUmUoZSx0KXtpZihrZShlKSlyZXR1cm4gZS5sZW5ndGg7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmImZ1bmN0aW9uIj09dHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldyYmKEFycmF5QnVmZmVyLmlzVmlldyhlKXx8ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSlyZXR1cm4gZS5ieXRlTGVuZ3RoOyJzdHJpbmciIT10eXBlb2YgZSYmKGU9IiIrZSk7dmFyIG49ZS5sZW5ndGg7aWYoMD09PW4pcmV0dXJuIDA7Zm9yKHZhciByPSExOzspc3dpdGNoKHQpe2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIG47Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlIHZvaWQgMDpyZXR1cm4gWmUoZSkubGVuZ3RoO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gMipuO2Nhc2UiaGV4IjpyZXR1cm4gbj4+PjE7Y2FzZSJiYXNlNjQiOnJldHVybiBRZShlKS5sZW5ndGg7ZGVmYXVsdDppZihyKXJldHVybiBaZShlKS5sZW5ndGg7dD0oIiIrdCkudG9Mb3dlckNhc2UoKSxyPSEwfX1mdW5jdGlvbiBUZShlLHQsbil7dmFyIHI9ITE7aWYoKHZvaWQgMD09PXR8fHQ8MCkmJih0PTApLHQ+dGhpcy5sZW5ndGgpcmV0dXJuIiI7aWYoKHZvaWQgMD09PW58fG4+dGhpcy5sZW5ndGgpJiYobj10aGlzLmxlbmd0aCksbjw9MClyZXR1cm4iIjtpZigobj4+Pj0wKTw9KHQ+Pj49MCkpcmV0dXJuIiI7Zm9yKGV8fChlPSJ1dGY4Iik7Oylzd2l0Y2goZSl7Y2FzZSJoZXgiOnJldHVybiBCZSh0aGlzLHQsbik7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gamUodGhpcyx0LG4pO2Nhc2UiYXNjaWkiOnJldHVybiB4ZSh0aGlzLHQsbik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gcWUodGhpcyx0LG4pO2Nhc2UiYmFzZTY0IjpyZXR1cm4gTWUodGhpcyx0LG4pO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gRmUodGhpcyx0LG4pO2RlZmF1bHQ6aWYocil0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK2UpO2U9KGUrIiIpLnRvTG93ZXJDYXNlKCkscj0hMH19ZnVuY3Rpb24gQWUoZSx0LG4pe3ZhciByPWVbdF07ZVt0XT1lW25dLGVbbl09cn1mdW5jdGlvbiBDZShlLHQsbixyLGkpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4tMTtpZigic3RyaW5nIj09dHlwZW9mIG4/KHI9bixuPTApOm4+MjE0NzQ4MzY0Nz9uPTIxNDc0ODM2NDc6bjwtMjE0NzQ4MzY0OCYmKG49LTIxNDc0ODM2NDgpLG49K24saXNOYU4obikmJihuPWk/MDplLmxlbmd0aC0xKSxuPDAmJihuPWUubGVuZ3RoK24pLG4+PWUubGVuZ3RoKXtpZihpKXJldHVybi0xO249ZS5sZW5ndGgtMX1lbHNlIGlmKG48MCl7aWYoIWkpcmV0dXJuLTE7bj0wfWlmKCJzdHJpbmciPT10eXBlb2YgdCYmKHQ9bWUuZnJvbSh0LHIpKSxrZSh0KSlyZXR1cm4gMD09PXQubGVuZ3RoPy0xOkRlKGUsdCxuLHIsaSk7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiB0Jj0yNTUsbWUuVFlQRURfQVJSQVlfU1VQUE9SVCYmImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/aT9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoZSx0LG4pOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoZSx0LG4pOkRlKGUsW3RdLG4scixpKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKX1mdW5jdGlvbiBEZShlLHQsbixyLGkpe3ZhciBvLHM9MSxhPWUubGVuZ3RoLGM9dC5sZW5ndGg7aWYodm9pZCAwIT09ciYmKCJ1Y3MyIj09PShyPVN0cmluZyhyKS50b0xvd2VyQ2FzZSgpKXx8InVjcy0yIj09PXJ8fCJ1dGYxNmxlIj09PXJ8fCJ1dGYtMTZsZSI9PT1yKSl7aWYoZS5sZW5ndGg8Mnx8dC5sZW5ndGg8MilyZXR1cm4tMTtzPTIsYS89MixjLz0yLG4vPTJ9ZnVuY3Rpb24gdShlLHQpe3JldHVybiAxPT09cz9lW3RdOmUucmVhZFVJbnQxNkJFKHQqcyl9aWYoaSl7dmFyIGw9LTE7Zm9yKG89bjtvPGE7bysrKWlmKHUoZSxvKT09PXUodCwtMT09PWw/MDpvLWwpKXtpZigtMT09PWwmJihsPW8pLG8tbCsxPT09YylyZXR1cm4gbCpzfWVsc2UtMSE9PWwmJihvLT1vLWwpLGw9LTF9ZWxzZSBmb3IobitjPmEmJihuPWEtYyksbz1uO28+PTA7by0tKXtmb3IodmFyIGQ9ITAsaD0wO2g8YztoKyspaWYodShlLG8raCkhPT11KHQsaCkpe2Q9ITE7YnJlYWt9aWYoZClyZXR1cm4gb31yZXR1cm4tMX1mdW5jdGlvbiBQZShlLHQsbixyKXtuPU51bWJlcihuKXx8MDt2YXIgaT1lLmxlbmd0aC1uO3I/KHI9TnVtYmVyKHIpKT5pJiYocj1pKTpyPWk7dmFyIG89dC5sZW5ndGg7aWYobyUyIT0wKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyIpO3I+by8yJiYocj1vLzIpO2Zvcih2YXIgcz0wO3M8cjsrK3Mpe3ZhciBhPXBhcnNlSW50KHQuc3Vic3RyKDIqcywyKSwxNik7aWYoaXNOYU4oYSkpcmV0dXJuIHM7ZVtuK3NdPWF9cmV0dXJuIHN9ZnVuY3Rpb24gT2UoZSx0LG4scil7cmV0dXJuIGV0KFplKHQsZS5sZW5ndGgtbiksZSxuLHIpfWZ1bmN0aW9uIEllKGUsdCxuLHIpe3JldHVybiBldChmdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0wO248ZS5sZW5ndGg7KytuKXQucHVzaCgyNTUmZS5jaGFyQ29kZUF0KG4pKTtyZXR1cm4gdH0odCksZSxuLHIpfWZ1bmN0aW9uIFVlKGUsdCxuLHIpe3JldHVybiBJZShlLHQsbixyKX1mdW5jdGlvbiBMZShlLHQsbixyKXtyZXR1cm4gZXQoUWUodCksZSxuLHIpfWZ1bmN0aW9uIEhlKGUsdCxuLHIpe3JldHVybiBldChmdW5jdGlvbihlLHQpe2Zvcih2YXIgbixyLGksbz1bXSxzPTA7czxlLmxlbmd0aCYmISgodC09Mik8MCk7KytzKXI9KG49ZS5jaGFyQ29kZUF0KHMpKT4+OCxpPW4lMjU2LG8ucHVzaChpKSxvLnB1c2gocik7cmV0dXJuIG99KHQsZS5sZW5ndGgtbiksZSxuLHIpfWZ1bmN0aW9uIE1lKGUsdCxuKXtyZXR1cm4gMD09PXQmJm49PT1lLmxlbmd0aD9sZShlKTpsZShlLnNsaWNlKHQsbikpfWZ1bmN0aW9uIGplKGUsdCxuKXtuPU1hdGgubWluKGUubGVuZ3RoLG4pO2Zvcih2YXIgcj1bXSxpPXQ7aTxuOyl7dmFyIG8scyxhLGMsdT1lW2ldLGw9bnVsbCxkPXU+MjM5PzQ6dT4yMjM/Mzp1PjE5MT8yOjE7aWYoaStkPD1uKXN3aXRjaChkKXtjYXNlIDE6dTwxMjgmJihsPXUpO2JyZWFrO2Nhc2UgMjoxMjg9PSgxOTImKG89ZVtpKzFdKSkmJihjPSgzMSZ1KTw8Nnw2MyZvKT4xMjcmJihsPWMpO2JyZWFrO2Nhc2UgMzpvPWVbaSsxXSxzPWVbaSsyXSwxMjg9PSgxOTImbykmJjEyOD09KDE5MiZzKSYmKGM9KDE1JnUpPDwxMnwoNjMmbyk8PDZ8NjMmcyk+MjA0NyYmKGM8NTUyOTZ8fGM+NTczNDMpJiYobD1jKTticmVhaztjYXNlIDQ6bz1lW2krMV0scz1lW2krMl0sYT1lW2krM10sMTI4PT0oMTkyJm8pJiYxMjg9PSgxOTImcykmJjEyOD09KDE5MiZhKSYmKGM9KDE1JnUpPDwxOHwoNjMmbyk8PDEyfCg2MyZzKTw8Nnw2MyZhKT42NTUzNSYmYzwxMTE0MTEyJiYobD1jKX1udWxsPT09bD8obD02NTUzMyxkPTEpOmw+NjU1MzUmJihsLT02NTUzNixyLnB1c2gobD4+PjEwJjEwMjN8NTUyOTYpLGw9NTYzMjB8MTAyMyZsKSxyLnB1c2gobCksaSs9ZH1yZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGg7aWYodDw9TmUpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUpO3ZhciBuPSIiLHI9MDtmb3IoO3I8dDspbis9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZS5zbGljZShyLHIrPU5lKSk7cmV0dXJuIG59KHIpfW1lLnBvb2xTaXplPTgxOTIsbWUuX2F1Z21lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19fPW1lLnByb3RvdHlwZSxlfSxtZS5mcm9tPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gd2UobnVsbCxlLHQsbil9LG1lLlRZUEVEX0FSUkFZX1NVUFBPUlQmJihtZS5wcm90b3R5cGUuX19wcm90b19fPVVpbnQ4QXJyYXkucHJvdG90eXBlLG1lLl9fcHJvdG9fXz1VaW50OEFycmF5KSxtZS5hbGxvYz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBfZSh0KSx0PD0wP3llKGUsdCk6dm9pZCAwIT09bj8ic3RyaW5nIj09dHlwZW9mIHI/eWUoZSx0KS5maWxsKG4scik6eWUoZSx0KS5maWxsKG4pOnllKGUsdCl9KG51bGwsZSx0LG4pfSxtZS5hbGxvY1Vuc2FmZT1mdW5jdGlvbihlKXtyZXR1cm4gU2UobnVsbCxlKX0sbWUuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe3JldHVybiBTZShudWxsLGUpfSxtZS5pc0J1ZmZlcj10dCxtZS5jb21wYXJlPWZ1bmN0aW9uKGUsdCl7aWYoIWtlKGUpfHwha2UodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIG11c3QgYmUgQnVmZmVycyIpO2lmKGU9PT10KXJldHVybiAwO2Zvcih2YXIgbj1lLmxlbmd0aCxyPXQubGVuZ3RoLGk9MCxvPU1hdGgubWluKG4scik7aTxvOysraSlpZihlW2ldIT09dFtpXSl7bj1lW2ldLHI9dFtpXTticmVha31yZXR1cm4gbjxyPy0xOnI8bj8xOjB9LG1lLmlzRW5jb2Rpbmc9ZnVuY3Rpb24oZSl7c3dpdGNoKFN0cmluZyhlKS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LG1lLmNvbmNhdD1mdW5jdGlvbihlLHQpe2lmKCFwZShlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PWUubGVuZ3RoKXJldHVybiBtZS5hbGxvYygwKTt2YXIgbjtpZih2b2lkIDA9PT10KWZvcih0PTAsbj0wO248ZS5sZW5ndGg7KytuKXQrPWVbbl0ubGVuZ3RoO3ZhciByPW1lLmFsbG9jVW5zYWZlKHQpLGk9MDtmb3Iobj0wO248ZS5sZW5ndGg7KytuKXt2YXIgbz1lW25dO2lmKCFrZShvKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7by5jb3B5KHIsaSksaSs9by5sZW5ndGh9cmV0dXJuIHJ9LG1lLmJ5dGVMZW5ndGg9UmUsbWUucHJvdG90eXBlLl9pc0J1ZmZlcj0hMCxtZS5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSUyIT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz0yKUFlKHRoaXMsdCx0KzEpO3JldHVybiB0aGlzfSxtZS5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSU0IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz00KUFlKHRoaXMsdCx0KzMpLEFlKHRoaXMsdCsxLHQrMik7cmV0dXJuIHRoaXN9LG1lLnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTghPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTgpQWUodGhpcyx0LHQrNyksQWUodGhpcyx0KzEsdCs2KSxBZSh0aGlzLHQrMix0KzUpLEFlKHRoaXMsdCszLHQrNCk7cmV0dXJuIHRoaXN9LG1lLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBlPTB8dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT1lPyIiOjA9PT1hcmd1bWVudHMubGVuZ3RoP2plKHRoaXMsMCxlKTpUZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LG1lLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7aWYoIWtlKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PWV8fDA9PT1tZS5jb21wYXJlKHRoaXMsZSl9LG1lLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIGU9IiI7cmV0dXJuIHRoaXMubGVuZ3RoPjAmJihlPXRoaXMudG9TdHJpbmcoImhleCIsMCw1MCkubWF0Y2goLy57Mn0vZykuam9pbigiICIpLHRoaXMubGVuZ3RoPjUwJiYoZSs9IiAuLi4gIikpLCI8QnVmZmVyICIrZSsiPiJ9LG1lLnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKGUsdCxuLHIsaSl7aWYoIWtlKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtpZih2b2lkIDA9PT10JiYodD0wKSx2b2lkIDA9PT1uJiYobj1lP2UubGVuZ3RoOjApLHZvaWQgMD09PXImJihyPTApLHZvaWQgMD09PWkmJihpPXRoaXMubGVuZ3RoKSx0PDB8fG4+ZS5sZW5ndGh8fHI8MHx8aT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYocj49aSYmdD49bilyZXR1cm4gMDtpZihyPj1pKXJldHVybi0xO2lmKHQ+PW4pcmV0dXJuIDE7aWYodGhpcz09PWUpcmV0dXJuIDA7Zm9yKHZhciBvPShpPj4+PTApLShyPj4+PTApLHM9KG4+Pj49MCktKHQ+Pj49MCksYT1NYXRoLm1pbihvLHMpLGM9dGhpcy5zbGljZShyLGkpLHU9ZS5zbGljZSh0LG4pLGw9MDtsPGE7KytsKWlmKGNbbF0hPT11W2xdKXtvPWNbbF0scz11W2xdO2JyZWFrfXJldHVybiBvPHM/LTE6czxvPzE6MH0sbWUucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihlLHQsbil9LG1lLnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gQ2UodGhpcyxlLHQsbiwhMCl9LG1lLnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIENlKHRoaXMsZSx0LG4sITEpfSxtZS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZSx0LG4scil7aWYodm9pZCAwPT09dClyPSJ1dGY4IixuPXRoaXMubGVuZ3RoLHQ9MDtlbHNlIGlmKHZvaWQgMD09PW4mJiJzdHJpbmciPT10eXBlb2YgdClyPXQsbj10aGlzLmxlbmd0aCx0PTA7ZWxzZXtpZighaXNGaW5pdGUodCkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO3R8PTAsaXNGaW5pdGUobik/KG58PTAsdm9pZCAwPT09ciYmKHI9InV0ZjgiKSk6KHI9bixuPXZvaWQgMCl9dmFyIGk9dGhpcy5sZW5ndGgtdDtpZigodm9pZCAwPT09bnx8bj5pKSYmKG49aSksZS5sZW5ndGg+MCYmKG48MHx8dDwwKXx8dD50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMiKTtyfHwocj0idXRmOCIpO2Zvcih2YXIgbz0hMTs7KXN3aXRjaChyKXtjYXNlImhleCI6cmV0dXJuIFBlKHRoaXMsZSx0LG4pO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIE9lKHRoaXMsZSx0LG4pO2Nhc2UiYXNjaWkiOnJldHVybiBJZSh0aGlzLGUsdCxuKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBVZSh0aGlzLGUsdCxuKTtjYXNlImJhc2U2NCI6cmV0dXJuIExlKHRoaXMsZSx0LG4pO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gSGUodGhpcyxlLHQsbik7ZGVmYXVsdDppZihvKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrcik7cj0oIiIrcikudG9Mb3dlckNhc2UoKSxvPSEwfX0sbWUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07dmFyIE5lPTQwOTY7ZnVuY3Rpb24geGUoZSx0LG4pe3ZhciByPSIiO249TWF0aC5taW4oZS5sZW5ndGgsbik7Zm9yKHZhciBpPXQ7aTxuOysraSlyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDEyNyZlW2ldKTtyZXR1cm4gcn1mdW5jdGlvbiBxZShlLHQsbil7dmFyIHI9IiI7bj1NYXRoLm1pbihlLmxlbmd0aCxuKTtmb3IodmFyIGk9dDtpPG47KytpKXIrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtpXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gQmUoZSx0LG4pe3ZhciByPWUubGVuZ3RoOyghdHx8dDwwKSYmKHQ9MCksKCFufHxuPDB8fG4+cikmJihuPXIpO2Zvcih2YXIgaT0iIixvPXQ7bzxuOysrbylpKz0kZShlW29dKTtyZXR1cm4gaX1mdW5jdGlvbiBGZShlLHQsbil7Zm9yKHZhciByPWUuc2xpY2UodCxuKSxpPSIiLG89MDtvPHIubGVuZ3RoO28rPTIpaSs9U3RyaW5nLmZyb21DaGFyQ29kZShyW29dKzI1NipyW28rMV0pO3JldHVybiBpfWZ1bmN0aW9uIEtlKGUsdCxuKXtpZihlJTEhPTB8fGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0IGlzIG5vdCB1aW50Iik7aWYoZSt0Pm4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlRyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgiKX1mdW5jdGlvbiBKZShlLHQsbixyLGksbyl7aWYoIWtlKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWZmZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZih0Pml8fHQ8byl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInZhbHVlIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJyk7aWYobityPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBXZShlLHQsbixyKXt0PDAmJih0PTY1NTM1K3QrMSk7Zm9yKHZhciBpPTAsbz1NYXRoLm1pbihlLmxlbmd0aC1uLDIpO2k8bzsrK2kpZVtuK2ldPSh0JjI1NTw8OCoocj9pOjEtaSkpPj4+OCoocj9pOjEtaSl9ZnVuY3Rpb24gemUoZSx0LG4scil7dDwwJiYodD00Mjk0OTY3Mjk1K3QrMSk7Zm9yKHZhciBpPTAsbz1NYXRoLm1pbihlLmxlbmd0aC1uLDQpO2k8bzsrK2kpZVtuK2ldPXQ+Pj44KihyP2k6My1pKSYyNTV9ZnVuY3Rpb24gVmUoZSx0LG4scixpLG8pe2lmKG4rcj5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYobjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBZZShlLHQsbixyLGkpe3JldHVybiBpfHxWZShlLDAsbiw0KSxoZShlLHQsbixyLDIzLDQpLG4rNH1mdW5jdGlvbiBHZShlLHQsbixyLGkpe3JldHVybiBpfHxWZShlLDAsbiw4KSxoZShlLHQsbixyLDUyLDgpLG4rOH1tZS5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPXRoaXMubGVuZ3RoO2lmKChlPX5+ZSk8MD8oZSs9cik8MCYmKGU9MCk6ZT5yJiYoZT1yKSwodD12b2lkIDA9PT10P3I6fn50KTwwPyh0Kz1yKTwwJiYodD0wKTp0PnImJih0PXIpLHQ8ZSYmKHQ9ZSksbWUuVFlQRURfQVJSQVlfU1VQUE9SVCkobj10aGlzLnN1YmFycmF5KGUsdCkpLl9fcHJvdG9fXz1tZS5wcm90b3R5cGU7ZWxzZXt2YXIgaT10LWU7bj1uZXcgbWUoaSx2b2lkIDApO2Zvcih2YXIgbz0wO288aTsrK28pbltvXT10aGlzW28rZV19cmV0dXJuIG59LG1lLnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKGUsdCxuKXtlfD0wLHR8PTAsbnx8S2UoZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIHI9dGhpc1tlXSxpPTEsbz0wOysrbzx0JiYoaSo9MjU2KTspcis9dGhpc1tlK29dKmk7cmV0dXJuIHJ9LG1lLnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKGUsdCxuKXtlfD0wLHR8PTAsbnx8S2UoZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIHI9dGhpc1tlKy0tdF0saT0xO3Q+MCYmKGkqPTI1Nik7KXIrPXRoaXNbZSstLXRdKmk7cmV0dXJuIHJ9LG1lLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8S2UoZSwxLHRoaXMubGVuZ3RoKSx0aGlzW2VdfSxtZS5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEtlKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXXx0aGlzW2UrMV08PDh9LG1lLnByb3RvdHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8S2UoZSwyLHRoaXMubGVuZ3RoKSx0aGlzW2VdPDw4fHRoaXNbZSsxXX0sbWUucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxLZShlLDQsdGhpcy5sZW5ndGgpLCh0aGlzW2VdfHRoaXNbZSsxXTw8OHx0aGlzW2UrMl08PDE2KSsxNjc3NzIxNip0aGlzW2UrM119LG1lLnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8S2UoZSw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW2VdKyh0aGlzW2UrMV08PDE2fHRoaXNbZSsyXTw8OHx0aGlzW2UrM10pfSxtZS5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKGUsdCxuKXtlfD0wLHR8PTAsbnx8S2UoZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIHI9dGhpc1tlXSxpPTEsbz0wOysrbzx0JiYoaSo9MjU2KTspcis9dGhpc1tlK29dKmk7cmV0dXJuIHI+PShpKj0xMjgpJiYoci09TWF0aC5wb3coMiw4KnQpKSxyfSxtZS5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKGUsdCxuKXtlfD0wLHR8PTAsbnx8S2UoZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIHI9dCxpPTEsbz10aGlzW2UrLS1yXTtyPjAmJihpKj0yNTYpOylvKz10aGlzW2UrLS1yXSppO3JldHVybiBvPj0oaSo9MTI4KSYmKG8tPU1hdGgucG93KDIsOCp0KSksb30sbWUucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEtlKGUsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbZV0/LTEqKDI1NS10aGlzW2VdKzEpOnRoaXNbZV19LG1lLnByb3RvdHlwZS5yZWFkSW50MTZMRT1mdW5jdGlvbihlLHQpe3R8fEtlKGUsMix0aGlzLmxlbmd0aCk7dmFyIG49dGhpc1tlXXx0aGlzW2UrMV08PDg7cmV0dXJuIDMyNzY4Jm4/NDI5NDkwMTc2MHxuOm59LG1lLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbihlLHQpe3R8fEtlKGUsMix0aGlzLmxlbmd0aCk7dmFyIG49dGhpc1tlKzFdfHRoaXNbZV08PDg7cmV0dXJuIDMyNzY4Jm4/NDI5NDkwMTc2MHxuOm59LG1lLnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxLZShlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTZ8dGhpc1tlKzNdPDwyNH0sbWUucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEtlKGUsNCx0aGlzLmxlbmd0aCksdGhpc1tlXTw8MjR8dGhpc1tlKzFdPDwxNnx0aGlzW2UrMl08PDh8dGhpc1tlKzNdfSxtZS5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8S2UoZSw0LHRoaXMubGVuZ3RoKSxkZSh0aGlzLGUsITAsMjMsNCl9LG1lLnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxLZShlLDQsdGhpcy5sZW5ndGgpLGRlKHRoaXMsZSwhMSwyMyw0KX0sbWUucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxLZShlLDgsdGhpcy5sZW5ndGgpLGRlKHRoaXMsZSwhMCw1Miw4KX0sbWUucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxLZShlLDgsdGhpcy5sZW5ndGgpLGRlKHRoaXMsZSwhMSw1Miw4KX0sbWUucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKGUsdCxuLHIpeyhlPStlLHR8PTAsbnw9MCxyKXx8SmUodGhpcyxlLHQsbixNYXRoLnBvdygyLDgqbiktMSwwKTt2YXIgaT0xLG89MDtmb3IodGhpc1t0XT0yNTUmZTsrK288biYmKGkqPTI1Nik7KXRoaXNbdCtvXT1lL2kmMjU1O3JldHVybiB0K259LG1lLnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbihlLHQsbixyKXsoZT0rZSx0fD0wLG58PTAscil8fEplKHRoaXMsZSx0LG4sTWF0aC5wb3coMiw4Km4pLTEsMCk7dmFyIGk9bi0xLG89MTtmb3IodGhpc1t0K2ldPTI1NSZlOy0taT49MCYmKG8qPTI1Nik7KXRoaXNbdCtpXT1lL28mMjU1O3JldHVybiB0K259LG1lLnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fEplKHRoaXMsZSx0LDEsMjU1LDApLG1lLlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLHRoaXNbdF09MjU1JmUsdCsxfSxtZS5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxKZSh0aGlzLGUsdCwyLDY1NTM1LDApLG1lLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTpXZSh0aGlzLGUsdCwhMCksdCsyfSxtZS5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxKZSh0aGlzLGUsdCwyLDY1NTM1LDApLG1lLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTpXZSh0aGlzLGUsdCwhMSksdCsyfSxtZS5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxKZSh0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksbWUuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0KzNdPWU+Pj4yNCx0aGlzW3QrMl09ZT4+PjE2LHRoaXNbdCsxXT1lPj4+OCx0aGlzW3RdPTI1NSZlKTp6ZSh0aGlzLGUsdCwhMCksdCs0fSxtZS5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxKZSh0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksbWUuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTp6ZSh0aGlzLGUsdCwhMSksdCs0fSxtZS5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbihlLHQsbixyKXtpZihlPStlLHR8PTAsIXIpe3ZhciBpPU1hdGgucG93KDIsOCpuLTEpO0plKHRoaXMsZSx0LG4saS0xLC1pKX12YXIgbz0wLHM9MSxhPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytvPG4mJihzKj0yNTYpOyllPDAmJjA9PT1hJiYwIT09dGhpc1t0K28tMV0mJihhPTEpLHRoaXNbdCtvXT0oZS9zPj4wKS1hJjI1NTtyZXR1cm4gdCtufSxtZS5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbihlLHQsbixyKXtpZihlPStlLHR8PTAsIXIpe3ZhciBpPU1hdGgucG93KDIsOCpuLTEpO0plKHRoaXMsZSx0LG4saS0xLC1pKX12YXIgbz1uLTEscz0xLGE9MDtmb3IodGhpc1t0K29dPTI1NSZlOy0tbz49MCYmKHMqPTI1Nik7KWU8MCYmMD09PWEmJjAhPT10aGlzW3QrbysxXSYmKGE9MSksdGhpc1t0K29dPShlL3M+PjApLWEmMjU1O3JldHVybiB0K259LG1lLnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8SmUodGhpcyxlLHQsMSwxMjcsLTEyOCksbWUuVFlQRURfQVJSQVlfU1VQUE9SVHx8KGU9TWF0aC5mbG9vcihlKSksZTwwJiYoZT0yNTUrZSsxKSx0aGlzW3RdPTI1NSZlLHQrMX0sbWUucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxKZSh0aGlzLGUsdCwyLDMyNzY3LC0zMjc2OCksbWUuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgpOldlKHRoaXMsZSx0LCEwKSx0KzJ9LG1lLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8SmUodGhpcyxlLHQsMiwzMjc2NywtMzI3NjgpLG1lLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTpXZSh0aGlzLGUsdCwhMSksdCsyfSxtZS5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fEplKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksbWUuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrM109ZT4+PjI0KTp6ZSh0aGlzLGUsdCwhMCksdCs0fSxtZS5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fEplKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksZTwwJiYoZT00Mjk0OTY3Mjk1K2UrMSksbWUuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTp6ZSh0aGlzLGUsdCwhMSksdCs0fSxtZS5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gWWUodGhpcyxlLHQsITAsbil9LG1lLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBZZSh0aGlzLGUsdCwhMSxuKX0sbWUucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBHZSh0aGlzLGUsdCwhMCxuKX0sbWUucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBHZSh0aGlzLGUsdCwhMSxuKX0sbWUucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZSx0LG4scil7aWYobnx8KG49MCkscnx8MD09PXJ8fChyPXRoaXMubGVuZ3RoKSx0Pj1lLmxlbmd0aCYmKHQ9ZS5sZW5ndGgpLHR8fCh0PTApLHI+MCYmcjxuJiYocj1uKSxyPT09bilyZXR1cm4gMDtpZigwPT09ZS5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZih0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInRhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMiKTtpZihuPDB8fG4+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzIik7aWYocjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO3I+dGhpcy5sZW5ndGgmJihyPXRoaXMubGVuZ3RoKSxlLmxlbmd0aC10PHItbiYmKHI9ZS5sZW5ndGgtdCtuKTt2YXIgaSxvPXItbjtpZih0aGlzPT09ZSYmbjx0JiZ0PHIpZm9yKGk9by0xO2k+PTA7LS1pKWVbaSt0XT10aGlzW2krbl07ZWxzZSBpZihvPDFlM3x8IW1lLlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKGk9MDtpPG87KytpKWVbaSt0XT10aGlzW2krbl07ZWxzZSBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChlLHRoaXMuc3ViYXJyYXkobixuK28pLHQpO3JldHVybiBvfSxtZS5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbihlLHQsbixyKXtpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdD8ocj10LHQ9MCxuPXRoaXMubGVuZ3RoKToic3RyaW5nIj09dHlwZW9mIG4mJihyPW4sbj10aGlzLmxlbmd0aCksMT09PWUubGVuZ3RoKXt2YXIgaT1lLmNoYXJDb2RlQXQoMCk7aTwyNTYmJihlPWkpfWlmKHZvaWQgMCE9PXImJiJzdHJpbmciIT10eXBlb2Ygcil0aHJvdyBuZXcgVHlwZUVycm9yKCJlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nIik7aWYoInN0cmluZyI9PXR5cGVvZiByJiYhbWUuaXNFbmNvZGluZyhyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3IpfWVsc2UibnVtYmVyIj09dHlwZW9mIGUmJihlJj0yNTUpO2lmKHQ8MHx8dGhpcy5sZW5ndGg8dHx8dGhpcy5sZW5ndGg8bil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7aWYobjw9dClyZXR1cm4gdGhpczt2YXIgbztpZih0Pj4+PTAsbj12b2lkIDA9PT1uP3RoaXMubGVuZ3RoOm4+Pj4wLGV8fChlPTApLCJudW1iZXIiPT10eXBlb2YgZSlmb3Iobz10O288bjsrK28pdGhpc1tvXT1lO2Vsc2V7dmFyIHM9a2UoZSk/ZTpaZShuZXcgbWUoZSxyKS50b1N0cmluZygpKSxhPXMubGVuZ3RoO2ZvcihvPTA7bzxuLXQ7KytvKXRoaXNbbyt0XT1zW28lYV19cmV0dXJuIHRoaXN9O3ZhciBYZT0vW14rXC8wLTlBLVphLXotX10vZztmdW5jdGlvbiAkZShlKXtyZXR1cm4gZTwxNj8iMCIrZS50b1N0cmluZygxNik6ZS50b1N0cmluZygxNil9ZnVuY3Rpb24gWmUoZSx0KXt2YXIgbjt0PXR8fDEvMDtmb3IodmFyIHI9ZS5sZW5ndGgsaT1udWxsLG89W10scz0wO3M8cjsrK3Mpe2lmKChuPWUuY2hhckNvZGVBdChzKSk+NTUyOTUmJm48NTczNDQpe2lmKCFpKXtpZihuPjU2MzE5KXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYocysxPT09cil7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWk9bjtjb250aW51ZX1pZihuPDU2MzIwKXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSksaT1uO2NvbnRpbnVlfW49NjU1MzYrKGktNTUyOTY8PDEwfG4tNTYzMjApfWVsc2UgaSYmKHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2lmKGk9bnVsbCxuPDEyOCl7aWYoKHQtPTEpPDApYnJlYWs7by5wdXNoKG4pfWVsc2UgaWYobjwyMDQ4KXtpZigodC09Mik8MClicmVhaztvLnB1c2gobj4+NnwxOTIsNjMmbnwxMjgpfWVsc2UgaWYobjw2NTUzNil7aWYoKHQtPTMpPDApYnJlYWs7by5wdXNoKG4+PjEyfDIyNCxuPj42JjYzfDEyOCw2MyZufDEyOCl9ZWxzZXtpZighKG48MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigodC09NCk8MClicmVhaztvLnB1c2gobj4+MTh8MjQwLG4+PjEyJjYzfDEyOCxuPj42JjYzfDEyOCw2MyZufDEyOCl9fXJldHVybiBvfWZ1bmN0aW9uIFFlKGUpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLHM7YWV8fGNlKCk7dmFyIGE9ZS5sZW5ndGg7aWYoYSU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7bz0iPSI9PT1lW2EtMl0/MjoiPSI9PT1lW2EtMV0/MTowLHM9bmV3IHNlKDMqYS80LW8pLHI9bz4wP2EtNDphO3ZhciBjPTA7Zm9yKHQ9MCxuPTA7dDxyO3QrPTQsbis9MylpPW9lW2UuY2hhckNvZGVBdCh0KV08PDE4fG9lW2UuY2hhckNvZGVBdCh0KzEpXTw8MTJ8b2VbZS5jaGFyQ29kZUF0KHQrMildPDw2fG9lW2UuY2hhckNvZGVBdCh0KzMpXSxzW2MrK109aT4+MTYmMjU1LHNbYysrXT1pPj44JjI1NSxzW2MrK109MjU1Jmk7cmV0dXJuIDI9PT1vPyhpPW9lW2UuY2hhckNvZGVBdCh0KV08PDJ8b2VbZS5jaGFyQ29kZUF0KHQrMSldPj40LHNbYysrXT0yNTUmaSk6MT09PW8mJihpPW9lW2UuY2hhckNvZGVBdCh0KV08PDEwfG9lW2UuY2hhckNvZGVBdCh0KzEpXTw8NHxvZVtlLmNoYXJDb2RlQXQodCsyKV0+PjIsc1tjKytdPWk+PjgmMjU1LHNbYysrXT0yNTUmaSksc30oZnVuY3Rpb24oZSl7aWYoKGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbT9lLnRyaW0oKTplLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0oZSkucmVwbGFjZShYZSwiIikpLmxlbmd0aDwyKXJldHVybiIiO2Zvcig7ZS5sZW5ndGglNCE9MDspZSs9Ij0iO3JldHVybiBlfShlKSl9ZnVuY3Rpb24gZXQoZSx0LG4scil7Zm9yKHZhciBpPTA7aTxyJiYhKGkrbj49dC5sZW5ndGh8fGk+PWUubGVuZ3RoKTsrK2kpdFtpK25dPWVbaV07cmV0dXJuIGl9ZnVuY3Rpb24gdHQoZSl7cmV0dXJuIG51bGwhPWUmJighIWUuX2lzQnVmZmVyfHxudChlKXx8ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGUucmVhZEZsb2F0TEUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLnNsaWNlJiZudChlLnNsaWNlKDAsMCkpfShlKSl9ZnVuY3Rpb24gbnQoZSl7cmV0dXJuISFlLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihlKX12YXIgcnQ9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQnVmZmVyOm1lLElOU1BFQ1RfTUFYX0JZVEVTOjUwLFNsb3dCdWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuK2UhPWUmJihlPTApLG1lLmFsbG9jKCtlKX0saXNCdWZmZXI6dHQsa01heExlbmd0aDpnZX0pLGl0PW5lO2Z1bmN0aW9uIG90KGUsdCxuLHIsaSl7RXJyb3IuY2FsbCh0aGlzKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9KG5ldyBFcnJvcikuc3RhY2ssdGhpcy5tZXNzYWdlPWUsdGhpcy5uYW1lPSJBeGlvc0Vycm9yIix0JiYodGhpcy5jb2RlPXQpLG4mJih0aGlzLmNvbmZpZz1uKSxyJiYodGhpcy5yZXF1ZXN0PXIpLGkmJih0aGlzLnJlc3BvbnNlPWkpfWl0LmluaGVyaXRzKG90LEVycm9yLHt0b0pTT046ZnVuY3Rpb24oKXtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixudW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhpcy5maWxlTmFtZSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6dGhpcy5jb25maWcsY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMucmVzcG9uc2UmJnRoaXMucmVzcG9uc2Uuc3RhdHVzP3RoaXMucmVzcG9uc2Uuc3RhdHVzOm51bGx9fX0pO3ZhciBzdD1vdC5wcm90b3R5cGUsYXQ9e307WyJFUlJfQkFEX09QVElPTl9WQUxVRSIsIkVSUl9CQURfT1BUSU9OIiwiRUNPTk5BQk9SVEVEIiwiRVRJTUVET1VUIiwiRVJSX05FVFdPUksiLCJFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTIiwiRVJSX0RFUFJFQ0FURUQiLCJFUlJfQkFEX1JFU1BPTlNFIiwiRVJSX0JBRF9SRVFVRVNUIiwiRVJSX0NBTkNFTEVEIiwiRVJSX05PVF9TVVBQT1JUIiwiRVJSX0lOVkFMSURfVVJMIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7YXRbZV09e3ZhbHVlOmV9fSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG90LGF0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoc3QsImlzQXhpb3NFcnJvciIse3ZhbHVlOiEwfSksb3QuZnJvbT1mdW5jdGlvbihlLHQsbixyLGksbyl7dmFyIHM9T2JqZWN0LmNyZWF0ZShzdCk7cmV0dXJuIGl0LnRvRmxhdE9iamVjdChlLHMsKGZ1bmN0aW9uKGUpe3JldHVybiBlIT09RXJyb3IucHJvdG90eXBlfSkpLG90LmNhbGwocyxlLm1lc3NhZ2UsdCxuLHIsaSkscy5jYXVzZT1lLHMubmFtZT1lLm5hbWUsbyYmT2JqZWN0LmFzc2lnbihzLG8pLHN9O3ZhciBjdD1vdCx1dD0ib2JqZWN0Ij09dHlwZW9mIHNlbGY/c2VsZi5Gb3JtRGF0YTp3aW5kb3cuRm9ybURhdGEsbHQ9bmUsZHQ9Y3QsaHQ9dXQ7ZnVuY3Rpb24gZnQoZSl7cmV0dXJuIGx0LmlzUGxhaW5PYmplY3QoZSl8fGx0LmlzQXJyYXkoZSl9ZnVuY3Rpb24gcHQoZSl7cmV0dXJuIGx0LmVuZHNXaXRoKGUsIltdIik/ZS5zbGljZSgwLC0yKTplfWZ1bmN0aW9uIGd0KGUsdCxuKXtyZXR1cm4gZT9lLmNvbmNhdCh0KS5tYXAoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9cHQoZSksIW4mJnQ/IlsiK2UrIl0iOmV9KSkuam9pbihuPyIuIjoiIik6dH12YXIgdnQ9bHQudG9GbGF0T2JqZWN0KGx0LHt9LG51bGwsKGZ1bmN0aW9uKGUpe3JldHVybi9eaXNbQS1aXS8udGVzdChlKX0pKTt2YXIgeXQ9ZnVuY3Rpb24oZSx0LG4pe2lmKCFsdC5pc09iamVjdChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QiKTt0PXR8fG5ldyhodHx8Rm9ybURhdGEpO3ZhciByLGk9KG49bHQudG9GbGF0T2JqZWN0KG4se21ldGFUb2tlbnM6ITAsZG90czohMSxpbmRleGVzOiExfSwhMSwoZnVuY3Rpb24oZSx0KXtyZXR1cm4hbHQuaXNVbmRlZmluZWQodFtlXSl9KSkpLm1ldGFUb2tlbnMsbz1uLnZpc2l0b3J8fGwscz1uLmRvdHMsYT1uLmluZGV4ZXMsYz0obi5CbG9ifHwidW5kZWZpbmVkIiE9dHlwZW9mIEJsb2ImJkJsb2IpJiYoKHI9dCkmJmx0LmlzRnVuY3Rpb24oci5hcHBlbmQpJiYiRm9ybURhdGEiPT09cltTeW1ib2wudG9TdHJpbmdUYWddJiZyW1N5bWJvbC5pdGVyYXRvcl0pO2lmKCFsdC5pc0Z1bmN0aW9uKG8pKXRocm93IG5ldyBUeXBlRXJyb3IoInZpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uIik7ZnVuY3Rpb24gdShlKXtpZihudWxsPT09ZSlyZXR1cm4iIjtpZihsdC5pc0RhdGUoZSkpcmV0dXJuIGUudG9JU09TdHJpbmcoKTtpZighYyYmbHQuaXNCbG9iKGUpKXRocm93IG5ldyBkdCgiQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4iKTtyZXR1cm4gbHQuaXNBcnJheUJ1ZmZlcihlKXx8bHQuaXNUeXBlZEFycmF5KGUpP2MmJiJmdW5jdGlvbiI9PXR5cGVvZiBCbG9iP25ldyBCbG9iKFtlXSk6bWUuZnJvbShlKTplfWZ1bmN0aW9uIGwoZSxuLHIpe3ZhciBvPWU7aWYoZSYmIXImJiJvYmplY3QiPT10eXBlb2YgZSlpZihsdC5lbmRzV2l0aChuLCJ7fSIpKW49aT9uOm4uc2xpY2UoMCwtMiksZT1KU09OLnN0cmluZ2lmeShlKTtlbHNlIGlmKGx0LmlzQXJyYXkoZSkmJmZ1bmN0aW9uKGUpe3JldHVybiBsdC5pc0FycmF5KGUpJiYhZS5zb21lKGZ0KX0oZSl8fGx0LmlzRmlsZUxpc3QoZSl8fGx0LmVuZHNXaXRoKG4sIltdIikmJihvPWx0LnRvQXJyYXkoZSkpKXJldHVybiBuPXB0KG4pLG8uZm9yRWFjaCgoZnVuY3Rpb24oZSxyKXshbHQuaXNVbmRlZmluZWQoZSkmJm51bGwhPT1lJiZ0LmFwcGVuZCghMD09PWE/Z3QoW25dLHIscyk6bnVsbD09PWE/bjpuKyJbXSIsdShlKSl9KSksITE7cmV0dXJuISFmdChlKXx8KHQuYXBwZW5kKGd0KHIsbixzKSx1KGUpKSwhMSl9dmFyIGQ9W10saD1PYmplY3QuYXNzaWduKHZ0LHtkZWZhdWx0VmlzaXRvcjpsLGNvbnZlcnRWYWx1ZTp1LGlzVmlzaXRhYmxlOmZ0fSk7aWYoIWx0LmlzT2JqZWN0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoImRhdGEgbXVzdCBiZSBhbiBvYmplY3QiKTtyZXR1cm4gZnVuY3Rpb24gZShuLHIpe2lmKCFsdC5pc1VuZGVmaW5lZChuKSl7aWYoLTEhPT1kLmluZGV4T2YobikpdGhyb3cgRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAiK3Iuam9pbigiLiIpKTtkLnB1c2gobiksbHQuZm9yRWFjaChuLChmdW5jdGlvbihuLGkpeyEwPT09KCEobHQuaXNVbmRlZmluZWQobil8fG51bGw9PT1uKSYmby5jYWxsKHQsbixsdC5pc1N0cmluZyhpKT9pLnRyaW0oKTppLHIsaCkpJiZlKG4scj9yLmNvbmNhdChpKTpbaV0pfSkpLGQucG9wKCl9fShlKSx0fSxtdD15dDtmdW5jdGlvbiB3dChlKXt2YXIgdD17IiEiOiIlMjEiLCInIjoiJTI3IiwiKCI6IiUyOCIsIikiOiIlMjkiLCJ+IjoiJTdFIiwiJTIwIjoiKyIsIiUwMCI6IlwwIn07cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKC9bISdcKFwpfl18JTIwfCUwMC9nLChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pKX1mdW5jdGlvbiBfdChlLHQpe3RoaXMuX3BhaXJzPVtdLGUmJm10KGUsdGhpcyx0KX12YXIgU3Q9X3QucHJvdG90eXBlO1N0LmFwcGVuZD1mdW5jdGlvbihlLHQpe3RoaXMuX3BhaXJzLnB1c2goW2UsdF0pfSxTdC50b1N0cmluZz1mdW5jdGlvbihlKXt2YXIgdD1lP2Z1bmN0aW9uKHQpe3JldHVybiBlLmNhbGwodGhpcyx0LHd0KX06d3Q7cmV0dXJuIHRoaXMuX3BhaXJzLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQoZVswXSkrIj0iK3QoZVsxXSl9KSwiIikuam9pbigiJiIpfTt2YXIgYnQ9X3QsRXQ9bmUsa3Q9YnQ7ZnVuY3Rpb24gUnQoZSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIikucmVwbGFjZSgvJTVCL2dpLCJbIikucmVwbGFjZSgvJTVEL2dpLCJdIil9dmFyIFR0PWZ1bmN0aW9uKGUsdCxuKXtpZighdClyZXR1cm4gZTt2YXIgcj1lLmluZGV4T2YoIiMiKTstMSE9PXImJihlPWUuc2xpY2UoMCxyKSk7dmFyIGksbz1uJiZuLmVuY29kZXx8UnQscz1uJiZuLnNlcmlhbGl6ZTtyZXR1cm4oaT1zP3ModCxuKTpFdC5pc1VSTFNlYXJjaFBhcmFtcyh0KT90LnRvU3RyaW5nKCk6bmV3IGt0KHQsbikudG9TdHJpbmcobykpJiYoZSs9KC0xPT09ZS5pbmRleE9mKCI/Iik/Ij8iOiImIikraSksZX0sQXQ9bmU7ZnVuY3Rpb24gQ3QoKXt0aGlzLmhhbmRsZXJzPVtdfUN0LnByb3RvdHlwZS51c2U9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDplLHJlamVjdGVkOnQsc3luY2hyb25vdXM6ISFuJiZuLnN5bmNocm9ub3VzLHJ1bldoZW46bj9uLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9LEN0LnByb3RvdHlwZS5lamVjdD1mdW5jdGlvbihlKXt0aGlzLmhhbmRsZXJzW2VdJiYodGhpcy5oYW5kbGVyc1tlXT1udWxsKX0sQ3QucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5oYW5kbGVycyYmKHRoaXMuaGFuZGxlcnM9W10pfSxDdC5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihlKXtBdC5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsKGZ1bmN0aW9uKHQpe251bGwhPT10JiZlKHQpfSkpfTt2YXIgRHQ9Q3Q7ZnVuY3Rpb24gUHQoKXt0aHJvdyBuZXcgRXJyb3IoInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBPdCgpe3Rocm93IG5ldyBFcnJvcigiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9dmFyIEl0PVB0LFV0PU90O2Z1bmN0aW9uIEx0KGUpe2lmKEl0PT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dChlLDApO2lmKChJdD09PVB0fHwhSXQpJiZzZXRUaW1lb3V0KXJldHVybiBJdD1zZXRUaW1lb3V0LHNldFRpbWVvdXQoZSwwKTt0cnl7cmV0dXJuIEl0KGUsMCl9Y2F0Y2godCl7dHJ5e3JldHVybiBJdC5jYWxsKG51bGwsZSwwKX1jYXRjaCh0KXtyZXR1cm4gSXQuY2FsbCh0aGlzLGUsMCl9fX0iZnVuY3Rpb24iPT10eXBlb2YgcmUuc2V0VGltZW91dCYmKEl0PXNldFRpbWVvdXQpLCJmdW5jdGlvbiI9PXR5cGVvZiByZS5jbGVhclRpbWVvdXQmJihVdD1jbGVhclRpbWVvdXQpO3ZhciBIdCxNdD1bXSxqdD0hMSxOdD0tMTtmdW5jdGlvbiB4dCgpe2p0JiZIdCYmKGp0PSExLEh0Lmxlbmd0aD9NdD1IdC5jb25jYXQoTXQpOk50PS0xLE10Lmxlbmd0aCYmcXQoKSl9ZnVuY3Rpb24gcXQoKXtpZighanQpe3ZhciBlPUx0KHh0KTtqdD0hMDtmb3IodmFyIHQ9TXQubGVuZ3RoO3Q7KXtmb3IoSHQ9TXQsTXQ9W107KytOdDx0OylIdCYmSHRbTnRdLnJ1bigpO050PS0xLHQ9TXQubGVuZ3RofUh0PW51bGwsanQ9ITEsZnVuY3Rpb24oZSl7aWYoVXQ9PT1jbGVhclRpbWVvdXQpcmV0dXJuIGNsZWFyVGltZW91dChlKTtpZigoVXQ9PT1PdHx8IVV0KSYmY2xlYXJUaW1lb3V0KXJldHVybiBVdD1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KGUpO3RyeXtVdChlKX1jYXRjaCh0KXt0cnl7cmV0dXJuIFV0LmNhbGwobnVsbCxlKX1jYXRjaCh0KXtyZXR1cm4gVXQuY2FsbCh0aGlzLGUpfX19KGUpfX1mdW5jdGlvbiBCdChlLHQpe3RoaXMuZnVuPWUsdGhpcy5hcnJheT10fUJ0LnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfTtmdW5jdGlvbiBGdCgpe312YXIgS3Q9RnQsSnQ9RnQsV3Q9RnQsenQ9RnQsVnQ9RnQsWXQ9RnQsR3Q9RnQ7dmFyIFh0PXJlLnBlcmZvcm1hbmNlfHx7fSwkdD1YdC5ub3d8fFh0Lm1vek5vd3x8WHQubXNOb3d8fFh0Lm9Ob3d8fFh0LndlYmtpdE5vd3x8ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX07dmFyIFp0PW5ldyBEYXRlO3ZhciBRdD17bmV4dFRpY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoYXJndW1lbnRzLmxlbmd0aD4xKWZvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspdFtuLTFdPWFyZ3VtZW50c1tuXTtNdC5wdXNoKG5ldyBCdChlLHQpKSwxIT09TXQubGVuZ3RofHxqdHx8THQocXQpfSx0aXRsZToiYnJvd3NlciIsYnJvd3NlcjohMCxlbnY6e30sYXJndjpbXSx2ZXJzaW9uOiIiLHZlcnNpb25zOnt9LG9uOkt0LGFkZExpc3RlbmVyOkp0LG9uY2U6V3Qsb2ZmOnp0LHJlbW92ZUxpc3RlbmVyOlZ0LHJlbW92ZUFsbExpc3RlbmVyczpZdCxlbWl0Okd0LGJpbmRpbmc6ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCIpfSxjd2Q6ZnVuY3Rpb24oKXtyZXR1cm4iLyJ9LGNoZGlyOmZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkIil9LHVtYXNrOmZ1bmN0aW9uKCl7cmV0dXJuIDB9LGhydGltZTpmdW5jdGlvbihlKXt2YXIgdD0uMDAxKiR0LmNhbGwoWHQpLG49TWF0aC5mbG9vcih0KSxyPU1hdGguZmxvb3IodCUxKjFlOSk7cmV0dXJuIGUmJihuLT1lWzBdLChyLT1lWzFdKTwwJiYobi0tLHIrPTFlOSkpLFtuLHJdfSxwbGF0Zm9ybToiYnJvd3NlciIscmVsZWFzZTp7fSxjb25maWc6e30sdXB0aW1lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlLVp0KS8xZTN9fSxlbj1RdCx0bj1uZSxubj1mdW5jdGlvbihlLHQpe3RuLmZvckVhY2goZSwoZnVuY3Rpb24obixyKXtyIT09dCYmci50b1VwcGVyQ2FzZSgpPT09dC50b1VwcGVyQ2FzZSgpJiYoZVt0XT1uLGRlbGV0ZSBlW3JdKX0pKX0scm49e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9LG9uPXtpc0Jyb3dzZXI6ITAsY2xhc3Nlczp7VVJMU2VhcmNoUGFyYW1zOiJ1bmRlZmluZWQiIT10eXBlb2YgVVJMU2VhcmNoUGFyYW1zP1VSTFNlYXJjaFBhcmFtczpidCxGb3JtRGF0YTpGb3JtRGF0YSxCbG9iOkJsb2J9LHByb3RvY29sczpbImh0dHAiLCJodHRwcyIsImZpbGUiLCJibG9iIiwidXJsIiwiZGF0YSJdfSxzbj1uZSxhbj15dCxjbj1vbix1bj1uZTt2YXIgbG49ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLG4scixpKXt2YXIgbz1lW2krK107aWYoIl9fcHJvdG9fXyI9PT1vKXJldHVybiEwO3ZhciBzPU51bWJlci5pc0Zpbml0ZSgrbyksYT1pPj1lLmxlbmd0aDtyZXR1cm4gbz0hbyYmdW4uaXNBcnJheShyKT9yLmxlbmd0aDpvLGE/KHVuLmhhc093blByb3BlcnR5KHIsbyk/cltvXT1bcltvXSxuXTpyW29dPW4sIXMpOihyW29dJiZ1bi5pc09iamVjdChyW29dKXx8KHJbb109W10pLHQoZSxuLHJbb10saSkmJnVuLmlzQXJyYXkocltvXSkmJihyW29dPWZ1bmN0aW9uKGUpe3ZhciB0LG4scj17fSxpPU9iamVjdC5rZXlzKGUpLG89aS5sZW5ndGg7Zm9yKHQ9MDt0PG87dCsrKXJbbj1pW3RdXT1lW25dO3JldHVybiByfShyW29dKSksIXMpfWlmKHVuLmlzRm9ybURhdGEoZSkmJnVuLmlzRnVuY3Rpb24oZS5lbnRyaWVzKSl7dmFyIG49e307cmV0dXJuIHVuLmZvckVhY2hFbnRyeShlLChmdW5jdGlvbihlLHIpe3QoZnVuY3Rpb24oZSl7cmV0dXJuIHVuLm1hdGNoQWxsKC9cdyt8XFsoXHcqKV0vZyxlKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiJbXSI9PT1lWzBdPyIiOmVbMV18fGVbMF19KSl9KGUpLHIsbiwwKX0pKSxufXJldHVybiBudWxsfSxkbj1jdCxobj1uZSxmbj1obi5pc1N0YW5kYXJkQnJvd3NlckVudigpP3t3cml0ZTpmdW5jdGlvbihlLHQsbixyLGksbyl7dmFyIHM9W107cy5wdXNoKGUrIj0iK2VuY29kZVVSSUNvbXBvbmVudCh0KSksaG4uaXNOdW1iZXIobikmJnMucHVzaCgiZXhwaXJlcz0iK25ldyBEYXRlKG4pLnRvR01UU3RyaW5nKCkpLGhuLmlzU3RyaW5nKHIpJiZzLnB1c2goInBhdGg9IityKSxobi5pc1N0cmluZyhpKSYmcy5wdXNoKCJkb21haW49IitpKSwhMD09PW8mJnMucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPXMuam9pbigiOyAiKX0scmVhZDpmdW5jdGlvbihlKXt2YXIgdD1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xccyopKCIrZSsiKT0oW147XSopIikpO3JldHVybiB0P2RlY29kZVVSSUNvbXBvbmVudCh0WzNdKTpudWxsfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dGhpcy53cml0ZShlLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlOmZ1bmN0aW9uKCl7fSxyZWFkOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHJlbW92ZTpmdW5jdGlvbigpe319LHBuPWZ1bmN0aW9uKGUpe3JldHVybi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QoZSl9LGduPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/ZS5yZXBsYWNlKC9cLz9cLyQvLCIiKSsiLyIrdC5yZXBsYWNlKC9eXC8rLywiIik6ZX0sdm49ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSFwbih0KTtyZXR1cm4gZSYmKHJ8fCExPT09bik/Z24oZSx0KTp0fSx5bj1uZSxtbj1bImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdLHduPW5lLF9uPXduLmlzU3RhbmRhcmRCcm93c2VyRW52KCk/ZnVuY3Rpb24oKXt2YXIgZSx0PS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7ZnVuY3Rpb24gcihlKXt2YXIgcj1lO3JldHVybiB0JiYobi5zZXRBdHRyaWJ1dGUoImhyZWYiLHIpLHI9bi5ocmVmKSxuLnNldEF0dHJpYnV0ZSgiaHJlZiIscikse2hyZWY6bi5ocmVmLHByb3RvY29sOm4ucHJvdG9jb2w/bi5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6bi5ob3N0LHNlYXJjaDpuLnNlYXJjaD9uLnNlYXJjaC5yZXBsYWNlKC9eXD8vLCIiKToiIixoYXNoOm4uaGFzaD9uLmhhc2gucmVwbGFjZSgvXiMvLCIiKToiIixob3N0bmFtZTpuLmhvc3RuYW1lLHBvcnQ6bi5wb3J0LHBhdGhuYW1lOiIvIj09PW4ucGF0aG5hbWUuY2hhckF0KDApP24ucGF0aG5hbWU6Ii8iK24ucGF0aG5hbWV9fXJldHVybiBlPXIod2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKHQpe3ZhciBuPXduLmlzU3RyaW5nKHQpP3IodCk6dDtyZXR1cm4gbi5wcm90b2NvbD09PWUucHJvdG9jb2wmJm4uaG9zdD09PWUuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sU249Y3Q7ZnVuY3Rpb24gYm4oZSx0LG4pe1NuLmNhbGwodGhpcyxudWxsPT1lPyJjYW5jZWxlZCI6ZSxTbi5FUlJfQ0FOQ0VMRUQsdCxuKSx0aGlzLm5hbWU9IkNhbmNlbGVkRXJyb3IifW5lLmluaGVyaXRzKGJuLFNuLHtfX0NBTkNFTF9fOiEwfSk7dmFyIEVuPWJuLGtuPW5lLFJuPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztuLnN0YXR1cyYmciYmIXIobi5zdGF0dXMpP3QobmV3IGRuKCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrbi5zdGF0dXMsW2RuLkVSUl9CQURfUkVRVUVTVCxkbi5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKG4uc3RhdHVzLzEwMCktNF0sbi5jb25maWcsbi5yZXF1ZXN0LG4pKTplKG4pfSxUbj1mbixBbj1UdCxDbj12bixEbj1mdW5jdGlvbihlKXt2YXIgdCxuLHIsaT17fTtyZXR1cm4gZT8oeW4uZm9yRWFjaChlLnNwbGl0KCJcbiIpLChmdW5jdGlvbihlKXtpZihyPWUuaW5kZXhPZigiOiIpLHQ9eW4udHJpbShlLnNsaWNlKDAscikpLnRvTG93ZXJDYXNlKCksbj15bi50cmltKGUuc2xpY2UocisxKSksdCl7aWYoaVt0XSYmbW4uaW5kZXhPZih0KT49MClyZXR1cm47aVt0XT0ic2V0LWNvb2tpZSI9PT10PyhpW3RdP2lbdF06W10pLmNvbmNhdChbbl0pOmlbdF0/aVt0XSsiLCAiK246bn19KSksaSk6aX0sUG49X24sT249cm4sSW49Y3QsVW49RW4sTG49ZnVuY3Rpb24oZSl7dmFyIHQ9L14oWy0rXHddezEsMjV9KSg6P1wvXC98OikvLmV4ZWMoZSk7cmV0dXJuIHQmJnRbMV18fCIifSxIbj1vbixNbj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQsbil7dmFyIHIsaT1lLmRhdGEsbz1lLmhlYWRlcnMscz1lLnJlc3BvbnNlVHlwZSxhPWUud2l0aFhTUkZUb2tlbjtmdW5jdGlvbiBjKCl7ZS5jYW5jZWxUb2tlbiYmZS5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShyKSxlLnNpZ25hbCYmZS5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHIpfWtuLmlzRm9ybURhdGEoaSkmJmtuLmlzU3RhbmRhcmRCcm93c2VyRW52KCkmJmRlbGV0ZSBvWyJDb250ZW50LVR5cGUiXTt2YXIgdT1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoZS5hdXRoKXt2YXIgbD1lLmF1dGgudXNlcm5hbWV8fCIiLGQ9ZS5hdXRoLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChlLmF1dGgucGFzc3dvcmQpKToiIjtvLkF1dGhvcml6YXRpb249IkJhc2ljICIrYnRvYShsKyI6IitkKX12YXIgaD1DbihlLmJhc2VVUkwsZS51cmwsZS5hbGxvd0Fic29sdXRlVXJscyk7ZnVuY3Rpb24gZigpe2lmKHUpe3ZhciByPSJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gdT9Ebih1LmdldEFsbFJlc3BvbnNlSGVhZGVycygpKTpudWxsLGk9e2RhdGE6cyYmInRleHQiIT09cyYmImpzb24iIT09cz91LnJlc3BvbnNlOnUucmVzcG9uc2VUZXh0LHN0YXR1czp1LnN0YXR1cyxzdGF0dXNUZXh0OnUuc3RhdHVzVGV4dCxoZWFkZXJzOnIsY29uZmlnOmUscmVxdWVzdDp1fTtSbigoZnVuY3Rpb24oZSl7dChlKSxjKCl9KSwoZnVuY3Rpb24oZSl7bihlKSxjKCl9KSxpKSx1PW51bGx9fWlmKHUub3BlbihlLm1ldGhvZC50b1VwcGVyQ2FzZSgpLEFuKGgsZS5wYXJhbXMsZS5wYXJhbXNTZXJpYWxpemVyKSwhMCksdS50aW1lb3V0PWUudGltZW91dCwib25sb2FkZW5kImluIHU/dS5vbmxvYWRlbmQ9Zjp1Lm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe3UmJjQ9PT11LnJlYWR5U3RhdGUmJigwIT09dS5zdGF0dXN8fHUucmVzcG9uc2VVUkwmJjA9PT11LnJlc3BvbnNlVVJMLmluZGV4T2YoImZpbGU6IikpJiZzZXRUaW1lb3V0KGYpfSx1Lm9uYWJvcnQ9ZnVuY3Rpb24oKXt1JiYobihuZXcgSW4oIlJlcXVlc3QgYWJvcnRlZCIsSW4uRUNPTk5BQk9SVEVELGUsdSkpLHU9bnVsbCl9LHUub25lcnJvcj1mdW5jdGlvbigpe24obmV3IEluKCJOZXR3b3JrIEVycm9yIixJbi5FUlJfTkVUV09SSyxlLHUpKSx1PW51bGx9LHUub250aW1lb3V0PWZ1bmN0aW9uKCl7dmFyIHQ9ZS50aW1lb3V0PyJ0aW1lb3V0IG9mICIrZS50aW1lb3V0KyJtcyBleGNlZWRlZCI6InRpbWVvdXQgZXhjZWVkZWQiLHI9ZS50cmFuc2l0aW9uYWx8fE9uO2UudGltZW91dEVycm9yTWVzc2FnZSYmKHQ9ZS50aW1lb3V0RXJyb3JNZXNzYWdlKSxuKG5ldyBJbih0LHIuY2xhcmlmeVRpbWVvdXRFcnJvcj9Jbi5FVElNRURPVVQ6SW4uRUNPTk5BQk9SVEVELGUsdSkpLHU9bnVsbH0sa24uaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSYmKGEmJmtuLmlzRnVuY3Rpb24oYSkmJihhPWEoZSkpLGF8fCExIT09YSYmUG4oaCkpKXt2YXIgcD1lLnhzcmZIZWFkZXJOYW1lJiZlLnhzcmZDb29raWVOYW1lJiZUbi5yZWFkKGUueHNyZkNvb2tpZU5hbWUpO3AmJihvW2UueHNyZkhlYWRlck5hbWVdPXApfSJzZXRSZXF1ZXN0SGVhZGVyImluIHUmJmtuLmZvckVhY2gobywoZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT1pJiYiY29udGVudC10eXBlIj09PXQudG9Mb3dlckNhc2UoKT9kZWxldGUgb1t0XTp1LnNldFJlcXVlc3RIZWFkZXIodCxlKX0pKSxrbi5pc1VuZGVmaW5lZChlLndpdGhDcmVkZW50aWFscyl8fCh1LndpdGhDcmVkZW50aWFscz0hIWUud2l0aENyZWRlbnRpYWxzKSxzJiYianNvbiIhPT1zJiYodS5yZXNwb25zZVR5cGU9ZS5yZXNwb25zZVR5cGUpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLm9uRG93bmxvYWRQcm9ncmVzcyYmdS5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZS5vbkRvd25sb2FkUHJvZ3Jlc3MpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLm9uVXBsb2FkUHJvZ3Jlc3MmJnUudXBsb2FkJiZ1LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZS5vblVwbG9hZFByb2dyZXNzKSwoZS5jYW5jZWxUb2tlbnx8ZS5zaWduYWwpJiYocj1mdW5jdGlvbih0KXt1JiYobighdHx8dC50eXBlP25ldyBVbihudWxsLGUsdSk6dCksdS5hYm9ydCgpLHU9bnVsbCl9LGUuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKHIpLGUuc2lnbmFsJiYoZS5zaWduYWwuYWJvcnRlZD9yKCk6ZS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHIpKSksaXx8ITE9PT1pfHwwPT09aXx8IiI9PT1pfHwoaT1udWxsKTt2YXIgZz1MbihoKTtnJiYtMT09PUhuLnByb3RvY29scy5pbmRleE9mKGcpP24obmV3IEluKCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK2crIjoiLEluLkVSUl9CQURfUkVRVUVTVCxlKSk6dS5zZW5kKGkpfSkpfSxqbj1uZSxObj1ubix4bj1jdCxxbj15dCxCbj1mdW5jdGlvbihlLHQpe3JldHVybiBhbihlLG5ldyBjbi5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcyxPYmplY3QuYXNzaWduKHt2aXNpdG9yOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBjbi5pc05vZGUmJnNuLmlzQnVmZmVyKGUpPyh0aGlzLmFwcGVuZCh0LGUudG9TdHJpbmcoImJhc2U2NCIpKSwhMSk6ci5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx0KSl9LEZuPW9uLEtuPWxuLEpuPXsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIn07ZnVuY3Rpb24gV24oZSx0KXsham4uaXNVbmRlZmluZWQoZSkmJmpuLmlzVW5kZWZpbmVkKGVbIkNvbnRlbnQtVHlwZSJdKSYmKGVbIkNvbnRlbnQtVHlwZSJdPXQpfXZhciB6bixWbj17dHJhbnNpdGlvbmFsOnJuLGFkYXB0ZXI6KCgidW5kZWZpbmVkIiE9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0fHx2b2lkIDAhPT1lbiYmIltvYmplY3QgcHJvY2Vzc10iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGVuKSkmJih6bj1Nbiksem4pLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKGUsdCl7Tm4odCwiQWNjZXB0IiksTm4odCwiQ29udGVudC1UeXBlIik7dmFyIG4scj10JiZ0WyJDb250ZW50LVR5cGUiXXx8IiIsaT1yLmluZGV4T2YoImFwcGxpY2F0aW9uL2pzb24iKT4tMSxvPWpuLmlzT2JqZWN0KGUpO2lmKG8mJmpuLmlzSFRNTEZvcm0oZSkmJihlPW5ldyBGb3JtRGF0YShlKSksam4uaXNGb3JtRGF0YShlKSlyZXR1cm4gaT9KU09OLnN0cmluZ2lmeShLbihlKSk6ZTtpZihqbi5pc0FycmF5QnVmZmVyKGUpfHxqbi5pc0J1ZmZlcihlKXx8am4uaXNTdHJlYW0oZSl8fGpuLmlzRmlsZShlKXx8am4uaXNCbG9iKGUpKXJldHVybiBlO2lmKGpuLmlzQXJyYXlCdWZmZXJWaWV3KGUpKXJldHVybiBlLmJ1ZmZlcjtpZihqbi5pc1VSTFNlYXJjaFBhcmFtcyhlKSlyZXR1cm4gV24odCwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgiKSxlLnRvU3RyaW5nKCk7aWYobyl7aWYoLTEhPT1yLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpKXJldHVybiBCbihlLHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7aWYoKG49am4uaXNGaWxlTGlzdChlKSl8fHIuaW5kZXhPZigibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpPi0xKXt2YXIgcz10aGlzLmVudiYmdGhpcy5lbnYuRm9ybURhdGE7cmV0dXJuIHFuKG4/eyJmaWxlc1tdIjplfTplLHMmJm5ldyBzLHRoaXMuZm9ybVNlcmlhbGl6ZXIpfX1yZXR1cm4gb3x8aT8oV24odCwiYXBwbGljYXRpb24vanNvbiIpLGZ1bmN0aW9uKGUsdCxuKXtpZihqbi5pc1N0cmluZyhlKSl0cnl7cmV0dXJuKHR8fEpTT04ucGFyc2UpKGUpLGpuLnRyaW0oZSl9Y2F0Y2goZSl7aWYoIlN5bnRheEVycm9yIiE9PWUubmFtZSl0aHJvdyBlfXJldHVybihufHxKU09OLnN0cmluZ2lmeSkoZSl9KGUpKTplfV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKGUpe3ZhciB0PXRoaXMudHJhbnNpdGlvbmFsfHxWbi50cmFuc2l0aW9uYWwsbj10JiZ0LmZvcmNlZEpTT05QYXJzaW5nLHI9Impzb24iPT09dGhpcy5yZXNwb25zZVR5cGU7aWYoZSYmam4uaXNTdHJpbmcoZSkmJihuJiYhdGhpcy5yZXNwb25zZVR5cGV8fHIpKXt2YXIgaT0hKHQmJnQuc2lsZW50SlNPTlBhcnNpbmcpJiZyO3RyeXtyZXR1cm4gSlNPTi5wYXJzZShlKX1jYXRjaChlKXtpZihpKXtpZigiU3ludGF4RXJyb3IiPT09ZS5uYW1lKXRocm93IHhuLmZyb20oZSx4bi5FUlJfQkFEX1JFU1BPTlNFLHRoaXMsbnVsbCx0aGlzLnJlc3BvbnNlKTt0aHJvdyBlfX19cmV0dXJuIGV9XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6LTEsbWF4Qm9keUxlbmd0aDotMSxlbnY6e0Zvcm1EYXRhOkZuLmNsYXNzZXMuRm9ybURhdGEsQmxvYjpGbi5jbGFzc2VzLkJsb2J9LHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0yMDAmJmU8MzAwfSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIn19fTtqbi5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCJdLChmdW5jdGlvbihlKXtWbi5oZWFkZXJzW2VdPXt9fSkpLGpuLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSwoZnVuY3Rpb24oZSl7Vm4uaGVhZGVyc1tlXT1qbi5tZXJnZShKbil9KSk7dmFyIFluPVZuLEduPW5lLFhuPVluLCRuPWZ1bmN0aW9uKGUpe3JldHVybiEoIWV8fCFlLl9fQ0FOQ0VMX18pfSxabj1uZSxRbj1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT10aGlzfHxYbjtyZXR1cm4gR24uZm9yRWFjaChyLChmdW5jdGlvbihyKXtlPXIuY2FsbChpLGUsdCxuKX0pKSxlfSxlcj0kbix0cj1Zbixucj1Fbixycj1ubjtmdW5jdGlvbiBpcihlKXtpZihlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKSxlLnNpZ25hbCYmZS5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgbnJ9dmFyIG9yPW5lLHNyPWZ1bmN0aW9uKGUsdCl7dD10fHx7fTt2YXIgbj17fTtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIG9yLmlzUGxhaW5PYmplY3QoZSkmJm9yLmlzUGxhaW5PYmplY3QodCk/b3IubWVyZ2UoZSx0KTpvci5pc0VtcHR5T2JqZWN0KHQpP29yLm1lcmdlKHt9LGUpOm9yLmlzUGxhaW5PYmplY3QodCk/b3IubWVyZ2Uoe30sdCk6b3IuaXNBcnJheSh0KT90LnNsaWNlKCk6dH1mdW5jdGlvbiBpKG4pe3JldHVybiBvci5pc1VuZGVmaW5lZCh0W25dKT9vci5pc1VuZGVmaW5lZChlW25dKT92b2lkIDA6cih2b2lkIDAsZVtuXSk6cihlW25dLHRbbl0pfWZ1bmN0aW9uIG8oZSl7aWYoIW9yLmlzVW5kZWZpbmVkKHRbZV0pKXJldHVybiByKHZvaWQgMCx0W2VdKX1mdW5jdGlvbiBzKG4pe3JldHVybiBvci5pc1VuZGVmaW5lZCh0W25dKT9vci5pc1VuZGVmaW5lZChlW25dKT92b2lkIDA6cih2b2lkIDAsZVtuXSk6cih2b2lkIDAsdFtuXSl9ZnVuY3Rpb24gYShuKXtyZXR1cm4gbiBpbiB0P3IoZVtuXSx0W25dKTpuIGluIGU/cih2b2lkIDAsZVtuXSk6dm9pZCAwfXZhciBjPXt1cmw6byxtZXRob2Q6byxkYXRhOm8sYmFzZVVSTDpzLHRyYW5zZm9ybVJlcXVlc3Q6cyx0cmFuc2Zvcm1SZXNwb25zZTpzLHBhcmFtc1NlcmlhbGl6ZXI6cyx0aW1lb3V0OnMsdGltZW91dE1lc3NhZ2U6cyx3aXRoQ3JlZGVudGlhbHM6cyx3aXRoWFNSRlRva2VuOnMsYWRhcHRlcjpzLHJlc3BvbnNlVHlwZTpzLHhzcmZDb29raWVOYW1lOnMseHNyZkhlYWRlck5hbWU6cyxvblVwbG9hZFByb2dyZXNzOnMsb25Eb3dubG9hZFByb2dyZXNzOnMsZGVjb21wcmVzczpzLG1heENvbnRlbnRMZW5ndGg6cyxtYXhCb2R5TGVuZ3RoOnMsYmVmb3JlUmVkaXJlY3Q6cyx0cmFuc3BvcnQ6cyxodHRwQWdlbnQ6cyxodHRwc0FnZW50OnMsY2FuY2VsVG9rZW46cyxzb2NrZXRQYXRoOnMscmVzcG9uc2VFbmNvZGluZzpzLHZhbGlkYXRlU3RhdHVzOmF9O3JldHVybiBvci5mb3JFYWNoKE9iamVjdC5rZXlzKGUpLmNvbmNhdChPYmplY3Qua2V5cyh0KSksKGZ1bmN0aW9uKGUpe3ZhciB0PWNbZV18fGkscj10KGUpO29yLmlzVW5kZWZpbmVkKHIpJiZ0IT09YXx8KG5bZV09cil9KSksbn0sYXI9IjAuMzAuMCIsY3I9YXIsdXI9Y3QsbHI9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe2xyW2VdPWZ1bmN0aW9uKG4pe3JldHVybiB0eXBlb2Ygbj09PWV8fCJhIisodDwxPyJuICI6IiAiKStlfX0pKTt2YXIgZHI9e307bHIudHJhbnNpdGlvbmFsPWZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIltBeGlvcyB2IitjcisiXSBUcmFuc2l0aW9uYWwgb3B0aW9uICciK2UrIiciK3QrKG4/Ii4gIituOiIiKX1yZXR1cm4gZnVuY3Rpb24obixpLG8pe2lmKCExPT09ZSl0aHJvdyBuZXcgdXIocihpLCIgaGFzIGJlZW4gcmVtb3ZlZCIrKHQ/IiBpbiAiK3Q6IiIpKSx1ci5FUlJfREVQUkVDQVRFRCk7cmV0dXJuIHQmJiFkcltpXSYmKGRyW2ldPSEwLGNvbnNvbGUud2FybihyKGksIiBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYiK3QrIiBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSIpKSksIWV8fGUobixpLG8pfX07dmFyIGhyPXthc3NlcnRPcHRpb25zOmZ1bmN0aW9uKGUsdCxuKXtpZigib2JqZWN0IiE9dHlwZW9mIGUpdGhyb3cgbmV3IHVyKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Iix1ci5FUlJfQkFEX09QVElPTl9WQUxVRSk7Zm9yKHZhciByPU9iamVjdC5rZXlzKGUpLGk9ci5sZW5ndGg7aS0tID4wOyl7dmFyIG89cltpXSxzPXRbb107aWYocyl7dmFyIGE9ZVtvXSxjPXZvaWQgMD09PWF8fHMoYSxvLGUpO2lmKCEwIT09Yyl0aHJvdyBuZXcgdXIoIm9wdGlvbiAiK28rIiBtdXN0IGJlICIrYyx1ci5FUlJfQkFEX09QVElPTl9WQUxVRSl9ZWxzZSBpZighMCE9PW4pdGhyb3cgbmV3IHVyKCJVbmtub3duIG9wdGlvbiAiK28sdXIuRVJSX0JBRF9PUFRJT04pfX0sdmFsaWRhdG9yczpscn0sZnI9bmUscHI9VHQsZ3I9RHQsdnI9ZnVuY3Rpb24oZSl7cmV0dXJuIGlyKGUpLGUuaGVhZGVycz1lLmhlYWRlcnN8fHt9LGUuZGF0YT1Rbi5jYWxsKGUsZS5kYXRhLGUuaGVhZGVycyxudWxsLGUudHJhbnNmb3JtUmVxdWVzdCkscnIoZS5oZWFkZXJzLCJBY2NlcHQiKSxycihlLmhlYWRlcnMsIkNvbnRlbnQtVHlwZSIpLGUuaGVhZGVycz1abi5tZXJnZShlLmhlYWRlcnMuY29tbW9ufHx7fSxlLmhlYWRlcnNbZS5tZXRob2RdfHx7fSxlLmhlYWRlcnMpLFpuLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sKGZ1bmN0aW9uKHQpe2RlbGV0ZSBlLmhlYWRlcnNbdF19KSksKGUuYWRhcHRlcnx8dHIuYWRhcHRlcikoZSkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIGlyKGUpLHQuZGF0YT1Rbi5jYWxsKGUsdC5kYXRhLHQuaGVhZGVycyx0LnN0YXR1cyxlLnRyYW5zZm9ybVJlc3BvbnNlKSx0fSksKGZ1bmN0aW9uKHQpe3JldHVybiBlcih0KXx8KGlyKGUpLHQmJnQucmVzcG9uc2UmJih0LnJlc3BvbnNlLmRhdGE9UW4uY2FsbChlLHQucmVzcG9uc2UuZGF0YSx0LnJlc3BvbnNlLmhlYWRlcnMsdC5yZXNwb25zZS5zdGF0dXMsZS50cmFuc2Zvcm1SZXNwb25zZSkpKSxQcm9taXNlLnJlamVjdCh0KX0pKX0seXI9c3IsbXI9dm4sd3I9aHIsX3I9d3IudmFsaWRhdG9ycztmdW5jdGlvbiBTcihlKXt0aGlzLmRlZmF1bHRzPWUsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IGdyLHJlc3BvbnNlOm5ldyBncn19U3IucHJvdG90eXBlLnJlcXVlc3Q9ZnVuY3Rpb24oZSx0KXsic3RyaW5nIj09dHlwZW9mIGU/KHQ9dHx8e30pLnVybD1lOnQ9ZXx8e30sKHQ9eXIodGhpcy5kZWZhdWx0cyx0KSkubWV0aG9kP3QubWV0aG9kPXQubWV0aG9kLnRvTG93ZXJDYXNlKCk6dGhpcy5kZWZhdWx0cy5tZXRob2Q/dC5tZXRob2Q9dGhpcy5kZWZhdWx0cy5tZXRob2QudG9Mb3dlckNhc2UoKTp0Lm1ldGhvZD0iZ2V0Ijt2YXIgbj10LnRyYW5zaXRpb25hbDt2b2lkIDAhPT1uJiZ3ci5hc3NlcnRPcHRpb25zKG4se3NpbGVudEpTT05QYXJzaW5nOl9yLnRyYW5zaXRpb25hbChfci5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzpfci50cmFuc2l0aW9uYWwoX3IuYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjpfci50cmFuc2l0aW9uYWwoX3IuYm9vbGVhbil9LCExKTt2YXIgcj10LnBhcmFtc1NlcmlhbGl6ZXI7bnVsbCE9ciYmKGZyLmlzRnVuY3Rpb24ocik/dC5wYXJhbXNTZXJpYWxpemVyPXtzZXJpYWxpemU6cn06d3IuYXNzZXJ0T3B0aW9ucyhyLHtlbmNvZGU6X3IuZnVuY3Rpb24sc2VyaWFsaXplOl9yLmZ1bmN0aW9ufSwhMCkpO3ZhciBpPVtdLG89ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKChmdW5jdGlvbihlKXsiZnVuY3Rpb24iPT10eXBlb2YgZS5ydW5XaGVuJiYhMT09PWUucnVuV2hlbih0KXx8KG89byYmZS5zeW5jaHJvbm91cyxpLnVuc2hpZnQoZS5mdWxmaWxsZWQsZS5yZWplY3RlZCkpfSkpO3ZhciBzLGE9W107aWYodGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaCgoZnVuY3Rpb24oZSl7YS5wdXNoKGUuZnVsZmlsbGVkLGUucmVqZWN0ZWQpfSkpLCFvKXt2YXIgYz1bdnIsdm9pZCAwXTtmb3IoQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkoYyxpKSxjPWMuY29uY2F0KGEpLHM9UHJvbWlzZS5yZXNvbHZlKHQpO2MubGVuZ3RoOylzPXMudGhlbihjLnNoaWZ0KCksYy5zaGlmdCgpKTtyZXR1cm4gc31mb3IodmFyIHU9dDtpLmxlbmd0aDspe3ZhciBsPWkuc2hpZnQoKSxkPWkuc2hpZnQoKTt0cnl7dT1sKHUpfWNhdGNoKGUpe2QoZSk7YnJlYWt9fXRyeXtzPXZyKHUpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX1mb3IoO2EubGVuZ3RoOylzPXMudGhlbihhLnNoaWZ0KCksYS5zaGlmdCgpKTtyZXR1cm4gc30sU3IucHJvdG90eXBlLmdldFVyaT1mdW5jdGlvbihlKXtlPXlyKHRoaXMuZGVmYXVsdHMsZSk7dmFyIHQ9bXIoZS5iYXNlVVJMLGUudXJsLGUuYWxsb3dBYnNvbHV0ZVVybHMpO3JldHVybiBwcih0LGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplcil9LGZyLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLChmdW5jdGlvbihlKXtTci5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHlyKG58fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOihufHx7fSkuZGF0YX0pKX19KSksZnIuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLChmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQpe3JldHVybiBmdW5jdGlvbihuLHIsaSl7cmV0dXJuIHRoaXMucmVxdWVzdCh5cihpfHx7fSx7bWV0aG9kOmUsaGVhZGVyczp0P3siQ29udGVudC1UeXBlIjoibXVsdGlwYXJ0L2Zvcm0tZGF0YSJ9Ont9LHVybDpuLGRhdGE6cn0pKX19U3IucHJvdG90eXBlW2VdPXQoKSxTci5wcm90b3R5cGVbZSsiRm9ybSJdPXQoITApfSkpO3ZhciBicj1TcixFcj1FbjtmdW5jdGlvbiBrcihlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uIik7dmFyIHQ7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKChmdW5jdGlvbihlKXt0PWV9KSk7dmFyIG49dGhpczt0aGlzLnByb21pc2UudGhlbigoZnVuY3Rpb24oZSl7aWYobi5fbGlzdGVuZXJzKXtmb3IodmFyIHQ9bi5fbGlzdGVuZXJzLmxlbmd0aDt0LS0gPjA7KW4uX2xpc3RlbmVyc1t0XShlKTtuLl9saXN0ZW5lcnM9bnVsbH19KSksdGhpcy5wcm9taXNlLnRoZW49ZnVuY3Rpb24oZSl7dmFyIHQscj1uZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7bi5zdWJzY3JpYmUoZSksdD1lfSkpLnRoZW4oZSk7cmV0dXJuIHIuY2FuY2VsPWZ1bmN0aW9uKCl7bi51bnN1YnNjcmliZSh0KX0scn0sZSgoZnVuY3Rpb24oZSxyLGkpe24ucmVhc29ufHwobi5yZWFzb249bmV3IEVyKGUscixpKSx0KG4ucmVhc29uKSl9KSl9a3IucHJvdG90eXBlLnRocm93SWZSZXF1ZXN0ZWQ9ZnVuY3Rpb24oKXtpZih0aGlzLnJlYXNvbil0aHJvdyB0aGlzLnJlYXNvbn0sa3IucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbihlKXt0aGlzLnJlYXNvbj9lKHRoaXMucmVhc29uKTp0aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzLnB1c2goZSk6dGhpcy5fbGlzdGVuZXJzPVtlXX0sa3IucHJvdG90eXBlLnVuc3Vic2NyaWJlPWZ1bmN0aW9uKGUpe2lmKHRoaXMuX2xpc3RlbmVycyl7dmFyIHQ9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoZSk7LTEhPT10JiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKHQsMSl9fSxrci5zb3VyY2U9ZnVuY3Rpb24oKXt2YXIgZSx0PW5ldyBrcigoZnVuY3Rpb24odCl7ZT10fSkpO3JldHVybnt0b2tlbjp0LGNhbmNlbDplfX07dmFyIFJyPWtyLFRyPW5lLEFyPW5lLENyPVUsRHI9YnIsUHI9c3IsT3I9bG47dmFyIElyPWZ1bmN0aW9uIGUodCl7dmFyIG49bmV3IERyKHQpLHI9Q3IoRHIucHJvdG90eXBlLnJlcXVlc3Qsbik7cmV0dXJuIEFyLmV4dGVuZChyLERyLnByb3RvdHlwZSxuKSxBci5leHRlbmQocixuKSxyLmNyZWF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gZShQcih0LG4pKX0scn0oWW4pO0lyLkF4aW9zPURyLElyLkNhbmNlbGVkRXJyb3I9RW4sSXIuQ2FuY2VsVG9rZW49UnIsSXIuaXNDYW5jZWw9JG4sSXIuVkVSU0lPTj1hcixJci50b0Zvcm1EYXRhPXl0LElyLkF4aW9zRXJyb3I9Y3QsSXIuQ2FuY2VsPUlyLkNhbmNlbGVkRXJyb3IsSXIuYWxsPWZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLmFsbChlKX0sSXIuc3ByZWFkPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5hcHBseShudWxsLHQpfX0sSXIuaXNBeGlvc0Vycm9yPWZ1bmN0aW9uKGUpe3JldHVybiBUci5pc09iamVjdChlKSYmITA9PT1lLmlzQXhpb3NFcnJvcn0sSXIuZm9ybVRvSlNPTj1mdW5jdGlvbihlKXtyZXR1cm4gT3IoQXIuaXNIVE1MRm9ybShlKT9uZXcgRm9ybURhdGEoZSk6ZSl9LEkuZXhwb3J0cz1JcixJLmV4cG9ydHMuZGVmYXVsdD1Jcjt2YXIgVXIsTHI9SS5leHBvcnRzO2xldCBIcj1Vcj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuYXR0YWNoVG9rZW49KCk9PlByb21pc2UucmVzb2x2ZSgpLHRoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2s9KCk9Pm51bGwsdGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPSgpPT5udWxsLHRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2s9KCk9Pm51bGwsdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2s9KCk9Pm51bGwsdGhpcy5pbml0PXRoaXMuaW5pdC5iaW5kKHRoaXMpLHRoaXMuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrLmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjay5iaW5kKHRoaXMpLHRoaXMuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrLmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaz10aGlzLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrLmJpbmQodGhpcyl9c3RhdGljIGdldEluc3RhbmNlKCl7cmV0dXJuIHRoaXMuYXhpb3NJbnN0YW5jZXx8KHRoaXMuYXhpb3NJbnN0YW5jZT1Mci5jcmVhdGUoe3dpdGhDcmVkZW50aWFsczohMH0pLHRoaXMuY2xpZW50SW5zdGFuY2V8fCh0aGlzLmNsaWVudEluc3RhbmNlPW5ldyBVciksdGhpcy5heGlvc0luc3RhbmNlLmludGVyY2VwdG9ycy5yZXF1ZXN0LnVzZSgodD0+ZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmNsaWVudEluc3RhbmNlLnJlcXVlc3RIYW5kbGVyKHQpfSkpKSksdGhpcy5heGlvc0luc3RhbmNlLmludGVyY2VwdG9ycy5yZXNwb25zZS51c2UoKGU9PnRoaXMuY2xpZW50SW5zdGFuY2Uuc3VjY2Vzc0hhbmRsZXIoZSkpLChlPT50aGlzLmNsaWVudEluc3RhbmNlLmVycm9ySGFuZGxlcihlKSkpLHRoaXMuYXhpb3NJbnN0YW5jZS5hbGw9THIuYWxsLHRoaXMuYXhpb3NJbnN0YW5jZS5zcHJlYWQ9THIuc3ByZWFkLHRoaXMuYXhpb3NJbnN0YW5jZS5pbml0PXRoaXMuY2xpZW50SW5zdGFuY2UuaW5pdCx0aGlzLmF4aW9zSW5zdGFuY2UuZW5hYmxlSGFuZGxlcj10aGlzLmNsaWVudEluc3RhbmNlLmVuYWJsZUhhbmRsZXIsdGhpcy5heGlvc0luc3RhbmNlLmRpc2FibGVIYW5kbGVyPXRoaXMuY2xpZW50SW5zdGFuY2UuZGlzYWJsZUhhbmRsZXIsdGhpcy5heGlvc0luc3RhbmNlLmRpc2FibGVIYW5kbGVyV2l0aFRpbWVvdXQ9dGhpcy5jbGllbnRJbnN0YW5jZS5kaXNhYmxlSGFuZGxlcldpdGhUaW1lb3V0LHRoaXMuYXhpb3NJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2s9dGhpcy5jbGllbnRJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2ssdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2ssdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjayx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2spLHRoaXMuYXhpb3NJbnN0YW5jZX1yZXF1ZXN0SGFuZGxlcih0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKHlpZWxkIHRoaXMuYXR0YWNoVG9rZW4odCksbnVsbD09dD92b2lkIDA6dC5zaG91bGRFbmNvZGVUb0Zvcm1EYXRhKXtjb25zdCBlPW51bGw9PXQ/dm9pZCAwOnQuZGF0YSxuPW5ldyBGb3JtRGF0YTtPYmplY3Qua2V5cyhlKS5mb3JFYWNoKCh0PT57bi5hcHBlbmQodCxlW3RdKX0pKSx0LmRhdGE9bn1yZXR1cm4gdC5zdGFydFRpbWVJbk1zPShuZXcgRGF0ZSkuZ2V0VGltZSgpLFVyLmlzSGFuZGxlckVuYWJsZWQmJnRoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrJiZ0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrKHQpLHR9KSl9ZXJyb3JIYW5kbGVyKGUpe3Rocm93IFVyLmlzSGFuZGxlckVuYWJsZWQmJih0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjayYmdGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjayhlKSx0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiZ0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaygpKSxlfXN1Y2Nlc3NIYW5kbGVyKGUpe3JldHVybiBVci5pc0hhbmRsZXJFbmFibGVkJiYodGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrJiZ0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2soZSksdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjayYmdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2soKSksZX1pbml0KCl7bGV0IHQ9IShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXSxuPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwO3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7VXIuaXNIYW5kbGVyRW5hYmxlZD10LHRoaXMuYXR0YWNoVG9rZW49bn0pKX1lbmFibGVIYW5kbGVyKCl7VXIuaXNIYW5kbGVyRW5hYmxlZD0hMH1kaXNhYmxlSGFuZGxlcigpe1VyLmlzSGFuZGxlckVuYWJsZWQ9ITF9ZGlzYWJsZUhhbmRsZXJXaXRoVGltZW91dCgpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpVci5ERUZBVUxUX0hBTkRMRVJfRElTQUJMRV9USU1FT1VUO1VyLmlzSGFuZGxlckVuYWJsZWQ9ITEsc2V0VGltZW91dCgoKCk9PntVci5pc0hhbmRsZXJFbmFibGVkPSEwfSksZSl9c2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrKGUpe3RoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2s9ZX1zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayhlKXt0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9ZX1zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2soZSl7dGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjaz1lfXNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2soZSl7dGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2s9ZX19O0hyLkRFRkFVTFRfSEFORExFUl9ESVNBQkxFX1RJTUVPVVQ9MWUzLEhyPVVyPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG89YXJndW1lbnRzLmxlbmd0aCxzPW88Mz90Om51bGw9PT1yP3I9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pOnI7aWYoIm9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiYiZnVuY3Rpb24iPT10eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSlzPVJlZmxlY3QuZGVjb3JhdGUoZSx0LG4scik7ZWxzZSBmb3IodmFyIGE9ZS5sZW5ndGgtMTthPj0wO2EtLSkoaT1lW2FdKSYmKHM9KG88Mz9pKHMpOm8+Mz9pKHQsbixzKTppKHQsbikpfHxzKTtyZXR1cm4gbz4zJiZzJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHMpLHN9KFtlPT57fV0sSHIpO2NsYXNzIE1ye2NvbnN0cnVjdG9yKCl7dGhpcy5fZGF0YT1uZXcgTWFwfXNldERhdGEodCxuKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuX2RhdGEuc2V0KHQsbil9KSl9Z2V0RGF0YSh0KXt2YXIgbixyO3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG51bGwhPT0ocj1udWxsPT09KG49dGhpcy5fZGF0YSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uZ2V0KHQpKSYmdm9pZCAwIT09cj9yOiJ7fSJ9KSl9cmVtb3ZlRGF0YSh0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuX2RhdGEuZGVsZXRlKHQpfSkpfX12YXIganI9e2V4cG9ydHM6e319LE5yPXt9LHhyPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh4ciwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkseHIuZGVmYXVsdD1mdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aCxuPXQlNDtpZighbilyZXR1cm4gZTt2YXIgcj10LGk9NC1uLG89dCtpLHM9bWUuYWxsb2Mobyk7Zm9yKHMud3JpdGUoZSk7aS0tOylzLndyaXRlKCI9IixyKyspO3JldHVybiBzLnRvU3RyaW5nKCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOciwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHFyPXhyO2Z1bmN0aW9uIEJyKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSJ1dGY4IiksbWUuaXNCdWZmZXIoZSk/S3IoZS50b1N0cmluZygiYmFzZTY0IikpOktyKG1lLmZyb20oZSx0KS50b1N0cmluZygiYmFzZTY0IikpfWZ1bmN0aW9uIEZyKGUpe3JldHVybiBlPWUudG9TdHJpbmcoKSxxci5kZWZhdWx0KGUpLnJlcGxhY2UoL1wtL2csIisiKS5yZXBsYWNlKC9fL2csIi8iKX1mdW5jdGlvbiBLcihlKXtyZXR1cm4gZS5yZXBsYWNlKC89L2csIiIpLnJlcGxhY2UoL1wrL2csIi0iKS5yZXBsYWNlKC9cLy9nLCJfIil9dmFyIEpyLFdyPUJyO1dyLmVuY29kZT1CcixXci5kZWNvZGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9InV0ZjgiKSxtZS5mcm9tKEZyKGUpLCJiYXNlNjQiKS50b1N0cmluZyh0KX0sV3IudG9CYXNlNjQ9RnIsV3IuZnJvbUJhc2U2ND1LcixXci50b0J1ZmZlcj1mdW5jdGlvbihlKXtyZXR1cm4gbWUuZnJvbShGcihlKSwiYmFzZTY0Iil9LE5yLmRlZmF1bHQ9V3IsKEpyPWpyKS5leHBvcnRzPU5yLmRlZmF1bHQsSnIuZXhwb3J0cy5kZWZhdWx0PUpyLmV4cG9ydHM7dmFyIHpyPWpyLmV4cG9ydHMsVnI9e2V4cG9ydHM6e319OyFmdW5jdGlvbihlKXshZnVuY3Rpb24odCxuKXt2YXIgcj17fTshZnVuY3Rpb24oZSl7ZS5fX2VzTW9kdWxlPSEwLGUuZGlnZXN0TGVuZ3RoPTMyLGUuYmxvY2tTaXplPTY0O3ZhciB0PW5ldyBVaW50MzJBcnJheShbMTExNjM1MjQwOCwxODk5NDQ3NDQxLDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQwMjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5MzI1Mjk4XSk7ZnVuY3Rpb24gbihlLG4scixpLG8pe2Zvcih2YXIgcyxhLGMsdSxsLGQsaCxmLHAsZyx2LHksbTtvPj02NDspe2ZvcihzPW5bMF0sYT1uWzFdLGM9blsyXSx1PW5bM10sbD1uWzRdLGQ9bls1XSxoPW5bNl0sZj1uWzddLGc9MDtnPDE2O2crKyl2PWkrNCpnLGVbZ109KDI1NSZyW3ZdKTw8MjR8KDI1NSZyW3YrMV0pPDwxNnwoMjU1JnJbdisyXSk8PDh8MjU1JnJbdiszXTtmb3IoZz0xNjtnPDY0O2crKyl5PSgocD1lW2ctMl0pPj4+MTd8cDw8MTUpXihwPj4+MTl8cDw8MTMpXnA+Pj4xMCxtPSgocD1lW2ctMTVdKT4+Pjd8cDw8MjUpXihwPj4+MTh8cDw8MTQpXnA+Pj4zLGVbZ109KHkrZVtnLTddfDApKyhtK2VbZy0xNl18MCk7Zm9yKGc9MDtnPDY0O2crKyl5PSgoKGw+Pj42fGw8PDI2KV4obD4+PjExfGw8PDIxKV4obD4+PjI1fGw8PDcpKSsobCZkXn5sJmgpfDApKyhmKyh0W2ddK2VbZ118MCl8MCl8MCxtPSgocz4+PjJ8czw8MzApXihzPj4+MTN8czw8MTkpXihzPj4+MjJ8czw8MTApKSsocyZhXnMmY15hJmMpfDAsZj1oLGg9ZCxkPWwsbD11K3l8MCx1PWMsYz1hLGE9cyxzPXkrbXwwO25bMF0rPXMsblsxXSs9YSxuWzJdKz1jLG5bM10rPXUsbls0XSs9bCxuWzVdKz1kLG5bNl0rPWgsbls3XSs9ZixpKz02NCxvLT02NH1yZXR1cm4gaX12YXIgcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLmRpZ2VzdExlbmd0aD1lLmRpZ2VzdExlbmd0aCx0aGlzLmJsb2NrU2l6ZT1lLmJsb2NrU2l6ZSx0aGlzLnN0YXRlPW5ldyBJbnQzMkFycmF5KDgpLHRoaXMudGVtcD1uZXcgSW50MzJBcnJheSg2NCksdGhpcy5idWZmZXI9bmV3IFVpbnQ4QXJyYXkoMTI4KSx0aGlzLmJ1ZmZlckxlbmd0aD0wLHRoaXMuYnl0ZXNIYXNoZWQ9MCx0aGlzLmZpbmlzaGVkPSExLHRoaXMucmVzZXQoKX1yZXR1cm4gdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGF0ZVswXT0xNzc5MDMzNzAzLHRoaXMuc3RhdGVbMV09MzE0NDEzNDI3Nyx0aGlzLnN0YXRlWzJdPTEwMTM5MDQyNDIsdGhpcy5zdGF0ZVszXT0yNzczNDgwNzYyLHRoaXMuc3RhdGVbNF09MTM1OTg5MzExOSx0aGlzLnN0YXRlWzVdPTI2MDA4MjI5MjQsdGhpcy5zdGF0ZVs2XT01Mjg3MzQ2MzUsdGhpcy5zdGF0ZVs3XT0xNTQxNDU5MjI1LHRoaXMuYnVmZmVyTGVuZ3RoPTAsdGhpcy5ieXRlc0hhc2hlZD0wLHRoaXMuZmluaXNoZWQ9ITEsdGhpc30sdC5wcm90b3R5cGUuY2xlYW49ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHRoaXMuYnVmZmVyLmxlbmd0aDtlKyspdGhpcy5idWZmZXJbZV09MDtmb3IoZT0wO2U8dGhpcy50ZW1wLmxlbmd0aDtlKyspdGhpcy50ZW1wW2VdPTA7dGhpcy5yZXNldCgpfSx0LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSx0KXtpZih2b2lkIDA9PT10JiYodD1lLmxlbmd0aCksdGhpcy5maW5pc2hlZCl0aHJvdyBuZXcgRXJyb3IoIlNIQTI1NjogY2FuJ3QgdXBkYXRlIGJlY2F1c2UgaGFzaCB3YXMgZmluaXNoZWQuIik7dmFyIHI9MDtpZih0aGlzLmJ5dGVzSGFzaGVkKz10LHRoaXMuYnVmZmVyTGVuZ3RoPjApe2Zvcig7dGhpcy5idWZmZXJMZW5ndGg8NjQmJnQ+MDspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJMZW5ndGgrK109ZVtyKytdLHQtLTs2ND09PXRoaXMuYnVmZmVyTGVuZ3RoJiYobih0aGlzLnRlbXAsdGhpcy5zdGF0ZSx0aGlzLmJ1ZmZlciwwLDY0KSx0aGlzLmJ1ZmZlckxlbmd0aD0wKX1mb3IodD49NjQmJihyPW4odGhpcy50ZW1wLHRoaXMuc3RhdGUsZSxyLHQpLHQlPTY0KTt0PjA7KXRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyTGVuZ3RoKytdPWVbcisrXSx0LS07cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbihlKXtpZighdGhpcy5maW5pc2hlZCl7dmFyIHQ9dGhpcy5ieXRlc0hhc2hlZCxyPXRoaXMuYnVmZmVyTGVuZ3RoLGk9dC81MzY4NzA5MTJ8MCxvPXQ8PDMscz10JTY0PDU2PzY0OjEyODt0aGlzLmJ1ZmZlcltyXT0xMjg7Zm9yKHZhciBhPXIrMTthPHMtODthKyspdGhpcy5idWZmZXJbYV09MDt0aGlzLmJ1ZmZlcltzLThdPWk+Pj4yNCYyNTUsdGhpcy5idWZmZXJbcy03XT1pPj4+MTYmMjU1LHRoaXMuYnVmZmVyW3MtNl09aT4+PjgmMjU1LHRoaXMuYnVmZmVyW3MtNV09aT4+PjAmMjU1LHRoaXMuYnVmZmVyW3MtNF09bz4+PjI0JjI1NSx0aGlzLmJ1ZmZlcltzLTNdPW8+Pj4xNiYyNTUsdGhpcy5idWZmZXJbcy0yXT1vPj4+OCYyNTUsdGhpcy5idWZmZXJbcy0xXT1vPj4+MCYyNTUsbih0aGlzLnRlbXAsdGhpcy5zdGF0ZSx0aGlzLmJ1ZmZlciwwLHMpLHRoaXMuZmluaXNoZWQ9ITB9Zm9yKGE9MDthPDg7YSsrKWVbNCphKzBdPXRoaXMuc3RhdGVbYV0+Pj4yNCYyNTUsZVs0KmErMV09dGhpcy5zdGF0ZVthXT4+PjE2JjI1NSxlWzQqYSsyXT10aGlzLnN0YXRlW2FdPj4+OCYyNTUsZVs0KmErM109dGhpcy5zdGF0ZVthXT4+PjAmMjU1O3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgVWludDhBcnJheSh0aGlzLmRpZ2VzdExlbmd0aCk7cmV0dXJuIHRoaXMuZmluaXNoKGUpLGV9LHQucHJvdG90eXBlLl9zYXZlU3RhdGU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDx0aGlzLnN0YXRlLmxlbmd0aDt0KyspZVt0XT10aGlzLnN0YXRlW3RdfSx0LnByb3RvdHlwZS5fcmVzdG9yZVN0YXRlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjx0aGlzLnN0YXRlLmxlbmd0aDtuKyspdGhpcy5zdGF0ZVtuXT1lW25dO3RoaXMuYnl0ZXNIYXNoZWQ9dCx0aGlzLmZpbmlzaGVkPSExLHRoaXMuYnVmZmVyTGVuZ3RoPTB9LHR9KCk7ZS5IYXNoPXI7dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuaW5uZXI9bmV3IHIsdGhpcy5vdXRlcj1uZXcgcix0aGlzLmJsb2NrU2l6ZT10aGlzLmlubmVyLmJsb2NrU2l6ZSx0aGlzLmRpZ2VzdExlbmd0aD10aGlzLmlubmVyLmRpZ2VzdExlbmd0aDt2YXIgdD1uZXcgVWludDhBcnJheSh0aGlzLmJsb2NrU2l6ZSk7aWYoZS5sZW5ndGg+dGhpcy5ibG9ja1NpemUpKG5ldyByKS51cGRhdGUoZSkuZmluaXNoKHQpLmNsZWFuKCk7ZWxzZSBmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl0W25dPWVbbl07Zm9yKG49MDtuPHQubGVuZ3RoO24rKyl0W25dXj01NDt0aGlzLmlubmVyLnVwZGF0ZSh0KTtmb3Iobj0wO248dC5sZW5ndGg7bisrKXRbbl1ePTEwNjt0aGlzLm91dGVyLnVwZGF0ZSh0KSx0aGlzLmlzdGF0ZT1uZXcgVWludDMyQXJyYXkoOCksdGhpcy5vc3RhdGU9bmV3IFVpbnQzMkFycmF5KDgpLHRoaXMuaW5uZXIuX3NhdmVTdGF0ZSh0aGlzLmlzdGF0ZSksdGhpcy5vdXRlci5fc2F2ZVN0YXRlKHRoaXMub3N0YXRlKTtmb3Iobj0wO248dC5sZW5ndGg7bisrKXRbbl09MH1yZXR1cm4gZS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbm5lci5fcmVzdG9yZVN0YXRlKHRoaXMuaXN0YXRlLHRoaXMuaW5uZXIuYmxvY2tTaXplKSx0aGlzLm91dGVyLl9yZXN0b3JlU3RhdGUodGhpcy5vc3RhdGUsdGhpcy5vdXRlci5ibG9ja1NpemUpLHRoaXN9LGUucHJvdG90eXBlLmNsZWFuPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx0aGlzLmlzdGF0ZS5sZW5ndGg7ZSsrKXRoaXMub3N0YXRlW2VdPXRoaXMuaXN0YXRlW2VdPTA7dGhpcy5pbm5lci5jbGVhbigpLHRoaXMub3V0ZXIuY2xlYW4oKX0sZS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmlubmVyLnVwZGF0ZShlKSx0aGlzfSxlLnByb3RvdHlwZS5maW5pc2g9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub3V0ZXIuZmluaXNoZWQ/dGhpcy5vdXRlci5maW5pc2goZSk6KHRoaXMuaW5uZXIuZmluaXNoKGUpLHRoaXMub3V0ZXIudXBkYXRlKGUsdGhpcy5kaWdlc3RMZW5ndGgpLmZpbmlzaChlKSksdGhpc30sZS5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IFVpbnQ4QXJyYXkodGhpcy5kaWdlc3RMZW5ndGgpO3JldHVybiB0aGlzLmZpbmlzaChlKSxlfSxlfSgpO2Z1bmN0aW9uIG8oZSl7dmFyIHQ9KG5ldyByKS51cGRhdGUoZSksbj10LmRpZ2VzdCgpO3JldHVybiB0LmNsZWFuKCksbn1mdW5jdGlvbiBzKGUsdCl7dmFyIG49bmV3IGkoZSkudXBkYXRlKHQpLHI9bi5kaWdlc3QoKTtyZXR1cm4gbi5jbGVhbigpLHJ9ZnVuY3Rpb24gYShlLHQsbixyKXt2YXIgaT1yWzBdO2lmKDA9PT1pKXRocm93IG5ldyBFcnJvcigiaGtkZjogY2Fubm90IGV4cGFuZCBtb3JlIik7dC5yZXNldCgpLGk+MSYmdC51cGRhdGUoZSksbiYmdC51cGRhdGUobiksdC51cGRhdGUociksdC5maW5pc2goZSksclswXSsrfWUuSE1BQz1pLGUuaGFzaD1vLGUuZGVmYXVsdD1vLGUuaG1hYz1zO3ZhciBjPW5ldyBVaW50OEFycmF5KGUuZGlnZXN0TGVuZ3RoKTtmdW5jdGlvbiB1KGUsdCxuLHIpe3ZvaWQgMD09PXQmJih0PWMpLHZvaWQgMD09PXImJihyPTMyKTtmb3IodmFyIG89bmV3IFVpbnQ4QXJyYXkoWzFdKSx1PXModCxlKSxsPW5ldyBpKHUpLGQ9bmV3IFVpbnQ4QXJyYXkobC5kaWdlc3RMZW5ndGgpLGg9ZC5sZW5ndGgsZj1uZXcgVWludDhBcnJheShyKSxwPTA7cDxyO3ArKyloPT09ZC5sZW5ndGgmJihhKGQsbCxuLG8pLGg9MCksZltwXT1kW2grK107cmV0dXJuIGwuY2xlYW4oKSxkLmZpbGwoMCksby5maWxsKDApLGZ9ZnVuY3Rpb24gbChlLHQsbixyKXtmb3IodmFyIG89bmV3IGkoZSkscz1vLmRpZ2VzdExlbmd0aCxhPW5ldyBVaW50OEFycmF5KDQpLGM9bmV3IFVpbnQ4QXJyYXkocyksdT1uZXcgVWludDhBcnJheShzKSxsPW5ldyBVaW50OEFycmF5KHIpLGQ9MDtkKnM8cjtkKyspe3ZhciBoPWQrMTthWzBdPWg+Pj4yNCYyNTUsYVsxXT1oPj4+MTYmMjU1LGFbMl09aD4+PjgmMjU1LGFbM109aD4+PjAmMjU1LG8ucmVzZXQoKSxvLnVwZGF0ZSh0KSxvLnVwZGF0ZShhKSxvLmZpbmlzaCh1KTtmb3IodmFyIGY9MDtmPHM7ZisrKWNbZl09dVtmXTtmb3IoZj0yO2Y8PW47ZisrKXtvLnJlc2V0KCksby51cGRhdGUodSkuZmluaXNoKHUpO2Zvcih2YXIgcD0wO3A8cztwKyspY1twXV49dVtwXX1mb3IoZj0wO2Y8cyYmZCpzK2Y8cjtmKyspbFtkKnMrZl09Y1tmXX1mb3IoZD0wO2Q8cztkKyspY1tkXT11W2RdPTA7Zm9yKGQ9MDtkPDQ7ZCsrKWFbZF09MDtyZXR1cm4gby5jbGVhbigpLGx9ZS5oa2RmPXUsZS5wYmtkZjI9bH0ocik7dmFyIGk9ci5kZWZhdWx0O2Zvcih2YXIgbyBpbiByKWlbb109cltvXTtlLmV4cG9ydHM9aX0oKX0oVnIpO3ZhciBZcj1EKFZyLmV4cG9ydHMpLEdyPWNyeXB0bztjb25zdCBYcj1lPT5lIGluc3RhbmNlb2YgQ3J5cHRvS2V5LCRyPW5ldyBUZXh0RW5jb2Rlcixacj1uZXcgVGV4dERlY29kZXI7Y29uc3QgUXI9ZT0+e2xldCB0PWU7dCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkmJih0PVpyLmRlY29kZSh0KSksdD10LnJlcGxhY2UoLy0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpLnJlcGxhY2UoL1xzL2csIiIpO3RyeXtyZXR1cm4oZT0+e2NvbnN0IHQ9YXRvYihlKSxuPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoKTtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyluW2VdPXQuY2hhckNvZGVBdChlKTtyZXR1cm4gbn0pKHQpfWNhdGNoKGUpe3Rocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBpbnB1dCB0byBiZSBkZWNvZGVkIGlzIG5vdCBjb3JyZWN0bHkgZW5jb2RlZC4iKX19O2NsYXNzIGVpIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSl7dmFyIHQ7c3VwZXIoZSksdGhpcy5jb2RlPSJFUlJfSk9TRV9HRU5FUklDIix0aGlzLm5hbWU9dGhpcy5jb25zdHJ1Y3Rvci5uYW1lLG51bGw9PT0odD1FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSl8fHZvaWQgMD09PXR8fHQuY2FsbChFcnJvcix0aGlzLHRoaXMuY29uc3RydWN0b3IpfXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSk9TRV9HRU5FUklDIn19Y2xhc3MgdGkgZXh0ZW5kcyBlaXtjb25zdHJ1Y3RvcihlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06InVuc3BlY2lmaWVkIixuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToidW5zcGVjaWZpZWQiO3N1cGVyKGUpLHRoaXMuY29kZT0iRVJSX0pXVF9DTEFJTV9WQUxJREFUSU9OX0ZBSUxFRCIsdGhpcy5jbGFpbT10LHRoaXMucmVhc29uPW59c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV1RfQ0xBSU1fVkFMSURBVElPTl9GQUlMRUQifX1jbGFzcyBuaSBleHRlbmRzIGVpe2NvbnN0cnVjdG9yKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToidW5zcGVjaWZpZWQiLG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOiJ1bnNwZWNpZmllZCI7c3VwZXIoZSksdGhpcy5jb2RlPSJFUlJfSldUX0VYUElSRUQiLHRoaXMuY2xhaW09dCx0aGlzLnJlYXNvbj1ufXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldUX0VYUElSRUQifX1jbGFzcyByaSBleHRlbmRzIGVpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KT1NFX0FMR19OT1RfQUxMT1dFRCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KT1NFX0FMR19OT1RfQUxMT1dFRCJ9fWNsYXNzIGlpIGV4dGVuZHMgZWl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pPU0VfTk9UX1NVUFBPUlRFRCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KT1NFX05PVF9TVVBQT1JURUQifX1jbGFzcyBvaSBleHRlbmRzIGVpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV1NfSU5WQUxJRCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV1NfSU5WQUxJRCJ9fWNsYXNzIHNpIGV4dGVuZHMgZWl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXVF9JTlZBTElEIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXVF9JTlZBTElEIn19Y2xhc3MgYWkgZXh0ZW5kcyBlaXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldLU19JTlZBTElEIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXS1NfSU5WQUxJRCJ9fWNsYXNzIGNpIGV4dGVuZHMgZWl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXS1NfTk9fTUFUQ0hJTkdfS0VZIix0aGlzLm1lc3NhZ2U9Im5vIGFwcGxpY2FibGUga2V5IGZvdW5kIGluIHRoZSBKU09OIFdlYiBLZXkgU2V0In1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXS1NfTk9fTUFUQ0hJTkdfS0VZIn19Y2xhc3MgdWkgZXh0ZW5kcyBlaXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldLU19NVUxUSVBMRV9NQVRDSElOR19LRVlTIix0aGlzLm1lc3NhZ2U9Im11bHRpcGxlIG1hdGNoaW5nIGtleXMgZm91bmQgaW4gdGhlIEpTT04gV2ViIEtleSBTZXQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldLU19NVUxUSVBMRV9NQVRDSElOR19LRVlTIn19Y2xhc3MgbGkgZXh0ZW5kcyBlaXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldTX1NJR05BVFVSRV9WRVJJRklDQVRJT05fRkFJTEVEIix0aGlzLm1lc3NhZ2U9InNpZ25hdHVyZSB2ZXJpZmljYXRpb24gZmFpbGVkIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXU19TSUdOQVRVUkVfVkVSSUZJQ0FUSU9OX0ZBSUxFRCJ9fWZ1bmN0aW9uIGRpKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFdlYlNvY2tldFBhaXJ9ZnVuY3Rpb24gaGkoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJhbGdvcml0aG0ubmFtZSI7cmV0dXJuIG5ldyBUeXBlRXJyb3IoIkNyeXB0b0tleSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgb3BlcmF0aW9uLCBpdHMgIi5jb25jYXQodCwiIG11c3QgYmUgIikuY29uY2F0KGUpKX1mdW5jdGlvbiBmaShlLHQpe3JldHVybiBlLm5hbWU9PT10fWZ1bmN0aW9uIHBpKGUpe3JldHVybiBwYXJzZUludChlLm5hbWUuc2xpY2UoNCksMTApfWZ1bmN0aW9uIGdpKGUpe3N3aXRjaChlKXtjYXNlIkVTMjU2IjpyZXR1cm4iUC0yNTYiO2Nhc2UiRVMzODQiOnJldHVybiJQLTM4NCI7Y2FzZSJFUzUxMiI6cmV0dXJuIlAtNTIxIjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5yZWFjaGFibGUiKX19ZnVuY3Rpb24gdmkoZSx0KXtpZih0Lmxlbmd0aCYmIXQuc29tZSgodD0+ZS51c2FnZXMuaW5jbHVkZXModCkpKSl7bGV0IGU9IkNyeXB0b0tleSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgb3BlcmF0aW9uLCBpdHMgdXNhZ2VzIG11c3QgaW5jbHVkZSAiO2lmKHQubGVuZ3RoPjIpe2NvbnN0IG49dC5wb3AoKTtlKz0ib25lIG9mICIuY29uY2F0KHQuam9pbigiLCAiKSwiLCBvciAiKS5jb25jYXQobiwiLiIpfWVsc2UgMj09PXQubGVuZ3RoP2UrPSJvbmUgb2YgIi5jb25jYXQodFswXSwiIG9yICIpLmNvbmNhdCh0WzFdLCIuIik6ZSs9IiIuY29uY2F0KHRbMF0sIi4iKTt0aHJvdyBuZXcgVHlwZUVycm9yKGUpfX12YXIgeWk9ZnVuY3Rpb24oZSl7bGV0IHQ9IktleSBtdXN0IGJlICI7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkobj4xP24tMTowKSxpPTE7aTxuO2krKylyW2ktMV09YXJndW1lbnRzW2ldO2lmKHIubGVuZ3RoPjIpe2NvbnN0IGU9ci5wb3AoKTt0Kz0ib25lIG9mIHR5cGUgIi5jb25jYXQoci5qb2luKCIsICIpLCIsIG9yICIpLmNvbmNhdChlLCIuIil9ZWxzZSAyPT09ci5sZW5ndGg/dCs9Im9uZSBvZiB0eXBlICIuY29uY2F0KHJbMF0sIiBvciAiKS5jb25jYXQoclsxXSwiLiIpOnQrPSJvZiB0eXBlICIuY29uY2F0KHJbMF0sIi4iKTtyZXR1cm4gbnVsbD09ZT90Kz0iIFJlY2VpdmVkICIuY29uY2F0KGUpOiJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLm5hbWU/dCs9IiBSZWNlaXZlZCBmdW5jdGlvbiAiLmNvbmNhdChlLm5hbWUpOiJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9ZSYmZS5jb25zdHJ1Y3RvciYmZS5jb25zdHJ1Y3Rvci5uYW1lJiYodCs9IiBSZWNlaXZlZCBhbiBpbnN0YW5jZSBvZiAiLmNvbmNhdChlLmNvbnN0cnVjdG9yLm5hbWUpKSx0fSxtaT1lPT5YcihlKTtjb25zdCB3aT1bIkNyeXB0b0tleSJdO2Z1bmN0aW9uIF9pKGUpe2lmKCJvYmplY3QiIT10eXBlb2YodD1lKXx8bnVsbD09PXR8fCJbb2JqZWN0IE9iamVjdF0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKXJldHVybiExO3ZhciB0O2lmKG51bGw9PT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSkpcmV0dXJuITA7bGV0IG49ZTtmb3IoO251bGwhPT1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobik7KW49T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pO3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1ufWNvbnN0IFNpPWFzeW5jIGU9Pnt2YXIgdCxuO2NvbnN0e2FsZ29yaXRobTpyLGtleVVzYWdlczppfT1mdW5jdGlvbihlKXtsZXQgdCxuO3N3aXRjaChlLmt0eSl7Y2FzZSJvY3QiOnN3aXRjaChlLmFsZyl7Y2FzZSJIUzI1NiI6Y2FzZSJIUzM4NCI6Y2FzZSJIUzUxMiI6dD17bmFtZToiSE1BQyIsaGFzaDoiU0hBLSIuY29uY2F0KGUuYWxnLnNsaWNlKC0zKSl9LG49WyJzaWduIiwidmVyaWZ5Il07YnJlYWs7Y2FzZSJBMTI4Q0JDLUhTMjU2IjpjYXNlIkExOTJDQkMtSFMzODQiOmNhc2UiQTI1NkNCQy1IUzUxMiI6dGhyb3cgbmV3IGlpKCIiLmNvbmNhdChlLmFsZywiIGtleXMgY2Fubm90IGJlIGltcG9ydGVkIGFzIENyeXB0b0tleSBpbnN0YW5jZXMiKSk7Y2FzZSJBMTI4R0NNIjpjYXNlIkExOTJHQ00iOmNhc2UiQTI1NkdDTSI6Y2FzZSJBMTI4R0NNS1ciOmNhc2UiQTE5MkdDTUtXIjpjYXNlIkEyNTZHQ01LVyI6dD17bmFtZToiQUVTLUdDTSJ9LG49WyJlbmNyeXB0IiwiZGVjcnlwdCJdO2JyZWFrO2Nhc2UiQTEyOEtXIjpjYXNlIkExOTJLVyI6Y2FzZSJBMjU2S1ciOnQ9e25hbWU6IkFFUy1LVyJ9LG49WyJ3cmFwS2V5IiwidW53cmFwS2V5Il07YnJlYWs7Y2FzZSJQQkVTMi1IUzI1NitBMTI4S1ciOmNhc2UiUEJFUzItSFMzODQrQTE5MktXIjpjYXNlIlBCRVMyLUhTNTEyK0EyNTZLVyI6dD17bmFtZToiUEJLREYyIn0sbj1bImRlcml2ZUJpdHMiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBpaSgnSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZSJSU0EiOnN3aXRjaChlLmFsZyl7Y2FzZSJQUzI1NiI6Y2FzZSJQUzM4NCI6Y2FzZSJQUzUxMiI6dD17bmFtZToiUlNBLVBTUyIsaGFzaDoiU0hBLSIuY29uY2F0KGUuYWxnLnNsaWNlKC0zKSl9LG49ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJSUzI1NiI6Y2FzZSJSUzM4NCI6Y2FzZSJSUzUxMiI6dD17bmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUiLGhhc2g6IlNIQS0iLmNvbmNhdChlLmFsZy5zbGljZSgtMykpfSxuPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiUlNBLU9BRVAiOmNhc2UiUlNBLU9BRVAtMjU2IjpjYXNlIlJTQS1PQUVQLTM4NCI6Y2FzZSJSU0EtT0FFUC01MTIiOnQ9e25hbWU6IlJTQS1PQUVQIixoYXNoOiJTSEEtIi5jb25jYXQocGFyc2VJbnQoZS5hbGcuc2xpY2UoLTMpLDEwKXx8MSl9LG49ZS5kP1siZGVjcnlwdCIsInVud3JhcEtleSJdOlsiZW5jcnlwdCIsIndyYXBLZXkiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBpaSgnSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZSJFQyI6c3dpdGNoKGUuYWxnKXtjYXNlIkVTMjU2Ijp0PXtuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZToiUC0yNTYifSxuPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiRVMzODQiOnQ9e25hbWU6IkVDRFNBIixuYW1lZEN1cnZlOiJQLTM4NCJ9LG49ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJFUzUxMiI6dD17bmFtZToiRUNEU0EiLG5hbWVkQ3VydmU6IlAtNTIxIn0sbj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIkVDREgtRVMiOmNhc2UiRUNESC1FUytBMTI4S1ciOmNhc2UiRUNESC1FUytBMTkyS1ciOmNhc2UiRUNESC1FUytBMjU2S1ciOnQ9e25hbWU6IkVDREgiLG5hbWVkQ3VydmU6ZS5jcnZ9LG49ZS5kP1siZGVyaXZlQml0cyJdOltdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IGlpKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIEpXSyAiYWxnIiAoQWxnb3JpdGhtKSBQYXJhbWV0ZXIgdmFsdWUnKX1icmVhaztjYXNlIGRpKCkmJiJPS1AiOmlmKCJFZERTQSIhPT1lLmFsZyl0aHJvdyBuZXcgaWkoJ0ludmFsaWQgb3IgdW5zdXBwb3J0ZWQgSldLICJhbGciIChBbGdvcml0aG0pIFBhcmFtZXRlciB2YWx1ZScpO2lmKCJFZDI1NTE5IiE9PWUuY3J2KXRocm93IG5ldyBpaSgnSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImNydiIgKFN1YnR5cGUgb2YgS2V5IFBhaXIpIFBhcmFtZXRlciB2YWx1ZScpO3Q9e25hbWU6Ik5PREUtRUQyNTUxOSIsbmFtZWRDdXJ2ZToiTk9ERS1FRDI1NTE5In0sbj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBpaSgnSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImt0eSIgKEtleSBUeXBlKSBQYXJhbWV0ZXIgdmFsdWUnKX1yZXR1cm57YWxnb3JpdGhtOnQsa2V5VXNhZ2VzOm59fShlKSxvPVtyLG51bGwhPT0odD1lLmV4dCkmJnZvaWQgMCE9PXQmJnQsbnVsbCE9PShuPWUua2V5X29wcykmJnZvaWQgMCE9PW4/bjppXTtpZigiUEJLREYyIj09PXIubmFtZSlyZXR1cm4gR3Iuc3VidGxlLmltcG9ydEtleSgicmF3IixRcihlLmspLC4uLm8pO2NvbnN0IHM9ey4uLmV9O3JldHVybiBkZWxldGUgcy5hbGcsR3Iuc3VidGxlLmltcG9ydEtleSgiandrIixzLC4uLm8pfTtjb25zdCBiaT0oZSx0LG4pPT57ZS5zdGFydHNXaXRoKCJIUyIpfHwiZGlyIj09PWV8fGUuc3RhcnRzV2l0aCgiUEJFUzIiKXx8L15BXGR7M30oPzpHQ00pP0tXJC8udGVzdChlKT8oZT0+e2lmKCEoZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKXtpZighbWkoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcih5aShlLC4uLndpLCJVaW50OEFycmF5IikpO2lmKCJzZWNyZXQiIT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoIiIuY29uY2F0KHdpLmpvaW4oIiBvciAiKSwnIGluc3RhbmNlcyBmb3Igc3ltbWV0cmljIGFsZ29yaXRobXMgbXVzdCBiZSBvZiB0eXBlICJzZWNyZXQiJykpfX0pKHQpOigoZSx0KT0+e2lmKCFtaShlKSl0aHJvdyBuZXcgVHlwZUVycm9yKHlpKGUsLi4ud2kpKTtpZigic2VjcmV0Ij09PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKCIiLmNvbmNhdCh3aS5qb2luKCIgb3IgIiksJyBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtcyBtdXN0IG5vdCBiZSBvZiB0eXBlICJzZWNyZXQiJykpO2lmKCJzaWduIj09PXQmJiJwdWJsaWMiPT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoIiIuY29uY2F0KHdpLmpvaW4oIiBvciAiKSwnIGluc3RhbmNlcyBmb3IgYXN5bW1ldHJpYyBhbGdvcml0aG0gc2lnbmluZyBtdXN0IGJlIG9mIHR5cGUgInByaXZhdGUiJykpO2lmKCJkZWNyeXB0Ij09PXQmJiJwdWJsaWMiPT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoIiIuY29uY2F0KHdpLmpvaW4oIiBvciAiKSwnIGluc3RhbmNlcyBmb3IgYXN5bW1ldHJpYyBhbGdvcml0aG0gZGVjcnlwdGlvbiBtdXN0IGJlIG9mIHR5cGUgInByaXZhdGUiJykpO2lmKGUuYWxnb3JpdGhtJiYidmVyaWZ5Ij09PXQmJiJwcml2YXRlIj09PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKCIiLmNvbmNhdCh3aS5qb2luKCIgb3IgIiksJyBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtIHZlcmlmeWluZyBtdXN0IGJlIG9mIHR5cGUgInB1YmxpYyInKSk7aWYoZS5hbGdvcml0aG0mJiJlbmNyeXB0Ij09PXQmJiJwcml2YXRlIj09PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKCIiLmNvbmNhdCh3aS5qb2luKCIgb3IgIiksJyBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtIGVuY3J5cHRpb24gbXVzdCBiZSBvZiB0eXBlICJwdWJsaWMiJykpfSkodCxuKX07ZnVuY3Rpb24gRWkoZSx0LG4pe2lmKFhyKHQpKXJldHVybiBmdW5jdGlvbihlLHQpe3N3aXRjaCh0KXtjYXNlIkhTMjU2IjpjYXNlIkhTMzg0IjpjYXNlIkhTNTEyIjp7aWYoIWZpKGUuYWxnb3JpdGhtLCJITUFDIikpdGhyb3cgaGkoIkhNQUMiKTtjb25zdCBuPXBhcnNlSW50KHQuc2xpY2UoMiksMTApO2lmKHBpKGUuYWxnb3JpdGhtLmhhc2gpIT09bil0aHJvdyBoaSgiU0hBLSIuY29uY2F0KG4pLCJhbGdvcml0aG0uaGFzaCIpO2JyZWFrfWNhc2UiUlMyNTYiOmNhc2UiUlMzODQiOmNhc2UiUlM1MTIiOntpZighZmkoZS5hbGdvcml0aG0sIlJTQVNTQS1QS0NTMS12MV81IikpdGhyb3cgaGkoIlJTQVNTQS1QS0NTMS12MV81Iik7Y29uc3Qgbj1wYXJzZUludCh0LnNsaWNlKDIpLDEwKTtpZihwaShlLmFsZ29yaXRobS5oYXNoKSE9PW4pdGhyb3cgaGkoIlNIQS0iLmNvbmNhdChuKSwiYWxnb3JpdGhtLmhhc2giKTticmVha31jYXNlIlBTMjU2IjpjYXNlIlBTMzg0IjpjYXNlIlBTNTEyIjp7aWYoIWZpKGUuYWxnb3JpdGhtLCJSU0EtUFNTIikpdGhyb3cgaGkoIlJTQS1QU1MiKTtjb25zdCBuPXBhcnNlSW50KHQuc2xpY2UoMiksMTApO2lmKHBpKGUuYWxnb3JpdGhtLmhhc2gpIT09bil0aHJvdyBoaSgiU0hBLSIuY29uY2F0KG4pLCJhbGdvcml0aG0uaGFzaCIpO2JyZWFrfWNhc2UgZGkoKSYmIkVkRFNBIjppZighZmkoZS5hbGdvcml0aG0sIk5PREUtRUQyNTUxOSIpKXRocm93IGhpKCJOT0RFLUVEMjU1MTkiKTticmVhaztjYXNlIkVTMjU2IjpjYXNlIkVTMzg0IjpjYXNlIkVTNTEyIjp7aWYoIWZpKGUuYWxnb3JpdGhtLCJFQ0RTQSIpKXRocm93IGhpKCJFQ0RTQSIpO2NvbnN0IG49Z2kodCk7aWYoZS5hbGdvcml0aG0ubmFtZWRDdXJ2ZSE9PW4pdGhyb3cgaGkobiwiYWxnb3JpdGhtLm5hbWVkQ3VydmUiKTticmVha31kZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoIkNyeXB0b0tleSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgb3BlcmF0aW9uIil9Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkobj4yP24tMjowKSxpPTI7aTxuO2krKylyW2ktMl09YXJndW1lbnRzW2ldO3ZpKGUscil9KHQsZSxuKSx0O2lmKHQgaW5zdGFuY2VvZiBVaW50OEFycmF5KXtpZighZS5zdGFydHNXaXRoKCJIUyIpKXRocm93IG5ldyBUeXBlRXJyb3IoeWkodCwuLi53aSkpO3JldHVybiBHci5zdWJ0bGUuaW1wb3J0S2V5KCJyYXciLHQse2hhc2g6IlNIQS0iLmNvbmNhdChlLnNsaWNlKC0zKSksbmFtZToiSE1BQyJ9LCExLFtuXSl9dGhyb3cgbmV3IFR5cGVFcnJvcih5aSh0LC4uLndpLCJVaW50OEFycmF5IikpfWNvbnN0IGtpPWFzeW5jKGUsdCxuLHIpPT57Y29uc3QgaT1hd2FpdCBFaShlLHQsInZlcmlmeSIpOygoZSx0KT0+e2lmKGUuc3RhcnRzV2l0aCgiUlMiKXx8ZS5zdGFydHNXaXRoKCJQUyIpKXtjb25zdHttb2R1bHVzTGVuZ3RoOm59PXQuYWxnb3JpdGhtO2lmKCJudW1iZXIiIT10eXBlb2Ygbnx8bjwyMDQ4KXRocm93IG5ldyBUeXBlRXJyb3IoIiIuY29uY2F0KGUsIiByZXF1aXJlcyBrZXkgbW9kdWx1c0xlbmd0aCB0byBiZSAyMDQ4IGJpdHMgb3IgbGFyZ2VyIikpfX0pKGUsaSk7Y29uc3Qgbz1mdW5jdGlvbihlLHQpe2NvbnN0IG49IlNIQS0iLmNvbmNhdChlLnNsaWNlKC0zKSk7c3dpdGNoKGUpe2Nhc2UiSFMyNTYiOmNhc2UiSFMzODQiOmNhc2UiSFM1MTIiOnJldHVybntoYXNoOm4sbmFtZToiSE1BQyJ9O2Nhc2UiUFMyNTYiOmNhc2UiUFMzODQiOmNhc2UiUFM1MTIiOnJldHVybntoYXNoOm4sbmFtZToiUlNBLVBTUyIsc2FsdExlbmd0aDplLnNsaWNlKC0zKT4+M307Y2FzZSJSUzI1NiI6Y2FzZSJSUzM4NCI6Y2FzZSJSUzUxMiI6cmV0dXJue2hhc2g6bixuYW1lOiJSU0FTU0EtUEtDUzEtdjFfNSJ9O2Nhc2UiRVMyNTYiOmNhc2UiRVMzODQiOmNhc2UiRVM1MTIiOnJldHVybntoYXNoOm4sbmFtZToiRUNEU0EiLG5hbWVkQ3VydmU6dC5uYW1lZEN1cnZlfTtjYXNlIGRpKCkmJiJFZERTQSI6Y29uc3R7bmFtZWRDdXJ2ZTpyfT10O3JldHVybntuYW1lOnIsbmFtZWRDdXJ2ZTpyfTtkZWZhdWx0OnRocm93IG5ldyBpaSgiYWxnICIuY29uY2F0KGUsIiBpcyBub3Qgc3VwcG9ydGVkIGVpdGhlciBieSBKT1NFIG9yIHlvdXIgamF2YXNjcmlwdCBydW50aW1lIikpfX0oZSxpLmFsZ29yaXRobSk7dHJ5e3JldHVybiBhd2FpdCBHci5zdWJ0bGUudmVyaWZ5KG8saSxuLHIpfWNhdGNoKGUpe3JldHVybiExfX07YXN5bmMgZnVuY3Rpb24gUmkoZSx0LG4pe3ZhciByO2lmKCFfaShlKSl0aHJvdyBuZXcgb2koIkZsYXR0ZW5lZCBKV1MgbXVzdCBiZSBhbiBvYmplY3QiKTtpZih2b2lkIDA9PT1lLnByb3RlY3RlZCYmdm9pZCAwPT09ZS5oZWFkZXIpdGhyb3cgbmV3IG9pKCdGbGF0dGVuZWQgSldTIG11c3QgaGF2ZSBlaXRoZXIgb2YgdGhlICJwcm90ZWN0ZWQiIG9yICJoZWFkZXIiIG1lbWJlcnMnKTtpZih2b2lkIDAhPT1lLnByb3RlY3RlZCYmInN0cmluZyIhPXR5cGVvZiBlLnByb3RlY3RlZCl0aHJvdyBuZXcgb2koIkpXUyBQcm90ZWN0ZWQgSGVhZGVyIGluY29ycmVjdCB0eXBlIik7aWYodm9pZCAwPT09ZS5wYXlsb2FkKXRocm93IG5ldyBvaSgiSldTIFBheWxvYWQgbWlzc2luZyIpO2lmKCJzdHJpbmciIT10eXBlb2YgZS5zaWduYXR1cmUpdGhyb3cgbmV3IG9pKCJKV1MgU2lnbmF0dXJlIG1pc3Npbmcgb3IgaW5jb3JyZWN0IHR5cGUiKTtpZih2b2lkIDAhPT1lLmhlYWRlciYmIV9pKGUuaGVhZGVyKSl0aHJvdyBuZXcgb2koIkpXUyBVbnByb3RlY3RlZCBIZWFkZXIgaW5jb3JyZWN0IHR5cGUiKTtsZXQgaT17fTtpZihlLnByb3RlY3RlZCl7Y29uc3QgdD1RcihlLnByb3RlY3RlZCk7dHJ5e2k9SlNPTi5wYXJzZShaci5kZWNvZGUodCkpfWNhdGNoKGUpe3Rocm93IG5ldyBvaSgiSldTIFByb3RlY3RlZCBIZWFkZXIgaXMgaW52YWxpZCIpfX1pZighZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXTtjb25zdCByPXQuZmlsdGVyKEJvb2xlYW4pO2lmKDA9PT1yLmxlbmd0aHx8MT09PXIubGVuZ3RoKXJldHVybiEwO2xldCBpO2Zvcihjb25zdCBlIG9mIHIpe2NvbnN0IHQ9T2JqZWN0LmtleXMoZSk7aWYoaSYmMCE9PWkuc2l6ZSlmb3IoY29uc3QgZSBvZiB0KXtpZihpLmhhcyhlKSlyZXR1cm4hMTtpLmFkZChlKX1lbHNlIGk9bmV3IFNldCh0KX1yZXR1cm4hMH0oaSxlLmhlYWRlcikpdGhyb3cgbmV3IG9pKCJKV1MgUHJvdGVjdGVkIGFuZCBKV1MgVW5wcm90ZWN0ZWQgSGVhZGVyIFBhcmFtZXRlciBuYW1lcyBtdXN0IGJlIGRpc2pvaW50Iik7Y29uc3Qgbz17Li4uaSwuLi5lLmhlYWRlcn0scz1mdW5jdGlvbihlLHQsbixyLGkpe2lmKHZvaWQgMCE9PWkuY3JpdCYmdm9pZCAwPT09ci5jcml0KXRocm93IG5ldyBlKCciY3JpdCIgKENyaXRpY2FsKSBIZWFkZXIgUGFyYW1ldGVyIE1VU1QgYmUgaW50ZWdyaXR5IHByb3RlY3RlZCcpO2lmKCFyfHx2b2lkIDA9PT1yLmNyaXQpcmV0dXJuIG5ldyBTZXQ7aWYoIUFycmF5LmlzQXJyYXkoci5jcml0KXx8MD09PXIuY3JpdC5sZW5ndGh8fHIuY3JpdC5zb21lKChlPT4ic3RyaW5nIiE9dHlwZW9mIGV8fDA9PT1lLmxlbmd0aCkpKXRocm93IG5ldyBlKCciY3JpdCIgKENyaXRpY2FsKSBIZWFkZXIgUGFyYW1ldGVyIE1VU1QgYmUgYW4gYXJyYXkgb2Ygbm9uLWVtcHR5IHN0cmluZ3Mgd2hlbiBwcmVzZW50Jyk7bGV0IG87bz12b2lkIDAhPT1uP25ldyBNYXAoWy4uLk9iamVjdC5lbnRyaWVzKG4pLC4uLnQuZW50cmllcygpXSk6dDtmb3IoY29uc3QgdCBvZiByLmNyaXQpe2lmKCFvLmhhcyh0KSl0aHJvdyBuZXcgaWkoJ0V4dGVuc2lvbiBIZWFkZXIgUGFyYW1ldGVyICInLmNvbmNhdCh0LCciIGlzIG5vdCByZWNvZ25pemVkJykpO2lmKHZvaWQgMD09PWlbdF0pdGhyb3cgbmV3IGUoJ0V4dGVuc2lvbiBIZWFkZXIgUGFyYW1ldGVyICInLmNvbmNhdCh0LCciIGlzIG1pc3NpbmcnKSk7aWYoby5nZXQodCkmJnZvaWQgMD09PXJbdF0pdGhyb3cgbmV3IGUoJ0V4dGVuc2lvbiBIZWFkZXIgUGFyYW1ldGVyICInLmNvbmNhdCh0LCciIE1VU1QgYmUgaW50ZWdyaXR5IHByb3RlY3RlZCcpKX1yZXR1cm4gbmV3IFNldChyLmNyaXQpfShvaSxuZXcgTWFwKFtbImI2NCIsITBdXSksbnVsbD09bj92b2lkIDA6bi5jcml0LGksbyk7bGV0IGE9ITA7aWYocy5oYXMoImI2NCIpJiYoYT1pLmI2NCwiYm9vbGVhbiIhPXR5cGVvZiBhKSl0aHJvdyBuZXcgb2koJ1RoZSAiYjY0IiAoYmFzZTY0dXJsLWVuY29kZSBwYXlsb2FkKSBIZWFkZXIgUGFyYW1ldGVyIG11c3QgYmUgYSBib29sZWFuJyk7Y29uc3R7YWxnOmN9PW87aWYoInN0cmluZyIhPXR5cGVvZiBjfHwhYyl0aHJvdyBuZXcgb2koJ0pXUyAiYWxnIiAoQWxnb3JpdGhtKSBIZWFkZXIgUGFyYW1ldGVyIG1pc3Npbmcgb3IgaW52YWxpZCcpO2NvbnN0IHU9biYmKChlLHQpPT57aWYodm9pZCAwIT09dCYmKCFBcnJheS5pc0FycmF5KHQpfHx0LnNvbWUoKGU9PiJzdHJpbmciIT10eXBlb2YgZSkpKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciJy5jb25jYXQoZSwnIiBvcHRpb24gbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzJykpO2lmKHQpcmV0dXJuIG5ldyBTZXQodCl9KSgiYWxnb3JpdGhtcyIsbi5hbGdvcml0aG1zKTtpZih1JiYhdS5oYXMoYykpdGhyb3cgbmV3IHJpKCciYWxnIiAoQWxnb3JpdGhtKSBIZWFkZXIgUGFyYW1ldGVyIG5vdCBhbGxvd2VkJyk7aWYoYSl7aWYoInN0cmluZyIhPXR5cGVvZiBlLnBheWxvYWQpdGhyb3cgbmV3IG9pKCJKV1MgUGF5bG9hZCBtdXN0IGJlIGEgc3RyaW5nIil9ZWxzZSBpZigic3RyaW5nIiE9dHlwZW9mIGUucGF5bG9hZCYmIShlLnBheWxvYWQgaW5zdGFuY2VvZiBVaW50OEFycmF5KSl0aHJvdyBuZXcgb2koIkpXUyBQYXlsb2FkIG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gVWludDhBcnJheSBpbnN0YW5jZSIpO2xldCBsPSExOyJmdW5jdGlvbiI9PXR5cGVvZiB0JiYodD1hd2FpdCB0KGksZSksbD0hMCksYmkoYyx0LCJ2ZXJpZnkiKTtjb25zdCBkPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07Y29uc3Qgcj10LnJlZHVjZSgoKGUsdCk9PntsZXR7bGVuZ3RoOm59PXQ7cmV0dXJuIGUrbn0pLDApLGk9bmV3IFVpbnQ4QXJyYXkocik7bGV0IG89MDtyZXR1cm4gdC5mb3JFYWNoKChlPT57aS5zZXQoZSxvKSxvKz1lLmxlbmd0aH0pKSxpfSgkci5lbmNvZGUobnVsbCE9PShyPWUucHJvdGVjdGVkKSYmdm9pZCAwIT09cj9yOiIiKSwkci5lbmNvZGUoIi4iKSwic3RyaW5nIj09dHlwZW9mIGUucGF5bG9hZD8kci5lbmNvZGUoZS5wYXlsb2FkKTplLnBheWxvYWQpLGg9UXIoZS5zaWduYXR1cmUpO2lmKCFhd2FpdCBraShjLHQsaCxkKSl0aHJvdyBuZXcgbGk7bGV0IGY7Zj1hP1FyKGUucGF5bG9hZCk6InN0cmluZyI9PXR5cGVvZiBlLnBheWxvYWQ/JHIuZW5jb2RlKGUucGF5bG9hZCk6ZS5wYXlsb2FkO2NvbnN0IHA9e3BheWxvYWQ6Zn07cmV0dXJuIHZvaWQgMCE9PWUucHJvdGVjdGVkJiYocC5wcm90ZWN0ZWRIZWFkZXI9aSksdm9pZCAwIT09ZS5oZWFkZXImJihwLnVucHJvdGVjdGVkSGVhZGVyPWUuaGVhZGVyKSxsP3suLi5wLGtleTp0fTpwfXZhciBUaT1lPT5NYXRoLmZsb29yKGUuZ2V0VGltZSgpLzFlMyk7Y29uc3QgQWk9ODY0MDAsQ2k9L14oXGQrfFxkK1wuXGQrKSA/KHNlY29uZHM/fHNlY3M/fHN8bWludXRlcz98bWlucz98bXxob3Vycz98aHJzP3xofGRheXM/fGR8d2Vla3M/fHd8eWVhcnM/fHlycz98eSkkL2k7dmFyIERpPWU9Pntjb25zdCB0PUNpLmV4ZWMoZSk7aWYoIXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCB0aW1lIHBlcmlvZCBmb3JtYXQiKTtjb25zdCBuPXBhcnNlRmxvYXQodFsxXSk7c3dpdGNoKHRbMl0udG9Mb3dlckNhc2UoKSl7Y2FzZSJzZWMiOmNhc2Uic2VjcyI6Y2FzZSJzZWNvbmQiOmNhc2Uic2Vjb25kcyI6Y2FzZSJzIjpyZXR1cm4gTWF0aC5yb3VuZChuKTtjYXNlIm1pbnV0ZSI6Y2FzZSJtaW51dGVzIjpjYXNlIm1pbiI6Y2FzZSJtaW5zIjpjYXNlIm0iOnJldHVybiBNYXRoLnJvdW5kKDYwKm4pO2Nhc2UiaG91ciI6Y2FzZSJob3VycyI6Y2FzZSJociI6Y2FzZSJocnMiOmNhc2UiaCI6cmV0dXJuIE1hdGgucm91bmQoMzYwMCpuKTtjYXNlImRheSI6Y2FzZSJkYXlzIjpjYXNlImQiOnJldHVybiBNYXRoLnJvdW5kKG4qQWkpO2Nhc2Uid2VlayI6Y2FzZSJ3ZWVrcyI6Y2FzZSJ3IjpyZXR1cm4gTWF0aC5yb3VuZCg2MDQ4MDAqbik7ZGVmYXVsdDpyZXR1cm4gTWF0aC5yb3VuZCgzMTU1NzYwMCpuKX19O2NvbnN0IFBpPWU9PmUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9eYXBwbGljYXRpb25cLy8sIiIpLE9pPShlLHQpPT4ic3RyaW5nIj09dHlwZW9mIGU/dC5pbmNsdWRlcyhlKTohIUFycmF5LmlzQXJyYXkoZSkmJnQuc29tZShTZXQucHJvdG90eXBlLmhhcy5iaW5kKG5ldyBTZXQoZSkpKTthc3luYyBmdW5jdGlvbiBJaShlLHQsbil7dmFyIHI7Y29uc3QgaT1hd2FpdCBhc3luYyBmdW5jdGlvbihlLHQsbil7aWYoZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkmJihlPVpyLmRlY29kZShlKSksInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBvaSgiQ29tcGFjdCBKV1MgbXVzdCBiZSBhIHN0cmluZyBvciBVaW50OEFycmF5Iik7Y29uc3R7MDpyLDE6aSwyOm8sbGVuZ3RoOnN9PWUuc3BsaXQoIi4iKTtpZigzIT09cyl0aHJvdyBuZXcgb2koIkludmFsaWQgQ29tcGFjdCBKV1MiKTtjb25zdCBhPWF3YWl0IFJpKHtwYXlsb2FkOmkscHJvdGVjdGVkOnIsc2lnbmF0dXJlOm99LHQsbiksYz17cGF5bG9hZDphLnBheWxvYWQscHJvdGVjdGVkSGVhZGVyOmEucHJvdGVjdGVkSGVhZGVyfTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD97Li4uYyxrZXk6YS5rZXl9OmN9KGUsdCxuKTtpZigobnVsbD09PShyPWkucHJvdGVjdGVkSGVhZGVyLmNyaXQpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmluY2x1ZGVzKCJiNjQiKSkmJiExPT09aS5wcm90ZWN0ZWRIZWFkZXIuYjY0KXRocm93IG5ldyBzaSgiSldUcyBNVVNUIE5PVCB1c2UgdW5lbmNvZGVkIHBheWxvYWQiKTtjb25zdCBvPWZ1bmN0aW9uKGUsdCl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9O2NvbnN0e3R5cDpyfT1uO2lmKHImJigic3RyaW5nIiE9dHlwZW9mIGUudHlwfHxQaShlLnR5cCkhPT1QaShyKSkpdGhyb3cgbmV3IHRpKCd1bmV4cGVjdGVkICJ0eXAiIEpXVCBoZWFkZXIgdmFsdWUnLCJ0eXAiLCJjaGVja19mYWlsZWQiKTtsZXQgaTt0cnl7aT1KU09OLnBhcnNlKFpyLmRlY29kZSh0KSl9Y2F0Y2goZSl7fWlmKCFfaShpKSl0aHJvdyBuZXcgc2koIkpXVCBDbGFpbXMgU2V0IG11c3QgYmUgYSB0b3AtbGV2ZWwgSlNPTiBvYmplY3QiKTtjb25zdHtpc3N1ZXI6b309bjtpZihvJiYhKEFycmF5LmlzQXJyYXkobyk/bzpbb10pLmluY2x1ZGVzKGkuaXNzKSl0aHJvdyBuZXcgdGkoJ3VuZXhwZWN0ZWQgImlzcyIgY2xhaW0gdmFsdWUnLCJpc3MiLCJjaGVja19mYWlsZWQiKTtjb25zdHtzdWJqZWN0OnN9PW47aWYocyYmaS5zdWIhPT1zKXRocm93IG5ldyB0aSgndW5leHBlY3RlZCAic3ViIiBjbGFpbSB2YWx1ZScsInN1YiIsImNoZWNrX2ZhaWxlZCIpO2NvbnN0e2F1ZGllbmNlOmF9PW47aWYoYSYmIU9pKGkuYXVkLCJzdHJpbmciPT10eXBlb2YgYT9bYV06YSkpdGhyb3cgbmV3IHRpKCd1bmV4cGVjdGVkICJhdWQiIGNsYWltIHZhbHVlJywiYXVkIiwiY2hlY2tfZmFpbGVkIik7bGV0IGM7c3dpdGNoKHR5cGVvZiBuLmNsb2NrVG9sZXJhbmNlKXtjYXNlInN0cmluZyI6Yz1EaShuLmNsb2NrVG9sZXJhbmNlKTticmVhaztjYXNlIm51bWJlciI6Yz1uLmNsb2NrVG9sZXJhbmNlO2JyZWFrO2Nhc2UidW5kZWZpbmVkIjpjPTA7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGNsb2NrVG9sZXJhbmNlIG9wdGlvbiB0eXBlIil9Y29uc3R7Y3VycmVudERhdGU6dX09bixsPVRpKHV8fG5ldyBEYXRlKTtpZigodm9pZCAwIT09aS5pYXR8fG4ubWF4VG9rZW5BZ2UpJiYibnVtYmVyIiE9dHlwZW9mIGkuaWF0KXRocm93IG5ldyB0aSgnImlhdCIgY2xhaW0gbXVzdCBiZSBhIG51bWJlcicsImlhdCIsImludmFsaWQiKTtpZih2b2lkIDAhPT1pLm5iZil7aWYoIm51bWJlciIhPXR5cGVvZiBpLm5iZil0aHJvdyBuZXcgdGkoJyJuYmYiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJuYmYiLCJpbnZhbGlkIik7aWYoaS5uYmY+bCtjKXRocm93IG5ldyB0aSgnIm5iZiIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCcsIm5iZiIsImNoZWNrX2ZhaWxlZCIpfWlmKHZvaWQgMCE9PWkuZXhwKXtpZigibnVtYmVyIiE9dHlwZW9mIGkuZXhwKXRocm93IG5ldyB0aSgnImV4cCIgY2xhaW0gbXVzdCBiZSBhIG51bWJlcicsImV4cCIsImludmFsaWQiKTtpZihpLmV4cDw9bC1jKXRocm93IG5ldyBuaSgnImV4cCIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCcsImV4cCIsImNoZWNrX2ZhaWxlZCIpfWlmKG4ubWF4VG9rZW5BZ2Upe2NvbnN0IGU9bC1pLmlhdDtpZihlLWM+KCJudW1iZXIiPT10eXBlb2Ygbi5tYXhUb2tlbkFnZT9uLm1heFRva2VuQWdlOkRpKG4ubWF4VG9rZW5BZ2UpKSl0aHJvdyBuZXcgbmkoJyJpYXQiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQgKHRvbyBmYXIgaW4gdGhlIHBhc3QpJywiaWF0IiwiY2hlY2tfZmFpbGVkIik7aWYoZTwwLWMpdGhyb3cgbmV3IHRpKCciaWF0IiBjbGFpbSB0aW1lc3RhbXAgY2hlY2sgZmFpbGVkIChpdCBzaG91bGQgYmUgaW4gdGhlIHBhc3QpJywiaWF0IiwiY2hlY2tfZmFpbGVkIil9cmV0dXJuIGl9KGkucHJvdGVjdGVkSGVhZGVyLGkucGF5bG9hZCxuKSxzPXtwYXlsb2FkOm8scHJvdGVjdGVkSGVhZGVyOmkucHJvdGVjdGVkSGVhZGVyfTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD97Li4ucyxrZXk6aS5rZXl9OnN9ZnVuY3Rpb24gVWkoZSl7cmV0dXJuIF9pKGUpfWNsYXNzIExpe2NvbnN0cnVjdG9yKGUpe2lmKHRoaXMuX2NhY2hlZD1uZXcgV2Vha01hcCwhZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJvYmplY3QiPT10eXBlb2YgZSYmQXJyYXkuaXNBcnJheShlLmtleXMpJiZlLmtleXMuZXZlcnkoVWkpfShlKSl0aHJvdyBuZXcgYWkoIkpTT04gV2ViIEtleSBTZXQgbWFsZm9ybWVkIik7dmFyIHQ7dGhpcy5fandrcz0odD1lLCJmdW5jdGlvbiI9PXR5cGVvZiBzdHJ1Y3R1cmVkQ2xvbmU/c3RydWN0dXJlZENsb25lKHQpOkpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodCkpKX1hc3luYyBnZXRLZXkoZSx0KXtjb25zdHthbGc6bixraWQ6cn09ey4uLmUsLi4udC5oZWFkZXJ9LGk9ZnVuY3Rpb24oZSl7c3dpdGNoKCJzdHJpbmciPT10eXBlb2YgZSYmZS5zbGljZSgwLDIpKXtjYXNlIlJTIjpjYXNlIlBTIjpyZXR1cm4iUlNBIjtjYXNlIkVTIjpyZXR1cm4iRUMiO2Nhc2UiRWQiOnJldHVybiJPS1AiO2RlZmF1bHQ6dGhyb3cgbmV3IGlpKCdVbnN1cHBvcnRlZCAiYWxnIiB2YWx1ZSBmb3IgYSBKU09OIFdlYiBLZXkgU2V0Jyl9fShuKSxvPXRoaXMuX2p3a3Mua2V5cy5maWx0ZXIoKGU9PntsZXQgdD1pPT09ZS5rdHk7aWYodCYmInN0cmluZyI9PXR5cGVvZiByJiYodD1yPT09ZS5raWQpLHQmJiJzdHJpbmciPT10eXBlb2YgZS5hbGcmJih0PW49PT1lLmFsZyksdCYmInN0cmluZyI9PXR5cGVvZiBlLnVzZSYmKHQ9InNpZyI9PT1lLnVzZSksdCYmQXJyYXkuaXNBcnJheShlLmtleV9vcHMpJiYodD1lLmtleV9vcHMuaW5jbHVkZXMoInZlcmlmeSIpKSx0JiYiRWREU0EiPT09biYmKHQ9IkVkMjU1MTkiPT09ZS5jcnZ8fCJFZDQ0OCI9PT1lLmNydiksdClzd2l0Y2gobil7Y2FzZSJFUzI1NiI6dD0iUC0yNTYiPT09ZS5jcnY7YnJlYWs7Y2FzZSJFUzI1NksiOnQ9InNlY3AyNTZrMSI9PT1lLmNydjticmVhaztjYXNlIkVTMzg0Ijp0PSJQLTM4NCI9PT1lLmNydjticmVhaztjYXNlIkVTNTEyIjp0PSJQLTUyMSI9PT1lLmNydn1yZXR1cm4gdH0pKSx7MDpzLGxlbmd0aDphfT1vO2lmKDA9PT1hKXRocm93IG5ldyBjaTtpZigxIT09YSl0aHJvdyBuZXcgdWk7Y29uc3QgYz10aGlzLl9jYWNoZWQuZ2V0KHMpfHx0aGlzLl9jYWNoZWQuc2V0KHMse30pLmdldChzKTtpZih2b2lkIDA9PT1jW25dKXtjb25zdCBlPWF3YWl0IGFzeW5jIGZ1bmN0aW9uKGUsdCxuKXtpZighX2koZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiSldLIG11c3QgYmUgYW4gb2JqZWN0Iik7aWYodHx8KHQ9ZS5hbGcpLCJzdHJpbmciIT10eXBlb2YgdHx8IXQpdGhyb3cgbmV3IFR5cGVFcnJvcignImFsZyIgYXJndW1lbnQgaXMgcmVxdWlyZWQgd2hlbiAiandrLmFsZyIgaXMgbm90IHByZXNlbnQnKTtzd2l0Y2goZS5rdHkpe2Nhc2Uib2N0IjppZigic3RyaW5nIiE9dHlwZW9mIGUua3x8IWUuayl0aHJvdyBuZXcgVHlwZUVycm9yKCdtaXNzaW5nICJrIiAoS2V5IFZhbHVlKSBQYXJhbWV0ZXIgdmFsdWUnKTtyZXR1cm4gbnVsbCE9bnx8KG49ITAhPT1lLmV4dCksbj9TaSh7Li4uZSxhbGc6dCxleHQ6ITF9KTpRcihlLmspO2Nhc2UiUlNBIjppZih2b2lkIDAhPT1lLm90aCl0aHJvdyBuZXcgaWkoJ1JTQSBKV0sgIm90aCIgKE90aGVyIFByaW1lcyBJbmZvKSBQYXJhbWV0ZXIgdmFsdWUgaXMgbm90IHN1cHBvcnRlZCcpO2Nhc2UiRUMiOmNhc2UiT0tQIjpyZXR1cm4gU2koey4uLmUsYWxnOnR9KTtkZWZhdWx0OnRocm93IG5ldyBpaSgnVW5zdXBwb3J0ZWQgImt0eSIgKEtleSBUeXBlKSBQYXJhbWV0ZXIgdmFsdWUnKX19KHsuLi5zLGV4dDohMH0sbik7aWYoZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fCJwdWJsaWMiIT09ZS50eXBlKXRocm93IG5ldyBhaSgiSlNPTiBXZWIgS2V5IFNldCBtZW1iZXJzIG11c3QgYmUgcHVibGljIGtleXMiKTtjW25dPWV9cmV0dXJuIGNbbl19fXZhciBIaT17ZXhwb3J0czp7fX0sTWk9e2V4cG9ydHM6e319LGppPVAocnQpOwovKiEgc2FmZS1idWZmZXIuIE1JVCBMaWNlbnNlLiBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmcvb3BlbnNvdXJjZT4gKi8KIWZ1bmN0aW9uKGUsdCl7dmFyIG49amkscj1uLkJ1ZmZlcjtmdW5jdGlvbiBpKGUsdCl7Zm9yKHZhciBuIGluIGUpdFtuXT1lW25dfWZ1bmN0aW9uIG8oZSx0LG4pe3JldHVybiByKGUsdCxuKX1yLmZyb20mJnIuYWxsb2MmJnIuYWxsb2NVbnNhZmUmJnIuYWxsb2NVbnNhZmVTbG93P2UuZXhwb3J0cz1uOihpKG4sdCksdC5CdWZmZXI9byksby5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShyLnByb3RvdHlwZSksaShyLG8pLG8uZnJvbT1mdW5jdGlvbihlLHQsbil7aWYoIm51bWJlciI9PXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIHIoZSx0LG4pfSxvLmFsbG9jPWZ1bmN0aW9uKGUsdCxuKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3ZhciBpPXIoZSk7cmV0dXJuIHZvaWQgMCE9PXQ/InN0cmluZyI9PXR5cGVvZiBuP2kuZmlsbCh0LG4pOmkuZmlsbCh0KTppLmZpbGwoMCksaX0sby5hbGxvY1Vuc2FmZT1mdW5jdGlvbihlKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiByKGUpfSxvLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihlKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBuLlNsb3dCdWZmZXIoZSl9fShNaSxNaS5leHBvcnRzKTt2YXIgTmk9NjU1MzYseGk9NDI5NDk2NzI5NTt2YXIgcWk9TWkuZXhwb3J0cy5CdWZmZXIsQmk9Qy5jcnlwdG98fEMubXNDcnlwdG87QmkmJkJpLmdldFJhbmRvbVZhbHVlcz9IaS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYoZT54aSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigicmVxdWVzdGVkIHRvbyBtYW55IHJhbmRvbSBieXRlcyIpO3ZhciBuPXFpLmFsbG9jVW5zYWZlKGUpO2lmKGU+MClpZihlPk5pKWZvcih2YXIgcj0wO3I8ZTtyKz1OaSlCaS5nZXRSYW5kb21WYWx1ZXMobi5zbGljZShyLHIrTmkpKTtlbHNlIEJpLmdldFJhbmRvbVZhbHVlcyhuKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgdClyZXR1cm4gZW4ubmV4dFRpY2soKGZ1bmN0aW9uKCl7dChudWxsLG4pfSkpO3JldHVybiBufTpIaS5leHBvcnRzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJTZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyLlxuVXNlIENocm9tZSwgRmlyZWZveCBvciBJbnRlcm5ldCBFeHBsb3JlciAxMSIpfTt2YXIgRmk9SGkuZXhwb3J0cztjbGFzcyBLaXtiYXNlNjRVUkxFbmNvZGUoZSl7cmV0dXJuIHpyLmVuY29kZShlKS5yZXBsYWNlKC9cKy9nLCItIikucmVwbGFjZSgvXC8vZywiXyIpLnJlcGxhY2UoLz0vZywiIil9YmFzZTY0VVJMRGVjb2RlKGUpe3JldHVybiB6ci5kZWNvZGUoZSkudG9TdHJpbmcoKX1oYXNoU2hhMjU2KGUpe3JldHVybiBtZS5mcm9tKFlyKChuZXcgVGV4dEVuY29kZXIpLmVuY29kZShlKSkpfWdlbmVyYXRlUmFuZG9tQnl0ZXMoZSl7cmV0dXJuIEZpKGUpfXZlcmlmeUp3dChlLHQsbixyLGksbyxzLGEpe2NvbnN0IHU9e2FsZ29yaXRobXM6bixhdWRpZW5jZTpyLGNsb2NrVG9sZXJhbmNlOnMsc3ViamVjdDpvfTtyZXR1cm4obnVsbD09YXx8YSkmJih1Lmlzc3Vlcj1pKSxJaShlLChsPXtrZXlzOlt0XX0sTGkucHJvdG90eXBlLmdldEtleS5iaW5kKG5ldyBMaShsKSkpLHUpLnRoZW4oKCgpPT5Qcm9taXNlLnJlc29sdmUoITApKSkuY2F0Y2goKGU9Pnt2YXIgdDtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IGMoIlNQQS1DUllQVE8tVVRJTFMtVkotSVYwMSIsbnVsbCE9PSh0PW51bGw9PWU/dm9pZCAwOmUucmVhc29uKSYmdm9pZCAwIT09dD90OkpTT04uc3RyaW5naWZ5KGUpLCIiLmNvbmNhdChudWxsPT1lP3ZvaWQgMDplLmNvZGUsIiAiKS5jb25jYXQobnVsbD09ZT92b2lkIDA6ZS5jbGFpbSkpKX0pKTt2YXIgbH19KHQ9Pntjb25zdCBuPXNlbGY7bGV0IHI7bi5vbm1lc3NhZ2U9bj0+e2xldHtkYXRhOmEscG9ydHM6dX09bjtyZXR1cm4gZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIG4sbCxkLGgsZixwO2NvbnN0IHk9dVswXTtpZihhLnR5cGU9PT12fHxyKXN3aXRjaChhLnR5cGUpe2Nhc2Ugdjp0cnl7Y29uc3Qgbj1PYmplY3QuYXNzaWduKHt9LGEuZGF0YSk7cj15aWVsZCgodCxuKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgcj1uZXcgTXIsaT1uZXcgS2ksbz1uZXcgZzt5aWVsZCBvLmluaXRpYWxpemUodCxyLGkpO2NvbnN0IHM9bmV3IEEobyksYT1uKG8scyksYz1vLmdldERhdGFMYXllcigpLHU9SHIuZ2V0SW5zdGFuY2UoKTtyZXR1cm4obnVsbD09dT92b2lkIDA6dS5pbml0KSYmKHlpZWxkIHUuaW5pdCghMCwodD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgYS5hdHRhY2hUb2tlblRvUmVxdWVzdENvbmZpZyh0KX0pKSkpKSx7ZGlzYWJsZUh0dHBIYW5kbGVyOigpPT57YS5kaXNhYmxlSHR0cEhhbmRsZXIodSl9LGVuYWJsZUh0dHBIYW5kbGVyOigpPT57YS5lbmFibGVIdHRwSGFuZGxlcih1KX0sZ2V0QWNjZXNzVG9rZW46KCk9PmEuZ2V0QWNjZXNzVG9rZW4oKSxnZXRBdXRob3JpemF0aW9uVVJMOnQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBvLmdldEF1dGhvcml6YXRpb25VUkwodCkudGhlbigodD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIGU7Y29uc3Qgbj1udWxsIT09KGU9bmV3IFVSTCh0KS5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpKSYmdm9pZCAwIT09ZT9lOiIiLHI9eWllbGQgby5nZXRQS0NFQ29kZShuKTtyZXR1cm57YXV0aG9yaXphdGlvblVSTDp0LHBrY2U6cn19KSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKX0pKSxnZXRCYXNpY1VzZXJJbmZvOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gYS5nZXRCYXNpY1VzZXJJbmZvKCl9KSksZ2V0Q29uZmlnRGF0YTooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIGMuZ2V0Q29uZmlnRGF0YSgpfSkpLGdldENyeXB0b0hlbHBlcjooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIGEuZ2V0Q3J5cHRvSGVscGVyKCl9KSksZ2V0RGVjb2RlZElEUElEVG9rZW46KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBhLmdldERlY29kZWRJRFBJRFRva2VuKCl9KSksZ2V0RGVjb2RlZElEVG9rZW46KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBhLmdldERlY29kZWRJRFRva2VuKCl9KSksZ2V0SURUb2tlbjooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIGEuZ2V0SURUb2tlbigpfSkpLGdldE9JRENTZXJ2aWNlRW5kcG9pbnRzOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gYS5nZXRPSURDU2VydmljZUVuZHBvaW50cygpfSkpLGdldFNpZ25PdXRVUkw6KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCBvLmdldFNpZ25PdXRVUkwoKX0pKSxodHRwUmVxdWVzdDp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgYS5odHRwUmVxdWVzdCh1LHQpfSkpLGh0dHBSZXF1ZXN0QWxsOnQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCBhLmh0dHBSZXF1ZXN0QWxsKHQsdSl9KSksaXNBdXRoZW50aWNhdGVkOigpPT5hLmlzQXV0aGVudGljYXRlZCgpLHJlZnJlc2hBY2Nlc3NUb2tlbjooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dHJ5e3JldHVybiB5aWVsZCBhLnJlZnJlc2hBY2Nlc3NUb2tlbigpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX19KSkscmVxdWVzdEFjY2Vzc1Rva2VuOih0LG4scixpKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIGEucmVxdWVzdEFjY2Vzc1Rva2VuKHQsbix2b2lkIDAscixpKX0pKSxyZXF1ZXN0Q3VzdG9tR3JhbnQ6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIGEucmVxdWVzdEN1c3RvbUdyYW50KHQpfSkpLHJldm9rZUFjY2Vzc1Rva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXlpZWxkIHMuZ2V0UmVmcmVzaFRpbWVvdXRUaW1lcigpO3JldHVybiBvLnJldm9rZUFjY2Vzc1Rva2VuKCkudGhlbigoKCk9PihzLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dChlKSxQcm9taXNlLnJlc29sdmUoITApKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpfSkpLHNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2s6ZT0+eyhudWxsPT11P3ZvaWQgMDp1LnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2spJiZ1LnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2soZSl9LHNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjazplPT57KG51bGw9PXU/dm9pZCAwOnUuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrKSYmdS5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2soZSl9LHNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrOmU9PnsobnVsbD09dT92b2lkIDA6dS5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaykmJnUuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2soZSl9LHNldFNlc3Npb25TdGF0ZTp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCBjLnNldFNlc3Npb25EYXRhUGFyYW1ldGVyKCJzZXNzaW9uX3N0YXRlIix0KX0pKSxzaWduT3V0OigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gcy5jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoKSx5aWVsZCBvLmdldFNpZ25PdXRVUkwoKX0pKSxzdGFydEF1dG9SZWZyZXNoVG9rZW46KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3MuY2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KCkscy5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KGEpfSkpLHVwZGF0ZUNvbmZpZzp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCBvLnVwZGF0ZUNvbmZpZyh0KX0pKX19KSkpKG4sdCksci5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKHMpLHIuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrKGkpLHIuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2sobykseS5wb3N0TWVzc2FnZShrLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoKSl9Y2F0Y2goZSl7eS5wb3N0TWVzc2FnZShrLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0X2F1dGhfdXJsIjpyLmdldEF1dGhvcml6YXRpb25VUkwobnVsbD09YT92b2lkIDA6YS5kYXRhKS50aGVuKChlPT57eS5wb3N0TWVzc2FnZShrLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57eS5wb3N0TWVzc2FnZShrLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UicmVxdWVzdF9nZXRfdG9rZW4iOnIucmVxdWVzdEFjY2Vzc1Rva2VuKG51bGw9PT0obj1udWxsPT1hP3ZvaWQgMDphLmRhdGEpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmNvZGUsbnVsbD09PShsPW51bGw9PWE/dm9pZCAwOmEuZGF0YSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuc2Vzc2lvblN0YXRlLG51bGw9PT0oZD1udWxsPT1hP3ZvaWQgMDphLmRhdGEpfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLnBrY2UsbnVsbD09PShoPW51bGw9PWE/dm9pZCAwOmEuZGF0YSl8fHZvaWQgMD09PWg/dm9pZCAwOmguc3RhdGUpLnRoZW4oKGU9Pnt5LnBvc3RNZXNzYWdlKGsuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9Pnt5LnBvc3RNZXNzYWdlKGsuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJodHRwLXJlcXVlc3QiOntjb25zdCBlPWEuZGF0YSx0PW51bGw9PWU/dm9pZCAwOmUuZGF0YTtpZighMD09PShudWxsPT09KHA9bnVsbD09PShmPWEuZGF0YSl8fHZvaWQgMD09PWY/dm9pZCAwOmYuZGF0YSl8fHZvaWQgMD09PXA/dm9pZCAwOnAuZm9ybURhdGEpKXtjb25zdCBuPW5ldyBGb3JtRGF0YTtmb3IoY29uc3QgZSBpbiB0KSJmb3JtRGF0YSIhPT1lJiZuLmFwcGVuZChlLHRbZV0pO2UuZGF0YT1ufXIuaHR0cFJlcXVlc3QoZSkudGhlbigoZT0+e3kucG9zdE1lc3NhZ2Uoay5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e3kucG9zdE1lc3NhZ2Uoay5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVha31jYXNlImh0dHAtcmVxdWVzdC1hbGwiOnIuaHR0cFJlcXVlc3RBbGwoYS5kYXRhKS50aGVuKChlPT57eS5wb3N0TWVzc2FnZShrLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57eS5wb3N0TWVzc2FnZShrLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2Uic2lnbi1vdXQiOnRyeXt5LnBvc3RNZXNzYWdlKGsuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCByLnNpZ25PdXQoKSkpfWNhdGNoKGUpe3kucG9zdE1lc3NhZ2Uoay5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInJlcXVlc3QtY3VzdG9tLWdyYW50IjpyLnJlcXVlc3RDdXN0b21HcmFudChhLmRhdGEpLnRoZW4oKGU9Pnt5LnBvc3RNZXNzYWdlKGsuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9Pnt5LnBvc3RNZXNzYWdlKGsuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJyZXZva2UtYWNjZXNzLXRva2VuIjpyLnJldm9rZUFjY2Vzc1Rva2VuKCkudGhlbigoZT0+e3kucG9zdE1lc3NhZ2Uoay5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e3kucG9zdE1lc3NhZ2Uoay5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlImdldC1vaWRjLXNlcnZpY2UtZW5kcG9pbnRzIjp0cnl7eS5wb3N0TWVzc2FnZShrLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5nZXRPSURDU2VydmljZUVuZHBvaW50cygpKSl9Y2F0Y2goZSl7eS5wb3N0TWVzc2FnZShrLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0LWJhc2ljLXVzZXItaW5mbyI6dHJ5e3kucG9zdE1lc3NhZ2Uoay5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuZ2V0QmFzaWNVc2VySW5mbygpKSl9Y2F0Y2goZSl7eS5wb3N0TWVzc2FnZShrLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0LWRlY29kZWQtaWQtdG9rZW4iOnRyeXt5LnBvc3RNZXNzYWdlKGsuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCByLmdldERlY29kZWRJRFRva2VuKCkpKX1jYXRjaChlKXt5LnBvc3RNZXNzYWdlKGsuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXQtY3J5cHRvLWhlbHBlciI6dHJ5e3kucG9zdE1lc3NhZ2Uoay5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuZ2V0Q3J5cHRvSGVscGVyKCkpKX1jYXRjaChlKXt5LnBvc3RNZXNzYWdlKGsuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXRfaWRfdG9rZW4iOnRyeXt5LnBvc3RNZXNzYWdlKGsuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCByLmdldElEVG9rZW4oKSkpfWNhdGNoKGUpe3kucG9zdE1lc3NhZ2Uoay5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImVuYWJsZV9odHRwX2hhbmRsZXIiOnIuZW5hYmxlSHR0cEhhbmRsZXIoKSx5LnBvc3RNZXNzYWdlKGsuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKTticmVhaztjYXNlImRpc2FibGVfaHR0cF9oYW5kbGVyIjpyLmRpc2FibGVIdHRwSGFuZGxlcigpLHkucG9zdE1lc3NhZ2Uoay5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKCkpO2JyZWFrO2Nhc2UiaXNfYXV0aGVudGljYXRlZCI6dHJ5e3kucG9zdE1lc3NhZ2Uoay5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuaXNBdXRoZW50aWNhdGVkKCkpKX1jYXRjaChlKXt5LnBvc3RNZXNzYWdlKGsuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXRfc2lnbl9vdXRfdXJsIjp0cnl7eS5wb3N0TWVzc2FnZShrLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5nZXRTaWduT3V0VVJMKCkpKX1jYXRjaChlKXt5LnBvc3RNZXNzYWdlKGsuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJyZWZyZXNoX2FjY2Vzcy10b2tlbiI6dHJ5e3kucG9zdE1lc3NhZ2Uoay5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIucmVmcmVzaEFjY2Vzc1Rva2VuKCkpKX1jYXRjaChlKXt5LnBvc3RNZXNzYWdlKGsuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJzdGFydF9hdXRvX3JlZnJlc2hfdG9rZW4iOnRyeXt5LnBvc3RNZXNzYWdlKGsuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShyLnN0YXJ0QXV0b1JlZnJlc2hUb2tlbigpKSl9Y2F0Y2goZSl7eS5wb3N0TWVzc2FnZShrLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2Uic2V0X3Nlc3Npb25fc3RhdGUiOnRyeXt5LnBvc3RNZXNzYWdlKGsuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCByLnNldFNlc3Npb25TdGF0ZShudWxsPT1hP3ZvaWQgMDphLmRhdGEpKSl9Y2F0Y2goZSl7eS5wb3N0TWVzc2FnZShrLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UidXBkYXRlX2NvbmZpZyI6dHJ5e3kucG9zdE1lc3NhZ2Uoay5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIudXBkYXRlQ29uZmlnKG51bGw9PWE/dm9pZCAwOmEuZGF0YSkpKX1jYXRjaChlKXt5LnBvc3RNZXNzYWdlKGsuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXRfY29uZmlnX2RhdGEiOnRyeXt5LnBvc3RNZXNzYWdlKGsuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCByLmdldENvbmZpZ0RhdGEoKSkpfWNhdGNoKGUpe3kucG9zdE1lc3NhZ2Uoay5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztkZWZhdWx0Om51bGw9PXl8fHkucG9zdE1lc3NhZ2Uoay5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKG5ldyBjKCJTUEEtQ0xJRU5UX1dPUktFUi1PTk1TRy1JVjAyIiwiVGhlIG1lc3NhZ2UgdHlwZSBpcyBpbnZhbGlkLiIsIlRoZSBtZXNzYWdlIHR5cGUgcHJvdmlkZWQsICIuY29uY2F0KGEudHlwZSwiLCBpcyBpbnZhbGlkLiIpKSkpfWVsc2UgeS5wb3N0TWVzc2FnZShrLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UobmV3IGMoIlNQQS1DTElFTlRfV09SS0VSLU9OTVNHLU5GMDEiLCJUaGUgd2ViIHdvcmtlciBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0LiIsIlRoZSBpbml0aWFsaXplIG1ldGhvZCBuZWVkcyB0byBiZSBjYWxsZWQgYmVmb3JlIHRoZSBzcGVjaWZpZWQgb3BlcmF0aW9uIGNhbiBiZSBjYXJyaWVkIG91dC4iKSkpfSkpfTtjb25zdCBpPSgpPT57bi5wb3N0TWVzc2FnZSh7dHlwZToicmVxdWVzdC1zdGFydCJ9KX0sbz1lPT57bi5wb3N0TWVzc2FnZSh7ZGF0YTpKU09OLnN0cmluZ2lmeShudWxsIT1lP2U6IiIpLHR5cGU6InJlcXVlc3Qtc3VjY2VzcyJ9KX0scz0oKT0+e24ucG9zdE1lc3NhZ2Uoe3R5cGU6InJlcXVlc3QtZmluaXNoIn0pfX0pKCgoZSx0KT0+bmV3IFQoZSx0KSkpO3JldHVybnt9fSgpOwoK",Ty=null,By=!1,function(e){return Fy=Fy||Hy(Ay,Ty,By),new Worker(Fy,e)});const xy="token_request_config";var zy;!function(e){e.SignIn="sign-in",e.SignOut="sign-out",e.Initialize="initialize",e.HttpRequestStart="http-request-start",e.HttpRequestFinish="http-request-finish",e.HttpRequestError="http-request-error",e.HttpRequestSuccess="http-request-success",e.RevokeAccessToken="revoke-access-token",e.CustomGrant="custom-grant",e.SignOutFailed="sign-out-failed"}(zy||(zy={}));const Py="Y2hlY2tTZXNzaW9u";var Qy;!function(e){e.LocalStorage="localStorage",e.SessionStorage="sessionStorage",e.WebWorker="webWorker",e.BrowserMemory="browserMemory"}(Qy||(Qy={}));class jy{constructor(){}static generateSuccessMessage(e){return{blob:(null==e?void 0:e.data)instanceof Blob?null==e?void 0:e.data:null,data:JSON.stringify(null!=e?e:""),success:!0}}static generateFailureMessage(e){return(null==e?void 0:e.toJSON)&&delete e.toJSON,{error:JSON.stringify(null!=e?e:""),success:!1}}}class My{constructor(){}static removeAuthorizationCode(){const e=location.href;history.pushState({},document.title,e.replace(/\?code=.*$/,""))}static getPKCE(e){var t;return null!==(t=sessionStorage.getItem(e))&&void 0!==t?t:""}static setPKCE(e,t){sessionStorage.setItem(e,t)}static setSignOutURL(e,t,i){sessionStorage.setItem("".concat(Vy,"-instance_").concat(i,"-").concat(t),e)}static getSignOutURL(e,t){var i;return null!==(i=sessionStorage.getItem("".concat(Vy,"-instance_").concat(t,"-").concat(e)))&&void 0!==i?i:""}static removePKCE(e){sessionStorage.removeItem(e)}static canContinueSignIn(e,t){return!(e&&!My.hasErrorInURL()&&!My.hasAuthSearchParamsInURL()&&!t)}static isInitializedSilentSignIn(){return My.isSilentStatePresentInURL()}static wasSignInCalled(){return!(!My.hasErrorInURL()&&!My.hasAuthSearchParamsInURL()||this.isSilentStatePresentInURL())}static wasSilentSignInCalled(){const e=sessionStorage.getItem("initialized-silent-sign-in"),t=e?JSON.parse(e):null;return Boolean(t)}static isSignOutSuccessful(){return ry(this,void 0,void 0,(function*(){if(Uy.isSignOutSuccessful(window.location.href)){const e=window.location.href.split("?")[0];return history.pushState({},document.title,e),yield Uy.clearUserSessionData(),!0}return!1}))}static didSignOutFail(){if(Uy.didSignOutFail(window.location.href)){const e=new URL(window.location.href),t=e.searchParams.get("error"),i=e.searchParams.get("error_description"),n=window.location.href.split("?")[0];return history.pushState({},document.title,n),{description:null!=i?i:"",error:null!=t?t:""}}return!1}static isSilentStatePresentInURL(){var e;const t=new URL(window.location.href).searchParams.get("state");return null!==(e=null==t?void 0:t.includes("sign-in-silently"))&&void 0!==e&&e}static hasAuthSearchParamsInURL(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.location.search;return/[?&]code=[^&]+/.test(e)}static hasErrorInURL(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.location.href;const t=new URL(e);return!!t.searchParams.get("error")&&t.searchParams.get("state")!==Wy}static canSendPromptNoneRequest(){const e=sessionStorage.getItem("promptNoneRequestSent");return!(e?JSON.parse(e):null)}static setPromptNoneRequestSent(e){sessionStorage.setItem("promptNoneRequestSent",JSON.stringify(e))}static waitTillPageRedirect(e){return ry(this,void 0,void 0,(function*(){const t=null!=e?e:3e3;yield new Promise((e=>setTimeout(e,1e3*t)))}))}}My.until=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:500;const i=n=>e()?n():setTimeout((()=>i(n)),t);return new Promise(i)};class Ey{constructor(e,t){this._authenticationClient=e,this._dataLayer=this._authenticationClient.getDataLayer(),this._spaHelper=t,this._instanceID=this._authenticationClient.getInstanceID(),this._isTokenRefreshing=!1}enableHttpHandler(e){(null==e?void 0:e.enableHandler)&&e.enableHandler()}disableHttpHandler(e){(null==e?void 0:e.disableHandler)&&e.disableHandler()}initializeSessionManger(e,t,i,n,l){var o,c,a;l.initialize(e.clientID,null!==(o=t.checkSessionIframe)&&void 0!==o?o:"",i,null!==(c=e.checkSessionInterval)&&void 0!==c?c:3,null!==(a=e.sessionRefreshInterval)&&void 0!==a?a:300,e.signInRedirectURL,n)}requestCustomGrant(e,t){var i,n,l;return ry(this,void 0,void 0,(function*(){let o=!0,c=!1;if(null==e?void 0:e.tokenEndpoint){o=!1;for(const t of[...null!==(n=null===(i=yield this._dataLayer.getConfigData())||void 0===i?void 0:i.resourceServerURLs)&&void 0!==n?n:[],e.baseUrl])if(t&&(null===(l=e.tokenEndpoint)||void 0===l?void 0:l.startsWith(t))){c=!0;break}}return e.shouldReplayAfterRefresh&&this._dataLayer.setTemporaryDataParameter("custom_grant_config",JSON.stringify(e)),o||c?this._authenticationClient.requestCustomGrant(e).then((i=>ry(this,void 0,void 0,(function*(){return t&&"function"==typeof t&&t(e),e.returnsSession?(this._spaHelper.refreshAccessTokenAutomatically(this),this._authenticationClient.getBasicUserInfo()):i})))).catch((e=>Promise.reject(e))):Promise.reject(new vy("SPA-MAIN_THREAD_CLIENT-RCG-IV01","Request to the provided endpoint is prohibited.","Requests can only be sent to resource servers specified by the `resourceServerURLs` attribute while initializing the SDK. The specified token endpoint in this request cannot be found among the `resourceServerURLs`"))}))}getCustomGrantConfigData(){return ry(this,void 0,void 0,(function*(){const e=yield this._dataLayer.getTemporaryDataParameter("custom_grant_config");return e?JSON.parse(e):null}))}refreshAccessToken(e){return ry(this,void 0,void 0,(function*(){try{yield this._authenticationClient.refreshAccessToken();const t=yield this.getCustomGrantConfigData();return t&&(yield this.requestCustomGrant(t,e)),this._spaHelper.refreshAccessTokenAutomatically(this),this._authenticationClient.getBasicUserInfo()}catch(e){const t={type:"refresh-access-token-error"};return window.postMessage(t),Promise.reject(e)}}))}retryFailedRequests(e){return ry(this,void 0,void 0,(function*(){const t=e.httpClient,i=e.requestConfig,n=e.isHttpHandlerEnabled,l=e.httpErrorCallback,o=e.httpFinishCallback;yield My.until((()=>!this._isTokenRefreshing));try{const e=yield t.request(i);return Promise.resolve(e)}catch(e){return n&&("function"==typeof l&&(yield l(e)),"function"==typeof o&&o()),Promise.reject(e)}}))}httpRequest(e,t,i,n,l,o){var c,a;return ry(this,void 0,void 0,(function*(){let r=!1;const d=yield this._dataLayer.getConfigData();for(const e of[...null!==(c=yield null==d?void 0:d.resourceServerURLs)&&void 0!==c?c:[],d.baseUrl])if(e&&(null===(a=null==t?void 0:t.url)||void 0===a?void 0:a.startsWith(e))){r=!0;break}return r?e.request(t).then((e=>Promise.resolve(e))).catch((c=>ry(this,void 0,void 0,(function*(){var a,r,d;if(401===(null===(a=null==c?void 0:c.response)||void 0===a?void 0:a.status)||!(null==c?void 0:c.response)){if(this._isTokenRefreshing)return this.retryFailedRequests({enableRetrievingSignOutURLFromSession:o,httpClient:e,httpErrorCallback:n,httpFinishCallback:l,isHttpHandlerEnabled:i,requestConfig:t});let a;this._isTokenRefreshing=!0;try{a=yield this.refreshAccessToken(o),this._isTokenRefreshing=!1}catch(e){throw this._isTokenRefreshing=!1,i&&("function"==typeof n&&(yield n(Object.assign(Object.assign({},c),{code:"Access token is invalid"}))),"function"==typeof l&&l()),new vy("SPA-AUTH_HELPER-HR-SE01",null!==(r=null==e?void 0:e.name)&&void 0!==r?r:"Refresh token request failed.",null!==(d=null==e?void 0:e.message)&&void 0!==d?d:"An error occurred while trying to refresh the access token following a 401 response from the server.")}if(a)try{const i=yield e.request(t);return Promise.resolve(i)}catch(e){return i&&("function"==typeof n&&(yield n(e)),"function"==typeof l&&l()),Promise.reject(e)}}return i&&("function"==typeof n&&(yield n(c)),"function"==typeof l&&l()),Promise.reject(c)})))):Promise.reject(new vy("SPA-AUTH_HELPER-HR-IV02","Request to the provided endpoint is prohibited.","Requests can only be sent to resource servers specified by the `resourceServerURLs` attribute while initializing the SDK. The specified endpoint in this request cannot be found among the `resourceServerURLs`"))}))}httpRequestAll(e,t,i,n,l){var o,c,a;return ry(this,void 0,void 0,(function*(){let r=!0;const d=yield this._dataLayer.getConfigData();for(const t of e){let e=!1;for(const i of[...null!==(c=null===(o=yield d)||void 0===o?void 0:o.resourceServerURLs)&&void 0!==c?c:[],d.baseUrl])if(i&&(null===(a=t.url)||void 0===a?void 0:a.startsWith(i))){e=!0;break}if(!e){r=!1;break}}const s=[];if(r)return e.forEach((e=>{s.push(t.request(e))})),(null==t?void 0:t.all)&&t.all(s).then((e=>Promise.resolve(e))).catch((e=>ry(this,void 0,void 0,(function*(){var o,c,a;if(401===(null===(o=null==e?void 0:e.response)||void 0===o?void 0:o.status)||!(null==e?void 0:e.response)){let o;try{o=yield this._authenticationClient.refreshAccessToken()}catch(t){throw i&&("function"==typeof n&&(yield n(Object.assign(Object.assign({},e),{code:"Access token is invalid"}))),"function"==typeof l&&l()),new vy("SPA-AUTH_HELPER-HRA-SE01",null!==(c=null==t?void 0:t.name)&&void 0!==c?c:"Refresh token request failed.",null!==(a=null==t?void 0:t.message)&&void 0!==a?a:"An error occurred while trying to refresh the access token following a 401 response from the server.")}if(o)return t.all&&t.all(s).then((e=>Promise.resolve(e))).catch((e=>ry(this,void 0,void 0,(function*(){return i&&("function"==typeof n&&(yield n(e)),"function"==typeof l&&l()),Promise.reject(e)}))))}return i&&("function"==typeof n&&(yield n(e)),"function"==typeof l&&l()),Promise.reject(e)}))));throw new vy("SPA-AUTH_HELPER-HRA-IV02","Request to the provided endpoint is prohibited.","Requests can only be sent to resource servers specified by the `resourceServerURLs` attribute while initializing the SDK. The specified endpoint in this request cannot be found among the `resourceServerURLs`")}))}requestAccessToken(e,t,i,n,l,o){return ry(this,void 0,void 0,(function*(){const c=yield this._dataLayer.getConfigData();if(c.storage===Qy.BrowserMemory&&c.enablePKCE&&t){const e=My.getPKCE(fy.extractPKCEKeyFromStateParam(t));yield this._authenticationClient.setPKCECode(fy.extractPKCEKeyFromStateParam(t),e)}else c.storage===Qy.WebWorker&&n&&(yield this._authenticationClient.setPKCECode(n,null!=l?l:""));return e?this._authenticationClient.requestAccessToken(e,null!=t?t:"",null!=l?l:"",void 0,o).then((()=>ry(this,void 0,void 0,(function*(){return c.storage!==Qy.WebWorker?(My.setSignOutURL(yield this._authenticationClient.getSignOutURL(),c.clientID,this._instanceID),this._spaHelper&&(this._spaHelper.clearRefreshTokenTimeout(),this._spaHelper.refreshAccessTokenAutomatically(this)),i&&"function"==typeof i&&c.enableOIDCSessionManagement&&i()):this._spaHelper&&this._spaHelper.refreshAccessTokenAutomatically(this),this._authenticationClient.getBasicUserInfo()})))).catch((e=>Promise.reject(e))):Promise.reject(new vy("SPA-AUTH_HELPER-RAT1-NF01","No authorization code.","No authorization code was found."))}))}trySignInSilently(e,t,i,n,l){var o;return ry(this,void 0,void 0,(function*(){if(My.isInitializedSilentSignIn())return yield i.receivePromptNoneResponse(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""});const c=document.getElementById("rpIFrame"),a=null===(o=null==c?void 0:c.contentDocument)||void 0===o?void 0:o.getElementById("promptNoneIFrame");try{const t=yield e(n);a.src=t}catch(e){return Promise.reject(e)}return new Promise(((e,i)=>{const n=setTimeout((()=>{e(!1)}),1e4),o=c=>ry(this,void 0,void 0,(function*(){var a,r,d,s;const u=c.data;"check_session_signed_out"==(null==u?void 0:u.type)&&(window.removeEventListener("message",o),clearTimeout(n),e(!1)),"check_session_signed_in"==(null==u?void 0:u.type)&&(null===(a=null==u?void 0:u.data)||void 0===a?void 0:a.code)&&t(null===(r=null==u?void 0:u.data)||void 0===r?void 0:r.code,null===(d=null==u?void 0:u.data)||void 0===d?void 0:d.sessionState,null===(s=null==u?void 0:u.data)||void 0===s?void 0:s.state,l).then((t=>{window.removeEventListener("message",o),e(t)})).catch((e=>{window.removeEventListener("message",o),i(e)})).finally((()=>{clearTimeout(n)}))}));window.addEventListener("message",o)}))}))}handleSignIn(e,t,i){return ry(this,void 0,void 0,(function*(){const n=yield this._dataLayer.getConfigData();if(yield e())return Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""});if(n.storage!==Qy.WebWorker&&(yield this._authenticationClient.isAuthenticated()))return this._spaHelper.clearRefreshTokenTimeout(),this._spaHelper.refreshAccessTokenAutomatically(this),n.enableOIDCSessionManagement&&t(),Promise.resolve(yield this._authenticationClient.getBasicUserInfo());const l=new URL(window.location.href).searchParams.get("error"),o=new URL(window.location.href).searchParams.get("error_description");if(l){const e=new URL(window.location.href);throw e.searchParams.delete("error"),e.searchParams.delete("error_description"),history.pushState(null,document.title,e.toString()),new vy("SPA-AUTH_HELPER-SI-SE01",l,null!=o?o:"")}if(n.storage===Qy.WebWorker&&i){const e=yield i();if(e)return e}}))}attachTokenToRequestConfig(e){return ry(this,void 0,void 0,(function*(){const t=Object.assign({attachToken:!0},e);t.attachToken&&(t.shouldAttachIDPAccessToken?e.headers=Object.assign(Object.assign({},e.headers),{Authorization:"Bearer ".concat(yield this.getIDPAccessToken())}):e.headers=Object.assign(Object.assign({},e.headers),{Authorization:"Bearer ".concat(yield this.getAccessToken())}))}))}getBasicUserInfo(){return ry(this,void 0,void 0,(function*(){return this._authenticationClient.getBasicUserInfo()}))}getDecodedIDToken(){return ry(this,void 0,void 0,(function*(){return this._authenticationClient.getDecodedIDToken()}))}getDecodedIDPIDToken(){return ry(this,void 0,void 0,(function*(){return this._authenticationClient.getDecodedIDToken()}))}getCryptoHelper(){return ry(this,void 0,void 0,(function*(){return this._authenticationClient.getCryptoHelper()}))}getIDToken(){return ry(this,void 0,void 0,(function*(){return this._authenticationClient.getIDToken()}))}getOIDCServiceEndpoints(){return ry(this,void 0,void 0,(function*(){return this._authenticationClient.getOIDCServiceEndpoints()}))}getAccessToken(){return ry(this,void 0,void 0,(function*(){return this._authenticationClient.getAccessToken()}))}getIDPAccessToken(){var e;return ry(this,void 0,void 0,(function*(){return null===(e=yield this._dataLayer.getSessionData())||void 0===e?void 0:e.access_token}))}getDataLayer(){return this._dataLayer}isAuthenticated(){return ry(this,void 0,void 0,(function*(){return this._authenticationClient.isAuthenticated()}))}}class Dy{constructor(e){this._authenticationClient=e,this._dataLayer=this._authenticationClient.getDataLayer()}refreshAccessTokenAutomatically(e){var t,i;return ry(this,void 0,void 0,(function*(){if(!(null!==(i=null===(t=yield this._dataLayer.getConfigData())||void 0===t?void 0:t.periodicTokenRefresh)&&void 0!==i&&i))return;const n=yield this._dataLayer.getSessionData();if(n.refresh_token){const t=parseInt(n.expires_in),i=setTimeout((()=>ry(this,void 0,void 0,(function*(){yield e.refreshAccessToken()}))),1e3*(t<=10?t:t-10));yield this._dataLayer.setTemporaryDataParameter(py,JSON.stringify(i))}}))}getRefreshTimeoutTimer(){return ry(this,void 0,void 0,(function*(){return(yield this._dataLayer.getTemporaryDataParameter(py))?JSON.parse(yield this._dataLayer.getTemporaryDataParameter(py)):-1}))}clearRefreshTokenTimeout(e){return ry(this,void 0,void 0,(function*(){if(e)return void clearTimeout(e);const t=yield this.getRefreshTimeoutTimer();-1!==t&&clearTimeout(t)}))}}const Oy=(()=>{let e,t,i,n,l,o,c,a,r,d,s;const u=(c,a,r,d,u,h,b)=>{e=c,t=a,i=r,n=d,l=h,o=u,s=b,n>-1&&Z(),o>-1&&(u=setInterval((()=>{m()}),1e3*o))},Z=()=>ry(void 0,void 0,void 0,(function*(){var o;if(!t||!e||!l)return;const c="opIFrame";const r=document.getElementById("rpIFrame");(null===(o=null==r?void 0:r.contentDocument)||void 0===o?void 0:o.getElementById(c)).src=t+"?client_id="+e+"&redirect_uri="+l,a=setInterval((function(){var n;return ry(this,void 0,void 0,(function*(){const l=yield i();if(Boolean(e)&&Boolean(l)){const i="".concat(e," ").concat(l),o=document.getElementById("rpIFrame"),a=(null===(n=null==o?void 0:o.contentDocument)||void 0===n?void 0:n.getElementById(c)).contentWindow;null==a||a.postMessage(i,t)}}))}),1e3*n),b()})),h=()=>{clearInterval(a),clearInterval(undefined)},b=()=>{null===window||void 0===window||window.addEventListener("message",(function(e){var i;return ry(this,void 0,void 0,(function*(){const n=t;!n||(null==n?void 0:n.indexOf(e.origin))<0||"set_session_state_from_iframe"===(null===(i=null==e?void 0:e.data)||void 0===i?void 0:i.type)||"unchanged"===e.data||("error"===e.data?window.location.href=yield c():"changed"===e.data&&m())}))}),!1)},m=()=>ry(void 0,void 0,void 0,(function*(){var e;const t=document.getElementById("rpIFrame"),i=null===(e=null==t?void 0:t.contentDocument)||void 0===e?void 0:e.getElementById("promptNoneIFrame");if(My.canSendPromptNoneRequest()){My.setPromptNoneRequestSent(!0);const e=t=>{var i,n,l;"set_session_state_from_iframe"===(null===(i=null==t?void 0:t.data)||void 0===i?void 0:i.type)&&(d(null!==(l=null===(n=null==t?void 0:t.data)||void 0===n?void 0:n.data)&&void 0!==l?l:""),null===window||void 0===window||window.removeEventListener("message",e))};r!==Qy.BrowserMemory&&r!==Qy.WebWorker||null===window||void 0===window||window.addEventListener("message",e);const t=yield s({prompt:"none",response_mode:"query",state:Py});i.src=t}})),p=e=>ry(void 0,void 0,void 0,(function*(){var t,i;const n=new URL(window.location.href).searchParams.get("state"),l=new URL(window.location.href).searchParams.get(Xy),o=window.parent.parent;if(null!==n&&(n.includes(Py)||n.includes("sign-in-silently"))){const a=new URL(window.location.href).searchParams.get("code");if(null!==a&&0!==a.length){if(n.includes("sign-in-silently")){const e={data:{code:a,sessionState:null!=l?l:"",state:n},type:"check_session_signed_in"};return sessionStorage.setItem("initialized-silent-sign-in","false"),o.postMessage(e,o.origin),My.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield My.waitTillPageRedirect(),!0}const c=new URL(window.location.href).searchParams.get("session_state");if(r===Qy.LocalStorage||r===Qy.SessionStorage)e&&(yield e(c));else{const e={data:null!=c?c:"",type:"set_session_state_from_iframe"};null===(i=null===(t=null===window||void 0===window?void 0:window.parent)||void 0===t?void 0:t.parent)||void 0===i||i.postMessage(e)}return My.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield My.waitTillPageRedirect(),!0}{if(n.includes("sign-in-silently")){const e={type:"check_session_signed_out"};return window.parent.parent.postMessage(e,o.origin),My.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield My.waitTillPageRedirect(),!0}My.setPromptNoneRequestSent(!1);const e=yield c();return yield Uy.clearUserSessionData(),o.location.href=e,window.location.href="about:blank",yield My.waitTillPageRedirect(),!0}}return!1}));return(e,t,i)=>ry(void 0,void 0,void 0,(function*(){var n;let l=document.createElement("iframe");l.setAttribute("id","rpIFrame"),l.style.display="none";let o=!1;l.onload=()=>{var e,t,i,n;l=document.getElementById("rpIFrame");const c=null==l?void 0:l.contentDocument,a=null==c?void 0:c.createElement("iframe");a&&(a.setAttribute("id","opIFrame"),a.style.display="none");const r=null==c?void 0:c.createElement("iframe");r&&(r.setAttribute("id","promptNoneIFrame"),r.style.display="none"),a&&(null===(t=null===(e=null==l?void 0:l.contentDocument)||void 0===e?void 0:e.body)||void 0===t||t.appendChild(a)),r&&(null===(n=null===(i=null==l?void 0:l.contentDocument)||void 0===i?void 0:i.body)||void 0===n||n.appendChild(r)),o=!0},null===(n=null===document||void 0===document?void 0:document.body)||void 0===n||n.appendChild(l),c=e,r=t,d=i;for(;!1===o;)yield new Promise((e=>setTimeout(e,1)));return{initialize:u,receivePromptNoneResponse:p,reset:h}}))})();var _y,qy={exports:{}},$y=function(e,t){return function(){return e.apply(t,arguments)}},eX=$y,tX=Object.prototype.toString,iX=(_y=Object.create(null),function(e){var t=tX.call(e);return _y[t]||(_y[t]=t.slice(8,-1).toLowerCase())});function nX(e){return e=e.toLowerCase(),function(t){return iX(t)===e}}function lX(e){return Array.isArray(e)}function oX(e){return void 0===e}var cX=nX("ArrayBuffer");function aX(e){return"number"==typeof e}function rX(e){return null!==e&&"object"==typeof e}function dX(e){if("object"!==iX(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}var sX=nX("Date"),uX=nX("File"),ZX=nX("Blob"),hX=nX("FileList");function bX(e){return"[object Function]"===tX.call(e)}var mX=nX("URLSearchParams");function pX(e,t){if(null!=e)if("object"!=typeof e&&(e=[e]),lX(e))for(var i=0,n=e.length;i<n;i++)t.call(null,e[i],i,e);else for(var l in e)Object.prototype.hasOwnProperty.call(e,l)&&t.call(null,e[l],l,e)}var IX=function(e){return function(t){return e&&t instanceof e}}("undefined"!=typeof Uint8Array&&Object.getPrototypeOf(Uint8Array));var gX,GX=nX("HTMLFormElement"),yX=(gX=Object.prototype.hasOwnProperty,function(e,t){return gX.call(e,t)}),XX={isArray:lX,isArrayBuffer:cX,isBuffer:function(e){return null!==e&&!oX(e)&&null!==e.constructor&&!oX(e.constructor)&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)},isFormData:function(e){var t="[object FormData]";return e&&("function"==typeof FormData&&e instanceof FormData||tX.call(e)===t||bX(e.toString)&&e.toString()===t)},isArrayBufferView:function(e){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&cX(e.buffer)},isString:function(e){return"string"==typeof e},isNumber:aX,isObject:rX,isPlainObject:dX,isEmptyObject:function(e){return e&&0===Object.keys(e).length&&Object.getPrototypeOf(e)===Object.prototype},isUndefined:oX,isDate:sX,isFile:uX,isBlob:ZX,isFunction:bX,isStream:function(e){return rX(e)&&bX(e.pipe)},isURLSearchParams:mX,isStandardBrowserEnv:function(){var e;return("undefined"==typeof navigator||"ReactNative"!==(e=navigator.product)&&"NativeScript"!==e&&"NS"!==e)&&("undefined"!=typeof window&&"undefined"!=typeof document)},forEach:pX,merge:function e(){var t={};function i(i,n){dX(t[n])&&dX(i)?t[n]=e(t[n],i):dX(i)?t[n]=e({},i):lX(i)?t[n]=i.slice():t[n]=i}for(var n=0,l=arguments.length;n<l;n++)pX(arguments[n],i);return t},extend:function(e,t,i){return pX(t,(function(t,n){e[n]=i&&"function"==typeof t?eX(t,i):t})),e},trim:function(e){return e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")},stripBOM:function(e){return 65279===e.charCodeAt(0)&&(e=e.slice(1)),e},inherits:function(e,t,i,n){e.prototype=Object.create(t.prototype,n),e.prototype.constructor=e,i&&Object.assign(e.prototype,i)},toFlatObject:function(e,t,i,n){var l,o,c,a={};if(t=t||{},null==e)return t;do{for(o=(l=Object.getOwnPropertyNames(e)).length;o-- >0;)c=l[o],n&&!n(c,e,t)||a[c]||(t[c]=e[c],a[c]=!0);e=!1!==i&&Object.getPrototypeOf(e)}while(e&&(!i||i(e,t))&&e!==Object.prototype);return t},kindOf:iX,kindOfTest:nX,endsWith:function(e,t,i){e=String(e),(void 0===i||i>e.length)&&(i=e.length),i-=t.length;var n=e.indexOf(t,i);return-1!==n&&n===i},toArray:function(e){if(!e)return null;if(lX(e))return e;var t=e.length;if(!aX(t))return null;for(var i=new Array(t);t-- >0;)i[t]=e[t];return i},isTypedArray:IX,isFileList:hX,forEachEntry:function(e,t){for(var i,n=(e&&e[Symbol.iterator]).call(e);(i=n.next())&&!i.done;){var l=i.value;t.call(e,l[0],l[1])}},matchAll:function(e,t){for(var i,n=[];null!==(i=e.exec(t));)n.push(i);return n},isHTMLForm:GX,hasOwnProperty:yX},VX="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},WX=[],CX=[],RX="undefined"!=typeof Uint8Array?Uint8Array:Array,SX=!1;function vX(){SX=!0;for(var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",t=0,i=e.length;t<i;++t)WX[t]=e[t],CX[e.charCodeAt(t)]=t;CX["-".charCodeAt(0)]=62,CX["_".charCodeAt(0)]=63}function fX(e,t,i){for(var n,l,o=[],c=t;c<i;c+=3)n=(e[c]<<16)+(e[c+1]<<8)+e[c+2],o.push(WX[(l=n)>>18&63]+WX[l>>12&63]+WX[l>>6&63]+WX[63&l]);return o.join("")}function YX(e){var t;SX||vX();for(var i=e.length,n=i%3,l="",o=[],c=16383,a=0,r=i-n;a<r;a+=c)o.push(fX(e,a,a+c>r?r:a+c));return 1===n?(t=e[i-1],l+=WX[t>>2],l+=WX[t<<4&63],l+="=="):2===n&&(t=(e[i-2]<<8)+e[i-1],l+=WX[t>>10],l+=WX[t>>4&63],l+=WX[t<<2&63],l+="="),o.push(l),o.join("")}function KX(e,t,i,n,l){var o,c,a=8*l-n-1,r=(1<<a)-1,d=r>>1,s=-7,u=i?l-1:0,Z=i?-1:1,h=e[t+u];for(u+=Z,o=h&(1<<-s)-1,h>>=-s,s+=a;s>0;o=256*o+e[t+u],u+=Z,s-=8);for(c=o&(1<<-s)-1,o>>=-s,s+=n;s>0;c=256*c+e[t+u],u+=Z,s-=8);if(0===o)o=1-d;else{if(o===r)return c?NaN:1/0*(h?-1:1);c+=Math.pow(2,n),o-=d}return(h?-1:1)*c*Math.pow(2,o-n)}function NX(e,t,i,n,l,o){var c,a,r,d=8*o-l-1,s=(1<<d)-1,u=s>>1,Z=23===l?Math.pow(2,-24)-Math.pow(2,-77):0,h=n?0:o-1,b=n?1:-1,m=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(a=isNaN(t)?1:0,c=s):(c=Math.floor(Math.log(t)/Math.LN2),t*(r=Math.pow(2,-c))<1&&(c--,r*=2),(t+=c+u>=1?Z/r:Z*Math.pow(2,1-u))*r>=2&&(c++,r/=2),c+u>=s?(a=0,c=s):c+u>=1?(a=(t*r-1)*Math.pow(2,l),c+=u):(a=t*Math.pow(2,u-1)*Math.pow(2,l),c=0));l>=8;e[i+h]=255&a,h+=b,a/=256,l-=8);for(c=c<<l|a,d+=l;d>0;e[i+h]=255&c,h+=b,c/=256,d-=8);e[i+h-b]|=128*m}var JX={}.toString,LX=Array.isArray||function(e){return"[object Array]"==JX.call(e)};AX.TYPED_ARRAY_SUPPORT=void 0===VX.TYPED_ARRAY_SUPPORT||VX.TYPED_ARRAY_SUPPORT;var kX=UX();function UX(){return AX.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function HX(e,t){if(UX()<t)throw new RangeError("Invalid typed array length");return AX.TYPED_ARRAY_SUPPORT?(e=new Uint8Array(t)).__proto__=AX.prototype:(null===e&&(e=new AX(t)),e.length=t),e}function AX(e,t,i){if(!(AX.TYPED_ARRAY_SUPPORT||this instanceof AX))return new AX(e,t,i);if("number"==typeof e){if("string"==typeof t)throw new Error("If encoding is specified then the first argument must be a string");return FX(this,e)}return TX(this,e,t,i)}function TX(e,t,i,n){if("number"==typeof t)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&t instanceof ArrayBuffer?function(e,t,i,n){if(t.byteLength,i<0||t.byteLength<i)throw new RangeError("'offset' is out of bounds");if(t.byteLength<i+(n||0))throw new RangeError("'length' is out of bounds");t=void 0===i&&void 0===n?new Uint8Array(t):void 0===n?new Uint8Array(t,i):new Uint8Array(t,i,n);AX.TYPED_ARRAY_SUPPORT?(e=t).__proto__=AX.prototype:e=wX(e,t);return e}(e,t,i,n):"string"==typeof t?function(e,t,i){"string"==typeof i&&""!==i||(i="utf8");if(!AX.isEncoding(i))throw new TypeError('"encoding" must be a valid string encoding');var n=0|PX(t,i),l=(e=HX(e,n)).write(t,i);l!==n&&(e=e.slice(0,l));return e}(e,t,i):function(e,t){if(zX(t)){var i=0|xX(t.length);return 0===(e=HX(e,i)).length||t.copy(e,0,0,i),e}if(t){if("undefined"!=typeof ArrayBuffer&&t.buffer instanceof ArrayBuffer||"length"in t)return"number"!=typeof t.length||(n=t.length)!=n?HX(e,0):wX(e,t);if("Buffer"===t.type&&LX(t.data))return wX(e,t.data)}var n;throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(e,t)}function BX(e){if("number"!=typeof e)throw new TypeError('"size" argument must be a number');if(e<0)throw new RangeError('"size" argument must not be negative')}function FX(e,t){if(BX(t),e=HX(e,t<0?0:0|xX(t)),!AX.TYPED_ARRAY_SUPPORT)for(var i=0;i<t;++i)e[i]=0;return e}function wX(e,t){var i=t.length<0?0:0|xX(t.length);e=HX(e,i);for(var n=0;n<i;n+=1)e[n]=255&t[n];return e}function xX(e){if(e>=UX())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+UX().toString(16)+" bytes");return 0|e}function zX(e){return!(null==e||!e._isBuffer)}function PX(e,t){if(zX(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var i=e.length;if(0===i)return 0;for(var n=!1;;)switch(t){case"ascii":case"latin1":case"binary":return i;case"utf8":case"utf-8":case void 0:return pV(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*i;case"hex":return i>>>1;case"base64":return IV(e).length;default:if(n)return pV(e).length;t=(""+t).toLowerCase(),n=!0}}function QX(e,t,i){var n=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===i||i>this.length)&&(i=this.length),i<=0)return"";if((i>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return oV(this,t,i);case"utf8":case"utf-8":return iV(this,t,i);case"ascii":return nV(this,t,i);case"latin1":case"binary":return lV(this,t,i);case"base64":return tV(this,t,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return cV(this,t,i);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function jX(e,t,i){var n=e[t];e[t]=e[i],e[i]=n}function MX(e,t,i,n,l){if(0===e.length)return-1;if("string"==typeof i?(n=i,i=0):i>2147483647?i=2147483647:i<-2147483648&&(i=-2147483648),i=+i,isNaN(i)&&(i=l?0:e.length-1),i<0&&(i=e.length+i),i>=e.length){if(l)return-1;i=e.length-1}else if(i<0){if(!l)return-1;i=0}if("string"==typeof t&&(t=AX.from(t,n)),zX(t))return 0===t.length?-1:EX(e,t,i,n,l);if("number"==typeof t)return t&=255,AX.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?l?Uint8Array.prototype.indexOf.call(e,t,i):Uint8Array.prototype.lastIndexOf.call(e,t,i):EX(e,[t],i,n,l);throw new TypeError("val must be string, number or Buffer")}function EX(e,t,i,n,l){var o,c=1,a=e.length,r=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;c=2,a/=2,r/=2,i/=2}function d(e,t){return 1===c?e[t]:e.readUInt16BE(t*c)}if(l){var s=-1;for(o=i;o<a;o++)if(d(e,o)===d(t,-1===s?0:o-s)){if(-1===s&&(s=o),o-s+1===r)return s*c}else-1!==s&&(o-=o-s),s=-1}else for(i+r>a&&(i=a-r),o=i;o>=0;o--){for(var u=!0,Z=0;Z<r;Z++)if(d(e,o+Z)!==d(t,Z)){u=!1;break}if(u)return o}return-1}function DX(e,t,i,n){i=Number(i)||0;var l=e.length-i;n?(n=Number(n))>l&&(n=l):n=l;var o=t.length;if(o%2!=0)throw new TypeError("Invalid hex string");n>o/2&&(n=o/2);for(var c=0;c<n;++c){var a=parseInt(t.substr(2*c,2),16);if(isNaN(a))return c;e[i+c]=a}return c}function OX(e,t,i,n){return gV(pV(t,e.length-i),e,i,n)}function _X(e,t,i,n){return gV(function(e){for(var t=[],i=0;i<e.length;++i)t.push(255&e.charCodeAt(i));return t}(t),e,i,n)}function qX(e,t,i,n){return _X(e,t,i,n)}function $X(e,t,i,n){return gV(IV(t),e,i,n)}function eV(e,t,i,n){return gV(function(e,t){for(var i,n,l,o=[],c=0;c<e.length&&!((t-=2)<0);++c)n=(i=e.charCodeAt(c))>>8,l=i%256,o.push(l),o.push(n);return o}(t,e.length-i),e,i,n)}function tV(e,t,i){return 0===t&&i===e.length?YX(e):YX(e.slice(t,i))}function iV(e,t,i){i=Math.min(e.length,i);for(var n=[],l=t;l<i;){var o,c,a,r,d=e[l],s=null,u=d>239?4:d>223?3:d>191?2:1;if(l+u<=i)switch(u){case 1:d<128&&(s=d);break;case 2:128==(192&(o=e[l+1]))&&(r=(31&d)<<6|63&o)>127&&(s=r);break;case 3:o=e[l+1],c=e[l+2],128==(192&o)&&128==(192&c)&&(r=(15&d)<<12|(63&o)<<6|63&c)>2047&&(r<55296||r>57343)&&(s=r);break;case 4:o=e[l+1],c=e[l+2],a=e[l+3],128==(192&o)&&128==(192&c)&&128==(192&a)&&(r=(15&d)<<18|(63&o)<<12|(63&c)<<6|63&a)>65535&&r<1114112&&(s=r)}null===s?(s=65533,u=1):s>65535&&(s-=65536,n.push(s>>>10&1023|55296),s=56320|1023&s),n.push(s),l+=u}return function(e){var t=e.length;if(t<=4096)return String.fromCharCode.apply(String,e);var i="",n=0;for(;n<t;)i+=String.fromCharCode.apply(String,e.slice(n,n+=4096));return i}(n)}AX.poolSize=8192,AX._augment=function(e){return e.__proto__=AX.prototype,e},AX.from=function(e,t,i){return TX(null,e,t,i)},AX.TYPED_ARRAY_SUPPORT&&(AX.prototype.__proto__=Uint8Array.prototype,AX.__proto__=Uint8Array),AX.alloc=function(e,t,i){return function(e,t,i,n){return BX(t),t<=0?HX(e,t):void 0!==i?"string"==typeof n?HX(e,t).fill(i,n):HX(e,t).fill(i):HX(e,t)}(null,e,t,i)},AX.allocUnsafe=function(e){return FX(null,e)},AX.allocUnsafeSlow=function(e){return FX(null,e)},AX.isBuffer=GV,AX.compare=function(e,t){if(!zX(e)||!zX(t))throw new TypeError("Arguments must be Buffers");if(e===t)return 0;for(var i=e.length,n=t.length,l=0,o=Math.min(i,n);l<o;++l)if(e[l]!==t[l]){i=e[l],n=t[l];break}return i<n?-1:n<i?1:0},AX.isEncoding=function(e){switch(String(e).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},AX.concat=function(e,t){if(!LX(e))throw new TypeError('"list" argument must be an Array of Buffers');if(0===e.length)return AX.alloc(0);var i;if(void 0===t)for(t=0,i=0;i<e.length;++i)t+=e[i].length;var n=AX.allocUnsafe(t),l=0;for(i=0;i<e.length;++i){var o=e[i];if(!zX(o))throw new TypeError('"list" argument must be an Array of Buffers');o.copy(n,l),l+=o.length}return n},AX.byteLength=PX,AX.prototype._isBuffer=!0,AX.prototype.swap16=function(){var e=this.length;if(e%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var t=0;t<e;t+=2)jX(this,t,t+1);return this},AX.prototype.swap32=function(){var e=this.length;if(e%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var t=0;t<e;t+=4)jX(this,t,t+3),jX(this,t+1,t+2);return this},AX.prototype.swap64=function(){var e=this.length;if(e%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var t=0;t<e;t+=8)jX(this,t,t+7),jX(this,t+1,t+6),jX(this,t+2,t+5),jX(this,t+3,t+4);return this},AX.prototype.toString=function(){var e=0|this.length;return 0===e?"":0===arguments.length?iV(this,0,e):QX.apply(this,arguments)},AX.prototype.equals=function(e){if(!zX(e))throw new TypeError("Argument must be a Buffer");return this===e||0===AX.compare(this,e)},AX.prototype.inspect=function(){var e="";return this.length>0&&(e=this.toString("hex",0,50).match(/.{2}/g).join(" "),this.length>50&&(e+=" ... ")),"<Buffer "+e+">"},AX.prototype.compare=function(e,t,i,n,l){if(!zX(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===i&&(i=e?e.length:0),void 0===n&&(n=0),void 0===l&&(l=this.length),t<0||i>e.length||n<0||l>this.length)throw new RangeError("out of range index");if(n>=l&&t>=i)return 0;if(n>=l)return-1;if(t>=i)return 1;if(this===e)return 0;for(var o=(l>>>=0)-(n>>>=0),c=(i>>>=0)-(t>>>=0),a=Math.min(o,c),r=this.slice(n,l),d=e.slice(t,i),s=0;s<a;++s)if(r[s]!==d[s]){o=r[s],c=d[s];break}return o<c?-1:c<o?1:0},AX.prototype.includes=function(e,t,i){return-1!==this.indexOf(e,t,i)},AX.prototype.indexOf=function(e,t,i){return MX(this,e,t,i,!0)},AX.prototype.lastIndexOf=function(e,t,i){return MX(this,e,t,i,!1)},AX.prototype.write=function(e,t,i,n){if(void 0===t)n="utf8",i=this.length,t=0;else if(void 0===i&&"string"==typeof t)n=t,i=this.length,t=0;else{if(!isFinite(t))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");t|=0,isFinite(i)?(i|=0,void 0===n&&(n="utf8")):(n=i,i=void 0)}var l=this.length-t;if((void 0===i||i>l)&&(i=l),e.length>0&&(i<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var o=!1;;)switch(n){case"hex":return DX(this,e,t,i);case"utf8":case"utf-8":return OX(this,e,t,i);case"ascii":return _X(this,e,t,i);case"latin1":case"binary":return qX(this,e,t,i);case"base64":return $X(this,e,t,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return eV(this,e,t,i);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},AX.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function nV(e,t,i){var n="";i=Math.min(e.length,i);for(var l=t;l<i;++l)n+=String.fromCharCode(127&e[l]);return n}function lV(e,t,i){var n="";i=Math.min(e.length,i);for(var l=t;l<i;++l)n+=String.fromCharCode(e[l]);return n}function oV(e,t,i){var n=e.length;(!t||t<0)&&(t=0),(!i||i<0||i>n)&&(i=n);for(var l="",o=t;o<i;++o)l+=mV(e[o]);return l}function cV(e,t,i){for(var n=e.slice(t,i),l="",o=0;o<n.length;o+=2)l+=String.fromCharCode(n[o]+256*n[o+1]);return l}function aV(e,t,i){if(e%1!=0||e<0)throw new RangeError("offset is not uint");if(e+t>i)throw new RangeError("Trying to access beyond buffer length")}function rV(e,t,i,n,l,o){if(!zX(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>l||t<o)throw new RangeError('"value" argument is out of bounds');if(i+n>e.length)throw new RangeError("Index out of range")}function dV(e,t,i,n){t<0&&(t=65535+t+1);for(var l=0,o=Math.min(e.length-i,2);l<o;++l)e[i+l]=(t&255<<8*(n?l:1-l))>>>8*(n?l:1-l)}function sV(e,t,i,n){t<0&&(t=4294967295+t+1);for(var l=0,o=Math.min(e.length-i,4);l<o;++l)e[i+l]=t>>>8*(n?l:3-l)&255}function uV(e,t,i,n,l,o){if(i+n>e.length)throw new RangeError("Index out of range");if(i<0)throw new RangeError("Index out of range")}function ZV(e,t,i,n,l){return l||uV(e,0,i,4),NX(e,t,i,n,23,4),i+4}function hV(e,t,i,n,l){return l||uV(e,0,i,8),NX(e,t,i,n,52,8),i+8}AX.prototype.slice=function(e,t){var i,n=this.length;if((e=~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),(t=void 0===t?n:~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),t<e&&(t=e),AX.TYPED_ARRAY_SUPPORT)(i=this.subarray(e,t)).__proto__=AX.prototype;else{var l=t-e;i=new AX(l,void 0);for(var o=0;o<l;++o)i[o]=this[o+e]}return i},AX.prototype.readUIntLE=function(e,t,i){e|=0,t|=0,i||aV(e,t,this.length);for(var n=this[e],l=1,o=0;++o<t&&(l*=256);)n+=this[e+o]*l;return n},AX.prototype.readUIntBE=function(e,t,i){e|=0,t|=0,i||aV(e,t,this.length);for(var n=this[e+--t],l=1;t>0&&(l*=256);)n+=this[e+--t]*l;return n},AX.prototype.readUInt8=function(e,t){return t||aV(e,1,this.length),this[e]},AX.prototype.readUInt16LE=function(e,t){return t||aV(e,2,this.length),this[e]|this[e+1]<<8},AX.prototype.readUInt16BE=function(e,t){return t||aV(e,2,this.length),this[e]<<8|this[e+1]},AX.prototype.readUInt32LE=function(e,t){return t||aV(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},AX.prototype.readUInt32BE=function(e,t){return t||aV(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},AX.prototype.readIntLE=function(e,t,i){e|=0,t|=0,i||aV(e,t,this.length);for(var n=this[e],l=1,o=0;++o<t&&(l*=256);)n+=this[e+o]*l;return n>=(l*=128)&&(n-=Math.pow(2,8*t)),n},AX.prototype.readIntBE=function(e,t,i){e|=0,t|=0,i||aV(e,t,this.length);for(var n=t,l=1,o=this[e+--n];n>0&&(l*=256);)o+=this[e+--n]*l;return o>=(l*=128)&&(o-=Math.pow(2,8*t)),o},AX.prototype.readInt8=function(e,t){return t||aV(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},AX.prototype.readInt16LE=function(e,t){t||aV(e,2,this.length);var i=this[e]|this[e+1]<<8;return 32768&i?4294901760|i:i},AX.prototype.readInt16BE=function(e,t){t||aV(e,2,this.length);var i=this[e+1]|this[e]<<8;return 32768&i?4294901760|i:i},AX.prototype.readInt32LE=function(e,t){return t||aV(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},AX.prototype.readInt32BE=function(e,t){return t||aV(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},AX.prototype.readFloatLE=function(e,t){return t||aV(e,4,this.length),KX(this,e,!0,23,4)},AX.prototype.readFloatBE=function(e,t){return t||aV(e,4,this.length),KX(this,e,!1,23,4)},AX.prototype.readDoubleLE=function(e,t){return t||aV(e,8,this.length),KX(this,e,!0,52,8)},AX.prototype.readDoubleBE=function(e,t){return t||aV(e,8,this.length),KX(this,e,!1,52,8)},AX.prototype.writeUIntLE=function(e,t,i,n){(e=+e,t|=0,i|=0,n)||rV(this,e,t,i,Math.pow(2,8*i)-1,0);var l=1,o=0;for(this[t]=255&e;++o<i&&(l*=256);)this[t+o]=e/l&255;return t+i},AX.prototype.writeUIntBE=function(e,t,i,n){(e=+e,t|=0,i|=0,n)||rV(this,e,t,i,Math.pow(2,8*i)-1,0);var l=i-1,o=1;for(this[t+l]=255&e;--l>=0&&(o*=256);)this[t+l]=e/o&255;return t+i},AX.prototype.writeUInt8=function(e,t,i){return e=+e,t|=0,i||rV(this,e,t,1,255,0),AX.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},AX.prototype.writeUInt16LE=function(e,t,i){return e=+e,t|=0,i||rV(this,e,t,2,65535,0),AX.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):dV(this,e,t,!0),t+2},AX.prototype.writeUInt16BE=function(e,t,i){return e=+e,t|=0,i||rV(this,e,t,2,65535,0),AX.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):dV(this,e,t,!1),t+2},AX.prototype.writeUInt32LE=function(e,t,i){return e=+e,t|=0,i||rV(this,e,t,4,4294967295,0),AX.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):sV(this,e,t,!0),t+4},AX.prototype.writeUInt32BE=function(e,t,i){return e=+e,t|=0,i||rV(this,e,t,4,4294967295,0),AX.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):sV(this,e,t,!1),t+4},AX.prototype.writeIntLE=function(e,t,i,n){if(e=+e,t|=0,!n){var l=Math.pow(2,8*i-1);rV(this,e,t,i,l-1,-l)}var o=0,c=1,a=0;for(this[t]=255&e;++o<i&&(c*=256);)e<0&&0===a&&0!==this[t+o-1]&&(a=1),this[t+o]=(e/c>>0)-a&255;return t+i},AX.prototype.writeIntBE=function(e,t,i,n){if(e=+e,t|=0,!n){var l=Math.pow(2,8*i-1);rV(this,e,t,i,l-1,-l)}var o=i-1,c=1,a=0;for(this[t+o]=255&e;--o>=0&&(c*=256);)e<0&&0===a&&0!==this[t+o+1]&&(a=1),this[t+o]=(e/c>>0)-a&255;return t+i},AX.prototype.writeInt8=function(e,t,i){return e=+e,t|=0,i||rV(this,e,t,1,127,-128),AX.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},AX.prototype.writeInt16LE=function(e,t,i){return e=+e,t|=0,i||rV(this,e,t,2,32767,-32768),AX.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):dV(this,e,t,!0),t+2},AX.prototype.writeInt16BE=function(e,t,i){return e=+e,t|=0,i||rV(this,e,t,2,32767,-32768),AX.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):dV(this,e,t,!1),t+2},AX.prototype.writeInt32LE=function(e,t,i){return e=+e,t|=0,i||rV(this,e,t,4,2147483647,-2147483648),AX.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):sV(this,e,t,!0),t+4},AX.prototype.writeInt32BE=function(e,t,i){return e=+e,t|=0,i||rV(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),AX.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):sV(this,e,t,!1),t+4},AX.prototype.writeFloatLE=function(e,t,i){return ZV(this,e,t,!0,i)},AX.prototype.writeFloatBE=function(e,t,i){return ZV(this,e,t,!1,i)},AX.prototype.writeDoubleLE=function(e,t,i){return hV(this,e,t,!0,i)},AX.prototype.writeDoubleBE=function(e,t,i){return hV(this,e,t,!1,i)},AX.prototype.copy=function(e,t,i,n){if(i||(i=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n<i&&(n=i),n===i)return 0;if(0===e.length||0===this.length)return 0;if(t<0)throw new RangeError("targetStart out of bounds");if(i<0||i>=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t<n-i&&(n=e.length-t+i);var l,o=n-i;if(this===e&&i<t&&t<n)for(l=o-1;l>=0;--l)e[l+t]=this[l+i];else if(o<1e3||!AX.TYPED_ARRAY_SUPPORT)for(l=0;l<o;++l)e[l+t]=this[l+i];else Uint8Array.prototype.set.call(e,this.subarray(i,i+o),t);return o},AX.prototype.fill=function(e,t,i,n){if("string"==typeof e){if("string"==typeof t?(n=t,t=0,i=this.length):"string"==typeof i&&(n=i,i=this.length),1===e.length){var l=e.charCodeAt(0);l<256&&(e=l)}if(void 0!==n&&"string"!=typeof n)throw new TypeError("encoding must be a string");if("string"==typeof n&&!AX.isEncoding(n))throw new TypeError("Unknown encoding: "+n)}else"number"==typeof e&&(e&=255);if(t<0||this.length<t||this.length<i)throw new RangeError("Out of range index");if(i<=t)return this;var o;if(t>>>=0,i=void 0===i?this.length:i>>>0,e||(e=0),"number"==typeof e)for(o=t;o<i;++o)this[o]=e;else{var c=zX(e)?e:pV(new AX(e,n).toString()),a=c.length;for(o=0;o<i-t;++o)this[o+t]=c[o%a]}return this};var bV=/[^+\/0-9A-Za-z-_]/g;function mV(e){return e<16?"0"+e.toString(16):e.toString(16)}function pV(e,t){var i;t=t||1/0;for(var n=e.length,l=null,o=[],c=0;c<n;++c){if((i=e.charCodeAt(c))>55295&&i<57344){if(!l){if(i>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(c+1===n){(t-=3)>-1&&o.push(239,191,189);continue}l=i;continue}if(i<56320){(t-=3)>-1&&o.push(239,191,189),l=i;continue}i=65536+(l-55296<<10|i-56320)}else l&&(t-=3)>-1&&o.push(239,191,189);if(l=null,i<128){if((t-=1)<0)break;o.push(i)}else if(i<2048){if((t-=2)<0)break;o.push(i>>6|192,63&i|128)}else if(i<65536){if((t-=3)<0)break;o.push(i>>12|224,i>>6&63|128,63&i|128)}else{if(!(i<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(i>>18|240,i>>12&63|128,i>>6&63|128,63&i|128)}}return o}function IV(e){return function(e){var t,i,n,l,o,c;SX||vX();var a=e.length;if(a%4>0)throw new Error("Invalid string. Length must be a multiple of 4");o="="===e[a-2]?2:"="===e[a-1]?1:0,c=new RX(3*a/4-o),n=o>0?a-4:a;var r=0;for(t=0,i=0;t<n;t+=4,i+=3)l=CX[e.charCodeAt(t)]<<18|CX[e.charCodeAt(t+1)]<<12|CX[e.charCodeAt(t+2)]<<6|CX[e.charCodeAt(t+3)],c[r++]=l>>16&255,c[r++]=l>>8&255,c[r++]=255&l;return 2===o?(l=CX[e.charCodeAt(t)]<<2|CX[e.charCodeAt(t+1)]>>4,c[r++]=255&l):1===o&&(l=CX[e.charCodeAt(t)]<<10|CX[e.charCodeAt(t+1)]<<4|CX[e.charCodeAt(t+2)]>>2,c[r++]=l>>8&255,c[r++]=255&l),c}(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(bV,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function gV(e,t,i,n){for(var l=0;l<n&&!(l+i>=t.length||l>=e.length);++l)t[l+i]=e[l];return l}function GV(e){return null!=e&&(!!e._isBuffer||yV(e)||function(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&yV(e.slice(0,0))}(e))}function yV(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}var XV=Object.freeze({__proto__:null,Buffer:AX,INSPECT_MAX_BYTES:50,SlowBuffer:function(e){return+e!=e&&(e=0),AX.alloc(+e)},isBuffer:GV,kMaxLength:kX}),VV=XX;function WV(e,t,i,n,l){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name="AxiosError",t&&(this.code=t),i&&(this.config=i),n&&(this.request=n),l&&(this.response=l)}VV.inherits(WV,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code,status:this.response&&this.response.status?this.response.status:null}}});var CV=WV.prototype,RV={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach((function(e){RV[e]={value:e}})),Object.defineProperties(WV,RV),Object.defineProperty(CV,"isAxiosError",{value:!0}),WV.from=function(e,t,i,n,l,o){var c=Object.create(CV);return VV.toFlatObject(e,c,(function(e){return e!==Error.prototype})),WV.call(c,e.message,t,i,n,l),c.cause=e,c.name=e.name,o&&Object.assign(c,o),c};var SV=WV,vV="object"==typeof self?self.FormData:window.FormData,fV=XX,YV=SV,KV=vV;function NV(e){return fV.isPlainObject(e)||fV.isArray(e)}function JV(e){return fV.endsWith(e,"[]")?e.slice(0,-2):e}function LV(e,t,i){return e?e.concat(t).map((function(e,t){return e=JV(e),!i&&t?"["+e+"]":e})).join(i?".":""):t}var kV=fV.toFlatObject(fV,{},null,(function(e){return/^is[A-Z]/.test(e)}));var UV=function(e,t,i){if(!fV.isObject(e))throw new TypeError("target must be an object");t=t||new(KV||FormData);var n,l=(i=fV.toFlatObject(i,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(e,t){return!fV.isUndefined(t[e])}))).metaTokens,o=i.visitor||s,c=i.dots,a=i.indexes,r=(i.Blob||"undefined"!=typeof Blob&&Blob)&&((n=t)&&fV.isFunction(n.append)&&"FormData"===n[Symbol.toStringTag]&&n[Symbol.iterator]);if(!fV.isFunction(o))throw new TypeError("visitor must be a function");function d(e){if(null===e)return"";if(fV.isDate(e))return e.toISOString();if(!r&&fV.isBlob(e))throw new YV("Blob is not supported. Use a Buffer instead.");return fV.isArrayBuffer(e)||fV.isTypedArray(e)?r&&"function"==typeof Blob?new Blob([e]):AX.from(e):e}function s(e,i,n){var o=e;if(e&&!n&&"object"==typeof e)if(fV.endsWith(i,"{}"))i=l?i:i.slice(0,-2),e=JSON.stringify(e);else if(fV.isArray(e)&&function(e){return fV.isArray(e)&&!e.some(NV)}(e)||fV.isFileList(e)||fV.endsWith(i,"[]")&&(o=fV.toArray(e)))return i=JV(i),o.forEach((function(e,n){!fV.isUndefined(e)&&null!==e&&t.append(!0===a?LV([i],n,c):null===a?i:i+"[]",d(e))})),!1;return!!NV(e)||(t.append(LV(n,i,c),d(e)),!1)}var u=[],Z=Object.assign(kV,{defaultVisitor:s,convertValue:d,isVisitable:NV});if(!fV.isObject(e))throw new TypeError("data must be an object");return function e(i,n){if(!fV.isUndefined(i)){if(-1!==u.indexOf(i))throw Error("Circular reference detected in "+n.join("."));u.push(i),fV.forEach(i,(function(i,l){!0===(!(fV.isUndefined(i)||null===i)&&o.call(t,i,fV.isString(l)?l.trim():l,n,Z))&&e(i,n?n.concat(l):[l])})),u.pop()}}(e),t},HV=UV;function AV(e){var t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'\(\)~]|%20|%00/g,(function(e){return t[e]}))}function TV(e,t){this._pairs=[],e&&HV(e,this,t)}var BV=TV.prototype;BV.append=function(e,t){this._pairs.push([e,t])},BV.toString=function(e){var t=e?function(t){return e.call(this,t,AV)}:AV;return this._pairs.map((function(e){return t(e[0])+"="+t(e[1])}),"").join("&")};var FV=TV,wV=XX,xV=FV;function zV(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var PV=function(e,t,i){if(!t)return e;var n=e.indexOf("#");-1!==n&&(e=e.slice(0,n));var l,o=i&&i.encode||zV,c=i&&i.serialize;return(l=c?c(t,i):wV.isURLSearchParams(t)?t.toString():new xV(t,i).toString(o))&&(e+=(-1===e.indexOf("?")?"?":"&")+l),e},QV=XX;function jV(){this.handlers=[]}jV.prototype.use=function(e,t,i){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!i&&i.synchronous,runWhen:i?i.runWhen:null}),this.handlers.length-1},jV.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},jV.prototype.clear=function(){this.handlers&&(this.handlers=[])},jV.prototype.forEach=function(e){QV.forEach(this.handlers,(function(t){null!==t&&e(t)}))};var MV=jV;function EV(){throw new Error("setTimeout has not been defined")}function DV(){throw new Error("clearTimeout has not been defined")}var OV=EV,_V=DV;function qV(e){if(OV===setTimeout)return setTimeout(e,0);if((OV===EV||!OV)&&setTimeout)return OV=setTimeout,setTimeout(e,0);try{return OV(e,0)}catch(t){try{return OV.call(null,e,0)}catch(t){return OV.call(this,e,0)}}}"function"==typeof VX.setTimeout&&(OV=setTimeout),"function"==typeof VX.clearTimeout&&(_V=clearTimeout);var $V,eW=[],tW=!1,iW=-1;function nW(){tW&&$V&&(tW=!1,$V.length?eW=$V.concat(eW):iW=-1,eW.length&&lW())}function lW(){if(!tW){var e=qV(nW);tW=!0;for(var t=eW.length;t;){for($V=eW,eW=[];++iW<t;)$V&&$V[iW].run();iW=-1,t=eW.length}$V=null,tW=!1,function(e){if(_V===clearTimeout)return clearTimeout(e);if((_V===DV||!_V)&&clearTimeout)return _V=clearTimeout,clearTimeout(e);try{_V(e)}catch(t){try{return _V.call(null,e)}catch(t){return _V.call(this,e)}}}(e)}}function oW(e,t){this.fun=e,this.array=t}oW.prototype.run=function(){this.fun.apply(null,this.array)};function cW(){}var aW=cW,rW=cW,dW=cW,sW=cW,uW=cW,ZW=cW,hW=cW;var bW=VX.performance||{},mW=bW.now||bW.mozNow||bW.msNow||bW.oNow||bW.webkitNow||function(){return(new Date).getTime()};var pW=new Date;var IW={nextTick:function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var i=1;i<arguments.length;i++)t[i-1]=arguments[i];eW.push(new oW(e,t)),1!==eW.length||tW||qV(lW)},title:"browser",browser:!0,env:{},argv:[],version:"",versions:{},on:aW,addListener:rW,once:dW,off:sW,removeListener:uW,removeAllListeners:ZW,emit:hW,binding:function(e){throw new Error("process.binding is not supported")},cwd:function(){return"/"},chdir:function(e){throw new Error("process.chdir is not supported")},umask:function(){return 0},hrtime:function(e){var t=.001*mW.call(bW),i=Math.floor(t),n=Math.floor(t%1*1e9);return e&&(i-=e[0],(n-=e[1])<0&&(i--,n+=1e9)),[i,n]},platform:"browser",release:{},config:{},uptime:function(){return(new Date-pW)/1e3}},gW=IW,GW=XX,yW=function(e,t){GW.forEach(e,(function(i,n){n!==t&&n.toUpperCase()===t.toUpperCase()&&(e[t]=i,delete e[n])}))},XW={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},VW={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:FV,FormData:FormData,Blob:Blob},protocols:["http","https","file","blob","url","data"]},WW=XX,CW=UV,RW=VW,SW=XX;var vW=function(e){function t(e,i,n,l){var o=e[l++];if("__proto__"===o)return!0;var c=Number.isFinite(+o),a=l>=e.length;return o=!o&&SW.isArray(n)?n.length:o,a?(SW.hasOwnProperty(n,o)?n[o]=[n[o],i]:n[o]=i,!c):(n[o]&&SW.isObject(n[o])||(n[o]=[]),t(e,i,n[o],l)&&SW.isArray(n[o])&&(n[o]=function(e){var t,i,n={},l=Object.keys(e),o=l.length;for(t=0;t<o;t++)n[i=l[t]]=e[i];return n}(n[o])),!c)}if(SW.isFormData(e)&&SW.isFunction(e.entries)){var i={};return SW.forEachEntry(e,(function(e,n){t(function(e){return SW.matchAll(/\w+|\[(\w*)]/g,e).map((function(e){return"[]"===e[0]?"":e[1]||e[0]}))}(e),n,i,0)})),i}return null},fW=SV,YW=XX,KW=YW.isStandardBrowserEnv()?{write:function(e,t,i,n,l,o){var c=[];c.push(e+"="+encodeURIComponent(t)),YW.isNumber(i)&&c.push("expires="+new Date(i).toGMTString()),YW.isString(n)&&c.push("path="+n),YW.isString(l)&&c.push("domain="+l),!0===o&&c.push("secure"),document.cookie=c.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}},NW=function(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)},JW=function(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e},LW=function(e,t,i){var n=!NW(t);return e&&(n||!1===i)?JW(e,t):t},kW=XX,UW=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"],HW=XX,AW=HW.isStandardBrowserEnv()?function(){var e,t=/(msie|trident)/i.test(navigator.userAgent),i=document.createElement("a");function n(e){var n=e;return t&&(i.setAttribute("href",n),n=i.href),i.setAttribute("href",n),{href:i.href,protocol:i.protocol?i.protocol.replace(/:$/,""):"",host:i.host,search:i.search?i.search.replace(/^\?/,""):"",hash:i.hash?i.hash.replace(/^#/,""):"",hostname:i.hostname,port:i.port,pathname:"/"===i.pathname.charAt(0)?i.pathname:"/"+i.pathname}}return e=n(window.location.href),function(t){var i=HW.isString(t)?n(t):t;return i.protocol===e.protocol&&i.host===e.host}}():function(){return!0},TW=SV;function BW(e,t,i){TW.call(this,null==e?"canceled":e,TW.ERR_CANCELED,t,i),this.name="CanceledError"}XX.inherits(BW,TW,{__CANCEL__:!0});var FW=BW,wW=XX,xW=function(e,t,i){var n=i.config.validateStatus;i.status&&n&&!n(i.status)?t(new fW("Request failed with status code "+i.status,[fW.ERR_BAD_REQUEST,fW.ERR_BAD_RESPONSE][Math.floor(i.status/100)-4],i.config,i.request,i)):e(i)},zW=KW,PW=PV,QW=LW,jW=function(e){var t,i,n,l={};return e?(kW.forEach(e.split("\n"),(function(e){if(n=e.indexOf(":"),t=kW.trim(e.slice(0,n)).toLowerCase(),i=kW.trim(e.slice(n+1)),t){if(l[t]&&UW.indexOf(t)>=0)return;l[t]="set-cookie"===t?(l[t]?l[t]:[]).concat([i]):l[t]?l[t]+", "+i:i}})),l):l},MW=AW,EW=XW,DW=SV,OW=FW,_W=function(e){var t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""},qW=VW,$W=function(e){return new Promise((function(t,i){var n,l=e.data,o=e.headers,c=e.responseType,a=e.withXSRFToken;function r(){e.cancelToken&&e.cancelToken.unsubscribe(n),e.signal&&e.signal.removeEventListener("abort",n)}wW.isFormData(l)&&wW.isStandardBrowserEnv()&&delete o["Content-Type"];var d=new XMLHttpRequest;if(e.auth){var s=e.auth.username||"",u=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";o.Authorization="Basic "+btoa(s+":"+u)}var Z=QW(e.baseURL,e.url,e.allowAbsoluteUrls);function h(){if(d){var n="getAllResponseHeaders"in d?jW(d.getAllResponseHeaders()):null,l={data:c&&"text"!==c&&"json"!==c?d.response:d.responseText,status:d.status,statusText:d.statusText,headers:n,config:e,request:d};xW((function(e){t(e),r()}),(function(e){i(e),r()}),l),d=null}}if(d.open(e.method.toUpperCase(),PW(Z,e.params,e.paramsSerializer),!0),d.timeout=e.timeout,"onloadend"in d?d.onloadend=h:d.onreadystatechange=function(){d&&4===d.readyState&&(0!==d.status||d.responseURL&&0===d.responseURL.indexOf("file:"))&&setTimeout(h)},d.onabort=function(){d&&(i(new DW("Request aborted",DW.ECONNABORTED,e,d)),d=null)},d.onerror=function(){i(new DW("Network Error",DW.ERR_NETWORK,e,d)),d=null},d.ontimeout=function(){var t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded",n=e.transitional||EW;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),i(new DW(t,n.clarifyTimeoutError?DW.ETIMEDOUT:DW.ECONNABORTED,e,d)),d=null},wW.isStandardBrowserEnv()&&(a&&wW.isFunction(a)&&(a=a(e)),a||!1!==a&&MW(Z))){var b=e.xsrfHeaderName&&e.xsrfCookieName&&zW.read(e.xsrfCookieName);b&&(o[e.xsrfHeaderName]=b)}"setRequestHeader"in d&&wW.forEach(o,(function(e,t){void 0===l&&"content-type"===t.toLowerCase()?delete o[t]:d.setRequestHeader(t,e)})),wW.isUndefined(e.withCredentials)||(d.withCredentials=!!e.withCredentials),c&&"json"!==c&&(d.responseType=e.responseType),"function"==typeof e.onDownloadProgress&&d.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&d.upload&&d.upload.addEventListener("progress",e.onUploadProgress),(e.cancelToken||e.signal)&&(n=function(t){d&&(i(!t||t.type?new OW(null,e,d):t),d.abort(),d=null)},e.cancelToken&&e.cancelToken.subscribe(n),e.signal&&(e.signal.aborted?n():e.signal.addEventListener("abort",n))),l||!1===l||0===l||""===l||(l=null);var m=_W(Z);m&&-1===qW.protocols.indexOf(m)?i(new DW("Unsupported protocol "+m+":",DW.ERR_BAD_REQUEST,e)):d.send(l)}))},eC=XX,tC=yW,iC=SV,nC=UV,lC=function(e,t){return CW(e,new RW.classes.URLSearchParams,Object.assign({visitor:function(e,t,i,n){return RW.isNode&&WW.isBuffer(e)?(this.append(t,e.toString("base64")),!1):n.defaultVisitor.apply(this,arguments)}},t))},oC=VW,cC=vW,aC={"Content-Type":"application/x-www-form-urlencoded"};function rC(e,t){!eC.isUndefined(e)&&eC.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}var dC,sC={transitional:XW,adapter:(("undefined"!=typeof XMLHttpRequest||void 0!==gW&&"[object process]"===Object.prototype.toString.call(gW))&&(dC=$W),dC),transformRequest:[function(e,t){tC(t,"Accept"),tC(t,"Content-Type");var i,n=t&&t["Content-Type"]||"",l=n.indexOf("application/json")>-1,o=eC.isObject(e);if(o&&eC.isHTMLForm(e)&&(e=new FormData(e)),eC.isFormData(e))return l?JSON.stringify(cC(e)):e;if(eC.isArrayBuffer(e)||eC.isBuffer(e)||eC.isStream(e)||eC.isFile(e)||eC.isBlob(e))return e;if(eC.isArrayBufferView(e))return e.buffer;if(eC.isURLSearchParams(e))return rC(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString();if(o){if(-1!==n.indexOf("application/x-www-form-urlencoded"))return lC(e,this.formSerializer).toString();if((i=eC.isFileList(e))||n.indexOf("multipart/form-data")>-1){var c=this.env&&this.env.FormData;return nC(i?{"files[]":e}:e,c&&new c,this.formSerializer)}}return o||l?(rC(t,"application/json"),function(e,t,i){if(eC.isString(e))try{return(t||JSON.parse)(e),eC.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(i||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){var t=this.transitional||sC.transitional,i=t&&t.forcedJSONParsing,n="json"===this.responseType;if(e&&eC.isString(e)&&(i&&!this.responseType||n)){var l=!(t&&t.silentJSONParsing)&&n;try{return JSON.parse(e)}catch(e){if(l){if("SyntaxError"===e.name)throw iC.from(e,iC.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:oC.classes.FormData,Blob:oC.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};eC.forEach(["delete","get","head"],(function(e){sC.headers[e]={}})),eC.forEach(["post","put","patch"],(function(e){sC.headers[e]=eC.merge(aC)}));var uC=sC,ZC=XX,hC=uC,bC=function(e){return!(!e||!e.__CANCEL__)},mC=XX,pC=function(e,t,i,n){var l=this||hC;return ZC.forEach(n,(function(n){e=n.call(l,e,t,i)})),e},IC=bC,gC=uC,GC=FW,yC=yW;function XC(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new GC}var VC=XX,WC=function(e,t){t=t||{};var i={};function n(e,t){return VC.isPlainObject(e)&&VC.isPlainObject(t)?VC.merge(e,t):VC.isEmptyObject(t)?VC.merge({},e):VC.isPlainObject(t)?VC.merge({},t):VC.isArray(t)?t.slice():t}function l(i){return VC.isUndefined(t[i])?VC.isUndefined(e[i])?void 0:n(void 0,e[i]):n(e[i],t[i])}function o(e){if(!VC.isUndefined(t[e]))return n(void 0,t[e])}function c(i){return VC.isUndefined(t[i])?VC.isUndefined(e[i])?void 0:n(void 0,e[i]):n(void 0,t[i])}function a(i){return i in t?n(e[i],t[i]):i in e?n(void 0,e[i]):void 0}var r={url:o,method:o,data:o,baseURL:c,transformRequest:c,transformResponse:c,paramsSerializer:c,timeout:c,timeoutMessage:c,withCredentials:c,withXSRFToken:c,adapter:c,responseType:c,xsrfCookieName:c,xsrfHeaderName:c,onUploadProgress:c,onDownloadProgress:c,decompress:c,maxContentLength:c,maxBodyLength:c,beforeRedirect:c,transport:c,httpAgent:c,httpsAgent:c,cancelToken:c,socketPath:c,responseEncoding:c,validateStatus:a};return VC.forEach(Object.keys(e).concat(Object.keys(t)),(function(e){var t=r[e]||l,n=t(e);VC.isUndefined(n)&&t!==a||(i[e]=n)})),i},CC="0.30.0",RC=CC,SC=SV,vC={};["object","boolean","number","function","string","symbol"].forEach((function(e,t){vC[e]=function(i){return typeof i===e||"a"+(t<1?"n ":" ")+e}}));var fC={};vC.transitional=function(e,t,i){function n(e,t){return"[Axios v"+RC+"] Transitional option '"+e+"'"+t+(i?". "+i:"")}return function(i,l,o){if(!1===e)throw new SC(n(l," has been removed"+(t?" in "+t:"")),SC.ERR_DEPRECATED);return t&&!fC[l]&&(fC[l]=!0,console.warn(n(l," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(i,l,o)}};var YC={assertOptions:function(e,t,i){if("object"!=typeof e)throw new SC("options must be an object",SC.ERR_BAD_OPTION_VALUE);for(var n=Object.keys(e),l=n.length;l-- >0;){var o=n[l],c=t[o];if(c){var a=e[o],r=void 0===a||c(a,o,e);if(!0!==r)throw new SC("option "+o+" must be "+r,SC.ERR_BAD_OPTION_VALUE)}else if(!0!==i)throw new SC("Unknown option "+o,SC.ERR_BAD_OPTION)}},validators:vC},KC=XX,NC=PV,JC=MV,LC=function(e){return XC(e),e.headers=e.headers||{},e.data=pC.call(e,e.data,e.headers,null,e.transformRequest),yC(e.headers,"Accept"),yC(e.headers,"Content-Type"),e.headers=mC.merge(e.headers.common||{},e.headers[e.method]||{},e.headers),mC.forEach(["delete","get","head","post","put","patch","common"],(function(t){delete e.headers[t]})),(e.adapter||gC.adapter)(e).then((function(t){return XC(e),t.data=pC.call(e,t.data,t.headers,t.status,e.transformResponse),t}),(function(t){return IC(t)||(XC(e),t&&t.response&&(t.response.data=pC.call(e,t.response.data,t.response.headers,t.response.status,e.transformResponse))),Promise.reject(t)}))},kC=WC,UC=LW,HC=YC,AC=HC.validators;function TC(e){this.defaults=e,this.interceptors={request:new JC,response:new JC}}TC.prototype.request=function(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},(t=kC(this.defaults,t)).method?t.method=t.method.toLowerCase():this.defaults.method?t.method=this.defaults.method.toLowerCase():t.method="get";var i=t.transitional;void 0!==i&&HC.assertOptions(i,{silentJSONParsing:AC.transitional(AC.boolean),forcedJSONParsing:AC.transitional(AC.boolean),clarifyTimeoutError:AC.transitional(AC.boolean)},!1);var n=t.paramsSerializer;null!=n&&(KC.isFunction(n)?t.paramsSerializer={serialize:n}:HC.assertOptions(n,{encode:AC.function,serialize:AC.function},!0));var l=[],o=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(o=o&&e.synchronous,l.unshift(e.fulfilled,e.rejected))}));var c,a=[];if(this.interceptors.response.forEach((function(e){a.push(e.fulfilled,e.rejected)})),!o){var r=[LC,void 0];for(Array.prototype.unshift.apply(r,l),r=r.concat(a),c=Promise.resolve(t);r.length;)c=c.then(r.shift(),r.shift());return c}for(var d=t;l.length;){var s=l.shift(),u=l.shift();try{d=s(d)}catch(e){u(e);break}}try{c=LC(d)}catch(e){return Promise.reject(e)}for(;a.length;)c=c.then(a.shift(),a.shift());return c},TC.prototype.getUri=function(e){e=kC(this.defaults,e);var t=UC(e.baseURL,e.url,e.allowAbsoluteUrls);return NC(t,e.params,e.paramsSerializer)},KC.forEach(["delete","get","head","options"],(function(e){TC.prototype[e]=function(t,i){return this.request(kC(i||{},{method:e,url:t,data:(i||{}).data}))}})),KC.forEach(["post","put","patch"],(function(e){function t(t){return function(i,n,l){return this.request(kC(l||{},{method:e,headers:t?{"Content-Type":"multipart/form-data"}:{},url:i,data:n}))}}TC.prototype[e]=t(),TC.prototype[e+"Form"]=t(!0)}));var BC=TC,FC=FW;function wC(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise((function(e){t=e}));var i=this;this.promise.then((function(e){if(i._listeners){for(var t=i._listeners.length;t-- >0;)i._listeners[t](e);i._listeners=null}})),this.promise.then=function(e){var t,n=new Promise((function(e){i.subscribe(e),t=e})).then(e);return n.cancel=function(){i.unsubscribe(t)},n},e((function(e,n,l){i.reason||(i.reason=new FC(e,n,l),t(i.reason))}))}wC.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},wC.prototype.subscribe=function(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]},wC.prototype.unsubscribe=function(e){if(this._listeners){var t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}},wC.source=function(){var e,t=new wC((function(t){e=t}));return{token:t,cancel:e}};var xC=wC,zC=XX,PC=XX,QC=$y,jC=BC,MC=WC,EC=vW;var DC=function e(t){var i=new jC(t),n=QC(jC.prototype.request,i);return PC.extend(n,jC.prototype,i),PC.extend(n,i),n.create=function(i){return e(MC(t,i))},n}(uC);DC.Axios=jC,DC.CanceledError=FW,DC.CancelToken=xC,DC.isCancel=bC,DC.VERSION=CC,DC.toFormData=UV,DC.AxiosError=SV,DC.Cancel=DC.CanceledError,DC.all=function(e){return Promise.all(e)},DC.spread=function(e){return function(t){return e.apply(null,t)}},DC.isAxiosError=function(e){return zC.isObject(e)&&!0===e.isAxiosError},DC.formToJSON=function(e){return EC(PC.isHTMLForm(e)?new FormData(e):e)},qy.exports=DC,qy.exports.default=DC;var OC,_C=qy.exports;let qC=OC=class{constructor(){this.attachToken=()=>Promise.resolve(),this.requestStartCallback=()=>null,this.requestSuccessCallback=()=>null,this.requestErrorCallback=()=>null,this.requestFinishCallback=()=>null,this.init=this.init.bind(this),this.setHttpRequestErrorCallback=this.setHttpRequestErrorCallback.bind(this),this.setHttpRequestFinishCallback=this.setHttpRequestFinishCallback.bind(this),this.setHttpRequestStartCallback=this.setHttpRequestStartCallback.bind(this),this.setHttpRequestSuccessCallback=this.setHttpRequestSuccessCallback.bind(this)}static getInstance(){return this.axiosInstance||(this.axiosInstance=_C.create({withCredentials:!0}),this.clientInstance||(this.clientInstance=new OC),this.axiosInstance.interceptors.request.use((e=>ry(this,void 0,void 0,(function*(){return yield this.clientInstance.requestHandler(e)})))),this.axiosInstance.interceptors.response.use((e=>this.clientInstance.successHandler(e)),(e=>this.clientInstance.errorHandler(e))),this.axiosInstance.all=_C.all,this.axiosInstance.spread=_C.spread,this.axiosInstance.init=this.clientInstance.init,this.axiosInstance.enableHandler=this.clientInstance.enableHandler,this.axiosInstance.disableHandler=this.clientInstance.disableHandler,this.axiosInstance.disableHandlerWithTimeout=this.clientInstance.disableHandlerWithTimeout,this.axiosInstance.setHttpRequestStartCallback=this.clientInstance.setHttpRequestStartCallback,this.axiosInstance.setHttpRequestSuccessCallback=this.clientInstance.setHttpRequestSuccessCallback,this.axiosInstance.setHttpRequestErrorCallback=this.clientInstance.setHttpRequestErrorCallback,this.axiosInstance.setHttpRequestFinishCallback=this.clientInstance.setHttpRequestFinishCallback),this.axiosInstance}requestHandler(e){return ry(this,void 0,void 0,(function*(){if(yield this.attachToken(e),null==e?void 0:e.shouldEncodeToFormData){const t=null==e?void 0:e.data,i=new FormData;Object.keys(t).forEach((e=>{i.append(e,t[e])})),e.data=i}return e.startTimeInMs=(new Date).getTime(),OC.isHandlerEnabled&&this.requestStartCallback&&"function"==typeof this.requestStartCallback&&this.requestStartCallback(e),e}))}errorHandler(e){throw OC.isHandlerEnabled&&(this.requestErrorCallback&&"function"==typeof this.requestErrorCallback&&this.requestErrorCallback(e),this.requestFinishCallback&&"function"==typeof this.requestFinishCallback&&this.requestFinishCallback()),e}successHandler(e){return OC.isHandlerEnabled&&(this.requestSuccessCallback&&"function"==typeof this.requestSuccessCallback&&this.requestSuccessCallback(e),this.requestFinishCallback&&"function"==typeof this.requestFinishCallback&&this.requestFinishCallback()),e}init(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=arguments.length>1?arguments[1]:void 0;return ry(this,void 0,void 0,(function*(){OC.isHandlerEnabled=e,this.attachToken=t}))}enableHandler(){OC.isHandlerEnabled=!0}disableHandler(){OC.isHandlerEnabled=!1}disableHandlerWithTimeout(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:OC.DEFAULT_HANDLER_DISABLE_TIMEOUT;OC.isHandlerEnabled=!1,setTimeout((()=>{OC.isHandlerEnabled=!0}),e)}setHttpRequestStartCallback(e){this.requestStartCallback=e}setHttpRequestSuccessCallback(e){this.requestSuccessCallback=e}setHttpRequestErrorCallback(e){this.requestErrorCallback=e}setHttpRequestFinishCallback(e){this.requestFinishCallback=e}};qC.DEFAULT_HANDLER_DISABLE_TIMEOUT=1e3,qC=OC=function(e,t,i,n){var l,o=arguments.length,c=o<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)c=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(l=e[a])&&(c=(o<3?l(c):o>3?l(t,i,c):l(t,i))||c);return o>3&&c&&Object.defineProperty(t,i,c),c}([e=>{}],qC);class $C{setData(e,t){return ry(this,void 0,void 0,(function*(){localStorage.setItem(e,t)}))}getData(e){var t;return ry(this,void 0,void 0,(function*(){return null!==(t=localStorage.getItem(e))&&void 0!==t?t:"{}"}))}removeData(e){return ry(this,void 0,void 0,(function*(){localStorage.removeItem(e)}))}}class eR{constructor(){this._data=new Map}setData(e,t){return ry(this,void 0,void 0,(function*(){this._data.set(e,t)}))}getData(e){var t,i;return ry(this,void 0,void 0,(function*(){return null!==(i=null===(t=this._data)||void 0===t?void 0:t.get(e))&&void 0!==i?i:"{}"}))}removeData(e){return ry(this,void 0,void 0,(function*(){this._data.delete(e)}))}}class tR{setData(e,t){return ry(this,void 0,void 0,(function*(){sessionStorage.setItem(e,t)}))}getData(e){var t;return ry(this,void 0,void 0,(function*(){return null!==(t=sessionStorage.getItem(e))&&void 0!==t?t:"{}"}))}removeData(e){return ry(this,void 0,void 0,(function*(){sessionStorage.removeItem(e)}))}}var iR={exports:{}},nR={},lR={};Object.defineProperty(lR,"__esModule",{value:!0}),lR.default=function(e){var t=e.length,i=t%4;if(!i)return e;var n=t,l=4-i,o=t+l,c=AX.alloc(o);for(c.write(e);l--;)c.write("=",n++);return c.toString()},Object.defineProperty(nR,"__esModule",{value:!0});var oR=lR;function cR(e,t){return void 0===t&&(t="utf8"),AX.isBuffer(e)?rR(e.toString("base64")):rR(AX.from(e,t).toString("base64"))}function aR(e){return e=e.toString(),oR.default(e).replace(/\-/g,"+").replace(/_/g,"/")}function rR(e){return e.replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}var dR,sR=cR;sR.encode=cR,sR.decode=function(e,t){return void 0===t&&(t="utf8"),AX.from(aR(e),"base64").toString(t)},sR.toBase64=aR,sR.fromBase64=rR,sR.toBuffer=function(e){return AX.from(aR(e),"base64")},nR.default=sR,(dR=iR).exports=nR.default,dR.exports.default=dR.exports;var uR=iR.exports,ZR={exports:{}};!function(e){!function(t,i){var n={};!function(e){e.__esModule=!0,e.digestLength=32,e.blockSize=64;var t=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]);function i(e,i,n,l,o){for(var c,a,r,d,s,u,Z,h,b,m,p,I,g;o>=64;){for(c=i[0],a=i[1],r=i[2],d=i[3],s=i[4],u=i[5],Z=i[6],h=i[7],m=0;m<16;m++)p=l+4*m,e[m]=(255&n[p])<<24|(255&n[p+1])<<16|(255&n[p+2])<<8|255&n[p+3];for(m=16;m<64;m++)I=((b=e[m-2])>>>17|b<<15)^(b>>>19|b<<13)^b>>>10,g=((b=e[m-15])>>>7|b<<25)^(b>>>18|b<<14)^b>>>3,e[m]=(I+e[m-7]|0)+(g+e[m-16]|0);for(m=0;m<64;m++)I=(((s>>>6|s<<26)^(s>>>11|s<<21)^(s>>>25|s<<7))+(s&u^~s&Z)|0)+(h+(t[m]+e[m]|0)|0)|0,g=((c>>>2|c<<30)^(c>>>13|c<<19)^(c>>>22|c<<10))+(c&a^c&r^a&r)|0,h=Z,Z=u,u=s,s=d+I|0,d=r,r=a,a=c,c=I+g|0;i[0]+=c,i[1]+=a,i[2]+=r,i[3]+=d,i[4]+=s,i[5]+=u,i[6]+=Z,i[7]+=h,l+=64,o-=64}return l}var n=function(){function t(){this.digestLength=e.digestLength,this.blockSize=e.blockSize,this.state=new Int32Array(8),this.temp=new Int32Array(64),this.buffer=new Uint8Array(128),this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this.reset()}return t.prototype.reset=function(){return this.state[0]=1779033703,this.state[1]=3144134277,this.state[2]=1013904242,this.state[3]=2773480762,this.state[4]=1359893119,this.state[5]=2600822924,this.state[6]=528734635,this.state[7]=1541459225,this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this},t.prototype.clean=function(){for(var e=0;e<this.buffer.length;e++)this.buffer[e]=0;for(e=0;e<this.temp.length;e++)this.temp[e]=0;this.reset()},t.prototype.update=function(e,t){if(void 0===t&&(t=e.length),this.finished)throw new Error("SHA256: can't update because hash was finished.");var n=0;if(this.bytesHashed+=t,this.bufferLength>0){for(;this.bufferLength<64&&t>0;)this.buffer[this.bufferLength++]=e[n++],t--;64===this.bufferLength&&(i(this.temp,this.state,this.buffer,0,64),this.bufferLength=0)}for(t>=64&&(n=i(this.temp,this.state,e,n,t),t%=64);t>0;)this.buffer[this.bufferLength++]=e[n++],t--;return this},t.prototype.finish=function(e){if(!this.finished){var t=this.bytesHashed,n=this.bufferLength,l=t/536870912|0,o=t<<3,c=t%64<56?64:128;this.buffer[n]=128;for(var a=n+1;a<c-8;a++)this.buffer[a]=0;this.buffer[c-8]=l>>>24&255,this.buffer[c-7]=l>>>16&255,this.buffer[c-6]=l>>>8&255,this.buffer[c-5]=l>>>0&255,this.buffer[c-4]=o>>>24&255,this.buffer[c-3]=o>>>16&255,this.buffer[c-2]=o>>>8&255,this.buffer[c-1]=o>>>0&255,i(this.temp,this.state,this.buffer,0,c),this.finished=!0}for(a=0;a<8;a++)e[4*a+0]=this.state[a]>>>24&255,e[4*a+1]=this.state[a]>>>16&255,e[4*a+2]=this.state[a]>>>8&255,e[4*a+3]=this.state[a]>>>0&255;return this},t.prototype.digest=function(){var e=new Uint8Array(this.digestLength);return this.finish(e),e},t.prototype._saveState=function(e){for(var t=0;t<this.state.length;t++)e[t]=this.state[t]},t.prototype._restoreState=function(e,t){for(var i=0;i<this.state.length;i++)this.state[i]=e[i];this.bytesHashed=t,this.finished=!1,this.bufferLength=0},t}();e.Hash=n;var l=function(){function e(e){this.inner=new n,this.outer=new n,this.blockSize=this.inner.blockSize,this.digestLength=this.inner.digestLength;var t=new Uint8Array(this.blockSize);if(e.length>this.blockSize)(new n).update(e).finish(t).clean();else for(var i=0;i<e.length;i++)t[i]=e[i];for(i=0;i<t.length;i++)t[i]^=54;this.inner.update(t);for(i=0;i<t.length;i++)t[i]^=106;this.outer.update(t),this.istate=new Uint32Array(8),this.ostate=new Uint32Array(8),this.inner._saveState(this.istate),this.outer._saveState(this.ostate);for(i=0;i<t.length;i++)t[i]=0}return e.prototype.reset=function(){return this.inner._restoreState(this.istate,this.inner.blockSize),this.outer._restoreState(this.ostate,this.outer.blockSize),this},e.prototype.clean=function(){for(var e=0;e<this.istate.length;e++)this.ostate[e]=this.istate[e]=0;this.inner.clean(),this.outer.clean()},e.prototype.update=function(e){return this.inner.update(e),this},e.prototype.finish=function(e){return this.outer.finished?this.outer.finish(e):(this.inner.finish(e),this.outer.update(e,this.digestLength).finish(e)),this},e.prototype.digest=function(){var e=new Uint8Array(this.digestLength);return this.finish(e),e},e}();function o(e){var t=(new n).update(e),i=t.digest();return t.clean(),i}function c(e,t){var i=new l(e).update(t),n=i.digest();return i.clean(),n}function a(e,t,i,n){var l=n[0];if(0===l)throw new Error("hkdf: cannot expand more");t.reset(),l>1&&t.update(e),i&&t.update(i),t.update(n),t.finish(e),n[0]++}e.HMAC=l,e.hash=o,e.default=o,e.hmac=c;var r=new Uint8Array(e.digestLength);function d(e,t,i,n){void 0===t&&(t=r),void 0===n&&(n=32);for(var o=new Uint8Array([1]),d=c(t,e),s=new l(d),u=new Uint8Array(s.digestLength),Z=u.length,h=new Uint8Array(n),b=0;b<n;b++)Z===u.length&&(a(u,s,i,o),Z=0),h[b]=u[Z++];return s.clean(),u.fill(0),o.fill(0),h}function s(e,t,i,n){for(var o=new l(e),c=o.digestLength,a=new Uint8Array(4),r=new Uint8Array(c),d=new Uint8Array(c),s=new Uint8Array(n),u=0;u*c<n;u++){var Z=u+1;a[0]=Z>>>24&255,a[1]=Z>>>16&255,a[2]=Z>>>8&255,a[3]=Z>>>0&255,o.reset(),o.update(t),o.update(a),o.finish(d);for(var h=0;h<c;h++)r[h]=d[h];for(h=2;h<=i;h++){o.reset(),o.update(d).finish(d);for(var b=0;b<c;b++)r[b]^=d[b]}for(h=0;h<c&&u*c+h<n;h++)s[u*c+h]=r[h]}for(u=0;u<c;u++)r[u]=d[u]=0;for(u=0;u<4;u++)a[u]=0;return o.clean(),s}e.hkdf=d,e.pbkdf2=s}(n);var l=n.default;for(var o in n)l[o]=n[o];e.exports=l}()}(ZR);var hR=t(ZR.exports),bR=crypto;const mR=e=>e instanceof CryptoKey,pR=new TextEncoder,IR=new TextDecoder;const gR=e=>{let t=e;t instanceof Uint8Array&&(t=IR.decode(t)),t=t.replace(/-/g,"+").replace(/_/g,"/").replace(/\s/g,"");try{return(e=>{const t=atob(e),i=new Uint8Array(t.length);for(let e=0;e<t.length;e++)i[e]=t.charCodeAt(e);return i})(t)}catch(e){throw new TypeError("The input to be decoded is not correctly encoded.")}};class GR extends Error{constructor(e){var t;super(e),this.code="ERR_JOSE_GENERIC",this.name=this.constructor.name,null===(t=Error.captureStackTrace)||void 0===t||t.call(Error,this,this.constructor)}static get code(){return"ERR_JOSE_GENERIC"}}class yR extends GR{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"unspecified",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"unspecified";super(e),this.code="ERR_JWT_CLAIM_VALIDATION_FAILED",this.claim=t,this.reason=i}static get code(){return"ERR_JWT_CLAIM_VALIDATION_FAILED"}}class XR extends GR{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"unspecified",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"unspecified";super(e),this.code="ERR_JWT_EXPIRED",this.claim=t,this.reason=i}static get code(){return"ERR_JWT_EXPIRED"}}class VR extends GR{constructor(){super(...arguments),this.code="ERR_JOSE_ALG_NOT_ALLOWED"}static get code(){return"ERR_JOSE_ALG_NOT_ALLOWED"}}class WR extends GR{constructor(){super(...arguments),this.code="ERR_JOSE_NOT_SUPPORTED"}static get code(){return"ERR_JOSE_NOT_SUPPORTED"}}class CR extends GR{constructor(){super(...arguments),this.code="ERR_JWS_INVALID"}static get code(){return"ERR_JWS_INVALID"}}class RR extends GR{constructor(){super(...arguments),this.code="ERR_JWT_INVALID"}static get code(){return"ERR_JWT_INVALID"}}class SR extends GR{constructor(){super(...arguments),this.code="ERR_JWKS_INVALID"}static get code(){return"ERR_JWKS_INVALID"}}class vR extends GR{constructor(){super(...arguments),this.code="ERR_JWKS_NO_MATCHING_KEY",this.message="no applicable key found in the JSON Web Key Set"}static get code(){return"ERR_JWKS_NO_MATCHING_KEY"}}class fR extends GR{constructor(){super(...arguments),this.code="ERR_JWKS_MULTIPLE_MATCHING_KEYS",this.message="multiple matching keys found in the JSON Web Key Set"}static get code(){return"ERR_JWKS_MULTIPLE_MATCHING_KEYS"}}class YR extends GR{constructor(){super(...arguments),this.code="ERR_JWS_SIGNATURE_VERIFICATION_FAILED",this.message="signature verification failed"}static get code(){return"ERR_JWS_SIGNATURE_VERIFICATION_FAILED"}}function KR(){return"function"==typeof WebSocketPair}function NR(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"algorithm.name";return new TypeError("CryptoKey does not support this operation, its ".concat(t," must be ").concat(e))}function JR(e,t){return e.name===t}function LR(e){return parseInt(e.name.slice(4),10)}function kR(e){switch(e){case"ES256":return"P-256";case"ES384":return"P-384";case"ES512":return"P-521";default:throw new Error("unreachable")}}function UR(e,t){if(t.length&&!t.some((t=>e.usages.includes(t)))){let e="CryptoKey does not support this operation, its usages must include ";if(t.length>2){const i=t.pop();e+="one of ".concat(t.join(", "),", or ").concat(i,".")}else 2===t.length?e+="one of ".concat(t[0]," or ").concat(t[1],"."):e+="".concat(t[0],".");throw new TypeError(e)}}var HR=function(e){let t="Key must be ";for(var i=arguments.length,n=new Array(i>1?i-1:0),l=1;l<i;l++)n[l-1]=arguments[l];if(n.length>2){const e=n.pop();t+="one of type ".concat(n.join(", "),", or ").concat(e,".")}else 2===n.length?t+="one of type ".concat(n[0]," or ").concat(n[1],"."):t+="of type ".concat(n[0],".");return null==e?t+=" Received ".concat(e):"function"==typeof e&&e.name?t+=" Received function ".concat(e.name):"object"==typeof e&&null!=e&&e.constructor&&e.constructor.name&&(t+=" Received an instance of ".concat(e.constructor.name)),t},AR=e=>mR(e);const TR=["CryptoKey"];function BR(e){if("object"!=typeof(t=e)||null===t||"[object Object]"!==Object.prototype.toString.call(e))return!1;var t;if(null===Object.getPrototypeOf(e))return!0;let i=e;for(;null!==Object.getPrototypeOf(i);)i=Object.getPrototypeOf(i);return Object.getPrototypeOf(e)===i}const FR=async e=>{var t,i;const{algorithm:n,keyUsages:l}=function(e){let t,i;switch(e.kty){case"oct":switch(e.alg){case"HS256":case"HS384":case"HS512":t={name:"HMAC",hash:"SHA-".concat(e.alg.slice(-3))},i=["sign","verify"];break;case"A128CBC-HS256":case"A192CBC-HS384":case"A256CBC-HS512":throw new WR("".concat(e.alg," keys cannot be imported as CryptoKey instances"));case"A128GCM":case"A192GCM":case"A256GCM":case"A128GCMKW":case"A192GCMKW":case"A256GCMKW":t={name:"AES-GCM"},i=["encrypt","decrypt"];break;case"A128KW":case"A192KW":case"A256KW":t={name:"AES-KW"},i=["wrapKey","unwrapKey"];break;case"PBES2-HS256+A128KW":case"PBES2-HS384+A192KW":case"PBES2-HS512+A256KW":t={name:"PBKDF2"},i=["deriveBits"];break;default:throw new WR('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case"RSA":switch(e.alg){case"PS256":case"PS384":case"PS512":t={name:"RSA-PSS",hash:"SHA-".concat(e.alg.slice(-3))},i=e.d?["sign"]:["verify"];break;case"RS256":case"RS384":case"RS512":t={name:"RSASSA-PKCS1-v1_5",hash:"SHA-".concat(e.alg.slice(-3))},i=e.d?["sign"]:["verify"];break;case"RSA-OAEP":case"RSA-OAEP-256":case"RSA-OAEP-384":case"RSA-OAEP-512":t={name:"RSA-OAEP",hash:"SHA-".concat(parseInt(e.alg.slice(-3),10)||1)},i=e.d?["decrypt","unwrapKey"]:["encrypt","wrapKey"];break;default:throw new WR('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case"EC":switch(e.alg){case"ES256":t={name:"ECDSA",namedCurve:"P-256"},i=e.d?["sign"]:["verify"];break;case"ES384":t={name:"ECDSA",namedCurve:"P-384"},i=e.d?["sign"]:["verify"];break;case"ES512":t={name:"ECDSA",namedCurve:"P-521"},i=e.d?["sign"]:["verify"];break;case"ECDH-ES":case"ECDH-ES+A128KW":case"ECDH-ES+A192KW":case"ECDH-ES+A256KW":t={name:"ECDH",namedCurve:e.crv},i=e.d?["deriveBits"]:[];break;default:throw new WR('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case KR()&&"OKP":if("EdDSA"!==e.alg)throw new WR('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');if("Ed25519"!==e.crv)throw new WR('Invalid or unsupported JWK "crv" (Subtype of Key Pair) Parameter value');t={name:"NODE-ED25519",namedCurve:"NODE-ED25519"},i=e.d?["sign"]:["verify"];break;default:throw new WR('Invalid or unsupported JWK "kty" (Key Type) Parameter value')}return{algorithm:t,keyUsages:i}}(e),o=[n,null!==(t=e.ext)&&void 0!==t&&t,null!==(i=e.key_ops)&&void 0!==i?i:l];if("PBKDF2"===n.name)return bR.subtle.importKey("raw",gR(e.k),...o);const c={...e};return delete c.alg,bR.subtle.importKey("jwk",c,...o)};const wR=(e,t,i)=>{e.startsWith("HS")||"dir"===e||e.startsWith("PBES2")||/^A\d{3}(?:GCM)?KW$/.test(e)?(e=>{if(!(e instanceof Uint8Array)){if(!AR(e))throw new TypeError(HR(e,...TR,"Uint8Array"));if("secret"!==e.type)throw new TypeError("".concat(TR.join(" or "),' instances for symmetric algorithms must be of type "secret"'))}})(t):((e,t)=>{if(!AR(e))throw new TypeError(HR(e,...TR));if("secret"===e.type)throw new TypeError("".concat(TR.join(" or "),' instances for asymmetric algorithms must not be of type "secret"'));if("sign"===t&&"public"===e.type)throw new TypeError("".concat(TR.join(" or "),' instances for asymmetric algorithm signing must be of type "private"'));if("decrypt"===t&&"public"===e.type)throw new TypeError("".concat(TR.join(" or "),' instances for asymmetric algorithm decryption must be of type "private"'));if(e.algorithm&&"verify"===t&&"private"===e.type)throw new TypeError("".concat(TR.join(" or "),' instances for asymmetric algorithm verifying must be of type "public"'));if(e.algorithm&&"encrypt"===t&&"private"===e.type)throw new TypeError("".concat(TR.join(" or "),' instances for asymmetric algorithm encryption must be of type "public"'))})(t,i)};function xR(e,t,i){if(mR(t))return function(e,t){switch(t){case"HS256":case"HS384":case"HS512":{if(!JR(e.algorithm,"HMAC"))throw NR("HMAC");const i=parseInt(t.slice(2),10);if(LR(e.algorithm.hash)!==i)throw NR("SHA-".concat(i),"algorithm.hash");break}case"RS256":case"RS384":case"RS512":{if(!JR(e.algorithm,"RSASSA-PKCS1-v1_5"))throw NR("RSASSA-PKCS1-v1_5");const i=parseInt(t.slice(2),10);if(LR(e.algorithm.hash)!==i)throw NR("SHA-".concat(i),"algorithm.hash");break}case"PS256":case"PS384":case"PS512":{if(!JR(e.algorithm,"RSA-PSS"))throw NR("RSA-PSS");const i=parseInt(t.slice(2),10);if(LR(e.algorithm.hash)!==i)throw NR("SHA-".concat(i),"algorithm.hash");break}case KR()&&"EdDSA":if(!JR(e.algorithm,"NODE-ED25519"))throw NR("NODE-ED25519");break;case"ES256":case"ES384":case"ES512":{if(!JR(e.algorithm,"ECDSA"))throw NR("ECDSA");const i=kR(t);if(e.algorithm.namedCurve!==i)throw NR(i,"algorithm.namedCurve");break}default:throw new TypeError("CryptoKey does not support this operation")}for(var i=arguments.length,n=new Array(i>2?i-2:0),l=2;l<i;l++)n[l-2]=arguments[l];UR(e,n)}(t,e,i),t;if(t instanceof Uint8Array){if(!e.startsWith("HS"))throw new TypeError(HR(t,...TR));return bR.subtle.importKey("raw",t,{hash:"SHA-".concat(e.slice(-3)),name:"HMAC"},!1,[i])}throw new TypeError(HR(t,...TR,"Uint8Array"))}const zR=async(e,t,i,n)=>{const l=await xR(e,t,"verify");((e,t)=>{if(e.startsWith("RS")||e.startsWith("PS")){const{modulusLength:i}=t.algorithm;if("number"!=typeof i||i<2048)throw new TypeError("".concat(e," requires key modulusLength to be 2048 bits or larger"))}})(e,l);const o=function(e,t){const i="SHA-".concat(e.slice(-3));switch(e){case"HS256":case"HS384":case"HS512":return{hash:i,name:"HMAC"};case"PS256":case"PS384":case"PS512":return{hash:i,name:"RSA-PSS",saltLength:e.slice(-3)>>3};case"RS256":case"RS384":case"RS512":return{hash:i,name:"RSASSA-PKCS1-v1_5"};case"ES256":case"ES384":case"ES512":return{hash:i,name:"ECDSA",namedCurve:t.namedCurve};case KR()&&"EdDSA":const{namedCurve:n}=t;return{name:n,namedCurve:n};default:throw new WR("alg ".concat(e," is not supported either by JOSE or your javascript runtime"))}}(e,l.algorithm);try{return await bR.subtle.verify(o,l,i,n)}catch(e){return!1}};async function PR(e,t,i){var n;if(!BR(e))throw new CR("Flattened JWS must be an object");if(void 0===e.protected&&void 0===e.header)throw new CR('Flattened JWS must have either of the "protected" or "header" members');if(void 0!==e.protected&&"string"!=typeof e.protected)throw new CR("JWS Protected Header incorrect type");if(void 0===e.payload)throw new CR("JWS Payload missing");if("string"!=typeof e.signature)throw new CR("JWS Signature missing or incorrect type");if(void 0!==e.header&&!BR(e.header))throw new CR("JWS Unprotected Header incorrect type");let l={};if(e.protected){const t=gR(e.protected);try{l=JSON.parse(IR.decode(t))}catch(e){throw new CR("JWS Protected Header is invalid")}}if(!function(){for(var e=arguments.length,t=new Array(e),i=0;i<e;i++)t[i]=arguments[i];const n=t.filter(Boolean);if(0===n.length||1===n.length)return!0;let l;for(const e of n){const t=Object.keys(e);if(l&&0!==l.size)for(const e of t){if(l.has(e))return!1;l.add(e)}else l=new Set(t)}return!0}(l,e.header))throw new CR("JWS Protected and JWS Unprotected Header Parameter names must be disjoint");const o={...l,...e.header},c=function(e,t,i,n,l){if(void 0!==l.crit&&void 0===n.crit)throw new e('"crit" (Critical) Header Parameter MUST be integrity protected');if(!n||void 0===n.crit)return new Set;if(!Array.isArray(n.crit)||0===n.crit.length||n.crit.some((e=>"string"!=typeof e||0===e.length)))throw new e('"crit" (Critical) Header Parameter MUST be an array of non-empty strings when present');let o;o=void 0!==i?new Map([...Object.entries(i),...t.entries()]):t;for(const t of n.crit){if(!o.has(t))throw new WR('Extension Header Parameter "'.concat(t,'" is not recognized'));if(void 0===l[t])throw new e('Extension Header Parameter "'.concat(t,'" is missing'));if(o.get(t)&&void 0===n[t])throw new e('Extension Header Parameter "'.concat(t,'" MUST be integrity protected'))}return new Set(n.crit)}(CR,new Map([["b64",!0]]),null==i?void 0:i.crit,l,o);let a=!0;if(c.has("b64")&&(a=l.b64,"boolean"!=typeof a))throw new CR('The "b64" (base64url-encode payload) Header Parameter must be a boolean');const{alg:r}=o;if("string"!=typeof r||!r)throw new CR('JWS "alg" (Algorithm) Header Parameter missing or invalid');const d=i&&((e,t)=>{if(void 0!==t&&(!Array.isArray(t)||t.some((e=>"string"!=typeof e))))throw new TypeError('"'.concat(e,'" option must be an array of strings'));if(t)return new Set(t)})("algorithms",i.algorithms);if(d&&!d.has(r))throw new VR('"alg" (Algorithm) Header Parameter not allowed');if(a){if("string"!=typeof e.payload)throw new CR("JWS Payload must be a string")}else if("string"!=typeof e.payload&&!(e.payload instanceof Uint8Array))throw new CR("JWS Payload must be a string or an Uint8Array instance");let s=!1;"function"==typeof t&&(t=await t(l,e),s=!0),wR(r,t,"verify");const u=function(){for(var e=arguments.length,t=new Array(e),i=0;i<e;i++)t[i]=arguments[i];const n=t.reduce(((e,t)=>{let{length:i}=t;return e+i}),0),l=new Uint8Array(n);let o=0;return t.forEach((e=>{l.set(e,o),o+=e.length})),l}(pR.encode(null!==(n=e.protected)&&void 0!==n?n:""),pR.encode("."),"string"==typeof e.payload?pR.encode(e.payload):e.payload),Z=gR(e.signature);if(!await zR(r,t,Z,u))throw new YR;let h;h=a?gR(e.payload):"string"==typeof e.payload?pR.encode(e.payload):e.payload;const b={payload:h};return void 0!==e.protected&&(b.protectedHeader=l),void 0!==e.header&&(b.unprotectedHeader=e.header),s?{...b,key:t}:b}var QR=e=>Math.floor(e.getTime()/1e3);const jR=/^(\d+|\d+\.\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)$/i;var MR=e=>{const t=jR.exec(e);if(!t)throw new TypeError("Invalid time period format");const i=parseFloat(t[1]);switch(t[2].toLowerCase()){case"sec":case"secs":case"second":case"seconds":case"s":return Math.round(i);case"minute":case"minutes":case"min":case"mins":case"m":return Math.round(60*i);case"hour":case"hours":case"hr":case"hrs":case"h":return Math.round(3600*i);case"day":case"days":case"d":return Math.round(86400*i);case"week":case"weeks":case"w":return Math.round(604800*i);default:return Math.round(31557600*i)}};const ER=e=>e.toLowerCase().replace(/^application\//,""),DR=(e,t)=>"string"==typeof e?t.includes(e):!!Array.isArray(e)&&t.some(Set.prototype.has.bind(new Set(e)));async function OR(e,t,i){var n;const l=await async function(e,t,i){if(e instanceof Uint8Array&&(e=IR.decode(e)),"string"!=typeof e)throw new CR("Compact JWS must be a string or Uint8Array");const{0:n,1:l,2:o,length:c}=e.split(".");if(3!==c)throw new CR("Invalid Compact JWS");const a=await PR({payload:l,protected:n,signature:o},t,i),r={payload:a.payload,protectedHeader:a.protectedHeader};return"function"==typeof t?{...r,key:a.key}:r}(e,t,i);if((null===(n=l.protectedHeader.crit)||void 0===n?void 0:n.includes("b64"))&&!1===l.protectedHeader.b64)throw new RR("JWTs MUST NOT use unencoded payload");const o=function(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{typ:n}=i;if(n&&("string"!=typeof e.typ||ER(e.typ)!==ER(n)))throw new yR('unexpected "typ" JWT header value',"typ","check_failed");let l;try{l=JSON.parse(IR.decode(t))}catch(e){}if(!BR(l))throw new RR("JWT Claims Set must be a top-level JSON object");const{issuer:o}=i;if(o&&!(Array.isArray(o)?o:[o]).includes(l.iss))throw new yR('unexpected "iss" claim value',"iss","check_failed");const{subject:c}=i;if(c&&l.sub!==c)throw new yR('unexpected "sub" claim value',"sub","check_failed");const{audience:a}=i;if(a&&!DR(l.aud,"string"==typeof a?[a]:a))throw new yR('unexpected "aud" claim value',"aud","check_failed");let r;switch(typeof i.clockTolerance){case"string":r=MR(i.clockTolerance);break;case"number":r=i.clockTolerance;break;case"undefined":r=0;break;default:throw new TypeError("Invalid clockTolerance option type")}const{currentDate:d}=i,s=QR(d||new Date);if((void 0!==l.iat||i.maxTokenAge)&&"number"!=typeof l.iat)throw new yR('"iat" claim must be a number',"iat","invalid");if(void 0!==l.nbf){if("number"!=typeof l.nbf)throw new yR('"nbf" claim must be a number',"nbf","invalid");if(l.nbf>s+r)throw new yR('"nbf" claim timestamp check failed',"nbf","check_failed")}if(void 0!==l.exp){if("number"!=typeof l.exp)throw new yR('"exp" claim must be a number',"exp","invalid");if(l.exp<=s-r)throw new XR('"exp" claim timestamp check failed',"exp","check_failed")}if(i.maxTokenAge){const e=s-l.iat;if(e-r>("number"==typeof i.maxTokenAge?i.maxTokenAge:MR(i.maxTokenAge)))throw new XR('"iat" claim timestamp check failed (too far in the past)',"iat","check_failed");if(e<0-r)throw new yR('"iat" claim timestamp check failed (it should be in the past)',"iat","check_failed")}return l}(l.protectedHeader,l.payload,i),c={payload:o,protectedHeader:l.protectedHeader};return"function"==typeof t?{...c,key:l.key}:c}function _R(e){return BR(e)}class qR{constructor(e){if(this._cached=new WeakMap,!function(e){return e&&"object"==typeof e&&Array.isArray(e.keys)&&e.keys.every(_R)}(e))throw new SR("JSON Web Key Set malformed");var t;this._jwks=(t=e,"function"==typeof structuredClone?structuredClone(t):JSON.parse(JSON.stringify(t)))}async getKey(e,t){const{alg:i,kid:n}={...e,...t.header},l=function(e){switch("string"==typeof e&&e.slice(0,2)){case"RS":case"PS":return"RSA";case"ES":return"EC";case"Ed":return"OKP";default:throw new WR('Unsupported "alg" value for a JSON Web Key Set')}}(i),o=this._jwks.keys.filter((e=>{let t=l===e.kty;if(t&&"string"==typeof n&&(t=n===e.kid),t&&"string"==typeof e.alg&&(t=i===e.alg),t&&"string"==typeof e.use&&(t="sig"===e.use),t&&Array.isArray(e.key_ops)&&(t=e.key_ops.includes("verify")),t&&"EdDSA"===i&&(t="Ed25519"===e.crv||"Ed448"===e.crv),t)switch(i){case"ES256":t="P-256"===e.crv;break;case"ES256K":t="secp256k1"===e.crv;break;case"ES384":t="P-384"===e.crv;break;case"ES512":t="P-521"===e.crv}return t})),{0:c,length:a}=o;if(0===a)throw new vR;if(1!==a)throw new fR;const r=this._cached.get(c)||this._cached.set(c,{}).get(c);if(void 0===r[i]){const e=await async function(e,t,i){if(!BR(e))throw new TypeError("JWK must be an object");if(t||(t=e.alg),"string"!=typeof t||!t)throw new TypeError('"alg" argument is required when "jwk.alg" is not present');switch(e.kty){case"oct":if("string"!=typeof e.k||!e.k)throw new TypeError('missing "k" (Key Value) Parameter value');return null!=i||(i=!0!==e.ext),i?FR({...e,alg:t,ext:!1}):gR(e.k);case"RSA":if(void 0!==e.oth)throw new WR('RSA JWK "oth" (Other Primes Info) Parameter value is not supported');case"EC":case"OKP":return FR({...e,alg:t});default:throw new WR('Unsupported "kty" (Key Type) Parameter value')}}({...c,ext:!0},i);if(e instanceof Uint8Array||"public"!==e.type)throw new SR("JSON Web Key Set members must be public keys");r[i]=e}return r[i]}}var $R={exports:{}},eS={exports:{}},tS=i(XV);
431
431
  /*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */
432
- !function(e,t){var i=cR,n=i.Buffer;function l(e,t){for(var i in e)t[i]=e[i]}function o(e,t,i){return n(e,t,i)}n.from&&n.alloc&&n.allocUnsafe&&n.allocUnsafeSlow?e.exports=i:(l(i,t),t.Buffer=o),o.prototype=Object.create(n.prototype),l(n,o),o.from=function(e,t,i){if("number"==typeof e)throw new TypeError("Argument must not be a number");return n(e,t,i)},o.alloc=function(e,t,i){if("number"!=typeof e)throw new TypeError("Argument must be a number");var l=n(e);return void 0!==t?"string"==typeof i?l.fill(t,i):l.fill(t):l.fill(0),l},o.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return n(e)},o.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return i.SlowBuffer(e)}}(oR,oR.exports);var aR=oR.exports.Buffer,rR=e.crypto||e.msCrypto;rR&&rR.getRandomValues?lR.exports=function(e,t){if(e>4294967295)throw new RangeError("requested too many random bytes");var i=aR.allocUnsafe(e);if(e>0)if(e>65536)for(var n=0;n<e;n+=65536)rR.getRandomValues(i.slice(n,n+65536));else rR.getRandomValues(i);if("function"==typeof t)return BX.nextTick((function(){t(null,i)}));return i}:lR.exports=function(){throw new Error("Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11")};var dR=lR.exports;class sR{base64URLEncode(e){return IC.encode(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}base64URLDecode(e){return IC.decode(e).toString()}hashSha256(e){return VW.from(gC((new TextEncoder).encode(e)))}generateRandomBytes(e){return dR(e)}verifyJwt(e,t,i,n,l,o,c,a){const r={algorithms:i,audience:n,clockTolerance:c,subject:o};return(null==a||a)&&(r.issuer=l),tR(e,(d={keys:[t]},nR.prototype.getKey.bind(new nR(d))),r).then((()=>Promise.resolve(!0))).catch((e=>{var t;return Promise.reject(new Sy("SPA-CRYPTO-UTILS-VJ-IV01",null!==(t=null==e?void 0:e.reason)&&void 0!==t?t:JSON.stringify(e),"".concat(null==e?void 0:e.code," ").concat(null==e?void 0:e.claim)))}));var d}}const uR=(e,t,i)=>ry(void 0,void 0,void 0,(function*(){var n;const l=(e=>{switch(e){case jy.LocalStorage:return new oW;case jy.SessionStorage:return new aW;case jy.BrowserMemory:return new cW;default:return new aW}})(t.storage),o=new sR,c=new ky;yield c.initialize(t,l,o,e);const a=new Dy(c),r=c.getDataLayer(),d=yield Oy((()=>ry(void 0,void 0,void 0,(function*(){return c.getSignOutURL()}))),null!==(n=t.storage)&&void 0!==n?n:jy.SessionStorage,(e=>r.setSessionDataParameter(Xy,null!=e?e:""))),s=i(c,a);let u=!1;const Z=lW.getInstance();let h,b,m=!0;(null==Z?void 0:Z.init)&&(yield Z.init(!0,(e=>ry(void 0,void 0,void 0,(function*(){yield s.attachTokenToRequestConfig(e)})))));const I=()=>ry(void 0,void 0,void 0,(function*(){const e=yield c.getOIDCServiceEndpoints(),t=yield r.getConfigData();s.initializeSessionManger(t,e,(()=>ry(void 0,void 0,void 0,(function*(){return(yield c.getBasicUserInfo()).sessionState}))),(e=>ry(void 0,void 0,void 0,(function*(){return c.getAuthorizationURL(e)}))),d)})),p=()=>ry(void 0,void 0,void 0,(function*(){return yield d.receivePromptNoneResponse((e=>ry(void 0,void 0,void 0,(function*(){yield r.setSessionDataParameter(Xy,null!=e?e:"")}))))})),g=e=>{e.preventSignOutURLUpdate&&(u=!0)},G=(e,t,i,n)=>ry(void 0,void 0,void 0,(function*(){return yield s.requestAccessToken(e,t,I,void 0,i,n)})),y=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return ry(void 0,void 0,void 0,(function*(){const t=yield r.getConfigData(),i=yield c.getAuthorizationURL(Object.assign({prompt:"none",state:"sign-in-silently"},e)),n=new URL(i);n.searchParams.set("response_mode","query");const l=n.toString();if(t.storage===jy.BrowserMemory&&t.enablePKCE){const e=n.searchParams.get(Cy);My.setPKCE(fy.extractPKCEKeyFromStateParam(null!=e?e:""),yield c.getPKCECode(null!=e?e:""))}return l}))};return{disableHttpHandler:()=>(s.disableHttpHandler(Z),m=!1,!0),enableHttpHandler:()=>(s.enableHttpHandler(Z),m=!0,!0),getAccessToken:()=>ry(void 0,void 0,void 0,(function*(){return s.getAccessToken()})),getBasicUserInfo:()=>ry(void 0,void 0,void 0,(function*(){return s.getBasicUserInfo()})),getConfigData:()=>ry(void 0,void 0,void 0,(function*(){return yield r.getConfigData()})),getCryptoHelper:()=>ry(void 0,void 0,void 0,(function*(){return s.getCryptoHelper()})),getDataLayer:()=>ry(void 0,void 0,void 0,(function*(){return s.getDataLayer()})),getDecodedIDToken:()=>ry(void 0,void 0,void 0,(function*(){return s.getDecodedIDToken()})),getHttpClient:()=>Z,getIDToken:()=>ry(void 0,void 0,void 0,(function*(){return s.getIDToken()})),getOIDCServiceEndpoints:()=>ry(void 0,void 0,void 0,(function*(){return s.getOIDCServiceEndpoints()})),httpRequest:e=>ry(void 0,void 0,void 0,(function*(){return yield s.httpRequest(Z,e,m,h,b)})),httpRequestAll:e=>ry(void 0,void 0,void 0,(function*(){return yield s.httpRequestAll(e,Z,m,h,b)})),isAuthenticated:()=>ry(void 0,void 0,void 0,(function*(){return s.isAuthenticated()})),isSessionActive:()=>ry(void 0,void 0,void 0,(function*(){return"true"===(yield r.getSessionStatus())})),refreshAccessToken:()=>ry(void 0,void 0,void 0,(function*(){try{return yield s.refreshAccessToken(g)}catch(e){return Promise.reject(e)}})),requestCustomGrant:e=>ry(void 0,void 0,void 0,(function*(){return yield s.requestCustomGrant(e,g)})),revokeAccessToken:()=>ry(void 0,void 0,void 0,(function*(){const e=yield a.getRefreshTimeoutTimer();return c.revokeAccessToken().then((()=>(d.reset(),a.clearRefreshTokenTimeout(e),Promise.resolve(!0)))).catch((e=>Promise.reject(e)))})),setHttpRequestErrorCallback:e=>{h=e},setHttpRequestFinishCallback:e=>{(null==Z?void 0:Z.setHttpRequestFinishCallback)&&Z.setHttpRequestFinishCallback(e)},setHttpRequestStartCallback:e=>{(null==Z?void 0:Z.setHttpRequestStartCallback)&&Z.setHttpRequestStartCallback(e)},setHttpRequestSuccessCallback:e=>{(null==Z?void 0:Z.setHttpRequestSuccessCallback)&&Z.setHttpRequestSuccessCallback(e)},signIn:(e,i,n,l,o)=>ry(void 0,void 0,void 0,(function*(){var a,d,u;const Z=yield s.handleSignIn(p,I,void 0);if(Z)return Z;{let s,Z,b,m={params:{}};if((null==t?void 0:t.responseMode)===cy.formPost&&i?(s=i,Z=null!=n?n:"",b=null!=l?l:""):(s=null!==(a=new URL(window.location.href).searchParams.get(yy))&&void 0!==a?a:"",Z=null!==(d=new URL(window.location.href).searchParams.get(Xy))&&void 0!==d?d:"",b=null!==(u=new URL(window.location.href).searchParams.get(Cy))&&void 0!==u?u:"",My.removeAuthorizationCode()),s&&b){h="true",ry(void 0,void 0,void 0,(function*(){yield r.setSessionStatus(h)}));const e=yield r.getTemporaryDataParameter("token_request_config");return e&&"string"==typeof e&&(m=JSON.parse(e)),G(s,Z,b,m)}return c.getAuthorizationURL(e).then((e=>ry(void 0,void 0,void 0,(function*(){if(t.storage===jy.BrowserMemory&&t.enablePKCE){const e=fy.extractPKCEKeyFromStateParam(b);My.setPKCE(e,yield c.getPKCECode(b))}return o&&r.setTemporaryDataParameter("token_request_config",JSON.stringify(o)),location.href=e,yield My.waitTillPageRedirect(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""})}))))}var h})),signOut:()=>ry(void 0,void 0,void 0,(function*(){return(yield c.isAuthenticated())&&!u?location.href=yield c.getSignOutURL():location.href=My.getSignOutURL(t.clientID,e),a.clearRefreshTokenTimeout(),yield r.removeOIDCProviderMetaData(),yield r.removeTemporaryData(),yield r.removeSessionData(),yield r.removeSessionStatus(),yield My.waitTillPageRedirect(),!0})),trySignInSilently:(e,t)=>ry(void 0,void 0,void 0,(function*(){return yield s.trySignInSilently(y,G,d,e,t)})),updateConfig:e=>ry(void 0,void 0,void 0,(function*(){const t=yield r.getConfigData(),i=!(t&&t.endpoints&&t.endpoints.checkSessionIframe&&e&&e.endpoints&&e.endpoints.checkSessionIframe&&t.endpoints.checkSessionIframe===e.endpoints.checkSessionIframe),n=Object.assign(Object.assign({},t),e);yield c.updateConfig(n),n.enableOIDCSessionManagement&&i&&(d.reset(),I())}))}})),ZR=(e,t,i,n)=>ry(void 0,void 0,void 0,(function*(){var l;let o;const c=null!==(l=null==t?void 0:t.requestTimeout)&&void 0!==l?l:6e4;let a=!0,r=!1;const d=(e=>{switch(e){case jy.LocalStorage:return new oW;case jy.SessionStorage:return new aW;case jy.BrowserMemory:return new cW;default:return new aW}})(t.storage),s=new sR,u=new ky;yield u.initialize(t,d,s,e);const Z=new Dy(u),h=yield Oy((()=>ry(void 0,void 0,void 0,(function*(){const i={type:"sign-out"};try{return yield I(i)}catch(i){return My.getSignOutURL(t.clientID,e)}}))),t.storage,(e=>p(e))),b=n(u,Z),m=new i,I=e=>{const t=new MessageChannel;return m.postMessage(e,[t.port2]),new Promise(((e,i)=>{const n=setTimeout((()=>{i(new Sy("SPA-WEB_WORKER_CLIENT-COM-TO01","Operation timed out.","No response was received from the web worker for "+c/1e3+" since dispatching the request"))}),c);return t.port1.onmessage=l=>{let{data:o}=l;if(clearTimeout(n),t.port1.close(),t.port2.close(),null==o?void 0:o.success){const t=(null==o?void 0:o.data)?JSON.parse(null==o?void 0:o.data):null;(null==o?void 0:o.blob)&&(t.data=null==o?void 0:o.blob),e(t)}else i(o.error?JSON.parse(o.error):null)}}))},p=e=>I({data:e,type:"set_session_state"}),g=()=>I({type:"start_auto_refresh_token"}),G=()=>ry(void 0,void 0,void 0,(function*(){const e=yield R(),t=yield v();b.initializeSessionManger(t,e,(()=>ry(void 0,void 0,void 0,(function*(){return(yield S()).sessionState}))),(e=>ry(void 0,void 0,void 0,(function*(){return(yield X(e)).authorizationURL}))),h)})),y=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return ry(void 0,void 0,void 0,(function*(){var t;const i=yield v(),n={data:Object.assign({prompt:"none",state:"sign-in-silently"},e),type:"get_auth_url"},l=yield I(n),o=fy.extractPKCEKeyFromStateParam(null!==(t=new URL(l.authorizationURL).searchParams.get(Cy))&&void 0!==t?t:"");l.pkce&&i.enablePKCE&&My.setPKCE(o,l.pkce);const c=l.authorizationURL,a=new URL(c);a.searchParams.set("response_mode","query");return a.toString()}))},X=e=>ry(void 0,void 0,void 0,(function*(){const t=yield v();return I({data:e,type:"get_auth_url"}).then((e=>ry(void 0,void 0,void 0,(function*(){var i;if(e.pkce&&t.enablePKCE){const t=fy.extractPKCEKeyFromStateParam(null!==(i=new URL(e.authorizationURL).searchParams.get(Cy))&&void 0!==i?i:"");My.setPKCE(t,e.pkce)}return Promise.resolve(e)}))))})),V=(t,i,n,l)=>ry(void 0,void 0,void 0,(function*(){const o=yield v(),c=fy.extractPKCEKeyFromStateParam(n),a={data:{code:t,pkce:o.enablePKCE?My.getPKCE(c):void 0,sessionState:i,state:n,tokenRequestConfig:l},type:"request_get_token"};return o.enablePKCE&&My.removePKCE(c),I(a).then((t=>I({type:"get_sign_out_url"}).then((i=>(My.setSignOutURL(i,o.clientID,e),o.enableOIDCSessionManagement&&G(),g(),Promise.resolve(t)))).catch((e=>Promise.reject(e))))).catch((e=>Promise.reject(e)))})),W=()=>ry(void 0,void 0,void 0,(function*(){return yield h.receivePromptNoneResponse((e=>ry(void 0,void 0,void 0,(function*(){return p(e)}))))})),C=()=>ry(void 0,void 0,void 0,(function*(){if(yield f())return yield g(),t.enableOIDCSessionManagement&&G(),S()})),R=()=>I({type:"get-oidc-service-endpoints"}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),v=()=>I({type:"get_config_data"}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),S=()=>I({type:"get-basic-user-info"}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),f=()=>I({type:"is_authenticated"}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e)));return{disableHttpHandler:()=>I({type:"disable_http_handler"}).then((()=>(a=!1,Promise.resolve(!0)))).catch((e=>Promise.reject(e))),enableHttpHandler:()=>I({type:"enable_http_handler"}).then((()=>(a=!0,Promise.resolve(!0)))).catch((e=>Promise.reject(e))),getBasicUserInfo:S,getConfigData:v,getCryptoHelper:()=>I({type:"get-crypto-helper"}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),getDecodedIDPIDToken:()=>I({type:"get-decoded-idp-id-token"}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),getDecodedIDToken:()=>I({type:"get-decoded-id-token"}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),getIDToken:()=>I({type:"get_id_token"}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),getOIDCServiceEndpoints:R,httpRequest:e=>{(null==e?void 0:e.data)&&(null==e?void 0:e.data)instanceof FormData&&(e.data=Object.assign(Object.assign({},Object.fromEntries(null==e?void 0:e.data.entries())),{formData:!0}));return I({data:e,type:"http-request"}).then((e=>Promise.resolve(e))).catch((e=>ry(void 0,void 0,void 0,(function*(){return a&&("function"==typeof o.requestErrorCallback&&(yield o.requestErrorCallback(e)),"function"==typeof o.requestFinishCallback&&o.requestFinishCallback()),Promise.reject(e)}))))},httpRequestAll:e=>I({data:e,type:"http-request-all"}).then((e=>Promise.resolve(e))).catch((e=>ry(void 0,void 0,void 0,(function*(){return a&&("function"==typeof o.requestErrorCallback&&(yield o.requestErrorCallback(e)),"function"==typeof o.requestFinishCallback&&o.requestFinishCallback()),Promise.reject(e)})))),initialize:()=>{o||(o={requestErrorCallback:()=>Promise.resolve(),requestFinishCallback:()=>null,requestStartCallback:()=>null,requestSuccessCallback:()=>null}),m.onmessage=e=>{let{data:t}=e;switch(t.type){case"request-finish":(null==o?void 0:o.requestFinishCallback)&&(null==o||o.requestFinishCallback());break;case"request-start":(null==o?void 0:o.requestStartCallback)&&(null==o||o.requestStartCallback());break;case"request-success":(null==o?void 0:o.requestSuccessCallback)&&(null==o||o.requestSuccessCallback(t.data?JSON.parse(t.data):null))}};return I({data:t,type:"init"}).then((()=>Promise.resolve(!0))).catch((e=>Promise.reject(e)))},isAuthenticated:f,refreshAccessToken:()=>I({type:"refresh_access-token"}),requestCustomGrant:e=>I({data:e,type:"request-custom-grant"}).then((t=>(e.preventSignOutURLUpdate&&(r=!0),Promise.resolve(t)))).catch((e=>Promise.reject(e))),revokeAccessToken:()=>I({type:"revoke-access-token"}).then((e=>(h.reset(),Promise.resolve(e)))).catch((e=>Promise.reject(e))),setHttpRequestErrorCallback:e=>{e&&"function"==typeof e&&(o.requestErrorCallback=e)},setHttpRequestFinishCallback:e=>{e&&"function"==typeof e&&(o.requestFinishCallback=e)},setHttpRequestStartCallback:e=>{e&&"function"==typeof e&&(o.requestStartCallback=e)},setHttpRequestSuccessCallback:e=>{e&&"function"==typeof e&&(o.requestSuccessCallback=e)},signIn:(e,i,n,l,o)=>ry(void 0,void 0,void 0,(function*(){var c,a,r;const d=yield b.handleSignIn(W,G,C);if(d)return d;{let d,s,u;return(null==t?void 0:t.responseMode)===cy.formPost&&i?(d=i,s=null!=n?n:"",u=null!=l?l:""):(d=null!==(c=new URL(window.location.href).searchParams.get(yy))&&void 0!==c?c:"",s=null!==(a=new URL(window.location.href).searchParams.get(Xy))&&void 0!==a?a:"",u=null!==(r=new URL(window.location.href).searchParams.get(Cy))&&void 0!==r?r:"",My.removeAuthorizationCode()),d&&u?V(d,s,u,o):X(e).then((e=>ry(void 0,void 0,void 0,(function*(){return location.href=e.authorizationURL,yield My.waitTillPageRedirect(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""})})))).catch((e=>Promise.reject(e)))}})),signOut:()=>new Promise(((i,n)=>{if(!r){return I({type:"sign-out"}).then((e=>ry(void 0,void 0,void 0,(function*(){return window.location.href=e,yield My.waitTillPageRedirect(),i(!0)})))).catch((e=>n(e)))}window.location.href=My.getSignOutURL(t.clientID,e),My.waitTillPageRedirect().then((()=>Promise.resolve(!0)))})),trySignInSilently:(e,t)=>ry(void 0,void 0,void 0,(function*(){return yield b.trySignInSilently(y,V,h,e,t)})),updateConfig:e=>ry(void 0,void 0,void 0,(function*(){const t=yield v(),i=!(t&&t.endpoints&&t.endpoints.checkSessionIframe&&e&&e.endpoints&&e.endpoints.checkSessionIframe&&t.endpoints.checkSessionIframe===e.endpoints.checkSessionIframe),n=Object.assign(Object.assign({},t),e),l={data:n,type:"update_config"};yield I(l),n.enableOIDCSessionManagement&&i&&(h.reset(),G())}))}})),hR={autoLogoutOnTokenRefreshError:!0,checkSessionInterval:3,clientHost:origin,enableOIDCSessionManagement:!1,periodicTokenRefresh:!1,sessionRefreshInterval:300,storage:jy.SessionStorage};class bR{constructor(e){this._authHelper=Ey,this._worker=wy,this._initialized=!1,this._startedInitialize=!1,this._onSignInCallback=()=>null,this._onSignOutCallback=()=>null,this._onSignOutFailedCallback=()=>null,this._onEndUserSession=()=>null,this._onInitialize=()=>null,this._onCustomGrant=new Map,this._instanceID=e}instantiateAuthHelper(e){this._authHelper=e||Ey}instantiateWorker(e){this._worker=e||wy}_isInitialized(){return ry(this,void 0,void 0,(function*(){if(!this._startedInitialize)return!1;let e=0;for(;!this._initialized;)1e4===e&&console.warn("It is taking longer than usual for the object to be initialized"),yield new Promise((e=>setTimeout(e,1))),e++;return!0}))}_validateMethod(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return ry(this,void 0,void 0,(function*(){return(yield this._isInitialized())?!(e&&!(yield this.isAuthenticated()))||Promise.reject(new Sy("SPA-AUTH_CLIENT-VM-IV02","The user is not authenticated.","The user must be authenticated first.")):Promise.reject(new Sy("SPA-AUTH_CLIENT-VM-NF01","The SDK is not initialized.","The SDK must be initialized first."))}))}
432
+ !function(e,t){var i=tS,n=i.Buffer;function l(e,t){for(var i in e)t[i]=e[i]}function o(e,t,i){return n(e,t,i)}n.from&&n.alloc&&n.allocUnsafe&&n.allocUnsafeSlow?e.exports=i:(l(i,t),t.Buffer=o),o.prototype=Object.create(n.prototype),l(n,o),o.from=function(e,t,i){if("number"==typeof e)throw new TypeError("Argument must not be a number");return n(e,t,i)},o.alloc=function(e,t,i){if("number"!=typeof e)throw new TypeError("Argument must be a number");var l=n(e);return void 0!==t?"string"==typeof i?l.fill(t,i):l.fill(t):l.fill(0),l},o.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return n(e)},o.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return i.SlowBuffer(e)}}(eS,eS.exports);var iS=eS.exports.Buffer,nS=e.crypto||e.msCrypto;nS&&nS.getRandomValues?$R.exports=function(e,t){if(e>4294967295)throw new RangeError("requested too many random bytes");var i=iS.allocUnsafe(e);if(e>0)if(e>65536)for(var n=0;n<e;n+=65536)nS.getRandomValues(i.slice(n,n+65536));else nS.getRandomValues(i);if("function"==typeof t)return gW.nextTick((function(){t(null,i)}));return i}:$R.exports=function(){throw new Error("Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11")};var lS=$R.exports;class oS{base64URLEncode(e){return uR.encode(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}base64URLDecode(e){return uR.decode(e).toString()}hashSha256(e){return AX.from(hR((new TextEncoder).encode(e)))}generateRandomBytes(e){return lS(e)}verifyJwt(e,t,i,n,l,o,c,a){const r={algorithms:i,audience:n,clockTolerance:c,subject:o};return(null==a||a)&&(r.issuer=l),OR(e,(d={keys:[t]},qR.prototype.getKey.bind(new qR(d))),r).then((()=>Promise.resolve(!0))).catch((e=>{var t;return Promise.reject(new vy("SPA-CRYPTO-UTILS-VJ-IV01",null!==(t=null==e?void 0:e.reason)&&void 0!==t?t:JSON.stringify(e),"".concat(null==e?void 0:e.code," ").concat(null==e?void 0:e.claim)))}));var d}}const cS=(e,t,i)=>ry(void 0,void 0,void 0,(function*(){var n;const l=(e=>{switch(e){case Qy.LocalStorage:return new $C;case Qy.SessionStorage:return new tR;case Qy.BrowserMemory:return new eR;default:return new tR}})(t.storage),o=new oS,c=new Uy;yield c.initialize(t,l,o,e);const a=new Dy(c),r=c.getDataLayer(),d=yield Oy((()=>ry(void 0,void 0,void 0,(function*(){return c.getSignOutURL()}))),null!==(n=t.storage)&&void 0!==n?n:Qy.SessionStorage,(e=>r.setSessionDataParameter(Xy,null!=e?e:""))),s=i(c,a);let u=!1;const Z=qC.getInstance();let h,b,m=!0;(null==Z?void 0:Z.init)&&(yield Z.init(!0,(e=>ry(void 0,void 0,void 0,(function*(){yield s.attachTokenToRequestConfig(e)})))));const p=()=>ry(void 0,void 0,void 0,(function*(){const e=yield c.getOIDCServiceEndpoints(),t=yield r.getConfigData();s.initializeSessionManger(t,e,(()=>ry(void 0,void 0,void 0,(function*(){return(yield c.getBasicUserInfo()).sessionState}))),(e=>ry(void 0,void 0,void 0,(function*(){return c.getAuthorizationURL(e)}))),d)})),I=()=>ry(void 0,void 0,void 0,(function*(){return yield d.receivePromptNoneResponse((e=>ry(void 0,void 0,void 0,(function*(){yield r.setSessionDataParameter(Xy,null!=e?e:"")}))))})),g=e=>{e.preventSignOutURLUpdate&&(u=!0)},G=(e,t,i,n)=>ry(void 0,void 0,void 0,(function*(){return yield s.requestAccessToken(e,t,p,void 0,i,n)})),y=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return ry(void 0,void 0,void 0,(function*(){const t=yield r.getConfigData(),i=yield c.getAuthorizationURL(Object.assign({prompt:"none",state:"sign-in-silently"},e)),n=new URL(i);n.searchParams.set("response_mode","query");const l=n.toString();if(t.storage===Qy.BrowserMemory&&t.enablePKCE){const e=n.searchParams.get(Cy);My.setPKCE(fy.extractPKCEKeyFromStateParam(null!=e?e:""),yield c.getPKCECode(null!=e?e:""))}return l}))};return{disableHttpHandler:()=>(s.disableHttpHandler(Z),m=!1,!0),enableHttpHandler:()=>(s.enableHttpHandler(Z),m=!0,!0),getAccessToken:()=>ry(void 0,void 0,void 0,(function*(){return s.getAccessToken()})),getBasicUserInfo:()=>ry(void 0,void 0,void 0,(function*(){return s.getBasicUserInfo()})),getConfigData:()=>ry(void 0,void 0,void 0,(function*(){return yield r.getConfigData()})),getCryptoHelper:()=>ry(void 0,void 0,void 0,(function*(){return s.getCryptoHelper()})),getDataLayer:()=>ry(void 0,void 0,void 0,(function*(){return s.getDataLayer()})),getDecodedIDToken:()=>ry(void 0,void 0,void 0,(function*(){return s.getDecodedIDToken()})),getHttpClient:()=>Z,getIDToken:()=>ry(void 0,void 0,void 0,(function*(){return s.getIDToken()})),getOIDCServiceEndpoints:()=>ry(void 0,void 0,void 0,(function*(){return s.getOIDCServiceEndpoints()})),httpRequest:e=>ry(void 0,void 0,void 0,(function*(){return yield s.httpRequest(Z,e,m,h,b)})),httpRequestAll:e=>ry(void 0,void 0,void 0,(function*(){return yield s.httpRequestAll(e,Z,m,h,b)})),isAuthenticated:()=>ry(void 0,void 0,void 0,(function*(){return s.isAuthenticated()})),isSessionActive:()=>ry(void 0,void 0,void 0,(function*(){return"true"===(yield r.getSessionStatus())})),refreshAccessToken:()=>ry(void 0,void 0,void 0,(function*(){try{return yield s.refreshAccessToken(g)}catch(e){return Promise.reject(e)}})),requestCustomGrant:e=>ry(void 0,void 0,void 0,(function*(){return yield s.requestCustomGrant(e,g)})),revokeAccessToken:()=>ry(void 0,void 0,void 0,(function*(){const e=yield a.getRefreshTimeoutTimer();return c.revokeAccessToken().then((()=>(d.reset(),a.clearRefreshTokenTimeout(e),Promise.resolve(!0)))).catch((e=>Promise.reject(e)))})),setHttpRequestErrorCallback:e=>{h=e},setHttpRequestFinishCallback:e=>{(null==Z?void 0:Z.setHttpRequestFinishCallback)&&Z.setHttpRequestFinishCallback(e)},setHttpRequestStartCallback:e=>{(null==Z?void 0:Z.setHttpRequestStartCallback)&&Z.setHttpRequestStartCallback(e)},setHttpRequestSuccessCallback:e=>{(null==Z?void 0:Z.setHttpRequestSuccessCallback)&&Z.setHttpRequestSuccessCallback(e)},signIn:(e,i,n,l,o)=>ry(void 0,void 0,void 0,(function*(){var a,d,u;const Z=yield s.handleSignIn(I,p,void 0);if(Z)return Z;{let s,Z,b,m={params:{}};if((null==t?void 0:t.responseMode)===cy.formPost&&i?(s=i,Z=null!=n?n:"",b=null!=l?l:""):(s=null!==(a=new URL(window.location.href).searchParams.get(yy))&&void 0!==a?a:"",Z=null!==(d=new URL(window.location.href).searchParams.get(Xy))&&void 0!==d?d:"",b=null!==(u=new URL(window.location.href).searchParams.get(Cy))&&void 0!==u?u:"",My.removeAuthorizationCode()),s&&b){h="true",ry(void 0,void 0,void 0,(function*(){yield r.setSessionStatus(h)}));const e=yield r.getTemporaryDataParameter("token_request_config");return e&&"string"==typeof e&&(m=JSON.parse(e)),G(s,Z,b,m)}return c.getAuthorizationURL(e).then((e=>ry(void 0,void 0,void 0,(function*(){if(t.storage===Qy.BrowserMemory&&t.enablePKCE){const e=fy.extractPKCEKeyFromStateParam(b);My.setPKCE(e,yield c.getPKCECode(b))}return o&&r.setTemporaryDataParameter("token_request_config",JSON.stringify(o)),location.href=e,yield My.waitTillPageRedirect(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""})}))))}var h})),signOut:()=>ry(void 0,void 0,void 0,(function*(){return(yield c.isAuthenticated())&&!u?location.href=yield c.getSignOutURL():location.href=My.getSignOutURL(t.clientID,e),a.clearRefreshTokenTimeout(),yield r.removeOIDCProviderMetaData(),yield r.removeTemporaryData(),yield r.removeSessionData(),yield r.removeSessionStatus(),yield My.waitTillPageRedirect(),!0})),trySignInSilently:(e,t)=>ry(void 0,void 0,void 0,(function*(){return yield s.trySignInSilently(y,G,d,e,t)})),updateConfig:e=>ry(void 0,void 0,void 0,(function*(){const t=yield r.getConfigData(),i=!(t&&t.endpoints&&t.endpoints.checkSessionIframe&&e&&e.endpoints&&e.endpoints.checkSessionIframe&&t.endpoints.checkSessionIframe===e.endpoints.checkSessionIframe),n=Object.assign(Object.assign({},t),e);yield c.updateConfig(n),n.enableOIDCSessionManagement&&i&&(d.reset(),p())}))}})),aS=(e,t,i,n)=>ry(void 0,void 0,void 0,(function*(){var l;let o;const c=null!==(l=null==t?void 0:t.requestTimeout)&&void 0!==l?l:6e4;let a=!0,r=!1;const d=(e=>{switch(e){case Qy.LocalStorage:return new $C;case Qy.SessionStorage:return new tR;case Qy.BrowserMemory:return new eR;default:return new tR}})(t.storage),s=new oS,u=new Uy;yield u.initialize(t,d,s,e);const Z=new Dy(u),h=yield Oy((()=>ry(void 0,void 0,void 0,(function*(){const i={type:"sign-out"};try{return yield p(i)}catch(i){return My.getSignOutURL(t.clientID,e)}}))),t.storage,(e=>I(e))),b=n(u,Z),m=new i,p=e=>{const t=new MessageChannel;return m.postMessage(e,[t.port2]),new Promise(((e,i)=>{const n=setTimeout((()=>{i(new vy("SPA-WEB_WORKER_CLIENT-COM-TO01","Operation timed out.","No response was received from the web worker for "+c/1e3+" since dispatching the request"))}),c);return t.port1.onmessage=l=>{let{data:o}=l;if(clearTimeout(n),t.port1.close(),t.port2.close(),null==o?void 0:o.success){const t=(null==o?void 0:o.data)?JSON.parse(null==o?void 0:o.data):null;(null==o?void 0:o.blob)&&(t.data=null==o?void 0:o.blob),e(t)}else i(o.error?JSON.parse(o.error):null)}}))},I=e=>p({data:e,type:"set_session_state"}),g=()=>p({type:"start_auto_refresh_token"}),G=()=>ry(void 0,void 0,void 0,(function*(){const e=yield R(),t=yield S();b.initializeSessionManger(t,e,(()=>ry(void 0,void 0,void 0,(function*(){return(yield v()).sessionState}))),(e=>ry(void 0,void 0,void 0,(function*(){return(yield X(e)).authorizationURL}))),h)})),y=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return ry(void 0,void 0,void 0,(function*(){var t;const i=yield S(),n={data:Object.assign({prompt:"none",state:"sign-in-silently"},e),type:"get_auth_url"},l=yield p(n),o=fy.extractPKCEKeyFromStateParam(null!==(t=new URL(l.authorizationURL).searchParams.get(Cy))&&void 0!==t?t:"");l.pkce&&i.enablePKCE&&My.setPKCE(o,l.pkce);const c=l.authorizationURL,a=new URL(c);a.searchParams.set("response_mode","query");return a.toString()}))},X=e=>ry(void 0,void 0,void 0,(function*(){const t=yield S();return p({data:e,type:"get_auth_url"}).then((e=>ry(void 0,void 0,void 0,(function*(){var i;if(e.pkce&&t.enablePKCE){const t=fy.extractPKCEKeyFromStateParam(null!==(i=new URL(e.authorizationURL).searchParams.get(Cy))&&void 0!==i?i:"");My.setPKCE(t,e.pkce)}return Promise.resolve(e)}))))})),V=(t,i,n,l)=>ry(void 0,void 0,void 0,(function*(){const o=yield S(),c=fy.extractPKCEKeyFromStateParam(n),a={data:{code:t,pkce:o.enablePKCE?My.getPKCE(c):void 0,sessionState:i,state:n,tokenRequestConfig:l},type:"request_get_token"};return o.enablePKCE&&My.removePKCE(c),p(a).then((t=>p({type:"get_sign_out_url"}).then((i=>(My.setSignOutURL(i,o.clientID,e),o.enableOIDCSessionManagement&&G(),g(),Promise.resolve(t)))).catch((e=>Promise.reject(e))))).catch((e=>Promise.reject(e)))})),W=()=>ry(void 0,void 0,void 0,(function*(){return yield h.receivePromptNoneResponse((e=>ry(void 0,void 0,void 0,(function*(){return I(e)}))))})),C=()=>ry(void 0,void 0,void 0,(function*(){if(yield f())return yield g(),t.enableOIDCSessionManagement&&G(),v()})),R=()=>p({type:"get-oidc-service-endpoints"}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),S=()=>p({type:"get_config_data"}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),v=()=>p({type:"get-basic-user-info"}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),f=()=>p({type:"is_authenticated"}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e)));return{disableHttpHandler:()=>p({type:"disable_http_handler"}).then((()=>(a=!1,Promise.resolve(!0)))).catch((e=>Promise.reject(e))),enableHttpHandler:()=>p({type:"enable_http_handler"}).then((()=>(a=!0,Promise.resolve(!0)))).catch((e=>Promise.reject(e))),getBasicUserInfo:v,getConfigData:S,getCryptoHelper:()=>p({type:"get-crypto-helper"}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),getDecodedIDPIDToken:()=>p({type:"get-decoded-idp-id-token"}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),getDecodedIDToken:()=>p({type:"get-decoded-id-token"}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),getIDToken:()=>p({type:"get_id_token"}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),getOIDCServiceEndpoints:R,httpRequest:e=>{(null==e?void 0:e.data)&&(null==e?void 0:e.data)instanceof FormData&&(e.data=Object.assign(Object.assign({},Object.fromEntries(null==e?void 0:e.data.entries())),{formData:!0}));return p({data:e,type:"http-request"}).then((e=>Promise.resolve(e))).catch((e=>ry(void 0,void 0,void 0,(function*(){return a&&("function"==typeof o.requestErrorCallback&&(yield o.requestErrorCallback(e)),"function"==typeof o.requestFinishCallback&&o.requestFinishCallback()),Promise.reject(e)}))))},httpRequestAll:e=>p({data:e,type:"http-request-all"}).then((e=>Promise.resolve(e))).catch((e=>ry(void 0,void 0,void 0,(function*(){return a&&("function"==typeof o.requestErrorCallback&&(yield o.requestErrorCallback(e)),"function"==typeof o.requestFinishCallback&&o.requestFinishCallback()),Promise.reject(e)})))),initialize:()=>{o||(o={requestErrorCallback:()=>Promise.resolve(),requestFinishCallback:()=>null,requestStartCallback:()=>null,requestSuccessCallback:()=>null}),m.onmessage=e=>{let{data:t}=e;switch(t.type){case"request-finish":(null==o?void 0:o.requestFinishCallback)&&(null==o||o.requestFinishCallback());break;case"request-start":(null==o?void 0:o.requestStartCallback)&&(null==o||o.requestStartCallback());break;case"request-success":(null==o?void 0:o.requestSuccessCallback)&&(null==o||o.requestSuccessCallback(t.data?JSON.parse(t.data):null))}};return p({data:t,type:"init"}).then((()=>Promise.resolve(!0))).catch((e=>Promise.reject(e)))},isAuthenticated:f,refreshAccessToken:()=>p({type:"refresh_access-token"}),requestCustomGrant:e=>p({data:e,type:"request-custom-grant"}).then((t=>(e.preventSignOutURLUpdate&&(r=!0),Promise.resolve(t)))).catch((e=>Promise.reject(e))),revokeAccessToken:()=>p({type:"revoke-access-token"}).then((e=>(h.reset(),Promise.resolve(e)))).catch((e=>Promise.reject(e))),setHttpRequestErrorCallback:e=>{e&&"function"==typeof e&&(o.requestErrorCallback=e)},setHttpRequestFinishCallback:e=>{e&&"function"==typeof e&&(o.requestFinishCallback=e)},setHttpRequestStartCallback:e=>{e&&"function"==typeof e&&(o.requestStartCallback=e)},setHttpRequestSuccessCallback:e=>{e&&"function"==typeof e&&(o.requestSuccessCallback=e)},signIn:(e,i,n,l,o)=>ry(void 0,void 0,void 0,(function*(){var c,a,r;const d=yield b.handleSignIn(W,G,C);if(d)return d;{let d,s,u;return(null==t?void 0:t.responseMode)===cy.formPost&&i?(d=i,s=null!=n?n:"",u=null!=l?l:""):(d=null!==(c=new URL(window.location.href).searchParams.get(yy))&&void 0!==c?c:"",s=null!==(a=new URL(window.location.href).searchParams.get(Xy))&&void 0!==a?a:"",u=null!==(r=new URL(window.location.href).searchParams.get(Cy))&&void 0!==r?r:"",My.removeAuthorizationCode()),d&&u?V(d,s,u,o):X(e).then((e=>ry(void 0,void 0,void 0,(function*(){return location.href=e.authorizationURL,yield My.waitTillPageRedirect(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""})})))).catch((e=>Promise.reject(e)))}})),signOut:()=>new Promise(((i,n)=>{if(!r){return p({type:"sign-out"}).then((e=>ry(void 0,void 0,void 0,(function*(){return window.location.href=e,yield My.waitTillPageRedirect(),i(!0)})))).catch((e=>n(e)))}window.location.href=My.getSignOutURL(t.clientID,e),My.waitTillPageRedirect().then((()=>Promise.resolve(!0)))})),trySignInSilently:(e,t)=>ry(void 0,void 0,void 0,(function*(){return yield b.trySignInSilently(y,V,h,e,t)})),updateConfig:e=>ry(void 0,void 0,void 0,(function*(){const t=yield S(),i=!(t&&t.endpoints&&t.endpoints.checkSessionIframe&&e&&e.endpoints&&e.endpoints.checkSessionIframe&&t.endpoints.checkSessionIframe===e.endpoints.checkSessionIframe),n=Object.assign(Object.assign({},t),e),l={data:n,type:"update_config"};yield p(l),n.enableOIDCSessionManagement&&i&&(h.reset(),G())}))}})),rS={autoLogoutOnTokenRefreshError:!0,checkSessionInterval:3,clientHost:origin,enableOIDCSessionManagement:!1,periodicTokenRefresh:!1,sessionRefreshInterval:300,storage:Qy.SessionStorage};class dS{constructor(e){this._authHelper=Ey,this._worker=wy,this._initialized=!1,this._startedInitialize=!1,this._onSignInCallback=()=>null,this._onSignOutCallback=()=>null,this._onSignOutFailedCallback=()=>null,this._onEndUserSession=()=>null,this._onInitialize=()=>null,this._onCustomGrant=new Map,this._instanceID=e}instantiateAuthHelper(e){this._authHelper=e||Ey}instantiateWorker(e){this._worker=e||wy}_isInitialized(){return ry(this,void 0,void 0,(function*(){if(!this._startedInitialize)return!1;let e=0;for(;!this._initialized;)1e4===e&&console.warn("It is taking longer than usual for the object to be initialized"),yield new Promise((e=>setTimeout(e,1))),e++;return!0}))}_validateMethod(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return ry(this,void 0,void 0,(function*(){return(yield this._isInitialized())?!(e&&!(yield this.isAuthenticated()))||Promise.reject(new vy("SPA-AUTH_CLIENT-VM-IV02","The user is not authenticated.","The user must be authenticated first.")):Promise.reject(new vy("SPA-AUTH_CLIENT-VM-NF01","The SDK is not initialized.","The SDK must be initialized first."))}))}
433
433
  /**
434
434
  * This method returns the instance of the singleton class.
435
435
  * If an ID is provided, it will return the instance with the given ID.
@@ -447,7 +447,7 @@ constructor(){}
447
447
  * @memberof AsgardeoSPAClient
448
448
  *
449
449
  * @preserve
450
- */static getInstance(e){var t,i;return e&&(null===(t=this._instances)||void 0===t?void 0:t.get(e))?this._instances.get(e):!e&&(null===(i=this._instances)||void 0===i?void 0:i.get(0))?this._instances.get(0):e?(this._instances.set(e,new bR(e)),this._instances.get(e)):(this._instances.set(0,new bR(0)),this._instances.get(0))}
450
+ */static getInstance(e){var t,i;return e&&(null===(t=this._instances)||void 0===t?void 0:t.get(e))?this._instances.get(e):!e&&(null===(i=this._instances)||void 0===i?void 0:i.get(0))?this._instances.get(0):e?(this._instances.set(e,new dS(e)),this._instances.get(e)):(this._instances.set(0,new dS(0)),this._instances.get(0))}
451
451
  /**
452
452
  * This method initializes the `AsgardeoSPAClient` instance.
453
453
  *
@@ -469,7 +469,7 @@ constructor(){}
469
469
  * @memberof AsgardeoSPAClient
470
470
  *
471
471
  * @preserve
472
- */initialize(e,t,i){var n,l,o,c;return ry(this,void 0,void 0,(function*(){this._storage=null!==(n=e.storage)&&void 0!==n?n:jy.SessionStorage,this._initialized=!1,this._startedInitialize=!0,t&&this.instantiateAuthHelper(t),i&&this.instantiateWorker(i);const a=yield null===(l=this._client)||void 0===l?void 0:l.getConfigData();if(this._storage!==jy.WebWorker){const t=e,i=Object.assign({},hR),n=Object.assign(Object.assign({},i),t);return this._client&&(!this._client||a&&0!==(null===(o=Object.keys(a))||void 0===o?void 0:o.length))||(this._client=yield uR(this._instanceID,n,((e,t)=>new this._authHelper(e,t)))),this._initialized=!0,this._onInitialize&&this._onInitialize(!0),n.autoLogoutOnTokenRefreshError?(window.addEventListener("message",(e=>{var t;"refresh-access-token-error"===(null===(t=null==e?void 0:e.data)||void 0===t?void 0:t.type)&&this.signOut()})),Promise.resolve(!0)):Promise.resolve(!0)}if(!this._client||this._client&&(!a||0===(null===(c=Object.keys(a))||void 0===c?void 0:c.length))){const t=e;return this._client=yield ZR(this._instanceID,Object.assign(Object.assign({},hR),t),this._worker,((e,t)=>new this._authHelper(e,t))),this._client.initialize().then((()=>(this._onInitialize&&this._onInitialize(!0),this._initialized=!0,Promise.resolve(!0)))).catch((e=>Promise.reject(e)))}return Promise.resolve(!0)}))}
472
+ */initialize(e,t,i){var n,l,o,c;return ry(this,void 0,void 0,(function*(){this._storage=null!==(n=e.storage)&&void 0!==n?n:Qy.SessionStorage,this._initialized=!1,this._startedInitialize=!0,t&&this.instantiateAuthHelper(t),i&&this.instantiateWorker(i);const a=yield null===(l=this._client)||void 0===l?void 0:l.getConfigData();if(this._storage!==Qy.WebWorker){const t=e,i=Object.assign({},rS),n=Object.assign(Object.assign({},i),t);return this._client&&(!this._client||a&&0!==(null===(o=Object.keys(a))||void 0===o?void 0:o.length))||(this._client=yield cS(this._instanceID,n,((e,t)=>new this._authHelper(e,t)))),this._initialized=!0,this._onInitialize&&this._onInitialize(!0),n.autoLogoutOnTokenRefreshError?(window.addEventListener("message",(e=>{var t;"refresh-access-token-error"===(null===(t=null==e?void 0:e.data)||void 0===t?void 0:t.type)&&this.signOut()})),Promise.resolve(!0)):Promise.resolve(!0)}if(!this._client||this._client&&(!a||0===(null===(c=Object.keys(a))||void 0===c?void 0:c.length))){const t=e;return this._client=yield aS(this._instanceID,Object.assign(Object.assign({},rS),t),this._worker,((e,t)=>new this._authHelper(e,t))),this._client.initialize().then((()=>(this._onInitialize&&this._onInitialize(!0),this._initialized=!0,Promise.resolve(!0)))).catch((e=>Promise.reject(e)))}return Promise.resolve(!0)}))}
473
473
  /**
474
474
  * This method returns a Promise that resolves with the basic user information obtained from the ID token.
475
475
  *
@@ -660,7 +660,7 @@ constructor(){}
660
660
  * @memberof AsgardeoSPAClient
661
661
  *
662
662
  * @preserve
663
- */requestCustomGrant(e){var t,i;return ry(this,void 0,void 0,(function*(){if(e.signInRequired,yield this._validateMethod(),!e.id)return Promise.reject(new Sy("SPA-AUTH_CLIENT-RCG-NF01","The custom grant request id not found.","The id attribute of the custom grant config object passed as an argument should have a value."));const n=yield null===(t=this._client)||void 0===t?void 0:t.requestCustomGrant(e),l=this._onCustomGrant.get(e.id);return l&&l(null===(i=this._onCustomGrant)||void 0===i?void 0:i.get(e.id)),n}))}
663
+ */requestCustomGrant(e){var t,i;return ry(this,void 0,void 0,(function*(){if(e.signInRequired,yield this._validateMethod(),!e.id)return Promise.reject(new vy("SPA-AUTH_CLIENT-RCG-NF01","The custom grant request id not found.","The id attribute of the custom grant config object passed as an argument should have a value."));const n=yield null===(t=this._client)||void 0===t?void 0:t.requestCustomGrant(e),l=this._onCustomGrant.get(e.id);return l&&l(null===(i=this._onCustomGrant)||void 0===i?void 0:i.get(e.id)),n}))}
664
664
  /**
665
665
  * This method ends a user session. The access token is revoked and the session information is destroyed.
666
666
  *
@@ -709,7 +709,7 @@ constructor(){}
709
709
  * @memberof AsgardeoSPAClient
710
710
  *
711
711
  * @preserve
712
- */getHttpClient(){if(this._client){if(this._storage!==jy.WebWorker){return this._client.getHttpClient()}throw new Sy("SPA-AUTH_CLIENT-GHC-IV01","Http client cannot be returned.","The http client cannot be returned when the storage type is set to webWorker.")}throw new Sy("SPA-AUTH_CLIENT-GHC-NF02","The SDK is not initialized.","The SDK has not been initialized yet. Initialize the SDK using the initialize method before calling this method.")}
712
+ */getHttpClient(){if(this._client){if(this._storage!==Qy.WebWorker){return this._client.getHttpClient()}throw new vy("SPA-AUTH_CLIENT-GHC-IV01","Http client cannot be returned.","The http client cannot be returned when the storage type is set to webWorker.")}throw new vy("SPA-AUTH_CLIENT-GHC-NF02","The SDK is not initialized.","The SDK has not been initialized yet. Initialize the SDK using the initialize method before calling this method.")}
713
713
  /**
714
714
  * This method decodes the payload of the id token and returns it.
715
715
  *
@@ -787,7 +787,7 @@ constructor(){}
787
787
  * @memberof AsgardeoSPAClient
788
788
  *
789
789
  * @preserve
790
- */getAccessToken(){return ry(this,void 0,void 0,(function*(){if(yield this._validateMethod(),this._storage&&[(jy.WebWorker,jy.BrowserMemory)].includes(this._storage))return Promise.reject(new Sy("SPA-AUTH_CLIENT-GAT-IV01","The access token cannot be returned.","The access token cannot be returned when the storage type is set to webWorker or browserMemory."));return this._client.getAccessToken()}))}
790
+ */getAccessToken(){return ry(this,void 0,void 0,(function*(){if(yield this._validateMethod(),this._storage&&[(Qy.WebWorker,Qy.BrowserMemory)].includes(this._storage))return Promise.reject(new vy("SPA-AUTH_CLIENT-GAT-IV01","The access token cannot be returned.","The access token cannot be returned when the storage type is set to webWorker or browserMemory."));return this._client.getAccessToken()}))}
791
791
  /**
792
792
  * This method return a Promise that resolves with the idp access token.
793
793
  *
@@ -809,7 +809,7 @@ constructor(){}
809
809
  * @memberof AsgardeoSPAClient
810
810
  *
811
811
  * @preserve
812
- */getIDPAccessToken(){return ry(this,void 0,void 0,(function*(){if(yield this._validateMethod(),this._storage&&[(jy.WebWorker,jy.BrowserMemory)].includes(this._storage))return Promise.reject(new Sy("SPA-AUTH_CLIENT-GIAT-IV01","The access token cannot be returned.","The access token cannot be returned when the storage type is set to webWorker or browserMemory."));return this._client.getAccessToken()}))}
812
+ */getIDPAccessToken(){return ry(this,void 0,void 0,(function*(){if(yield this._validateMethod(),this._storage&&[(Qy.WebWorker,Qy.BrowserMemory)].includes(this._storage))return Promise.reject(new vy("SPA-AUTH_CLIENT-GIAT-IV01","The access token cannot be returned.","The access token cannot be returned when the storage type is set to webWorker or browserMemory."));return this._client.getAccessToken()}))}
813
813
  /**
814
814
  * This method return a Promise that resolves with the data layer object.
815
815
  *
@@ -831,7 +831,7 @@ constructor(){}
831
831
  * @memberof AsgardeoSPAClient
832
832
  *
833
833
  * @preserve
834
- */getDataLayer(){return ry(this,void 0,void 0,(function*(){if(yield this._validateMethod(),this._storage&&[(jy.WebWorker,jy.BrowserMemory)].includes(this._storage))return Promise.reject(new Sy("SPA-AUTH_CLIENT-GDL-IV01","The data layer cannot be returned.","The data layer cannot be returned when the storage type is set to webWorker or browserMemory."));return this._client.getDataLayer()}))}
834
+ */getDataLayer(){return ry(this,void 0,void 0,(function*(){if(yield this._validateMethod(),this._storage&&[(Qy.WebWorker,Qy.BrowserMemory)].includes(this._storage))return Promise.reject(new vy("SPA-AUTH_CLIENT-GDL-IV01","The data layer cannot be returned.","The data layer cannot be returned when the storage type is set to webWorker or browserMemory."));return this._client.getDataLayer()}))}
835
835
  /**
836
836
  * This method return a Promise that resolves with the config data stored in the storage.
837
837
  *
@@ -890,7 +890,7 @@ constructor(){}
890
890
  * @memberof AsgardeoSPAClient
891
891
  *
892
892
  * @preserve
893
- */isSessionActive(){return ry(this,void 0,void 0,(function*(){if(yield this._isInitialized(),this._storage&&[(jy.WebWorker,jy.BrowserMemory)].includes(this._storage))return Promise.reject(new Sy("SPA-AUTH_CLIENT-ISA-IV01","The active session cannot be returned.","The active session cannot be returned when the storage type is set to webWorker or browserMemory."));const e=this._client;return null==e?void 0:e.isSessionActive()}))}on(e,t,i){var n,l,o,c;return ry(this,void 0,void 0,(function*(){if(yield this._isInitialized(),!t||"function"!=typeof t)throw new Sy("SPA-AUTH_CLIENT-ON-IV02","Invalid callback function.","The provided callback function is invalid.");switch(e){case zy.SignIn:this._onSignInCallback=t;break;case zy.SignOut:this._onSignOutCallback=t,(yield My.isSignOutSuccessful())&&this._onSignOutCallback();break;case zy.RevokeAccessToken:this._onEndUserSession=t;break;case zy.Initialize:this._onInitialize=t;break;case zy.HttpRequestError:null===(n=this._client)||void 0===n||n.setHttpRequestErrorCallback(t);break;case zy.HttpRequestFinish:null===(l=this._client)||void 0===l||l.setHttpRequestFinishCallback(t);break;case zy.HttpRequestStart:null===(o=this._client)||void 0===o||o.setHttpRequestStartCallback(t);break;case zy.HttpRequestSuccess:null===(c=this._client)||void 0===c||c.setHttpRequestSuccessCallback(t);break;case zy.CustomGrant:i&&this._onCustomGrant.set(i,t);break;case zy.SignOutFailed:{this._onSignOutFailedCallback=t;const e=My.didSignOutFail();e&&this._onSignOutFailedCallback(e);break}default:throw new Sy("SPA-AUTH_CLIENT-ON-IV01","Invalid hook.","The provided hook is invalid.")}}))}
893
+ */isSessionActive(){return ry(this,void 0,void 0,(function*(){if(yield this._isInitialized(),this._storage&&[(Qy.WebWorker,Qy.BrowserMemory)].includes(this._storage))return Promise.reject(new vy("SPA-AUTH_CLIENT-ISA-IV01","The active session cannot be returned.","The active session cannot be returned when the storage type is set to webWorker or browserMemory."));const e=this._client;return null==e?void 0:e.isSessionActive()}))}on(e,t,i){var n,l,o,c;return ry(this,void 0,void 0,(function*(){if(yield this._isInitialized(),!t||"function"!=typeof t)throw new vy("SPA-AUTH_CLIENT-ON-IV02","Invalid callback function.","The provided callback function is invalid.");switch(e){case zy.SignIn:this._onSignInCallback=t;break;case zy.SignOut:this._onSignOutCallback=t,(yield My.isSignOutSuccessful())&&this._onSignOutCallback();break;case zy.RevokeAccessToken:this._onEndUserSession=t;break;case zy.Initialize:this._onInitialize=t;break;case zy.HttpRequestError:null===(n=this._client)||void 0===n||n.setHttpRequestErrorCallback(t);break;case zy.HttpRequestFinish:null===(l=this._client)||void 0===l||l.setHttpRequestFinishCallback(t);break;case zy.HttpRequestStart:null===(o=this._client)||void 0===o||o.setHttpRequestStartCallback(t);break;case zy.HttpRequestSuccess:null===(c=this._client)||void 0===c||c.setHttpRequestSuccessCallback(t);break;case zy.CustomGrant:i&&this._onCustomGrant.set(i,t);break;case zy.SignOutFailed:{this._onSignOutFailedCallback=t;const e=My.didSignOutFail();e&&this._onSignOutFailedCallback(e);break}default:throw new vy("SPA-AUTH_CLIENT-ON-IV01","Invalid hook.","The provided hook is invalid.")}}))}
894
894
  /**
895
895
  * This method enables callback functions attached to the http client.
896
896
  *
@@ -942,5 +942,5 @@ constructor(){}
942
942
  * @memberof AsgardeoAuthClient
943
943
  *
944
944
  * @preserve
945
- */updateConfig(e){return ry(this,void 0,void 0,(function*(){if(yield this._isInitialized(),this._storage===jy.WebWorker){const t=this._client;yield t.updateConfig(e)}else{const t=this._client;yield t.updateConfig(e)}}))}}bR._instances=new Map;class mR extends Worker{constructor(){super(...arguments),this.onmessage=()=>null}}const IR=e=>{const t=self;let i;t.onmessage=t=>{let{data:c,ports:a}=t;return ry(void 0,void 0,void 0,(function*(){var t,r,d,s,u,Z;const h=a[0];if("init"===c.type||i)switch(c.type){case"init":try{const t=Object.assign({},c.data);i=yield((e,t)=>ry(void 0,void 0,void 0,(function*(){const i=new cW,n=new sR,l=new ky;yield l.initialize(e,i,n);const o=new Dy(l),c=t(l,o),a=l.getDataLayer(),r=lW.getInstance();return(null==r?void 0:r.init)&&(yield r.init(!0,(e=>ry(void 0,void 0,void 0,(function*(){yield c.attachTokenToRequestConfig(e)}))))),{disableHttpHandler:()=>{c.disableHttpHandler(r)},enableHttpHandler:()=>{c.enableHttpHandler(r)},getAccessToken:()=>c.getAccessToken(),getAuthorizationURL:e=>ry(void 0,void 0,void 0,(function*(){return l.getAuthorizationURL(e).then((e=>ry(void 0,void 0,void 0,(function*(){var t;const i=null!==(t=new URL(e).searchParams.get(Cy))&&void 0!==t?t:"",n=yield l.getPKCECode(i);return{authorizationURL:e,pkce:n}})))).catch((e=>Promise.reject(e)))})),getBasicUserInfo:()=>ry(void 0,void 0,void 0,(function*(){return c.getBasicUserInfo()})),getConfigData:()=>ry(void 0,void 0,void 0,(function*(){return a.getConfigData()})),getCryptoHelper:()=>ry(void 0,void 0,void 0,(function*(){return c.getCryptoHelper()})),getDecodedIDPIDToken:()=>ry(void 0,void 0,void 0,(function*(){return c.getDecodedIDPIDToken()})),getDecodedIDToken:()=>ry(void 0,void 0,void 0,(function*(){return c.getDecodedIDToken()})),getIDToken:()=>ry(void 0,void 0,void 0,(function*(){return c.getIDToken()})),getOIDCServiceEndpoints:()=>ry(void 0,void 0,void 0,(function*(){return c.getOIDCServiceEndpoints()})),getSignOutURL:()=>ry(void 0,void 0,void 0,(function*(){return yield l.getSignOutURL()})),httpRequest:e=>ry(void 0,void 0,void 0,(function*(){return yield c.httpRequest(r,e)})),httpRequestAll:e=>ry(void 0,void 0,void 0,(function*(){return yield c.httpRequestAll(e,r)})),isAuthenticated:()=>c.isAuthenticated(),refreshAccessToken:()=>ry(void 0,void 0,void 0,(function*(){try{return yield c.refreshAccessToken()}catch(e){return Promise.reject(e)}})),requestAccessToken:(e,t,i,n)=>ry(void 0,void 0,void 0,(function*(){return yield c.requestAccessToken(e,t,void 0,i,n)})),requestCustomGrant:e=>ry(void 0,void 0,void 0,(function*(){return yield c.requestCustomGrant(e)})),revokeAccessToken:()=>ry(void 0,void 0,void 0,(function*(){const e=yield o.getRefreshTimeoutTimer();return l.revokeAccessToken().then((()=>(o.clearRefreshTokenTimeout(e),Promise.resolve(!0)))).catch((e=>Promise.reject(e)))})),setHttpRequestFinishCallback:e=>{(null==r?void 0:r.setHttpRequestFinishCallback)&&r.setHttpRequestFinishCallback(e)},setHttpRequestStartCallback:e=>{(null==r?void 0:r.setHttpRequestStartCallback)&&r.setHttpRequestStartCallback(e)},setHttpRequestSuccessCallback:e=>{(null==r?void 0:r.setHttpRequestSuccessCallback)&&r.setHttpRequestSuccessCallback(e)},setSessionState:e=>ry(void 0,void 0,void 0,(function*(){yield a.setSessionDataParameter(Xy,e)})),signOut:()=>ry(void 0,void 0,void 0,(function*(){return o.clearRefreshTokenTimeout(),yield l.getSignOutURL()})),startAutoRefreshToken:()=>ry(void 0,void 0,void 0,(function*(){o.clearRefreshTokenTimeout(),o.refreshAccessTokenAutomatically(c)})),updateConfig:e=>ry(void 0,void 0,void 0,(function*(){yield l.updateConfig(e)}))}})))(t,e),i.setHttpRequestFinishCallback(o),i.setHttpRequestStartCallback(n),i.setHttpRequestSuccessCallback(l),h.postMessage(Qy.generateSuccessMessage())}catch(e){h.postMessage(Qy.generateFailureMessage(e))}break;case"get_auth_url":i.getAuthorizationURL(null==c?void 0:c.data).then((e=>{h.postMessage(Qy.generateSuccessMessage(e))})).catch((e=>{h.postMessage(Qy.generateFailureMessage(e))}));break;case"request_get_token":i.requestAccessToken(null===(t=null==c?void 0:c.data)||void 0===t?void 0:t.code,null===(r=null==c?void 0:c.data)||void 0===r?void 0:r.sessionState,null===(d=null==c?void 0:c.data)||void 0===d?void 0:d.pkce,null===(s=null==c?void 0:c.data)||void 0===s?void 0:s.state).then((e=>{h.postMessage(Qy.generateSuccessMessage(e))})).catch((e=>{h.postMessage(Qy.generateFailureMessage(e))}));break;case"http-request":{const e=c.data,t=null==e?void 0:e.data;if(!0===(null===(Z=null===(u=c.data)||void 0===u?void 0:u.data)||void 0===Z?void 0:Z.formData)){const i=new FormData;for(const e in t)"formData"!==e&&i.append(e,t[e]);e.data=i}i.httpRequest(e).then((e=>{h.postMessage(Qy.generateSuccessMessage(e))})).catch((e=>{h.postMessage(Qy.generateFailureMessage(e))}));break}case"http-request-all":i.httpRequestAll(c.data).then((e=>{h.postMessage(Qy.generateSuccessMessage(e))})).catch((e=>{h.postMessage(Qy.generateFailureMessage(e))}));break;case"sign-out":try{h.postMessage(Qy.generateSuccessMessage(yield i.signOut()))}catch(e){h.postMessage(Qy.generateFailureMessage(e))}break;case"request-custom-grant":i.requestCustomGrant(c.data).then((e=>{h.postMessage(Qy.generateSuccessMessage(e))})).catch((e=>{h.postMessage(Qy.generateFailureMessage(e))}));break;case"revoke-access-token":i.revokeAccessToken().then((e=>{h.postMessage(Qy.generateSuccessMessage(e))})).catch((e=>{h.postMessage(Qy.generateFailureMessage(e))}));break;case"get-oidc-service-endpoints":try{h.postMessage(Qy.generateSuccessMessage(yield i.getOIDCServiceEndpoints()))}catch(e){h.postMessage(Qy.generateFailureMessage(e))}break;case"get-basic-user-info":try{h.postMessage(Qy.generateSuccessMessage(yield i.getBasicUserInfo()))}catch(e){h.postMessage(Qy.generateFailureMessage(e))}break;case"get-decoded-id-token":try{h.postMessage(Qy.generateSuccessMessage(yield i.getDecodedIDToken()))}catch(e){h.postMessage(Qy.generateFailureMessage(e))}break;case"get-crypto-helper":try{h.postMessage(Qy.generateSuccessMessage(yield i.getCryptoHelper()))}catch(e){h.postMessage(Qy.generateFailureMessage(e))}break;case"get_id_token":try{h.postMessage(Qy.generateSuccessMessage(yield i.getIDToken()))}catch(e){h.postMessage(Qy.generateFailureMessage(e))}break;case"enable_http_handler":i.enableHttpHandler(),h.postMessage(Qy.generateSuccessMessage());break;case"disable_http_handler":i.disableHttpHandler(),h.postMessage(Qy.generateSuccessMessage());break;case"is_authenticated":try{h.postMessage(Qy.generateSuccessMessage(yield i.isAuthenticated()))}catch(e){h.postMessage(Qy.generateFailureMessage(e))}break;case"get_sign_out_url":try{h.postMessage(Qy.generateSuccessMessage(yield i.getSignOutURL()))}catch(e){h.postMessage(Qy.generateFailureMessage(e))}break;case"refresh_access-token":try{h.postMessage(Qy.generateSuccessMessage(yield i.refreshAccessToken()))}catch(e){h.postMessage(Qy.generateFailureMessage(e))}break;case"start_auto_refresh_token":try{h.postMessage(Qy.generateSuccessMessage(i.startAutoRefreshToken()))}catch(e){h.postMessage(Qy.generateFailureMessage(e))}break;case"set_session_state":try{h.postMessage(Qy.generateSuccessMessage(yield i.setSessionState(null==c?void 0:c.data)))}catch(e){h.postMessage(Qy.generateFailureMessage(e))}break;case"update_config":try{h.postMessage(Qy.generateSuccessMessage(yield i.updateConfig(null==c?void 0:c.data)))}catch(e){h.postMessage(Qy.generateFailureMessage(e))}break;case"get_config_data":try{h.postMessage(Qy.generateSuccessMessage(yield i.getConfigData()))}catch(e){h.postMessage(Qy.generateFailureMessage(e))}break;default:null==h||h.postMessage(Qy.generateFailureMessage(new Sy("SPA-CLIENT_WORKER-ONMSG-IV02","The message type is invalid.","The message type provided, ".concat(c.type,", is invalid."))))}else h.postMessage(Qy.generateFailureMessage(new Sy("SPA-CLIENT_WORKER-ONMSG-NF01","The web worker has not been initialized yet.","The initialize method needs to be called before the specified operation can be carried out.")))}))};const n=()=>{t.postMessage({type:"request-start"})},l=e=>{t.postMessage({data:JSON.stringify(null!=e?e:""),type:"request-success"})},o=()=>{t.postMessage({type:"request-finish"})}};export{Jy as ASGARDEO_SESSION_ACTIVE,yy as AUTHORIZATION_CODE,ky as AsgardeoAuthClient,Sy as AsgardeoAuthException,bR as AsgardeoSPAClient,Ey as AuthenticationHelper,fy as AuthenticationUtils,hy as CLIENT_ID_TAG,by as CLIENT_SECRET_TAG,Ky as CryptoHelper,Ly as DataLayer,zy as Hooks,uR as MainThreadClient,Ry as OIDC_SCOPE,py as PKCE_CODE_VERIFIER,gy as PKCE_SEPARATOR,Iy as REFRESH_TOKEN_TIMER,cy as ResponseMode,Zy as SCOPE_TAG,Xy as SESSION_STATE,Wy as SIGN_OUT_SUCCESS_PARAM,Vy as SIGN_OUT_URL,Dy as SPAHelper,My as SPAUtils,Cy as STATE,Gy as SUPPORTED_SIGNATURE_ALGORITHMS,my as Stores,xy as TOKEN_REQUEST_CONFIG_KEY,sy as TOKEN_TAG,uy as USERNAME_TAG,mR as WebWorkerClass,ZR as WebWorkerClient,IR as workerReceiver};
945
+ */updateConfig(e){return ry(this,void 0,void 0,(function*(){if(yield this._isInitialized(),this._storage===Qy.WebWorker){const t=this._client;yield t.updateConfig(e)}else{const t=this._client;yield t.updateConfig(e)}}))}}dS._instances=new Map;class sS extends Worker{constructor(){super(...arguments),this.onmessage=()=>null}}const uS=e=>{const t=self;let i;t.onmessage=t=>{let{data:c,ports:a}=t;return ry(void 0,void 0,void 0,(function*(){var t,r,d,s,u,Z;const h=a[0];if("init"===c.type||i)switch(c.type){case"init":try{const t=Object.assign({},c.data);i=yield((e,t)=>ry(void 0,void 0,void 0,(function*(){const i=new eR,n=new oS,l=new Uy;yield l.initialize(e,i,n);const o=new Dy(l),c=t(l,o),a=l.getDataLayer(),r=qC.getInstance();return(null==r?void 0:r.init)&&(yield r.init(!0,(e=>ry(void 0,void 0,void 0,(function*(){yield c.attachTokenToRequestConfig(e)}))))),{disableHttpHandler:()=>{c.disableHttpHandler(r)},enableHttpHandler:()=>{c.enableHttpHandler(r)},getAccessToken:()=>c.getAccessToken(),getAuthorizationURL:e=>ry(void 0,void 0,void 0,(function*(){return l.getAuthorizationURL(e).then((e=>ry(void 0,void 0,void 0,(function*(){var t;const i=null!==(t=new URL(e).searchParams.get(Cy))&&void 0!==t?t:"",n=yield l.getPKCECode(i);return{authorizationURL:e,pkce:n}})))).catch((e=>Promise.reject(e)))})),getBasicUserInfo:()=>ry(void 0,void 0,void 0,(function*(){return c.getBasicUserInfo()})),getConfigData:()=>ry(void 0,void 0,void 0,(function*(){return a.getConfigData()})),getCryptoHelper:()=>ry(void 0,void 0,void 0,(function*(){return c.getCryptoHelper()})),getDecodedIDPIDToken:()=>ry(void 0,void 0,void 0,(function*(){return c.getDecodedIDPIDToken()})),getDecodedIDToken:()=>ry(void 0,void 0,void 0,(function*(){return c.getDecodedIDToken()})),getIDToken:()=>ry(void 0,void 0,void 0,(function*(){return c.getIDToken()})),getOIDCServiceEndpoints:()=>ry(void 0,void 0,void 0,(function*(){return c.getOIDCServiceEndpoints()})),getSignOutURL:()=>ry(void 0,void 0,void 0,(function*(){return yield l.getSignOutURL()})),httpRequest:e=>ry(void 0,void 0,void 0,(function*(){return yield c.httpRequest(r,e)})),httpRequestAll:e=>ry(void 0,void 0,void 0,(function*(){return yield c.httpRequestAll(e,r)})),isAuthenticated:()=>c.isAuthenticated(),refreshAccessToken:()=>ry(void 0,void 0,void 0,(function*(){try{return yield c.refreshAccessToken()}catch(e){return Promise.reject(e)}})),requestAccessToken:(e,t,i,n)=>ry(void 0,void 0,void 0,(function*(){return yield c.requestAccessToken(e,t,void 0,i,n)})),requestCustomGrant:e=>ry(void 0,void 0,void 0,(function*(){return yield c.requestCustomGrant(e)})),revokeAccessToken:()=>ry(void 0,void 0,void 0,(function*(){const e=yield o.getRefreshTimeoutTimer();return l.revokeAccessToken().then((()=>(o.clearRefreshTokenTimeout(e),Promise.resolve(!0)))).catch((e=>Promise.reject(e)))})),setHttpRequestFinishCallback:e=>{(null==r?void 0:r.setHttpRequestFinishCallback)&&r.setHttpRequestFinishCallback(e)},setHttpRequestStartCallback:e=>{(null==r?void 0:r.setHttpRequestStartCallback)&&r.setHttpRequestStartCallback(e)},setHttpRequestSuccessCallback:e=>{(null==r?void 0:r.setHttpRequestSuccessCallback)&&r.setHttpRequestSuccessCallback(e)},setSessionState:e=>ry(void 0,void 0,void 0,(function*(){yield a.setSessionDataParameter(Xy,e)})),signOut:()=>ry(void 0,void 0,void 0,(function*(){return o.clearRefreshTokenTimeout(),yield l.getSignOutURL()})),startAutoRefreshToken:()=>ry(void 0,void 0,void 0,(function*(){o.clearRefreshTokenTimeout(),o.refreshAccessTokenAutomatically(c)})),updateConfig:e=>ry(void 0,void 0,void 0,(function*(){yield l.updateConfig(e)}))}})))(t,e),i.setHttpRequestFinishCallback(o),i.setHttpRequestStartCallback(n),i.setHttpRequestSuccessCallback(l),h.postMessage(jy.generateSuccessMessage())}catch(e){h.postMessage(jy.generateFailureMessage(e))}break;case"get_auth_url":i.getAuthorizationURL(null==c?void 0:c.data).then((e=>{h.postMessage(jy.generateSuccessMessage(e))})).catch((e=>{h.postMessage(jy.generateFailureMessage(e))}));break;case"request_get_token":i.requestAccessToken(null===(t=null==c?void 0:c.data)||void 0===t?void 0:t.code,null===(r=null==c?void 0:c.data)||void 0===r?void 0:r.sessionState,null===(d=null==c?void 0:c.data)||void 0===d?void 0:d.pkce,null===(s=null==c?void 0:c.data)||void 0===s?void 0:s.state).then((e=>{h.postMessage(jy.generateSuccessMessage(e))})).catch((e=>{h.postMessage(jy.generateFailureMessage(e))}));break;case"http-request":{const e=c.data,t=null==e?void 0:e.data;if(!0===(null===(Z=null===(u=c.data)||void 0===u?void 0:u.data)||void 0===Z?void 0:Z.formData)){const i=new FormData;for(const e in t)"formData"!==e&&i.append(e,t[e]);e.data=i}i.httpRequest(e).then((e=>{h.postMessage(jy.generateSuccessMessage(e))})).catch((e=>{h.postMessage(jy.generateFailureMessage(e))}));break}case"http-request-all":i.httpRequestAll(c.data).then((e=>{h.postMessage(jy.generateSuccessMessage(e))})).catch((e=>{h.postMessage(jy.generateFailureMessage(e))}));break;case"sign-out":try{h.postMessage(jy.generateSuccessMessage(yield i.signOut()))}catch(e){h.postMessage(jy.generateFailureMessage(e))}break;case"request-custom-grant":i.requestCustomGrant(c.data).then((e=>{h.postMessage(jy.generateSuccessMessage(e))})).catch((e=>{h.postMessage(jy.generateFailureMessage(e))}));break;case"revoke-access-token":i.revokeAccessToken().then((e=>{h.postMessage(jy.generateSuccessMessage(e))})).catch((e=>{h.postMessage(jy.generateFailureMessage(e))}));break;case"get-oidc-service-endpoints":try{h.postMessage(jy.generateSuccessMessage(yield i.getOIDCServiceEndpoints()))}catch(e){h.postMessage(jy.generateFailureMessage(e))}break;case"get-basic-user-info":try{h.postMessage(jy.generateSuccessMessage(yield i.getBasicUserInfo()))}catch(e){h.postMessage(jy.generateFailureMessage(e))}break;case"get-decoded-id-token":try{h.postMessage(jy.generateSuccessMessage(yield i.getDecodedIDToken()))}catch(e){h.postMessage(jy.generateFailureMessage(e))}break;case"get-crypto-helper":try{h.postMessage(jy.generateSuccessMessage(yield i.getCryptoHelper()))}catch(e){h.postMessage(jy.generateFailureMessage(e))}break;case"get_id_token":try{h.postMessage(jy.generateSuccessMessage(yield i.getIDToken()))}catch(e){h.postMessage(jy.generateFailureMessage(e))}break;case"enable_http_handler":i.enableHttpHandler(),h.postMessage(jy.generateSuccessMessage());break;case"disable_http_handler":i.disableHttpHandler(),h.postMessage(jy.generateSuccessMessage());break;case"is_authenticated":try{h.postMessage(jy.generateSuccessMessage(yield i.isAuthenticated()))}catch(e){h.postMessage(jy.generateFailureMessage(e))}break;case"get_sign_out_url":try{h.postMessage(jy.generateSuccessMessage(yield i.getSignOutURL()))}catch(e){h.postMessage(jy.generateFailureMessage(e))}break;case"refresh_access-token":try{h.postMessage(jy.generateSuccessMessage(yield i.refreshAccessToken()))}catch(e){h.postMessage(jy.generateFailureMessage(e))}break;case"start_auto_refresh_token":try{h.postMessage(jy.generateSuccessMessage(i.startAutoRefreshToken()))}catch(e){h.postMessage(jy.generateFailureMessage(e))}break;case"set_session_state":try{h.postMessage(jy.generateSuccessMessage(yield i.setSessionState(null==c?void 0:c.data)))}catch(e){h.postMessage(jy.generateFailureMessage(e))}break;case"update_config":try{h.postMessage(jy.generateSuccessMessage(yield i.updateConfig(null==c?void 0:c.data)))}catch(e){h.postMessage(jy.generateFailureMessage(e))}break;case"get_config_data":try{h.postMessage(jy.generateSuccessMessage(yield i.getConfigData()))}catch(e){h.postMessage(jy.generateFailureMessage(e))}break;default:null==h||h.postMessage(jy.generateFailureMessage(new vy("SPA-CLIENT_WORKER-ONMSG-IV02","The message type is invalid.","The message type provided, ".concat(c.type,", is invalid."))))}else h.postMessage(jy.generateFailureMessage(new vy("SPA-CLIENT_WORKER-ONMSG-NF01","The web worker has not been initialized yet.","The initialize method needs to be called before the specified operation can be carried out.")))}))};const n=()=>{t.postMessage({type:"request-start"})},l=e=>{t.postMessage({data:JSON.stringify(null!=e?e:""),type:"request-success"})},o=()=>{t.postMessage({type:"request-finish"})}};var ZS=_C.AxiosError;export{Jy as ASGARDEO_SESSION_ACTIVE,yy as AUTHORIZATION_CODE,Uy as AsgardeoAuthClient,vy as AsgardeoAuthException,dS as AsgardeoSPAClient,Ey as AuthenticationHelper,fy as AuthenticationUtils,hy as CLIENT_ID_TAG,by as CLIENT_SECRET_TAG,Ky as CryptoHelper,Ly as DataLayer,zy as Hooks,ZS as HttpError,cS as MainThreadClient,Ry as OIDC_SCOPE,Iy as PKCE_CODE_VERIFIER,gy as PKCE_SEPARATOR,py as REFRESH_TOKEN_TIMER,cy as ResponseMode,Zy as SCOPE_TAG,Xy as SESSION_STATE,Wy as SIGN_OUT_SUCCESS_PARAM,Vy as SIGN_OUT_URL,Dy as SPAHelper,My as SPAUtils,Cy as STATE,Gy as SUPPORTED_SIGNATURE_ALGORITHMS,Qy as Storage,my as Stores,xy as TOKEN_REQUEST_CONFIG_KEY,sy as TOKEN_TAG,uy as USERNAME_TAG,sS as WebWorkerClass,aS as WebWorkerClient,uS as workerReceiver};
946
946
  //# sourceMappingURL=asgardeo-spa.production.esm.js.map