@asgardeo/auth-spa 3.3.2 → 3.4.0

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.
Files changed (43) hide show
  1. package/README.md +8 -0
  2. package/dist/asgardeo-spa.production.esm.js +45 -16
  3. package/dist/asgardeo-spa.production.esm.js.map +1 -1
  4. package/dist/asgardeo-spa.production.js +40 -11
  5. package/dist/asgardeo-spa.production.js.map +1 -1
  6. package/dist/asgardeo-spa.production.min.js +1 -1
  7. package/dist/asgardeo-spa.production.min.js.map +1 -1
  8. package/dist/polyfilled/asgardeo-spa.production.esm.js +70 -41
  9. package/dist/polyfilled/asgardeo-spa.production.esm.js.map +1 -1
  10. package/dist/polyfilled/asgardeo-spa.production.js +70 -41
  11. package/dist/polyfilled/asgardeo-spa.production.js.map +1 -1
  12. package/dist/polyfilled/asgardeo-spa.production.min.js +1 -1
  13. package/dist/polyfilled/asgardeo-spa.production.min.js.map +1 -1
  14. package/dist/src/client.d.ts +30 -0
  15. package/dist/src/client.d.ts.map +1 -1
  16. package/dist/src/client.js +39 -0
  17. package/dist/src/client.js.map +1 -1
  18. package/dist/src/clients/web-worker-client.d.ts.map +1 -1
  19. package/dist/src/clients/web-worker-client.js +48 -1
  20. package/dist/src/clients/web-worker-client.js.map +1 -1
  21. package/dist/src/constants/messages-types.d.ts +1 -0
  22. package/dist/src/constants/messages-types.d.ts.map +1 -1
  23. package/dist/src/constants/messages-types.js +1 -0
  24. package/dist/src/constants/messages-types.js.map +1 -1
  25. package/dist/src/http-client/clients/axios-http-client.d.ts.map +1 -1
  26. package/dist/src/http-client/clients/axios-http-client.js +6 -0
  27. package/dist/src/http-client/clients/axios-http-client.js.map +1 -1
  28. package/dist/src/models/client.d.ts +1 -0
  29. package/dist/src/models/client.d.ts.map +1 -1
  30. package/dist/src/models/message.d.ts +2 -2
  31. package/dist/src/models/message.d.ts.map +1 -1
  32. package/dist/src/worker/worker-receiver.d.ts.map +1 -1
  33. package/dist/src/worker/worker-receiver.js +33 -1
  34. package/dist/src/worker/worker-receiver.js.map +1 -1
  35. package/dist/tsconfig.tsbuildinfo +1 -1
  36. package/package.json +2 -2
  37. package/src/client.ts +47 -2
  38. package/src/clients/web-worker-client.ts +61 -0
  39. package/src/constants/messages-types.ts +1 -0
  40. package/src/http-client/clients/axios-http-client.ts +7 -1
  41. package/src/models/client.ts +1 -0
  42. package/src/models/message.ts +2 -0
  43. package/src/worker/worker-receiver.ts +36 -0
@@ -1,2 +1,2 @@
1
- var AsgardeoAuth=function(e){"use strict";var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function i(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function n(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 l=function(e){return e&&e.Math==Math&&e},o=l("object"==typeof globalThis&&globalThis)||l("object"==typeof window&&window)||l("object"==typeof self&&self)||l("object"==typeof t&&t)||function(){return this}()||Function("return this")(),a=o,c=function(e){try{return!!e()}catch(e){return!0}},r=!c((function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")})),s=r,d=Function.prototype,u=d.bind,h=d.call,Z=s&&u.bind(h,h),b=s?function(e){return e&&Z(e)}:function(e){return e&&function(){return h.apply(e,arguments)}},m=TypeError,p=function(e){if(null==e)throw m("Can't call method on "+e);return e},G=p,y=Object,X=function(e){return y(G(e))},W=X,V=b({}.hasOwnProperty),I=Object.hasOwn||function(e,t){return V(W(e),t)},S={},R={exports:{}},f=o,v=Object.defineProperty,g=function(e,t){try{v(f,e,{value:t,configurable:!0,writable:!0})}catch(i){f[e]=t}return t},Y=g,K="__core-js_shared__",N=o[K]||Y(K,{}),J=N;(R.exports=function(e,t){return J[e]||(J[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 U,k,L=b,C=0,T=Math.random(),H=L(1..toString),x=function(e){return"Symbol("+(void 0===e?"":e)+")_"+H(++C+T,36)},w=function(e){return"function"==typeof e},F=o,z=w,P=function(e){return z(e)?e:void 0},B=function(e,t){return arguments.length<2?P(F[e]):F[e]&&F[e][t]},j=B("navigator","userAgent")||"",Q=o,M=j,E=Q.process,D=Q.Deno,O=E&&E.versions||D&&D.version,A=O&&O.v8;A&&(k=(U=A.split("."))[0]>0&&U[0]<4?1:+(U[0]+U[1])),!k&&M&&(!(U=M.match(/Edge\/(\d+)/))||U[1]>=74)&&(U=M.match(/Chrome\/(\d+)/))&&(k=+U[1]);var _=k,q=_,$=c,ee=!!Object.getOwnPropertySymbols&&!$((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&q&&q<41})),te=ee&&!Symbol.sham&&"symbol"==typeof Symbol.iterator,ie=o,ne=R.exports,le=I,oe=x,ae=ee,ce=te,re=ne("wks"),se=ie.Symbol,de=se&&se.for,ue=ce?se:se&&se.withoutSetter||oe,he=function(e){if(!le(re,e)||!ae&&"string"!=typeof re[e]){var t="Symbol."+e;ae&&le(se,e)?re[e]=se[e]:re[e]=ce&&de?de(t):ue(t)}return re[e]},Ze=he;S.f=Ze;var be={},me=!c((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})),pe=w,Ge=function(e){return"object"==typeof e?null!==e:pe(e)},ye=Ge,Xe=o.document,We=ye(Xe)&&ye(Xe.createElement),Ve=function(e){return We?Xe.createElement(e):{}},Ie=Ve,Se=!me&&!c((function(){return 7!=Object.defineProperty(Ie("div"),"a",{get:function(){return 7}}).a})),Re=me&&c((function(){return 42!=Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype})),fe=Ge,ve=String,ge=TypeError,Ye=function(e){if(fe(e))return e;throw ge(ve(e)+" is not an object")},Ke=r,Ne=Function.prototype.call,Je=Ke?Ne.bind(Ne):function(){return Ne.apply(Ne,arguments)},Ue=b({}.isPrototypeOf),ke=B,Le=w,Ce=Ue,Te=Object,He=te?function(e){return"symbol"==typeof e}:function(e){var t=ke("Symbol");return Le(t)&&Ce(t.prototype,Te(e))},xe=String,we=function(e){try{return xe(e)}catch(e){return"Object"}},Fe=w,ze=we,Pe=TypeError,Be=function(e){if(Fe(e))return e;throw Pe(ze(e)+" is not a function")},je=Be,Qe=function(e,t){var i=e[t];return null==i?void 0:je(i)},Me=Je,Ee=w,De=Ge,Oe=TypeError,Ae=Je,_e=Ge,qe=He,$e=Qe,et=function(e,t){var i,n;if("string"===t&&Ee(i=e.toString)&&!De(n=Me(i,e)))return n;if(Ee(i=e.valueOf)&&!De(n=Me(i,e)))return n;if("string"!==t&&Ee(i=e.toString)&&!De(n=Me(i,e)))return n;throw Oe("Can't convert object to primitive value")},tt=TypeError,it=he("toPrimitive"),nt=function(e,t){if(!_e(e)||qe(e))return e;var i,n=$e(e,it);if(n){if(void 0===t&&(t="default"),i=Ae(n,e,t),!_e(i)||qe(i))return i;throw tt("Can't convert object to primitive value")}return void 0===t&&(t="number"),et(e,t)},lt=nt,ot=He,at=function(e){var t=lt(e,"string");return ot(t)?t:t+""},ct=me,rt=Se,st=Re,dt=Ye,ut=at,ht=TypeError,Zt=Object.defineProperty,bt=Object.getOwnPropertyDescriptor,mt="enumerable",pt="configurable",Gt="writable";be.f=ct?st?function(e,t,i){if(dt(e),t=ut(t),dt(i),"function"==typeof e&&"prototype"===t&&"value"in i&&Gt in i&&!i.writable){var n=bt(e,t);n&&n.writable&&(e[t]=i.value,i={configurable:pt in i?i.configurable:n.configurable,enumerable:mt in i?i.enumerable:n.enumerable,writable:!1})}return Zt(e,t,i)}:Zt:function(e,t,i){if(dt(e),t=ut(t),dt(i),rt)try{return Zt(e,t,i)}catch(e){}if("get"in i||"set"in i)throw ht("Accessors not supported");return"value"in i&&(e[t]=i.value),e};var yt=a,Xt=I,Wt=S,Vt=be.f,It=function(e){var t=yt.Symbol||(yt.Symbol={});Xt(t,e)||Vt(t,e,{value:Wt.f(e)})};It("matchAll");var St={},Rt={},ft={}.propertyIsEnumerable,vt=Object.getOwnPropertyDescriptor,gt=vt&&!ft.call({1:2},1);Rt.f=gt?function(e){var t=vt(this,e);return!!t&&t.enumerable}:ft;var Yt=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},Kt=b,Nt=Kt({}.toString),Jt=Kt("".slice),Ut=function(e){return Jt(Nt(e),8,-1)},kt=c,Lt=Ut,Ct=Object,Tt=b("".split),Ht=kt((function(){return!Ct("z").propertyIsEnumerable(0)}))?function(e){return"String"==Lt(e)?Tt(e,""):Ct(e)}:Ct,xt=Ht,wt=p,Ft=function(e){return xt(wt(e))},zt=me,Pt=Je,Bt=Rt,jt=Yt,Qt=Ft,Mt=at,Et=I,Dt=Se,Ot=Object.getOwnPropertyDescriptor;St.f=zt?Ot:function(e,t){if(e=Qt(e),t=Mt(t),Dt)try{return Ot(e,t)}catch(e){}if(Et(e,t))return jt(!Pt(Bt.f,e,t),e[t])};var At=be,_t=Yt,qt=me?function(e,t,i){return At.f(e,t,_t(1,i))}:function(e,t,i){return e[t]=i,e},$t={exports:{}},ei=me,ti=I,ii=Function.prototype,ni=ei&&Object.getOwnPropertyDescriptor,li=ti(ii,"name"),oi={EXISTS:li,PROPER:li&&"something"===function(){}.name,CONFIGURABLE:li&&(!ei||ei&&ni(ii,"name").configurable)},ai=w,ci=N,ri=b(Function.toString);ai(ci.inspectSource)||(ci.inspectSource=function(e){return ri(e)});var si,di,ui,hi=ci.inspectSource,Zi=w,bi=hi,mi=o.WeakMap,pi=Zi(mi)&&/native code/.test(bi(mi)),Gi=R.exports,yi=x,Xi=Gi("keys"),Wi=function(e){return Xi[e]||(Xi[e]=yi(e))},Vi={},Ii=pi,Si=o,Ri=b,fi=Ge,vi=qt,gi=I,Yi=N,Ki=Wi,Ni=Vi,Ji="Object already initialized",Ui=Si.TypeError,ki=Si.WeakMap;if(Ii||Yi.state){var Li=Yi.state||(Yi.state=new ki),Ci=Ri(Li.get),Ti=Ri(Li.has),Hi=Ri(Li.set);si=function(e,t){if(Ti(Li,e))throw new Ui(Ji);return t.facade=e,Hi(Li,e,t),t},di=function(e){return Ci(Li,e)||{}},ui=function(e){return Ti(Li,e)}}else{var xi=Ki("state");Ni[xi]=!0,si=function(e,t){if(gi(e,xi))throw new Ui(Ji);return t.facade=e,vi(e,xi,t),t},di=function(e){return gi(e,xi)?e[xi]:{}},ui=function(e){return gi(e,xi)}}var wi={set:si,get:di,has:ui,enforce:function(e){return ui(e)?di(e):si(e,{})},getterFor:function(e){return function(t){var i;if(!fi(t)||(i=di(t)).type!==e)throw Ui("Incompatible receiver, "+e+" required");return i}}},Fi=c,zi=w,Pi=I,Bi=me,ji=oi.CONFIGURABLE,Qi=hi,Mi=wi.enforce,Ei=wi.get,Di=Object.defineProperty,Oi=Bi&&!Fi((function(){return 8!==Di((function(){}),"length",{value:8}).length})),Ai=String(String).split("String"),_i=$t.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),(!Pi(e,"name")||ji&&e.name!==t)&&(Bi?Di(e,"name",{value:t,configurable:!0}):e.name=t),Oi&&i&&Pi(i,"arity")&&e.length!==i.arity&&Di(e,"length",{value:i.arity});try{i&&Pi(i,"constructor")&&i.constructor?Bi&&Di(e,"prototype",{writable:!1}):e.prototype&&(e.prototype=void 0)}catch(e){}var n=Mi(e);return Pi(n,"source")||(n.source=Ai.join("string"==typeof t?t:"")),e};Function.prototype.toString=_i((function(){return zi(this)&&Ei(this).source||Qi(this)}),"toString");var qi=w,$i=be,en=$t.exports,tn=g,nn=function(e,t,i,n){n||(n={});var l=n.enumerable,o=void 0!==n.name?n.name:t;if(qi(i)&&en(i,o,n),n.global)l?e[t]=i:tn(t,i);else{try{n.unsafe?e[t]&&(l=!0):delete e[t]}catch(e){}l?e[t]=i:$i.f(e,t,{value:i,enumerable:!1,configurable:!n.nonConfigurable,writable:!n.nonWritable})}return e},ln={},on=Math.ceil,an=Math.floor,cn=Math.trunc||function(e){var t=+e;return(t>0?an:on)(t)},rn=cn,sn=function(e){var t=+e;return t!=t||0===t?0:rn(t)},dn=sn,un=Math.max,hn=Math.min,Zn=function(e,t){var i=dn(e);return i<0?un(i+t,0):hn(i,t)},bn=sn,mn=Math.min,pn=function(e){return e>0?mn(bn(e),9007199254740991):0},Gn=pn,yn=function(e){return Gn(e.length)},Xn=Ft,Wn=Zn,Vn=yn,In=function(e){return function(t,i,n){var l,o=Xn(t),a=Vn(o),c=Wn(n,a);if(e&&i!=i){for(;a>c;)if((l=o[c++])!=l)return!0}else for(;a>c;c++)if((e||c in o)&&o[c]===i)return e||c||0;return!e&&-1}},Sn={includes:In(!0),indexOf:In(!1)},Rn=I,fn=Ft,vn=Sn.indexOf,gn=Vi,Yn=b([].push),Kn=function(e,t){var i,n=fn(e),l=0,o=[];for(i in n)!Rn(gn,i)&&Rn(n,i)&&Yn(o,i);for(;t.length>l;)Rn(n,i=t[l++])&&(~vn(o,i)||Yn(o,i));return o},Nn=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],Jn=Kn,Un=Nn.concat("length","prototype");ln.f=Object.getOwnPropertyNames||function(e){return Jn(e,Un)};var kn={};kn.f=Object.getOwnPropertySymbols;var Ln=B,Cn=ln,Tn=kn,Hn=Ye,xn=b([].concat),wn=Ln("Reflect","ownKeys")||function(e){var t=Cn.f(Hn(e)),i=Tn.f;return i?xn(t,i(e)):t},Fn=I,zn=wn,Pn=St,Bn=be,jn=c,Qn=w,Mn=/#|\.prototype\./,En=function(e,t){var i=On[Dn(e)];return i==_n||i!=An&&(Qn(t)?jn(t):!!t)},Dn=En.normalize=function(e){return String(e).replace(Mn,".").toLowerCase()},On=En.data={},An=En.NATIVE="N",_n=En.POLYFILL="P",qn=En,$n=o,el=St.f,tl=qt,il=nn,nl=g,ll=function(e,t,i){for(var n=zn(t),l=Bn.f,o=Pn.f,a=0;a<n.length;a++){var c=n[a];Fn(e,c)||i&&Fn(i,c)||l(e,c,o(t,c))}},ol=qn,al=function(e,t){var i,n,l,o,a,c=e.target,r=e.global,s=e.stat;if(i=r?$n:s?$n[c]||nl(c,{}):($n[c]||{}).prototype)for(n in t){if(o=t[n],l=e.dontCallGetSet?(a=el(i,n))&&a.value:i[n],!ol(r?n:c+(s?".":"#")+n,e.forced)&&void 0!==l){if(typeof o==typeof l)continue;ll(o,l)}(e.sham||l&&l.sham)&&tl(o,"sham",!0),il(i,n,o,e)}},cl={},rl=Kn,sl=Nn,dl=Object.keys||function(e){return rl(e,sl)},ul=me,hl=Re,Zl=be,bl=Ye,ml=Ft,pl=dl;cl.f=ul&&!hl?Object.defineProperties:function(e,t){bl(e);for(var i,n=ml(t),l=pl(t),o=l.length,a=0;o>a;)Zl.f(e,i=l[a++],n[i]);return e};var Gl,yl=B("document","documentElement"),Xl=Ye,Wl=cl,Vl=Nn,Il=Vi,Sl=yl,Rl=Ve,fl=Wi("IE_PROTO"),vl=function(){},gl=function(e){return"<script>"+e+"</"+"script>"},Yl=function(e){e.write(gl("")),e.close();var t=e.parentWindow.Object;return e=null,t},Kl=function(){try{Gl=new ActiveXObject("htmlfile")}catch(e){}var e,t;Kl="undefined"!=typeof document?document.domain&&Gl?Yl(Gl):((t=Rl("iframe")).style.display="none",Sl.appendChild(t),t.src=String("javascript:"),(e=t.contentWindow.document).open(),e.write(gl("document.F=Object")),e.close(),e.F):Yl(Gl);for(var i=Vl.length;i--;)delete Kl.prototype[Vl[i]];return Kl()};Il[fl]=!0;var Nl=Object.create||function(e,t){var i;return null!==e?(vl.prototype=Xl(e),i=new vl,vl.prototype=null,i[fl]=e):i=Kl(),void 0===t?i:Wl.f(i,t)},Jl=he,Ul=Nl,kl=be.f,Ll=Jl("unscopables"),Cl=Array.prototype;null==Cl[Ll]&&kl(Cl,Ll,{configurable:!0,value:Ul(null)});var Tl=function(e){Cl[Ll][e]=!0},Hl=Sn.includes,xl=Tl;al({target:"Array",proto:!0,forced:c((function(){return!Array(1).includes()}))},{includes:function(e){return Hl(this,e,arguments.length>1?arguments[1]:void 0)}}),xl("includes"),Tl("flat"),Tl("flatMap");var wl={},Fl=Be,zl=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=Fl(t),this.reject=Fl(i)};wl.f=function(e){return new zl(e)};var Pl=Be,Bl=r,jl=b(b.bind),Ql=function(e,t){return Pl(e),void 0===t?e:Bl?jl(e,t):function(){return e.apply(t,arguments)}},Ml={},El=Ml,Dl=he("iterator"),Ol=Array.prototype,Al=function(e){return void 0!==e&&(El.Array===e||Ol[Dl]===e)},_l={};_l[he("toStringTag")]="z";var ql="[object z]"===String(_l),$l=w,eo=Ut,to=he("toStringTag"),io=Object,no="Arguments"==eo(function(){return arguments}()),lo=ql?eo: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=io(e),to))?i:no?eo(t):"Object"==(n=eo(t))&&$l(t.callee)?"Arguments":n},oo=lo,ao=Qe,co=Ml,ro=he("iterator"),so=function(e){if(null!=e)return ao(e,ro)||ao(e,"@@iterator")||co[oo(e)]},uo=Je,ho=Be,Zo=Ye,bo=we,mo=so,po=TypeError,Go=function(e,t){var i=arguments.length<2?mo(e):t;if(ho(i))return Zo(uo(i,e));throw po(bo(e)+" is not iterable")},yo=Je,Xo=Ye,Wo=Qe,Vo=function(e,t,i){var n,l;Xo(e);try{if(!(n=Wo(e,"return"))){if("throw"===t)throw i;return i}n=yo(n,e)}catch(e){l=!0,n=e}if("throw"===t)throw i;if(l)throw n;return Xo(n),i},Io=Ql,So=Je,Ro=Ye,fo=we,vo=Al,go=yn,Yo=Ue,Ko=Go,No=so,Jo=Vo,Uo=TypeError,ko=function(e,t){this.stopped=e,this.result=t},Lo=ko.prototype,Co=Je,To=Be,Ho=wl,xo=function(e){try{return{error:!1,value:e()}}catch(e){return{error:!0,value:e}}},wo=function(e,t,i){var n,l,o,a,c,r,s,d=i&&i.that,u=!(!i||!i.AS_ENTRIES),h=!(!i||!i.IS_RECORD),Z=!(!i||!i.IS_ITERATOR),b=!(!i||!i.INTERRUPTED),m=Io(t,d),p=function(e){return n&&Jo(n,"normal",e),new ko(!0,e)},G=function(e){return u?(Ro(e),b?m(e[0],e[1],p):m(e[0],e[1])):b?m(e,p):m(e)};if(h)n=e.iterator;else if(Z)n=e;else{if(!(l=No(e)))throw Uo(fo(e)+" is not iterable");if(vo(l)){for(o=0,a=go(e);a>o;o++)if((c=G(e[o]))&&Yo(Lo,c))return c;return new ko(!1)}n=Ko(e,l)}for(r=h?e.next:n.next;!(s=So(r,n)).done;){try{c=G(s.value)}catch(e){Jo(n,"throw",e)}if("object"==typeof c&&c&&Yo(Lo,c))return c}return new ko(!1)};al({target:"Promise",stat:!0},{allSettled:function(e){var t=this,i=Ho.f(t),n=i.resolve,l=i.reject,o=xo((function(){var i=To(t.resolve),l=[],o=0,a=1;wo(e,(function(e){var c=o++,r=!1;a++,Co(i,t,e).then((function(e){r||(r=!0,l[c]={status:"fulfilled",value:e},--a||n(l))}),(function(e){r||(r=!0,l[c]={status:"rejected",reason:e},--a||n(l))}))})),--a||n(l)}));return o.error&&l(o.value),i.promise}});var Fo=o.Promise,zo=b,Po=c,Bo=w,jo=lo,Qo=hi,Mo=function(){},Eo=[],Do=B("Reflect","construct"),Oo=/^\s*(?:class|function)\b/,Ao=zo(Oo.exec),_o=!Oo.exec(Mo),qo=function(e){if(!Bo(e))return!1;try{return Do(Mo,Eo,e),!0}catch(e){return!1}},$o=function(e){if(!Bo(e))return!1;switch(jo(e)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return _o||!!Ao(Oo,Qo(e))}catch(e){return!0}};$o.sham=!0;var ea=!Do||Po((function(){var e;return qo(qo.call)||!qo(Object)||!qo((function(){e=!0}))||e}))?$o:qo,ta=ea,ia=we,na=TypeError,la=function(e){if(ta(e))return e;throw na(ia(e)+" is not a constructor")},oa=Ye,aa=la,ca=he("species"),ra=function(e,t){var i,n=oa(e).constructor;return void 0===n||null==(i=oa(n)[ca])?t:aa(i)},sa=Ye,da=Ge,ua=wl,ha=al,Za=Fo,ba=c,ma=B,pa=w,Ga=ra,ya=function(e,t){if(sa(e),da(t)&&t.constructor===e)return t;var i=ua.f(e);return(0,i.resolve)(t),i.promise},Xa=nn,Wa=Za&&Za.prototype;if(ha({target:"Promise",proto:!0,real:!0,forced:!!Za&&ba((function(){Wa.finally.call({then:function(){}},(function(){}))}))},{finally:function(e){var t=Ga(this,ma("Promise")),i=pa(e);return this.then(i?function(i){return ya(t,e()).then((function(){return i}))}:e,i?function(i){return ya(t,e()).then((function(){throw i}))}:e)}}),pa(Za)){var Va=ma("Promise").prototype.finally;Wa.finally!==Va&&Xa(Wa,"finally",Va,{unsafe:!0})}var Ia=$t.exports,Sa=be,Ra=function(e,t,i){return i.get&&Ia(i.get,t,{getter:!0}),i.set&&Ia(i.set,t,{setter:!0}),Sa.f(e,t,i)},fa=Ye,va=function(){var e=fa(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},ga=me,Ya=Ra,Ka=va,Na=c,Ja=o.RegExp,Ua=Ja.prototype,ka=ga&&Na((function(){var e=!0;try{Ja(".","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 a in e&&(o.hasIndices="d"),o)l(a,o[a]);return Object.getOwnPropertyDescriptor(Ua,"flags").get.call(t)!==n||i!==n}));ka&&Ya(Ua,"flags",{configurable:!0,get:Ka});var La,Ca,Ta,Ha=!c((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype})),xa=I,wa=w,Fa=X,za=Ha,Pa=Wi("IE_PROTO"),Ba=Object,ja=Ba.prototype,Qa=za?Ba.getPrototypeOf:function(e){var t=Fa(e);if(xa(t,Pa))return t[Pa];var i=t.constructor;return wa(i)&&t instanceof i?i.prototype:t instanceof Ba?ja:null},Ma=c,Ea=w,Da=Qa,Oa=nn,Aa=he("iterator"),_a=!1;[].keys&&("next"in(Ta=[].keys())?(Ca=Da(Da(Ta)))!==Object.prototype&&(La=Ca):_a=!0);var qa=null==La||Ma((function(){var e={};return La[Aa].call(e)!==e}));qa&&(La={}),Ea(La[Aa])||Oa(La,Aa,(function(){return this}));var $a,ec,tc={IteratorPrototype:La,BUGGY_SAFARI_ITERATORS:_a},ic=be.f,nc=I,lc=he("toStringTag"),oc=function(e,t,i){e&&!i&&(e=e.prototype),e&&!nc(e,lc)&&ic(e,lc,{configurable:!0,value:t})},ac=tc.IteratorPrototype,cc=Nl,rc=Yt,sc=oc,dc=Ml,uc=function(){return this},hc=function(e,t,i,n){var l=t+" Iterator";return e.prototype=cc(ac,{next:rc(+!n,i)}),sc(e,l,!1),dc[l]=uc,e},Zc=lo,bc=String,mc=function(e){if("Symbol"===Zc(e))throw TypeError("Cannot convert a Symbol value to a string");return bc(e)},pc=Ge,Gc=Ut,yc=he("match"),Xc=Je,Wc=I,Vc=Ue,Ic=va,Sc=RegExp.prototype,Rc=b,fc=sn,vc=mc,gc=p,Yc=Rc("".charAt),Kc=Rc("".charCodeAt),Nc=Rc("".slice),Jc=function(e){return function(t,i){var n,l,o=vc(gc(t)),a=fc(i),c=o.length;return a<0||a>=c?e?"":void 0:(n=Kc(o,a))<55296||n>56319||a+1===c||(l=Kc(o,a+1))<56320||l>57343?e?Yc(o,a):n:e?Nc(o,a,a+2):l-56320+(n-55296<<10)+65536}},Uc={codeAt:Jc(!1),charAt:Jc(!0)},kc=Uc.charAt,Lc=function(e,t,i){return t+(i?kc(e,t).length:1)},Cc=c,Tc=o.RegExp,Hc=Cc((function(){var e=Tc("a","y");return e.lastIndex=2,null!=e.exec("abcd")})),xc=Hc||Cc((function(){return!Tc("a","y").sticky})),wc={BROKEN_CARET:Hc||Cc((function(){var e=Tc("^r","gy");return e.lastIndex=2,null!=e.exec("str")})),MISSED_STICKY:xc,UNSUPPORTED_Y:Hc},Fc=c,zc=o.RegExp,Pc=Fc((function(){var e=zc(".","s");return!(e.dotAll&&e.exec("\n")&&"s"===e.flags)})),Bc=c,jc=o.RegExp,Qc=Bc((function(){var e=jc("(?<a>b)","g");return"b"!==e.exec("b").groups.a||"bc"!=="b".replace(e,"$<a>c")})),Mc=Je,Ec=b,Dc=mc,Oc=va,Ac=wc,_c=R.exports,qc=Nl,$c=wi.get,er=Pc,tr=Qc,ir=_c("native-string-replace",String.prototype.replace),nr=RegExp.prototype.exec,lr=nr,or=Ec("".charAt),ar=Ec("".indexOf),cr=Ec("".replace),rr=Ec("".slice),sr=(ec=/b*/g,Mc(nr,$a=/a/,"a"),Mc(nr,ec,"a"),0!==$a.lastIndex||0!==ec.lastIndex),dr=Ac.BROKEN_CARET,ur=void 0!==/()??/.exec("")[1];(sr||ur||dr||er||tr)&&(lr=function(e){var t,i,n,l,o,a,c,r=this,s=$c(r),d=Dc(e),u=s.raw;if(u)return u.lastIndex=r.lastIndex,t=Mc(lr,u,d),r.lastIndex=u.lastIndex,t;var h=s.groups,Z=dr&&r.sticky,b=Mc(Oc,r),m=r.source,p=0,G=d;if(Z&&(b=cr(b,"y",""),-1===ar(b,"g")&&(b+="g"),G=rr(d,r.lastIndex),r.lastIndex>0&&(!r.multiline||r.multiline&&"\n"!==or(d,r.lastIndex-1))&&(m="(?: "+m+")",G=" "+G,p++),i=new RegExp("^(?:"+m+")",b)),ur&&(i=new RegExp("^"+m+"$(?!\\s)",b)),sr&&(n=r.lastIndex),l=Mc(nr,Z?i:r,G),Z?l?(l.input=rr(l.input,p),l[0]=rr(l[0],p),l.index=r.lastIndex,r.lastIndex+=l[0].length):r.lastIndex=0:sr&&l&&(r.lastIndex=r.global?l.index+l[0].length:n),ur&&l&&l.length>1&&Mc(ir,l[0],i,(function(){for(o=1;o<arguments.length-2;o++)void 0===arguments[o]&&(l[o]=void 0)})),l&&h)for(l.groups=a=qc(null),o=0;o<h.length;o++)a[(c=h[o])[0]]=l[c[1]];return l});var hr=lr,Zr=Je,br=Ye,mr=w,pr=Ut,Gr=hr,yr=TypeError,Xr=function(e,t){var i=e.exec;if(mr(i)){var n=Zr(i,e,t);return null!==n&&br(n),n}if("RegExp"===pr(e))return Zr(Gr,e,t);throw yr("RegExp#exec called on incompatible receiver")},Wr=al,Vr=Je,Ir=b,Sr=hc,Rr=p,fr=pn,vr=mc,gr=Ye,Yr=function(e){var t;return pc(e)&&(void 0!==(t=e[yc])?!!t:"RegExp"==Gc(e))},Kr=function(e){var t=e.flags;return void 0!==t||"flags"in Sc||Wc(e,"flags")||!Vc(Sc,e)?t:Xc(Ic,e)},Nr=Qe,Jr=nn,Ur=c,kr=ra,Lr=Lc,Cr=Xr,Tr=wi,Hr=he("matchAll"),xr="RegExp String",wr="RegExp String Iterator",Fr=Tr.set,zr=Tr.getterFor(wr),Pr=RegExp.prototype,Br=TypeError,jr=Ir("".indexOf),Qr=Ir("".matchAll),Mr=!!Qr&&!Ur((function(){Qr("a",/./)})),Er=Sr((function(e,t,i,n){Fr(this,{type:wr,regexp:e,string:t,global:i,unicode:n,done:!1})}),xr,(function(){var e=zr(this);if(e.done)return{value:void 0,done:!0};var t=e.regexp,i=e.string,n=Cr(t,i);return null===n?{value:void 0,done:e.done=!0}:e.global?(""===vr(n[0])&&(t.lastIndex=Lr(i,fr(t.lastIndex),e.unicode)),{value:n,done:!1}):(e.done=!0,{value:n,done:!1})})),Dr=function(e){var t,i,n,l=gr(this),o=vr(e),a=kr(l,RegExp),c=vr(Kr(l));return t=new a(a===RegExp?l.source:l,c),i=!!~jr(c,"g"),n=!!~jr(c,"u"),t.lastIndex=fr(l.lastIndex),new Er(t,o,i,n)};Wr({target:"String",proto:!0,forced:Mr},{matchAll:function(e){var t,i,n,l=Rr(this);if(null!=e){if(Yr(e)&&(t=vr(Rr(Kr(e))),!~jr(t,"g")))throw Br("`.matchAll` does not allow non-global regexes");if(Mr)return Qr(l,e);if(n=Nr(e,Hr))return Vr(n,e,l)}else if(Mr)return Qr(l,e);return i=vr(l),new RegExp(e,"g")[Hr](i)}}),Hr in Pr||Jr(Pr,Hr,Dr);var Or=r,Ar=Function.prototype,_r=Ar.apply,qr=Ar.call,$r="object"==typeof Reflect&&Reflect.apply||(Or?qr.bind(_r):function(){return qr.apply(_r,arguments)});al({target:"RegExp",proto:!0,forced:/./.exec!==hr},{exec:hr});var es=b,ts=nn,is=hr,ns=c,ls=he,os=qt,as=ls("species"),cs=RegExp.prototype,rs=b,ss=X,ds=Math.floor,us=rs("".charAt),hs=rs("".replace),Zs=rs("".slice),bs=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,ms=/\$([$&'`]|\d{1,2})/g,ps=$r,Gs=Je,ys=b,Xs=function(e,t,i,n){var l=ls(e),o=!ns((function(){var t={};return t[l]=function(){return 7},7!=""[e](t)})),a=o&&!ns((function(){var t=!1,i=/a/;return"split"===e&&((i={}).constructor={},i.constructor[as]=function(){return i},i.flags="",i[l]=/./[l]),i.exec=function(){return t=!0,null},i[l](""),!t}));if(!o||!a||i){var c=es(/./[l]),r=t(l,""[e],(function(e,t,i,n,l){var a=es(e),r=t.exec;return r===is||r===cs.exec?o&&!l?{done:!0,value:c(t,i,n)}:{done:!0,value:a(i,t,n)}:{done:!1}}));ts(String.prototype,e,r[0]),ts(cs,l,r[1])}n&&os(cs[l],"sham",!0)},Ws=c,Vs=Ye,Is=w,Ss=sn,Rs=pn,fs=mc,vs=p,gs=Lc,Ys=Qe,Ks=function(e,t,i,n,l,o){var a=i+e.length,c=n.length,r=ms;return void 0!==l&&(l=ss(l),r=bs),hs(o,r,(function(o,r){var s;switch(us(r,0)){case"$":return"$";case"&":return e;case"`":return Zs(t,0,i);case"'":return Zs(t,a);case"<":s=l[Zs(r,1,-1)];break;default:var d=+r;if(0===d)return o;if(d>c){var u=ds(d/10);return 0===u?o:u<=c?void 0===n[u-1]?us(r,1):n[u-1]+us(r,1):o}s=n[d-1]}return void 0===s?"":s}))},Ns=Xr,Js=he("replace"),Us=Math.max,ks=Math.min,Ls=ys([].concat),Cs=ys([].push),Ts=ys("".indexOf),Hs=ys("".slice),xs="$0"==="a".replace(/./,"$0"),ws=!!/./[Js]&&""===/./[Js]("a","$0");Xs("replace",(function(e,t,i){var n=ws?"$":"$0";return[function(e,i){var n=vs(this),l=null==e?void 0:Ys(e,Js);return l?Gs(l,e,n,i):Gs(t,fs(n),e,i)},function(e,l){var o=Vs(this),a=fs(e);if("string"==typeof l&&-1===Ts(l,n)&&-1===Ts(l,"$<")){var c=i(t,o,a,l);if(c.done)return c.value}var r=Is(l);r||(l=fs(l));var s=o.global;if(s){var d=o.unicode;o.lastIndex=0}for(var u=[];;){var h=Ns(o,a);if(null===h)break;if(Cs(u,h),!s)break;""===fs(h[0])&&(o.lastIndex=gs(a,Rs(o.lastIndex),d))}for(var Z,b="",m=0,p=0;p<u.length;p++){for(var G=fs((h=u[p])[0]),y=Us(ks(Ss(h.index),a.length),0),X=[],W=1;W<h.length;W++)Cs(X,void 0===(Z=h[W])?Z:String(Z));var V=h.groups;if(r){var I=Ls([G],X,y,a);void 0!==V&&Cs(I,V);var S=fs(ps(l,void 0,I))}else S=Ks(G,a,y,X,V,l);y>=m&&(b+=Hs(a,m,y)+S,m=y+G.length)}return b+Hs(a,m)}]}),!!Ws((function(){var e=/./;return e.exec=function(){var e=[];return e.groups={a:"7"},e},"7"!=="".replace(e,"$<a>")}))||!xs||ws);var Fs={exports:{}},zs=he("iterator"),Ps=!1;try{var Bs=0,js={next:function(){return{done:!!Bs++}},return:function(){Ps=!0}};js[zs]=function(){return this},Array.from(js,(function(){throw 2}))}catch(e){}var Qs,Ms,Es,Ds="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView,Os=w,As=String,_s=TypeError,qs=b,$s=Ye,ed=function(e){if("object"==typeof e||Os(e))return e;throw _s("Can't set "+As(e)+" as a prototype")},td=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,i={};try{(e=qs(Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set))(i,[]),t=i instanceof Array}catch(e){}return function(i,n){return $s(i),ed(n),t?e(i,n):i.__proto__=n,i}}():void 0),id=Ds,nd=me,ld=o,od=w,ad=Ge,cd=I,rd=lo,sd=we,dd=qt,ud=nn,hd=be.f,Zd=Ue,bd=Qa,md=td,pd=he,Gd=x,yd=wi.enforce,Xd=wi.get,Wd=ld.Int8Array,Vd=Wd&&Wd.prototype,Id=ld.Uint8ClampedArray,Sd=Id&&Id.prototype,Rd=Wd&&bd(Wd),fd=Vd&&bd(Vd),vd=Object.prototype,gd=ld.TypeError,Yd=pd("toStringTag"),Kd=Gd("TYPED_ARRAY_TAG"),Nd="TypedArrayConstructor",Jd=id&&!!md&&"Opera"!==rd(ld.opera),Ud=!1,kd={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},Ld={BigInt64Array:8,BigUint64Array:8},Cd=function(e){var t=bd(e);if(ad(t)){var i=Xd(t);return i&&cd(i,Nd)?i.TypedArrayConstructor:Cd(t)}},Td=function(e){if(!ad(e))return!1;var t=rd(e);return cd(kd,t)||cd(Ld,t)};for(Qs in kd)(Es=(Ms=ld[Qs])&&Ms.prototype)?yd(Es).TypedArrayConstructor=Ms:Jd=!1;for(Qs in Ld)(Es=(Ms=ld[Qs])&&Ms.prototype)&&(yd(Es).TypedArrayConstructor=Ms);if((!Jd||!od(Rd)||Rd===Function.prototype)&&(Rd=function(){throw gd("Incorrect invocation")},Jd))for(Qs in kd)ld[Qs]&&md(ld[Qs],Rd);if((!Jd||!fd||fd===vd)&&(fd=Rd.prototype,Jd))for(Qs in kd)ld[Qs]&&md(ld[Qs].prototype,fd);if(Jd&&bd(Sd)!==fd&&md(Sd,fd),nd&&!cd(fd,Yd))for(Qs in Ud=!0,hd(fd,Yd,{get:function(){return ad(this)?this[Kd]:void 0}}),kd)ld[Qs]&&dd(ld[Qs],Kd,Qs);var Hd={NATIVE_ARRAY_BUFFER_VIEWS:Jd,TYPED_ARRAY_TAG:Ud&&Kd,aTypedArray:function(e){if(Td(e))return e;throw gd("Target is not a typed array")},aTypedArrayConstructor:function(e){if(od(e)&&(!md||Zd(Rd,e)))return e;throw gd(sd(e)+" is not a typed array constructor")},exportTypedArrayMethod:function(e,t,i,n){if(nd){if(i)for(var l in kd){var o=ld[l];if(o&&cd(o.prototype,e))try{delete o.prototype[e]}catch(i){try{o.prototype[e]=t}catch(e){}}}fd[e]&&!i||ud(fd,e,i?t:Jd&&Vd[e]||t,n)}},exportTypedArrayStaticMethod:function(e,t,i){var n,l;if(nd){if(md){if(i)for(n in kd)if((l=ld[n])&&cd(l,e))try{delete l[e]}catch(e){}if(Rd[e]&&!i)return;try{return ud(Rd,e,i?t:Jd&&Rd[e]||t)}catch(e){}}for(n in kd)!(l=ld[n])||l[e]&&!i||ud(l,e,t)}},getTypedArrayConstructor:Cd,isView:function(e){if(!ad(e))return!1;var t=rd(e);return"DataView"===t||cd(kd,t)||cd(Ld,t)},isTypedArray:Td,TypedArray:Rd,TypedArrayPrototype:fd},xd=o,wd=c,Fd=function(e,t){if(!t&&!Ps)return!1;var i=!1;try{var n={};n[zs]=function(){return{next:function(){return{done:i=!0}}}},e(n)}catch(e){}return i},zd=Hd.NATIVE_ARRAY_BUFFER_VIEWS,Pd=xd.ArrayBuffer,Bd=xd.Int8Array,jd=!zd||!wd((function(){Bd(1)}))||!wd((function(){new Bd(-1)}))||!Fd((function(e){new Bd,new Bd(null),new Bd(1.5),new Bd(e)}),!0)||wd((function(){return 1!==new Bd(new Pd(2),1,void 0).length})),Qd=nn,Md=function(e,t,i){for(var n in t)Qd(e,n,t[n],i);return e},Ed=Ue,Dd=TypeError,Od=function(e,t){if(Ed(t,e))return e;throw Dd("Incorrect invocation")},Ad=sn,_d=pn,qd=RangeError,$d=function(e){if(void 0===e)return 0;var t=Ad(e),i=_d(t);if(t!==i)throw qd("Wrong length or index");return i},eu=Array,tu=Math.abs,iu=Math.pow,nu=Math.floor,lu=Math.log,ou=Math.LN2,au={pack:function(e,t,i){var n,l,o,a=eu(i),c=8*i-t-1,r=(1<<c)-1,s=r>>1,d=23===t?iu(2,-24)-iu(2,-77):0,u=e<0||0===e&&1/e<0?1:0,h=0;for((e=tu(e))!=e||e===1/0?(l=e!=e?1:0,n=r):(n=nu(lu(e)/ou),e*(o=iu(2,-n))<1&&(n--,o*=2),(e+=n+s>=1?d/o:d*iu(2,1-s))*o>=2&&(n++,o/=2),n+s>=r?(l=0,n=r):n+s>=1?(l=(e*o-1)*iu(2,t),n+=s):(l=e*iu(2,s-1)*iu(2,t),n=0));t>=8;)a[h++]=255&l,l/=256,t-=8;for(n=n<<t|l,c+=t;c>0;)a[h++]=255&n,n/=256,c-=8;return a[--h]|=128*u,a},unpack:function(e,t){var i,n=e.length,l=8*n-t-1,o=(1<<l)-1,a=o>>1,c=l-7,r=n-1,s=e[r--],d=127&s;for(s>>=7;c>0;)d=256*d+e[r--],c-=8;for(i=d&(1<<-c)-1,d>>=-c,c+=t;c>0;)i=256*i+e[r--],c-=8;if(0===d)d=1-a;else{if(d===o)return i?NaN:s?-1/0:1/0;i+=iu(2,t),d-=a}return(s?-1:1)*i*iu(2,d-t)}},cu=X,ru=Zn,su=yn,du=function(e){for(var t=cu(this),i=su(t),n=arguments.length,l=ru(n>1?arguments[1]:void 0,i),o=n>2?arguments[2]:void 0,a=void 0===o?i:ru(o,i);a>l;)t[l++]=e;return t},uu=at,hu=be,Zu=Yt,bu=function(e,t,i){var n=uu(t);n in e?hu.f(e,n,Zu(0,i)):e[n]=i},mu=Zn,pu=yn,Gu=bu,yu=Array,Xu=Math.max,Wu=function(e,t,i){for(var n=pu(e),l=mu(t,n),o=mu(void 0===i?n:i,n),a=yu(Xu(o-l,0)),c=0;l<o;l++,c++)Gu(a,c,e[l]);return a.length=c,a},Vu=o,Iu=b,Su=me,Ru=Ds,fu=oi,vu=qt,gu=Md,Yu=c,Ku=Od,Nu=sn,Ju=pn,Uu=$d,ku=au,Lu=Qa,Cu=td,Tu=ln.f,Hu=be.f,xu=du,wu=Wu,Fu=oc,zu=fu.PROPER,Pu=fu.CONFIGURABLE,Bu=wi.get,ju=wi.set,Qu="ArrayBuffer",Mu="DataView",Eu="Wrong index",Du=Vu.ArrayBuffer,Ou=Du,Au=Ou&&Ou.prototype,_u=Vu.DataView,qu=_u&&_u.prototype,$u=Object.prototype,eh=Vu.Array,th=Vu.RangeError,ih=Iu(xu),nh=Iu([].reverse),lh=ku.pack,oh=ku.unpack,ah=function(e){return[255&e]},ch=function(e){return[255&e,e>>8&255]},rh=function(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]},sh=function(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]},dh=function(e){return lh(e,23,4)},uh=function(e){return lh(e,52,8)},hh=function(e,t){Hu(e.prototype,t,{get:function(){return Bu(this)[t]}})},Zh=function(e,t,i,n){var l=Uu(i),o=Bu(e);if(l+t>o.byteLength)throw th(Eu);var a=Bu(o.buffer).bytes,c=l+o.byteOffset,r=wu(a,c,c+t);return n?r:nh(r)},bh=function(e,t,i,n,l,o){var a=Uu(i),c=Bu(e);if(a+t>c.byteLength)throw th(Eu);for(var r=Bu(c.buffer).bytes,s=a+c.byteOffset,d=n(+l),u=0;u<t;u++)r[s+u]=d[o?u:t-u-1]};if(Ru){var mh=zu&&Du.name!==Qu;if(Yu((function(){Du(1)}))&&Yu((function(){new Du(-1)}))&&!Yu((function(){return new Du,new Du(1.5),new Du(NaN),mh&&!Pu})))mh&&Pu&&vu(Du,"name",Qu);else{(Ou=function(e){return Ku(this,Au),new Du(Uu(e))}).prototype=Au;for(var ph,Gh=Tu(Du),yh=0;Gh.length>yh;)(ph=Gh[yh++])in Ou||vu(Ou,ph,Du[ph]);Au.constructor=Ou}Cu&&Lu(qu)!==$u&&Cu(qu,$u);var Xh=new _u(new Ou(2)),Wh=Iu(qu.setInt8);Xh.setInt8(0,2147483648),Xh.setInt8(1,2147483649),!Xh.getInt8(0)&&Xh.getInt8(1)||gu(qu,{setInt8:function(e,t){Wh(this,e,t<<24>>24)},setUint8:function(e,t){Wh(this,e,t<<24>>24)}},{unsafe:!0})}else Ou=function(e){Ku(this,Au);var t=Uu(e);ju(this,{bytes:ih(eh(t),0),byteLength:t}),Su||(this.byteLength=t)},Au=Ou.prototype,_u=function(e,t,i){Ku(this,qu),Ku(e,Au);var n=Bu(e).byteLength,l=Nu(t);if(l<0||l>n)throw th("Wrong offset");if(l+(i=void 0===i?n-l:Ju(i))>n)throw th("Wrong length");ju(this,{buffer:e,byteLength:i,byteOffset:l}),Su||(this.buffer=e,this.byteLength=i,this.byteOffset=l)},qu=_u.prototype,Su&&(hh(Ou,"byteLength"),hh(_u,"buffer"),hh(_u,"byteLength"),hh(_u,"byteOffset")),gu(qu,{getInt8:function(e){return Zh(this,1,e)[0]<<24>>24},getUint8:function(e){return Zh(this,1,e)[0]},getInt16:function(e){var t=Zh(this,2,e,arguments.length>1?arguments[1]:void 0);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=Zh(this,2,e,arguments.length>1?arguments[1]:void 0);return t[1]<<8|t[0]},getInt32:function(e){return sh(Zh(this,4,e,arguments.length>1?arguments[1]:void 0))},getUint32:function(e){return sh(Zh(this,4,e,arguments.length>1?arguments[1]:void 0))>>>0},getFloat32:function(e){return oh(Zh(this,4,e,arguments.length>1?arguments[1]:void 0),23)},getFloat64:function(e){return oh(Zh(this,8,e,arguments.length>1?arguments[1]:void 0),52)},setInt8:function(e,t){bh(this,1,e,ah,t)},setUint8:function(e,t){bh(this,1,e,ah,t)},setInt16:function(e,t){bh(this,2,e,ch,t,arguments.length>2?arguments[2]:void 0)},setUint16:function(e,t){bh(this,2,e,ch,t,arguments.length>2?arguments[2]:void 0)},setInt32:function(e,t){bh(this,4,e,rh,t,arguments.length>2?arguments[2]:void 0)},setUint32:function(e,t){bh(this,4,e,rh,t,arguments.length>2?arguments[2]:void 0)},setFloat32:function(e,t){bh(this,4,e,dh,t,arguments.length>2?arguments[2]:void 0)},setFloat64:function(e,t){bh(this,8,e,uh,t,arguments.length>2?arguments[2]:void 0)}});Fu(Ou,Qu),Fu(_u,Mu);var Vh={ArrayBuffer:Ou,DataView:_u},Ih=Ge,Sh=Math.floor,Rh=Number.isInteger||function(e){return!Ih(e)&&isFinite(e)&&Sh(e)===e},fh=sn,vh=RangeError,gh=function(e){var t=fh(e);if(t<0)throw vh("The argument can't be less than 0");return t},Yh=RangeError,Kh=function(e,t){var i=gh(e);if(i%t)throw Yh("Wrong offset");return i},Nh=Ql,Jh=Je,Uh=la,kh=X,Lh=yn,Ch=Go,Th=so,Hh=Al,xh=Hd.aTypedArrayConstructor,wh=function(e){var t,i,n,l,o,a,c=Uh(this),r=kh(e),s=arguments.length,d=s>1?arguments[1]:void 0,u=void 0!==d,h=Th(r);if(h&&!Hh(h))for(a=(o=Ch(r,h)).next,r=[];!(l=Jh(a,o)).done;)r.push(l.value);for(u&&s>2&&(d=Nh(d,arguments[2])),i=Lh(r),n=new(xh(c))(i),t=0;i>t;t++)n[t]=u?d(r[t],t):r[t];return n},Fh=Ut,zh=Array.isArray||function(e){return"Array"==Fh(e)},Ph=ea,Bh=Ge,jh=he("species"),Qh=Array,Mh=function(e){var t;return zh(e)&&(t=e.constructor,(Ph(t)&&(t===Qh||zh(t.prototype))||Bh(t)&&null===(t=t[jh]))&&(t=void 0)),void 0===t?Qh:t},Eh=Ql,Dh=Ht,Oh=X,Ah=yn,_h=function(e,t){return new(Mh(e))(0===t?0:t)},qh=b([].push),$h=function(e){var t=1==e,i=2==e,n=3==e,l=4==e,o=6==e,a=7==e,c=5==e||o;return function(r,s,d,u){for(var h,Z,b=Oh(r),m=Dh(b),p=Eh(s,d),G=Ah(m),y=0,X=u||_h,W=t?X(r,G):i||a?X(r,0):void 0;G>y;y++)if((c||y in m)&&(Z=p(h=m[y],y,b),e))if(t)W[y]=Z;else if(Z)switch(e){case 3:return!0;case 5:return h;case 6:return y;case 2:qh(W,h)}else switch(e){case 4:return!1;case 7:qh(W,h)}return o?-1:n||l?l:W}},eZ={forEach:$h(0),map:$h(1),filter:$h(2),some:$h(3),every:$h(4),find:$h(5),findIndex:$h(6),filterReject:$h(7)},tZ=B,iZ=be,nZ=me,lZ=he("species"),oZ=w,aZ=Ge,cZ=td,rZ=al,sZ=o,dZ=Je,uZ=me,hZ=jd,ZZ=Hd,bZ=Vh,mZ=Od,pZ=Yt,GZ=qt,yZ=Rh,XZ=pn,WZ=$d,VZ=Kh,IZ=at,SZ=I,RZ=lo,fZ=Ge,vZ=He,gZ=Nl,YZ=Ue,KZ=td,NZ=ln.f,JZ=wh,UZ=eZ.forEach,kZ=function(e){var t=tZ(e),i=iZ.f;nZ&&t&&!t[lZ]&&i(t,lZ,{configurable:!0,get:function(){return this}})},LZ=be,CZ=St,TZ=function(e,t,i){var n,l;return cZ&&oZ(n=t.constructor)&&n!==i&&aZ(l=n.prototype)&&l!==i.prototype&&cZ(e,l),e},HZ=wi.get,xZ=wi.set,wZ=wi.enforce,FZ=LZ.f,zZ=CZ.f,PZ=Math.round,BZ=sZ.RangeError,jZ=bZ.ArrayBuffer,QZ=jZ.prototype,MZ=bZ.DataView,EZ=ZZ.NATIVE_ARRAY_BUFFER_VIEWS,DZ=ZZ.TYPED_ARRAY_TAG,OZ=ZZ.TypedArray,AZ=ZZ.TypedArrayPrototype,_Z=ZZ.aTypedArrayConstructor,qZ=ZZ.isTypedArray,$Z="BYTES_PER_ELEMENT",eb="Wrong length",tb=function(e,t){_Z(e);for(var i=0,n=t.length,l=new e(n);n>i;)l[i]=t[i++];return l},ib=function(e,t){FZ(e,t,{get:function(){return HZ(this)[t]}})},nb=function(e){var t;return YZ(QZ,e)||"ArrayBuffer"==(t=RZ(e))||"SharedArrayBuffer"==t},lb=function(e,t){return qZ(e)&&!vZ(t)&&t in e&&yZ(+t)&&t>=0},ob=function(e,t){return t=IZ(t),lb(e,t)?pZ(2,e[t]):zZ(e,t)},ab=function(e,t,i){return t=IZ(t),!(lb(e,t)&&fZ(i)&&SZ(i,"value"))||SZ(i,"get")||SZ(i,"set")||i.configurable||SZ(i,"writable")&&!i.writable||SZ(i,"enumerable")&&!i.enumerable?FZ(e,t,i):(e[t]=i.value,e)};uZ?(EZ||(CZ.f=ob,LZ.f=ab,ib(AZ,"buffer"),ib(AZ,"byteOffset"),ib(AZ,"byteLength"),ib(AZ,"length")),rZ({target:"Object",stat:!0,forced:!EZ},{getOwnPropertyDescriptor:ob,defineProperty:ab}),Fs.exports=function(e,t,i){var n=e.match(/\d+$/)[0]/8,l=e+(i?"Clamped":"")+"Array",o="get"+e,a="set"+e,c=sZ[l],r=c,s=r&&r.prototype,d={},u=function(e,t){FZ(e,t,{get:function(){return function(e,t){var i=HZ(e);return i.view[o](t*n+i.byteOffset,!0)}(this,t)},set:function(e){return function(e,t,l){var o=HZ(e);i&&(l=(l=PZ(l))<0?0:l>255?255:255&l),o.view[a](t*n+o.byteOffset,l,!0)}(this,t,e)},enumerable:!0})};EZ?hZ&&(r=t((function(e,t,i,l){return mZ(e,s),TZ(fZ(t)?nb(t)?void 0!==l?new c(t,VZ(i,n),l):void 0!==i?new c(t,VZ(i,n)):new c(t):qZ(t)?tb(r,t):dZ(JZ,r,t):new c(WZ(t)),e,r)})),KZ&&KZ(r,OZ),UZ(NZ(c),(function(e){e in r||GZ(r,e,c[e])})),r.prototype=s):(r=t((function(e,t,i,l){mZ(e,s);var o,a,c,d=0,h=0;if(fZ(t)){if(!nb(t))return qZ(t)?tb(r,t):dZ(JZ,r,t);o=t,h=VZ(i,n);var Z=t.byteLength;if(void 0===l){if(Z%n)throw BZ(eb);if((a=Z-h)<0)throw BZ(eb)}else if((a=XZ(l)*n)+h>Z)throw BZ(eb);c=a/n}else c=WZ(t),o=new jZ(a=c*n);for(xZ(e,{buffer:o,byteOffset:h,byteLength:a,length:c,view:new MZ(o)});d<c;)u(e,d++)})),KZ&&KZ(r,OZ),s=r.prototype=gZ(AZ)),s.constructor!==r&&GZ(s,"constructor",r),wZ(s).TypedArrayConstructor=r,DZ&&GZ(s,DZ,l);var h=r!=c;d[l]=r,rZ({global:!0,constructor:!0,forced:h,sham:!EZ},d),$Z in r||GZ(r,$Z,n),$Z in s||GZ(s,$Z,n),kZ(l)}):Fs.exports=function(){},(0,Fs.exports)("Float32",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Fs.exports)("Float64",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Fs.exports)("Int8",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Fs.exports)("Int16",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Fs.exports)("Int32",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Fs.exports)("Uint8",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Fs.exports)("Uint8",(function(e){return function(t,i,n){return e(this,t,i,n)}}),!0),(0,Fs.exports)("Uint16",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Fs.exports)("Uint32",(function(e){return function(t,i,n){return e(this,t,i,n)}}));var cb=nt,rb=TypeError,sb=du,db=function(e){var t=cb(e,"number");if("number"==typeof t)throw rb("Can't convert number to bigint");return BigInt(t)},ub=lo,hb=Je,Zb=c,bb=Hd.aTypedArray,mb=Hd.exportTypedArrayMethod,pb=b("".slice);mb("fill",(function(e){var t=arguments.length;bb(this);var i="Big"===pb(ub(this),0,3)?db(e):+e;return hb(sb,this,i,t>1?arguments[1]:void 0,t>2?arguments[2]:void 0)}),Zb((function(){var e=0;return new Int8Array(2).fill({valueOf:function(){return e++}}),1!==e}))),(0,Hd.exportTypedArrayStaticMethod)("from",wh,jd);var Gb=Hd.aTypedArrayConstructor;(0,Hd.exportTypedArrayStaticMethod)("of",(function(){for(var e=0,t=arguments.length,i=new(Gb(this))(t);t>e;)i[e]=arguments[e++];return i}),jd);var yb=o,Xb=Je,Wb=Hd,Vb=yn,Ib=Kh,Sb=X,Rb=c,fb=yb.RangeError,vb=yb.Int8Array,gb=vb&&vb.prototype,Yb=gb&&gb.set,Kb=Wb.aTypedArray,Nb=Wb.exportTypedArrayMethod,Jb=!Rb((function(){var e=new Uint8ClampedArray(2);return Xb(Yb,e,{length:1,0:3},1),3!==e[1]})),Ub=Jb&&Wb.NATIVE_ARRAY_BUFFER_VIEWS&&Rb((function(){var e=new vb(2);return e.set(1),e.set("2",1),0!==e[0]||2!==e[1]}));Nb("set",(function(e){Kb(this);var t=Ib(arguments.length>1?arguments[1]:void 0,1),i=Sb(e);if(Jb)return Xb(Yb,this,i,t);var n=this.length,l=Vb(i),o=0;if(l+t>n)throw fb("Wrong length");for(;o<l;)this[t+o]=i[o++]}),!Jb||Ub);var kb=Wu,Lb=Math.floor,Cb=function(e,t){var i=e.length,n=Lb(i/2);return i<8?Tb(e,t):Hb(e,Cb(kb(e,0,n),t),Cb(kb(e,n),t),t)},Tb=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},Hb=function(e,t,i,n){for(var l=t.length,o=i.length,a=0,c=0;a<l||c<o;)e[a+c]=a<l&&c<o?n(t[a],i[c])<=0?t[a++]:i[c++]:a<l?t[a++]:i[c++];return e},xb=Cb,wb=j.match(/firefox\/(\d+)/i),Fb=!!wb&&+wb[1],zb=/MSIE|Trident/.test(j),Pb=j.match(/AppleWebKit\/(\d+)\./),Bb=!!Pb&&+Pb[1],jb=b,Qb=c,Mb=Be,Eb=xb,Db=Fb,Ob=zb,Ab=_,_b=Bb,qb=Hd.aTypedArray,$b=Hd.exportTypedArrayMethod,em=o.Uint16Array,tm=em&&jb(em.prototype.sort),im=!(!tm||Qb((function(){tm(new em(2),null)}))&&Qb((function(){tm(new em(2),{})}))),nm=!!tm&&!Qb((function(){if(Ab)return Ab<74;if(Db)return Db<67;if(Ob)return!0;if(_b)return _b<602;var e,t,i=new em(516),n=Array(516);for(e=0;e<516;e++)t=e%4,i[e]=515-e,n[e]=e-2*t+3;for(tm(i,(function(e,t){return(e/4|0)-(t/4|0)})),e=0;e<516;e++)if(i[e]!==n[e])return!0}));$b("sort",(function(e){return void 0!==e&&Mb(e),nm?tm(this,e):Eb(qb(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))}),!nm||im);var lm=Ve("span").classList,om=lm&&lm.constructor&&lm.constructor.prototype,am=om===Object.prototype?void 0:om,cm=al,rm=Je,sm=w,dm=hc,um=Qa,hm=td,Zm=oc,bm=qt,mm=nn,pm=Ml,Gm=oi.PROPER,ym=oi.CONFIGURABLE,Xm=tc.IteratorPrototype,Wm=tc.BUGGY_SAFARI_ITERATORS,Vm=he("iterator"),Im="keys",Sm="values",Rm="entries",fm=function(){return this},vm=function(e,t,i,n,l,o,a){dm(i,t,n);var c,r,s,d=function(e){if(e===l&&m)return m;if(!Wm&&e in Z)return Z[e];switch(e){case Im:case Sm:case Rm:return function(){return new i(this,e)}}return function(){return new i(this)}},u=t+" Iterator",h=!1,Z=e.prototype,b=Z[Vm]||Z["@@iterator"]||l&&Z[l],m=!Wm&&b||d(l),p="Array"==t&&Z.entries||b;if(p&&(c=um(p.call(new e)))!==Object.prototype&&c.next&&(um(c)!==Xm&&(hm?hm(c,Xm):sm(c[Vm])||mm(c,Vm,fm)),Zm(c,u,!0)),Gm&&l==Sm&&b&&b.name!==Sm&&(ym?bm(Z,"name",Sm):(h=!0,m=function(){return rm(b,this)})),l)if(r={values:d(Sm),keys:o?m:d(Im),entries:d(Rm)},a)for(s in r)(Wm||h||!(s in Z))&&mm(Z,s,r[s]);else cm({target:t,proto:!0,forced:Wm||h},r);return Z[Vm]!==m&&mm(Z,Vm,m,{name:l}),pm[t]=m,r},gm=Ft,Ym=Tl,Km=Ml,Nm=wi,Jm=be.f,Um=vm,km=me,Lm="Array Iterator",Cm=Nm.set,Tm=Nm.getterFor(Lm),Hm=Um(Array,"Array",(function(e,t){Cm(this,{type:Lm,target:gm(e),index:0,kind:t})}),(function(){var e=Tm(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"),xm=Km.Arguments=Km.Array;if(Ym("keys"),Ym("values"),Ym("entries"),km&&"values"!==xm.name)try{Jm(xm,"name",{value:"values"})}catch(e){}var wm=o,Fm={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},zm=am,Pm=Hm,Bm=qt,jm=he,Qm=jm("iterator"),Mm=jm("toStringTag"),Em=Pm.values,Dm=function(e,t){if(e){if(e[Qm]!==Em)try{Bm(e,Qm,Em)}catch(t){e[Qm]=Em}if(e[Mm]||Bm(e,Mm,t),Fm[t])for(var i in Pm)if(e[i]!==Pm[i])try{Bm(e,i,Pm[i])}catch(t){e[i]=Pm[i]}}};for(var Om in Fm)Dm(wm[Om]&&wm[Om].prototype,Om);Dm(zm,"DOMTokenList");var Am,_m,qm,$m,ep=b([].slice),tp=TypeError,ip=function(e,t){if(e<t)throw tp("Not enough arguments");return e},np=/(?:ipad|iphone|ipod).*applewebkit/i.test(j),lp="process"==Ut(o.process),op=o,ap=$r,cp=Ql,rp=w,sp=I,dp=c,up=yl,hp=ep,Zp=Ve,bp=ip,mp=np,pp=lp,Gp=op.setImmediate,yp=op.clearImmediate,Xp=op.process,Wp=op.Dispatch,Vp=op.Function,Ip=op.MessageChannel,Sp=op.String,Rp=0,fp={},vp="onreadystatechange";try{Am=op.location}catch(e){}var gp=function(e){if(sp(fp,e)){var t=fp[e];delete fp[e],t()}},Yp=function(e){return function(){gp(e)}},Kp=function(e){gp(e.data)},Np=function(e){op.postMessage(Sp(e),Am.protocol+"//"+Am.host)};Gp&&yp||(Gp=function(e){bp(arguments.length,1);var t=rp(e)?e:Vp(e),i=hp(arguments,1);return fp[++Rp]=function(){ap(t,void 0,i)},_m(Rp),Rp},yp=function(e){delete fp[e]},pp?_m=function(e){Xp.nextTick(Yp(e))}:Wp&&Wp.now?_m=function(e){Wp.now(Yp(e))}:Ip&&!mp?($m=(qm=new Ip).port2,qm.port1.onmessage=Kp,_m=cp($m.postMessage,$m)):op.addEventListener&&rp(op.postMessage)&&!op.importScripts&&Am&&"file:"!==Am.protocol&&!dp(Np)?(_m=Np,op.addEventListener("message",Kp,!1)):_m=vp in Zp("script")?function(e){up.appendChild(Zp("script")).onreadystatechange=function(){up.removeChild(this),gp(e)}}:function(e){setTimeout(Yp(e),0)});var Jp={set:Gp,clear:yp},Up=Jp.clear;al({global:!0,bind:!0,enumerable:!0,forced:o.clearImmediate!==Up},{clearImmediate:Up});var kp=Jp.set;al({global:!0,bind:!0,enumerable:!0,forced:o.setImmediate!==kp},{setImmediate:kp});var Lp=Uc.charAt,Cp=mc,Tp=wi,Hp=vm,xp="String Iterator",wp=Tp.set,Fp=Tp.getterFor(xp);Hp(String,"String",(function(e){wp(this,{type:xp,string:Cp(e),index:0})}),(function(){var e,t=Fp(this),i=t.string,n=t.index;return n>=i.length?{value:void 0,done:!0}:(e=Lp(i,n),t.index+=e.length,{value:e,done:!1})}));var zp=c,Pp=he("iterator"),Bp=!zp((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[Pp]||"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})),jp=me,Qp=b,Mp=Je,Ep=c,Dp=dl,Op=kn,Ap=Rt,_p=X,qp=Ht,$p=Object.assign,eG=Object.defineProperty,tG=Qp([].concat),iG=!$p||Ep((function(){if(jp&&1!==$p({b:1},$p(eG({},"a",{enumerable:!0,get:function(){eG(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!=$p({},e)[i]||Dp($p({},t)).join("")!=n}))?function(e,t){for(var i=_p(e),n=arguments.length,l=1,o=Op.f,a=Ap.f;n>l;)for(var c,r=qp(arguments[l++]),s=o?tG(Dp(r),o(r)):Dp(r),d=s.length,u=0;d>u;)c=s[u++],jp&&!Mp(a,r,c)||(i[c]=r[c]);return i}:$p,nG=Ye,lG=Vo,oG=Ql,aG=Je,cG=X,rG=function(e,t,i,n){try{return n?t(nG(i)[0],i[1]):t(i)}catch(t){lG(e,"throw",t)}},sG=Al,dG=ea,uG=yn,hG=bu,ZG=Go,bG=so,mG=Array,pG=b,GG=2147483647,yG=/[^\0-\u007E]/,XG=/[.\u3002\uFF0E\uFF61]/g,WG="Overflow: input needs wider integers to process",VG=RangeError,IG=pG(XG.exec),SG=Math.floor,RG=String.fromCharCode,fG=pG("".charCodeAt),vG=pG([].join),gG=pG([].push),YG=pG("".replace),KG=pG("".split),NG=pG("".toLowerCase),JG=function(e){return e+22+75*(e<26)},UG=function(e,t,i){var n=0;for(e=i?SG(e/700):e>>1,e+=SG(e/t);e>455;)e=SG(e/35),n+=36;return SG(n+36*e/(e+38))},kG=function(e){var t=[];e=function(e){for(var t=[],i=0,n=e.length;i<n;){var l=fG(e,i++);if(l>=55296&&l<=56319&&i<n){var o=fG(e,i++);56320==(64512&o)?gG(t,((1023&l)<<10)+(1023&o)+65536):(gG(t,l),i--)}else gG(t,l)}return t}(e);var i,n,l=e.length,o=128,a=0,c=72;for(i=0;i<e.length;i++)(n=e[i])<128&&gG(t,RG(n));var r=t.length,s=r;for(r&&gG(t,"-");s<l;){var d=GG;for(i=0;i<e.length;i++)(n=e[i])>=o&&n<d&&(d=n);var u=s+1;if(d-o>SG((GG-a)/u))throw VG(WG);for(a+=(d-o)*u,o=d,i=0;i<e.length;i++){if((n=e[i])<o&&++a>GG)throw VG(WG);if(n==o){for(var h=a,Z=36;;){var b=Z<=c?1:Z>=c+26?26:Z-c;if(h<b)break;var m=h-b,p=36-b;gG(t,RG(JG(b+m%p))),h=SG(m/p),Z+=36}gG(t,RG(JG(h))),c=UG(a,u,s==r),a=0,s++}}a++,o++}return vG(t,"")},LG=al,CG=o,TG=Je,HG=b,xG=me,wG=Bp,FG=nn,zG=Md,PG=oc,BG=hc,jG=wi,QG=Od,MG=w,EG=I,DG=Ql,OG=lo,AG=Ye,_G=Ge,qG=mc,$G=Nl,ey=Yt,ty=Go,iy=so,ny=ip,ly=xb,oy=he("iterator"),ay="URLSearchParams",cy="URLSearchParamsIterator",ry=jG.set,sy=jG.getterFor(ay),dy=jG.getterFor(cy),uy=Object.getOwnPropertyDescriptor,hy=function(e){if(!xG)return CG[e];var t=uy(CG,e);return t&&t.value},Zy=hy("fetch"),by=hy("Request"),my=hy("Headers"),py=by&&by.prototype,Gy=my&&my.prototype,yy=CG.RegExp,Xy=CG.TypeError,Wy=CG.decodeURIComponent,Vy=CG.encodeURIComponent,Iy=HG("".charAt),Sy=HG([].join),Ry=HG([].push),fy=HG("".replace),vy=HG([].shift),gy=HG([].splice),Yy=HG("".split),Ky=HG("".slice),Ny=/\+/g,Jy=Array(4),Uy=function(e){return Jy[e-1]||(Jy[e-1]=yy("((?:%[\\da-f]{2}){"+e+"})","gi"))},ky=function(e){try{return Wy(e)}catch(t){return e}},Ly=function(e){var t=fy(e,Ny," "),i=4;try{return Wy(t)}catch(e){for(;i;)t=fy(t,Uy(i--),ky);return t}},Cy=/[!'()~]|%20/g,Ty={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},Hy=function(e){return Ty[e]},xy=function(e){return fy(Vy(e),Cy,Hy)},wy=BG((function(e,t){ry(this,{type:cy,iterator:ty(sy(e).entries),kind:t})}),"Iterator",(function(){var e=dy(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),Fy=function(e){this.entries=[],this.url=null,void 0!==e&&(_G(e)?this.parseObject(e):this.parseQuery("string"==typeof e?"?"===Iy(e,0)?Ky(e,1):e:qG(e)))};Fy.prototype={type:ay,bindURL:function(e){this.url=e,this.update()},parseObject:function(e){var t,i,n,l,o,a,c,r=iy(e);if(r)for(i=(t=ty(e,r)).next;!(n=TG(i,t)).done;){if(o=(l=ty(AG(n.value))).next,(a=TG(o,l)).done||(c=TG(o,l)).done||!TG(o,l).done)throw Xy("Expected sequence with length 2");Ry(this.entries,{key:qG(a.value),value:qG(c.value)})}else for(var s in e)EG(e,s)&&Ry(this.entries,{key:s,value:qG(e[s])})},parseQuery:function(e){if(e)for(var t,i,n=Yy(e,"&"),l=0;l<n.length;)(t=n[l++]).length&&(i=Yy(t,"="),Ry(this.entries,{key:Ly(vy(i)),value:Ly(Sy(i,"="))}))},serialize:function(){for(var e,t=this.entries,i=[],n=0;n<t.length;)e=t[n++],Ry(i,xy(e.key)+"="+xy(e.value));return Sy(i,"&")},update:function(){this.entries.length=0,this.parseQuery(this.url.query)},updateURL:function(){this.url&&this.url.update()}};var zy=function(){QG(this,Py);var e=arguments.length>0?arguments[0]:void 0;ry(this,new Fy(e))},Py=zy.prototype;if(zG(Py,{append:function(e,t){ny(arguments.length,2);var i=sy(this);Ry(i.entries,{key:qG(e),value:qG(t)}),i.updateURL()},delete:function(e){ny(arguments.length,1);for(var t=sy(this),i=t.entries,n=qG(e),l=0;l<i.length;)i[l].key===n?gy(i,l,1):l++;t.updateURL()},get:function(e){ny(arguments.length,1);for(var t=sy(this).entries,i=qG(e),n=0;n<t.length;n++)if(t[n].key===i)return t[n].value;return null},getAll:function(e){ny(arguments.length,1);for(var t=sy(this).entries,i=qG(e),n=[],l=0;l<t.length;l++)t[l].key===i&&Ry(n,t[l].value);return n},has:function(e){ny(arguments.length,1);for(var t=sy(this).entries,i=qG(e),n=0;n<t.length;)if(t[n++].key===i)return!0;return!1},set:function(e,t){ny(arguments.length,1);for(var i,n=sy(this),l=n.entries,o=!1,a=qG(e),c=qG(t),r=0;r<l.length;r++)(i=l[r]).key===a&&(o?gy(l,r--,1):(o=!0,i.value=c));o||Ry(l,{key:a,value:c}),n.updateURL()},sort:function(){var e=sy(this);ly(e.entries,(function(e,t){return e.key>t.key?1:-1})),e.updateURL()},forEach:function(e){for(var t,i=sy(this).entries,n=DG(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 wy(this,"keys")},values:function(){return new wy(this,"values")},entries:function(){return new wy(this,"entries")}},{enumerable:!0}),FG(Py,oy,Py.entries,{name:"entries"}),FG(Py,"toString",(function(){return sy(this).serialize()}),{enumerable:!0}),PG(zy,ay),LG({global:!0,constructor:!0,forced:!wG},{URLSearchParams:zy}),!wG&&MG(my)){var By=HG(Gy.has),jy=HG(Gy.set),Qy=function(e){if(_G(e)){var t,i=e.body;if(OG(i)===ay)return t=e.headers?new my(e.headers):new my,By(t,"content-type")||jy(t,"content-type","application/x-www-form-urlencoded;charset=UTF-8"),$G(e,{body:ey(0,qG(i)),headers:ey(0,t)})}return e};if(MG(Zy)&&LG({global:!0,enumerable:!0,dontCallGetSet:!0,forced:!0},{fetch:function(e){return Zy(e,arguments.length>1?Qy(arguments[1]):{})}}),MG(by)){var My=function(e){return QG(this,py),new by(e,arguments.length>1?Qy(arguments[1]):{})};py.constructor=My,My.prototype=py,LG({global:!0,constructor:!0,dontCallGetSet:!0,forced:!0},{Request:My})}}var Ey,Dy=al,Oy=me,Ay=Bp,_y=o,qy=Ql,$y=b,eX=nn,tX=Ra,iX=Od,nX=I,lX=iG,oX=function(e){var t=cG(e),i=dG(this),n=arguments.length,l=n>1?arguments[1]:void 0,o=void 0!==l;o&&(l=oG(l,n>2?arguments[2]:void 0));var a,c,r,s,d,u,h=bG(t),Z=0;if(!h||this===mG&&sG(h))for(a=uG(t),c=i?new this(a):mG(a);a>Z;Z++)u=o?l(t[Z],Z):t[Z],hG(c,Z,u);else for(d=(s=ZG(t,h)).next,c=i?new this:[];!(r=aG(d,s)).done;Z++)u=o?rG(s,l,[r.value,Z],!0):r.value,hG(c,Z,u);return c.length=Z,c},aX=Wu,cX=Uc.codeAt,rX=function(e){var t,i,n=[],l=KG(YG(NG(e),XG,"."),".");for(t=0;t<l.length;t++)i=l[t],gG(n,IG(yG,i)?"xn--"+kG(i):i);return vG(n,".")},sX=mc,dX=oc,uX=ip,hX={URLSearchParams:zy,getState:sy},ZX=wi,bX=ZX.set,mX=ZX.getterFor("URL"),pX=hX.URLSearchParams,GX=hX.getState,yX=_y.URL,XX=_y.TypeError,WX=_y.parseInt,VX=Math.floor,IX=Math.pow,SX=$y("".charAt),RX=$y(/./.exec),fX=$y([].join),vX=$y(1..toString),gX=$y([].pop),YX=$y([].push),KX=$y("".replace),NX=$y([].shift),JX=$y("".split),UX=$y("".slice),kX=$y("".toLowerCase),LX=$y([].unshift),CX="Invalid scheme",TX="Invalid host",HX="Invalid port",xX=/[a-z]/i,wX=/[\d+-.a-z]/i,FX=/\d/,zX=/^0x/i,PX=/^[0-7]+$/,BX=/^\d+$/,jX=/^[\da-f]+$/i,QX=/[\0\t\n\r #%/:<>?@[\\\]^|]/,MX=/[\0\t\n\r #/:<>?@[\\\]^|]/,EX=/^[\u0000-\u0020]+|[\u0000-\u0020]+$/g,DX=/[\t\n\r]/g,OX=function(e){var t,i,n,l;if("number"==typeof e){for(t=[],i=0;i<4;i++)LX(t,e%256),e=VX(e/256);return fX(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+=vX(e[i],16),i<7&&(t+=":")));return"["+t+"]"}return e},AX={},_X=lX({},AX,{" ":1,'"':1,"<":1,">":1,"`":1}),qX=lX({},_X,{"#":1,"?":1,"{":1,"}":1}),$X=lX({},qX,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),eW=function(e,t){var i=cX(e,0);return i>32&&i<127&&!nX(t,e)?e:encodeURIComponent(e)},tW={ftp:21,file:null,http:80,https:443,ws:80,wss:443},iW=function(e,t){var i;return 2==e.length&&RX(xX,SX(e,0))&&(":"==(i=SX(e,1))||!t&&"|"==i)},nW=function(e){var t;return e.length>1&&iW(UX(e,0,2))&&(2==e.length||"/"===(t=SX(e,2))||"\\"===t||"?"===t||"#"===t)},lW=function(e){return"."===e||"%2e"===kX(e)},oW={},aW={},cW={},rW={},sW={},dW={},uW={},hW={},ZW={},bW={},mW={},pW={},GW={},yW={},XW={},WW={},VW={},IW={},SW={},RW={},fW={},vW=function(e,t,i){var n,l,o,a=sX(e);if(t){if(l=this.parse(a))throw XX(l);this.searchParams=null}else{if(void 0!==i&&(n=new vW(i,!0)),l=this.parse(a,null,n))throw XX(l);(o=GX(new pX)).bindURL(this),this.searchParams=o}};vW.prototype={type:"URL",parse:function(e,t,i){var n,l,o,a,c,r=this,s=t||oW,d=0,u="",h=!1,Z=!1,b=!1;for(e=sX(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=KX(e,EX,"")),e=KX(e,DX,""),n=oX(e);d<=n.length;){switch(l=n[d],s){case oW:if(!l||!RX(xX,l)){if(t)return CX;s=cW;continue}u+=kX(l),s=aW;break;case aW:if(l&&(RX(wX,l)||"+"==l||"-"==l||"."==l))u+=kX(l);else{if(":"!=l){if(t)return CX;u="",s=cW,d=0;continue}if(t&&(r.isSpecial()!=nX(tW,u)||"file"==u&&(r.includesCredentials()||null!==r.port)||"file"==r.scheme&&!r.host))return;if(r.scheme=u,t)return void(r.isSpecial()&&tW[r.scheme]==r.port&&(r.port=null));u="","file"==r.scheme?s=yW:r.isSpecial()&&i&&i.scheme==r.scheme?s=rW:r.isSpecial()?s=hW:"/"==n[d+1]?(s=sW,d++):(r.cannotBeABaseURL=!0,YX(r.path,""),s=SW)}break;case cW:if(!i||i.cannotBeABaseURL&&"#"!=l)return CX;if(i.cannotBeABaseURL&&"#"==l){r.scheme=i.scheme,r.path=aX(i.path),r.query=i.query,r.fragment="",r.cannotBeABaseURL=!0,s=fW;break}s="file"==i.scheme?yW:dW;continue;case rW:if("/"!=l||"/"!=n[d+1]){s=dW;continue}s=ZW,d++;break;case sW:if("/"==l){s=bW;break}s=IW;continue;case dW:if(r.scheme=i.scheme,l==Ey)r.username=i.username,r.password=i.password,r.host=i.host,r.port=i.port,r.path=aX(i.path),r.query=i.query;else if("/"==l||"\\"==l&&r.isSpecial())s=uW;else if("?"==l)r.username=i.username,r.password=i.password,r.host=i.host,r.port=i.port,r.path=aX(i.path),r.query="",s=RW;else{if("#"!=l){r.username=i.username,r.password=i.password,r.host=i.host,r.port=i.port,r.path=aX(i.path),r.path.length--,s=IW;continue}r.username=i.username,r.password=i.password,r.host=i.host,r.port=i.port,r.path=aX(i.path),r.query=i.query,r.fragment="",s=fW}break;case uW:if(!r.isSpecial()||"/"!=l&&"\\"!=l){if("/"!=l){r.username=i.username,r.password=i.password,r.host=i.host,r.port=i.port,s=IW;continue}s=bW}else s=ZW;break;case hW:if(s=ZW,"/"!=l||"/"!=SX(u,d+1))continue;d++;break;case ZW:if("/"!=l&&"\\"!=l){s=bW;continue}break;case bW:if("@"==l){h&&(u="%40"+u),h=!0,o=oX(u);for(var m=0;m<o.length;m++){var p=o[m];if(":"!=p||b){var G=eW(p,$X);b?r.password+=G:r.username+=G}else b=!0}u=""}else if(l==Ey||"/"==l||"?"==l||"#"==l||"\\"==l&&r.isSpecial()){if(h&&""==u)return"Invalid authority";d-=oX(u).length+1,u="",s=mW}else u+=l;break;case mW:case pW:if(t&&"file"==r.scheme){s=WW;continue}if(":"!=l||Z){if(l==Ey||"/"==l||"?"==l||"#"==l||"\\"==l&&r.isSpecial()){if(r.isSpecial()&&""==u)return TX;if(t&&""==u&&(r.includesCredentials()||null!==r.port))return;if(a=r.parseHost(u))return a;if(u="",s=VW,t)return;continue}"["==l?Z=!0:"]"==l&&(Z=!1),u+=l}else{if(""==u)return TX;if(a=r.parseHost(u))return a;if(u="",s=GW,t==pW)return}break;case GW:if(!RX(FX,l)){if(l==Ey||"/"==l||"?"==l||"#"==l||"\\"==l&&r.isSpecial()||t){if(""!=u){var y=WX(u,10);if(y>65535)return HX;r.port=r.isSpecial()&&y===tW[r.scheme]?null:y,u=""}if(t)return;s=VW;continue}return HX}u+=l;break;case yW:if(r.scheme="file","/"==l||"\\"==l)s=XW;else{if(!i||"file"!=i.scheme){s=IW;continue}if(l==Ey)r.host=i.host,r.path=aX(i.path),r.query=i.query;else if("?"==l)r.host=i.host,r.path=aX(i.path),r.query="",s=RW;else{if("#"!=l){nW(fX(aX(n,d),""))||(r.host=i.host,r.path=aX(i.path),r.shortenPath()),s=IW;continue}r.host=i.host,r.path=aX(i.path),r.query=i.query,r.fragment="",s=fW}}break;case XW:if("/"==l||"\\"==l){s=WW;break}i&&"file"==i.scheme&&!nW(fX(aX(n,d),""))&&(iW(i.path[0],!0)?YX(r.path,i.path[0]):r.host=i.host),s=IW;continue;case WW:if(l==Ey||"/"==l||"\\"==l||"?"==l||"#"==l){if(!t&&iW(u))s=IW;else if(""==u){if(r.host="",t)return;s=VW}else{if(a=r.parseHost(u))return a;if("localhost"==r.host&&(r.host=""),t)return;u="",s=VW}continue}u+=l;break;case VW:if(r.isSpecial()){if(s=IW,"/"!=l&&"\\"!=l)continue}else if(t||"?"!=l)if(t||"#"!=l){if(l!=Ey&&(s=IW,"/"!=l))continue}else r.fragment="",s=fW;else r.query="",s=RW;break;case IW:if(l==Ey||"/"==l||"\\"==l&&r.isSpecial()||!t&&("?"==l||"#"==l)){if(".."===(c=kX(c=u))||"%2e."===c||".%2e"===c||"%2e%2e"===c?(r.shortenPath(),"/"==l||"\\"==l&&r.isSpecial()||YX(r.path,"")):lW(u)?"/"==l||"\\"==l&&r.isSpecial()||YX(r.path,""):("file"==r.scheme&&!r.path.length&&iW(u)&&(r.host&&(r.host=""),u=SX(u,0)+":"),YX(r.path,u)),u="","file"==r.scheme&&(l==Ey||"?"==l||"#"==l))for(;r.path.length>1&&""===r.path[0];)NX(r.path);"?"==l?(r.query="",s=RW):"#"==l&&(r.fragment="",s=fW)}else u+=eW(l,qX);break;case SW:"?"==l?(r.query="",s=RW):"#"==l?(r.fragment="",s=fW):l!=Ey&&(r.path[0]+=eW(l,AX));break;case RW:t||"#"!=l?l!=Ey&&("'"==l&&r.isSpecial()?r.query+="%27":r.query+="#"==l?"%23":eW(l,AX)):(r.fragment="",s=fW);break;case fW:l!=Ey&&(r.fragment+=eW(l,_X))}d++}},parseHost:function(e){var t,i,n;if("["==SX(e,0)){if("]"!=SX(e,e.length-1))return TX;if(t=function(e){var t,i,n,l,o,a,c,r=[0,0,0,0,0,0,0,0],s=0,d=null,u=0,h=function(){return SX(e,u)};if(":"==h()){if(":"!=SX(e,1))return;u+=2,d=++s}for(;h();){if(8==s)return;if(":"!=h()){for(t=i=0;i<4&&RX(jX,h());)t=16*t+WX(h(),16),u++,i++;if("."==h()){if(0==i)return;if(u-=i,s>6)return;for(n=0;h();){if(l=null,n>0){if(!("."==h()&&n<4))return;u++}if(!RX(FX,h()))return;for(;RX(FX,h());){if(o=WX(h(),10),null===l)l=o;else{if(0==l)return;l=10*l+o}if(l>255)return;u++}r[s]=256*r[s]+l,2!=++n&&4!=n||s++}if(4!=n)return;break}if(":"==h()){if(u++,!h())return}else if(h())return;r[s++]=t}else{if(null!==d)return;u++,d=++s}}if(null!==d)for(a=s-d,s=7;0!=s&&a>0;)c=r[s],r[s--]=r[d+a-1],r[d+--a]=c;else if(8!=s)return;return r}(UX(e,1,-1)),!t)return TX;this.host=t}else if(this.isSpecial()){if(e=rX(e),RX(QX,e))return TX;if(t=function(e){var t,i,n,l,o,a,c,r=JX(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"==SX(l,0)&&(o=RX(zX,l)?16:8,l=UX(l,8==o?1:2)),""===l)a=0;else{if(!RX(10==o?BX:8==o?PX:jX,l))return e;a=WX(l,o)}YX(i,a)}for(n=0;n<t;n++)if(a=i[n],n==t-1){if(a>=IX(256,5-t))return null}else if(a>255)return null;for(c=gX(i),n=0;n<i.length;n++)c+=i[n]*IX(256,3-n);return c}(e),null===t)return TX;this.host=t}else{if(RX(MX,e))return TX;for(t="",i=oX(e),n=0;n<i.length;n++)t+=eW(i[n],AX);this.host=t}},cannotHaveUsernamePasswordPort:function(){return!this.host||this.cannotBeABaseURL||"file"==this.scheme},includesCredentials:function(){return""!=this.username||""!=this.password},isSpecial:function(){return nX(tW,this.scheme)},shortenPath:function(){var e=this.path,t=e.length;!t||"file"==this.scheme&&1==t&&iW(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,a=e.path,c=e.query,r=e.fragment,s=t+":";return null!==l?(s+="//",e.includesCredentials()&&(s+=i+(n?":"+n:"")+"@"),s+=OX(l),null!==o&&(s+=":"+o)):"file"==t&&(s+="//"),s+=e.cannotBeABaseURL?a[0]:a.length?"/"+fX(a,"/"):"",null!==c&&(s+="?"+c),null!==r&&(s+="#"+r),s},setHref:function(e){var t=this.parse(e);if(t)throw XX(t);this.searchParams.update()},getOrigin:function(){var e=this.scheme,t=this.port;if("blob"==e)try{return new gW(e.path[0]).origin}catch(e){return"null"}return"file"!=e&&this.isSpecial()?e+"://"+OX(this.host)+(null!==t?":"+t:""):"null"},getProtocol:function(){return this.scheme+":"},setProtocol:function(e){this.parse(sX(e)+":",oW)},getUsername:function(){return this.username},setUsername:function(e){var t=oX(sX(e));if(!this.cannotHaveUsernamePasswordPort()){this.username="";for(var i=0;i<t.length;i++)this.username+=eW(t[i],$X)}},getPassword:function(){return this.password},setPassword:function(e){var t=oX(sX(e));if(!this.cannotHaveUsernamePasswordPort()){this.password="";for(var i=0;i<t.length;i++)this.password+=eW(t[i],$X)}},getHost:function(){var e=this.host,t=this.port;return null===e?"":null===t?OX(e):OX(e)+":"+t},setHost:function(e){this.cannotBeABaseURL||this.parse(e,mW)},getHostname:function(){var e=this.host;return null===e?"":OX(e)},setHostname:function(e){this.cannotBeABaseURL||this.parse(e,pW)},getPort:function(){var e=this.port;return null===e?"":sX(e)},setPort:function(e){this.cannotHaveUsernamePasswordPort()||(""==(e=sX(e))?this.port=null:this.parse(e,GW))},getPathname:function(){var e=this.path;return this.cannotBeABaseURL?e[0]:e.length?"/"+fX(e,"/"):""},setPathname:function(e){this.cannotBeABaseURL||(this.path=[],this.parse(e,VW))},getSearch:function(){var e=this.query;return e?"?"+e:""},setSearch:function(e){""==(e=sX(e))?this.query=null:("?"==SX(e,0)&&(e=UX(e,1)),this.query="",this.parse(e,RW)),this.searchParams.update()},getSearchParams:function(){return this.searchParams.facade},getHash:function(){var e=this.fragment;return e?"#"+e:""},setHash:function(e){""!=(e=sX(e))?("#"==SX(e,0)&&(e=UX(e,1)),this.fragment="",this.parse(e,fW)):this.fragment=null},update:function(){this.query=this.searchParams.serialize()||null}};var gW=function(e){var t=iX(this,YW),i=uX(arguments.length,1)>1?arguments[1]:void 0,n=bX(t,new vW(e,!1,i));Oy||(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())},YW=gW.prototype,KW=function(e,t){return{get:function(){return mX(this)[e]()},set:t&&function(e){return mX(this)[t](e)},configurable:!0,enumerable:!0}};if(Oy&&(tX(YW,"href",KW("serialize","setHref")),tX(YW,"origin",KW("getOrigin")),tX(YW,"protocol",KW("getProtocol","setProtocol")),tX(YW,"username",KW("getUsername","setUsername")),tX(YW,"password",KW("getPassword","setPassword")),tX(YW,"host",KW("getHost","setHost")),tX(YW,"hostname",KW("getHostname","setHostname")),tX(YW,"port",KW("getPort","setPort")),tX(YW,"pathname",KW("getPathname","setPathname")),tX(YW,"search",KW("getSearch","setSearch")),tX(YW,"searchParams",KW("getSearchParams")),tX(YW,"hash",KW("getHash","setHash"))),eX(YW,"toJSON",(function(){return mX(this).serialize()}),{enumerable:!0}),eX(YW,"toString",(function(){return mX(this).serialize()}),{enumerable:!0}),yX){var NW=yX.createObjectURL,JW=yX.revokeObjectURL;NW&&eX(gW,"createObjectURL",qy(NW,yX)),JW&&eX(gW,"revokeObjectURL",qy(JW,yX))}dX(gW,"URL"),Dy({global:!0,constructor:!0,forced:!Ay,sham:!Oy},{URL:gW});var UW=Je;function kW(e,t,i,n){return new(i||(i=Promise))((function(l,o){function a(e){try{r(n.next(e))}catch(e){o(e)}}function c(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(a,c)}r((n=n.apply(e,t||[])).next())}))}function LW(e,t,i,n){return new(i||(i=Promise))((function(l,o){function a(e){try{r(n.next(e))}catch(e){o(e)}}function c(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(a,c)}r((n=n.apply(e,t||[])).next())}))}al({target:"URL",proto:!0,enumerable:!0},{toJSON:function(){return UW(URL.prototype.toString,this)}}),e.ResponseMode=void 0,function(e){e.formPost="form_post",e.query="query",e.direct="direct"}(e.ResponseMode||(e.ResponseMode={}));e.Stores=void 0,function(e){e.ConfigData="config_data",e.OIDCProviderMetaData="oidc_provider_meta_data",e.SessionData="session_data",e.TemporaryData="temporary_data"}(e.Stores||(e.Stores={}));const CW="refresh_token_timer",TW=["RS256","RS512","RS384","PS256"],HW="code",xW="session_state",wW="sign_out_url",FW="sign_out_success",zW="state";var PW;!function(e){e.Include="include",e.SameOrigin="same-origin",e.Omit="omit"}(PW||(PW={}));class BW{constructor(e,t,i){this.message=i,this.name=t,this.code=e,Object.setPrototypeOf(this,new.target.prototype)}}class jW{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]))}}jW.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 QW{constructor(e,t){this._dataLayer=e,this._config=()=>LW(this,void 0,void 0,(function*(){return yield this._dataLayer.getConfigData()})),this._oidcProviderMetaData=()=>LW(this,void 0,void 0,(function*(){return yield this._dataLayer.getOIDCProviderMetaData()})),this._cryptoHelper=t}resolveEndpoints(e){return LW(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 LW(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 BW("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 LW(this,void 0,void 0,(function*(){const e={},t=yield this._config(),i=t.baseUrl;if(!i)throw new BW("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 LW(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 BW("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?PW.Include:PW.SameOrigin})}catch(i){throw new BW("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 BW("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:a}=yield l.json(),c=yield this._cryptoHelper.getJWKForTheIdToken(e.split(".")[0],a);return this._cryptoHelper.isValidIdToken(e,c,(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),a=jW.getTenantDomainFromIdTokenPayload(o),c=null!==(t=null==o?void 0:o.username)&&void 0!==t?t:"",r=null!==(i=o.given_name)&&void 0!==i?i:"",s=null!==(n=o.family_name)&&void 0!==n?n:"",d=r&&s?"".concat(r," ").concat(s):r||s||"",u=null!==(l=o.preferred_username)&&void 0!==l?l:d;return Object.assign({displayName:u,tenantDomain:a,username:c},jW.filterClaimsFromIDTokenPayload(o))}replaceCustomGrantTemplateTags(e,t){var i;return LW(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 LW(this,void 0,void 0,(function*(){yield this._dataLayer.removeTemporaryData(e),yield this._dataLayer.removeSessionData(e)}))}handleTokenResponse(e,t){return LW(this,void 0,void 0,(function*(){if(200!==e.status||!e.ok)throw new BW("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((()=>LW(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 LW(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 MW{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 BW("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,a){return this._cryptoUtils.verifyJwt(e,t,TW,i,n,l,o,a).then((e=>e?Promise.resolve(!0):Promise.reject(new BW("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 BW("JS-CRYPTO_UTIL-DIT-IV01","Decoding ID token failed.",e)}}}class EW{constructor(e,t){this._cryptoUtils=t,this._cryptoHelper=new MW(t),this._authenticationHelper=new QW(e,this._cryptoHelper),this._dataLayer=e,this._config=()=>LW(this,void 0,void 0,(function*(){return yield this._dataLayer.getConfigData()})),this._oidcProviderMetaData=()=>LW(this,void 0,void 0,(function*(){return yield this._dataLayer.getOIDCProviderMetaData()}))}getAuthorizationURLParams(e,t){var i,n,l;return LW(this,void 0,void 0,(function*(){const o=yield this._config(),a=new Map;a.set("response_type","code"),a.set("client_id",o.clientID),o.clientSecret&&o.clientSecret.trim().length>0&&a.set("client_secret",o.clientSecret);let c="openid";o.scope&&o.scope.length>0&&(o.scope.includes("openid")||o.scope.push("openid"),c=o.scope.join(" ")),a.set("scope",c),a.set("redirect_uri",o.signInRedirectURL),o.responseMode&&a.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),a.set("code_challenge_method","S256"),a.set("code_challenge",l)}o.prompt&&a.set("prompt",o.prompt);const s=e;if(s)for(const[e,t]of Object.entries(s))""!=e&&""!=t&&"state"!==e&&a.set(e,t.toString());return a.set("state",jW.generateStateParamForRequestCorrelation(r,s?null===(l=s.state)||void 0===l?void 0:l.toString():"")),a}))}getAuthorizationURL(e,t){return LW(this,void 0,void 0,(function*(){const i=yield this._dataLayer.getOIDCProviderMetaDataParameter("authorization_endpoint");if(!i||0===i.trim().length)throw new BW("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 LW(this,void 0,void 0,(function*(){const o=(yield this._oidcProviderMetaData()).token_endpoint,a=yield this._config();if(!o||0===o.trim().length)throw new BW("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 c=new URLSearchParams;c.set("client_id",a.clientID),a.clientSecret&&a.clientSecret.trim().length>0&&c.set("client_secret",a.clientSecret);const r=e;let s;c.set("code",r),c.set("grant_type","authorization_code"),c.set("redirect_uri",a.signInRedirectURL),(null==l?void 0:l.params)&&Object.entries(l.params).forEach((e=>{let[t,i]=e;c.append(t,i)})),a.enablePKCE&&(c.set("code_verifier","".concat(yield this._dataLayer.getTemporaryDataParameter(jW.extractPKCEKeyFromStateParam(i),n))),yield this._dataLayer.removeTemporaryDataParameter(jW.extractPKCEKeyFromStateParam(i),n));try{s=yield fetch(o,{body:c,credentials:a.sendCookiesInRequests?PW.Include:PW.SameOrigin,headers:new Headers(jW.getTokenRequestHeaders()),method:"POST"})}catch(o){throw new BW("JS-AUTH_CORE-RAT1-NE02","Requesting access token failed",null!=o?o:"The request to get the access token from the server failed.")}if(!s.ok)throw new BW("JS-AUTH_CORE-RAT1-HE03","Requesting access token failed with ".concat(s.statusText),yield s.json());return yield this._authenticationHelper.handleTokenResponse(s,n)}))}refreshAccessToken(e){return LW(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 BW("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 BW("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?PW.Include:PW.SameOrigin,headers:new Headers(jW.getTokenRequestHeaders()),method:"POST"})}catch(t){throw new BW("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 BW("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 LW(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 BW("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?PW.Include:PW.SameOrigin,headers:new Headers(jW.getTokenRequestHeaders()),method:"POST"})}catch(t){throw new BW("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 BW("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 LW(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 BW("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 LW(this,void 0,void 0,(function*(){const e=yield this._authenticationHelper.replaceCustomGrantTemplateTags(n,t);return"".concat(i,"=").concat(e)}))})));let a=Object.assign({},jW.getTokenRequestHeaders());e.attachToken&&(a=Object.assign(Object.assign({},a),{Authorization:"Bearer ".concat((yield this._dataLayer.getSessionData(t)).access_token)}));const c={body:o.join("&"),credentials:n.sendCookiesInRequests?PW.Include:PW.SameOrigin,headers:new Headers(a),method:"POST"};let r;try{r=yield fetch(l,c)}catch(e){throw new BW("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 BW("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 LW(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 LW(this,void 0,void 0,(function*(){const t=(yield this._dataLayer.getSessionData(e)).id_token;return this._cryptoHelper.decodeIDToken(t)}))}getCryptoHelper(){return LW(this,void 0,void 0,(function*(){return this._cryptoHelper}))}getIDToken(e){return LW(this,void 0,void 0,(function*(){return(yield this._dataLayer.getSessionData(e)).id_token}))}getOIDCProviderMetaData(e){return LW(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 BW("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 BW("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,a,c,r,s;return LW(this,void 0,void 0,(function*(){const d=yield this._oidcProviderMetaData();return{authorizationEndpoint:null!==(e=d.authorization_endpoint)&&void 0!==e?e:"",checkSessionIframe:null!==(t=d.check_session_iframe)&&void 0!==t?t:"",endSessionEndpoint:null!==(i=d.end_session_endpoint)&&void 0!==i?i:"",introspectionEndpoint:null!==(n=d.introspection_endpoint)&&void 0!==n?n:"",issuer:null!==(l=d.issuer)&&void 0!==l?l:"",jwksUri:null!==(o=d.jwks_uri)&&void 0!==o?o:"",registrationEndpoint:null!==(a=d.registration_endpoint)&&void 0!==a?a:"",revocationEndpoint:null!==(c=d.revocation_endpoint)&&void 0!==c?c:"",tokenEndpoint:null!==(r=d.token_endpoint)&&void 0!==r?r:"",userinfoEndpoint:null!==(s=d.userinfo_endpoint)&&void 0!==s?s:""}}))}getSignOutURL(e){var t,i,n;return LW(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 BW("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 a=null!==(i=null==o?void 0:o.signOutRedirectURL)&&void 0!==i?i:null==o?void 0:o.signInRedirectURL;if(!a||0===a.trim().length)throw new BW("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 c=new URLSearchParams;if(c.set("post_logout_redirect_uri",a),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 BW("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.");c.set("id_token_hint",t)}else c.set("client_id",o.clientID);return c.set("state","sign_out_success"),"".concat(l,"?").concat(c.toString())}))}clearUserSessionData(e){return LW(this,void 0,void 0,(function*(){yield this._authenticationHelper.clearUserSessionData(e)}))}getAccessToken(e){var t;return LW(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 LW(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 LW(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 LW(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 LW(this,void 0,void 0,(function*(){return yield this._dataLayer.getTemporaryDataParameter(jW.extractPKCEKeyFromStateParam(e),t)}))}setPKCECode(e,t,i){return LW(this,void 0,void 0,(function*(){return yield this._dataLayer.setTemporaryDataParameter(jW.extractPKCEKeyFromStateParam(t),e,i)}))}updateConfig(e){return LW(this,void 0,void 0,(function*(){yield this._dataLayer.setConfigData(e),yield this.getOIDCProviderMetaData(!0)}))}}class DW{constructor(e,t){this._id=e,this._store=t}setDataInBulk(e,t){var i;return LW(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),a=JSON.stringify(o);yield this._store.setData(e,a)}))}setValue(e,t,i){var n;return LW(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),a=Object.assign(Object.assign({},o),{[t]:i}),c=JSON.stringify(a);yield this._store.setData(e,c)}))}removeValue(e,t){var i;return LW(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 a=JSON.stringify(o);yield this._store.setData(e,a)}))}_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(t){return LW(this,void 0,void 0,(function*(){yield this.setDataInBulk(this._resolveKey(e.Stores.ConfigData),t)}))}setOIDCProviderMetaData(t){return LW(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(e.Stores.OIDCProviderMetaData),t)}))}setTemporaryData(t,i){return LW(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(e.Stores.TemporaryData,i),t)}))}setSessionData(t,i){return LW(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(e.Stores.SessionData,i),t)}))}setCustomData(e,t,i){return LW(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(e,i),t)}))}getConfigData(){var t;return LW(this,void 0,void 0,(function*(){return JSON.parse(null!==(t=yield this._store.getData(this._resolveKey(e.Stores.ConfigData)))&&void 0!==t?t:null)}))}getOIDCProviderMetaData(){var t;return LW(this,void 0,void 0,(function*(){return JSON.parse(null!==(t=yield this._store.getData(this._resolveKey(e.Stores.OIDCProviderMetaData)))&&void 0!==t?t:null)}))}getTemporaryData(t){var i;return LW(this,void 0,void 0,(function*(){return JSON.parse(null!==(i=yield this._store.getData(this._resolveKey(e.Stores.TemporaryData,t)))&&void 0!==i?i:null)}))}getSessionData(t){var i;return LW(this,void 0,void 0,(function*(){return JSON.parse(null!==(i=yield this._store.getData(this._resolveKey(e.Stores.SessionData,t)))&&void 0!==i?i:null)}))}getCustomData(e,t){var i;return LW(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 LW(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(e.Stores.ConfigData))}))}removeOIDCProviderMetaData(){return LW(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(e.Stores.OIDCProviderMetaData))}))}removeTemporaryData(t){return LW(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(e.Stores.TemporaryData,t))}))}removeSessionData(t){return LW(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(e.Stores.SessionData,t))}))}getConfigDataParameter(t){return LW(this,void 0,void 0,(function*(){const i=yield this._store.getData(this._resolveKey(e.Stores.ConfigData));return i&&JSON.parse(i)[t]}))}getOIDCProviderMetaDataParameter(t){return LW(this,void 0,void 0,(function*(){const i=yield this._store.getData(this._resolveKey(e.Stores.OIDCProviderMetaData));return i&&JSON.parse(i)[t]}))}getTemporaryDataParameter(t,i){return LW(this,void 0,void 0,(function*(){const n=yield this._store.getData(this._resolveKey(e.Stores.TemporaryData,i));return n&&JSON.parse(n)[t]}))}getSessionDataParameter(t,i){return LW(this,void 0,void 0,(function*(){const n=yield this._store.getData(this._resolveKey(e.Stores.SessionData,i));return n&&JSON.parse(n)[t]}))}setConfigDataParameter(t,i){return LW(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(e.Stores.ConfigData),t,i)}))}setOIDCProviderMetaDataParameter(t,i){return LW(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(e.Stores.OIDCProviderMetaData),t,i)}))}setTemporaryDataParameter(t,i,n){return LW(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(e.Stores.TemporaryData,n),t,i)}))}setSessionDataParameter(t,i,n){return LW(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(e.Stores.SessionData,n),t,i)}))}removeConfigDataParameter(t){return LW(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(e.Stores.ConfigData),t)}))}removeOIDCProviderMetaDataParameter(t){return LW(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(e.Stores.OIDCProviderMetaData),t)}))}removeTemporaryDataParameter(t,i){return LW(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(e.Stores.TemporaryData,i),t)}))}removeSessionDataParameter(t,i){return LW(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(e.Stores.SessionData,i),t)}))}}const OW={clockTolerance:300,enablePKCE:!0,responseMode:e.ResponseMode.query,scope:["openid"],sendCookiesInRequests:!0,validateIDToken:!0,validateIDTokenIssuer:!0};class AW{constructor(){}initialize(e,t,i,n){var l,o,a;return LW(this,void 0,void 0,(function*(){const c=e.clientID;AW._instanceID?AW._instanceID+=1:AW._instanceID=0,n&&(AW._instanceID=n),this._dataLayer=new DW(c?"instance_".concat(AW._instanceID,"-").concat(c):"instance_".concat(AW._instanceID),t),this._authenticationCore=new EW(this._dataLayer,i),AW._authenticationCore=new EW(this._dataLayer,i),yield this._dataLayer.setConfigData(Object.assign(Object.assign(Object.assign({},OW),e),{scope:[...null!==(l=OW.scope)&&void 0!==l?l:[],...null!==(a=null===(o=e.scope)||void 0===o?void 0:o.filter((e=>{var t;return!(null===(t=null==OW?void 0:OW.scope)||void 0===t?void 0:t.includes(e))})))&&void 0!==a?a:[]]}))}))}getDataLayer(){return this._dataLayer}getInstanceID(){return AW._instanceID}getAuthorizationURLParams(e,t){return LW(this,void 0,void 0,(function*(){const i=Object.assign({},e);return null==i||delete i.forceInit,(yield this._dataLayer.getTemporaryDataParameter("op_config_initiated"))?this._authenticationCore.getAuthorizationURLParams(i,t):this._authenticationCore.getOIDCProviderMetaData(null==e?void 0:e.forceInit).then((()=>this._authenticationCore.getAuthorizationURLParams(i,t)))}))}getAuthorizationURL(e,t){return LW(this,void 0,void 0,(function*(){const i=Object.assign({},e);return null==i||delete i.forceInit,(yield this._dataLayer.getTemporaryDataParameter("op_config_initiated"))?this._authenticationCore.getAuthorizationURL(i,t):this._authenticationCore.getOIDCProviderMetaData(null==e?void 0:e.forceInit).then((()=>this._authenticationCore.getAuthorizationURL(i,t)))}))}requestAccessToken(e,t,i,n,l){return LW(this,void 0,void 0,(function*(){return(yield this._dataLayer.getTemporaryDataParameter("op_config_initiated"))?this._authenticationCore.requestAccessToken(e,t,i,n,l):this._authenticationCore.getOIDCProviderMetaData(!1).then((()=>this._authenticationCore.requestAccessToken(e,t,i,n,l)))}))}getSignOutURL(e){return LW(this,void 0,void 0,(function*(){return this._authenticationCore.getSignOutURL(e)}))}getOIDCServiceEndpoints(){return LW(this,void 0,void 0,(function*(){return this._authenticationCore.getOIDCServiceEndpoints()}))}getDecodedIDToken(e){return LW(this,void 0,void 0,(function*(){return this._authenticationCore.getDecodedIDToken(e)}))}getIDToken(e){return LW(this,void 0,void 0,(function*(){return this._authenticationCore.getIDToken(e)}))}getBasicUserInfo(e){return LW(this,void 0,void 0,(function*(){return this._authenticationCore.getBasicUserInfo(e)}))}getCryptoHelper(){return LW(this,void 0,void 0,(function*(){return this._authenticationCore.getCryptoHelper()}))}revokeAccessToken(e){return this._authenticationCore.revokeAccessToken(e)}refreshAccessToken(e){return this._authenticationCore.refreshAccessToken(e)}getAccessToken(e){return LW(this,void 0,void 0,(function*(){return this._authenticationCore.getAccessToken(e)}))}requestCustomGrant(e,t){return this._authenticationCore.requestCustomGrant(e,t)}isAuthenticated(e){return LW(this,void 0,void 0,(function*(){return this._authenticationCore.isAuthenticated(e)}))}getPKCECode(e,t){return LW(this,void 0,void 0,(function*(){return this._authenticationCore.getPKCECode(e,t)}))}setPKCECode(e,t,i){return LW(this,void 0,void 0,(function*(){yield this._authenticationCore.setPKCECode(e,t,i)}))}static isSignOutSuccessful(e){const t=new URL(e),i=t.searchParams.get("state"),n=Boolean(t.searchParams.get("error"));return!!i&&"sign_out_success"===i&&!n}static didSignOutFail(e){const t=new URL(e),i=t.searchParams.get("state"),n=Boolean(t.searchParams.get("error"));return!!i&&"sign_out_success"===i&&n}updateConfig(e){return LW(this,void 0,void 0,(function*(){yield this._authenticationCore.updateConfig(e)}))}static clearUserSessionData(e){return LW(this,void 0,void 0,(function*(){yield this._authenticationCore.clearUserSessionData(e)}))}}function _W(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,a=l.substring(o)+(n?"//# sourceMappingURL="+n:""),c=new Blob([a],{type:"application/javascript"});return URL.createObjectURL(c)}var qW,$W,eV,tV,iV=(qW="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/cjpudWxsKX0pKX1zZXRTZXNzaW9uU3RhdHVzKGUpe3RoaXMuaXNMb2NhbFN0b3JhZ2VBdmFpbGFibGUoKSYmbG9jYWxTdG9yYWdlLnNldEl0ZW0oImFzZ2FyZGVvLXNlc3Npb24tYWN0aXZlIixlKX1nZXRTZXNzaW9uU3RhdHVzKCl7dmFyIGU7cmV0dXJuIHRoaXMuaXNMb2NhbFN0b3JhZ2VBdmFpbGFibGUoKSYmbnVsbCE9PShlPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJhc2dhcmRlby1zZXNzaW9uLWFjdGl2ZSIpKSYmdm9pZCAwIT09ZT9lOiIifXJlbW92ZVNlc3Npb25TdGF0dXMoKXt0aGlzLmlzTG9jYWxTdG9yYWdlQXZhaWxhYmxlKCkmJmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCJhc2dhcmRlby1zZXNzaW9uLWFjdGl2ZSIpfXJlbW92ZUNvbmZpZ0RhdGEoKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleShyLkNvbmZpZ0RhdGEpKX0pKX1yZW1vdmVPSURDUHJvdmlkZXJNZXRhRGF0YSgpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fc3RvcmUucmVtb3ZlRGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpKX0pKX1yZW1vdmVUZW1wb3JhcnlEYXRhKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fc3RvcmUucmVtb3ZlRGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuVGVtcG9yYXJ5RGF0YSxlKSl9KSl9cmVtb3ZlU2Vzc2lvbkRhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5TZXNzaW9uRGF0YSxlKSl9KSl9Z2V0Q29uZmlnRGF0YVBhcmFtZXRlcihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuQ29uZmlnRGF0YSkpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfWdldE9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5PSURDUHJvdmlkZXJNZXRhRGF0YSkpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfWdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuVGVtcG9yYXJ5RGF0YSxuKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9Z2V0U2Vzc2lvbkRhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuU2Vzc2lvbkRhdGEsbikpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfXNldENvbmZpZ0RhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLkNvbmZpZ0RhdGEpLGUsbil9KSl9c2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLk9JRENQcm92aWRlck1ldGFEYXRhKSxlLG4pfSkpfXNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoZSxuLGkpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KHIuVGVtcG9yYXJ5RGF0YSxpKSxlLG4pfSkpfXNldFNlc3Npb25EYXRhUGFyYW1ldGVyKGUsbixpKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLlNlc3Npb25EYXRhLGkpLGUsbil9KSl9cmVtb3ZlQ29uZmlnRGF0YVBhcmFtZXRlcihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLkNvbmZpZ0RhdGEpLGUpfSkpfXJlbW92ZU9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KHIuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpLGUpfSkpfXJlbW92ZVRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLlRlbXBvcmFyeURhdGEsbiksZSl9KSl9cmVtb3ZlU2Vzc2lvbkRhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLlNlc3Npb25EYXRhLG4pLGUpfSkpfX1jb25zdCBwPXtjbG9ja1RvbGVyYW5jZTozMDAsZW5hYmxlUEtDRTohMCxyZXNwb25zZU1vZGU6bi5xdWVyeSxzY29wZTpbIm9wZW5pZCJdLHNlbmRDb29raWVzSW5SZXF1ZXN0czohMCx2YWxpZGF0ZUlEVG9rZW46ITAsdmFsaWRhdGVJRFRva2VuSXNzdWVyOiEwfTtjbGFzcyBne2NvbnN0cnVjdG9yKCl7fWluaXRpYWxpemUoZSxuLHIsaSl7dmFyIG8scyxhO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1lLmNsaWVudElEO2cuX2luc3RhbmNlSUQ/Zy5faW5zdGFuY2VJRCs9MTpnLl9pbnN0YW5jZUlEPTAsaSYmKGcuX2luc3RhbmNlSUQ9aSksdGhpcy5fZGF0YUxheWVyPW5ldyBmKHQ/Imluc3RhbmNlXyIuY29uY2F0KGcuX2luc3RhbmNlSUQsIi0iKS5jb25jYXQodCk6Imluc3RhbmNlXyIuY29uY2F0KGcuX2luc3RhbmNlSUQpLG4pLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZT1uZXcgaCh0aGlzLl9kYXRhTGF5ZXIsciksZy5fYXV0aGVudGljYXRpb25Db3JlPW5ldyBoKHRoaXMuX2RhdGFMYXllcixyKSx5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0Q29uZmlnRGF0YShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxwKSxlKSx7c2NvcGU6Wy4uLm51bGwhPT0obz1wLnNjb3BlKSYmdm9pZCAwIT09bz9vOltdLC4uLm51bGwhPT0oYT1udWxsPT09KHM9ZS5zY29wZSl8fHZvaWQgMD09PXM/dm9pZCAwOnMuZmlsdGVyKChlPT57dmFyIHQ7cmV0dXJuIShudWxsPT09KHQ9bnVsbD09cD92b2lkIDA6cC5zY29wZSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuaW5jbHVkZXMoZSkpfSkpKSYmdm9pZCAwIT09YT9hOltdXX0pKX0pKX1nZXREYXRhTGF5ZXIoKXtyZXR1cm4gdGhpcy5fZGF0YUxheWVyfWdldEluc3RhbmNlSUQoKXtyZXR1cm4gZy5faW5zdGFuY2VJRH1nZXRBdXRob3JpemF0aW9uVVJMUGFyYW1zKGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PU9iamVjdC5hc3NpZ24oe30sZSk7cmV0dXJuIG51bGw9PXR8fGRlbGV0ZSB0LmZvcmNlSW5pdCwoeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiKSk/dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldEF1dGhvcml6YXRpb25VUkxQYXJhbXModCxuKTp0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEobnVsbD09ZT92b2lkIDA6ZS5mb3JjZUluaXQpLnRoZW4oKCgpPT50aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0QXV0aG9yaXphdGlvblVSTFBhcmFtcyh0LG4pKSl9KSl9Z2V0QXV0aG9yaXphdGlvblVSTChlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1PYmplY3QuYXNzaWduKHt9LGUpO3JldHVybiBudWxsPT10fHxkZWxldGUgdC5mb3JjZUluaXQsKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIikpP3RoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBdXRob3JpemF0aW9uVVJMKHQsbik6dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENQcm92aWRlck1ldGFEYXRhKG51bGw9PWU/dm9pZCAwOmUuZm9yY2VJbml0KS50aGVuKCgoKT0+dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldEF1dGhvcml6YXRpb25VUkwodCxuKSkpfSkpfXJlcXVlc3RBY2Nlc3NUb2tlbihlLG4scixpLG8pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIikpP3RoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5yZXF1ZXN0QWNjZXNzVG9rZW4oZSxuLHIsaSxvKTp0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoITEpLnRoZW4oKCgpPT50aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVxdWVzdEFjY2Vzc1Rva2VuKGUsbixyLGksbykpKX0pKX1nZXRTaWduT3V0VVJMKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRTaWduT3V0VVJMKGUpfSkpfWdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCl9KSl9Z2V0RGVjb2RlZElEVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldERlY29kZWRJRFRva2VuKGUpfSkpfWdldElEVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldElEVG9rZW4oZSl9KSl9Z2V0QmFzaWNVc2VySW5mbyhlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0QmFzaWNVc2VySW5mbyhlKX0pKX1nZXRDcnlwdG9IZWxwZXIoKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0Q3J5cHRvSGVscGVyKCl9KSl9cmV2b2tlQWNjZXNzVG9rZW4oZSl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5yZXZva2VBY2Nlc3NUb2tlbihlKX1yZWZyZXNoQWNjZXNzVG9rZW4oZSl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5yZWZyZXNoQWNjZXNzVG9rZW4oZSl9Z2V0QWNjZXNzVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldEFjY2Vzc1Rva2VuKGUpfSkpfXJlcXVlc3RDdXN0b21HcmFudChlLHQpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVxdWVzdEN1c3RvbUdyYW50KGUsdCl9aXNBdXRoZW50aWNhdGVkKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5pc0F1dGhlbnRpY2F0ZWQoZSl9KSl9Z2V0UEtDRUNvZGUoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0UEtDRUNvZGUoZSxuKX0pKX1zZXRQS0NFQ29kZShlLG4scil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuc2V0UEtDRUNvZGUoZSxuLHIpfSkpfXN0YXRpYyBpc1NpZ25PdXRTdWNjZXNzZnVsKGUpe2NvbnN0IHQ9bmV3IFVSTChlKSxuPXQuc2VhcmNoUGFyYW1zLmdldCgic3RhdGUiKSxyPUJvb2xlYW4odC5zZWFyY2hQYXJhbXMuZ2V0KCJlcnJvciIpKTtyZXR1cm4hIW4mJiJzaWduX291dF9zdWNjZXNzIj09PW4mJiFyfXN0YXRpYyBkaWRTaWduT3V0RmFpbChlKXtjb25zdCB0PW5ldyBVUkwoZSksbj10LnNlYXJjaFBhcmFtcy5nZXQoInN0YXRlIikscj1Cb29sZWFuKHQuc2VhcmNoUGFyYW1zLmdldCgiZXJyb3IiKSk7cmV0dXJuISFuJiYic2lnbl9vdXRfc3VjY2VzcyI9PT1uJiZyfXVwZGF0ZUNvbmZpZyhlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS51cGRhdGVDb25maWcoZSl9KSl9c3RhdGljIGNsZWFyVXNlclNlc3Npb25EYXRhKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmNsZWFyVXNlclNlc3Npb25EYXRhKGUpfSkpfX1jb25zdCB2PSJpbml0Ijt2YXIgeTshZnVuY3Rpb24oZSl7ZS5TaWduSW49InNpZ24taW4iLGUuU2lnbk91dD0ic2lnbi1vdXQiLGUuSW5pdGlhbGl6ZT0iaW5pdGlhbGl6ZSIsZS5IdHRwUmVxdWVzdFN0YXJ0PSJodHRwLXJlcXVlc3Qtc3RhcnQiLGUuSHR0cFJlcXVlc3RGaW5pc2g9Imh0dHAtcmVxdWVzdC1maW5pc2giLGUuSHR0cFJlcXVlc3RFcnJvcj0iaHR0cC1yZXF1ZXN0LWVycm9yIixlLkh0dHBSZXF1ZXN0U3VjY2Vzcz0iaHR0cC1yZXF1ZXN0LXN1Y2Nlc3MiLGUuUmV2b2tlQWNjZXNzVG9rZW49InJldm9rZS1hY2Nlc3MtdG9rZW4iLGUuQ3VzdG9tR3JhbnQ9ImN1c3RvbS1ncmFudCIsZS5TaWduT3V0RmFpbGVkPSJzaWduLW91dC1mYWlsZWQifSh5fHwoeT17fSkpO2NvbnN0IG09InByb21wdE5vbmVSZXF1ZXN0U2VudCIsdz0iZXJyb3IiLF89ImVycm9yX2Rlc2NyaXB0aW9uIixTPSJjdXN0b21fZ3JhbnRfY29uZmlnIixiPSJBY2Nlc3MgdG9rZW4gaXMgaW52YWxpZCI7dmFyIEU7IWZ1bmN0aW9uKGUpe2UuTG9jYWxTdG9yYWdlPSJsb2NhbFN0b3JhZ2UiLGUuU2Vzc2lvblN0b3JhZ2U9InNlc3Npb25TdG9yYWdlIixlLldlYldvcmtlcj0id2ViV29ya2VyIixlLkJyb3dzZXJNZW1vcnk9ImJyb3dzZXJNZW1vcnkifShFfHwoRT17fSkpO2NsYXNzIGt7Y29uc3RydWN0b3IoKXt9c3RhdGljIGdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSl7cmV0dXJue2Jsb2I6KG51bGw9PWU/dm9pZCAwOmUuZGF0YSlpbnN0YW5jZW9mIEJsb2I/bnVsbD09ZT92b2lkIDA6ZS5kYXRhOm51bGwsZGF0YTpKU09OLnN0cmluZ2lmeShudWxsIT1lP2U6IiIpLHN1Y2Nlc3M6ITB9fXN0YXRpYyBnZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpe3JldHVybihudWxsPT1lP3ZvaWQgMDplLnRvSlNPTikmJmRlbGV0ZSBlLnRvSlNPTix7ZXJyb3I6SlNPTi5zdHJpbmdpZnkobnVsbCE9ZT9lOiIiKSxzdWNjZXNzOiExfX19Y2xhc3MgUntjb25zdHJ1Y3Rvcigpe31zdGF0aWMgcmVtb3ZlQXV0aG9yaXphdGlvbkNvZGUoKXtjb25zdCBlPWxvY2F0aW9uLmhyZWY7aGlzdG9yeS5wdXNoU3RhdGUoe30sZG9jdW1lbnQudGl0bGUsZS5yZXBsYWNlKC9cP2NvZGU9LiokLywiIikpfXN0YXRpYyBnZXRQS0NFKGUpe3ZhciB0O3JldHVybiBudWxsIT09KHQ9c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShlKSkmJnZvaWQgMCE9PXQ/dDoiIn1zdGF0aWMgc2V0UEtDRShlLHQpe3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0oZSx0KX1zdGF0aWMgc2V0U2lnbk91dFVSTChlLHQsbil7c2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgiIi5jb25jYXQocywiLWluc3RhbmNlXyIpLmNvbmNhdChuLCItIikuY29uY2F0KHQpLGUpfXN0YXRpYyBnZXRTaWduT3V0VVJMKGUsdCl7dmFyIG47cmV0dXJuIG51bGwhPT0obj1zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCIiLmNvbmNhdChzLCItaW5zdGFuY2VfIikuY29uY2F0KHQsIi0iKS5jb25jYXQoZSkpKSYmdm9pZCAwIT09bj9uOiIifXN0YXRpYyByZW1vdmVQS0NFKGUpe3Nlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oZSl9c3RhdGljIGNhbkNvbnRpbnVlU2lnbkluKGUsdCl7cmV0dXJuIShlJiYhUi5oYXNFcnJvckluVVJMKCkmJiFSLmhhc0F1dGhTZWFyY2hQYXJhbXNJblVSTCgpJiYhdCl9c3RhdGljIGlzSW5pdGlhbGl6ZWRTaWxlbnRTaWduSW4oKXtyZXR1cm4gUi5pc1NpbGVudFN0YXRlUHJlc2VudEluVVJMKCl9c3RhdGljIHdhc1NpZ25JbkNhbGxlZCgpe3JldHVybiEoIVIuaGFzRXJyb3JJblVSTCgpJiYhUi5oYXNBdXRoU2VhcmNoUGFyYW1zSW5VUkwoKXx8dGhpcy5pc1NpbGVudFN0YXRlUHJlc2VudEluVVJMKCkpfXN0YXRpYyB3YXNTaWxlbnRTaWduSW5DYWxsZWQoKXtjb25zdCBlPXNlc3Npb25TdG9yYWdlLmdldEl0ZW0oImluaXRpYWxpemVkLXNpbGVudC1zaWduLWluIiksdD1lP0pTT04ucGFyc2UoZSk6bnVsbDtyZXR1cm4gQm9vbGVhbih0KX1zdGF0aWMgaXNTaWduT3V0U3VjY2Vzc2Z1bCgpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYoZy5pc1NpZ25PdXRTdWNjZXNzZnVsKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSl7Y29uc3QgZT13aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdCgiPyIpWzBdO3JldHVybiBoaXN0b3J5LnB1c2hTdGF0ZSh7fSxkb2N1bWVudC50aXRsZSxlKSx5aWVsZCBnLmNsZWFyVXNlclNlc3Npb25EYXRhKCksITB9cmV0dXJuITF9KSl9c3RhdGljIGRpZFNpZ25PdXRGYWlsKCl7aWYoZy5kaWRTaWduT3V0RmFpbCh3aW5kb3cubG9jYXRpb24uaHJlZikpe2NvbnN0IGU9bmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZiksdD1lLnNlYXJjaFBhcmFtcy5nZXQodyksbj1lLnNlYXJjaFBhcmFtcy5nZXQoXykscj13aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdCgiPyIpWzBdO3JldHVybiBoaXN0b3J5LnB1c2hTdGF0ZSh7fSxkb2N1bWVudC50aXRsZSxyKSx7ZGVzY3JpcHRpb246bnVsbCE9bj9uOiIiLGVycm9yOm51bGwhPXQ/dDoiIn19cmV0dXJuITF9c3RhdGljIGlzU2lsZW50U3RhdGVQcmVzZW50SW5VUkwoKXt2YXIgZTtjb25zdCB0PW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpLnNlYXJjaFBhcmFtcy5nZXQoInN0YXRlIik7cmV0dXJuIG51bGwhPT0oZT1udWxsPT10P3ZvaWQgMDp0LmluY2x1ZGVzKCJzaWduLWluLXNpbGVudGx5IikpJiZ2b2lkIDAhPT1lJiZlfXN0YXRpYyBoYXNBdXRoU2VhcmNoUGFyYW1zSW5VUkwoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06d2luZG93LmxvY2F0aW9uLnNlYXJjaDtyZXR1cm4vWz8mXWNvZGU9W14mXSsvLnRlc3QoZSl9c3RhdGljIGhhc0Vycm9ySW5VUkwoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06d2luZG93LmxvY2F0aW9uLmhyZWY7Y29uc3QgdD1uZXcgVVJMKGUpO3JldHVybiEhdC5zZWFyY2hQYXJhbXMuZ2V0KHcpJiYic2lnbl9vdXRfc3VjY2VzcyIhPT10LnNlYXJjaFBhcmFtcy5nZXQoInN0YXRlIil9c3RhdGljIGNhblNlbmRQcm9tcHROb25lUmVxdWVzdCgpe2NvbnN0IGU9c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShtKTtyZXR1cm4hKGU/SlNPTi5wYXJzZShlKTpudWxsKX1zdGF0aWMgc2V0UHJvbXB0Tm9uZVJlcXVlc3RTZW50KGUpe3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0obSxKU09OLnN0cmluZ2lmeShlKSl9c3RhdGljIHdhaXRUaWxsUGFnZVJlZGlyZWN0KHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT1udWxsIT10P3Q6M2UzO3lpZWxkIG5ldyBQcm9taXNlKCh0PT5zZXRUaW1lb3V0KHQsMWUzKmUpKSl9KSl9fVIudW50aWw9ZnVuY3Rpb24oZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjUwMDtjb25zdCBuPXI9PmUoKT9yKCk6c2V0VGltZW91dCgoKCk9Pm4ocikpLHQpO3JldHVybiBuZXcgUHJvbWlzZShuKX07Y2xhc3MgVHtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50PWUsdGhpcy5fZGF0YUxheWVyPXRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldERhdGFMYXllcigpLHRoaXMuX3NwYUhlbHBlcj10LHRoaXMuX2luc3RhbmNlSUQ9dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0SW5zdGFuY2VJRCgpLHRoaXMuX2lzVG9rZW5SZWZyZXNoaW5nPSExfWVuYWJsZUh0dHBIYW5kbGVyKGUpeyhudWxsPT1lP3ZvaWQgMDplLmVuYWJsZUhhbmRsZXIpJiZlLmVuYWJsZUhhbmRsZXIoKX1kaXNhYmxlSHR0cEhhbmRsZXIoZSl7KG51bGw9PWU/dm9pZCAwOmUuZGlzYWJsZUhhbmRsZXIpJiZlLmRpc2FibGVIYW5kbGVyKCl9aW5pdGlhbGl6ZVNlc3Npb25NYW5nZXIoZSx0LG4scixpKXt2YXIgbyxzLGE7aS5pbml0aWFsaXplKGUuY2xpZW50SUQsbnVsbCE9PShvPXQuY2hlY2tTZXNzaW9uSWZyYW1lKSYmdm9pZCAwIT09bz9vOiIiLG4sbnVsbCE9PShzPWUuY2hlY2tTZXNzaW9uSW50ZXJ2YWwpJiZ2b2lkIDAhPT1zP3M6MyxudWxsIT09KGE9ZS5zZXNzaW9uUmVmcmVzaEludGVydmFsKSYmdm9pZCAwIT09YT9hOjMwMCxlLnNpZ25JblJlZGlyZWN0VVJMLHIpfXJlcXVlc3RDdXN0b21HcmFudCh0LG4pe3ZhciByLGksbztyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2xldCBzPSEwLGE9ITE7aWYobnVsbD09dD92b2lkIDA6dC50b2tlbkVuZHBvaW50KXtzPSExO2Zvcihjb25zdCBlIG9mWy4uLm51bGwhPT0oaT1udWxsPT09KHI9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKSl8fHZvaWQgMD09PXI/dm9pZCAwOnIucmVzb3VyY2VTZXJ2ZXJVUkxzKSYmdm9pZCAwIT09aT9pOltdLHQuYmFzZVVybF0paWYoZSYmKG51bGw9PT0obz10LnRva2VuRW5kcG9pbnQpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLnN0YXJ0c1dpdGgoZSkpKXthPSEwO2JyZWFrfX1yZXR1cm4gdC5zaG91bGRSZXBsYXlBZnRlclJlZnJlc2gmJnRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKFMsSlNPTi5zdHJpbmdpZnkodCkpLHN8fGE/dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQucmVxdWVzdEN1c3RvbUdyYW50KHQpLnRoZW4oKHI9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbiYmImZ1bmN0aW9uIj09dHlwZW9mIG4mJm4odCksdC5yZXR1cm5zU2Vzc2lvbj8odGhpcy5fc3BhSGVscGVyLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkodGhpcyksdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0QmFzaWNVc2VySW5mbygpKTpyfSkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSk6UHJvbWlzZS5yZWplY3QobmV3IGMoIlNQQS1NQUlOX1RIUkVBRF9DTElFTlQtUkNHLUlWMDEiLCJSZXF1ZXN0IHRvIHRoZSBwcm92aWRlZCBlbmRwb2ludCBpcyBwcm9oaWJpdGVkLiIsIlJlcXVlc3RzIGNhbiBvbmx5IGJlIHNlbnQgdG8gcmVzb3VyY2Ugc2VydmVycyBzcGVjaWZpZWQgYnkgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIGF0dHJpYnV0ZSB3aGlsZSBpbml0aWFsaXppbmcgdGhlIFNESy4gVGhlIHNwZWNpZmllZCB0b2tlbiBlbmRwb2ludCBpbiB0aGlzIHJlcXVlc3QgY2Fubm90IGJlIGZvdW5kIGFtb25nIHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCIpKX0pKX1nZXRDdXN0b21HcmFudENvbmZpZ0RhdGEoKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoUyk7cmV0dXJuIGU/SlNPTi5wYXJzZShlKTpudWxsfSkpfXJlZnJlc2hBY2Nlc3NUb2tlbih0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RyeXt5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5yZWZyZXNoQWNjZXNzVG9rZW4oKTtjb25zdCBlPXlpZWxkIHRoaXMuZ2V0Q3VzdG9tR3JhbnRDb25maWdEYXRhKCk7cmV0dXJuIGUmJih5aWVsZCB0aGlzLnJlcXVlc3RDdXN0b21HcmFudChlLHQpKSx0aGlzLl9zcGFIZWxwZXIucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSh0aGlzKSx0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRCYXNpY1VzZXJJbmZvKCl9Y2F0Y2goZSl7Y29uc3QgdD17dHlwZToicmVmcmVzaC1hY2Nlc3MtdG9rZW4tZXJyb3IifTtyZXR1cm4gd2luZG93LnBvc3RNZXNzYWdlKHQpLFByb21pc2UucmVqZWN0KGUpfX0pKX1yZXRyeUZhaWxlZFJlcXVlc3RzKHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT10Lmh0dHBDbGllbnQsbj10LnJlcXVlc3RDb25maWcscj10LmlzSHR0cEhhbmRsZXJFbmFibGVkLGk9dC5odHRwRXJyb3JDYWxsYmFjayxvPXQuaHR0cEZpbmlzaENhbGxiYWNrO3lpZWxkIFIudW50aWwoKCgpPT4hdGhpcy5faXNUb2tlblJlZnJlc2hpbmcpKTt0cnl7Y29uc3QgdD15aWVsZCBlLnJlcXVlc3Qobik7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0KX1jYXRjaChlKXtyZXR1cm4gciYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoeWllbGQgaShlKSksImZ1bmN0aW9uIj09dHlwZW9mIG8mJm8oKSksUHJvbWlzZS5yZWplY3QoZSl9fSkpfWh0dHBSZXF1ZXN0KHQsbixyLGksbyxzKXt2YXIgYSx1O3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7bGV0IGw9ITE7Y29uc3QgZD15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpO2Zvcihjb25zdCBlIG9mWy4uLm51bGwhPT0oYT15aWVsZCBudWxsPT1kP3ZvaWQgMDpkLnJlc291cmNlU2VydmVyVVJMcykmJnZvaWQgMCE9PWE/YTpbXSxkLmJhc2VVcmxdKWlmKGUmJihudWxsPT09KHU9bnVsbD09bj92b2lkIDA6bi51cmwpfHx2b2lkIDA9PT11P3ZvaWQgMDp1LnN0YXJ0c1dpdGgoZSkpKXtsPSEwO2JyZWFrfXJldHVybiBsP3QucmVxdWVzdChuKS50aGVuKChlPT5Qcm9taXNlLnJlc29sdmUoZSkpKS5jYXRjaCgoYT0+ZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBlLHUsbDtpZig0MDE9PT0obnVsbD09PShlPW51bGw9PWE/dm9pZCAwOmEucmVzcG9uc2UpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnN0YXR1cyl8fCEobnVsbD09YT92b2lkIDA6YS5yZXNwb25zZSkpe2lmKHRoaXMuX2lzVG9rZW5SZWZyZXNoaW5nKXJldHVybiB0aGlzLnJldHJ5RmFpbGVkUmVxdWVzdHMoe2VuYWJsZVJldHJpZXZpbmdTaWduT3V0VVJMRnJvbVNlc3Npb246cyxodHRwQ2xpZW50OnQsaHR0cEVycm9yQ2FsbGJhY2s6aSxodHRwRmluaXNoQ2FsbGJhY2s6byxpc0h0dHBIYW5kbGVyRW5hYmxlZDpyLHJlcXVlc3RDb25maWc6bn0pO2xldCBlO3RoaXMuX2lzVG9rZW5SZWZyZXNoaW5nPSEwO3RyeXtlPXlpZWxkIHRoaXMucmVmcmVzaEFjY2Vzc1Rva2VuKHMpLHRoaXMuX2lzVG9rZW5SZWZyZXNoaW5nPSExfWNhdGNoKGUpe3Rocm93IHRoaXMuX2lzVG9rZW5SZWZyZXNoaW5nPSExLHImJigiZnVuY3Rpb24iPT10eXBlb2YgaSYmKHlpZWxkIGkoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGEpLHtjb2RlOmJ9KSkpLCJmdW5jdGlvbiI9PXR5cGVvZiBvJiZvKCkpLG5ldyBjKCJTUEEtQVVUSF9IRUxQRVItSFItU0UwMSIsbnVsbCE9PSh1PW51bGw9PWU/dm9pZCAwOmUubmFtZSkmJnZvaWQgMCE9PXU/dToiUmVmcmVzaCB0b2tlbiByZXF1ZXN0IGZhaWxlZC4iLG51bGwhPT0obD1udWxsPT1lP3ZvaWQgMDplLm1lc3NhZ2UpJiZ2b2lkIDAhPT1sP2w6IkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHRyeWluZyB0byByZWZyZXNoIHRoZSBhY2Nlc3MgdG9rZW4gZm9sbG93aW5nIGEgNDAxIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlci4iKX1pZihlKXRyeXtjb25zdCBlPXlpZWxkIHQucmVxdWVzdChuKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGUpfWNhdGNoKGUpe3JldHVybiByJiYoImZ1bmN0aW9uIj09dHlwZW9mIGkmJih5aWVsZCBpKGUpKSwiZnVuY3Rpb24iPT10eXBlb2YgbyYmbygpKSxQcm9taXNlLnJlamVjdChlKX19cmV0dXJuIHImJigiZnVuY3Rpb24iPT10eXBlb2YgaSYmKHlpZWxkIGkoYSkpLCJmdW5jdGlvbiI9PXR5cGVvZiBvJiZvKCkpLFByb21pc2UucmVqZWN0KGEpfSkpKSk6UHJvbWlzZS5yZWplY3QobmV3IGMoIlNQQS1BVVRIX0hFTFBFUi1IUi1JVjAyIiwiUmVxdWVzdCB0byB0aGUgcHJvdmlkZWQgZW5kcG9pbnQgaXMgcHJvaGliaXRlZC4iLCJSZXF1ZXN0cyBjYW4gb25seSBiZSBzZW50IHRvIHJlc291cmNlIHNlcnZlcnMgc3BlY2lmaWVkIGJ5IHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCBhdHRyaWJ1dGUgd2hpbGUgaW5pdGlhbGl6aW5nIHRoZSBTREsuIFRoZSBzcGVjaWZpZWQgZW5kcG9pbnQgaW4gdGhpcyByZXF1ZXN0IGNhbm5vdCBiZSBmb3VuZCBhbW9uZyB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AiKSl9KSl9aHR0cFJlcXVlc3RBbGwodCxuLHIsaSxvKXt2YXIgcyxhLHU7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtsZXQgbD0hMDtjb25zdCBkPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCk7Zm9yKGNvbnN0IGUgb2YgdCl7bGV0IHQ9ITE7Zm9yKGNvbnN0IG4gb2ZbLi4ubnVsbCE9PShhPW51bGw9PT0ocz15aWVsZCBkKXx8dm9pZCAwPT09cz92b2lkIDA6cy5yZXNvdXJjZVNlcnZlclVSTHMpJiZ2b2lkIDAhPT1hP2E6W10sZC5iYXNlVXJsXSlpZihuJiYobnVsbD09PSh1PWUudXJsKXx8dm9pZCAwPT09dT92b2lkIDA6dS5zdGFydHNXaXRoKG4pKSl7dD0hMDticmVha31pZighdCl7bD0hMTticmVha319Y29uc3QgaD1bXTtpZihsKXJldHVybiB0LmZvckVhY2goKGU9PntoLnB1c2gobi5yZXF1ZXN0KGUpKX0pKSwobnVsbD09bj92b2lkIDA6bi5hbGwpJiZuLmFsbChoKS50aGVuKChlPT5Qcm9taXNlLnJlc29sdmUoZSkpKS5jYXRjaCgodD0+ZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBzLGEsdTtpZig0MDE9PT0obnVsbD09PShzPW51bGw9PXQ/dm9pZCAwOnQucmVzcG9uc2UpfHx2b2lkIDA9PT1zP3ZvaWQgMDpzLnN0YXR1cyl8fCEobnVsbD09dD92b2lkIDA6dC5yZXNwb25zZSkpe2xldCBzO3RyeXtzPXlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LnJlZnJlc2hBY2Nlc3NUb2tlbigpfWNhdGNoKGUpe3Rocm93IHImJigiZnVuY3Rpb24iPT10eXBlb2YgaSYmKHlpZWxkIGkoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtjb2RlOmJ9KSkpLCJmdW5jdGlvbiI9PXR5cGVvZiBvJiZvKCkpLG5ldyBjKCJTUEEtQVVUSF9IRUxQRVItSFJBLVNFMDEiLG51bGwhPT0oYT1udWxsPT1lP3ZvaWQgMDplLm5hbWUpJiZ2b2lkIDAhPT1hP2E6IlJlZnJlc2ggdG9rZW4gcmVxdWVzdCBmYWlsZWQuIixudWxsIT09KHU9bnVsbD09ZT92b2lkIDA6ZS5tZXNzYWdlKSYmdm9pZCAwIT09dT91OiJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gcmVmcmVzaCB0aGUgYWNjZXNzIHRva2VuIGZvbGxvd2luZyBhIDQwMSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIuIil9aWYocylyZXR1cm4gbi5hbGwmJm4uYWxsKGgpLnRoZW4oKGU9PlByb21pc2UucmVzb2x2ZShlKSkpLmNhdGNoKCh0PT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHImJigiZnVuY3Rpb24iPT10eXBlb2YgaSYmKHlpZWxkIGkodCkpLCJmdW5jdGlvbiI9PXR5cGVvZiBvJiZvKCkpLFByb21pc2UucmVqZWN0KHQpfSkpKSl9cmV0dXJuIHImJigiZnVuY3Rpb24iPT10eXBlb2YgaSYmKHlpZWxkIGkodCkpLCJmdW5jdGlvbiI9PXR5cGVvZiBvJiZvKCkpLFByb21pc2UucmVqZWN0KHQpfSkpKSk7dGhyb3cgbmV3IGMoIlNQQS1BVVRIX0hFTFBFUi1IUkEtSVYwMiIsIlJlcXVlc3QgdG8gdGhlIHByb3ZpZGVkIGVuZHBvaW50IGlzIHByb2hpYml0ZWQuIiwiUmVxdWVzdHMgY2FuIG9ubHkgYmUgc2VudCB0byByZXNvdXJjZSBzZXJ2ZXJzIHNwZWNpZmllZCBieSB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AgYXR0cmlidXRlIHdoaWxlIGluaXRpYWxpemluZyB0aGUgU0RLLiBUaGUgc3BlY2lmaWVkIGVuZHBvaW50IGluIHRoaXMgcmVxdWVzdCBjYW5ub3QgYmUgZm91bmQgYW1vbmcgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIil9KSl9cmVxdWVzdEFjY2Vzc1Rva2VuKHQsbixyLGksbyxzKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGE9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKTtpZihhLnN0b3JhZ2U9PT1FLkJyb3dzZXJNZW1vcnkmJmEuZW5hYmxlUEtDRSYmbil7Y29uc3QgZT1SLmdldFBLQ0UodS5leHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtKG4pKTt5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5zZXRQS0NFQ29kZSh1LmV4dHJhY3RQS0NFS2V5RnJvbVN0YXRlUGFyYW0obiksZSl9ZWxzZSBhLnN0b3JhZ2U9PT1FLldlYldvcmtlciYmaSYmKHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LnNldFBLQ0VDb2RlKGksbnVsbCE9bz9vOiIiKSk7cmV0dXJuIHQ/dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQucmVxdWVzdEFjY2Vzc1Rva2VuKHQsbnVsbCE9bj9uOiIiLG51bGwhPW8/bzoiIix2b2lkIDAscykudGhlbigoKCk9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gYS5zdG9yYWdlIT09RS5XZWJXb3JrZXI/KFIuc2V0U2lnbk91dFVSTCh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRTaWduT3V0VVJMKCksYS5jbGllbnRJRCx0aGlzLl9pbnN0YW5jZUlEKSx0aGlzLl9zcGFIZWxwZXImJih0aGlzLl9zcGFIZWxwZXIuY2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KCksdGhpcy5fc3BhSGVscGVyLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkodGhpcykpLHImJiJmdW5jdGlvbiI9PXR5cGVvZiByJiZhLmVuYWJsZU9JRENTZXNzaW9uTWFuYWdlbWVudCYmcigpKTp0aGlzLl9zcGFIZWxwZXImJnRoaXMuX3NwYUhlbHBlci5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KHRoaXMpLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldEJhc2ljVXNlckluZm8oKX0pKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpOlByb21pc2UucmVqZWN0KG5ldyBjKCJTUEEtQVVUSF9IRUxQRVItUkFUMS1ORjAxIiwiTm8gYXV0aG9yaXphdGlvbiBjb2RlLiIsIk5vIGF1dGhvcml6YXRpb24gY29kZSB3YXMgZm91bmQuIikpfSkpfXRyeVNpZ25JblNpbGVudGx5KHQsbixyLGksbyl7dmFyIHM7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZihSLmlzSW5pdGlhbGl6ZWRTaWxlbnRTaWduSW4oKSlyZXR1cm4geWllbGQgci5yZWNlaXZlUHJvbXB0Tm9uZVJlc3BvbnNlKCksUHJvbWlzZS5yZXNvbHZlKHthbGxvd2VkU2NvcGVzOiIiLGRpc3BsYXlOYW1lOiIiLGVtYWlsOiIiLHNlc3Npb25TdGF0ZToiIixzdWI6IiIsdGVuYW50RG9tYWluOiIiLHVzZXJuYW1lOiIifSk7Y29uc3QgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicnBJRnJhbWUiKSxjPW51bGw9PT0ocz1udWxsPT1hP3ZvaWQgMDphLmNvbnRlbnREb2N1bWVudCl8fHZvaWQgMD09PXM/dm9pZCAwOnMuZ2V0RWxlbWVudEJ5SWQoInByb21wdE5vbmVJRnJhbWUiKTt0cnl7Y29uc3QgZT15aWVsZCB0KGkpO2Muc3JjPWV9Y2F0Y2goZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfXJldHVybiBuZXcgUHJvbWlzZSgoKHQscik9Pntjb25zdCBpPXNldFRpbWVvdXQoKCgpPT57dCghMSl9KSwxZTQpLHM9YT0+ZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBlLGMsdSxsO2NvbnN0IGQ9YS5kYXRhOyJjaGVja19zZXNzaW9uX3NpZ25lZF9vdXQiPT0obnVsbD09ZD92b2lkIDA6ZC50eXBlKSYmKHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixzKSxjbGVhclRpbWVvdXQoaSksdCghMSkpLCJjaGVja19zZXNzaW9uX3NpZ25lZF9pbiI9PShudWxsPT1kP3ZvaWQgMDpkLnR5cGUpJiYobnVsbD09PShlPW51bGw9PWQ/dm9pZCAwOmQuZGF0YSl8fHZvaWQgMD09PWU/dm9pZCAwOmUuY29kZSkmJm4obnVsbD09PShjPW51bGw9PWQ/dm9pZCAwOmQuZGF0YSl8fHZvaWQgMD09PWM/dm9pZCAwOmMuY29kZSxudWxsPT09KHU9bnVsbD09ZD92b2lkIDA6ZC5kYXRhKXx8dm9pZCAwPT09dT92b2lkIDA6dS5zZXNzaW9uU3RhdGUsbnVsbD09PShsPW51bGw9PWQ/dm9pZCAwOmQuZGF0YSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuc3RhdGUsbykudGhlbigoZT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixzKSx0KGUpfSkpLmNhdGNoKChlPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHMpLHIoZSl9KSkuZmluYWxseSgoKCk9PntjbGVhclRpbWVvdXQoaSl9KSl9KSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHMpfSkpfSkpfWhhbmRsZVNpZ25Jbih0LG4scil7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCk7aWYoeWllbGQgdCgpKXJldHVybiBQcm9taXNlLnJlc29sdmUoe2FsbG93ZWRTY29wZXM6IiIsZGlzcGxheU5hbWU6IiIsZW1haWw6IiIsc2Vzc2lvblN0YXRlOiIiLHN1YjoiIix0ZW5hbnREb21haW46IiIsdXNlcm5hbWU6IiJ9KTtpZihlLnN0b3JhZ2UhPT1FLldlYldvcmtlciYmKHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmlzQXV0aGVudGljYXRlZCgpKSlyZXR1cm4gdGhpcy5fc3BhSGVscGVyLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLHRoaXMuX3NwYUhlbHBlci5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KHRoaXMpLGUuZW5hYmxlT0lEQ1Nlc3Npb25NYW5hZ2VtZW50JiZuKCksUHJvbWlzZS5yZXNvbHZlKHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldEJhc2ljVXNlckluZm8oKSk7Y29uc3QgaT1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKS5zZWFyY2hQYXJhbXMuZ2V0KHcpLG89bmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZikuc2VhcmNoUGFyYW1zLmdldChfKTtpZihpKXtjb25zdCBlPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO3Rocm93IGUuc2VhcmNoUGFyYW1zLmRlbGV0ZSh3KSxlLnNlYXJjaFBhcmFtcy5kZWxldGUoXyksaGlzdG9yeS5wdXNoU3RhdGUobnVsbCxkb2N1bWVudC50aXRsZSxlLnRvU3RyaW5nKCkpLG5ldyBjKCJTUEEtQVVUSF9IRUxQRVItU0ktU0UwMSIsaSxudWxsIT1vP286IiIpfWlmKGUuc3RvcmFnZT09PUUuV2ViV29ya2VyJiZyKXtjb25zdCBlPXlpZWxkIHIoKTtpZihlKXJldHVybiBlfX0pKX1hdHRhY2hUb2tlblRvUmVxdWVzdENvbmZpZyh0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9T2JqZWN0LmFzc2lnbih7YXR0YWNoVG9rZW46ITB9LHQpO2UuYXR0YWNoVG9rZW4mJihlLnNob3VsZEF0dGFjaElEUEFjY2Vzc1Rva2VuP3QuaGVhZGVycz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5oZWFkZXJzKSx7QXV0aG9yaXphdGlvbjoiQmVhcmVyICIuY29uY2F0KHlpZWxkIHRoaXMuZ2V0SURQQWNjZXNzVG9rZW4oKSl9KTp0LmhlYWRlcnM9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuaGVhZGVycykse0F1dGhvcml6YXRpb246IkJlYXJlciAiLmNvbmNhdCh5aWVsZCB0aGlzLmdldEFjY2Vzc1Rva2VuKCkpfSkpfSkpfWdldEJhc2ljVXNlckluZm8oKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRCYXNpY1VzZXJJbmZvKCl9KSl9Z2V0RGVjb2RlZElEVG9rZW4oKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXREZWNvZGVkSURUb2tlbigpfSkpfWdldERlY29kZWRJRFBJRFRva2VuKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0RGVjb2RlZElEVG9rZW4oKX0pKX1nZXRDcnlwdG9IZWxwZXIoKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRDcnlwdG9IZWxwZXIoKX0pKX1nZXRJRFRva2VuKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0SURUb2tlbigpfSkpfWdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKX0pKX1nZXRBY2Nlc3NUb2tlbigpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldEFjY2Vzc1Rva2VuKCl9KSl9Z2V0SURQQWNjZXNzVG9rZW4oKXt2YXIgdDtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBudWxsPT09KHQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCkpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmFjY2Vzc190b2tlbn0pKX1nZXREYXRhTGF5ZXIoKXtyZXR1cm4gdGhpcy5fZGF0YUxheWVyfWlzQXV0aGVudGljYXRlZCgpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmlzQXV0aGVudGljYXRlZCgpfSkpfX1jbGFzcyBBe2NvbnN0cnVjdG9yKGUpe3RoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50PWUsdGhpcy5fZGF0YUxheWVyPXRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldERhdGFMYXllcigpfXJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkodCl7dmFyIG4scjtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKCEobnVsbCE9PShyPW51bGw9PT0obj15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpKXx8dm9pZCAwPT09bj92b2lkIDA6bi5wZXJpb2RpY1Rva2VuUmVmcmVzaCkmJnZvaWQgMCE9PXImJnIpKXJldHVybjtjb25zdCBvPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YSgpO2lmKG8ucmVmcmVzaF90b2tlbil7Y29uc3Qgbj1wYXJzZUludChvLmV4cGlyZXNfaW4pLHI9c2V0VGltZW91dCgoKCk9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0LnJlZnJlc2hBY2Nlc3NUb2tlbigpfSkpKSwxZTMqKG48PTEwP246bi0xMCkpO3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGksSlNPTi5zdHJpbmdpZnkocikpfX0pKX1nZXRSZWZyZXNoVGltZW91dFRpbWVyKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoaSkpP0pTT04ucGFyc2UoeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoaSkpOi0xfSkpfWNsZWFyUmVmcmVzaFRva2VuVGltZW91dCh0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKHQpcmV0dXJuIHZvaWQgY2xlYXJUaW1lb3V0KHQpO2NvbnN0IGU9eWllbGQgdGhpcy5nZXRSZWZyZXNoVGltZW91dFRpbWVyKCk7LTEhPT1lJiZjbGVhclRpbWVvdXQoZSl9KSl9fXZhciBDPSJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6e307ZnVuY3Rpb24gRChlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwiZGVmYXVsdCIpP2UuZGVmYXVsdDplfWZ1bmN0aW9uIFAoZSl7aWYoZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxuKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHIuZ2V0P3I6e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGVbbl19fSl9KSksdH12YXIgTyxJPXtleHBvcnRzOnt9fSxVPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodCxhcmd1bWVudHMpfX0sTD1VLEg9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxNPShPPU9iamVjdC5jcmVhdGUobnVsbCksZnVuY3Rpb24oZSl7dmFyIHQ9SC5jYWxsKGUpO3JldHVybiBPW3RdfHwoT1t0XT10LnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCkpfSk7ZnVuY3Rpb24gaihlKXtyZXR1cm4gZT1lLnRvTG93ZXJDYXNlKCksZnVuY3Rpb24odCl7cmV0dXJuIE0odCk9PT1lfX1mdW5jdGlvbiBOKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpfWZ1bmN0aW9uIHgoZSl7cmV0dXJuIHZvaWQgMD09PWV9dmFyIHE9aigiQXJyYXlCdWZmZXIiKTtmdW5jdGlvbiBCKGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZX1mdW5jdGlvbiBGKGUpe3JldHVybiBudWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlfWZ1bmN0aW9uIEsoZSl7aWYoIm9iamVjdCIhPT1NKGUpKXJldHVybiExO3ZhciB0PU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtyZXR1cm4gbnVsbD09PXR8fHQ9PT1PYmplY3QucHJvdG90eXBlfXZhciBKPWooIkRhdGUiKSxXPWooIkZpbGUiKSx6PWooIkJsb2IiKSxWPWooIkZpbGVMaXN0Iik7ZnVuY3Rpb24gWShlKXtyZXR1cm4iW29iamVjdCBGdW5jdGlvbl0iPT09SC5jYWxsKGUpfXZhciBHPWooIlVSTFNlYXJjaFBhcmFtcyIpO2Z1bmN0aW9uIFgoZSx0KXtpZihudWxsIT1lKWlmKCJvYmplY3QiIT10eXBlb2YgZSYmKGU9W2VdKSxOKGUpKWZvcih2YXIgbj0wLHI9ZS5sZW5ndGg7bjxyO24rKyl0LmNhbGwobnVsbCxlW25dLG4sZSk7ZWxzZSBmb3IodmFyIGkgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxpKSYmdC5jYWxsKG51bGwsZVtpXSxpLGUpfXZhciAkLFo9KCQ9InVuZGVmaW5lZCIhPXR5cGVvZiBVaW50OEFycmF5JiZPYmplY3QuZ2V0UHJvdG90eXBlT2YoVWludDhBcnJheSksZnVuY3Rpb24oZSl7cmV0dXJuICQmJmUgaW5zdGFuY2VvZiAkfSk7dmFyIFEsZWU9aigiSFRNTEZvcm1FbGVtZW50IiksdGU9KFE9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxmdW5jdGlvbihlLHQpe3JldHVybiBRLmNhbGwoZSx0KX0pLG5lPXtpc0FycmF5Ok4saXNBcnJheUJ1ZmZlcjpxLGlzQnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZSYmIXgoZSkmJm51bGwhPT1lLmNvbnN0cnVjdG9yJiYheChlLmNvbnN0cnVjdG9yKSYmImZ1bmN0aW9uIj09dHlwZW9mIGUuY29uc3RydWN0b3IuaXNCdWZmZXImJmUuY29uc3RydWN0b3IuaXNCdWZmZXIoZSl9LGlzRm9ybURhdGE6ZnVuY3Rpb24oZSl7dmFyIHQ9IltvYmplY3QgRm9ybURhdGFdIjtyZXR1cm4gZSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBGb3JtRGF0YSYmZSBpbnN0YW5jZW9mIEZvcm1EYXRhfHxILmNhbGwoZSk9PT10fHxZKGUudG9TdHJpbmcpJiZlLnRvU3RyaW5nKCk9PT10KX0saXNBcnJheUJ1ZmZlclZpZXc6ZnVuY3Rpb24oZSl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmQXJyYXlCdWZmZXIuaXNWaWV3P0FycmF5QnVmZmVyLmlzVmlldyhlKTplJiZlLmJ1ZmZlciYmcShlLmJ1ZmZlcil9LGlzU3RyaW5nOmZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZX0saXNOdW1iZXI6Qixpc09iamVjdDpGLGlzUGxhaW5PYmplY3Q6Syxpc0VtcHR5T2JqZWN0OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYwPT09T2JqZWN0LmtleXMoZSkubGVuZ3RoJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1PYmplY3QucHJvdG90eXBlfSxpc1VuZGVmaW5lZDp4LGlzRGF0ZTpKLGlzRmlsZTpXLGlzQmxvYjp6LGlzRnVuY3Rpb246WSxpc1N0cmVhbTpmdW5jdGlvbihlKXtyZXR1cm4gRihlKSYmWShlLnBpcGUpfSxpc1VSTFNlYXJjaFBhcmFtczpHLGlzU3RhbmRhcmRCcm93c2VyRW52OmZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKCJ1bmRlZmluZWQiPT10eXBlb2YgbmF2aWdhdG9yfHwiUmVhY3ROYXRpdmUiIT09KGU9bmF2aWdhdG9yLnByb2R1Y3QpJiYiTmF0aXZlU2NyaXB0IiE9PWUmJiJOUyIhPT1lKSYmKCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiYidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50KX0sZm9yRWFjaDpYLG1lcmdlOmZ1bmN0aW9uIGUoKXt2YXIgdD17fTtmdW5jdGlvbiBuKG4scil7Syh0W3JdKSYmSyhuKT90W3JdPWUodFtyXSxuKTpLKG4pP3Rbcl09ZSh7fSxuKTpOKG4pP3Rbcl09bi5zbGljZSgpOnRbcl09bn1mb3IodmFyIHI9MCxpPWFyZ3VtZW50cy5sZW5ndGg7cjxpO3IrKylYKGFyZ3VtZW50c1tyXSxuKTtyZXR1cm4gdH0sZXh0ZW5kOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gWCh0LChmdW5jdGlvbih0LHIpe2Vbcl09biYmImZ1bmN0aW9uIj09dHlwZW9mIHQ/TCh0LG4pOnR9KSksZX0sdHJpbTpmdW5jdGlvbihlKXtyZXR1cm4gZS50cmltP2UudHJpbSgpOmUucmVwbGFjZSgvXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2csIiIpfSxzdHJpcEJPTTpmdW5jdGlvbihlKXtyZXR1cm4gNjUyNzk9PT1lLmNoYXJDb2RlQXQoMCkmJihlPWUuc2xpY2UoMSkpLGV9LGluaGVyaXRzOmZ1bmN0aW9uKGUsdCxuLHIpe2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUsciksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxuJiZPYmplY3QuYXNzaWduKGUucHJvdG90eXBlLG4pfSx0b0ZsYXRPYmplY3Q6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxzLGE9e307aWYodD10fHx7fSxudWxsPT1lKXJldHVybiB0O2Rve2ZvcihvPShpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpKS5sZW5ndGg7by0tID4wOylzPWlbb10sciYmIXIocyxlLHQpfHxhW3NdfHwodFtzXT1lW3NdLGFbc109ITApO2U9ITEhPT1uJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9d2hpbGUoZSYmKCFufHxuKGUsdCkpJiZlIT09T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIHR9LGtpbmRPZjpNLGtpbmRPZlRlc3Q6aixlbmRzV2l0aDpmdW5jdGlvbihlLHQsbil7ZT1TdHJpbmcoZSksKHZvaWQgMD09PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCksbi09dC5sZW5ndGg7dmFyIHI9ZS5pbmRleE9mKHQsbik7cmV0dXJuLTEhPT1yJiZyPT09bn0sdG9BcnJheTpmdW5jdGlvbihlKXtpZighZSlyZXR1cm4gbnVsbDtpZihOKGUpKXJldHVybiBlO3ZhciB0PWUubGVuZ3RoO2lmKCFCKHQpKXJldHVybiBudWxsO2Zvcih2YXIgbj1uZXcgQXJyYXkodCk7dC0tID4wOyluW3RdPWVbdF07cmV0dXJuIG59LGlzVHlwZWRBcnJheTpaLGlzRmlsZUxpc3Q6Vixmb3JFYWNoRW50cnk6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4scj0oZSYmZVtTeW1ib2wuaXRlcmF0b3JdKS5jYWxsKGUpOyhuPXIubmV4dCgpKSYmIW4uZG9uZTspe3ZhciBpPW4udmFsdWU7dC5jYWxsKGUsaVswXSxpWzFdKX19LG1hdGNoQWxsOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuLHI9W107bnVsbCE9PShuPWUuZXhlYyh0KSk7KXIucHVzaChuKTtyZXR1cm4gcn0saXNIVE1MRm9ybTplZSxoYXNPd25Qcm9wZXJ0eTp0ZX0scmU9InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSxpZT1bXSxvZT1bXSxzZT0idW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQ4QXJyYXk/VWludDhBcnJheTpBcnJheSxhZT0hMTtmdW5jdGlvbiBjZSgpe2FlPSEwO2Zvcih2YXIgZT0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIsdD0wLG49ZS5sZW5ndGg7dDxuOysrdClpZVt0XT1lW3RdLG9lW2UuY2hhckNvZGVBdCh0KV09dDtvZVsiLSIuY2hhckNvZGVBdCgwKV09NjIsb2VbIl8iLmNoYXJDb2RlQXQoMCldPTYzfWZ1bmN0aW9uIHVlKGUsdCxuKXtmb3IodmFyIHIsaSxvPVtdLHM9dDtzPG47cys9MylyPShlW3NdPDwxNikrKGVbcysxXTw8OCkrZVtzKzJdLG8ucHVzaChpZVsoaT1yKT4+MTgmNjNdK2llW2k+PjEyJjYzXStpZVtpPj42JjYzXStpZVs2MyZpXSk7cmV0dXJuIG8uam9pbigiIil9ZnVuY3Rpb24gbGUoZSl7dmFyIHQ7YWV8fGNlKCk7Zm9yKHZhciBuPWUubGVuZ3RoLHI9biUzLGk9IiIsbz1bXSxzPTE2MzgzLGE9MCxjPW4tcjthPGM7YSs9cylvLnB1c2godWUoZSxhLGErcz5jP2M6YStzKSk7cmV0dXJuIDE9PT1yPyh0PWVbbi0xXSxpKz1pZVt0Pj4yXSxpKz1pZVt0PDw0JjYzXSxpKz0iPT0iKToyPT09ciYmKHQ9KGVbbi0yXTw8OCkrZVtuLTFdLGkrPWllW3Q+PjEwXSxpKz1pZVt0Pj40JjYzXSxpKz1pZVt0PDwyJjYzXSxpKz0iPSIpLG8ucHVzaChpKSxvLmpvaW4oIiIpfWZ1bmN0aW9uIGRlKGUsdCxuLHIsaSl7dmFyIG8scyxhPTgqaS1yLTEsYz0oMTw8YSktMSx1PWM+PjEsbD0tNyxkPW4/aS0xOjAsaD1uPy0xOjEsZj1lW3QrZF07Zm9yKGQrPWgsbz1mJigxPDwtbCktMSxmPj49LWwsbCs9YTtsPjA7bz0yNTYqbytlW3QrZF0sZCs9aCxsLT04KTtmb3Iocz1vJigxPDwtbCktMSxvPj49LWwsbCs9cjtsPjA7cz0yNTYqcytlW3QrZF0sZCs9aCxsLT04KTtpZigwPT09bylvPTEtdTtlbHNle2lmKG89PT1jKXJldHVybiBzP05hTjoxLzAqKGY/LTE6MSk7cys9TWF0aC5wb3coMixyKSxvLT11fXJldHVybihmPy0xOjEpKnMqTWF0aC5wb3coMixvLXIpfWZ1bmN0aW9uIGhlKGUsdCxuLHIsaSxvKXt2YXIgcyxhLGMsdT04Km8taS0xLGw9KDE8PHUpLTEsZD1sPj4xLGg9MjM9PT1pP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxmPXI/MDpvLTEscD1yPzE6LTEsZz10PDB8fDA9PT10JiYxL3Q8MD8xOjA7Zm9yKHQ9TWF0aC5hYnModCksaXNOYU4odCl8fHQ9PT0xLzA/KGE9aXNOYU4odCk/MTowLHM9bCk6KHM9TWF0aC5mbG9vcihNYXRoLmxvZyh0KS9NYXRoLkxOMiksdCooYz1NYXRoLnBvdygyLC1zKSk8MSYmKHMtLSxjKj0yKSwodCs9cytkPj0xP2gvYzpoKk1hdGgucG93KDIsMS1kKSkqYz49MiYmKHMrKyxjLz0yKSxzK2Q+PWw/KGE9MCxzPWwpOnMrZD49MT8oYT0odCpjLTEpKk1hdGgucG93KDIsaSkscys9ZCk6KGE9dCpNYXRoLnBvdygyLGQtMSkqTWF0aC5wb3coMixpKSxzPTApKTtpPj04O2VbbitmXT0yNTUmYSxmKz1wLGEvPTI1NixpLT04KTtmb3Iocz1zPDxpfGEsdSs9aTt1PjA7ZVtuK2ZdPTI1NSZzLGYrPXAscy89MjU2LHUtPTgpO2VbbitmLXBdfD0xMjgqZ312YXIgZmU9e30udG9TdHJpbmcscGU9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09ZmUuY2FsbChlKX07bWUuVFlQRURfQVJSQVlfU1VQUE9SVD12b2lkIDA9PT1yZS5UWVBFRF9BUlJBWV9TVVBQT1JUfHxyZS5UWVBFRF9BUlJBWV9TVVBQT1JUO3ZhciBnZT12ZSgpO2Z1bmN0aW9uIHZlKCl7cmV0dXJuIG1lLlRZUEVEX0FSUkFZX1NVUFBPUlQ/MjE0NzQ4MzY0NzoxMDczNzQxODIzfWZ1bmN0aW9uIHllKGUsdCl7aWYodmUoKTx0KXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHR5cGVkIGFycmF5IGxlbmd0aCIpO3JldHVybiBtZS5UWVBFRF9BUlJBWV9TVVBQT1JUPyhlPW5ldyBVaW50OEFycmF5KHQpKS5fX3Byb3RvX189bWUucHJvdG90eXBlOihudWxsPT09ZSYmKGU9bmV3IG1lKHQpKSxlLmxlbmd0aD10KSxlfWZ1bmN0aW9uIG1lKGUsdCxuKXtpZighKG1lLlRZUEVEX0FSUkFZX1NVUFBPUlR8fHRoaXMgaW5zdGFuY2VvZiBtZSkpcmV0dXJuIG5ldyBtZShlLHQsbik7aWYoIm51bWJlciI9PXR5cGVvZiBlKXtpZigic3RyaW5nIj09dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCJJZiBlbmNvZGluZyBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyIpO3JldHVybiBTZSh0aGlzLGUpfXJldHVybiB3ZSh0aGlzLGUsdCxuKX1mdW5jdGlvbiB3ZShlLHQsbixyKXtpZigibnVtYmVyIj09dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpO3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJnQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9mdW5jdGlvbihlLHQsbixyKXtpZih0LmJ5dGVMZW5ndGgsbjwwfHx0LmJ5dGVMZW5ndGg8bil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiJ29mZnNldCcgaXMgb3V0IG9mIGJvdW5kcyIpO2lmKHQuYnl0ZUxlbmd0aDxuKyhyfHwwKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiJ2xlbmd0aCcgaXMgb3V0IG9mIGJvdW5kcyIpO3Q9dm9pZCAwPT09biYmdm9pZCAwPT09cj9uZXcgVWludDhBcnJheSh0KTp2b2lkIDA9PT1yP25ldyBVaW50OEFycmF5KHQsbik6bmV3IFVpbnQ4QXJyYXkodCxuLHIpO21lLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9dCkuX19wcm90b19fPW1lLnByb3RvdHlwZTplPWJlKGUsdCk7cmV0dXJuIGV9KGUsdCxuLHIpOiJzdHJpbmciPT10eXBlb2YgdD9mdW5jdGlvbihlLHQsbil7InN0cmluZyI9PXR5cGVvZiBuJiYiIiE9PW58fChuPSJ1dGY4Iik7aWYoIW1lLmlzRW5jb2RpbmcobikpdGhyb3cgbmV3IFR5cGVFcnJvcignImVuY29kaW5nIiBtdXN0IGJlIGEgdmFsaWQgc3RyaW5nIGVuY29kaW5nJyk7dmFyIHI9MHxSZSh0LG4pLGk9KGU9eWUoZSxyKSkud3JpdGUodCxuKTtpIT09ciYmKGU9ZS5zbGljZSgwLGkpKTtyZXR1cm4gZX0oZSx0LG4pOmZ1bmN0aW9uKGUsdCl7aWYoa2UodCkpe3ZhciBuPTB8RWUodC5sZW5ndGgpO3JldHVybiAwPT09KGU9eWUoZSxuKSkubGVuZ3RofHx0LmNvcHkoZSwwLDAsbiksZX1pZih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZ0LmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfHwibGVuZ3RoImluIHQpcmV0dXJuIm51bWJlciIhPXR5cGVvZiB0Lmxlbmd0aHx8KHI9dC5sZW5ndGgpIT1yP3llKGUsMCk6YmUoZSx0KTtpZigiQnVmZmVyIj09PXQudHlwZSYmcGUodC5kYXRhKSlyZXR1cm4gYmUoZSx0LmRhdGEpfXZhciByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBhcnJheS1saWtlIG9iamVjdC4iKX0oZSx0KX1mdW5jdGlvbiBfZShlKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKTtpZihlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBuZWdhdGl2ZScpfWZ1bmN0aW9uIFNlKGUsdCl7aWYoX2UodCksZT15ZShlLHQ8MD8wOjB8RWUodCkpLCFtZS5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcih2YXIgbj0wO248dDsrK24pZVtuXT0wO3JldHVybiBlfWZ1bmN0aW9uIGJlKGUsdCl7dmFyIG49dC5sZW5ndGg8MD8wOjB8RWUodC5sZW5ndGgpO2U9eWUoZSxuKTtmb3IodmFyIHI9MDtyPG47cis9MSllW3JdPTI1NSZ0W3JdO3JldHVybiBlfWZ1bmN0aW9uIEVlKGUpe2lmKGU+PXZlKCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHgiK3ZlKCkudG9TdHJpbmcoMTYpKyIgYnl0ZXMiKTtyZXR1cm4gMHxlfWZ1bmN0aW9uIGtlKGUpe3JldHVybiEobnVsbD09ZXx8IWUuX2lzQnVmZmVyKX1mdW5jdGlvbiBSZShlLHQpe2lmKGtlKGUpKXJldHVybiBlLmxlbmd0aDtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiYiZnVuY3Rpb24iPT10eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3JiYoQXJyYXlCdWZmZXIuaXNWaWV3KGUpfHxlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXJldHVybiBlLmJ5dGVMZW5ndGg7InN0cmluZyIhPXR5cGVvZiBlJiYoZT0iIitlKTt2YXIgbj1lLmxlbmd0aDtpZigwPT09bilyZXR1cm4gMDtmb3IodmFyIHI9ITE7Oylzd2l0Y2godCl7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gbjtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2Ugdm9pZCAwOnJldHVybiBaZShlKS5sZW5ndGg7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiAyKm47Y2FzZSJoZXgiOnJldHVybiBuPj4+MTtjYXNlImJhc2U2NCI6cmV0dXJuIFFlKGUpLmxlbmd0aDtkZWZhdWx0OmlmKHIpcmV0dXJuIFplKGUpLmxlbmd0aDt0PSgiIit0KS50b0xvd2VyQ2FzZSgpLHI9ITB9fWZ1bmN0aW9uIFRlKGUsdCxuKXt2YXIgcj0hMTtpZigodm9pZCAwPT09dHx8dDwwKSYmKHQ9MCksdD50aGlzLmxlbmd0aClyZXR1cm4iIjtpZigodm9pZCAwPT09bnx8bj50aGlzLmxlbmd0aCkmJihuPXRoaXMubGVuZ3RoKSxuPD0wKXJldHVybiIiO2lmKChuPj4+PTApPD0odD4+Pj0wKSlyZXR1cm4iIjtmb3IoZXx8KGU9InV0ZjgiKTs7KXN3aXRjaChlKXtjYXNlImhleCI6cmV0dXJuIEJlKHRoaXMsdCxuKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBqZSh0aGlzLHQsbik7Y2FzZSJhc2NpaSI6cmV0dXJuIHhlKHRoaXMsdCxuKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBxZSh0aGlzLHQsbik7Y2FzZSJiYXNlNjQiOnJldHVybiBNZSh0aGlzLHQsbik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBGZSh0aGlzLHQsbik7ZGVmYXVsdDppZihyKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrZSk7ZT0oZSsiIikudG9Mb3dlckNhc2UoKSxyPSEwfX1mdW5jdGlvbiBBZShlLHQsbil7dmFyIHI9ZVt0XTtlW3RdPWVbbl0sZVtuXT1yfWZ1bmN0aW9uIENlKGUsdCxuLHIsaSl7aWYoMD09PWUubGVuZ3RoKXJldHVybi0xO2lmKCJzdHJpbmciPT10eXBlb2Ygbj8ocj1uLG49MCk6bj4yMTQ3NDgzNjQ3P249MjE0NzQ4MzY0NzpuPC0yMTQ3NDgzNjQ4JiYobj0tMjE0NzQ4MzY0OCksbj0rbixpc05hTihuKSYmKG49aT8wOmUubGVuZ3RoLTEpLG48MCYmKG49ZS5sZW5ndGgrbiksbj49ZS5sZW5ndGgpe2lmKGkpcmV0dXJuLTE7bj1lLmxlbmd0aC0xfWVsc2UgaWYobjwwKXtpZighaSlyZXR1cm4tMTtuPTB9aWYoInN0cmluZyI9PXR5cGVvZiB0JiYodD1tZS5mcm9tKHQscikpLGtlKHQpKXJldHVybiAwPT09dC5sZW5ndGg/LTE6RGUoZSx0LG4scixpKTtpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuIHQmPTI1NSxtZS5UWVBFRF9BUlJBWV9TVVBQT1JUJiYiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZj9pP1VpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChlLHQsbik6VWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChlLHQsbik6RGUoZSxbdF0sbixyLGkpO3Rocm93IG5ldyBUeXBlRXJyb3IoInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlciIpfWZ1bmN0aW9uIERlKGUsdCxuLHIsaSl7dmFyIG8scz0xLGE9ZS5sZW5ndGgsYz10Lmxlbmd0aDtpZih2b2lkIDAhPT1yJiYoInVjczIiPT09KHI9U3RyaW5nKHIpLnRvTG93ZXJDYXNlKCkpfHwidWNzLTIiPT09cnx8InV0ZjE2bGUiPT09cnx8InV0Zi0xNmxlIj09PXIpKXtpZihlLmxlbmd0aDwyfHx0Lmxlbmd0aDwyKXJldHVybi0xO3M9MixhLz0yLGMvPTIsbi89Mn1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIDE9PT1zP2VbdF06ZS5yZWFkVUludDE2QkUodCpzKX1pZihpKXt2YXIgbD0tMTtmb3Iobz1uO288YTtvKyspaWYodShlLG8pPT09dSh0LC0xPT09bD8wOm8tbCkpe2lmKC0xPT09bCYmKGw9byksby1sKzE9PT1jKXJldHVybiBsKnN9ZWxzZS0xIT09bCYmKG8tPW8tbCksbD0tMX1lbHNlIGZvcihuK2M+YSYmKG49YS1jKSxvPW47bz49MDtvLS0pe2Zvcih2YXIgZD0hMCxoPTA7aDxjO2grKylpZih1KGUsbytoKSE9PXUodCxoKSl7ZD0hMTticmVha31pZihkKXJldHVybiBvfXJldHVybi0xfWZ1bmN0aW9uIFBlKGUsdCxuLHIpe249TnVtYmVyKG4pfHwwO3ZhciBpPWUubGVuZ3RoLW47cj8ocj1OdW1iZXIocikpPmkmJihyPWkpOnI9aTt2YXIgbz10Lmxlbmd0aDtpZihvJTIhPTApdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBoZXggc3RyaW5nIik7cj5vLzImJihyPW8vMik7Zm9yKHZhciBzPTA7czxyOysrcyl7dmFyIGE9cGFyc2VJbnQodC5zdWJzdHIoMipzLDIpLDE2KTtpZihpc05hTihhKSlyZXR1cm4gcztlW24rc109YX1yZXR1cm4gc31mdW5jdGlvbiBPZShlLHQsbixyKXtyZXR1cm4gZXQoWmUodCxlLmxlbmd0aC1uKSxlLG4scil9ZnVuY3Rpb24gSWUoZSx0LG4scil7cmV0dXJuIGV0KGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPTA7bjxlLmxlbmd0aDsrK24pdC5wdXNoKDI1NSZlLmNoYXJDb2RlQXQobikpO3JldHVybiB0fSh0KSxlLG4scil9ZnVuY3Rpb24gVWUoZSx0LG4scil7cmV0dXJuIEllKGUsdCxuLHIpfWZ1bmN0aW9uIExlKGUsdCxuLHIpe3JldHVybiBldChRZSh0KSxlLG4scil9ZnVuY3Rpb24gSGUoZSx0LG4scil7cmV0dXJuIGV0KGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuLHIsaSxvPVtdLHM9MDtzPGUubGVuZ3RoJiYhKCh0LT0yKTwwKTsrK3Mpcj0obj1lLmNoYXJDb2RlQXQocykpPj44LGk9biUyNTYsby5wdXNoKGkpLG8ucHVzaChyKTtyZXR1cm4gb30odCxlLmxlbmd0aC1uKSxlLG4scil9ZnVuY3Rpb24gTWUoZSx0LG4pe3JldHVybiAwPT09dCYmbj09PWUubGVuZ3RoP2xlKGUpOmxlKGUuc2xpY2UodCxuKSl9ZnVuY3Rpb24gamUoZSx0LG4pe249TWF0aC5taW4oZS5sZW5ndGgsbik7Zm9yKHZhciByPVtdLGk9dDtpPG47KXt2YXIgbyxzLGEsYyx1PWVbaV0sbD1udWxsLGQ9dT4yMzk/NDp1PjIyMz8zOnU+MTkxPzI6MTtpZihpK2Q8PW4pc3dpdGNoKGQpe2Nhc2UgMTp1PDEyOCYmKGw9dSk7YnJlYWs7Y2FzZSAyOjEyOD09KDE5MiYobz1lW2krMV0pKSYmKGM9KDMxJnUpPDw2fDYzJm8pPjEyNyYmKGw9Yyk7YnJlYWs7Y2FzZSAzOm89ZVtpKzFdLHM9ZVtpKzJdLDEyOD09KDE5MiZvKSYmMTI4PT0oMTkyJnMpJiYoYz0oMTUmdSk8PDEyfCg2MyZvKTw8Nnw2MyZzKT4yMDQ3JiYoYzw1NTI5Nnx8Yz41NzM0MykmJihsPWMpO2JyZWFrO2Nhc2UgNDpvPWVbaSsxXSxzPWVbaSsyXSxhPWVbaSszXSwxMjg9PSgxOTImbykmJjEyOD09KDE5MiZzKSYmMTI4PT0oMTkyJmEpJiYoYz0oMTUmdSk8PDE4fCg2MyZvKTw8MTJ8KDYzJnMpPDw2fDYzJmEpPjY1NTM1JiZjPDExMTQxMTImJihsPWMpfW51bGw9PT1sPyhsPTY1NTMzLGQ9MSk6bD42NTUzNSYmKGwtPTY1NTM2LHIucHVzaChsPj4+MTAmMTAyM3w1NTI5NiksbD01NjMyMHwxMDIzJmwpLHIucHVzaChsKSxpKz1kfXJldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aDtpZih0PD1OZSlyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZSk7dmFyIG49IiIscj0wO2Zvcig7cjx0OyluKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlLnNsaWNlKHIscis9TmUpKTtyZXR1cm4gbn0ocil9bWUucG9vbFNpemU9ODE5MixtZS5fYXVnbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX189bWUucHJvdG90eXBlLGV9LG1lLmZyb209ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB3ZShudWxsLGUsdCxuKX0sbWUuVFlQRURfQVJSQVlfU1VQUE9SVCYmKG1lLnByb3RvdHlwZS5fX3Byb3RvX189VWludDhBcnJheS5wcm90b3R5cGUsbWUuX19wcm90b19fPVVpbnQ4QXJyYXkpLG1lLmFsbG9jPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIF9lKHQpLHQ8PTA/eWUoZSx0KTp2b2lkIDAhPT1uPyJzdHJpbmciPT10eXBlb2Ygcj95ZShlLHQpLmZpbGwobixyKTp5ZShlLHQpLmZpbGwobik6eWUoZSx0KX0obnVsbCxlLHQsbil9LG1lLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKGUpe3JldHVybiBTZShudWxsLGUpfSxtZS5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oZSl7cmV0dXJuIFNlKG51bGwsZSl9LG1lLmlzQnVmZmVyPXR0LG1lLmNvbXBhcmU9ZnVuY3Rpb24oZSx0KXtpZigha2UoZSl8fCFrZSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzIik7aWYoZT09PXQpcmV0dXJuIDA7Zm9yKHZhciBuPWUubGVuZ3RoLHI9dC5sZW5ndGgsaT0wLG89TWF0aC5taW4obixyKTtpPG87KytpKWlmKGVbaV0hPT10W2ldKXtuPWVbaV0scj10W2ldO2JyZWFrfXJldHVybiBuPHI/LTE6cjxuPzE6MH0sbWUuaXNFbmNvZGluZz1mdW5jdGlvbihlKXtzd2l0Y2goU3RyaW5nKGUpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0sbWUuY29uY2F0PWZ1bmN0aW9uKGUsdCl7aWYoIXBlKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIG1lLmFsbG9jKDApO3ZhciBuO2lmKHZvaWQgMD09PXQpZm9yKHQ9MCxuPTA7bjxlLmxlbmd0aDsrK24pdCs9ZVtuXS5sZW5ndGg7dmFyIHI9bWUuYWxsb2NVbnNhZmUodCksaT0wO2ZvcihuPTA7bjxlLmxlbmd0aDsrK24pe3ZhciBvPWVbbl07aWYoIWtlKG8pKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtvLmNvcHkocixpKSxpKz1vLmxlbmd0aH1yZXR1cm4gcn0sbWUuYnl0ZUxlbmd0aD1SZSxtZS5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLG1lLnByb3RvdHlwZS5zd2FwMTY9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTIhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTIpQWUodGhpcyx0LHQrMSk7cmV0dXJuIHRoaXN9LG1lLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTQpQWUodGhpcyx0LHQrMyksQWUodGhpcyx0KzEsdCsyKTtyZXR1cm4gdGhpc30sbWUucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlOCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9OClBZSh0aGlzLHQsdCs3KSxBZSh0aGlzLHQrMSx0KzYpLEFlKHRoaXMsdCsyLHQrNSksQWUodGhpcyx0KzMsdCs0KTtyZXR1cm4gdGhpc30sbWUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGU9MHx0aGlzLmxlbmd0aDtyZXR1cm4gMD09PWU/IiI6MD09PWFyZ3VtZW50cy5sZW5ndGg/amUodGhpcywwLGUpOlRlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sbWUucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihlKXtpZigha2UoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3JldHVybiB0aGlzPT09ZXx8MD09PW1lLmNvbXBhcmUodGhpcyxlKX0sbWUucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXt2YXIgZT0iIjtyZXR1cm4gdGhpcy5sZW5ndGg+MCYmKGU9dGhpcy50b1N0cmluZygiaGV4IiwwLDUwKS5tYXRjaCgvLnsyfS9nKS5qb2luKCIgIiksdGhpcy5sZW5ndGg+NTAmJihlKz0iIC4uLiAiKSksIjxCdWZmZXIgIitlKyI+In0sbWUucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oZSx0LG4scixpKXtpZigha2UoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO2lmKHZvaWQgMD09PXQmJih0PTApLHZvaWQgMD09PW4mJihuPWU/ZS5sZW5ndGg6MCksdm9pZCAwPT09ciYmKHI9MCksdm9pZCAwPT09aSYmKGk9dGhpcy5sZW5ndGgpLHQ8MHx8bj5lLmxlbmd0aHx8cjwwfHxpPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJvdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihyPj1pJiZ0Pj1uKXJldHVybiAwO2lmKHI+PWkpcmV0dXJuLTE7aWYodD49bilyZXR1cm4gMTtpZih0aGlzPT09ZSlyZXR1cm4gMDtmb3IodmFyIG89KGk+Pj49MCktKHI+Pj49MCkscz0obj4+Pj0wKS0odD4+Pj0wKSxhPU1hdGgubWluKG8scyksYz10aGlzLnNsaWNlKHIsaSksdT1lLnNsaWNlKHQsbiksbD0wO2w8YTsrK2wpaWYoY1tsXSE9PXVbbF0pe289Y1tsXSxzPXVbbF07YnJlYWt9cmV0dXJuIG88cz8tMTpzPG8/MTowfSxtZS5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24oZSx0LG4pe3JldHVybi0xIT09dGhpcy5pbmRleE9mKGUsdCxuKX0sbWUucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBDZSh0aGlzLGUsdCxuLCEwKX0sbWUucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gQ2UodGhpcyxlLHQsbiwhMSl9LG1lLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihlLHQsbixyKXtpZih2b2lkIDA9PT10KXI9InV0ZjgiLG49dGhpcy5sZW5ndGgsdD0wO2Vsc2UgaWYodm9pZCAwPT09biYmInN0cmluZyI9PXR5cGVvZiB0KXI9dCxuPXRoaXMubGVuZ3RoLHQ9MDtlbHNle2lmKCFpc0Zpbml0ZSh0KSl0aHJvdyBuZXcgRXJyb3IoIkJ1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkIik7dHw9MCxpc0Zpbml0ZShuKT8obnw9MCx2b2lkIDA9PT1yJiYocj0idXRmOCIpKToocj1uLG49dm9pZCAwKX12YXIgaT10aGlzLmxlbmd0aC10O2lmKCh2b2lkIDA9PT1ufHxuPmkpJiYobj1pKSxlLmxlbmd0aD4wJiYobjwwfHx0PDApfHx0PnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpO3J8fChyPSJ1dGY4Iik7Zm9yKHZhciBvPSExOzspc3dpdGNoKHIpe2Nhc2UiaGV4IjpyZXR1cm4gUGUodGhpcyxlLHQsbik7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gT2UodGhpcyxlLHQsbik7Y2FzZSJhc2NpaSI6cmV0dXJuIEllKHRoaXMsZSx0LG4pO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIFVlKHRoaXMsZSx0LG4pO2Nhc2UiYmFzZTY0IjpyZXR1cm4gTGUodGhpcyxlLHQsbik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBIZSh0aGlzLGUsdCxuKTtkZWZhdWx0OmlmKG8pdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIityKTtyPSgiIityKS50b0xvd2VyQ2FzZSgpLG89ITB9fSxtZS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IkJ1ZmZlciIsZGF0YTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnJ8fHRoaXMsMCl9fTt2YXIgTmU9NDA5NjtmdW5jdGlvbiB4ZShlLHQsbil7dmFyIHI9IiI7bj1NYXRoLm1pbihlLmxlbmd0aCxuKTtmb3IodmFyIGk9dDtpPG47KytpKXIrPVN0cmluZy5mcm9tQ2hhckNvZGUoMTI3JmVbaV0pO3JldHVybiByfWZ1bmN0aW9uIHFlKGUsdCxuKXt2YXIgcj0iIjtuPU1hdGgubWluKGUubGVuZ3RoLG4pO2Zvcih2YXIgaT10O2k8bjsrK2kpcis9U3RyaW5nLmZyb21DaGFyQ29kZShlW2ldKTtyZXR1cm4gcn1mdW5jdGlvbiBCZShlLHQsbil7dmFyIHI9ZS5sZW5ndGg7KCF0fHx0PDApJiYodD0wKSwoIW58fG48MHx8bj5yKSYmKG49cik7Zm9yKHZhciBpPSIiLG89dDtvPG47KytvKWkrPSRlKGVbb10pO3JldHVybiBpfWZ1bmN0aW9uIEZlKGUsdCxuKXtmb3IodmFyIHI9ZS5zbGljZSh0LG4pLGk9IiIsbz0wO288ci5sZW5ndGg7bys9MilpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHJbb10rMjU2KnJbbysxXSk7cmV0dXJuIGl9ZnVuY3Rpb24gS2UoZSx0LG4pe2lmKGUlMSE9MHx8ZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgaXMgbm90IHVpbnQiKTtpZihlK3Q+bil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpfWZ1bmN0aW9uIEplKGUsdCxuLHIsaSxvKXtpZigha2UoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZmZlciIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKHQ+aXx8dDxvKXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihuK3I+ZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIFdlKGUsdCxuLHIpe3Q8MCYmKHQ9NjU1MzUrdCsxKTtmb3IodmFyIGk9MCxvPU1hdGgubWluKGUubGVuZ3RoLW4sMik7aTxvOysraSllW24raV09KHQmMjU1PDw4KihyP2k6MS1pKSk+Pj44KihyP2k6MS1pKX1mdW5jdGlvbiB6ZShlLHQsbixyKXt0PDAmJih0PTQyOTQ5NjcyOTUrdCsxKTtmb3IodmFyIGk9MCxvPU1hdGgubWluKGUubGVuZ3RoLW4sNCk7aTxvOysraSllW24raV09dD4+PjgqKHI/aTozLWkpJjI1NX1mdW5jdGlvbiBWZShlLHQsbixyLGksbyl7aWYobityPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihuPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIFllKGUsdCxuLHIsaSl7cmV0dXJuIGl8fFZlKGUsMCxuLDQpLGhlKGUsdCxuLHIsMjMsNCksbis0fWZ1bmN0aW9uIEdlKGUsdCxuLHIsaSl7cmV0dXJuIGl8fFZlKGUsMCxuLDgpLGhlKGUsdCxuLHIsNTIsOCksbis4fW1lLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihlLHQpe3ZhciBuLHI9dGhpcy5sZW5ndGg7aWYoKGU9fn5lKTwwPyhlKz1yKTwwJiYoZT0wKTplPnImJihlPXIpLCh0PXZvaWQgMD09PXQ/cjp+fnQpPDA/KHQrPXIpPDAmJih0PTApOnQ+ciYmKHQ9ciksdDxlJiYodD1lKSxtZS5UWVBFRF9BUlJBWV9TVVBQT1JUKShuPXRoaXMuc3ViYXJyYXkoZSx0KSkuX19wcm90b19fPW1lLnByb3RvdHlwZTtlbHNle3ZhciBpPXQtZTtuPW5ldyBtZShpLHZvaWQgMCk7Zm9yKHZhciBvPTA7bzxpOysrbyluW29dPXRoaXNbbytlXX1yZXR1cm4gbn0sbWUucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24oZSx0LG4pe2V8PTAsdHw9MCxufHxLZShlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgcj10aGlzW2VdLGk9MSxvPTA7KytvPHQmJihpKj0yNTYpOylyKz10aGlzW2Urb10qaTtyZXR1cm4gcn0sbWUucHJvdG90eXBlLnJlYWRVSW50QkU9ZnVuY3Rpb24oZSx0LG4pe2V8PTAsdHw9MCxufHxLZShlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgcj10aGlzW2UrLS10XSxpPTE7dD4wJiYoaSo9MjU2KTspcis9dGhpc1tlKy0tdF0qaTtyZXR1cm4gcn0sbWUucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxLZShlLDEsdGhpcy5sZW5ndGgpLHRoaXNbZV19LG1lLnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8S2UoZSwyLHRoaXMubGVuZ3RoKSx0aGlzW2VdfHRoaXNbZSsxXTw8OH0sbWUucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxLZShlLDIsdGhpcy5sZW5ndGgpLHRoaXNbZV08PDh8dGhpc1tlKzFdfSxtZS5wcm90b3R5cGUucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEtlKGUsNCx0aGlzLmxlbmd0aCksKHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbZSszXX0sbWUucHJvdG90eXBlLnJlYWRVSW50MzJCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxLZShlLDQsdGhpcy5sZW5ndGgpLDE2Nzc3MjE2KnRoaXNbZV0rKHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXSl9LG1lLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24oZSx0LG4pe2V8PTAsdHw9MCxufHxLZShlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgcj10aGlzW2VdLGk9MSxvPTA7KytvPHQmJihpKj0yNTYpOylyKz10aGlzW2Urb10qaTtyZXR1cm4gcj49KGkqPTEyOCkmJihyLT1NYXRoLnBvdygyLDgqdCkpLHJ9LG1lLnByb3RvdHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24oZSx0LG4pe2V8PTAsdHw9MCxufHxLZShlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgcj10LGk9MSxvPXRoaXNbZSstLXJdO3I+MCYmKGkqPTI1Nik7KW8rPXRoaXNbZSstLXJdKmk7cmV0dXJuIG8+PShpKj0xMjgpJiYoby09TWF0aC5wb3coMiw4KnQpKSxvfSxtZS5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8S2UoZSwxLHRoaXMubGVuZ3RoKSwxMjgmdGhpc1tlXT8tMSooMjU1LXRoaXNbZV0rMSk6dGhpc1tlXX0sbWUucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKGUsdCl7dHx8S2UoZSwyLHRoaXMubGVuZ3RoKTt2YXIgbj10aGlzW2VdfHRoaXNbZSsxXTw8ODtyZXR1cm4gMzI3Njgmbj80Mjk0OTAxNzYwfG46bn0sbWUucHJvdG90eXBlLnJlYWRJbnQxNkJFPWZ1bmN0aW9uKGUsdCl7dHx8S2UoZSwyLHRoaXMubGVuZ3RoKTt2YXIgbj10aGlzW2UrMV18dGhpc1tlXTw8ODtyZXR1cm4gMzI3Njgmbj80Mjk0OTAxNzYwfG46bn0sbWUucHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEtlKGUsNCx0aGlzLmxlbmd0aCksdGhpc1tlXXx0aGlzW2UrMV08PDh8dGhpc1tlKzJdPDwxNnx0aGlzW2UrM108PDI0fSxtZS5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8S2UoZSw0LHRoaXMubGVuZ3RoKSx0aGlzW2VdPDwyNHx0aGlzW2UrMV08PDE2fHRoaXNbZSsyXTw8OHx0aGlzW2UrM119LG1lLnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxLZShlLDQsdGhpcy5sZW5ndGgpLGRlKHRoaXMsZSwhMCwyMyw0KX0sbWUucHJvdG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEtlKGUsNCx0aGlzLmxlbmd0aCksZGUodGhpcyxlLCExLDIzLDQpfSxtZS5wcm90b3R5cGUucmVhZERvdWJsZUxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEtlKGUsOCx0aGlzLmxlbmd0aCksZGUodGhpcyxlLCEwLDUyLDgpfSxtZS5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEtlKGUsOCx0aGlzLmxlbmd0aCksZGUodGhpcyxlLCExLDUyLDgpfSxtZS5wcm90b3R5cGUud3JpdGVVSW50TEU9ZnVuY3Rpb24oZSx0LG4scil7KGU9K2UsdHw9MCxufD0wLHIpfHxKZSh0aGlzLGUsdCxuLE1hdGgucG93KDIsOCpuKS0xLDApO3ZhciBpPTEsbz0wO2Zvcih0aGlzW3RdPTI1NSZlOysrbzxuJiYoaSo9MjU2KTspdGhpc1t0K29dPWUvaSYyNTU7cmV0dXJuIHQrbn0sbWUucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKGUsdCxuLHIpeyhlPStlLHR8PTAsbnw9MCxyKXx8SmUodGhpcyxlLHQsbixNYXRoLnBvdygyLDgqbiktMSwwKTt2YXIgaT1uLTEsbz0xO2Zvcih0aGlzW3QraV09MjU1JmU7LS1pPj0wJiYobyo9MjU2KTspdGhpc1t0K2ldPWUvbyYyNTU7cmV0dXJuIHQrbn0sbWUucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8SmUodGhpcyxlLHQsMSwyNTUsMCksbWUuVFlQRURfQVJSQVlfU1VQUE9SVHx8KGU9TWF0aC5mbG9vcihlKSksdGhpc1t0XT0yNTUmZSx0KzF9LG1lLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fEplKHRoaXMsZSx0LDIsNjU1MzUsMCksbWUuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgpOldlKHRoaXMsZSx0LCEwKSx0KzJ9LG1lLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fEplKHRoaXMsZSx0LDIsNjU1MzUsMCksbWUuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+OCx0aGlzW3QrMV09MjU1JmUpOldlKHRoaXMsZSx0LCExKSx0KzJ9LG1lLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fEplKHRoaXMsZSx0LDQsNDI5NDk2NzI5NSwwKSxtZS5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3QrM109ZT4+PjI0LHRoaXNbdCsyXT1lPj4+MTYsdGhpc1t0KzFdPWU+Pj44LHRoaXNbdF09MjU1JmUpOnplKHRoaXMsZSx0LCEwKSx0KzR9LG1lLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fEplKHRoaXMsZSx0LDQsNDI5NDk2NzI5NSwwKSxtZS5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj4yNCx0aGlzW3QrMV09ZT4+PjE2LHRoaXNbdCsyXT1lPj4+OCx0aGlzW3QrM109MjU1JmUpOnplKHRoaXMsZSx0LCExKSx0KzR9LG1lLnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKGU9K2UsdHw9MCwhcil7dmFyIGk9TWF0aC5wb3coMiw4Km4tMSk7SmUodGhpcyxlLHQsbixpLTEsLWkpfXZhciBvPTAscz0xLGE9MDtmb3IodGhpc1t0XT0yNTUmZTsrK288biYmKHMqPTI1Nik7KWU8MCYmMD09PWEmJjAhPT10aGlzW3Qrby0xXSYmKGE9MSksdGhpc1t0K29dPShlL3M+PjApLWEmMjU1O3JldHVybiB0K259LG1lLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKGU9K2UsdHw9MCwhcil7dmFyIGk9TWF0aC5wb3coMiw4Km4tMSk7SmUodGhpcyxlLHQsbixpLTEsLWkpfXZhciBvPW4tMSxzPTEsYT0wO2Zvcih0aGlzW3Qrb109MjU1JmU7LS1vPj0wJiYocyo9MjU2KTspZTwwJiYwPT09YSYmMCE9PXRoaXNbdCtvKzFdJiYoYT0xKSx0aGlzW3Qrb109KGUvcz4+MCktYSYyNTU7cmV0dXJuIHQrbn0sbWUucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxKZSh0aGlzLGUsdCwxLDEyNywtMTI4KSxtZS5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoZT1NYXRoLmZsb29yKGUpKSxlPDAmJihlPTI1NStlKzEpLHRoaXNbdF09MjU1JmUsdCsxfSxtZS5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fEplKHRoaXMsZSx0LDIsMzI3NjcsLTMyNzY4KSxtZS5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCk6V2UodGhpcyxlLHQsITApLHQrMn0sbWUucHJvdG90eXBlLndyaXRlSW50MTZCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxKZSh0aGlzLGUsdCwyLDMyNzY3LC0zMjc2OCksbWUuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+OCx0aGlzW3QrMV09MjU1JmUpOldlKHRoaXMsZSx0LCExKSx0KzJ9LG1lLnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8SmUodGhpcyxlLHQsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxtZS5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCx0aGlzW3QrMl09ZT4+PjE2LHRoaXNbdCszXT1lPj4+MjQpOnplKHRoaXMsZSx0LCEwKSx0KzR9LG1lLnByb3RvdHlwZS53cml0ZUludDMyQkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8SmUodGhpcyxlLHQsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxlPDAmJihlPTQyOTQ5NjcyOTUrZSsxKSxtZS5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj4yNCx0aGlzW3QrMV09ZT4+PjE2LHRoaXNbdCsyXT1lPj4+OCx0aGlzW3QrM109MjU1JmUpOnplKHRoaXMsZSx0LCExKSx0KzR9LG1lLnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBZZSh0aGlzLGUsdCwhMCxuKX0sbWUucHJvdG90eXBlLndyaXRlRmxvYXRCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIFllKHRoaXMsZSx0LCExLG4pfSxtZS5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIEdlKHRoaXMsZSx0LCEwLG4pfSxtZS5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIEdlKHRoaXMsZSx0LCExLG4pfSxtZS5wcm90b3R5cGUuY29weT1mdW5jdGlvbihlLHQsbixyKXtpZihufHwobj0wKSxyfHwwPT09cnx8KHI9dGhpcy5sZW5ndGgpLHQ+PWUubGVuZ3RoJiYodD1lLmxlbmd0aCksdHx8KHQ9MCkscj4wJiZyPG4mJihyPW4pLHI9PT1uKXJldHVybiAwO2lmKDA9PT1lLmxlbmd0aHx8MD09PXRoaXMubGVuZ3RoKXJldHVybiAwO2lmKHQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKG48MHx8bj49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNvdXJjZVN0YXJ0IG91dCBvZiBib3VuZHMiKTtpZihyPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNvdXJjZUVuZCBvdXQgb2YgYm91bmRzIik7cj50aGlzLmxlbmd0aCYmKHI9dGhpcy5sZW5ndGgpLGUubGVuZ3RoLXQ8ci1uJiYocj1lLmxlbmd0aC10K24pO3ZhciBpLG89ci1uO2lmKHRoaXM9PT1lJiZuPHQmJnQ8cilmb3IoaT1vLTE7aT49MDstLWkpZVtpK3RdPXRoaXNbaStuXTtlbHNlIGlmKG88MWUzfHwhbWUuVFlQRURfQVJSQVlfU1VQUE9SVClmb3IoaT0wO2k8bzsrK2kpZVtpK3RdPXRoaXNbaStuXTtlbHNlIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKGUsdGhpcy5zdWJhcnJheShuLG4rbyksdCk7cmV0dXJuIG99LG1lLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKCJzdHJpbmciPT10eXBlb2YgZSl7aWYoInN0cmluZyI9PXR5cGVvZiB0PyhyPXQsdD0wLG49dGhpcy5sZW5ndGgpOiJzdHJpbmciPT10eXBlb2YgbiYmKHI9bixuPXRoaXMubGVuZ3RoKSwxPT09ZS5sZW5ndGgpe3ZhciBpPWUuY2hhckNvZGVBdCgwKTtpPDI1NiYmKGU9aSl9aWYodm9pZCAwIT09ciYmInN0cmluZyIhPXR5cGVvZiByKXRocm93IG5ldyBUeXBlRXJyb3IoImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmciKTtpZigic3RyaW5nIj09dHlwZW9mIHImJiFtZS5pc0VuY29kaW5nKHIpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrcil9ZWxzZSJudW1iZXIiPT10eXBlb2YgZSYmKGUmPTI1NSk7aWYodDwwfHx0aGlzLmxlbmd0aDx0fHx0aGlzLmxlbmd0aDxuKXRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihuPD10KXJldHVybiB0aGlzO3ZhciBvO2lmKHQ+Pj49MCxuPXZvaWQgMD09PW4/dGhpcy5sZW5ndGg6bj4+PjAsZXx8KGU9MCksIm51bWJlciI9PXR5cGVvZiBlKWZvcihvPXQ7bzxuOysrbyl0aGlzW29dPWU7ZWxzZXt2YXIgcz1rZShlKT9lOlplKG5ldyBtZShlLHIpLnRvU3RyaW5nKCkpLGE9cy5sZW5ndGg7Zm9yKG89MDtvPG4tdDsrK28pdGhpc1tvK3RdPXNbbyVhXX1yZXR1cm4gdGhpc307dmFyIFhlPS9bXitcLzAtOUEtWmEtei1fXS9nO2Z1bmN0aW9uICRlKGUpe3JldHVybiBlPDE2PyIwIitlLnRvU3RyaW5nKDE2KTplLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBaZShlLHQpe3ZhciBuO3Q9dHx8MS8wO2Zvcih2YXIgcj1lLmxlbmd0aCxpPW51bGwsbz1bXSxzPTA7czxyOysrcyl7aWYoKG49ZS5jaGFyQ29kZUF0KHMpKT41NTI5NSYmbjw1NzM0NCl7aWYoIWkpe2lmKG4+NTYzMTkpeyh0LT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZihzKzE9PT1yKXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aT1uO2NvbnRpbnVlfWlmKG48NTYzMjApeyh0LT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KSxpPW47Y29udGludWV9bj02NTUzNisoaS01NTI5Njw8MTB8bi01NjMyMCl9ZWxzZSBpJiYodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7aWYoaT1udWxsLG48MTI4KXtpZigodC09MSk8MClicmVhaztvLnB1c2gobil9ZWxzZSBpZihuPDIwNDgpe2lmKCh0LT0yKTwwKWJyZWFrO28ucHVzaChuPj42fDE5Miw2MyZufDEyOCl9ZWxzZSBpZihuPDY1NTM2KXtpZigodC09Myk8MClicmVhaztvLnB1c2gobj4+MTJ8MjI0LG4+PjYmNjN8MTI4LDYzJm58MTI4KX1lbHNle2lmKCEobjwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpO2lmKCh0LT00KTwwKWJyZWFrO28ucHVzaChuPj4xOHwyNDAsbj4+MTImNjN8MTI4LG4+PjYmNjN8MTI4LDYzJm58MTI4KX19cmV0dXJuIG99ZnVuY3Rpb24gUWUoZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLG8sczthZXx8Y2UoKTt2YXIgYT1lLmxlbmd0aDtpZihhJTQ+MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQiKTtvPSI9Ij09PWVbYS0yXT8yOiI9Ij09PWVbYS0xXT8xOjAscz1uZXcgc2UoMyphLzQtbykscj1vPjA/YS00OmE7dmFyIGM9MDtmb3IodD0wLG49MDt0PHI7dCs9NCxuKz0zKWk9b2VbZS5jaGFyQ29kZUF0KHQpXTw8MTh8b2VbZS5jaGFyQ29kZUF0KHQrMSldPDwxMnxvZVtlLmNoYXJDb2RlQXQodCsyKV08PDZ8b2VbZS5jaGFyQ29kZUF0KHQrMyldLHNbYysrXT1pPj4xNiYyNTUsc1tjKytdPWk+PjgmMjU1LHNbYysrXT0yNTUmaTtyZXR1cm4gMj09PW8/KGk9b2VbZS5jaGFyQ29kZUF0KHQpXTw8MnxvZVtlLmNoYXJDb2RlQXQodCsxKV0+PjQsc1tjKytdPTI1NSZpKToxPT09byYmKGk9b2VbZS5jaGFyQ29kZUF0KHQpXTw8MTB8b2VbZS5jaGFyQ29kZUF0KHQrMSldPDw0fG9lW2UuY2hhckNvZGVBdCh0KzIpXT4+MixzW2MrK109aT4+OCYyNTUsc1tjKytdPTI1NSZpKSxzfShmdW5jdGlvbihlKXtpZigoZT1mdW5jdGlvbihlKXtyZXR1cm4gZS50cmltP2UudHJpbSgpOmUucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfShlKS5yZXBsYWNlKFhlLCIiKSkubGVuZ3RoPDIpcmV0dXJuIiI7Zm9yKDtlLmxlbmd0aCU0IT0wOyllKz0iPSI7cmV0dXJuIGV9KGUpKX1mdW5jdGlvbiBldChlLHQsbixyKXtmb3IodmFyIGk9MDtpPHImJiEoaStuPj10Lmxlbmd0aHx8aT49ZS5sZW5ndGgpOysraSl0W2krbl09ZVtpXTtyZXR1cm4gaX1mdW5jdGlvbiB0dChlKXtyZXR1cm4gbnVsbCE9ZSYmKCEhZS5faXNCdWZmZXJ8fG50KGUpfHxmdW5jdGlvbihlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZS5yZWFkRmxvYXRMRSYmImZ1bmN0aW9uIj09dHlwZW9mIGUuc2xpY2UmJm50KGUuc2xpY2UoMCwwKSl9KGUpKX1mdW5jdGlvbiBudChlKXtyZXR1cm4hIWUuY29uc3RydWN0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZlLmNvbnN0cnVjdG9yLmlzQnVmZmVyKGUpfXZhciBydD1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxCdWZmZXI6bWUsSU5TUEVDVF9NQVhfQllURVM6NTAsU2xvd0J1ZmZlcjpmdW5jdGlvbihlKXtyZXR1cm4rZSE9ZSYmKGU9MCksbWUuYWxsb2MoK2UpfSxpc0J1ZmZlcjp0dCxrTWF4TGVuZ3RoOmdlfSksaXQ9bmU7ZnVuY3Rpb24gb3QoZSx0LG4scixpKXtFcnJvci5jYWxsKHRoaXMpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcik6dGhpcy5zdGFjaz0obmV3IEVycm9yKS5zdGFjayx0aGlzLm1lc3NhZ2U9ZSx0aGlzLm5hbWU9IkF4aW9zRXJyb3IiLHQmJih0aGlzLmNvZGU9dCksbiYmKHRoaXMuY29uZmlnPW4pLHImJih0aGlzLnJlcXVlc3Q9ciksaSYmKHRoaXMucmVzcG9uc2U9aSl9aXQuaW5oZXJpdHMob3QsRXJyb3Ise3RvSlNPTjpmdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzp0aGlzLmNvbmZpZyxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19fSk7dmFyIHN0PW90LnByb3RvdHlwZSxhdD17fTtbIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwiRVJSX0JBRF9PUFRJT04iLCJFQ09OTkFCT1JURUQiLCJFVElNRURPVVQiLCJFUlJfTkVUV09SSyIsIkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMiLCJFUlJfREVQUkVDQVRFRCIsIkVSUl9CQURfUkVTUE9OU0UiLCJFUlJfQkFEX1JFUVVFU1QiLCJFUlJfQ0FOQ0VMRUQiLCJFUlJfTk9UX1NVUFBPUlQiLCJFUlJfSU5WQUxJRF9VUkwiXS5mb3JFYWNoKChmdW5jdGlvbihlKXthdFtlXT17dmFsdWU6ZX19KSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMob3QsYXQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdCwiaXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KSxvdC5mcm9tPWZ1bmN0aW9uKGUsdCxuLHIsaSxvKXt2YXIgcz1PYmplY3QuY3JlYXRlKHN0KTtyZXR1cm4gaXQudG9GbGF0T2JqZWN0KGUscywoZnVuY3Rpb24oZSl7cmV0dXJuIGUhPT1FcnJvci5wcm90b3R5cGV9KSksb3QuY2FsbChzLGUubWVzc2FnZSx0LG4scixpKSxzLmNhdXNlPWUscy5uYW1lPWUubmFtZSxvJiZPYmplY3QuYXNzaWduKHMsbyksc307dmFyIGN0PW90LHV0PSJvYmplY3QiPT10eXBlb2Ygc2VsZj9zZWxmLkZvcm1EYXRhOndpbmRvdy5Gb3JtRGF0YSxsdD1uZSxkdD1jdCxodD11dDtmdW5jdGlvbiBmdChlKXtyZXR1cm4gbHQuaXNQbGFpbk9iamVjdChlKXx8bHQuaXNBcnJheShlKX1mdW5jdGlvbiBwdChlKXtyZXR1cm4gbHQuZW5kc1dpdGgoZSwiW10iKT9lLnNsaWNlKDAsLTIpOmV9ZnVuY3Rpb24gZ3QoZSx0LG4pe3JldHVybiBlP2UuY29uY2F0KHQpLm1hcCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT1wdChlKSwhbiYmdD8iWyIrZSsiXSI6ZX0pKS5qb2luKG4/Ii4iOiIiKTp0fXZhciB2dD1sdC50b0ZsYXRPYmplY3QobHQse30sbnVsbCwoZnVuY3Rpb24oZSl7cmV0dXJuL15pc1tBLVpdLy50ZXN0KGUpfSkpO3ZhciB5dD1mdW5jdGlvbihlLHQsbil7aWYoIWx0LmlzT2JqZWN0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdCIpO3Q9dHx8bmV3KGh0fHxGb3JtRGF0YSk7dmFyIHIsaT0obj1sdC50b0ZsYXRPYmplY3Qobix7bWV0YVRva2VuczohMCxkb3RzOiExLGluZGV4ZXM6ITF9LCExLChmdW5jdGlvbihlLHQpe3JldHVybiFsdC5pc1VuZGVmaW5lZCh0W2VdKX0pKSkubWV0YVRva2VucyxvPW4udmlzaXRvcnx8bCxzPW4uZG90cyxhPW4uaW5kZXhlcyxjPShuLkJsb2J8fCJ1bmRlZmluZWQiIT10eXBlb2YgQmxvYiYmQmxvYikmJigocj10KSYmbHQuaXNGdW5jdGlvbihyLmFwcGVuZCkmJiJGb3JtRGF0YSI9PT1yW1N5bWJvbC50b1N0cmluZ1RhZ10mJnJbU3ltYm9sLml0ZXJhdG9yXSk7aWYoIWx0LmlzRnVuY3Rpb24obykpdGhyb3cgbmV3IFR5cGVFcnJvcigidmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24iKTtmdW5jdGlvbiB1KGUpe2lmKG51bGw9PT1lKXJldHVybiIiO2lmKGx0LmlzRGF0ZShlKSlyZXR1cm4gZS50b0lTT1N0cmluZygpO2lmKCFjJiZsdC5pc0Jsb2IoZSkpdGhyb3cgbmV3IGR0KCJCbG9iIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhIEJ1ZmZlciBpbnN0ZWFkLiIpO3JldHVybiBsdC5pc0FycmF5QnVmZmVyKGUpfHxsdC5pc1R5cGVkQXJyYXkoZSk/YyYmImZ1bmN0aW9uIj09dHlwZW9mIEJsb2I/bmV3IEJsb2IoW2VdKTptZS5mcm9tKGUpOmV9ZnVuY3Rpb24gbChlLG4scil7dmFyIG89ZTtpZihlJiYhciYmIm9iamVjdCI9PXR5cGVvZiBlKWlmKGx0LmVuZHNXaXRoKG4sInt9Iikpbj1pP246bi5zbGljZSgwLC0yKSxlPUpTT04uc3RyaW5naWZ5KGUpO2Vsc2UgaWYobHQuaXNBcnJheShlKSYmZnVuY3Rpb24oZSl7cmV0dXJuIGx0LmlzQXJyYXkoZSkmJiFlLnNvbWUoZnQpfShlKXx8bHQuaXNGaWxlTGlzdChlKXx8bHQuZW5kc1dpdGgobiwiW10iKSYmKG89bHQudG9BcnJheShlKSkpcmV0dXJuIG49cHQobiksby5mb3JFYWNoKChmdW5jdGlvbihlLHIpeyFsdC5pc1VuZGVmaW5lZChlKSYmbnVsbCE9PWUmJnQuYXBwZW5kKCEwPT09YT9ndChbbl0scixzKTpudWxsPT09YT9uOm4rIltdIix1KGUpKX0pKSwhMTtyZXR1cm4hIWZ0KGUpfHwodC5hcHBlbmQoZ3QocixuLHMpLHUoZSkpLCExKX12YXIgZD1bXSxoPU9iamVjdC5hc3NpZ24odnQse2RlZmF1bHRWaXNpdG9yOmwsY29udmVydFZhbHVlOnUsaXNWaXNpdGFibGU6ZnR9KTtpZighbHQuaXNPYmplY3QoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiZGF0YSBtdXN0IGJlIGFuIG9iamVjdCIpO3JldHVybiBmdW5jdGlvbiBlKG4scil7aWYoIWx0LmlzVW5kZWZpbmVkKG4pKXtpZigtMSE9PWQuaW5kZXhPZihuKSl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICIrci5qb2luKCIuIikpO2QucHVzaChuKSxsdC5mb3JFYWNoKG4sKGZ1bmN0aW9uKG4saSl7ITA9PT0oIShsdC5pc1VuZGVmaW5lZChuKXx8bnVsbD09PW4pJiZvLmNhbGwodCxuLGx0LmlzU3RyaW5nKGkpP2kudHJpbSgpOmkscixoKSkmJmUobixyP3IuY29uY2F0KGkpOltpXSl9KSksZC5wb3AoKX19KGUpLHR9LG10PXl0O2Z1bmN0aW9uIHd0KGUpe3ZhciB0PXsiISI6IiUyMSIsIiciOiIlMjciLCIoIjoiJTI4IiwiKSI6IiUyOSIsIn4iOiIlN0UiLCIlMjAiOiIrIiwiJTAwIjoiXDAifTtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGUpLnJlcGxhY2UoL1shJ1woXCl+XXwlMjB8JTAwL2csKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSkpfWZ1bmN0aW9uIF90KGUsdCl7dGhpcy5fcGFpcnM9W10sZSYmbXQoZSx0aGlzLHQpfXZhciBTdD1fdC5wcm90b3R5cGU7U3QuYXBwZW5kPWZ1bmN0aW9uKGUsdCl7dGhpcy5fcGFpcnMucHVzaChbZSx0XSl9LFN0LnRvU3RyaW5nPWZ1bmN0aW9uKGUpe3ZhciB0PWU/ZnVuY3Rpb24odCl7cmV0dXJuIGUuY2FsbCh0aGlzLHQsd3QpfTp3dDtyZXR1cm4gdGhpcy5fcGFpcnMubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gdChlWzBdKSsiPSIrdChlWzFdKX0pLCIiKS5qb2luKCImIil9O3ZhciBidD1fdCxFdD1uZSxrdD1idDtmdW5jdGlvbiBSdChlKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGUpLnJlcGxhY2UoLyUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNC9nLCIkIikucmVwbGFjZSgvJTJDL2dpLCIsIikucmVwbGFjZSgvJTIwL2csIisiKS5yZXBsYWNlKC8lNUIvZ2ksIlsiKS5yZXBsYWNlKC8lNUQvZ2ksIl0iKX12YXIgVHQ9ZnVuY3Rpb24oZSx0LG4pe2lmKCF0KXJldHVybiBlO3ZhciByPWUuaW5kZXhPZigiIyIpOy0xIT09ciYmKGU9ZS5zbGljZSgwLHIpKTt2YXIgaSxvPW4mJm4uZW5jb2RlfHxSdCxzPW4mJm4uc2VyaWFsaXplO3JldHVybihpPXM/cyh0LG4pOkV0LmlzVVJMU2VhcmNoUGFyYW1zKHQpP3QudG9TdHJpbmcoKTpuZXcga3QodCxuKS50b1N0cmluZyhvKSkmJihlKz0oLTE9PT1lLmluZGV4T2YoIj8iKT8iPyI6IiYiKStpKSxlfSxBdD1uZTtmdW5jdGlvbiBDdCgpe3RoaXMuaGFuZGxlcnM9W119Q3QucHJvdG90eXBlLnVzZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOmUscmVqZWN0ZWQ6dCxzeW5jaHJvbm91czohIW4mJm4uc3luY2hyb25vdXMscnVuV2hlbjpuP24ucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX0sQ3QucHJvdG90eXBlLmVqZWN0PWZ1bmN0aW9uKGUpe3RoaXMuaGFuZGxlcnNbZV0mJih0aGlzLmhhbmRsZXJzW2VdPW51bGwpfSxDdC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmhhbmRsZXJzJiYodGhpcy5oYW5kbGVycz1bXSl9LEN0LnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGUpe0F0LmZvckVhY2godGhpcy5oYW5kbGVycywoZnVuY3Rpb24odCl7bnVsbCE9PXQmJmUodCl9KSl9O3ZhciBEdD1DdDtmdW5jdGlvbiBQdCgpe3Rocm93IG5ldyBFcnJvcigic2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfWZ1bmN0aW9uIE90KCl7dGhyb3cgbmV3IEVycm9yKCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX12YXIgSXQ9UHQsVXQ9T3Q7ZnVuY3Rpb24gTHQoZSl7aWYoSXQ9PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KGUsMCk7aWYoKEl0PT09UHR8fCFJdCkmJnNldFRpbWVvdXQpcmV0dXJuIEl0PXNldFRpbWVvdXQsc2V0VGltZW91dChlLDApO3RyeXtyZXR1cm4gSXQoZSwwKX1jYXRjaCh0KXt0cnl7cmV0dXJuIEl0LmNhbGwobnVsbCxlLDApfWNhdGNoKHQpe3JldHVybiBJdC5jYWxsKHRoaXMsZSwwKX19fSJmdW5jdGlvbiI9PXR5cGVvZiByZS5zZXRUaW1lb3V0JiYoSXQ9c2V0VGltZW91dCksImZ1bmN0aW9uIj09dHlwZW9mIHJlLmNsZWFyVGltZW91dCYmKFV0PWNsZWFyVGltZW91dCk7dmFyIEh0LE10PVtdLGp0PSExLE50PS0xO2Z1bmN0aW9uIHh0KCl7anQmJkh0JiYoanQ9ITEsSHQubGVuZ3RoP010PUh0LmNvbmNhdChNdCk6TnQ9LTEsTXQubGVuZ3RoJiZxdCgpKX1mdW5jdGlvbiBxdCgpe2lmKCFqdCl7dmFyIGU9THQoeHQpO2p0PSEwO2Zvcih2YXIgdD1NdC5sZW5ndGg7dDspe2ZvcihIdD1NdCxNdD1bXTsrK050PHQ7KUh0JiZIdFtOdF0ucnVuKCk7TnQ9LTEsdD1NdC5sZW5ndGh9SHQ9bnVsbCxqdD0hMSxmdW5jdGlvbihlKXtpZihVdD09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KGUpO2lmKChVdD09PU90fHwhVXQpJiZjbGVhclRpbWVvdXQpcmV0dXJuIFV0PWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQoZSk7dHJ5e1V0KGUpfWNhdGNoKHQpe3RyeXtyZXR1cm4gVXQuY2FsbChudWxsLGUpfWNhdGNoKHQpe3JldHVybiBVdC5jYWxsKHRoaXMsZSl9fX0oZSl9fWZ1bmN0aW9uIEJ0KGUsdCl7dGhpcy5mdW49ZSx0aGlzLmFycmF5PXR9QnQucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9O2Z1bmN0aW9uIEZ0KCl7fXZhciBLdD1GdCxKdD1GdCxXdD1GdCx6dD1GdCxWdD1GdCxZdD1GdCxHdD1GdDt2YXIgWHQ9cmUucGVyZm9ybWFuY2V8fHt9LCR0PVh0Lm5vd3x8WHQubW96Tm93fHxYdC5tc05vd3x8WHQub05vd3x8WHQud2Via2l0Tm93fHxmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfTt2YXIgWnQ9bmV3IERhdGU7dmFyIFF0PXtuZXh0VGljazpmdW5jdGlvbihlKXt2YXIgdD1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3RoPjEpZm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0W24tMV09YXJndW1lbnRzW25dO010LnB1c2gobmV3IEJ0KGUsdCkpLDEhPT1NdC5sZW5ndGh8fGp0fHxMdChxdCl9LHRpdGxlOiJicm93c2VyIixicm93c2VyOiEwLGVudjp7fSxhcmd2OltdLHZlcnNpb246IiIsdmVyc2lvbnM6e30sb246S3QsYWRkTGlzdGVuZXI6SnQsb25jZTpXdCxvZmY6enQscmVtb3ZlTGlzdGVuZXI6VnQscmVtb3ZlQWxsTGlzdGVuZXJzOll0LGVtaXQ6R3QsYmluZGluZzpmdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkIil9LGN3ZDpmdW5jdGlvbigpe3JldHVybiIvIn0sY2hkaXI6ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQiKX0sdW1hc2s6ZnVuY3Rpb24oKXtyZXR1cm4gMH0saHJ0aW1lOmZ1bmN0aW9uKGUpe3ZhciB0PS4wMDEqJHQuY2FsbChYdCksbj1NYXRoLmZsb29yKHQpLHI9TWF0aC5mbG9vcih0JTEqMWU5KTtyZXR1cm4gZSYmKG4tPWVbMF0sKHItPWVbMV0pPDAmJihuLS0scis9MWU5KSksW24scl19LHBsYXRmb3JtOiJicm93c2VyIixyZWxlYXNlOnt9LGNvbmZpZzp7fSx1cHRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUtWnQpLzFlM319LGVuPVF0LHRuPW5lLG5uPWZ1bmN0aW9uKGUsdCl7dG4uZm9yRWFjaChlLChmdW5jdGlvbihuLHIpe3IhPT10JiZyLnRvVXBwZXJDYXNlKCk9PT10LnRvVXBwZXJDYXNlKCkmJihlW3RdPW4sZGVsZXRlIGVbcl0pfSkpfSxybj17c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX0sb249e2lzQnJvd3NlcjohMCxjbGFzc2VzOntVUkxTZWFyY2hQYXJhbXM6InVuZGVmaW5lZCIhPXR5cGVvZiBVUkxTZWFyY2hQYXJhbXM/VVJMU2VhcmNoUGFyYW1zOmJ0LEZvcm1EYXRhOkZvcm1EYXRhLEJsb2I6QmxvYn0scHJvdG9jb2xzOlsiaHR0cCIsImh0dHBzIiwiZmlsZSIsImJsb2IiLCJ1cmwiLCJkYXRhIl19LHNuPW5lLGFuPXl0LGNuPW9uLHVuPW5lO3ZhciBsbj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsbixyLGkpe3ZhciBvPWVbaSsrXTtpZigiX19wcm90b19fIj09PW8pcmV0dXJuITA7dmFyIHM9TnVtYmVyLmlzRmluaXRlKCtvKSxhPWk+PWUubGVuZ3RoO3JldHVybiBvPSFvJiZ1bi5pc0FycmF5KHIpP3IubGVuZ3RoOm8sYT8odW4uaGFzT3duUHJvcGVydHkocixvKT9yW29dPVtyW29dLG5dOnJbb109biwhcyk6KHJbb10mJnVuLmlzT2JqZWN0KHJbb10pfHwocltvXT1bXSksdChlLG4scltvXSxpKSYmdW4uaXNBcnJheShyW29dKSYmKHJbb109ZnVuY3Rpb24oZSl7dmFyIHQsbixyPXt9LGk9T2JqZWN0LmtleXMoZSksbz1pLmxlbmd0aDtmb3IodD0wO3Q8bzt0KyspcltuPWlbdF1dPWVbbl07cmV0dXJuIHJ9KHJbb10pKSwhcyl9aWYodW4uaXNGb3JtRGF0YShlKSYmdW4uaXNGdW5jdGlvbihlLmVudHJpZXMpKXt2YXIgbj17fTtyZXR1cm4gdW4uZm9yRWFjaEVudHJ5KGUsKGZ1bmN0aW9uKGUscil7dChmdW5jdGlvbihlKXtyZXR1cm4gdW4ubWF0Y2hBbGwoL1x3K3xcWyhcdyopXS9nLGUpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIltdIj09PWVbMF0/IiI6ZVsxXXx8ZVswXX0pKX0oZSkscixuLDApfSkpLG59cmV0dXJuIG51bGx9LGRuPWN0LGhuPW5lLGZuPWhuLmlzU3RhbmRhcmRCcm93c2VyRW52KCk/e3dyaXRlOmZ1bmN0aW9uKGUsdCxuLHIsaSxvKXt2YXIgcz1bXTtzLnB1c2goZSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KHQpKSxobi5pc051bWJlcihuKSYmcy5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUobikudG9HTVRTdHJpbmcoKSksaG4uaXNTdHJpbmcocikmJnMucHVzaCgicGF0aD0iK3IpLGhuLmlzU3RyaW5nKGkpJiZzLnB1c2goImRvbWFpbj0iK2kpLCEwPT09byYmcy5wdXNoKCJzZWN1cmUiKSxkb2N1bWVudC5jb29raWU9cy5qb2luKCI7ICIpfSxyZWFkOmZ1bmN0aW9uKGUpe3ZhciB0PWRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCIoXnw7XFxzKikoIitlKyIpPShbXjtdKikiKSk7cmV0dXJuIHQ/ZGVjb2RlVVJJQ29tcG9uZW50KHRbM10pOm51bGx9LHJlbW92ZTpmdW5jdGlvbihlKXt0aGlzLndyaXRlKGUsIiIsRGF0ZS5ub3coKS04NjRlNSl9fTp7d3JpdGU6ZnVuY3Rpb24oKXt9LHJlYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0scmVtb3ZlOmZ1bmN0aW9uKCl7fX0scG49ZnVuY3Rpb24oZSl7cmV0dXJuL14oW2Etel1bYS16XGQrXC0uXSo6KT9cL1wvL2kudGVzdChlKX0sZ249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD9lLnJlcGxhY2UoL1wvP1wvJC8sIiIpKyIvIit0LnJlcGxhY2UoL15cLysvLCIiKTplfSx2bj1mdW5jdGlvbihlLHQsbil7dmFyIHI9IXBuKHQpO3JldHVybiBlJiYocnx8ITE9PT1uKT9nbihlLHQpOnR9LHluPW5lLG1uPVsiYWdlIiwiYXV0aG9yaXphdGlvbiIsImNvbnRlbnQtbGVuZ3RoIiwiY29udGVudC10eXBlIiwiZXRhZyIsImV4cGlyZXMiLCJmcm9tIiwiaG9zdCIsImlmLW1vZGlmaWVkLXNpbmNlIiwiaWYtdW5tb2RpZmllZC1zaW5jZSIsImxhc3QtbW9kaWZpZWQiLCJsb2NhdGlvbiIsIm1heC1mb3J3YXJkcyIsInByb3h5LWF1dGhvcml6YXRpb24iLCJyZWZlcmVyIiwicmV0cnktYWZ0ZXIiLCJ1c2VyLWFnZW50Il0sd249bmUsX249d24uaXNTdGFuZGFyZEJyb3dzZXJFbnYoKT9mdW5jdGlvbigpe3ZhciBlLHQ9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtmdW5jdGlvbiByKGUpe3ZhciByPWU7cmV0dXJuIHQmJihuLnNldEF0dHJpYnV0ZSgiaHJlZiIscikscj1uLmhyZWYpLG4uc2V0QXR0cmlidXRlKCJocmVmIixyKSx7aHJlZjpuLmhyZWYscHJvdG9jb2w6bi5wcm90b2NvbD9uLnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDpuLmhvc3Qsc2VhcmNoOm4uc2VhcmNoP24uc2VhcmNoLnJlcGxhY2UoL15cPy8sIiIpOiIiLGhhc2g6bi5oYXNoP24uaGFzaC5yZXBsYWNlKC9eIy8sIiIpOiIiLGhvc3RuYW1lOm4uaG9zdG5hbWUscG9ydDpuLnBvcnQscGF0aG5hbWU6Ii8iPT09bi5wYXRobmFtZS5jaGFyQXQoMCk/bi5wYXRobmFtZToiLyIrbi5wYXRobmFtZX19cmV0dXJuIGU9cih3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24odCl7dmFyIG49d24uaXNTdHJpbmcodCk/cih0KTp0O3JldHVybiBuLnByb3RvY29sPT09ZS5wcm90b2NvbCYmbi5ob3N0PT09ZS5ob3N0fX0oKTpmdW5jdGlvbigpe3JldHVybiEwfSxTbj1jdDtmdW5jdGlvbiBibihlLHQsbil7U24uY2FsbCh0aGlzLG51bGw9PWU/ImNhbmNlbGVkIjplLFNuLkVSUl9DQU5DRUxFRCx0LG4pLHRoaXMubmFtZT0iQ2FuY2VsZWRFcnJvciJ9bmUuaW5oZXJpdHMoYm4sU24se19fQ0FOQ0VMX186ITB9KTt2YXIgRW49Ym4sa249bmUsUm49ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4uY29uZmlnLnZhbGlkYXRlU3RhdHVzO24uc3RhdHVzJiZyJiYhcihuLnN0YXR1cyk/dChuZXcgZG4oIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIituLnN0YXR1cyxbZG4uRVJSX0JBRF9SRVFVRVNULGRuLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3Iobi5zdGF0dXMvMTAwKS00XSxuLmNvbmZpZyxuLnJlcXVlc3QsbikpOmUobil9LFRuPWZuLEFuPVR0LENuPXZuLERuPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixpPXt9O3JldHVybiBlPyh5bi5mb3JFYWNoKGUuc3BsaXQoIlxuIiksKGZ1bmN0aW9uKGUpe2lmKHI9ZS5pbmRleE9mKCI6IiksdD15bi50cmltKGUuc2xpY2UoMCxyKSkudG9Mb3dlckNhc2UoKSxuPXluLnRyaW0oZS5zbGljZShyKzEpKSx0KXtpZihpW3RdJiZtbi5pbmRleE9mKHQpPj0wKXJldHVybjtpW3RdPSJzZXQtY29va2llIj09PXQ/KGlbdF0/aVt0XTpbXSkuY29uY2F0KFtuXSk6aVt0XT9pW3RdKyIsICIrbjpufX0pKSxpKTppfSxQbj1fbixPbj1ybixJbj1jdCxVbj1FbixMbj1mdW5jdGlvbihlKXt2YXIgdD0vXihbLStcd117MSwyNX0pKDo/XC9cL3w6KS8uZXhlYyhlKTtyZXR1cm4gdCYmdFsxXXx8IiJ9LEhuPW9uLE1uPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCxuKXt2YXIgcixpPWUuZGF0YSxvPWUuaGVhZGVycyxzPWUucmVzcG9uc2VUeXBlLGE9ZS53aXRoWFNSRlRva2VuO2Z1bmN0aW9uIGMoKXtlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKHIpLGUuc2lnbmFsJiZlLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIscil9a24uaXNGb3JtRGF0YShpKSYma24uaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSYmZGVsZXRlIG9bIkNvbnRlbnQtVHlwZSJdO3ZhciB1PW5ldyBYTUxIdHRwUmVxdWVzdDtpZihlLmF1dGgpe3ZhciBsPWUuYXV0aC51c2VybmFtZXx8IiIsZD1lLmF1dGgucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGUuYXV0aC5wYXNzd29yZCkpOiIiO28uQXV0aG9yaXphdGlvbj0iQmFzaWMgIitidG9hKGwrIjoiK2QpfXZhciBoPUNuKGUuYmFzZVVSTCxlLnVybCxlLmFsbG93QWJzb2x1dGVVcmxzKTtmdW5jdGlvbiBmKCl7aWYodSl7dmFyIHI9ImdldEFsbFJlc3BvbnNlSGVhZGVycyJpbiB1P0RuKHUuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpOm51bGwsaT17ZGF0YTpzJiYidGV4dCIhPT1zJiYianNvbiIhPT1zP3UucmVzcG9uc2U6dS5yZXNwb25zZVRleHQsc3RhdHVzOnUuc3RhdHVzLHN0YXR1c1RleHQ6dS5zdGF0dXNUZXh0LGhlYWRlcnM6cixjb25maWc6ZSxyZXF1ZXN0OnV9O1JuKChmdW5jdGlvbihlKXt0KGUpLGMoKX0pLChmdW5jdGlvbihlKXtuKGUpLGMoKX0pLGkpLHU9bnVsbH19aWYodS5vcGVuKGUubWV0aG9kLnRvVXBwZXJDYXNlKCksQW4oaCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSx1LnRpbWVvdXQ9ZS50aW1lb3V0LCJvbmxvYWRlbmQiaW4gdT91Lm9ubG9hZGVuZD1mOnUub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7dSYmND09PXUucmVhZHlTdGF0ZSYmKDAhPT11LnN0YXR1c3x8dS5yZXNwb25zZVVSTCYmMD09PXUucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKSkmJnNldFRpbWVvdXQoZil9LHUub25hYm9ydD1mdW5jdGlvbigpe3UmJihuKG5ldyBJbigiUmVxdWVzdCBhYm9ydGVkIixJbi5FQ09OTkFCT1JURUQsZSx1KSksdT1udWxsKX0sdS5vbmVycm9yPWZ1bmN0aW9uKCl7bihuZXcgSW4oIk5ldHdvcmsgRXJyb3IiLEluLkVSUl9ORVRXT1JLLGUsdSkpLHU9bnVsbH0sdS5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXt2YXIgdD1lLnRpbWVvdXQ/InRpbWVvdXQgb2YgIitlLnRpbWVvdXQrIm1zIGV4Y2VlZGVkIjoidGltZW91dCBleGNlZWRlZCIscj1lLnRyYW5zaXRpb25hbHx8T247ZS50aW1lb3V0RXJyb3JNZXNzYWdlJiYodD1lLnRpbWVvdXRFcnJvck1lc3NhZ2UpLG4obmV3IEluKHQsci5jbGFyaWZ5VGltZW91dEVycm9yP0luLkVUSU1FRE9VVDpJbi5FQ09OTkFCT1JURUQsZSx1KSksdT1udWxsfSxrbi5pc1N0YW5kYXJkQnJvd3NlckVudigpJiYoYSYma24uaXNGdW5jdGlvbihhKSYmKGE9YShlKSksYXx8ITEhPT1hJiZQbihoKSkpe3ZhciBwPWUueHNyZkhlYWRlck5hbWUmJmUueHNyZkNvb2tpZU5hbWUmJlRuLnJlYWQoZS54c3JmQ29va2llTmFtZSk7cCYmKG9bZS54c3JmSGVhZGVyTmFtZV09cCl9InNldFJlcXVlc3RIZWFkZXIiaW4gdSYma24uZm9yRWFjaChvLChmdW5jdGlvbihlLHQpe3ZvaWQgMD09PWkmJiJjb250ZW50LXR5cGUiPT09dC50b0xvd2VyQ2FzZSgpP2RlbGV0ZSBvW3RdOnUuc2V0UmVxdWVzdEhlYWRlcih0LGUpfSkpLGtuLmlzVW5kZWZpbmVkKGUud2l0aENyZWRlbnRpYWxzKXx8KHUud2l0aENyZWRlbnRpYWxzPSEhZS53aXRoQ3JlZGVudGlhbHMpLHMmJiJqc29uIiE9PXMmJih1LnJlc3BvbnNlVHlwZT1lLnJlc3BvbnNlVHlwZSksImZ1bmN0aW9uIj09dHlwZW9mIGUub25Eb3dubG9hZFByb2dyZXNzJiZ1LmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixlLm9uRG93bmxvYWRQcm9ncmVzcyksImZ1bmN0aW9uIj09dHlwZW9mIGUub25VcGxvYWRQcm9ncmVzcyYmdS51cGxvYWQmJnUudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixlLm9uVXBsb2FkUHJvZ3Jlc3MpLChlLmNhbmNlbFRva2VufHxlLnNpZ25hbCkmJihyPWZ1bmN0aW9uKHQpe3UmJihuKCF0fHx0LnR5cGU/bmV3IFVuKG51bGwsZSx1KTp0KSx1LmFib3J0KCksdT1udWxsKX0sZS5jYW5jZWxUb2tlbiYmZS5jYW5jZWxUb2tlbi5zdWJzY3JpYmUociksZS5zaWduYWwmJihlLnNpZ25hbC5hYm9ydGVkP3IoKTplLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIscikpKSxpfHwhMT09PWl8fDA9PT1pfHwiIj09PWl8fChpPW51bGwpO3ZhciBnPUxuKGgpO2cmJi0xPT09SG4ucHJvdG9jb2xzLmluZGV4T2YoZyk/bihuZXcgSW4oIlVuc3VwcG9ydGVkIHByb3RvY29sICIrZysiOiIsSW4uRVJSX0JBRF9SRVFVRVNULGUpKTp1LnNlbmQoaSl9KSl9LGpuPW5lLE5uPW5uLHhuPWN0LHFuPXl0LEJuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGFuKGUsbmV3IGNuLmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zLE9iamVjdC5hc3NpZ24oe3Zpc2l0b3I6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIGNuLmlzTm9kZSYmc24uaXNCdWZmZXIoZSk/KHRoaXMuYXBwZW5kKHQsZS50b1N0cmluZygiYmFzZTY0IikpLCExKTpyLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHQpKX0sRm49b24sS249bG4sSm49eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQifTtmdW5jdGlvbiBXbihlLHQpeyFqbi5pc1VuZGVmaW5lZChlKSYmam4uaXNVbmRlZmluZWQoZVsiQ29udGVudC1UeXBlIl0pJiYoZVsiQ29udGVudC1UeXBlIl09dCl9dmFyIHpuLFZuPXt0cmFuc2l0aW9uYWw6cm4sYWRhcHRlcjooKCJ1bmRlZmluZWQiIT10eXBlb2YgWE1MSHR0cFJlcXVlc3R8fHZvaWQgMCE9PWVuJiYiW29iamVjdCBwcm9jZXNzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZW4pKSYmKHpuPU1uKSx6biksdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24oZSx0KXtObih0LCJBY2NlcHQiKSxObih0LCJDb250ZW50LVR5cGUiKTt2YXIgbixyPXQmJnRbIkNvbnRlbnQtVHlwZSJdfHwiIixpPXIuaW5kZXhPZigiYXBwbGljYXRpb24vanNvbiIpPi0xLG89am4uaXNPYmplY3QoZSk7aWYobyYmam4uaXNIVE1MRm9ybShlKSYmKGU9bmV3IEZvcm1EYXRhKGUpKSxqbi5pc0Zvcm1EYXRhKGUpKXJldHVybiBpP0pTT04uc3RyaW5naWZ5KEtuKGUpKTplO2lmKGpuLmlzQXJyYXlCdWZmZXIoZSl8fGpuLmlzQnVmZmVyKGUpfHxqbi5pc1N0cmVhbShlKXx8am4uaXNGaWxlKGUpfHxqbi5pc0Jsb2IoZSkpcmV0dXJuIGU7aWYoam4uaXNBcnJheUJ1ZmZlclZpZXcoZSkpcmV0dXJuIGUuYnVmZmVyO2lmKGpuLmlzVVJMU2VhcmNoUGFyYW1zKGUpKXJldHVybiBXbih0LCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIpLGUudG9TdHJpbmcoKTtpZihvKXtpZigtMSE9PXIuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIikpcmV0dXJuIEJuKGUsdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtpZigobj1qbi5pc0ZpbGVMaXN0KGUpKXx8ci5pbmRleE9mKCJtdWx0aXBhcnQvZm9ybS1kYXRhIik+LTEpe3ZhciBzPXRoaXMuZW52JiZ0aGlzLmVudi5Gb3JtRGF0YTtyZXR1cm4gcW4obj97ImZpbGVzW10iOmV9OmUscyYmbmV3IHMsdGhpcy5mb3JtU2VyaWFsaXplcil9fXJldHVybiBvfHxpPyhXbih0LCJhcHBsaWNhdGlvbi9qc29uIiksZnVuY3Rpb24oZSx0LG4pe2lmKGpuLmlzU3RyaW5nKGUpKXRyeXtyZXR1cm4odHx8SlNPTi5wYXJzZSkoZSksam4udHJpbShlKX1jYXRjaChlKXtpZigiU3ludGF4RXJyb3IiIT09ZS5uYW1lKXRocm93IGV9cmV0dXJuKG58fEpTT04uc3RyaW5naWZ5KShlKX0oZSkpOmV9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy50cmFuc2l0aW9uYWx8fFZuLnRyYW5zaXRpb25hbCxuPXQmJnQuZm9yY2VkSlNPTlBhcnNpbmcscj0ianNvbiI9PT10aGlzLnJlc3BvbnNlVHlwZTtpZihlJiZqbi5pc1N0cmluZyhlKSYmKG4mJiF0aGlzLnJlc3BvbnNlVHlwZXx8cikpe3ZhciBpPSEodCYmdC5zaWxlbnRKU09OUGFyc2luZykmJnI7dHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoKGUpe2lmKGkpe2lmKCJTeW50YXhFcnJvciI9PT1lLm5hbWUpdGhyb3cgeG4uZnJvbShlLHhuLkVSUl9CQURfUkVTUE9OU0UsdGhpcyxudWxsLHRoaXMucmVzcG9uc2UpO3Rocm93IGV9fX1yZXR1cm4gZX1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLGVudjp7Rm9ybURhdGE6Rm4uY2xhc3Nlcy5Gb3JtRGF0YSxCbG9iOkZuLmNsYXNzZXMuQmxvYn0sdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTIwMCYmZTwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoifX19O2puLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIl0sKGZ1bmN0aW9uKGUpe1ZuLmhlYWRlcnNbZV09e319KSksam4uZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLChmdW5jdGlvbihlKXtWbi5oZWFkZXJzW2VdPWpuLm1lcmdlKEpuKX0pKTt2YXIgWW49Vm4sR249bmUsWG49WW4sJG49ZnVuY3Rpb24oZSl7cmV0dXJuISghZXx8IWUuX19DQU5DRUxfXyl9LFpuPW5lLFFuPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXRoaXN8fFhuO3JldHVybiBHbi5mb3JFYWNoKHIsKGZ1bmN0aW9uKHIpe2U9ci5jYWxsKGksZSx0LG4pfSkpLGV9LGVyPSRuLHRyPVluLG5yPUVuLHJyPW5uO2Z1bmN0aW9uIGlyKGUpe2lmKGUuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLGUuc2lnbmFsJiZlLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBucn12YXIgb3I9bmUsc3I9ZnVuY3Rpb24oZSx0KXt0PXR8fHt9O3ZhciBuPXt9O2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gb3IuaXNQbGFpbk9iamVjdChlKSYmb3IuaXNQbGFpbk9iamVjdCh0KT9vci5tZXJnZShlLHQpOm9yLmlzRW1wdHlPYmplY3QodCk/b3IubWVyZ2Uoe30sZSk6b3IuaXNQbGFpbk9iamVjdCh0KT9vci5tZXJnZSh7fSx0KTpvci5pc0FycmF5KHQpP3Quc2xpY2UoKTp0fWZ1bmN0aW9uIGkobil7cmV0dXJuIG9yLmlzVW5kZWZpbmVkKHRbbl0pP29yLmlzVW5kZWZpbmVkKGVbbl0pP3ZvaWQgMDpyKHZvaWQgMCxlW25dKTpyKGVbbl0sdFtuXSl9ZnVuY3Rpb24gbyhlKXtpZighb3IuaXNVbmRlZmluZWQodFtlXSkpcmV0dXJuIHIodm9pZCAwLHRbZV0pfWZ1bmN0aW9uIHMobil7cmV0dXJuIG9yLmlzVW5kZWZpbmVkKHRbbl0pP29yLmlzVW5kZWZpbmVkKGVbbl0pP3ZvaWQgMDpyKHZvaWQgMCxlW25dKTpyKHZvaWQgMCx0W25dKX1mdW5jdGlvbiBhKG4pe3JldHVybiBuIGluIHQ/cihlW25dLHRbbl0pOm4gaW4gZT9yKHZvaWQgMCxlW25dKTp2b2lkIDB9dmFyIGM9e3VybDpvLG1ldGhvZDpvLGRhdGE6byxiYXNlVVJMOnMsdHJhbnNmb3JtUmVxdWVzdDpzLHRyYW5zZm9ybVJlc3BvbnNlOnMscGFyYW1zU2VyaWFsaXplcjpzLHRpbWVvdXQ6cyx0aW1lb3V0TWVzc2FnZTpzLHdpdGhDcmVkZW50aWFsczpzLHdpdGhYU1JGVG9rZW46cyxhZGFwdGVyOnMscmVzcG9uc2VUeXBlOnMseHNyZkNvb2tpZU5hbWU6cyx4c3JmSGVhZGVyTmFtZTpzLG9uVXBsb2FkUHJvZ3Jlc3M6cyxvbkRvd25sb2FkUHJvZ3Jlc3M6cyxkZWNvbXByZXNzOnMsbWF4Q29udGVudExlbmd0aDpzLG1heEJvZHlMZW5ndGg6cyxiZWZvcmVSZWRpcmVjdDpzLHRyYW5zcG9ydDpzLGh0dHBBZ2VudDpzLGh0dHBzQWdlbnQ6cyxjYW5jZWxUb2tlbjpzLHNvY2tldFBhdGg6cyxyZXNwb25zZUVuY29kaW5nOnMsdmFsaWRhdGVTdGF0dXM6YX07cmV0dXJuIG9yLmZvckVhY2goT2JqZWN0LmtleXMoZSkuY29uY2F0KE9iamVjdC5rZXlzKHQpKSwoZnVuY3Rpb24oZSl7dmFyIHQ9Y1tlXXx8aSxyPXQoZSk7b3IuaXNVbmRlZmluZWQocikmJnQhPT1hfHwobltlXT1yKX0pKSxufSxhcj0iMC4zMC4wIixjcj1hcix1cj1jdCxscj17fTtbIm9iamVjdCIsImJvb2xlYW4iLCJudW1iZXIiLCJmdW5jdGlvbiIsInN0cmluZyIsInN5bWJvbCJdLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7bHJbZV09ZnVuY3Rpb24obil7cmV0dXJuIHR5cGVvZiBuPT09ZXx8ImEiKyh0PDE/Im4gIjoiICIpK2V9fSkpO3ZhciBkcj17fTtsci50cmFuc2l0aW9uYWw9ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4iW0F4aW9zIHYiK2NyKyJdIFRyYW5zaXRpb25hbCBvcHRpb24gJyIrZSsiJyIrdCsobj8iLiAiK246IiIpfXJldHVybiBmdW5jdGlvbihuLGksbyl7aWYoITE9PT1lKXRocm93IG5ldyB1cihyKGksIiBoYXMgYmVlbiByZW1vdmVkIisodD8iIGluICIrdDoiIikpLHVyLkVSUl9ERVBSRUNBVEVEKTtyZXR1cm4gdCYmIWRyW2ldJiYoZHJbaV09ITAsY29uc29sZS53YXJuKHIoaSwiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrdCsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSwhZXx8ZShuLGksbyl9fTt2YXIgaHI9e2Fzc2VydE9wdGlvbnM6ZnVuY3Rpb24oZSx0LG4pe2lmKCJvYmplY3QiIT10eXBlb2YgZSl0aHJvdyBuZXcgdXIoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiLHVyLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtmb3IodmFyIHI9T2JqZWN0LmtleXMoZSksaT1yLmxlbmd0aDtpLS0gPjA7KXt2YXIgbz1yW2ldLHM9dFtvXTtpZihzKXt2YXIgYT1lW29dLGM9dm9pZCAwPT09YXx8cyhhLG8sZSk7aWYoITAhPT1jKXRocm93IG5ldyB1cigib3B0aW9uICIrbysiIG11c3QgYmUgIitjLHVyLkVSUl9CQURfT1BUSU9OX1ZBTFVFKX1lbHNlIGlmKCEwIT09bil0aHJvdyBuZXcgdXIoIlVua25vd24gb3B0aW9uICIrbyx1ci5FUlJfQkFEX09QVElPTil9fSx2YWxpZGF0b3JzOmxyfSxmcj1uZSxwcj1UdCxncj1EdCx2cj1mdW5jdGlvbihlKXtyZXR1cm4gaXIoZSksZS5oZWFkZXJzPWUuaGVhZGVyc3x8e30sZS5kYXRhPVFuLmNhbGwoZSxlLmRhdGEsZS5oZWFkZXJzLG51bGwsZS50cmFuc2Zvcm1SZXF1ZXN0KSxycihlLmhlYWRlcnMsIkFjY2VwdCIpLHJyKGUuaGVhZGVycywiQ29udGVudC1UeXBlIiksZS5oZWFkZXJzPVpuLm1lcmdlKGUuaGVhZGVycy5jb21tb258fHt9LGUuaGVhZGVyc1tlLm1ldGhvZF18fHt9LGUuaGVhZGVycyksWm4uZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSwoZnVuY3Rpb24odCl7ZGVsZXRlIGUuaGVhZGVyc1t0XX0pKSwoZS5hZGFwdGVyfHx0ci5hZGFwdGVyKShlKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gaXIoZSksdC5kYXRhPVFuLmNhbGwoZSx0LmRhdGEsdC5oZWFkZXJzLHQuc3RhdHVzLGUudHJhbnNmb3JtUmVzcG9uc2UpLHR9KSwoZnVuY3Rpb24odCl7cmV0dXJuIGVyKHQpfHwoaXIoZSksdCYmdC5yZXNwb25zZSYmKHQucmVzcG9uc2UuZGF0YT1Rbi5jYWxsKGUsdC5yZXNwb25zZS5kYXRhLHQucmVzcG9uc2UuaGVhZGVycyx0LnJlc3BvbnNlLnN0YXR1cyxlLnRyYW5zZm9ybVJlc3BvbnNlKSkpLFByb21pc2UucmVqZWN0KHQpfSkpfSx5cj1zcixtcj12bix3cj1ocixfcj13ci52YWxpZGF0b3JzO2Z1bmN0aW9uIFNyKGUpe3RoaXMuZGVmYXVsdHM9ZSx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgZ3IscmVzcG9uc2U6bmV3IGdyfX1Tci5wcm90b3R5cGUucmVxdWVzdD1mdW5jdGlvbihlLHQpeyJzdHJpbmciPT10eXBlb2YgZT8odD10fHx7fSkudXJsPWU6dD1lfHx7fSwodD15cih0aGlzLmRlZmF1bHRzLHQpKS5tZXRob2Q/dC5tZXRob2Q9dC5tZXRob2QudG9Mb3dlckNhc2UoKTp0aGlzLmRlZmF1bHRzLm1ldGhvZD90Lm1ldGhvZD10aGlzLmRlZmF1bHRzLm1ldGhvZC50b0xvd2VyQ2FzZSgpOnQubWV0aG9kPSJnZXQiO3ZhciBuPXQudHJhbnNpdGlvbmFsO3ZvaWQgMCE9PW4mJndyLmFzc2VydE9wdGlvbnMobix7c2lsZW50SlNPTlBhcnNpbmc6X3IudHJhbnNpdGlvbmFsKF9yLmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOl9yLnRyYW5zaXRpb25hbChfci5ib29sZWFuKSxjbGFyaWZ5VGltZW91dEVycm9yOl9yLnRyYW5zaXRpb25hbChfci5ib29sZWFuKX0sITEpO3ZhciByPXQucGFyYW1zU2VyaWFsaXplcjtudWxsIT1yJiYoZnIuaXNGdW5jdGlvbihyKT90LnBhcmFtc1NlcmlhbGl6ZXI9e3NlcmlhbGl6ZTpyfTp3ci5hc3NlcnRPcHRpb25zKHIse2VuY29kZTpfci5mdW5jdGlvbixzZXJpYWxpemU6X3IuZnVuY3Rpb259LCEwKSk7dmFyIGk9W10sbz0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goKGZ1bmN0aW9uKGUpeyJmdW5jdGlvbiI9PXR5cGVvZiBlLnJ1bldoZW4mJiExPT09ZS5ydW5XaGVuKHQpfHwobz1vJiZlLnN5bmNocm9ub3VzLGkudW5zaGlmdChlLmZ1bGZpbGxlZCxlLnJlamVjdGVkKSl9KSk7dmFyIHMsYT1bXTtpZih0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKChmdW5jdGlvbihlKXthLnB1c2goZS5mdWxmaWxsZWQsZS5yZWplY3RlZCl9KSksIW8pe3ZhciBjPVt2cix2b2lkIDBdO2ZvcihBcnJheS5wcm90b3R5cGUudW5zaGlmdC5hcHBseShjLGkpLGM9Yy5jb25jYXQoYSkscz1Qcm9taXNlLnJlc29sdmUodCk7Yy5sZW5ndGg7KXM9cy50aGVuKGMuc2hpZnQoKSxjLnNoaWZ0KCkpO3JldHVybiBzfWZvcih2YXIgdT10O2kubGVuZ3RoOyl7dmFyIGw9aS5zaGlmdCgpLGQ9aS5zaGlmdCgpO3RyeXt1PWwodSl9Y2F0Y2goZSl7ZChlKTticmVha319dHJ5e3M9dnIodSl9Y2F0Y2goZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfWZvcig7YS5sZW5ndGg7KXM9cy50aGVuKGEuc2hpZnQoKSxhLnNoaWZ0KCkpO3JldHVybiBzfSxTci5wcm90b3R5cGUuZ2V0VXJpPWZ1bmN0aW9uKGUpe2U9eXIodGhpcy5kZWZhdWx0cyxlKTt2YXIgdD1tcihlLmJhc2VVUkwsZS51cmwsZS5hbGxvd0Fic29sdXRlVXJscyk7cmV0dXJuIHByKHQsZS5wYXJhbXMsZS5wYXJhbXNTZXJpYWxpemVyKX0sZnIuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJvcHRpb25zIl0sKGZ1bmN0aW9uKGUpe1NyLnByb3RvdHlwZVtlXT1mdW5jdGlvbih0LG4pe3JldHVybiB0aGlzLnJlcXVlc3QoeXIobnx8e30se21ldGhvZDplLHVybDp0LGRhdGE6KG58fHt9KS5kYXRhfSkpfX0pKSxmci5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sKGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIGZ1bmN0aW9uKG4scixpKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHlyKGl8fHt9LHttZXRob2Q6ZSxoZWFkZXJzOnQ/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOm4sZGF0YTpyfSkpfX1Tci5wcm90b3R5cGVbZV09dCgpLFNyLnByb3RvdHlwZVtlKyJGb3JtIl09dCghMCl9KSk7dmFyIGJyPVNyLEVyPUVuO2Z1bmN0aW9uIGtyKGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTt2YXIgdDt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe3Q9ZX0pKTt2YXIgbj10aGlzO3RoaXMucHJvbWlzZS50aGVuKChmdW5jdGlvbihlKXtpZihuLl9saXN0ZW5lcnMpe2Zvcih2YXIgdD1uLl9saXN0ZW5lcnMubGVuZ3RoO3QtLSA+MDspbi5fbGlzdGVuZXJzW3RdKGUpO24uX2xpc3RlbmVycz1udWxsfX0pKSx0aGlzLnByb21pc2UudGhlbj1mdW5jdGlvbihlKXt2YXIgdCxyPW5ldyBQcm9taXNlKChmdW5jdGlvbihlKXtuLnN1YnNjcmliZShlKSx0PWV9KSkudGhlbihlKTtyZXR1cm4gci5jYW5jZWw9ZnVuY3Rpb24oKXtuLnVuc3Vic2NyaWJlKHQpfSxyfSxlKChmdW5jdGlvbihlLHIsaSl7bi5yZWFzb258fChuLnJlYXNvbj1uZXcgRXIoZSxyLGkpLHQobi5yZWFzb24pKX0pKX1rci5wcm90b3R5cGUudGhyb3dJZlJlcXVlc3RlZD1mdW5jdGlvbigpe2lmKHRoaXMucmVhc29uKXRocm93IHRoaXMucmVhc29ufSxrci5wcm90b3R5cGUuc3Vic2NyaWJlPWZ1bmN0aW9uKGUpe3RoaXMucmVhc29uP2UodGhpcy5yZWFzb24pOnRoaXMuX2xpc3RlbmVycz90aGlzLl9saXN0ZW5lcnMucHVzaChlKTp0aGlzLl9saXN0ZW5lcnM9W2VdfSxrci5wcm90b3R5cGUudW5zdWJzY3JpYmU9ZnVuY3Rpb24oZSl7aWYodGhpcy5fbGlzdGVuZXJzKXt2YXIgdD10aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihlKTstMSE9PXQmJnRoaXMuX2xpc3RlbmVycy5zcGxpY2UodCwxKX19LGtyLnNvdXJjZT1mdW5jdGlvbigpe3ZhciBlLHQ9bmV3IGtyKChmdW5jdGlvbih0KXtlPXR9KSk7cmV0dXJue3Rva2VuOnQsY2FuY2VsOmV9fTt2YXIgUnI9a3IsVHI9bmUsQXI9bmUsQ3I9VSxEcj1icixQcj1zcixPcj1sbjt2YXIgSXI9ZnVuY3Rpb24gZSh0KXt2YXIgbj1uZXcgRHIodCkscj1DcihEci5wcm90b3R5cGUucmVxdWVzdCxuKTtyZXR1cm4gQXIuZXh0ZW5kKHIsRHIucHJvdG90eXBlLG4pLEFyLmV4dGVuZChyLG4pLHIuY3JlYXRlPWZ1bmN0aW9uKG4pe3JldHVybiBlKFByKHQsbikpfSxyfShZbik7SXIuQXhpb3M9RHIsSXIuQ2FuY2VsZWRFcnJvcj1FbixJci5DYW5jZWxUb2tlbj1ScixJci5pc0NhbmNlbD0kbixJci5WRVJTSU9OPWFyLElyLnRvRm9ybURhdGE9eXQsSXIuQXhpb3NFcnJvcj1jdCxJci5DYW5jZWw9SXIuQ2FuY2VsZWRFcnJvcixJci5hbGw9ZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UuYWxsKGUpfSxJci5zcHJlYWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmFwcGx5KG51bGwsdCl9fSxJci5pc0F4aW9zRXJyb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIFRyLmlzT2JqZWN0KGUpJiYhMD09PWUuaXNBeGlvc0Vycm9yfSxJci5mb3JtVG9KU09OPWZ1bmN0aW9uKGUpe3JldHVybiBPcihBci5pc0hUTUxGb3JtKGUpP25ldyBGb3JtRGF0YShlKTplKX0sSS5leHBvcnRzPUlyLEkuZXhwb3J0cy5kZWZhdWx0PUlyO3ZhciBVcixMcj1JLmV4cG9ydHM7bGV0IEhyPVVyPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5hdHRhY2hUb2tlbj0oKT0+UHJvbWlzZS5yZXNvbHZlKCksdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjaz0oKT0+bnVsbCx0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9KCk9Pm51bGwsdGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjaz0oKT0+bnVsbCx0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaz0oKT0+bnVsbCx0aGlzLmluaXQ9dGhpcy5pbml0LmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2suYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrLmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2suYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2suYmluZCh0aGlzKX1zdGF0aWMgZ2V0SW5zdGFuY2UoKXtyZXR1cm4gdGhpcy5heGlvc0luc3RhbmNlfHwodGhpcy5heGlvc0luc3RhbmNlPUxyLmNyZWF0ZSh7d2l0aENyZWRlbnRpYWxzOiEwfSksdGhpcy5jbGllbnRJbnN0YW5jZXx8KHRoaXMuY2xpZW50SW5zdGFuY2U9bmV3IFVyKSx0aGlzLmF4aW9zSW5zdGFuY2UuaW50ZXJjZXB0b3JzLnJlcXVlc3QudXNlKCh0PT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuY2xpZW50SW5zdGFuY2UucmVxdWVzdEhhbmRsZXIodCl9KSkpKSx0aGlzLmF4aW9zSW5zdGFuY2UuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLnVzZSgoZT0+dGhpcy5jbGllbnRJbnN0YW5jZS5zdWNjZXNzSGFuZGxlcihlKSksKGU9PnRoaXMuY2xpZW50SW5zdGFuY2UuZXJyb3JIYW5kbGVyKGUpKSksdGhpcy5heGlvc0luc3RhbmNlLmFsbD1Mci5hbGwsdGhpcy5heGlvc0luc3RhbmNlLnNwcmVhZD1Mci5zcHJlYWQsdGhpcy5heGlvc0luc3RhbmNlLmluaXQ9dGhpcy5jbGllbnRJbnN0YW5jZS5pbml0LHRoaXMuYXhpb3NJbnN0YW5jZS5lbmFibGVIYW5kbGVyPXRoaXMuY2xpZW50SW5zdGFuY2UuZW5hYmxlSGFuZGxlcix0aGlzLmF4aW9zSW5zdGFuY2UuZGlzYWJsZUhhbmRsZXI9dGhpcy5jbGllbnRJbnN0YW5jZS5kaXNhYmxlSGFuZGxlcix0aGlzLmF4aW9zSW5zdGFuY2UuZGlzYWJsZUhhbmRsZXJXaXRoVGltZW91dD10aGlzLmNsaWVudEluc3RhbmNlLmRpc2FibGVIYW5kbGVyV2l0aFRpbWVvdXQsdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9dGhpcy5jbGllbnRJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrLHRoaXMuYXhpb3NJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayksdGhpcy5heGlvc0luc3RhbmNlfXJlcXVlc3RIYW5kbGVyKHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYoeWllbGQgdGhpcy5hdHRhY2hUb2tlbih0KSxudWxsPT10P3ZvaWQgMDp0LnNob3VsZEVuY29kZVRvRm9ybURhdGEpe2NvbnN0IGU9bnVsbD09dD92b2lkIDA6dC5kYXRhLG49bmV3IEZvcm1EYXRhO09iamVjdC5rZXlzKGUpLmZvckVhY2goKHQ9PntuLmFwcGVuZCh0LGVbdF0pfSkpLHQuZGF0YT1ufXJldHVybiB0LnN0YXJ0VGltZUluTXM9KG5ldyBEYXRlKS5nZXRUaW1lKCksVXIuaXNIYW5kbGVyRW5hYmxlZCYmdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2smJnRoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2sodCksdH0pKX1lcnJvckhhbmRsZXIoZSl7dGhyb3cgVXIuaXNIYW5kbGVyRW5hYmxlZCYmKHRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrJiZ0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrKGUpLHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJnRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrKCkpLGV9c3VjY2Vzc0hhbmRsZXIoZSl7cmV0dXJuIFVyLmlzSGFuZGxlckVuYWJsZWQmJih0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2smJnRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayhlKSx0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiZ0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaygpKSxlfWluaXQoKXtsZXQgdD0hKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdLG49YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDA7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtVci5pc0hhbmRsZXJFbmFibGVkPXQsdGhpcy5hdHRhY2hUb2tlbj1ufSkpfWVuYWJsZUhhbmRsZXIoKXtVci5pc0hhbmRsZXJFbmFibGVkPSEwfWRpc2FibGVIYW5kbGVyKCl7VXIuaXNIYW5kbGVyRW5hYmxlZD0hMX1kaXNhYmxlSGFuZGxlcldpdGhUaW1lb3V0KCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOlVyLkRFRkFVTFRfSEFORExFUl9ESVNBQkxFX1RJTUVPVVQ7VXIuaXNIYW5kbGVyRW5hYmxlZD0hMSxzZXRUaW1lb3V0KCgoKT0+e1VyLmlzSGFuZGxlckVuYWJsZWQ9ITB9KSxlKX1zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2soZSl7dGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjaz1lfXNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKGUpe3RoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaz1lfXNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjayhlKXt0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrPWV9c2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayhlKXt0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaz1lfX07SHIuREVGQVVMVF9IQU5ETEVSX0RJU0FCTEVfVElNRU9VVD0xZTMsSHI9VXI9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbz1hcmd1bWVudHMubGVuZ3RoLHM9bzwzP3Q6bnVsbD09PXI/cj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik6cjtpZigib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJiJmdW5jdGlvbiI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKXM9UmVmbGVjdC5kZWNvcmF0ZShlLHQsbixyKTtlbHNlIGZvcih2YXIgYT1lLmxlbmd0aC0xO2E+PTA7YS0tKShpPWVbYV0pJiYocz0obzwzP2kocyk6bz4zP2kodCxuLHMpOmkodCxuKSl8fHMpO3JldHVybiBvPjMmJnMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4scyksc30oW2U9Pnt9XSxIcik7Y2xhc3MgTXJ7Y29uc3RydWN0b3IoKXt0aGlzLl9kYXRhPW5ldyBNYXB9c2V0RGF0YSh0LG4pe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5fZGF0YS5zZXQodCxuKX0pKX1nZXREYXRhKHQpe3ZhciBuLHI7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbnVsbCE9PShyPW51bGw9PT0obj10aGlzLl9kYXRhKXx8dm9pZCAwPT09bj92b2lkIDA6bi5nZXQodCkpJiZ2b2lkIDAhPT1yP3I6Int9In0pKX1yZW1vdmVEYXRhKHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5fZGF0YS5kZWxldGUodCl9KSl9fXZhciBqcj17ZXhwb3J0czp7fX0sTnI9e30seHI9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KHhyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx4ci5kZWZhdWx0PWZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoLG49dCU0O2lmKCFuKXJldHVybiBlO3ZhciByPXQsaT00LW4sbz10K2kscz1tZS5hbGxvYyhvKTtmb3Iocy53cml0ZShlKTtpLS07KXMud3JpdGUoIj0iLHIrKyk7cmV0dXJuIHMudG9TdHJpbmcoKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KE5yLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcXI9eHI7ZnVuY3Rpb24gQnIoZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9InV0ZjgiKSxtZS5pc0J1ZmZlcihlKT9LcihlLnRvU3RyaW5nKCJiYXNlNjQiKSk6S3IobWUuZnJvbShlLHQpLnRvU3RyaW5nKCJiYXNlNjQiKSl9ZnVuY3Rpb24gRnIoZSl7cmV0dXJuIGU9ZS50b1N0cmluZygpLHFyLmRlZmF1bHQoZSkucmVwbGFjZSgvXC0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpfWZ1bmN0aW9uIEtyKGUpe3JldHVybiBlLnJlcGxhY2UoLz0vZywiIikucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKX12YXIgSnIsV3I9QnI7V3IuZW5jb2RlPUJyLFdyLmRlY29kZT1mdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0idXRmOCIpLG1lLmZyb20oRnIoZSksImJhc2U2NCIpLnRvU3RyaW5nKHQpfSxXci50b0Jhc2U2ND1GcixXci5mcm9tQmFzZTY0PUtyLFdyLnRvQnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybiBtZS5mcm9tKEZyKGUpLCJiYXNlNjQiKX0sTnIuZGVmYXVsdD1XciwoSnI9anIpLmV4cG9ydHM9TnIuZGVmYXVsdCxKci5leHBvcnRzLmRlZmF1bHQ9SnIuZXhwb3J0czt2YXIgenI9anIuZXhwb3J0cyxWcj17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGUpeyFmdW5jdGlvbih0LG4pe3ZhciByPXt9OyFmdW5jdGlvbihlKXtlLl9fZXNNb2R1bGU9ITAsZS5kaWdlc3RMZW5ndGg9MzIsZS5ibG9ja1NpemU9NjQ7dmFyIHQ9bmV3IFVpbnQzMkFycmF5KFsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdKTtmdW5jdGlvbiBuKGUsbixyLGksbyl7Zm9yKHZhciBzLGEsYyx1LGwsZCxoLGYscCxnLHYseSxtO28+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+MCYyNTUsby5yZXNldCgpLG8udXBkYXRlKHQpLG8udXBkYXRlKGEpLG8uZmluaXNoKHUpO2Zvcih2YXIgZj0wO2Y8cztmKyspY1tmXT11W2ZdO2ZvcihmPTI7Zjw9bjtmKyspe28ucmVzZXQoKSxvLnVwZGF0ZSh1KS5maW5pc2godSk7Zm9yKHZhciBwPTA7cDxzO3ArKyljW3BdXj11W3BdfWZvcihmPTA7ZjxzJiZkKnMrZjxyO2YrKylsW2QqcytmXT1jW2ZdfWZvcihkPTA7ZDxzO2QrKyljW2RdPXVbZF09MDtmb3IoZD0wO2Q8NDtkKyspYVtkXT0wO3JldHVybiBvLmNsZWFuKCksbH1lLmhrZGY9dSxlLnBia2RmMj1sfShyKTt2YXIgaT1yLmRlZmF1bHQ7Zm9yKHZhciBvIGluIHIpaVtvXT1yW29dO2UuZXhwb3J0cz1pfSgpfShWcik7dmFyIFlyPUQoVnIuZXhwb3J0cyksR3I9Y3J5cHRvO2NvbnN0IFhyPWU9PmUgaW5zdGFuY2VvZiBDcnlwdG9LZXksJHI9bmV3IFRleHRFbmNvZGVyLFpyPW5ldyBUZXh0RGVjb2Rlcjtjb25zdCBRcj1lPT57bGV0IHQ9ZTt0IGluc3RhbmNlb2YgVWludDhBcnJheSYmKHQ9WnIuZGVjb2RlKHQpKSx0PXQucmVwbGFjZSgvLS9nLCIrIikucmVwbGFjZSgvXy9nLCIvIikucmVwbGFjZSgvXHMvZywiIik7dHJ5e3JldHVybihlPT57Y29uc3QgdD1hdG9iKGUpLG49bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKW5bZV09dC5jaGFyQ29kZUF0KGUpO3JldHVybiBufSkodCl9Y2F0Y2goZSl7dGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGlucHV0IHRvIGJlIGRlY29kZWQgaXMgbm90IGNvcnJlY3RseSBlbmNvZGVkLiIpfX07Y2xhc3MgZWkgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlKXt2YXIgdDtzdXBlcihlKSx0aGlzLmNvZGU9IkVSUl9KT1NFX0dFTkVSSUMiLHRoaXMubmFtZT10aGlzLmNvbnN0cnVjdG9yLm5hbWUsbnVsbD09PSh0PUVycm9yLmNhcHR1cmVTdGFja1RyYWNlKXx8dm9pZCAwPT09dHx8dC5jYWxsKEVycm9yLHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcil9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KT1NFX0dFTkVSSUMifX1jbGFzcyB0aSBleHRlbmRzIGVpe2NvbnN0cnVjdG9yKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToidW5zcGVjaWZpZWQiLG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOiJ1bnNwZWNpZmllZCI7c3VwZXIoZSksdGhpcy5jb2RlPSJFUlJfSldUX0NMQUlNX1ZBTElEQVRJT05fRkFJTEVEIix0aGlzLmNsYWltPXQsdGhpcy5yZWFzb249bn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXVF9DTEFJTV9WQUxJREFUSU9OX0ZBSUxFRCJ9fWNsYXNzIG5pIGV4dGVuZHMgZWl7Y29uc3RydWN0b3IoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJ1bnNwZWNpZmllZCIsbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06InVuc3BlY2lmaWVkIjtzdXBlcihlKSx0aGlzLmNvZGU9IkVSUl9KV1RfRVhQSVJFRCIsdGhpcy5jbGFpbT10LHRoaXMucmVhc29uPW59c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV1RfRVhQSVJFRCJ9fWNsYXNzIHJpIGV4dGVuZHMgZWl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pPU0VfQUxHX05PVF9BTExPV0VEIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pPU0VfQUxHX05PVF9BTExPV0VEIn19Y2xhc3MgaWkgZXh0ZW5kcyBlaXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSk9TRV9OT1RfU1VQUE9SVEVEIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pPU0VfTk9UX1NVUFBPUlRFRCJ9fWNsYXNzIG9pIGV4dGVuZHMgZWl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXU19JTlZBTElEIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXU19JTlZBTElEIn19Y2xhc3Mgc2kgZXh0ZW5kcyBlaXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldUX0lOVkFMSUQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldUX0lOVkFMSUQifX1jbGFzcyBhaSBleHRlbmRzIGVpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV0tTX0lOVkFMSUQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldLU19JTlZBTElEIn19Y2xhc3MgY2kgZXh0ZW5kcyBlaXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldLU19OT19NQVRDSElOR19LRVkiLHRoaXMubWVzc2FnZT0ibm8gYXBwbGljYWJsZSBrZXkgZm91bmQgaW4gdGhlIEpTT04gV2ViIEtleSBTZXQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldLU19OT19NQVRDSElOR19LRVkifX1jbGFzcyB1aSBleHRlbmRzIGVpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV0tTX01VTFRJUExFX01BVENISU5HX0tFWVMiLHRoaXMubWVzc2FnZT0ibXVsdGlwbGUgbWF0Y2hpbmcga2V5cyBmb3VuZCBpbiB0aGUgSlNPTiBXZWIgS2V5IFNldCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV0tTX01VTFRJUExFX01BVENISU5HX0tFWVMifX1jbGFzcyBsaSBleHRlbmRzIGVpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV1NfU0lHTkFUVVJFX1ZFUklGSUNBVElPTl9GQUlMRUQiLHRoaXMubWVzc2FnZT0ic2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBmYWlsZWQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldTX1NJR05BVFVSRV9WRVJJRklDQVRJT05fRkFJTEVEIn19ZnVuY3Rpb24gZGkoKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgV2ViU29ja2V0UGFpcn1mdW5jdGlvbiBoaShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06ImFsZ29yaXRobS5uYW1lIjtyZXR1cm4gbmV3IFR5cGVFcnJvcigiQ3J5cHRvS2V5IGRvZXMgbm90IHN1cHBvcnQgdGhpcyBvcGVyYXRpb24sIGl0cyAiLmNvbmNhdCh0LCIgbXVzdCBiZSAiKS5jb25jYXQoZSkpfWZ1bmN0aW9uIGZpKGUsdCl7cmV0dXJuIGUubmFtZT09PXR9ZnVuY3Rpb24gcGkoZSl7cmV0dXJuIHBhcnNlSW50KGUubmFtZS5zbGljZSg0KSwxMCl9ZnVuY3Rpb24gZ2koZSl7c3dpdGNoKGUpe2Nhc2UiRVMyNTYiOnJldHVybiJQLTI1NiI7Y2FzZSJFUzM4NCI6cmV0dXJuIlAtMzg0IjtjYXNlIkVTNTEyIjpyZXR1cm4iUC01MjEiO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bnJlYWNoYWJsZSIpfX1mdW5jdGlvbiB2aShlLHQpe2lmKHQubGVuZ3RoJiYhdC5zb21lKCh0PT5lLnVzYWdlcy5pbmNsdWRlcyh0KSkpKXtsZXQgZT0iQ3J5cHRvS2V5IGRvZXMgbm90IHN1cHBvcnQgdGhpcyBvcGVyYXRpb24sIGl0cyB1c2FnZXMgbXVzdCBpbmNsdWRlICI7aWYodC5sZW5ndGg+Mil7Y29uc3Qgbj10LnBvcCgpO2UrPSJvbmUgb2YgIi5jb25jYXQodC5qb2luKCIsICIpLCIsIG9yICIpLmNvbmNhdChuLCIuIil9ZWxzZSAyPT09dC5sZW5ndGg/ZSs9Im9uZSBvZiAiLmNvbmNhdCh0WzBdLCIgb3IgIikuY29uY2F0KHRbMV0sIi4iKTplKz0iIi5jb25jYXQodFswXSwiLiIpO3Rocm93IG5ldyBUeXBlRXJyb3IoZSl9fXZhciB5aT1mdW5jdGlvbihlKXtsZXQgdD0iS2V5IG11c3QgYmUgIjtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShuPjE/bi0xOjApLGk9MTtpPG47aSsrKXJbaS0xXT1hcmd1bWVudHNbaV07aWYoci5sZW5ndGg+Mil7Y29uc3QgZT1yLnBvcCgpO3QrPSJvbmUgb2YgdHlwZSAiLmNvbmNhdChyLmpvaW4oIiwgIiksIiwgb3IgIikuY29uY2F0KGUsIi4iKX1lbHNlIDI9PT1yLmxlbmd0aD90Kz0ib25lIG9mIHR5cGUgIi5jb25jYXQoclswXSwiIG9yICIpLmNvbmNhdChyWzFdLCIuIik6dCs9Im9mIHR5cGUgIi5jb25jYXQoclswXSwiLiIpO3JldHVybiBudWxsPT1lP3QrPSIgUmVjZWl2ZWQgIi5jb25jYXQoZSk6ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUubmFtZT90Kz0iIFJlY2VpdmVkIGZ1bmN0aW9uICIuY29uY2F0KGUubmFtZSk6Im9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT1lJiZlLmNvbnN0cnVjdG9yJiZlLmNvbnN0cnVjdG9yLm5hbWUmJih0Kz0iIFJlY2VpdmVkIGFuIGluc3RhbmNlIG9mICIuY29uY2F0KGUuY29uc3RydWN0b3IubmFtZSkpLHR9LG1pPWU9PlhyKGUpO2NvbnN0IHdpPVsiQ3J5cHRvS2V5Il07ZnVuY3Rpb24gX2koZSl7aWYoIm9iamVjdCIhPXR5cGVvZih0PWUpfHxudWxsPT09dHx8IltvYmplY3QgT2JqZWN0XSIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkpcmV0dXJuITE7dmFyIHQ7aWYobnVsbD09PU9iamVjdC5nZXRQcm90b3R5cGVPZihlKSlyZXR1cm4hMDtsZXQgbj1lO2Zvcig7bnVsbCE9PU9iamVjdC5nZXRQcm90b3R5cGVPZihuKTspbj1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobik7cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PW59Y29uc3QgU2k9YXN5bmMgZT0+e3ZhciB0LG47Y29uc3R7YWxnb3JpdGhtOnIsa2V5VXNhZ2VzOml9PWZ1bmN0aW9uKGUpe2xldCB0LG47c3dpdGNoKGUua3R5KXtjYXNlIm9jdCI6c3dpdGNoKGUuYWxnKXtjYXNlIkhTMjU2IjpjYXNlIkhTMzg0IjpjYXNlIkhTNTEyIjp0PXtuYW1lOiJITUFDIixoYXNoOiJTSEEtIi5jb25jYXQoZS5hbGcuc2xpY2UoLTMpKX0sbj1bInNpZ24iLCJ2ZXJpZnkiXTticmVhaztjYXNlIkExMjhDQkMtSFMyNTYiOmNhc2UiQTE5MkNCQy1IUzM4NCI6Y2FzZSJBMjU2Q0JDLUhTNTEyIjp0aHJvdyBuZXcgaWkoIiIuY29uY2F0KGUuYWxnLCIga2V5cyBjYW5ub3QgYmUgaW1wb3J0ZWQgYXMgQ3J5cHRvS2V5IGluc3RhbmNlcyIpKTtjYXNlIkExMjhHQ00iOmNhc2UiQTE5MkdDTSI6Y2FzZSJBMjU2R0NNIjpjYXNlIkExMjhHQ01LVyI6Y2FzZSJBMTkyR0NNS1ciOmNhc2UiQTI1NkdDTUtXIjp0PXtuYW1lOiJBRVMtR0NNIn0sbj1bImVuY3J5cHQiLCJkZWNyeXB0Il07YnJlYWs7Y2FzZSJBMTI4S1ciOmNhc2UiQTE5MktXIjpjYXNlIkEyNTZLVyI6dD17bmFtZToiQUVTLUtXIn0sbj1bIndyYXBLZXkiLCJ1bndyYXBLZXkiXTticmVhaztjYXNlIlBCRVMyLUhTMjU2K0ExMjhLVyI6Y2FzZSJQQkVTMi1IUzM4NCtBMTkyS1ciOmNhc2UiUEJFUzItSFM1MTIrQTI1NktXIjp0PXtuYW1lOiJQQktERjIifSxuPVsiZGVyaXZlQml0cyJdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IGlpKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIEpXSyAiYWxnIiAoQWxnb3JpdGhtKSBQYXJhbWV0ZXIgdmFsdWUnKX1icmVhaztjYXNlIlJTQSI6c3dpdGNoKGUuYWxnKXtjYXNlIlBTMjU2IjpjYXNlIlBTMzg0IjpjYXNlIlBTNTEyIjp0PXtuYW1lOiJSU0EtUFNTIixoYXNoOiJTSEEtIi5jb25jYXQoZS5hbGcuc2xpY2UoLTMpKX0sbj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIlJTMjU2IjpjYXNlIlJTMzg0IjpjYXNlIlJTNTEyIjp0PXtuYW1lOiJSU0FTU0EtUEtDUzEtdjFfNSIsaGFzaDoiU0hBLSIuY29uY2F0KGUuYWxnLnNsaWNlKC0zKSl9LG49ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJSU0EtT0FFUCI6Y2FzZSJSU0EtT0FFUC0yNTYiOmNhc2UiUlNBLU9BRVAtMzg0IjpjYXNlIlJTQS1PQUVQLTUxMiI6dD17bmFtZToiUlNBLU9BRVAiLGhhc2g6IlNIQS0iLmNvbmNhdChwYXJzZUludChlLmFsZy5zbGljZSgtMyksMTApfHwxKX0sbj1lLmQ/WyJkZWNyeXB0IiwidW53cmFwS2V5Il06WyJlbmNyeXB0Iiwid3JhcEtleSJdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IGlpKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIEpXSyAiYWxnIiAoQWxnb3JpdGhtKSBQYXJhbWV0ZXIgdmFsdWUnKX1icmVhaztjYXNlIkVDIjpzd2l0Y2goZS5hbGcpe2Nhc2UiRVMyNTYiOnQ9e25hbWU6IkVDRFNBIixuYW1lZEN1cnZlOiJQLTI1NiJ9LG49ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJFUzM4NCI6dD17bmFtZToiRUNEU0EiLG5hbWVkQ3VydmU6IlAtMzg0In0sbj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIkVTNTEyIjp0PXtuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZToiUC01MjEifSxuPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiRUNESC1FUyI6Y2FzZSJFQ0RILUVTK0ExMjhLVyI6Y2FzZSJFQ0RILUVTK0ExOTJLVyI6Y2FzZSJFQ0RILUVTK0EyNTZLVyI6dD17bmFtZToiRUNESCIsbmFtZWRDdXJ2ZTplLmNydn0sbj1lLmQ/WyJkZXJpdmVCaXRzIl06W107YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgaWkoJ0ludmFsaWQgb3IgdW5zdXBwb3J0ZWQgSldLICJhbGciIChBbGdvcml0aG0pIFBhcmFtZXRlciB2YWx1ZScpfWJyZWFrO2Nhc2UgZGkoKSYmIk9LUCI6aWYoIkVkRFNBIiE9PWUuYWxnKXRocm93IG5ldyBpaSgnSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyk7aWYoIkVkMjU1MTkiIT09ZS5jcnYpdGhyb3cgbmV3IGlpKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIEpXSyAiY3J2IiAoU3VidHlwZSBvZiBLZXkgUGFpcikgUGFyYW1ldGVyIHZhbHVlJyk7dD17bmFtZToiTk9ERS1FRDI1NTE5IixuYW1lZEN1cnZlOiJOT0RFLUVEMjU1MTkifSxuPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IGlpKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIEpXSyAia3R5IiAoS2V5IFR5cGUpIFBhcmFtZXRlciB2YWx1ZScpfXJldHVybnthbGdvcml0aG06dCxrZXlVc2FnZXM6bn19KGUpLG89W3IsbnVsbCE9PSh0PWUuZXh0KSYmdm9pZCAwIT09dCYmdCxudWxsIT09KG49ZS5rZXlfb3BzKSYmdm9pZCAwIT09bj9uOmldO2lmKCJQQktERjIiPT09ci5uYW1lKXJldHVybiBHci5zdWJ0bGUuaW1wb3J0S2V5KCJyYXciLFFyKGUuayksLi4ubyk7Y29uc3Qgcz17Li4uZX07cmV0dXJuIGRlbGV0ZSBzLmFsZyxHci5zdWJ0bGUuaW1wb3J0S2V5KCJqd2siLHMsLi4ubyl9O2NvbnN0IGJpPShlLHQsbik9PntlLnN0YXJ0c1dpdGgoIkhTIil8fCJkaXIiPT09ZXx8ZS5zdGFydHNXaXRoKCJQQkVTMiIpfHwvXkFcZHszfSg/OkdDTSk/S1ckLy50ZXN0KGUpPyhlPT57aWYoIShlIGluc3RhbmNlb2YgVWludDhBcnJheSkpe2lmKCFtaShlKSl0aHJvdyBuZXcgVHlwZUVycm9yKHlpKGUsLi4ud2ksIlVpbnQ4QXJyYXkiKSk7aWYoInNlY3JldCIhPT1lLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiIi5jb25jYXQod2kuam9pbigiIG9yICIpLCcgaW5zdGFuY2VzIGZvciBzeW1tZXRyaWMgYWxnb3JpdGhtcyBtdXN0IGJlIG9mIHR5cGUgInNlY3JldCInKSl9fSkodCk6KChlLHQpPT57aWYoIW1pKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoeWkoZSwuLi53aSkpO2lmKCJzZWNyZXQiPT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoIiIuY29uY2F0KHdpLmpvaW4oIiBvciAiKSwnIGluc3RhbmNlcyBmb3IgYXN5bW1ldHJpYyBhbGdvcml0aG1zIG11c3Qgbm90IGJlIG9mIHR5cGUgInNlY3JldCInKSk7aWYoInNpZ24iPT09dCYmInB1YmxpYyI9PT1lLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiIi5jb25jYXQod2kuam9pbigiIG9yICIpLCcgaW5zdGFuY2VzIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobSBzaWduaW5nIG11c3QgYmUgb2YgdHlwZSAicHJpdmF0ZSInKSk7aWYoImRlY3J5cHQiPT09dCYmInB1YmxpYyI9PT1lLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiIi5jb25jYXQod2kuam9pbigiIG9yICIpLCcgaW5zdGFuY2VzIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobSBkZWNyeXB0aW9uIG11c3QgYmUgb2YgdHlwZSAicHJpdmF0ZSInKSk7aWYoZS5hbGdvcml0aG0mJiJ2ZXJpZnkiPT09dCYmInByaXZhdGUiPT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoIiIuY29uY2F0KHdpLmpvaW4oIiBvciAiKSwnIGluc3RhbmNlcyBmb3IgYXN5bW1ldHJpYyBhbGdvcml0aG0gdmVyaWZ5aW5nIG11c3QgYmUgb2YgdHlwZSAicHVibGljIicpKTtpZihlLmFsZ29yaXRobSYmImVuY3J5cHQiPT09dCYmInByaXZhdGUiPT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoIiIuY29uY2F0KHdpLmpvaW4oIiBvciAiKSwnIGluc3RhbmNlcyBmb3IgYXN5bW1ldHJpYyBhbGdvcml0aG0gZW5jcnlwdGlvbiBtdXN0IGJlIG9mIHR5cGUgInB1YmxpYyInKSl9KSh0LG4pfTtmdW5jdGlvbiBFaShlLHQsbil7aWYoWHIodCkpcmV0dXJuIGZ1bmN0aW9uKGUsdCl7c3dpdGNoKHQpe2Nhc2UiSFMyNTYiOmNhc2UiSFMzODQiOmNhc2UiSFM1MTIiOntpZighZmkoZS5hbGdvcml0aG0sIkhNQUMiKSl0aHJvdyBoaSgiSE1BQyIpO2NvbnN0IG49cGFyc2VJbnQodC5zbGljZSgyKSwxMCk7aWYocGkoZS5hbGdvcml0aG0uaGFzaCkhPT1uKXRocm93IGhpKCJTSEEtIi5jb25jYXQobiksImFsZ29yaXRobS5oYXNoIik7YnJlYWt9Y2FzZSJSUzI1NiI6Y2FzZSJSUzM4NCI6Y2FzZSJSUzUxMiI6e2lmKCFmaShlLmFsZ29yaXRobSwiUlNBU1NBLVBLQ1MxLXYxXzUiKSl0aHJvdyBoaSgiUlNBU1NBLVBLQ1MxLXYxXzUiKTtjb25zdCBuPXBhcnNlSW50KHQuc2xpY2UoMiksMTApO2lmKHBpKGUuYWxnb3JpdGhtLmhhc2gpIT09bil0aHJvdyBoaSgiU0hBLSIuY29uY2F0KG4pLCJhbGdvcml0aG0uaGFzaCIpO2JyZWFrfWNhc2UiUFMyNTYiOmNhc2UiUFMzODQiOmNhc2UiUFM1MTIiOntpZighZmkoZS5hbGdvcml0aG0sIlJTQS1QU1MiKSl0aHJvdyBoaSgiUlNBLVBTUyIpO2NvbnN0IG49cGFyc2VJbnQodC5zbGljZSgyKSwxMCk7aWYocGkoZS5hbGdvcml0aG0uaGFzaCkhPT1uKXRocm93IGhpKCJTSEEtIi5jb25jYXQobiksImFsZ29yaXRobS5oYXNoIik7YnJlYWt9Y2FzZSBkaSgpJiYiRWREU0EiOmlmKCFmaShlLmFsZ29yaXRobSwiTk9ERS1FRDI1NTE5IikpdGhyb3cgaGkoIk5PREUtRUQyNTUxOSIpO2JyZWFrO2Nhc2UiRVMyNTYiOmNhc2UiRVMzODQiOmNhc2UiRVM1MTIiOntpZighZmkoZS5hbGdvcml0aG0sIkVDRFNBIikpdGhyb3cgaGkoIkVDRFNBIik7Y29uc3Qgbj1naSh0KTtpZihlLmFsZ29yaXRobS5uYW1lZEN1cnZlIT09bil0aHJvdyBoaShuLCJhbGdvcml0aG0ubmFtZWRDdXJ2ZSIpO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcigiQ3J5cHRvS2V5IGRvZXMgbm90IHN1cHBvcnQgdGhpcyBvcGVyYXRpb24iKX1mb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShuPjI/bi0yOjApLGk9MjtpPG47aSsrKXJbaS0yXT1hcmd1bWVudHNbaV07dmkoZSxyKX0odCxlLG4pLHQ7aWYodCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpe2lmKCFlLnN0YXJ0c1dpdGgoIkhTIikpdGhyb3cgbmV3IFR5cGVFcnJvcih5aSh0LC4uLndpKSk7cmV0dXJuIEdyLnN1YnRsZS5pbXBvcnRLZXkoInJhdyIsdCx7aGFzaDoiU0hBLSIuY29uY2F0KGUuc2xpY2UoLTMpKSxuYW1lOiJITUFDIn0sITEsW25dKX10aHJvdyBuZXcgVHlwZUVycm9yKHlpKHQsLi4ud2ksIlVpbnQ4QXJyYXkiKSl9Y29uc3Qga2k9YXN5bmMoZSx0LG4scik9Pntjb25zdCBpPWF3YWl0IEVpKGUsdCwidmVyaWZ5Iik7KChlLHQpPT57aWYoZS5zdGFydHNXaXRoKCJSUyIpfHxlLnN0YXJ0c1dpdGgoIlBTIikpe2NvbnN0e21vZHVsdXNMZW5ndGg6bn09dC5hbGdvcml0aG07aWYoIm51bWJlciIhPXR5cGVvZiBufHxuPDIwNDgpdGhyb3cgbmV3IFR5cGVFcnJvcigiIi5jb25jYXQoZSwiIHJlcXVpcmVzIGtleSBtb2R1bHVzTGVuZ3RoIHRvIGJlIDIwNDggYml0cyBvciBsYXJnZXIiKSl9fSkoZSxpKTtjb25zdCBvPWZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj0iU0hBLSIuY29uY2F0KGUuc2xpY2UoLTMpKTtzd2l0Y2goZSl7Y2FzZSJIUzI1NiI6Y2FzZSJIUzM4NCI6Y2FzZSJIUzUxMiI6cmV0dXJue2hhc2g6bixuYW1lOiJITUFDIn07Y2FzZSJQUzI1NiI6Y2FzZSJQUzM4NCI6Y2FzZSJQUzUxMiI6cmV0dXJue2hhc2g6bixuYW1lOiJSU0EtUFNTIixzYWx0TGVuZ3RoOmUuc2xpY2UoLTMpPj4zfTtjYXNlIlJTMjU2IjpjYXNlIlJTMzg0IjpjYXNlIlJTNTEyIjpyZXR1cm57aGFzaDpuLG5hbWU6IlJTQVNTQS1QS0NTMS12MV81In07Y2FzZSJFUzI1NiI6Y2FzZSJFUzM4NCI6Y2FzZSJFUzUxMiI6cmV0dXJue2hhc2g6bixuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZTp0Lm5hbWVkQ3VydmV9O2Nhc2UgZGkoKSYmIkVkRFNBIjpjb25zdHtuYW1lZEN1cnZlOnJ9PXQ7cmV0dXJue25hbWU6cixuYW1lZEN1cnZlOnJ9O2RlZmF1bHQ6dGhyb3cgbmV3IGlpKCJhbGcgIi5jb25jYXQoZSwiIGlzIG5vdCBzdXBwb3J0ZWQgZWl0aGVyIGJ5IEpPU0Ugb3IgeW91ciBqYXZhc2NyaXB0IHJ1bnRpbWUiKSl9fShlLGkuYWxnb3JpdGhtKTt0cnl7cmV0dXJuIGF3YWl0IEdyLnN1YnRsZS52ZXJpZnkobyxpLG4scil9Y2F0Y2goZSl7cmV0dXJuITF9fTthc3luYyBmdW5jdGlvbiBSaShlLHQsbil7dmFyIHI7aWYoIV9pKGUpKXRocm93IG5ldyBvaSgiRmxhdHRlbmVkIEpXUyBtdXN0IGJlIGFuIG9iamVjdCIpO2lmKHZvaWQgMD09PWUucHJvdGVjdGVkJiZ2b2lkIDA9PT1lLmhlYWRlcil0aHJvdyBuZXcgb2koJ0ZsYXR0ZW5lZCBKV1MgbXVzdCBoYXZlIGVpdGhlciBvZiB0aGUgInByb3RlY3RlZCIgb3IgImhlYWRlciIgbWVtYmVycycpO2lmKHZvaWQgMCE9PWUucHJvdGVjdGVkJiYic3RyaW5nIiE9dHlwZW9mIGUucHJvdGVjdGVkKXRocm93IG5ldyBvaSgiSldTIFByb3RlY3RlZCBIZWFkZXIgaW5jb3JyZWN0IHR5cGUiKTtpZih2b2lkIDA9PT1lLnBheWxvYWQpdGhyb3cgbmV3IG9pKCJKV1MgUGF5bG9hZCBtaXNzaW5nIik7aWYoInN0cmluZyIhPXR5cGVvZiBlLnNpZ25hdHVyZSl0aHJvdyBuZXcgb2koIkpXUyBTaWduYXR1cmUgbWlzc2luZyBvciBpbmNvcnJlY3QgdHlwZSIpO2lmKHZvaWQgMCE9PWUuaGVhZGVyJiYhX2koZS5oZWFkZXIpKXRocm93IG5ldyBvaSgiSldTIFVucHJvdGVjdGVkIEhlYWRlciBpbmNvcnJlY3QgdHlwZSIpO2xldCBpPXt9O2lmKGUucHJvdGVjdGVkKXtjb25zdCB0PVFyKGUucHJvdGVjdGVkKTt0cnl7aT1KU09OLnBhcnNlKFpyLmRlY29kZSh0KSl9Y2F0Y2goZSl7dGhyb3cgbmV3IG9pKCJKV1MgUHJvdGVjdGVkIEhlYWRlciBpcyBpbnZhbGlkIil9fWlmKCFmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXRbbl09YXJndW1lbnRzW25dO2NvbnN0IHI9dC5maWx0ZXIoQm9vbGVhbik7aWYoMD09PXIubGVuZ3RofHwxPT09ci5sZW5ndGgpcmV0dXJuITA7bGV0IGk7Zm9yKGNvbnN0IGUgb2Ygcil7Y29uc3QgdD1PYmplY3Qua2V5cyhlKTtpZihpJiYwIT09aS5zaXplKWZvcihjb25zdCBlIG9mIHQpe2lmKGkuaGFzKGUpKXJldHVybiExO2kuYWRkKGUpfWVsc2UgaT1uZXcgU2V0KHQpfXJldHVybiEwfShpLGUuaGVhZGVyKSl0aHJvdyBuZXcgb2koIkpXUyBQcm90ZWN0ZWQgYW5kIEpXUyBVbnByb3RlY3RlZCBIZWFkZXIgUGFyYW1ldGVyIG5hbWVzIG11c3QgYmUgZGlzam9pbnQiKTtjb25zdCBvPXsuLi5pLC4uLmUuaGVhZGVyfSxzPWZ1bmN0aW9uKGUsdCxuLHIsaSl7aWYodm9pZCAwIT09aS5jcml0JiZ2b2lkIDA9PT1yLmNyaXQpdGhyb3cgbmV3IGUoJyJjcml0IiAoQ3JpdGljYWwpIEhlYWRlciBQYXJhbWV0ZXIgTVVTVCBiZSBpbnRlZ3JpdHkgcHJvdGVjdGVkJyk7aWYoIXJ8fHZvaWQgMD09PXIuY3JpdClyZXR1cm4gbmV3IFNldDtpZighQXJyYXkuaXNBcnJheShyLmNyaXQpfHwwPT09ci5jcml0Lmxlbmd0aHx8ci5jcml0LnNvbWUoKGU9PiJzdHJpbmciIT10eXBlb2YgZXx8MD09PWUubGVuZ3RoKSkpdGhyb3cgbmV3IGUoJyJjcml0IiAoQ3JpdGljYWwpIEhlYWRlciBQYXJhbWV0ZXIgTVVTVCBiZSBhbiBhcnJheSBvZiBub24tZW1wdHkgc3RyaW5ncyB3aGVuIHByZXNlbnQnKTtsZXQgbztvPXZvaWQgMCE9PW4/bmV3IE1hcChbLi4uT2JqZWN0LmVudHJpZXMobiksLi4udC5lbnRyaWVzKCldKTp0O2Zvcihjb25zdCB0IG9mIHIuY3JpdCl7aWYoIW8uaGFzKHQpKXRocm93IG5ldyBpaSgnRXh0ZW5zaW9uIEhlYWRlciBQYXJhbWV0ZXIgIicuY29uY2F0KHQsJyIgaXMgbm90IHJlY29nbml6ZWQnKSk7aWYodm9pZCAwPT09aVt0XSl0aHJvdyBuZXcgZSgnRXh0ZW5zaW9uIEhlYWRlciBQYXJhbWV0ZXIgIicuY29uY2F0KHQsJyIgaXMgbWlzc2luZycpKTtpZihvLmdldCh0KSYmdm9pZCAwPT09clt0XSl0aHJvdyBuZXcgZSgnRXh0ZW5zaW9uIEhlYWRlciBQYXJhbWV0ZXIgIicuY29uY2F0KHQsJyIgTVVTVCBiZSBpbnRlZ3JpdHkgcHJvdGVjdGVkJykpfXJldHVybiBuZXcgU2V0KHIuY3JpdCl9KG9pLG5ldyBNYXAoW1siYjY0IiwhMF1dKSxudWxsPT1uP3ZvaWQgMDpuLmNyaXQsaSxvKTtsZXQgYT0hMDtpZihzLmhhcygiYjY0IikmJihhPWkuYjY0LCJib29sZWFuIiE9dHlwZW9mIGEpKXRocm93IG5ldyBvaSgnVGhlICJiNjQiIChiYXNlNjR1cmwtZW5jb2RlIHBheWxvYWQpIEhlYWRlciBQYXJhbWV0ZXIgbXVzdCBiZSBhIGJvb2xlYW4nKTtjb25zdHthbGc6Y309bztpZigic3RyaW5nIiE9dHlwZW9mIGN8fCFjKXRocm93IG5ldyBvaSgnSldTICJhbGciIChBbGdvcml0aG0pIEhlYWRlciBQYXJhbWV0ZXIgbWlzc2luZyBvciBpbnZhbGlkJyk7Y29uc3QgdT1uJiYoKGUsdCk9PntpZih2b2lkIDAhPT10JiYoIUFycmF5LmlzQXJyYXkodCl8fHQuc29tZSgoZT0+InN0cmluZyIhPXR5cGVvZiBlKSkpKXRocm93IG5ldyBUeXBlRXJyb3IoJyInLmNvbmNhdChlLCciIG9wdGlvbiBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3MnKSk7aWYodClyZXR1cm4gbmV3IFNldCh0KX0pKCJhbGdvcml0aG1zIixuLmFsZ29yaXRobXMpO2lmKHUmJiF1LmhhcyhjKSl0aHJvdyBuZXcgcmkoJyJhbGciIChBbGdvcml0aG0pIEhlYWRlciBQYXJhbWV0ZXIgbm90IGFsbG93ZWQnKTtpZihhKXtpZigic3RyaW5nIiE9dHlwZW9mIGUucGF5bG9hZCl0aHJvdyBuZXcgb2koIkpXUyBQYXlsb2FkIG11c3QgYmUgYSBzdHJpbmciKX1lbHNlIGlmKCJzdHJpbmciIT10eXBlb2YgZS5wYXlsb2FkJiYhKGUucGF5bG9hZCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKXRocm93IG5ldyBvaSgiSldTIFBheWxvYWQgbXVzdCBiZSBhIHN0cmluZyBvciBhbiBVaW50OEFycmF5IGluc3RhbmNlIik7bGV0IGw9ITE7ImZ1bmN0aW9uIj09dHlwZW9mIHQmJih0PWF3YWl0IHQoaSxlKSxsPSEwKSxiaShjLHQsInZlcmlmeSIpO2NvbnN0IGQ9ZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXTtjb25zdCByPXQucmVkdWNlKCgoZSx0KT0+e2xldHtsZW5ndGg6bn09dDtyZXR1cm4gZStufSksMCksaT1uZXcgVWludDhBcnJheShyKTtsZXQgbz0wO3JldHVybiB0LmZvckVhY2goKGU9PntpLnNldChlLG8pLG8rPWUubGVuZ3RofSkpLGl9KCRyLmVuY29kZShudWxsIT09KHI9ZS5wcm90ZWN0ZWQpJiZ2b2lkIDAhPT1yP3I6IiIpLCRyLmVuY29kZSgiLiIpLCJzdHJpbmciPT10eXBlb2YgZS5wYXlsb2FkPyRyLmVuY29kZShlLnBheWxvYWQpOmUucGF5bG9hZCksaD1RcihlLnNpZ25hdHVyZSk7aWYoIWF3YWl0IGtpKGMsdCxoLGQpKXRocm93IG5ldyBsaTtsZXQgZjtmPWE/UXIoZS5wYXlsb2FkKToic3RyaW5nIj09dHlwZW9mIGUucGF5bG9hZD8kci5lbmNvZGUoZS5wYXlsb2FkKTplLnBheWxvYWQ7Y29uc3QgcD17cGF5bG9hZDpmfTtyZXR1cm4gdm9pZCAwIT09ZS5wcm90ZWN0ZWQmJihwLnByb3RlY3RlZEhlYWRlcj1pKSx2b2lkIDAhPT1lLmhlYWRlciYmKHAudW5wcm90ZWN0ZWRIZWFkZXI9ZS5oZWFkZXIpLGw/ey4uLnAsa2V5OnR9OnB9dmFyIFRpPWU9Pk1hdGguZmxvb3IoZS5nZXRUaW1lKCkvMWUzKTtjb25zdCBBaT04NjQwMCxDaT0vXihcZCt8XGQrXC5cZCspID8oc2Vjb25kcz98c2Vjcz98c3xtaW51dGVzP3xtaW5zP3xtfGhvdXJzP3xocnM/fGh8ZGF5cz98ZHx3ZWVrcz98d3x5ZWFycz98eXJzP3x5KSQvaTt2YXIgRGk9ZT0+e2NvbnN0IHQ9Q2kuZXhlYyhlKTtpZighdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIHRpbWUgcGVyaW9kIGZvcm1hdCIpO2NvbnN0IG49cGFyc2VGbG9hdCh0WzFdKTtzd2l0Y2godFsyXS50b0xvd2VyQ2FzZSgpKXtjYXNlInNlYyI6Y2FzZSJzZWNzIjpjYXNlInNlY29uZCI6Y2FzZSJzZWNvbmRzIjpjYXNlInMiOnJldHVybiBNYXRoLnJvdW5kKG4pO2Nhc2UibWludXRlIjpjYXNlIm1pbnV0ZXMiOmNhc2UibWluIjpjYXNlIm1pbnMiOmNhc2UibSI6cmV0dXJuIE1hdGgucm91bmQoNjAqbik7Y2FzZSJob3VyIjpjYXNlImhvdXJzIjpjYXNlImhyIjpjYXNlImhycyI6Y2FzZSJoIjpyZXR1cm4gTWF0aC5yb3VuZCgzNjAwKm4pO2Nhc2UiZGF5IjpjYXNlImRheXMiOmNhc2UiZCI6cmV0dXJuIE1hdGgucm91bmQobipBaSk7Y2FzZSJ3ZWVrIjpjYXNlIndlZWtzIjpjYXNlInciOnJldHVybiBNYXRoLnJvdW5kKDYwNDgwMCpuKTtkZWZhdWx0OnJldHVybiBNYXRoLnJvdW5kKDMxNTU3NjAwKm4pfX07Y29uc3QgUGk9ZT0+ZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL15hcHBsaWNhdGlvblwvLywiIiksT2k9KGUsdCk9PiJzdHJpbmciPT10eXBlb2YgZT90LmluY2x1ZGVzKGUpOiEhQXJyYXkuaXNBcnJheShlKSYmdC5zb21lKFNldC5wcm90b3R5cGUuaGFzLmJpbmQobmV3IFNldChlKSkpO2FzeW5jIGZ1bmN0aW9uIElpKGUsdCxuKXt2YXIgcjtjb25zdCBpPWF3YWl0IGFzeW5jIGZ1bmN0aW9uKGUsdCxuKXtpZihlIGluc3RhbmNlb2YgVWludDhBcnJheSYmKGU9WnIuZGVjb2RlKGUpKSwic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IG9pKCJDb21wYWN0IEpXUyBtdXN0IGJlIGEgc3RyaW5nIG9yIFVpbnQ4QXJyYXkiKTtjb25zdHswOnIsMTppLDI6byxsZW5ndGg6c309ZS5zcGxpdCgiLiIpO2lmKDMhPT1zKXRocm93IG5ldyBvaSgiSW52YWxpZCBDb21wYWN0IEpXUyIpO2NvbnN0IGE9YXdhaXQgUmkoe3BheWxvYWQ6aSxwcm90ZWN0ZWQ6cixzaWduYXR1cmU6b30sdCxuKSxjPXtwYXlsb2FkOmEucGF5bG9hZCxwcm90ZWN0ZWRIZWFkZXI6YS5wcm90ZWN0ZWRIZWFkZXJ9O3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3suLi5jLGtleTphLmtleX06Y30oZSx0LG4pO2lmKChudWxsPT09KHI9aS5wcm90ZWN0ZWRIZWFkZXIuY3JpdCl8fHZvaWQgMD09PXI/dm9pZCAwOnIuaW5jbHVkZXMoImI2NCIpKSYmITE9PT1pLnByb3RlY3RlZEhlYWRlci5iNjQpdGhyb3cgbmV3IHNpKCJKV1RzIE1VU1QgTk9UIHVzZSB1bmVuY29kZWQgcGF5bG9hZCIpO2NvbnN0IG89ZnVuY3Rpb24oZSx0KXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307Y29uc3R7dHlwOnJ9PW47aWYociYmKCJzdHJpbmciIT10eXBlb2YgZS50eXB8fFBpKGUudHlwKSE9PVBpKHIpKSl0aHJvdyBuZXcgdGkoJ3VuZXhwZWN0ZWQgInR5cCIgSldUIGhlYWRlciB2YWx1ZScsInR5cCIsImNoZWNrX2ZhaWxlZCIpO2xldCBpO3RyeXtpPUpTT04ucGFyc2UoWnIuZGVjb2RlKHQpKX1jYXRjaChlKXt9aWYoIV9pKGkpKXRocm93IG5ldyBzaSgiSldUIENsYWltcyBTZXQgbXVzdCBiZSBhIHRvcC1sZXZlbCBKU09OIG9iamVjdCIpO2NvbnN0e2lzc3VlcjpvfT1uO2lmKG8mJiEoQXJyYXkuaXNBcnJheShvKT9vOltvXSkuaW5jbHVkZXMoaS5pc3MpKXRocm93IG5ldyB0aSgndW5leHBlY3RlZCAiaXNzIiBjbGFpbSB2YWx1ZScsImlzcyIsImNoZWNrX2ZhaWxlZCIpO2NvbnN0e3N1YmplY3Q6c309bjtpZihzJiZpLnN1YiE9PXMpdGhyb3cgbmV3IHRpKCd1bmV4cGVjdGVkICJzdWIiIGNsYWltIHZhbHVlJywic3ViIiwiY2hlY2tfZmFpbGVkIik7Y29uc3R7YXVkaWVuY2U6YX09bjtpZihhJiYhT2koaS5hdWQsInN0cmluZyI9PXR5cGVvZiBhP1thXTphKSl0aHJvdyBuZXcgdGkoJ3VuZXhwZWN0ZWQgImF1ZCIgY2xhaW0gdmFsdWUnLCJhdWQiLCJjaGVja19mYWlsZWQiKTtsZXQgYztzd2l0Y2godHlwZW9mIG4uY2xvY2tUb2xlcmFuY2Upe2Nhc2Uic3RyaW5nIjpjPURpKG4uY2xvY2tUb2xlcmFuY2UpO2JyZWFrO2Nhc2UibnVtYmVyIjpjPW4uY2xvY2tUb2xlcmFuY2U7YnJlYWs7Y2FzZSJ1bmRlZmluZWQiOmM9MDticmVhaztkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgY2xvY2tUb2xlcmFuY2Ugb3B0aW9uIHR5cGUiKX1jb25zdHtjdXJyZW50RGF0ZTp1fT1uLGw9VGkodXx8bmV3IERhdGUpO2lmKCh2b2lkIDAhPT1pLmlhdHx8bi5tYXhUb2tlbkFnZSkmJiJudW1iZXIiIT10eXBlb2YgaS5pYXQpdGhyb3cgbmV3IHRpKCciaWF0IiBjbGFpbSBtdXN0IGJlIGEgbnVtYmVyJywiaWF0IiwiaW52YWxpZCIpO2lmKHZvaWQgMCE9PWkubmJmKXtpZigibnVtYmVyIiE9dHlwZW9mIGkubmJmKXRocm93IG5ldyB0aSgnIm5iZiIgY2xhaW0gbXVzdCBiZSBhIG51bWJlcicsIm5iZiIsImludmFsaWQiKTtpZihpLm5iZj5sK2MpdGhyb3cgbmV3IHRpKCcibmJmIiBjbGFpbSB0aW1lc3RhbXAgY2hlY2sgZmFpbGVkJywibmJmIiwiY2hlY2tfZmFpbGVkIil9aWYodm9pZCAwIT09aS5leHApe2lmKCJudW1iZXIiIT10eXBlb2YgaS5leHApdGhyb3cgbmV3IHRpKCciZXhwIiBjbGFpbSBtdXN0IGJlIGEgbnVtYmVyJywiZXhwIiwiaW52YWxpZCIpO2lmKGkuZXhwPD1sLWMpdGhyb3cgbmV3IG5pKCciZXhwIiBjbGFpbSB0aW1lc3RhbXAgY2hlY2sgZmFpbGVkJywiZXhwIiwiY2hlY2tfZmFpbGVkIil9aWYobi5tYXhUb2tlbkFnZSl7Y29uc3QgZT1sLWkuaWF0O2lmKGUtYz4oIm51bWJlciI9PXR5cGVvZiBuLm1heFRva2VuQWdlP24ubWF4VG9rZW5BZ2U6RGkobi5tYXhUb2tlbkFnZSkpKXRocm93IG5ldyBuaSgnImlhdCIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCAodG9vIGZhciBpbiB0aGUgcGFzdCknLCJpYXQiLCJjaGVja19mYWlsZWQiKTtpZihlPDAtYyl0aHJvdyBuZXcgdGkoJyJpYXQiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQgKGl0IHNob3VsZCBiZSBpbiB0aGUgcGFzdCknLCJpYXQiLCJjaGVja19mYWlsZWQiKX1yZXR1cm4gaX0oaS5wcm90ZWN0ZWRIZWFkZXIsaS5wYXlsb2FkLG4pLHM9e3BheWxvYWQ6byxwcm90ZWN0ZWRIZWFkZXI6aS5wcm90ZWN0ZWRIZWFkZXJ9O3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3suLi5zLGtleTppLmtleX06c31mdW5jdGlvbiBVaShlKXtyZXR1cm4gX2koZSl9Y2xhc3MgTGl7Y29uc3RydWN0b3IoZSl7aWYodGhpcy5fY2FjaGVkPW5ldyBXZWFrTWFwLCFmdW5jdGlvbihlKXtyZXR1cm4gZSYmIm9iamVjdCI9PXR5cGVvZiBlJiZBcnJheS5pc0FycmF5KGUua2V5cykmJmUua2V5cy5ldmVyeShVaSl9KGUpKXRocm93IG5ldyBhaSgiSlNPTiBXZWIgS2V5IFNldCBtYWxmb3JtZWQiKTt2YXIgdDt0aGlzLl9qd2tzPSh0PWUsImZ1bmN0aW9uIj09dHlwZW9mIHN0cnVjdHVyZWRDbG9uZT9zdHJ1Y3R1cmVkQ2xvbmUodCk6SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0KSkpfWFzeW5jIGdldEtleShlLHQpe2NvbnN0e2FsZzpuLGtpZDpyfT17Li4uZSwuLi50LmhlYWRlcn0saT1mdW5jdGlvbihlKXtzd2l0Y2goInN0cmluZyI9PXR5cGVvZiBlJiZlLnNsaWNlKDAsMikpe2Nhc2UiUlMiOmNhc2UiUFMiOnJldHVybiJSU0EiO2Nhc2UiRVMiOnJldHVybiJFQyI7Y2FzZSJFZCI6cmV0dXJuIk9LUCI7ZGVmYXVsdDp0aHJvdyBuZXcgaWkoJ1Vuc3VwcG9ydGVkICJhbGciIHZhbHVlIGZvciBhIEpTT04gV2ViIEtleSBTZXQnKX19KG4pLG89dGhpcy5fandrcy5rZXlzLmZpbHRlcigoZT0+e2xldCB0PWk9PT1lLmt0eTtpZih0JiYic3RyaW5nIj09dHlwZW9mIHImJih0PXI9PT1lLmtpZCksdCYmInN0cmluZyI9PXR5cGVvZiBlLmFsZyYmKHQ9bj09PWUuYWxnKSx0JiYic3RyaW5nIj09dHlwZW9mIGUudXNlJiYodD0ic2lnIj09PWUudXNlKSx0JiZBcnJheS5pc0FycmF5KGUua2V5X29wcykmJih0PWUua2V5X29wcy5pbmNsdWRlcygidmVyaWZ5IikpLHQmJiJFZERTQSI9PT1uJiYodD0iRWQyNTUxOSI9PT1lLmNydnx8IkVkNDQ4Ij09PWUuY3J2KSx0KXN3aXRjaChuKXtjYXNlIkVTMjU2Ijp0PSJQLTI1NiI9PT1lLmNydjticmVhaztjYXNlIkVTMjU2SyI6dD0ic2VjcDI1NmsxIj09PWUuY3J2O2JyZWFrO2Nhc2UiRVMzODQiOnQ9IlAtMzg0Ij09PWUuY3J2O2JyZWFrO2Nhc2UiRVM1MTIiOnQ9IlAtNTIxIj09PWUuY3J2fXJldHVybiB0fSkpLHswOnMsbGVuZ3RoOmF9PW87aWYoMD09PWEpdGhyb3cgbmV3IGNpO2lmKDEhPT1hKXRocm93IG5ldyB1aTtjb25zdCBjPXRoaXMuX2NhY2hlZC5nZXQocyl8fHRoaXMuX2NhY2hlZC5zZXQocyx7fSkuZ2V0KHMpO2lmKHZvaWQgMD09PWNbbl0pe2NvbnN0IGU9YXdhaXQgYXN5bmMgZnVuY3Rpb24oZSx0LG4pe2lmKCFfaShlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJKV0sgbXVzdCBiZSBhbiBvYmplY3QiKTtpZih0fHwodD1lLmFsZyksInN0cmluZyIhPXR5cGVvZiB0fHwhdCl0aHJvdyBuZXcgVHlwZUVycm9yKCciYWxnIiBhcmd1bWVudCBpcyByZXF1aXJlZCB3aGVuICJqd2suYWxnIiBpcyBub3QgcHJlc2VudCcpO3N3aXRjaChlLmt0eSl7Y2FzZSJvY3QiOmlmKCJzdHJpbmciIT10eXBlb2YgZS5rfHwhZS5rKXRocm93IG5ldyBUeXBlRXJyb3IoJ21pc3NpbmcgImsiIChLZXkgVmFsdWUpIFBhcmFtZXRlciB2YWx1ZScpO3JldHVybiBudWxsIT1ufHwobj0hMCE9PWUuZXh0KSxuP1NpKHsuLi5lLGFsZzp0LGV4dDohMX0pOlFyKGUuayk7Y2FzZSJSU0EiOmlmKHZvaWQgMCE9PWUub3RoKXRocm93IG5ldyBpaSgnUlNBIEpXSyAib3RoIiAoT3RoZXIgUHJpbWVzIEluZm8pIFBhcmFtZXRlciB2YWx1ZSBpcyBub3Qgc3VwcG9ydGVkJyk7Y2FzZSJFQyI6Y2FzZSJPS1AiOnJldHVybiBTaSh7Li4uZSxhbGc6dH0pO2RlZmF1bHQ6dGhyb3cgbmV3IGlpKCdVbnN1cHBvcnRlZCAia3R5IiAoS2V5IFR5cGUpIFBhcmFtZXRlciB2YWx1ZScpfX0oey4uLnMsZXh0OiEwfSxuKTtpZihlIGluc3RhbmNlb2YgVWludDhBcnJheXx8InB1YmxpYyIhPT1lLnR5cGUpdGhyb3cgbmV3IGFpKCJKU09OIFdlYiBLZXkgU2V0IG1lbWJlcnMgbXVzdCBiZSBwdWJsaWMga2V5cyIpO2Nbbl09ZX1yZXR1cm4gY1tuXX19dmFyIEhpPXtleHBvcnRzOnt9fSxNaT17ZXhwb3J0czp7fX0samk9UChydCk7IWZ1bmN0aW9uKGUsdCl7dmFyIG49amkscj1uLkJ1ZmZlcjtmdW5jdGlvbiBpKGUsdCl7Zm9yKHZhciBuIGluIGUpdFtuXT1lW25dfWZ1bmN0aW9uIG8oZSx0LG4pe3JldHVybiByKGUsdCxuKX1yLmZyb20mJnIuYWxsb2MmJnIuYWxsb2NVbnNhZmUmJnIuYWxsb2NVbnNhZmVTbG93P2UuZXhwb3J0cz1uOihpKG4sdCksdC5CdWZmZXI9byksby5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShyLnByb3RvdHlwZSksaShyLG8pLG8uZnJvbT1mdW5jdGlvbihlLHQsbil7aWYoIm51bWJlciI9PXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIHIoZSx0LG4pfSxvLmFsbG9jPWZ1bmN0aW9uKGUsdCxuKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3ZhciBpPXIoZSk7cmV0dXJuIHZvaWQgMCE9PXQ/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",$W=null,eV=!1,function(e){return tV=tV||_W(qW,$W,eV),new Worker(tV,e)});const nV="init",lV="sign-out",oV="http-request",aV="http-request-all",cV="request-custom-grant",rV="revoke-access-token",sV="request-start",dV="request-success",uV="request-finish",hV="get-oidc-service-endpoints",ZV="get-basic-user-info",bV="get-decoded-id-token",mV="get-crypto-helper",pV="enable_http_handler",GV="disable_http_handler",yV="get_auth_url",XV="request_get_token",WV="is_authenticated",VV="get_sign_out_url",IV="refresh_access-token",SV="refresh-access-token-error",RV="set_session_state",fV="start_auto_refresh_token",vV="update_config",gV="get_id_token",YV="check_session_signed_in",KV="check_session_signed_out",NV="get_config_data",JV="set_session_state_from_iframe",UV="token_request_config";var kV;e.Hooks=void 0,(kV=e.Hooks||(e.Hooks={})).SignIn="sign-in",kV.SignOut="sign-out",kV.Initialize="initialize",kV.HttpRequestStart="http-request-start",kV.HttpRequestFinish="http-request-finish",kV.HttpRequestError="http-request-error",kV.HttpRequestSuccess="http-request-success",kV.RevokeAccessToken="revoke-access-token",kV.CustomGrant="custom-grant",kV.SignOutFailed="sign-out-failed";const LV="rpIFrame",CV="promptNoneIFrame",TV="Y2hlY2tTZXNzaW9u",HV="sign-in-silently",xV="initialized-silent-sign-in",wV="promptNoneRequestSent",FV="error",zV="error_description",PV="custom_grant_config",BV="state",jV="Access token is invalid";var QV;e.Storage=void 0,(QV=e.Storage||(e.Storage={})).LocalStorage="localStorage",QV.SessionStorage="sessionStorage",QV.WebWorker="webWorker",QV.BrowserMemory="browserMemory";class MV{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 EV{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(wW,"-instance_").concat(i,"-").concat(t),e)}static getSignOutURL(e,t){var i;return null!==(i=sessionStorage.getItem("".concat(wW,"-instance_").concat(t,"-").concat(e)))&&void 0!==i?i:""}static removePKCE(e){sessionStorage.removeItem(e)}static canContinueSignIn(e,t){return!(e&&!EV.hasErrorInURL()&&!EV.hasAuthSearchParamsInURL()&&!t)}static isInitializedSilentSignIn(){return EV.isSilentStatePresentInURL()}static wasSignInCalled(){return!(!EV.hasErrorInURL()&&!EV.hasAuthSearchParamsInURL()||this.isSilentStatePresentInURL())}static wasSilentSignInCalled(){const e=sessionStorage.getItem(xV),t=e?JSON.parse(e):null;return Boolean(t)}static isSignOutSuccessful(){return kW(this,void 0,void 0,(function*(){if(AW.isSignOutSuccessful(window.location.href)){const e=window.location.href.split("?")[0];return history.pushState({},document.title,e),yield AW.clearUserSessionData(),!0}return!1}))}static didSignOutFail(){if(AW.didSignOutFail(window.location.href)){const e=new URL(window.location.href),t=e.searchParams.get(FV),i=e.searchParams.get(zV),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(HV))&&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(FV)&&t.searchParams.get(BV)!==FW}static canSendPromptNoneRequest(){const e=sessionStorage.getItem(wV);return!(e?JSON.parse(e):null)}static setPromptNoneRequestSent(e){sessionStorage.setItem(wV,JSON.stringify(e))}static waitTillPageRedirect(e){return kW(this,void 0,void 0,(function*(){const t=null!=e?e:3e3;yield new Promise((e=>setTimeout(e,1e3*t)))}))}}EV.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 DV{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,a,c;l.initialize(e.clientID,null!==(o=t.checkSessionIframe)&&void 0!==o?o:"",i,null!==(a=e.checkSessionInterval)&&void 0!==a?a:3,null!==(c=e.sessionRefreshInterval)&&void 0!==c?c:300,e.signInRedirectURL,n)}requestCustomGrant(e,t){var i,n,l;return kW(this,void 0,void 0,(function*(){let o=!0,a=!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))){a=!0;break}}return e.shouldReplayAfterRefresh&&this._dataLayer.setTemporaryDataParameter(PV,JSON.stringify(e)),o||a?this._authenticationClient.requestCustomGrant(e).then((i=>kW(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 BW("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 kW(this,void 0,void 0,(function*(){const e=yield this._dataLayer.getTemporaryDataParameter(PV);return e?JSON.parse(e):null}))}refreshAccessToken(e){return kW(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:SV};return window.postMessage(t),Promise.reject(e)}}))}retryFailedRequests(e){return kW(this,void 0,void 0,(function*(){const t=e.httpClient,i=e.requestConfig,n=e.isHttpHandlerEnabled,l=e.httpErrorCallback,o=e.httpFinishCallback;yield EV.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 a,c;return kW(this,void 0,void 0,(function*(){let r=!1;const s=yield this._dataLayer.getConfigData();for(const e of[...null!==(a=yield null==s?void 0:s.resourceServerURLs)&&void 0!==a?a:[],s.baseUrl])if(e&&(null===(c=null==t?void 0:t.url)||void 0===c?void 0:c.startsWith(e))){r=!0;break}return r?e.request(t).then((e=>Promise.resolve(e))).catch((a=>kW(this,void 0,void 0,(function*(){var c,r,s;if(401===(null===(c=null==a?void 0:a.response)||void 0===c?void 0:c.status)||!(null==a?void 0:a.response)){if(this._isTokenRefreshing)return this.retryFailedRequests({enableRetrievingSignOutURLFromSession:o,httpClient:e,httpErrorCallback:n,httpFinishCallback:l,isHttpHandlerEnabled:i,requestConfig:t});let c;this._isTokenRefreshing=!0;try{c=yield this.refreshAccessToken(o),this._isTokenRefreshing=!1}catch(e){throw this._isTokenRefreshing=!1,i&&("function"==typeof n&&(yield n(Object.assign(Object.assign({},a),{code:jV}))),"function"==typeof l&&l()),new BW("SPA-AUTH_HELPER-HR-SE01",null!==(r=null==e?void 0:e.name)&&void 0!==r?r:"Refresh token request failed.",null!==(s=null==e?void 0:e.message)&&void 0!==s?s:"An error occurred while trying to refresh the access token following a 401 response from the server.")}if(c)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(a)),"function"==typeof l&&l()),Promise.reject(a)})))):Promise.reject(new BW("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,a,c;return kW(this,void 0,void 0,(function*(){let r=!0;const s=yield this._dataLayer.getConfigData();for(const t of e){let e=!1;for(const i of[...null!==(a=null===(o=yield s)||void 0===o?void 0:o.resourceServerURLs)&&void 0!==a?a:[],s.baseUrl])if(i&&(null===(c=t.url)||void 0===c?void 0:c.startsWith(i))){e=!0;break}if(!e){r=!1;break}}const d=[];if(r)return e.forEach((e=>{d.push(t.request(e))})),(null==t?void 0:t.all)&&t.all(d).then((e=>Promise.resolve(e))).catch((e=>kW(this,void 0,void 0,(function*(){var o,a,c;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:jV}))),"function"==typeof l&&l()),new BW("SPA-AUTH_HELPER-HRA-SE01",null!==(a=null==t?void 0:t.name)&&void 0!==a?a:"Refresh token request failed.",null!==(c=null==t?void 0:t.message)&&void 0!==c?c:"An error occurred while trying to refresh the access token following a 401 response from the server.")}if(o)return t.all&&t.all(d).then((e=>Promise.resolve(e))).catch((e=>kW(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 BW("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(t,i,n,l,o,a){return kW(this,void 0,void 0,(function*(){const c=yield this._dataLayer.getConfigData();if(c.storage===e.Storage.BrowserMemory&&c.enablePKCE&&i){const e=EV.getPKCE(jW.extractPKCEKeyFromStateParam(i));yield this._authenticationClient.setPKCECode(jW.extractPKCEKeyFromStateParam(i),e)}else c.storage===e.Storage.WebWorker&&l&&(yield this._authenticationClient.setPKCECode(l,null!=o?o:""));return t?this._authenticationClient.requestAccessToken(t,null!=i?i:"",null!=o?o:"",void 0,a).then((()=>kW(this,void 0,void 0,(function*(){return c.storage!==e.Storage.WebWorker?(EV.setSignOutURL(yield this._authenticationClient.getSignOutURL(),c.clientID,this._instanceID),this._spaHelper&&(this._spaHelper.clearRefreshTokenTimeout(),this._spaHelper.refreshAccessTokenAutomatically(this)),n&&"function"==typeof n&&c.enableOIDCSessionManagement&&n()):this._spaHelper&&this._spaHelper.refreshAccessTokenAutomatically(this),this._authenticationClient.getBasicUserInfo()})))).catch((e=>Promise.reject(e))):Promise.reject(new BW("SPA-AUTH_HELPER-RAT1-NF01","No authorization code.","No authorization code was found."))}))}trySignInSilently(e,t,i,n,l){var o;return kW(this,void 0,void 0,(function*(){if(EV.isInitializedSilentSignIn())return yield i.receivePromptNoneResponse(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""});const a=document.getElementById(LV),c=null===(o=null==a?void 0:a.contentDocument)||void 0===o?void 0:o.getElementById(CV);try{const t=yield e(n);c.src=t}catch(e){return Promise.reject(e)}return new Promise(((e,i)=>{const n=setTimeout((()=>{e(!1)}),1e4),o=a=>kW(this,void 0,void 0,(function*(){var c,r,s,d;const u=a.data;(null==u?void 0:u.type)==KV&&(window.removeEventListener("message",o),clearTimeout(n),e(!1)),(null==u?void 0:u.type)==YV&&(null===(c=null==u?void 0:u.data)||void 0===c?void 0:c.code)&&t(null===(r=null==u?void 0:u.data)||void 0===r?void 0:r.code,null===(s=null==u?void 0:u.data)||void 0===s?void 0:s.sessionState,null===(d=null==u?void 0:u.data)||void 0===d?void 0:d.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(t,i,n){return kW(this,void 0,void 0,(function*(){const l=yield this._dataLayer.getConfigData();if(yield t())return Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""});if(l.storage!==e.Storage.WebWorker&&(yield this._authenticationClient.isAuthenticated()))return this._spaHelper.clearRefreshTokenTimeout(),this._spaHelper.refreshAccessTokenAutomatically(this),l.enableOIDCSessionManagement&&i(),Promise.resolve(yield this._authenticationClient.getBasicUserInfo());const o=new URL(window.location.href).searchParams.get(FV),a=new URL(window.location.href).searchParams.get(zV);if(o){const e=new URL(window.location.href);throw e.searchParams.delete(FV),e.searchParams.delete(zV),history.pushState(null,document.title,e.toString()),new BW("SPA-AUTH_HELPER-SI-SE01",o,null!=a?a:"")}if(l.storage===e.Storage.WebWorker&&n){const e=yield n();if(e)return e}}))}attachTokenToRequestConfig(e){return kW(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 kW(this,void 0,void 0,(function*(){return this._authenticationClient.getBasicUserInfo()}))}getDecodedIDToken(){return kW(this,void 0,void 0,(function*(){return this._authenticationClient.getDecodedIDToken()}))}getDecodedIDPIDToken(){return kW(this,void 0,void 0,(function*(){return this._authenticationClient.getDecodedIDToken()}))}getCryptoHelper(){return kW(this,void 0,void 0,(function*(){return this._authenticationClient.getCryptoHelper()}))}getIDToken(){return kW(this,void 0,void 0,(function*(){return this._authenticationClient.getIDToken()}))}getOIDCServiceEndpoints(){return kW(this,void 0,void 0,(function*(){return this._authenticationClient.getOIDCServiceEndpoints()}))}getAccessToken(){return kW(this,void 0,void 0,(function*(){return this._authenticationClient.getAccessToken()}))}getIDPAccessToken(){var e;return kW(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 kW(this,void 0,void 0,(function*(){return this._authenticationClient.isAuthenticated()}))}}class OV{constructor(e){this._authenticationClient=e,this._dataLayer=this._authenticationClient.getDataLayer()}refreshAccessTokenAutomatically(e){var t,i;return kW(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((()=>kW(this,void 0,void 0,(function*(){yield e.refreshAccessToken()}))),1e3*(t<=10?t:t-10));yield this._dataLayer.setTemporaryDataParameter(CW,JSON.stringify(i))}}))}getRefreshTimeoutTimer(){return kW(this,void 0,void 0,(function*(){return(yield this._dataLayer.getTemporaryDataParameter(CW))?JSON.parse(yield this._dataLayer.getTemporaryDataParameter(CW)):-1}))}clearRefreshTokenTimeout(e){return kW(this,void 0,void 0,(function*(){if(e)return void clearTimeout(e);const t=yield this.getRefreshTimeoutTimer();-1!==t&&clearTimeout(t)}))}}const AV=(()=>{let t,i,n,l,o,a,c,r,s,d,u;const h=(e,c,r,s,d,h,b)=>{t=e,i=c,n=r,l=s,o=h,a=d,u=b,l>-1&&Z(),a>-1&&(d=setInterval((()=>{p()}),1e3*a))},Z=()=>kW(void 0,void 0,void 0,(function*(){var e;if(!i||!t||!o)return;const a="opIFrame";const c=document.getElementById(LV);(null===(e=null==c?void 0:c.contentDocument)||void 0===e?void 0:e.getElementById(a)).src=i+"?client_id="+t+"&redirect_uri="+o,r=setInterval((function(){var e;return kW(this,void 0,void 0,(function*(){const l=yield n();if(Boolean(t)&&Boolean(l)){const n="".concat(t," ").concat(l),o=document.getElementById(LV),c=(null===(e=null==o?void 0:o.contentDocument)||void 0===e?void 0:e.getElementById(a)).contentWindow;null==c||c.postMessage(n,i)}}))}),1e3*l),m()})),b=()=>{clearInterval(r),clearInterval(undefined)},m=()=>{null===window||void 0===window||window.addEventListener("message",(function(e){var t;return kW(this,void 0,void 0,(function*(){const n=i;!n||(null==n?void 0:n.indexOf(e.origin))<0||(null===(t=null==e?void 0:e.data)||void 0===t?void 0:t.type)===JV||"unchanged"===e.data||("error"===e.data?window.location.href=yield c():"changed"===e.data&&p())}))}),!1)},p=()=>kW(void 0,void 0,void 0,(function*(){var t;const i=document.getElementById(LV),n=null===(t=null==i?void 0:i.contentDocument)||void 0===t?void 0:t.getElementById(CV);if(EV.canSendPromptNoneRequest()){EV.setPromptNoneRequestSent(!0);const t=e=>{var i,n,l;(null===(i=null==e?void 0:e.data)||void 0===i?void 0:i.type)===JV&&(d(null!==(l=null===(n=null==e?void 0:e.data)||void 0===n?void 0:n.data)&&void 0!==l?l:""),null===window||void 0===window||window.removeEventListener("message",t))};s!==e.Storage.BrowserMemory&&s!==e.Storage.WebWorker||null===window||void 0===window||window.addEventListener("message",t);const i=yield u({prompt:"none",response_mode:"query",state:TV});n.src=i}})),G=t=>kW(void 0,void 0,void 0,(function*(){var i,n;const l=new URL(window.location.href).searchParams.get(BV),o=new URL(window.location.href).searchParams.get(xW),a=window.parent.parent;if(null!==l&&(l.includes(TV)||l.includes(HV))){const r=new URL(window.location.href).searchParams.get("code");if(null!==r&&0!==r.length){if(l.includes(HV)){const e={data:{code:r,sessionState:null!=o?o:"",state:l},type:YV};return sessionStorage.setItem(xV,"false"),a.postMessage(e,a.origin),EV.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield EV.waitTillPageRedirect(),!0}const c=new URL(window.location.href).searchParams.get("session_state");if(s===e.Storage.LocalStorage||s===e.Storage.SessionStorage)t&&(yield t(c));else{const e={data:null!=c?c:"",type:JV};null===(n=null===(i=null===window||void 0===window?void 0:window.parent)||void 0===i?void 0:i.parent)||void 0===n||n.postMessage(e)}return EV.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield EV.waitTillPageRedirect(),!0}{if(l.includes(HV)){const e={type:KV};return window.parent.parent.postMessage(e,a.origin),EV.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield EV.waitTillPageRedirect(),!0}EV.setPromptNoneRequestSent(!1);const e=yield c();return yield AW.clearUserSessionData(),a.location.href=e,window.location.href="about:blank",yield EV.waitTillPageRedirect(),!0}}return!1}));return(e,t,i)=>kW(void 0,void 0,void 0,(function*(){var n;let l=document.createElement("iframe");l.setAttribute("id",LV),l.style.display="none";let o=!1;l.onload=()=>{var e,t,i,n;l=document.getElementById(LV);const a=null==l?void 0:l.contentDocument,c=null==a?void 0:a.createElement("iframe");c&&(c.setAttribute("id","opIFrame"),c.style.display="none");const r=null==a?void 0:a.createElement("iframe");r&&(r.setAttribute("id",CV),r.style.display="none"),c&&(null===(t=null===(e=null==l?void 0:l.contentDocument)||void 0===e?void 0:e.body)||void 0===t||t.appendChild(c)),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,s=t,d=i;for(;!1===o;)yield new Promise((e=>setTimeout(e,1)));return{initialize:h,receivePromptNoneResponse:G,reset:b}}))})();var _V,qV={exports:{}},$V=function(e,t){return function(){return e.apply(t,arguments)}},eI=$V,tI=Object.prototype.toString,iI=(_V=Object.create(null),function(e){var t=tI.call(e);return _V[t]||(_V[t]=t.slice(8,-1).toLowerCase())});function nI(e){return e=e.toLowerCase(),function(t){return iI(t)===e}}function lI(e){return Array.isArray(e)}function oI(e){return void 0===e}var aI=nI("ArrayBuffer");function cI(e){return"number"==typeof e}function rI(e){return null!==e&&"object"==typeof e}function sI(e){if("object"!==iI(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}var dI=nI("Date"),uI=nI("File"),hI=nI("Blob"),ZI=nI("FileList");function bI(e){return"[object Function]"===tI.call(e)}var mI=nI("URLSearchParams");function pI(e,t){if(null!=e)if("object"!=typeof e&&(e=[e]),lI(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 GI=function(e){return function(t){return e&&t instanceof e}}("undefined"!=typeof Uint8Array&&Object.getPrototypeOf(Uint8Array));var yI,XI=nI("HTMLFormElement"),WI=(yI=Object.prototype.hasOwnProperty,function(e,t){return yI.call(e,t)}),VI={isArray:lI,isArrayBuffer:aI,isBuffer:function(e){return null!==e&&!oI(e)&&null!==e.constructor&&!oI(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||tI.call(e)===t||bI(e.toString)&&e.toString()===t)},isArrayBufferView:function(e){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&aI(e.buffer)},isString:function(e){return"string"==typeof e},isNumber:cI,isObject:rI,isPlainObject:sI,isEmptyObject:function(e){return e&&0===Object.keys(e).length&&Object.getPrototypeOf(e)===Object.prototype},isUndefined:oI,isDate:dI,isFile:uI,isBlob:hI,isFunction:bI,isStream:function(e){return rI(e)&&bI(e.pipe)},isURLSearchParams:mI,isStandardBrowserEnv:function(){var e;return("undefined"==typeof navigator||"ReactNative"!==(e=navigator.product)&&"NativeScript"!==e&&"NS"!==e)&&("undefined"!=typeof window&&"undefined"!=typeof document)},forEach:pI,merge:function e(){var t={};function i(i,n){sI(t[n])&&sI(i)?t[n]=e(t[n],i):sI(i)?t[n]=e({},i):lI(i)?t[n]=i.slice():t[n]=i}for(var n=0,l=arguments.length;n<l;n++)pI(arguments[n],i);return t},extend:function(e,t,i){return pI(t,(function(t,n){e[n]=i&&"function"==typeof t?eI(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,a,c={};if(t=t||{},null==e)return t;do{for(o=(l=Object.getOwnPropertyNames(e)).length;o-- >0;)a=l[o],n&&!n(a,e,t)||c[a]||(t[a]=e[a],c[a]=!0);e=!1!==i&&Object.getPrototypeOf(e)}while(e&&(!i||i(e,t))&&e!==Object.prototype);return t},kindOf:iI,kindOfTest:nI,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(lI(e))return e;var t=e.length;if(!cI(t))return null;for(var i=new Array(t);t-- >0;)i[t]=e[t];return i},isTypedArray:GI,isFileList:ZI,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:XI,hasOwnProperty:WI},II="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},SI=[],RI=[],fI="undefined"!=typeof Uint8Array?Uint8Array:Array,vI=!1;function gI(){vI=!0;for(var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",t=0,i=e.length;t<i;++t)SI[t]=e[t],RI[e.charCodeAt(t)]=t;RI["-".charCodeAt(0)]=62,RI["_".charCodeAt(0)]=63}function YI(e,t,i){for(var n,l,o=[],a=t;a<i;a+=3)n=(e[a]<<16)+(e[a+1]<<8)+e[a+2],o.push(SI[(l=n)>>18&63]+SI[l>>12&63]+SI[l>>6&63]+SI[63&l]);return o.join("")}function KI(e){var t;vI||gI();for(var i=e.length,n=i%3,l="",o=[],a=16383,c=0,r=i-n;c<r;c+=a)o.push(YI(e,c,c+a>r?r:c+a));return 1===n?(t=e[i-1],l+=SI[t>>2],l+=SI[t<<4&63],l+="=="):2===n&&(t=(e[i-2]<<8)+e[i-1],l+=SI[t>>10],l+=SI[t>>4&63],l+=SI[t<<2&63],l+="="),o.push(l),o.join("")}function NI(e,t,i,n,l){var o,a,c=8*l-n-1,r=(1<<c)-1,s=r>>1,d=-7,u=i?l-1:0,h=i?-1:1,Z=e[t+u];for(u+=h,o=Z&(1<<-d)-1,Z>>=-d,d+=c;d>0;o=256*o+e[t+u],u+=h,d-=8);for(a=o&(1<<-d)-1,o>>=-d,d+=n;d>0;a=256*a+e[t+u],u+=h,d-=8);if(0===o)o=1-s;else{if(o===r)return a?NaN:1/0*(Z?-1:1);a+=Math.pow(2,n),o-=s}return(Z?-1:1)*a*Math.pow(2,o-n)}function JI(e,t,i,n,l,o){var a,c,r,s=8*o-l-1,d=(1<<s)-1,u=d>>1,h=23===l?Math.pow(2,-24)-Math.pow(2,-77):0,Z=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?(c=isNaN(t)?1:0,a=d):(a=Math.floor(Math.log(t)/Math.LN2),t*(r=Math.pow(2,-a))<1&&(a--,r*=2),(t+=a+u>=1?h/r:h*Math.pow(2,1-u))*r>=2&&(a++,r/=2),a+u>=d?(c=0,a=d):a+u>=1?(c=(t*r-1)*Math.pow(2,l),a+=u):(c=t*Math.pow(2,u-1)*Math.pow(2,l),a=0));l>=8;e[i+Z]=255&c,Z+=b,c/=256,l-=8);for(a=a<<l|c,s+=l;s>0;e[i+Z]=255&a,Z+=b,a/=256,s-=8);e[i+Z-b]|=128*m}var UI={}.toString,kI=Array.isArray||function(e){return"[object Array]"==UI.call(e)};HI.TYPED_ARRAY_SUPPORT=void 0===II.TYPED_ARRAY_SUPPORT||II.TYPED_ARRAY_SUPPORT;var LI=CI();function CI(){return HI.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function TI(e,t){if(CI()<t)throw new RangeError("Invalid typed array length");return HI.TYPED_ARRAY_SUPPORT?(e=new Uint8Array(t)).__proto__=HI.prototype:(null===e&&(e=new HI(t)),e.length=t),e}function HI(e,t,i){if(!(HI.TYPED_ARRAY_SUPPORT||this instanceof HI))return new HI(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 FI(this,e)}return xI(this,e,t,i)}function xI(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);HI.TYPED_ARRAY_SUPPORT?(e=t).__proto__=HI.prototype:e=zI(e,t);return e}(e,t,i,n):"string"==typeof t?function(e,t,i){"string"==typeof i&&""!==i||(i="utf8");if(!HI.isEncoding(i))throw new TypeError('"encoding" must be a valid string encoding');var n=0|jI(t,i),l=(e=TI(e,n)).write(t,i);l!==n&&(e=e.slice(0,l));return e}(e,t,i):function(e,t){if(BI(t)){var i=0|PI(t.length);return 0===(e=TI(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?TI(e,0):zI(e,t);if("Buffer"===t.type&&kI(t.data))return zI(e,t.data)}var n;throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(e,t)}function wI(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 FI(e,t){if(wI(t),e=TI(e,t<0?0:0|PI(t)),!HI.TYPED_ARRAY_SUPPORT)for(var i=0;i<t;++i)e[i]=0;return e}function zI(e,t){var i=t.length<0?0:0|PI(t.length);e=TI(e,i);for(var n=0;n<i;n+=1)e[n]=255&t[n];return e}function PI(e){if(e>=CI())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+CI().toString(16)+" bytes");return 0|e}function BI(e){return!(null==e||!e._isBuffer)}function jI(e,t){if(BI(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 GS(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*i;case"hex":return i>>>1;case"base64":return yS(e).length;default:if(n)return GS(e).length;t=(""+t).toLowerCase(),n=!0}}function QI(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 aS(this,t,i);case"utf8":case"utf-8":return iS(this,t,i);case"ascii":return lS(this,t,i);case"latin1":case"binary":return oS(this,t,i);case"base64":return tS(this,t,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return cS(this,t,i);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function MI(e,t,i){var n=e[t];e[t]=e[i],e[i]=n}function EI(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=HI.from(t,n)),BI(t))return 0===t.length?-1:DI(e,t,i,n,l);if("number"==typeof t)return t&=255,HI.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?l?Uint8Array.prototype.indexOf.call(e,t,i):Uint8Array.prototype.lastIndexOf.call(e,t,i):DI(e,[t],i,n,l);throw new TypeError("val must be string, number or Buffer")}function DI(e,t,i,n,l){var o,a=1,c=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;a=2,c/=2,r/=2,i/=2}function s(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(l){var d=-1;for(o=i;o<c;o++)if(s(e,o)===s(t,-1===d?0:o-d)){if(-1===d&&(d=o),o-d+1===r)return d*a}else-1!==d&&(o-=o-d),d=-1}else for(i+r>c&&(i=c-r),o=i;o>=0;o--){for(var u=!0,h=0;h<r;h++)if(s(e,o+h)!==s(t,h)){u=!1;break}if(u)return o}return-1}function OI(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 a=0;a<n;++a){var c=parseInt(t.substr(2*a,2),16);if(isNaN(c))return a;e[i+a]=c}return a}function AI(e,t,i,n){return XS(GS(t,e.length-i),e,i,n)}function _I(e,t,i,n){return XS(function(e){for(var t=[],i=0;i<e.length;++i)t.push(255&e.charCodeAt(i));return t}(t),e,i,n)}function qI(e,t,i,n){return _I(e,t,i,n)}function $I(e,t,i,n){return XS(yS(t),e,i,n)}function eS(e,t,i,n){return XS(function(e,t){for(var i,n,l,o=[],a=0;a<e.length&&!((t-=2)<0);++a)n=(i=e.charCodeAt(a))>>8,l=i%256,o.push(l),o.push(n);return o}(t,e.length-i),e,i,n)}function tS(e,t,i){return 0===t&&i===e.length?KI(e):KI(e.slice(t,i))}function iS(e,t,i){i=Math.min(e.length,i);for(var n=[],l=t;l<i;){var o,a,c,r,s=e[l],d=null,u=s>239?4:s>223?3:s>191?2:1;if(l+u<=i)switch(u){case 1:s<128&&(d=s);break;case 2:128==(192&(o=e[l+1]))&&(r=(31&s)<<6|63&o)>127&&(d=r);break;case 3:o=e[l+1],a=e[l+2],128==(192&o)&&128==(192&a)&&(r=(15&s)<<12|(63&o)<<6|63&a)>2047&&(r<55296||r>57343)&&(d=r);break;case 4:o=e[l+1],a=e[l+2],c=e[l+3],128==(192&o)&&128==(192&a)&&128==(192&c)&&(r=(15&s)<<18|(63&o)<<12|(63&a)<<6|63&c)>65535&&r<1114112&&(d=r)}null===d?(d=65533,u=1):d>65535&&(d-=65536,n.push(d>>>10&1023|55296),d=56320|1023&d),n.push(d),l+=u}return function(e){var t=e.length;if(t<=nS)return String.fromCharCode.apply(String,e);var i="",n=0;for(;n<t;)i+=String.fromCharCode.apply(String,e.slice(n,n+=nS));return i}(n)}HI.poolSize=8192,HI._augment=function(e){return e.__proto__=HI.prototype,e},HI.from=function(e,t,i){return xI(null,e,t,i)},HI.TYPED_ARRAY_SUPPORT&&(HI.prototype.__proto__=Uint8Array.prototype,HI.__proto__=Uint8Array),HI.alloc=function(e,t,i){return function(e,t,i,n){return wI(t),t<=0?TI(e,t):void 0!==i?"string"==typeof n?TI(e,t).fill(i,n):TI(e,t).fill(i):TI(e,t)}(null,e,t,i)},HI.allocUnsafe=function(e){return FI(null,e)},HI.allocUnsafeSlow=function(e){return FI(null,e)},HI.isBuffer=WS,HI.compare=function(e,t){if(!BI(e)||!BI(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},HI.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}},HI.concat=function(e,t){if(!kI(e))throw new TypeError('"list" argument must be an Array of Buffers');if(0===e.length)return HI.alloc(0);var i;if(void 0===t)for(t=0,i=0;i<e.length;++i)t+=e[i].length;var n=HI.allocUnsafe(t),l=0;for(i=0;i<e.length;++i){var o=e[i];if(!BI(o))throw new TypeError('"list" argument must be an Array of Buffers');o.copy(n,l),l+=o.length}return n},HI.byteLength=jI,HI.prototype._isBuffer=!0,HI.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)MI(this,t,t+1);return this},HI.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)MI(this,t,t+3),MI(this,t+1,t+2);return this},HI.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)MI(this,t,t+7),MI(this,t+1,t+6),MI(this,t+2,t+5),MI(this,t+3,t+4);return this},HI.prototype.toString=function(){var e=0|this.length;return 0===e?"":0===arguments.length?iS(this,0,e):QI.apply(this,arguments)},HI.prototype.equals=function(e){if(!BI(e))throw new TypeError("Argument must be a Buffer");return this===e||0===HI.compare(this,e)},HI.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+">"},HI.prototype.compare=function(e,t,i,n,l){if(!BI(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),a=(i>>>=0)-(t>>>=0),c=Math.min(o,a),r=this.slice(n,l),s=e.slice(t,i),d=0;d<c;++d)if(r[d]!==s[d]){o=r[d],a=s[d];break}return o<a?-1:a<o?1:0},HI.prototype.includes=function(e,t,i){return-1!==this.indexOf(e,t,i)},HI.prototype.indexOf=function(e,t,i){return EI(this,e,t,i,!0)},HI.prototype.lastIndexOf=function(e,t,i){return EI(this,e,t,i,!1)},HI.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 OI(this,e,t,i);case"utf8":case"utf-8":return AI(this,e,t,i);case"ascii":return _I(this,e,t,i);case"latin1":case"binary":return qI(this,e,t,i);case"base64":return $I(this,e,t,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return eS(this,e,t,i);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},HI.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var nS=4096;function lS(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 oS(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 aS(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+=pS(e[o]);return l}function cS(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 rS(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 sS(e,t,i,n,l,o){if(!BI(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 dS(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 uS(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 hS(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 ZS(e,t,i,n,l){return l||hS(e,0,i,4),JI(e,t,i,n,23,4),i+4}function bS(e,t,i,n,l){return l||hS(e,0,i,8),JI(e,t,i,n,52,8),i+8}HI.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),HI.TYPED_ARRAY_SUPPORT)(i=this.subarray(e,t)).__proto__=HI.prototype;else{var l=t-e;i=new HI(l,void 0);for(var o=0;o<l;++o)i[o]=this[o+e]}return i},HI.prototype.readUIntLE=function(e,t,i){e|=0,t|=0,i||rS(e,t,this.length);for(var n=this[e],l=1,o=0;++o<t&&(l*=256);)n+=this[e+o]*l;return n},HI.prototype.readUIntBE=function(e,t,i){e|=0,t|=0,i||rS(e,t,this.length);for(var n=this[e+--t],l=1;t>0&&(l*=256);)n+=this[e+--t]*l;return n},HI.prototype.readUInt8=function(e,t){return t||rS(e,1,this.length),this[e]},HI.prototype.readUInt16LE=function(e,t){return t||rS(e,2,this.length),this[e]|this[e+1]<<8},HI.prototype.readUInt16BE=function(e,t){return t||rS(e,2,this.length),this[e]<<8|this[e+1]},HI.prototype.readUInt32LE=function(e,t){return t||rS(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},HI.prototype.readUInt32BE=function(e,t){return t||rS(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},HI.prototype.readIntLE=function(e,t,i){e|=0,t|=0,i||rS(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},HI.prototype.readIntBE=function(e,t,i){e|=0,t|=0,i||rS(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},HI.prototype.readInt8=function(e,t){return t||rS(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},HI.prototype.readInt16LE=function(e,t){t||rS(e,2,this.length);var i=this[e]|this[e+1]<<8;return 32768&i?4294901760|i:i},HI.prototype.readInt16BE=function(e,t){t||rS(e,2,this.length);var i=this[e+1]|this[e]<<8;return 32768&i?4294901760|i:i},HI.prototype.readInt32LE=function(e,t){return t||rS(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},HI.prototype.readInt32BE=function(e,t){return t||rS(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},HI.prototype.readFloatLE=function(e,t){return t||rS(e,4,this.length),NI(this,e,!0,23,4)},HI.prototype.readFloatBE=function(e,t){return t||rS(e,4,this.length),NI(this,e,!1,23,4)},HI.prototype.readDoubleLE=function(e,t){return t||rS(e,8,this.length),NI(this,e,!0,52,8)},HI.prototype.readDoubleBE=function(e,t){return t||rS(e,8,this.length),NI(this,e,!1,52,8)},HI.prototype.writeUIntLE=function(e,t,i,n){(e=+e,t|=0,i|=0,n)||sS(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},HI.prototype.writeUIntBE=function(e,t,i,n){(e=+e,t|=0,i|=0,n)||sS(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},HI.prototype.writeUInt8=function(e,t,i){return e=+e,t|=0,i||sS(this,e,t,1,255,0),HI.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},HI.prototype.writeUInt16LE=function(e,t,i){return e=+e,t|=0,i||sS(this,e,t,2,65535,0),HI.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):dS(this,e,t,!0),t+2},HI.prototype.writeUInt16BE=function(e,t,i){return e=+e,t|=0,i||sS(this,e,t,2,65535,0),HI.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):dS(this,e,t,!1),t+2},HI.prototype.writeUInt32LE=function(e,t,i){return e=+e,t|=0,i||sS(this,e,t,4,4294967295,0),HI.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):uS(this,e,t,!0),t+4},HI.prototype.writeUInt32BE=function(e,t,i){return e=+e,t|=0,i||sS(this,e,t,4,4294967295,0),HI.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):uS(this,e,t,!1),t+4},HI.prototype.writeIntLE=function(e,t,i,n){if(e=+e,t|=0,!n){var l=Math.pow(2,8*i-1);sS(this,e,t,i,l-1,-l)}var o=0,a=1,c=0;for(this[t]=255&e;++o<i&&(a*=256);)e<0&&0===c&&0!==this[t+o-1]&&(c=1),this[t+o]=(e/a>>0)-c&255;return t+i},HI.prototype.writeIntBE=function(e,t,i,n){if(e=+e,t|=0,!n){var l=Math.pow(2,8*i-1);sS(this,e,t,i,l-1,-l)}var o=i-1,a=1,c=0;for(this[t+o]=255&e;--o>=0&&(a*=256);)e<0&&0===c&&0!==this[t+o+1]&&(c=1),this[t+o]=(e/a>>0)-c&255;return t+i},HI.prototype.writeInt8=function(e,t,i){return e=+e,t|=0,i||sS(this,e,t,1,127,-128),HI.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},HI.prototype.writeInt16LE=function(e,t,i){return e=+e,t|=0,i||sS(this,e,t,2,32767,-32768),HI.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):dS(this,e,t,!0),t+2},HI.prototype.writeInt16BE=function(e,t,i){return e=+e,t|=0,i||sS(this,e,t,2,32767,-32768),HI.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):dS(this,e,t,!1),t+2},HI.prototype.writeInt32LE=function(e,t,i){return e=+e,t|=0,i||sS(this,e,t,4,2147483647,-2147483648),HI.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):uS(this,e,t,!0),t+4},HI.prototype.writeInt32BE=function(e,t,i){return e=+e,t|=0,i||sS(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),HI.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):uS(this,e,t,!1),t+4},HI.prototype.writeFloatLE=function(e,t,i){return ZS(this,e,t,!0,i)},HI.prototype.writeFloatBE=function(e,t,i){return ZS(this,e,t,!1,i)},HI.prototype.writeDoubleLE=function(e,t,i){return bS(this,e,t,!0,i)},HI.prototype.writeDoubleBE=function(e,t,i){return bS(this,e,t,!1,i)},HI.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||!HI.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},HI.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&&!HI.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 a=BI(e)?e:GS(new HI(e,n).toString()),c=a.length;for(o=0;o<i-t;++o)this[o+t]=a[o%c]}return this};var mS=/[^+\/0-9A-Za-z-_]/g;function pS(e){return e<16?"0"+e.toString(16):e.toString(16)}function GS(e,t){var i;t=t||1/0;for(var n=e.length,l=null,o=[],a=0;a<n;++a){if((i=e.charCodeAt(a))>55295&&i<57344){if(!l){if(i>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(a+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 yS(e){return function(e){var t,i,n,l,o,a;vI||gI();var c=e.length;if(c%4>0)throw new Error("Invalid string. Length must be a multiple of 4");o="="===e[c-2]?2:"="===e[c-1]?1:0,a=new fI(3*c/4-o),n=o>0?c-4:c;var r=0;for(t=0,i=0;t<n;t+=4,i+=3)l=RI[e.charCodeAt(t)]<<18|RI[e.charCodeAt(t+1)]<<12|RI[e.charCodeAt(t+2)]<<6|RI[e.charCodeAt(t+3)],a[r++]=l>>16&255,a[r++]=l>>8&255,a[r++]=255&l;return 2===o?(l=RI[e.charCodeAt(t)]<<2|RI[e.charCodeAt(t+1)]>>4,a[r++]=255&l):1===o&&(l=RI[e.charCodeAt(t)]<<10|RI[e.charCodeAt(t+1)]<<4|RI[e.charCodeAt(t+2)]>>2,a[r++]=l>>8&255,a[r++]=255&l),a}(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(mS,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function XS(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 WS(e){return null!=e&&(!!e._isBuffer||VS(e)||function(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&VS(e.slice(0,0))}(e))}function VS(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}var IS=Object.freeze({__proto__:null,Buffer:HI,INSPECT_MAX_BYTES:50,SlowBuffer:function(e){return+e!=e&&(e=0),HI.alloc(+e)},isBuffer:WS,kMaxLength:LI}),SS=VI;function RS(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)}SS.inherits(RS,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 fS=RS.prototype,vS={};["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){vS[e]={value:e}})),Object.defineProperties(RS,vS),Object.defineProperty(fS,"isAxiosError",{value:!0}),RS.from=function(e,t,i,n,l,o){var a=Object.create(fS);return SS.toFlatObject(e,a,(function(e){return e!==Error.prototype})),RS.call(a,e.message,t,i,n,l),a.cause=e,a.name=e.name,o&&Object.assign(a,o),a};var gS=RS,YS="object"==typeof self?self.FormData:window.FormData,KS=VI,NS=gS,JS=YS;function US(e){return KS.isPlainObject(e)||KS.isArray(e)}function kS(e){return KS.endsWith(e,"[]")?e.slice(0,-2):e}function LS(e,t,i){return e?e.concat(t).map((function(e,t){return e=kS(e),!i&&t?"["+e+"]":e})).join(i?".":""):t}var CS=KS.toFlatObject(KS,{},null,(function(e){return/^is[A-Z]/.test(e)}));var TS=function(e,t,i){if(!KS.isObject(e))throw new TypeError("target must be an object");t=t||new(JS||FormData);var n,l=(i=KS.toFlatObject(i,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(e,t){return!KS.isUndefined(t[e])}))).metaTokens,o=i.visitor||d,a=i.dots,c=i.indexes,r=(i.Blob||"undefined"!=typeof Blob&&Blob)&&((n=t)&&KS.isFunction(n.append)&&"FormData"===n[Symbol.toStringTag]&&n[Symbol.iterator]);if(!KS.isFunction(o))throw new TypeError("visitor must be a function");function s(e){if(null===e)return"";if(KS.isDate(e))return e.toISOString();if(!r&&KS.isBlob(e))throw new NS("Blob is not supported. Use a Buffer instead.");return KS.isArrayBuffer(e)||KS.isTypedArray(e)?r&&"function"==typeof Blob?new Blob([e]):HI.from(e):e}function d(e,i,n){var o=e;if(e&&!n&&"object"==typeof e)if(KS.endsWith(i,"{}"))i=l?i:i.slice(0,-2),e=JSON.stringify(e);else if(KS.isArray(e)&&function(e){return KS.isArray(e)&&!e.some(US)}(e)||KS.isFileList(e)||KS.endsWith(i,"[]")&&(o=KS.toArray(e)))return i=kS(i),o.forEach((function(e,n){!KS.isUndefined(e)&&null!==e&&t.append(!0===c?LS([i],n,a):null===c?i:i+"[]",s(e))})),!1;return!!US(e)||(t.append(LS(n,i,a),s(e)),!1)}var u=[],h=Object.assign(CS,{defaultVisitor:d,convertValue:s,isVisitable:US});if(!KS.isObject(e))throw new TypeError("data must be an object");return function e(i,n){if(!KS.isUndefined(i)){if(-1!==u.indexOf(i))throw Error("Circular reference detected in "+n.join("."));u.push(i),KS.forEach(i,(function(i,l){!0===(!(KS.isUndefined(i)||null===i)&&o.call(t,i,KS.isString(l)?l.trim():l,n,h))&&e(i,n?n.concat(l):[l])})),u.pop()}}(e),t},HS=TS;function xS(e){var t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'\(\)~]|%20|%00/g,(function(e){return t[e]}))}function wS(e,t){this._pairs=[],e&&HS(e,this,t)}var FS=wS.prototype;FS.append=function(e,t){this._pairs.push([e,t])},FS.toString=function(e){var t=e?function(t){return e.call(this,t,xS)}:xS;return this._pairs.map((function(e){return t(e[0])+"="+t(e[1])}),"").join("&")};var zS=wS,PS=VI,BS=zS;function jS(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var QS=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||jS,a=i&&i.serialize;return(l=a?a(t,i):PS.isURLSearchParams(t)?t.toString():new BS(t,i).toString(o))&&(e+=(-1===e.indexOf("?")?"?":"&")+l),e},MS=VI;function ES(){this.handlers=[]}ES.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},ES.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},ES.prototype.clear=function(){this.handlers&&(this.handlers=[])},ES.prototype.forEach=function(e){MS.forEach(this.handlers,(function(t){null!==t&&e(t)}))};var DS=ES;function OS(){throw new Error("setTimeout has not been defined")}function AS(){throw new Error("clearTimeout has not been defined")}var _S=OS,qS=AS;function $S(e){if(_S===setTimeout)return setTimeout(e,0);if((_S===OS||!_S)&&setTimeout)return _S=setTimeout,setTimeout(e,0);try{return _S(e,0)}catch(t){try{return _S.call(null,e,0)}catch(t){return _S.call(this,e,0)}}}"function"==typeof II.setTimeout&&(_S=setTimeout),"function"==typeof II.clearTimeout&&(qS=clearTimeout);var eR,tR=[],iR=!1,nR=-1;function lR(){iR&&eR&&(iR=!1,eR.length?tR=eR.concat(tR):nR=-1,tR.length&&oR())}function oR(){if(!iR){var e=$S(lR);iR=!0;for(var t=tR.length;t;){for(eR=tR,tR=[];++nR<t;)eR&&eR[nR].run();nR=-1,t=tR.length}eR=null,iR=!1,function(e){if(qS===clearTimeout)return clearTimeout(e);if((qS===AS||!qS)&&clearTimeout)return qS=clearTimeout,clearTimeout(e);try{qS(e)}catch(t){try{return qS.call(null,e)}catch(t){return qS.call(this,e)}}}(e)}}function aR(e,t){this.fun=e,this.array=t}aR.prototype.run=function(){this.fun.apply(null,this.array)};function cR(){}var rR=cR,sR=cR,dR=cR,uR=cR,hR=cR,ZR=cR,bR=cR;var mR=II.performance||{},pR=mR.now||mR.mozNow||mR.msNow||mR.oNow||mR.webkitNow||function(){return(new Date).getTime()};var GR=new Date;var yR={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];tR.push(new aR(e,t)),1!==tR.length||iR||$S(oR)},title:"browser",browser:!0,env:{},argv:[],version:"",versions:{},on:rR,addListener:sR,once:dR,off:uR,removeListener:hR,removeAllListeners:ZR,emit:bR,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*pR.call(mR),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-GR)/1e3}},XR=yR,WR=VI,VR=function(e,t){WR.forEach(e,(function(i,n){n!==t&&n.toUpperCase()===t.toUpperCase()&&(e[t]=i,delete e[n])}))},IR={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},SR={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:zS,FormData:FormData,Blob:Blob},protocols:["http","https","file","blob","url","data"]},RR=VI,fR=TS,vR=SR,gR=VI;var YR=function(e){function t(e,i,n,l){var o=e[l++];if("__proto__"===o)return!0;var a=Number.isFinite(+o),c=l>=e.length;return o=!o&&gR.isArray(n)?n.length:o,c?(gR.hasOwnProperty(n,o)?n[o]=[n[o],i]:n[o]=i,!a):(n[o]&&gR.isObject(n[o])||(n[o]=[]),t(e,i,n[o],l)&&gR.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])),!a)}if(gR.isFormData(e)&&gR.isFunction(e.entries)){var i={};return gR.forEachEntry(e,(function(e,n){t(function(e){return gR.matchAll(/\w+|\[(\w*)]/g,e).map((function(e){return"[]"===e[0]?"":e[1]||e[0]}))}(e),n,i,0)})),i}return null},KR=gS,NR=VI,JR=NR.isStandardBrowserEnv()?{write:function(e,t,i,n,l,o){var a=[];a.push(e+"="+encodeURIComponent(t)),NR.isNumber(i)&&a.push("expires="+new Date(i).toGMTString()),NR.isString(n)&&a.push("path="+n),NR.isString(l)&&a.push("domain="+l),!0===o&&a.push("secure"),document.cookie=a.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(){}},UR=function(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)},kR=function(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e},LR=function(e,t,i){var n=!UR(t);return e&&(n||!1===i)?kR(e,t):t},CR=VI,TR=["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"],HR=VI,xR=HR.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=HR.isString(t)?n(t):t;return i.protocol===e.protocol&&i.host===e.host}}():function(){return!0},wR=gS;function FR(e,t,i){wR.call(this,null==e?"canceled":e,wR.ERR_CANCELED,t,i),this.name="CanceledError"}VI.inherits(FR,wR,{__CANCEL__:!0});var zR=FR,PR=VI,BR=function(e,t,i){var n=i.config.validateStatus;i.status&&n&&!n(i.status)?t(new KR("Request failed with status code "+i.status,[KR.ERR_BAD_REQUEST,KR.ERR_BAD_RESPONSE][Math.floor(i.status/100)-4],i.config,i.request,i)):e(i)},jR=JR,QR=QS,MR=LR,ER=function(e){var t,i,n,l={};return e?(CR.forEach(e.split("\n"),(function(e){if(n=e.indexOf(":"),t=CR.trim(e.slice(0,n)).toLowerCase(),i=CR.trim(e.slice(n+1)),t){if(l[t]&&TR.indexOf(t)>=0)return;l[t]="set-cookie"===t?(l[t]?l[t]:[]).concat([i]):l[t]?l[t]+", "+i:i}})),l):l},DR=xR,OR=IR,AR=gS,_R=zR,qR=function(e){var t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""},$R=SR,ef=function(e){return new Promise((function(t,i){var n,l=e.data,o=e.headers,a=e.responseType,c=e.withXSRFToken;function r(){e.cancelToken&&e.cancelToken.unsubscribe(n),e.signal&&e.signal.removeEventListener("abort",n)}PR.isFormData(l)&&PR.isStandardBrowserEnv()&&delete o["Content-Type"];var s=new XMLHttpRequest;if(e.auth){var d=e.auth.username||"",u=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";o.Authorization="Basic "+btoa(d+":"+u)}var h=MR(e.baseURL,e.url,e.allowAbsoluteUrls);function Z(){if(s){var n="getAllResponseHeaders"in s?ER(s.getAllResponseHeaders()):null,l={data:a&&"text"!==a&&"json"!==a?s.response:s.responseText,status:s.status,statusText:s.statusText,headers:n,config:e,request:s};BR((function(e){t(e),r()}),(function(e){i(e),r()}),l),s=null}}if(s.open(e.method.toUpperCase(),QR(h,e.params,e.paramsSerializer),!0),s.timeout=e.timeout,"onloadend"in s?s.onloadend=Z:s.onreadystatechange=function(){s&&4===s.readyState&&(0!==s.status||s.responseURL&&0===s.responseURL.indexOf("file:"))&&setTimeout(Z)},s.onabort=function(){s&&(i(new AR("Request aborted",AR.ECONNABORTED,e,s)),s=null)},s.onerror=function(){i(new AR("Network Error",AR.ERR_NETWORK,e,s)),s=null},s.ontimeout=function(){var t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded",n=e.transitional||OR;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),i(new AR(t,n.clarifyTimeoutError?AR.ETIMEDOUT:AR.ECONNABORTED,e,s)),s=null},PR.isStandardBrowserEnv()&&(c&&PR.isFunction(c)&&(c=c(e)),c||!1!==c&&DR(h))){var b=e.xsrfHeaderName&&e.xsrfCookieName&&jR.read(e.xsrfCookieName);b&&(o[e.xsrfHeaderName]=b)}"setRequestHeader"in s&&PR.forEach(o,(function(e,t){void 0===l&&"content-type"===t.toLowerCase()?delete o[t]:s.setRequestHeader(t,e)})),PR.isUndefined(e.withCredentials)||(s.withCredentials=!!e.withCredentials),a&&"json"!==a&&(s.responseType=e.responseType),"function"==typeof e.onDownloadProgress&&s.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&s.upload&&s.upload.addEventListener("progress",e.onUploadProgress),(e.cancelToken||e.signal)&&(n=function(t){s&&(i(!t||t.type?new _R(null,e,s):t),s.abort(),s=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=qR(h);m&&-1===$R.protocols.indexOf(m)?i(new AR("Unsupported protocol "+m+":",AR.ERR_BAD_REQUEST,e)):s.send(l)}))},tf=VI,nf=VR,lf=gS,of=TS,af=function(e,t){return fR(e,new vR.classes.URLSearchParams,Object.assign({visitor:function(e,t,i,n){return vR.isNode&&RR.isBuffer(e)?(this.append(t,e.toString("base64")),!1):n.defaultVisitor.apply(this,arguments)}},t))},cf=SR,rf=YR,sf={"Content-Type":"application/x-www-form-urlencoded"};function df(e,t){!tf.isUndefined(e)&&tf.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}var uf,hf={transitional:IR,adapter:(("undefined"!=typeof XMLHttpRequest||void 0!==XR&&"[object process]"===Object.prototype.toString.call(XR))&&(uf=ef),uf),transformRequest:[function(e,t){nf(t,"Accept"),nf(t,"Content-Type");var i,n=t&&t["Content-Type"]||"",l=n.indexOf("application/json")>-1,o=tf.isObject(e);if(o&&tf.isHTMLForm(e)&&(e=new FormData(e)),tf.isFormData(e))return l?JSON.stringify(rf(e)):e;if(tf.isArrayBuffer(e)||tf.isBuffer(e)||tf.isStream(e)||tf.isFile(e)||tf.isBlob(e))return e;if(tf.isArrayBufferView(e))return e.buffer;if(tf.isURLSearchParams(e))return df(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString();if(o){if(-1!==n.indexOf("application/x-www-form-urlencoded"))return af(e,this.formSerializer).toString();if((i=tf.isFileList(e))||n.indexOf("multipart/form-data")>-1){var a=this.env&&this.env.FormData;return of(i?{"files[]":e}:e,a&&new a,this.formSerializer)}}return o||l?(df(t,"application/json"),function(e,t,i){if(tf.isString(e))try{return(t||JSON.parse)(e),tf.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(i||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){var t=this.transitional||hf.transitional,i=t&&t.forcedJSONParsing,n="json"===this.responseType;if(e&&tf.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 lf.from(e,lf.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:cf.classes.FormData,Blob:cf.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};tf.forEach(["delete","get","head"],(function(e){hf.headers[e]={}})),tf.forEach(["post","put","patch"],(function(e){hf.headers[e]=tf.merge(sf)}));var Zf=hf,bf=VI,mf=Zf,pf=function(e){return!(!e||!e.__CANCEL__)},Gf=VI,yf=function(e,t,i,n){var l=this||mf;return bf.forEach(n,(function(n){e=n.call(l,e,t,i)})),e},Xf=pf,Wf=Zf,Vf=zR,If=VR;function Sf(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new Vf}var Rf=VI,ff=function(e,t){t=t||{};var i={};function n(e,t){return Rf.isPlainObject(e)&&Rf.isPlainObject(t)?Rf.merge(e,t):Rf.isEmptyObject(t)?Rf.merge({},e):Rf.isPlainObject(t)?Rf.merge({},t):Rf.isArray(t)?t.slice():t}function l(i){return Rf.isUndefined(t[i])?Rf.isUndefined(e[i])?void 0:n(void 0,e[i]):n(e[i],t[i])}function o(e){if(!Rf.isUndefined(t[e]))return n(void 0,t[e])}function a(i){return Rf.isUndefined(t[i])?Rf.isUndefined(e[i])?void 0:n(void 0,e[i]):n(void 0,t[i])}function c(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:a,transformRequest:a,transformResponse:a,paramsSerializer:a,timeout:a,timeoutMessage:a,withCredentials:a,withXSRFToken:a,adapter:a,responseType:a,xsrfCookieName:a,xsrfHeaderName:a,onUploadProgress:a,onDownloadProgress:a,decompress:a,maxContentLength:a,maxBodyLength:a,beforeRedirect:a,transport:a,httpAgent:a,httpsAgent:a,cancelToken:a,socketPath:a,responseEncoding:a,validateStatus:c};return Rf.forEach(Object.keys(e).concat(Object.keys(t)),(function(e){var t=r[e]||l,n=t(e);Rf.isUndefined(n)&&t!==c||(i[e]=n)})),i},vf="0.30.0",gf=vf,Yf=gS,Kf={};["object","boolean","number","function","string","symbol"].forEach((function(e,t){Kf[e]=function(i){return typeof i===e||"a"+(t<1?"n ":" ")+e}}));var Nf={};Kf.transitional=function(e,t,i){function n(e,t){return"[Axios v"+gf+"] Transitional option '"+e+"'"+t+(i?". "+i:"")}return function(i,l,o){if(!1===e)throw new Yf(n(l," has been removed"+(t?" in "+t:"")),Yf.ERR_DEPRECATED);return t&&!Nf[l]&&(Nf[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 Jf={assertOptions:function(e,t,i){if("object"!=typeof e)throw new Yf("options must be an object",Yf.ERR_BAD_OPTION_VALUE);for(var n=Object.keys(e),l=n.length;l-- >0;){var o=n[l],a=t[o];if(a){var c=e[o],r=void 0===c||a(c,o,e);if(!0!==r)throw new Yf("option "+o+" must be "+r,Yf.ERR_BAD_OPTION_VALUE)}else if(!0!==i)throw new Yf("Unknown option "+o,Yf.ERR_BAD_OPTION)}},validators:Kf},Uf=VI,kf=QS,Lf=DS,Cf=function(e){return Sf(e),e.headers=e.headers||{},e.data=yf.call(e,e.data,e.headers,null,e.transformRequest),If(e.headers,"Accept"),If(e.headers,"Content-Type"),e.headers=Gf.merge(e.headers.common||{},e.headers[e.method]||{},e.headers),Gf.forEach(["delete","get","head","post","put","patch","common"],(function(t){delete e.headers[t]})),(e.adapter||Wf.adapter)(e).then((function(t){return Sf(e),t.data=yf.call(e,t.data,t.headers,t.status,e.transformResponse),t}),(function(t){return Xf(t)||(Sf(e),t&&t.response&&(t.response.data=yf.call(e,t.response.data,t.response.headers,t.response.status,e.transformResponse))),Promise.reject(t)}))},Tf=ff,Hf=LR,xf=Jf,wf=xf.validators;function Ff(e){this.defaults=e,this.interceptors={request:new Lf,response:new Lf}}Ff.prototype.request=function(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},(t=Tf(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&&xf.assertOptions(i,{silentJSONParsing:wf.transitional(wf.boolean),forcedJSONParsing:wf.transitional(wf.boolean),clarifyTimeoutError:wf.transitional(wf.boolean)},!1);var n=t.paramsSerializer;null!=n&&(Uf.isFunction(n)?t.paramsSerializer={serialize:n}:xf.assertOptions(n,{encode:wf.function,serialize:wf.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 a,c=[];if(this.interceptors.response.forEach((function(e){c.push(e.fulfilled,e.rejected)})),!o){var r=[Cf,void 0];for(Array.prototype.unshift.apply(r,l),r=r.concat(c),a=Promise.resolve(t);r.length;)a=a.then(r.shift(),r.shift());return a}for(var s=t;l.length;){var d=l.shift(),u=l.shift();try{s=d(s)}catch(e){u(e);break}}try{a=Cf(s)}catch(e){return Promise.reject(e)}for(;c.length;)a=a.then(c.shift(),c.shift());return a},Ff.prototype.getUri=function(e){e=Tf(this.defaults,e);var t=Hf(e.baseURL,e.url,e.allowAbsoluteUrls);return kf(t,e.params,e.paramsSerializer)},Uf.forEach(["delete","get","head","options"],(function(e){Ff.prototype[e]=function(t,i){return this.request(Tf(i||{},{method:e,url:t,data:(i||{}).data}))}})),Uf.forEach(["post","put","patch"],(function(e){function t(t){return function(i,n,l){return this.request(Tf(l||{},{method:e,headers:t?{"Content-Type":"multipart/form-data"}:{},url:i,data:n}))}}Ff.prototype[e]=t(),Ff.prototype[e+"Form"]=t(!0)}));var zf=Ff,Pf=zR;function Bf(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 Pf(e,n,l),t(i.reason))}))}Bf.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},Bf.prototype.subscribe=function(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]},Bf.prototype.unsubscribe=function(e){if(this._listeners){var t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}},Bf.source=function(){var e,t=new Bf((function(t){e=t}));return{token:t,cancel:e}};var jf=Bf,Qf=VI,Mf=VI,Ef=$V,Df=zf,Of=ff,Af=YR;var _f=function e(t){var i=new Df(t),n=Ef(Df.prototype.request,i);return Mf.extend(n,Df.prototype,i),Mf.extend(n,i),n.create=function(i){return e(Of(t,i))},n}(Zf);_f.Axios=Df,_f.CanceledError=zR,_f.CancelToken=jf,_f.isCancel=pf,_f.VERSION=vf,_f.toFormData=TS,_f.AxiosError=gS,_f.Cancel=_f.CanceledError,_f.all=function(e){return Promise.all(e)},_f.spread=function(e){return function(t){return e.apply(null,t)}},_f.isAxiosError=function(e){return Qf.isObject(e)&&!0===e.isAxiosError},_f.formToJSON=function(e){return Af(Mf.isHTMLForm(e)?new FormData(e):e)},qV.exports=_f,qV.exports.default=_f;var qf,$f=qV.exports;let ev=qf=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=$f.create({withCredentials:!0}),this.clientInstance||(this.clientInstance=new qf),this.axiosInstance.interceptors.request.use((e=>kW(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=$f.all,this.axiosInstance.spread=$f.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 kW(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(),qf.isHandlerEnabled&&this.requestStartCallback&&"function"==typeof this.requestStartCallback&&this.requestStartCallback(e),e}))}errorHandler(e){throw qf.isHandlerEnabled&&(this.requestErrorCallback&&"function"==typeof this.requestErrorCallback&&this.requestErrorCallback(e),this.requestFinishCallback&&"function"==typeof this.requestFinishCallback&&this.requestFinishCallback()),e}successHandler(e){return qf.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 kW(this,void 0,void 0,(function*(){qf.isHandlerEnabled=e,this.attachToken=t}))}enableHandler(){qf.isHandlerEnabled=!0}disableHandler(){qf.isHandlerEnabled=!1}disableHandlerWithTimeout(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:qf.DEFAULT_HANDLER_DISABLE_TIMEOUT;qf.isHandlerEnabled=!1,setTimeout((()=>{qf.isHandlerEnabled=!0}),e)}setHttpRequestStartCallback(e){this.requestStartCallback=e}setHttpRequestSuccessCallback(e){this.requestSuccessCallback=e}setHttpRequestErrorCallback(e){this.requestErrorCallback=e}setHttpRequestFinishCallback(e){this.requestFinishCallback=e}};ev.DEFAULT_HANDLER_DISABLE_TIMEOUT=1e3,ev=qf=function(e,t,i,n){var l,o=arguments.length,a=o<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(e,t,i,n);else for(var c=e.length-1;c>=0;c--)(l=e[c])&&(a=(o<3?l(a):o>3?l(t,i,a):l(t,i))||a);return o>3&&a&&Object.defineProperty(t,i,a),a}([e=>{}],ev);class tv{setData(e,t){return kW(this,void 0,void 0,(function*(){localStorage.setItem(e,t)}))}getData(e){var t;return kW(this,void 0,void 0,(function*(){return null!==(t=localStorage.getItem(e))&&void 0!==t?t:"{}"}))}removeData(e){return kW(this,void 0,void 0,(function*(){localStorage.removeItem(e)}))}}class iv{constructor(){this._data=new Map}setData(e,t){return kW(this,void 0,void 0,(function*(){this._data.set(e,t)}))}getData(e){var t,i;return kW(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 kW(this,void 0,void 0,(function*(){this._data.delete(e)}))}}class nv{setData(e,t){return kW(this,void 0,void 0,(function*(){sessionStorage.setItem(e,t)}))}getData(e){var t;return kW(this,void 0,void 0,(function*(){return null!==(t=sessionStorage.getItem(e))&&void 0!==t?t:"{}"}))}removeData(e){return kW(this,void 0,void 0,(function*(){sessionStorage.removeItem(e)}))}}var lv={exports:{}},ov={},av={};Object.defineProperty(av,"__esModule",{value:!0}),av.default=function(e){var t=e.length,i=t%4;if(!i)return e;var n=t,l=4-i,o=t+l,a=HI.alloc(o);for(a.write(e);l--;)a.write("=",n++);return a.toString()},Object.defineProperty(ov,"__esModule",{value:!0});var cv=av;function rv(e,t){return void 0===t&&(t="utf8"),HI.isBuffer(e)?dv(e.toString("base64")):dv(HI.from(e,t).toString("base64"))}function sv(e){return e=e.toString(),cv.default(e).replace(/\-/g,"+").replace(/_/g,"/")}function dv(e){return e.replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}var uv,hv=rv;hv.encode=rv,hv.decode=function(e,t){return void 0===t&&(t="utf8"),HI.from(sv(e),"base64").toString(t)},hv.toBase64=sv,hv.fromBase64=dv,hv.toBuffer=function(e){return HI.from(sv(e),"base64")},ov.default=hv,(uv=lv).exports=ov.default,uv.exports.default=uv.exports;var Zv=lv.exports,bv={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 a,c,r,s,d,u,h,Z,b,m,p,G,y;o>=64;){for(a=i[0],c=i[1],r=i[2],s=i[3],d=i[4],u=i[5],h=i[6],Z=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++)G=((b=e[m-2])>>>17|b<<15)^(b>>>19|b<<13)^b>>>10,y=((b=e[m-15])>>>7|b<<25)^(b>>>18|b<<14)^b>>>3,e[m]=(G+e[m-7]|0)+(y+e[m-16]|0);for(m=0;m<64;m++)G=(((d>>>6|d<<26)^(d>>>11|d<<21)^(d>>>25|d<<7))+(d&u^~d&h)|0)+(Z+(t[m]+e[m]|0)|0)|0,y=((a>>>2|a<<30)^(a>>>13|a<<19)^(a>>>22|a<<10))+(a&c^a&r^c&r)|0,Z=h,h=u,u=d,d=s+G|0,s=r,r=c,c=a,a=G+y|0;i[0]+=a,i[1]+=c,i[2]+=r,i[3]+=s,i[4]+=d,i[5]+=u,i[6]+=h,i[7]+=Z,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,a=t%64<56?64:128;this.buffer[n]=128;for(var c=n+1;c<a-8;c++)this.buffer[c]=0;this.buffer[a-8]=l>>>24&255,this.buffer[a-7]=l>>>16&255,this.buffer[a-6]=l>>>8&255,this.buffer[a-5]=l>>>0&255,this.buffer[a-4]=o>>>24&255,this.buffer[a-3]=o>>>16&255,this.buffer[a-2]=o>>>8&255,this.buffer[a-1]=o>>>0&255,i(this.temp,this.state,this.buffer,0,a),this.finished=!0}for(c=0;c<8;c++)e[4*c+0]=this.state[c]>>>24&255,e[4*c+1]=this.state[c]>>>16&255,e[4*c+2]=this.state[c]>>>8&255,e[4*c+3]=this.state[c]>>>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 a(e,t){var i=new l(e).update(t),n=i.digest();return i.clean(),n}function c(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=a;var r=new Uint8Array(e.digestLength);function s(e,t,i,n){void 0===t&&(t=r),void 0===n&&(n=32);for(var o=new Uint8Array([1]),s=a(t,e),d=new l(s),u=new Uint8Array(d.digestLength),h=u.length,Z=new Uint8Array(n),b=0;b<n;b++)h===u.length&&(c(u,d,i,o),h=0),Z[b]=u[h++];return d.clean(),u.fill(0),o.fill(0),Z}function d(e,t,i,n){for(var o=new l(e),a=o.digestLength,c=new Uint8Array(4),r=new Uint8Array(a),s=new Uint8Array(a),d=new Uint8Array(n),u=0;u*a<n;u++){var h=u+1;c[0]=h>>>24&255,c[1]=h>>>16&255,c[2]=h>>>8&255,c[3]=h>>>0&255,o.reset(),o.update(t),o.update(c),o.finish(s);for(var Z=0;Z<a;Z++)r[Z]=s[Z];for(Z=2;Z<=i;Z++){o.reset(),o.update(s).finish(s);for(var b=0;b<a;b++)r[b]^=s[b]}for(Z=0;Z<a&&u*a+Z<n;Z++)d[u*a+Z]=r[Z]}for(u=0;u<a;u++)r[u]=s[u]=0;for(u=0;u<4;u++)c[u]=0;return o.clean(),d}e.hkdf=s,e.pbkdf2=d}(n);var l=n.default;for(var o in n)l[o]=n[o];e.exports=l}()}(bv);var mv=i(bv.exports),pv=crypto;const Gv=e=>e instanceof CryptoKey,yv=new TextEncoder,Xv=new TextDecoder;const Wv=e=>{let t=e;t instanceof Uint8Array&&(t=Xv.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 Vv 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 Iv extends Vv{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 Sv extends Vv{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 Rv extends Vv{constructor(){super(...arguments),this.code="ERR_JOSE_ALG_NOT_ALLOWED"}static get code(){return"ERR_JOSE_ALG_NOT_ALLOWED"}}class fv extends Vv{constructor(){super(...arguments),this.code="ERR_JOSE_NOT_SUPPORTED"}static get code(){return"ERR_JOSE_NOT_SUPPORTED"}}class vv extends Vv{constructor(){super(...arguments),this.code="ERR_JWS_INVALID"}static get code(){return"ERR_JWS_INVALID"}}class gv extends Vv{constructor(){super(...arguments),this.code="ERR_JWT_INVALID"}static get code(){return"ERR_JWT_INVALID"}}class Yv extends Vv{constructor(){super(...arguments),this.code="ERR_JWKS_INVALID"}static get code(){return"ERR_JWKS_INVALID"}}class Kv extends Vv{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 Nv extends Vv{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 Jv extends Vv{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 Uv(){return"function"==typeof WebSocketPair}function kv(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 Lv(e,t){return e.name===t}function Cv(e){return parseInt(e.name.slice(4),10)}function Tv(e){switch(e){case"ES256":return"P-256";case"ES384":return"P-384";case"ES512":return"P-521";default:throw new Error("unreachable")}}function Hv(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 xv=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},wv=e=>Gv(e);const Fv=["CryptoKey"];function zv(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 Pv=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 fv("".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 fv('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 fv('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 fv('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case Uv()&&"OKP":if("EdDSA"!==e.alg)throw new fv('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');if("Ed25519"!==e.crv)throw new fv('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 fv('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 pv.subtle.importKey("raw",Wv(e.k),...o);const a={...e};return delete a.alg,pv.subtle.importKey("jwk",a,...o)};const Bv=(e,t,i)=>{e.startsWith("HS")||"dir"===e||e.startsWith("PBES2")||/^A\d{3}(?:GCM)?KW$/.test(e)?(e=>{if(!(e instanceof Uint8Array)){if(!wv(e))throw new TypeError(xv(e,...Fv,"Uint8Array"));if("secret"!==e.type)throw new TypeError("".concat(Fv.join(" or "),' instances for symmetric algorithms must be of type "secret"'))}})(t):((e,t)=>{if(!wv(e))throw new TypeError(xv(e,...Fv));if("secret"===e.type)throw new TypeError("".concat(Fv.join(" or "),' instances for asymmetric algorithms must not be of type "secret"'));if("sign"===t&&"public"===e.type)throw new TypeError("".concat(Fv.join(" or "),' instances for asymmetric algorithm signing must be of type "private"'));if("decrypt"===t&&"public"===e.type)throw new TypeError("".concat(Fv.join(" or "),' instances for asymmetric algorithm decryption must be of type "private"'));if(e.algorithm&&"verify"===t&&"private"===e.type)throw new TypeError("".concat(Fv.join(" or "),' instances for asymmetric algorithm verifying must be of type "public"'));if(e.algorithm&&"encrypt"===t&&"private"===e.type)throw new TypeError("".concat(Fv.join(" or "),' instances for asymmetric algorithm encryption must be of type "public"'))})(t,i)};function jv(e,t,i){if(Gv(t))return function(e,t){switch(t){case"HS256":case"HS384":case"HS512":{if(!Lv(e.algorithm,"HMAC"))throw kv("HMAC");const i=parseInt(t.slice(2),10);if(Cv(e.algorithm.hash)!==i)throw kv("SHA-".concat(i),"algorithm.hash");break}case"RS256":case"RS384":case"RS512":{if(!Lv(e.algorithm,"RSASSA-PKCS1-v1_5"))throw kv("RSASSA-PKCS1-v1_5");const i=parseInt(t.slice(2),10);if(Cv(e.algorithm.hash)!==i)throw kv("SHA-".concat(i),"algorithm.hash");break}case"PS256":case"PS384":case"PS512":{if(!Lv(e.algorithm,"RSA-PSS"))throw kv("RSA-PSS");const i=parseInt(t.slice(2),10);if(Cv(e.algorithm.hash)!==i)throw kv("SHA-".concat(i),"algorithm.hash");break}case Uv()&&"EdDSA":if(!Lv(e.algorithm,"NODE-ED25519"))throw kv("NODE-ED25519");break;case"ES256":case"ES384":case"ES512":{if(!Lv(e.algorithm,"ECDSA"))throw kv("ECDSA");const i=Tv(t);if(e.algorithm.namedCurve!==i)throw kv(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];Hv(e,n)}(t,e,i),t;if(t instanceof Uint8Array){if(!e.startsWith("HS"))throw new TypeError(xv(t,...Fv));return pv.subtle.importKey("raw",t,{hash:"SHA-".concat(e.slice(-3)),name:"HMAC"},!1,[i])}throw new TypeError(xv(t,...Fv,"Uint8Array"))}const Qv=async(e,t,i,n)=>{const l=await jv(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 Uv()&&"EdDSA":const{namedCurve:n}=t;return{name:n,namedCurve:n};default:throw new fv("alg ".concat(e," is not supported either by JOSE or your javascript runtime"))}}(e,l.algorithm);try{return await pv.subtle.verify(o,l,i,n)}catch(e){return!1}};async function Mv(e,t,i){var n;if(!zv(e))throw new vv("Flattened JWS must be an object");if(void 0===e.protected&&void 0===e.header)throw new vv('Flattened JWS must have either of the "protected" or "header" members');if(void 0!==e.protected&&"string"!=typeof e.protected)throw new vv("JWS Protected Header incorrect type");if(void 0===e.payload)throw new vv("JWS Payload missing");if("string"!=typeof e.signature)throw new vv("JWS Signature missing or incorrect type");if(void 0!==e.header&&!zv(e.header))throw new vv("JWS Unprotected Header incorrect type");let l={};if(e.protected){const t=Wv(e.protected);try{l=JSON.parse(Xv.decode(t))}catch(e){throw new vv("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 vv("JWS Protected and JWS Unprotected Header Parameter names must be disjoint");const o={...l,...e.header},a=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 fv('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)}(vv,new Map([["b64",!0]]),null==i?void 0:i.crit,l,o);let c=!0;if(a.has("b64")&&(c=l.b64,"boolean"!=typeof c))throw new vv('The "b64" (base64url-encode payload) Header Parameter must be a boolean');const{alg:r}=o;if("string"!=typeof r||!r)throw new vv('JWS "alg" (Algorithm) Header Parameter missing or invalid');const s=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(s&&!s.has(r))throw new Rv('"alg" (Algorithm) Header Parameter not allowed');if(c){if("string"!=typeof e.payload)throw new vv("JWS Payload must be a string")}else if("string"!=typeof e.payload&&!(e.payload instanceof Uint8Array))throw new vv("JWS Payload must be a string or an Uint8Array instance");let d=!1;"function"==typeof t&&(t=await t(l,e),d=!0),Bv(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}(yv.encode(null!==(n=e.protected)&&void 0!==n?n:""),yv.encode("."),"string"==typeof e.payload?yv.encode(e.payload):e.payload),h=Wv(e.signature);if(!await Qv(r,t,h,u))throw new Jv;let Z;Z=c?Wv(e.payload):"string"==typeof e.payload?yv.encode(e.payload):e.payload;const b={payload:Z};return void 0!==e.protected&&(b.protectedHeader=l),void 0!==e.header&&(b.unprotectedHeader=e.header),d?{...b,key:t}:b}var Ev=e=>Math.floor(e.getTime()/1e3);const Dv=86400,Ov=/^(\d+|\d+\.\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)$/i;var Av=e=>{const t=Ov.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(i*Dv);case"week":case"weeks":case"w":return Math.round(604800*i);default:return Math.round(31557600*i)}};const _v=e=>e.toLowerCase().replace(/^application\//,""),qv=(e,t)=>"string"==typeof e?t.includes(e):!!Array.isArray(e)&&t.some(Set.prototype.has.bind(new Set(e)));async function $v(e,t,i){var n;const l=await async function(e,t,i){if(e instanceof Uint8Array&&(e=Xv.decode(e)),"string"!=typeof e)throw new vv("Compact JWS must be a string or Uint8Array");const{0:n,1:l,2:o,length:a}=e.split(".");if(3!==a)throw new vv("Invalid Compact JWS");const c=await Mv({payload:l,protected:n,signature:o},t,i),r={payload:c.payload,protectedHeader:c.protectedHeader};return"function"==typeof t?{...r,key:c.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 gv("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||_v(e.typ)!==_v(n)))throw new Iv('unexpected "typ" JWT header value',"typ","check_failed");let l;try{l=JSON.parse(Xv.decode(t))}catch(e){}if(!zv(l))throw new gv("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 Iv('unexpected "iss" claim value',"iss","check_failed");const{subject:a}=i;if(a&&l.sub!==a)throw new Iv('unexpected "sub" claim value',"sub","check_failed");const{audience:c}=i;if(c&&!qv(l.aud,"string"==typeof c?[c]:c))throw new Iv('unexpected "aud" claim value',"aud","check_failed");let r;switch(typeof i.clockTolerance){case"string":r=Av(i.clockTolerance);break;case"number":r=i.clockTolerance;break;case"undefined":r=0;break;default:throw new TypeError("Invalid clockTolerance option type")}const{currentDate:s}=i,d=Ev(s||new Date);if((void 0!==l.iat||i.maxTokenAge)&&"number"!=typeof l.iat)throw new Iv('"iat" claim must be a number',"iat","invalid");if(void 0!==l.nbf){if("number"!=typeof l.nbf)throw new Iv('"nbf" claim must be a number',"nbf","invalid");if(l.nbf>d+r)throw new Iv('"nbf" claim timestamp check failed',"nbf","check_failed")}if(void 0!==l.exp){if("number"!=typeof l.exp)throw new Iv('"exp" claim must be a number',"exp","invalid");if(l.exp<=d-r)throw new Sv('"exp" claim timestamp check failed',"exp","check_failed")}if(i.maxTokenAge){const e=d-l.iat;if(e-r>("number"==typeof i.maxTokenAge?i.maxTokenAge:Av(i.maxTokenAge)))throw new Sv('"iat" claim timestamp check failed (too far in the past)',"iat","check_failed");if(e<0-r)throw new Iv('"iat" claim timestamp check failed (it should be in the past)',"iat","check_failed")}return l}(l.protectedHeader,l.payload,i),a={payload:o,protectedHeader:l.protectedHeader};return"function"==typeof t?{...a,key:l.key}:a}function eg(e){return zv(e)}class tg{constructor(e){if(this._cached=new WeakMap,!function(e){return e&&"object"==typeof e&&Array.isArray(e.keys)&&e.keys.every(eg)}(e))throw new Yv("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 fv('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:a,length:c}=o;if(0===c)throw new Kv;if(1!==c)throw new Nv;const r=this._cached.get(a)||this._cached.set(a,{}).get(a);if(void 0===r[i]){const e=await async function(e,t,i){if(!zv(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?Pv({...e,alg:t,ext:!1}):Wv(e.k);case"RSA":if(void 0!==e.oth)throw new fv('RSA JWK "oth" (Other Primes Info) Parameter value is not supported');case"EC":case"OKP":return Pv({...e,alg:t});default:throw new fv('Unsupported "kty" (Key Type) Parameter value')}}({...a,ext:!0},i);if(e instanceof Uint8Array||"public"!==e.type)throw new Yv("JSON Web Key Set members must be public keys");r[i]=e}return r[i]}}var ig={exports:{}},ng={exports:{}},lg=n(IS);!function(e,t){var i=lg,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)}}(ng,ng.exports);var og=65536,ag=4294967295;var cg=ng.exports.Buffer,rg=t.crypto||t.msCrypto;rg&&rg.getRandomValues?ig.exports=function(e,t){if(e>ag)throw new RangeError("requested too many random bytes");var i=cg.allocUnsafe(e);if(e>0)if(e>og)for(var n=0;n<e;n+=og)rg.getRandomValues(i.slice(n,n+og));else rg.getRandomValues(i);if("function"==typeof t)return XR.nextTick((function(){t(null,i)}));return i}:ig.exports=function(){throw new Error("Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11")};var sg=ig.exports;class dg{base64URLEncode(e){return Zv.encode(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}base64URLDecode(e){return Zv.decode(e).toString()}hashSha256(e){return HI.from(mv((new TextEncoder).encode(e)))}generateRandomBytes(e){return sg(e)}verifyJwt(e,t,i,n,l,o,a,c){const r={algorithms:i,audience:n,clockTolerance:a,subject:o};return(null==c||c)&&(r.issuer=l),$v(e,(s={keys:[t]},tg.prototype.getKey.bind(new tg(s))),r).then((()=>Promise.resolve(!0))).catch((e=>{var t;return Promise.reject(new BW("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 s}}const ug=(t,i,n)=>kW(void 0,void 0,void 0,(function*(){var l;const o=(t=>{switch(t){case e.Storage.LocalStorage:return new tv;case e.Storage.SessionStorage:return new nv;case e.Storage.BrowserMemory:return new iv;default:return new nv}})(i.storage),a=new dg,c=new AW;yield c.initialize(i,o,a,t);const r=new OV(c),s=c.getDataLayer(),d=yield AV((()=>kW(void 0,void 0,void 0,(function*(){return c.getSignOutURL()}))),null!==(l=i.storage)&&void 0!==l?l:e.Storage.SessionStorage,(e=>s.setSessionDataParameter(xW,null!=e?e:""))),u=n(c,r);let h=!1;const Z=ev.getInstance();let b,m,p=!0;(null==Z?void 0:Z.init)&&(yield Z.init(!0,(e=>kW(void 0,void 0,void 0,(function*(){yield u.attachTokenToRequestConfig(e)})))));const G=()=>kW(void 0,void 0,void 0,(function*(){const e=yield c.getOIDCServiceEndpoints(),t=yield s.getConfigData();u.initializeSessionManger(t,e,(()=>kW(void 0,void 0,void 0,(function*(){return(yield c.getBasicUserInfo()).sessionState}))),(e=>kW(void 0,void 0,void 0,(function*(){return c.getAuthorizationURL(e)}))),d)})),y=()=>kW(void 0,void 0,void 0,(function*(){return yield d.receivePromptNoneResponse((e=>kW(void 0,void 0,void 0,(function*(){yield s.setSessionDataParameter(xW,null!=e?e:"")}))))})),X=e=>{e.preventSignOutURLUpdate&&(h=!0)},W=(e,t,i,n)=>kW(void 0,void 0,void 0,(function*(){return yield u.requestAccessToken(e,t,G,void 0,i,n)})),V=function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return kW(void 0,void 0,void 0,(function*(){const i=yield s.getConfigData(),n=yield c.getAuthorizationURL(Object.assign({prompt:"none",state:HV},t)),l=new URL(n);l.searchParams.set("response_mode","query");const o=l.toString();if(i.storage===e.Storage.BrowserMemory&&i.enablePKCE){const e=l.searchParams.get(zW);EV.setPKCE(jW.extractPKCEKeyFromStateParam(null!=e?e:""),yield c.getPKCECode(null!=e?e:""))}return o}))};return{disableHttpHandler:()=>(u.disableHttpHandler(Z),p=!1,!0),enableHttpHandler:()=>(u.enableHttpHandler(Z),p=!0,!0),getAccessToken:()=>kW(void 0,void 0,void 0,(function*(){return u.getAccessToken()})),getBasicUserInfo:()=>kW(void 0,void 0,void 0,(function*(){return u.getBasicUserInfo()})),getConfigData:()=>kW(void 0,void 0,void 0,(function*(){return yield s.getConfigData()})),getCryptoHelper:()=>kW(void 0,void 0,void 0,(function*(){return u.getCryptoHelper()})),getDataLayer:()=>kW(void 0,void 0,void 0,(function*(){return u.getDataLayer()})),getDecodedIDToken:()=>kW(void 0,void 0,void 0,(function*(){return u.getDecodedIDToken()})),getHttpClient:()=>Z,getIDToken:()=>kW(void 0,void 0,void 0,(function*(){return u.getIDToken()})),getOIDCServiceEndpoints:()=>kW(void 0,void 0,void 0,(function*(){return u.getOIDCServiceEndpoints()})),httpRequest:e=>kW(void 0,void 0,void 0,(function*(){return yield u.httpRequest(Z,e,p,b,m)})),httpRequestAll:e=>kW(void 0,void 0,void 0,(function*(){return yield u.httpRequestAll(e,Z,p,b,m)})),isAuthenticated:()=>kW(void 0,void 0,void 0,(function*(){return u.isAuthenticated()})),isSessionActive:()=>kW(void 0,void 0,void 0,(function*(){return"true"===(yield s.getSessionStatus())})),refreshAccessToken:()=>kW(void 0,void 0,void 0,(function*(){try{return yield u.refreshAccessToken(X)}catch(e){return Promise.reject(e)}})),requestCustomGrant:e=>kW(void 0,void 0,void 0,(function*(){return yield u.requestCustomGrant(e,X)})),revokeAccessToken:()=>kW(void 0,void 0,void 0,(function*(){const e=yield r.getRefreshTimeoutTimer();return c.revokeAccessToken().then((()=>(d.reset(),r.clearRefreshTokenTimeout(e),Promise.resolve(!0)))).catch((e=>Promise.reject(e)))})),setHttpRequestErrorCallback:e=>{b=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:(t,n,l,o,a)=>kW(void 0,void 0,void 0,(function*(){var r,d,h;const Z=yield u.handleSignIn(y,G,void 0);if(Z)return Z;{let u,Z,m,p={params:{}};if((null==i?void 0:i.responseMode)===e.ResponseMode.formPost&&n?(u=n,Z=null!=l?l:"",m=null!=o?o:""):(u=null!==(r=new URL(window.location.href).searchParams.get(HW))&&void 0!==r?r:"",Z=null!==(d=new URL(window.location.href).searchParams.get(xW))&&void 0!==d?d:"",m=null!==(h=new URL(window.location.href).searchParams.get(zW))&&void 0!==h?h:"",EV.removeAuthorizationCode()),u&&m){b="true",kW(void 0,void 0,void 0,(function*(){yield s.setSessionStatus(b)}));const e=yield s.getTemporaryDataParameter(UV);return e&&"string"==typeof e&&(p=JSON.parse(e)),W(u,Z,m,p)}return c.getAuthorizationURL(t).then((t=>kW(void 0,void 0,void 0,(function*(){if(i.storage===e.Storage.BrowserMemory&&i.enablePKCE){const e=jW.extractPKCEKeyFromStateParam(m);EV.setPKCE(e,yield c.getPKCECode(m))}return a&&s.setTemporaryDataParameter(UV,JSON.stringify(a)),location.href=t,yield EV.waitTillPageRedirect(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""})}))))}var b})),signOut:()=>kW(void 0,void 0,void 0,(function*(){return(yield c.isAuthenticated())&&!h?location.href=yield c.getSignOutURL():location.href=EV.getSignOutURL(i.clientID,t),r.clearRefreshTokenTimeout(),yield s.removeOIDCProviderMetaData(),yield s.removeTemporaryData(),yield s.removeSessionData(),yield s.removeSessionStatus(),yield EV.waitTillPageRedirect(),!0})),trySignInSilently:(e,t)=>kW(void 0,void 0,void 0,(function*(){return yield u.trySignInSilently(V,W,d,e,t)})),updateConfig:e=>kW(void 0,void 0,void 0,(function*(){const t=yield s.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(),G())}))}})),hg=(t,i,n,l)=>kW(void 0,void 0,void 0,(function*(){var o;let a;const c=null!==(o=null==i?void 0:i.requestTimeout)&&void 0!==o?o:6e4;let r=!0,s=!1;const d=(t=>{switch(t){case e.Storage.LocalStorage:return new tv;case e.Storage.SessionStorage:return new nv;case e.Storage.BrowserMemory:return new iv;default:return new nv}})(i.storage),u=new dg,h=new AW;yield h.initialize(i,d,u,t);const Z=new OV(h),b=yield AV((()=>kW(void 0,void 0,void 0,(function*(){const e={type:lV};try{return yield G(e)}catch(e){return EV.getSignOutURL(i.clientID,t)}}))),i.storage,(e=>y(e))),m=l(h,Z),p=new n,G=e=>{const t=new MessageChannel;return p.postMessage(e,[t.port2]),new Promise(((e,i)=>{const n=setTimeout((()=>{i(new BW("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)}}))},y=e=>G({data:e,type:RV}),X=()=>G({type:fV}),W=()=>kW(void 0,void 0,void 0,(function*(){const e=yield v(),t=yield g();m.initializeSessionManger(t,e,(()=>kW(void 0,void 0,void 0,(function*(){return(yield Y()).sessionState}))),(e=>kW(void 0,void 0,void 0,(function*(){return(yield I(e)).authorizationURL}))),b)})),V=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return kW(void 0,void 0,void 0,(function*(){var t;const i=yield g(),n={data:Object.assign({prompt:"none",state:HV},e),type:yV},l=yield G(n),o=jW.extractPKCEKeyFromStateParam(null!==(t=new URL(l.authorizationURL).searchParams.get(zW))&&void 0!==t?t:"");l.pkce&&i.enablePKCE&&EV.setPKCE(o,l.pkce);const a=l.authorizationURL,c=new URL(a);c.searchParams.set("response_mode","query");return c.toString()}))},I=e=>kW(void 0,void 0,void 0,(function*(){const t=yield g();return G({data:e,type:yV}).then((e=>kW(void 0,void 0,void 0,(function*(){var i;if(e.pkce&&t.enablePKCE){const t=jW.extractPKCEKeyFromStateParam(null!==(i=new URL(e.authorizationURL).searchParams.get(zW))&&void 0!==i?i:"");EV.setPKCE(t,e.pkce)}return Promise.resolve(e)}))))})),S=(e,i,n,l)=>kW(void 0,void 0,void 0,(function*(){const o=yield g(),a=jW.extractPKCEKeyFromStateParam(n),c={data:{code:e,pkce:o.enablePKCE?EV.getPKCE(a):void 0,sessionState:i,state:n,tokenRequestConfig:l},type:XV};return o.enablePKCE&&EV.removePKCE(a),G(c).then((e=>G({type:VV}).then((i=>(EV.setSignOutURL(i,o.clientID,t),o.enableOIDCSessionManagement&&W(),X(),Promise.resolve(e)))).catch((e=>Promise.reject(e))))).catch((e=>Promise.reject(e)))})),R=()=>kW(void 0,void 0,void 0,(function*(){return yield b.receivePromptNoneResponse((e=>kW(void 0,void 0,void 0,(function*(){return y(e)}))))})),f=()=>kW(void 0,void 0,void 0,(function*(){if(yield K())return yield X(),i.enableOIDCSessionManagement&&W(),Y()})),v=()=>G({type:hV}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),g=()=>G({type:NV}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),Y=()=>G({type:ZV}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),K=()=>G({type:WV}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e)));return{disableHttpHandler:()=>G({type:GV}).then((()=>(r=!1,Promise.resolve(!0)))).catch((e=>Promise.reject(e))),enableHttpHandler:()=>G({type:pV}).then((()=>(r=!0,Promise.resolve(!0)))).catch((e=>Promise.reject(e))),getBasicUserInfo:Y,getConfigData:g,getCryptoHelper:()=>G({type:mV}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),getDecodedIDPIDToken:()=>G({type:"get-decoded-idp-id-token"}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),getDecodedIDToken:()=>G({type:bV}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),getIDToken:()=>G({type:gV}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),getOIDCServiceEndpoints:v,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 G({data:e,type:oV}).then((e=>Promise.resolve(e))).catch((e=>kW(void 0,void 0,void 0,(function*(){return r&&("function"==typeof a.requestErrorCallback&&(yield a.requestErrorCallback(e)),"function"==typeof a.requestFinishCallback&&a.requestFinishCallback()),Promise.reject(e)}))))},httpRequestAll:e=>G({data:e,type:aV}).then((e=>Promise.resolve(e))).catch((e=>kW(void 0,void 0,void 0,(function*(){return r&&("function"==typeof a.requestErrorCallback&&(yield a.requestErrorCallback(e)),"function"==typeof a.requestFinishCallback&&a.requestFinishCallback()),Promise.reject(e)})))),initialize:()=>{a||(a={requestErrorCallback:()=>Promise.resolve(),requestFinishCallback:()=>null,requestStartCallback:()=>null,requestSuccessCallback:()=>null}),p.onmessage=e=>{let{data:t}=e;switch(t.type){case uV:(null==a?void 0:a.requestFinishCallback)&&(null==a||a.requestFinishCallback());break;case sV:(null==a?void 0:a.requestStartCallback)&&(null==a||a.requestStartCallback());break;case dV:(null==a?void 0:a.requestSuccessCallback)&&(null==a||a.requestSuccessCallback(t.data?JSON.parse(t.data):null))}};return G({data:i,type:nV}).then((()=>Promise.resolve(!0))).catch((e=>Promise.reject(e)))},isAuthenticated:K,refreshAccessToken:()=>G({type:IV}),requestCustomGrant:e=>G({data:e,type:cV}).then((t=>(e.preventSignOutURLUpdate&&(s=!0),Promise.resolve(t)))).catch((e=>Promise.reject(e))),revokeAccessToken:()=>G({type:rV}).then((e=>(b.reset(),Promise.resolve(e)))).catch((e=>Promise.reject(e))),setHttpRequestErrorCallback:e=>{e&&"function"==typeof e&&(a.requestErrorCallback=e)},setHttpRequestFinishCallback:e=>{e&&"function"==typeof e&&(a.requestFinishCallback=e)},setHttpRequestStartCallback:e=>{e&&"function"==typeof e&&(a.requestStartCallback=e)},setHttpRequestSuccessCallback:e=>{e&&"function"==typeof e&&(a.requestSuccessCallback=e)},signIn:(t,n,l,o,a)=>kW(void 0,void 0,void 0,(function*(){var c,r,s;const d=yield m.handleSignIn(R,W,f);if(d)return d;{let d,u,h;return(null==i?void 0:i.responseMode)===e.ResponseMode.formPost&&n?(d=n,u=null!=l?l:"",h=null!=o?o:""):(d=null!==(c=new URL(window.location.href).searchParams.get(HW))&&void 0!==c?c:"",u=null!==(r=new URL(window.location.href).searchParams.get(xW))&&void 0!==r?r:"",h=null!==(s=new URL(window.location.href).searchParams.get(zW))&&void 0!==s?s:"",EV.removeAuthorizationCode()),d&&h?S(d,u,h,a):I(t).then((e=>kW(void 0,void 0,void 0,(function*(){return location.href=e.authorizationURL,yield EV.waitTillPageRedirect(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""})})))).catch((e=>Promise.reject(e)))}})),signOut:()=>new Promise(((e,n)=>{if(!s){return G({type:lV}).then((t=>kW(void 0,void 0,void 0,(function*(){return window.location.href=t,yield EV.waitTillPageRedirect(),e(!0)})))).catch((e=>n(e)))}window.location.href=EV.getSignOutURL(i.clientID,t),EV.waitTillPageRedirect().then((()=>Promise.resolve(!0)))})),trySignInSilently:(e,t)=>kW(void 0,void 0,void 0,(function*(){return yield m.trySignInSilently(V,S,b,e,t)})),updateConfig:e=>kW(void 0,void 0,void 0,(function*(){const t=yield g(),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:vV};yield G(l),n.enableOIDCSessionManagement&&i&&(b.reset(),W())}))}})),Zg={autoLogoutOnTokenRefreshError:!0,checkSessionInterval:3,clientHost:origin,enableOIDCSessionManagement:!1,periodicTokenRefresh:!1,sessionRefreshInterval:300,storage:e.Storage.SessionStorage};class bg{constructor(e){this._authHelper=DV,this._worker=iV,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||DV}instantiateWorker(e){this._worker=e||iV}_isInitialized(){return kW(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 kW(this,void 0,void 0,(function*(){return(yield this._isInitialized())?!(e&&!(yield this.isAuthenticated()))||Promise.reject(new BW("SPA-AUTH_CLIENT-VM-IV02","The user is not authenticated.","The user must be authenticated first.")):Promise.reject(new BW("SPA-AUTH_CLIENT-VM-NF01","The SDK is not initialized.","The SDK must be initialized first."))}))}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 bg(e)),this._instances.get(e)):(this._instances.set(0,new bg(0)),this._instances.get(0))}initialize(t,i,n){var l,o,a,c;return kW(this,void 0,void 0,(function*(){this._storage=null!==(l=t.storage)&&void 0!==l?l:e.Storage.SessionStorage,this._initialized=!1,this._startedInitialize=!0,i&&this.instantiateAuthHelper(i),n&&this.instantiateWorker(n);const r=yield null===(o=this._client)||void 0===o?void 0:o.getConfigData();if(this._storage!==e.Storage.WebWorker){const e=t,i=Object.assign({},Zg),n=Object.assign(Object.assign({},i),e);return this._client&&(!this._client||r&&0!==(null===(a=Object.keys(r))||void 0===a?void 0:a.length))||(this._client=yield ug(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;(null===(t=null==e?void 0:e.data)||void 0===t?void 0:t.type)===SV&&this.signOut()})),Promise.resolve(!0)):Promise.resolve(!0)}if(!this._client||this._client&&(!r||0===(null===(c=Object.keys(r))||void 0===c?void 0:c.length))){const e=t;return this._client=yield hg(this._instanceID,Object.assign(Object.assign({},Zg),e),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)}))}getBasicUserInfo(){var e;return kW(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(e=this._client)||void 0===e?void 0:e.getBasicUserInfo()}))}signIn(e,t,i,n,l){var o;return kW(this,void 0,void 0,(function*(){if(yield this._isInitialized(),EV.canContinueSignIn(Boolean(null==e?void 0:e.callOnlyOnRedirect),t))return null==e||delete e.callOnlyOnRedirect,null===(o=this._client)||void 0===o?void 0:o.signIn(e,t,i,n,l).then((e=>(this._onSignInCallback&&(e.allowedScopes||e.displayName||e.email||e.username)&&this._onSignInCallback(e),e)))}))}trySignInSilently(e,t){var i;return kW(this,void 0,void 0,(function*(){if(yield this._isInitialized(),!EV.wasSignInCalled())return null===(i=this._client)||void 0===i?void 0:i.trySignInSilently(e,t).then((e=>{if(this._onSignInCallback&&e){const t=e;(t.allowedScopes||t.displayName||t.email||t.username)&&this._onSignInCallback(t)}return e}))}))}signOut(){var e,t;return kW(this,void 0,void 0,(function*(){yield this._validateMethod(!1);return null!==(t=yield null===(e=this._client)||void 0===e?void 0:e.signOut())&&void 0!==t&&t}))}httpRequest(e){var t;return kW(this,void 0,void 0,(function*(){return yield this._validateMethod(!1),null===(t=this._client)||void 0===t?void 0:t.httpRequest(e)}))}httpRequestAll(e){var t;return kW(this,void 0,void 0,(function*(){return yield this._validateMethod(!1),null===(t=this._client)||void 0===t?void 0:t.httpRequestAll(e)}))}requestCustomGrant(e){var t,i;return kW(this,void 0,void 0,(function*(){if(e.signInRequired,yield this._validateMethod(),!e.id)return Promise.reject(new BW("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}))}revokeAccessToken(){var e;return kW(this,void 0,void 0,(function*(){yield this._validateMethod();const t=yield null===(e=this._client)||void 0===e?void 0:e.revokeAccessToken();return this._onEndUserSession&&(yield this._onEndUserSession(t)),t}))}getOIDCServiceEndpoints(){var e;return kW(this,void 0,void 0,(function*(){return yield this._isInitialized(),null===(e=this._client)||void 0===e?void 0:e.getOIDCServiceEndpoints()}))}getHttpClient(){if(this._client){if(this._storage!==e.Storage.WebWorker){return this._client.getHttpClient()}throw new BW("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 BW("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.")}getDecodedIDToken(){var e;return kW(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(e=this._client)||void 0===e?void 0:e.getDecodedIDToken()}))}getCryptoHelper(){var e;return kW(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(e=this._client)||void 0===e?void 0:e.getCryptoHelper()}))}getIDToken(){var e;return kW(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(e=this._client)||void 0===e?void 0:e.getIDToken()}))}getAccessToken(){return kW(this,void 0,void 0,(function*(){if(yield this._validateMethod(),this._storage&&[(e.Storage.WebWorker,e.Storage.BrowserMemory)].includes(this._storage))return Promise.reject(new BW("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()}))}getIDPAccessToken(){return kW(this,void 0,void 0,(function*(){if(yield this._validateMethod(),this._storage&&[(e.Storage.WebWorker,e.Storage.BrowserMemory)].includes(this._storage))return Promise.reject(new BW("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()}))}getDataLayer(){return kW(this,void 0,void 0,(function*(){if(yield this._validateMethod(),this._storage&&[(e.Storage.WebWorker,e.Storage.BrowserMemory)].includes(this._storage))return Promise.reject(new BW("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()}))}getConfigData(){var e;return kW(this,void 0,void 0,(function*(){return null===(e=this._client)||void 0===e?void 0:e.getConfigData()}))}refreshAccessToken(){var e;return kW(this,void 0,void 0,(function*(){return yield this._validateMethod(!1),null===(e=this._client)||void 0===e?void 0:e.refreshAccessToken()}))}isAuthenticated(){var e;return kW(this,void 0,void 0,(function*(){return yield this._isInitialized(),null===(e=this._client)||void 0===e?void 0:e.isAuthenticated()}))}isSessionActive(){return kW(this,void 0,void 0,(function*(){if(yield this._isInitialized(),this._storage&&[(e.Storage.WebWorker,e.Storage.BrowserMemory)].includes(this._storage))return Promise.reject(new BW("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 t=this._client;return null==t?void 0:t.isSessionActive()}))}on(t,i,n){var l,o,a,c;return kW(this,void 0,void 0,(function*(){if(yield this._isInitialized(),!i||"function"!=typeof i)throw new BW("SPA-AUTH_CLIENT-ON-IV02","Invalid callback function.","The provided callback function is invalid.");switch(t){case e.Hooks.SignIn:this._onSignInCallback=i;break;case e.Hooks.SignOut:this._onSignOutCallback=i,(yield EV.isSignOutSuccessful())&&this._onSignOutCallback();break;case e.Hooks.RevokeAccessToken:this._onEndUserSession=i;break;case e.Hooks.Initialize:this._onInitialize=i;break;case e.Hooks.HttpRequestError:null===(l=this._client)||void 0===l||l.setHttpRequestErrorCallback(i);break;case e.Hooks.HttpRequestFinish:null===(o=this._client)||void 0===o||o.setHttpRequestFinishCallback(i);break;case e.Hooks.HttpRequestStart:null===(a=this._client)||void 0===a||a.setHttpRequestStartCallback(i);break;case e.Hooks.HttpRequestSuccess:null===(c=this._client)||void 0===c||c.setHttpRequestSuccessCallback(i);break;case e.Hooks.CustomGrant:n&&this._onCustomGrant.set(n,i);break;case e.Hooks.SignOutFailed:{this._onSignOutFailedCallback=i;const e=EV.didSignOutFail();e&&this._onSignOutFailedCallback(e);break}default:throw new BW("SPA-AUTH_CLIENT-ON-IV01","Invalid hook.","The provided hook is invalid.")}}))}enableHttpHandler(){var e;return kW(this,void 0,void 0,(function*(){return yield this._isInitialized(),null===(e=this._client)||void 0===e?void 0:e.enableHttpHandler()}))}disableHttpHandler(){var e;return kW(this,void 0,void 0,(function*(){return yield this._isInitialized(),null===(e=this._client)||void 0===e?void 0:e.disableHttpHandler()}))}updateConfig(t){return kW(this,void 0,void 0,(function*(){if(yield this._isInitialized(),this._storage===e.Storage.WebWorker){const e=this._client;yield e.updateConfig(t)}else{const e=this._client;yield e.updateConfig(t)}}))}}bg._instances=new Map;class mg extends Worker{constructor(){super(...arguments),this.onmessage=()=>null}}return e.ASGARDEO_SESSION_ACTIVE="asgardeo-session-active",e.AUTHORIZATION_CODE=HW,e.AsgardeoAuthClient=AW,e.AsgardeoAuthException=BW,e.AsgardeoSPAClient=bg,e.AuthenticationHelper=DV,e.AuthenticationUtils=jW,e.CLIENT_ID_TAG="{{clientID}}",e.CLIENT_SECRET_TAG="{{clientSecret}}",e.CryptoHelper=MW,e.DataLayer=DW,e.HttpError=$f.AxiosError,e.MainThreadClient=ug,e.OIDC_SCOPE="openid",e.PKCE_CODE_VERIFIER="pkce_code_verifier",e.PKCE_SEPARATOR="#",e.REFRESH_TOKEN_TIMER=CW,e.SCOPE_TAG="{{scope}}",e.SESSION_STATE=xW,e.SIGN_OUT_SUCCESS_PARAM=FW,e.SIGN_OUT_URL=wW,e.SPAHelper=OV,e.SPAUtils=EV,e.STATE=zW,e.SUPPORTED_SIGNATURE_ALGORITHMS=TW,e.TOKEN_REQUEST_CONFIG_KEY=UV,e.TOKEN_TAG="{{token}}",e.USERNAME_TAG="{{username}}",e.WebWorkerClass=mg,e.WebWorkerClient=hg,e.workerReceiver=e=>{const t=self;let i;t.onmessage=t=>{let{data:a,ports:c}=t;return kW(void 0,void 0,void 0,(function*(){var t,r,s,d,u,h;const Z=c[0];if(a.type===nV||i)switch(a.type){case nV:try{const t=Object.assign({},a.data);i=yield((e,t)=>kW(void 0,void 0,void 0,(function*(){const i=new iv,n=new dg,l=new AW;yield l.initialize(e,i,n);const o=new OV(l),a=t(l,o),c=l.getDataLayer(),r=ev.getInstance();return(null==r?void 0:r.init)&&(yield r.init(!0,(e=>kW(void 0,void 0,void 0,(function*(){yield a.attachTokenToRequestConfig(e)}))))),{disableHttpHandler:()=>{a.disableHttpHandler(r)},enableHttpHandler:()=>{a.enableHttpHandler(r)},getAccessToken:()=>a.getAccessToken(),getAuthorizationURL:e=>kW(void 0,void 0,void 0,(function*(){return l.getAuthorizationURL(e).then((e=>kW(void 0,void 0,void 0,(function*(){var t;const i=null!==(t=new URL(e).searchParams.get(zW))&&void 0!==t?t:"",n=yield l.getPKCECode(i);return{authorizationURL:e,pkce:n}})))).catch((e=>Promise.reject(e)))})),getBasicUserInfo:()=>kW(void 0,void 0,void 0,(function*(){return a.getBasicUserInfo()})),getConfigData:()=>kW(void 0,void 0,void 0,(function*(){return c.getConfigData()})),getCryptoHelper:()=>kW(void 0,void 0,void 0,(function*(){return a.getCryptoHelper()})),getDecodedIDPIDToken:()=>kW(void 0,void 0,void 0,(function*(){return a.getDecodedIDPIDToken()})),getDecodedIDToken:()=>kW(void 0,void 0,void 0,(function*(){return a.getDecodedIDToken()})),getIDToken:()=>kW(void 0,void 0,void 0,(function*(){return a.getIDToken()})),getOIDCServiceEndpoints:()=>kW(void 0,void 0,void 0,(function*(){return a.getOIDCServiceEndpoints()})),getSignOutURL:()=>kW(void 0,void 0,void 0,(function*(){return yield l.getSignOutURL()})),httpRequest:e=>kW(void 0,void 0,void 0,(function*(){return yield a.httpRequest(r,e)})),httpRequestAll:e=>kW(void 0,void 0,void 0,(function*(){return yield a.httpRequestAll(e,r)})),isAuthenticated:()=>a.isAuthenticated(),refreshAccessToken:()=>kW(void 0,void 0,void 0,(function*(){try{return yield a.refreshAccessToken()}catch(e){return Promise.reject(e)}})),requestAccessToken:(e,t,i,n)=>kW(void 0,void 0,void 0,(function*(){return yield a.requestAccessToken(e,t,void 0,i,n)})),requestCustomGrant:e=>kW(void 0,void 0,void 0,(function*(){return yield a.requestCustomGrant(e)})),revokeAccessToken:()=>kW(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=>kW(void 0,void 0,void 0,(function*(){yield c.setSessionDataParameter(xW,e)})),signOut:()=>kW(void 0,void 0,void 0,(function*(){return o.clearRefreshTokenTimeout(),yield l.getSignOutURL()})),startAutoRefreshToken:()=>kW(void 0,void 0,void 0,(function*(){o.clearRefreshTokenTimeout(),o.refreshAccessTokenAutomatically(a)})),updateConfig:e=>kW(void 0,void 0,void 0,(function*(){yield l.updateConfig(e)}))}})))(t,e),i.setHttpRequestFinishCallback(o),i.setHttpRequestStartCallback(n),i.setHttpRequestSuccessCallback(l),Z.postMessage(MV.generateSuccessMessage())}catch(e){Z.postMessage(MV.generateFailureMessage(e))}break;case yV:i.getAuthorizationURL(null==a?void 0:a.data).then((e=>{Z.postMessage(MV.generateSuccessMessage(e))})).catch((e=>{Z.postMessage(MV.generateFailureMessage(e))}));break;case XV:i.requestAccessToken(null===(t=null==a?void 0:a.data)||void 0===t?void 0:t.code,null===(r=null==a?void 0:a.data)||void 0===r?void 0:r.sessionState,null===(s=null==a?void 0:a.data)||void 0===s?void 0:s.pkce,null===(d=null==a?void 0:a.data)||void 0===d?void 0:d.state).then((e=>{Z.postMessage(MV.generateSuccessMessage(e))})).catch((e=>{Z.postMessage(MV.generateFailureMessage(e))}));break;case oV:{const e=a.data,t=null==e?void 0:e.data;if(!0===(null===(h=null===(u=a.data)||void 0===u?void 0:u.data)||void 0===h?void 0:h.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=>{Z.postMessage(MV.generateSuccessMessage(e))})).catch((e=>{Z.postMessage(MV.generateFailureMessage(e))}));break}case aV:i.httpRequestAll(a.data).then((e=>{Z.postMessage(MV.generateSuccessMessage(e))})).catch((e=>{Z.postMessage(MV.generateFailureMessage(e))}));break;case lV:try{Z.postMessage(MV.generateSuccessMessage(yield i.signOut()))}catch(e){Z.postMessage(MV.generateFailureMessage(e))}break;case cV:i.requestCustomGrant(a.data).then((e=>{Z.postMessage(MV.generateSuccessMessage(e))})).catch((e=>{Z.postMessage(MV.generateFailureMessage(e))}));break;case rV:i.revokeAccessToken().then((e=>{Z.postMessage(MV.generateSuccessMessage(e))})).catch((e=>{Z.postMessage(MV.generateFailureMessage(e))}));break;case hV:try{Z.postMessage(MV.generateSuccessMessage(yield i.getOIDCServiceEndpoints()))}catch(e){Z.postMessage(MV.generateFailureMessage(e))}break;case ZV:try{Z.postMessage(MV.generateSuccessMessage(yield i.getBasicUserInfo()))}catch(e){Z.postMessage(MV.generateFailureMessage(e))}break;case bV:try{Z.postMessage(MV.generateSuccessMessage(yield i.getDecodedIDToken()))}catch(e){Z.postMessage(MV.generateFailureMessage(e))}break;case mV:try{Z.postMessage(MV.generateSuccessMessage(yield i.getCryptoHelper()))}catch(e){Z.postMessage(MV.generateFailureMessage(e))}break;case gV:try{Z.postMessage(MV.generateSuccessMessage(yield i.getIDToken()))}catch(e){Z.postMessage(MV.generateFailureMessage(e))}break;case pV:i.enableHttpHandler(),Z.postMessage(MV.generateSuccessMessage());break;case GV:i.disableHttpHandler(),Z.postMessage(MV.generateSuccessMessage());break;case WV:try{Z.postMessage(MV.generateSuccessMessage(yield i.isAuthenticated()))}catch(e){Z.postMessage(MV.generateFailureMessage(e))}break;case VV:try{Z.postMessage(MV.generateSuccessMessage(yield i.getSignOutURL()))}catch(e){Z.postMessage(MV.generateFailureMessage(e))}break;case IV:try{Z.postMessage(MV.generateSuccessMessage(yield i.refreshAccessToken()))}catch(e){Z.postMessage(MV.generateFailureMessage(e))}break;case fV:try{Z.postMessage(MV.generateSuccessMessage(i.startAutoRefreshToken()))}catch(e){Z.postMessage(MV.generateFailureMessage(e))}break;case RV:try{Z.postMessage(MV.generateSuccessMessage(yield i.setSessionState(null==a?void 0:a.data)))}catch(e){Z.postMessage(MV.generateFailureMessage(e))}break;case vV:try{Z.postMessage(MV.generateSuccessMessage(yield i.updateConfig(null==a?void 0:a.data)))}catch(e){Z.postMessage(MV.generateFailureMessage(e))}break;case NV:try{Z.postMessage(MV.generateSuccessMessage(yield i.getConfigData()))}catch(e){Z.postMessage(MV.generateFailureMessage(e))}break;default:null==Z||Z.postMessage(MV.generateFailureMessage(new BW("SPA-CLIENT_WORKER-ONMSG-IV02","The message type is invalid.","The message type provided, ".concat(a.type,", is invalid."))))}else Z.postMessage(MV.generateFailureMessage(new BW("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:sV})},l=e=>{t.postMessage({data:JSON.stringify(null!=e?e:""),type:dV})},o=()=>{t.postMessage({type:uV})}},Object.defineProperty(e,"__esModule",{value:!0}),e}({});
1
+ var AsgardeoAuth=function(e){"use strict";var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function n(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(n){var i=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,i.get?i:{enumerable:!0,get:function(){return e[n]}})})),t}var l=function(e){return e&&e.Math==Math&&e},o=l("object"==typeof globalThis&&globalThis)||l("object"==typeof window&&window)||l("object"==typeof self&&self)||l("object"==typeof t&&t)||function(){return this}()||Function("return this")(),c=o,a=function(e){try{return!!e()}catch(e){return!0}},r=!a((function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")})),s=r,d=Function.prototype,u=d.bind,Z=d.call,h=s&&u.bind(Z,Z),b=s?function(e){return e&&h(e)}:function(e){return e&&function(){return Z.apply(e,arguments)}},m=TypeError,p=function(e){if(null==e)throw m("Can't call method on "+e);return e},y=p,G=Object,X=function(e){return G(y(e))},W=X,V=b({}.hasOwnProperty),I=Object.hasOwn||function(e,t){return V(W(e),t)},S={},R={exports:{}},g=o,f=Object.defineProperty,v=function(e,t){try{f(g,e,{value:t,configurable:!0,writable:!0})}catch(n){g[e]=t}return t},Y=v,K="__core-js_shared__",N=o[K]||Y(K,{}),C=N;(R.exports=function(e,t){return C[e]||(C[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 J,k,U=b,L=0,T=Math.random(),H=U(1..toString),x=function(e){return"Symbol("+(void 0===e?"":e)+")_"+H(++L+T,36)},w=function(e){return"function"==typeof e},F=o,z=w,P=function(e){return z(e)?e:void 0},B=function(e,t){return arguments.length<2?P(F[e]):F[e]&&F[e][t]},j=B("navigator","userAgent")||"",Q=o,M=j,E=Q.process,D=Q.Deno,O=E&&E.versions||D&&D.version,A=O&&O.v8;A&&(k=(J=A.split("."))[0]>0&&J[0]<4?1:+(J[0]+J[1])),!k&&M&&(!(J=M.match(/Edge\/(\d+)/))||J[1]>=74)&&(J=M.match(/Chrome\/(\d+)/))&&(k=+J[1]);var _=k,q=_,$=a,ee=!!Object.getOwnPropertySymbols&&!$((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&q&&q<41})),te=ee&&!Symbol.sham&&"symbol"==typeof Symbol.iterator,ne=o,ie=R.exports,le=I,oe=x,ce=ee,ae=te,re=ie("wks"),se=ne.Symbol,de=se&&se.for,ue=ae?se:se&&se.withoutSetter||oe,Ze=function(e){if(!le(re,e)||!ce&&"string"!=typeof re[e]){var t="Symbol."+e;ce&&le(se,e)?re[e]=se[e]:re[e]=ae&&de?de(t):ue(t)}return re[e]},he=Ze;S.f=he;var be={},me=!a((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})),pe=w,ye=function(e){return"object"==typeof e?null!==e:pe(e)},Ge=ye,Xe=o.document,We=Ge(Xe)&&Ge(Xe.createElement),Ve=function(e){return We?Xe.createElement(e):{}},Ie=Ve,Se=!me&&!a((function(){return 7!=Object.defineProperty(Ie("div"),"a",{get:function(){return 7}}).a})),Re=me&&a((function(){return 42!=Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype})),ge=ye,fe=String,ve=TypeError,Ye=function(e){if(ge(e))return e;throw ve(fe(e)+" is not an object")},Ke=r,Ne=Function.prototype.call,Ce=Ke?Ne.bind(Ne):function(){return Ne.apply(Ne,arguments)},Je=b({}.isPrototypeOf),ke=B,Ue=w,Le=Je,Te=Object,He=te?function(e){return"symbol"==typeof e}:function(e){var t=ke("Symbol");return Ue(t)&&Le(t.prototype,Te(e))},xe=String,we=function(e){try{return xe(e)}catch(e){return"Object"}},Fe=w,ze=we,Pe=TypeError,Be=function(e){if(Fe(e))return e;throw Pe(ze(e)+" is not a function")},je=Be,Qe=function(e,t){var n=e[t];return null==n?void 0:je(n)},Me=Ce,Ee=w,De=ye,Oe=TypeError,Ae=Ce,_e=ye,qe=He,$e=Qe,et=function(e,t){var n,i;if("string"===t&&Ee(n=e.toString)&&!De(i=Me(n,e)))return i;if(Ee(n=e.valueOf)&&!De(i=Me(n,e)))return i;if("string"!==t&&Ee(n=e.toString)&&!De(i=Me(n,e)))return i;throw Oe("Can't convert object to primitive value")},tt=TypeError,nt=Ze("toPrimitive"),it=function(e,t){if(!_e(e)||qe(e))return e;var n,i=$e(e,nt);if(i){if(void 0===t&&(t="default"),n=Ae(i,e,t),!_e(n)||qe(n))return n;throw tt("Can't convert object to primitive value")}return void 0===t&&(t="number"),et(e,t)},lt=it,ot=He,ct=function(e){var t=lt(e,"string");return ot(t)?t:t+""},at=me,rt=Se,st=Re,dt=Ye,ut=ct,Zt=TypeError,ht=Object.defineProperty,bt=Object.getOwnPropertyDescriptor,mt="enumerable",pt="configurable",yt="writable";be.f=at?st?function(e,t,n){if(dt(e),t=ut(t),dt(n),"function"==typeof e&&"prototype"===t&&"value"in n&&yt in n&&!n.writable){var i=bt(e,t);i&&i.writable&&(e[t]=n.value,n={configurable:pt in n?n.configurable:i.configurable,enumerable:mt in n?n.enumerable:i.enumerable,writable:!1})}return ht(e,t,n)}:ht:function(e,t,n){if(dt(e),t=ut(t),dt(n),rt)try{return ht(e,t,n)}catch(e){}if("get"in n||"set"in n)throw Zt("Accessors not supported");return"value"in n&&(e[t]=n.value),e};var Gt=c,Xt=I,Wt=S,Vt=be.f,It=function(e){var t=Gt.Symbol||(Gt.Symbol={});Xt(t,e)||Vt(t,e,{value:Wt.f(e)})};It("matchAll");var St={},Rt={},gt={}.propertyIsEnumerable,ft=Object.getOwnPropertyDescriptor,vt=ft&&!gt.call({1:2},1);Rt.f=vt?function(e){var t=ft(this,e);return!!t&&t.enumerable}:gt;var Yt=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},Kt=b,Nt=Kt({}.toString),Ct=Kt("".slice),Jt=function(e){return Ct(Nt(e),8,-1)},kt=a,Ut=Jt,Lt=Object,Tt=b("".split),Ht=kt((function(){return!Lt("z").propertyIsEnumerable(0)}))?function(e){return"String"==Ut(e)?Tt(e,""):Lt(e)}:Lt,xt=Ht,wt=p,Ft=function(e){return xt(wt(e))},zt=me,Pt=Ce,Bt=Rt,jt=Yt,Qt=Ft,Mt=ct,Et=I,Dt=Se,Ot=Object.getOwnPropertyDescriptor;St.f=zt?Ot:function(e,t){if(e=Qt(e),t=Mt(t),Dt)try{return Ot(e,t)}catch(e){}if(Et(e,t))return jt(!Pt(Bt.f,e,t),e[t])};var At=be,_t=Yt,qt=me?function(e,t,n){return At.f(e,t,_t(1,n))}:function(e,t,n){return e[t]=n,e},$t={exports:{}},en=me,tn=I,nn=Function.prototype,ln=en&&Object.getOwnPropertyDescriptor,on=tn(nn,"name"),cn={EXISTS:on,PROPER:on&&"something"===function(){}.name,CONFIGURABLE:on&&(!en||en&&ln(nn,"name").configurable)},an=w,rn=N,sn=b(Function.toString);an(rn.inspectSource)||(rn.inspectSource=function(e){return sn(e)});var dn,un,Zn,hn=rn.inspectSource,bn=w,mn=hn,pn=o.WeakMap,yn=bn(pn)&&/native code/.test(mn(pn)),Gn=R.exports,Xn=x,Wn=Gn("keys"),Vn=function(e){return Wn[e]||(Wn[e]=Xn(e))},In={},Sn=yn,Rn=o,gn=b,fn=ye,vn=qt,Yn=I,Kn=N,Nn=Vn,Cn=In,Jn="Object already initialized",kn=Rn.TypeError,Un=Rn.WeakMap;if(Sn||Kn.state){var Ln=Kn.state||(Kn.state=new Un),Tn=gn(Ln.get),Hn=gn(Ln.has),xn=gn(Ln.set);dn=function(e,t){if(Hn(Ln,e))throw new kn(Jn);return t.facade=e,xn(Ln,e,t),t},un=function(e){return Tn(Ln,e)||{}},Zn=function(e){return Hn(Ln,e)}}else{var wn=Nn("state");Cn[wn]=!0,dn=function(e,t){if(Yn(e,wn))throw new kn(Jn);return t.facade=e,vn(e,wn,t),t},un=function(e){return Yn(e,wn)?e[wn]:{}},Zn=function(e){return Yn(e,wn)}}var Fn={set:dn,get:un,has:Zn,enforce:function(e){return Zn(e)?un(e):dn(e,{})},getterFor:function(e){return function(t){var n;if(!fn(t)||(n=un(t)).type!==e)throw kn("Incompatible receiver, "+e+" required");return n}}},zn=a,Pn=w,Bn=I,jn=me,Qn=cn.CONFIGURABLE,Mn=hn,En=Fn.enforce,Dn=Fn.get,On=Object.defineProperty,An=jn&&!zn((function(){return 8!==On((function(){}),"length",{value:8}).length})),_n=String(String).split("String"),qn=$t.exports=function(e,t,n){"Symbol("===String(t).slice(0,7)&&(t="["+String(t).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),n&&n.getter&&(t="get "+t),n&&n.setter&&(t="set "+t),(!Bn(e,"name")||Qn&&e.name!==t)&&(jn?On(e,"name",{value:t,configurable:!0}):e.name=t),An&&n&&Bn(n,"arity")&&e.length!==n.arity&&On(e,"length",{value:n.arity});try{n&&Bn(n,"constructor")&&n.constructor?jn&&On(e,"prototype",{writable:!1}):e.prototype&&(e.prototype=void 0)}catch(e){}var i=En(e);return Bn(i,"source")||(i.source=_n.join("string"==typeof t?t:"")),e};Function.prototype.toString=qn((function(){return Pn(this)&&Dn(this).source||Mn(this)}),"toString");var $n=w,ei=be,ti=$t.exports,ni=v,ii=function(e,t,n,i){i||(i={});var l=i.enumerable,o=void 0!==i.name?i.name:t;if($n(n)&&ti(n,o,i),i.global)l?e[t]=n:ni(t,n);else{try{i.unsafe?e[t]&&(l=!0):delete e[t]}catch(e){}l?e[t]=n:ei.f(e,t,{value:n,enumerable:!1,configurable:!i.nonConfigurable,writable:!i.nonWritable})}return e},li={},oi=Math.ceil,ci=Math.floor,ai=Math.trunc||function(e){var t=+e;return(t>0?ci:oi)(t)},ri=ai,si=function(e){var t=+e;return t!=t||0===t?0:ri(t)},di=si,ui=Math.max,Zi=Math.min,hi=function(e,t){var n=di(e);return n<0?ui(n+t,0):Zi(n,t)},bi=si,mi=Math.min,pi=function(e){return e>0?mi(bi(e),9007199254740991):0},yi=pi,Gi=function(e){return yi(e.length)},Xi=Ft,Wi=hi,Vi=Gi,Ii=function(e){return function(t,n,i){var l,o=Xi(t),c=Vi(o),a=Wi(i,c);if(e&&n!=n){for(;c>a;)if((l=o[a++])!=l)return!0}else for(;c>a;a++)if((e||a in o)&&o[a]===n)return e||a||0;return!e&&-1}},Si={includes:Ii(!0),indexOf:Ii(!1)},Ri=I,gi=Ft,fi=Si.indexOf,vi=In,Yi=b([].push),Ki=function(e,t){var n,i=gi(e),l=0,o=[];for(n in i)!Ri(vi,n)&&Ri(i,n)&&Yi(o,n);for(;t.length>l;)Ri(i,n=t[l++])&&(~fi(o,n)||Yi(o,n));return o},Ni=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],Ci=Ki,Ji=Ni.concat("length","prototype");li.f=Object.getOwnPropertyNames||function(e){return Ci(e,Ji)};var ki={};ki.f=Object.getOwnPropertySymbols;var Ui=B,Li=li,Ti=ki,Hi=Ye,xi=b([].concat),wi=Ui("Reflect","ownKeys")||function(e){var t=Li.f(Hi(e)),n=Ti.f;return n?xi(t,n(e)):t},Fi=I,zi=wi,Pi=St,Bi=be,ji=a,Qi=w,Mi=/#|\.prototype\./,Ei=function(e,t){var n=Oi[Di(e)];return n==_i||n!=Ai&&(Qi(t)?ji(t):!!t)},Di=Ei.normalize=function(e){return String(e).replace(Mi,".").toLowerCase()},Oi=Ei.data={},Ai=Ei.NATIVE="N",_i=Ei.POLYFILL="P",qi=Ei,$i=o,el=St.f,tl=qt,nl=ii,il=v,ll=function(e,t,n){for(var i=zi(t),l=Bi.f,o=Pi.f,c=0;c<i.length;c++){var a=i[c];Fi(e,a)||n&&Fi(n,a)||l(e,a,o(t,a))}},ol=qi,cl=function(e,t){var n,i,l,o,c,a=e.target,r=e.global,s=e.stat;if(n=r?$i:s?$i[a]||il(a,{}):($i[a]||{}).prototype)for(i in t){if(o=t[i],l=e.dontCallGetSet?(c=el(n,i))&&c.value:n[i],!ol(r?i:a+(s?".":"#")+i,e.forced)&&void 0!==l){if(typeof o==typeof l)continue;ll(o,l)}(e.sham||l&&l.sham)&&tl(o,"sham",!0),nl(n,i,o,e)}},al={},rl=Ki,sl=Ni,dl=Object.keys||function(e){return rl(e,sl)},ul=me,Zl=Re,hl=be,bl=Ye,ml=Ft,pl=dl;al.f=ul&&!Zl?Object.defineProperties:function(e,t){bl(e);for(var n,i=ml(t),l=pl(t),o=l.length,c=0;o>c;)hl.f(e,n=l[c++],i[n]);return e};var yl,Gl=B("document","documentElement"),Xl=Ye,Wl=al,Vl=Ni,Il=In,Sl=Gl,Rl=Ve,gl=Vn("IE_PROTO"),fl=function(){},vl=function(e){return"<script>"+e+"</"+"script>"},Yl=function(e){e.write(vl("")),e.close();var t=e.parentWindow.Object;return e=null,t},Kl=function(){try{yl=new ActiveXObject("htmlfile")}catch(e){}var e,t;Kl="undefined"!=typeof document?document.domain&&yl?Yl(yl):((t=Rl("iframe")).style.display="none",Sl.appendChild(t),t.src=String("javascript:"),(e=t.contentWindow.document).open(),e.write(vl("document.F=Object")),e.close(),e.F):Yl(yl);for(var n=Vl.length;n--;)delete Kl.prototype[Vl[n]];return Kl()};Il[gl]=!0;var Nl=Object.create||function(e,t){var n;return null!==e?(fl.prototype=Xl(e),n=new fl,fl.prototype=null,n[gl]=e):n=Kl(),void 0===t?n:Wl.f(n,t)},Cl=Ze,Jl=Nl,kl=be.f,Ul=Cl("unscopables"),Ll=Array.prototype;null==Ll[Ul]&&kl(Ll,Ul,{configurable:!0,value:Jl(null)});var Tl=function(e){Ll[Ul][e]=!0},Hl=Si.includes,xl=Tl;cl({target:"Array",proto:!0,forced:a((function(){return!Array(1).includes()}))},{includes:function(e){return Hl(this,e,arguments.length>1?arguments[1]:void 0)}}),xl("includes"),Tl("flat"),Tl("flatMap");var wl={},Fl=Be,zl=function(e){var t,n;this.promise=new e((function(e,i){if(void 0!==t||void 0!==n)throw TypeError("Bad Promise constructor");t=e,n=i})),this.resolve=Fl(t),this.reject=Fl(n)};wl.f=function(e){return new zl(e)};var Pl=Be,Bl=r,jl=b(b.bind),Ql=function(e,t){return Pl(e),void 0===t?e:Bl?jl(e,t):function(){return e.apply(t,arguments)}},Ml={},El=Ml,Dl=Ze("iterator"),Ol=Array.prototype,Al=function(e){return void 0!==e&&(El.Array===e||Ol[Dl]===e)},_l={};_l[Ze("toStringTag")]="z";var ql="[object z]"===String(_l),$l=w,eo=Jt,to=Ze("toStringTag"),no=Object,io="Arguments"==eo(function(){return arguments}()),lo=ql?eo:function(e){var t,n,i;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=no(e),to))?n:io?eo(t):"Object"==(i=eo(t))&&$l(t.callee)?"Arguments":i},oo=lo,co=Qe,ao=Ml,ro=Ze("iterator"),so=function(e){if(null!=e)return co(e,ro)||co(e,"@@iterator")||ao[oo(e)]},uo=Ce,Zo=Be,ho=Ye,bo=we,mo=so,po=TypeError,yo=function(e,t){var n=arguments.length<2?mo(e):t;if(Zo(n))return ho(uo(n,e));throw po(bo(e)+" is not iterable")},Go=Ce,Xo=Ye,Wo=Qe,Vo=function(e,t,n){var i,l;Xo(e);try{if(!(i=Wo(e,"return"))){if("throw"===t)throw n;return n}i=Go(i,e)}catch(e){l=!0,i=e}if("throw"===t)throw n;if(l)throw i;return Xo(i),n},Io=Ql,So=Ce,Ro=Ye,go=we,fo=Al,vo=Gi,Yo=Je,Ko=yo,No=so,Co=Vo,Jo=TypeError,ko=function(e,t){this.stopped=e,this.result=t},Uo=ko.prototype,Lo=Ce,To=Be,Ho=wl,xo=function(e){try{return{error:!1,value:e()}}catch(e){return{error:!0,value:e}}},wo=function(e,t,n){var i,l,o,c,a,r,s,d=n&&n.that,u=!(!n||!n.AS_ENTRIES),Z=!(!n||!n.IS_RECORD),h=!(!n||!n.IS_ITERATOR),b=!(!n||!n.INTERRUPTED),m=Io(t,d),p=function(e){return i&&Co(i,"normal",e),new ko(!0,e)},y=function(e){return u?(Ro(e),b?m(e[0],e[1],p):m(e[0],e[1])):b?m(e,p):m(e)};if(Z)i=e.iterator;else if(h)i=e;else{if(!(l=No(e)))throw Jo(go(e)+" is not iterable");if(fo(l)){for(o=0,c=vo(e);c>o;o++)if((a=y(e[o]))&&Yo(Uo,a))return a;return new ko(!1)}i=Ko(e,l)}for(r=Z?e.next:i.next;!(s=So(r,i)).done;){try{a=y(s.value)}catch(e){Co(i,"throw",e)}if("object"==typeof a&&a&&Yo(Uo,a))return a}return new ko(!1)};cl({target:"Promise",stat:!0},{allSettled:function(e){var t=this,n=Ho.f(t),i=n.resolve,l=n.reject,o=xo((function(){var n=To(t.resolve),l=[],o=0,c=1;wo(e,(function(e){var a=o++,r=!1;c++,Lo(n,t,e).then((function(e){r||(r=!0,l[a]={status:"fulfilled",value:e},--c||i(l))}),(function(e){r||(r=!0,l[a]={status:"rejected",reason:e},--c||i(l))}))})),--c||i(l)}));return o.error&&l(o.value),n.promise}});var Fo=o.Promise,zo=b,Po=a,Bo=w,jo=lo,Qo=hn,Mo=function(){},Eo=[],Do=B("Reflect","construct"),Oo=/^\s*(?:class|function)\b/,Ao=zo(Oo.exec),_o=!Oo.exec(Mo),qo=function(e){if(!Bo(e))return!1;try{return Do(Mo,Eo,e),!0}catch(e){return!1}},$o=function(e){if(!Bo(e))return!1;switch(jo(e)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return _o||!!Ao(Oo,Qo(e))}catch(e){return!0}};$o.sham=!0;var ec=!Do||Po((function(){var e;return qo(qo.call)||!qo(Object)||!qo((function(){e=!0}))||e}))?$o:qo,tc=ec,nc=we,ic=TypeError,lc=function(e){if(tc(e))return e;throw ic(nc(e)+" is not a constructor")},oc=Ye,cc=lc,ac=Ze("species"),rc=function(e,t){var n,i=oc(e).constructor;return void 0===i||null==(n=oc(i)[ac])?t:cc(n)},sc=Ye,dc=ye,uc=wl,Zc=cl,hc=Fo,bc=a,mc=B,pc=w,yc=rc,Gc=function(e,t){if(sc(e),dc(t)&&t.constructor===e)return t;var n=uc.f(e);return(0,n.resolve)(t),n.promise},Xc=ii,Wc=hc&&hc.prototype;if(Zc({target:"Promise",proto:!0,real:!0,forced:!!hc&&bc((function(){Wc.finally.call({then:function(){}},(function(){}))}))},{finally:function(e){var t=yc(this,mc("Promise")),n=pc(e);return this.then(n?function(n){return Gc(t,e()).then((function(){return n}))}:e,n?function(n){return Gc(t,e()).then((function(){throw n}))}:e)}}),pc(hc)){var Vc=mc("Promise").prototype.finally;Wc.finally!==Vc&&Xc(Wc,"finally",Vc,{unsafe:!0})}var Ic=$t.exports,Sc=be,Rc=function(e,t,n){return n.get&&Ic(n.get,t,{getter:!0}),n.set&&Ic(n.set,t,{setter:!0}),Sc.f(e,t,n)},gc=Ye,fc=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},vc=me,Yc=Rc,Kc=fc,Nc=a,Cc=o.RegExp,Jc=Cc.prototype,kc=vc&&Nc((function(){var e=!0;try{Cc(".","d")}catch(t){e=!1}var t={},n="",i=e?"dgimsy":"gimsy",l=function(e,i){Object.defineProperty(t,e,{get:function(){return n+=i,!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(Jc,"flags").get.call(t)!==i||n!==i}));kc&&Yc(Jc,"flags",{configurable:!0,get:Kc});var Uc,Lc,Tc,Hc=!a((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype})),xc=I,wc=w,Fc=X,zc=Hc,Pc=Vn("IE_PROTO"),Bc=Object,jc=Bc.prototype,Qc=zc?Bc.getPrototypeOf:function(e){var t=Fc(e);if(xc(t,Pc))return t[Pc];var n=t.constructor;return wc(n)&&t instanceof n?n.prototype:t instanceof Bc?jc:null},Mc=a,Ec=w,Dc=Qc,Oc=ii,Ac=Ze("iterator"),_c=!1;[].keys&&("next"in(Tc=[].keys())?(Lc=Dc(Dc(Tc)))!==Object.prototype&&(Uc=Lc):_c=!0);var qc=null==Uc||Mc((function(){var e={};return Uc[Ac].call(e)!==e}));qc&&(Uc={}),Ec(Uc[Ac])||Oc(Uc,Ac,(function(){return this}));var $c,ea,ta={IteratorPrototype:Uc,BUGGY_SAFARI_ITERATORS:_c},na=be.f,ia=I,la=Ze("toStringTag"),oa=function(e,t,n){e&&!n&&(e=e.prototype),e&&!ia(e,la)&&na(e,la,{configurable:!0,value:t})},ca=ta.IteratorPrototype,aa=Nl,ra=Yt,sa=oa,da=Ml,ua=function(){return this},Za=function(e,t,n,i){var l=t+" Iterator";return e.prototype=aa(ca,{next:ra(+!i,n)}),sa(e,l,!1),da[l]=ua,e},ha=lo,ba=String,ma=function(e){if("Symbol"===ha(e))throw TypeError("Cannot convert a Symbol value to a string");return ba(e)},pa=ye,ya=Jt,Ga=Ze("match"),Xa=Ce,Wa=I,Va=Je,Ia=fc,Sa=RegExp.prototype,Ra=b,ga=si,fa=ma,va=p,Ya=Ra("".charAt),Ka=Ra("".charCodeAt),Na=Ra("".slice),Ca=function(e){return function(t,n){var i,l,o=fa(va(t)),c=ga(n),a=o.length;return c<0||c>=a?e?"":void 0:(i=Ka(o,c))<55296||i>56319||c+1===a||(l=Ka(o,c+1))<56320||l>57343?e?Ya(o,c):i:e?Na(o,c,c+2):l-56320+(i-55296<<10)+65536}},Ja={codeAt:Ca(!1),charAt:Ca(!0)},ka=Ja.charAt,Ua=function(e,t,n){return t+(n?ka(e,t).length:1)},La=a,Ta=o.RegExp,Ha=La((function(){var e=Ta("a","y");return e.lastIndex=2,null!=e.exec("abcd")})),xa=Ha||La((function(){return!Ta("a","y").sticky})),wa={BROKEN_CARET:Ha||La((function(){var e=Ta("^r","gy");return e.lastIndex=2,null!=e.exec("str")})),MISSED_STICKY:xa,UNSUPPORTED_Y:Ha},Fa=a,za=o.RegExp,Pa=Fa((function(){var e=za(".","s");return!(e.dotAll&&e.exec("\n")&&"s"===e.flags)})),Ba=a,ja=o.RegExp,Qa=Ba((function(){var e=ja("(?<a>b)","g");return"b"!==e.exec("b").groups.a||"bc"!=="b".replace(e,"$<a>c")})),Ma=Ce,Ea=b,Da=ma,Oa=fc,Aa=wa,_a=R.exports,qa=Nl,$a=Fn.get,er=Pa,tr=Qa,nr=_a("native-string-replace",String.prototype.replace),ir=RegExp.prototype.exec,lr=ir,or=Ea("".charAt),cr=Ea("".indexOf),ar=Ea("".replace),rr=Ea("".slice),sr=(ea=/b*/g,Ma(ir,$c=/a/,"a"),Ma(ir,ea,"a"),0!==$c.lastIndex||0!==ea.lastIndex),dr=Aa.BROKEN_CARET,ur=void 0!==/()??/.exec("")[1];(sr||ur||dr||er||tr)&&(lr=function(e){var t,n,i,l,o,c,a,r=this,s=$a(r),d=Da(e),u=s.raw;if(u)return u.lastIndex=r.lastIndex,t=Ma(lr,u,d),r.lastIndex=u.lastIndex,t;var Z=s.groups,h=dr&&r.sticky,b=Ma(Oa,r),m=r.source,p=0,y=d;if(h&&(b=ar(b,"y",""),-1===cr(b,"g")&&(b+="g"),y=rr(d,r.lastIndex),r.lastIndex>0&&(!r.multiline||r.multiline&&"\n"!==or(d,r.lastIndex-1))&&(m="(?: "+m+")",y=" "+y,p++),n=new RegExp("^(?:"+m+")",b)),ur&&(n=new RegExp("^"+m+"$(?!\\s)",b)),sr&&(i=r.lastIndex),l=Ma(ir,h?n:r,y),h?l?(l.input=rr(l.input,p),l[0]=rr(l[0],p),l.index=r.lastIndex,r.lastIndex+=l[0].length):r.lastIndex=0:sr&&l&&(r.lastIndex=r.global?l.index+l[0].length:i),ur&&l&&l.length>1&&Ma(nr,l[0],n,(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 Zr=lr,hr=Ce,br=Ye,mr=w,pr=Jt,yr=Zr,Gr=TypeError,Xr=function(e,t){var n=e.exec;if(mr(n)){var i=hr(n,e,t);return null!==i&&br(i),i}if("RegExp"===pr(e))return hr(yr,e,t);throw Gr("RegExp#exec called on incompatible receiver")},Wr=cl,Vr=Ce,Ir=b,Sr=Za,Rr=p,gr=pi,fr=ma,vr=Ye,Yr=function(e){var t;return pa(e)&&(void 0!==(t=e[Ga])?!!t:"RegExp"==ya(e))},Kr=function(e){var t=e.flags;return void 0!==t||"flags"in Sa||Wa(e,"flags")||!Va(Sa,e)?t:Xa(Ia,e)},Nr=Qe,Cr=ii,Jr=a,kr=rc,Ur=Ua,Lr=Xr,Tr=Fn,Hr=Ze("matchAll"),xr="RegExp String",wr="RegExp String Iterator",Fr=Tr.set,zr=Tr.getterFor(wr),Pr=RegExp.prototype,Br=TypeError,jr=Ir("".indexOf),Qr=Ir("".matchAll),Mr=!!Qr&&!Jr((function(){Qr("a",/./)})),Er=Sr((function(e,t,n,i){Fr(this,{type:wr,regexp:e,string:t,global:n,unicode:i,done:!1})}),xr,(function(){var e=zr(this);if(e.done)return{value:void 0,done:!0};var t=e.regexp,n=e.string,i=Lr(t,n);return null===i?{value:void 0,done:e.done=!0}:e.global?(""===fr(i[0])&&(t.lastIndex=Ur(n,gr(t.lastIndex),e.unicode)),{value:i,done:!1}):(e.done=!0,{value:i,done:!1})})),Dr=function(e){var t,n,i,l=vr(this),o=fr(e),c=kr(l,RegExp),a=fr(Kr(l));return t=new c(c===RegExp?l.source:l,a),n=!!~jr(a,"g"),i=!!~jr(a,"u"),t.lastIndex=gr(l.lastIndex),new Er(t,o,n,i)};Wr({target:"String",proto:!0,forced:Mr},{matchAll:function(e){var t,n,i,l=Rr(this);if(null!=e){if(Yr(e)&&(t=fr(Rr(Kr(e))),!~jr(t,"g")))throw Br("`.matchAll` does not allow non-global regexes");if(Mr)return Qr(l,e);if(i=Nr(e,Hr))return Vr(i,e,l)}else if(Mr)return Qr(l,e);return n=fr(l),new RegExp(e,"g")[Hr](n)}}),Hr in Pr||Cr(Pr,Hr,Dr);var Or=r,Ar=Function.prototype,_r=Ar.apply,qr=Ar.call,$r="object"==typeof Reflect&&Reflect.apply||(Or?qr.bind(_r):function(){return qr.apply(_r,arguments)});cl({target:"RegExp",proto:!0,forced:/./.exec!==Zr},{exec:Zr});var es=b,ts=ii,ns=Zr,is=a,ls=Ze,os=qt,cs=ls("species"),as=RegExp.prototype,rs=b,ss=X,ds=Math.floor,us=rs("".charAt),Zs=rs("".replace),hs=rs("".slice),bs=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,ms=/\$([$&'`]|\d{1,2})/g,ps=$r,ys=Ce,Gs=b,Xs=function(e,t,n,i){var l=ls(e),o=!is((function(){var t={};return t[l]=function(){return 7},7!=""[e](t)})),c=o&&!is((function(){var t=!1,n=/a/;return"split"===e&&((n={}).constructor={},n.constructor[cs]=function(){return n},n.flags="",n[l]=/./[l]),n.exec=function(){return t=!0,null},n[l](""),!t}));if(!o||!c||n){var a=es(/./[l]),r=t(l,""[e],(function(e,t,n,i,l){var c=es(e),r=t.exec;return r===ns||r===as.exec?o&&!l?{done:!0,value:a(t,n,i)}:{done:!0,value:c(n,t,i)}:{done:!1}}));ts(String.prototype,e,r[0]),ts(as,l,r[1])}i&&os(as[l],"sham",!0)},Ws=a,Vs=Ye,Is=w,Ss=si,Rs=pi,gs=ma,fs=p,vs=Ua,Ys=Qe,Ks=function(e,t,n,i,l,o){var c=n+e.length,a=i.length,r=ms;return void 0!==l&&(l=ss(l),r=bs),Zs(o,r,(function(o,r){var s;switch(us(r,0)){case"$":return"$";case"&":return e;case"`":return hs(t,0,n);case"'":return hs(t,c);case"<":s=l[hs(r,1,-1)];break;default:var d=+r;if(0===d)return o;if(d>a){var u=ds(d/10);return 0===u?o:u<=a?void 0===i[u-1]?us(r,1):i[u-1]+us(r,1):o}s=i[d-1]}return void 0===s?"":s}))},Ns=Xr,Cs=Ze("replace"),Js=Math.max,ks=Math.min,Us=Gs([].concat),Ls=Gs([].push),Ts=Gs("".indexOf),Hs=Gs("".slice),xs="$0"==="a".replace(/./,"$0"),ws=!!/./[Cs]&&""===/./[Cs]("a","$0");Xs("replace",(function(e,t,n){var i=ws?"$":"$0";return[function(e,n){var i=fs(this),l=null==e?void 0:Ys(e,Cs);return l?ys(l,e,i,n):ys(t,gs(i),e,n)},function(e,l){var o=Vs(this),c=gs(e);if("string"==typeof l&&-1===Ts(l,i)&&-1===Ts(l,"$<")){var a=n(t,o,c,l);if(a.done)return a.value}var r=Is(l);r||(l=gs(l));var s=o.global;if(s){var d=o.unicode;o.lastIndex=0}for(var u=[];;){var Z=Ns(o,c);if(null===Z)break;if(Ls(u,Z),!s)break;""===gs(Z[0])&&(o.lastIndex=vs(c,Rs(o.lastIndex),d))}for(var h,b="",m=0,p=0;p<u.length;p++){for(var y=gs((Z=u[p])[0]),G=Js(ks(Ss(Z.index),c.length),0),X=[],W=1;W<Z.length;W++)Ls(X,void 0===(h=Z[W])?h:String(h));var V=Z.groups;if(r){var I=Us([y],X,G,c);void 0!==V&&Ls(I,V);var S=gs(ps(l,void 0,I))}else S=Ks(y,c,G,X,V,l);G>=m&&(b+=Hs(c,m,G)+S,m=G+y.length)}return b+Hs(c,m)}]}),!!Ws((function(){var e=/./;return e.exec=function(){var e=[];return e.groups={a:"7"},e},"7"!=="".replace(e,"$<a>")}))||!xs||ws);var Fs={exports:{}},zs=Ze("iterator"),Ps=!1;try{var Bs=0,js={next:function(){return{done:!!Bs++}},return:function(){Ps=!0}};js[zs]=function(){return this},Array.from(js,(function(){throw 2}))}catch(e){}var Qs,Ms,Es,Ds="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView,Os=w,As=String,_s=TypeError,qs=b,$s=Ye,ed=function(e){if("object"==typeof e||Os(e))return e;throw _s("Can't set "+As(e)+" as a prototype")},td=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,n={};try{(e=qs(Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set))(n,[]),t=n instanceof Array}catch(e){}return function(n,i){return $s(n),ed(i),t?e(n,i):n.__proto__=i,n}}():void 0),nd=Ds,id=me,ld=o,od=w,cd=ye,ad=I,rd=lo,sd=we,dd=qt,ud=ii,Zd=be.f,hd=Je,bd=Qc,md=td,pd=Ze,yd=x,Gd=Fn.enforce,Xd=Fn.get,Wd=ld.Int8Array,Vd=Wd&&Wd.prototype,Id=ld.Uint8ClampedArray,Sd=Id&&Id.prototype,Rd=Wd&&bd(Wd),gd=Vd&&bd(Vd),fd=Object.prototype,vd=ld.TypeError,Yd=pd("toStringTag"),Kd=yd("TYPED_ARRAY_TAG"),Nd="TypedArrayConstructor",Cd=nd&&!!md&&"Opera"!==rd(ld.opera),Jd=!1,kd={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},Ud={BigInt64Array:8,BigUint64Array:8},Ld=function(e){var t=bd(e);if(cd(t)){var n=Xd(t);return n&&ad(n,Nd)?n.TypedArrayConstructor:Ld(t)}},Td=function(e){if(!cd(e))return!1;var t=rd(e);return ad(kd,t)||ad(Ud,t)};for(Qs in kd)(Es=(Ms=ld[Qs])&&Ms.prototype)?Gd(Es).TypedArrayConstructor=Ms:Cd=!1;for(Qs in Ud)(Es=(Ms=ld[Qs])&&Ms.prototype)&&(Gd(Es).TypedArrayConstructor=Ms);if((!Cd||!od(Rd)||Rd===Function.prototype)&&(Rd=function(){throw vd("Incorrect invocation")},Cd))for(Qs in kd)ld[Qs]&&md(ld[Qs],Rd);if((!Cd||!gd||gd===fd)&&(gd=Rd.prototype,Cd))for(Qs in kd)ld[Qs]&&md(ld[Qs].prototype,gd);if(Cd&&bd(Sd)!==gd&&md(Sd,gd),id&&!ad(gd,Yd))for(Qs in Jd=!0,Zd(gd,Yd,{get:function(){return cd(this)?this[Kd]:void 0}}),kd)ld[Qs]&&dd(ld[Qs],Kd,Qs);var Hd={NATIVE_ARRAY_BUFFER_VIEWS:Cd,TYPED_ARRAY_TAG:Jd&&Kd,aTypedArray:function(e){if(Td(e))return e;throw vd("Target is not a typed array")},aTypedArrayConstructor:function(e){if(od(e)&&(!md||hd(Rd,e)))return e;throw vd(sd(e)+" is not a typed array constructor")},exportTypedArrayMethod:function(e,t,n,i){if(id){if(n)for(var l in kd){var o=ld[l];if(o&&ad(o.prototype,e))try{delete o.prototype[e]}catch(n){try{o.prototype[e]=t}catch(e){}}}gd[e]&&!n||ud(gd,e,n?t:Cd&&Vd[e]||t,i)}},exportTypedArrayStaticMethod:function(e,t,n){var i,l;if(id){if(md){if(n)for(i in kd)if((l=ld[i])&&ad(l,e))try{delete l[e]}catch(e){}if(Rd[e]&&!n)return;try{return ud(Rd,e,n?t:Cd&&Rd[e]||t)}catch(e){}}for(i in kd)!(l=ld[i])||l[e]&&!n||ud(l,e,t)}},getTypedArrayConstructor:Ld,isView:function(e){if(!cd(e))return!1;var t=rd(e);return"DataView"===t||ad(kd,t)||ad(Ud,t)},isTypedArray:Td,TypedArray:Rd,TypedArrayPrototype:gd},xd=o,wd=a,Fd=function(e,t){if(!t&&!Ps)return!1;var n=!1;try{var i={};i[zs]=function(){return{next:function(){return{done:n=!0}}}},e(i)}catch(e){}return n},zd=Hd.NATIVE_ARRAY_BUFFER_VIEWS,Pd=xd.ArrayBuffer,Bd=xd.Int8Array,jd=!zd||!wd((function(){Bd(1)}))||!wd((function(){new Bd(-1)}))||!Fd((function(e){new Bd,new Bd(null),new Bd(1.5),new Bd(e)}),!0)||wd((function(){return 1!==new Bd(new Pd(2),1,void 0).length})),Qd=ii,Md=function(e,t,n){for(var i in t)Qd(e,i,t[i],n);return e},Ed=Je,Dd=TypeError,Od=function(e,t){if(Ed(t,e))return e;throw Dd("Incorrect invocation")},Ad=si,_d=pi,qd=RangeError,$d=function(e){if(void 0===e)return 0;var t=Ad(e),n=_d(t);if(t!==n)throw qd("Wrong length or index");return n},eu=Array,tu=Math.abs,nu=Math.pow,iu=Math.floor,lu=Math.log,ou=Math.LN2,cu={pack:function(e,t,n){var i,l,o,c=eu(n),a=8*n-t-1,r=(1<<a)-1,s=r>>1,d=23===t?nu(2,-24)-nu(2,-77):0,u=e<0||0===e&&1/e<0?1:0,Z=0;for((e=tu(e))!=e||e===1/0?(l=e!=e?1:0,i=r):(i=iu(lu(e)/ou),e*(o=nu(2,-i))<1&&(i--,o*=2),(e+=i+s>=1?d/o:d*nu(2,1-s))*o>=2&&(i++,o/=2),i+s>=r?(l=0,i=r):i+s>=1?(l=(e*o-1)*nu(2,t),i+=s):(l=e*nu(2,s-1)*nu(2,t),i=0));t>=8;)c[Z++]=255&l,l/=256,t-=8;for(i=i<<t|l,a+=t;a>0;)c[Z++]=255&i,i/=256,a-=8;return c[--Z]|=128*u,c},unpack:function(e,t){var n,i=e.length,l=8*i-t-1,o=(1<<l)-1,c=o>>1,a=l-7,r=i-1,s=e[r--],d=127&s;for(s>>=7;a>0;)d=256*d+e[r--],a-=8;for(n=d&(1<<-a)-1,d>>=-a,a+=t;a>0;)n=256*n+e[r--],a-=8;if(0===d)d=1-c;else{if(d===o)return n?NaN:s?-1/0:1/0;n+=nu(2,t),d-=c}return(s?-1:1)*n*nu(2,d-t)}},au=X,ru=hi,su=Gi,du=function(e){for(var t=au(this),n=su(t),i=arguments.length,l=ru(i>1?arguments[1]:void 0,n),o=i>2?arguments[2]:void 0,c=void 0===o?n:ru(o,n);c>l;)t[l++]=e;return t},uu=ct,Zu=be,hu=Yt,bu=function(e,t,n){var i=uu(t);i in e?Zu.f(e,i,hu(0,n)):e[i]=n},mu=hi,pu=Gi,yu=bu,Gu=Array,Xu=Math.max,Wu=function(e,t,n){for(var i=pu(e),l=mu(t,i),o=mu(void 0===n?i:n,i),c=Gu(Xu(o-l,0)),a=0;l<o;l++,a++)yu(c,a,e[l]);return c.length=a,c},Vu=o,Iu=b,Su=me,Ru=Ds,gu=cn,fu=qt,vu=Md,Yu=a,Ku=Od,Nu=si,Cu=pi,Ju=$d,ku=cu,Uu=Qc,Lu=td,Tu=li.f,Hu=be.f,xu=du,wu=Wu,Fu=oa,zu=gu.PROPER,Pu=gu.CONFIGURABLE,Bu=Fn.get,ju=Fn.set,Qu="ArrayBuffer",Mu="DataView",Eu="Wrong index",Du=Vu.ArrayBuffer,Ou=Du,Au=Ou&&Ou.prototype,_u=Vu.DataView,qu=_u&&_u.prototype,$u=Object.prototype,eZ=Vu.Array,tZ=Vu.RangeError,nZ=Iu(xu),iZ=Iu([].reverse),lZ=ku.pack,oZ=ku.unpack,cZ=function(e){return[255&e]},aZ=function(e){return[255&e,e>>8&255]},rZ=function(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]},sZ=function(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]},dZ=function(e){return lZ(e,23,4)},uZ=function(e){return lZ(e,52,8)},ZZ=function(e,t){Hu(e.prototype,t,{get:function(){return Bu(this)[t]}})},hZ=function(e,t,n,i){var l=Ju(n),o=Bu(e);if(l+t>o.byteLength)throw tZ(Eu);var c=Bu(o.buffer).bytes,a=l+o.byteOffset,r=wu(c,a,a+t);return i?r:iZ(r)},bZ=function(e,t,n,i,l,o){var c=Ju(n),a=Bu(e);if(c+t>a.byteLength)throw tZ(Eu);for(var r=Bu(a.buffer).bytes,s=c+a.byteOffset,d=i(+l),u=0;u<t;u++)r[s+u]=d[o?u:t-u-1]};if(Ru){var mZ=zu&&Du.name!==Qu;if(Yu((function(){Du(1)}))&&Yu((function(){new Du(-1)}))&&!Yu((function(){return new Du,new Du(1.5),new Du(NaN),mZ&&!Pu})))mZ&&Pu&&fu(Du,"name",Qu);else{(Ou=function(e){return Ku(this,Au),new Du(Ju(e))}).prototype=Au;for(var pZ,yZ=Tu(Du),GZ=0;yZ.length>GZ;)(pZ=yZ[GZ++])in Ou||fu(Ou,pZ,Du[pZ]);Au.constructor=Ou}Lu&&Uu(qu)!==$u&&Lu(qu,$u);var XZ=new _u(new Ou(2)),WZ=Iu(qu.setInt8);XZ.setInt8(0,2147483648),XZ.setInt8(1,2147483649),!XZ.getInt8(0)&&XZ.getInt8(1)||vu(qu,{setInt8:function(e,t){WZ(this,e,t<<24>>24)},setUint8:function(e,t){WZ(this,e,t<<24>>24)}},{unsafe:!0})}else Ou=function(e){Ku(this,Au);var t=Ju(e);ju(this,{bytes:nZ(eZ(t),0),byteLength:t}),Su||(this.byteLength=t)},Au=Ou.prototype,_u=function(e,t,n){Ku(this,qu),Ku(e,Au);var i=Bu(e).byteLength,l=Nu(t);if(l<0||l>i)throw tZ("Wrong offset");if(l+(n=void 0===n?i-l:Cu(n))>i)throw tZ("Wrong length");ju(this,{buffer:e,byteLength:n,byteOffset:l}),Su||(this.buffer=e,this.byteLength=n,this.byteOffset=l)},qu=_u.prototype,Su&&(ZZ(Ou,"byteLength"),ZZ(_u,"buffer"),ZZ(_u,"byteLength"),ZZ(_u,"byteOffset")),vu(qu,{getInt8:function(e){return hZ(this,1,e)[0]<<24>>24},getUint8:function(e){return hZ(this,1,e)[0]},getInt16:function(e){var t=hZ(this,2,e,arguments.length>1?arguments[1]:void 0);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=hZ(this,2,e,arguments.length>1?arguments[1]:void 0);return t[1]<<8|t[0]},getInt32:function(e){return sZ(hZ(this,4,e,arguments.length>1?arguments[1]:void 0))},getUint32:function(e){return sZ(hZ(this,4,e,arguments.length>1?arguments[1]:void 0))>>>0},getFloat32:function(e){return oZ(hZ(this,4,e,arguments.length>1?arguments[1]:void 0),23)},getFloat64:function(e){return oZ(hZ(this,8,e,arguments.length>1?arguments[1]:void 0),52)},setInt8:function(e,t){bZ(this,1,e,cZ,t)},setUint8:function(e,t){bZ(this,1,e,cZ,t)},setInt16:function(e,t){bZ(this,2,e,aZ,t,arguments.length>2?arguments[2]:void 0)},setUint16:function(e,t){bZ(this,2,e,aZ,t,arguments.length>2?arguments[2]:void 0)},setInt32:function(e,t){bZ(this,4,e,rZ,t,arguments.length>2?arguments[2]:void 0)},setUint32:function(e,t){bZ(this,4,e,rZ,t,arguments.length>2?arguments[2]:void 0)},setFloat32:function(e,t){bZ(this,4,e,dZ,t,arguments.length>2?arguments[2]:void 0)},setFloat64:function(e,t){bZ(this,8,e,uZ,t,arguments.length>2?arguments[2]:void 0)}});Fu(Ou,Qu),Fu(_u,Mu);var VZ={ArrayBuffer:Ou,DataView:_u},IZ=ye,SZ=Math.floor,RZ=Number.isInteger||function(e){return!IZ(e)&&isFinite(e)&&SZ(e)===e},gZ=si,fZ=RangeError,vZ=function(e){var t=gZ(e);if(t<0)throw fZ("The argument can't be less than 0");return t},YZ=RangeError,KZ=function(e,t){var n=vZ(e);if(n%t)throw YZ("Wrong offset");return n},NZ=Ql,CZ=Ce,JZ=lc,kZ=X,UZ=Gi,LZ=yo,TZ=so,HZ=Al,xZ=Hd.aTypedArrayConstructor,wZ=function(e){var t,n,i,l,o,c,a=JZ(this),r=kZ(e),s=arguments.length,d=s>1?arguments[1]:void 0,u=void 0!==d,Z=TZ(r);if(Z&&!HZ(Z))for(c=(o=LZ(r,Z)).next,r=[];!(l=CZ(c,o)).done;)r.push(l.value);for(u&&s>2&&(d=NZ(d,arguments[2])),n=UZ(r),i=new(xZ(a))(n),t=0;n>t;t++)i[t]=u?d(r[t],t):r[t];return i},FZ=Jt,zZ=Array.isArray||function(e){return"Array"==FZ(e)},PZ=ec,BZ=ye,jZ=Ze("species"),QZ=Array,MZ=function(e){var t;return zZ(e)&&(t=e.constructor,(PZ(t)&&(t===QZ||zZ(t.prototype))||BZ(t)&&null===(t=t[jZ]))&&(t=void 0)),void 0===t?QZ:t},EZ=Ql,DZ=Ht,OZ=X,AZ=Gi,_Z=function(e,t){return new(MZ(e))(0===t?0:t)},qZ=b([].push),$Z=function(e){var t=1==e,n=2==e,i=3==e,l=4==e,o=6==e,c=7==e,a=5==e||o;return function(r,s,d,u){for(var Z,h,b=OZ(r),m=DZ(b),p=EZ(s,d),y=AZ(m),G=0,X=u||_Z,W=t?X(r,y):n||c?X(r,0):void 0;y>G;G++)if((a||G in m)&&(h=p(Z=m[G],G,b),e))if(t)W[G]=h;else if(h)switch(e){case 3:return!0;case 5:return Z;case 6:return G;case 2:qZ(W,Z)}else switch(e){case 4:return!1;case 7:qZ(W,Z)}return o?-1:i||l?l:W}},eh={forEach:$Z(0),map:$Z(1),filter:$Z(2),some:$Z(3),every:$Z(4),find:$Z(5),findIndex:$Z(6),filterReject:$Z(7)},th=B,nh=be,ih=me,lh=Ze("species"),oh=w,ch=ye,ah=td,rh=cl,sh=o,dh=Ce,uh=me,Zh=jd,hh=Hd,bh=VZ,mh=Od,ph=Yt,yh=qt,Gh=RZ,Xh=pi,Wh=$d,Vh=KZ,Ih=ct,Sh=I,Rh=lo,gh=ye,fh=He,vh=Nl,Yh=Je,Kh=td,Nh=li.f,Ch=wZ,Jh=eh.forEach,kh=function(e){var t=th(e),n=nh.f;ih&&t&&!t[lh]&&n(t,lh,{configurable:!0,get:function(){return this}})},Uh=be,Lh=St,Th=function(e,t,n){var i,l;return ah&&oh(i=t.constructor)&&i!==n&&ch(l=i.prototype)&&l!==n.prototype&&ah(e,l),e},Hh=Fn.get,xh=Fn.set,wh=Fn.enforce,Fh=Uh.f,zh=Lh.f,Ph=Math.round,Bh=sh.RangeError,jh=bh.ArrayBuffer,Qh=jh.prototype,Mh=bh.DataView,Eh=hh.NATIVE_ARRAY_BUFFER_VIEWS,Dh=hh.TYPED_ARRAY_TAG,Oh=hh.TypedArray,Ah=hh.TypedArrayPrototype,_h=hh.aTypedArrayConstructor,qh=hh.isTypedArray,$h="BYTES_PER_ELEMENT",eb="Wrong length",tb=function(e,t){_h(e);for(var n=0,i=t.length,l=new e(i);i>n;)l[n]=t[n++];return l},nb=function(e,t){Fh(e,t,{get:function(){return Hh(this)[t]}})},ib=function(e){var t;return Yh(Qh,e)||"ArrayBuffer"==(t=Rh(e))||"SharedArrayBuffer"==t},lb=function(e,t){return qh(e)&&!fh(t)&&t in e&&Gh(+t)&&t>=0},ob=function(e,t){return t=Ih(t),lb(e,t)?ph(2,e[t]):zh(e,t)},cb=function(e,t,n){return t=Ih(t),!(lb(e,t)&&gh(n)&&Sh(n,"value"))||Sh(n,"get")||Sh(n,"set")||n.configurable||Sh(n,"writable")&&!n.writable||Sh(n,"enumerable")&&!n.enumerable?Fh(e,t,n):(e[t]=n.value,e)};uh?(Eh||(Lh.f=ob,Uh.f=cb,nb(Ah,"buffer"),nb(Ah,"byteOffset"),nb(Ah,"byteLength"),nb(Ah,"length")),rh({target:"Object",stat:!0,forced:!Eh},{getOwnPropertyDescriptor:ob,defineProperty:cb}),Fs.exports=function(e,t,n){var i=e.match(/\d+$/)[0]/8,l=e+(n?"Clamped":"")+"Array",o="get"+e,c="set"+e,a=sh[l],r=a,s=r&&r.prototype,d={},u=function(e,t){Fh(e,t,{get:function(){return function(e,t){var n=Hh(e);return n.view[o](t*i+n.byteOffset,!0)}(this,t)},set:function(e){return function(e,t,l){var o=Hh(e);n&&(l=(l=Ph(l))<0?0:l>255?255:255&l),o.view[c](t*i+o.byteOffset,l,!0)}(this,t,e)},enumerable:!0})};Eh?Zh&&(r=t((function(e,t,n,l){return mh(e,s),Th(gh(t)?ib(t)?void 0!==l?new a(t,Vh(n,i),l):void 0!==n?new a(t,Vh(n,i)):new a(t):qh(t)?tb(r,t):dh(Ch,r,t):new a(Wh(t)),e,r)})),Kh&&Kh(r,Oh),Jh(Nh(a),(function(e){e in r||yh(r,e,a[e])})),r.prototype=s):(r=t((function(e,t,n,l){mh(e,s);var o,c,a,d=0,Z=0;if(gh(t)){if(!ib(t))return qh(t)?tb(r,t):dh(Ch,r,t);o=t,Z=Vh(n,i);var h=t.byteLength;if(void 0===l){if(h%i)throw Bh(eb);if((c=h-Z)<0)throw Bh(eb)}else if((c=Xh(l)*i)+Z>h)throw Bh(eb);a=c/i}else a=Wh(t),o=new jh(c=a*i);for(xh(e,{buffer:o,byteOffset:Z,byteLength:c,length:a,view:new Mh(o)});d<a;)u(e,d++)})),Kh&&Kh(r,Oh),s=r.prototype=vh(Ah)),s.constructor!==r&&yh(s,"constructor",r),wh(s).TypedArrayConstructor=r,Dh&&yh(s,Dh,l);var Z=r!=a;d[l]=r,rh({global:!0,constructor:!0,forced:Z,sham:!Eh},d),$h in r||yh(r,$h,i),$h in s||yh(s,$h,i),kh(l)}):Fs.exports=function(){},(0,Fs.exports)("Float32",(function(e){return function(t,n,i){return e(this,t,n,i)}})),(0,Fs.exports)("Float64",(function(e){return function(t,n,i){return e(this,t,n,i)}})),(0,Fs.exports)("Int8",(function(e){return function(t,n,i){return e(this,t,n,i)}})),(0,Fs.exports)("Int16",(function(e){return function(t,n,i){return e(this,t,n,i)}})),(0,Fs.exports)("Int32",(function(e){return function(t,n,i){return e(this,t,n,i)}})),(0,Fs.exports)("Uint8",(function(e){return function(t,n,i){return e(this,t,n,i)}})),(0,Fs.exports)("Uint8",(function(e){return function(t,n,i){return e(this,t,n,i)}}),!0),(0,Fs.exports)("Uint16",(function(e){return function(t,n,i){return e(this,t,n,i)}})),(0,Fs.exports)("Uint32",(function(e){return function(t,n,i){return e(this,t,n,i)}}));var ab=it,rb=TypeError,sb=du,db=function(e){var t=ab(e,"number");if("number"==typeof t)throw rb("Can't convert number to bigint");return BigInt(t)},ub=lo,Zb=Ce,hb=a,bb=Hd.aTypedArray,mb=Hd.exportTypedArrayMethod,pb=b("".slice);mb("fill",(function(e){var t=arguments.length;bb(this);var n="Big"===pb(ub(this),0,3)?db(e):+e;return Zb(sb,this,n,t>1?arguments[1]:void 0,t>2?arguments[2]:void 0)}),hb((function(){var e=0;return new Int8Array(2).fill({valueOf:function(){return e++}}),1!==e}))),(0,Hd.exportTypedArrayStaticMethod)("from",wZ,jd);var yb=Hd.aTypedArrayConstructor;(0,Hd.exportTypedArrayStaticMethod)("of",(function(){for(var e=0,t=arguments.length,n=new(yb(this))(t);t>e;)n[e]=arguments[e++];return n}),jd);var Gb=o,Xb=Ce,Wb=Hd,Vb=Gi,Ib=KZ,Sb=X,Rb=a,gb=Gb.RangeError,fb=Gb.Int8Array,vb=fb&&fb.prototype,Yb=vb&&vb.set,Kb=Wb.aTypedArray,Nb=Wb.exportTypedArrayMethod,Cb=!Rb((function(){var e=new Uint8ClampedArray(2);return Xb(Yb,e,{length:1,0:3},1),3!==e[1]})),Jb=Cb&&Wb.NATIVE_ARRAY_BUFFER_VIEWS&&Rb((function(){var e=new fb(2);return e.set(1),e.set("2",1),0!==e[0]||2!==e[1]}));Nb("set",(function(e){Kb(this);var t=Ib(arguments.length>1?arguments[1]:void 0,1),n=Sb(e);if(Cb)return Xb(Yb,this,n,t);var i=this.length,l=Vb(n),o=0;if(l+t>i)throw gb("Wrong length");for(;o<l;)this[t+o]=n[o++]}),!Cb||Jb);var kb=Wu,Ub=Math.floor,Lb=function(e,t){var n=e.length,i=Ub(n/2);return n<8?Tb(e,t):Hb(e,Lb(kb(e,0,i),t),Lb(kb(e,i),t),t)},Tb=function(e,t){for(var n,i,l=e.length,o=1;o<l;){for(i=o,n=e[o];i&&t(e[i-1],n)>0;)e[i]=e[--i];i!==o++&&(e[i]=n)}return e},Hb=function(e,t,n,i){for(var l=t.length,o=n.length,c=0,a=0;c<l||a<o;)e[c+a]=c<l&&a<o?i(t[c],n[a])<=0?t[c++]:n[a++]:c<l?t[c++]:n[a++];return e},xb=Lb,wb=j.match(/firefox\/(\d+)/i),Fb=!!wb&&+wb[1],zb=/MSIE|Trident/.test(j),Pb=j.match(/AppleWebKit\/(\d+)\./),Bb=!!Pb&&+Pb[1],jb=b,Qb=a,Mb=Be,Eb=xb,Db=Fb,Ob=zb,Ab=_,_b=Bb,qb=Hd.aTypedArray,$b=Hd.exportTypedArrayMethod,em=o.Uint16Array,tm=em&&jb(em.prototype.sort),nm=!(!tm||Qb((function(){tm(new em(2),null)}))&&Qb((function(){tm(new em(2),{})}))),im=!!tm&&!Qb((function(){if(Ab)return Ab<74;if(Db)return Db<67;if(Ob)return!0;if(_b)return _b<602;var e,t,n=new em(516),i=Array(516);for(e=0;e<516;e++)t=e%4,n[e]=515-e,i[e]=e-2*t+3;for(tm(n,(function(e,t){return(e/4|0)-(t/4|0)})),e=0;e<516;e++)if(n[e]!==i[e])return!0}));$b("sort",(function(e){return void 0!==e&&Mb(e),im?tm(this,e):Eb(qb(this),function(e){return function(t,n){return void 0!==e?+e(t,n)||0:n!=n?-1:t!=t?1:0===t&&0===n?1/t>0&&1/n<0?1:-1:t>n}}(e))}),!im||nm);var lm=Ve("span").classList,om=lm&&lm.constructor&&lm.constructor.prototype,cm=om===Object.prototype?void 0:om,am=cl,rm=Ce,sm=w,dm=Za,um=Qc,Zm=td,hm=oa,bm=qt,mm=ii,pm=Ml,ym=cn.PROPER,Gm=cn.CONFIGURABLE,Xm=ta.IteratorPrototype,Wm=ta.BUGGY_SAFARI_ITERATORS,Vm=Ze("iterator"),Im="keys",Sm="values",Rm="entries",gm=function(){return this},fm=function(e,t,n,i,l,o,c){dm(n,t,i);var a,r,s,d=function(e){if(e===l&&m)return m;if(!Wm&&e in h)return h[e];switch(e){case Im:case Sm:case Rm:return function(){return new n(this,e)}}return function(){return new n(this)}},u=t+" Iterator",Z=!1,h=e.prototype,b=h[Vm]||h["@@iterator"]||l&&h[l],m=!Wm&&b||d(l),p="Array"==t&&h.entries||b;if(p&&(a=um(p.call(new e)))!==Object.prototype&&a.next&&(um(a)!==Xm&&(Zm?Zm(a,Xm):sm(a[Vm])||mm(a,Vm,gm)),hm(a,u,!0)),ym&&l==Sm&&b&&b.name!==Sm&&(Gm?bm(h,"name",Sm):(Z=!0,m=function(){return rm(b,this)})),l)if(r={values:d(Sm),keys:o?m:d(Im),entries:d(Rm)},c)for(s in r)(Wm||Z||!(s in h))&&mm(h,s,r[s]);else am({target:t,proto:!0,forced:Wm||Z},r);return h[Vm]!==m&&mm(h,Vm,m,{name:l}),pm[t]=m,r},vm=Ft,Ym=Tl,Km=Ml,Nm=Fn,Cm=be.f,Jm=fm,km=me,Um="Array Iterator",Lm=Nm.set,Tm=Nm.getterFor(Um),Hm=Jm(Array,"Array",(function(e,t){Lm(this,{type:Um,target:vm(e),index:0,kind:t})}),(function(){var e=Tm(this),t=e.target,n=e.kind,i=e.index++;return!t||i>=t.length?(e.target=void 0,{value:void 0,done:!0}):"keys"==n?{value:i,done:!1}:"values"==n?{value:t[i],done:!1}:{value:[i,t[i]],done:!1}}),"values"),xm=Km.Arguments=Km.Array;if(Ym("keys"),Ym("values"),Ym("entries"),km&&"values"!==xm.name)try{Cm(xm,"name",{value:"values"})}catch(e){}var wm=o,Fm={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},zm=cm,Pm=Hm,Bm=qt,jm=Ze,Qm=jm("iterator"),Mm=jm("toStringTag"),Em=Pm.values,Dm=function(e,t){if(e){if(e[Qm]!==Em)try{Bm(e,Qm,Em)}catch(t){e[Qm]=Em}if(e[Mm]||Bm(e,Mm,t),Fm[t])for(var n in Pm)if(e[n]!==Pm[n])try{Bm(e,n,Pm[n])}catch(t){e[n]=Pm[n]}}};for(var Om in Fm)Dm(wm[Om]&&wm[Om].prototype,Om);Dm(zm,"DOMTokenList");var Am,_m,qm,$m,ep=b([].slice),tp=TypeError,np=function(e,t){if(e<t)throw tp("Not enough arguments");return e},ip=/(?:ipad|iphone|ipod).*applewebkit/i.test(j),lp="process"==Jt(o.process),op=o,cp=$r,ap=Ql,rp=w,sp=I,dp=a,up=Gl,Zp=ep,hp=Ve,bp=np,mp=ip,pp=lp,yp=op.setImmediate,Gp=op.clearImmediate,Xp=op.process,Wp=op.Dispatch,Vp=op.Function,Ip=op.MessageChannel,Sp=op.String,Rp=0,gp={},fp="onreadystatechange";try{Am=op.location}catch(e){}var vp=function(e){if(sp(gp,e)){var t=gp[e];delete gp[e],t()}},Yp=function(e){return function(){vp(e)}},Kp=function(e){vp(e.data)},Np=function(e){op.postMessage(Sp(e),Am.protocol+"//"+Am.host)};yp&&Gp||(yp=function(e){bp(arguments.length,1);var t=rp(e)?e:Vp(e),n=Zp(arguments,1);return gp[++Rp]=function(){cp(t,void 0,n)},_m(Rp),Rp},Gp=function(e){delete gp[e]},pp?_m=function(e){Xp.nextTick(Yp(e))}:Wp&&Wp.now?_m=function(e){Wp.now(Yp(e))}:Ip&&!mp?($m=(qm=new Ip).port2,qm.port1.onmessage=Kp,_m=ap($m.postMessage,$m)):op.addEventListener&&rp(op.postMessage)&&!op.importScripts&&Am&&"file:"!==Am.protocol&&!dp(Np)?(_m=Np,op.addEventListener("message",Kp,!1)):_m=fp in hp("script")?function(e){up.appendChild(hp("script")).onreadystatechange=function(){up.removeChild(this),vp(e)}}:function(e){setTimeout(Yp(e),0)});var Cp={set:yp,clear:Gp},Jp=Cp.clear;cl({global:!0,bind:!0,enumerable:!0,forced:o.clearImmediate!==Jp},{clearImmediate:Jp});var kp=Cp.set;cl({global:!0,bind:!0,enumerable:!0,forced:o.setImmediate!==kp},{setImmediate:kp});var Up=Ja.charAt,Lp=ma,Tp=Fn,Hp=fm,xp="String Iterator",wp=Tp.set,Fp=Tp.getterFor(xp);Hp(String,"String",(function(e){wp(this,{type:xp,string:Lp(e),index:0})}),(function(){var e,t=Fp(this),n=t.string,i=t.index;return i>=n.length?{value:void 0,done:!0}:(e=Up(n,i),t.index+=e.length,{value:e,done:!1})}));var zp=a,Pp=Ze("iterator"),Bp=!zp((function(){var e=new URL("b?a=1&b=2&c=3","http://a"),t=e.searchParams,n="";return e.pathname="c%20d",t.forEach((function(e,i){t.delete("b"),n+=i+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[Pp]||"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"!==n||"x"!==new URL("http://x",void 0).host})),jp=me,Qp=b,Mp=Ce,Ep=a,Dp=dl,Op=ki,Ap=Rt,_p=X,qp=Ht,$p=Object.assign,ey=Object.defineProperty,ty=Qp([].concat),ny=!$p||Ep((function(){if(jp&&1!==$p({b:1},$p(ey({},"a",{enumerable:!0,get:function(){ey(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},n=Symbol(),i="abcdefghijklmnopqrst";return e[n]=7,i.split("").forEach((function(e){t[e]=e})),7!=$p({},e)[n]||Dp($p({},t)).join("")!=i}))?function(e,t){for(var n=_p(e),i=arguments.length,l=1,o=Op.f,c=Ap.f;i>l;)for(var a,r=qp(arguments[l++]),s=o?ty(Dp(r),o(r)):Dp(r),d=s.length,u=0;d>u;)a=s[u++],jp&&!Mp(c,r,a)||(n[a]=r[a]);return n}:$p,iy=Ye,ly=Vo,oy=Ql,cy=Ce,ay=X,ry=function(e,t,n,i){try{return i?t(iy(n)[0],n[1]):t(n)}catch(t){ly(e,"throw",t)}},sy=Al,dy=ec,uy=Gi,Zy=bu,hy=yo,by=so,my=Array,py=b,yy=2147483647,Gy=/[^\0-\u007E]/,Xy=/[.\u3002\uFF0E\uFF61]/g,Wy="Overflow: input needs wider integers to process",Vy=RangeError,Iy=py(Xy.exec),Sy=Math.floor,Ry=String.fromCharCode,gy=py("".charCodeAt),fy=py([].join),vy=py([].push),Yy=py("".replace),Ky=py("".split),Ny=py("".toLowerCase),Cy=function(e){return e+22+75*(e<26)},Jy=function(e,t,n){var i=0;for(e=n?Sy(e/700):e>>1,e+=Sy(e/t);e>455;)e=Sy(e/35),i+=36;return Sy(i+36*e/(e+38))},ky=function(e){var t=[];e=function(e){for(var t=[],n=0,i=e.length;n<i;){var l=gy(e,n++);if(l>=55296&&l<=56319&&n<i){var o=gy(e,n++);56320==(64512&o)?vy(t,((1023&l)<<10)+(1023&o)+65536):(vy(t,l),n--)}else vy(t,l)}return t}(e);var n,i,l=e.length,o=128,c=0,a=72;for(n=0;n<e.length;n++)(i=e[n])<128&&vy(t,Ry(i));var r=t.length,s=r;for(r&&vy(t,"-");s<l;){var d=yy;for(n=0;n<e.length;n++)(i=e[n])>=o&&i<d&&(d=i);var u=s+1;if(d-o>Sy((yy-c)/u))throw Vy(Wy);for(c+=(d-o)*u,o=d,n=0;n<e.length;n++){if((i=e[n])<o&&++c>yy)throw Vy(Wy);if(i==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;vy(t,Ry(Cy(b+m%p))),Z=Sy(m/p),h+=36}vy(t,Ry(Cy(Z))),a=Jy(c,u,s==r),c=0,s++}}c++,o++}return fy(t,"")},Uy=cl,Ly=o,Ty=Ce,Hy=b,xy=me,wy=Bp,Fy=ii,zy=Md,Py=oa,By=Za,jy=Fn,Qy=Od,My=w,Ey=I,Dy=Ql,Oy=lo,Ay=Ye,_y=ye,qy=ma,$y=Nl,eG=Yt,tG=yo,nG=so,iG=np,lG=xb,oG=Ze("iterator"),cG="URLSearchParams",aG="URLSearchParamsIterator",rG=jy.set,sG=jy.getterFor(cG),dG=jy.getterFor(aG),uG=Object.getOwnPropertyDescriptor,ZG=function(e){if(!xy)return Ly[e];var t=uG(Ly,e);return t&&t.value},hG=ZG("fetch"),bG=ZG("Request"),mG=ZG("Headers"),pG=bG&&bG.prototype,yG=mG&&mG.prototype,GG=Ly.RegExp,XG=Ly.TypeError,WG=Ly.decodeURIComponent,VG=Ly.encodeURIComponent,IG=Hy("".charAt),SG=Hy([].join),RG=Hy([].push),gG=Hy("".replace),fG=Hy([].shift),vG=Hy([].splice),YG=Hy("".split),KG=Hy("".slice),NG=/\+/g,CG=Array(4),JG=function(e){return CG[e-1]||(CG[e-1]=GG("((?:%[\\da-f]{2}){"+e+"})","gi"))},kG=function(e){try{return WG(e)}catch(t){return e}},UG=function(e){var t=gG(e,NG," "),n=4;try{return WG(t)}catch(e){for(;n;)t=gG(t,JG(n--),kG);return t}},LG=/[!'()~]|%20/g,TG={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},HG=function(e){return TG[e]},xG=function(e){return gG(VG(e),LG,HG)},wG=By((function(e,t){rG(this,{type:aG,iterator:tG(sG(e).entries),kind:t})}),"Iterator",(function(){var e=dG(this),t=e.kind,n=e.iterator.next(),i=n.value;return n.done||(n.value="keys"===t?i.key:"values"===t?i.value:[i.key,i.value]),n}),!0),FG=function(e){this.entries=[],this.url=null,void 0!==e&&(_y(e)?this.parseObject(e):this.parseQuery("string"==typeof e?"?"===IG(e,0)?KG(e,1):e:qy(e)))};FG.prototype={type:cG,bindURL:function(e){this.url=e,this.update()},parseObject:function(e){var t,n,i,l,o,c,a,r=nG(e);if(r)for(n=(t=tG(e,r)).next;!(i=Ty(n,t)).done;){if(o=(l=tG(Ay(i.value))).next,(c=Ty(o,l)).done||(a=Ty(o,l)).done||!Ty(o,l).done)throw XG("Expected sequence with length 2");RG(this.entries,{key:qy(c.value),value:qy(a.value)})}else for(var s in e)Ey(e,s)&&RG(this.entries,{key:s,value:qy(e[s])})},parseQuery:function(e){if(e)for(var t,n,i=YG(e,"&"),l=0;l<i.length;)(t=i[l++]).length&&(n=YG(t,"="),RG(this.entries,{key:UG(fG(n)),value:UG(SG(n,"="))}))},serialize:function(){for(var e,t=this.entries,n=[],i=0;i<t.length;)e=t[i++],RG(n,xG(e.key)+"="+xG(e.value));return SG(n,"&")},update:function(){this.entries.length=0,this.parseQuery(this.url.query)},updateURL:function(){this.url&&this.url.update()}};var zG=function(){Qy(this,PG);var e=arguments.length>0?arguments[0]:void 0;rG(this,new FG(e))},PG=zG.prototype;if(zy(PG,{append:function(e,t){iG(arguments.length,2);var n=sG(this);RG(n.entries,{key:qy(e),value:qy(t)}),n.updateURL()},delete:function(e){iG(arguments.length,1);for(var t=sG(this),n=t.entries,i=qy(e),l=0;l<n.length;)n[l].key===i?vG(n,l,1):l++;t.updateURL()},get:function(e){iG(arguments.length,1);for(var t=sG(this).entries,n=qy(e),i=0;i<t.length;i++)if(t[i].key===n)return t[i].value;return null},getAll:function(e){iG(arguments.length,1);for(var t=sG(this).entries,n=qy(e),i=[],l=0;l<t.length;l++)t[l].key===n&&RG(i,t[l].value);return i},has:function(e){iG(arguments.length,1);for(var t=sG(this).entries,n=qy(e),i=0;i<t.length;)if(t[i++].key===n)return!0;return!1},set:function(e,t){iG(arguments.length,1);for(var n,i=sG(this),l=i.entries,o=!1,c=qy(e),a=qy(t),r=0;r<l.length;r++)(n=l[r]).key===c&&(o?vG(l,r--,1):(o=!0,n.value=a));o||RG(l,{key:c,value:a}),i.updateURL()},sort:function(){var e=sG(this);lG(e.entries,(function(e,t){return e.key>t.key?1:-1})),e.updateURL()},forEach:function(e){for(var t,n=sG(this).entries,i=Dy(e,arguments.length>1?arguments[1]:void 0),l=0;l<n.length;)i((t=n[l++]).value,t.key,this)},keys:function(){return new wG(this,"keys")},values:function(){return new wG(this,"values")},entries:function(){return new wG(this,"entries")}},{enumerable:!0}),Fy(PG,oG,PG.entries,{name:"entries"}),Fy(PG,"toString",(function(){return sG(this).serialize()}),{enumerable:!0}),Py(zG,cG),Uy({global:!0,constructor:!0,forced:!wy},{URLSearchParams:zG}),!wy&&My(mG)){var BG=Hy(yG.has),jG=Hy(yG.set),QG=function(e){if(_y(e)){var t,n=e.body;if(Oy(n)===cG)return t=e.headers?new mG(e.headers):new mG,BG(t,"content-type")||jG(t,"content-type","application/x-www-form-urlencoded;charset=UTF-8"),$y(e,{body:eG(0,qy(n)),headers:eG(0,t)})}return e};if(My(hG)&&Uy({global:!0,enumerable:!0,dontCallGetSet:!0,forced:!0},{fetch:function(e){return hG(e,arguments.length>1?QG(arguments[1]):{})}}),My(bG)){var MG=function(e){return Qy(this,pG),new bG(e,arguments.length>1?QG(arguments[1]):{})};pG.constructor=MG,MG.prototype=pG,Uy({global:!0,constructor:!0,dontCallGetSet:!0,forced:!0},{Request:MG})}}var EG,DG=cl,OG=me,AG=Bp,_G=o,qG=Ql,$G=b,eX=ii,tX=Rc,nX=Od,iX=I,lX=ny,oX=function(e){var t=ay(e),n=dy(this),i=arguments.length,l=i>1?arguments[1]:void 0,o=void 0!==l;o&&(l=oy(l,i>2?arguments[2]:void 0));var c,a,r,s,d,u,Z=by(t),h=0;if(!Z||this===my&&sy(Z))for(c=uy(t),a=n?new this(c):my(c);c>h;h++)u=o?l(t[h],h):t[h],Zy(a,h,u);else for(d=(s=hy(t,Z)).next,a=n?new this:[];!(r=cy(d,s)).done;h++)u=o?ry(s,l,[r.value,h],!0):r.value,Zy(a,h,u);return a.length=h,a},cX=Wu,aX=Ja.codeAt,rX=function(e){var t,n,i=[],l=Ky(Yy(Ny(e),Xy,"."),".");for(t=0;t<l.length;t++)n=l[t],vy(i,Iy(Gy,n)?"xn--"+ky(n):n);return fy(i,".")},sX=ma,dX=oa,uX=np,ZX={URLSearchParams:zG,getState:sG},hX=Fn,bX=hX.set,mX=hX.getterFor("URL"),pX=ZX.URLSearchParams,yX=ZX.getState,GX=_G.URL,XX=_G.TypeError,WX=_G.parseInt,VX=Math.floor,IX=Math.pow,SX=$G("".charAt),RX=$G(/./.exec),gX=$G([].join),fX=$G(1..toString),vX=$G([].pop),YX=$G([].push),KX=$G("".replace),NX=$G([].shift),CX=$G("".split),JX=$G("".slice),kX=$G("".toLowerCase),UX=$G([].unshift),LX="Invalid scheme",TX="Invalid host",HX="Invalid port",xX=/[a-z]/i,wX=/[\d+-.a-z]/i,FX=/\d/,zX=/^0x/i,PX=/^[0-7]+$/,BX=/^\d+$/,jX=/^[\da-f]+$/i,QX=/[\0\t\n\r #%/:<>?@[\\\]^|]/,MX=/[\0\t\n\r #/:<>?@[\\\]^|]/,EX=/^[\u0000-\u0020]+|[\u0000-\u0020]+$/g,DX=/[\t\n\r]/g,OX=function(e){var t,n,i,l;if("number"==typeof e){for(t=[],n=0;n<4;n++)UX(t,e%256),e=VX(e/256);return gX(t,".")}if("object"==typeof e){for(t="",i=function(e){for(var t=null,n=1,i=null,l=0,o=0;o<8;o++)0!==e[o]?(l>n&&(t=i,n=l),i=null,l=0):(null===i&&(i=o),++l);return l>n&&(t=i,n=l),t}(e),n=0;n<8;n++)l&&0===e[n]||(l&&(l=!1),i===n?(t+=n?":":"::",l=!0):(t+=fX(e[n],16),n<7&&(t+=":")));return"["+t+"]"}return e},AX={},_X=lX({},AX,{" ":1,'"':1,"<":1,">":1,"`":1}),qX=lX({},_X,{"#":1,"?":1,"{":1,"}":1}),$X=lX({},qX,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),eW=function(e,t){var n=aX(e,0);return n>32&&n<127&&!iX(t,e)?e:encodeURIComponent(e)},tW={ftp:21,file:null,http:80,https:443,ws:80,wss:443},nW=function(e,t){var n;return 2==e.length&&RX(xX,SX(e,0))&&(":"==(n=SX(e,1))||!t&&"|"==n)},iW=function(e){var t;return e.length>1&&nW(JX(e,0,2))&&(2==e.length||"/"===(t=SX(e,2))||"\\"===t||"?"===t||"#"===t)},lW=function(e){return"."===e||"%2e"===kX(e)},oW={},cW={},aW={},rW={},sW={},dW={},uW={},ZW={},hW={},bW={},mW={},pW={},yW={},GW={},XW={},WW={},VW={},IW={},SW={},RW={},gW={},fW=function(e,t,n){var i,l,o,c=sX(e);if(t){if(l=this.parse(c))throw XX(l);this.searchParams=null}else{if(void 0!==n&&(i=new fW(n,!0)),l=this.parse(c,null,i))throw XX(l);(o=yX(new pX)).bindURL(this),this.searchParams=o}};fW.prototype={type:"URL",parse:function(e,t,n){var i,l,o,c,a,r=this,s=t||oW,d=0,u="",Z=!1,h=!1,b=!1;for(e=sX(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=KX(e,EX,"")),e=KX(e,DX,""),i=oX(e);d<=i.length;){switch(l=i[d],s){case oW:if(!l||!RX(xX,l)){if(t)return LX;s=aW;continue}u+=kX(l),s=cW;break;case cW:if(l&&(RX(wX,l)||"+"==l||"-"==l||"."==l))u+=kX(l);else{if(":"!=l){if(t)return LX;u="",s=aW,d=0;continue}if(t&&(r.isSpecial()!=iX(tW,u)||"file"==u&&(r.includesCredentials()||null!==r.port)||"file"==r.scheme&&!r.host))return;if(r.scheme=u,t)return void(r.isSpecial()&&tW[r.scheme]==r.port&&(r.port=null));u="","file"==r.scheme?s=GW:r.isSpecial()&&n&&n.scheme==r.scheme?s=rW:r.isSpecial()?s=ZW:"/"==i[d+1]?(s=sW,d++):(r.cannotBeABaseURL=!0,YX(r.path,""),s=SW)}break;case aW:if(!n||n.cannotBeABaseURL&&"#"!=l)return LX;if(n.cannotBeABaseURL&&"#"==l){r.scheme=n.scheme,r.path=cX(n.path),r.query=n.query,r.fragment="",r.cannotBeABaseURL=!0,s=gW;break}s="file"==n.scheme?GW:dW;continue;case rW:if("/"!=l||"/"!=i[d+1]){s=dW;continue}s=hW,d++;break;case sW:if("/"==l){s=bW;break}s=IW;continue;case dW:if(r.scheme=n.scheme,l==EG)r.username=n.username,r.password=n.password,r.host=n.host,r.port=n.port,r.path=cX(n.path),r.query=n.query;else if("/"==l||"\\"==l&&r.isSpecial())s=uW;else if("?"==l)r.username=n.username,r.password=n.password,r.host=n.host,r.port=n.port,r.path=cX(n.path),r.query="",s=RW;else{if("#"!=l){r.username=n.username,r.password=n.password,r.host=n.host,r.port=n.port,r.path=cX(n.path),r.path.length--,s=IW;continue}r.username=n.username,r.password=n.password,r.host=n.host,r.port=n.port,r.path=cX(n.path),r.query=n.query,r.fragment="",s=gW}break;case uW:if(!r.isSpecial()||"/"!=l&&"\\"!=l){if("/"!=l){r.username=n.username,r.password=n.password,r.host=n.host,r.port=n.port,s=IW;continue}s=bW}else s=hW;break;case ZW:if(s=hW,"/"!=l||"/"!=SX(u,d+1))continue;d++;break;case hW:if("/"!=l&&"\\"!=l){s=bW;continue}break;case bW:if("@"==l){Z&&(u="%40"+u),Z=!0,o=oX(u);for(var m=0;m<o.length;m++){var p=o[m];if(":"!=p||b){var y=eW(p,$X);b?r.password+=y:r.username+=y}else b=!0}u=""}else if(l==EG||"/"==l||"?"==l||"#"==l||"\\"==l&&r.isSpecial()){if(Z&&""==u)return"Invalid authority";d-=oX(u).length+1,u="",s=mW}else u+=l;break;case mW:case pW:if(t&&"file"==r.scheme){s=WW;continue}if(":"!=l||h){if(l==EG||"/"==l||"?"==l||"#"==l||"\\"==l&&r.isSpecial()){if(r.isSpecial()&&""==u)return TX;if(t&&""==u&&(r.includesCredentials()||null!==r.port))return;if(c=r.parseHost(u))return c;if(u="",s=VW,t)return;continue}"["==l?h=!0:"]"==l&&(h=!1),u+=l}else{if(""==u)return TX;if(c=r.parseHost(u))return c;if(u="",s=yW,t==pW)return}break;case yW:if(!RX(FX,l)){if(l==EG||"/"==l||"?"==l||"#"==l||"\\"==l&&r.isSpecial()||t){if(""!=u){var G=WX(u,10);if(G>65535)return HX;r.port=r.isSpecial()&&G===tW[r.scheme]?null:G,u=""}if(t)return;s=VW;continue}return HX}u+=l;break;case GW:if(r.scheme="file","/"==l||"\\"==l)s=XW;else{if(!n||"file"!=n.scheme){s=IW;continue}if(l==EG)r.host=n.host,r.path=cX(n.path),r.query=n.query;else if("?"==l)r.host=n.host,r.path=cX(n.path),r.query="",s=RW;else{if("#"!=l){iW(gX(cX(i,d),""))||(r.host=n.host,r.path=cX(n.path),r.shortenPath()),s=IW;continue}r.host=n.host,r.path=cX(n.path),r.query=n.query,r.fragment="",s=gW}}break;case XW:if("/"==l||"\\"==l){s=WW;break}n&&"file"==n.scheme&&!iW(gX(cX(i,d),""))&&(nW(n.path[0],!0)?YX(r.path,n.path[0]):r.host=n.host),s=IW;continue;case WW:if(l==EG||"/"==l||"\\"==l||"?"==l||"#"==l){if(!t&&nW(u))s=IW;else if(""==u){if(r.host="",t)return;s=VW}else{if(c=r.parseHost(u))return c;if("localhost"==r.host&&(r.host=""),t)return;u="",s=VW}continue}u+=l;break;case VW:if(r.isSpecial()){if(s=IW,"/"!=l&&"\\"!=l)continue}else if(t||"?"!=l)if(t||"#"!=l){if(l!=EG&&(s=IW,"/"!=l))continue}else r.fragment="",s=gW;else r.query="",s=RW;break;case IW:if(l==EG||"/"==l||"\\"==l&&r.isSpecial()||!t&&("?"==l||"#"==l)){if(".."===(a=kX(a=u))||"%2e."===a||".%2e"===a||"%2e%2e"===a?(r.shortenPath(),"/"==l||"\\"==l&&r.isSpecial()||YX(r.path,"")):lW(u)?"/"==l||"\\"==l&&r.isSpecial()||YX(r.path,""):("file"==r.scheme&&!r.path.length&&nW(u)&&(r.host&&(r.host=""),u=SX(u,0)+":"),YX(r.path,u)),u="","file"==r.scheme&&(l==EG||"?"==l||"#"==l))for(;r.path.length>1&&""===r.path[0];)NX(r.path);"?"==l?(r.query="",s=RW):"#"==l&&(r.fragment="",s=gW)}else u+=eW(l,qX);break;case SW:"?"==l?(r.query="",s=RW):"#"==l?(r.fragment="",s=gW):l!=EG&&(r.path[0]+=eW(l,AX));break;case RW:t||"#"!=l?l!=EG&&("'"==l&&r.isSpecial()?r.query+="%27":r.query+="#"==l?"%23":eW(l,AX)):(r.fragment="",s=gW);break;case gW:l!=EG&&(r.fragment+=eW(l,_X))}d++}},parseHost:function(e){var t,n,i;if("["==SX(e,0)){if("]"!=SX(e,e.length-1))return TX;if(t=function(e){var t,n,i,l,o,c,a,r=[0,0,0,0,0,0,0,0],s=0,d=null,u=0,Z=function(){return SX(e,u)};if(":"==Z()){if(":"!=SX(e,1))return;u+=2,d=++s}for(;Z();){if(8==s)return;if(":"!=Z()){for(t=n=0;n<4&&RX(jX,Z());)t=16*t+WX(Z(),16),u++,n++;if("."==Z()){if(0==n)return;if(u-=n,s>6)return;for(i=0;Z();){if(l=null,i>0){if(!("."==Z()&&i<4))return;u++}if(!RX(FX,Z()))return;for(;RX(FX,Z());){if(o=WX(Z(),10),null===l)l=o;else{if(0==l)return;l=10*l+o}if(l>255)return;u++}r[s]=256*r[s]+l,2!=++i&&4!=i||s++}if(4!=i)return;break}if(":"==Z()){if(u++,!Z())return}else if(Z())return;r[s++]=t}else{if(null!==d)return;u++,d=++s}}if(null!==d)for(c=s-d,s=7;0!=s&&c>0;)a=r[s],r[s--]=r[d+c-1],r[d+--c]=a;else if(8!=s)return;return r}(JX(e,1,-1)),!t)return TX;this.host=t}else if(this.isSpecial()){if(e=rX(e),RX(QX,e))return TX;if(t=function(e){var t,n,i,l,o,c,a,r=CX(e,".");if(r.length&&""==r[r.length-1]&&r.length--,(t=r.length)>4)return e;for(n=[],i=0;i<t;i++){if(""==(l=r[i]))return e;if(o=10,l.length>1&&"0"==SX(l,0)&&(o=RX(zX,l)?16:8,l=JX(l,8==o?1:2)),""===l)c=0;else{if(!RX(10==o?BX:8==o?PX:jX,l))return e;c=WX(l,o)}YX(n,c)}for(i=0;i<t;i++)if(c=n[i],i==t-1){if(c>=IX(256,5-t))return null}else if(c>255)return null;for(a=vX(n),i=0;i<n.length;i++)a+=n[i]*IX(256,3-i);return a}(e),null===t)return TX;this.host=t}else{if(RX(MX,e))return TX;for(t="",n=oX(e),i=0;i<n.length;i++)t+=eW(n[i],AX);this.host=t}},cannotHaveUsernamePasswordPort:function(){return!this.host||this.cannotBeABaseURL||"file"==this.scheme},includesCredentials:function(){return""!=this.username||""!=this.password},isSpecial:function(){return iX(tW,this.scheme)},shortenPath:function(){var e=this.path,t=e.length;!t||"file"==this.scheme&&1==t&&nW(e[0],!0)||e.length--},serialize:function(){var e=this,t=e.scheme,n=e.username,i=e.password,l=e.host,o=e.port,c=e.path,a=e.query,r=e.fragment,s=t+":";return null!==l?(s+="//",e.includesCredentials()&&(s+=n+(i?":"+i:"")+"@"),s+=OX(l),null!==o&&(s+=":"+o)):"file"==t&&(s+="//"),s+=e.cannotBeABaseURL?c[0]:c.length?"/"+gX(c,"/"):"",null!==a&&(s+="?"+a),null!==r&&(s+="#"+r),s},setHref:function(e){var t=this.parse(e);if(t)throw XX(t);this.searchParams.update()},getOrigin:function(){var e=this.scheme,t=this.port;if("blob"==e)try{return new vW(e.path[0]).origin}catch(e){return"null"}return"file"!=e&&this.isSpecial()?e+"://"+OX(this.host)+(null!==t?":"+t:""):"null"},getProtocol:function(){return this.scheme+":"},setProtocol:function(e){this.parse(sX(e)+":",oW)},getUsername:function(){return this.username},setUsername:function(e){var t=oX(sX(e));if(!this.cannotHaveUsernamePasswordPort()){this.username="";for(var n=0;n<t.length;n++)this.username+=eW(t[n],$X)}},getPassword:function(){return this.password},setPassword:function(e){var t=oX(sX(e));if(!this.cannotHaveUsernamePasswordPort()){this.password="";for(var n=0;n<t.length;n++)this.password+=eW(t[n],$X)}},getHost:function(){var e=this.host,t=this.port;return null===e?"":null===t?OX(e):OX(e)+":"+t},setHost:function(e){this.cannotBeABaseURL||this.parse(e,mW)},getHostname:function(){var e=this.host;return null===e?"":OX(e)},setHostname:function(e){this.cannotBeABaseURL||this.parse(e,pW)},getPort:function(){var e=this.port;return null===e?"":sX(e)},setPort:function(e){this.cannotHaveUsernamePasswordPort()||(""==(e=sX(e))?this.port=null:this.parse(e,yW))},getPathname:function(){var e=this.path;return this.cannotBeABaseURL?e[0]:e.length?"/"+gX(e,"/"):""},setPathname:function(e){this.cannotBeABaseURL||(this.path=[],this.parse(e,VW))},getSearch:function(){var e=this.query;return e?"?"+e:""},setSearch:function(e){""==(e=sX(e))?this.query=null:("?"==SX(e,0)&&(e=JX(e,1)),this.query="",this.parse(e,RW)),this.searchParams.update()},getSearchParams:function(){return this.searchParams.facade},getHash:function(){var e=this.fragment;return e?"#"+e:""},setHash:function(e){""!=(e=sX(e))?("#"==SX(e,0)&&(e=JX(e,1)),this.fragment="",this.parse(e,gW)):this.fragment=null},update:function(){this.query=this.searchParams.serialize()||null}};var vW=function(e){var t=nX(this,YW),n=uX(arguments.length,1)>1?arguments[1]:void 0,i=bX(t,new fW(e,!1,n));OG||(t.href=i.serialize(),t.origin=i.getOrigin(),t.protocol=i.getProtocol(),t.username=i.getUsername(),t.password=i.getPassword(),t.host=i.getHost(),t.hostname=i.getHostname(),t.port=i.getPort(),t.pathname=i.getPathname(),t.search=i.getSearch(),t.searchParams=i.getSearchParams(),t.hash=i.getHash())},YW=vW.prototype,KW=function(e,t){return{get:function(){return mX(this)[e]()},set:t&&function(e){return mX(this)[t](e)},configurable:!0,enumerable:!0}};if(OG&&(tX(YW,"href",KW("serialize","setHref")),tX(YW,"origin",KW("getOrigin")),tX(YW,"protocol",KW("getProtocol","setProtocol")),tX(YW,"username",KW("getUsername","setUsername")),tX(YW,"password",KW("getPassword","setPassword")),tX(YW,"host",KW("getHost","setHost")),tX(YW,"hostname",KW("getHostname","setHostname")),tX(YW,"port",KW("getPort","setPort")),tX(YW,"pathname",KW("getPathname","setPathname")),tX(YW,"search",KW("getSearch","setSearch")),tX(YW,"searchParams",KW("getSearchParams")),tX(YW,"hash",KW("getHash","setHash"))),eX(YW,"toJSON",(function(){return mX(this).serialize()}),{enumerable:!0}),eX(YW,"toString",(function(){return mX(this).serialize()}),{enumerable:!0}),GX){var NW=GX.createObjectURL,CW=GX.revokeObjectURL;NW&&eX(vW,"createObjectURL",qG(NW,GX)),CW&&eX(vW,"revokeObjectURL",qG(CW,GX))}dX(vW,"URL"),DG({global:!0,constructor:!0,forced:!AG,sham:!OG},{URL:vW});var JW=Ce;function kW(e,t,n,i){return new(n||(n=Promise))((function(l,o){function c(e){try{r(i.next(e))}catch(e){o(e)}}function a(e){try{r(i.throw(e))}catch(e){o(e)}}function r(e){var t;e.done?l(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(c,a)}r((i=i.apply(e,t||[])).next())}))}function UW(e,t,n,i){return new(n||(n=Promise))((function(l,o){function c(e){try{r(i.next(e))}catch(e){o(e)}}function a(e){try{r(i.throw(e))}catch(e){o(e)}}function r(e){var t;e.done?l(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(c,a)}r((i=i.apply(e,t||[])).next())}))}cl({target:"URL",proto:!0,enumerable:!0},{toJSON:function(){return JW(URL.prototype.toString,this)}}),e.ResponseMode=void 0,function(e){e.formPost="form_post",e.query="query",e.direct="direct"}(e.ResponseMode||(e.ResponseMode={}));e.Stores=void 0,function(e){e.ConfigData="config_data",e.OIDCProviderMetaData="oidc_provider_meta_data",e.SessionData="session_data",e.TemporaryData="temporary_data"}(e.Stores||(e.Stores={}));const LW="refresh_token_timer",TW=["RS256","RS512","RS384","PS256"],HW="code",xW="session_state",wW="sign_out_url",FW="sign_out_success",zW="state";var PW;!function(e){e.Include="include",e.SameOrigin="same-origin",e.Omit="omit"}(PW||(PW={}));class BW{constructor(e,t,n){this.message=n,this.name=t,this.code=e,Object.setPrototypeOf(this,new.target.prototype)}}class jW{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 n={};return Object.entries(t).forEach((e=>{let[t,i]=e;const l=t.split("_").map(((e,t)=>0===t?e:[e[0].toUpperCase(),...e.slice(1)].join(""))).join("");n[l]=i})),n}static getTokenRequestHeaders(){return{Accept:"application/json","Content-Type":"application/x-www-form-urlencoded"}}static generateStateParamForRequestCorrelation(e,t){const n=parseInt(e.split("#")[1]);return t?"".concat(t,"_request_").concat(n):"request_".concat(n)}static extractPKCEKeyFromStateParam(e){return"pkce_code_verifier#".concat(parseInt(e.split("request_")[1]))}}jW.getTenantDomainFromIdTokenPayload=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"@";const n=e.sub.split(t);return n.length>2?n[n.length-1]:""};class QW{constructor(e,t){this._dataLayer=e,this._config=()=>UW(this,void 0,void 0,(function*(){return yield this._dataLayer.getConfigData()})),this._oidcProviderMetaData=()=>UW(this,void 0,void 0,(function*(){return yield this._dataLayer.getOIDCProviderMetaData()})),this._cryptoHelper=t}resolveEndpoints(e){return UW(this,void 0,void 0,(function*(){const t={},n=yield this._config();return n.endpoints&&Object.keys(n.endpoints).forEach((e=>{const i=e.replace(/[A-Z]/g,(e=>"_".concat(e.toLowerCase())));t[i]=(null==n?void 0:n.endpoints)?n.endpoints[e]:""})),Object.assign(Object.assign({},e),t)}))}resolveEndpointsExplicitly(){return UW(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 BW("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((n=>{const i=n.replace(/[A-Z]/g,(e=>"_".concat(e.toLowerCase())));e[i]=(null==t?void 0:t.endpoints)?t.endpoints[n]:""})),Object.assign({},e)}))}resolveEndpointsByBaseURL(){return UW(this,void 0,void 0,(function*(){const e={},t=yield this._config(),n=t.baseUrl;if(!n)throw new BW("JS-AUTH_HELPER_REBO-NF01","Base URL not defined.","Base URL is not defined in AuthClient config.");t.endpoints&&Object.keys(t.endpoints).forEach((n=>{const i=n.replace(/[A-Z]/g,(e=>"_".concat(e.toLowerCase())));e[i]=(null==t?void 0:t.endpoints)?t.endpoints[n]:""}));const i={authorization_endpoint:"".concat(n).concat("/oauth2/authorize"),end_session_endpoint:"".concat(n).concat("/oidc/logout"),issuer:"".concat(n).concat("/oauth2/token"),jwks_uri:"".concat(n).concat("/oauth2/jwks"),check_session_iframe:"".concat(n).concat("/oidc/checksession"),revocation_endpoint:"".concat(n).concat("/oauth2/revoke"),token_endpoint:"".concat(n).concat("/oauth2/token"),userinfo_endpoint:"".concat(n).concat("/oauth2/userinfo")};return Object.assign(Object.assign({},i),e)}))}validateIdToken(e){var t;return UW(this,void 0,void 0,(function*(){const n=(yield this._dataLayer.getOIDCProviderMetaData()).jwks_uri,i=yield this._config();if(!n||0===n.trim().length)throw new BW("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(n,{credentials:i.sendCookiesInRequests?PW.Include:PW.SameOrigin})}catch(n){throw new BW("JS-AUTH_HELPER-VIT-NE02","Request to jwks endpoint failed.",null!=n?n:"The request sent to get the jwks from the server failed.")}if(200!==l.status||!l.ok)throw new BW("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,n,i,l;const o=this._cryptoHelper.decodeIDToken(e),c=jW.getTenantDomainFromIdTokenPayload(o),a=null!==(t=null==o?void 0:o.username)&&void 0!==t?t:"",r=null!==(n=o.given_name)&&void 0!==n?n:"",s=null!==(i=o.family_name)&&void 0!==i?i:"",d=r&&s?"".concat(r," ").concat(s):r||s||"",u=null!==(l=o.preferred_username)&&void 0!==l?l:d;return Object.assign({displayName:u,tenantDomain:c,username:a},jW.filterClaimsFromIDTokenPayload(o))}replaceCustomGrantTemplateTags(e,t){var n;return UW(this,void 0,void 0,(function*(){let i="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"),i=l.scope.join(" ")),e.replace("{{token}}",o.access_token).replace("{{username}}",this.getAuthenticatedUserInfo(o.id_token).username).replace("{{scope}}",i).replace("{{clientID}}",l.clientID).replace("{{clientSecret}}",null!==(n=l.clientSecret)&&void 0!==n?n:"")}))}clearUserSessionData(e){return UW(this,void 0,void 0,(function*(){yield this._dataLayer.removeTemporaryData(e),yield this._dataLayer.removeSessionData(e)}))}handleTokenResponse(e,t){return UW(this,void 0,void 0,(function*(){if(200!==e.status||!e.ok)throw new BW("JS-AUTH_HELPER-HTR-NE01","Invalid response status received for token request (".concat(e.statusText,")."),yield e.json());const n=yield e.json();if(n.created_at=(new Date).getTime(),(yield this._config()).validateIDToken)return this.validateIdToken(n.id_token).then((()=>UW(this,void 0,void 0,(function*(){yield this._dataLayer.setSessionData(n,t);const e={accessToken:n.access_token,createdAt:n.created_at,expiresIn:n.expires_in,idToken:n.id_token,refreshToken:n.refresh_token,scope:n.scope,tokenType:n.token_type};return Promise.resolve(e)}))));{const e={accessToken:n.access_token,createdAt:n.created_at,expiresIn:n.expires_in,idToken:n.id_token,refreshToken:n.refresh_token,scope:n.scope,tokenType:n.token_type};return yield this._dataLayer.setSessionData(n,t),Promise.resolve(e)}}))}generatePKCEKey(e){var t;return UW(this,void 0,void 0,(function*(){const n=yield this._dataLayer.getTemporaryData(e),i=[];Object.keys(n).forEach((e=>{e.startsWith("pkce_code_verifier")&&i.push(e)}));const l=i.sort().pop();return"pkce_code_verifier#".concat(parseInt(null!==(t=null==l?void 0:l.split("#")[1])&&void 0!==t?t:"-1")+1)}))}}class MW{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 n=JSON.parse(this._cryptoUtils.base64URLDecode(e));for(const e of t)if(n.kid===e.kid)return e;throw new BW("JS-CRYPTO_UTIL-GJFTIT-IV01","kid not found.","Failed to find the 'kid' specified in the id_token. 'kid' found in the header : "+n.kid+", Expected values: "+t.map((e=>e.kid)).join(", "))}isValidIdToken(e,t,n,i,l,o,c){return this._cryptoUtils.verifyJwt(e,t,TW,n,i,l,o,c).then((e=>e?Promise.resolve(!0):Promise.reject(new BW("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 BW("JS-CRYPTO_UTIL-DIT-IV01","Decoding ID token failed.",e)}}}class EW{constructor(e,t){this._cryptoUtils=t,this._cryptoHelper=new MW(t),this._authenticationHelper=new QW(e,this._cryptoHelper),this._dataLayer=e,this._config=()=>UW(this,void 0,void 0,(function*(){return yield this._dataLayer.getConfigData()})),this._oidcProviderMetaData=()=>UW(this,void 0,void 0,(function*(){return yield this._dataLayer.getOIDCProviderMetaData()}))}getAuthorizationURLParams(e,t){var n,i,l;return UW(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===(n=this._cryptoHelper)||void 0===n?void 0:n.getCodeVerifier(),l=null===(i=this._cryptoHelper)||void 0===i?void 0:i.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 s=e;if(s)for(const[e,t]of Object.entries(s))""!=e&&""!=t&&"state"!==e&&c.set(e,t.toString());return c.set("state",jW.generateStateParamForRequestCorrelation(r,s?null===(l=s.state)||void 0===l?void 0:l.toString():"")),c}))}getAuthorizationURL(e,t){return UW(this,void 0,void 0,(function*(){const n=yield this._dataLayer.getOIDCProviderMetaDataParameter("authorization_endpoint");if(!n||0===n.trim().length)throw new BW("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 i=new URL(n),l=yield this.getAuthorizationURLParams(e,t);for(const[e,t]of l.entries())i.searchParams.append(e,t);return i.toString()}))}requestAccessToken(e,t,n,i,l){return UW(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 BW("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,i));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 s;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,n]=e;a.append(t,n)})),c.enablePKCE&&(a.set("code_verifier","".concat(yield this._dataLayer.getTemporaryDataParameter(jW.extractPKCEKeyFromStateParam(n),i))),yield this._dataLayer.removeTemporaryDataParameter(jW.extractPKCEKeyFromStateParam(n),i));try{s=yield fetch(o,{body:a,credentials:c.sendCookiesInRequests?PW.Include:PW.SameOrigin,headers:new Headers(jW.getTokenRequestHeaders()),method:"POST"})}catch(o){throw new BW("JS-AUTH_CORE-RAT1-NE02","Requesting access token failed",null!=o?o:"The request to get the access token from the server failed.")}if(!s.ok)throw new BW("JS-AUTH_CORE-RAT1-HE03","Requesting access token failed with ".concat(s.statusText),yield s.json());return yield this._authenticationHelper.handleTokenResponse(s,i)}))}refreshAccessToken(e){return UW(this,void 0,void 0,(function*(){const t=(yield this._oidcProviderMetaData()).token_endpoint,n=yield this._config(),i=yield this._dataLayer.getSessionData(e);if(!i.refresh_token)throw new BW("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 BW("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(n.clientID)),l.push("refresh_token=".concat(i.refresh_token)),l.push("grant_type=refresh_token"),n.clientSecret&&n.clientSecret.trim().length>0&&l.push("client_secret=".concat(n.clientSecret));try{o=yield fetch(t,{body:l.join("&"),credentials:n.sendCookiesInRequests?PW.Include:PW.SameOrigin,headers:new Headers(jW.getTokenRequestHeaders()),method:"POST"})}catch(t){throw new BW("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 BW("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 UW(this,void 0,void 0,(function*(){const t=(yield this._oidcProviderMetaData()).revocation_endpoint,n=yield this._config();if(!t||0===t.trim().length)throw new BW("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 i=[];let l;i.push("client_id=".concat(n.clientID)),i.push("token=".concat((yield this._dataLayer.getSessionData(e)).access_token)),i.push("token_type_hint=access_token");try{l=yield fetch(t,{body:i.join("&"),credentials:n.sendCookiesInRequests?PW.Include:PW.SameOrigin,headers:new Headers(jW.getTokenRequestHeaders()),method:"POST"})}catch(t){throw new BW("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 BW("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 UW(this,void 0,void 0,(function*(){const n=yield this._oidcProviderMetaData(),i=yield this._config();let l;if(l=e.tokenEndpoint&&0!==e.tokenEndpoint.trim().length?e.tokenEndpoint:n.token_endpoint,!l||0===l.trim().length)throw new BW("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[n,i]=e;return UW(this,void 0,void 0,(function*(){const e=yield this._authenticationHelper.replaceCustomGrantTemplateTags(i,t);return"".concat(n,"=").concat(e)}))})));let c=Object.assign({},jW.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:i.sendCookiesInRequests?PW.Include:PW.SameOrigin,headers:new Headers(c),method:"POST"};let r;try{r=yield fetch(l,a)}catch(e){throw new BW("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 BW("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 UW(this,void 0,void 0,(function*(){const t=yield this._dataLayer.getSessionData(e),n=this._authenticationHelper.getAuthenticatedUserInfo(null==t?void 0:t.id_token);let i={allowedScopes:t.scope,sessionState:t.session_state};return Object.keys(n).forEach((e=>{void 0!==n[e]&&""!==n[e]&&null!==n[e]||delete n[e]})),i=Object.assign(Object.assign({},i),n),i}))}getDecodedIDToken(e){return UW(this,void 0,void 0,(function*(){const t=(yield this._dataLayer.getSessionData(e)).id_token;return this._cryptoHelper.decodeIDToken(t)}))}getCryptoHelper(){return UW(this,void 0,void 0,(function*(){return this._cryptoHelper}))}getIDToken(e){return UW(this,void 0,void 0,(function*(){return(yield this._dataLayer.getSessionData(e)).id_token}))}getOIDCProviderMetaData(e){return UW(this,void 0,void 0,(function*(){const t=yield this._config();if(!e&&(yield this._dataLayer.getTemporaryDataParameter("op_config_initiated")))return Promise.resolve();const n=t.wellKnownEndpoint;if(n){let e;try{if(e=yield fetch(n),200!==e.status||!e.ok)throw new Error}catch(t){throw new BW("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 BW("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,n,i,l,o,c,a,r,s;return UW(this,void 0,void 0,(function*(){const d=yield this._oidcProviderMetaData();return{authorizationEndpoint:null!==(e=d.authorization_endpoint)&&void 0!==e?e:"",checkSessionIframe:null!==(t=d.check_session_iframe)&&void 0!==t?t:"",endSessionEndpoint:null!==(n=d.end_session_endpoint)&&void 0!==n?n:"",introspectionEndpoint:null!==(i=d.introspection_endpoint)&&void 0!==i?i:"",issuer:null!==(l=d.issuer)&&void 0!==l?l:"",jwksUri:null!==(o=d.jwks_uri)&&void 0!==o?o:"",registrationEndpoint:null!==(c=d.registration_endpoint)&&void 0!==c?c:"",revocationEndpoint:null!==(a=d.revocation_endpoint)&&void 0!==a?a:"",tokenEndpoint:null!==(r=d.token_endpoint)&&void 0!==r?r:"",userinfoEndpoint:null!==(s=d.userinfo_endpoint)&&void 0!==s?s:""}}))}getSignOutURL(e){var t,n,i;return UW(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 BW("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!==(n=null==o?void 0:o.signOutRedirectURL)&&void 0!==n?n:null==o?void 0:o.signInRedirectURL;if(!c||0===c.trim().length)throw new BW("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===(i=yield this._dataLayer.getSessionData(e))||void 0===i?void 0:i.id_token;if(!t||0===t.trim().length)throw new BW("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 UW(this,void 0,void 0,(function*(){yield this._authenticationHelper.clearUserSessionData(e)}))}getAccessToken(e){var t;return UW(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 UW(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 UW(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 UW(this,void 0,void 0,(function*(){const t=Boolean(yield this.getAccessToken(e)),n=yield this.getCreatedAt(e),i=yield this.getExpiresIn(e);if(!i)return!1;const l=1e3*parseInt(i),o=(new Date).getTime();return t&&n+l>o}))}getPKCECode(e,t){return UW(this,void 0,void 0,(function*(){return yield this._dataLayer.getTemporaryDataParameter(jW.extractPKCEKeyFromStateParam(e),t)}))}setPKCECode(e,t,n){return UW(this,void 0,void 0,(function*(){return yield this._dataLayer.setTemporaryDataParameter(jW.extractPKCEKeyFromStateParam(t),e,n)}))}updateConfig(e){return UW(this,void 0,void 0,(function*(){yield this._dataLayer.setConfigData(e),yield this.getOIDCProviderMetaData(!0)}))}}class DW{constructor(e,t){this._id=e,this._store=t}setDataInBulk(e,t){var n;return UW(this,void 0,void 0,(function*(){const i=null!==(n=yield this._store.getData(e))&&void 0!==n?n:null,l=i&&JSON.parse(i),o=Object.assign(Object.assign({},l),t),c=JSON.stringify(o);yield this._store.setData(e,c)}))}setValue(e,t,n){var i;return UW(this,void 0,void 0,(function*(){const l=null!==(i=yield this._store.getData(e))&&void 0!==i?i:null,o=l&&JSON.parse(l),c=Object.assign(Object.assign({},o),{[t]:n}),a=JSON.stringify(c);yield this._store.setData(e,a)}))}removeValue(e,t){var n;return UW(this,void 0,void 0,(function*(){const i=null!==(n=yield this._store.getData(e))&&void 0!==n?n:null,l=i&&JSON.parse(i),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(t){return UW(this,void 0,void 0,(function*(){yield this.setDataInBulk(this._resolveKey(e.Stores.ConfigData),t)}))}setOIDCProviderMetaData(t){return UW(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(e.Stores.OIDCProviderMetaData),t)}))}setTemporaryData(t,n){return UW(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(e.Stores.TemporaryData,n),t)}))}setSessionData(t,n){return UW(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(e.Stores.SessionData,n),t)}))}setCustomData(e,t,n){return UW(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(e,n),t)}))}getConfigData(){var t;return UW(this,void 0,void 0,(function*(){return JSON.parse(null!==(t=yield this._store.getData(this._resolveKey(e.Stores.ConfigData)))&&void 0!==t?t:null)}))}getOIDCProviderMetaData(){var t;return UW(this,void 0,void 0,(function*(){return JSON.parse(null!==(t=yield this._store.getData(this._resolveKey(e.Stores.OIDCProviderMetaData)))&&void 0!==t?t:null)}))}getTemporaryData(t){var n;return UW(this,void 0,void 0,(function*(){return JSON.parse(null!==(n=yield this._store.getData(this._resolveKey(e.Stores.TemporaryData,t)))&&void 0!==n?n:null)}))}getSessionData(t){var n;return UW(this,void 0,void 0,(function*(){return JSON.parse(null!==(n=yield this._store.getData(this._resolveKey(e.Stores.SessionData,t)))&&void 0!==n?n:null)}))}getCustomData(e,t){var n;return UW(this,void 0,void 0,(function*(){return JSON.parse(null!==(n=yield this._store.getData(this._resolveKey(e,t)))&&void 0!==n?n: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 UW(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(e.Stores.ConfigData))}))}removeOIDCProviderMetaData(){return UW(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(e.Stores.OIDCProviderMetaData))}))}removeTemporaryData(t){return UW(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(e.Stores.TemporaryData,t))}))}removeSessionData(t){return UW(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(e.Stores.SessionData,t))}))}getConfigDataParameter(t){return UW(this,void 0,void 0,(function*(){const n=yield this._store.getData(this._resolveKey(e.Stores.ConfigData));return n&&JSON.parse(n)[t]}))}getOIDCProviderMetaDataParameter(t){return UW(this,void 0,void 0,(function*(){const n=yield this._store.getData(this._resolveKey(e.Stores.OIDCProviderMetaData));return n&&JSON.parse(n)[t]}))}getTemporaryDataParameter(t,n){return UW(this,void 0,void 0,(function*(){const i=yield this._store.getData(this._resolveKey(e.Stores.TemporaryData,n));return i&&JSON.parse(i)[t]}))}getSessionDataParameter(t,n){return UW(this,void 0,void 0,(function*(){const i=yield this._store.getData(this._resolveKey(e.Stores.SessionData,n));return i&&JSON.parse(i)[t]}))}setConfigDataParameter(t,n){return UW(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(e.Stores.ConfigData),t,n)}))}setOIDCProviderMetaDataParameter(t,n){return UW(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(e.Stores.OIDCProviderMetaData),t,n)}))}setTemporaryDataParameter(t,n,i){return UW(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(e.Stores.TemporaryData,i),t,n)}))}setSessionDataParameter(t,n,i){return UW(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(e.Stores.SessionData,i),t,n)}))}removeConfigDataParameter(t){return UW(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(e.Stores.ConfigData),t)}))}removeOIDCProviderMetaDataParameter(t){return UW(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(e.Stores.OIDCProviderMetaData),t)}))}removeTemporaryDataParameter(t,n){return UW(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(e.Stores.TemporaryData,n),t)}))}removeSessionDataParameter(t,n){return UW(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(e.Stores.SessionData,n),t)}))}}const OW={clockTolerance:300,enablePKCE:!0,responseMode:e.ResponseMode.query,scope:["openid"],sendCookiesInRequests:!0,validateIDToken:!0,validateIDTokenIssuer:!0};class AW{constructor(){}initialize(e,t,n,i){var l,o,c;return UW(this,void 0,void 0,(function*(){const a=e.clientID;AW._instanceID?AW._instanceID+=1:AW._instanceID=0,i&&(AW._instanceID=i),this._dataLayer=new DW(a?"instance_".concat(AW._instanceID,"-").concat(a):"instance_".concat(AW._instanceID),t),this._authenticationCore=new EW(this._dataLayer,n),AW._authenticationCore=new EW(this._dataLayer,n),yield this._dataLayer.setConfigData(Object.assign(Object.assign(Object.assign({},OW),e),{scope:[...null!==(l=OW.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==OW?void 0:OW.scope)||void 0===t?void 0:t.includes(e))})))&&void 0!==c?c:[]]}))}))}getDataLayer(){return this._dataLayer}getInstanceID(){return AW._instanceID}getAuthorizationURLParams(e,t){return UW(this,void 0,void 0,(function*(){const n=Object.assign({},e);return null==n||delete n.forceInit,(yield this._dataLayer.getTemporaryDataParameter("op_config_initiated"))?this._authenticationCore.getAuthorizationURLParams(n,t):this._authenticationCore.getOIDCProviderMetaData(null==e?void 0:e.forceInit).then((()=>this._authenticationCore.getAuthorizationURLParams(n,t)))}))}getAuthorizationURL(e,t){return UW(this,void 0,void 0,(function*(){const n=Object.assign({},e);return null==n||delete n.forceInit,(yield this._dataLayer.getTemporaryDataParameter("op_config_initiated"))?this._authenticationCore.getAuthorizationURL(n,t):this._authenticationCore.getOIDCProviderMetaData(null==e?void 0:e.forceInit).then((()=>this._authenticationCore.getAuthorizationURL(n,t)))}))}requestAccessToken(e,t,n,i,l){return UW(this,void 0,void 0,(function*(){return(yield this._dataLayer.getTemporaryDataParameter("op_config_initiated"))?this._authenticationCore.requestAccessToken(e,t,n,i,l):this._authenticationCore.getOIDCProviderMetaData(!1).then((()=>this._authenticationCore.requestAccessToken(e,t,n,i,l)))}))}getSignOutURL(e){return UW(this,void 0,void 0,(function*(){return this._authenticationCore.getSignOutURL(e)}))}getOIDCServiceEndpoints(){return UW(this,void 0,void 0,(function*(){return this._authenticationCore.getOIDCServiceEndpoints()}))}getDecodedIDToken(e){return UW(this,void 0,void 0,(function*(){return this._authenticationCore.getDecodedIDToken(e)}))}getIDToken(e){return UW(this,void 0,void 0,(function*(){return this._authenticationCore.getIDToken(e)}))}getBasicUserInfo(e){return UW(this,void 0,void 0,(function*(){return this._authenticationCore.getBasicUserInfo(e)}))}getCryptoHelper(){return UW(this,void 0,void 0,(function*(){return this._authenticationCore.getCryptoHelper()}))}revokeAccessToken(e){return this._authenticationCore.revokeAccessToken(e)}refreshAccessToken(e){return this._authenticationCore.refreshAccessToken(e)}getAccessToken(e){return UW(this,void 0,void 0,(function*(){return this._authenticationCore.getAccessToken(e)}))}requestCustomGrant(e,t){return this._authenticationCore.requestCustomGrant(e,t)}isAuthenticated(e){return UW(this,void 0,void 0,(function*(){return this._authenticationCore.isAuthenticated(e)}))}getPKCECode(e,t){return UW(this,void 0,void 0,(function*(){return this._authenticationCore.getPKCECode(e,t)}))}setPKCECode(e,t,n){return UW(this,void 0,void 0,(function*(){yield this._authenticationCore.setPKCECode(e,t,n)}))}static isSignOutSuccessful(e){const t=new URL(e),n=t.searchParams.get("state"),i=Boolean(t.searchParams.get("error"));return!!n&&"sign_out_success"===n&&!i}static didSignOutFail(e){const t=new URL(e),n=t.searchParams.get("state"),i=Boolean(t.searchParams.get("error"));return!!n&&"sign_out_success"===n&&i}updateConfig(e){return UW(this,void 0,void 0,(function*(){yield this._authenticationCore.updateConfig(e)}))}static clearUserSessionData(e){return UW(this,void 0,void 0,(function*(){yield this._authenticationCore.clearUserSessionData(e)}))}}function _W(e,t,n){var i=void 0===t?null:t,l=function(e,t){var n=atob(e);if(t){for(var i=new Uint8Array(n.length),l=0,o=n.length;l<o;++l)i[l]=n.charCodeAt(l);return String.fromCharCode.apply(null,new Uint16Array(i.buffer))}return n}(e,void 0!==n&&n),o=l.indexOf("\n",10)+1,c=l.substring(o)+(i?"//# sourceMappingURL="+i:""),a=new Blob([c],{type:"application/javascript"});return URL.createObjectURL(a)}var qW,$W,eV,tV,nV=(qW="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/cjpudWxsKX0pKX1zZXRTZXNzaW9uU3RhdHVzKGUpe3RoaXMuaXNMb2NhbFN0b3JhZ2VBdmFpbGFibGUoKSYmbG9jYWxTdG9yYWdlLnNldEl0ZW0oImFzZ2FyZGVvLXNlc3Npb24tYWN0aXZlIixlKX1nZXRTZXNzaW9uU3RhdHVzKCl7dmFyIGU7cmV0dXJuIHRoaXMuaXNMb2NhbFN0b3JhZ2VBdmFpbGFibGUoKSYmbnVsbCE9PShlPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJhc2dhcmRlby1zZXNzaW9uLWFjdGl2ZSIpKSYmdm9pZCAwIT09ZT9lOiIifXJlbW92ZVNlc3Npb25TdGF0dXMoKXt0aGlzLmlzTG9jYWxTdG9yYWdlQXZhaWxhYmxlKCkmJmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCJhc2dhcmRlby1zZXNzaW9uLWFjdGl2ZSIpfXJlbW92ZUNvbmZpZ0RhdGEoKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleShyLkNvbmZpZ0RhdGEpKX0pKX1yZW1vdmVPSURDUHJvdmlkZXJNZXRhRGF0YSgpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fc3RvcmUucmVtb3ZlRGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpKX0pKX1yZW1vdmVUZW1wb3JhcnlEYXRhKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fc3RvcmUucmVtb3ZlRGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuVGVtcG9yYXJ5RGF0YSxlKSl9KSl9cmVtb3ZlU2Vzc2lvbkRhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5TZXNzaW9uRGF0YSxlKSl9KSl9Z2V0Q29uZmlnRGF0YVBhcmFtZXRlcihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuQ29uZmlnRGF0YSkpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfWdldE9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5PSURDUHJvdmlkZXJNZXRhRGF0YSkpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfWdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuVGVtcG9yYXJ5RGF0YSxuKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9Z2V0U2Vzc2lvbkRhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuU2Vzc2lvbkRhdGEsbikpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfXNldENvbmZpZ0RhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLkNvbmZpZ0RhdGEpLGUsbil9KSl9c2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLk9JRENQcm92aWRlck1ldGFEYXRhKSxlLG4pfSkpfXNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoZSxuLGkpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KHIuVGVtcG9yYXJ5RGF0YSxpKSxlLG4pfSkpfXNldFNlc3Npb25EYXRhUGFyYW1ldGVyKGUsbixpKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLlNlc3Npb25EYXRhLGkpLGUsbil9KSl9cmVtb3ZlQ29uZmlnRGF0YVBhcmFtZXRlcihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLkNvbmZpZ0RhdGEpLGUpfSkpfXJlbW92ZU9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KHIuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpLGUpfSkpfXJlbW92ZVRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLlRlbXBvcmFyeURhdGEsbiksZSl9KSl9cmVtb3ZlU2Vzc2lvbkRhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLlNlc3Npb25EYXRhLG4pLGUpfSkpfX1jb25zdCBwPXtjbG9ja1RvbGVyYW5jZTozMDAsZW5hYmxlUEtDRTohMCxyZXNwb25zZU1vZGU6bi5xdWVyeSxzY29wZTpbIm9wZW5pZCJdLHNlbmRDb29raWVzSW5SZXF1ZXN0czohMCx2YWxpZGF0ZUlEVG9rZW46ITAsdmFsaWRhdGVJRFRva2VuSXNzdWVyOiEwfTtjbGFzcyBne2NvbnN0cnVjdG9yKCl7fWluaXRpYWxpemUoZSxuLHIsaSl7dmFyIG8scyxhO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1lLmNsaWVudElEO2cuX2luc3RhbmNlSUQ/Zy5faW5zdGFuY2VJRCs9MTpnLl9pbnN0YW5jZUlEPTAsaSYmKGcuX2luc3RhbmNlSUQ9aSksdGhpcy5fZGF0YUxheWVyPW5ldyBmKHQ/Imluc3RhbmNlXyIuY29uY2F0KGcuX2luc3RhbmNlSUQsIi0iKS5jb25jYXQodCk6Imluc3RhbmNlXyIuY29uY2F0KGcuX2luc3RhbmNlSUQpLG4pLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZT1uZXcgaCh0aGlzLl9kYXRhTGF5ZXIsciksZy5fYXV0aGVudGljYXRpb25Db3JlPW5ldyBoKHRoaXMuX2RhdGFMYXllcixyKSx5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0Q29uZmlnRGF0YShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxwKSxlKSx7c2NvcGU6Wy4uLm51bGwhPT0obz1wLnNjb3BlKSYmdm9pZCAwIT09bz9vOltdLC4uLm51bGwhPT0oYT1udWxsPT09KHM9ZS5zY29wZSl8fHZvaWQgMD09PXM/dm9pZCAwOnMuZmlsdGVyKChlPT57dmFyIHQ7cmV0dXJuIShudWxsPT09KHQ9bnVsbD09cD92b2lkIDA6cC5zY29wZSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuaW5jbHVkZXMoZSkpfSkpKSYmdm9pZCAwIT09YT9hOltdXX0pKX0pKX1nZXREYXRhTGF5ZXIoKXtyZXR1cm4gdGhpcy5fZGF0YUxheWVyfWdldEluc3RhbmNlSUQoKXtyZXR1cm4gZy5faW5zdGFuY2VJRH1nZXRBdXRob3JpemF0aW9uVVJMUGFyYW1zKGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PU9iamVjdC5hc3NpZ24oe30sZSk7cmV0dXJuIG51bGw9PXR8fGRlbGV0ZSB0LmZvcmNlSW5pdCwoeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiKSk/dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldEF1dGhvcml6YXRpb25VUkxQYXJhbXModCxuKTp0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEobnVsbD09ZT92b2lkIDA6ZS5mb3JjZUluaXQpLnRoZW4oKCgpPT50aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0QXV0aG9yaXphdGlvblVSTFBhcmFtcyh0LG4pKSl9KSl9Z2V0QXV0aG9yaXphdGlvblVSTChlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1PYmplY3QuYXNzaWduKHt9LGUpO3JldHVybiBudWxsPT10fHxkZWxldGUgdC5mb3JjZUluaXQsKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIikpP3RoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBdXRob3JpemF0aW9uVVJMKHQsbik6dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENQcm92aWRlck1ldGFEYXRhKG51bGw9PWU/dm9pZCAwOmUuZm9yY2VJbml0KS50aGVuKCgoKT0+dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldEF1dGhvcml6YXRpb25VUkwodCxuKSkpfSkpfXJlcXVlc3RBY2Nlc3NUb2tlbihlLG4scixpLG8pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIikpP3RoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5yZXF1ZXN0QWNjZXNzVG9rZW4oZSxuLHIsaSxvKTp0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoITEpLnRoZW4oKCgpPT50aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVxdWVzdEFjY2Vzc1Rva2VuKGUsbixyLGksbykpKX0pKX1nZXRTaWduT3V0VVJMKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRTaWduT3V0VVJMKGUpfSkpfWdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCl9KSl9Z2V0RGVjb2RlZElEVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldERlY29kZWRJRFRva2VuKGUpfSkpfWdldElEVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldElEVG9rZW4oZSl9KSl9Z2V0QmFzaWNVc2VySW5mbyhlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0QmFzaWNVc2VySW5mbyhlKX0pKX1nZXRDcnlwdG9IZWxwZXIoKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0Q3J5cHRvSGVscGVyKCl9KSl9cmV2b2tlQWNjZXNzVG9rZW4oZSl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5yZXZva2VBY2Nlc3NUb2tlbihlKX1yZWZyZXNoQWNjZXNzVG9rZW4oZSl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5yZWZyZXNoQWNjZXNzVG9rZW4oZSl9Z2V0QWNjZXNzVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldEFjY2Vzc1Rva2VuKGUpfSkpfXJlcXVlc3RDdXN0b21HcmFudChlLHQpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVxdWVzdEN1c3RvbUdyYW50KGUsdCl9aXNBdXRoZW50aWNhdGVkKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5pc0F1dGhlbnRpY2F0ZWQoZSl9KSl9Z2V0UEtDRUNvZGUoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0UEtDRUNvZGUoZSxuKX0pKX1zZXRQS0NFQ29kZShlLG4scil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuc2V0UEtDRUNvZGUoZSxuLHIpfSkpfXN0YXRpYyBpc1NpZ25PdXRTdWNjZXNzZnVsKGUpe2NvbnN0IHQ9bmV3IFVSTChlKSxuPXQuc2VhcmNoUGFyYW1zLmdldCgic3RhdGUiKSxyPUJvb2xlYW4odC5zZWFyY2hQYXJhbXMuZ2V0KCJlcnJvciIpKTtyZXR1cm4hIW4mJiJzaWduX291dF9zdWNjZXNzIj09PW4mJiFyfXN0YXRpYyBkaWRTaWduT3V0RmFpbChlKXtjb25zdCB0PW5ldyBVUkwoZSksbj10LnNlYXJjaFBhcmFtcy5nZXQoInN0YXRlIikscj1Cb29sZWFuKHQuc2VhcmNoUGFyYW1zLmdldCgiZXJyb3IiKSk7cmV0dXJuISFuJiYic2lnbl9vdXRfc3VjY2VzcyI9PT1uJiZyfXVwZGF0ZUNvbmZpZyhlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS51cGRhdGVDb25maWcoZSl9KSl9c3RhdGljIGNsZWFyVXNlclNlc3Npb25EYXRhKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmNsZWFyVXNlclNlc3Npb25EYXRhKGUpfSkpfX1jb25zdCB5PSJpbml0Ijt2YXIgdjshZnVuY3Rpb24oZSl7ZS5TaWduSW49InNpZ24taW4iLGUuU2lnbk91dD0ic2lnbi1vdXQiLGUuSW5pdGlhbGl6ZT0iaW5pdGlhbGl6ZSIsZS5IdHRwUmVxdWVzdFN0YXJ0PSJodHRwLXJlcXVlc3Qtc3RhcnQiLGUuSHR0cFJlcXVlc3RGaW5pc2g9Imh0dHAtcmVxdWVzdC1maW5pc2giLGUuSHR0cFJlcXVlc3RFcnJvcj0iaHR0cC1yZXF1ZXN0LWVycm9yIixlLkh0dHBSZXF1ZXN0U3VjY2Vzcz0iaHR0cC1yZXF1ZXN0LXN1Y2Nlc3MiLGUuUmV2b2tlQWNjZXNzVG9rZW49InJldm9rZS1hY2Nlc3MtdG9rZW4iLGUuQ3VzdG9tR3JhbnQ9ImN1c3RvbS1ncmFudCIsZS5TaWduT3V0RmFpbGVkPSJzaWduLW91dC1mYWlsZWQifSh2fHwodj17fSkpO2NvbnN0IG09InByb21wdE5vbmVSZXF1ZXN0U2VudCIsdz0iZXJyb3IiLGI9ImVycm9yX2Rlc2NyaXB0aW9uIixfPSJjdXN0b21fZ3JhbnRfY29uZmlnIixTPSJBY2Nlc3MgdG9rZW4gaXMgaW52YWxpZCI7dmFyIEU7IWZ1bmN0aW9uKGUpe2UuTG9jYWxTdG9yYWdlPSJsb2NhbFN0b3JhZ2UiLGUuU2Vzc2lvblN0b3JhZ2U9InNlc3Npb25TdG9yYWdlIixlLldlYldvcmtlcj0id2ViV29ya2VyIixlLkJyb3dzZXJNZW1vcnk9ImJyb3dzZXJNZW1vcnkifShFfHwoRT17fSkpO2NsYXNzIFJ7Y29uc3RydWN0b3IoKXt9c3RhdGljIGdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSl7cmV0dXJue2Jsb2I6KG51bGw9PWU/dm9pZCAwOmUuZGF0YSlpbnN0YW5jZW9mIEJsb2I/bnVsbD09ZT92b2lkIDA6ZS5kYXRhOm51bGwsZGF0YTpKU09OLnN0cmluZ2lmeShudWxsIT1lP2U6IiIpLHN1Y2Nlc3M6ITB9fXN0YXRpYyBnZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpe3JldHVybihudWxsPT1lP3ZvaWQgMDplLnRvSlNPTikmJmRlbGV0ZSBlLnRvSlNPTix7ZXJyb3I6SlNPTi5zdHJpbmdpZnkobnVsbCE9ZT9lOiIiKSxzdWNjZXNzOiExfX19Y2xhc3MgVHtjb25zdHJ1Y3Rvcigpe31zdGF0aWMgcmVtb3ZlQXV0aG9yaXphdGlvbkNvZGUoKXtjb25zdCBlPWxvY2F0aW9uLmhyZWY7aGlzdG9yeS5wdXNoU3RhdGUoe30sZG9jdW1lbnQudGl0bGUsZS5yZXBsYWNlKC9cP2NvZGU9LiokLywiIikpfXN0YXRpYyBnZXRQS0NFKGUpe3ZhciB0O3JldHVybiBudWxsIT09KHQ9c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShlKSkmJnZvaWQgMCE9PXQ/dDoiIn1zdGF0aWMgc2V0UEtDRShlLHQpe3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0oZSx0KX1zdGF0aWMgc2V0U2lnbk91dFVSTChlLHQsbil7c2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgiIi5jb25jYXQocywiLWluc3RhbmNlXyIpLmNvbmNhdChuLCItIikuY29uY2F0KHQpLGUpfXN0YXRpYyBnZXRTaWduT3V0VVJMKGUsdCl7dmFyIG47cmV0dXJuIG51bGwhPT0obj1zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCIiLmNvbmNhdChzLCItaW5zdGFuY2VfIikuY29uY2F0KHQsIi0iKS5jb25jYXQoZSkpKSYmdm9pZCAwIT09bj9uOiIifXN0YXRpYyByZW1vdmVQS0NFKGUpe3Nlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oZSl9c3RhdGljIGNhbkNvbnRpbnVlU2lnbkluKGUsdCl7cmV0dXJuIShlJiYhVC5oYXNFcnJvckluVVJMKCkmJiFULmhhc0F1dGhTZWFyY2hQYXJhbXNJblVSTCgpJiYhdCl9c3RhdGljIGlzSW5pdGlhbGl6ZWRTaWxlbnRTaWduSW4oKXtyZXR1cm4gVC5pc1NpbGVudFN0YXRlUHJlc2VudEluVVJMKCl9c3RhdGljIHdhc1NpZ25JbkNhbGxlZCgpe3JldHVybiEoIVQuaGFzRXJyb3JJblVSTCgpJiYhVC5oYXNBdXRoU2VhcmNoUGFyYW1zSW5VUkwoKXx8dGhpcy5pc1NpbGVudFN0YXRlUHJlc2VudEluVVJMKCkpfXN0YXRpYyB3YXNTaWxlbnRTaWduSW5DYWxsZWQoKXtjb25zdCBlPXNlc3Npb25TdG9yYWdlLmdldEl0ZW0oImluaXRpYWxpemVkLXNpbGVudC1zaWduLWluIiksdD1lP0pTT04ucGFyc2UoZSk6bnVsbDtyZXR1cm4gQm9vbGVhbih0KX1zdGF0aWMgaXNTaWduT3V0U3VjY2Vzc2Z1bCgpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYoZy5pc1NpZ25PdXRTdWNjZXNzZnVsKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSl7Y29uc3QgZT13aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdCgiPyIpWzBdO3JldHVybiBoaXN0b3J5LnB1c2hTdGF0ZSh7fSxkb2N1bWVudC50aXRsZSxlKSx5aWVsZCBnLmNsZWFyVXNlclNlc3Npb25EYXRhKCksITB9cmV0dXJuITF9KSl9c3RhdGljIGRpZFNpZ25PdXRGYWlsKCl7aWYoZy5kaWRTaWduT3V0RmFpbCh3aW5kb3cubG9jYXRpb24uaHJlZikpe2NvbnN0IGU9bmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZiksdD1lLnNlYXJjaFBhcmFtcy5nZXQodyksbj1lLnNlYXJjaFBhcmFtcy5nZXQoYikscj13aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdCgiPyIpWzBdO3JldHVybiBoaXN0b3J5LnB1c2hTdGF0ZSh7fSxkb2N1bWVudC50aXRsZSxyKSx7ZGVzY3JpcHRpb246bnVsbCE9bj9uOiIiLGVycm9yOm51bGwhPXQ/dDoiIn19cmV0dXJuITF9c3RhdGljIGlzU2lsZW50U3RhdGVQcmVzZW50SW5VUkwoKXt2YXIgZTtjb25zdCB0PW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpLnNlYXJjaFBhcmFtcy5nZXQoInN0YXRlIik7cmV0dXJuIG51bGwhPT0oZT1udWxsPT10P3ZvaWQgMDp0LmluY2x1ZGVzKCJzaWduLWluLXNpbGVudGx5IikpJiZ2b2lkIDAhPT1lJiZlfXN0YXRpYyBoYXNBdXRoU2VhcmNoUGFyYW1zSW5VUkwoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06d2luZG93LmxvY2F0aW9uLnNlYXJjaDtyZXR1cm4vWz8mXWNvZGU9W14mXSsvLnRlc3QoZSl9c3RhdGljIGhhc0Vycm9ySW5VUkwoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06d2luZG93LmxvY2F0aW9uLmhyZWY7Y29uc3QgdD1uZXcgVVJMKGUpO3JldHVybiEhdC5zZWFyY2hQYXJhbXMuZ2V0KHcpJiYic2lnbl9vdXRfc3VjY2VzcyIhPT10LnNlYXJjaFBhcmFtcy5nZXQoInN0YXRlIil9c3RhdGljIGNhblNlbmRQcm9tcHROb25lUmVxdWVzdCgpe2NvbnN0IGU9c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShtKTtyZXR1cm4hKGU/SlNPTi5wYXJzZShlKTpudWxsKX1zdGF0aWMgc2V0UHJvbXB0Tm9uZVJlcXVlc3RTZW50KGUpe3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0obSxKU09OLnN0cmluZ2lmeShlKSl9c3RhdGljIHdhaXRUaWxsUGFnZVJlZGlyZWN0KHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT1udWxsIT10P3Q6M2UzO3lpZWxkIG5ldyBQcm9taXNlKCh0PT5zZXRUaW1lb3V0KHQsMWUzKmUpKSl9KSl9fVQudW50aWw9ZnVuY3Rpb24oZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjUwMDtjb25zdCBuPXI9PmUoKT9yKCk6c2V0VGltZW91dCgoKCk9Pm4ocikpLHQpO3JldHVybiBuZXcgUHJvbWlzZShuKX07Y2xhc3Mga3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50PWUsdGhpcy5fZGF0YUxheWVyPXRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldERhdGFMYXllcigpLHRoaXMuX3NwYUhlbHBlcj10LHRoaXMuX2luc3RhbmNlSUQ9dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0SW5zdGFuY2VJRCgpLHRoaXMuX2lzVG9rZW5SZWZyZXNoaW5nPSExfWVuYWJsZUh0dHBIYW5kbGVyKGUpeyhudWxsPT1lP3ZvaWQgMDplLmVuYWJsZUhhbmRsZXIpJiZlLmVuYWJsZUhhbmRsZXIoKX1kaXNhYmxlSHR0cEhhbmRsZXIoZSl7KG51bGw9PWU/dm9pZCAwOmUuZGlzYWJsZUhhbmRsZXIpJiZlLmRpc2FibGVIYW5kbGVyKCl9aW5pdGlhbGl6ZVNlc3Npb25NYW5nZXIoZSx0LG4scixpKXt2YXIgbyxzLGE7aS5pbml0aWFsaXplKGUuY2xpZW50SUQsbnVsbCE9PShvPXQuY2hlY2tTZXNzaW9uSWZyYW1lKSYmdm9pZCAwIT09bz9vOiIiLG4sbnVsbCE9PShzPWUuY2hlY2tTZXNzaW9uSW50ZXJ2YWwpJiZ2b2lkIDAhPT1zP3M6MyxudWxsIT09KGE9ZS5zZXNzaW9uUmVmcmVzaEludGVydmFsKSYmdm9pZCAwIT09YT9hOjMwMCxlLnNpZ25JblJlZGlyZWN0VVJMLHIpfXJlcXVlc3RDdXN0b21HcmFudCh0LG4pe3ZhciByLGksbztyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2xldCBzPSEwLGE9ITE7aWYobnVsbD09dD92b2lkIDA6dC50b2tlbkVuZHBvaW50KXtzPSExO2Zvcihjb25zdCBlIG9mWy4uLm51bGwhPT0oaT1udWxsPT09KHI9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKSl8fHZvaWQgMD09PXI/dm9pZCAwOnIucmVzb3VyY2VTZXJ2ZXJVUkxzKSYmdm9pZCAwIT09aT9pOltdLHQuYmFzZVVybF0paWYoZSYmKG51bGw9PT0obz10LnRva2VuRW5kcG9pbnQpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLnN0YXJ0c1dpdGgoZSkpKXthPSEwO2JyZWFrfX1yZXR1cm4gdC5zaG91bGRSZXBsYXlBZnRlclJlZnJlc2gmJnRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKF8sSlNPTi5zdHJpbmdpZnkodCkpLHN8fGE/dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQucmVxdWVzdEN1c3RvbUdyYW50KHQpLnRoZW4oKHI9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbiYmImZ1bmN0aW9uIj09dHlwZW9mIG4mJm4odCksdC5yZXR1cm5zU2Vzc2lvbj8odGhpcy5fc3BhSGVscGVyLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkodGhpcyksdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0QmFzaWNVc2VySW5mbygpKTpyfSkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSk6UHJvbWlzZS5yZWplY3QobmV3IGMoIlNQQS1NQUlOX1RIUkVBRF9DTElFTlQtUkNHLUlWMDEiLCJSZXF1ZXN0IHRvIHRoZSBwcm92aWRlZCBlbmRwb2ludCBpcyBwcm9oaWJpdGVkLiIsIlJlcXVlc3RzIGNhbiBvbmx5IGJlIHNlbnQgdG8gcmVzb3VyY2Ugc2VydmVycyBzcGVjaWZpZWQgYnkgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIGF0dHJpYnV0ZSB3aGlsZSBpbml0aWFsaXppbmcgdGhlIFNESy4gVGhlIHNwZWNpZmllZCB0b2tlbiBlbmRwb2ludCBpbiB0aGlzIHJlcXVlc3QgY2Fubm90IGJlIGZvdW5kIGFtb25nIHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCIpKX0pKX1nZXRDdXN0b21HcmFudENvbmZpZ0RhdGEoKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoXyk7cmV0dXJuIGU/SlNPTi5wYXJzZShlKTpudWxsfSkpfXJlZnJlc2hBY2Nlc3NUb2tlbih0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RyeXt5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5yZWZyZXNoQWNjZXNzVG9rZW4oKTtjb25zdCBlPXlpZWxkIHRoaXMuZ2V0Q3VzdG9tR3JhbnRDb25maWdEYXRhKCk7cmV0dXJuIGUmJih5aWVsZCB0aGlzLnJlcXVlc3RDdXN0b21HcmFudChlLHQpKSx0aGlzLl9zcGFIZWxwZXIucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSh0aGlzKSx0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRCYXNpY1VzZXJJbmZvKCl9Y2F0Y2goZSl7Y29uc3QgdD17dHlwZToicmVmcmVzaC1hY2Nlc3MtdG9rZW4tZXJyb3IifTtyZXR1cm4gd2luZG93LnBvc3RNZXNzYWdlKHQpLFByb21pc2UucmVqZWN0KGUpfX0pKX1yZXRyeUZhaWxlZFJlcXVlc3RzKHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT10Lmh0dHBDbGllbnQsbj10LnJlcXVlc3RDb25maWcscj10LmlzSHR0cEhhbmRsZXJFbmFibGVkLGk9dC5odHRwRXJyb3JDYWxsYmFjayxvPXQuaHR0cEZpbmlzaENhbGxiYWNrO3lpZWxkIFQudW50aWwoKCgpPT4hdGhpcy5faXNUb2tlblJlZnJlc2hpbmcpKTt0cnl7Y29uc3QgdD15aWVsZCBlLnJlcXVlc3Qobik7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0KX1jYXRjaChlKXtyZXR1cm4gciYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoeWllbGQgaShlKSksImZ1bmN0aW9uIj09dHlwZW9mIG8mJm8oKSksUHJvbWlzZS5yZWplY3QoZSl9fSkpfWh0dHBSZXF1ZXN0KHQsbixyLGksbyxzKXt2YXIgYSx1O3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7bGV0IGw9ITE7Y29uc3QgZD15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpO2Zvcihjb25zdCBlIG9mWy4uLm51bGwhPT0oYT15aWVsZCBudWxsPT1kP3ZvaWQgMDpkLnJlc291cmNlU2VydmVyVVJMcykmJnZvaWQgMCE9PWE/YTpbXSxkLmJhc2VVcmxdKWlmKGUmJihudWxsPT09KHU9bnVsbD09bj92b2lkIDA6bi51cmwpfHx2b2lkIDA9PT11P3ZvaWQgMDp1LnN0YXJ0c1dpdGgoZSkpKXtsPSEwO2JyZWFrfXJldHVybiBsP3QucmVxdWVzdChuKS50aGVuKChlPT5Qcm9taXNlLnJlc29sdmUoZSkpKS5jYXRjaCgoYT0+ZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBlLHUsbDtpZig0MDE9PT0obnVsbD09PShlPW51bGw9PWE/dm9pZCAwOmEucmVzcG9uc2UpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnN0YXR1cyl8fCEobnVsbD09YT92b2lkIDA6YS5yZXNwb25zZSkpe2lmKHRoaXMuX2lzVG9rZW5SZWZyZXNoaW5nKXJldHVybiB0aGlzLnJldHJ5RmFpbGVkUmVxdWVzdHMoe2VuYWJsZVJldHJpZXZpbmdTaWduT3V0VVJMRnJvbVNlc3Npb246cyxodHRwQ2xpZW50OnQsaHR0cEVycm9yQ2FsbGJhY2s6aSxodHRwRmluaXNoQ2FsbGJhY2s6byxpc0h0dHBIYW5kbGVyRW5hYmxlZDpyLHJlcXVlc3RDb25maWc6bn0pO2xldCBlO3RoaXMuX2lzVG9rZW5SZWZyZXNoaW5nPSEwO3RyeXtlPXlpZWxkIHRoaXMucmVmcmVzaEFjY2Vzc1Rva2VuKHMpLHRoaXMuX2lzVG9rZW5SZWZyZXNoaW5nPSExfWNhdGNoKGUpe3Rocm93IHRoaXMuX2lzVG9rZW5SZWZyZXNoaW5nPSExLHImJigiZnVuY3Rpb24iPT10eXBlb2YgaSYmKHlpZWxkIGkoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGEpLHtjb2RlOlN9KSkpLCJmdW5jdGlvbiI9PXR5cGVvZiBvJiZvKCkpLG5ldyBjKCJTUEEtQVVUSF9IRUxQRVItSFItU0UwMSIsbnVsbCE9PSh1PW51bGw9PWU/dm9pZCAwOmUubmFtZSkmJnZvaWQgMCE9PXU/dToiUmVmcmVzaCB0b2tlbiByZXF1ZXN0IGZhaWxlZC4iLG51bGwhPT0obD1udWxsPT1lP3ZvaWQgMDplLm1lc3NhZ2UpJiZ2b2lkIDAhPT1sP2w6IkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHRyeWluZyB0byByZWZyZXNoIHRoZSBhY2Nlc3MgdG9rZW4gZm9sbG93aW5nIGEgNDAxIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlci4iKX1pZihlKXRyeXtjb25zdCBlPXlpZWxkIHQucmVxdWVzdChuKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGUpfWNhdGNoKGUpe3JldHVybiByJiYoImZ1bmN0aW9uIj09dHlwZW9mIGkmJih5aWVsZCBpKGUpKSwiZnVuY3Rpb24iPT10eXBlb2YgbyYmbygpKSxQcm9taXNlLnJlamVjdChlKX19cmV0dXJuIHImJigiZnVuY3Rpb24iPT10eXBlb2YgaSYmKHlpZWxkIGkoYSkpLCJmdW5jdGlvbiI9PXR5cGVvZiBvJiZvKCkpLFByb21pc2UucmVqZWN0KGEpfSkpKSk6UHJvbWlzZS5yZWplY3QobmV3IGMoIlNQQS1BVVRIX0hFTFBFUi1IUi1JVjAyIiwiUmVxdWVzdCB0byB0aGUgcHJvdmlkZWQgZW5kcG9pbnQgaXMgcHJvaGliaXRlZC4iLCJSZXF1ZXN0cyBjYW4gb25seSBiZSBzZW50IHRvIHJlc291cmNlIHNlcnZlcnMgc3BlY2lmaWVkIGJ5IHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCBhdHRyaWJ1dGUgd2hpbGUgaW5pdGlhbGl6aW5nIHRoZSBTREsuIFRoZSBzcGVjaWZpZWQgZW5kcG9pbnQgaW4gdGhpcyByZXF1ZXN0IGNhbm5vdCBiZSBmb3VuZCBhbW9uZyB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AiKSl9KSl9aHR0cFJlcXVlc3RBbGwodCxuLHIsaSxvKXt2YXIgcyxhLHU7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtsZXQgbD0hMDtjb25zdCBkPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCk7Zm9yKGNvbnN0IGUgb2YgdCl7bGV0IHQ9ITE7Zm9yKGNvbnN0IG4gb2ZbLi4ubnVsbCE9PShhPW51bGw9PT0ocz15aWVsZCBkKXx8dm9pZCAwPT09cz92b2lkIDA6cy5yZXNvdXJjZVNlcnZlclVSTHMpJiZ2b2lkIDAhPT1hP2E6W10sZC5iYXNlVXJsXSlpZihuJiYobnVsbD09PSh1PWUudXJsKXx8dm9pZCAwPT09dT92b2lkIDA6dS5zdGFydHNXaXRoKG4pKSl7dD0hMDticmVha31pZighdCl7bD0hMTticmVha319Y29uc3QgaD1bXTtpZihsKXJldHVybiB0LmZvckVhY2goKGU9PntoLnB1c2gobi5yZXF1ZXN0KGUpKX0pKSwobnVsbD09bj92b2lkIDA6bi5hbGwpJiZuLmFsbChoKS50aGVuKChlPT5Qcm9taXNlLnJlc29sdmUoZSkpKS5jYXRjaCgodD0+ZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBzLGEsdTtpZig0MDE9PT0obnVsbD09PShzPW51bGw9PXQ/dm9pZCAwOnQucmVzcG9uc2UpfHx2b2lkIDA9PT1zP3ZvaWQgMDpzLnN0YXR1cyl8fCEobnVsbD09dD92b2lkIDA6dC5yZXNwb25zZSkpe2xldCBzO3RyeXtzPXlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LnJlZnJlc2hBY2Nlc3NUb2tlbigpfWNhdGNoKGUpe3Rocm93IHImJigiZnVuY3Rpb24iPT10eXBlb2YgaSYmKHlpZWxkIGkoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtjb2RlOlN9KSkpLCJmdW5jdGlvbiI9PXR5cGVvZiBvJiZvKCkpLG5ldyBjKCJTUEEtQVVUSF9IRUxQRVItSFJBLVNFMDEiLG51bGwhPT0oYT1udWxsPT1lP3ZvaWQgMDplLm5hbWUpJiZ2b2lkIDAhPT1hP2E6IlJlZnJlc2ggdG9rZW4gcmVxdWVzdCBmYWlsZWQuIixudWxsIT09KHU9bnVsbD09ZT92b2lkIDA6ZS5tZXNzYWdlKSYmdm9pZCAwIT09dT91OiJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gcmVmcmVzaCB0aGUgYWNjZXNzIHRva2VuIGZvbGxvd2luZyBhIDQwMSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIuIil9aWYocylyZXR1cm4gbi5hbGwmJm4uYWxsKGgpLnRoZW4oKGU9PlByb21pc2UucmVzb2x2ZShlKSkpLmNhdGNoKCh0PT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHImJigiZnVuY3Rpb24iPT10eXBlb2YgaSYmKHlpZWxkIGkodCkpLCJmdW5jdGlvbiI9PXR5cGVvZiBvJiZvKCkpLFByb21pc2UucmVqZWN0KHQpfSkpKSl9cmV0dXJuIHImJigiZnVuY3Rpb24iPT10eXBlb2YgaSYmKHlpZWxkIGkodCkpLCJmdW5jdGlvbiI9PXR5cGVvZiBvJiZvKCkpLFByb21pc2UucmVqZWN0KHQpfSkpKSk7dGhyb3cgbmV3IGMoIlNQQS1BVVRIX0hFTFBFUi1IUkEtSVYwMiIsIlJlcXVlc3QgdG8gdGhlIHByb3ZpZGVkIGVuZHBvaW50IGlzIHByb2hpYml0ZWQuIiwiUmVxdWVzdHMgY2FuIG9ubHkgYmUgc2VudCB0byByZXNvdXJjZSBzZXJ2ZXJzIHNwZWNpZmllZCBieSB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AgYXR0cmlidXRlIHdoaWxlIGluaXRpYWxpemluZyB0aGUgU0RLLiBUaGUgc3BlY2lmaWVkIGVuZHBvaW50IGluIHRoaXMgcmVxdWVzdCBjYW5ub3QgYmUgZm91bmQgYW1vbmcgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIil9KSl9cmVxdWVzdEFjY2Vzc1Rva2VuKHQsbixyLGksbyxzKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGE9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKTtpZihhLnN0b3JhZ2U9PT1FLkJyb3dzZXJNZW1vcnkmJmEuZW5hYmxlUEtDRSYmbil7Y29uc3QgZT1ULmdldFBLQ0UodS5leHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtKG4pKTt5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5zZXRQS0NFQ29kZSh1LmV4dHJhY3RQS0NFS2V5RnJvbVN0YXRlUGFyYW0obiksZSl9ZWxzZSBhLnN0b3JhZ2U9PT1FLldlYldvcmtlciYmaSYmKHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LnNldFBLQ0VDb2RlKGksbnVsbCE9bz9vOiIiKSk7cmV0dXJuIHQ/dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQucmVxdWVzdEFjY2Vzc1Rva2VuKHQsbnVsbCE9bj9uOiIiLG51bGwhPW8/bzoiIix2b2lkIDAscykudGhlbigoKCk9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gYS5zdG9yYWdlIT09RS5XZWJXb3JrZXI/KFQuc2V0U2lnbk91dFVSTCh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRTaWduT3V0VVJMKCksYS5jbGllbnRJRCx0aGlzLl9pbnN0YW5jZUlEKSx0aGlzLl9zcGFIZWxwZXImJih0aGlzLl9zcGFIZWxwZXIuY2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KCksdGhpcy5fc3BhSGVscGVyLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkodGhpcykpLHImJiJmdW5jdGlvbiI9PXR5cGVvZiByJiZhLmVuYWJsZU9JRENTZXNzaW9uTWFuYWdlbWVudCYmcigpKTp0aGlzLl9zcGFIZWxwZXImJnRoaXMuX3NwYUhlbHBlci5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KHRoaXMpLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldEJhc2ljVXNlckluZm8oKX0pKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpOlByb21pc2UucmVqZWN0KG5ldyBjKCJTUEEtQVVUSF9IRUxQRVItUkFUMS1ORjAxIiwiTm8gYXV0aG9yaXphdGlvbiBjb2RlLiIsIk5vIGF1dGhvcml6YXRpb24gY29kZSB3YXMgZm91bmQuIikpfSkpfXRyeVNpZ25JblNpbGVudGx5KHQsbixyLGksbyl7dmFyIHM7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZihULmlzSW5pdGlhbGl6ZWRTaWxlbnRTaWduSW4oKSlyZXR1cm4geWllbGQgci5yZWNlaXZlUHJvbXB0Tm9uZVJlc3BvbnNlKCksUHJvbWlzZS5yZXNvbHZlKHthbGxvd2VkU2NvcGVzOiIiLGRpc3BsYXlOYW1lOiIiLGVtYWlsOiIiLHNlc3Npb25TdGF0ZToiIixzdWI6IiIsdGVuYW50RG9tYWluOiIiLHVzZXJuYW1lOiIifSk7Y29uc3QgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicnBJRnJhbWUiKSxjPW51bGw9PT0ocz1udWxsPT1hP3ZvaWQgMDphLmNvbnRlbnREb2N1bWVudCl8fHZvaWQgMD09PXM/dm9pZCAwOnMuZ2V0RWxlbWVudEJ5SWQoInByb21wdE5vbmVJRnJhbWUiKTt0cnl7Y29uc3QgZT15aWVsZCB0KGkpO2Muc3JjPWV9Y2F0Y2goZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfXJldHVybiBuZXcgUHJvbWlzZSgoKHQscik9Pntjb25zdCBpPXNldFRpbWVvdXQoKCgpPT57dCghMSl9KSwxZTQpLHM9YT0+ZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBlLGMsdSxsO2NvbnN0IGQ9YS5kYXRhOyJjaGVja19zZXNzaW9uX3NpZ25lZF9vdXQiPT0obnVsbD09ZD92b2lkIDA6ZC50eXBlKSYmKHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixzKSxjbGVhclRpbWVvdXQoaSksdCghMSkpLCJjaGVja19zZXNzaW9uX3NpZ25lZF9pbiI9PShudWxsPT1kP3ZvaWQgMDpkLnR5cGUpJiYobnVsbD09PShlPW51bGw9PWQ/dm9pZCAwOmQuZGF0YSl8fHZvaWQgMD09PWU/dm9pZCAwOmUuY29kZSkmJm4obnVsbD09PShjPW51bGw9PWQ/dm9pZCAwOmQuZGF0YSl8fHZvaWQgMD09PWM/dm9pZCAwOmMuY29kZSxudWxsPT09KHU9bnVsbD09ZD92b2lkIDA6ZC5kYXRhKXx8dm9pZCAwPT09dT92b2lkIDA6dS5zZXNzaW9uU3RhdGUsbnVsbD09PShsPW51bGw9PWQ/dm9pZCAwOmQuZGF0YSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuc3RhdGUsbykudGhlbigoZT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixzKSx0KGUpfSkpLmNhdGNoKChlPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHMpLHIoZSl9KSkuZmluYWxseSgoKCk9PntjbGVhclRpbWVvdXQoaSl9KSl9KSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHMpfSkpfSkpfWhhbmRsZVNpZ25Jbih0LG4scil7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCk7aWYoeWllbGQgdCgpKXJldHVybiBQcm9taXNlLnJlc29sdmUoe2FsbG93ZWRTY29wZXM6IiIsZGlzcGxheU5hbWU6IiIsZW1haWw6IiIsc2Vzc2lvblN0YXRlOiIiLHN1YjoiIix0ZW5hbnREb21haW46IiIsdXNlcm5hbWU6IiJ9KTtpZihlLnN0b3JhZ2UhPT1FLldlYldvcmtlciYmKHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmlzQXV0aGVudGljYXRlZCgpKSlyZXR1cm4gdGhpcy5fc3BhSGVscGVyLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLHRoaXMuX3NwYUhlbHBlci5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KHRoaXMpLGUuZW5hYmxlT0lEQ1Nlc3Npb25NYW5hZ2VtZW50JiZuKCksUHJvbWlzZS5yZXNvbHZlKHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldEJhc2ljVXNlckluZm8oKSk7Y29uc3QgaT1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKS5zZWFyY2hQYXJhbXMuZ2V0KHcpLG89bmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZikuc2VhcmNoUGFyYW1zLmdldChiKTtpZihpKXtjb25zdCBlPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO3Rocm93IGUuc2VhcmNoUGFyYW1zLmRlbGV0ZSh3KSxlLnNlYXJjaFBhcmFtcy5kZWxldGUoYiksaGlzdG9yeS5wdXNoU3RhdGUobnVsbCxkb2N1bWVudC50aXRsZSxlLnRvU3RyaW5nKCkpLG5ldyBjKCJTUEEtQVVUSF9IRUxQRVItU0ktU0UwMSIsaSxudWxsIT1vP286IiIpfWlmKGUuc3RvcmFnZT09PUUuV2ViV29ya2VyJiZyKXtjb25zdCBlPXlpZWxkIHIoKTtpZihlKXJldHVybiBlfX0pKX1hdHRhY2hUb2tlblRvUmVxdWVzdENvbmZpZyh0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9T2JqZWN0LmFzc2lnbih7YXR0YWNoVG9rZW46ITB9LHQpO2UuYXR0YWNoVG9rZW4mJihlLnNob3VsZEF0dGFjaElEUEFjY2Vzc1Rva2VuP3QuaGVhZGVycz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5oZWFkZXJzKSx7QXV0aG9yaXphdGlvbjoiQmVhcmVyICIuY29uY2F0KHlpZWxkIHRoaXMuZ2V0SURQQWNjZXNzVG9rZW4oKSl9KTp0LmhlYWRlcnM9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuaGVhZGVycykse0F1dGhvcml6YXRpb246IkJlYXJlciAiLmNvbmNhdCh5aWVsZCB0aGlzLmdldEFjY2Vzc1Rva2VuKCkpfSkpfSkpfWdldEJhc2ljVXNlckluZm8oKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRCYXNpY1VzZXJJbmZvKCl9KSl9Z2V0RGVjb2RlZElEVG9rZW4oKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXREZWNvZGVkSURUb2tlbigpfSkpfWdldERlY29kZWRJRFBJRFRva2VuKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0RGVjb2RlZElEVG9rZW4oKX0pKX1nZXRDcnlwdG9IZWxwZXIoKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRDcnlwdG9IZWxwZXIoKX0pKX1nZXRJRFRva2VuKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0SURUb2tlbigpfSkpfWdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKX0pKX1nZXRBY2Nlc3NUb2tlbigpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldEFjY2Vzc1Rva2VuKCl9KSl9Z2V0SURQQWNjZXNzVG9rZW4oKXt2YXIgdDtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBudWxsPT09KHQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCkpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmFjY2Vzc190b2tlbn0pKX1nZXREYXRhTGF5ZXIoKXtyZXR1cm4gdGhpcy5fZGF0YUxheWVyfWlzQXV0aGVudGljYXRlZCgpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmlzQXV0aGVudGljYXRlZCgpfSkpfX1jbGFzcyBBe2NvbnN0cnVjdG9yKGUpe3RoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50PWUsdGhpcy5fZGF0YUxheWVyPXRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldERhdGFMYXllcigpfXJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkodCl7dmFyIG4scjtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKCEobnVsbCE9PShyPW51bGw9PT0obj15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpKXx8dm9pZCAwPT09bj92b2lkIDA6bi5wZXJpb2RpY1Rva2VuUmVmcmVzaCkmJnZvaWQgMCE9PXImJnIpKXJldHVybjtjb25zdCBvPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YSgpO2lmKG8ucmVmcmVzaF90b2tlbil7Y29uc3Qgbj1wYXJzZUludChvLmV4cGlyZXNfaW4pLHI9c2V0VGltZW91dCgoKCk9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0LnJlZnJlc2hBY2Nlc3NUb2tlbigpfSkpKSwxZTMqKG48PTEwP246bi0xMCkpO3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGksSlNPTi5zdHJpbmdpZnkocikpfX0pKX1nZXRSZWZyZXNoVGltZW91dFRpbWVyKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoaSkpP0pTT04ucGFyc2UoeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoaSkpOi0xfSkpfWNsZWFyUmVmcmVzaFRva2VuVGltZW91dCh0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKHQpcmV0dXJuIHZvaWQgY2xlYXJUaW1lb3V0KHQpO2NvbnN0IGU9eWllbGQgdGhpcy5nZXRSZWZyZXNoVGltZW91dFRpbWVyKCk7LTEhPT1lJiZjbGVhclRpbWVvdXQoZSl9KSl9fXZhciBDPSJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e307ZnVuY3Rpb24gTygpe3Rocm93IG5ldyBFcnJvcigic2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfWZ1bmN0aW9uIEQoKXt0aHJvdyBuZXcgRXJyb3IoImNsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfXZhciBQPU8sST1EO2Z1bmN0aW9uIFUoZSl7aWYoUD09PXNldFRpbWVvdXQpcmV0dXJuIHNldFRpbWVvdXQoZSwwKTtpZigoUD09PU98fCFQKSYmc2V0VGltZW91dClyZXR1cm4gUD1zZXRUaW1lb3V0LHNldFRpbWVvdXQoZSwwKTt0cnl7cmV0dXJuIFAoZSwwKX1jYXRjaCh0KXt0cnl7cmV0dXJuIFAuY2FsbChudWxsLGUsMCl9Y2F0Y2godCl7cmV0dXJuIFAuY2FsbCh0aGlzLGUsMCl9fX0iZnVuY3Rpb24iPT10eXBlb2YgQy5zZXRUaW1lb3V0JiYoUD1zZXRUaW1lb3V0KSwiZnVuY3Rpb24iPT10eXBlb2YgQy5jbGVhclRpbWVvdXQmJihJPWNsZWFyVGltZW91dCk7dmFyIEwsSD1bXSxNPSExLE49LTE7ZnVuY3Rpb24gaigpe00mJkwmJihNPSExLEwubGVuZ3RoP0g9TC5jb25jYXQoSCk6Tj0tMSxILmxlbmd0aCYmeCgpKX1mdW5jdGlvbiB4KCl7aWYoIU0pe3ZhciBlPVUoaik7TT0hMDtmb3IodmFyIHQ9SC5sZW5ndGg7dDspe2ZvcihMPUgsSD1bXTsrK048dDspTCYmTFtOXS5ydW4oKTtOPS0xLHQ9SC5sZW5ndGh9TD1udWxsLE09ITEsZnVuY3Rpb24oZSl7aWYoST09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KGUpO2lmKChJPT09RHx8IUkpJiZjbGVhclRpbWVvdXQpcmV0dXJuIEk9Y2xlYXJUaW1lb3V0LGNsZWFyVGltZW91dChlKTt0cnl7SShlKX1jYXRjaCh0KXt0cnl7cmV0dXJuIEkuY2FsbChudWxsLGUpfWNhdGNoKHQpe3JldHVybiBJLmNhbGwodGhpcyxlKX19fShlKX19ZnVuY3Rpb24gcShlLHQpe3RoaXMuZnVuPWUsdGhpcy5hcnJheT10fXEucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9O2Z1bmN0aW9uIEIoKXt9dmFyIEY9QixLPUIsSj1CLFc9Qix6PUIsVj1CLFk9Qjt2YXIgRz1DLnBlcmZvcm1hbmNlfHx7fSxYPUcubm93fHxHLm1vek5vd3x8Ry5tc05vd3x8Ry5vTm93fHxHLndlYmtpdE5vd3x8ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX07dmFyICQ9bmV3IERhdGU7dmFyIFo9e25leHRUaWNrOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXRbbi0xXT1hcmd1bWVudHNbbl07SC5wdXNoKG5ldyBxKGUsdCkpLDEhPT1ILmxlbmd0aHx8TXx8VSh4KX0sdGl0bGU6ImJyb3dzZXIiLGJyb3dzZXI6ITAsZW52Ont9LGFyZ3Y6W10sdmVyc2lvbjoiIix2ZXJzaW9uczp7fSxvbjpGLGFkZExpc3RlbmVyOkssb25jZTpKLG9mZjpXLHJlbW92ZUxpc3RlbmVyOnoscmVtb3ZlQWxsTGlzdGVuZXJzOlYsZW1pdDpZLGJpbmRpbmc6ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCIpfSxjd2Q6ZnVuY3Rpb24oKXtyZXR1cm4iLyJ9LGNoZGlyOmZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkIil9LHVtYXNrOmZ1bmN0aW9uKCl7cmV0dXJuIDB9LGhydGltZTpmdW5jdGlvbihlKXt2YXIgdD0uMDAxKlguY2FsbChHKSxuPU1hdGguZmxvb3IodCkscj1NYXRoLmZsb29yKHQlMSoxZTkpO3JldHVybiBlJiYobi09ZVswXSwoci09ZVsxXSk8MCYmKG4tLSxyKz0xZTkpKSxbbixyXX0scGxhdGZvcm06ImJyb3dzZXIiLHJlbGVhc2U6e30sY29uZmlnOnt9LHVwdGltZTpmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZS0kKS8xZTN9fSxRPVo7ZnVuY3Rpb24gZWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0LGFyZ3VtZW50cyl9fWNvbnN0e3RvU3RyaW5nOnRlfT1PYmplY3QucHJvdG90eXBlLHtnZXRQcm90b3R5cGVPZjpuZX09T2JqZWN0LHtpdGVyYXRvcjpyZSx0b1N0cmluZ1RhZzppZX09U3ltYm9sLG9lPShzZT1PYmplY3QuY3JlYXRlKG51bGwpLGU9Pntjb25zdCB0PXRlLmNhbGwoZSk7cmV0dXJuIHNlW3RdfHwoc2VbdF09dC5zbGljZSg4LC0xKS50b0xvd2VyQ2FzZSgpKX0pO3ZhciBzZTtjb25zdCBhZT1lPT4oZT1lLnRvTG93ZXJDYXNlKCksdD0+b2UodCk9PT1lKSxjZT1lPT50PT50eXBlb2YgdD09PWUse2lzQXJyYXk6dWV9PUFycmF5LGxlPWNlKCJ1bmRlZmluZWQiKTtmdW5jdGlvbiBkZShlKXtyZXR1cm4gbnVsbCE9PWUmJiFsZShlKSYmbnVsbCE9PWUuY29uc3RydWN0b3ImJiFsZShlLmNvbnN0cnVjdG9yKSYmcGUoZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikmJmUuY29uc3RydWN0b3IuaXNCdWZmZXIoZSl9Y29uc3QgaGU9YWUoIkFycmF5QnVmZmVyIik7Y29uc3QgZmU9Y2UoInN0cmluZyIpLHBlPWNlKCJmdW5jdGlvbiIpLGdlPWNlKCJudW1iZXIiKSx5ZT1lPT5udWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlLHZlPWU9PntpZigib2JqZWN0IiE9PW9lKGUpKXJldHVybiExO2NvbnN0IHQ9bmUoZSk7cmV0dXJuIShudWxsIT09dCYmdCE9PU9iamVjdC5wcm90b3R5cGUmJm51bGwhPT1PYmplY3QuZ2V0UHJvdG90eXBlT2YodCl8fGllIGluIGV8fHJlIGluIGUpfSxtZT1hZSgiRGF0ZSIpLHdlPWFlKCJGaWxlIiksYmU9YWUoIkJsb2IiKSxfZT1hZSgiRmlsZUxpc3QiKTtjb25zdCBTZT0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dm9pZCAwIT09Qz9DOnt9LEVlPXZvaWQgMCE9PVNlLkZvcm1EYXRhP1NlLkZvcm1EYXRhOnZvaWQgMCxSZT1hZSgiVVJMU2VhcmNoUGFyYW1zIiksW1RlLGtlLEFlLENlXT1bIlJlYWRhYmxlU3RyZWFtIiwiUmVxdWVzdCIsIlJlc3BvbnNlIiwiSGVhZGVycyJdLm1hcChhZSk7ZnVuY3Rpb24gT2UoZSx0KXtsZXQgbixyLHthbGxPd25LZXlzOmk9ITF9PWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fTtpZihudWxsIT1lKWlmKCJvYmplY3QiIT10eXBlb2YgZSYmKGU9W2VdKSx1ZShlKSlmb3Iobj0wLHI9ZS5sZW5ndGg7bjxyO24rKyl0LmNhbGwobnVsbCxlW25dLG4sZSk7ZWxzZXtpZihkZShlKSlyZXR1cm47Y29uc3Qgcj1pP09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpOk9iamVjdC5rZXlzKGUpLG89ci5sZW5ndGg7bGV0IHM7Zm9yKG49MDtuPG87bisrKXM9cltuXSx0LmNhbGwobnVsbCxlW3NdLHMsZSl9fWZ1bmN0aW9uIERlKGUsdCl7aWYoZGUoZSkpcmV0dXJuIG51bGw7dD10LnRvTG93ZXJDYXNlKCk7Y29uc3Qgbj1PYmplY3Qua2V5cyhlKTtsZXQgcixpPW4ubGVuZ3RoO2Zvcig7aS0tID4wOylpZihyPW5baV0sdD09PXIudG9Mb3dlckNhc2UoKSlyZXR1cm4gcjtyZXR1cm4gbnVsbH1jb25zdCBQZT0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6QyxJZT1lPT4hbGUoZSkmJmUhPT1QZTtjb25zdCBVZT0oTGU9InVuZGVmaW5lZCIhPXR5cGVvZiBVaW50OEFycmF5JiZuZShVaW50OEFycmF5KSxlPT5MZSYmZSBpbnN0YW5jZW9mIExlKTt2YXIgTGU7Y29uc3QgSGU9YWUoIkhUTUxGb3JtRWxlbWVudCIpLE1lPShlPT57bGV0e2hhc093blByb3BlcnR5OnR9PWU7cmV0dXJuKGUsbik9PnQuY2FsbChlLG4pfSkoT2JqZWN0LnByb3RvdHlwZSksTmU9YWUoIlJlZ0V4cCIpLGplPShlLHQpPT57Y29uc3Qgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhlKSxyPXt9O09lKG4sKChuLGkpPT57bGV0IG87ITEhPT0obz10KG4saSxlKSkmJihyW2ldPW98fG4pfSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUscil9O2NvbnN0IHhlPWFlKCJBc3luY0Z1bmN0aW9uIikscWU9KEJlPSJmdW5jdGlvbiI9PXR5cGVvZiBzZXRJbW1lZGlhdGUsRmU9cGUoUGUucG9zdE1lc3NhZ2UpLEJlP3NldEltbWVkaWF0ZTpGZT8oS2U9ImF4aW9zQCIuY29uY2F0KE1hdGgucmFuZG9tKCkpLEplPVtdLFBlLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLChlPT57bGV0e3NvdXJjZTp0LGRhdGE6bn09ZTt0PT09UGUmJm49PT1LZSYmSmUubGVuZ3RoJiZKZS5zaGlmdCgpKCl9KSwhMSksZT0+e0plLnB1c2goZSksUGUucG9zdE1lc3NhZ2UoS2UsIioiKX0pOmU9PnNldFRpbWVvdXQoZSkpO3ZhciBCZSxGZSxLZSxKZTtjb25zdCBXZT0idW5kZWZpbmVkIiE9dHlwZW9mIHF1ZXVlTWljcm90YXNrP3F1ZXVlTWljcm90YXNrLmJpbmQoUGUpOnZvaWQgMCE9PVEmJlEubmV4dFRpY2t8fHFlO3ZhciB6ZT17aXNBcnJheTp1ZSxpc0FycmF5QnVmZmVyOmhlLGlzQnVmZmVyOmRlLGlzRm9ybURhdGE6ZT0+e2xldCB0O3JldHVybiBlJiYoRWUmJmUgaW5zdGFuY2VvZiBFZXx8cGUoZS5hcHBlbmQpJiYoImZvcm1kYXRhIj09PSh0PW9lKGUpKXx8Im9iamVjdCI9PT10JiZwZShlLnRvU3RyaW5nKSYmIltvYmplY3QgRm9ybURhdGFdIj09PWUudG9TdHJpbmcoKSkpfSxpc0FycmF5QnVmZmVyVmlldzpmdW5jdGlvbihlKXtsZXQgdDtyZXR1cm4gdD0idW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZBcnJheUJ1ZmZlci5pc1ZpZXc/QXJyYXlCdWZmZXIuaXNWaWV3KGUpOmUmJmUuYnVmZmVyJiZoZShlLmJ1ZmZlciksdH0saXNTdHJpbmc6ZmUsaXNOdW1iZXI6Z2UsaXNCb29sZWFuOmU9PiEwPT09ZXx8ITE9PT1lLGlzT2JqZWN0OnllLGlzUGxhaW5PYmplY3Q6dmUsaXNFbXB0eU9iamVjdDplPT57aWYoIXllKGUpfHxkZShlKSlyZXR1cm4hMTt0cnl7cmV0dXJuIDA9PT1PYmplY3Qua2V5cyhlKS5sZW5ndGgmJk9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PU9iamVjdC5wcm90b3R5cGV9Y2F0Y2goZSl7cmV0dXJuITF9fSxpc1JlYWRhYmxlU3RyZWFtOlRlLGlzUmVxdWVzdDprZSxpc1Jlc3BvbnNlOkFlLGlzSGVhZGVyczpDZSxpc1VuZGVmaW5lZDpsZSxpc0RhdGU6bWUsaXNGaWxlOndlLGlzUmVhY3ROYXRpdmVCbG9iOmU9PiEoIWV8fHZvaWQgMD09PWUudXJpKSxpc1JlYWN0TmF0aXZlOmU9PmUmJnZvaWQgMCE9PWUuZ2V0UGFydHMsaXNCbG9iOmJlLGlzUmVnRXhwOk5lLGlzRnVuY3Rpb246cGUsaXNTdHJlYW06ZT0+eWUoZSkmJnBlKGUucGlwZSksaXNVUkxTZWFyY2hQYXJhbXM6UmUsaXNUeXBlZEFycmF5OlVlLGlzRmlsZUxpc3Q6X2UsZm9yRWFjaDpPZSxtZXJnZTpmdW5jdGlvbiBlKCl7Y29uc3R7Y2FzZWxlc3M6dCxza2lwVW5kZWZpbmVkOm59PUllKHRoaXMpJiZ0aGlzfHx7fSxyPXt9LGk9KGksbyk9PntpZigiX19wcm90b19fIj09PW98fCJjb25zdHJ1Y3RvciI9PT1vfHwicHJvdG90eXBlIj09PW8pcmV0dXJuO2NvbnN0IHM9dCYmRGUocixvKXx8bzt2ZShyW3NdKSYmdmUoaSk/cltzXT1lKHJbc10saSk6dmUoaSk/cltzXT1lKHt9LGkpOnVlKGkpP3Jbc109aS5zbGljZSgpOm4mJmxlKGkpfHwocltzXT1pKX07Zm9yKGxldCBlPTAsdD1hcmd1bWVudHMubGVuZ3RoO2U8dDtlKyspYXJndW1lbnRzW2VdJiZPZShhcmd1bWVudHNbZV0saSk7cmV0dXJuIHJ9LGV4dGVuZDpmdW5jdGlvbihlLHQsbil7bGV0e2FsbE93bktleXM6cn09YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOnt9O3JldHVybiBPZSh0LCgodCxyKT0+e24mJnBlKHQpP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIse3ZhbHVlOmVlKHQsbiksd3JpdGFibGU6ITAsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KTpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLHt2YWx1ZTp0LHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9KSx7YWxsT3duS2V5czpyfSksZX0sdHJpbTplPT5lLnRyaW0/ZS50cmltKCk6ZS5yZXBsYWNlKC9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZywiIiksc3RyaXBCT006ZT0+KDY1Mjc5PT09ZS5jaGFyQ29kZUF0KDApJiYoZT1lLnNsaWNlKDEpKSxlKSxpbmhlcml0czooZSx0LG4scik9PntlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiY29uc3RydWN0b3IiLHt2YWx1ZTplLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInN1cGVyIix7dmFsdWU6dC5wcm90b3R5cGV9KSxuJiZPYmplY3QuYXNzaWduKGUucHJvdG90eXBlLG4pfSx0b0ZsYXRPYmplY3Q6KGUsdCxuLHIpPT57bGV0IGksbyxzO2NvbnN0IGE9e307aWYodD10fHx7fSxudWxsPT1lKXJldHVybiB0O2Rve2ZvcihpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpLG89aS5sZW5ndGg7by0tID4wOylzPWlbb10sciYmIXIocyxlLHQpfHxhW3NdfHwodFtzXT1lW3NdLGFbc109ITApO2U9ITEhPT1uJiZuZShlKX13aGlsZShlJiYoIW58fG4oZSx0KSkmJmUhPT1PYmplY3QucHJvdG90eXBlKTtyZXR1cm4gdH0sa2luZE9mOm9lLGtpbmRPZlRlc3Q6YWUsZW5kc1dpdGg6KGUsdCxuKT0+e2U9U3RyaW5nKGUpLCh2b2lkIDA9PT1ufHxuPmUubGVuZ3RoKSYmKG49ZS5sZW5ndGgpLG4tPXQubGVuZ3RoO2NvbnN0IHI9ZS5pbmRleE9mKHQsbik7cmV0dXJuLTEhPT1yJiZyPT09bn0sdG9BcnJheTplPT57aWYoIWUpcmV0dXJuIG51bGw7aWYodWUoZSkpcmV0dXJuIGU7bGV0IHQ9ZS5sZW5ndGg7aWYoIWdlKHQpKXJldHVybiBudWxsO2NvbnN0IG49bmV3IEFycmF5KHQpO2Zvcig7dC0tID4wOyluW3RdPWVbdF07cmV0dXJuIG59LGZvckVhY2hFbnRyeTooZSx0KT0+e2NvbnN0IG49KGUmJmVbcmVdKS5jYWxsKGUpO2xldCByO2Zvcig7KHI9bi5uZXh0KCkpJiYhci5kb25lOyl7Y29uc3Qgbj1yLnZhbHVlO3QuY2FsbChlLG5bMF0sblsxXSl9fSxtYXRjaEFsbDooZSx0KT0+e2xldCBuO2NvbnN0IHI9W107Zm9yKDtudWxsIT09KG49ZS5leGVjKHQpKTspci5wdXNoKG4pO3JldHVybiByfSxpc0hUTUxGb3JtOkhlLGhhc093blByb3BlcnR5Ok1lLGhhc093blByb3A6TWUscmVkdWNlRGVzY3JpcHRvcnM6amUsZnJlZXplTWV0aG9kczplPT57amUoZSwoKHQsbik9PntpZihwZShlKSYmLTEhPT1bImFyZ3VtZW50cyIsImNhbGxlciIsImNhbGxlZSJdLmluZGV4T2YobikpcmV0dXJuITE7Y29uc3Qgcj1lW25dO3BlKHIpJiYodC5lbnVtZXJhYmxlPSExLCJ3cml0YWJsZSJpbiB0P3Qud3JpdGFibGU9ITE6dC5zZXR8fCh0LnNldD0oKT0+e3Rocm93IEVycm9yKCJDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCAnIituKyInIil9KSl9KSl9LHRvT2JqZWN0U2V0OihlLHQpPT57Y29uc3Qgbj17fSxyPWU9PntlLmZvckVhY2goKGU9PntuW2VdPSEwfSkpfTtyZXR1cm4gdWUoZSk/cihlKTpyKFN0cmluZyhlKS5zcGxpdCh0KSksbn0sdG9DYW1lbENhc2U6ZT0+ZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xzXShbYS16XGRdKShcdyopL2csKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdC50b1VwcGVyQ2FzZSgpK259KSksbm9vcDooKT0+e30sdG9GaW5pdGVOdW1iZXI6KGUsdCk9Pm51bGwhPWUmJk51bWJlci5pc0Zpbml0ZShlPStlKT9lOnQsZmluZEtleTpEZSxnbG9iYWw6UGUsaXNDb250ZXh0RGVmaW5lZDpJZSxpc1NwZWNDb21wbGlhbnRGb3JtOmZ1bmN0aW9uKGUpe3JldHVybiEhKGUmJnBlKGUuYXBwZW5kKSYmIkZvcm1EYXRhIj09PWVbaWVdJiZlW3JlXSl9LHRvSlNPTk9iamVjdDplPT57Y29uc3QgdD1uZXcgQXJyYXkoMTApLG49KGUscik9PntpZih5ZShlKSl7aWYodC5pbmRleE9mKGUpPj0wKXJldHVybjtpZihkZShlKSlyZXR1cm4gZTtpZighKCJ0b0pTT04iaW4gZSkpe3Rbcl09ZTtjb25zdCBpPXVlKGUpP1tdOnt9O3JldHVybiBPZShlLCgoZSx0KT0+e2NvbnN0IG89bihlLHIrMSk7IWxlKG8pJiYoaVt0XT1vKX0pKSx0W3JdPXZvaWQgMCxpfX1yZXR1cm4gZX07cmV0dXJuIG4oZSwwKX0saXNBc3luY0ZuOnhlLGlzVGhlbmFibGU6ZT0+ZSYmKHllKGUpfHxwZShlKSkmJnBlKGUudGhlbikmJnBlKGUuY2F0Y2gpLHNldEltbWVkaWF0ZTpxZSxhc2FwOldlLGlzSXRlcmFibGU6ZT0+bnVsbCE9ZSYmcGUoZVtyZV0pfSxWZT1bXSxZZT1bXSxHZT0idW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQ4QXJyYXk/VWludDhBcnJheTpBcnJheSxYZT0hMTtmdW5jdGlvbiAkZSgpe1hlPSEwO2Zvcih2YXIgZT0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIsdD0wLG49ZS5sZW5ndGg7dDxuOysrdClWZVt0XT1lW3RdLFllW2UuY2hhckNvZGVBdCh0KV09dDtZZVsiLSIuY2hhckNvZGVBdCgwKV09NjIsWWVbIl8iLmNoYXJDb2RlQXQoMCldPTYzfWZ1bmN0aW9uIFplKGUsdCxuKXtmb3IodmFyIHIsaSxvPVtdLHM9dDtzPG47cys9MylyPShlW3NdPDwxNikrKGVbcysxXTw8OCkrZVtzKzJdLG8ucHVzaChWZVsoaT1yKT4+MTgmNjNdK1ZlW2k+PjEyJjYzXStWZVtpPj42JjYzXStWZVs2MyZpXSk7cmV0dXJuIG8uam9pbigiIil9ZnVuY3Rpb24gUWUoZSl7dmFyIHQ7WGV8fCRlKCk7Zm9yKHZhciBuPWUubGVuZ3RoLHI9biUzLGk9IiIsbz1bXSxzPTE2MzgzLGE9MCxjPW4tcjthPGM7YSs9cylvLnB1c2goWmUoZSxhLGErcz5jP2M6YStzKSk7cmV0dXJuIDE9PT1yPyh0PWVbbi0xXSxpKz1WZVt0Pj4yXSxpKz1WZVt0PDw0JjYzXSxpKz0iPT0iKToyPT09ciYmKHQ9KGVbbi0yXTw8OCkrZVtuLTFdLGkrPVZlW3Q+PjEwXSxpKz1WZVt0Pj40JjYzXSxpKz1WZVt0PDwyJjYzXSxpKz0iPSIpLG8ucHVzaChpKSxvLmpvaW4oIiIpfWZ1bmN0aW9uIGV0KGUsdCxuLHIsaSl7dmFyIG8scyxhPTgqaS1yLTEsYz0oMTw8YSktMSx1PWM+PjEsbD0tNyxkPW4/aS0xOjAsaD1uPy0xOjEsZj1lW3QrZF07Zm9yKGQrPWgsbz1mJigxPDwtbCktMSxmPj49LWwsbCs9YTtsPjA7bz0yNTYqbytlW3QrZF0sZCs9aCxsLT04KTtmb3Iocz1vJigxPDwtbCktMSxvPj49LWwsbCs9cjtsPjA7cz0yNTYqcytlW3QrZF0sZCs9aCxsLT04KTtpZigwPT09bylvPTEtdTtlbHNle2lmKG89PT1jKXJldHVybiBzP05hTjoxLzAqKGY/LTE6MSk7cys9TWF0aC5wb3coMixyKSxvLT11fXJldHVybihmPy0xOjEpKnMqTWF0aC5wb3coMixvLXIpfWZ1bmN0aW9uIHR0KGUsdCxuLHIsaSxvKXt2YXIgcyxhLGMsdT04Km8taS0xLGw9KDE8PHUpLTEsZD1sPj4xLGg9MjM9PT1pP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxmPXI/MDpvLTEscD1yPzE6LTEsZz10PDB8fDA9PT10JiYxL3Q8MD8xOjA7Zm9yKHQ9TWF0aC5hYnModCksaXNOYU4odCl8fHQ9PT0xLzA/KGE9aXNOYU4odCk/MTowLHM9bCk6KHM9TWF0aC5mbG9vcihNYXRoLmxvZyh0KS9NYXRoLkxOMiksdCooYz1NYXRoLnBvdygyLC1zKSk8MSYmKHMtLSxjKj0yKSwodCs9cytkPj0xP2gvYzpoKk1hdGgucG93KDIsMS1kKSkqYz49MiYmKHMrKyxjLz0yKSxzK2Q+PWw/KGE9MCxzPWwpOnMrZD49MT8oYT0odCpjLTEpKk1hdGgucG93KDIsaSkscys9ZCk6KGE9dCpNYXRoLnBvdygyLGQtMSkqTWF0aC5wb3coMixpKSxzPTApKTtpPj04O2VbbitmXT0yNTUmYSxmKz1wLGEvPTI1NixpLT04KTtmb3Iocz1zPDxpfGEsdSs9aTt1PjA7ZVtuK2ZdPTI1NSZzLGYrPXAscy89MjU2LHUtPTgpO2VbbitmLXBdfD0xMjgqZ312YXIgbnQ9e30udG9TdHJpbmcscnQ9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09bnQuY2FsbChlKX07YXQuVFlQRURfQVJSQVlfU1VQUE9SVD12b2lkIDA9PT1DLlRZUEVEX0FSUkFZX1NVUFBPUlR8fEMuVFlQRURfQVJSQVlfU1VQUE9SVDt2YXIgaXQ9b3QoKTtmdW5jdGlvbiBvdCgpe3JldHVybiBhdC5UWVBFRF9BUlJBWV9TVVBQT1JUPzIxNDc0ODM2NDc6MTA3Mzc0MTgyM31mdW5jdGlvbiBzdChlLHQpe2lmKG90KCk8dCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0eXBlZCBhcnJheSBsZW5ndGgiKTtyZXR1cm4gYXQuVFlQRURfQVJSQVlfU1VQUE9SVD8oZT1uZXcgVWludDhBcnJheSh0KSkuX19wcm90b19fPWF0LnByb3RvdHlwZToobnVsbD09PWUmJihlPW5ldyBhdCh0KSksZS5sZW5ndGg9dCksZX1mdW5jdGlvbiBhdChlLHQsbil7aWYoIShhdC5UWVBFRF9BUlJBWV9TVVBQT1JUfHx0aGlzIGluc3RhbmNlb2YgYXQpKXJldHVybiBuZXcgYXQoZSx0LG4pO2lmKCJudW1iZXIiPT10eXBlb2YgZSl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigiSWYgZW5jb2RpbmcgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmciKTtyZXR1cm4gbHQodGhpcyxlKX1yZXR1cm4gY3QodGhpcyxlLHQsbil9ZnVuY3Rpb24gY3QoZSx0LG4scil7aWYoIm51bWJlciI9PXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKTtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZ0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/ZnVuY3Rpb24oZSx0LG4scil7aWYodC5ieXRlTGVuZ3RoLG48MHx8dC5ieXRlTGVuZ3RoPG4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIidvZmZzZXQnIGlzIG91dCBvZiBib3VuZHMiKTtpZih0LmJ5dGVMZW5ndGg8bisocnx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIidsZW5ndGgnIGlzIG91dCBvZiBib3VuZHMiKTt0PXZvaWQgMD09PW4mJnZvaWQgMD09PXI/bmV3IFVpbnQ4QXJyYXkodCk6dm9pZCAwPT09cj9uZXcgVWludDhBcnJheSh0LG4pOm5ldyBVaW50OEFycmF5KHQsbixyKTthdC5UWVBFRF9BUlJBWV9TVVBQT1JUPyhlPXQpLl9fcHJvdG9fXz1hdC5wcm90b3R5cGU6ZT1kdChlLHQpO3JldHVybiBlfShlLHQsbixyKToic3RyaW5nIj09dHlwZW9mIHQ/ZnVuY3Rpb24oZSx0LG4peyJzdHJpbmciPT10eXBlb2YgbiYmIiIhPT1ufHwobj0idXRmOCIpO2lmKCFhdC5pc0VuY29kaW5nKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoJyJlbmNvZGluZyIgbXVzdCBiZSBhIHZhbGlkIHN0cmluZyBlbmNvZGluZycpO3ZhciByPTB8cHQodCxuKSxpPShlPXN0KGUscikpLndyaXRlKHQsbik7aSE9PXImJihlPWUuc2xpY2UoMCxpKSk7cmV0dXJuIGV9KGUsdCxuKTpmdW5jdGlvbihlLHQpe2lmKGZ0KHQpKXt2YXIgbj0wfGh0KHQubGVuZ3RoKTtyZXR1cm4gMD09PShlPXN0KGUsbikpLmxlbmd0aHx8dC5jb3B5KGUsMCwwLG4pLGV9aWYodCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmdC5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcnx8Imxlbmd0aCJpbiB0KXJldHVybiJudW1iZXIiIT10eXBlb2YgdC5sZW5ndGh8fChyPXQubGVuZ3RoKSE9cj9zdChlLDApOmR0KGUsdCk7aWYoIkJ1ZmZlciI9PT10LnR5cGUmJnJ0KHQuZGF0YSkpcmV0dXJuIGR0KGUsdC5kYXRhKX12YXIgcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgYXJyYXktbGlrZSBvYmplY3QuIil9KGUsdCl9ZnVuY3Rpb24gdXQoZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJyk7aWYoZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmUnKX1mdW5jdGlvbiBsdChlLHQpe2lmKHV0KHQpLGU9c3QoZSx0PDA/MDowfGh0KHQpKSwhYXQuVFlQRURfQVJSQVlfU1VQUE9SVClmb3IodmFyIG49MDtuPHQ7KytuKWVbbl09MDtyZXR1cm4gZX1mdW5jdGlvbiBkdChlLHQpe3ZhciBuPXQubGVuZ3RoPDA/MDowfGh0KHQubGVuZ3RoKTtlPXN0KGUsbik7Zm9yKHZhciByPTA7cjxuO3IrPTEpZVtyXT0yNTUmdFtyXTtyZXR1cm4gZX1mdW5jdGlvbiBodChlKXtpZihlPj1vdCgpKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4IitvdCgpLnRvU3RyaW5nKDE2KSsiIGJ5dGVzIik7cmV0dXJuIDB8ZX1mdW5jdGlvbiBmdChlKXtyZXR1cm4hKG51bGw9PWV8fCFlLl9pc0J1ZmZlcil9ZnVuY3Rpb24gcHQoZSx0KXtpZihmdChlKSlyZXR1cm4gZS5sZW5ndGg7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmImZ1bmN0aW9uIj09dHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldyYmKEFycmF5QnVmZmVyLmlzVmlldyhlKXx8ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSlyZXR1cm4gZS5ieXRlTGVuZ3RoOyJzdHJpbmciIT10eXBlb2YgZSYmKGU9IiIrZSk7dmFyIG49ZS5sZW5ndGg7aWYoMD09PW4pcmV0dXJuIDA7Zm9yKHZhciByPSExOzspc3dpdGNoKHQpe2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIG47Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlIHZvaWQgMDpyZXR1cm4gQnQoZSkubGVuZ3RoO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gMipuO2Nhc2UiaGV4IjpyZXR1cm4gbj4+PjE7Y2FzZSJiYXNlNjQiOnJldHVybiBGdChlKS5sZW5ndGg7ZGVmYXVsdDppZihyKXJldHVybiBCdChlKS5sZW5ndGg7dD0oIiIrdCkudG9Mb3dlckNhc2UoKSxyPSEwfX1mdW5jdGlvbiBndChlLHQsbil7dmFyIHI9ITE7aWYoKHZvaWQgMD09PXR8fHQ8MCkmJih0PTApLHQ+dGhpcy5sZW5ndGgpcmV0dXJuIiI7aWYoKHZvaWQgMD09PW58fG4+dGhpcy5sZW5ndGgpJiYobj10aGlzLmxlbmd0aCksbjw9MClyZXR1cm4iIjtpZigobj4+Pj0wKTw9KHQ+Pj49MCkpcmV0dXJuIiI7Zm9yKGV8fChlPSJ1dGY4Iik7Oylzd2l0Y2goZSl7Y2FzZSJoZXgiOnJldHVybiBEdCh0aGlzLHQsbik7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4ga3QodGhpcyx0LG4pO2Nhc2UiYXNjaWkiOnJldHVybiBDdCh0aGlzLHQsbik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gT3QodGhpcyx0LG4pO2Nhc2UiYmFzZTY0IjpyZXR1cm4gVHQodGhpcyx0LG4pO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gUHQodGhpcyx0LG4pO2RlZmF1bHQ6aWYocil0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK2UpO2U9KGUrIiIpLnRvTG93ZXJDYXNlKCkscj0hMH19ZnVuY3Rpb24geXQoZSx0LG4pe3ZhciByPWVbdF07ZVt0XT1lW25dLGVbbl09cn1mdW5jdGlvbiB2dChlLHQsbixyLGkpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4tMTtpZigic3RyaW5nIj09dHlwZW9mIG4/KHI9bixuPTApOm4+MjE0NzQ4MzY0Nz9uPTIxNDc0ODM2NDc6bjwtMjE0NzQ4MzY0OCYmKG49LTIxNDc0ODM2NDgpLG49K24saXNOYU4obikmJihuPWk/MDplLmxlbmd0aC0xKSxuPDAmJihuPWUubGVuZ3RoK24pLG4+PWUubGVuZ3RoKXtpZihpKXJldHVybi0xO249ZS5sZW5ndGgtMX1lbHNlIGlmKG48MCl7aWYoIWkpcmV0dXJuLTE7bj0wfWlmKCJzdHJpbmciPT10eXBlb2YgdCYmKHQ9YXQuZnJvbSh0LHIpKSxmdCh0KSlyZXR1cm4gMD09PXQubGVuZ3RoPy0xOm10KGUsdCxuLHIsaSk7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiB0Jj0yNTUsYXQuVFlQRURfQVJSQVlfU1VQUE9SVCYmImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/aT9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoZSx0LG4pOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoZSx0LG4pOm10KGUsW3RdLG4scixpKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKX1mdW5jdGlvbiBtdChlLHQsbixyLGkpe3ZhciBvLHM9MSxhPWUubGVuZ3RoLGM9dC5sZW5ndGg7aWYodm9pZCAwIT09ciYmKCJ1Y3MyIj09PShyPVN0cmluZyhyKS50b0xvd2VyQ2FzZSgpKXx8InVjcy0yIj09PXJ8fCJ1dGYxNmxlIj09PXJ8fCJ1dGYtMTZsZSI9PT1yKSl7aWYoZS5sZW5ndGg8Mnx8dC5sZW5ndGg8MilyZXR1cm4tMTtzPTIsYS89MixjLz0yLG4vPTJ9ZnVuY3Rpb24gdShlLHQpe3JldHVybiAxPT09cz9lW3RdOmUucmVhZFVJbnQxNkJFKHQqcyl9aWYoaSl7dmFyIGw9LTE7Zm9yKG89bjtvPGE7bysrKWlmKHUoZSxvKT09PXUodCwtMT09PWw/MDpvLWwpKXtpZigtMT09PWwmJihsPW8pLG8tbCsxPT09YylyZXR1cm4gbCpzfWVsc2UtMSE9PWwmJihvLT1vLWwpLGw9LTF9ZWxzZSBmb3IobitjPmEmJihuPWEtYyksbz1uO28+PTA7by0tKXtmb3IodmFyIGQ9ITAsaD0wO2g8YztoKyspaWYodShlLG8raCkhPT11KHQsaCkpe2Q9ITE7YnJlYWt9aWYoZClyZXR1cm4gb31yZXR1cm4tMX1mdW5jdGlvbiB3dChlLHQsbixyKXtuPU51bWJlcihuKXx8MDt2YXIgaT1lLmxlbmd0aC1uO3I/KHI9TnVtYmVyKHIpKT5pJiYocj1pKTpyPWk7dmFyIG89dC5sZW5ndGg7aWYobyUyIT0wKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyIpO3I+by8yJiYocj1vLzIpO2Zvcih2YXIgcz0wO3M8cjsrK3Mpe3ZhciBhPXBhcnNlSW50KHQuc3Vic3RyKDIqcywyKSwxNik7aWYoaXNOYU4oYSkpcmV0dXJuIHM7ZVtuK3NdPWF9cmV0dXJuIHN9ZnVuY3Rpb24gYnQoZSx0LG4scil7cmV0dXJuIEt0KEJ0KHQsZS5sZW5ndGgtbiksZSxuLHIpfWZ1bmN0aW9uIF90KGUsdCxuLHIpe3JldHVybiBLdChmdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0wO248ZS5sZW5ndGg7KytuKXQucHVzaCgyNTUmZS5jaGFyQ29kZUF0KG4pKTtyZXR1cm4gdH0odCksZSxuLHIpfWZ1bmN0aW9uIFN0KGUsdCxuLHIpe3JldHVybiBfdChlLHQsbixyKX1mdW5jdGlvbiBFdChlLHQsbixyKXtyZXR1cm4gS3QoRnQodCksZSxuLHIpfWZ1bmN0aW9uIFJ0KGUsdCxuLHIpe3JldHVybiBLdChmdW5jdGlvbihlLHQpe2Zvcih2YXIgbixyLGksbz1bXSxzPTA7czxlLmxlbmd0aCYmISgodC09Mik8MCk7KytzKXI9KG49ZS5jaGFyQ29kZUF0KHMpKT4+OCxpPW4lMjU2LG8ucHVzaChpKSxvLnB1c2gocik7cmV0dXJuIG99KHQsZS5sZW5ndGgtbiksZSxuLHIpfWZ1bmN0aW9uIFR0KGUsdCxuKXtyZXR1cm4gMD09PXQmJm49PT1lLmxlbmd0aD9RZShlKTpRZShlLnNsaWNlKHQsbikpfWZ1bmN0aW9uIGt0KGUsdCxuKXtuPU1hdGgubWluKGUubGVuZ3RoLG4pO2Zvcih2YXIgcj1bXSxpPXQ7aTxuOyl7dmFyIG8scyxhLGMsdT1lW2ldLGw9bnVsbCxkPXU+MjM5PzQ6dT4yMjM/Mzp1PjE5MT8yOjE7aWYoaStkPD1uKXN3aXRjaChkKXtjYXNlIDE6dTwxMjgmJihsPXUpO2JyZWFrO2Nhc2UgMjoxMjg9PSgxOTImKG89ZVtpKzFdKSkmJihjPSgzMSZ1KTw8Nnw2MyZvKT4xMjcmJihsPWMpO2JyZWFrO2Nhc2UgMzpvPWVbaSsxXSxzPWVbaSsyXSwxMjg9PSgxOTImbykmJjEyOD09KDE5MiZzKSYmKGM9KDE1JnUpPDwxMnwoNjMmbyk8PDZ8NjMmcyk+MjA0NyYmKGM8NTUyOTZ8fGM+NTczNDMpJiYobD1jKTticmVhaztjYXNlIDQ6bz1lW2krMV0scz1lW2krMl0sYT1lW2krM10sMTI4PT0oMTkyJm8pJiYxMjg9PSgxOTImcykmJjEyOD09KDE5MiZhKSYmKGM9KDE1JnUpPDwxOHwoNjMmbyk8PDEyfCg2MyZzKTw8Nnw2MyZhKT42NTUzNSYmYzwxMTE0MTEyJiYobD1jKX1udWxsPT09bD8obD02NTUzMyxkPTEpOmw+NjU1MzUmJihsLT02NTUzNixyLnB1c2gobD4+PjEwJjEwMjN8NTUyOTYpLGw9NTYzMjB8MTAyMyZsKSxyLnB1c2gobCksaSs9ZH1yZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGg7aWYodDw9QXQpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUpO3ZhciBuPSIiLHI9MDtmb3IoO3I8dDspbis9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZS5zbGljZShyLHIrPUF0KSk7cmV0dXJuIG59KHIpfWF0LnBvb2xTaXplPTgxOTIsYXQuX2F1Z21lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19fPWF0LnByb3RvdHlwZSxlfSxhdC5mcm9tPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gY3QobnVsbCxlLHQsbil9LGF0LlRZUEVEX0FSUkFZX1NVUFBPUlQmJihhdC5wcm90b3R5cGUuX19wcm90b19fPVVpbnQ4QXJyYXkucHJvdG90eXBlLGF0Ll9fcHJvdG9fXz1VaW50OEFycmF5KSxhdC5hbGxvYz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB1dCh0KSx0PD0wP3N0KGUsdCk6dm9pZCAwIT09bj8ic3RyaW5nIj09dHlwZW9mIHI/c3QoZSx0KS5maWxsKG4scik6c3QoZSx0KS5maWxsKG4pOnN0KGUsdCl9KG51bGwsZSx0LG4pfSxhdC5hbGxvY1Vuc2FmZT1mdW5jdGlvbihlKXtyZXR1cm4gbHQobnVsbCxlKX0sYXQuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe3JldHVybiBsdChudWxsLGUpfSxhdC5pc0J1ZmZlcj1KdCxhdC5jb21wYXJlPWZ1bmN0aW9uKGUsdCl7aWYoIWZ0KGUpfHwhZnQodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIG11c3QgYmUgQnVmZmVycyIpO2lmKGU9PT10KXJldHVybiAwO2Zvcih2YXIgbj1lLmxlbmd0aCxyPXQubGVuZ3RoLGk9MCxvPU1hdGgubWluKG4scik7aTxvOysraSlpZihlW2ldIT09dFtpXSl7bj1lW2ldLHI9dFtpXTticmVha31yZXR1cm4gbjxyPy0xOnI8bj8xOjB9LGF0LmlzRW5jb2Rpbmc9ZnVuY3Rpb24oZSl7c3dpdGNoKFN0cmluZyhlKS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LGF0LmNvbmNhdD1mdW5jdGlvbihlLHQpe2lmKCFydChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PWUubGVuZ3RoKXJldHVybiBhdC5hbGxvYygwKTt2YXIgbjtpZih2b2lkIDA9PT10KWZvcih0PTAsbj0wO248ZS5sZW5ndGg7KytuKXQrPWVbbl0ubGVuZ3RoO3ZhciByPWF0LmFsbG9jVW5zYWZlKHQpLGk9MDtmb3Iobj0wO248ZS5sZW5ndGg7KytuKXt2YXIgbz1lW25dO2lmKCFmdChvKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7by5jb3B5KHIsaSksaSs9by5sZW5ndGh9cmV0dXJuIHJ9LGF0LmJ5dGVMZW5ndGg9cHQsYXQucHJvdG90eXBlLl9pc0J1ZmZlcj0hMCxhdC5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSUyIT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz0yKXl0KHRoaXMsdCx0KzEpO3JldHVybiB0aGlzfSxhdC5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSU0IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz00KXl0KHRoaXMsdCx0KzMpLHl0KHRoaXMsdCsxLHQrMik7cmV0dXJuIHRoaXN9LGF0LnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTghPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTgpeXQodGhpcyx0LHQrNykseXQodGhpcyx0KzEsdCs2KSx5dCh0aGlzLHQrMix0KzUpLHl0KHRoaXMsdCszLHQrNCk7cmV0dXJuIHRoaXN9LGF0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBlPTB8dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT1lPyIiOjA9PT1hcmd1bWVudHMubGVuZ3RoP2t0KHRoaXMsMCxlKTpndC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGF0LnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7aWYoIWZ0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PWV8fDA9PT1hdC5jb21wYXJlKHRoaXMsZSl9LGF0LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIGU9IiI7cmV0dXJuIHRoaXMubGVuZ3RoPjAmJihlPXRoaXMudG9TdHJpbmcoImhleCIsMCw1MCkubWF0Y2goLy57Mn0vZykuam9pbigiICIpLHRoaXMubGVuZ3RoPjUwJiYoZSs9IiAuLi4gIikpLCI8QnVmZmVyICIrZSsiPiJ9LGF0LnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKGUsdCxuLHIsaSl7aWYoIWZ0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtpZih2b2lkIDA9PT10JiYodD0wKSx2b2lkIDA9PT1uJiYobj1lP2UubGVuZ3RoOjApLHZvaWQgMD09PXImJihyPTApLHZvaWQgMD09PWkmJihpPXRoaXMubGVuZ3RoKSx0PDB8fG4+ZS5sZW5ndGh8fHI8MHx8aT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYocj49aSYmdD49bilyZXR1cm4gMDtpZihyPj1pKXJldHVybi0xO2lmKHQ+PW4pcmV0dXJuIDE7aWYodGhpcz09PWUpcmV0dXJuIDA7Zm9yKHZhciBvPShpPj4+PTApLShyPj4+PTApLHM9KG4+Pj49MCktKHQ+Pj49MCksYT1NYXRoLm1pbihvLHMpLGM9dGhpcy5zbGljZShyLGkpLHU9ZS5zbGljZSh0LG4pLGw9MDtsPGE7KytsKWlmKGNbbF0hPT11W2xdKXtvPWNbbF0scz11W2xdO2JyZWFrfXJldHVybiBvPHM/LTE6czxvPzE6MH0sYXQucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihlLHQsbil9LGF0LnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdnQodGhpcyxlLHQsbiwhMCl9LGF0LnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHZ0KHRoaXMsZSx0LG4sITEpfSxhdC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZSx0LG4scil7aWYodm9pZCAwPT09dClyPSJ1dGY4IixuPXRoaXMubGVuZ3RoLHQ9MDtlbHNlIGlmKHZvaWQgMD09PW4mJiJzdHJpbmciPT10eXBlb2YgdClyPXQsbj10aGlzLmxlbmd0aCx0PTA7ZWxzZXtpZighaXNGaW5pdGUodCkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO3R8PTAsaXNGaW5pdGUobik/KG58PTAsdm9pZCAwPT09ciYmKHI9InV0ZjgiKSk6KHI9bixuPXZvaWQgMCl9dmFyIGk9dGhpcy5sZW5ndGgtdDtpZigodm9pZCAwPT09bnx8bj5pKSYmKG49aSksZS5sZW5ndGg+MCYmKG48MHx8dDwwKXx8dD50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMiKTtyfHwocj0idXRmOCIpO2Zvcih2YXIgbz0hMTs7KXN3aXRjaChyKXtjYXNlImhleCI6cmV0dXJuIHd0KHRoaXMsZSx0LG4pO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIGJ0KHRoaXMsZSx0LG4pO2Nhc2UiYXNjaWkiOnJldHVybiBfdCh0aGlzLGUsdCxuKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBTdCh0aGlzLGUsdCxuKTtjYXNlImJhc2U2NCI6cmV0dXJuIEV0KHRoaXMsZSx0LG4pO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gUnQodGhpcyxlLHQsbik7ZGVmYXVsdDppZihvKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrcik7cj0oIiIrcikudG9Mb3dlckNhc2UoKSxvPSEwfX0sYXQucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07dmFyIEF0PTQwOTY7ZnVuY3Rpb24gQ3QoZSx0LG4pe3ZhciByPSIiO249TWF0aC5taW4oZS5sZW5ndGgsbik7Zm9yKHZhciBpPXQ7aTxuOysraSlyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDEyNyZlW2ldKTtyZXR1cm4gcn1mdW5jdGlvbiBPdChlLHQsbil7dmFyIHI9IiI7bj1NYXRoLm1pbihlLmxlbmd0aCxuKTtmb3IodmFyIGk9dDtpPG47KytpKXIrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtpXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gRHQoZSx0LG4pe3ZhciByPWUubGVuZ3RoOyghdHx8dDwwKSYmKHQ9MCksKCFufHxuPDB8fG4+cikmJihuPXIpO2Zvcih2YXIgaT0iIixvPXQ7bzxuOysrbylpKz1xdChlW29dKTtyZXR1cm4gaX1mdW5jdGlvbiBQdChlLHQsbil7Zm9yKHZhciByPWUuc2xpY2UodCxuKSxpPSIiLG89MDtvPHIubGVuZ3RoO28rPTIpaSs9U3RyaW5nLmZyb21DaGFyQ29kZShyW29dKzI1NipyW28rMV0pO3JldHVybiBpfWZ1bmN0aW9uIEl0KGUsdCxuKXtpZihlJTEhPTB8fGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0IGlzIG5vdCB1aW50Iik7aWYoZSt0Pm4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlRyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgiKX1mdW5jdGlvbiBVdChlLHQsbixyLGksbyl7aWYoIWZ0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWZmZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZih0Pml8fHQ8byl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInZhbHVlIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJyk7aWYobityPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBMdChlLHQsbixyKXt0PDAmJih0PTY1NTM1K3QrMSk7Zm9yKHZhciBpPTAsbz1NYXRoLm1pbihlLmxlbmd0aC1uLDIpO2k8bzsrK2kpZVtuK2ldPSh0JjI1NTw8OCoocj9pOjEtaSkpPj4+OCoocj9pOjEtaSl9ZnVuY3Rpb24gSHQoZSx0LG4scil7dDwwJiYodD00Mjk0OTY3Mjk1K3QrMSk7Zm9yKHZhciBpPTAsbz1NYXRoLm1pbihlLmxlbmd0aC1uLDQpO2k8bzsrK2kpZVtuK2ldPXQ+Pj44KihyP2k6My1pKSYyNTV9ZnVuY3Rpb24gTXQoZSx0LG4scixpLG8pe2lmKG4rcj5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYobjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBOdChlLHQsbixyLGkpe3JldHVybiBpfHxNdChlLDAsbiw0KSx0dChlLHQsbixyLDIzLDQpLG4rNH1mdW5jdGlvbiBqdChlLHQsbixyLGkpe3JldHVybiBpfHxNdChlLDAsbiw4KSx0dChlLHQsbixyLDUyLDgpLG4rOH1hdC5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPXRoaXMubGVuZ3RoO2lmKChlPX5+ZSk8MD8oZSs9cik8MCYmKGU9MCk6ZT5yJiYoZT1yKSwodD12b2lkIDA9PT10P3I6fn50KTwwPyh0Kz1yKTwwJiYodD0wKTp0PnImJih0PXIpLHQ8ZSYmKHQ9ZSksYXQuVFlQRURfQVJSQVlfU1VQUE9SVCkobj10aGlzLnN1YmFycmF5KGUsdCkpLl9fcHJvdG9fXz1hdC5wcm90b3R5cGU7ZWxzZXt2YXIgaT10LWU7bj1uZXcgYXQoaSx2b2lkIDApO2Zvcih2YXIgbz0wO288aTsrK28pbltvXT10aGlzW28rZV19cmV0dXJuIG59LGF0LnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKGUsdCxuKXtlfD0wLHR8PTAsbnx8SXQoZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIHI9dGhpc1tlXSxpPTEsbz0wOysrbzx0JiYoaSo9MjU2KTspcis9dGhpc1tlK29dKmk7cmV0dXJuIHJ9LGF0LnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKGUsdCxuKXtlfD0wLHR8PTAsbnx8SXQoZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIHI9dGhpc1tlKy0tdF0saT0xO3Q+MCYmKGkqPTI1Nik7KXIrPXRoaXNbZSstLXRdKmk7cmV0dXJuIHJ9LGF0LnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8SXQoZSwxLHRoaXMubGVuZ3RoKSx0aGlzW2VdfSxhdC5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEl0KGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXXx0aGlzW2UrMV08PDh9LGF0LnByb3RvdHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8SXQoZSwyLHRoaXMubGVuZ3RoKSx0aGlzW2VdPDw4fHRoaXNbZSsxXX0sYXQucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxJdChlLDQsdGhpcy5sZW5ndGgpLCh0aGlzW2VdfHRoaXNbZSsxXTw8OHx0aGlzW2UrMl08PDE2KSsxNjc3NzIxNip0aGlzW2UrM119LGF0LnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8SXQoZSw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW2VdKyh0aGlzW2UrMV08PDE2fHRoaXNbZSsyXTw8OHx0aGlzW2UrM10pfSxhdC5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKGUsdCxuKXtlfD0wLHR8PTAsbnx8SXQoZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIHI9dGhpc1tlXSxpPTEsbz0wOysrbzx0JiYoaSo9MjU2KTspcis9dGhpc1tlK29dKmk7cmV0dXJuIHI+PShpKj0xMjgpJiYoci09TWF0aC5wb3coMiw4KnQpKSxyfSxhdC5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKGUsdCxuKXtlfD0wLHR8PTAsbnx8SXQoZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIHI9dCxpPTEsbz10aGlzW2UrLS1yXTtyPjAmJihpKj0yNTYpOylvKz10aGlzW2UrLS1yXSppO3JldHVybiBvPj0oaSo9MTI4KSYmKG8tPU1hdGgucG93KDIsOCp0KSksb30sYXQucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEl0KGUsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbZV0/LTEqKDI1NS10aGlzW2VdKzEpOnRoaXNbZV19LGF0LnByb3RvdHlwZS5yZWFkSW50MTZMRT1mdW5jdGlvbihlLHQpe3R8fEl0KGUsMix0aGlzLmxlbmd0aCk7dmFyIG49dGhpc1tlXXx0aGlzW2UrMV08PDg7cmV0dXJuIDMyNzY4Jm4/NDI5NDkwMTc2MHxuOm59LGF0LnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbihlLHQpe3R8fEl0KGUsMix0aGlzLmxlbmd0aCk7dmFyIG49dGhpc1tlKzFdfHRoaXNbZV08PDg7cmV0dXJuIDMyNzY4Jm4/NDI5NDkwMTc2MHxuOm59LGF0LnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxJdChlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTZ8dGhpc1tlKzNdPDwyNH0sYXQucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEl0KGUsNCx0aGlzLmxlbmd0aCksdGhpc1tlXTw8MjR8dGhpc1tlKzFdPDwxNnx0aGlzW2UrMl08PDh8dGhpc1tlKzNdfSxhdC5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8SXQoZSw0LHRoaXMubGVuZ3RoKSxldCh0aGlzLGUsITAsMjMsNCl9LGF0LnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxJdChlLDQsdGhpcy5sZW5ndGgpLGV0KHRoaXMsZSwhMSwyMyw0KX0sYXQucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxJdChlLDgsdGhpcy5sZW5ndGgpLGV0KHRoaXMsZSwhMCw1Miw4KX0sYXQucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxJdChlLDgsdGhpcy5sZW5ndGgpLGV0KHRoaXMsZSwhMSw1Miw4KX0sYXQucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKGUsdCxuLHIpeyhlPStlLHR8PTAsbnw9MCxyKXx8VXQodGhpcyxlLHQsbixNYXRoLnBvdygyLDgqbiktMSwwKTt2YXIgaT0xLG89MDtmb3IodGhpc1t0XT0yNTUmZTsrK288biYmKGkqPTI1Nik7KXRoaXNbdCtvXT1lL2kmMjU1O3JldHVybiB0K259LGF0LnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbihlLHQsbixyKXsoZT0rZSx0fD0wLG58PTAscil8fFV0KHRoaXMsZSx0LG4sTWF0aC5wb3coMiw4Km4pLTEsMCk7dmFyIGk9bi0xLG89MTtmb3IodGhpc1t0K2ldPTI1NSZlOy0taT49MCYmKG8qPTI1Nik7KXRoaXNbdCtpXT1lL28mMjU1O3JldHVybiB0K259LGF0LnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fFV0KHRoaXMsZSx0LDEsMjU1LDApLGF0LlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLHRoaXNbdF09MjU1JmUsdCsxfSxhdC5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxVdCh0aGlzLGUsdCwyLDY1NTM1LDApLGF0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTpMdCh0aGlzLGUsdCwhMCksdCsyfSxhdC5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxVdCh0aGlzLGUsdCwyLDY1NTM1LDApLGF0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTpMdCh0aGlzLGUsdCwhMSksdCsyfSxhdC5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxVdCh0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksYXQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0KzNdPWU+Pj4yNCx0aGlzW3QrMl09ZT4+PjE2LHRoaXNbdCsxXT1lPj4+OCx0aGlzW3RdPTI1NSZlKTpIdCh0aGlzLGUsdCwhMCksdCs0fSxhdC5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxVdCh0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksYXQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpIdCh0aGlzLGUsdCwhMSksdCs0fSxhdC5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbihlLHQsbixyKXtpZihlPStlLHR8PTAsIXIpe3ZhciBpPU1hdGgucG93KDIsOCpuLTEpO1V0KHRoaXMsZSx0LG4saS0xLC1pKX12YXIgbz0wLHM9MSxhPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytvPG4mJihzKj0yNTYpOyllPDAmJjA9PT1hJiYwIT09dGhpc1t0K28tMV0mJihhPTEpLHRoaXNbdCtvXT0oZS9zPj4wKS1hJjI1NTtyZXR1cm4gdCtufSxhdC5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbihlLHQsbixyKXtpZihlPStlLHR8PTAsIXIpe3ZhciBpPU1hdGgucG93KDIsOCpuLTEpO1V0KHRoaXMsZSx0LG4saS0xLC1pKX12YXIgbz1uLTEscz0xLGE9MDtmb3IodGhpc1t0K29dPTI1NSZlOy0tbz49MCYmKHMqPTI1Nik7KWU8MCYmMD09PWEmJjAhPT10aGlzW3QrbysxXSYmKGE9MSksdGhpc1t0K29dPShlL3M+PjApLWEmMjU1O3JldHVybiB0K259LGF0LnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8VXQodGhpcyxlLHQsMSwxMjcsLTEyOCksYXQuVFlQRURfQVJSQVlfU1VQUE9SVHx8KGU9TWF0aC5mbG9vcihlKSksZTwwJiYoZT0yNTUrZSsxKSx0aGlzW3RdPTI1NSZlLHQrMX0sYXQucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxVdCh0aGlzLGUsdCwyLDMyNzY3LC0zMjc2OCksYXQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgpOkx0KHRoaXMsZSx0LCEwKSx0KzJ9LGF0LnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8VXQodGhpcyxlLHQsMiwzMjc2NywtMzI3NjgpLGF0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTpMdCh0aGlzLGUsdCwhMSksdCsyfSxhdC5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fFV0KHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksYXQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrM109ZT4+PjI0KTpIdCh0aGlzLGUsdCwhMCksdCs0fSxhdC5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fFV0KHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksZTwwJiYoZT00Mjk0OTY3Mjk1K2UrMSksYXQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpIdCh0aGlzLGUsdCwhMSksdCs0fSxhdC5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gTnQodGhpcyxlLHQsITAsbil9LGF0LnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBOdCh0aGlzLGUsdCwhMSxuKX0sYXQucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBqdCh0aGlzLGUsdCwhMCxuKX0sYXQucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBqdCh0aGlzLGUsdCwhMSxuKX0sYXQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZSx0LG4scil7aWYobnx8KG49MCkscnx8MD09PXJ8fChyPXRoaXMubGVuZ3RoKSx0Pj1lLmxlbmd0aCYmKHQ9ZS5sZW5ndGgpLHR8fCh0PTApLHI+MCYmcjxuJiYocj1uKSxyPT09bilyZXR1cm4gMDtpZigwPT09ZS5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZih0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInRhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMiKTtpZihuPDB8fG4+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzIik7aWYocjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO3I+dGhpcy5sZW5ndGgmJihyPXRoaXMubGVuZ3RoKSxlLmxlbmd0aC10PHItbiYmKHI9ZS5sZW5ndGgtdCtuKTt2YXIgaSxvPXItbjtpZih0aGlzPT09ZSYmbjx0JiZ0PHIpZm9yKGk9by0xO2k+PTA7LS1pKWVbaSt0XT10aGlzW2krbl07ZWxzZSBpZihvPDFlM3x8IWF0LlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKGk9MDtpPG87KytpKWVbaSt0XT10aGlzW2krbl07ZWxzZSBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChlLHRoaXMuc3ViYXJyYXkobixuK28pLHQpO3JldHVybiBvfSxhdC5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbihlLHQsbixyKXtpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdD8ocj10LHQ9MCxuPXRoaXMubGVuZ3RoKToic3RyaW5nIj09dHlwZW9mIG4mJihyPW4sbj10aGlzLmxlbmd0aCksMT09PWUubGVuZ3RoKXt2YXIgaT1lLmNoYXJDb2RlQXQoMCk7aTwyNTYmJihlPWkpfWlmKHZvaWQgMCE9PXImJiJzdHJpbmciIT10eXBlb2Ygcil0aHJvdyBuZXcgVHlwZUVycm9yKCJlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nIik7aWYoInN0cmluZyI9PXR5cGVvZiByJiYhYXQuaXNFbmNvZGluZyhyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3IpfWVsc2UibnVtYmVyIj09dHlwZW9mIGUmJihlJj0yNTUpO2lmKHQ8MHx8dGhpcy5sZW5ndGg8dHx8dGhpcy5sZW5ndGg8bil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7aWYobjw9dClyZXR1cm4gdGhpczt2YXIgbztpZih0Pj4+PTAsbj12b2lkIDA9PT1uP3RoaXMubGVuZ3RoOm4+Pj4wLGV8fChlPTApLCJudW1iZXIiPT10eXBlb2YgZSlmb3Iobz10O288bjsrK28pdGhpc1tvXT1lO2Vsc2V7dmFyIHM9ZnQoZSk/ZTpCdChuZXcgYXQoZSxyKS50b1N0cmluZygpKSxhPXMubGVuZ3RoO2ZvcihvPTA7bzxuLXQ7KytvKXRoaXNbbyt0XT1zW28lYV19cmV0dXJuIHRoaXN9O3ZhciB4dD0vW14rXC8wLTlBLVphLXotX10vZztmdW5jdGlvbiBxdChlKXtyZXR1cm4gZTwxNj8iMCIrZS50b1N0cmluZygxNik6ZS50b1N0cmluZygxNil9ZnVuY3Rpb24gQnQoZSx0KXt2YXIgbjt0PXR8fDEvMDtmb3IodmFyIHI9ZS5sZW5ndGgsaT1udWxsLG89W10scz0wO3M8cjsrK3Mpe2lmKChuPWUuY2hhckNvZGVBdChzKSk+NTUyOTUmJm48NTczNDQpe2lmKCFpKXtpZihuPjU2MzE5KXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYocysxPT09cil7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWk9bjtjb250aW51ZX1pZihuPDU2MzIwKXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSksaT1uO2NvbnRpbnVlfW49NjU1MzYrKGktNTUyOTY8PDEwfG4tNTYzMjApfWVsc2UgaSYmKHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2lmKGk9bnVsbCxuPDEyOCl7aWYoKHQtPTEpPDApYnJlYWs7by5wdXNoKG4pfWVsc2UgaWYobjwyMDQ4KXtpZigodC09Mik8MClicmVhaztvLnB1c2gobj4+NnwxOTIsNjMmbnwxMjgpfWVsc2UgaWYobjw2NTUzNil7aWYoKHQtPTMpPDApYnJlYWs7by5wdXNoKG4+PjEyfDIyNCxuPj42JjYzfDEyOCw2MyZufDEyOCl9ZWxzZXtpZighKG48MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigodC09NCk8MClicmVhaztvLnB1c2gobj4+MTh8MjQwLG4+PjEyJjYzfDEyOCxuPj42JjYzfDEyOCw2MyZufDEyOCl9fXJldHVybiBvfWZ1bmN0aW9uIEZ0KGUpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLHM7WGV8fCRlKCk7dmFyIGE9ZS5sZW5ndGg7aWYoYSU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7bz0iPSI9PT1lW2EtMl0/MjoiPSI9PT1lW2EtMV0/MTowLHM9bmV3IEdlKDMqYS80LW8pLHI9bz4wP2EtNDphO3ZhciBjPTA7Zm9yKHQ9MCxuPTA7dDxyO3QrPTQsbis9MylpPVllW2UuY2hhckNvZGVBdCh0KV08PDE4fFllW2UuY2hhckNvZGVBdCh0KzEpXTw8MTJ8WWVbZS5jaGFyQ29kZUF0KHQrMildPDw2fFllW2UuY2hhckNvZGVBdCh0KzMpXSxzW2MrK109aT4+MTYmMjU1LHNbYysrXT1pPj44JjI1NSxzW2MrK109MjU1Jmk7cmV0dXJuIDI9PT1vPyhpPVllW2UuY2hhckNvZGVBdCh0KV08PDJ8WWVbZS5jaGFyQ29kZUF0KHQrMSldPj40LHNbYysrXT0yNTUmaSk6MT09PW8mJihpPVllW2UuY2hhckNvZGVBdCh0KV08PDEwfFllW2UuY2hhckNvZGVBdCh0KzEpXTw8NHxZZVtlLmNoYXJDb2RlQXQodCsyKV0+PjIsc1tjKytdPWk+PjgmMjU1LHNbYysrXT0yNTUmaSksc30oZnVuY3Rpb24oZSl7aWYoKGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbT9lLnRyaW0oKTplLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0oZSkucmVwbGFjZSh4dCwiIikpLmxlbmd0aDwyKXJldHVybiIiO2Zvcig7ZS5sZW5ndGglNCE9MDspZSs9Ij0iO3JldHVybiBlfShlKSl9ZnVuY3Rpb24gS3QoZSx0LG4scil7Zm9yKHZhciBpPTA7aTxyJiYhKGkrbj49dC5sZW5ndGh8fGk+PWUubGVuZ3RoKTsrK2kpdFtpK25dPWVbaV07cmV0dXJuIGl9ZnVuY3Rpb24gSnQoZSl7cmV0dXJuIG51bGwhPWUmJighIWUuX2lzQnVmZmVyfHxXdChlKXx8ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGUucmVhZEZsb2F0TEUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLnNsaWNlJiZXdChlLnNsaWNlKDAsMCkpfShlKSl9ZnVuY3Rpb24gV3QoZSl7cmV0dXJuISFlLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihlKX12YXIgenQ9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQnVmZmVyOmF0LElOU1BFQ1RfTUFYX0JZVEVTOjUwLFNsb3dCdWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuK2UhPWUmJihlPTApLGF0LmFsbG9jKCtlKX0saXNCdWZmZXI6SnQsa01heExlbmd0aDppdH0pO2NsYXNzIFZ0IGV4dGVuZHMgRXJyb3J7c3RhdGljIGZyb20oZSx0LG4scixpLG8pe2NvbnN0IHM9bmV3IFZ0KGUubWVzc2FnZSx0fHxlLmNvZGUsbixyLGkpO3JldHVybiBzLmNhdXNlPWUscy5uYW1lPWUubmFtZSxudWxsIT1lLnN0YXR1cyYmbnVsbD09cy5zdGF0dXMmJihzLnN0YXR1cz1lLnN0YXR1cyksbyYmT2JqZWN0LmFzc2lnbihzLG8pLHN9Y29uc3RydWN0b3IoZSx0LG4scixpKXtzdXBlcihlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibWVzc2FnZSIse3ZhbHVlOmUsZW51bWVyYWJsZTohMCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0aGlzLm5hbWU9IkF4aW9zRXJyb3IiLHRoaXMuaXNBeGlvc0Vycm9yPSEwLHQmJih0aGlzLmNvZGU9dCksbiYmKHRoaXMuY29uZmlnPW4pLHImJih0aGlzLnJlcXVlc3Q9ciksaSYmKHRoaXMucmVzcG9uc2U9aSx0aGlzLnN0YXR1cz1pLnN0YXR1cyl9dG9KU09OKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOnplLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMuc3RhdHVzfX19VnQuRVJSX0JBRF9PUFRJT05fVkFMVUU9IkVSUl9CQURfT1BUSU9OX1ZBTFVFIixWdC5FUlJfQkFEX09QVElPTj0iRVJSX0JBRF9PUFRJT04iLFZ0LkVDT05OQUJPUlRFRD0iRUNPTk5BQk9SVEVEIixWdC5FVElNRURPVVQ9IkVUSU1FRE9VVCIsVnQuRVJSX05FVFdPUks9IkVSUl9ORVRXT1JLIixWdC5FUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTPSJFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTIixWdC5FUlJfREVQUkVDQVRFRD0iRVJSX0RFUFJFQ0FURUQiLFZ0LkVSUl9CQURfUkVTUE9OU0U9IkVSUl9CQURfUkVTUE9OU0UiLFZ0LkVSUl9CQURfUkVRVUVTVD0iRVJSX0JBRF9SRVFVRVNUIixWdC5FUlJfQ0FOQ0VMRUQ9IkVSUl9DQU5DRUxFRCIsVnQuRVJSX05PVF9TVVBQT1JUPSJFUlJfTk9UX1NVUFBPUlQiLFZ0LkVSUl9JTlZBTElEX1VSTD0iRVJSX0lOVkFMSURfVVJMIjt2YXIgWXQ9VnQ7ZnVuY3Rpb24gR3QoZSl7cmV0dXJuIHplLmlzUGxhaW5PYmplY3QoZSl8fHplLmlzQXJyYXkoZSl9ZnVuY3Rpb24gWHQoZSl7cmV0dXJuIHplLmVuZHNXaXRoKGUsIltdIik/ZS5zbGljZSgwLC0yKTplfWZ1bmN0aW9uICR0KGUsdCxuKXtyZXR1cm4gZT9lLmNvbmNhdCh0KS5tYXAoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9WHQoZSksIW4mJnQ/IlsiK2UrIl0iOmV9KSkuam9pbihuPyIuIjoiIik6dH1jb25zdCBadD16ZS50b0ZsYXRPYmplY3QoemUse30sbnVsbCwoZnVuY3Rpb24oZSl7cmV0dXJuL15pc1tBLVpdLy50ZXN0KGUpfSkpO2Z1bmN0aW9uIFF0KGUsdCxuKXtpZighemUuaXNPYmplY3QoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigidGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Iik7dD10fHxuZXcgRm9ybURhdGE7Y29uc3Qgcj0obj16ZS50b0ZsYXRPYmplY3Qobix7bWV0YVRva2VuczohMCxkb3RzOiExLGluZGV4ZXM6ITF9LCExLChmdW5jdGlvbihlLHQpe3JldHVybiF6ZS5pc1VuZGVmaW5lZCh0W2VdKX0pKSkubWV0YVRva2VucyxpPW4udmlzaXRvcnx8dSxvPW4uZG90cyxzPW4uaW5kZXhlcyxhPShuLkJsb2J8fCJ1bmRlZmluZWQiIT10eXBlb2YgQmxvYiYmQmxvYikmJnplLmlzU3BlY0NvbXBsaWFudEZvcm0odCk7aWYoIXplLmlzRnVuY3Rpb24oaSkpdGhyb3cgbmV3IFR5cGVFcnJvcigidmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24iKTtmdW5jdGlvbiBjKGUpe2lmKG51bGw9PT1lKXJldHVybiIiO2lmKHplLmlzRGF0ZShlKSlyZXR1cm4gZS50b0lTT1N0cmluZygpO2lmKHplLmlzQm9vbGVhbihlKSlyZXR1cm4gZS50b1N0cmluZygpO2lmKCFhJiZ6ZS5pc0Jsb2IoZSkpdGhyb3cgbmV3IFl0KCJCbG9iIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhIEJ1ZmZlciBpbnN0ZWFkLiIpO3JldHVybiB6ZS5pc0FycmF5QnVmZmVyKGUpfHx6ZS5pc1R5cGVkQXJyYXkoZSk/YSYmImZ1bmN0aW9uIj09dHlwZW9mIEJsb2I/bmV3IEJsb2IoW2VdKTphdC5mcm9tKGUpOmV9ZnVuY3Rpb24gdShlLG4saSl7bGV0IGE9ZTtpZih6ZS5pc1JlYWN0TmF0aXZlKHQpJiZ6ZS5pc1JlYWN0TmF0aXZlQmxvYihlKSlyZXR1cm4gdC5hcHBlbmQoJHQoaSxuLG8pLGMoZSkpLCExO2lmKGUmJiFpJiYib2JqZWN0Ij09dHlwZW9mIGUpaWYoemUuZW5kc1dpdGgobiwie30iKSluPXI/bjpuLnNsaWNlKDAsLTIpLGU9SlNPTi5zdHJpbmdpZnkoZSk7ZWxzZSBpZih6ZS5pc0FycmF5KGUpJiZmdW5jdGlvbihlKXtyZXR1cm4gemUuaXNBcnJheShlKSYmIWUuc29tZShHdCl9KGUpfHwoemUuaXNGaWxlTGlzdChlKXx8emUuZW5kc1dpdGgobiwiW10iKSkmJihhPXplLnRvQXJyYXkoZSkpKXJldHVybiBuPVh0KG4pLGEuZm9yRWFjaCgoZnVuY3Rpb24oZSxyKXshemUuaXNVbmRlZmluZWQoZSkmJm51bGwhPT1lJiZ0LmFwcGVuZCghMD09PXM/JHQoW25dLHIsbyk6bnVsbD09PXM/bjpuKyJbXSIsYyhlKSl9KSksITE7cmV0dXJuISFHdChlKXx8KHQuYXBwZW5kKCR0KGksbixvKSxjKGUpKSwhMSl9Y29uc3QgbD1bXSxkPU9iamVjdC5hc3NpZ24oWnQse2RlZmF1bHRWaXNpdG9yOnUsY29udmVydFZhbHVlOmMsaXNWaXNpdGFibGU6R3R9KTtpZighemUuaXNPYmplY3QoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiZGF0YSBtdXN0IGJlIGFuIG9iamVjdCIpO3JldHVybiBmdW5jdGlvbiBlKG4scil7aWYoIXplLmlzVW5kZWZpbmVkKG4pKXtpZigtMSE9PWwuaW5kZXhPZihuKSl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICIrci5qb2luKCIuIikpO2wucHVzaChuKSx6ZS5mb3JFYWNoKG4sKGZ1bmN0aW9uKG4sbyl7ITA9PT0oISh6ZS5pc1VuZGVmaW5lZChuKXx8bnVsbD09PW4pJiZpLmNhbGwodCxuLHplLmlzU3RyaW5nKG8pP28udHJpbSgpOm8scixkKSkmJmUobixyP3IuY29uY2F0KG8pOltvXSl9KSksbC5wb3AoKX19KGUpLHR9ZnVuY3Rpb24gZW4oZSl7Y29uc3QgdD17IiEiOiIlMjEiLCInIjoiJTI3IiwiKCI6IiUyOCIsIikiOiIlMjkiLCJ+IjoiJTdFIiwiJTIwIjoiKyIsIiUwMCI6IlwwIn07cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKC9bIScoKX5dfCUyMHwlMDAvZywoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KSl9ZnVuY3Rpb24gdG4oZSx0KXt0aGlzLl9wYWlycz1bXSxlJiZRdChlLHRoaXMsdCl9Y29uc3Qgbm49dG4ucHJvdG90eXBlO2Z1bmN0aW9uIHJuKGUpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoZSkucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjAvZywiKyIpfWZ1bmN0aW9uIG9uKGUsdCxuKXtpZighdClyZXR1cm4gZTtjb25zdCByPW4mJm4uZW5jb2RlfHxybixpPXplLmlzRnVuY3Rpb24obik/e3NlcmlhbGl6ZTpufTpuLG89aSYmaS5zZXJpYWxpemU7bGV0IHM7aWYocz1vP28odCxpKTp6ZS5pc1VSTFNlYXJjaFBhcmFtcyh0KT90LnRvU3RyaW5nKCk6bmV3IHRuKHQsaSkudG9TdHJpbmcocikscyl7Y29uc3QgdD1lLmluZGV4T2YoIiMiKTstMSE9PXQmJihlPWUuc2xpY2UoMCx0KSksZSs9KC0xPT09ZS5pbmRleE9mKCI/Iik/Ij8iOiImIikrc31yZXR1cm4gZX1ubi5hcHBlbmQ9ZnVuY3Rpb24oZSx0KXt0aGlzLl9wYWlycy5wdXNoKFtlLHRdKX0sbm4udG9TdHJpbmc9ZnVuY3Rpb24oZSl7Y29uc3QgdD1lP2Z1bmN0aW9uKHQpe3JldHVybiBlLmNhbGwodGhpcyx0LGVuKX06ZW47cmV0dXJuIHRoaXMuX3BhaXJzLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQoZVswXSkrIj0iK3QoZVsxXSl9KSwiIikuam9pbigiJiIpfTt2YXIgc249Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmhhbmRsZXJzPVtdfXVzZShlLHQsbil7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOmUscmVqZWN0ZWQ6dCxzeW5jaHJvbm91czohIW4mJm4uc3luY2hyb25vdXMscnVuV2hlbjpuP24ucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX1lamVjdChlKXt0aGlzLmhhbmRsZXJzW2VdJiYodGhpcy5oYW5kbGVyc1tlXT1udWxsKX1jbGVhcigpe3RoaXMuaGFuZGxlcnMmJih0aGlzLmhhbmRsZXJzPVtdKX1mb3JFYWNoKGUpe3plLmZvckVhY2godGhpcy5oYW5kbGVycywoZnVuY3Rpb24odCl7bnVsbCE9PXQmJmUodCl9KSl9fSxhbj17c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMSxsZWdhY3lJbnRlcmNlcHRvclJlcVJlc09yZGVyaW5nOiEwfSxjbj17aXNCcm93c2VyOiEwLGNsYXNzZXM6e1VSTFNlYXJjaFBhcmFtczoidW5kZWZpbmVkIiE9dHlwZW9mIFVSTFNlYXJjaFBhcmFtcz9VUkxTZWFyY2hQYXJhbXM6dG4sRm9ybURhdGE6InVuZGVmaW5lZCIhPXR5cGVvZiBGb3JtRGF0YT9Gb3JtRGF0YTpudWxsLEJsb2I6InVuZGVmaW5lZCIhPXR5cGVvZiBCbG9iP0Jsb2I6bnVsbH0scHJvdG9jb2xzOlsiaHR0cCIsImh0dHBzIiwiZmlsZSIsImJsb2IiLCJ1cmwiLCJkYXRhIl19O2NvbnN0IHVuPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiYidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50LGxuPSJvYmplY3QiPT10eXBlb2YgbmF2aWdhdG9yJiZuYXZpZ2F0b3J8fHZvaWQgMCxkbj11biYmKCFsbnx8WyJSZWFjdE5hdGl2ZSIsIk5hdGl2ZVNjcmlwdCIsIk5TIl0uaW5kZXhPZihsbi5wcm9kdWN0KTwwKSxobj0idW5kZWZpbmVkIiE9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHMsZm49dW4mJndpbmRvdy5sb2NhdGlvbi5ocmVmfHwiaHR0cDovL2xvY2FsaG9zdCI7dmFyIHBuPXsuLi5PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxoYXNCcm93c2VyRW52OnVuLGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudjpobixoYXNTdGFuZGFyZEJyb3dzZXJFbnY6ZG4sbmF2aWdhdG9yOmxuLG9yaWdpbjpmbn0pLC4uLmNufTtmdW5jdGlvbiBnbihlKXtmdW5jdGlvbiB0KGUsbixyLGkpe2xldCBvPWVbaSsrXTtpZigiX19wcm90b19fIj09PW8pcmV0dXJuITA7Y29uc3Qgcz1OdW1iZXIuaXNGaW5pdGUoK28pLGE9aT49ZS5sZW5ndGg7aWYobz0hbyYmemUuaXNBcnJheShyKT9yLmxlbmd0aDpvLGEpcmV0dXJuIHplLmhhc093blByb3AocixvKT9yW29dPVtyW29dLG5dOnJbb109biwhcztyW29dJiZ6ZS5pc09iamVjdChyW29dKXx8KHJbb109W10pO3JldHVybiB0KGUsbixyW29dLGkpJiZ6ZS5pc0FycmF5KHJbb10pJiYocltvXT1mdW5jdGlvbihlKXtjb25zdCB0PXt9LG49T2JqZWN0LmtleXMoZSk7bGV0IHI7Y29uc3QgaT1uLmxlbmd0aDtsZXQgbztmb3Iocj0wO3I8aTtyKyspbz1uW3JdLHRbb109ZVtvXTtyZXR1cm4gdH0ocltvXSkpLCFzfWlmKHplLmlzRm9ybURhdGEoZSkmJnplLmlzRnVuY3Rpb24oZS5lbnRyaWVzKSl7Y29uc3Qgbj17fTtyZXR1cm4gemUuZm9yRWFjaEVudHJ5KGUsKChlLHIpPT57dChmdW5jdGlvbihlKXtyZXR1cm4gemUubWF0Y2hBbGwoL1x3K3xcWyhcdyopXS9nLGUpLm1hcCgoZT0+IltdIj09PWVbMF0/IiI6ZVsxXXx8ZVswXSkpfShlKSxyLG4sMCl9KSksbn1yZXR1cm4gbnVsbH1jb25zdCB5bj17dHJhbnNpdGlvbmFsOmFuLGFkYXB0ZXI6WyJ4aHIiLCJodHRwIiwiZmV0Y2giXSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihlLHQpe2NvbnN0IG49dC5nZXRDb250ZW50VHlwZSgpfHwiIixyPW4uaW5kZXhPZigiYXBwbGljYXRpb24vanNvbiIpPi0xLGk9emUuaXNPYmplY3QoZSk7aSYmemUuaXNIVE1MRm9ybShlKSYmKGU9bmV3IEZvcm1EYXRhKGUpKTtpZih6ZS5pc0Zvcm1EYXRhKGUpKXJldHVybiByP0pTT04uc3RyaW5naWZ5KGduKGUpKTplO2lmKHplLmlzQXJyYXlCdWZmZXIoZSl8fHplLmlzQnVmZmVyKGUpfHx6ZS5pc1N0cmVhbShlKXx8emUuaXNGaWxlKGUpfHx6ZS5pc0Jsb2IoZSl8fHplLmlzUmVhZGFibGVTdHJlYW0oZSkpcmV0dXJuIGU7aWYoemUuaXNBcnJheUJ1ZmZlclZpZXcoZSkpcmV0dXJuIGUuYnVmZmVyO2lmKHplLmlzVVJMU2VhcmNoUGFyYW1zKGUpKXJldHVybiB0LnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIsITEpLGUudG9TdHJpbmcoKTtsZXQgbztpZihpKXtpZihuLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpPi0xKXJldHVybiBmdW5jdGlvbihlLHQpe3JldHVybiBRdChlLG5ldyBwbi5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcyx7dmlzaXRvcjpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gcG4uaXNOb2RlJiZ6ZS5pc0J1ZmZlcihlKT8odGhpcy5hcHBlbmQodCxlLnRvU3RyaW5nKCJiYXNlNjQiKSksITEpOnIuZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfSwuLi50fSl9KGUsdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtpZigobz16ZS5pc0ZpbGVMaXN0KGUpKXx8bi5pbmRleE9mKCJtdWx0aXBhcnQvZm9ybS1kYXRhIik+LTEpe2NvbnN0IHQ9dGhpcy5lbnYmJnRoaXMuZW52LkZvcm1EYXRhO3JldHVybiBRdChvP3siZmlsZXNbXSI6ZX06ZSx0JiZuZXcgdCx0aGlzLmZvcm1TZXJpYWxpemVyKX19cmV0dXJuIGl8fHI/KHQuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL2pzb24iLCExKSxmdW5jdGlvbihlLHQsbil7aWYoemUuaXNTdHJpbmcoZSkpdHJ5e3JldHVybih0fHxKU09OLnBhcnNlKShlKSx6ZS50cmltKGUpfWNhdGNoKGUpe2lmKCJTeW50YXhFcnJvciIhPT1lLm5hbWUpdGhyb3cgZX1yZXR1cm4obnx8SlNPTi5zdHJpbmdpZnkpKGUpfShlKSk6ZX1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbihlKXtjb25zdCB0PXRoaXMudHJhbnNpdGlvbmFsfHx5bi50cmFuc2l0aW9uYWwsbj10JiZ0LmZvcmNlZEpTT05QYXJzaW5nLHI9Impzb24iPT09dGhpcy5yZXNwb25zZVR5cGU7aWYoemUuaXNSZXNwb25zZShlKXx8emUuaXNSZWFkYWJsZVN0cmVhbShlKSlyZXR1cm4gZTtpZihlJiZ6ZS5pc1N0cmluZyhlKSYmKG4mJiF0aGlzLnJlc3BvbnNlVHlwZXx8cikpe2NvbnN0IG49ISh0JiZ0LnNpbGVudEpTT05QYXJzaW5nKSYmcjt0cnl7cmV0dXJuIEpTT04ucGFyc2UoZSx0aGlzLnBhcnNlUmV2aXZlcil9Y2F0Y2goZSl7aWYobil7aWYoIlN5bnRheEVycm9yIj09PWUubmFtZSl0aHJvdyBZdC5mcm9tKGUsWXQuRVJSX0JBRF9SRVNQT05TRSx0aGlzLG51bGwsdGhpcy5yZXNwb25zZSk7dGhyb3cgZX19fXJldHVybiBlfV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsZW52OntGb3JtRGF0YTpwbi5jbGFzc2VzLkZvcm1EYXRhLEJsb2I6cG4uY2xhc3Nlcy5CbG9ifSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbihlKXtyZXR1cm4gZT49MjAwJiZlPDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIsIkNvbnRlbnQtVHlwZSI6dm9pZCAwfX19O3plLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIl0sKGU9Pnt5bi5oZWFkZXJzW2VdPXt9fSkpO3ZhciB2bj15bjtjb25zdCBtbj16ZS50b09iamVjdFNldChbImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdKTtjb25zdCB3bj1TeW1ib2woImludGVybmFscyIpO2Z1bmN0aW9uIGJuKGUpe3JldHVybiBlJiZTdHJpbmcoZSkudHJpbSgpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gX24oZSl7cmV0dXJuITE9PT1lfHxudWxsPT1lP2U6emUuaXNBcnJheShlKT9lLm1hcChfbik6U3RyaW5nKGUpfWZ1bmN0aW9uIFNuKGUsdCxuLHIsaSl7cmV0dXJuIHplLmlzRnVuY3Rpb24ocik/ci5jYWxsKHRoaXMsdCxuKTooaSYmKHQ9biksemUuaXNTdHJpbmcodCk/emUuaXNTdHJpbmcocik/LTEhPT10LmluZGV4T2Yocik6emUuaXNSZWdFeHAocik/ci50ZXN0KHQpOnZvaWQgMDp2b2lkIDApfWNsYXNzIEVue2NvbnN0cnVjdG9yKGUpe2UmJnRoaXMuc2V0KGUpfXNldChlLHQsbil7Y29uc3Qgcj10aGlzO2Z1bmN0aW9uIGkoZSx0LG4pe2NvbnN0IGk9Ym4odCk7aWYoIWkpdGhyb3cgbmV3IEVycm9yKCJoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyIpO2NvbnN0IG89emUuZmluZEtleShyLGkpOyghb3x8dm9pZCAwPT09cltvXXx8ITA9PT1ufHx2b2lkIDA9PT1uJiYhMSE9PXJbb10pJiYocltvfHx0XT1fbihlKSl9Y29uc3Qgbz0oZSx0KT0+emUuZm9yRWFjaChlLCgoZSxuKT0+aShlLG4sdCkpKTtpZih6ZS5pc1BsYWluT2JqZWN0KGUpfHxlIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3RvcilvKGUsdCk7ZWxzZSBpZih6ZS5pc1N0cmluZyhlKSYmKGU9ZS50cmltKCkpJiYhL15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChlLnRyaW0oKSkpbygoZT0+e2NvbnN0IHQ9e307bGV0IG4scixpO3JldHVybiBlJiZlLnNwbGl0KCJcbiIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2k9ZS5pbmRleE9mKCI6Iiksbj1lLnN1YnN0cmluZygwLGkpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLHI9ZS5zdWJzdHJpbmcoaSsxKS50cmltKCksIW58fHRbbl0mJm1uW25dfHwoInNldC1jb29raWUiPT09bj90W25dP3Rbbl0ucHVzaChyKTp0W25dPVtyXTp0W25dPXRbbl0/dFtuXSsiLCAiK3I6cil9KSksdH0pKGUpLHQpO2Vsc2UgaWYoemUuaXNPYmplY3QoZSkmJnplLmlzSXRlcmFibGUoZSkpe2xldCBuLHIsaT17fTtmb3IoY29uc3QgdCBvZiBlKXtpZighemUuaXNBcnJheSh0KSl0aHJvdyBUeXBlRXJyb3IoIk9iamVjdCBpdGVyYXRvciBtdXN0IHJldHVybiBhIGtleS12YWx1ZSBwYWlyIik7aVtyPXRbMF1dPShuPWlbcl0pP3plLmlzQXJyYXkobik/Wy4uLm4sdFsxXV06W24sdFsxXV06dFsxXX1vKGksdCl9ZWxzZSBudWxsIT1lJiZpKHQsZSxuKTtyZXR1cm4gdGhpc31nZXQoZSx0KXtpZihlPWJuKGUpKXtjb25zdCBuPXplLmZpbmRLZXkodGhpcyxlKTtpZihuKXtjb25zdCBlPXRoaXNbbl07aWYoIXQpcmV0dXJuIGU7aWYoITA9PT10KXJldHVybiBmdW5jdGlvbihlKXtjb25zdCB0PU9iamVjdC5jcmVhdGUobnVsbCksbj0vKFteXHMsOz1dKylccyooPzo9XHMqKFteLDtdKykpPy9nO2xldCByO2Zvcig7cj1uLmV4ZWMoZSk7KXRbclsxXV09clsyXTtyZXR1cm4gdH0oZSk7aWYoemUuaXNGdW5jdGlvbih0KSlyZXR1cm4gdC5jYWxsKHRoaXMsZSxuKTtpZih6ZS5pc1JlZ0V4cCh0KSlyZXR1cm4gdC5leGVjKGUpO3Rocm93IG5ldyBUeXBlRXJyb3IoInBhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uIil9fX1oYXMoZSx0KXtpZihlPWJuKGUpKXtjb25zdCBuPXplLmZpbmRLZXkodGhpcyxlKTtyZXR1cm4hKCFufHx2b2lkIDA9PT10aGlzW25dfHx0JiYhU24oMCx0aGlzW25dLG4sdCkpfXJldHVybiExfWRlbGV0ZShlLHQpe2NvbnN0IG49dGhpcztsZXQgcj0hMTtmdW5jdGlvbiBpKGUpe2lmKGU9Ym4oZSkpe2NvbnN0IGk9emUuZmluZEtleShuLGUpOyFpfHx0JiYhU24oMCxuW2ldLGksdCl8fChkZWxldGUgbltpXSxyPSEwKX19cmV0dXJuIHplLmlzQXJyYXkoZSk/ZS5mb3JFYWNoKGkpOmkoZSkscn1jbGVhcihlKXtjb25zdCB0PU9iamVjdC5rZXlzKHRoaXMpO2xldCBuPXQubGVuZ3RoLHI9ITE7Zm9yKDtuLS07KXtjb25zdCBpPXRbbl07ZSYmIVNuKDAsdGhpc1tpXSxpLGUsITApfHwoZGVsZXRlIHRoaXNbaV0scj0hMCl9cmV0dXJuIHJ9bm9ybWFsaXplKGUpe2NvbnN0IHQ9dGhpcyxuPXt9O3JldHVybiB6ZS5mb3JFYWNoKHRoaXMsKChyLGkpPT57Y29uc3Qgbz16ZS5maW5kS2V5KG4saSk7aWYobylyZXR1cm4gdFtvXT1fbihyKSx2b2lkIGRlbGV0ZSB0W2ldO2NvbnN0IHM9ZT9mdW5jdGlvbihlKXtyZXR1cm4gZS50cmltKCkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8oW2EtelxkXSkoXHcqKS9nLCgoZSx0LG4pPT50LnRvVXBwZXJDYXNlKCkrbikpfShpKTpTdHJpbmcoaSkudHJpbSgpO3MhPT1pJiZkZWxldGUgdFtpXSx0W3NdPV9uKHIpLG5bc109ITB9KSksdGhpc31jb25jYXQoKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXTtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywuLi50KX10b0pTT04oZSl7Y29uc3QgdD1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiB6ZS5mb3JFYWNoKHRoaXMsKChuLHIpPT57bnVsbCE9biYmITEhPT1uJiYodFtyXT1lJiZ6ZS5pc0FycmF5KG4pP24uam9pbigiLCAiKTpuKX0pKSx0fVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKX10b1N0cmluZygpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKGU9PntsZXRbdCxuXT1lO3JldHVybiB0KyI6ICIrbn0pKS5qb2luKCJcbiIpfWdldFNldENvb2tpZSgpe3JldHVybiB0aGlzLmdldCgic2V0LWNvb2tpZSIpfHxbXX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdGhpcz9lOm5ldyB0aGlzKGUpfXN0YXRpYyBjb25jYXQoZSl7Y29uc3QgdD1uZXcgdGhpcyhlKTtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShuPjE/bi0xOjApLGk9MTtpPG47aSsrKXJbaS0xXT1hcmd1bWVudHNbaV07cmV0dXJuIHIuZm9yRWFjaCgoZT0+dC5zZXQoZSkpKSx0fXN0YXRpYyBhY2Nlc3NvcihlKXtjb25zdCB0PSh0aGlzW3duXT10aGlzW3duXT17YWNjZXNzb3JzOnt9fSkuYWNjZXNzb3JzLG49dGhpcy5wcm90b3R5cGU7ZnVuY3Rpb24gcihlKXtjb25zdCByPWJuKGUpO3Rbcl18fCghZnVuY3Rpb24oZSx0KXtjb25zdCBuPXplLnRvQ2FtZWxDYXNlKCIgIit0KTtbImdldCIsInNldCIsImhhcyJdLmZvckVhY2goKHI9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyK24se3ZhbHVlOmZ1bmN0aW9uKGUsbixpKXtyZXR1cm4gdGhpc1tyXS5jYWxsKHRoaXMsdCxlLG4saSl9LGNvbmZpZ3VyYWJsZTohMH0pfSkpfShuLGUpLHRbcl09ITApfXJldHVybiB6ZS5pc0FycmF5KGUpP2UuZm9yRWFjaChyKTpyKGUpLHRoaXN9fUVuLmFjY2Vzc29yKFsiQ29udGVudC1UeXBlIiwiQ29udGVudC1MZW5ndGgiLCJBY2NlcHQiLCJBY2NlcHQtRW5jb2RpbmciLCJVc2VyLUFnZW50IiwiQXV0aG9yaXphdGlvbiJdKSx6ZS5yZWR1Y2VEZXNjcmlwdG9ycyhFbi5wcm90b3R5cGUsKChlLHQpPT57bGV0e3ZhbHVlOm59PWUscj10WzBdLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKTtyZXR1cm57Z2V0OigpPT5uLHNldChlKXt0aGlzW3JdPWV9fX0pKSx6ZS5mcmVlemVNZXRob2RzKEVuKTt2YXIgUm49RW47ZnVuY3Rpb24gVG4oZSx0KXtjb25zdCBuPXRoaXN8fHZuLHI9dHx8bixpPVJuLmZyb20oci5oZWFkZXJzKTtsZXQgbz1yLmRhdGE7cmV0dXJuIHplLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7bz1lLmNhbGwobixvLGkubm9ybWFsaXplKCksdD90LnN0YXR1czp2b2lkIDApfSkpLGkubm9ybWFsaXplKCksb31mdW5jdGlvbiBrbihlKXtyZXR1cm4hKCFlfHwhZS5fX0NBTkNFTF9fKX12YXIgQW49Y2xhc3MgZXh0ZW5kcyBZdHtjb25zdHJ1Y3RvcihlLHQsbil7c3VwZXIobnVsbD09ZT8iY2FuY2VsZWQiOmUsWXQuRVJSX0NBTkNFTEVELHQsbiksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIix0aGlzLl9fQ0FOQ0VMX189ITB9fTtmdW5jdGlvbiBDbihlLHQsbil7Y29uc3Qgcj1uLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztuLnN0YXR1cyYmciYmIXIobi5zdGF0dXMpP3QobmV3IFl0KCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrbi5zdGF0dXMsW1l0LkVSUl9CQURfUkVRVUVTVCxZdC5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKG4uc3RhdHVzLzEwMCktNF0sbi5jb25maWcsbi5yZXF1ZXN0LG4pKTplKG4pfWZ1bmN0aW9uIE9uKGUsdCl7ZT1lfHwxMDtjb25zdCBuPW5ldyBBcnJheShlKSxyPW5ldyBBcnJheShlKTtsZXQgaSxvPTAscz0wO3JldHVybiB0PXZvaWQgMCE9PXQ/dDoxZTMsZnVuY3Rpb24oYSl7Y29uc3QgYz1EYXRlLm5vdygpLHU9cltzXTtpfHwoaT1jKSxuW29dPWEscltvXT1jO2xldCBsPXMsZD0wO2Zvcig7bCE9PW87KWQrPW5bbCsrXSxsJT1lO2lmKG89KG8rMSklZSxvPT09cyYmKHM9KHMrMSklZSksYy1pPHQpcmV0dXJuO2NvbnN0IGg9dSYmYy11O3JldHVybiBoP01hdGgucm91bmQoMWUzKmQvaCk6dm9pZCAwfX1mdW5jdGlvbiBEbihlLHQpe2xldCBuLHIsaT0wLG89MWUzL3Q7Y29uc3Qgcz1mdW5jdGlvbih0KXtsZXQgbz1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06RGF0ZS5ub3coKTtpPW8sbj1udWxsLHImJihjbGVhclRpbWVvdXQocikscj1udWxsKSxlKC4uLnQpfTtyZXR1cm5bZnVuY3Rpb24oKXtjb25zdCBlPURhdGUubm93KCksdD1lLWk7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsYz1uZXcgQXJyYXkoYSksdT0wO3U8YTt1KyspY1t1XT1hcmd1bWVudHNbdV07dD49bz9zKGMsZSk6KG49YyxyfHwocj1zZXRUaW1lb3V0KCgoKT0+e3I9bnVsbCxzKG4pfSksby10KSkpfSwoKT0+biYmcyhuKV19Y29uc3QgUG49ZnVuY3Rpb24oZSx0KXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MyxyPTA7Y29uc3QgaT1Pbig1MCwyNTApO3JldHVybiBEbigobj0+e2NvbnN0IG89bi5sb2FkZWQscz1uLmxlbmd0aENvbXB1dGFibGU/bi50b3RhbDp2b2lkIDAsYT1vLXIsYz1pKGEpO3I9bztlKHtsb2FkZWQ6byx0b3RhbDpzLHByb2dyZXNzOnM/by9zOnZvaWQgMCxieXRlczphLHJhdGU6Y3x8dm9pZCAwLGVzdGltYXRlZDpjJiZzJiZvPD1zPyhzLW8pL2M6dm9pZCAwLGV2ZW50Om4sbGVuZ3RoQ29tcHV0YWJsZTpudWxsIT1zLFt0PyJkb3dubG9hZCI6InVwbG9hZCJdOiEwfSl9KSxuKX0sSW49KGUsdCk9Pntjb25zdCBuPW51bGwhPWU7cmV0dXJuW3I9PnRbMF0oe2xlbmd0aENvbXB1dGFibGU6bix0b3RhbDplLGxvYWRlZDpyfSksdFsxXV19LFVuPWU9PmZ1bmN0aW9uKCl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspbltyXT1hcmd1bWVudHNbcl07cmV0dXJuIHplLmFzYXAoKCgpPT5lKC4uLm4pKSl9O3ZhciBMbj1wbi5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/KChlLHQpPT5uPT4obj1uZXcgVVJMKG4scG4ub3JpZ2luKSxlLnByb3RvY29sPT09bi5wcm90b2NvbCYmZS5ob3N0PT09bi5ob3N0JiYodHx8ZS5wb3J0PT09bi5wb3J0KSkpKG5ldyBVUkwocG4ub3JpZ2luKSxwbi5uYXZpZ2F0b3ImJi8obXNpZXx0cmlkZW50KS9pLnRlc3QocG4ubmF2aWdhdG9yLnVzZXJBZ2VudCkpOigpPT4hMCxIbj1wbi5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/e3dyaXRlKGUsdCxuLHIsaSxvLHMpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgZG9jdW1lbnQpcmV0dXJuO2NvbnN0IGE9WyIiLmNvbmNhdChlLCI9IikuY29uY2F0KGVuY29kZVVSSUNvbXBvbmVudCh0KSldO3plLmlzTnVtYmVyKG4pJiZhLnB1c2goImV4cGlyZXM9Ii5jb25jYXQobmV3IERhdGUobikudG9VVENTdHJpbmcoKSkpLHplLmlzU3RyaW5nKHIpJiZhLnB1c2goInBhdGg9Ii5jb25jYXQocikpLHplLmlzU3RyaW5nKGkpJiZhLnB1c2goImRvbWFpbj0iLmNvbmNhdChpKSksITA9PT1vJiZhLnB1c2goInNlY3VyZSIpLHplLmlzU3RyaW5nKHMpJiZhLnB1c2goIlNhbWVTaXRlPSIuY29uY2F0KHMpKSxkb2N1bWVudC5jb29raWU9YS5qb2luKCI7ICIpfSxyZWFkKGUpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgZG9jdW1lbnQpcmV0dXJuIG51bGw7Y29uc3QgdD1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKD86Xnw7ICkiK2UrIj0oW147XSopIikpO3JldHVybiB0P2RlY29kZVVSSUNvbXBvbmVudCh0WzFdKTpudWxsfSxyZW1vdmUoZSl7dGhpcy53cml0ZShlLCIiLERhdGUubm93KCktODY0ZTUsIi8iKX19Ont3cml0ZSgpe30scmVhZDooKT0+bnVsbCxyZW1vdmUoKXt9fTtmdW5jdGlvbiBNbihlLHQsbil7bGV0IHI9ISgic3RyaW5nIj09dHlwZW9mKGk9dCkmJi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QoaSkpO3ZhciBpO3JldHVybiBlJiYocnx8MD09bik/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD9lLnJlcGxhY2UoL1wvP1wvJC8sIiIpKyIvIit0LnJlcGxhY2UoL15cLysvLCIiKTplfShlLHQpOnR9Y29uc3QgTm49ZT0+ZSBpbnN0YW5jZW9mIFJuP3suLi5lfTplO2Z1bmN0aW9uIGpuKGUsdCl7dD10fHx7fTtjb25zdCBuPXt9O2Z1bmN0aW9uIHIoZSx0LG4scil7cmV0dXJuIHplLmlzUGxhaW5PYmplY3QoZSkmJnplLmlzUGxhaW5PYmplY3QodCk/emUubWVyZ2UuY2FsbCh7Y2FzZWxlc3M6cn0sZSx0KTp6ZS5pc1BsYWluT2JqZWN0KHQpP3plLm1lcmdlKHt9LHQpOnplLmlzQXJyYXkodCk/dC5zbGljZSgpOnR9ZnVuY3Rpb24gaShlLHQsbixpKXtyZXR1cm4gemUuaXNVbmRlZmluZWQodCk/emUuaXNVbmRlZmluZWQoZSk/dm9pZCAwOnIodm9pZCAwLGUsMCxpKTpyKGUsdCwwLGkpfWZ1bmN0aW9uIG8oZSx0KXtpZighemUuaXNVbmRlZmluZWQodCkpcmV0dXJuIHIodm9pZCAwLHQpfWZ1bmN0aW9uIHMoZSx0KXtyZXR1cm4gemUuaXNVbmRlZmluZWQodCk/emUuaXNVbmRlZmluZWQoZSk/dm9pZCAwOnIodm9pZCAwLGUpOnIodm9pZCAwLHQpfWZ1bmN0aW9uIGEobixpLG8pe3JldHVybiBvIGluIHQ/cihuLGkpOm8gaW4gZT9yKHZvaWQgMCxuKTp2b2lkIDB9Y29uc3QgYz17dXJsOm8sbWV0aG9kOm8sZGF0YTpvLGJhc2VVUkw6cyx0cmFuc2Zvcm1SZXF1ZXN0OnMsdHJhbnNmb3JtUmVzcG9uc2U6cyxwYXJhbXNTZXJpYWxpemVyOnMsdGltZW91dDpzLHRpbWVvdXRNZXNzYWdlOnMsd2l0aENyZWRlbnRpYWxzOnMsd2l0aFhTUkZUb2tlbjpzLGFkYXB0ZXI6cyxyZXNwb25zZVR5cGU6cyx4c3JmQ29va2llTmFtZTpzLHhzcmZIZWFkZXJOYW1lOnMsb25VcGxvYWRQcm9ncmVzczpzLG9uRG93bmxvYWRQcm9ncmVzczpzLGRlY29tcHJlc3M6cyxtYXhDb250ZW50TGVuZ3RoOnMsbWF4Qm9keUxlbmd0aDpzLGJlZm9yZVJlZGlyZWN0OnMsdHJhbnNwb3J0OnMsaHR0cEFnZW50OnMsaHR0cHNBZ2VudDpzLGNhbmNlbFRva2VuOnMsc29ja2V0UGF0aDpzLHJlc3BvbnNlRW5jb2Rpbmc6cyx2YWxpZGF0ZVN0YXR1czphLGhlYWRlcnM6KGUsdCxuKT0+aShObihlKSxObih0KSwwLCEwKX07cmV0dXJuIHplLmZvckVhY2goT2JqZWN0LmtleXMoey4uLmUsLi4udH0pLChmdW5jdGlvbihyKXtpZigiX19wcm90b19fIj09PXJ8fCJjb25zdHJ1Y3RvciI9PT1yfHwicHJvdG90eXBlIj09PXIpcmV0dXJuO2NvbnN0IG89emUuaGFzT3duUHJvcChjLHIpP2Nbcl06aSxzPW8oZVtyXSx0W3JdLHIpO3plLmlzVW5kZWZpbmVkKHMpJiZvIT09YXx8KG5bcl09cyl9KSksbn12YXIgeG49ZT0+e2NvbnN0IHQ9am4oe30sZSk7bGV0e2RhdGE6bix3aXRoWFNSRlRva2VuOnIseHNyZkhlYWRlck5hbWU6aSx4c3JmQ29va2llTmFtZTpvLGhlYWRlcnM6cyxhdXRoOmF9PXQ7aWYodC5oZWFkZXJzPXM9Um4uZnJvbShzKSx0LnVybD1vbihNbih0LmJhc2VVUkwsdC51cmwsdC5hbGxvd0Fic29sdXRlVXJscyksZS5wYXJhbXMsZS5wYXJhbXNTZXJpYWxpemVyKSxhJiZzLnNldCgiQXV0aG9yaXphdGlvbiIsIkJhc2ljICIrYnRvYSgoYS51c2VybmFtZXx8IiIpKyI6IisoYS5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoYS5wYXNzd29yZCkpOiIiKSkpLHplLmlzRm9ybURhdGEobikpaWYocG4uaGFzU3RhbmRhcmRCcm93c2VyRW52fHxwbi5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpcy5zZXRDb250ZW50VHlwZSh2b2lkIDApO2Vsc2UgaWYoemUuaXNGdW5jdGlvbihuLmdldEhlYWRlcnMpKXtjb25zdCBlPW4uZ2V0SGVhZGVycygpLHQ9WyJjb250ZW50LXR5cGUiLCJjb250ZW50LWxlbmd0aCJdO09iamVjdC5lbnRyaWVzKGUpLmZvckVhY2goKGU9PntsZXRbbixyXT1lO3QuaW5jbHVkZXMobi50b0xvd2VyQ2FzZSgpKSYmcy5zZXQobixyKX0pKX1pZihwbi5oYXNTdGFuZGFyZEJyb3dzZXJFbnYmJihyJiZ6ZS5pc0Z1bmN0aW9uKHIpJiYocj1yKHQpKSxyfHwhMSE9PXImJkxuKHQudXJsKSkpe2NvbnN0IGU9aSYmbyYmSG4ucmVhZChvKTtlJiZzLnNldChpLGUpfXJldHVybiB0fTt2YXIgcW49InVuZGVmaW5lZCIhPXR5cGVvZiBYTUxIdHRwUmVxdWVzdCYmZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0LG4pe2NvbnN0IHI9eG4oZSk7bGV0IGk9ci5kYXRhO2NvbnN0IG89Um4uZnJvbShyLmhlYWRlcnMpLm5vcm1hbGl6ZSgpO2xldCBzLGEsYyx1LGwse3Jlc3BvbnNlVHlwZTpkLG9uVXBsb2FkUHJvZ3Jlc3M6aCxvbkRvd25sb2FkUHJvZ3Jlc3M6Zn09cjtmdW5jdGlvbiBwKCl7dSYmdSgpLGwmJmwoKSxyLmNhbmNlbFRva2VuJiZyLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKHMpLHIuc2lnbmFsJiZyLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIscyl9bGV0IGc9bmV3IFhNTEh0dHBSZXF1ZXN0O2Z1bmN0aW9uIHkoKXtpZighZylyZXR1cm47Y29uc3Qgcj1Sbi5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gZyYmZy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk7Q24oKGZ1bmN0aW9uKGUpe3QoZSkscCgpfSksKGZ1bmN0aW9uKGUpe24oZSkscCgpfSkse2RhdGE6ZCYmInRleHQiIT09ZCYmImpzb24iIT09ZD9nLnJlc3BvbnNlOmcucmVzcG9uc2VUZXh0LHN0YXR1czpnLnN0YXR1cyxzdGF0dXNUZXh0Omcuc3RhdHVzVGV4dCxoZWFkZXJzOnIsY29uZmlnOmUscmVxdWVzdDpnfSksZz1udWxsfWcub3BlbihyLm1ldGhvZC50b1VwcGVyQ2FzZSgpLHIudXJsLCEwKSxnLnRpbWVvdXQ9ci50aW1lb3V0LCJvbmxvYWRlbmQiaW4gZz9nLm9ubG9hZGVuZD15Omcub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7ZyYmND09PWcucmVhZHlTdGF0ZSYmKDAhPT1nLnN0YXR1c3x8Zy5yZXNwb25zZVVSTCYmMD09PWcucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKSkmJnNldFRpbWVvdXQoeSl9LGcub25hYm9ydD1mdW5jdGlvbigpe2cmJihuKG5ldyBZdCgiUmVxdWVzdCBhYm9ydGVkIixZdC5FQ09OTkFCT1JURUQsZSxnKSksZz1udWxsKX0sZy5vbmVycm9yPWZ1bmN0aW9uKHQpe2NvbnN0IHI9dCYmdC5tZXNzYWdlP3QubWVzc2FnZToiTmV0d29yayBFcnJvciIsaT1uZXcgWXQocixZdC5FUlJfTkVUV09SSyxlLGcpO2kuZXZlbnQ9dHx8bnVsbCxuKGkpLGc9bnVsbH0sZy5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXtsZXQgdD1yLnRpbWVvdXQ/InRpbWVvdXQgb2YgIityLnRpbWVvdXQrIm1zIGV4Y2VlZGVkIjoidGltZW91dCBleGNlZWRlZCI7Y29uc3QgaT1yLnRyYW5zaXRpb25hbHx8YW47ci50aW1lb3V0RXJyb3JNZXNzYWdlJiYodD1yLnRpbWVvdXRFcnJvck1lc3NhZ2UpLG4obmV3IFl0KHQsaS5jbGFyaWZ5VGltZW91dEVycm9yP1l0LkVUSU1FRE9VVDpZdC5FQ09OTkFCT1JURUQsZSxnKSksZz1udWxsfSx2b2lkIDA9PT1pJiZvLnNldENvbnRlbnRUeXBlKG51bGwpLCJzZXRSZXF1ZXN0SGVhZGVyImluIGcmJnplLmZvckVhY2goby50b0pTT04oKSwoZnVuY3Rpb24oZSx0KXtnLnNldFJlcXVlc3RIZWFkZXIodCxlKX0pKSx6ZS5pc1VuZGVmaW5lZChyLndpdGhDcmVkZW50aWFscyl8fChnLndpdGhDcmVkZW50aWFscz0hIXIud2l0aENyZWRlbnRpYWxzKSxkJiYianNvbiIhPT1kJiYoZy5yZXNwb25zZVR5cGU9ci5yZXNwb25zZVR5cGUpLGYmJihbYyxsXT1QbihmLCEwKSxnLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixjKSksaCYmZy51cGxvYWQmJihbYSx1XT1QbihoKSxnLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsYSksZy51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigibG9hZGVuZCIsdSkpLChyLmNhbmNlbFRva2VufHxyLnNpZ25hbCkmJihzPXQ9PntnJiYobighdHx8dC50eXBlP25ldyBBbihudWxsLGUsZyk6dCksZy5hYm9ydCgpLGc9bnVsbCl9LHIuY2FuY2VsVG9rZW4mJnIuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKHMpLHIuc2lnbmFsJiYoci5zaWduYWwuYWJvcnRlZD9zKCk6ci5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHMpKSk7Y29uc3Qgdj1mdW5jdGlvbihlKXtjb25zdCB0PS9eKFstK1x3XXsxLDI1fSkoOj9cL1wvfDopLy5leGVjKGUpO3JldHVybiB0JiZ0WzFdfHwiIn0oci51cmwpO3YmJi0xPT09cG4ucHJvdG9jb2xzLmluZGV4T2Yodik/bihuZXcgWXQoIlVuc3VwcG9ydGVkIHByb3RvY29sICIrdisiOiIsWXQuRVJSX0JBRF9SRVFVRVNULGUpKTpnLnNlbmQoaXx8bnVsbCl9KSl9O3ZhciBCbj0oZSx0KT0+e2NvbnN0e2xlbmd0aDpufT1lPWU/ZS5maWx0ZXIoQm9vbGVhbik6W107aWYodHx8bil7bGV0IG4scj1uZXcgQWJvcnRDb250cm9sbGVyO2NvbnN0IGk9ZnVuY3Rpb24oZSl7aWYoIW4pe249ITAscygpO2NvbnN0IHQ9ZSBpbnN0YW5jZW9mIEVycm9yP2U6dGhpcy5yZWFzb247ci5hYm9ydCh0IGluc3RhbmNlb2YgWXQ/dDpuZXcgQW4odCBpbnN0YW5jZW9mIEVycm9yP3QubWVzc2FnZTp0KSl9fTtsZXQgbz10JiZzZXRUaW1lb3V0KCgoKT0+e289bnVsbCxpKG5ldyBZdCgidGltZW91dCBvZiAiLmNvbmNhdCh0LCJtcyBleGNlZWRlZCIpLFl0LkVUSU1FRE9VVCkpfSksdCk7Y29uc3Qgcz0oKT0+e2UmJihvJiZjbGVhclRpbWVvdXQobyksbz1udWxsLGUuZm9yRWFjaCgoZT0+e2UudW5zdWJzY3JpYmU/ZS51bnN1YnNjcmliZShpKTplLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixpKX0pKSxlPW51bGwpfTtlLmZvckVhY2goKGU9PmUuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGkpKSk7Y29uc3R7c2lnbmFsOmF9PXI7cmV0dXJuIGEudW5zdWJzY3JpYmU9KCk9PnplLmFzYXAocyksYX19O2NvbnN0IEZuPWZ1bmN0aW9uKihlLHQpe2xldCBuPWUuYnl0ZUxlbmd0aDtpZighdHx8bjx0KXJldHVybiB2b2lkKHlpZWxkIGUpO2xldCByLGk9MDtmb3IoO2k8bjspcj1pK3QseWllbGQgZS5zbGljZShpLHIpLGk9cn0sS249YXN5bmMgZnVuY3Rpb24qKGUpe2lmKGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKXJldHVybiB2b2lkKHlpZWxkKmUpO2NvbnN0IHQ9ZS5nZXRSZWFkZXIoKTt0cnl7Zm9yKDs7KXtjb25zdHtkb25lOmUsdmFsdWU6bn09YXdhaXQgdC5yZWFkKCk7aWYoZSlicmVhazt5aWVsZCBufX1maW5hbGx5e2F3YWl0IHQuY2FuY2VsKCl9fSxKbj0oZSx0LG4scik9Pntjb25zdCBpPWFzeW5jIGZ1bmN0aW9uKihlLHQpe2ZvciBhd2FpdChjb25zdCBuIG9mIEtuKGUpKXlpZWxkKkZuKG4sdCl9KGUsdCk7bGV0IG8scz0wLGE9ZT0+e298fChvPSEwLHImJnIoZSkpfTtyZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHthc3luYyBwdWxsKGUpe3RyeXtjb25zdHtkb25lOnQsdmFsdWU6cn09YXdhaXQgaS5uZXh0KCk7aWYodClyZXR1cm4gYSgpLHZvaWQgZS5jbG9zZSgpO2xldCBvPXIuYnl0ZUxlbmd0aDtpZihuKXtsZXQgZT1zKz1vO24oZSl9ZS5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KHIpKX1jYXRjaChlKXt0aHJvdyBhKGUpLGV9fSxjYW5jZWw6ZT0+KGEoZSksaS5yZXR1cm4oKSl9LHtoaWdoV2F0ZXJNYXJrOjJ9KX0se2lzRnVuY3Rpb246V259PXplLHpuPShlPT57bGV0e1JlcXVlc3Q6dCxSZXNwb25zZTpufT1lO3JldHVybntSZXF1ZXN0OnQsUmVzcG9uc2U6bn19KSh6ZS5nbG9iYWwpLHtSZWFkYWJsZVN0cmVhbTpWbixUZXh0RW5jb2RlcjpZbn09emUuZ2xvYmFsLEduPWZ1bmN0aW9uKGUpe3RyeXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxuPW5ldyBBcnJheSh0PjE/dC0xOjApLHI9MTtyPHQ7cisrKW5bci0xXT1hcmd1bWVudHNbcl07cmV0dXJuISFlKC4uLm4pfWNhdGNoKGUpe3JldHVybiExfX0sWG49ZT0+e2U9emUubWVyZ2UuY2FsbCh7c2tpcFVuZGVmaW5lZDohMH0sem4sZSk7Y29uc3R7ZmV0Y2g6dCxSZXF1ZXN0Om4sUmVzcG9uc2U6cn09ZSxpPXQ/V24odCk6ImZ1bmN0aW9uIj09dHlwZW9mIGZldGNoLG89V24obikscz1XbihyKTtpZighaSlyZXR1cm4hMTtjb25zdCBhPWkmJlduKFZuKSxjPWkmJigiZnVuY3Rpb24iPT10eXBlb2YgWW4/KGU9PnQ9PmUuZW5jb2RlKHQpKShuZXcgWW4pOmFzeW5jIGU9Pm5ldyBVaW50OEFycmF5KGF3YWl0IG5ldyBuKGUpLmFycmF5QnVmZmVyKCkpKSx1PW8mJmEmJkduKCgoKT0+e2xldCBlPSExO2NvbnN0IHQ9bmV3IG4ocG4ub3JpZ2luLHtib2R5Om5ldyBWbixtZXRob2Q6IlBPU1QiLGdldCBkdXBsZXgoKXtyZXR1cm4gZT0hMCwiaGFsZiJ9fSkuaGVhZGVycy5oYXMoIkNvbnRlbnQtVHlwZSIpO3JldHVybiBlJiYhdH0pKSxsPXMmJmEmJkduKCgoKT0+emUuaXNSZWFkYWJsZVN0cmVhbShuZXcgcigiIikuYm9keSkpKSxkPXtzdHJlYW06bCYmKGU9PmUuYm9keSl9O2kmJlsidGV4dCIsImFycmF5QnVmZmVyIiwiYmxvYiIsImZvcm1EYXRhIiwic3RyZWFtIl0uZm9yRWFjaCgoZT0+eyFkW2VdJiYoZFtlXT0odCxuKT0+e2xldCByPXQmJnRbZV07aWYocilyZXR1cm4gci5jYWxsKHQpO3Rocm93IG5ldyBZdCgiUmVzcG9uc2UgdHlwZSAnIi5jb25jYXQoZSwiJyBpcyBub3Qgc3VwcG9ydGVkIiksWXQuRVJSX05PVF9TVVBQT1JULG4pfSl9KSk7Y29uc3QgaD1hc3luYyhlLHQpPT57Y29uc3Qgcj16ZS50b0Zpbml0ZU51bWJlcihlLmdldENvbnRlbnRMZW5ndGgoKSk7cmV0dXJuIG51bGw9PXI/KGFzeW5jIGU9PntpZihudWxsPT1lKXJldHVybiAwO2lmKHplLmlzQmxvYihlKSlyZXR1cm4gZS5zaXplO2lmKHplLmlzU3BlY0NvbXBsaWFudEZvcm0oZSkpe2NvbnN0IHQ9bmV3IG4ocG4ub3JpZ2luLHttZXRob2Q6IlBPU1QiLGJvZHk6ZX0pO3JldHVybihhd2FpdCB0LmFycmF5QnVmZmVyKCkpLmJ5dGVMZW5ndGh9cmV0dXJuIHplLmlzQXJyYXlCdWZmZXJWaWV3KGUpfHx6ZS5pc0FycmF5QnVmZmVyKGUpP2UuYnl0ZUxlbmd0aDooemUuaXNVUkxTZWFyY2hQYXJhbXMoZSkmJihlKz0iIiksemUuaXNTdHJpbmcoZSk/KGF3YWl0IGMoZSkpLmJ5dGVMZW5ndGg6dm9pZCAwKX0pKHQpOnJ9O3JldHVybiBhc3luYyBlPT57bGV0e3VybDppLG1ldGhvZDpzLGRhdGE6YSxzaWduYWw6YyxjYW5jZWxUb2tlbjpmLHRpbWVvdXQ6cCxvbkRvd25sb2FkUHJvZ3Jlc3M6ZyxvblVwbG9hZFByb2dyZXNzOnkscmVzcG9uc2VUeXBlOnYsaGVhZGVyczptLHdpdGhDcmVkZW50aWFsczp3PSJzYW1lLW9yaWdpbiIsZmV0Y2hPcHRpb25zOmJ9PXhuKGUpLF89dHx8ZmV0Y2g7dj12Pyh2KyIiKS50b0xvd2VyQ2FzZSgpOiJ0ZXh0IjtsZXQgUz1CbihbYyxmJiZmLnRvQWJvcnRTaWduYWwoKV0scCksRT1udWxsO2NvbnN0IFI9UyYmUy51bnN1YnNjcmliZSYmKCgpPT57Uy51bnN1YnNjcmliZSgpfSk7bGV0IFQ7dHJ5e2lmKHkmJnUmJiJnZXQiIT09cyYmImhlYWQiIT09cyYmMCE9PShUPWF3YWl0IGgobSxhKSkpe2xldCBlLHQ9bmV3IG4oaSx7bWV0aG9kOiJQT1NUIixib2R5OmEsZHVwbGV4OiJoYWxmIn0pO2lmKHplLmlzRm9ybURhdGEoYSkmJihlPXQuaGVhZGVycy5nZXQoImNvbnRlbnQtdHlwZSIpKSYmbS5zZXRDb250ZW50VHlwZShlKSx0LmJvZHkpe2NvbnN0W2Usbl09SW4oVCxQbihVbih5KSkpO2E9Sm4odC5ib2R5LDY1NTM2LGUsbil9fXplLmlzU3RyaW5nKHcpfHwodz13PyJpbmNsdWRlIjoib21pdCIpO2NvbnN0IHQ9byYmImNyZWRlbnRpYWxzImluIG4ucHJvdG90eXBlLGM9ey4uLmIsc2lnbmFsOlMsbWV0aG9kOnMudG9VcHBlckNhc2UoKSxoZWFkZXJzOm0ubm9ybWFsaXplKCkudG9KU09OKCksYm9keTphLGR1cGxleDoiaGFsZiIsY3JlZGVudGlhbHM6dD93OnZvaWQgMH07RT1vJiZuZXcgbihpLGMpO2xldCBmPWF3YWl0KG8/XyhFLGIpOl8oaSxjKSk7Y29uc3QgcD1sJiYoInN0cmVhbSI9PT12fHwicmVzcG9uc2UiPT09dik7aWYobCYmKGd8fHAmJlIpKXtjb25zdCBlPXt9O1sic3RhdHVzIiwic3RhdHVzVGV4dCIsImhlYWRlcnMiXS5mb3JFYWNoKCh0PT57ZVt0XT1mW3RdfSkpO2NvbnN0IHQ9emUudG9GaW5pdGVOdW1iZXIoZi5oZWFkZXJzLmdldCgiY29udGVudC1sZW5ndGgiKSksW24saV09ZyYmSW4odCxQbihVbihnKSwhMCkpfHxbXTtmPW5ldyByKEpuKGYuYm9keSw2NTUzNixuLCgoKT0+e2kmJmkoKSxSJiZSKCl9KSksZSl9dj12fHwidGV4dCI7bGV0IGs9YXdhaXQgZFt6ZS5maW5kS2V5KGQsdil8fCJ0ZXh0Il0oZixlKTtyZXR1cm4hcCYmUiYmUigpLGF3YWl0IG5ldyBQcm9taXNlKCgodCxuKT0+e0NuKHQsbix7ZGF0YTprLGhlYWRlcnM6Um4uZnJvbShmLmhlYWRlcnMpLHN0YXR1czpmLnN0YXR1cyxzdGF0dXNUZXh0OmYuc3RhdHVzVGV4dCxjb25maWc6ZSxyZXF1ZXN0OkV9KX0pKX1jYXRjaCh0KXtpZihSJiZSKCksdCYmIlR5cGVFcnJvciI9PT10Lm5hbWUmJi9Mb2FkIGZhaWxlZHxmZXRjaC9pLnRlc3QodC5tZXNzYWdlKSl0aHJvdyBPYmplY3QuYXNzaWduKG5ldyBZdCgiTmV0d29yayBFcnJvciIsWXQuRVJSX05FVFdPUkssZSxFLHQmJnQucmVzcG9uc2UpLHtjYXVzZTp0LmNhdXNlfHx0fSk7dGhyb3cgWXQuZnJvbSh0LHQmJnQuY29kZSxlLEUsdCYmdC5yZXNwb25zZSl9fX0sJG49bmV3IE1hcCxabj1lPT57bGV0IHQ9ZSYmZS5lbnZ8fHt9O2NvbnN0e2ZldGNoOm4sUmVxdWVzdDpyLFJlc3BvbnNlOml9PXQsbz1bcixpLG5dO2xldCBzLGEsYz1vLmxlbmd0aCx1PSRuO2Zvcig7Yy0tOylzPW9bY10sYT11LmdldChzKSx2b2lkIDA9PT1hJiZ1LnNldChzLGE9Yz9uZXcgTWFwOlhuKHQpKSx1PWE7cmV0dXJuIGF9O1puKCk7Y29uc3QgUW49e2h0dHA6bnVsbCx4aHI6cW4sZmV0Y2g6e2dldDpabn19O3plLmZvckVhY2goUW4sKChlLHQpPT57aWYoZSl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJuYW1lIix7dmFsdWU6dH0pfWNhdGNoKGUpe31PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiYWRhcHRlck5hbWUiLHt2YWx1ZTp0fSl9fSkpO2NvbnN0IGVyPWU9PiItICIuY29uY2F0KGUpLHRyPWU9PnplLmlzRnVuY3Rpb24oZSl8fG51bGw9PT1lfHwhMT09PWU7dmFyIG5yPXtnZXRBZGFwdGVyOmZ1bmN0aW9uKGUsdCl7ZT16ZS5pc0FycmF5KGUpP2U6W2VdO2NvbnN0e2xlbmd0aDpufT1lO2xldCByLGk7Y29uc3Qgbz17fTtmb3IobGV0IHM9MDtzPG47cysrKXtsZXQgbjtpZihyPWVbc10saT1yLCF0cihyKSYmKGk9UW5bKG49U3RyaW5nKHIpKS50b0xvd2VyQ2FzZSgpXSx2b2lkIDA9PT1pKSl0aHJvdyBuZXcgWXQoIlVua25vd24gYWRhcHRlciAnIi5jb25jYXQobiwiJyIpKTtpZihpJiYoemUuaXNGdW5jdGlvbihpKXx8KGk9aS5nZXQodCkpKSlicmVhaztvW258fCIjIitzXT1pfWlmKCFpKXtjb25zdCBlPU9iamVjdC5lbnRyaWVzKG8pLm1hcCgoZT0+e2xldFt0LG5dPWU7cmV0dXJuImFkYXB0ZXIgIi5jb25jYXQodCwiICIpKyghMT09PW4/ImlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGVudmlyb25tZW50IjoiaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnVpbGQiKX0pKTtsZXQgdD1uP2UubGVuZ3RoPjE/InNpbmNlIDpcbiIrZS5tYXAoZXIpLmpvaW4oIlxuIik6IiAiK2VyKGVbMF0pOiJhcyBubyBhZGFwdGVyIHNwZWNpZmllZCI7dGhyb3cgbmV3IFl0KCJUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0ICIrdCwiRVJSX05PVF9TVVBQT1JUIil9cmV0dXJuIGl9LGFkYXB0ZXJzOlFufTtmdW5jdGlvbiBycihlKXtpZihlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKSxlLnNpZ25hbCYmZS5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgQW4obnVsbCxlKX1mdW5jdGlvbiBpcihlKXtycihlKSxlLmhlYWRlcnM9Um4uZnJvbShlLmhlYWRlcnMpLGUuZGF0YT1Ubi5jYWxsKGUsZS50cmFuc2Zvcm1SZXF1ZXN0KSwtMSE9PVsicG9zdCIsInB1dCIsInBhdGNoIl0uaW5kZXhPZihlLm1ldGhvZCkmJmUuaGVhZGVycy5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSk7cmV0dXJuIG5yLmdldEFkYXB0ZXIoZS5hZGFwdGVyfHx2bi5hZGFwdGVyLGUpKGUpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiBycihlKSx0LmRhdGE9VG4uY2FsbChlLGUudHJhbnNmb3JtUmVzcG9uc2UsdCksdC5oZWFkZXJzPVJuLmZyb20odC5oZWFkZXJzKSx0fSksKGZ1bmN0aW9uKHQpe3JldHVybiBrbih0KXx8KHJyKGUpLHQmJnQucmVzcG9uc2UmJih0LnJlc3BvbnNlLmRhdGE9VG4uY2FsbChlLGUudHJhbnNmb3JtUmVzcG9uc2UsdC5yZXNwb25zZSksdC5yZXNwb25zZS5oZWFkZXJzPVJuLmZyb20odC5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KHQpfSkpfWNvbnN0IG9yPSIxLjEzLjYiLHNyPXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoKGUsdCk9PntzcltlXT1mdW5jdGlvbihuKXtyZXR1cm4gdHlwZW9mIG49PT1lfHwiYSIrKHQ8MT8ibiAiOiIgIikrZX19KSk7Y29uc3QgYXI9e307c3IudHJhbnNpdGlvbmFsPWZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIltBeGlvcyB2MS4xMy42XSBUcmFuc2l0aW9uYWwgb3B0aW9uICciK2UrIiciK3QrKG4/Ii4gIituOiIiKX1yZXR1cm4obixpLG8pPT57aWYoITE9PT1lKXRocm93IG5ldyBZdChyKGksIiBoYXMgYmVlbiByZW1vdmVkIisodD8iIGluICIrdDoiIikpLFl0LkVSUl9ERVBSRUNBVEVEKTtyZXR1cm4gdCYmIWFyW2ldJiYoYXJbaV09ITAsY29uc29sZS53YXJuKHIoaSwiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrdCsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSwhZXx8ZShuLGksbyl9fSxzci5zcGVsbGluZz1mdW5jdGlvbihlKXtyZXR1cm4odCxuKT0+KGNvbnNvbGUud2FybigiIi5jb25jYXQobiwiIGlzIGxpa2VseSBhIG1pc3NwZWxsaW5nIG9mICIpLmNvbmNhdChlKSksITApfTt2YXIgY3I9e2Fzc2VydE9wdGlvbnM6ZnVuY3Rpb24oZSx0LG4pe2lmKCJvYmplY3QiIT10eXBlb2YgZSl0aHJvdyBuZXcgWXQoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiLFl0LkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtjb25zdCByPU9iamVjdC5rZXlzKGUpO2xldCBpPXIubGVuZ3RoO2Zvcig7aS0tID4wOyl7Y29uc3Qgbz1yW2ldLHM9dFtvXTtpZihzKXtjb25zdCB0PWVbb10sbj12b2lkIDA9PT10fHxzKHQsbyxlKTtpZighMCE9PW4pdGhyb3cgbmV3IFl0KCJvcHRpb24gIitvKyIgbXVzdCBiZSAiK24sWXQuRVJSX0JBRF9PUFRJT05fVkFMVUUpfWVsc2UgaWYoITAhPT1uKXRocm93IG5ldyBZdCgiVW5rbm93biBvcHRpb24gIitvLFl0LkVSUl9CQURfT1BUSU9OKX19LHZhbGlkYXRvcnM6c3J9O2NvbnN0IHVyPWNyLnZhbGlkYXRvcnM7Y2xhc3MgbHJ7Y29uc3RydWN0b3IoZSl7dGhpcy5kZWZhdWx0cz1lfHx7fSx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgc24scmVzcG9uc2U6bmV3IHNufX1hc3luYyByZXF1ZXN0KGUsdCl7dHJ5e3JldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KGUsdCl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIEVycm9yKXtsZXQgdD17fTtFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0KTp0PW5ldyBFcnJvcjtjb25zdCBuPXQuc3RhY2s/dC5zdGFjay5yZXBsYWNlKC9eLitcbi8sIiIpOiIiO3RyeXtlLnN0YWNrP24mJiFTdHJpbmcoZS5zdGFjaykuZW5kc1dpdGgobi5yZXBsYWNlKC9eLitcbi4rXG4vLCIiKSkmJihlLnN0YWNrKz0iXG4iK24pOmUuc3RhY2s9bn1jYXRjaChlKXt9fXRocm93IGV9fV9yZXF1ZXN0KGUsdCl7InN0cmluZyI9PXR5cGVvZiBlPyh0PXR8fHt9KS51cmw9ZTp0PWV8fHt9LHQ9am4odGhpcy5kZWZhdWx0cyx0KTtjb25zdHt0cmFuc2l0aW9uYWw6bixwYXJhbXNTZXJpYWxpemVyOnIsaGVhZGVyczppfT10O3ZvaWQgMCE9PW4mJmNyLmFzc2VydE9wdGlvbnMobix7c2lsZW50SlNPTlBhcnNpbmc6dXIudHJhbnNpdGlvbmFsKHVyLmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOnVyLnRyYW5zaXRpb25hbCh1ci5ib29sZWFuKSxjbGFyaWZ5VGltZW91dEVycm9yOnVyLnRyYW5zaXRpb25hbCh1ci5ib29sZWFuKSxsZWdhY3lJbnRlcmNlcHRvclJlcVJlc09yZGVyaW5nOnVyLnRyYW5zaXRpb25hbCh1ci5ib29sZWFuKX0sITEpLG51bGwhPXImJih6ZS5pc0Z1bmN0aW9uKHIpP3QucGFyYW1zU2VyaWFsaXplcj17c2VyaWFsaXplOnJ9OmNyLmFzc2VydE9wdGlvbnMocix7ZW5jb2RlOnVyLmZ1bmN0aW9uLHNlcmlhbGl6ZTp1ci5mdW5jdGlvbn0sITApKSx2b2lkIDAhPT10LmFsbG93QWJzb2x1dGVVcmxzfHwodm9pZCAwIT09dGhpcy5kZWZhdWx0cy5hbGxvd0Fic29sdXRlVXJscz90LmFsbG93QWJzb2x1dGVVcmxzPXRoaXMuZGVmYXVsdHMuYWxsb3dBYnNvbHV0ZVVybHM6dC5hbGxvd0Fic29sdXRlVXJscz0hMCksY3IuYXNzZXJ0T3B0aW9ucyh0LHtiYXNlVXJsOnVyLnNwZWxsaW5nKCJiYXNlVVJMIiksd2l0aFhzcmZUb2tlbjp1ci5zcGVsbGluZygid2l0aFhTUkZUb2tlbiIpfSwhMCksdC5tZXRob2Q9KHQubWV0aG9kfHx0aGlzLmRlZmF1bHRzLm1ldGhvZHx8ImdldCIpLnRvTG93ZXJDYXNlKCk7bGV0IG89aSYmemUubWVyZ2UoaS5jb21tb24saVt0Lm1ldGhvZF0pO2kmJnplLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sKGU9PntkZWxldGUgaVtlXX0pKSx0LmhlYWRlcnM9Um4uY29uY2F0KG8saSk7Y29uc3Qgcz1bXTtsZXQgYT0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLnJ1bldoZW4mJiExPT09ZS5ydW5XaGVuKHQpKXJldHVybjthPWEmJmUuc3luY2hyb25vdXM7Y29uc3Qgbj10LnRyYW5zaXRpb25hbHx8YW47biYmbi5sZWdhY3lJbnRlcmNlcHRvclJlcVJlc09yZGVyaW5nP3MudW5zaGlmdChlLmZ1bGZpbGxlZCxlLnJlamVjdGVkKTpzLnB1c2goZS5mdWxmaWxsZWQsZS5yZWplY3RlZCl9KSk7Y29uc3QgYz1bXTtsZXQgdTt0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKChmdW5jdGlvbihlKXtjLnB1c2goZS5mdWxmaWxsZWQsZS5yZWplY3RlZCl9KSk7bGV0IGwsZD0wO2lmKCFhKXtjb25zdCBlPVtpci5iaW5kKHRoaXMpLHZvaWQgMF07Zm9yKGUudW5zaGlmdCguLi5zKSxlLnB1c2goLi4uYyksbD1lLmxlbmd0aCx1PVByb21pc2UucmVzb2x2ZSh0KTtkPGw7KXU9dS50aGVuKGVbZCsrXSxlW2QrK10pO3JldHVybiB1fWw9cy5sZW5ndGg7bGV0IGg9dDtmb3IoO2Q8bDspe2NvbnN0IGU9c1tkKytdLHQ9c1tkKytdO3RyeXtoPWUoaCl9Y2F0Y2goZSl7dC5jYWxsKHRoaXMsZSk7YnJlYWt9fXRyeXt1PWlyLmNhbGwodGhpcyxoKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9Zm9yKGQ9MCxsPWMubGVuZ3RoO2Q8bDspdT11LnRoZW4oY1tkKytdLGNbZCsrXSk7cmV0dXJuIHV9Z2V0VXJpKGUpe3JldHVybiBvbihNbigoZT1qbih0aGlzLmRlZmF1bHRzLGUpKS5iYXNlVVJMLGUudXJsLGUuYWxsb3dBYnNvbHV0ZVVybHMpLGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplcil9fXplLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLChmdW5jdGlvbihlKXtsci5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KGpuKG58fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOihufHx7fSkuZGF0YX0pKX19KSksemUuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLChmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQpe3JldHVybiBmdW5jdGlvbihuLHIsaSl7cmV0dXJuIHRoaXMucmVxdWVzdChqbihpfHx7fSx7bWV0aG9kOmUsaGVhZGVyczp0P3siQ29udGVudC1UeXBlIjoibXVsdGlwYXJ0L2Zvcm0tZGF0YSJ9Ont9LHVybDpuLGRhdGE6cn0pKX19bHIucHJvdG90eXBlW2VdPXQoKSxsci5wcm90b3R5cGVbZSsiRm9ybSJdPXQoITApfSkpO3ZhciBkcj1scjtjbGFzcyBocntjb25zdHJ1Y3RvcihlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uIik7bGV0IHQ7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKChmdW5jdGlvbihlKXt0PWV9KSk7Y29uc3Qgbj10aGlzO3RoaXMucHJvbWlzZS50aGVuKChlPT57aWYoIW4uX2xpc3RlbmVycylyZXR1cm47bGV0IHQ9bi5fbGlzdGVuZXJzLmxlbmd0aDtmb3IoO3QtLSA+MDspbi5fbGlzdGVuZXJzW3RdKGUpO24uX2xpc3RlbmVycz1udWxsfSkpLHRoaXMucHJvbWlzZS50aGVuPWU9PntsZXQgdDtjb25zdCByPW5ldyBQcm9taXNlKChlPT57bi5zdWJzY3JpYmUoZSksdD1lfSkpLnRoZW4oZSk7cmV0dXJuIHIuY2FuY2VsPWZ1bmN0aW9uKCl7bi51bnN1YnNjcmliZSh0KX0scn0sZSgoZnVuY3Rpb24oZSxyLGkpe24ucmVhc29ufHwobi5yZWFzb249bmV3IEFuKGUscixpKSx0KG4ucmVhc29uKSl9KSl9dGhyb3dJZlJlcXVlc3RlZCgpe2lmKHRoaXMucmVhc29uKXRocm93IHRoaXMucmVhc29ufXN1YnNjcmliZShlKXt0aGlzLnJlYXNvbj9lKHRoaXMucmVhc29uKTp0aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzLnB1c2goZSk6dGhpcy5fbGlzdGVuZXJzPVtlXX11bnN1YnNjcmliZShlKXtpZighdGhpcy5fbGlzdGVuZXJzKXJldHVybjtjb25zdCB0PXRoaXMuX2xpc3RlbmVycy5pbmRleE9mKGUpOy0xIT09dCYmdGhpcy5fbGlzdGVuZXJzLnNwbGljZSh0LDEpfXRvQWJvcnRTaWduYWwoKXtjb25zdCBlPW5ldyBBYm9ydENvbnRyb2xsZXIsdD10PT57ZS5hYm9ydCh0KX07cmV0dXJuIHRoaXMuc3Vic2NyaWJlKHQpLGUuc2lnbmFsLnVuc3Vic2NyaWJlPSgpPT50aGlzLnVuc3Vic2NyaWJlKHQpLGUuc2lnbmFsfXN0YXRpYyBzb3VyY2UoKXtsZXQgZTtjb25zdCB0PW5ldyBocigoZnVuY3Rpb24odCl7ZT10fSkpO3JldHVybnt0b2tlbjp0LGNhbmNlbDplfX19dmFyIGZyPWhyO2NvbnN0IHByPXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExLFdlYlNlcnZlcklzRG93bjo1MjEsQ29ubmVjdGlvblRpbWVkT3V0OjUyMixPcmlnaW5Jc1VucmVhY2hhYmxlOjUyMyxUaW1lb3V0T2NjdXJyZWQ6NTI0LFNzbEhhbmRzaGFrZUZhaWxlZDo1MjUsSW52YWxpZFNzbENlcnRpZmljYXRlOjUyNn07T2JqZWN0LmVudHJpZXMocHIpLmZvckVhY2goKGU9PntsZXRbdCxuXT1lO3ByW25dPXR9KSk7dmFyIGdyPXByO2NvbnN0IHlyPWZ1bmN0aW9uIGUodCl7Y29uc3Qgbj1uZXcgZHIodCkscj1lZShkci5wcm90b3R5cGUucmVxdWVzdCxuKTtyZXR1cm4gemUuZXh0ZW5kKHIsZHIucHJvdG90eXBlLG4se2FsbE93bktleXM6ITB9KSx6ZS5leHRlbmQocixuLG51bGwse2FsbE93bktleXM6ITB9KSxyLmNyZWF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gZShqbih0LG4pKX0scn0odm4pO3lyLkF4aW9zPWRyLHlyLkNhbmNlbGVkRXJyb3I9QW4seXIuQ2FuY2VsVG9rZW49ZnIseXIuaXNDYW5jZWw9a24seXIuVkVSU0lPTj1vcix5ci50b0Zvcm1EYXRhPVF0LHlyLkF4aW9zRXJyb3I9WXQseXIuQ2FuY2VsPXlyLkNhbmNlbGVkRXJyb3IseXIuYWxsPWZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLmFsbChlKX0seXIuc3ByZWFkPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5hcHBseShudWxsLHQpfX0seXIuaXNBeGlvc0Vycm9yPWZ1bmN0aW9uKGUpe3JldHVybiB6ZS5pc09iamVjdChlKSYmITA9PT1lLmlzQXhpb3NFcnJvcn0seXIubWVyZ2VDb25maWc9am4seXIuQXhpb3NIZWFkZXJzPVJuLHlyLmZvcm1Ub0pTT049ZT0+Z24oemUuaXNIVE1MRm9ybShlKT9uZXcgRm9ybURhdGEoZSk6ZSkseXIuZ2V0QWRhcHRlcj1uci5nZXRBZGFwdGVyLHlyLkh0dHBTdGF0dXNDb2RlPWdyLHlyLmRlZmF1bHQ9eXI7dmFyIHZyLG1yPXlyO2xldCB3cj12cj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuYXR0YWNoVG9rZW49KCk9PlByb21pc2UucmVzb2x2ZSgpLHRoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2s9KCk9Pm51bGwsdGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPSgpPT5udWxsLHRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2s9KCk9Pm51bGwsdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2s9KCk9Pm51bGwsdGhpcy5pbml0PXRoaXMuaW5pdC5iaW5kKHRoaXMpLHRoaXMuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrLmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjay5iaW5kKHRoaXMpLHRoaXMuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrLmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaz10aGlzLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrLmJpbmQodGhpcyl9c3RhdGljIGdldEluc3RhbmNlKCl7cmV0dXJuIHRoaXMuYXhpb3NJbnN0YW5jZXx8KHRoaXMuYXhpb3NJbnN0YW5jZT1tci5jcmVhdGUoe3dpdGhDcmVkZW50aWFsczohMH0pLHRoaXMuY2xpZW50SW5zdGFuY2V8fCh0aGlzLmNsaWVudEluc3RhbmNlPW5ldyB2ciksdGhpcy5heGlvc0luc3RhbmNlLmludGVyY2VwdG9ycy5yZXF1ZXN0LnVzZSgodD0+ZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmNsaWVudEluc3RhbmNlLnJlcXVlc3RIYW5kbGVyKHQpfSkpKSksdGhpcy5heGlvc0luc3RhbmNlLmludGVyY2VwdG9ycy5yZXNwb25zZS51c2UoKGU9PnRoaXMuY2xpZW50SW5zdGFuY2Uuc3VjY2Vzc0hhbmRsZXIoZSkpLChlPT50aGlzLmNsaWVudEluc3RhbmNlLmVycm9ySGFuZGxlcihlKSkpLHRoaXMuYXhpb3NJbnN0YW5jZS5hbGw9bXIuYWxsLHRoaXMuYXhpb3NJbnN0YW5jZS5zcHJlYWQ9bXIuc3ByZWFkLHRoaXMuYXhpb3NJbnN0YW5jZS5pbml0PXRoaXMuY2xpZW50SW5zdGFuY2UuaW5pdCx0aGlzLmF4aW9zSW5zdGFuY2UuZW5hYmxlSGFuZGxlcj10aGlzLmNsaWVudEluc3RhbmNlLmVuYWJsZUhhbmRsZXIsdGhpcy5heGlvc0luc3RhbmNlLmRpc2FibGVIYW5kbGVyPXRoaXMuY2xpZW50SW5zdGFuY2UuZGlzYWJsZUhhbmRsZXIsdGhpcy5heGlvc0luc3RhbmNlLmRpc2FibGVIYW5kbGVyV2l0aFRpbWVvdXQ9dGhpcy5jbGllbnRJbnN0YW5jZS5kaXNhYmxlSGFuZGxlcldpdGhUaW1lb3V0LHRoaXMuYXhpb3NJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2s9dGhpcy5jbGllbnRJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2ssdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2ssdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjayx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2spLHRoaXMuYXhpb3NJbnN0YW5jZX1yZXF1ZXN0SGFuZGxlcih0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKHlpZWxkIHRoaXMuYXR0YWNoVG9rZW4odCksbnVsbD09dD92b2lkIDA6dC5zaG91bGRFbmNvZGVUb0Zvcm1EYXRhKXtjb25zdCBlPW51bGw9PXQ/dm9pZCAwOnQuZGF0YSxuPW5ldyBGb3JtRGF0YTtPYmplY3Qua2V5cyhlKS5mb3JFYWNoKCh0PT57bi5hcHBlbmQodCxlW3RdKX0pKSx0LmRhdGE9bn1yZXR1cm4gdC5zdGFydFRpbWVJbk1zPShuZXcgRGF0ZSkuZ2V0VGltZSgpLHZyLmlzSGFuZGxlckVuYWJsZWQmJnRoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrJiZ0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrKHQpLHR9KSl9ZXJyb3JIYW5kbGVyKGUpe3Rocm93IHZyLmlzSGFuZGxlckVuYWJsZWQmJih0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjayYmdGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjayhlKSx0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiZ0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaygpKSxlfXN1Y2Nlc3NIYW5kbGVyKGUpe3ZhciB0LG47cmV0dXJuInN0cmVhbSI9PT0obnVsbD09PShuPW51bGw9PT0odD1lKXx8dm9pZCAwPT09dD92b2lkIDA6dC5jb25maWcpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLnJlc3BvbnNlVHlwZSl8fHZyLmlzSGFuZGxlckVuYWJsZWQmJih0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2smJnRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayhlKSx0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiZ0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaygpKSxlfWluaXQoKXtsZXQgdD0hKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdLG49YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDA7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt2ci5pc0hhbmRsZXJFbmFibGVkPXQsdGhpcy5hdHRhY2hUb2tlbj1ufSkpfWVuYWJsZUhhbmRsZXIoKXt2ci5pc0hhbmRsZXJFbmFibGVkPSEwfWRpc2FibGVIYW5kbGVyKCl7dnIuaXNIYW5kbGVyRW5hYmxlZD0hMX1kaXNhYmxlSGFuZGxlcldpdGhUaW1lb3V0KCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnZyLkRFRkFVTFRfSEFORExFUl9ESVNBQkxFX1RJTUVPVVQ7dnIuaXNIYW5kbGVyRW5hYmxlZD0hMSxzZXRUaW1lb3V0KCgoKT0+e3ZyLmlzSGFuZGxlckVuYWJsZWQ9ITB9KSxlKX1zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2soZSl7dGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjaz1lfXNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKGUpe3RoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaz1lfXNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjayhlKXt0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrPWV9c2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayhlKXt0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaz1lfX07d3IuREVGQVVMVF9IQU5ETEVSX0RJU0FCTEVfVElNRU9VVD0xZTMsd3I9dnI9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbz1hcmd1bWVudHMubGVuZ3RoLHM9bzwzP3Q6bnVsbD09PXI/cj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik6cjtpZigib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJiJmdW5jdGlvbiI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKXM9UmVmbGVjdC5kZWNvcmF0ZShlLHQsbixyKTtlbHNlIGZvcih2YXIgYT1lLmxlbmd0aC0xO2E+PTA7YS0tKShpPWVbYV0pJiYocz0obzwzP2kocyk6bz4zP2kodCxuLHMpOmkodCxuKSl8fHMpO3JldHVybiBvPjMmJnMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4scyksc30oW2U9Pnt9XSx3cik7Y2xhc3MgYnJ7Y29uc3RydWN0b3IoKXt0aGlzLl9kYXRhPW5ldyBNYXB9c2V0RGF0YSh0LG4pe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5fZGF0YS5zZXQodCxuKX0pKX1nZXREYXRhKHQpe3ZhciBuLHI7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbnVsbCE9PShyPW51bGw9PT0obj10aGlzLl9kYXRhKXx8dm9pZCAwPT09bj92b2lkIDA6bi5nZXQodCkpJiZ2b2lkIDAhPT1yP3I6Int9In0pKX1yZW1vdmVEYXRhKHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5fZGF0YS5kZWxldGUodCl9KSl9fXZhciBfcj0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOnt9O2Z1bmN0aW9uIFNyKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJkZWZhdWx0Iik/ZS5kZWZhdWx0OmV9ZnVuY3Rpb24gRXIoZSl7aWYoZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxuKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHIuZ2V0P3I6e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGVbbl19fSl9KSksdH12YXIgUnI9e2V4cG9ydHM6e319LFRyPXt9LGtyPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShrciwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksa3IuZGVmYXVsdD1mdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aCxuPXQlNDtpZighbilyZXR1cm4gZTt2YXIgcj10LGk9NC1uLG89dCtpLHM9YXQuYWxsb2Mobyk7Zm9yKHMud3JpdGUoZSk7aS0tOylzLndyaXRlKCI9IixyKyspO3JldHVybiBzLnRvU3RyaW5nKCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUciwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEFyPWtyO2Z1bmN0aW9uIENyKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSJ1dGY4IiksYXQuaXNCdWZmZXIoZSk/RHIoZS50b1N0cmluZygiYmFzZTY0IikpOkRyKGF0LmZyb20oZSx0KS50b1N0cmluZygiYmFzZTY0IikpfWZ1bmN0aW9uIE9yKGUpe3JldHVybiBlPWUudG9TdHJpbmcoKSxBci5kZWZhdWx0KGUpLnJlcGxhY2UoL1wtL2csIisiKS5yZXBsYWNlKC9fL2csIi8iKX1mdW5jdGlvbiBEcihlKXtyZXR1cm4gZS5yZXBsYWNlKC89L2csIiIpLnJlcGxhY2UoL1wrL2csIi0iKS5yZXBsYWNlKC9cLy9nLCJfIil9dmFyIFByLElyPUNyO0lyLmVuY29kZT1DcixJci5kZWNvZGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9InV0ZjgiKSxhdC5mcm9tKE9yKGUpLCJiYXNlNjQiKS50b1N0cmluZyh0KX0sSXIudG9CYXNlNjQ9T3IsSXIuZnJvbUJhc2U2ND1EcixJci50b0J1ZmZlcj1mdW5jdGlvbihlKXtyZXR1cm4gYXQuZnJvbShPcihlKSwiYmFzZTY0Iil9LFRyLmRlZmF1bHQ9SXIsKFByPVJyKS5leHBvcnRzPVRyLmRlZmF1bHQsUHIuZXhwb3J0cy5kZWZhdWx0PVByLmV4cG9ydHM7dmFyIFVyPVJyLmV4cG9ydHMsTHI9e2V4cG9ydHM6e319OyFmdW5jdGlvbihlKXshZnVuY3Rpb24odCxuKXt2YXIgcj17fTshZnVuY3Rpb24oZSl7ZS5fX2VzTW9kdWxlPSEwLGUuZGlnZXN0TGVuZ3RoPTMyLGUuYmxvY2tTaXplPTY0O3ZhciB0PW5ldyBVaW50MzJBcnJheShbMTExNjM1MjQwOCwxODk5NDQ3NDQxLDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQwMjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5MzI1Mjk4XSk7ZnVuY3Rpb24gbihlLG4scixpLG8pe2Zvcih2YXIgcyxhLGMsdSxsLGQsaCxmLHAsZyx5LHYsbTtvPj02NDspe2ZvcihzPW5bMF0sYT1uWzFdLGM9blsyXSx1PW5bM10sbD1uWzRdLGQ9bls1XSxoPW5bNl0sZj1uWzddLGc9MDtnPDE2O2crKyl5PWkrNCpnLGVbZ109KDI1NSZyW3ldKTw8MjR8KDI1NSZyW3krMV0pPDwxNnwoMjU1JnJbeSsyXSk8PDh8MjU1JnJbeSszXTtmb3IoZz0xNjtnPDY0O2crKyl2PSgocD1lW2ctMl0pPj4+MTd8cDw8MTUpXihwPj4+MTl8cDw8MTMpXnA+Pj4xMCxtPSgocD1lW2ctMTVdKT4+Pjd8cDw8MjUpXihwPj4+MTh8cDw8MTQpXnA+Pj4zLGVbZ109KHYrZVtnLTddfDApKyhtK2VbZy0xNl18MCk7Zm9yKGc9MDtnPDY0O2crKyl2PSgoKGw+Pj42fGw8PDI2KV4obD4+PjExfGw8PDIxKV4obD4+PjI1fGw8PDcpKSsobCZkXn5sJmgpfDApKyhmKyh0W2ddK2VbZ118MCl8MCl8MCxtPSgocz4+PjJ8czw8MzApXihzPj4+MTN8czw8MTkpXihzPj4+MjJ8czw8MTApKSsocyZhXnMmY15hJmMpfDAsZj1oLGg9ZCxkPWwsbD11K3Z8MCx1PWMsYz1hLGE9cyxzPXYrbXwwO25bMF0rPXMsblsxXSs9YSxuWzJdKz1jLG5bM10rPXUsbls0XSs9bCxuWzVdKz1kLG5bNl0rPWgsbls3XSs9ZixpKz02NCxvLT02NH1yZXR1cm4gaX12YXIgcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLmRpZ2VzdExlbmd0aD1lLmRpZ2VzdExlbmd0aCx0aGlzLmJsb2NrU2l6ZT1lLmJsb2NrU2l6ZSx0aGlzLnN0YXRlPW5ldyBJbnQzMkFycmF5KDgpLHRoaXMudGVtcD1uZXcgSW50MzJBcnJheSg2NCksdGhpcy5idWZmZXI9bmV3IFVpbnQ4QXJyYXkoMTI4KSx0aGlzLmJ1ZmZlckxlbmd0aD0wLHRoaXMuYnl0ZXNIYXNoZWQ9MCx0aGlzLmZpbmlzaGVkPSExLHRoaXMucmVzZXQoKX1yZXR1cm4gdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGF0ZVswXT0xNzc5MDMzNzAzLHRoaXMuc3RhdGVbMV09MzE0NDEzNDI3Nyx0aGlzLnN0YXRlWzJdPTEwMTM5MDQyNDIsdGhpcy5zdGF0ZVszXT0yNzczNDgwNzYyLHRoaXMuc3RhdGVbNF09MTM1OTg5MzExOSx0aGlzLnN0YXRlWzVdPTI2MDA4MjI5MjQsdGhpcy5zdGF0ZVs2XT01Mjg3MzQ2MzUsdGhpcy5zdGF0ZVs3XT0xNTQxNDU5MjI1LHRoaXMuYnVmZmVyTGVuZ3RoPTAsdGhpcy5ieXRlc0hhc2hlZD0wLHRoaXMuZmluaXNoZWQ9ITEsdGhpc30sdC5wcm90b3R5cGUuY2xlYW49ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHRoaXMuYnVmZmVyLmxlbmd0aDtlKyspdGhpcy5idWZmZXJbZV09MDtmb3IoZT0wO2U8dGhpcy50ZW1wLmxlbmd0aDtlKyspdGhpcy50ZW1wW2VdPTA7dGhpcy5yZXNldCgpfSx0LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSx0KXtpZih2b2lkIDA9PT10JiYodD1lLmxlbmd0aCksdGhpcy5maW5pc2hlZCl0aHJvdyBuZXcgRXJyb3IoIlNIQTI1NjogY2FuJ3QgdXBkYXRlIGJlY2F1c2UgaGFzaCB3YXMgZmluaXNoZWQuIik7dmFyIHI9MDtpZih0aGlzLmJ5dGVzSGFzaGVkKz10LHRoaXMuYnVmZmVyTGVuZ3RoPjApe2Zvcig7dGhpcy5idWZmZXJMZW5ndGg8NjQmJnQ+MDspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJMZW5ndGgrK109ZVtyKytdLHQtLTs2ND09PXRoaXMuYnVmZmVyTGVuZ3RoJiYobih0aGlzLnRlbXAsdGhpcy5zdGF0ZSx0aGlzLmJ1ZmZlciwwLDY0KSx0aGlzLmJ1ZmZlckxlbmd0aD0wKX1mb3IodD49NjQmJihyPW4odGhpcy50ZW1wLHRoaXMuc3RhdGUsZSxyLHQpLHQlPTY0KTt0PjA7KXRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyTGVuZ3RoKytdPWVbcisrXSx0LS07cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbihlKXtpZighdGhpcy5maW5pc2hlZCl7dmFyIHQ9dGhpcy5ieXRlc0hhc2hlZCxyPXRoaXMuYnVmZmVyTGVuZ3RoLGk9dC81MzY4NzA5MTJ8MCxvPXQ8PDMscz10JTY0PDU2PzY0OjEyODt0aGlzLmJ1ZmZlcltyXT0xMjg7Zm9yKHZhciBhPXIrMTthPHMtODthKyspdGhpcy5idWZmZXJbYV09MDt0aGlzLmJ1ZmZlcltzLThdPWk+Pj4yNCYyNTUsdGhpcy5idWZmZXJbcy03XT1pPj4+MTYmMjU1LHRoaXMuYnVmZmVyW3MtNl09aT4+PjgmMjU1LHRoaXMuYnVmZmVyW3MtNV09aT4+PjAmMjU1LHRoaXMuYnVmZmVyW3MtNF09bz4+PjI0JjI1NSx0aGlzLmJ1ZmZlcltzLTNdPW8+Pj4xNiYyNTUsdGhpcy5idWZmZXJbcy0yXT1vPj4+OCYyNTUsdGhpcy5idWZmZXJbcy0xXT1vPj4+MCYyNTUsbih0aGlzLnRlbXAsdGhpcy5zdGF0ZSx0aGlzLmJ1ZmZlciwwLHMpLHRoaXMuZmluaXNoZWQ9ITB9Zm9yKGE9MDthPDg7YSsrKWVbNCphKzBdPXRoaXMuc3RhdGVbYV0+Pj4yNCYyNTUsZVs0KmErMV09dGhpcy5zdGF0ZVthXT4+PjE2JjI1NSxlWzQqYSsyXT10aGlzLnN0YXRlW2FdPj4+OCYyNTUsZVs0KmErM109dGhpcy5zdGF0ZVthXT4+PjAmMjU1O3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgVWludDhBcnJheSh0aGlzLmRpZ2VzdExlbmd0aCk7cmV0dXJuIHRoaXMuZmluaXNoKGUpLGV9LHQucHJvdG90eXBlLl9zYXZlU3RhdGU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDx0aGlzLnN0YXRlLmxlbmd0aDt0KyspZVt0XT10aGlzLnN0YXRlW3RdfSx0LnByb3RvdHlwZS5fcmVzdG9yZVN0YXRlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjx0aGlzLnN0YXRlLmxlbmd0aDtuKyspdGhpcy5zdGF0ZVtuXT1lW25dO3RoaXMuYnl0ZXNIYXNoZWQ9dCx0aGlzLmZpbmlzaGVkPSExLHRoaXMuYnVmZmVyTGVuZ3RoPTB9LHR9KCk7ZS5IYXNoPXI7dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuaW5uZXI9bmV3IHIsdGhpcy5vdXRlcj1uZXcgcix0aGlzLmJsb2NrU2l6ZT10aGlzLmlubmVyLmJsb2NrU2l6ZSx0aGlzLmRpZ2VzdExlbmd0aD10aGlzLmlubmVyLmRpZ2VzdExlbmd0aDt2YXIgdD1uZXcgVWludDhBcnJheSh0aGlzLmJsb2NrU2l6ZSk7aWYoZS5sZW5ndGg+dGhpcy5ibG9ja1NpemUpKG5ldyByKS51cGRhdGUoZSkuZmluaXNoKHQpLmNsZWFuKCk7ZWxzZSBmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl0W25dPWVbbl07Zm9yKG49MDtuPHQubGVuZ3RoO24rKyl0W25dXj01NDt0aGlzLmlubmVyLnVwZGF0ZSh0KTtmb3Iobj0wO248dC5sZW5ndGg7bisrKXRbbl1ePTEwNjt0aGlzLm91dGVyLnVwZGF0ZSh0KSx0aGlzLmlzdGF0ZT1uZXcgVWludDMyQXJyYXkoOCksdGhpcy5vc3RhdGU9bmV3IFVpbnQzMkFycmF5KDgpLHRoaXMuaW5uZXIuX3NhdmVTdGF0ZSh0aGlzLmlzdGF0ZSksdGhpcy5vdXRlci5fc2F2ZVN0YXRlKHRoaXMub3N0YXRlKTtmb3Iobj0wO248dC5sZW5ndGg7bisrKXRbbl09MH1yZXR1cm4gZS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbm5lci5fcmVzdG9yZVN0YXRlKHRoaXMuaXN0YXRlLHRoaXMuaW5uZXIuYmxvY2tTaXplKSx0aGlzLm91dGVyLl9yZXN0b3JlU3RhdGUodGhpcy5vc3RhdGUsdGhpcy5vdXRlci5ibG9ja1NpemUpLHRoaXN9LGUucHJvdG90eXBlLmNsZWFuPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx0aGlzLmlzdGF0ZS5sZW5ndGg7ZSsrKXRoaXMub3N0YXRlW2VdPXRoaXMuaXN0YXRlW2VdPTA7dGhpcy5pbm5lci5jbGVhbigpLHRoaXMub3V0ZXIuY2xlYW4oKX0sZS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmlubmVyLnVwZGF0ZShlKSx0aGlzfSxlLnByb3RvdHlwZS5maW5pc2g9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub3V0ZXIuZmluaXNoZWQ/dGhpcy5vdXRlci5maW5pc2goZSk6KHRoaXMuaW5uZXIuZmluaXNoKGUpLHRoaXMub3V0ZXIudXBkYXRlKGUsdGhpcy5kaWdlc3RMZW5ndGgpLmZpbmlzaChlKSksdGhpc30sZS5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IFVpbnQ4QXJyYXkodGhpcy5kaWdlc3RMZW5ndGgpO3JldHVybiB0aGlzLmZpbmlzaChlKSxlfSxlfSgpO2Z1bmN0aW9uIG8oZSl7dmFyIHQ9KG5ldyByKS51cGRhdGUoZSksbj10LmRpZ2VzdCgpO3JldHVybiB0LmNsZWFuKCksbn1mdW5jdGlvbiBzKGUsdCl7dmFyIG49bmV3IGkoZSkudXBkYXRlKHQpLHI9bi5kaWdlc3QoKTtyZXR1cm4gbi5jbGVhbigpLHJ9ZnVuY3Rpb24gYShlLHQsbixyKXt2YXIgaT1yWzBdO2lmKDA9PT1pKXRocm93IG5ldyBFcnJvcigiaGtkZjogY2Fubm90IGV4cGFuZCBtb3JlIik7dC5yZXNldCgpLGk+MSYmdC51cGRhdGUoZSksbiYmdC51cGRhdGUobiksdC51cGRhdGUociksdC5maW5pc2goZSksclswXSsrfWUuSE1BQz1pLGUuaGFzaD1vLGUuZGVmYXVsdD1vLGUuaG1hYz1zO3ZhciBjPW5ldyBVaW50OEFycmF5KGUuZGlnZXN0TGVuZ3RoKTtmdW5jdGlvbiB1KGUsdCxuLHIpe3ZvaWQgMD09PXQmJih0PWMpLHZvaWQgMD09PXImJihyPTMyKTtmb3IodmFyIG89bmV3IFVpbnQ4QXJyYXkoWzFdKSx1PXModCxlKSxsPW5ldyBpKHUpLGQ9bmV3IFVpbnQ4QXJyYXkobC5kaWdlc3RMZW5ndGgpLGg9ZC5sZW5ndGgsZj1uZXcgVWludDhBcnJheShyKSxwPTA7cDxyO3ArKyloPT09ZC5sZW5ndGgmJihhKGQsbCxuLG8pLGg9MCksZltwXT1kW2grK107cmV0dXJuIGwuY2xlYW4oKSxkLmZpbGwoMCksby5maWxsKDApLGZ9ZnVuY3Rpb24gbChlLHQsbixyKXtmb3IodmFyIG89bmV3IGkoZSkscz1vLmRpZ2VzdExlbmd0aCxhPW5ldyBVaW50OEFycmF5KDQpLGM9bmV3IFVpbnQ4QXJyYXkocyksdT1uZXcgVWludDhBcnJheShzKSxsPW5ldyBVaW50OEFycmF5KHIpLGQ9MDtkKnM8cjtkKyspe3ZhciBoPWQrMTthWzBdPWg+Pj4yNCYyNTUsYVsxXT1oPj4+MTYmMjU1LGFbMl09aD4+PjgmMjU1LGFbM109aD4+PjAmMjU1LG8ucmVzZXQoKSxvLnVwZGF0ZSh0KSxvLnVwZGF0ZShhKSxvLmZpbmlzaCh1KTtmb3IodmFyIGY9MDtmPHM7ZisrKWNbZl09dVtmXTtmb3IoZj0yO2Y8PW47ZisrKXtvLnJlc2V0KCksby51cGRhdGUodSkuZmluaXNoKHUpO2Zvcih2YXIgcD0wO3A8cztwKyspY1twXV49dVtwXX1mb3IoZj0wO2Y8cyYmZCpzK2Y8cjtmKyspbFtkKnMrZl09Y1tmXX1mb3IoZD0wO2Q8cztkKyspY1tkXT11W2RdPTA7Zm9yKGQ9MDtkPDQ7ZCsrKWFbZF09MDtyZXR1cm4gby5jbGVhbigpLGx9ZS5oa2RmPXUsZS5wYmtkZjI9bH0ocik7dmFyIGk9ci5kZWZhdWx0O2Zvcih2YXIgbyBpbiByKWlbb109cltvXTtlLmV4cG9ydHM9aX0oKX0oTHIpO3ZhciBIcj1TcihMci5leHBvcnRzKSxNcj1jcnlwdG87Y29uc3QgTnI9ZT0+ZSBpbnN0YW5jZW9mIENyeXB0b0tleSxqcj1uZXcgVGV4dEVuY29kZXIseHI9bmV3IFRleHREZWNvZGVyO2NvbnN0IHFyPWU9PntsZXQgdD1lO3QgaW5zdGFuY2VvZiBVaW50OEFycmF5JiYodD14ci5kZWNvZGUodCkpLHQ9dC5yZXBsYWNlKC8tL2csIisiKS5yZXBsYWNlKC9fL2csIi8iKS5yZXBsYWNlKC9ccy9nLCIiKTt0cnl7cmV0dXJuKGU9Pntjb25zdCB0PWF0b2IoZSksbj1uZXcgVWludDhBcnJheSh0Lmxlbmd0aCk7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspbltlXT10LmNoYXJDb2RlQXQoZSk7cmV0dXJuIG59KSh0KX1jYXRjaChlKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgaW5wdXQgdG8gYmUgZGVjb2RlZCBpcyBub3QgY29ycmVjdGx5IGVuY29kZWQuIil9fTtjbGFzcyBCciBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUpe3ZhciB0O3N1cGVyKGUpLHRoaXMuY29kZT0iRVJSX0pPU0VfR0VORVJJQyIsdGhpcy5uYW1lPXRoaXMuY29uc3RydWN0b3IubmFtZSxudWxsPT09KHQ9RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpfHx2b2lkIDA9PT10fHx0LmNhbGwoRXJyb3IsdGhpcyx0aGlzLmNvbnN0cnVjdG9yKX1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pPU0VfR0VORVJJQyJ9fWNsYXNzIEZyIGV4dGVuZHMgQnJ7Y29uc3RydWN0b3IoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJ1bnNwZWNpZmllZCIsbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06InVuc3BlY2lmaWVkIjtzdXBlcihlKSx0aGlzLmNvZGU9IkVSUl9KV1RfQ0xBSU1fVkFMSURBVElPTl9GQUlMRUQiLHRoaXMuY2xhaW09dCx0aGlzLnJlYXNvbj1ufXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldUX0NMQUlNX1ZBTElEQVRJT05fRkFJTEVEIn19Y2xhc3MgS3IgZXh0ZW5kcyBCcntjb25zdHJ1Y3RvcihlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06InVuc3BlY2lmaWVkIixuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToidW5zcGVjaWZpZWQiO3N1cGVyKGUpLHRoaXMuY29kZT0iRVJSX0pXVF9FWFBJUkVEIix0aGlzLmNsYWltPXQsdGhpcy5yZWFzb249bn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXVF9FWFBJUkVEIn19Y2xhc3MgSnIgZXh0ZW5kcyBCcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSk9TRV9BTEdfTk9UX0FMTE9XRUQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSk9TRV9BTEdfTk9UX0FMTE9XRUQifX1jbGFzcyBXciBleHRlbmRzIEJye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KT1NFX05PVF9TVVBQT1JURUQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSk9TRV9OT1RfU1VQUE9SVEVEIn19Y2xhc3MgenIgZXh0ZW5kcyBCcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldTX0lOVkFMSUQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldTX0lOVkFMSUQifX1jbGFzcyBWciBleHRlbmRzIEJye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV1RfSU5WQUxJRCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV1RfSU5WQUxJRCJ9fWNsYXNzIFlyIGV4dGVuZHMgQnJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXS1NfSU5WQUxJRCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV0tTX0lOVkFMSUQifX1jbGFzcyBHciBleHRlbmRzIEJye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV0tTX05PX01BVENISU5HX0tFWSIsdGhpcy5tZXNzYWdlPSJubyBhcHBsaWNhYmxlIGtleSBmb3VuZCBpbiB0aGUgSlNPTiBXZWIgS2V5IFNldCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV0tTX05PX01BVENISU5HX0tFWSJ9fWNsYXNzIFhyIGV4dGVuZHMgQnJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXS1NfTVVMVElQTEVfTUFUQ0hJTkdfS0VZUyIsdGhpcy5tZXNzYWdlPSJtdWx0aXBsZSBtYXRjaGluZyBrZXlzIGZvdW5kIGluIHRoZSBKU09OIFdlYiBLZXkgU2V0In1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXS1NfTVVMVElQTEVfTUFUQ0hJTkdfS0VZUyJ9fWNsYXNzICRyIGV4dGVuZHMgQnJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXU19TSUdOQVRVUkVfVkVSSUZJQ0FUSU9OX0ZBSUxFRCIsdGhpcy5tZXNzYWdlPSJzaWduYXR1cmUgdmVyaWZpY2F0aW9uIGZhaWxlZCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV1NfU0lHTkFUVVJFX1ZFUklGSUNBVElPTl9GQUlMRUQifX1mdW5jdGlvbiBacigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBXZWJTb2NrZXRQYWlyfWZ1bmN0aW9uIFFyKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiYWxnb3JpdGhtLm5hbWUiO3JldHVybiBuZXcgVHlwZUVycm9yKCJDcnlwdG9LZXkgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9wZXJhdGlvbiwgaXRzICIuY29uY2F0KHQsIiBtdXN0IGJlICIpLmNvbmNhdChlKSl9ZnVuY3Rpb24gZWkoZSx0KXtyZXR1cm4gZS5uYW1lPT09dH1mdW5jdGlvbiB0aShlKXtyZXR1cm4gcGFyc2VJbnQoZS5uYW1lLnNsaWNlKDQpLDEwKX1mdW5jdGlvbiBuaShlKXtzd2l0Y2goZSl7Y2FzZSJFUzI1NiI6cmV0dXJuIlAtMjU2IjtjYXNlIkVTMzg0IjpyZXR1cm4iUC0zODQiO2Nhc2UiRVM1MTIiOnJldHVybiJQLTUyMSI7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVucmVhY2hhYmxlIil9fWZ1bmN0aW9uIHJpKGUsdCl7aWYodC5sZW5ndGgmJiF0LnNvbWUoKHQ9PmUudXNhZ2VzLmluY2x1ZGVzKHQpKSkpe2xldCBlPSJDcnlwdG9LZXkgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9wZXJhdGlvbiwgaXRzIHVzYWdlcyBtdXN0IGluY2x1ZGUgIjtpZih0Lmxlbmd0aD4yKXtjb25zdCBuPXQucG9wKCk7ZSs9Im9uZSBvZiAiLmNvbmNhdCh0LmpvaW4oIiwgIiksIiwgb3IgIikuY29uY2F0KG4sIi4iKX1lbHNlIDI9PT10Lmxlbmd0aD9lKz0ib25lIG9mICIuY29uY2F0KHRbMF0sIiBvciAiKS5jb25jYXQodFsxXSwiLiIpOmUrPSIiLmNvbmNhdCh0WzBdLCIuIik7dGhyb3cgbmV3IFR5cGVFcnJvcihlKX19dmFyIGlpPWZ1bmN0aW9uKGUpe2xldCB0PSJLZXkgbXVzdCBiZSAiO2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KG4+MT9uLTE6MCksaT0xO2k8bjtpKyspcltpLTFdPWFyZ3VtZW50c1tpXTtpZihyLmxlbmd0aD4yKXtjb25zdCBlPXIucG9wKCk7dCs9Im9uZSBvZiB0eXBlICIuY29uY2F0KHIuam9pbigiLCAiKSwiLCBvciAiKS5jb25jYXQoZSwiLiIpfWVsc2UgMj09PXIubGVuZ3RoP3QrPSJvbmUgb2YgdHlwZSAiLmNvbmNhdChyWzBdLCIgb3IgIikuY29uY2F0KHJbMV0sIi4iKTp0Kz0ib2YgdHlwZSAiLmNvbmNhdChyWzBdLCIuIik7cmV0dXJuIG51bGw9PWU/dCs9IiBSZWNlaXZlZCAiLmNvbmNhdChlKToiZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5uYW1lP3QrPSIgUmVjZWl2ZWQgZnVuY3Rpb24gIi5jb25jYXQoZS5uYW1lKToib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPWUmJmUuY29uc3RydWN0b3ImJmUuY29uc3RydWN0b3IubmFtZSYmKHQrPSIgUmVjZWl2ZWQgYW4gaW5zdGFuY2Ugb2YgIi5jb25jYXQoZS5jb25zdHJ1Y3Rvci5uYW1lKSksdH0sb2k9ZT0+TnIoZSk7Y29uc3Qgc2k9WyJDcnlwdG9LZXkiXTtmdW5jdGlvbiBhaShlKXtpZigib2JqZWN0IiE9dHlwZW9mKHQ9ZSl8fG51bGw9PT10fHwiW29iamVjdCBPYmplY3RdIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSlyZXR1cm4hMTt2YXIgdDtpZihudWxsPT09T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpKXJldHVybiEwO2xldCBuPWU7Zm9yKDtudWxsIT09T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pOyluPU9iamVjdC5nZXRQcm90b3R5cGVPZihuKTtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09bn1jb25zdCBjaT1hc3luYyBlPT57dmFyIHQsbjtjb25zdHthbGdvcml0aG06cixrZXlVc2FnZXM6aX09ZnVuY3Rpb24oZSl7bGV0IHQsbjtzd2l0Y2goZS5rdHkpe2Nhc2Uib2N0Ijpzd2l0Y2goZS5hbGcpe2Nhc2UiSFMyNTYiOmNhc2UiSFMzODQiOmNhc2UiSFM1MTIiOnQ9e25hbWU6IkhNQUMiLGhhc2g6IlNIQS0iLmNvbmNhdChlLmFsZy5zbGljZSgtMykpfSxuPVsic2lnbiIsInZlcmlmeSJdO2JyZWFrO2Nhc2UiQTEyOENCQy1IUzI1NiI6Y2FzZSJBMTkyQ0JDLUhTMzg0IjpjYXNlIkEyNTZDQkMtSFM1MTIiOnRocm93IG5ldyBXcigiIi5jb25jYXQoZS5hbGcsIiBrZXlzIGNhbm5vdCBiZSBpbXBvcnRlZCBhcyBDcnlwdG9LZXkgaW5zdGFuY2VzIikpO2Nhc2UiQTEyOEdDTSI6Y2FzZSJBMTkyR0NNIjpjYXNlIkEyNTZHQ00iOmNhc2UiQTEyOEdDTUtXIjpjYXNlIkExOTJHQ01LVyI6Y2FzZSJBMjU2R0NNS1ciOnQ9e25hbWU6IkFFUy1HQ00ifSxuPVsiZW5jcnlwdCIsImRlY3J5cHQiXTticmVhaztjYXNlIkExMjhLVyI6Y2FzZSJBMTkyS1ciOmNhc2UiQTI1NktXIjp0PXtuYW1lOiJBRVMtS1cifSxuPVsid3JhcEtleSIsInVud3JhcEtleSJdO2JyZWFrO2Nhc2UiUEJFUzItSFMyNTYrQTEyOEtXIjpjYXNlIlBCRVMyLUhTMzg0K0ExOTJLVyI6Y2FzZSJQQkVTMi1IUzUxMitBMjU2S1ciOnQ9e25hbWU6IlBCS0RGMiJ9LG49WyJkZXJpdmVCaXRzIl07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgV3IoJ0ludmFsaWQgb3IgdW5zdXBwb3J0ZWQgSldLICJhbGciIChBbGdvcml0aG0pIFBhcmFtZXRlciB2YWx1ZScpfWJyZWFrO2Nhc2UiUlNBIjpzd2l0Y2goZS5hbGcpe2Nhc2UiUFMyNTYiOmNhc2UiUFMzODQiOmNhc2UiUFM1MTIiOnQ9e25hbWU6IlJTQS1QU1MiLGhhc2g6IlNIQS0iLmNvbmNhdChlLmFsZy5zbGljZSgtMykpfSxuPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiUlMyNTYiOmNhc2UiUlMzODQiOmNhc2UiUlM1MTIiOnQ9e25hbWU6IlJTQVNTQS1QS0NTMS12MV81IixoYXNoOiJTSEEtIi5jb25jYXQoZS5hbGcuc2xpY2UoLTMpKX0sbj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIlJTQS1PQUVQIjpjYXNlIlJTQS1PQUVQLTI1NiI6Y2FzZSJSU0EtT0FFUC0zODQiOmNhc2UiUlNBLU9BRVAtNTEyIjp0PXtuYW1lOiJSU0EtT0FFUCIsaGFzaDoiU0hBLSIuY29uY2F0KHBhcnNlSW50KGUuYWxnLnNsaWNlKC0zKSwxMCl8fDEpfSxuPWUuZD9bImRlY3J5cHQiLCJ1bndyYXBLZXkiXTpbImVuY3J5cHQiLCJ3cmFwS2V5Il07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgV3IoJ0ludmFsaWQgb3IgdW5zdXBwb3J0ZWQgSldLICJhbGciIChBbGdvcml0aG0pIFBhcmFtZXRlciB2YWx1ZScpfWJyZWFrO2Nhc2UiRUMiOnN3aXRjaChlLmFsZyl7Y2FzZSJFUzI1NiI6dD17bmFtZToiRUNEU0EiLG5hbWVkQ3VydmU6IlAtMjU2In0sbj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIkVTMzg0Ijp0PXtuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZToiUC0zODQifSxuPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiRVM1MTIiOnQ9e25hbWU6IkVDRFNBIixuYW1lZEN1cnZlOiJQLTUyMSJ9LG49ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJFQ0RILUVTIjpjYXNlIkVDREgtRVMrQTEyOEtXIjpjYXNlIkVDREgtRVMrQTE5MktXIjpjYXNlIkVDREgtRVMrQTI1NktXIjp0PXtuYW1lOiJFQ0RIIixuYW1lZEN1cnZlOmUuY3J2fSxuPWUuZD9bImRlcml2ZUJpdHMiXTpbXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBXcignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZSBacigpJiYiT0tQIjppZigiRWREU0EiIT09ZS5hbGcpdGhyb3cgbmV3IFdyKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIEpXSyAiYWxnIiAoQWxnb3JpdGhtKSBQYXJhbWV0ZXIgdmFsdWUnKTtpZigiRWQyNTUxOSIhPT1lLmNydil0aHJvdyBuZXcgV3IoJ0ludmFsaWQgb3IgdW5zdXBwb3J0ZWQgSldLICJjcnYiIChTdWJ0eXBlIG9mIEtleSBQYWlyKSBQYXJhbWV0ZXIgdmFsdWUnKTt0PXtuYW1lOiJOT0RFLUVEMjU1MTkiLG5hbWVkQ3VydmU6Ik5PREUtRUQyNTUxOSJ9LG49ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgV3IoJ0ludmFsaWQgb3IgdW5zdXBwb3J0ZWQgSldLICJrdHkiIChLZXkgVHlwZSkgUGFyYW1ldGVyIHZhbHVlJyl9cmV0dXJue2FsZ29yaXRobTp0LGtleVVzYWdlczpufX0oZSksbz1bcixudWxsIT09KHQ9ZS5leHQpJiZ2b2lkIDAhPT10JiZ0LG51bGwhPT0obj1lLmtleV9vcHMpJiZ2b2lkIDAhPT1uP246aV07aWYoIlBCS0RGMiI9PT1yLm5hbWUpcmV0dXJuIE1yLnN1YnRsZS5pbXBvcnRLZXkoInJhdyIscXIoZS5rKSwuLi5vKTtjb25zdCBzPXsuLi5lfTtyZXR1cm4gZGVsZXRlIHMuYWxnLE1yLnN1YnRsZS5pbXBvcnRLZXkoImp3ayIscywuLi5vKX07Y29uc3QgdWk9KGUsdCxuKT0+e2Uuc3RhcnRzV2l0aCgiSFMiKXx8ImRpciI9PT1lfHxlLnN0YXJ0c1dpdGgoIlBCRVMyIil8fC9eQVxkezN9KD86R0NNKT9LVyQvLnRlc3QoZSk/KGU9PntpZighKGUgaW5zdGFuY2VvZiBVaW50OEFycmF5KSl7aWYoIW9pKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoaWkoZSwuLi5zaSwiVWludDhBcnJheSIpKTtpZigic2VjcmV0IiE9PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKCIiLmNvbmNhdChzaS5qb2luKCIgb3IgIiksJyBpbnN0YW5jZXMgZm9yIHN5bW1ldHJpYyBhbGdvcml0aG1zIG11c3QgYmUgb2YgdHlwZSAic2VjcmV0IicpKX19KSh0KTooKGUsdCk9PntpZighb2koZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihpaShlLC4uLnNpKSk7aWYoInNlY3JldCI9PT1lLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiIi5jb25jYXQoc2kuam9pbigiIG9yICIpLCcgaW5zdGFuY2VzIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobXMgbXVzdCBub3QgYmUgb2YgdHlwZSAic2VjcmV0IicpKTtpZigic2lnbiI9PT10JiYicHVibGljIj09PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKCIiLmNvbmNhdChzaS5qb2luKCIgb3IgIiksJyBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtIHNpZ25pbmcgbXVzdCBiZSBvZiB0eXBlICJwcml2YXRlIicpKTtpZigiZGVjcnlwdCI9PT10JiYicHVibGljIj09PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKCIiLmNvbmNhdChzaS5qb2luKCIgb3IgIiksJyBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtIGRlY3J5cHRpb24gbXVzdCBiZSBvZiB0eXBlICJwcml2YXRlIicpKTtpZihlLmFsZ29yaXRobSYmInZlcmlmeSI9PT10JiYicHJpdmF0ZSI9PT1lLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiIi5jb25jYXQoc2kuam9pbigiIG9yICIpLCcgaW5zdGFuY2VzIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobSB2ZXJpZnlpbmcgbXVzdCBiZSBvZiB0eXBlICJwdWJsaWMiJykpO2lmKGUuYWxnb3JpdGhtJiYiZW5jcnlwdCI9PT10JiYicHJpdmF0ZSI9PT1lLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiIi5jb25jYXQoc2kuam9pbigiIG9yICIpLCcgaW5zdGFuY2VzIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobSBlbmNyeXB0aW9uIG11c3QgYmUgb2YgdHlwZSAicHVibGljIicpKX0pKHQsbil9O2Z1bmN0aW9uIGxpKGUsdCxuKXtpZihOcih0KSlyZXR1cm4gZnVuY3Rpb24oZSx0KXtzd2l0Y2godCl7Y2FzZSJIUzI1NiI6Y2FzZSJIUzM4NCI6Y2FzZSJIUzUxMiI6e2lmKCFlaShlLmFsZ29yaXRobSwiSE1BQyIpKXRocm93IFFyKCJITUFDIik7Y29uc3Qgbj1wYXJzZUludCh0LnNsaWNlKDIpLDEwKTtpZih0aShlLmFsZ29yaXRobS5oYXNoKSE9PW4pdGhyb3cgUXIoIlNIQS0iLmNvbmNhdChuKSwiYWxnb3JpdGhtLmhhc2giKTticmVha31jYXNlIlJTMjU2IjpjYXNlIlJTMzg0IjpjYXNlIlJTNTEyIjp7aWYoIWVpKGUuYWxnb3JpdGhtLCJSU0FTU0EtUEtDUzEtdjFfNSIpKXRocm93IFFyKCJSU0FTU0EtUEtDUzEtdjFfNSIpO2NvbnN0IG49cGFyc2VJbnQodC5zbGljZSgyKSwxMCk7aWYodGkoZS5hbGdvcml0aG0uaGFzaCkhPT1uKXRocm93IFFyKCJTSEEtIi5jb25jYXQobiksImFsZ29yaXRobS5oYXNoIik7YnJlYWt9Y2FzZSJQUzI1NiI6Y2FzZSJQUzM4NCI6Y2FzZSJQUzUxMiI6e2lmKCFlaShlLmFsZ29yaXRobSwiUlNBLVBTUyIpKXRocm93IFFyKCJSU0EtUFNTIik7Y29uc3Qgbj1wYXJzZUludCh0LnNsaWNlKDIpLDEwKTtpZih0aShlLmFsZ29yaXRobS5oYXNoKSE9PW4pdGhyb3cgUXIoIlNIQS0iLmNvbmNhdChuKSwiYWxnb3JpdGhtLmhhc2giKTticmVha31jYXNlIFpyKCkmJiJFZERTQSI6aWYoIWVpKGUuYWxnb3JpdGhtLCJOT0RFLUVEMjU1MTkiKSl0aHJvdyBRcigiTk9ERS1FRDI1NTE5Iik7YnJlYWs7Y2FzZSJFUzI1NiI6Y2FzZSJFUzM4NCI6Y2FzZSJFUzUxMiI6e2lmKCFlaShlLmFsZ29yaXRobSwiRUNEU0EiKSl0aHJvdyBRcigiRUNEU0EiKTtjb25zdCBuPW5pKHQpO2lmKGUuYWxnb3JpdGhtLm5hbWVkQ3VydmUhPT1uKXRocm93IFFyKG4sImFsZ29yaXRobS5uYW1lZEN1cnZlIik7YnJlYWt9ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJDcnlwdG9LZXkgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9wZXJhdGlvbiIpfWZvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KG4+Mj9uLTI6MCksaT0yO2k8bjtpKyspcltpLTJdPWFyZ3VtZW50c1tpXTtyaShlLHIpfSh0LGUsbiksdDtpZih0IGluc3RhbmNlb2YgVWludDhBcnJheSl7aWYoIWUuc3RhcnRzV2l0aCgiSFMiKSl0aHJvdyBuZXcgVHlwZUVycm9yKGlpKHQsLi4uc2kpKTtyZXR1cm4gTXIuc3VidGxlLmltcG9ydEtleSgicmF3Iix0LHtoYXNoOiJTSEEtIi5jb25jYXQoZS5zbGljZSgtMykpLG5hbWU6IkhNQUMifSwhMSxbbl0pfXRocm93IG5ldyBUeXBlRXJyb3IoaWkodCwuLi5zaSwiVWludDhBcnJheSIpKX1jb25zdCBkaT1hc3luYyhlLHQsbixyKT0+e2NvbnN0IGk9YXdhaXQgbGkoZSx0LCJ2ZXJpZnkiKTsoKGUsdCk9PntpZihlLnN0YXJ0c1dpdGgoIlJTIil8fGUuc3RhcnRzV2l0aCgiUFMiKSl7Y29uc3R7bW9kdWx1c0xlbmd0aDpufT10LmFsZ29yaXRobTtpZigibnVtYmVyIiE9dHlwZW9mIG58fG48MjA0OCl0aHJvdyBuZXcgVHlwZUVycm9yKCIiLmNvbmNhdChlLCIgcmVxdWlyZXMga2V5IG1vZHVsdXNMZW5ndGggdG8gYmUgMjA0OCBiaXRzIG9yIGxhcmdlciIpKX19KShlLGkpO2NvbnN0IG89ZnVuY3Rpb24oZSx0KXtjb25zdCBuPSJTSEEtIi5jb25jYXQoZS5zbGljZSgtMykpO3N3aXRjaChlKXtjYXNlIkhTMjU2IjpjYXNlIkhTMzg0IjpjYXNlIkhTNTEyIjpyZXR1cm57aGFzaDpuLG5hbWU6IkhNQUMifTtjYXNlIlBTMjU2IjpjYXNlIlBTMzg0IjpjYXNlIlBTNTEyIjpyZXR1cm57aGFzaDpuLG5hbWU6IlJTQS1QU1MiLHNhbHRMZW5ndGg6ZS5zbGljZSgtMyk+PjN9O2Nhc2UiUlMyNTYiOmNhc2UiUlMzODQiOmNhc2UiUlM1MTIiOnJldHVybntoYXNoOm4sbmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUifTtjYXNlIkVTMjU2IjpjYXNlIkVTMzg0IjpjYXNlIkVTNTEyIjpyZXR1cm57aGFzaDpuLG5hbWU6IkVDRFNBIixuYW1lZEN1cnZlOnQubmFtZWRDdXJ2ZX07Y2FzZSBacigpJiYiRWREU0EiOmNvbnN0e25hbWVkQ3VydmU6cn09dDtyZXR1cm57bmFtZTpyLG5hbWVkQ3VydmU6cn07ZGVmYXVsdDp0aHJvdyBuZXcgV3IoImFsZyAiLmNvbmNhdChlLCIgaXMgbm90IHN1cHBvcnRlZCBlaXRoZXIgYnkgSk9TRSBvciB5b3VyIGphdmFzY3JpcHQgcnVudGltZSIpKX19KGUsaS5hbGdvcml0aG0pO3RyeXtyZXR1cm4gYXdhaXQgTXIuc3VidGxlLnZlcmlmeShvLGksbixyKX1jYXRjaChlKXtyZXR1cm4hMX19O2FzeW5jIGZ1bmN0aW9uIGhpKGUsdCxuKXt2YXIgcjtpZighYWkoZSkpdGhyb3cgbmV3IHpyKCJGbGF0dGVuZWQgSldTIG11c3QgYmUgYW4gb2JqZWN0Iik7aWYodm9pZCAwPT09ZS5wcm90ZWN0ZWQmJnZvaWQgMD09PWUuaGVhZGVyKXRocm93IG5ldyB6cignRmxhdHRlbmVkIEpXUyBtdXN0IGhhdmUgZWl0aGVyIG9mIHRoZSAicHJvdGVjdGVkIiBvciAiaGVhZGVyIiBtZW1iZXJzJyk7aWYodm9pZCAwIT09ZS5wcm90ZWN0ZWQmJiJzdHJpbmciIT10eXBlb2YgZS5wcm90ZWN0ZWQpdGhyb3cgbmV3IHpyKCJKV1MgUHJvdGVjdGVkIEhlYWRlciBpbmNvcnJlY3QgdHlwZSIpO2lmKHZvaWQgMD09PWUucGF5bG9hZCl0aHJvdyBuZXcgenIoIkpXUyBQYXlsb2FkIG1pc3NpbmciKTtpZigic3RyaW5nIiE9dHlwZW9mIGUuc2lnbmF0dXJlKXRocm93IG5ldyB6cigiSldTIFNpZ25hdHVyZSBtaXNzaW5nIG9yIGluY29ycmVjdCB0eXBlIik7aWYodm9pZCAwIT09ZS5oZWFkZXImJiFhaShlLmhlYWRlcikpdGhyb3cgbmV3IHpyKCJKV1MgVW5wcm90ZWN0ZWQgSGVhZGVyIGluY29ycmVjdCB0eXBlIik7bGV0IGk9e307aWYoZS5wcm90ZWN0ZWQpe2NvbnN0IHQ9cXIoZS5wcm90ZWN0ZWQpO3RyeXtpPUpTT04ucGFyc2UoeHIuZGVjb2RlKHQpKX1jYXRjaChlKXt0aHJvdyBuZXcgenIoIkpXUyBQcm90ZWN0ZWQgSGVhZGVyIGlzIGludmFsaWQiKX19aWYoIWZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07Y29uc3Qgcj10LmZpbHRlcihCb29sZWFuKTtpZigwPT09ci5sZW5ndGh8fDE9PT1yLmxlbmd0aClyZXR1cm4hMDtsZXQgaTtmb3IoY29uc3QgZSBvZiByKXtjb25zdCB0PU9iamVjdC5rZXlzKGUpO2lmKGkmJjAhPT1pLnNpemUpZm9yKGNvbnN0IGUgb2YgdCl7aWYoaS5oYXMoZSkpcmV0dXJuITE7aS5hZGQoZSl9ZWxzZSBpPW5ldyBTZXQodCl9cmV0dXJuITB9KGksZS5oZWFkZXIpKXRocm93IG5ldyB6cigiSldTIFByb3RlY3RlZCBhbmQgSldTIFVucHJvdGVjdGVkIEhlYWRlciBQYXJhbWV0ZXIgbmFtZXMgbXVzdCBiZSBkaXNqb2ludCIpO2NvbnN0IG89ey4uLmksLi4uZS5oZWFkZXJ9LHM9ZnVuY3Rpb24oZSx0LG4scixpKXtpZih2b2lkIDAhPT1pLmNyaXQmJnZvaWQgMD09PXIuY3JpdCl0aHJvdyBuZXcgZSgnImNyaXQiIChDcml0aWNhbCkgSGVhZGVyIFBhcmFtZXRlciBNVVNUIGJlIGludGVncml0eSBwcm90ZWN0ZWQnKTtpZighcnx8dm9pZCAwPT09ci5jcml0KXJldHVybiBuZXcgU2V0O2lmKCFBcnJheS5pc0FycmF5KHIuY3JpdCl8fDA9PT1yLmNyaXQubGVuZ3RofHxyLmNyaXQuc29tZSgoZT0+InN0cmluZyIhPXR5cGVvZiBlfHwwPT09ZS5sZW5ndGgpKSl0aHJvdyBuZXcgZSgnImNyaXQiIChDcml0aWNhbCkgSGVhZGVyIFBhcmFtZXRlciBNVVNUIGJlIGFuIGFycmF5IG9mIG5vbi1lbXB0eSBzdHJpbmdzIHdoZW4gcHJlc2VudCcpO2xldCBvO289dm9pZCAwIT09bj9uZXcgTWFwKFsuLi5PYmplY3QuZW50cmllcyhuKSwuLi50LmVudHJpZXMoKV0pOnQ7Zm9yKGNvbnN0IHQgb2Ygci5jcml0KXtpZighby5oYXModCkpdGhyb3cgbmV3IFdyKCdFeHRlbnNpb24gSGVhZGVyIFBhcmFtZXRlciAiJy5jb25jYXQodCwnIiBpcyBub3QgcmVjb2duaXplZCcpKTtpZih2b2lkIDA9PT1pW3RdKXRocm93IG5ldyBlKCdFeHRlbnNpb24gSGVhZGVyIFBhcmFtZXRlciAiJy5jb25jYXQodCwnIiBpcyBtaXNzaW5nJykpO2lmKG8uZ2V0KHQpJiZ2b2lkIDA9PT1yW3RdKXRocm93IG5ldyBlKCdFeHRlbnNpb24gSGVhZGVyIFBhcmFtZXRlciAiJy5jb25jYXQodCwnIiBNVVNUIGJlIGludGVncml0eSBwcm90ZWN0ZWQnKSl9cmV0dXJuIG5ldyBTZXQoci5jcml0KX0oenIsbmV3IE1hcChbWyJiNjQiLCEwXV0pLG51bGw9PW4/dm9pZCAwOm4uY3JpdCxpLG8pO2xldCBhPSEwO2lmKHMuaGFzKCJiNjQiKSYmKGE9aS5iNjQsImJvb2xlYW4iIT10eXBlb2YgYSkpdGhyb3cgbmV3IHpyKCdUaGUgImI2NCIgKGJhc2U2NHVybC1lbmNvZGUgcGF5bG9hZCkgSGVhZGVyIFBhcmFtZXRlciBtdXN0IGJlIGEgYm9vbGVhbicpO2NvbnN0e2FsZzpjfT1vO2lmKCJzdHJpbmciIT10eXBlb2YgY3x8IWMpdGhyb3cgbmV3IHpyKCdKV1MgImFsZyIgKEFsZ29yaXRobSkgSGVhZGVyIFBhcmFtZXRlciBtaXNzaW5nIG9yIGludmFsaWQnKTtjb25zdCB1PW4mJigoZSx0KT0+e2lmKHZvaWQgMCE9PXQmJighQXJyYXkuaXNBcnJheSh0KXx8dC5zb21lKChlPT4ic3RyaW5nIiE9dHlwZW9mIGUpKSkpdGhyb3cgbmV3IFR5cGVFcnJvcignIicuY29uY2F0KGUsJyIgb3B0aW9uIG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncycpKTtpZih0KXJldHVybiBuZXcgU2V0KHQpfSkoImFsZ29yaXRobXMiLG4uYWxnb3JpdGhtcyk7aWYodSYmIXUuaGFzKGMpKXRocm93IG5ldyBKcignImFsZyIgKEFsZ29yaXRobSkgSGVhZGVyIFBhcmFtZXRlciBub3QgYWxsb3dlZCcpO2lmKGEpe2lmKCJzdHJpbmciIT10eXBlb2YgZS5wYXlsb2FkKXRocm93IG5ldyB6cigiSldTIFBheWxvYWQgbXVzdCBiZSBhIHN0cmluZyIpfWVsc2UgaWYoInN0cmluZyIhPXR5cGVvZiBlLnBheWxvYWQmJiEoZS5wYXlsb2FkIGluc3RhbmNlb2YgVWludDhBcnJheSkpdGhyb3cgbmV3IHpyKCJKV1MgUGF5bG9hZCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFuIFVpbnQ4QXJyYXkgaW5zdGFuY2UiKTtsZXQgbD0hMTsiZnVuY3Rpb24iPT10eXBlb2YgdCYmKHQ9YXdhaXQgdChpLGUpLGw9ITApLHVpKGMsdCwidmVyaWZ5Iik7Y29uc3QgZD1mdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXRbbl09YXJndW1lbnRzW25dO2NvbnN0IHI9dC5yZWR1Y2UoKChlLHQpPT57bGV0e2xlbmd0aDpufT10O3JldHVybiBlK259KSwwKSxpPW5ldyBVaW50OEFycmF5KHIpO2xldCBvPTA7cmV0dXJuIHQuZm9yRWFjaCgoZT0+e2kuc2V0KGUsbyksbys9ZS5sZW5ndGh9KSksaX0oanIuZW5jb2RlKG51bGwhPT0ocj1lLnByb3RlY3RlZCkmJnZvaWQgMCE9PXI/cjoiIiksanIuZW5jb2RlKCIuIiksInN0cmluZyI9PXR5cGVvZiBlLnBheWxvYWQ/anIuZW5jb2RlKGUucGF5bG9hZCk6ZS5wYXlsb2FkKSxoPXFyKGUuc2lnbmF0dXJlKTtpZighYXdhaXQgZGkoYyx0LGgsZCkpdGhyb3cgbmV3ICRyO2xldCBmO2Y9YT9xcihlLnBheWxvYWQpOiJzdHJpbmciPT10eXBlb2YgZS5wYXlsb2FkP2pyLmVuY29kZShlLnBheWxvYWQpOmUucGF5bG9hZDtjb25zdCBwPXtwYXlsb2FkOmZ9O3JldHVybiB2b2lkIDAhPT1lLnByb3RlY3RlZCYmKHAucHJvdGVjdGVkSGVhZGVyPWkpLHZvaWQgMCE9PWUuaGVhZGVyJiYocC51bnByb3RlY3RlZEhlYWRlcj1lLmhlYWRlciksbD97Li4ucCxrZXk6dH06cH12YXIgZmk9ZT0+TWF0aC5mbG9vcihlLmdldFRpbWUoKS8xZTMpO2NvbnN0IHBpPTg2NDAwLGdpPS9eKFxkK3xcZCtcLlxkKykgPyhzZWNvbmRzP3xzZWNzP3xzfG1pbnV0ZXM/fG1pbnM/fG18aG91cnM/fGhycz98aHxkYXlzP3xkfHdlZWtzP3x3fHllYXJzP3x5cnM/fHkpJC9pO3ZhciB5aT1lPT57Y29uc3QgdD1naS5leGVjKGUpO2lmKCF0KXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgdGltZSBwZXJpb2QgZm9ybWF0Iik7Y29uc3Qgbj1wYXJzZUZsb2F0KHRbMV0pO3N3aXRjaCh0WzJdLnRvTG93ZXJDYXNlKCkpe2Nhc2Uic2VjIjpjYXNlInNlY3MiOmNhc2Uic2Vjb25kIjpjYXNlInNlY29uZHMiOmNhc2UicyI6cmV0dXJuIE1hdGgucm91bmQobik7Y2FzZSJtaW51dGUiOmNhc2UibWludXRlcyI6Y2FzZSJtaW4iOmNhc2UibWlucyI6Y2FzZSJtIjpyZXR1cm4gTWF0aC5yb3VuZCg2MCpuKTtjYXNlImhvdXIiOmNhc2UiaG91cnMiOmNhc2UiaHIiOmNhc2UiaHJzIjpjYXNlImgiOnJldHVybiBNYXRoLnJvdW5kKDM2MDAqbik7Y2FzZSJkYXkiOmNhc2UiZGF5cyI6Y2FzZSJkIjpyZXR1cm4gTWF0aC5yb3VuZChuKnBpKTtjYXNlIndlZWsiOmNhc2Uid2Vla3MiOmNhc2UidyI6cmV0dXJuIE1hdGgucm91bmQoNjA0ODAwKm4pO2RlZmF1bHQ6cmV0dXJuIE1hdGgucm91bmQoMzE1NTc2MDAqbil9fTtjb25zdCB2aT1lPT5lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXmFwcGxpY2F0aW9uXC8vLCIiKSxtaT0oZSx0KT0+InN0cmluZyI9PXR5cGVvZiBlP3QuaW5jbHVkZXMoZSk6ISFBcnJheS5pc0FycmF5KGUpJiZ0LnNvbWUoU2V0LnByb3RvdHlwZS5oYXMuYmluZChuZXcgU2V0KGUpKSk7YXN5bmMgZnVuY3Rpb24gd2koZSx0LG4pe3ZhciByO2NvbnN0IGk9YXdhaXQgYXN5bmMgZnVuY3Rpb24oZSx0LG4pe2lmKGUgaW5zdGFuY2VvZiBVaW50OEFycmF5JiYoZT14ci5kZWNvZGUoZSkpLCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgenIoIkNvbXBhY3QgSldTIG11c3QgYmUgYSBzdHJpbmcgb3IgVWludDhBcnJheSIpO2NvbnN0ezA6ciwxOmksMjpvLGxlbmd0aDpzfT1lLnNwbGl0KCIuIik7aWYoMyE9PXMpdGhyb3cgbmV3IHpyKCJJbnZhbGlkIENvbXBhY3QgSldTIik7Y29uc3QgYT1hd2FpdCBoaSh7cGF5bG9hZDppLHByb3RlY3RlZDpyLHNpZ25hdHVyZTpvfSx0LG4pLGM9e3BheWxvYWQ6YS5wYXlsb2FkLHByb3RlY3RlZEhlYWRlcjphLnByb3RlY3RlZEhlYWRlcn07cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/ey4uLmMsa2V5OmEua2V5fTpjfShlLHQsbik7aWYoKG51bGw9PT0ocj1pLnByb3RlY3RlZEhlYWRlci5jcml0KXx8dm9pZCAwPT09cj92b2lkIDA6ci5pbmNsdWRlcygiYjY0IikpJiYhMT09PWkucHJvdGVjdGVkSGVhZGVyLmI2NCl0aHJvdyBuZXcgVnIoIkpXVHMgTVVTVCBOT1QgdXNlIHVuZW5jb2RlZCBwYXlsb2FkIik7Y29uc3Qgbz1mdW5jdGlvbihlLHQpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fTtjb25zdHt0eXA6cn09bjtpZihyJiYoInN0cmluZyIhPXR5cGVvZiBlLnR5cHx8dmkoZS50eXApIT09dmkocikpKXRocm93IG5ldyBGcigndW5leHBlY3RlZCAidHlwIiBKV1QgaGVhZGVyIHZhbHVlJywidHlwIiwiY2hlY2tfZmFpbGVkIik7bGV0IGk7dHJ5e2k9SlNPTi5wYXJzZSh4ci5kZWNvZGUodCkpfWNhdGNoKGUpe31pZighYWkoaSkpdGhyb3cgbmV3IFZyKCJKV1QgQ2xhaW1zIFNldCBtdXN0IGJlIGEgdG9wLWxldmVsIEpTT04gb2JqZWN0Iik7Y29uc3R7aXNzdWVyOm99PW47aWYobyYmIShBcnJheS5pc0FycmF5KG8pP286W29dKS5pbmNsdWRlcyhpLmlzcykpdGhyb3cgbmV3IEZyKCd1bmV4cGVjdGVkICJpc3MiIGNsYWltIHZhbHVlJywiaXNzIiwiY2hlY2tfZmFpbGVkIik7Y29uc3R7c3ViamVjdDpzfT1uO2lmKHMmJmkuc3ViIT09cyl0aHJvdyBuZXcgRnIoJ3VuZXhwZWN0ZWQgInN1YiIgY2xhaW0gdmFsdWUnLCJzdWIiLCJjaGVja19mYWlsZWQiKTtjb25zdHthdWRpZW5jZTphfT1uO2lmKGEmJiFtaShpLmF1ZCwic3RyaW5nIj09dHlwZW9mIGE/W2FdOmEpKXRocm93IG5ldyBGcigndW5leHBlY3RlZCAiYXVkIiBjbGFpbSB2YWx1ZScsImF1ZCIsImNoZWNrX2ZhaWxlZCIpO2xldCBjO3N3aXRjaCh0eXBlb2Ygbi5jbG9ja1RvbGVyYW5jZSl7Y2FzZSJzdHJpbmciOmM9eWkobi5jbG9ja1RvbGVyYW5jZSk7YnJlYWs7Y2FzZSJudW1iZXIiOmM9bi5jbG9ja1RvbGVyYW5jZTticmVhaztjYXNlInVuZGVmaW5lZCI6Yz0wO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBjbG9ja1RvbGVyYW5jZSBvcHRpb24gdHlwZSIpfWNvbnN0e2N1cnJlbnREYXRlOnV9PW4sbD1maSh1fHxuZXcgRGF0ZSk7aWYoKHZvaWQgMCE9PWkuaWF0fHxuLm1heFRva2VuQWdlKSYmIm51bWJlciIhPXR5cGVvZiBpLmlhdCl0aHJvdyBuZXcgRnIoJyJpYXQiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJpYXQiLCJpbnZhbGlkIik7aWYodm9pZCAwIT09aS5uYmYpe2lmKCJudW1iZXIiIT10eXBlb2YgaS5uYmYpdGhyb3cgbmV3IEZyKCcibmJmIiBjbGFpbSBtdXN0IGJlIGEgbnVtYmVyJywibmJmIiwiaW52YWxpZCIpO2lmKGkubmJmPmwrYyl0aHJvdyBuZXcgRnIoJyJuYmYiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQnLCJuYmYiLCJjaGVja19mYWlsZWQiKX1pZih2b2lkIDAhPT1pLmV4cCl7aWYoIm51bWJlciIhPXR5cGVvZiBpLmV4cCl0aHJvdyBuZXcgRnIoJyJleHAiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJleHAiLCJpbnZhbGlkIik7aWYoaS5leHA8PWwtYyl0aHJvdyBuZXcgS3IoJyJleHAiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQnLCJleHAiLCJjaGVja19mYWlsZWQiKX1pZihuLm1heFRva2VuQWdlKXtjb25zdCBlPWwtaS5pYXQ7aWYoZS1jPigibnVtYmVyIj09dHlwZW9mIG4ubWF4VG9rZW5BZ2U/bi5tYXhUb2tlbkFnZTp5aShuLm1heFRva2VuQWdlKSkpdGhyb3cgbmV3IEtyKCciaWF0IiBjbGFpbSB0aW1lc3RhbXAgY2hlY2sgZmFpbGVkICh0b28gZmFyIGluIHRoZSBwYXN0KScsImlhdCIsImNoZWNrX2ZhaWxlZCIpO2lmKGU8MC1jKXRocm93IG5ldyBGcignImlhdCIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCAoaXQgc2hvdWxkIGJlIGluIHRoZSBwYXN0KScsImlhdCIsImNoZWNrX2ZhaWxlZCIpfXJldHVybiBpfShpLnByb3RlY3RlZEhlYWRlcixpLnBheWxvYWQsbikscz17cGF5bG9hZDpvLHByb3RlY3RlZEhlYWRlcjppLnByb3RlY3RlZEhlYWRlcn07cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/ey4uLnMsa2V5Omkua2V5fTpzfWZ1bmN0aW9uIGJpKGUpe3JldHVybiBhaShlKX1jbGFzcyBfaXtjb25zdHJ1Y3RvcihlKXtpZih0aGlzLl9jYWNoZWQ9bmV3IFdlYWtNYXAsIWZ1bmN0aW9uKGUpe3JldHVybiBlJiYib2JqZWN0Ij09dHlwZW9mIGUmJkFycmF5LmlzQXJyYXkoZS5rZXlzKSYmZS5rZXlzLmV2ZXJ5KGJpKX0oZSkpdGhyb3cgbmV3IFlyKCJKU09OIFdlYiBLZXkgU2V0IG1hbGZvcm1lZCIpO3ZhciB0O3RoaXMuX2p3a3M9KHQ9ZSwiZnVuY3Rpb24iPT10eXBlb2Ygc3RydWN0dXJlZENsb25lP3N0cnVjdHVyZWRDbG9uZSh0KTpKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQpKSl9YXN5bmMgZ2V0S2V5KGUsdCl7Y29uc3R7YWxnOm4sa2lkOnJ9PXsuLi5lLC4uLnQuaGVhZGVyfSxpPWZ1bmN0aW9uKGUpe3N3aXRjaCgic3RyaW5nIj09dHlwZW9mIGUmJmUuc2xpY2UoMCwyKSl7Y2FzZSJSUyI6Y2FzZSJQUyI6cmV0dXJuIlJTQSI7Y2FzZSJFUyI6cmV0dXJuIkVDIjtjYXNlIkVkIjpyZXR1cm4iT0tQIjtkZWZhdWx0OnRocm93IG5ldyBXcignVW5zdXBwb3J0ZWQgImFsZyIgdmFsdWUgZm9yIGEgSlNPTiBXZWIgS2V5IFNldCcpfX0obiksbz10aGlzLl9qd2tzLmtleXMuZmlsdGVyKChlPT57bGV0IHQ9aT09PWUua3R5O2lmKHQmJiJzdHJpbmciPT10eXBlb2YgciYmKHQ9cj09PWUua2lkKSx0JiYic3RyaW5nIj09dHlwZW9mIGUuYWxnJiYodD1uPT09ZS5hbGcpLHQmJiJzdHJpbmciPT10eXBlb2YgZS51c2UmJih0PSJzaWciPT09ZS51c2UpLHQmJkFycmF5LmlzQXJyYXkoZS5rZXlfb3BzKSYmKHQ9ZS5rZXlfb3BzLmluY2x1ZGVzKCJ2ZXJpZnkiKSksdCYmIkVkRFNBIj09PW4mJih0PSJFZDI1NTE5Ij09PWUuY3J2fHwiRWQ0NDgiPT09ZS5jcnYpLHQpc3dpdGNoKG4pe2Nhc2UiRVMyNTYiOnQ9IlAtMjU2Ij09PWUuY3J2O2JyZWFrO2Nhc2UiRVMyNTZLIjp0PSJzZWNwMjU2azEiPT09ZS5jcnY7YnJlYWs7Y2FzZSJFUzM4NCI6dD0iUC0zODQiPT09ZS5jcnY7YnJlYWs7Y2FzZSJFUzUxMiI6dD0iUC01MjEiPT09ZS5jcnZ9cmV0dXJuIHR9KSksezA6cyxsZW5ndGg6YX09bztpZigwPT09YSl0aHJvdyBuZXcgR3I7aWYoMSE9PWEpdGhyb3cgbmV3IFhyO2NvbnN0IGM9dGhpcy5fY2FjaGVkLmdldChzKXx8dGhpcy5fY2FjaGVkLnNldChzLHt9KS5nZXQocyk7aWYodm9pZCAwPT09Y1tuXSl7Y29uc3QgZT1hd2FpdCBhc3luYyBmdW5jdGlvbihlLHQsbil7aWYoIWFpKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkpXSyBtdXN0IGJlIGFuIG9iamVjdCIpO2lmKHR8fCh0PWUuYWxnKSwic3RyaW5nIiE9dHlwZW9mIHR8fCF0KXRocm93IG5ldyBUeXBlRXJyb3IoJyJhbGciIGFyZ3VtZW50IGlzIHJlcXVpcmVkIHdoZW4gImp3ay5hbGciIGlzIG5vdCBwcmVzZW50Jyk7c3dpdGNoKGUua3R5KXtjYXNlIm9jdCI6aWYoInN0cmluZyIhPXR5cGVvZiBlLmt8fCFlLmspdGhyb3cgbmV3IFR5cGVFcnJvcignbWlzc2luZyAiayIgKEtleSBWYWx1ZSkgUGFyYW1ldGVyIHZhbHVlJyk7cmV0dXJuIG51bGwhPW58fChuPSEwIT09ZS5leHQpLG4/Y2koey4uLmUsYWxnOnQsZXh0OiExfSk6cXIoZS5rKTtjYXNlIlJTQSI6aWYodm9pZCAwIT09ZS5vdGgpdGhyb3cgbmV3IFdyKCdSU0EgSldLICJvdGgiIChPdGhlciBQcmltZXMgSW5mbykgUGFyYW1ldGVyIHZhbHVlIGlzIG5vdCBzdXBwb3J0ZWQnKTtjYXNlIkVDIjpjYXNlIk9LUCI6cmV0dXJuIGNpKHsuLi5lLGFsZzp0fSk7ZGVmYXVsdDp0aHJvdyBuZXcgV3IoJ1Vuc3VwcG9ydGVkICJrdHkiIChLZXkgVHlwZSkgUGFyYW1ldGVyIHZhbHVlJyl9fSh7Li4ucyxleHQ6ITB9LG4pO2lmKGUgaW5zdGFuY2VvZiBVaW50OEFycmF5fHwicHVibGljIiE9PWUudHlwZSl0aHJvdyBuZXcgWXIoIkpTT04gV2ViIEtleSBTZXQgbWVtYmVycyBtdXN0IGJlIHB1YmxpYyBrZXlzIik7Y1tuXT1lfXJldHVybiBjW25dfX12YXIgU2k9e2V4cG9ydHM6e319LEVpPXtleHBvcnRzOnt9fSxSaT1Fcih6dCk7IWZ1bmN0aW9uKGUsdCl7dmFyIG49Umkscj1uLkJ1ZmZlcjtmdW5jdGlvbiBpKGUsdCl7Zm9yKHZhciBuIGluIGUpdFtuXT1lW25dfWZ1bmN0aW9uIG8oZSx0LG4pe3JldHVybiByKGUsdCxuKX1yLmZyb20mJnIuYWxsb2MmJnIuYWxsb2NVbnNhZmUmJnIuYWxsb2NVbnNhZmVTbG93P2UuZXhwb3J0cz1uOihpKG4sdCksdC5CdWZmZXI9byksby5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShyLnByb3RvdHlwZSksaShyLG8pLG8uZnJvbT1mdW5jdGlvbihlLHQsbil7aWYoIm51bWJlciI9PXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIHIoZSx0LG4pfSxvLmFsbG9jPWZ1bmN0aW9uKGUsdCxuKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3ZhciBpPXIoZSk7cmV0dXJuIHZvaWQgMCE9PXQ/InN0cmluZyI9PXR5cGVvZiBuP2kuZmlsbCh0LG4pOmkuZmlsbCh0KTppLmZpbGwoMCksaX0sby5hbGxvY1Vuc2FmZT1mdW5jdGlvbihlKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiByKGUpfSxvLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihlKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBuLlNsb3dCdWZmZXIoZSl9fShFaSxFaS5leHBvcnRzKTt2YXIgVGk9NjU1MzYsa2k9NDI5NDk2NzI5NTt2YXIgQWk9RWkuZXhwb3J0cy5CdWZmZXIsQ2k9X3IuY3J5cHRvfHxfci5tc0NyeXB0bztDaSYmQ2kuZ2V0UmFuZG9tVmFsdWVzP1NpLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZihlPmtpKXRocm93IG5ldyBSYW5nZUVycm9yKCJyZXF1ZXN0ZWQgdG9vIG1hbnkgcmFuZG9tIGJ5dGVzIik7dmFyIG49QWkuYWxsb2NVbnNhZmUoZSk7aWYoZT4wKWlmKGU+VGkpZm9yKHZhciByPTA7cjxlO3IrPVRpKUNpLmdldFJhbmRvbVZhbHVlcyhuLnNsaWNlKHIscitUaSkpO2Vsc2UgQ2kuZ2V0UmFuZG9tVmFsdWVzKG4pO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0KXJldHVybiBRLm5leHRUaWNrKChmdW5jdGlvbigpe3QobnVsbCxuKX0pKTtyZXR1cm4gbn06U2kuZXhwb3J0cz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiU2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3Nlci5cblVzZSBDaHJvbWUsIEZpcmVmb3ggb3IgSW50ZXJuZXQgRXhwbG9yZXIgMTEiKX07dmFyIE9pPVNpLmV4cG9ydHM7Y2xhc3MgRGl7YmFzZTY0VVJMRW5jb2RlKGUpe3JldHVybiBVci5lbmNvZGUoZSkucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKS5yZXBsYWNlKC89L2csIiIpfWJhc2U2NFVSTERlY29kZShlKXtyZXR1cm4gVXIuZGVjb2RlKGUpLnRvU3RyaW5nKCl9aGFzaFNoYTI1NihlKXtyZXR1cm4gYXQuZnJvbShIcigobmV3IFRleHRFbmNvZGVyKS5lbmNvZGUoZSkpKX1nZW5lcmF0ZVJhbmRvbUJ5dGVzKGUpe3JldHVybiBPaShlKX12ZXJpZnlKd3QoZSx0LG4scixpLG8scyxhKXtjb25zdCB1PXthbGdvcml0aG1zOm4sYXVkaWVuY2U6cixjbG9ja1RvbGVyYW5jZTpzLHN1YmplY3Q6b307cmV0dXJuKG51bGw9PWF8fGEpJiYodS5pc3N1ZXI9aSksd2koZSwobD17a2V5czpbdF19LF9pLnByb3RvdHlwZS5nZXRLZXkuYmluZChuZXcgX2kobCkpKSx1KS50aGVuKCgoKT0+UHJvbWlzZS5yZXNvbHZlKCEwKSkpLmNhdGNoKChlPT57dmFyIHQ7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBjKCJTUEEtQ1JZUFRPLVVUSUxTLVZKLUlWMDEiLG51bGwhPT0odD1udWxsPT1lP3ZvaWQgMDplLnJlYXNvbikmJnZvaWQgMCE9PXQ/dDpKU09OLnN0cmluZ2lmeShlKSwiIi5jb25jYXQobnVsbD09ZT92b2lkIDA6ZS5jb2RlLCIgIikuY29uY2F0KG51bGw9PWU/dm9pZCAwOmUuY2xhaW0pKSl9KSk7dmFyIGx9fSh0PT57Y29uc3Qgbj1zZWxmO2xldCByO24ub25tZXNzYWdlPW49PntsZXR7ZGF0YTphLHBvcnRzOnV9PW47cmV0dXJuIGUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBuLGwsZCxoLGYscDtjb25zdCB2PXVbMF07aWYoYS50eXBlPT09eXx8cilzd2l0Y2goYS50eXBlKXtjYXNlIHk6dHJ5e2NvbnN0IG49T2JqZWN0LmFzc2lnbih7fSxhLmRhdGEpO3I9eWllbGQoKHQsbik9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHI9bmV3IGJyLGk9bmV3IERpLG89bmV3IGc7eWllbGQgby5pbml0aWFsaXplKHQscixpKTtjb25zdCBzPW5ldyBBKG8pLGE9bihvLHMpLGM9by5nZXREYXRhTGF5ZXIoKSx1PXdyLmdldEluc3RhbmNlKCk7cmV0dXJuKG51bGw9PXU/dm9pZCAwOnUuaW5pdCkmJih5aWVsZCB1LmluaXQoITAsKHQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIGEuYXR0YWNoVG9rZW5Ub1JlcXVlc3RDb25maWcodCl9KSkpKSkse2Rpc2FibGVIdHRwSGFuZGxlcjooKT0+e2EuZGlzYWJsZUh0dHBIYW5kbGVyKHUpfSxlbmFibGVIdHRwSGFuZGxlcjooKT0+e2EuZW5hYmxlSHR0cEhhbmRsZXIodSl9LGdldEFjY2Vzc1Rva2VuOigpPT5hLmdldEFjY2Vzc1Rva2VuKCksZ2V0QXV0aG9yaXphdGlvblVSTDp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gby5nZXRBdXRob3JpemF0aW9uVVJMKHQpLnRoZW4oKHQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBlO2NvbnN0IG49bnVsbCE9PShlPW5ldyBVUkwodCkuc2VhcmNoUGFyYW1zLmdldCgic3RhdGUiKSkmJnZvaWQgMCE9PWU/ZToiIixyPXlpZWxkIG8uZ2V0UEtDRUNvZGUobik7cmV0dXJue2F1dGhvcml6YXRpb25VUkw6dCxwa2NlOnJ9fSkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSl9KSksZ2V0QmFzaWNVc2VySW5mbzooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIGEuZ2V0QmFzaWNVc2VySW5mbygpfSkpLGdldENvbmZpZ0RhdGE6KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBjLmdldENvbmZpZ0RhdGEoKX0pKSxnZXRDcnlwdG9IZWxwZXI6KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBhLmdldENyeXB0b0hlbHBlcigpfSkpLGdldERlY29kZWRJRFBJRFRva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gYS5nZXREZWNvZGVkSURQSURUb2tlbigpfSkpLGdldERlY29kZWRJRFRva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gYS5nZXREZWNvZGVkSURUb2tlbigpfSkpLGdldElEVG9rZW46KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBhLmdldElEVG9rZW4oKX0pKSxnZXRPSURDU2VydmljZUVuZHBvaW50czooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIGEuZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKX0pKSxnZXRTaWduT3V0VVJMOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgby5nZXRTaWduT3V0VVJMKCl9KSksaHR0cFJlcXVlc3Q6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIGEuaHR0cFJlcXVlc3QodSx0KX0pKSxodHRwUmVxdWVzdEFsbDp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgYS5odHRwUmVxdWVzdEFsbCh0LHUpfSkpLGlzQXV0aGVudGljYXRlZDooKT0+YS5pc0F1dGhlbnRpY2F0ZWQoKSxyZWZyZXNoQWNjZXNzVG9rZW46KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RyeXtyZXR1cm4geWllbGQgYS5yZWZyZXNoQWNjZXNzVG9rZW4oKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9fSkpLHJlcXVlc3RBY2Nlc3NUb2tlbjoodCxuLHIsaSk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCBhLnJlcXVlc3RBY2Nlc3NUb2tlbih0LG4sdm9pZCAwLHIsaSl9KSkscmVxdWVzdEN1c3RvbUdyYW50OnQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCBhLnJlcXVlc3RDdXN0b21HcmFudCh0KX0pKSxyZXZva2VBY2Nlc3NUb2tlbjooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT15aWVsZCBzLmdldFJlZnJlc2hUaW1lb3V0VGltZXIoKTtyZXR1cm4gby5yZXZva2VBY2Nlc3NUb2tlbigpLnRoZW4oKCgpPT4ocy5jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoZSksUHJvbWlzZS5yZXNvbHZlKCEwKSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKX0pKSxzZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrOmU9PnsobnVsbD09dT92b2lkIDA6dS5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKSYmdS5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKGUpfSxzZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2s6ZT0+eyhudWxsPT11P3ZvaWQgMDp1LnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjaykmJnUuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrKGUpfSxzZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjazplPT57KG51bGw9PXU/dm9pZCAwOnUuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2spJiZ1LnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKGUpfSxzZXRTZXNzaW9uU3RhdGU6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgYy5zZXRTZXNzaW9uRGF0YVBhcmFtZXRlcigic2Vzc2lvbl9zdGF0ZSIsdCl9KSksc2lnbk91dDooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHMuY2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KCkseWllbGQgby5nZXRTaWduT3V0VVJMKCl9KSksc3RhcnRBdXRvUmVmcmVzaFRva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtzLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLHMucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseShhKX0pKSx1cGRhdGVDb25maWc6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgby51cGRhdGVDb25maWcodCl9KSl9fSkpKShuLHQpLHIuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayhzKSxyLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayhpKSxyLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKG8pLHYucG9zdE1lc3NhZ2UoUi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKCkpfWNhdGNoKGUpe3YucG9zdE1lc3NhZ2UoUi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldF9hdXRoX3VybCI6ci5nZXRBdXRob3JpemF0aW9uVVJMKG51bGw9PWE/dm9pZCAwOmEuZGF0YSkudGhlbigoZT0+e3YucG9zdE1lc3NhZ2UoUi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e3YucG9zdE1lc3NhZ2UoUi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlInJlcXVlc3RfZ2V0X3Rva2VuIjpyLnJlcXVlc3RBY2Nlc3NUb2tlbihudWxsPT09KG49bnVsbD09YT92b2lkIDA6YS5kYXRhKXx8dm9pZCAwPT09bj92b2lkIDA6bi5jb2RlLG51bGw9PT0obD1udWxsPT1hP3ZvaWQgMDphLmRhdGEpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLnNlc3Npb25TdGF0ZSxudWxsPT09KGQ9bnVsbD09YT92b2lkIDA6YS5kYXRhKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5wa2NlLG51bGw9PT0oaD1udWxsPT1hP3ZvaWQgMDphLmRhdGEpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLnN0YXRlKS50aGVuKChlPT57di5wb3N0TWVzc2FnZShSLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57di5wb3N0TWVzc2FnZShSLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UiaHR0cC1yZXF1ZXN0Ijp7Y29uc3QgZT1hLmRhdGEsdD1udWxsPT1lP3ZvaWQgMDplLmRhdGE7aWYoITA9PT0obnVsbD09PShwPW51bGw9PT0oZj1hLmRhdGEpfHx2b2lkIDA9PT1mP3ZvaWQgMDpmLmRhdGEpfHx2b2lkIDA9PT1wP3ZvaWQgMDpwLmZvcm1EYXRhKSl7Y29uc3Qgbj1uZXcgRm9ybURhdGE7Zm9yKGNvbnN0IGUgaW4gdCkiZm9ybURhdGEiIT09ZSYmbi5hcHBlbmQoZSx0W2VdKTtlLmRhdGE9bn1yLmh0dHBSZXF1ZXN0KGUpLnRoZW4oKGU9Pnt2LnBvc3RNZXNzYWdlKFIuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9Pnt2LnBvc3RNZXNzYWdlKFIuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWt9Y2FzZSJodHRwLXN0cmVhbS1yZXF1ZXN0Ijp7Y29uc3QgZT1hLmRhdGE7ZS5hZGFwdGVyPSJmZXRjaCIsZS5yZXNwb25zZVR5cGU9InN0cmVhbSIsci5odHRwUmVxdWVzdChlKS50aGVuKChlPT57dmFyIHQ7Y29uc3Qgbj1udWxsPT09KHQ9ZSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuZGF0YTtuIGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0/di5wb3N0TWVzc2FnZSh7ZGF0YTpuLHN1Y2Nlc3M6ITB9LFtuXSk6di5wb3N0TWVzc2FnZShSLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57di5wb3N0TWVzc2FnZShSLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrfWNhc2UiaHR0cC1yZXF1ZXN0LWFsbCI6ci5odHRwUmVxdWVzdEFsbChhLmRhdGEpLnRoZW4oKGU9Pnt2LnBvc3RNZXNzYWdlKFIuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9Pnt2LnBvc3RNZXNzYWdlKFIuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJzaWduLW91dCI6dHJ5e3YucG9zdE1lc3NhZ2UoUi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuc2lnbk91dCgpKSl9Y2F0Y2goZSl7di5wb3N0TWVzc2FnZShSLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UicmVxdWVzdC1jdXN0b20tZ3JhbnQiOnIucmVxdWVzdEN1c3RvbUdyYW50KGEuZGF0YSkudGhlbigoZT0+e3YucG9zdE1lc3NhZ2UoUi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e3YucG9zdE1lc3NhZ2UoUi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlInJldm9rZS1hY2Nlc3MtdG9rZW4iOnIucmV2b2tlQWNjZXNzVG9rZW4oKS50aGVuKChlPT57di5wb3N0TWVzc2FnZShSLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57di5wb3N0TWVzc2FnZShSLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UiZ2V0LW9pZGMtc2VydmljZS1lbmRwb2ludHMiOnRyeXt2LnBvc3RNZXNzYWdlKFIuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCByLmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCkpKX1jYXRjaChlKXt2LnBvc3RNZXNzYWdlKFIuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXQtYmFzaWMtdXNlci1pbmZvIjp0cnl7di5wb3N0TWVzc2FnZShSLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5nZXRCYXNpY1VzZXJJbmZvKCkpKX1jYXRjaChlKXt2LnBvc3RNZXNzYWdlKFIuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXQtZGVjb2RlZC1pZC10b2tlbiI6dHJ5e3YucG9zdE1lc3NhZ2UoUi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuZ2V0RGVjb2RlZElEVG9rZW4oKSkpfWNhdGNoKGUpe3YucG9zdE1lc3NhZ2UoUi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldC1jcnlwdG8taGVscGVyIjp0cnl7di5wb3N0TWVzc2FnZShSLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5nZXRDcnlwdG9IZWxwZXIoKSkpfWNhdGNoKGUpe3YucG9zdE1lc3NhZ2UoUi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldF9pZF90b2tlbiI6dHJ5e3YucG9zdE1lc3NhZ2UoUi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuZ2V0SURUb2tlbigpKSl9Y2F0Y2goZSl7di5wb3N0TWVzc2FnZShSLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZW5hYmxlX2h0dHBfaGFuZGxlciI6ci5lbmFibGVIdHRwSGFuZGxlcigpLHYucG9zdE1lc3NhZ2UoUi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKCkpO2JyZWFrO2Nhc2UiZGlzYWJsZV9odHRwX2hhbmRsZXIiOnIuZGlzYWJsZUh0dHBIYW5kbGVyKCksdi5wb3N0TWVzc2FnZShSLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoKSk7YnJlYWs7Y2FzZSJpc19hdXRoZW50aWNhdGVkIjp0cnl7di5wb3N0TWVzc2FnZShSLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5pc0F1dGhlbnRpY2F0ZWQoKSkpfWNhdGNoKGUpe3YucG9zdE1lc3NhZ2UoUi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldF9zaWduX291dF91cmwiOnRyeXt2LnBvc3RNZXNzYWdlKFIuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCByLmdldFNpZ25PdXRVUkwoKSkpfWNhdGNoKGUpe3YucG9zdE1lc3NhZ2UoUi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInJlZnJlc2hfYWNjZXNzLXRva2VuIjp0cnl7di5wb3N0TWVzc2FnZShSLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5yZWZyZXNoQWNjZXNzVG9rZW4oKSkpfWNhdGNoKGUpe3YucG9zdE1lc3NhZ2UoUi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInN0YXJ0X2F1dG9fcmVmcmVzaF90b2tlbiI6dHJ5e3YucG9zdE1lc3NhZ2UoUi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHIuc3RhcnRBdXRvUmVmcmVzaFRva2VuKCkpKX1jYXRjaChlKXt2LnBvc3RNZXNzYWdlKFIuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJzZXRfc2Vzc2lvbl9zdGF0ZSI6dHJ5e3YucG9zdE1lc3NhZ2UoUi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuc2V0U2Vzc2lvblN0YXRlKG51bGw9PWE/dm9pZCAwOmEuZGF0YSkpKX1jYXRjaChlKXt2LnBvc3RNZXNzYWdlKFIuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJ1cGRhdGVfY29uZmlnIjp0cnl7di5wb3N0TWVzc2FnZShSLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci51cGRhdGVDb25maWcobnVsbD09YT92b2lkIDA6YS5kYXRhKSkpfWNhdGNoKGUpe3YucG9zdE1lc3NhZ2UoUi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldF9jb25maWdfZGF0YSI6dHJ5e3YucG9zdE1lc3NhZ2UoUi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuZ2V0Q29uZmlnRGF0YSgpKSl9Y2F0Y2goZSl7di5wb3N0TWVzc2FnZShSLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2RlZmF1bHQ6bnVsbD09dnx8di5wb3N0TWVzc2FnZShSLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UobmV3IGMoIlNQQS1DTElFTlRfV09SS0VSLU9OTVNHLUlWMDIiLCJUaGUgbWVzc2FnZSB0eXBlIGlzIGludmFsaWQuIiwiVGhlIG1lc3NhZ2UgdHlwZSBwcm92aWRlZCwgIi5jb25jYXQoYS50eXBlLCIsIGlzIGludmFsaWQuIikpKSl9ZWxzZSB2LnBvc3RNZXNzYWdlKFIuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShuZXcgYygiU1BBLUNMSUVOVF9XT1JLRVItT05NU0ctTkYwMSIsIlRoZSB3ZWIgd29ya2VyIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB5ZXQuIiwiVGhlIGluaXRpYWxpemUgbWV0aG9kIG5lZWRzIHRvIGJlIGNhbGxlZCBiZWZvcmUgdGhlIHNwZWNpZmllZCBvcGVyYXRpb24gY2FuIGJlIGNhcnJpZWQgb3V0LiIpKSl9KSl9O2NvbnN0IGk9KCk9PntuLnBvc3RNZXNzYWdlKHt0eXBlOiJyZXF1ZXN0LXN0YXJ0In0pfSxvPWU9Pnt2YXIgdDsobnVsbD09PSh0PWUpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmRhdGEpaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbXx8bi5wb3N0TWVzc2FnZSh7ZGF0YTpKU09OLnN0cmluZ2lmeShudWxsIT1lP2U6IiIpLHR5cGU6InJlcXVlc3Qtc3VjY2VzcyJ9KX0scz0oKT0+e24ucG9zdE1lc3NhZ2Uoe3R5cGU6InJlcXVlc3QtZmluaXNoIn0pfX0pKCgoZSx0KT0+bmV3IGsoZSx0KSkpO3JldHVybnt9fSgpOwoK",$W=null,eV=!1,function(e){return tV=tV||_W(qW,$W,eV),new Worker(tV,e)});const iV="init",lV="sign-out",oV="http-request",cV="http-request-all",aV="http-stream-request",rV="request-custom-grant",sV="revoke-access-token",dV="request-start",uV="request-success",ZV="request-finish",hV="get-oidc-service-endpoints",bV="get-basic-user-info",mV="get-decoded-id-token",pV="get-crypto-helper",yV="enable_http_handler",GV="disable_http_handler",XV="get_auth_url",WV="request_get_token",VV="is_authenticated",IV="get_sign_out_url",SV="refresh_access-token",RV="refresh-access-token-error",gV="set_session_state",fV="start_auto_refresh_token",vV="update_config",YV="get_id_token",KV="check_session_signed_in",NV="check_session_signed_out",CV="get_config_data",JV="set_session_state_from_iframe",kV="token_request_config";var UV;e.Hooks=void 0,(UV=e.Hooks||(e.Hooks={})).SignIn="sign-in",UV.SignOut="sign-out",UV.Initialize="initialize",UV.HttpRequestStart="http-request-start",UV.HttpRequestFinish="http-request-finish",UV.HttpRequestError="http-request-error",UV.HttpRequestSuccess="http-request-success",UV.RevokeAccessToken="revoke-access-token",UV.CustomGrant="custom-grant",UV.SignOutFailed="sign-out-failed";const LV="rpIFrame",TV="promptNoneIFrame",HV="Y2hlY2tTZXNzaW9u",xV="sign-in-silently",wV="initialized-silent-sign-in",FV="promptNoneRequestSent",zV="error",PV="error_description",BV="custom_grant_config",jV="state",QV="Access token is invalid";var MV;e.Storage=void 0,(MV=e.Storage||(e.Storage={})).LocalStorage="localStorage",MV.SessionStorage="sessionStorage",MV.WebWorker="webWorker",MV.BrowserMemory="browserMemory";class EV{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 DV{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,n){sessionStorage.setItem("".concat(wW,"-instance_").concat(n,"-").concat(t),e)}static getSignOutURL(e,t){var n;return null!==(n=sessionStorage.getItem("".concat(wW,"-instance_").concat(t,"-").concat(e)))&&void 0!==n?n:""}static removePKCE(e){sessionStorage.removeItem(e)}static canContinueSignIn(e,t){return!(e&&!DV.hasErrorInURL()&&!DV.hasAuthSearchParamsInURL()&&!t)}static isInitializedSilentSignIn(){return DV.isSilentStatePresentInURL()}static wasSignInCalled(){return!(!DV.hasErrorInURL()&&!DV.hasAuthSearchParamsInURL()||this.isSilentStatePresentInURL())}static wasSilentSignInCalled(){const e=sessionStorage.getItem(wV),t=e?JSON.parse(e):null;return Boolean(t)}static isSignOutSuccessful(){return kW(this,void 0,void 0,(function*(){if(AW.isSignOutSuccessful(window.location.href)){const e=window.location.href.split("?")[0];return history.pushState({},document.title,e),yield AW.clearUserSessionData(),!0}return!1}))}static didSignOutFail(){if(AW.didSignOutFail(window.location.href)){const e=new URL(window.location.href),t=e.searchParams.get(zV),n=e.searchParams.get(PV),i=window.location.href.split("?")[0];return history.pushState({},document.title,i),{description:null!=n?n:"",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(xV))&&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(zV)&&t.searchParams.get(jV)!==FW}static canSendPromptNoneRequest(){const e=sessionStorage.getItem(FV);return!(e?JSON.parse(e):null)}static setPromptNoneRequestSent(e){sessionStorage.setItem(FV,JSON.stringify(e))}static waitTillPageRedirect(e){return kW(this,void 0,void 0,(function*(){const t=null!=e?e:3e3;yield new Promise((e=>setTimeout(e,1e3*t)))}))}}DV.until=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:500;const n=i=>e()?i():setTimeout((()=>n(i)),t);return new Promise(n)};class OV{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,n,i,l){var o,c,a;l.initialize(e.clientID,null!==(o=t.checkSessionIframe)&&void 0!==o?o:"",n,null!==(c=e.checkSessionInterval)&&void 0!==c?c:3,null!==(a=e.sessionRefreshInterval)&&void 0!==a?a:300,e.signInRedirectURL,i)}requestCustomGrant(e,t){var n,i,l;return kW(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!==(i=null===(n=yield this._dataLayer.getConfigData())||void 0===n?void 0:n.resourceServerURLs)&&void 0!==i?i:[],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(BV,JSON.stringify(e)),o||c?this._authenticationClient.requestCustomGrant(e).then((n=>kW(this,void 0,void 0,(function*(){return t&&"function"==typeof t&&t(e),e.returnsSession?(this._spaHelper.refreshAccessTokenAutomatically(this),this._authenticationClient.getBasicUserInfo()):n})))).catch((e=>Promise.reject(e))):Promise.reject(new BW("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 kW(this,void 0,void 0,(function*(){const e=yield this._dataLayer.getTemporaryDataParameter(BV);return e?JSON.parse(e):null}))}refreshAccessToken(e){return kW(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:RV};return window.postMessage(t),Promise.reject(e)}}))}retryFailedRequests(e){return kW(this,void 0,void 0,(function*(){const t=e.httpClient,n=e.requestConfig,i=e.isHttpHandlerEnabled,l=e.httpErrorCallback,o=e.httpFinishCallback;yield DV.until((()=>!this._isTokenRefreshing));try{const e=yield t.request(n);return Promise.resolve(e)}catch(e){return i&&("function"==typeof l&&(yield l(e)),"function"==typeof o&&o()),Promise.reject(e)}}))}httpRequest(e,t,n,i,l,o){var c,a;return kW(this,void 0,void 0,(function*(){let r=!1;const s=yield this._dataLayer.getConfigData();for(const e of[...null!==(c=yield null==s?void 0:s.resourceServerURLs)&&void 0!==c?c:[],s.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=>kW(this,void 0,void 0,(function*(){var a,r,s;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:i,httpFinishCallback:l,isHttpHandlerEnabled:n,requestConfig:t});let a;this._isTokenRefreshing=!0;try{a=yield this.refreshAccessToken(o),this._isTokenRefreshing=!1}catch(e){throw this._isTokenRefreshing=!1,n&&("function"==typeof i&&(yield i(Object.assign(Object.assign({},c),{code:QV}))),"function"==typeof l&&l()),new BW("SPA-AUTH_HELPER-HR-SE01",null!==(r=null==e?void 0:e.name)&&void 0!==r?r:"Refresh token request failed.",null!==(s=null==e?void 0:e.message)&&void 0!==s?s:"An error occurred while trying to refresh the access token following a 401 response from the server.")}if(a)try{const n=yield e.request(t);return Promise.resolve(n)}catch(e){return n&&("function"==typeof i&&(yield i(e)),"function"==typeof l&&l()),Promise.reject(e)}}return n&&("function"==typeof i&&(yield i(c)),"function"==typeof l&&l()),Promise.reject(c)})))):Promise.reject(new BW("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,n,i,l){var o,c,a;return kW(this,void 0,void 0,(function*(){let r=!0;const s=yield this._dataLayer.getConfigData();for(const t of e){let e=!1;for(const n of[...null!==(c=null===(o=yield s)||void 0===o?void 0:o.resourceServerURLs)&&void 0!==c?c:[],s.baseUrl])if(n&&(null===(a=t.url)||void 0===a?void 0:a.startsWith(n))){e=!0;break}if(!e){r=!1;break}}const d=[];if(r)return e.forEach((e=>{d.push(t.request(e))})),(null==t?void 0:t.all)&&t.all(d).then((e=>Promise.resolve(e))).catch((e=>kW(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 n&&("function"==typeof i&&(yield i(Object.assign(Object.assign({},e),{code:QV}))),"function"==typeof l&&l()),new BW("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(d).then((e=>Promise.resolve(e))).catch((e=>kW(this,void 0,void 0,(function*(){return n&&("function"==typeof i&&(yield i(e)),"function"==typeof l&&l()),Promise.reject(e)}))))}return n&&("function"==typeof i&&(yield i(e)),"function"==typeof l&&l()),Promise.reject(e)}))));throw new BW("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(t,n,i,l,o,c){return kW(this,void 0,void 0,(function*(){const a=yield this._dataLayer.getConfigData();if(a.storage===e.Storage.BrowserMemory&&a.enablePKCE&&n){const e=DV.getPKCE(jW.extractPKCEKeyFromStateParam(n));yield this._authenticationClient.setPKCECode(jW.extractPKCEKeyFromStateParam(n),e)}else a.storage===e.Storage.WebWorker&&l&&(yield this._authenticationClient.setPKCECode(l,null!=o?o:""));return t?this._authenticationClient.requestAccessToken(t,null!=n?n:"",null!=o?o:"",void 0,c).then((()=>kW(this,void 0,void 0,(function*(){return a.storage!==e.Storage.WebWorker?(DV.setSignOutURL(yield this._authenticationClient.getSignOutURL(),a.clientID,this._instanceID),this._spaHelper&&(this._spaHelper.clearRefreshTokenTimeout(),this._spaHelper.refreshAccessTokenAutomatically(this)),i&&"function"==typeof i&&a.enableOIDCSessionManagement&&i()):this._spaHelper&&this._spaHelper.refreshAccessTokenAutomatically(this),this._authenticationClient.getBasicUserInfo()})))).catch((e=>Promise.reject(e))):Promise.reject(new BW("SPA-AUTH_HELPER-RAT1-NF01","No authorization code.","No authorization code was found."))}))}trySignInSilently(e,t,n,i,l){var o;return kW(this,void 0,void 0,(function*(){if(DV.isInitializedSilentSignIn())return yield n.receivePromptNoneResponse(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""});const c=document.getElementById(LV),a=null===(o=null==c?void 0:c.contentDocument)||void 0===o?void 0:o.getElementById(TV);try{const t=yield e(i);a.src=t}catch(e){return Promise.reject(e)}return new Promise(((e,n)=>{const i=setTimeout((()=>{e(!1)}),1e4),o=c=>kW(this,void 0,void 0,(function*(){var a,r,s,d;const u=c.data;(null==u?void 0:u.type)==NV&&(window.removeEventListener("message",o),clearTimeout(i),e(!1)),(null==u?void 0:u.type)==KV&&(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===(s=null==u?void 0:u.data)||void 0===s?void 0:s.sessionState,null===(d=null==u?void 0:u.data)||void 0===d?void 0:d.state,l).then((t=>{window.removeEventListener("message",o),e(t)})).catch((e=>{window.removeEventListener("message",o),n(e)})).finally((()=>{clearTimeout(i)}))}));window.addEventListener("message",o)}))}))}handleSignIn(t,n,i){return kW(this,void 0,void 0,(function*(){const l=yield this._dataLayer.getConfigData();if(yield t())return Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""});if(l.storage!==e.Storage.WebWorker&&(yield this._authenticationClient.isAuthenticated()))return this._spaHelper.clearRefreshTokenTimeout(),this._spaHelper.refreshAccessTokenAutomatically(this),l.enableOIDCSessionManagement&&n(),Promise.resolve(yield this._authenticationClient.getBasicUserInfo());const o=new URL(window.location.href).searchParams.get(zV),c=new URL(window.location.href).searchParams.get(PV);if(o){const e=new URL(window.location.href);throw e.searchParams.delete(zV),e.searchParams.delete(PV),history.pushState(null,document.title,e.toString()),new BW("SPA-AUTH_HELPER-SI-SE01",o,null!=c?c:"")}if(l.storage===e.Storage.WebWorker&&i){const e=yield i();if(e)return e}}))}attachTokenToRequestConfig(e){return kW(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 kW(this,void 0,void 0,(function*(){return this._authenticationClient.getBasicUserInfo()}))}getDecodedIDToken(){return kW(this,void 0,void 0,(function*(){return this._authenticationClient.getDecodedIDToken()}))}getDecodedIDPIDToken(){return kW(this,void 0,void 0,(function*(){return this._authenticationClient.getDecodedIDToken()}))}getCryptoHelper(){return kW(this,void 0,void 0,(function*(){return this._authenticationClient.getCryptoHelper()}))}getIDToken(){return kW(this,void 0,void 0,(function*(){return this._authenticationClient.getIDToken()}))}getOIDCServiceEndpoints(){return kW(this,void 0,void 0,(function*(){return this._authenticationClient.getOIDCServiceEndpoints()}))}getAccessToken(){return kW(this,void 0,void 0,(function*(){return this._authenticationClient.getAccessToken()}))}getIDPAccessToken(){var e;return kW(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 kW(this,void 0,void 0,(function*(){return this._authenticationClient.isAuthenticated()}))}}class AV{constructor(e){this._authenticationClient=e,this._dataLayer=this._authenticationClient.getDataLayer()}refreshAccessTokenAutomatically(e){var t,n;return kW(this,void 0,void 0,(function*(){if(!(null!==(n=null===(t=yield this._dataLayer.getConfigData())||void 0===t?void 0:t.periodicTokenRefresh)&&void 0!==n&&n))return;const i=yield this._dataLayer.getSessionData();if(i.refresh_token){const t=parseInt(i.expires_in),n=setTimeout((()=>kW(this,void 0,void 0,(function*(){yield e.refreshAccessToken()}))),1e3*(t<=10?t:t-10));yield this._dataLayer.setTemporaryDataParameter(LW,JSON.stringify(n))}}))}getRefreshTimeoutTimer(){return kW(this,void 0,void 0,(function*(){return(yield this._dataLayer.getTemporaryDataParameter(LW))?JSON.parse(yield this._dataLayer.getTemporaryDataParameter(LW)):-1}))}clearRefreshTokenTimeout(e){return kW(this,void 0,void 0,(function*(){if(e)return void clearTimeout(e);const t=yield this.getRefreshTimeoutTimer();-1!==t&&clearTimeout(t)}))}}const _V=(()=>{let t,n,i,l,o,c,a,r,s,d,u;const Z=(e,a,r,s,d,Z,b)=>{t=e,n=a,i=r,l=s,o=Z,c=d,u=b,l>-1&&h(),c>-1&&(d=setInterval((()=>{p()}),1e3*c))},h=()=>kW(void 0,void 0,void 0,(function*(){var e;if(!n||!t||!o)return;const c="opIFrame";const a=document.getElementById(LV);(null===(e=null==a?void 0:a.contentDocument)||void 0===e?void 0:e.getElementById(c)).src=n+"?client_id="+t+"&redirect_uri="+o,r=setInterval((function(){var e;return kW(this,void 0,void 0,(function*(){const l=yield i();if(Boolean(t)&&Boolean(l)){const i="".concat(t," ").concat(l),o=document.getElementById(LV),a=(null===(e=null==o?void 0:o.contentDocument)||void 0===e?void 0:e.getElementById(c)).contentWindow;null==a||a.postMessage(i,n)}}))}),1e3*l),m()})),b=()=>{clearInterval(r),clearInterval(undefined)},m=()=>{null===window||void 0===window||window.addEventListener("message",(function(e){var t;return kW(this,void 0,void 0,(function*(){const i=n;!i||(null==i?void 0:i.indexOf(e.origin))<0||(null===(t=null==e?void 0:e.data)||void 0===t?void 0:t.type)===JV||"unchanged"===e.data||("error"===e.data?window.location.href=yield a():"changed"===e.data&&p())}))}),!1)},p=()=>kW(void 0,void 0,void 0,(function*(){var t;const n=document.getElementById(LV),i=null===(t=null==n?void 0:n.contentDocument)||void 0===t?void 0:t.getElementById(TV);if(DV.canSendPromptNoneRequest()){DV.setPromptNoneRequestSent(!0);const t=e=>{var n,i,l;(null===(n=null==e?void 0:e.data)||void 0===n?void 0:n.type)===JV&&(d(null!==(l=null===(i=null==e?void 0:e.data)||void 0===i?void 0:i.data)&&void 0!==l?l:""),null===window||void 0===window||window.removeEventListener("message",t))};s!==e.Storage.BrowserMemory&&s!==e.Storage.WebWorker||null===window||void 0===window||window.addEventListener("message",t);const n=yield u({prompt:"none",response_mode:"query",state:HV});i.src=n}})),y=t=>kW(void 0,void 0,void 0,(function*(){var n,i;const l=new URL(window.location.href).searchParams.get(jV),o=new URL(window.location.href).searchParams.get(xW),c=window.parent.parent;if(null!==l&&(l.includes(HV)||l.includes(xV))){const r=new URL(window.location.href).searchParams.get("code");if(null!==r&&0!==r.length){if(l.includes(xV)){const e={data:{code:r,sessionState:null!=o?o:"",state:l},type:KV};return sessionStorage.setItem(wV,"false"),c.postMessage(e,c.origin),DV.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield DV.waitTillPageRedirect(),!0}const a=new URL(window.location.href).searchParams.get("session_state");if(s===e.Storage.LocalStorage||s===e.Storage.SessionStorage)t&&(yield t(a));else{const e={data:null!=a?a:"",type:JV};null===(i=null===(n=null===window||void 0===window?void 0:window.parent)||void 0===n?void 0:n.parent)||void 0===i||i.postMessage(e)}return DV.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield DV.waitTillPageRedirect(),!0}{if(l.includes(xV)){const e={type:NV};return window.parent.parent.postMessage(e,c.origin),DV.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield DV.waitTillPageRedirect(),!0}DV.setPromptNoneRequestSent(!1);const e=yield a();return yield AW.clearUserSessionData(),c.location.href=e,window.location.href="about:blank",yield DV.waitTillPageRedirect(),!0}}return!1}));return(e,t,n)=>kW(void 0,void 0,void 0,(function*(){var i;let l=document.createElement("iframe");l.setAttribute("id",LV),l.style.display="none";let o=!1;l.onload=()=>{var e,t,n,i;l=document.getElementById(LV);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",TV),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===(i=null===(n=null==l?void 0:l.contentDocument)||void 0===n?void 0:n.body)||void 0===i||i.appendChild(r)),o=!0},null===(i=null===document||void 0===document?void 0:document.body)||void 0===i||i.appendChild(l),a=e,s=t,d=n;for(;!1===o;)yield new Promise((e=>setTimeout(e,1)));return{initialize:Z,receivePromptNoneResponse:y,reset:b}}))})();var qV="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{};function $V(){throw new Error("setTimeout has not been defined")}function eI(){throw new Error("clearTimeout has not been defined")}var tI=$V,nI=eI;function iI(e){if(tI===setTimeout)return setTimeout(e,0);if((tI===$V||!tI)&&setTimeout)return tI=setTimeout,setTimeout(e,0);try{return tI(e,0)}catch(t){try{return tI.call(null,e,0)}catch(t){return tI.call(this,e,0)}}}"function"==typeof qV.setTimeout&&(tI=setTimeout),"function"==typeof qV.clearTimeout&&(nI=clearTimeout);var lI,oI=[],cI=!1,aI=-1;function rI(){cI&&lI&&(cI=!1,lI.length?oI=lI.concat(oI):aI=-1,oI.length&&sI())}function sI(){if(!cI){var e=iI(rI);cI=!0;for(var t=oI.length;t;){for(lI=oI,oI=[];++aI<t;)lI&&lI[aI].run();aI=-1,t=oI.length}lI=null,cI=!1,function(e){if(nI===clearTimeout)return clearTimeout(e);if((nI===eI||!nI)&&clearTimeout)return nI=clearTimeout,clearTimeout(e);try{nI(e)}catch(t){try{return nI.call(null,e)}catch(t){return nI.call(this,e)}}}(e)}}function dI(e,t){this.fun=e,this.array=t}dI.prototype.run=function(){this.fun.apply(null,this.array)};function uI(){}var ZI=uI,hI=uI,bI=uI,mI=uI,pI=uI,yI=uI,GI=uI;var XI=qV.performance||{},WI=XI.now||XI.mozNow||XI.msNow||XI.oNow||XI.webkitNow||function(){return(new Date).getTime()};var VI=new Date;var II={nextTick:function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];oI.push(new dI(e,t)),1!==oI.length||cI||iI(sI)},title:"browser",browser:!0,env:{},argv:[],version:"",versions:{},on:ZI,addListener:hI,once:bI,off:mI,removeListener:pI,removeAllListeners:yI,emit:GI,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*WI.call(XI),n=Math.floor(t),i=Math.floor(t%1*1e9);return e&&(n-=e[0],(i-=e[1])<0&&(n--,i+=1e9)),[n,i]},platform:"browser",release:{},config:{},uptime:function(){return(new Date-VI)/1e3}},SI=II;function RI(e,t){return function(){return e.apply(t,arguments)}}const{toString:gI}=Object.prototype,{getPrototypeOf:fI}=Object,{iterator:vI,toStringTag:YI}=Symbol,KI=(NI=Object.create(null),e=>{const t=gI.call(e);return NI[t]||(NI[t]=t.slice(8,-1).toLowerCase())});var NI;const CI=e=>(e=e.toLowerCase(),t=>KI(t)===e),JI=e=>t=>typeof t===e,{isArray:kI}=Array,UI=JI("undefined");function LI(e){return null!==e&&!UI(e)&&null!==e.constructor&&!UI(e.constructor)&&xI(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const TI=CI("ArrayBuffer");const HI=JI("string"),xI=JI("function"),wI=JI("number"),FI=e=>null!==e&&"object"==typeof e,zI=e=>{if("object"!==KI(e))return!1;const t=fI(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||YI in e||vI in e)},PI=CI("Date"),BI=CI("File"),jI=CI("Blob"),QI=CI("FileList");const MI="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==qV?qV:{},EI=void 0!==MI.FormData?MI.FormData:void 0,DI=CI("URLSearchParams"),[OI,AI,_I,qI]=["ReadableStream","Request","Response","Headers"].map(CI);function $I(e,t){let n,i,{allOwnKeys:l=!1}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(null!=e)if("object"!=typeof e&&(e=[e]),kI(e))for(n=0,i=e.length;n<i;n++)t.call(null,e[n],n,e);else{if(LI(e))return;const i=l?Object.getOwnPropertyNames(e):Object.keys(e),o=i.length;let c;for(n=0;n<o;n++)c=i[n],t.call(null,e[c],c,e)}}function eS(e,t){if(LI(e))return null;t=t.toLowerCase();const n=Object.keys(e);let i,l=n.length;for(;l-- >0;)if(i=n[l],t===i.toLowerCase())return i;return null}const tS="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:qV,nS=e=>!UI(e)&&e!==tS;const iS=(e=>t=>e&&t instanceof e)("undefined"!=typeof Uint8Array&&fI(Uint8Array)),lS=CI("HTMLFormElement"),oS=(e=>{let{hasOwnProperty:t}=e;return(e,n)=>t.call(e,n)})(Object.prototype),cS=CI("RegExp"),aS=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),i={};$I(n,((n,l)=>{let o;!1!==(o=t(n,l,e))&&(i[l]=o||n)})),Object.defineProperties(e,i)};const rS=CI("AsyncFunction"),sS=(dS="function"==typeof setImmediate,uS=xI(tS.postMessage),dS?setImmediate:uS?(ZS="axios@".concat(Math.random()),hS=[],tS.addEventListener("message",(e=>{let{source:t,data:n}=e;t===tS&&n===ZS&&hS.length&&hS.shift()()}),!1),e=>{hS.push(e),tS.postMessage(ZS,"*")}):e=>setTimeout(e));var dS,uS,ZS,hS;const bS="undefined"!=typeof queueMicrotask?queueMicrotask.bind(tS):void 0!==SI&&SI.nextTick||sS;var mS={isArray:kI,isArrayBuffer:TI,isBuffer:LI,isFormData:e=>{let t;return e&&(EI&&e instanceof EI||xI(e.append)&&("formdata"===(t=KI(e))||"object"===t&&xI(e.toString)&&"[object FormData]"===e.toString()))},isArrayBufferView:function(e){let t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&TI(e.buffer),t},isString:HI,isNumber:wI,isBoolean:e=>!0===e||!1===e,isObject:FI,isPlainObject:zI,isEmptyObject:e=>{if(!FI(e)||LI(e))return!1;try{return 0===Object.keys(e).length&&Object.getPrototypeOf(e)===Object.prototype}catch(e){return!1}},isReadableStream:OI,isRequest:AI,isResponse:_I,isHeaders:qI,isUndefined:UI,isDate:PI,isFile:BI,isReactNativeBlob:e=>!(!e||void 0===e.uri),isReactNative:e=>e&&void 0!==e.getParts,isBlob:jI,isRegExp:cS,isFunction:xI,isStream:e=>FI(e)&&xI(e.pipe),isURLSearchParams:DI,isTypedArray:iS,isFileList:QI,forEach:$I,merge:function e(){const{caseless:t,skipUndefined:n}=nS(this)&&this||{},i={},l=(l,o)=>{if("__proto__"===o||"constructor"===o||"prototype"===o)return;const c=t&&eS(i,o)||o;zI(i[c])&&zI(l)?i[c]=e(i[c],l):zI(l)?i[c]=e({},l):kI(l)?i[c]=l.slice():n&&UI(l)||(i[c]=l)};for(let e=0,t=arguments.length;e<t;e++)arguments[e]&&$I(arguments[e],l);return i},extend:function(e,t,n){let{allOwnKeys:i}=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return $I(t,((t,i)=>{n&&xI(t)?Object.defineProperty(e,i,{value:RI(t,n),writable:!0,enumerable:!0,configurable:!0}):Object.defineProperty(e,i,{value:t,writable:!0,enumerable:!0,configurable:!0})}),{allOwnKeys:i}),e},trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,t,n,i)=>{e.prototype=Object.create(t.prototype,i),Object.defineProperty(e.prototype,"constructor",{value:e,writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},toFlatObject:(e,t,n,i)=>{let l,o,c;const a={};if(t=t||{},null==e)return t;do{for(l=Object.getOwnPropertyNames(e),o=l.length;o-- >0;)c=l[o],i&&!i(c,e,t)||a[c]||(t[c]=e[c],a[c]=!0);e=!1!==n&&fI(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:KI,kindOfTest:CI,endsWith:(e,t,n)=>{e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;const i=e.indexOf(t,n);return-1!==i&&i===n},toArray:e=>{if(!e)return null;if(kI(e))return e;let t=e.length;if(!wI(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},forEachEntry:(e,t)=>{const n=(e&&e[vI]).call(e);let i;for(;(i=n.next())&&!i.done;){const n=i.value;t.call(e,n[0],n[1])}},matchAll:(e,t)=>{let n;const i=[];for(;null!==(n=e.exec(t));)i.push(n);return i},isHTMLForm:lS,hasOwnProperty:oS,hasOwnProp:oS,reduceDescriptors:aS,freezeMethods:e=>{aS(e,((t,n)=>{if(xI(e)&&-1!==["arguments","caller","callee"].indexOf(n))return!1;const i=e[n];xI(i)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")}))}))},toObjectSet:(e,t)=>{const n={},i=e=>{e.forEach((e=>{n[e]=!0}))};return kI(e)?i(e):i(String(e).split(t)),n},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function(e,t,n){return t.toUpperCase()+n})),noop:()=>{},toFiniteNumber:(e,t)=>null!=e&&Number.isFinite(e=+e)?e:t,findKey:eS,global:tS,isContextDefined:nS,isSpecCompliantForm:function(e){return!!(e&&xI(e.append)&&"FormData"===e[YI]&&e[vI])},toJSONObject:e=>{const t=new Array(10),n=(e,i)=>{if(FI(e)){if(t.indexOf(e)>=0)return;if(LI(e))return e;if(!("toJSON"in e)){t[i]=e;const l=kI(e)?[]:{};return $I(e,((e,t)=>{const o=n(e,i+1);!UI(o)&&(l[t]=o)})),t[i]=void 0,l}}return e};return n(e,0)},isAsyncFn:rS,isThenable:e=>e&&(FI(e)||xI(e))&&xI(e.then)&&xI(e.catch),setImmediate:sS,asap:bS,isIterable:e=>null!=e&&xI(e[vI])},pS=[],yS=[],GS="undefined"!=typeof Uint8Array?Uint8Array:Array,XS=!1;function WS(){XS=!0;for(var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",t=0,n=e.length;t<n;++t)pS[t]=e[t],yS[e.charCodeAt(t)]=t;yS["-".charCodeAt(0)]=62,yS["_".charCodeAt(0)]=63}function VS(e,t,n){for(var i,l,o=[],c=t;c<n;c+=3)i=(e[c]<<16)+(e[c+1]<<8)+e[c+2],o.push(pS[(l=i)>>18&63]+pS[l>>12&63]+pS[l>>6&63]+pS[63&l]);return o.join("")}function IS(e){var t;XS||WS();for(var n=e.length,i=n%3,l="",o=[],c=16383,a=0,r=n-i;a<r;a+=c)o.push(VS(e,a,a+c>r?r:a+c));return 1===i?(t=e[n-1],l+=pS[t>>2],l+=pS[t<<4&63],l+="=="):2===i&&(t=(e[n-2]<<8)+e[n-1],l+=pS[t>>10],l+=pS[t>>4&63],l+=pS[t<<2&63],l+="="),o.push(l),o.join("")}function SS(e,t,n,i,l){var o,c,a=8*l-i-1,r=(1<<a)-1,s=r>>1,d=-7,u=n?l-1:0,Z=n?-1:1,h=e[t+u];for(u+=Z,o=h&(1<<-d)-1,h>>=-d,d+=a;d>0;o=256*o+e[t+u],u+=Z,d-=8);for(c=o&(1<<-d)-1,o>>=-d,d+=i;d>0;c=256*c+e[t+u],u+=Z,d-=8);if(0===o)o=1-s;else{if(o===r)return c?NaN:1/0*(h?-1:1);c+=Math.pow(2,i),o-=s}return(h?-1:1)*c*Math.pow(2,o-i)}function RS(e,t,n,i,l,o){var c,a,r,s=8*o-l-1,d=(1<<s)-1,u=d>>1,Z=23===l?Math.pow(2,-24)-Math.pow(2,-77):0,h=i?0:o-1,b=i?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=d):(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>=d?(a=0,c=d):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[n+h]=255&a,h+=b,a/=256,l-=8);for(c=c<<l|a,s+=l;s>0;e[n+h]=255&c,h+=b,c/=256,s-=8);e[n+h-b]|=128*m}var gS={}.toString,fS=Array.isArray||function(e){return"[object Array]"==gS.call(e)};NS.TYPED_ARRAY_SUPPORT=void 0===qV.TYPED_ARRAY_SUPPORT||qV.TYPED_ARRAY_SUPPORT;var vS=YS();function YS(){return NS.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function KS(e,t){if(YS()<t)throw new RangeError("Invalid typed array length");return NS.TYPED_ARRAY_SUPPORT?(e=new Uint8Array(t)).__proto__=NS.prototype:(null===e&&(e=new NS(t)),e.length=t),e}function NS(e,t,n){if(!(NS.TYPED_ARRAY_SUPPORT||this instanceof NS))return new NS(e,t,n);if("number"==typeof e){if("string"==typeof t)throw new Error("If encoding is specified then the first argument must be a string");return kS(this,e)}return CS(this,e,t,n)}function CS(e,t,n,i){if("number"==typeof t)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&t instanceof ArrayBuffer?function(e,t,n,i){if(t.byteLength,n<0||t.byteLength<n)throw new RangeError("'offset' is out of bounds");if(t.byteLength<n+(i||0))throw new RangeError("'length' is out of bounds");t=void 0===n&&void 0===i?new Uint8Array(t):void 0===i?new Uint8Array(t,n):new Uint8Array(t,n,i);NS.TYPED_ARRAY_SUPPORT?(e=t).__proto__=NS.prototype:e=US(e,t);return e}(e,t,n,i):"string"==typeof t?function(e,t,n){"string"==typeof n&&""!==n||(n="utf8");if(!NS.isEncoding(n))throw new TypeError('"encoding" must be a valid string encoding');var i=0|HS(t,n),l=(e=KS(e,i)).write(t,n);l!==i&&(e=e.slice(0,l));return e}(e,t,n):function(e,t){if(TS(t)){var n=0|LS(t.length);return 0===(e=KS(e,n)).length||t.copy(e,0,0,n),e}if(t){if("undefined"!=typeof ArrayBuffer&&t.buffer instanceof ArrayBuffer||"length"in t)return"number"!=typeof t.length||(i=t.length)!=i?KS(e,0):US(e,t);if("Buffer"===t.type&&fS(t.data))return US(e,t.data)}var i;throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(e,t)}function JS(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 kS(e,t){if(JS(t),e=KS(e,t<0?0:0|LS(t)),!NS.TYPED_ARRAY_SUPPORT)for(var n=0;n<t;++n)e[n]=0;return e}function US(e,t){var n=t.length<0?0:0|LS(t.length);e=KS(e,n);for(var i=0;i<n;i+=1)e[i]=255&t[i];return e}function LS(e){if(e>=YS())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+YS().toString(16)+" bytes");return 0|e}function TS(e){return!(null==e||!e._isBuffer)}function HS(e,t){if(TS(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 n=e.length;if(0===n)return 0;for(var i=!1;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return dR(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return uR(e).length;default:if(i)return dR(e).length;t=(""+t).toLowerCase(),i=!0}}function xS(e,t,n){var i=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return $S(this,t,n);case"utf8":case"utf-8":return OS(this,t,n);case"ascii":return _S(this,t,n);case"latin1":case"binary":return qS(this,t,n);case"base64":return DS(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return eR(this,t,n);default:if(i)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),i=!0}}function wS(e,t,n){var i=e[t];e[t]=e[n],e[n]=i}function FS(e,t,n,i,l){if(0===e.length)return-1;if("string"==typeof n?(i=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=l?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(l)return-1;n=e.length-1}else if(n<0){if(!l)return-1;n=0}if("string"==typeof t&&(t=NS.from(t,i)),TS(t))return 0===t.length?-1:zS(e,t,n,i,l);if("number"==typeof t)return t&=255,NS.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?l?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):zS(e,[t],n,i,l);throw new TypeError("val must be string, number or Buffer")}function zS(e,t,n,i,l){var o,c=1,a=e.length,r=t.length;if(void 0!==i&&("ucs2"===(i=String(i).toLowerCase())||"ucs-2"===i||"utf16le"===i||"utf-16le"===i)){if(e.length<2||t.length<2)return-1;c=2,a/=2,r/=2,n/=2}function s(e,t){return 1===c?e[t]:e.readUInt16BE(t*c)}if(l){var d=-1;for(o=n;o<a;o++)if(s(e,o)===s(t,-1===d?0:o-d)){if(-1===d&&(d=o),o-d+1===r)return d*c}else-1!==d&&(o-=o-d),d=-1}else for(n+r>a&&(n=a-r),o=n;o>=0;o--){for(var u=!0,Z=0;Z<r;Z++)if(s(e,o+Z)!==s(t,Z)){u=!1;break}if(u)return o}return-1}function PS(e,t,n,i){n=Number(n)||0;var l=e.length-n;i?(i=Number(i))>l&&(i=l):i=l;var o=t.length;if(o%2!=0)throw new TypeError("Invalid hex string");i>o/2&&(i=o/2);for(var c=0;c<i;++c){var a=parseInt(t.substr(2*c,2),16);if(isNaN(a))return c;e[n+c]=a}return c}function BS(e,t,n,i){return ZR(dR(t,e.length-n),e,n,i)}function jS(e,t,n,i){return ZR(function(e){for(var t=[],n=0;n<e.length;++n)t.push(255&e.charCodeAt(n));return t}(t),e,n,i)}function QS(e,t,n,i){return jS(e,t,n,i)}function MS(e,t,n,i){return ZR(uR(t),e,n,i)}function ES(e,t,n,i){return ZR(function(e,t){for(var n,i,l,o=[],c=0;c<e.length&&!((t-=2)<0);++c)i=(n=e.charCodeAt(c))>>8,l=n%256,o.push(l),o.push(i);return o}(t,e.length-n),e,n,i)}function DS(e,t,n){return 0===t&&n===e.length?IS(e):IS(e.slice(t,n))}function OS(e,t,n){n=Math.min(e.length,n);for(var i=[],l=t;l<n;){var o,c,a,r,s=e[l],d=null,u=s>239?4:s>223?3:s>191?2:1;if(l+u<=n)switch(u){case 1:s<128&&(d=s);break;case 2:128==(192&(o=e[l+1]))&&(r=(31&s)<<6|63&o)>127&&(d=r);break;case 3:o=e[l+1],c=e[l+2],128==(192&o)&&128==(192&c)&&(r=(15&s)<<12|(63&o)<<6|63&c)>2047&&(r<55296||r>57343)&&(d=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&s)<<18|(63&o)<<12|(63&c)<<6|63&a)>65535&&r<1114112&&(d=r)}null===d?(d=65533,u=1):d>65535&&(d-=65536,i.push(d>>>10&1023|55296),d=56320|1023&d),i.push(d),l+=u}return function(e){var t=e.length;if(t<=AS)return String.fromCharCode.apply(String,e);var n="",i=0;for(;i<t;)n+=String.fromCharCode.apply(String,e.slice(i,i+=AS));return n}(i)}NS.poolSize=8192,NS._augment=function(e){return e.__proto__=NS.prototype,e},NS.from=function(e,t,n){return CS(null,e,t,n)},NS.TYPED_ARRAY_SUPPORT&&(NS.prototype.__proto__=Uint8Array.prototype,NS.__proto__=Uint8Array),NS.alloc=function(e,t,n){return function(e,t,n,i){return JS(t),t<=0?KS(e,t):void 0!==n?"string"==typeof i?KS(e,t).fill(n,i):KS(e,t).fill(n):KS(e,t)}(null,e,t,n)},NS.allocUnsafe=function(e){return kS(null,e)},NS.allocUnsafeSlow=function(e){return kS(null,e)},NS.isBuffer=hR,NS.compare=function(e,t){if(!TS(e)||!TS(t))throw new TypeError("Arguments must be Buffers");if(e===t)return 0;for(var n=e.length,i=t.length,l=0,o=Math.min(n,i);l<o;++l)if(e[l]!==t[l]){n=e[l],i=t[l];break}return n<i?-1:i<n?1:0},NS.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}},NS.concat=function(e,t){if(!fS(e))throw new TypeError('"list" argument must be an Array of Buffers');if(0===e.length)return NS.alloc(0);var n;if(void 0===t)for(t=0,n=0;n<e.length;++n)t+=e[n].length;var i=NS.allocUnsafe(t),l=0;for(n=0;n<e.length;++n){var o=e[n];if(!TS(o))throw new TypeError('"list" argument must be an Array of Buffers');o.copy(i,l),l+=o.length}return i},NS.byteLength=HS,NS.prototype._isBuffer=!0,NS.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)wS(this,t,t+1);return this},NS.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)wS(this,t,t+3),wS(this,t+1,t+2);return this},NS.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)wS(this,t,t+7),wS(this,t+1,t+6),wS(this,t+2,t+5),wS(this,t+3,t+4);return this},NS.prototype.toString=function(){var e=0|this.length;return 0===e?"":0===arguments.length?OS(this,0,e):xS.apply(this,arguments)},NS.prototype.equals=function(e){if(!TS(e))throw new TypeError("Argument must be a Buffer");return this===e||0===NS.compare(this,e)},NS.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+">"},NS.prototype.compare=function(e,t,n,i,l){if(!TS(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===i&&(i=0),void 0===l&&(l=this.length),t<0||n>e.length||i<0||l>this.length)throw new RangeError("out of range index");if(i>=l&&t>=n)return 0;if(i>=l)return-1;if(t>=n)return 1;if(this===e)return 0;for(var o=(l>>>=0)-(i>>>=0),c=(n>>>=0)-(t>>>=0),a=Math.min(o,c),r=this.slice(i,l),s=e.slice(t,n),d=0;d<a;++d)if(r[d]!==s[d]){o=r[d],c=s[d];break}return o<c?-1:c<o?1:0},NS.prototype.includes=function(e,t,n){return-1!==this.indexOf(e,t,n)},NS.prototype.indexOf=function(e,t,n){return FS(this,e,t,n,!0)},NS.prototype.lastIndexOf=function(e,t,n){return FS(this,e,t,n,!1)},NS.prototype.write=function(e,t,n,i){if(void 0===t)i="utf8",n=this.length,t=0;else if(void 0===n&&"string"==typeof t)i=t,n=this.length,t=0;else{if(!isFinite(t))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");t|=0,isFinite(n)?(n|=0,void 0===i&&(i="utf8")):(i=n,n=void 0)}var l=this.length-t;if((void 0===n||n>l)&&(n=l),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");i||(i="utf8");for(var o=!1;;)switch(i){case"hex":return PS(this,e,t,n);case"utf8":case"utf-8":return BS(this,e,t,n);case"ascii":return jS(this,e,t,n);case"latin1":case"binary":return QS(this,e,t,n);case"base64":return MS(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return ES(this,e,t,n);default:if(o)throw new TypeError("Unknown encoding: "+i);i=(""+i).toLowerCase(),o=!0}},NS.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var AS=4096;function _S(e,t,n){var i="";n=Math.min(e.length,n);for(var l=t;l<n;++l)i+=String.fromCharCode(127&e[l]);return i}function qS(e,t,n){var i="";n=Math.min(e.length,n);for(var l=t;l<n;++l)i+=String.fromCharCode(e[l]);return i}function $S(e,t,n){var i=e.length;(!t||t<0)&&(t=0),(!n||n<0||n>i)&&(n=i);for(var l="",o=t;o<n;++o)l+=sR(e[o]);return l}function eR(e,t,n){for(var i=e.slice(t,n),l="",o=0;o<i.length;o+=2)l+=String.fromCharCode(i[o]+256*i[o+1]);return l}function tR(e,t,n){if(e%1!=0||e<0)throw new RangeError("offset is not uint");if(e+t>n)throw new RangeError("Trying to access beyond buffer length")}function nR(e,t,n,i,l,o){if(!TS(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(n+i>e.length)throw new RangeError("Index out of range")}function iR(e,t,n,i){t<0&&(t=65535+t+1);for(var l=0,o=Math.min(e.length-n,2);l<o;++l)e[n+l]=(t&255<<8*(i?l:1-l))>>>8*(i?l:1-l)}function lR(e,t,n,i){t<0&&(t=4294967295+t+1);for(var l=0,o=Math.min(e.length-n,4);l<o;++l)e[n+l]=t>>>8*(i?l:3-l)&255}function oR(e,t,n,i,l,o){if(n+i>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function cR(e,t,n,i,l){return l||oR(e,0,n,4),RS(e,t,n,i,23,4),n+4}function aR(e,t,n,i,l){return l||oR(e,0,n,8),RS(e,t,n,i,52,8),n+8}NS.prototype.slice=function(e,t){var n,i=this.length;if((e=~~e)<0?(e+=i)<0&&(e=0):e>i&&(e=i),(t=void 0===t?i:~~t)<0?(t+=i)<0&&(t=0):t>i&&(t=i),t<e&&(t=e),NS.TYPED_ARRAY_SUPPORT)(n=this.subarray(e,t)).__proto__=NS.prototype;else{var l=t-e;n=new NS(l,void 0);for(var o=0;o<l;++o)n[o]=this[o+e]}return n},NS.prototype.readUIntLE=function(e,t,n){e|=0,t|=0,n||tR(e,t,this.length);for(var i=this[e],l=1,o=0;++o<t&&(l*=256);)i+=this[e+o]*l;return i},NS.prototype.readUIntBE=function(e,t,n){e|=0,t|=0,n||tR(e,t,this.length);for(var i=this[e+--t],l=1;t>0&&(l*=256);)i+=this[e+--t]*l;return i},NS.prototype.readUInt8=function(e,t){return t||tR(e,1,this.length),this[e]},NS.prototype.readUInt16LE=function(e,t){return t||tR(e,2,this.length),this[e]|this[e+1]<<8},NS.prototype.readUInt16BE=function(e,t){return t||tR(e,2,this.length),this[e]<<8|this[e+1]},NS.prototype.readUInt32LE=function(e,t){return t||tR(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},NS.prototype.readUInt32BE=function(e,t){return t||tR(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},NS.prototype.readIntLE=function(e,t,n){e|=0,t|=0,n||tR(e,t,this.length);for(var i=this[e],l=1,o=0;++o<t&&(l*=256);)i+=this[e+o]*l;return i>=(l*=128)&&(i-=Math.pow(2,8*t)),i},NS.prototype.readIntBE=function(e,t,n){e|=0,t|=0,n||tR(e,t,this.length);for(var i=t,l=1,o=this[e+--i];i>0&&(l*=256);)o+=this[e+--i]*l;return o>=(l*=128)&&(o-=Math.pow(2,8*t)),o},NS.prototype.readInt8=function(e,t){return t||tR(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},NS.prototype.readInt16LE=function(e,t){t||tR(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},NS.prototype.readInt16BE=function(e,t){t||tR(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},NS.prototype.readInt32LE=function(e,t){return t||tR(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},NS.prototype.readInt32BE=function(e,t){return t||tR(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},NS.prototype.readFloatLE=function(e,t){return t||tR(e,4,this.length),SS(this,e,!0,23,4)},NS.prototype.readFloatBE=function(e,t){return t||tR(e,4,this.length),SS(this,e,!1,23,4)},NS.prototype.readDoubleLE=function(e,t){return t||tR(e,8,this.length),SS(this,e,!0,52,8)},NS.prototype.readDoubleBE=function(e,t){return t||tR(e,8,this.length),SS(this,e,!1,52,8)},NS.prototype.writeUIntLE=function(e,t,n,i){(e=+e,t|=0,n|=0,i)||nR(this,e,t,n,Math.pow(2,8*n)-1,0);var l=1,o=0;for(this[t]=255&e;++o<n&&(l*=256);)this[t+o]=e/l&255;return t+n},NS.prototype.writeUIntBE=function(e,t,n,i){(e=+e,t|=0,n|=0,i)||nR(this,e,t,n,Math.pow(2,8*n)-1,0);var l=n-1,o=1;for(this[t+l]=255&e;--l>=0&&(o*=256);)this[t+l]=e/o&255;return t+n},NS.prototype.writeUInt8=function(e,t,n){return e=+e,t|=0,n||nR(this,e,t,1,255,0),NS.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},NS.prototype.writeUInt16LE=function(e,t,n){return e=+e,t|=0,n||nR(this,e,t,2,65535,0),NS.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):iR(this,e,t,!0),t+2},NS.prototype.writeUInt16BE=function(e,t,n){return e=+e,t|=0,n||nR(this,e,t,2,65535,0),NS.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):iR(this,e,t,!1),t+2},NS.prototype.writeUInt32LE=function(e,t,n){return e=+e,t|=0,n||nR(this,e,t,4,4294967295,0),NS.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):lR(this,e,t,!0),t+4},NS.prototype.writeUInt32BE=function(e,t,n){return e=+e,t|=0,n||nR(this,e,t,4,4294967295,0),NS.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):lR(this,e,t,!1),t+4},NS.prototype.writeIntLE=function(e,t,n,i){if(e=+e,t|=0,!i){var l=Math.pow(2,8*n-1);nR(this,e,t,n,l-1,-l)}var o=0,c=1,a=0;for(this[t]=255&e;++o<n&&(c*=256);)e<0&&0===a&&0!==this[t+o-1]&&(a=1),this[t+o]=(e/c>>0)-a&255;return t+n},NS.prototype.writeIntBE=function(e,t,n,i){if(e=+e,t|=0,!i){var l=Math.pow(2,8*n-1);nR(this,e,t,n,l-1,-l)}var o=n-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+n},NS.prototype.writeInt8=function(e,t,n){return e=+e,t|=0,n||nR(this,e,t,1,127,-128),NS.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},NS.prototype.writeInt16LE=function(e,t,n){return e=+e,t|=0,n||nR(this,e,t,2,32767,-32768),NS.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):iR(this,e,t,!0),t+2},NS.prototype.writeInt16BE=function(e,t,n){return e=+e,t|=0,n||nR(this,e,t,2,32767,-32768),NS.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):iR(this,e,t,!1),t+2},NS.prototype.writeInt32LE=function(e,t,n){return e=+e,t|=0,n||nR(this,e,t,4,2147483647,-2147483648),NS.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):lR(this,e,t,!0),t+4},NS.prototype.writeInt32BE=function(e,t,n){return e=+e,t|=0,n||nR(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),NS.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):lR(this,e,t,!1),t+4},NS.prototype.writeFloatLE=function(e,t,n){return cR(this,e,t,!0,n)},NS.prototype.writeFloatBE=function(e,t,n){return cR(this,e,t,!1,n)},NS.prototype.writeDoubleLE=function(e,t,n){return aR(this,e,t,!0,n)},NS.prototype.writeDoubleBE=function(e,t,n){return aR(this,e,t,!1,n)},NS.prototype.copy=function(e,t,n,i){if(n||(n=0),i||0===i||(i=this.length),t>=e.length&&(t=e.length),t||(t=0),i>0&&i<n&&(i=n),i===n)return 0;if(0===e.length||0===this.length)return 0;if(t<0)throw new RangeError("targetStart out of bounds");if(n<0||n>=this.length)throw new RangeError("sourceStart out of bounds");if(i<0)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),e.length-t<i-n&&(i=e.length-t+n);var l,o=i-n;if(this===e&&n<t&&t<i)for(l=o-1;l>=0;--l)e[l+t]=this[l+n];else if(o<1e3||!NS.TYPED_ARRAY_SUPPORT)for(l=0;l<o;++l)e[l+t]=this[l+n];else Uint8Array.prototype.set.call(e,this.subarray(n,n+o),t);return o},NS.prototype.fill=function(e,t,n,i){if("string"==typeof e){if("string"==typeof t?(i=t,t=0,n=this.length):"string"==typeof n&&(i=n,n=this.length),1===e.length){var l=e.charCodeAt(0);l<256&&(e=l)}if(void 0!==i&&"string"!=typeof i)throw new TypeError("encoding must be a string");if("string"==typeof i&&!NS.isEncoding(i))throw new TypeError("Unknown encoding: "+i)}else"number"==typeof e&&(e&=255);if(t<0||this.length<t||this.length<n)throw new RangeError("Out of range index");if(n<=t)return this;var o;if(t>>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"==typeof e)for(o=t;o<n;++o)this[o]=e;else{var c=TS(e)?e:dR(new NS(e,i).toString()),a=c.length;for(o=0;o<n-t;++o)this[o+t]=c[o%a]}return this};var rR=/[^+\/0-9A-Za-z-_]/g;function sR(e){return e<16?"0"+e.toString(16):e.toString(16)}function dR(e,t){var n;t=t||1/0;for(var i=e.length,l=null,o=[],c=0;c<i;++c){if((n=e.charCodeAt(c))>55295&&n<57344){if(!l){if(n>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(c+1===i){(t-=3)>-1&&o.push(239,191,189);continue}l=n;continue}if(n<56320){(t-=3)>-1&&o.push(239,191,189),l=n;continue}n=65536+(l-55296<<10|n-56320)}else l&&(t-=3)>-1&&o.push(239,191,189);if(l=null,n<128){if((t-=1)<0)break;o.push(n)}else if(n<2048){if((t-=2)<0)break;o.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;o.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return o}function uR(e){return function(e){var t,n,i,l,o,c;XS||WS();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 GS(3*a/4-o),i=o>0?a-4:a;var r=0;for(t=0,n=0;t<i;t+=4,n+=3)l=yS[e.charCodeAt(t)]<<18|yS[e.charCodeAt(t+1)]<<12|yS[e.charCodeAt(t+2)]<<6|yS[e.charCodeAt(t+3)],c[r++]=l>>16&255,c[r++]=l>>8&255,c[r++]=255&l;return 2===o?(l=yS[e.charCodeAt(t)]<<2|yS[e.charCodeAt(t+1)]>>4,c[r++]=255&l):1===o&&(l=yS[e.charCodeAt(t)]<<10|yS[e.charCodeAt(t+1)]<<4|yS[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(rR,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function ZR(e,t,n,i){for(var l=0;l<i&&!(l+n>=t.length||l>=e.length);++l)t[l+n]=e[l];return l}function hR(e){return null!=e&&(!!e._isBuffer||bR(e)||function(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&bR(e.slice(0,0))}(e))}function bR(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}var mR=Object.freeze({__proto__:null,Buffer:NS,INSPECT_MAX_BYTES:50,SlowBuffer:function(e){return+e!=e&&(e=0),NS.alloc(+e)},isBuffer:hR,kMaxLength:vS});class pR extends Error{static from(e,t,n,i,l,o){const c=new pR(e.message,t||e.code,n,i,l);return c.cause=e,c.name=e.name,null!=e.status&&null==c.status&&(c.status=e.status),o&&Object.assign(c,o),c}constructor(e,t,n,i,l){super(e),Object.defineProperty(this,"message",{value:e,enumerable:!0,writable:!0,configurable:!0}),this.name="AxiosError",this.isAxiosError=!0,t&&(this.code=t),n&&(this.config=n),i&&(this.request=i),l&&(this.response=l,this.status=l.status)}toJSON(){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:mS.toJSONObject(this.config),code:this.code,status:this.status}}}pR.ERR_BAD_OPTION_VALUE="ERR_BAD_OPTION_VALUE",pR.ERR_BAD_OPTION="ERR_BAD_OPTION",pR.ECONNABORTED="ECONNABORTED",pR.ETIMEDOUT="ETIMEDOUT",pR.ERR_NETWORK="ERR_NETWORK",pR.ERR_FR_TOO_MANY_REDIRECTS="ERR_FR_TOO_MANY_REDIRECTS",pR.ERR_DEPRECATED="ERR_DEPRECATED",pR.ERR_BAD_RESPONSE="ERR_BAD_RESPONSE",pR.ERR_BAD_REQUEST="ERR_BAD_REQUEST",pR.ERR_CANCELED="ERR_CANCELED",pR.ERR_NOT_SUPPORT="ERR_NOT_SUPPORT",pR.ERR_INVALID_URL="ERR_INVALID_URL";var yR=pR;function GR(e){return mS.isPlainObject(e)||mS.isArray(e)}function XR(e){return mS.endsWith(e,"[]")?e.slice(0,-2):e}function WR(e,t,n){return e?e.concat(t).map((function(e,t){return e=XR(e),!n&&t?"["+e+"]":e})).join(n?".":""):t}const VR=mS.toFlatObject(mS,{},null,(function(e){return/^is[A-Z]/.test(e)}));function IR(e,t,n){if(!mS.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const i=(n=mS.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(e,t){return!mS.isUndefined(t[e])}))).metaTokens,l=n.visitor||s,o=n.dots,c=n.indexes,a=(n.Blob||"undefined"!=typeof Blob&&Blob)&&mS.isSpecCompliantForm(t);if(!mS.isFunction(l))throw new TypeError("visitor must be a function");function r(e){if(null===e)return"";if(mS.isDate(e))return e.toISOString();if(mS.isBoolean(e))return e.toString();if(!a&&mS.isBlob(e))throw new yR("Blob is not supported. Use a Buffer instead.");return mS.isArrayBuffer(e)||mS.isTypedArray(e)?a&&"function"==typeof Blob?new Blob([e]):NS.from(e):e}function s(e,n,l){let a=e;if(mS.isReactNative(t)&&mS.isReactNativeBlob(e))return t.append(WR(l,n,o),r(e)),!1;if(e&&!l&&"object"==typeof e)if(mS.endsWith(n,"{}"))n=i?n:n.slice(0,-2),e=JSON.stringify(e);else if(mS.isArray(e)&&function(e){return mS.isArray(e)&&!e.some(GR)}(e)||(mS.isFileList(e)||mS.endsWith(n,"[]"))&&(a=mS.toArray(e)))return n=XR(n),a.forEach((function(e,i){!mS.isUndefined(e)&&null!==e&&t.append(!0===c?WR([n],i,o):null===c?n:n+"[]",r(e))})),!1;return!!GR(e)||(t.append(WR(l,n,o),r(e)),!1)}const d=[],u=Object.assign(VR,{defaultVisitor:s,convertValue:r,isVisitable:GR});if(!mS.isObject(e))throw new TypeError("data must be an object");return function e(n,i){if(!mS.isUndefined(n)){if(-1!==d.indexOf(n))throw Error("Circular reference detected in "+i.join("."));d.push(n),mS.forEach(n,(function(n,o){!0===(!(mS.isUndefined(n)||null===n)&&l.call(t,n,mS.isString(o)?o.trim():o,i,u))&&e(n,i?i.concat(o):[o])})),d.pop()}}(e),t}function SR(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,(function(e){return t[e]}))}function RR(e,t){this._pairs=[],e&&IR(e,this,t)}const gR=RR.prototype;function fR(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function vR(e,t,n){if(!t)return e;const i=n&&n.encode||fR,l=mS.isFunction(n)?{serialize:n}:n,o=l&&l.serialize;let c;if(c=o?o(t,l):mS.isURLSearchParams(t)?t.toString():new RR(t,l).toString(i),c){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+c}return e}gR.append=function(e,t){this._pairs.push([e,t])},gR.toString=function(e){const t=e?function(t){return e.call(this,t,SR)}:SR;return this._pairs.map((function(e){return t(e[0])+"="+t(e[1])}),"").join("&")};var YR=class{constructor(){this.handlers=[]}use(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){mS.forEach(this.handlers,(function(t){null!==t&&e(t)}))}},KR={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1,legacyInterceptorReqResOrdering:!0},NR={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:RR,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]};const CR="undefined"!=typeof window&&"undefined"!=typeof document,JR="object"==typeof navigator&&navigator||void 0,kR=CR&&(!JR||["ReactNative","NativeScript","NS"].indexOf(JR.product)<0),UR="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,LR=CR&&window.location.href||"http://localhost";var TR={...Object.freeze({__proto__:null,hasBrowserEnv:CR,hasStandardBrowserWebWorkerEnv:UR,hasStandardBrowserEnv:kR,navigator:JR,origin:LR}),...NR};function HR(e){function t(e,n,i,l){let o=e[l++];if("__proto__"===o)return!0;const c=Number.isFinite(+o),a=l>=e.length;if(o=!o&&mS.isArray(i)?i.length:o,a)return mS.hasOwnProp(i,o)?i[o]=[i[o],n]:i[o]=n,!c;i[o]&&mS.isObject(i[o])||(i[o]=[]);return t(e,n,i[o],l)&&mS.isArray(i[o])&&(i[o]=function(e){const t={},n=Object.keys(e);let i;const l=n.length;let o;for(i=0;i<l;i++)o=n[i],t[o]=e[o];return t}(i[o])),!c}if(mS.isFormData(e)&&mS.isFunction(e.entries)){const n={};return mS.forEachEntry(e,((e,i)=>{t(function(e){return mS.matchAll(/\w+|\[(\w*)]/g,e).map((e=>"[]"===e[0]?"":e[1]||e[0]))}(e),i,n,0)})),n}return null}const xR={transitional:KR,adapter:["xhr","http","fetch"],transformRequest:[function(e,t){const n=t.getContentType()||"",i=n.indexOf("application/json")>-1,l=mS.isObject(e);l&&mS.isHTMLForm(e)&&(e=new FormData(e));if(mS.isFormData(e))return i?JSON.stringify(HR(e)):e;if(mS.isArrayBuffer(e)||mS.isBuffer(e)||mS.isStream(e)||mS.isFile(e)||mS.isBlob(e)||mS.isReadableStream(e))return e;if(mS.isArrayBufferView(e))return e.buffer;if(mS.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let o;if(l){if(n.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return IR(e,new TR.classes.URLSearchParams,{visitor:function(e,t,n,i){return TR.isNode&&mS.isBuffer(e)?(this.append(t,e.toString("base64")),!1):i.defaultVisitor.apply(this,arguments)},...t})}(e,this.formSerializer).toString();if((o=mS.isFileList(e))||n.indexOf("multipart/form-data")>-1){const t=this.env&&this.env.FormData;return IR(o?{"files[]":e}:e,t&&new t,this.formSerializer)}}return l||i?(t.setContentType("application/json",!1),function(e,t,n){if(mS.isString(e))try{return(t||JSON.parse)(e),mS.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const t=this.transitional||xR.transitional,n=t&&t.forcedJSONParsing,i="json"===this.responseType;if(mS.isResponse(e)||mS.isReadableStream(e))return e;if(e&&mS.isString(e)&&(n&&!this.responseType||i)){const n=!(t&&t.silentJSONParsing)&&i;try{return JSON.parse(e,this.parseReviver)}catch(e){if(n){if("SyntaxError"===e.name)throw yR.from(e,yR.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:TR.classes.FormData,Blob:TR.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};mS.forEach(["delete","get","head","post","put","patch"],(e=>{xR.headers[e]={}}));var wR=xR;const FR=mS.toObjectSet(["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"]);const zR=Symbol("internals");function PR(e){return e&&String(e).trim().toLowerCase()}function BR(e){return!1===e||null==e?e:mS.isArray(e)?e.map(BR):String(e)}function jR(e,t,n,i,l){return mS.isFunction(i)?i.call(this,t,n):(l&&(t=n),mS.isString(t)?mS.isString(i)?-1!==t.indexOf(i):mS.isRegExp(i)?i.test(t):void 0:void 0)}class QR{constructor(e){e&&this.set(e)}set(e,t,n){const i=this;function l(e,t,n){const l=PR(t);if(!l)throw new Error("header name must be a non-empty string");const o=mS.findKey(i,l);(!o||void 0===i[o]||!0===n||void 0===n&&!1!==i[o])&&(i[o||t]=BR(e))}const o=(e,t)=>mS.forEach(e,((e,n)=>l(e,n,t)));if(mS.isPlainObject(e)||e instanceof this.constructor)o(e,t);else if(mS.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim()))o((e=>{const t={};let n,i,l;return e&&e.split("\n").forEach((function(e){l=e.indexOf(":"),n=e.substring(0,l).trim().toLowerCase(),i=e.substring(l+1).trim(),!n||t[n]&&FR[n]||("set-cookie"===n?t[n]?t[n].push(i):t[n]=[i]:t[n]=t[n]?t[n]+", "+i:i)})),t})(e),t);else if(mS.isObject(e)&&mS.isIterable(e)){let n,i,l={};for(const t of e){if(!mS.isArray(t))throw TypeError("Object iterator must return a key-value pair");l[i=t[0]]=(n=l[i])?mS.isArray(n)?[...n,t[1]]:[n,t[1]]:t[1]}o(l,t)}else null!=e&&l(t,e,n);return this}get(e,t){if(e=PR(e)){const n=mS.findKey(this,e);if(n){const e=this[n];if(!t)return e;if(!0===t)return function(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let i;for(;i=n.exec(e);)t[i[1]]=i[2];return t}(e);if(mS.isFunction(t))return t.call(this,e,n);if(mS.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=PR(e)){const n=mS.findKey(this,e);return!(!n||void 0===this[n]||t&&!jR(0,this[n],n,t))}return!1}delete(e,t){const n=this;let i=!1;function l(e){if(e=PR(e)){const l=mS.findKey(n,e);!l||t&&!jR(0,n[l],l,t)||(delete n[l],i=!0)}}return mS.isArray(e)?e.forEach(l):l(e),i}clear(e){const t=Object.keys(this);let n=t.length,i=!1;for(;n--;){const l=t[n];e&&!jR(0,this[l],l,e,!0)||(delete this[l],i=!0)}return i}normalize(e){const t=this,n={};return mS.forEach(this,((i,l)=>{const o=mS.findKey(n,l);if(o)return t[o]=BR(i),void delete t[l];const c=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,((e,t,n)=>t.toUpperCase()+n))}(l):String(l).trim();c!==l&&delete t[l],t[c]=BR(i),n[c]=!0})),this}concat(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return this.constructor.concat(this,...t)}toJSON(e){const t=Object.create(null);return mS.forEach(this,((n,i)=>{null!=n&&!1!==n&&(t[i]=e&&mS.isArray(n)?n.join(", "):n)})),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map((e=>{let[t,n]=e;return t+": "+n})).join("\n")}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e){const t=new this(e);for(var n=arguments.length,i=new Array(n>1?n-1:0),l=1;l<n;l++)i[l-1]=arguments[l];return i.forEach((e=>t.set(e))),t}static accessor(e){const t=(this[zR]=this[zR]={accessors:{}}).accessors,n=this.prototype;function i(e){const i=PR(e);t[i]||(!function(e,t){const n=mS.toCamelCase(" "+t);["get","set","has"].forEach((i=>{Object.defineProperty(e,i+n,{value:function(e,n,l){return this[i].call(this,t,e,n,l)},configurable:!0})}))}(n,e),t[i]=!0)}return mS.isArray(e)?e.forEach(i):i(e),this}}QR.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),mS.reduceDescriptors(QR.prototype,((e,t)=>{let{value:n}=e,i=t[0].toUpperCase()+t.slice(1);return{get:()=>n,set(e){this[i]=e}}})),mS.freezeMethods(QR);var MR=QR;function ER(e,t){const n=this||wR,i=t||n,l=MR.from(i.headers);let o=i.data;return mS.forEach(e,(function(e){o=e.call(n,o,l.normalize(),t?t.status:void 0)})),l.normalize(),o}function DR(e){return!(!e||!e.__CANCEL__)}var OR=class extends yR{constructor(e,t,n){super(null==e?"canceled":e,yR.ERR_CANCELED,t,n),this.name="CanceledError",this.__CANCEL__=!0}};function AR(e,t,n){const i=n.config.validateStatus;n.status&&i&&!i(n.status)?t(new yR("Request failed with status code "+n.status,[yR.ERR_BAD_REQUEST,yR.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):e(n)}function _R(e,t){e=e||10;const n=new Array(e),i=new Array(e);let l,o=0,c=0;return t=void 0!==t?t:1e3,function(a){const r=Date.now(),s=i[c];l||(l=r),n[o]=a,i[o]=r;let d=c,u=0;for(;d!==o;)u+=n[d++],d%=e;if(o=(o+1)%e,o===c&&(c=(c+1)%e),r-l<t)return;const Z=s&&r-s;return Z?Math.round(1e3*u/Z):void 0}}function qR(e,t){let n,i,l=0,o=1e3/t;const c=function(t){let o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Date.now();l=o,n=null,i&&(clearTimeout(i),i=null),e(...t)};return[function(){const e=Date.now(),t=e-l;for(var a=arguments.length,r=new Array(a),s=0;s<a;s++)r[s]=arguments[s];t>=o?c(r,e):(n=r,i||(i=setTimeout((()=>{i=null,c(n)}),o-t)))},()=>n&&c(n)]}const $R=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:3,i=0;const l=_R(50,250);return qR((n=>{const o=n.loaded,c=n.lengthComputable?n.total:void 0,a=o-i,r=l(a);i=o;e({loaded:o,total:c,progress:c?o/c:void 0,bytes:a,rate:r||void 0,estimated:r&&c&&o<=c?(c-o)/r:void 0,event:n,lengthComputable:null!=c,[t?"download":"upload"]:!0})}),n)},eg=(e,t)=>{const n=null!=e;return[i=>t[0]({lengthComputable:n,total:e,loaded:i}),t[1]]},tg=e=>function(){for(var t=arguments.length,n=new Array(t),i=0;i<t;i++)n[i]=arguments[i];return mS.asap((()=>e(...n)))};var ng=TR.hasStandardBrowserEnv?((e,t)=>n=>(n=new URL(n,TR.origin),e.protocol===n.protocol&&e.host===n.host&&(t||e.port===n.port)))(new URL(TR.origin),TR.navigator&&/(msie|trident)/i.test(TR.navigator.userAgent)):()=>!0,ig=TR.hasStandardBrowserEnv?{write(e,t,n,i,l,o,c){if("undefined"==typeof document)return;const a=["".concat(e,"=").concat(encodeURIComponent(t))];mS.isNumber(n)&&a.push("expires=".concat(new Date(n).toUTCString())),mS.isString(i)&&a.push("path=".concat(i)),mS.isString(l)&&a.push("domain=".concat(l)),!0===o&&a.push("secure"),mS.isString(c)&&a.push("SameSite=".concat(c)),document.cookie=a.join("; ")},read(e){if("undefined"==typeof document)return null;const t=document.cookie.match(new RegExp("(?:^|; )"+e+"=([^;]*)"));return t?decodeURIComponent(t[1]):null},remove(e){this.write(e,"",Date.now()-864e5,"/")}}:{write(){},read:()=>null,remove(){}};function lg(e,t,n){let i=!function(e){return"string"==typeof e&&/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}(t);return e&&(i||0==n)?function(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}const og=e=>e instanceof MR?{...e}:e;function cg(e,t){t=t||{};const n={};function i(e,t,n,i){return mS.isPlainObject(e)&&mS.isPlainObject(t)?mS.merge.call({caseless:i},e,t):mS.isPlainObject(t)?mS.merge({},t):mS.isArray(t)?t.slice():t}function l(e,t,n,l){return mS.isUndefined(t)?mS.isUndefined(e)?void 0:i(void 0,e,0,l):i(e,t,0,l)}function o(e,t){if(!mS.isUndefined(t))return i(void 0,t)}function c(e,t){return mS.isUndefined(t)?mS.isUndefined(e)?void 0:i(void 0,e):i(void 0,t)}function a(n,l,o){return o in t?i(n,l):o in e?i(void 0,n):void 0}const 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,headers:(e,t,n)=>l(og(e),og(t),0,!0)};return mS.forEach(Object.keys({...e,...t}),(function(i){if("__proto__"===i||"constructor"===i||"prototype"===i)return;const o=mS.hasOwnProp(r,i)?r[i]:l,c=o(e[i],t[i],i);mS.isUndefined(c)&&o!==a||(n[i]=c)})),n}var ag=e=>{const t=cg({},e);let{data:n,withXSRFToken:i,xsrfHeaderName:l,xsrfCookieName:o,headers:c,auth:a}=t;if(t.headers=c=MR.from(c),t.url=vR(lg(t.baseURL,t.url,t.allowAbsoluteUrls),e.params,e.paramsSerializer),a&&c.set("Authorization","Basic "+btoa((a.username||"")+":"+(a.password?unescape(encodeURIComponent(a.password)):""))),mS.isFormData(n))if(TR.hasStandardBrowserEnv||TR.hasStandardBrowserWebWorkerEnv)c.setContentType(void 0);else if(mS.isFunction(n.getHeaders)){const e=n.getHeaders(),t=["content-type","content-length"];Object.entries(e).forEach((e=>{let[n,i]=e;t.includes(n.toLowerCase())&&c.set(n,i)}))}if(TR.hasStandardBrowserEnv&&(i&&mS.isFunction(i)&&(i=i(t)),i||!1!==i&&ng(t.url))){const e=l&&o&&ig.read(o);e&&c.set(l,e)}return t};var rg="undefined"!=typeof XMLHttpRequest&&function(e){return new Promise((function(t,n){const i=ag(e);let l=i.data;const o=MR.from(i.headers).normalize();let c,a,r,s,d,{responseType:u,onUploadProgress:Z,onDownloadProgress:h}=i;function b(){s&&s(),d&&d(),i.cancelToken&&i.cancelToken.unsubscribe(c),i.signal&&i.signal.removeEventListener("abort",c)}let m=new XMLHttpRequest;function p(){if(!m)return;const i=MR.from("getAllResponseHeaders"in m&&m.getAllResponseHeaders());AR((function(e){t(e),b()}),(function(e){n(e),b()}),{data:u&&"text"!==u&&"json"!==u?m.response:m.responseText,status:m.status,statusText:m.statusText,headers:i,config:e,request:m}),m=null}m.open(i.method.toUpperCase(),i.url,!0),m.timeout=i.timeout,"onloadend"in m?m.onloadend=p:m.onreadystatechange=function(){m&&4===m.readyState&&(0!==m.status||m.responseURL&&0===m.responseURL.indexOf("file:"))&&setTimeout(p)},m.onabort=function(){m&&(n(new yR("Request aborted",yR.ECONNABORTED,e,m)),m=null)},m.onerror=function(t){const i=t&&t.message?t.message:"Network Error",l=new yR(i,yR.ERR_NETWORK,e,m);l.event=t||null,n(l),m=null},m.ontimeout=function(){let t=i.timeout?"timeout of "+i.timeout+"ms exceeded":"timeout exceeded";const l=i.transitional||KR;i.timeoutErrorMessage&&(t=i.timeoutErrorMessage),n(new yR(t,l.clarifyTimeoutError?yR.ETIMEDOUT:yR.ECONNABORTED,e,m)),m=null},void 0===l&&o.setContentType(null),"setRequestHeader"in m&&mS.forEach(o.toJSON(),(function(e,t){m.setRequestHeader(t,e)})),mS.isUndefined(i.withCredentials)||(m.withCredentials=!!i.withCredentials),u&&"json"!==u&&(m.responseType=i.responseType),h&&([r,d]=$R(h,!0),m.addEventListener("progress",r)),Z&&m.upload&&([a,s]=$R(Z),m.upload.addEventListener("progress",a),m.upload.addEventListener("loadend",s)),(i.cancelToken||i.signal)&&(c=t=>{m&&(n(!t||t.type?new OR(null,e,m):t),m.abort(),m=null)},i.cancelToken&&i.cancelToken.subscribe(c),i.signal&&(i.signal.aborted?c():i.signal.addEventListener("abort",c)));const y=function(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}(i.url);y&&-1===TR.protocols.indexOf(y)?n(new yR("Unsupported protocol "+y+":",yR.ERR_BAD_REQUEST,e)):m.send(l||null)}))};var sg=(e,t)=>{const{length:n}=e=e?e.filter(Boolean):[];if(t||n){let n,i=new AbortController;const l=function(e){if(!n){n=!0,c();const t=e instanceof Error?e:this.reason;i.abort(t instanceof yR?t:new OR(t instanceof Error?t.message:t))}};let o=t&&setTimeout((()=>{o=null,l(new yR("timeout of ".concat(t,"ms exceeded"),yR.ETIMEDOUT))}),t);const c=()=>{e&&(o&&clearTimeout(o),o=null,e.forEach((e=>{e.unsubscribe?e.unsubscribe(l):e.removeEventListener("abort",l)})),e=null)};e.forEach((e=>e.addEventListener("abort",l)));const{signal:a}=i;return a.unsubscribe=()=>mS.asap(c),a}};const dg=function*(e,t){let n=e.byteLength;if(!t||n<t)return void(yield e);let i,l=0;for(;l<n;)i=l+t,yield e.slice(l,i),l=i},ug=async function*(e){if(e[Symbol.asyncIterator])return void(yield*e);const t=e.getReader();try{for(;;){const{done:e,value:n}=await t.read();if(e)break;yield n}}finally{await t.cancel()}},Zg=(e,t,n,i)=>{const l=async function*(e,t){for await(const n of ug(e))yield*dg(n,t)}(e,t);let o,c=0,a=e=>{o||(o=!0,i&&i(e))};return new ReadableStream({async pull(e){try{const{done:t,value:i}=await l.next();if(t)return a(),void e.close();let o=i.byteLength;if(n){let e=c+=o;n(e)}e.enqueue(new Uint8Array(i))}catch(e){throw a(e),e}},cancel:e=>(a(e),l.return())},{highWaterMark:2})},{isFunction:hg}=mS,bg=(e=>{let{Request:t,Response:n}=e;return{Request:t,Response:n}})(mS.global),{ReadableStream:mg,TextEncoder:pg}=mS.global,yg=function(e){try{for(var t=arguments.length,n=new Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];return!!e(...n)}catch(e){return!1}},Gg=e=>{e=mS.merge.call({skipUndefined:!0},bg,e);const{fetch:t,Request:n,Response:i}=e,l=t?hg(t):"function"==typeof fetch,o=hg(n),c=hg(i);if(!l)return!1;const a=l&&hg(mg),r=l&&("function"==typeof pg?(e=>t=>e.encode(t))(new pg):async e=>new Uint8Array(await new n(e).arrayBuffer())),s=o&&a&&yg((()=>{let e=!1;const t=new n(TR.origin,{body:new mg,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!t})),d=c&&a&&yg((()=>mS.isReadableStream(new i("").body))),u={stream:d&&(e=>e.body)};l&&["text","arrayBuffer","blob","formData","stream"].forEach((e=>{!u[e]&&(u[e]=(t,n)=>{let i=t&&t[e];if(i)return i.call(t);throw new yR("Response type '".concat(e,"' is not supported"),yR.ERR_NOT_SUPPORT,n)})}));const Z=async(e,t)=>{const i=mS.toFiniteNumber(e.getContentLength());return null==i?(async e=>{if(null==e)return 0;if(mS.isBlob(e))return e.size;if(mS.isSpecCompliantForm(e)){const t=new n(TR.origin,{method:"POST",body:e});return(await t.arrayBuffer()).byteLength}return mS.isArrayBufferView(e)||mS.isArrayBuffer(e)?e.byteLength:(mS.isURLSearchParams(e)&&(e+=""),mS.isString(e)?(await r(e)).byteLength:void 0)})(t):i};return async e=>{let{url:l,method:c,data:a,signal:r,cancelToken:h,timeout:b,onDownloadProgress:m,onUploadProgress:p,responseType:y,headers:G,withCredentials:X="same-origin",fetchOptions:W}=ag(e),V=t||fetch;y=y?(y+"").toLowerCase():"text";let I=sg([r,h&&h.toAbortSignal()],b),S=null;const R=I&&I.unsubscribe&&(()=>{I.unsubscribe()});let g;try{if(p&&s&&"get"!==c&&"head"!==c&&0!==(g=await Z(G,a))){let e,t=new n(l,{method:"POST",body:a,duplex:"half"});if(mS.isFormData(a)&&(e=t.headers.get("content-type"))&&G.setContentType(e),t.body){const[e,n]=eg(g,$R(tg(p)));a=Zg(t.body,65536,e,n)}}mS.isString(X)||(X=X?"include":"omit");const t=o&&"credentials"in n.prototype,r={...W,signal:I,method:c.toUpperCase(),headers:G.normalize().toJSON(),body:a,duplex:"half",credentials:t?X:void 0};S=o&&new n(l,r);let h=await(o?V(S,W):V(l,r));const b=d&&("stream"===y||"response"===y);if(d&&(m||b&&R)){const e={};["status","statusText","headers"].forEach((t=>{e[t]=h[t]}));const t=mS.toFiniteNumber(h.headers.get("content-length")),[n,l]=m&&eg(t,$R(tg(m),!0))||[];h=new i(Zg(h.body,65536,n,(()=>{l&&l(),R&&R()})),e)}y=y||"text";let f=await u[mS.findKey(u,y)||"text"](h,e);return!b&&R&&R(),await new Promise(((t,n)=>{AR(t,n,{data:f,headers:MR.from(h.headers),status:h.status,statusText:h.statusText,config:e,request:S})}))}catch(t){if(R&&R(),t&&"TypeError"===t.name&&/Load failed|fetch/i.test(t.message))throw Object.assign(new yR("Network Error",yR.ERR_NETWORK,e,S,t&&t.response),{cause:t.cause||t});throw yR.from(t,t&&t.code,e,S,t&&t.response)}}},Xg=new Map,Wg=e=>{let t=e&&e.env||{};const{fetch:n,Request:i,Response:l}=t,o=[i,l,n];let c,a,r=o.length,s=Xg;for(;r--;)c=o[r],a=s.get(c),void 0===a&&s.set(c,a=r?new Map:Gg(t)),s=a;return a};Wg();const Vg={http:null,xhr:rg,fetch:{get:Wg}};mS.forEach(Vg,((e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch(e){}Object.defineProperty(e,"adapterName",{value:t})}}));const Ig=e=>"- ".concat(e),Sg=e=>mS.isFunction(e)||null===e||!1===e;var Rg={getAdapter:function(e,t){e=mS.isArray(e)?e:[e];const{length:n}=e;let i,l;const o={};for(let c=0;c<n;c++){let n;if(i=e[c],l=i,!Sg(i)&&(l=Vg[(n=String(i)).toLowerCase()],void 0===l))throw new yR("Unknown adapter '".concat(n,"'"));if(l&&(mS.isFunction(l)||(l=l.get(t))))break;o[n||"#"+c]=l}if(!l){const e=Object.entries(o).map((e=>{let[t,n]=e;return"adapter ".concat(t," ")+(!1===n?"is not supported by the environment":"is not available in the build")}));let t=n?e.length>1?"since :\n"+e.map(Ig).join("\n"):" "+Ig(e[0]):"as no adapter specified";throw new yR("There is no suitable adapter to dispatch the request "+t,"ERR_NOT_SUPPORT")}return l},adapters:Vg};function gg(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new OR(null,e)}function fg(e){gg(e),e.headers=MR.from(e.headers),e.data=ER.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1);return Rg.getAdapter(e.adapter||wR.adapter,e)(e).then((function(t){return gg(e),t.data=ER.call(e,e.transformResponse,t),t.headers=MR.from(t.headers),t}),(function(t){return DR(t)||(gg(e),t&&t.response&&(t.response.data=ER.call(e,e.transformResponse,t.response),t.response.headers=MR.from(t.response.headers))),Promise.reject(t)}))}const vg="1.13.6",Yg={};["object","boolean","number","function","string","symbol"].forEach(((e,t)=>{Yg[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}}));const Kg={};Yg.transitional=function(e,t,n){function i(e,t){return"[Axios v1.13.6] Transitional option '"+e+"'"+t+(n?". "+n:"")}return(n,l,o)=>{if(!1===e)throw new yR(i(l," has been removed"+(t?" in "+t:"")),yR.ERR_DEPRECATED);return t&&!Kg[l]&&(Kg[l]=!0,console.warn(i(l," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,l,o)}},Yg.spelling=function(e){return(t,n)=>(console.warn("".concat(n," is likely a misspelling of ").concat(e)),!0)};var Ng={assertOptions:function(e,t,n){if("object"!=typeof e)throw new yR("options must be an object",yR.ERR_BAD_OPTION_VALUE);const i=Object.keys(e);let l=i.length;for(;l-- >0;){const o=i[l],c=t[o];if(c){const t=e[o],n=void 0===t||c(t,o,e);if(!0!==n)throw new yR("option "+o+" must be "+n,yR.ERR_BAD_OPTION_VALUE)}else if(!0!==n)throw new yR("Unknown option "+o,yR.ERR_BAD_OPTION)}},validators:Yg};const Cg=Ng.validators;class Jg{constructor(e){this.defaults=e||{},this.interceptors={request:new YR,response:new YR}}async request(e,t){try{return await this._request(e,t)}catch(e){if(e instanceof Error){let t={};Error.captureStackTrace?Error.captureStackTrace(t):t=new Error;const n=t.stack?t.stack.replace(/^.+\n/,""):"";try{e.stack?n&&!String(e.stack).endsWith(n.replace(/^.+\n.+\n/,""))&&(e.stack+="\n"+n):e.stack=n}catch(e){}}throw e}}_request(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},t=cg(this.defaults,t);const{transitional:n,paramsSerializer:i,headers:l}=t;void 0!==n&&Ng.assertOptions(n,{silentJSONParsing:Cg.transitional(Cg.boolean),forcedJSONParsing:Cg.transitional(Cg.boolean),clarifyTimeoutError:Cg.transitional(Cg.boolean),legacyInterceptorReqResOrdering:Cg.transitional(Cg.boolean)},!1),null!=i&&(mS.isFunction(i)?t.paramsSerializer={serialize:i}:Ng.assertOptions(i,{encode:Cg.function,serialize:Cg.function},!0)),void 0!==t.allowAbsoluteUrls||(void 0!==this.defaults.allowAbsoluteUrls?t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:t.allowAbsoluteUrls=!0),Ng.assertOptions(t,{baseUrl:Cg.spelling("baseURL"),withXsrfToken:Cg.spelling("withXSRFToken")},!0),t.method=(t.method||this.defaults.method||"get").toLowerCase();let o=l&&mS.merge(l.common,l[t.method]);l&&mS.forEach(["delete","get","head","post","put","patch","common"],(e=>{delete l[e]})),t.headers=MR.concat(o,l);const c=[];let a=!0;this.interceptors.request.forEach((function(e){if("function"==typeof e.runWhen&&!1===e.runWhen(t))return;a=a&&e.synchronous;const n=t.transitional||KR;n&&n.legacyInterceptorReqResOrdering?c.unshift(e.fulfilled,e.rejected):c.push(e.fulfilled,e.rejected)}));const r=[];let s;this.interceptors.response.forEach((function(e){r.push(e.fulfilled,e.rejected)}));let d,u=0;if(!a){const e=[fg.bind(this),void 0];for(e.unshift(...c),e.push(...r),d=e.length,s=Promise.resolve(t);u<d;)s=s.then(e[u++],e[u++]);return s}d=c.length;let Z=t;for(;u<d;){const e=c[u++],t=c[u++];try{Z=e(Z)}catch(e){t.call(this,e);break}}try{s=fg.call(this,Z)}catch(e){return Promise.reject(e)}for(u=0,d=r.length;u<d;)s=s.then(r[u++],r[u++]);return s}getUri(e){return vR(lg((e=cg(this.defaults,e)).baseURL,e.url,e.allowAbsoluteUrls),e.params,e.paramsSerializer)}}mS.forEach(["delete","get","head","options"],(function(e){Jg.prototype[e]=function(t,n){return this.request(cg(n||{},{method:e,url:t,data:(n||{}).data}))}})),mS.forEach(["post","put","patch"],(function(e){function t(t){return function(n,i,l){return this.request(cg(l||{},{method:e,headers:t?{"Content-Type":"multipart/form-data"}:{},url:n,data:i}))}}Jg.prototype[e]=t(),Jg.prototype[e+"Form"]=t(!0)}));var kg=Jg;class Ug{constructor(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");let t;this.promise=new Promise((function(e){t=e}));const n=this;this.promise.then((e=>{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null})),this.promise.then=e=>{let t;const i=new Promise((e=>{n.subscribe(e),t=e})).then(e);return i.cancel=function(){n.unsubscribe(t)},i},e((function(e,i,l){n.reason||(n.reason=new OR(e,i,l),t(n.reason))}))}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}toAbortSignal(){const e=new AbortController,t=t=>{e.abort(t)};return this.subscribe(t),e.signal.unsubscribe=()=>this.unsubscribe(t),e.signal}static source(){let e;const t=new Ug((function(t){e=t}));return{token:t,cancel:e}}}var Lg=Ug;const Tg={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(Tg).forEach((e=>{let[t,n]=e;Tg[n]=t}));var Hg=Tg;const xg=function e(t){const n=new kg(t),i=RI(kg.prototype.request,n);return mS.extend(i,kg.prototype,n,{allOwnKeys:!0}),mS.extend(i,n,null,{allOwnKeys:!0}),i.create=function(n){return e(cg(t,n))},i}(wR);xg.Axios=kg,xg.CanceledError=OR,xg.CancelToken=Lg,xg.isCancel=DR,xg.VERSION=vg,xg.toFormData=IR,xg.AxiosError=yR,xg.Cancel=xg.CanceledError,xg.all=function(e){return Promise.all(e)},xg.spread=function(e){return function(t){return e.apply(null,t)}},xg.isAxiosError=function(e){return mS.isObject(e)&&!0===e.isAxiosError},xg.mergeConfig=cg,xg.AxiosHeaders=MR,xg.formToJSON=e=>HR(mS.isHTMLForm(e)?new FormData(e):e),xg.getAdapter=Rg.getAdapter,xg.HttpStatusCode=Hg,xg.default=xg;var wg=xg;const{Axios:Fg,AxiosError:zg,CanceledError:Pg,isCancel:Bg,CancelToken:jg,VERSION:Qg,all:Mg,Cancel:Eg,isAxiosError:Dg,spread:Og,toFormData:Ag,AxiosHeaders:_g,HttpStatusCode:qg,formToJSON:$g,getAdapter:ef,mergeConfig:tf}=wg;var nf;let lf=nf=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=wg.create({withCredentials:!0}),this.clientInstance||(this.clientInstance=new nf),this.axiosInstance.interceptors.request.use((e=>kW(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=wg.all,this.axiosInstance.spread=wg.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 kW(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,n=new FormData;Object.keys(t).forEach((e=>{n.append(e,t[e])})),e.data=n}return e.startTimeInMs=(new Date).getTime(),nf.isHandlerEnabled&&this.requestStartCallback&&"function"==typeof this.requestStartCallback&&this.requestStartCallback(e),e}))}errorHandler(e){throw nf.isHandlerEnabled&&(this.requestErrorCallback&&"function"==typeof this.requestErrorCallback&&this.requestErrorCallback(e),this.requestFinishCallback&&"function"==typeof this.requestFinishCallback&&this.requestFinishCallback()),e}successHandler(e){var t,n;return"stream"===(null===(n=null===(t=e)||void 0===t?void 0:t.config)||void 0===n?void 0:n.responseType)||nf.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 kW(this,void 0,void 0,(function*(){nf.isHandlerEnabled=e,this.attachToken=t}))}enableHandler(){nf.isHandlerEnabled=!0}disableHandler(){nf.isHandlerEnabled=!1}disableHandlerWithTimeout(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:nf.DEFAULT_HANDLER_DISABLE_TIMEOUT;nf.isHandlerEnabled=!1,setTimeout((()=>{nf.isHandlerEnabled=!0}),e)}setHttpRequestStartCallback(e){this.requestStartCallback=e}setHttpRequestSuccessCallback(e){this.requestSuccessCallback=e}setHttpRequestErrorCallback(e){this.requestErrorCallback=e}setHttpRequestFinishCallback(e){this.requestFinishCallback=e}};lf.DEFAULT_HANDLER_DISABLE_TIMEOUT=1e3,lf=nf=function(e,t,n,i){var l,o=arguments.length,c=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)c=Reflect.decorate(e,t,n,i);else for(var a=e.length-1;a>=0;a--)(l=e[a])&&(c=(o<3?l(c):o>3?l(t,n,c):l(t,n))||c);return o>3&&c&&Object.defineProperty(t,n,c),c}([e=>{}],lf);class of{setData(e,t){return kW(this,void 0,void 0,(function*(){localStorage.setItem(e,t)}))}getData(e){var t;return kW(this,void 0,void 0,(function*(){return null!==(t=localStorage.getItem(e))&&void 0!==t?t:"{}"}))}removeData(e){return kW(this,void 0,void 0,(function*(){localStorage.removeItem(e)}))}}class cf{constructor(){this._data=new Map}setData(e,t){return kW(this,void 0,void 0,(function*(){this._data.set(e,t)}))}getData(e){var t,n;return kW(this,void 0,void 0,(function*(){return null!==(n=null===(t=this._data)||void 0===t?void 0:t.get(e))&&void 0!==n?n:"{}"}))}removeData(e){return kW(this,void 0,void 0,(function*(){this._data.delete(e)}))}}class af{setData(e,t){return kW(this,void 0,void 0,(function*(){sessionStorage.setItem(e,t)}))}getData(e){var t;return kW(this,void 0,void 0,(function*(){return null!==(t=sessionStorage.getItem(e))&&void 0!==t?t:"{}"}))}removeData(e){return kW(this,void 0,void 0,(function*(){sessionStorage.removeItem(e)}))}}var rf={exports:{}},sf={},df={};Object.defineProperty(df,"__esModule",{value:!0}),df.default=function(e){var t=e.length,n=t%4;if(!n)return e;var i=t,l=4-n,o=t+l,c=NS.alloc(o);for(c.write(e);l--;)c.write("=",i++);return c.toString()},Object.defineProperty(sf,"__esModule",{value:!0});var uf=df;function Zf(e,t){return void 0===t&&(t="utf8"),NS.isBuffer(e)?bf(e.toString("base64")):bf(NS.from(e,t).toString("base64"))}function hf(e){return e=e.toString(),uf.default(e).replace(/\-/g,"+").replace(/_/g,"/")}function bf(e){return e.replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}var mf,pf=Zf;pf.encode=Zf,pf.decode=function(e,t){return void 0===t&&(t="utf8"),NS.from(hf(e),"base64").toString(t)},pf.toBase64=hf,pf.fromBase64=bf,pf.toBuffer=function(e){return NS.from(hf(e),"base64")},sf.default=pf,(mf=rf).exports=sf.default,mf.exports.default=mf.exports;var yf=rf.exports,Gf={exports:{}};!function(e){!function(t,n){var i={};!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 n(e,n,i,l,o){for(var c,a,r,s,d,u,Z,h,b,m,p,y,G;o>=64;){for(c=n[0],a=n[1],r=n[2],s=n[3],d=n[4],u=n[5],Z=n[6],h=n[7],m=0;m<16;m++)p=l+4*m,e[m]=(255&i[p])<<24|(255&i[p+1])<<16|(255&i[p+2])<<8|255&i[p+3];for(m=16;m<64;m++)y=((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]=(y+e[m-7]|0)+(G+e[m-16]|0);for(m=0;m<64;m++)y=(((d>>>6|d<<26)^(d>>>11|d<<21)^(d>>>25|d<<7))+(d&u^~d&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=d,d=s+y|0,s=r,r=a,a=c,c=y+G|0;n[0]+=c,n[1]+=a,n[2]+=r,n[3]+=s,n[4]+=d,n[5]+=u,n[6]+=Z,n[7]+=h,l+=64,o-=64}return l}var i=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 i=0;if(this.bytesHashed+=t,this.bufferLength>0){for(;this.bufferLength<64&&t>0;)this.buffer[this.bufferLength++]=e[i++],t--;64===this.bufferLength&&(n(this.temp,this.state,this.buffer,0,64),this.bufferLength=0)}for(t>=64&&(i=n(this.temp,this.state,e,i,t),t%=64);t>0;)this.buffer[this.bufferLength++]=e[i++],t--;return this},t.prototype.finish=function(e){if(!this.finished){var t=this.bytesHashed,i=this.bufferLength,l=t/536870912|0,o=t<<3,c=t%64<56?64:128;this.buffer[i]=128;for(var a=i+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,n(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 n=0;n<this.state.length;n++)this.state[n]=e[n];this.bytesHashed=t,this.finished=!1,this.bufferLength=0},t}();e.Hash=i;var l=function(){function e(e){this.inner=new i,this.outer=new i,this.blockSize=this.inner.blockSize,this.digestLength=this.inner.digestLength;var t=new Uint8Array(this.blockSize);if(e.length>this.blockSize)(new i).update(e).finish(t).clean();else for(var n=0;n<e.length;n++)t[n]=e[n];for(n=0;n<t.length;n++)t[n]^=54;this.inner.update(t);for(n=0;n<t.length;n++)t[n]^=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(n=0;n<t.length;n++)t[n]=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 i).update(e),n=t.digest();return t.clean(),n}function c(e,t){var n=new l(e).update(t),i=n.digest();return n.clean(),i}function a(e,t,n,i){var l=i[0];if(0===l)throw new Error("hkdf: cannot expand more");t.reset(),l>1&&t.update(e),n&&t.update(n),t.update(i),t.finish(e),i[0]++}e.HMAC=l,e.hash=o,e.default=o,e.hmac=c;var r=new Uint8Array(e.digestLength);function s(e,t,n,i){void 0===t&&(t=r),void 0===i&&(i=32);for(var o=new Uint8Array([1]),s=c(t,e),d=new l(s),u=new Uint8Array(d.digestLength),Z=u.length,h=new Uint8Array(i),b=0;b<i;b++)Z===u.length&&(a(u,d,n,o),Z=0),h[b]=u[Z++];return d.clean(),u.fill(0),o.fill(0),h}function d(e,t,n,i){for(var o=new l(e),c=o.digestLength,a=new Uint8Array(4),r=new Uint8Array(c),s=new Uint8Array(c),d=new Uint8Array(i),u=0;u*c<i;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(s);for(var h=0;h<c;h++)r[h]=s[h];for(h=2;h<=n;h++){o.reset(),o.update(s).finish(s);for(var b=0;b<c;b++)r[b]^=s[b]}for(h=0;h<c&&u*c+h<i;h++)d[u*c+h]=r[h]}for(u=0;u<c;u++)r[u]=s[u]=0;for(u=0;u<4;u++)a[u]=0;return o.clean(),d}e.hkdf=s,e.pbkdf2=d}(i);var l=i.default;for(var o in i)l[o]=i[o];e.exports=l}()}(Gf);var Xf=n(Gf.exports),Wf=crypto;const Vf=e=>e instanceof CryptoKey,If=new TextEncoder,Sf=new TextDecoder;const Rf=e=>{let t=e;t instanceof Uint8Array&&(t=Sf.decode(t)),t=t.replace(/-/g,"+").replace(/_/g,"/").replace(/\s/g,"");try{return(e=>{const t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n})(t)}catch(e){throw new TypeError("The input to be decoded is not correctly encoded.")}};class gf 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 ff extends gf{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"unspecified",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"unspecified";super(e),this.code="ERR_JWT_CLAIM_VALIDATION_FAILED",this.claim=t,this.reason=n}static get code(){return"ERR_JWT_CLAIM_VALIDATION_FAILED"}}class vf extends gf{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"unspecified",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"unspecified";super(e),this.code="ERR_JWT_EXPIRED",this.claim=t,this.reason=n}static get code(){return"ERR_JWT_EXPIRED"}}class Yf extends gf{constructor(){super(...arguments),this.code="ERR_JOSE_ALG_NOT_ALLOWED"}static get code(){return"ERR_JOSE_ALG_NOT_ALLOWED"}}class Kf extends gf{constructor(){super(...arguments),this.code="ERR_JOSE_NOT_SUPPORTED"}static get code(){return"ERR_JOSE_NOT_SUPPORTED"}}class Nf extends gf{constructor(){super(...arguments),this.code="ERR_JWS_INVALID"}static get code(){return"ERR_JWS_INVALID"}}class Cf extends gf{constructor(){super(...arguments),this.code="ERR_JWT_INVALID"}static get code(){return"ERR_JWT_INVALID"}}class Jf extends gf{constructor(){super(...arguments),this.code="ERR_JWKS_INVALID"}static get code(){return"ERR_JWKS_INVALID"}}class kf extends gf{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 Uf extends gf{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 Lf extends gf{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 Tf(){return"function"==typeof WebSocketPair}function Hf(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 xf(e,t){return e.name===t}function wf(e){return parseInt(e.name.slice(4),10)}function Ff(e){switch(e){case"ES256":return"P-256";case"ES384":return"P-384";case"ES512":return"P-521";default:throw new Error("unreachable")}}function zf(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 n=t.pop();e+="one of ".concat(t.join(", "),", or ").concat(n,".")}else 2===t.length?e+="one of ".concat(t[0]," or ").concat(t[1],"."):e+="".concat(t[0],".");throw new TypeError(e)}}var Pf=function(e){let t="Key must be ";for(var n=arguments.length,i=new Array(n>1?n-1:0),l=1;l<n;l++)i[l-1]=arguments[l];if(i.length>2){const e=i.pop();t+="one of type ".concat(i.join(", "),", or ").concat(e,".")}else 2===i.length?t+="one of type ".concat(i[0]," or ").concat(i[1],"."):t+="of type ".concat(i[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},Bf=e=>Vf(e);const jf=["CryptoKey"];function Qf(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 n=e;for(;null!==Object.getPrototypeOf(n);)n=Object.getPrototypeOf(n);return Object.getPrototypeOf(e)===n}const Mf=async e=>{var t,n;const{algorithm:i,keyUsages:l}=function(e){let t,n;switch(e.kty){case"oct":switch(e.alg){case"HS256":case"HS384":case"HS512":t={name:"HMAC",hash:"SHA-".concat(e.alg.slice(-3))},n=["sign","verify"];break;case"A128CBC-HS256":case"A192CBC-HS384":case"A256CBC-HS512":throw new Kf("".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"},n=["encrypt","decrypt"];break;case"A128KW":case"A192KW":case"A256KW":t={name:"AES-KW"},n=["wrapKey","unwrapKey"];break;case"PBES2-HS256+A128KW":case"PBES2-HS384+A192KW":case"PBES2-HS512+A256KW":t={name:"PBKDF2"},n=["deriveBits"];break;default:throw new Kf('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))},n=e.d?["sign"]:["verify"];break;case"RS256":case"RS384":case"RS512":t={name:"RSASSA-PKCS1-v1_5",hash:"SHA-".concat(e.alg.slice(-3))},n=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)},n=e.d?["decrypt","unwrapKey"]:["encrypt","wrapKey"];break;default:throw new Kf('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case"EC":switch(e.alg){case"ES256":t={name:"ECDSA",namedCurve:"P-256"},n=e.d?["sign"]:["verify"];break;case"ES384":t={name:"ECDSA",namedCurve:"P-384"},n=e.d?["sign"]:["verify"];break;case"ES512":t={name:"ECDSA",namedCurve:"P-521"},n=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},n=e.d?["deriveBits"]:[];break;default:throw new Kf('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case Tf()&&"OKP":if("EdDSA"!==e.alg)throw new Kf('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');if("Ed25519"!==e.crv)throw new Kf('Invalid or unsupported JWK "crv" (Subtype of Key Pair) Parameter value');t={name:"NODE-ED25519",namedCurve:"NODE-ED25519"},n=e.d?["sign"]:["verify"];break;default:throw new Kf('Invalid or unsupported JWK "kty" (Key Type) Parameter value')}return{algorithm:t,keyUsages:n}}(e),o=[i,null!==(t=e.ext)&&void 0!==t&&t,null!==(n=e.key_ops)&&void 0!==n?n:l];if("PBKDF2"===i.name)return Wf.subtle.importKey("raw",Rf(e.k),...o);const c={...e};return delete c.alg,Wf.subtle.importKey("jwk",c,...o)};const Ef=(e,t,n)=>{e.startsWith("HS")||"dir"===e||e.startsWith("PBES2")||/^A\d{3}(?:GCM)?KW$/.test(e)?(e=>{if(!(e instanceof Uint8Array)){if(!Bf(e))throw new TypeError(Pf(e,...jf,"Uint8Array"));if("secret"!==e.type)throw new TypeError("".concat(jf.join(" or "),' instances for symmetric algorithms must be of type "secret"'))}})(t):((e,t)=>{if(!Bf(e))throw new TypeError(Pf(e,...jf));if("secret"===e.type)throw new TypeError("".concat(jf.join(" or "),' instances for asymmetric algorithms must not be of type "secret"'));if("sign"===t&&"public"===e.type)throw new TypeError("".concat(jf.join(" or "),' instances for asymmetric algorithm signing must be of type "private"'));if("decrypt"===t&&"public"===e.type)throw new TypeError("".concat(jf.join(" or "),' instances for asymmetric algorithm decryption must be of type "private"'));if(e.algorithm&&"verify"===t&&"private"===e.type)throw new TypeError("".concat(jf.join(" or "),' instances for asymmetric algorithm verifying must be of type "public"'));if(e.algorithm&&"encrypt"===t&&"private"===e.type)throw new TypeError("".concat(jf.join(" or "),' instances for asymmetric algorithm encryption must be of type "public"'))})(t,n)};function Df(e,t,n){if(Vf(t))return function(e,t){switch(t){case"HS256":case"HS384":case"HS512":{if(!xf(e.algorithm,"HMAC"))throw Hf("HMAC");const n=parseInt(t.slice(2),10);if(wf(e.algorithm.hash)!==n)throw Hf("SHA-".concat(n),"algorithm.hash");break}case"RS256":case"RS384":case"RS512":{if(!xf(e.algorithm,"RSASSA-PKCS1-v1_5"))throw Hf("RSASSA-PKCS1-v1_5");const n=parseInt(t.slice(2),10);if(wf(e.algorithm.hash)!==n)throw Hf("SHA-".concat(n),"algorithm.hash");break}case"PS256":case"PS384":case"PS512":{if(!xf(e.algorithm,"RSA-PSS"))throw Hf("RSA-PSS");const n=parseInt(t.slice(2),10);if(wf(e.algorithm.hash)!==n)throw Hf("SHA-".concat(n),"algorithm.hash");break}case Tf()&&"EdDSA":if(!xf(e.algorithm,"NODE-ED25519"))throw Hf("NODE-ED25519");break;case"ES256":case"ES384":case"ES512":{if(!xf(e.algorithm,"ECDSA"))throw Hf("ECDSA");const n=Ff(t);if(e.algorithm.namedCurve!==n)throw Hf(n,"algorithm.namedCurve");break}default:throw new TypeError("CryptoKey does not support this operation")}for(var n=arguments.length,i=new Array(n>2?n-2:0),l=2;l<n;l++)i[l-2]=arguments[l];zf(e,i)}(t,e,n),t;if(t instanceof Uint8Array){if(!e.startsWith("HS"))throw new TypeError(Pf(t,...jf));return Wf.subtle.importKey("raw",t,{hash:"SHA-".concat(e.slice(-3)),name:"HMAC"},!1,[n])}throw new TypeError(Pf(t,...jf,"Uint8Array"))}const Of=async(e,t,n,i)=>{const l=await Df(e,t,"verify");((e,t)=>{if(e.startsWith("RS")||e.startsWith("PS")){const{modulusLength:n}=t.algorithm;if("number"!=typeof n||n<2048)throw new TypeError("".concat(e," requires key modulusLength to be 2048 bits or larger"))}})(e,l);const o=function(e,t){const n="SHA-".concat(e.slice(-3));switch(e){case"HS256":case"HS384":case"HS512":return{hash:n,name:"HMAC"};case"PS256":case"PS384":case"PS512":return{hash:n,name:"RSA-PSS",saltLength:e.slice(-3)>>3};case"RS256":case"RS384":case"RS512":return{hash:n,name:"RSASSA-PKCS1-v1_5"};case"ES256":case"ES384":case"ES512":return{hash:n,name:"ECDSA",namedCurve:t.namedCurve};case Tf()&&"EdDSA":const{namedCurve:i}=t;return{name:i,namedCurve:i};default:throw new Kf("alg ".concat(e," is not supported either by JOSE or your javascript runtime"))}}(e,l.algorithm);try{return await Wf.subtle.verify(o,l,n,i)}catch(e){return!1}};async function Af(e,t,n){var i;if(!Qf(e))throw new Nf("Flattened JWS must be an object");if(void 0===e.protected&&void 0===e.header)throw new Nf('Flattened JWS must have either of the "protected" or "header" members');if(void 0!==e.protected&&"string"!=typeof e.protected)throw new Nf("JWS Protected Header incorrect type");if(void 0===e.payload)throw new Nf("JWS Payload missing");if("string"!=typeof e.signature)throw new Nf("JWS Signature missing or incorrect type");if(void 0!==e.header&&!Qf(e.header))throw new Nf("JWS Unprotected Header incorrect type");let l={};if(e.protected){const t=Rf(e.protected);try{l=JSON.parse(Sf.decode(t))}catch(e){throw new Nf("JWS Protected Header is invalid")}}if(!function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];const i=t.filter(Boolean);if(0===i.length||1===i.length)return!0;let l;for(const e of i){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 Nf("JWS Protected and JWS Unprotected Header Parameter names must be disjoint");const o={...l,...e.header},c=function(e,t,n,i,l){if(void 0!==l.crit&&void 0===i.crit)throw new e('"crit" (Critical) Header Parameter MUST be integrity protected');if(!i||void 0===i.crit)return new Set;if(!Array.isArray(i.crit)||0===i.crit.length||i.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!==n?new Map([...Object.entries(n),...t.entries()]):t;for(const t of i.crit){if(!o.has(t))throw new Kf('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===i[t])throw new e('Extension Header Parameter "'.concat(t,'" MUST be integrity protected'))}return new Set(i.crit)}(Nf,new Map([["b64",!0]]),null==n?void 0:n.crit,l,o);let a=!0;if(c.has("b64")&&(a=l.b64,"boolean"!=typeof a))throw new Nf('The "b64" (base64url-encode payload) Header Parameter must be a boolean');const{alg:r}=o;if("string"!=typeof r||!r)throw new Nf('JWS "alg" (Algorithm) Header Parameter missing or invalid');const s=n&&((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",n.algorithms);if(s&&!s.has(r))throw new Yf('"alg" (Algorithm) Header Parameter not allowed');if(a){if("string"!=typeof e.payload)throw new Nf("JWS Payload must be a string")}else if("string"!=typeof e.payload&&!(e.payload instanceof Uint8Array))throw new Nf("JWS Payload must be a string or an Uint8Array instance");let d=!1;"function"==typeof t&&(t=await t(l,e),d=!0),Ef(r,t,"verify");const u=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];const i=t.reduce(((e,t)=>{let{length:n}=t;return e+n}),0),l=new Uint8Array(i);let o=0;return t.forEach((e=>{l.set(e,o),o+=e.length})),l}(If.encode(null!==(i=e.protected)&&void 0!==i?i:""),If.encode("."),"string"==typeof e.payload?If.encode(e.payload):e.payload),Z=Rf(e.signature);if(!await Of(r,t,Z,u))throw new Lf;let h;h=a?Rf(e.payload):"string"==typeof e.payload?If.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),d?{...b,key:t}:b}var _f=e=>Math.floor(e.getTime()/1e3);const qf=86400,$f=/^(\d+|\d+\.\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)$/i;var ev=e=>{const t=$f.exec(e);if(!t)throw new TypeError("Invalid time period format");const n=parseFloat(t[1]);switch(t[2].toLowerCase()){case"sec":case"secs":case"second":case"seconds":case"s":return Math.round(n);case"minute":case"minutes":case"min":case"mins":case"m":return Math.round(60*n);case"hour":case"hours":case"hr":case"hrs":case"h":return Math.round(3600*n);case"day":case"days":case"d":return Math.round(n*qf);case"week":case"weeks":case"w":return Math.round(604800*n);default:return Math.round(31557600*n)}};const tv=e=>e.toLowerCase().replace(/^application\//,""),nv=(e,t)=>"string"==typeof e?t.includes(e):!!Array.isArray(e)&&t.some(Set.prototype.has.bind(new Set(e)));async function iv(e,t,n){var i;const l=await async function(e,t,n){if(e instanceof Uint8Array&&(e=Sf.decode(e)),"string"!=typeof e)throw new Nf("Compact JWS must be a string or Uint8Array");const{0:i,1:l,2:o,length:c}=e.split(".");if(3!==c)throw new Nf("Invalid Compact JWS");const a=await Af({payload:l,protected:i,signature:o},t,n),r={payload:a.payload,protectedHeader:a.protectedHeader};return"function"==typeof t?{...r,key:a.key}:r}(e,t,n);if((null===(i=l.protectedHeader.crit)||void 0===i?void 0:i.includes("b64"))&&!1===l.protectedHeader.b64)throw new Cf("JWTs MUST NOT use unencoded payload");const o=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{typ:i}=n;if(i&&("string"!=typeof e.typ||tv(e.typ)!==tv(i)))throw new ff('unexpected "typ" JWT header value',"typ","check_failed");let l;try{l=JSON.parse(Sf.decode(t))}catch(e){}if(!Qf(l))throw new Cf("JWT Claims Set must be a top-level JSON object");const{issuer:o}=n;if(o&&!(Array.isArray(o)?o:[o]).includes(l.iss))throw new ff('unexpected "iss" claim value',"iss","check_failed");const{subject:c}=n;if(c&&l.sub!==c)throw new ff('unexpected "sub" claim value',"sub","check_failed");const{audience:a}=n;if(a&&!nv(l.aud,"string"==typeof a?[a]:a))throw new ff('unexpected "aud" claim value',"aud","check_failed");let r;switch(typeof n.clockTolerance){case"string":r=ev(n.clockTolerance);break;case"number":r=n.clockTolerance;break;case"undefined":r=0;break;default:throw new TypeError("Invalid clockTolerance option type")}const{currentDate:s}=n,d=_f(s||new Date);if((void 0!==l.iat||n.maxTokenAge)&&"number"!=typeof l.iat)throw new ff('"iat" claim must be a number',"iat","invalid");if(void 0!==l.nbf){if("number"!=typeof l.nbf)throw new ff('"nbf" claim must be a number',"nbf","invalid");if(l.nbf>d+r)throw new ff('"nbf" claim timestamp check failed',"nbf","check_failed")}if(void 0!==l.exp){if("number"!=typeof l.exp)throw new ff('"exp" claim must be a number',"exp","invalid");if(l.exp<=d-r)throw new vf('"exp" claim timestamp check failed',"exp","check_failed")}if(n.maxTokenAge){const e=d-l.iat;if(e-r>("number"==typeof n.maxTokenAge?n.maxTokenAge:ev(n.maxTokenAge)))throw new vf('"iat" claim timestamp check failed (too far in the past)',"iat","check_failed");if(e<0-r)throw new ff('"iat" claim timestamp check failed (it should be in the past)',"iat","check_failed")}return l}(l.protectedHeader,l.payload,n),c={payload:o,protectedHeader:l.protectedHeader};return"function"==typeof t?{...c,key:l.key}:c}function lv(e){return Qf(e)}class ov{constructor(e){if(this._cached=new WeakMap,!function(e){return e&&"object"==typeof e&&Array.isArray(e.keys)&&e.keys.every(lv)}(e))throw new Jf("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:n,kid:i}={...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 Kf('Unsupported "alg" value for a JSON Web Key Set')}}(n),o=this._jwks.keys.filter((e=>{let t=l===e.kty;if(t&&"string"==typeof i&&(t=i===e.kid),t&&"string"==typeof e.alg&&(t=n===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"===n&&(t="Ed25519"===e.crv||"Ed448"===e.crv),t)switch(n){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 kf;if(1!==a)throw new Uf;const r=this._cached.get(c)||this._cached.set(c,{}).get(c);if(void 0===r[n]){const e=await async function(e,t,n){if(!Qf(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!=n||(n=!0!==e.ext),n?Mf({...e,alg:t,ext:!1}):Rf(e.k);case"RSA":if(void 0!==e.oth)throw new Kf('RSA JWK "oth" (Other Primes Info) Parameter value is not supported');case"EC":case"OKP":return Mf({...e,alg:t});default:throw new Kf('Unsupported "kty" (Key Type) Parameter value')}}({...c,ext:!0},n);if(e instanceof Uint8Array||"public"!==e.type)throw new Jf("JSON Web Key Set members must be public keys");r[n]=e}return r[n]}}var cv={exports:{}},av={exports:{}},rv=i(mR);!function(e,t){var n=rv,i=n.Buffer;function l(e,t){for(var n in e)t[n]=e[n]}function o(e,t,n){return i(e,t,n)}i.from&&i.alloc&&i.allocUnsafe&&i.allocUnsafeSlow?e.exports=n:(l(n,t),t.Buffer=o),o.prototype=Object.create(i.prototype),l(i,o),o.from=function(e,t,n){if("number"==typeof e)throw new TypeError("Argument must not be a number");return i(e,t,n)},o.alloc=function(e,t,n){if("number"!=typeof e)throw new TypeError("Argument must be a number");var l=i(e);return void 0!==t?"string"==typeof n?l.fill(t,n):l.fill(t):l.fill(0),l},o.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return i(e)},o.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return n.SlowBuffer(e)}}(av,av.exports);var sv=65536,dv=4294967295;var uv=av.exports.Buffer,Zv=t.crypto||t.msCrypto;Zv&&Zv.getRandomValues?cv.exports=function(e,t){if(e>dv)throw new RangeError("requested too many random bytes");var n=uv.allocUnsafe(e);if(e>0)if(e>sv)for(var i=0;i<e;i+=sv)Zv.getRandomValues(n.slice(i,i+sv));else Zv.getRandomValues(n);if("function"==typeof t)return SI.nextTick((function(){t(null,n)}));return n}:cv.exports=function(){throw new Error("Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11")};var hv=cv.exports;class bv{base64URLEncode(e){return yf.encode(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}base64URLDecode(e){return yf.decode(e).toString()}hashSha256(e){return NS.from(Xf((new TextEncoder).encode(e)))}generateRandomBytes(e){return hv(e)}verifyJwt(e,t,n,i,l,o,c,a){const r={algorithms:n,audience:i,clockTolerance:c,subject:o};return(null==a||a)&&(r.issuer=l),iv(e,(s={keys:[t]},ov.prototype.getKey.bind(new ov(s))),r).then((()=>Promise.resolve(!0))).catch((e=>{var t;return Promise.reject(new BW("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 s}}const mv=(t,n,i)=>kW(void 0,void 0,void 0,(function*(){var l;const o=(t=>{switch(t){case e.Storage.LocalStorage:return new of;case e.Storage.SessionStorage:return new af;case e.Storage.BrowserMemory:return new cf;default:return new af}})(n.storage),c=new bv,a=new AW;yield a.initialize(n,o,c,t);const r=new AV(a),s=a.getDataLayer(),d=yield _V((()=>kW(void 0,void 0,void 0,(function*(){return a.getSignOutURL()}))),null!==(l=n.storage)&&void 0!==l?l:e.Storage.SessionStorage,(e=>s.setSessionDataParameter(xW,null!=e?e:""))),u=i(a,r);let Z=!1;const h=lf.getInstance();let b,m,p=!0;(null==h?void 0:h.init)&&(yield h.init(!0,(e=>kW(void 0,void 0,void 0,(function*(){yield u.attachTokenToRequestConfig(e)})))));const y=()=>kW(void 0,void 0,void 0,(function*(){const e=yield a.getOIDCServiceEndpoints(),t=yield s.getConfigData();u.initializeSessionManger(t,e,(()=>kW(void 0,void 0,void 0,(function*(){return(yield a.getBasicUserInfo()).sessionState}))),(e=>kW(void 0,void 0,void 0,(function*(){return a.getAuthorizationURL(e)}))),d)})),G=()=>kW(void 0,void 0,void 0,(function*(){return yield d.receivePromptNoneResponse((e=>kW(void 0,void 0,void 0,(function*(){yield s.setSessionDataParameter(xW,null!=e?e:"")}))))})),X=e=>{e.preventSignOutURLUpdate&&(Z=!0)},W=(e,t,n,i)=>kW(void 0,void 0,void 0,(function*(){return yield u.requestAccessToken(e,t,y,void 0,n,i)})),V=function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return kW(void 0,void 0,void 0,(function*(){const n=yield s.getConfigData(),i=yield a.getAuthorizationURL(Object.assign({prompt:"none",state:xV},t)),l=new URL(i);l.searchParams.set("response_mode","query");const o=l.toString();if(n.storage===e.Storage.BrowserMemory&&n.enablePKCE){const e=l.searchParams.get(zW);DV.setPKCE(jW.extractPKCEKeyFromStateParam(null!=e?e:""),yield a.getPKCECode(null!=e?e:""))}return o}))};return{disableHttpHandler:()=>(u.disableHttpHandler(h),p=!1,!0),enableHttpHandler:()=>(u.enableHttpHandler(h),p=!0,!0),getAccessToken:()=>kW(void 0,void 0,void 0,(function*(){return u.getAccessToken()})),getBasicUserInfo:()=>kW(void 0,void 0,void 0,(function*(){return u.getBasicUserInfo()})),getConfigData:()=>kW(void 0,void 0,void 0,(function*(){return yield s.getConfigData()})),getCryptoHelper:()=>kW(void 0,void 0,void 0,(function*(){return u.getCryptoHelper()})),getDataLayer:()=>kW(void 0,void 0,void 0,(function*(){return u.getDataLayer()})),getDecodedIDToken:()=>kW(void 0,void 0,void 0,(function*(){return u.getDecodedIDToken()})),getHttpClient:()=>h,getIDToken:()=>kW(void 0,void 0,void 0,(function*(){return u.getIDToken()})),getOIDCServiceEndpoints:()=>kW(void 0,void 0,void 0,(function*(){return u.getOIDCServiceEndpoints()})),httpRequest:e=>kW(void 0,void 0,void 0,(function*(){return yield u.httpRequest(h,e,p,b,m)})),httpRequestAll:e=>kW(void 0,void 0,void 0,(function*(){return yield u.httpRequestAll(e,h,p,b,m)})),isAuthenticated:()=>kW(void 0,void 0,void 0,(function*(){return u.isAuthenticated()})),isSessionActive:()=>kW(void 0,void 0,void 0,(function*(){return"true"===(yield s.getSessionStatus())})),refreshAccessToken:()=>kW(void 0,void 0,void 0,(function*(){try{return yield u.refreshAccessToken(X)}catch(e){return Promise.reject(e)}})),requestCustomGrant:e=>kW(void 0,void 0,void 0,(function*(){return yield u.requestCustomGrant(e,X)})),revokeAccessToken:()=>kW(void 0,void 0,void 0,(function*(){const e=yield r.getRefreshTimeoutTimer();return a.revokeAccessToken().then((()=>(d.reset(),r.clearRefreshTokenTimeout(e),Promise.resolve(!0)))).catch((e=>Promise.reject(e)))})),setHttpRequestErrorCallback:e=>{b=e},setHttpRequestFinishCallback:e=>{(null==h?void 0:h.setHttpRequestFinishCallback)&&h.setHttpRequestFinishCallback(e)},setHttpRequestStartCallback:e=>{(null==h?void 0:h.setHttpRequestStartCallback)&&h.setHttpRequestStartCallback(e)},setHttpRequestSuccessCallback:e=>{(null==h?void 0:h.setHttpRequestSuccessCallback)&&h.setHttpRequestSuccessCallback(e)},signIn:(t,i,l,o,c)=>kW(void 0,void 0,void 0,(function*(){var r,d,Z;const h=yield u.handleSignIn(G,y,void 0);if(h)return h;{let u,h,m,p={params:{}};if((null==n?void 0:n.responseMode)===e.ResponseMode.formPost&&i?(u=i,h=null!=l?l:"",m=null!=o?o:""):(u=null!==(r=new URL(window.location.href).searchParams.get(HW))&&void 0!==r?r:"",h=null!==(d=new URL(window.location.href).searchParams.get(xW))&&void 0!==d?d:"",m=null!==(Z=new URL(window.location.href).searchParams.get(zW))&&void 0!==Z?Z:"",DV.removeAuthorizationCode()),u&&m){b="true",kW(void 0,void 0,void 0,(function*(){yield s.setSessionStatus(b)}));const e=yield s.getTemporaryDataParameter(kV);return e&&"string"==typeof e&&(p=JSON.parse(e)),W(u,h,m,p)}return a.getAuthorizationURL(t).then((t=>kW(void 0,void 0,void 0,(function*(){if(n.storage===e.Storage.BrowserMemory&&n.enablePKCE){const e=jW.extractPKCEKeyFromStateParam(m);DV.setPKCE(e,yield a.getPKCECode(m))}return c&&s.setTemporaryDataParameter(kV,JSON.stringify(c)),location.href=t,yield DV.waitTillPageRedirect(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""})}))))}var b})),signOut:()=>kW(void 0,void 0,void 0,(function*(){return(yield a.isAuthenticated())&&!Z?location.href=yield a.getSignOutURL():location.href=DV.getSignOutURL(n.clientID,t),r.clearRefreshTokenTimeout(),yield s.removeOIDCProviderMetaData(),yield s.removeTemporaryData(),yield s.removeSessionData(),yield s.removeSessionStatus(),yield DV.waitTillPageRedirect(),!0})),trySignInSilently:(e,t)=>kW(void 0,void 0,void 0,(function*(){return yield u.trySignInSilently(V,W,d,e,t)})),updateConfig:e=>kW(void 0,void 0,void 0,(function*(){const t=yield s.getConfigData(),n=!(t&&t.endpoints&&t.endpoints.checkSessionIframe&&e&&e.endpoints&&e.endpoints.checkSessionIframe&&t.endpoints.checkSessionIframe===e.endpoints.checkSessionIframe),i=Object.assign(Object.assign({},t),e);yield a.updateConfig(i),i.enableOIDCSessionManagement&&n&&(d.reset(),y())}))}})),pv=(t,n,i,l)=>kW(void 0,void 0,void 0,(function*(){var o;let c;const a=null!==(o=null==n?void 0:n.requestTimeout)&&void 0!==o?o:6e4;let r=!0,s=!1;const d=(t=>{switch(t){case e.Storage.LocalStorage:return new of;case e.Storage.SessionStorage:return new af;case e.Storage.BrowserMemory:return new cf;default:return new af}})(n.storage),u=new bv,Z=new AW;yield Z.initialize(n,d,u,t);const h=new AV(Z),b=yield _V((()=>kW(void 0,void 0,void 0,(function*(){const e={type:lV};try{return yield y(e)}catch(e){return DV.getSignOutURL(n.clientID,t)}}))),n.storage,(e=>G(e))),m=l(Z,h),p=new i,y=e=>{const t=new MessageChannel;return p.postMessage(e,[t.port2]),new Promise(((e,n)=>{const i=setTimeout((()=>{n(new BW("SPA-WEB_WORKER_CLIENT-COM-TO01","Operation timed out.","No response was received from the web worker for "+a/1e3+" since dispatching the request"))}),a);return t.port1.onmessage=l=>{let{data:o}=l;if(clearTimeout(i),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 n(o.error?JSON.parse(o.error):null)}}))},G=e=>y({data:e,type:gV}),X=()=>y({type:fV}),W=()=>kW(void 0,void 0,void 0,(function*(){const e=yield f(),t=yield v();m.initializeSessionManger(t,e,(()=>kW(void 0,void 0,void 0,(function*(){return(yield Y()).sessionState}))),(e=>kW(void 0,void 0,void 0,(function*(){return(yield I(e)).authorizationURL}))),b)})),V=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return kW(void 0,void 0,void 0,(function*(){var t;const n=yield v(),i={data:Object.assign({prompt:"none",state:xV},e),type:XV},l=yield y(i),o=jW.extractPKCEKeyFromStateParam(null!==(t=new URL(l.authorizationURL).searchParams.get(zW))&&void 0!==t?t:"");l.pkce&&n.enablePKCE&&DV.setPKCE(o,l.pkce);const c=l.authorizationURL,a=new URL(c);a.searchParams.set("response_mode","query");return a.toString()}))},I=e=>kW(void 0,void 0,void 0,(function*(){const t=yield v();return y({data:e,type:XV}).then((e=>kW(void 0,void 0,void 0,(function*(){var n;if(e.pkce&&t.enablePKCE){const t=jW.extractPKCEKeyFromStateParam(null!==(n=new URL(e.authorizationURL).searchParams.get(zW))&&void 0!==n?n:"");DV.setPKCE(t,e.pkce)}return Promise.resolve(e)}))))})),S=(e,n,i,l)=>kW(void 0,void 0,void 0,(function*(){const o=yield v(),c=jW.extractPKCEKeyFromStateParam(i),a={data:{code:e,pkce:o.enablePKCE?DV.getPKCE(c):void 0,sessionState:n,state:i,tokenRequestConfig:l},type:WV};return o.enablePKCE&&DV.removePKCE(c),y(a).then((e=>y({type:IV}).then((n=>(DV.setSignOutURL(n,o.clientID,t),o.enableOIDCSessionManagement&&W(),X(),Promise.resolve(e)))).catch((e=>Promise.reject(e))))).catch((e=>Promise.reject(e)))})),R=()=>kW(void 0,void 0,void 0,(function*(){return yield b.receivePromptNoneResponse((e=>kW(void 0,void 0,void 0,(function*(){return G(e)}))))})),g=()=>kW(void 0,void 0,void 0,(function*(){if(yield K())return yield X(),n.enableOIDCSessionManagement&&W(),Y()})),f=()=>y({type:hV}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),v=()=>y({type:CV}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),Y=()=>y({type:bV}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),K=()=>y({type:VV}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e)));return{disableHttpHandler:()=>y({type:GV}).then((()=>(r=!1,Promise.resolve(!0)))).catch((e=>Promise.reject(e))),enableHttpHandler:()=>y({type:yV}).then((()=>(r=!0,Promise.resolve(!0)))).catch((e=>Promise.reject(e))),getBasicUserInfo:Y,getConfigData:v,getCryptoHelper:()=>y({type:pV}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),getDecodedIDPIDToken:()=>y({type:"get-decoded-idp-id-token"}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),getDecodedIDToken:()=>y({type:mV}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),getIDToken:()=>y({type:YV}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),getOIDCServiceEndpoints:f,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 y({data:e,type:oV}).then((e=>Promise.resolve(e))).catch((e=>kW(void 0,void 0,void 0,(function*(){return r&&("function"==typeof c.requestErrorCallback&&(yield c.requestErrorCallback(e)),"function"==typeof c.requestFinishCallback&&c.requestFinishCallback()),Promise.reject(e)}))))},httpRequestAll:e=>y({data:e,type:cV}).then((e=>Promise.resolve(e))).catch((e=>kW(void 0,void 0,void 0,(function*(){return r&&("function"==typeof c.requestErrorCallback&&(yield c.requestErrorCallback(e)),"function"==typeof c.requestFinishCallback&&c.requestFinishCallback()),Promise.reject(e)})))),httpStreamRequest: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(e=>{const t=new MessageChannel;return p.postMessage(e,[t.port2]),new Promise(((e,n)=>{const i=setTimeout((()=>{n(new BW("SPA-WEB_WORKER_CLIENT-COMS-TO01","Stream operation timed out.","No response was received from the web worker for "+a/1e3+" since dispatching the stream request"))}),a);return t.port1.onmessage=l=>{let{data:o}=l;clearTimeout(i),t.port1.close(),t.port2.close(),(null==o?void 0:o.success)?e(null==o?void 0:o.data):n(o.error?JSON.parse(o.error):null)}}))})({data:e,type:aV})},initialize:()=>{c||(c={requestErrorCallback:()=>Promise.resolve(),requestFinishCallback:()=>null,requestStartCallback:()=>null,requestSuccessCallback:()=>null}),p.onmessage=e=>{let{data:t}=e;switch(t.type){case ZV:(null==c?void 0:c.requestFinishCallback)&&(null==c||c.requestFinishCallback());break;case dV:(null==c?void 0:c.requestStartCallback)&&(null==c||c.requestStartCallback());break;case uV:(null==c?void 0:c.requestSuccessCallback)&&(null==c||c.requestSuccessCallback(t.data?JSON.parse(t.data):null))}};return y({data:n,type:iV}).then((()=>Promise.resolve(!0))).catch((e=>Promise.reject(e)))},isAuthenticated:K,refreshAccessToken:()=>y({type:SV}),requestCustomGrant:e=>y({data:e,type:rV}).then((t=>(e.preventSignOutURLUpdate&&(s=!0),Promise.resolve(t)))).catch((e=>Promise.reject(e))),revokeAccessToken:()=>y({type:sV}).then((e=>(b.reset(),Promise.resolve(e)))).catch((e=>Promise.reject(e))),setHttpRequestErrorCallback:e=>{e&&"function"==typeof e&&(c.requestErrorCallback=e)},setHttpRequestFinishCallback:e=>{e&&"function"==typeof e&&(c.requestFinishCallback=e)},setHttpRequestStartCallback:e=>{e&&"function"==typeof e&&(c.requestStartCallback=e)},setHttpRequestSuccessCallback:e=>{e&&"function"==typeof e&&(c.requestSuccessCallback=e)},signIn:(t,i,l,o,c)=>kW(void 0,void 0,void 0,(function*(){var a,r,s;const d=yield m.handleSignIn(R,W,g);if(d)return d;{let d,u,Z;return(null==n?void 0:n.responseMode)===e.ResponseMode.formPost&&i?(d=i,u=null!=l?l:"",Z=null!=o?o:""):(d=null!==(a=new URL(window.location.href).searchParams.get(HW))&&void 0!==a?a:"",u=null!==(r=new URL(window.location.href).searchParams.get(xW))&&void 0!==r?r:"",Z=null!==(s=new URL(window.location.href).searchParams.get(zW))&&void 0!==s?s:"",DV.removeAuthorizationCode()),d&&Z?S(d,u,Z,c):I(t).then((e=>kW(void 0,void 0,void 0,(function*(){return location.href=e.authorizationURL,yield DV.waitTillPageRedirect(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""})})))).catch((e=>Promise.reject(e)))}})),signOut:()=>new Promise(((e,i)=>{if(!s){return y({type:lV}).then((t=>kW(void 0,void 0,void 0,(function*(){return window.location.href=t,yield DV.waitTillPageRedirect(),e(!0)})))).catch((e=>i(e)))}window.location.href=DV.getSignOutURL(n.clientID,t),DV.waitTillPageRedirect().then((()=>Promise.resolve(!0)))})),trySignInSilently:(e,t)=>kW(void 0,void 0,void 0,(function*(){return yield m.trySignInSilently(V,S,b,e,t)})),updateConfig:e=>kW(void 0,void 0,void 0,(function*(){const t=yield v(),n=!(t&&t.endpoints&&t.endpoints.checkSessionIframe&&e&&e.endpoints&&e.endpoints.checkSessionIframe&&t.endpoints.checkSessionIframe===e.endpoints.checkSessionIframe),i=Object.assign(Object.assign({},t),e),l={data:i,type:vV};yield y(l),i.enableOIDCSessionManagement&&n&&(b.reset(),W())}))}})),yv={autoLogoutOnTokenRefreshError:!0,checkSessionInterval:3,clientHost:origin,enableOIDCSessionManagement:!1,periodicTokenRefresh:!1,sessionRefreshInterval:300,storage:e.Storage.SessionStorage};class Gv{constructor(e){this._authHelper=OV,this._worker=nV,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||OV}instantiateWorker(e){this._worker=e||nV}_isInitialized(){return kW(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 kW(this,void 0,void 0,(function*(){return(yield this._isInitialized())?!(e&&!(yield this.isAuthenticated()))||Promise.reject(new BW("SPA-AUTH_CLIENT-VM-IV02","The user is not authenticated.","The user must be authenticated first.")):Promise.reject(new BW("SPA-AUTH_CLIENT-VM-NF01","The SDK is not initialized.","The SDK must be initialized first."))}))}static getInstance(e){var t,n;return e&&(null===(t=this._instances)||void 0===t?void 0:t.get(e))?this._instances.get(e):!e&&(null===(n=this._instances)||void 0===n?void 0:n.get(0))?this._instances.get(0):e?(this._instances.set(e,new Gv(e)),this._instances.get(e)):(this._instances.set(0,new Gv(0)),this._instances.get(0))}initialize(t,n,i){var l,o,c,a;return kW(this,void 0,void 0,(function*(){this._storage=null!==(l=t.storage)&&void 0!==l?l:e.Storage.SessionStorage,this._initialized=!1,this._startedInitialize=!0,n&&this.instantiateAuthHelper(n),i&&this.instantiateWorker(i);const r=yield null===(o=this._client)||void 0===o?void 0:o.getConfigData();if(this._storage!==e.Storage.WebWorker){const e=t,n=Object.assign({},yv),i=Object.assign(Object.assign({},n),e);return this._client&&(!this._client||r&&0!==(null===(c=Object.keys(r))||void 0===c?void 0:c.length))||(this._client=yield mv(this._instanceID,i,((e,t)=>new this._authHelper(e,t)))),this._initialized=!0,this._onInitialize&&this._onInitialize(!0),i.autoLogoutOnTokenRefreshError?(window.addEventListener("message",(e=>{var t;(null===(t=null==e?void 0:e.data)||void 0===t?void 0:t.type)===RV&&this.signOut()})),Promise.resolve(!0)):Promise.resolve(!0)}if(!this._client||this._client&&(!r||0===(null===(a=Object.keys(r))||void 0===a?void 0:a.length))){const e=t;return this._client=yield pv(this._instanceID,Object.assign(Object.assign({},yv),e),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)}))}getBasicUserInfo(){var e;return kW(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(e=this._client)||void 0===e?void 0:e.getBasicUserInfo()}))}signIn(e,t,n,i,l){var o;return kW(this,void 0,void 0,(function*(){if(yield this._isInitialized(),DV.canContinueSignIn(Boolean(null==e?void 0:e.callOnlyOnRedirect),t))return null==e||delete e.callOnlyOnRedirect,null===(o=this._client)||void 0===o?void 0:o.signIn(e,t,n,i,l).then((e=>(this._onSignInCallback&&(e.allowedScopes||e.displayName||e.email||e.username)&&this._onSignInCallback(e),e)))}))}trySignInSilently(e,t){var n;return kW(this,void 0,void 0,(function*(){if(yield this._isInitialized(),!DV.wasSignInCalled())return null===(n=this._client)||void 0===n?void 0:n.trySignInSilently(e,t).then((e=>{if(this._onSignInCallback&&e){const t=e;(t.allowedScopes||t.displayName||t.email||t.username)&&this._onSignInCallback(t)}return e}))}))}signOut(){var e,t;return kW(this,void 0,void 0,(function*(){yield this._validateMethod(!1);return null!==(t=yield null===(e=this._client)||void 0===e?void 0:e.signOut())&&void 0!==t&&t}))}httpRequest(e){var t;return kW(this,void 0,void 0,(function*(){return yield this._validateMethod(!1),null===(t=this._client)||void 0===t?void 0:t.httpRequest(e)}))}httpRequestAll(e){var t;return kW(this,void 0,void 0,(function*(){return yield this._validateMethod(!1),null===(t=this._client)||void 0===t?void 0:t.httpRequestAll(e)}))}httpStreamRequest(t){return kW(this,void 0,void 0,(function*(){if(yield this._validateMethod(!1),this._storage!==e.Storage.WebWorker)throw new BW("SPA-AUTH_CLIENT-HSR-IV01","Streaming is only supported with WebWorker storage.","The httpStreamRequest method requires storage type to be set to webWorker.");return this._client.httpStreamRequest(t)}))}requestCustomGrant(e){var t,n;return kW(this,void 0,void 0,(function*(){if(e.signInRequired,yield this._validateMethod(),!e.id)return Promise.reject(new BW("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 i=yield null===(t=this._client)||void 0===t?void 0:t.requestCustomGrant(e),l=this._onCustomGrant.get(e.id);return l&&l(null===(n=this._onCustomGrant)||void 0===n?void 0:n.get(e.id)),i}))}revokeAccessToken(){var e;return kW(this,void 0,void 0,(function*(){yield this._validateMethod();const t=yield null===(e=this._client)||void 0===e?void 0:e.revokeAccessToken();return this._onEndUserSession&&(yield this._onEndUserSession(t)),t}))}getOIDCServiceEndpoints(){var e;return kW(this,void 0,void 0,(function*(){return yield this._isInitialized(),null===(e=this._client)||void 0===e?void 0:e.getOIDCServiceEndpoints()}))}getHttpClient(){if(this._client){if(this._storage!==e.Storage.WebWorker){return this._client.getHttpClient()}throw new BW("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 BW("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.")}getDecodedIDToken(){var e;return kW(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(e=this._client)||void 0===e?void 0:e.getDecodedIDToken()}))}getCryptoHelper(){var e;return kW(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(e=this._client)||void 0===e?void 0:e.getCryptoHelper()}))}getIDToken(){var e;return kW(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(e=this._client)||void 0===e?void 0:e.getIDToken()}))}getAccessToken(){return kW(this,void 0,void 0,(function*(){if(yield this._validateMethod(),this._storage&&[(e.Storage.WebWorker,e.Storage.BrowserMemory)].includes(this._storage))return Promise.reject(new BW("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()}))}getIDPAccessToken(){return kW(this,void 0,void 0,(function*(){if(yield this._validateMethod(),this._storage&&[(e.Storage.WebWorker,e.Storage.BrowserMemory)].includes(this._storage))return Promise.reject(new BW("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()}))}getDataLayer(){return kW(this,void 0,void 0,(function*(){if(yield this._validateMethod(),this._storage&&[(e.Storage.WebWorker,e.Storage.BrowserMemory)].includes(this._storage))return Promise.reject(new BW("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()}))}getConfigData(){var e;return kW(this,void 0,void 0,(function*(){return null===(e=this._client)||void 0===e?void 0:e.getConfigData()}))}refreshAccessToken(){var e;return kW(this,void 0,void 0,(function*(){return yield this._validateMethod(!1),null===(e=this._client)||void 0===e?void 0:e.refreshAccessToken()}))}isAuthenticated(){var e;return kW(this,void 0,void 0,(function*(){return yield this._isInitialized(),null===(e=this._client)||void 0===e?void 0:e.isAuthenticated()}))}isSessionActive(){return kW(this,void 0,void 0,(function*(){if(yield this._isInitialized(),this._storage&&[(e.Storage.WebWorker,e.Storage.BrowserMemory)].includes(this._storage))return Promise.reject(new BW("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 t=this._client;return null==t?void 0:t.isSessionActive()}))}on(t,n,i){var l,o,c,a;return kW(this,void 0,void 0,(function*(){if(yield this._isInitialized(),!n||"function"!=typeof n)throw new BW("SPA-AUTH_CLIENT-ON-IV02","Invalid callback function.","The provided callback function is invalid.");switch(t){case e.Hooks.SignIn:this._onSignInCallback=n;break;case e.Hooks.SignOut:this._onSignOutCallback=n,(yield DV.isSignOutSuccessful())&&this._onSignOutCallback();break;case e.Hooks.RevokeAccessToken:this._onEndUserSession=n;break;case e.Hooks.Initialize:this._onInitialize=n;break;case e.Hooks.HttpRequestError:null===(l=this._client)||void 0===l||l.setHttpRequestErrorCallback(n);break;case e.Hooks.HttpRequestFinish:null===(o=this._client)||void 0===o||o.setHttpRequestFinishCallback(n);break;case e.Hooks.HttpRequestStart:null===(c=this._client)||void 0===c||c.setHttpRequestStartCallback(n);break;case e.Hooks.HttpRequestSuccess:null===(a=this._client)||void 0===a||a.setHttpRequestSuccessCallback(n);break;case e.Hooks.CustomGrant:i&&this._onCustomGrant.set(i,n);break;case e.Hooks.SignOutFailed:{this._onSignOutFailedCallback=n;const e=DV.didSignOutFail();e&&this._onSignOutFailedCallback(e);break}default:throw new BW("SPA-AUTH_CLIENT-ON-IV01","Invalid hook.","The provided hook is invalid.")}}))}enableHttpHandler(){var e;return kW(this,void 0,void 0,(function*(){return yield this._isInitialized(),null===(e=this._client)||void 0===e?void 0:e.enableHttpHandler()}))}disableHttpHandler(){var e;return kW(this,void 0,void 0,(function*(){return yield this._isInitialized(),null===(e=this._client)||void 0===e?void 0:e.disableHttpHandler()}))}updateConfig(t){return kW(this,void 0,void 0,(function*(){if(yield this._isInitialized(),this._storage===e.Storage.WebWorker){const e=this._client;yield e.updateConfig(t)}else{const e=this._client;yield e.updateConfig(t)}}))}}Gv._instances=new Map;class Xv extends Worker{constructor(){super(...arguments),this.onmessage=()=>null}}return e.ASGARDEO_SESSION_ACTIVE="asgardeo-session-active",e.AUTHORIZATION_CODE=HW,e.AsgardeoAuthClient=AW,e.AsgardeoAuthException=BW,e.AsgardeoSPAClient=Gv,e.AuthenticationHelper=OV,e.AuthenticationUtils=jW,e.CLIENT_ID_TAG="{{clientID}}",e.CLIENT_SECRET_TAG="{{clientSecret}}",e.CryptoHelper=MW,e.DataLayer=DW,e.HttpError=zg,e.MainThreadClient=mv,e.OIDC_SCOPE="openid",e.PKCE_CODE_VERIFIER="pkce_code_verifier",e.PKCE_SEPARATOR="#",e.REFRESH_TOKEN_TIMER=LW,e.SCOPE_TAG="{{scope}}",e.SESSION_STATE=xW,e.SIGN_OUT_SUCCESS_PARAM=FW,e.SIGN_OUT_URL=wW,e.SPAHelper=AV,e.SPAUtils=DV,e.STATE=zW,e.SUPPORTED_SIGNATURE_ALGORITHMS=TW,e.TOKEN_REQUEST_CONFIG_KEY=kV,e.TOKEN_TAG="{{token}}",e.USERNAME_TAG="{{username}}",e.WebWorkerClass=Xv,e.WebWorkerClient=pv,e.workerReceiver=e=>{const t=self;let n;t.onmessage=t=>{let{data:c,ports:a}=t;return kW(void 0,void 0,void 0,(function*(){var t,r,s,d,u,Z;const h=a[0];if(c.type===iV||n)switch(c.type){case iV:try{const t=Object.assign({},c.data);n=yield((e,t)=>kW(void 0,void 0,void 0,(function*(){const n=new cf,i=new bv,l=new AW;yield l.initialize(e,n,i);const o=new AV(l),c=t(l,o),a=l.getDataLayer(),r=lf.getInstance();return(null==r?void 0:r.init)&&(yield r.init(!0,(e=>kW(void 0,void 0,void 0,(function*(){yield c.attachTokenToRequestConfig(e)}))))),{disableHttpHandler:()=>{c.disableHttpHandler(r)},enableHttpHandler:()=>{c.enableHttpHandler(r)},getAccessToken:()=>c.getAccessToken(),getAuthorizationURL:e=>kW(void 0,void 0,void 0,(function*(){return l.getAuthorizationURL(e).then((e=>kW(void 0,void 0,void 0,(function*(){var t;const n=null!==(t=new URL(e).searchParams.get(zW))&&void 0!==t?t:"",i=yield l.getPKCECode(n);return{authorizationURL:e,pkce:i}})))).catch((e=>Promise.reject(e)))})),getBasicUserInfo:()=>kW(void 0,void 0,void 0,(function*(){return c.getBasicUserInfo()})),getConfigData:()=>kW(void 0,void 0,void 0,(function*(){return a.getConfigData()})),getCryptoHelper:()=>kW(void 0,void 0,void 0,(function*(){return c.getCryptoHelper()})),getDecodedIDPIDToken:()=>kW(void 0,void 0,void 0,(function*(){return c.getDecodedIDPIDToken()})),getDecodedIDToken:()=>kW(void 0,void 0,void 0,(function*(){return c.getDecodedIDToken()})),getIDToken:()=>kW(void 0,void 0,void 0,(function*(){return c.getIDToken()})),getOIDCServiceEndpoints:()=>kW(void 0,void 0,void 0,(function*(){return c.getOIDCServiceEndpoints()})),getSignOutURL:()=>kW(void 0,void 0,void 0,(function*(){return yield l.getSignOutURL()})),httpRequest:e=>kW(void 0,void 0,void 0,(function*(){return yield c.httpRequest(r,e)})),httpRequestAll:e=>kW(void 0,void 0,void 0,(function*(){return yield c.httpRequestAll(e,r)})),isAuthenticated:()=>c.isAuthenticated(),refreshAccessToken:()=>kW(void 0,void 0,void 0,(function*(){try{return yield c.refreshAccessToken()}catch(e){return Promise.reject(e)}})),requestAccessToken:(e,t,n,i)=>kW(void 0,void 0,void 0,(function*(){return yield c.requestAccessToken(e,t,void 0,n,i)})),requestCustomGrant:e=>kW(void 0,void 0,void 0,(function*(){return yield c.requestCustomGrant(e)})),revokeAccessToken:()=>kW(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=>kW(void 0,void 0,void 0,(function*(){yield a.setSessionDataParameter(xW,e)})),signOut:()=>kW(void 0,void 0,void 0,(function*(){return o.clearRefreshTokenTimeout(),yield l.getSignOutURL()})),startAutoRefreshToken:()=>kW(void 0,void 0,void 0,(function*(){o.clearRefreshTokenTimeout(),o.refreshAccessTokenAutomatically(c)})),updateConfig:e=>kW(void 0,void 0,void 0,(function*(){yield l.updateConfig(e)}))}})))(t,e),n.setHttpRequestFinishCallback(o),n.setHttpRequestStartCallback(i),n.setHttpRequestSuccessCallback(l),h.postMessage(EV.generateSuccessMessage())}catch(e){h.postMessage(EV.generateFailureMessage(e))}break;case XV:n.getAuthorizationURL(null==c?void 0:c.data).then((e=>{h.postMessage(EV.generateSuccessMessage(e))})).catch((e=>{h.postMessage(EV.generateFailureMessage(e))}));break;case WV:n.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===(s=null==c?void 0:c.data)||void 0===s?void 0:s.pkce,null===(d=null==c?void 0:c.data)||void 0===d?void 0:d.state).then((e=>{h.postMessage(EV.generateSuccessMessage(e))})).catch((e=>{h.postMessage(EV.generateFailureMessage(e))}));break;case oV:{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 n=new FormData;for(const e in t)"formData"!==e&&n.append(e,t[e]);e.data=n}n.httpRequest(e).then((e=>{h.postMessage(EV.generateSuccessMessage(e))})).catch((e=>{h.postMessage(EV.generateFailureMessage(e))}));break}case aV:{const e=c.data;e.adapter="fetch",e.responseType="stream",n.httpRequest(e).then((e=>{var t;const n=null===(t=e)||void 0===t?void 0:t.data;n instanceof ReadableStream?h.postMessage({data:n,success:!0},[n]):h.postMessage(EV.generateSuccessMessage(e))})).catch((e=>{h.postMessage(EV.generateFailureMessage(e))}));break}case cV:n.httpRequestAll(c.data).then((e=>{h.postMessage(EV.generateSuccessMessage(e))})).catch((e=>{h.postMessage(EV.generateFailureMessage(e))}));break;case lV:try{h.postMessage(EV.generateSuccessMessage(yield n.signOut()))}catch(e){h.postMessage(EV.generateFailureMessage(e))}break;case rV:n.requestCustomGrant(c.data).then((e=>{h.postMessage(EV.generateSuccessMessage(e))})).catch((e=>{h.postMessage(EV.generateFailureMessage(e))}));break;case sV:n.revokeAccessToken().then((e=>{h.postMessage(EV.generateSuccessMessage(e))})).catch((e=>{h.postMessage(EV.generateFailureMessage(e))}));break;case hV:try{h.postMessage(EV.generateSuccessMessage(yield n.getOIDCServiceEndpoints()))}catch(e){h.postMessage(EV.generateFailureMessage(e))}break;case bV:try{h.postMessage(EV.generateSuccessMessage(yield n.getBasicUserInfo()))}catch(e){h.postMessage(EV.generateFailureMessage(e))}break;case mV:try{h.postMessage(EV.generateSuccessMessage(yield n.getDecodedIDToken()))}catch(e){h.postMessage(EV.generateFailureMessage(e))}break;case pV:try{h.postMessage(EV.generateSuccessMessage(yield n.getCryptoHelper()))}catch(e){h.postMessage(EV.generateFailureMessage(e))}break;case YV:try{h.postMessage(EV.generateSuccessMessage(yield n.getIDToken()))}catch(e){h.postMessage(EV.generateFailureMessage(e))}break;case yV:n.enableHttpHandler(),h.postMessage(EV.generateSuccessMessage());break;case GV:n.disableHttpHandler(),h.postMessage(EV.generateSuccessMessage());break;case VV:try{h.postMessage(EV.generateSuccessMessage(yield n.isAuthenticated()))}catch(e){h.postMessage(EV.generateFailureMessage(e))}break;case IV:try{h.postMessage(EV.generateSuccessMessage(yield n.getSignOutURL()))}catch(e){h.postMessage(EV.generateFailureMessage(e))}break;case SV:try{h.postMessage(EV.generateSuccessMessage(yield n.refreshAccessToken()))}catch(e){h.postMessage(EV.generateFailureMessage(e))}break;case fV:try{h.postMessage(EV.generateSuccessMessage(n.startAutoRefreshToken()))}catch(e){h.postMessage(EV.generateFailureMessage(e))}break;case gV:try{h.postMessage(EV.generateSuccessMessage(yield n.setSessionState(null==c?void 0:c.data)))}catch(e){h.postMessage(EV.generateFailureMessage(e))}break;case vV:try{h.postMessage(EV.generateSuccessMessage(yield n.updateConfig(null==c?void 0:c.data)))}catch(e){h.postMessage(EV.generateFailureMessage(e))}break;case CV:try{h.postMessage(EV.generateSuccessMessage(yield n.getConfigData()))}catch(e){h.postMessage(EV.generateFailureMessage(e))}break;default:null==h||h.postMessage(EV.generateFailureMessage(new BW("SPA-CLIENT_WORKER-ONMSG-IV02","The message type is invalid.","The message type provided, ".concat(c.type,", is invalid."))))}else h.postMessage(EV.generateFailureMessage(new BW("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 i=()=>{t.postMessage({type:dV})},l=e=>{var n;(null===(n=e)||void 0===n?void 0:n.data)instanceof ReadableStream||t.postMessage({data:JSON.stringify(null!=e?e:""),type:uV})},o=()=>{t.postMessage({type:ZV})}},Object.defineProperty(e,"__esModule",{value:!0}),e}({});
2
2
  //# sourceMappingURL=asgardeo-spa.production.min.js.map